From 9798e8b1f5ba774ff700a2136f7a5531f6f4dfb9 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Fri, 5 Aug 2022 08:09:08 +0000 Subject: [PATCH 001/465] Remove runtime dependency from solana-transaction-status (backport #26930) (#26942) Remove runtime dependency from solana-transaction-status (#26930) * Move RewardType out of runtime * Move collect_token_balances to solana-ledger * Remove solana-runtime dependency (cherry picked from commit 2dca239480780d36a1d6e55717989f10d75fc0cc) Co-authored-by: Tyera Eulberg --- Cargo.lock | 3 +- core/src/banking_stage.rs | 8 +- ledger/Cargo.toml | 3 + ledger/src/blockstore_processor.rs | 5 +- ledger/src/lib.rs | 1 + ledger/src/token_balances.rs | 477 +++++++++++++++++++++++ programs/bpf/Cargo.lock | 5 +- programs/bpf/Cargo.toml | 3 + programs/bpf/tests/programs.rs | 6 +- runtime/src/bank.rs | 24 +- sdk/src/lib.rs | 1 + sdk/src/reward_type.rs | 24 ++ transaction-status/Cargo.toml | 1 - transaction-status/src/lib.rs | 2 +- transaction-status/src/token_balances.rs | 476 +--------------------- 15 files changed, 527 insertions(+), 512 deletions(-) create mode 100644 ledger/src/token_balances.rs create mode 100644 sdk/src/reward_type.rs diff --git a/Cargo.lock b/Cargo.lock index f859ba86145cf3..429320ddbb1e66 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -5485,6 +5485,8 @@ dependencies = [ "solana-storage-proto", "solana-transaction-status", "solana-vote-program", + "spl-token", + "spl-token-2022", "static_assertions", "tempfile", "thiserror", @@ -6431,7 +6433,6 @@ dependencies = [ "solana-account-decoder", "solana-measure", "solana-metrics", - "solana-runtime", "solana-sdk 1.11.6", "solana-vote-program", "spl-associated-token-account", diff --git a/core/src/banking_stage.rs b/core/src/banking_stage.rs index b3cd01f828b8aa..b93bbf3d0420e2 100644 --- a/core/src/banking_stage.rs +++ b/core/src/banking_stage.rs @@ -23,7 +23,9 @@ use { solana_client::{connection_cache::ConnectionCache, tpu_connection::TpuConnection}, solana_entry::entry::hash_transactions, solana_gossip::{cluster_info::ClusterInfo, contact_info::ContactInfo}, - solana_ledger::blockstore_processor::TransactionStatusSender, + solana_ledger::{ + blockstore_processor::TransactionStatusSender, token_balances::collect_token_balances, + }, solana_measure::{measure, measure::Measure}, solana_metrics::inc_new_counter_info, solana_perf::{ @@ -57,9 +59,7 @@ use { transport::TransportError, }, solana_streamer::sendmmsg::batch_send, - solana_transaction_status::token_balances::{ - collect_token_balances, TransactionTokenBalancesSet, - }, + solana_transaction_status::token_balances::TransactionTokenBalancesSet, std::{ cmp, collections::HashMap, diff --git a/ledger/Cargo.toml b/ledger/Cargo.toml index 4ed6240598ac4d..cb0e6aa3c589e3 100644 --- a/ledger/Cargo.toml +++ b/ledger/Cargo.toml @@ -34,6 +34,7 @@ reed-solomon-erasure = { version = "5.0.3", features = ["simd-accel"] } serde = "1.0.138" serde_bytes = "0.11.6" sha2 = "0.10.2" +solana-account-decoder = { path = "../account-decoder", version = "=1.11.6" } solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.11.6" } solana-entry = { path = "../entry", version = "=1.11.6" } solana-frozen-abi = { path = "../frozen-abi", version = "=1.11.6" } @@ -50,6 +51,8 @@ solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.11.6" } solana-storage-proto = { path = "../storage-proto", version = "=1.11.6" } solana-transaction-status = { path = "../transaction-status", version = "=1.11.6" } solana-vote-program = { path = "../programs/vote", version = "=1.11.6" } +spl-token = { version = "=3.3.1", features = ["no-entrypoint"] } +spl-token-2022 = { version = "=0.4.2", features = ["no-entrypoint"] } static_assertions = "1.1.0" tempfile = "3.3.0" thiserror = "1.0" diff --git a/ledger/src/blockstore_processor.rs b/ledger/src/blockstore_processor.rs index 22b8b872b14c38..321997a42e8ad5 100644 --- a/ledger/src/blockstore_processor.rs +++ b/ledger/src/blockstore_processor.rs @@ -2,6 +2,7 @@ use { crate::{ block_error::BlockError, blockstore::Blockstore, blockstore_db::BlockstoreError, blockstore_meta::SlotMeta, leader_schedule_cache::LeaderScheduleCache, + token_balances::collect_token_balances, }, chrono_humanize::{Accuracy, HumanTime, Tense}, crossbeam_channel::Sender, @@ -49,9 +50,7 @@ use { VersionedTransaction, }, }, - solana_transaction_status::token_balances::{ - collect_token_balances, TransactionTokenBalancesSet, - }, + solana_transaction_status::token_balances::TransactionTokenBalancesSet, std::{ borrow::Cow, collections::{HashMap, HashSet}, diff --git a/ledger/src/lib.rs b/ledger/src/lib.rs index e65a74cff257d8..f0aa3598dec7b1 100644 --- a/ledger/src/lib.rs +++ b/ledger/src/lib.rs @@ -28,6 +28,7 @@ mod shredder; pub mod sigverify_shreds; pub mod slot_stats; mod staking_utils; +pub mod token_balances; #[macro_use] extern crate solana_metrics; diff --git a/ledger/src/token_balances.rs b/ledger/src/token_balances.rs new file mode 100644 index 00000000000000..673cc5556b1bac --- /dev/null +++ b/ledger/src/token_balances.rs @@ -0,0 +1,477 @@ +use { + solana_account_decoder::parse_token::{ + is_known_spl_token_id, pubkey_from_spl_token, spl_token_native_mint, + token_amount_to_ui_amount, UiTokenAmount, + }, + solana_measure::measure::Measure, + solana_metrics::datapoint_debug, + solana_runtime::{bank::Bank, transaction_batch::TransactionBatch}, + solana_sdk::{account::ReadableAccount, pubkey::Pubkey}, + solana_transaction_status::{ + token_balances::TransactionTokenBalances, TransactionTokenBalance, + }, + spl_token_2022::{ + extension::StateWithExtensions, + state::{Account as TokenAccount, Mint}, + }, + std::collections::HashMap, +}; + +fn get_mint_decimals(bank: &Bank, mint: &Pubkey) -> Option { + if mint == &spl_token_native_mint() { + Some(spl_token::native_mint::DECIMALS) + } else { + let mint_account = bank.get_account(mint)?; + + if !is_known_spl_token_id(mint_account.owner()) { + return None; + } + + let decimals = StateWithExtensions::::unpack(mint_account.data()) + .map(|mint| mint.base.decimals) + .ok()?; + + Some(decimals) + } +} + +pub fn collect_token_balances( + bank: &Bank, + batch: &TransactionBatch, + mint_decimals: &mut HashMap, +) -> TransactionTokenBalances { + let mut balances: TransactionTokenBalances = vec![]; + let mut collect_time = Measure::start("collect_token_balances"); + + for transaction in batch.sanitized_transactions() { + let account_keys = transaction.message().account_keys(); + let has_token_program = account_keys.iter().any(is_known_spl_token_id); + + let mut transaction_balances: Vec = vec![]; + if has_token_program { + for (index, account_id) in account_keys.iter().enumerate() { + if transaction.message().is_invoked(index) || is_known_spl_token_id(account_id) { + continue; + } + + if let Some(TokenBalanceData { + mint, + ui_token_amount, + owner, + program_id, + }) = collect_token_balance_from_account(bank, account_id, mint_decimals) + { + transaction_balances.push(TransactionTokenBalance { + account_index: index as u8, + mint, + ui_token_amount, + owner, + program_id, + }); + } + } + } + balances.push(transaction_balances); + } + collect_time.stop(); + datapoint_debug!( + "collect_token_balances", + ("collect_time_us", collect_time.as_us(), i64), + ); + balances +} + +#[derive(Debug, PartialEq)] +struct TokenBalanceData { + mint: String, + owner: String, + ui_token_amount: UiTokenAmount, + program_id: String, +} + +fn collect_token_balance_from_account( + bank: &Bank, + account_id: &Pubkey, + mint_decimals: &mut HashMap, +) -> Option { + let account = bank.get_account(account_id)?; + + if !is_known_spl_token_id(account.owner()) { + return None; + } + + let token_account = StateWithExtensions::::unpack(account.data()).ok()?; + let mint = pubkey_from_spl_token(&token_account.base.mint); + + let decimals = mint_decimals.get(&mint).cloned().or_else(|| { + let decimals = get_mint_decimals(bank, &mint)?; + mint_decimals.insert(mint, decimals); + Some(decimals) + })?; + + Some(TokenBalanceData { + mint: token_account.base.mint.to_string(), + owner: token_account.base.owner.to_string(), + ui_token_amount: token_amount_to_ui_amount(token_account.base.amount, decimals), + program_id: account.owner().to_string(), + }) +} + +#[cfg(test)] +mod test { + use { + super::*, + solana_account_decoder::parse_token::{pubkey_from_spl_token, spl_token_pubkey}, + solana_sdk::{account::Account, genesis_config::create_genesis_config}, + spl_token_2022::{ + extension::{ + immutable_owner::ImmutableOwner, memo_transfer::MemoTransfer, + mint_close_authority::MintCloseAuthority, ExtensionType, StateWithExtensionsMut, + }, + pod::OptionalNonZeroPubkey, + solana_program::{program_option::COption, program_pack::Pack}, + }, + std::collections::BTreeMap, + }; + + #[test] + fn test_collect_token_balance_from_account() { + let (mut genesis_config, _mint_keypair) = create_genesis_config(500); + + // Add a variety of accounts, token and not + let account = Account::new(42, 55, &Pubkey::new_unique()); + + let mint_data = Mint { + mint_authority: COption::None, + supply: 4242, + decimals: 2, + is_initialized: true, + freeze_authority: COption::None, + }; + let mut data = [0; Mint::LEN]; + Mint::pack(mint_data, &mut data).unwrap(); + let mint_pubkey = Pubkey::new_unique(); + let mint = Account { + lamports: 100, + data: data.to_vec(), + owner: pubkey_from_spl_token(&spl_token::id()), + executable: false, + rent_epoch: 0, + }; + let other_mint_pubkey = Pubkey::new_unique(); + let other_mint = Account { + lamports: 100, + data: data.to_vec(), + owner: Pubkey::new_unique(), // !is_known_spl_token_id + executable: false, + rent_epoch: 0, + }; + + let token_owner = Pubkey::new_unique(); + let token_data = TokenAccount { + mint: spl_token_pubkey(&mint_pubkey), + owner: spl_token_pubkey(&token_owner), + amount: 42, + delegate: COption::None, + state: spl_token_2022::state::AccountState::Initialized, + is_native: COption::Some(100), + delegated_amount: 0, + close_authority: COption::None, + }; + let mut data = [0; TokenAccount::LEN]; + TokenAccount::pack(token_data, &mut data).unwrap(); + + let spl_token_account = Account { + lamports: 100, + data: data.to_vec(), + owner: pubkey_from_spl_token(&spl_token::id()), + executable: false, + rent_epoch: 0, + }; + let other_account = Account { + lamports: 100, + data: data.to_vec(), + owner: Pubkey::new_unique(), // !is_known_spl_token_id + executable: false, + rent_epoch: 0, + }; + + let other_mint_data = TokenAccount { + mint: spl_token_pubkey(&other_mint_pubkey), + owner: spl_token_pubkey(&token_owner), + amount: 42, + delegate: COption::None, + state: spl_token_2022::state::AccountState::Initialized, + is_native: COption::Some(100), + delegated_amount: 0, + close_authority: COption::None, + }; + let mut data = [0; TokenAccount::LEN]; + TokenAccount::pack(other_mint_data, &mut data).unwrap(); + + let other_mint_token_account = Account { + lamports: 100, + data: data.to_vec(), + owner: pubkey_from_spl_token(&spl_token::id()), + executable: false, + rent_epoch: 0, + }; + + let mut accounts = BTreeMap::new(); + + let account_pubkey = Pubkey::new_unique(); + accounts.insert(account_pubkey, account); + accounts.insert(mint_pubkey, mint); + accounts.insert(other_mint_pubkey, other_mint); + let spl_token_account_pubkey = Pubkey::new_unique(); + accounts.insert(spl_token_account_pubkey, spl_token_account); + let other_account_pubkey = Pubkey::new_unique(); + accounts.insert(other_account_pubkey, other_account); + let other_mint_account_pubkey = Pubkey::new_unique(); + accounts.insert(other_mint_account_pubkey, other_mint_token_account); + + genesis_config.accounts = accounts; + + let bank = Bank::new_for_tests(&genesis_config); + let mut mint_decimals = HashMap::new(); + + // Account is not owned by spl_token (nor does it have TokenAccount state) + assert_eq!( + collect_token_balance_from_account(&bank, &account_pubkey, &mut mint_decimals), + None + ); + + // Mint does not have TokenAccount state + assert_eq!( + collect_token_balance_from_account(&bank, &mint_pubkey, &mut mint_decimals), + None + ); + + // TokenAccount owned by spl_token::id() works + assert_eq!( + collect_token_balance_from_account( + &bank, + &spl_token_account_pubkey, + &mut mint_decimals + ), + Some(TokenBalanceData { + mint: mint_pubkey.to_string(), + owner: token_owner.to_string(), + ui_token_amount: UiTokenAmount { + ui_amount: Some(0.42), + decimals: 2, + amount: "42".to_string(), + ui_amount_string: "0.42".to_string(), + }, + program_id: spl_token::id().to_string(), + }) + ); + + // TokenAccount is not owned by known spl-token program_id + assert_eq!( + collect_token_balance_from_account(&bank, &other_account_pubkey, &mut mint_decimals), + None + ); + + // TokenAccount's mint is not owned by known spl-token program_id + assert_eq!( + collect_token_balance_from_account( + &bank, + &other_mint_account_pubkey, + &mut mint_decimals + ), + None + ); + } + + #[test] + fn test_collect_token_balance_from_spl_token_2022_account() { + let (mut genesis_config, _mint_keypair) = create_genesis_config(500); + + // Add a variety of accounts, token and not + let account = Account::new(42, 55, &Pubkey::new_unique()); + + let mint_authority = Pubkey::new_unique(); + let mint_size = + ExtensionType::get_account_len::(&[ExtensionType::MintCloseAuthority]); + let mint_base = Mint { + mint_authority: COption::None, + supply: 4242, + decimals: 2, + is_initialized: true, + freeze_authority: COption::None, + }; + let mut mint_data = vec![0; mint_size]; + let mut mint_state = + StateWithExtensionsMut::::unpack_uninitialized(&mut mint_data).unwrap(); + mint_state.base = mint_base; + mint_state.pack_base(); + mint_state.init_account_type().unwrap(); + let mut mint_close_authority = mint_state + .init_extension::(true) + .unwrap(); + mint_close_authority.close_authority = + OptionalNonZeroPubkey::try_from(Some(spl_token_pubkey(&mint_authority))).unwrap(); + + let mint_pubkey = Pubkey::new_unique(); + let mint = Account { + lamports: 100, + data: mint_data.to_vec(), + owner: pubkey_from_spl_token(&spl_token_2022::id()), + executable: false, + rent_epoch: 0, + }; + let other_mint_pubkey = Pubkey::new_unique(); + let other_mint = Account { + lamports: 100, + data: mint_data.to_vec(), + owner: Pubkey::new_unique(), + executable: false, + rent_epoch: 0, + }; + + let token_owner = Pubkey::new_unique(); + let token_base = TokenAccount { + mint: spl_token_pubkey(&mint_pubkey), + owner: spl_token_pubkey(&token_owner), + amount: 42, + delegate: COption::None, + state: spl_token_2022::state::AccountState::Initialized, + is_native: COption::Some(100), + delegated_amount: 0, + close_authority: COption::None, + }; + let account_size = ExtensionType::get_account_len::(&[ + ExtensionType::ImmutableOwner, + ExtensionType::MemoTransfer, + ]); + let mut account_data = vec![0; account_size]; + let mut account_state = + StateWithExtensionsMut::::unpack_uninitialized(&mut account_data) + .unwrap(); + account_state.base = token_base; + account_state.pack_base(); + account_state.init_account_type().unwrap(); + account_state + .init_extension::(true) + .unwrap(); + let mut memo_transfer = account_state.init_extension::(true).unwrap(); + memo_transfer.require_incoming_transfer_memos = true.into(); + + let spl_token_account = Account { + lamports: 100, + data: account_data.to_vec(), + owner: pubkey_from_spl_token(&spl_token_2022::id()), + executable: false, + rent_epoch: 0, + }; + let other_account = Account { + lamports: 100, + data: account_data.to_vec(), + owner: Pubkey::new_unique(), + executable: false, + rent_epoch: 0, + }; + + let other_mint_token_base = TokenAccount { + mint: spl_token_pubkey(&other_mint_pubkey), + owner: spl_token_pubkey(&token_owner), + amount: 42, + delegate: COption::None, + state: spl_token_2022::state::AccountState::Initialized, + is_native: COption::Some(100), + delegated_amount: 0, + close_authority: COption::None, + }; + let account_size = ExtensionType::get_account_len::(&[ + ExtensionType::ImmutableOwner, + ExtensionType::MemoTransfer, + ]); + let mut account_data = vec![0; account_size]; + let mut account_state = + StateWithExtensionsMut::::unpack_uninitialized(&mut account_data) + .unwrap(); + account_state.base = other_mint_token_base; + account_state.pack_base(); + account_state.init_account_type().unwrap(); + account_state + .init_extension::(true) + .unwrap(); + let mut memo_transfer = account_state.init_extension::(true).unwrap(); + memo_transfer.require_incoming_transfer_memos = true.into(); + + let other_mint_token_account = Account { + lamports: 100, + data: account_data.to_vec(), + owner: pubkey_from_spl_token(&spl_token_2022::id()), + executable: false, + rent_epoch: 0, + }; + + let mut accounts = BTreeMap::new(); + + let account_pubkey = Pubkey::new_unique(); + accounts.insert(account_pubkey, account); + accounts.insert(mint_pubkey, mint); + accounts.insert(other_mint_pubkey, other_mint); + let spl_token_account_pubkey = Pubkey::new_unique(); + accounts.insert(spl_token_account_pubkey, spl_token_account); + let other_account_pubkey = Pubkey::new_unique(); + accounts.insert(other_account_pubkey, other_account); + let other_mint_account_pubkey = Pubkey::new_unique(); + accounts.insert(other_mint_account_pubkey, other_mint_token_account); + + genesis_config.accounts = accounts; + + let bank = Bank::new_for_tests(&genesis_config); + let mut mint_decimals = HashMap::new(); + + // Account is not owned by spl_token (nor does it have TokenAccount state) + assert_eq!( + collect_token_balance_from_account(&bank, &account_pubkey, &mut mint_decimals), + None + ); + + // Mint does not have TokenAccount state + assert_eq!( + collect_token_balance_from_account(&bank, &mint_pubkey, &mut mint_decimals), + None + ); + + // TokenAccount owned by spl_token_2022::id() works + assert_eq!( + collect_token_balance_from_account( + &bank, + &spl_token_account_pubkey, + &mut mint_decimals + ), + Some(TokenBalanceData { + mint: mint_pubkey.to_string(), + owner: token_owner.to_string(), + ui_token_amount: UiTokenAmount { + ui_amount: Some(0.42), + decimals: 2, + amount: "42".to_string(), + ui_amount_string: "0.42".to_string(), + }, + program_id: spl_token_2022::id().to_string(), + }) + ); + + // TokenAccount is not owned by known spl-token program_id + assert_eq!( + collect_token_balance_from_account(&bank, &other_account_pubkey, &mut mint_decimals), + None + ); + + // TokenAccount's mint is not owned by known spl-token program_id + assert_eq!( + collect_token_balance_from_account( + &bank, + &other_mint_account_pubkey, + &mut mint_decimals + ), + None + ); + } +} diff --git a/programs/bpf/Cargo.lock b/programs/bpf/Cargo.lock index d95ae7849c394d..0b668298a21650 100644 --- a/programs/bpf/Cargo.lock +++ b/programs/bpf/Cargo.lock @@ -4147,6 +4147,7 @@ dependencies = [ "solana-bpf-rust-realloc", "solana-bpf-rust-realloc-invoke", "solana-cli-output", + "solana-ledger", "solana-logger 1.11.6", "solana-measure", "solana-program-runtime", @@ -4955,6 +4956,7 @@ dependencies = [ "serde", "serde_bytes", "sha2 0.10.2", + "solana-account-decoder", "solana-bpf-loader-program", "solana-entry", "solana-frozen-abi 1.11.6", @@ -4971,6 +4973,8 @@ dependencies = [ "solana-storage-proto", "solana-transaction-status", "solana-vote-program", + "spl-token", + "spl-token-2022", "static_assertions", "tempfile", "thiserror", @@ -5648,7 +5652,6 @@ dependencies = [ "solana-account-decoder", "solana-measure", "solana-metrics", - "solana-runtime", "solana-sdk 1.11.6", "solana-vote-program", "spl-associated-token-account", diff --git a/programs/bpf/Cargo.toml b/programs/bpf/Cargo.toml index f5e3cf24244a2c..6406c88271e5ef 100644 --- a/programs/bpf/Cargo.toml +++ b/programs/bpf/Cargo.toml @@ -40,6 +40,9 @@ solana-sdk = { path = "../../sdk", version = "=1.11.6" } solana-transaction-status = { path = "../../transaction-status", version = "=1.11.6" } solana_rbpf = "=0.2.31" +[dev-dependencies] +solana-ledger = { path = "../../ledger", version = "=1.11.6" } + [[bench]] name = "bpf_loader" diff --git a/programs/bpf/tests/programs.rs b/programs/bpf/tests/programs.rs index de399b590033d7..ea0f9edf37de81 100644 --- a/programs/bpf/tests/programs.rs +++ b/programs/bpf/tests/programs.rs @@ -18,6 +18,7 @@ use { solana_bpf_rust_invoke::instructions::*, solana_bpf_rust_realloc::instructions::*, solana_bpf_rust_realloc_invoke::instructions::*, + solana_ledger::token_balances::collect_token_balances, solana_program_runtime::{ compute_budget::ComputeBudget, invoke_context::with_mock_invoke_context, timings::ExecuteTimings, @@ -64,9 +65,8 @@ use { transaction::{SanitizedTransaction, Transaction, TransactionError, VersionedTransaction}, }, solana_transaction_status::{ - token_balances::collect_token_balances, ConfirmedTransactionWithStatusMeta, - InnerInstructions, TransactionStatusMeta, TransactionWithStatusMeta, - VersionedTransactionWithStatusMeta, + ConfirmedTransactionWithStatusMeta, InnerInstructions, TransactionStatusMeta, + TransactionWithStatusMeta, VersionedTransactionWithStatusMeta, }, std::{collections::HashMap, env, fs::File, io::Read, path::PathBuf, str::FromStr, sync::Arc}, }; diff --git a/runtime/src/bank.rs b/runtime/src/bank.rs index fb107ba32c5fc4..bf60bf14d407ea 100644 --- a/runtime/src/bank.rs +++ b/runtime/src/bank.rs @@ -35,6 +35,7 @@ //! already been signed and verified. #[allow(deprecated)] use solana_sdk::recent_blockhashes_account; +pub use solana_sdk::reward_type::RewardType; use { crate::{ account_overrides::AccountOverrides, @@ -1119,14 +1120,6 @@ impl PartialEq for Bank { } } -#[derive(Debug, PartialEq, Eq, Serialize, Deserialize, AbiExample, AbiEnumVisitor, Clone, Copy)] -pub enum RewardType { - Fee, - Rent, - Staking, - Voting, -} - #[derive(Debug)] pub enum RewardCalculationEvent<'a, 'b> { Staking(&'a Pubkey, &'b InflationPointCalculationEvent), @@ -1136,21 +1129,6 @@ fn null_tracer() -> Option { None:: } -impl fmt::Display for RewardType { - fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { - write!( - f, - "{}", - match self { - RewardType::Fee => "fee", - RewardType::Rent => "rent", - RewardType::Staking => "staking", - RewardType::Voting => "voting", - } - ) - } -} - pub trait DropCallback: fmt::Debug { fn callback(&self, b: &Bank); fn clone_box(&self) -> Box; diff --git a/sdk/src/lib.rs b/sdk/src/lib.rs index bc3c65dcbd289a..08da2ce8245570 100644 --- a/sdk/src/lib.rs +++ b/sdk/src/lib.rs @@ -41,6 +41,7 @@ pub mod program_utils; pub mod pubkey; pub mod quic; pub mod recent_blockhashes_account; +pub mod reward_type; pub mod rpc_port; pub mod secp256k1_instruction; pub mod shred_version; diff --git a/sdk/src/reward_type.rs b/sdk/src/reward_type.rs new file mode 100644 index 00000000000000..feba7459937ab5 --- /dev/null +++ b/sdk/src/reward_type.rs @@ -0,0 +1,24 @@ +use std::fmt; + +#[derive(Debug, PartialEq, Eq, Serialize, Deserialize, AbiExample, AbiEnumVisitor, Clone, Copy)] +pub enum RewardType { + Fee, + Rent, + Staking, + Voting, +} + +impl fmt::Display for RewardType { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + write!( + f, + "{}", + match self { + RewardType::Fee => "fee", + RewardType::Rent => "rent", + RewardType::Staking => "staking", + RewardType::Voting => "voting", + } + ) + } +} diff --git a/transaction-status/Cargo.toml b/transaction-status/Cargo.toml index c1115161dc379a..fde579c03bf5af 100644 --- a/transaction-status/Cargo.toml +++ b/transaction-status/Cargo.toml @@ -23,7 +23,6 @@ serde_json = "1.0.81" solana-account-decoder = { path = "../account-decoder", version = "=1.11.6" } solana-measure = { path = "../measure", version = "=1.11.6" } solana-metrics = { path = "../metrics", version = "=1.11.6" } -solana-runtime = { path = "../runtime", version = "=1.11.6" } solana-sdk = { path = "../sdk", version = "=1.11.6" } solana-vote-program = { path = "../programs/vote", version = "=1.11.6" } spl-associated-token-account = { version = "=1.0.5", features = ["no-entrypoint"] } diff --git a/transaction-status/src/lib.rs b/transaction-status/src/lib.rs index 31a1a83741e4fe..d594af806bcec9 100644 --- a/transaction-status/src/lib.rs +++ b/transaction-status/src/lib.rs @@ -1,6 +1,6 @@ #![allow(clippy::integer_arithmetic)] -pub use {crate::extract_memos::extract_and_fmt_memos, solana_runtime::bank::RewardType}; +pub use {crate::extract_memos::extract_and_fmt_memos, solana_sdk::reward_type::RewardType}; use { crate::{ parse_accounts::{parse_accounts, parse_static_accounts, ParsedAccount}, diff --git a/transaction-status/src/token_balances.rs b/transaction-status/src/token_balances.rs index b4c047410f3271..85a85a053f910f 100644 --- a/transaction-status/src/token_balances.rs +++ b/transaction-status/src/token_balances.rs @@ -1,19 +1,4 @@ -use { - crate::TransactionTokenBalance, - solana_account_decoder::parse_token::{ - is_known_spl_token_id, pubkey_from_spl_token, spl_token_native_mint, - token_amount_to_ui_amount, UiTokenAmount, - }, - solana_measure::measure::Measure, - solana_metrics::datapoint_debug, - solana_runtime::{bank::Bank, transaction_batch::TransactionBatch}, - solana_sdk::{account::ReadableAccount, pubkey::Pubkey}, - spl_token_2022::{ - extension::StateWithExtensions, - state::{Account as TokenAccount, Mint}, - }, - std::collections::HashMap, -}; +use crate::TransactionTokenBalance; pub type TransactionTokenBalances = Vec>; @@ -34,462 +19,3 @@ impl TransactionTokenBalancesSet { } } } - -fn get_mint_decimals(bank: &Bank, mint: &Pubkey) -> Option { - if mint == &spl_token_native_mint() { - Some(spl_token::native_mint::DECIMALS) - } else { - let mint_account = bank.get_account(mint)?; - - if !is_known_spl_token_id(mint_account.owner()) { - return None; - } - - let decimals = StateWithExtensions::::unpack(mint_account.data()) - .map(|mint| mint.base.decimals) - .ok()?; - - Some(decimals) - } -} - -pub fn collect_token_balances( - bank: &Bank, - batch: &TransactionBatch, - mint_decimals: &mut HashMap, -) -> TransactionTokenBalances { - let mut balances: TransactionTokenBalances = vec![]; - let mut collect_time = Measure::start("collect_token_balances"); - - for transaction in batch.sanitized_transactions() { - let account_keys = transaction.message().account_keys(); - let has_token_program = account_keys.iter().any(is_known_spl_token_id); - - let mut transaction_balances: Vec = vec![]; - if has_token_program { - for (index, account_id) in account_keys.iter().enumerate() { - if transaction.message().is_invoked(index) || is_known_spl_token_id(account_id) { - continue; - } - - if let Some(TokenBalanceData { - mint, - ui_token_amount, - owner, - program_id, - }) = collect_token_balance_from_account(bank, account_id, mint_decimals) - { - transaction_balances.push(TransactionTokenBalance { - account_index: index as u8, - mint, - ui_token_amount, - owner, - program_id, - }); - } - } - } - balances.push(transaction_balances); - } - collect_time.stop(); - datapoint_debug!( - "collect_token_balances", - ("collect_time_us", collect_time.as_us(), i64), - ); - balances -} - -#[derive(Debug, PartialEq)] -struct TokenBalanceData { - mint: String, - owner: String, - ui_token_amount: UiTokenAmount, - program_id: String, -} - -fn collect_token_balance_from_account( - bank: &Bank, - account_id: &Pubkey, - mint_decimals: &mut HashMap, -) -> Option { - let account = bank.get_account(account_id)?; - - if !is_known_spl_token_id(account.owner()) { - return None; - } - - let token_account = StateWithExtensions::::unpack(account.data()).ok()?; - let mint = pubkey_from_spl_token(&token_account.base.mint); - - let decimals = mint_decimals.get(&mint).cloned().or_else(|| { - let decimals = get_mint_decimals(bank, &mint)?; - mint_decimals.insert(mint, decimals); - Some(decimals) - })?; - - Some(TokenBalanceData { - mint: token_account.base.mint.to_string(), - owner: token_account.base.owner.to_string(), - ui_token_amount: token_amount_to_ui_amount(token_account.base.amount, decimals), - program_id: account.owner().to_string(), - }) -} - -#[cfg(test)] -mod test { - use { - super::*, - solana_account_decoder::parse_token::{pubkey_from_spl_token, spl_token_pubkey}, - solana_sdk::{account::Account, genesis_config::create_genesis_config}, - spl_token_2022::{ - extension::{ - immutable_owner::ImmutableOwner, memo_transfer::MemoTransfer, - mint_close_authority::MintCloseAuthority, ExtensionType, StateWithExtensionsMut, - }, - pod::OptionalNonZeroPubkey, - solana_program::{program_option::COption, program_pack::Pack}, - }, - std::collections::BTreeMap, - }; - - #[test] - fn test_collect_token_balance_from_account() { - let (mut genesis_config, _mint_keypair) = create_genesis_config(500); - - // Add a variety of accounts, token and not - let account = Account::new(42, 55, &Pubkey::new_unique()); - - let mint_data = Mint { - mint_authority: COption::None, - supply: 4242, - decimals: 2, - is_initialized: true, - freeze_authority: COption::None, - }; - let mut data = [0; Mint::LEN]; - Mint::pack(mint_data, &mut data).unwrap(); - let mint_pubkey = Pubkey::new_unique(); - let mint = Account { - lamports: 100, - data: data.to_vec(), - owner: pubkey_from_spl_token(&spl_token::id()), - executable: false, - rent_epoch: 0, - }; - let other_mint_pubkey = Pubkey::new_unique(); - let other_mint = Account { - lamports: 100, - data: data.to_vec(), - owner: Pubkey::new_unique(), // !is_known_spl_token_id - executable: false, - rent_epoch: 0, - }; - - let token_owner = Pubkey::new_unique(); - let token_data = TokenAccount { - mint: spl_token_pubkey(&mint_pubkey), - owner: spl_token_pubkey(&token_owner), - amount: 42, - delegate: COption::None, - state: spl_token_2022::state::AccountState::Initialized, - is_native: COption::Some(100), - delegated_amount: 0, - close_authority: COption::None, - }; - let mut data = [0; TokenAccount::LEN]; - TokenAccount::pack(token_data, &mut data).unwrap(); - - let spl_token_account = Account { - lamports: 100, - data: data.to_vec(), - owner: pubkey_from_spl_token(&spl_token::id()), - executable: false, - rent_epoch: 0, - }; - let other_account = Account { - lamports: 100, - data: data.to_vec(), - owner: Pubkey::new_unique(), // !is_known_spl_token_id - executable: false, - rent_epoch: 0, - }; - - let other_mint_data = TokenAccount { - mint: spl_token_pubkey(&other_mint_pubkey), - owner: spl_token_pubkey(&token_owner), - amount: 42, - delegate: COption::None, - state: spl_token_2022::state::AccountState::Initialized, - is_native: COption::Some(100), - delegated_amount: 0, - close_authority: COption::None, - }; - let mut data = [0; TokenAccount::LEN]; - TokenAccount::pack(other_mint_data, &mut data).unwrap(); - - let other_mint_token_account = Account { - lamports: 100, - data: data.to_vec(), - owner: pubkey_from_spl_token(&spl_token::id()), - executable: false, - rent_epoch: 0, - }; - - let mut accounts = BTreeMap::new(); - - let account_pubkey = Pubkey::new_unique(); - accounts.insert(account_pubkey, account); - accounts.insert(mint_pubkey, mint); - accounts.insert(other_mint_pubkey, other_mint); - let spl_token_account_pubkey = Pubkey::new_unique(); - accounts.insert(spl_token_account_pubkey, spl_token_account); - let other_account_pubkey = Pubkey::new_unique(); - accounts.insert(other_account_pubkey, other_account); - let other_mint_account_pubkey = Pubkey::new_unique(); - accounts.insert(other_mint_account_pubkey, other_mint_token_account); - - genesis_config.accounts = accounts; - - let bank = Bank::new_for_tests(&genesis_config); - let mut mint_decimals = HashMap::new(); - - // Account is not owned by spl_token (nor does it have TokenAccount state) - assert_eq!( - collect_token_balance_from_account(&bank, &account_pubkey, &mut mint_decimals), - None - ); - - // Mint does not have TokenAccount state - assert_eq!( - collect_token_balance_from_account(&bank, &mint_pubkey, &mut mint_decimals), - None - ); - - // TokenAccount owned by spl_token::id() works - assert_eq!( - collect_token_balance_from_account( - &bank, - &spl_token_account_pubkey, - &mut mint_decimals - ), - Some(TokenBalanceData { - mint: mint_pubkey.to_string(), - owner: token_owner.to_string(), - ui_token_amount: UiTokenAmount { - ui_amount: Some(0.42), - decimals: 2, - amount: "42".to_string(), - ui_amount_string: "0.42".to_string(), - }, - program_id: spl_token::id().to_string(), - }) - ); - - // TokenAccount is not owned by known spl-token program_id - assert_eq!( - collect_token_balance_from_account(&bank, &other_account_pubkey, &mut mint_decimals), - None - ); - - // TokenAccount's mint is not owned by known spl-token program_id - assert_eq!( - collect_token_balance_from_account( - &bank, - &other_mint_account_pubkey, - &mut mint_decimals - ), - None - ); - } - - #[test] - fn test_collect_token_balance_from_spl_token_2022_account() { - let (mut genesis_config, _mint_keypair) = create_genesis_config(500); - - // Add a variety of accounts, token and not - let account = Account::new(42, 55, &Pubkey::new_unique()); - - let mint_authority = Pubkey::new_unique(); - let mint_size = - ExtensionType::get_account_len::(&[ExtensionType::MintCloseAuthority]); - let mint_base = Mint { - mint_authority: COption::None, - supply: 4242, - decimals: 2, - is_initialized: true, - freeze_authority: COption::None, - }; - let mut mint_data = vec![0; mint_size]; - let mut mint_state = - StateWithExtensionsMut::::unpack_uninitialized(&mut mint_data).unwrap(); - mint_state.base = mint_base; - mint_state.pack_base(); - mint_state.init_account_type().unwrap(); - let mut mint_close_authority = mint_state - .init_extension::(true) - .unwrap(); - mint_close_authority.close_authority = - OptionalNonZeroPubkey::try_from(Some(spl_token_pubkey(&mint_authority))).unwrap(); - - let mint_pubkey = Pubkey::new_unique(); - let mint = Account { - lamports: 100, - data: mint_data.to_vec(), - owner: pubkey_from_spl_token(&spl_token_2022::id()), - executable: false, - rent_epoch: 0, - }; - let other_mint_pubkey = Pubkey::new_unique(); - let other_mint = Account { - lamports: 100, - data: mint_data.to_vec(), - owner: Pubkey::new_unique(), - executable: false, - rent_epoch: 0, - }; - - let token_owner = Pubkey::new_unique(); - let token_base = TokenAccount { - mint: spl_token_pubkey(&mint_pubkey), - owner: spl_token_pubkey(&token_owner), - amount: 42, - delegate: COption::None, - state: spl_token_2022::state::AccountState::Initialized, - is_native: COption::Some(100), - delegated_amount: 0, - close_authority: COption::None, - }; - let account_size = ExtensionType::get_account_len::(&[ - ExtensionType::ImmutableOwner, - ExtensionType::MemoTransfer, - ]); - let mut account_data = vec![0; account_size]; - let mut account_state = - StateWithExtensionsMut::::unpack_uninitialized(&mut account_data) - .unwrap(); - account_state.base = token_base; - account_state.pack_base(); - account_state.init_account_type().unwrap(); - account_state - .init_extension::(true) - .unwrap(); - let mut memo_transfer = account_state.init_extension::(true).unwrap(); - memo_transfer.require_incoming_transfer_memos = true.into(); - - let spl_token_account = Account { - lamports: 100, - data: account_data.to_vec(), - owner: pubkey_from_spl_token(&spl_token_2022::id()), - executable: false, - rent_epoch: 0, - }; - let other_account = Account { - lamports: 100, - data: account_data.to_vec(), - owner: Pubkey::new_unique(), - executable: false, - rent_epoch: 0, - }; - - let other_mint_token_base = TokenAccount { - mint: spl_token_pubkey(&other_mint_pubkey), - owner: spl_token_pubkey(&token_owner), - amount: 42, - delegate: COption::None, - state: spl_token_2022::state::AccountState::Initialized, - is_native: COption::Some(100), - delegated_amount: 0, - close_authority: COption::None, - }; - let account_size = ExtensionType::get_account_len::(&[ - ExtensionType::ImmutableOwner, - ExtensionType::MemoTransfer, - ]); - let mut account_data = vec![0; account_size]; - let mut account_state = - StateWithExtensionsMut::::unpack_uninitialized(&mut account_data) - .unwrap(); - account_state.base = other_mint_token_base; - account_state.pack_base(); - account_state.init_account_type().unwrap(); - account_state - .init_extension::(true) - .unwrap(); - let mut memo_transfer = account_state.init_extension::(true).unwrap(); - memo_transfer.require_incoming_transfer_memos = true.into(); - - let other_mint_token_account = Account { - lamports: 100, - data: account_data.to_vec(), - owner: pubkey_from_spl_token(&spl_token_2022::id()), - executable: false, - rent_epoch: 0, - }; - - let mut accounts = BTreeMap::new(); - - let account_pubkey = Pubkey::new_unique(); - accounts.insert(account_pubkey, account); - accounts.insert(mint_pubkey, mint); - accounts.insert(other_mint_pubkey, other_mint); - let spl_token_account_pubkey = Pubkey::new_unique(); - accounts.insert(spl_token_account_pubkey, spl_token_account); - let other_account_pubkey = Pubkey::new_unique(); - accounts.insert(other_account_pubkey, other_account); - let other_mint_account_pubkey = Pubkey::new_unique(); - accounts.insert(other_mint_account_pubkey, other_mint_token_account); - - genesis_config.accounts = accounts; - - let bank = Bank::new_for_tests(&genesis_config); - let mut mint_decimals = HashMap::new(); - - // Account is not owned by spl_token (nor does it have TokenAccount state) - assert_eq!( - collect_token_balance_from_account(&bank, &account_pubkey, &mut mint_decimals), - None - ); - - // Mint does not have TokenAccount state - assert_eq!( - collect_token_balance_from_account(&bank, &mint_pubkey, &mut mint_decimals), - None - ); - - // TokenAccount owned by spl_token_2022::id() works - assert_eq!( - collect_token_balance_from_account( - &bank, - &spl_token_account_pubkey, - &mut mint_decimals - ), - Some(TokenBalanceData { - mint: mint_pubkey.to_string(), - owner: token_owner.to_string(), - ui_token_amount: UiTokenAmount { - ui_amount: Some(0.42), - decimals: 2, - amount: "42".to_string(), - ui_amount_string: "0.42".to_string(), - }, - program_id: spl_token_2022::id().to_string(), - }) - ); - - // TokenAccount is not owned by known spl-token program_id - assert_eq!( - collect_token_balance_from_account(&bank, &other_account_pubkey, &mut mint_decimals), - None - ); - - // TokenAccount's mint is not owned by known spl-token program_id - assert_eq!( - collect_token_balance_from_account( - &bank, - &other_mint_account_pubkey, - &mut mint_decimals - ), - None - ); - } -} From 0d19c31486693b077b87d60d056b9ff6861b5afb Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Fri, 5 Aug 2022 19:54:13 +0000 Subject: [PATCH 002/465] Io stats v2 (backport #26898) (#26955) Io stats v2 (#26898) * Use sysfs instead of procfs for disk stats * Filter map to filter dmcrypt and mdraid volumes * Unit test cover different kernel formats (cherry picked from commit 5bc81a6c35b18026f0942a379774dc74afdc8a1c) Co-authored-by: Brennan Watt --- core/src/system_monitor_service.rs | 179 +++++++++++++++++++---------- 1 file changed, 120 insertions(+), 59 deletions(-) diff --git a/core/src/system_monitor_service.rs b/core/src/system_monitor_service.rs index e1e75e521aed79..3b11d4b6a1a424 100644 --- a/core/src/system_monitor_service.rs +++ b/core/src/system_monitor_service.rs @@ -30,7 +30,7 @@ const PROC_NET_SNMP_PATH: &str = "/proc/net/snmp"; #[cfg(target_os = "linux")] const PROC_NET_DEV_PATH: &str = "/proc/net/dev"; #[cfg(target_os = "linux")] -const PROC_DISKSTATS_PATH: &str = "/proc/diskstats"; +const SYS_BLOCK_PATH: &str = "/sys/block"; pub struct SystemMonitorService { thread_hdl: JoinHandle<()>, @@ -140,6 +140,29 @@ impl UdpStats { } } +impl DiskStats { + #[cfg_attr(not(target_os = "linux"), allow(dead_code))] + fn accumulate(&mut self, other: &DiskStats) { + self.reads_completed += other.reads_completed; + self.reads_merged += other.reads_merged; + self.sectors_read += other.sectors_read; + self.time_reading_ms += other.time_reading_ms; + self.writes_completed += other.writes_completed; + self.writes_merged += other.writes_merged; + self.sectors_written += other.sectors_written; + self.time_writing_ms += other.time_writing_ms; + self.io_in_progress += other.io_in_progress; + self.time_io_ms += other.time_io_ms; + self.time_io_weighted_ms += other.time_io_weighted_ms; + self.discards_completed += other.discards_completed; + self.discards_merged += other.discards_merged; + self.sectors_discarded += other.sectors_discarded; + self.time_discarding += other.time_discarding; + self.flushes_completed += other.flushes_completed; + self.time_flushing += other.time_flushing; + } +} + fn platform_id() -> String { format!( "{}/{}/{}", @@ -254,49 +277,79 @@ pub fn verify_net_stats_access() -> Result<(), String> { #[cfg(target_os = "linux")] fn read_disk_stats() -> Result { - let file_path_diskstats = PROC_DISKSTATS_PATH; - let file_diskstats = File::open(file_path_diskstats).map_err(|e| e.to_string())?; - let mut reader_diskstats = BufReader::new(file_diskstats); - parse_disk_stats(&mut reader_diskstats) + let mut stats = DiskStats::default(); + let mut num_disks = 0; + let blk_device_dir_iter = std::fs::read_dir(SYS_BLOCK_PATH).map_err(|e| e.to_string())?; + blk_device_dir_iter + .filter_map(|blk_device_dir| { + match blk_device_dir { + Ok(blk_device_dir) => { + let blk_device_dir_name = &blk_device_dir.file_name(); + let blk_device_dir_name = blk_device_dir_name.to_string_lossy(); + if blk_device_dir_name.starts_with("loop") + || blk_device_dir_name.starts_with("dm") + || blk_device_dir_name.starts_with("md") + { + // Filter out loopback devices, dmcrypt volumes, and mdraid volumes + return None; + } + let mut path = blk_device_dir.path(); + path.push("stat"); + match File::open(path) { + Ok(file_diskstats) => Some(file_diskstats), + Err(_) => None, + } + } + Err(_) => None, + } + }) + .for_each(|file_diskstats| { + let mut reader_diskstats = BufReader::new(file_diskstats); + stats.accumulate(&parse_disk_stats(&mut reader_diskstats).unwrap_or_default()); + num_disks += 1; + }); + stats.num_disks = num_disks; + Ok(stats) } #[cfg_attr(not(target_os = "linux"), allow(dead_code))] fn parse_disk_stats(reader_diskstats: &mut impl BufRead) -> Result { let mut stats = DiskStats::default(); - let mut num_disks = 0; - for line in reader_diskstats.lines() { - let line = line.map_err(|e| e.to_string())?; - let values: Vec<_> = line.split_ascii_whitespace().collect(); - - if values.len() != 20 { - return Err("parse error, expected exactly 20 disk stat elements".to_string()); - } - if values[2].starts_with("loop") || values[1].ne("0") { - // Filter out the loopback io devices. - // Only look at raw device (filter partitions) - continue; - } + let mut line = String::new(); + reader_diskstats + .read_line(&mut line) + .map_err(|e| e.to_string())?; + let values: Vec<_> = line.split_ascii_whitespace().collect(); + let num_elements = values.len(); + + if num_elements != 11 && num_elements != 15 && num_elements != 17 { + return Err("parse error, unknown number of disk stat elements".to_string()); + } - num_disks += 1; - stats.reads_completed += values[3].parse::().map_err(|e| e.to_string())?; - stats.reads_merged += values[4].parse::().map_err(|e| e.to_string())?; - stats.sectors_read += values[5].parse::().map_err(|e| e.to_string())?; - stats.time_reading_ms += values[6].parse::().map_err(|e| e.to_string())?; - stats.writes_completed += values[7].parse::().map_err(|e| e.to_string())?; - stats.writes_merged += values[8].parse::().map_err(|e| e.to_string())?; - stats.sectors_written += values[9].parse::().map_err(|e| e.to_string())?; - stats.time_writing_ms += values[10].parse::().map_err(|e| e.to_string())?; - stats.io_in_progress += values[11].parse::().map_err(|e| e.to_string())?; - stats.time_io_ms += values[12].parse::().map_err(|e| e.to_string())?; - stats.time_io_weighted_ms += values[13].parse::().map_err(|e| e.to_string())?; - stats.discards_completed += values[14].parse::().map_err(|e| e.to_string())?; - stats.discards_merged += values[15].parse::().map_err(|e| e.to_string())?; - stats.sectors_discarded += values[16].parse::().map_err(|e| e.to_string())?; - stats.time_discarding += values[17].parse::().map_err(|e| e.to_string())?; - stats.flushes_completed += values[18].parse::().map_err(|e| e.to_string())?; - stats.time_flushing += values[19].parse::().map_err(|e| e.to_string())?; + stats.reads_completed = values[0].parse::().map_err(|e| e.to_string())?; + stats.reads_merged = values[1].parse::().map_err(|e| e.to_string())?; + stats.sectors_read = values[2].parse::().map_err(|e| e.to_string())?; + stats.time_reading_ms = values[3].parse::().map_err(|e| e.to_string())?; + stats.writes_completed = values[4].parse::().map_err(|e| e.to_string())?; + stats.writes_merged = values[5].parse::().map_err(|e| e.to_string())?; + stats.sectors_written = values[6].parse::().map_err(|e| e.to_string())?; + stats.time_writing_ms = values[7].parse::().map_err(|e| e.to_string())?; + stats.io_in_progress = values[8].parse::().map_err(|e| e.to_string())?; + stats.time_io_ms = values[9].parse::().map_err(|e| e.to_string())?; + stats.time_io_weighted_ms = values[10].parse::().map_err(|e| e.to_string())?; + if num_elements > 11 { + // Kernel 4.18+ appends four more fields for discard + stats.discards_completed = values[11].parse::().map_err(|e| e.to_string())?; + stats.discards_merged = values[12].parse::().map_err(|e| e.to_string())?; + stats.sectors_discarded = values[13].parse::().map_err(|e| e.to_string())?; + stats.time_discarding = values[14].parse::().map_err(|e| e.to_string())?; } - stats.num_disks = num_disks; + if num_elements > 15 { + // Kernel 5.5+ appends two more fields for flush requests + stats.flushes_completed = values[15].parse::().map_err(|e| e.to_string())?; + stats.time_flushing = values[16].parse::().map_err(|e| e.to_string())?; + } + Ok(stats) } @@ -892,35 +945,43 @@ data" as &[u8]; #[test] fn test_parse_disk_stats() { - const MOCK_DISK: &[u8] = -b" 7 0 loop0 108 0 2906 27 0 0 0 0 0 40 27 0 0 0 0 0 0 -7 1 loop1 48 0 716 23 0 0 0 0 0 28 23 0 0 0 0 0 0 -7 2 loop2 108 0 2916 21 0 0 0 0 0 36 21 0 0 0 0 0 0 -7 3 loop3 257 0 4394 131 0 0 0 0 0 296 131 0 0 0 0 0 0 -7 4 loop4 111 0 2896 62 0 0 0 0 0 68 62 0 0 0 0 0 0 -7 5 loop5 110 0 2914 138 0 0 0 0 0 112 138 0 0 0 0 0 0 -7 6 loop6 68 0 2200 47 0 0 0 0 0 44 47 0 0 0 0 0 0 -7 7 loop7 1397 0 101686 515 0 0 0 0 0 4628 515 0 0 0 0 0 0 -8 0 sda 40883273 294820 1408426268 30522643 352908152 204249001 37827695922 2073754124 0 86054536 2105005805 496399 4 1886486166 167545 18008621 561492 -8 1 sda1 40882879 291543 1408408989 30522451 352908150 204249001 37827695920 2073754122 0 86054508 2104444115 496393 0 1886085576 167541 0 0 -8 14 sda14 73 0 832 22 0 0 0 0 0 48 22 0 0 0 0 0 0 -8 15 sda15 146 3277 9855 62 2 0 2 1 0 76 68 6 4 400590 3 0 0 -7 9 loop9 55 0 2106 41 0 0 0 0 0 28 41 0 0 0 0 0 0 -7 8 loop8 41 0 688 53 0 0 0 0 0 44 53 0 0 0 0 0 0 -7 10 loop10 60 0 748 1 0 0 0 0 0 20 1 0 0 0 0 0 0 -9 0 sdb 1 1 1 1 352908152 204249001 37827695922 2073754124 0 86054536 2105005805 496399 4 1886486166 167545 18008621 561492" as &[u8]; - const UNEXPECTED_DATA: &[u8] = b"un + const MOCK_DISK_11: &[u8] = +b" 2095701 479815 122620302 1904439 43496218 26953623 3935324729 283313376 0 6101780 285220738" as &[u8]; + // Matches kernel 4.18+ format + const MOCK_DISK_15: &[u8] = +b" 2095701 479815 122620302 1904439 43496218 26953623 3935324729 283313376 0 6101780 285220738 0 0 0 0" as &[u8]; + // Matches kernel 5.5+ format + const MOCK_DISK_17: &[u8] = +b" 2095701 479815 122620302 1904439 43496218 26953623 3935324729 283313376 0 6101780 285220738 0 0 0 0 70715 2922" as &[u8]; + const UNEXPECTED_DATA_1: &[u8] = +b" 2095701 479815 122620302 1904439 43496218 26953623 3935324729 283313376 0 6101780 285220738 0 0 0 0 70715" as &[u8]; + + const UNEXPECTED_DATA_2: &[u8] = b"un ex pec ted data" as &[u8]; - let mut mock_disk = MOCK_DISK; + let mut mock_disk = MOCK_DISK_11; let stats = parse_disk_stats(&mut mock_disk).unwrap(); - assert_eq!(stats.reads_completed, 40883274); - assert_eq!(stats.time_flushing, 1122984); + assert_eq!(stats.reads_completed, 2095701); + assert_eq!(stats.time_io_weighted_ms, 285220738); + + let mut mock_disk = MOCK_DISK_15; + let stats = parse_disk_stats(&mut mock_disk).unwrap(); + assert_eq!(stats.reads_completed, 2095701); + assert_eq!(stats.time_discarding, 0); + + let mut mock_disk = MOCK_DISK_17; + let stats = parse_disk_stats(&mut mock_disk).unwrap(); + assert_eq!(stats.reads_completed, 2095701); + assert_eq!(stats.time_flushing, 2922); + + let mut mock_disk = UNEXPECTED_DATA_1; + let stats = parse_disk_stats(&mut mock_disk); + assert!(stats.is_err()); - let mut mock_disk = UNEXPECTED_DATA; + let mut mock_disk = UNEXPECTED_DATA_2; let stats = parse_disk_stats(&mut mock_disk); assert!(stats.is_err()); } From 2fa2d5cb33d61e3bffa0d39ad48805f443d3bfce Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Fri, 5 Aug 2022 20:08:37 +0000 Subject: [PATCH 003/465] spl: Bump token to 3.5.0 and ata to 1.1.0 (backport #26921) (#26952) * spl: Bump token to 3.5.0 and ata to 1.1.0 (#26921) (cherry picked from commit b725b8617c746ecba795534733dce9630e06ebfb) * Bump spl-token dependency in solana-ledger Co-authored-by: Jon Cinque --- Cargo.lock | 13 +- account-decoder/Cargo.toml | 2 +- accounts-cluster-bench/Cargo.toml | 2 +- fetch-spl.sh | 4 +- ledger/Cargo.toml | 2 +- program-test/src/programs.rs | 4 +- .../spl_associated_token_account-1.0.5.so | Bin 122440 -> 0 bytes .../spl_associated_token_account-1.1.1.so | Bin 0 -> 105032 bytes program-test/src/programs/spl_token-3.3.0.so | Bin 136824 -> 0 bytes program-test/src/programs/spl_token-3.5.0.so | Bin 0 -> 133352 bytes programs/bpf/Cargo.lock | 13 +- rpc/Cargo.toml | 2 +- tokens/Cargo.toml | 4 +- tokens/src/spl_token.rs | 1 + transaction-status/Cargo.toml | 4 +- .../src/parse_associated_token.rs | 152 +++++++++++++++++- 16 files changed, 176 insertions(+), 27 deletions(-) delete mode 100755 program-test/src/programs/spl_associated_token_account-1.0.5.so create mode 100644 program-test/src/programs/spl_associated_token_account-1.1.1.so delete mode 100644 program-test/src/programs/spl_token-3.3.0.so create mode 100644 program-test/src/programs/spl_token-3.5.0.so diff --git a/Cargo.lock b/Cargo.lock index 429320ddbb1e66..59c79c56902ba9 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -6666,13 +6666,18 @@ dependencies = [ [[package]] name = "spl-associated-token-account" -version = "1.0.5" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b013067447a1396303ddfc294f36e3d260a32f8a16c501c295bcdc7de39b490" +checksum = "16a33ecc83137583902c3e13c02f34151c8b2f2b74120f9c2b3ff841953e083d" dependencies = [ + "assert_matches", "borsh", + "num-derive", + "num-traits", "solana-program 1.10.33", "spl-token", + "spl-token-2022", + "thiserror", ] [[package]] @@ -6686,9 +6691,9 @@ dependencies = [ [[package]] name = "spl-token" -version = "3.3.1" +version = "3.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32d05653bed5932064a287340dbc8a3cb298ee717e5c7ec3353d7cdb9f8fb7e1" +checksum = "8e85e168a785e82564160dcb87b2a8e04cee9bfd1f4d488c729d53d6a4bd300d" dependencies = [ "arrayref", "bytemuck", diff --git a/account-decoder/Cargo.toml b/account-decoder/Cargo.toml index e37ae94a1c99fe..cd12c3859f2658 100644 --- a/account-decoder/Cargo.toml +++ b/account-decoder/Cargo.toml @@ -22,7 +22,7 @@ serde_json = "1.0.81" solana-config-program = { path = "../programs/config", version = "=1.11.6" } solana-sdk = { path = "../sdk", version = "=1.11.6" } solana-vote-program = { path = "../programs/vote", version = "=1.11.6" } -spl-token = { version = "=3.3.1", features = ["no-entrypoint"] } +spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } spl-token-2022 = { version = "=0.4.2", features = ["no-entrypoint"] } thiserror = "1.0" zstd = "0.11.2" diff --git a/accounts-cluster-bench/Cargo.toml b/accounts-cluster-bench/Cargo.toml index a7b45f33f06e87..c08e17976bcf29 100644 --- a/accounts-cluster-bench/Cargo.toml +++ b/accounts-cluster-bench/Cargo.toml @@ -26,7 +26,7 @@ solana-sdk = { path = "../sdk", version = "=1.11.6" } solana-streamer = { path = "../streamer", version = "=1.11.6" } solana-transaction-status = { path = "../transaction-status", version = "=1.11.6" } solana-version = { path = "../version", version = "=1.11.6" } -spl-token = { version = "=3.3.1", features = ["no-entrypoint"] } +spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } [dev-dependencies] solana-core = { path = "../core", version = "=1.11.6" } diff --git a/fetch-spl.sh b/fetch-spl.sh index 542da6af3f1a6f..e608b26a658208 100755 --- a/fetch-spl.sh +++ b/fetch-spl.sh @@ -38,10 +38,10 @@ fetch_program() { } -fetch_program token 3.3.0 TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA BPFLoader2111111111111111111111111111111111 +fetch_program token 3.5.0 TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA BPFLoader2111111111111111111111111111111111 fetch_program memo 1.0.0 Memo1UhkJRfHyvLMcVucJwxXeuD728EqVDDwQDxFMNo BPFLoader1111111111111111111111111111111111 fetch_program memo 3.0.0 MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr BPFLoader2111111111111111111111111111111111 -fetch_program associated-token-account 1.0.5 ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL BPFLoader2111111111111111111111111111111111 +fetch_program associated-token-account 1.1.1 ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL BPFLoader2111111111111111111111111111111111 fetch_program feature-proposal 1.0.0 Feat1YXHhH6t1juaWF74WLcfv4XoNocjXA6sPWHNgAse BPFLoader2111111111111111111111111111111111 echo "${genesis_args[@]}" > spl-genesis-args.sh diff --git a/ledger/Cargo.toml b/ledger/Cargo.toml index cb0e6aa3c589e3..dfc87eae64d7bf 100644 --- a/ledger/Cargo.toml +++ b/ledger/Cargo.toml @@ -51,7 +51,7 @@ solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.11.6" } solana-storage-proto = { path = "../storage-proto", version = "=1.11.6" } solana-transaction-status = { path = "../transaction-status", version = "=1.11.6" } solana-vote-program = { path = "../programs/vote", version = "=1.11.6" } -spl-token = { version = "=3.3.1", features = ["no-entrypoint"] } +spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } spl-token-2022 = { version = "=0.4.2", features = ["no-entrypoint"] } static_assertions = "1.1.0" tempfile = "3.3.0" diff --git a/program-test/src/programs.rs b/program-test/src/programs.rs index f2cfd0e05f07af..f7e2c7e14ec52a 100644 --- a/program-test/src/programs.rs +++ b/program-test/src/programs.rs @@ -18,7 +18,7 @@ mod spl_associated_token_account { } static SPL_PROGRAMS: &[(Pubkey, &[u8])] = &[ - (spl_token::ID, include_bytes!("programs/spl_token-3.3.0.so")), + (spl_token::ID, include_bytes!("programs/spl_token-3.5.0.so")), ( spl_memo_1_0::ID, include_bytes!("programs/spl_memo-1.0.0.so"), @@ -29,7 +29,7 @@ static SPL_PROGRAMS: &[(Pubkey, &[u8])] = &[ ), ( spl_associated_token_account::ID, - include_bytes!("programs/spl_associated_token_account-1.0.5.so"), + include_bytes!("programs/spl_associated_token_account-1.1.1.so"), ), ]; diff --git a/program-test/src/programs/spl_associated_token_account-1.0.5.so b/program-test/src/programs/spl_associated_token_account-1.0.5.so deleted file mode 100755 index 7b360e4cadc8546006870ebae304b4d1a7f00bcc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 122440 zcmeFa3!GI~bw7SCa5I390pc}eD$Yy@kBp8&9tKC#0C^$W22E}T(?+qW1)ctS20d6*bI5-~MxvF2D5E&FN}W^uGAniwsP zo*q3-VDkVyqTplV=s_#z@iYZw?nx|X`Pq2Ea~00x$jVKyax?!~@n++LS}gK-vZdc; zang72IDb~o(2S(xfTl+@-3GKrjvqgM3+iK;c-K*VzRsSvMG+n!k4KJZ{`H#QK11Wm zdW~ZNY&Uq~Ye(Qy#*T;iIRxf2exc)soE9OkFi~}_vV#y& z)Q0?H;E(0b{g@P!{0BhH^YCjXDn0lQ)%=-|@4g^SdHr~9RZj8!heS^8v7m`o-Jx+j zqWV(IQCmUB6cj|LY?UaL7x6uaHZMd_5QKd642cUwAqI#TcRmDq;b=Uj&*_vNCN#l6BmScUx$eIWC79gu|5?c%PTY1+9>MKhU zemj1Q#jElO@xBRg_3#ii@w}%l9@YZA59qrNS)}hYm-DrEV#r%4BD!1c*uX!t@UN`Ib3BPOM)NcKVE2bb}0R^(VKLr z-HWXsCmm+*MzlQTLpxR(wKVu}yZHiS#XHq*#XGcLRf2K{Snhf)M|t*i0N(UB9@YMq z%r!oY&XoSSTCQ@6#R1-<#0%TWP`N;3;-3dp@lNA!huQO>++mhmQ-z-?^cel4%6CE} z2#M9}^mzMb<<0)m1$fr~2n6E&U|ml0X@~jz0sO~L*mM5XG-Jo_?L<7gNN0&p74H_L zQ@BjKa{QpKP`^mI%b^I%#K82&QNAAB)q$Of%K$`3rfD3PO%BsEj?3~G&o!n!p7xK* ziDb1Nc)H?i@3#Co8W-}4tMW=sR|*<;UZgSQ$M699At8GU3ePmd z16FU53X4#=LZaw4v=76o7inDS)|gGa+$xWw+ti## zt1i}b#p)fy=Q@3!<+JxP!*`CAFIjw<#?+%?4ZqgUrdOZO>#nwYqyBQD`SENOP_j_t zIJLK?r?X8@TiD-thT-Wkx@Tzlq{r;v48zl-cEHD_q(kjPXxC^*D33pYj;4At*W_jG zANJqf@Ii~BZD@CsE6eYZe3g6NpIf_ycB&Ko)cpo;*YNrGp2O#===GitqYtKZnw?Gh zR1VI6mcP*6)83Nav%#YKsoszJK|U3~n0u!9fANUoE#yuWfrNPX(+;7#L2S`Xko&tI zQ{D;q0Q8q8g7qv0oR1TgXYpwit;6$0h~pjmrJuRH;vHkhD~{8|^D@D6NZ`lf(ecN} zk&R|QFI_6tiT_NE$XkDlWufBsSG@$FK6to{v2e%>a$A>IuE9?Er1Mi1b&2>!1U z|Bg*c=jaBlXT<2C+>Fm7LdW_Bbgb5VYxgIuA6%kzSJ-I~eBSPUQGD6tqs%W%)Q%Uw zDw1?4H|izjz7}z8`r!7dkeem_x0ox4rHps0{=&eCZHMY<*zfj% z&(IEZAf1osl>_gHL=pR)=;^4XflTJp(5r1ab(IIC=jp^3l%qXLIu40`RQs#;i)w#8 zEYB0`m+Y?_YWl0v?foE~Z;Yt^r~Q4i>8JT8m0dkN8u^_IxKN(mO#678Y0r44(n~yGxjMeWHZ!>1CVhKKhmXt1$IeE4$WqgZ)3IFX zNct3S(qnvfDF30}N&A$9T(Q4@1pV-FJXyYH-0j&{myaXIsYl83?c>I?ur8jj8=h_B z#xuVzo-Y}m+XYX&MEOoSw$#PTe((bPuk2K~Ht72@=yN=x@-5_U7JZACXnV&?)s801 zhZKL>FZN41={cZr$3cBQqH>9Cy%6KF=Fiaj#^}#Injhb%^pd{MV@e#4m|k}rHN4*5 zM=Wi6&~ez(rXL-LBwfCLwf2u2$JTqu`s*(c7o$M|Na?hBQgt4pbj0aAMCpjrd5Gz` zl}kF5j*!pup?^uoCZQ{kGna#(7&>JyR{vX4y)JKlRB*4ZUG1U*m_q< zy&D?V`#RR^?e#eEo!q-#>$_j+YMT;8Z>4<>#s%r0TlG2l|1H#A9j6wE-3sOR0pVl5 z+OvCSs+}8AzLJi~l4kiXpiDZt6s}{M#gW0Q{NaZReesCWIoR<5c^=kx40@4t%sfg8 ziI*M&@Jc$lbDG5PYXuMLx3sn&?6RaQ_px*xd$~jN>BsL!J-+V7c@>LL9FhFnlg1&xY!BBz*8gxD%c(vUunvYQ zQU7cy81FPYu*CIrvi7s3D2R~sM4G<9>_(rBOBc#x*i9RkOuth*?snbmd_KBJ@Q~jR zXZWS-Njk|d+lTJaTAMHDqoq==H2T{TukA7Vc3dv$q|fNv`3g-hH~Q|oP}5f`eQT{h zC0APha)a+vJZpOte?D3u3CG-MSpRH(cS(0TD{m#`0EuugnJI) zV%xZi?Rgv8o9!`Y!UTz34jz~9P{*b`JYNtd9jd4Cu;Ne01*4DUHo)FGy-fcEx|mG0 zcD@Z62xIGaz4*TJAK?2P;@hhAaXpOm(r;#*uB#%=ko0K3^#0Ts&g@E1&tai+we-XC zaF5_i@uOabIX0H}HmzsJ?Hae#^Gz!6g{tRR-;sLC zFIIgI_L;Q)RNjXz?ebQ-obFK1zYY35pY3q1@N-DZ-)?fhkz8Z{F12f}4_B+)&2F*$ zSBcN;3ihQ0kMA?2`|+^93~qO__Mj5rTM2yesLHF{t$IxRTVtn?W{A7H7)9}E#<#CO zo8Ol7=y>V&KIt+4Y;?7>hmUjd=rT*2e>bXjBk5T!{KlhdSCXC$mR@Y|+FtQ!m!*g7 z`F2a+ZfWfgNzWEbYkx_4wp)6#!SAuO>Q~aU*V5XaNzXn@YkMa>`z?J$|Zu z=;esPLwPu#qP{+p`Wob~u>8(U{wB+xoXH=u{8KaeTqh;|37P!8mVa_4|B&VX9J(CR zbJ+5qLHJ-?ecI2f{tN4Q^uLhaW&B|dx{v-!Nz;6uCw!3pKH&4wboHxODqQ7d8Yg{w zG=H9@JGQHTK5YJV$39Kps(yBe_c>TPh=uBGYQ)&EYeJs{~~r28AO z(FgxW;f!DSN17fny6&p-)q{3T?lpXOYCV-V>GL_T5;^?jJ|N?I{yrVlc+~Lk(0VJ7 zH3Q{#6k}z)UI)y0j2)~9Ucv#5v^V2qv*JtcT+xv3lc|q34$qlvbRtbUI(^}+|8#-f7?{R@lXjuyhfrrcKko2f0bkNr^@pM5c>w1b};#u z6c72HMZFBtqtM@Es>yQ`01(E?&BqV5N1?r!eqrMW_h-pyWBs&`%jJxJgnAiVKjS^7w|AHvP5;J@hkvDV9QN^glj2YP{0%D4VZ-0CUeo0+$w)d@ zTiVC%m6G=Hl=A*Q?SsjO=^L1yqWI!lP2LUL`GaalgZBD1%LnOek#;{lzESClZ!&uN z%zp1sJxKai2)=lSws+FE($Xr|q;IvQm5-!P?RmUI`AqsY*mIRb(l;dOYNU{ZjAXm79$|)w99A z*wVL4xxv0ol6HKlACuOv^2WZHz++uQV(g1q`l!TV|K+^Y*C&!5vuF1yKOr2)g>bz_ z`uz@t)(|1CDNr4^&bjY zchGf@FN)wpJ(>*~LOnf)>0!l7z3oIA`_jTc(+l}Ls7Lq-^s<-ZTafO`jCV6hXYhPp z27WryK0glSz1wPlac#YB%ul4cgfV5L}yz%iz`%`uNQGI=^3mG(KmKv-km1*M96OE;X?tx~JsCTm zeMQO-PPOr9$1;H*?9*{B-l2Nw<7IW+yWQY?+}mX7R^#43E4}Hscf`_rrM#b83GMJ< z*x`obUUppAp?d4%9M;bTukTZH+=E)lxOZx1+~fE~J-d{8J7Rcp)$<*zGx;133IDQ8 zKF3eyUzy3@XZaUo^7mW*<;c%RA4ZL+e^~49loaf@%{$ya_YUg=rWt(w#LvGZ_f8hR zeH=~q^VTSQ$REc!tTzZe>F$CFX*{p-ap!7*AI~`V`{dX7A^vWplc}mdjmEj^_|~uO z7nHw?_#Mc=UoRhZa5!wxt-Tk zZgEN5Cmq*Dwkh6|yW|1vn5L)uc&E=px?i7>_m3c;Wa=_4_d93+gvRr|GXyU5m#%Ii zZ=e69asey@*3-1UmU7=SroOKUy^E~8%C$T_<6ro=a;uGZYqZ|6^R9NmQ%>hy)3m-j z6u!Jo$GzC}$;ZQLzv&Xdq;I~`lghnI@mPCNug|BPg7n`CA2YSwdrj^Q$G@M+x|ZuT z@ts3_!%Am7s&xCj*ZaGlQ+@zqKy}sq85K*~Pl)eN01%Jt7kXTtjpirusKUkFT|z*0 z-PFd}QMDJS@xm-kz^C_zjj`ZE2n7VV%{|HqMT!K2+C5 zRsKoOHY=~~Q(Y%rVC8kZjYqW|d|fp0ao5g84&JHb=-{GNR6 z9<6s|y*;=2;K-1rZCo7LWN9522m5sV3+*q*xADx^eBA1LI`m?$-8sdocNV}DTUWqPBe_oV3(;mcL{ zL8i0gda3&S4L_}&&#hrPfX~kNuF1e(hID-YWU1fhQ~Bt<(*H`M`hMTqo+J8v$B(6* zlfJ{6-uaNGmmkvfec#gbl?Nrg*3PjfS6cpZgYQ#3YkTbd!BJ}$^l`So`ze&qGk;dg z-+7dW*(W}~lO;9p1dxv3b>>N% z1G%t0sX*hOC!I59oY;`T_Y>fAe`V}E$?W9`uG1xVn%!=-KDSxz_5Zx}xg*lgtLt-z zB^}yb_T$HMo&wV#^OT!$-ao9z=P7?ly&1tD1fD-$jryripG7*%_j$@kGx4+>VgHk1#z_)u!Lgbd&Mr{TcY%koNPcl^Ljv^#$#;*V^eg*2v;r=AYR6ni#iD&um?wW4opI zNsRq2P47OW@t%VchxlckHW**FS$*#TUGdH>T5gB+(>rZ{Y;%kCl-N6}Ibj;4e(S zoaxn4EIl{Q_dGoCXMC2X_qwGqas4;J3}Y>%=bWg64xWhpTYIZh4594;6?n_vG zC2er{hgzTUo7QLTn${QS>vrPL)@Sgn?}MywtFH^0{%`gA)DFj6oxdYmzxn6sy6gSM z55}hbnfeYh9n3?1ANApUrr=4gReosqx_|=bdBc$WG-Cw|QW^ZVh z8{AjG`kx7WE*GZfX3}#q>E~tA=YlRTpS_18lqdZNu8%R0{}qe_x&9aO{C(7Tbf4<2 zotMbon^7{k4orMTgf0>dOq?s{$Ob09MErol#CusyioZC)^sgk@={hy}9bvteAFo9Q zLc941RsH?GsP84XC5ryZe$jX5qgg%ow5W&p^3gY~p5@VW!T(pHABBl; z&XKb5)I;B<89&6EkG^R2TqE~Y6()X0dT81{)-KKX+1#QYx{8C{QVr-)xpExDKfD*N z>GJie5dFZ#DhDRKQ%1zXg!d3E^7Yhw^e#zL-T;N%zbx=Bk9ecvX+|&C&zs4G7AzlK zZ1sEz_kgjUWAa{v*HiX=>T%R}MT`2VN3GVKp58(bpj8ur^N|Bc)2VGvN2m*RUY?Y05qMkQ#s+oavpuZjI0 z0OOnOb^!HO+ih}#c56)c*PGDIahYMz=5zUIgQTnN(0H8rg5VYKsNOh3zbP-bfd&2Y z1ndp@&bDu;NAxpV^~V#jH}9*FliH7~x?e5~!j4Kj9=ZH+3%V&$ryK93)!;3U!w%oq z0zbM(ir@7$J5G&9-?!DsL&&V!DNYs<@==e(E|>9)TkmK=KgZ2{^oAO|Co)bAx4_SF z(B!uysidb*sRLc>_Q{D^3mTuX1Tnkg1)MzIPPZG zqv*fTPJa#q8_tO-U!z+j_VFtpakZmr2glP-=C`1mD>QlW)=v!YtQL4F;a2h(Z~w?g z*OBcg{uQ({uU>67UQm--@fEi75Xb3JAz$8K@OIuR?R>kn^H8RpFO>qWm*cVL-=%y? zT2H-klzwe1x~uklxzOY9Nf#!x$^3%z4z;W5S8;!Tfz+%0t6IKO2+2phr3iY3avV>p z&l}sde{{u1T4ng96DEqESFP_mvfq-Az9li~CdJj~^d{L4l&;2n zHKzMP;%h)R{UiKK{Ue7PGoF?+>tlW&qu!^fBWm`UAX_S z2rRo@3Dqo!|FQV zLDm0s9q@pqX+2=C{hqI_l0;h9KPXSy+qHG}WmaVPCOxF%^SBRz zZT_e@BE>Ux%sw4ti&yCzrD&s47I`mV~=?MJ%b zwM)by_usCsBUjfSw^NkM6m)dFM<)f-{lZ~9K=6H;c-Y(5#<^j6jORAq?a?&n&*U%U zcMH=7AJ%&k>h<+s-v{CI(}0R}JvzJkoN{Eo&!0lLpAv4w>Iag5>{aSuxg{7@s)B9`=+Vj=+ z{E)=0^oM+{FuuM5{;5X{+52yOz1i=JY(LZB>^{v3RD-YPaIu zDi_zMdh5i0fpP`2&&}X??jT;H@^^jqduF}8E4EHbdL9J7Zjal`#*eMTrS@;G=KDRZ z@okFV?Pg`IJ}17N_?gl-6@r zeF!h_vAXAlI{!~eCQT~qyEE$Bg~j!TLAtH!$Pz2A%7 z*{$#oAR!wIZrqE!ntlW{Zxeo3}|k2k+g|qH_J1alA|U9osK;ymtGN_RDJ&?``IH zuDVOpA$|0FI4(2zxgFB`i8*0^+$Z!j>yK|id6s)K@u=B^eVtFV_`br=)judn@_*F# zLXJRw-0yv?{qgl-f84WI#_9dB_p5#srobR0_`HmA=Y6WKr+!aya?s&1{m;ac^?NFeJ26u#RU(`tqkmhe^18!NVZSk+kbKkd49|B=zf?O>=(g_r1COVL$9bKFd9bi9-eD7}g=~LcGypw`1x1Mg&4|Jdf8s z_C9}Y`TY;`J7P71QQ7^Y8A_L*$0C1h@!r{;@}OYfzoCCY`{wqa{2znh!t|SA!~Fi& zvf2A$?%8@y#`kG#zL(ywJgoJ<0}!gLzE!C%tFc;937)VhC$=&vJ~zvBXTc zPxHNbTR&m?Pf^a>jq>A+jeL_oKK~oSmsncUAIiXYAwPuwIN-fqE25FWuV%IGy2v5w zpZVXc?~j1r`%@AAGE@j@?Wf)k!h6MWEKls&y$$?}MS(v-|6*m3W_@44(gtIoK|eP8 zbBYq|{$p|qxeVwyMd!8YeEyVW`rPO9r!2NKrO5f>B1=nz^a4$rTzx+2=jf7Cw4Bes z68mnC%QZe->ra*#9jAiw{2!uB+P-DKw`iL7 zqq3c&?wG0R^xU7?`&9mZp1Wl2>F2q<{d|39myjdtLd&Svqn1X$+QPKKv%i2fq3i!q z@6z*sw<{g#y5Eqcz1~fhR=i2a21$qKtEHZx-VLnR>|0px1I!;*JoVOv9_&WHwdd)& zkjiOxN>9RL^|fhXzdo;y{k!w$$Mmx;PLa2xDUSD3^f${YaPXobv$A0|S-lIpf|LI&bHBU#9bNTBcTh zw3~SurI8HV zvHin-`E$Pirp*$C{qn=es|UXbb+dku8|c5vH%|3`y|!n1{&lsbQ8|L2PYv(4*#vxH zzgx-lR)r7szn}TTn(ymsp#+&#Bjo2_NV+vV{J>hhW3=#Zup}mLq@fqh6=` z7p9*!{w5uFC_g?Q>=?GRmQOnLeN@Vi^$ptj+&Eq5Jf`p?%OrMxu&U2TBtIN4MLvPP zioaaa`kX(~JsJF#ZGCmDe!_W0Xr`akZ~qQWWBpWx8Ka*;KiNaM8-1kfv*=@CdPS(O zmlz)}ws@|_Nt5y9z6N^RZ+d$nP=tE^4Rp;^Z=Zzmf*t0U9xv`!x$vHFv0tN>hOwso z3i}J6kl!Eh{=s2|bGsJym!EW@UF>-}UfiYdA>2{IjcC4)7rZwVRoCo0FwJ^Pcoy1C z8CL^+cp;t--n&Kh-_{|j`v1h)^PP}KWBc8@e;j(8`Um@2*dNwq`o}|X^Hj3ST+0ph@cp6Q*?hZf{dOSt99d@=$h}DVeIfS)k#`}tLB=`i z7v-CD=zXL<{`vO-xURAHukgo$e-D6gv>X0DZ@v3LSEIl1{k9u}@?5WEkEOl&ceH=J z-TV&wZi~Nnm5AS@yqb1FJF#8ZKJ;fP=Ud>w=A)+@9XE<+T*$pk z->X0_Kx*`c{&T1|XEu;C-=}CM-=i($`vJ-~voBW6-4CqDUo&4~pNEl;%_3J}1N{6@ zpRbWf&O*Sp0+|-0e-k+0 zSI9@-&@>96Xevjx-+49dr}OBn9ygQUiWc%C-SPI7rk`p@tNQslp=%63?Cc2S=X2nv z5dFK9&qoI&pY+l6gnEfA+yh(H%kS3c!-?x9<;40g6usnbypE3r#Lepc(l1#r%&XLU zj@0`>Rx9JO)?2lk>^GtQ&u`F<+D|h4j|kfIJ88}A%lT}--M3r&>3CSk`T6c;f{1!l zsHtD;V>@wu+2wU2b^*;Ua+rtu^U)nr5AmT%fUhbC!i92JQzQSXJ_8Nl8p~mC3q5|W z$YGz!VXwr6obsQSuf}LQ@qM01+0`GTS4jL zNrh(gT~O1GRr#@eGx^c)YNkgIPo^H}eAfN=LavW!qsj(}K<6toUD7n?5%?E{_U#p7 z51327E|%EmEnMGci-h)d1L$Hu=D;@QyOCunE_(J^&{vFJDjD&b)e?vHmun!!$kuz; ztRM6IL3w_*WmPpAI>)rCmOu9z0FzrIlvAr?r%0K9FNNZ)zgP{U*o15IG)DzDDCKJpS`-(og?Q>VGQu&!4CKehL5i zI`H#k`p(J&pQJ-o{0baN|9q@|G7`-ZS6nv-juBW%>Ab>(9ikZzt6%v0d+B~L)?XU zqs4ws&DWiLTu=F!%Tk=*uGjWnr|EEB#rXjDvlx6H!ulCle-6LX^RxFJRy=+#*uE!^ z`<^8q-v^YK=TqUfMakw3k}kA8NARWj%Qs1WUfv?Xw`su-XH58BpXB@b+QBtFQZBad z%MZ>t!_v14+~5q=`{c$h$xp7gb4C+DID)SmC-xoY^xn1^@)-9&DIM|s)*p6hf8ahN zNJ`If`TW(-BXT}O{`~!(-mSV0QCXsR+e?Ojy2Ya=w;kFJ$!t3ZW#>4P*+#GNpU`Ic`4 z!t)7Suc2Q20C2J0W7K;iSM5-4SfYsQB^xs5);WC9;TdrKTP$+&++=bmOk$$J)1MSgfn(8b%jBptuU^v=#F#-@K)b-z>j7!fd8Z(%z-J^o%L>${J5w!5ZuoAx)#?z8HoQXk^eTq7nfH^eh9x3IsV?7(?@$n6h(Z; zj=}90-&dCWDVDF@3ik)7Jc}n;zLE#LTclp%Wk~G%oqmopzF+%E`>Fao>?b^zLi*1X z`W23LWF@+2dOiVoNdn=fQ14(z7~0>hvD>3DcEsv)c~{#_5rlMv?Z$fE0Mw4x%ZKs= zdGeky=}PVJ4zt5*)}YTSufda5&jxSO{^s^|(CkohcNefgZf@V~{CILQ2ti2g@5!tU zaDx&>Zh!N*-HLWvVK*obiDo)(p`Yz_)Pc# zvjhH~S!$>GpPvigA3Ys5WAh*U zz0>$Kg-^OQb~v6V-|NbWN6D48pM`veQMU->fb)- zosVzC^IfFTUyn*XelD=2_4~PC_ah6r3kfFnh^)kW_K6<)c|Z3L)9-NDeY|eJs_$Q` zJ*VE&F8X`y_@15MFHBh=alQG*J8^D>_M7GChY_+6{Z!~EmsPOEoH|?~-#jPf^G@kM+>=X83NY!S{lu_MTH;&Ier@B#EP0_4{NDy72t3au?Qi~KylaohAN%DJyPp-0YCFd}R4?P58}#{o znPeYG8jwf>!E zKbLDd={qF(Zm-=QhW<76$LlBEvtXCJ|9KqG)B!BM5da7rAIKknBYJCZx6YHpbF|0s zfN){|=eS3YkY}N85BzmD!+{`8I&Oi$T#gksG6MSrDR95o#~H%4vt5VH-#kUY@m)rx z*Y!PwpF+Lbpm5Ho`vLL%vHYTYR{5PVRSKqh)0UwtSl{?LXi#HnIQaXo~&tk4VUA`|!`GXDV_uqL!=~8-J{?voVD!(uMD(HL+^83USLDynY ztJEKL{qXM&`1>0Eo`#P*grjl}c6?cMG<@H4FWTG3*EaOCFEib3_0Z`T~uh;t$u4_5oMf#-C#DX=0BcBVV!SYQM`PDz5?=K_GtiKbM2Q*P6^V zyJGj6CUZ@{N7erOeab#ABy$B_H2CZ;`Qi43d>;t?A-kWc+Rn#}KDFP>r<4*~_hR{D zfjoTuD{LS751c1V<^`D+$j|OjZZ=;^78+lvKWBW|dQdC>&fDGLl5VZg`StHMy1tRF zLt(o^S76db-h0sYkEPsR;7H3U`PFon($jAFRBMRm_-)$U(JFi1nJL$ZAFqe<{5WuU zI(zR)wLNv*4%>(0qL0VnIL!Hz+iBweHs33?`H`HiMw?YW#D z5BSq}>HqeiT^s7Zzt^j1Q-A7LchA#$5qPtEp1AMm_c*n@?Pv zPw+PzkNy>?saIbky|7sf={-+V?4GBsn!ge4#HOMjUqoOo<5k`I+}F7~)$NdVqO%bA zl(FCAvkG$&hK<03f6*#~Z=WsMk>9t&`Y6A4gXjFG9f44c9S`$!2+U{vLdOr^a1rtf z6UWX&>2I^#V;zqchW#;n&y%VZ?6J-dl z{T{FTp6;&Jy9@rc`@O~7`0soAZI(;#ds2R=KRj2JwNLI3or^|ZK>p?`e0Dv{*JD}! zRDd|1C-VNb1oX7*&rhNI+oqggzg`ReD91I3|2N*>_E`J%pF?J@e{r^7Z-X!q#&dt$ z>#ScRO8fN_d4JpUA7g+1Chj?{_Ghk;DF0u;*pte^=F8rn$8&$%_Rt>Kyt;6b4rnoK zr`K}{1mx=l?mu%}quf}3{|~G8WpTbBcCuUT2-6Dymvjrd)PG>U$lc(w&)vU%yzW)Y z-lOaL2(;_-L7LM|eqI88!hNCa^Ei+j%L^a&9l8YN8GQUmrfG(sOGu{K`bJ6flWAQ7 z@BG$Vry@j1-@FWc+2;cReaQx`FIlbiHKI4I-`0IfB_S&szTRSxqhr@Xw?UW(C^0y;i(e74jATBkNiH& zFdwD__ql4#>G?*}KlVqivxe)8*TOGsv@ghWh8_Tx?xXm3p(=sj*#*FLXavTWsyaZ= z+f3h|VfwE7--X-@0mb&uiT>whH$?qHwqriJRGtsyo^E_I`g((&_iEP)OTz znU$Lk9K=6Q^qTc(`@yL|V87M$Qb`Zs9!9o1^^*Ebc+~^#z=YTIO9j4=d%pFDUj5D= z;I+N0c0toGGWZ_T_veYe6Th~f?q3qWrWY9ee9?Qtu?f8W38!hUB9YEHvOi3FK)oWr z)FZ+%`2Cz~=W4&mM{^|KpSxcg%2E5D_8-D&f7AX`8Ij_0eo^KV=$tD*VU^(#$1&32@kb!hYNpRIE8a~k0~s@fAuTlrACMrmqV`x|pLt#(Q$a->)LiyBgB-ih1=7Sf=nGas1&sUwJ z@kZbweX9(<-JVx2v*)M}AW^%)vp?3%2ZQ{Y`Jm&6l5;*-#7F!{H{0bwTnP6rMKAN! zRbl&qm^1K<^{mXSM{-YzeF+um9<))aID(d1pD+5P+ zTaUgMWZ-Cl>%pCofeZB^r0?_$9D7cLIRz;T4C z2luoLoZRza^TUu|Trppx2OI(G;mc*236|LVd0Fat-| zuO8g@GH^V>Sr6_=2CmQm?%y(S?0WU^{c8q}CZrzRS2A!MD(b;~Ap^&epdQ@kGjM!! zuO8fIGH}1v0Pd3+IC`x0@a@mQ(L<{T_h1H&Zywfz`|}JOJ-~W!e+)P->vr+EpXUE7DSz*XcJvR3*Y;Pa?}GOf#fNj` zM_JPM9SFY_@G0IV_WW+*b$edc`dNMp@+k+g4-Mqt<8R{MeHzvBJbuOfVfxFYkoekg zo@C58^&*9L|0p)UCb?G6O@-%Eh|l|bi1+6|t>!!bp+9sC&$IP9-D{WIen>z!%#YAb z`I7FVb;|qqN78mGDIf8x^gR07p4NE34ZJP&;S$4Z?dSLQ4|eF;)$ra%ke$wZ{hT}H zL{%dnUq*f9vMOF$-sr9e{|^Gs(VFKFt-dDkpA~qH+T(-&q`*_kurcMH7w)8m035qOucOUd8zE|AxS;!5$C(O9Wo$o8y6BBJg@oz#)3x!{#T1>q3|QwT_X5<2na>H0wPHro-2p z8~P{4AMqRv)|c|pYlsf(#gnl%$92r#6uF1zWrYqKUs?Va;kp&*U{AHgvg z(tWgs?p~q08NENw$crO(`rV0LQe5PgZLfdLl%wS(ypjz|CY*6^+4a5H(IlBt&?AL-w1_0rQBPrX}$dRcxQXb#r_K7+LP+v>Wb z`cc(&MwO4lxxejp&E-k_Z^nOrA34l_i{xux_I)R(!}q0G{=?{7e*UfA^EbkeJB491@wpcT(WogRQ~D?)tp=7 z`Ze*$cYW+VMqjrM=V2QFlj55#;*4UyR|U3}fp}gUz=iaD6VKD~a|OKmeJ!(_EdLVx zuP5i1N`7m7nASoczScs{7Y1^6dYw;xkDkH#3g>5M|7Uev^K*6n9W;k0f0y9D<7Jv2 zq^HyGvY#u}M3plvw)rF19q6%z=L2S=-thcF_IU{;vmP|_@xd+lfshPoe@!+>vgUmd za_IYRPFGpo;%H#v$vO^CTqFg{)3rSY?Y*hcE+68!Z0*YNa8t%Up_zm(UJViYC$gUs zl$-WNt%DVkk1t{X_VX!BFM>VFM|TT7g^90|@hrA=m2jVCKj=y_0o-^=X>*KbfY&Jo%BM7yMVvG2n7PD_Ky8h$VcZV2lKJ(L5_7jMb%`7Gom zcHS_2e=v*ho(w+vC&afmgKsMGygl;K>x974bk>gjM7y^sl-G8X*V{w<0QYhHb0RN& zAKU#*KR1}lWkk@+eyq^F)6&3mkobY@h7f-sj};mEe~2>F|9L=B@4ZTSkJ40ycpJ$% zt55#{yy<-*0liy5AJ0j%f3m+x4Eh+TclV>N^gfdg*B3ok>iR-DKJ>Rn6v|ci<+T5m z>^;A=3#mJ4^(~xKSx%W z@H|c1`LfWyZTlX-k3{JM-tKRSImj@5mf4d&dtY+7_KT{0IH>cOK)!oTzlK8kK_m5- z^xY`>rRSyn-mQ3Kui$a{hWeWAcdlRK)q`D>&rV?{YQyiNpwH#Sc5Ec)1sOTNpLhZ} zKR1wbWwqi@?W&EN19&f&CUzkATsc27fO!tkApLTi_uM4~L;EW4Czcc+?b>O<{p+0f zP^0qEi-nQ_yob)2?*PuVaC{iZy-aTAE98Dp^tu_|H~x(=gL1^n6{>vn0>e8)?q?Xt zEfdeUkb7Ii8FMpyZ2`V~bh_c0Bj;L(hxiM*JLJ4fGdvT6enq#HU znl1R=5uM(Gu0PM{Ay>+9Zp!doV&`MtCi>ZouHFn?Y-0GYDIU%P$sbozn&CM=kQ4di zl0ZHZ^+)?%V&`gZlXE}K@ceZKkJ9rnu#t{i#hw>(Z(=+)mgSz2(QDPm*7o*unfBIlZ);iK-_$L4bIWqSo}p9Q^UW>GU6GNe z()p&A<^CyCPTS!PEz7+=L#NuC^)1V-%9K<4QfgUlU)^@UvSqo~W%$!|qRU#A`>#y< zsa#&svfM+Na?0ODEz3Qep;PV3ueU7sP^O%Yk2UcM!b2L+q zD}eNid-22PaZIm-Z{Yr9%s~(#UTCrTTZ7)|Gw^k)?39UR3E;ynY_u=X1R?C^g8Hjfv2Ym^sCX1xfq&0_k@$6ecKq ze6^;N9z7?q4*J3;j?cfF%lmOT-upTg=k0_W^S!JQ#mDs&&S#uHwhQ&$&tDgFlcc<# zqb*M0ELYo)s_yOR>y{4J`29wmpR(L9g7T03J`vqlEKDNRpxe%o6ep-c6xvj-t~Y*O zgZ2L*^r;|TD($7|_Yy%9Rc^BQ28{`SzrZX1uHOY7C`G7;{{sR~=@Y-wle|gi>)tMY zZ`v<=KM3u~*E05m<3H!82Q%~JSHrM)yQO-o%L`HL`fL4s9q@Jm&qj;q;Ju)?B3-?& zQ~9}ShAOPv$55Z%5B;jbqcB2yx5k53kKgA>eZ)VkgF@g4`Dm%cetz7~2T2-L_s&qm z>+;XitL1WOKgr8%3H=Vucs?*+f_Mn=;O0kVg6I8cBl;ID*d>S$^SPZ%q8!+g{fMPJ z;vqio_=S|`x)r;&zdz)3HGo_``9R1G|A#d`GGxgu3td4HTgN$*j_ zPH)JM(2eIpH{v0IQ@+U;`E5ie>0t}Uc0S(E>2(ex6XCqF+3k|1y`P2my#6-zAT6(O z?N&Zqhvqr5u-r!=g7!@cpWLc?!EuAZ_1D+={eHM`eCK*psFw>+j{3h7c*Aw91Ayat z(~+RRg!?c%(QmxI^!$Tf%&8;UC$e0F2=b@Ka+k^mF77K-wHrkP(NM;f@lu_#Cr?+?)CjLE0#8`C@R9=7K*{v_n) zY4X8PR`*}pkN&Q|N7=63C8}&E6!ZxHhk(C*fh42B6>pUvZNS5ND;H^gKgv8Vvd_DGJO6%@|^z4VgMoZ<3Hz90w4sThx}#e8}oh4ZiRO}Bb}Fj(vad2`GE=wo$n9q z)qh8Mzy1W}eJ=QZGUfe-I`S@!(Qh@JC#v7H!(HId^?W1rOVUq(o}WK1x&MdQ@v5GG zThdR4o-h6%BKK)0D0kKOCr|Fv>&QJezu*CwBs@lcR0s7$^*z*csD3mD{s-->>(^NO zZR0qM-w@#H+3#=RS!%zn-!!)4dVg+Jzg6G8{$HgX{}x;kA6MOuKb7UovFWkMS@rqJ zlQZx9ayfgP`uX#qR0t1f6ctWV!=By;Z}Tv}S3aH&hX=vWXC!wX68q@)KEyZcx}e`P z=IbYZUf0{1>xR^S-`8gS9PQmtZhsFF2%YcN*y;1{>o_0&zI_=!BSSH#j-l7%{-vLj z<2+F7;a|+}-n~lV-fK2X?C_m;NiwS3tugyOIZyAwFKfR0HGU5==LPiX`Vk+4-_vR1 zWN{LEIpnO>rti)BJR&cBXB;ycKq~z7<_)>@6DHsnqSEOhS(+IV->TOu9gRR z`@V#)+x4EV1o-!WDsR;C{=R)$&kD<5tg*2RKYMX)Jxdf{TF>bU?|k(xnIjp=wR)Z< zJ%5s^x8n7wdPVVMop4p|P<*`aV=4kuj6V`vJ|_RiAAR&urVu^q^TypMPXBq;Hia|r z$iF+~(D%ILB8 zqXND|qT}4}OaE?PV)dIow_jlC7i-MrLUKj@X54%CT~f~VJs)k6wA%-_3tX4DI^5@h ze5mS;?Zc4Z$wxOSz7ahi(dqb$xoeHy0g2Ooy;Z7-T;A(Y?IL7-%3{73P=P`^yxXPJuHB>MId5H` zna_O@0`zgJA^m388qr_OU3P->zU+8Cdfk5d_Z~^_P=?-0K(DV~_`Z#|Yq_NMfa`T^ zpa?yQ@C!49c)5U*}_a%E96NduYB- zTbS^CDd%_wH&;aN@m*b#AK$HfhUes{N6B(Km)EyP;M4Ci*|;3vt@;q(WBv49DyPyG zHI(J|vNxf>->ddv?Nr@YTWjZQxv#MAE7f-P`}&hB)qW?-4{E)A2dw`65{K(j+exRL z)AaW7_GJJ2C#(|{#T&r5JtE}DdI-xkY7dtCJCrNf`nbz=aIWh2pzX6{&;2!P_qSx) zo$clA?(O3B6r&#spWc6}-$gS0IN9`Z)cAoC?FT=uH?9x(e!SrE{kHg7TF&q3C;vBP z=nD0*sz+Z}x!eAY+X3(Iey@w~i}iyn7VvSXD7{3}q}buzf2{hQI^f1@2!%UWx)(^? z4;A5fRK&er3~_fCBb=+P?Vsf5ZFTtZ{jp}{?#z^jf? z0Uw1)$UtEJEkVB1M|(+n{QZQ&B&N_#$Y;s8+{I)R-(Ygi*im1XE=K=mdZyz*Z2IZ? z=;O8PrTc$g9_Ra{ypIdTNxEK|)_?ujc78|5kJ0PxmGYg;1?jrgz zcFFBK`{9-*cni@(BDX5ue~~o%Bg5K0yT4+#rq?0A3qLnn%z4NV(!FOF@E7u=IG~!n zXWPD3lXA2Ky=SZ3^KyzA?E-qw2MX@{4j~@wv3=|_kwDmpe0uC-_OU^a><1&3@`#53 zH`r(U*hu3a{Ck}T`F^t7qjZ0JHh>WN0bCCc>t{Wze?Q_753+z?^hJkEAdd6j$&B+HAKZU%|FanB`bj(t z1wts~_!bfMT>WV3>;5>DkLp(_pKYS2WBZfpuj+lZKOL5SknK;bXMRmP98@@)$0Rm? z&z|dWe%-%kKX@AYd(qC-<>izLX+^$?+-d;bsL za@91O-`rc3$NbIzz2rgrP>j0BQu^IopU<^{X)fg^J^R%@A-%_ZFv2H22P8k~*(Y&W zjvABnXn&!;tq$eV#16I63l9BNyLd?Hg2;ysg>qN@7>_=D8vLj8y)ERb>W8HF7o4K` zeveuK>#nRVE_KO+c#ZWlTZbdRzuRQJIxnlZEN|s}-NW#){Q4&42d8Sk@%<9-KZ70q z9aJ4Jc#ev6CN{4N`{iMd6Qe@Dd`Fr4P~3M|7W6armxnPPmv?D>KL0A@o+Aa*^=9-b z*5mX2c(?Xr&YzfHw(qkRa_YGGJhvYY>30_J-5G{v^XaDZ9n{Z|m$z6OjW zT(5DS@F*Uq`-=42NytXTv{0mnA@T2f->L0go~QIxpwkTPZ`9a68!zn))}vVq6`*&a z&AV18obQ9ovUA1x=qDnF-W9rm(|e1)|HE%=Gx+&$r-%9mH9B4~yUF$?g7Pu}m-CRM z@T!@|1n(I6IUPGyf8ssLm(z9C3|+@zeZ=GYLxtSKg3tBQ^Zh$o4&M(o6b%j1NZCt(VTAu+&aY6kMa`yLAbP_vDcrs z^;X|cue?g1%YI`9|CfUEi!P6NRNJE-{6|Chxr*1%+m=cTB*VuC&UdFFr#L|!Rq9C> z(!NiUkIoYK2arDxzvAm9DeHdIkkLE4D}Bx%{(j22#Ea*Ces>;ZBtwnU@?;ou4wJ+qtV21F7|n#xuL#Z|wwu0RbF+X&uU$M_ez2Wb zAKOXFp?pob%N72b3%%SN`N8=!=i_rGe)IV8!#~M0O&SL#EQ;15rv6ehubWM*w1Y|j z;iNzAknD)(MTd~#-%;cE&XyURtQ#24!HcM^SQkJ&Lf_evj5b0Z_!rHYnAh`8-I`B6hVYYo4kPY8nOaUhzb-4JT&nf-i`<|`ULT&<=+Ws4N4cR}){OJg4m0$5 zs%M7R=Z*R3&qO{ce$Z2cfA%=>Yd4NwtKGb2eJP~F-|M3MsMnoFU(%!Frt6XW^P!x# z{2e8(f$hscyEseatm|v3e^%<^V`-nTT++8)^#gn|B)*^6ww? zled`tn&HWls~ReQ5937S8jdT!{P<_*eY;g2W5++P)kt}^sqeap zUXI#}c_1QGbKKAOCzo)=EgM}}P2TnRu@cR4qelEh-Mcr=r zyr&;B?*u(=4`!XB^p$Phk8TS(k_$9)a_Bsnt*Zjv~MJ zMduM*=Fg00ok}iH-`x_W=K`F5jw76cQ63R){JOM@G3s5QvDZ_K=r2u|b*sBVyNYsL zxAO1xQIC6&=lZ<1?{&wCiS~?qCd;*-`}y&tW0O1&?L@17&z@1w4$iFE7Z@6YcLnu6 zIPY28?~e(*pZg5ySuEua%X8X``OhII8tU0i?e|sta%f!$ul6y-|2o0HKgC~bPsiGo z)qu}OHwe7Tb?s)8Gh{ym(t5A|$MiXyR{U+~TJQCG{*2|=r6eCM(|i5jrSR0yeDoPf z`+4*^IIpyp@F+BwF@R_xdY`51%4CsT(m$=4|DB9XgliUR{MrsZw?jO0kd>EPDWN~l z(&y&_@74I}57!^g2BU34Z=hudyFydd>T$|4*+m-}`T%*WW>he3y2o zG>*HwB&XhcGtd2d_FxUP-#jVr=hYlf(z8wcQ(qrRmfO0B?eB#B_Am_GV>!>cw`M+} z^LSY=s5u9x^MM7oEttqJx3lNUwbNZdB#r=Zc*ELQdbG;QWUaZ_DX`W{~FVmh}8S?(Y`H09-{$kuW)${l4eg2z%r)jsKjkr#7g!;DA(im@e zPR!poX1y0@>Se#=`@2Uo?R^Id(hs65pVrd^?<+HS$q(^P3*N`19=!#4%iC3ts^`qq zaqx34TyGKnbGotY=U7Tlk@xpx-UJ#OwUe)Vxn6ioe`a+cCqEBHzm6eUenjn|y{F22 z${|^9>kWbYkJ8>O*YyVfF0boFXn*#z{dJp6_t}BZ?avc&zI;W{-u2GUXYFe3I!WX8 z8$Gw(z`h3jQC?O49ADLrFQ}nUja$7 zPdHCwzv6tI`To8r{T|Zi?cwWfowJdN&^w1u39k;pMuTs+=amKWSmxd6$`S9e`2B$H zcBC0ft0fXR(y5cd=v88)YvU4`)-~qy{)lQG*XX&3a;UfKx#~g*{ zJW1$6GNg-o{Kt4um@rAg%2V@*o~NYeO;$8>DiLsX$45n%+IN;`M~8u{bAsIs|)c)i(MWS!{5G! zP*{tb@Qi3L@?5_>zkHfLZ?|@Ge`FnCyYOhE#l17|1A%rQRYkp5|L8c=?W_4$*SDGP z_AFc%WBZbi+cR<<1mE6YLU?b74H@|B0{CYB<);sl5)F;~OP_an{T@60)Ju>Y4K7zZ zVaxi0vg6mzf`Jl)r*{pUrUIayAxxRgpU!440NyjfzKcH~ZYc)Nh z&*Pb0l6HLTm+T4LPvE#4+kOM@VUe`0{}9=HP_p-1)^_Oq59ML4Z?Hr8Dh;ds^m`%F_e5@1 zyalWqGEi?An5H)QI`$ZOu4yFC3#GjCO?-++@w4BuJ^g&E&-3Do$fe34vNcPlugWVy zjwfEiT*!&eK7#LOCVi%F-i|lx_*UTJGeVWGiAE21n>7E4rSFjThd%8W@v!zAmxG`0 zj=P1N^gCzadkwYvr|lZ*AN7g$$@TC6^shMOFQi_7Z-{n{a*ucHlYIZqf$uBEXR7>r zuctI17mcugqCfmzG50%Tdru_&o|(F(&|mdOs{KptC;e9jeVYRK@tc_4?!+tX{elVf zlA#}D3PJ6_^r&>|0!jOQEd4;s^8OvRg57IR_~#)%FTJ%EPcQOQJZdIVyPizdc5yuk z>!IBI9{;?oHbRbePkqv({Km$AVZw8jF6+N8f7;nk0T1aT-Ni`vGyS{9$!66P_n+L( z`aSlAN!mXCJl?7L?f#FyH`0DRkR#BnupX{^LLH75C+WcH-YON%3592 zk9a@uq;yaI(eWWmBZ8du{J-C$ciyeaINwts3SXZnOd&Od@0Qs6tMgf&p$+cy2g;j0 z*T=`s^-?V2dwmT3K*#6Fod-mp3%PS7pWnG=O@5!+M!+-e`_UUg6w_V~-(!<w>zqR|AbF(wf7JNxhwf(8-Yr8ey<>K$D zIekvoU|Hox{Yp^I@3o0X)ZTdc6PK&m&)gEBuaG-$oO0E2`KV9IxgBvk?d{_F&T*6N z;q;bLc^p$aHFLh;iJ#r2_)Ly0N4+jg(T*J7q|g1FmVd{hI&SO!a2~UNB69ipdpU*N zXOTZWr6V5I_K0`bxMKZ{a{f(}FGinK`bJgGad#JT!AIu49REIKoY9M7^zoDqDQE2! zXZVfpSN-<)k!Hp0Rj8*0zdk+`j9;cHFJJd?{(DdTqZ&H$(FZlnMnOpD&v$70SJz(e z6*?NX*Sqi>?e&=D{|@C7dc@%RH%9&=s?W2wDqu^w1B{|e<&HGv?(cK;Zhec?o7Oj~ z?K{}5{n+)+`+q*t^9w#tt(+_5rssRyK4#}bdQTGMGu$Nw;+w1=ouz5-7h~6#YRBth zn<_#&PCLFE4WHRRw@ZE>hTA`HKR+iFZ$$?}i0_dIe&z&~7v8I6P5J0ndBFFmG_CW4 zWVzW#B`2!bye;Wdd+YalCij{hzI&$N@%voe-%R?n{}(2zeRccfqj}3uUw+}l^Zmse{&Q+dvCIPTGc&H z_tj_h8@@q>cRSJ#IKgLlI4`3Iy$YxTE}hGK#4pmga1y<<=`vp; zot@U6?Mw8z+wI=F)LzfJTpPN4fj;+nJpEabx5Wb!UZwVJsls_X(a&V4T%qx-SE(OV zUaS>UUOFSpCJXk|CR4yYw5Tvv5Fu4f13JvOXM;7 zzs_&VY9>Su`&kan#v(<`u7@m*2=Mxzb9ygegZn6bp1^)ZJbvEC?V9_SRlic@R>+;q zYVclXyOz66lF`OC;~VS}U)8VFaxN#IPsH2RPQ~^fdLj2xLDV}<8#2`^X*_F+a@e%|{OkUp|icd#2t#W$O>?(Cx+kSWNxgPyb5Q1?R4` zKl?hXzt`>aNZ$|fd1snGSLsWxbwBzRp{F!$fjpquXV=(>|Fk@=zv1&PdrnK|&wai( zW?!{16HsXXQWv9ioz%}MvfYV?`bT+Y@0m>2ArryBhm+QKiRSxz3_ib#hgC0KFWf(I zyYAnOa{poQBsB!dt%}e40oy~`*ZdQ2pTW7hFy!|?Iz2wW^8OQ_+a(C&h2BrhkDsae zu6M+H8X!pzx_X^^-1#+ol@H^1yV==jo8VHsK5aN;jil?CIS$1D{`5qxx#$}R5H{g84 z6%(NAZ$BP(GJm#~XMOBCeqQO)g_>V^wZ?OB?)>Zc>G$NO_R#4tzGoGb!185UuFdRy z>US7E_B+;h=>-bseirlTk9dE(bcsIadiGKL?7dnma{Y<#GdcJ;{%WhAlYRuB=k!A? zB8Pi4-}$BgF#}nYhxk1vk4vrpS6-&@PETxe}F5qzP?BK zyk643jla+ryDuS5%dM0zE*5etrC$_s{ShHKFCM}{y?EE&<5JGrH@;uTfueo4Pvwtu z*`==$%;YfvX<-v|JS6$tfBfEOG>;j6{+Q)=;D6Gg_meRF5qYlXGt={yB|#(ir2O#H z0J1>+qlx9d#;*tXN&o6cs`MA5eNw{L6D|P?V)1jz8zEn&FYOkvntZlLy?knz=kwfw z2ijNnlSBNpHx3`>(<0W(?+WsFgE$%QsH6x^FZZL02+U)=>P-GZpLRY>e@Wk22zzuFKV1_Lb5^Phxc z@bc7qfXIC^q-Qr0^kfpd$J*_1R)76HAnMKagtzx5dQbm5q~I^uK1lCkZJ=4U?uz@N z<+g9;A2;2O5IZp!b6=2xbfdcP%l$F77t;ea|1RX7A@JUB^Rn87eu{F$ zL%!JG3%QF#54?Xko_+wavAp~M?vJG;9WT#CF`c)2;C;UBexa`$5}xf_$jujhq8?D6 zktIJ?JzIXsdpr6|^)4@OIiP&KtxAa;3CU%HTXxxKX;2?WYd?)?D#0;FlLXrFse#sj92Pan|tjS7>V zq50Myd>-cKWBmIL-$kdD8+jIP~=CxiO2nw2ap(I zIvtO6oatSna>?6w5&c|DFWmZR!Fxt;Uxa=M?D+6x=EW}P}!=*UM0A4Rp&4s1u# zK}WE6iQXSiIw?2F2gSWhzMs-hJD893-WJO3;|G*hWY>&m=O8;A&rXwcR%ks>Lc~+G~n%>(K!bGv&-tkKTY6I zt%0XLKYF|q{rK6(pSy2Ds{gF_H4E$G;R-1m)6tshkL` zFZyQ)*8=P53G4H5$m;3DbB1*NIy3%M*clKSk3$OJ_Q3Vb=T|n}NY_u@?{R)yUZnFJ z+z*k$pQ81q_l9=Qmkd8o;(EdQ<{5qU?a*IJIofxCMx~9Cj0UiQD1J3WC4RM?t0=U+ zM*V0gsQS^Iov1yaAMNWe`A8=)g|;iye{Q=>=qR+kO2$){2l+bXzxX{3Whk{P@_u^F;rSy|?FBe_7{qjr~YH;ZcB%q?{V{yL|K;c#3{v`on&ye&rOAlj{%V z)&)3@BQ&@Jcwd)tEZ`h8@fUKZNIGxdb0Izk-$(HJ-M)~9`)oL?ZxG5(RklP+35@~M93Lppx!P`Ug1*BF1%`sF&**M;&fkB0sth!KC$-iKp- z{V13Eixbs>b$U3@qP{16-u_<^y8i$6zC1pzqt5faetqe(T8?GQhwSIXj@ynUweFU3 zSU%*)iLsQ}icGHVw)#nGEOmFfTb4v7xSeAWgb)Y9L<>t+fq=!8h*=X z9oiQuAD<6TzhyaCFN?|H^Ui19vK(v@D#rn%9|ULCK{5Y-);ui7PQKN7Sm&a4@*$Ql zhd3ul>N^Z0Z!#Y{#Ny@hUwA%tK;g%J#OGtz^7)u352kzJ`BLo{!ZserZ3Xz1r;Zo#*qjql`YX(ZuFourCAc^{>f(S)2;Vd5fG^$bE*POL+g5 z=ZfI^D2^wc@cas07bvj_eraYOY6%8s=7XE{>z6oZ;1wcz#mf!pZ3ceO z9~K|)1JEt}9(yGVUz*PI{~!InZx>V=W=Ou5Jp}cF_HeU9oPSx(l4tJ=q~Q|RV^4rz zv0@`5IN0uXh~L5>w^eY7&r`6*D|Bur5jO&MX#bOy|LxE3n|+@c?{2vLPJ@r@X!N|Y z>EC4M=}VV~&-1Z7XqW#|-#d3`CZrDazJht#^J8~&yamb^hD$lWk>l@wL{B$iIy<@C z-1o53Fz&pS^C=jg(4+qw=Tl7nF?$~|BI+Zw5w#EUE!HKme`8PSH28uk)`tmr$@6|i zJ)*v|_nYgG8}tX_p_6u`5#_=hR-XHc@0Y*b@9net6YEy^J_=?5zcZ`6M~=z}?rnQ- z9}-dC+XswOb<1d1-*2wt72?nWEPWhTa6Ym?Pei-md<9!3S;yF+{~Tc#(!Pzf@^GwY zem{o$O`zT(9=e5eTy22)5!4I1Gvmx-YsswMxEg55j^m6V=S%WDfFXznO$^^Rf2;P6 z7ew02rR{_`?-%5AyT{)*`t$SoW_AwmaxZM>YIE(}A;x|I`~CmMci0`;HkMJ@?{NIa z)#OI-!$6VkiTw}phJ(CZ*zb|A7kt!ITrW}jO+DvBy=CV+d{SWGXZj=TN9KG7Ay=+r zIN&WSjFFKK`BCHxJ%3aAdw9A>cXOYf<13%X+}_OB6|p~Hf7~GQcY8BAr+6cmgZB@t z+`zxoxh3vg`zhp&l;B-B^f$RaBgG9QB=_FVB?uKY{AT<#W=`(j<{ z3|}5$`@E;oew<)r*6*} z&kx{Q<{!fc#QuXUKgL3S?#q1iLYN7^XN3R%>*uZ2kKA`7?cNaB7wF2F`Pdc^18RR> zt|xES%h>)7IZwfPD)!`xdNKdy$+G!51ZVcq6@%U~j79}q@ha|*3~~SVIQP+xp**?2 zqv8Rv=`+SQ_dHmZtxt|nzjPfu`0~hgiDY;%H*L|=*p}w67@_15j z{{8i`YKeL&VuEEpyRd&k2(B|I&$mVXGxf@|lR0Nm*4OP_oRFy}fLOi?`yZJNxTBgc zaM5~7ivFFgkJlN$d=IJ%YzzjxX}#3*^l@Ip^hDJ27SJ1}C&E5#wwLqz;OuN4Ahs*c zchOZe2z?PaQ{O^AMus_`{Eqo8@8gWPPmk$`OZX7X%HR42Rvz5vgZa9njvFG`-uT=T z`R=IWiYU`7-pkXG?Ni*!vDBm6dN?k>f$QOh8w7ul`|>??S+4GD#5tjlayq7q^IWNC zp>a;{1+odhXM`{H4(}ULA0Zh1;~Bdw>h+A!lYnT4Gabmu_cmZWjF0mS3_E}Rwc{1O z2k|m9|AJ~`@+*7~@bF8Rr&S!n+5tXczcY9vr{lPR@)3bG$lRX3r9VJaJiq+!OqtNy#Re`fjFghJ|CC!Ez~p2nS5T}emwxho4Jp45UDK| z4pqNsIO@-0{HPg=g_}9yr!fEEaGX`v|F-}WIJxgPAo}Ts1P{misoecCGXH@=PRIJe zas&iFeeWFUSRNUU^C4y5jHnL`SL{koJ^3O26F|oq{032vXlGHCy1?H7e(VtZ0hiG; zi(`HcD#QmpXn~+ohiE6!ABG^DwUf}t_8^ZZ_f;bulFpv%3K$)RvvvwHn0a3l!&y5m z63*Ibk#G}4$aGJ^HESo3qqGyW1G-E*^>Vx+&iw`LB=Q+J#_6cvSdM_;m*+>w@dN3s zokTpG|0wO06RxzA2*+}>c7k}Uoq})y4(%RmC-7N2iFSEh%$xDP9qpbvze{WFf=}8- zdEU+jQ4i97bh`Nd$M!Hw4xXd%a|#_=1q&!{;o-UK`w*hb_frBZIK9-4vuMyCZcfx#RQD|@X_Dw{^@zFNBO=bkHz!J!g;o|7%Cw+DX-IwQaMJy7wXXjAN2|SwzoO22>t!Xb;hq+6S1A@lc-;z_5_9=M^h_j4sQcv6nkp zu-1MZ_ho<1*vm!2SwCDPob|&+!m%kAlW*pPpAz|AU@wIpV1EG?Ezkjfz->SP4*QK_ zFGW2CM7<0FAM1yLU(WyJcf63!`k{!2^{4d1oN%Qdig2ta?1yL{VY|b5X)n6~qkd%U zWD5XrYP)LbfV>ZaeS2?!ZaCoILcaOq?SfCP?>V$8#)tDjEZV?E{EP9$JaQ9*nfGbB zppZ;oxp*zs%IP>C!I+&69$(H+2E2*!BFMLV>&h!3Sz{&S# z9$(HN->1Sa;qSTQYCJ71=O^Vg+|bB*ue3ulU$Vb`M94a0@{97iKe4`7D$bjb@=C?L z+o8Si269UNPCK7321NcG8b22X?FhQueFs=?T~L2GFT!<~^YE*)bfEn686BMUBl^6Pg(tf`w`ji zMZ=3~XT0zx#qkOU*ITIvfe&+1MdrCD7oesKqXpD*U$rsV&Z=Q00SuUNi; zB+tQueo({H#qk;Sp?wR-4z_C%+Evj@NPi=zOTCus!L)qk!k#+V>L|$J(Zt_#$4d>~ zfU0~L4@CcXd_g&Rdu~W_5xCB4!X>sR`kRf_tX;7lupPR<$99(e;y4x#@n-JFgg&>o z3Va*)<##fVi+Yjcq?`}R_p{~uqSSs?RC9%w_N}}cYd<@#VZJa#o-ZQT=Q8%yMDFam zWqC#)ct>1Nj}E?`v7jC|aygHOxSwsWe`EGp>UpVy@4qcI`1vF9`x&y|tNQ1G?lZW=U1%6B3m+oflTKhrn%W*t2&sroLE$?FdY@W3UKX%E*_|2T~Q=l)X z9}DJLK41bj1V3z_%sdPD(ILMw&l3ES5A_ghMy?;r@2tpuoJhy=$Z*sfWu7JEVYo8S z%E^}>;$yq8`yFAIL7n*h4*00=F+N=7ya#kGZy%7`0`yXwxF5X)065GSmRCMMkmFyj zy~J`Y7S7s7j&m2GG%k;|&m!R-pf4uJ%n8rTgCSqa{U|qw8tMycAFh6x^TQXkkI0W~ z51i++_PGuc11F#3oDum%I%^*h5A|MYpPX=|eR9f;?X#hYiD&QKU>3We9IRc0J;C?k zu>Blb8EY50zJ}?W5U%!PU#qmYJREBfo$o0eAAbh+z8B1m2_bktjK11meY-Q`1;|Gy z=M5PDM-cxbJXovR%`d8ieU#@wNIQo8!i1lE-iCU^a03K_tKw!)E4Dbs`)Cs`hlDTB z0g!w+E;G9Dt2Xg?@;R2h7@_Ulkf z;l31pCi*15a-M&?4n%OWo;X_g7ujU%p5@(2ZGt#QJ%w4%32WVve<5=twM)(vq?MK!2<^pjpvWVk91mL{nP#U@{dO z2*g9tNH=5XwNiluFa(k#$z!1e3yVaL#g1BmWTZE0g#!tQ!h#2^fh2IVYY-UdiA2MJ zcp}!D2n_^6;c&uACM9Ece1tPXr0#)uKsyV1hK_3&e0z=HIf6R`qvSt{#vv#EB)^@_ z$P4mq78!h+V)lk$Hhs@>RbC&#CSN|v$n#)>gOm9g6YVbX6u};0Hzd7}U~Qi&FW9Z( zVS+~qp6^ll-PmEl$@IzyK6_N9&k#IE@Z^ZfKTmM_-70;G;2>_&1t;?}O7I-PUhJ4T z{N^1h?j!gd!RC8Z{y4#71kVxdJ+8*@BY2$Pd4hduHU3G0rwR6*Q2FBo&)==mefOyN zEWz&oq|(O;o+8-$UX{O(;NYlApCH)(K9wFMc#_~5g1zroo<1ReF%% zIKgdSAp8W!37(l$`R57NzNpeCzogeVr#|fSz*!K@= z{62!m37#Xk>>t(m9R!aNJWH_WIW_)af+uHG`W(UjAFA}z1Wyy}eo5sw3GO3!ir`s- z%^#`q`~*)B?EbOJZxTF3u=k%-{uYAc1dkHz`H338kKoe;vqMH8iX6{6URL9e5j;z< zcUI+(6MULr?G=^3jo_06&k$_>RE^(9@HoLU1bcp_#&07yP4H=g=Lz<{s>%xzJVx*| z!S0`{@mmNUCU}zIIfBjqp~^c<@JWKF2-bd~#`hB(CwPM3S%TZO*qorrd4ebYpwbWjQN^CuReYA< zzVj-5nB9S8`|D|b6iBB3_KEW_WPf&x^+btHf@cYyx9coH$sZT%x)RS292eimmGl-^ zM@J{|Fu^V2IkBW4CfF;^JC^iw1drvb@<$6)JWFuPGL?SXqheo)ih~4umaFs@g69b~ z#d#Al|5F5eR;coZ2{ubr`Y6HLN|o*>c#L50DwV&F;8}u)#ez~M{{#ous`7>jo*~%1 zPUSBvS8)fyUh$w?rawmTIf74`s=O(J-Qqd1l;_7oB69RIPOx{AN*~*-;9uxg3T*c`WV5Ut5mv|;68%W1Zz9g_{RJqf@cXH-lg)F?N)IM!4m|>`EhcY@oSvm8G^^JCi2@!#WQ^>HX|zb6Rbs5dKJOq0Q_7UtSxP{<0 zf;$L4OmL9kIKgRxPZB&q@Fc-g1Wyw@L+~uYa|F*5e2!r4AJzITBiKieB2_7Z*B*7B|PZB&u@HD}51Zyv-<#iM6A-IfSAHjZt<-7WF z{?te4X@bWHo+S7*!Dk7cB6x=2IfBm-?0!+Lk1~S21p5hYBREKKAHivY#|WMv_%y*& z1kVsWNANj<-7}=T1bYeg6Wm7dVS@VzP7{2R;BkWGHA}ydcvL)}%J4s?(#yW6V(;ImI8N~VmsI+>FRR%96&1&yP_gH|Lv3ZI6mabMzPE zd&jbLH0{2RXR#eF-N&=(I{?o;lBGN0a{i7i-39n?I*Z+a$8yrcGFJ7)2CS;YU^Hqa zs)k~Tqg6-ZJr$`~tUsA^6&p+ePcl{2A32f;B}S^cV+pG&ndq(x_4miRtNKGDz*3n= zb_2G;X7G9|IoO|SZXS#dB|>rU)}R@SnxUu}Y)vGB=CM%!pw$_*hT~Ru3fTLtXm6^| zjP;n2XnZhrAeJ&gj(KDxWhKpo6$g;J4NbYC=*iiG+j@3zcTpJj%!@l&vK407Dv z9UFx0X56u%HqEd9a`pD_sN$+bES9RO><%S*V^s;OHWPhYP674mEJ7H%XwCv7fp-6w|NWZlcH3!;C@ZAkI2JkM@`Ay`9mc(b!NF zY))@95bNoIov6)V>;Rb&Zm2?L92zcB5d$+k6#H{?8c!v_SVJcYz!lW&Znkmupmp1z z1)BU0Ky9I8)_!Jy4?@S-9~p?G_ETQj7 z$HLIDMab^HP=W;Qfy4({=g~a7P91jnsLjBeO3$!6|6ccF+MZ^6$N$iis;@3m(Z;$qmAe|??Cz62C z6)FW1Z5@cGM)oCl=7wcKS8T99ybG=APHsh7hoN$kyAn7Cc0}Sb?LDBlXvOzMJCk4p zQ@dj@Yrp|qT)?oev1BR-W@A7NT2c}SxZdg+Oj=pUZLIazHr4s+s_Sa%YU}Fi z>gyWn8teRZP4&L|>iU}c+WNZs`uc|Y#(IB!Q-iOex}m0_wxO<}zM-L^vBBTa)aYxh zZmemnZLDjoZ)|96Z1gua`F;Lse~rJ^U+1s)H~1U`P)tNcJmJN z4sX79`&K?bNTxywG3_&D0-ORZ$R-;W>V=q5vTTX@1d9nHN6IvhfbzgZg8}vm!BK43 zl(}Wgc2iET+T*BibOvh%(Kv}2?1EAZ!rKU7!>Zy5ct-)X9*UyrhQr}>8ZM{XomY~- zu3&ZHiXzXlqGG$pSibzCyp{SYN11K4vBtH|R<3VYX&RRq+ievEmAcQUw$D~8z z@PQ9~=8Iqb+EY(|=kI>}t-Bxi*vG%~{T~#SY;E1w6}Iks;4{Gd)OTKf_2=_NC9V6yR{HM0 zdGZ@)o_}%v*LU4>@1vjo#+j#{`Th@H`cd21*T47l_kXbOKzr9aZw&D^HyH z=F`u-Sh8}}O*jAU_ivm}7Y*F@lb4qjZ-~a$l?U#4&ts2&?a4o`T(y3~-m4F^AHMPC zTiJ=MVM{PJL(k*_j{y;*Il~8Mye)m+g1%aj&&IOHO=# zS^9JJ-h%Y3vD&TMtL$}lm!Z3yu9EzY;^nSRmtkL*pJ%uYmtivuqtNa!3Y_|~Qb)5< z;&M7Xt}d6&Ra(?x-)+F#yY>=iabdH)d~?7Yu)k|_ddhLi_;&l-}%t$g3{3k9aWCYUAARqdFlUFkt$5Tu%^(FKJQ4sT==UZ*6 z#=H|ZuSlPEr@y<+Z{$1u?!E3pXR2Vmaijg6dFi{#*5$9v+iy?5-}$*m3s>2zAF-c! z=~7pr!;$_}$%z5auy>misQ1~^-!Rr1#YLJ^*P(beP*YpJqrkSz?$JwZ%N-Y$tk6qs zt8A-_);Y@EoAh@XM{Q5qp0zz!_9dYkY;(3>ne+B@wm;ZFQT4(tmtS?D z{r-m^{;y6~Uc;4F-SC^~XYDJ>8X9ltI{w+m9{+m%?DF@%?}HC#)DN}qKzrD_`72MX zUFUM=7pz#-(9}HfnVBEvHJ*H6!j*sdRXvgWKNJi6>a`n>eDq^myqzB(f8>*oo|^c= zSD*a0v!JlFym?3Kb)P=<_um_LtzL8S=Bsu*^|al*Wb>uoT7PrfHTydbcHV$G7VNfq zjwXliIR5@eKl}LP+3Cj~ANl)e?8CQSe7nPdCh0Nss><}8y6Xz`^vM&Ac`NhX>9HoG+nwiI>DXwjb?7aA`?ZcLd%i2r)nab37v?n> z&5kuLd!egiUt?`it*g?Vf8x^X4|v_%ZdkWsRo(&n`r_ToR=e_@ZSF03g9STwZgXDl z$ah}n)Eyqfk-qoH`Zjld`qQ^w+**+DEV`)4mEW-4?n$4$B7Cs0EiZp>>)JN=!SbdP zuD$u?#?|{8jb-k9Cvcr;Se<@CFRm%N>tj8G1?g|U|H-?n?tk{qs~`FAcQ(1U*=@l~ z^Y`X^9T(j>d6RXmy~$P5f=&I-1xZ1d9S8?e*9haq_uQ1lwZ71T*4*ec2{o>aB_I$hTu97|b zuS|dI3a4)GbgZqjomjTr9xl8gKmC}$ylA^U4^-Nj{^(sZ?jobeNEN=*1zpDOhx~ip z7aurrsIb&99Im|8E?1sWX?va<3PyiXLSABP+%i z4iUlN5x66c;^Y%=I=$KXH_TWPa03OS7A$pKZsKGh36heLuw`y#QFpPsD?UkSHV-96 z_9kKj?52f+pT9`Y1dxb*rCn7 za-Hv$(7}KC=_7}x=UzEvYL%Vy`k78Rp2r1;jqAD%{^@N6zEY2Fxol3GO}Ag7uU~sp zL33W7US`+xz?e8LGlq(Fvk}G=IF|yqa4EeS-y3N)EHpgxQ%d4-q8F~R? z2QcU>Y%9Sc0XIl?>nfk9AK_owgM&-vjYj*5U;Z}LEdB<<$9ZL z*Fm)I*00lTu0r<_-IiD2yvDW`r0II&G9A)$6zH4s^d7tJge=)s+w6wNUIdp;y;z4A z8;x?K+_v7^G`GR;#hep}Vir3vG3I(1G=UffeY~$92P9 z%4$>BSL(}LhU0JDScFwrlh8WIrQ7})^5X=5t*z6IA@9Ok0IFp`Gdi?9-S%5(YtRAx zB&226&3vzuwT{zfR6-@gq4&Uj{Ysk)rM=q;2|zuAc41OF{$B*W zZxOm6F>mf`y4EfNJh1%RB(BBMFGGA)m=n&5HS=*;FfJ3kxK=FP^e_3g+xLxpD&9314u4i>|>YT<-i(4+jPeFLKxJECR?-XRf6ttfJ-(vNn zoe~V-0ei;D`WgMEu62k|JZGRtTu)CgUT?k^IKxu($>%OiKm7cK>DrsfFB9~>7qjKb zE!UKICkyEwQI_0xPv^wPXE^AjkJo1fJr3~~>wn`Ajt=EZxzfk*i5&SdT>3~ao5R1F z_RVkW85>pw51T|c)TZGXsN|PE^7E6<;T?CNqZ@mT`;+tB$G^GtFdyS+<5PO399Kg+ z>jZlfgiD>aAWYiYTc6f7Q}9%QzfoN0hWj8)>gU|+i|4m*8Baeg{5Tpva32EsGA`mr z0bh(4!X>@|1EmDuQ~J}uzcPpZW57~pG5EKDc}kq=cYxWmA`vGI&sb%>N*_r+v3GXU zGdi3L#~nVCll7Gwj*k@^1P`7s57nA+-vV5aL7MhGz`6PT8Q|Rfy$V|M61|fgBdYJ(1 zMFO~M;U}+i!@D3{wry_s^$>m){Lq!PX8T`mIp?9@FnXcLo#-deO=tV%tq@^7XVY@S zEeOYSB~99|62V*c5SJ;-Gc5)+@pwGbzu-v!7)JSp$O1mIMtAN(9w7Bt+CixccmFk~ zWB)++AontLA)xl#H@JLF@XLH|5?JzO{K}LyoYE@8Blw^Ze0Gy%^;afhT4e%!AaLr) zfL7TX9jxpNCHu5Wt1r+4=Y?2|78-z4NGg+kAOV*BAYKf`WRm!EF0j=2ll3$wgh}5c z>P@Br&7?TAD_EzpAIN%^zMEGo>vMQ1<=MmV3 zGQMmF=?58CmM+^%`nZPyZK;ee^+5Vk4}=)SK42Ky(meRd_)<@$FZEQ?W&Y)Oa0udJ zy-2;rxivcJFDqp*^GC*)0gZ5hF{J!+(AUsO|4D|je`x$-AYlwSp2+tJq#q;^2-J2$ sT+|&Izw9NRzVxSohEDb~8DEzF8lcIzj8XiV6LN0O4TNhhJsbFc0KdL%HUIzs diff --git a/program-test/src/programs/spl_associated_token_account-1.1.1.so b/program-test/src/programs/spl_associated_token_account-1.1.1.so new file mode 100644 index 0000000000000000000000000000000000000000..63c3958b2eb60b5d7de4fc3072a0dc5bf87467f1 GIT binary patch literal 105032 zcmeEv3!GI~dG9_02S}_A5H^r$kTbk9Iy#9l!HH4wFhOd~_&CC)#&8%%NMa&~NdlX# z29g+&wzrUIM5>h;NElk%(q4N*t-XiV_Dbuu(%x!mtCd*G_eedOxc~+Sr#pgCPvGm zi=rt~w~RU!D=x;n*J**r(NqP<+)4O%c)gYv<5M%Wp2uOki6~mNRofNg^|Q2{$KI|5 z+3auV0c}@|4{5W=<0+O-rt6Pti?;iK<=3WbjcUu&XP$?=Wcq9=iCeyZhCh;NN@!gA zo}{0e5JiOW9%MiE+$btX-_d#oCvG8CY$s6^mxyr`h3$S0?Yw`F8^)((t>P26kV?R* zNd!0wcQL@tLsr}}67Dv@P1aVVL54@o=xKsS8sL%jU(^1bUz5?z8HBW5@u;>;mLG}H zo0mHu!61aE(5}K5NtTdbcN4#w^7DMaUs8Zy6ZlJ!i+)VrIewBIJsbS10)LqRIv?o&6@Hd<{_(gp>^AowB`BB*Szo5Sh zY2SY@@GqQw|E0iRcERNFS%H7y^y&8m{)N-0-xBz{&l`U#fE3!pL4m*byumNp!$$yr z#CUrF$Gcw;dM?~}_mIH9aQ3iC;4iyi^0-UjUpRZXUEp6hdw7Guzi{?&i@?8d_HeDh zKYHHeTLGldo?k5RkDWL8MSGqP_?bN~mu{lQH5Om4aoV@8Uv^3_oLr8O8`}vEas6KE+>c^$$$oe1| zP&jevI%&ZEI3?x0m|e5oMZmwI)9I)>S${OE_rf_^pY!nKz%l7388|9&IYJ@f0%+~6 zQFPZV07jUN^xEX!KK|~nZ0t*CP2o?;f9*T&t?+m4?QgH7w$5Vv*~lY)tV#U7{hTPO zVui@ito+gdFULEbs{N-^wZC+OG><|)?gSm|Cq_|2mkZHsbkmcPGaA_c?U!LbabUO6 zyHnzosKOuB((@uVP3qc@&&QLxw*PrV=pst`t^7)j;}-4E>m@HyeA(Y$g5HL;Cw{_@ zVEyuWl#@<@JE(fqYwL`1q>5J`_&vch-Lh5U{;%)(CI9c_>`PNvgIMELfYu5iY@U1?ee27c7e%z=0$?Zk?*?3gjHy+lQ z?Y|B{L8j59y7O1jDYNX62&K946}B^mL=mk53F z#4AM~;)z#?KE@Nfr000zi-805Dbe< zz?@{E=BM4;HT@Dxx9!xl>0zj6$9@1k>sT-4Y4;k58_Jd_UANWY4MH*_SgpgXk%QqQNek23Rk7PjcO$K%= zz5|B$z;;XTw0Nt;)hXx@p&XeW*OyB=8PxV6U0-QRS4Hb@)^?49l8mSylviVyrb*v_ z{YmJK)y^vob%<&Bm4mSV?Xa@Kl`OwL~}ll{AA#m&>LeF&LnzDbf%x?;Da%h4Z7MzV34#N3}Dgivqy zqW{?-V|U>9i05}9&}3-HjDA`fky-NB|JJx92wqEfX zF#DvkBl!Mp+Hq3bPgl5U#|cXt{Ep+AwsvWo>U+qar@)`IP30Vpm#$ZHF@bTrPukrs ztlxI)x6S%(w|?8K-*&~fS-*cF{jL%Gn)N%C{T|$|_?y3Y)^rakK9hmwcMEzUercPQ zQ;wXtg?ySN`n6Z(vSX*oMe$GDRBtHv3Yw;EyG?%EEjB$fznr$2zL{U{Z<{50%l7ym z?T4gY*uUUs<4kgJtMctJR7T*ua>*TRse$tYrbx$2u_j3Nn>;dq_W~&o$LS-eAIgDt zlXlELMTi`asQGC}MbgR82I)WDF;&uOo31x}d`a7MoiPIceS{W8lVLBb$p0ra?RG?b zUyHI@hG!|7fhy&wA{FT$Izl>u*J6~g9qlxENU9B!8~Nt?%X%%a1^1J=-+!SrO!lii zmZMjSJd$k+kK;Mvr>g!V;1e$UDM#(vE}JLVcrmEFH; z<2R{a%g530jL<)hAIYHVdpI6^1p*j39y}s&sm~B6uzhr%!>+P+6htDXd9r1G`18)I-&CoqvRQQLl*45aKZ3$FUDk zzkPgw&tkxOK=_lWn2}a{O)k;$5KhrP-o*X-%>F)d1|p0a2eciR?;@|drklxYb%75m zuiYvy<9{fxH?n@f=k=7A`};w~oAm!Ga7v|R=>*fkFq?_Bl0QJBhwSo(S@#9|JnlGqE7+6UhnEcy)Nlj@eAQy!Fo00^OMHE zwVH02pQAp}a@qgg&?m=_>AxYq*1jyeGSIidkBh$bcIdh^+4nI?r`?++PWJED^ok9d ze&WNLUcFx8@%oRD|E|A1qv-E-$S+4a&!NAd%DNvK&Hv{5SsUS}yuarQ+}pHVw=JT^ z<;K5kox4af;)x4oJd7tUuyyWyTj$QRb#6O+7^VahEAm`Exvv6DVJH1Z7)8nEQxb=C z_i%hO|I~QD6k|Pl>_7O6^0|@Y@_^Ef`S16ckM)}1o3_oiw9NsmESC9g zvvp^>LHEn(>#AkVd{(piAjHL&EQlS4PpiKF|{WjT`_#fgY z>UDAs_JVz4hNOO6Vz-Bo|9{oAe{Dx7%kLCW(w_6s7vY!tGnP*;lwXbV5I<_P`;&6? z%Yt9J=aA}YT^)QgyguC&uiQTFFZ4?l2>Zn}GwAmhrQc-ZUgTo_3p&8UVR~}ePcTwT?ysR`8L)SW}oUu^7$`M1)-n)R-WyDM1}p2 z(>kxn_CHQ(no5C?t~e>_v(INAm-^xOdXnSAHp#|%Q}Ljl96=W8xfSvV=~)jw4&~BEb{$&LB7`-9(fcor=taZ`W5Qaz$wv#w9WnX$#Lt|r(pugz>iyhRtVkCM1Lk1 z^kND1?Lh$}&-0GpC;8n{sJ9&Te4Gm9dE;5+c}GE>uQmA1^`}b^NwR&`^=d~pZa34X zmz<^lrwaXZ3N*StRkZ(&%Oq~*pN^Y8ohaxNj}|0DC(N%LAGaPIp43c_W+@)oyvF>` zpv{vy%>V4Oc~ZCepZzvZ8mIpmbzW)XbkZ(p$n#LjE1jTj4vHK6(6H3ZBzRV{pqh` z9pe5V+z0aUVsWS8w%`2OTB7!E?(X8rGiQb=0+cfK|2_jA(kZo#ivzrVnK z>qi7$zW--*XZxPkubtOSJFH(0!U$QvLz?FP-?z|ju|FSwXeV3IZ@wS5SH|CvU#&8p z?w0&?$95Z^l@9DrNSf^{(*I7a*S6K-4OU5i?+9~%z|_klwFsi^OMi{&ZH1A7wv*rt37>FzQ< z%_{I|tE`KZ9`eWQO)u0tB=wY@u-K!o~yHhcNPg5i3t_Hs=1?@`4kw3lP7AJ_}+pqaf~UeH&y1Et63dF0=Mg5FZj z?)Q^HwFB0hTY#tfbvWb8PqO@g;>&$e;b&db&Gi4N0^O?rieIR&zgehvi24=GQ@hXw z@%z<6y-<(G()Tg-+VsKq4U;ELE^Cc08;8Pu$A7?vo%>PZbu0AK+xt4bHuxIR``(Tv zI2ouTCt9zjej{x=s_D0>U#UhqflPPo z*8FYOf7@P7@76TV*-1JaAKrmI%yf&5+jlB_?qbpfJcWOZL%J)}bC<8_Q?gI{@$)jo z{~^FlK8OJl!RH-(UPpMze#L*`gbz!a^#NA=6617_(vjY2_#58omXY|cL_ZCz0T>oe zGQ5!%yx*(&pJ4bj@t$-h`?Npe7h_40ou9MkA5PE034ZS5 zAH@IH@4Z|A)i*AYI59t$UZL=legH&BUaD#C_YskWWry=6fs?*L%UursJhnPf(2o54 z7VU^R{=OE|4C#uUBJcXf4oPR_l0x~##^=>aXY#no>#bUW=UW6X^vAdy{juWJwq4=w zG&(Jfa_H~S=X7|UXYF@d`BqDBmvq`~&s7GM&uND~ zR{>w8+~*M)-AYE(-=^}xc&+f-W-I)G!Z>Cm31(%$SjyTkS8@L|1E96ttyU9#^e zeqf)aVb?OAnqQ#)K{PVHya0Z^HgHP%PlnX)k|))!^Z83E6omZ|9_?;A{A)6}MDWhu z^BbsWdK~ZhJ$cu3PD`{`CbEY)(Cn~$@e9zQ=;DZO{Dm$?2q=Zoou*%i+3 z8DExb+|i@)o;4CDHyeL?N5gx*;=N^=)UV%Qe0sI<>3XBTry@Vni@3r#nlJ0Lae>||$(&mo`RL}d{c3b_;)_$j@Rj&R%ME-nrtCg!9F|Jv9 zueIMGY4@WU-%XGD+y2AqAF=wUB~CK`d`i-xAEe(M)jt>g@slc_$?##JKTZaQ6t3wf z{qqD=rN7$*-{tdcrXN53?ELK)Fqg^w?Ux0i+~0ml(&gx{B=&yi8h?D=;{L0%W_qXQ zi1YTlg%0Oy17iz=&o7hpnhyCVa7$v$K)ypOE&c+3C6aYt_qo&Ha+`L&<@^Ua$RJZ2G@rtE7_+MjwTYFcQCAO5aAK zudeiE^VA({6wdmJv`^k*q`=1^_t!YTCiQ%L zt@``=Cik>M%b$W?vwhXaEu7VE8eS@Dcr}5Pmda(KA`Q=)k~xt=Qt!IUEO7A5I+ zuupIKJ=Wi7%*RcHx=fnG+B_F+dl?`LOxP2en<2ROCmxN9`fmWd3oB+Cyr7JbADA#|_$UWPhK~{%jul z)I~NPxPL>M!PlAf_t^Y)tNE+#6)ErEqw~(jt0fuHu1Hta=ea80sDH&#(c5siHw zy2bp9?FZ!h0Ls77_W_j8`96U1BkfSXl4R?B^)J2;kk2!f&m;B$oPP7~xgR~E@@zY; z^87K(Gie#LhYt8FpYJg}>si|4`yiv-9v?M-yj0@2r2H&LKQHP34F2Z@&ywD|hS7U( zf!>XhE=TW>xbZU8>&9Y>u~)&6&69U)Ivg+dV!y?o52W3PMPDeVwHHHfgIb^aazoq~ z9nf(!E=?1=Nq4Bf81@{G@V03?jtf2bNq8S^2fP7;M|}dgaf2R6xM{oSI&s{tWL+X?mU%V;2zjAGSaKfKizEY7il|R*ZF&r z*bkNZnSbwBzn21chQ!WQ`TM9N_j$jj{k~r7KZS0{lC$pfV!xTe*Gu(&o40wsqKkR4 zj+@C&%}8v1IC7r;1;xXjAEc|*kJUeLx%5+iztWX#u1Fg5AN41hA2+|$CB;$lnDQ;L zeJ(!NBE}0b;bn|*L;LI3`i)f<-=eYm8B+aDcO297KJ(+JWznkH4 z5_l&ElyC85RTP{b5;*R!Fy2er{ZjJ8kf!$?(s;k|d4w7=e& z3j~j%pDoIT`qKI=^>Z8em+L2#3?bJ~JS0R2`JJMEIZ}Fx_%Th%IsNezm1j|o<>=cY zqh{@C5#HX{4e=D!pCX(Pul2x-@WS@xs6+bk=h5kk<(l?+!7Ne-dh_#tQXZWDv$V=H zZChn&ZHIGk3U5f$JO{NEiWmB$9;UZxIpy_HxxdZE)wcBtuSP4u_}sR}(uMwN+CJ;= zNlkNqlYVMMe^#IU?P7n~`NGo*KRaJ|%F^E7NlSZwCnO!77dcYs?*!Akv_AWL2>qpd zHb}elPNj!(si2C_-*G-q%Z;Du4&&pX!r}Zz_*U06<&6LFyjewqgCnQ`F%t zhB&*>e`5EsaNYsbV7IF9**!MKH}V_oI;Zt1UtZ|;{kRa`Hvz9Kw{?J?y7JHOZ5WC7SCy}JZZ$90{;Mr25AGjU z(0|y^3F+sHipNeABDj9>UI`DPhcD3--xH6v>Tl-9Ht%d)rFo4THJ)qZ&{LYs=Cz$S z!Y~lB`J5&r-=}O`p$*;(+!$_e*O=!{l_Ir^>qOneT!4q;40G3xm_+aU<4zj+-8Y zKIjy~Y&!F;{H6VHzQo}7Li##(?)8!_=VbWHpSNYtEp!-&xNpr+wRx<=c`rLfxZU>0 ziO(?lYFK*{bkJAyRn*aI0Q7vP?$8hDlILA&BS z@?5v#>3mH)%#U~E{)8+`JC2M0VEfZsjER!3<4Q;u{UYglJ*EQQf8FdZE~$dVrHdm% z@#h|d`=Yn!aOuA=+`>QV01(#OP^d?Ue!o>%Z&{%pT?O%aS%8=8XENXX=mhPLdeMgZ zFhnH&*ju_cGN%9%he%-`ZlKC!`#?1-D2bN79F?6F7>F6^y|-In7`~SdjCxCSGyK` zBL6sJBwgeP`8EZ=tC12|j%=QediUMS`}}l%Nqp8<-tjgfS-In$4e2a2L|}g3TPttp z@4kE1-5cKXSG}iiGxIm}^&+3Yn)iPiFvhy)@3KI?F8}e|^S2dxKsxDK$GYclEylKF zV5`_0_KPJ>{k{)df3aWuAN6PJI~@?Qub}nq-a(wpu(ax%&qq>a*Rb{Y&T-=RTETCp z;kUafe*O28ySe@Q`nIt|^WE-3ecj9cG2By=sRyrs0n}_CvRaxVd|NnqcJw-wQ_i0Y z?HhcZ&wR9*9q2FNv|=vc_E;PIq~P1zvCQz-dk)f$rIxmP4m!FlZTB2>EYWt^`d8Cw zw*J-nX}11Vcm-v^-IbNb&6k@25@U+H}mK2$)MKv^Ky9aLE&|5R`{77 zXgb$}ty(YBgYA}fJ<$F}+XwOS()R;6o%}V>jrTMJPAI1rBEL3Zde}Bw%LjxF@*c=B zIaf4A@+r?ZqKN$dmFL6%9JG31_Ga!g?$R{&14q<%$>xmqKKMzRnUoUAtC++(m?2mRE@`dyf&rhMB^kS2r z@tJfB{g4a0V7(XMM>1givwJ~FKjr4{$vZ#NnP`B(G(eynMubp~eoO4E{-7@8L%CHz zKl^z%WL_Vr2;WwsJ^q*bW7)nw&@TB^tm~QoZ20>Y(9L!7lYo;xvIc*3{k$4_TaNx* z@O1oLe&y&R>L;#|>d{!^1^pJs3sOqDHiM_Nf#uRZ9542x{F#gwuZHRo9>AZe4Zc<2 z<$mJLlFt3a8!fGNpA5dn(&`tSF5Igre0`>VqS<&sy2J6p>3=hLjdPRIe?DFqes-T? zGGO?(+4we~^!fdZwSl)w`(C?mv39UW(xD#hru`49e7Fy>fpUNn?ld{fh1`4hD7{JM zpWZ3-<9v_ur%lg|`T2^p?dPPtHlX8VZ`=DN9rjBx<3%8kcY;qf*SEG+KcJ*SJ|30#sPp^TK4x+|IS2KEabY&!d(Os%k@dgA`U8Xx zyN0uPJMT#d#s!D_CDe;?p)2(?Mn(Dq->;+n)6azd4N0USXax5Uxqs7pTay8$%lSH% z-zQ$wPsisoz-Of2Kdk+Y>i3UGc{%!1(cfnNb-lfJ`Df72y4~OC{?+%F%8}lmQXjZO zx(WI0QJfeiG5w{=bn;XG{{1z@KfPYE z!51x0U#Iw|S3n66(rpz+QGZF{JKy}=XEI-kyZ3?qo0t~m+R){9)R?99-M;95=VQ%TwO!0G ze}UvHzsp`;xAto_X8S+Bl=iQN=JQ(2Nl7O))d%P2I@80>TeLyr z7O5uZCs>p7PsYAqmKgu&$3%{P4!7-;=nU@nl{mcbn-Kl}{LoJygC2$VTc2clBWt5y zgHQf#KpM|+1#T7R0oX6rNt(9rv9aF2;U8mw!MUO1iqHK@ug{xZ4qjetm+^N#v4B4_ zJTm@XseF3I{JqBbdyT^7`IP@G{JjY%jfcOVK1cqB?K1whD<9|<$r+co?=v#Zu+sQn zouG~&S+DZ+ds#F6on`zrKSBP&6^Z^b4)yLxLC@F^=kN0vmzh#M`UK{Wju*}qnEq)$ zj$bl(MDh<9o_?+(sVN-7Ws7vhX{pEOhU_QZq4rXiQuL!>$89InTkcDbM{YaMQEp+o z#!{uHc+RhC=LS-c23CFB*` zd5E&yo{xGDX?f$`yxyCnp89h?Kf(DPLo>Lqk^0K`vYe`bTnco!p83AM)7982V54-B z>SHE9+XqeUeHHgN#c`}|<58c@yW)}#h;gY`_?N7O&=A~T-!@$hA{^)L1pawF#izAh zW9nxMewL#_$%so2%KAJmeNgNo*{pcqv5B?N&p7&f^I7_%>GWSA;Ii|RzF+Kg%r*QL znjd$19AE17{4x5u%lO9m0x=&8J~bhPPl^eD))?^9ZHj+co}Pm*^&ZLa@3`ENyhhTE z&03H1-6iT!;*rkmNz#Ix`n?0QD} zJDPrdW(@k$K!1s8QGai1rxp#@TjE7I9~lE~e;^muFT%~`K5&M3m!l8McvRoS+9UO( z8UMaGM*q}XdZ^L#*6qI;+&>)yZol!XY~P(3kDNa}20Y?P4v&VX`)lrtk{-?n7MLy!JmQi*!1eLlt_^{n zyozX|{t|gU+E=-UPLwk}BO?49MhKJfGQ;duxw zn*G)@eVkZ*z_Q5LrH6EWk5bM+u+Fr4mqdI5(^q<{ zJlE&AjAf?i1)uYeMnA_F`io}%|KFiMm=|U6Im3!e?~)ml^SN&C2lQ8TK9o+C>e4Uk zm!m(xU)2vxd(l3XFW6BIOqZi?u^4#w;5W-3)A=>ZnJ!0PXEDlO7jX*2@)$AOGhL3p zhQG}JnCv{orQeVz>gPjmDDlzw7V6C*=t;O=?0WN>G4C1mfRgz};PDMx>XzvSO9M%Ye? z>UJMUe;`NtrH~JVm)Vc4t2v%h146!V9Zvmz0r)^Ydm+k`^#wcHhD_!U>N-3*cwG6h z3xpt)qrDPmc4YM%k4d)puTI*}ZcV3;DExBtS;>e?d&R?(FT6>+91U3hMiazN{L%k20{48-|E@9UA4?zj1fY!n7@S{Y)#nMQj9=g%PmGqM z>)BlFbFQRyf0=x$NO}qWHuqPQyTdEXDUas$=e$uo1!M&wj8aJ`lL_!iXR9} z)BlC^v&8QyWcj2f7o6v1oQAS>chDRjw^jFtz!3t!w|RV`ig1oM>jNF zKSF!rR$GV{J%IP?^WZ-0@5p?iWlCYbKrhe!CW}1TpN@0%g3O;JbTOa!x}GwvcFfw! zAJqq9t7+v&o@RL_f1ls2mFhAsDZl@5nEd>CKi2_-aWACMm8koS{CTX;mz_`j?Mf&0jdc1vIoYO+$kqqjbezrB2isKc+4{ivTV|$+?-P5J;5265p>%vv!-!4s)eyW1^bGfu1y!jL7%BiFdKyK`f|PA84M* z-wQK7WbcI;A9guk6tDc=d8I2n2XVLwA6$;^57_TNLB`3T>Q(;U-D%}}J1QV#cGvFx z+q%46icx+->WB9Qi{1=sImgcv#K-(;*#AGE|7<_)tLT@^=OVX4p zNJM+{TXqh__gh%b;LjDa=L5)Rk>|4>$0I-Q;P#*EU$S16y-?j=$`zXy1krp?~R@*@rM`+mJ27|#bz5iZ_ili1H?jr21* zj)!_8>ul2t;`_5OJ=fDv&K1CC`62XMgzM+-(>)czKQZ}*eqjytkMx`l&LI%qPL9uO zi9P%s$~jXA+x4Jb+Oa(2E9*6T{@0C(m*4w>b1_oC3jZSYq2mk(5HrW=TZshIRr4>z zrxN-DJI585P=J8%rm1|)PFVkYyhk151_RG2G59%Te{b0RH0%Fl0H6BC7RjK>J*87c z$nE8VkQ(wUw3Id8ikHM2**7cuiId$nEWS9V+4`muYh zLU|PTWp+Y7p+D&XPL4-@eo5&F;cR9*8VLgVawW%gdw(HqQ+X!`lumr7SMYK^E=Id~ zXy^XSpLc}&MZ`1oPnSS%Ii8Z=8NZ7D>PNtz7m`1NO5bgl)7uQ!ck+e&m`Z*OZdG{{ z_~7>NZ20jnaFyf_`4QuOYzCL(NIoq!y)gfJf%rtaXAI+y&3gv~J=v9Y{(OVq-74_q z+3@3YAgxGuJW0o!br2K%lD~J$c{(-v+4T2&P5R^e>!%_AcoLKq!M`Jvf0t%R<&b@s z#_ZSpgs)@$e3QS=5!&5o_Dc;Q|Gx^t+z#hls(Mk5{#Na;AP1+P?LN^&9=Oj_@wNLt zazAw1^a%|S#yh{kd1z_p?|(a<*?K2?ujGirw{bduzkI#5KW60{EPY(lPcD<#*B^A} zBIiLtQ^qIvD?P{}-P>tL%BE}{;q!)kyq~T8bWc_Imn*!~&Qtq%G}d@eeM$P4oMOvl zV@2cp^*aE`W}64p{W}0ll%8xpP?2Y%%xo|$P9{T5g)!%PQyQfHd()(T*g5%q4 ze(*8kxlil+ytdeHHF}9KAl;+&`tAF$X@|;#{N(;euic9f>TeJ63*kI8~p2TY&x*%SB(2TgVLRjD$6sGyetZ)ApuW%{jXqCvy;<@j(HrW)mxu9Z)oV7_DLuJd`?2`L|sKcgOy z|G!TDn_n7ho<=!1zuE3RP2`c!)20;k=a8k*ka%bFext+hO>UQBl<(I1cK+7yHF7-t ze$s58HoGUkN7~{0FV=pQrMFvpjiq;L`pGVd$C{_P9D9Ho>3#$4NJe$gVdp-5o|X)5 z7I<+>N#PG{&~)j{4@p_Rzw@-DX^$Kt2>1K)ou~hh{B*U#N$vagqusaZ^Q*Dudk+EM zb?Bplf150hLj^4+Fsp%aKXe1Gmid@HEJ^36@)R-@GdAlzG$g*oD8Y{`1zD|=J$QRjqeMIe2D+|pu_2o!;;25s~Yba z%H+rSZ?D;BXeSlqhx2FZ58=r?$M)Z|arPYdZ+-qaVm~%GuT6s84*kA{xb(bHo(m{_ z`Mh1}964|2sv%#e=XgkVzOOb@{g=OQlngrj)51T$?;TbDbU)(q zCO>~E(1+2^mi1NATy`%$M}z zu7~Qln9m(SfBulS*ZQt!^{H1#hNp|qAs0@VB=?=L{p(S)aizBBJts#~>l|66vvXSR zuj__?T+#(!T)IN$orFUSd$W7_j*9$JAOG!~S=ym?ne02R<#wNHvj2#tSM1jK>WUzg zE*j34^k(J9sC3);u6+IW4S`p$(;IUi|DPny_6+rn%GYX(-lyE#_DLxZ$CdX}j{?2= zWI?YM01o-|Q`DOQ0W15E%USP1O;i88-p#1T^TQ1F{ufG|*bA%mdZ(oMo;^ccx-8=_ zQFecr@jLTV`u=j==&zPOTcGX^%n^|_uFyl#gbo+{+r>i{wJ634=le++Eq(> z-*GPAD>T35yHYRhUM6uS=L1qK=YyKc+4vL6?|B6|lP+KPhx=VF?dhwz?29Qwx-1^@Uy;6OaU&U`%Z@0a;_ z;P;nibgRGfdqsVJI;49E;DvfZd9k05gWjaB^TBMttllLQW&7CnT_(S0EkBoicm#jN zPX+$X`#HdVHZK#n_4;y&bHCr2`6YUkk$&I&L+1C*e`J2&{7dHdHwa$oIs5%r8-A2B z=XdV+S4euK-~TDiFZ%rf$<})(3jC+v5AE;gVK4Q>^b6gR51rZh>52fV*YB1%F3mIj z15**|^?NLTiNvnAMgLy5@AKB{N?)~P_e9j4F1Jgg$Nav}>*&{CgC26fZsTv}*Y^tF zlgzK{_?z!L>>QylMZdn&^s)xhoQ`tzd1>eC!<0@2!RIZ0kH7PwTJrJh9a67a((l;T z>l-Zn*9s3zri7Dw)iL|IpnBcg>GudICkAhyj~9QY^xl_P`8J7p-!Ma5nsFAr*7vM@ ze>3gaukbRx{+OmSy;eV3jAaVGWTXdQS)a@_W$!Li=U^E|cFokgh&1`yTXLbD$r|6Pot-e3N~8Kbq@} z*H2d*)BO^=XRXhZ- z9E6nR?GCm&1goC@e{Q72y4gq@C}S`(5~cP&xW% zt4A$?+|B=Uy$7|DGDHt_&bRYl`=pxOmvI^eyw_;WJt{Mn(64i4#`|G<-kImm2768y z=0{%**87e5Ib60%uKzoDH1edjFxg`b)w zk=#QAl^OLO4__CD{+TWL+?=Yx_jMVF|1z$l0iHc1gGWV&v;9}?HlObUJ!0thd&C!U z7X|5>L_#OaQ@j6WG4`?8Uuxg?IoEqVe4m#1;#l9fHE z#`(D4_5Bb5A7KII~>$k<|GG|zN#Jr6MJX9RvYK??@3#G8@KX( zn7yh;_8mO`j?Hb;KPvg5pE&_PlWy6r`77BA^zhD|nwFWb@@q2cHQuV_$&*%opQR6I z`(&@$tLs}i+9hz(4yC8@xYlpITH|_69h&ds*SW|?@aO#Xn$qXzE$JUBD5rfxq$0;l z;eV>KDp3E&^0M4MtZ5`8zvte^^K>d(Ghd=%>l}(Ky;$i>r<$Ft>ye7R_p3u8oF&K! z@t6WU^7nm|4zE{^ZjkowM;hiA+&?*9t{=%@LH;h^eM8Dm(?i#nqMju7eYvO5D>;~z z3l^l$;H*&nZuDva@2?|WX}9VR&zX=@>1_UGEK&A+%l%ZVZqv%VZk5#2is|NxH1PN1 z=ud7(2P+YC-e2?!iRpK)uR4B@(AU+gyf*E{L~J=4t!%0>Sb9nC!gCBJI!5HIT07fxfzrA9t#s z@b`WDTAnKwOh0%Pn#L`PXpH<4(#+=$T3K!v;d{svL@(o(i)5w|V|`6cDM$KzhU;z4 zSmKt8Wt~m?;y$In7sGb+Jba!{RVYWg&SgIfBs~p(Sw2Nhyf9zu={>lFN0%PX+uw|| zzqd_0S|#P|Mg0)z3d@%votPhNwfUgiE8#Q5lh84O@54}ESVVqq`8Mal|16Hi`I^2@&Cuwuh@4)Q~N$>U&}PmNPe%?E;YIT zp~?MgB6sqIVIl4QnNRJ`|{lKOM!qY{GS z-Fd|=nzrx8`FlZWO|pf4!o~NWMZ$e8w}_smdyWXaxaE}UtD1c_FUa}3S^2w0;ZaYh z=NX>xs{~BHEquOH>B9H!rGfj^R>Q~d%VK@DORc`om#R~q8&!~>$;sMf_ap75mZSWG z%Oze|dX9VnpvZqe$L?|^|NoTljX&x5=|srSO|)(ka8W%Q50u}x)$}>~Snx>);s4<< z`08)smN~Mc7Ps`^MnN6F*^|rfndr}N6aErDu91J_;T}k<_quN9?Q;&kxlf=KAtS&H19!zRWM*HV%E6 zf1der=~?(fe|F*c^5l8rOVo@nBgWtH`^WF#J+Mq)YCxn@Q zs!4O)e>OSAQ(hZYQ1$HmYCaBxav?$F z*MVXD`lj&9pLh7U@J!}6A32L2bDr(??eo`cy!^50^B+88ecswspMM9`jYmG?*XRCW z@=<+0mvQ>eP%cf@EgX+sE*w|F@j2OdRPD(26%yP3P5e9Cw$G8+eoi{0LN?%iTAe>9 zw%?G>Q2&wGenUEAnb!0DiWy5SEm4%t(D|94%gy0yd6KnLL(Abpu@QW~+V_*sMW1gB z`PRfQa~_@Xt)Ra}f0FE8B6v}L#JF?%S0r8ZE93P~$?j#^{)5UV-b2-FJrLSG`=#A4 z3H0h*`@e1*2u2vqFNc1yZH)e!`O%L9$7X(%ek=E*CijA0&hDuOdSQKEpEmTERTNLz zf2KnGKZrjFt?$#g{vnNBez(6^m=riY$w6JOx__Tr zQ#`J-^V8*MpJXIMwjZ-i%d_#QU(=ND&yj!kYue$@y+hN<0o^x9>T4up;YAmz-q`$b zEIM6(PJm8-PUrYI-L31bUxVl43D0}Aqo_FUx;)N(T)a!=xJ&yTeIH=_(4s_ddiXNPtmS?9H;-_cuTvzkL?QkL*?krPg7yW)Bf(TeddR@j=Ozd*go4g z`rYR3fw%jEx3FDS|Fcc&`#2Pi3oF?!!}BpY_gAFT+xfl^`P4J4-K^&8gC$~S*?ky( z9-r-(qkXm>F~6JR@rGv%?-gUhdr;w-Kd0PFChtSwA@RX>GrpUy4l})8ko-2QgW=)a;O1wQ{dAMgoqH26Gc7oNvUSL?lQem*K)t@pe% zo)ENzZt}tLOIPT)ly)B$e);p$xO$5zdMz1<(zv02h_>8GUwe?Kx= zto`x1KUwDUjn?U!pS{;^_iFn2fb1U80mWxB+8^h05BuIgIl5K=`1ke7(KV7z9#zF_ z)D%ATwt}CO^OsvO{y}^^r^9tm7xLHPAImpcT#fX*fAv~Ba`=9T>4S}Lqo0#3N&RxP zLSlbj%;!qfAb&oa&X?jSdDQf1K1=o7B=wNL5#hUh4(}FbMd3L~g|}1ca=kzd$sfl4 zK0Ur0E9Kd9gaZEl9J|`Gh~T4!$%F6&euu6f(i^0B1irDIb0|j(wY|}m(|cU{Pj68A zM&Q|TOw0W}7@J4VnZ;dr;A8VA&ReKA$v**eCRUeZlR8QT` z!|!nL2}?3KByf9;ethqN-DAH&^Bdp?1Ka-=Vt=0L?UDiGlf5s&bFm&MPhY=faGoo_59Z&g^?9JbC!7qZon-IP-`^$tNbgs_ zm_DNXae3BE@A+JxBJ68hW>+|F=pP2Z2 z3SmC^o)^2@&;8s^jW@Oy#m$H&?1{)TC4V1E8J zT=&0@_O}L&5L~a_Pw{;Q58^M{HRb1@e4O5ddKDC{gOC{CdIkO<^kH8|>;mtDkzakK zS!x$0)hov%F1<#H89bgJVd+lr=m*$Awv7b zH@w=^{_x#fV#4;+pWa2pUir${#{sry=)GFY-QJk5cAfJ}{l;ZdpXKTw+Ojmz2Hc!q z1YMS|AZfqq@6_JdUhT>Fg*53biGnpx-t&%4_w-IB z7AQx$de2=*OA`0eE1rHoefB*|RA-O9=6^D~S*GpWeh81j@9p>ZvD3EWI$qm*&8)|a z{x*I8H2m%_=i9#Sm<;BAj_Gy*o4rTv=ek`Vsv>QUeFhk?QcJ6wfZTed zFUs*I6!|)x{cguWx^O*EEdLnVupaSE*6O+!d_Bb;lE=)hx-?E6Lq&wNOXK7*<#XC) z@_S5*QLZul0!g~7t0Ec6!&bg*o~5n*G94!pJFl89yVA<7|7AK4x~uC3$tPTfw0ncl zop!Icc#XxYB+m9DR_J-}Y`fphU$IToiWbhtBnrpuE8U{&5xe1?d@cekTc zTK{6T<8a=)3VdxmDd@_+^k$~_TY4hCvrfL-ed>PRnerIIJv**XO#cxMCTDhVjkeF8 zhnrn+eFD_PKa!MC4{j;wL9zU>de|SKaz;GkMh=uF9)_&t{dw9+Qi`$Ci#Jmjl|K z>$_%hasG$vmHQ|c>z8tQJe12V3NL#P&FnKAXNvYWqac@J`O;7>yA*!5uVVI?ykF%d z=k&?wi9JoWe6{e5SDf8F<)Ge75k4RlZg`_12SeiDRbzRy8= zcVnFPd0aSOp`UemxLtEUk^HI3UyOJ5e8KVZ_ca_pKbPQmy1tiXm4R`a%8bB%Uc-9` z0H3H9-$!=(^7kW5?o=YyZ`auC`M#*H7ybP?_QUrx##8T?FelCGEm!yr*ZU@ZikeD! z5i|DlKtbP&<@>B2*nFmcr|NaORq0AMXn)zf98BR5UgQh=;e4Gj;ZV+-3-8~*$jUKv zN~wp2Jn_#4aJ;?y@x}raBK*JbKK{!<=Xl=7e>3ViU$gzlalDTo zw#)cCpWMY762heYxE*y~$&{uUuSAkLRjiL0vU&e3Nk;21uCu)J8g1wLz7U2_&E&eC zag6;BhGeZo+57+gUcCDke~#n(I>d{inZM!ss5sB_=Rz_sMmzG0>*n$Bx6A6&E}jX0 z!*cJ;%m>O5-y_EK^o*}Zs}uD-ws-=m23+i8 zG9#v& z?0f*}=t36d{#9&X*$?&de;4%fC8)xCYW4>3 z`22i(kR~3jfa`jgjdKP6;OiaVx7dXKDuBNb`@at$9?y3`ZvviqJv2gSZPz$EmkeA0 zI`aJ?e?Qsz-`k=0UP>Aw=$y`7Lh#Y}T*Ob?l~9jRX@jbNDtzXhjjbDja+9Te|@;1HSh~o)Ff_`)#)$tmw{wCBXJmPVLaJCqI zNTX}OQ9B!nukI~{_;UZ0_?{vh!#6A!yiqQABi<_Yly1^RdPl>PbU~Fy{hs=Db$U0* zp(at}_8sc)alY4>eUDx1`8m39zXZoP&xGwBfSqLDBe(CZXL@?I^|wUh>^%de{$o^F?qYJRxy@+sn(wbydLM`*lC-c!u+J-nTkh zx!+?M?iYz4F}{ZWgvNqdD^I4@;< zuya=Q=ko$SkRFIF`g#1LJ$d`$J=ISEeKd_4_u&u1I;d?0@g|G=$`?iLNb`Kly@=!T zuga5zxI9sxzm-e&JO;#By^V;=(NLDYN77G9IxfFiPK3nez0qRi#O2!~&dXOC|Kkbx zf#Ccj-)_SYTP^sx(f#jAX|MjcCGf}VB%kBgoA1LP3%Ez{6n~Nr{~iC*HvNtl(?^hx zdk3Z5pSL((b2#KTcd|GRemKY{{{I^ek?>gC?`5n;4dhG4Pe2~;MzY^ph0J5}q_ESYb zk;LKiVN{83pU)C}```+VX`e4aV2ZK#dpkE}5H_I^QNP{l`?)uN{>5_A?fH~?0`p4<{LT2qmQQ{zMIN8~oFM+F!Eu817`#2@NlkVBA3%Mu7JC0`Rug-fhq&=l zNk%JWI4D8i2L%@HzmNjj74_feAMEeaenCshL;ZX)vP1o>NP2YrJZNX_35fbhk3s$X zUXV}ye4wd*c1i!`=vUMq+BmineV#Zo7k+E#%!wykGCQ4&{7)}``b<%OX@}%X=X9mp z?T2uFC~!V{=J|(*!+FaU&EasrrgQp-hT+40=gw$ee=a5(ozov1QU5FD=Jme<8Ffzo z`4RPh>l;64O4o0F^J3J0uhgeL;Q#EN>~-LG1?f!|yWKCGuXOi-#=?&8p z0E)}E30!|(*?Ti8BJ|omr9XfEfaIb*2MmN{QAOj$Ha^^|1wLP*J>FIrCpaJTal)VL zRHNGzj_u3GC7oybc}VK%?iHk1gP(5=*BQHEH-4{Cn7>!@ZJag`{v4cq1d7me9f#RZ z&%45YY`n&pz+B&7E{@kuukV9U&p(R#RlA3%ETbCu^*+Vl_r?7lXMb;nd?7x>2I+1^AG;(yKkF%DSx8>-6AKJcl}?+k9Pt8YE&T^_|B>6iTOeLKc2Yo`}wFhQ*R>2 zHKZN74$bbh3fgge@N>>=w?5>HeV^i7^n(62e{PfON7O_=#-k6^aQ~i4W2e&P_C!B9 zY+kuS=Z}8QH(jC6UvZDJ+CS=(JAR*AxF2_l`tIk!J5H-z+c}BQE{>p{--AzmodbA` zk&W+M4q3as5{KbSDJxN&TfKw(<_p$8UDR(`o3R%n`CFtCu`euAE(#+NwQ7l zm^`fZ5>L#}xv?eFq^~Te`QShF)EnxF>mm1Ts~7#Y(C_n_br@es zSF-Q0>Z7lVyx%L8|D7Aj9q>h?$kW+-hW;MB-;3(^xZ1cr(!S6!;mKd>lfg%tzkD1` zdUSow`{o$@xsck)w5WC|tpxdxN))XGShn}`b8(A04Ay@E^0VjPWDWxJI}vAa)J+KA z2*=OkxSoXlkZ-()p277b$=<&*eKY#wmbr?T*{}1Te)cHZ6AwbFMz0_^z|#%Gbc^Z< z*Fg;KXZ^jwc%sV3%ai?TzYS#z;3(f(H)?xwgZ=P%3Dn_Cb)qaRqt>-r?)zyDCpn<~ zm!q$We%P_5XdSvG3qNhKTTeJGA^&X3ckS4#v=GP9!ajE`(b{m$-@e@M%HUFYX#^6^{G zC6{rlDginF{QaF+zMnM>2~Z6rWdAOF9twxLxH28iM<)4BmqV&-|bJC4YY9{?Fx?%z)t_B(X%;ztVfg z^LbgH6vWv*;makRt~PtsVJw?Jrrqji{oIp(zr^o{_viBQ1jUo*Q5ljUwPV+J*Xud2 zeyNlthJva@=D1Da4&E%9r}% z%IB4U`%2`qAI?D2i@fi$4hU$9011?L2=S$~ZOAryZ9?wy8f_4IsP}?p!p9P{^-Z?6#O63j#mOr$ww^s z&sRA02MvE~cdO;|yolgWBqQK|qt>rZ;J66AwsF?aMJD@IPjdayb6DB=luM@wfOvw& zp5M@6Hfk(X`2PNHc>aWx)0Gc?pJ;MvMd0urEWsCe%Y1Gw+=o}bf+OMiYw^l?D-FOvf&j|iE57UqT3=(A`C`e+OY z$pPiNkI!?~sh*7&Pp$(=XKZ*fE#rMnz)L?Y@0|5NhV@&HJ}GJU->t8=`eJwRFY`3b zb)@(`i>aSSIG=cfmfu}L0fIlL@aGw{N69xmPw!NH$ntNIV(cHOew3q!1)pR_MG7+g zj%Q1{alO{3eCX0$kCT~Z2eT?tA^d*uG2*#RvSmM@3qLuJdlgi{`R&i)eci?Kk6?e$ z;n$|JmHJZ@$^8{%QM2-jm52EGc;xGh?jQ2u38$<<@p25aQC` zongD=36sa($v`-GjCw=&G>nIdsH`WcDczqAqvf`7k<^K$W<7IWT5zj^m` zoe21Omd=;HM%vAJg90c=J(Bi$$Xw&I-=C3CrdvLrySjkQphXo|0YRi66xW5{4&JJzC)rX56l;Ea!!deL-L`EF@SIf-0v4+ z{z{}<&0c*T%5^CD8JGT1;4#g9Xy;HDd_Pj}QT2Sn;eLmeP-IDa90_Oq4c=I@e0^^cwHFGMc;Um&sbaisoE zI*a~(Mf^%ULH(THLmyB0;u+!Fi+vSJkvqme81R=dx{cSnAQuVZ^`F?MRetZ=BOCklG{A1HD?_3z8f)oCWiyQ6}~2tT`4;rTp~{)BY6zE+_z46fhQ*Lg@6 z{g2P18n6=vpGW%hF_*v7*SJyZ5#KKa^HR5`q`e{)vi-;Tn$Din0*}S0;pbP~4|1JK ziBuzwa*k`x&(Y-O<3#a!ip$aE zGMYSHe)%}z-)H)bVfa3C`Tb)-eg_0zJmK#~@%K9a_|eJl^TYU^&oBOT7~Lb~r27>Y z;+)axz%Tp!G+ejnc_H;HJTEieb4GjNx7`1Q@QUY*?#24Y$AJq$-|TnOay0xn=v#Gx z>0A0^rtjq;eJhrV9;e-167#;Z@H|+yFAH(-ba&%&l}l#@4hVts6*@Zl2d>lTrx@6d zBfIZ!67GWFoHUAMzU%Mrr+bzw9&O7s-m*&LJ9{MVoUabQb3sh-QRj`iAnhpKohLC%y zL_g7nG1pDBqq`?TzzDhCtPy%+dv7-HN6%yU`_qjX(k#2*pnj94x&J2pSll;pqRjvK z9xA#!li!!C=i*$?=gglc0J3$3&AzV({yR<1uU`?K`v-bFPv!gj^aC}_`+c13z4+~C z2+7wy?gyN&sokR!>KDh|vHSx4Ycu;fF)sT#CHT;f47Z=tlHcrJ1ht>s?oK^TiZnE{ zH~IxX&%}PFUamUL7R~(5+ok^a{mvSxe@O5R`L-4LzW+l0za@}^^S}2_lLzFs75H?n zwdYGfk($Q&oUF^&+PWV3)ELQ!j&`p7bS6)#cG=FiH0<1M@;ZI*&Ci1*Z?bcH6FN{E zdI(_TMx$MlQLYEdf4tXEwH>w|iqIq1R~TxubAqXzqfd9J-}CoiIpr0(5bA{F`+r8tRJ-VUa`5rx&*J^eh^PmfY%m)x> z=Vx|FwwymB!|Ka5&F8~}eA{fLcO`x^ovrH~@BON8{ymJG4#(>sR1VhO&yB<-y(itD zQ+d9hBPE`Muo7tVZ8Z0Hetxr|%ll~Vt5FGo&o?TFKW*{dkLkYS0pt75BIAzJ#@?KmQ`_Z(GQjk-i_(%)jt`zU2>S8`h(K|2ZzwaX&-< z`T+9j@2MyLz4KdbT;TH^%GJ*=X8S6(UrG2~1^6Gud({r#pO^c6O3muOE2!^$ty}-J zKaP}s-*2nwUt=#a5lB7l*T>2J9#VsR;Dzin{#=UBugI{5J{E{JfnNL{EyVk^+)ws> zAg~Xxx!?b?7{Osq6@M*m!Z*o90WJ+4Q695KB9>AJz_OhC8Yn-}R=2@`HBG_kkBq z{K}a#C%#=~8f4-g>szB<#N-S8#oaRqm2$sb;>;iHm!zCG68udLv@1%c-~3KFS}PUZ zKKxu=?vFTo%lSUC{CQG-uKsEh=m#m$LYyxj+ds8SKkgshzm4vPbe;MX;HzEeI`!G( zc{V?)&z;BeqkFOMo{bykr$?v5p5uWI>QXtf@zkEX{iytDS#BMG?wa1LgwUwh*C2i? z@bdA8_Q&+x*NM1venb6--ceJzFEC91W35NMg}Xa5+IW!Jhr#uELpk~-Ko8&ppJDI~ z-?PHMN%6SrdW}cJ!^b1q2kmjL$srrhp0M`q8i(W5u>B+8$v{0A!aU^zn#`W}EkHY$Q}~|hUqa4)-gYwJhyEz!yVT40tMmTz$@e7SyN^4yY03xk`^P=*2>t&_ z#+`+wi$@uEbluc!+!;&G{(TJB!cl;Rj`cuKZ%Sn4h@XpRD z1ou;QZ^EErf%=arM|SUskF$xNKeT%uv-24?-uQV8ukYt6+>VmMd#gUqaXkN(!2Ys! zW7K~lsGlraBA6$OD;nGW>v+x~e;j1{c@f{=@$(17>n8&KabChe{!|dVALjlDcLF$X zX1?#AQ!mI>zgNNcbLY-SCPL>zma@J&$W2zi)yn-nQ?7&9HJ>vr3*_X_r)q0Zh`@Tp zgK-7_{Jkaai!;3m|0K3_=Omrq`?>KsYaAcVFXF$j0BRuR;fbARIu9 z>Drmr1)7d0>il!AH6T7mLOCMMK>cChI9fr>DvX^U{+z_$Ctld{-01hwm+P13`+Ebe z3(*+C_pkZ9qJs1$i#w;|2LjjY=<5HpckS^}S6BY`nr9M{0DH1*Lx%ZyQ+)Mb>x}W~H7c%$vJ?Grlx#!;Bef)m+r&UDx_ows2Nab@U zq-WZ586&fGB&=U7$DpFujaho7_2}$+2rKgIv*fY8jY5Ky-jh5z>D;qg%on765^Mn5 zAwJkqaVBp+h|%>-;~fBo$9h-*?|GdAwubpdj51I=nRCjJKH&;7-^0TAY9L(2neYP+ z*RfxM{ce^%#F7yDpy!>bUAM7xVC_`&i?m-y<-&4GdKLCX&-v~b{Vbl(ljYK(GdZI7 zop4^5T^{PcLSp@u`lrz4JlvrU?hk$7LJ<@Y*1F*=;=-@N@m$Gyb zX2d6Mj#An6J;qVB+;Dlt1&` zIjMZ(+gc!h=p0%z^NZPj0NLBgZM5DN5{6LBr08dSTZMz$G1)=rtDIK>&s(E&u-;PD zt6OW~-Am^EGJ1at^KVG`|Mf}CKk5}@?CIkC<;2O6hj&gV>Wd3vu??mx72g`XSvA)Cuh?0Z2& z0!Q~RIyZvekHG!~HALa4zbMJnKNu9aQ}pKG=W(B+H?B@?e}o0gsvo{DPj+48_&w_r zi%h<6MBizob}qN$0lLxjemy+``ae?E3)|dC#`P{K(Sf5Rxoj`MT`e% z+<|g{iGX8uL zh6fdCC1udDf}{QJQ{<;|gPf4ZP$Sw z_069M$Mx|MYZElSX5(%U`HOm~fJYI#GW`gRGq8)`*+ z6yu%zRXl#GpZt{^lO56XsU=r%J1o6I$cMR4>k(A0_6zxYiP`%LxNk~!78&OJ)3ryn zearKZ|L?El@igdTKCg$6u)EAWK-eigR|V#hx$oh=9)^PNhHk6y-OVDP{Z5jr@ZH7f zXEG1^A+$1RAEN)x;4;p~`v&$Sh;aT({b?x5`80mV?hdnx&6v#t#eHi4Zk~(|KGG-7 zXX64-LVIh1FsB{=od-;C^xikwb7uT^Dd%U?p-D_CkL_x*c(CP6Mz^!*`!N6DP8t6# z0wHiXKSoW4L_b!VWMr)v=+gLa0jG!hxsUpR|5`}MtLrbw$MO&z$LrGgLd1u3soxcJ z)Kd_`KM8y`{uBDb`w*H^8~EpfpST=;z-8<##_>A#^*jgX%e~(q7?r=xMuYP=}O~3s0VbJdg|b~ zw3qv*)Dwh97uw2wv~Mg&NXXMVD&1d^&+18p!~RaHr!2ZuPlAqmV)X>!SUrW|0vz5K zSUrKy>Pghgelbq&fcnGxf;_%UYb`>K?i(~dDHVF4`da7W4~)`!3Vufz_2*!xFhUuc zFcHTYm zb|aS)@iG8+NSbfce9@uZ%vevtFN)H4mFaylT&J>uzQFzVNz@~~hsHxq%!3Z`Y-tHJ zLU0t{I`O?`#OOLek2d&dPv~zG?YRZ&10Cttq2YNms{SDVMM%Z*EH|i9G#+r+AEGO= zdYF&nDXb3!Fs#?8Kd+eXV|*$x5agwERGBy`peC!rTWI+Mk3 zXVLeGe4o-^VqkCs@Q3*gwIYJ~4+3!5ZlwNF=qV)hl9`VQc^V(nbD^2}mouPL_)PvJEh6f7DMlfe<*1Kg*>v^B_166W7h?oC{eF*8Rl&mew;I zS`~{1$H^FFk9hBz&bOlR0FL+29@@ZXb}aOgSjlsN<24MwPOO{J_^q^z^V@)l;kJo- zXldefyg#7JZojNw5$Pe1-T$dRM0&U`iuZTAf6{tr8_=Nm@GQ(!)-Tfixd?IxQG#9y z;TPH+W3&_ z)Ly^Fq(BcgzbL8Y-{&e4=NnUeMPgp!&|d!(B}smr#mCbjkw1sV_eW?RfcA+|%j<5w zm9!qp>7sHp-*Y&={x2A4XZGXZKET3rbwEt$d@C~Rxq?pX`WXJ_5T43awStGJTEPAM zI_^{cv0d8mNALaM`UJxPAcCuc^wH(VxR3W28!iWgPy2@?hxWnv!mpao!%;s*>E(w7 zUBr*~LkvghRGrEB9pE876VAu!w9kd(CFIk1>H4+2Bd2g`e#!o?*Lggor$}F4qP;7U zibX3@i7l~sMWnqw(H~D$^(GS?$w*ICU$Pyq+hZV@tW5Ut;M&S$GLdYwzmN%TN21Xr z2-(p@tj~@oQg%-y)!u3M#bQxA8cTLkP2(}^!KIg zzOIfqFKH%y#IV#(#@drHFo4gJ&COlO zzSQSRbbx8&)cW|VGyM6YIGvS=*qFYB;e8gpXPLcR0MvF;Z2}pS&9s6`W9^Bpu_RBO zwWt-W4pv8FJ-vxkES_3y4|K-jc3*c_dsn=}4ksh=j+h;bNA0e7G&X2+`E~KwU~jA) zZG3Aa*%bk+VeCe3Ce(;4s(sbftR=?=A@V+GhgCg^D75BCH>4XK0{crvHgyl#n-b8j z2VzmsS1gI`)!rQG>W)Pl?Vhfvz5Hxw&fS|UyJPY4#k?cnt5u>?_#1dL{swVoN6D)1 zR6X^jphbXwoWJ^W2VLOi-y#W9YWL&xAdZ!H8%Fg2a=KA^2K2rj4on_*CgVxFj#eWf2^@L z67Oo?g6X8}MT?e-CLl_-32s->KCpPWnSf#1U46E_2?~vvw-um-8*R#4dmT7~E4Yj^ne{FSbO>J#$U2UMYzBX9fQ0J@j z*Hzcm)YaD2)dlM6>wizZA^)>ai^>y`u`uh4{ zeM8U}^arbhHNo0oT`&-=4+et`4UokKNWKB0Zh&A7K$^6Wys7gZ1PnVVItiO>gL9y= zS$7k|TNWs?BLz2a=zd6xEMy;60aGt@MI4lG8cM+(|CE&bQpqZ)zOE>Z% z*Pyhh7py9&5;5iQrdUT;94!PpyKEF%ZqBUS*?9$1^75?$bL!M-o*DW~t5~09 z&UVew=NhFmZ1XI$BBxUKnSP^M-)B5*JYqfS{vYEb$0x?8=1I?Y28V9F{Q+Ow`de?? zJ@*$=@-MphqmL`A&fRcL=DxA95Ut8a}?CjMS zUbFKKV1DnZr=S1v%dfoiE6vKA!nlpgR<2ro;l^le=Uv~p@5Ps2$tzq8q}6R#Z`c@$ z#%{msVF>cvi*LR2tMRx`(>-7O| zZ2z{WpP4apUg@d}*0ij@YQx4GxBbg=KYi^#$A9-hvhU7R|JN5*R_)vW2n zo9@};yR-B^e){ssH7!?N?Q-WAEUJ3%{dl7O>~qgsx%;lmI{J^ic=XlLpS=q&3)rDE zcD!ZnINv?Tau#m?_LTIaj#AI|Ip!?4ZdF;emdn&#PFJC~HGisWoy)Z5dOfDwbeV=} znz@$4%yH^diX3ZPb6jmM!#N|b)mmY~Qy*5LGe5V{Dp?S+d#r00q>ngu9581)cYI=A z>6+mw_Ds*6o_np+>zwVp(sh<&m3OI?Yw4yxXQ?&YnPaBE4Xi5vC1(0T_i{7eTuyJtW0}jCQtU}TdqyfZ{rc=&NBX2A{Z{Vp z?=$N?+c!*4A9SaG;_wzPGri8BdzCxanaY`GUS(bBN#9gF*E_>=v6cR^^U()$XIlQf z*7i3Sx^f+k^g{*PKXB>x5+`tPx6;p=bIkla&8h29IK$y`8E&`7@H%pgDOQ1AXiRlX zE1a$u88eMpd2<~l?)mz)))r&G`Hb<3@v8CD+}Av>8*dnI>SK;$#=F*W<2`%aI$?mJ z>bZ-SowKIp&in8G=JmIJ_3ICO_o=^s-0AWJ&OYagKOBA4nqC~JzoKp1BaiL>LEYHY zn{T<}{){D}A+BkO#x^|hM|{%s@lq$it&Q^VILYYsBSUcFyLmJHL_$9eVHm zt2X`dX{!ob8?GH8qZz1_Mv_M{?f2(*6cGDoOABG zzkUDYbI)7$nF|({*904zFTA+*vUOLW(S_S%o4520-mvY<4?eR0z~Q5h?T;tEy77$b z9i~-bZZ`F*%JhyB)1N=rn(vwCILmRqHDyWq5$AkszE$q7%~`Wzd%b6d*Im49WrNx7 z_V{Kv%FH$FR^sIpd&d;0W@;aN{i#+`~=YC;{bD6{ITw1*Ri?>!x|lZg2Xbjc2UP@jCOS zH9Eb4rPj>!_m@X6%Wd{}SFN1W?7l2-^>)`PZ;5%q>UwjE+v{v_dAA2u{JmtdRKYN9n*FkxH@)`)!-^@LL0c}gnQ@f zOFR#}yS=8uEVSI)Z@b0X;>a^Su7a^lKI7Y|Gf*R9e{R(07idKU{pV<+Y5P3eUgz?DW4ack0$U$DCSY`;?_t zH1`T``mtb1-crj0cJEBzd($WsI?qhyUg?5Xl%Hz_p)lp{GuCXsJQq$7G+mw&Gsofd zdYx|QRntFN;N9swZEq}k4qoAd7&`};?wo| zDLSO+$kFF}^v#y;giIN;49hIA^5D{`=i}jGW{EKm{xuo8%dHzZ9vymDz27)P-)dTh zM|YY(2PHsmT^OU`c6trnSL(NXfE{|dC)co{kh&QJCImDa-G;Hp)bn%~CTJSZH);A0 z%QW+LJ#1^vE<>|)uWhu#XBMD{`Ygkt-($?4nx`*x&&sJZeNZ;TSfsB2%^OB8l&eaw zfmjX00p(s|xb^o?ZFtCQK>;4os=uv&4HmnglvcTE>Hh@rYsNq1_^s>pK>lJVrPuUB zj4u6bbG}1&pQGm*wH`2hJ!GOHo%*nDx{H`rb$y0D#br8v=*EJ~M2$i{p_Fd?2J+2~P@!-Lux@++wGP&x?}pSY-S(C{SuHsYvl5gI2d0Abr86KS5X*H= zNC5N=mWD~`P!71oX!^O1tt&6W-bK-8miv+(K!qIgau5le4o!Ew8*XiFePdgodg!sbuiAAl}Ej(Pg@SB9c zUdR#uV3vBaE;aik4}Y*nXV2y%s(?SSgso-MZ^@#62=XMe0_fss63rXe#p*AdT?Gm8 zCoJHHPAraHl8Ua`fe-P}7t$Ilwg6KQ1A(?F-S zi3dPFJKgUAJ|in%VX%K#p3XRx|2oK1TqyKgz+?}IbvV!MOuPU$4-{3%FSW%$&k@(? z)dJ3r=bKQzY`tCxeEwDl4^#nsSkBJ4RwbWmcs0HC5Z}T~Xn1}I@||rrHv(TQb2BM5 zzMa5dAj0EQb7ZI4blfEk2$`v{sZcJiF9M&gv*~R>Cmm$dF9rHJ@JDq?PU7u*v96r=eeS8hYw9^j)W+|Kn-s zS_GCXQ(9l5JJg-%2x${5Z(2L7sV90uZ1IQ*z#3S4Pj85>`(i164Qq8FT#XBfMYxby zuw{Z>@vX2g62i6lSTvM`I2pME0`uiBHjd4r#Z#fap*~oSrF7bRheFz6(eT_*4s@e< zI0ZPu;|d-XhDiLQqH`iVChU{&2?ZC6n-KBohD^A#OisU7bXdgi6&()YaRnF5m&5N; z@R))-MMpvLjVjnD1_i_)DVO7?^=9Iy#riYhCcIIDBkUG8Si((L$^7*SF1}jfEBJtd zM-|Ktf6q!kh=!kqTNOOAQRX+}zziJacTB-26kHyaZwK9LSTgKxGZr&yH zci$%C@a-~A-!0?b`(-@%fQ(OkOU7dl%2<0u#wWfj0wmw8;IN9ta~C8(qTm8?t|svhD%i#cpurJ;kAjaX*e9M#BKchk?(`_}DcJ3m z`L==&D)^{^wH!J8Xr7D*r^tBs0vQL(WqhjQt&|)H^||SD%jU3^TP_Z zm&yDi3f{e3<_FJ~anm_69#n8=lguyvf{X_hJgVT{^JMuW3J$K2`NtJ}@O+s+uHYjp zWq$c886Q^g?h9o85d{x7%Y04DIjR2lD0o!C>5Js>#TU!?pn}H~+? z!G{%mM8RVUKB3@(zmxS}uHc}8TNT`?;9dpqQt+^X4=VVuf=3lRrr_fW9#^n-gIvA> z1=|YtDY#j|tqKk+xL3hx1@Bhyu!0XLn7*w<_Bp2T>Dvj!ci$+Nm%cqf{Bng)XZI7o zS>e-J@WiJx+6ku>`P~Ypv(HKXfWkkl;G+trv!5yaxWd=A$>l9ju&rP^3zp)evu6p@ z*${;3Yze}2h6mv>v4Di@4VaTbG5;jIyAJQ>{LDw>?@{m(Twno5@<$b%-XQbCVm?Fi z1!0*#)-K~FF+U;sU0Y=SZUwu0WPUGOg_+3Th=Pyy%JS|n%6L~&#)lQ$e4WfcfeXIi zD8KGIWZbFX;jhbl?H(C7e^bUy!!m9a^Ce2JSJ7PRQwviTNtUKPu*{gvS(IAm(GlA6Iazm~RokRm`^tkBIpc;Z`x9BD`MA zj|d0Fe28$dnEwzS6!ROxX)*sG?5^kiH{s)A{y@07QRWXSIJivak1UsQT8#fGzN2Ei zO1NB%M+vW2aHm*=MLsU&j!&JaAH=<45uEtNvt|A+v7Sf#av|D1s^V# z`AuSdj^aBi*4qdl%(8dP?~yEQ0Uo=0LSMLszWb^P>;&8@)@v|67yOO<0)D_D#(Uu4 zTZlOJfPZA1LB>a!!7C@?%RyFU3Z9MCDx*VjcyJAT_HaV1yE2*3DwE&?gL8*^m>=os zYS$|JIzbv9Ed!YZ2H}bPAAT`c_=jagXY*`k{5>6lz}cDg69Kg*xIhVE4jS(Lq9gw& zwBf<16YDPmvUk2QgeeF#4x-KJ}Eryx1cRx+7zDlUC18+Ubf@fnV{ev6xs`gr+p#vX7<1z9Efl>h($ literal 0 HcmV?d00001 diff --git a/program-test/src/programs/spl_token-3.3.0.so b/program-test/src/programs/spl_token-3.3.0.so deleted file mode 100644 index 84098a6a6ac90196a1b05df0ed16554968415718..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 136824 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 diff --git a/program-test/src/programs/spl_token-3.5.0.so b/program-test/src/programs/spl_token-3.5.0.so new file mode 100644 index 0000000000000000000000000000000000000000..60cbbeaf6b554282b11b9ac5839b1f8ce3f2b640 GIT binary patch literal 133352 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 { + check_num_associated_token_accounts(&instruction.accounts, 6)?; + Ok(ParsedInstructionEnum { + instruction_type: "createIdempotent".to_string(), + info: json!({ + "source": account_keys[instruction.accounts[0] as usize].to_string(), + "account": account_keys[instruction.accounts[1] as usize].to_string(), + "wallet": account_keys[instruction.accounts[2] as usize].to_string(), + "mint": account_keys[instruction.accounts[3] as usize].to_string(), + "systemProgram": account_keys[instruction.accounts[4] as usize].to_string(), + "tokenProgram": account_keys[instruction.accounts[5] as usize].to_string(), + }), + }) + } + AssociatedTokenAccountInstruction::RecoverNested => { + check_num_associated_token_accounts(&instruction.accounts, 7)?; + Ok(ParsedInstructionEnum { + instruction_type: "recoverNested".to_string(), + info: json!({ + "nestedSource": account_keys[instruction.accounts[0] as usize].to_string(), + "nestedMint": account_keys[instruction.accounts[1] as usize].to_string(), + "destination": account_keys[instruction.accounts[2] as usize].to_string(), + "nestedOwner": account_keys[instruction.accounts[3] as usize].to_string(), + "ownerMint": account_keys[instruction.accounts[4] as usize].to_string(), + "wallet": account_keys[instruction.accounts[5] as usize].to_string(), + "tokenProgram": account_keys[instruction.accounts[6] as usize].to_string(), + }), + }) + } } } } @@ -80,8 +109,11 @@ mod test { super::*, solana_account_decoder::parse_token::pubkey_from_spl_token, spl_associated_token_account::{ - get_associated_token_address, - instruction::create_associated_token_account, + get_associated_token_address, get_associated_token_address_with_program_id, + instruction::{ + create_associated_token_account, create_associated_token_account_idempotent, + recover_nested, + }, solana_program::{ instruction::CompiledInstruction as SplAssociatedTokenCompiledInstruction, message::Message, pubkey::Pubkey as SplAssociatedTokenPubkey, sysvar, @@ -112,7 +144,7 @@ mod test { } #[test] - fn test_parse_associated_token_deprecated() { + fn test_parse_create_deprecated() { let funder = Pubkey::new_unique(); let wallet_address = Pubkey::new_unique(); let mint = Pubkey::new_unique(); @@ -154,16 +186,21 @@ mod test { } #[test] - fn test_parse_associated_token() { + fn test_parse_create() { let funder = Pubkey::new_unique(); let wallet_address = Pubkey::new_unique(); let mint = Pubkey::new_unique(); - let associated_account_address = - get_associated_token_address(&convert_pubkey(wallet_address), &convert_pubkey(mint)); + let token_program_id = Pubkey::new_unique(); + let associated_account_address = get_associated_token_address_with_program_id( + &convert_pubkey(wallet_address), + &convert_pubkey(mint), + &convert_pubkey(token_program_id), + ); let create_ix = create_associated_token_account( &convert_pubkey(funder), &convert_pubkey(wallet_address), &convert_pubkey(mint), + &convert_pubkey(token_program_id), ); let message = Message::new(&[create_ix], None); let mut compiled_instruction = convert_compiled_instruction(&message.instructions[0]); @@ -181,7 +218,108 @@ mod test { "wallet": wallet_address.to_string(), "mint": mint.to_string(), "systemProgram": solana_sdk::system_program::id().to_string(), - "tokenProgram": spl_token::id().to_string(), + "tokenProgram": token_program_id.to_string(), + }) + } + ); + compiled_instruction.accounts.pop(); + assert!(parse_associated_token( + &compiled_instruction, + &AccountKeys::new(&convert_account_keys(&message), None) + ) + .is_err()); + } + + #[test] + fn test_parse_create_idempotent() { + let funder = Pubkey::new_unique(); + let wallet_address = Pubkey::new_unique(); + let mint = Pubkey::new_unique(); + let token_program_id = Pubkey::new_unique(); + let associated_account_address = get_associated_token_address_with_program_id( + &convert_pubkey(wallet_address), + &convert_pubkey(mint), + &convert_pubkey(token_program_id), + ); + let create_ix = create_associated_token_account_idempotent( + &convert_pubkey(funder), + &convert_pubkey(wallet_address), + &convert_pubkey(mint), + &convert_pubkey(token_program_id), + ); + let message = Message::new(&[create_ix], None); + let mut compiled_instruction = convert_compiled_instruction(&message.instructions[0]); + assert_eq!( + parse_associated_token( + &compiled_instruction, + &AccountKeys::new(&convert_account_keys(&message), None) + ) + .unwrap(), + ParsedInstructionEnum { + instruction_type: "createIdempotent".to_string(), + info: json!({ + "source": funder.to_string(), + "account": associated_account_address.to_string(), + "wallet": wallet_address.to_string(), + "mint": mint.to_string(), + "systemProgram": solana_sdk::system_program::id().to_string(), + "tokenProgram": token_program_id.to_string(), + }) + } + ); + compiled_instruction.accounts.pop(); + assert!(parse_associated_token( + &compiled_instruction, + &AccountKeys::new(&convert_account_keys(&message), None) + ) + .is_err()); + } + + #[test] + fn test_parse_recover_nested() { + let wallet_address = Pubkey::new_unique(); + let owner_mint = Pubkey::new_unique(); + let nested_mint = Pubkey::new_unique(); + let token_program_id = Pubkey::new_unique(); + let owner_associated_account_address = get_associated_token_address_with_program_id( + &convert_pubkey(wallet_address), + &convert_pubkey(owner_mint), + &convert_pubkey(token_program_id), + ); + let nested_associated_account_address = get_associated_token_address_with_program_id( + &owner_associated_account_address, + &convert_pubkey(nested_mint), + &convert_pubkey(token_program_id), + ); + let destination_associated_account_address = get_associated_token_address_with_program_id( + &convert_pubkey(wallet_address), + &convert_pubkey(nested_mint), + &convert_pubkey(token_program_id), + ); + let recover_ix = recover_nested( + &convert_pubkey(wallet_address), + &convert_pubkey(owner_mint), + &convert_pubkey(nested_mint), + &convert_pubkey(token_program_id), + ); + let message = Message::new(&[recover_ix], None); + let mut compiled_instruction = convert_compiled_instruction(&message.instructions[0]); + assert_eq!( + parse_associated_token( + &compiled_instruction, + &AccountKeys::new(&convert_account_keys(&message), None) + ) + .unwrap(), + ParsedInstructionEnum { + instruction_type: "recoverNested".to_string(), + info: json!({ + "nestedSource": nested_associated_account_address.to_string(), + "nestedMint": nested_mint.to_string(), + "destination": destination_associated_account_address.to_string(), + "nestedOwner": owner_associated_account_address.to_string(), + "ownerMint": owner_mint.to_string(), + "wallet": wallet_address.to_string(), + "tokenProgram": token_program_id.to_string(), }) } ); From c4b9c521e37373e95cb38a6dc18eebaa0424343e Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Fri, 5 Aug 2022 21:24:55 +0000 Subject: [PATCH 004/465] Fix sol_get_processed_sibling_instruction on 32-bit hosts (backport #26522) (#26958) Fix sol_get_processed_sibling_instruction on 32-bit hosts (#26522) (cherry picked from commit a9a3c629072a17fb228f0227fe6848093656a3a3) Co-authored-by: Richard Patel --- programs/bpf_loader/src/syscalls/mod.rs | 9 +++++---- sdk/program/src/instruction.rs | 8 ++++---- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/programs/bpf_loader/src/syscalls/mod.rs b/programs/bpf_loader/src/syscalls/mod.rs index 2c33dd96d1725c..e3bde1a2c0875e 100644 --- a/programs/bpf_loader/src/syscalls/mod.rs +++ b/programs/bpf_loader/src/syscalls/mod.rs @@ -1750,8 +1750,9 @@ declare_syscall!( result ); - if *data_len == instruction_context.get_instruction_data().len() - && *accounts_len == instruction_context.get_number_of_instruction_accounts() + if *data_len == (instruction_context.get_instruction_data().len() as u64) + && *accounts_len + == (instruction_context.get_number_of_instruction_accounts() as u64) { let program_id = question_mark!( translate_type_mut::( @@ -1809,8 +1810,8 @@ declare_syscall!( ); accounts.clone_from_slice(account_metas.as_slice()); } - *data_len = instruction_context.get_instruction_data().len(); - *accounts_len = instruction_context.get_number_of_instruction_accounts(); + *data_len = instruction_context.get_instruction_data().len() as u64; + *accounts_len = instruction_context.get_number_of_instruction_accounts() as u64; *result = Ok(true as u64); return; } diff --git a/sdk/program/src/instruction.rs b/sdk/program/src/instruction.rs index 7b2931847b463c..3a6ff0e0bbb7a1 100644 --- a/sdk/program/src/instruction.rs +++ b/sdk/program/src/instruction.rs @@ -664,9 +664,9 @@ impl CompiledInstruction { #[derive(Default, Debug, Clone, Copy)] pub struct ProcessedSiblingInstruction { /// Length of the instruction data - pub data_len: usize, + pub data_len: u64, /// Number of AccountMeta structures - pub accounts_len: usize, + pub accounts_len: u64, } /// Returns a sibling instruction from the processed sibling instruction list. @@ -698,8 +698,8 @@ pub fn get_processed_sibling_instruction(index: usize) -> Option { } { let mut data = Vec::new(); let mut accounts = Vec::new(); - data.resize_with(meta.data_len, u8::default); - accounts.resize_with(meta.accounts_len, AccountMeta::default); + data.resize_with(meta.data_len as usize, u8::default); + accounts.resize_with(meta.accounts_len as usize, AccountMeta::default); let _ = unsafe { crate::syscalls::sol_get_processed_sibling_instruction( From 45b7273d93607dceeeb22bc2054dd99245278ace Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Sat, 6 Aug 2022 04:45:04 +0000 Subject: [PATCH 005/465] Unpin tokio for non-rpc crates (backport #26957) (#26965) Unpin tokio for non-rpc crates (#26957) (cherry picked from commit 66919e5adb15a28230e0deb05b8dee1a3a7907ed) Co-authored-by: Tyera Eulberg --- banks-server/Cargo.toml | 2 +- client/Cargo.toml | 2 +- faucet/Cargo.toml | 2 +- ledger-tool/Cargo.toml | 2 +- ledger/Cargo.toml | 2 +- net-utils/Cargo.toml | 2 +- program-test/Cargo.toml | 2 +- storage-bigtable/Cargo.toml | 2 +- streamer/Cargo.toml | 2 +- test-validator/Cargo.toml | 2 +- 10 files changed, 10 insertions(+), 10 deletions(-) diff --git a/banks-server/Cargo.toml b/banks-server/Cargo.toml index 518340f77d1448..52d8b6426354b4 100644 --- a/banks-server/Cargo.toml +++ b/banks-server/Cargo.toml @@ -19,7 +19,7 @@ solana-runtime = { path = "../runtime", version = "=1.11.6" } solana-sdk = { path = "../sdk", version = "=1.11.6" } solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.11.6" } tarpc = { version = "0.29.0", features = ["full"] } -tokio = { version = "~1.14.1", features = ["full"] } +tokio = { version = "1", features = ["full"] } tokio-serde = { version = "0.8", features = ["bincode"] } tokio-stream = "0.1" diff --git a/client/Cargo.toml b/client/Cargo.toml index 90ffb7ffa6f490..117eabb2980c65 100644 --- a/client/Cargo.toml +++ b/client/Cargo.toml @@ -51,7 +51,7 @@ solana-version = { path = "../version", version = "=1.11.6" } solana-vote-program = { path = "../programs/vote", version = "=1.11.6" } spl-token-2022 = { version = "=0.4.2", features = ["no-entrypoint"] } thiserror = "1.0" -tokio = { version = "~1.14.1", features = ["full"] } +tokio = { version = "1", features = ["full"] } tokio-stream = "0.1.9" tokio-tungstenite = { version = "0.17.1", features = ["rustls-tls-webpki-roots"] } tungstenite = { version = "0.17.2", features = ["rustls-tls-webpki-roots"] } diff --git a/faucet/Cargo.toml b/faucet/Cargo.toml index 7ef1507d38857d..4e73f2c7ecd8dc 100644 --- a/faucet/Cargo.toml +++ b/faucet/Cargo.toml @@ -25,7 +25,7 @@ solana-sdk = { path = "../sdk", version = "=1.11.6" } solana-version = { path = "../version", version = "=1.11.6" } spl-memo = { version = "=3.0.1", features = ["no-entrypoint"] } thiserror = "1.0" -tokio = { version = "~1.14.1", features = ["full"] } +tokio = { version = "1", features = ["full"] } [lib] crate-type = ["lib"] diff --git a/ledger-tool/Cargo.toml b/ledger-tool/Cargo.toml index 6c138e395ac409..54282ba3db6666 100644 --- a/ledger-tool/Cargo.toml +++ b/ledger-tool/Cargo.toml @@ -36,7 +36,7 @@ solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.11.6" } solana-transaction-status = { path = "../transaction-status", version = "=1.11.6" } solana-version = { path = "../version", version = "=1.11.6" } solana-vote-program = { path = "../programs/vote", version = "=1.11.6" } -tokio = { version = "~1.14.1", features = ["full"] } +tokio = { version = "1", features = ["full"] } [target.'cfg(not(target_env = "msvc"))'.dependencies] jemallocator = { package = "tikv-jemallocator", version = "0.4.1", features = ["unprefixed_malloc_on_supported_platforms"] } diff --git a/ledger/Cargo.toml b/ledger/Cargo.toml index dfc87eae64d7bf..c2d18be9451ef7 100644 --- a/ledger/Cargo.toml +++ b/ledger/Cargo.toml @@ -56,7 +56,7 @@ spl-token-2022 = { version = "=0.4.2", features = ["no-entrypoint"] } static_assertions = "1.1.0" tempfile = "3.3.0" thiserror = "1.0" -tokio = { version = "~1.14.1", features = ["full"] } +tokio = { version = "1", features = ["full"] } tokio-stream = "0.1" trees = "0.4.2" diff --git a/net-utils/Cargo.toml b/net-utils/Cargo.toml index 6d37c010d8cb3f..1a92092a4bf538 100644 --- a/net-utils/Cargo.toml +++ b/net-utils/Cargo.toml @@ -22,7 +22,7 @@ socket2 = "0.4.4" solana-logger = { path = "../logger", version = "=1.11.6" } solana-sdk = { path = "../sdk", version = "=1.11.6" } solana-version = { path = "../version", version = "=1.11.6" } -tokio = { version = "~1.14.1", features = ["full"] } +tokio = { version = "1", features = ["full"] } url = "2.2.2" [lib] diff --git a/program-test/Cargo.toml b/program-test/Cargo.toml index 1d84c0d5aa9218..abf3326f50ef7a 100644 --- a/program-test/Cargo.toml +++ b/program-test/Cargo.toml @@ -24,4 +24,4 @@ solana-runtime = { path = "../runtime", version = "=1.11.6" } solana-sdk = { path = "../sdk", version = "=1.11.6" } solana-vote-program = { path = "../programs/vote", version = "=1.11.6" } thiserror = "1.0" -tokio = { version = "~1.14.1", features = ["full"] } +tokio = { version = "1", features = ["full"] } diff --git a/storage-bigtable/Cargo.toml b/storage-bigtable/Cargo.toml index f2a188a43ff0e3..e3b8205f98e38e 100644 --- a/storage-bigtable/Cargo.toml +++ b/storage-bigtable/Cargo.toml @@ -32,7 +32,7 @@ solana-sdk = { path = "../sdk", version = "=1.11.6" } solana-storage-proto = { path = "../storage-proto", version = "=1.11.6" } solana-transaction-status = { path = "../transaction-status", version = "=1.11.6" } thiserror = "1.0" -tokio = "~1.14.1" +tokio = "1" tonic = { version = "0.8.0", features = ["tls", "transport"] } zstd = "0.11.2" diff --git a/streamer/Cargo.toml b/streamer/Cargo.toml index bfb38884a08645..a788d7cfa4b8f5 100644 --- a/streamer/Cargo.toml +++ b/streamer/Cargo.toml @@ -29,7 +29,7 @@ solana-metrics = { path = "../metrics", version = "=1.11.6" } solana-perf = { path = "../perf", version = "=1.11.6" } solana-sdk = { path = "../sdk", version = "=1.11.6" } thiserror = "1.0" -tokio = { version = "~1.14.1", features = ["full"] } +tokio = { version = "1", features = ["full"] } x509-parser = "0.14.0" [dev-dependencies] diff --git a/test-validator/Cargo.toml b/test-validator/Cargo.toml index 025614811b7e06..09aaf5566e9045 100644 --- a/test-validator/Cargo.toml +++ b/test-validator/Cargo.toml @@ -28,7 +28,7 @@ solana-rpc = { path = "../rpc", version = "=1.11.6" } solana-runtime = { path = "../runtime", version = "=1.11.6" } solana-sdk = { path = "../sdk", version = "=1.11.6" } solana-streamer = { path = "../streamer", version = "=1.11.6" } -tokio = { version = "~1.14.1", features = ["full"] } +tokio = { version = "1", features = ["full"] } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] From 2e97db5b5f1e3f4e44958f6991b34ef5c31cf085 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Sat, 6 Aug 2022 16:14:53 +0000 Subject: [PATCH 006/465] bpf-loader: make syscalls pub (backport #26918) (#26968) bpf-loader: make syscalls pub (#26918) (cherry picked from commit 35f04db0b0cd0bc7cb0eff148c11b42bdbac4a8d) Co-authored-by: Richard Patel --- programs/bpf_loader/src/syscalls/mod.rs | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/programs/bpf_loader/src/syscalls/mod.rs b/programs/bpf_loader/src/syscalls/mod.rs index e3bde1a2c0875e..651b714396e86b 100644 --- a/programs/bpf_loader/src/syscalls/mod.rs +++ b/programs/bpf_loader/src/syscalls/mod.rs @@ -1,16 +1,16 @@ +pub use self::{ + cpi::{SyscallInvokeSignedC, SyscallInvokeSignedRust}, + logging::{ + SyscallLog, SyscallLogBpfComputeUnits, SyscallLogData, SyscallLogPubkey, SyscallLogU64, + }, + mem_ops::{SyscallMemcmp, SyscallMemcpy, SyscallMemmove, SyscallMemset}, + sysvar::{ + SyscallGetClockSysvar, SyscallGetEpochScheduleSysvar, SyscallGetFeesSysvar, + SyscallGetRentSysvar, + }, +}; #[allow(deprecated)] use { - self::{ - cpi::{SyscallInvokeSignedC, SyscallInvokeSignedRust}, - logging::{ - SyscallLog, SyscallLogBpfComputeUnits, SyscallLogData, SyscallLogPubkey, SyscallLogU64, - }, - mem_ops::{SyscallMemcmp, SyscallMemcpy, SyscallMemmove, SyscallMemset}, - sysvar::{ - SyscallGetClockSysvar, SyscallGetEpochScheduleSysvar, SyscallGetFeesSysvar, - SyscallGetRentSysvar, - }, - }, crate::{allocator_bump::BpfAllocator, BpfError}, solana_program_runtime::{ ic_logger_msg, ic_msg, From ce594bcd5b9a337dd04c1778b26bc0022fd584d9 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Sat, 6 Aug 2022 19:32:36 +0000 Subject: [PATCH 007/465] transaction-status, storage-proto: add compute_units_consumed (backport #26528) (#26970) transaction-status, storage-proto: add compute_units_consumed (#26528) * transaction-status, storage-proto: add compute_units_consumed * fix bpf test Co-authored-by: Justin Starry (cherry picked from commit 270315a7f6b226e4ab16379a9f3f11505a7cbd41) Co-authored-by: Richard Patel --- cli-output/src/display.rs | 16 ++++++++++++++++ client/src/mock_sender.rs | 1 + core/src/banking_stage.rs | 1 + ledger/src/blockstore.rs | 21 +++++++++++++++++++++ programs/bpf/tests/programs.rs | 2 ++ rpc/src/transaction_status_service.rs | 2 ++ storage-bigtable/src/bigtable.rs | 2 ++ storage-bigtable/src/lib.rs | 1 + storage-proto/proto/confirmed_block.proto | 5 +++++ storage-proto/src/convert.rs | 4 ++++ storage-proto/src/lib.rs | 6 ++++++ transaction-status/src/lib.rs | 6 ++++++ 12 files changed, 67 insertions(+) diff --git a/cli-output/src/display.rs b/cli-output/src/display.rs index da4ef31bd28dbb..9c26c0d145df61 100644 --- a/cli-output/src/display.rs +++ b/cli-output/src/display.rs @@ -262,6 +262,7 @@ fn write_transaction( write_status(w, &transaction_status.status, prefix)?; write_fees(w, transaction_status.fee, prefix)?; write_balances(w, transaction_status, prefix)?; + write_compute_units_consumed(w, transaction_status.compute_units_consumed, prefix)?; write_log_messages(w, transaction_status.log_messages.as_ref(), prefix)?; write_return_data(w, transaction_status.return_data.as_ref(), prefix)?; write_rewards(w, transaction_status.rewards.as_ref(), prefix)?; @@ -613,6 +614,17 @@ fn write_return_data( Ok(()) } +fn write_compute_units_consumed( + w: &mut W, + compute_units_consumed: Option, + prefix: &str, +) -> io::Result<()> { + if let Some(cus) = compute_units_consumed { + writeln!(w, "{}Compute Units Consumed: {}", prefix, cus)?; + } + Ok(()) +} + fn write_log_messages( w: &mut W, log_messages: Option<&Vec>, @@ -791,6 +803,7 @@ mod test { program_id: Pubkey::new_from_array([2u8; 32]), data: vec![1, 2, 3], }), + compute_units_consumed: Some(1234u64), }; let output = { @@ -825,6 +838,7 @@ Status: Ok Fee: ◎0.000005 Account 0 balance: ◎0.000005 -> ◎0 Account 1 balance: ◎0.00001 -> ◎0.0000099 +Compute Units Consumed: 1234 Log Messages: Test message Return Data from Program 8qbHbw2BbbTHBW1sbeqakYXVKRQM8Ne7pLK7m6CVfeR: @@ -868,6 +882,7 @@ Rewards: program_id: Pubkey::new_from_array([2u8; 32]), data: vec![1, 2, 3], }), + compute_units_consumed: Some(2345u64), }; let output = { @@ -911,6 +926,7 @@ Status: Ok Account 1 balance: ◎0.00001 Account 2 balance: ◎0.000015 -> ◎0.0000149 Account 3 balance: ◎0.00002 +Compute Units Consumed: 2345 Log Messages: Test message Return Data from Program 8qbHbw2BbbTHBW1sbeqakYXVKRQM8Ne7pLK7m6CVfeR: diff --git a/client/src/mock_sender.rs b/client/src/mock_sender.rs index bfef4350404458..8ab244a2996df9 100644 --- a/client/src/mock_sender.rs +++ b/client/src/mock_sender.rs @@ -230,6 +230,7 @@ impl RpcSender for MockSender { rewards: None, loaded_addresses: None, return_data: None, + compute_units_consumed: None, }), }, block_time: Some(1628633791), diff --git a/core/src/banking_stage.rs b/core/src/banking_stage.rs index b93bbf3d0420e2..ccef854514f1d3 100644 --- a/core/src/banking_stage.rs +++ b/core/src/banking_stage.rs @@ -3881,6 +3881,7 @@ mod tests { post_token_balances: Some(vec![]), rewards: Some(vec![]), loaded_addresses: sanitized_tx.get_loaded_addresses(), + compute_units_consumed: Some(0), ..TransactionStatusMeta::default() } ); diff --git a/ledger/src/blockstore.rs b/ledger/src/blockstore.rs index 93423fd0f5fdee..403f6105b5e3a6 100644 --- a/ledger/src/blockstore.rs +++ b/ledger/src/blockstore.rs @@ -6485,6 +6485,7 @@ pub mod tests { pre_balances.push(i as u64 * 10); post_balances.push(i as u64 * 11); } + let compute_units_consumed = Some(12345); let signature = transaction.signatures[0]; let status = TransactionStatusMeta { status: Ok(()), @@ -6498,6 +6499,7 @@ pub mod tests { rewards: Some(vec![]), loaded_addresses: LoadedAddresses::default(), return_data: Some(TransactionReturnData::default()), + compute_units_consumed, } .into(); blockstore @@ -6516,6 +6518,7 @@ pub mod tests { rewards: Some(vec![]), loaded_addresses: LoadedAddresses::default(), return_data: Some(TransactionReturnData::default()), + compute_units_consumed, } .into(); blockstore @@ -6534,6 +6537,7 @@ pub mod tests { rewards: Some(vec![]), loaded_addresses: LoadedAddresses::default(), return_data: Some(TransactionReturnData::default()), + compute_units_consumed, } .into(); blockstore @@ -6554,6 +6558,7 @@ pub mod tests { rewards: Some(vec![]), loaded_addresses: LoadedAddresses::default(), return_data: Some(TransactionReturnData::default()), + compute_units_consumed, }, } }) @@ -6670,6 +6675,8 @@ pub mod tests { program_id: Pubkey::new_unique(), data: vec![1, 2, 3], }; + let compute_units_consumed_1 = Some(3812649u64); + let compute_units_consumed_2 = Some(42u64); // result not found assert!(transaction_status_cf @@ -6690,6 +6697,7 @@ pub mod tests { rewards: Some(rewards_vec.clone()), loaded_addresses: test_loaded_addresses.clone(), return_data: Some(test_return_data.clone()), + compute_units_consumed: compute_units_consumed_1, } .into(); assert!(transaction_status_cf @@ -6709,6 +6717,7 @@ pub mod tests { rewards, loaded_addresses, return_data, + compute_units_consumed, } = transaction_status_cf .get_protobuf_or_bincode::((0, Signature::default(), 0)) .unwrap() @@ -6726,6 +6735,7 @@ pub mod tests { assert_eq!(rewards.unwrap(), rewards_vec); assert_eq!(loaded_addresses, test_loaded_addresses); assert_eq!(return_data.unwrap(), test_return_data); + assert_eq!(compute_units_consumed, compute_units_consumed_1); // insert value let status = TransactionStatusMeta { @@ -6740,6 +6750,7 @@ pub mod tests { rewards: Some(rewards_vec.clone()), loaded_addresses: test_loaded_addresses.clone(), return_data: Some(test_return_data.clone()), + compute_units_consumed: compute_units_consumed_2, } .into(); assert!(transaction_status_cf @@ -6759,6 +6770,7 @@ pub mod tests { rewards, loaded_addresses, return_data, + compute_units_consumed, } = transaction_status_cf .get_protobuf_or_bincode::(( 0, @@ -6782,6 +6794,7 @@ pub mod tests { assert_eq!(rewards.unwrap(), rewards_vec); assert_eq!(loaded_addresses, test_loaded_addresses); assert_eq!(return_data.unwrap(), test_return_data); + assert_eq!(compute_units_consumed, compute_units_consumed_2); } #[test] @@ -7011,6 +7024,7 @@ pub mod tests { rewards: Some(vec![]), loaded_addresses: LoadedAddresses::default(), return_data: Some(TransactionReturnData::default()), + compute_units_consumed: Some(42u64), } .into(); @@ -7207,6 +7221,7 @@ pub mod tests { rewards: Some(vec![]), loaded_addresses: LoadedAddresses::default(), return_data: Some(TransactionReturnData::default()), + compute_units_consumed: Some(42u64), } .into(); @@ -7394,6 +7409,7 @@ pub mod tests { rewards: rewards.clone(), loaded_addresses: LoadedAddresses::default(), return_data: return_data.clone(), + compute_units_consumed: Some(42), } .into(); blockstore @@ -7414,6 +7430,7 @@ pub mod tests { rewards, loaded_addresses: LoadedAddresses::default(), return_data, + compute_units_consumed: Some(42), }, } }) @@ -7502,6 +7519,7 @@ pub mod tests { rewards: rewards.clone(), loaded_addresses: LoadedAddresses::default(), return_data: return_data.clone(), + compute_units_consumed: Some(42u64), } .into(); blockstore @@ -7522,6 +7540,7 @@ pub mod tests { rewards, loaded_addresses: LoadedAddresses::default(), return_data, + compute_units_consumed: Some(42u64), }, } }) @@ -8282,6 +8301,7 @@ pub mod tests { rewards: Some(vec![]), loaded_addresses: LoadedAddresses::default(), return_data: Some(TransactionReturnData::default()), + compute_units_consumed: None, } .into(); transaction_status_cf @@ -8889,6 +8909,7 @@ pub mod tests { program_id: Pubkey::new_unique(), data: vec![1, 2, 3], }), + compute_units_consumed: Some(23456), }; let deprecated_status: StoredTransactionStatusMeta = status.clone().try_into().unwrap(); let protobuf_status: generated::TransactionStatusMeta = status.into(); diff --git a/programs/bpf/tests/programs.rs b/programs/bpf/tests/programs.rs index ea0f9edf37de81..5410c20f25c824 100644 --- a/programs/bpf/tests/programs.rs +++ b/programs/bpf/tests/programs.rs @@ -440,6 +440,7 @@ fn execute_transactions( inner_instructions, durable_nonce_fee, return_data, + executed_units, .. } = details; @@ -482,6 +483,7 @@ fn execute_transactions( rewards: None, loaded_addresses: LoadedAddresses::default(), return_data, + compute_units_consumed: Some(executed_units), }; Ok(ConfirmedTransactionWithStatusMeta { diff --git a/rpc/src/transaction_status_service.rs b/rpc/src/transaction_status_service.rs index 53493780345a3f..b9fdfb9bf90b49 100644 --- a/rpc/src/transaction_status_service.rs +++ b/rpc/src/transaction_status_service.rs @@ -103,6 +103,7 @@ impl TransactionStatusService { inner_instructions, durable_nonce_fee, return_data, + executed_units, .. } = details; let lamports_per_signature = match durable_nonce_fee { @@ -160,6 +161,7 @@ impl TransactionStatusService { rewards, loaded_addresses, return_data, + compute_units_consumed: Some(executed_units), }; if let Some(transaction_notifier) = transaction_notifier.as_ref() { diff --git a/storage-bigtable/src/bigtable.rs b/storage-bigtable/src/bigtable.rs index 629b1eab387474..d74c50bb5eb2fe 100644 --- a/storage-bigtable/src/bigtable.rs +++ b/storage-bigtable/src/bigtable.rs @@ -897,6 +897,7 @@ mod tests { rewards: Some(vec![]), loaded_addresses: LoadedAddresses::default(), return_data: Some(TransactionReturnData::default()), + compute_units_consumed: Some(1234), }, }); let expected_block = ConfirmedBlock { @@ -955,6 +956,7 @@ mod tests { meta.post_token_balances = None; // Legacy bincode implementation does not support token balances meta.rewards = None; // Legacy bincode implementation does not support rewards meta.return_data = None; // Legacy bincode implementation does not support return data + meta.compute_units_consumed = None; // Legacy bincode implementation does not support CU consumed } assert_eq!(block, bincode_block.into()); } else { diff --git a/storage-bigtable/src/lib.rs b/storage-bigtable/src/lib.rs index ba8e8c0e39dc4b..4e1cb401d1e0c4 100644 --- a/storage-bigtable/src/lib.rs +++ b/storage-bigtable/src/lib.rs @@ -244,6 +244,7 @@ impl From for TransactionStatusMeta { rewards: None, loaded_addresses: LoadedAddresses::default(), return_data: None, + compute_units_consumed: None, } } } diff --git a/storage-proto/proto/confirmed_block.proto b/storage-proto/proto/confirmed_block.proto index 5d69f0e9c2e70b..ef8dc0fb215f54 100644 --- a/storage-proto/proto/confirmed_block.proto +++ b/storage-proto/proto/confirmed_block.proto @@ -59,6 +59,11 @@ message TransactionStatusMeta { repeated bytes loaded_readonly_addresses = 13; ReturnData return_data = 14; bool return_data_none = 15; + + // Sum of compute units consumed by all instructions. + // Available since Solana v1.10.35 / v1.11.6. + // Set to `None` for txs executed on earlier versions. + optional uint64 compute_units_consumed = 16; } message TransactionError { diff --git a/storage-proto/src/convert.rs b/storage-proto/src/convert.rs index 4998d5f9a206a2..6580095403cf4f 100644 --- a/storage-proto/src/convert.rs +++ b/storage-proto/src/convert.rs @@ -365,6 +365,7 @@ impl From for generated::TransactionStatusMeta { rewards, loaded_addresses, return_data, + compute_units_consumed, } = value; let err = match status { Ok(()) => None, @@ -424,6 +425,7 @@ impl From for generated::TransactionStatusMeta { loaded_readonly_addresses, return_data, return_data_none, + compute_units_consumed, } } } @@ -455,6 +457,7 @@ impl TryFrom for TransactionStatusMeta { loaded_readonly_addresses, return_data, return_data_none, + compute_units_consumed, } = value; let status = match &err { None => Ok(()), @@ -515,6 +518,7 @@ impl TryFrom for TransactionStatusMeta { rewards, loaded_addresses, return_data, + compute_units_consumed, }) } } diff --git a/storage-proto/src/lib.rs b/storage-proto/src/lib.rs index 90cb01903362d3..0832690f1e2b88 100644 --- a/storage-proto/src/lib.rs +++ b/storage-proto/src/lib.rs @@ -176,6 +176,8 @@ pub struct StoredTransactionStatusMeta { pub rewards: Option>, #[serde(deserialize_with = "default_on_eof")] pub return_data: Option, + #[serde(deserialize_with = "default_on_eof")] + pub compute_units_consumed: Option, } impl From for TransactionStatusMeta { @@ -191,6 +193,7 @@ impl From for TransactionStatusMeta { post_token_balances, rewards, return_data, + compute_units_consumed, } = value; Self { status, @@ -207,6 +210,7 @@ impl From for TransactionStatusMeta { .map(|rewards| rewards.into_iter().map(|reward| reward.into()).collect()), loaded_addresses: LoadedAddresses::default(), return_data, + compute_units_consumed, } } } @@ -226,6 +230,7 @@ impl TryFrom for StoredTransactionStatusMeta { rewards, loaded_addresses, return_data, + compute_units_consumed, } = value; if !loaded_addresses.is_empty() { @@ -250,6 +255,7 @@ impl TryFrom for StoredTransactionStatusMeta { rewards: rewards .map(|rewards| rewards.into_iter().map(|reward| reward.into()).collect()), return_data, + compute_units_consumed, }) } } diff --git a/transaction-status/src/lib.rs b/transaction-status/src/lib.rs index d594af806bcec9..4a677606fcad51 100644 --- a/transaction-status/src/lib.rs +++ b/transaction-status/src/lib.rs @@ -288,6 +288,7 @@ pub struct TransactionStatusMeta { pub rewards: Option, pub loaded_addresses: LoadedAddresses, pub return_data: Option, + pub compute_units_consumed: Option, } impl Default for TransactionStatusMeta { @@ -304,6 +305,7 @@ impl Default for TransactionStatusMeta { rewards: None, loaded_addresses: LoadedAddresses::default(), return_data: None, + compute_units_consumed: None, } } } @@ -325,6 +327,8 @@ pub struct UiTransactionStatusMeta { #[serde(default, skip_serializing_if = "Option::is_none")] pub loaded_addresses: Option, pub return_data: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub compute_units_consumed: Option, } /// A duplicate representation of LoadedAddresses @@ -376,6 +380,7 @@ impl UiTransactionStatusMeta { rewards: meta.rewards, loaded_addresses: Some(UiLoadedAddresses::from(&meta.loaded_addresses)), return_data: meta.return_data, + compute_units_consumed: meta.compute_units_consumed, } } } @@ -401,6 +406,7 @@ impl From for UiTransactionStatusMeta { rewards: meta.rewards, loaded_addresses: Some(UiLoadedAddresses::from(&meta.loaded_addresses)), return_data: meta.return_data, + compute_units_consumed: meta.compute_units_consumed, } } } From 5da90d3f4ac5c5b04397e4e763d6554cf3c87dbf Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Mon, 8 Aug 2022 17:57:10 +0000 Subject: [PATCH 008/465] Fix windows release builds (backport #26986) (#26991) Fix windows release builds (#26986) * Don't try to build protobuf-src on windows * Set protoc envar (cherry picked from commit 46b3ecee556cab2da861857b63b849fd6c7d25fc) Co-authored-by: Tyera Eulberg --- .github/workflows/release-artifacts.yml | 1 + storage-bigtable/build-proto/Cargo.toml | 6 +++++- storage-bigtable/build-proto/src/main.rs | 1 + storage-proto/Cargo.toml | 6 +++++- storage-proto/build.rs | 1 + 5 files changed, 13 insertions(+), 2 deletions(-) diff --git a/.github/workflows/release-artifacts.yml b/.github/workflows/release-artifacts.yml index 5db8e25e660ac1..36eb31d4e15515 100644 --- a/.github/workflows/release-artifacts.yml +++ b/.github/workflows/release-artifacts.yml @@ -50,6 +50,7 @@ jobs: choco install openssl export OPENSSL_DIR="C:\Program Files\OpenSSL-Win64" choco install protoc + export PROTOC="C:\ProgramData\chocolatey\lib\protoc\tools\bin\protoc.exe" source /tmp/env.sh echo "::set-output name=tag::$CI_TAG" eval "$(ci/channel-info.sh)" diff --git a/storage-bigtable/build-proto/Cargo.toml b/storage-bigtable/build-proto/Cargo.toml index 7da00e8dbb052b..4e32ff93c21e81 100644 --- a/storage-bigtable/build-proto/Cargo.toml +++ b/storage-bigtable/build-proto/Cargo.toml @@ -12,5 +12,9 @@ version = "1.11.6" [workspace] [dependencies] -protobuf-src = "1.0.5" tonic-build = "0.8.0" + +# windows users should install the protobuf compiler manually and set the PROTOC +# envar to point to the installed binary +[target."cfg(not(windows))".dependencies] +protobuf-src = "1.0.5" diff --git a/storage-bigtable/build-proto/src/main.rs b/storage-bigtable/build-proto/src/main.rs index 4e7b4b171021ad..f2385d48a5ffa5 100644 --- a/storage-bigtable/build-proto/src/main.rs +++ b/storage-bigtable/build-proto/src/main.rs @@ -1,6 +1,7 @@ fn main() -> Result<(), std::io::Error> { const PROTOC_ENVAR: &str = "PROTOC"; if std::env::var(PROTOC_ENVAR).is_err() { + #[cfg(not(windows))] std::env::set_var(PROTOC_ENVAR, protobuf_src::protoc()); } diff --git a/storage-proto/Cargo.toml b/storage-proto/Cargo.toml index 39174c37dbf99b..72c67275498aec 100644 --- a/storage-proto/Cargo.toml +++ b/storage-proto/Cargo.toml @@ -29,5 +29,9 @@ name = "solana_storage_proto" targets = ["x86_64-unknown-linux-gnu"] [build-dependencies] -protobuf-src = "1.0.5" tonic-build = "0.8.0" + +# windows users should install the protobuf compiler manually and set the PROTOC +# envar to point to the installed binary +[target."cfg(not(windows))".build-dependencies] +protobuf-src = "1.0.5" diff --git a/storage-proto/build.rs b/storage-proto/build.rs index e5e17400a4feeb..ec975a105411ae 100644 --- a/storage-proto/build.rs +++ b/storage-proto/build.rs @@ -1,6 +1,7 @@ fn main() -> Result<(), std::io::Error> { const PROTOC_ENVAR: &str = "PROTOC"; if std::env::var(PROTOC_ENVAR).is_err() { + #[cfg(not(windows))] std::env::set_var(PROTOC_ENVAR, protobuf_src::protoc()); } From 4456e79cbd6c20c9d1f6cb5682f0c5b83eac5044 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Tue, 9 Aug 2022 00:59:11 +0000 Subject: [PATCH 009/465] Add API docs for secp256k1_instruction and secp256k1_recover (backport #26065) (#27007) * Add API docs for secp256k1_instruction and secp256k1_recover (#26065) * Add API docs for secp256k1_instruction and secp256k1_recover * typo * Remove unused variable from secp256k1 program test * Bump solana_bpf_rust_secp256k1_recover ix count Co-authored-by: Tyera Eulberg (cherry picked from commit ebe25fdb561f31488450c9a49501345d0831058f) # Conflicts: # programs/bpf/Cargo.lock # programs/bpf/rust/secp256k1_recover/Cargo.toml # programs/bpf/tests/programs.rs * Fix conflicts Co-authored-by: Brian Anderson Co-authored-by: Tyera Eulberg --- Cargo.lock | 1 + programs/bpf/Cargo.lock | 66 +- .../bpf/rust/secp256k1_recover/Cargo.toml | 1 + .../bpf/rust/secp256k1_recover/src/lib.rs | 51 +- programs/bpf/tests/programs.rs | 2 +- sdk/Cargo.toml | 1 + sdk/program/src/example_mocks.rs | 3 +- sdk/program/src/secp256k1_program.rs | 5 + sdk/program/src/secp256k1_recover.rs | 329 ++++++- sdk/src/secp256k1_instruction.rs | 908 +++++++++++++++++- 10 files changed, 1347 insertions(+), 20 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 59c79c56902ba9..d247d8a12855c7 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -6123,6 +6123,7 @@ dependencies = [ "ed25519-dalek", "ed25519-dalek-bip32", "generic-array 0.14.5", + "hex", "hmac 0.12.1", "itertools", "js-sys", diff --git a/programs/bpf/Cargo.lock b/programs/bpf/Cargo.lock index 5727159837f278..39130a758ca812 100644 --- a/programs/bpf/Cargo.lock +++ b/programs/bpf/Cargo.lock @@ -2190,15 +2190,31 @@ dependencies = [ "base64 0.12.3", "digest 0.9.0", "hmac-drbg", - "libsecp256k1-core", - "libsecp256k1-gen-ecmult", - "libsecp256k1-gen-genmult", + "libsecp256k1-core 0.2.2", + "libsecp256k1-gen-ecmult 0.2.1", + "libsecp256k1-gen-genmult 0.2.1", "rand 0.7.3", "serde", "sha2 0.9.9", "typenum", ] +[[package]] +name = "libsecp256k1" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0452aac8bab02242429380e9b2f94ea20cea2b37e2c1777a1358799bbe97f37" +dependencies = [ + "arrayref", + "base64 0.13.0", + "digest 0.9.0", + "libsecp256k1-core 0.3.0", + "libsecp256k1-gen-ecmult 0.3.0", + "libsecp256k1-gen-genmult 0.3.0", + "rand 0.8.5", + "serde", +] + [[package]] name = "libsecp256k1-core" version = "0.2.2" @@ -2210,13 +2226,33 @@ dependencies = [ "subtle", ] +[[package]] +name = "libsecp256k1-core" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5be9b9bb642d8522a44d533eab56c16c738301965504753b03ad1de3425d5451" +dependencies = [ + "crunchy", + "digest 0.9.0", + "subtle", +] + [[package]] name = "libsecp256k1-gen-ecmult" version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ccab96b584d38fac86a83f07e659f0deafd0253dc096dab5a36d53efe653c5c3" dependencies = [ - "libsecp256k1-core", + "libsecp256k1-core 0.2.2", +] + +[[package]] +name = "libsecp256k1-gen-ecmult" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3038c808c55c87e8a172643a7d87187fc6c4174468159cb3090659d55bcb4809" +dependencies = [ + "libsecp256k1-core 0.3.0", ] [[package]] @@ -2225,7 +2261,16 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "67abfe149395e3aa1c48a2beb32b068e2334402df8181f818d3aee2b304c4f5d" dependencies = [ - "libsecp256k1-core", + "libsecp256k1-core 0.2.2", +] + +[[package]] +name = "libsecp256k1-gen-genmult" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3db8d6ba2cec9eacc40e6e8ccc98931840301f1006e95647ceb2dd5c3aa06f7c" +dependencies = [ + "libsecp256k1-core 0.3.0", ] [[package]] @@ -4119,7 +4164,7 @@ version = "1.11.6" dependencies = [ "bincode", "byteorder 1.4.3", - "libsecp256k1", + "libsecp256k1 0.6.0", "log", "solana-measure", "solana-metrics", @@ -4441,6 +4486,7 @@ dependencies = [ name = "solana-bpf-rust-secp256k1-recover" version = "1.11.6" dependencies = [ + "libsecp256k1 0.7.0", "solana-program 1.11.6", ] @@ -5116,7 +5162,7 @@ dependencies = [ "itertools", "js-sys", "lazy_static", - "libsecp256k1", + "libsecp256k1 0.6.0", "log", "num-derive", "num-traits", @@ -5158,7 +5204,7 @@ dependencies = [ "js-sys", "lazy_static", "libc", - "libsecp256k1", + "libsecp256k1 0.6.0", "log", "memoffset", "num-derive", @@ -5388,7 +5434,7 @@ dependencies = [ "itertools", "js-sys", "lazy_static", - "libsecp256k1", + "libsecp256k1 0.6.0", "log", "memmap2", "num-derive", @@ -5437,7 +5483,7 @@ dependencies = [ "itertools", "js-sys", "lazy_static", - "libsecp256k1", + "libsecp256k1 0.6.0", "log", "memmap2", "num-derive", diff --git a/programs/bpf/rust/secp256k1_recover/Cargo.toml b/programs/bpf/rust/secp256k1_recover/Cargo.toml index 18ad44a738cff4..4b38af10eaaac5 100644 --- a/programs/bpf/rust/secp256k1_recover/Cargo.toml +++ b/programs/bpf/rust/secp256k1_recover/Cargo.toml @@ -10,6 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-secp256k1-recover" edition = "2021" [dependencies] +libsecp256k1 = { version = "0.7.0", default-features = false } solana-program = { path = "../../../../sdk/program", version = "=1.11.6" } [lib] diff --git a/programs/bpf/rust/secp256k1_recover/src/lib.rs b/programs/bpf/rust/secp256k1_recover/src/lib.rs index 58fe2c7b96ba0f..5cdc07ad621885 100644 --- a/programs/bpf/rust/secp256k1_recover/src/lib.rs +++ b/programs/bpf/rust/secp256k1_recover/src/lib.rs @@ -1,11 +1,11 @@ //! Secp256k1Recover Syscall test extern crate solana_program; -use solana_program::{custom_heap_default, custom_panic_default, msg}; +use solana_program::{ + custom_heap_default, custom_panic_default, msg, secp256k1_recover::secp256k1_recover, +}; fn test_secp256k1_recover() { - use solana_program::secp256k1_recover::secp256k1_recover; - let expected: [u8; 64] = [ 0x42, 0xcd, 0x27, 0xe4, 0x0f, 0xdf, 0x7c, 0x97, 0x0a, 0xa2, 0xca, 0x0b, 0x88, 0x5b, 0x96, 0x0f, 0x8b, 0x62, 0x8a, 0x41, 0xa1, 0x81, 0xe7, 0xe6, 0x8e, 0x03, 0xea, 0x0b, 0x84, 0x20, @@ -32,11 +32,56 @@ fn test_secp256k1_recover() { assert_eq!(public_key.to_bytes(), expected); } +/// secp256k1_recover allows malleable signatures +fn test_secp256k1_recover_malleability() { + let message = b"hello world"; + let message_hash = { + let mut hasher = solana_program::keccak::Hasher::default(); + hasher.hash(message); + hasher.result() + }; + + let pubkey_bytes: [u8; 64] = [ + 0x9B, 0xEE, 0x7C, 0x18, 0x34, 0xE0, 0x18, 0x21, 0x7B, 0x40, 0x14, 0x9B, 0x84, 0x2E, 0xFA, + 0x80, 0x96, 0x00, 0x1A, 0x9B, 0x17, 0x88, 0x01, 0x80, 0xA8, 0x46, 0x99, 0x09, 0xE9, 0xC4, + 0x73, 0x6E, 0x39, 0x0B, 0x94, 0x00, 0x97, 0x68, 0xC2, 0x28, 0xB5, 0x55, 0xD3, 0x0C, 0x0C, + 0x42, 0x43, 0xC1, 0xEE, 0xA5, 0x0D, 0xC0, 0x48, 0x62, 0xD3, 0xAE, 0xB0, 0x3D, 0xA2, 0x20, + 0xAC, 0x11, 0x85, 0xEE, + ]; + let signature_bytes: [u8; 64] = [ + 0x93, 0x92, 0xC4, 0x6C, 0x42, 0xF6, 0x31, 0x73, 0x81, 0xD4, 0xB2, 0x44, 0xE9, 0x2F, 0xFC, + 0xE3, 0xF4, 0x57, 0xDD, 0x50, 0xB3, 0xA5, 0x20, 0x26, 0x3B, 0xE7, 0xEF, 0x8A, 0xB0, 0x69, + 0xBB, 0xDE, 0x2F, 0x90, 0x12, 0x93, 0xD7, 0x3F, 0xA0, 0x29, 0x0C, 0x46, 0x4B, 0x97, 0xC5, + 0x00, 0xAD, 0xEA, 0x6A, 0x64, 0x4D, 0xC3, 0x8D, 0x25, 0x24, 0xEF, 0x97, 0x6D, 0xC6, 0xD7, + 0x1D, 0x9F, 0x5A, 0x26, + ]; + let recovery_id: u8 = 0; + + let signature = libsecp256k1::Signature::parse_standard_slice(&signature_bytes).unwrap(); + + // Flip the S value in the signature to make a different but valid signature. + let mut alt_signature = signature.clone(); + alt_signature.s = -alt_signature.s; + let alt_recovery_id = libsecp256k1::RecoveryId::parse(recovery_id ^ 1).unwrap(); + + let alt_signature_bytes = alt_signature.serialize(); + let alt_recovery_id = alt_recovery_id.serialize(); + + let recovered_pubkey = + secp256k1_recover(&message_hash.0, recovery_id, &signature_bytes[..]).unwrap(); + assert_eq!(recovered_pubkey.to_bytes(), pubkey_bytes); + + let alt_recovered_pubkey = + secp256k1_recover(&message_hash.0, alt_recovery_id, &alt_signature_bytes[..]).unwrap(); + assert_eq!(alt_recovered_pubkey.to_bytes(), pubkey_bytes); +} + #[no_mangle] pub extern "C" fn entrypoint(_input: *mut u8) -> u64 { msg!("secp256k1_recover"); test_secp256k1_recover(); + test_secp256k1_recover_malleability(); 0 } diff --git a/programs/bpf/tests/programs.rs b/programs/bpf/tests/programs.rs index 5410c20f25c824..187580b944e780 100644 --- a/programs/bpf/tests/programs.rs +++ b/programs/bpf/tests/programs.rs @@ -1653,7 +1653,7 @@ fn assert_instruction_count() { ("solana_bpf_rust_param_passing", 146), ("solana_bpf_rust_rand", 429), ("solana_bpf_rust_sanity", 52290), - ("solana_bpf_rust_secp256k1_recover", 25707), + ("solana_bpf_rust_secp256k1_recover", 91195), ("solana_bpf_rust_sha", 25265), ]); } diff --git a/sdk/Cargo.toml b/sdk/Cargo.toml index 4428b1a1b781fd..3244dde28c473f 100644 --- a/sdk/Cargo.toml +++ b/sdk/Cargo.toml @@ -86,6 +86,7 @@ js-sys = "0.3.58" [dev-dependencies] anyhow = "1.0.58" curve25519-dalek = "3.2.1" +hex = "0.4.3" static_assertions = "1.1.0" tiny-bip39 = "0.8.2" diff --git a/sdk/program/src/example_mocks.rs b/sdk/program/src/example_mocks.rs index cacc800ef0c640..97b5f8b5c6f873 100644 --- a/sdk/program/src/example_mocks.rs +++ b/sdk/program/src/example_mocks.rs @@ -113,7 +113,7 @@ pub mod solana_client { /// programs. pub mod solana_sdk { pub use crate::{ - address_lookup_table_account, hash, instruction, message, nonce, + address_lookup_table_account, hash, instruction, keccak, message, nonce, pubkey::{self, Pubkey}, system_instruction, system_program, }; @@ -178,6 +178,7 @@ pub mod solana_sdk { pub trait Signers {} + impl Signers for [&T] {} impl Signers for [&T; 1] {} impl Signers for [&T; 2] {} } diff --git a/sdk/program/src/secp256k1_program.rs b/sdk/program/src/secp256k1_program.rs index 5517fcb2e8f491..4bc3de2c71596e 100644 --- a/sdk/program/src/secp256k1_program.rs +++ b/sdk/program/src/secp256k1_program.rs @@ -1,5 +1,10 @@ //! The [secp256k1 native program][np]. //! //! [np]: https://docs.solana.com/developing/runtime-facilities/programs#secp256k1-program +//! +//! Constructors for secp256k1 program instructions, and documentation on the +//! program's usage can be found in [`solana_sdk::secp256k1_instruction`]. +//! +//! [`solana_sdk::secp256k1_instruction`]: https://docs.rs/solana-sdk/latest/solana_sdk/secp256k1_instruction/index.html crate::declare_id!("KeccakSecp256k11111111111111111111111111111"); diff --git a/sdk/program/src/secp256k1_recover.rs b/sdk/program/src/secp256k1_recover.rs index 16451b149da850..408d41b77295c0 100644 --- a/sdk/program/src/secp256k1_recover.rs +++ b/sdk/program/src/secp256k1_recover.rs @@ -1,4 +1,28 @@ -//! Key recovery from secp256k1 signatures. +//! Public key recovery from [secp256k1] ECDSA signatures. +//! +//! [secp256k1]: https://en.bitcoin.it/wiki/Secp256k1 +//! +//! _This module provides low-level cryptographic building blocks that must be +//! used carefully to ensure proper security. Read this documentation and +//! accompanying links thoroughly._ +//! +//! The [`secp256k1_recover`] syscall allows a secp256k1 public key that has +//! previously signed a message to be recovered from the combination of the +//! message, the signature, and a recovery ID. The recovery ID is generated +//! during signing. +//! +//! Use cases for `secp256k1_recover` include: +//! +//! - Implementing the Ethereum [`ecrecover`] builtin contract. +//! - Performing secp256k1 public key recovery generally. +//! - Verifying a single secp256k1 signature. +//! +//! While `secp256k1_recover` can be used to verify secp256k1 signatures, Solana +//! also provides the [secp256k1 program][sp], which is more flexible, has lower CPU +//! cost, and can validate many signatures at once. +//! +//! [sp]: crate::secp256k1_program +//! [`ecrecover`]: https://docs.soliditylang.org/en/v0.8.14/units-and-global-variables.html?highlight=ecrecover#mathematical-and-cryptographic-functions use { borsh::{BorshDeserialize, BorshSchema, BorshSerialize}, @@ -69,6 +93,309 @@ impl Secp256k1Pubkey { } } +/// Recover the public key from a [secp256k1] ECDSA signature and +/// cryptographically-hashed message. +/// +/// [secp256k1]: https://en.bitcoin.it/wiki/Secp256k1 +/// +/// This function is specifically intended for efficiently implementing +/// Ethereum's [`ecrecover`] builtin contract, for use by Ethereum integrators. +/// It may be useful for other purposes. +/// +/// [`ecrecover`]: https://docs.soliditylang.org/en/v0.8.14/units-and-global-variables.html?highlight=ecrecover#mathematical-and-cryptographic-functions +/// +/// `hash` is the 32-byte cryptographic hash (typically [`keccak`]) of an +/// arbitrary message, signed by some public key. +/// +/// The recovery ID is a value in the range [0, 3] that is generated during +/// signing, and allows the recovery process to be more efficent. Note that the +/// `recovery_id` here does not directly correspond to an Ethereum recovery ID +/// as used in `ecrecover`. This function accepts recovery IDs in the range of +/// [0, 3], while Ethereum's recovery IDs have a value of 27 or 28. To convert +/// an Ethereum recovery ID to a value this function will accept subtract 27 +/// from it, checking for underflow. In practice this function will not succeed +/// if given a recovery ID of 2 or 3, as these values represent an +/// "overflowing" signature, and this function returns an error when parsing +/// overflowing signatures. +/// +/// [`keccak`]: crate::keccak +/// [`wrapping_sub`]: https://doc.rust-lang.org/std/primitive.u8.html#method.wrapping_sub +/// +/// On success this function returns a [`Secp256k1Pubkey`], a wrapper around a +/// 64-byte secp256k1 public key. This public key corresponds to the secret key +/// that previously signed the message `hash` to produce the provided +/// `signature`. +/// +/// While `secp256k1_recover` can be used to verify secp256k1 signatures by +/// comparing the recovered key against an expected key, Solana also provides +/// the [secp256k1 program][sp], which is more flexible, has lower CPU cost, and +/// can validate many signatures at once. +/// +/// [sp]: crate::secp256k1_program +/// +/// The `secp256k1_recover` syscall is implemented with the [`libsecp256k1`] +/// crate, which clients may also want to use. +/// +/// [`libsecp256k1`]: https://docs.rs/libsecp256k1/latest/libsecp256k1 +/// +/// # Hashing messages +/// +/// In ECDSA signing and key recovery the signed "message" is always a +/// crytographic hash, not the original message itself. If not a cryptographic +/// hash, then an adversary can craft signatures that recover to arbitrary +/// public keys. This means the caller of this function generally must hash the +/// original message themselves and not rely on another party to provide the +/// hash. +/// +/// Ethereum uses the [`keccak`] hash. +/// +/// # Signature malleability +/// +/// With the ECDSA signature algorithm it is possible for any party, given a +/// valid signature of some message, to create a second signature that is +/// equally valid. This is known as _signature malleability_. In many cases this +/// is not a concern, but in cases where applications rely on signatures to have +/// a unique representation this can be the source of bugs, potentially with +/// security implications. +/// +/// **The solana `secp256k1_recover` function does not prevent signature +/// malleability**. This is in contrast to the Bitcoin secp256k1 library, which +/// does prevent malleability by default. Solana accepts signatures with `S` +/// values that are either in the _high order_ or in the _low order_, and it +/// is trivial to produce one from the other. +/// +/// To prevent signature malleability, it is common for secp256k1 signature +/// validators to only accept signatures with low-order `S` values, and reject +/// signatures with high-order `S` values. The following code will accomplish +/// this: +/// +/// ```rust +/// # use solana_program::program_error::ProgramError; +/// # let signature_bytes = [ +/// # 0x83, 0x55, 0x81, 0xDF, 0xB1, 0x02, 0xA7, 0xD2, +/// # 0x2D, 0x33, 0xA4, 0x07, 0xDD, 0x7E, 0xFA, 0x9A, +/// # 0xE8, 0x5F, 0x42, 0x6B, 0x2A, 0x05, 0xBB, 0xFB, +/// # 0xA1, 0xAE, 0x93, 0x84, 0x46, 0x48, 0xE3, 0x35, +/// # 0x74, 0xE1, 0x6D, 0xB4, 0xD0, 0x2D, 0xB2, 0x0B, +/// # 0x3C, 0x89, 0x8D, 0x0A, 0x44, 0xDF, 0x73, 0x9C, +/// # 0x1E, 0xBF, 0x06, 0x8E, 0x8A, 0x9F, 0xA9, 0xC3, +/// # 0xA5, 0xEA, 0x21, 0xAC, 0xED, 0x5B, 0x22, 0x13, +/// # ]; +/// let signature = libsecp256k1::Signature::parse_standard_slice(&signature_bytes) +/// .map_err(|_| ProgramError::InvalidArgument)?; +/// +/// if signature.s.is_high() { +/// return Err(ProgramError::InvalidArgument); +/// } +/// # Ok::<_, ProgramError>(()) +/// ``` +/// +/// This has the downside that the program must link to the [`libsecp256k1`] +/// crate and parse the signature just for this check. Note that `libsecp256k1` +/// version 0.7.0 or greater is required for running on the Solana BPF target. +/// +/// [`libsecp256k1`]: https://docs.rs/libsecp256k1/latest/libsecp256k1 +/// +/// For the most accurate description of signature malleability, and its +/// prevention in secp256k1, refer to comments in [`secp256k1.h`] in the Bitcoin +/// Core secp256k1 library, the documentation of the [OpenZeppelin `recover` +/// method for Solidity][ozr], and [this description of the problem on +/// StackExchange][sxr]. +/// +/// [`secp256k1.h`]: https://github.com/bitcoin-core/secp256k1/blob/44c2452fd387f7ca604ab42d73746e7d3a44d8a2/include/secp256k1.h +/// [ozr]: https://docs.openzeppelin.com/contracts/2.x/api/cryptography#ECDSA-recover-bytes32-bytes- +/// [sxr]: https://bitcoin.stackexchange.com/questions/81115/if-someone-wanted-to-pretend-to-be-satoshi-by-posting-a-fake-signature-to-defrau/81116#81116 +/// +/// # Errors +/// +/// If `hash` is not 32 bytes in length this function returns +/// [`Secp256k1RecoverError::InvalidHash`], though see notes +/// on BPF-specific behavior below. +/// +/// If `recovery_id` is not in the range [0, 3] this function returns +/// [`Secp256k1RecoverError::InvalidRecoveryId`]. +/// +/// If `signature` is not 64 bytes in length this function returns +/// [`Secp256k1RecoverError::InvalidSignature`], though see notes +/// on BPF-specific behavior below. +/// +/// If `signature` represents an "overflowing" signature this function returns +/// [`Secp256k1RecoverError::InvalidSignature`]. Overflowing signatures are +/// non-standard and should not be encountered in practice. +/// +/// If `signature` is otherwise invalid this function returns +/// [`Secp256k1RecoverError::InvalidSignature`]. +/// +/// # BPF-specific behavior +/// +/// When calling this function on-chain the caller must verify the correct +/// lengths of `hash` and `signature` beforehand. +/// +/// When run on-chain this function will not directly validate the lengths of +/// `hash` and `signature`. It will assume they are the the correct lengths and +/// pass their pointers to the runtime, which will interpret them as 32-byte and +/// 64-byte buffers. If the provided slices are too short, the runtime will read +/// invalid data and attempt to interpret it, most likely returning an error, +/// though in some scenarios it may be possible to incorrectly return +/// successfully, or the transaction will abort if the syscall reads data +/// outside of the program's memory space. If the provided slices are too long +/// then they may be used to "smuggle" uninterpreted data. +/// +/// # Examples +/// +/// This example demonstrates recovering a public key and using it to very a +/// signature with the `secp256k1_recover` syscall. It has three parts: a Solana +/// program, an RPC client to call the program, and common definitions shared +/// between the two. +/// +/// Common definitions: +/// +/// ``` +/// use borsh::{BorshDeserialize, BorshSerialize}; +/// +/// #[derive(BorshSerialize, BorshDeserialize, Debug)] +/// pub struct DemoSecp256k1RecoverInstruction { +/// pub message: Vec, +/// pub signature: [u8; 64], +/// pub recovery_id: u8, +/// } +/// ``` +/// +/// The Solana program. Note that it uses `libsecp256k1` version 0.7.0 to parse +/// the secp256k1 signature to prevent malleability. +/// +/// ```no_run +/// use solana_program::{ +/// entrypoint::ProgramResult, +/// keccak, msg, +/// program_error::ProgramError, +/// secp256k1_recover::secp256k1_recover, +/// }; +/// +/// /// The key we expect to sign secp256k1 messages, +/// /// as serialized by `libsecp256k1::PublicKey::serialize`. +/// const AUTHORIZED_PUBLIC_KEY: [u8; 64] = [ +/// 0x8C, 0xD6, 0x47, 0xF8, 0xA5, 0xBF, 0x59, 0xA0, 0x4F, 0x77, 0xFA, 0xFA, 0x6C, 0xA0, 0xE6, 0x4D, +/// 0x94, 0x5B, 0x46, 0x55, 0xA6, 0x2B, 0xB0, 0x6F, 0x10, 0x4C, 0x9E, 0x2C, 0x6F, 0x42, 0x0A, 0xBE, +/// 0x18, 0xDF, 0x0B, 0xF0, 0x87, 0x42, 0xBA, 0x88, 0xB4, 0xCF, 0x87, 0x5A, 0x35, 0x27, 0xBE, 0x0F, +/// 0x45, 0xAE, 0xFC, 0x66, 0x9C, 0x2C, 0x6B, 0xF3, 0xEF, 0xCA, 0x5C, 0x32, 0x11, 0xF7, 0x2A, 0xC7, +/// ]; +/// # pub struct DemoSecp256k1RecoverInstruction { +/// # pub message: Vec, +/// # pub signature: [u8; 64], +/// # pub recovery_id: u8, +/// # } +/// +/// pub fn process_secp256k1_recover( +/// instruction: DemoSecp256k1RecoverInstruction, +/// ) -> ProgramResult { +/// // The secp256k1 recovery operation accepts a cryptographically-hashed +/// // message only. Passing it anything else is insecure and allows signatures +/// // to be forged. +/// // +/// // This means that the code calling `secp256k1_recover` must perform the hash +/// // itself, and not assume that data passed to it has been properly hashed. +/// let message_hash = { +/// let mut hasher = keccak::Hasher::default(); +/// hasher.hash(&instruction.message); +/// hasher.result() +/// }; +/// +/// // Reject high-s value signatures to prevent malleability. +/// // Solana does not do this itself. +/// // This may or may not be necessary depending on use case. +/// { +/// let signature = libsecp256k1::Signature::parse_standard_slice(&instruction.signature) +/// .map_err(|_| ProgramError::InvalidArgument)?; +/// +/// if signature.s.is_high() { +/// msg!("signature with high-s value"); +/// return Err(ProgramError::InvalidArgument); +/// } +/// } +/// +/// let recovered_pubkey = secp256k1_recover( +/// &message_hash.0, +/// instruction.recovery_id, +/// &instruction.signature, +/// ) +/// .map_err(|_| ProgramError::InvalidArgument)?; +/// +/// // If we're using this function for signature verification then we +/// // need to check the pubkey is an expected value. +/// // Here we are checking the secp256k1 pubkey against a known authorized pubkey. +/// if recovered_pubkey.0 != AUTHORIZED_PUBLIC_KEY { +/// return Err(ProgramError::InvalidArgument); +/// } +/// +/// Ok(()) +/// } +/// ``` +/// +/// The RPC client program: +/// +/// ```no_run +/// # use solana_program::example_mocks::solana_client; +/// # use solana_program::example_mocks::solana_sdk; +/// use anyhow::Result; +/// use solana_client::rpc_client::RpcClient; +/// use solana_sdk::{ +/// instruction::Instruction, +/// keccak, +/// pubkey::Pubkey, +/// signature::{Keypair, Signer}, +/// transaction::Transaction, +/// }; +/// # use borsh::{BorshDeserialize, BorshSerialize}; +/// # #[derive(BorshSerialize, BorshDeserialize, Debug)] +/// # pub struct DemoSecp256k1RecoverInstruction { +/// # pub message: Vec, +/// # pub signature: [u8; 64], +/// # pub recovery_id: u8, +/// # } +/// +/// pub fn demo_secp256k1_recover( +/// payer_keypair: &Keypair, +/// secp256k1_secret_key: &libsecp256k1::SecretKey, +/// client: &RpcClient, +/// program_keypair: &Keypair, +/// ) -> Result<()> { +/// let message = b"hello world"; +/// let message_hash = { +/// let mut hasher = keccak::Hasher::default(); +/// hasher.hash(message); +/// hasher.result() +/// }; +/// +/// let secp_message = libsecp256k1::Message::parse(&message_hash.0); +/// let (signature, recovery_id) = libsecp256k1::sign(&secp_message, &secp256k1_secret_key); +/// +/// let signature = signature.serialize(); +/// +/// let instr = DemoSecp256k1RecoverInstruction { +/// message: message.to_vec(), +/// signature, +/// recovery_id: recovery_id.serialize(), +/// }; +/// let instr = Instruction::new_with_borsh( +/// program_keypair.pubkey(), +/// &instr, +/// vec![], +/// ); +/// +/// let blockhash = client.get_latest_blockhash()?; +/// let tx = Transaction::new_signed_with_payer( +/// &[instr], +/// Some(&payer_keypair.pubkey()), +/// &[payer_keypair], +/// blockhash, +/// ); +/// +/// client.send_and_confirm_transaction(&tx)?; +/// +/// Ok(()) +/// } +/// ``` pub fn secp256k1_recover( hash: &[u8], recovery_id: u8, diff --git a/sdk/src/secp256k1_instruction.rs b/sdk/src/secp256k1_instruction.rs index de9bb89fca1c1f..a70ad00bdcd1ed 100644 --- a/sdk/src/secp256k1_instruction.rs +++ b/sdk/src/secp256k1_instruction.rs @@ -1,3 +1,790 @@ +//! Instructions for the [secp256k1 native program][np]. +//! +//! [np]: https://docs.solana.com/developing/runtime-facilities/programs#secp256k1-program +//! +//! _This module provides low-level cryptographic building blocks that must be +//! used carefully to ensure proper security. Read this documentation and +//! accompanying links thoroughly._ +//! +//! The secp26k1 native program peforms flexible verification of [secp256k1] +//! ECDSA signatures, as used by Ethereum. It can verify up to 255 signatures on +//! up to 255 messages, with those signatures, messages, and their public keys +//! arbitrarily distributed across the instruction data of any instructions in +//! the same transaction as the secp256k1 instruction. +//! +//! The secp256k1 native program ID is located in the [`secp256k1_program`] module. +//! +//! The instruction is designed for Ethereum interoperability, but may be useful +//! for other purposes. It operates on Ethereum addresses, which are [`keccak`] +//! hashes of secp256k1 public keys, and internally is implemented using the +//! secp256k1 key recovery algorithm. Ethereum address can be created for +//! secp256k1 public keys with the [`construct_eth_pubkey`] function. +//! +//! [`keccak`]: crate::keccak +//! +//! This instruction does not directly allow for key recovery as in Ethereum's +//! [`ecrecover`] precompile. For that Solana provides the [`secp256k1_recover`] +//! syscall. +//! +//! [secp256k1]: https://en.bitcoin.it/wiki/Secp256k1 +//! [`secp256k1_program`]: solana_program::secp256k1_program +//! [`secp256k1_recover`]: solana_program::secp256k1_recover +//! [`ecrecover`]: https://docs.soliditylang.org/en/v0.8.14/units-and-global-variables.html?highlight=ecrecover#mathematical-and-cryptographic-functions +//! +//! Use cases for the secp256k1 instruction include: +//! +//! - Verifying Ethereum transaction signatures. +//! - Verifying Ethereum [EIP-712] signatures. +//! - Verifying arbitrary secp256k1 signatures. +//! - Signing a single message with multiple signatures. +//! +//! [EIP-712]: https://eips.ethereum.org/EIPS/eip-712 +//! +//! The [`new_secp256k1_instruction`] function is suitable for building a +//! secp256k1 program instruction for basic use cases were a single message must +//! be signed by a known secret key. For other uses cases, including many +//! Ethereum-integration use cases, construction of the secp256k1 instruction +//! must be done manually. +//! +//! # How to use this program +//! +//! Transactions that uses the secp256k1 native program will typically include +//! at least two instructions: one for the secp256k1 program to verify the +//! signatures, and one for a custom program that will check that the secp256k1 +//! instruction data matches what the program expects (using +//! [`load_instruction_at_checked`] or [`get_instruction_relative`]). The +//! signatures, messages, and Ethereum addresses being verified may reside in the +//! instruction data of either of these instructions, or in the instruction data +//! of one or more additional instructions, as long as those instructions are in +//! the same transaction. +//! +//! [`load_instruction_at_checked`]: crate::sysvar::instructions::load_instruction_at_checked +//! [`get_instruction_relative`]: crate::sysvar::instructions::get_instruction_relative +//! +//! Correct use of this program involves multiple steps, in client code and +//! program code: +//! +//! - In the client: +//! - Sign the [`keccak`]-hashed messages with a secp256k1 ECDSA library, +//! like the [`libsecp256k1`] crate. +//! - Build any custom instruction data that contain signature, message, or +//! Ethereum address data that will be used by the secp256k1 instruction. +//! - Build the secp256k1 program instruction data, specifying the number of +//! signatures to verify, the instruction indexes within the transaction, +//! and offsets within those instruction's data, where the signatures, +//! messages, and Ethereum addresses are located. +//! - Build the custom instruction for the program that will check the results +//! of the secp256k1 native program. +//! - Package all instructions into a single transaction and submit them. +//! - In the program: +//! - Load the secp256k1 instruction data with +//! [`load_instruction_at_checked`]. or [`get_instruction_relative`]. +//! - Check that the secp256k1 program ID is equal to +//! [`secp256k1_program::ID`], so that the signature verification cannot be +//! faked with a malicious program. +//! - Check that the public keys and messages are the expected values per +//! the program's requirements. +//! +//! [`secp256k1_program::ID`]: crate::secp256k1_program::ID +//! +//! The signature, message, or Ethereum addresses may reside in the secp256k1 +//! instruction data itself as additional data, their bytes following the bytes +//! of the protocol required by the secp256k1 instruction to locate the +//! signature, message, and Ethereum address data. This is the technique used by +//! `new_secp256k1_instruction` for simple signature verification. +//! +//! The `solana_sdk` crate provides few APIs for building the instructions and +//! transactions necessary for properly using the secp256k1 native program. +//! Many steps must be done manually. +//! +//! The `solana_program` crate provides no APIs to assist in interpreting +//! the the secp256k1 instruction data. It must be done manually. +//! +//! The secp256k1 program is implemented with the [`libsecp256k1`] crate, +//! which clients may also want to use. +//! +//! [`libsecp256k1`]: https://docs.rs/libsecp256k1/latest/libsecp256k1 +//! +//! # Layout and interpretation of the secp256k1 instruction data +//! +//! The secp256k1 instruction data contains: +//! +//! - 1 byte indicating the number of signatures to verify, 0 - 255, +//! - A number of _signature offset_ structures that indicate where in the +//! transaction to locate each signature, message, and Ethereum address. +//! - 0 or more bytes of arbitrary data, which may contain signatures, +//! messages or Ethereum addresses. +//! +//! The signature offset structure is defined by [`SecpSignatureOffsets`], +//! and can be serialized to the correct format with [`bincode::serialize_into`]. +//! Note that the bincode format may not be stable, +//! and callers should ensure they use the same version of `bincode` as the Solana SDK. +//! This data structure is not provided to Solana programs, +//! which are expected to interpret the signature offsets manually. +//! +//! [`bincode::serialize_into`]: https://docs.rs/bincode/1.3.3/bincode/fn.serialize_into.html +//! +//! The serialized signature offset structure has the following 11-byte layout, +//! with data types in little-endian encoding. +//! +//! | index | bytes | type | description | +//! |--------|-------|-------|-------------| +//! | 0 | 2 | `u16` | `signature_offset` - offset to 64-byte signature plus 1-byte recovery ID. | +//! | 2 | 1 | `u8` | `signature_offset_instruction_index` - within the transaction, the index of the transaction whose instruction data contains the signature. | +//! | 3 | 2 | `u16` | `eth_address_offset` - offset to 20-byte Ethereum address. | +//! | 5 | 1 | `u8` | `eth_address_instruction_index` - within the transaction, the index of the instruction whose instruction data contains the Ethereum address. | +//! | 6 | 2 | `u16` | `message_data_offset` - Offset to start of message data. | +//! | 8 | 2 | `u16` | `message_data_size` - Size of message data in bytes. | +//! | 10 | 1 | `u8` | `message_instruction_index` - Within the transaction, the index of the instruction whose instruction data contains the message data. | +//! +//! # Signature malleability +//! +//! With the ECDSA signature algorithm it is possible for any party, given a +//! valid signature of some message, to create a second signature that is +//! equally valid. This is known as _signature malleability_. In many cases this +//! is not a concern, but in cases where applications rely on signatures to have +//! a unique representation this can be the source of bugs, potentially with +//! security implications. +//! +//! **The solana `secp256k1_recover` function does not prevent signature +//! malleability**. This is in contrast to the Bitcoin secp256k1 library, which +//! does prevent malleability by default. Solana accepts signatures with `S` +//! values that are either in the _high order_ or in the _low order_, and it +//! is trivial to produce one from the other. +//! +//! For more complete documentation of the subject, and techniques to prevent +//! malleability, see the documentation for the [`secp256k1_recover`] syscall. +//! +//! # Additional security considerations +//! +//! Most programs will want to be conservative about the layout of the secp256k1 instruction +//! to prevent unforeseen bugs. The following checks may be desirable: +//! +//! - That there are exactly the expected number of signatures. +//! - That the three indexes, `signature_offset_instruction_index`, +//! `eth_address_instruction_index`, and `message_instruction_index` are as +//! expected, placing the signature, message and Ethereum address in the +//! expected instruction. +//! +//! Loading the secp256k1 instruction data within a program requires access to +//! the [instructions sysvar][is], which must be passed to the program by its +//! caller. Programs must verify the ID of this program to avoid calling an +//! imposter program. This does not need to be done manually though, as long as +//! it is only used through the [`load_instruction_at_checked`] or +//! [`get_instruction_relative`] functions. Both of these functions check their +//! sysvar argument to ensure it is the known instruction sysvar. +//! +//! [is]: crate::sysvar::instructions +//! +//! Programs should _always_ verify that the secp256k1 program ID loaded through +//! the instructions sysvar has the same value as in the [`secp256k1_program`] +//! module. Again this prevents imposter programs. +//! +//! [`secp256k1_program`]: crate::secp256k1_program +//! +//! # Errors +//! +//! The transaction will fail if any of the following are true: +//! +//! - Any signature was not created by the secret key corresponding to the +//! specified public key. +//! - Any signature is invalid. +//! - Any signature is "overflowing", a non-standard condition. +//! - The instruction data is empty. +//! - The first byte of instruction data is equal to 0 (indicating no signatures), +//! but the instruction data's length is greater than 1. +//! - The instruction data is not long enough to hold the number of signature +//! offsets specified in the first byte. +//! - Any instruction indexes specified in the signature offsets are greater or +//! equal to the number of instructions in the transaction. +//! - Any bounds specified in the signature offsets exceed the bounds of the +//! instruction data to which they are indexed. +//! +//! # Examples +//! +//! Both of the following examples make use of the following module definition +//! to parse the secp256k1 instruction data from within a Solana program. +//! +//! ```no_run +//! mod secp256k1_defs { +//! use solana_program::program_error::ProgramError; +//! use std::iter::Iterator; +//! +//! pub const HASHED_PUBKEY_SERIALIZED_SIZE: usize = 20; +//! pub const SIGNATURE_SERIALIZED_SIZE: usize = 64; +//! pub const SIGNATURE_OFFSETS_SERIALIZED_SIZE: usize = 11; +//! +//! /// The structure encoded in the secp2256k1 instruction data. +//! pub struct SecpSignatureOffsets { +//! pub signature_offset: u16, +//! pub signature_instruction_index: u8, +//! pub eth_address_offset: u16, +//! pub eth_address_instruction_index: u8, +//! pub message_data_offset: u16, +//! pub message_data_size: u16, +//! pub message_instruction_index: u8, +//! } +//! +//! pub fn iter_signature_offsets( +//! secp256k1_instr_data: &[u8], +//! ) -> Result + '_, ProgramError> { +//! // First element is the number of `SecpSignatureOffsets`. +//! let num_structs = *secp256k1_instr_data +//! .get(0) +//! .ok_or(ProgramError::InvalidArgument)?; +//! +//! let all_structs_size = SIGNATURE_OFFSETS_SERIALIZED_SIZE * num_structs as usize; +//! let all_structs_slice = secp256k1_instr_data +//! .get(1..all_structs_size + 1) +//! .ok_or(ProgramError::InvalidArgument)?; +//! +//! fn decode_u16(chunk: &[u8], index: usize) -> u16 { +//! u16::from_le_bytes(<[u8; 2]>::try_from(&chunk[index..index + 2]).unwrap()) +//! } +//! +//! Ok(all_structs_slice +//! .chunks(SIGNATURE_OFFSETS_SERIALIZED_SIZE) +//! .map(|chunk| SecpSignatureOffsets { +//! signature_offset: decode_u16(chunk, 0), +//! signature_instruction_index: chunk[2], +//! eth_address_offset: decode_u16(chunk, 3), +//! eth_address_instruction_index: chunk[5], +//! message_data_offset: decode_u16(chunk, 6), +//! message_data_size: decode_u16(chunk, 8), +//! message_instruction_index: chunk[10], +//! })) +//! } +//! } +//! ``` +//! +//! ## Example: Signing and verifying with `new_secp256k1_instruction` +//! +//! This example demonstrates the simplest way to use the secp256k1 program, by +//! calling [`new_secp256k1_instruction`] to sign a single message and build the +//! corresponding secp256k1 instruction. +//! +//! This example has two components: a Solana program, and an RPC client that +//! sends a transaction to call it. The RPC client will sign a single message, +//! and the Solana program will introspect the secp256k1 instruction to verify +//! that the signer matches a known authorized public key. +//! +//! The Solana program. Note that it uses `libsecp256k1` version 0.7.0 to parse +//! the secp256k1 signature to prevent malleability. +//! +//! ```no_run +//! # mod secp256k1_defs { +//! # use solana_program::program_error::ProgramError; +//! # use std::iter::Iterator; +//! # +//! # pub const HASHED_PUBKEY_SERIALIZED_SIZE: usize = 20; +//! # pub const SIGNATURE_SERIALIZED_SIZE: usize = 64; +//! # pub const SIGNATURE_OFFSETS_SERIALIZED_SIZE: usize = 11; +//! # +//! # /// The structure encoded in the secp2256k1 instruction data. +//! # pub struct SecpSignatureOffsets { +//! # pub signature_offset: u16, +//! # pub signature_instruction_index: u8, +//! # pub eth_address_offset: u16, +//! # pub eth_address_instruction_index: u8, +//! # pub message_data_offset: u16, +//! # pub message_data_size: u16, +//! # pub message_instruction_index: u8, +//! # } +//! # +//! # pub fn iter_signature_offsets( +//! # secp256k1_instr_data: &[u8], +//! # ) -> Result + '_, ProgramError> { +//! # // First element is the number of `SecpSignatureOffsets`. +//! # let num_structs = *secp256k1_instr_data +//! # .get(0) +//! # .ok_or(ProgramError::InvalidArgument)?; +//! # +//! # let all_structs_size = SIGNATURE_OFFSETS_SERIALIZED_SIZE * num_structs as usize; +//! # let all_structs_slice = secp256k1_instr_data +//! # .get(1..all_structs_size + 1) +//! # .ok_or(ProgramError::InvalidArgument)?; +//! # +//! # fn decode_u16(chunk: &[u8], index: usize) -> u16 { +//! # u16::from_le_bytes(<[u8; 2]>::try_from(&chunk[index..index + 2]).unwrap()) +//! # } +//! # +//! # Ok(all_structs_slice +//! # .chunks(SIGNATURE_OFFSETS_SERIALIZED_SIZE) +//! # .map(|chunk| SecpSignatureOffsets { +//! # signature_offset: decode_u16(chunk, 0), +//! # signature_instruction_index: chunk[2], +//! # eth_address_offset: decode_u16(chunk, 3), +//! # eth_address_instruction_index: chunk[5], +//! # message_data_offset: decode_u16(chunk, 6), +//! # message_data_size: decode_u16(chunk, 8), +//! # message_instruction_index: chunk[10], +//! # })) +//! # } +//! # } +//! use solana_program::{ +//! account_info::{next_account_info, AccountInfo}, +//! entrypoint::ProgramResult, +//! msg, +//! program_error::ProgramError, +//! secp256k1_program, +//! sysvar, +//! }; +//! +//! /// An Ethereum address corresponding to a secp256k1 secret key that is +//! /// authorized to sign our messages. +//! const AUTHORIZED_ETH_ADDRESS: [u8; 20] = [ +//! 0x18, 0x8a, 0x5c, 0xf2, 0x3b, 0x0e, 0xff, 0xe9, 0xa8, 0xe1, 0x42, 0x64, 0x5b, 0x82, 0x2f, 0x3a, +//! 0x6b, 0x8b, 0x52, 0x35, +//! ]; +//! +//! /// Check the secp256k1 instruction to ensure it was signed by +//! /// `AUTHORIZED_ETH_ADDRESS`s key. +//! /// +//! /// `accounts` is the slice of all accounts passed to the program +//! /// entrypoint. The only account it should contain is the instructions sysvar. +//! fn demo_secp256k1_verify_basic( +//! accounts: &[AccountInfo], +//! ) -> ProgramResult { +//! let account_info_iter = &mut accounts.iter(); +//! +//! // The instructions sysvar gives access to the instructions in the transaction. +//! let instructions_sysvar_account = next_account_info(account_info_iter)?; +//! assert!(sysvar::instructions::check_id( +//! instructions_sysvar_account.key +//! )); +//! +//! // Load the secp256k1 instruction. +//! // `new_secp256k1_instruction` generates an instruction that must be at index 0. +//! let secp256k1_instr = +//! sysvar::instructions::load_instruction_at_checked(0, instructions_sysvar_account)?; +//! +//! // Verify it is a secp256k1 instruction. +//! // This is security-critical - what if the transaction uses an imposter secp256k1 program? +//! assert!(secp256k1_program::check_id(&secp256k1_instr.program_id)); +//! +//! // There must be at least one byte. This is also verified by the runtime, +//! // and doesn't strictly need to be checked. +//! assert!(secp256k1_instr.data.len() > 1); +//! +//! let num_signatures = secp256k1_instr.data[0]; +//! // `new_secp256k1_instruction` generates an instruction that contains one signature. +//! assert_eq!(1, num_signatures); +//! +//! // Load the first and only set of signature offsets. +//! let offsets: secp256k1_defs::SecpSignatureOffsets = +//! secp256k1_defs::iter_signature_offsets(&secp256k1_instr.data)? +//! .next() +//! .ok_or(ProgramError::InvalidArgument)?; +//! +//! // `new_secp256k1_instruction` generates an instruction that only uses instruction index 0. +//! assert_eq!(0, offsets.signature_instruction_index); +//! assert_eq!(0, offsets.eth_address_instruction_index); +//! assert_eq!(0, offsets.message_instruction_index); +//! +//! // Reject high-s value signatures to prevent malleability. +//! // Solana does not do this itself. +//! // This may or may not be necessary depending on use case. +//! { +//! let signature = &secp256k1_instr.data[offsets.signature_offset as usize +//! ..offsets.signature_offset as usize + secp256k1_defs::SIGNATURE_SERIALIZED_SIZE]; +//! let signature = libsecp256k1::Signature::parse_standard_slice(signature) +//! .map_err(|_| ProgramError::InvalidArgument)?; +//! +//! if signature.s.is_high() { +//! msg!("signature with high-s value"); +//! return Err(ProgramError::InvalidArgument); +//! } +//! } +//! +//! // There is likely at least one more verification step a real program needs +//! // to do here to ensure it trusts the secp256k1 instruction, e.g.: +//! // +//! // - verify the tx signer is authorized +//! // - verify the secp256k1 signer is authorized +//! +//! // Here we are checking the secp256k1 pubkey against a known authorized pubkey. +//! let eth_address = &secp256k1_instr.data[offsets.eth_address_offset as usize +//! ..offsets.eth_address_offset as usize + secp256k1_defs::HASHED_PUBKEY_SERIALIZED_SIZE]; +//! +//! if eth_address != AUTHORIZED_ETH_ADDRESS { +//! return Err(ProgramError::InvalidArgument); +//! } +//! +//! Ok(()) +//! } +//! ``` +//! +//! The client program: +//! +//! ```no_run +//! # use solana_sdk::example_mocks::solana_client; +//! use anyhow::Result; +//! use solana_client::rpc_client::RpcClient; +//! use solana_sdk::{ +//! instruction::{AccountMeta, Instruction}, +//! secp256k1_instruction, +//! signature::{Keypair, Signer}, +//! sysvar, +//! transaction::Transaction, +//! }; +//! +//! fn demo_secp256k1_verify_basic( +//! payer_keypair: &Keypair, +//! secp256k1_secret_key: &libsecp256k1::SecretKey, +//! client: &RpcClient, +//! program_keypair: &Keypair, +//! ) -> Result<()> { +//! // Internally to `new_secp256k1_instruction` and +//! // `secp256k_instruction::verify` (the secp256k1 program), this message is +//! // keccak-hashed before signing. +//! let msg = b"hello world"; +//! let secp256k1_instr = secp256k1_instruction::new_secp256k1_instruction(&secp256k1_secret_key, msg); +//! +//! let program_instr = Instruction::new_with_bytes( +//! program_keypair.pubkey(), +//! &[], +//! vec![ +//! AccountMeta::new_readonly(sysvar::instructions::ID, false) +//! ], +//! ); +//! +//! let blockhash = client.get_latest_blockhash()?; +//! let tx = Transaction::new_signed_with_payer( +//! &[secp256k1_instr, program_instr], +//! Some(&payer_keypair.pubkey()), +//! &[payer_keypair], +//! blockhash, +//! ); +//! +//! client.send_and_confirm_transaction(&tx)?; +//! +//! Ok(()) +//! } +//! ``` +//! +//! ## Example: Verifying multiple signatures in one instruction +//! +//! This examples demonstrates manually creating a secp256k1 instruction +//! containing many signatures, and a Solana program that parses them all. This +//! example on its own has no practical purpose. It simply demonstrates advanced +//! use of the secp256k1 program. +//! +//! Recall that the secp256k1 program will accept signatures, messages, and +//! Ethereum addresses that reside in any instruction contained in the same +//! transaction. In the _previous_ example, the Solana program asserted that all +//! signatures, messages, and addresses were stored in the instruction at 0. In +//! this next example the Solana program supports signatures, messages, and +//! addresses stored in any instruction. For simplicity the client still only +//! stores signatures, messages, and addresses in a single instruction, the +//! secp256k1 instruction. The code for storing this data across multiple +//! instructions would be complex, and may not be necessary in practice. +//! +//! This example has two components: a Solana program, and an RPC client that +//! sends a transaction to call it. +//! +//! The Solana program: +//! +//! ```no_run +//! # mod secp256k1_defs { +//! # use solana_program::program_error::ProgramError; +//! # use std::iter::Iterator; +//! # +//! # pub const HASHED_PUBKEY_SERIALIZED_SIZE: usize = 20; +//! # pub const SIGNATURE_SERIALIZED_SIZE: usize = 64; +//! # pub const SIGNATURE_OFFSETS_SERIALIZED_SIZE: usize = 11; +//! # +//! # /// The structure encoded in the secp2256k1 instruction data. +//! # pub struct SecpSignatureOffsets { +//! # pub signature_offset: u16, +//! # pub signature_instruction_index: u8, +//! # pub eth_address_offset: u16, +//! # pub eth_address_instruction_index: u8, +//! # pub message_data_offset: u16, +//! # pub message_data_size: u16, +//! # pub message_instruction_index: u8, +//! # } +//! # +//! # pub fn iter_signature_offsets( +//! # secp256k1_instr_data: &[u8], +//! # ) -> Result + '_, ProgramError> { +//! # // First element is the number of `SecpSignatureOffsets`. +//! # let num_structs = *secp256k1_instr_data +//! # .get(0) +//! # .ok_or(ProgramError::InvalidArgument)?; +//! # +//! # let all_structs_size = SIGNATURE_OFFSETS_SERIALIZED_SIZE * num_structs as usize; +//! # let all_structs_slice = secp256k1_instr_data +//! # .get(1..all_structs_size + 1) +//! # .ok_or(ProgramError::InvalidArgument)?; +//! # +//! # fn decode_u16(chunk: &[u8], index: usize) -> u16 { +//! # u16::from_le_bytes(<[u8; 2]>::try_from(&chunk[index..index + 2]).unwrap()) +//! # } +//! # +//! # Ok(all_structs_slice +//! # .chunks(SIGNATURE_OFFSETS_SERIALIZED_SIZE) +//! # .map(|chunk| SecpSignatureOffsets { +//! # signature_offset: decode_u16(chunk, 0), +//! # signature_instruction_index: chunk[2], +//! # eth_address_offset: decode_u16(chunk, 3), +//! # eth_address_instruction_index: chunk[5], +//! # message_data_offset: decode_u16(chunk, 6), +//! # message_data_size: decode_u16(chunk, 8), +//! # message_instruction_index: chunk[10], +//! # })) +//! # } +//! # } +//! use solana_program::{ +//! account_info::{next_account_info, AccountInfo}, +//! entrypoint::ProgramResult, +//! msg, +//! program_error::ProgramError, +//! secp256k1_program, +//! sysvar, +//! }; +//! +//! /// A struct to hold the values specified in the `SecpSignatureOffsets` struct. +//! struct SecpSignature { +//! signature: [u8; secp256k1_defs::SIGNATURE_SERIALIZED_SIZE], +//! recovery_id: u8, +//! eth_address: [u8; secp256k1_defs::HASHED_PUBKEY_SERIALIZED_SIZE], +//! message: Vec, +//! } +//! +//! /// Load all signatures indicated in the secp256k1 instruction. +//! /// +//! /// This function is quite inefficient for reloading the same instructions +//! /// repeatedly and making copies and allocations. +//! fn load_signatures( +//! secp256k1_instr_data: &[u8], +//! instructions_sysvar_account: &AccountInfo, +//! ) -> Result, ProgramError> { +//! let mut sigs = vec![]; +//! for offsets in secp256k1_defs::iter_signature_offsets(secp256k1_instr_data)? { +//! let signature_instr = sysvar::instructions::load_instruction_at_checked( +//! offsets.signature_instruction_index as usize, +//! instructions_sysvar_account, +//! )?; +//! let eth_address_instr = sysvar::instructions::load_instruction_at_checked( +//! offsets.eth_address_instruction_index as usize, +//! instructions_sysvar_account, +//! )?; +//! let message_instr = sysvar::instructions::load_instruction_at_checked( +//! offsets.message_instruction_index as usize, +//! instructions_sysvar_account, +//! )?; +//! +//! // These indexes must all be valid because the runtime already verified them. +//! let signature = &signature_instr.data[offsets.signature_offset as usize +//! ..offsets.signature_offset as usize + secp256k1_defs::SIGNATURE_SERIALIZED_SIZE]; +//! let recovery_id = signature_instr.data +//! [offsets.signature_offset as usize + secp256k1_defs::SIGNATURE_SERIALIZED_SIZE]; +//! let eth_address = ð_address_instr.data[offsets.eth_address_offset as usize +//! ..offsets.eth_address_offset as usize + secp256k1_defs::HASHED_PUBKEY_SERIALIZED_SIZE]; +//! let message = &message_instr.data[offsets.message_data_offset as usize +//! ..offsets.message_data_offset as usize + offsets.message_data_size as usize]; +//! +//! let signature = +//! <[u8; secp256k1_defs::SIGNATURE_SERIALIZED_SIZE]>::try_from(signature).unwrap(); +//! let eth_address = +//! <[u8; secp256k1_defs::HASHED_PUBKEY_SERIALIZED_SIZE]>::try_from(eth_address).unwrap(); +//! let message = Vec::from(message); +//! +//! sigs.push(SecpSignature { +//! signature, +//! recovery_id, +//! eth_address, +//! message, +//! }) +//! } +//! Ok(sigs) +//! } +//! +//! fn demo_secp256k1_custom_many( +//! accounts: &[AccountInfo], +//! ) -> ProgramResult { +//! let account_info_iter = &mut accounts.iter(); +//! +//! let instructions_sysvar_account = next_account_info(account_info_iter)?; +//! assert!(sysvar::instructions::check_id( +//! instructions_sysvar_account.key +//! )); +//! +//! let secp256k1_instr = +//! sysvar::instructions::get_instruction_relative(-1, instructions_sysvar_account)?; +//! +//! assert!(secp256k1_program::check_id(&secp256k1_instr.program_id)); +//! +//! let signatures = load_signatures(&secp256k1_instr.data, instructions_sysvar_account)?; +//! for (idx, signature_bundle) in signatures.iter().enumerate() { +//! let signature = hex::encode(&signature_bundle.signature); +//! let eth_address = hex::encode(&signature_bundle.eth_address); +//! let message = hex::encode(&signature_bundle.message); +//! msg!("sig {}: {:?}", idx, signature); +//! msg!("recid: {}: {}", idx, signature_bundle.recovery_id); +//! msg!("eth address {}: {}", idx, eth_address); +//! msg!("message {}: {}", idx, message); +//! } +//! +//! Ok(()) +//! } +//! ``` +//! +//! The client program: +//! +//! ```no_run +//! # use solana_sdk::example_mocks::solana_client; +//! use anyhow::Result; +//! use solana_client::rpc_client::RpcClient; +//! use solana_sdk::{ +//! instruction::{AccountMeta, Instruction}, +//! keccak, +//! secp256k1_instruction::{ +//! self, SecpSignatureOffsets, HASHED_PUBKEY_SERIALIZED_SIZE, +//! SIGNATURE_OFFSETS_SERIALIZED_SIZE, SIGNATURE_SERIALIZED_SIZE, +//! }, +//! signature::{Keypair, Signer}, +//! sysvar, +//! transaction::Transaction, +//! }; +//! +//! /// A struct to hold the values specified in the `SecpSignatureOffsets` struct. +//! struct SecpSignature { +//! signature: [u8; SIGNATURE_SERIALIZED_SIZE], +//! recovery_id: u8, +//! eth_address: [u8; HASHED_PUBKEY_SERIALIZED_SIZE], +//! message: Vec, +//! } +//! +//! /// Create the instruction data for a secp256k1 instruction. +//! /// +//! /// `instruction_index` is the index the secp256k1 instruction will appear +//! /// within the transaction. For simplicity, this function only supports packing +//! /// the signatures into the secp256k1 instruction data, and not into any other +//! /// instructions within the transaction. +//! fn make_secp256k1_instruction_data( +//! signatures: &[SecpSignature], +//! instruction_index: u8, +//! ) -> Result> { +//! assert!(signatures.len() <= u8::max_value().into()); +//! +//! // We're going to pack all the signatures into the secp256k1 instruction data. +//! // Before our signatures though is the signature offset structures +//! // the secp256k1 program parses to find those signatures. +//! // This value represents the byte offset where the signatures begin. +//! let data_start = 1 + signatures.len() * SIGNATURE_OFFSETS_SERIALIZED_SIZE; +//! +//! let mut signature_offsets = vec![]; +//! let mut signature_buffer = vec![]; +//! +//! for signature_bundle in signatures { +//! let data_start = data_start +//! .checked_add(signature_buffer.len()) +//! .expect("overflow"); +//! +//! let signature_offset = data_start; +//! let eth_address_offset = data_start +//! .checked_add(SIGNATURE_SERIALIZED_SIZE + 1) +//! .expect("overflow"); +//! let message_data_offset = eth_address_offset +//! .checked_add(HASHED_PUBKEY_SERIALIZED_SIZE) +//! .expect("overflow"); +//! let message_data_size = signature_bundle.message.len(); +//! +//! let signature_offset = u16::try_from(signature_offset)?; +//! let eth_address_offset = u16::try_from(eth_address_offset)?; +//! let message_data_offset = u16::try_from(message_data_offset)?; +//! let message_data_size = u16::try_from(message_data_size)?; +//! +//! signature_offsets.push(SecpSignatureOffsets { +//! signature_offset, +//! signature_instruction_index: instruction_index, +//! eth_address_offset, +//! eth_address_instruction_index: instruction_index, +//! message_data_offset, +//! message_data_size, +//! message_instruction_index: instruction_index, +//! }); +//! +//! signature_buffer.extend(signature_bundle.signature); +//! signature_buffer.push(signature_bundle.recovery_id); +//! signature_buffer.extend(&signature_bundle.eth_address); +//! signature_buffer.extend(&signature_bundle.message); +//! } +//! +//! let mut instr_data = vec![]; +//! instr_data.push(signatures.len() as u8); +//! +//! for offsets in signature_offsets { +//! let offsets = bincode::serialize(&offsets)?; +//! instr_data.extend(offsets); +//! } +//! +//! instr_data.extend(signature_buffer); +//! +//! Ok(instr_data) +//! } +//! +//! fn demo_secp256k1_custom_many( +//! payer_keypair: &Keypair, +//! client: &RpcClient, +//! program_keypair: &Keypair, +//! ) -> Result<()> { +//! // Sign some messages. +//! let mut signatures = vec![]; +//! for idx in 0..2 { +//! let secret_key = libsecp256k1::SecretKey::random(&mut rand::thread_rng()); +//! let message = format!("hello world {}", idx).into_bytes(); +//! let message_hash = { +//! let mut hasher = keccak::Hasher::default(); +//! hasher.hash(&message); +//! hasher.result() +//! }; +//! let secp_message = libsecp256k1::Message::parse(&message_hash.0); +//! let (signature, recovery_id) = libsecp256k1::sign(&secp_message, &secret_key); +//! let signature = signature.serialize(); +//! let recovery_id = recovery_id.serialize(); +//! +//! let public_key = libsecp256k1::PublicKey::from_secret_key(&secret_key); +//! let eth_address = secp256k1_instruction::construct_eth_pubkey(&public_key); +//! +//! signatures.push(SecpSignature { +//! signature, +//! recovery_id, +//! eth_address, +//! message, +//! }); +//! } +//! +//! let secp256k1_instr_data = make_secp256k1_instruction_data(&signatures, 0)?; +//! let secp256k1_instr = Instruction::new_with_bytes( +//! solana_sdk::secp256k1_program::ID, +//! &secp256k1_instr_data, +//! vec![], +//! ); +//! +//! let program_instr = Instruction::new_with_bytes( +//! program_keypair.pubkey(), +//! &[], +//! vec![ +//! AccountMeta::new_readonly(sysvar::instructions::ID, false) +//! ], +//! ); +//! +//! let blockhash = client.get_latest_blockhash()?; +//! let tx = Transaction::new_signed_with_payer( +//! &[secp256k1_instr, program_instr], +//! Some(&payer_keypair.pubkey()), +//! &[payer_keypair], +//! blockhash, +//! ); +//! +//! client.send_and_confirm_transaction(&tx)?; +//! +//! Ok(()) +//! } +//! ``` + #![cfg(feature = "full")] use { @@ -19,17 +806,45 @@ pub const SIGNATURE_SERIALIZED_SIZE: usize = 64; pub const SIGNATURE_OFFSETS_SERIALIZED_SIZE: usize = 11; pub const DATA_START: usize = SIGNATURE_OFFSETS_SERIALIZED_SIZE + 1; +/// Offsets of signature data within a secp256k1 instruction. +/// +/// See the [module documentation][md] for a complete description. +/// +/// [md]: self #[derive(Default, Serialize, Deserialize, Debug)] pub struct SecpSignatureOffsets { - pub signature_offset: u16, // offset to [signature,recovery_id] of 64+1 bytes + /// Offset to 64-byte signature plus 1-byte recovery ID. + pub signature_offset: u16, + /// Within the transaction, the index of the instruction whose instruction data contains the signature. pub signature_instruction_index: u8, - pub eth_address_offset: u16, // offset to eth_address of 20 bytes + /// Offset to 20-byte Ethereum address. + pub eth_address_offset: u16, + /// Within the transaction, the index of the instruction whose instruction data contains the address. pub eth_address_instruction_index: u8, - pub message_data_offset: u16, // offset to start of message data - pub message_data_size: u16, // size of message data + /// Offset to start of message data. + pub message_data_offset: u16, + /// Size of message data in bytes. + pub message_data_size: u16, + /// Within the transaction, the index of the instruction whose instruction data contains the message. pub message_instruction_index: u8, } +/// Sign a message and create a secp256k1 program instruction to verify the signature. +/// +/// This function is suitable for simple uses of the secp256k1 program. +/// More complex uses must encode the secp256k1 instruction data manually. +/// See the [module documentation][md] for examples. +/// +/// [md]: self +/// +/// The instruction generated by this function must be the first instruction +/// included in a transaction or it will not verify. The +/// [`SecpSignatureOffsets`] structure encoded in the instruction data specify +/// the instruction indexes as 0. +/// +/// `message_arr` is hashed with the [`keccak`] hash function prior to signing. +/// +/// [`keccak`]: crate::keccak pub fn new_secp256k1_instruction( priv_key: &libsecp256k1::SecretKey, message_arr: &[u8], @@ -92,6 +907,7 @@ pub fn new_secp256k1_instruction( } } +/// Creates an Ethereum address from a secp256k1 public key. pub fn construct_eth_pubkey( pubkey: &libsecp256k1::PublicKey, ) -> [u8; HASHED_PUBKEY_SERIALIZED_SIZE] { @@ -101,6 +917,19 @@ pub fn construct_eth_pubkey( addr } +/// Verifies the signatures specified in the secp256k1 instruction data. +/// +/// This is same the verification routine executed by the runtime's secp256k1 native program, +/// and is primarily of use to the runtime. +/// +/// `data` is the secp256k1 program's instruction data. `instruction_datas` is +/// the full slice of instruction datas for all instructions in the transaction, +/// including the secp256k1 program's instruction data. +/// +/// `feature_set` is the set of active Solana features. It is used to enable or +/// disable a few minor additional checks that were activated on chain +/// subsequent to the addition of the secp256k1 native program. For many +/// purposes passing `Arc::new` is reasonable. pub fn verify( data: &[u8], instruction_datas: &[&[u8]], @@ -224,6 +1053,7 @@ pub mod test { crate::{ feature_set, hash::Hash, + keccak, secp256k1_instruction::{ new_secp256k1_instruction, SecpSignatureOffsets, SIGNATURE_OFFSETS_SERIALIZED_SIZE, }, @@ -453,4 +1283,74 @@ pub mod test { ); assert!(tx.verify_precompiles(&feature_set).is_err()); } + + // Signatures are malleable. + #[test] + fn test_malleability() { + solana_logger::setup(); + + let secret_key = libsecp256k1::SecretKey::random(&mut thread_rng()); + let public_key = libsecp256k1::PublicKey::from_secret_key(&secret_key); + let eth_address = construct_eth_pubkey(&public_key); + + let message = b"hello"; + let message_hash = { + let mut hasher = keccak::Hasher::default(); + hasher.hash(message); + hasher.result() + }; + + let secp_message = libsecp256k1::Message::parse(&message_hash.0); + let (signature, recovery_id) = libsecp256k1::sign(&secp_message, &secret_key); + + // Flip the S value in the signature to make a different but valid signature. + let mut alt_signature = signature; + alt_signature.s = -alt_signature.s; + let alt_recovery_id = libsecp256k1::RecoveryId::parse(recovery_id.serialize() ^ 1).unwrap(); + + let mut data: Vec = vec![]; + let mut both_offsets = vec![]; + + // Verify both signatures of the same message. + let sigs = [(signature, recovery_id), (alt_signature, alt_recovery_id)]; + for (signature, recovery_id) in sigs.iter() { + let signature_offset = data.len(); + data.extend(signature.serialize()); + data.push(recovery_id.serialize()); + let eth_address_offset = data.len(); + data.extend(ð_address); + let message_data_offset = data.len(); + data.extend(message); + + let data_start = 1 + SIGNATURE_OFFSETS_SERIALIZED_SIZE * 2; + + let offsets = SecpSignatureOffsets { + signature_offset: (signature_offset + data_start) as u16, + signature_instruction_index: 0, + eth_address_offset: (eth_address_offset + data_start) as u16, + eth_address_instruction_index: 0, + message_data_offset: (message_data_offset + data_start) as u16, + message_data_size: message.len() as u16, + message_instruction_index: 0, + }; + + both_offsets.push(offsets); + } + + let mut instruction_data: Vec = vec![2]; + + for offsets in both_offsets { + let offsets = bincode::serialize(&offsets).unwrap(); + instruction_data.extend(offsets); + } + + instruction_data.extend(data); + + verify( + &instruction_data, + &[&instruction_data], + &Arc::new(FeatureSet::all_enabled()), + ) + .unwrap(); + } } From 49ef6bedd78fccc0c2ac88cdbbe9dda84e1f8f21 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Tue, 9 Aug 2022 12:55:16 +0000 Subject: [PATCH 010/465] Add `Signers` impls for `Arc` (backport #27000) (#27021) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add `Signers` impls for `Arc` (#27000) * Add `Signers` impls for `Arc` * Reformat (cherry picked from commit 632752d2f98fa0d8affd06e15046ae4dc00082dc) Co-authored-by: Justin Malčić --- sdk/src/signer/signers.rs | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/sdk/src/signer/signers.rs b/sdk/src/signer/signers.rs index e4b07c8cd8305c..bd25c0d6194337 100644 --- a/sdk/src/signer/signers.rs +++ b/sdk/src/signer/signers.rs @@ -1,7 +1,11 @@ #![cfg(feature = "full")] -use crate::{ - pubkey::Pubkey, - signature::{Signature, Signer, SignerError}, + +use { + crate::{ + pubkey::Pubkey, + signature::{Signature, Signer, SignerError}, + }, + std::sync::Arc, }; /// Convenience trait for working with mixed collections of `Signer`s @@ -59,6 +63,14 @@ impl Signers for Vec> { default_keypairs_impl!(); } +impl Signers for [Arc] { + default_keypairs_impl!(); +} + +impl Signers for Vec> { + default_keypairs_impl!(); +} + impl Signers for Vec<&dyn Signer> { default_keypairs_impl!(); } From 8df62d3ae86d63cb6a4b02dcc3266c899a40e369 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Tue, 9 Aug 2022 14:36:15 +0000 Subject: [PATCH 011/465] Revert "Remove resolver=2 from Cargo.toml and add it to the Windows build" (backport #27011) (#27024) Revert "Remove resolver=2 from Cargo.toml and add it to the Windows build" (#27011) Revert "Remove resolver=2 from Cargo.toml and add it to the Windows build (#26706)" This reverts commit 2f6f5b11dae9389c92125b24b03fe07157aca8ed. (cherry picked from commit ecda3bec018b4e1232fa5a05cf80e7c0238ec51b) Co-authored-by: Ryo Onodera --- Cargo.toml | 3 +++ ci/publish-tarball.sh | 5 ----- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index ef847c1024a17d..9aad90aeb4f175 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -91,3 +91,6 @@ members = [ exclude = [ "programs/bpf", ] + +# This prevents a Travis CI error when building for Windows. +resolver = "2" diff --git a/ci/publish-tarball.sh b/ci/publish-tarball.sh index 3b8b7b10df80f8..ef078f6636c0d5 100755 --- a/ci/publish-tarball.sh +++ b/ci/publish-tarball.sh @@ -58,11 +58,6 @@ windows) git config core.symlinks true find . -type l -delete git reset --hard - # The Windows build fails without resolver = "2", but including it in Cargo.toml causes - # other problems (see PR #26555 and Issue #22603). This adds resolver = "2" to - # Cargo.toml before building. Since the build environment does not persist the changes - # are discarded after the build and do not interfere with non-Windows builds. - echo 'resolver = "2"' >> Cargo.toml ) ;; *) From 4f7d73fbb555d46a51efd0eaaa08b6dc4cb4e5f8 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Tue, 9 Aug 2022 16:12:58 +0000 Subject: [PATCH 012/465] adds number of coding shreds to broadcast metrics (backport #27006) (#27026) adds number of coding shreds to broadcast metrics (#27006) (cherry picked from commit e2a2d271f23d0ddd878da05eff880944f0194575) Co-authored-by: behzad nouri --- core/src/broadcast_stage/standard_broadcast_run.rs | 6 ++++-- ledger/src/shred/stats.rs | 2 ++ 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/core/src/broadcast_stage/standard_broadcast_run.rs b/core/src/broadcast_stage/standard_broadcast_run.rs index 3acb1dcc5784ac..17a3725cd57594 100644 --- a/core/src/broadcast_stage/standard_broadcast_run.rs +++ b/core/src/broadcast_stage/standard_broadcast_run.rs @@ -418,7 +418,8 @@ impl StandardBroadcastRun { self.process_shreds_stats.submit( "broadcast-process-shreds-interrupted-stats", unfinished_slot.slot, - unfinished_slot.next_shred_index, // num_data_shreds, + unfinished_slot.next_shred_index, // num_data_shreds + unfinished_slot.next_code_index, // num_coding_shreds None, // slot_broadcast_time ); } else { @@ -426,7 +427,8 @@ impl StandardBroadcastRun { self.process_shreds_stats.submit( "broadcast-process-shreds-stats", unfinished_slot.slot, - unfinished_slot.next_shred_index, // num_data_shreds, + unfinished_slot.next_shred_index, // num_data_shreds + unfinished_slot.next_code_index, // num_coding_shreds Some(slot_broadcast_time), ); } diff --git a/ledger/src/shred/stats.rs b/ledger/src/shred/stats.rs index 1f261f5c8d842d..c095906583fc39 100644 --- a/ledger/src/shred/stats.rs +++ b/ledger/src/shred/stats.rs @@ -48,6 +48,7 @@ impl ProcessShredsStats { name: &'static str, slot: Slot, num_data_shreds: u32, + num_coding_shreds: u32, slot_broadcast_time: Option, ) { let slot_broadcast_time = slot_broadcast_time @@ -63,6 +64,7 @@ impl ProcessShredsStats { ("shredding_time", self.shredding_elapsed, i64), ("receive_time", self.receive_elapsed, i64), ("num_data_shreds", num_data_shreds, i64), + ("num_coding_shreds", num_coding_shreds, i64), ("slot_broadcast_time", slot_broadcast_time, i64), ( "get_leader_schedule_time", From 0eccc1cc042dd8369af118067bfa10de9271de57 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Tue, 9 Aug 2022 21:13:50 +0000 Subject: [PATCH 013/465] tracer-packet-stats reporting should not reset id (backport #27012) (#27038) tracer-packet-stats reporting should not reset id (#27012) (cherry picked from commit b6d38aad6979e7aca8fd431904af3cb90d87ebec) Co-authored-by: apfitzge --- core/src/tracer_packet_stats.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/core/src/tracer_packet_stats.rs b/core/src/tracer_packet_stats.rs index f384634f7712e7..03068e4ee663d6 100644 --- a/core/src/tracer_packet_stats.rs +++ b/core/src/tracer_packet_stats.rs @@ -199,7 +199,8 @@ impl TracerPacketStats { ) ); - *self = Self::default(); + let id = self.id; + *self = Self::new(id); self.last_report = timestamp(); } } From 90ab9d0cb3b7b8741230c358aff8bba4389c4627 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Tue, 9 Aug 2022 23:07:11 +0000 Subject: [PATCH 014/465] Fix VoteInstruction order (backport #27035) (#27042) Fix VoteInstruction order (#27035) (cherry picked from commit f8d610dbe7d09ac5e80e807d0c0eec53a2a3654c) Co-authored-by: Tyera Eulberg --- programs/vote/src/vote_instruction.rs | 28 +++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/programs/vote/src/vote_instruction.rs b/programs/vote/src/vote_instruction.rs index 18b568376f766b..97829e332fb4f1 100644 --- a/programs/vote/src/vote_instruction.rs +++ b/programs/vote/src/vote_instruction.rs @@ -103,20 +103,6 @@ pub enum VoteInstruction { /// 1. `[SIGNER]` Vote authority UpdateVoteStateSwitch(VoteStateUpdate, Hash), - /// Update the onchain vote state for the signer. - /// - /// # Account references - /// 0. `[Write]` Vote account to vote with - /// 1. `[SIGNER]` Vote authority - CompactUpdateVoteState(CompactVoteStateUpdate), - - /// Update the onchain vote state for the signer along with a switching proof. - /// - /// # Account references - /// 0. `[Write]` Vote account to vote with - /// 1. `[SIGNER]` Vote authority - CompactUpdateVoteStateSwitch(CompactVoteStateUpdate, Hash), - /// Given that the current Voter or Withdrawer authority is a derived key, /// this instruction allows someone who can sign for that derived key's /// base key to authorize a new Voter or Withdrawer for a vote account. @@ -140,6 +126,20 @@ pub enum VoteInstruction { /// 2. `[SIGNER]` Base key of current Voter or Withdrawer authority's derived key /// 3. `[SIGNER]` New vote or withdraw authority AuthorizeCheckedWithSeed(VoteAuthorizeCheckedWithSeedArgs), + + /// Update the onchain vote state for the signer. + /// + /// # Account references + /// 0. `[Write]` Vote account to vote with + /// 1. `[SIGNER]` Vote authority + CompactUpdateVoteState(CompactVoteStateUpdate), + + /// Update the onchain vote state for the signer along with a switching proof. + /// + /// # Account references + /// 0. `[Write]` Vote account to vote with + /// 1. `[SIGNER]` Vote authority + CompactUpdateVoteStateSwitch(CompactVoteStateUpdate, Hash), } fn initialize_account(vote_pubkey: &Pubkey, vote_init: &VoteInit) -> Instruction { From 614cdb9cb49a5de03d5688cb8a42ef9e14aa2746 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Tue, 9 Aug 2022 23:31:37 +0000 Subject: [PATCH 015/465] transaction-status: Correct StakeInstruction::DeactivateDelinquent instruction type name (backport #27034) (#27041) Correct StakeInstruction::DeactivateDelinquent instruction type (cherry picked from commit b0c61e832c25009f351ee4d8432c9a3cabeed7d3) Co-authored-by: Michael Vines --- transaction-status/src/parse_stake.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/transaction-status/src/parse_stake.rs b/transaction-status/src/parse_stake.rs index dfa3e9608a34a7..d7da25b17320be 100644 --- a/transaction-status/src/parse_stake.rs +++ b/transaction-status/src/parse_stake.rs @@ -276,7 +276,7 @@ pub fn parse_stake( StakeInstruction::DeactivateDelinquent => { check_num_stake_accounts(&instruction.accounts, 3)?; Ok(ParsedInstructionEnum { - instruction_type: "deactivateDeactive".to_string(), + instruction_type: "deactivateDelinquent".to_string(), info: json!({ "stakeAccount": account_keys[instruction.accounts[0] as usize].to_string(), "voteAccount": account_keys[instruction.accounts[1] as usize].to_string(), From 2b3719ddbed9ac35a39541414e3c5a2a505d894f Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Wed, 10 Aug 2022 05:10:37 +0000 Subject: [PATCH 016/465] Implement nonblocking version of BlockhashQuery (backport #27040) (#27047) Implement nonblocking version of BlockhashQuery (#27040) (cherry picked from commit b9a5af0a4131d0bec0d433f5464f393c666c97e1) Co-authored-by: hana <81144685+2501babe@users.noreply.github.com> --- client/src/nonblocking/blockhash_query.rs | 433 ++++++++++++++++++++++ client/src/nonblocking/mod.rs | 2 + client/src/nonblocking/nonce_utils.rs | 247 ++++++++++++ client/src/nonce_utils.rs | 207 +---------- 4 files changed, 686 insertions(+), 203 deletions(-) create mode 100644 client/src/nonblocking/blockhash_query.rs create mode 100644 client/src/nonblocking/nonce_utils.rs diff --git a/client/src/nonblocking/blockhash_query.rs b/client/src/nonblocking/blockhash_query.rs new file mode 100644 index 00000000000000..28943ad6a886f1 --- /dev/null +++ b/client/src/nonblocking/blockhash_query.rs @@ -0,0 +1,433 @@ +use { + crate::nonblocking::{nonce_utils, rpc_client::RpcClient}, + clap::ArgMatches, + solana_clap_utils::{ + input_parsers::{pubkey_of, value_of}, + nonce::*, + offline::*, + }, + solana_sdk::{commitment_config::CommitmentConfig, hash::Hash, pubkey::Pubkey}, +}; + +#[derive(Debug, PartialEq, Eq)] +pub enum Source { + Cluster, + NonceAccount(Pubkey), +} + +impl Source { + pub async fn get_blockhash( + &self, + rpc_client: &RpcClient, + commitment: CommitmentConfig, + ) -> Result> { + match self { + Self::Cluster => { + let (blockhash, _) = rpc_client + .get_latest_blockhash_with_commitment(commitment) + .await?; + Ok(blockhash) + } + Self::NonceAccount(ref pubkey) => { + #[allow(clippy::redundant_closure)] + let data = nonce_utils::get_account_with_commitment(rpc_client, pubkey, commitment) + .await + .and_then(|ref a| nonce_utils::data_from_account(a))?; + Ok(data.blockhash()) + } + } + } + + pub async fn is_blockhash_valid( + &self, + rpc_client: &RpcClient, + blockhash: &Hash, + commitment: CommitmentConfig, + ) -> Result> { + Ok(match self { + Self::Cluster => rpc_client.is_blockhash_valid(blockhash, commitment).await?, + Self::NonceAccount(ref pubkey) => { + #[allow(clippy::redundant_closure)] + let _ = nonce_utils::get_account_with_commitment(rpc_client, pubkey, commitment) + .await + .and_then(|ref a| nonce_utils::data_from_account(a))?; + true + } + }) + } +} + +#[derive(Debug, PartialEq, Eq)] +pub enum BlockhashQuery { + Static(Hash), + Validated(Source, Hash), + Rpc(Source), +} + +impl BlockhashQuery { + pub fn new(blockhash: Option, sign_only: bool, nonce_account: Option) -> Self { + let source = nonce_account + .map(Source::NonceAccount) + .unwrap_or(Source::Cluster); + match blockhash { + Some(hash) if sign_only => Self::Static(hash), + Some(hash) if !sign_only => Self::Validated(source, hash), + None if !sign_only => Self::Rpc(source), + _ => panic!("Cannot resolve blockhash"), + } + } + + pub fn new_from_matches(matches: &ArgMatches<'_>) -> Self { + let blockhash = value_of(matches, BLOCKHASH_ARG.name); + let sign_only = matches.is_present(SIGN_ONLY_ARG.name); + let nonce_account = pubkey_of(matches, NONCE_ARG.name); + BlockhashQuery::new(blockhash, sign_only, nonce_account) + } + + pub async fn get_blockhash( + &self, + rpc_client: &RpcClient, + commitment: CommitmentConfig, + ) -> Result> { + match self { + BlockhashQuery::Static(hash) => Ok(*hash), + BlockhashQuery::Validated(source, hash) => { + if !source + .is_blockhash_valid(rpc_client, hash, commitment) + .await? + { + return Err(format!("Hash has expired {:?}", hash).into()); + } + Ok(*hash) + } + BlockhashQuery::Rpc(source) => source.get_blockhash(rpc_client, commitment).await, + } + } +} + +impl Default for BlockhashQuery { + fn default() -> Self { + BlockhashQuery::Rpc(Source::Cluster) + } +} + +#[cfg(test)] +mod tests { + use { + super::*, + crate::{ + nonblocking::blockhash_query, + rpc_request::RpcRequest, + rpc_response::{Response, RpcBlockhash, RpcResponseContext}, + }, + clap::App, + serde_json::{self, json}, + solana_account_decoder::{UiAccount, UiAccountEncoding}, + solana_sdk::{ + account::Account, + fee_calculator::FeeCalculator, + hash::hash, + nonce::{self, state::DurableNonce}, + system_program, + }, + std::collections::HashMap, + }; + + #[test] + fn test_blockhash_query_new_ok() { + let blockhash = hash(&[1u8]); + let nonce_pubkey = Pubkey::new(&[1u8; 32]); + + assert_eq!( + BlockhashQuery::new(Some(blockhash), true, None), + BlockhashQuery::Static(blockhash), + ); + assert_eq!( + BlockhashQuery::new(Some(blockhash), false, None), + BlockhashQuery::Validated(blockhash_query::Source::Cluster, blockhash), + ); + assert_eq!( + BlockhashQuery::new(None, false, None), + BlockhashQuery::Rpc(blockhash_query::Source::Cluster) + ); + + assert_eq!( + BlockhashQuery::new(Some(blockhash), true, Some(nonce_pubkey)), + BlockhashQuery::Static(blockhash), + ); + assert_eq!( + BlockhashQuery::new(Some(blockhash), false, Some(nonce_pubkey)), + BlockhashQuery::Validated( + blockhash_query::Source::NonceAccount(nonce_pubkey), + blockhash + ), + ); + assert_eq!( + BlockhashQuery::new(None, false, Some(nonce_pubkey)), + BlockhashQuery::Rpc(blockhash_query::Source::NonceAccount(nonce_pubkey)), + ); + } + + #[test] + #[should_panic] + fn test_blockhash_query_new_no_nonce_fail() { + BlockhashQuery::new(None, true, None); + } + + #[test] + #[should_panic] + fn test_blockhash_query_new_nonce_fail() { + let nonce_pubkey = Pubkey::new(&[1u8; 32]); + BlockhashQuery::new(None, true, Some(nonce_pubkey)); + } + + #[test] + fn test_blockhash_query_new_from_matches_ok() { + let test_commands = App::new("blockhash_query_test") + .nonce_args(false) + .offline_args(); + let blockhash = hash(&[1u8]); + let blockhash_string = blockhash.to_string(); + + let matches = test_commands.clone().get_matches_from(vec![ + "blockhash_query_test", + "--blockhash", + &blockhash_string, + "--sign-only", + ]); + assert_eq!( + BlockhashQuery::new_from_matches(&matches), + BlockhashQuery::Static(blockhash), + ); + + let matches = test_commands.clone().get_matches_from(vec![ + "blockhash_query_test", + "--blockhash", + &blockhash_string, + ]); + assert_eq!( + BlockhashQuery::new_from_matches(&matches), + BlockhashQuery::Validated(blockhash_query::Source::Cluster, blockhash), + ); + + let matches = test_commands + .clone() + .get_matches_from(vec!["blockhash_query_test"]); + assert_eq!( + BlockhashQuery::new_from_matches(&matches), + BlockhashQuery::Rpc(blockhash_query::Source::Cluster), + ); + + let nonce_pubkey = Pubkey::new(&[1u8; 32]); + let nonce_string = nonce_pubkey.to_string(); + let matches = test_commands.clone().get_matches_from(vec![ + "blockhash_query_test", + "--blockhash", + &blockhash_string, + "--sign-only", + "--nonce", + &nonce_string, + ]); + assert_eq!( + BlockhashQuery::new_from_matches(&matches), + BlockhashQuery::Static(blockhash), + ); + + let matches = test_commands.clone().get_matches_from(vec![ + "blockhash_query_test", + "--blockhash", + &blockhash_string, + "--nonce", + &nonce_string, + ]); + assert_eq!( + BlockhashQuery::new_from_matches(&matches), + BlockhashQuery::Validated( + blockhash_query::Source::NonceAccount(nonce_pubkey), + blockhash + ), + ); + } + + #[test] + #[should_panic] + fn test_blockhash_query_new_from_matches_without_nonce_fail() { + let test_commands = App::new("blockhash_query_test") + .arg(blockhash_arg()) + // We can really only hit this case if the arg requirements + // are broken, so unset the requires() to recreate that condition + .arg(sign_only_arg().requires("")); + + let matches = test_commands + .clone() + .get_matches_from(vec!["blockhash_query_test", "--sign-only"]); + BlockhashQuery::new_from_matches(&matches); + } + + #[test] + #[should_panic] + fn test_blockhash_query_new_from_matches_with_nonce_fail() { + let test_commands = App::new("blockhash_query_test") + .arg(blockhash_arg()) + // We can really only hit this case if the arg requirements + // are broken, so unset the requires() to recreate that condition + .arg(sign_only_arg().requires("")); + let nonce_pubkey = Pubkey::new(&[1u8; 32]); + let nonce_string = nonce_pubkey.to_string(); + + let matches = test_commands.clone().get_matches_from(vec![ + "blockhash_query_test", + "--sign-only", + "--nonce", + &nonce_string, + ]); + BlockhashQuery::new_from_matches(&matches); + } + + #[tokio::test] + async fn test_blockhash_query_get_blockhash() { + let test_blockhash = hash(&[0u8]); + let rpc_blockhash = hash(&[1u8]); + + let get_latest_blockhash_response = json!(Response { + context: RpcResponseContext { + slot: 1, + api_version: None + }, + value: json!(RpcBlockhash { + blockhash: rpc_blockhash.to_string(), + last_valid_block_height: 42, + }), + }); + + let is_blockhash_valid_response = json!(Response { + context: RpcResponseContext { + slot: 1, + api_version: None + }, + value: true + }); + + let mut mocks = HashMap::new(); + mocks.insert( + RpcRequest::GetLatestBlockhash, + get_latest_blockhash_response.clone(), + ); + let rpc_client = RpcClient::new_mock_with_mocks("".to_string(), mocks); + assert_eq!( + BlockhashQuery::default() + .get_blockhash(&rpc_client, CommitmentConfig::default()) + .await + .unwrap(), + rpc_blockhash, + ); + + let mut mocks = HashMap::new(); + mocks.insert( + RpcRequest::GetLatestBlockhash, + get_latest_blockhash_response.clone(), + ); + mocks.insert( + RpcRequest::IsBlockhashValid, + is_blockhash_valid_response.clone(), + ); + let rpc_client = RpcClient::new_mock_with_mocks("".to_string(), mocks); + assert_eq!( + BlockhashQuery::Validated(Source::Cluster, test_blockhash) + .get_blockhash(&rpc_client, CommitmentConfig::default()) + .await + .unwrap(), + test_blockhash, + ); + + let mut mocks = HashMap::new(); + mocks.insert( + RpcRequest::GetLatestBlockhash, + get_latest_blockhash_response.clone(), + ); + let rpc_client = RpcClient::new_mock_with_mocks("".to_string(), mocks); + assert_eq!( + BlockhashQuery::Static(test_blockhash) + .get_blockhash(&rpc_client, CommitmentConfig::default()) + .await + .unwrap(), + test_blockhash, + ); + + let rpc_client = RpcClient::new_mock("fails".to_string()); + assert!(BlockhashQuery::default() + .get_blockhash(&rpc_client, CommitmentConfig::default()) + .await + .is_err()); + + let durable_nonce = DurableNonce::from_blockhash(&Hash::new(&[2u8; 32])); + let nonce_blockhash = *durable_nonce.as_hash(); + let nonce_fee_calc = FeeCalculator::new(4242); + let data = nonce::state::Data { + authority: Pubkey::new(&[3u8; 32]), + durable_nonce, + fee_calculator: nonce_fee_calc, + }; + let nonce_account = Account::new_data_with_space( + 42, + &nonce::state::Versions::new(nonce::State::Initialized(data)), + nonce::State::size(), + &system_program::id(), + ) + .unwrap(); + let nonce_pubkey = Pubkey::new(&[4u8; 32]); + let rpc_nonce_account = UiAccount::encode( + &nonce_pubkey, + &nonce_account, + UiAccountEncoding::Base64, + None, + None, + ); + let get_account_response = json!(Response { + context: RpcResponseContext { + slot: 1, + api_version: None + }, + value: json!(Some(rpc_nonce_account)), + }); + + let mut mocks = HashMap::new(); + mocks.insert(RpcRequest::GetAccountInfo, get_account_response.clone()); + let rpc_client = RpcClient::new_mock_with_mocks("".to_string(), mocks); + assert_eq!( + BlockhashQuery::Rpc(Source::NonceAccount(nonce_pubkey)) + .get_blockhash(&rpc_client, CommitmentConfig::default()) + .await + .unwrap(), + nonce_blockhash, + ); + + let mut mocks = HashMap::new(); + mocks.insert(RpcRequest::GetAccountInfo, get_account_response.clone()); + let rpc_client = RpcClient::new_mock_with_mocks("".to_string(), mocks); + assert_eq!( + BlockhashQuery::Validated(Source::NonceAccount(nonce_pubkey), nonce_blockhash) + .get_blockhash(&rpc_client, CommitmentConfig::default()) + .await + .unwrap(), + nonce_blockhash, + ); + + let mut mocks = HashMap::new(); + mocks.insert(RpcRequest::GetAccountInfo, get_account_response); + let rpc_client = RpcClient::new_mock_with_mocks("".to_string(), mocks); + assert_eq!( + BlockhashQuery::Static(nonce_blockhash) + .get_blockhash(&rpc_client, CommitmentConfig::default()) + .await + .unwrap(), + nonce_blockhash, + ); + + let rpc_client = RpcClient::new_mock("fails".to_string()); + assert!(BlockhashQuery::Rpc(Source::NonceAccount(nonce_pubkey)) + .get_blockhash(&rpc_client, CommitmentConfig::default()) + .await + .is_err()); + } +} diff --git a/client/src/nonblocking/mod.rs b/client/src/nonblocking/mod.rs index 844811c35657a8..7ba96d3994f443 100644 --- a/client/src/nonblocking/mod.rs +++ b/client/src/nonblocking/mod.rs @@ -1,3 +1,5 @@ +pub mod blockhash_query; +pub mod nonce_utils; pub mod pubsub_client; pub mod quic_client; pub mod rpc_client; diff --git a/client/src/nonblocking/nonce_utils.rs b/client/src/nonblocking/nonce_utils.rs new file mode 100644 index 00000000000000..fe0d2216d59fb3 --- /dev/null +++ b/client/src/nonblocking/nonce_utils.rs @@ -0,0 +1,247 @@ +//! Durable transaction nonce helpers. + +use { + crate::nonblocking::rpc_client::RpcClient, + solana_sdk::{ + account::{Account, ReadableAccount}, + account_utils::StateMut, + commitment_config::CommitmentConfig, + hash::Hash, + nonce::{ + state::{Data, Versions}, + State, + }, + pubkey::Pubkey, + system_program, + }, +}; + +#[derive(Debug, thiserror::Error, PartialEq, Eq)] +pub enum Error { + #[error("invalid account owner")] + InvalidAccountOwner, + #[error("invalid account data")] + InvalidAccountData, + #[error("unexpected account data size")] + UnexpectedDataSize, + #[error("provided hash ({provided}) does not match nonce hash ({expected})")] + InvalidHash { provided: Hash, expected: Hash }, + #[error("provided authority ({provided}) does not match nonce authority ({expected})")] + InvalidAuthority { provided: Pubkey, expected: Pubkey }, + #[error("invalid state for requested operation")] + InvalidStateForOperation, + #[error("client error: {0}")] + Client(String), +} + +/// Get a nonce account from the network. +/// +/// This is like [`RpcClient::get_account`] except: +/// +/// - it returns this module's [`Error`] type, +/// - it returns an error if any of the checks from [`account_identity_ok`] fail. +pub async fn get_account(rpc_client: &RpcClient, nonce_pubkey: &Pubkey) -> Result { + get_account_with_commitment(rpc_client, nonce_pubkey, CommitmentConfig::default()).await +} + +/// Get a nonce account from the network. +/// +/// This is like [`RpcClient::get_account_with_commitment`] except: +/// +/// - it returns this module's [`Error`] type, +/// - it returns an error if the account does not exist, +/// - it returns an error if any of the checks from [`account_identity_ok`] fail. +pub async fn get_account_with_commitment( + rpc_client: &RpcClient, + nonce_pubkey: &Pubkey, + commitment: CommitmentConfig, +) -> Result { + rpc_client + .get_account_with_commitment(nonce_pubkey, commitment) + .await + .map_err(|e| Error::Client(format!("{}", e))) + .and_then(|result| { + result + .value + .ok_or_else(|| Error::Client(format!("AccountNotFound: pubkey={}", nonce_pubkey))) + }) + .and_then(|a| account_identity_ok(&a).map(|()| a)) +} + +/// Perform basic checks that an account has nonce-like properties. +/// +/// # Errors +/// +/// Returns [`Error::InvalidAccountOwner`] if the account is not owned by the +/// system program. Returns [`Error::UnexpectedDataSize`] if the account +/// contains no data. +pub fn account_identity_ok(account: &T) -> Result<(), Error> { + if account.owner() != &system_program::id() { + Err(Error::InvalidAccountOwner) + } else if account.data().is_empty() { + Err(Error::UnexpectedDataSize) + } else { + Ok(()) + } +} + +/// Deserialize the state of a durable transaction nonce account. +/// +/// # Errors +/// +/// Returns an error if the account is not owned by the system program or +/// contains no data. +/// +/// # Examples +/// +/// Determine if a nonce account is initialized: +/// +/// ```no_run +/// use solana_client::nonblocking::{ +/// rpc_client::RpcClient, +/// nonce_utils, +/// }; +/// use solana_sdk::{ +/// nonce::State, +/// pubkey::Pubkey, +/// }; +/// use anyhow::Result; +/// +/// futures::executor::block_on(async { +/// async fn is_nonce_initialized( +/// client: &RpcClient, +/// nonce_account_pubkey: &Pubkey, +/// ) -> Result { +/// +/// // Sign the tx with nonce_account's `blockhash` instead of the +/// // network's latest blockhash. +/// let nonce_account = client.get_account(nonce_account_pubkey).await?; +/// let nonce_state = nonce_utils::state_from_account(&nonce_account)?; +/// +/// Ok(!matches!(nonce_state, State::Uninitialized)) +/// } +/// # +/// # let client = RpcClient::new(String::new()); +/// # let nonce_account_pubkey = Pubkey::new_unique(); +/// # is_nonce_initialized(&client, &nonce_account_pubkey).await?; +/// # Ok::<(), anyhow::Error>(()) +/// # })?; +/// # Ok::<(), anyhow::Error>(()) +/// ``` +pub fn state_from_account>( + account: &T, +) -> Result { + account_identity_ok(account)?; + let versions = StateMut::::state(account).map_err(|_| Error::InvalidAccountData)?; + Ok(State::from(versions)) +} + +/// Deserialize the state data of a durable transaction nonce account. +/// +/// # Errors +/// +/// Returns an error if the account is not owned by the system program or +/// contains no data. Returns an error if the account state is uninitialized or +/// fails to deserialize. +/// +/// # Examples +/// +/// Create and sign a transaction with a durable nonce: +/// +/// ```no_run +/// use solana_client::nonblocking::{ +/// rpc_client::RpcClient, +/// nonce_utils, +/// }; +/// use solana_sdk::{ +/// message::Message, +/// pubkey::Pubkey, +/// signature::{Keypair, Signer}, +/// system_instruction, +/// transaction::Transaction, +/// }; +/// use std::path::Path; +/// use anyhow::Result; +/// # use anyhow::anyhow; +/// +/// futures::executor::block_on(async { +/// async fn create_transfer_tx_with_nonce( +/// client: &RpcClient, +/// nonce_account_pubkey: &Pubkey, +/// payer: &Keypair, +/// receiver: &Pubkey, +/// amount: u64, +/// tx_path: &Path, +/// ) -> Result<()> { +/// +/// let instr_transfer = system_instruction::transfer( +/// &payer.pubkey(), +/// receiver, +/// amount, +/// ); +/// +/// // In this example, `payer` is `nonce_account_pubkey`'s authority +/// let instr_advance_nonce_account = system_instruction::advance_nonce_account( +/// nonce_account_pubkey, +/// &payer.pubkey(), +/// ); +/// +/// // The `advance_nonce_account` instruction must be the first issued in +/// // the transaction. +/// let message = Message::new( +/// &[ +/// instr_advance_nonce_account, +/// instr_transfer +/// ], +/// Some(&payer.pubkey()), +/// ); +/// +/// let mut tx = Transaction::new_unsigned(message); +/// +/// // Sign the tx with nonce_account's `blockhash` instead of the +/// // network's latest blockhash. +/// let nonce_account = client.get_account(nonce_account_pubkey).await?; +/// let nonce_data = nonce_utils::data_from_account(&nonce_account)?; +/// let blockhash = nonce_data.blockhash(); +/// +/// tx.try_sign(&[payer], blockhash)?; +/// +/// // Save the signed transaction locally for later submission. +/// save_tx_to_file(&tx_path, &tx)?; +/// +/// Ok(()) +/// } +/// # +/// # fn save_tx_to_file(path: &Path, tx: &Transaction) -> Result<()> { +/// # Ok(()) +/// # } +/// # +/// # let client = RpcClient::new(String::new()); +/// # let nonce_account_pubkey = Pubkey::new_unique(); +/// # let payer = Keypair::new(); +/// # let receiver = Pubkey::new_unique(); +/// # create_transfer_tx_with_nonce(&client, &nonce_account_pubkey, &payer, &receiver, 1024, Path::new("new_tx")).await?; +/// # +/// # Ok::<(), anyhow::Error>(()) +/// # })?; +/// # Ok::<(), anyhow::Error>(()) +/// ``` +pub fn data_from_account>( + account: &T, +) -> Result { + account_identity_ok(account)?; + state_from_account(account).and_then(|ref s| data_from_state(s).map(|d| d.clone())) +} + +/// Get the nonce data from its [`State`] value. +/// +/// # Errors +/// +/// Returns [`Error::InvalidStateForOperation`] if `state` is +/// [`State::Uninitialized`]. +pub fn data_from_state(state: &State) -> Result<&Data, Error> { + match state { + State::Uninitialized => Err(Error::InvalidStateForOperation), + State::Initialized(data) => Ok(data), + } +} diff --git a/client/src/nonce_utils.rs b/client/src/nonce_utils.rs index 9d797771559cd8..b00ef416c5b27f 100644 --- a/client/src/nonce_utils.rs +++ b/client/src/nonce_utils.rs @@ -1,39 +1,13 @@ //! Durable transaction nonce helpers. +pub use crate::nonblocking::nonce_utils::{ + account_identity_ok, data_from_account, data_from_state, state_from_account, Error, +}; use { crate::rpc_client::RpcClient, - solana_sdk::{ - account::{Account, ReadableAccount}, - account_utils::StateMut, - commitment_config::CommitmentConfig, - hash::Hash, - nonce::{ - state::{Data, Versions}, - State, - }, - pubkey::Pubkey, - system_program, - }, + solana_sdk::{account::Account, commitment_config::CommitmentConfig, pubkey::Pubkey}, }; -#[derive(Debug, thiserror::Error, PartialEq, Eq)] -pub enum Error { - #[error("invalid account owner")] - InvalidAccountOwner, - #[error("invalid account data")] - InvalidAccountData, - #[error("unexpected account data size")] - UnexpectedDataSize, - #[error("provided hash ({provided}) does not match nonce hash ({expected})")] - InvalidHash { provided: Hash, expected: Hash }, - #[error("provided authority ({provided}) does not match nonce authority ({expected})")] - InvalidAuthority { provided: Pubkey, expected: Pubkey }, - #[error("invalid state for requested operation")] - InvalidStateForOperation, - #[error("client error: {0}")] - Client(String), -} - /// Get a nonce account from the network. /// /// This is like [`RpcClient::get_account`] except: @@ -66,176 +40,3 @@ pub fn get_account_with_commitment( }) .and_then(|a| account_identity_ok(&a).map(|()| a)) } - -/// Perform basic checks that an account has nonce-like properties. -/// -/// # Errors -/// -/// Returns [`Error::InvalidAccountOwner`] if the account is not owned by the -/// system program. Returns [`Error::UnexpectedDataSize`] if the account -/// contains no data. -pub fn account_identity_ok(account: &T) -> Result<(), Error> { - if account.owner() != &system_program::id() { - Err(Error::InvalidAccountOwner) - } else if account.data().is_empty() { - Err(Error::UnexpectedDataSize) - } else { - Ok(()) - } -} - -/// Deserialize the state of a durable transaction nonce account. -/// -/// # Errors -/// -/// Returns an error if the account is not owned by the system program or -/// contains no data. -/// -/// # Examples -/// -/// Determine if a nonce account is initialized: -/// -/// ```no_run -/// use solana_client::{ -/// rpc_client::RpcClient, -/// nonce_utils, -/// }; -/// use solana_sdk::{ -/// nonce::State, -/// pubkey::Pubkey, -/// }; -/// use anyhow::Result; -/// -/// fn is_nonce_initialized( -/// client: &RpcClient, -/// nonce_account_pubkey: &Pubkey, -/// ) -> Result { -/// -/// // Sign the tx with nonce_account's `blockhash` instead of the -/// // network's latest blockhash. -/// let nonce_account = client.get_account(nonce_account_pubkey)?; -/// let nonce_state = nonce_utils::state_from_account(&nonce_account)?; -/// -/// Ok(!matches!(nonce_state, State::Uninitialized)) -/// } -/// # -/// # let client = RpcClient::new(String::new()); -/// # let nonce_account_pubkey = Pubkey::new_unique(); -/// # is_nonce_initialized(&client, &nonce_account_pubkey)?; -/// # -/// # Ok::<(), anyhow::Error>(()) -/// ``` -pub fn state_from_account>( - account: &T, -) -> Result { - account_identity_ok(account)?; - let versions = StateMut::::state(account).map_err(|_| Error::InvalidAccountData)?; - Ok(State::from(versions)) -} - -/// Deserialize the state data of a durable transaction nonce account. -/// -/// # Errors -/// -/// Returns an error if the account is not owned by the system program or -/// contains no data. Returns an error if the account state is uninitialized or -/// fails to deserialize. -/// -/// # Examples -/// -/// Create and sign a transaction with a durable nonce: -/// -/// ```no_run -/// use solana_client::{ -/// rpc_client::RpcClient, -/// nonce_utils, -/// }; -/// use solana_sdk::{ -/// message::Message, -/// pubkey::Pubkey, -/// signature::{Keypair, Signer}, -/// system_instruction, -/// transaction::Transaction, -/// }; -/// use std::path::Path; -/// use anyhow::Result; -/// # use anyhow::anyhow; -/// -/// fn create_transfer_tx_with_nonce( -/// client: &RpcClient, -/// nonce_account_pubkey: &Pubkey, -/// payer: &Keypair, -/// receiver: &Pubkey, -/// amount: u64, -/// tx_path: &Path, -/// ) -> Result<()> { -/// -/// let instr_transfer = system_instruction::transfer( -/// &payer.pubkey(), -/// receiver, -/// amount, -/// ); -/// -/// // In this example, `payer` is `nonce_account_pubkey`'s authority -/// let instr_advance_nonce_account = system_instruction::advance_nonce_account( -/// nonce_account_pubkey, -/// &payer.pubkey(), -/// ); -/// -/// // The `advance_nonce_account` instruction must be the first issued in -/// // the transaction. -/// let message = Message::new( -/// &[ -/// instr_advance_nonce_account, -/// instr_transfer -/// ], -/// Some(&payer.pubkey()), -/// ); -/// -/// let mut tx = Transaction::new_unsigned(message); -/// -/// // Sign the tx with nonce_account's `blockhash` instead of the -/// // network's latest blockhash. -/// let nonce_account = client.get_account(nonce_account_pubkey)?; -/// let nonce_data = nonce_utils::data_from_account(&nonce_account)?; -/// let blockhash = nonce_data.blockhash(); -/// -/// tx.try_sign(&[payer], blockhash)?; -/// -/// // Save the signed transaction locally for later submission. -/// save_tx_to_file(&tx_path, &tx)?; -/// -/// Ok(()) -/// } -/// # -/// # fn save_tx_to_file(path: &Path, tx: &Transaction) -> Result<()> { -/// # Ok(()) -/// # } -/// # -/// # let client = RpcClient::new(String::new()); -/// # let nonce_account_pubkey = Pubkey::new_unique(); -/// # let payer = Keypair::new(); -/// # let receiver = Pubkey::new_unique(); -/// # create_transfer_tx_with_nonce(&client, &nonce_account_pubkey, &payer, &receiver, 1024, Path::new("new_tx"))?; -/// # -/// # Ok::<(), anyhow::Error>(()) -/// ``` -pub fn data_from_account>( - account: &T, -) -> Result { - account_identity_ok(account)?; - state_from_account(account).and_then(|ref s| data_from_state(s).map(|d| d.clone())) -} - -/// Get the nonce data from its [`State`] value. -/// -/// # Errors -/// -/// Returns [`Error::InvalidStateForOperation`] if `state` is -/// [`State::Uninitialized`]. -pub fn data_from_state(state: &State) -> Result<&Data, Error> { - match state { - State::Uninitialized => Err(Error::InvalidStateForOperation), - State::Initialized(data) => Ok(data), - } -} From f2e5c6d3b141eb30026d95d8b3028ac39d01c602 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Wed, 10 Aug 2022 17:53:44 +0000 Subject: [PATCH 017/465] Fix quic client on TestValidator, alternative (backport #27046) (#27053) Fix quic client on TestValidator, alternative (#27046) Add new method to enable custom offset (cherry picked from commit 45c0da859783f23820724418066784a727f35b82) Co-authored-by: Tyera Eulberg --- gossip/src/cluster_info.rs | 17 +++++++-------- net-utils/src/lib.rs | 42 ++++++++++++++++++++++++-------------- 2 files changed, 36 insertions(+), 23 deletions(-) diff --git a/gossip/src/cluster_info.rs b/gossip/src/cluster_info.rs index 4994a82309447e..c0a8712f783ba8 100644 --- a/gossip/src/cluster_info.rs +++ b/gossip/src/cluster_info.rs @@ -48,7 +48,7 @@ use { solana_ledger::shred::Shred, solana_measure::measure::Measure, solana_net_utils::{ - bind_common, bind_common_in_range, bind_in_range, bind_two_consecutive_in_range, + bind_common, bind_common_in_range, bind_in_range, bind_two_in_range_with_offset, find_available_port_in_range, multi_bind_in_range, PortRange, }, solana_perf::{ @@ -2746,20 +2746,21 @@ impl Node { } pub fn new_localhost_with_pubkey(pubkey: &Pubkey) -> Self { let bind_ip_addr = IpAddr::V4(Ipv4Addr::new(0, 0, 0, 0)); + let port_range = (1024, 65535); let ((_tpu_port, tpu), (_tpu_quic_port, tpu_quic)) = - bind_two_consecutive_in_range(bind_ip_addr, (1024, 65535)).unwrap(); + bind_two_in_range_with_offset(bind_ip_addr, port_range, QUIC_PORT_OFFSET).unwrap(); let (gossip_port, (gossip, ip_echo)) = - bind_common_in_range(bind_ip_addr, (1024, 65535)).unwrap(); + bind_common_in_range(bind_ip_addr, port_range).unwrap(); let gossip_addr = SocketAddr::new(IpAddr::V4(Ipv4Addr::new(127, 0, 0, 1)), gossip_port); let tvu = UdpSocket::bind("127.0.0.1:0").unwrap(); let tvu_forwards = UdpSocket::bind("127.0.0.1:0").unwrap(); let ((_tpu_forwards_port, tpu_forwards), (_tpu_forwards_quic_port, tpu_forwards_quic)) = - bind_two_consecutive_in_range(bind_ip_addr, (1024, 65535)).unwrap(); + bind_two_in_range_with_offset(bind_ip_addr, port_range, QUIC_PORT_OFFSET).unwrap(); let tpu_vote = UdpSocket::bind("127.0.0.1:0").unwrap(); let repair = UdpSocket::bind("127.0.0.1:0").unwrap(); - let rpc_port = find_available_port_in_range(bind_ip_addr, (1024, 65535)).unwrap(); + let rpc_port = find_available_port_in_range(bind_ip_addr, port_range).unwrap(); let rpc_addr = SocketAddr::new(IpAddr::V4(Ipv4Addr::new(127, 0, 0, 1)), rpc_port); - let rpc_pubsub_port = find_available_port_in_range(bind_ip_addr, (1024, 65535)).unwrap(); + let rpc_pubsub_port = find_available_port_in_range(bind_ip_addr, port_range).unwrap(); let rpc_pubsub_addr = SocketAddr::new(IpAddr::V4(Ipv4Addr::new(127, 0, 0, 1)), rpc_pubsub_port); @@ -2835,9 +2836,9 @@ impl Node { let (tvu_port, tvu) = Self::bind(bind_ip_addr, port_range); let (tvu_forwards_port, tvu_forwards) = Self::bind(bind_ip_addr, port_range); let ((tpu_port, tpu), (_tpu_quic_port, tpu_quic)) = - bind_two_consecutive_in_range(bind_ip_addr, port_range).unwrap(); + bind_two_in_range_with_offset(bind_ip_addr, port_range, QUIC_PORT_OFFSET).unwrap(); let ((tpu_forwards_port, tpu_forwards), (_tpu_forwards_quic_port, tpu_forwards_quic)) = - bind_two_consecutive_in_range(bind_ip_addr, port_range).unwrap(); + bind_two_in_range_with_offset(bind_ip_addr, port_range, QUIC_PORT_OFFSET).unwrap(); let (tpu_vote_port, tpu_vote) = Self::bind(bind_ip_addr, port_range); let (_, retransmit_socket) = Self::bind(bind_ip_addr, port_range); let (repair_port, repair) = Self::bind(bind_ip_addr, port_range); diff --git a/net-utils/src/lib.rs b/net-utils/src/lib.rs index 9f60bb9b5749b2..ecee6d98f6f582 100644 --- a/net-utils/src/lib.rs +++ b/net-utils/src/lib.rs @@ -519,31 +519,34 @@ pub fn bind_common( .and_then(|_| TcpListener::bind(&addr).map(|listener| (sock.into(), listener))) } -pub fn bind_two_consecutive_in_range( +pub fn bind_two_in_range_with_offset( ip_addr: IpAddr, range: PortRange, + offset: u16, ) -> io::Result<((u16, UdpSocket), (u16, UdpSocket))> { - let mut first: Option = None; + if range.1.saturating_sub(range.0) < offset { + return Err(io::Error::new( + io::ErrorKind::Other, + "range too small to find two ports with the correct offset".to_string(), + )); + } for port in range.0..range.1 { - if let Ok(bind) = bind_to(ip_addr, port, false) { - match first { - Some(first_bind) => { + if let Ok(first_bind) = bind_to(ip_addr, port, false) { + if range.1.saturating_sub(port) >= offset { + if let Ok(second_bind) = bind_to(ip_addr, port + offset, false) { return Ok(( (first_bind.local_addr().unwrap().port(), first_bind), - (bind.local_addr().unwrap().port(), bind), + (second_bind.local_addr().unwrap().port(), second_bind), )); } - None => { - first = Some(bind); - } + } else { + break; } - } else { - first = None; } } Err(io::Error::new( io::ErrorKind::Other, - "couldn't find two consecutive ports in range".to_string(), + "couldn't find two ports with the correct offset in range".to_string(), )) } @@ -818,12 +821,21 @@ mod tests { } #[test] - fn test_bind_two_consecutive_in_range() { + fn test_bind_two_in_range_with_offset() { solana_logger::setup(); let ip_addr = IpAddr::V4(Ipv4Addr::new(0, 0, 0, 0)); - if let Ok(((port1, _), (port2, _))) = bind_two_consecutive_in_range(ip_addr, (1024, 65535)) + let offset = 6; + if let Ok(((port1, _), (port2, _))) = + bind_two_in_range_with_offset(ip_addr, (1024, 65535), offset) + { + assert!(port2 == port1 + offset); + } + let offset = 42; + if let Ok(((port1, _), (port2, _))) = + bind_two_in_range_with_offset(ip_addr, (1024, 65535), offset) { - assert!(port2 == port1 + 1); + assert!(port2 == port1 + offset); } + assert!(bind_two_in_range_with_offset(ip_addr, (1024, 1044), offset).is_err()); } } From 547c0774e4b9d7f25c43ecae9247888b711d7050 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Wed, 10 Aug 2022 19:32:21 +0000 Subject: [PATCH 018/465] ancestor hashes socket ping/pong support (backport #26866) (#27048) ancestor hashes socket ping/pong support (#26866) (cherry picked from commit 370de8129eb22c5e111a8102e5789fcc0b983ca1) Co-authored-by: Jeff Biseda --- core/src/ancestor_hashes_service.rs | 204 +++++++++++++++++--------- core/src/serve_repair.rs | 214 ++++++++++++++++------------ sdk/src/feature_set.rs | 5 + 3 files changed, 267 insertions(+), 156 deletions(-) diff --git a/core/src/ancestor_hashes_service.rs b/core/src/ancestor_hashes_service.rs index cc142168cbb260..330ebb072abc10 100644 --- a/core/src/ancestor_hashes_service.rs +++ b/core/src/ancestor_hashes_service.rs @@ -4,29 +4,34 @@ use { duplicate_repair_status::{DeadSlotAncestorRequestStatus, DuplicateAncestorDecision}, outstanding_requests::OutstandingRequests, packet_threshold::DynamicPacketToProcessThreshold, - repair_response::{self}, repair_service::{DuplicateSlotsResetSender, RepairInfo, RepairStatsGroup}, replay_stage::DUPLICATE_THRESHOLD, result::{Error, Result}, - serve_repair::{AncestorHashesRepairType, ServeRepair}, + serve_repair::{ + AncestorHashesRepairType, AncestorHashesResponse, RepairProtocol, ServeRepair, + }, }, + bincode::serialize, crossbeam_channel::{unbounded, Receiver, Sender}, dashmap::{mapref::entry::Entry::Occupied, DashMap}, - solana_ledger::{blockstore::Blockstore, shred::SIZE_OF_NONCE}, + solana_gossip::{cluster_info::ClusterInfo, ping_pong::Pong}, + solana_ledger::blockstore::Blockstore, solana_perf::{ - packet::{Packet, PacketBatch}, + packet::{deserialize_from_with_limit, Packet, PacketBatch}, recycler::Recycler, }, solana_runtime::bank::Bank, solana_sdk::{ clock::{Slot, SLOT_MS}, pubkey::Pubkey, + signature::Signable, signer::keypair::Keypair, timing::timestamp, }, solana_streamer::streamer::{self, PacketBatchReceiver, StreamerReceiveStats}, std::{ collections::HashSet, + io::{Cursor, Read}, net::UdpSocket, sync::{ atomic::{AtomicBool, Ordering}, @@ -62,27 +67,25 @@ type RetryableSlotsReceiver = Receiver; type OutstandingAncestorHashesRepairs = OutstandingRequests; #[derive(Default)] -pub struct AncestorHashesResponsesStats { - pub total_packets: usize, - pub dropped_packets: usize, - pub invalid_packets: usize, - pub processed: usize, +struct AncestorHashesResponsesStats { + total_packets: usize, + processed: usize, + dropped_packets: usize, + invalid_packets: usize, + ping_count: usize, + ping_err_verify_count: usize, } impl AncestorHashesResponsesStats { fn report(&mut self) { - inc_new_counter_info!( - "ancestor_hashes_responses-total_packets", - self.total_packets - ); - inc_new_counter_info!("ancestor_hashes_responses-processed", self.processed); - inc_new_counter_info!( - "ancestor_hashes_responses-dropped_packets", - self.dropped_packets - ); - inc_new_counter_info!( - "ancestor_hashes_responses-invalid_packets", - self.invalid_packets + datapoint_info!( + "ancestor_hashes_responses", + ("total_packets", self.total_packets, i64), + ("processed", self.processed, i64), + ("dropped_packets", self.dropped_packets, i64), + ("invalid_packets", self.invalid_packets, i64), + ("ping_count", self.ping_count, i64), + ("ping_err_verify_count", self.ping_err_verify_count, i64), ); *self = AncestorHashesResponsesStats::default(); } @@ -174,6 +177,8 @@ impl AncestorHashesService { exit.clone(), repair_info.duplicate_slots_reset_sender.clone(), retryable_slots_sender, + repair_info.cluster_info.clone(), + ancestor_hashes_request_socket.clone(), ); // Generate ancestor requests for dead slots that are repairable @@ -206,6 +211,8 @@ impl AncestorHashesService { exit: Arc, duplicate_slots_reset_sender: DuplicateSlotsResetSender, retryable_slots_sender: RetryableSlotsSender, + cluster_info: Arc, + ancestor_socket: Arc, ) -> JoinHandle<()> { Builder::new() .name("solana-ancestor-hashes-responses-service".to_string()) @@ -214,6 +221,7 @@ impl AncestorHashesService { let mut stats = AncestorHashesResponsesStats::default(); let mut packet_threshold = DynamicPacketToProcessThreshold::default(); loop { + let keypair = cluster_info.keypair().clone(); let result = Self::process_new_packets_from_channel( &ancestor_hashes_request_statuses, &response_receiver, @@ -223,6 +231,8 @@ impl AncestorHashesService { &mut packet_threshold, &duplicate_slots_reset_sender, &retryable_slots_sender, + &keypair, + &ancestor_socket, ); match result { Err(Error::RecvTimeout(_)) | Ok(_) => {} @@ -241,6 +251,7 @@ impl AncestorHashesService { } /// Process messages from the network + #[allow(clippy::too_many_arguments)] fn process_new_packets_from_channel( ancestor_hashes_request_statuses: &DashMap, response_receiver: &PacketBatchReceiver, @@ -250,6 +261,8 @@ impl AncestorHashesService { packet_threshold: &mut DynamicPacketToProcessThreshold, duplicate_slots_reset_sender: &DuplicateSlotsResetSender, retryable_slots_sender: &RetryableSlotsSender, + keypair: &Keypair, + ancestor_socket: &UdpSocket, ) -> Result<()> { let timeout = Duration::new(1, 0); let mut packet_batches = vec![response_receiver.recv_timeout(timeout)?]; @@ -278,6 +291,8 @@ impl AncestorHashesService { blockstore, duplicate_slots_reset_sender, retryable_slots_sender, + keypair, + ancestor_socket, ); } packet_threshold.update(total_packets, timer.elapsed()); @@ -292,6 +307,8 @@ impl AncestorHashesService { blockstore: &Blockstore, duplicate_slots_reset_sender: &DuplicateSlotsResetSender, retryable_slots_sender: &RetryableSlotsSender, + keypair: &Keypair, + ancestor_socket: &UdpSocket, ) { packet_batch.iter().for_each(|packet| { let decision = Self::verify_and_process_ancestor_response( @@ -300,6 +317,8 @@ impl AncestorHashesService { stats, outstanding_requests, blockstore, + keypair, + ancestor_socket, ); if let Some((slot, decision)) = decision { Self::handle_ancestor_request_decision( @@ -321,55 +340,104 @@ impl AncestorHashesService { stats: &mut AncestorHashesResponsesStats, outstanding_requests: &RwLock, blockstore: &Blockstore, + keypair: &Keypair, + ancestor_socket: &UdpSocket, ) -> Option<(Slot, DuplicateAncestorDecision)> { let from_addr = packet.meta.socket_addr(); - let ancestor_hashes_response = packet - .deserialize_slice(..packet.meta.size.saturating_sub(SIZE_OF_NONCE)) - .ok()?; - - // Verify the response - let request_slot = repair_response::nonce(packet).and_then(|nonce| { - outstanding_requests.write().unwrap().register_response( - nonce, - &ancestor_hashes_response, - timestamp(), - // If the response is valid, return the slot the request - // was for - |ancestor_hashes_request| ancestor_hashes_request.0, - ) - }); + let packet_data = match packet.data(..) { + Some(data) => data, + None => { + stats.invalid_packets += 1; + return None; + } + }; + let mut cursor = Cursor::new(packet_data); + let response = match deserialize_from_with_limit(&mut cursor) { + Ok(response) => response, + Err(_) => { + stats.invalid_packets += 1; + return None; + } + }; - if request_slot.is_none() { - stats.invalid_packets += 1; - return None; - } + match response { + AncestorHashesResponse::Hashes(ref hashes) => { + // deserialize trailing nonce + let nonce = match deserialize_from_with_limit(&mut cursor) { + Ok(nonce) => nonce, + Err(_) => { + stats.invalid_packets += 1; + return None; + } + }; - // If was a valid response, there must be a valid `request_slot` - let request_slot = request_slot.unwrap(); - stats.processed += 1; + // verify that packet does not contain extraneous data + if cursor.bytes().next().is_some() { + stats.invalid_packets += 1; + return None; + } - if let Occupied(mut ancestor_hashes_status_ref) = - ancestor_hashes_request_statuses.entry(request_slot) - { - let decision = ancestor_hashes_status_ref.get_mut().add_response( - &from_addr, - ancestor_hashes_response.into_slot_hashes(), - blockstore, - ); - if decision.is_some() { - // Once a request is completed, remove it from the map so that new - // requests for the same slot can be made again if necessary. It's - // important to hold the `write` lock here via - // `ancestor_hashes_status_ref` so that we don't race with deletion + - // insertion from the `t_ancestor_requests` thread, which may - // 1) Remove expired statuses from `ancestor_hashes_request_statuses` - // 2) Insert another new one via `manage_ancestor_requests()`. - // In which case we wouldn't want to delete the newly inserted entry here. - ancestor_hashes_status_ref.remove(); + let request_slot = outstanding_requests.write().unwrap().register_response( + nonce, + &response, + timestamp(), + // If the response is valid, return the slot the request + // was for + |ancestor_hashes_request| ancestor_hashes_request.0, + ); + + if request_slot.is_none() { + stats.invalid_packets += 1; + return None; + } + + // If was a valid response, there must be a valid `request_slot` + let request_slot = request_slot.unwrap(); + stats.processed += 1; + + if let Occupied(mut ancestor_hashes_status_ref) = + ancestor_hashes_request_statuses.entry(request_slot) + { + let decision = ancestor_hashes_status_ref.get_mut().add_response( + &from_addr, + hashes.clone(), + blockstore, + ); + if decision.is_some() { + // Once a request is completed, remove it from the map so that new + // requests for the same slot can be made again if necessary. It's + // important to hold the `write` lock here via + // `ancestor_hashes_status_ref` so that we don't race with deletion + + // insertion from the `t_ancestor_requests` thread, which may + // 1) Remove expired statuses from `ancestor_hashes_request_statuses` + // 2) Insert another new one via `manage_ancestor_requests()`. + // In which case we wouldn't want to delete the newly inserted entry here. + ancestor_hashes_status_ref.remove(); + } + decision.map(|decision| (request_slot, decision)) + } else { + None + } + } + AncestorHashesResponse::Ping(ping) => { + // verify that packet does not contain extraneous data + if cursor.bytes().next().is_some() { + stats.invalid_packets += 1; + return None; + } + if ping.verify() { + stats.ping_count += 1; + if let Ok(pong) = Pong::new(&ping, keypair) { + let pong = RepairProtocol::Pong(pong); + if let Ok(pong_bytes) = serialize(&pong) { + let _ignore = ancestor_socket.send_to(&pong_bytes[..], from_addr); + } + } + } else { + stats.ping_err_verify_count += 1; + } + None } - decision.map(|decision| (request_slot, decision)) - } else { - None } } @@ -1145,6 +1213,8 @@ mod test { &mut AncestorHashesResponsesStats::default(), &outstanding_requests, &requester_blockstore, + &requester_cluster_info.keypair(), + &ancestor_hashes_request_socket, ) .unwrap(); @@ -1385,7 +1455,9 @@ mod test { let ManageAncestorHashesState { ancestor_hashes_request_statuses, + ancestor_hashes_request_socket, outstanding_requests, + repair_info, .. } = ManageAncestorHashesState::new(bank_forks); @@ -1402,6 +1474,8 @@ mod test { &mut AncestorHashesResponsesStats::default(), &outstanding_requests, &blockstore, + &repair_info.cluster_info.keypair(), + &ancestor_hashes_request_socket, ) .is_none()); } @@ -1506,6 +1580,8 @@ mod test { &mut AncestorHashesResponsesStats::default(), &outstanding_requests, &requester_blockstore, + &requester_cluster_info.keypair(), + &ancestor_hashes_request_socket, ) .unwrap(); diff --git a/core/src/serve_repair.rs b/core/src/serve_repair.rs index a9cc6cd0cb15f8..2f755ebb17f4bb 100644 --- a/core/src/serve_repair.rs +++ b/core/src/serve_repair.rs @@ -32,7 +32,7 @@ use { solana_runtime::{bank::Bank, bank_forks::BankForks}, solana_sdk::{ clock::Slot, - feature_set::sign_repair_requests, + feature_set::{check_ping_ancestor_requests, sign_repair_requests}, hash::{Hash, HASH_BYTES}, packet::PACKET_DATA_SIZE, pubkey::{Pubkey, PUBKEY_BYTES}, @@ -43,7 +43,6 @@ use { }, solana_streamer::{ sendmmsg::{batch_send, SendPktsError}, - socket::SocketAddrSpace, streamer::{PacketBatchReceiver, PacketBatchSender}, }, std::{ @@ -131,36 +130,21 @@ impl AncestorHashesRepairType { } #[derive(Debug, Serialize, Deserialize)] -pub enum AncestorHashesResponseVersion { - Current(Vec), -} -impl AncestorHashesResponseVersion { - pub fn into_slot_hashes(self) -> Vec { - match self { - AncestorHashesResponseVersion::Current(slot_hashes) => slot_hashes, - } - } - - pub fn slot_hashes(&self) -> &[SlotHash] { - match self { - AncestorHashesResponseVersion::Current(slot_hashes) => slot_hashes, - } - } - - fn max_ancestors_in_response(&self) -> usize { - match self { - AncestorHashesResponseVersion::Current(_) => MAX_ANCESTOR_RESPONSES, - } - } +pub enum AncestorHashesResponse { + Hashes(Vec), + Ping(Ping), } impl RequestResponse for AncestorHashesRepairType { - type Response = AncestorHashesResponseVersion; + type Response = AncestorHashesResponse; fn num_expected_responses(&self) -> u32 { 1 } - fn verify_response(&self, response: &AncestorHashesResponseVersion) -> bool { - response.slot_hashes().len() <= response.max_ancestors_in_response() + fn verify_response(&self, response: &AncestorHashesResponse) -> bool { + match response { + AncestorHashesResponse::Hashes(hashes) => hashes.len() <= MAX_ANCESTOR_RESPONSES, + AncestorHashesResponse::Ping(ping) => ping.verify(), + } } } @@ -241,7 +225,7 @@ pub enum RepairProtocol { } #[derive(Serialize, Deserialize, Debug)] -enum RepairResponse { +pub(crate) enum RepairResponse { Ping(Ping), } @@ -279,23 +263,6 @@ impl RepairProtocol { | Self::AncestorHashes { .. } => true, } } - - fn requires_ping_check(&self) -> bool { - match self { - Self::LegacyWindowIndex(_, _, _) - | Self::LegacyHighestWindowIndex(_, _, _) - | Self::LegacyOrphan(_, _) - | Self::LegacyWindowIndexWithNonce(_, _, _, _) - | Self::LegacyHighestWindowIndexWithNonce(_, _, _, _) - | Self::LegacyOrphanWithNonce(_, _, _) - | Self::LegacyAncestorHashes(_, _, _) - | Self::Pong(_) - | Self::AncestorHashes { .. } => false, - Self::WindowIndex { .. } | Self::HighestWindowIndex { .. } | Self::Orphan { .. } => { - true - } - } - } } #[derive(Clone)] @@ -475,6 +442,24 @@ impl ServeRepair { } } + fn check_ping_ancestor_requests_activated_epoch(root_bank: &Bank) -> Option { + root_bank + .feature_set + .activated_slot(&check_ping_ancestor_requests::id()) + .map(|slot| root_bank.epoch_schedule().get_epoch(slot)) + } + + fn should_check_ping_ancestor_request( + slot: Slot, + root_bank: &Bank, + check_ping_ancestor_request_epoch: Option, + ) -> bool { + match check_ping_ancestor_request_epoch { + None => false, + Some(feature_epoch) => feature_epoch < root_bank.epoch_schedule().get_epoch(slot), + } + } + /// Process messages from the network fn run_listen( &self, @@ -682,26 +667,11 @@ impl ServeRepair { request: &RepairProtocol, from_addr: &SocketAddr, identity_keypair: &Keypair, - socket_addr_space: &SocketAddrSpace, ping_cache: &mut PingCache, - pending_pings: &mut Vec<(SocketAddr, Ping)>, - stats: &mut ServeRepairStats, - ) -> bool { - if !ContactInfo::is_valid_address(from_addr, socket_addr_space) { - stats.err_malformed += 1; - return false; - } + ) -> (bool, Option) { let mut rng = rand::thread_rng(); let mut pingf = move || Ping::new_rand(&mut rng, identity_keypair).ok(); - let (check, ping) = - ping_cache.check(Instant::now(), (*request.sender(), *from_addr), &mut pingf); - if let Some(ping) = ping { - pending_pings.push((*from_addr, ping)); - } - if !check { - stats.pings_required += 1; - } - check + ping_cache.check(Instant::now(), (*request.sender(), *from_addr), &mut pingf) } fn requires_signature_check( @@ -727,6 +697,44 @@ impl ServeRepair { } } + fn ping_to_packet_mapper_by_request_variant( + request: &RepairProtocol, + dest_addr: SocketAddr, + root_bank: &Bank, + check_ping_ancestor_request_epoch: Option, + ) -> Option Option>> { + match request { + RepairProtocol::LegacyWindowIndex(_, _, _) + | RepairProtocol::LegacyHighestWindowIndex(_, _, _) + | RepairProtocol::LegacyOrphan(_, _) + | RepairProtocol::LegacyWindowIndexWithNonce(_, _, _, _) + | RepairProtocol::LegacyHighestWindowIndexWithNonce(_, _, _, _) + | RepairProtocol::LegacyOrphanWithNonce(_, _, _) + | RepairProtocol::LegacyAncestorHashes(_, _, _) + | RepairProtocol::Pong(_) => None, + RepairProtocol::WindowIndex { .. } + | RepairProtocol::HighestWindowIndex { .. } + | RepairProtocol::Orphan { .. } => Some(Box::new(move |ping| { + let ping = RepairResponse::Ping(ping); + Packet::from_data(Some(&dest_addr), ping).ok() + })), + RepairProtocol::AncestorHashes { slot, .. } => { + if Self::should_check_ping_ancestor_request( + *slot, + root_bank, + check_ping_ancestor_request_epoch, + ) { + Some(Box::new(move |ping| { + let ping = AncestorHashesResponse::Ping(ping); + Packet::from_data(Some(&dest_addr), ping).ok() + })) + } else { + None + } + } + } + } + fn handle_packets( &self, ping_cache: &mut PingCache, @@ -739,6 +747,8 @@ impl ServeRepair { data_budget: &DataBudget, ) { let sign_repairs_epoch = Self::sign_repair_requests_activated_epoch(root_bank); + let check_ping_ancestor_request_epoch = + Self::check_ping_ancestor_requests_activated_epoch(root_bank); let identity_keypair = self.cluster_info.keypair().clone(); let socket_addr_space = *self.cluster_info.socket_addr_space(); let my_id = identity_keypair.pubkey(); @@ -772,18 +782,27 @@ impl ServeRepair { } let from_addr = packet.meta.socket_addr(); - if request.requires_ping_check() - && !Self::check_ping_cache( - &request, - &from_addr, - &identity_keypair, - &socket_addr_space, - ping_cache, - &mut pending_pings, - stats, - ) - { - continue; + if let Some(ping_to_pkt) = Self::ping_to_packet_mapper_by_request_variant( + &request, + from_addr, + root_bank, + check_ping_ancestor_request_epoch, + ) { + if !ContactInfo::is_valid_address(&from_addr, &socket_addr_space) { + stats.err_malformed += 1; + continue; + } + let (check, ping) = + Self::check_ping_cache(&request, &from_addr, &identity_keypair, ping_cache); + if let Some(ping) = ping { + if let Some(pkt) = ping_to_pkt(ping) { + pending_pings.push(pkt); + } + } + if !check { + stats.pings_required += 1; + continue; + } } stats.processed += 1; @@ -806,15 +825,8 @@ impl ServeRepair { } if !pending_pings.is_empty() { - let packets: Vec<_> = pending_pings - .into_iter() - .filter_map(|(sockaddr, ping)| { - let ping = RepairResponse::Ping(ping); - Packet::from_data(Some(&sockaddr), ping).ok() - }) - .collect(); - let batch = PacketBatch::new(packets); - let _ = response_sender.send(batch); + let batch = PacketBatch::new(pending_pings); + let _ignore = response_sender.send(batch); } } @@ -1198,7 +1210,7 @@ impl ServeRepair { // If this slot is not duplicate confirmed, return nothing vec![] }; - let response = AncestorHashesResponseVersion::Current(ancestor_slot_hashes); + let response = AncestorHashesResponse::Hashes(ancestor_slot_hashes); let serialized_response = serialize(&response).ok()?; // Could probably directly write response into packet via `serialize_into()` @@ -1961,7 +1973,7 @@ mod tests { #[test] fn test_run_ancestor_hashes() { - fn deserialize_ancestor_hashes_response(packet: &Packet) -> AncestorHashesResponseVersion { + fn deserialize_ancestor_hashes_response(packet: &Packet) -> AncestorHashesResponse { packet .deserialize_slice(..packet.meta.size - SIZE_OF_NONCE) .unwrap() @@ -1996,7 +2008,14 @@ mod tests { assert_eq!(rv.len(), 1); let packet = &rv[0]; let ancestor_hashes_response = deserialize_ancestor_hashes_response(packet); - assert!(ancestor_hashes_response.into_slot_hashes().is_empty()); + match ancestor_hashes_response { + AncestorHashesResponse::Hashes(hashes) => { + assert!(hashes.is_empty()); + } + _ => { + panic!("unexpected response: {:?}", &ancestor_hashes_response); + } + } // `slot + num_slots - 1` is not marked duplicate confirmed so nothing should return // empty @@ -2011,7 +2030,14 @@ mod tests { assert_eq!(rv.len(), 1); let packet = &rv[0]; let ancestor_hashes_response = deserialize_ancestor_hashes_response(packet); - assert!(ancestor_hashes_response.into_slot_hashes().is_empty()); + match ancestor_hashes_response { + AncestorHashesResponse::Hashes(hashes) => { + assert!(hashes.is_empty()); + } + _ => { + panic!("unexpected response: {:?}", &ancestor_hashes_response); + } + } // Set duplicate confirmed let mut expected_ancestors = Vec::with_capacity(num_slots as usize); @@ -2033,10 +2059,14 @@ mod tests { assert_eq!(rv.len(), 1); let packet = &rv[0]; let ancestor_hashes_response = deserialize_ancestor_hashes_response(packet); - assert_eq!( - ancestor_hashes_response.into_slot_hashes(), - expected_ancestors - ); + match ancestor_hashes_response { + AncestorHashesResponse::Hashes(hashes) => { + assert_eq!(hashes, expected_ancestors); + } + _ => { + panic!("unexpected response: {:?}", &ancestor_hashes_response); + } + } } Blockstore::destroy(&ledger_path).expect("Expected successful database destruction"); @@ -2184,10 +2214,10 @@ mod tests { .into_iter() .map(|slot| (slot, Hash::new_unique())) .collect(); - assert!(repair.verify_response(&AncestorHashesResponseVersion::Current(response.clone()))); + assert!(repair.verify_response(&AncestorHashesResponse::Hashes(response.clone()))); // over the allowed limit, should fail response.push((request_slot, Hash::new_unique())); - assert!(!repair.verify_response(&AncestorHashesResponseVersion::Current(response))); + assert!(!repair.verify_response(&AncestorHashesResponse::Hashes(response))); } } diff --git a/sdk/src/feature_set.rs b/sdk/src/feature_set.rs index 0d85d3e3ab161f..ef07b320e0cba6 100644 --- a/sdk/src/feature_set.rs +++ b/sdk/src/feature_set.rs @@ -492,6 +492,10 @@ pub mod concurrent_replay_of_forks { solana_sdk::declare_id!("9F2Dcu8xkBPKxiiy65XKPZYdCG3VZDpjDTuSmeYLozJe"); } +pub mod check_ping_ancestor_requests { + solana_sdk::declare_id!("AXLB87anNaUQtqBSsxkm4gvNzYY985aLtNtpJC94uWLJ"); +} + pub mod incremental_snapshot_only_incremental_hash_calculation { solana_sdk::declare_id!("25vqsfjk7Nv1prsQJmA4Xu1bN61s8LXCBGUPp8Rfy1UF"); } @@ -613,6 +617,7 @@ lazy_static! { (compact_vote_state_updates::id(), "Compact vote state updates to lower block size"), (sign_repair_requests::id(), "sign repair requests #26834"), (concurrent_replay_of_forks::id(), "Allow slots from different forks to be replayed concurrently #26465"), + (check_ping_ancestor_requests::id(), "ancestor hash repair socket ping/pong support #26963"), (incremental_snapshot_only_incremental_hash_calculation::id(), "only hash accounts in incremental snapshot during incremental snapshot creation #26799"), /*************** ADD NEW FEATURES HERE ***************/ ] From 6692513f9da5be403eaaacab4d89fd9ed8e143c7 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Wed, 10 Aug 2022 20:01:50 +0000 Subject: [PATCH 019/465] `solana-validator monitor` how displays slot and gossip stake % while waiting for supermajority (backport #27055) (#27060) `solana-validator monitor` how displays slot and gossip stake % while waiting for supermajority (cherry picked from commit 4e79d78629eb65a289f107d0ba0ecac7460a8c1c) Co-authored-by: Michael Vines --- core/src/validator.rs | 28 +++++++++++++++++++++------- 1 file changed, 21 insertions(+), 7 deletions(-) diff --git a/core/src/validator.rs b/core/src/validator.rs index b2df978850c1cf..c70d8c62d50c36 100644 --- a/core/src/validator.rs +++ b/core/src/validator.rs @@ -259,14 +259,23 @@ impl ValidatorConfig { pub enum ValidatorStartProgress { Initializing, // Catch all, default state SearchingForRpcService, - DownloadingSnapshot { slot: Slot, rpc_addr: SocketAddr }, + DownloadingSnapshot { + slot: Slot, + rpc_addr: SocketAddr, + }, CleaningBlockStore, CleaningAccounts, LoadingLedger, - ProcessingLedger { slot: Slot, max_slot: Slot }, + ProcessingLedger { + slot: Slot, + max_slot: Slot, + }, StartingServices, Halted, // Validator halted due to `--dev-halt-at-slot` argument - WaitingForSupermajority, + WaitingForSupermajority { + slot: Slot, + gossip_stake_percent: u64, + }, // `Running` is the terminal state once the validator fully starts and all services are // operational @@ -1890,20 +1899,20 @@ fn wait_for_supermajority( ) -> Result { match config.wait_for_supermajority { None => Ok(false), - Some(wait_for_supermajority) => { + Some(wait_for_supermajority_slot) => { if let Some(process_blockstore) = process_blockstore { process_blockstore.process(); } let bank = bank_forks.read().unwrap().working_bank(); - match wait_for_supermajority.cmp(&bank.slot()) { + match wait_for_supermajority_slot.cmp(&bank.slot()) { std::cmp::Ordering::Less => return Ok(false), std::cmp::Ordering::Greater => { error!( "Ledger does not have enough data to wait for supermajority, \ please enable snapshot fetch. Has {} needs {}", bank.slot(), - wait_for_supermajority + wait_for_supermajority_slot ); return Err(ValidatorError::NotEnoughLedgerData); } @@ -1921,7 +1930,6 @@ fn wait_for_supermajority( } } - *start_progress.write().unwrap() = ValidatorStartProgress::WaitingForSupermajority; for i in 1.. { if i % 10 == 1 { info!( @@ -1934,6 +1942,12 @@ fn wait_for_supermajority( let gossip_stake_percent = get_stake_percent_in_gossip(&bank, cluster_info, i % 10 == 0); + *start_progress.write().unwrap() = + ValidatorStartProgress::WaitingForSupermajority { + slot: wait_for_supermajority_slot, + gossip_stake_percent, + }; + if gossip_stake_percent >= WAIT_FOR_SUPERMAJORITY_THRESHOLD_PERCENT { info!( "Supermajority reached, {}% active stake detected, starting up now.", From c14c767cad13e74f64490e53d4a9d3761a812670 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Thu, 11 Aug 2022 08:06:42 +0000 Subject: [PATCH 020/465] Fix local cluster tests for QUIC usage (backport #27071) (#27077) Fix local cluster tests for QUIC usage (#27071) (cherry picked from commit ce230035fe6817b25f1d1f71fb8f5bfda6ba25e7) Co-authored-by: Pankaj Garg --- local-cluster/src/cluster_tests.rs | 32 +++++++++++++++++++----------- 1 file changed, 20 insertions(+), 12 deletions(-) diff --git a/local-cluster/src/cluster_tests.rs b/local-cluster/src/cluster_tests.rs index e0ad36f3009549..a0856b7db5caa3 100644 --- a/local-cluster/src/cluster_tests.rs +++ b/local-cluster/src/cluster_tests.rs @@ -35,7 +35,7 @@ use { solana_vote_program::vote_transaction, std::{ collections::{HashMap, HashSet}, - net::SocketAddr, + net::{IpAddr, Ipv4Addr, SocketAddr}, path::Path, sync::{Arc, RwLock}, thread::sleep, @@ -43,6 +43,14 @@ use { }, }; +fn get_client_facing_addr(contact_info: &ContactInfo) -> (SocketAddr, SocketAddr) { + let (rpc, mut tpu) = contact_info.client_facing_addr(); + // QUIC certificate authentication requires the IP Address to match. ContactInfo might have + // 0.0.0.0 as the IP instead of 127.0.0.1. + tpu.set_ip(IpAddr::V4(Ipv4Addr::new(127, 0, 0, 1))); + (rpc, tpu) +} + /// Spend and verify from every node in the network pub fn spend_and_verify_all_nodes( entry_point_info: &ContactInfo, @@ -61,7 +69,7 @@ pub fn spend_and_verify_all_nodes( return; } let random_keypair = Keypair::new(); - let (rpc, tpu) = ingress_node.client_facing_addr(); + let (rpc, tpu) = get_client_facing_addr(ingress_node); let client = ThinClient::new(rpc, tpu, connection_cache.clone()); let bal = client .poll_get_balance_with_commitment( @@ -83,7 +91,7 @@ pub fn spend_and_verify_all_nodes( if ignore_nodes.contains(&validator.id) { continue; } - let (rpc, tpu) = validator.client_facing_addr(); + let (rpc, tpu) = get_client_facing_addr(validator); let client = ThinClient::new(rpc, tpu, connection_cache.clone()); client.poll_for_signature_confirmation(&sig, confs).unwrap(); } @@ -95,7 +103,7 @@ pub fn verify_balances( node: &ContactInfo, connection_cache: Arc, ) { - let (rpc, tpu) = node.client_facing_addr(); + let (rpc, tpu) = get_client_facing_addr(node); let client = ThinClient::new(rpc, tpu, connection_cache); for (pk, b) in expected_balances { let bal = client @@ -112,7 +120,7 @@ pub fn send_many_transactions( max_tokens_per_transfer: u64, num_txs: u64, ) -> HashMap { - let (rpc, tpu) = node.client_facing_addr(); + let (rpc, tpu) = get_client_facing_addr(node); let client = ThinClient::new(rpc, tpu, connection_cache.clone()); let mut expected_balances = HashMap::new(); for _ in 0..num_txs { @@ -205,7 +213,7 @@ pub fn kill_entry_and_spend_and_verify_rest( let cluster_nodes = discover_cluster(&entry_point_info.gossip, nodes, socket_addr_space).unwrap(); assert!(cluster_nodes.len() >= nodes); - let (rpc, tpu) = entry_point_info.client_facing_addr(); + let (rpc, tpu) = get_client_facing_addr(entry_point_info); let client = ThinClient::new(rpc, tpu, connection_cache.clone()); // sleep long enough to make sure we are in epoch 3 @@ -235,7 +243,7 @@ pub fn kill_entry_and_spend_and_verify_rest( continue; } - let (rpc, tpu) = ingress_node.client_facing_addr(); + let (rpc, tpu) = get_client_facing_addr(ingress_node); let client = ThinClient::new(rpc, tpu, connection_cache.clone()); let balance = client .poll_get_balance_with_commitment( @@ -318,7 +326,7 @@ pub fn check_for_new_roots( assert!(loop_start.elapsed() < loop_timeout); for (i, ingress_node) in contact_infos.iter().enumerate() { - let (rpc, tpu) = ingress_node.client_facing_addr(); + let (rpc, tpu) = get_client_facing_addr(ingress_node); let client = ThinClient::new(rpc, tpu, connection_cache.clone()); let root_slot = client .get_slot_with_commitment(CommitmentConfig::finalized()) @@ -351,7 +359,7 @@ pub fn check_no_new_roots( .iter() .enumerate() .map(|(i, ingress_node)| { - let (rpc, tpu) = ingress_node.client_facing_addr(); + let (rpc, tpu) = get_client_facing_addr(ingress_node); let client = ThinClient::new(rpc, tpu, connection_cache.clone()); let initial_root = client .get_slot() @@ -370,7 +378,7 @@ pub fn check_no_new_roots( let mut reached_end_slot = false; loop { for contact_info in contact_infos { - let (rpc, tpu) = contact_info.client_facing_addr(); + let (rpc, tpu) = get_client_facing_addr(contact_info); let client = ThinClient::new(rpc, tpu, connection_cache.clone()); current_slot = client .get_slot_with_commitment(CommitmentConfig::processed()) @@ -393,7 +401,7 @@ pub fn check_no_new_roots( } for (i, ingress_node) in contact_infos.iter().enumerate() { - let (rpc, tpu) = ingress_node.client_facing_addr(); + let (rpc, tpu) = get_client_facing_addr(ingress_node); let client = ThinClient::new(rpc, tpu, connection_cache.clone()); assert_eq!( client @@ -415,7 +423,7 @@ fn poll_all_nodes_for_signature( if validator.id == entry_point_info.id { continue; } - let (rpc, tpu) = validator.client_facing_addr(); + let (rpc, tpu) = get_client_facing_addr(validator); let client = ThinClient::new(rpc, tpu, connection_cache.clone()); client.poll_for_signature_confirmation(sig, confs)?; } From 23ead0d420c81a72c343ca1ce6c604e8c56c4800 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Thu, 11 Aug 2022 14:36:47 +0000 Subject: [PATCH 021/465] removes buffering when generating coding shreds in broadcast (backport #25807) (#27082) removes buffering when generating coding shreds in broadcast (#25807) Given the 32:32 erasure recovery schema, current implementation requires exactly 32 data shreds to generate coding shreds for the batch (except for the final erasure batch in each slot). As a result, when serializing ledger entries to data shreds, if the number of data shreds is not a multiple of 32, the coding shreds for the last batch cannot be generated until there are more data shreds to complete the batch to 32 data shreds. This adds latency in generating and broadcasting coding shreds. In addition, with Merkle variants for shreds, data shreds cannot be signed and broadcasted until coding shreds are also generated. As a result *both* code and data shreds will be delayed before broadcast if we still require exactly 32 data shreds for each batch. This commit instead always generates and broadcast coding shreds as soon as there any number of data shreds available. When serializing entries to shreds: * if the number of resulting data shreds is less than 32, then more coding shreds will be generated so that the resulting erasure batch has the same recovery probabilities as a 32:32 batch. * if the number of data shreds is more than 32, then the data shreds are split uniformly into erasure batches with _at least_ 32 data shreds in each batch. Each erasure batch will have the same number of code and data shreds. For example: * If there are 19 data shreds, 27 coding shreds are generated. The resulting 19(data):27(code) erasure batch has the same recovery probabilities as a 32:32 batch. * If there are 107 data shreds, they are split into 3 batches of 36:36, 36:36 and 35:35 data:code shreds each. A consequence of this change is that code and data shreds indices will no longer align as there will be more coding shreds than data shreds (not only in the last batch in each slot but also in the intermediate ones); (cherry picked from commit ac91cdab74284aa4a72d6ac8cf0c11ce3a45613e) Co-authored-by: behzad nouri --- core/benches/shredder.rs | 22 +- core/src/broadcast_stage/broadcast_utils.rs | 4 - .../broadcast_stage/standard_broadcast_run.rs | 156 +++--------- core/src/shred_fetch_stage.rs | 3 +- ledger/src/blockstore.rs | 10 +- ledger/src/shred.rs | 6 +- ledger/src/shred/shred_code.rs | 6 +- ledger/src/shredder.rs | 228 ++++++++++-------- ledger/tests/shred.rs | 22 +- 9 files changed, 203 insertions(+), 254 deletions(-) diff --git a/core/benches/shredder.rs b/core/benches/shredder.rs index 68c3243efd1512..8df66e9b47f362 100644 --- a/core/benches/shredder.rs +++ b/core/benches/shredder.rs @@ -9,7 +9,7 @@ use { solana_entry::entry::{create_ticks, Entry}, solana_ledger::shred::{ max_entries_per_n_shred, max_ticks_per_n_shreds, ProcessShredsStats, Shred, ShredFlags, - Shredder, LEGACY_SHRED_DATA_CAPACITY, MAX_DATA_SHREDS_PER_FEC_BLOCK, + Shredder, DATA_SHREDS_PER_FEC_BLOCK, LEGACY_SHRED_DATA_CAPACITY, }, solana_perf::test_tx, solana_sdk::{hash::Hash, packet::PACKET_DATA_SIZE, signature::Keypair}, @@ -153,13 +153,12 @@ fn bench_deserialize_hdr(bencher: &mut Bencher) { #[bench] fn bench_shredder_coding(bencher: &mut Bencher) { - let symbol_count = MAX_DATA_SHREDS_PER_FEC_BLOCK as usize; + let symbol_count = DATA_SHREDS_PER_FEC_BLOCK; let data_shreds = make_shreds(symbol_count); bencher.iter(|| { Shredder::generate_coding_shreds( &data_shreds[..symbol_count], - true, // is_last_in_slot - 0, // next_code_index + 0, // next_code_index ) .len(); }) @@ -167,12 +166,11 @@ fn bench_shredder_coding(bencher: &mut Bencher) { #[bench] fn bench_shredder_decoding(bencher: &mut Bencher) { - let symbol_count = MAX_DATA_SHREDS_PER_FEC_BLOCK as usize; + let symbol_count = DATA_SHREDS_PER_FEC_BLOCK; let data_shreds = make_shreds(symbol_count); let coding_shreds = Shredder::generate_coding_shreds( &data_shreds[..symbol_count], - true, // is_last_in_slot - 0, // next_code_index + 0, // next_code_index ); bencher.iter(|| { Shredder::try_recovery(coding_shreds[..].to_vec()).unwrap(); @@ -181,18 +179,18 @@ fn bench_shredder_decoding(bencher: &mut Bencher) { #[bench] fn bench_shredder_coding_raptorq(bencher: &mut Bencher) { - let symbol_count = MAX_DATA_SHREDS_PER_FEC_BLOCK; - let data = make_concatenated_shreds(symbol_count as usize); + let symbol_count = DATA_SHREDS_PER_FEC_BLOCK; + let data = make_concatenated_shreds(symbol_count); bencher.iter(|| { let encoder = Encoder::with_defaults(&data, VALID_SHRED_DATA_LEN as u16); - encoder.get_encoded_packets(symbol_count); + encoder.get_encoded_packets(symbol_count as u32); }) } #[bench] fn bench_shredder_decoding_raptorq(bencher: &mut Bencher) { - let symbol_count = MAX_DATA_SHREDS_PER_FEC_BLOCK; - let data = make_concatenated_shreds(symbol_count as usize); + let symbol_count = DATA_SHREDS_PER_FEC_BLOCK; + let data = make_concatenated_shreds(symbol_count); let encoder = Encoder::with_defaults(&data, VALID_SHRED_DATA_LEN as u16); let mut packets = encoder.get_encoded_packets(symbol_count as u32); packets.shuffle(&mut rand::thread_rng()); diff --git a/core/src/broadcast_stage/broadcast_utils.rs b/core/src/broadcast_stage/broadcast_utils.rs index fd30cfb3b9546d..a54b0fa79f79c5 100644 --- a/core/src/broadcast_stage/broadcast_utils.rs +++ b/core/src/broadcast_stage/broadcast_utils.rs @@ -2,7 +2,6 @@ use { crate::result::Result, crossbeam_channel::Receiver, solana_entry::entry::Entry, - solana_ledger::shred::Shred, solana_poh::poh_recorder::WorkingBankEntry, solana_runtime::bank::Bank, solana_sdk::clock::Slot, @@ -25,9 +24,6 @@ pub struct UnfinishedSlotInfo { pub(crate) next_code_index: u32, pub slot: Slot, pub parent: Slot, - // Data shreds buffered to make a batch of size - // MAX_DATA_SHREDS_PER_FEC_BLOCK. - pub(crate) data_shreds_buffer: Vec, } /// This parameter tunes how many entries are received in one iteration of recv loop diff --git a/core/src/broadcast_stage/standard_broadcast_run.rs b/core/src/broadcast_stage/standard_broadcast_run.rs index 17a3725cd57594..87715f8b16c82b 100644 --- a/core/src/broadcast_stage/standard_broadcast_run.rs +++ b/core/src/broadcast_stage/standard_broadcast_run.rs @@ -9,9 +9,7 @@ use { broadcast_stage::broadcast_utils::UnfinishedSlotInfo, cluster_nodes::ClusterNodesCache, }, solana_entry::entry::Entry, - solana_ledger::shred::{ - ProcessShredsStats, Shred, ShredFlags, Shredder, MAX_DATA_SHREDS_PER_FEC_BLOCK, - }, + solana_ledger::shred::{ProcessShredsStats, Shred, ShredFlags, Shredder}, solana_sdk::{ signature::Keypair, timing::{duration_as_us, AtomicInterval}, @@ -68,41 +66,27 @@ impl StandardBroadcastRun { None => Vec::default(), Some(ref state) if state.slot == current_slot => Vec::default(), Some(ref mut state) => { - let parent_offset = state.slot - state.parent; let reference_tick = max_ticks_in_slot & SHRED_TICK_REFERENCE_MASK; - let fec_set_offset = state - .data_shreds_buffer - .first() - .map(Shred::index) - .unwrap_or(state.next_shred_index); - let fec_set_index = Shredder::fec_set_index(state.next_shred_index, fec_set_offset); - let mut shred = Shred::new_from_data( - state.slot, - state.next_shred_index, - parent_offset as u16, - &[], // data - ShredFlags::LAST_SHRED_IN_SLOT, - reference_tick, - self.shred_version, - fec_set_index.unwrap(), - ); - shred.sign(keypair); - state.data_shreds_buffer.push(shred.clone()); - let mut shreds = make_coding_shreds( + let shredder = + Shredder::new(state.slot, state.parent, reference_tick, self.shred_version) + .unwrap(); + let (mut shreds, coding_shreds) = shredder.entries_to_shreds( keypair, - &mut self.unfinished_slot, - true, // is_last_in_slot + &[], // entries + true, // is_last_in_slot, + state.next_shred_index, + state.next_code_index, stats, ); - shreds.insert(0, shred); self.report_and_reset_stats(true); self.unfinished_slot = None; + shreds.extend(coding_shreds); shreds } } } - fn entries_to_data_shreds( + fn entries_to_shreds( &mut self, keypair: &Keypair, entries: &[Entry], @@ -110,10 +94,13 @@ impl StandardBroadcastRun { reference_tick: u8, is_slot_end: bool, process_stats: &mut ProcessShredsStats, - ) -> Vec { + ) -> ( + Vec, // data shreds + Vec, // coding shreds + ) { let (slot, parent_slot) = self.current_slot_and_parent.unwrap(); - let next_shred_index = match &self.unfinished_slot { - Some(state) => state.next_shred_index, + let (next_shred_index, next_code_index) = match &self.unfinished_slot { + Some(state) => (state.next_shred_index, state.next_code_index), None => { // If the blockstore has shreds for the slot, it should not // recreate the slot: @@ -123,46 +110,37 @@ impl StandardBroadcastRun { process_stats.num_extant_slots += 1; // This is a faulty situation that should not happen. // Refrain from generating shreds for the slot. - return Vec::default(); + return (Vec::default(), Vec::default()); } } - 0u32 - } - }; - let data_shreds = Shredder::new(slot, parent_slot, reference_tick, self.shred_version) - .unwrap() - .entries_to_data_shreds( - keypair, - entries, - is_slot_end, - next_shred_index, - 0, // fec_set_offset - process_stats, - ); - let mut data_shreds_buffer = match &mut self.unfinished_slot { - Some(state) => { - assert_eq!(state.slot, slot); - std::mem::take(&mut state.data_shreds_buffer) + (0u32, 0u32) } - None => Vec::default(), }; - data_shreds_buffer.extend(data_shreds.clone()); + let shredder = + Shredder::new(slot, parent_slot, reference_tick, self.shred_version).unwrap(); + let (data_shreds, coding_shreds) = shredder.entries_to_shreds( + keypair, + entries, + is_slot_end, + next_shred_index, + next_code_index, + process_stats, + ); let next_shred_index = match data_shreds.iter().map(Shred::index).max() { Some(index) => index + 1, None => next_shred_index, }; - let next_code_index = match &self.unfinished_slot { - Some(state) => state.next_code_index, - None => 0, + let next_code_index = match coding_shreds.iter().map(Shred::index).max() { + Some(index) => index + 1, + None => next_code_index, }; self.unfinished_slot = Some(UnfinishedSlotInfo { next_shred_index, next_code_index, slot, parent: parent_slot, - data_shreds_buffer, }); - data_shreds + (data_shreds, coding_shreds) } #[cfg(test)] @@ -228,7 +206,7 @@ impl StandardBroadcastRun { // 2) Convert entries to shreds and coding shreds let is_last_in_slot = last_tick_height == bank.max_tick_height(); let reference_tick = bank.tick_height() % bank.ticks_per_slot(); - let data_shreds = self.entries_to_data_shreds( + let (data_shreds, coding_shreds) = self.entries_to_shreds( keypair, &receive_results.entries, blockstore, @@ -300,13 +278,7 @@ impl StandardBroadcastRun { socket_sender.send((data_shreds.clone(), batch_info.clone()))?; blockstore_sender.send((data_shreds, batch_info.clone()))?; - // Create and send coding shreds - let coding_shreds = make_coding_shreds( - keypair, - &mut self.unfinished_slot, - is_last_in_slot, - &mut process_stats, - ); + // Send coding shreds let coding_shreds = Arc::new(coding_shreds); debug_assert!(coding_shreds .iter() @@ -435,49 +407,6 @@ impl StandardBroadcastRun { } } -// Consumes data_shreds_buffer returning corresponding coding shreds. -fn make_coding_shreds( - keypair: &Keypair, - unfinished_slot: &mut Option, - is_slot_end: bool, - stats: &mut ProcessShredsStats, -) -> Vec { - let unfinished_slot = match unfinished_slot { - None => return Vec::default(), - Some(state) => state, - }; - let data_shreds: Vec<_> = { - let size = unfinished_slot.data_shreds_buffer.len(); - // Consume a multiple of 32, unless this is the slot end. - let offset = if is_slot_end { - 0 - } else { - size % MAX_DATA_SHREDS_PER_FEC_BLOCK as usize - }; - unfinished_slot - .data_shreds_buffer - .drain(0..size - offset) - .collect() - }; - let shreds = Shredder::data_shreds_to_coding_shreds( - keypair, - &data_shreds, - is_slot_end, - unfinished_slot.next_code_index, - stats, - ) - .unwrap(); - if let Some(index) = shreds - .iter() - .filter(|shred| shred.is_code()) - .map(Shred::index) - .max() - { - unfinished_slot.next_code_index = unfinished_slot.next_code_index.max(index + 1); - } - shreds -} - impl BroadcastRun for StandardBroadcastRun { fn run( &mut self, @@ -591,7 +520,6 @@ mod test { next_code_index: 17, slot, parent, - data_shreds_buffer: Vec::default(), }); run.slot_broadcast_start = Some(Instant::now()); @@ -776,19 +704,15 @@ mod test { while let Ok((recv_shreds, _)) = brecv.recv_timeout(Duration::from_secs(1)) { shreds.extend(recv_shreds.deref().clone()); } - assert!(shreds.len() < 32, "shreds.len(): {}", shreds.len()); - assert!(shreds.iter().all(|shred| shred.is_data())); + // At least as many coding shreds as data shreds. + assert!(shreds.len() >= 29 * 2); + assert_eq!(shreds.iter().filter(|shred| shred.is_data()).count(), 29); process_ticks(75); while let Ok((recv_shreds, _)) = brecv.recv_timeout(Duration::from_secs(1)) { shreds.extend(recv_shreds.deref().clone()); } - assert!(shreds.len() > 64, "shreds.len(): {}", shreds.len()); - let num_coding_shreds = shreds.iter().filter(|shred| shred.is_code()).count(); - assert_eq!( - num_coding_shreds, 32, - "num coding shreds: {}", - num_coding_shreds - ); + assert!(shreds.len() >= 33 * 2); + assert_eq!(shreds.iter().filter(|shred| shred.is_data()).count(), 33); } #[test] diff --git a/core/src/shred_fetch_stage.rs b/core/src/shred_fetch_stage.rs index ae604e766f1957..d9427e30f64da2 100644 --- a/core/src/shred_fetch_stage.rs +++ b/core/src/shred_fetch_stage.rs @@ -293,8 +293,7 @@ mod tests { )); let coding = solana_ledger::shred::Shredder::generate_coding_shreds( &[shred], - false, // is_last_in_slot - 3, // next_code_index + 3, // next_code_index ); coding[0].copy_to_packet(&mut packet); assert!(!should_discard_packet( diff --git a/ledger/src/blockstore.rs b/ledger/src/blockstore.rs index 403f6105b5e3a6..acacf9d842a7e5 100644 --- a/ledger/src/blockstore.rs +++ b/ledger/src/blockstore.rs @@ -8969,14 +8969,8 @@ pub mod tests { let ledger_path = get_tmp_ledger_path_auto_delete!(); let blockstore = Blockstore::open(ledger_path.path()).unwrap(); - let coding1 = Shredder::generate_coding_shreds( - &shreds, false, // is_last_in_slot - 0, // next_code_index - ); - let coding2 = Shredder::generate_coding_shreds( - &shreds, true, // is_last_in_slot - 0, // next_code_index - ); + let coding1 = Shredder::generate_coding_shreds(&shreds, /*next_code_index:*/ 0); + let coding2 = Shredder::generate_coding_shreds(&shreds, /*next_code_index:*/ 1); for shred in &shreds { info!("shred {:?}", shred); } diff --git a/ledger/src/shred.rs b/ledger/src/shred.rs index dda68ff093a309..2656367db79493 100644 --- a/ledger/src/shred.rs +++ b/ledger/src/shred.rs @@ -99,7 +99,11 @@ const OFFSET_OF_SHRED_VARIANT: usize = SIZE_OF_SIGNATURE; const OFFSET_OF_SHRED_SLOT: usize = SIZE_OF_SIGNATURE + SIZE_OF_SHRED_VARIANT; const OFFSET_OF_SHRED_INDEX: usize = OFFSET_OF_SHRED_SLOT + SIZE_OF_SHRED_SLOT; -pub const MAX_DATA_SHREDS_PER_FEC_BLOCK: u32 = 32; +// Shreds are uniformly split into erasure batches with a "target" number of +// data shreds per each batch as below. The actual number of data shreds in +// each erasure batch depends on the number of shreds obtained from serializing +// a &[Entry]. +pub const DATA_SHREDS_PER_FEC_BLOCK: usize = 32; // For legacy tests and benchmarks. const_assert_eq!(LEGACY_SHRED_DATA_CAPACITY, 1051); diff --git a/ledger/src/shred/shred_code.rs b/ledger/src/shred/shred_code.rs index 25ce8a2385916d..cd5d99e86a33e4 100644 --- a/ledger/src/shred/shred_code.rs +++ b/ledger/src/shred/shred_code.rs @@ -3,7 +3,7 @@ use { common::dispatch, legacy, merkle, traits::{Shred, ShredCode as ShredCodeTrait}, - CodingShredHeader, Error, ShredCommonHeader, ShredType, MAX_DATA_SHREDS_PER_FEC_BLOCK, + CodingShredHeader, Error, ShredCommonHeader, ShredType, DATA_SHREDS_PER_FEC_BLOCK, MAX_DATA_SHREDS_PER_SLOT, SIZE_OF_NONCE, }, solana_sdk::{clock::Slot, packet::PACKET_DATA_SIZE, signature::Signature}, @@ -132,8 +132,8 @@ pub(super) fn sanitize(shred: &T) -> Result<(), Error> { common_header.index, )); } - let num_coding_shreds = u32::from(coding_header.num_coding_shreds); - if num_coding_shreds > 8 * MAX_DATA_SHREDS_PER_FEC_BLOCK { + let num_coding_shreds = usize::from(coding_header.num_coding_shreds); + if num_coding_shreds > 8 * DATA_SHREDS_PER_FEC_BLOCK { return Err(Error::InvalidNumCodingShreds( coding_header.num_coding_shreds, )); diff --git a/ledger/src/shredder.rs b/ledger/src/shredder.rs index 22df6b87d7a063..ea7d869206bfb4 100644 --- a/ledger/src/shredder.rs +++ b/ledger/src/shredder.rs @@ -1,6 +1,6 @@ use { crate::shred::{ - Error, ProcessShredsStats, Shred, ShredData, ShredFlags, MAX_DATA_SHREDS_PER_FEC_BLOCK, + Error, ProcessShredsStats, Shred, ShredData, ShredFlags, DATA_SHREDS_PER_FEC_BLOCK, }, itertools::Itertools, lazy_static::lazy_static, @@ -24,6 +24,15 @@ lazy_static! { .unwrap(); } +// Maps number of data shreds to the optimal erasure batch size which has the +// same recovery probabilities as a 32:32 erasure batch. +const ERASURE_BATCH_SIZE: [usize; 33] = [ + 0, 18, 20, 22, 23, 25, 27, 28, 30, // 8 + 32, 33, 35, 36, 38, 39, 41, 42, // 16 + 43, 45, 46, 48, 49, 51, 52, 53, // 24 + 55, 56, 58, 59, 60, 62, 63, 64, // 32 +]; + type ReedSolomon = reed_solomon_erasure::ReedSolomon; #[derive(Debug)] @@ -65,45 +74,20 @@ impl Shredder { Vec, // data shreds Vec, // coding shreds ) { - let data_shreds = self.entries_to_data_shreds( - keypair, - entries, - is_last_in_slot, - next_shred_index, - next_shred_index, // fec_set_offset - stats, - ); - let coding_shreds = Self::data_shreds_to_coding_shreds( - keypair, - &data_shreds, - is_last_in_slot, - next_code_index, - stats, - ) - .unwrap(); + let data_shreds = + self.entries_to_data_shreds(keypair, entries, is_last_in_slot, next_shred_index, stats); + let coding_shreds = + Self::data_shreds_to_coding_shreds(keypair, &data_shreds, next_code_index, stats) + .unwrap(); (data_shreds, coding_shreds) } - /// Each FEC block has maximum MAX_DATA_SHREDS_PER_FEC_BLOCK shreds. - /// "FEC set index" is the index of first data shred in that FEC block. - /// **Data** shreds with the same value of: - /// (data_shred.index() - fec_set_offset) / MAX_DATA_SHREDS_PER_FEC_BLOCK - /// belong to the same FEC set. - /// Coding shreds inherit their fec_set_index from the data shreds that - /// they are generated from. - pub fn fec_set_index(data_shred_index: u32, fec_set_offset: u32) -> Option { - let diff = data_shred_index.checked_sub(fec_set_offset)?; - Some(data_shred_index - diff % MAX_DATA_SHREDS_PER_FEC_BLOCK) - } - - pub fn entries_to_data_shreds( + fn entries_to_data_shreds( &self, keypair: &Keypair, entries: &[Entry], is_last_in_slot: bool, next_shred_index: u32, - // Shred index offset at which FEC sets are generated. - fec_set_offset: u32, process_stats: &mut ProcessShredsStats, ) -> Vec { let mut serialize_time = Measure::start("shred_serialize"); @@ -119,7 +103,7 @@ impl Shredder { let num_shreds = (serialized_shreds.len() + data_buffer_size - 1) / data_buffer_size; let last_shred_index = next_shred_index + num_shreds as u32 - 1; // 1) Generate data shreds - let make_data_shred = |shred_index: u32, data| { + let make_data_shred = |data, shred_index: u32, fec_set_index: u32| { let flags = if shred_index != last_shred_index { ShredFlags::empty() } else if is_last_in_slot { @@ -129,7 +113,6 @@ impl Shredder { ShredFlags::DATA_COMPLETE_SHRED }; let parent_offset = self.slot - self.parent_slot; - let fec_set_index = Self::fec_set_index(shred_index, fec_set_offset); let mut shred = Shred::new_from_data( self.slot, shred_index, @@ -138,18 +121,24 @@ impl Shredder { flags, self.reference_tick, self.version, - fec_set_index.unwrap(), + fec_set_index, ); shred.sign(keypair); shred }; - let data_shreds: Vec = PAR_THREAD_POOL.install(|| { - serialized_shreds - .par_chunks(data_buffer_size) + let shreds: Vec<&[u8]> = serialized_shreds.chunks(data_buffer_size).collect(); + let fec_set_offsets: Vec = + get_fec_set_offsets(shreds.len(), DATA_SHREDS_PER_FEC_BLOCK).collect(); + assert_eq!(shreds.len(), fec_set_offsets.len()); + let shreds: Vec = PAR_THREAD_POOL.install(|| { + shreds + .into_par_iter() + .zip(fec_set_offsets) .enumerate() - .map(|(i, shred_data)| { + .map(|(i, (shred, offset))| { let shred_index = next_shred_index + i as u32; - make_data_shred(shred_index, shred_data) + let fec_set_index = next_shred_index + offset as u32; + make_data_shred(shred, shred_index, fec_set_index) }) .collect() }); @@ -157,15 +146,14 @@ impl Shredder { process_stats.serialize_elapsed += serialize_time.as_us(); process_stats.gen_data_elapsed += gen_data_time.as_us(); - process_stats.record_num_data_shreds(data_shreds.len()); + process_stats.record_num_data_shreds(shreds.len()); - data_shreds + shreds } - pub fn data_shreds_to_coding_shreds( + fn data_shreds_to_coding_shreds( keypair: &Keypair, data_shreds: &[Shred], - is_last_in_slot: bool, next_code_index: u32, process_stats: &mut ProcessShredsStats, ) -> Result, Error> { @@ -185,8 +173,7 @@ impl Shredder { .iter() .scan(next_code_index, |next_code_index, chunk| { let num_data_shreds = chunk.len(); - let erasure_batch_size = - get_erasure_batch_size(num_data_shreds, is_last_in_slot); + let erasure_batch_size = get_erasure_batch_size(num_data_shreds); *next_code_index += (erasure_batch_size - num_data_shreds) as u32; Some(*next_code_index) }), @@ -198,7 +185,7 @@ impl Shredder { .into_par_iter() .zip(next_code_index) .flat_map(|(shreds, next_code_index)| { - Shredder::generate_coding_shreds(&shreds, is_last_in_slot, next_code_index) + Shredder::generate_coding_shreds(&shreds, next_code_index) }) .collect() }); @@ -221,7 +208,6 @@ impl Shredder { /// Generates coding shreds for the data shreds in the current FEC set pub fn generate_coding_shreds>( data: &[T], - is_last_in_slot: bool, next_code_index: u32, ) -> Vec { let (slot, index, version, fec_set_index) = { @@ -241,9 +227,10 @@ impl Shredder { && shred.version() == version && shred.fec_set_index() == fec_set_index)); let num_data = data.len(); - let num_coding = get_erasure_batch_size(num_data, is_last_in_slot) + let num_coding = get_erasure_batch_size(num_data) .checked_sub(num_data) .unwrap(); + assert!(num_coding > 0); let data: Vec<_> = data .iter() .map(Borrow::borrow) @@ -360,12 +347,31 @@ impl Shredder { } /// Maps number of data shreds in each batch to the erasure batch size. -fn get_erasure_batch_size(num_data_shreds: usize, is_last_in_slot: bool) -> usize { - if is_last_in_slot { - 2 * num_data_shreds.max(MAX_DATA_SHREDS_PER_FEC_BLOCK as usize) - } else { - 2 * num_data_shreds - } +fn get_erasure_batch_size(num_data_shreds: usize) -> usize { + ERASURE_BATCH_SIZE + .get(num_data_shreds) + .copied() + .unwrap_or(2 * num_data_shreds) +} + +// Returns offsets to fec_set_index when spliting shreds into erasure batches. +fn get_fec_set_offsets( + mut num_shreds: usize, + min_chunk_size: usize, +) -> impl Iterator { + let mut offset = 0; + std::iter::from_fn(move || { + if num_shreds == 0 { + return None; + } + let num_chunks = (num_shreds / min_chunk_size).max(1); + let chunk_size = (num_shreds + num_chunks - 1) / num_chunks; + let offsets = std::iter::repeat(offset).take(chunk_size); + num_shreds -= chunk_size; + offset += chunk_size; + Some(offsets) + }) + .flatten() } #[cfg(test)] @@ -427,8 +433,7 @@ mod tests { let data_buffer_size = ShredData::capacity(/*merkle_proof_size:*/ None).unwrap(); let num_expected_data_shreds = (size + data_buffer_size - 1) / data_buffer_size; let num_expected_coding_shreds = - get_erasure_batch_size(num_expected_data_shreds, /*is_last_in_slot:*/ true) - - num_expected_data_shreds; + get_erasure_batch_size(num_expected_data_shreds) - num_expected_data_shreds; let start_index = 0; let (data_shreds, coding_shreds) = shredder.entries_to_shreds( &keypair, @@ -684,7 +689,7 @@ mod tests { assert_eq!(data_shreds.len(), num_data_shreds); assert_eq!( num_coding_shreds, - get_erasure_batch_size(num_data_shreds, is_last_in_slot) - num_data_shreds + get_erasure_batch_size(num_data_shreds) - num_data_shreds ); let all_shreds = data_shreds @@ -989,19 +994,34 @@ mod tests { start_index, // next_code_index &mut ProcessShredsStats::default(), ); - let max_per_block = MAX_DATA_SHREDS_PER_FEC_BLOCK as usize; - data_shreds.iter().enumerate().for_each(|(i, s)| { - let expected_fec_set_index = start_index + (i - i % max_per_block) as u32; - assert_eq!(s.fec_set_index(), expected_fec_set_index); - }); - - coding_shreds.iter().enumerate().for_each(|(i, s)| { - let mut expected_fec_set_index = start_index + (i - i % max_per_block) as u32; - while expected_fec_set_index as usize - start_index as usize > data_shreds.len() { - expected_fec_set_index -= max_per_block as u32; - } - assert_eq!(s.fec_set_index(), expected_fec_set_index); - }); + const MIN_CHUNK_SIZE: usize = DATA_SHREDS_PER_FEC_BLOCK; + let chunks: Vec<_> = data_shreds + .iter() + .group_by(|shred| shred.fec_set_index()) + .into_iter() + .map(|(fec_set_index, chunk)| (fec_set_index, chunk.count())) + .collect(); + assert!(chunks + .iter() + .all(|(_, chunk_size)| *chunk_size >= MIN_CHUNK_SIZE)); + assert!(chunks + .iter() + .all(|(_, chunk_size)| *chunk_size < 2 * MIN_CHUNK_SIZE)); + assert_eq!(chunks[0].0, start_index); + assert!(chunks.iter().tuple_windows().all( + |((fec_set_index, chunk_size), (next_fec_set_index, _chunk_size))| fec_set_index + + *chunk_size as u32 + == *next_fec_set_index + )); + assert!(coding_shreds.len() >= data_shreds.len()); + assert!(coding_shreds + .iter() + .zip(&data_shreds) + .all(|(code, data)| code.fec_set_index() == data.fec_set_index())); + assert_eq!( + coding_shreds.last().unwrap().fec_set_index(), + data_shreds.last().unwrap().fec_set_index() + ); } #[test] @@ -1028,43 +1048,61 @@ mod tests { &entries, true, // is_last_in_slot start_index, - start_index, // fec_set_offset &mut stats, ); - assert!(data_shreds.len() > MAX_DATA_SHREDS_PER_FEC_BLOCK as usize); let next_code_index = data_shreds[0].index(); - (1..=MAX_DATA_SHREDS_PER_FEC_BLOCK as usize).for_each(|count| { - for is_last_in_slot in [false, true] { - let coding_shreds = Shredder::data_shreds_to_coding_shreds( - &keypair, - &data_shreds[..count], - is_last_in_slot, - next_code_index, - &mut stats, - ) - .unwrap(); - let num_coding_shreds = get_erasure_batch_size(count, is_last_in_slot) - count; - assert_eq!(coding_shreds.len(), num_coding_shreds); - } - }); - for is_last_in_slot in [false, true] { + for size in (1..data_shreds.len()).step_by(5) { + let data_shreds = &data_shreds[..size]; let coding_shreds = Shredder::data_shreds_to_coding_shreds( &keypair, - &data_shreds[..MAX_DATA_SHREDS_PER_FEC_BLOCK as usize + 1], - is_last_in_slot, + data_shreds, next_code_index, &mut stats, ) .unwrap(); - let num_shreds = - get_erasure_batch_size(MAX_DATA_SHREDS_PER_FEC_BLOCK as usize, is_last_in_slot) - + get_erasure_batch_size(1, is_last_in_slot); + let num_shreds: usize = data_shreds + .iter() + .group_by(|shred| shred.fec_set_index()) + .into_iter() + .map(|(_, chunk)| get_erasure_batch_size(chunk.count())) + .sum(); + assert_eq!(coding_shreds.len(), num_shreds - data_shreds.len()); + } + } + + #[test] + fn test_get_fec_set_offsets() { + const MIN_CHUNK_SIZE: usize = 32usize; + for num_shreds in 0usize..MIN_CHUNK_SIZE { + let offsets: Vec<_> = get_fec_set_offsets(num_shreds, MIN_CHUNK_SIZE).collect(); + assert_eq!(offsets, vec![0usize; num_shreds]); + } + for num_shreds in MIN_CHUNK_SIZE..MIN_CHUNK_SIZE * 8 { + let chunks: Vec<_> = get_fec_set_offsets(num_shreds, MIN_CHUNK_SIZE) + .group_by(|offset| *offset) + .into_iter() + .map(|(offset, chunk)| (offset, chunk.count())) + .collect(); assert_eq!( - coding_shreds.len(), - num_shreds - MAX_DATA_SHREDS_PER_FEC_BLOCK as usize - 1 + chunks + .iter() + .map(|(_offset, chunk_size)| chunk_size) + .sum::(), + num_shreds ); + assert!(chunks + .iter() + .all(|(_offset, chunk_size)| *chunk_size >= MIN_CHUNK_SIZE)); + assert!(chunks + .iter() + .all(|(_offset, chunk_size)| *chunk_size < 2 * MIN_CHUNK_SIZE)); + assert_eq!(chunks[0].0, 0); + assert!(chunks.iter().tuple_windows().all( + |((offset, chunk_size), (next_offset, _chunk_size))| offset + chunk_size + == *next_offset + )); } } } diff --git a/ledger/tests/shred.rs b/ledger/tests/shred.rs index 192e36ecf0bc5e..23a1cf83f967f7 100644 --- a/ledger/tests/shred.rs +++ b/ledger/tests/shred.rs @@ -3,7 +3,7 @@ use { solana_entry::entry::Entry, solana_ledger::shred::{ max_entries_per_n_shred, verify_test_data_shred, ProcessShredsStats, Shred, Shredder, - LEGACY_SHRED_DATA_CAPACITY, MAX_DATA_SHREDS_PER_FEC_BLOCK, + DATA_SHREDS_PER_FEC_BLOCK, LEGACY_SHRED_DATA_CAPACITY, }, solana_sdk::{ clock::Slot, @@ -26,7 +26,7 @@ fn test_multi_fec_block_coding() { let slot = 0x1234_5678_9abc_def0; let shredder = Shredder::new(slot, slot - 5, 0, 0).unwrap(); let num_fec_sets = 100; - let num_data_shreds = (MAX_DATA_SHREDS_PER_FEC_BLOCK * num_fec_sets) as usize; + let num_data_shreds = DATA_SHREDS_PER_FEC_BLOCK * num_fec_sets; let keypair0 = Keypair::new(); let keypair1 = Keypair::new(); let tx0 = system_transaction::transfer(&keypair0, &keypair1.pubkey(), 1, Hash::default()); @@ -67,8 +67,8 @@ fn test_multi_fec_block_coding() { let mut all_shreds = vec![]; for i in 0..num_fec_sets { - let shred_start_index = (MAX_DATA_SHREDS_PER_FEC_BLOCK * i) as usize; - let end_index = shred_start_index + MAX_DATA_SHREDS_PER_FEC_BLOCK as usize - 1; + let shred_start_index = DATA_SHREDS_PER_FEC_BLOCK * i; + let end_index = shred_start_index + DATA_SHREDS_PER_FEC_BLOCK - 1; let fec_set_shreds = data_shreds[shred_start_index..=end_index] .iter() .cloned() @@ -99,11 +99,7 @@ fn test_multi_fec_block_coding() { shred_info.insert(i * 2, recovered_shred); } - all_shreds.extend( - shred_info - .into_iter() - .take(MAX_DATA_SHREDS_PER_FEC_BLOCK as usize), - ); + all_shreds.extend(shred_info.into_iter().take(DATA_SHREDS_PER_FEC_BLOCK)); } let result = Shredder::deshred(&all_shreds[..]).unwrap(); @@ -193,11 +189,11 @@ fn setup_different_sized_fec_blocks( let tx0 = system_transaction::transfer(&keypair0, &keypair1.pubkey(), 1, Hash::default()); let entry = Entry::new(&Hash::default(), 1, vec![tx0]); - // Make enough entries for `MAX_DATA_SHREDS_PER_FEC_BLOCK + 2` shreds so one - // fec set will have `MAX_DATA_SHREDS_PER_FEC_BLOCK` shreds and the next + // Make enough entries for `DATA_SHREDS_PER_FEC_BLOCK + 2` shreds so one + // fec set will have `DATA_SHREDS_PER_FEC_BLOCK` shreds and the next // will have 2 shreds. - assert!(MAX_DATA_SHREDS_PER_FEC_BLOCK > 2); - let num_shreds_per_iter = MAX_DATA_SHREDS_PER_FEC_BLOCK as usize + 2; + assert!(DATA_SHREDS_PER_FEC_BLOCK > 2); + let num_shreds_per_iter = DATA_SHREDS_PER_FEC_BLOCK + 2; let num_entries = max_entries_per_n_shred( &entry, num_shreds_per_iter as u64, From 41d8fa9b45c1cf66c760579fb043394b0085aad2 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Fri, 12 Aug 2022 12:30:54 -0500 Subject: [PATCH 022/465] Bump rust-rocksdb to 0.19.0 tag (backport #26949) (#27085) Bump rust-rocksdb to 0.19.0 tag (#26949) (cherry picked from commit 14d9922105f78b2d3ab6ed82e5e38db27dedb76b) Co-authored-by: steviez --- Cargo.lock | 76 +++++++------------------------------ ledger/Cargo.toml | 2 +- ledger/src/blockstore_db.rs | 14 +++++-- programs/bpf/Cargo.lock | 12 +++--- 4 files changed, 31 insertions(+), 73 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index d247d8a12855c7..4103785d580482 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -143,7 +143,7 @@ dependencies = [ "asn1-rs-derive", "asn1-rs-impl", "displaydoc", - "nom 7.0.0", + "nom", "num-traits", "rusticata-macros", "thiserror", @@ -360,9 +360,9 @@ dependencies = [ [[package]] name = "bindgen" -version = "0.59.1" +version = "0.60.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "453c49e5950bb0eb63bb3df640e31618846c89d5b7faa54040d76e98e0134375" +checksum = "062dddbc1ba4aca46de6338e2bf87771414c335f7b2f2036e8f3e9befebf88e6" dependencies = [ "bitflags", "cexpr", @@ -407,18 +407,6 @@ dependencies = [ "typenum", ] -[[package]] -name = "bitvec" -version = "0.19.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8942c8d352ae1838c9dda0b0ca2ab657696ef2232a20147cf1b30ae1a9cb4321" -dependencies = [ - "funty", - "radium", - "tap", - "wyz", -] - [[package]] name = "blake3" version = "1.3.1" @@ -721,11 +709,11 @@ dependencies = [ [[package]] name = "cexpr" -version = "0.5.0" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db507a7679252d2276ed0dd8113c6875ec56d3089f9225b2b42c30cc1f8e5c89" +checksum = "6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766" dependencies = [ - "nom 6.1.2", + "nom", ] [[package]] @@ -1142,7 +1130,7 @@ checksum = "42d4bc9b0db0a0df9ae64634ac5bdefb7afcb534e182275ca0beadbe486701c1" dependencies = [ "asn1-rs", "displaydoc", - "nom 7.0.0", + "nom", "num-bigint 0.4.3", "num-traits", "rusticata-macros", @@ -1580,12 +1568,6 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a06f77d526c1a601b7c4cdd98f54b5eaabffc14d5f2f0296febdc7f357c6d3ba" -[[package]] -name = "funty" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fed34cd105917e91daa4da6b3728c47b068749d6a62c59811f06ed2ac71d9da7" - [[package]] name = "futures" version = "0.1.31" @@ -2427,9 +2409,9 @@ checksum = "c7d73b3f436185384286bd8098d17ec07c9a7d2388a6599f824d8502b529702a" [[package]] name = "librocksdb-sys" -version = "0.6.1+6.28.2" +version = "0.8.0+7.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81bc587013734dadb7cf23468e531aa120788b87243648be42e2d3a072186291" +checksum = "611804e4666a25136fcc5f8cf425ab4d26c7f74ea245ffe92ea23b85b6420b5d" dependencies = [ "bindgen", "bzip2-sys", @@ -2728,18 +2710,6 @@ dependencies = [ "memoffset", ] -[[package]] -name = "nom" -version = "6.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7413f999671bd4745a7b624bd370a569fb6bc574b23c83a3c5ed2e453f3d5e2" -dependencies = [ - "bitvec", - "funty", - "memchr", - "version_check", -] - [[package]] name = "nom" version = "7.0.0" @@ -3635,12 +3605,6 @@ dependencies = [ "proc-macro2 1.0.41", ] -[[package]] -name = "radium" -version = "0.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "941ba9d78d8e2f7ce474c015eea4d9c6d25b6a3327f9832ee29a4de27f91bbb8" - [[package]] name = "rand" version = "0.4.6" @@ -3949,9 +3913,9 @@ dependencies = [ [[package]] name = "rocksdb" -version = "0.18.0" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "620f4129485ff1a7128d184bc687470c21c7951b64779ebc9cfdad3dcd920290" +checksum = "7e9562ea1d70c0cc63a34a22d977753b50cca91cc6b6527750463bd5dd8697bc" dependencies = [ "libc", "librocksdb-sys", @@ -4005,7 +3969,7 @@ version = "4.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "faf0c4a6ece9950b9abdb62b1cfcf2a68b3b67a10ba445b3bb85be2a293d0632" dependencies = [ - "nom 7.0.0", + "nom", ] [[package]] @@ -6865,16 +6829,10 @@ dependencies = [ "chrono", "lazy_static", "libc", - "nom 7.0.0", + "nom", "winapi 0.3.9", ] -[[package]] -name = "tap" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" - [[package]] name = "tar" version = "0.4.38" @@ -7987,12 +7945,6 @@ dependencies = [ "winapi 0.3.9", ] -[[package]] -name = "wyz" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85e60b0d1b5f99db2556934e21937020776a5d31520bf169e851ac44e6420214" - [[package]] name = "x509-parser" version = "0.14.0" @@ -8004,7 +7956,7 @@ dependencies = [ "data-encoding", "der-parser", "lazy_static", - "nom 7.0.0", + "nom", "oid-registry", "rusticata-macros", "thiserror", diff --git a/ledger/Cargo.toml b/ledger/Cargo.toml index c2d18be9451ef7..867752a3083232 100644 --- a/ledger/Cargo.toml +++ b/ledger/Cargo.toml @@ -63,7 +63,7 @@ trees = "0.4.2" [dependencies.rocksdb] # Avoid the vendored bzip2 within rocksdb-sys that can cause linker conflicts # when also using the bzip2 crate -version = "0.18.0" +version = "0.19.0" default-features = false features = ["lz4"] diff --git a/ledger/src/blockstore_db.rs b/ledger/src/blockstore_db.rs index 94064df7a179cd..2e3ec3ba944cc5 100644 --- a/ledger/src/blockstore_db.rs +++ b/ledger/src/blockstore_db.rs @@ -509,7 +509,7 @@ impl Rocks { /// /// Full list of properties that return int values could be found /// [here](https://github.com/facebook/rocksdb/blob/08809f5e6cd9cc4bc3958dd4d59457ae78c76660/include/rocksdb/db.h#L654-L689). - fn get_int_property_cf(&self, cf: &ColumnFamily, name: &str) -> Result { + fn get_int_property_cf(&self, cf: &ColumnFamily, name: &'static std::ffi::CStr) -> Result { match self.db.property_int_value_cf(cf, name) { Ok(Some(value)) => Ok(value.try_into().unwrap()), Ok(None) => Ok(0), @@ -1059,7 +1059,10 @@ impl Database { { let cf = self.cf_handle::(); let iter = self.backend.iterator_cf::(cf, iterator_mode); - Ok(iter.map(|(key, value)| (C::index(&key), value))) + Ok(iter.map(|pair| { + let (key, value) = pair.unwrap(); + (C::index(&key), value) + })) } #[inline] @@ -1153,7 +1156,10 @@ where ) -> Result)> + '_> { let cf = self.handle(); let iter = self.backend.iterator_cf::(cf, iterator_mode); - Ok(iter.map(|(key, value)| (C::index(&key), value))) + Ok(iter.map(|pair| { + let (key, value) = pair.unwrap(); + (C::index(&key), value) + })) } pub fn delete_slot( @@ -1235,7 +1241,7 @@ where /// /// Full list of properties that return int values could be found /// [here](https://github.com/facebook/rocksdb/blob/08809f5e6cd9cc4bc3958dd4d59457ae78c76660/include/rocksdb/db.h#L654-L689). - pub fn get_int_property(&self, name: &str) -> Result { + pub fn get_int_property(&self, name: &'static std::ffi::CStr) -> Result { self.backend.get_int_property_cf(self.handle(), name) } } diff --git a/programs/bpf/Cargo.lock b/programs/bpf/Cargo.lock index 39130a758ca812..c62387093e884f 100644 --- a/programs/bpf/Cargo.lock +++ b/programs/bpf/Cargo.lock @@ -346,9 +346,9 @@ dependencies = [ [[package]] name = "bindgen" -version = "0.59.2" +version = "0.60.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2bd2a9a458e8f4304c52c43ebb0cfbd520289f8379a52e329a38afda99bf8eb8" +checksum = "062dddbc1ba4aca46de6338e2bf87771414c335f7b2f2036e8f3e9befebf88e6" dependencies = [ "bitflags", "cexpr", @@ -2168,9 +2168,9 @@ checksum = "33a33a362ce288760ec6a508b94caaec573ae7d3bbbd91b87aa0bad4456839db" [[package]] name = "librocksdb-sys" -version = "0.6.1+6.28.2" +version = "0.8.0+7.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81bc587013734dadb7cf23468e531aa120788b87243648be42e2d3a072186291" +checksum = "611804e4666a25136fcc5f8cf425ab4d26c7f74ea245ffe92ea23b85b6420b5d" dependencies = [ "bindgen", "bzip2-sys", @@ -3578,9 +3578,9 @@ dependencies = [ [[package]] name = "rocksdb" -version = "0.18.0" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "620f4129485ff1a7128d184bc687470c21c7951b64779ebc9cfdad3dcd920290" +checksum = "7e9562ea1d70c0cc63a34a22d977753b50cca91cc6b6527750463bd5dd8697bc" dependencies = [ "libc", "librocksdb-sys", From 3f51144e012d39dc6e0c1dd31bb5a964f0c00758 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Mon, 15 Aug 2022 16:41:11 +0200 Subject: [PATCH 023/465] test-validator: improve multi-value arg help output (backport #26650) (#27143) test-validator: improve multi-value arg help output (#26650) (cherry picked from commit b28657ff46da537a962076fe2bcdf1079c6ef9f4) Co-authored-by: Trent Nelson --- validator/src/bin/solana-test-validator.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/validator/src/bin/solana-test-validator.rs b/validator/src/bin/solana-test-validator.rs index 84f032e96978fb..f01f7d383bd387 100644 --- a/validator/src/bin/solana-test-validator.rs +++ b/validator/src/bin/solana-test-validator.rs @@ -193,20 +193,20 @@ fn main() { .arg( Arg::with_name("bpf_program") .long("bpf-program") - .value_name("ADDRESS_OR_PATH BPF_PROGRAM.SO") + .value_names(&["ADDRESS_OR_KEYPAIR", "BPF_PROGRAM.SO"]) .takes_value(true) .number_of_values(2) .multiple(true) .help( "Add a BPF program to the genesis configuration. \ If the ledger already exists then this parameter is silently ignored. \ - First argument can be a public key or path to file that can be parsed as a keypair", + First argument can be a pubkey string or path to a keypair", ), ) .arg( Arg::with_name("account") .long("account") - .value_name("ADDRESS FILENAME.JSON") + .value_names(&["ADDRESS", "DUMP.JSON"]) .takes_value(true) .number_of_values(2) .allow_hyphen_values(true) From 40767ec1e7bbf14e74c31eb8560eb0b8c6ab6d58 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Mon, 15 Aug 2022 16:09:14 -0600 Subject: [PATCH 024/465] Increase timeout to reduce the flakyness of rpc signature receving test (backport #27008) (#27156) Increase timeout to reduce the flakyness of rpc signature receving test (#27008) * Increase timeout to reduce the flakyness of rpc signature receving test * Minor fmt fix (cherry picked from commit 52d8a20a843a78cbe350f5a991819d09927a418f) Co-authored-by: Xiang Zhu --- rpc-test/tests/rpc.rs | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/rpc-test/tests/rpc.rs b/rpc-test/tests/rpc.rs index 89df239f6791e6..464560a309b214 100644 --- a/rpc-test/tests/rpc.rs +++ b/rpc-test/tests/rpc.rs @@ -374,7 +374,13 @@ fn test_rpc_subscriptions() { } // Wait for all signature subscriptions - let deadline = Instant::now() + Duration::from_secs(15); + /* Set a large 30-sec timeout here because the timing of the above tokio process is + * highly non-deterministic. The test was too flaky at 15-second timeout. Debugging + * show occasional multi-second delay which could come from multiple sources -- other + * tokio tasks, tokio scheduler, OS scheduler. The async nature makes it hard to + * track down the origin of the delay. + */ + let deadline = Instant::now() + Duration::from_secs(30); while !signature_set.is_empty() { let timeout = deadline.saturating_duration_since(Instant::now()); match status_receiver.recv_timeout(timeout) { From f81fdc83e5c974e841de4a40280faef266b2fd1c Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Tue, 16 Aug 2022 01:50:24 +0000 Subject: [PATCH 025/465] Bump sbf-tools version to v1.29 (backport #26887) (#27150) Bump sbf-tools version to v1.29 Co-authored-by: Dmitri Makarov --- programs/bpf/tests/programs.rs | 24 +++++++++---------- sdk/bpf/c/bpf.mk | 2 +- sdk/bpf/scripts/install.sh | 2 +- sdk/cargo-build-sbf/src/main.rs | 2 +- sdk/cargo-build-sbf/tests/crates.rs | 37 ++++++++++++++++++++++------- 5 files changed, 44 insertions(+), 23 deletions(-) diff --git a/programs/bpf/tests/programs.rs b/programs/bpf/tests/programs.rs index 187580b944e780..a1ac58440ff446 100644 --- a/programs/bpf/tests/programs.rs +++ b/programs/bpf/tests/programs.rs @@ -1629,8 +1629,8 @@ fn assert_instruction_count() { ("noop++", 5), ("relative_call", 210), ("return_data", 980), - ("sanity", 2378), - ("sanity++", 2278), + ("sanity", 2379), + ("sanity++", 2279), ("secp256k1_recover", 25383), ("sha", 1355), ("struct_pass", 108), @@ -1640,21 +1640,21 @@ fn assert_instruction_count() { #[cfg(feature = "bpf_rust")] { programs.extend_from_slice(&[ - ("solana_bpf_rust_128bit", 584), - ("solana_bpf_rust_alloc", 4581), - ("solana_bpf_rust_custom_heap", 469), + ("solana_bpf_rust_128bit", 580), + ("solana_bpf_rust_alloc", 5060), + ("solana_bpf_rust_custom_heap", 509), ("solana_bpf_rust_dep_crate", 2), - ("solana_bpf_rust_external_spend", 338), + ("solana_bpf_rust_external_spend", 378), ("solana_bpf_rust_iter", 108), ("solana_bpf_rust_many_args", 1289), - ("solana_bpf_rust_mem", 2118), - ("solana_bpf_rust_membuiltins", 1539), - ("solana_bpf_rust_noop", 326), + ("solana_bpf_rust_mem", 2158), + ("solana_bpf_rust_membuiltins", 1541), + ("solana_bpf_rust_noop", 366), ("solana_bpf_rust_param_passing", 146), - ("solana_bpf_rust_rand", 429), - ("solana_bpf_rust_sanity", 52290), + ("solana_bpf_rust_rand", 469), + ("solana_bpf_rust_sanity", 52054), ("solana_bpf_rust_secp256k1_recover", 91195), - ("solana_bpf_rust_sha", 25265), + ("solana_bpf_rust_sha", 24081), ]); } diff --git a/sdk/bpf/c/bpf.mk b/sdk/bpf/c/bpf.mk index 541629ad49fcfe..bf0b5fbee4fa61 100644 --- a/sdk/bpf/c/bpf.mk +++ b/sdk/bpf/c/bpf.mk @@ -15,7 +15,7 @@ OUT_DIR ?= ./out OS := $(shell uname) LLVM_DIR = $(LOCAL_PATH)../dependencies/bpf-tools/llvm -LLVM_SYSTEM_INC_DIRS := $(LLVM_DIR)/lib/clang/13.0.0/include +LLVM_SYSTEM_INC_DIRS := $(LLVM_DIR)/lib/clang/14.0.0/include COMPILER_RT_DIR = $(LOCAL_PATH)../dependencies/bpf-tools/rust/lib/rustlib/bpfel-unknown-unknown/lib STD_INC_DIRS := $(LLVM_DIR)/include STD_LIB_DIRS := $(LLVM_DIR)/lib diff --git a/sdk/bpf/scripts/install.sh b/sdk/bpf/scripts/install.sh index 1f1a3c2c5b7a5c..205d98407fcb92 100755 --- a/sdk/bpf/scripts/install.sh +++ b/sdk/bpf/scripts/install.sh @@ -102,7 +102,7 @@ if [[ ! -e criterion-$version.md || ! -e criterion ]]; then fi # Install Rust-BPF -version=v1.28 +version=v1.29 if [[ ! -e bpf-tools-$version.md || ! -e bpf-tools ]]; then ( set -e diff --git a/sdk/cargo-build-sbf/src/main.rs b/sdk/cargo-build-sbf/src/main.rs index 70f1f1796a4e2b..d6437b043414e7 100644 --- a/sdk/cargo-build-sbf/src/main.rs +++ b/sdk/cargo-build-sbf/src/main.rs @@ -826,7 +826,7 @@ fn main() { // The following line is scanned by CI configuration script to // separate cargo caches according to the version of sbf-tools. - let sbf_tools_version = "v1.28"; + let sbf_tools_version = "v1.29"; let version = format!("{}\nsbf-tools {}", crate_version!(), sbf_tools_version); let matches = clap::Command::new(crate_name!()) .about(crate_description!()) diff --git a/sdk/cargo-build-sbf/tests/crates.rs b/sdk/cargo-build-sbf/tests/crates.rs index 845928e8aa6735..d71a11410d8b83 100644 --- a/sdk/cargo-build-sbf/tests/crates.rs +++ b/sdk/cargo-build-sbf/tests/crates.rs @@ -7,7 +7,7 @@ use std::{ #[macro_use] extern crate serial_test; -fn run_cargo_build(crate_name: &str, extra_args: &[&str]) -> Output { +fn run_cargo_build(crate_name: &str, extra_args: &[&str], test_name: &str) -> Output { let cwd = env::current_dir().expect("Unable to get current working directory"); let root = cwd .parent() @@ -20,30 +20,44 @@ fn run_cargo_build(crate_name: &str, extra_args: &[&str]) -> Output { .join(crate_name) .join("Cargo.toml"); let toml = format!("{}", toml.display()); - let mut args = vec!["--sbf-sdk", "../bpf", "--manifest-path", &toml]; + let mut args = vec!["-v", "--sbf-sdk", "../bpf", "--manifest-path", &toml]; for arg in extra_args { args.push(arg); } + args.push("--"); + args.push("-vv"); let cargo_build_sbf = root.join("target").join("debug").join("cargo-build-sbf"); + env::set_var("RUST_LOG", "debug"); let output = Command::new(cargo_build_sbf) .args(&args) .output() .expect("Error running cargo-build-sbf"); if !output.status.success() { - eprintln!("--- stdout ---"); + eprintln!("--- stdout of {} ---", test_name); io::stderr().write_all(&output.stdout).unwrap(); - eprintln!("--- stderr ---"); + eprintln!("--- stderr of {} ---", test_name); io::stderr().write_all(&output.stderr).unwrap(); eprintln!("--------------"); } output } +fn clean_target(crate_name: &str) { + let cwd = env::current_dir().expect("Unable to get current working directory"); + let target = cwd + .join("tests") + .join("crates") + .join(crate_name) + .join("target"); + fs::remove_dir_all(target).expect("Failed to remove target dir"); +} + #[test] #[serial] fn test_build() { - let output = run_cargo_build("noop", &[]); + let output = run_cargo_build("noop", &[], "test_build"); assert!(output.status.success()); + clean_target("noop"); } #[test] @@ -55,7 +69,7 @@ fn test_dump() { .status() .expect("Unable to install rustfilt required for --dump option") .success()); - let output = run_cargo_build("noop", &["--dump"]); + let output = run_cargo_build("noop", &["--dump"], "test_dump"); assert!(output.status.success()); let cwd = env::current_dir().expect("Unable to get current working directory"); let dump = cwd @@ -66,23 +80,29 @@ fn test_dump() { .join("deploy") .join("noop-dump.txt"); assert!(dump.exists()); + clean_target("noop"); } #[test] #[serial] fn test_out_dir() { - let output = run_cargo_build("noop", &["--sbf-out-dir", "tmp_out"]); + let output = run_cargo_build("noop", &["--sbf-out-dir", "tmp_out"], "test_out_dir"); assert!(output.status.success()); let cwd = env::current_dir().expect("Unable to get current working directory"); let dir = cwd.join("tmp_out"); assert!(dir.exists()); fs::remove_dir_all("tmp_out").expect("Failed to remove tmp_out dir"); + clean_target("noop"); } #[test] #[serial] fn test_generate_child_script_on_failre() { - let output = run_cargo_build("fail", &["--generate-child-script-on-failure"]); + let output = run_cargo_build( + "fail", + &["--generate-child-script-on-failure"], + "test_generate_child_script_on_failre", + ); assert!(!output.status.success()); let cwd = env::current_dir().expect("Unable to get current working directory"); let scr = cwd @@ -92,4 +112,5 @@ fn test_generate_child_script_on_failre() { .join("cargo-build-sbf-child-script-cargo.sh"); assert!(scr.exists()); fs::remove_file(scr).expect("Failed to remove script"); + clean_target("fail"); } From a6765be27a0cf4ea192dc75a02f08215623857ae Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Tue, 16 Aug 2022 06:27:21 +0000 Subject: [PATCH 026/465] Fix local-cluster for QUIC more (backport #27096) (#27103) Fix local-cluster for QUIC more (#27096) (cherry picked from commit 1aa8e06fd514dad8d931e9187dc49c34d5049257) Co-authored-by: Tyera Eulberg --- local-cluster/src/cluster_tests.rs | 2 +- local-cluster/src/local_cluster.rs | 6 +++--- local-cluster/tests/local_cluster.rs | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/local-cluster/src/cluster_tests.rs b/local-cluster/src/cluster_tests.rs index a0856b7db5caa3..7f8c4331a95afb 100644 --- a/local-cluster/src/cluster_tests.rs +++ b/local-cluster/src/cluster_tests.rs @@ -43,7 +43,7 @@ use { }, }; -fn get_client_facing_addr(contact_info: &ContactInfo) -> (SocketAddr, SocketAddr) { +pub fn get_client_facing_addr(contact_info: &ContactInfo) -> (SocketAddr, SocketAddr) { let (rpc, mut tpu) = contact_info.client_facing_addr(); // QUIC certificate authentication requires the IP Address to match. ContactInfo might have // 0.0.0.0 as the IP instead of 127.0.0.1. diff --git a/local-cluster/src/local_cluster.rs b/local-cluster/src/local_cluster.rs index 6f3b13e5e0aed5..5c0196fecd0a1a 100644 --- a/local-cluster/src/local_cluster.rs +++ b/local-cluster/src/local_cluster.rs @@ -426,7 +426,7 @@ impl LocalCluster { mut voting_keypair: Option>, socket_addr_space: SocketAddrSpace, ) -> Pubkey { - let (rpc, tpu) = self.entry_point_info.client_facing_addr(); + let (rpc, tpu) = cluster_tests::get_client_facing_addr(&self.entry_point_info); let client = ThinClient::new(rpc, tpu, self.connection_cache.clone()); // Must have enough tokens to fund vote account and set delegate @@ -512,7 +512,7 @@ impl LocalCluster { } pub fn transfer(&self, source_keypair: &Keypair, dest_pubkey: &Pubkey, lamports: u64) -> u64 { - let (rpc, tpu) = self.entry_point_info.client_facing_addr(); + let (rpc, tpu) = cluster_tests::get_client_facing_addr(&self.entry_point_info); let client = ThinClient::new(rpc, tpu, self.connection_cache.clone()); Self::transfer_with_client(&client, source_keypair, dest_pubkey, lamports) } @@ -759,7 +759,7 @@ impl Cluster for LocalCluster { fn get_validator_client(&self, pubkey: &Pubkey) -> Option { self.validators.get(pubkey).map(|f| { - let (rpc, tpu) = f.info.contact_info.client_facing_addr(); + let (rpc, tpu) = cluster_tests::get_client_facing_addr(&f.info.contact_info); ThinClient::new(rpc, tpu, self.connection_cache.clone()) }) } diff --git a/local-cluster/tests/local_cluster.rs b/local-cluster/tests/local_cluster.rs index d3956d7adc7fc1..072239f5d951ab 100644 --- a/local-cluster/tests/local_cluster.rs +++ b/local-cluster/tests/local_cluster.rs @@ -191,7 +191,7 @@ fn test_local_cluster_signature_subscribe() { .unwrap(); let non_bootstrap_info = cluster.get_contact_info(&non_bootstrap_id).unwrap(); - let (rpc, tpu) = non_bootstrap_info.client_facing_addr(); + let (rpc, tpu) = cluster_tests::get_client_facing_addr(non_bootstrap_info); let tx_client = ThinClient::new(rpc, tpu, cluster.connection_cache.clone()); let (blockhash, _) = tx_client @@ -418,7 +418,7 @@ fn test_mainnet_beta_cluster_type() { .unwrap(); assert_eq!(cluster_nodes.len(), 1); - let (rpc, tpu) = cluster.entry_point_info.client_facing_addr(); + let (rpc, tpu) = cluster_tests::get_client_facing_addr(&cluster.entry_point_info); let client = ThinClient::new(rpc, tpu, cluster.connection_cache.clone()); // Programs that are available at epoch 0 From 7ecdcf6138a862f0bc9cec81de0e96f3c97188a1 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Tue, 16 Aug 2022 15:49:03 +0000 Subject: [PATCH 027/465] adjusts max coding shreds per slot (backport #27083) (#27117) adjusts max coding shreds per slot (#27083) As a consequence of removing buffering when generating coding shreds: https://github.com/solana-labs/solana/pull/25807 more coding shreds are generated than data shreds, and so MAX_CODE_SHREDS_PER_SLOT needs to be adjusted accordingly. The respective value is tied to ERASURE_BATCH_SIZE. (cherry picked from commit b3b57a0f07844c6e9a9e3ef317bd513d7dbc84ab) Co-authored-by: behzad nouri --- ledger/src/shred.rs | 2 ++ ledger/src/shred/legacy.rs | 9 +++++---- ledger/src/shred/shred_code.rs | 4 +++- ledger/src/shredder.rs | 22 +++++++++++++++++++--- 4 files changed, 29 insertions(+), 8 deletions(-) diff --git a/ledger/src/shred.rs b/ledger/src/shred.rs index 2656367db79493..5556b39068cabd 100644 --- a/ledger/src/shred.rs +++ b/ledger/src/shred.rs @@ -49,6 +49,8 @@ //! So, given a) - c), we must restrict data shred's payload length such that the entire coding //! payload can fit into one coding shred / packet. +#[cfg(test)] +pub(crate) use shred_code::MAX_CODE_SHREDS_PER_SLOT; pub(crate) use shred_data::ShredData; pub use { self::stats::{ProcessShredsStats, ShredFetchStats}, diff --git a/ledger/src/shred/legacy.rs b/ledger/src/shred/legacy.rs index 71c4203785417f..fdf97b8b1c6a2a 100644 --- a/ledger/src/shred/legacy.rs +++ b/ledger/src/shred/legacy.rs @@ -325,7 +325,7 @@ impl ShredCode { mod test { use { super::*, - crate::shred::{ShredType, MAX_DATA_SHREDS_PER_SLOT}, + crate::shred::{shred_code::MAX_CODE_SHREDS_PER_SLOT, ShredType, MAX_DATA_SHREDS_PER_SLOT}, matches::assert_matches, }; @@ -433,10 +433,10 @@ mod test { } { let mut shred = shred.clone(); - shred.common_header.index = MAX_DATA_SHREDS_PER_SLOT as u32; + shred.common_header.index = MAX_CODE_SHREDS_PER_SLOT as u32; assert_matches!( shred.sanitize(), - Err(Error::InvalidShredIndex(ShredType::Code, 32768)) + Err(Error::InvalidShredIndex(ShredType::Code, 557_056)) ); } // pos >= num_coding is invalid. @@ -454,7 +454,7 @@ mod test { { let mut shred = shred.clone(); shred.common_header.fec_set_index = MAX_DATA_SHREDS_PER_SLOT as u32 - 2; - shred.coding_header.num_data_shreds = 2; + shred.coding_header.num_data_shreds = 3; shred.coding_header.num_coding_shreds = 4; shred.coding_header.position = 1; shred.common_header.index = MAX_DATA_SHREDS_PER_SLOT as u32 - 2; @@ -463,6 +463,7 @@ mod test { Err(Error::InvalidErasureShardIndex { .. }) ); + shred.coding_header.num_data_shreds = 2; shred.coding_header.num_coding_shreds = 2000; assert_matches!(shred.sanitize(), Err(Error::InvalidNumCodingShreds(2000))); diff --git a/ledger/src/shred/shred_code.rs b/ledger/src/shred/shred_code.rs index cd5d99e86a33e4..538bb25427f38f 100644 --- a/ledger/src/shred/shred_code.rs +++ b/ledger/src/shred/shred_code.rs @@ -10,7 +10,9 @@ use { static_assertions::const_assert_eq, }; -pub(super) const MAX_CODE_SHREDS_PER_SLOT: usize = MAX_DATA_SHREDS_PER_SLOT; +// See ERASURE_BATCH_SIZE. +const_assert_eq!(MAX_CODE_SHREDS_PER_SLOT, 32_768 * 17); +pub(crate) const MAX_CODE_SHREDS_PER_SLOT: usize = MAX_DATA_SHREDS_PER_SLOT * 17; const_assert_eq!(ShredCode::SIZE_OF_PAYLOAD, 1228); diff --git a/ledger/src/shredder.rs b/ledger/src/shredder.rs index ea7d869206bfb4..d3a50cb82dc1ca 100644 --- a/ledger/src/shredder.rs +++ b/ledger/src/shredder.rs @@ -378,9 +378,12 @@ fn get_fec_set_offsets( mod tests { use { super::*, - crate::shred::{ - self, max_entries_per_n_shred, max_ticks_per_n_shreds, verify_test_data_shred, - ShredType, + crate::{ + blockstore::MAX_DATA_SHREDS_PER_SLOT, + shred::{ + self, max_entries_per_n_shred, max_ticks_per_n_shreds, verify_test_data_shred, + ShredType, MAX_CODE_SHREDS_PER_SLOT, + }, }, bincode::serialized_size, matches::assert_matches, @@ -1105,4 +1108,17 @@ mod tests { )); } } + + #[test] + fn test_max_shreds_per_slot() { + for num_data_shreds in 0..128 { + let num_coding_shreds = get_erasure_batch_size(num_data_shreds) + .checked_sub(num_data_shreds) + .unwrap(); + assert!( + MAX_DATA_SHREDS_PER_SLOT * num_coding_shreds + <= MAX_CODE_SHREDS_PER_SLOT * num_data_shreds + ); + } + } } From 83e060c94cbb9ae24accfc6f05221e4343f9a440 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Tue, 16 Aug 2022 18:46:00 +0000 Subject: [PATCH 028/465] adds Shred{Code,Data}::SIZE_OF_HEADERS constant (backport #27144) (#27178) adds Shred{Code,Data}::SIZE_OF_HEADERS trait constants (#27144) (cherry picked from commit 0e306093940610e656ce8b933674f7010ed4d96f) Co-authored-by: behzad nouri --- ledger/src/shred/legacy.rs | 37 +++++++++++++++++++------------------ ledger/src/shred/merkle.rs | 36 +++++++++++++++++++----------------- ledger/src/shred/traits.rs | 2 ++ 3 files changed, 40 insertions(+), 35 deletions(-) diff --git a/ledger/src/shred/legacy.rs b/ledger/src/shred/legacy.rs index fdf97b8b1c6a2a..1096ef1f542d53 100644 --- a/ledger/src/shred/legacy.rs +++ b/ledger/src/shred/legacy.rs @@ -20,15 +20,15 @@ const_assert_eq!(ShredData::SIZE_OF_PAYLOAD, ShredCode::SIZE_OF_PAYLOAD); const_assert_eq!(ShredData::SIZE_OF_PAYLOAD, 1228); const_assert_eq!(ShredData::CAPACITY, 1051); -// SIZE_OF_CODING_SHRED_HEADERS bytes at the end of data shreds +// ShredCode::SIZE_OF_HEADERS bytes at the end of data shreds // is never used and is not part of erasure coding. const_assert_eq!(SIZE_OF_ERASURE_ENCODED_SLICE, 1139); pub(super) const SIZE_OF_ERASURE_ENCODED_SLICE: usize = - ShredCode::SIZE_OF_PAYLOAD - SIZE_OF_CODING_SHRED_HEADERS; + ShredCode::SIZE_OF_PAYLOAD - ShredCode::SIZE_OF_HEADERS; // Layout: {common, data} headers | data | zero padding -// Everything up to SIZE_OF_CODING_SHRED_HEADERS bytes at the end (which is -// part of zero padding) is erasure coded. +// Everything up to ShredCode::SIZE_OF_HEADERS bytes at the end (which is part +// of zero padding) is erasure coded. // All payload past signature, including the entirety of zero paddings, is // signed. #[derive(Clone, Debug, Eq, PartialEq)] @@ -52,6 +52,7 @@ impl Shred for ShredData { // Legacy data shreds are always zero padded and // the same size as coding shreds. const SIZE_OF_PAYLOAD: usize = shred_code::ShredCode::SIZE_OF_PAYLOAD; + const SIZE_OF_HEADERS: usize = SIZE_OF_DATA_SHRED_HEADERS; fn from_payload(mut payload: Vec) -> Result { let mut cursor = Cursor::new(&payload[..]); @@ -64,7 +65,7 @@ impl Shred for ShredData { // Repair packets have nonce at the end of packet payload; see: // https://github.com/solana-labs/solana/pull/10109 // https://github.com/solana-labs/solana/pull/16602 - if payload.len() < SIZE_OF_DATA_SHRED_HEADERS { + if payload.len() < Self::SIZE_OF_HEADERS { return Err(Error::InvalidPayloadSize(payload.len())); } payload.resize(Self::SIZE_OF_PAYLOAD, 0u8); @@ -116,6 +117,7 @@ impl Shred for ShredData { impl Shred for ShredCode { impl_shred_common!(); const SIZE_OF_PAYLOAD: usize = shred_code::ShredCode::SIZE_OF_PAYLOAD; + const SIZE_OF_HEADERS: usize = SIZE_OF_CODING_SHRED_HEADERS; fn from_payload(mut payload: Vec) -> Result { let mut cursor = Cursor::new(&payload[..]); @@ -147,10 +149,9 @@ impl Shred for ShredCode { return Err(Error::InvalidPayloadSize(self.payload.len())); } let mut shard = self.payload; - // SIZE_OF_CODING_SHRED_HEADERS bytes at the beginning of the - // coding shreds contains the header and is not part of erasure - // coding. - shard.drain(..SIZE_OF_CODING_SHRED_HEADERS); + // ShredCode::SIZE_OF_HEADERS bytes at the beginning of the coding + // shreds contains the header and is not part of erasure coding. + shard.drain(..Self::SIZE_OF_HEADERS); Ok(shard) } @@ -158,7 +159,7 @@ impl Shred for ShredCode { if self.payload.len() != Self::SIZE_OF_PAYLOAD { return Err(Error::InvalidPayloadSize(self.payload.len())); } - Ok(&self.payload[SIZE_OF_CODING_SHRED_HEADERS..]) + Ok(&self.payload[Self::SIZE_OF_HEADERS..]) } fn sanitize(&self) -> Result<(), Error> { @@ -185,15 +186,15 @@ impl ShredDataTrait for ShredData { let size = usize::from(self.data_header.size); #[allow(clippy::manual_range_contains)] if size > self.payload.len() - || size < SIZE_OF_DATA_SHRED_HEADERS - || size > SIZE_OF_DATA_SHRED_HEADERS + Self::CAPACITY + || size < Self::SIZE_OF_HEADERS + || size > Self::SIZE_OF_HEADERS + Self::CAPACITY { return Err(Error::InvalidDataSize { size: self.data_header.size, payload: self.payload.len(), }); } - Ok(&self.payload[SIZE_OF_DATA_SHRED_HEADERS..size]) + Ok(&self.payload[Self::SIZE_OF_HEADERS..size]) } // Only for tests. @@ -214,7 +215,7 @@ impl ShredCodeTrait for ShredCode { impl ShredData { // Maximum size of ledger data that can be embedded in a data-shred. pub(super) const CAPACITY: usize = - Self::SIZE_OF_PAYLOAD - SIZE_OF_DATA_SHRED_HEADERS - SIZE_OF_CODING_SHRED_HEADERS; + Self::SIZE_OF_PAYLOAD - Self::SIZE_OF_HEADERS - ShredCode::SIZE_OF_HEADERS; pub(super) fn new_from_data( slot: Slot, @@ -235,7 +236,7 @@ impl ShredData { version, fec_set_index, }; - let size = (data.len() + SIZE_OF_DATA_SHRED_HEADERS) as u16; + let size = (data.len() + Self::SIZE_OF_HEADERS) as u16; let flags = flags | unsafe { ShredFlags::from_bits_unchecked( @@ -254,7 +255,7 @@ impl ShredData { bincode::serialize_into(&mut cursor, &data_header).unwrap(); // TODO: Need to check if data is too large! let offset = cursor.position() as usize; - debug_assert_eq!(offset, SIZE_OF_DATA_SHRED_HEADERS); + debug_assert_eq!(offset, Self::SIZE_OF_HEADERS); payload[offset..offset + data.len()].copy_from_slice(data); Self { common_header, @@ -271,7 +272,7 @@ impl ShredData { pub(super) fn resize_stored_shred(mut shred: Vec) -> Result, Error> { // Old shreds might have been extra zero padded. - if !(SIZE_OF_DATA_SHRED_HEADERS..=ShredCode::SIZE_OF_PAYLOAD).contains(&shred.len()) { + if !(Self::SIZE_OF_HEADERS..=Self::SIZE_OF_PAYLOAD).contains(&shred.len()) { return Err(Error::InvalidPayloadSize(shred.len())); } shred.resize(Self::SIZE_OF_PAYLOAD, 0u8); @@ -310,7 +311,7 @@ impl ShredCode { // Tests may have an empty parity_shard. if !parity_shard.is_empty() { let offset = cursor.position() as usize; - debug_assert_eq!(offset, SIZE_OF_CODING_SHRED_HEADERS); + debug_assert_eq!(offset, Self::SIZE_OF_HEADERS); payload[offset..].copy_from_slice(parity_shard); } Self { diff --git a/ledger/src/shred/merkle.rs b/ledger/src/shred/merkle.rs index 7eb3bf2d69fe16..5529fcf3a6c3ba 100644 --- a/ledger/src/shred/merkle.rs +++ b/ledger/src/shred/merkle.rs @@ -76,12 +76,12 @@ impl ShredData { // Maximum size of ledger data that can be embedded in a data-shred. // Also equal to: // ShredCode::size_of_erasure_encoded_slice(proof_size).unwrap() - // - SIZE_OF_DATA_SHRED_HEADERS + // - ShredData::SIZE_OF_HEADERS // + SIZE_OF_SIGNATURE pub(super) fn capacity(proof_size: u8) -> Result { Self::SIZE_OF_PAYLOAD .checked_sub( - SIZE_OF_DATA_SHRED_HEADERS + Self::SIZE_OF_HEADERS + SIZE_OF_MERKLE_ROOT + usize::from(proof_size) * SIZE_OF_MERKLE_PROOF_ENTRY, ) @@ -90,7 +90,7 @@ impl ShredData { pub(super) fn get_signed_message_range(proof_size: u8) -> Option> { let data_buffer_size = Self::capacity(proof_size).ok()?; - let offset = SIZE_OF_DATA_SHRED_HEADERS + data_buffer_size; + let offset = Self::SIZE_OF_HEADERS + data_buffer_size; Some(offset..offset + SIZE_OF_MERKLE_ROOT) } @@ -121,7 +121,7 @@ impl ShredCode { // generated. Coding shred headers cannot be erasure coded either. Self::SIZE_OF_PAYLOAD .checked_sub( - SIZE_OF_CODING_SHRED_HEADERS + Self::SIZE_OF_HEADERS + SIZE_OF_MERKLE_ROOT + SIZE_OF_MERKLE_PROOF_ENTRY * usize::from(proof_size), ) @@ -133,7 +133,7 @@ impl ShredCode { let shard_size = Self::size_of_erasure_encoded_slice(proof_size)?; let chunk = self .payload - .get(SIZE_OF_SIGNATURE..SIZE_OF_CODING_SHRED_HEADERS + shard_size) + .get(SIZE_OF_SIGNATURE..Self::SIZE_OF_HEADERS + shard_size) .ok_or(Error::InvalidPayloadSize(self.payload.len()))?; Ok(hashv(&[MERKLE_HASH_PREFIX_LEAF, chunk])) } @@ -146,7 +146,7 @@ impl ShredCode { pub(super) fn get_signed_message_range(proof_size: u8) -> Option> { let offset = - SIZE_OF_CODING_SHRED_HEADERS + Self::size_of_erasure_encoded_slice(proof_size).ok()?; + Self::SIZE_OF_HEADERS + Self::size_of_erasure_encoded_slice(proof_size).ok()?; Some(offset..offset + SIZE_OF_MERKLE_ROOT) } @@ -161,12 +161,13 @@ impl Shred for ShredData { impl_shred_common!(); // Also equal to: - // SIZE_OF_DATA_SHRED_HEADERS + // ShredData::SIZE_OF_HEADERS // + ShredData::capacity(proof_size).unwrap() // + SIZE_OF_MERKLE_ROOT // + usize::from(proof_size) * SIZE_OF_MERKLE_PROOF_ENTRY const SIZE_OF_PAYLOAD: usize = - ShredCode::SIZE_OF_PAYLOAD - SIZE_OF_CODING_SHRED_HEADERS + SIZE_OF_SIGNATURE; + ShredCode::SIZE_OF_PAYLOAD - ShredCode::SIZE_OF_HEADERS + SIZE_OF_SIGNATURE; + const SIZE_OF_HEADERS: usize = SIZE_OF_DATA_SHRED_HEADERS; fn from_payload(mut payload: Vec) -> Result { if payload.len() < Self::SIZE_OF_PAYLOAD { @@ -213,7 +214,7 @@ impl Shred for ShredData { let proof_size = self.proof_size()?; let data_buffer_size = Self::capacity(proof_size)?; let mut shard = self.payload; - shard.truncate(SIZE_OF_DATA_SHRED_HEADERS + data_buffer_size); + shard.truncate(Self::SIZE_OF_HEADERS + data_buffer_size); shard.drain(0..SIZE_OF_SIGNATURE); Ok(shard) } @@ -225,7 +226,7 @@ impl Shred for ShredData { let proof_size = self.proof_size()?; let data_buffer_size = Self::capacity(proof_size)?; self.payload - .get(SIZE_OF_SIGNATURE..SIZE_OF_DATA_SHRED_HEADERS + data_buffer_size) + .get(SIZE_OF_SIGNATURE..Self::SIZE_OF_HEADERS + data_buffer_size) .ok_or(Error::InvalidPayloadSize(self.payload.len())) } @@ -252,6 +253,7 @@ impl Shred for ShredData { impl Shred for ShredCode { impl_shred_common!(); const SIZE_OF_PAYLOAD: usize = shred_code::ShredCode::SIZE_OF_PAYLOAD; + const SIZE_OF_HEADERS: usize = SIZE_OF_CODING_SHRED_HEADERS; fn from_payload(mut payload: Vec) -> Result { let mut cursor = Cursor::new(&payload[..]); @@ -296,7 +298,7 @@ impl Shred for ShredCode { let proof_size = self.proof_size()?; let shard_size = Self::size_of_erasure_encoded_slice(proof_size)?; let mut shard = self.payload; - shard.drain(..SIZE_OF_CODING_SHRED_HEADERS); + shard.drain(..Self::SIZE_OF_HEADERS); shard.truncate(shard_size); Ok(shard) } @@ -308,7 +310,7 @@ impl Shred for ShredCode { let proof_size = self.proof_size()?; let shard_size = Self::size_of_erasure_encoded_slice(proof_size)?; self.payload - .get(SIZE_OF_CODING_SHRED_HEADERS..SIZE_OF_CODING_SHRED_HEADERS + shard_size) + .get(Self::SIZE_OF_HEADERS..Self::SIZE_OF_HEADERS + shard_size) .ok_or(Error::InvalidPayloadSize(self.payload.len())) } @@ -343,15 +345,15 @@ impl ShredDataTrait for ShredData { let data_buffer_size = Self::capacity(proof_size)?; let size = usize::from(self.data_header.size); if size > self.payload.len() - || size < SIZE_OF_DATA_SHRED_HEADERS - || size > SIZE_OF_DATA_SHRED_HEADERS + data_buffer_size + || size < Self::SIZE_OF_HEADERS + || size > Self::SIZE_OF_HEADERS + data_buffer_size { return Err(Error::InvalidDataSize { size: self.data_header.size, payload: self.payload.len(), }); } - Ok(&self.payload[SIZE_OF_DATA_SHRED_HEADERS..size]) + Ok(&self.payload[Self::SIZE_OF_HEADERS..size]) } // Only for tests. @@ -439,7 +441,7 @@ mod test { // Total size of a data shred including headers and merkle branch. fn shred_data_size_of_payload(proof_size: u8) -> usize { - SIZE_OF_DATA_SHRED_HEADERS + ShredData::SIZE_OF_HEADERS + ShredData::capacity(proof_size).unwrap() + SIZE_OF_MERKLE_ROOT + usize::from(proof_size) * SIZE_OF_MERKLE_PROOF_ENTRY @@ -451,7 +453,7 @@ mod test { // size of erasure encoded header. fn shred_data_capacity(proof_size: u8) -> usize { const SIZE_OF_ERASURE_ENCODED_HEADER: usize = - SIZE_OF_DATA_SHRED_HEADERS - SIZE_OF_SIGNATURE; + ShredData::SIZE_OF_HEADERS - SIZE_OF_SIGNATURE; ShredCode::size_of_erasure_encoded_slice(proof_size).unwrap() - SIZE_OF_ERASURE_ENCODED_HEADER } diff --git a/ledger/src/shred/traits.rs b/ledger/src/shred/traits.rs index 70e049113d8670..b5326b62a74de0 100644 --- a/ledger/src/shred/traits.rs +++ b/ledger/src/shred/traits.rs @@ -7,6 +7,8 @@ pub(super) trait Shred: Sized { // Total size of payload including headers, merkle // branches (if any), zero paddings, etc. const SIZE_OF_PAYLOAD: usize; + // Size of common and code/data headers. + const SIZE_OF_HEADERS: usize; fn from_payload(shred: Vec) -> Result; fn common_header(&self) -> &ShredCommonHeader; From a13b8a103fdbc1c132c8deb09fbe318938f01d4a Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Tue, 16 Aug 2022 20:02:59 +0000 Subject: [PATCH 029/465] Add stats for readonly cache evicts (backport #26938) (#27159) Add stats for readonly cache evicts (#26938) * add stats for readonly cache evicts * bump up account cache to 400M * aggregate num_evicts in the loop (cherry picked from commit 1a90cffabed470b9e96085a916316c69a7fd54ea) Co-authored-by: HaoranYi --- runtime/src/accounts_db.rs | 9 +++++++-- runtime/src/read_only_accounts_cache.rs | 11 +++++++++-- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/runtime/src/accounts_db.rs b/runtime/src/accounts_db.rs index fd57db023e59e6..7bcb71b13308f1 100644 --- a/runtime/src/accounts_db.rs +++ b/runtime/src/accounts_db.rs @@ -1902,7 +1902,7 @@ impl AccountsDb { num_hash_scan_passes: Option, ) -> Self { let num_threads = get_thread_count(); - const MAX_READ_ONLY_CACHE_DATA_SIZE: usize = 200_000_000; + const MAX_READ_ONLY_CACHE_DATA_SIZE: usize = 400_000_000; // 400M bytes let mut temp_accounts_hash_cache_path = None; let accounts_hash_cache_path = accounts_hash_cache_path.unwrap_or_else(|| { @@ -7640,7 +7640,7 @@ impl AccountsDb { fn report_store_timings(&self) { if self.stats.last_store_report.should_update(1000) { - let (read_only_cache_hits, read_only_cache_misses) = + let (read_only_cache_hits, read_only_cache_misses, read_only_cache_evicts) = self.read_only_accounts_cache.get_and_reset_stats(); datapoint_info!( "accounts_db_store_timings", @@ -7707,6 +7707,11 @@ impl AccountsDb { read_only_cache_misses, i64 ), + ( + "read_only_accounts_cache_evicts", + read_only_cache_evicts, + i64 + ), ( "calc_stored_meta_us", self.stats.calc_stored_meta.swap(0, Ordering::Relaxed), diff --git a/runtime/src/read_only_accounts_cache.rs b/runtime/src/read_only_accounts_cache.rs index f58eb70a9ef382..ed35f24fbfbd2d 100644 --- a/runtime/src/read_only_accounts_cache.rs +++ b/runtime/src/read_only_accounts_cache.rs @@ -38,6 +38,7 @@ pub(crate) struct ReadOnlyAccountsCache { data_size: AtomicUsize, hits: AtomicU64, misses: AtomicU64, + evicts: AtomicU64, } impl ReadOnlyAccountsCache { @@ -49,6 +50,7 @@ impl ReadOnlyAccountsCache { data_size: AtomicUsize::default(), hits: AtomicU64::default(), misses: AtomicU64::default(), + evicts: AtomicU64::default(), } } @@ -107,13 +109,16 @@ impl ReadOnlyAccountsCache { } }; // Evict entries from the front of the queue. + let mut num_evicts = 0; while self.data_size.load(Ordering::Relaxed) > self.max_data_size { let (pubkey, slot) = match self.queue.lock().unwrap().get_first() { None => break, Some(key) => *key, }; + num_evicts += 1; self.remove(pubkey, slot); } + self.evicts.fetch_add(num_evicts, Ordering::Relaxed); } pub(crate) fn remove(&self, pubkey: Pubkey, slot: Slot) -> Option { @@ -135,10 +140,12 @@ impl ReadOnlyAccountsCache { self.data_size.load(Ordering::Relaxed) } - pub(crate) fn get_and_reset_stats(&self) -> (u64, u64) { + pub(crate) fn get_and_reset_stats(&self) -> (u64, u64, u64) { let hits = self.hits.swap(0, Ordering::Relaxed); let misses = self.misses.swap(0, Ordering::Relaxed); - (hits, misses) + let evicts = self.evicts.swap(0, Ordering::Relaxed); + + (hits, misses, evicts) } } From 1797e90664a5f8928efd3f8a15fa8278b13168c9 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Tue, 16 Aug 2022 22:11:56 +0000 Subject: [PATCH 030/465] reverts wide fanout in broadcast when the root node is down (backport #26359) (#27183) reverts wide fanout in broadcast when the root node is down (#26359) A change included in https://github.com/solana-labs/solana/pull/20480 was that when the root node in turbine broadcast tree is down, the leader will broadcast the shred to all nodes in the first layer. The intention was to mitigate the impact of dead nodes on shreds propagation, because if the root node is down, then the entire cluster will miss out the shred. On the other hand, if x% of stake is down, this will cause 200*x% + 1 packets/shreds ratio at the broadcast stage which might contribute to line-rate saturation and packet drop. To avoid this bandwidth saturation issue, this commit reverts that logic and always broadcasts shreds from the leader only to the root node. As before we rely on erasure codes to recover shreds lost due to staked nodes being offline. (cherry picked from commit 3b87aa922720b151632bb38ee08b2622713822ff) Co-authored-by: behzad nouri --- core/src/broadcast_stage.rs | 20 +++---- .../broadcast_duplicates_run.rs | 21 +------ core/src/cluster_nodes.rs | 59 ++----------------- 3 files changed, 16 insertions(+), 84 deletions(-) diff --git a/core/src/broadcast_stage.rs b/core/src/broadcast_stage.rs index 18ab25a0b914c9..ba4c33fa38cc46 100644 --- a/core/src/broadcast_stage.rs +++ b/core/src/broadcast_stage.rs @@ -14,7 +14,10 @@ use { }, crossbeam_channel::{unbounded, Receiver, RecvError, RecvTimeoutError, Sender}, itertools::Itertools, - solana_gossip::cluster_info::{ClusterInfo, ClusterInfoError, DATA_PLANE_FANOUT}, + solana_gossip::{ + cluster_info::{ClusterInfo, ClusterInfoError}, + contact_info::ContactInfo, + }, solana_ledger::{blockstore::Blockstore, shred::Shred}, solana_measure::measure::Measure, solana_metrics::{inc_new_counter_error, inc_new_counter_info}, @@ -32,7 +35,6 @@ use { }, std::{ collections::{HashMap, HashSet}, - iter::repeat, net::UdpSocket, sync::{ atomic::{AtomicBool, Ordering}, @@ -390,8 +392,8 @@ fn update_peer_stats( } } -/// broadcast messages from the leader to layer 1 nodes -/// # Remarks +/// Broadcasts shreds from the leader (i.e. this node) to the root of the +/// turbine retransmit tree for each shred. pub fn broadcast_shreds( s: &UdpSocket, shreds: &[Shred], @@ -416,14 +418,10 @@ pub fn broadcast_shreds( let cluster_nodes = cluster_nodes_cache.get(slot, &root_bank, &working_bank, cluster_info); update_peer_stats(&cluster_nodes, last_datapoint_submit); - let root_bank = root_bank.clone(); shreds.flat_map(move |shred| { - repeat(shred.payload()).zip(cluster_nodes.get_broadcast_addrs( - &shred.id(), - &root_bank, - DATA_PLANE_FANOUT, - socket_addr_space, - )) + let node = cluster_nodes.get_broadcast_peer(&shred.id())?; + ContactInfo::is_valid_address(&node.tvu, socket_addr_space) + .then(|| (shred.payload(), node.tvu)) }) }) .collect(); diff --git a/core/src/broadcast_stage/broadcast_duplicates_run.rs b/core/src/broadcast_stage/broadcast_duplicates_run.rs index 741be826c44982..9e60d6c8196cfe 100644 --- a/core/src/broadcast_stage/broadcast_duplicates_run.rs +++ b/core/src/broadcast_stage/broadcast_duplicates_run.rs @@ -3,7 +3,7 @@ use { crate::cluster_nodes::ClusterNodesCache, itertools::Itertools, solana_entry::entry::Entry, - solana_gossip::cluster_info::DATA_PLANE_FANOUT, + solana_gossip::contact_info::ContactInfo, solana_ledger::shred::{ProcessShredsStats, Shredder}, solana_sdk::{ hash::Hash, @@ -270,12 +270,6 @@ impl BroadcastRun for BroadcastDuplicatesRun { (bank_forks.root_bank(), bank_forks.working_bank()) }; let self_pubkey = cluster_info.id(); - let nodes: Vec<_> = cluster_info - .all_peers() - .into_iter() - .map(|(node, _)| node) - .collect(); - // Create cluster partition. let cluster_partition: HashSet = { let mut cumilative_stake = 0; @@ -302,17 +296,8 @@ impl BroadcastRun for BroadcastDuplicatesRun { let packets: Vec<_> = shreds .iter() .filter_map(|shred| { - let addr = cluster_nodes - .get_broadcast_addrs( - &shred.id(), - &root_bank, - DATA_PLANE_FANOUT, - socket_addr_space, - ) - .first() - .copied()?; - let node = nodes.iter().find(|node| node.tvu == addr)?; - if !socket_addr_space.check(&node.tvu) { + let node = cluster_nodes.get_broadcast_peer(&shred.id())?; + if ContactInfo::is_valid_address(&node.tvu, socket_addr_space) { return None; } if self diff --git a/core/src/cluster_nodes.rs b/core/src/cluster_nodes.rs index f83175a9946f8d..22fcc882c07186 100644 --- a/core/src/cluster_nodes.rs +++ b/core/src/cluster_nodes.rs @@ -26,7 +26,7 @@ use { any::TypeId, cmp::Reverse, collections::HashMap, - iter::{once, repeat_with}, + iter::repeat_with, marker::PhantomData, net::SocketAddr, ops::Deref, @@ -114,62 +114,11 @@ impl ClusterNodes { new_cluster_nodes(cluster_info, stakes) } - pub(crate) fn get_broadcast_addrs( - &self, - shred: &ShredId, - root_bank: &Bank, - fanout: usize, - socket_addr_space: &SocketAddrSpace, - ) -> Vec { - const MAX_CONTACT_INFO_AGE: Duration = Duration::from_secs(2 * 60); + pub(crate) fn get_broadcast_peer(&self, shred: &ShredId) -> Option<&ContactInfo> { let shred_seed = shred.seed(&self.pubkey); let mut rng = ChaChaRng::from_seed(shred_seed); - let index = match self.weighted_shuffle.first(&mut rng) { - None => return Vec::default(), - Some(index) => index, - }; - if let Some(node) = self.nodes[index].contact_info() { - let now = timestamp(); - let age = Duration::from_millis(now.saturating_sub(node.wallclock)); - if age < MAX_CONTACT_INFO_AGE - && ContactInfo::is_valid_address(&node.tvu, socket_addr_space) - { - return vec![node.tvu]; - } - } - let mut rng = ChaChaRng::from_seed(shred_seed); - let nodes: Vec<&Node> = self - .weighted_shuffle - .clone() - .shuffle(&mut rng) - .map(|index| &self.nodes[index]) - .collect(); - if nodes.is_empty() { - return Vec::default(); - } - if drop_redundant_turbine_path(shred.slot(), root_bank) { - let peers = once(nodes[0]).chain(get_retransmit_peers(fanout, 0, &nodes)); - let addrs = peers.filter_map(Node::contact_info).map(|peer| peer.tvu); - return addrs - .filter(|addr| ContactInfo::is_valid_address(addr, socket_addr_space)) - .collect(); - } - let (neighbors, children) = compute_retransmit_peers(fanout, 0, &nodes); - neighbors[..1] - .iter() - .filter_map(|node| Some(node.contact_info()?.tvu)) - .chain( - neighbors[1..] - .iter() - .filter_map(|node| Some(node.contact_info()?.tvu_forwards)), - ) - .chain( - children - .iter() - .filter_map(|node| Some(node.contact_info()?.tvu)), - ) - .filter(|addr| ContactInfo::is_valid_address(addr, socket_addr_space)) - .collect() + let index = self.weighted_shuffle.first(&mut rng)?; + self.nodes[index].contact_info() } } From c00adba782bbbfeb4570d626f253bd9590a25883 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Tue, 16 Aug 2022 22:26:42 +0000 Subject: [PATCH 031/465] renames size_of_erasure_encoded_slice to ShredCode::capacity (backport #27157) (#27180) renames size_of_erasure_encoded_slice to ShredCode::capacity (#27157) Maintain symmetry between code and data shreds: * ShredData::capacity -> data buffer capacity * ShredCode::capacity -> erasure code capacity (cherry picked from commit c813d759443cbaedce03513fb00cea904d4ecc2c) Co-authored-by: behzad nouri --- ledger/src/shred.rs | 4 ++-- ledger/src/shred/merkle.rs | 24 +++++++++++------------- 2 files changed, 13 insertions(+), 15 deletions(-) diff --git a/ledger/src/shred.rs b/ledger/src/shred.rs index 5556b39068cabd..e17055b1e7d9a9 100644 --- a/ledger/src/shred.rs +++ b/ledger/src/shred.rs @@ -68,7 +68,7 @@ use { clock::Slot, hash::{hashv, Hash}, pubkey::Pubkey, - signature::{Keypair, Signature, Signer}, + signature::{Keypair, Signature, Signer, SIGNATURE_BYTES}, }, static_assertions::const_assert_eq, std::fmt::Debug, @@ -92,7 +92,7 @@ pub const SIZE_OF_NONCE: usize = 4; const SIZE_OF_COMMON_SHRED_HEADER: usize = 83; const SIZE_OF_DATA_SHRED_HEADERS: usize = 88; const SIZE_OF_CODING_SHRED_HEADERS: usize = 89; -const SIZE_OF_SIGNATURE: usize = 64; +const SIZE_OF_SIGNATURE: usize = SIGNATURE_BYTES; const SIZE_OF_SHRED_VARIANT: usize = 1; const SIZE_OF_SHRED_SLOT: usize = 8; const SIZE_OF_SHRED_INDEX: usize = 4; diff --git a/ledger/src/shred/merkle.rs b/ledger/src/shred/merkle.rs index 5529fcf3a6c3ba..5b224632a2a880 100644 --- a/ledger/src/shred/merkle.rs +++ b/ledger/src/shred/merkle.rs @@ -75,7 +75,7 @@ impl ShredData { // Maximum size of ledger data that can be embedded in a data-shred. // Also equal to: - // ShredCode::size_of_erasure_encoded_slice(proof_size).unwrap() + // ShredCode::capacity(proof_size).unwrap() // - ShredData::SIZE_OF_HEADERS // + SIZE_OF_SIGNATURE pub(super) fn capacity(proof_size: u8) -> Result { @@ -115,8 +115,8 @@ impl ShredCode { } } - // Size of the chunk of payload which will be erasure coded. - fn size_of_erasure_encoded_slice(proof_size: u8) -> Result { + // Size of buffer embedding erasure codes. + fn capacity(proof_size: u8) -> Result { // Merkle branch is generated and signed after coding shreds are // generated. Coding shred headers cannot be erasure coded either. Self::SIZE_OF_PAYLOAD @@ -130,7 +130,7 @@ impl ShredCode { fn merkle_tree_node(&self) -> Result { let proof_size = self.proof_size()?; - let shard_size = Self::size_of_erasure_encoded_slice(proof_size)?; + let shard_size = Self::capacity(proof_size)?; let chunk = self .payload .get(SIZE_OF_SIGNATURE..Self::SIZE_OF_HEADERS + shard_size) @@ -145,8 +145,7 @@ impl ShredCode { } pub(super) fn get_signed_message_range(proof_size: u8) -> Option> { - let offset = - Self::SIZE_OF_HEADERS + Self::size_of_erasure_encoded_slice(proof_size).ok()?; + let offset = Self::SIZE_OF_HEADERS + Self::capacity(proof_size).ok()?; Some(offset..offset + SIZE_OF_MERKLE_ROOT) } @@ -264,7 +263,7 @@ impl Shred for ShredCode { }; let coding_header = deserialize_from_with_limit(&mut cursor)?; // Skip erasure code shard. - let shard_size = Self::size_of_erasure_encoded_slice(proof_size)?; + let shard_size = Self::capacity(proof_size)?; let shard_size = i64::try_from(shard_size).unwrap(); cursor.seek(SeekFrom::Current(shard_size))?; // Deserialize merkle branch. @@ -296,7 +295,7 @@ impl Shred for ShredCode { return Err(Error::InvalidPayloadSize(self.payload.len())); } let proof_size = self.proof_size()?; - let shard_size = Self::size_of_erasure_encoded_slice(proof_size)?; + let shard_size = Self::capacity(proof_size)?; let mut shard = self.payload; shard.drain(..Self::SIZE_OF_HEADERS); shard.truncate(shard_size); @@ -308,7 +307,7 @@ impl Shred for ShredCode { return Err(Error::InvalidPayloadSize(self.payload.len())); } let proof_size = self.proof_size()?; - let shard_size = Self::size_of_erasure_encoded_slice(proof_size)?; + let shard_size = Self::capacity(proof_size)?; self.payload .get(Self::SIZE_OF_HEADERS..Self::SIZE_OF_HEADERS + shard_size) .ok_or(Error::InvalidPayloadSize(self.payload.len())) @@ -454,8 +453,7 @@ mod test { fn shred_data_capacity(proof_size: u8) -> usize { const SIZE_OF_ERASURE_ENCODED_HEADER: usize = ShredData::SIZE_OF_HEADERS - SIZE_OF_SIGNATURE; - ShredCode::size_of_erasure_encoded_slice(proof_size).unwrap() - - SIZE_OF_ERASURE_ENCODED_HEADER + ShredCode::capacity(proof_size).unwrap() - SIZE_OF_ERASURE_ENCODED_HEADER } fn shred_data_size_of_erasure_encoded_slice(proof_size: u8) -> usize { @@ -486,10 +484,10 @@ mod test { } #[test] - fn test_size_of_erasure_encoded_slice() { + fn test_shred_code_capacity() { for proof_size in 0..0x15 { assert_eq!( - ShredCode::size_of_erasure_encoded_slice(proof_size).unwrap(), + ShredCode::capacity(proof_size).unwrap(), shred_data_size_of_erasure_encoded_slice(proof_size), ); } From 4bda9098277a2f574074e0ad70e765001d93985d Mon Sep 17 00:00:00 2001 From: Will Hickey Date: Tue, 16 Aug 2022 23:12:25 -0500 Subject: [PATCH 032/465] Enable QUIC client by default. Add arg to disable QUIC client. Take 2 (#26927) * Enable QUIC client by default. Add arg to disable QUIC client. * Deprecate --disable-quic-servers arg * Add #[ignore] annotation to failing tests --- banking-bench/src/main.rs | 6 +- bench-tps/src/cli.rs | 10 +-- bench-tps/tests/bench_tps.rs | 1 + client/src/connection_cache.rs | 30 ++++++--- core/src/banking_stage.rs | 2 + core/src/tpu.rs | 69 +++++++++------------ core/src/validator.rs | 3 - dos/src/main.rs | 2 + local-cluster/src/validator_configs.rs | 1 - local-cluster/tests/local_cluster.rs | 4 ++ local-cluster/tests/local_cluster_slow_1.rs | 2 + local-cluster/tests/local_cluster_slow_2.rs | 1 + multinode-demo/bootstrap-validator.sh | 2 +- validator/src/main.rs | 17 +++-- 14 files changed, 87 insertions(+), 63 deletions(-) diff --git a/banking-bench/src/main.rs b/banking-bench/src/main.rs index 51b0042abed374..2806a8a9e05a7a 100644 --- a/banking-bench/src/main.rs +++ b/banking-bench/src/main.rs @@ -214,10 +214,10 @@ fn main() { .help("Number of threads to use in the banking stage"), ) .arg( - Arg::new("tpu_use_quic") - .long("tpu-use-quic") + Arg::new("tpu_disable_quic") + .long("tpu-disable-quic") .takes_value(false) - .help("Forward messages to TPU using QUIC"), + .help("Disable forwarding messages to TPU using QUIC"), ) .get_matches(); diff --git a/bench-tps/src/cli.rs b/bench-tps/src/cli.rs index e9b4faa848a835..8c5c22ac09d17d 100644 --- a/bench-tps/src/cli.rs +++ b/bench-tps/src/cli.rs @@ -290,10 +290,10 @@ pub fn build_args<'a, 'b>(version: &'b str) -> App<'a, 'b> { .help("Submit transactions with a TpuClient") ) .arg( - Arg::with_name("tpu_use_quic") - .long("tpu-use-quic") + Arg::with_name("tpu_disable_quic") + .long("tpu-disable-quic") .takes_value(false) - .help("Submit transactions via QUIC; only affects ThinClient (default) \ + .help("Do not submit transactions via QUIC; only affects ThinClient (default) \ or TpuClient sends"), ) .arg( @@ -348,8 +348,8 @@ pub fn extract_args(matches: &ArgMatches) -> Config { args.external_client_type = ExternalClientType::RpcClient; } - if matches.is_present("tpu_use_quic") { - args.use_quic = true; + if matches.is_present("tpu_disable_quic") { + args.use_quic = false; } if let Some(v) = matches.value_of("tpu_connection_pool_size") { diff --git a/bench-tps/tests/bench_tps.rs b/bench-tps/tests/bench_tps.rs index 6d1c32b47a2629..a3c4bcfc986cec 100644 --- a/bench-tps/tests/bench_tps.rs +++ b/bench-tps/tests/bench_tps.rs @@ -129,6 +129,7 @@ fn test_bench_tps_test_validator(config: Config) { #[test] #[serial] +#[ignore] fn test_bench_tps_local_cluster_solana() { test_bench_tps_local_cluster(Config { tx_count: 100, diff --git a/client/src/connection_cache.rs b/client/src/connection_cache.rs index f0628d3e32b9de..9e5efff3f3e061 100644 --- a/client/src/connection_cache.rs +++ b/client/src/connection_cache.rs @@ -32,7 +32,7 @@ static MAX_CONNECTIONS: usize = 1024; /// Used to decide whether the TPU and underlying connection cache should use /// QUIC connections. -pub const DEFAULT_TPU_USE_QUIC: bool = false; +pub const DEFAULT_TPU_USE_QUIC: bool = true; /// Default TPU connection pool size per remote address pub const DEFAULT_TPU_CONNECTION_POOL_SIZE: usize = 4; @@ -683,6 +683,11 @@ mod tests { // be lazy and not connect until first use or handle connection errors somehow // (without crashing, as would be required in a real practical validator) let connection_cache = ConnectionCache::default(); + let port_offset = if connection_cache.use_quic() { + QUIC_PORT_OFFSET + } else { + 0 + }; let addrs = (0..MAX_CONNECTIONS) .into_iter() .map(|_| { @@ -695,18 +700,29 @@ mod tests { let map = connection_cache.map.read().unwrap(); assert!(map.len() == MAX_CONNECTIONS); addrs.iter().for_each(|a| { - let conn = &map.get(a).expect("Address not found").connections[0]; - let conn = conn.new_blocking_connection(*a, connection_cache.stats.clone()); - assert!(a.ip() == conn.tpu_addr().ip()); + let port = a + .port() + .checked_add(port_offset) + .unwrap_or_else(|| a.port()); + let addr = &SocketAddr::new(a.ip(), port); + + let conn = &map.get(addr).expect("Address not found").connections[0]; + let conn = conn.new_blocking_connection(*addr, connection_cache.stats.clone()); + assert!(addr.ip() == conn.tpu_addr().ip()); }); } - let addr = get_addr(&mut rng); - connection_cache.get_connection(&addr); + let addr = &get_addr(&mut rng); + connection_cache.get_connection(addr); + let port = addr + .port() + .checked_add(port_offset) + .unwrap_or_else(|| addr.port()); + let addr_with_quic_port = SocketAddr::new(addr.ip(), port); let map = connection_cache.map.read().unwrap(); assert!(map.len() == MAX_CONNECTIONS); - let _conn = map.get(&addr).expect("Address not found"); + let _conn = map.get(&addr_with_quic_port).expect("Address not found"); } #[test] diff --git a/core/src/banking_stage.rs b/core/src/banking_stage.rs index ccef854514f1d3..0cb9713c3f11a5 100644 --- a/core/src/banking_stage.rs +++ b/core/src/banking_stage.rs @@ -4120,6 +4120,7 @@ mod tests { } #[test] + #[ignore] fn test_forwarder_budget() { solana_logger::setup(); // Create `PacketBatch` with 1 unprocessed packet @@ -4207,6 +4208,7 @@ mod tests { } #[test] + #[ignore] fn test_handle_forwarding() { solana_logger::setup(); // packets are deserialized upon receiving, failed packets will not be diff --git a/core/src/tpu.rs b/core/src/tpu.rs index cfd546869d6134..7ed1ee0c49ee6e 100644 --- a/core/src/tpu.rs +++ b/core/src/tpu.rs @@ -62,8 +62,8 @@ pub struct Tpu { banking_stage: BankingStage, cluster_info_vote_listener: ClusterInfoVoteListener, broadcast_stage: BroadcastStage, - tpu_quic_t: Option>, - tpu_forwards_quic_t: Option>, + tpu_quic_t: thread::JoinHandle<()>, + tpu_forwards_quic_t: thread::JoinHandle<()>, find_packet_sender_stake_stage: FindPacketSenderStakeStage, vote_find_packet_sender_stake_stage: FindPacketSenderStakeStage, staked_nodes_updater_service: StakedNodesUpdaterService, @@ -96,7 +96,6 @@ impl Tpu { connection_cache: &Arc, keypair: &Keypair, log_messages_bytes_limit: Option, - enable_quic_servers: bool, staked_nodes: &Arc>, ) -> Self { let TpuSockets { @@ -154,37 +153,33 @@ impl Tpu { let (verified_sender, verified_receiver) = unbounded(); let stats = Arc::new(StreamStats::default()); - let tpu_quic_t = enable_quic_servers.then(|| { - spawn_server( - transactions_quic_sockets, - keypair, - cluster_info.my_contact_info().tpu.ip(), - packet_sender, - exit.clone(), - MAX_QUIC_CONNECTIONS_PER_PEER, - staked_nodes.clone(), - MAX_STAKED_CONNECTIONS, - MAX_UNSTAKED_CONNECTIONS, - stats.clone(), - ) - .unwrap() - }); + let tpu_quic_t = spawn_server( + transactions_quic_sockets, + keypair, + cluster_info.my_contact_info().tpu.ip(), + packet_sender, + exit.clone(), + MAX_QUIC_CONNECTIONS_PER_PEER, + staked_nodes.clone(), + MAX_STAKED_CONNECTIONS, + MAX_UNSTAKED_CONNECTIONS, + stats.clone(), + ) + .unwrap(); - let tpu_forwards_quic_t = enable_quic_servers.then(|| { - spawn_server( - transactions_forwards_quic_sockets, - keypair, - cluster_info.my_contact_info().tpu_forwards.ip(), - forwarded_packet_sender, - exit.clone(), - MAX_QUIC_CONNECTIONS_PER_PEER, - staked_nodes.clone(), - MAX_STAKED_CONNECTIONS.saturating_add(MAX_UNSTAKED_CONNECTIONS), - 0, // Prevent unstaked nodes from forwarding transactions - stats, - ) - .unwrap() - }); + let tpu_forwards_quic_t = spawn_server( + transactions_forwards_quic_sockets, + keypair, + cluster_info.my_contact_info().tpu_forwards.ip(), + forwarded_packet_sender, + exit.clone(), + MAX_QUIC_CONNECTIONS_PER_PEER, + staked_nodes.clone(), + MAX_STAKED_CONNECTIONS.saturating_add(MAX_UNSTAKED_CONNECTIONS), + 0, // Prevent unstaked nodes from forwarding transactions + stats, + ) + .unwrap(); let sigverify_stage = { let verifier = TransactionSigVerifier::new(verified_sender); @@ -271,13 +266,9 @@ impl Tpu { self.find_packet_sender_stake_stage.join(), self.vote_find_packet_sender_stake_stage.join(), self.staked_nodes_updater_service.join(), + self.tpu_quic_t.join(), + self.tpu_forwards_quic_t.join(), ]; - if let Some(tpu_quic_t) = self.tpu_quic_t { - tpu_quic_t.join()?; - } - if let Some(tpu_forwards_quic_t) = self.tpu_forwards_quic_t { - tpu_forwards_quic_t.join()?; - } let broadcast_result = self.broadcast_stage.join(); for result in results { result?; diff --git a/core/src/validator.rs b/core/src/validator.rs index c70d8c62d50c36..78a611aa842d0c 100644 --- a/core/src/validator.rs +++ b/core/src/validator.rs @@ -174,7 +174,6 @@ pub struct ValidatorConfig { pub wait_to_vote_slot: Option, pub ledger_column_options: LedgerColumnOptions, pub runtime_config: RuntimeConfig, - pub enable_quic_servers: bool, } impl Default for ValidatorConfig { @@ -237,7 +236,6 @@ impl Default for ValidatorConfig { wait_to_vote_slot: None, ledger_column_options: LedgerColumnOptions::default(), runtime_config: RuntimeConfig::default(), - enable_quic_servers: true, } } } @@ -1036,7 +1034,6 @@ impl Validator { &connection_cache, &identity_keypair, config.runtime_config.log_messages_bytes_limit, - config.enable_quic_servers, &staked_nodes, ); diff --git a/dos/src/main.rs b/dos/src/main.rs index fa75fe90b79435..baadc5c0016388 100644 --- a/dos/src/main.rs +++ b/dos/src/main.rs @@ -1185,11 +1185,13 @@ pub mod test { } #[test] + #[ignore] fn test_dos_with_blockhash_and_payer() { run_dos_with_blockhash_and_payer(/*tpu_use_quic*/ false) } #[test] + #[ignore] fn test_dos_with_blockhash_and_payer_and_quic() { run_dos_with_blockhash_and_payer(/*tpu_use_quic*/ true) } diff --git a/local-cluster/src/validator_configs.rs b/local-cluster/src/validator_configs.rs index e717b468152dfa..ace823dd60ac77 100644 --- a/local-cluster/src/validator_configs.rs +++ b/local-cluster/src/validator_configs.rs @@ -64,7 +64,6 @@ pub fn safe_clone_config(config: &ValidatorConfig) -> ValidatorConfig { wait_to_vote_slot: config.wait_to_vote_slot, ledger_column_options: config.ledger_column_options.clone(), runtime_config: config.runtime_config.clone(), - enable_quic_servers: config.enable_quic_servers, } } diff --git a/local-cluster/tests/local_cluster.rs b/local-cluster/tests/local_cluster.rs index 072239f5d951ab..6fad4c541c47c8 100644 --- a/local-cluster/tests/local_cluster.rs +++ b/local-cluster/tests/local_cluster.rs @@ -173,6 +173,7 @@ fn test_spend_and_verify_all_nodes_3() { #[test] #[serial] +#[ignore] fn test_local_cluster_signature_subscribe() { solana_logger::setup_with_default(RUST_LOG_FILTER); let num_nodes = 2; @@ -311,6 +312,7 @@ fn test_two_unbalanced_stakes() { #[test] #[serial] +#[ignore] fn test_forwarding() { solana_logger::setup_with_default(RUST_LOG_FILTER); // Set up a cluster where one node is never the leader, so all txs sent to this node @@ -1228,6 +1230,7 @@ fn test_incremental_snapshot_download_with_crossing_full_snapshot_interval_at_st #[allow(unused_attributes)] #[test] #[serial] +#[ignore] fn test_snapshot_restart_tower() { solana_logger::setup_with_default(RUST_LOG_FILTER); // First set up the cluster with 2 nodes @@ -2520,6 +2523,7 @@ fn run_test_load_program_accounts_partition(scan_commitment: CommitmentConfig) { #[test] #[serial] +#[ignore] fn test_votes_land_in_fork_during_long_partition() { let total_stake = 3 * DEFAULT_NODE_STAKE; // Make `lighter_stake` insufficient for switching threshold diff --git a/local-cluster/tests/local_cluster_slow_1.rs b/local-cluster/tests/local_cluster_slow_1.rs index dab4f7807e677e..582d02ff15b4fd 100644 --- a/local-cluster/tests/local_cluster_slow_1.rs +++ b/local-cluster/tests/local_cluster_slow_1.rs @@ -49,6 +49,7 @@ mod common; #[test] #[serial] +#[ignore] // Steps in this test: // We want to create a situation like: /* @@ -587,6 +588,7 @@ fn test_duplicate_shreds_broadcast_leader() { #[test] #[serial] +#[ignore] fn test_switch_threshold_uses_gossip_votes() { solana_logger::setup_with_default(RUST_LOG_FILTER); let total_stake = 100 * DEFAULT_NODE_STAKE; diff --git a/local-cluster/tests/local_cluster_slow_2.rs b/local-cluster/tests/local_cluster_slow_2.rs index 6488ddea1e0e57..d6d315ed0d46d8 100644 --- a/local-cluster/tests/local_cluster_slow_2.rs +++ b/local-cluster/tests/local_cluster_slow_2.rs @@ -201,6 +201,7 @@ fn test_leader_failure_4() { #[test] #[serial] +#[ignore] fn test_ledger_cleanup_service() { solana_logger::setup_with_default(RUST_LOG_FILTER); error!("test_ledger_cleanup_service"); diff --git a/multinode-demo/bootstrap-validator.sh b/multinode-demo/bootstrap-validator.sh index 9245f507c394e2..deb82f106fae04 100755 --- a/multinode-demo/bootstrap-validator.sh +++ b/multinode-demo/bootstrap-validator.sh @@ -61,7 +61,7 @@ while [[ -n $1 ]]; do elif [[ $1 = --enable-rpc-bigtable-ledger-storage ]]; then args+=("$1") shift - elif [[ $1 = --tpu-use-quic ]]; then + elif [[ $1 = --tpu-disable-quic ]]; then args+=("$1") shift elif [[ $1 = --rpc-send-batch-ms ]]; then diff --git a/validator/src/main.rs b/validator/src/main.rs index ce8c12c06fe3e7..ae039919c91538 100644 --- a/validator/src/main.rs +++ b/validator/src/main.rs @@ -1213,13 +1213,21 @@ pub fn main() { Arg::with_name("tpu_use_quic") .long("tpu-use-quic") .takes_value(false) + .hidden(true) + .conflicts_with("tpu_disable_quic") .help("Use QUIC to send transactions."), ) + .arg( + Arg::with_name("tpu_disable_quic") + .long("tpu-disable-quic") + .takes_value(false) + .help("Do not use QUIC to send transactions."), + ) .arg( Arg::with_name("disable_quic_servers") .long("disable-quic-servers") .takes_value(false) - .help("Disable QUIC TPU servers"), + .hidden(true) ) .arg( Arg::with_name("enable_quic_servers") @@ -2314,8 +2322,7 @@ pub fn main() { let restricted_repair_only_mode = matches.is_present("restricted_repair_only_mode"); let accounts_shrink_optimize_total_space = value_t_or_exit!(matches, "accounts_shrink_optimize_total_space", bool); - let tpu_use_quic = matches.is_present("tpu_use_quic"); - let enable_quic_servers = !matches.is_present("disable_quic_servers"); + let tpu_use_quic = !matches.is_present("tpu_disable_quic"); let tpu_connection_pool_size = value_t_or_exit!(matches, "tpu_connection_pool_size", usize); let shrink_ratio = value_t_or_exit!(matches, "accounts_shrink_ratio", f64); @@ -2485,6 +2492,9 @@ pub fn main() { if matches.is_present("enable_quic_servers") { warn!("--enable-quic-servers is now the default behavior. This flag is deprecated and can be removed from the launch args"); } + if matches.is_present("disable_quic_servers") { + warn!("--disable-quic-servers is deprecated. The quic server cannot be disabled."); + } let rpc_bigtable_config = if matches.is_present("enable_rpc_bigtable_ledger_storage") || matches.is_present("enable_bigtable_ledger_upload") @@ -2664,7 +2674,6 @@ pub fn main() { log_messages_bytes_limit: value_of(&matches, "log_messages_bytes_limit"), ..RuntimeConfig::default() }, - enable_quic_servers, ..ValidatorConfig::default() }; From fd38f5d1dfa6308c19759df10823501a84f5750f Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 17 Aug 2022 11:42:23 -0500 Subject: [PATCH 033/465] Bump Version to 1.11.7 (#27196) Co-authored-by: willhickey --- Cargo.lock | 484 ++++++++--------- account-decoder/Cargo.toml | 8 +- accounts-bench/Cargo.toml | 12 +- accounts-cluster-bench/Cargo.toml | 34 +- banking-bench/Cargo.toml | 26 +- banks-client/Cargo.toml | 12 +- banks-interface/Cargo.toml | 4 +- banks-server/Cargo.toml | 12 +- bench-streamer/Cargo.toml | 8 +- bench-tps/Cargo.toml | 38 +- bloom/Cargo.toml | 8 +- bucket_map/Cargo.toml | 8 +- clap-utils/Cargo.toml | 8 +- clap-v3-utils/Cargo.toml | 8 +- cli-config/Cargo.toml | 6 +- cli-output/Cargo.toml | 16 +- cli/Cargo.toml | 36 +- client-test/Cargo.toml | 32 +- client/Cargo.toml | 28 +- core/Cargo.toml | 56 +- docs/src/developing/clients/jsonrpc-api.md | 4 +- dos/Cargo.toml | 30 +- download-utils/Cargo.toml | 6 +- entry/Cargo.toml | 16 +- faucet/Cargo.toml | 14 +- frozen-abi/Cargo.toml | 6 +- frozen-abi/macro/Cargo.toml | 2 +- genesis-utils/Cargo.toml | 8 +- genesis/Cargo.toml | 22 +- geyser-plugin-interface/Cargo.toml | 6 +- geyser-plugin-manager/Cargo.toml | 16 +- gossip/Cargo.toml | 38 +- install/Cargo.toml | 14 +- keygen/Cargo.toml | 12 +- ledger-tool/Cargo.toml | 30 +- ledger/Cargo.toml | 40 +- local-cluster/Cargo.toml | 28 +- log-analyzer/Cargo.toml | 6 +- logger/Cargo.toml | 2 +- measure/Cargo.toml | 4 +- merkle-root-bench/Cargo.toml | 12 +- merkle-tree/Cargo.toml | 4 +- metrics/Cargo.toml | 4 +- net-shaper/Cargo.toml | 4 +- net-utils/Cargo.toml | 8 +- notifier/Cargo.toml | 2 +- perf/Cargo.toml | 12 +- poh-bench/Cargo.toml | 14 +- poh/Cargo.toml | 20 +- program-runtime/Cargo.toml | 14 +- program-test/Cargo.toml | 18 +- .../address-lookup-table-tests/Cargo.toml | 8 +- programs/address-lookup-table/Cargo.toml | 12 +- programs/bpf-loader-tests/Cargo.toml | 8 +- programs/bpf/Cargo.lock | 490 +++++++++--------- programs/bpf/Cargo.toml | 28 +- programs/bpf/rust/128bit/Cargo.toml | 6 +- programs/bpf/rust/128bit_dep/Cargo.toml | 4 +- programs/bpf/rust/alloc/Cargo.toml | 4 +- programs/bpf/rust/call_depth/Cargo.toml | 4 +- programs/bpf/rust/caller_access/Cargo.toml | 4 +- programs/bpf/rust/curve25519/Cargo.toml | 6 +- programs/bpf/rust/custom_heap/Cargo.toml | 4 +- programs/bpf/rust/dep_crate/Cargo.toml | 6 +- .../bpf/rust/deprecated_loader/Cargo.toml | 4 +- programs/bpf/rust/dup_accounts/Cargo.toml | 4 +- programs/bpf/rust/error_handling/Cargo.toml | 4 +- programs/bpf/rust/external_spend/Cargo.toml | 4 +- programs/bpf/rust/finalize/Cargo.toml | 4 +- .../rust/get_minimum_delegation/Cargo.toml | 4 +- .../Cargo.toml | 4 +- .../rust/instruction_introspection/Cargo.toml | 4 +- programs/bpf/rust/invoke/Cargo.toml | 4 +- programs/bpf/rust/invoke_and_error/Cargo.toml | 4 +- programs/bpf/rust/invoke_and_ok/Cargo.toml | 4 +- .../bpf/rust/invoke_and_return/Cargo.toml | 4 +- programs/bpf/rust/invoked/Cargo.toml | 4 +- programs/bpf/rust/iter/Cargo.toml | 4 +- programs/bpf/rust/log_data/Cargo.toml | 4 +- programs/bpf/rust/many_args/Cargo.toml | 6 +- programs/bpf/rust/many_args_dep/Cargo.toml | 4 +- programs/bpf/rust/mem/Cargo.toml | 10 +- programs/bpf/rust/membuiltins/Cargo.toml | 6 +- programs/bpf/rust/noop/Cargo.toml | 4 +- programs/bpf/rust/panic/Cargo.toml | 4 +- programs/bpf/rust/param_passing/Cargo.toml | 6 +- .../bpf/rust/param_passing_dep/Cargo.toml | 4 +- programs/bpf/rust/rand/Cargo.toml | 4 +- programs/bpf/rust/realloc/Cargo.toml | 4 +- programs/bpf/rust/realloc_invoke/Cargo.toml | 6 +- .../bpf/rust/ro_account_modify/Cargo.toml | 4 +- programs/bpf/rust/ro_modify/Cargo.toml | 4 +- programs/bpf/rust/sanity/Cargo.toml | 10 +- .../bpf/rust/secp256k1_recover/Cargo.toml | 4 +- programs/bpf/rust/sha/Cargo.toml | 4 +- .../rust/sibling_inner_instruction/Cargo.toml | 4 +- .../bpf/rust/sibling_instruction/Cargo.toml | 4 +- programs/bpf/rust/simulation/Cargo.toml | 12 +- programs/bpf/rust/spoof1/Cargo.toml | 4 +- programs/bpf/rust/spoof1_system/Cargo.toml | 4 +- programs/bpf/rust/sysvar/Cargo.toml | 10 +- programs/bpf/rust/upgradeable/Cargo.toml | 4 +- programs/bpf/rust/upgraded/Cargo.toml | 4 +- programs/bpf_loader/Cargo.toml | 14 +- .../bpf_loader/gen-syscall-list/Cargo.toml | 2 +- programs/compute-budget/Cargo.toml | 6 +- programs/config/Cargo.toml | 8 +- programs/ed25519-tests/Cargo.toml | 6 +- programs/stake/Cargo.toml | 18 +- programs/vote/Cargo.toml | 14 +- programs/zk-token-proof/Cargo.toml | 8 +- rayon-threadlimit/Cargo.toml | 2 +- rbpf-cli/Cargo.toml | 10 +- remote-wallet/Cargo.toml | 4 +- rpc-test/Cargo.toml | 18 +- rpc/Cargo.toml | 48 +- runtime/Cargo.toml | 34 +- runtime/store-tool/Cargo.toml | 8 +- sdk/Cargo.toml | 12 +- sdk/cargo-build-bpf/Cargo.toml | 4 +- sdk/cargo-build-sbf/Cargo.toml | 8 +- .../tests/crates/fail/Cargo.toml | 4 +- .../tests/crates/noop/Cargo.toml | 4 +- sdk/cargo-test-bpf/Cargo.toml | 2 +- sdk/cargo-test-sbf/Cargo.toml | 2 +- sdk/gen-headers/Cargo.toml | 2 +- sdk/macro/Cargo.toml | 2 +- sdk/program/Cargo.toml | 10 +- send-transaction-service/Cargo.toml | 14 +- stake-accounts/Cargo.toml | 16 +- storage-bigtable/Cargo.toml | 10 +- storage-bigtable/build-proto/Cargo.lock | 2 +- storage-bigtable/build-proto/Cargo.toml | 2 +- storage-proto/Cargo.toml | 8 +- streamer/Cargo.toml | 10 +- sys-tuner/Cargo.toml | 6 +- test-validator/Cargo.toml | 28 +- tokens/Cargo.toml | 24 +- transaction-dos/Cargo.toml | 32 +- transaction-status/Cargo.toml | 12 +- upload-perf/Cargo.toml | 4 +- validator/Cargo.toml | 50 +- version/Cargo.toml | 8 +- watchtower/Cargo.toml | 20 +- zk-token-sdk/Cargo.toml | 6 +- 145 files changed, 1268 insertions(+), 1268 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 4103785d580482..f20a8693b83961 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1686,7 +1686,7 @@ dependencies = [ [[package]] name = "gen-headers" -version = "1.11.6" +version = "1.11.7" dependencies = [ "log", "regex", @@ -1694,7 +1694,7 @@ dependencies = [ [[package]] name = "gen-syscall-list" -version = "1.11.6" +version = "1.11.7" dependencies = [ "regex", ] @@ -3754,15 +3754,15 @@ dependencies = [ [[package]] name = "rbpf-cli" -version = "1.11.6" +version = "1.11.7" dependencies = [ "clap 3.1.8", "serde", "serde_json", "solana-bpf-loader-program", - "solana-logger 1.11.6", + "solana-logger 1.11.7", "solana-program-runtime", - "solana-sdk 1.11.6", + "solana-sdk 1.11.7", "solana_rbpf", ] @@ -4473,7 +4473,7 @@ dependencies = [ [[package]] name = "solana-account-decoder" -version = "1.11.6" +version = "1.11.7" dependencies = [ "Inflector", "base64 0.13.0", @@ -4485,7 +4485,7 @@ dependencies = [ "serde_derive", "serde_json", "solana-config-program", - "solana-sdk 1.11.6", + "solana-sdk 1.11.7", "solana-vote-program", "spl-token", "spl-token-2022", @@ -4495,21 +4495,21 @@ dependencies = [ [[package]] name = "solana-accounts-bench" -version = "1.11.6" +version = "1.11.7" dependencies = [ "clap 2.33.3", "log", "rayon", - "solana-logger 1.11.6", + "solana-logger 1.11.7", "solana-measure", "solana-runtime", - "solana-sdk 1.11.6", + "solana-sdk 1.11.7", "solana-version", ] [[package]] name = "solana-accounts-cluster-bench" -version = "1.11.6" +version = "1.11.7" dependencies = [ "clap 2.33.3", "log", @@ -4522,11 +4522,11 @@ dependencies = [ "solana-faucet", "solana-gossip", "solana-local-cluster", - "solana-logger 1.11.6", + "solana-logger 1.11.7", "solana-measure", "solana-net-utils", "solana-runtime", - "solana-sdk 1.11.6", + "solana-sdk 1.11.7", "solana-streamer", "solana-test-validator", "solana-transaction-status", @@ -4536,7 +4536,7 @@ dependencies = [ [[package]] name = "solana-address-lookup-table-program" -version = "1.11.6" +version = "1.11.7" dependencies = [ "bincode", "bytemuck", @@ -4545,28 +4545,28 @@ dependencies = [ "num-traits", "rustc_version 0.4.0", "serde", - "solana-frozen-abi 1.11.6", - "solana-frozen-abi-macro 1.11.6", - "solana-program 1.11.6", + "solana-frozen-abi 1.11.7", + "solana-frozen-abi-macro 1.11.7", + "solana-program 1.11.7", "solana-program-runtime", - "solana-sdk 1.11.6", + "solana-sdk 1.11.7", "thiserror", ] [[package]] name = "solana-address-lookup-table-program-tests" -version = "1.11.6" +version = "1.11.7" dependencies = [ "assert_matches", "bincode", "solana-address-lookup-table-program", "solana-program-test", - "solana-sdk 1.11.6", + "solana-sdk 1.11.7", ] [[package]] name = "solana-banking-bench" -version = "1.11.6" +version = "1.11.7" dependencies = [ "clap 3.1.8", "crossbeam-channel", @@ -4577,27 +4577,27 @@ dependencies = [ "solana-core", "solana-gossip", "solana-ledger", - "solana-logger 1.11.6", + "solana-logger 1.11.7", "solana-measure", "solana-perf", "solana-poh", "solana-runtime", - "solana-sdk 1.11.6", + "solana-sdk 1.11.7", "solana-streamer", "solana-version", ] [[package]] name = "solana-banks-client" -version = "1.11.6" +version = "1.11.7" dependencies = [ "borsh", "futures 0.3.21", "solana-banks-interface", "solana-banks-server", - "solana-program 1.11.6", + "solana-program 1.11.7", "solana-runtime", - "solana-sdk 1.11.6", + "solana-sdk 1.11.7", "tarpc", "thiserror", "tokio", @@ -4606,16 +4606,16 @@ dependencies = [ [[package]] name = "solana-banks-interface" -version = "1.11.6" +version = "1.11.7" dependencies = [ "serde", - "solana-sdk 1.11.6", + "solana-sdk 1.11.7", "tarpc", ] [[package]] name = "solana-banks-server" -version = "1.11.6" +version = "1.11.7" dependencies = [ "bincode", "crossbeam-channel", @@ -4623,7 +4623,7 @@ dependencies = [ "solana-banks-interface", "solana-client", "solana-runtime", - "solana-sdk 1.11.6", + "solana-sdk 1.11.7", "solana-send-transaction-service", "tarpc", "tokio", @@ -4633,7 +4633,7 @@ dependencies = [ [[package]] name = "solana-bench-streamer" -version = "1.11.6" +version = "1.11.7" dependencies = [ "clap 3.1.8", "crossbeam-channel", @@ -4644,7 +4644,7 @@ dependencies = [ [[package]] name = "solana-bench-tps" -version = "1.11.6" +version = "1.11.7" dependencies = [ "clap 2.33.3", "crossbeam-channel", @@ -4661,13 +4661,13 @@ dependencies = [ "solana-genesis", "solana-gossip", "solana-local-cluster", - "solana-logger 1.11.6", + "solana-logger 1.11.7", "solana-measure", "solana-metrics", "solana-net-utils", "solana-rpc", "solana-runtime", - "solana-sdk 1.11.6", + "solana-sdk 1.11.7", "solana-streamer", "solana-test-validator", "solana-version", @@ -4676,7 +4676,7 @@ dependencies = [ [[package]] name = "solana-bloom" -version = "1.11.6" +version = "1.11.7" dependencies = [ "bv", "fnv", @@ -4686,14 +4686,14 @@ dependencies = [ "rustc_version 0.4.0", "serde", "serde_derive", - "solana-frozen-abi 1.11.6", - "solana-frozen-abi-macro 1.11.6", - "solana-sdk 1.11.6", + "solana-frozen-abi 1.11.7", + "solana-frozen-abi-macro 1.11.7", + "solana-sdk 1.11.7", ] [[package]] name = "solana-bpf-loader-program" -version = "1.11.6" +version = "1.11.7" dependencies = [ "bincode", "byteorder", @@ -4704,26 +4704,26 @@ dependencies = [ "solana-metrics", "solana-program-runtime", "solana-runtime", - "solana-sdk 1.11.6", - "solana-zk-token-sdk 1.11.6", + "solana-sdk 1.11.7", + "solana-zk-token-sdk 1.11.7", "solana_rbpf", "thiserror", ] [[package]] name = "solana-bpf-loader-program-tests" -version = "1.11.6" +version = "1.11.7" dependencies = [ "assert_matches", "bincode", "solana-bpf-loader-program", "solana-program-test", - "solana-sdk 1.11.6", + "solana-sdk 1.11.7", ] [[package]] name = "solana-bucket-map" -version = "1.11.6" +version = "1.11.7" dependencies = [ "fs_extra", "log", @@ -4731,24 +4731,24 @@ dependencies = [ "modular-bitfield", "rand 0.7.3", "rayon", - "solana-logger 1.11.6", + "solana-logger 1.11.7", "solana-measure", - "solana-sdk 1.11.6", + "solana-sdk 1.11.7", "tempfile", ] [[package]] name = "solana-cargo-build-bpf" -version = "1.11.6" +version = "1.11.7" dependencies = [ "cargo_metadata", "clap 3.1.8", - "solana-sdk 1.11.6", + "solana-sdk 1.11.7", ] [[package]] name = "solana-cargo-build-sbf" -version = "1.11.6" +version = "1.11.7" dependencies = [ "bzip2", "cargo_metadata", @@ -4757,14 +4757,14 @@ dependencies = [ "regex", "serial_test", "solana-download-utils", - "solana-logger 1.11.6", - "solana-sdk 1.11.6", + "solana-logger 1.11.7", + "solana-sdk 1.11.7", "tar", ] [[package]] name = "solana-cargo-test-bpf" -version = "1.11.6" +version = "1.11.7" dependencies = [ "cargo_metadata", "clap 3.1.8", @@ -4772,7 +4772,7 @@ dependencies = [ [[package]] name = "solana-cargo-test-sbf" -version = "1.11.6" +version = "1.11.7" dependencies = [ "cargo_metadata", "clap 3.1.8", @@ -4780,14 +4780,14 @@ dependencies = [ [[package]] name = "solana-clap-utils" -version = "1.11.6" +version = "1.11.7" dependencies = [ "chrono", "clap 2.33.3", "rpassword", "solana-perf", "solana-remote-wallet", - "solana-sdk 1.11.6", + "solana-sdk 1.11.7", "tempfile", "thiserror", "tiny-bip39", @@ -4797,14 +4797,14 @@ dependencies = [ [[package]] name = "solana-clap-v3-utils" -version = "1.11.6" +version = "1.11.7" dependencies = [ "chrono", "clap 3.1.8", "rpassword", "solana-perf", "solana-remote-wallet", - "solana-sdk 1.11.6", + "solana-sdk 1.11.7", "tempfile", "thiserror", "tiny-bip39", @@ -4814,7 +4814,7 @@ dependencies = [ [[package]] name = "solana-cli" -version = "1.11.6" +version = "1.11.7" dependencies = [ "bincode", "bs58", @@ -4841,10 +4841,10 @@ dependencies = [ "solana-client", "solana-config-program", "solana-faucet", - "solana-logger 1.11.6", + "solana-logger 1.11.7", "solana-program-runtime", "solana-remote-wallet", - "solana-sdk 1.11.6", + "solana-sdk 1.11.7", "solana-streamer", "solana-test-validator", "solana-transaction-status", @@ -4859,7 +4859,7 @@ dependencies = [ [[package]] name = "solana-cli-config" -version = "1.11.6" +version = "1.11.7" dependencies = [ "anyhow", "dirs-next", @@ -4868,13 +4868,13 @@ dependencies = [ "serde_derive", "serde_yaml", "solana-clap-utils", - "solana-sdk 1.11.6", + "solana-sdk 1.11.7", "url 2.2.2", ] [[package]] name = "solana-cli-output" -version = "1.11.6" +version = "1.11.7" dependencies = [ "Inflector", "base64 0.13.0", @@ -4892,7 +4892,7 @@ dependencies = [ "solana-clap-utils", "solana-cli-config", "solana-client", - "solana-sdk 1.11.6", + "solana-sdk 1.11.7", "solana-transaction-status", "solana-vote-program", "spl-memo", @@ -4900,7 +4900,7 @@ dependencies = [ [[package]] name = "solana-client" -version = "1.11.6" +version = "1.11.7" dependencies = [ "anyhow", "assert_matches", @@ -4936,12 +4936,12 @@ dependencies = [ "solana-account-decoder", "solana-clap-utils", "solana-faucet", - "solana-logger 1.11.6", + "solana-logger 1.11.7", "solana-measure", "solana-metrics", "solana-net-utils", "solana-perf", - "solana-sdk 1.11.6", + "solana-sdk 1.11.7", "solana-streamer", "solana-transaction-status", "solana-version", @@ -4957,14 +4957,14 @@ dependencies = [ [[package]] name = "solana-client-test" -version = "1.11.6" +version = "1.11.7" dependencies = [ "futures-util", "serde_json", "serial_test", "solana-client", "solana-ledger", - "solana-logger 1.11.6", + "solana-logger 1.11.7", "solana-measure", "solana-merkle-tree", "solana-metrics", @@ -4972,7 +4972,7 @@ dependencies = [ "solana-rayon-threadlimit", "solana-rpc", "solana-runtime", - "solana-sdk 1.11.6", + "solana-sdk 1.11.7", "solana-streamer", "solana-test-validator", "solana-transaction-status", @@ -4983,28 +4983,28 @@ dependencies = [ [[package]] name = "solana-compute-budget-program" -version = "1.11.6" +version = "1.11.7" dependencies = [ "solana-program-runtime", - "solana-sdk 1.11.6", + "solana-sdk 1.11.7", ] [[package]] name = "solana-config-program" -version = "1.11.6" +version = "1.11.7" dependencies = [ "bincode", "chrono", "serde", "serde_derive", - "solana-logger 1.11.6", + "solana-logger 1.11.7", "solana-program-runtime", - "solana-sdk 1.11.6", + "solana-sdk 1.11.7", ] [[package]] name = "solana-core" -version = "1.11.6" +version = "1.11.7" dependencies = [ "ahash", "base64 0.13.0", @@ -5036,12 +5036,12 @@ dependencies = [ "solana-bloom", "solana-client", "solana-entry", - "solana-frozen-abi 1.11.6", - "solana-frozen-abi-macro 1.11.6", + "solana-frozen-abi 1.11.7", + "solana-frozen-abi-macro 1.11.7", "solana-geyser-plugin-manager", "solana-gossip", "solana-ledger", - "solana-logger 1.11.6", + "solana-logger 1.11.7", "solana-measure", "solana-metrics", "solana-net-utils", @@ -5051,7 +5051,7 @@ dependencies = [ "solana-rayon-threadlimit", "solana-rpc", "solana-runtime", - "solana-sdk 1.11.6", + "solana-sdk 1.11.7", "solana-send-transaction-service", "solana-stake-program", "solana-streamer", @@ -5071,7 +5071,7 @@ dependencies = [ [[package]] name = "solana-dos" -version = "1.11.6" +version = "1.11.7" dependencies = [ "bincode", "clap 3.1.8", @@ -5087,42 +5087,42 @@ dependencies = [ "solana-faucet", "solana-gossip", "solana-local-cluster", - "solana-logger 1.11.6", + "solana-logger 1.11.7", "solana-measure", "solana-net-utils", "solana-perf", "solana-rpc", - "solana-sdk 1.11.6", + "solana-sdk 1.11.7", "solana-streamer", "solana-version", ] [[package]] name = "solana-download-utils" -version = "1.11.6" +version = "1.11.7" dependencies = [ "console", "indicatif", "log", "reqwest", "solana-runtime", - "solana-sdk 1.11.6", + "solana-sdk 1.11.7", ] [[package]] name = "solana-ed25519-program-tests" -version = "1.11.6" +version = "1.11.7" dependencies = [ "assert_matches", "ed25519-dalek", "rand 0.7.3", "solana-program-test", - "solana-sdk 1.11.6", + "solana-sdk 1.11.7", ] [[package]] name = "solana-entry" -version = "1.11.6" +version = "1.11.7" dependencies = [ "bincode", "crossbeam-channel", @@ -5134,18 +5134,18 @@ dependencies = [ "rand 0.7.3", "rayon", "serde", - "solana-logger 1.11.6", + "solana-logger 1.11.7", "solana-measure", "solana-merkle-tree", "solana-metrics", "solana-perf", "solana-rayon-threadlimit", - "solana-sdk 1.11.6", + "solana-sdk 1.11.7", ] [[package]] name = "solana-faucet" -version = "1.11.6" +version = "1.11.7" dependencies = [ "bincode", "byteorder", @@ -5156,9 +5156,9 @@ dependencies = [ "serde_derive", "solana-clap-utils", "solana-cli-config", - "solana-logger 1.11.6", + "solana-logger 1.11.7", "solana-metrics", - "solana-sdk 1.11.6", + "solana-sdk 1.11.7", "solana-version", "spl-memo", "thiserror", @@ -5189,7 +5189,7 @@ dependencies = [ [[package]] name = "solana-frozen-abi" -version = "1.11.6" +version = "1.11.7" dependencies = [ "ahash", "blake3", @@ -5214,8 +5214,8 @@ dependencies = [ "serde_derive", "serde_json", "sha2 0.10.2", - "solana-frozen-abi-macro 1.11.6", - "solana-logger 1.11.6", + "solana-frozen-abi-macro 1.11.7", + "solana-logger 1.11.7", "subtle", "thiserror", ] @@ -5234,7 +5234,7 @@ dependencies = [ [[package]] name = "solana-frozen-abi-macro" -version = "1.11.6" +version = "1.11.7" dependencies = [ "proc-macro2 1.0.41", "quote 1.0.18", @@ -5244,7 +5244,7 @@ dependencies = [ [[package]] name = "solana-genesis" -version = "1.11.6" +version = "1.11.7" dependencies = [ "base64 0.13.0", "clap 2.33.3", @@ -5255,9 +5255,9 @@ dependencies = [ "solana-cli-config", "solana-entry", "solana-ledger", - "solana-logger 1.11.6", + "solana-logger 1.11.7", "solana-runtime", - "solana-sdk 1.11.6", + "solana-sdk 1.11.7", "solana-stake-program", "solana-version", "solana-vote-program", @@ -5266,26 +5266,26 @@ dependencies = [ [[package]] name = "solana-genesis-utils" -version = "1.11.6" +version = "1.11.7" dependencies = [ "solana-download-utils", "solana-runtime", - "solana-sdk 1.11.6", + "solana-sdk 1.11.7", ] [[package]] name = "solana-geyser-plugin-interface" -version = "1.11.6" +version = "1.11.7" dependencies = [ "log", - "solana-sdk 1.11.6", + "solana-sdk 1.11.7", "solana-transaction-status", "thiserror", ] [[package]] name = "solana-geyser-plugin-manager" -version = "1.11.6" +version = "1.11.7" dependencies = [ "bs58", "crossbeam-channel", @@ -5298,14 +5298,14 @@ dependencies = [ "solana-metrics", "solana-rpc", "solana-runtime", - "solana-sdk 1.11.6", + "solana-sdk 1.11.7", "solana-transaction-status", "thiserror", ] [[package]] name = "solana-gossip" -version = "1.11.6" +version = "1.11.7" dependencies = [ "bincode", "bv", @@ -5332,17 +5332,17 @@ dependencies = [ "solana-clap-utils", "solana-client", "solana-entry", - "solana-frozen-abi 1.11.6", - "solana-frozen-abi-macro 1.11.6", + "solana-frozen-abi 1.11.7", + "solana-frozen-abi-macro 1.11.7", "solana-ledger", - "solana-logger 1.11.6", + "solana-logger 1.11.7", "solana-measure", "solana-metrics", "solana-net-utils", "solana-perf", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.11.6", + "solana-sdk 1.11.7", "solana-streamer", "solana-version", "solana-vote-program", @@ -5351,7 +5351,7 @@ dependencies = [ [[package]] name = "solana-install" -version = "1.11.6" +version = "1.11.7" dependencies = [ "atty", "bincode", @@ -5372,8 +5372,8 @@ dependencies = [ "solana-clap-utils", "solana-client", "solana-config-program", - "solana-logger 1.11.6", - "solana-sdk 1.11.6", + "solana-logger 1.11.7", + "solana-sdk 1.11.7", "solana-version", "tar", "tempfile", @@ -5384,7 +5384,7 @@ dependencies = [ [[package]] name = "solana-keygen" -version = "1.11.6" +version = "1.11.7" dependencies = [ "bs58", "clap 3.1.8", @@ -5393,14 +5393,14 @@ dependencies = [ "solana-clap-v3-utils", "solana-cli-config", "solana-remote-wallet", - "solana-sdk 1.11.6", + "solana-sdk 1.11.7", "solana-version", "tiny-bip39", ] [[package]] name = "solana-ledger" -version = "1.11.6" +version = "1.11.7" dependencies = [ "assert_matches", "bincode", @@ -5434,16 +5434,16 @@ dependencies = [ "solana-account-decoder", "solana-bpf-loader-program", "solana-entry", - "solana-frozen-abi 1.11.6", - "solana-frozen-abi-macro 1.11.6", - "solana-logger 1.11.6", + "solana-frozen-abi 1.11.7", + "solana-frozen-abi-macro 1.11.7", + "solana-logger 1.11.7", "solana-measure", "solana-metrics", "solana-perf", "solana-program-runtime", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.11.6", + "solana-sdk 1.11.7", "solana-stake-program", "solana-storage-bigtable", "solana-storage-proto", @@ -5461,7 +5461,7 @@ dependencies = [ [[package]] name = "solana-ledger-tool" -version = "1.11.6" +version = "1.11.7" dependencies = [ "assert_cmd", "bs58", @@ -5483,10 +5483,10 @@ dependencies = [ "solana-core", "solana-entry", "solana-ledger", - "solana-logger 1.11.6", + "solana-logger 1.11.7", "solana-measure", "solana-runtime", - "solana-sdk 1.11.6", + "solana-sdk 1.11.7", "solana-stake-program", "solana-storage-bigtable", "solana-transaction-status", @@ -5498,7 +5498,7 @@ dependencies = [ [[package]] name = "solana-local-cluster" -version = "1.11.6" +version = "1.11.7" dependencies = [ "assert_matches", "crossbeam-channel", @@ -5516,9 +5516,9 @@ dependencies = [ "solana-entry", "solana-gossip", "solana-ledger", - "solana-logger 1.11.6", + "solana-logger 1.11.7", "solana-runtime", - "solana-sdk 1.11.6", + "solana-sdk 1.11.7", "solana-stake-program", "solana-streamer", "solana-vote-program", @@ -5527,13 +5527,13 @@ dependencies = [ [[package]] name = "solana-log-analyzer" -version = "1.11.6" +version = "1.11.7" dependencies = [ "byte-unit", "clap 3.1.8", "serde", "serde_json", - "solana-logger 1.11.6", + "solana-logger 1.11.7", "solana-version", ] @@ -5550,7 +5550,7 @@ dependencies = [ [[package]] name = "solana-logger" -version = "1.11.6" +version = "1.11.7" dependencies = [ "env_logger", "lazy_static", @@ -5559,38 +5559,38 @@ dependencies = [ [[package]] name = "solana-measure" -version = "1.11.6" +version = "1.11.7" dependencies = [ "log", - "solana-sdk 1.11.6", + "solana-sdk 1.11.7", ] [[package]] name = "solana-merkle-root-bench" -version = "1.11.6" +version = "1.11.7" dependencies = [ "clap 2.33.3", "log", - "solana-logger 1.11.6", + "solana-logger 1.11.7", "solana-measure", "solana-runtime", - "solana-sdk 1.11.6", + "solana-sdk 1.11.7", "solana-version", ] [[package]] name = "solana-merkle-tree" -version = "1.11.6" +version = "1.11.7" dependencies = [ "fast-math", "hex", "matches", - "solana-program 1.11.6", + "solana-program 1.11.7", ] [[package]] name = "solana-metrics" -version = "1.11.6" +version = "1.11.7" dependencies = [ "crossbeam-channel", "env_logger", @@ -5600,23 +5600,23 @@ dependencies = [ "rand 0.7.3", "reqwest", "serial_test", - "solana-sdk 1.11.6", + "solana-sdk 1.11.7", ] [[package]] name = "solana-net-shaper" -version = "1.11.6" +version = "1.11.7" dependencies = [ "clap 3.1.8", "rand 0.7.3", "serde", "serde_json", - "solana-logger 1.11.6", + "solana-logger 1.11.7", ] [[package]] name = "solana-net-utils" -version = "1.11.6" +version = "1.11.7" dependencies = [ "bincode", "clap 3.1.8", @@ -5627,8 +5627,8 @@ dependencies = [ "serde", "serde_derive", "socket2", - "solana-logger 1.11.6", - "solana-sdk 1.11.6", + "solana-logger 1.11.7", + "solana-sdk 1.11.7", "solana-version", "tokio", "url 2.2.2", @@ -5636,7 +5636,7 @@ dependencies = [ [[package]] name = "solana-notifier" -version = "1.11.6" +version = "1.11.7" dependencies = [ "log", "reqwest", @@ -5645,7 +5645,7 @@ dependencies = [ [[package]] name = "solana-perf" -version = "1.11.6" +version = "1.11.7" dependencies = [ "ahash", "bincode", @@ -5663,16 +5663,16 @@ dependencies = [ "rand 0.7.3", "rayon", "serde", - "solana-logger 1.11.6", + "solana-logger 1.11.7", "solana-metrics", "solana-rayon-threadlimit", - "solana-sdk 1.11.6", + "solana-sdk 1.11.7", "solana-vote-program", ] [[package]] name = "solana-poh" -version = "1.11.6" +version = "1.11.7" dependencies = [ "bincode", "core_affinity", @@ -5682,29 +5682,29 @@ dependencies = [ "rand 0.7.3", "solana-entry", "solana-ledger", - "solana-logger 1.11.6", + "solana-logger 1.11.7", "solana-measure", "solana-metrics", "solana-perf", "solana-runtime", - "solana-sdk 1.11.6", + "solana-sdk 1.11.7", "solana-sys-tuner", "thiserror", ] [[package]] name = "solana-poh-bench" -version = "1.11.6" +version = "1.11.7" dependencies = [ "clap 3.1.8", "log", "rand 0.7.3", "rayon", "solana-entry", - "solana-logger 1.11.6", + "solana-logger 1.11.7", "solana-measure", "solana-perf", - "solana-sdk 1.11.6", + "solana-sdk 1.11.7", "solana-version", ] @@ -5752,7 +5752,7 @@ dependencies = [ [[package]] name = "solana-program" -version = "1.11.6" +version = "1.11.7" dependencies = [ "anyhow", "assert_matches", @@ -5790,10 +5790,10 @@ dependencies = [ "serde_json", "sha2 0.10.2", "sha3 0.10.1", - "solana-frozen-abi 1.11.6", - "solana-frozen-abi-macro 1.11.6", - "solana-logger 1.11.6", - "solana-sdk-macro 1.11.6", + "solana-frozen-abi 1.11.7", + "solana-frozen-abi-macro 1.11.7", + "solana-logger 1.11.7", + "solana-sdk-macro 1.11.7", "static_assertions", "thiserror", "tiny-bip39", @@ -5803,7 +5803,7 @@ dependencies = [ [[package]] name = "solana-program-runtime" -version = "1.11.6" +version = "1.11.7" dependencies = [ "base64 0.13.0", "bincode", @@ -5817,18 +5817,18 @@ dependencies = [ "num-traits", "rustc_version 0.4.0", "serde", - "solana-frozen-abi 1.11.6", - "solana-frozen-abi-macro 1.11.6", - "solana-logger 1.11.6", + "solana-frozen-abi 1.11.7", + "solana-frozen-abi-macro 1.11.7", + "solana-logger 1.11.7", "solana-measure", "solana-metrics", - "solana-sdk 1.11.6", + "solana-sdk 1.11.7", "thiserror", ] [[package]] name = "solana-program-test" -version = "1.11.6" +version = "1.11.7" dependencies = [ "assert_matches", "async-trait", @@ -5840,10 +5840,10 @@ dependencies = [ "solana-banks-client", "solana-banks-server", "solana-bpf-loader-program", - "solana-logger 1.11.6", + "solana-logger 1.11.7", "solana-program-runtime", "solana-runtime", - "solana-sdk 1.11.6", + "solana-sdk 1.11.7", "solana-vote-program", "thiserror", "tokio", @@ -5851,7 +5851,7 @@ dependencies = [ [[package]] name = "solana-rayon-threadlimit" -version = "1.11.6" +version = "1.11.7" dependencies = [ "lazy_static", "num_cpus", @@ -5859,7 +5859,7 @@ dependencies = [ [[package]] name = "solana-remote-wallet" -version = "1.11.6" +version = "1.11.7" dependencies = [ "console", "dialoguer", @@ -5870,14 +5870,14 @@ dependencies = [ "parking_lot 0.12.1", "qstring", "semver 1.0.10", - "solana-sdk 1.11.6", + "solana-sdk 1.11.7", "thiserror", "uriparse", ] [[package]] name = "solana-rpc" -version = "1.11.6" +version = "1.11.7" dependencies = [ "base64 0.13.0", "bincode", @@ -5913,7 +5913,7 @@ dependencies = [ "solana-poh", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.11.6", + "solana-sdk 1.11.7", "solana-send-transaction-service", "solana-stake-program", "solana-storage-bigtable", @@ -5932,7 +5932,7 @@ dependencies = [ [[package]] name = "solana-rpc-test" -version = "1.11.6" +version = "1.11.7" dependencies = [ "bincode", "bs58", @@ -5944,9 +5944,9 @@ dependencies = [ "serde_json", "solana-account-decoder", "solana-client", - "solana-logger 1.11.6", + "solana-logger 1.11.7", "solana-rpc", - "solana-sdk 1.11.6", + "solana-sdk 1.11.7", "solana-streamer", "solana-test-validator", "solana-transaction-status", @@ -5955,7 +5955,7 @@ dependencies = [ [[package]] name = "solana-runtime" -version = "1.11.6" +version = "1.11.7" dependencies = [ "arrayref", "assert_matches", @@ -5995,18 +5995,18 @@ dependencies = [ "solana-bucket-map", "solana-compute-budget-program", "solana-config-program", - "solana-frozen-abi 1.11.6", - "solana-frozen-abi-macro 1.11.6", - "solana-logger 1.11.6", + "solana-frozen-abi 1.11.7", + "solana-frozen-abi-macro 1.11.7", + "solana-logger 1.11.7", "solana-measure", "solana-metrics", "solana-program-runtime", "solana-rayon-threadlimit", - "solana-sdk 1.11.6", + "solana-sdk 1.11.7", "solana-stake-program", "solana-vote-program", "solana-zk-token-proof-program", - "solana-zk-token-sdk 1.11.6", + "solana-zk-token-sdk 1.11.7", "strum", "strum_macros", "symlink", @@ -6069,7 +6069,7 @@ dependencies = [ [[package]] name = "solana-sdk" -version = "1.11.6" +version = "1.11.7" dependencies = [ "anyhow", "assert_matches", @@ -6109,11 +6109,11 @@ dependencies = [ "serde_json", "sha2 0.10.2", "sha3 0.10.1", - "solana-frozen-abi 1.11.6", - "solana-frozen-abi-macro 1.11.6", - "solana-logger 1.11.6", - "solana-program 1.11.6", - "solana-sdk-macro 1.11.6", + "solana-frozen-abi 1.11.7", + "solana-frozen-abi-macro 1.11.7", + "solana-logger 1.11.7", + "solana-program 1.11.7", + "solana-sdk-macro 1.11.7", "static_assertions", "thiserror", "tiny-bip39", @@ -6136,7 +6136,7 @@ dependencies = [ [[package]] name = "solana-sdk-macro" -version = "1.11.6" +version = "1.11.7" dependencies = [ "bs58", "proc-macro2 1.0.41", @@ -6147,21 +6147,21 @@ dependencies = [ [[package]] name = "solana-send-transaction-service" -version = "1.11.6" +version = "1.11.7" dependencies = [ "crossbeam-channel", "log", "solana-client", - "solana-logger 1.11.6", + "solana-logger 1.11.7", "solana-measure", "solana-metrics", "solana-runtime", - "solana-sdk 1.11.6", + "solana-sdk 1.11.7", ] [[package]] name = "solana-stake-accounts" -version = "1.11.6" +version = "1.11.7" dependencies = [ "clap 2.33.3", "solana-clap-utils", @@ -6169,13 +6169,13 @@ dependencies = [ "solana-client", "solana-remote-wallet", "solana-runtime", - "solana-sdk 1.11.6", + "solana-sdk 1.11.7", "solana-stake-program", ] [[package]] name = "solana-stake-program" -version = "1.11.6" +version = "1.11.7" dependencies = [ "assert_matches", "bincode", @@ -6187,12 +6187,12 @@ dependencies = [ "serde", "serde_derive", "solana-config-program", - "solana-frozen-abi 1.11.6", - "solana-frozen-abi-macro 1.11.6", - "solana-logger 1.11.6", + "solana-frozen-abi 1.11.7", + "solana-frozen-abi-macro 1.11.7", + "solana-logger 1.11.7", "solana-metrics", "solana-program-runtime", - "solana-sdk 1.11.6", + "solana-sdk 1.11.7", "solana-vote-program", "test-case", "thiserror", @@ -6200,7 +6200,7 @@ dependencies = [ [[package]] name = "solana-storage-bigtable" -version = "1.11.6" +version = "1.11.7" dependencies = [ "backoff", "bincode", @@ -6221,7 +6221,7 @@ dependencies = [ "serde_derive", "smpl_jwt", "solana-metrics", - "solana-sdk 1.11.6", + "solana-sdk 1.11.7", "solana-storage-proto", "solana-transaction-status", "thiserror", @@ -6232,7 +6232,7 @@ dependencies = [ [[package]] name = "solana-storage-proto" -version = "1.11.6" +version = "1.11.7" dependencies = [ "bincode", "bs58", @@ -6241,25 +6241,25 @@ dependencies = [ "protobuf-src", "serde", "solana-account-decoder", - "solana-sdk 1.11.6", + "solana-sdk 1.11.7", "solana-transaction-status", "tonic-build 0.8.0", ] [[package]] name = "solana-store-tool" -version = "1.11.6" +version = "1.11.7" dependencies = [ "clap 2.33.3", "log", - "solana-logger 1.11.6", + "solana-logger 1.11.7", "solana-runtime", "solana-version", ] [[package]] name = "solana-streamer" -version = "1.11.6" +version = "1.11.7" dependencies = [ "crossbeam-channel", "futures-util", @@ -6276,10 +6276,10 @@ dependencies = [ "rand 0.7.3", "rcgen", "rustls 0.20.6", - "solana-logger 1.11.6", + "solana-logger 1.11.7", "solana-metrics", "solana-perf", - "solana-sdk 1.11.6", + "solana-sdk 1.11.7", "thiserror", "tokio", "x509-parser", @@ -6287,13 +6287,13 @@ dependencies = [ [[package]] name = "solana-sys-tuner" -version = "1.11.6" +version = "1.11.7" dependencies = [ "clap 2.33.3", "libc", "log", "nix", - "solana-logger 1.11.6", + "solana-logger 1.11.7", "solana-version", "sysctl", "unix_socket2", @@ -6302,7 +6302,7 @@ dependencies = [ [[package]] name = "solana-test-validator" -version = "1.11.6" +version = "1.11.7" dependencies = [ "base64 0.13.0", "log", @@ -6313,20 +6313,20 @@ dependencies = [ "solana-core", "solana-gossip", "solana-ledger", - "solana-logger 1.11.6", + "solana-logger 1.11.7", "solana-net-utils", "solana-program-runtime", "solana-program-test", "solana-rpc", "solana-runtime", - "solana-sdk 1.11.6", + "solana-sdk 1.11.7", "solana-streamer", "tokio", ] [[package]] name = "solana-tokens" -version = "1.11.6" +version = "1.11.7" dependencies = [ "bincode", "chrono", @@ -6342,9 +6342,9 @@ dependencies = [ "solana-clap-utils", "solana-cli-config", "solana-client", - "solana-logger 1.11.6", + "solana-logger 1.11.7", "solana-remote-wallet", - "solana-sdk 1.11.6", + "solana-sdk 1.11.7", "solana-streamer", "solana-test-validator", "solana-transaction-status", @@ -6357,7 +6357,7 @@ dependencies = [ [[package]] name = "solana-transaction-dos" -version = "1.11.6" +version = "1.11.7" dependencies = [ "bincode", "clap 2.33.3", @@ -6371,11 +6371,11 @@ dependencies = [ "solana-faucet", "solana-gossip", "solana-local-cluster", - "solana-logger 1.11.6", + "solana-logger 1.11.7", "solana-measure", "solana-net-utils", "solana-runtime", - "solana-sdk 1.11.6", + "solana-sdk 1.11.7", "solana-streamer", "solana-transaction-status", "solana-version", @@ -6383,7 +6383,7 @@ dependencies = [ [[package]] name = "solana-transaction-status" -version = "1.11.6" +version = "1.11.7" dependencies = [ "Inflector", "base64 0.13.0", @@ -6398,7 +6398,7 @@ dependencies = [ "solana-account-decoder", "solana-measure", "solana-metrics", - "solana-sdk 1.11.6", + "solana-sdk 1.11.7", "solana-vote-program", "spl-associated-token-account", "spl-memo", @@ -6409,7 +6409,7 @@ dependencies = [ [[package]] name = "solana-upload-perf" -version = "1.11.6" +version = "1.11.7" dependencies = [ "serde_json", "solana-metrics", @@ -6417,7 +6417,7 @@ dependencies = [ [[package]] name = "solana-validator" -version = "1.11.6" +version = "1.11.7" dependencies = [ "chrono", "clap 2.33.3", @@ -6448,14 +6448,14 @@ dependencies = [ "solana-genesis-utils", "solana-gossip", "solana-ledger", - "solana-logger 1.11.6", + "solana-logger 1.11.7", "solana-metrics", "solana-net-utils", "solana-perf", "solana-poh", "solana-rpc", "solana-runtime", - "solana-sdk 1.11.6", + "solana-sdk 1.11.7", "solana-send-transaction-service", "solana-storage-bigtable", "solana-streamer", @@ -6468,21 +6468,21 @@ dependencies = [ [[package]] name = "solana-version" -version = "1.11.6" +version = "1.11.7" dependencies = [ "log", "rustc_version 0.4.0", "semver 1.0.10", "serde", "serde_derive", - "solana-frozen-abi 1.11.6", - "solana-frozen-abi-macro 1.11.6", - "solana-sdk 1.11.6", + "solana-frozen-abi 1.11.7", + "solana-frozen-abi-macro 1.11.7", + "solana-sdk 1.11.7", ] [[package]] name = "solana-vote-program" -version = "1.11.6" +version = "1.11.7" dependencies = [ "bincode", "log", @@ -6491,18 +6491,18 @@ dependencies = [ "rustc_version 0.4.0", "serde", "serde_derive", - "solana-frozen-abi 1.11.6", - "solana-frozen-abi-macro 1.11.6", - "solana-logger 1.11.6", + "solana-frozen-abi 1.11.7", + "solana-frozen-abi-macro 1.11.7", + "solana-logger 1.11.7", "solana-metrics", "solana-program-runtime", - "solana-sdk 1.11.6", + "solana-sdk 1.11.7", "thiserror", ] [[package]] name = "solana-watchtower" -version = "1.11.6" +version = "1.11.7" dependencies = [ "clap 2.33.3", "humantime", @@ -6511,24 +6511,24 @@ dependencies = [ "solana-cli-config", "solana-cli-output", "solana-client", - "solana-logger 1.11.6", + "solana-logger 1.11.7", "solana-metrics", "solana-notifier", - "solana-sdk 1.11.6", + "solana-sdk 1.11.7", "solana-version", ] [[package]] name = "solana-zk-token-proof-program" -version = "1.11.6" +version = "1.11.7" dependencies = [ "bytemuck", "getrandom 0.1.16", "num-derive", "num-traits", "solana-program-runtime", - "solana-sdk 1.11.6", - "solana-zk-token-sdk 1.11.6", + "solana-sdk 1.11.7", + "solana-zk-token-sdk 1.11.7", ] [[package]] @@ -6563,7 +6563,7 @@ dependencies = [ [[package]] name = "solana-zk-token-sdk" -version = "1.11.6" +version = "1.11.7" dependencies = [ "aes-gcm-siv", "arrayref", @@ -6582,8 +6582,8 @@ dependencies = [ "serde", "serde_json", "sha3 0.9.1", - "solana-program 1.11.6", - "solana-sdk 1.11.6", + "solana-program 1.11.7", + "solana-sdk 1.11.7", "subtle", "thiserror", "zeroize", diff --git a/account-decoder/Cargo.toml b/account-decoder/Cargo.toml index cd12c3859f2658..e6276d5eae8ece 100644 --- a/account-decoder/Cargo.toml +++ b/account-decoder/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-account-decoder" -version = "1.11.6" +version = "1.11.7" description = "Solana account decoder" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -19,9 +19,9 @@ lazy_static = "1.4.0" serde = "1.0.138" serde_derive = "1.0.103" serde_json = "1.0.81" -solana-config-program = { path = "../programs/config", version = "=1.11.6" } -solana-sdk = { path = "../sdk", version = "=1.11.6" } -solana-vote-program = { path = "../programs/vote", version = "=1.11.6" } +solana-config-program = { path = "../programs/config", version = "=1.11.7" } +solana-sdk = { path = "../sdk", version = "=1.11.7" } +solana-vote-program = { path = "../programs/vote", version = "=1.11.7" } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } spl-token-2022 = { version = "=0.4.2", features = ["no-entrypoint"] } thiserror = "1.0" diff --git a/accounts-bench/Cargo.toml b/accounts-bench/Cargo.toml index 6f483d201f54a8..b414c1af8f7cc5 100644 --- a/accounts-bench/Cargo.toml +++ b/accounts-bench/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-accounts-bench" -version = "1.11.6" +version = "1.11.7" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -12,11 +12,11 @@ publish = false clap = "2.33.1" log = "0.4.17" rayon = "1.5.3" -solana-logger = { path = "../logger", version = "=1.11.6" } -solana-measure = { path = "../measure", version = "=1.11.6" } -solana-runtime = { path = "../runtime", version = "=1.11.6" } -solana-sdk = { path = "../sdk", version = "=1.11.6" } -solana-version = { path = "../version", version = "=1.11.6" } +solana-logger = { path = "../logger", version = "=1.11.7" } +solana-measure = { path = "../measure", version = "=1.11.7" } +solana-runtime = { path = "../runtime", version = "=1.11.7" } +solana-sdk = { path = "../sdk", version = "=1.11.7" } +solana-version = { path = "../version", version = "=1.11.7" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/accounts-cluster-bench/Cargo.toml b/accounts-cluster-bench/Cargo.toml index c08e17976bcf29..1b6b6fd8260f5d 100644 --- a/accounts-cluster-bench/Cargo.toml +++ b/accounts-cluster-bench/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-accounts-cluster-bench" -version = "1.11.6" +version = "1.11.7" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -13,25 +13,25 @@ clap = "2.33.1" log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" -solana-account-decoder = { path = "../account-decoder", version = "=1.11.6" } -solana-clap-utils = { path = "../clap-utils", version = "=1.11.6" } -solana-client = { path = "../client", version = "=1.11.6" } -solana-faucet = { path = "../faucet", version = "=1.11.6" } -solana-gossip = { path = "../gossip", version = "=1.11.6" } -solana-logger = { path = "../logger", version = "=1.11.6" } -solana-measure = { path = "../measure", version = "=1.11.6" } -solana-net-utils = { path = "../net-utils", version = "=1.11.6" } -solana-runtime = { path = "../runtime", version = "=1.11.6" } -solana-sdk = { path = "../sdk", version = "=1.11.6" } -solana-streamer = { path = "../streamer", version = "=1.11.6" } -solana-transaction-status = { path = "../transaction-status", version = "=1.11.6" } -solana-version = { path = "../version", version = "=1.11.6" } +solana-account-decoder = { path = "../account-decoder", version = "=1.11.7" } +solana-clap-utils = { path = "../clap-utils", version = "=1.11.7" } +solana-client = { path = "../client", version = "=1.11.7" } +solana-faucet = { path = "../faucet", version = "=1.11.7" } +solana-gossip = { path = "../gossip", version = "=1.11.7" } +solana-logger = { path = "../logger", version = "=1.11.7" } +solana-measure = { path = "../measure", version = "=1.11.7" } +solana-net-utils = { path = "../net-utils", version = "=1.11.7" } +solana-runtime = { path = "../runtime", version = "=1.11.7" } +solana-sdk = { path = "../sdk", version = "=1.11.7" } +solana-streamer = { path = "../streamer", version = "=1.11.7" } +solana-transaction-status = { path = "../transaction-status", version = "=1.11.7" } +solana-version = { path = "../version", version = "=1.11.7" } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } [dev-dependencies] -solana-core = { path = "../core", version = "=1.11.6" } -solana-local-cluster = { path = "../local-cluster", version = "=1.11.6" } -solana-test-validator = { path = "../test-validator", version = "=1.11.6" } +solana-core = { path = "../core", version = "=1.11.7" } +solana-local-cluster = { path = "../local-cluster", version = "=1.11.7" } +solana-test-validator = { path = "../test-validator", version = "=1.11.7" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/banking-bench/Cargo.toml b/banking-bench/Cargo.toml index 38b7de4bf2ed78..a340207a3f1d6c 100644 --- a/banking-bench/Cargo.toml +++ b/banking-bench/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-banking-bench" -version = "1.11.6" +version = "1.11.7" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,18 +14,18 @@ crossbeam-channel = "0.5" log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" -solana-client = { path = "../client", version = "=1.11.6" } -solana-core = { path = "../core", version = "=1.11.6" } -solana-gossip = { path = "../gossip", version = "=1.11.6" } -solana-ledger = { path = "../ledger", version = "=1.11.6" } -solana-logger = { path = "../logger", version = "=1.11.6" } -solana-measure = { path = "../measure", version = "=1.11.6" } -solana-perf = { path = "../perf", version = "=1.11.6" } -solana-poh = { path = "../poh", version = "=1.11.6" } -solana-runtime = { path = "../runtime", version = "=1.11.6" } -solana-sdk = { path = "../sdk", version = "=1.11.6" } -solana-streamer = { path = "../streamer", version = "=1.11.6" } -solana-version = { path = "../version", version = "=1.11.6" } +solana-client = { path = "../client", version = "=1.11.7" } +solana-core = { path = "../core", version = "=1.11.7" } +solana-gossip = { path = "../gossip", version = "=1.11.7" } +solana-ledger = { path = "../ledger", version = "=1.11.7" } +solana-logger = { path = "../logger", version = "=1.11.7" } +solana-measure = { path = "../measure", version = "=1.11.7" } +solana-perf = { path = "../perf", version = "=1.11.7" } +solana-poh = { path = "../poh", version = "=1.11.7" } +solana-runtime = { path = "../runtime", version = "=1.11.7" } +solana-sdk = { path = "../sdk", version = "=1.11.7" } +solana-streamer = { path = "../streamer", version = "=1.11.7" } +solana-version = { path = "../version", version = "=1.11.7" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/banks-client/Cargo.toml b/banks-client/Cargo.toml index fbec24c0104e44..23fc48f269d172 100644 --- a/banks-client/Cargo.toml +++ b/banks-client/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-banks-client" -version = "1.11.6" +version = "1.11.7" description = "Solana banks client" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,17 +12,17 @@ edition = "2021" [dependencies] borsh = "0.9.3" futures = "0.3" -solana-banks-interface = { path = "../banks-interface", version = "=1.11.6" } -solana-program = { path = "../sdk/program", version = "=1.11.6" } -solana-sdk = { path = "../sdk", version = "=1.11.6" } +solana-banks-interface = { path = "../banks-interface", version = "=1.11.7" } +solana-program = { path = "../sdk/program", version = "=1.11.7" } +solana-sdk = { path = "../sdk", version = "=1.11.7" } tarpc = { version = "0.29.0", features = ["full"] } thiserror = "1.0" tokio = { version = "~1.14.1", features = ["full"] } tokio-serde = { version = "0.8", features = ["bincode"] } [dev-dependencies] -solana-banks-server = { path = "../banks-server", version = "=1.11.6" } -solana-runtime = { path = "../runtime", version = "=1.11.6" } +solana-banks-server = { path = "../banks-server", version = "=1.11.7" } +solana-runtime = { path = "../runtime", version = "=1.11.7" } [lib] crate-type = ["lib"] diff --git a/banks-interface/Cargo.toml b/banks-interface/Cargo.toml index 31a4775ddedebd..a3881d7e02a700 100644 --- a/banks-interface/Cargo.toml +++ b/banks-interface/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-banks-interface" -version = "1.11.6" +version = "1.11.7" description = "Solana banks RPC interface" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -11,7 +11,7 @@ edition = "2021" [dependencies] serde = { version = "1.0.138", features = ["derive"] } -solana-sdk = { path = "../sdk", version = "=1.11.6" } +solana-sdk = { path = "../sdk", version = "=1.11.7" } tarpc = { version = "0.29.0", features = ["full"] } [lib] diff --git a/banks-server/Cargo.toml b/banks-server/Cargo.toml index 52d8b6426354b4..0f3c0b527c3bb2 100644 --- a/banks-server/Cargo.toml +++ b/banks-server/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-banks-server" -version = "1.11.6" +version = "1.11.7" description = "Solana banks server" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,11 +13,11 @@ edition = "2021" bincode = "1.3.3" crossbeam-channel = "0.5" futures = "0.3" -solana-banks-interface = { path = "../banks-interface", version = "=1.11.6" } -solana-client = { path = "../client", version = "=1.11.6" } -solana-runtime = { path = "../runtime", version = "=1.11.6" } -solana-sdk = { path = "../sdk", version = "=1.11.6" } -solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.11.6" } +solana-banks-interface = { path = "../banks-interface", version = "=1.11.7" } +solana-client = { path = "../client", version = "=1.11.7" } +solana-runtime = { path = "../runtime", version = "=1.11.7" } +solana-sdk = { path = "../sdk", version = "=1.11.7" } +solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.11.7" } tarpc = { version = "0.29.0", features = ["full"] } tokio = { version = "1", features = ["full"] } tokio-serde = { version = "0.8", features = ["bincode"] } diff --git a/bench-streamer/Cargo.toml b/bench-streamer/Cargo.toml index 00286190aa1fc8..3e59739ff5690d 100644 --- a/bench-streamer/Cargo.toml +++ b/bench-streamer/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-bench-streamer" -version = "1.11.6" +version = "1.11.7" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -11,9 +11,9 @@ publish = false [dependencies] clap = { version = "3.1.5", features = ["cargo"] } crossbeam-channel = "0.5" -solana-net-utils = { path = "../net-utils", version = "=1.11.6" } -solana-streamer = { path = "../streamer", version = "=1.11.6" } -solana-version = { path = "../version", version = "=1.11.6" } +solana-net-utils = { path = "../net-utils", version = "=1.11.7" } +solana-streamer = { path = "../streamer", version = "=1.11.7" } +solana-version = { path = "../version", version = "=1.11.7" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/bench-tps/Cargo.toml b/bench-tps/Cargo.toml index 6638c36f7bd993..ade81bb5dae760 100644 --- a/bench-tps/Cargo.toml +++ b/bench-tps/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-bench-tps" -version = "1.11.6" +version = "1.11.7" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -15,28 +15,28 @@ log = "0.4.17" rayon = "1.5.3" serde_json = "1.0.81" serde_yaml = "0.8.26" -solana-clap-utils = { path = "../clap-utils", version = "=1.11.6" } -solana-cli-config = { path = "../cli-config", version = "=1.11.6" } -solana-client = { path = "../client", version = "=1.11.6" } -solana-core = { path = "../core", version = "=1.11.6" } -solana-faucet = { path = "../faucet", version = "=1.11.6" } -solana-genesis = { path = "../genesis", version = "=1.11.6" } -solana-gossip = { path = "../gossip", version = "=1.11.6" } -solana-logger = { path = "../logger", version = "=1.11.6" } -solana-measure = { path = "../measure", version = "=1.11.6" } -solana-metrics = { path = "../metrics", version = "=1.11.6" } -solana-net-utils = { path = "../net-utils", version = "=1.11.6" } -solana-rpc = { path = "../rpc", version = "=1.11.6" } -solana-runtime = { path = "../runtime", version = "=1.11.6" } -solana-sdk = { path = "../sdk", version = "=1.11.6" } -solana-streamer = { path = "../streamer", version = "=1.11.6" } -solana-version = { path = "../version", version = "=1.11.6" } +solana-clap-utils = { path = "../clap-utils", version = "=1.11.7" } +solana-cli-config = { path = "../cli-config", version = "=1.11.7" } +solana-client = { path = "../client", version = "=1.11.7" } +solana-core = { path = "../core", version = "=1.11.7" } +solana-faucet = { path = "../faucet", version = "=1.11.7" } +solana-genesis = { path = "../genesis", version = "=1.11.7" } +solana-gossip = { path = "../gossip", version = "=1.11.7" } +solana-logger = { path = "../logger", version = "=1.11.7" } +solana-measure = { path = "../measure", version = "=1.11.7" } +solana-metrics = { path = "../metrics", version = "=1.11.7" } +solana-net-utils = { path = "../net-utils", version = "=1.11.7" } +solana-rpc = { path = "../rpc", version = "=1.11.7" } +solana-runtime = { path = "../runtime", version = "=1.11.7" } +solana-sdk = { path = "../sdk", version = "=1.11.7" } +solana-streamer = { path = "../streamer", version = "=1.11.7" } +solana-version = { path = "../version", version = "=1.11.7" } thiserror = "1.0" [dev-dependencies] serial_test = "0.8.0" -solana-local-cluster = { path = "../local-cluster", version = "=1.11.6" } -solana-test-validator = { path = "../test-validator", version = "=1.11.6" } +solana-local-cluster = { path = "../local-cluster", version = "=1.11.7" } +solana-test-validator = { path = "../test-validator", version = "=1.11.7" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/bloom/Cargo.toml b/bloom/Cargo.toml index e246024488f47b..4052c07239251f 100644 --- a/bloom/Cargo.toml +++ b/bloom/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bloom" -version = "1.11.6" +version = "1.11.7" description = "Solana bloom filter" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -17,9 +17,9 @@ rand = "0.7.0" rayon = "1.5.3" serde = { version = "1.0.138", features = ["rc"] } serde_derive = "1.0.103" -solana-frozen-abi = { path = "../frozen-abi", version = "=1.11.6" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.11.6" } -solana-sdk = { path = "../sdk", version = "=1.11.6" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.11.7" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.11.7" } +solana-sdk = { path = "../sdk", version = "=1.11.7" } [lib] crate-type = ["lib"] diff --git a/bucket_map/Cargo.toml b/bucket_map/Cargo.toml index 55cabef444eba1..cdd175091fdb53 100644 --- a/bucket_map/Cargo.toml +++ b/bucket_map/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bucket-map" -version = "1.11.6" +version = "1.11.7" description = "solana-bucket-map" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-bucket-map" @@ -15,14 +15,14 @@ log = { version = "0.4.17" } memmap2 = "0.5.3" modular-bitfield = "0.11.2" rand = "0.7.0" -solana-measure = { path = "../measure", version = "=1.11.6" } -solana-sdk = { path = "../sdk", version = "=1.11.6" } +solana-measure = { path = "../measure", version = "=1.11.7" } +solana-sdk = { path = "../sdk", version = "=1.11.7" } tempfile = "3.3.0" [dev-dependencies] fs_extra = "1.2.0" rayon = "1.5.3" -solana-logger = { path = "../logger", version = "=1.11.6" } +solana-logger = { path = "../logger", version = "=1.11.7" } [lib] crate-type = ["lib"] diff --git a/clap-utils/Cargo.toml b/clap-utils/Cargo.toml index ecae31fa52cfa8..6dc68f2850331e 100644 --- a/clap-utils/Cargo.toml +++ b/clap-utils/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-clap-utils" -version = "1.11.6" +version = "1.11.7" description = "Solana utilities for the clap" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,9 +13,9 @@ edition = "2021" chrono = "0.4" clap = "2.33.0" rpassword = "6.0" -solana-perf = { path = "../perf", version = "=1.11.6" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.11.6", default-features = false } -solana-sdk = { path = "../sdk", version = "=1.11.6" } +solana-perf = { path = "../perf", version = "=1.11.7" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.11.7", default-features = false } +solana-sdk = { path = "../sdk", version = "=1.11.7" } thiserror = "1.0.31" tiny-bip39 = "0.8.2" uriparse = "0.6.4" diff --git a/clap-v3-utils/Cargo.toml b/clap-v3-utils/Cargo.toml index bd58206a8bbc8d..01bf61a0b052fd 100644 --- a/clap-v3-utils/Cargo.toml +++ b/clap-v3-utils/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-clap-v3-utils" -version = "1.11.6" +version = "1.11.7" description = "Solana utilities for the clap v3" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,9 +13,9 @@ edition = "2021" chrono = "0.4" clap = { version = "3.1.5", features = ["cargo"] } rpassword = "6.0" -solana-perf = { path = "../perf", version = "=1.11.6" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.11.6", default-features = false } -solana-sdk = { path = "../sdk", version = "=1.11.6" } +solana-perf = { path = "../perf", version = "=1.11.7" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.11.7", default-features = false } +solana-sdk = { path = "../sdk", version = "=1.11.7" } thiserror = "1.0.31" tiny-bip39 = "0.8.2" uriparse = "0.6.4" diff --git a/cli-config/Cargo.toml b/cli-config/Cargo.toml index bbf5161438dc52..0ff252f9f01f3d 100644 --- a/cli-config/Cargo.toml +++ b/cli-config/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-cli-config" description = "Blockchain, Rebuilt for Scale" -version = "1.11.6" +version = "1.11.7" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -15,8 +15,8 @@ lazy_static = "1.4.0" serde = "1.0.138" serde_derive = "1.0.103" serde_yaml = "0.8.26" -solana-clap-utils = { path = "../clap-utils", version = "=1.11.6" } -solana-sdk = { path = "../sdk", version = "=1.11.6" } +solana-clap-utils = { path = "../clap-utils", version = "=1.11.7" } +solana-sdk = { path = "../sdk", version = "=1.11.7" } url = "2.2.2" [dev-dependencies] diff --git a/cli-output/Cargo.toml b/cli-output/Cargo.toml index 88adddaa1a47dd..9b526402960244 100644 --- a/cli-output/Cargo.toml +++ b/cli-output/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-cli-output" description = "Blockchain, Rebuilt for Scale" -version = "1.11.6" +version = "1.11.7" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -21,13 +21,13 @@ pretty-hex = "0.3.0" semver = "1.0.10" serde = "1.0.138" serde_json = "1.0.81" -solana-account-decoder = { path = "../account-decoder", version = "=1.11.6" } -solana-clap-utils = { path = "../clap-utils", version = "=1.11.6" } -solana-cli-config = { path = "../cli-config", version = "=1.11.6" } -solana-client = { path = "../client", version = "=1.11.6" } -solana-sdk = { path = "../sdk", version = "=1.11.6" } -solana-transaction-status = { path = "../transaction-status", version = "=1.11.6" } -solana-vote-program = { path = "../programs/vote", version = "=1.11.6" } +solana-account-decoder = { path = "../account-decoder", version = "=1.11.7" } +solana-clap-utils = { path = "../clap-utils", version = "=1.11.7" } +solana-cli-config = { path = "../cli-config", version = "=1.11.7" } +solana-client = { path = "../client", version = "=1.11.7" } +solana-sdk = { path = "../sdk", version = "=1.11.7" } +solana-transaction-status = { path = "../transaction-status", version = "=1.11.7" } +solana-vote-program = { path = "../programs/vote", version = "=1.11.7" } spl-memo = { version = "=3.0.1", features = ["no-entrypoint"] } [dev-dependencies] diff --git a/cli/Cargo.toml b/cli/Cargo.toml index 026b8a27f114f6..e776ee4fa4f4fb 100644 --- a/cli/Cargo.toml +++ b/cli/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-cli" description = "Blockchain, Rebuilt for Scale" -version = "1.11.6" +version = "1.11.7" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -27,29 +27,29 @@ semver = "1.0.10" serde = "1.0.138" serde_derive = "1.0.103" serde_json = "1.0.81" -solana-account-decoder = { path = "../account-decoder", version = "=1.11.6" } -solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.11.6" } -solana-clap-utils = { path = "../clap-utils", version = "=1.11.6" } -solana-cli-config = { path = "../cli-config", version = "=1.11.6" } -solana-cli-output = { path = "../cli-output", version = "=1.11.6" } -solana-client = { path = "../client", version = "=1.11.6" } -solana-config-program = { path = "../programs/config", version = "=1.11.6" } -solana-faucet = { path = "../faucet", version = "=1.11.6" } -solana-logger = { path = "../logger", version = "=1.11.6" } -solana-program-runtime = { path = "../program-runtime", version = "=1.11.6" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.11.6" } -solana-sdk = { path = "../sdk", version = "=1.11.6" } -solana-transaction-status = { path = "../transaction-status", version = "=1.11.6" } -solana-version = { path = "../version", version = "=1.11.6" } -solana-vote-program = { path = "../programs/vote", version = "=1.11.6" } +solana-account-decoder = { path = "../account-decoder", version = "=1.11.7" } +solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.11.7" } +solana-clap-utils = { path = "../clap-utils", version = "=1.11.7" } +solana-cli-config = { path = "../cli-config", version = "=1.11.7" } +solana-cli-output = { path = "../cli-output", version = "=1.11.7" } +solana-client = { path = "../client", version = "=1.11.7" } +solana-config-program = { path = "../programs/config", version = "=1.11.7" } +solana-faucet = { path = "../faucet", version = "=1.11.7" } +solana-logger = { path = "../logger", version = "=1.11.7" } +solana-program-runtime = { path = "../program-runtime", version = "=1.11.7" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.11.7" } +solana-sdk = { path = "../sdk", version = "=1.11.7" } +solana-transaction-status = { path = "../transaction-status", version = "=1.11.7" } +solana-version = { path = "../version", version = "=1.11.7" } +solana-vote-program = { path = "../programs/vote", version = "=1.11.7" } solana_rbpf = "=0.2.31" spl-memo = { version = "=3.0.1", features = ["no-entrypoint"] } thiserror = "1.0.31" tiny-bip39 = "0.8.2" [dev-dependencies] -solana-streamer = { path = "../streamer", version = "=1.11.6" } -solana-test-validator = { path = "../test-validator", version = "=1.11.6" } +solana-streamer = { path = "../streamer", version = "=1.11.7" } +solana-test-validator = { path = "../test-validator", version = "=1.11.7" } tempfile = "3.3.0" [[bin]] diff --git a/client-test/Cargo.toml b/client-test/Cargo.toml index b7166885bdfd40..919fcc0e2fe615 100644 --- a/client-test/Cargo.toml +++ b/client-test/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-client-test" -version = "1.11.6" +version = "1.11.7" description = "Solana RPC Test" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,25 +14,25 @@ publish = false futures-util = "0.3.21" serde_json = "1.0.81" serial_test = "0.8.0" -solana-client = { path = "../client", version = "=1.11.6" } -solana-ledger = { path = "../ledger", version = "=1.11.6" } -solana-measure = { path = "../measure", version = "=1.11.6" } -solana-merkle-tree = { path = "../merkle-tree", version = "=1.11.6" } -solana-metrics = { path = "../metrics", version = "=1.11.6" } -solana-perf = { path = "../perf", version = "=1.11.6" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.11.6" } -solana-rpc = { path = "../rpc", version = "=1.11.6" } -solana-runtime = { path = "../runtime", version = "=1.11.6" } -solana-sdk = { path = "../sdk", version = "=1.11.6" } -solana-streamer = { path = "../streamer", version = "=1.11.6" } -solana-test-validator = { path = "../test-validator", version = "=1.11.6" } -solana-transaction-status = { path = "../transaction-status", version = "=1.11.6" } -solana-version = { path = "../version", version = "=1.11.6" } +solana-client = { path = "../client", version = "=1.11.7" } +solana-ledger = { path = "../ledger", version = "=1.11.7" } +solana-measure = { path = "../measure", version = "=1.11.7" } +solana-merkle-tree = { path = "../merkle-tree", version = "=1.11.7" } +solana-metrics = { path = "../metrics", version = "=1.11.7" } +solana-perf = { path = "../perf", version = "=1.11.7" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.11.7" } +solana-rpc = { path = "../rpc", version = "=1.11.7" } +solana-runtime = { path = "../runtime", version = "=1.11.7" } +solana-sdk = { path = "../sdk", version = "=1.11.7" } +solana-streamer = { path = "../streamer", version = "=1.11.7" } +solana-test-validator = { path = "../test-validator", version = "=1.11.7" } +solana-transaction-status = { path = "../transaction-status", version = "=1.11.7" } +solana-version = { path = "../version", version = "=1.11.7" } systemstat = "0.1.11" tokio = { version = "~1.14.1", features = ["full"] } [dev-dependencies] -solana-logger = { path = "../logger", version = "=1.11.6" } +solana-logger = { path = "../logger", version = "=1.11.7" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/client/Cargo.toml b/client/Cargo.toml index 117eabb2980c65..6c38d59a23423e 100644 --- a/client/Cargo.toml +++ b/client/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-client" -version = "1.11.6" +version = "1.11.7" description = "Solana Client" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -38,17 +38,17 @@ semver = "1.0.10" serde = "1.0.138" serde_derive = "1.0.103" serde_json = "1.0.81" -solana-account-decoder = { path = "../account-decoder", version = "=1.11.6" } -solana-clap-utils = { path = "../clap-utils", version = "=1.11.6" } -solana-faucet = { path = "../faucet", version = "=1.11.6" } -solana-measure = { path = "../measure", version = "=1.11.6" } -solana-metrics = { path = "../metrics", version = "=1.11.6" } -solana-net-utils = { path = "../net-utils", version = "=1.11.6" } -solana-sdk = { path = "../sdk", version = "=1.11.6" } -solana-streamer = { path = "../streamer", version = "=1.11.6" } -solana-transaction-status = { path = "../transaction-status", version = "=1.11.6" } -solana-version = { path = "../version", version = "=1.11.6" } -solana-vote-program = { path = "../programs/vote", version = "=1.11.6" } +solana-account-decoder = { path = "../account-decoder", version = "=1.11.7" } +solana-clap-utils = { path = "../clap-utils", version = "=1.11.7" } +solana-faucet = { path = "../faucet", version = "=1.11.7" } +solana-measure = { path = "../measure", version = "=1.11.7" } +solana-metrics = { path = "../metrics", version = "=1.11.7" } +solana-net-utils = { path = "../net-utils", version = "=1.11.7" } +solana-sdk = { path = "../sdk", version = "=1.11.7" } +solana-streamer = { path = "../streamer", version = "=1.11.7" } +solana-transaction-status = { path = "../transaction-status", version = "=1.11.7" } +solana-version = { path = "../version", version = "=1.11.7" } +solana-vote-program = { path = "../programs/vote", version = "=1.11.7" } spl-token-2022 = { version = "=0.4.2", features = ["no-entrypoint"] } thiserror = "1.0" tokio = { version = "1", features = ["full"] } @@ -61,8 +61,8 @@ url = "2.2.2" anyhow = "1.0.58" assert_matches = "1.5.0" jsonrpc-http-server = "18.0.0" -solana-logger = { path = "../logger", version = "=1.11.6" } -solana-perf = { path = "../perf", version = "=1.11.6" } +solana-logger = { path = "../logger", version = "=1.11.7" } +solana-perf = { path = "../perf", version = "=1.11.7" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/core/Cargo.toml b/core/Cargo.toml index d8b6bae0133bf9..19965e0dc7ef18 100644 --- a/core/Cargo.toml +++ b/core/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "solana-core" description = "Blockchain, Rebuilt for Scale" -version = "1.11.6" +version = "1.11.7" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-core" readme = "../README.md" @@ -35,30 +35,30 @@ rand_chacha = "0.2.2" rayon = "1.5.3" serde = "1.0.138" serde_derive = "1.0.103" -solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.11.6" } -solana-bloom = { path = "../bloom", version = "=1.11.6" } -solana-client = { path = "../client", version = "=1.11.6" } -solana-entry = { path = "../entry", version = "=1.11.6" } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.11.6" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.11.6" } -solana-geyser-plugin-manager = { path = "../geyser-plugin-manager", version = "=1.11.6" } -solana-gossip = { path = "../gossip", version = "=1.11.6" } -solana-ledger = { path = "../ledger", version = "=1.11.6" } -solana-measure = { path = "../measure", version = "=1.11.6" } -solana-metrics = { path = "../metrics", version = "=1.11.6" } -solana-net-utils = { path = "../net-utils", version = "=1.11.6" } -solana-perf = { path = "../perf", version = "=1.11.6" } -solana-poh = { path = "../poh", version = "=1.11.6" } -solana-program-runtime = { path = "../program-runtime", version = "=1.11.6" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.11.6" } -solana-rpc = { path = "../rpc", version = "=1.11.6" } -solana-runtime = { path = "../runtime", version = "=1.11.6" } -solana-sdk = { path = "../sdk", version = "=1.11.6" } -solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.11.6" } -solana-streamer = { path = "../streamer", version = "=1.11.6" } -solana-transaction-status = { path = "../transaction-status", version = "=1.11.6" } -solana-version = { path = "../version", version = "=1.11.6" } -solana-vote-program = { path = "../programs/vote", version = "=1.11.6" } +solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.11.7" } +solana-bloom = { path = "../bloom", version = "=1.11.7" } +solana-client = { path = "../client", version = "=1.11.7" } +solana-entry = { path = "../entry", version = "=1.11.7" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.11.7" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.11.7" } +solana-geyser-plugin-manager = { path = "../geyser-plugin-manager", version = "=1.11.7" } +solana-gossip = { path = "../gossip", version = "=1.11.7" } +solana-ledger = { path = "../ledger", version = "=1.11.7" } +solana-measure = { path = "../measure", version = "=1.11.7" } +solana-metrics = { path = "../metrics", version = "=1.11.7" } +solana-net-utils = { path = "../net-utils", version = "=1.11.7" } +solana-perf = { path = "../perf", version = "=1.11.7" } +solana-poh = { path = "../poh", version = "=1.11.7" } +solana-program-runtime = { path = "../program-runtime", version = "=1.11.7" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.11.7" } +solana-rpc = { path = "../rpc", version = "=1.11.7" } +solana-runtime = { path = "../runtime", version = "=1.11.7" } +solana-sdk = { path = "../sdk", version = "=1.11.7" } +solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.11.7" } +solana-streamer = { path = "../streamer", version = "=1.11.7" } +solana-transaction-status = { path = "../transaction-status", version = "=1.11.7" } +solana-version = { path = "../version", version = "=1.11.7" } +solana-vote-program = { path = "../programs/vote", version = "=1.11.7" } sys-info = "0.9.1" tempfile = "3.3.0" thiserror = "1.0" @@ -70,9 +70,9 @@ matches = "0.1.9" raptorq = "1.7.0" serde_json = "1.0.81" serial_test = "0.8.0" -solana-logger = { path = "../logger", version = "=1.11.6" } -solana-program-runtime = { path = "../program-runtime", version = "=1.11.6" } -solana-stake-program = { path = "../programs/stake", version = "=1.11.6" } +solana-logger = { path = "../logger", version = "=1.11.7" } +solana-program-runtime = { path = "../program-runtime", version = "=1.11.7" } +solana-stake-program = { path = "../programs/stake", version = "=1.11.7" } static_assertions = "1.1.0" systemstat = "0.1.11" test-case = "2.1.0" diff --git a/docs/src/developing/clients/jsonrpc-api.md b/docs/src/developing/clients/jsonrpc-api.md index 5e4507a3951579..1424f7fca13d69 100644 --- a/docs/src/developing/clients/jsonrpc-api.md +++ b/docs/src/developing/clients/jsonrpc-api.md @@ -1909,7 +1909,7 @@ Returns all accounts owned by the provided program Pubkey - `offset: ` - offset into program account data to start comparison - `bytes: ` - data to match, as encoded string - `encoding: ` - encoding for filter `bytes` data, either "base58" or "base64". Data is limited in size to 128 or fewer decoded bytes. - **NEW: This field, and base64 support generally, is only available in solana-core v1.11.6 or newer. Please omit when querying nodes on earlier versions** + **NEW: This field, and base64 support generally, is only available in solana-core v1.11.7 or newer. Please omit when querying nodes on earlier versions** - `dataSize: ` - compares the program account data length with the provided data size @@ -3128,7 +3128,7 @@ curl http://localhost:8899 -X POST -H "Content-Type: application/json" -d ' Result: ```json -{ "jsonrpc": "2.0", "result": { "solana-core": "1.11.6" }, "id": 1 } +{ "jsonrpc": "2.0", "result": { "solana-core": "1.11.7" }, "id": 1 } ``` ### getVoteAccounts diff --git a/dos/Cargo.toml b/dos/Cargo.toml index ff2fe81182a48a..de3dfa8317bfff 100644 --- a/dos/Cargo.toml +++ b/dos/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-dos" -version = "1.11.6" +version = "1.11.7" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -17,23 +17,23 @@ itertools = "0.10.3" log = "0.4.17" rand = "0.7.0" serde = "1.0.138" -solana-bench-tps = { path = "../bench-tps", version = "=1.11.6" } -solana-client = { path = "../client", version = "=1.11.6" } -solana-core = { path = "../core", version = "=1.11.6" } -solana-faucet = { path = "../faucet", version = "=1.11.6" } -solana-gossip = { path = "../gossip", version = "=1.11.6" } -solana-logger = { path = "../logger", version = "=1.11.6" } -solana-measure = { path = "../measure", version = "=1.11.6" } -solana-net-utils = { path = "../net-utils", version = "=1.11.6" } -solana-perf = { path = "../perf", version = "=1.11.6" } -solana-rpc = { path = "../rpc", version = "=1.11.6" } -solana-sdk = { path = "../sdk", version = "=1.11.6" } -solana-streamer = { path = "../streamer", version = "=1.11.6" } -solana-version = { path = "../version", version = "=1.11.6" } +solana-bench-tps = { path = "../bench-tps", version = "=1.11.7" } +solana-client = { path = "../client", version = "=1.11.7" } +solana-core = { path = "../core", version = "=1.11.7" } +solana-faucet = { path = "../faucet", version = "=1.11.7" } +solana-gossip = { path = "../gossip", version = "=1.11.7" } +solana-logger = { path = "../logger", version = "=1.11.7" } +solana-measure = { path = "../measure", version = "=1.11.7" } +solana-net-utils = { path = "../net-utils", version = "=1.11.7" } +solana-perf = { path = "../perf", version = "=1.11.7" } +solana-rpc = { path = "../rpc", version = "=1.11.7" } +solana-sdk = { path = "../sdk", version = "=1.11.7" } +solana-streamer = { path = "../streamer", version = "=1.11.7" } +solana-version = { path = "../version", version = "=1.11.7" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] [dev-dependencies] serial_test = "0.8.0" -solana-local-cluster = { path = "../local-cluster", version = "=1.11.6" } +solana-local-cluster = { path = "../local-cluster", version = "=1.11.7" } diff --git a/download-utils/Cargo.toml b/download-utils/Cargo.toml index be1af0277aba6b..2779adddbc4a63 100644 --- a/download-utils/Cargo.toml +++ b/download-utils/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-download-utils" -version = "1.11.6" +version = "1.11.7" description = "Solana Download Utils" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,8 +14,8 @@ console = "0.15.0" indicatif = "0.16.2" log = "0.4.17" reqwest = { version = "0.11.11", default-features = false, features = ["blocking", "brotli", "deflate", "gzip", "rustls-tls", "json"] } -solana-runtime = { path = "../runtime", version = "=1.11.6" } -solana-sdk = { path = "../sdk", version = "=1.11.6" } +solana-runtime = { path = "../runtime", version = "=1.11.7" } +solana-sdk = { path = "../sdk", version = "=1.11.7" } [lib] crate-type = ["lib"] diff --git a/entry/Cargo.toml b/entry/Cargo.toml index cbd5649257360e..cec7c195210d9f 100644 --- a/entry/Cargo.toml +++ b/entry/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-entry" -version = "1.11.6" +version = "1.11.7" description = "Solana Entry" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -19,16 +19,16 @@ log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" serde = "1.0.138" -solana-measure = { path = "../measure", version = "=1.11.6" } -solana-merkle-tree = { path = "../merkle-tree", version = "=1.11.6" } -solana-metrics = { path = "../metrics", version = "=1.11.6" } -solana-perf = { path = "../perf", version = "=1.11.6" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.11.6" } -solana-sdk = { path = "../sdk", version = "=1.11.6" } +solana-measure = { path = "../measure", version = "=1.11.7" } +solana-merkle-tree = { path = "../merkle-tree", version = "=1.11.7" } +solana-metrics = { path = "../metrics", version = "=1.11.7" } +solana-perf = { path = "../perf", version = "=1.11.7" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.11.7" } +solana-sdk = { path = "../sdk", version = "=1.11.7" } [dev-dependencies] matches = "0.1.9" -solana-logger = { path = "../logger", version = "=1.11.6" } +solana-logger = { path = "../logger", version = "=1.11.7" } [lib] crate-type = ["lib"] diff --git a/faucet/Cargo.toml b/faucet/Cargo.toml index 4e73f2c7ecd8dc..372c9f2a723e40 100644 --- a/faucet/Cargo.toml +++ b/faucet/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-faucet" -version = "1.11.6" +version = "1.11.7" description = "Solana Faucet" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -17,12 +17,12 @@ crossbeam-channel = "0.5" log = "0.4.17" serde = "1.0.138" serde_derive = "1.0.103" -solana-clap-utils = { path = "../clap-utils", version = "=1.11.6" } -solana-cli-config = { path = "../cli-config", version = "=1.11.6" } -solana-logger = { path = "../logger", version = "=1.11.6" } -solana-metrics = { path = "../metrics", version = "=1.11.6" } -solana-sdk = { path = "../sdk", version = "=1.11.6" } -solana-version = { path = "../version", version = "=1.11.6" } +solana-clap-utils = { path = "../clap-utils", version = "=1.11.7" } +solana-cli-config = { path = "../cli-config", version = "=1.11.7" } +solana-logger = { path = "../logger", version = "=1.11.7" } +solana-metrics = { path = "../metrics", version = "=1.11.7" } +solana-sdk = { path = "../sdk", version = "=1.11.7" } +solana-version = { path = "../version", version = "=1.11.7" } spl-memo = { version = "=3.0.1", features = ["no-entrypoint"] } thiserror = "1.0" tokio = { version = "1", features = ["full"] } diff --git a/frozen-abi/Cargo.toml b/frozen-abi/Cargo.toml index e004106334b902..e381b33d5849ed 100644 --- a/frozen-abi/Cargo.toml +++ b/frozen-abi/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-frozen-abi" -version = "1.11.6" +version = "1.11.7" description = "Solana Frozen ABI" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -20,7 +20,7 @@ serde_bytes = "0.11" serde_derive = "1.0" serde_json = "1.0" sha2 = "0.10.2" -solana-frozen-abi-macro = { path = "macro", version = "=1.11.6" } +solana-frozen-abi-macro = { path = "macro", version = "=1.11.7" } thiserror = "1.0" [target.'cfg(not(target_os = "solana"))'.dependencies] @@ -43,7 +43,7 @@ rand_core = { version = "0.6.3", features = ["alloc", "getrandom", "std"] } subtle = { version = "2.4.1", features = ["default", "i128", "std"] } [target.'cfg(not(target_os = "solana"))'.dev-dependencies] -solana-logger = { path = "../logger", version = "=1.11.6" } +solana-logger = { path = "../logger", version = "=1.11.7" } [build-dependencies] rustc_version = "0.4" diff --git a/frozen-abi/macro/Cargo.toml b/frozen-abi/macro/Cargo.toml index c1f8afa1a50a37..b36b2e1e28d3d0 100644 --- a/frozen-abi/macro/Cargo.toml +++ b/frozen-abi/macro/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-frozen-abi-macro" -version = "1.11.6" +version = "1.11.7" description = "Solana Frozen ABI Macro" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/genesis-utils/Cargo.toml b/genesis-utils/Cargo.toml index bb5b29ea8d5793..4b55dc2f188fb4 100644 --- a/genesis-utils/Cargo.toml +++ b/genesis-utils/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-genesis-utils" -version = "1.11.6" +version = "1.11.7" description = "Solana Genesis Utils" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,9 +10,9 @@ documentation = "https://docs.rs/solana-download-utils" edition = "2021" [dependencies] -solana-download-utils = { path = "../download-utils", version = "=1.11.6" } -solana-runtime = { path = "../runtime", version = "=1.11.6" } -solana-sdk = { path = "../sdk", version = "=1.11.6" } +solana-download-utils = { path = "../download-utils", version = "=1.11.7" } +solana-runtime = { path = "../runtime", version = "=1.11.7" } +solana-sdk = { path = "../sdk", version = "=1.11.7" } [lib] crate-type = ["lib"] diff --git a/genesis/Cargo.toml b/genesis/Cargo.toml index df6f07b62e57a8..dda0dddf6aafef 100644 --- a/genesis/Cargo.toml +++ b/genesis/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-genesis" description = "Blockchain, Rebuilt for Scale" -version = "1.11.6" +version = "1.11.7" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -15,16 +15,16 @@ clap = "2.33.1" serde = "1.0.138" serde_json = "1.0.81" serde_yaml = "0.8.26" -solana-clap-utils = { path = "../clap-utils", version = "=1.11.6" } -solana-cli-config = { path = "../cli-config", version = "=1.11.6" } -solana-entry = { path = "../entry", version = "=1.11.6" } -solana-ledger = { path = "../ledger", version = "=1.11.6" } -solana-logger = { path = "../logger", version = "=1.11.6" } -solana-runtime = { path = "../runtime", version = "=1.11.6" } -solana-sdk = { path = "../sdk", version = "=1.11.6" } -solana-stake-program = { path = "../programs/stake", version = "=1.11.6" } -solana-version = { path = "../version", version = "=1.11.6" } -solana-vote-program = { path = "../programs/vote", version = "=1.11.6" } +solana-clap-utils = { path = "../clap-utils", version = "=1.11.7" } +solana-cli-config = { path = "../cli-config", version = "=1.11.7" } +solana-entry = { path = "../entry", version = "=1.11.7" } +solana-ledger = { path = "../ledger", version = "=1.11.7" } +solana-logger = { path = "../logger", version = "=1.11.7" } +solana-runtime = { path = "../runtime", version = "=1.11.7" } +solana-sdk = { path = "../sdk", version = "=1.11.7" } +solana-stake-program = { path = "../programs/stake", version = "=1.11.7" } +solana-version = { path = "../version", version = "=1.11.7" } +solana-vote-program = { path = "../programs/vote", version = "=1.11.7" } tempfile = "3.3.0" [[bin]] diff --git a/geyser-plugin-interface/Cargo.toml b/geyser-plugin-interface/Cargo.toml index d7c918c28f1ead..6cc7988f46d47e 100644 --- a/geyser-plugin-interface/Cargo.toml +++ b/geyser-plugin-interface/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-geyser-plugin-interface" description = "The Solana Geyser plugin interface." -version = "1.11.6" +version = "1.11.7" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -11,8 +11,8 @@ documentation = "https://docs.rs/solana-geyser-plugin-interface" [dependencies] log = "0.4.17" -solana-sdk = { path = "../sdk", version = "=1.11.6" } -solana-transaction-status = { path = "../transaction-status", version = "=1.11.6" } +solana-sdk = { path = "../sdk", version = "=1.11.7" } +solana-transaction-status = { path = "../transaction-status", version = "=1.11.7" } thiserror = "1.0.31" [package.metadata.docs.rs] diff --git a/geyser-plugin-manager/Cargo.toml b/geyser-plugin-manager/Cargo.toml index f880746b9018e1..8bc032469944ef 100644 --- a/geyser-plugin-manager/Cargo.toml +++ b/geyser-plugin-manager/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-geyser-plugin-manager" description = "The Solana Geyser plugin manager." -version = "1.11.6" +version = "1.11.7" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -16,13 +16,13 @@ json5 = "0.4.1" libloading = "0.7.3" log = "0.4.17" serde_json = "1.0.81" -solana-geyser-plugin-interface = { path = "../geyser-plugin-interface", version = "=1.11.6" } -solana-measure = { path = "../measure", version = "=1.11.6" } -solana-metrics = { path = "../metrics", version = "=1.11.6" } -solana-rpc = { path = "../rpc", version = "=1.11.6" } -solana-runtime = { path = "../runtime", version = "=1.11.6" } -solana-sdk = { path = "../sdk", version = "=1.11.6" } -solana-transaction-status = { path = "../transaction-status", version = "=1.11.6" } +solana-geyser-plugin-interface = { path = "../geyser-plugin-interface", version = "=1.11.7" } +solana-measure = { path = "../measure", version = "=1.11.7" } +solana-metrics = { path = "../metrics", version = "=1.11.7" } +solana-rpc = { path = "../rpc", version = "=1.11.7" } +solana-runtime = { path = "../runtime", version = "=1.11.7" } +solana-sdk = { path = "../sdk", version = "=1.11.7" } +solana-transaction-status = { path = "../transaction-status", version = "=1.11.7" } thiserror = "1.0.31" [package.metadata.docs.rs] diff --git a/gossip/Cargo.toml b/gossip/Cargo.toml index 9abb3a62c70d73..de5fb6ec27e1d8 100644 --- a/gossip/Cargo.toml +++ b/gossip/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-gossip" description = "Blockchain, Rebuilt for Scale" -version = "1.11.6" +version = "1.11.7" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -27,24 +27,24 @@ rayon = "1.5.3" serde = "1.0.138" serde_bytes = "0.11" serde_derive = "1.0.103" -solana-bloom = { path = "../bloom", version = "=1.11.6" } -solana-clap-utils = { path = "../clap-utils", version = "=1.11.6" } -solana-client = { path = "../client", version = "=1.11.6" } -solana-entry = { path = "../entry", version = "=1.11.6" } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.11.6" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.11.6" } -solana-ledger = { path = "../ledger", version = "=1.11.6" } -solana-logger = { path = "../logger", version = "=1.11.6" } -solana-measure = { path = "../measure", version = "=1.11.6" } -solana-metrics = { path = "../metrics", version = "=1.11.6" } -solana-net-utils = { path = "../net-utils", version = "=1.11.6" } -solana-perf = { path = "../perf", version = "=1.11.6" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.11.6" } -solana-runtime = { path = "../runtime", version = "=1.11.6" } -solana-sdk = { path = "../sdk", version = "=1.11.6" } -solana-streamer = { path = "../streamer", version = "=1.11.6" } -solana-version = { path = "../version", version = "=1.11.6" } -solana-vote-program = { path = "../programs/vote", version = "=1.11.6" } +solana-bloom = { path = "../bloom", version = "=1.11.7" } +solana-clap-utils = { path = "../clap-utils", version = "=1.11.7" } +solana-client = { path = "../client", version = "=1.11.7" } +solana-entry = { path = "../entry", version = "=1.11.7" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.11.7" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.11.7" } +solana-ledger = { path = "../ledger", version = "=1.11.7" } +solana-logger = { path = "../logger", version = "=1.11.7" } +solana-measure = { path = "../measure", version = "=1.11.7" } +solana-metrics = { path = "../metrics", version = "=1.11.7" } +solana-net-utils = { path = "../net-utils", version = "=1.11.7" } +solana-perf = { path = "../perf", version = "=1.11.7" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.11.7" } +solana-runtime = { path = "../runtime", version = "=1.11.7" } +solana-sdk = { path = "../sdk", version = "=1.11.7" } +solana-streamer = { path = "../streamer", version = "=1.11.7" } +solana-version = { path = "../version", version = "=1.11.7" } +solana-vote-program = { path = "../programs/vote", version = "=1.11.7" } thiserror = "1.0" [dev-dependencies] diff --git a/install/Cargo.toml b/install/Cargo.toml index 6734dca7384cf5..d929daaf74c1e8 100644 --- a/install/Cargo.toml +++ b/install/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-install" description = "The solana cluster software installer" -version = "1.11.6" +version = "1.11.7" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -26,12 +26,12 @@ reqwest = { version = "0.11.11", default-features = false, features = ["blocking semver = "1.0.10" serde = { version = "1.0.138", features = ["derive"] } serde_yaml = "0.8.26" -solana-clap-utils = { path = "../clap-utils", version = "=1.11.6" } -solana-client = { path = "../client", version = "=1.11.6" } -solana-config-program = { path = "../programs/config", version = "=1.11.6" } -solana-logger = { path = "../logger", version = "=1.11.6" } -solana-sdk = { path = "../sdk", version = "=1.11.6" } -solana-version = { path = "../version", version = "=1.11.6" } +solana-clap-utils = { path = "../clap-utils", version = "=1.11.7" } +solana-client = { path = "../client", version = "=1.11.7" } +solana-config-program = { path = "../programs/config", version = "=1.11.7" } +solana-logger = { path = "../logger", version = "=1.11.7" } +solana-sdk = { path = "../sdk", version = "=1.11.7" } +solana-version = { path = "../version", version = "=1.11.7" } tar = "0.4.38" tempfile = "3.3.0" url = "2.2.2" diff --git a/keygen/Cargo.toml b/keygen/Cargo.toml index fbb493249b68a8..fba3b5c4552c0c 100644 --- a/keygen/Cargo.toml +++ b/keygen/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-keygen" -version = "1.11.6" +version = "1.11.7" description = "Solana key generation utility" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,11 +14,11 @@ bs58 = "0.4.0" clap = { version = "3.1.5", features = ["cargo"] } dirs-next = "2.0.0" num_cpus = "1.13.1" -solana-clap-v3-utils = { path = "../clap-v3-utils", version = "=1.11.6" } -solana-cli-config = { path = "../cli-config", version = "=1.11.6" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.11.6" } -solana-sdk = { path = "../sdk", version = "=1.11.6" } -solana-version = { path = "../version", version = "=1.11.6" } +solana-clap-v3-utils = { path = "../clap-v3-utils", version = "=1.11.7" } +solana-cli-config = { path = "../cli-config", version = "=1.11.7" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.11.7" } +solana-sdk = { path = "../sdk", version = "=1.11.7" } +solana-version = { path = "../version", version = "=1.11.7" } tiny-bip39 = "0.8.2" [[bin]] diff --git a/ledger-tool/Cargo.toml b/ledger-tool/Cargo.toml index 54282ba3db6666..6f59beeb92f026 100644 --- a/ledger-tool/Cargo.toml +++ b/ledger-tool/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-ledger-tool" description = "Blockchain, Rebuilt for Scale" -version = "1.11.6" +version = "1.11.7" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -22,20 +22,20 @@ log = { version = "0.4.17" } regex = "1" serde = { version = "1.0", features = ["derive"] } serde_json = "1.0.81" -solana-clap-utils = { path = "../clap-utils", version = "=1.11.6" } -solana-cli-output = { path = "../cli-output", version = "=1.11.6" } -solana-core = { path = "../core", version = "=1.11.6" } -solana-entry = { path = "../entry", version = "=1.11.6" } -solana-ledger = { path = "../ledger", version = "=1.11.6" } -solana-logger = { path = "../logger", version = "=1.11.6" } -solana-measure = { path = "../measure", version = "=1.11.6" } -solana-runtime = { path = "../runtime", version = "=1.11.6" } -solana-sdk = { path = "../sdk", version = "=1.11.6" } -solana-stake-program = { path = "../programs/stake", version = "=1.11.6" } -solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.11.6" } -solana-transaction-status = { path = "../transaction-status", version = "=1.11.6" } -solana-version = { path = "../version", version = "=1.11.6" } -solana-vote-program = { path = "../programs/vote", version = "=1.11.6" } +solana-clap-utils = { path = "../clap-utils", version = "=1.11.7" } +solana-cli-output = { path = "../cli-output", version = "=1.11.7" } +solana-core = { path = "../core", version = "=1.11.7" } +solana-entry = { path = "../entry", version = "=1.11.7" } +solana-ledger = { path = "../ledger", version = "=1.11.7" } +solana-logger = { path = "../logger", version = "=1.11.7" } +solana-measure = { path = "../measure", version = "=1.11.7" } +solana-runtime = { path = "../runtime", version = "=1.11.7" } +solana-sdk = { path = "../sdk", version = "=1.11.7" } +solana-stake-program = { path = "../programs/stake", version = "=1.11.7" } +solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.11.7" } +solana-transaction-status = { path = "../transaction-status", version = "=1.11.7" } +solana-version = { path = "../version", version = "=1.11.7" } +solana-vote-program = { path = "../programs/vote", version = "=1.11.7" } tokio = { version = "1", features = ["full"] } [target.'cfg(not(target_env = "msvc"))'.dependencies] diff --git a/ledger/Cargo.toml b/ledger/Cargo.toml index 867752a3083232..b38945e62321ac 100644 --- a/ledger/Cargo.toml +++ b/ledger/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-ledger" -version = "1.11.6" +version = "1.11.7" description = "Solana ledger" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -34,23 +34,23 @@ reed-solomon-erasure = { version = "5.0.3", features = ["simd-accel"] } serde = "1.0.138" serde_bytes = "0.11.6" sha2 = "0.10.2" -solana-account-decoder = { path = "../account-decoder", version = "=1.11.6" } -solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.11.6" } -solana-entry = { path = "../entry", version = "=1.11.6" } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.11.6" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.11.6" } -solana-measure = { path = "../measure", version = "=1.11.6" } -solana-metrics = { path = "../metrics", version = "=1.11.6" } -solana-perf = { path = "../perf", version = "=1.11.6" } -solana-program-runtime = { path = "../program-runtime", version = "=1.11.6" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.11.6" } -solana-runtime = { path = "../runtime", version = "=1.11.6" } -solana-sdk = { path = "../sdk", version = "=1.11.6" } -solana-stake-program = { path = "../programs/stake", version = "=1.11.6" } -solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.11.6" } -solana-storage-proto = { path = "../storage-proto", version = "=1.11.6" } -solana-transaction-status = { path = "../transaction-status", version = "=1.11.6" } -solana-vote-program = { path = "../programs/vote", version = "=1.11.6" } +solana-account-decoder = { path = "../account-decoder", version = "=1.11.7" } +solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.11.7" } +solana-entry = { path = "../entry", version = "=1.11.7" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.11.7" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.11.7" } +solana-measure = { path = "../measure", version = "=1.11.7" } +solana-metrics = { path = "../metrics", version = "=1.11.7" } +solana-perf = { path = "../perf", version = "=1.11.7" } +solana-program-runtime = { path = "../program-runtime", version = "=1.11.7" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.11.7" } +solana-runtime = { path = "../runtime", version = "=1.11.7" } +solana-sdk = { path = "../sdk", version = "=1.11.7" } +solana-stake-program = { path = "../programs/stake", version = "=1.11.7" } +solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.11.7" } +solana-storage-proto = { path = "../storage-proto", version = "=1.11.7" } +solana-transaction-status = { path = "../transaction-status", version = "=1.11.7" } +solana-vote-program = { path = "../programs/vote", version = "=1.11.7" } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } spl-token-2022 = { version = "=0.4.2", features = ["no-entrypoint"] } static_assertions = "1.1.0" @@ -71,8 +71,8 @@ features = ["lz4"] assert_matches = "1.5.0" bs58 = "0.4.0" matches = "0.1.9" -solana-account-decoder = { path = "../account-decoder", version = "=1.11.6" } -solana-logger = { path = "../logger", version = "=1.11.6" } +solana-account-decoder = { path = "../account-decoder", version = "=1.11.7" } +solana-logger = { path = "../logger", version = "=1.11.7" } [build-dependencies] rustc_version = "0.4" diff --git a/local-cluster/Cargo.toml b/local-cluster/Cargo.toml index 0d6893bb5013bf..ac1e5bd62b6afb 100644 --- a/local-cluster/Cargo.toml +++ b/local-cluster/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-local-cluster" description = "Blockchain, Rebuilt for Scale" -version = "1.11.6" +version = "1.11.7" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -16,25 +16,25 @@ itertools = "0.10.3" log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" -solana-client = { path = "../client", version = "=1.11.6" } -solana-config-program = { path = "../programs/config", version = "=1.11.6" } -solana-core = { path = "../core", version = "=1.11.6" } -solana-entry = { path = "../entry", version = "=1.11.6" } -solana-gossip = { path = "../gossip", version = "=1.11.6" } -solana-ledger = { path = "../ledger", version = "=1.11.6" } -solana-runtime = { path = "../runtime", version = "=1.11.6" } -solana-sdk = { path = "../sdk", version = "=1.11.6" } -solana-stake-program = { path = "../programs/stake", version = "=1.11.6" } -solana-streamer = { path = "../streamer", version = "=1.11.6" } -solana-vote-program = { path = "../programs/vote", version = "=1.11.6" } +solana-client = { path = "../client", version = "=1.11.7" } +solana-config-program = { path = "../programs/config", version = "=1.11.7" } +solana-core = { path = "../core", version = "=1.11.7" } +solana-entry = { path = "../entry", version = "=1.11.7" } +solana-gossip = { path = "../gossip", version = "=1.11.7" } +solana-ledger = { path = "../ledger", version = "=1.11.7" } +solana-runtime = { path = "../runtime", version = "=1.11.7" } +solana-sdk = { path = "../sdk", version = "=1.11.7" } +solana-stake-program = { path = "../programs/stake", version = "=1.11.7" } +solana-streamer = { path = "../streamer", version = "=1.11.7" } +solana-vote-program = { path = "../programs/vote", version = "=1.11.7" } tempfile = "3.3.0" [dev-dependencies] assert_matches = "1.5.0" gag = "1.0.0" serial_test = "0.8.0" -solana-download-utils = { path = "../download-utils", version = "=1.11.6" } -solana-logger = { path = "../logger", version = "=1.11.6" } +solana-download-utils = { path = "../download-utils", version = "=1.11.7" } +solana-logger = { path = "../logger", version = "=1.11.7" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/log-analyzer/Cargo.toml b/log-analyzer/Cargo.toml index caf6268bba4717..8be2610e24c123 100644 --- a/log-analyzer/Cargo.toml +++ b/log-analyzer/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-log-analyzer" description = "The solana cluster network analysis tool" -version = "1.11.6" +version = "1.11.7" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,8 +14,8 @@ byte-unit = "4.0.14" clap = { version = "3.1.5", features = ["cargo"] } serde = "1.0.138" serde_json = "1.0.81" -solana-logger = { path = "../logger", version = "=1.11.6" } -solana-version = { path = "../version", version = "=1.11.6" } +solana-logger = { path = "../logger", version = "=1.11.7" } +solana-version = { path = "../version", version = "=1.11.7" } [[bin]] name = "solana-log-analyzer" diff --git a/logger/Cargo.toml b/logger/Cargo.toml index 769849aff60943..708b5f9087fbd4 100644 --- a/logger/Cargo.toml +++ b/logger/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-logger" -version = "1.11.6" +version = "1.11.7" description = "Solana Logger" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/measure/Cargo.toml b/measure/Cargo.toml index 071d83a3e7f652..cd479a3ff794f0 100644 --- a/measure/Cargo.toml +++ b/measure/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "solana-measure" description = "Blockchain, Rebuilt for Scale" -version = "1.11.6" +version = "1.11.7" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-measure" readme = "../README.md" @@ -12,7 +12,7 @@ edition = "2021" [dependencies] log = "0.4.17" -solana-sdk = { path = "../sdk", version = "=1.11.6" } +solana-sdk = { path = "../sdk", version = "=1.11.7" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/merkle-root-bench/Cargo.toml b/merkle-root-bench/Cargo.toml index 3d20de8ad55bbb..a620c5baccb430 100644 --- a/merkle-root-bench/Cargo.toml +++ b/merkle-root-bench/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-merkle-root-bench" -version = "1.11.6" +version = "1.11.7" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -11,11 +11,11 @@ publish = false [dependencies] clap = "2.33.1" log = "0.4.17" -solana-logger = { path = "../logger", version = "=1.11.6" } -solana-measure = { path = "../measure", version = "=1.11.6" } -solana-runtime = { path = "../runtime", version = "=1.11.6" } -solana-sdk = { path = "../sdk", version = "=1.11.6" } -solana-version = { path = "../version", version = "=1.11.6" } +solana-logger = { path = "../logger", version = "=1.11.7" } +solana-measure = { path = "../measure", version = "=1.11.7" } +solana-runtime = { path = "../runtime", version = "=1.11.7" } +solana-sdk = { path = "../sdk", version = "=1.11.7" } +solana-version = { path = "../version", version = "=1.11.7" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/merkle-tree/Cargo.toml b/merkle-tree/Cargo.toml index 6413f108e39b2e..b8fa822bd09249 100644 --- a/merkle-tree/Cargo.toml +++ b/merkle-tree/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-merkle-tree" -version = "1.11.6" +version = "1.11.7" description = "Solana Merkle Tree" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -11,7 +11,7 @@ edition = "2021" [dependencies] fast-math = "0.1" -solana-program = { path = "../sdk/program", version = "=1.11.6" } +solana-program = { path = "../sdk/program", version = "=1.11.7" } # This can go once the BPF toolchain target Rust 1.42.0+ [target.bpfel-unknown-unknown.dependencies] diff --git a/metrics/Cargo.toml b/metrics/Cargo.toml index 9348a0c1df8fc3..be830458a1d0e2 100644 --- a/metrics/Cargo.toml +++ b/metrics/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-metrics" -version = "1.11.6" +version = "1.11.7" description = "Solana Metrics" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -15,7 +15,7 @@ gethostname = "0.2.3" lazy_static = "1.4.0" log = "0.4.17" reqwest = { version = "0.11.11", default-features = false, features = ["blocking", "brotli", "deflate", "gzip", "rustls-tls", "json"] } -solana-sdk = { path = "../sdk", version = "=1.11.6" } +solana-sdk = { path = "../sdk", version = "=1.11.7" } [dev-dependencies] env_logger = "0.9.0" diff --git a/net-shaper/Cargo.toml b/net-shaper/Cargo.toml index 284c290c6207c4..7391da43a03370 100644 --- a/net-shaper/Cargo.toml +++ b/net-shaper/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-net-shaper" description = "The solana cluster network shaping tool" -version = "1.11.6" +version = "1.11.7" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,7 +14,7 @@ clap = { version = "3.1.5", features = ["cargo"] } rand = "0.7.0" serde = { version = "1.0.138", features = ["derive"] } serde_json = "1.0.81" -solana-logger = { path = "../logger", version = "=1.11.6" } +solana-logger = { path = "../logger", version = "=1.11.7" } [[bin]] name = "solana-net-shaper" diff --git a/net-utils/Cargo.toml b/net-utils/Cargo.toml index 1a92092a4bf538..034f29f2dfbf74 100644 --- a/net-utils/Cargo.toml +++ b/net-utils/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-net-utils" -version = "1.11.6" +version = "1.11.7" description = "Solana Network Utilities" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -19,9 +19,9 @@ rand = "0.7.0" serde = "1.0.138" serde_derive = "1.0.103" socket2 = "0.4.4" -solana-logger = { path = "../logger", version = "=1.11.6" } -solana-sdk = { path = "../sdk", version = "=1.11.6" } -solana-version = { path = "../version", version = "=1.11.6" } +solana-logger = { path = "../logger", version = "=1.11.7" } +solana-sdk = { path = "../sdk", version = "=1.11.7" } +solana-version = { path = "../version", version = "=1.11.7" } tokio = { version = "1", features = ["full"] } url = "2.2.2" diff --git a/notifier/Cargo.toml b/notifier/Cargo.toml index 858589a2331425..0a006942e7d122 100644 --- a/notifier/Cargo.toml +++ b/notifier/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-notifier" -version = "1.11.6" +version = "1.11.7" description = "Solana Notifier" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/perf/Cargo.toml b/perf/Cargo.toml index 135865d89f27b2..e3c583b949ef35 100644 --- a/perf/Cargo.toml +++ b/perf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-perf" -version = "1.11.6" +version = "1.11.7" description = "Solana Performance APIs" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -22,10 +22,10 @@ log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" serde = "1.0.138" -solana-metrics = { path = "../metrics", version = "=1.11.6" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.11.6" } -solana-sdk = { path = "../sdk", version = "=1.11.6" } -solana-vote-program = { path = "../programs/vote", version = "=1.11.6" } +solana-metrics = { path = "../metrics", version = "=1.11.7" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.11.7" } +solana-sdk = { path = "../sdk", version = "=1.11.7" } +solana-vote-program = { path = "../programs/vote", version = "=1.11.7" } [target."cfg(target_os = \"linux\")".dependencies] caps = "0.5.3" @@ -37,7 +37,7 @@ name = "solana_perf" [dev-dependencies] matches = "0.1.9" -solana-logger = { path = "../logger", version = "=1.11.6" } +solana-logger = { path = "../logger", version = "=1.11.7" } [[bench]] name = "sigverify" diff --git a/poh-bench/Cargo.toml b/poh-bench/Cargo.toml index 2288f02794d56b..09305f0700fed9 100644 --- a/poh-bench/Cargo.toml +++ b/poh-bench/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-poh-bench" -version = "1.11.6" +version = "1.11.7" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,12 +14,12 @@ clap = { version = "3.1.5", features = ["cargo"] } log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" -solana-entry = { path = "../entry", version = "=1.11.6" } -solana-logger = { path = "../logger", version = "=1.11.6" } -solana-measure = { path = "../measure", version = "=1.11.6" } -solana-perf = { path = "../perf", version = "=1.11.6" } -solana-sdk = { path = "../sdk", version = "=1.11.6" } -solana-version = { path = "../version", version = "=1.11.6" } +solana-entry = { path = "../entry", version = "=1.11.7" } +solana-logger = { path = "../logger", version = "=1.11.7" } +solana-measure = { path = "../measure", version = "=1.11.7" } +solana-perf = { path = "../perf", version = "=1.11.7" } +solana-sdk = { path = "../sdk", version = "=1.11.7" } +solana-version = { path = "../version", version = "=1.11.7" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/poh/Cargo.toml b/poh/Cargo.toml index ea028d51a27812..1ff6fc28536b90 100644 --- a/poh/Cargo.toml +++ b/poh/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-poh" -version = "1.11.6" +version = "1.11.7" description = "Solana PoH" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,21 +13,21 @@ edition = "2021" core_affinity = "0.5.10" crossbeam-channel = "0.5" log = "0.4.17" -solana-entry = { path = "../entry", version = "=1.11.6" } -solana-ledger = { path = "../ledger", version = "=1.11.6" } -solana-measure = { path = "../measure", version = "=1.11.6" } -solana-metrics = { path = "../metrics", version = "=1.11.6" } -solana-runtime = { path = "../runtime", version = "=1.11.6" } -solana-sdk = { path = "../sdk", version = "=1.11.6" } -solana-sys-tuner = { path = "../sys-tuner", version = "=1.11.6" } +solana-entry = { path = "../entry", version = "=1.11.7" } +solana-ledger = { path = "../ledger", version = "=1.11.7" } +solana-measure = { path = "../measure", version = "=1.11.7" } +solana-metrics = { path = "../metrics", version = "=1.11.7" } +solana-runtime = { path = "../runtime", version = "=1.11.7" } +solana-sdk = { path = "../sdk", version = "=1.11.7" } +solana-sys-tuner = { path = "../sys-tuner", version = "=1.11.7" } thiserror = "1.0" [dev-dependencies] bincode = "1.3.3" matches = "0.1.9" rand = "0.7.0" -solana-logger = { path = "../logger", version = "=1.11.6" } -solana-perf = { path = "../perf", version = "=1.11.6" } +solana-logger = { path = "../logger", version = "=1.11.7" } +solana-perf = { path = "../perf", version = "=1.11.7" } [lib] crate-type = ["lib"] diff --git a/program-runtime/Cargo.toml b/program-runtime/Cargo.toml index e822a2d2bce6d1..25db3784b39231 100644 --- a/program-runtime/Cargo.toml +++ b/program-runtime/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-program-runtime" -version = "1.11.6" +version = "1.11.7" description = "Solana program runtime" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -20,16 +20,16 @@ log = "0.4.14" num-derive = { version = "0.3" } num-traits = { version = "0.2" } serde = { version = "1.0.129", features = ["derive", "rc"] } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.11.6" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.11.6" } -solana-measure = { path = "../measure", version = "=1.11.6" } -solana-metrics = { path = "../metrics", version = "=1.11.6" } -solana-sdk = { path = "../sdk", version = "=1.11.6" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.11.7" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.11.7" } +solana-measure = { path = "../measure", version = "=1.11.7" } +solana-metrics = { path = "../metrics", version = "=1.11.7" } +solana-sdk = { path = "../sdk", version = "=1.11.7" } thiserror = "1.0" enum-iterator = "0.8.1" [dev-dependencies] -solana-logger = { path = "../logger", version = "=1.11.6" } +solana-logger = { path = "../logger", version = "=1.11.7" } [lib] crate-type = ["lib"] diff --git a/program-test/Cargo.toml b/program-test/Cargo.toml index abf3326f50ef7a..dde5153936c21e 100644 --- a/program-test/Cargo.toml +++ b/program-test/Cargo.toml @@ -5,7 +5,7 @@ edition = "2021" license = "Apache-2.0" name = "solana-program-test" repository = "https://github.com/solana-labs/solana" -version = "1.11.6" +version = "1.11.7" [dependencies] assert_matches = "1.5.0" @@ -15,13 +15,13 @@ bincode = "1.3.3" chrono-humanize = "0.2.1" log = "0.4.17" serde = "1.0.138" -solana-banks-client = { path = "../banks-client", version = "=1.11.6" } -solana-banks-server = { path = "../banks-server", version = "=1.11.6" } -solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.11.6" } -solana-logger = { path = "../logger", version = "=1.11.6" } -solana-program-runtime = { path = "../program-runtime", version = "=1.11.6" } -solana-runtime = { path = "../runtime", version = "=1.11.6" } -solana-sdk = { path = "../sdk", version = "=1.11.6" } -solana-vote-program = { path = "../programs/vote", version = "=1.11.6" } +solana-banks-client = { path = "../banks-client", version = "=1.11.7" } +solana-banks-server = { path = "../banks-server", version = "=1.11.7" } +solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.11.7" } +solana-logger = { path = "../logger", version = "=1.11.7" } +solana-program-runtime = { path = "../program-runtime", version = "=1.11.7" } +solana-runtime = { path = "../runtime", version = "=1.11.7" } +solana-sdk = { path = "../sdk", version = "=1.11.7" } +solana-vote-program = { path = "../programs/vote", version = "=1.11.7" } thiserror = "1.0" tokio = { version = "1", features = ["full"] } diff --git a/programs/address-lookup-table-tests/Cargo.toml b/programs/address-lookup-table-tests/Cargo.toml index befe777e4f8846..d8d3bb27f62f2b 100644 --- a/programs/address-lookup-table-tests/Cargo.toml +++ b/programs/address-lookup-table-tests/Cargo.toml @@ -3,7 +3,7 @@ [package] name = "solana-address-lookup-table-program-tests" -version = "1.11.6" +version = "1.11.7" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" @@ -14,9 +14,9 @@ publish = false [dev-dependencies] assert_matches = "1.5.0" bincode = "1.3.3" -solana-address-lookup-table-program = { path = "../address-lookup-table", version = "=1.11.6" } -solana-program-test = { path = "../../program-test", version = "=1.11.6" } -solana-sdk = { path = "../../sdk", version = "=1.11.6" } +solana-address-lookup-table-program = { path = "../address-lookup-table", version = "=1.11.7" } +solana-program-test = { path = "../../program-test", version = "=1.11.7" } +solana-sdk = { path = "../../sdk", version = "=1.11.7" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/address-lookup-table/Cargo.toml b/programs/address-lookup-table/Cargo.toml index aeb5e5d5309072..278e1609db444b 100644 --- a/programs/address-lookup-table/Cargo.toml +++ b/programs/address-lookup-table/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-address-lookup-table-program" -version = "1.11.6" +version = "1.11.7" description = "Solana address lookup table program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -16,14 +16,14 @@ log = "0.4.17" num-derive = "0.3" num-traits = "0.2" serde = { version = "1.0.138", features = ["derive"] } -solana-frozen-abi = { path = "../../frozen-abi", version = "=1.11.6" } -solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.11.6" } -solana-program = { path = "../../sdk/program", version = "=1.11.6" } +solana-frozen-abi = { path = "../../frozen-abi", version = "=1.11.7" } +solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.11.7" } +solana-program = { path = "../../sdk/program", version = "=1.11.7" } thiserror = "1.0" [target.'cfg(not(target_os = "solana"))'.dependencies] -solana-program-runtime = { path = "../../program-runtime", version = "=1.11.6" } -solana-sdk = { path = "../../sdk", version = "=1.11.6" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.11.7" } +solana-sdk = { path = "../../sdk", version = "=1.11.7" } [build-dependencies] rustc_version = "0.4" diff --git a/programs/bpf-loader-tests/Cargo.toml b/programs/bpf-loader-tests/Cargo.toml index 5b67b2ad23b6db..208e285846394e 100644 --- a/programs/bpf-loader-tests/Cargo.toml +++ b/programs/bpf-loader-tests/Cargo.toml @@ -3,7 +3,7 @@ [package] name = "solana-bpf-loader-program-tests" -version = "1.11.6" +version = "1.11.7" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" @@ -14,9 +14,9 @@ publish = false [dev-dependencies] assert_matches = "1.5.0" bincode = "1.3.3" -solana-bpf-loader-program = { path = "../bpf_loader", version = "=1.11.6" } -solana-program-test = { path = "../../program-test", version = "=1.11.6" } -solana-sdk = { path = "../../sdk", version = "=1.11.6" } +solana-bpf-loader-program = { path = "../bpf_loader", version = "=1.11.7" } +solana-program-test = { path = "../../program-test", version = "=1.11.7" } +solana-sdk = { path = "../../sdk", version = "=1.11.7" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/bpf/Cargo.lock b/programs/bpf/Cargo.lock index c62387093e884f..2122e5d8afd5e4 100644 --- a/programs/bpf/Cargo.lock +++ b/programs/bpf/Cargo.lock @@ -4060,7 +4060,7 @@ dependencies = [ [[package]] name = "solana-account-decoder" -version = "1.11.6" +version = "1.11.7" dependencies = [ "Inflector", "base64 0.13.0", @@ -4072,7 +4072,7 @@ dependencies = [ "serde_derive", "serde_json", "solana-config-program", - "solana-sdk 1.11.6", + "solana-sdk 1.11.7", "solana-vote-program", "spl-token", "spl-token-2022", @@ -4082,7 +4082,7 @@ dependencies = [ [[package]] name = "solana-address-lookup-table-program" -version = "1.11.6" +version = "1.11.7" dependencies = [ "bincode", "bytemuck", @@ -4091,23 +4091,23 @@ dependencies = [ "num-traits", "rustc_version", "serde", - "solana-frozen-abi 1.11.6", - "solana-frozen-abi-macro 1.11.6", - "solana-program 1.11.6", + "solana-frozen-abi 1.11.7", + "solana-frozen-abi-macro 1.11.7", + "solana-program 1.11.7", "solana-program-runtime", - "solana-sdk 1.11.6", + "solana-sdk 1.11.7", "thiserror", ] [[package]] name = "solana-banks-client" -version = "1.11.6" +version = "1.11.7" dependencies = [ "borsh", "futures 0.3.21", "solana-banks-interface", - "solana-program 1.11.6", - "solana-sdk 1.11.6", + "solana-program 1.11.7", + "solana-sdk 1.11.7", "tarpc", "thiserror", "tokio", @@ -4116,16 +4116,16 @@ dependencies = [ [[package]] name = "solana-banks-interface" -version = "1.11.6" +version = "1.11.7" dependencies = [ "serde", - "solana-sdk 1.11.6", + "solana-sdk 1.11.7", "tarpc", ] [[package]] name = "solana-banks-server" -version = "1.11.6" +version = "1.11.7" dependencies = [ "bincode", "crossbeam-channel", @@ -4133,7 +4133,7 @@ dependencies = [ "solana-banks-interface", "solana-client", "solana-runtime", - "solana-sdk 1.11.6", + "solana-sdk 1.11.7", "solana-send-transaction-service", "tarpc", "tokio", @@ -4143,7 +4143,7 @@ dependencies = [ [[package]] name = "solana-bloom" -version = "1.11.6" +version = "1.11.7" dependencies = [ "bv", "fnv", @@ -4153,14 +4153,14 @@ dependencies = [ "rustc_version", "serde", "serde_derive", - "solana-frozen-abi 1.11.6", - "solana-frozen-abi-macro 1.11.6", - "solana-sdk 1.11.6", + "solana-frozen-abi 1.11.7", + "solana-frozen-abi-macro 1.11.7", + "solana-sdk 1.11.7", ] [[package]] name = "solana-bpf-loader-program" -version = "1.11.6" +version = "1.11.7" dependencies = [ "bincode", "byteorder 1.4.3", @@ -4169,15 +4169,15 @@ dependencies = [ "solana-measure", "solana-metrics", "solana-program-runtime", - "solana-sdk 1.11.6", - "solana-zk-token-sdk 1.11.6", + "solana-sdk 1.11.7", + "solana-zk-token-sdk 1.11.7", "solana_rbpf", "thiserror", ] [[package]] name = "solana-bpf-programs" -version = "1.11.6" +version = "1.11.7" dependencies = [ "bincode", "byteorder 1.4.3", @@ -4193,11 +4193,11 @@ dependencies = [ "solana-bpf-rust-realloc-invoke", "solana-cli-output", "solana-ledger", - "solana-logger 1.11.6", + "solana-logger 1.11.7", "solana-measure", "solana-program-runtime", "solana-runtime", - "solana-sdk 1.11.6", + "solana-sdk 1.11.7", "solana-transaction-status", "solana_rbpf", "walkdir", @@ -4205,385 +4205,385 @@ dependencies = [ [[package]] name = "solana-bpf-rust-128bit" -version = "1.11.6" +version = "1.11.7" dependencies = [ "solana-bpf-rust-128bit-dep", - "solana-program 1.11.6", + "solana-program 1.11.7", ] [[package]] name = "solana-bpf-rust-128bit-dep" -version = "1.11.6" +version = "1.11.7" dependencies = [ - "solana-program 1.11.6", + "solana-program 1.11.7", ] [[package]] name = "solana-bpf-rust-alloc" -version = "1.11.6" +version = "1.11.7" dependencies = [ - "solana-program 1.11.6", + "solana-program 1.11.7", ] [[package]] name = "solana-bpf-rust-call-depth" -version = "1.11.6" +version = "1.11.7" dependencies = [ - "solana-program 1.11.6", + "solana-program 1.11.7", ] [[package]] name = "solana-bpf-rust-caller-access" -version = "1.11.6" +version = "1.11.7" dependencies = [ - "solana-program 1.11.6", + "solana-program 1.11.7", ] [[package]] name = "solana-bpf-rust-curve25519" -version = "1.11.6" +version = "1.11.7" dependencies = [ - "solana-program 1.11.6", - "solana-zk-token-sdk 1.11.6", + "solana-program 1.11.7", + "solana-zk-token-sdk 1.11.7", ] [[package]] name = "solana-bpf-rust-custom-heap" -version = "1.11.6" +version = "1.11.7" dependencies = [ - "solana-program 1.11.6", + "solana-program 1.11.7", ] [[package]] name = "solana-bpf-rust-dep-crate" -version = "1.11.6" +version = "1.11.7" dependencies = [ "byteorder 1.4.3", "solana-address-lookup-table-program", - "solana-program 1.11.6", + "solana-program 1.11.7", ] [[package]] name = "solana-bpf-rust-deprecated-loader" -version = "1.11.6" +version = "1.11.7" dependencies = [ - "solana-program 1.11.6", + "solana-program 1.11.7", ] [[package]] name = "solana-bpf-rust-dup-accounts" -version = "1.11.6" +version = "1.11.7" dependencies = [ - "solana-program 1.11.6", + "solana-program 1.11.7", ] [[package]] name = "solana-bpf-rust-error-handling" -version = "1.11.6" +version = "1.11.7" dependencies = [ "num-derive", "num-traits", - "solana-program 1.11.6", + "solana-program 1.11.7", "thiserror", ] [[package]] name = "solana-bpf-rust-external-spend" -version = "1.11.6" +version = "1.11.7" dependencies = [ - "solana-program 1.11.6", + "solana-program 1.11.7", ] [[package]] name = "solana-bpf-rust-finalize" -version = "1.11.6" +version = "1.11.7" dependencies = [ - "solana-program 1.11.6", + "solana-program 1.11.7", ] [[package]] name = "solana-bpf-rust-get-minimum-delegation" -version = "1.11.6" +version = "1.11.7" dependencies = [ - "solana-program 1.11.6", + "solana-program 1.11.7", ] [[package]] name = "solana-bpf-rust-inner_instruction_alignment_check" -version = "1.11.6" +version = "1.11.7" dependencies = [ - "solana-program 1.11.6", + "solana-program 1.11.7", ] [[package]] name = "solana-bpf-rust-instruction-introspection" -version = "1.11.6" +version = "1.11.7" dependencies = [ - "solana-program 1.11.6", + "solana-program 1.11.7", ] [[package]] name = "solana-bpf-rust-invoke" -version = "1.11.6" +version = "1.11.7" dependencies = [ "solana-bpf-rust-invoked", - "solana-program 1.11.6", + "solana-program 1.11.7", ] [[package]] name = "solana-bpf-rust-invoke-and-error" -version = "1.11.6" +version = "1.11.7" dependencies = [ - "solana-program 1.11.6", + "solana-program 1.11.7", ] [[package]] name = "solana-bpf-rust-invoke-and-ok" -version = "1.11.6" +version = "1.11.7" dependencies = [ - "solana-program 1.11.6", + "solana-program 1.11.7", ] [[package]] name = "solana-bpf-rust-invoke-and-return" -version = "1.11.6" +version = "1.11.7" dependencies = [ - "solana-program 1.11.6", + "solana-program 1.11.7", ] [[package]] name = "solana-bpf-rust-invoked" -version = "1.11.6" +version = "1.11.7" dependencies = [ - "solana-program 1.11.6", + "solana-program 1.11.7", ] [[package]] name = "solana-bpf-rust-iter" -version = "1.11.6" +version = "1.11.7" dependencies = [ - "solana-program 1.11.6", + "solana-program 1.11.7", ] [[package]] name = "solana-bpf-rust-log-data" -version = "1.11.6" +version = "1.11.7" dependencies = [ - "solana-program 1.11.6", + "solana-program 1.11.7", ] [[package]] name = "solana-bpf-rust-many-args" -version = "1.11.6" +version = "1.11.7" dependencies = [ "solana-bpf-rust-many-args-dep", - "solana-program 1.11.6", + "solana-program 1.11.7", ] [[package]] name = "solana-bpf-rust-many-args-dep" -version = "1.11.6" +version = "1.11.7" dependencies = [ - "solana-program 1.11.6", + "solana-program 1.11.7", ] [[package]] name = "solana-bpf-rust-mem" -version = "1.11.6" +version = "1.11.7" dependencies = [ - "solana-program 1.11.6", + "solana-program 1.11.7", "solana-program-runtime", "solana-program-test", - "solana-sdk 1.11.6", + "solana-sdk 1.11.7", ] [[package]] name = "solana-bpf-rust-membuiltins" -version = "1.11.6" +version = "1.11.7" dependencies = [ "solana-bpf-rust-mem", - "solana-program 1.11.6", + "solana-program 1.11.7", ] [[package]] name = "solana-bpf-rust-noop" -version = "1.11.6" +version = "1.11.7" dependencies = [ - "solana-program 1.11.6", + "solana-program 1.11.7", ] [[package]] name = "solana-bpf-rust-panic" -version = "1.11.6" +version = "1.11.7" dependencies = [ - "solana-program 1.11.6", + "solana-program 1.11.7", ] [[package]] name = "solana-bpf-rust-param-passing" -version = "1.11.6" +version = "1.11.7" dependencies = [ "solana-bpf-rust-param-passing-dep", - "solana-program 1.11.6", + "solana-program 1.11.7", ] [[package]] name = "solana-bpf-rust-param-passing-dep" -version = "1.11.6" +version = "1.11.7" dependencies = [ - "solana-program 1.11.6", + "solana-program 1.11.7", ] [[package]] name = "solana-bpf-rust-rand" -version = "1.11.6" +version = "1.11.7" dependencies = [ "getrandom 0.1.14", "rand 0.7.3", - "solana-program 1.11.6", + "solana-program 1.11.7", ] [[package]] name = "solana-bpf-rust-realloc" -version = "1.11.6" +version = "1.11.7" dependencies = [ - "solana-program 1.11.6", + "solana-program 1.11.7", ] [[package]] name = "solana-bpf-rust-realloc-invoke" -version = "1.11.6" +version = "1.11.7" dependencies = [ "solana-bpf-rust-realloc", - "solana-program 1.11.6", + "solana-program 1.11.7", ] [[package]] name = "solana-bpf-rust-ro-account_modify" -version = "1.11.6" +version = "1.11.7" dependencies = [ - "solana-program 1.11.6", + "solana-program 1.11.7", ] [[package]] name = "solana-bpf-rust-ro-modify" -version = "1.11.6" +version = "1.11.7" dependencies = [ - "solana-program 1.11.6", + "solana-program 1.11.7", ] [[package]] name = "solana-bpf-rust-sanity" -version = "1.11.6" +version = "1.11.7" dependencies = [ - "solana-program 1.11.6", + "solana-program 1.11.7", "solana-program-runtime", "solana-program-test", - "solana-sdk 1.11.6", + "solana-sdk 1.11.7", ] [[package]] name = "solana-bpf-rust-secp256k1-recover" -version = "1.11.6" +version = "1.11.7" dependencies = [ "libsecp256k1 0.7.0", - "solana-program 1.11.6", + "solana-program 1.11.7", ] [[package]] name = "solana-bpf-rust-sha" -version = "1.11.6" +version = "1.11.7" dependencies = [ "blake3", - "solana-program 1.11.6", + "solana-program 1.11.7", ] [[package]] name = "solana-bpf-rust-sibling-instructions" -version = "1.11.6" +version = "1.11.7" dependencies = [ - "solana-program 1.11.6", + "solana-program 1.11.7", ] [[package]] name = "solana-bpf-rust-sibling_inner-instructions" -version = "1.11.6" +version = "1.11.7" dependencies = [ - "solana-program 1.11.6", + "solana-program 1.11.7", ] [[package]] name = "solana-bpf-rust-simulation" -version = "1.11.6" +version = "1.11.7" dependencies = [ - "solana-logger 1.11.6", - "solana-program 1.11.6", + "solana-logger 1.11.7", + "solana-program 1.11.7", "solana-program-test", - "solana-sdk 1.11.6", + "solana-sdk 1.11.7", "solana-validator", ] [[package]] name = "solana-bpf-rust-spoof1" -version = "1.11.6" +version = "1.11.7" dependencies = [ - "solana-program 1.11.6", + "solana-program 1.11.7", ] [[package]] name = "solana-bpf-rust-spoof1-system" -version = "1.11.6" +version = "1.11.7" dependencies = [ - "solana-program 1.11.6", + "solana-program 1.11.7", ] [[package]] name = "solana-bpf-rust-sysvar" -version = "1.11.6" +version = "1.11.7" dependencies = [ - "solana-program 1.11.6", + "solana-program 1.11.7", "solana-program-runtime", "solana-program-test", - "solana-sdk 1.11.6", + "solana-sdk 1.11.7", ] [[package]] name = "solana-bpf-rust-upgradeable" -version = "1.11.6" +version = "1.11.7" dependencies = [ - "solana-program 1.11.6", + "solana-program 1.11.7", ] [[package]] name = "solana-bpf-rust-upgraded" -version = "1.11.6" +version = "1.11.7" dependencies = [ - "solana-program 1.11.6", + "solana-program 1.11.7", ] [[package]] name = "solana-bucket-map" -version = "1.11.6" +version = "1.11.7" dependencies = [ "log", "memmap2", "modular-bitfield", "rand 0.7.3", "solana-measure", - "solana-sdk 1.11.6", + "solana-sdk 1.11.7", "tempfile", ] [[package]] name = "solana-clap-utils" -version = "1.11.6" +version = "1.11.7" dependencies = [ "chrono", "clap 2.33.3", "rpassword", "solana-perf", "solana-remote-wallet", - "solana-sdk 1.11.6", + "solana-sdk 1.11.7", "thiserror", "tiny-bip39", "uriparse", @@ -4592,7 +4592,7 @@ dependencies = [ [[package]] name = "solana-cli-config" -version = "1.11.6" +version = "1.11.7" dependencies = [ "dirs-next", "lazy_static", @@ -4600,13 +4600,13 @@ dependencies = [ "serde_derive", "serde_yaml", "solana-clap-utils", - "solana-sdk 1.11.6", + "solana-sdk 1.11.7", "url 2.2.2", ] [[package]] name = "solana-cli-output" -version = "1.11.6" +version = "1.11.7" dependencies = [ "Inflector", "base64 0.13.0", @@ -4623,7 +4623,7 @@ dependencies = [ "solana-clap-utils", "solana-cli-config", "solana-client", - "solana-sdk 1.11.6", + "solana-sdk 1.11.7", "solana-transaction-status", "solana-vote-program", "spl-memo", @@ -4631,7 +4631,7 @@ dependencies = [ [[package]] name = "solana-client" -version = "1.11.6" +version = "1.11.7" dependencies = [ "async-mutex", "async-trait", @@ -4667,7 +4667,7 @@ dependencies = [ "solana-measure", "solana-metrics", "solana-net-utils", - "solana-sdk 1.11.6", + "solana-sdk 1.11.7", "solana-streamer", "solana-transaction-status", "solana-version", @@ -4683,27 +4683,27 @@ dependencies = [ [[package]] name = "solana-compute-budget-program" -version = "1.11.6" +version = "1.11.7" dependencies = [ "solana-program-runtime", - "solana-sdk 1.11.6", + "solana-sdk 1.11.7", ] [[package]] name = "solana-config-program" -version = "1.11.6" +version = "1.11.7" dependencies = [ "bincode", "chrono", "serde", "serde_derive", "solana-program-runtime", - "solana-sdk 1.11.6", + "solana-sdk 1.11.7", ] [[package]] name = "solana-core" -version = "1.11.6" +version = "1.11.7" dependencies = [ "ahash", "base64 0.13.0", @@ -4731,8 +4731,8 @@ dependencies = [ "solana-bloom", "solana-client", "solana-entry", - "solana-frozen-abi 1.11.6", - "solana-frozen-abi-macro 1.11.6", + "solana-frozen-abi 1.11.7", + "solana-frozen-abi-macro 1.11.7", "solana-geyser-plugin-manager", "solana-gossip", "solana-ledger", @@ -4745,7 +4745,7 @@ dependencies = [ "solana-rayon-threadlimit", "solana-rpc", "solana-runtime", - "solana-sdk 1.11.6", + "solana-sdk 1.11.7", "solana-send-transaction-service", "solana-streamer", "solana-transaction-status", @@ -4761,19 +4761,19 @@ dependencies = [ [[package]] name = "solana-download-utils" -version = "1.11.6" +version = "1.11.7" dependencies = [ "console", "indicatif", "log", "reqwest", "solana-runtime", - "solana-sdk 1.11.6", + "solana-sdk 1.11.7", ] [[package]] name = "solana-entry" -version = "1.11.6" +version = "1.11.7" dependencies = [ "bincode", "crossbeam-channel", @@ -4789,12 +4789,12 @@ dependencies = [ "solana-metrics", "solana-perf", "solana-rayon-threadlimit", - "solana-sdk 1.11.6", + "solana-sdk 1.11.7", ] [[package]] name = "solana-faucet" -version = "1.11.6" +version = "1.11.7" dependencies = [ "bincode", "byteorder 1.4.3", @@ -4805,9 +4805,9 @@ dependencies = [ "serde_derive", "solana-clap-utils", "solana-cli-config", - "solana-logger 1.11.6", + "solana-logger 1.11.7", "solana-metrics", - "solana-sdk 1.11.6", + "solana-sdk 1.11.7", "solana-version", "spl-memo", "thiserror", @@ -4838,7 +4838,7 @@ dependencies = [ [[package]] name = "solana-frozen-abi" -version = "1.11.6" +version = "1.11.7" dependencies = [ "ahash", "blake3", @@ -4863,7 +4863,7 @@ dependencies = [ "serde_derive", "serde_json", "sha2 0.10.2", - "solana-frozen-abi-macro 1.11.6", + "solana-frozen-abi-macro 1.11.7", "subtle", "thiserror", ] @@ -4882,7 +4882,7 @@ dependencies = [ [[package]] name = "solana-frozen-abi-macro" -version = "1.11.6" +version = "1.11.7" dependencies = [ "proc-macro2 1.0.41", "quote 1.0.18", @@ -4892,26 +4892,26 @@ dependencies = [ [[package]] name = "solana-genesis-utils" -version = "1.11.6" +version = "1.11.7" dependencies = [ "solana-download-utils", "solana-runtime", - "solana-sdk 1.11.6", + "solana-sdk 1.11.7", ] [[package]] name = "solana-geyser-plugin-interface" -version = "1.11.6" +version = "1.11.7" dependencies = [ "log", - "solana-sdk 1.11.6", + "solana-sdk 1.11.7", "solana-transaction-status", "thiserror", ] [[package]] name = "solana-geyser-plugin-manager" -version = "1.11.6" +version = "1.11.7" dependencies = [ "bs58", "crossbeam-channel", @@ -4924,14 +4924,14 @@ dependencies = [ "solana-metrics", "solana-rpc", "solana-runtime", - "solana-sdk 1.11.6", + "solana-sdk 1.11.7", "solana-transaction-status", "thiserror", ] [[package]] name = "solana-gossip" -version = "1.11.6" +version = "1.11.7" dependencies = [ "bincode", "bv", @@ -4955,17 +4955,17 @@ dependencies = [ "solana-clap-utils", "solana-client", "solana-entry", - "solana-frozen-abi 1.11.6", - "solana-frozen-abi-macro 1.11.6", + "solana-frozen-abi 1.11.7", + "solana-frozen-abi-macro 1.11.7", "solana-ledger", - "solana-logger 1.11.6", + "solana-logger 1.11.7", "solana-measure", "solana-metrics", "solana-net-utils", "solana-perf", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.11.6", + "solana-sdk 1.11.7", "solana-streamer", "solana-version", "solana-vote-program", @@ -4974,7 +4974,7 @@ dependencies = [ [[package]] name = "solana-ledger" -version = "1.11.6" +version = "1.11.7" dependencies = [ "bincode", "bitflags", @@ -5005,15 +5005,15 @@ dependencies = [ "solana-account-decoder", "solana-bpf-loader-program", "solana-entry", - "solana-frozen-abi 1.11.6", - "solana-frozen-abi-macro 1.11.6", + "solana-frozen-abi 1.11.7", + "solana-frozen-abi-macro 1.11.7", "solana-measure", "solana-metrics", "solana-perf", "solana-program-runtime", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.11.6", + "solana-sdk 1.11.7", "solana-stake-program", "solana-storage-bigtable", "solana-storage-proto", @@ -5042,7 +5042,7 @@ dependencies = [ [[package]] name = "solana-logger" -version = "1.11.6" +version = "1.11.7" dependencies = [ "env_logger", "lazy_static", @@ -5051,36 +5051,36 @@ dependencies = [ [[package]] name = "solana-measure" -version = "1.11.6" +version = "1.11.7" dependencies = [ "log", - "solana-sdk 1.11.6", + "solana-sdk 1.11.7", ] [[package]] name = "solana-merkle-tree" -version = "1.11.6" +version = "1.11.7" dependencies = [ "fast-math", "matches", - "solana-program 1.11.6", + "solana-program 1.11.7", ] [[package]] name = "solana-metrics" -version = "1.11.6" +version = "1.11.7" dependencies = [ "crossbeam-channel", "gethostname", "lazy_static", "log", "reqwest", - "solana-sdk 1.11.6", + "solana-sdk 1.11.7", ] [[package]] name = "solana-net-utils" -version = "1.11.6" +version = "1.11.7" dependencies = [ "bincode", "clap 3.1.6", @@ -5091,8 +5091,8 @@ dependencies = [ "serde", "serde_derive", "socket2", - "solana-logger 1.11.6", - "solana-sdk 1.11.6", + "solana-logger 1.11.7", + "solana-sdk 1.11.7", "solana-version", "tokio", "url 2.2.2", @@ -5100,7 +5100,7 @@ dependencies = [ [[package]] name = "solana-perf" -version = "1.11.6" +version = "1.11.7" dependencies = [ "ahash", "bincode", @@ -5119,13 +5119,13 @@ dependencies = [ "serde", "solana-metrics", "solana-rayon-threadlimit", - "solana-sdk 1.11.6", + "solana-sdk 1.11.7", "solana-vote-program", ] [[package]] name = "solana-poh" -version = "1.11.6" +version = "1.11.7" dependencies = [ "core_affinity", "crossbeam-channel", @@ -5135,7 +5135,7 @@ dependencies = [ "solana-measure", "solana-metrics", "solana-runtime", - "solana-sdk 1.11.6", + "solana-sdk 1.11.7", "solana-sys-tuner", "thiserror", ] @@ -5184,7 +5184,7 @@ dependencies = [ [[package]] name = "solana-program" -version = "1.11.6" +version = "1.11.7" dependencies = [ "base64 0.13.0", "bincode", @@ -5220,9 +5220,9 @@ dependencies = [ "serde_json", "sha2 0.10.2", "sha3 0.10.1", - "solana-frozen-abi 1.11.6", - "solana-frozen-abi-macro 1.11.6", - "solana-sdk-macro 1.11.6", + "solana-frozen-abi 1.11.7", + "solana-frozen-abi-macro 1.11.7", + "solana-sdk-macro 1.11.7", "thiserror", "tiny-bip39", "wasm-bindgen", @@ -5231,7 +5231,7 @@ dependencies = [ [[package]] name = "solana-program-runtime" -version = "1.11.6" +version = "1.11.7" dependencies = [ "base64 0.13.0", "bincode", @@ -5245,17 +5245,17 @@ dependencies = [ "num-traits", "rustc_version", "serde", - "solana-frozen-abi 1.11.6", - "solana-frozen-abi-macro 1.11.6", + "solana-frozen-abi 1.11.7", + "solana-frozen-abi-macro 1.11.7", "solana-measure", "solana-metrics", - "solana-sdk 1.11.6", + "solana-sdk 1.11.7", "thiserror", ] [[package]] name = "solana-program-test" -version = "1.11.6" +version = "1.11.7" dependencies = [ "assert_matches", "async-trait", @@ -5267,10 +5267,10 @@ dependencies = [ "solana-banks-client", "solana-banks-server", "solana-bpf-loader-program", - "solana-logger 1.11.6", + "solana-logger 1.11.7", "solana-program-runtime", "solana-runtime", - "solana-sdk 1.11.6", + "solana-sdk 1.11.7", "solana-vote-program", "thiserror", "tokio", @@ -5278,7 +5278,7 @@ dependencies = [ [[package]] name = "solana-rayon-threadlimit" -version = "1.11.6" +version = "1.11.7" dependencies = [ "lazy_static", "num_cpus", @@ -5286,7 +5286,7 @@ dependencies = [ [[package]] name = "solana-remote-wallet" -version = "1.11.6" +version = "1.11.7" dependencies = [ "console", "dialoguer", @@ -5296,14 +5296,14 @@ dependencies = [ "parking_lot 0.12.1", "qstring", "semver", - "solana-sdk 1.11.6", + "solana-sdk 1.11.7", "thiserror", "uriparse", ] [[package]] name = "solana-rpc" -version = "1.11.6" +version = "1.11.7" dependencies = [ "base64 0.13.0", "bincode", @@ -5336,7 +5336,7 @@ dependencies = [ "solana-poh", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.11.6", + "solana-sdk 1.11.7", "solana-send-transaction-service", "solana-stake-program", "solana-storage-bigtable", @@ -5354,7 +5354,7 @@ dependencies = [ [[package]] name = "solana-runtime" -version = "1.11.6" +version = "1.11.7" dependencies = [ "arrayref", "bincode", @@ -5390,17 +5390,17 @@ dependencies = [ "solana-bucket-map", "solana-compute-budget-program", "solana-config-program", - "solana-frozen-abi 1.11.6", - "solana-frozen-abi-macro 1.11.6", + "solana-frozen-abi 1.11.7", + "solana-frozen-abi-macro 1.11.7", "solana-measure", "solana-metrics", "solana-program-runtime", "solana-rayon-threadlimit", - "solana-sdk 1.11.6", + "solana-sdk 1.11.7", "solana-stake-program", "solana-vote-program", "solana-zk-token-proof-program", - "solana-zk-token-sdk 1.11.6", + "solana-zk-token-sdk 1.11.7", "strum", "strum_macros", "symlink", @@ -5463,7 +5463,7 @@ dependencies = [ [[package]] name = "solana-sdk" -version = "1.11.6" +version = "1.11.7" dependencies = [ "assert_matches", "base64 0.13.0", @@ -5500,11 +5500,11 @@ dependencies = [ "serde_json", "sha2 0.10.2", "sha3 0.10.1", - "solana-frozen-abi 1.11.6", - "solana-frozen-abi-macro 1.11.6", - "solana-logger 1.11.6", - "solana-program 1.11.6", - "solana-sdk-macro 1.11.6", + "solana-frozen-abi 1.11.7", + "solana-frozen-abi-macro 1.11.7", + "solana-logger 1.11.7", + "solana-program 1.11.7", + "solana-sdk-macro 1.11.7", "thiserror", "uriparse", "wasm-bindgen", @@ -5525,7 +5525,7 @@ dependencies = [ [[package]] name = "solana-sdk-macro" -version = "1.11.6" +version = "1.11.7" dependencies = [ "bs58", "proc-macro2 1.0.41", @@ -5536,7 +5536,7 @@ dependencies = [ [[package]] name = "solana-send-transaction-service" -version = "1.11.6" +version = "1.11.7" dependencies = [ "crossbeam-channel", "log", @@ -5544,12 +5544,12 @@ dependencies = [ "solana-measure", "solana-metrics", "solana-runtime", - "solana-sdk 1.11.6", + "solana-sdk 1.11.7", ] [[package]] name = "solana-stake-program" -version = "1.11.6" +version = "1.11.7" dependencies = [ "bincode", "log", @@ -5559,18 +5559,18 @@ dependencies = [ "serde", "serde_derive", "solana-config-program", - "solana-frozen-abi 1.11.6", - "solana-frozen-abi-macro 1.11.6", + "solana-frozen-abi 1.11.7", + "solana-frozen-abi-macro 1.11.7", "solana-metrics", "solana-program-runtime", - "solana-sdk 1.11.6", + "solana-sdk 1.11.7", "solana-vote-program", "thiserror", ] [[package]] name = "solana-storage-bigtable" -version = "1.11.6" +version = "1.11.7" dependencies = [ "backoff", "bincode", @@ -5591,7 +5591,7 @@ dependencies = [ "serde_derive", "smpl_jwt", "solana-metrics", - "solana-sdk 1.11.6", + "solana-sdk 1.11.7", "solana-storage-proto", "solana-transaction-status", "thiserror", @@ -5602,7 +5602,7 @@ dependencies = [ [[package]] name = "solana-storage-proto" -version = "1.11.6" +version = "1.11.7" dependencies = [ "bincode", "bs58", @@ -5610,14 +5610,14 @@ dependencies = [ "protobuf-src", "serde", "solana-account-decoder", - "solana-sdk 1.11.6", + "solana-sdk 1.11.7", "solana-transaction-status", "tonic-build 0.8.0", ] [[package]] name = "solana-streamer" -version = "1.11.6" +version = "1.11.7" dependencies = [ "crossbeam-channel", "futures-util", @@ -5636,7 +5636,7 @@ dependencies = [ "rustls 0.20.6", "solana-metrics", "solana-perf", - "solana-sdk 1.11.6", + "solana-sdk 1.11.7", "thiserror", "tokio", "x509-parser", @@ -5644,13 +5644,13 @@ dependencies = [ [[package]] name = "solana-sys-tuner" -version = "1.11.6" +version = "1.11.7" dependencies = [ "clap 2.33.3", "libc", "log", "nix", - "solana-logger 1.11.6", + "solana-logger 1.11.7", "solana-version", "sysctl", "unix_socket2", @@ -5659,7 +5659,7 @@ dependencies = [ [[package]] name = "solana-test-validator" -version = "1.11.6" +version = "1.11.7" dependencies = [ "base64 0.13.0", "log", @@ -5670,20 +5670,20 @@ dependencies = [ "solana-core", "solana-gossip", "solana-ledger", - "solana-logger 1.11.6", + "solana-logger 1.11.7", "solana-net-utils", "solana-program-runtime", "solana-program-test", "solana-rpc", "solana-runtime", - "solana-sdk 1.11.6", + "solana-sdk 1.11.7", "solana-streamer", "tokio", ] [[package]] name = "solana-transaction-status" -version = "1.11.6" +version = "1.11.7" dependencies = [ "Inflector", "base64 0.13.0", @@ -5698,7 +5698,7 @@ dependencies = [ "solana-account-decoder", "solana-measure", "solana-metrics", - "solana-sdk 1.11.6", + "solana-sdk 1.11.7", "solana-vote-program", "spl-associated-token-account", "spl-memo", @@ -5709,7 +5709,7 @@ dependencies = [ [[package]] name = "solana-validator" -version = "1.11.6" +version = "1.11.7" dependencies = [ "chrono", "clap 2.33.3", @@ -5740,14 +5740,14 @@ dependencies = [ "solana-genesis-utils", "solana-gossip", "solana-ledger", - "solana-logger 1.11.6", + "solana-logger 1.11.7", "solana-metrics", "solana-net-utils", "solana-perf", "solana-poh", "solana-rpc", "solana-runtime", - "solana-sdk 1.11.6", + "solana-sdk 1.11.7", "solana-send-transaction-service", "solana-storage-bigtable", "solana-streamer", @@ -5760,21 +5760,21 @@ dependencies = [ [[package]] name = "solana-version" -version = "1.11.6" +version = "1.11.7" dependencies = [ "log", "rustc_version", "semver", "serde", "serde_derive", - "solana-frozen-abi 1.11.6", - "solana-frozen-abi-macro 1.11.6", - "solana-sdk 1.11.6", + "solana-frozen-abi 1.11.7", + "solana-frozen-abi-macro 1.11.7", + "solana-sdk 1.11.7", ] [[package]] name = "solana-vote-program" -version = "1.11.6" +version = "1.11.7" dependencies = [ "bincode", "log", @@ -5783,25 +5783,25 @@ dependencies = [ "rustc_version", "serde", "serde_derive", - "solana-frozen-abi 1.11.6", - "solana-frozen-abi-macro 1.11.6", + "solana-frozen-abi 1.11.7", + "solana-frozen-abi-macro 1.11.7", "solana-metrics", "solana-program-runtime", - "solana-sdk 1.11.6", + "solana-sdk 1.11.7", "thiserror", ] [[package]] name = "solana-zk-token-proof-program" -version = "1.11.6" +version = "1.11.7" dependencies = [ "bytemuck", "getrandom 0.1.14", "num-derive", "num-traits", "solana-program-runtime", - "solana-sdk 1.11.6", - "solana-zk-token-sdk 1.11.6", + "solana-sdk 1.11.7", + "solana-zk-token-sdk 1.11.7", ] [[package]] @@ -5836,7 +5836,7 @@ dependencies = [ [[package]] name = "solana-zk-token-sdk" -version = "1.11.6" +version = "1.11.7" dependencies = [ "aes-gcm-siv", "arrayref", @@ -5855,8 +5855,8 @@ dependencies = [ "serde", "serde_json", "sha3 0.9.1", - "solana-program 1.11.6", - "solana-sdk 1.11.6", + "solana-program 1.11.7", + "solana-sdk 1.11.7", "subtle", "thiserror", "zeroize", diff --git a/programs/bpf/Cargo.toml b/programs/bpf/Cargo.toml index 6406c88271e5ef..460ed0cbc83952 100644 --- a/programs/bpf/Cargo.toml +++ b/programs/bpf/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "solana-bpf-programs" description = "Blockchain, Rebuilt for Scale" -version = "1.11.6" +version = "1.11.7" documentation = "https://docs.rs/solana" homepage = "https://solana.com/" readme = "README.md" @@ -26,22 +26,22 @@ itertools = "0.10.1" log = "0.4.11" miow = "0.3.6" net2 = "0.2.37" -solana-account-decoder = { path = "../../account-decoder", version = "=1.11.6" } -solana-bpf-loader-program = { path = "../bpf_loader", version = "=1.11.6" } -solana-bpf-rust-invoke = { path = "rust/invoke", version = "=1.11.6" } -solana-bpf-rust-realloc = { path = "rust/realloc", version = "=1.11.6" } -solana-bpf-rust-realloc-invoke = { path = "rust/realloc_invoke", version = "=1.11.6" } -solana-cli-output = { path = "../../cli-output", version = "=1.11.6" } -solana-logger = { path = "../../logger", version = "=1.11.6" } -solana-measure = { path = "../../measure", version = "=1.11.6" } -solana-program-runtime = { path = "../../program-runtime", version = "=1.11.6" } -solana-runtime = { path = "../../runtime", version = "=1.11.6" } -solana-sdk = { path = "../../sdk", version = "=1.11.6" } -solana-transaction-status = { path = "../../transaction-status", version = "=1.11.6" } +solana-account-decoder = { path = "../../account-decoder", version = "=1.11.7" } +solana-bpf-loader-program = { path = "../bpf_loader", version = "=1.11.7" } +solana-bpf-rust-invoke = { path = "rust/invoke", version = "=1.11.7" } +solana-bpf-rust-realloc = { path = "rust/realloc", version = "=1.11.7" } +solana-bpf-rust-realloc-invoke = { path = "rust/realloc_invoke", version = "=1.11.7" } +solana-cli-output = { path = "../../cli-output", version = "=1.11.7" } +solana-logger = { path = "../../logger", version = "=1.11.7" } +solana-measure = { path = "../../measure", version = "=1.11.7" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.11.7" } +solana-runtime = { path = "../../runtime", version = "=1.11.7" } +solana-sdk = { path = "../../sdk", version = "=1.11.7" } +solana-transaction-status = { path = "../../transaction-status", version = "=1.11.7" } solana_rbpf = "=0.2.31" [dev-dependencies] -solana-ledger = { path = "../../ledger", version = "=1.11.6" } +solana-ledger = { path = "../../ledger", version = "=1.11.7" } [[bench]] name = "bpf_loader" diff --git a/programs/bpf/rust/128bit/Cargo.toml b/programs/bpf/rust/128bit/Cargo.toml index 1b6a470d031e7d..833025f8041e36 100644 --- a/programs/bpf/rust/128bit/Cargo.toml +++ b/programs/bpf/rust/128bit/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-128bit" -version = "1.11.6" +version = "1.11.7" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ documentation = "https://docs.rs/solana-bpf-rust-128bit" edition = "2021" [dependencies] -solana-bpf-rust-128bit-dep = { path = "../128bit_dep", version = "=1.11.6" } -solana-program = { path = "../../../../sdk/program", version = "=1.11.6" } +solana-bpf-rust-128bit-dep = { path = "../128bit_dep", version = "=1.11.7" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.7" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/128bit_dep/Cargo.toml b/programs/bpf/rust/128bit_dep/Cargo.toml index 0ef3294df774a2..2a5f38b30a6c49 100644 --- a/programs/bpf/rust/128bit_dep/Cargo.toml +++ b/programs/bpf/rust/128bit_dep/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-128bit-dep" -version = "1.11.6" +version = "1.11.7" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-128bit-dep" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.6" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.7" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/bpf/rust/alloc/Cargo.toml b/programs/bpf/rust/alloc/Cargo.toml index b06df2b4aa8a6a..171ef93a3afd61 100644 --- a/programs/bpf/rust/alloc/Cargo.toml +++ b/programs/bpf/rust/alloc/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-alloc" -version = "1.11.6" +version = "1.11.7" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-alloc" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.6" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.7" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/call_depth/Cargo.toml b/programs/bpf/rust/call_depth/Cargo.toml index 86f87423701a63..713ac326b2bb4f 100644 --- a/programs/bpf/rust/call_depth/Cargo.toml +++ b/programs/bpf/rust/call_depth/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-call-depth" -version = "1.11.6" +version = "1.11.7" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-call-depth" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.6" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.7" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/caller_access/Cargo.toml b/programs/bpf/rust/caller_access/Cargo.toml index 90253a86829e6d..40f5822581f17a 100644 --- a/programs/bpf/rust/caller_access/Cargo.toml +++ b/programs/bpf/rust/caller_access/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-caller-access" -version = "1.11.6" +version = "1.11.7" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-caller-access" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.6" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.7" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/curve25519/Cargo.toml b/programs/bpf/rust/curve25519/Cargo.toml index 36a316556aa2d9..8c22ad8ebd0e8d 100644 --- a/programs/bpf/rust/curve25519/Cargo.toml +++ b/programs/bpf/rust/curve25519/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-curve25519" -version = "1.11.6" +version = "1.11.7" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ documentation = "https://docs.rs/solana-bpf-rust-zktoken_crypto" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.6" } -solana-zk-token-sdk = { path = "../../../../zk-token-sdk", version = "=1.11.6" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.7" } +solana-zk-token-sdk = { path = "../../../../zk-token-sdk", version = "=1.11.7" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/custom_heap/Cargo.toml b/programs/bpf/rust/custom_heap/Cargo.toml index 5ce1b8cbb3579b..342c0a251a05d7 100644 --- a/programs/bpf/rust/custom_heap/Cargo.toml +++ b/programs/bpf/rust/custom_heap/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-custom-heap" -version = "1.11.6" +version = "1.11.7" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-custom-heap" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.6" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.7" } [features] default = ["custom-heap"] diff --git a/programs/bpf/rust/dep_crate/Cargo.toml b/programs/bpf/rust/dep_crate/Cargo.toml index d82280d99bf1a8..9529789c0d2c17 100644 --- a/programs/bpf/rust/dep_crate/Cargo.toml +++ b/programs/bpf/rust/dep_crate/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-dep-crate" -version = "1.11.6" +version = "1.11.7" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,8 +12,8 @@ edition = "2021" [dependencies] byteorder = { version = "1", default-features = false } # list of crates which must be buildable for bpf programs -solana-address-lookup-table-program = { path = "../../../../programs/address-lookup-table", version = "=1.11.6" } -solana-program = { path = "../../../../sdk/program", version = "=1.11.6" } +solana-address-lookup-table-program = { path = "../../../../programs/address-lookup-table", version = "=1.11.7" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.7" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/deprecated_loader/Cargo.toml b/programs/bpf/rust/deprecated_loader/Cargo.toml index e7b7b32524861f..60a3557f46a472 100644 --- a/programs/bpf/rust/deprecated_loader/Cargo.toml +++ b/programs/bpf/rust/deprecated_loader/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-deprecated-loader" -version = "1.11.6" +version = "1.11.7" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-deprecated-loader" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.6" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.7" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/dup_accounts/Cargo.toml b/programs/bpf/rust/dup_accounts/Cargo.toml index c337074a71ea67..d4df85b8e7eb69 100644 --- a/programs/bpf/rust/dup_accounts/Cargo.toml +++ b/programs/bpf/rust/dup_accounts/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-dup-accounts" -version = "1.11.6" +version = "1.11.7" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-dup-accounts" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.6" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.7" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/error_handling/Cargo.toml b/programs/bpf/rust/error_handling/Cargo.toml index 1245336ac29397..a15e747e5445c0 100644 --- a/programs/bpf/rust/error_handling/Cargo.toml +++ b/programs/bpf/rust/error_handling/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-error-handling" -version = "1.11.6" +version = "1.11.7" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,7 +12,7 @@ edition = "2021" [dependencies] num-derive = "0.3" num-traits = "0.2" -solana-program = { path = "../../../../sdk/program", version = "=1.11.6" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.7" } thiserror = "1.0" [lib] diff --git a/programs/bpf/rust/external_spend/Cargo.toml b/programs/bpf/rust/external_spend/Cargo.toml index ca8e300392234f..3643a3743ae32b 100644 --- a/programs/bpf/rust/external_spend/Cargo.toml +++ b/programs/bpf/rust/external_spend/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-external-spend" -version = "1.11.6" +version = "1.11.7" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-external-spend" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.6" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.7" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/finalize/Cargo.toml b/programs/bpf/rust/finalize/Cargo.toml index 4d1b6a41c4d93d..694c2f6d5c05c0 100644 --- a/programs/bpf/rust/finalize/Cargo.toml +++ b/programs/bpf/rust/finalize/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-finalize" -version = "1.11.6" +version = "1.11.7" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-finalize" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.6" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.7" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/get_minimum_delegation/Cargo.toml b/programs/bpf/rust/get_minimum_delegation/Cargo.toml index 044a7bfaa2be47..35971c8700e712 100644 --- a/programs/bpf/rust/get_minimum_delegation/Cargo.toml +++ b/programs/bpf/rust/get_minimum_delegation/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-get-minimum-delegation" -version = "1.11.6" +version = "1.11.7" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-get-minimum-delegation" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.6" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.7" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/inner_instruction_alignment_check/Cargo.toml b/programs/bpf/rust/inner_instruction_alignment_check/Cargo.toml index b666bd0d612213..c1ba8df30114b5 100644 --- a/programs/bpf/rust/inner_instruction_alignment_check/Cargo.toml +++ b/programs/bpf/rust/inner_instruction_alignment_check/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-inner_instruction_alignment_check" -version = "1.11.6" +version = "1.11.7" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-inner_instruction_alignment_che edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.6" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.7" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/instruction_introspection/Cargo.toml b/programs/bpf/rust/instruction_introspection/Cargo.toml index 3c30dd916a7443..92db61ce40a743 100644 --- a/programs/bpf/rust/instruction_introspection/Cargo.toml +++ b/programs/bpf/rust/instruction_introspection/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-instruction-introspection" -version = "1.11.6" +version = "1.11.7" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-instruction-introspection" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.6" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.7" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/invoke/Cargo.toml b/programs/bpf/rust/invoke/Cargo.toml index ce642afa1ccce6..92e042787f85fa 100644 --- a/programs/bpf/rust/invoke/Cargo.toml +++ b/programs/bpf/rust/invoke/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-invoke" -version = "1.11.6" +version = "1.11.7" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -15,7 +15,7 @@ program = [] [dependencies] solana-bpf-rust-invoked = { path = "../invoked", default-features = false } -solana-program = { path = "../../../../sdk/program", version = "=1.11.6" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.7" } [lib] crate-type = ["lib", "cdylib"] diff --git a/programs/bpf/rust/invoke_and_error/Cargo.toml b/programs/bpf/rust/invoke_and_error/Cargo.toml index baf27b244e882d..18eb5caefdea8d 100644 --- a/programs/bpf/rust/invoke_and_error/Cargo.toml +++ b/programs/bpf/rust/invoke_and_error/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-invoke-and-error" -version = "1.11.6" +version = "1.11.7" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-invoke-and-error" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.6" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.7" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/invoke_and_ok/Cargo.toml b/programs/bpf/rust/invoke_and_ok/Cargo.toml index ce74e920490e33..5e2576971d1d0e 100644 --- a/programs/bpf/rust/invoke_and_ok/Cargo.toml +++ b/programs/bpf/rust/invoke_and_ok/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-invoke-and-ok" -version = "1.11.6" +version = "1.11.7" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-invoke-and-ok" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.6" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.7" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/invoke_and_return/Cargo.toml b/programs/bpf/rust/invoke_and_return/Cargo.toml index 52ef6038242d2c..bc0f65dd1aa1da 100644 --- a/programs/bpf/rust/invoke_and_return/Cargo.toml +++ b/programs/bpf/rust/invoke_and_return/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-invoke-and-return" -version = "1.11.6" +version = "1.11.7" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-invoke-and-return" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.6" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.7" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/invoked/Cargo.toml b/programs/bpf/rust/invoked/Cargo.toml index 779c16656625ad..471a17c987f4b9 100644 --- a/programs/bpf/rust/invoked/Cargo.toml +++ b/programs/bpf/rust/invoked/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-invoked" -version = "1.11.6" +version = "1.11.7" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,7 +14,7 @@ default = ["program"] program = [] [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.6" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.7" } [lib] crate-type = ["lib", "cdylib"] diff --git a/programs/bpf/rust/iter/Cargo.toml b/programs/bpf/rust/iter/Cargo.toml index bee7bac07abbcf..bf6e6529de3a4b 100644 --- a/programs/bpf/rust/iter/Cargo.toml +++ b/programs/bpf/rust/iter/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-iter" -version = "1.11.6" +version = "1.11.7" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-iter" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.6" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.7" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/log_data/Cargo.toml b/programs/bpf/rust/log_data/Cargo.toml index b9ddc2c8c064c0..8e3758de8a1e49 100644 --- a/programs/bpf/rust/log_data/Cargo.toml +++ b/programs/bpf/rust/log_data/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-log-data" -version = "1.11.6" +version = "1.11.7" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-log-data" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.6" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.7" } [features] default = ["program"] diff --git a/programs/bpf/rust/many_args/Cargo.toml b/programs/bpf/rust/many_args/Cargo.toml index 6f3f518f509a29..fc6187750e36cd 100644 --- a/programs/bpf/rust/many_args/Cargo.toml +++ b/programs/bpf/rust/many_args/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-many-args" -version = "1.11.6" +version = "1.11.7" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ documentation = "https://docs.rs/solana-bpf-rust-many-args" edition = "2021" [dependencies] -solana-bpf-rust-many-args-dep = { path = "../many_args_dep", version = "=1.11.6" } -solana-program = { path = "../../../../sdk/program", version = "=1.11.6" } +solana-bpf-rust-many-args-dep = { path = "../many_args_dep", version = "=1.11.7" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.7" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/many_args_dep/Cargo.toml b/programs/bpf/rust/many_args_dep/Cargo.toml index 1ea21ac7af2064..fc563531b4417a 100644 --- a/programs/bpf/rust/many_args_dep/Cargo.toml +++ b/programs/bpf/rust/many_args_dep/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-many-args-dep" -version = "1.11.6" +version = "1.11.7" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-many-args-dep" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.6" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.7" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/bpf/rust/mem/Cargo.toml b/programs/bpf/rust/mem/Cargo.toml index 3dd12ab001e9c7..a7d5cd89e61338 100644 --- a/programs/bpf/rust/mem/Cargo.toml +++ b/programs/bpf/rust/mem/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-mem" -version = "1.11.6" +version = "1.11.7" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,12 +13,12 @@ edition = "2021" no-entrypoint = [] [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.6" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.7" } [dev-dependencies] -solana-program-runtime = { path = "../../../../program-runtime", version = "=1.11.6" } -solana-program-test = { path = "../../../../program-test", version = "=1.11.6" } -solana-sdk = { path = "../../../../sdk", version = "=1.11.6" } +solana-program-runtime = { path = "../../../../program-runtime", version = "=1.11.7" } +solana-program-test = { path = "../../../../program-test", version = "=1.11.7" } +solana-sdk = { path = "../../../../sdk", version = "=1.11.7" } [lib] crate-type = ["cdylib", "lib"] diff --git a/programs/bpf/rust/membuiltins/Cargo.toml b/programs/bpf/rust/membuiltins/Cargo.toml index 71cec481abc887..9063a645c6447c 100644 --- a/programs/bpf/rust/membuiltins/Cargo.toml +++ b/programs/bpf/rust/membuiltins/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-membuiltins" -version = "1.11.6" +version = "1.11.7" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ documentation = "https://docs.rs/solana-bpf-rust-mem" edition = "2021" [dependencies] -solana-bpf-rust-mem = { path = "../mem", version = "=1.11.6", features = [ "no-entrypoint" ] } -solana-program = { path = "../../../../sdk/program", version = "=1.11.6" } +solana-bpf-rust-mem = { path = "../mem", version = "=1.11.7", features = [ "no-entrypoint" ] } +solana-program = { path = "../../../../sdk/program", version = "=1.11.7" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/noop/Cargo.toml b/programs/bpf/rust/noop/Cargo.toml index ddf2bd7dc33fb8..27777fbb7d7100 100644 --- a/programs/bpf/rust/noop/Cargo.toml +++ b/programs/bpf/rust/noop/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-noop" -version = "1.11.6" +version = "1.11.7" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-noop" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.6" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.7" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/panic/Cargo.toml b/programs/bpf/rust/panic/Cargo.toml index 80d1dc5f41e12b..255deb70ec3b8b 100644 --- a/programs/bpf/rust/panic/Cargo.toml +++ b/programs/bpf/rust/panic/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-panic" -version = "1.11.6" +version = "1.11.7" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-panic" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.6" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.7" } [features] default = ["custom-panic"] diff --git a/programs/bpf/rust/param_passing/Cargo.toml b/programs/bpf/rust/param_passing/Cargo.toml index 7abaa6481a4818..4ceacb79f47f6b 100644 --- a/programs/bpf/rust/param_passing/Cargo.toml +++ b/programs/bpf/rust/param_passing/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-param-passing" -version = "1.11.6" +version = "1.11.7" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ documentation = "https://docs.rs/solana-bpf-rust-param-passing" edition = "2021" [dependencies] -solana-bpf-rust-param-passing-dep = { path = "../param_passing_dep", version = "=1.11.6" } -solana-program = { path = "../../../../sdk/program", version = "=1.11.6" } +solana-bpf-rust-param-passing-dep = { path = "../param_passing_dep", version = "=1.11.7" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.7" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/param_passing_dep/Cargo.toml b/programs/bpf/rust/param_passing_dep/Cargo.toml index bcd852b53ba1a0..94cbb3b68cf1cc 100644 --- a/programs/bpf/rust/param_passing_dep/Cargo.toml +++ b/programs/bpf/rust/param_passing_dep/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-param-passing-dep" -version = "1.11.6" +version = "1.11.7" description = "Solana BPF program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-param-passing-dep" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.6" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.7" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/bpf/rust/rand/Cargo.toml b/programs/bpf/rust/rand/Cargo.toml index 48aeceb2151fa5..b1dd7bfd5d8b7a 100644 --- a/programs/bpf/rust/rand/Cargo.toml +++ b/programs/bpf/rust/rand/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-rand" -version = "1.11.6" +version = "1.11.7" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,7 +12,7 @@ edition = "2021" [dependencies] getrandom = { version = "0.1.14", features = ["dummy"] } rand = "0.7" -solana-program = { path = "../../../../sdk/program", version = "=1.11.6" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.7" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/realloc/Cargo.toml b/programs/bpf/rust/realloc/Cargo.toml index 3065c944f671d0..80ed25ea560b24 100644 --- a/programs/bpf/rust/realloc/Cargo.toml +++ b/programs/bpf/rust/realloc/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-realloc" -version = "1.11.6" +version = "1.11.7" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,7 +14,7 @@ default = ["program"] program = [] [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.6" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.7" } [lib] crate-type = ["lib", "cdylib"] diff --git a/programs/bpf/rust/realloc_invoke/Cargo.toml b/programs/bpf/rust/realloc_invoke/Cargo.toml index 758789c03615f4..515db95f148969 100644 --- a/programs/bpf/rust/realloc_invoke/Cargo.toml +++ b/programs/bpf/rust/realloc_invoke/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-realloc-invoke" -version = "1.11.6" +version = "1.11.7" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,8 +14,8 @@ default = ["program"] program = [] [dependencies] -solana-bpf-rust-realloc = { path = "../realloc", version = "=1.11.6", default-features = false } -solana-program = { path = "../../../../sdk/program", version = "=1.11.6" } +solana-bpf-rust-realloc = { path = "../realloc", version = "=1.11.7", default-features = false } +solana-program = { path = "../../../../sdk/program", version = "=1.11.7" } [lib] crate-type = ["lib", "cdylib"] diff --git a/programs/bpf/rust/ro_account_modify/Cargo.toml b/programs/bpf/rust/ro_account_modify/Cargo.toml index 355f1b7ff38a59..0dea0943267a95 100644 --- a/programs/bpf/rust/ro_account_modify/Cargo.toml +++ b/programs/bpf/rust/ro_account_modify/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-ro-account_modify" -version = "1.11.6" +version = "1.11.7" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-ro-modify" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.6" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.7" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/ro_modify/Cargo.toml b/programs/bpf/rust/ro_modify/Cargo.toml index b7ac58f745d255..13b558341554eb 100644 --- a/programs/bpf/rust/ro_modify/Cargo.toml +++ b/programs/bpf/rust/ro_modify/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-ro-modify" -version = "1.11.6" +version = "1.11.7" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-ro-modify" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.6" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.7" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/sanity/Cargo.toml b/programs/bpf/rust/sanity/Cargo.toml index 621fe240295c46..d0398112a07c87 100644 --- a/programs/bpf/rust/sanity/Cargo.toml +++ b/programs/bpf/rust/sanity/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-sanity" -version = "1.11.6" +version = "1.11.7" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,12 +13,12 @@ edition = "2021" test-bpf = [] [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.6" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.7" } [dev-dependencies] -solana-program-runtime = { path = "../../../../program-runtime", version = "=1.11.6" } -solana-program-test = { path = "../../../../program-test", version = "=1.11.6" } -solana-sdk = { path = "../../../../sdk", version = "=1.11.6" } +solana-program-runtime = { path = "../../../../program-runtime", version = "=1.11.7" } +solana-program-test = { path = "../../../../program-test", version = "=1.11.7" } +solana-sdk = { path = "../../../../sdk", version = "=1.11.7" } [lib] crate-type = ["cdylib", "lib"] diff --git a/programs/bpf/rust/secp256k1_recover/Cargo.toml b/programs/bpf/rust/secp256k1_recover/Cargo.toml index 4b38af10eaaac5..c285baa0d42db9 100644 --- a/programs/bpf/rust/secp256k1_recover/Cargo.toml +++ b/programs/bpf/rust/secp256k1_recover/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-secp256k1-recover" -version = "1.11.6" +version = "1.11.7" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -11,7 +11,7 @@ edition = "2021" [dependencies] libsecp256k1 = { version = "0.7.0", default-features = false } -solana-program = { path = "../../../../sdk/program", version = "=1.11.6" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.7" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/sha/Cargo.toml b/programs/bpf/rust/sha/Cargo.toml index d125da8d979644..11445e4cad19da 100644 --- a/programs/bpf/rust/sha/Cargo.toml +++ b/programs/bpf/rust/sha/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-sha" -version = "1.11.6" +version = "1.11.7" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -11,7 +11,7 @@ edition = "2021" [dependencies] blake3 = "1.0.0" -solana-program = { path = "../../../../sdk/program", version = "=1.11.6" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.7" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/sibling_inner_instruction/Cargo.toml b/programs/bpf/rust/sibling_inner_instruction/Cargo.toml index a5de86d5c19433..2433c9dfb7d241 100644 --- a/programs/bpf/rust/sibling_inner_instruction/Cargo.toml +++ b/programs/bpf/rust/sibling_inner_instruction/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-sibling_inner-instructions" -version = "1.11.6" +version = "1.11.7" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-log-data" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.6" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.7" } [features] default = ["program"] diff --git a/programs/bpf/rust/sibling_instruction/Cargo.toml b/programs/bpf/rust/sibling_instruction/Cargo.toml index 6d7d6ec08fa53b..ddd3840f5e52f6 100644 --- a/programs/bpf/rust/sibling_instruction/Cargo.toml +++ b/programs/bpf/rust/sibling_instruction/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-sibling-instructions" -version = "1.11.6" +version = "1.11.7" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-log-data" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.6" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.7" } [features] default = ["program"] diff --git a/programs/bpf/rust/simulation/Cargo.toml b/programs/bpf/rust/simulation/Cargo.toml index 3e7862a3775c47..5cf748e86f258b 100644 --- a/programs/bpf/rust/simulation/Cargo.toml +++ b/programs/bpf/rust/simulation/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-simulation" -version = "1.11.6" +version = "1.11.7" description = "Solana BPF Program Simulation Differences" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,13 +13,13 @@ edition = "2021" test-bpf = [] [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.6" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.7" } [dev-dependencies] -solana-logger = { path = "../../../../logger", version = "=1.11.6" } -solana-program-test = { path = "../../../../program-test", version = "=1.11.6" } -solana-sdk = { path = "../../../../sdk", version = "=1.11.6" } -solana-validator = { path = "../../../../validator", version = "=1.11.6" } +solana-logger = { path = "../../../../logger", version = "=1.11.7" } +solana-program-test = { path = "../../../../program-test", version = "=1.11.7" } +solana-sdk = { path = "../../../../sdk", version = "=1.11.7" } +solana-validator = { path = "../../../../validator", version = "=1.11.7" } [lib] crate-type = ["cdylib", "lib"] diff --git a/programs/bpf/rust/spoof1/Cargo.toml b/programs/bpf/rust/spoof1/Cargo.toml index 3fac3f592d9dd9..2ff09153068c1b 100644 --- a/programs/bpf/rust/spoof1/Cargo.toml +++ b/programs/bpf/rust/spoof1/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-spoof1" -version = "1.11.6" +version = "1.11.7" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-spoof1" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.6" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.7" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/spoof1_system/Cargo.toml b/programs/bpf/rust/spoof1_system/Cargo.toml index 56591da4adac91..dbb569c5504fa8 100644 --- a/programs/bpf/rust/spoof1_system/Cargo.toml +++ b/programs/bpf/rust/spoof1_system/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-spoof1-system" -version = "1.11.6" +version = "1.11.7" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-spoof1-system" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.6" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.7" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/sysvar/Cargo.toml b/programs/bpf/rust/sysvar/Cargo.toml index 445af57e395485..84beaef648c8e0 100644 --- a/programs/bpf/rust/sysvar/Cargo.toml +++ b/programs/bpf/rust/sysvar/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-sysvar" -version = "1.11.6" +version = "1.11.7" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,12 +10,12 @@ documentation = "https://docs.rs/solana-bpf-rust-sysvar" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.6" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.7" } [dev-dependencies] -solana-program-runtime = { path = "../../../../program-runtime", version = "=1.11.6" } -solana-program-test = { path = "../../../../program-test", version = "=1.11.6" } -solana-sdk = { path = "../../../../sdk", version = "=1.11.6" } +solana-program-runtime = { path = "../../../../program-runtime", version = "=1.11.7" } +solana-program-test = { path = "../../../../program-test", version = "=1.11.7" } +solana-sdk = { path = "../../../../sdk", version = "=1.11.7" } [lib] crate-type = ["cdylib", "lib"] diff --git a/programs/bpf/rust/upgradeable/Cargo.toml b/programs/bpf/rust/upgradeable/Cargo.toml index aed7d7e1e4a054..da7e9959e437d8 100644 --- a/programs/bpf/rust/upgradeable/Cargo.toml +++ b/programs/bpf/rust/upgradeable/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-upgradeable" -version = "1.11.6" +version = "1.11.7" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-upgradeable" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.6" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.7" } [lib] name = "solana_bpf_rust_upgradeable" diff --git a/programs/bpf/rust/upgraded/Cargo.toml b/programs/bpf/rust/upgraded/Cargo.toml index 36b06fdcecb863..cbf85b6f1ead01 100644 --- a/programs/bpf/rust/upgraded/Cargo.toml +++ b/programs/bpf/rust/upgraded/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-upgraded" -version = "1.11.6" +version = "1.11.7" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-upgraded" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.6" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.7" } [lib] name = "solana_bpf_rust_upgraded" diff --git a/programs/bpf_loader/Cargo.toml b/programs/bpf_loader/Cargo.toml index 652719b3406e71..198d8589ff2f78 100644 --- a/programs/bpf_loader/Cargo.toml +++ b/programs/bpf_loader/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-loader-program" -version = "1.11.6" +version = "1.11.7" description = "Solana BPF loader" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,17 +14,17 @@ bincode = "1.3.3" byteorder = "1.4.3" libsecp256k1 = "0.6.0" log = "0.4.17" -solana-measure = { path = "../../measure", version = "=1.11.6" } -solana-metrics = { path = "../../metrics", version = "=1.11.6" } -solana-program-runtime = { path = "../../program-runtime", version = "=1.11.6" } -solana-sdk = { path = "../../sdk", version = "=1.11.6" } -solana-zk-token-sdk = { path = "../../zk-token-sdk", version = "=1.11.6" } +solana-measure = { path = "../../measure", version = "=1.11.7" } +solana-metrics = { path = "../../metrics", version = "=1.11.7" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.11.7" } +solana-sdk = { path = "../../sdk", version = "=1.11.7" } +solana-zk-token-sdk = { path = "../../zk-token-sdk", version = "=1.11.7" } solana_rbpf = "=0.2.31" thiserror = "1.0" [dev-dependencies] rand = "0.7.3" -solana-runtime = { path = "../../runtime", version = "=1.11.6" } +solana-runtime = { path = "../../runtime", version = "=1.11.7" } [lib] crate-type = ["lib"] diff --git a/programs/bpf_loader/gen-syscall-list/Cargo.toml b/programs/bpf_loader/gen-syscall-list/Cargo.toml index 08162a6e8e920c..a619b0e77d9f31 100644 --- a/programs/bpf_loader/gen-syscall-list/Cargo.toml +++ b/programs/bpf_loader/gen-syscall-list/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "gen-syscall-list" -version = "1.11.6" +version = "1.11.7" edition = "2021" license = "Apache-2.0" publish = false diff --git a/programs/compute-budget/Cargo.toml b/programs/compute-budget/Cargo.toml index 3e6af5658b1047..9e85aa3dc8e840 100644 --- a/programs/compute-budget/Cargo.toml +++ b/programs/compute-budget/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "solana-compute-budget-program" description = "Solana Compute Budget program" -version = "1.11.6" +version = "1.11.7" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-compute-budget-program" repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ license = "Apache-2.0" edition = "2021" [dependencies] -solana-program-runtime = { path = "../../program-runtime", version = "=1.11.6" } -solana-sdk = { path = "../../sdk", version = "=1.11.6" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.11.7" } +solana-sdk = { path = "../../sdk", version = "=1.11.7" } [lib] crate-type = ["lib"] diff --git a/programs/config/Cargo.toml b/programs/config/Cargo.toml index e4119422d0f4f2..58a86f7f23ef27 100644 --- a/programs/config/Cargo.toml +++ b/programs/config/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-config-program" -version = "1.11.6" +version = "1.11.7" description = "Solana Config program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,11 +14,11 @@ bincode = "1.3.3" chrono = { version = "0.4.11", features = ["serde"] } serde = "1.0.138" serde_derive = "1.0.103" -solana-program-runtime = { path = "../../program-runtime", version = "=1.11.6" } -solana-sdk = { path = "../../sdk", version = "=1.11.6" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.11.7" } +solana-sdk = { path = "../../sdk", version = "=1.11.7" } [dev-dependencies] -solana-logger = { path = "../../logger", version = "=1.11.6" } +solana-logger = { path = "../../logger", version = "=1.11.7" } [lib] crate-type = ["lib"] diff --git a/programs/ed25519-tests/Cargo.toml b/programs/ed25519-tests/Cargo.toml index c62418a5dec0bb..65c6f4aa28ea02 100644 --- a/programs/ed25519-tests/Cargo.toml +++ b/programs/ed25519-tests/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-ed25519-program-tests" -version = "1.11.6" +version = "1.11.7" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" @@ -12,8 +12,8 @@ publish = false assert_matches = "1.5.0" ed25519-dalek = "=1.0.1" rand = "0.7.0" -solana-program-test = { path = "../../program-test", version = "=1.11.6" } -solana-sdk = { path = "../../sdk", version = "=1.11.6" } +solana-program-test = { path = "../../program-test", version = "=1.11.7" } +solana-sdk = { path = "../../sdk", version = "=1.11.7" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/stake/Cargo.toml b/programs/stake/Cargo.toml index 8492822326e675..ecb2e82188a5fa 100644 --- a/programs/stake/Cargo.toml +++ b/programs/stake/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-stake-program" -version = "1.11.6" +version = "1.11.7" description = "Solana Stake program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -16,19 +16,19 @@ num-derive = "0.3" num-traits = "0.2" serde = "1.0.138" serde_derive = "1.0.103" -solana-config-program = { path = "../config", version = "=1.11.6" } -solana-frozen-abi = { path = "../../frozen-abi", version = "=1.11.6" } -solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.11.6" } -solana-metrics = { path = "../../metrics", version = "=1.11.6" } -solana-program-runtime = { path = "../../program-runtime", version = "=1.11.6" } -solana-sdk = { path = "../../sdk", version = "=1.11.6" } -solana-vote-program = { path = "../vote", version = "=1.11.6" } +solana-config-program = { path = "../config", version = "=1.11.7" } +solana-frozen-abi = { path = "../../frozen-abi", version = "=1.11.7" } +solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.11.7" } +solana-metrics = { path = "../../metrics", version = "=1.11.7" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.11.7" } +solana-sdk = { path = "../../sdk", version = "=1.11.7" } +solana-vote-program = { path = "../vote", version = "=1.11.7" } thiserror = "1.0" [dev-dependencies] assert_matches = "1.5.0" proptest = "1.0" -solana-logger = { path = "../../logger", version = "=1.11.6" } +solana-logger = { path = "../../logger", version = "=1.11.7" } test-case = "2.1.0" [build-dependencies] diff --git a/programs/vote/Cargo.toml b/programs/vote/Cargo.toml index 5f2c0bf7cd408e..206eae08a18fc9 100644 --- a/programs/vote/Cargo.toml +++ b/programs/vote/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-vote-program" -version = "1.11.6" +version = "1.11.7" description = "Solana Vote program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -16,15 +16,15 @@ num-derive = "0.3" num-traits = "0.2" serde = "1.0.138" serde_derive = "1.0.103" -solana-frozen-abi = { path = "../../frozen-abi", version = "=1.11.6" } -solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.11.6" } -solana-metrics = { path = "../../metrics", version = "=1.11.6" } -solana-program-runtime = { path = "../../program-runtime", version = "=1.11.6" } -solana-sdk = { path = "../../sdk", version = "=1.11.6" } +solana-frozen-abi = { path = "../../frozen-abi", version = "=1.11.7" } +solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.11.7" } +solana-metrics = { path = "../../metrics", version = "=1.11.7" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.11.7" } +solana-sdk = { path = "../../sdk", version = "=1.11.7" } thiserror = "1.0" [dev-dependencies] -solana-logger = { path = "../../logger", version = "=1.11.6" } +solana-logger = { path = "../../logger", version = "=1.11.7" } [build-dependencies] rustc_version = "0.4" diff --git a/programs/zk-token-proof/Cargo.toml b/programs/zk-token-proof/Cargo.toml index e4b9c68582f21e..c6f1ec42cf6921 100644 --- a/programs/zk-token-proof/Cargo.toml +++ b/programs/zk-token-proof/Cargo.toml @@ -3,7 +3,7 @@ name = "solana-zk-token-proof-program" description = "Solana Zk Token Proof Program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" -version = "1.11.6" +version = "1.11.7" license = "Apache-2.0" edition = "2021" @@ -12,6 +12,6 @@ bytemuck = { version = "1.11.0", features = ["derive"] } getrandom = { version = "0.1", features = ["dummy"] } num-derive = "0.3" num-traits = "0.2" -solana-program-runtime = { path = "../../program-runtime", version = "=1.11.6" } -solana-sdk = { path = "../../sdk", version = "=1.11.6" } -solana-zk-token-sdk = { path = "../../zk-token-sdk", version = "=1.11.6" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.11.7" } +solana-sdk = { path = "../../sdk", version = "=1.11.7" } +solana-zk-token-sdk = { path = "../../zk-token-sdk", version = "=1.11.7" } diff --git a/rayon-threadlimit/Cargo.toml b/rayon-threadlimit/Cargo.toml index 7d14d47379c5fa..1b3514b8e9c379 100644 --- a/rayon-threadlimit/Cargo.toml +++ b/rayon-threadlimit/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-rayon-threadlimit" -version = "1.11.6" +version = "1.11.7" description = "solana-rayon-threadlimit" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-rayon-threadlimit" diff --git a/rbpf-cli/Cargo.toml b/rbpf-cli/Cargo.toml index 51227be62e1609..e7dc32fcb52357 100644 --- a/rbpf-cli/Cargo.toml +++ b/rbpf-cli/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "rbpf-cli" -version = "1.11.6" +version = "1.11.7" description = "CLI to test and analyze eBPF programs" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/rbpf" @@ -13,8 +13,8 @@ publish = false clap = { version = "3.1.5", features = ["cargo"] } serde = "1.0.138" serde_json = "1.0.81" -solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.11.6" } -solana-logger = { path = "../logger", version = "=1.11.6" } -solana-program-runtime = { path = "../program-runtime", version = "=1.11.6" } -solana-sdk = { path = "../sdk", version = "=1.11.6" } +solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.11.7" } +solana-logger = { path = "../logger", version = "=1.11.7" } +solana-program-runtime = { path = "../program-runtime", version = "=1.11.7" } +solana-sdk = { path = "../sdk", version = "=1.11.7" } solana_rbpf = "=0.2.31" diff --git a/remote-wallet/Cargo.toml b/remote-wallet/Cargo.toml index 5552ffcde9e580..887a1b25804614 100644 --- a/remote-wallet/Cargo.toml +++ b/remote-wallet/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-remote-wallet" description = "Blockchain, Rebuilt for Scale" -version = "1.11.6" +version = "1.11.7" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -19,7 +19,7 @@ num-traits = { version = "0.2" } parking_lot = "0.12" qstring = "0.7.2" semver = "1.0" -solana-sdk = { path = "../sdk", version = "=1.11.6" } +solana-sdk = { path = "../sdk", version = "=1.11.7" } thiserror = "1.0" uriparse = "0.6.4" diff --git a/rpc-test/Cargo.toml b/rpc-test/Cargo.toml index 9110fb25521447..2435a55c391449 100644 --- a/rpc-test/Cargo.toml +++ b/rpc-test/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-rpc-test" -version = "1.11.6" +version = "1.11.7" description = "Solana RPC Test" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -19,17 +19,17 @@ log = "0.4.17" reqwest = { version = "0.11.11", default-features = false, features = ["blocking", "brotli", "deflate", "gzip", "rustls-tls", "json"] } serde = "1.0.138" serde_json = "1.0.81" -solana-account-decoder = { path = "../account-decoder", version = "=1.11.6" } -solana-client = { path = "../client", version = "=1.11.6" } -solana-rpc = { path = "../rpc", version = "=1.11.6" } -solana-sdk = { path = "../sdk", version = "=1.11.6" } -solana-streamer = { path = "../streamer", version = "=1.11.6" } -solana-test-validator = { path = "../test-validator", version = "=1.11.6" } -solana-transaction-status = { path = "../transaction-status", version = "=1.11.6" } +solana-account-decoder = { path = "../account-decoder", version = "=1.11.7" } +solana-client = { path = "../client", version = "=1.11.7" } +solana-rpc = { path = "../rpc", version = "=1.11.7" } +solana-sdk = { path = "../sdk", version = "=1.11.7" } +solana-streamer = { path = "../streamer", version = "=1.11.7" } +solana-test-validator = { path = "../test-validator", version = "=1.11.7" } +solana-transaction-status = { path = "../transaction-status", version = "=1.11.7" } tokio = { version = "~1.14.1", features = ["full"] } [dev-dependencies] -solana-logger = { path = "../logger", version = "=1.11.6" } +solana-logger = { path = "../logger", version = "=1.11.7" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/rpc/Cargo.toml b/rpc/Cargo.toml index b0b67faf2f60c2..6f05c1bd08e1b1 100644 --- a/rpc/Cargo.toml +++ b/rpc/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-rpc" -version = "1.11.6" +version = "1.11.7" description = "Solana RPC" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -29,26 +29,26 @@ serde = "1.0.138" serde_derive = "1.0.103" serde_json = "1.0.81" soketto = "0.7" -solana-account-decoder = { path = "../account-decoder", version = "=1.11.6" } -solana-client = { path = "../client", version = "=1.11.6" } -solana-entry = { path = "../entry", version = "=1.11.6" } -solana-faucet = { path = "../faucet", version = "=1.11.6" } -solana-gossip = { path = "../gossip", version = "=1.11.6" } -solana-ledger = { path = "../ledger", version = "=1.11.6" } -solana-measure = { path = "../measure", version = "=1.11.6" } -solana-metrics = { path = "../metrics", version = "=1.11.6" } -solana-perf = { path = "../perf", version = "=1.11.6" } -solana-poh = { path = "../poh", version = "=1.11.6" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.11.6" } -solana-runtime = { path = "../runtime", version = "=1.11.6" } -solana-sdk = { path = "../sdk", version = "=1.11.6" } -solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.11.6" } -solana-stake-program = { path = "../programs/stake", version = "=1.11.6" } -solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.11.6" } -solana-streamer = { path = "../streamer", version = "=1.11.6" } -solana-transaction-status = { path = "../transaction-status", version = "=1.11.6" } -solana-version = { path = "../version", version = "=1.11.6" } -solana-vote-program = { path = "../programs/vote", version = "=1.11.6" } +solana-account-decoder = { path = "../account-decoder", version = "=1.11.7" } +solana-client = { path = "../client", version = "=1.11.7" } +solana-entry = { path = "../entry", version = "=1.11.7" } +solana-faucet = { path = "../faucet", version = "=1.11.7" } +solana-gossip = { path = "../gossip", version = "=1.11.7" } +solana-ledger = { path = "../ledger", version = "=1.11.7" } +solana-measure = { path = "../measure", version = "=1.11.7" } +solana-metrics = { path = "../metrics", version = "=1.11.7" } +solana-perf = { path = "../perf", version = "=1.11.7" } +solana-poh = { path = "../poh", version = "=1.11.7" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.11.7" } +solana-runtime = { path = "../runtime", version = "=1.11.7" } +solana-sdk = { path = "../sdk", version = "=1.11.7" } +solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.11.7" } +solana-stake-program = { path = "../programs/stake", version = "=1.11.7" } +solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.11.7" } +solana-streamer = { path = "../streamer", version = "=1.11.7" } +solana-transaction-status = { path = "../transaction-status", version = "=1.11.7" } +solana-version = { path = "../version", version = "=1.11.7" } +solana-vote-program = { path = "../programs/vote", version = "=1.11.7" } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } spl-token-2022 = { version = "=0.4.2", features = ["no-entrypoint"] } stream-cancel = "0.8.1" @@ -58,9 +58,9 @@ tokio-util = { version = "0.6", features = ["codec", "compat"] } [dev-dependencies] serial_test = "0.8.0" -solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.11.6" } -solana-net-utils = { path = "../net-utils", version = "=1.11.6" } -solana-stake-program = { path = "../programs/stake", version = "=1.11.6" } +solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.11.7" } +solana-net-utils = { path = "../net-utils", version = "=1.11.7" } +solana-stake-program = { path = "../programs/stake", version = "=1.11.7" } symlink = "0.1.0" [lib] diff --git a/runtime/Cargo.toml b/runtime/Cargo.toml index 5085718e12fc00..f9d7d56c82b778 100644 --- a/runtime/Cargo.toml +++ b/runtime/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-runtime" -version = "1.11.6" +version = "1.11.7" description = "Solana runtime" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -39,21 +39,21 @@ rayon = "1.5.3" regex = "1.5.6" serde = { version = "1.0.138", features = ["rc"] } serde_derive = "1.0.103" -solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.11.6" } -solana-bucket-map = { path = "../bucket_map", version = "=1.11.6" } -solana-compute-budget-program = { path = "../programs/compute-budget", version = "=1.11.6" } -solana-config-program = { path = "../programs/config", version = "=1.11.6" } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.11.6" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.11.6" } -solana-measure = { path = "../measure", version = "=1.11.6" } -solana-metrics = { path = "../metrics", version = "=1.11.6" } -solana-program-runtime = { path = "../program-runtime", version = "=1.11.6" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.11.6" } -solana-sdk = { path = "../sdk", version = "=1.11.6" } -solana-stake-program = { path = "../programs/stake", version = "=1.11.6" } -solana-vote-program = { path = "../programs/vote", version = "=1.11.6" } -solana-zk-token-proof-program = { path = "../programs/zk-token-proof", version = "=1.11.6" } -solana-zk-token-sdk = { path = "../zk-token-sdk", version = "=1.11.6" } +solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.11.7" } +solana-bucket-map = { path = "../bucket_map", version = "=1.11.7" } +solana-compute-budget-program = { path = "../programs/compute-budget", version = "=1.11.7" } +solana-config-program = { path = "../programs/config", version = "=1.11.7" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.11.7" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.11.7" } +solana-measure = { path = "../measure", version = "=1.11.7" } +solana-metrics = { path = "../metrics", version = "=1.11.7" } +solana-program-runtime = { path = "../program-runtime", version = "=1.11.7" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.11.7" } +solana-sdk = { path = "../sdk", version = "=1.11.7" } +solana-stake-program = { path = "../programs/stake", version = "=1.11.7" } +solana-vote-program = { path = "../programs/vote", version = "=1.11.7" } +solana-zk-token-proof-program = { path = "../programs/zk-token-proof", version = "=1.11.7" } +solana-zk-token-sdk = { path = "../zk-token-sdk", version = "=1.11.7" } strum = { version = "0.24", features = ["derive"] } strum_macros = "0.24" symlink = "0.1.0" @@ -71,7 +71,7 @@ assert_matches = "1.5.0" ed25519-dalek = "=1.0.1" libsecp256k1 = "0.6.0" rand_chacha = "0.2.2" -solana-logger = { path = "../logger", version = "=1.11.6" } +solana-logger = { path = "../logger", version = "=1.11.7" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/runtime/store-tool/Cargo.toml b/runtime/store-tool/Cargo.toml index f5ee2272c45be4..216313f836bdc8 100644 --- a/runtime/store-tool/Cargo.toml +++ b/runtime/store-tool/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-store-tool" description = "Tool to inspect append vecs" -version = "1.11.6" +version = "1.11.7" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -12,9 +12,9 @@ publish = false [dependencies] clap = "2.33.1" log = { version = "0.4.17" } -solana-logger = { path = "../../logger", version = "=1.11.6" } -solana-runtime = { path = "..", version = "=1.11.6" } -solana-version = { path = "../../version", version = "=1.11.6" } +solana-logger = { path = "../../logger", version = "=1.11.7" } +solana-runtime = { path = "..", version = "=1.11.7" } +solana-version = { path = "../../version", version = "=1.11.7" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/sdk/Cargo.toml b/sdk/Cargo.toml index 3244dde28c473f..97b921bcf250eb 100644 --- a/sdk/Cargo.toml +++ b/sdk/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-sdk" -version = "1.11.6" +version = "1.11.7" description = "Solana SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -71,11 +71,11 @@ serde_derive = "1.0.103" serde_json = { version = "1.0.81", optional = true } sha2 = "0.10.2" sha3 = { version = "0.10.1", optional = true } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.11.6" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.11.6" } -solana-logger = { path = "../logger", version = "=1.11.6", optional = true } -solana-program = { path = "program", version = "=1.11.6" } -solana-sdk-macro = { path = "macro", version = "=1.11.6" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.11.7" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.11.7" } +solana-logger = { path = "../logger", version = "=1.11.7", optional = true } +solana-program = { path = "program", version = "=1.11.7" } +solana-sdk-macro = { path = "macro", version = "=1.11.7" } thiserror = "1.0" uriparse = "0.6.4" wasm-bindgen = "0.2" diff --git a/sdk/cargo-build-bpf/Cargo.toml b/sdk/cargo-build-bpf/Cargo.toml index 41bc61945c363d..ffe25410a40e7d 100644 --- a/sdk/cargo-build-bpf/Cargo.toml +++ b/sdk/cargo-build-bpf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-cargo-build-bpf" -version = "1.11.6" +version = "1.11.7" description = "Compile a local package and all of its dependencies using the Solana SBF SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,7 +12,7 @@ publish = false [dependencies] cargo_metadata = "0.15.0" clap = { version = "3.1.5", features = ["cargo", "env"] } -solana-sdk = { path = "..", version = "=1.11.6" } +solana-sdk = { path = "..", version = "=1.11.7" } [features] program = [] diff --git a/sdk/cargo-build-sbf/Cargo.toml b/sdk/cargo-build-sbf/Cargo.toml index 86e3446267de65..851cebb14493de 100644 --- a/sdk/cargo-build-sbf/Cargo.toml +++ b/sdk/cargo-build-sbf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-cargo-build-sbf" -version = "1.11.6" +version = "1.11.7" description = "Compile a local package and all of its dependencies using the Solana SBF SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -15,9 +15,9 @@ cargo_metadata = "0.15.0" clap = { version = "3.1.5", features = ["cargo", "env"] } log = { version = "0.4.14", features = ["std"] } regex = "1.5.6" -solana-download-utils = { path = "../../download-utils", version = "=1.11.6" } -solana-logger = { path = "../../logger", version = "=1.11.6" } -solana-sdk = { path = "..", version = "=1.11.6" } +solana-download-utils = { path = "../../download-utils", version = "=1.11.7" } +solana-logger = { path = "../../logger", version = "=1.11.7" } +solana-sdk = { path = "..", version = "=1.11.7" } tar = "0.4.38" [dev-dependencies] diff --git a/sdk/cargo-build-sbf/tests/crates/fail/Cargo.toml b/sdk/cargo-build-sbf/tests/crates/fail/Cargo.toml index 82da7b8f9e63b2..a767d1f32616d4 100644 --- a/sdk/cargo-build-sbf/tests/crates/fail/Cargo.toml +++ b/sdk/cargo-build-sbf/tests/crates/fail/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "fail" -version = "1.11.6" +version = "1.11.7" description = "Solana SBF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ edition = "2021" publish = false [dependencies] -solana-program = { path = "../../../../program", version = "=1.11.6" } +solana-program = { path = "../../../../program", version = "=1.11.7" } [lib] crate-type = ["cdylib"] diff --git a/sdk/cargo-build-sbf/tests/crates/noop/Cargo.toml b/sdk/cargo-build-sbf/tests/crates/noop/Cargo.toml index 5e41eafed0baa2..6131ee692550d7 100644 --- a/sdk/cargo-build-sbf/tests/crates/noop/Cargo.toml +++ b/sdk/cargo-build-sbf/tests/crates/noop/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "noop" -version = "1.11.6" +version = "1.11.7" description = "Solana SBF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ edition = "2021" publish = false [dependencies] -solana-program = { path = "../../../../program", version = "=1.11.6" } +solana-program = { path = "../../../../program", version = "=1.11.7" } [lib] crate-type = ["cdylib"] diff --git a/sdk/cargo-test-bpf/Cargo.toml b/sdk/cargo-test-bpf/Cargo.toml index eeea87fc84860a..1a8cb3331e0d57 100644 --- a/sdk/cargo-test-bpf/Cargo.toml +++ b/sdk/cargo-test-bpf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-cargo-test-bpf" -version = "1.11.6" +version = "1.11.7" description = "Execute all unit and integration tests after building with the Solana SBF SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/sdk/cargo-test-sbf/Cargo.toml b/sdk/cargo-test-sbf/Cargo.toml index e156c82799f810..b6460758b732b8 100644 --- a/sdk/cargo-test-sbf/Cargo.toml +++ b/sdk/cargo-test-sbf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-cargo-test-sbf" -version = "1.11.6" +version = "1.11.7" description = "Execute all unit and integration tests after building with the Solana SBF SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/sdk/gen-headers/Cargo.toml b/sdk/gen-headers/Cargo.toml index 751f305a4ddfa1..5693cacb857e16 100644 --- a/sdk/gen-headers/Cargo.toml +++ b/sdk/gen-headers/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "gen-headers" -version = "1.11.6" +version = "1.11.7" edition = "2021" license = "Apache-2.0" publish = false diff --git a/sdk/macro/Cargo.toml b/sdk/macro/Cargo.toml index 03769729c98873..cb87a4c7c3ec07 100644 --- a/sdk/macro/Cargo.toml +++ b/sdk/macro/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-sdk-macro" -version = "1.11.6" +version = "1.11.7" description = "Solana SDK Macro" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/sdk/program/Cargo.toml b/sdk/program/Cargo.toml index fd359f7dc7d167..852c8387440e29 100644 --- a/sdk/program/Cargo.toml +++ b/sdk/program/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-program" -version = "1.11.6" +version = "1.11.7" description = "Solana Program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -31,9 +31,9 @@ serde_derive = "1.0" serde_json = "1.0" sha2 = "0.10.0" sha3 = "0.10.0" -solana-frozen-abi = { path = "../../frozen-abi", version = "=1.11.6" } -solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.11.6" } -solana-sdk-macro = { path = "../macro", version = "=1.11.6" } +solana-frozen-abi = { path = "../../frozen-abi", version = "=1.11.7" } +solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.11.7" } +solana-sdk-macro = { path = "../macro", version = "=1.11.7" } thiserror = "1.0" [target.'cfg(not(target_os = "solana"))'.dependencies] @@ -50,7 +50,7 @@ wasm-bindgen = "0.2" zeroize = { version = "1.3", default-features = true, features = ["zeroize_derive"] } [target.'cfg(not(target_os = "solana"))'.dev-dependencies] -solana-logger = { path = "../../logger", version = "=1.11.6" } +solana-logger = { path = "../../logger", version = "=1.11.7" } [target.'cfg(target_arch = "wasm32")'.dependencies] console_error_panic_hook = "0.1.7" diff --git a/send-transaction-service/Cargo.toml b/send-transaction-service/Cargo.toml index 46991efe1e0df7..238c2cea36bfd3 100644 --- a/send-transaction-service/Cargo.toml +++ b/send-transaction-service/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-send-transaction-service" -version = "1.11.6" +version = "1.11.7" description = "Solana send transaction service" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,14 +12,14 @@ edition = "2021" [dependencies] crossbeam-channel = "0.5" log = "0.4.17" -solana-client = { path = "../client", version = "=1.11.6" } -solana-measure = { path = "../measure", version = "=1.11.6" } -solana-metrics = { path = "../metrics", version = "=1.11.6" } -solana-runtime = { path = "../runtime", version = "=1.11.6" } -solana-sdk = { path = "../sdk", version = "=1.11.6" } +solana-client = { path = "../client", version = "=1.11.7" } +solana-measure = { path = "../measure", version = "=1.11.7" } +solana-metrics = { path = "../metrics", version = "=1.11.7" } +solana-runtime = { path = "../runtime", version = "=1.11.7" } +solana-sdk = { path = "../sdk", version = "=1.11.7" } [dev-dependencies] -solana-logger = { path = "../logger", version = "=1.11.6" } +solana-logger = { path = "../logger", version = "=1.11.7" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/stake-accounts/Cargo.toml b/stake-accounts/Cargo.toml index 8162ca656698f1..5697e846c62f87 100644 --- a/stake-accounts/Cargo.toml +++ b/stake-accounts/Cargo.toml @@ -3,7 +3,7 @@ name = "solana-stake-accounts" description = "Blockchain, Rebuilt for Scale" authors = ["Solana Maintainers "] edition = "2021" -version = "1.11.6" +version = "1.11.7" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -11,15 +11,15 @@ documentation = "https://docs.rs/solana-stake-accounts" [dependencies] clap = "2.33.1" -solana-clap-utils = { path = "../clap-utils", version = "=1.11.6" } -solana-cli-config = { path = "../cli-config", version = "=1.11.6" } -solana-client = { path = "../client", version = "=1.11.6" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.11.6" } -solana-sdk = { path = "../sdk", version = "=1.11.6" } -solana-stake-program = { path = "../programs/stake", version = "=1.11.6" } +solana-clap-utils = { path = "../clap-utils", version = "=1.11.7" } +solana-cli-config = { path = "../cli-config", version = "=1.11.7" } +solana-client = { path = "../client", version = "=1.11.7" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.11.7" } +solana-sdk = { path = "../sdk", version = "=1.11.7" } +solana-stake-program = { path = "../programs/stake", version = "=1.11.7" } [dev-dependencies] -solana-runtime = { path = "../runtime", version = "=1.11.6" } +solana-runtime = { path = "../runtime", version = "=1.11.7" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/storage-bigtable/Cargo.toml b/storage-bigtable/Cargo.toml index e3b8205f98e38e..231a6ef695d4a3 100644 --- a/storage-bigtable/Cargo.toml +++ b/storage-bigtable/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-storage-bigtable" -version = "1.11.6" +version = "1.11.7" description = "Solana Storage BigTable" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -27,10 +27,10 @@ prost-types = "0.11.0" serde = "1.0.138" serde_derive = "1.0.103" smpl_jwt = "0.7.1" -solana-metrics = { path = "../metrics", version = "=1.11.6" } -solana-sdk = { path = "../sdk", version = "=1.11.6" } -solana-storage-proto = { path = "../storage-proto", version = "=1.11.6" } -solana-transaction-status = { path = "../transaction-status", version = "=1.11.6" } +solana-metrics = { path = "../metrics", version = "=1.11.7" } +solana-sdk = { path = "../sdk", version = "=1.11.7" } +solana-storage-proto = { path = "../storage-proto", version = "=1.11.7" } +solana-transaction-status = { path = "../transaction-status", version = "=1.11.7" } thiserror = "1.0" tokio = "1" tonic = { version = "0.8.0", features = ["tls", "transport"] } diff --git a/storage-bigtable/build-proto/Cargo.lock b/storage-bigtable/build-proto/Cargo.lock index a916ff8462bbc0..589dd2ab1eff16 100644 --- a/storage-bigtable/build-proto/Cargo.lock +++ b/storage-bigtable/build-proto/Cargo.lock @@ -219,7 +219,7 @@ dependencies = [ [[package]] name = "proto" -version = "1.11.6" +version = "1.11.7" dependencies = [ "protobuf-src", "tonic-build", diff --git a/storage-bigtable/build-proto/Cargo.toml b/storage-bigtable/build-proto/Cargo.toml index 4e32ff93c21e81..69987c1d58411c 100644 --- a/storage-bigtable/build-proto/Cargo.toml +++ b/storage-bigtable/build-proto/Cargo.toml @@ -7,7 +7,7 @@ license = "Apache-2.0" name = "proto" publish = false repository = "https://github.com/solana-labs/solana" -version = "1.11.6" +version = "1.11.7" [workspace] diff --git a/storage-proto/Cargo.toml b/storage-proto/Cargo.toml index 72c67275498aec..5b44205470363d 100644 --- a/storage-proto/Cargo.toml +++ b/storage-proto/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-storage-proto" -version = "1.11.6" +version = "1.11.7" description = "Solana Storage Protobuf Definitions" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,9 +14,9 @@ bincode = "1.3.3" bs58 = "0.4.0" prost = "0.11.0" serde = "1.0.138" -solana-account-decoder = { path = "../account-decoder", version = "=1.11.6" } -solana-sdk = { path = "../sdk", version = "=1.11.6" } -solana-transaction-status = { path = "../transaction-status", version = "=1.11.6" } +solana-account-decoder = { path = "../account-decoder", version = "=1.11.7" } +solana-sdk = { path = "../sdk", version = "=1.11.7" } +solana-transaction-status = { path = "../transaction-status", version = "=1.11.7" } [dev-dependencies] enum-iterator = "0.8.1" diff --git a/streamer/Cargo.toml b/streamer/Cargo.toml index a788d7cfa4b8f5..7fecc1e2ac39a0 100644 --- a/streamer/Cargo.toml +++ b/streamer/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-streamer" -version = "1.11.6" +version = "1.11.7" description = "Solana Streamer" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -25,15 +25,15 @@ quinn = "0.8.3" rand = "0.7.0" rcgen = "0.9.2" rustls = { version = "0.20.6", features = ["dangerous_configuration"] } -solana-metrics = { path = "../metrics", version = "=1.11.6" } -solana-perf = { path = "../perf", version = "=1.11.6" } -solana-sdk = { path = "../sdk", version = "=1.11.6" } +solana-metrics = { path = "../metrics", version = "=1.11.7" } +solana-perf = { path = "../perf", version = "=1.11.7" } +solana-sdk = { path = "../sdk", version = "=1.11.7" } thiserror = "1.0" tokio = { version = "1", features = ["full"] } x509-parser = "0.14.0" [dev-dependencies] -solana-logger = { path = "../logger", version = "=1.11.6" } +solana-logger = { path = "../logger", version = "=1.11.7" } [lib] crate-type = ["lib"] diff --git a/sys-tuner/Cargo.toml b/sys-tuner/Cargo.toml index af47613a7f9d80..b9cdd719cf2c82 100644 --- a/sys-tuner/Cargo.toml +++ b/sys-tuner/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-sys-tuner" description = "The solana cluster system tuner daemon" -version = "1.11.6" +version = "1.11.7" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,8 +14,8 @@ publish = true clap = "2.33.1" libc = "0.2.126" log = "0.4.17" -solana-logger = { path = "../logger", version = "=1.11.6" } -solana-version = { path = "../version", version = "=1.11.6" } +solana-logger = { path = "../logger", version = "=1.11.7" } +solana-version = { path = "../version", version = "=1.11.7" } [target."cfg(unix)".dependencies] unix_socket2 = "0.5.4" diff --git a/test-validator/Cargo.toml b/test-validator/Cargo.toml index 09aaf5566e9045..18fd99d170b2c7 100644 --- a/test-validator/Cargo.toml +++ b/test-validator/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "solana-test-validator" description = "Blockchain, Rebuilt for Scale" -version = "1.11.6" +version = "1.11.7" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-test-validator" readme = "../README.md" @@ -15,19 +15,19 @@ base64 = "0.13.0" log = "0.4.17" serde_derive = "1.0.103" serde_json = "1.0.81" -solana-cli-output = { path = "../cli-output", version = "=1.11.6" } -solana-client = { path = "../client", version = "=1.11.6" } -solana-core = { path = "../core", version = "=1.11.6" } -solana-gossip = { path = "../gossip", version = "=1.11.6" } -solana-ledger = { path = "../ledger", version = "=1.11.6" } -solana-logger = { path = "../logger", version = "=1.11.6" } -solana-net-utils = { path = "../net-utils", version = "=1.11.6" } -solana-program-runtime = { path = "../program-runtime", version = "=1.11.6" } -solana-program-test = { path = "../program-test", version = "=1.11.6" } -solana-rpc = { path = "../rpc", version = "=1.11.6" } -solana-runtime = { path = "../runtime", version = "=1.11.6" } -solana-sdk = { path = "../sdk", version = "=1.11.6" } -solana-streamer = { path = "../streamer", version = "=1.11.6" } +solana-cli-output = { path = "../cli-output", version = "=1.11.7" } +solana-client = { path = "../client", version = "=1.11.7" } +solana-core = { path = "../core", version = "=1.11.7" } +solana-gossip = { path = "../gossip", version = "=1.11.7" } +solana-ledger = { path = "../ledger", version = "=1.11.7" } +solana-logger = { path = "../logger", version = "=1.11.7" } +solana-net-utils = { path = "../net-utils", version = "=1.11.7" } +solana-program-runtime = { path = "../program-runtime", version = "=1.11.7" } +solana-program-test = { path = "../program-test", version = "=1.11.7" } +solana-rpc = { path = "../rpc", version = "=1.11.7" } +solana-runtime = { path = "../runtime", version = "=1.11.7" } +solana-sdk = { path = "../sdk", version = "=1.11.7" } +solana-streamer = { path = "../streamer", version = "=1.11.7" } tokio = { version = "1", features = ["full"] } [package.metadata.docs.rs] diff --git a/tokens/Cargo.toml b/tokens/Cargo.toml index 90d43d54ec7082..59378a44e26a1b 100644 --- a/tokens/Cargo.toml +++ b/tokens/Cargo.toml @@ -3,7 +3,7 @@ name = "solana-tokens" description = "Blockchain, Rebuilt for Scale" authors = ["Solana Maintainers "] edition = "2021" -version = "1.11.6" +version = "1.11.7" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -19,14 +19,14 @@ indexmap = "1.9.1" indicatif = "0.16.2" pickledb = "0.4.1" serde = { version = "1.0", features = ["derive"] } -solana-account-decoder = { path = "../account-decoder", version = "=1.11.6" } -solana-clap-utils = { path = "../clap-utils", version = "=1.11.6" } -solana-cli-config = { path = "../cli-config", version = "=1.11.6" } -solana-client = { path = "../client", version = "=1.11.6" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.11.6" } -solana-sdk = { path = "../sdk", version = "=1.11.6" } -solana-transaction-status = { path = "../transaction-status", version = "=1.11.6" } -solana-version = { path = "../version", version = "=1.11.6" } +solana-account-decoder = { path = "../account-decoder", version = "=1.11.7" } +solana-clap-utils = { path = "../clap-utils", version = "=1.11.7" } +solana-cli-config = { path = "../cli-config", version = "=1.11.7" } +solana-client = { path = "../client", version = "=1.11.7" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.11.7" } +solana-sdk = { path = "../sdk", version = "=1.11.7" } +solana-transaction-status = { path = "../transaction-status", version = "=1.11.7" } +solana-version = { path = "../version", version = "=1.11.7" } spl-associated-token-account = { version = "=1.1.1" } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } tempfile = "3.3.0" @@ -34,6 +34,6 @@ thiserror = "1.0" [dev-dependencies] bincode = "1.3.3" -solana-logger = { path = "../logger", version = "=1.11.6" } -solana-streamer = { path = "../streamer", version = "=1.11.6" } -solana-test-validator = { path = "../test-validator", version = "=1.11.6" } +solana-logger = { path = "../logger", version = "=1.11.7" } +solana-streamer = { path = "../streamer", version = "=1.11.7" } +solana-test-validator = { path = "../test-validator", version = "=1.11.7" } diff --git a/transaction-dos/Cargo.toml b/transaction-dos/Cargo.toml index 35eceed0950317..545e0eab10c586 100644 --- a/transaction-dos/Cargo.toml +++ b/transaction-dos/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-transaction-dos" -version = "1.11.6" +version = "1.11.7" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,23 +14,23 @@ clap = "2.33.1" log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" -solana-clap-utils = { path = "../clap-utils", version = "=1.11.6" } -solana-cli = { path = "../cli", version = "=1.11.6" } -solana-client = { path = "../client", version = "=1.11.6" } -solana-core = { path = "../core", version = "=1.11.6" } -solana-faucet = { path = "../faucet", version = "=1.11.6" } -solana-gossip = { path = "../gossip", version = "=1.11.6" } -solana-logger = { path = "../logger", version = "=1.11.6" } -solana-measure = { path = "../measure", version = "=1.11.6" } -solana-net-utils = { path = "../net-utils", version = "=1.11.6" } -solana-runtime = { path = "../runtime", version = "=1.11.6" } -solana-sdk = { path = "../sdk", version = "=1.11.6" } -solana-streamer = { path = "../streamer", version = "=1.11.6" } -solana-transaction-status = { path = "../transaction-status", version = "=1.11.6" } -solana-version = { path = "../version", version = "=1.11.6" } +solana-clap-utils = { path = "../clap-utils", version = "=1.11.7" } +solana-cli = { path = "../cli", version = "=1.11.7" } +solana-client = { path = "../client", version = "=1.11.7" } +solana-core = { path = "../core", version = "=1.11.7" } +solana-faucet = { path = "../faucet", version = "=1.11.7" } +solana-gossip = { path = "../gossip", version = "=1.11.7" } +solana-logger = { path = "../logger", version = "=1.11.7" } +solana-measure = { path = "../measure", version = "=1.11.7" } +solana-net-utils = { path = "../net-utils", version = "=1.11.7" } +solana-runtime = { path = "../runtime", version = "=1.11.7" } +solana-sdk = { path = "../sdk", version = "=1.11.7" } +solana-streamer = { path = "../streamer", version = "=1.11.7" } +solana-transaction-status = { path = "../transaction-status", version = "=1.11.7" } +solana-version = { path = "../version", version = "=1.11.7" } [dev-dependencies] -solana-local-cluster = { path = "../local-cluster", version = "=1.11.6" } +solana-local-cluster = { path = "../local-cluster", version = "=1.11.7" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/transaction-status/Cargo.toml b/transaction-status/Cargo.toml index b28a4cbbbd0dac..9c5a5b1f908d0d 100644 --- a/transaction-status/Cargo.toml +++ b/transaction-status/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-transaction-status" -version = "1.11.6" +version = "1.11.7" description = "Solana transaction status types" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -20,11 +20,11 @@ log = "0.4.17" serde = "1.0.138" serde_derive = "1.0.103" serde_json = "1.0.81" -solana-account-decoder = { path = "../account-decoder", version = "=1.11.6" } -solana-measure = { path = "../measure", version = "=1.11.6" } -solana-metrics = { path = "../metrics", version = "=1.11.6" } -solana-sdk = { path = "../sdk", version = "=1.11.6" } -solana-vote-program = { path = "../programs/vote", version = "=1.11.6" } +solana-account-decoder = { path = "../account-decoder", version = "=1.11.7" } +solana-measure = { path = "../measure", version = "=1.11.7" } +solana-metrics = { path = "../metrics", version = "=1.11.7" } +solana-sdk = { path = "../sdk", version = "=1.11.7" } +solana-vote-program = { path = "../programs/vote", version = "=1.11.7" } spl-associated-token-account = { version = "=1.1.1", features = ["no-entrypoint"] } spl-memo = { version = "=3.0.1", features = ["no-entrypoint"] } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } diff --git a/upload-perf/Cargo.toml b/upload-perf/Cargo.toml index 84134971b09499..11adcc4efdb668 100644 --- a/upload-perf/Cargo.toml +++ b/upload-perf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-upload-perf" -version = "1.11.6" +version = "1.11.7" description = "Metrics Upload Utility" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -11,7 +11,7 @@ publish = false [dependencies] serde_json = "1.0.81" -solana-metrics = { path = "../metrics", version = "=1.11.6" } +solana-metrics = { path = "../metrics", version = "=1.11.7" } [[bin]] name = "solana-upload-perf" diff --git a/validator/Cargo.toml b/validator/Cargo.toml index ddbe83c0f6d9ce..935e62f4b8c95a 100644 --- a/validator/Cargo.toml +++ b/validator/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-validator" description = "Blockchain, Rebuilt for Scale" -version = "1.11.6" +version = "1.11.7" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -28,30 +28,30 @@ num_cpus = "1.13.1" rand = "0.7.0" serde = "1.0.138" serde_json = "1.0.81" -solana-clap-utils = { path = "../clap-utils", version = "=1.11.6" } -solana-cli-config = { path = "../cli-config", version = "=1.11.6" } -solana-client = { path = "../client", version = "=1.11.6" } -solana-core = { path = "../core", version = "=1.11.6" } -solana-download-utils = { path = "../download-utils", version = "=1.11.6" } -solana-entry = { path = "../entry", version = "=1.11.6" } -solana-faucet = { path = "../faucet", version = "=1.11.6" } -solana-genesis-utils = { path = "../genesis-utils", version = "=1.11.6" } -solana-gossip = { path = "../gossip", version = "=1.11.6" } -solana-ledger = { path = "../ledger", version = "=1.11.6" } -solana-logger = { path = "../logger", version = "=1.11.6" } -solana-metrics = { path = "../metrics", version = "=1.11.6" } -solana-net-utils = { path = "../net-utils", version = "=1.11.6" } -solana-perf = { path = "../perf", version = "=1.11.6" } -solana-poh = { path = "../poh", version = "=1.11.6" } -solana-rpc = { path = "../rpc", version = "=1.11.6" } -solana-runtime = { path = "../runtime", version = "=1.11.6" } -solana-sdk = { path = "../sdk", version = "=1.11.6" } -solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.11.6" } -solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.11.6" } -solana-streamer = { path = "../streamer", version = "=1.11.6" } -solana-test-validator = { path = "../test-validator", version = "=1.11.6" } -solana-version = { path = "../version", version = "=1.11.6" } -solana-vote-program = { path = "../programs/vote", version = "=1.11.6" } +solana-clap-utils = { path = "../clap-utils", version = "=1.11.7" } +solana-cli-config = { path = "../cli-config", version = "=1.11.7" } +solana-client = { path = "../client", version = "=1.11.7" } +solana-core = { path = "../core", version = "=1.11.7" } +solana-download-utils = { path = "../download-utils", version = "=1.11.7" } +solana-entry = { path = "../entry", version = "=1.11.7" } +solana-faucet = { path = "../faucet", version = "=1.11.7" } +solana-genesis-utils = { path = "../genesis-utils", version = "=1.11.7" } +solana-gossip = { path = "../gossip", version = "=1.11.7" } +solana-ledger = { path = "../ledger", version = "=1.11.7" } +solana-logger = { path = "../logger", version = "=1.11.7" } +solana-metrics = { path = "../metrics", version = "=1.11.7" } +solana-net-utils = { path = "../net-utils", version = "=1.11.7" } +solana-perf = { path = "../perf", version = "=1.11.7" } +solana-poh = { path = "../poh", version = "=1.11.7" } +solana-rpc = { path = "../rpc", version = "=1.11.7" } +solana-runtime = { path = "../runtime", version = "=1.11.7" } +solana-sdk = { path = "../sdk", version = "=1.11.7" } +solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.11.7" } +solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.11.7" } +solana-streamer = { path = "../streamer", version = "=1.11.7" } +solana-test-validator = { path = "../test-validator", version = "=1.11.7" } +solana-version = { path = "../version", version = "=1.11.7" } +solana-vote-program = { path = "../programs/vote", version = "=1.11.7" } symlink = "0.1.0" [target.'cfg(not(target_env = "msvc"))'.dependencies] diff --git a/version/Cargo.toml b/version/Cargo.toml index e7667f4df1815e..385176928ba6c4 100644 --- a/version/Cargo.toml +++ b/version/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-version" -version = "1.11.6" +version = "1.11.7" description = "Solana Version" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,9 +14,9 @@ log = "0.4.17" semver = "1.0.10" serde = "1.0.138" serde_derive = "1.0.103" -solana-frozen-abi = { path = "../frozen-abi", version = "=1.11.6" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.11.6" } -solana-sdk = { path = "../sdk", version = "=1.11.6" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.11.7" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.11.7" } +solana-sdk = { path = "../sdk", version = "=1.11.7" } [lib] name = "solana_version" diff --git a/watchtower/Cargo.toml b/watchtower/Cargo.toml index fd783a30c0a9d6..d985eb6dcf8c1a 100644 --- a/watchtower/Cargo.toml +++ b/watchtower/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-watchtower" description = "Blockchain, Rebuilt for Scale" -version = "1.11.6" +version = "1.11.7" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -13,15 +13,15 @@ documentation = "https://docs.rs/solana-watchtower" clap = "2.33.1" humantime = "2.0.1" log = "0.4.17" -solana-clap-utils = { path = "../clap-utils", version = "=1.11.6" } -solana-cli-config = { path = "../cli-config", version = "=1.11.6" } -solana-cli-output = { path = "../cli-output", version = "=1.11.6" } -solana-client = { path = "../client", version = "=1.11.6" } -solana-logger = { path = "../logger", version = "=1.11.6" } -solana-metrics = { path = "../metrics", version = "=1.11.6" } -solana-notifier = { path = "../notifier", version = "=1.11.6" } -solana-sdk = { path = "../sdk", version = "=1.11.6" } -solana-version = { path = "../version", version = "=1.11.6" } +solana-clap-utils = { path = "../clap-utils", version = "=1.11.7" } +solana-cli-config = { path = "../cli-config", version = "=1.11.7" } +solana-cli-output = { path = "../cli-output", version = "=1.11.7" } +solana-client = { path = "../client", version = "=1.11.7" } +solana-logger = { path = "../logger", version = "=1.11.7" } +solana-metrics = { path = "../metrics", version = "=1.11.7" } +solana-notifier = { path = "../notifier", version = "=1.11.7" } +solana-sdk = { path = "../sdk", version = "=1.11.7" } +solana-version = { path = "../version", version = "=1.11.7" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/zk-token-sdk/Cargo.toml b/zk-token-sdk/Cargo.toml index f61e50b2f2dab3..a4082e88a412b4 100644 --- a/zk-token-sdk/Cargo.toml +++ b/zk-token-sdk/Cargo.toml @@ -3,7 +3,7 @@ name = "solana-zk-token-sdk" description = "Solana Zk Token SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" -version = "1.11.6" +version = "1.11.7" license = "Apache-2.0" edition = "2021" @@ -12,7 +12,7 @@ base64 = "0.13" bytemuck = { version = "1.11.0", features = ["derive"] } num-derive = "0.3" num-traits = "0.2" -solana-program = { path = "../sdk/program", version = "=1.11.6" } +solana-program = { path = "../sdk/program", version = "=1.11.7" } [target.'cfg(not(target_os = "solana"))'.dependencies] aes-gcm-siv = "0.10.3" @@ -28,7 +28,7 @@ rand = "0.7" serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" sha3 = "0.9" -solana-sdk = { path = "../sdk", version = "=1.11.6" } +solana-sdk = { path = "../sdk", version = "=1.11.7" } subtle = "2" thiserror = "1.0" zeroize = { version = "1.3", default-features = false, features = ["zeroize_derive"] } From ed38458a11b04d4156a0f686b4fb2272e5dde282 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Wed, 17 Aug 2022 19:02:44 +0000 Subject: [PATCH 034/465] Fix windows build after crossbeam-epoch patch (backport #27052) (#27198) Fix windows build after crossbeam-epoch patch (#27052) (cherry picked from commit 773a4dd4d5a7bdb554ed71400b864f33bbccce75) Co-authored-by: Ryo Onodera --- ci/publish-tarball.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/ci/publish-tarball.sh b/ci/publish-tarball.sh index ef078f6636c0d5..5703b371661ee5 100755 --- a/ci/publish-tarball.sh +++ b/ci/publish-tarball.sh @@ -58,6 +58,8 @@ windows) git config core.symlinks true find . -type l -delete git reset --hard + # patched crossbeam doesn't build on windows + sed -i 's/^crossbeam-epoch/#crossbeam-epoch/' Cargo.toml ) ;; *) From e48d8a95895e3ba2a4a1f2168561eb2b53c773f0 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Wed, 17 Aug 2022 21:06:14 +0000 Subject: [PATCH 035/465] Patch crossbeam-epoch to avoid overhead (backport #26555) (#27197) Patch crossbeam-epoch to avoid overhead (#26555) (cherry picked from commit ad3e10f3bdd61cc53b31ea18880c58075431de6d) Co-authored-by: Ryo Onodera --- Cargo.lock | 3 +-- Cargo.toml | 4 ++++ 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index f20a8693b83961..4c669180b89cd9 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -995,8 +995,7 @@ dependencies = [ [[package]] name = "crossbeam-epoch" version = "0.9.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ec02e091aa634e2c3ada4a392989e7c3116673ef0ac5b72232439094d73b7fd" +source = "git+https://github.com/solana-labs/crossbeam?rev=fd279d707025f0e60951e429bf778b4813d1b6bf#fd279d707025f0e60951e429bf778b4813d1b6bf" dependencies = [ "cfg-if 1.0.0", "crossbeam-utils", diff --git a/Cargo.toml b/Cargo.toml index 9aad90aeb4f175..d54b9f1bec20e7 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -94,3 +94,7 @@ exclude = [ # This prevents a Travis CI error when building for Windows. resolver = "2" + +# for details, see https://github.com/solana-labs/crossbeam/commit/fd279d707025f0e60951e429bf778b4813d1b6bf +[patch.crates-io] +crossbeam-epoch = { git = "https://github.com/solana-labs/crossbeam", rev = "fd279d707025f0e60951e429bf778b4813d1b6bf" } From 2f5ab9c5ebf5485c15022ee71d4909d159959353 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Thu, 18 Aug 2022 01:18:40 +0000 Subject: [PATCH 036/465] derives Error trait for ClusterInfoError and core::result::Error (backport #27208) (#27220) derives Error trait for ClusterInfoError and core::result::Error (#27208) (cherry picked from commit fea66c8b6365c924b71daa264d0919127b330008) Co-authored-by: behzad nouri --- core/src/result.rs | 80 +++++++++++--------------------------- gossip/src/cluster_info.rs | 8 +++- 2 files changed, 29 insertions(+), 59 deletions(-) diff --git a/core/src/result.rs b/core/src/result.rs index 6c9b66b6d459c0..2aa8f8718f5141 100644 --- a/core/src/result.rs +++ b/core/src/result.rs @@ -3,53 +3,42 @@ use { solana_gossip::{cluster_info, gossip_error::GossipError}, solana_ledger::blockstore, + thiserror::Error, }; -#[derive(Debug)] +#[derive(Debug, Error)] pub enum Error { - Io(std::io::Error), - Recv(crossbeam_channel::RecvError), + #[error(transparent)] + Blockstore(#[from] blockstore::BlockstoreError), + #[error(transparent)] + ClusterInfo(#[from] cluster_info::ClusterInfoError), + #[error(transparent)] + Gossip(#[from] GossipError), + #[error(transparent)] + Io(#[from] std::io::Error), + #[error("ReadyTimeout")] ReadyTimeout, - RecvTimeout(crossbeam_channel::RecvTimeoutError), - TrySend, - Serialize(std::boxed::Box), - ClusterInfo(cluster_info::ClusterInfoError), + #[error(transparent)] + Recv(#[from] crossbeam_channel::RecvError), + #[error(transparent)] + RecvTimeout(#[from] crossbeam_channel::RecvTimeoutError), + #[error("Send")] Send, - Blockstore(blockstore::BlockstoreError), - WeightedIndex(rand::distributions::weighted::WeightedError), - Gossip(GossipError), + #[error("TrySend")] + TrySend, + #[error(transparent)] + Serialize(#[from] std::boxed::Box), + #[error(transparent)] + WeightedIndex(#[from] rand::distributions::weighted::WeightedError), } pub type Result = std::result::Result; -impl std::fmt::Display for Error { - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - write!(f, "solana error") - } -} - -impl std::error::Error for Error {} - -impl std::convert::From for Error { - fn from(e: crossbeam_channel::RecvError) -> Error { - Error::Recv(e) - } -} impl std::convert::From for Error { fn from(_e: crossbeam_channel::ReadyTimeoutError) -> Error { Error::ReadyTimeout } } -impl std::convert::From for Error { - fn from(e: crossbeam_channel::RecvTimeoutError) -> Error { - Error::RecvTimeout(e) - } -} -impl std::convert::From for Error { - fn from(e: cluster_info::ClusterInfoError) -> Error { - Error::ClusterInfo(e) - } -} impl std::convert::From> for Error { fn from(_e: crossbeam_channel::TrySendError) -> Error { Error::TrySend @@ -60,31 +49,6 @@ impl std::convert::From> for Error { Error::Send } } -impl std::convert::From for Error { - fn from(e: std::io::Error) -> Error { - Error::Io(e) - } -} -impl std::convert::From> for Error { - fn from(e: std::boxed::Box) -> Error { - Error::Serialize(e) - } -} -impl std::convert::From for Error { - fn from(e: blockstore::BlockstoreError) -> Error { - Error::Blockstore(e) - } -} -impl std::convert::From for Error { - fn from(e: rand::distributions::weighted::WeightedError) -> Error { - Error::WeightedIndex(e) - } -} -impl std::convert::From for Error { - fn from(e: GossipError) -> Error { - Error::Gossip(e) - } -} #[cfg(test)] mod tests { diff --git a/gossip/src/cluster_info.rs b/gossip/src/cluster_info.rs index c0a8712f783ba8..92b14bf9fba125 100644 --- a/gossip/src/cluster_info.rs +++ b/gossip/src/cluster_info.rs @@ -92,6 +92,7 @@ use { thread::{sleep, Builder, JoinHandle}, time::{Duration, Instant}, }, + thiserror::Error, }; /// The Data plane fanout size, also used as the neighborhood size @@ -138,12 +139,17 @@ const MIN_STAKE_FOR_GOSSIP: u64 = solana_sdk::native_token::LAMPORTS_PER_SOL; /// Minimum number of staked nodes for enforcing stakes in gossip. const MIN_NUM_STAKED_NODES: usize = 500; -#[derive(Debug, PartialEq, Eq)] +#[derive(Debug, PartialEq, Eq, Error)] pub enum ClusterInfoError { + #[error("NoPeers")] NoPeers, + #[error("NoLeader")] NoLeader, + #[error("BadContactInfo")] BadContactInfo, + #[error("BadGossipAddress")] BadGossipAddress, + #[error("TooManyIncrementalSnapshotHashes")] TooManyIncrementalSnapshotHashes, } From b7edbfec7a13fb6c78213f2f2e5b660fd00d7f6c Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 17 Aug 2022 21:26:19 -0500 Subject: [PATCH 037/465] Bump Version to 1.11.8 (#27223) Co-authored-by: willhickey --- Cargo.lock | 484 ++++++++--------- account-decoder/Cargo.toml | 8 +- accounts-bench/Cargo.toml | 12 +- accounts-cluster-bench/Cargo.toml | 34 +- banking-bench/Cargo.toml | 26 +- banks-client/Cargo.toml | 12 +- banks-interface/Cargo.toml | 4 +- banks-server/Cargo.toml | 12 +- bench-streamer/Cargo.toml | 8 +- bench-tps/Cargo.toml | 38 +- bloom/Cargo.toml | 8 +- bucket_map/Cargo.toml | 8 +- clap-utils/Cargo.toml | 8 +- clap-v3-utils/Cargo.toml | 8 +- cli-config/Cargo.toml | 6 +- cli-output/Cargo.toml | 16 +- cli/Cargo.toml | 36 +- client-test/Cargo.toml | 32 +- client/Cargo.toml | 28 +- core/Cargo.toml | 56 +- docs/src/developing/clients/jsonrpc-api.md | 4 +- dos/Cargo.toml | 30 +- download-utils/Cargo.toml | 6 +- entry/Cargo.toml | 16 +- faucet/Cargo.toml | 14 +- frozen-abi/Cargo.toml | 6 +- frozen-abi/macro/Cargo.toml | 2 +- genesis-utils/Cargo.toml | 8 +- genesis/Cargo.toml | 22 +- geyser-plugin-interface/Cargo.toml | 6 +- geyser-plugin-manager/Cargo.toml | 16 +- gossip/Cargo.toml | 38 +- install/Cargo.toml | 14 +- keygen/Cargo.toml | 12 +- ledger-tool/Cargo.toml | 30 +- ledger/Cargo.toml | 40 +- local-cluster/Cargo.toml | 28 +- log-analyzer/Cargo.toml | 6 +- logger/Cargo.toml | 2 +- measure/Cargo.toml | 4 +- merkle-root-bench/Cargo.toml | 12 +- merkle-tree/Cargo.toml | 4 +- metrics/Cargo.toml | 4 +- net-shaper/Cargo.toml | 4 +- net-utils/Cargo.toml | 8 +- notifier/Cargo.toml | 2 +- perf/Cargo.toml | 12 +- poh-bench/Cargo.toml | 14 +- poh/Cargo.toml | 20 +- program-runtime/Cargo.toml | 14 +- program-test/Cargo.toml | 18 +- .../address-lookup-table-tests/Cargo.toml | 8 +- programs/address-lookup-table/Cargo.toml | 12 +- programs/bpf-loader-tests/Cargo.toml | 8 +- programs/bpf/Cargo.lock | 490 +++++++++--------- programs/bpf/Cargo.toml | 28 +- programs/bpf/rust/128bit/Cargo.toml | 6 +- programs/bpf/rust/128bit_dep/Cargo.toml | 4 +- programs/bpf/rust/alloc/Cargo.toml | 4 +- programs/bpf/rust/call_depth/Cargo.toml | 4 +- programs/bpf/rust/caller_access/Cargo.toml | 4 +- programs/bpf/rust/curve25519/Cargo.toml | 6 +- programs/bpf/rust/custom_heap/Cargo.toml | 4 +- programs/bpf/rust/dep_crate/Cargo.toml | 6 +- .../bpf/rust/deprecated_loader/Cargo.toml | 4 +- programs/bpf/rust/dup_accounts/Cargo.toml | 4 +- programs/bpf/rust/error_handling/Cargo.toml | 4 +- programs/bpf/rust/external_spend/Cargo.toml | 4 +- programs/bpf/rust/finalize/Cargo.toml | 4 +- .../rust/get_minimum_delegation/Cargo.toml | 4 +- .../Cargo.toml | 4 +- .../rust/instruction_introspection/Cargo.toml | 4 +- programs/bpf/rust/invoke/Cargo.toml | 4 +- programs/bpf/rust/invoke_and_error/Cargo.toml | 4 +- programs/bpf/rust/invoke_and_ok/Cargo.toml | 4 +- .../bpf/rust/invoke_and_return/Cargo.toml | 4 +- programs/bpf/rust/invoked/Cargo.toml | 4 +- programs/bpf/rust/iter/Cargo.toml | 4 +- programs/bpf/rust/log_data/Cargo.toml | 4 +- programs/bpf/rust/many_args/Cargo.toml | 6 +- programs/bpf/rust/many_args_dep/Cargo.toml | 4 +- programs/bpf/rust/mem/Cargo.toml | 10 +- programs/bpf/rust/membuiltins/Cargo.toml | 6 +- programs/bpf/rust/noop/Cargo.toml | 4 +- programs/bpf/rust/panic/Cargo.toml | 4 +- programs/bpf/rust/param_passing/Cargo.toml | 6 +- .../bpf/rust/param_passing_dep/Cargo.toml | 4 +- programs/bpf/rust/rand/Cargo.toml | 4 +- programs/bpf/rust/realloc/Cargo.toml | 4 +- programs/bpf/rust/realloc_invoke/Cargo.toml | 6 +- .../bpf/rust/ro_account_modify/Cargo.toml | 4 +- programs/bpf/rust/ro_modify/Cargo.toml | 4 +- programs/bpf/rust/sanity/Cargo.toml | 10 +- .../bpf/rust/secp256k1_recover/Cargo.toml | 4 +- programs/bpf/rust/sha/Cargo.toml | 4 +- .../rust/sibling_inner_instruction/Cargo.toml | 4 +- .../bpf/rust/sibling_instruction/Cargo.toml | 4 +- programs/bpf/rust/simulation/Cargo.toml | 12 +- programs/bpf/rust/spoof1/Cargo.toml | 4 +- programs/bpf/rust/spoof1_system/Cargo.toml | 4 +- programs/bpf/rust/sysvar/Cargo.toml | 10 +- programs/bpf/rust/upgradeable/Cargo.toml | 4 +- programs/bpf/rust/upgraded/Cargo.toml | 4 +- programs/bpf_loader/Cargo.toml | 14 +- .../bpf_loader/gen-syscall-list/Cargo.toml | 2 +- programs/compute-budget/Cargo.toml | 6 +- programs/config/Cargo.toml | 8 +- programs/ed25519-tests/Cargo.toml | 6 +- programs/stake/Cargo.toml | 18 +- programs/vote/Cargo.toml | 14 +- programs/zk-token-proof/Cargo.toml | 8 +- rayon-threadlimit/Cargo.toml | 2 +- rbpf-cli/Cargo.toml | 10 +- remote-wallet/Cargo.toml | 4 +- rpc-test/Cargo.toml | 18 +- rpc/Cargo.toml | 48 +- runtime/Cargo.toml | 34 +- runtime/store-tool/Cargo.toml | 8 +- sdk/Cargo.toml | 12 +- sdk/cargo-build-bpf/Cargo.toml | 4 +- sdk/cargo-build-sbf/Cargo.toml | 8 +- .../tests/crates/fail/Cargo.toml | 4 +- .../tests/crates/noop/Cargo.toml | 4 +- sdk/cargo-test-bpf/Cargo.toml | 2 +- sdk/cargo-test-sbf/Cargo.toml | 2 +- sdk/gen-headers/Cargo.toml | 2 +- sdk/macro/Cargo.toml | 2 +- sdk/program/Cargo.toml | 10 +- send-transaction-service/Cargo.toml | 14 +- stake-accounts/Cargo.toml | 16 +- storage-bigtable/Cargo.toml | 10 +- storage-bigtable/build-proto/Cargo.lock | 2 +- storage-bigtable/build-proto/Cargo.toml | 2 +- storage-proto/Cargo.toml | 8 +- streamer/Cargo.toml | 10 +- sys-tuner/Cargo.toml | 6 +- test-validator/Cargo.toml | 28 +- tokens/Cargo.toml | 24 +- transaction-dos/Cargo.toml | 32 +- transaction-status/Cargo.toml | 12 +- upload-perf/Cargo.toml | 4 +- validator/Cargo.toml | 50 +- version/Cargo.toml | 8 +- watchtower/Cargo.toml | 20 +- zk-token-sdk/Cargo.toml | 6 +- 145 files changed, 1268 insertions(+), 1268 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 4c669180b89cd9..ba3c7259748025 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1685,7 +1685,7 @@ dependencies = [ [[package]] name = "gen-headers" -version = "1.11.7" +version = "1.11.8" dependencies = [ "log", "regex", @@ -1693,7 +1693,7 @@ dependencies = [ [[package]] name = "gen-syscall-list" -version = "1.11.7" +version = "1.11.8" dependencies = [ "regex", ] @@ -3753,15 +3753,15 @@ dependencies = [ [[package]] name = "rbpf-cli" -version = "1.11.7" +version = "1.11.8" dependencies = [ "clap 3.1.8", "serde", "serde_json", "solana-bpf-loader-program", - "solana-logger 1.11.7", + "solana-logger 1.11.8", "solana-program-runtime", - "solana-sdk 1.11.7", + "solana-sdk 1.11.8", "solana_rbpf", ] @@ -4472,7 +4472,7 @@ dependencies = [ [[package]] name = "solana-account-decoder" -version = "1.11.7" +version = "1.11.8" dependencies = [ "Inflector", "base64 0.13.0", @@ -4484,7 +4484,7 @@ dependencies = [ "serde_derive", "serde_json", "solana-config-program", - "solana-sdk 1.11.7", + "solana-sdk 1.11.8", "solana-vote-program", "spl-token", "spl-token-2022", @@ -4494,21 +4494,21 @@ dependencies = [ [[package]] name = "solana-accounts-bench" -version = "1.11.7" +version = "1.11.8" dependencies = [ "clap 2.33.3", "log", "rayon", - "solana-logger 1.11.7", + "solana-logger 1.11.8", "solana-measure", "solana-runtime", - "solana-sdk 1.11.7", + "solana-sdk 1.11.8", "solana-version", ] [[package]] name = "solana-accounts-cluster-bench" -version = "1.11.7" +version = "1.11.8" dependencies = [ "clap 2.33.3", "log", @@ -4521,11 +4521,11 @@ dependencies = [ "solana-faucet", "solana-gossip", "solana-local-cluster", - "solana-logger 1.11.7", + "solana-logger 1.11.8", "solana-measure", "solana-net-utils", "solana-runtime", - "solana-sdk 1.11.7", + "solana-sdk 1.11.8", "solana-streamer", "solana-test-validator", "solana-transaction-status", @@ -4535,7 +4535,7 @@ dependencies = [ [[package]] name = "solana-address-lookup-table-program" -version = "1.11.7" +version = "1.11.8" dependencies = [ "bincode", "bytemuck", @@ -4544,28 +4544,28 @@ dependencies = [ "num-traits", "rustc_version 0.4.0", "serde", - "solana-frozen-abi 1.11.7", - "solana-frozen-abi-macro 1.11.7", - "solana-program 1.11.7", + "solana-frozen-abi 1.11.8", + "solana-frozen-abi-macro 1.11.8", + "solana-program 1.11.8", "solana-program-runtime", - "solana-sdk 1.11.7", + "solana-sdk 1.11.8", "thiserror", ] [[package]] name = "solana-address-lookup-table-program-tests" -version = "1.11.7" +version = "1.11.8" dependencies = [ "assert_matches", "bincode", "solana-address-lookup-table-program", "solana-program-test", - "solana-sdk 1.11.7", + "solana-sdk 1.11.8", ] [[package]] name = "solana-banking-bench" -version = "1.11.7" +version = "1.11.8" dependencies = [ "clap 3.1.8", "crossbeam-channel", @@ -4576,27 +4576,27 @@ dependencies = [ "solana-core", "solana-gossip", "solana-ledger", - "solana-logger 1.11.7", + "solana-logger 1.11.8", "solana-measure", "solana-perf", "solana-poh", "solana-runtime", - "solana-sdk 1.11.7", + "solana-sdk 1.11.8", "solana-streamer", "solana-version", ] [[package]] name = "solana-banks-client" -version = "1.11.7" +version = "1.11.8" dependencies = [ "borsh", "futures 0.3.21", "solana-banks-interface", "solana-banks-server", - "solana-program 1.11.7", + "solana-program 1.11.8", "solana-runtime", - "solana-sdk 1.11.7", + "solana-sdk 1.11.8", "tarpc", "thiserror", "tokio", @@ -4605,16 +4605,16 @@ dependencies = [ [[package]] name = "solana-banks-interface" -version = "1.11.7" +version = "1.11.8" dependencies = [ "serde", - "solana-sdk 1.11.7", + "solana-sdk 1.11.8", "tarpc", ] [[package]] name = "solana-banks-server" -version = "1.11.7" +version = "1.11.8" dependencies = [ "bincode", "crossbeam-channel", @@ -4622,7 +4622,7 @@ dependencies = [ "solana-banks-interface", "solana-client", "solana-runtime", - "solana-sdk 1.11.7", + "solana-sdk 1.11.8", "solana-send-transaction-service", "tarpc", "tokio", @@ -4632,7 +4632,7 @@ dependencies = [ [[package]] name = "solana-bench-streamer" -version = "1.11.7" +version = "1.11.8" dependencies = [ "clap 3.1.8", "crossbeam-channel", @@ -4643,7 +4643,7 @@ dependencies = [ [[package]] name = "solana-bench-tps" -version = "1.11.7" +version = "1.11.8" dependencies = [ "clap 2.33.3", "crossbeam-channel", @@ -4660,13 +4660,13 @@ dependencies = [ "solana-genesis", "solana-gossip", "solana-local-cluster", - "solana-logger 1.11.7", + "solana-logger 1.11.8", "solana-measure", "solana-metrics", "solana-net-utils", "solana-rpc", "solana-runtime", - "solana-sdk 1.11.7", + "solana-sdk 1.11.8", "solana-streamer", "solana-test-validator", "solana-version", @@ -4675,7 +4675,7 @@ dependencies = [ [[package]] name = "solana-bloom" -version = "1.11.7" +version = "1.11.8" dependencies = [ "bv", "fnv", @@ -4685,14 +4685,14 @@ dependencies = [ "rustc_version 0.4.0", "serde", "serde_derive", - "solana-frozen-abi 1.11.7", - "solana-frozen-abi-macro 1.11.7", - "solana-sdk 1.11.7", + "solana-frozen-abi 1.11.8", + "solana-frozen-abi-macro 1.11.8", + "solana-sdk 1.11.8", ] [[package]] name = "solana-bpf-loader-program" -version = "1.11.7" +version = "1.11.8" dependencies = [ "bincode", "byteorder", @@ -4703,26 +4703,26 @@ dependencies = [ "solana-metrics", "solana-program-runtime", "solana-runtime", - "solana-sdk 1.11.7", - "solana-zk-token-sdk 1.11.7", + "solana-sdk 1.11.8", + "solana-zk-token-sdk 1.11.8", "solana_rbpf", "thiserror", ] [[package]] name = "solana-bpf-loader-program-tests" -version = "1.11.7" +version = "1.11.8" dependencies = [ "assert_matches", "bincode", "solana-bpf-loader-program", "solana-program-test", - "solana-sdk 1.11.7", + "solana-sdk 1.11.8", ] [[package]] name = "solana-bucket-map" -version = "1.11.7" +version = "1.11.8" dependencies = [ "fs_extra", "log", @@ -4730,24 +4730,24 @@ dependencies = [ "modular-bitfield", "rand 0.7.3", "rayon", - "solana-logger 1.11.7", + "solana-logger 1.11.8", "solana-measure", - "solana-sdk 1.11.7", + "solana-sdk 1.11.8", "tempfile", ] [[package]] name = "solana-cargo-build-bpf" -version = "1.11.7" +version = "1.11.8" dependencies = [ "cargo_metadata", "clap 3.1.8", - "solana-sdk 1.11.7", + "solana-sdk 1.11.8", ] [[package]] name = "solana-cargo-build-sbf" -version = "1.11.7" +version = "1.11.8" dependencies = [ "bzip2", "cargo_metadata", @@ -4756,14 +4756,14 @@ dependencies = [ "regex", "serial_test", "solana-download-utils", - "solana-logger 1.11.7", - "solana-sdk 1.11.7", + "solana-logger 1.11.8", + "solana-sdk 1.11.8", "tar", ] [[package]] name = "solana-cargo-test-bpf" -version = "1.11.7" +version = "1.11.8" dependencies = [ "cargo_metadata", "clap 3.1.8", @@ -4771,7 +4771,7 @@ dependencies = [ [[package]] name = "solana-cargo-test-sbf" -version = "1.11.7" +version = "1.11.8" dependencies = [ "cargo_metadata", "clap 3.1.8", @@ -4779,14 +4779,14 @@ dependencies = [ [[package]] name = "solana-clap-utils" -version = "1.11.7" +version = "1.11.8" dependencies = [ "chrono", "clap 2.33.3", "rpassword", "solana-perf", "solana-remote-wallet", - "solana-sdk 1.11.7", + "solana-sdk 1.11.8", "tempfile", "thiserror", "tiny-bip39", @@ -4796,14 +4796,14 @@ dependencies = [ [[package]] name = "solana-clap-v3-utils" -version = "1.11.7" +version = "1.11.8" dependencies = [ "chrono", "clap 3.1.8", "rpassword", "solana-perf", "solana-remote-wallet", - "solana-sdk 1.11.7", + "solana-sdk 1.11.8", "tempfile", "thiserror", "tiny-bip39", @@ -4813,7 +4813,7 @@ dependencies = [ [[package]] name = "solana-cli" -version = "1.11.7" +version = "1.11.8" dependencies = [ "bincode", "bs58", @@ -4840,10 +4840,10 @@ dependencies = [ "solana-client", "solana-config-program", "solana-faucet", - "solana-logger 1.11.7", + "solana-logger 1.11.8", "solana-program-runtime", "solana-remote-wallet", - "solana-sdk 1.11.7", + "solana-sdk 1.11.8", "solana-streamer", "solana-test-validator", "solana-transaction-status", @@ -4858,7 +4858,7 @@ dependencies = [ [[package]] name = "solana-cli-config" -version = "1.11.7" +version = "1.11.8" dependencies = [ "anyhow", "dirs-next", @@ -4867,13 +4867,13 @@ dependencies = [ "serde_derive", "serde_yaml", "solana-clap-utils", - "solana-sdk 1.11.7", + "solana-sdk 1.11.8", "url 2.2.2", ] [[package]] name = "solana-cli-output" -version = "1.11.7" +version = "1.11.8" dependencies = [ "Inflector", "base64 0.13.0", @@ -4891,7 +4891,7 @@ dependencies = [ "solana-clap-utils", "solana-cli-config", "solana-client", - "solana-sdk 1.11.7", + "solana-sdk 1.11.8", "solana-transaction-status", "solana-vote-program", "spl-memo", @@ -4899,7 +4899,7 @@ dependencies = [ [[package]] name = "solana-client" -version = "1.11.7" +version = "1.11.8" dependencies = [ "anyhow", "assert_matches", @@ -4935,12 +4935,12 @@ dependencies = [ "solana-account-decoder", "solana-clap-utils", "solana-faucet", - "solana-logger 1.11.7", + "solana-logger 1.11.8", "solana-measure", "solana-metrics", "solana-net-utils", "solana-perf", - "solana-sdk 1.11.7", + "solana-sdk 1.11.8", "solana-streamer", "solana-transaction-status", "solana-version", @@ -4956,14 +4956,14 @@ dependencies = [ [[package]] name = "solana-client-test" -version = "1.11.7" +version = "1.11.8" dependencies = [ "futures-util", "serde_json", "serial_test", "solana-client", "solana-ledger", - "solana-logger 1.11.7", + "solana-logger 1.11.8", "solana-measure", "solana-merkle-tree", "solana-metrics", @@ -4971,7 +4971,7 @@ dependencies = [ "solana-rayon-threadlimit", "solana-rpc", "solana-runtime", - "solana-sdk 1.11.7", + "solana-sdk 1.11.8", "solana-streamer", "solana-test-validator", "solana-transaction-status", @@ -4982,28 +4982,28 @@ dependencies = [ [[package]] name = "solana-compute-budget-program" -version = "1.11.7" +version = "1.11.8" dependencies = [ "solana-program-runtime", - "solana-sdk 1.11.7", + "solana-sdk 1.11.8", ] [[package]] name = "solana-config-program" -version = "1.11.7" +version = "1.11.8" dependencies = [ "bincode", "chrono", "serde", "serde_derive", - "solana-logger 1.11.7", + "solana-logger 1.11.8", "solana-program-runtime", - "solana-sdk 1.11.7", + "solana-sdk 1.11.8", ] [[package]] name = "solana-core" -version = "1.11.7" +version = "1.11.8" dependencies = [ "ahash", "base64 0.13.0", @@ -5035,12 +5035,12 @@ dependencies = [ "solana-bloom", "solana-client", "solana-entry", - "solana-frozen-abi 1.11.7", - "solana-frozen-abi-macro 1.11.7", + "solana-frozen-abi 1.11.8", + "solana-frozen-abi-macro 1.11.8", "solana-geyser-plugin-manager", "solana-gossip", "solana-ledger", - "solana-logger 1.11.7", + "solana-logger 1.11.8", "solana-measure", "solana-metrics", "solana-net-utils", @@ -5050,7 +5050,7 @@ dependencies = [ "solana-rayon-threadlimit", "solana-rpc", "solana-runtime", - "solana-sdk 1.11.7", + "solana-sdk 1.11.8", "solana-send-transaction-service", "solana-stake-program", "solana-streamer", @@ -5070,7 +5070,7 @@ dependencies = [ [[package]] name = "solana-dos" -version = "1.11.7" +version = "1.11.8" dependencies = [ "bincode", "clap 3.1.8", @@ -5086,42 +5086,42 @@ dependencies = [ "solana-faucet", "solana-gossip", "solana-local-cluster", - "solana-logger 1.11.7", + "solana-logger 1.11.8", "solana-measure", "solana-net-utils", "solana-perf", "solana-rpc", - "solana-sdk 1.11.7", + "solana-sdk 1.11.8", "solana-streamer", "solana-version", ] [[package]] name = "solana-download-utils" -version = "1.11.7" +version = "1.11.8" dependencies = [ "console", "indicatif", "log", "reqwest", "solana-runtime", - "solana-sdk 1.11.7", + "solana-sdk 1.11.8", ] [[package]] name = "solana-ed25519-program-tests" -version = "1.11.7" +version = "1.11.8" dependencies = [ "assert_matches", "ed25519-dalek", "rand 0.7.3", "solana-program-test", - "solana-sdk 1.11.7", + "solana-sdk 1.11.8", ] [[package]] name = "solana-entry" -version = "1.11.7" +version = "1.11.8" dependencies = [ "bincode", "crossbeam-channel", @@ -5133,18 +5133,18 @@ dependencies = [ "rand 0.7.3", "rayon", "serde", - "solana-logger 1.11.7", + "solana-logger 1.11.8", "solana-measure", "solana-merkle-tree", "solana-metrics", "solana-perf", "solana-rayon-threadlimit", - "solana-sdk 1.11.7", + "solana-sdk 1.11.8", ] [[package]] name = "solana-faucet" -version = "1.11.7" +version = "1.11.8" dependencies = [ "bincode", "byteorder", @@ -5155,9 +5155,9 @@ dependencies = [ "serde_derive", "solana-clap-utils", "solana-cli-config", - "solana-logger 1.11.7", + "solana-logger 1.11.8", "solana-metrics", - "solana-sdk 1.11.7", + "solana-sdk 1.11.8", "solana-version", "spl-memo", "thiserror", @@ -5188,7 +5188,7 @@ dependencies = [ [[package]] name = "solana-frozen-abi" -version = "1.11.7" +version = "1.11.8" dependencies = [ "ahash", "blake3", @@ -5213,8 +5213,8 @@ dependencies = [ "serde_derive", "serde_json", "sha2 0.10.2", - "solana-frozen-abi-macro 1.11.7", - "solana-logger 1.11.7", + "solana-frozen-abi-macro 1.11.8", + "solana-logger 1.11.8", "subtle", "thiserror", ] @@ -5233,7 +5233,7 @@ dependencies = [ [[package]] name = "solana-frozen-abi-macro" -version = "1.11.7" +version = "1.11.8" dependencies = [ "proc-macro2 1.0.41", "quote 1.0.18", @@ -5243,7 +5243,7 @@ dependencies = [ [[package]] name = "solana-genesis" -version = "1.11.7" +version = "1.11.8" dependencies = [ "base64 0.13.0", "clap 2.33.3", @@ -5254,9 +5254,9 @@ dependencies = [ "solana-cli-config", "solana-entry", "solana-ledger", - "solana-logger 1.11.7", + "solana-logger 1.11.8", "solana-runtime", - "solana-sdk 1.11.7", + "solana-sdk 1.11.8", "solana-stake-program", "solana-version", "solana-vote-program", @@ -5265,26 +5265,26 @@ dependencies = [ [[package]] name = "solana-genesis-utils" -version = "1.11.7" +version = "1.11.8" dependencies = [ "solana-download-utils", "solana-runtime", - "solana-sdk 1.11.7", + "solana-sdk 1.11.8", ] [[package]] name = "solana-geyser-plugin-interface" -version = "1.11.7" +version = "1.11.8" dependencies = [ "log", - "solana-sdk 1.11.7", + "solana-sdk 1.11.8", "solana-transaction-status", "thiserror", ] [[package]] name = "solana-geyser-plugin-manager" -version = "1.11.7" +version = "1.11.8" dependencies = [ "bs58", "crossbeam-channel", @@ -5297,14 +5297,14 @@ dependencies = [ "solana-metrics", "solana-rpc", "solana-runtime", - "solana-sdk 1.11.7", + "solana-sdk 1.11.8", "solana-transaction-status", "thiserror", ] [[package]] name = "solana-gossip" -version = "1.11.7" +version = "1.11.8" dependencies = [ "bincode", "bv", @@ -5331,17 +5331,17 @@ dependencies = [ "solana-clap-utils", "solana-client", "solana-entry", - "solana-frozen-abi 1.11.7", - "solana-frozen-abi-macro 1.11.7", + "solana-frozen-abi 1.11.8", + "solana-frozen-abi-macro 1.11.8", "solana-ledger", - "solana-logger 1.11.7", + "solana-logger 1.11.8", "solana-measure", "solana-metrics", "solana-net-utils", "solana-perf", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.11.7", + "solana-sdk 1.11.8", "solana-streamer", "solana-version", "solana-vote-program", @@ -5350,7 +5350,7 @@ dependencies = [ [[package]] name = "solana-install" -version = "1.11.7" +version = "1.11.8" dependencies = [ "atty", "bincode", @@ -5371,8 +5371,8 @@ dependencies = [ "solana-clap-utils", "solana-client", "solana-config-program", - "solana-logger 1.11.7", - "solana-sdk 1.11.7", + "solana-logger 1.11.8", + "solana-sdk 1.11.8", "solana-version", "tar", "tempfile", @@ -5383,7 +5383,7 @@ dependencies = [ [[package]] name = "solana-keygen" -version = "1.11.7" +version = "1.11.8" dependencies = [ "bs58", "clap 3.1.8", @@ -5392,14 +5392,14 @@ dependencies = [ "solana-clap-v3-utils", "solana-cli-config", "solana-remote-wallet", - "solana-sdk 1.11.7", + "solana-sdk 1.11.8", "solana-version", "tiny-bip39", ] [[package]] name = "solana-ledger" -version = "1.11.7" +version = "1.11.8" dependencies = [ "assert_matches", "bincode", @@ -5433,16 +5433,16 @@ dependencies = [ "solana-account-decoder", "solana-bpf-loader-program", "solana-entry", - "solana-frozen-abi 1.11.7", - "solana-frozen-abi-macro 1.11.7", - "solana-logger 1.11.7", + "solana-frozen-abi 1.11.8", + "solana-frozen-abi-macro 1.11.8", + "solana-logger 1.11.8", "solana-measure", "solana-metrics", "solana-perf", "solana-program-runtime", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.11.7", + "solana-sdk 1.11.8", "solana-stake-program", "solana-storage-bigtable", "solana-storage-proto", @@ -5460,7 +5460,7 @@ dependencies = [ [[package]] name = "solana-ledger-tool" -version = "1.11.7" +version = "1.11.8" dependencies = [ "assert_cmd", "bs58", @@ -5482,10 +5482,10 @@ dependencies = [ "solana-core", "solana-entry", "solana-ledger", - "solana-logger 1.11.7", + "solana-logger 1.11.8", "solana-measure", "solana-runtime", - "solana-sdk 1.11.7", + "solana-sdk 1.11.8", "solana-stake-program", "solana-storage-bigtable", "solana-transaction-status", @@ -5497,7 +5497,7 @@ dependencies = [ [[package]] name = "solana-local-cluster" -version = "1.11.7" +version = "1.11.8" dependencies = [ "assert_matches", "crossbeam-channel", @@ -5515,9 +5515,9 @@ dependencies = [ "solana-entry", "solana-gossip", "solana-ledger", - "solana-logger 1.11.7", + "solana-logger 1.11.8", "solana-runtime", - "solana-sdk 1.11.7", + "solana-sdk 1.11.8", "solana-stake-program", "solana-streamer", "solana-vote-program", @@ -5526,13 +5526,13 @@ dependencies = [ [[package]] name = "solana-log-analyzer" -version = "1.11.7" +version = "1.11.8" dependencies = [ "byte-unit", "clap 3.1.8", "serde", "serde_json", - "solana-logger 1.11.7", + "solana-logger 1.11.8", "solana-version", ] @@ -5549,7 +5549,7 @@ dependencies = [ [[package]] name = "solana-logger" -version = "1.11.7" +version = "1.11.8" dependencies = [ "env_logger", "lazy_static", @@ -5558,38 +5558,38 @@ dependencies = [ [[package]] name = "solana-measure" -version = "1.11.7" +version = "1.11.8" dependencies = [ "log", - "solana-sdk 1.11.7", + "solana-sdk 1.11.8", ] [[package]] name = "solana-merkle-root-bench" -version = "1.11.7" +version = "1.11.8" dependencies = [ "clap 2.33.3", "log", - "solana-logger 1.11.7", + "solana-logger 1.11.8", "solana-measure", "solana-runtime", - "solana-sdk 1.11.7", + "solana-sdk 1.11.8", "solana-version", ] [[package]] name = "solana-merkle-tree" -version = "1.11.7" +version = "1.11.8" dependencies = [ "fast-math", "hex", "matches", - "solana-program 1.11.7", + "solana-program 1.11.8", ] [[package]] name = "solana-metrics" -version = "1.11.7" +version = "1.11.8" dependencies = [ "crossbeam-channel", "env_logger", @@ -5599,23 +5599,23 @@ dependencies = [ "rand 0.7.3", "reqwest", "serial_test", - "solana-sdk 1.11.7", + "solana-sdk 1.11.8", ] [[package]] name = "solana-net-shaper" -version = "1.11.7" +version = "1.11.8" dependencies = [ "clap 3.1.8", "rand 0.7.3", "serde", "serde_json", - "solana-logger 1.11.7", + "solana-logger 1.11.8", ] [[package]] name = "solana-net-utils" -version = "1.11.7" +version = "1.11.8" dependencies = [ "bincode", "clap 3.1.8", @@ -5626,8 +5626,8 @@ dependencies = [ "serde", "serde_derive", "socket2", - "solana-logger 1.11.7", - "solana-sdk 1.11.7", + "solana-logger 1.11.8", + "solana-sdk 1.11.8", "solana-version", "tokio", "url 2.2.2", @@ -5635,7 +5635,7 @@ dependencies = [ [[package]] name = "solana-notifier" -version = "1.11.7" +version = "1.11.8" dependencies = [ "log", "reqwest", @@ -5644,7 +5644,7 @@ dependencies = [ [[package]] name = "solana-perf" -version = "1.11.7" +version = "1.11.8" dependencies = [ "ahash", "bincode", @@ -5662,16 +5662,16 @@ dependencies = [ "rand 0.7.3", "rayon", "serde", - "solana-logger 1.11.7", + "solana-logger 1.11.8", "solana-metrics", "solana-rayon-threadlimit", - "solana-sdk 1.11.7", + "solana-sdk 1.11.8", "solana-vote-program", ] [[package]] name = "solana-poh" -version = "1.11.7" +version = "1.11.8" dependencies = [ "bincode", "core_affinity", @@ -5681,29 +5681,29 @@ dependencies = [ "rand 0.7.3", "solana-entry", "solana-ledger", - "solana-logger 1.11.7", + "solana-logger 1.11.8", "solana-measure", "solana-metrics", "solana-perf", "solana-runtime", - "solana-sdk 1.11.7", + "solana-sdk 1.11.8", "solana-sys-tuner", "thiserror", ] [[package]] name = "solana-poh-bench" -version = "1.11.7" +version = "1.11.8" dependencies = [ "clap 3.1.8", "log", "rand 0.7.3", "rayon", "solana-entry", - "solana-logger 1.11.7", + "solana-logger 1.11.8", "solana-measure", "solana-perf", - "solana-sdk 1.11.7", + "solana-sdk 1.11.8", "solana-version", ] @@ -5751,7 +5751,7 @@ dependencies = [ [[package]] name = "solana-program" -version = "1.11.7" +version = "1.11.8" dependencies = [ "anyhow", "assert_matches", @@ -5789,10 +5789,10 @@ dependencies = [ "serde_json", "sha2 0.10.2", "sha3 0.10.1", - "solana-frozen-abi 1.11.7", - "solana-frozen-abi-macro 1.11.7", - "solana-logger 1.11.7", - "solana-sdk-macro 1.11.7", + "solana-frozen-abi 1.11.8", + "solana-frozen-abi-macro 1.11.8", + "solana-logger 1.11.8", + "solana-sdk-macro 1.11.8", "static_assertions", "thiserror", "tiny-bip39", @@ -5802,7 +5802,7 @@ dependencies = [ [[package]] name = "solana-program-runtime" -version = "1.11.7" +version = "1.11.8" dependencies = [ "base64 0.13.0", "bincode", @@ -5816,18 +5816,18 @@ dependencies = [ "num-traits", "rustc_version 0.4.0", "serde", - "solana-frozen-abi 1.11.7", - "solana-frozen-abi-macro 1.11.7", - "solana-logger 1.11.7", + "solana-frozen-abi 1.11.8", + "solana-frozen-abi-macro 1.11.8", + "solana-logger 1.11.8", "solana-measure", "solana-metrics", - "solana-sdk 1.11.7", + "solana-sdk 1.11.8", "thiserror", ] [[package]] name = "solana-program-test" -version = "1.11.7" +version = "1.11.8" dependencies = [ "assert_matches", "async-trait", @@ -5839,10 +5839,10 @@ dependencies = [ "solana-banks-client", "solana-banks-server", "solana-bpf-loader-program", - "solana-logger 1.11.7", + "solana-logger 1.11.8", "solana-program-runtime", "solana-runtime", - "solana-sdk 1.11.7", + "solana-sdk 1.11.8", "solana-vote-program", "thiserror", "tokio", @@ -5850,7 +5850,7 @@ dependencies = [ [[package]] name = "solana-rayon-threadlimit" -version = "1.11.7" +version = "1.11.8" dependencies = [ "lazy_static", "num_cpus", @@ -5858,7 +5858,7 @@ dependencies = [ [[package]] name = "solana-remote-wallet" -version = "1.11.7" +version = "1.11.8" dependencies = [ "console", "dialoguer", @@ -5869,14 +5869,14 @@ dependencies = [ "parking_lot 0.12.1", "qstring", "semver 1.0.10", - "solana-sdk 1.11.7", + "solana-sdk 1.11.8", "thiserror", "uriparse", ] [[package]] name = "solana-rpc" -version = "1.11.7" +version = "1.11.8" dependencies = [ "base64 0.13.0", "bincode", @@ -5912,7 +5912,7 @@ dependencies = [ "solana-poh", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.11.7", + "solana-sdk 1.11.8", "solana-send-transaction-service", "solana-stake-program", "solana-storage-bigtable", @@ -5931,7 +5931,7 @@ dependencies = [ [[package]] name = "solana-rpc-test" -version = "1.11.7" +version = "1.11.8" dependencies = [ "bincode", "bs58", @@ -5943,9 +5943,9 @@ dependencies = [ "serde_json", "solana-account-decoder", "solana-client", - "solana-logger 1.11.7", + "solana-logger 1.11.8", "solana-rpc", - "solana-sdk 1.11.7", + "solana-sdk 1.11.8", "solana-streamer", "solana-test-validator", "solana-transaction-status", @@ -5954,7 +5954,7 @@ dependencies = [ [[package]] name = "solana-runtime" -version = "1.11.7" +version = "1.11.8" dependencies = [ "arrayref", "assert_matches", @@ -5994,18 +5994,18 @@ dependencies = [ "solana-bucket-map", "solana-compute-budget-program", "solana-config-program", - "solana-frozen-abi 1.11.7", - "solana-frozen-abi-macro 1.11.7", - "solana-logger 1.11.7", + "solana-frozen-abi 1.11.8", + "solana-frozen-abi-macro 1.11.8", + "solana-logger 1.11.8", "solana-measure", "solana-metrics", "solana-program-runtime", "solana-rayon-threadlimit", - "solana-sdk 1.11.7", + "solana-sdk 1.11.8", "solana-stake-program", "solana-vote-program", "solana-zk-token-proof-program", - "solana-zk-token-sdk 1.11.7", + "solana-zk-token-sdk 1.11.8", "strum", "strum_macros", "symlink", @@ -6068,7 +6068,7 @@ dependencies = [ [[package]] name = "solana-sdk" -version = "1.11.7" +version = "1.11.8" dependencies = [ "anyhow", "assert_matches", @@ -6108,11 +6108,11 @@ dependencies = [ "serde_json", "sha2 0.10.2", "sha3 0.10.1", - "solana-frozen-abi 1.11.7", - "solana-frozen-abi-macro 1.11.7", - "solana-logger 1.11.7", - "solana-program 1.11.7", - "solana-sdk-macro 1.11.7", + "solana-frozen-abi 1.11.8", + "solana-frozen-abi-macro 1.11.8", + "solana-logger 1.11.8", + "solana-program 1.11.8", + "solana-sdk-macro 1.11.8", "static_assertions", "thiserror", "tiny-bip39", @@ -6135,7 +6135,7 @@ dependencies = [ [[package]] name = "solana-sdk-macro" -version = "1.11.7" +version = "1.11.8" dependencies = [ "bs58", "proc-macro2 1.0.41", @@ -6146,21 +6146,21 @@ dependencies = [ [[package]] name = "solana-send-transaction-service" -version = "1.11.7" +version = "1.11.8" dependencies = [ "crossbeam-channel", "log", "solana-client", - "solana-logger 1.11.7", + "solana-logger 1.11.8", "solana-measure", "solana-metrics", "solana-runtime", - "solana-sdk 1.11.7", + "solana-sdk 1.11.8", ] [[package]] name = "solana-stake-accounts" -version = "1.11.7" +version = "1.11.8" dependencies = [ "clap 2.33.3", "solana-clap-utils", @@ -6168,13 +6168,13 @@ dependencies = [ "solana-client", "solana-remote-wallet", "solana-runtime", - "solana-sdk 1.11.7", + "solana-sdk 1.11.8", "solana-stake-program", ] [[package]] name = "solana-stake-program" -version = "1.11.7" +version = "1.11.8" dependencies = [ "assert_matches", "bincode", @@ -6186,12 +6186,12 @@ dependencies = [ "serde", "serde_derive", "solana-config-program", - "solana-frozen-abi 1.11.7", - "solana-frozen-abi-macro 1.11.7", - "solana-logger 1.11.7", + "solana-frozen-abi 1.11.8", + "solana-frozen-abi-macro 1.11.8", + "solana-logger 1.11.8", "solana-metrics", "solana-program-runtime", - "solana-sdk 1.11.7", + "solana-sdk 1.11.8", "solana-vote-program", "test-case", "thiserror", @@ -6199,7 +6199,7 @@ dependencies = [ [[package]] name = "solana-storage-bigtable" -version = "1.11.7" +version = "1.11.8" dependencies = [ "backoff", "bincode", @@ -6220,7 +6220,7 @@ dependencies = [ "serde_derive", "smpl_jwt", "solana-metrics", - "solana-sdk 1.11.7", + "solana-sdk 1.11.8", "solana-storage-proto", "solana-transaction-status", "thiserror", @@ -6231,7 +6231,7 @@ dependencies = [ [[package]] name = "solana-storage-proto" -version = "1.11.7" +version = "1.11.8" dependencies = [ "bincode", "bs58", @@ -6240,25 +6240,25 @@ dependencies = [ "protobuf-src", "serde", "solana-account-decoder", - "solana-sdk 1.11.7", + "solana-sdk 1.11.8", "solana-transaction-status", "tonic-build 0.8.0", ] [[package]] name = "solana-store-tool" -version = "1.11.7" +version = "1.11.8" dependencies = [ "clap 2.33.3", "log", - "solana-logger 1.11.7", + "solana-logger 1.11.8", "solana-runtime", "solana-version", ] [[package]] name = "solana-streamer" -version = "1.11.7" +version = "1.11.8" dependencies = [ "crossbeam-channel", "futures-util", @@ -6275,10 +6275,10 @@ dependencies = [ "rand 0.7.3", "rcgen", "rustls 0.20.6", - "solana-logger 1.11.7", + "solana-logger 1.11.8", "solana-metrics", "solana-perf", - "solana-sdk 1.11.7", + "solana-sdk 1.11.8", "thiserror", "tokio", "x509-parser", @@ -6286,13 +6286,13 @@ dependencies = [ [[package]] name = "solana-sys-tuner" -version = "1.11.7" +version = "1.11.8" dependencies = [ "clap 2.33.3", "libc", "log", "nix", - "solana-logger 1.11.7", + "solana-logger 1.11.8", "solana-version", "sysctl", "unix_socket2", @@ -6301,7 +6301,7 @@ dependencies = [ [[package]] name = "solana-test-validator" -version = "1.11.7" +version = "1.11.8" dependencies = [ "base64 0.13.0", "log", @@ -6312,20 +6312,20 @@ dependencies = [ "solana-core", "solana-gossip", "solana-ledger", - "solana-logger 1.11.7", + "solana-logger 1.11.8", "solana-net-utils", "solana-program-runtime", "solana-program-test", "solana-rpc", "solana-runtime", - "solana-sdk 1.11.7", + "solana-sdk 1.11.8", "solana-streamer", "tokio", ] [[package]] name = "solana-tokens" -version = "1.11.7" +version = "1.11.8" dependencies = [ "bincode", "chrono", @@ -6341,9 +6341,9 @@ dependencies = [ "solana-clap-utils", "solana-cli-config", "solana-client", - "solana-logger 1.11.7", + "solana-logger 1.11.8", "solana-remote-wallet", - "solana-sdk 1.11.7", + "solana-sdk 1.11.8", "solana-streamer", "solana-test-validator", "solana-transaction-status", @@ -6356,7 +6356,7 @@ dependencies = [ [[package]] name = "solana-transaction-dos" -version = "1.11.7" +version = "1.11.8" dependencies = [ "bincode", "clap 2.33.3", @@ -6370,11 +6370,11 @@ dependencies = [ "solana-faucet", "solana-gossip", "solana-local-cluster", - "solana-logger 1.11.7", + "solana-logger 1.11.8", "solana-measure", "solana-net-utils", "solana-runtime", - "solana-sdk 1.11.7", + "solana-sdk 1.11.8", "solana-streamer", "solana-transaction-status", "solana-version", @@ -6382,7 +6382,7 @@ dependencies = [ [[package]] name = "solana-transaction-status" -version = "1.11.7" +version = "1.11.8" dependencies = [ "Inflector", "base64 0.13.0", @@ -6397,7 +6397,7 @@ dependencies = [ "solana-account-decoder", "solana-measure", "solana-metrics", - "solana-sdk 1.11.7", + "solana-sdk 1.11.8", "solana-vote-program", "spl-associated-token-account", "spl-memo", @@ -6408,7 +6408,7 @@ dependencies = [ [[package]] name = "solana-upload-perf" -version = "1.11.7" +version = "1.11.8" dependencies = [ "serde_json", "solana-metrics", @@ -6416,7 +6416,7 @@ dependencies = [ [[package]] name = "solana-validator" -version = "1.11.7" +version = "1.11.8" dependencies = [ "chrono", "clap 2.33.3", @@ -6447,14 +6447,14 @@ dependencies = [ "solana-genesis-utils", "solana-gossip", "solana-ledger", - "solana-logger 1.11.7", + "solana-logger 1.11.8", "solana-metrics", "solana-net-utils", "solana-perf", "solana-poh", "solana-rpc", "solana-runtime", - "solana-sdk 1.11.7", + "solana-sdk 1.11.8", "solana-send-transaction-service", "solana-storage-bigtable", "solana-streamer", @@ -6467,21 +6467,21 @@ dependencies = [ [[package]] name = "solana-version" -version = "1.11.7" +version = "1.11.8" dependencies = [ "log", "rustc_version 0.4.0", "semver 1.0.10", "serde", "serde_derive", - "solana-frozen-abi 1.11.7", - "solana-frozen-abi-macro 1.11.7", - "solana-sdk 1.11.7", + "solana-frozen-abi 1.11.8", + "solana-frozen-abi-macro 1.11.8", + "solana-sdk 1.11.8", ] [[package]] name = "solana-vote-program" -version = "1.11.7" +version = "1.11.8" dependencies = [ "bincode", "log", @@ -6490,18 +6490,18 @@ dependencies = [ "rustc_version 0.4.0", "serde", "serde_derive", - "solana-frozen-abi 1.11.7", - "solana-frozen-abi-macro 1.11.7", - "solana-logger 1.11.7", + "solana-frozen-abi 1.11.8", + "solana-frozen-abi-macro 1.11.8", + "solana-logger 1.11.8", "solana-metrics", "solana-program-runtime", - "solana-sdk 1.11.7", + "solana-sdk 1.11.8", "thiserror", ] [[package]] name = "solana-watchtower" -version = "1.11.7" +version = "1.11.8" dependencies = [ "clap 2.33.3", "humantime", @@ -6510,24 +6510,24 @@ dependencies = [ "solana-cli-config", "solana-cli-output", "solana-client", - "solana-logger 1.11.7", + "solana-logger 1.11.8", "solana-metrics", "solana-notifier", - "solana-sdk 1.11.7", + "solana-sdk 1.11.8", "solana-version", ] [[package]] name = "solana-zk-token-proof-program" -version = "1.11.7" +version = "1.11.8" dependencies = [ "bytemuck", "getrandom 0.1.16", "num-derive", "num-traits", "solana-program-runtime", - "solana-sdk 1.11.7", - "solana-zk-token-sdk 1.11.7", + "solana-sdk 1.11.8", + "solana-zk-token-sdk 1.11.8", ] [[package]] @@ -6562,7 +6562,7 @@ dependencies = [ [[package]] name = "solana-zk-token-sdk" -version = "1.11.7" +version = "1.11.8" dependencies = [ "aes-gcm-siv", "arrayref", @@ -6581,8 +6581,8 @@ dependencies = [ "serde", "serde_json", "sha3 0.9.1", - "solana-program 1.11.7", - "solana-sdk 1.11.7", + "solana-program 1.11.8", + "solana-sdk 1.11.8", "subtle", "thiserror", "zeroize", diff --git a/account-decoder/Cargo.toml b/account-decoder/Cargo.toml index e6276d5eae8ece..12a90b879634a2 100644 --- a/account-decoder/Cargo.toml +++ b/account-decoder/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-account-decoder" -version = "1.11.7" +version = "1.11.8" description = "Solana account decoder" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -19,9 +19,9 @@ lazy_static = "1.4.0" serde = "1.0.138" serde_derive = "1.0.103" serde_json = "1.0.81" -solana-config-program = { path = "../programs/config", version = "=1.11.7" } -solana-sdk = { path = "../sdk", version = "=1.11.7" } -solana-vote-program = { path = "../programs/vote", version = "=1.11.7" } +solana-config-program = { path = "../programs/config", version = "=1.11.8" } +solana-sdk = { path = "../sdk", version = "=1.11.8" } +solana-vote-program = { path = "../programs/vote", version = "=1.11.8" } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } spl-token-2022 = { version = "=0.4.2", features = ["no-entrypoint"] } thiserror = "1.0" diff --git a/accounts-bench/Cargo.toml b/accounts-bench/Cargo.toml index b414c1af8f7cc5..019882104cc86c 100644 --- a/accounts-bench/Cargo.toml +++ b/accounts-bench/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-accounts-bench" -version = "1.11.7" +version = "1.11.8" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -12,11 +12,11 @@ publish = false clap = "2.33.1" log = "0.4.17" rayon = "1.5.3" -solana-logger = { path = "../logger", version = "=1.11.7" } -solana-measure = { path = "../measure", version = "=1.11.7" } -solana-runtime = { path = "../runtime", version = "=1.11.7" } -solana-sdk = { path = "../sdk", version = "=1.11.7" } -solana-version = { path = "../version", version = "=1.11.7" } +solana-logger = { path = "../logger", version = "=1.11.8" } +solana-measure = { path = "../measure", version = "=1.11.8" } +solana-runtime = { path = "../runtime", version = "=1.11.8" } +solana-sdk = { path = "../sdk", version = "=1.11.8" } +solana-version = { path = "../version", version = "=1.11.8" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/accounts-cluster-bench/Cargo.toml b/accounts-cluster-bench/Cargo.toml index 1b6b6fd8260f5d..8a6441a6ad771d 100644 --- a/accounts-cluster-bench/Cargo.toml +++ b/accounts-cluster-bench/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-accounts-cluster-bench" -version = "1.11.7" +version = "1.11.8" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -13,25 +13,25 @@ clap = "2.33.1" log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" -solana-account-decoder = { path = "../account-decoder", version = "=1.11.7" } -solana-clap-utils = { path = "../clap-utils", version = "=1.11.7" } -solana-client = { path = "../client", version = "=1.11.7" } -solana-faucet = { path = "../faucet", version = "=1.11.7" } -solana-gossip = { path = "../gossip", version = "=1.11.7" } -solana-logger = { path = "../logger", version = "=1.11.7" } -solana-measure = { path = "../measure", version = "=1.11.7" } -solana-net-utils = { path = "../net-utils", version = "=1.11.7" } -solana-runtime = { path = "../runtime", version = "=1.11.7" } -solana-sdk = { path = "../sdk", version = "=1.11.7" } -solana-streamer = { path = "../streamer", version = "=1.11.7" } -solana-transaction-status = { path = "../transaction-status", version = "=1.11.7" } -solana-version = { path = "../version", version = "=1.11.7" } +solana-account-decoder = { path = "../account-decoder", version = "=1.11.8" } +solana-clap-utils = { path = "../clap-utils", version = "=1.11.8" } +solana-client = { path = "../client", version = "=1.11.8" } +solana-faucet = { path = "../faucet", version = "=1.11.8" } +solana-gossip = { path = "../gossip", version = "=1.11.8" } +solana-logger = { path = "../logger", version = "=1.11.8" } +solana-measure = { path = "../measure", version = "=1.11.8" } +solana-net-utils = { path = "../net-utils", version = "=1.11.8" } +solana-runtime = { path = "../runtime", version = "=1.11.8" } +solana-sdk = { path = "../sdk", version = "=1.11.8" } +solana-streamer = { path = "../streamer", version = "=1.11.8" } +solana-transaction-status = { path = "../transaction-status", version = "=1.11.8" } +solana-version = { path = "../version", version = "=1.11.8" } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } [dev-dependencies] -solana-core = { path = "../core", version = "=1.11.7" } -solana-local-cluster = { path = "../local-cluster", version = "=1.11.7" } -solana-test-validator = { path = "../test-validator", version = "=1.11.7" } +solana-core = { path = "../core", version = "=1.11.8" } +solana-local-cluster = { path = "../local-cluster", version = "=1.11.8" } +solana-test-validator = { path = "../test-validator", version = "=1.11.8" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/banking-bench/Cargo.toml b/banking-bench/Cargo.toml index a340207a3f1d6c..11b919ec9df418 100644 --- a/banking-bench/Cargo.toml +++ b/banking-bench/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-banking-bench" -version = "1.11.7" +version = "1.11.8" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,18 +14,18 @@ crossbeam-channel = "0.5" log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" -solana-client = { path = "../client", version = "=1.11.7" } -solana-core = { path = "../core", version = "=1.11.7" } -solana-gossip = { path = "../gossip", version = "=1.11.7" } -solana-ledger = { path = "../ledger", version = "=1.11.7" } -solana-logger = { path = "../logger", version = "=1.11.7" } -solana-measure = { path = "../measure", version = "=1.11.7" } -solana-perf = { path = "../perf", version = "=1.11.7" } -solana-poh = { path = "../poh", version = "=1.11.7" } -solana-runtime = { path = "../runtime", version = "=1.11.7" } -solana-sdk = { path = "../sdk", version = "=1.11.7" } -solana-streamer = { path = "../streamer", version = "=1.11.7" } -solana-version = { path = "../version", version = "=1.11.7" } +solana-client = { path = "../client", version = "=1.11.8" } +solana-core = { path = "../core", version = "=1.11.8" } +solana-gossip = { path = "../gossip", version = "=1.11.8" } +solana-ledger = { path = "../ledger", version = "=1.11.8" } +solana-logger = { path = "../logger", version = "=1.11.8" } +solana-measure = { path = "../measure", version = "=1.11.8" } +solana-perf = { path = "../perf", version = "=1.11.8" } +solana-poh = { path = "../poh", version = "=1.11.8" } +solana-runtime = { path = "../runtime", version = "=1.11.8" } +solana-sdk = { path = "../sdk", version = "=1.11.8" } +solana-streamer = { path = "../streamer", version = "=1.11.8" } +solana-version = { path = "../version", version = "=1.11.8" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/banks-client/Cargo.toml b/banks-client/Cargo.toml index 23fc48f269d172..38a696c5e163f0 100644 --- a/banks-client/Cargo.toml +++ b/banks-client/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-banks-client" -version = "1.11.7" +version = "1.11.8" description = "Solana banks client" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,17 +12,17 @@ edition = "2021" [dependencies] borsh = "0.9.3" futures = "0.3" -solana-banks-interface = { path = "../banks-interface", version = "=1.11.7" } -solana-program = { path = "../sdk/program", version = "=1.11.7" } -solana-sdk = { path = "../sdk", version = "=1.11.7" } +solana-banks-interface = { path = "../banks-interface", version = "=1.11.8" } +solana-program = { path = "../sdk/program", version = "=1.11.8" } +solana-sdk = { path = "../sdk", version = "=1.11.8" } tarpc = { version = "0.29.0", features = ["full"] } thiserror = "1.0" tokio = { version = "~1.14.1", features = ["full"] } tokio-serde = { version = "0.8", features = ["bincode"] } [dev-dependencies] -solana-banks-server = { path = "../banks-server", version = "=1.11.7" } -solana-runtime = { path = "../runtime", version = "=1.11.7" } +solana-banks-server = { path = "../banks-server", version = "=1.11.8" } +solana-runtime = { path = "../runtime", version = "=1.11.8" } [lib] crate-type = ["lib"] diff --git a/banks-interface/Cargo.toml b/banks-interface/Cargo.toml index a3881d7e02a700..82ca0b7aac19e0 100644 --- a/banks-interface/Cargo.toml +++ b/banks-interface/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-banks-interface" -version = "1.11.7" +version = "1.11.8" description = "Solana banks RPC interface" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -11,7 +11,7 @@ edition = "2021" [dependencies] serde = { version = "1.0.138", features = ["derive"] } -solana-sdk = { path = "../sdk", version = "=1.11.7" } +solana-sdk = { path = "../sdk", version = "=1.11.8" } tarpc = { version = "0.29.0", features = ["full"] } [lib] diff --git a/banks-server/Cargo.toml b/banks-server/Cargo.toml index 0f3c0b527c3bb2..2e937de1dc27e3 100644 --- a/banks-server/Cargo.toml +++ b/banks-server/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-banks-server" -version = "1.11.7" +version = "1.11.8" description = "Solana banks server" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,11 +13,11 @@ edition = "2021" bincode = "1.3.3" crossbeam-channel = "0.5" futures = "0.3" -solana-banks-interface = { path = "../banks-interface", version = "=1.11.7" } -solana-client = { path = "../client", version = "=1.11.7" } -solana-runtime = { path = "../runtime", version = "=1.11.7" } -solana-sdk = { path = "../sdk", version = "=1.11.7" } -solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.11.7" } +solana-banks-interface = { path = "../banks-interface", version = "=1.11.8" } +solana-client = { path = "../client", version = "=1.11.8" } +solana-runtime = { path = "../runtime", version = "=1.11.8" } +solana-sdk = { path = "../sdk", version = "=1.11.8" } +solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.11.8" } tarpc = { version = "0.29.0", features = ["full"] } tokio = { version = "1", features = ["full"] } tokio-serde = { version = "0.8", features = ["bincode"] } diff --git a/bench-streamer/Cargo.toml b/bench-streamer/Cargo.toml index 3e59739ff5690d..d6c4ee876f8b33 100644 --- a/bench-streamer/Cargo.toml +++ b/bench-streamer/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-bench-streamer" -version = "1.11.7" +version = "1.11.8" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -11,9 +11,9 @@ publish = false [dependencies] clap = { version = "3.1.5", features = ["cargo"] } crossbeam-channel = "0.5" -solana-net-utils = { path = "../net-utils", version = "=1.11.7" } -solana-streamer = { path = "../streamer", version = "=1.11.7" } -solana-version = { path = "../version", version = "=1.11.7" } +solana-net-utils = { path = "../net-utils", version = "=1.11.8" } +solana-streamer = { path = "../streamer", version = "=1.11.8" } +solana-version = { path = "../version", version = "=1.11.8" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/bench-tps/Cargo.toml b/bench-tps/Cargo.toml index ade81bb5dae760..03bc3e27d47f0e 100644 --- a/bench-tps/Cargo.toml +++ b/bench-tps/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-bench-tps" -version = "1.11.7" +version = "1.11.8" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -15,28 +15,28 @@ log = "0.4.17" rayon = "1.5.3" serde_json = "1.0.81" serde_yaml = "0.8.26" -solana-clap-utils = { path = "../clap-utils", version = "=1.11.7" } -solana-cli-config = { path = "../cli-config", version = "=1.11.7" } -solana-client = { path = "../client", version = "=1.11.7" } -solana-core = { path = "../core", version = "=1.11.7" } -solana-faucet = { path = "../faucet", version = "=1.11.7" } -solana-genesis = { path = "../genesis", version = "=1.11.7" } -solana-gossip = { path = "../gossip", version = "=1.11.7" } -solana-logger = { path = "../logger", version = "=1.11.7" } -solana-measure = { path = "../measure", version = "=1.11.7" } -solana-metrics = { path = "../metrics", version = "=1.11.7" } -solana-net-utils = { path = "../net-utils", version = "=1.11.7" } -solana-rpc = { path = "../rpc", version = "=1.11.7" } -solana-runtime = { path = "../runtime", version = "=1.11.7" } -solana-sdk = { path = "../sdk", version = "=1.11.7" } -solana-streamer = { path = "../streamer", version = "=1.11.7" } -solana-version = { path = "../version", version = "=1.11.7" } +solana-clap-utils = { path = "../clap-utils", version = "=1.11.8" } +solana-cli-config = { path = "../cli-config", version = "=1.11.8" } +solana-client = { path = "../client", version = "=1.11.8" } +solana-core = { path = "../core", version = "=1.11.8" } +solana-faucet = { path = "../faucet", version = "=1.11.8" } +solana-genesis = { path = "../genesis", version = "=1.11.8" } +solana-gossip = { path = "../gossip", version = "=1.11.8" } +solana-logger = { path = "../logger", version = "=1.11.8" } +solana-measure = { path = "../measure", version = "=1.11.8" } +solana-metrics = { path = "../metrics", version = "=1.11.8" } +solana-net-utils = { path = "../net-utils", version = "=1.11.8" } +solana-rpc = { path = "../rpc", version = "=1.11.8" } +solana-runtime = { path = "../runtime", version = "=1.11.8" } +solana-sdk = { path = "../sdk", version = "=1.11.8" } +solana-streamer = { path = "../streamer", version = "=1.11.8" } +solana-version = { path = "../version", version = "=1.11.8" } thiserror = "1.0" [dev-dependencies] serial_test = "0.8.0" -solana-local-cluster = { path = "../local-cluster", version = "=1.11.7" } -solana-test-validator = { path = "../test-validator", version = "=1.11.7" } +solana-local-cluster = { path = "../local-cluster", version = "=1.11.8" } +solana-test-validator = { path = "../test-validator", version = "=1.11.8" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/bloom/Cargo.toml b/bloom/Cargo.toml index 4052c07239251f..d51961f673d686 100644 --- a/bloom/Cargo.toml +++ b/bloom/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bloom" -version = "1.11.7" +version = "1.11.8" description = "Solana bloom filter" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -17,9 +17,9 @@ rand = "0.7.0" rayon = "1.5.3" serde = { version = "1.0.138", features = ["rc"] } serde_derive = "1.0.103" -solana-frozen-abi = { path = "../frozen-abi", version = "=1.11.7" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.11.7" } -solana-sdk = { path = "../sdk", version = "=1.11.7" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.11.8" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.11.8" } +solana-sdk = { path = "../sdk", version = "=1.11.8" } [lib] crate-type = ["lib"] diff --git a/bucket_map/Cargo.toml b/bucket_map/Cargo.toml index cdd175091fdb53..e94ffcc4e2975d 100644 --- a/bucket_map/Cargo.toml +++ b/bucket_map/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bucket-map" -version = "1.11.7" +version = "1.11.8" description = "solana-bucket-map" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-bucket-map" @@ -15,14 +15,14 @@ log = { version = "0.4.17" } memmap2 = "0.5.3" modular-bitfield = "0.11.2" rand = "0.7.0" -solana-measure = { path = "../measure", version = "=1.11.7" } -solana-sdk = { path = "../sdk", version = "=1.11.7" } +solana-measure = { path = "../measure", version = "=1.11.8" } +solana-sdk = { path = "../sdk", version = "=1.11.8" } tempfile = "3.3.0" [dev-dependencies] fs_extra = "1.2.0" rayon = "1.5.3" -solana-logger = { path = "../logger", version = "=1.11.7" } +solana-logger = { path = "../logger", version = "=1.11.8" } [lib] crate-type = ["lib"] diff --git a/clap-utils/Cargo.toml b/clap-utils/Cargo.toml index 6dc68f2850331e..d84f72040f6f0f 100644 --- a/clap-utils/Cargo.toml +++ b/clap-utils/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-clap-utils" -version = "1.11.7" +version = "1.11.8" description = "Solana utilities for the clap" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,9 +13,9 @@ edition = "2021" chrono = "0.4" clap = "2.33.0" rpassword = "6.0" -solana-perf = { path = "../perf", version = "=1.11.7" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.11.7", default-features = false } -solana-sdk = { path = "../sdk", version = "=1.11.7" } +solana-perf = { path = "../perf", version = "=1.11.8" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.11.8", default-features = false } +solana-sdk = { path = "../sdk", version = "=1.11.8" } thiserror = "1.0.31" tiny-bip39 = "0.8.2" uriparse = "0.6.4" diff --git a/clap-v3-utils/Cargo.toml b/clap-v3-utils/Cargo.toml index 01bf61a0b052fd..08685e8ba20b56 100644 --- a/clap-v3-utils/Cargo.toml +++ b/clap-v3-utils/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-clap-v3-utils" -version = "1.11.7" +version = "1.11.8" description = "Solana utilities for the clap v3" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,9 +13,9 @@ edition = "2021" chrono = "0.4" clap = { version = "3.1.5", features = ["cargo"] } rpassword = "6.0" -solana-perf = { path = "../perf", version = "=1.11.7" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.11.7", default-features = false } -solana-sdk = { path = "../sdk", version = "=1.11.7" } +solana-perf = { path = "../perf", version = "=1.11.8" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.11.8", default-features = false } +solana-sdk = { path = "../sdk", version = "=1.11.8" } thiserror = "1.0.31" tiny-bip39 = "0.8.2" uriparse = "0.6.4" diff --git a/cli-config/Cargo.toml b/cli-config/Cargo.toml index 0ff252f9f01f3d..354420f8c7473f 100644 --- a/cli-config/Cargo.toml +++ b/cli-config/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-cli-config" description = "Blockchain, Rebuilt for Scale" -version = "1.11.7" +version = "1.11.8" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -15,8 +15,8 @@ lazy_static = "1.4.0" serde = "1.0.138" serde_derive = "1.0.103" serde_yaml = "0.8.26" -solana-clap-utils = { path = "../clap-utils", version = "=1.11.7" } -solana-sdk = { path = "../sdk", version = "=1.11.7" } +solana-clap-utils = { path = "../clap-utils", version = "=1.11.8" } +solana-sdk = { path = "../sdk", version = "=1.11.8" } url = "2.2.2" [dev-dependencies] diff --git a/cli-output/Cargo.toml b/cli-output/Cargo.toml index 9b526402960244..a1f972fc932a57 100644 --- a/cli-output/Cargo.toml +++ b/cli-output/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-cli-output" description = "Blockchain, Rebuilt for Scale" -version = "1.11.7" +version = "1.11.8" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -21,13 +21,13 @@ pretty-hex = "0.3.0" semver = "1.0.10" serde = "1.0.138" serde_json = "1.0.81" -solana-account-decoder = { path = "../account-decoder", version = "=1.11.7" } -solana-clap-utils = { path = "../clap-utils", version = "=1.11.7" } -solana-cli-config = { path = "../cli-config", version = "=1.11.7" } -solana-client = { path = "../client", version = "=1.11.7" } -solana-sdk = { path = "../sdk", version = "=1.11.7" } -solana-transaction-status = { path = "../transaction-status", version = "=1.11.7" } -solana-vote-program = { path = "../programs/vote", version = "=1.11.7" } +solana-account-decoder = { path = "../account-decoder", version = "=1.11.8" } +solana-clap-utils = { path = "../clap-utils", version = "=1.11.8" } +solana-cli-config = { path = "../cli-config", version = "=1.11.8" } +solana-client = { path = "../client", version = "=1.11.8" } +solana-sdk = { path = "../sdk", version = "=1.11.8" } +solana-transaction-status = { path = "../transaction-status", version = "=1.11.8" } +solana-vote-program = { path = "../programs/vote", version = "=1.11.8" } spl-memo = { version = "=3.0.1", features = ["no-entrypoint"] } [dev-dependencies] diff --git a/cli/Cargo.toml b/cli/Cargo.toml index e776ee4fa4f4fb..75137d6134b88f 100644 --- a/cli/Cargo.toml +++ b/cli/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-cli" description = "Blockchain, Rebuilt for Scale" -version = "1.11.7" +version = "1.11.8" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -27,29 +27,29 @@ semver = "1.0.10" serde = "1.0.138" serde_derive = "1.0.103" serde_json = "1.0.81" -solana-account-decoder = { path = "../account-decoder", version = "=1.11.7" } -solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.11.7" } -solana-clap-utils = { path = "../clap-utils", version = "=1.11.7" } -solana-cli-config = { path = "../cli-config", version = "=1.11.7" } -solana-cli-output = { path = "../cli-output", version = "=1.11.7" } -solana-client = { path = "../client", version = "=1.11.7" } -solana-config-program = { path = "../programs/config", version = "=1.11.7" } -solana-faucet = { path = "../faucet", version = "=1.11.7" } -solana-logger = { path = "../logger", version = "=1.11.7" } -solana-program-runtime = { path = "../program-runtime", version = "=1.11.7" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.11.7" } -solana-sdk = { path = "../sdk", version = "=1.11.7" } -solana-transaction-status = { path = "../transaction-status", version = "=1.11.7" } -solana-version = { path = "../version", version = "=1.11.7" } -solana-vote-program = { path = "../programs/vote", version = "=1.11.7" } +solana-account-decoder = { path = "../account-decoder", version = "=1.11.8" } +solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.11.8" } +solana-clap-utils = { path = "../clap-utils", version = "=1.11.8" } +solana-cli-config = { path = "../cli-config", version = "=1.11.8" } +solana-cli-output = { path = "../cli-output", version = "=1.11.8" } +solana-client = { path = "../client", version = "=1.11.8" } +solana-config-program = { path = "../programs/config", version = "=1.11.8" } +solana-faucet = { path = "../faucet", version = "=1.11.8" } +solana-logger = { path = "../logger", version = "=1.11.8" } +solana-program-runtime = { path = "../program-runtime", version = "=1.11.8" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.11.8" } +solana-sdk = { path = "../sdk", version = "=1.11.8" } +solana-transaction-status = { path = "../transaction-status", version = "=1.11.8" } +solana-version = { path = "../version", version = "=1.11.8" } +solana-vote-program = { path = "../programs/vote", version = "=1.11.8" } solana_rbpf = "=0.2.31" spl-memo = { version = "=3.0.1", features = ["no-entrypoint"] } thiserror = "1.0.31" tiny-bip39 = "0.8.2" [dev-dependencies] -solana-streamer = { path = "../streamer", version = "=1.11.7" } -solana-test-validator = { path = "../test-validator", version = "=1.11.7" } +solana-streamer = { path = "../streamer", version = "=1.11.8" } +solana-test-validator = { path = "../test-validator", version = "=1.11.8" } tempfile = "3.3.0" [[bin]] diff --git a/client-test/Cargo.toml b/client-test/Cargo.toml index 919fcc0e2fe615..96ee061507b0ce 100644 --- a/client-test/Cargo.toml +++ b/client-test/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-client-test" -version = "1.11.7" +version = "1.11.8" description = "Solana RPC Test" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,25 +14,25 @@ publish = false futures-util = "0.3.21" serde_json = "1.0.81" serial_test = "0.8.0" -solana-client = { path = "../client", version = "=1.11.7" } -solana-ledger = { path = "../ledger", version = "=1.11.7" } -solana-measure = { path = "../measure", version = "=1.11.7" } -solana-merkle-tree = { path = "../merkle-tree", version = "=1.11.7" } -solana-metrics = { path = "../metrics", version = "=1.11.7" } -solana-perf = { path = "../perf", version = "=1.11.7" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.11.7" } -solana-rpc = { path = "../rpc", version = "=1.11.7" } -solana-runtime = { path = "../runtime", version = "=1.11.7" } -solana-sdk = { path = "../sdk", version = "=1.11.7" } -solana-streamer = { path = "../streamer", version = "=1.11.7" } -solana-test-validator = { path = "../test-validator", version = "=1.11.7" } -solana-transaction-status = { path = "../transaction-status", version = "=1.11.7" } -solana-version = { path = "../version", version = "=1.11.7" } +solana-client = { path = "../client", version = "=1.11.8" } +solana-ledger = { path = "../ledger", version = "=1.11.8" } +solana-measure = { path = "../measure", version = "=1.11.8" } +solana-merkle-tree = { path = "../merkle-tree", version = "=1.11.8" } +solana-metrics = { path = "../metrics", version = "=1.11.8" } +solana-perf = { path = "../perf", version = "=1.11.8" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.11.8" } +solana-rpc = { path = "../rpc", version = "=1.11.8" } +solana-runtime = { path = "../runtime", version = "=1.11.8" } +solana-sdk = { path = "../sdk", version = "=1.11.8" } +solana-streamer = { path = "../streamer", version = "=1.11.8" } +solana-test-validator = { path = "../test-validator", version = "=1.11.8" } +solana-transaction-status = { path = "../transaction-status", version = "=1.11.8" } +solana-version = { path = "../version", version = "=1.11.8" } systemstat = "0.1.11" tokio = { version = "~1.14.1", features = ["full"] } [dev-dependencies] -solana-logger = { path = "../logger", version = "=1.11.7" } +solana-logger = { path = "../logger", version = "=1.11.8" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/client/Cargo.toml b/client/Cargo.toml index 6c38d59a23423e..fb9946708d8b1b 100644 --- a/client/Cargo.toml +++ b/client/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-client" -version = "1.11.7" +version = "1.11.8" description = "Solana Client" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -38,17 +38,17 @@ semver = "1.0.10" serde = "1.0.138" serde_derive = "1.0.103" serde_json = "1.0.81" -solana-account-decoder = { path = "../account-decoder", version = "=1.11.7" } -solana-clap-utils = { path = "../clap-utils", version = "=1.11.7" } -solana-faucet = { path = "../faucet", version = "=1.11.7" } -solana-measure = { path = "../measure", version = "=1.11.7" } -solana-metrics = { path = "../metrics", version = "=1.11.7" } -solana-net-utils = { path = "../net-utils", version = "=1.11.7" } -solana-sdk = { path = "../sdk", version = "=1.11.7" } -solana-streamer = { path = "../streamer", version = "=1.11.7" } -solana-transaction-status = { path = "../transaction-status", version = "=1.11.7" } -solana-version = { path = "../version", version = "=1.11.7" } -solana-vote-program = { path = "../programs/vote", version = "=1.11.7" } +solana-account-decoder = { path = "../account-decoder", version = "=1.11.8" } +solana-clap-utils = { path = "../clap-utils", version = "=1.11.8" } +solana-faucet = { path = "../faucet", version = "=1.11.8" } +solana-measure = { path = "../measure", version = "=1.11.8" } +solana-metrics = { path = "../metrics", version = "=1.11.8" } +solana-net-utils = { path = "../net-utils", version = "=1.11.8" } +solana-sdk = { path = "../sdk", version = "=1.11.8" } +solana-streamer = { path = "../streamer", version = "=1.11.8" } +solana-transaction-status = { path = "../transaction-status", version = "=1.11.8" } +solana-version = { path = "../version", version = "=1.11.8" } +solana-vote-program = { path = "../programs/vote", version = "=1.11.8" } spl-token-2022 = { version = "=0.4.2", features = ["no-entrypoint"] } thiserror = "1.0" tokio = { version = "1", features = ["full"] } @@ -61,8 +61,8 @@ url = "2.2.2" anyhow = "1.0.58" assert_matches = "1.5.0" jsonrpc-http-server = "18.0.0" -solana-logger = { path = "../logger", version = "=1.11.7" } -solana-perf = { path = "../perf", version = "=1.11.7" } +solana-logger = { path = "../logger", version = "=1.11.8" } +solana-perf = { path = "../perf", version = "=1.11.8" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/core/Cargo.toml b/core/Cargo.toml index 19965e0dc7ef18..5f61123db0111f 100644 --- a/core/Cargo.toml +++ b/core/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "solana-core" description = "Blockchain, Rebuilt for Scale" -version = "1.11.7" +version = "1.11.8" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-core" readme = "../README.md" @@ -35,30 +35,30 @@ rand_chacha = "0.2.2" rayon = "1.5.3" serde = "1.0.138" serde_derive = "1.0.103" -solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.11.7" } -solana-bloom = { path = "../bloom", version = "=1.11.7" } -solana-client = { path = "../client", version = "=1.11.7" } -solana-entry = { path = "../entry", version = "=1.11.7" } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.11.7" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.11.7" } -solana-geyser-plugin-manager = { path = "../geyser-plugin-manager", version = "=1.11.7" } -solana-gossip = { path = "../gossip", version = "=1.11.7" } -solana-ledger = { path = "../ledger", version = "=1.11.7" } -solana-measure = { path = "../measure", version = "=1.11.7" } -solana-metrics = { path = "../metrics", version = "=1.11.7" } -solana-net-utils = { path = "../net-utils", version = "=1.11.7" } -solana-perf = { path = "../perf", version = "=1.11.7" } -solana-poh = { path = "../poh", version = "=1.11.7" } -solana-program-runtime = { path = "../program-runtime", version = "=1.11.7" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.11.7" } -solana-rpc = { path = "../rpc", version = "=1.11.7" } -solana-runtime = { path = "../runtime", version = "=1.11.7" } -solana-sdk = { path = "../sdk", version = "=1.11.7" } -solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.11.7" } -solana-streamer = { path = "../streamer", version = "=1.11.7" } -solana-transaction-status = { path = "../transaction-status", version = "=1.11.7" } -solana-version = { path = "../version", version = "=1.11.7" } -solana-vote-program = { path = "../programs/vote", version = "=1.11.7" } +solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.11.8" } +solana-bloom = { path = "../bloom", version = "=1.11.8" } +solana-client = { path = "../client", version = "=1.11.8" } +solana-entry = { path = "../entry", version = "=1.11.8" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.11.8" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.11.8" } +solana-geyser-plugin-manager = { path = "../geyser-plugin-manager", version = "=1.11.8" } +solana-gossip = { path = "../gossip", version = "=1.11.8" } +solana-ledger = { path = "../ledger", version = "=1.11.8" } +solana-measure = { path = "../measure", version = "=1.11.8" } +solana-metrics = { path = "../metrics", version = "=1.11.8" } +solana-net-utils = { path = "../net-utils", version = "=1.11.8" } +solana-perf = { path = "../perf", version = "=1.11.8" } +solana-poh = { path = "../poh", version = "=1.11.8" } +solana-program-runtime = { path = "../program-runtime", version = "=1.11.8" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.11.8" } +solana-rpc = { path = "../rpc", version = "=1.11.8" } +solana-runtime = { path = "../runtime", version = "=1.11.8" } +solana-sdk = { path = "../sdk", version = "=1.11.8" } +solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.11.8" } +solana-streamer = { path = "../streamer", version = "=1.11.8" } +solana-transaction-status = { path = "../transaction-status", version = "=1.11.8" } +solana-version = { path = "../version", version = "=1.11.8" } +solana-vote-program = { path = "../programs/vote", version = "=1.11.8" } sys-info = "0.9.1" tempfile = "3.3.0" thiserror = "1.0" @@ -70,9 +70,9 @@ matches = "0.1.9" raptorq = "1.7.0" serde_json = "1.0.81" serial_test = "0.8.0" -solana-logger = { path = "../logger", version = "=1.11.7" } -solana-program-runtime = { path = "../program-runtime", version = "=1.11.7" } -solana-stake-program = { path = "../programs/stake", version = "=1.11.7" } +solana-logger = { path = "../logger", version = "=1.11.8" } +solana-program-runtime = { path = "../program-runtime", version = "=1.11.8" } +solana-stake-program = { path = "../programs/stake", version = "=1.11.8" } static_assertions = "1.1.0" systemstat = "0.1.11" test-case = "2.1.0" diff --git a/docs/src/developing/clients/jsonrpc-api.md b/docs/src/developing/clients/jsonrpc-api.md index 1424f7fca13d69..09f2517c469555 100644 --- a/docs/src/developing/clients/jsonrpc-api.md +++ b/docs/src/developing/clients/jsonrpc-api.md @@ -1909,7 +1909,7 @@ Returns all accounts owned by the provided program Pubkey - `offset: ` - offset into program account data to start comparison - `bytes: ` - data to match, as encoded string - `encoding: ` - encoding for filter `bytes` data, either "base58" or "base64". Data is limited in size to 128 or fewer decoded bytes. - **NEW: This field, and base64 support generally, is only available in solana-core v1.11.7 or newer. Please omit when querying nodes on earlier versions** + **NEW: This field, and base64 support generally, is only available in solana-core v1.11.8 or newer. Please omit when querying nodes on earlier versions** - `dataSize: ` - compares the program account data length with the provided data size @@ -3128,7 +3128,7 @@ curl http://localhost:8899 -X POST -H "Content-Type: application/json" -d ' Result: ```json -{ "jsonrpc": "2.0", "result": { "solana-core": "1.11.7" }, "id": 1 } +{ "jsonrpc": "2.0", "result": { "solana-core": "1.11.8" }, "id": 1 } ``` ### getVoteAccounts diff --git a/dos/Cargo.toml b/dos/Cargo.toml index de3dfa8317bfff..0788515553446e 100644 --- a/dos/Cargo.toml +++ b/dos/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-dos" -version = "1.11.7" +version = "1.11.8" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -17,23 +17,23 @@ itertools = "0.10.3" log = "0.4.17" rand = "0.7.0" serde = "1.0.138" -solana-bench-tps = { path = "../bench-tps", version = "=1.11.7" } -solana-client = { path = "../client", version = "=1.11.7" } -solana-core = { path = "../core", version = "=1.11.7" } -solana-faucet = { path = "../faucet", version = "=1.11.7" } -solana-gossip = { path = "../gossip", version = "=1.11.7" } -solana-logger = { path = "../logger", version = "=1.11.7" } -solana-measure = { path = "../measure", version = "=1.11.7" } -solana-net-utils = { path = "../net-utils", version = "=1.11.7" } -solana-perf = { path = "../perf", version = "=1.11.7" } -solana-rpc = { path = "../rpc", version = "=1.11.7" } -solana-sdk = { path = "../sdk", version = "=1.11.7" } -solana-streamer = { path = "../streamer", version = "=1.11.7" } -solana-version = { path = "../version", version = "=1.11.7" } +solana-bench-tps = { path = "../bench-tps", version = "=1.11.8" } +solana-client = { path = "../client", version = "=1.11.8" } +solana-core = { path = "../core", version = "=1.11.8" } +solana-faucet = { path = "../faucet", version = "=1.11.8" } +solana-gossip = { path = "../gossip", version = "=1.11.8" } +solana-logger = { path = "../logger", version = "=1.11.8" } +solana-measure = { path = "../measure", version = "=1.11.8" } +solana-net-utils = { path = "../net-utils", version = "=1.11.8" } +solana-perf = { path = "../perf", version = "=1.11.8" } +solana-rpc = { path = "../rpc", version = "=1.11.8" } +solana-sdk = { path = "../sdk", version = "=1.11.8" } +solana-streamer = { path = "../streamer", version = "=1.11.8" } +solana-version = { path = "../version", version = "=1.11.8" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] [dev-dependencies] serial_test = "0.8.0" -solana-local-cluster = { path = "../local-cluster", version = "=1.11.7" } +solana-local-cluster = { path = "../local-cluster", version = "=1.11.8" } diff --git a/download-utils/Cargo.toml b/download-utils/Cargo.toml index 2779adddbc4a63..a1e15cbedfd930 100644 --- a/download-utils/Cargo.toml +++ b/download-utils/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-download-utils" -version = "1.11.7" +version = "1.11.8" description = "Solana Download Utils" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,8 +14,8 @@ console = "0.15.0" indicatif = "0.16.2" log = "0.4.17" reqwest = { version = "0.11.11", default-features = false, features = ["blocking", "brotli", "deflate", "gzip", "rustls-tls", "json"] } -solana-runtime = { path = "../runtime", version = "=1.11.7" } -solana-sdk = { path = "../sdk", version = "=1.11.7" } +solana-runtime = { path = "../runtime", version = "=1.11.8" } +solana-sdk = { path = "../sdk", version = "=1.11.8" } [lib] crate-type = ["lib"] diff --git a/entry/Cargo.toml b/entry/Cargo.toml index cec7c195210d9f..b28932f9f2fc03 100644 --- a/entry/Cargo.toml +++ b/entry/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-entry" -version = "1.11.7" +version = "1.11.8" description = "Solana Entry" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -19,16 +19,16 @@ log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" serde = "1.0.138" -solana-measure = { path = "../measure", version = "=1.11.7" } -solana-merkle-tree = { path = "../merkle-tree", version = "=1.11.7" } -solana-metrics = { path = "../metrics", version = "=1.11.7" } -solana-perf = { path = "../perf", version = "=1.11.7" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.11.7" } -solana-sdk = { path = "../sdk", version = "=1.11.7" } +solana-measure = { path = "../measure", version = "=1.11.8" } +solana-merkle-tree = { path = "../merkle-tree", version = "=1.11.8" } +solana-metrics = { path = "../metrics", version = "=1.11.8" } +solana-perf = { path = "../perf", version = "=1.11.8" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.11.8" } +solana-sdk = { path = "../sdk", version = "=1.11.8" } [dev-dependencies] matches = "0.1.9" -solana-logger = { path = "../logger", version = "=1.11.7" } +solana-logger = { path = "../logger", version = "=1.11.8" } [lib] crate-type = ["lib"] diff --git a/faucet/Cargo.toml b/faucet/Cargo.toml index 372c9f2a723e40..ac13d72864fe74 100644 --- a/faucet/Cargo.toml +++ b/faucet/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-faucet" -version = "1.11.7" +version = "1.11.8" description = "Solana Faucet" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -17,12 +17,12 @@ crossbeam-channel = "0.5" log = "0.4.17" serde = "1.0.138" serde_derive = "1.0.103" -solana-clap-utils = { path = "../clap-utils", version = "=1.11.7" } -solana-cli-config = { path = "../cli-config", version = "=1.11.7" } -solana-logger = { path = "../logger", version = "=1.11.7" } -solana-metrics = { path = "../metrics", version = "=1.11.7" } -solana-sdk = { path = "../sdk", version = "=1.11.7" } -solana-version = { path = "../version", version = "=1.11.7" } +solana-clap-utils = { path = "../clap-utils", version = "=1.11.8" } +solana-cli-config = { path = "../cli-config", version = "=1.11.8" } +solana-logger = { path = "../logger", version = "=1.11.8" } +solana-metrics = { path = "../metrics", version = "=1.11.8" } +solana-sdk = { path = "../sdk", version = "=1.11.8" } +solana-version = { path = "../version", version = "=1.11.8" } spl-memo = { version = "=3.0.1", features = ["no-entrypoint"] } thiserror = "1.0" tokio = { version = "1", features = ["full"] } diff --git a/frozen-abi/Cargo.toml b/frozen-abi/Cargo.toml index e381b33d5849ed..55db5ac60aedd8 100644 --- a/frozen-abi/Cargo.toml +++ b/frozen-abi/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-frozen-abi" -version = "1.11.7" +version = "1.11.8" description = "Solana Frozen ABI" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -20,7 +20,7 @@ serde_bytes = "0.11" serde_derive = "1.0" serde_json = "1.0" sha2 = "0.10.2" -solana-frozen-abi-macro = { path = "macro", version = "=1.11.7" } +solana-frozen-abi-macro = { path = "macro", version = "=1.11.8" } thiserror = "1.0" [target.'cfg(not(target_os = "solana"))'.dependencies] @@ -43,7 +43,7 @@ rand_core = { version = "0.6.3", features = ["alloc", "getrandom", "std"] } subtle = { version = "2.4.1", features = ["default", "i128", "std"] } [target.'cfg(not(target_os = "solana"))'.dev-dependencies] -solana-logger = { path = "../logger", version = "=1.11.7" } +solana-logger = { path = "../logger", version = "=1.11.8" } [build-dependencies] rustc_version = "0.4" diff --git a/frozen-abi/macro/Cargo.toml b/frozen-abi/macro/Cargo.toml index b36b2e1e28d3d0..2f3f5fa2681542 100644 --- a/frozen-abi/macro/Cargo.toml +++ b/frozen-abi/macro/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-frozen-abi-macro" -version = "1.11.7" +version = "1.11.8" description = "Solana Frozen ABI Macro" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/genesis-utils/Cargo.toml b/genesis-utils/Cargo.toml index 4b55dc2f188fb4..a280c7bc06d925 100644 --- a/genesis-utils/Cargo.toml +++ b/genesis-utils/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-genesis-utils" -version = "1.11.7" +version = "1.11.8" description = "Solana Genesis Utils" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,9 +10,9 @@ documentation = "https://docs.rs/solana-download-utils" edition = "2021" [dependencies] -solana-download-utils = { path = "../download-utils", version = "=1.11.7" } -solana-runtime = { path = "../runtime", version = "=1.11.7" } -solana-sdk = { path = "../sdk", version = "=1.11.7" } +solana-download-utils = { path = "../download-utils", version = "=1.11.8" } +solana-runtime = { path = "../runtime", version = "=1.11.8" } +solana-sdk = { path = "../sdk", version = "=1.11.8" } [lib] crate-type = ["lib"] diff --git a/genesis/Cargo.toml b/genesis/Cargo.toml index dda0dddf6aafef..c82ef46e4d632e 100644 --- a/genesis/Cargo.toml +++ b/genesis/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-genesis" description = "Blockchain, Rebuilt for Scale" -version = "1.11.7" +version = "1.11.8" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -15,16 +15,16 @@ clap = "2.33.1" serde = "1.0.138" serde_json = "1.0.81" serde_yaml = "0.8.26" -solana-clap-utils = { path = "../clap-utils", version = "=1.11.7" } -solana-cli-config = { path = "../cli-config", version = "=1.11.7" } -solana-entry = { path = "../entry", version = "=1.11.7" } -solana-ledger = { path = "../ledger", version = "=1.11.7" } -solana-logger = { path = "../logger", version = "=1.11.7" } -solana-runtime = { path = "../runtime", version = "=1.11.7" } -solana-sdk = { path = "../sdk", version = "=1.11.7" } -solana-stake-program = { path = "../programs/stake", version = "=1.11.7" } -solana-version = { path = "../version", version = "=1.11.7" } -solana-vote-program = { path = "../programs/vote", version = "=1.11.7" } +solana-clap-utils = { path = "../clap-utils", version = "=1.11.8" } +solana-cli-config = { path = "../cli-config", version = "=1.11.8" } +solana-entry = { path = "../entry", version = "=1.11.8" } +solana-ledger = { path = "../ledger", version = "=1.11.8" } +solana-logger = { path = "../logger", version = "=1.11.8" } +solana-runtime = { path = "../runtime", version = "=1.11.8" } +solana-sdk = { path = "../sdk", version = "=1.11.8" } +solana-stake-program = { path = "../programs/stake", version = "=1.11.8" } +solana-version = { path = "../version", version = "=1.11.8" } +solana-vote-program = { path = "../programs/vote", version = "=1.11.8" } tempfile = "3.3.0" [[bin]] diff --git a/geyser-plugin-interface/Cargo.toml b/geyser-plugin-interface/Cargo.toml index 6cc7988f46d47e..254f930194253e 100644 --- a/geyser-plugin-interface/Cargo.toml +++ b/geyser-plugin-interface/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-geyser-plugin-interface" description = "The Solana Geyser plugin interface." -version = "1.11.7" +version = "1.11.8" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -11,8 +11,8 @@ documentation = "https://docs.rs/solana-geyser-plugin-interface" [dependencies] log = "0.4.17" -solana-sdk = { path = "../sdk", version = "=1.11.7" } -solana-transaction-status = { path = "../transaction-status", version = "=1.11.7" } +solana-sdk = { path = "../sdk", version = "=1.11.8" } +solana-transaction-status = { path = "../transaction-status", version = "=1.11.8" } thiserror = "1.0.31" [package.metadata.docs.rs] diff --git a/geyser-plugin-manager/Cargo.toml b/geyser-plugin-manager/Cargo.toml index 8bc032469944ef..0d1beeffa99e48 100644 --- a/geyser-plugin-manager/Cargo.toml +++ b/geyser-plugin-manager/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-geyser-plugin-manager" description = "The Solana Geyser plugin manager." -version = "1.11.7" +version = "1.11.8" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -16,13 +16,13 @@ json5 = "0.4.1" libloading = "0.7.3" log = "0.4.17" serde_json = "1.0.81" -solana-geyser-plugin-interface = { path = "../geyser-plugin-interface", version = "=1.11.7" } -solana-measure = { path = "../measure", version = "=1.11.7" } -solana-metrics = { path = "../metrics", version = "=1.11.7" } -solana-rpc = { path = "../rpc", version = "=1.11.7" } -solana-runtime = { path = "../runtime", version = "=1.11.7" } -solana-sdk = { path = "../sdk", version = "=1.11.7" } -solana-transaction-status = { path = "../transaction-status", version = "=1.11.7" } +solana-geyser-plugin-interface = { path = "../geyser-plugin-interface", version = "=1.11.8" } +solana-measure = { path = "../measure", version = "=1.11.8" } +solana-metrics = { path = "../metrics", version = "=1.11.8" } +solana-rpc = { path = "../rpc", version = "=1.11.8" } +solana-runtime = { path = "../runtime", version = "=1.11.8" } +solana-sdk = { path = "../sdk", version = "=1.11.8" } +solana-transaction-status = { path = "../transaction-status", version = "=1.11.8" } thiserror = "1.0.31" [package.metadata.docs.rs] diff --git a/gossip/Cargo.toml b/gossip/Cargo.toml index de5fb6ec27e1d8..f8c813acadaf0d 100644 --- a/gossip/Cargo.toml +++ b/gossip/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-gossip" description = "Blockchain, Rebuilt for Scale" -version = "1.11.7" +version = "1.11.8" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -27,24 +27,24 @@ rayon = "1.5.3" serde = "1.0.138" serde_bytes = "0.11" serde_derive = "1.0.103" -solana-bloom = { path = "../bloom", version = "=1.11.7" } -solana-clap-utils = { path = "../clap-utils", version = "=1.11.7" } -solana-client = { path = "../client", version = "=1.11.7" } -solana-entry = { path = "../entry", version = "=1.11.7" } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.11.7" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.11.7" } -solana-ledger = { path = "../ledger", version = "=1.11.7" } -solana-logger = { path = "../logger", version = "=1.11.7" } -solana-measure = { path = "../measure", version = "=1.11.7" } -solana-metrics = { path = "../metrics", version = "=1.11.7" } -solana-net-utils = { path = "../net-utils", version = "=1.11.7" } -solana-perf = { path = "../perf", version = "=1.11.7" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.11.7" } -solana-runtime = { path = "../runtime", version = "=1.11.7" } -solana-sdk = { path = "../sdk", version = "=1.11.7" } -solana-streamer = { path = "../streamer", version = "=1.11.7" } -solana-version = { path = "../version", version = "=1.11.7" } -solana-vote-program = { path = "../programs/vote", version = "=1.11.7" } +solana-bloom = { path = "../bloom", version = "=1.11.8" } +solana-clap-utils = { path = "../clap-utils", version = "=1.11.8" } +solana-client = { path = "../client", version = "=1.11.8" } +solana-entry = { path = "../entry", version = "=1.11.8" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.11.8" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.11.8" } +solana-ledger = { path = "../ledger", version = "=1.11.8" } +solana-logger = { path = "../logger", version = "=1.11.8" } +solana-measure = { path = "../measure", version = "=1.11.8" } +solana-metrics = { path = "../metrics", version = "=1.11.8" } +solana-net-utils = { path = "../net-utils", version = "=1.11.8" } +solana-perf = { path = "../perf", version = "=1.11.8" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.11.8" } +solana-runtime = { path = "../runtime", version = "=1.11.8" } +solana-sdk = { path = "../sdk", version = "=1.11.8" } +solana-streamer = { path = "../streamer", version = "=1.11.8" } +solana-version = { path = "../version", version = "=1.11.8" } +solana-vote-program = { path = "../programs/vote", version = "=1.11.8" } thiserror = "1.0" [dev-dependencies] diff --git a/install/Cargo.toml b/install/Cargo.toml index d929daaf74c1e8..e0b5c066eda067 100644 --- a/install/Cargo.toml +++ b/install/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-install" description = "The solana cluster software installer" -version = "1.11.7" +version = "1.11.8" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -26,12 +26,12 @@ reqwest = { version = "0.11.11", default-features = false, features = ["blocking semver = "1.0.10" serde = { version = "1.0.138", features = ["derive"] } serde_yaml = "0.8.26" -solana-clap-utils = { path = "../clap-utils", version = "=1.11.7" } -solana-client = { path = "../client", version = "=1.11.7" } -solana-config-program = { path = "../programs/config", version = "=1.11.7" } -solana-logger = { path = "../logger", version = "=1.11.7" } -solana-sdk = { path = "../sdk", version = "=1.11.7" } -solana-version = { path = "../version", version = "=1.11.7" } +solana-clap-utils = { path = "../clap-utils", version = "=1.11.8" } +solana-client = { path = "../client", version = "=1.11.8" } +solana-config-program = { path = "../programs/config", version = "=1.11.8" } +solana-logger = { path = "../logger", version = "=1.11.8" } +solana-sdk = { path = "../sdk", version = "=1.11.8" } +solana-version = { path = "../version", version = "=1.11.8" } tar = "0.4.38" tempfile = "3.3.0" url = "2.2.2" diff --git a/keygen/Cargo.toml b/keygen/Cargo.toml index fba3b5c4552c0c..15c232f9fd76cc 100644 --- a/keygen/Cargo.toml +++ b/keygen/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-keygen" -version = "1.11.7" +version = "1.11.8" description = "Solana key generation utility" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,11 +14,11 @@ bs58 = "0.4.0" clap = { version = "3.1.5", features = ["cargo"] } dirs-next = "2.0.0" num_cpus = "1.13.1" -solana-clap-v3-utils = { path = "../clap-v3-utils", version = "=1.11.7" } -solana-cli-config = { path = "../cli-config", version = "=1.11.7" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.11.7" } -solana-sdk = { path = "../sdk", version = "=1.11.7" } -solana-version = { path = "../version", version = "=1.11.7" } +solana-clap-v3-utils = { path = "../clap-v3-utils", version = "=1.11.8" } +solana-cli-config = { path = "../cli-config", version = "=1.11.8" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.11.8" } +solana-sdk = { path = "../sdk", version = "=1.11.8" } +solana-version = { path = "../version", version = "=1.11.8" } tiny-bip39 = "0.8.2" [[bin]] diff --git a/ledger-tool/Cargo.toml b/ledger-tool/Cargo.toml index 6f59beeb92f026..bf17adbc611888 100644 --- a/ledger-tool/Cargo.toml +++ b/ledger-tool/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-ledger-tool" description = "Blockchain, Rebuilt for Scale" -version = "1.11.7" +version = "1.11.8" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -22,20 +22,20 @@ log = { version = "0.4.17" } regex = "1" serde = { version = "1.0", features = ["derive"] } serde_json = "1.0.81" -solana-clap-utils = { path = "../clap-utils", version = "=1.11.7" } -solana-cli-output = { path = "../cli-output", version = "=1.11.7" } -solana-core = { path = "../core", version = "=1.11.7" } -solana-entry = { path = "../entry", version = "=1.11.7" } -solana-ledger = { path = "../ledger", version = "=1.11.7" } -solana-logger = { path = "../logger", version = "=1.11.7" } -solana-measure = { path = "../measure", version = "=1.11.7" } -solana-runtime = { path = "../runtime", version = "=1.11.7" } -solana-sdk = { path = "../sdk", version = "=1.11.7" } -solana-stake-program = { path = "../programs/stake", version = "=1.11.7" } -solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.11.7" } -solana-transaction-status = { path = "../transaction-status", version = "=1.11.7" } -solana-version = { path = "../version", version = "=1.11.7" } -solana-vote-program = { path = "../programs/vote", version = "=1.11.7" } +solana-clap-utils = { path = "../clap-utils", version = "=1.11.8" } +solana-cli-output = { path = "../cli-output", version = "=1.11.8" } +solana-core = { path = "../core", version = "=1.11.8" } +solana-entry = { path = "../entry", version = "=1.11.8" } +solana-ledger = { path = "../ledger", version = "=1.11.8" } +solana-logger = { path = "../logger", version = "=1.11.8" } +solana-measure = { path = "../measure", version = "=1.11.8" } +solana-runtime = { path = "../runtime", version = "=1.11.8" } +solana-sdk = { path = "../sdk", version = "=1.11.8" } +solana-stake-program = { path = "../programs/stake", version = "=1.11.8" } +solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.11.8" } +solana-transaction-status = { path = "../transaction-status", version = "=1.11.8" } +solana-version = { path = "../version", version = "=1.11.8" } +solana-vote-program = { path = "../programs/vote", version = "=1.11.8" } tokio = { version = "1", features = ["full"] } [target.'cfg(not(target_env = "msvc"))'.dependencies] diff --git a/ledger/Cargo.toml b/ledger/Cargo.toml index b38945e62321ac..b9c1e344a83a6b 100644 --- a/ledger/Cargo.toml +++ b/ledger/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-ledger" -version = "1.11.7" +version = "1.11.8" description = "Solana ledger" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -34,23 +34,23 @@ reed-solomon-erasure = { version = "5.0.3", features = ["simd-accel"] } serde = "1.0.138" serde_bytes = "0.11.6" sha2 = "0.10.2" -solana-account-decoder = { path = "../account-decoder", version = "=1.11.7" } -solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.11.7" } -solana-entry = { path = "../entry", version = "=1.11.7" } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.11.7" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.11.7" } -solana-measure = { path = "../measure", version = "=1.11.7" } -solana-metrics = { path = "../metrics", version = "=1.11.7" } -solana-perf = { path = "../perf", version = "=1.11.7" } -solana-program-runtime = { path = "../program-runtime", version = "=1.11.7" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.11.7" } -solana-runtime = { path = "../runtime", version = "=1.11.7" } -solana-sdk = { path = "../sdk", version = "=1.11.7" } -solana-stake-program = { path = "../programs/stake", version = "=1.11.7" } -solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.11.7" } -solana-storage-proto = { path = "../storage-proto", version = "=1.11.7" } -solana-transaction-status = { path = "../transaction-status", version = "=1.11.7" } -solana-vote-program = { path = "../programs/vote", version = "=1.11.7" } +solana-account-decoder = { path = "../account-decoder", version = "=1.11.8" } +solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.11.8" } +solana-entry = { path = "../entry", version = "=1.11.8" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.11.8" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.11.8" } +solana-measure = { path = "../measure", version = "=1.11.8" } +solana-metrics = { path = "../metrics", version = "=1.11.8" } +solana-perf = { path = "../perf", version = "=1.11.8" } +solana-program-runtime = { path = "../program-runtime", version = "=1.11.8" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.11.8" } +solana-runtime = { path = "../runtime", version = "=1.11.8" } +solana-sdk = { path = "../sdk", version = "=1.11.8" } +solana-stake-program = { path = "../programs/stake", version = "=1.11.8" } +solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.11.8" } +solana-storage-proto = { path = "../storage-proto", version = "=1.11.8" } +solana-transaction-status = { path = "../transaction-status", version = "=1.11.8" } +solana-vote-program = { path = "../programs/vote", version = "=1.11.8" } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } spl-token-2022 = { version = "=0.4.2", features = ["no-entrypoint"] } static_assertions = "1.1.0" @@ -71,8 +71,8 @@ features = ["lz4"] assert_matches = "1.5.0" bs58 = "0.4.0" matches = "0.1.9" -solana-account-decoder = { path = "../account-decoder", version = "=1.11.7" } -solana-logger = { path = "../logger", version = "=1.11.7" } +solana-account-decoder = { path = "../account-decoder", version = "=1.11.8" } +solana-logger = { path = "../logger", version = "=1.11.8" } [build-dependencies] rustc_version = "0.4" diff --git a/local-cluster/Cargo.toml b/local-cluster/Cargo.toml index ac1e5bd62b6afb..c08aa50ad64850 100644 --- a/local-cluster/Cargo.toml +++ b/local-cluster/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-local-cluster" description = "Blockchain, Rebuilt for Scale" -version = "1.11.7" +version = "1.11.8" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -16,25 +16,25 @@ itertools = "0.10.3" log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" -solana-client = { path = "../client", version = "=1.11.7" } -solana-config-program = { path = "../programs/config", version = "=1.11.7" } -solana-core = { path = "../core", version = "=1.11.7" } -solana-entry = { path = "../entry", version = "=1.11.7" } -solana-gossip = { path = "../gossip", version = "=1.11.7" } -solana-ledger = { path = "../ledger", version = "=1.11.7" } -solana-runtime = { path = "../runtime", version = "=1.11.7" } -solana-sdk = { path = "../sdk", version = "=1.11.7" } -solana-stake-program = { path = "../programs/stake", version = "=1.11.7" } -solana-streamer = { path = "../streamer", version = "=1.11.7" } -solana-vote-program = { path = "../programs/vote", version = "=1.11.7" } +solana-client = { path = "../client", version = "=1.11.8" } +solana-config-program = { path = "../programs/config", version = "=1.11.8" } +solana-core = { path = "../core", version = "=1.11.8" } +solana-entry = { path = "../entry", version = "=1.11.8" } +solana-gossip = { path = "../gossip", version = "=1.11.8" } +solana-ledger = { path = "../ledger", version = "=1.11.8" } +solana-runtime = { path = "../runtime", version = "=1.11.8" } +solana-sdk = { path = "../sdk", version = "=1.11.8" } +solana-stake-program = { path = "../programs/stake", version = "=1.11.8" } +solana-streamer = { path = "../streamer", version = "=1.11.8" } +solana-vote-program = { path = "../programs/vote", version = "=1.11.8" } tempfile = "3.3.0" [dev-dependencies] assert_matches = "1.5.0" gag = "1.0.0" serial_test = "0.8.0" -solana-download-utils = { path = "../download-utils", version = "=1.11.7" } -solana-logger = { path = "../logger", version = "=1.11.7" } +solana-download-utils = { path = "../download-utils", version = "=1.11.8" } +solana-logger = { path = "../logger", version = "=1.11.8" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/log-analyzer/Cargo.toml b/log-analyzer/Cargo.toml index 8be2610e24c123..ee1e477f28c949 100644 --- a/log-analyzer/Cargo.toml +++ b/log-analyzer/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-log-analyzer" description = "The solana cluster network analysis tool" -version = "1.11.7" +version = "1.11.8" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,8 +14,8 @@ byte-unit = "4.0.14" clap = { version = "3.1.5", features = ["cargo"] } serde = "1.0.138" serde_json = "1.0.81" -solana-logger = { path = "../logger", version = "=1.11.7" } -solana-version = { path = "../version", version = "=1.11.7" } +solana-logger = { path = "../logger", version = "=1.11.8" } +solana-version = { path = "../version", version = "=1.11.8" } [[bin]] name = "solana-log-analyzer" diff --git a/logger/Cargo.toml b/logger/Cargo.toml index 708b5f9087fbd4..13fa052ae175c6 100644 --- a/logger/Cargo.toml +++ b/logger/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-logger" -version = "1.11.7" +version = "1.11.8" description = "Solana Logger" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/measure/Cargo.toml b/measure/Cargo.toml index cd479a3ff794f0..ef2c34b2a8632c 100644 --- a/measure/Cargo.toml +++ b/measure/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "solana-measure" description = "Blockchain, Rebuilt for Scale" -version = "1.11.7" +version = "1.11.8" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-measure" readme = "../README.md" @@ -12,7 +12,7 @@ edition = "2021" [dependencies] log = "0.4.17" -solana-sdk = { path = "../sdk", version = "=1.11.7" } +solana-sdk = { path = "../sdk", version = "=1.11.8" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/merkle-root-bench/Cargo.toml b/merkle-root-bench/Cargo.toml index a620c5baccb430..6fdcce0a21b3b4 100644 --- a/merkle-root-bench/Cargo.toml +++ b/merkle-root-bench/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-merkle-root-bench" -version = "1.11.7" +version = "1.11.8" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -11,11 +11,11 @@ publish = false [dependencies] clap = "2.33.1" log = "0.4.17" -solana-logger = { path = "../logger", version = "=1.11.7" } -solana-measure = { path = "../measure", version = "=1.11.7" } -solana-runtime = { path = "../runtime", version = "=1.11.7" } -solana-sdk = { path = "../sdk", version = "=1.11.7" } -solana-version = { path = "../version", version = "=1.11.7" } +solana-logger = { path = "../logger", version = "=1.11.8" } +solana-measure = { path = "../measure", version = "=1.11.8" } +solana-runtime = { path = "../runtime", version = "=1.11.8" } +solana-sdk = { path = "../sdk", version = "=1.11.8" } +solana-version = { path = "../version", version = "=1.11.8" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/merkle-tree/Cargo.toml b/merkle-tree/Cargo.toml index b8fa822bd09249..00e45c796b2803 100644 --- a/merkle-tree/Cargo.toml +++ b/merkle-tree/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-merkle-tree" -version = "1.11.7" +version = "1.11.8" description = "Solana Merkle Tree" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -11,7 +11,7 @@ edition = "2021" [dependencies] fast-math = "0.1" -solana-program = { path = "../sdk/program", version = "=1.11.7" } +solana-program = { path = "../sdk/program", version = "=1.11.8" } # This can go once the BPF toolchain target Rust 1.42.0+ [target.bpfel-unknown-unknown.dependencies] diff --git a/metrics/Cargo.toml b/metrics/Cargo.toml index be830458a1d0e2..12e4dacffe4025 100644 --- a/metrics/Cargo.toml +++ b/metrics/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-metrics" -version = "1.11.7" +version = "1.11.8" description = "Solana Metrics" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -15,7 +15,7 @@ gethostname = "0.2.3" lazy_static = "1.4.0" log = "0.4.17" reqwest = { version = "0.11.11", default-features = false, features = ["blocking", "brotli", "deflate", "gzip", "rustls-tls", "json"] } -solana-sdk = { path = "../sdk", version = "=1.11.7" } +solana-sdk = { path = "../sdk", version = "=1.11.8" } [dev-dependencies] env_logger = "0.9.0" diff --git a/net-shaper/Cargo.toml b/net-shaper/Cargo.toml index 7391da43a03370..299c4efd94c9c8 100644 --- a/net-shaper/Cargo.toml +++ b/net-shaper/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-net-shaper" description = "The solana cluster network shaping tool" -version = "1.11.7" +version = "1.11.8" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,7 +14,7 @@ clap = { version = "3.1.5", features = ["cargo"] } rand = "0.7.0" serde = { version = "1.0.138", features = ["derive"] } serde_json = "1.0.81" -solana-logger = { path = "../logger", version = "=1.11.7" } +solana-logger = { path = "../logger", version = "=1.11.8" } [[bin]] name = "solana-net-shaper" diff --git a/net-utils/Cargo.toml b/net-utils/Cargo.toml index 034f29f2dfbf74..dc98e78ca3f3c4 100644 --- a/net-utils/Cargo.toml +++ b/net-utils/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-net-utils" -version = "1.11.7" +version = "1.11.8" description = "Solana Network Utilities" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -19,9 +19,9 @@ rand = "0.7.0" serde = "1.0.138" serde_derive = "1.0.103" socket2 = "0.4.4" -solana-logger = { path = "../logger", version = "=1.11.7" } -solana-sdk = { path = "../sdk", version = "=1.11.7" } -solana-version = { path = "../version", version = "=1.11.7" } +solana-logger = { path = "../logger", version = "=1.11.8" } +solana-sdk = { path = "../sdk", version = "=1.11.8" } +solana-version = { path = "../version", version = "=1.11.8" } tokio = { version = "1", features = ["full"] } url = "2.2.2" diff --git a/notifier/Cargo.toml b/notifier/Cargo.toml index 0a006942e7d122..2bc25d160b674c 100644 --- a/notifier/Cargo.toml +++ b/notifier/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-notifier" -version = "1.11.7" +version = "1.11.8" description = "Solana Notifier" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/perf/Cargo.toml b/perf/Cargo.toml index e3c583b949ef35..c25dda501c5b44 100644 --- a/perf/Cargo.toml +++ b/perf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-perf" -version = "1.11.7" +version = "1.11.8" description = "Solana Performance APIs" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -22,10 +22,10 @@ log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" serde = "1.0.138" -solana-metrics = { path = "../metrics", version = "=1.11.7" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.11.7" } -solana-sdk = { path = "../sdk", version = "=1.11.7" } -solana-vote-program = { path = "../programs/vote", version = "=1.11.7" } +solana-metrics = { path = "../metrics", version = "=1.11.8" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.11.8" } +solana-sdk = { path = "../sdk", version = "=1.11.8" } +solana-vote-program = { path = "../programs/vote", version = "=1.11.8" } [target."cfg(target_os = \"linux\")".dependencies] caps = "0.5.3" @@ -37,7 +37,7 @@ name = "solana_perf" [dev-dependencies] matches = "0.1.9" -solana-logger = { path = "../logger", version = "=1.11.7" } +solana-logger = { path = "../logger", version = "=1.11.8" } [[bench]] name = "sigverify" diff --git a/poh-bench/Cargo.toml b/poh-bench/Cargo.toml index 09305f0700fed9..0384ba188be769 100644 --- a/poh-bench/Cargo.toml +++ b/poh-bench/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-poh-bench" -version = "1.11.7" +version = "1.11.8" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,12 +14,12 @@ clap = { version = "3.1.5", features = ["cargo"] } log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" -solana-entry = { path = "../entry", version = "=1.11.7" } -solana-logger = { path = "../logger", version = "=1.11.7" } -solana-measure = { path = "../measure", version = "=1.11.7" } -solana-perf = { path = "../perf", version = "=1.11.7" } -solana-sdk = { path = "../sdk", version = "=1.11.7" } -solana-version = { path = "../version", version = "=1.11.7" } +solana-entry = { path = "../entry", version = "=1.11.8" } +solana-logger = { path = "../logger", version = "=1.11.8" } +solana-measure = { path = "../measure", version = "=1.11.8" } +solana-perf = { path = "../perf", version = "=1.11.8" } +solana-sdk = { path = "../sdk", version = "=1.11.8" } +solana-version = { path = "../version", version = "=1.11.8" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/poh/Cargo.toml b/poh/Cargo.toml index 1ff6fc28536b90..10a0667b105ac8 100644 --- a/poh/Cargo.toml +++ b/poh/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-poh" -version = "1.11.7" +version = "1.11.8" description = "Solana PoH" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,21 +13,21 @@ edition = "2021" core_affinity = "0.5.10" crossbeam-channel = "0.5" log = "0.4.17" -solana-entry = { path = "../entry", version = "=1.11.7" } -solana-ledger = { path = "../ledger", version = "=1.11.7" } -solana-measure = { path = "../measure", version = "=1.11.7" } -solana-metrics = { path = "../metrics", version = "=1.11.7" } -solana-runtime = { path = "../runtime", version = "=1.11.7" } -solana-sdk = { path = "../sdk", version = "=1.11.7" } -solana-sys-tuner = { path = "../sys-tuner", version = "=1.11.7" } +solana-entry = { path = "../entry", version = "=1.11.8" } +solana-ledger = { path = "../ledger", version = "=1.11.8" } +solana-measure = { path = "../measure", version = "=1.11.8" } +solana-metrics = { path = "../metrics", version = "=1.11.8" } +solana-runtime = { path = "../runtime", version = "=1.11.8" } +solana-sdk = { path = "../sdk", version = "=1.11.8" } +solana-sys-tuner = { path = "../sys-tuner", version = "=1.11.8" } thiserror = "1.0" [dev-dependencies] bincode = "1.3.3" matches = "0.1.9" rand = "0.7.0" -solana-logger = { path = "../logger", version = "=1.11.7" } -solana-perf = { path = "../perf", version = "=1.11.7" } +solana-logger = { path = "../logger", version = "=1.11.8" } +solana-perf = { path = "../perf", version = "=1.11.8" } [lib] crate-type = ["lib"] diff --git a/program-runtime/Cargo.toml b/program-runtime/Cargo.toml index 25db3784b39231..b2af79c72e9f9e 100644 --- a/program-runtime/Cargo.toml +++ b/program-runtime/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-program-runtime" -version = "1.11.7" +version = "1.11.8" description = "Solana program runtime" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -20,16 +20,16 @@ log = "0.4.14" num-derive = { version = "0.3" } num-traits = { version = "0.2" } serde = { version = "1.0.129", features = ["derive", "rc"] } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.11.7" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.11.7" } -solana-measure = { path = "../measure", version = "=1.11.7" } -solana-metrics = { path = "../metrics", version = "=1.11.7" } -solana-sdk = { path = "../sdk", version = "=1.11.7" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.11.8" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.11.8" } +solana-measure = { path = "../measure", version = "=1.11.8" } +solana-metrics = { path = "../metrics", version = "=1.11.8" } +solana-sdk = { path = "../sdk", version = "=1.11.8" } thiserror = "1.0" enum-iterator = "0.8.1" [dev-dependencies] -solana-logger = { path = "../logger", version = "=1.11.7" } +solana-logger = { path = "../logger", version = "=1.11.8" } [lib] crate-type = ["lib"] diff --git a/program-test/Cargo.toml b/program-test/Cargo.toml index dde5153936c21e..ab5746324f9b75 100644 --- a/program-test/Cargo.toml +++ b/program-test/Cargo.toml @@ -5,7 +5,7 @@ edition = "2021" license = "Apache-2.0" name = "solana-program-test" repository = "https://github.com/solana-labs/solana" -version = "1.11.7" +version = "1.11.8" [dependencies] assert_matches = "1.5.0" @@ -15,13 +15,13 @@ bincode = "1.3.3" chrono-humanize = "0.2.1" log = "0.4.17" serde = "1.0.138" -solana-banks-client = { path = "../banks-client", version = "=1.11.7" } -solana-banks-server = { path = "../banks-server", version = "=1.11.7" } -solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.11.7" } -solana-logger = { path = "../logger", version = "=1.11.7" } -solana-program-runtime = { path = "../program-runtime", version = "=1.11.7" } -solana-runtime = { path = "../runtime", version = "=1.11.7" } -solana-sdk = { path = "../sdk", version = "=1.11.7" } -solana-vote-program = { path = "../programs/vote", version = "=1.11.7" } +solana-banks-client = { path = "../banks-client", version = "=1.11.8" } +solana-banks-server = { path = "../banks-server", version = "=1.11.8" } +solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.11.8" } +solana-logger = { path = "../logger", version = "=1.11.8" } +solana-program-runtime = { path = "../program-runtime", version = "=1.11.8" } +solana-runtime = { path = "../runtime", version = "=1.11.8" } +solana-sdk = { path = "../sdk", version = "=1.11.8" } +solana-vote-program = { path = "../programs/vote", version = "=1.11.8" } thiserror = "1.0" tokio = { version = "1", features = ["full"] } diff --git a/programs/address-lookup-table-tests/Cargo.toml b/programs/address-lookup-table-tests/Cargo.toml index d8d3bb27f62f2b..13b4e2c14f1e95 100644 --- a/programs/address-lookup-table-tests/Cargo.toml +++ b/programs/address-lookup-table-tests/Cargo.toml @@ -3,7 +3,7 @@ [package] name = "solana-address-lookup-table-program-tests" -version = "1.11.7" +version = "1.11.8" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" @@ -14,9 +14,9 @@ publish = false [dev-dependencies] assert_matches = "1.5.0" bincode = "1.3.3" -solana-address-lookup-table-program = { path = "../address-lookup-table", version = "=1.11.7" } -solana-program-test = { path = "../../program-test", version = "=1.11.7" } -solana-sdk = { path = "../../sdk", version = "=1.11.7" } +solana-address-lookup-table-program = { path = "../address-lookup-table", version = "=1.11.8" } +solana-program-test = { path = "../../program-test", version = "=1.11.8" } +solana-sdk = { path = "../../sdk", version = "=1.11.8" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/address-lookup-table/Cargo.toml b/programs/address-lookup-table/Cargo.toml index 278e1609db444b..e5c7ce031d7e18 100644 --- a/programs/address-lookup-table/Cargo.toml +++ b/programs/address-lookup-table/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-address-lookup-table-program" -version = "1.11.7" +version = "1.11.8" description = "Solana address lookup table program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -16,14 +16,14 @@ log = "0.4.17" num-derive = "0.3" num-traits = "0.2" serde = { version = "1.0.138", features = ["derive"] } -solana-frozen-abi = { path = "../../frozen-abi", version = "=1.11.7" } -solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.11.7" } -solana-program = { path = "../../sdk/program", version = "=1.11.7" } +solana-frozen-abi = { path = "../../frozen-abi", version = "=1.11.8" } +solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.11.8" } +solana-program = { path = "../../sdk/program", version = "=1.11.8" } thiserror = "1.0" [target.'cfg(not(target_os = "solana"))'.dependencies] -solana-program-runtime = { path = "../../program-runtime", version = "=1.11.7" } -solana-sdk = { path = "../../sdk", version = "=1.11.7" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.11.8" } +solana-sdk = { path = "../../sdk", version = "=1.11.8" } [build-dependencies] rustc_version = "0.4" diff --git a/programs/bpf-loader-tests/Cargo.toml b/programs/bpf-loader-tests/Cargo.toml index 208e285846394e..5ab1104589f25f 100644 --- a/programs/bpf-loader-tests/Cargo.toml +++ b/programs/bpf-loader-tests/Cargo.toml @@ -3,7 +3,7 @@ [package] name = "solana-bpf-loader-program-tests" -version = "1.11.7" +version = "1.11.8" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" @@ -14,9 +14,9 @@ publish = false [dev-dependencies] assert_matches = "1.5.0" bincode = "1.3.3" -solana-bpf-loader-program = { path = "../bpf_loader", version = "=1.11.7" } -solana-program-test = { path = "../../program-test", version = "=1.11.7" } -solana-sdk = { path = "../../sdk", version = "=1.11.7" } +solana-bpf-loader-program = { path = "../bpf_loader", version = "=1.11.8" } +solana-program-test = { path = "../../program-test", version = "=1.11.8" } +solana-sdk = { path = "../../sdk", version = "=1.11.8" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/bpf/Cargo.lock b/programs/bpf/Cargo.lock index 2122e5d8afd5e4..fc832585a23dee 100644 --- a/programs/bpf/Cargo.lock +++ b/programs/bpf/Cargo.lock @@ -4060,7 +4060,7 @@ dependencies = [ [[package]] name = "solana-account-decoder" -version = "1.11.7" +version = "1.11.8" dependencies = [ "Inflector", "base64 0.13.0", @@ -4072,7 +4072,7 @@ dependencies = [ "serde_derive", "serde_json", "solana-config-program", - "solana-sdk 1.11.7", + "solana-sdk 1.11.8", "solana-vote-program", "spl-token", "spl-token-2022", @@ -4082,7 +4082,7 @@ dependencies = [ [[package]] name = "solana-address-lookup-table-program" -version = "1.11.7" +version = "1.11.8" dependencies = [ "bincode", "bytemuck", @@ -4091,23 +4091,23 @@ dependencies = [ "num-traits", "rustc_version", "serde", - "solana-frozen-abi 1.11.7", - "solana-frozen-abi-macro 1.11.7", - "solana-program 1.11.7", + "solana-frozen-abi 1.11.8", + "solana-frozen-abi-macro 1.11.8", + "solana-program 1.11.8", "solana-program-runtime", - "solana-sdk 1.11.7", + "solana-sdk 1.11.8", "thiserror", ] [[package]] name = "solana-banks-client" -version = "1.11.7" +version = "1.11.8" dependencies = [ "borsh", "futures 0.3.21", "solana-banks-interface", - "solana-program 1.11.7", - "solana-sdk 1.11.7", + "solana-program 1.11.8", + "solana-sdk 1.11.8", "tarpc", "thiserror", "tokio", @@ -4116,16 +4116,16 @@ dependencies = [ [[package]] name = "solana-banks-interface" -version = "1.11.7" +version = "1.11.8" dependencies = [ "serde", - "solana-sdk 1.11.7", + "solana-sdk 1.11.8", "tarpc", ] [[package]] name = "solana-banks-server" -version = "1.11.7" +version = "1.11.8" dependencies = [ "bincode", "crossbeam-channel", @@ -4133,7 +4133,7 @@ dependencies = [ "solana-banks-interface", "solana-client", "solana-runtime", - "solana-sdk 1.11.7", + "solana-sdk 1.11.8", "solana-send-transaction-service", "tarpc", "tokio", @@ -4143,7 +4143,7 @@ dependencies = [ [[package]] name = "solana-bloom" -version = "1.11.7" +version = "1.11.8" dependencies = [ "bv", "fnv", @@ -4153,14 +4153,14 @@ dependencies = [ "rustc_version", "serde", "serde_derive", - "solana-frozen-abi 1.11.7", - "solana-frozen-abi-macro 1.11.7", - "solana-sdk 1.11.7", + "solana-frozen-abi 1.11.8", + "solana-frozen-abi-macro 1.11.8", + "solana-sdk 1.11.8", ] [[package]] name = "solana-bpf-loader-program" -version = "1.11.7" +version = "1.11.8" dependencies = [ "bincode", "byteorder 1.4.3", @@ -4169,15 +4169,15 @@ dependencies = [ "solana-measure", "solana-metrics", "solana-program-runtime", - "solana-sdk 1.11.7", - "solana-zk-token-sdk 1.11.7", + "solana-sdk 1.11.8", + "solana-zk-token-sdk 1.11.8", "solana_rbpf", "thiserror", ] [[package]] name = "solana-bpf-programs" -version = "1.11.7" +version = "1.11.8" dependencies = [ "bincode", "byteorder 1.4.3", @@ -4193,11 +4193,11 @@ dependencies = [ "solana-bpf-rust-realloc-invoke", "solana-cli-output", "solana-ledger", - "solana-logger 1.11.7", + "solana-logger 1.11.8", "solana-measure", "solana-program-runtime", "solana-runtime", - "solana-sdk 1.11.7", + "solana-sdk 1.11.8", "solana-transaction-status", "solana_rbpf", "walkdir", @@ -4205,385 +4205,385 @@ dependencies = [ [[package]] name = "solana-bpf-rust-128bit" -version = "1.11.7" +version = "1.11.8" dependencies = [ "solana-bpf-rust-128bit-dep", - "solana-program 1.11.7", + "solana-program 1.11.8", ] [[package]] name = "solana-bpf-rust-128bit-dep" -version = "1.11.7" +version = "1.11.8" dependencies = [ - "solana-program 1.11.7", + "solana-program 1.11.8", ] [[package]] name = "solana-bpf-rust-alloc" -version = "1.11.7" +version = "1.11.8" dependencies = [ - "solana-program 1.11.7", + "solana-program 1.11.8", ] [[package]] name = "solana-bpf-rust-call-depth" -version = "1.11.7" +version = "1.11.8" dependencies = [ - "solana-program 1.11.7", + "solana-program 1.11.8", ] [[package]] name = "solana-bpf-rust-caller-access" -version = "1.11.7" +version = "1.11.8" dependencies = [ - "solana-program 1.11.7", + "solana-program 1.11.8", ] [[package]] name = "solana-bpf-rust-curve25519" -version = "1.11.7" +version = "1.11.8" dependencies = [ - "solana-program 1.11.7", - "solana-zk-token-sdk 1.11.7", + "solana-program 1.11.8", + "solana-zk-token-sdk 1.11.8", ] [[package]] name = "solana-bpf-rust-custom-heap" -version = "1.11.7" +version = "1.11.8" dependencies = [ - "solana-program 1.11.7", + "solana-program 1.11.8", ] [[package]] name = "solana-bpf-rust-dep-crate" -version = "1.11.7" +version = "1.11.8" dependencies = [ "byteorder 1.4.3", "solana-address-lookup-table-program", - "solana-program 1.11.7", + "solana-program 1.11.8", ] [[package]] name = "solana-bpf-rust-deprecated-loader" -version = "1.11.7" +version = "1.11.8" dependencies = [ - "solana-program 1.11.7", + "solana-program 1.11.8", ] [[package]] name = "solana-bpf-rust-dup-accounts" -version = "1.11.7" +version = "1.11.8" dependencies = [ - "solana-program 1.11.7", + "solana-program 1.11.8", ] [[package]] name = "solana-bpf-rust-error-handling" -version = "1.11.7" +version = "1.11.8" dependencies = [ "num-derive", "num-traits", - "solana-program 1.11.7", + "solana-program 1.11.8", "thiserror", ] [[package]] name = "solana-bpf-rust-external-spend" -version = "1.11.7" +version = "1.11.8" dependencies = [ - "solana-program 1.11.7", + "solana-program 1.11.8", ] [[package]] name = "solana-bpf-rust-finalize" -version = "1.11.7" +version = "1.11.8" dependencies = [ - "solana-program 1.11.7", + "solana-program 1.11.8", ] [[package]] name = "solana-bpf-rust-get-minimum-delegation" -version = "1.11.7" +version = "1.11.8" dependencies = [ - "solana-program 1.11.7", + "solana-program 1.11.8", ] [[package]] name = "solana-bpf-rust-inner_instruction_alignment_check" -version = "1.11.7" +version = "1.11.8" dependencies = [ - "solana-program 1.11.7", + "solana-program 1.11.8", ] [[package]] name = "solana-bpf-rust-instruction-introspection" -version = "1.11.7" +version = "1.11.8" dependencies = [ - "solana-program 1.11.7", + "solana-program 1.11.8", ] [[package]] name = "solana-bpf-rust-invoke" -version = "1.11.7" +version = "1.11.8" dependencies = [ "solana-bpf-rust-invoked", - "solana-program 1.11.7", + "solana-program 1.11.8", ] [[package]] name = "solana-bpf-rust-invoke-and-error" -version = "1.11.7" +version = "1.11.8" dependencies = [ - "solana-program 1.11.7", + "solana-program 1.11.8", ] [[package]] name = "solana-bpf-rust-invoke-and-ok" -version = "1.11.7" +version = "1.11.8" dependencies = [ - "solana-program 1.11.7", + "solana-program 1.11.8", ] [[package]] name = "solana-bpf-rust-invoke-and-return" -version = "1.11.7" +version = "1.11.8" dependencies = [ - "solana-program 1.11.7", + "solana-program 1.11.8", ] [[package]] name = "solana-bpf-rust-invoked" -version = "1.11.7" +version = "1.11.8" dependencies = [ - "solana-program 1.11.7", + "solana-program 1.11.8", ] [[package]] name = "solana-bpf-rust-iter" -version = "1.11.7" +version = "1.11.8" dependencies = [ - "solana-program 1.11.7", + "solana-program 1.11.8", ] [[package]] name = "solana-bpf-rust-log-data" -version = "1.11.7" +version = "1.11.8" dependencies = [ - "solana-program 1.11.7", + "solana-program 1.11.8", ] [[package]] name = "solana-bpf-rust-many-args" -version = "1.11.7" +version = "1.11.8" dependencies = [ "solana-bpf-rust-many-args-dep", - "solana-program 1.11.7", + "solana-program 1.11.8", ] [[package]] name = "solana-bpf-rust-many-args-dep" -version = "1.11.7" +version = "1.11.8" dependencies = [ - "solana-program 1.11.7", + "solana-program 1.11.8", ] [[package]] name = "solana-bpf-rust-mem" -version = "1.11.7" +version = "1.11.8" dependencies = [ - "solana-program 1.11.7", + "solana-program 1.11.8", "solana-program-runtime", "solana-program-test", - "solana-sdk 1.11.7", + "solana-sdk 1.11.8", ] [[package]] name = "solana-bpf-rust-membuiltins" -version = "1.11.7" +version = "1.11.8" dependencies = [ "solana-bpf-rust-mem", - "solana-program 1.11.7", + "solana-program 1.11.8", ] [[package]] name = "solana-bpf-rust-noop" -version = "1.11.7" +version = "1.11.8" dependencies = [ - "solana-program 1.11.7", + "solana-program 1.11.8", ] [[package]] name = "solana-bpf-rust-panic" -version = "1.11.7" +version = "1.11.8" dependencies = [ - "solana-program 1.11.7", + "solana-program 1.11.8", ] [[package]] name = "solana-bpf-rust-param-passing" -version = "1.11.7" +version = "1.11.8" dependencies = [ "solana-bpf-rust-param-passing-dep", - "solana-program 1.11.7", + "solana-program 1.11.8", ] [[package]] name = "solana-bpf-rust-param-passing-dep" -version = "1.11.7" +version = "1.11.8" dependencies = [ - "solana-program 1.11.7", + "solana-program 1.11.8", ] [[package]] name = "solana-bpf-rust-rand" -version = "1.11.7" +version = "1.11.8" dependencies = [ "getrandom 0.1.14", "rand 0.7.3", - "solana-program 1.11.7", + "solana-program 1.11.8", ] [[package]] name = "solana-bpf-rust-realloc" -version = "1.11.7" +version = "1.11.8" dependencies = [ - "solana-program 1.11.7", + "solana-program 1.11.8", ] [[package]] name = "solana-bpf-rust-realloc-invoke" -version = "1.11.7" +version = "1.11.8" dependencies = [ "solana-bpf-rust-realloc", - "solana-program 1.11.7", + "solana-program 1.11.8", ] [[package]] name = "solana-bpf-rust-ro-account_modify" -version = "1.11.7" +version = "1.11.8" dependencies = [ - "solana-program 1.11.7", + "solana-program 1.11.8", ] [[package]] name = "solana-bpf-rust-ro-modify" -version = "1.11.7" +version = "1.11.8" dependencies = [ - "solana-program 1.11.7", + "solana-program 1.11.8", ] [[package]] name = "solana-bpf-rust-sanity" -version = "1.11.7" +version = "1.11.8" dependencies = [ - "solana-program 1.11.7", + "solana-program 1.11.8", "solana-program-runtime", "solana-program-test", - "solana-sdk 1.11.7", + "solana-sdk 1.11.8", ] [[package]] name = "solana-bpf-rust-secp256k1-recover" -version = "1.11.7" +version = "1.11.8" dependencies = [ "libsecp256k1 0.7.0", - "solana-program 1.11.7", + "solana-program 1.11.8", ] [[package]] name = "solana-bpf-rust-sha" -version = "1.11.7" +version = "1.11.8" dependencies = [ "blake3", - "solana-program 1.11.7", + "solana-program 1.11.8", ] [[package]] name = "solana-bpf-rust-sibling-instructions" -version = "1.11.7" +version = "1.11.8" dependencies = [ - "solana-program 1.11.7", + "solana-program 1.11.8", ] [[package]] name = "solana-bpf-rust-sibling_inner-instructions" -version = "1.11.7" +version = "1.11.8" dependencies = [ - "solana-program 1.11.7", + "solana-program 1.11.8", ] [[package]] name = "solana-bpf-rust-simulation" -version = "1.11.7" +version = "1.11.8" dependencies = [ - "solana-logger 1.11.7", - "solana-program 1.11.7", + "solana-logger 1.11.8", + "solana-program 1.11.8", "solana-program-test", - "solana-sdk 1.11.7", + "solana-sdk 1.11.8", "solana-validator", ] [[package]] name = "solana-bpf-rust-spoof1" -version = "1.11.7" +version = "1.11.8" dependencies = [ - "solana-program 1.11.7", + "solana-program 1.11.8", ] [[package]] name = "solana-bpf-rust-spoof1-system" -version = "1.11.7" +version = "1.11.8" dependencies = [ - "solana-program 1.11.7", + "solana-program 1.11.8", ] [[package]] name = "solana-bpf-rust-sysvar" -version = "1.11.7" +version = "1.11.8" dependencies = [ - "solana-program 1.11.7", + "solana-program 1.11.8", "solana-program-runtime", "solana-program-test", - "solana-sdk 1.11.7", + "solana-sdk 1.11.8", ] [[package]] name = "solana-bpf-rust-upgradeable" -version = "1.11.7" +version = "1.11.8" dependencies = [ - "solana-program 1.11.7", + "solana-program 1.11.8", ] [[package]] name = "solana-bpf-rust-upgraded" -version = "1.11.7" +version = "1.11.8" dependencies = [ - "solana-program 1.11.7", + "solana-program 1.11.8", ] [[package]] name = "solana-bucket-map" -version = "1.11.7" +version = "1.11.8" dependencies = [ "log", "memmap2", "modular-bitfield", "rand 0.7.3", "solana-measure", - "solana-sdk 1.11.7", + "solana-sdk 1.11.8", "tempfile", ] [[package]] name = "solana-clap-utils" -version = "1.11.7" +version = "1.11.8" dependencies = [ "chrono", "clap 2.33.3", "rpassword", "solana-perf", "solana-remote-wallet", - "solana-sdk 1.11.7", + "solana-sdk 1.11.8", "thiserror", "tiny-bip39", "uriparse", @@ -4592,7 +4592,7 @@ dependencies = [ [[package]] name = "solana-cli-config" -version = "1.11.7" +version = "1.11.8" dependencies = [ "dirs-next", "lazy_static", @@ -4600,13 +4600,13 @@ dependencies = [ "serde_derive", "serde_yaml", "solana-clap-utils", - "solana-sdk 1.11.7", + "solana-sdk 1.11.8", "url 2.2.2", ] [[package]] name = "solana-cli-output" -version = "1.11.7" +version = "1.11.8" dependencies = [ "Inflector", "base64 0.13.0", @@ -4623,7 +4623,7 @@ dependencies = [ "solana-clap-utils", "solana-cli-config", "solana-client", - "solana-sdk 1.11.7", + "solana-sdk 1.11.8", "solana-transaction-status", "solana-vote-program", "spl-memo", @@ -4631,7 +4631,7 @@ dependencies = [ [[package]] name = "solana-client" -version = "1.11.7" +version = "1.11.8" dependencies = [ "async-mutex", "async-trait", @@ -4667,7 +4667,7 @@ dependencies = [ "solana-measure", "solana-metrics", "solana-net-utils", - "solana-sdk 1.11.7", + "solana-sdk 1.11.8", "solana-streamer", "solana-transaction-status", "solana-version", @@ -4683,27 +4683,27 @@ dependencies = [ [[package]] name = "solana-compute-budget-program" -version = "1.11.7" +version = "1.11.8" dependencies = [ "solana-program-runtime", - "solana-sdk 1.11.7", + "solana-sdk 1.11.8", ] [[package]] name = "solana-config-program" -version = "1.11.7" +version = "1.11.8" dependencies = [ "bincode", "chrono", "serde", "serde_derive", "solana-program-runtime", - "solana-sdk 1.11.7", + "solana-sdk 1.11.8", ] [[package]] name = "solana-core" -version = "1.11.7" +version = "1.11.8" dependencies = [ "ahash", "base64 0.13.0", @@ -4731,8 +4731,8 @@ dependencies = [ "solana-bloom", "solana-client", "solana-entry", - "solana-frozen-abi 1.11.7", - "solana-frozen-abi-macro 1.11.7", + "solana-frozen-abi 1.11.8", + "solana-frozen-abi-macro 1.11.8", "solana-geyser-plugin-manager", "solana-gossip", "solana-ledger", @@ -4745,7 +4745,7 @@ dependencies = [ "solana-rayon-threadlimit", "solana-rpc", "solana-runtime", - "solana-sdk 1.11.7", + "solana-sdk 1.11.8", "solana-send-transaction-service", "solana-streamer", "solana-transaction-status", @@ -4761,19 +4761,19 @@ dependencies = [ [[package]] name = "solana-download-utils" -version = "1.11.7" +version = "1.11.8" dependencies = [ "console", "indicatif", "log", "reqwest", "solana-runtime", - "solana-sdk 1.11.7", + "solana-sdk 1.11.8", ] [[package]] name = "solana-entry" -version = "1.11.7" +version = "1.11.8" dependencies = [ "bincode", "crossbeam-channel", @@ -4789,12 +4789,12 @@ dependencies = [ "solana-metrics", "solana-perf", "solana-rayon-threadlimit", - "solana-sdk 1.11.7", + "solana-sdk 1.11.8", ] [[package]] name = "solana-faucet" -version = "1.11.7" +version = "1.11.8" dependencies = [ "bincode", "byteorder 1.4.3", @@ -4805,9 +4805,9 @@ dependencies = [ "serde_derive", "solana-clap-utils", "solana-cli-config", - "solana-logger 1.11.7", + "solana-logger 1.11.8", "solana-metrics", - "solana-sdk 1.11.7", + "solana-sdk 1.11.8", "solana-version", "spl-memo", "thiserror", @@ -4838,7 +4838,7 @@ dependencies = [ [[package]] name = "solana-frozen-abi" -version = "1.11.7" +version = "1.11.8" dependencies = [ "ahash", "blake3", @@ -4863,7 +4863,7 @@ dependencies = [ "serde_derive", "serde_json", "sha2 0.10.2", - "solana-frozen-abi-macro 1.11.7", + "solana-frozen-abi-macro 1.11.8", "subtle", "thiserror", ] @@ -4882,7 +4882,7 @@ dependencies = [ [[package]] name = "solana-frozen-abi-macro" -version = "1.11.7" +version = "1.11.8" dependencies = [ "proc-macro2 1.0.41", "quote 1.0.18", @@ -4892,26 +4892,26 @@ dependencies = [ [[package]] name = "solana-genesis-utils" -version = "1.11.7" +version = "1.11.8" dependencies = [ "solana-download-utils", "solana-runtime", - "solana-sdk 1.11.7", + "solana-sdk 1.11.8", ] [[package]] name = "solana-geyser-plugin-interface" -version = "1.11.7" +version = "1.11.8" dependencies = [ "log", - "solana-sdk 1.11.7", + "solana-sdk 1.11.8", "solana-transaction-status", "thiserror", ] [[package]] name = "solana-geyser-plugin-manager" -version = "1.11.7" +version = "1.11.8" dependencies = [ "bs58", "crossbeam-channel", @@ -4924,14 +4924,14 @@ dependencies = [ "solana-metrics", "solana-rpc", "solana-runtime", - "solana-sdk 1.11.7", + "solana-sdk 1.11.8", "solana-transaction-status", "thiserror", ] [[package]] name = "solana-gossip" -version = "1.11.7" +version = "1.11.8" dependencies = [ "bincode", "bv", @@ -4955,17 +4955,17 @@ dependencies = [ "solana-clap-utils", "solana-client", "solana-entry", - "solana-frozen-abi 1.11.7", - "solana-frozen-abi-macro 1.11.7", + "solana-frozen-abi 1.11.8", + "solana-frozen-abi-macro 1.11.8", "solana-ledger", - "solana-logger 1.11.7", + "solana-logger 1.11.8", "solana-measure", "solana-metrics", "solana-net-utils", "solana-perf", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.11.7", + "solana-sdk 1.11.8", "solana-streamer", "solana-version", "solana-vote-program", @@ -4974,7 +4974,7 @@ dependencies = [ [[package]] name = "solana-ledger" -version = "1.11.7" +version = "1.11.8" dependencies = [ "bincode", "bitflags", @@ -5005,15 +5005,15 @@ dependencies = [ "solana-account-decoder", "solana-bpf-loader-program", "solana-entry", - "solana-frozen-abi 1.11.7", - "solana-frozen-abi-macro 1.11.7", + "solana-frozen-abi 1.11.8", + "solana-frozen-abi-macro 1.11.8", "solana-measure", "solana-metrics", "solana-perf", "solana-program-runtime", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.11.7", + "solana-sdk 1.11.8", "solana-stake-program", "solana-storage-bigtable", "solana-storage-proto", @@ -5042,7 +5042,7 @@ dependencies = [ [[package]] name = "solana-logger" -version = "1.11.7" +version = "1.11.8" dependencies = [ "env_logger", "lazy_static", @@ -5051,36 +5051,36 @@ dependencies = [ [[package]] name = "solana-measure" -version = "1.11.7" +version = "1.11.8" dependencies = [ "log", - "solana-sdk 1.11.7", + "solana-sdk 1.11.8", ] [[package]] name = "solana-merkle-tree" -version = "1.11.7" +version = "1.11.8" dependencies = [ "fast-math", "matches", - "solana-program 1.11.7", + "solana-program 1.11.8", ] [[package]] name = "solana-metrics" -version = "1.11.7" +version = "1.11.8" dependencies = [ "crossbeam-channel", "gethostname", "lazy_static", "log", "reqwest", - "solana-sdk 1.11.7", + "solana-sdk 1.11.8", ] [[package]] name = "solana-net-utils" -version = "1.11.7" +version = "1.11.8" dependencies = [ "bincode", "clap 3.1.6", @@ -5091,8 +5091,8 @@ dependencies = [ "serde", "serde_derive", "socket2", - "solana-logger 1.11.7", - "solana-sdk 1.11.7", + "solana-logger 1.11.8", + "solana-sdk 1.11.8", "solana-version", "tokio", "url 2.2.2", @@ -5100,7 +5100,7 @@ dependencies = [ [[package]] name = "solana-perf" -version = "1.11.7" +version = "1.11.8" dependencies = [ "ahash", "bincode", @@ -5119,13 +5119,13 @@ dependencies = [ "serde", "solana-metrics", "solana-rayon-threadlimit", - "solana-sdk 1.11.7", + "solana-sdk 1.11.8", "solana-vote-program", ] [[package]] name = "solana-poh" -version = "1.11.7" +version = "1.11.8" dependencies = [ "core_affinity", "crossbeam-channel", @@ -5135,7 +5135,7 @@ dependencies = [ "solana-measure", "solana-metrics", "solana-runtime", - "solana-sdk 1.11.7", + "solana-sdk 1.11.8", "solana-sys-tuner", "thiserror", ] @@ -5184,7 +5184,7 @@ dependencies = [ [[package]] name = "solana-program" -version = "1.11.7" +version = "1.11.8" dependencies = [ "base64 0.13.0", "bincode", @@ -5220,9 +5220,9 @@ dependencies = [ "serde_json", "sha2 0.10.2", "sha3 0.10.1", - "solana-frozen-abi 1.11.7", - "solana-frozen-abi-macro 1.11.7", - "solana-sdk-macro 1.11.7", + "solana-frozen-abi 1.11.8", + "solana-frozen-abi-macro 1.11.8", + "solana-sdk-macro 1.11.8", "thiserror", "tiny-bip39", "wasm-bindgen", @@ -5231,7 +5231,7 @@ dependencies = [ [[package]] name = "solana-program-runtime" -version = "1.11.7" +version = "1.11.8" dependencies = [ "base64 0.13.0", "bincode", @@ -5245,17 +5245,17 @@ dependencies = [ "num-traits", "rustc_version", "serde", - "solana-frozen-abi 1.11.7", - "solana-frozen-abi-macro 1.11.7", + "solana-frozen-abi 1.11.8", + "solana-frozen-abi-macro 1.11.8", "solana-measure", "solana-metrics", - "solana-sdk 1.11.7", + "solana-sdk 1.11.8", "thiserror", ] [[package]] name = "solana-program-test" -version = "1.11.7" +version = "1.11.8" dependencies = [ "assert_matches", "async-trait", @@ -5267,10 +5267,10 @@ dependencies = [ "solana-banks-client", "solana-banks-server", "solana-bpf-loader-program", - "solana-logger 1.11.7", + "solana-logger 1.11.8", "solana-program-runtime", "solana-runtime", - "solana-sdk 1.11.7", + "solana-sdk 1.11.8", "solana-vote-program", "thiserror", "tokio", @@ -5278,7 +5278,7 @@ dependencies = [ [[package]] name = "solana-rayon-threadlimit" -version = "1.11.7" +version = "1.11.8" dependencies = [ "lazy_static", "num_cpus", @@ -5286,7 +5286,7 @@ dependencies = [ [[package]] name = "solana-remote-wallet" -version = "1.11.7" +version = "1.11.8" dependencies = [ "console", "dialoguer", @@ -5296,14 +5296,14 @@ dependencies = [ "parking_lot 0.12.1", "qstring", "semver", - "solana-sdk 1.11.7", + "solana-sdk 1.11.8", "thiserror", "uriparse", ] [[package]] name = "solana-rpc" -version = "1.11.7" +version = "1.11.8" dependencies = [ "base64 0.13.0", "bincode", @@ -5336,7 +5336,7 @@ dependencies = [ "solana-poh", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.11.7", + "solana-sdk 1.11.8", "solana-send-transaction-service", "solana-stake-program", "solana-storage-bigtable", @@ -5354,7 +5354,7 @@ dependencies = [ [[package]] name = "solana-runtime" -version = "1.11.7" +version = "1.11.8" dependencies = [ "arrayref", "bincode", @@ -5390,17 +5390,17 @@ dependencies = [ "solana-bucket-map", "solana-compute-budget-program", "solana-config-program", - "solana-frozen-abi 1.11.7", - "solana-frozen-abi-macro 1.11.7", + "solana-frozen-abi 1.11.8", + "solana-frozen-abi-macro 1.11.8", "solana-measure", "solana-metrics", "solana-program-runtime", "solana-rayon-threadlimit", - "solana-sdk 1.11.7", + "solana-sdk 1.11.8", "solana-stake-program", "solana-vote-program", "solana-zk-token-proof-program", - "solana-zk-token-sdk 1.11.7", + "solana-zk-token-sdk 1.11.8", "strum", "strum_macros", "symlink", @@ -5463,7 +5463,7 @@ dependencies = [ [[package]] name = "solana-sdk" -version = "1.11.7" +version = "1.11.8" dependencies = [ "assert_matches", "base64 0.13.0", @@ -5500,11 +5500,11 @@ dependencies = [ "serde_json", "sha2 0.10.2", "sha3 0.10.1", - "solana-frozen-abi 1.11.7", - "solana-frozen-abi-macro 1.11.7", - "solana-logger 1.11.7", - "solana-program 1.11.7", - "solana-sdk-macro 1.11.7", + "solana-frozen-abi 1.11.8", + "solana-frozen-abi-macro 1.11.8", + "solana-logger 1.11.8", + "solana-program 1.11.8", + "solana-sdk-macro 1.11.8", "thiserror", "uriparse", "wasm-bindgen", @@ -5525,7 +5525,7 @@ dependencies = [ [[package]] name = "solana-sdk-macro" -version = "1.11.7" +version = "1.11.8" dependencies = [ "bs58", "proc-macro2 1.0.41", @@ -5536,7 +5536,7 @@ dependencies = [ [[package]] name = "solana-send-transaction-service" -version = "1.11.7" +version = "1.11.8" dependencies = [ "crossbeam-channel", "log", @@ -5544,12 +5544,12 @@ dependencies = [ "solana-measure", "solana-metrics", "solana-runtime", - "solana-sdk 1.11.7", + "solana-sdk 1.11.8", ] [[package]] name = "solana-stake-program" -version = "1.11.7" +version = "1.11.8" dependencies = [ "bincode", "log", @@ -5559,18 +5559,18 @@ dependencies = [ "serde", "serde_derive", "solana-config-program", - "solana-frozen-abi 1.11.7", - "solana-frozen-abi-macro 1.11.7", + "solana-frozen-abi 1.11.8", + "solana-frozen-abi-macro 1.11.8", "solana-metrics", "solana-program-runtime", - "solana-sdk 1.11.7", + "solana-sdk 1.11.8", "solana-vote-program", "thiserror", ] [[package]] name = "solana-storage-bigtable" -version = "1.11.7" +version = "1.11.8" dependencies = [ "backoff", "bincode", @@ -5591,7 +5591,7 @@ dependencies = [ "serde_derive", "smpl_jwt", "solana-metrics", - "solana-sdk 1.11.7", + "solana-sdk 1.11.8", "solana-storage-proto", "solana-transaction-status", "thiserror", @@ -5602,7 +5602,7 @@ dependencies = [ [[package]] name = "solana-storage-proto" -version = "1.11.7" +version = "1.11.8" dependencies = [ "bincode", "bs58", @@ -5610,14 +5610,14 @@ dependencies = [ "protobuf-src", "serde", "solana-account-decoder", - "solana-sdk 1.11.7", + "solana-sdk 1.11.8", "solana-transaction-status", "tonic-build 0.8.0", ] [[package]] name = "solana-streamer" -version = "1.11.7" +version = "1.11.8" dependencies = [ "crossbeam-channel", "futures-util", @@ -5636,7 +5636,7 @@ dependencies = [ "rustls 0.20.6", "solana-metrics", "solana-perf", - "solana-sdk 1.11.7", + "solana-sdk 1.11.8", "thiserror", "tokio", "x509-parser", @@ -5644,13 +5644,13 @@ dependencies = [ [[package]] name = "solana-sys-tuner" -version = "1.11.7" +version = "1.11.8" dependencies = [ "clap 2.33.3", "libc", "log", "nix", - "solana-logger 1.11.7", + "solana-logger 1.11.8", "solana-version", "sysctl", "unix_socket2", @@ -5659,7 +5659,7 @@ dependencies = [ [[package]] name = "solana-test-validator" -version = "1.11.7" +version = "1.11.8" dependencies = [ "base64 0.13.0", "log", @@ -5670,20 +5670,20 @@ dependencies = [ "solana-core", "solana-gossip", "solana-ledger", - "solana-logger 1.11.7", + "solana-logger 1.11.8", "solana-net-utils", "solana-program-runtime", "solana-program-test", "solana-rpc", "solana-runtime", - "solana-sdk 1.11.7", + "solana-sdk 1.11.8", "solana-streamer", "tokio", ] [[package]] name = "solana-transaction-status" -version = "1.11.7" +version = "1.11.8" dependencies = [ "Inflector", "base64 0.13.0", @@ -5698,7 +5698,7 @@ dependencies = [ "solana-account-decoder", "solana-measure", "solana-metrics", - "solana-sdk 1.11.7", + "solana-sdk 1.11.8", "solana-vote-program", "spl-associated-token-account", "spl-memo", @@ -5709,7 +5709,7 @@ dependencies = [ [[package]] name = "solana-validator" -version = "1.11.7" +version = "1.11.8" dependencies = [ "chrono", "clap 2.33.3", @@ -5740,14 +5740,14 @@ dependencies = [ "solana-genesis-utils", "solana-gossip", "solana-ledger", - "solana-logger 1.11.7", + "solana-logger 1.11.8", "solana-metrics", "solana-net-utils", "solana-perf", "solana-poh", "solana-rpc", "solana-runtime", - "solana-sdk 1.11.7", + "solana-sdk 1.11.8", "solana-send-transaction-service", "solana-storage-bigtable", "solana-streamer", @@ -5760,21 +5760,21 @@ dependencies = [ [[package]] name = "solana-version" -version = "1.11.7" +version = "1.11.8" dependencies = [ "log", "rustc_version", "semver", "serde", "serde_derive", - "solana-frozen-abi 1.11.7", - "solana-frozen-abi-macro 1.11.7", - "solana-sdk 1.11.7", + "solana-frozen-abi 1.11.8", + "solana-frozen-abi-macro 1.11.8", + "solana-sdk 1.11.8", ] [[package]] name = "solana-vote-program" -version = "1.11.7" +version = "1.11.8" dependencies = [ "bincode", "log", @@ -5783,25 +5783,25 @@ dependencies = [ "rustc_version", "serde", "serde_derive", - "solana-frozen-abi 1.11.7", - "solana-frozen-abi-macro 1.11.7", + "solana-frozen-abi 1.11.8", + "solana-frozen-abi-macro 1.11.8", "solana-metrics", "solana-program-runtime", - "solana-sdk 1.11.7", + "solana-sdk 1.11.8", "thiserror", ] [[package]] name = "solana-zk-token-proof-program" -version = "1.11.7" +version = "1.11.8" dependencies = [ "bytemuck", "getrandom 0.1.14", "num-derive", "num-traits", "solana-program-runtime", - "solana-sdk 1.11.7", - "solana-zk-token-sdk 1.11.7", + "solana-sdk 1.11.8", + "solana-zk-token-sdk 1.11.8", ] [[package]] @@ -5836,7 +5836,7 @@ dependencies = [ [[package]] name = "solana-zk-token-sdk" -version = "1.11.7" +version = "1.11.8" dependencies = [ "aes-gcm-siv", "arrayref", @@ -5855,8 +5855,8 @@ dependencies = [ "serde", "serde_json", "sha3 0.9.1", - "solana-program 1.11.7", - "solana-sdk 1.11.7", + "solana-program 1.11.8", + "solana-sdk 1.11.8", "subtle", "thiserror", "zeroize", diff --git a/programs/bpf/Cargo.toml b/programs/bpf/Cargo.toml index 460ed0cbc83952..591b69e84cdb76 100644 --- a/programs/bpf/Cargo.toml +++ b/programs/bpf/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "solana-bpf-programs" description = "Blockchain, Rebuilt for Scale" -version = "1.11.7" +version = "1.11.8" documentation = "https://docs.rs/solana" homepage = "https://solana.com/" readme = "README.md" @@ -26,22 +26,22 @@ itertools = "0.10.1" log = "0.4.11" miow = "0.3.6" net2 = "0.2.37" -solana-account-decoder = { path = "../../account-decoder", version = "=1.11.7" } -solana-bpf-loader-program = { path = "../bpf_loader", version = "=1.11.7" } -solana-bpf-rust-invoke = { path = "rust/invoke", version = "=1.11.7" } -solana-bpf-rust-realloc = { path = "rust/realloc", version = "=1.11.7" } -solana-bpf-rust-realloc-invoke = { path = "rust/realloc_invoke", version = "=1.11.7" } -solana-cli-output = { path = "../../cli-output", version = "=1.11.7" } -solana-logger = { path = "../../logger", version = "=1.11.7" } -solana-measure = { path = "../../measure", version = "=1.11.7" } -solana-program-runtime = { path = "../../program-runtime", version = "=1.11.7" } -solana-runtime = { path = "../../runtime", version = "=1.11.7" } -solana-sdk = { path = "../../sdk", version = "=1.11.7" } -solana-transaction-status = { path = "../../transaction-status", version = "=1.11.7" } +solana-account-decoder = { path = "../../account-decoder", version = "=1.11.8" } +solana-bpf-loader-program = { path = "../bpf_loader", version = "=1.11.8" } +solana-bpf-rust-invoke = { path = "rust/invoke", version = "=1.11.8" } +solana-bpf-rust-realloc = { path = "rust/realloc", version = "=1.11.8" } +solana-bpf-rust-realloc-invoke = { path = "rust/realloc_invoke", version = "=1.11.8" } +solana-cli-output = { path = "../../cli-output", version = "=1.11.8" } +solana-logger = { path = "../../logger", version = "=1.11.8" } +solana-measure = { path = "../../measure", version = "=1.11.8" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.11.8" } +solana-runtime = { path = "../../runtime", version = "=1.11.8" } +solana-sdk = { path = "../../sdk", version = "=1.11.8" } +solana-transaction-status = { path = "../../transaction-status", version = "=1.11.8" } solana_rbpf = "=0.2.31" [dev-dependencies] -solana-ledger = { path = "../../ledger", version = "=1.11.7" } +solana-ledger = { path = "../../ledger", version = "=1.11.8" } [[bench]] name = "bpf_loader" diff --git a/programs/bpf/rust/128bit/Cargo.toml b/programs/bpf/rust/128bit/Cargo.toml index 833025f8041e36..fa158ecb889ef1 100644 --- a/programs/bpf/rust/128bit/Cargo.toml +++ b/programs/bpf/rust/128bit/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-128bit" -version = "1.11.7" +version = "1.11.8" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ documentation = "https://docs.rs/solana-bpf-rust-128bit" edition = "2021" [dependencies] -solana-bpf-rust-128bit-dep = { path = "../128bit_dep", version = "=1.11.7" } -solana-program = { path = "../../../../sdk/program", version = "=1.11.7" } +solana-bpf-rust-128bit-dep = { path = "../128bit_dep", version = "=1.11.8" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.8" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/128bit_dep/Cargo.toml b/programs/bpf/rust/128bit_dep/Cargo.toml index 2a5f38b30a6c49..be9223f4488bc9 100644 --- a/programs/bpf/rust/128bit_dep/Cargo.toml +++ b/programs/bpf/rust/128bit_dep/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-128bit-dep" -version = "1.11.7" +version = "1.11.8" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-128bit-dep" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.7" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.8" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/bpf/rust/alloc/Cargo.toml b/programs/bpf/rust/alloc/Cargo.toml index 171ef93a3afd61..537756249da95e 100644 --- a/programs/bpf/rust/alloc/Cargo.toml +++ b/programs/bpf/rust/alloc/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-alloc" -version = "1.11.7" +version = "1.11.8" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-alloc" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.7" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.8" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/call_depth/Cargo.toml b/programs/bpf/rust/call_depth/Cargo.toml index 713ac326b2bb4f..d593e1c0dd8663 100644 --- a/programs/bpf/rust/call_depth/Cargo.toml +++ b/programs/bpf/rust/call_depth/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-call-depth" -version = "1.11.7" +version = "1.11.8" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-call-depth" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.7" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.8" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/caller_access/Cargo.toml b/programs/bpf/rust/caller_access/Cargo.toml index 40f5822581f17a..7cbd3e18f23061 100644 --- a/programs/bpf/rust/caller_access/Cargo.toml +++ b/programs/bpf/rust/caller_access/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-caller-access" -version = "1.11.7" +version = "1.11.8" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-caller-access" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.7" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.8" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/curve25519/Cargo.toml b/programs/bpf/rust/curve25519/Cargo.toml index 8c22ad8ebd0e8d..eb61f96ee542cd 100644 --- a/programs/bpf/rust/curve25519/Cargo.toml +++ b/programs/bpf/rust/curve25519/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-curve25519" -version = "1.11.7" +version = "1.11.8" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ documentation = "https://docs.rs/solana-bpf-rust-zktoken_crypto" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.7" } -solana-zk-token-sdk = { path = "../../../../zk-token-sdk", version = "=1.11.7" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.8" } +solana-zk-token-sdk = { path = "../../../../zk-token-sdk", version = "=1.11.8" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/custom_heap/Cargo.toml b/programs/bpf/rust/custom_heap/Cargo.toml index 342c0a251a05d7..c827698a52f3f5 100644 --- a/programs/bpf/rust/custom_heap/Cargo.toml +++ b/programs/bpf/rust/custom_heap/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-custom-heap" -version = "1.11.7" +version = "1.11.8" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-custom-heap" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.7" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.8" } [features] default = ["custom-heap"] diff --git a/programs/bpf/rust/dep_crate/Cargo.toml b/programs/bpf/rust/dep_crate/Cargo.toml index 9529789c0d2c17..3aa4024a723511 100644 --- a/programs/bpf/rust/dep_crate/Cargo.toml +++ b/programs/bpf/rust/dep_crate/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-dep-crate" -version = "1.11.7" +version = "1.11.8" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,8 +12,8 @@ edition = "2021" [dependencies] byteorder = { version = "1", default-features = false } # list of crates which must be buildable for bpf programs -solana-address-lookup-table-program = { path = "../../../../programs/address-lookup-table", version = "=1.11.7" } -solana-program = { path = "../../../../sdk/program", version = "=1.11.7" } +solana-address-lookup-table-program = { path = "../../../../programs/address-lookup-table", version = "=1.11.8" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.8" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/deprecated_loader/Cargo.toml b/programs/bpf/rust/deprecated_loader/Cargo.toml index 60a3557f46a472..0a9f882678eca3 100644 --- a/programs/bpf/rust/deprecated_loader/Cargo.toml +++ b/programs/bpf/rust/deprecated_loader/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-deprecated-loader" -version = "1.11.7" +version = "1.11.8" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-deprecated-loader" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.7" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.8" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/dup_accounts/Cargo.toml b/programs/bpf/rust/dup_accounts/Cargo.toml index d4df85b8e7eb69..7261d63d45ecdc 100644 --- a/programs/bpf/rust/dup_accounts/Cargo.toml +++ b/programs/bpf/rust/dup_accounts/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-dup-accounts" -version = "1.11.7" +version = "1.11.8" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-dup-accounts" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.7" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.8" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/error_handling/Cargo.toml b/programs/bpf/rust/error_handling/Cargo.toml index a15e747e5445c0..80c9b2fb5825dd 100644 --- a/programs/bpf/rust/error_handling/Cargo.toml +++ b/programs/bpf/rust/error_handling/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-error-handling" -version = "1.11.7" +version = "1.11.8" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,7 +12,7 @@ edition = "2021" [dependencies] num-derive = "0.3" num-traits = "0.2" -solana-program = { path = "../../../../sdk/program", version = "=1.11.7" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.8" } thiserror = "1.0" [lib] diff --git a/programs/bpf/rust/external_spend/Cargo.toml b/programs/bpf/rust/external_spend/Cargo.toml index 3643a3743ae32b..a3c4636992708b 100644 --- a/programs/bpf/rust/external_spend/Cargo.toml +++ b/programs/bpf/rust/external_spend/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-external-spend" -version = "1.11.7" +version = "1.11.8" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-external-spend" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.7" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.8" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/finalize/Cargo.toml b/programs/bpf/rust/finalize/Cargo.toml index 694c2f6d5c05c0..043df826139ead 100644 --- a/programs/bpf/rust/finalize/Cargo.toml +++ b/programs/bpf/rust/finalize/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-finalize" -version = "1.11.7" +version = "1.11.8" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-finalize" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.7" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.8" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/get_minimum_delegation/Cargo.toml b/programs/bpf/rust/get_minimum_delegation/Cargo.toml index 35971c8700e712..52530d4064762c 100644 --- a/programs/bpf/rust/get_minimum_delegation/Cargo.toml +++ b/programs/bpf/rust/get_minimum_delegation/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-get-minimum-delegation" -version = "1.11.7" +version = "1.11.8" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-get-minimum-delegation" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.7" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.8" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/inner_instruction_alignment_check/Cargo.toml b/programs/bpf/rust/inner_instruction_alignment_check/Cargo.toml index c1ba8df30114b5..11924bf5da5042 100644 --- a/programs/bpf/rust/inner_instruction_alignment_check/Cargo.toml +++ b/programs/bpf/rust/inner_instruction_alignment_check/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-inner_instruction_alignment_check" -version = "1.11.7" +version = "1.11.8" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-inner_instruction_alignment_che edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.7" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.8" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/instruction_introspection/Cargo.toml b/programs/bpf/rust/instruction_introspection/Cargo.toml index 92db61ce40a743..dc0860b1d5bec9 100644 --- a/programs/bpf/rust/instruction_introspection/Cargo.toml +++ b/programs/bpf/rust/instruction_introspection/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-instruction-introspection" -version = "1.11.7" +version = "1.11.8" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-instruction-introspection" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.7" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.8" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/invoke/Cargo.toml b/programs/bpf/rust/invoke/Cargo.toml index 92e042787f85fa..7551830c46a28e 100644 --- a/programs/bpf/rust/invoke/Cargo.toml +++ b/programs/bpf/rust/invoke/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-invoke" -version = "1.11.7" +version = "1.11.8" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -15,7 +15,7 @@ program = [] [dependencies] solana-bpf-rust-invoked = { path = "../invoked", default-features = false } -solana-program = { path = "../../../../sdk/program", version = "=1.11.7" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.8" } [lib] crate-type = ["lib", "cdylib"] diff --git a/programs/bpf/rust/invoke_and_error/Cargo.toml b/programs/bpf/rust/invoke_and_error/Cargo.toml index 18eb5caefdea8d..c18712a8624044 100644 --- a/programs/bpf/rust/invoke_and_error/Cargo.toml +++ b/programs/bpf/rust/invoke_and_error/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-invoke-and-error" -version = "1.11.7" +version = "1.11.8" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-invoke-and-error" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.7" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.8" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/invoke_and_ok/Cargo.toml b/programs/bpf/rust/invoke_and_ok/Cargo.toml index 5e2576971d1d0e..65d567a65c00cc 100644 --- a/programs/bpf/rust/invoke_and_ok/Cargo.toml +++ b/programs/bpf/rust/invoke_and_ok/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-invoke-and-ok" -version = "1.11.7" +version = "1.11.8" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-invoke-and-ok" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.7" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.8" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/invoke_and_return/Cargo.toml b/programs/bpf/rust/invoke_and_return/Cargo.toml index bc0f65dd1aa1da..e0bb02e383b214 100644 --- a/programs/bpf/rust/invoke_and_return/Cargo.toml +++ b/programs/bpf/rust/invoke_and_return/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-invoke-and-return" -version = "1.11.7" +version = "1.11.8" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-invoke-and-return" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.7" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.8" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/invoked/Cargo.toml b/programs/bpf/rust/invoked/Cargo.toml index 471a17c987f4b9..6bfe2f4e816b6b 100644 --- a/programs/bpf/rust/invoked/Cargo.toml +++ b/programs/bpf/rust/invoked/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-invoked" -version = "1.11.7" +version = "1.11.8" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,7 +14,7 @@ default = ["program"] program = [] [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.7" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.8" } [lib] crate-type = ["lib", "cdylib"] diff --git a/programs/bpf/rust/iter/Cargo.toml b/programs/bpf/rust/iter/Cargo.toml index bf6e6529de3a4b..19f6f9038ee225 100644 --- a/programs/bpf/rust/iter/Cargo.toml +++ b/programs/bpf/rust/iter/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-iter" -version = "1.11.7" +version = "1.11.8" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-iter" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.7" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.8" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/log_data/Cargo.toml b/programs/bpf/rust/log_data/Cargo.toml index 8e3758de8a1e49..39b96c2208e404 100644 --- a/programs/bpf/rust/log_data/Cargo.toml +++ b/programs/bpf/rust/log_data/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-log-data" -version = "1.11.7" +version = "1.11.8" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-log-data" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.7" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.8" } [features] default = ["program"] diff --git a/programs/bpf/rust/many_args/Cargo.toml b/programs/bpf/rust/many_args/Cargo.toml index fc6187750e36cd..2d5bf2dae16ed8 100644 --- a/programs/bpf/rust/many_args/Cargo.toml +++ b/programs/bpf/rust/many_args/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-many-args" -version = "1.11.7" +version = "1.11.8" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ documentation = "https://docs.rs/solana-bpf-rust-many-args" edition = "2021" [dependencies] -solana-bpf-rust-many-args-dep = { path = "../many_args_dep", version = "=1.11.7" } -solana-program = { path = "../../../../sdk/program", version = "=1.11.7" } +solana-bpf-rust-many-args-dep = { path = "../many_args_dep", version = "=1.11.8" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.8" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/many_args_dep/Cargo.toml b/programs/bpf/rust/many_args_dep/Cargo.toml index fc563531b4417a..a09e5d62c4f38e 100644 --- a/programs/bpf/rust/many_args_dep/Cargo.toml +++ b/programs/bpf/rust/many_args_dep/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-many-args-dep" -version = "1.11.7" +version = "1.11.8" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-many-args-dep" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.7" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.8" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/bpf/rust/mem/Cargo.toml b/programs/bpf/rust/mem/Cargo.toml index a7d5cd89e61338..657e6fa8f211e7 100644 --- a/programs/bpf/rust/mem/Cargo.toml +++ b/programs/bpf/rust/mem/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-mem" -version = "1.11.7" +version = "1.11.8" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,12 +13,12 @@ edition = "2021" no-entrypoint = [] [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.7" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.8" } [dev-dependencies] -solana-program-runtime = { path = "../../../../program-runtime", version = "=1.11.7" } -solana-program-test = { path = "../../../../program-test", version = "=1.11.7" } -solana-sdk = { path = "../../../../sdk", version = "=1.11.7" } +solana-program-runtime = { path = "../../../../program-runtime", version = "=1.11.8" } +solana-program-test = { path = "../../../../program-test", version = "=1.11.8" } +solana-sdk = { path = "../../../../sdk", version = "=1.11.8" } [lib] crate-type = ["cdylib", "lib"] diff --git a/programs/bpf/rust/membuiltins/Cargo.toml b/programs/bpf/rust/membuiltins/Cargo.toml index 9063a645c6447c..11ca354d0110da 100644 --- a/programs/bpf/rust/membuiltins/Cargo.toml +++ b/programs/bpf/rust/membuiltins/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-membuiltins" -version = "1.11.7" +version = "1.11.8" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ documentation = "https://docs.rs/solana-bpf-rust-mem" edition = "2021" [dependencies] -solana-bpf-rust-mem = { path = "../mem", version = "=1.11.7", features = [ "no-entrypoint" ] } -solana-program = { path = "../../../../sdk/program", version = "=1.11.7" } +solana-bpf-rust-mem = { path = "../mem", version = "=1.11.8", features = [ "no-entrypoint" ] } +solana-program = { path = "../../../../sdk/program", version = "=1.11.8" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/noop/Cargo.toml b/programs/bpf/rust/noop/Cargo.toml index 27777fbb7d7100..9833469754ec7f 100644 --- a/programs/bpf/rust/noop/Cargo.toml +++ b/programs/bpf/rust/noop/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-noop" -version = "1.11.7" +version = "1.11.8" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-noop" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.7" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.8" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/panic/Cargo.toml b/programs/bpf/rust/panic/Cargo.toml index 255deb70ec3b8b..a6f6afd5bef730 100644 --- a/programs/bpf/rust/panic/Cargo.toml +++ b/programs/bpf/rust/panic/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-panic" -version = "1.11.7" +version = "1.11.8" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-panic" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.7" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.8" } [features] default = ["custom-panic"] diff --git a/programs/bpf/rust/param_passing/Cargo.toml b/programs/bpf/rust/param_passing/Cargo.toml index 4ceacb79f47f6b..40137e695c8b3b 100644 --- a/programs/bpf/rust/param_passing/Cargo.toml +++ b/programs/bpf/rust/param_passing/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-param-passing" -version = "1.11.7" +version = "1.11.8" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ documentation = "https://docs.rs/solana-bpf-rust-param-passing" edition = "2021" [dependencies] -solana-bpf-rust-param-passing-dep = { path = "../param_passing_dep", version = "=1.11.7" } -solana-program = { path = "../../../../sdk/program", version = "=1.11.7" } +solana-bpf-rust-param-passing-dep = { path = "../param_passing_dep", version = "=1.11.8" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.8" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/param_passing_dep/Cargo.toml b/programs/bpf/rust/param_passing_dep/Cargo.toml index 94cbb3b68cf1cc..d9769856df9673 100644 --- a/programs/bpf/rust/param_passing_dep/Cargo.toml +++ b/programs/bpf/rust/param_passing_dep/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-param-passing-dep" -version = "1.11.7" +version = "1.11.8" description = "Solana BPF program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-param-passing-dep" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.7" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.8" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/bpf/rust/rand/Cargo.toml b/programs/bpf/rust/rand/Cargo.toml index b1dd7bfd5d8b7a..89dccc7776806f 100644 --- a/programs/bpf/rust/rand/Cargo.toml +++ b/programs/bpf/rust/rand/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-rand" -version = "1.11.7" +version = "1.11.8" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,7 +12,7 @@ edition = "2021" [dependencies] getrandom = { version = "0.1.14", features = ["dummy"] } rand = "0.7" -solana-program = { path = "../../../../sdk/program", version = "=1.11.7" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.8" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/realloc/Cargo.toml b/programs/bpf/rust/realloc/Cargo.toml index 80ed25ea560b24..671d4d190f8998 100644 --- a/programs/bpf/rust/realloc/Cargo.toml +++ b/programs/bpf/rust/realloc/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-realloc" -version = "1.11.7" +version = "1.11.8" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,7 +14,7 @@ default = ["program"] program = [] [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.7" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.8" } [lib] crate-type = ["lib", "cdylib"] diff --git a/programs/bpf/rust/realloc_invoke/Cargo.toml b/programs/bpf/rust/realloc_invoke/Cargo.toml index 515db95f148969..b28183d2945aa6 100644 --- a/programs/bpf/rust/realloc_invoke/Cargo.toml +++ b/programs/bpf/rust/realloc_invoke/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-realloc-invoke" -version = "1.11.7" +version = "1.11.8" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,8 +14,8 @@ default = ["program"] program = [] [dependencies] -solana-bpf-rust-realloc = { path = "../realloc", version = "=1.11.7", default-features = false } -solana-program = { path = "../../../../sdk/program", version = "=1.11.7" } +solana-bpf-rust-realloc = { path = "../realloc", version = "=1.11.8", default-features = false } +solana-program = { path = "../../../../sdk/program", version = "=1.11.8" } [lib] crate-type = ["lib", "cdylib"] diff --git a/programs/bpf/rust/ro_account_modify/Cargo.toml b/programs/bpf/rust/ro_account_modify/Cargo.toml index 0dea0943267a95..da59a850ccb1da 100644 --- a/programs/bpf/rust/ro_account_modify/Cargo.toml +++ b/programs/bpf/rust/ro_account_modify/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-ro-account_modify" -version = "1.11.7" +version = "1.11.8" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-ro-modify" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.7" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.8" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/ro_modify/Cargo.toml b/programs/bpf/rust/ro_modify/Cargo.toml index 13b558341554eb..f9bb3ea3999810 100644 --- a/programs/bpf/rust/ro_modify/Cargo.toml +++ b/programs/bpf/rust/ro_modify/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-ro-modify" -version = "1.11.7" +version = "1.11.8" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-ro-modify" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.7" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.8" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/sanity/Cargo.toml b/programs/bpf/rust/sanity/Cargo.toml index d0398112a07c87..77b42ddd3e8cd8 100644 --- a/programs/bpf/rust/sanity/Cargo.toml +++ b/programs/bpf/rust/sanity/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-sanity" -version = "1.11.7" +version = "1.11.8" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,12 +13,12 @@ edition = "2021" test-bpf = [] [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.7" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.8" } [dev-dependencies] -solana-program-runtime = { path = "../../../../program-runtime", version = "=1.11.7" } -solana-program-test = { path = "../../../../program-test", version = "=1.11.7" } -solana-sdk = { path = "../../../../sdk", version = "=1.11.7" } +solana-program-runtime = { path = "../../../../program-runtime", version = "=1.11.8" } +solana-program-test = { path = "../../../../program-test", version = "=1.11.8" } +solana-sdk = { path = "../../../../sdk", version = "=1.11.8" } [lib] crate-type = ["cdylib", "lib"] diff --git a/programs/bpf/rust/secp256k1_recover/Cargo.toml b/programs/bpf/rust/secp256k1_recover/Cargo.toml index c285baa0d42db9..c05d637e41a44a 100644 --- a/programs/bpf/rust/secp256k1_recover/Cargo.toml +++ b/programs/bpf/rust/secp256k1_recover/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-secp256k1-recover" -version = "1.11.7" +version = "1.11.8" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -11,7 +11,7 @@ edition = "2021" [dependencies] libsecp256k1 = { version = "0.7.0", default-features = false } -solana-program = { path = "../../../../sdk/program", version = "=1.11.7" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.8" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/sha/Cargo.toml b/programs/bpf/rust/sha/Cargo.toml index 11445e4cad19da..e28e0f14e63f5c 100644 --- a/programs/bpf/rust/sha/Cargo.toml +++ b/programs/bpf/rust/sha/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-sha" -version = "1.11.7" +version = "1.11.8" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -11,7 +11,7 @@ edition = "2021" [dependencies] blake3 = "1.0.0" -solana-program = { path = "../../../../sdk/program", version = "=1.11.7" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.8" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/sibling_inner_instruction/Cargo.toml b/programs/bpf/rust/sibling_inner_instruction/Cargo.toml index 2433c9dfb7d241..7ca9d02ea71445 100644 --- a/programs/bpf/rust/sibling_inner_instruction/Cargo.toml +++ b/programs/bpf/rust/sibling_inner_instruction/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-sibling_inner-instructions" -version = "1.11.7" +version = "1.11.8" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-log-data" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.7" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.8" } [features] default = ["program"] diff --git a/programs/bpf/rust/sibling_instruction/Cargo.toml b/programs/bpf/rust/sibling_instruction/Cargo.toml index ddd3840f5e52f6..32f4b92087fb63 100644 --- a/programs/bpf/rust/sibling_instruction/Cargo.toml +++ b/programs/bpf/rust/sibling_instruction/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-sibling-instructions" -version = "1.11.7" +version = "1.11.8" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-log-data" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.7" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.8" } [features] default = ["program"] diff --git a/programs/bpf/rust/simulation/Cargo.toml b/programs/bpf/rust/simulation/Cargo.toml index 5cf748e86f258b..01ac087852d7c7 100644 --- a/programs/bpf/rust/simulation/Cargo.toml +++ b/programs/bpf/rust/simulation/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-simulation" -version = "1.11.7" +version = "1.11.8" description = "Solana BPF Program Simulation Differences" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,13 +13,13 @@ edition = "2021" test-bpf = [] [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.7" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.8" } [dev-dependencies] -solana-logger = { path = "../../../../logger", version = "=1.11.7" } -solana-program-test = { path = "../../../../program-test", version = "=1.11.7" } -solana-sdk = { path = "../../../../sdk", version = "=1.11.7" } -solana-validator = { path = "../../../../validator", version = "=1.11.7" } +solana-logger = { path = "../../../../logger", version = "=1.11.8" } +solana-program-test = { path = "../../../../program-test", version = "=1.11.8" } +solana-sdk = { path = "../../../../sdk", version = "=1.11.8" } +solana-validator = { path = "../../../../validator", version = "=1.11.8" } [lib] crate-type = ["cdylib", "lib"] diff --git a/programs/bpf/rust/spoof1/Cargo.toml b/programs/bpf/rust/spoof1/Cargo.toml index 2ff09153068c1b..71f7264b607e3d 100644 --- a/programs/bpf/rust/spoof1/Cargo.toml +++ b/programs/bpf/rust/spoof1/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-spoof1" -version = "1.11.7" +version = "1.11.8" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-spoof1" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.7" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.8" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/spoof1_system/Cargo.toml b/programs/bpf/rust/spoof1_system/Cargo.toml index dbb569c5504fa8..3ee5f3df84bdcd 100644 --- a/programs/bpf/rust/spoof1_system/Cargo.toml +++ b/programs/bpf/rust/spoof1_system/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-spoof1-system" -version = "1.11.7" +version = "1.11.8" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-spoof1-system" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.7" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.8" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/sysvar/Cargo.toml b/programs/bpf/rust/sysvar/Cargo.toml index 84beaef648c8e0..13fef4321e949e 100644 --- a/programs/bpf/rust/sysvar/Cargo.toml +++ b/programs/bpf/rust/sysvar/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-sysvar" -version = "1.11.7" +version = "1.11.8" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,12 +10,12 @@ documentation = "https://docs.rs/solana-bpf-rust-sysvar" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.7" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.8" } [dev-dependencies] -solana-program-runtime = { path = "../../../../program-runtime", version = "=1.11.7" } -solana-program-test = { path = "../../../../program-test", version = "=1.11.7" } -solana-sdk = { path = "../../../../sdk", version = "=1.11.7" } +solana-program-runtime = { path = "../../../../program-runtime", version = "=1.11.8" } +solana-program-test = { path = "../../../../program-test", version = "=1.11.8" } +solana-sdk = { path = "../../../../sdk", version = "=1.11.8" } [lib] crate-type = ["cdylib", "lib"] diff --git a/programs/bpf/rust/upgradeable/Cargo.toml b/programs/bpf/rust/upgradeable/Cargo.toml index da7e9959e437d8..3ec82b4f6dbe41 100644 --- a/programs/bpf/rust/upgradeable/Cargo.toml +++ b/programs/bpf/rust/upgradeable/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-upgradeable" -version = "1.11.7" +version = "1.11.8" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-upgradeable" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.7" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.8" } [lib] name = "solana_bpf_rust_upgradeable" diff --git a/programs/bpf/rust/upgraded/Cargo.toml b/programs/bpf/rust/upgraded/Cargo.toml index cbf85b6f1ead01..7f980554db7053 100644 --- a/programs/bpf/rust/upgraded/Cargo.toml +++ b/programs/bpf/rust/upgraded/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-upgraded" -version = "1.11.7" +version = "1.11.8" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-upgraded" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.7" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.8" } [lib] name = "solana_bpf_rust_upgraded" diff --git a/programs/bpf_loader/Cargo.toml b/programs/bpf_loader/Cargo.toml index 198d8589ff2f78..6cc1d4f29b0c1e 100644 --- a/programs/bpf_loader/Cargo.toml +++ b/programs/bpf_loader/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-loader-program" -version = "1.11.7" +version = "1.11.8" description = "Solana BPF loader" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,17 +14,17 @@ bincode = "1.3.3" byteorder = "1.4.3" libsecp256k1 = "0.6.0" log = "0.4.17" -solana-measure = { path = "../../measure", version = "=1.11.7" } -solana-metrics = { path = "../../metrics", version = "=1.11.7" } -solana-program-runtime = { path = "../../program-runtime", version = "=1.11.7" } -solana-sdk = { path = "../../sdk", version = "=1.11.7" } -solana-zk-token-sdk = { path = "../../zk-token-sdk", version = "=1.11.7" } +solana-measure = { path = "../../measure", version = "=1.11.8" } +solana-metrics = { path = "../../metrics", version = "=1.11.8" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.11.8" } +solana-sdk = { path = "../../sdk", version = "=1.11.8" } +solana-zk-token-sdk = { path = "../../zk-token-sdk", version = "=1.11.8" } solana_rbpf = "=0.2.31" thiserror = "1.0" [dev-dependencies] rand = "0.7.3" -solana-runtime = { path = "../../runtime", version = "=1.11.7" } +solana-runtime = { path = "../../runtime", version = "=1.11.8" } [lib] crate-type = ["lib"] diff --git a/programs/bpf_loader/gen-syscall-list/Cargo.toml b/programs/bpf_loader/gen-syscall-list/Cargo.toml index a619b0e77d9f31..9a90e03a14d75d 100644 --- a/programs/bpf_loader/gen-syscall-list/Cargo.toml +++ b/programs/bpf_loader/gen-syscall-list/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "gen-syscall-list" -version = "1.11.7" +version = "1.11.8" edition = "2021" license = "Apache-2.0" publish = false diff --git a/programs/compute-budget/Cargo.toml b/programs/compute-budget/Cargo.toml index 9e85aa3dc8e840..b58481f3a072cb 100644 --- a/programs/compute-budget/Cargo.toml +++ b/programs/compute-budget/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "solana-compute-budget-program" description = "Solana Compute Budget program" -version = "1.11.7" +version = "1.11.8" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-compute-budget-program" repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ license = "Apache-2.0" edition = "2021" [dependencies] -solana-program-runtime = { path = "../../program-runtime", version = "=1.11.7" } -solana-sdk = { path = "../../sdk", version = "=1.11.7" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.11.8" } +solana-sdk = { path = "../../sdk", version = "=1.11.8" } [lib] crate-type = ["lib"] diff --git a/programs/config/Cargo.toml b/programs/config/Cargo.toml index 58a86f7f23ef27..a689941cc09466 100644 --- a/programs/config/Cargo.toml +++ b/programs/config/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-config-program" -version = "1.11.7" +version = "1.11.8" description = "Solana Config program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,11 +14,11 @@ bincode = "1.3.3" chrono = { version = "0.4.11", features = ["serde"] } serde = "1.0.138" serde_derive = "1.0.103" -solana-program-runtime = { path = "../../program-runtime", version = "=1.11.7" } -solana-sdk = { path = "../../sdk", version = "=1.11.7" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.11.8" } +solana-sdk = { path = "../../sdk", version = "=1.11.8" } [dev-dependencies] -solana-logger = { path = "../../logger", version = "=1.11.7" } +solana-logger = { path = "../../logger", version = "=1.11.8" } [lib] crate-type = ["lib"] diff --git a/programs/ed25519-tests/Cargo.toml b/programs/ed25519-tests/Cargo.toml index 65c6f4aa28ea02..543a7a70a196cd 100644 --- a/programs/ed25519-tests/Cargo.toml +++ b/programs/ed25519-tests/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-ed25519-program-tests" -version = "1.11.7" +version = "1.11.8" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" @@ -12,8 +12,8 @@ publish = false assert_matches = "1.5.0" ed25519-dalek = "=1.0.1" rand = "0.7.0" -solana-program-test = { path = "../../program-test", version = "=1.11.7" } -solana-sdk = { path = "../../sdk", version = "=1.11.7" } +solana-program-test = { path = "../../program-test", version = "=1.11.8" } +solana-sdk = { path = "../../sdk", version = "=1.11.8" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/stake/Cargo.toml b/programs/stake/Cargo.toml index ecb2e82188a5fa..2b5e6c326d2c45 100644 --- a/programs/stake/Cargo.toml +++ b/programs/stake/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-stake-program" -version = "1.11.7" +version = "1.11.8" description = "Solana Stake program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -16,19 +16,19 @@ num-derive = "0.3" num-traits = "0.2" serde = "1.0.138" serde_derive = "1.0.103" -solana-config-program = { path = "../config", version = "=1.11.7" } -solana-frozen-abi = { path = "../../frozen-abi", version = "=1.11.7" } -solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.11.7" } -solana-metrics = { path = "../../metrics", version = "=1.11.7" } -solana-program-runtime = { path = "../../program-runtime", version = "=1.11.7" } -solana-sdk = { path = "../../sdk", version = "=1.11.7" } -solana-vote-program = { path = "../vote", version = "=1.11.7" } +solana-config-program = { path = "../config", version = "=1.11.8" } +solana-frozen-abi = { path = "../../frozen-abi", version = "=1.11.8" } +solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.11.8" } +solana-metrics = { path = "../../metrics", version = "=1.11.8" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.11.8" } +solana-sdk = { path = "../../sdk", version = "=1.11.8" } +solana-vote-program = { path = "../vote", version = "=1.11.8" } thiserror = "1.0" [dev-dependencies] assert_matches = "1.5.0" proptest = "1.0" -solana-logger = { path = "../../logger", version = "=1.11.7" } +solana-logger = { path = "../../logger", version = "=1.11.8" } test-case = "2.1.0" [build-dependencies] diff --git a/programs/vote/Cargo.toml b/programs/vote/Cargo.toml index 206eae08a18fc9..e3e0b1ab516cda 100644 --- a/programs/vote/Cargo.toml +++ b/programs/vote/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-vote-program" -version = "1.11.7" +version = "1.11.8" description = "Solana Vote program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -16,15 +16,15 @@ num-derive = "0.3" num-traits = "0.2" serde = "1.0.138" serde_derive = "1.0.103" -solana-frozen-abi = { path = "../../frozen-abi", version = "=1.11.7" } -solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.11.7" } -solana-metrics = { path = "../../metrics", version = "=1.11.7" } -solana-program-runtime = { path = "../../program-runtime", version = "=1.11.7" } -solana-sdk = { path = "../../sdk", version = "=1.11.7" } +solana-frozen-abi = { path = "../../frozen-abi", version = "=1.11.8" } +solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.11.8" } +solana-metrics = { path = "../../metrics", version = "=1.11.8" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.11.8" } +solana-sdk = { path = "../../sdk", version = "=1.11.8" } thiserror = "1.0" [dev-dependencies] -solana-logger = { path = "../../logger", version = "=1.11.7" } +solana-logger = { path = "../../logger", version = "=1.11.8" } [build-dependencies] rustc_version = "0.4" diff --git a/programs/zk-token-proof/Cargo.toml b/programs/zk-token-proof/Cargo.toml index c6f1ec42cf6921..b6420c4a96005a 100644 --- a/programs/zk-token-proof/Cargo.toml +++ b/programs/zk-token-proof/Cargo.toml @@ -3,7 +3,7 @@ name = "solana-zk-token-proof-program" description = "Solana Zk Token Proof Program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" -version = "1.11.7" +version = "1.11.8" license = "Apache-2.0" edition = "2021" @@ -12,6 +12,6 @@ bytemuck = { version = "1.11.0", features = ["derive"] } getrandom = { version = "0.1", features = ["dummy"] } num-derive = "0.3" num-traits = "0.2" -solana-program-runtime = { path = "../../program-runtime", version = "=1.11.7" } -solana-sdk = { path = "../../sdk", version = "=1.11.7" } -solana-zk-token-sdk = { path = "../../zk-token-sdk", version = "=1.11.7" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.11.8" } +solana-sdk = { path = "../../sdk", version = "=1.11.8" } +solana-zk-token-sdk = { path = "../../zk-token-sdk", version = "=1.11.8" } diff --git a/rayon-threadlimit/Cargo.toml b/rayon-threadlimit/Cargo.toml index 1b3514b8e9c379..436e67c67a4bfd 100644 --- a/rayon-threadlimit/Cargo.toml +++ b/rayon-threadlimit/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-rayon-threadlimit" -version = "1.11.7" +version = "1.11.8" description = "solana-rayon-threadlimit" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-rayon-threadlimit" diff --git a/rbpf-cli/Cargo.toml b/rbpf-cli/Cargo.toml index e7dc32fcb52357..2e793e7f622bca 100644 --- a/rbpf-cli/Cargo.toml +++ b/rbpf-cli/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "rbpf-cli" -version = "1.11.7" +version = "1.11.8" description = "CLI to test and analyze eBPF programs" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/rbpf" @@ -13,8 +13,8 @@ publish = false clap = { version = "3.1.5", features = ["cargo"] } serde = "1.0.138" serde_json = "1.0.81" -solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.11.7" } -solana-logger = { path = "../logger", version = "=1.11.7" } -solana-program-runtime = { path = "../program-runtime", version = "=1.11.7" } -solana-sdk = { path = "../sdk", version = "=1.11.7" } +solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.11.8" } +solana-logger = { path = "../logger", version = "=1.11.8" } +solana-program-runtime = { path = "../program-runtime", version = "=1.11.8" } +solana-sdk = { path = "../sdk", version = "=1.11.8" } solana_rbpf = "=0.2.31" diff --git a/remote-wallet/Cargo.toml b/remote-wallet/Cargo.toml index 887a1b25804614..9e44d435dfba6d 100644 --- a/remote-wallet/Cargo.toml +++ b/remote-wallet/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-remote-wallet" description = "Blockchain, Rebuilt for Scale" -version = "1.11.7" +version = "1.11.8" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -19,7 +19,7 @@ num-traits = { version = "0.2" } parking_lot = "0.12" qstring = "0.7.2" semver = "1.0" -solana-sdk = { path = "../sdk", version = "=1.11.7" } +solana-sdk = { path = "../sdk", version = "=1.11.8" } thiserror = "1.0" uriparse = "0.6.4" diff --git a/rpc-test/Cargo.toml b/rpc-test/Cargo.toml index 2435a55c391449..c0db2b02a24d92 100644 --- a/rpc-test/Cargo.toml +++ b/rpc-test/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-rpc-test" -version = "1.11.7" +version = "1.11.8" description = "Solana RPC Test" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -19,17 +19,17 @@ log = "0.4.17" reqwest = { version = "0.11.11", default-features = false, features = ["blocking", "brotli", "deflate", "gzip", "rustls-tls", "json"] } serde = "1.0.138" serde_json = "1.0.81" -solana-account-decoder = { path = "../account-decoder", version = "=1.11.7" } -solana-client = { path = "../client", version = "=1.11.7" } -solana-rpc = { path = "../rpc", version = "=1.11.7" } -solana-sdk = { path = "../sdk", version = "=1.11.7" } -solana-streamer = { path = "../streamer", version = "=1.11.7" } -solana-test-validator = { path = "../test-validator", version = "=1.11.7" } -solana-transaction-status = { path = "../transaction-status", version = "=1.11.7" } +solana-account-decoder = { path = "../account-decoder", version = "=1.11.8" } +solana-client = { path = "../client", version = "=1.11.8" } +solana-rpc = { path = "../rpc", version = "=1.11.8" } +solana-sdk = { path = "../sdk", version = "=1.11.8" } +solana-streamer = { path = "../streamer", version = "=1.11.8" } +solana-test-validator = { path = "../test-validator", version = "=1.11.8" } +solana-transaction-status = { path = "../transaction-status", version = "=1.11.8" } tokio = { version = "~1.14.1", features = ["full"] } [dev-dependencies] -solana-logger = { path = "../logger", version = "=1.11.7" } +solana-logger = { path = "../logger", version = "=1.11.8" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/rpc/Cargo.toml b/rpc/Cargo.toml index 6f05c1bd08e1b1..c4dd1bb2ea8df3 100644 --- a/rpc/Cargo.toml +++ b/rpc/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-rpc" -version = "1.11.7" +version = "1.11.8" description = "Solana RPC" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -29,26 +29,26 @@ serde = "1.0.138" serde_derive = "1.0.103" serde_json = "1.0.81" soketto = "0.7" -solana-account-decoder = { path = "../account-decoder", version = "=1.11.7" } -solana-client = { path = "../client", version = "=1.11.7" } -solana-entry = { path = "../entry", version = "=1.11.7" } -solana-faucet = { path = "../faucet", version = "=1.11.7" } -solana-gossip = { path = "../gossip", version = "=1.11.7" } -solana-ledger = { path = "../ledger", version = "=1.11.7" } -solana-measure = { path = "../measure", version = "=1.11.7" } -solana-metrics = { path = "../metrics", version = "=1.11.7" } -solana-perf = { path = "../perf", version = "=1.11.7" } -solana-poh = { path = "../poh", version = "=1.11.7" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.11.7" } -solana-runtime = { path = "../runtime", version = "=1.11.7" } -solana-sdk = { path = "../sdk", version = "=1.11.7" } -solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.11.7" } -solana-stake-program = { path = "../programs/stake", version = "=1.11.7" } -solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.11.7" } -solana-streamer = { path = "../streamer", version = "=1.11.7" } -solana-transaction-status = { path = "../transaction-status", version = "=1.11.7" } -solana-version = { path = "../version", version = "=1.11.7" } -solana-vote-program = { path = "../programs/vote", version = "=1.11.7" } +solana-account-decoder = { path = "../account-decoder", version = "=1.11.8" } +solana-client = { path = "../client", version = "=1.11.8" } +solana-entry = { path = "../entry", version = "=1.11.8" } +solana-faucet = { path = "../faucet", version = "=1.11.8" } +solana-gossip = { path = "../gossip", version = "=1.11.8" } +solana-ledger = { path = "../ledger", version = "=1.11.8" } +solana-measure = { path = "../measure", version = "=1.11.8" } +solana-metrics = { path = "../metrics", version = "=1.11.8" } +solana-perf = { path = "../perf", version = "=1.11.8" } +solana-poh = { path = "../poh", version = "=1.11.8" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.11.8" } +solana-runtime = { path = "../runtime", version = "=1.11.8" } +solana-sdk = { path = "../sdk", version = "=1.11.8" } +solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.11.8" } +solana-stake-program = { path = "../programs/stake", version = "=1.11.8" } +solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.11.8" } +solana-streamer = { path = "../streamer", version = "=1.11.8" } +solana-transaction-status = { path = "../transaction-status", version = "=1.11.8" } +solana-version = { path = "../version", version = "=1.11.8" } +solana-vote-program = { path = "../programs/vote", version = "=1.11.8" } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } spl-token-2022 = { version = "=0.4.2", features = ["no-entrypoint"] } stream-cancel = "0.8.1" @@ -58,9 +58,9 @@ tokio-util = { version = "0.6", features = ["codec", "compat"] } [dev-dependencies] serial_test = "0.8.0" -solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.11.7" } -solana-net-utils = { path = "../net-utils", version = "=1.11.7" } -solana-stake-program = { path = "../programs/stake", version = "=1.11.7" } +solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.11.8" } +solana-net-utils = { path = "../net-utils", version = "=1.11.8" } +solana-stake-program = { path = "../programs/stake", version = "=1.11.8" } symlink = "0.1.0" [lib] diff --git a/runtime/Cargo.toml b/runtime/Cargo.toml index f9d7d56c82b778..3baf16d7af408e 100644 --- a/runtime/Cargo.toml +++ b/runtime/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-runtime" -version = "1.11.7" +version = "1.11.8" description = "Solana runtime" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -39,21 +39,21 @@ rayon = "1.5.3" regex = "1.5.6" serde = { version = "1.0.138", features = ["rc"] } serde_derive = "1.0.103" -solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.11.7" } -solana-bucket-map = { path = "../bucket_map", version = "=1.11.7" } -solana-compute-budget-program = { path = "../programs/compute-budget", version = "=1.11.7" } -solana-config-program = { path = "../programs/config", version = "=1.11.7" } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.11.7" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.11.7" } -solana-measure = { path = "../measure", version = "=1.11.7" } -solana-metrics = { path = "../metrics", version = "=1.11.7" } -solana-program-runtime = { path = "../program-runtime", version = "=1.11.7" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.11.7" } -solana-sdk = { path = "../sdk", version = "=1.11.7" } -solana-stake-program = { path = "../programs/stake", version = "=1.11.7" } -solana-vote-program = { path = "../programs/vote", version = "=1.11.7" } -solana-zk-token-proof-program = { path = "../programs/zk-token-proof", version = "=1.11.7" } -solana-zk-token-sdk = { path = "../zk-token-sdk", version = "=1.11.7" } +solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.11.8" } +solana-bucket-map = { path = "../bucket_map", version = "=1.11.8" } +solana-compute-budget-program = { path = "../programs/compute-budget", version = "=1.11.8" } +solana-config-program = { path = "../programs/config", version = "=1.11.8" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.11.8" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.11.8" } +solana-measure = { path = "../measure", version = "=1.11.8" } +solana-metrics = { path = "../metrics", version = "=1.11.8" } +solana-program-runtime = { path = "../program-runtime", version = "=1.11.8" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.11.8" } +solana-sdk = { path = "../sdk", version = "=1.11.8" } +solana-stake-program = { path = "../programs/stake", version = "=1.11.8" } +solana-vote-program = { path = "../programs/vote", version = "=1.11.8" } +solana-zk-token-proof-program = { path = "../programs/zk-token-proof", version = "=1.11.8" } +solana-zk-token-sdk = { path = "../zk-token-sdk", version = "=1.11.8" } strum = { version = "0.24", features = ["derive"] } strum_macros = "0.24" symlink = "0.1.0" @@ -71,7 +71,7 @@ assert_matches = "1.5.0" ed25519-dalek = "=1.0.1" libsecp256k1 = "0.6.0" rand_chacha = "0.2.2" -solana-logger = { path = "../logger", version = "=1.11.7" } +solana-logger = { path = "../logger", version = "=1.11.8" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/runtime/store-tool/Cargo.toml b/runtime/store-tool/Cargo.toml index 216313f836bdc8..2935d482b79d40 100644 --- a/runtime/store-tool/Cargo.toml +++ b/runtime/store-tool/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-store-tool" description = "Tool to inspect append vecs" -version = "1.11.7" +version = "1.11.8" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -12,9 +12,9 @@ publish = false [dependencies] clap = "2.33.1" log = { version = "0.4.17" } -solana-logger = { path = "../../logger", version = "=1.11.7" } -solana-runtime = { path = "..", version = "=1.11.7" } -solana-version = { path = "../../version", version = "=1.11.7" } +solana-logger = { path = "../../logger", version = "=1.11.8" } +solana-runtime = { path = "..", version = "=1.11.8" } +solana-version = { path = "../../version", version = "=1.11.8" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/sdk/Cargo.toml b/sdk/Cargo.toml index 97b921bcf250eb..f30f769fcb1399 100644 --- a/sdk/Cargo.toml +++ b/sdk/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-sdk" -version = "1.11.7" +version = "1.11.8" description = "Solana SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -71,11 +71,11 @@ serde_derive = "1.0.103" serde_json = { version = "1.0.81", optional = true } sha2 = "0.10.2" sha3 = { version = "0.10.1", optional = true } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.11.7" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.11.7" } -solana-logger = { path = "../logger", version = "=1.11.7", optional = true } -solana-program = { path = "program", version = "=1.11.7" } -solana-sdk-macro = { path = "macro", version = "=1.11.7" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.11.8" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.11.8" } +solana-logger = { path = "../logger", version = "=1.11.8", optional = true } +solana-program = { path = "program", version = "=1.11.8" } +solana-sdk-macro = { path = "macro", version = "=1.11.8" } thiserror = "1.0" uriparse = "0.6.4" wasm-bindgen = "0.2" diff --git a/sdk/cargo-build-bpf/Cargo.toml b/sdk/cargo-build-bpf/Cargo.toml index ffe25410a40e7d..786fff9818876c 100644 --- a/sdk/cargo-build-bpf/Cargo.toml +++ b/sdk/cargo-build-bpf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-cargo-build-bpf" -version = "1.11.7" +version = "1.11.8" description = "Compile a local package and all of its dependencies using the Solana SBF SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,7 +12,7 @@ publish = false [dependencies] cargo_metadata = "0.15.0" clap = { version = "3.1.5", features = ["cargo", "env"] } -solana-sdk = { path = "..", version = "=1.11.7" } +solana-sdk = { path = "..", version = "=1.11.8" } [features] program = [] diff --git a/sdk/cargo-build-sbf/Cargo.toml b/sdk/cargo-build-sbf/Cargo.toml index 851cebb14493de..8baa7189804ef3 100644 --- a/sdk/cargo-build-sbf/Cargo.toml +++ b/sdk/cargo-build-sbf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-cargo-build-sbf" -version = "1.11.7" +version = "1.11.8" description = "Compile a local package and all of its dependencies using the Solana SBF SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -15,9 +15,9 @@ cargo_metadata = "0.15.0" clap = { version = "3.1.5", features = ["cargo", "env"] } log = { version = "0.4.14", features = ["std"] } regex = "1.5.6" -solana-download-utils = { path = "../../download-utils", version = "=1.11.7" } -solana-logger = { path = "../../logger", version = "=1.11.7" } -solana-sdk = { path = "..", version = "=1.11.7" } +solana-download-utils = { path = "../../download-utils", version = "=1.11.8" } +solana-logger = { path = "../../logger", version = "=1.11.8" } +solana-sdk = { path = "..", version = "=1.11.8" } tar = "0.4.38" [dev-dependencies] diff --git a/sdk/cargo-build-sbf/tests/crates/fail/Cargo.toml b/sdk/cargo-build-sbf/tests/crates/fail/Cargo.toml index a767d1f32616d4..9b73054865228b 100644 --- a/sdk/cargo-build-sbf/tests/crates/fail/Cargo.toml +++ b/sdk/cargo-build-sbf/tests/crates/fail/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "fail" -version = "1.11.7" +version = "1.11.8" description = "Solana SBF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ edition = "2021" publish = false [dependencies] -solana-program = { path = "../../../../program", version = "=1.11.7" } +solana-program = { path = "../../../../program", version = "=1.11.8" } [lib] crate-type = ["cdylib"] diff --git a/sdk/cargo-build-sbf/tests/crates/noop/Cargo.toml b/sdk/cargo-build-sbf/tests/crates/noop/Cargo.toml index 6131ee692550d7..3800a75485cce0 100644 --- a/sdk/cargo-build-sbf/tests/crates/noop/Cargo.toml +++ b/sdk/cargo-build-sbf/tests/crates/noop/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "noop" -version = "1.11.7" +version = "1.11.8" description = "Solana SBF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ edition = "2021" publish = false [dependencies] -solana-program = { path = "../../../../program", version = "=1.11.7" } +solana-program = { path = "../../../../program", version = "=1.11.8" } [lib] crate-type = ["cdylib"] diff --git a/sdk/cargo-test-bpf/Cargo.toml b/sdk/cargo-test-bpf/Cargo.toml index 1a8cb3331e0d57..3442598f2822bf 100644 --- a/sdk/cargo-test-bpf/Cargo.toml +++ b/sdk/cargo-test-bpf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-cargo-test-bpf" -version = "1.11.7" +version = "1.11.8" description = "Execute all unit and integration tests after building with the Solana SBF SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/sdk/cargo-test-sbf/Cargo.toml b/sdk/cargo-test-sbf/Cargo.toml index b6460758b732b8..4f628b9aa9e6d6 100644 --- a/sdk/cargo-test-sbf/Cargo.toml +++ b/sdk/cargo-test-sbf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-cargo-test-sbf" -version = "1.11.7" +version = "1.11.8" description = "Execute all unit and integration tests after building with the Solana SBF SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/sdk/gen-headers/Cargo.toml b/sdk/gen-headers/Cargo.toml index 5693cacb857e16..8fc3eba8e1fe03 100644 --- a/sdk/gen-headers/Cargo.toml +++ b/sdk/gen-headers/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "gen-headers" -version = "1.11.7" +version = "1.11.8" edition = "2021" license = "Apache-2.0" publish = false diff --git a/sdk/macro/Cargo.toml b/sdk/macro/Cargo.toml index cb87a4c7c3ec07..1b77fe9f0da77c 100644 --- a/sdk/macro/Cargo.toml +++ b/sdk/macro/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-sdk-macro" -version = "1.11.7" +version = "1.11.8" description = "Solana SDK Macro" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/sdk/program/Cargo.toml b/sdk/program/Cargo.toml index 852c8387440e29..e3995231b2b45e 100644 --- a/sdk/program/Cargo.toml +++ b/sdk/program/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-program" -version = "1.11.7" +version = "1.11.8" description = "Solana Program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -31,9 +31,9 @@ serde_derive = "1.0" serde_json = "1.0" sha2 = "0.10.0" sha3 = "0.10.0" -solana-frozen-abi = { path = "../../frozen-abi", version = "=1.11.7" } -solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.11.7" } -solana-sdk-macro = { path = "../macro", version = "=1.11.7" } +solana-frozen-abi = { path = "../../frozen-abi", version = "=1.11.8" } +solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.11.8" } +solana-sdk-macro = { path = "../macro", version = "=1.11.8" } thiserror = "1.0" [target.'cfg(not(target_os = "solana"))'.dependencies] @@ -50,7 +50,7 @@ wasm-bindgen = "0.2" zeroize = { version = "1.3", default-features = true, features = ["zeroize_derive"] } [target.'cfg(not(target_os = "solana"))'.dev-dependencies] -solana-logger = { path = "../../logger", version = "=1.11.7" } +solana-logger = { path = "../../logger", version = "=1.11.8" } [target.'cfg(target_arch = "wasm32")'.dependencies] console_error_panic_hook = "0.1.7" diff --git a/send-transaction-service/Cargo.toml b/send-transaction-service/Cargo.toml index 238c2cea36bfd3..f6c18a04f6d871 100644 --- a/send-transaction-service/Cargo.toml +++ b/send-transaction-service/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-send-transaction-service" -version = "1.11.7" +version = "1.11.8" description = "Solana send transaction service" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,14 +12,14 @@ edition = "2021" [dependencies] crossbeam-channel = "0.5" log = "0.4.17" -solana-client = { path = "../client", version = "=1.11.7" } -solana-measure = { path = "../measure", version = "=1.11.7" } -solana-metrics = { path = "../metrics", version = "=1.11.7" } -solana-runtime = { path = "../runtime", version = "=1.11.7" } -solana-sdk = { path = "../sdk", version = "=1.11.7" } +solana-client = { path = "../client", version = "=1.11.8" } +solana-measure = { path = "../measure", version = "=1.11.8" } +solana-metrics = { path = "../metrics", version = "=1.11.8" } +solana-runtime = { path = "../runtime", version = "=1.11.8" } +solana-sdk = { path = "../sdk", version = "=1.11.8" } [dev-dependencies] -solana-logger = { path = "../logger", version = "=1.11.7" } +solana-logger = { path = "../logger", version = "=1.11.8" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/stake-accounts/Cargo.toml b/stake-accounts/Cargo.toml index 5697e846c62f87..4eb078bf1340d4 100644 --- a/stake-accounts/Cargo.toml +++ b/stake-accounts/Cargo.toml @@ -3,7 +3,7 @@ name = "solana-stake-accounts" description = "Blockchain, Rebuilt for Scale" authors = ["Solana Maintainers "] edition = "2021" -version = "1.11.7" +version = "1.11.8" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -11,15 +11,15 @@ documentation = "https://docs.rs/solana-stake-accounts" [dependencies] clap = "2.33.1" -solana-clap-utils = { path = "../clap-utils", version = "=1.11.7" } -solana-cli-config = { path = "../cli-config", version = "=1.11.7" } -solana-client = { path = "../client", version = "=1.11.7" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.11.7" } -solana-sdk = { path = "../sdk", version = "=1.11.7" } -solana-stake-program = { path = "../programs/stake", version = "=1.11.7" } +solana-clap-utils = { path = "../clap-utils", version = "=1.11.8" } +solana-cli-config = { path = "../cli-config", version = "=1.11.8" } +solana-client = { path = "../client", version = "=1.11.8" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.11.8" } +solana-sdk = { path = "../sdk", version = "=1.11.8" } +solana-stake-program = { path = "../programs/stake", version = "=1.11.8" } [dev-dependencies] -solana-runtime = { path = "../runtime", version = "=1.11.7" } +solana-runtime = { path = "../runtime", version = "=1.11.8" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/storage-bigtable/Cargo.toml b/storage-bigtable/Cargo.toml index 231a6ef695d4a3..b9e380ab5715c7 100644 --- a/storage-bigtable/Cargo.toml +++ b/storage-bigtable/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-storage-bigtable" -version = "1.11.7" +version = "1.11.8" description = "Solana Storage BigTable" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -27,10 +27,10 @@ prost-types = "0.11.0" serde = "1.0.138" serde_derive = "1.0.103" smpl_jwt = "0.7.1" -solana-metrics = { path = "../metrics", version = "=1.11.7" } -solana-sdk = { path = "../sdk", version = "=1.11.7" } -solana-storage-proto = { path = "../storage-proto", version = "=1.11.7" } -solana-transaction-status = { path = "../transaction-status", version = "=1.11.7" } +solana-metrics = { path = "../metrics", version = "=1.11.8" } +solana-sdk = { path = "../sdk", version = "=1.11.8" } +solana-storage-proto = { path = "../storage-proto", version = "=1.11.8" } +solana-transaction-status = { path = "../transaction-status", version = "=1.11.8" } thiserror = "1.0" tokio = "1" tonic = { version = "0.8.0", features = ["tls", "transport"] } diff --git a/storage-bigtable/build-proto/Cargo.lock b/storage-bigtable/build-proto/Cargo.lock index 589dd2ab1eff16..f99adeb24fb2a1 100644 --- a/storage-bigtable/build-proto/Cargo.lock +++ b/storage-bigtable/build-proto/Cargo.lock @@ -219,7 +219,7 @@ dependencies = [ [[package]] name = "proto" -version = "1.11.7" +version = "1.11.8" dependencies = [ "protobuf-src", "tonic-build", diff --git a/storage-bigtable/build-proto/Cargo.toml b/storage-bigtable/build-proto/Cargo.toml index 69987c1d58411c..2d927a656986f6 100644 --- a/storage-bigtable/build-proto/Cargo.toml +++ b/storage-bigtable/build-proto/Cargo.toml @@ -7,7 +7,7 @@ license = "Apache-2.0" name = "proto" publish = false repository = "https://github.com/solana-labs/solana" -version = "1.11.7" +version = "1.11.8" [workspace] diff --git a/storage-proto/Cargo.toml b/storage-proto/Cargo.toml index 5b44205470363d..4daa07f30a158a 100644 --- a/storage-proto/Cargo.toml +++ b/storage-proto/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-storage-proto" -version = "1.11.7" +version = "1.11.8" description = "Solana Storage Protobuf Definitions" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,9 +14,9 @@ bincode = "1.3.3" bs58 = "0.4.0" prost = "0.11.0" serde = "1.0.138" -solana-account-decoder = { path = "../account-decoder", version = "=1.11.7" } -solana-sdk = { path = "../sdk", version = "=1.11.7" } -solana-transaction-status = { path = "../transaction-status", version = "=1.11.7" } +solana-account-decoder = { path = "../account-decoder", version = "=1.11.8" } +solana-sdk = { path = "../sdk", version = "=1.11.8" } +solana-transaction-status = { path = "../transaction-status", version = "=1.11.8" } [dev-dependencies] enum-iterator = "0.8.1" diff --git a/streamer/Cargo.toml b/streamer/Cargo.toml index 7fecc1e2ac39a0..d87923155178b8 100644 --- a/streamer/Cargo.toml +++ b/streamer/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-streamer" -version = "1.11.7" +version = "1.11.8" description = "Solana Streamer" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -25,15 +25,15 @@ quinn = "0.8.3" rand = "0.7.0" rcgen = "0.9.2" rustls = { version = "0.20.6", features = ["dangerous_configuration"] } -solana-metrics = { path = "../metrics", version = "=1.11.7" } -solana-perf = { path = "../perf", version = "=1.11.7" } -solana-sdk = { path = "../sdk", version = "=1.11.7" } +solana-metrics = { path = "../metrics", version = "=1.11.8" } +solana-perf = { path = "../perf", version = "=1.11.8" } +solana-sdk = { path = "../sdk", version = "=1.11.8" } thiserror = "1.0" tokio = { version = "1", features = ["full"] } x509-parser = "0.14.0" [dev-dependencies] -solana-logger = { path = "../logger", version = "=1.11.7" } +solana-logger = { path = "../logger", version = "=1.11.8" } [lib] crate-type = ["lib"] diff --git a/sys-tuner/Cargo.toml b/sys-tuner/Cargo.toml index b9cdd719cf2c82..f85f4cc5b60da5 100644 --- a/sys-tuner/Cargo.toml +++ b/sys-tuner/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-sys-tuner" description = "The solana cluster system tuner daemon" -version = "1.11.7" +version = "1.11.8" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,8 +14,8 @@ publish = true clap = "2.33.1" libc = "0.2.126" log = "0.4.17" -solana-logger = { path = "../logger", version = "=1.11.7" } -solana-version = { path = "../version", version = "=1.11.7" } +solana-logger = { path = "../logger", version = "=1.11.8" } +solana-version = { path = "../version", version = "=1.11.8" } [target."cfg(unix)".dependencies] unix_socket2 = "0.5.4" diff --git a/test-validator/Cargo.toml b/test-validator/Cargo.toml index 18fd99d170b2c7..d0aaced3fc97e8 100644 --- a/test-validator/Cargo.toml +++ b/test-validator/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "solana-test-validator" description = "Blockchain, Rebuilt for Scale" -version = "1.11.7" +version = "1.11.8" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-test-validator" readme = "../README.md" @@ -15,19 +15,19 @@ base64 = "0.13.0" log = "0.4.17" serde_derive = "1.0.103" serde_json = "1.0.81" -solana-cli-output = { path = "../cli-output", version = "=1.11.7" } -solana-client = { path = "../client", version = "=1.11.7" } -solana-core = { path = "../core", version = "=1.11.7" } -solana-gossip = { path = "../gossip", version = "=1.11.7" } -solana-ledger = { path = "../ledger", version = "=1.11.7" } -solana-logger = { path = "../logger", version = "=1.11.7" } -solana-net-utils = { path = "../net-utils", version = "=1.11.7" } -solana-program-runtime = { path = "../program-runtime", version = "=1.11.7" } -solana-program-test = { path = "../program-test", version = "=1.11.7" } -solana-rpc = { path = "../rpc", version = "=1.11.7" } -solana-runtime = { path = "../runtime", version = "=1.11.7" } -solana-sdk = { path = "../sdk", version = "=1.11.7" } -solana-streamer = { path = "../streamer", version = "=1.11.7" } +solana-cli-output = { path = "../cli-output", version = "=1.11.8" } +solana-client = { path = "../client", version = "=1.11.8" } +solana-core = { path = "../core", version = "=1.11.8" } +solana-gossip = { path = "../gossip", version = "=1.11.8" } +solana-ledger = { path = "../ledger", version = "=1.11.8" } +solana-logger = { path = "../logger", version = "=1.11.8" } +solana-net-utils = { path = "../net-utils", version = "=1.11.8" } +solana-program-runtime = { path = "../program-runtime", version = "=1.11.8" } +solana-program-test = { path = "../program-test", version = "=1.11.8" } +solana-rpc = { path = "../rpc", version = "=1.11.8" } +solana-runtime = { path = "../runtime", version = "=1.11.8" } +solana-sdk = { path = "../sdk", version = "=1.11.8" } +solana-streamer = { path = "../streamer", version = "=1.11.8" } tokio = { version = "1", features = ["full"] } [package.metadata.docs.rs] diff --git a/tokens/Cargo.toml b/tokens/Cargo.toml index 59378a44e26a1b..755bb4408e7658 100644 --- a/tokens/Cargo.toml +++ b/tokens/Cargo.toml @@ -3,7 +3,7 @@ name = "solana-tokens" description = "Blockchain, Rebuilt for Scale" authors = ["Solana Maintainers "] edition = "2021" -version = "1.11.7" +version = "1.11.8" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -19,14 +19,14 @@ indexmap = "1.9.1" indicatif = "0.16.2" pickledb = "0.4.1" serde = { version = "1.0", features = ["derive"] } -solana-account-decoder = { path = "../account-decoder", version = "=1.11.7" } -solana-clap-utils = { path = "../clap-utils", version = "=1.11.7" } -solana-cli-config = { path = "../cli-config", version = "=1.11.7" } -solana-client = { path = "../client", version = "=1.11.7" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.11.7" } -solana-sdk = { path = "../sdk", version = "=1.11.7" } -solana-transaction-status = { path = "../transaction-status", version = "=1.11.7" } -solana-version = { path = "../version", version = "=1.11.7" } +solana-account-decoder = { path = "../account-decoder", version = "=1.11.8" } +solana-clap-utils = { path = "../clap-utils", version = "=1.11.8" } +solana-cli-config = { path = "../cli-config", version = "=1.11.8" } +solana-client = { path = "../client", version = "=1.11.8" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.11.8" } +solana-sdk = { path = "../sdk", version = "=1.11.8" } +solana-transaction-status = { path = "../transaction-status", version = "=1.11.8" } +solana-version = { path = "../version", version = "=1.11.8" } spl-associated-token-account = { version = "=1.1.1" } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } tempfile = "3.3.0" @@ -34,6 +34,6 @@ thiserror = "1.0" [dev-dependencies] bincode = "1.3.3" -solana-logger = { path = "../logger", version = "=1.11.7" } -solana-streamer = { path = "../streamer", version = "=1.11.7" } -solana-test-validator = { path = "../test-validator", version = "=1.11.7" } +solana-logger = { path = "../logger", version = "=1.11.8" } +solana-streamer = { path = "../streamer", version = "=1.11.8" } +solana-test-validator = { path = "../test-validator", version = "=1.11.8" } diff --git a/transaction-dos/Cargo.toml b/transaction-dos/Cargo.toml index 545e0eab10c586..b7be63e65a0181 100644 --- a/transaction-dos/Cargo.toml +++ b/transaction-dos/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-transaction-dos" -version = "1.11.7" +version = "1.11.8" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,23 +14,23 @@ clap = "2.33.1" log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" -solana-clap-utils = { path = "../clap-utils", version = "=1.11.7" } -solana-cli = { path = "../cli", version = "=1.11.7" } -solana-client = { path = "../client", version = "=1.11.7" } -solana-core = { path = "../core", version = "=1.11.7" } -solana-faucet = { path = "../faucet", version = "=1.11.7" } -solana-gossip = { path = "../gossip", version = "=1.11.7" } -solana-logger = { path = "../logger", version = "=1.11.7" } -solana-measure = { path = "../measure", version = "=1.11.7" } -solana-net-utils = { path = "../net-utils", version = "=1.11.7" } -solana-runtime = { path = "../runtime", version = "=1.11.7" } -solana-sdk = { path = "../sdk", version = "=1.11.7" } -solana-streamer = { path = "../streamer", version = "=1.11.7" } -solana-transaction-status = { path = "../transaction-status", version = "=1.11.7" } -solana-version = { path = "../version", version = "=1.11.7" } +solana-clap-utils = { path = "../clap-utils", version = "=1.11.8" } +solana-cli = { path = "../cli", version = "=1.11.8" } +solana-client = { path = "../client", version = "=1.11.8" } +solana-core = { path = "../core", version = "=1.11.8" } +solana-faucet = { path = "../faucet", version = "=1.11.8" } +solana-gossip = { path = "../gossip", version = "=1.11.8" } +solana-logger = { path = "../logger", version = "=1.11.8" } +solana-measure = { path = "../measure", version = "=1.11.8" } +solana-net-utils = { path = "../net-utils", version = "=1.11.8" } +solana-runtime = { path = "../runtime", version = "=1.11.8" } +solana-sdk = { path = "../sdk", version = "=1.11.8" } +solana-streamer = { path = "../streamer", version = "=1.11.8" } +solana-transaction-status = { path = "../transaction-status", version = "=1.11.8" } +solana-version = { path = "../version", version = "=1.11.8" } [dev-dependencies] -solana-local-cluster = { path = "../local-cluster", version = "=1.11.7" } +solana-local-cluster = { path = "../local-cluster", version = "=1.11.8" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/transaction-status/Cargo.toml b/transaction-status/Cargo.toml index 9c5a5b1f908d0d..f0d9a895ca39a1 100644 --- a/transaction-status/Cargo.toml +++ b/transaction-status/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-transaction-status" -version = "1.11.7" +version = "1.11.8" description = "Solana transaction status types" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -20,11 +20,11 @@ log = "0.4.17" serde = "1.0.138" serde_derive = "1.0.103" serde_json = "1.0.81" -solana-account-decoder = { path = "../account-decoder", version = "=1.11.7" } -solana-measure = { path = "../measure", version = "=1.11.7" } -solana-metrics = { path = "../metrics", version = "=1.11.7" } -solana-sdk = { path = "../sdk", version = "=1.11.7" } -solana-vote-program = { path = "../programs/vote", version = "=1.11.7" } +solana-account-decoder = { path = "../account-decoder", version = "=1.11.8" } +solana-measure = { path = "../measure", version = "=1.11.8" } +solana-metrics = { path = "../metrics", version = "=1.11.8" } +solana-sdk = { path = "../sdk", version = "=1.11.8" } +solana-vote-program = { path = "../programs/vote", version = "=1.11.8" } spl-associated-token-account = { version = "=1.1.1", features = ["no-entrypoint"] } spl-memo = { version = "=3.0.1", features = ["no-entrypoint"] } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } diff --git a/upload-perf/Cargo.toml b/upload-perf/Cargo.toml index 11adcc4efdb668..58f9480a46895c 100644 --- a/upload-perf/Cargo.toml +++ b/upload-perf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-upload-perf" -version = "1.11.7" +version = "1.11.8" description = "Metrics Upload Utility" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -11,7 +11,7 @@ publish = false [dependencies] serde_json = "1.0.81" -solana-metrics = { path = "../metrics", version = "=1.11.7" } +solana-metrics = { path = "../metrics", version = "=1.11.8" } [[bin]] name = "solana-upload-perf" diff --git a/validator/Cargo.toml b/validator/Cargo.toml index 935e62f4b8c95a..1e93d405176501 100644 --- a/validator/Cargo.toml +++ b/validator/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-validator" description = "Blockchain, Rebuilt for Scale" -version = "1.11.7" +version = "1.11.8" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -28,30 +28,30 @@ num_cpus = "1.13.1" rand = "0.7.0" serde = "1.0.138" serde_json = "1.0.81" -solana-clap-utils = { path = "../clap-utils", version = "=1.11.7" } -solana-cli-config = { path = "../cli-config", version = "=1.11.7" } -solana-client = { path = "../client", version = "=1.11.7" } -solana-core = { path = "../core", version = "=1.11.7" } -solana-download-utils = { path = "../download-utils", version = "=1.11.7" } -solana-entry = { path = "../entry", version = "=1.11.7" } -solana-faucet = { path = "../faucet", version = "=1.11.7" } -solana-genesis-utils = { path = "../genesis-utils", version = "=1.11.7" } -solana-gossip = { path = "../gossip", version = "=1.11.7" } -solana-ledger = { path = "../ledger", version = "=1.11.7" } -solana-logger = { path = "../logger", version = "=1.11.7" } -solana-metrics = { path = "../metrics", version = "=1.11.7" } -solana-net-utils = { path = "../net-utils", version = "=1.11.7" } -solana-perf = { path = "../perf", version = "=1.11.7" } -solana-poh = { path = "../poh", version = "=1.11.7" } -solana-rpc = { path = "../rpc", version = "=1.11.7" } -solana-runtime = { path = "../runtime", version = "=1.11.7" } -solana-sdk = { path = "../sdk", version = "=1.11.7" } -solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.11.7" } -solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.11.7" } -solana-streamer = { path = "../streamer", version = "=1.11.7" } -solana-test-validator = { path = "../test-validator", version = "=1.11.7" } -solana-version = { path = "../version", version = "=1.11.7" } -solana-vote-program = { path = "../programs/vote", version = "=1.11.7" } +solana-clap-utils = { path = "../clap-utils", version = "=1.11.8" } +solana-cli-config = { path = "../cli-config", version = "=1.11.8" } +solana-client = { path = "../client", version = "=1.11.8" } +solana-core = { path = "../core", version = "=1.11.8" } +solana-download-utils = { path = "../download-utils", version = "=1.11.8" } +solana-entry = { path = "../entry", version = "=1.11.8" } +solana-faucet = { path = "../faucet", version = "=1.11.8" } +solana-genesis-utils = { path = "../genesis-utils", version = "=1.11.8" } +solana-gossip = { path = "../gossip", version = "=1.11.8" } +solana-ledger = { path = "../ledger", version = "=1.11.8" } +solana-logger = { path = "../logger", version = "=1.11.8" } +solana-metrics = { path = "../metrics", version = "=1.11.8" } +solana-net-utils = { path = "../net-utils", version = "=1.11.8" } +solana-perf = { path = "../perf", version = "=1.11.8" } +solana-poh = { path = "../poh", version = "=1.11.8" } +solana-rpc = { path = "../rpc", version = "=1.11.8" } +solana-runtime = { path = "../runtime", version = "=1.11.8" } +solana-sdk = { path = "../sdk", version = "=1.11.8" } +solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.11.8" } +solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.11.8" } +solana-streamer = { path = "../streamer", version = "=1.11.8" } +solana-test-validator = { path = "../test-validator", version = "=1.11.8" } +solana-version = { path = "../version", version = "=1.11.8" } +solana-vote-program = { path = "../programs/vote", version = "=1.11.8" } symlink = "0.1.0" [target.'cfg(not(target_env = "msvc"))'.dependencies] diff --git a/version/Cargo.toml b/version/Cargo.toml index 385176928ba6c4..ef2ca5f24746c8 100644 --- a/version/Cargo.toml +++ b/version/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-version" -version = "1.11.7" +version = "1.11.8" description = "Solana Version" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,9 +14,9 @@ log = "0.4.17" semver = "1.0.10" serde = "1.0.138" serde_derive = "1.0.103" -solana-frozen-abi = { path = "../frozen-abi", version = "=1.11.7" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.11.7" } -solana-sdk = { path = "../sdk", version = "=1.11.7" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.11.8" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.11.8" } +solana-sdk = { path = "../sdk", version = "=1.11.8" } [lib] name = "solana_version" diff --git a/watchtower/Cargo.toml b/watchtower/Cargo.toml index d985eb6dcf8c1a..89d7376c8dc737 100644 --- a/watchtower/Cargo.toml +++ b/watchtower/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-watchtower" description = "Blockchain, Rebuilt for Scale" -version = "1.11.7" +version = "1.11.8" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -13,15 +13,15 @@ documentation = "https://docs.rs/solana-watchtower" clap = "2.33.1" humantime = "2.0.1" log = "0.4.17" -solana-clap-utils = { path = "../clap-utils", version = "=1.11.7" } -solana-cli-config = { path = "../cli-config", version = "=1.11.7" } -solana-cli-output = { path = "../cli-output", version = "=1.11.7" } -solana-client = { path = "../client", version = "=1.11.7" } -solana-logger = { path = "../logger", version = "=1.11.7" } -solana-metrics = { path = "../metrics", version = "=1.11.7" } -solana-notifier = { path = "../notifier", version = "=1.11.7" } -solana-sdk = { path = "../sdk", version = "=1.11.7" } -solana-version = { path = "../version", version = "=1.11.7" } +solana-clap-utils = { path = "../clap-utils", version = "=1.11.8" } +solana-cli-config = { path = "../cli-config", version = "=1.11.8" } +solana-cli-output = { path = "../cli-output", version = "=1.11.8" } +solana-client = { path = "../client", version = "=1.11.8" } +solana-logger = { path = "../logger", version = "=1.11.8" } +solana-metrics = { path = "../metrics", version = "=1.11.8" } +solana-notifier = { path = "../notifier", version = "=1.11.8" } +solana-sdk = { path = "../sdk", version = "=1.11.8" } +solana-version = { path = "../version", version = "=1.11.8" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/zk-token-sdk/Cargo.toml b/zk-token-sdk/Cargo.toml index a4082e88a412b4..843bd76ae6ce1b 100644 --- a/zk-token-sdk/Cargo.toml +++ b/zk-token-sdk/Cargo.toml @@ -3,7 +3,7 @@ name = "solana-zk-token-sdk" description = "Solana Zk Token SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" -version = "1.11.7" +version = "1.11.8" license = "Apache-2.0" edition = "2021" @@ -12,7 +12,7 @@ base64 = "0.13" bytemuck = { version = "1.11.0", features = ["derive"] } num-derive = "0.3" num-traits = "0.2" -solana-program = { path = "../sdk/program", version = "=1.11.7" } +solana-program = { path = "../sdk/program", version = "=1.11.8" } [target.'cfg(not(target_os = "solana"))'.dependencies] aes-gcm-siv = "0.10.3" @@ -28,7 +28,7 @@ rand = "0.7" serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" sha3 = "0.9" -solana-sdk = { path = "../sdk", version = "=1.11.7" } +solana-sdk = { path = "../sdk", version = "=1.11.8" } subtle = "2" thiserror = "1.0" zeroize = { version = "1.3", default-features = false, features = ["zeroize_derive"] } From ae7a76c3a59ef0c7d3682638c736015af48f1fe5 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Thu, 18 Aug 2022 05:39:29 +0000 Subject: [PATCH 038/465] chore: only buildkite pipelines use sccache in docker-run.sh (backport #27204) (#27227) chore: only buildkite pipelines use sccache in docker-run.sh (#27204) chore: only buildkite ci use sccache (cherry picked from commit d2d4d4a240df1da4503cdf704f176c33a3a1474e) Co-authored-by: Yihau Chen --- ci/docker-run.sh | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/ci/docker-run.sh b/ci/docker-run.sh index e154de2eefd96d..a7b94f902e8303 100755 --- a/ci/docker-run.sh +++ b/ci/docker-run.sh @@ -45,14 +45,16 @@ if [[ -n $CI ]]; then # Share the real ~/.cargo between docker containers in CI for speed ARGS+=(--volume "$HOME:/home") - # sccache - ARGS+=( - --env "RUSTC_WRAPPER=/home/.cargo/bin/sccache" - --env AWS_ACCESS_KEY_ID - --env AWS_SECRET_ACCESS_KEY - --env SCCACHE_BUCKET - --env SCCACHE_REGION - ) + if [[ -n $BUILDKITE ]]; then + # sccache + ARGS+=( + --env "RUSTC_WRAPPER=/home/.cargo/bin/sccache" + --env AWS_ACCESS_KEY_ID + --env AWS_SECRET_ACCESS_KEY + --env SCCACHE_BUCKET + --env SCCACHE_REGION + ) + fi else # Avoid sharing ~/.cargo when building locally to avoid a mixed macOS/Linux # ~/.cargo From 1123d58dbcbc46e4c458409ddc44a1f9fa7a8b2f Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Thu, 18 Aug 2022 10:18:32 +0000 Subject: [PATCH 039/465] sdk: Fix args after "--" in build-bpf and test-bpf (backport #27221) (#27225) sdk: Fix args after "--" in build-bpf and test-bpf (#27221) (cherry picked from commit 68a5e05f81b27e2e651a79fdd722889de5164d6d) Co-authored-by: Jon Cinque --- sdk/cargo-build-bpf/src/main.rs | 5 +++-- sdk/cargo-test-bpf/src/main.rs | 5 +++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/sdk/cargo-build-bpf/src/main.rs b/sdk/cargo-build-bpf/src/main.rs index 5de2742c2add32..0ea34f68c6cb74 100644 --- a/sdk/cargo-build-bpf/src/main.rs +++ b/sdk/cargo-build-bpf/src/main.rs @@ -26,8 +26,9 @@ fn main() { args.remove(0); } } - args.push("--arch".to_string()); - args.push("bpf".to_string()); + let index = args.iter().position(|x| x == "--").unwrap_or(args.len()); + args.insert(index, "bpf".to_string()); + args.insert(index, "--arch".to_string()); print!("cargo-build-bpf child: {}", program.display()); for a in &args { print!(" {}", a); diff --git a/sdk/cargo-test-bpf/src/main.rs b/sdk/cargo-test-bpf/src/main.rs index fee4dc73811fe5..af5a382fdd4ec9 100644 --- a/sdk/cargo-test-bpf/src/main.rs +++ b/sdk/cargo-test-bpf/src/main.rs @@ -32,8 +32,9 @@ fn main() { args.remove(0); } } - args.push("--arch".to_string()); - args.push("bpf".to_string()); + let index = args.iter().position(|x| x == "--").unwrap_or(args.len()); + args.insert(index, "bpf".to_string()); + args.insert(index, "--arch".to_string()); print!("cargo-test-bpf child: {}", program.display()); for a in &args { print!(" {}", a); From 8a306421c3211736db42a6d30199b87a7dd5a847 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Thu, 18 Aug 2022 18:00:10 +0000 Subject: [PATCH 040/465] snapshots: serialize version file first (backport #27192) (#27203) snapshots: serialize version file first (#27192) serialize version file first (cherry picked from commit c1111fa069dfed5f8ba0801b2abae3ceded923dd) Co-authored-by: apfitzge --- runtime/src/snapshot_utils.rs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/runtime/src/snapshot_utils.rs b/runtime/src/snapshot_utils.rs index 602df50dd9abb1..4ce38c36a1e04a 100644 --- a/runtime/src/snapshot_utils.rs +++ b/runtime/src/snapshot_utils.rs @@ -344,10 +344,12 @@ pub fn archive_snapshot_package( let do_archive_files = |encoder: &mut dyn Write| -> Result<()> { let mut archive = tar::Builder::new(encoder); + // Serialize the version and snapshots files before accounts so we can quickly determine the version + // and other bank fields. This is necessary if we want to interleave unpacking with reconstruction + archive.append_path_with_name(staging_dir.as_ref().join("version"), "version")?; for dir in ["snapshots", "accounts"] { archive.append_dir_all(dir, staging_dir.as_ref().join(dir))?; } - archive.append_path_with_name(staging_dir.as_ref().join("version"), "version")?; archive.into_inner()?; Ok(()) }; From 480fd6697dc6b2f51feae3397c2ecb9b295cdee1 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Thu, 18 Aug 2022 20:24:57 +0000 Subject: [PATCH 041/465] Flaky Unit Test test_rpc_subscriptions (backport #27214) (#27236) Flaky Unit Test test_rpc_subscriptions (#27214) Increase unit test timeout from 5 seconds to 10 seconds (cherry picked from commit 5c9d612180f8ca92d93abe662553b6ee799f60b0) Co-authored-by: Brennan Watt --- rpc-test/tests/rpc.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rpc-test/tests/rpc.rs b/rpc-test/tests/rpc.rs index 464560a309b214..5265e93f14f6fb 100644 --- a/rpc-test/tests/rpc.rs +++ b/rpc-test/tests/rpc.rs @@ -402,7 +402,7 @@ fn test_rpc_subscriptions() { } } - let deadline = Instant::now() + Duration::from_secs(5); + let deadline = Instant::now() + Duration::from_secs(10); let mut account_notifications = transactions.len(); while account_notifications > 0 { let timeout = deadline.saturating_duration_since(Instant::now()); From c1093e7dfc992d1d10f3366d4480fe9e934da8c0 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Fri, 19 Aug 2022 01:09:24 +0000 Subject: [PATCH 042/465] Fix the inconsistency check in get_entries_in_data_block() (backport #27195) (#27232) Fix a corner-case panic in get_entries_in_data_block() (#27195) #### Problem get_entries_in_data_block() panics when there's inconsistency between slot_meta and data_shred. However, as we don't lock on reads, reading across multiple column families is not atomic (especially for older slots) and thus does not guarantee consistency as the background cleanup service could purge the slot in the middle. Such panic was reported in #26980 when the validator serves a high load of RPC calls. #### Summary of Changes This PR makes get_entries_in_data_block() panic only when the inconsistency between slot-meta and data-shred happens on a slot older than lowest_cleanup_slot. (cherry picked from commit 6d12bb6ec36dee3d46e0b530d7de6ca6d802a443) Co-authored-by: Yueh-Hsuan Chiang <93241502+yhchiang-sol@users.noreply.github.com> --- ledger/src/blockstore.rs | 43 ++++++++++++++++++++-------------------- 1 file changed, 22 insertions(+), 21 deletions(-) diff --git a/ledger/src/blockstore.rs b/ledger/src/blockstore.rs index acacf9d842a7e5..9361958e5c4fdf 100644 --- a/ledger/src/blockstore.rs +++ b/ledger/src/blockstore.rs @@ -2872,28 +2872,29 @@ impl Blockstore { .and_then(|serialized_shred| { if serialized_shred.is_none() { if let Some(slot_meta) = slot_meta { - panic!( - "Shred with - slot: {}, - index: {}, - consumed: {}, - completed_indexes: {:?} - must exist if shred index was included in a range: {} {}", - slot, - i, - slot_meta.consumed, - slot_meta.completed_data_indexes, - start_index, - end_index - ); - } else { - return Err(BlockstoreError::InvalidShredData(Box::new( - bincode::ErrorKind::Custom(format!( - "Missing shred for slot {}, index {}", - slot, i - )), - ))); + if slot > self.lowest_cleanup_slot() { + panic!( + "Shred with + slot: {}, + index: {}, + consumed: {}, + completed_indexes: {:?} + must exist if shred index was included in a range: {} {}", + slot, + i, + slot_meta.consumed, + slot_meta.completed_data_indexes, + start_index, + end_index + ); + } } + return Err(BlockstoreError::InvalidShredData(Box::new( + bincode::ErrorKind::Custom(format!( + "Missing shred for slot {}, index {}", + slot, i + )), + ))); } Shred::new_from_serialized_shred(serialized_shred.unwrap()).map_err(|err| { From 4e08c4dee6e9b1aeba5c1ec3e2ae004f2084da38 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Fri, 19 Aug 2022 16:25:50 +0000 Subject: [PATCH 043/465] adds hash domain to ping-pong protocol (backport #27193) (#27244) adds hash domain to ping-pong protocol (#27193) In order to maintain backward compatibility, for now the responding node will hash the token both with and without domain so that the other node will accept the response regardless of its upgrade status. Once the cluster has upgraded to the new code, we will remove the legacy domain = false case. (cherry picked from commit 6928b2a5af45bf6985b90ff116cf47f917ac1c9c) Co-authored-by: behzad nouri --- core/src/ancestor_hashes_service.rs | 15 +++++++---- core/src/serve_repair.rs | 15 +++++++---- gossip/src/cluster_info.rs | 30 +++++++++++++--------- gossip/src/ping_pong.rs | 40 ++++++++++++++++++++++++----- 4 files changed, 72 insertions(+), 28 deletions(-) diff --git a/core/src/ancestor_hashes_service.rs b/core/src/ancestor_hashes_service.rs index 330ebb072abc10..4813ed11685069 100644 --- a/core/src/ancestor_hashes_service.rs +++ b/core/src/ancestor_hashes_service.rs @@ -425,16 +425,21 @@ impl AncestorHashesService { stats.invalid_packets += 1; return None; } - if ping.verify() { - stats.ping_count += 1; - if let Ok(pong) = Pong::new(&ping, keypair) { + if !ping.verify() { + stats.ping_err_verify_count += 1; + return None; + } + stats.ping_count += 1; + // Respond both with and without domain so that the other node + // will accept the response regardless of its upgrade status. + // TODO: remove domain = false once cluster is upgraded. + for domain in [false, true] { + if let Ok(pong) = Pong::new(domain, &ping, keypair) { let pong = RepairProtocol::Pong(pong); if let Ok(pong_bytes) = serialize(&pong) { let _ignore = ancestor_socket.send_to(&pong_bytes[..], from_addr); } } - } else { - stats.ping_err_verify_count += 1; } None } diff --git a/core/src/serve_repair.rs b/core/src/serve_repair.rs index 2f755ebb17f4bb..47443bcd9acc2d 100644 --- a/core/src/serve_repair.rs +++ b/core/src/serve_repair.rs @@ -1044,11 +1044,16 @@ impl ServeRepair { } packet.meta.set_discard(true); stats.ping_count += 1; - if let Ok(pong) = Pong::new(&ping, keypair) { - let pong = RepairProtocol::Pong(pong); - if let Ok(pong_bytes) = serialize(&pong) { - let from_addr = packet.meta.socket_addr(); - pending_pongs.push((pong_bytes, from_addr)); + // Respond both with and without domain so that the other node + // will accept the response regardless of its upgrade status. + // TODO: remove domain = false once cluster is upgraded. + for domain in [false, true] { + if let Ok(pong) = Pong::new(domain, &ping, keypair) { + let pong = RepairProtocol::Pong(pong); + if let Ok(pong_bytes) = serialize(&pong) { + let from_addr = packet.meta.socket_addr(); + pending_pongs.push((pong_bytes, from_addr)); + } } } } diff --git a/gossip/src/cluster_info.rs b/gossip/src/cluster_info.rs index 92b14bf9fba125..8378f4273f181a 100644 --- a/gossip/src/cluster_info.rs +++ b/gossip/src/cluster_info.rs @@ -2170,14 +2170,18 @@ impl ClusterInfo { I: IntoIterator, { let keypair = self.keypair(); - let pongs_and_dests: Vec<_> = pings - .into_iter() - .filter_map(|(addr, ping)| { - let pong = Pong::new(&ping, &keypair).ok()?; - let pong = Protocol::PongMessage(pong); - Some((addr, pong)) - }) - .collect(); + let mut pongs_and_dests = Vec::new(); + for (addr, ping) in pings { + // Respond both with and without domain so that the other node will + // accept the response regardless of its upgrade status. + // TODO: remove domain = false once cluster is upgraded. + for domain in [false, true] { + if let Ok(pong) = Pong::new(domain, &ping, &keypair) { + let pong = Protocol::PongMessage(pong); + pongs_and_dests.push((addr, pong)); + } + } + } if pongs_and_dests.is_empty() { None } else { @@ -3287,7 +3291,9 @@ RPC Enabled Nodes: 1"#; let pongs: Vec<(SocketAddr, Pong)> = pings .iter() .zip(&remote_nodes) - .map(|(ping, (keypair, socket))| (*socket, Pong::new(ping, keypair).unwrap())) + .map(|(ping, (keypair, socket))| { + (*socket, Pong::new(/*domain:*/ true, ping, keypair).unwrap()) + }) .collect(); let now = now + Duration::from_millis(1); cluster_info.handle_batch_pong_messages(pongs, now); @@ -3330,7 +3336,7 @@ RPC Enabled Nodes: 1"#; .collect(); let pongs: Vec<_> = pings .iter() - .map(|ping| Pong::new(ping, &this_node).unwrap()) + .map(|ping| Pong::new(/*domain:*/ false, ping, &this_node).unwrap()) .collect(); let recycler = PacketBatchRecycler::default(); let packets = cluster_info @@ -3342,9 +3348,9 @@ RPC Enabled Nodes: 1"#; &recycler, ) .unwrap(); - assert_eq!(remote_nodes.len(), packets.len()); + assert_eq!(remote_nodes.len() * 2, packets.len()); for (packet, (_, socket), pong) in izip!( - packets.into_iter(), + packets.into_iter().step_by(2), remote_nodes.into_iter(), pongs.into_iter() ) { diff --git a/gossip/src/ping_pong.rs b/gossip/src/ping_pong.rs index 6c3a219cfdb81b..16961f26f18388 100644 --- a/gossip/src/ping_pong.rs +++ b/gossip/src/ping_pong.rs @@ -16,6 +16,8 @@ use { }, }; +const PING_PONG_HASH_PREFIX: &[u8] = "SOLANA_PING_PONG".as_bytes(); + #[derive(AbiExample, Debug, Deserialize, Serialize)] pub struct Ping { from: Pubkey, @@ -100,8 +102,17 @@ impl Signable for Ping { } impl Pong { - pub fn new(ping: &Ping, keypair: &Keypair) -> Result { - let hash = hash::hash(&serialize(&ping.token)?); + pub fn new( + domain: bool, + ping: &Ping, + keypair: &Keypair, + ) -> Result { + let token = serialize(&ping.token)?; + let hash = if domain { + hash::hashv(&[PING_PONG_HASH_PREFIX, &token]) + } else { + hash::hash(&token) + }; let pong = Pong { from: keypair.pubkey(), hash, @@ -187,9 +198,15 @@ impl PingCache { Some(t) if now.saturating_duration_since(*t) < delay => None, _ => { let ping = pingf()?; - let hash = hash::hash(&serialize(&ping.token).ok()?); - self.pings.put(node, now); + let token = serialize(&ping.token).ok()?; + // For backward compatibility, for now responses both with and + // without domain are accepted. + // TODO: remove no domain case once cluster is upgraded. + let hash = hash::hash(&token); + self.pending_cache.put(hash, node); + let hash = hash::hashv(&[PING_PONG_HASH_PREFIX, &token]); self.pending_cache.put(hash, node); + self.pings.put(node, now); Some(ping) } } @@ -281,10 +298,18 @@ mod tests { assert!(ping.verify()); assert!(ping.sanitize().is_ok()); - let pong = Pong::new(&ping, &keypair).unwrap(); + let pong = Pong::new(/*domain:*/ false, &ping, &keypair).unwrap(); assert!(pong.verify()); assert!(pong.sanitize().is_ok()); assert_eq!(hash::hash(&ping.token), pong.hash); + + let pong = Pong::new(/*domian:*/ true, &ping, &keypair).unwrap(); + assert!(pong.verify()); + assert!(pong.sanitize().is_ok()); + assert_eq!( + hash::hashv(&[PING_PONG_HASH_PREFIX, &ping.token]), + pong.hash + ); } #[test] @@ -339,7 +364,10 @@ mod tests { assert!(ping.is_none()); } Some(ping) => { - let pong = Pong::new(ping, keypair).unwrap(); + let domain = rng.gen_ratio(1, 2); + let pong = Pong::new(domain, ping, keypair).unwrap(); + assert!(cache.add(&pong, *socket, now)); + let pong = Pong::new(!domain, ping, keypair).unwrap(); assert!(cache.add(&pong, *socket, now)); } } From 6f42135d4ee53b6a78cb5f546216d5af3b3242a0 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Fri, 19 Aug 2022 19:55:13 +0000 Subject: [PATCH 044/465] slots_connected: check if the range is connected (>= ending_slot) (backport #27152) (#27249) slots_connected: check if the range is connected (>= ending_slot) (#27152) (cherry picked from commit 40b9f2f2be20a30b47fce2fe00523afaf36bf182) Co-authored-by: apfitzge --- ledger-tool/src/main.rs | 4 ++-- ledger/src/blockstore.rs | 27 +++++++++++++-------------- 2 files changed, 15 insertions(+), 16 deletions(-) diff --git a/ledger-tool/src/main.rs b/ledger-tool/src/main.rs index 431ee64b2d001e..c3df6861834671 100644 --- a/ledger-tool/src/main.rs +++ b/ledger-tool/src/main.rs @@ -884,9 +884,9 @@ fn load_bank_forks( }; if let Some(halt_slot) = process_options.halt_at_slot { - // Check if we have the slot data necessary to replay from starting_slot to halt_slot. + // Check if we have the slot data necessary to replay from starting_slot to >= halt_slot. // - This will not catch the case when loading from genesis without a full slot 0. - if !blockstore.slots_connected(starting_slot, halt_slot) { + if !blockstore.slot_range_connected(starting_slot, halt_slot) { eprintln!( "Unable to load bank forks at slot {} due to disconnected blocks.", halt_slot, diff --git a/ledger/src/blockstore.rs b/ledger/src/blockstore.rs index 9361958e5c4fdf..7840dff2bcd6da 100644 --- a/ledger/src/blockstore.rs +++ b/ledger/src/blockstore.rs @@ -546,9 +546,9 @@ impl Blockstore { self.prepare_rooted_slot_iterator(slot, IteratorDirection::Reverse) } - /// Determines if `starting_slot` and `ending_slot` are connected by full slots + /// Determines if we can iterate from `starting_slot` to >= `ending_slot` by full slots /// `starting_slot` is excluded from the `is_full()` check - pub fn slots_connected(&self, starting_slot: Slot, ending_slot: Slot) -> bool { + pub fn slot_range_connected(&self, starting_slot: Slot, ending_slot: Slot) -> bool { if starting_slot == ending_slot { return true; } @@ -562,8 +562,7 @@ impl Blockstore { if slot_meta.is_full() { match slot.cmp(&ending_slot) { cmp::Ordering::Less => next_slots.extend(slot_meta.next_slots), - cmp::Ordering::Equal => return true, - cmp::Ordering::Greater => {} // slot is greater than the ending slot, so all its children would be as well + _ => return true, } } } @@ -5502,7 +5501,7 @@ pub mod tests { } */ #[test] - fn test_slots_connected_chain() { + fn test_slot_range_connected_chain() { let ledger_path = get_tmp_ledger_path_auto_delete!(); let blockstore = Blockstore::open(ledger_path.path()).unwrap(); @@ -5511,12 +5510,12 @@ pub mod tests { make_and_insert_slot(&blockstore, slot, slot.saturating_sub(1)); } - assert!(blockstore.slots_connected(1, 3)); - assert!(!blockstore.slots_connected(1, 4)); // slot 4 does not exist + assert!(blockstore.slot_range_connected(1, 3)); + assert!(!blockstore.slot_range_connected(1, 4)); // slot 4 does not exist } #[test] - fn test_slots_connected_disconnected() { + fn test_slot_range_connected_disconnected() { let ledger_path = get_tmp_ledger_path_auto_delete!(); let blockstore = Blockstore::open(ledger_path.path()).unwrap(); @@ -5524,20 +5523,20 @@ pub mod tests { make_and_insert_slot(&blockstore, 2, 1); make_and_insert_slot(&blockstore, 4, 2); - assert!(!blockstore.slots_connected(1, 3)); // Slot 3 does not exit - assert!(blockstore.slots_connected(1, 4)); + assert!(blockstore.slot_range_connected(1, 3)); // Slot 3 does not exist, but we can still replay this range to slot 4 + assert!(blockstore.slot_range_connected(1, 4)); } #[test] - fn test_slots_connected_same_slot() { + fn test_slot_range_connected_same_slot() { let ledger_path = get_tmp_ledger_path_auto_delete!(); let blockstore = Blockstore::open(ledger_path.path()).unwrap(); - assert!(blockstore.slots_connected(54, 54)); + assert!(blockstore.slot_range_connected(54, 54)); } #[test] - fn test_slots_connected_starting_slot_not_full() { + fn test_slot_range_connected_starting_slot_not_full() { let ledger_path = get_tmp_ledger_path_auto_delete!(); let blockstore = Blockstore::open(ledger_path.path()).unwrap(); @@ -5545,7 +5544,7 @@ pub mod tests { make_and_insert_slot(&blockstore, 6, 5); assert!(!blockstore.meta(4).unwrap().unwrap().is_full()); - assert!(blockstore.slots_connected(4, 6)); + assert!(blockstore.slot_range_connected(4, 6)); } #[test] From 03dacace7f7e16211b5862545a1d2ff896474728 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Fri, 19 Aug 2022 20:03:45 +0000 Subject: [PATCH 045/465] create-snapshot check if snapshot slot exists (backport #27153) (#27250) create-snapshot check if snapshot slot exists (#27153) (cherry picked from commit 6da3eb028c90ec48808f0a7bf1d2f151c7175703) Co-authored-by: apfitzge --- ledger-tool/src/main.rs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/ledger-tool/src/main.rs b/ledger-tool/src/main.rs index c3df6861834671..6c7cdb3dbf6459 100644 --- a/ledger-tool/src/main.rs +++ b/ledger-tool/src/main.rs @@ -2686,6 +2686,11 @@ fn main() { value_t_or_exit!(arg_matches, "snapshot_slot", Slot) }; + assert!( + blockstore.meta(snapshot_slot).unwrap().is_some(), + "snapshot slot doesn't exist" + ); + let ending_slot = if is_minimized { let ending_slot = value_t_or_exit!(arg_matches, "ending_slot", Slot); if ending_slot <= snapshot_slot { From 0041bc255d88203d246ddf2406831aaff87a689d Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Sat, 20 Aug 2022 01:44:17 +0000 Subject: [PATCH 046/465] recovers merkle shreds from erasure codes (backport #27136) (#27274) * recovers merkle shreds from erasure codes (#27136) The commit * Identifies Merkle shreds when recovering from erasure codes and dispatches specialized code to reconstruct shreds. * Coding shred headers are added to recovered erasure shards. * Merkle tree is reconstructed for the erasure batch and added to recovered shreds. * The common signature (for the root of Merkle tree) is attached to all recovered shreds. (cherry picked from commit c0b63351ae4fb64587b25cd89eeb6708eaa39ab4) # Conflicts: # ledger/Cargo.toml * removes mergify merge conflicts Co-authored-by: behzad nouri --- Cargo.lock | 1 + ledger/Cargo.toml | 1 + ledger/src/blockstore.rs | 31 ++- ledger/src/shred.rs | 53 +++- ledger/src/shred/merkle.rs | 489 ++++++++++++++++++++++++++++++++++++- ledger/src/shredder.rs | 2 +- 6 files changed, 552 insertions(+), 25 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index ba3c7259748025..aee4cb83a27bb1 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -5452,6 +5452,7 @@ dependencies = [ "spl-token-2022", "static_assertions", "tempfile", + "test-case", "thiserror", "tokio", "tokio-stream", diff --git a/ledger/Cargo.toml b/ledger/Cargo.toml index b9c1e344a83a6b..c32aa993f791b4 100644 --- a/ledger/Cargo.toml +++ b/ledger/Cargo.toml @@ -73,6 +73,7 @@ bs58 = "0.4.0" matches = "0.1.9" solana-account-decoder = { path = "../account-decoder", version = "=1.11.8" } solana-logger = { path = "../logger", version = "=1.11.8" } +test-case = "2.1.0" [build-dependencies] rustc_version = "0.4" diff --git a/ledger/src/blockstore.rs b/ledger/src/blockstore.rs index 7840dff2bcd6da..23961d9664448e 100644 --- a/ledger/src/blockstore.rs +++ b/ledger/src/blockstore.rs @@ -625,7 +625,7 @@ impl Blockstore { index: &mut Index, erasure_meta: &ErasureMeta, prev_inserted_shreds: &HashMap, - recovered_data_shreds: &mut Vec, + recovered_shreds: &mut Vec, data_cf: &LedgerColumn, code_cf: &LedgerColumn, ) { @@ -646,9 +646,9 @@ impl Blockstore { code_cf, )) .collect(); - if let Ok(mut result) = Shredder::try_recovery(available_shreds) { + if let Ok(mut result) = shred::recover(available_shreds) { Self::submit_metrics(slot, erasure_meta, true, "complete".into(), result.len()); - recovered_data_shreds.append(&mut result); + recovered_shreds.append(&mut result); } else { Self::submit_metrics(slot, erasure_meta, true, "incomplete".into(), 0); } @@ -709,7 +709,7 @@ impl Blockstore { ) -> Vec { let data_cf = db.column::(); let code_cf = db.column::(); - let mut recovered_data_shreds = vec![]; + let mut recovered_shreds = vec![]; // Recovery rules: // 1. Only try recovery around indexes for which new data or coding shreds are received // 2. For new data shreds, check if an erasure set exists. If not, don't try recovery @@ -725,7 +725,7 @@ impl Blockstore { index, erasure_meta, prev_inserted_shreds, - &mut recovered_data_shreds, + &mut recovered_shreds, &data_cf, &code_cf, ); @@ -744,7 +744,7 @@ impl Blockstore { } }; } - recovered_data_shreds + recovered_shreds } /// The main helper function that performs the shred insertion logic @@ -888,15 +888,18 @@ impl Blockstore { metrics.insert_shreds_elapsed_us += start.as_us(); let mut start = Measure::start("Shred recovery"); if let Some(leader_schedule_cache) = leader_schedule { - let recovered_data_shreds = Self::try_shred_recovery( + let recovered_shreds = Self::try_shred_recovery( db, &erasure_metas, &mut index_working_set, &just_inserted_shreds, ); - metrics.num_recovered += recovered_data_shreds.len(); - let recovered_data_shreds: Vec<_> = recovered_data_shreds + metrics.num_recovered += recovered_shreds + .iter() + .filter(|shred| shred.is_data()) + .count(); + let recovered_shreds: Vec<_> = recovered_shreds .into_iter() .filter_map(|shred| { let leader = @@ -905,6 +908,12 @@ impl Blockstore { metrics.num_recovered_failed_sig += 1; return None; } + // Since the data shreds are fully recovered from the + // erasure batch, no need to store coding shreds in + // blockstore. + if shred.is_code() { + return Some(shred); + } match self.check_insert_data_shred( shred.clone(), &mut erasure_metas, @@ -941,10 +950,10 @@ impl Blockstore { // Always collect recovered-shreds so that above insert code is // executed even if retransmit-sender is None. .collect(); - if !recovered_data_shreds.is_empty() { + if !recovered_shreds.is_empty() { if let Some(retransmit_sender) = retransmit_sender { let _ = retransmit_sender.send( - recovered_data_shreds + recovered_shreds .into_iter() .map(Shred::into_payload) .collect(), diff --git a/ledger/src/shred.rs b/ledger/src/shred.rs index e17055b1e7d9a9..cee63cb45df57d 100644 --- a/ledger/src/shred.rs +++ b/ledger/src/shred.rs @@ -61,6 +61,7 @@ use { crate::blockstore::{self, MAX_DATA_SHREDS_PER_SLOT}, bitflags::bitflags, num_enum::{IntoPrimitive, TryFromPrimitive}, + reed_solomon_erasure::Error::TooFewShardsPresent, serde::{Deserialize, Serialize}, solana_entry::entry::{create_ticks, Entry}, solana_perf::packet::Packet, @@ -144,6 +145,10 @@ pub enum Error { InvalidPayloadSize(/*payload size:*/ usize), #[error("Invalid proof size: {0}")] InvalidProofSize(/*proof_size:*/ u8), + #[error("Invalid recovered shred")] + InvalidRecoveredShred, + #[error("Invalid shard size: {0}")] + InvalidShardSize(/*shard_size:*/ usize), #[error("Invalid shred flags: {0}")] InvalidShredFlags(u8), #[error("Invalid {0:?} shred index: {1}")] @@ -211,7 +216,7 @@ struct DataShredHeader { struct CodingShredHeader { num_data_shreds: u16, num_coding_shreds: u16, - position: u16, + position: u16, // [0..num_coding_shreds) } #[derive(Clone, Debug, PartialEq, Eq)] @@ -294,6 +299,8 @@ macro_rules! dispatch { } } +use dispatch; + impl Shred { dispatch!(fn common_header(&self) -> &ShredCommonHeader); dispatch!(fn set_signature(&mut self, signature: Signature)); @@ -494,6 +501,7 @@ impl Shred { } } + #[must_use] pub fn verify(&self, pubkey: &Pubkey) -> bool { let message = self.signed_message(); self.signature().verify(pubkey.as_ref(), message) @@ -642,6 +650,28 @@ impl From for Shred { } } +impl From for Shred { + fn from(shred: merkle::Shred) -> Self { + match shred { + merkle::Shred::ShredCode(shred) => Self::ShredCode(ShredCode::Merkle(shred)), + merkle::Shred::ShredData(shred) => Self::ShredData(ShredData::Merkle(shred)), + } + } +} + +impl TryFrom for merkle::Shred { + type Error = Error; + + fn try_from(shred: Shred) -> Result { + match shred { + Shred::ShredCode(ShredCode::Legacy(_)) => Err(Error::InvalidShredVariant), + Shred::ShredCode(ShredCode::Merkle(shred)) => Ok(Self::ShredCode(shred)), + Shred::ShredData(ShredData::Legacy(_)) => Err(Error::InvalidShredVariant), + Shred::ShredData(ShredData::Merkle(shred)) => Ok(Self::ShredData(shred)), + } + } +} + impl From for ShredType { #[inline] fn from(shred_variant: ShredVariant) -> Self { @@ -682,6 +712,27 @@ impl TryFrom for ShredVariant { } } +pub(crate) fn recover(shreds: Vec) -> Result, Error> { + match shreds + .first() + .ok_or(TooFewShardsPresent)? + .common_header() + .shred_variant + { + ShredVariant::LegacyData | ShredVariant::LegacyCode => Shredder::try_recovery(shreds), + ShredVariant::MerkleCode(_) | ShredVariant::MerkleData(_) => { + let shreds = shreds + .into_iter() + .map(merkle::Shred::try_from) + .collect::>()?; + Ok(merkle::recover(shreds)? + .into_iter() + .map(Shred::from) + .collect()) + } + } +} + // Accepts shreds in the slot range [root + 1, max_slot]. #[must_use] pub fn should_discard_shred( diff --git a/ledger/src/shred/merkle.rs b/ledger/src/shred/merkle.rs index 5b224632a2a880..9d0482b95354a5 100644 --- a/ledger/src/shred/merkle.rs +++ b/ledger/src/shred/merkle.rs @@ -1,12 +1,20 @@ +#[cfg(test)] +use {crate::shred::ShredType, solana_sdk::pubkey::Pubkey}; use { - crate::shred::{ - common::impl_shred_common, - shred_code, shred_data, - traits::{Shred, ShredCode as ShredCodeTrait, ShredData as ShredDataTrait}, - CodingShredHeader, DataShredHeader, Error, ShredCommonHeader, ShredFlags, ShredVariant, - SIZE_OF_CODING_SHRED_HEADERS, SIZE_OF_COMMON_SHRED_HEADER, SIZE_OF_DATA_SHRED_HEADERS, - SIZE_OF_SIGNATURE, + crate::{ + shred::{ + common::impl_shred_common, + dispatch, shred_code, shred_data, + traits::{ + Shred as ShredTrait, ShredCode as ShredCodeTrait, ShredData as ShredDataTrait, + }, + CodingShredHeader, DataShredHeader, Error, ShredCommonHeader, ShredFlags, ShredVariant, + SIZE_OF_CODING_SHRED_HEADERS, SIZE_OF_COMMON_SHRED_HEADER, SIZE_OF_DATA_SHRED_HEADERS, + SIZE_OF_SIGNATURE, + }, + shredder::ReedSolomon, }, + reed_solomon_erasure::Error::{InvalidIndex, TooFewParityShards, TooFewShards}, solana_perf::packet::deserialize_from_with_limit, solana_sdk::{ clock::Slot, @@ -58,12 +66,58 @@ pub struct ShredCode { payload: Vec, } +#[derive(Clone, Debug, Eq, PartialEq)] +pub(super) enum Shred { + ShredCode(ShredCode), + ShredData(ShredData), +} + #[derive(Clone, Debug, Eq, PartialEq)] struct MerkleBranch { root: MerkleRoot, proof: Vec, } +impl Shred { + dispatch!(fn common_header(&self) -> &ShredCommonHeader); + dispatch!(fn erasure_shard_as_slice(&self) -> Result<&[u8], Error>); + dispatch!(fn erasure_shard_index(&self) -> Result); + dispatch!(fn merkle_tree_node(&self) -> Result); + dispatch!(fn sanitize(&self) -> Result<(), Error>); + dispatch!(fn set_merkle_branch(&mut self, merkle_branch: MerkleBranch) -> Result<(), Error>); + + fn merkle_root(&self) -> &MerkleRoot { + match self { + Self::ShredCode(shred) => &shred.merkle_branch.root, + Self::ShredData(shred) => &shred.merkle_branch.root, + } + } +} + +#[cfg(test)] +impl Shred { + dispatch!(fn set_signature(&mut self, signature: Signature)); + dispatch!(fn signed_message(&self) -> &[u8]); + + fn index(&self) -> u32 { + self.common_header().index + } + + fn shred_type(&self) -> ShredType { + ShredType::from(self.common_header().shred_variant) + } + + fn signature(&self) -> Signature { + self.common_header().signature + } + + #[must_use] + fn verify(&self, pubkey: &Pubkey) -> bool { + let message = self.signed_message(); + self.signature().verify(pubkey.as_ref(), message) + } +} + impl ShredData { // proof_size is the number of proof entries in the merkle tree branch. fn proof_size(&self) -> Result { @@ -104,6 +158,52 @@ impl ShredData { let index = self.erasure_shard_index()?; Ok(verify_merkle_proof(index, node, &self.merkle_branch)) } + + fn from_recovered_shard(signature: &Signature, mut shard: Vec) -> Result { + let shard_size = shard.len(); + if shard_size + SIZE_OF_SIGNATURE > Self::SIZE_OF_PAYLOAD { + return Err(Error::InvalidShardSize(shard_size)); + } + shard.resize(Self::SIZE_OF_PAYLOAD, 0u8); + shard.copy_within(0..shard_size, SIZE_OF_SIGNATURE); + shard[0..SIZE_OF_SIGNATURE].copy_from_slice(signature.as_ref()); + // Deserialize headers. + let mut cursor = Cursor::new(&shard[..]); + let common_header: ShredCommonHeader = deserialize_from_with_limit(&mut cursor)?; + let proof_size = match common_header.shred_variant { + ShredVariant::MerkleData(proof_size) => proof_size, + _ => return Err(Error::InvalidShredVariant), + }; + if ShredCode::capacity(proof_size)? != shard_size { + return Err(Error::InvalidShardSize(shard_size)); + } + let data_header = deserialize_from_with_limit(&mut cursor)?; + Ok(Self { + common_header, + data_header, + merkle_branch: MerkleBranch::new_zeroed(proof_size), + payload: shard, + }) + } + + fn set_merkle_branch(&mut self, merkle_branch: MerkleBranch) -> Result<(), Error> { + let proof_size = self.proof_size()?; + if merkle_branch.proof.len() != usize::from(proof_size) { + return Err(Error::InvalidMerkleProof); + } + let offset = Self::SIZE_OF_HEADERS + Self::capacity(proof_size)?; + let mut cursor = Cursor::new( + self.payload + .get_mut(offset..) + .ok_or(Error::InvalidProofSize(proof_size))?, + ); + bincode::serialize_into(&mut cursor, &merkle_branch.root)?; + for entry in &merkle_branch.proof { + bincode::serialize_into(&mut cursor, entry)?; + } + self.merkle_branch = merkle_branch; + Ok(()) + } } impl ShredCode { @@ -154,9 +254,66 @@ impl ShredCode { || self.merkle_branch.root != other.merkle_branch.root || self.common_header.signature != other.common_header.signature } + + fn from_recovered_shard( + common_header: ShredCommonHeader, + coding_header: CodingShredHeader, + mut shard: Vec, + ) -> Result { + let proof_size = match common_header.shred_variant { + ShredVariant::MerkleCode(proof_size) => proof_size, + _ => return Err(Error::InvalidShredVariant), + }; + let shard_size = shard.len(); + if Self::capacity(proof_size)? != shard_size { + return Err(Error::InvalidShardSize(shard_size)); + } + if shard_size + Self::SIZE_OF_HEADERS > Self::SIZE_OF_PAYLOAD { + return Err(Error::InvalidShardSize(shard_size)); + } + shard.resize(Self::SIZE_OF_PAYLOAD, 0u8); + shard.copy_within(0..shard_size, Self::SIZE_OF_HEADERS); + let mut cursor = Cursor::new(&mut shard[..]); + bincode::serialize_into(&mut cursor, &common_header)?; + bincode::serialize_into(&mut cursor, &coding_header)?; + Ok(Self { + common_header, + coding_header, + merkle_branch: MerkleBranch::new_zeroed(proof_size), + payload: shard, + }) + } + + fn set_merkle_branch(&mut self, merkle_branch: MerkleBranch) -> Result<(), Error> { + let proof_size = self.proof_size()?; + if merkle_branch.proof.len() != usize::from(proof_size) { + return Err(Error::InvalidMerkleProof); + } + let offset = Self::SIZE_OF_HEADERS + Self::capacity(proof_size)?; + let mut cursor = Cursor::new( + self.payload + .get_mut(offset..) + .ok_or(Error::InvalidProofSize(proof_size))?, + ); + bincode::serialize_into(&mut cursor, &merkle_branch.root)?; + for entry in &merkle_branch.proof { + bincode::serialize_into(&mut cursor, entry)?; + } + self.merkle_branch = merkle_branch; + Ok(()) + } } -impl Shred for ShredData { +impl MerkleBranch { + fn new_zeroed(proof_size: u8) -> Self { + Self { + root: MerkleRoot::default(), + proof: vec![MerkleProofEntry::default(); usize::from(proof_size)], + } + } +} + +impl ShredTrait for ShredData { impl_shred_common!(); // Also equal to: @@ -249,7 +406,7 @@ impl Shred for ShredData { } } -impl Shred for ShredCode { +impl ShredTrait for ShredCode { impl_shred_common!(); const SIZE_OF_PAYLOAD: usize = shred_code::ShredCode::SIZE_OF_PAYLOAD; const SIZE_OF_HEADERS: usize = SIZE_OF_CODING_SHRED_HEADERS; @@ -391,7 +548,6 @@ fn verify_merkle_proof(index: usize, node: Hash, merkle_branch: &MerkleBranch) - (index, root) == (0usize, &merkle_branch.root[..]) } -#[cfg(test)] fn make_merkle_tree(mut nodes: Vec) -> Vec { let mut size = nodes.len(); while size > 1 { @@ -407,7 +563,6 @@ fn make_merkle_tree(mut nodes: Vec) -> Vec { nodes } -#[cfg(test)] fn make_merkle_branch( mut index: usize, // leaf index ~ shred's erasure shard index. mut size: usize, // number of leaves ~ erasure batch size. @@ -434,9 +589,170 @@ fn make_merkle_branch( Some(MerkleBranch { root, proof }) } +pub(super) fn recover(mut shreds: Vec) -> Result, Error> { + // Grab {common, coding} headers from first coding shred. + let headers = shreds.iter().find_map(|shred| { + let shred = match shred { + Shred::ShredCode(shred) => shred, + Shred::ShredData(_) => return None, + }; + let position = u32::from(shred.coding_header.position); + let common_header = ShredCommonHeader { + index: shred.common_header.index.checked_sub(position)?, + ..shred.common_header + }; + let coding_header = CodingShredHeader { + position: 0u16, + ..shred.coding_header + }; + Some((common_header, coding_header)) + }); + let (common_header, coding_header) = headers.ok_or(TooFewParityShards)?; + debug_assert!(matches!( + common_header.shred_variant, + ShredVariant::MerkleCode(_) + )); + let proof_size = match common_header.shred_variant { + ShredVariant::MerkleCode(proof_size) => proof_size, + ShredVariant::MerkleData(_) | ShredVariant::LegacyCode | ShredVariant::LegacyData => { + return Err(Error::InvalidShredVariant); + } + }; + // Verify that shreds belong to the same erasure batch + // and have consistent headers. + debug_assert!(shreds.iter().all(|shred| { + let ShredCommonHeader { + signature, + shred_variant, + slot, + index: _, + version, + fec_set_index, + } = shred.common_header(); + signature == &common_header.signature + && slot == &common_header.slot + && version == &common_header.version + && fec_set_index == &common_header.fec_set_index + && match shred { + Shred::ShredData(_) => shred_variant == &ShredVariant::MerkleData(proof_size), + Shred::ShredCode(shred) => { + let CodingShredHeader { + num_data_shreds, + num_coding_shreds, + position: _, + } = shred.coding_header; + shred_variant == &ShredVariant::MerkleCode(proof_size) + && num_data_shreds == coding_header.num_data_shreds + && num_coding_shreds == coding_header.num_coding_shreds + } + } + })); + let num_data_shreds = usize::from(coding_header.num_data_shreds); + let num_coding_shreds = usize::from(coding_header.num_coding_shreds); + let num_shards = num_data_shreds + num_coding_shreds; + // Obtain erasure encoded shards from shreds. + let shreds = { + let mut batch = vec![None; num_shards]; + while let Some(shred) = shreds.pop() { + let index = match shred.erasure_shard_index() { + Ok(index) if index < batch.len() => index, + _ => return Err(Error::from(InvalidIndex)), + }; + batch[index] = Some(shred); + } + batch + }; + let mut shards: Vec>> = shreds + .iter() + .map(|shred| Some(shred.as_ref()?.erasure_shard_as_slice().ok()?.to_vec())) + .collect(); + ReedSolomon::new(num_data_shreds, num_coding_shreds)?.reconstruct(&mut shards)?; + let mask: Vec<_> = shreds.iter().map(Option::is_some).collect(); + // Reconstruct code and data shreds from erasure encoded shards. + let mut shreds: Vec<_> = shreds + .into_iter() + .zip(shards) + .enumerate() + .map(|(index, (shred, shard))| { + if let Some(shred) = shred { + return Ok(shred); + } + let shard = shard.ok_or(TooFewShards)?; + if index < num_data_shreds { + let shred = ShredData::from_recovered_shard(&common_header.signature, shard)?; + let ShredCommonHeader { + signature: _, + shred_variant, + slot, + index: _, + version, + fec_set_index, + } = shred.common_header; + if shred_variant != ShredVariant::MerkleData(proof_size) + || common_header.slot != slot + || common_header.version != version + || common_header.fec_set_index != fec_set_index + { + return Err(Error::InvalidRecoveredShred); + } + Ok(Shred::ShredData(shred)) + } else { + let offset = index - num_data_shreds; + let coding_header = CodingShredHeader { + position: offset as u16, + ..coding_header + }; + let common_header = ShredCommonHeader { + index: common_header.index + offset as u32, + ..common_header + }; + let shred = ShredCode::from_recovered_shard(common_header, coding_header, shard)?; + Ok(Shred::ShredCode(shred)) + } + }) + .collect::>()?; + // Compute merkle tree and set the merkle branch on the recovered shreds. + let nodes: Vec<_> = shreds + .iter() + .map(Shred::merkle_tree_node) + .collect::>()?; + let tree = make_merkle_tree(nodes); + let merkle_root = &tree.last().unwrap().as_ref()[..SIZE_OF_MERKLE_ROOT]; + let merkle_root = MerkleRoot::try_from(merkle_root).unwrap(); + for (index, (shred, mask)) in shreds.iter_mut().zip(&mask).enumerate() { + if *mask { + if shred.merkle_root() != &merkle_root { + return Err(Error::InvalidMerkleProof); + } + } else { + let merkle_branch = + make_merkle_branch(index, num_shards, &tree).ok_or(Error::InvalidMerkleProof)?; + if merkle_branch.proof.len() != usize::from(proof_size) { + return Err(Error::InvalidMerkleProof); + } + shred.set_merkle_branch(merkle_branch)?; + } + } + // TODO: No need to verify merkle proof in sanitize here. + shreds + .into_iter() + .zip(mask) + .filter(|(_, mask)| !mask) + .map(|(shred, _)| shred.sanitize().map(|_| shred)) + .collect() +} + #[cfg(test)] mod test { - use {super::*, rand::Rng, std::iter::repeat_with}; + use { + super::*, + itertools::Itertools, + matches::assert_matches, + rand::{seq::SliceRandom, CryptoRng, Rng}, + solana_sdk::signature::{Keypair, Signer}, + std::{cmp::Ordering, iter::repeat_with}, + test_case::test_case, + }; // Total size of a data shred including headers and merkle branch. fn shred_data_size_of_payload(proof_size: u8) -> usize { @@ -525,4 +841,153 @@ mod test { run_merkle_tree_round_trip(size); } } + + #[test_case(37)] + #[test_case(64)] + #[test_case(73)] + fn test_recover_merkle_shreds(num_shreds: usize) { + let mut rng = rand::thread_rng(); + for num_data_shreds in 1..num_shreds { + let num_coding_shreds = num_shreds - num_data_shreds; + run_recover_merkle_shreds(&mut rng, num_data_shreds, num_coding_shreds); + } + } + + fn run_recover_merkle_shreds( + rng: &mut R, + num_data_shreds: usize, + num_coding_shreds: usize, + ) { + let keypair = Keypair::generate(rng); + let num_shreds = num_data_shreds + num_coding_shreds; + let proof_size = (num_shreds as f64).log2().ceil() as u8; + let capacity = ShredData::capacity(proof_size).unwrap(); + let common_header = ShredCommonHeader { + signature: Signature::default(), + shred_variant: ShredVariant::MerkleData(proof_size), + slot: 145865705, + index: 1835, + version: 4978, + fec_set_index: 1835, + }; + let data_header = DataShredHeader { + parent_offset: 25, + flags: unsafe { ShredFlags::from_bits_unchecked(0b0010_1010) }, + size: 0, + }; + let coding_header = CodingShredHeader { + num_data_shreds: num_data_shreds as u16, + num_coding_shreds: num_coding_shreds as u16, + position: 0, + }; + let mut shreds = Vec::with_capacity(num_shreds); + for i in 0..num_data_shreds { + let common_header = ShredCommonHeader { + index: common_header.index + i as u32, + ..common_header + }; + let size = ShredData::SIZE_OF_HEADERS + rng.gen_range(0, capacity); + let data_header = DataShredHeader { + size: size as u16, + ..data_header + }; + let mut payload = vec![0u8; ShredData::SIZE_OF_PAYLOAD]; + let mut cursor = Cursor::new(&mut payload[..]); + bincode::serialize_into(&mut cursor, &common_header).unwrap(); + bincode::serialize_into(&mut cursor, &data_header).unwrap(); + rng.fill(&mut payload[ShredData::SIZE_OF_HEADERS..size]); + let shred = ShredData { + common_header, + data_header, + merkle_branch: MerkleBranch::new_zeroed(proof_size), + payload, + }; + shreds.push(Shred::ShredData(shred)); + } + let data: Vec<_> = shreds + .iter() + .map(Shred::erasure_shard_as_slice) + .collect::>() + .unwrap(); + let mut parity = vec![vec![0u8; data[0].len()]; num_coding_shreds]; + ReedSolomon::new(num_data_shreds, num_coding_shreds) + .unwrap() + .encode_sep(&data, &mut parity[..]) + .unwrap(); + for (i, code) in parity.into_iter().enumerate() { + let common_header = ShredCommonHeader { + shred_variant: ShredVariant::MerkleCode(proof_size), + index: common_header.index + i as u32 + 7, + ..common_header + }; + let coding_header = CodingShredHeader { + position: i as u16, + ..coding_header + }; + let mut payload = vec![0u8; ShredCode::SIZE_OF_PAYLOAD]; + let mut cursor = Cursor::new(&mut payload[..]); + bincode::serialize_into(&mut cursor, &common_header).unwrap(); + bincode::serialize_into(&mut cursor, &coding_header).unwrap(); + payload[ShredCode::SIZE_OF_HEADERS..ShredCode::SIZE_OF_HEADERS + code.len()] + .copy_from_slice(&code); + let shred = ShredCode { + common_header, + coding_header, + merkle_branch: MerkleBranch::new_zeroed(proof_size), + payload, + }; + shreds.push(Shred::ShredCode(shred)); + } + let nodes: Vec<_> = shreds + .iter() + .map(Shred::merkle_tree_node) + .collect::>() + .unwrap(); + let tree = make_merkle_tree(nodes); + for (index, shred) in shreds.iter_mut().enumerate() { + let merkle_branch = make_merkle_branch(index, num_shreds, &tree).unwrap(); + assert_eq!(merkle_branch.proof.len(), usize::from(proof_size)); + shred.set_merkle_branch(merkle_branch).unwrap(); + let signature = keypair.sign_message(shred.signed_message()); + shred.set_signature(signature); + assert!(shred.verify(&keypair.pubkey())); + assert_matches!(shred.sanitize(), Ok(())); + } + assert_eq!(shreds.iter().map(Shred::signature).dedup().count(), 1); + for size in num_data_shreds..num_shreds { + let mut shreds = shreds.clone(); + let mut removed_shreds = Vec::new(); + while shreds.len() > size { + let index = rng.gen_range(0, shreds.len()); + removed_shreds.push(shreds.swap_remove(index)); + } + shreds.shuffle(rng); + // Should at least contain one coding shred. + if shreds.iter().all(|shred| { + matches!( + shred.common_header().shred_variant, + ShredVariant::MerkleData(_) + ) + }) { + assert_matches!( + recover(shreds), + Err(Error::ErasureError(TooFewParityShards)) + ); + continue; + } + let recovered_shreds = recover(shreds).unwrap(); + assert_eq!(size + recovered_shreds.len(), num_shreds); + assert_eq!(recovered_shreds.len(), removed_shreds.len()); + removed_shreds.sort_by(|a, b| { + if a.shred_type() == b.shred_type() { + a.index().cmp(&b.index()) + } else if a.shred_type() == ShredType::Data { + Ordering::Less + } else { + Ordering::Greater + } + }); + assert_eq!(recovered_shreds, removed_shreds); + } + } } diff --git a/ledger/src/shredder.rs b/ledger/src/shredder.rs index d3a50cb82dc1ca..671cc0b7c44c47 100644 --- a/ledger/src/shredder.rs +++ b/ledger/src/shredder.rs @@ -33,7 +33,7 @@ const ERASURE_BATCH_SIZE: [usize; 33] = [ 55, 56, 58, 59, 60, 62, 63, 64, // 32 ]; -type ReedSolomon = reed_solomon_erasure::ReedSolomon; +pub(crate) type ReedSolomon = reed_solomon_erasure::ReedSolomon; #[derive(Debug)] pub struct Shredder { From 9f3a466a61a6d9ad9a42dd722af1796c551da495 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Sat, 20 Aug 2022 17:07:34 +0000 Subject: [PATCH 047/465] Standardize thread names to make standard thread monitoring tools more usable (backport #27237) (#27280) Standardize thread names Tenets: 1. Limit thread names to 15 characters 2. Prefix all Solana-controlled threads with "sol" 3. Use Camel case. It's more character dense than Snake or Kebab case (cherry picked from commit 3f4731b37ff54a444d378a1ee7049cce1f0d4f75) Co-authored-by: Michael Vines --- banks-server/src/banks_server.rs | 2 +- banks-server/src/rpc_banks_service.rs | 2 +- client/src/rpc_client.rs | 2 +- client/src/transaction_executor.rs | 2 +- core/src/accounts_hash_verifier.rs | 2 +- core/src/ancestor_hashes_service.rs | 4 +- core/src/banking_stage.rs | 2 +- core/src/broadcast_stage.rs | 8 +- core/src/cache_block_meta_service.rs | 2 +- core/src/cluster_info_vote_listener.rs | 6 +- core/src/cluster_slots_service.rs | 2 +- core/src/commitment_service.rs | 2 +- core/src/completed_data_sets_service.rs | 2 +- core/src/cost_update_service.rs | 2 +- core/src/drop_bank_service.rs | 2 +- core/src/fetch_stage.rs | 4 +- core/src/find_packet_sender_stake_stage.rs | 2 +- core/src/ledger_cleanup_service.rs | 6 +- core/src/ledger_metric_report_service.rs | 2 +- core/src/poh_timing_report_service.rs | 2 +- core/src/qos_service.rs | 2 +- core/src/repair_service.rs | 2 +- core/src/replay_stage.rs | 4 +- core/src/retransmit_stage.rs | 4 +- core/src/rewards_recorder_service.rs | 2 +- core/src/serve_repair.rs | 2 +- core/src/serve_repair_service.rs | 2 +- core/src/shred_fetch_stage.rs | 2 +- core/src/sigverify_shreds.rs | 2 +- core/src/sigverify_stage.rs | 2 +- core/src/snapshot_packager_service.rs | 2 +- core/src/staked_nodes_updater_service.rs | 2 +- core/src/stats_reporter_service.rs | 2 +- core/src/system_monitor_service.rs | 2 +- core/src/tpu.rs | 4 +- core/src/validator.rs | 35 +++------ core/src/voting_service.rs | 2 +- core/src/warm_quic_cache_service.rs | 2 +- core/src/window_service.rs | 6 +- entry/src/entry.rs | 74 +++++++++--------- .../src/slot_status_observer.rs | 2 +- gossip/src/cluster_info.rs | 12 +-- gossip/src/gossip_service.rs | 2 +- gossip/tests/crds_gossip.rs | 2 +- ledger/src/bigtable_upload.rs | 56 +++++++------- ledger/src/bigtable_upload_service.rs | 2 +- ledger/src/blockstore.rs | 4 +- ledger/src/blockstore_processor.rs | 2 +- ledger/src/shredder.rs | 2 +- ledger/src/sigverify_shreds.rs | 2 +- metrics/src/metrics.rs | 6 +- net-utils/src/lib.rs | 75 ++++++++++--------- perf/src/sigverify.rs | 2 +- poh/src/poh_service.rs | 4 +- .../optimistically_confirmed_bank_tracker.rs | 2 +- rpc/src/rpc_completed_slots_service.rs | 2 +- rpc/src/rpc_pubsub_service.rs | 4 +- rpc/src/rpc_service.rs | 6 +- rpc/src/rpc_subscriptions.rs | 4 +- rpc/src/transaction_status_service.rs | 2 +- runtime/src/accounts_background_service.rs | 2 +- runtime/src/accounts_db.rs | 6 +- runtime/src/accounts_index_storage.rs | 2 +- runtime/src/bank_client.rs | 2 +- runtime/src/serde_snapshot.rs | 2 +- runtime/src/shared_buffer_reader.rs | 2 +- .../src/verify_accounts_hash_in_background.rs | 2 +- .../src/send_transaction_service.rs | 4 +- streamer/src/quic.rs | 13 ++-- streamer/src/streamer.rs | 6 +- validator/src/admin_rpc_service.rs | 39 +++++----- validator/src/lib.rs | 23 +++--- 72 files changed, 264 insertions(+), 245 deletions(-) diff --git a/banks-server/src/banks_server.rs b/banks-server/src/banks_server.rs index c73844d2571560..1aff5220bec93b 100644 --- a/banks-server/src/banks_server.rs +++ b/banks-server/src/banks_server.rs @@ -105,7 +105,7 @@ impl BanksServer { } let server_bank_forks = bank_forks.clone(); Builder::new() - .name("solana-bank-forks-client".to_string()) + .name("solBankForksCli".to_string()) .spawn(move || Self::run(server_bank_forks, transaction_receiver)) .unwrap(); Self::new( diff --git a/banks-server/src/rpc_banks_service.rs b/banks-server/src/rpc_banks_service.rs index 822798dd1ffd62..8a2f48156291c8 100644 --- a/banks-server/src/rpc_banks_service.rs +++ b/banks-server/src/rpc_banks_service.rs @@ -88,7 +88,7 @@ impl RpcBanksService { let connection_cache = connection_cache.clone(); let exit = exit.clone(); let thread_hdl = Builder::new() - .name("solana-rpc-banks".to_string()) + .name("solRpcBanksSvc".to_string()) .spawn(move || { Self::run( listen_addr, diff --git a/client/src/rpc_client.rs b/client/src/rpc_client.rs index 1aba5a0c53f047..c216df985a8bd8 100644 --- a/client/src/rpc_client.rs +++ b/client/src/rpc_client.rs @@ -176,7 +176,7 @@ impl RpcClient { rpc_client: nonblocking::rpc_client::RpcClient::new_sender(sender, config), runtime: Some( tokio::runtime::Builder::new_current_thread() - .thread_name("rpc-client") + .thread_name("solRpcClient") .enable_io() .enable_time() .build() diff --git a/client/src/transaction_executor.rs b/client/src/transaction_executor.rs index 56f7a8002275e4..89a70d7ee596e8 100644 --- a/client/src/transaction_executor.rs +++ b/client/src/transaction_executor.rs @@ -91,7 +91,7 @@ impl TransactionExecutor { let exit = exit.clone(); let cleared = cleared.clone(); Builder::new() - .name("sig_clear".to_string()) + .name("solSigClear".to_string()) .spawn(move || { let client = RpcClient::new_socket_with_commitment( entrypoint_addr, diff --git a/core/src/accounts_hash_verifier.rs b/core/src/accounts_hash_verifier.rs index ae8f0dbe780aae..d6df553cd27739 100644 --- a/core/src/accounts_hash_verifier.rs +++ b/core/src/accounts_hash_verifier.rs @@ -50,7 +50,7 @@ impl AccountsHashVerifier { let exit = exit.clone(); let cluster_info = cluster_info.clone(); let t_accounts_hash_verifier = Builder::new() - .name("solana-hash-accounts".to_string()) + .name("solAcctHashVer".to_string()) .spawn(move || { let mut hashes = vec![]; loop { diff --git a/core/src/ancestor_hashes_service.rs b/core/src/ancestor_hashes_service.rs index 4813ed11685069..3f81d38e2a31b3 100644 --- a/core/src/ancestor_hashes_service.rs +++ b/core/src/ancestor_hashes_service.rs @@ -215,7 +215,7 @@ impl AncestorHashesService { ancestor_socket: Arc, ) -> JoinHandle<()> { Builder::new() - .name("solana-ancestor-hashes-responses-service".to_string()) + .name("solAncHashesSvc".to_string()) .spawn(move || { let mut last_stats_report = Instant::now(); let mut stats = AncestorHashesResponsesStats::default(); @@ -538,7 +538,7 @@ impl AncestorHashesService { // to MAX_ANCESTOR_HASHES_SLOT_REQUESTS_PER_SECOND/second let mut request_throttle = vec![]; Builder::new() - .name("solana-manage-ancestor-requests".to_string()) + .name("solManAncReqs".to_string()) .spawn(move || loop { if exit.load(Ordering::Relaxed) { return; diff --git a/core/src/banking_stage.rs b/core/src/banking_stage.rs index 0cb9713c3f11a5..e663adb87f798d 100644 --- a/core/src/banking_stage.rs +++ b/core/src/banking_stage.rs @@ -464,7 +464,7 @@ impl BankingStage { let connection_cache = connection_cache.clone(); let bank_forks = bank_forks.clone(); Builder::new() - .name(format!("solana-banking-stage-tx-{}", i)) + .name(format!("solBanknStgTx{:02}", i)) .spawn(move || { Self::process_loop( &verified_receiver, diff --git a/core/src/broadcast_stage.rs b/core/src/broadcast_stage.rs index ba4c33fa38cc46..68729600d1983e 100644 --- a/core/src/broadcast_stage.rs +++ b/core/src/broadcast_stage.rs @@ -255,7 +255,7 @@ impl BroadcastStage { let blockstore = blockstore.clone(); let cluster_info = cluster_info.clone(); Builder::new() - .name("solana-broadcaster".to_string()) + .name("solBroadcast".to_string()) .spawn(move || { let _finalizer = Finalizer::new(exit); Self::run( @@ -277,7 +277,7 @@ impl BroadcastStage { let cluster_info = cluster_info.clone(); let bank_forks = bank_forks.clone(); let t = Builder::new() - .name("solana-broadcaster-transmit".to_string()) + .name("solBroadcastTx".to_string()) .spawn(move || loop { let res = bs_transmit.transmit(&socket_receiver, &cluster_info, &sock, &bank_forks); @@ -295,7 +295,7 @@ impl BroadcastStage { let mut bs_record = broadcast_stage_run.clone(); let btree = blockstore.clone(); let t = Builder::new() - .name("solana-broadcaster-record".to_string()) + .name("solBroadcastRec".to_string()) .spawn(move || loop { let res = bs_record.record(&blockstore_receiver, &btree); let res = Self::handle_error(res, "solana-broadcaster-record"); @@ -308,7 +308,7 @@ impl BroadcastStage { } let retransmit_thread = Builder::new() - .name("solana-broadcaster-retransmit".to_string()) + .name("solBroadcastRtx".to_string()) .spawn(move || loop { if let Some(res) = Self::handle_error( Self::check_retransmit_signals( diff --git a/core/src/cache_block_meta_service.rs b/core/src/cache_block_meta_service.rs index 98069f253aa66d..a8da9ac0964459 100644 --- a/core/src/cache_block_meta_service.rs +++ b/core/src/cache_block_meta_service.rs @@ -31,7 +31,7 @@ impl CacheBlockMetaService { ) -> Self { let exit = exit.clone(); let thread_hdl = Builder::new() - .name("solana-cache-block-time".to_string()) + .name("solCacheBlkTime".to_string()) .spawn(move || loop { if exit.load(Ordering::Relaxed) { break; diff --git a/core/src/cluster_info_vote_listener.rs b/core/src/cluster_info_vote_listener.rs index ed94724824ff2d..bbe7c2b4a67e79 100644 --- a/core/src/cluster_info_vote_listener.rs +++ b/core/src/cluster_info_vote_listener.rs @@ -252,7 +252,7 @@ impl ClusterInfoVoteListener { let exit = exit.clone(); let bank_forks = bank_forks.clone(); Builder::new() - .name("solana-cluster_info_vote_listener".to_string()) + .name("solCiVoteLstnr".to_string()) .spawn(move || { let _ = Self::recv_loop( exit, @@ -266,7 +266,7 @@ impl ClusterInfoVoteListener { }; let exit_ = exit.clone(); let bank_send_thread = Builder::new() - .name("solana-cluster_info_bank_send".to_string()) + .name("solCiBankSend".to_string()) .spawn(move || { let _ = Self::bank_send_loop( exit_, @@ -278,7 +278,7 @@ impl ClusterInfoVoteListener { .unwrap(); let send_thread = Builder::new() - .name("solana-cluster_info_process_votes".to_string()) + .name("solCiProcVotes".to_string()) .spawn(move || { let _ = Self::process_votes_loop( exit, diff --git a/core/src/cluster_slots_service.rs b/core/src/cluster_slots_service.rs index 119f6081cff0e4..f867981f6afb9b 100644 --- a/core/src/cluster_slots_service.rs +++ b/core/src/cluster_slots_service.rs @@ -48,7 +48,7 @@ impl ClusterSlotsService { Self::initialize_lowest_slot(&blockstore, &cluster_info); Self::initialize_epoch_slots(&bank_forks, &cluster_info); let t_cluster_slots_service = Builder::new() - .name("solana-cluster-slots-service".to_string()) + .name("solClusterSlots".to_string()) .spawn(move || { Self::run( blockstore, diff --git a/core/src/commitment_service.rs b/core/src/commitment_service.rs index 8a882e50560ae5..8ef3f29482f0e3 100644 --- a/core/src/commitment_service.rs +++ b/core/src/commitment_service.rs @@ -69,7 +69,7 @@ impl AggregateCommitmentService { sender, Self { t_commitment: Builder::new() - .name("solana-aggregate-stake-lockouts".to_string()) + .name("solAggCommitSvc".to_string()) .spawn(move || loop { if exit_.load(Ordering::Relaxed) { break; diff --git a/core/src/completed_data_sets_service.rs b/core/src/completed_data_sets_service.rs index 08b561b8aca12f..ff11dfa1fb454a 100644 --- a/core/src/completed_data_sets_service.rs +++ b/core/src/completed_data_sets_service.rs @@ -31,7 +31,7 @@ impl CompletedDataSetsService { ) -> Self { let exit = exit.clone(); let thread_hdl = Builder::new() - .name("completed-data-set-service".to_string()) + .name("solComplDataSet".to_string()) .spawn(move || loop { if exit.load(Ordering::Relaxed) { break; diff --git a/core/src/cost_update_service.rs b/core/src/cost_update_service.rs index cf1a55365f444e..8f5038c0c91633 100644 --- a/core/src/cost_update_service.rs +++ b/core/src/cost_update_service.rs @@ -75,7 +75,7 @@ impl CostUpdateService { cost_update_receiver: CostUpdateReceiver, ) -> Self { let thread_hdl = Builder::new() - .name("solana-cost-update-service".to_string()) + .name("solCostUpdtSvc".to_string()) .spawn(move || { Self::service_loop(blockstore, cost_model, cost_update_receiver); }) diff --git a/core/src/drop_bank_service.rs b/core/src/drop_bank_service.rs index aac1a02ee0344d..0321643d6aab68 100644 --- a/core/src/drop_bank_service.rs +++ b/core/src/drop_bank_service.rs @@ -15,7 +15,7 @@ pub struct DropBankService { impl DropBankService { pub fn new(bank_receiver: Receiver>>) -> Self { let thread_hdl = Builder::new() - .name("sol-drop-b-service".to_string()) + .name("solDropBankSrvc".to_string()) .spawn(move || { for banks in bank_receiver.iter() { let len = banks.len(); diff --git a/core/src/fetch_stage.rs b/core/src/fetch_stage.rs index c041739d7c8d4e..93d8ed28ac1bd1 100644 --- a/core/src/fetch_stage.rs +++ b/core/src/fetch_stage.rs @@ -208,7 +208,7 @@ impl FetchStage { let poh_recorder = poh_recorder.clone(); let fwd_thread_hdl = Builder::new() - .name("solana-fetch-stage-fwd-rcvr".to_string()) + .name("solFetchStgFwRx".to_string()) .spawn(move || loop { if let Err(e) = Self::handle_forwarded_packets(&forward_receiver, &sender, &poh_recorder) @@ -226,7 +226,7 @@ impl FetchStage { let exit = exit.clone(); let metrics_thread_hdl = Builder::new() - .name("solana-fetch-stage-metrics".to_string()) + .name("solFetchStgMetr".to_string()) .spawn(move || loop { sleep(Duration::from_secs(1)); diff --git a/core/src/find_packet_sender_stake_stage.rs b/core/src/find_packet_sender_stake_stage.rs index d62d6afe7c8dac..53f1d033669a34 100644 --- a/core/src/find_packet_sender_stake_stage.rs +++ b/core/src/find_packet_sender_stake_stage.rs @@ -84,7 +84,7 @@ impl FindPacketSenderStakeStage { ) -> Self { let mut stats = FindPacketSenderStakeStats::default(); let thread_hdl = Builder::new() - .name("find-packet-sender-stake".to_string()) + .name("solPktStake".to_string()) .spawn(move || loop { match streamer::recv_packet_batches(&packet_receiver) { Ok((mut batches, num_packets, recv_duration)) => { diff --git a/core/src/ledger_cleanup_service.rs b/core/src/ledger_cleanup_service.rs index 6607ba8ed594b5..89b2889d03a6df 100644 --- a/core/src/ledger_cleanup_service.rs +++ b/core/src/ledger_cleanup_service.rs @@ -76,7 +76,7 @@ impl LedgerCleanupService { let blockstore_compact = blockstore.clone(); let t_cleanup = Builder::new() - .name("sol-led-cleanup".to_string()) + .name("solLedgerClean".to_string()) .spawn(move || loop { if exit.load(Ordering::Relaxed) { break; @@ -98,7 +98,7 @@ impl LedgerCleanupService { .unwrap(); let t_compact = Builder::new() - .name("sol-led-compact".to_string()) + .name("solLedgerComp".to_string()) .spawn(move || loop { if exit_compact.load(Ordering::Relaxed) { break; @@ -242,7 +242,7 @@ impl LedgerCleanupService { let purge_complete1 = purge_complete.clone(); let last_compact_slot1 = last_compact_slot.clone(); let _t_purge = Builder::new() - .name("solana-ledger-purge".to_string()) + .name("solLedgerPurge".to_string()) .spawn(move || { let mut slot_update_time = Measure::start("slot_update"); *blockstore.lowest_cleanup_slot.write().unwrap() = lowest_cleanup_slot; diff --git a/core/src/ledger_metric_report_service.rs b/core/src/ledger_metric_report_service.rs index 8d0b96d28c3500..1f8636bff6a546 100644 --- a/core/src/ledger_metric_report_service.rs +++ b/core/src/ledger_metric_report_service.rs @@ -26,7 +26,7 @@ impl LedgerMetricReportService { pub fn new(blockstore: Arc, exit: &Arc) -> Self { let exit_signal = exit.clone(); let t_cf_metric = Builder::new() - .name("metric_report_rocksdb_cf_metrics".to_string()) + .name("solRocksCfMtrcs".to_string()) .spawn(move || loop { if exit_signal.load(Ordering::Relaxed) { break; diff --git a/core/src/poh_timing_report_service.rs b/core/src/poh_timing_report_service.rs index 175b3cdc83e50d..bc84176525ef6e 100644 --- a/core/src/poh_timing_report_service.rs +++ b/core/src/poh_timing_report_service.rs @@ -28,7 +28,7 @@ impl PohTimingReportService { let exit_signal = exit.clone(); let mut poh_timing_reporter = PohTimingReporter::default(); let t_poh_timing = Builder::new() - .name("poh_timing_report".to_string()) + .name("solPohTimingRpt".to_string()) .spawn(move || loop { if exit_signal.load(Ordering::Relaxed) { break; diff --git a/core/src/qos_service.rs b/core/src/qos_service.rs index fb493f674343bb..9b54e2a302c46d 100644 --- a/core/src/qos_service.rs +++ b/core/src/qos_service.rs @@ -72,7 +72,7 @@ impl QosService { let metrics_clone = Arc::clone(&metrics); let reporting_thread = Some( Builder::new() - .name("solana-qos-service-metrics-repoting".to_string()) + .name("solQosSvcMetr".to_string()) .spawn(move || { Self::reporting_loop(running_flag_clone, metrics_clone, report_receiver); }) diff --git a/core/src/repair_service.rs b/core/src/repair_service.rs index 018824c7935e9e..2b8bda8705842c 100644 --- a/core/src/repair_service.rs +++ b/core/src/repair_service.rs @@ -212,7 +212,7 @@ impl RepairService { let exit = exit.clone(); let repair_info = repair_info.clone(); Builder::new() - .name("solana-repair-service".to_string()) + .name("solRepairSvc".to_string()) .spawn(move || { Self::run( &blockstore, diff --git a/core/src/replay_stage.rs b/core/src/replay_stage.rs index 8d2fec62489c40..fe25a872aff499 100644 --- a/core/src/replay_stage.rs +++ b/core/src/replay_stage.rs @@ -97,7 +97,7 @@ const MAX_CONCURRENT_FORKS_TO_REPLAY: usize = 4; lazy_static! { static ref PAR_THREAD_POOL: ThreadPool = rayon::ThreadPoolBuilder::new() .num_threads(MAX_CONCURRENT_FORKS_TO_REPLAY) - .thread_name(|ix| format!("replay_{}", ix)) + .thread_name(|ix| format!("solReplay{:02}", ix)) .build() .unwrap(); } @@ -436,7 +436,7 @@ impl ReplayStage { #[allow(clippy::cognitive_complexity)] let t_replay = Builder::new() - .name("solana-replay-stage".to_string()) + .name("solReplayStage".to_string()) .spawn(move || { let verify_recyclers = VerifyRecyclers::default(); let _exit = Finalizer::new(exit.clone()); diff --git a/core/src/retransmit_stage.rs b/core/src/retransmit_stage.rs index c6d3855f72b640..bf4e9c2e76819c 100644 --- a/core/src/retransmit_stage.rs +++ b/core/src/retransmit_stage.rs @@ -364,11 +364,11 @@ pub fn retransmitter( let num_threads = get_thread_count().min(8).max(sockets.len()); let thread_pool = ThreadPoolBuilder::new() .num_threads(num_threads) - .thread_name(|i| format!("retransmit-{}", i)) + .thread_name(|i| format!("solRetransmit{:02}", i)) .build() .unwrap(); Builder::new() - .name("solana-retransmitter".to_string()) + .name("solRetransmittr".to_string()) .spawn(move || loop { match retransmit( &thread_pool, diff --git a/core/src/rewards_recorder_service.rs b/core/src/rewards_recorder_service.rs index 8988441d22222f..10dd8ea9cd0b0c 100644 --- a/core/src/rewards_recorder_service.rs +++ b/core/src/rewards_recorder_service.rs @@ -30,7 +30,7 @@ impl RewardsRecorderService { ) -> Self { let exit = exit.clone(); let thread_hdl = Builder::new() - .name("solana-rewards-writer".to_string()) + .name("solRewardsWritr".to_string()) .spawn(move || loop { if exit.load(Ordering::Relaxed) { break; diff --git a/core/src/serve_repair.rs b/core/src/serve_repair.rs index 47443bcd9acc2d..0b7d63a7ddc2f7 100644 --- a/core/src/serve_repair.rs +++ b/core/src/serve_repair.rs @@ -567,7 +567,7 @@ impl ServeRepair { let recycler = PacketBatchRecycler::default(); Builder::new() - .name("solana-repair-listen".to_string()) + .name("solRepairListen".to_string()) .spawn(move || { let mut last_print = Instant::now(); let mut stats = ServeRepairStats::default(); diff --git a/core/src/serve_repair_service.rs b/core/src/serve_repair_service.rs index 72dc7a49e66553..144de5c2a98d48 100644 --- a/core/src/serve_repair_service.rs +++ b/core/src/serve_repair_service.rs @@ -46,7 +46,7 @@ impl ServeRepairService { ); let (response_sender, response_receiver) = unbounded(); let t_responder = streamer::responder( - "serve-repairs", + "Repair", serve_repair_socket, response_receiver, socket_addr_space, diff --git a/core/src/shred_fetch_stage.rs b/core/src/shred_fetch_stage.rs index d9427e30f64da2..25c9b00cdf7c76 100644 --- a/core/src/shred_fetch_stage.rs +++ b/core/src/shred_fetch_stage.rs @@ -135,7 +135,7 @@ impl ShredFetchStage { }) .collect(); let modifier_hdl = Builder::new() - .name("solana-tvu-fetch-stage-packet-modifier".to_string()) + .name("solTvuFetchPMod".to_string()) .spawn(move || { let repair_context = repair_context .as_ref() diff --git a/core/src/sigverify_shreds.rs b/core/src/sigverify_shreds.rs index f9a50ab8b2a954..521fadedd0db3f 100644 --- a/core/src/sigverify_shreds.rs +++ b/core/src/sigverify_shreds.rs @@ -37,7 +37,7 @@ pub(crate) fn spawn_shred_sigverify( let recycler_cache = RecyclerCache::warmed(); let mut stats = ShredSigVerifyStats::new(Instant::now()); Builder::new() - .name("shred-verifier".to_string()) + .name("solShredVerifr".to_string()) .spawn(move || loop { match run_shred_sigverify( &self_pubkey, diff --git a/core/src/sigverify_stage.rs b/core/src/sigverify_stage.rs index 75c863e9f16c9a..30174dc986888b 100644 --- a/core/src/sigverify_stage.rs +++ b/core/src/sigverify_stage.rs @@ -412,7 +412,7 @@ impl SigVerifyStage { const MAX_DEDUPER_AGE: Duration = Duration::from_secs(2); const MAX_DEDUPER_ITEMS: u32 = 1_000_000; Builder::new() - .name("solana-verifier".to_string()) + .name("solSigVerifier".to_string()) .spawn(move || { let mut deduper = Deduper::new(MAX_DEDUPER_ITEMS, MAX_DEDUPER_AGE); loop { diff --git a/core/src/snapshot_packager_service.rs b/core/src/snapshot_packager_service.rs index 7077362e4b8725..3234dcbeea2c15 100644 --- a/core/src/snapshot_packager_service.rs +++ b/core/src/snapshot_packager_service.rs @@ -49,7 +49,7 @@ impl SnapshotPackagerService { ); let t_snapshot_packager = Builder::new() - .name("snapshot-packager".to_string()) + .name("solSnapshotPkgr".to_string()) .spawn(move || { renice_this_thread(snapshot_config.packager_thread_niceness_adj).unwrap(); let mut snapshot_gossip_manager = if enable_gossip_push { diff --git a/core/src/staked_nodes_updater_service.rs b/core/src/staked_nodes_updater_service.rs index a5bd3518590fa6..ebe9fd37a1bcf8 100644 --- a/core/src/staked_nodes_updater_service.rs +++ b/core/src/staked_nodes_updater_service.rs @@ -29,7 +29,7 @@ impl StakedNodesUpdaterService { shared_staked_nodes: Arc>, ) -> Self { let thread_hdl = Builder::new() - .name("sol-sn-updater".to_string()) + .name("solStakedNodeUd".to_string()) .spawn(move || { let mut last_stakes = Instant::now(); while !exit.load(Ordering::Relaxed) { diff --git a/core/src/stats_reporter_service.rs b/core/src/stats_reporter_service.rs index b6f23e4162e08e..90e72aaadb3e46 100644 --- a/core/src/stats_reporter_service.rs +++ b/core/src/stats_reporter_service.rs @@ -22,7 +22,7 @@ impl StatsReporterService { ) -> Self { let exit = exit.clone(); let thread_hdl = Builder::new() - .name("solana-stats-reporter".to_owned()) + .name("solStatsReport".to_owned()) .spawn(move || loop { if exit.load(Ordering::Relaxed) { return; diff --git a/core/src/system_monitor_service.rs b/core/src/system_monitor_service.rs index 3b11d4b6a1a424..dc6146ed1abc75 100644 --- a/core/src/system_monitor_service.rs +++ b/core/src/system_monitor_service.rs @@ -363,7 +363,7 @@ impl SystemMonitorService { ) -> Self { info!("Starting SystemMonitorService"); let thread_hdl = Builder::new() - .name("system-monitor".to_string()) + .name("solSystemMonitr".to_string()) .spawn(move || { Self::run( exit, diff --git a/core/src/tpu.rs b/core/src/tpu.rs index 7ed1ee0c49ee6e..eb4d8aba68fe67 100644 --- a/core/src/tpu.rs +++ b/core/src/tpu.rs @@ -137,7 +137,7 @@ impl Tpu { packet_receiver, find_packet_sender_stake_sender, staked_nodes.clone(), - "tpu-find-packet-sender-stake", + "Tpu", ); let (vote_find_packet_sender_stake_sender, vote_find_packet_sender_stake_receiver) = @@ -147,7 +147,7 @@ impl Tpu { vote_packet_receiver, vote_find_packet_sender_stake_sender, staked_nodes.clone(), - "tpu-vote-find-packet-sender-stake", + "Vote", ); let (verified_sender, verified_receiver) = unbounded(); diff --git a/core/src/validator.rs b/core/src/validator.rs index 78a611aa842d0c..7fb4827bf0be70 100644 --- a/core/src/validator.rs +++ b/core/src/validator.rs @@ -300,7 +300,7 @@ impl BlockstoreRootScan { let exit = exit.clone(); Some( Builder::new() - .name("blockstore-root-scan".to_string()) + .name("solBStoreRtScan".to_string()) .spawn(move || blockstore.scan_and_fix_roots(&exit)) .unwrap(), ) @@ -1598,34 +1598,23 @@ impl<'a> ProcessBlockStore<'a> { let previous_start_process = *self.start_progress.read().unwrap(); *self.start_progress.write().unwrap() = ValidatorStartProgress::LoadingLedger; - /* - #[allow(clippy::too_many_arguments)] - fn process_blockstore( - blockstore: &Blockstore, - bank_forks: &Arc>, - leader_schedule_cache: &LeaderScheduleCache, - process_options: &blockstore_processor::ProcessOptions, - transaction_status_sender: Option<&TransactionStatusSender>, - cache_block_meta_sender: Option<&CacheBlockMetaSender>, - blockstore_root_scan: BlockstoreRootScan, - accounts_background_request_sender: &AbsRequestSender, - start_progress: &Arc>, - ) { - */ let exit = Arc::new(AtomicBool::new(false)); if let Some(max_slot) = highest_slot(self.blockstore) { let bank_forks = self.bank_forks.clone(); let exit = exit.clone(); let start_progress = self.start_progress.clone(); - let _ = std::thread::spawn(move || { - while !exit.load(Ordering::Relaxed) { - let slot = bank_forks.read().unwrap().working_bank().slot(); - *start_progress.write().unwrap() = - ValidatorStartProgress::ProcessingLedger { slot, max_slot }; - sleep(Duration::from_secs(2)); - } - }); + let _ = Builder::new() + .name("solRptLdgrStat".to_string()) + .spawn(move || { + while !exit.load(Ordering::Relaxed) { + let slot = bank_forks.read().unwrap().working_bank().slot(); + *start_progress.write().unwrap() = + ValidatorStartProgress::ProcessingLedger { slot, max_slot }; + sleep(Duration::from_secs(2)); + } + }) + .unwrap(); } blockstore_processor::process_blockstore_from_root( self.blockstore, diff --git a/core/src/voting_service.rs b/core/src/voting_service.rs index 29cf4699dd575e..cbd53a1c3bc23b 100644 --- a/core/src/voting_service.rs +++ b/core/src/voting_service.rs @@ -46,7 +46,7 @@ impl VotingService { bank_forks: Arc>, ) -> Self { let thread_hdl = Builder::new() - .name("sol-vote-service".to_string()) + .name("solVoteService".to_string()) .spawn(move || { for vote_op in vote_receiver.iter() { let rooted_bank = bank_forks.read().unwrap().root_bank().clone(); diff --git a/core/src/warm_quic_cache_service.rs b/core/src/warm_quic_cache_service.rs index 2632d031019ed9..08428d589878ae 100644 --- a/core/src/warm_quic_cache_service.rs +++ b/core/src/warm_quic_cache_service.rs @@ -32,7 +32,7 @@ impl WarmQuicCacheService { exit: Arc, ) -> Self { let thread_hdl = Builder::new() - .name("sol-warm-quic-service".to_string()) + .name("solWarmQuicSvc".to_string()) .spawn(move || { let slot_jitter = thread_rng().gen_range(-CACHE_JITTER_SLOT, CACHE_JITTER_SLOT); let mut maybe_last_leader = None; diff --git a/core/src/window_service.rs b/core/src/window_service.rs index da4cbcb4452b11..2f7983bd86d7eb 100644 --- a/core/src/window_service.rs +++ b/core/src/window_service.rs @@ -375,7 +375,7 @@ impl WindowService { inc_new_counter_error!("solana-check-duplicate-error", 1, 1); }; Builder::new() - .name("solana-check-duplicate".to_string()) + .name("solWinCheckDup".to_string()) .spawn(move || { while !exit.load(Ordering::Relaxed) { if let Err(e) = run_check_duplicate( @@ -408,11 +408,11 @@ impl WindowService { }; let thread_pool = rayon::ThreadPoolBuilder::new() .num_threads(get_thread_count().min(8)) - .thread_name(|i| format!("window-insert-{}", i)) + .thread_name(|i| format!("solWinInsert{:02}", i)) .build() .unwrap(); Builder::new() - .name("solana-window-insert".to_string()) + .name("solWinInsert".to_string()) .spawn(move || { let handle_duplicate = |shred| { let _ = check_duplicate_sender.send(shred); diff --git a/entry/src/entry.rs b/entry/src/entry.rs index bfdba187d00743..225e93b17f6922 100644 --- a/entry/src/entry.rs +++ b/entry/src/entry.rs @@ -46,7 +46,7 @@ use { lazy_static! { static ref PAR_THREAD_POOL: ThreadPool = rayon::ThreadPoolBuilder::new() .num_threads(get_max_thread_count()) - .thread_name(|ix| format!("entry_{}", ix)) + .thread_name(|ix| format!("solEntry{:02}", ix)) .build() .unwrap(); } @@ -525,21 +525,24 @@ pub fn start_verify_transactions( let tx_offset_recycler = verify_recyclers.tx_offset_recycler; let out_recycler = verify_recyclers.out_recycler; let num_packets = entry_txs.len(); - let gpu_verify_thread = thread::spawn(move || { - let mut verify_time = Measure::start("sigverify"); - sigverify::ed25519_verify( - &mut packet_batches, - &tx_offset_recycler, - &out_recycler, - false, - num_packets, - ); - let verified = packet_batches - .iter() - .all(|batch| batch.iter().all(|p| !p.meta.discard())); - verify_time.stop(); - (verified, verify_time.as_us()) - }); + let gpu_verify_thread = thread::Builder::new() + .name("solGpuSigVerify".into()) + .spawn(move || { + let mut verify_time = Measure::start("sigverify"); + sigverify::ed25519_verify( + &mut packet_batches, + &tx_offset_recycler, + &out_recycler, + false, + num_packets, + ); + let verified = packet_batches + .iter() + .all(|batch| batch.iter().all(|p| !p.meta.discard())); + verify_time.stop(); + (verified, verify_time.as_us()) + }) + .unwrap(); Ok(EntrySigVerificationState { verification_status: EntryVerificationStatus::Pending, entries: Some(entries), @@ -770,25 +773,28 @@ impl EntrySlice for [Entry] { let hashes = Arc::new(Mutex::new(hashes_pinned)); let hashes_clone = hashes.clone(); - let gpu_verify_thread = thread::spawn(move || { - let mut hashes = hashes_clone.lock().unwrap(); - let gpu_wait = Instant::now(); - let res; - unsafe { - res = (api.poh_verify_many)( - hashes.as_mut_ptr() as *mut u8, - num_hashes_vec.as_ptr(), - length, - 1, + let gpu_verify_thread = thread::Builder::new() + .name("solGpuPohVerify".into()) + .spawn(move || { + let mut hashes = hashes_clone.lock().unwrap(); + let gpu_wait = Instant::now(); + let res; + unsafe { + res = (api.poh_verify_many)( + hashes.as_mut_ptr() as *mut u8, + num_hashes_vec.as_ptr(), + length, + 1, + ); + } + assert!(res == 0, "GPU PoH verify many failed"); + inc_new_counter_info!( + "entry_verify-gpu_thread", + timing::duration_as_us(&gpu_wait.elapsed()) as usize ); - } - assert!(res == 0, "GPU PoH verify many failed"); - inc_new_counter_info!( - "entry_verify-gpu_thread", - timing::duration_as_us(&gpu_wait.elapsed()) as usize - ); - timing::duration_as_us(&gpu_wait.elapsed()) - }); + timing::duration_as_us(&gpu_wait.elapsed()) + }) + .unwrap(); let verifications = PAR_THREAD_POOL.install(|| { self.into_par_iter() diff --git a/geyser-plugin-manager/src/slot_status_observer.rs b/geyser-plugin-manager/src/slot_status_observer.rs index bad8fa90ece13c..b2f6bf5f795b6c 100644 --- a/geyser-plugin-manager/src/slot_status_observer.rs +++ b/geyser-plugin-manager/src/slot_status_observer.rs @@ -48,7 +48,7 @@ impl SlotStatusObserver { slot_status_notifier: SlotStatusNotifier, ) -> JoinHandle<()> { Builder::new() - .name("bank_notification_receiver".to_string()) + .name("solBankNotif".to_string()) .spawn(move || { while !exit.load(Ordering::Relaxed) { if let Ok(slot) = bank_notification_receiver.recv() { diff --git a/gossip/src/cluster_info.rs b/gossip/src/cluster_info.rs index 8378f4273f181a..a60003355c9381 100644 --- a/gossip/src/cluster_info.rs +++ b/gossip/src/cluster_info.rs @@ -1682,11 +1682,11 @@ impl ClusterInfo { ) -> JoinHandle<()> { let thread_pool = ThreadPoolBuilder::new() .num_threads(std::cmp::min(get_thread_count(), 8)) - .thread_name(|i| format!("ClusterInfo::gossip-{}", i)) + .thread_name(|i| format!("solRunGossip{:02}", i)) .build() .unwrap(); Builder::new() - .name("solana-gossip".to_string()) + .name("solGossip".to_string()) .spawn(move || { let mut last_push = timestamp(); let mut last_contact_info_trace = timestamp(); @@ -2560,7 +2560,7 @@ impl ClusterInfo { ) -> JoinHandle<()> { let thread_pool = ThreadPoolBuilder::new() .num_threads(get_thread_count().min(8)) - .thread_name(|i| format!("gossip-consume-{}", i)) + .thread_name(|i| format!("solGossipCons{:02}", i)) .build() .unwrap(); let run_consume = move || { @@ -2576,7 +2576,7 @@ impl ClusterInfo { } } }; - let thread_name = String::from("gossip-consume"); + let thread_name = String::from("solGossipConsum"); Builder::new().name(thread_name).spawn(run_consume).unwrap() } @@ -2592,11 +2592,11 @@ impl ClusterInfo { let recycler = PacketBatchRecycler::default(); let thread_pool = ThreadPoolBuilder::new() .num_threads(get_thread_count().min(8)) - .thread_name(|i| format!("sol-gossip-work-{}", i)) + .thread_name(|i| format!("solGossipWork{:02}", i)) .build() .unwrap(); Builder::new() - .name("solana-listen".to_string()) + .name("solGossipListen".to_string()) .spawn(move || { while !exit.load(Ordering::Relaxed) { if let Err(err) = self.run_listen( diff --git a/gossip/src/gossip_service.rs b/gossip/src/gossip_service.rs index 9bc911b405d49f..d487cf546ef7ca 100644 --- a/gossip/src/gossip_service.rs +++ b/gossip/src/gossip_service.rs @@ -80,7 +80,7 @@ impl GossipService { exit.clone(), ); let t_responder = streamer::responder( - "gossip", + "Gossip", gossip_socket, response_receiver, socket_addr_space, diff --git a/gossip/tests/crds_gossip.rs b/gossip/tests/crds_gossip.rs index 7095465c38fa54..5eff0147b52ce8 100644 --- a/gossip/tests/crds_gossip.rs +++ b/gossip/tests/crds_gossip.rs @@ -608,7 +608,7 @@ fn network_run_pull( fn build_gossip_thread_pool() -> ThreadPool { ThreadPoolBuilder::new() .num_threads(get_thread_count().min(2)) - .thread_name(|i| format!("crds_gossip_test_{}", i)) + .thread_name(|i| format!("gossipTest{:02}", i)) .build() .unwrap() } diff --git a/ledger/src/bigtable_upload.rs b/ledger/src/bigtable_upload.rs index f43b07db12592a..de717c4d9b1d84 100644 --- a/ledger/src/bigtable_upload.rs +++ b/ledger/src/bigtable_upload.rs @@ -164,35 +164,37 @@ pub async fn upload_confirmed_blocks( let sender = sender.clone(); let slot_receiver = slot_receiver.clone(); let exit = exit.clone(); + std::thread::Builder::new() + .name("solBigTGetBlk".into()) + .spawn(move || { + let start = Instant::now(); + let mut num_blocks_read = 0; + + while let Ok(slot) = slot_receiver.recv() { + if exit.load(Ordering::Relaxed) { + break; + } - std::thread::spawn(move || { - let start = Instant::now(); - let mut num_blocks_read = 0; - - while let Ok(slot) = slot_receiver.recv() { - if exit.load(Ordering::Relaxed) { - break; + let _ = match blockstore.get_rooted_block(slot, true) { + Ok(confirmed_block) => { + num_blocks_read += 1; + sender.send((slot, Some(confirmed_block))) + } + Err(err) => { + warn!( + "Failed to get load confirmed block from slot {}: {:?}", + slot, err + ); + sender.send((slot, None)) + } + }; } - - let _ = match blockstore.get_rooted_block(slot, true) { - Ok(confirmed_block) => { - num_blocks_read += 1; - sender.send((slot, Some(confirmed_block))) - } - Err(err) => { - warn!( - "Failed to get load confirmed block from slot {}: {:?}", - slot, err - ); - sender.send((slot, None)) - } - }; - } - BlockstoreLoadStats { - num_blocks_read, - elapsed: start.elapsed(), - } - }) + BlockstoreLoadStats { + num_blocks_read, + elapsed: start.elapsed(), + } + }) + .unwrap() }) .collect(), receiver, diff --git a/ledger/src/bigtable_upload_service.rs b/ledger/src/bigtable_upload_service.rs index 812f87cf8704a9..857190a47de9ab 100644 --- a/ledger/src/bigtable_upload_service.rs +++ b/ledger/src/bigtable_upload_service.rs @@ -50,7 +50,7 @@ impl BigTableUploadService { ) -> Self { info!("Starting BigTable upload service"); let thread = Builder::new() - .name("bigtable-upload".to_string()) + .name("solBigTUpload".to_string()) .spawn(move || { Self::run( runtime, diff --git a/ledger/src/blockstore.rs b/ledger/src/blockstore.rs index 23961d9664448e..4acb9fa8aad2ed 100644 --- a/ledger/src/blockstore.rs +++ b/ledger/src/blockstore.rs @@ -90,12 +90,12 @@ pub use { lazy_static! { static ref PAR_THREAD_POOL: ThreadPool = rayon::ThreadPoolBuilder::new() .num_threads(get_max_thread_count()) - .thread_name(|ix| format!("blockstore_{}", ix)) + .thread_name(|ix| format!("solBstore{:02}", ix)) .build() .unwrap(); static ref PAR_THREAD_POOL_ALL_CPUS: ThreadPool = rayon::ThreadPoolBuilder::new() .num_threads(num_cpus::get()) - .thread_name(|ix| format!("blockstore_{}", ix)) + .thread_name(|ix| format!("solBstoreAll{:02}", ix)) .build() .unwrap(); } diff --git a/ledger/src/blockstore_processor.rs b/ledger/src/blockstore_processor.rs index 321997a42e8ad5..29dfc67c3a9bb6 100644 --- a/ledger/src/blockstore_processor.rs +++ b/ledger/src/blockstore_processor.rs @@ -106,7 +106,7 @@ struct ReplayEntry { lazy_static! { static ref PAR_THREAD_POOL: ThreadPool = rayon::ThreadPoolBuilder::new() .num_threads(get_max_thread_count()) - .thread_name(|ix| format!("blockstore_processor_{}", ix)) + .thread_name(|ix| format!("solBstoreProc{:02}", ix)) .build() .unwrap(); } diff --git a/ledger/src/shredder.rs b/ledger/src/shredder.rs index 671cc0b7c44c47..1b1db2f9775bd4 100644 --- a/ledger/src/shredder.rs +++ b/ledger/src/shredder.rs @@ -19,7 +19,7 @@ use { lazy_static! { static ref PAR_THREAD_POOL: ThreadPool = rayon::ThreadPoolBuilder::new() .num_threads(get_thread_count()) - .thread_name(|ix| format!("shredder_{}", ix)) + .thread_name(|ix| format!("solShredder{:02}", ix)) .build() .unwrap(); } diff --git a/ledger/src/sigverify_shreds.rs b/ledger/src/sigverify_shreds.rs index aecad26aa6c311..87bffcb00469ee 100644 --- a/ledger/src/sigverify_shreds.rs +++ b/ledger/src/sigverify_shreds.rs @@ -26,7 +26,7 @@ const SIGN_SHRED_GPU_MIN: usize = 256; lazy_static! { static ref SIGVERIFY_THREAD_POOL: ThreadPool = rayon::ThreadPoolBuilder::new() .num_threads(get_thread_count()) - .thread_name(|ix| format!("sigverify_shreds_{}", ix)) + .thread_name(|ix| format!("solSvrfyShred{:02}", ix)) .build() .unwrap(); } diff --git a/metrics/src/metrics.rs b/metrics/src/metrics.rs index 99f1183648b147..4b9b183de98ee4 100644 --- a/metrics/src/metrics.rs +++ b/metrics/src/metrics.rs @@ -173,7 +173,11 @@ impl MetricsAgent { max_points_per_sec: usize, ) -> Self { let (sender, receiver) = unbounded::(); - thread::spawn(move || Self::run(&receiver, &writer, write_frequency, max_points_per_sec)); + + thread::Builder::new() + .name("solMetricsAgent".into()) + .spawn(move || Self::run(&receiver, &writer, write_frequency, max_points_per_sec)) + .unwrap(); Self { sender } } diff --git a/net-utils/src/lib.rs b/net-utils/src/lib.rs index ecee6d98f6f582..f690a05f6bdc25 100644 --- a/net-utils/src/lib.rs +++ b/net-utils/src/lib.rs @@ -144,15 +144,18 @@ fn do_verify_reachable_ports( for (port, tcp_listener) in tcp_listeners { let (sender, receiver) = unbounded(); let listening_addr = tcp_listener.local_addr().unwrap(); - let thread_handle = std::thread::spawn(move || { - debug!("Waiting for incoming connection on tcp/{}", port); - match tcp_listener.incoming().next() { - Some(_) => sender - .send(()) - .unwrap_or_else(|err| warn!("send failure: {}", err)), - None => warn!("tcp incoming failed"), - } - }); + let thread_handle = std::thread::Builder::new() + .name(format!("solVrfyTcp{:05}", port)) + .spawn(move || { + debug!("Waiting for incoming connection on tcp/{}", port); + match tcp_listener.incoming().next() { + Some(_) => sender + .send(()) + .unwrap_or_else(|err| warn!("send failure: {}", err)), + None => warn!("tcp incoming failed"), + } + }) + .unwrap(); match receiver.recv_timeout(timeout) { Ok(_) => { info!("tcp/{} is reachable", port); @@ -222,33 +225,37 @@ fn do_verify_reachable_ports( let port = udp_socket.local_addr().unwrap().port(); let udp_socket = udp_socket.try_clone().expect("Unable to clone udp socket"); let reachable_ports = reachable_ports.clone(); - std::thread::spawn(move || { - let start = Instant::now(); - - let original_read_timeout = udp_socket.read_timeout().unwrap(); - udp_socket - .set_read_timeout(Some(Duration::from_millis(250))) - .unwrap(); - loop { - if reachable_ports.read().unwrap().contains(&port) - || Instant::now().duration_since(start) >= timeout - { - break; - } - - let recv_result = udp_socket.recv(&mut [0; 1]); - debug!( - "Waited for incoming datagram on udp/{}: {:?}", - port, recv_result - ); - if recv_result.is_ok() { - reachable_ports.write().unwrap().insert(port); - break; + std::thread::Builder::new() + .name(format!("solVrfyUdp{:05}", port)) + .spawn(move || { + let start = Instant::now(); + + let original_read_timeout = udp_socket.read_timeout().unwrap(); + udp_socket + .set_read_timeout(Some(Duration::from_millis(250))) + .unwrap(); + loop { + if reachable_ports.read().unwrap().contains(&port) + || Instant::now().duration_since(start) >= timeout + { + break; + } + + let recv_result = udp_socket.recv(&mut [0; 1]); + debug!( + "Waited for incoming datagram on udp/{}: {:?}", + port, recv_result + ); + + if recv_result.is_ok() { + reachable_ports.write().unwrap().insert(port); + break; + } } - } - udp_socket.set_read_timeout(original_read_timeout).unwrap(); - }) + udp_socket.set_read_timeout(original_read_timeout).unwrap(); + }) + .unwrap() }) .collect(); diff --git a/perf/src/sigverify.rs b/perf/src/sigverify.rs index aee1b310dd59d9..e2856e9423f796 100644 --- a/perf/src/sigverify.rs +++ b/perf/src/sigverify.rs @@ -45,7 +45,7 @@ pub const VERIFY_MIN_PACKETS_PER_THREAD: usize = 128; lazy_static! { static ref PAR_THREAD_POOL: ThreadPool = rayon::ThreadPoolBuilder::new() .num_threads(get_thread_count()) - .thread_name(|ix| format!("sigverify_{}", ix)) + .thread_name(|ix| format!("solSigVerify{:02}", ix)) .build() .unwrap(); } diff --git a/poh/src/poh_service.rs b/poh/src/poh_service.rs index 70f4d2f1ed47ac..2b71c6ab6140f4 100644 --- a/poh/src/poh_service.rs +++ b/poh/src/poh_service.rs @@ -106,7 +106,7 @@ impl PohService { let poh_exit_ = poh_exit.clone(); let poh_config = poh_config.clone(); let tick_producer = Builder::new() - .name("solana-poh-service-tick_producer".to_string()) + .name("solPohTickProd".to_string()) .spawn(move || { solana_sys_tuner::request_realtime_poh(); if poh_config.hashes_per_tick.is_none() { @@ -452,7 +452,7 @@ mod tests { let exit = exit.clone(); Builder::new() - .name("solana-poh-service-entry_producer".to_string()) + .name("solPohEntryProd".to_string()) .spawn(move || { let now = Instant::now(); let mut total_us = 0; diff --git a/rpc/src/optimistically_confirmed_bank_tracker.rs b/rpc/src/optimistically_confirmed_bank_tracker.rs index 3dc5645e605dff..3dbc25473c1572 100644 --- a/rpc/src/optimistically_confirmed_bank_tracker.rs +++ b/rpc/src/optimistically_confirmed_bank_tracker.rs @@ -71,7 +71,7 @@ impl OptimisticallyConfirmedBankTracker { let mut last_notified_confirmed_slot: Slot = 0; let mut highest_confirmed_slot: Slot = 0; let thread_hdl = Builder::new() - .name("solana-optimistic-bank-tracker".to_string()) + .name("solOpConfBnkTrk".to_string()) .spawn(move || loop { if exit_.load(Ordering::Relaxed) { break; diff --git a/rpc/src/rpc_completed_slots_service.rs b/rpc/src/rpc_completed_slots_service.rs index 919f66a98d9fa4..fb1c20f3199b03 100644 --- a/rpc/src/rpc_completed_slots_service.rs +++ b/rpc/src/rpc_completed_slots_service.rs @@ -24,7 +24,7 @@ impl RpcCompletedSlotsService { exit: Arc, ) -> JoinHandle<()> { Builder::new() - .name("solana-rpc-completed-slots-service".to_string()) + .name("solRpcComplSlot".to_string()) .spawn(move || loop { // received exit signal, shutdown the service if exit.load(Ordering::Relaxed) { diff --git a/rpc/src/rpc_pubsub_service.rs b/rpc/src/rpc_pubsub_service.rs index 4efc2b0aa12683..9b5139a9efb3a6 100644 --- a/rpc/src/rpc_pubsub_service.rs +++ b/rpc/src/rpc_pubsub_service.rs @@ -85,7 +85,7 @@ impl PubSubService { let (trigger, tripwire) = Tripwire::new(); let thread_hdl = Builder::new() - .name("solana-pubsub".to_string()) + .name("solRpcPubSub".to_string()) .spawn(move || { let runtime = tokio::runtime::Builder::new_multi_thread() .worker_threads(pubsub_config.worker_threads) @@ -416,6 +416,6 @@ mod tests { let (_trigger, pubsub_service) = PubSubService::new(PubSubConfig::default(), &subscriptions, pubsub_addr); let thread = pubsub_service.thread_hdl.thread(); - assert_eq!(thread.name().unwrap(), "solana-pubsub"); + assert_eq!(thread.name().unwrap(), "solRpcPubSub"); } } diff --git a/rpc/src/rpc_service.rs b/rpc/src/rpc_service.rs index 02c2198b9763c2..61380e73d2ec38 100644 --- a/rpc/src/rpc_service.rs +++ b/rpc/src/rpc_service.rs @@ -385,7 +385,7 @@ impl JsonRpcService { tokio::runtime::Builder::new_multi_thread() .worker_threads(rpc_threads) .on_thread_start(move || renice_this_thread(rpc_niceness_adj).unwrap()) - .thread_name("sol-rpc-el") + .thread_name("solRpcEl") .enable_all() .build() .expect("Runtime"), @@ -480,7 +480,7 @@ impl JsonRpcService { let (close_handle_sender, close_handle_receiver) = unbounded(); let thread_hdl = Builder::new() - .name("solana-jsonrpc".to_string()) + .name("solJsonRpcSvc".to_string()) .spawn(move || { renice_this_thread(rpc_niceness_adj).unwrap(); @@ -643,7 +643,7 @@ mod tests { Arc::new(AtomicU64::default()), ); let thread = rpc_service.thread_hdl.thread(); - assert_eq!(thread.name().unwrap(), "solana-jsonrpc"); + assert_eq!(thread.name().unwrap(), "solJsonRpcSvc"); assert_eq!( 10_000, diff --git a/rpc/src/rpc_subscriptions.rs b/rpc/src/rpc_subscriptions.rs index bd9fe337460279..9ee8696d7b5cb7 100644 --- a/rpc/src/rpc_subscriptions.rs +++ b/rpc/src/rpc_subscriptions.rs @@ -632,11 +632,11 @@ impl RpcSubscriptions { } else { Some( Builder::new() - .name("solana-rpc-notifications".to_string()) + .name("solRpcNotifier".to_string()) .spawn(move || { let pool = rayon::ThreadPoolBuilder::new() .num_threads(notification_threads) - .thread_name(|i| format!("sol-sub-notif-{}", i)) + .thread_name(|i| format!("solRpcNotify{:02}", i)) .build() .unwrap(); pool.install(|| { diff --git a/rpc/src/transaction_status_service.rs b/rpc/src/transaction_status_service.rs index b9fdfb9bf90b49..4d393a01262b67 100644 --- a/rpc/src/transaction_status_service.rs +++ b/rpc/src/transaction_status_service.rs @@ -37,7 +37,7 @@ impl TransactionStatusService { ) -> Self { let exit = exit.clone(); let thread_hdl = Builder::new() - .name("solana-transaction-status-writer".to_string()) + .name("solTxStatusWrtr".to_string()) .spawn(move || loop { if exit.load(Ordering::Relaxed) { break; diff --git a/runtime/src/accounts_background_service.rs b/runtime/src/accounts_background_service.rs index a0695e3373774e..ecef608357a354 100644 --- a/runtime/src/accounts_background_service.rs +++ b/runtime/src/accounts_background_service.rs @@ -464,7 +464,7 @@ impl AccountsBackgroundService { let mut total_remove_slots_time = 0; let mut last_expiration_check_time = Instant::now(); let t_background = Builder::new() - .name("solana-bg-accounts".to_string()) + .name("solBgAccounts".to_string()) .spawn(move || { let mut stats = StatsManager::new(); let mut last_snapshot_end_time = None; diff --git a/runtime/src/accounts_db.rs b/runtime/src/accounts_db.rs index 7bcb71b13308f1..5036ce9f1e1273 100644 --- a/runtime/src/accounts_db.rs +++ b/runtime/src/accounts_db.rs @@ -1707,7 +1707,7 @@ pub fn make_min_priority_thread_pool() -> ThreadPool { // Use lower thread count to reduce priority. let num_threads = quarter_thread_count(); rayon::ThreadPoolBuilder::new() - .thread_name(|i| format!("solana-cleanup-accounts-{}", i)) + .thread_name(|i| format!("solAccountsLo{:02}", i)) .num_threads(num_threads) .build() .unwrap() @@ -1953,7 +1953,7 @@ impl AccountsDb { file_size: DEFAULT_FILE_SIZE, thread_pool: rayon::ThreadPoolBuilder::new() .num_threads(num_threads) - .thread_name(|i| format!("solana-db-accounts-{}", i)) + .thread_name(|i| format!("solAccounts{:02}", i)) .stack_size(ACCOUNTS_STACK_SIZE) .build() .unwrap(), @@ -2306,7 +2306,7 @@ impl AccountsDb { fn start_background_hasher(&mut self) { let (sender, receiver) = unbounded(); Builder::new() - .name("solana-db-store-hasher-accounts".to_string()) + .name("solDbStoreHashr".to_string()) .spawn(move || { Self::background_hasher(receiver); }) diff --git a/runtime/src/accounts_index_storage.rs b/runtime/src/accounts_index_storage.rs index 16fe3b5c0c7038..155adade447e1c 100644 --- a/runtime/src/accounts_index_storage.rs +++ b/runtime/src/accounts_index_storage.rs @@ -72,7 +72,7 @@ impl BgThreads { // note that using rayon here causes us to exhaust # rayon threads and many tests running in parallel deadlock Builder::new() - .name("solana-idx-flusher".to_string()) + .name(format!("solIdxFlusher{:02}", idx)) .spawn(move || { storage_.background(exit_, in_mem_, can_advance_age); }) diff --git a/runtime/src/bank_client.rs b/runtime/src/bank_client.rs index d9eb457126faab..c1cedf62065ba9 100644 --- a/runtime/src/bank_client.rs +++ b/runtime/src/bank_client.rs @@ -312,7 +312,7 @@ impl BankClient { let thread_bank = bank.clone(); let bank = bank.clone(); Builder::new() - .name("solana-bank-client".to_string()) + .name("solBankClient".to_string()) .spawn(move || Self::run(&thread_bank, transaction_receiver)) .unwrap(); Self { diff --git a/runtime/src/serde_snapshot.rs b/runtime/src/serde_snapshot.rs index e1afe5fec9f4ab..da9407da933094 100644 --- a/runtime/src/serde_snapshot.rs +++ b/runtime/src/serde_snapshot.rs @@ -775,7 +775,7 @@ where let accounts_db = Arc::new(accounts_db); let accounts_db_clone = accounts_db.clone(); let handle = Builder::new() - .name("notify_account_restore_from_snapshot".to_string()) + .name("solNfyAccRestor".to_string()) .spawn(move || { accounts_db_clone.notify_account_restore_from_snapshot(); }) diff --git a/runtime/src/shared_buffer_reader.rs b/runtime/src/shared_buffer_reader.rs index 819b4bcb3f2a01..41c57b0d484ce3 100644 --- a/runtime/src/shared_buffer_reader.rs +++ b/runtime/src/shared_buffer_reader.rs @@ -75,7 +75,7 @@ impl SharedBuffer { let bg_reader_data = instance.bg_reader_data.clone(); let handle = Builder::new() - .name("solana-compressed_file_reader".to_string()) + .name("solCompFileRead".to_string()) .spawn(move || { // importantly, this thread does NOT hold a refcount on the arc of 'instance' bg_reader_data.read_entire_file_in_bg(reader, total_buffer_budget, chunk_size); diff --git a/runtime/src/verify_accounts_hash_in_background.rs b/runtime/src/verify_accounts_hash_in_background.rs index 90266e36a61a94..63a7eeed97495b 100644 --- a/runtime/src/verify_accounts_hash_in_background.rs +++ b/runtime/src/verify_accounts_hash_in_background.rs @@ -117,7 +117,7 @@ pub(crate) mod tests { let verify_ = Arc::clone(verify); verify.start(|| { Builder::new() - .name("solana-bg-hash-verifier".to_string()) + .name("solBgHashVerfy".to_string()) .spawn(move || { // should have been marked not complete before thread started assert!(!verify_.check_complete()); diff --git a/send-transaction-service/src/send_transaction_service.rs b/send-transaction-service/src/send_transaction_service.rs index 9195aeb0a7b4b7..97b29ee82e542b 100644 --- a/send-transaction-service/src/send_transaction_service.rs +++ b/send-transaction-service/src/send_transaction_service.rs @@ -410,7 +410,7 @@ impl SendTransactionService { config ); Builder::new() - .name("send-tx-receive".to_string()) + .name("solStxReceive".to_string()) .spawn(move || loop { let recv_timeout_ms = config.batch_send_rate_ms; let stats = &stats_report.stats; @@ -510,7 +510,7 @@ impl SendTransactionService { config ); Builder::new() - .name("send-tx-retry".to_string()) + .name("solStxRetry".to_string()) .spawn(move || loop { let retry_interval_ms = config.retry_rate_ms; let stats = &stats_report.stats; diff --git a/streamer/src/quic.rs b/streamer/src/quic.rs index bfc445444a44b5..a172fc60053508 100644 --- a/streamer/src/quic.rs +++ b/streamer/src/quic.rs @@ -303,11 +303,14 @@ pub fn spawn_server( stats, ) }?; - let handle = thread::spawn(move || { - if let Err(e) = runtime.block_on(task) { - warn!("error from runtime.block_on: {:?}", e); - } - }); + let handle = thread::Builder::new() + .name("solQuicServer".into()) + .spawn(move || { + if let Err(e) = runtime.block_on(task) { + warn!("error from runtime.block_on: {:?}", e); + } + }) + .unwrap(); Ok(handle) } diff --git a/streamer/src/streamer.rs b/streamer/src/streamer.rs index 4d8ee2d1c0a924..7e60f7c8fbaa7b 100644 --- a/streamer/src/streamer.rs +++ b/streamer/src/streamer.rs @@ -166,7 +166,7 @@ pub fn receiver( let res = socket.set_read_timeout(Some(Duration::new(1, 0))); assert!(res.is_ok(), "streamer::receiver set_read_timeout error"); Builder::new() - .name("solana-receiver".to_string()) + .name("solReceiver".to_string()) .spawn(move || { let _ = recv_loop( &socket, @@ -370,7 +370,7 @@ pub fn responder( stats_reporter_sender: Option>>, ) -> JoinHandle<()> { Builder::new() - .name(format!("solana-responder-{}", name)) + .name(format!("solRspndr{}", name)) .spawn(move || { let mut errors = 0; let mut last_error = None; @@ -475,7 +475,7 @@ mod test { let t_responder = { let (s_responder, r_responder) = unbounded(); let t_responder = responder( - "streamer_send_test", + "SendTest", Arc::new(send), r_responder, SocketAddrSpace::Unspecified, diff --git a/validator/src/admin_rpc_service.rs b/validator/src/admin_rpc_service.rs index 2c32cc8e24a6fd..f226b5853522e8 100644 --- a/validator/src/admin_rpc_service.rs +++ b/validator/src/admin_rpc_service.rs @@ -186,22 +186,25 @@ impl AdminRpc for AdminRpcImpl { fn exit(&self, meta: Self::Metadata) -> Result<()> { debug!("exit admin rpc request received"); - thread::spawn(move || { - // Delay exit signal until this RPC request completes, otherwise the caller of `exit` might - // receive a confusing error as the validator shuts down before a response is sent back. - thread::sleep(Duration::from_millis(100)); - - warn!("validator exit requested"); - meta.validator_exit.write().unwrap().exit(); - - // TODO: Debug why Exit doesn't always cause the validator to fully exit - // (rocksdb background processing or some other stuck thread perhaps?). - // - // If the process is still alive after five seconds, exit harder - thread::sleep(Duration::from_secs(5)); - warn!("validator exit timeout"); - std::process::exit(0); - }); + thread::Builder::new() + .name("solProcessExit".into()) + .spawn(move || { + // Delay exit signal until this RPC request completes, otherwise the caller of `exit` might + // receive a confusing error as the validator shuts down before a response is sent back. + thread::sleep(Duration::from_millis(100)); + + warn!("validator exit requested"); + meta.validator_exit.write().unwrap().exit(); + + // TODO: Debug why Exit doesn't always cause the validator to fully exit + // (rocksdb background processing or some other stuck thread perhaps?). + // + // If the process is still alive after five seconds, exit harder + thread::sleep(Duration::from_secs(5)); + warn!("validator exit timeout"); + std::process::exit(0); + }) + .unwrap(); Ok(()) } @@ -351,14 +354,14 @@ pub fn run(ledger_path: &Path, metadata: AdminRpcRequestMetadata) { let admin_rpc_path = admin_rpc_path(ledger_path); let event_loop = tokio::runtime::Builder::new_multi_thread() - .thread_name("sol-adminrpc-el") + .thread_name("solAdminRpcEl") .worker_threads(3) // Three still seems like a lot, and better than the default of available core count .enable_all() .build() .unwrap(); Builder::new() - .name("solana-adminrpc".to_string()) + .name("solAdminRpc".to_string()) .spawn(move || { let mut io = MetaIoHandler::default(); io.extend_with(AdminRpcImpl.to_delegate()); diff --git a/validator/src/lib.rs b/validator/src/lib.rs index ba1efd3f44ca14..913ac2fa3034d2 100644 --- a/validator/src/lib.rs +++ b/validator/src/lib.rs @@ -65,15 +65,20 @@ pub fn redirect_stderr_to_file(logfile: Option) -> Option solana_logger::setup_with_default(filter); redirect_stderr(&logfile); - Some(std::thread::spawn(move || { - for signal in signals.forever() { - info!( - "received SIGUSR1 ({}), reopening log file: {:?}", - signal, logfile - ); - redirect_stderr(&logfile); - } - })) + Some( + std::thread::Builder::new() + .name("solSigUsr1".into()) + .spawn(move || { + for signal in signals.forever() { + info!( + "received SIGUSR1 ({}), reopening log file: {:?}", + signal, logfile + ); + redirect_stderr(&logfile); + } + }) + .unwrap(), + ) } #[cfg(not(unix))] { From 8d15827b03ea6249794342ff0f191d223e3a27cd Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Sat, 20 Aug 2022 21:36:11 +0000 Subject: [PATCH 048/465] patches metrics for invalid cached vote/stake accounts (backport #27266) (#27281) patches metrics for invalid cached vote/stake accounts (#27266) patches invalid cached vote/stake accounts metrics Invalid cached vote accounts is overcounting actual mismatches, and invalid cached stake accounts is undercounting. (cherry picked from commit 544a957ad77644ff5f19554e7ca86ae0a12eda42) Co-authored-by: behzad nouri --- runtime/src/bank.rs | 70 ++++++++++++++++--------------------- runtime/src/vote_account.rs | 12 +++---- 2 files changed, 36 insertions(+), 46 deletions(-) diff --git a/runtime/src/bank.rs b/runtime/src/bank.rs index bf60bf14d407ea..8b93c94453d2ae 100644 --- a/runtime/src/bank.rs +++ b/runtime/src/bank.rs @@ -2705,13 +2705,11 @@ impl Bank { "distributed inflation: {} (rounded from: {})", validator_rewards_paid, validator_rewards ); - // TODO: staked_nodes forces an eager stakes calculation. remove it! - let (num_stake_accounts, num_vote_accounts, num_staked_nodes) = { + let (num_stake_accounts, num_vote_accounts) = { let stakes = self.stakes_cache.stakes(); ( stakes.stake_delegations().len(), stakes.vote_accounts().len(), - stakes.staked_nodes().len(), ) }; self.capitalization @@ -2738,7 +2736,6 @@ impl Bank { ("post_capitalization", self.capitalization(), i64), ("num_stake_accounts", num_stake_accounts as i64, i64), ("num_vote_accounts", num_vote_accounts as i64, i64), - ("num_staked_nodes", num_staked_nodes as i64, i64) ); } @@ -2776,9 +2773,26 @@ impl Bank { None => { invalid_stake_keys .insert(*stake_pubkey, InvalidCacheEntryReason::Missing); + invalid_cached_stake_accounts.fetch_add(1, Relaxed); return; } }; + if cached_stake_account.account() != &stake_account { + invalid_cached_stake_accounts.fetch_add(1, Relaxed); + let cached_stake_account = cached_stake_account.account(); + if cached_stake_account.lamports() == stake_account.lamports() + && cached_stake_account.data() == stake_account.data() + && cached_stake_account.owner() == stake_account.owner() + && cached_stake_account.executable() == stake_account.executable() + { + invalid_cached_stake_accounts_rent_epoch.fetch_add(1, Relaxed); + } else { + debug!( + "cached stake account mismatch: {}: {:?}, {:?}", + stake_pubkey, stake_account, cached_stake_account + ); + } + } let stake_account = match StakeAccount::<()>::try_from(stake_account) { Ok(stake_account) => stake_account, Err(stake_account::Error::InvalidOwner { .. }) => { @@ -2801,33 +2815,6 @@ impl Bank { return; } }; - if cached_stake_account != &stake_account { - invalid_cached_stake_accounts.fetch_add(1, Relaxed); - let mut cached_account = cached_stake_account.account().clone(); - // We could have collected rent on the loaded account already in this new epoch (we could be at partition_index 12, for example). - // So, we may need to adjust the rent_epoch of the cached account. So, update rent_epoch and compare just the accounts. - ExpectedRentCollection::maybe_update_rent_epoch_on_load( - &mut cached_account, - &SlotInfoInEpoch::new_small(self.slot()), - &SlotInfoInEpoch::new_small(self.slot()), - self.epoch_schedule(), - self.rent_collector(), - stake_pubkey, - &self.rewrites_skipped_this_slot, - ); - if &cached_account != stake_account.account() { - info!( - "cached stake account mismatch: {}: {:?}, {:?}", - stake_pubkey, - cached_account, - stake_account.account() - ); - } else { - // track how many of 'invalid_cached_stake_accounts' were due to rent_epoch changes - // subtract these to find real invalid cached accounts - invalid_cached_stake_accounts_rent_epoch.fetch_add(1, Relaxed); - } - } let stake_delegation = (*stake_pubkey, stake_account); let mut vote_delegations = if let Some(vote_delegations) = vote_with_stake_delegations_map.get_mut(vote_pubkey) @@ -2837,16 +2824,12 @@ impl Bank { let cached_vote_account = cached_vote_accounts.get(vote_pubkey); let vote_account = match self.get_account_with_fixed_root(vote_pubkey) { Some(vote_account) => { - match cached_vote_account { - Some(cached_vote_account) - if cached_vote_account == &vote_account => {} - _ => { - invalid_cached_vote_accounts.fetch_add(1, Relaxed); - } - }; if vote_account.owner() != &solana_vote_program::id() { invalid_vote_keys .insert(*vote_pubkey, InvalidCacheEntryReason::WrongOwner); + if cached_vote_account.is_some() { + invalid_cached_vote_accounts.fetch_add(1, Relaxed); + } return; } vote_account @@ -2868,9 +2851,18 @@ impl Bank { } else { invalid_vote_keys .insert(*vote_pubkey, InvalidCacheEntryReason::BadState); + if cached_vote_account.is_some() { + invalid_cached_vote_accounts.fetch_add(1, Relaxed); + } return; }; - + match cached_vote_account { + Some(cached_vote_account) + if cached_vote_account.account() == &vote_account => {} + _ => { + invalid_cached_vote_accounts.fetch_add(1, Relaxed); + } + }; vote_with_stake_delegations_map .entry(*vote_pubkey) .or_insert_with(|| VoteWithStakeDelegations { diff --git a/runtime/src/vote_account.rs b/runtime/src/vote_account.rs index 1feefb6ffaee46..c37dd7b2487c4b 100644 --- a/runtime/src/vote_account.rs +++ b/runtime/src/vote_account.rs @@ -3,7 +3,7 @@ use { once_cell::sync::OnceCell, serde::ser::{Serialize, Serializer}, solana_sdk::{ - account::{accounts_equal, AccountSharedData, ReadableAccount}, + account::{AccountSharedData, ReadableAccount}, instruction::InstructionError, pubkey::Pubkey, }, @@ -53,6 +53,10 @@ pub struct VoteAccounts { } impl VoteAccount { + pub(crate) fn account(&self) -> &AccountSharedData { + &self.0.account + } + pub(crate) fn lamports(&self) -> u64 { self.0.account.lamports() } @@ -255,12 +259,6 @@ impl PartialEq for VoteAccountInner { } } -impl PartialEq for VoteAccount { - fn eq(&self, other: &AccountSharedData) -> bool { - accounts_equal(&self.0.account, other) - } -} - impl Default for VoteAccounts { fn default() -> Self { Self { From c8150f3c18e13a5b6e0fff7df1f41afa9b95154f Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Mon, 22 Aug 2022 13:18:33 +0000 Subject: [PATCH 049/465] Update `solana deploy` subcommand to warn non-upgradable (backport #27264) (#27291) Update `solana deploy` subcommand to warn non-upgradable (#27264) Update subcommand text to warn deploy deprecated Update the about text for `solana deploy` to warn this is only for non-upgradeable deploys. Fixes #27228 (cherry picked from commit 65070dfd2edcb7e94968896f56ff09395a12a000) Co-authored-by: Chris Coudron --- cli/src/program.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cli/src/program.rs b/cli/src/program.rs index 1b3431968c9b81..cc4285e9e6b3df 100644 --- a/cli/src/program.rs +++ b/cli/src/program.rs @@ -131,7 +131,7 @@ impl ProgramSubCommands for App<'_, '_> { ) .subcommand( SubCommand::with_name("deploy") - .about("Deploy a program") + .about("Deploy an upgradeable program") .arg( Arg::with_name("program_location") .index(1) @@ -391,7 +391,7 @@ impl ProgramSubCommands for App<'_, '_> { ) .subcommand( SubCommand::with_name("deploy") - .about("Deploy a program") + .about("Deploy a non-upgradeable program. Use `solana program deploy` instead to deploy upgradeable programs") .setting(AppSettings::Hidden) .arg( Arg::with_name("program_location") From 8b9c378a9e2bac4f9b7eab97ef85611796d57f8d Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Mon, 22 Aug 2022 15:35:43 +0000 Subject: [PATCH 050/465] checks that cached vote accounts are consistent with accounts-db (backport #27286) (#27292) checks that cached vote accounts are consistent with accounts-db (#27286) The commit adds sanity checks that when loading a bank from snapshots: * cached vote accounts are consistent with accounts-db. * all valid vote-accounts referenced in stake delegations are already cached. (cherry picked from commit 7fda0287cb4aae15c07c18691419a0676d816281) Co-authored-by: behzad nouri --- runtime/src/stakes.rs | 50 ++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 49 insertions(+), 1 deletion(-) diff --git a/runtime/src/stakes.rs b/runtime/src/stakes.rs index 1eefe07c3edc43..e4fb84df62327d 100644 --- a/runtime/src/stakes.rs +++ b/runtime/src/stakes.rs @@ -8,6 +8,7 @@ use { }, dashmap::DashMap, im::HashMap as ImHashMap, + log::error, num_derive::ToPrimitive, num_traits::ToPrimitive, rayon::{prelude::*, ThreadPool}, @@ -19,7 +20,7 @@ use { }, solana_vote_program::vote_state::VoteState, std::{ - collections::HashMap, + collections::{HashMap, HashSet}, ops::Add, sync::{Arc, RwLock, RwLockReadGuard}, }, @@ -34,6 +35,12 @@ pub enum Error { InvalidStakeAccount(#[from] stake_account::Error), #[error("Stake account not found: {0}")] StakeAccountNotFound(Pubkey), + #[error("Vote account mismatch: {0}")] + VoteAccountMismatch(Pubkey), + #[error("Vote account not cached: {0}")] + VoteAccountNotCached(Pubkey), + #[error("Vote account not found: {0}")] + VoteAccountNotFound(Pubkey), } #[derive(Debug, Clone, PartialEq, Eq, ToPrimitive)] @@ -222,6 +229,47 @@ impl Stakes { Err(Error::InvalidDelegation(*pubkey)) } }); + // Assert that cached vote accounts are consistent with accounts-db. + for (pubkey, vote_account) in stakes.vote_accounts.iter() { + let account = match get_account(pubkey) { + None => return Err(Error::VoteAccountNotFound(*pubkey)), + Some(account) => account, + }; + // Ignoring rent_epoch until the feature for + // preserve_rent_epoch_for_rent_exempt_accounts is activated. + let vote_account = vote_account.account(); + if vote_account.lamports() != account.lamports() + || vote_account.owner() != account.owner() + || vote_account.executable() != account.executable() + || vote_account.data() != account.data() + { + error!( + "vote account mismatch: {}, {:?}, {:?}", + pubkey, vote_account, account + ); + return Err(Error::VoteAccountMismatch(*pubkey)); + } + } + // Assert that all valid vote-accounts referenced in + // stake delegations are already cached. + let voter_pubkeys: HashSet = stakes + .stake_delegations + .values() + .map(|delegation| delegation.voter_pubkey) + .filter(|voter_pubkey| stakes.vote_accounts.get(voter_pubkey).is_none()) + .collect(); + for pubkey in voter_pubkeys { + let account = match get_account(&pubkey) { + None => continue, + Some(account) => account, + }; + if VoteState::is_correct_size_and_initialized(account.data()) + && VoteAccount::try_from(account.clone()).is_ok() + { + error!("vote account not cached: {}, {:?}", pubkey, account); + return Err(Error::VoteAccountNotCached(pubkey)); + } + } Ok(Self { vote_accounts: stakes.vote_accounts.clone(), stake_delegations: stake_delegations.collect::>()?, From 1637ec1ac8bd4bbb86ad5931af742e104785f5fe Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Mon, 22 Aug 2022 15:37:37 +0000 Subject: [PATCH 051/465] banking stage: actually aggregate tracer packet stats (backport #27118) (#27270) banking stage: actually aggregate tracer packet stats (#27118) * aggregated_tracer_packet_stats_option was alwasys None * Actually accumulate tracer packet stats (cherry picked from commit eb06bb61e83570d33b787c868c960377ec5cb1da) Co-authored-by: apfitzge --- core/src/banking_stage.rs | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/core/src/banking_stage.rs b/core/src/banking_stage.rs index e663adb87f798d..db9eba5861ab6e 100644 --- a/core/src/banking_stage.rs +++ b/core/src/banking_stage.rs @@ -1998,26 +1998,26 @@ impl BankingStage { packet_count_upperbound: usize, ) -> Result<(Vec, Option), RecvTimeoutError> { let start = Instant::now(); - let mut aggregated_tracer_packet_stats_option: Option = None; - let (mut packet_batches, new_tracer_packet_stats_option) = + let (mut packet_batches, mut aggregated_tracer_packet_stats_option) = verified_receiver.recv_timeout(recv_timeout)?; - if let Some(new_tracer_packet_stats) = &new_tracer_packet_stats_option { - if let Some(aggregated_tracer_packet_stats) = &mut aggregated_tracer_packet_stats_option - { - aggregated_tracer_packet_stats.aggregate(new_tracer_packet_stats); - } else { - aggregated_tracer_packet_stats_option = new_tracer_packet_stats_option; - } - } - let mut num_packets_received: usize = packet_batches.iter().map(|batch| batch.len()).sum(); - while let Ok((packet_batch, _tracer_packet_stats_option)) = verified_receiver.try_recv() { + while let Ok((packet_batch, tracer_packet_stats_option)) = verified_receiver.try_recv() { trace!("got more packet batches in banking stage"); let (packets_received, packet_count_overflowed) = num_packets_received .overflowing_add(packet_batch.iter().map(|batch| batch.len()).sum()); packet_batches.extend(packet_batch); + if let Some(tracer_packet_stats) = &tracer_packet_stats_option { + if let Some(aggregated_tracer_packet_stats) = + &mut aggregated_tracer_packet_stats_option + { + aggregated_tracer_packet_stats.aggregate(tracer_packet_stats); + } else { + aggregated_tracer_packet_stats_option = tracer_packet_stats_option; + } + } + // Spend any leftover receive time budget to greedily receive more packet batches, // until the upperbound of the packet count is reached. if start.elapsed() >= recv_timeout From 94c454a09d99e68d9bb8d807eccb5775b3061cec Mon Sep 17 00:00:00 2001 From: Michael Vines Date: Mon, 22 Aug 2022 08:06:06 -0700 Subject: [PATCH 052/465] Assign custom names to the Rayon global thread pool (cherry picked from commit 7bdeea10add8cc343c1982bb56cab7f894914f3c) --- core/src/validator.rs | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/core/src/validator.rs b/core/src/validator.rs index 7fb4827bf0be70..fa354f3f758af5 100644 --- a/core/src/validator.rs +++ b/core/src/validator.rs @@ -436,6 +436,14 @@ impl Validator { info!("entrypoint: {:?}", cluster_entrypoint); } + if rayon::ThreadPoolBuilder::new() + .thread_name(|ix| format!("solRayonGlob{:02}", ix)) + .build_global() + .is_err() + { + warn!("Rayon global thread pool already initialized"); + } + if solana_perf::perf_libs::api().is_some() { info!("Initializing sigverify, this could take a while..."); } else { From b1d5d6d3cf0122c9f039f383eb085ab048c6525f Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Mon, 22 Aug 2022 20:48:34 +0000 Subject: [PATCH 053/465] Delete files older than the lowest_cleanup_slot in LedgerCleanupService::cleanup_ledger (backport #26651) (#27304) Delete files older than the lowest_cleanup_slot in LedgerCleanupService::cleanup_ledger (#26651) #### Problem LedgerCleanupService requires compactions to propagate & digest range-delete tombstones to eventually reclaim disk space. #### Summary of Changes This PR makes LedgerCleanupService::cleanup_ledger delete any file whose slot-range is older than the lowest_cleanup_slot. This allows us to reclaim disk space more often with fewer IOps. Experimental results on mainnet validators show that the PR can effectively reduce 33% to 40% ledger disk size. (cherry picked from commit 99ef2184cc3e428e1e09a4493bf72cacc060d6aa) Co-authored-by: Yueh-Hsuan Chiang <93241502+yhchiang-sol@users.noreply.github.com> --- core/src/ledger_cleanup_service.rs | 34 +++----- ledger/src/blockstore/blockstore_purge.rs | 94 ++++++++++++++++++++++- ledger/src/blockstore_db.rs | 21 +++++ 3 files changed, 126 insertions(+), 23 deletions(-) diff --git a/core/src/ledger_cleanup_service.rs b/core/src/ledger_cleanup_service.rs index 89b2889d03a6df..160b8721f45b6e 100644 --- a/core/src/ledger_cleanup_service.rs +++ b/core/src/ledger_cleanup_service.rs @@ -124,28 +124,25 @@ impl LedgerCleanupService { /// A helper function to `cleanup_ledger` which returns a tuple of the /// following four elements suggesting whether to clean up the ledger: /// - /// Return value (bool, Slot, Slot, u64): + /// Return value (bool, Slot, u64): /// - `slots_to_clean` (bool): a boolean value indicating whether there /// are any slots to clean. If true, then `cleanup_ledger` function /// will then proceed with the ledger cleanup. - /// - `first_slot_to_purge` (Slot): the first slot to purge. - /// - `lowest_slot_to_puerge` (Slot): the lowest slot to purge. Together - /// with `first_slot_to_purge`, the two Slot values represent the - /// range of the clean up. + /// - `lowest_slot_to_purge` (Slot): the lowest slot to purge. Any + /// slot which is older or equal to `lowest_slot_to_purge` will be + /// cleaned up. /// - `total_shreds` (u64): the total estimated number of shreds before the /// `root`. fn find_slots_to_clean( blockstore: &Arc, root: Slot, max_ledger_shreds: u64, - ) -> (bool, Slot, Slot, u64) { + ) -> (bool, Slot, u64) { let mut total_slots = Vec::new(); let mut iterate_time = Measure::start("iterate_time"); let mut total_shreds = 0; - let mut first_slot = 0; for (i, (slot, meta)) in blockstore.slot_meta_iterator(0).unwrap().enumerate() { if i == 0 { - first_slot = slot; debug!("purge: searching from slot: {}", slot); } // Not exact since non-full slots will have holes @@ -157,15 +154,14 @@ impl LedgerCleanupService { } iterate_time.stop(); info!( - "first_slot={} total_slots={} total_shreds={} max_ledger_shreds={}, {}", - first_slot, + "total_slots={} total_shreds={} max_ledger_shreds={}, {}", total_slots.len(), total_shreds, max_ledger_shreds, iterate_time ); if (total_shreds as u64) < max_ledger_shreds { - return (false, 0, 0, total_shreds); + return (false, 0, total_shreds); } let mut num_shreds_to_clean = 0; let mut lowest_cleanup_slot = total_slots[0].0; @@ -177,7 +173,7 @@ impl LedgerCleanupService { } } - (true, first_slot, lowest_cleanup_slot, total_shreds) + (true, lowest_cleanup_slot, total_shreds) } fn receive_new_roots(new_root_receiver: &Receiver) -> Result { @@ -233,7 +229,7 @@ impl LedgerCleanupService { *last_purge_slot = root; - let (slots_to_clean, purge_first_slot, lowest_cleanup_slot, total_shreds) = + let (slots_to_clean, lowest_cleanup_slot, total_shreds) = Self::find_slots_to_clean(blockstore, root, max_ledger_shreds); if slots_to_clean { @@ -248,18 +244,12 @@ impl LedgerCleanupService { *blockstore.lowest_cleanup_slot.write().unwrap() = lowest_cleanup_slot; slot_update_time.stop(); - info!( - "purging data from slots {} to {}", - purge_first_slot, lowest_cleanup_slot - ); + info!("purging data older than {}", lowest_cleanup_slot); let mut purge_time = Measure::start("purge_slots"); - blockstore.purge_slots( - purge_first_slot, - lowest_cleanup_slot, - PurgeType::CompactionFilter, - ); + // purge any slots older than lowest_cleanup_slot. + blockstore.purge_slots(0, lowest_cleanup_slot, PurgeType::CompactionFilter); // Update only after purge operation. // Safety: This value can be used by compaction_filters shared via Arc. // Compactions are async and run as a multi-threaded background job. However, this diff --git a/ledger/src/blockstore/blockstore_purge.rs b/ledger/src/blockstore/blockstore_purge.rs index 640b338f2c2cb2..1e79e4b81288e1 100644 --- a/ledger/src/blockstore/blockstore_purge.rs +++ b/ledger/src/blockstore/blockstore_purge.rs @@ -4,6 +4,7 @@ use {super::*, solana_sdk::message::AccountKeys, std::time::Instant}; pub struct PurgeStats { delete_range: u64, write_batch: u64, + delete_files_in_range: u64, } #[derive(Clone, Copy)] @@ -46,7 +47,12 @@ impl Blockstore { ("from_slot", from_slot as i64, i64), ("to_slot", to_slot as i64, i64), ("delete_range_us", purge_stats.delete_range as i64, i64), - ("write_batch_us", purge_stats.write_batch as i64, i64) + ("write_batch_us", purge_stats.write_batch as i64, i64), + ( + "delete_files_in_range_us", + purge_stats.write_batch as i64, + i64 + ) ); if let Err(e) = purge_result { error!( @@ -141,6 +147,9 @@ impl Blockstore { /// A helper function to `purge_slots` that executes the ledger clean up /// from `from_slot` to `to_slot`. + /// + /// When `from_slot` is 0, any sst-file with a key-range completely older + /// than `to_slot` will also be deleted. pub(crate) fn run_purge_with_stats( &self, from_slot: Slot, @@ -239,6 +248,7 @@ impl Blockstore { } } delete_range_timer.stop(); + let mut write_timer = Measure::start("write_batch"); if let Err(e) = self.db.write(write_batch) { error!( @@ -248,8 +258,28 @@ impl Blockstore { return Err(e); } write_timer.stop(); + + let mut purge_files_in_range_timer = Measure::start("delete_file_in_range"); + // purge_files_in_range delete any files whose slot range is within + // [from_slot, to_slot]. When from_slot is 0, it is safe to run + // purge_files_in_range because if purge_files_in_range deletes any + // sst file that contains any range-deletion tombstone, the deletion + // range of that tombstone will be completely covered by the new + // range-delete tombstone (0, to_slot) issued above. + // + // On the other hand, purge_files_in_range is more effective and + // efficient than the compaction filter (which runs key-by-key) + // because all the sst files that have key range below to_slot + // can be deleted immediately. + if columns_purged && from_slot == 0 { + self.purge_files_in_range(from_slot, to_slot); + } + purge_files_in_range_timer.stop(); + purge_stats.delete_range += delete_range_timer.as_us(); purge_stats.write_batch += write_timer.as_us(); + purge_stats.delete_files_in_range += purge_files_in_range_timer.as_us(); + // only drop w_active_transaction_status_index after we do db.write(write_batch); // otherwise, readers might be confused with inconsistent state between // self.active_transaction_status_index and RockDb's TransactionStatusIndex contents @@ -257,6 +287,68 @@ impl Blockstore { Ok(columns_purged) } + fn purge_files_in_range(&self, from_slot: Slot, to_slot: Slot) -> bool { + self.db + .delete_file_in_range_cf::(from_slot, to_slot) + .is_ok() + & self + .db + .delete_file_in_range_cf::(from_slot, to_slot) + .is_ok() + & self + .db + .delete_file_in_range_cf::(from_slot, to_slot) + .is_ok() + & self + .db + .delete_file_in_range_cf::(from_slot, to_slot) + .is_ok() + & self + .db + .delete_file_in_range_cf::(from_slot, to_slot) + .is_ok() + & self + .db + .delete_file_in_range_cf::(from_slot, to_slot) + .is_ok() + & self + .db + .delete_file_in_range_cf::(from_slot, to_slot) + .is_ok() + & self + .db + .delete_file_in_range_cf::(from_slot, to_slot) + .is_ok() + & self + .db + .delete_file_in_range_cf::(from_slot, to_slot) + .is_ok() + & self + .db + .delete_file_in_range_cf::(from_slot, to_slot) + .is_ok() + & self + .db + .delete_file_in_range_cf::(from_slot, to_slot) + .is_ok() + & self + .db + .delete_file_in_range_cf::(from_slot, to_slot) + .is_ok() + & self + .db + .delete_file_in_range_cf::(from_slot, to_slot) + .is_ok() + & self + .db + .delete_file_in_range_cf::(from_slot, to_slot) + .is_ok() + & self + .db + .delete_file_in_range_cf::(from_slot, to_slot) + .is_ok() + } + pub fn compact_storage(&self, from_slot: Slot, to_slot: Slot) -> Result { if self.no_compaction { info!("compact_storage: compaction disabled"); diff --git a/ledger/src/blockstore_db.rs b/ledger/src/blockstore_db.rs index 2e3ec3ba944cc5..ed5b4ab9001f1b 100644 --- a/ledger/src/blockstore_db.rs +++ b/ledger/src/blockstore_db.rs @@ -455,6 +455,16 @@ impl Rocks { Ok(()) } + fn delete_file_in_range_cf( + &self, + cf: &ColumnFamily, + from_key: &[u8], + to_key: &[u8], + ) -> Result<()> { + self.db.delete_file_in_range_cf(cf, from_key, to_key)?; + Ok(()) + } + fn iterator_cf(&self, cf: &ColumnFamily, iterator_mode: IteratorMode) -> DBIterator where C: Column, @@ -1120,6 +1130,17 @@ impl Database { batch.delete_range_cf::(cf, from_index, to_index) } + pub fn delete_file_in_range_cf(&self, from: Slot, to: Slot) -> Result<()> + where + C: Column + ColumnName, + { + self.backend.delete_file_in_range_cf( + self.cf_handle::(), + &C::key(C::as_index(from)), + &C::key(C::as_index(to)), + ) + } + pub fn is_primary_access(&self) -> bool { self.backend.is_primary_access() } From 2fe54b0b116177d81b56520474384b132528c6ad Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Tue, 23 Aug 2022 05:08:08 +0000 Subject: [PATCH 054/465] Add documentation for JSON parsing (backport #27268) (#27324) Add documentation for JSON parsing (#27268) * Add documentation about json parsing * Link jsonParsed to info section * Include version information (cherry picked from commit 322fbc1406a814e22d794ac025802b86f283e87c) Co-authored-by: Tyera Eulberg --- docs/src/developing/clients/jsonrpc-api.md | 48 ++++++++++++++++------ 1 file changed, 35 insertions(+), 13 deletions(-) diff --git a/docs/src/developing/clients/jsonrpc-api.md b/docs/src/developing/clients/jsonrpc-api.md index 09f2517c469555..6e9f6d7c689816 100644 --- a/docs/src/developing/clients/jsonrpc-api.md +++ b/docs/src/developing/clients/jsonrpc-api.md @@ -205,6 +205,28 @@ Many methods that take a commitment parameter return an RpcResponse JSON object - `context` : An RpcResponseContext JSON structure including a `slot` field at which the operation was evaluated. - `value` : The value returned by the operation itself. +#### Parsed Responses + +Some methods support an `encoding` parameter, and can return account or +instruction data in parsed JSON format if `"encoding":"jsonParsed"` is requested +and the node has a parser for the owning program. Solana nodes currently support +JSON parsing for the following native and SPL programs: + +| Program | Account State | Instructions | +| --- | --- | --- | +| Address Lookup | v1.12.0 | | +| BPF Loader | n/a | stable | +| BPF Upgradeable Loader | stable | stable | +| Config | X | | +| SPL Associated Token Account | n/a | stable | +| SPL Memo | n/a | stable | +| SPL Token | stable | stable | +| SPL Token 2022 | stable | stable | +| Stake | stable | stable | +| Vote | stable | stable | + +The list of account parsers can be found [here](https://github.com/solana-labs/solana/blob/master/account-decoder/src/parse_account_data.rs), and instruction parsers [here](https://github.com/solana-labs/solana/blob/master/transaction-status/src/parse_instruction.rs). + ## Health Check Although not a JSON RPC API, a `GET /health` at the RPC HTTP Endpoint provides a @@ -233,7 +255,7 @@ Returns all information associated with the account of provided Pubkey "base58" is limited to Account data of less than 129 bytes. "base64" will return base64 encoded data for Account data of any size. "base64+zstd" compresses the Account data using [Zstandard](https://facebook.github.io/zstd/) and base64-encodes the result. - "jsonParsed" encoding attempts to use program-specific state parsers to return more human-readable and explicit account state data. If "jsonParsed" is requested but a parser cannot be found, the field falls back to "base64" encoding, detectable when the `data` field is type ``. + ["jsonParsed" encoding](jsonrpc-api.md#parsed-responses) attempts to use program-specific state parsers to return more human-readable and explicit account state data. If "jsonParsed" is requested but a parser cannot be found, the field falls back to "base64" encoding, detectable when the `data` field is type ``. - (optional) `dataSlice: ` - limit the returned account data using the provided `offset: ` and `length: ` fields; only available for "base58", "base64" or "base64+zstd" encodings. - (optional) `minContextSlot: ` - set the minimum slot that the request can be evaluated at. @@ -388,7 +410,7 @@ Returns identity and transaction information about a confirmed block in the ledg - `` - slot, as u64 integer - `` - (optional) Configuration object containing the following optional fields: - (optional) `encoding: ` - encoding for each returned Transaction, either "json", "jsonParsed", "base58" (_slow_), "base64". If parameter not provided, the default encoding is "json". - "jsonParsed" encoding attempts to use program-specific instruction parsers to return more human-readable and explicit data in the `transaction.message.instructions` list. If "jsonParsed" is requested but a parser cannot be found, the instruction falls back to regular JSON encoding (`accounts`, `data`, and `programIdIndex` fields). + ["jsonParsed" encoding](jsonrpc-api.md#parsed-responses) attempts to use program-specific instruction parsers to return more human-readable and explicit data in the `transaction.message.instructions` list. If "jsonParsed" is requested but a parser cannot be found, the instruction falls back to regular JSON encoding (`accounts`, `data`, and `programIdIndex` fields). - (optional) `transactionDetails: ` - level of transaction detail to return, either "full", "signatures", or "none". If parameter not provided, the default detail level is "full". - (optional) `rewards: bool` - whether to populate the `rewards` array. If parameter not provided, the default includes rewards. - (optional) [Commitment](jsonrpc-api.md#configuring-state-commitment); "processed" is not supported. If parameter not provided, the default is "finalized". @@ -1753,7 +1775,7 @@ Returns the account information for a list of Pubkeys. "base58" is limited to Account data of less than 129 bytes. "base64" will return base64 encoded data for Account data of any size. "base64+zstd" compresses the Account data using [Zstandard](https://facebook.github.io/zstd/) and base64-encodes the result. - "jsonParsed" encoding attempts to use program-specific state parsers to return more human-readable and explicit account state data. If "jsonParsed" is requested but a parser cannot be found, the field falls back to "base64" encoding, detectable when the `data` field is type ``. + ["jsonParsed" encoding](jsonrpc-api.md#parsed-responses) attempts to use program-specific state parsers to return more human-readable and explicit account state data. If "jsonParsed" is requested but a parser cannot be found, the field falls back to "base64" encoding, detectable when the `data` field is type ``. - (optional) `dataSlice: ` - limit the returned account data using the provided `offset: ` and `length: ` fields; only available for "base58", "base64" or "base64+zstd" encodings. - (optional) `minContextSlot: ` - set the minimum slot that the request can be evaluated at. @@ -1896,7 +1918,7 @@ Returns all accounts owned by the provided program Pubkey "base58" is limited to Account data of less than 129 bytes. "base64" will return base64 encoded data for Account data of any size. "base64+zstd" compresses the Account data using [Zstandard](https://facebook.github.io/zstd/) and base64-encodes the result. - "jsonParsed" encoding attempts to use program-specific state parsers to return more human-readable and explicit account state data. If "jsonParsed" is requested but a parser cannot be found, the field falls back to "base64" encoding, detectable when the `data` field is type ``. + ["jsonParsed" encoding](jsonrpc-api.md#parsed-responses) attempts to use program-specific state parsers to return more human-readable and explicit account state data. If "jsonParsed" is requested but a parser cannot be found, the field falls back to "base64" encoding, detectable when the `data` field is type ``. - (optional) `dataSlice: ` - limit the returned account data using the provided `offset: ` and `length: ` fields; only available for "base58", "base64" or "base64+zstd" encodings. - (optional) `filters: ` - filter results using up to 4 [filter objects](jsonrpc-api.md#filters); account must meet all filter criteria to be included in results - (optional) `withContext: bool` - wrap the result in an RpcResponse JSON object. @@ -2612,7 +2634,7 @@ Returns all SPL Token accounts by approved Delegate. "base58" is limited to Account data of less than 129 bytes. "base64" will return base64 encoded data for Account data of any size. "base64+zstd" compresses the Account data using [Zstandard](https://facebook.github.io/zstd/) and base64-encodes the result. - "jsonParsed" encoding attempts to use program-specific state parsers to return more human-readable and explicit account state data. If "jsonParsed" is requested but a parser cannot be found, the field falls back to "base64" encoding, detectable when the `data` field is type ``. + ["jsonParsed" encoding](jsonrpc-api.md#parsed-responses) attempts to use program-specific state parsers to return more human-readable and explicit account state data. If "jsonParsed" is requested but a parser cannot be found, the field falls back to "base64" encoding, detectable when the `data` field is type ``. - (optional) `dataSlice: ` - limit the returned account data using the provided `offset: ` and `length: ` fields; only available for "base58", "base64" or "base64+zstd" encodings. - (optional) `minContextSlot: ` - set the minimum slot that the request can be evaluated at. @@ -2718,7 +2740,7 @@ Returns all SPL Token accounts by token owner. "base58" is limited to Account data of less than 129 bytes. "base64" will return base64 encoded data for Account data of any size. "base64+zstd" compresses the Account data using [Zstandard](https://facebook.github.io/zstd/) and base64-encodes the result. - "jsonParsed" encoding attempts to use program-specific state parsers to return more human-readable and explicit account state data. If "jsonParsed" is requested but a parser cannot be found, the field falls back to "base64" encoding, detectable when the `data` field is type ``. + ["jsonParsed" encoding](jsonrpc-api.md#parsed-responses) attempts to use program-specific state parsers to return more human-readable and explicit account state data. If "jsonParsed" is requested but a parser cannot be found, the field falls back to "base64" encoding, detectable when the `data` field is type ``. - (optional) `dataSlice: ` - limit the returned account data using the provided `offset: ` and `length: ` fields; only available for "base58", "base64" or "base64+zstd" encodings. - (optional) `minContextSlot: ` - set the minimum slot that the request can be evaluated at. @@ -2921,7 +2943,7 @@ Returns transaction details for a confirmed transaction - `` - transaction signature as base-58 encoded string - `` - (optional) Configuration object containing the following optional fields: - (optional) `encoding: ` - encoding for each returned Transaction, either "json", "jsonParsed", "base58" (_slow_), "base64". If parameter not provided, the default encoding is "json". - "jsonParsed" encoding attempts to use program-specific instruction parsers to return more human-readable and explicit data in the `transaction.message.instructions` list. If "jsonParsed" is requested but a parser cannot be found, the instruction falls back to regular JSON encoding (`accounts`, `data`, and `programIdIndex` fields). + ["jsonParsed" encoding](jsonrpc-api.md#parsed-responses) attempts to use program-specific instruction parsers to return more human-readable and explicit data in the `transaction.message.instructions` list. If "jsonParsed" is requested but a parser cannot be found, the instruction falls back to regular JSON encoding (`accounts`, `data`, and `programIdIndex` fields). - (optional) [Commitment](jsonrpc-api.md#configuring-state-commitment); "processed" is not supported. If parameter not provided, the default is "finalized". - (optional) `maxSupportedTransactionVersion: ` - set the max transaction version to return in responses. If the requested transaction is a higher version, an error will be returned. If this parameter is omitted, only legacy transactions will be returned, and any versioned transaction will prompt the error. @@ -3446,7 +3468,7 @@ Simulate sending a transaction (default: false, conflicts with `sigVerify`) - `accounts: ` - (optional) Accounts configuration object containing the following fields: - `encoding: ` - (optional) encoding for returned Account data, either "base64" (default), "base64+zstd" or "jsonParsed". - "jsonParsed" encoding attempts to use program-specific state parsers to return more human-readable and explicit account state data. If "jsonParsed" is requested but a parser cannot be found, the field falls back to binary encoding, detectable when the `data` field is type ``. + ["jsonParsed" encoding](jsonrpc-api.md#parsed-responses) attempts to use program-specific state parsers to return more human-readable and explicit account state data. If "jsonParsed" is requested but a parser cannot be found, the field falls back to binary encoding, detectable when the `data` field is type ``. - `addresses: ` - An array of accounts to return, as base-58 encoded strings - (optional) `minContextSlot: ` - set the minimum slot that the request can be evaluated at. @@ -3538,7 +3560,7 @@ Subscribe to an account to receive notifications when the lamports or data for a - `` - (optional) Configuration object containing the following optional fields: - `` - (optional) [Commitment](jsonrpc-api.md#configuring-state-commitment) - `encoding: ` - encoding for Account data, either "base58" (_slow_), "base64", "base64+zstd" or "jsonParsed". - "jsonParsed" encoding attempts to use program-specific state parsers to return more human-readable and explicit account state data. If "jsonParsed" is requested but a parser cannot be found, the field falls back to binary encoding, detectable when the `data` field is type ``. + ["jsonParsed" encoding](jsonrpc-api.md#parsed-responses) attempts to use program-specific state parsers to return more human-readable and explicit account state data. If "jsonParsed" is requested but a parser cannot be found, the field falls back to binary encoding, detectable when the `data` field is type ``. #### Results: @@ -3689,7 +3711,7 @@ Subscribe to receive notification anytime a new block is Confirmed or Finalized. - `` - (optional) Configuration object containing the following optional fields: - (optional) [Commitment](jsonrpc-api.md#configuring-state-commitment) - (optional) `encoding: ` - encoding for Account data, either "base58" (_slow_), "base64", "base64+zstd" or "jsonParsed". - "jsonParsed" encoding attempts to use program-specific state parsers to return more human-readable and explicit account state data. If "jsonParsed" is requested but a parser cannot be found, the field falls back to base64 encoding, detectable when the `data` field is type ``. Default is "base64". + ["jsonParsed" encoding](jsonrpc-api.md#parsed-responses) attempts to use program-specific state parsers to return more human-readable and explicit account state data. If "jsonParsed" is requested but a parser cannot be found, the field falls back to base64 encoding, detectable when the `data` field is type ``. Default is "base64". - (optional) `transactionDetails: ` - level of transaction detail to return, either "full", "signatures", or "none". If parameter not provided, the default detail level is "full". - (optional) `showRewards: bool` - whether to populate the `rewards` array. If parameter not provided, the default includes rewards. @@ -4083,7 +4105,7 @@ Subscribe to a program to receive notifications when the lamports or data for a - `` - (optional) Configuration object containing the following optional fields: - (optional) [Commitment](jsonrpc-api.md#configuring-state-commitment) - `encoding: ` - encoding for Account data, either "base58" (_slow_), "base64", "base64+zstd" or "jsonParsed". - "jsonParsed" encoding attempts to use program-specific state parsers to return more human-readable and explicit account state data. If "jsonParsed" is requested but a parser cannot be found, the field falls back to base64 encoding, detectable when the `data` field is type ``. + ["jsonParsed" encoding](jsonrpc-api.md#parsed-responses) attempts to use program-specific state parsers to return more human-readable and explicit account state data. If "jsonParsed" is requested but a parser cannot be found, the field falls back to base64 encoding, detectable when the `data` field is type ``. - (optional) `filters: ` - filter results using various [filter objects](jsonrpc-api.md#filters); account must meet all filter criteria to be included in results #### Results: @@ -4672,7 +4694,7 @@ Returns identity and transaction information about a confirmed block in the ledg - `` - slot, as u64 integer - `` - (optional) Configuration object containing the following optional fields: - (optional) `encoding: ` - encoding for each returned Transaction, either "json", "jsonParsed", "base58" (_slow_), "base64". If parameter not provided, the default encoding is "json". - "jsonParsed" encoding attempts to use program-specific instruction parsers to return more human-readable and explicit data in the `transaction.message.instructions` list. If "jsonParsed" is requested but a parser cannot be found, the instruction falls back to regular JSON encoding (`accounts`, `data`, and `programIdIndex` fields). + ["jsonParsed" encoding](jsonrpc-api.md#parsed-responses) attempts to use program-specific instruction parsers to return more human-readable and explicit data in the `transaction.message.instructions` list. If "jsonParsed" is requested but a parser cannot be found, the instruction falls back to regular JSON encoding (`accounts`, `data`, and `programIdIndex` fields). - (optional) `transactionDetails: ` - level of transaction detail to return, either "full", "signatures", or "none". If parameter not provided, the default detail level is "full". - (optional) `rewards: bool` - whether to populate the `rewards` array. If parameter not provided, the default includes rewards. - (optional) [Commitment](jsonrpc-api.md#configuring-state-commitment); "processed" is not supported. If parameter not provided, the default is "finalized". @@ -4980,7 +5002,7 @@ Returns transaction details for a confirmed transaction - `` - transaction signature as base-58 encoded string - `` - (optional) Configuration object containing the following optional fields: - (optional) `encoding: ` - encoding for each returned Transaction, either "json", "jsonParsed", "base58" (_slow_), "base64". If parameter not provided, the default encoding is "json". - "jsonParsed" encoding attempts to use program-specific instruction parsers to return more human-readable and explicit data in the `transaction.message.instructions` list. If "jsonParsed" is requested but a parser cannot be found, the instruction falls back to regular JSON encoding (`accounts`, `data`, and `programIdIndex` fields). + ["jsonParsed" encoding](jsonrpc-api.md#parsed-responses) attempts to use program-specific instruction parsers to return more human-readable and explicit data in the `transaction.message.instructions` list. If "jsonParsed" is requested but a parser cannot be found, the instruction falls back to regular JSON encoding (`accounts`, `data`, and `programIdIndex` fields). - (optional) [Commitment](jsonrpc-api.md#configuring-state-commitment); "processed" is not supported. If parameter not provided, the default is "finalized". #### Results: From 336cb58d46e349406895f1cdd3cb7a1bacb20d60 Mon Sep 17 00:00:00 2001 From: Ryo Onodera Date: Tue, 23 Aug 2022 17:11:35 +0900 Subject: [PATCH 055/465] Revert "Patch crossbeam-epoch to avoid overhead (backport #26555)" (#27327) Revert "Patch crossbeam-epoch to avoid overhead (backport #26555) (#27197)" This reverts commit e48d8a95895e3ba2a4a1f2168561eb2b53c773f0. --- Cargo.lock | 3 ++- Cargo.toml | 4 ---- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index aee4cb83a27bb1..980f52554ec646 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -995,7 +995,8 @@ dependencies = [ [[package]] name = "crossbeam-epoch" version = "0.9.5" -source = "git+https://github.com/solana-labs/crossbeam?rev=fd279d707025f0e60951e429bf778b4813d1b6bf#fd279d707025f0e60951e429bf778b4813d1b6bf" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ec02e091aa634e2c3ada4a392989e7c3116673ef0ac5b72232439094d73b7fd" dependencies = [ "cfg-if 1.0.0", "crossbeam-utils", diff --git a/Cargo.toml b/Cargo.toml index d54b9f1bec20e7..9aad90aeb4f175 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -94,7 +94,3 @@ exclude = [ # This prevents a Travis CI error when building for Windows. resolver = "2" - -# for details, see https://github.com/solana-labs/crossbeam/commit/fd279d707025f0e60951e429bf778b4813d1b6bf -[patch.crates-io] -crossbeam-epoch = { git = "https://github.com/solana-labs/crossbeam", rev = "fd279d707025f0e60951e429bf778b4813d1b6bf" } From e4bb420ca62e835756d2e3bafd142a6657868229 Mon Sep 17 00:00:00 2001 From: Ryo Onodera Date: Tue, 23 Aug 2022 17:12:03 +0900 Subject: [PATCH 056/465] Revert "Fix windows build after crossbeam-epoch patch (backport #27052)" (#27328) Revert "Fix windows build after crossbeam-epoch patch (backport #27052) (#27198)" This reverts commit ed38458a11b04d4156a0f686b4fb2272e5dde282. --- ci/publish-tarball.sh | 2 -- 1 file changed, 2 deletions(-) diff --git a/ci/publish-tarball.sh b/ci/publish-tarball.sh index 5703b371661ee5..ef078f6636c0d5 100755 --- a/ci/publish-tarball.sh +++ b/ci/publish-tarball.sh @@ -58,8 +58,6 @@ windows) git config core.symlinks true find . -type l -delete git reset --hard - # patched crossbeam doesn't build on windows - sed -i 's/^crossbeam-epoch/#crossbeam-epoch/' Cargo.toml ) ;; *) From f7959af55fb5ee961b48b5730bbcce2c8925ef6b Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Tue, 23 Aug 2022 15:46:39 +0000 Subject: [PATCH 057/465] Update config parsing doc (backport #27340) (#27341) Update config parsing doc (#27340) (cherry picked from commit deb13abb1f5de4d8db32c8d935e4a27500c1fc16) Co-authored-by: Tyera Eulberg --- docs/src/developing/clients/jsonrpc-api.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/src/developing/clients/jsonrpc-api.md b/docs/src/developing/clients/jsonrpc-api.md index 6e9f6d7c689816..a3edbf652418f4 100644 --- a/docs/src/developing/clients/jsonrpc-api.md +++ b/docs/src/developing/clients/jsonrpc-api.md @@ -217,7 +217,7 @@ JSON parsing for the following native and SPL programs: | Address Lookup | v1.12.0 | | | BPF Loader | n/a | stable | | BPF Upgradeable Loader | stable | stable | -| Config | X | | +| Config | stable | | | SPL Associated Token Account | n/a | stable | | SPL Memo | n/a | stable | | SPL Token | stable | stable | From c6ea14c2f5a08a8bd8deea0c2b45bec9387a8ab3 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Tue, 23 Aug 2022 16:32:05 +0000 Subject: [PATCH 058/465] serialize incremental_snapshot_hash (backport #26839) (#27212) serialize incremental_snapshot_hash (#26839) * serialize incremental_snapshot_hash * pr feedback (cherry picked from commit 225cddcffbf453cc05f5c6ca2da74509a3fcde07) Co-authored-by: Jeff Washington (jwash) --- core/src/accounts_hash_verifier.rs | 1 + core/tests/snapshots.rs | 3 ++ runtime/src/bank.rs | 26 ++++++++++++++ runtime/src/serde_snapshot.rs | 14 ++++++-- runtime/src/serde_snapshot/newer.rs | 17 +++++++-- runtime/src/serde_snapshot/tests.rs | 54 ++++++++++++++++++++++------- runtime/src/snapshot_utils.rs | 2 ++ 7 files changed, 101 insertions(+), 16 deletions(-) diff --git a/core/src/accounts_hash_verifier.rs b/core/src/accounts_hash_verifier.rs index d6df553cd27739..6dbdbaa9237087 100644 --- a/core/src/accounts_hash_verifier.rs +++ b/core/src/accounts_hash_verifier.rs @@ -190,6 +190,7 @@ impl AccountsHashVerifier { accounts_package.snapshot_links.path(), accounts_package.slot, &accounts_hash, + None, ); datapoint_info!( "accounts_hash_verifier", diff --git a/core/tests/snapshots.rs b/core/tests/snapshots.rs index ba3e4415178129..dffc0a258dadca 100644 --- a/core/tests/snapshots.rs +++ b/core/tests/snapshots.rs @@ -257,6 +257,7 @@ fn run_bank_forks_snapshot_n( accounts_package.snapshot_links.path(), accounts_package.slot, &last_bank.get_accounts_hash(), + None, ); let snapshot_package = SnapshotPackage::new(accounts_package, last_bank.get_accounts_hash()); snapshot_utils::archive_snapshot_package( @@ -492,6 +493,7 @@ fn test_concurrent_snapshot_packaging( accounts_package.snapshot_links.path(), accounts_package.slot, &Hash::default(), + None, ); let snapshot_package = SnapshotPackage::new(accounts_package, Hash::default()); pending_snapshot_package @@ -535,6 +537,7 @@ fn test_concurrent_snapshot_packaging( saved_snapshots_dir.path(), saved_slot, &Hash::default(), + None, ); snapshot_utils::verify_snapshot_archive( diff --git a/runtime/src/bank.rs b/runtime/src/bank.rs index 8b93c94453d2ae..282d1aef442d22 100644 --- a/runtime/src/bank.rs +++ b/runtime/src/bank.rs @@ -236,6 +236,25 @@ impl RentDebit { } } +/// Incremental snapshots only calculate their accounts hash based on the account changes WITHIN the incremental slot range. +/// So, we need to keep track of the full snapshot expected accounts hash results. +/// We also need to keep track of the hash and capitalization specific to the incremental snapshot slot range. +/// The capitalization we calculate for the incremental slot will NOT be consistent with the bank's capitalization. +/// It is not feasible to calculate a capitalization delta that is correct given just incremental slots account data and the full snapshot's capitalization. +#[derive(Serialize, Deserialize, AbiExample, Clone, Debug, Default, PartialEq, Eq)] +pub struct BankIncrementalSnapshotPersistence { + /// slot of full snapshot + pub full_slot: Slot, + /// accounts hash from the full snapshot + pub full_hash: Hash, + /// capitalization from the full snapshot + pub full_capitalization: u64, + /// hash of the accounts in the incremental snapshot slot range, including zero-lamport accounts + pub incremental_hash: Hash, + /// capitalization of the accounts in the incremental snapshot slot range + pub incremental_capitalization: u64, +} + #[derive(Clone, Debug, Default, PartialEq, Eq)] pub struct RentDebits(HashMap); impl RentDebits { @@ -976,6 +995,7 @@ pub struct BankFieldsToDeserialize { pub(crate) epoch_stakes: HashMap, pub(crate) is_delta: bool, pub(crate) accounts_data_len: u64, + pub(crate) incremental_snapshot_persistence: Option, } // Bank's common fields shared by all supported snapshot versions for serialization. @@ -1083,6 +1103,7 @@ impl PartialEq for Bank { accounts_data_size_delta_on_chain: _, accounts_data_size_delta_off_chain: _, fee_structure: _, + incremental_snapshot_persistence: _, // Ignore new fields explicitly if they do not impact PartialEq. // Adding ".." will remove compile-time checks that if a new field // is added to the struct, this ParitalEq is accordingly updated. @@ -1335,6 +1356,8 @@ pub struct Bank { /// Transaction fee structure pub fee_structure: FeeStructure, + + pub incremental_snapshot_persistence: Option, } struct VoteWithStakeDelegations { @@ -1463,6 +1486,7 @@ impl Bank { fn default_with_accounts(accounts: Accounts) -> Self { let mut bank = Self { + incremental_snapshot_persistence: None, rewrites_skipped_this_slot: Rewrites::default(), rc: BankRc::new(accounts, Slot::default()), status_cache: Arc::>::default(), @@ -1770,6 +1794,7 @@ impl Bank { let accounts_data_size_initial = parent.load_accounts_data_size(); let mut new = Bank { + incremental_snapshot_persistence: None, rewrites_skipped_this_slot: Rewrites::default(), rc, status_cache, @@ -2130,6 +2155,7 @@ impl Bank { } let feature_set = new(); let mut bank = Self { + incremental_snapshot_persistence: fields.incremental_snapshot_persistence, rewrites_skipped_this_slot: Rewrites::default(), rc: bank_rc, status_cache: new(), diff --git a/runtime/src/serde_snapshot.rs b/runtime/src/serde_snapshot.rs index da9407da933094..96bdd95fb27b74 100644 --- a/runtime/src/serde_snapshot.rs +++ b/runtime/src/serde_snapshot.rs @@ -8,7 +8,7 @@ use { accounts_index::AccountSecondaryIndexes, accounts_update_notifier_interface::AccountsUpdateNotifier, append_vec::{AppendVec, StoredMetaWriteVersion}, - bank::{Bank, BankFieldsToDeserialize, BankRc}, + bank::{Bank, BankFieldsToDeserialize, BankIncrementalSnapshotPersistence, BankRc}, blockhash_queue::BlockhashQueue, builtins::Builtins, epoch_stakes::EpochStakes, @@ -76,6 +76,7 @@ pub struct AccountsDbFields( /// slots that were roots within the last epoch for which we care about the hash value #[serde(deserialize_with = "default_on_eof")] Vec<(Slot, Hash)>, + // here? ); /// Helper type to wrap BufReader streams when deserializing and reconstructing from either just a @@ -192,6 +193,7 @@ trait TypeContext<'a>: PartialEq { stream_reader: &mut BufReader, stream_writer: &mut BufWriter, accounts_hash: &Hash, + incremental_snapshot_persistence: Option<&BankIncrementalSnapshotPersistence>, ) -> std::result::Result<(), Box> where R: Read, @@ -367,12 +369,18 @@ fn reserialize_bank_fields_with_new_hash( stream_reader: &mut BufReader, stream_writer: &mut BufWriter, accounts_hash: &Hash, + incremental_snapshot_persistence: Option<&BankIncrementalSnapshotPersistence>, ) -> Result<(), Error> where W: Write, R: Read, { - newer::Context::reserialize_bank_fields_with_hash(stream_reader, stream_writer, accounts_hash) + newer::Context::reserialize_bank_fields_with_hash( + stream_reader, + stream_writer, + accounts_hash, + incremental_snapshot_persistence, + ) } /// effectively updates the accounts hash in the serialized bank file on disk @@ -384,6 +392,7 @@ pub fn reserialize_bank_with_new_accounts_hash( bank_snapshots_dir: impl AsRef, slot: Slot, accounts_hash: &Hash, + incremental_snapshot_persistence: Option<&BankIncrementalSnapshotPersistence>, ) -> bool { let bank_post = snapshot_utils::get_bank_snapshots_dir(bank_snapshots_dir, slot); let bank_post = bank_post.join(snapshot_utils::get_snapshot_file_name(slot)); @@ -401,6 +410,7 @@ pub fn reserialize_bank_with_new_accounts_hash( &mut BufReader::new(file), &mut BufWriter::new(file_out), accounts_hash, + incremental_snapshot_persistence, ) .unwrap(); } diff --git a/runtime/src/serde_snapshot/newer.rs b/runtime/src/serde_snapshot/newer.rs index 3dd73803cf3010..512737106aebc9 100644 --- a/runtime/src/serde_snapshot/newer.rs +++ b/runtime/src/serde_snapshot/newer.rs @@ -96,6 +96,7 @@ impl From for BankFieldsToDeserialize { stakes: dvb.stakes, epoch_stakes: dvb.epoch_stakes, is_delta: dvb.is_delta, + incremental_snapshot_persistence: None, } } } @@ -209,6 +210,7 @@ impl<'a> TypeContext<'a> for Context { // we can grab it on restart. // TODO: if we do a snapshot version bump, consider moving this out. lamports_per_signature, + None::, ) .serialize(serializer) } @@ -314,6 +316,10 @@ impl<'a> TypeContext<'a> for Context { bank_fields.fee_rate_governor = bank_fields .fee_rate_governor .clone_with_lamports_per_signature(lamports_per_signature); + + let incremental_snapshot_persistence = ignore_eof_error(deserialize_from(stream))?; + bank_fields.incremental_snapshot_persistence = incremental_snapshot_persistence; + Ok((bank_fields, accounts_db_fields)) } @@ -327,12 +333,13 @@ impl<'a> TypeContext<'a> for Context { } /// deserialize the bank from 'stream_reader' - /// modify the accounts_hash + /// modify the accounts_hash and incremental_snapshot_persistence /// reserialize the bank to 'stream_writer' fn reserialize_bank_fields_with_hash( stream_reader: &mut BufReader, stream_writer: &mut BufWriter, accounts_hash: &Hash, + incremental_snapshot_persistence: Option<&BankIncrementalSnapshotPersistence>, ) -> std::result::Result<(), Box> where R: Read, @@ -345,6 +352,7 @@ impl<'a> TypeContext<'a> for Context { let blockhash_queue = RwLock::new(rhs.blockhash_queue.clone()); let hard_forks = RwLock::new(rhs.hard_forks.clone()); let lamports_per_signature = rhs.fee_rate_governor.lamports_per_signature; + let bank = SerializableVersionedBank { blockhash_queue: &blockhash_queue, ancestors: &rhs.ancestors, @@ -382,7 +390,12 @@ impl<'a> TypeContext<'a> for Context { bincode::serialize_into( stream_writer, - &(bank, accounts_db_fields, lamports_per_signature), + &( + bank, + accounts_db_fields, + lamports_per_signature, + incremental_snapshot_persistence, + ), ) } } diff --git a/runtime/src/serde_snapshot/tests.rs b/runtime/src/serde_snapshot/tests.rs index 8b5e82526993ed..c76e2ce535e597 100644 --- a/runtime/src/serde_snapshot/tests.rs +++ b/runtime/src/serde_snapshot/tests.rs @@ -190,6 +190,7 @@ fn test_bank_serialize_style( serde_style: SerdeStyle, reserialize_accounts_hash: bool, update_accounts_hash: bool, + incremental_snapshot_persistence: bool, ) { solana_logger::setup(); let (genesis_config, _) = create_genesis_config(500); @@ -236,8 +237,18 @@ fn test_bank_serialize_style( } else { bank2.get_accounts_hash() }; - if reserialize_accounts_hash { - let slot = bank2.slot(); + + let slot = bank2.slot(); + let incremental = + incremental_snapshot_persistence.then(|| BankIncrementalSnapshotPersistence { + full_slot: slot + 1, + full_hash: Hash::new(&[1; 32]), + full_capitalization: 31, + incremental_hash: Hash::new(&[2; 32]), + incremental_capitalization: 32, + }); + + if reserialize_accounts_hash || incremental_snapshot_persistence { let temp_dir = TempDir::new().unwrap(); let slot_dir = temp_dir.path().join(slot.to_string()); let post_path = slot_dir.join(slot.to_string()); @@ -248,21 +259,32 @@ fn test_bank_serialize_style( let mut f = std::fs::File::create(&pre_path).unwrap(); f.write_all(&buf).unwrap(); } + assert!(reserialize_bank_with_new_accounts_hash( temp_dir.path(), slot, - &accounts_hash + &accounts_hash, + incremental.as_ref(), )); let previous_len = buf.len(); // larger buffer than expected to make sure the file isn't larger than expected - let mut buf_reserialized = vec![0; previous_len + 1]; + let sizeof_none = std::mem::size_of::(); + let sizeof_incremental_snapshot_persistence = + std::mem::size_of::>(); + let mut buf_reserialized = + vec![0; previous_len + sizeof_incremental_snapshot_persistence + 1]; { let mut f = std::fs::File::open(post_path).unwrap(); let size = f.read(&mut buf_reserialized).unwrap(); - assert_eq!(size, previous_len); + let expected = if !incremental_snapshot_persistence { + previous_len + } else { + previous_len + sizeof_incremental_snapshot_persistence - sizeof_none + }; + assert_eq!(size, expected); buf_reserialized.truncate(size); } - if update_accounts_hash { + if update_accounts_hash || incremental_snapshot_persistence { // We cannot guarantee buffer contents are exactly the same if hash is the same. // Things like hashsets/maps have randomness in their in-mem representations. // This make serialized bytes not deterministic. @@ -310,6 +332,7 @@ fn test_bank_serialize_style( assert_eq!(dbank.get_balance(&key3.pubkey()), 0); assert_eq!(dbank.get_accounts_hash(), accounts_hash); assert!(bank2 == dbank); + assert_eq!(dbank.incremental_snapshot_persistence, incremental); } pub(crate) fn reconstruct_accounts_db_via_serialization( @@ -358,11 +381,18 @@ fn test_bank_serialize_newer() { for (reserialize_accounts_hash, update_accounts_hash) in [(false, false), (true, false), (true, true)] { - test_bank_serialize_style( - SerdeStyle::Newer, - reserialize_accounts_hash, - update_accounts_hash, - ) + for incremental_snapshot_persistence in if reserialize_accounts_hash { + [false, true].to_vec() + } else { + [false].to_vec() + } { + test_bank_serialize_style( + SerdeStyle::Newer, + reserialize_accounts_hash, + update_accounts_hash, + incremental_snapshot_persistence, + ) + } } } @@ -551,7 +581,7 @@ mod test_bank_serialize { // This some what long test harness is required to freeze the ABI of // Bank's serialization due to versioned nature - #[frozen_abi(digest = "9vGBt7YfymKUTPWLHVVpQbDtPD7dFDwXRMFkCzwujNqJ")] + #[frozen_abi(digest = "5py4Wkuj5fV2sLyA1MrPg4pGNwMEaygQLnpLyY8MMLGC")] #[derive(Serialize, AbiExample)] pub struct BankAbiTestWrapperNewer { #[serde(serialize_with = "wrapper_newer")] diff --git a/runtime/src/snapshot_utils.rs b/runtime/src/snapshot_utils.rs index 4ce38c36a1e04a..f41469baa10a06 100644 --- a/runtime/src/snapshot_utils.rs +++ b/runtime/src/snapshot_utils.rs @@ -2038,6 +2038,7 @@ pub fn package_and_archive_full_snapshot( accounts_package.snapshot_links.path(), accounts_package.slot, &bank.get_accounts_hash(), + None, ); let snapshot_package = SnapshotPackage::new(accounts_package, bank.get_accounts_hash()); @@ -2090,6 +2091,7 @@ pub fn package_and_archive_incremental_snapshot( accounts_package.snapshot_links.path(), accounts_package.slot, &bank.get_accounts_hash(), + None, ); let snapshot_package = SnapshotPackage::new(accounts_package, bank.get_accounts_hash()); From 0a80172bd0470b42e4c0dbf5f8e24d526627817e Mon Sep 17 00:00:00 2001 From: "Jeff Washington (jwash)" Date: Tue, 23 Aug 2022 17:33:47 -0500 Subject: [PATCH 059/465] only READ BankIncrementalSnapshotPersistence in 1.11 (#27345) --- runtime/src/serde_snapshot/newer.rs | 6 +++--- runtime/src/serde_snapshot/tests.rs | 7 +++++-- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/runtime/src/serde_snapshot/newer.rs b/runtime/src/serde_snapshot/newer.rs index 512737106aebc9..68b13f80582954 100644 --- a/runtime/src/serde_snapshot/newer.rs +++ b/runtime/src/serde_snapshot/newer.rs @@ -210,7 +210,7 @@ impl<'a> TypeContext<'a> for Context { // we can grab it on restart. // TODO: if we do a snapshot version bump, consider moving this out. lamports_per_signature, - None::, + // None::, this will be saved starting in 1.12 ) .serialize(serializer) } @@ -339,7 +339,7 @@ impl<'a> TypeContext<'a> for Context { stream_reader: &mut BufReader, stream_writer: &mut BufWriter, accounts_hash: &Hash, - incremental_snapshot_persistence: Option<&BankIncrementalSnapshotPersistence>, + _incremental_snapshot_persistence: Option<&BankIncrementalSnapshotPersistence>, ) -> std::result::Result<(), Box> where R: Read, @@ -394,7 +394,7 @@ impl<'a> TypeContext<'a> for Context { bank, accounts_db_fields, lamports_per_signature, - incremental_snapshot_persistence, + // incremental_snapshot_persistence, this will be saved starting in 1.12 ), ) } diff --git a/runtime/src/serde_snapshot/tests.rs b/runtime/src/serde_snapshot/tests.rs index c76e2ce535e597..2d0fceeddddbf5 100644 --- a/runtime/src/serde_snapshot/tests.rs +++ b/runtime/src/serde_snapshot/tests.rs @@ -190,9 +190,12 @@ fn test_bank_serialize_style( serde_style: SerdeStyle, reserialize_accounts_hash: bool, update_accounts_hash: bool, - incremental_snapshot_persistence: bool, + _incremental_snapshot_persistence: bool, ) { solana_logger::setup(); + + // in 1.11, don't test incremental snapshot persistence because we are not writing it - only reading it and ignoring it + let incremental_snapshot_persistence = false; let (genesis_config, _) = create_genesis_config(500); let bank0 = Arc::new(Bank::new_for_tests(&genesis_config)); let bank1 = Bank::new_from_parent(&bank0, &Pubkey::default(), 1); @@ -581,7 +584,7 @@ mod test_bank_serialize { // This some what long test harness is required to freeze the ABI of // Bank's serialization due to versioned nature - #[frozen_abi(digest = "5py4Wkuj5fV2sLyA1MrPg4pGNwMEaygQLnpLyY8MMLGC")] + #[frozen_abi(digest = "9vGBt7YfymKUTPWLHVVpQbDtPD7dFDwXRMFkCzwujNqJ")] #[derive(Serialize, AbiExample)] pub struct BankAbiTestWrapperNewer { #[serde(serialize_with = "wrapper_newer")] From 5709fd1ae21880295e21d7f3220c024877d3029e Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Wed, 24 Aug 2022 04:50:05 +0000 Subject: [PATCH 060/465] chore: skip spl downstream project test when the used version too high (backport #27326) (#27358) chore: skip spl downstream project test when the used version too high (#27326) * skip spl build when solana version too high * lint (cherry picked from commit 3b01517da6f2d4f44e57728581abb238164d2b42) Co-authored-by: Yihau Chen --- scripts/build-downstream-projects.sh | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/scripts/build-downstream-projects.sh b/scripts/build-downstream-projects.sh index 465c6d239a736b..2efd67cec4aad0 100755 --- a/scripts/build-downstream-projects.sh +++ b/scripts/build-downstream-projects.sh @@ -6,6 +6,7 @@ set -e cd "$(dirname "$0")"/.. source ci/_ +source ci/semver_bash/semver.sh source scripts/patch-crates.sh source scripts/read-cargo-variable.sh @@ -50,12 +51,19 @@ spl() { memo/program name-service/program stake-pool/program - ) + ) set -x rm -rf spl git clone https://github.com/solana-labs/solana-program-library.git spl cd spl + project_used_solana_version=$(sed -nE 's/solana-sdk = \"[>=<~]*(.*)\"/\1/p' <"token/program/Cargo.toml") + echo "used solana version: $project_used_solana_version" + if semverGT "$project_used_solana_version" "$solana_ver"; then + echo "skip" + return + fi + ./patch.crates-io.sh "$solana_dir" for program in "${PROGRAMS[@]}"; do From 977a025accba5a8ffb242161ef2f2c6827837668 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Wed, 24 Aug 2022 20:38:35 +0000 Subject: [PATCH 061/465] Update BigTable apis to respect a limit of zero (backport #27380) (#27383) Update BigTable apis to respect a limit of zero (#27380) Update apis to respect a limit of zero (cherry picked from commit 7a11571e7f8170e5496c53fa738f2ce478c2d5db) Co-authored-by: Tyera Eulberg --- storage-bigtable/src/bigtable.rs | 13 +++++++++---- storage-bigtable/src/lib.rs | 3 +-- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/storage-bigtable/src/bigtable.rs b/storage-bigtable/src/bigtable.rs index d74c50bb5eb2fe..2708515925cef7 100644 --- a/storage-bigtable/src/bigtable.rs +++ b/storage-bigtable/src/bigtable.rs @@ -403,7 +403,7 @@ impl) -> InterceptedRequestResult> BigTable { /// /// If `end_at` is provided, the row key listing will end at the key. Otherwise it will /// continue until the `rows_limit` is reached or the end of the table, whichever comes first. - /// If `rows_limit` is zero, the listing will continue until the end of the table. + /// If `rows_limit` is zero, this method will return an empty array. pub async fn get_row_keys( &mut self, table_name: &str, @@ -411,6 +411,9 @@ impl) -> InterceptedRequestResult> BigTable { end_at: Option, rows_limit: i64, ) -> Result> { + if rows_limit == 0 { + return Ok(vec![]); + } self.refresh_access_token().await; let response = self .client @@ -465,7 +468,7 @@ impl) -> InterceptedRequestResult> BigTable { /// /// If `end_at` is provided, the row key listing will end at the key. Otherwise it will /// continue until the `rows_limit` is reached or the end of the table, whichever comes first. - /// If `rows_limit` is zero, the listing will continue until the end of the table. + /// If `rows_limit` is zero, this method will return an empty array. pub async fn get_row_data( &mut self, table_name: &str, @@ -473,8 +476,10 @@ impl) -> InterceptedRequestResult> BigTable { end_at: Option, rows_limit: i64, ) -> Result> { + if rows_limit == 0 { + return Ok(vec![]); + } self.refresh_access_token().await; - let response = self .client .read_rows(ReadRowsRequest { @@ -515,7 +520,7 @@ impl) -> InterceptedRequestResult> BigTable { .read_rows(ReadRowsRequest { table_name: format!("{}{}", self.table_prefix, table_name), app_profile_id: self.app_profile_id.clone(), - rows_limit: 0, // return all keys + rows_limit: 0, // return all existing rows rows: Some(RowSet { row_keys: row_keys .iter() diff --git a/storage-bigtable/src/lib.rs b/storage-bigtable/src/lib.rs index 4e1cb401d1e0c4..b644509b715793 100644 --- a/storage-bigtable/src/lib.rs +++ b/storage-bigtable/src/lib.rs @@ -460,8 +460,7 @@ impl LedgerStorage { /// Fetch the next slots after the provided slot that contains a block /// /// start_slot: slot to start the search from (inclusive) - /// limit: stop after this many slots have been found; if limit==0, all records in the table - /// after start_slot will be read + /// limit: stop after this many slots have been found pub async fn get_confirmed_blocks(&self, start_slot: Slot, limit: usize) -> Result> { debug!( "LedgerStorage::get_confirmed_blocks request received: {:?} {:?}", From 1de5ddf748bb0794d094c8b5d5e653ba956e3af6 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Thu, 25 Aug 2022 22:20:39 +0000 Subject: [PATCH 062/465] Check overflow on vote tx compaction boundary (backport #27185) (#27359) * Check overflow on vote tx compaction boundary (#27185) * Check overflow on vote tx compaction boundary Check for overflow during the conversion between VoteStateUpdate and CompactVoteStateUpdate. * Try removing clippy supress (cherry picked from commit efa6201eda9f5f3ebd0df1c79add0ded67d7e53d) # Conflicts: # programs/vote/src/vote_processor.rs # sdk/program/src/vote/state/mod.rs * Fix conflicts Co-authored-by: Ashwin Sekar --- core/src/replay_stage.rs | 10 +- programs/vote/src/vote_processor.rs | 5 +- programs/vote/src/vote_state/mod.rs | 147 +++++++++++++++++---------- runtime/src/vote_parser.rs | 22 ++-- transaction-status/src/parse_vote.rs | 16 +-- 5 files changed, 129 insertions(+), 71 deletions(-) diff --git a/core/src/replay_stage.rs b/core/src/replay_stage.rs index fe25a872aff499..02dbcb69775183 100644 --- a/core/src/replay_stage.rs +++ b/core/src/replay_stage.rs @@ -70,7 +70,7 @@ use { timing::timestamp, transaction::Transaction, }, - solana_vote_program::vote_state::{CompactVoteStateUpdate, VoteTransaction}, + solana_vote_program::vote_state::VoteTransaction, std::{ collections::{HashMap, HashSet}, result, @@ -2012,7 +2012,13 @@ impl ReplayStage { .is_active(&feature_set::compact_vote_state_updates::id()); let vote = match (should_compact, vote) { (true, VoteTransaction::VoteStateUpdate(vote_state_update)) => { - VoteTransaction::from(CompactVoteStateUpdate::from(vote_state_update)) + if let Some(compact_vote_state_update) = vote_state_update.compact() { + VoteTransaction::from(compact_vote_state_update) + } else { + // Compaction failed + warn!("Compaction failed when generating vote tx for vote account {}. Unable to vote", vote_account_pubkey); + return None; + } } (_, vote) => vote, }; diff --git a/programs/vote/src/vote_processor.rs b/programs/vote/src/vote_processor.rs index dae06c4d047393..9abc361f4abe6e 100644 --- a/programs/vote/src/vote_processor.rs +++ b/programs/vote/src/vote_processor.rs @@ -4,7 +4,7 @@ use { crate::{ id, vote_instruction::VoteInstruction, - vote_state::{self, VoteAuthorize, VoteStateUpdate}, + vote_state::{self, VoteAuthorize}, }, log::*, solana_program_runtime::{ @@ -185,11 +185,12 @@ pub fn process_instruction( let sysvar_cache = invoke_context.get_sysvar_cache(); let slot_hashes = sysvar_cache.get_slot_hashes()?; let clock = sysvar_cache.get_clock()?; + let vote_state_update = compact_vote_state_update.uncompact()?; vote_state::process_vote_state_update( &mut me, slot_hashes.slot_hashes(), &clock, - VoteStateUpdate::from(compact_vote_state_update), + vote_state_update, &signers, &invoke_context.feature_set, ) diff --git a/programs/vote/src/vote_state/mod.rs b/programs/vote/src/vote_state/mod.rs index 48fcedbe84e40d..e21bcc395aac8f 100644 --- a/programs/vote/src/vote_state/mod.rs +++ b/programs/vote/src/vote_state/mod.rs @@ -278,6 +278,10 @@ impl VoteStateUpdate { pub fn slots(&self) -> Vec { self.lockouts.iter().map(|lockout| lockout.slot).collect() } + + pub fn compact(self) -> Option { + CompactVoteStateUpdate::new(self.lockouts, self.root, self.hash, self.timestamp) + } } /// Ignoring overhead, in a full `VoteStateUpdate` the lockouts take up @@ -321,14 +325,19 @@ impl From> for CompactVoteStateUpdate { confirmation_count, }) .collect(); - Self::new(lockouts, None, Hash::default()) + Self::new(lockouts, None, Hash::default(), None).unwrap() } } impl CompactVoteStateUpdate { - pub fn new(mut lockouts: VecDeque, root: Option, hash: Hash) -> Self { + pub fn new( + mut lockouts: VecDeque, + root: Option, + hash: Hash, + timestamp: Option, + ) -> Option { if lockouts.is_empty() { - return Self::default(); + return Some(Self::default()); } let mut cur_slot = root.unwrap_or(0u64); let mut cur_confirmation_count = 0; @@ -341,13 +350,14 @@ impl CompactVoteStateUpdate { }| { assert!(confirmation_count < 32); - let offset = slot - cur_slot; - cur_slot = slot; - cur_confirmation_count = confirmation_count; - offset + slot.checked_sub(cur_slot).map(|offset| { + cur_slot = slot; + cur_confirmation_count = confirmation_count; + offset + }) }, ) - .expect("Tower should not be empty"); + .expect("Tower should not be empty")?; let mut lockouts_32 = Vec::new(); let mut lockouts_16 = Vec::new(); let mut lockouts_8 = Vec::new(); @@ -358,7 +368,7 @@ impl CompactVoteStateUpdate { } in lockouts { assert!(confirmation_count < 32); - let offset = slot - cur_slot; + let offset = slot.checked_sub(cur_slot)?; if cur_confirmation_count > 15 { lockouts_32.push(CompactLockout { offset: offset.try_into().unwrap(), @@ -381,15 +391,15 @@ impl CompactVoteStateUpdate { } // Last vote should be at the top of tower, so we don't have to explicitly store it assert!(cur_confirmation_count == 1); - Self { + Some(Self { root: root.unwrap_or(u64::MAX), root_to_first_vote_offset: offset, lockouts_32, lockouts_16, lockouts_8, hash, - timestamp: None, - } + timestamp, + }) } pub fn root(&self) -> Option { @@ -406,29 +416,32 @@ impl CompactVoteStateUpdate { .chain(self.lockouts_16.iter().map(|lockout| lockout.offset.into())) .chain(self.lockouts_8.iter().map(|lockout| lockout.offset.into())) .scan(self.root().unwrap_or(0), |prev_slot, offset| { - let slot = *prev_slot + offset; - *prev_slot = slot; - Some(slot) + prev_slot.checked_add(offset).map(|slot| { + *prev_slot = slot; + slot + }) }) .collect() } -} -impl From for VoteStateUpdate { - fn from(vote_state_update: CompactVoteStateUpdate) -> Self { - let lockouts = vote_state_update + pub fn uncompact(self) -> Result { + let first_slot = self + .root() + .unwrap_or(0) + .checked_add(self.root_to_first_vote_offset) + .ok_or(InstructionError::ArithmeticOverflow)?; + let mut arithmetic_overflow_occured = false; + let lockouts = self .lockouts_32 .iter() .map(|lockout| (lockout.offset.into(), lockout.confirmation_count)) .chain( - vote_state_update - .lockouts_16 + self.lockouts_16 .iter() .map(|lockout| (lockout.offset.into(), lockout.confirmation_count)), ) .chain( - vote_state_update - .lockouts_8 + self.lockouts_8 .iter() .map(|lockout| (lockout.offset.into(), lockout.confirmation_count)), ) @@ -437,36 +450,35 @@ impl From for VoteStateUpdate { std::iter::once((0, 1)), ) .scan( - vote_state_update.root().unwrap_or(0) + vote_state_update.root_to_first_vote_offset, + first_slot, |slot, (offset, confirmation_count): (u64, u8)| { let cur_slot = *slot; - *slot += offset; - Some(Lockout { - slot: cur_slot, - confirmation_count: confirmation_count.into(), - }) + if let Some(new_slot) = slot.checked_add(offset) { + *slot = new_slot; + Some(Lockout { + slot: cur_slot, + confirmation_count: confirmation_count.into(), + }) + } else { + arithmetic_overflow_occured = true; + None + } }, ) .collect(); - Self { - lockouts, - root: vote_state_update.root(), - hash: vote_state_update.hash, - timestamp: vote_state_update.timestamp, + if arithmetic_overflow_occured { + Err(InstructionError::ArithmeticOverflow) + } else { + Ok(VoteStateUpdate { + lockouts, + root: self.root(), + hash: self.hash, + timestamp: self.timestamp, + }) } } } -impl From for CompactVoteStateUpdate { - fn from(vote_state_update: VoteStateUpdate) -> Self { - CompactVoteStateUpdate::new( - vote_state_update.lockouts, - vote_state_update.root, - vote_state_update.hash, - ) - } -} - #[derive(Default, Serialize, Deserialize, Debug, PartialEq, Eq, Clone, Copy)] pub struct VoteInit { pub node_pubkey: Pubkey, @@ -3805,13 +3817,13 @@ mod tests { vote_state_update.hash = Hash::new_unique(); vote_state_update.root = Some(1); - let compact_vote_state_update = CompactVoteStateUpdate::from(vote_state_update.clone()); + let compact_vote_state_update = vote_state_update.clone().compact().unwrap(); assert_eq!(vote_state_update.slots(), compact_vote_state_update.slots()); assert_eq!(vote_state_update.hash, compact_vote_state_update.hash); assert_eq!(vote_state_update.root, compact_vote_state_update.root()); - let vote_state_update_new = VoteStateUpdate::from(compact_vote_state_update); + let vote_state_update_new = compact_vote_state_update.uncompact().unwrap(); assert_eq!(vote_state_update, vote_state_update_new); } @@ -3825,11 +3837,11 @@ mod tests { (u64::pow(2, 28), 17), (u64::pow(2, 28) + u64::pow(2, 16), 1), ]); - let compact_vote_state_update = CompactVoteStateUpdate::from(vote_state_update.clone()); + let compact_vote_state_update = vote_state_update.clone().compact().unwrap(); assert_eq!(vote_state_update.slots(), compact_vote_state_update.slots()); - let vote_state_update_new = VoteStateUpdate::from(compact_vote_state_update); + let vote_state_update_new = compact_vote_state_update.uncompact().unwrap(); assert_eq!(vote_state_update, vote_state_update_new); } @@ -3845,11 +3857,11 @@ mod tests { (two_31 + two_15 + 1, 6), (two_31 + two_15 + 1 + 64, 1), ]); - let compact_vote_state_update = CompactVoteStateUpdate::from(vote_state_update.clone()); + let compact_vote_state_update = vote_state_update.clone().compact().unwrap(); assert_eq!(vote_state_update.slots(), compact_vote_state_update.slots()); - let vote_state_update_new = VoteStateUpdate::from(compact_vote_state_update); + let vote_state_update_new = compact_vote_state_update.uncompact().unwrap(); assert_eq!(vote_state_update, vote_state_update_new); } @@ -3859,11 +3871,42 @@ mod tests { let two_31 = u64::pow(2, 31); let mut vote_state_update = VoteStateUpdate::from(vec![(two_58, 31), (two_58 + two_31, 1)]); vote_state_update.root = Some(two_31); - let compact_vote_state_update = CompactVoteStateUpdate::from(vote_state_update.clone()); + let compact_vote_state_update = vote_state_update.clone().compact().unwrap(); assert_eq!(vote_state_update.slots(), compact_vote_state_update.slots()); - let vote_state_update_new = VoteStateUpdate::from(compact_vote_state_update); + let vote_state_update_new = compact_vote_state_update.uncompact().unwrap(); assert_eq!(vote_state_update, vote_state_update_new); } + + #[test] + fn test_compact_vote_state_update_overflow() { + let compact_vote_state_update = CompactVoteStateUpdate { + root: u64::MAX - 1, + root_to_first_vote_offset: 10, + lockouts_32: vec![], + lockouts_16: vec![], + lockouts_8: vec![CompactLockout::new(10)], + hash: Hash::new_unique(), + timestamp: None, + }; + assert_eq!( + Err(InstructionError::ArithmeticOverflow), + compact_vote_state_update.uncompact() + ); + + let compact_vote_state_update = CompactVoteStateUpdate { + root: u64::MAX - u32::MAX as u64, + root_to_first_vote_offset: 10, + lockouts_32: vec![CompactLockout::new(u32::MAX)], + lockouts_16: vec![], + lockouts_8: vec![CompactLockout::new(10)], + hash: Hash::new_unique(), + timestamp: None, + }; + assert_eq!( + Err(InstructionError::ArithmeticOverflow), + compact_vote_state_update.uncompact() + ); + } } diff --git a/runtime/src/vote_parser.rs b/runtime/src/vote_parser.rs index c67045b0827533..660328db0ab9f5 100644 --- a/runtime/src/vote_parser.rs +++ b/runtime/src/vote_parser.rs @@ -7,7 +7,7 @@ use { signature::Signature, transaction::{SanitizedTransaction, Transaction}, }, - solana_vote_program::{vote_instruction::VoteInstruction, vote_state::VoteStateUpdate}, + solana_vote_program::vote_instruction::VoteInstruction, }; pub type ParsedVote = (Pubkey, VoteTransaction, Option, Signature); @@ -82,14 +82,18 @@ fn parse_vote_instruction_data( VoteInstruction::UpdateVoteStateSwitch(vote_state_update, hash) => { Some((VoteTransaction::from(vote_state_update), Some(hash))) } - VoteInstruction::CompactUpdateVoteState(compact_vote_state_update) => Some(( - VoteTransaction::from(VoteStateUpdate::from(compact_vote_state_update)), - None, - )), - VoteInstruction::CompactUpdateVoteStateSwitch(compact_vote_state_update, hash) => Some(( - VoteTransaction::from(VoteStateUpdate::from(compact_vote_state_update)), - Some(hash), - )), + VoteInstruction::CompactUpdateVoteState(compact_vote_state_update) => { + compact_vote_state_update + .uncompact() + .ok() + .map(|vote_state_update| (VoteTransaction::from(vote_state_update), None)) + } + VoteInstruction::CompactUpdateVoteStateSwitch(compact_vote_state_update, hash) => { + compact_vote_state_update + .uncompact() + .ok() + .map(|vote_state_update| (VoteTransaction::from(vote_state_update), Some(hash))) + } VoteInstruction::Authorize(_, _) | VoteInstruction::AuthorizeChecked(_) | VoteInstruction::AuthorizeWithSeed(_) diff --git a/transaction-status/src/parse_vote.rs b/transaction-status/src/parse_vote.rs index 094b01ec0258d2..96f03863c7da4a 100644 --- a/transaction-status/src/parse_vote.rs +++ b/transaction-status/src/parse_vote.rs @@ -5,7 +5,7 @@ use { bincode::deserialize, serde_json::json, solana_sdk::{instruction::CompiledInstruction, message::AccountKeys}, - solana_vote_program::{vote_instruction::VoteInstruction, vote_state::VoteStateUpdate}, + solana_vote_program::vote_instruction::VoteInstruction, }; pub fn parse_vote( @@ -136,7 +136,9 @@ pub fn parse_vote( }) } VoteInstruction::CompactUpdateVoteState(compact_vote_state_update) => { - let vote_state_update = VoteStateUpdate::from(compact_vote_state_update); + let vote_state_update = compact_vote_state_update.uncompact().map_err(|_| { + ParseInstructionError::InstructionNotParsable(ParsableProgram::Vote) + })?; check_num_vote_accounts(&instruction.accounts, 2)?; let vote_state_update = json!({ "lockouts": vote_state_update.lockouts, @@ -154,7 +156,9 @@ pub fn parse_vote( }) } VoteInstruction::CompactUpdateVoteStateSwitch(compact_vote_state_update, hash) => { - let vote_state_update = VoteStateUpdate::from(compact_vote_state_update); + let vote_state_update = compact_vote_state_update.uncompact().map_err(|_| { + ParseInstructionError::InstructionNotParsable(ParsableProgram::Vote) + })?; check_num_vote_accounts(&instruction.accounts, 2)?; let vote_state_update = json!({ "lockouts": vote_state_update.lockouts, @@ -252,7 +256,7 @@ mod test { solana_sdk::{hash::Hash, message::Message, pubkey::Pubkey, sysvar}, solana_vote_program::{ vote_instruction, - vote_state::{CompactVoteStateUpdate, Vote, VoteAuthorize, VoteInit}, + vote_state::{Vote, VoteAuthorize, VoteInit, VoteStateUpdate}, }, }; @@ -766,7 +770,7 @@ mod test { #[test] fn test_parse_compact_vote_state_update_ix() { let vote_state_update = VoteStateUpdate::from(vec![(0, 3), (1, 2), (2, 1)]); - let compact_vote_state_update = CompactVoteStateUpdate::from(vote_state_update.clone()); + let compact_vote_state_update = vote_state_update.clone().compact().unwrap(); let vote_pubkey = Pubkey::new_unique(); let authorized_voter_pubkey = Pubkey::new_unique(); @@ -809,7 +813,7 @@ mod test { #[test] fn test_parse_compact_vote_state_update_switch_ix() { let vote_state_update = VoteStateUpdate::from(vec![(0, 3), (1, 2), (2, 1)]); - let compact_vote_state_update = CompactVoteStateUpdate::from(vote_state_update.clone()); + let compact_vote_state_update = vote_state_update.clone().compact().unwrap(); let vote_pubkey = Pubkey::new_unique(); let authorized_voter_pubkey = Pubkey::new_unique(); From f2fd668d03a8aafef31ab46addd30919146eff2d Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Thu, 25 Aug 2022 23:01:45 +0000 Subject: [PATCH 063/465] coalesce entries in recv_slot_entries to target byte count (backport #27321) (#27407) coalesce entries in recv_slot_entries to target byte count (#27321) (cherry picked from commit d1522fc7903d893308ead8947abb146d9a93570f) Co-authored-by: Jeff Biseda --- core/src/broadcast_stage/broadcast_utils.rs | 84 +++++++++++++-------- ledger/src/shred.rs | 12 +-- ledger/src/shred/shred_data.rs | 2 +- 3 files changed, 60 insertions(+), 38 deletions(-) diff --git a/core/src/broadcast_stage/broadcast_utils.rs b/core/src/broadcast_stage/broadcast_utils.rs index a54b0fa79f79c5..8079d396ddab7a 100644 --- a/core/src/broadcast_stage/broadcast_utils.rs +++ b/core/src/broadcast_stage/broadcast_utils.rs @@ -1,7 +1,9 @@ use { crate::result::Result, + bincode::serialized_size, crossbeam_channel::Receiver, solana_entry::entry::Entry, + solana_ledger::shred::ShredData, solana_poh::poh_recorder::WorkingBankEntry, solana_runtime::bank::Bank, solana_sdk::clock::Slot, @@ -11,6 +13,8 @@ use { }, }; +const ENTRY_COALESCE_DURATION: Duration = Duration::from_millis(50); + pub(super) struct ReceiveResults { pub entries: Vec, pub time_elapsed: Duration, @@ -26,45 +30,61 @@ pub struct UnfinishedSlotInfo { pub parent: Slot, } -/// This parameter tunes how many entries are received in one iteration of recv loop -/// This will prevent broadcast stage from consuming more entries, that could have led -/// to delays in shredding, and broadcasting shreds to peer validators -const RECEIVE_ENTRY_COUNT_THRESHOLD: usize = 8; - pub(super) fn recv_slot_entries(receiver: &Receiver) -> Result { + let target_serialized_batch_byte_count: u64 = + 32 * ShredData::capacity(/*merkle_proof_size*/ None).unwrap() as u64; let timer = Duration::new(1, 0); let recv_start = Instant::now(); + let (mut bank, (entry, mut last_tick_height)) = receiver.recv_timeout(timer)?; let mut entries = vec![entry]; - let mut slot = bank.slot(); - let mut max_tick_height = bank.max_tick_height(); - - assert!(last_tick_height <= max_tick_height); - - if last_tick_height != max_tick_height { - while let Ok((try_bank, (entry, tick_height))) = receiver.try_recv() { - // If the bank changed, that implies the previous slot was interrupted and we do not have to - // broadcast its entries. - if try_bank.slot() != slot { - warn!("Broadcast for slot: {} interrupted", bank.slot()); - entries.clear(); - bank = try_bank; - slot = bank.slot(); - max_tick_height = bank.max_tick_height(); - } - last_tick_height = tick_height; - entries.push(entry); - - if entries.len() >= RECEIVE_ENTRY_COUNT_THRESHOLD { - break; - } - - assert!(last_tick_height <= max_tick_height); - if last_tick_height == max_tick_height { - break; - } + + assert!(last_tick_height <= bank.max_tick_height()); + + // Drain channel + while last_tick_height != bank.max_tick_height() { + let (try_bank, (entry, tick_height)) = match receiver.try_recv() { + Ok(working_bank_entry) => working_bank_entry, + Err(_) => break, + }; + // If the bank changed, that implies the previous slot was interrupted and we do not have to + // broadcast its entries. + if try_bank.slot() != bank.slot() { + warn!("Broadcast for slot: {} interrupted", bank.slot()); + entries.clear(); + bank = try_bank; + } + last_tick_height = tick_height; + entries.push(entry); + assert!(last_tick_height <= bank.max_tick_height()); + } + + let mut serialized_batch_byte_count = serialized_size(&entries)?; + + // Wait up to `ENTRY_COALESCE_DURATION` to try to coalesce entries into a 32 shred batch + let mut coalesce_deadline = Instant::now() + ENTRY_COALESCE_DURATION; + while last_tick_height != bank.max_tick_height() + && serialized_batch_byte_count < target_serialized_batch_byte_count + { + let (try_bank, (entry, tick_height)) = match receiver.recv_deadline(coalesce_deadline) { + Ok(working_bank_entry) => working_bank_entry, + Err(_) => break, + }; + // If the bank changed, that implies the previous slot was interrupted and we do not have to + // broadcast its entries. + if try_bank.slot() != bank.slot() { + warn!("Broadcast for slot: {} interrupted", bank.slot()); + entries.clear(); + serialized_batch_byte_count = 8; // Vec len + bank = try_bank; + coalesce_deadline = Instant::now() + ENTRY_COALESCE_DURATION; } + last_tick_height = tick_height; + let entry_bytes = serialized_size(&entry)?; + serialized_batch_byte_count += entry_bytes; + entries.push(entry); + assert!(last_tick_height <= bank.max_tick_height()); } let time_elapsed = recv_start.elapsed(); diff --git a/ledger/src/shred.rs b/ledger/src/shred.rs index cee63cb45df57d..997b7bd3b6861b 100644 --- a/ledger/src/shred.rs +++ b/ledger/src/shred.rs @@ -51,11 +51,6 @@ #[cfg(test)] pub(crate) use shred_code::MAX_CODE_SHREDS_PER_SLOT; -pub(crate) use shred_data::ShredData; -pub use { - self::stats::{ProcessShredsStats, ShredFetchStats}, - crate::shredder::Shredder, -}; use { self::{shred_code::ShredCode, traits::Shred as _}, crate::blockstore::{self, MAX_DATA_SHREDS_PER_SLOT}, @@ -75,6 +70,13 @@ use { std::fmt::Debug, thiserror::Error, }; +pub use { + self::{ + shred_data::ShredData, + stats::{ProcessShredsStats, ShredFetchStats}, + }, + crate::shredder::Shredder, +}; mod common; mod legacy; diff --git a/ledger/src/shred/shred_data.rs b/ledger/src/shred/shred_data.rs index 777ef6feffb8cb..d6976514e22188 100644 --- a/ledger/src/shred/shred_data.rs +++ b/ledger/src/shred/shred_data.rs @@ -99,7 +99,7 @@ impl ShredData { // Maximum size of ledger data that can be embedded in a data-shred. // merkle_proof_size is the number of proof entries in the merkle tree // branch. None indicates a legacy data-shred. - pub(crate) fn capacity(merkle_proof_size: Option) -> Result { + pub fn capacity(merkle_proof_size: Option) -> Result { match merkle_proof_size { None => Ok(legacy::ShredData::CAPACITY), Some(proof_size) => merkle::ShredData::capacity(proof_size), From af63b9028697c368d4ffb451b6b1a8545cae512b Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Fri, 26 Aug 2022 02:10:02 +0000 Subject: [PATCH 064/465] Handle VoteStateUpdates for outdated roots bigger than slots in existing VoteState (backport #27323) (#27392) Handle VoteStateUpdates for outdated roots bigger than slots in existing VoteState (#27323) * Set root to latest vote in tower <= prposed vote state * fixup tests * PR comments * feature gate (cherry picked from commit ad6c2d8c5fee4246aabc353248a5b2eaa471a6be) Co-authored-by: carllin --- programs/vote/src/vote_state/mod.rs | 562 +++++++++++++++++++++++----- sdk/src/feature_set.rs | 5 + 2 files changed, 464 insertions(+), 103 deletions(-) diff --git a/programs/vote/src/vote_state/mod.rs b/programs/vote/src/vote_state/mod.rs index e21bcc395aac8f..f3ad383988263f 100644 --- a/programs/vote/src/vote_state/mod.rs +++ b/programs/vote/src/vote_state/mod.rs @@ -705,6 +705,7 @@ impl VoteState { &self, vote_state_update: &mut VoteStateUpdate, slot_hashes: &[(Slot, Hash)], + feature_set: Option<&FeatureSet>, ) -> Result<(), VoteError> { if vote_state_update.lockouts.is_empty() { return Err(VoteError::EmptySlots); @@ -736,18 +737,43 @@ impl VoteState { } // Check if the proposed root is too old - if let Some(new_proposed_root) = vote_state_update.root { - // If the root is less than the earliest slot hash in the history such that we - // cannot verify whether the slot was actually was on this fork, set the root - // to the current vote state root for safety. + let is_root_fix_enabled = feature_set + .map(|feature_set| { + feature_set.is_active(&feature_set::vote_state_update_root_fix::id()) + }) + .unwrap_or(false); + + let original_proposed_root = vote_state_update.root; + if let Some(new_proposed_root) = original_proposed_root { + // If the new proposed root `R` is less than the earliest slot hash in the history + // such that we cannot verify whether the slot was actually was on this fork, set + // the root to the latest vote in the current vote that's less than R. if earliest_slot_hash_in_history > new_proposed_root { vote_state_update.root = self.root_slot; + if is_root_fix_enabled { + let mut prev_slot = Slot::MAX; + let current_root = vote_state_update.root; + for lockout in self.votes.iter().rev() { + let is_slot_bigger_than_root = current_root + .map(|current_root| lockout.slot > current_root) + .unwrap_or(true); + // Ensure we're iterating from biggest to smallest vote in the + // current vote state + assert!(lockout.slot < prev_slot && is_slot_bigger_than_root); + if lockout.slot <= new_proposed_root { + vote_state_update.root = Some(lockout.slot); + break; + } + prev_slot = lockout.slot; + } + } } } - // index into the new proposed vote state's slots, starting with the root if it exists then - // we use this mutable root to fold the root slot case into this loop for performance - let mut check_root = vote_state_update.root; + // Index into the new proposed vote state's slots, starting with the root if it exists then + // we use this mutable root to fold checking the root slot into the below loop + // for performance + let mut root_to_check = vote_state_update.root; let mut vote_state_update_index = 0; // index into the slot_hashes, starting at the oldest known @@ -769,12 +795,12 @@ impl VoteState { // because have to ensure that every slot is actually part of the history, not just the most // recent ones while vote_state_update_index < vote_state_update.lockouts.len() && slot_hashes_index > 0 { - let proposed_vote_slot = if let Some(root) = check_root { + let proposed_vote_slot = if let Some(root) = root_to_check { root } else { vote_state_update.lockouts[vote_state_update_index].slot }; - if check_root.is_none() + if root_to_check.is_none() && vote_state_update_index > 0 && proposed_vote_slot <= vote_state_update.lockouts[vote_state_update_index - 1].slot @@ -791,7 +817,7 @@ impl VoteState { // The vote slot does not exist in the SlotHashes history because it's too old, // i.e. older than the oldest slot in the history. assert!(proposed_vote_slot < earliest_slot_hash_in_history); - if !self.contains_slot(proposed_vote_slot) && check_root.is_none() { + if !self.contains_slot(proposed_vote_slot) && root_to_check.is_none() { // If the vote slot is both: // 1) Too old // 2) Doesn't already exist in vote state @@ -799,12 +825,23 @@ impl VoteState { // Then filter it out vote_state_update_indexes_to_filter.push(vote_state_update_index); } - if check_root.is_some() { - // If the vote state update has a root < earliest_slot_hash_in_history - // then we use the current root. The only case where this can happen - // is if the current root itself is not in slot hashes. - assert!(self.root_slot.unwrap() < earliest_slot_hash_in_history); - check_root = None; + if let Some(new_proposed_root) = root_to_check { + if is_root_fix_enabled { + // 1. Because `root_to_check.is_some()`, then we know that + // we haven't checked the root yet in this loop, so + // `proposed_vote_slot` == `new_proposed_root` == `vote_state_update.root`. + assert_eq!(new_proposed_root, proposed_vote_slot); + // 2. We know from the assert earlier in the function that + // `proposed_vote_slot < earliest_slot_hash_in_history`, + // so from 1. we know that `new_proposed_root < earliest_slot_hash_in_history`. + assert!(new_proposed_root < earliest_slot_hash_in_history); + } else { + // If the vote state update has a root < earliest_slot_hash_in_history + // then we use the current root. The only case where this can happen + // is if the current root itself is not in slot hashes. + assert!(self.root_slot.unwrap() < earliest_slot_hash_in_history); + } + root_to_check = None; } else { vote_state_update_index += 1; } @@ -813,7 +850,7 @@ impl VoteState { // If the vote slot is new enough to be in the slot history, // but is not part of the slot history, then it must belong to another fork, // which means this vote state update is invalid. - if check_root.is_some() { + if root_to_check.is_some() { return Err(VoteError::RootOnDifferentFork); } else { return Err(VoteError::SlotsMismatch); @@ -829,8 +866,8 @@ impl VoteState { // Once the slot in `vote_state_update.lockouts` is found, bump to the next slot // in `vote_state_update.lockouts` and continue. If we were checking the root, // start checking the vote state instead. - if check_root.is_some() { - check_root = None; + if root_to_check.is_some() { + root_to_check = None; } else { vote_state_update_index += 1; slot_hashes_index -= 1; @@ -988,7 +1025,7 @@ impl VoteState { Ok(()) } - //`Ensure check_update_vote_state_slots_are_valid()` runs on the slots in `new_state` + // `Ensure check_update_vote_state_slots_are_valid()` runs on the slots in `new_state` // before `process_new_vote_state()` is called // This function should guarantee the following about `new_state`: @@ -1063,12 +1100,12 @@ impl VoteState { return Err(VoteError::ConfirmationTooLarge); } else if let Some(new_root) = new_root { if vote.slot <= new_root - && - // This check is necessary because - // https://github.com/ryoqun/solana/blob/df55bfb46af039cbc597cd60042d49b9d90b5961/core/src/consensus.rs#L120 - // always sets a root for even empty towers, which is then hard unwrapped here - // https://github.com/ryoqun/solana/blob/df55bfb46af039cbc597cd60042d49b9d90b5961/core/src/consensus.rs#L776 - new_root != Slot::default() + && + // This check is necessary because + // https://github.com/ryoqun/solana/blob/df55bfb46af039cbc597cd60042d49b9d90b5961/core/src/consensus.rs#L120 + // always sets a root for even empty towers, which is then hard unwrapped here + // https://github.com/ryoqun/solana/blob/df55bfb46af039cbc597cd60042d49b9d90b5961/core/src/consensus.rs#L776 + new_root != Slot::default() { return Err(VoteError::SlotSmallerThanRoot); } @@ -1679,22 +1716,42 @@ pub fn process_vote_state_update( vote_account: &mut BorrowedAccount, slot_hashes: &[SlotHash], clock: &Clock, - mut vote_state_update: VoteStateUpdate, + vote_state_update: VoteStateUpdate, signers: &HashSet, feature_set: &FeatureSet, ) -> Result<(), InstructionError> { let mut vote_state = verify_and_get_vote_state(vote_account, clock, signers)?; - vote_state.check_update_vote_state_slots_are_valid(&mut vote_state_update, slot_hashes)?; - vote_state.process_new_vote_state( - vote_state_update.lockouts, - vote_state_update.root, - vote_state_update.timestamp, + do_process_vote_state_update( + &mut vote_state, + slot_hashes, clock.epoch, + vote_state_update, Some(feature_set), )?; vote_account.set_state(&VoteStateVersions::new_current(vote_state)) } +pub fn do_process_vote_state_update( + vote_state: &mut VoteState, + slot_hashes: &[SlotHash], + epoch: u64, + mut vote_state_update: VoteStateUpdate, + feature_set: Option<&FeatureSet>, +) -> Result<(), VoteError> { + vote_state.check_update_vote_state_slots_are_valid( + &mut vote_state_update, + slot_hashes, + feature_set, + )?; + vote_state.process_new_vote_state( + vote_state_update.lockouts, + vote_state_update.root, + vote_state_update.timestamp, + epoch, + feature_set, + ) +} + pub fn create_account_with_authorized( node_pubkey: &Pubkey, authorized_voter: &Pubkey, @@ -3340,7 +3397,8 @@ mod tests { assert_eq!( empty_vote_state.check_update_vote_state_slots_are_valid( &mut vote_state_update, - &empty_slot_hashes + &empty_slot_hashes, + Some(&FeatureSet::all_enabled()) ), Err(VoteError::EmptySlots), ); @@ -3350,7 +3408,8 @@ mod tests { assert_eq!( empty_vote_state.check_update_vote_state_slots_are_valid( &mut vote_state_update, - &empty_slot_hashes + &empty_slot_hashes, + Some(&FeatureSet::all_enabled()) ), Err(VoteError::SlotsMismatch), ); @@ -3366,8 +3425,11 @@ mod tests { // should return error `VoteTooOld` let mut vote_state_update = VoteStateUpdate::from(vec![(latest_vote, 1)]); assert_eq!( - vote_state - .check_update_vote_state_slots_are_valid(&mut vote_state_update, &slot_hashes), + vote_state.check_update_vote_state_slots_are_valid( + &mut vote_state_update, + &slot_hashes, + Some(&FeatureSet::all_enabled()) + ), Err(VoteError::VoteTooOld), ); @@ -3378,48 +3440,239 @@ mod tests { let slot_hashes = build_slot_hashes(vec![earliest_slot_in_history]); let mut vote_state_update = VoteStateUpdate::from(vec![(earliest_slot_in_history - 1, 1)]); assert_eq!( - vote_state - .check_update_vote_state_slots_are_valid(&mut vote_state_update, &slot_hashes), + vote_state.check_update_vote_state_slots_are_valid( + &mut vote_state_update, + &slot_hashes, + Some(&FeatureSet::all_enabled()), + ), Err(VoteError::VoteTooOld), ); } - #[test] - fn test_check_update_vote_state_older_than_history_root() { - let slot_hashes = build_slot_hashes(vec![1, 2, 3, 4]); - let mut vote_state = build_vote_state(vec![1, 2, 3, 4], &slot_hashes); + fn run_test_check_update_vote_state_older_than_history_root( + earliest_slot_in_history: Slot, + current_vote_state_slots: Vec, + current_vote_state_root: Option, + vote_state_update_slots_and_lockouts: Vec<(Slot, u32)>, + vote_state_update_root: Slot, + expected_root: Option, + expected_vote_state: Vec, + ) { + assert!(vote_state_update_root < earliest_slot_in_history); + assert_eq!( + expected_root, + current_vote_state_slots + .iter() + .rev() + .find(|slot| **slot <= vote_state_update_root) + .cloned() + ); + let latest_slot_in_history = vote_state_update_slots_and_lockouts + .last() + .unwrap() + .0 + .max(earliest_slot_in_history); + let mut slot_hashes = build_slot_hashes( + (current_vote_state_slots.first().copied().unwrap_or(0)..=latest_slot_in_history) + .collect::>(), + ); - // Test with a `vote_state_update` where the root is less than `earliest_slot_in_history`. - // Root slot in the `vote_state_update` should be updated to match the root slot in the - // current vote state - let earliest_slot_in_history = 5; - let slot_hashes = build_slot_hashes(vec![earliest_slot_in_history, 6, 7, 8]); - let earliest_slot_in_history_hash = slot_hashes + let mut vote_state = build_vote_state(current_vote_state_slots, &slot_hashes); + vote_state.root_slot = current_vote_state_root; + + slot_hashes.retain(|slot| slot.0 >= earliest_slot_in_history); + assert!(!vote_state_update_slots_and_lockouts.is_empty()); + let vote_state_update_hash = slot_hashes .iter() - .find(|(slot, _hash)| *slot == earliest_slot_in_history) + .find(|(slot, _hash)| *slot == vote_state_update_slots_and_lockouts.last().unwrap().0) .unwrap() .1; - let mut vote_state_update = VoteStateUpdate::from(vec![(earliest_slot_in_history, 1)]); - vote_state_update.hash = earliest_slot_in_history_hash; - vote_state_update.root = Some(earliest_slot_in_history - 1); - vote_state - .check_update_vote_state_slots_are_valid(&mut vote_state_update, &slot_hashes) - .unwrap(); - assert!(vote_state.root_slot.is_none()); - assert_eq!(vote_state_update.root, vote_state.root_slot); // Test with a `vote_state_update` where the root is less than `earliest_slot_in_history`. // Root slot in the `vote_state_update` should be updated to match the root slot in the // current vote state - vote_state.root_slot = Some(0); - let mut vote_state_update = VoteStateUpdate::from(vec![(earliest_slot_in_history, 1)]); - vote_state_update.hash = earliest_slot_in_history_hash; - vote_state_update.root = Some(earliest_slot_in_history - 1); + let mut vote_state_update = VoteStateUpdate::from(vote_state_update_slots_and_lockouts); + vote_state_update.hash = vote_state_update_hash; + vote_state_update.root = Some(vote_state_update_root); vote_state - .check_update_vote_state_slots_are_valid(&mut vote_state_update, &slot_hashes) + .check_update_vote_state_slots_are_valid( + &mut vote_state_update, + &slot_hashes, + Some(&FeatureSet::all_enabled()), + ) .unwrap(); - assert_eq!(vote_state.root_slot, Some(0)); - assert_eq!(vote_state_update.root, vote_state.root_slot); + assert_eq!(vote_state_update.root, expected_root); + + // The proposed root slot should become the biggest slot in the current vote state less than + // `earliest_slot_in_history`. + assert!(do_process_vote_state_update( + &mut vote_state, + &slot_hashes, + 0, + vote_state_update.clone(), + Some(&FeatureSet::all_enabled()), + ) + .is_ok()); + assert_eq!(vote_state.root_slot, expected_root); + assert_eq!( + vote_state.votes.into_iter().collect::>(), + expected_vote_state, + ); + } + + #[test] + fn test_check_update_vote_state_older_than_history_root() { + // Test when `vote_state_update_root` is in `current_vote_state_slots` but it's not the latest + // slot + let earliest_slot_in_history = 5; + let current_vote_state_slots: Vec = vec![1, 2, 3, 4]; + let current_vote_state_root = None; + let vote_state_update_slots_and_lockouts = vec![(5, 1)]; + let vote_state_update_root = 4; + let expected_root = Some(4); + let expected_vote_state = vec![Lockout { + slot: 5, + confirmation_count: 1, + }]; + run_test_check_update_vote_state_older_than_history_root( + earliest_slot_in_history, + current_vote_state_slots, + current_vote_state_root, + vote_state_update_slots_and_lockouts, + vote_state_update_root, + expected_root, + expected_vote_state, + ); + + // Test when `vote_state_update_root` is in `current_vote_state_slots` but it's not the latest + // slot and the `current_vote_state_root.is_some()`. + let earliest_slot_in_history = 5; + let current_vote_state_slots: Vec = vec![1, 2, 3, 4]; + let current_vote_state_root = Some(0); + let vote_state_update_slots_and_lockouts = vec![(5, 1)]; + let vote_state_update_root = 4; + let expected_root = Some(4); + let expected_vote_state = vec![Lockout { + slot: 5, + confirmation_count: 1, + }]; + run_test_check_update_vote_state_older_than_history_root( + earliest_slot_in_history, + current_vote_state_slots, + current_vote_state_root, + vote_state_update_slots_and_lockouts, + vote_state_update_root, + expected_root, + expected_vote_state, + ); + + // Test when `vote_state_update_root` is in `current_vote_state_slots` but it's not the latest + // slot + let earliest_slot_in_history = 5; + let current_vote_state_slots: Vec = vec![1, 2, 3, 4]; + let current_vote_state_root = Some(0); + let vote_state_update_slots_and_lockouts = vec![(4, 2), (5, 1)]; + let vote_state_update_root = 3; + let expected_root = Some(3); + let expected_vote_state = vec![ + Lockout { + slot: 4, + confirmation_count: 2, + }, + Lockout { + slot: 5, + confirmation_count: 1, + }, + ]; + run_test_check_update_vote_state_older_than_history_root( + earliest_slot_in_history, + current_vote_state_slots, + current_vote_state_root, + vote_state_update_slots_and_lockouts, + vote_state_update_root, + expected_root, + expected_vote_state, + ); + + // Test when `vote_state_update_root` is not in `current_vote_state_slots` + let earliest_slot_in_history = 5; + let current_vote_state_slots: Vec = vec![1, 2, 4]; + let current_vote_state_root = Some(0); + let vote_state_update_slots_and_lockouts = vec![(4, 2), (5, 1)]; + let vote_state_update_root = 3; + let expected_root = Some(2); + let expected_vote_state = vec![ + Lockout { + slot: 4, + confirmation_count: 2, + }, + Lockout { + slot: 5, + confirmation_count: 1, + }, + ]; + run_test_check_update_vote_state_older_than_history_root( + earliest_slot_in_history, + current_vote_state_slots, + current_vote_state_root, + vote_state_update_slots_and_lockouts, + vote_state_update_root, + expected_root, + expected_vote_state, + ); + + // Test when the `vote_state_update_root` is smaller than all the slots in + // `current_vote_state_slots`, no roots should be set. + let earliest_slot_in_history = 4; + let current_vote_state_slots: Vec = vec![3, 4]; + let current_vote_state_root = None; + let vote_state_update_slots_and_lockouts = vec![(3, 3), (4, 2), (5, 1)]; + let vote_state_update_root = 2; + let expected_root = None; + let expected_vote_state = vec![ + Lockout { + slot: 3, + confirmation_count: 3, + }, + Lockout { + slot: 4, + confirmation_count: 2, + }, + Lockout { + slot: 5, + confirmation_count: 1, + }, + ]; + run_test_check_update_vote_state_older_than_history_root( + earliest_slot_in_history, + current_vote_state_slots, + current_vote_state_root, + vote_state_update_slots_and_lockouts, + vote_state_update_root, + expected_root, + expected_vote_state, + ); + + // Test when `current_vote_state_slots` is empty, no roots should be set + let earliest_slot_in_history = 4; + let current_vote_state_slots: Vec = vec![]; + let current_vote_state_root = None; + let vote_state_update_slots_and_lockouts = vec![(5, 1)]; + let vote_state_update_root = 2; + let expected_root = None; + let expected_vote_state = vec![Lockout { + slot: 5, + confirmation_count: 1, + }]; + run_test_check_update_vote_state_older_than_history_root( + earliest_slot_in_history, + current_vote_state_slots, + current_vote_state_root, + vote_state_update_slots_and_lockouts, + vote_state_update_root, + expected_root, + expected_vote_state, + ); } #[test] @@ -3437,8 +3690,11 @@ mod tests { let mut vote_state_update = VoteStateUpdate::from(vec![(2, 2), (1, 3), (vote_slot, 1)]); vote_state_update.hash = vote_slot_hash; assert_eq!( - vote_state - .check_update_vote_state_slots_are_valid(&mut vote_state_update, &slot_hashes), + vote_state.check_update_vote_state_slots_are_valid( + &mut vote_state_update, + &slot_hashes, + Some(&FeatureSet::all_enabled()) + ), Err(VoteError::SlotsNotOrdered), ); @@ -3446,8 +3702,11 @@ mod tests { let mut vote_state_update = VoteStateUpdate::from(vec![(2, 2), (2, 2), (vote_slot, 1)]); vote_state_update.hash = vote_slot_hash; assert_eq!( - vote_state - .check_update_vote_state_slots_are_valid(&mut vote_state_update, &slot_hashes), + vote_state.check_update_vote_state_slots_are_valid( + &mut vote_state_update, + &slot_hashes, + Some(&FeatureSet::all_enabled()), + ), Err(VoteError::SlotsNotOrdered), ); } @@ -3455,7 +3714,7 @@ mod tests { #[test] fn test_check_update_vote_state_older_than_history_slots_filtered() { let slot_hashes = build_slot_hashes(vec![1, 2, 3, 4]); - let vote_state = build_vote_state(vec![1, 2, 3, 4], &slot_hashes); + let mut vote_state = build_vote_state(vec![1, 2, 3, 4], &slot_hashes); // Test with a `vote_state_update` where there: // 1) Exists a slot less than `earliest_slot_in_history` @@ -3470,24 +3729,46 @@ mod tests { .unwrap() .1; let missing_older_than_history_slot = earliest_slot_in_history - 1; - let mut vote_state_update = - VoteStateUpdate::from(vec![(missing_older_than_history_slot, 2), (vote_slot, 3)]); + let mut vote_state_update = VoteStateUpdate::from(vec![ + (1, 4), + (missing_older_than_history_slot, 2), + (vote_slot, 3), + ]); vote_state_update.hash = vote_slot_hash; vote_state - .check_update_vote_state_slots_are_valid(&mut vote_state_update, &slot_hashes) + .check_update_vote_state_slots_are_valid( + &mut vote_state_update, + &slot_hashes, + Some(&FeatureSet::all_enabled()), + ) .unwrap(); // Check the earlier slot was filtered out assert_eq!( vote_state_update + .clone() .lockouts .into_iter() .collect::>(), - vec![Lockout { - slot: vote_slot, - confirmation_count: 3, - }] + vec![ + Lockout { + slot: 1, + confirmation_count: 4, + }, + Lockout { + slot: vote_slot, + confirmation_count: 3, + } + ] ); + assert!(do_process_vote_state_update( + &mut vote_state, + &slot_hashes, + 0, + vote_state_update, + Some(&FeatureSet::all_enabled()), + ) + .is_ok()); } #[test] @@ -3500,8 +3781,8 @@ mod tests { #[test] fn test_check_update_vote_state_older_than_history_slots_not_filtered() { - let slot_hashes = build_slot_hashes(vec![1, 2, 3, 4]); - let vote_state = build_vote_state(vec![1, 2, 3, 4], &slot_hashes); + let slot_hashes = build_slot_hashes(vec![4]); + let mut vote_state = build_vote_state(vec![4], &slot_hashes); // Test with a `vote_state_update` where there: // 1) Exists a slot less than `earliest_slot_in_history` @@ -3517,35 +3798,48 @@ mod tests { .1; let existing_older_than_history_slot = 4; let mut vote_state_update = - VoteStateUpdate::from(vec![(existing_older_than_history_slot, 2), (vote_slot, 3)]); + VoteStateUpdate::from(vec![(existing_older_than_history_slot, 3), (vote_slot, 2)]); vote_state_update.hash = vote_slot_hash; vote_state - .check_update_vote_state_slots_are_valid(&mut vote_state_update, &slot_hashes) + .check_update_vote_state_slots_are_valid( + &mut vote_state_update, + &slot_hashes, + Some(&FeatureSet::all_enabled()), + ) .unwrap(); // Check the earlier slot was *NOT* filtered out assert_eq!(vote_state_update.lockouts.len(), 2); assert_eq!( vote_state_update + .clone() .lockouts .into_iter() .collect::>(), vec![ Lockout { slot: existing_older_than_history_slot, - confirmation_count: 2, + confirmation_count: 3, }, Lockout { slot: vote_slot, - confirmation_count: 3, + confirmation_count: 2, } ] ); + assert!(do_process_vote_state_update( + &mut vote_state, + &slot_hashes, + 0, + vote_state_update, + Some(&FeatureSet::all_enabled()), + ) + .is_ok()); } #[test] fn test_check_update_vote_state_older_than_history_slots_filtered_and_not_filtered() { - let slot_hashes = build_slot_hashes(vec![1, 2, 3, 6]); - let vote_state = build_vote_state(vec![1, 2, 3, 6], &slot_hashes); + let slot_hashes = build_slot_hashes(vec![6]); + let mut vote_state = build_vote_state(vec![6], &slot_hashes); // Test with a `vote_state_update` where there exists both a slot: // 1) Less than `earliest_slot_in_history` @@ -3577,11 +3871,16 @@ mod tests { ]); vote_state_update.hash = vote_slot_hash; vote_state - .check_update_vote_state_slots_are_valid(&mut vote_state_update, &slot_hashes) + .check_update_vote_state_slots_are_valid( + &mut vote_state_update, + &slot_hashes, + Some(&FeatureSet::all_enabled()), + ) .unwrap(); assert_eq!(vote_state_update.lockouts.len(), 3); assert_eq!( vote_state_update + .clone() .lockouts .into_iter() .collect::>(), @@ -3600,6 +3899,14 @@ mod tests { } ] ); + assert!(do_process_vote_state_update( + &mut vote_state, + &slot_hashes, + 0, + vote_state_update, + Some(&FeatureSet::all_enabled()), + ) + .is_ok()); } #[test] @@ -3626,8 +3933,11 @@ mod tests { VoteStateUpdate::from(vec![(missing_vote_slot, 2), (vote_slot, 3)]); vote_state_update.hash = vote_slot_hash; assert_eq!( - vote_state - .check_update_vote_state_slots_are_valid(&mut vote_state_update, &slot_hashes), + vote_state.check_update_vote_state_slots_are_valid( + &mut vote_state_update, + &slot_hashes, + Some(&FeatureSet::all_enabled()) + ), Err(VoteError::SlotsMismatch), ); @@ -3642,8 +3952,11 @@ mod tests { ]); vote_state_update.hash = vote_slot_hash; assert_eq!( - vote_state - .check_update_vote_state_slots_are_valid(&mut vote_state_update, &slot_hashes), + vote_state.check_update_vote_state_slots_are_valid( + &mut vote_state_update, + &slot_hashes, + Some(&FeatureSet::all_enabled()) + ), Err(VoteError::SlotsMismatch), ); } @@ -3651,7 +3964,7 @@ mod tests { #[test] fn test_check_update_vote_state_root_on_different_fork() { let slot_hashes = build_slot_hashes(vec![2, 4, 6, 8]); - let vote_state = build_vote_state(vec![2, 4, 6], &slot_hashes); + let vote_state = build_vote_state(vec![6], &slot_hashes); // Test with a `vote_state_update` where: // 1) The root is not present in slot hashes history @@ -3661,8 +3974,9 @@ mod tests { let new_root = 3; // Have to vote for a slot greater than the last vote in the vote state to avoid VoteTooOld - // errors - let vote_slot = vote_state.votes.back().unwrap().slot + 2; + // errors, but also this slot must be present in SlotHashes + let vote_slot = 8; + assert_eq!(vote_slot, slot_hashes.first().unwrap().0); let vote_slot_hash = slot_hashes .iter() .find(|(slot, _hash)| *slot == vote_slot) @@ -3672,8 +3986,11 @@ mod tests { vote_state_update.hash = vote_slot_hash; vote_state_update.root = Some(new_root); assert_eq!( - vote_state - .check_update_vote_state_slots_are_valid(&mut vote_state_update, &slot_hashes), + vote_state.check_update_vote_state_slots_are_valid( + &mut vote_state_update, + &slot_hashes, + Some(&FeatureSet::all_enabled()) + ), Err(VoteError::RootOnDifferentFork), ); } @@ -3693,8 +4010,11 @@ mod tests { let mut vote_state_update = VoteStateUpdate::from(vec![(8, 2), (missing_vote_slot, 3)]); vote_state_update.hash = vote_slot_hash; assert_eq!( - vote_state - .check_update_vote_state_slots_are_valid(&mut vote_state_update, &slot_hashes), + vote_state.check_update_vote_state_slots_are_valid( + &mut vote_state_update, + &slot_hashes, + Some(&FeatureSet::all_enabled()) + ), Err(VoteError::SlotsMismatch), ); } @@ -3702,7 +4022,7 @@ mod tests { #[test] fn test_check_update_vote_state_slot_all_slot_hashes_in_update_ok() { let slot_hashes = build_slot_hashes(vec![2, 4, 6, 8]); - let vote_state = build_vote_state(vec![2, 4, 6], &slot_hashes); + let mut vote_state = build_vote_state(vec![2, 4, 6], &slot_hashes); // Test with a `vote_state_update` where every slot in the history is // in the update @@ -3719,12 +4039,17 @@ mod tests { VoteStateUpdate::from(vec![(2, 4), (4, 3), (6, 2), (vote_slot, 1)]); vote_state_update.hash = vote_slot_hash; vote_state - .check_update_vote_state_slots_are_valid(&mut vote_state_update, &slot_hashes) + .check_update_vote_state_slots_are_valid( + &mut vote_state_update, + &slot_hashes, + Some(&FeatureSet::all_enabled()), + ) .unwrap(); // Nothing in the update should have been filtered out assert_eq!( vote_state_update + .clone() .lockouts .into_iter() .collect::>(), @@ -3747,14 +4072,23 @@ mod tests { } ] ); + + assert!(do_process_vote_state_update( + &mut vote_state, + &slot_hashes, + 0, + vote_state_update, + Some(&FeatureSet::all_enabled()), + ) + .is_ok()); } #[test] fn test_check_update_vote_state_slot_some_slot_hashes_in_update_ok() { let slot_hashes = build_slot_hashes(vec![2, 4, 6, 8, 10]); - let vote_state = build_vote_state(vec![6], &slot_hashes); + let mut vote_state = build_vote_state(vec![6], &slot_hashes); - // Test with a `vote_state_update` where every only some slots in the history are + // Test with a `vote_state_update` where only some slots in the history are // in the update, and others slots in the history are missing. // Have to vote for a slot greater than the last vote in the vote state to avoid VoteTooOld @@ -3768,12 +4102,17 @@ mod tests { let mut vote_state_update = VoteStateUpdate::from(vec![(4, 2), (vote_slot, 1)]); vote_state_update.hash = vote_slot_hash; vote_state - .check_update_vote_state_slots_are_valid(&mut vote_state_update, &slot_hashes) + .check_update_vote_state_slots_are_valid( + &mut vote_state_update, + &slot_hashes, + Some(&FeatureSet::all_enabled()), + ) .unwrap(); // Nothing in the update should have been filtered out assert_eq!( vote_state_update + .clone() .lockouts .into_iter() .collect::>(), @@ -3788,6 +4127,20 @@ mod tests { } ] ); + + // Because 6 from the original VoteState + // should not have been popped off in the proposed state, + // we should get a lockout conflict + assert_eq!( + do_process_vote_state_update( + &mut vote_state, + &slot_hashes, + 0, + vote_state_update, + Some(&FeatureSet::all_enabled()) + ), + Err(VoteError::LockoutConflict) + ); } #[test] @@ -3805,8 +4158,11 @@ mod tests { VoteStateUpdate::from(vec![(2, 4), (4, 3), (6, 2), (vote_slot, 1)]); vote_state_update.hash = vote_slot_hash; assert_eq!( - vote_state - .check_update_vote_state_slots_are_valid(&mut vote_state_update, &slot_hashes), + vote_state.check_update_vote_state_slots_are_valid( + &mut vote_state_update, + &slot_hashes, + Some(&FeatureSet::all_enabled()) + ), Err(VoteError::SlotHashMismatch), ); } diff --git a/sdk/src/feature_set.rs b/sdk/src/feature_set.rs index ef07b320e0cba6..d9f054ce7e2040 100644 --- a/sdk/src/feature_set.rs +++ b/sdk/src/feature_set.rs @@ -500,6 +500,10 @@ pub mod incremental_snapshot_only_incremental_hash_calculation { solana_sdk::declare_id!("25vqsfjk7Nv1prsQJmA4Xu1bN61s8LXCBGUPp8Rfy1UF"); } +pub mod vote_state_update_root_fix { + solana_sdk::declare_id!("G74BkWBzmsByZ1kxHy44H3wjwp5hp7JbrGRuDpco22tY"); +} + lazy_static! { /// Map of feature identifiers to user-visible description pub static ref FEATURE_NAMES: HashMap = [ @@ -619,6 +623,7 @@ lazy_static! { (concurrent_replay_of_forks::id(), "Allow slots from different forks to be replayed concurrently #26465"), (check_ping_ancestor_requests::id(), "ancestor hash repair socket ping/pong support #26963"), (incremental_snapshot_only_incremental_hash_calculation::id(), "only hash accounts in incremental snapshot during incremental snapshot creation #26799"), + (vote_state_update_root_fix::id(), "fix root in vote state updates #27361"), /*************** ADD NEW FEATURES HERE ***************/ ] .iter() From eb0451714745ff59ef0f57f970b9968625531fd3 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Fri, 26 Aug 2022 04:13:22 +0000 Subject: [PATCH 065/465] fix test_rpc_subscriptions (backport #27394) (#27406) * fix test_rpc_subscriptions (#27394) * add pubkey to account sender/receiver * send tx when all subscription ready * make variables shorter * add 15 sec timeout for waiting signature/account subscription setup (cherry picked from commit c3c16997346d151eeada790b92344632a8f5aad8) # Conflicts: # rpc-test/tests/rpc.rs * fix conflicts Co-authored-by: Yihau Chen --- rpc-test/tests/rpc.rs | 77 ++++++++++++++++++++++++++++--------------- 1 file changed, 51 insertions(+), 26 deletions(-) diff --git a/rpc-test/tests/rpc.rs b/rpc-test/tests/rpc.rs index 5265e93f14f6fb..81d4338bdd8316 100644 --- a/rpc-test/tests/rpc.rs +++ b/rpc-test/tests/rpc.rs @@ -31,7 +31,10 @@ use { std::{ collections::HashSet, net::UdpSocket, - sync::Arc, + sync::{ + atomic::{AtomicUsize, Ordering}, + Arc, + }, thread::sleep, time::{Duration, Instant}, }, @@ -261,15 +264,13 @@ fn test_rpc_subscriptions() { .collect(); let mut signature_set: HashSet = transactions.iter().map(|tx| tx.signatures[0]).collect(); - let account_set: HashSet = transactions + let mut account_set: HashSet = transactions .iter() .map(|tx| tx.message.account_keys[1]) .collect(); - // Track when subscriptions are ready - let (ready_sender, ready_receiver) = unbounded::<()>(); // Track account notifications are received - let (account_sender, account_receiver) = unbounded::>(); + let (account_sender, account_receiver) = unbounded::<(Pubkey, RpcResponse)>(); // Track when status notifications are received let (status_sender, status_receiver) = unbounded::<(Signature, RpcResponse)>(); @@ -278,12 +279,19 @@ fn test_rpc_subscriptions() { let rt = Runtime::new().unwrap(); let rpc_pubsub_url = test_validator.rpc_pubsub_url(); let signature_set_clone = signature_set.clone(); + let account_set_clone = account_set.clone(); + let signature_subscription_ready = Arc::new(AtomicUsize::new(0)); + let account_subscription_ready = Arc::new(AtomicUsize::new(0)); + let signature_subscription_ready_clone = signature_subscription_ready.clone(); + let account_subscription_ready_clone = account_subscription_ready.clone(); + rt.spawn(async move { let pubsub_client = Arc::new(PubsubClient::new(&rpc_pubsub_url).await.unwrap()); // Subscribe to signature notifications for signature in signature_set_clone { let status_sender = status_sender.clone(); + let signature_subscription_ready_clone = signature_subscription_ready_clone.clone(); tokio::spawn({ let _pubsub_client = Arc::clone(&pubsub_client); async move { @@ -298,6 +306,8 @@ fn test_rpc_subscriptions() { .await .unwrap(); + signature_subscription_ready_clone.fetch_add(1, Ordering::SeqCst); + let response = sig_notifications.next().await.unwrap(); status_sender.send((signature, response)).unwrap(); sig_unsubscribe().await; @@ -306,8 +316,9 @@ fn test_rpc_subscriptions() { } // Subscribe to account notifications - for pubkey in account_set { + for pubkey in account_set_clone { let account_sender = account_sender.clone(); + let account_subscription_ready_clone = account_subscription_ready_clone.clone(); tokio::spawn({ let _pubsub_client = Arc::clone(&pubsub_client); async move { @@ -322,28 +333,43 @@ fn test_rpc_subscriptions() { .await .unwrap(); + account_subscription_ready_clone.fetch_add(1, Ordering::SeqCst); + let response = account_notifications.next().await.unwrap(); - account_sender.send(response).unwrap(); + account_sender.send((pubkey, response)).unwrap(); account_unsubscribe().await; } }); } - - // Signal ready after the next slot notification - tokio::spawn({ - let _pubsub_client = Arc::clone(&pubsub_client); - async move { - let (mut slot_notifications, slot_unsubscribe) = - _pubsub_client.slot_subscribe().await.unwrap(); - let _response = slot_notifications.next().await.unwrap(); - ready_sender.send(()).unwrap(); - slot_unsubscribe().await; - } - }); }); - // Wait for signature subscriptions - ready_receiver.recv_timeout(Duration::from_secs(2)).unwrap(); + let now = Instant::now(); + while (signature_subscription_ready.load(Ordering::SeqCst) != transactions.len() + || account_subscription_ready.load(Ordering::SeqCst) != transactions.len()) + && now.elapsed() < Duration::from_secs(15) + { + sleep(Duration::from_millis(100)) + } + + // check signature subscription + let num = signature_subscription_ready.load(Ordering::SeqCst); + if num != transactions.len() { + error!( + "signature subscription didn't setup properly, want: {}, got: {}", + transactions.len(), + num + ); + } + + // check account subscription + let num = account_subscription_ready.load(Ordering::SeqCst); + if num != transactions.len() { + error!( + "account subscriptions didn't setup properly, want: {}, got: {}", + transactions.len(), + num + ); + } let rpc_client = RpcClient::new(test_validator.rpc_url()); let mut mint_balance = rpc_client @@ -403,18 +429,17 @@ fn test_rpc_subscriptions() { } let deadline = Instant::now() + Duration::from_secs(10); - let mut account_notifications = transactions.len(); - while account_notifications > 0 { + while !account_set.is_empty() { let timeout = deadline.saturating_duration_since(Instant::now()); match account_receiver.recv_timeout(timeout) { - Ok(result) => { + Ok((pubkey, result)) => { assert_eq!(result.value.lamports, Rent::default().minimum_balance(0)); - account_notifications -= 1; + assert!(account_set.remove(&pubkey)); } Err(_err) => { panic!( "recv_timeout, {}/{} accounts remaining", - account_notifications, + account_set.len(), transactions.len() ); } From 12a947dd2dd21c34ed955c192f10fa980cf81931 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Fri, 26 Aug 2022 11:48:04 +0000 Subject: [PATCH 066/465] Fix quic staked chunking (backport #27402) (#27408) Fix quic staked chunking (#27402) (cherry picked from commit b7b03cbb056b0a918d4d26a114c852f0977cc2a9) Co-authored-by: ryleung-solana <91908731+ryleung-solana@users.noreply.github.com> --- client/src/connection_cache.rs | 14 ++++---- client/src/nonblocking/quic_client.rs | 50 +++------------------------ 2 files changed, 11 insertions(+), 53 deletions(-) diff --git a/client/src/connection_cache.rs b/client/src/connection_cache.rs index 9e5efff3f3e061..28d8f10e5e8433 100644 --- a/client/src/connection_cache.rs +++ b/client/src/connection_cache.rs @@ -320,7 +320,7 @@ impl ConnectionCache { } } - fn compute_max_parallel_chunks(&self) -> usize { + fn compute_max_parallel_streams(&self) -> usize { let (client_type, stake, total_stake) = self.maybe_client_pubkey .map_or((ConnectionPeerType::Unstaked, 0, 0), |pubkey| { @@ -370,7 +370,7 @@ impl ConnectionCache { BaseTpuConnection::Quic(Arc::new(QuicClient::new( endpoint.as_ref().unwrap().clone(), *addr, - self.compute_max_parallel_chunks(), + self.compute_max_parallel_streams(), ))) }; @@ -730,7 +730,7 @@ mod tests { solana_logger::setup(); let mut connection_cache = ConnectionCache::default(); assert_eq!( - connection_cache.compute_max_parallel_chunks(), + connection_cache.compute_max_parallel_streams(), QUIC_MAX_UNSTAKED_CONCURRENT_STREAMS ); @@ -738,13 +738,13 @@ mod tests { let pubkey = Pubkey::new_unique(); connection_cache.set_staked_nodes(&staked_nodes, &pubkey); assert_eq!( - connection_cache.compute_max_parallel_chunks(), + connection_cache.compute_max_parallel_streams(), QUIC_MAX_UNSTAKED_CONCURRENT_STREAMS ); staked_nodes.write().unwrap().total_stake = 10000; assert_eq!( - connection_cache.compute_max_parallel_chunks(), + connection_cache.compute_max_parallel_streams(), QUIC_MAX_UNSTAKED_CONCURRENT_STREAMS ); @@ -754,7 +754,7 @@ mod tests { .pubkey_stake_map .insert(pubkey, 1); assert_eq!( - connection_cache.compute_max_parallel_chunks(), + connection_cache.compute_max_parallel_streams(), QUIC_MIN_STAKED_CONCURRENT_STREAMS ); @@ -769,7 +769,7 @@ mod tests { .pubkey_stake_map .insert(pubkey, 1000); assert_ne!( - connection_cache.compute_max_parallel_chunks(), + connection_cache.compute_max_parallel_streams(), QUIC_MIN_STAKED_CONCURRENT_STREAMS ); } diff --git a/client/src/nonblocking/quic_client.rs b/client/src/nonblocking/quic_client.rs index 153937203a7a66..97d4cfdb40844c 100644 --- a/client/src/nonblocking/quic_client.rs +++ b/client/src/nonblocking/quic_client.rs @@ -263,21 +263,21 @@ pub struct QuicClient { connection: Arc>>, addr: SocketAddr, stats: Arc, - num_chunks: usize, + chunk_size: usize, } impl QuicClient { pub fn new( endpoint: Arc, addr: SocketAddr, - num_chunks: usize, + chunk_size: usize, ) -> Self { Self { endpoint, connection: Arc::new(Mutex::new(None)), addr, stats: Arc::new(ClientStats::default()), - num_chunks, + chunk_size, } } @@ -443,21 +443,6 @@ impl QuicClient { Ok(()) } - fn compute_chunk_length(num_buffers_to_chunk: usize, num_chunks: usize) -> usize { - // The function is equivalent to checked div_ceil() - // Also, if num_chunks == 0 || num_buffers_to_chunk == 0, return 1 - num_buffers_to_chunk - .checked_div(num_chunks) - .map_or(1, |value| { - if num_buffers_to_chunk.checked_rem(num_chunks).unwrap_or(0) != 0 { - value.saturating_add(1) - } else { - value - } - }) - .max(1) - } - pub async fn send_batch( &self, buffers: &[T], @@ -489,8 +474,7 @@ impl QuicClient { // by just getting a reference to the NewConnection once let connection_ref: &NewConnection = &connection; - let chunk_len = Self::compute_chunk_length(buffers.len() - 1, self.num_chunks); - let chunks = buffers[1..buffers.len()].iter().chunks(chunk_len); + let chunks = buffers[1..buffers.len()].iter().chunks(self.chunk_size); let futures: Vec<_> = chunks .into_iter() @@ -596,29 +580,3 @@ impl TpuConnection for QuicTpuConnection { Ok(()) } } - -#[cfg(test)] -mod tests { - use crate::nonblocking::quic_client::QuicClient; - - #[test] - fn test_transaction_batch_chunking() { - assert_eq!(QuicClient::compute_chunk_length(0, 0), 1); - assert_eq!(QuicClient::compute_chunk_length(10, 0), 1); - assert_eq!(QuicClient::compute_chunk_length(0, 10), 1); - assert_eq!(QuicClient::compute_chunk_length(usize::MAX, usize::MAX), 1); - assert_eq!(QuicClient::compute_chunk_length(10, usize::MAX), 1); - assert!(QuicClient::compute_chunk_length(usize::MAX, 10) == (usize::MAX / 10) + 1); - assert_eq!(QuicClient::compute_chunk_length(10, 1), 10); - assert_eq!(QuicClient::compute_chunk_length(10, 2), 5); - assert_eq!(QuicClient::compute_chunk_length(10, 3), 4); - assert_eq!(QuicClient::compute_chunk_length(10, 4), 3); - assert_eq!(QuicClient::compute_chunk_length(10, 5), 2); - assert_eq!(QuicClient::compute_chunk_length(10, 6), 2); - assert_eq!(QuicClient::compute_chunk_length(10, 7), 2); - assert_eq!(QuicClient::compute_chunk_length(10, 8), 2); - assert_eq!(QuicClient::compute_chunk_length(10, 9), 2); - assert_eq!(QuicClient::compute_chunk_length(10, 10), 1); - assert_eq!(QuicClient::compute_chunk_length(10, 11), 1); - } -} From f684ecc4174f0b82976710aa8d3d6ae248132802 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Fri, 26 Aug 2022 13:44:45 -0400 Subject: [PATCH 067/465] Verify snapshot slot deltas (backport #26666) (#27373) Verify snapshot slot deltas (#26666) (cherry picked from commit d2868f439d497f472c8a7e51e90ba9fdc759066b) Co-authored-by: Brooks Prumo --- runtime/src/accounts_background_service.rs | 1 + runtime/src/snapshot_utils.rs | 293 ++++++++++++++++++++- 2 files changed, 292 insertions(+), 2 deletions(-) diff --git a/runtime/src/accounts_background_service.rs b/runtime/src/accounts_background_service.rs index ecef608357a354..9ba12f742dafe0 100644 --- a/runtime/src/accounts_background_service.rs +++ b/runtime/src/accounts_background_service.rs @@ -370,6 +370,7 @@ impl SnapshotRequestHandler { SnapshotError::MismatchedBaseSlot(..) => true, SnapshotError::NoSnapshotArchives => true, SnapshotError::MismatchedSlotHash(..) => true, + SnapshotError::VerifySlotDeltas(..) => true, } } } diff --git a/runtime/src/snapshot_utils.rs b/runtime/src/snapshot_utils.rs index f41469baa10a06..d818367ed1b5f2 100644 --- a/runtime/src/snapshot_utils.rs +++ b/runtime/src/snapshot_utils.rs @@ -18,6 +18,7 @@ use { snapshot_package::{ AccountsPackage, PendingAccountsPackage, SnapshotPackage, SnapshotType, }, + status_cache, }, bincode::{config::Options, serialize_into}, bzip2::bufread::BzDecoder, @@ -27,7 +28,13 @@ use { rayon::prelude::*, regex::Regex, solana_measure::measure::Measure, - solana_sdk::{clock::Slot, genesis_config::GenesisConfig, hash::Hash, pubkey::Pubkey}, + solana_sdk::{ + clock::Slot, + genesis_config::GenesisConfig, + hash::Hash, + pubkey::Pubkey, + slot_history::{Check, SlotHistory}, + }, std::{ cmp::Ordering, collections::{HashMap, HashSet}, @@ -222,9 +229,37 @@ pub enum SnapshotError { #[error("snapshot has mismatch: deserialized bank: {:?}, snapshot archive info: {:?}", .0, .1)] MismatchedSlotHash((Slot, Hash), (Slot, Hash)), + + #[error("snapshot slot deltas are invalid: {0}")] + VerifySlotDeltas(#[from] VerifySlotDeltasError), } pub type Result = std::result::Result; +/// Errors that can happen in `verify_slot_deltas()` +#[derive(Error, Debug, PartialEq, Eq)] +pub enum VerifySlotDeltasError { + #[error("too many entries: {0} (max: {1})")] + TooManyEntries(usize, usize), + + #[error("slot {0} is not a root")] + SlotIsNotRoot(Slot), + + #[error("slot {0} is greater than bank slot {1}")] + SlotGreaterThanMaxRoot(Slot, Slot), + + #[error("slot {0} has multiple entries")] + SlotHasMultipleEntries(Slot), + + #[error("slot {0} was not found in slot history")] + SlotNotFoundInHistory(Slot), + + #[error("slot {0} was in history but missing from slot deltas")] + SlotNotFoundInDeltas(Slot), + + #[error("slot history is bad and cannot be used to verify slot deltas")] + BadSlotHistory, +} + /// If the validator halts in the middle of `archive_snapshot_package()`, the temporary staging /// directory won't be cleaned up. Call this function to clean them up. pub fn remove_tmp_snapshot_archives(snapshot_archives_dir: impl AsRef) { @@ -1731,6 +1766,8 @@ fn rebuild_bank_from_snapshots( Ok(slot_deltas) })?; + verify_slot_deltas(slot_deltas.as_slice(), &bank)?; + bank.status_cache.write().unwrap().append(&slot_deltas); bank.prepare_rewrites_for_hash(); @@ -1739,6 +1776,106 @@ fn rebuild_bank_from_snapshots( Ok(bank) } +/// Verify that the snapshot's slot deltas are not corrupt/invalid +fn verify_slot_deltas( + slot_deltas: &[BankSlotDelta], + bank: &Bank, +) -> std::result::Result<(), VerifySlotDeltasError> { + let info = verify_slot_deltas_structural(slot_deltas, bank.slot())?; + verify_slot_deltas_with_history(&info.slots, &bank.get_slot_history(), bank.slot()) +} + +/// Verify that the snapshot's slot deltas are not corrupt/invalid +/// These checks are simple/structural +fn verify_slot_deltas_structural( + slot_deltas: &[BankSlotDelta], + bank_slot: Slot, +) -> std::result::Result { + // there should not be more entries than that status cache's max + let num_entries = slot_deltas.len(); + if num_entries > status_cache::MAX_CACHE_ENTRIES { + return Err(VerifySlotDeltasError::TooManyEntries( + num_entries, + status_cache::MAX_CACHE_ENTRIES, + )); + } + + let mut slots_seen_so_far = HashSet::new(); + for &(slot, is_root, ..) in slot_deltas { + // all entries should be roots + if !is_root { + return Err(VerifySlotDeltasError::SlotIsNotRoot(slot)); + } + + // all entries should be for slots less than or equal to the bank's slot + if slot > bank_slot { + return Err(VerifySlotDeltasError::SlotGreaterThanMaxRoot( + slot, bank_slot, + )); + } + + // there should only be one entry per slot + let is_duplicate = !slots_seen_so_far.insert(slot); + if is_duplicate { + return Err(VerifySlotDeltasError::SlotHasMultipleEntries(slot)); + } + } + + // detect serious logic error for future careless changes. :) + assert_eq!(slots_seen_so_far.len(), slot_deltas.len()); + + Ok(VerifySlotDeltasStructuralInfo { + slots: slots_seen_so_far, + }) +} + +/// Computed information from `verify_slot_deltas_structural()`, that may be reused/useful later. +#[derive(Debug, PartialEq, Eq)] +struct VerifySlotDeltasStructuralInfo { + /// All the slots in the slot deltas + slots: HashSet, +} + +/// Verify that the snapshot's slot deltas are not corrupt/invalid +/// These checks use the slot history for verification +fn verify_slot_deltas_with_history( + slots_from_slot_deltas: &HashSet, + slot_history: &SlotHistory, + bank_slot: Slot, +) -> std::result::Result<(), VerifySlotDeltasError> { + // ensure the slot history is valid (as much as possible), since we're using it to verify the + // slot deltas + if slot_history.newest() != bank_slot { + return Err(VerifySlotDeltasError::BadSlotHistory); + } + + // all slots in the slot deltas should be in the bank's slot history + let slot_missing_from_history = slots_from_slot_deltas + .iter() + .find(|slot| slot_history.check(**slot) != Check::Found); + if let Some(slot) = slot_missing_from_history { + return Err(VerifySlotDeltasError::SlotNotFoundInHistory(*slot)); + } + + // all slots in the history should be in the slot deltas (up to MAX_CACHE_ENTRIES) + // this ensures nothing was removed from the status cache + // + // go through the slot history and make sure there's an entry for each slot + // note: it's important to go highest-to-lowest since the status cache removes + // older entries first + // note: we already checked above that `bank_slot == slot_history.newest()` + let slot_missing_from_deltas = (slot_history.oldest()..=slot_history.newest()) + .rev() + .filter(|slot| slot_history.check(*slot) == Check::Found) + .take(status_cache::MAX_CACHE_ENTRIES) + .find(|slot| !slots_from_slot_deltas.contains(slot)); + if let Some(slot) = slot_missing_from_deltas { + return Err(VerifySlotDeltasError::SlotNotFoundInDeltas(slot)); + } + + Ok(()) +} + pub(crate) fn get_snapshot_file_name(slot: Slot) -> String { slot.to_string() } @@ -2160,13 +2297,14 @@ fn can_submit_accounts_package( mod tests { use { super::*, - crate::accounts_db::ACCOUNTS_DB_CONFIG_FOR_TESTING, + crate::{accounts_db::ACCOUNTS_DB_CONFIG_FOR_TESTING, status_cache::Status}, assert_matches::assert_matches, bincode::{deserialize_from, serialize_into}, solana_sdk::{ genesis_config::create_genesis_config, native_token::sol_to_lamports, signature::{Keypair, Signer}, + slot_history::SlotHistory, system_transaction, transaction::SanitizedTransaction, }, @@ -3821,4 +3959,155 @@ mod tests { assert_eq!(expected_result, actual_result); } } + + #[test] + fn test_verify_slot_deltas_structural_good() { + // NOTE: slot deltas do not need to be sorted + let slot_deltas = vec![ + (222, true, Status::default()), + (333, true, Status::default()), + (111, true, Status::default()), + ]; + + let bank_slot = 333; + let result = verify_slot_deltas_structural(slot_deltas.as_slice(), bank_slot); + assert_eq!( + result, + Ok(VerifySlotDeltasStructuralInfo { + slots: HashSet::from([111, 222, 333]) + }) + ); + } + + #[test] + fn test_verify_slot_deltas_structural_bad_too_many_entries() { + let bank_slot = status_cache::MAX_CACHE_ENTRIES as Slot + 1; + let slot_deltas: Vec<_> = (0..bank_slot) + .map(|slot| (slot, true, Status::default())) + .collect(); + + let result = verify_slot_deltas_structural(slot_deltas.as_slice(), bank_slot); + assert_eq!( + result, + Err(VerifySlotDeltasError::TooManyEntries( + status_cache::MAX_CACHE_ENTRIES + 1, + status_cache::MAX_CACHE_ENTRIES + )), + ); + } + + #[test] + fn test_verify_slot_deltas_structural_bad_slot_not_root() { + let slot_deltas = vec![ + (111, true, Status::default()), + (222, false, Status::default()), // <-- slot is not a root + (333, true, Status::default()), + ]; + + let bank_slot = 333; + let result = verify_slot_deltas_structural(slot_deltas.as_slice(), bank_slot); + assert_eq!(result, Err(VerifySlotDeltasError::SlotIsNotRoot(222))); + } + + #[test] + fn test_verify_slot_deltas_structural_bad_slot_greater_than_bank() { + let slot_deltas = vec![ + (222, true, Status::default()), + (111, true, Status::default()), + (555, true, Status::default()), // <-- slot is greater than the bank slot + ]; + + let bank_slot = 444; + let result = verify_slot_deltas_structural(slot_deltas.as_slice(), bank_slot); + assert_eq!( + result, + Err(VerifySlotDeltasError::SlotGreaterThanMaxRoot( + 555, bank_slot + )), + ); + } + + #[test] + fn test_verify_slot_deltas_structural_bad_slot_has_multiple_entries() { + let slot_deltas = vec![ + (111, true, Status::default()), + (222, true, Status::default()), + (111, true, Status::default()), // <-- slot is a duplicate + ]; + + let bank_slot = 222; + let result = verify_slot_deltas_structural(slot_deltas.as_slice(), bank_slot); + assert_eq!( + result, + Err(VerifySlotDeltasError::SlotHasMultipleEntries(111)), + ); + } + + #[test] + fn test_verify_slot_deltas_with_history_good() { + let mut slots_from_slot_deltas = HashSet::default(); + let mut slot_history = SlotHistory::default(); + // note: slot history expects slots to be added in numeric order + for slot in [0, 111, 222, 333, 444] { + slots_from_slot_deltas.insert(slot); + slot_history.add(slot); + } + + let bank_slot = 444; + let result = + verify_slot_deltas_with_history(&slots_from_slot_deltas, &slot_history, bank_slot); + assert_eq!(result, Ok(())); + } + + #[test] + fn test_verify_slot_deltas_with_history_bad_slot_history() { + let bank_slot = 444; + let result = verify_slot_deltas_with_history( + &HashSet::default(), + &SlotHistory::default(), // <-- will only have an entry for slot 0 + bank_slot, + ); + assert_eq!(result, Err(VerifySlotDeltasError::BadSlotHistory)); + } + + #[test] + fn test_verify_slot_deltas_with_history_bad_slot_not_in_history() { + let slots_from_slot_deltas = HashSet::from([ + 0, // slot history has slot 0 added by default + 444, 222, + ]); + let mut slot_history = SlotHistory::default(); + slot_history.add(444); // <-- slot history is missing slot 222 + + let bank_slot = 444; + let result = + verify_slot_deltas_with_history(&slots_from_slot_deltas, &slot_history, bank_slot); + + assert_eq!( + result, + Err(VerifySlotDeltasError::SlotNotFoundInHistory(222)), + ); + } + + #[test] + fn test_verify_slot_deltas_with_history_bad_slot_not_in_deltas() { + let slots_from_slot_deltas = HashSet::from([ + 0, // slot history has slot 0 added by default + 444, 222, + // <-- slot deltas is missing slot 333 + ]); + let mut slot_history = SlotHistory::default(); + slot_history.add(222); + slot_history.add(333); + slot_history.add(444); + + let bank_slot = 444; + let result = + verify_slot_deltas_with_history(&slots_from_slot_deltas, &slot_history, bank_slot); + + assert_eq!( + result, + Err(VerifySlotDeltasError::SlotNotFoundInDeltas(333)), + ); + } } From 9d3f32834a49b6a81539b88d5c51026207cc4ff3 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 26 Aug 2022 13:19:11 -0500 Subject: [PATCH 068/465] Bump Version to 1.11.9 (#27420) Co-authored-by: willhickey --- Cargo.lock | 484 ++++++++--------- account-decoder/Cargo.toml | 8 +- accounts-bench/Cargo.toml | 12 +- accounts-cluster-bench/Cargo.toml | 34 +- banking-bench/Cargo.toml | 26 +- banks-client/Cargo.toml | 12 +- banks-interface/Cargo.toml | 4 +- banks-server/Cargo.toml | 12 +- bench-streamer/Cargo.toml | 8 +- bench-tps/Cargo.toml | 38 +- bloom/Cargo.toml | 8 +- bucket_map/Cargo.toml | 8 +- clap-utils/Cargo.toml | 8 +- clap-v3-utils/Cargo.toml | 8 +- cli-config/Cargo.toml | 6 +- cli-output/Cargo.toml | 16 +- cli/Cargo.toml | 36 +- client-test/Cargo.toml | 32 +- client/Cargo.toml | 28 +- core/Cargo.toml | 56 +- docs/src/developing/clients/jsonrpc-api.md | 4 +- dos/Cargo.toml | 30 +- download-utils/Cargo.toml | 6 +- entry/Cargo.toml | 16 +- faucet/Cargo.toml | 14 +- frozen-abi/Cargo.toml | 6 +- frozen-abi/macro/Cargo.toml | 2 +- genesis-utils/Cargo.toml | 8 +- genesis/Cargo.toml | 22 +- geyser-plugin-interface/Cargo.toml | 6 +- geyser-plugin-manager/Cargo.toml | 16 +- gossip/Cargo.toml | 38 +- install/Cargo.toml | 14 +- keygen/Cargo.toml | 12 +- ledger-tool/Cargo.toml | 30 +- ledger/Cargo.toml | 40 +- local-cluster/Cargo.toml | 28 +- log-analyzer/Cargo.toml | 6 +- logger/Cargo.toml | 2 +- measure/Cargo.toml | 4 +- merkle-root-bench/Cargo.toml | 12 +- merkle-tree/Cargo.toml | 4 +- metrics/Cargo.toml | 4 +- net-shaper/Cargo.toml | 4 +- net-utils/Cargo.toml | 8 +- notifier/Cargo.toml | 2 +- perf/Cargo.toml | 12 +- poh-bench/Cargo.toml | 14 +- poh/Cargo.toml | 20 +- program-runtime/Cargo.toml | 14 +- program-test/Cargo.toml | 18 +- .../address-lookup-table-tests/Cargo.toml | 8 +- programs/address-lookup-table/Cargo.toml | 12 +- programs/bpf-loader-tests/Cargo.toml | 8 +- programs/bpf/Cargo.lock | 490 +++++++++--------- programs/bpf/Cargo.toml | 28 +- programs/bpf/rust/128bit/Cargo.toml | 6 +- programs/bpf/rust/128bit_dep/Cargo.toml | 4 +- programs/bpf/rust/alloc/Cargo.toml | 4 +- programs/bpf/rust/call_depth/Cargo.toml | 4 +- programs/bpf/rust/caller_access/Cargo.toml | 4 +- programs/bpf/rust/curve25519/Cargo.toml | 6 +- programs/bpf/rust/custom_heap/Cargo.toml | 4 +- programs/bpf/rust/dep_crate/Cargo.toml | 6 +- .../bpf/rust/deprecated_loader/Cargo.toml | 4 +- programs/bpf/rust/dup_accounts/Cargo.toml | 4 +- programs/bpf/rust/error_handling/Cargo.toml | 4 +- programs/bpf/rust/external_spend/Cargo.toml | 4 +- programs/bpf/rust/finalize/Cargo.toml | 4 +- .../rust/get_minimum_delegation/Cargo.toml | 4 +- .../Cargo.toml | 4 +- .../rust/instruction_introspection/Cargo.toml | 4 +- programs/bpf/rust/invoke/Cargo.toml | 4 +- programs/bpf/rust/invoke_and_error/Cargo.toml | 4 +- programs/bpf/rust/invoke_and_ok/Cargo.toml | 4 +- .../bpf/rust/invoke_and_return/Cargo.toml | 4 +- programs/bpf/rust/invoked/Cargo.toml | 4 +- programs/bpf/rust/iter/Cargo.toml | 4 +- programs/bpf/rust/log_data/Cargo.toml | 4 +- programs/bpf/rust/many_args/Cargo.toml | 6 +- programs/bpf/rust/many_args_dep/Cargo.toml | 4 +- programs/bpf/rust/mem/Cargo.toml | 10 +- programs/bpf/rust/membuiltins/Cargo.toml | 6 +- programs/bpf/rust/noop/Cargo.toml | 4 +- programs/bpf/rust/panic/Cargo.toml | 4 +- programs/bpf/rust/param_passing/Cargo.toml | 6 +- .../bpf/rust/param_passing_dep/Cargo.toml | 4 +- programs/bpf/rust/rand/Cargo.toml | 4 +- programs/bpf/rust/realloc/Cargo.toml | 4 +- programs/bpf/rust/realloc_invoke/Cargo.toml | 6 +- .../bpf/rust/ro_account_modify/Cargo.toml | 4 +- programs/bpf/rust/ro_modify/Cargo.toml | 4 +- programs/bpf/rust/sanity/Cargo.toml | 10 +- .../bpf/rust/secp256k1_recover/Cargo.toml | 4 +- programs/bpf/rust/sha/Cargo.toml | 4 +- .../rust/sibling_inner_instruction/Cargo.toml | 4 +- .../bpf/rust/sibling_instruction/Cargo.toml | 4 +- programs/bpf/rust/simulation/Cargo.toml | 12 +- programs/bpf/rust/spoof1/Cargo.toml | 4 +- programs/bpf/rust/spoof1_system/Cargo.toml | 4 +- programs/bpf/rust/sysvar/Cargo.toml | 10 +- programs/bpf/rust/upgradeable/Cargo.toml | 4 +- programs/bpf/rust/upgraded/Cargo.toml | 4 +- programs/bpf_loader/Cargo.toml | 14 +- .../bpf_loader/gen-syscall-list/Cargo.toml | 2 +- programs/compute-budget/Cargo.toml | 6 +- programs/config/Cargo.toml | 8 +- programs/ed25519-tests/Cargo.toml | 6 +- programs/stake/Cargo.toml | 18 +- programs/vote/Cargo.toml | 14 +- programs/zk-token-proof/Cargo.toml | 8 +- rayon-threadlimit/Cargo.toml | 2 +- rbpf-cli/Cargo.toml | 10 +- remote-wallet/Cargo.toml | 4 +- rpc-test/Cargo.toml | 18 +- rpc/Cargo.toml | 48 +- runtime/Cargo.toml | 34 +- runtime/store-tool/Cargo.toml | 8 +- sdk/Cargo.toml | 12 +- sdk/cargo-build-bpf/Cargo.toml | 4 +- sdk/cargo-build-sbf/Cargo.toml | 8 +- .../tests/crates/fail/Cargo.toml | 4 +- .../tests/crates/noop/Cargo.toml | 4 +- sdk/cargo-test-bpf/Cargo.toml | 2 +- sdk/cargo-test-sbf/Cargo.toml | 2 +- sdk/gen-headers/Cargo.toml | 2 +- sdk/macro/Cargo.toml | 2 +- sdk/program/Cargo.toml | 10 +- send-transaction-service/Cargo.toml | 14 +- stake-accounts/Cargo.toml | 16 +- storage-bigtable/Cargo.toml | 10 +- storage-bigtable/build-proto/Cargo.lock | 2 +- storage-bigtable/build-proto/Cargo.toml | 2 +- storage-proto/Cargo.toml | 8 +- streamer/Cargo.toml | 10 +- sys-tuner/Cargo.toml | 6 +- test-validator/Cargo.toml | 28 +- tokens/Cargo.toml | 24 +- transaction-dos/Cargo.toml | 32 +- transaction-status/Cargo.toml | 12 +- upload-perf/Cargo.toml | 4 +- validator/Cargo.toml | 50 +- version/Cargo.toml | 8 +- watchtower/Cargo.toml | 20 +- zk-token-sdk/Cargo.toml | 6 +- 145 files changed, 1268 insertions(+), 1268 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 980f52554ec646..34587e3ab9c4d5 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1686,7 +1686,7 @@ dependencies = [ [[package]] name = "gen-headers" -version = "1.11.8" +version = "1.11.9" dependencies = [ "log", "regex", @@ -1694,7 +1694,7 @@ dependencies = [ [[package]] name = "gen-syscall-list" -version = "1.11.8" +version = "1.11.9" dependencies = [ "regex", ] @@ -3754,15 +3754,15 @@ dependencies = [ [[package]] name = "rbpf-cli" -version = "1.11.8" +version = "1.11.9" dependencies = [ "clap 3.1.8", "serde", "serde_json", "solana-bpf-loader-program", - "solana-logger 1.11.8", + "solana-logger 1.11.9", "solana-program-runtime", - "solana-sdk 1.11.8", + "solana-sdk 1.11.9", "solana_rbpf", ] @@ -4473,7 +4473,7 @@ dependencies = [ [[package]] name = "solana-account-decoder" -version = "1.11.8" +version = "1.11.9" dependencies = [ "Inflector", "base64 0.13.0", @@ -4485,7 +4485,7 @@ dependencies = [ "serde_derive", "serde_json", "solana-config-program", - "solana-sdk 1.11.8", + "solana-sdk 1.11.9", "solana-vote-program", "spl-token", "spl-token-2022", @@ -4495,21 +4495,21 @@ dependencies = [ [[package]] name = "solana-accounts-bench" -version = "1.11.8" +version = "1.11.9" dependencies = [ "clap 2.33.3", "log", "rayon", - "solana-logger 1.11.8", + "solana-logger 1.11.9", "solana-measure", "solana-runtime", - "solana-sdk 1.11.8", + "solana-sdk 1.11.9", "solana-version", ] [[package]] name = "solana-accounts-cluster-bench" -version = "1.11.8" +version = "1.11.9" dependencies = [ "clap 2.33.3", "log", @@ -4522,11 +4522,11 @@ dependencies = [ "solana-faucet", "solana-gossip", "solana-local-cluster", - "solana-logger 1.11.8", + "solana-logger 1.11.9", "solana-measure", "solana-net-utils", "solana-runtime", - "solana-sdk 1.11.8", + "solana-sdk 1.11.9", "solana-streamer", "solana-test-validator", "solana-transaction-status", @@ -4536,7 +4536,7 @@ dependencies = [ [[package]] name = "solana-address-lookup-table-program" -version = "1.11.8" +version = "1.11.9" dependencies = [ "bincode", "bytemuck", @@ -4545,28 +4545,28 @@ dependencies = [ "num-traits", "rustc_version 0.4.0", "serde", - "solana-frozen-abi 1.11.8", - "solana-frozen-abi-macro 1.11.8", - "solana-program 1.11.8", + "solana-frozen-abi 1.11.9", + "solana-frozen-abi-macro 1.11.9", + "solana-program 1.11.9", "solana-program-runtime", - "solana-sdk 1.11.8", + "solana-sdk 1.11.9", "thiserror", ] [[package]] name = "solana-address-lookup-table-program-tests" -version = "1.11.8" +version = "1.11.9" dependencies = [ "assert_matches", "bincode", "solana-address-lookup-table-program", "solana-program-test", - "solana-sdk 1.11.8", + "solana-sdk 1.11.9", ] [[package]] name = "solana-banking-bench" -version = "1.11.8" +version = "1.11.9" dependencies = [ "clap 3.1.8", "crossbeam-channel", @@ -4577,27 +4577,27 @@ dependencies = [ "solana-core", "solana-gossip", "solana-ledger", - "solana-logger 1.11.8", + "solana-logger 1.11.9", "solana-measure", "solana-perf", "solana-poh", "solana-runtime", - "solana-sdk 1.11.8", + "solana-sdk 1.11.9", "solana-streamer", "solana-version", ] [[package]] name = "solana-banks-client" -version = "1.11.8" +version = "1.11.9" dependencies = [ "borsh", "futures 0.3.21", "solana-banks-interface", "solana-banks-server", - "solana-program 1.11.8", + "solana-program 1.11.9", "solana-runtime", - "solana-sdk 1.11.8", + "solana-sdk 1.11.9", "tarpc", "thiserror", "tokio", @@ -4606,16 +4606,16 @@ dependencies = [ [[package]] name = "solana-banks-interface" -version = "1.11.8" +version = "1.11.9" dependencies = [ "serde", - "solana-sdk 1.11.8", + "solana-sdk 1.11.9", "tarpc", ] [[package]] name = "solana-banks-server" -version = "1.11.8" +version = "1.11.9" dependencies = [ "bincode", "crossbeam-channel", @@ -4623,7 +4623,7 @@ dependencies = [ "solana-banks-interface", "solana-client", "solana-runtime", - "solana-sdk 1.11.8", + "solana-sdk 1.11.9", "solana-send-transaction-service", "tarpc", "tokio", @@ -4633,7 +4633,7 @@ dependencies = [ [[package]] name = "solana-bench-streamer" -version = "1.11.8" +version = "1.11.9" dependencies = [ "clap 3.1.8", "crossbeam-channel", @@ -4644,7 +4644,7 @@ dependencies = [ [[package]] name = "solana-bench-tps" -version = "1.11.8" +version = "1.11.9" dependencies = [ "clap 2.33.3", "crossbeam-channel", @@ -4661,13 +4661,13 @@ dependencies = [ "solana-genesis", "solana-gossip", "solana-local-cluster", - "solana-logger 1.11.8", + "solana-logger 1.11.9", "solana-measure", "solana-metrics", "solana-net-utils", "solana-rpc", "solana-runtime", - "solana-sdk 1.11.8", + "solana-sdk 1.11.9", "solana-streamer", "solana-test-validator", "solana-version", @@ -4676,7 +4676,7 @@ dependencies = [ [[package]] name = "solana-bloom" -version = "1.11.8" +version = "1.11.9" dependencies = [ "bv", "fnv", @@ -4686,14 +4686,14 @@ dependencies = [ "rustc_version 0.4.0", "serde", "serde_derive", - "solana-frozen-abi 1.11.8", - "solana-frozen-abi-macro 1.11.8", - "solana-sdk 1.11.8", + "solana-frozen-abi 1.11.9", + "solana-frozen-abi-macro 1.11.9", + "solana-sdk 1.11.9", ] [[package]] name = "solana-bpf-loader-program" -version = "1.11.8" +version = "1.11.9" dependencies = [ "bincode", "byteorder", @@ -4704,26 +4704,26 @@ dependencies = [ "solana-metrics", "solana-program-runtime", "solana-runtime", - "solana-sdk 1.11.8", - "solana-zk-token-sdk 1.11.8", + "solana-sdk 1.11.9", + "solana-zk-token-sdk 1.11.9", "solana_rbpf", "thiserror", ] [[package]] name = "solana-bpf-loader-program-tests" -version = "1.11.8" +version = "1.11.9" dependencies = [ "assert_matches", "bincode", "solana-bpf-loader-program", "solana-program-test", - "solana-sdk 1.11.8", + "solana-sdk 1.11.9", ] [[package]] name = "solana-bucket-map" -version = "1.11.8" +version = "1.11.9" dependencies = [ "fs_extra", "log", @@ -4731,24 +4731,24 @@ dependencies = [ "modular-bitfield", "rand 0.7.3", "rayon", - "solana-logger 1.11.8", + "solana-logger 1.11.9", "solana-measure", - "solana-sdk 1.11.8", + "solana-sdk 1.11.9", "tempfile", ] [[package]] name = "solana-cargo-build-bpf" -version = "1.11.8" +version = "1.11.9" dependencies = [ "cargo_metadata", "clap 3.1.8", - "solana-sdk 1.11.8", + "solana-sdk 1.11.9", ] [[package]] name = "solana-cargo-build-sbf" -version = "1.11.8" +version = "1.11.9" dependencies = [ "bzip2", "cargo_metadata", @@ -4757,14 +4757,14 @@ dependencies = [ "regex", "serial_test", "solana-download-utils", - "solana-logger 1.11.8", - "solana-sdk 1.11.8", + "solana-logger 1.11.9", + "solana-sdk 1.11.9", "tar", ] [[package]] name = "solana-cargo-test-bpf" -version = "1.11.8" +version = "1.11.9" dependencies = [ "cargo_metadata", "clap 3.1.8", @@ -4772,7 +4772,7 @@ dependencies = [ [[package]] name = "solana-cargo-test-sbf" -version = "1.11.8" +version = "1.11.9" dependencies = [ "cargo_metadata", "clap 3.1.8", @@ -4780,14 +4780,14 @@ dependencies = [ [[package]] name = "solana-clap-utils" -version = "1.11.8" +version = "1.11.9" dependencies = [ "chrono", "clap 2.33.3", "rpassword", "solana-perf", "solana-remote-wallet", - "solana-sdk 1.11.8", + "solana-sdk 1.11.9", "tempfile", "thiserror", "tiny-bip39", @@ -4797,14 +4797,14 @@ dependencies = [ [[package]] name = "solana-clap-v3-utils" -version = "1.11.8" +version = "1.11.9" dependencies = [ "chrono", "clap 3.1.8", "rpassword", "solana-perf", "solana-remote-wallet", - "solana-sdk 1.11.8", + "solana-sdk 1.11.9", "tempfile", "thiserror", "tiny-bip39", @@ -4814,7 +4814,7 @@ dependencies = [ [[package]] name = "solana-cli" -version = "1.11.8" +version = "1.11.9" dependencies = [ "bincode", "bs58", @@ -4841,10 +4841,10 @@ dependencies = [ "solana-client", "solana-config-program", "solana-faucet", - "solana-logger 1.11.8", + "solana-logger 1.11.9", "solana-program-runtime", "solana-remote-wallet", - "solana-sdk 1.11.8", + "solana-sdk 1.11.9", "solana-streamer", "solana-test-validator", "solana-transaction-status", @@ -4859,7 +4859,7 @@ dependencies = [ [[package]] name = "solana-cli-config" -version = "1.11.8" +version = "1.11.9" dependencies = [ "anyhow", "dirs-next", @@ -4868,13 +4868,13 @@ dependencies = [ "serde_derive", "serde_yaml", "solana-clap-utils", - "solana-sdk 1.11.8", + "solana-sdk 1.11.9", "url 2.2.2", ] [[package]] name = "solana-cli-output" -version = "1.11.8" +version = "1.11.9" dependencies = [ "Inflector", "base64 0.13.0", @@ -4892,7 +4892,7 @@ dependencies = [ "solana-clap-utils", "solana-cli-config", "solana-client", - "solana-sdk 1.11.8", + "solana-sdk 1.11.9", "solana-transaction-status", "solana-vote-program", "spl-memo", @@ -4900,7 +4900,7 @@ dependencies = [ [[package]] name = "solana-client" -version = "1.11.8" +version = "1.11.9" dependencies = [ "anyhow", "assert_matches", @@ -4936,12 +4936,12 @@ dependencies = [ "solana-account-decoder", "solana-clap-utils", "solana-faucet", - "solana-logger 1.11.8", + "solana-logger 1.11.9", "solana-measure", "solana-metrics", "solana-net-utils", "solana-perf", - "solana-sdk 1.11.8", + "solana-sdk 1.11.9", "solana-streamer", "solana-transaction-status", "solana-version", @@ -4957,14 +4957,14 @@ dependencies = [ [[package]] name = "solana-client-test" -version = "1.11.8" +version = "1.11.9" dependencies = [ "futures-util", "serde_json", "serial_test", "solana-client", "solana-ledger", - "solana-logger 1.11.8", + "solana-logger 1.11.9", "solana-measure", "solana-merkle-tree", "solana-metrics", @@ -4972,7 +4972,7 @@ dependencies = [ "solana-rayon-threadlimit", "solana-rpc", "solana-runtime", - "solana-sdk 1.11.8", + "solana-sdk 1.11.9", "solana-streamer", "solana-test-validator", "solana-transaction-status", @@ -4983,28 +4983,28 @@ dependencies = [ [[package]] name = "solana-compute-budget-program" -version = "1.11.8" +version = "1.11.9" dependencies = [ "solana-program-runtime", - "solana-sdk 1.11.8", + "solana-sdk 1.11.9", ] [[package]] name = "solana-config-program" -version = "1.11.8" +version = "1.11.9" dependencies = [ "bincode", "chrono", "serde", "serde_derive", - "solana-logger 1.11.8", + "solana-logger 1.11.9", "solana-program-runtime", - "solana-sdk 1.11.8", + "solana-sdk 1.11.9", ] [[package]] name = "solana-core" -version = "1.11.8" +version = "1.11.9" dependencies = [ "ahash", "base64 0.13.0", @@ -5036,12 +5036,12 @@ dependencies = [ "solana-bloom", "solana-client", "solana-entry", - "solana-frozen-abi 1.11.8", - "solana-frozen-abi-macro 1.11.8", + "solana-frozen-abi 1.11.9", + "solana-frozen-abi-macro 1.11.9", "solana-geyser-plugin-manager", "solana-gossip", "solana-ledger", - "solana-logger 1.11.8", + "solana-logger 1.11.9", "solana-measure", "solana-metrics", "solana-net-utils", @@ -5051,7 +5051,7 @@ dependencies = [ "solana-rayon-threadlimit", "solana-rpc", "solana-runtime", - "solana-sdk 1.11.8", + "solana-sdk 1.11.9", "solana-send-transaction-service", "solana-stake-program", "solana-streamer", @@ -5071,7 +5071,7 @@ dependencies = [ [[package]] name = "solana-dos" -version = "1.11.8" +version = "1.11.9" dependencies = [ "bincode", "clap 3.1.8", @@ -5087,42 +5087,42 @@ dependencies = [ "solana-faucet", "solana-gossip", "solana-local-cluster", - "solana-logger 1.11.8", + "solana-logger 1.11.9", "solana-measure", "solana-net-utils", "solana-perf", "solana-rpc", - "solana-sdk 1.11.8", + "solana-sdk 1.11.9", "solana-streamer", "solana-version", ] [[package]] name = "solana-download-utils" -version = "1.11.8" +version = "1.11.9" dependencies = [ "console", "indicatif", "log", "reqwest", "solana-runtime", - "solana-sdk 1.11.8", + "solana-sdk 1.11.9", ] [[package]] name = "solana-ed25519-program-tests" -version = "1.11.8" +version = "1.11.9" dependencies = [ "assert_matches", "ed25519-dalek", "rand 0.7.3", "solana-program-test", - "solana-sdk 1.11.8", + "solana-sdk 1.11.9", ] [[package]] name = "solana-entry" -version = "1.11.8" +version = "1.11.9" dependencies = [ "bincode", "crossbeam-channel", @@ -5134,18 +5134,18 @@ dependencies = [ "rand 0.7.3", "rayon", "serde", - "solana-logger 1.11.8", + "solana-logger 1.11.9", "solana-measure", "solana-merkle-tree", "solana-metrics", "solana-perf", "solana-rayon-threadlimit", - "solana-sdk 1.11.8", + "solana-sdk 1.11.9", ] [[package]] name = "solana-faucet" -version = "1.11.8" +version = "1.11.9" dependencies = [ "bincode", "byteorder", @@ -5156,9 +5156,9 @@ dependencies = [ "serde_derive", "solana-clap-utils", "solana-cli-config", - "solana-logger 1.11.8", + "solana-logger 1.11.9", "solana-metrics", - "solana-sdk 1.11.8", + "solana-sdk 1.11.9", "solana-version", "spl-memo", "thiserror", @@ -5189,7 +5189,7 @@ dependencies = [ [[package]] name = "solana-frozen-abi" -version = "1.11.8" +version = "1.11.9" dependencies = [ "ahash", "blake3", @@ -5214,8 +5214,8 @@ dependencies = [ "serde_derive", "serde_json", "sha2 0.10.2", - "solana-frozen-abi-macro 1.11.8", - "solana-logger 1.11.8", + "solana-frozen-abi-macro 1.11.9", + "solana-logger 1.11.9", "subtle", "thiserror", ] @@ -5234,7 +5234,7 @@ dependencies = [ [[package]] name = "solana-frozen-abi-macro" -version = "1.11.8" +version = "1.11.9" dependencies = [ "proc-macro2 1.0.41", "quote 1.0.18", @@ -5244,7 +5244,7 @@ dependencies = [ [[package]] name = "solana-genesis" -version = "1.11.8" +version = "1.11.9" dependencies = [ "base64 0.13.0", "clap 2.33.3", @@ -5255,9 +5255,9 @@ dependencies = [ "solana-cli-config", "solana-entry", "solana-ledger", - "solana-logger 1.11.8", + "solana-logger 1.11.9", "solana-runtime", - "solana-sdk 1.11.8", + "solana-sdk 1.11.9", "solana-stake-program", "solana-version", "solana-vote-program", @@ -5266,26 +5266,26 @@ dependencies = [ [[package]] name = "solana-genesis-utils" -version = "1.11.8" +version = "1.11.9" dependencies = [ "solana-download-utils", "solana-runtime", - "solana-sdk 1.11.8", + "solana-sdk 1.11.9", ] [[package]] name = "solana-geyser-plugin-interface" -version = "1.11.8" +version = "1.11.9" dependencies = [ "log", - "solana-sdk 1.11.8", + "solana-sdk 1.11.9", "solana-transaction-status", "thiserror", ] [[package]] name = "solana-geyser-plugin-manager" -version = "1.11.8" +version = "1.11.9" dependencies = [ "bs58", "crossbeam-channel", @@ -5298,14 +5298,14 @@ dependencies = [ "solana-metrics", "solana-rpc", "solana-runtime", - "solana-sdk 1.11.8", + "solana-sdk 1.11.9", "solana-transaction-status", "thiserror", ] [[package]] name = "solana-gossip" -version = "1.11.8" +version = "1.11.9" dependencies = [ "bincode", "bv", @@ -5332,17 +5332,17 @@ dependencies = [ "solana-clap-utils", "solana-client", "solana-entry", - "solana-frozen-abi 1.11.8", - "solana-frozen-abi-macro 1.11.8", + "solana-frozen-abi 1.11.9", + "solana-frozen-abi-macro 1.11.9", "solana-ledger", - "solana-logger 1.11.8", + "solana-logger 1.11.9", "solana-measure", "solana-metrics", "solana-net-utils", "solana-perf", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.11.8", + "solana-sdk 1.11.9", "solana-streamer", "solana-version", "solana-vote-program", @@ -5351,7 +5351,7 @@ dependencies = [ [[package]] name = "solana-install" -version = "1.11.8" +version = "1.11.9" dependencies = [ "atty", "bincode", @@ -5372,8 +5372,8 @@ dependencies = [ "solana-clap-utils", "solana-client", "solana-config-program", - "solana-logger 1.11.8", - "solana-sdk 1.11.8", + "solana-logger 1.11.9", + "solana-sdk 1.11.9", "solana-version", "tar", "tempfile", @@ -5384,7 +5384,7 @@ dependencies = [ [[package]] name = "solana-keygen" -version = "1.11.8" +version = "1.11.9" dependencies = [ "bs58", "clap 3.1.8", @@ -5393,14 +5393,14 @@ dependencies = [ "solana-clap-v3-utils", "solana-cli-config", "solana-remote-wallet", - "solana-sdk 1.11.8", + "solana-sdk 1.11.9", "solana-version", "tiny-bip39", ] [[package]] name = "solana-ledger" -version = "1.11.8" +version = "1.11.9" dependencies = [ "assert_matches", "bincode", @@ -5434,16 +5434,16 @@ dependencies = [ "solana-account-decoder", "solana-bpf-loader-program", "solana-entry", - "solana-frozen-abi 1.11.8", - "solana-frozen-abi-macro 1.11.8", - "solana-logger 1.11.8", + "solana-frozen-abi 1.11.9", + "solana-frozen-abi-macro 1.11.9", + "solana-logger 1.11.9", "solana-measure", "solana-metrics", "solana-perf", "solana-program-runtime", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.11.8", + "solana-sdk 1.11.9", "solana-stake-program", "solana-storage-bigtable", "solana-storage-proto", @@ -5462,7 +5462,7 @@ dependencies = [ [[package]] name = "solana-ledger-tool" -version = "1.11.8" +version = "1.11.9" dependencies = [ "assert_cmd", "bs58", @@ -5484,10 +5484,10 @@ dependencies = [ "solana-core", "solana-entry", "solana-ledger", - "solana-logger 1.11.8", + "solana-logger 1.11.9", "solana-measure", "solana-runtime", - "solana-sdk 1.11.8", + "solana-sdk 1.11.9", "solana-stake-program", "solana-storage-bigtable", "solana-transaction-status", @@ -5499,7 +5499,7 @@ dependencies = [ [[package]] name = "solana-local-cluster" -version = "1.11.8" +version = "1.11.9" dependencies = [ "assert_matches", "crossbeam-channel", @@ -5517,9 +5517,9 @@ dependencies = [ "solana-entry", "solana-gossip", "solana-ledger", - "solana-logger 1.11.8", + "solana-logger 1.11.9", "solana-runtime", - "solana-sdk 1.11.8", + "solana-sdk 1.11.9", "solana-stake-program", "solana-streamer", "solana-vote-program", @@ -5528,13 +5528,13 @@ dependencies = [ [[package]] name = "solana-log-analyzer" -version = "1.11.8" +version = "1.11.9" dependencies = [ "byte-unit", "clap 3.1.8", "serde", "serde_json", - "solana-logger 1.11.8", + "solana-logger 1.11.9", "solana-version", ] @@ -5551,7 +5551,7 @@ dependencies = [ [[package]] name = "solana-logger" -version = "1.11.8" +version = "1.11.9" dependencies = [ "env_logger", "lazy_static", @@ -5560,38 +5560,38 @@ dependencies = [ [[package]] name = "solana-measure" -version = "1.11.8" +version = "1.11.9" dependencies = [ "log", - "solana-sdk 1.11.8", + "solana-sdk 1.11.9", ] [[package]] name = "solana-merkle-root-bench" -version = "1.11.8" +version = "1.11.9" dependencies = [ "clap 2.33.3", "log", - "solana-logger 1.11.8", + "solana-logger 1.11.9", "solana-measure", "solana-runtime", - "solana-sdk 1.11.8", + "solana-sdk 1.11.9", "solana-version", ] [[package]] name = "solana-merkle-tree" -version = "1.11.8" +version = "1.11.9" dependencies = [ "fast-math", "hex", "matches", - "solana-program 1.11.8", + "solana-program 1.11.9", ] [[package]] name = "solana-metrics" -version = "1.11.8" +version = "1.11.9" dependencies = [ "crossbeam-channel", "env_logger", @@ -5601,23 +5601,23 @@ dependencies = [ "rand 0.7.3", "reqwest", "serial_test", - "solana-sdk 1.11.8", + "solana-sdk 1.11.9", ] [[package]] name = "solana-net-shaper" -version = "1.11.8" +version = "1.11.9" dependencies = [ "clap 3.1.8", "rand 0.7.3", "serde", "serde_json", - "solana-logger 1.11.8", + "solana-logger 1.11.9", ] [[package]] name = "solana-net-utils" -version = "1.11.8" +version = "1.11.9" dependencies = [ "bincode", "clap 3.1.8", @@ -5628,8 +5628,8 @@ dependencies = [ "serde", "serde_derive", "socket2", - "solana-logger 1.11.8", - "solana-sdk 1.11.8", + "solana-logger 1.11.9", + "solana-sdk 1.11.9", "solana-version", "tokio", "url 2.2.2", @@ -5637,7 +5637,7 @@ dependencies = [ [[package]] name = "solana-notifier" -version = "1.11.8" +version = "1.11.9" dependencies = [ "log", "reqwest", @@ -5646,7 +5646,7 @@ dependencies = [ [[package]] name = "solana-perf" -version = "1.11.8" +version = "1.11.9" dependencies = [ "ahash", "bincode", @@ -5664,16 +5664,16 @@ dependencies = [ "rand 0.7.3", "rayon", "serde", - "solana-logger 1.11.8", + "solana-logger 1.11.9", "solana-metrics", "solana-rayon-threadlimit", - "solana-sdk 1.11.8", + "solana-sdk 1.11.9", "solana-vote-program", ] [[package]] name = "solana-poh" -version = "1.11.8" +version = "1.11.9" dependencies = [ "bincode", "core_affinity", @@ -5683,29 +5683,29 @@ dependencies = [ "rand 0.7.3", "solana-entry", "solana-ledger", - "solana-logger 1.11.8", + "solana-logger 1.11.9", "solana-measure", "solana-metrics", "solana-perf", "solana-runtime", - "solana-sdk 1.11.8", + "solana-sdk 1.11.9", "solana-sys-tuner", "thiserror", ] [[package]] name = "solana-poh-bench" -version = "1.11.8" +version = "1.11.9" dependencies = [ "clap 3.1.8", "log", "rand 0.7.3", "rayon", "solana-entry", - "solana-logger 1.11.8", + "solana-logger 1.11.9", "solana-measure", "solana-perf", - "solana-sdk 1.11.8", + "solana-sdk 1.11.9", "solana-version", ] @@ -5753,7 +5753,7 @@ dependencies = [ [[package]] name = "solana-program" -version = "1.11.8" +version = "1.11.9" dependencies = [ "anyhow", "assert_matches", @@ -5791,10 +5791,10 @@ dependencies = [ "serde_json", "sha2 0.10.2", "sha3 0.10.1", - "solana-frozen-abi 1.11.8", - "solana-frozen-abi-macro 1.11.8", - "solana-logger 1.11.8", - "solana-sdk-macro 1.11.8", + "solana-frozen-abi 1.11.9", + "solana-frozen-abi-macro 1.11.9", + "solana-logger 1.11.9", + "solana-sdk-macro 1.11.9", "static_assertions", "thiserror", "tiny-bip39", @@ -5804,7 +5804,7 @@ dependencies = [ [[package]] name = "solana-program-runtime" -version = "1.11.8" +version = "1.11.9" dependencies = [ "base64 0.13.0", "bincode", @@ -5818,18 +5818,18 @@ dependencies = [ "num-traits", "rustc_version 0.4.0", "serde", - "solana-frozen-abi 1.11.8", - "solana-frozen-abi-macro 1.11.8", - "solana-logger 1.11.8", + "solana-frozen-abi 1.11.9", + "solana-frozen-abi-macro 1.11.9", + "solana-logger 1.11.9", "solana-measure", "solana-metrics", - "solana-sdk 1.11.8", + "solana-sdk 1.11.9", "thiserror", ] [[package]] name = "solana-program-test" -version = "1.11.8" +version = "1.11.9" dependencies = [ "assert_matches", "async-trait", @@ -5841,10 +5841,10 @@ dependencies = [ "solana-banks-client", "solana-banks-server", "solana-bpf-loader-program", - "solana-logger 1.11.8", + "solana-logger 1.11.9", "solana-program-runtime", "solana-runtime", - "solana-sdk 1.11.8", + "solana-sdk 1.11.9", "solana-vote-program", "thiserror", "tokio", @@ -5852,7 +5852,7 @@ dependencies = [ [[package]] name = "solana-rayon-threadlimit" -version = "1.11.8" +version = "1.11.9" dependencies = [ "lazy_static", "num_cpus", @@ -5860,7 +5860,7 @@ dependencies = [ [[package]] name = "solana-remote-wallet" -version = "1.11.8" +version = "1.11.9" dependencies = [ "console", "dialoguer", @@ -5871,14 +5871,14 @@ dependencies = [ "parking_lot 0.12.1", "qstring", "semver 1.0.10", - "solana-sdk 1.11.8", + "solana-sdk 1.11.9", "thiserror", "uriparse", ] [[package]] name = "solana-rpc" -version = "1.11.8" +version = "1.11.9" dependencies = [ "base64 0.13.0", "bincode", @@ -5914,7 +5914,7 @@ dependencies = [ "solana-poh", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.11.8", + "solana-sdk 1.11.9", "solana-send-transaction-service", "solana-stake-program", "solana-storage-bigtable", @@ -5933,7 +5933,7 @@ dependencies = [ [[package]] name = "solana-rpc-test" -version = "1.11.8" +version = "1.11.9" dependencies = [ "bincode", "bs58", @@ -5945,9 +5945,9 @@ dependencies = [ "serde_json", "solana-account-decoder", "solana-client", - "solana-logger 1.11.8", + "solana-logger 1.11.9", "solana-rpc", - "solana-sdk 1.11.8", + "solana-sdk 1.11.9", "solana-streamer", "solana-test-validator", "solana-transaction-status", @@ -5956,7 +5956,7 @@ dependencies = [ [[package]] name = "solana-runtime" -version = "1.11.8" +version = "1.11.9" dependencies = [ "arrayref", "assert_matches", @@ -5996,18 +5996,18 @@ dependencies = [ "solana-bucket-map", "solana-compute-budget-program", "solana-config-program", - "solana-frozen-abi 1.11.8", - "solana-frozen-abi-macro 1.11.8", - "solana-logger 1.11.8", + "solana-frozen-abi 1.11.9", + "solana-frozen-abi-macro 1.11.9", + "solana-logger 1.11.9", "solana-measure", "solana-metrics", "solana-program-runtime", "solana-rayon-threadlimit", - "solana-sdk 1.11.8", + "solana-sdk 1.11.9", "solana-stake-program", "solana-vote-program", "solana-zk-token-proof-program", - "solana-zk-token-sdk 1.11.8", + "solana-zk-token-sdk 1.11.9", "strum", "strum_macros", "symlink", @@ -6070,7 +6070,7 @@ dependencies = [ [[package]] name = "solana-sdk" -version = "1.11.8" +version = "1.11.9" dependencies = [ "anyhow", "assert_matches", @@ -6110,11 +6110,11 @@ dependencies = [ "serde_json", "sha2 0.10.2", "sha3 0.10.1", - "solana-frozen-abi 1.11.8", - "solana-frozen-abi-macro 1.11.8", - "solana-logger 1.11.8", - "solana-program 1.11.8", - "solana-sdk-macro 1.11.8", + "solana-frozen-abi 1.11.9", + "solana-frozen-abi-macro 1.11.9", + "solana-logger 1.11.9", + "solana-program 1.11.9", + "solana-sdk-macro 1.11.9", "static_assertions", "thiserror", "tiny-bip39", @@ -6137,7 +6137,7 @@ dependencies = [ [[package]] name = "solana-sdk-macro" -version = "1.11.8" +version = "1.11.9" dependencies = [ "bs58", "proc-macro2 1.0.41", @@ -6148,21 +6148,21 @@ dependencies = [ [[package]] name = "solana-send-transaction-service" -version = "1.11.8" +version = "1.11.9" dependencies = [ "crossbeam-channel", "log", "solana-client", - "solana-logger 1.11.8", + "solana-logger 1.11.9", "solana-measure", "solana-metrics", "solana-runtime", - "solana-sdk 1.11.8", + "solana-sdk 1.11.9", ] [[package]] name = "solana-stake-accounts" -version = "1.11.8" +version = "1.11.9" dependencies = [ "clap 2.33.3", "solana-clap-utils", @@ -6170,13 +6170,13 @@ dependencies = [ "solana-client", "solana-remote-wallet", "solana-runtime", - "solana-sdk 1.11.8", + "solana-sdk 1.11.9", "solana-stake-program", ] [[package]] name = "solana-stake-program" -version = "1.11.8" +version = "1.11.9" dependencies = [ "assert_matches", "bincode", @@ -6188,12 +6188,12 @@ dependencies = [ "serde", "serde_derive", "solana-config-program", - "solana-frozen-abi 1.11.8", - "solana-frozen-abi-macro 1.11.8", - "solana-logger 1.11.8", + "solana-frozen-abi 1.11.9", + "solana-frozen-abi-macro 1.11.9", + "solana-logger 1.11.9", "solana-metrics", "solana-program-runtime", - "solana-sdk 1.11.8", + "solana-sdk 1.11.9", "solana-vote-program", "test-case", "thiserror", @@ -6201,7 +6201,7 @@ dependencies = [ [[package]] name = "solana-storage-bigtable" -version = "1.11.8" +version = "1.11.9" dependencies = [ "backoff", "bincode", @@ -6222,7 +6222,7 @@ dependencies = [ "serde_derive", "smpl_jwt", "solana-metrics", - "solana-sdk 1.11.8", + "solana-sdk 1.11.9", "solana-storage-proto", "solana-transaction-status", "thiserror", @@ -6233,7 +6233,7 @@ dependencies = [ [[package]] name = "solana-storage-proto" -version = "1.11.8" +version = "1.11.9" dependencies = [ "bincode", "bs58", @@ -6242,25 +6242,25 @@ dependencies = [ "protobuf-src", "serde", "solana-account-decoder", - "solana-sdk 1.11.8", + "solana-sdk 1.11.9", "solana-transaction-status", "tonic-build 0.8.0", ] [[package]] name = "solana-store-tool" -version = "1.11.8" +version = "1.11.9" dependencies = [ "clap 2.33.3", "log", - "solana-logger 1.11.8", + "solana-logger 1.11.9", "solana-runtime", "solana-version", ] [[package]] name = "solana-streamer" -version = "1.11.8" +version = "1.11.9" dependencies = [ "crossbeam-channel", "futures-util", @@ -6277,10 +6277,10 @@ dependencies = [ "rand 0.7.3", "rcgen", "rustls 0.20.6", - "solana-logger 1.11.8", + "solana-logger 1.11.9", "solana-metrics", "solana-perf", - "solana-sdk 1.11.8", + "solana-sdk 1.11.9", "thiserror", "tokio", "x509-parser", @@ -6288,13 +6288,13 @@ dependencies = [ [[package]] name = "solana-sys-tuner" -version = "1.11.8" +version = "1.11.9" dependencies = [ "clap 2.33.3", "libc", "log", "nix", - "solana-logger 1.11.8", + "solana-logger 1.11.9", "solana-version", "sysctl", "unix_socket2", @@ -6303,7 +6303,7 @@ dependencies = [ [[package]] name = "solana-test-validator" -version = "1.11.8" +version = "1.11.9" dependencies = [ "base64 0.13.0", "log", @@ -6314,20 +6314,20 @@ dependencies = [ "solana-core", "solana-gossip", "solana-ledger", - "solana-logger 1.11.8", + "solana-logger 1.11.9", "solana-net-utils", "solana-program-runtime", "solana-program-test", "solana-rpc", "solana-runtime", - "solana-sdk 1.11.8", + "solana-sdk 1.11.9", "solana-streamer", "tokio", ] [[package]] name = "solana-tokens" -version = "1.11.8" +version = "1.11.9" dependencies = [ "bincode", "chrono", @@ -6343,9 +6343,9 @@ dependencies = [ "solana-clap-utils", "solana-cli-config", "solana-client", - "solana-logger 1.11.8", + "solana-logger 1.11.9", "solana-remote-wallet", - "solana-sdk 1.11.8", + "solana-sdk 1.11.9", "solana-streamer", "solana-test-validator", "solana-transaction-status", @@ -6358,7 +6358,7 @@ dependencies = [ [[package]] name = "solana-transaction-dos" -version = "1.11.8" +version = "1.11.9" dependencies = [ "bincode", "clap 2.33.3", @@ -6372,11 +6372,11 @@ dependencies = [ "solana-faucet", "solana-gossip", "solana-local-cluster", - "solana-logger 1.11.8", + "solana-logger 1.11.9", "solana-measure", "solana-net-utils", "solana-runtime", - "solana-sdk 1.11.8", + "solana-sdk 1.11.9", "solana-streamer", "solana-transaction-status", "solana-version", @@ -6384,7 +6384,7 @@ dependencies = [ [[package]] name = "solana-transaction-status" -version = "1.11.8" +version = "1.11.9" dependencies = [ "Inflector", "base64 0.13.0", @@ -6399,7 +6399,7 @@ dependencies = [ "solana-account-decoder", "solana-measure", "solana-metrics", - "solana-sdk 1.11.8", + "solana-sdk 1.11.9", "solana-vote-program", "spl-associated-token-account", "spl-memo", @@ -6410,7 +6410,7 @@ dependencies = [ [[package]] name = "solana-upload-perf" -version = "1.11.8" +version = "1.11.9" dependencies = [ "serde_json", "solana-metrics", @@ -6418,7 +6418,7 @@ dependencies = [ [[package]] name = "solana-validator" -version = "1.11.8" +version = "1.11.9" dependencies = [ "chrono", "clap 2.33.3", @@ -6449,14 +6449,14 @@ dependencies = [ "solana-genesis-utils", "solana-gossip", "solana-ledger", - "solana-logger 1.11.8", + "solana-logger 1.11.9", "solana-metrics", "solana-net-utils", "solana-perf", "solana-poh", "solana-rpc", "solana-runtime", - "solana-sdk 1.11.8", + "solana-sdk 1.11.9", "solana-send-transaction-service", "solana-storage-bigtable", "solana-streamer", @@ -6469,21 +6469,21 @@ dependencies = [ [[package]] name = "solana-version" -version = "1.11.8" +version = "1.11.9" dependencies = [ "log", "rustc_version 0.4.0", "semver 1.0.10", "serde", "serde_derive", - "solana-frozen-abi 1.11.8", - "solana-frozen-abi-macro 1.11.8", - "solana-sdk 1.11.8", + "solana-frozen-abi 1.11.9", + "solana-frozen-abi-macro 1.11.9", + "solana-sdk 1.11.9", ] [[package]] name = "solana-vote-program" -version = "1.11.8" +version = "1.11.9" dependencies = [ "bincode", "log", @@ -6492,18 +6492,18 @@ dependencies = [ "rustc_version 0.4.0", "serde", "serde_derive", - "solana-frozen-abi 1.11.8", - "solana-frozen-abi-macro 1.11.8", - "solana-logger 1.11.8", + "solana-frozen-abi 1.11.9", + "solana-frozen-abi-macro 1.11.9", + "solana-logger 1.11.9", "solana-metrics", "solana-program-runtime", - "solana-sdk 1.11.8", + "solana-sdk 1.11.9", "thiserror", ] [[package]] name = "solana-watchtower" -version = "1.11.8" +version = "1.11.9" dependencies = [ "clap 2.33.3", "humantime", @@ -6512,24 +6512,24 @@ dependencies = [ "solana-cli-config", "solana-cli-output", "solana-client", - "solana-logger 1.11.8", + "solana-logger 1.11.9", "solana-metrics", "solana-notifier", - "solana-sdk 1.11.8", + "solana-sdk 1.11.9", "solana-version", ] [[package]] name = "solana-zk-token-proof-program" -version = "1.11.8" +version = "1.11.9" dependencies = [ "bytemuck", "getrandom 0.1.16", "num-derive", "num-traits", "solana-program-runtime", - "solana-sdk 1.11.8", - "solana-zk-token-sdk 1.11.8", + "solana-sdk 1.11.9", + "solana-zk-token-sdk 1.11.9", ] [[package]] @@ -6564,7 +6564,7 @@ dependencies = [ [[package]] name = "solana-zk-token-sdk" -version = "1.11.8" +version = "1.11.9" dependencies = [ "aes-gcm-siv", "arrayref", @@ -6583,8 +6583,8 @@ dependencies = [ "serde", "serde_json", "sha3 0.9.1", - "solana-program 1.11.8", - "solana-sdk 1.11.8", + "solana-program 1.11.9", + "solana-sdk 1.11.9", "subtle", "thiserror", "zeroize", diff --git a/account-decoder/Cargo.toml b/account-decoder/Cargo.toml index 12a90b879634a2..8bbcfbb403f481 100644 --- a/account-decoder/Cargo.toml +++ b/account-decoder/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-account-decoder" -version = "1.11.8" +version = "1.11.9" description = "Solana account decoder" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -19,9 +19,9 @@ lazy_static = "1.4.0" serde = "1.0.138" serde_derive = "1.0.103" serde_json = "1.0.81" -solana-config-program = { path = "../programs/config", version = "=1.11.8" } -solana-sdk = { path = "../sdk", version = "=1.11.8" } -solana-vote-program = { path = "../programs/vote", version = "=1.11.8" } +solana-config-program = { path = "../programs/config", version = "=1.11.9" } +solana-sdk = { path = "../sdk", version = "=1.11.9" } +solana-vote-program = { path = "../programs/vote", version = "=1.11.9" } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } spl-token-2022 = { version = "=0.4.2", features = ["no-entrypoint"] } thiserror = "1.0" diff --git a/accounts-bench/Cargo.toml b/accounts-bench/Cargo.toml index 019882104cc86c..eb7b45101e77ab 100644 --- a/accounts-bench/Cargo.toml +++ b/accounts-bench/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-accounts-bench" -version = "1.11.8" +version = "1.11.9" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -12,11 +12,11 @@ publish = false clap = "2.33.1" log = "0.4.17" rayon = "1.5.3" -solana-logger = { path = "../logger", version = "=1.11.8" } -solana-measure = { path = "../measure", version = "=1.11.8" } -solana-runtime = { path = "../runtime", version = "=1.11.8" } -solana-sdk = { path = "../sdk", version = "=1.11.8" } -solana-version = { path = "../version", version = "=1.11.8" } +solana-logger = { path = "../logger", version = "=1.11.9" } +solana-measure = { path = "../measure", version = "=1.11.9" } +solana-runtime = { path = "../runtime", version = "=1.11.9" } +solana-sdk = { path = "../sdk", version = "=1.11.9" } +solana-version = { path = "../version", version = "=1.11.9" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/accounts-cluster-bench/Cargo.toml b/accounts-cluster-bench/Cargo.toml index 8a6441a6ad771d..d373c14bd1085f 100644 --- a/accounts-cluster-bench/Cargo.toml +++ b/accounts-cluster-bench/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-accounts-cluster-bench" -version = "1.11.8" +version = "1.11.9" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -13,25 +13,25 @@ clap = "2.33.1" log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" -solana-account-decoder = { path = "../account-decoder", version = "=1.11.8" } -solana-clap-utils = { path = "../clap-utils", version = "=1.11.8" } -solana-client = { path = "../client", version = "=1.11.8" } -solana-faucet = { path = "../faucet", version = "=1.11.8" } -solana-gossip = { path = "../gossip", version = "=1.11.8" } -solana-logger = { path = "../logger", version = "=1.11.8" } -solana-measure = { path = "../measure", version = "=1.11.8" } -solana-net-utils = { path = "../net-utils", version = "=1.11.8" } -solana-runtime = { path = "../runtime", version = "=1.11.8" } -solana-sdk = { path = "../sdk", version = "=1.11.8" } -solana-streamer = { path = "../streamer", version = "=1.11.8" } -solana-transaction-status = { path = "../transaction-status", version = "=1.11.8" } -solana-version = { path = "../version", version = "=1.11.8" } +solana-account-decoder = { path = "../account-decoder", version = "=1.11.9" } +solana-clap-utils = { path = "../clap-utils", version = "=1.11.9" } +solana-client = { path = "../client", version = "=1.11.9" } +solana-faucet = { path = "../faucet", version = "=1.11.9" } +solana-gossip = { path = "../gossip", version = "=1.11.9" } +solana-logger = { path = "../logger", version = "=1.11.9" } +solana-measure = { path = "../measure", version = "=1.11.9" } +solana-net-utils = { path = "../net-utils", version = "=1.11.9" } +solana-runtime = { path = "../runtime", version = "=1.11.9" } +solana-sdk = { path = "../sdk", version = "=1.11.9" } +solana-streamer = { path = "../streamer", version = "=1.11.9" } +solana-transaction-status = { path = "../transaction-status", version = "=1.11.9" } +solana-version = { path = "../version", version = "=1.11.9" } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } [dev-dependencies] -solana-core = { path = "../core", version = "=1.11.8" } -solana-local-cluster = { path = "../local-cluster", version = "=1.11.8" } -solana-test-validator = { path = "../test-validator", version = "=1.11.8" } +solana-core = { path = "../core", version = "=1.11.9" } +solana-local-cluster = { path = "../local-cluster", version = "=1.11.9" } +solana-test-validator = { path = "../test-validator", version = "=1.11.9" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/banking-bench/Cargo.toml b/banking-bench/Cargo.toml index 11b919ec9df418..5818e6994562e7 100644 --- a/banking-bench/Cargo.toml +++ b/banking-bench/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-banking-bench" -version = "1.11.8" +version = "1.11.9" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,18 +14,18 @@ crossbeam-channel = "0.5" log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" -solana-client = { path = "../client", version = "=1.11.8" } -solana-core = { path = "../core", version = "=1.11.8" } -solana-gossip = { path = "../gossip", version = "=1.11.8" } -solana-ledger = { path = "../ledger", version = "=1.11.8" } -solana-logger = { path = "../logger", version = "=1.11.8" } -solana-measure = { path = "../measure", version = "=1.11.8" } -solana-perf = { path = "../perf", version = "=1.11.8" } -solana-poh = { path = "../poh", version = "=1.11.8" } -solana-runtime = { path = "../runtime", version = "=1.11.8" } -solana-sdk = { path = "../sdk", version = "=1.11.8" } -solana-streamer = { path = "../streamer", version = "=1.11.8" } -solana-version = { path = "../version", version = "=1.11.8" } +solana-client = { path = "../client", version = "=1.11.9" } +solana-core = { path = "../core", version = "=1.11.9" } +solana-gossip = { path = "../gossip", version = "=1.11.9" } +solana-ledger = { path = "../ledger", version = "=1.11.9" } +solana-logger = { path = "../logger", version = "=1.11.9" } +solana-measure = { path = "../measure", version = "=1.11.9" } +solana-perf = { path = "../perf", version = "=1.11.9" } +solana-poh = { path = "../poh", version = "=1.11.9" } +solana-runtime = { path = "../runtime", version = "=1.11.9" } +solana-sdk = { path = "../sdk", version = "=1.11.9" } +solana-streamer = { path = "../streamer", version = "=1.11.9" } +solana-version = { path = "../version", version = "=1.11.9" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/banks-client/Cargo.toml b/banks-client/Cargo.toml index 38a696c5e163f0..9bb2e87dd54768 100644 --- a/banks-client/Cargo.toml +++ b/banks-client/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-banks-client" -version = "1.11.8" +version = "1.11.9" description = "Solana banks client" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,17 +12,17 @@ edition = "2021" [dependencies] borsh = "0.9.3" futures = "0.3" -solana-banks-interface = { path = "../banks-interface", version = "=1.11.8" } -solana-program = { path = "../sdk/program", version = "=1.11.8" } -solana-sdk = { path = "../sdk", version = "=1.11.8" } +solana-banks-interface = { path = "../banks-interface", version = "=1.11.9" } +solana-program = { path = "../sdk/program", version = "=1.11.9" } +solana-sdk = { path = "../sdk", version = "=1.11.9" } tarpc = { version = "0.29.0", features = ["full"] } thiserror = "1.0" tokio = { version = "~1.14.1", features = ["full"] } tokio-serde = { version = "0.8", features = ["bincode"] } [dev-dependencies] -solana-banks-server = { path = "../banks-server", version = "=1.11.8" } -solana-runtime = { path = "../runtime", version = "=1.11.8" } +solana-banks-server = { path = "../banks-server", version = "=1.11.9" } +solana-runtime = { path = "../runtime", version = "=1.11.9" } [lib] crate-type = ["lib"] diff --git a/banks-interface/Cargo.toml b/banks-interface/Cargo.toml index 82ca0b7aac19e0..e6ae2fd21dc740 100644 --- a/banks-interface/Cargo.toml +++ b/banks-interface/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-banks-interface" -version = "1.11.8" +version = "1.11.9" description = "Solana banks RPC interface" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -11,7 +11,7 @@ edition = "2021" [dependencies] serde = { version = "1.0.138", features = ["derive"] } -solana-sdk = { path = "../sdk", version = "=1.11.8" } +solana-sdk = { path = "../sdk", version = "=1.11.9" } tarpc = { version = "0.29.0", features = ["full"] } [lib] diff --git a/banks-server/Cargo.toml b/banks-server/Cargo.toml index 2e937de1dc27e3..90fbaa8b038934 100644 --- a/banks-server/Cargo.toml +++ b/banks-server/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-banks-server" -version = "1.11.8" +version = "1.11.9" description = "Solana banks server" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,11 +13,11 @@ edition = "2021" bincode = "1.3.3" crossbeam-channel = "0.5" futures = "0.3" -solana-banks-interface = { path = "../banks-interface", version = "=1.11.8" } -solana-client = { path = "../client", version = "=1.11.8" } -solana-runtime = { path = "../runtime", version = "=1.11.8" } -solana-sdk = { path = "../sdk", version = "=1.11.8" } -solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.11.8" } +solana-banks-interface = { path = "../banks-interface", version = "=1.11.9" } +solana-client = { path = "../client", version = "=1.11.9" } +solana-runtime = { path = "../runtime", version = "=1.11.9" } +solana-sdk = { path = "../sdk", version = "=1.11.9" } +solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.11.9" } tarpc = { version = "0.29.0", features = ["full"] } tokio = { version = "1", features = ["full"] } tokio-serde = { version = "0.8", features = ["bincode"] } diff --git a/bench-streamer/Cargo.toml b/bench-streamer/Cargo.toml index d6c4ee876f8b33..9a3100c0848972 100644 --- a/bench-streamer/Cargo.toml +++ b/bench-streamer/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-bench-streamer" -version = "1.11.8" +version = "1.11.9" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -11,9 +11,9 @@ publish = false [dependencies] clap = { version = "3.1.5", features = ["cargo"] } crossbeam-channel = "0.5" -solana-net-utils = { path = "../net-utils", version = "=1.11.8" } -solana-streamer = { path = "../streamer", version = "=1.11.8" } -solana-version = { path = "../version", version = "=1.11.8" } +solana-net-utils = { path = "../net-utils", version = "=1.11.9" } +solana-streamer = { path = "../streamer", version = "=1.11.9" } +solana-version = { path = "../version", version = "=1.11.9" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/bench-tps/Cargo.toml b/bench-tps/Cargo.toml index 03bc3e27d47f0e..5da232d02f7e14 100644 --- a/bench-tps/Cargo.toml +++ b/bench-tps/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-bench-tps" -version = "1.11.8" +version = "1.11.9" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -15,28 +15,28 @@ log = "0.4.17" rayon = "1.5.3" serde_json = "1.0.81" serde_yaml = "0.8.26" -solana-clap-utils = { path = "../clap-utils", version = "=1.11.8" } -solana-cli-config = { path = "../cli-config", version = "=1.11.8" } -solana-client = { path = "../client", version = "=1.11.8" } -solana-core = { path = "../core", version = "=1.11.8" } -solana-faucet = { path = "../faucet", version = "=1.11.8" } -solana-genesis = { path = "../genesis", version = "=1.11.8" } -solana-gossip = { path = "../gossip", version = "=1.11.8" } -solana-logger = { path = "../logger", version = "=1.11.8" } -solana-measure = { path = "../measure", version = "=1.11.8" } -solana-metrics = { path = "../metrics", version = "=1.11.8" } -solana-net-utils = { path = "../net-utils", version = "=1.11.8" } -solana-rpc = { path = "../rpc", version = "=1.11.8" } -solana-runtime = { path = "../runtime", version = "=1.11.8" } -solana-sdk = { path = "../sdk", version = "=1.11.8" } -solana-streamer = { path = "../streamer", version = "=1.11.8" } -solana-version = { path = "../version", version = "=1.11.8" } +solana-clap-utils = { path = "../clap-utils", version = "=1.11.9" } +solana-cli-config = { path = "../cli-config", version = "=1.11.9" } +solana-client = { path = "../client", version = "=1.11.9" } +solana-core = { path = "../core", version = "=1.11.9" } +solana-faucet = { path = "../faucet", version = "=1.11.9" } +solana-genesis = { path = "../genesis", version = "=1.11.9" } +solana-gossip = { path = "../gossip", version = "=1.11.9" } +solana-logger = { path = "../logger", version = "=1.11.9" } +solana-measure = { path = "../measure", version = "=1.11.9" } +solana-metrics = { path = "../metrics", version = "=1.11.9" } +solana-net-utils = { path = "../net-utils", version = "=1.11.9" } +solana-rpc = { path = "../rpc", version = "=1.11.9" } +solana-runtime = { path = "../runtime", version = "=1.11.9" } +solana-sdk = { path = "../sdk", version = "=1.11.9" } +solana-streamer = { path = "../streamer", version = "=1.11.9" } +solana-version = { path = "../version", version = "=1.11.9" } thiserror = "1.0" [dev-dependencies] serial_test = "0.8.0" -solana-local-cluster = { path = "../local-cluster", version = "=1.11.8" } -solana-test-validator = { path = "../test-validator", version = "=1.11.8" } +solana-local-cluster = { path = "../local-cluster", version = "=1.11.9" } +solana-test-validator = { path = "../test-validator", version = "=1.11.9" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/bloom/Cargo.toml b/bloom/Cargo.toml index d51961f673d686..e4a40fa3f2354e 100644 --- a/bloom/Cargo.toml +++ b/bloom/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bloom" -version = "1.11.8" +version = "1.11.9" description = "Solana bloom filter" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -17,9 +17,9 @@ rand = "0.7.0" rayon = "1.5.3" serde = { version = "1.0.138", features = ["rc"] } serde_derive = "1.0.103" -solana-frozen-abi = { path = "../frozen-abi", version = "=1.11.8" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.11.8" } -solana-sdk = { path = "../sdk", version = "=1.11.8" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.11.9" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.11.9" } +solana-sdk = { path = "../sdk", version = "=1.11.9" } [lib] crate-type = ["lib"] diff --git a/bucket_map/Cargo.toml b/bucket_map/Cargo.toml index e94ffcc4e2975d..f4a691785df0e4 100644 --- a/bucket_map/Cargo.toml +++ b/bucket_map/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bucket-map" -version = "1.11.8" +version = "1.11.9" description = "solana-bucket-map" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-bucket-map" @@ -15,14 +15,14 @@ log = { version = "0.4.17" } memmap2 = "0.5.3" modular-bitfield = "0.11.2" rand = "0.7.0" -solana-measure = { path = "../measure", version = "=1.11.8" } -solana-sdk = { path = "../sdk", version = "=1.11.8" } +solana-measure = { path = "../measure", version = "=1.11.9" } +solana-sdk = { path = "../sdk", version = "=1.11.9" } tempfile = "3.3.0" [dev-dependencies] fs_extra = "1.2.0" rayon = "1.5.3" -solana-logger = { path = "../logger", version = "=1.11.8" } +solana-logger = { path = "../logger", version = "=1.11.9" } [lib] crate-type = ["lib"] diff --git a/clap-utils/Cargo.toml b/clap-utils/Cargo.toml index d84f72040f6f0f..0a95c8f867a319 100644 --- a/clap-utils/Cargo.toml +++ b/clap-utils/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-clap-utils" -version = "1.11.8" +version = "1.11.9" description = "Solana utilities for the clap" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,9 +13,9 @@ edition = "2021" chrono = "0.4" clap = "2.33.0" rpassword = "6.0" -solana-perf = { path = "../perf", version = "=1.11.8" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.11.8", default-features = false } -solana-sdk = { path = "../sdk", version = "=1.11.8" } +solana-perf = { path = "../perf", version = "=1.11.9" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.11.9", default-features = false } +solana-sdk = { path = "../sdk", version = "=1.11.9" } thiserror = "1.0.31" tiny-bip39 = "0.8.2" uriparse = "0.6.4" diff --git a/clap-v3-utils/Cargo.toml b/clap-v3-utils/Cargo.toml index 08685e8ba20b56..f0ee9e1fca6513 100644 --- a/clap-v3-utils/Cargo.toml +++ b/clap-v3-utils/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-clap-v3-utils" -version = "1.11.8" +version = "1.11.9" description = "Solana utilities for the clap v3" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,9 +13,9 @@ edition = "2021" chrono = "0.4" clap = { version = "3.1.5", features = ["cargo"] } rpassword = "6.0" -solana-perf = { path = "../perf", version = "=1.11.8" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.11.8", default-features = false } -solana-sdk = { path = "../sdk", version = "=1.11.8" } +solana-perf = { path = "../perf", version = "=1.11.9" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.11.9", default-features = false } +solana-sdk = { path = "../sdk", version = "=1.11.9" } thiserror = "1.0.31" tiny-bip39 = "0.8.2" uriparse = "0.6.4" diff --git a/cli-config/Cargo.toml b/cli-config/Cargo.toml index 354420f8c7473f..dec40e6d39012d 100644 --- a/cli-config/Cargo.toml +++ b/cli-config/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-cli-config" description = "Blockchain, Rebuilt for Scale" -version = "1.11.8" +version = "1.11.9" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -15,8 +15,8 @@ lazy_static = "1.4.0" serde = "1.0.138" serde_derive = "1.0.103" serde_yaml = "0.8.26" -solana-clap-utils = { path = "../clap-utils", version = "=1.11.8" } -solana-sdk = { path = "../sdk", version = "=1.11.8" } +solana-clap-utils = { path = "../clap-utils", version = "=1.11.9" } +solana-sdk = { path = "../sdk", version = "=1.11.9" } url = "2.2.2" [dev-dependencies] diff --git a/cli-output/Cargo.toml b/cli-output/Cargo.toml index a1f972fc932a57..360ee8d223e5f9 100644 --- a/cli-output/Cargo.toml +++ b/cli-output/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-cli-output" description = "Blockchain, Rebuilt for Scale" -version = "1.11.8" +version = "1.11.9" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -21,13 +21,13 @@ pretty-hex = "0.3.0" semver = "1.0.10" serde = "1.0.138" serde_json = "1.0.81" -solana-account-decoder = { path = "../account-decoder", version = "=1.11.8" } -solana-clap-utils = { path = "../clap-utils", version = "=1.11.8" } -solana-cli-config = { path = "../cli-config", version = "=1.11.8" } -solana-client = { path = "../client", version = "=1.11.8" } -solana-sdk = { path = "../sdk", version = "=1.11.8" } -solana-transaction-status = { path = "../transaction-status", version = "=1.11.8" } -solana-vote-program = { path = "../programs/vote", version = "=1.11.8" } +solana-account-decoder = { path = "../account-decoder", version = "=1.11.9" } +solana-clap-utils = { path = "../clap-utils", version = "=1.11.9" } +solana-cli-config = { path = "../cli-config", version = "=1.11.9" } +solana-client = { path = "../client", version = "=1.11.9" } +solana-sdk = { path = "../sdk", version = "=1.11.9" } +solana-transaction-status = { path = "../transaction-status", version = "=1.11.9" } +solana-vote-program = { path = "../programs/vote", version = "=1.11.9" } spl-memo = { version = "=3.0.1", features = ["no-entrypoint"] } [dev-dependencies] diff --git a/cli/Cargo.toml b/cli/Cargo.toml index 75137d6134b88f..8782d0a3883118 100644 --- a/cli/Cargo.toml +++ b/cli/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-cli" description = "Blockchain, Rebuilt for Scale" -version = "1.11.8" +version = "1.11.9" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -27,29 +27,29 @@ semver = "1.0.10" serde = "1.0.138" serde_derive = "1.0.103" serde_json = "1.0.81" -solana-account-decoder = { path = "../account-decoder", version = "=1.11.8" } -solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.11.8" } -solana-clap-utils = { path = "../clap-utils", version = "=1.11.8" } -solana-cli-config = { path = "../cli-config", version = "=1.11.8" } -solana-cli-output = { path = "../cli-output", version = "=1.11.8" } -solana-client = { path = "../client", version = "=1.11.8" } -solana-config-program = { path = "../programs/config", version = "=1.11.8" } -solana-faucet = { path = "../faucet", version = "=1.11.8" } -solana-logger = { path = "../logger", version = "=1.11.8" } -solana-program-runtime = { path = "../program-runtime", version = "=1.11.8" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.11.8" } -solana-sdk = { path = "../sdk", version = "=1.11.8" } -solana-transaction-status = { path = "../transaction-status", version = "=1.11.8" } -solana-version = { path = "../version", version = "=1.11.8" } -solana-vote-program = { path = "../programs/vote", version = "=1.11.8" } +solana-account-decoder = { path = "../account-decoder", version = "=1.11.9" } +solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.11.9" } +solana-clap-utils = { path = "../clap-utils", version = "=1.11.9" } +solana-cli-config = { path = "../cli-config", version = "=1.11.9" } +solana-cli-output = { path = "../cli-output", version = "=1.11.9" } +solana-client = { path = "../client", version = "=1.11.9" } +solana-config-program = { path = "../programs/config", version = "=1.11.9" } +solana-faucet = { path = "../faucet", version = "=1.11.9" } +solana-logger = { path = "../logger", version = "=1.11.9" } +solana-program-runtime = { path = "../program-runtime", version = "=1.11.9" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.11.9" } +solana-sdk = { path = "../sdk", version = "=1.11.9" } +solana-transaction-status = { path = "../transaction-status", version = "=1.11.9" } +solana-version = { path = "../version", version = "=1.11.9" } +solana-vote-program = { path = "../programs/vote", version = "=1.11.9" } solana_rbpf = "=0.2.31" spl-memo = { version = "=3.0.1", features = ["no-entrypoint"] } thiserror = "1.0.31" tiny-bip39 = "0.8.2" [dev-dependencies] -solana-streamer = { path = "../streamer", version = "=1.11.8" } -solana-test-validator = { path = "../test-validator", version = "=1.11.8" } +solana-streamer = { path = "../streamer", version = "=1.11.9" } +solana-test-validator = { path = "../test-validator", version = "=1.11.9" } tempfile = "3.3.0" [[bin]] diff --git a/client-test/Cargo.toml b/client-test/Cargo.toml index 96ee061507b0ce..47ef654a119e22 100644 --- a/client-test/Cargo.toml +++ b/client-test/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-client-test" -version = "1.11.8" +version = "1.11.9" description = "Solana RPC Test" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,25 +14,25 @@ publish = false futures-util = "0.3.21" serde_json = "1.0.81" serial_test = "0.8.0" -solana-client = { path = "../client", version = "=1.11.8" } -solana-ledger = { path = "../ledger", version = "=1.11.8" } -solana-measure = { path = "../measure", version = "=1.11.8" } -solana-merkle-tree = { path = "../merkle-tree", version = "=1.11.8" } -solana-metrics = { path = "../metrics", version = "=1.11.8" } -solana-perf = { path = "../perf", version = "=1.11.8" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.11.8" } -solana-rpc = { path = "../rpc", version = "=1.11.8" } -solana-runtime = { path = "../runtime", version = "=1.11.8" } -solana-sdk = { path = "../sdk", version = "=1.11.8" } -solana-streamer = { path = "../streamer", version = "=1.11.8" } -solana-test-validator = { path = "../test-validator", version = "=1.11.8" } -solana-transaction-status = { path = "../transaction-status", version = "=1.11.8" } -solana-version = { path = "../version", version = "=1.11.8" } +solana-client = { path = "../client", version = "=1.11.9" } +solana-ledger = { path = "../ledger", version = "=1.11.9" } +solana-measure = { path = "../measure", version = "=1.11.9" } +solana-merkle-tree = { path = "../merkle-tree", version = "=1.11.9" } +solana-metrics = { path = "../metrics", version = "=1.11.9" } +solana-perf = { path = "../perf", version = "=1.11.9" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.11.9" } +solana-rpc = { path = "../rpc", version = "=1.11.9" } +solana-runtime = { path = "../runtime", version = "=1.11.9" } +solana-sdk = { path = "../sdk", version = "=1.11.9" } +solana-streamer = { path = "../streamer", version = "=1.11.9" } +solana-test-validator = { path = "../test-validator", version = "=1.11.9" } +solana-transaction-status = { path = "../transaction-status", version = "=1.11.9" } +solana-version = { path = "../version", version = "=1.11.9" } systemstat = "0.1.11" tokio = { version = "~1.14.1", features = ["full"] } [dev-dependencies] -solana-logger = { path = "../logger", version = "=1.11.8" } +solana-logger = { path = "../logger", version = "=1.11.9" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/client/Cargo.toml b/client/Cargo.toml index fb9946708d8b1b..544c54f10e3dd7 100644 --- a/client/Cargo.toml +++ b/client/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-client" -version = "1.11.8" +version = "1.11.9" description = "Solana Client" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -38,17 +38,17 @@ semver = "1.0.10" serde = "1.0.138" serde_derive = "1.0.103" serde_json = "1.0.81" -solana-account-decoder = { path = "../account-decoder", version = "=1.11.8" } -solana-clap-utils = { path = "../clap-utils", version = "=1.11.8" } -solana-faucet = { path = "../faucet", version = "=1.11.8" } -solana-measure = { path = "../measure", version = "=1.11.8" } -solana-metrics = { path = "../metrics", version = "=1.11.8" } -solana-net-utils = { path = "../net-utils", version = "=1.11.8" } -solana-sdk = { path = "../sdk", version = "=1.11.8" } -solana-streamer = { path = "../streamer", version = "=1.11.8" } -solana-transaction-status = { path = "../transaction-status", version = "=1.11.8" } -solana-version = { path = "../version", version = "=1.11.8" } -solana-vote-program = { path = "../programs/vote", version = "=1.11.8" } +solana-account-decoder = { path = "../account-decoder", version = "=1.11.9" } +solana-clap-utils = { path = "../clap-utils", version = "=1.11.9" } +solana-faucet = { path = "../faucet", version = "=1.11.9" } +solana-measure = { path = "../measure", version = "=1.11.9" } +solana-metrics = { path = "../metrics", version = "=1.11.9" } +solana-net-utils = { path = "../net-utils", version = "=1.11.9" } +solana-sdk = { path = "../sdk", version = "=1.11.9" } +solana-streamer = { path = "../streamer", version = "=1.11.9" } +solana-transaction-status = { path = "../transaction-status", version = "=1.11.9" } +solana-version = { path = "../version", version = "=1.11.9" } +solana-vote-program = { path = "../programs/vote", version = "=1.11.9" } spl-token-2022 = { version = "=0.4.2", features = ["no-entrypoint"] } thiserror = "1.0" tokio = { version = "1", features = ["full"] } @@ -61,8 +61,8 @@ url = "2.2.2" anyhow = "1.0.58" assert_matches = "1.5.0" jsonrpc-http-server = "18.0.0" -solana-logger = { path = "../logger", version = "=1.11.8" } -solana-perf = { path = "../perf", version = "=1.11.8" } +solana-logger = { path = "../logger", version = "=1.11.9" } +solana-perf = { path = "../perf", version = "=1.11.9" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/core/Cargo.toml b/core/Cargo.toml index 5f61123db0111f..f3b1d0a157a83e 100644 --- a/core/Cargo.toml +++ b/core/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "solana-core" description = "Blockchain, Rebuilt for Scale" -version = "1.11.8" +version = "1.11.9" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-core" readme = "../README.md" @@ -35,30 +35,30 @@ rand_chacha = "0.2.2" rayon = "1.5.3" serde = "1.0.138" serde_derive = "1.0.103" -solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.11.8" } -solana-bloom = { path = "../bloom", version = "=1.11.8" } -solana-client = { path = "../client", version = "=1.11.8" } -solana-entry = { path = "../entry", version = "=1.11.8" } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.11.8" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.11.8" } -solana-geyser-plugin-manager = { path = "../geyser-plugin-manager", version = "=1.11.8" } -solana-gossip = { path = "../gossip", version = "=1.11.8" } -solana-ledger = { path = "../ledger", version = "=1.11.8" } -solana-measure = { path = "../measure", version = "=1.11.8" } -solana-metrics = { path = "../metrics", version = "=1.11.8" } -solana-net-utils = { path = "../net-utils", version = "=1.11.8" } -solana-perf = { path = "../perf", version = "=1.11.8" } -solana-poh = { path = "../poh", version = "=1.11.8" } -solana-program-runtime = { path = "../program-runtime", version = "=1.11.8" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.11.8" } -solana-rpc = { path = "../rpc", version = "=1.11.8" } -solana-runtime = { path = "../runtime", version = "=1.11.8" } -solana-sdk = { path = "../sdk", version = "=1.11.8" } -solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.11.8" } -solana-streamer = { path = "../streamer", version = "=1.11.8" } -solana-transaction-status = { path = "../transaction-status", version = "=1.11.8" } -solana-version = { path = "../version", version = "=1.11.8" } -solana-vote-program = { path = "../programs/vote", version = "=1.11.8" } +solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.11.9" } +solana-bloom = { path = "../bloom", version = "=1.11.9" } +solana-client = { path = "../client", version = "=1.11.9" } +solana-entry = { path = "../entry", version = "=1.11.9" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.11.9" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.11.9" } +solana-geyser-plugin-manager = { path = "../geyser-plugin-manager", version = "=1.11.9" } +solana-gossip = { path = "../gossip", version = "=1.11.9" } +solana-ledger = { path = "../ledger", version = "=1.11.9" } +solana-measure = { path = "../measure", version = "=1.11.9" } +solana-metrics = { path = "../metrics", version = "=1.11.9" } +solana-net-utils = { path = "../net-utils", version = "=1.11.9" } +solana-perf = { path = "../perf", version = "=1.11.9" } +solana-poh = { path = "../poh", version = "=1.11.9" } +solana-program-runtime = { path = "../program-runtime", version = "=1.11.9" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.11.9" } +solana-rpc = { path = "../rpc", version = "=1.11.9" } +solana-runtime = { path = "../runtime", version = "=1.11.9" } +solana-sdk = { path = "../sdk", version = "=1.11.9" } +solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.11.9" } +solana-streamer = { path = "../streamer", version = "=1.11.9" } +solana-transaction-status = { path = "../transaction-status", version = "=1.11.9" } +solana-version = { path = "../version", version = "=1.11.9" } +solana-vote-program = { path = "../programs/vote", version = "=1.11.9" } sys-info = "0.9.1" tempfile = "3.3.0" thiserror = "1.0" @@ -70,9 +70,9 @@ matches = "0.1.9" raptorq = "1.7.0" serde_json = "1.0.81" serial_test = "0.8.0" -solana-logger = { path = "../logger", version = "=1.11.8" } -solana-program-runtime = { path = "../program-runtime", version = "=1.11.8" } -solana-stake-program = { path = "../programs/stake", version = "=1.11.8" } +solana-logger = { path = "../logger", version = "=1.11.9" } +solana-program-runtime = { path = "../program-runtime", version = "=1.11.9" } +solana-stake-program = { path = "../programs/stake", version = "=1.11.9" } static_assertions = "1.1.0" systemstat = "0.1.11" test-case = "2.1.0" diff --git a/docs/src/developing/clients/jsonrpc-api.md b/docs/src/developing/clients/jsonrpc-api.md index a3edbf652418f4..2629501fccc35c 100644 --- a/docs/src/developing/clients/jsonrpc-api.md +++ b/docs/src/developing/clients/jsonrpc-api.md @@ -1931,7 +1931,7 @@ Returns all accounts owned by the provided program Pubkey - `offset: ` - offset into program account data to start comparison - `bytes: ` - data to match, as encoded string - `encoding: ` - encoding for filter `bytes` data, either "base58" or "base64". Data is limited in size to 128 or fewer decoded bytes. - **NEW: This field, and base64 support generally, is only available in solana-core v1.11.8 or newer. Please omit when querying nodes on earlier versions** + **NEW: This field, and base64 support generally, is only available in solana-core v1.11.9 or newer. Please omit when querying nodes on earlier versions** - `dataSize: ` - compares the program account data length with the provided data size @@ -3150,7 +3150,7 @@ curl http://localhost:8899 -X POST -H "Content-Type: application/json" -d ' Result: ```json -{ "jsonrpc": "2.0", "result": { "solana-core": "1.11.8" }, "id": 1 } +{ "jsonrpc": "2.0", "result": { "solana-core": "1.11.9" }, "id": 1 } ``` ### getVoteAccounts diff --git a/dos/Cargo.toml b/dos/Cargo.toml index 0788515553446e..674b4fcded1d57 100644 --- a/dos/Cargo.toml +++ b/dos/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-dos" -version = "1.11.8" +version = "1.11.9" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -17,23 +17,23 @@ itertools = "0.10.3" log = "0.4.17" rand = "0.7.0" serde = "1.0.138" -solana-bench-tps = { path = "../bench-tps", version = "=1.11.8" } -solana-client = { path = "../client", version = "=1.11.8" } -solana-core = { path = "../core", version = "=1.11.8" } -solana-faucet = { path = "../faucet", version = "=1.11.8" } -solana-gossip = { path = "../gossip", version = "=1.11.8" } -solana-logger = { path = "../logger", version = "=1.11.8" } -solana-measure = { path = "../measure", version = "=1.11.8" } -solana-net-utils = { path = "../net-utils", version = "=1.11.8" } -solana-perf = { path = "../perf", version = "=1.11.8" } -solana-rpc = { path = "../rpc", version = "=1.11.8" } -solana-sdk = { path = "../sdk", version = "=1.11.8" } -solana-streamer = { path = "../streamer", version = "=1.11.8" } -solana-version = { path = "../version", version = "=1.11.8" } +solana-bench-tps = { path = "../bench-tps", version = "=1.11.9" } +solana-client = { path = "../client", version = "=1.11.9" } +solana-core = { path = "../core", version = "=1.11.9" } +solana-faucet = { path = "../faucet", version = "=1.11.9" } +solana-gossip = { path = "../gossip", version = "=1.11.9" } +solana-logger = { path = "../logger", version = "=1.11.9" } +solana-measure = { path = "../measure", version = "=1.11.9" } +solana-net-utils = { path = "../net-utils", version = "=1.11.9" } +solana-perf = { path = "../perf", version = "=1.11.9" } +solana-rpc = { path = "../rpc", version = "=1.11.9" } +solana-sdk = { path = "../sdk", version = "=1.11.9" } +solana-streamer = { path = "../streamer", version = "=1.11.9" } +solana-version = { path = "../version", version = "=1.11.9" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] [dev-dependencies] serial_test = "0.8.0" -solana-local-cluster = { path = "../local-cluster", version = "=1.11.8" } +solana-local-cluster = { path = "../local-cluster", version = "=1.11.9" } diff --git a/download-utils/Cargo.toml b/download-utils/Cargo.toml index a1e15cbedfd930..6d84f75d5c529f 100644 --- a/download-utils/Cargo.toml +++ b/download-utils/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-download-utils" -version = "1.11.8" +version = "1.11.9" description = "Solana Download Utils" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,8 +14,8 @@ console = "0.15.0" indicatif = "0.16.2" log = "0.4.17" reqwest = { version = "0.11.11", default-features = false, features = ["blocking", "brotli", "deflate", "gzip", "rustls-tls", "json"] } -solana-runtime = { path = "../runtime", version = "=1.11.8" } -solana-sdk = { path = "../sdk", version = "=1.11.8" } +solana-runtime = { path = "../runtime", version = "=1.11.9" } +solana-sdk = { path = "../sdk", version = "=1.11.9" } [lib] crate-type = ["lib"] diff --git a/entry/Cargo.toml b/entry/Cargo.toml index b28932f9f2fc03..90330b3b6ebca7 100644 --- a/entry/Cargo.toml +++ b/entry/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-entry" -version = "1.11.8" +version = "1.11.9" description = "Solana Entry" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -19,16 +19,16 @@ log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" serde = "1.0.138" -solana-measure = { path = "../measure", version = "=1.11.8" } -solana-merkle-tree = { path = "../merkle-tree", version = "=1.11.8" } -solana-metrics = { path = "../metrics", version = "=1.11.8" } -solana-perf = { path = "../perf", version = "=1.11.8" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.11.8" } -solana-sdk = { path = "../sdk", version = "=1.11.8" } +solana-measure = { path = "../measure", version = "=1.11.9" } +solana-merkle-tree = { path = "../merkle-tree", version = "=1.11.9" } +solana-metrics = { path = "../metrics", version = "=1.11.9" } +solana-perf = { path = "../perf", version = "=1.11.9" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.11.9" } +solana-sdk = { path = "../sdk", version = "=1.11.9" } [dev-dependencies] matches = "0.1.9" -solana-logger = { path = "../logger", version = "=1.11.8" } +solana-logger = { path = "../logger", version = "=1.11.9" } [lib] crate-type = ["lib"] diff --git a/faucet/Cargo.toml b/faucet/Cargo.toml index ac13d72864fe74..027173b0cbf585 100644 --- a/faucet/Cargo.toml +++ b/faucet/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-faucet" -version = "1.11.8" +version = "1.11.9" description = "Solana Faucet" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -17,12 +17,12 @@ crossbeam-channel = "0.5" log = "0.4.17" serde = "1.0.138" serde_derive = "1.0.103" -solana-clap-utils = { path = "../clap-utils", version = "=1.11.8" } -solana-cli-config = { path = "../cli-config", version = "=1.11.8" } -solana-logger = { path = "../logger", version = "=1.11.8" } -solana-metrics = { path = "../metrics", version = "=1.11.8" } -solana-sdk = { path = "../sdk", version = "=1.11.8" } -solana-version = { path = "../version", version = "=1.11.8" } +solana-clap-utils = { path = "../clap-utils", version = "=1.11.9" } +solana-cli-config = { path = "../cli-config", version = "=1.11.9" } +solana-logger = { path = "../logger", version = "=1.11.9" } +solana-metrics = { path = "../metrics", version = "=1.11.9" } +solana-sdk = { path = "../sdk", version = "=1.11.9" } +solana-version = { path = "../version", version = "=1.11.9" } spl-memo = { version = "=3.0.1", features = ["no-entrypoint"] } thiserror = "1.0" tokio = { version = "1", features = ["full"] } diff --git a/frozen-abi/Cargo.toml b/frozen-abi/Cargo.toml index 55db5ac60aedd8..ceb27b4c0fed2f 100644 --- a/frozen-abi/Cargo.toml +++ b/frozen-abi/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-frozen-abi" -version = "1.11.8" +version = "1.11.9" description = "Solana Frozen ABI" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -20,7 +20,7 @@ serde_bytes = "0.11" serde_derive = "1.0" serde_json = "1.0" sha2 = "0.10.2" -solana-frozen-abi-macro = { path = "macro", version = "=1.11.8" } +solana-frozen-abi-macro = { path = "macro", version = "=1.11.9" } thiserror = "1.0" [target.'cfg(not(target_os = "solana"))'.dependencies] @@ -43,7 +43,7 @@ rand_core = { version = "0.6.3", features = ["alloc", "getrandom", "std"] } subtle = { version = "2.4.1", features = ["default", "i128", "std"] } [target.'cfg(not(target_os = "solana"))'.dev-dependencies] -solana-logger = { path = "../logger", version = "=1.11.8" } +solana-logger = { path = "../logger", version = "=1.11.9" } [build-dependencies] rustc_version = "0.4" diff --git a/frozen-abi/macro/Cargo.toml b/frozen-abi/macro/Cargo.toml index 2f3f5fa2681542..77b603d1f03579 100644 --- a/frozen-abi/macro/Cargo.toml +++ b/frozen-abi/macro/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-frozen-abi-macro" -version = "1.11.8" +version = "1.11.9" description = "Solana Frozen ABI Macro" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/genesis-utils/Cargo.toml b/genesis-utils/Cargo.toml index a280c7bc06d925..eb25f2bb08a9be 100644 --- a/genesis-utils/Cargo.toml +++ b/genesis-utils/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-genesis-utils" -version = "1.11.8" +version = "1.11.9" description = "Solana Genesis Utils" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,9 +10,9 @@ documentation = "https://docs.rs/solana-download-utils" edition = "2021" [dependencies] -solana-download-utils = { path = "../download-utils", version = "=1.11.8" } -solana-runtime = { path = "../runtime", version = "=1.11.8" } -solana-sdk = { path = "../sdk", version = "=1.11.8" } +solana-download-utils = { path = "../download-utils", version = "=1.11.9" } +solana-runtime = { path = "../runtime", version = "=1.11.9" } +solana-sdk = { path = "../sdk", version = "=1.11.9" } [lib] crate-type = ["lib"] diff --git a/genesis/Cargo.toml b/genesis/Cargo.toml index c82ef46e4d632e..e9712936f6b2b0 100644 --- a/genesis/Cargo.toml +++ b/genesis/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-genesis" description = "Blockchain, Rebuilt for Scale" -version = "1.11.8" +version = "1.11.9" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -15,16 +15,16 @@ clap = "2.33.1" serde = "1.0.138" serde_json = "1.0.81" serde_yaml = "0.8.26" -solana-clap-utils = { path = "../clap-utils", version = "=1.11.8" } -solana-cli-config = { path = "../cli-config", version = "=1.11.8" } -solana-entry = { path = "../entry", version = "=1.11.8" } -solana-ledger = { path = "../ledger", version = "=1.11.8" } -solana-logger = { path = "../logger", version = "=1.11.8" } -solana-runtime = { path = "../runtime", version = "=1.11.8" } -solana-sdk = { path = "../sdk", version = "=1.11.8" } -solana-stake-program = { path = "../programs/stake", version = "=1.11.8" } -solana-version = { path = "../version", version = "=1.11.8" } -solana-vote-program = { path = "../programs/vote", version = "=1.11.8" } +solana-clap-utils = { path = "../clap-utils", version = "=1.11.9" } +solana-cli-config = { path = "../cli-config", version = "=1.11.9" } +solana-entry = { path = "../entry", version = "=1.11.9" } +solana-ledger = { path = "../ledger", version = "=1.11.9" } +solana-logger = { path = "../logger", version = "=1.11.9" } +solana-runtime = { path = "../runtime", version = "=1.11.9" } +solana-sdk = { path = "../sdk", version = "=1.11.9" } +solana-stake-program = { path = "../programs/stake", version = "=1.11.9" } +solana-version = { path = "../version", version = "=1.11.9" } +solana-vote-program = { path = "../programs/vote", version = "=1.11.9" } tempfile = "3.3.0" [[bin]] diff --git a/geyser-plugin-interface/Cargo.toml b/geyser-plugin-interface/Cargo.toml index 254f930194253e..6532dcc8028fcc 100644 --- a/geyser-plugin-interface/Cargo.toml +++ b/geyser-plugin-interface/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-geyser-plugin-interface" description = "The Solana Geyser plugin interface." -version = "1.11.8" +version = "1.11.9" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -11,8 +11,8 @@ documentation = "https://docs.rs/solana-geyser-plugin-interface" [dependencies] log = "0.4.17" -solana-sdk = { path = "../sdk", version = "=1.11.8" } -solana-transaction-status = { path = "../transaction-status", version = "=1.11.8" } +solana-sdk = { path = "../sdk", version = "=1.11.9" } +solana-transaction-status = { path = "../transaction-status", version = "=1.11.9" } thiserror = "1.0.31" [package.metadata.docs.rs] diff --git a/geyser-plugin-manager/Cargo.toml b/geyser-plugin-manager/Cargo.toml index 0d1beeffa99e48..ae27d42a3b0beb 100644 --- a/geyser-plugin-manager/Cargo.toml +++ b/geyser-plugin-manager/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-geyser-plugin-manager" description = "The Solana Geyser plugin manager." -version = "1.11.8" +version = "1.11.9" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -16,13 +16,13 @@ json5 = "0.4.1" libloading = "0.7.3" log = "0.4.17" serde_json = "1.0.81" -solana-geyser-plugin-interface = { path = "../geyser-plugin-interface", version = "=1.11.8" } -solana-measure = { path = "../measure", version = "=1.11.8" } -solana-metrics = { path = "../metrics", version = "=1.11.8" } -solana-rpc = { path = "../rpc", version = "=1.11.8" } -solana-runtime = { path = "../runtime", version = "=1.11.8" } -solana-sdk = { path = "../sdk", version = "=1.11.8" } -solana-transaction-status = { path = "../transaction-status", version = "=1.11.8" } +solana-geyser-plugin-interface = { path = "../geyser-plugin-interface", version = "=1.11.9" } +solana-measure = { path = "../measure", version = "=1.11.9" } +solana-metrics = { path = "../metrics", version = "=1.11.9" } +solana-rpc = { path = "../rpc", version = "=1.11.9" } +solana-runtime = { path = "../runtime", version = "=1.11.9" } +solana-sdk = { path = "../sdk", version = "=1.11.9" } +solana-transaction-status = { path = "../transaction-status", version = "=1.11.9" } thiserror = "1.0.31" [package.metadata.docs.rs] diff --git a/gossip/Cargo.toml b/gossip/Cargo.toml index f8c813acadaf0d..3a993c732b8aa7 100644 --- a/gossip/Cargo.toml +++ b/gossip/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-gossip" description = "Blockchain, Rebuilt for Scale" -version = "1.11.8" +version = "1.11.9" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -27,24 +27,24 @@ rayon = "1.5.3" serde = "1.0.138" serde_bytes = "0.11" serde_derive = "1.0.103" -solana-bloom = { path = "../bloom", version = "=1.11.8" } -solana-clap-utils = { path = "../clap-utils", version = "=1.11.8" } -solana-client = { path = "../client", version = "=1.11.8" } -solana-entry = { path = "../entry", version = "=1.11.8" } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.11.8" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.11.8" } -solana-ledger = { path = "../ledger", version = "=1.11.8" } -solana-logger = { path = "../logger", version = "=1.11.8" } -solana-measure = { path = "../measure", version = "=1.11.8" } -solana-metrics = { path = "../metrics", version = "=1.11.8" } -solana-net-utils = { path = "../net-utils", version = "=1.11.8" } -solana-perf = { path = "../perf", version = "=1.11.8" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.11.8" } -solana-runtime = { path = "../runtime", version = "=1.11.8" } -solana-sdk = { path = "../sdk", version = "=1.11.8" } -solana-streamer = { path = "../streamer", version = "=1.11.8" } -solana-version = { path = "../version", version = "=1.11.8" } -solana-vote-program = { path = "../programs/vote", version = "=1.11.8" } +solana-bloom = { path = "../bloom", version = "=1.11.9" } +solana-clap-utils = { path = "../clap-utils", version = "=1.11.9" } +solana-client = { path = "../client", version = "=1.11.9" } +solana-entry = { path = "../entry", version = "=1.11.9" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.11.9" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.11.9" } +solana-ledger = { path = "../ledger", version = "=1.11.9" } +solana-logger = { path = "../logger", version = "=1.11.9" } +solana-measure = { path = "../measure", version = "=1.11.9" } +solana-metrics = { path = "../metrics", version = "=1.11.9" } +solana-net-utils = { path = "../net-utils", version = "=1.11.9" } +solana-perf = { path = "../perf", version = "=1.11.9" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.11.9" } +solana-runtime = { path = "../runtime", version = "=1.11.9" } +solana-sdk = { path = "../sdk", version = "=1.11.9" } +solana-streamer = { path = "../streamer", version = "=1.11.9" } +solana-version = { path = "../version", version = "=1.11.9" } +solana-vote-program = { path = "../programs/vote", version = "=1.11.9" } thiserror = "1.0" [dev-dependencies] diff --git a/install/Cargo.toml b/install/Cargo.toml index e0b5c066eda067..539ca976af8729 100644 --- a/install/Cargo.toml +++ b/install/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-install" description = "The solana cluster software installer" -version = "1.11.8" +version = "1.11.9" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -26,12 +26,12 @@ reqwest = { version = "0.11.11", default-features = false, features = ["blocking semver = "1.0.10" serde = { version = "1.0.138", features = ["derive"] } serde_yaml = "0.8.26" -solana-clap-utils = { path = "../clap-utils", version = "=1.11.8" } -solana-client = { path = "../client", version = "=1.11.8" } -solana-config-program = { path = "../programs/config", version = "=1.11.8" } -solana-logger = { path = "../logger", version = "=1.11.8" } -solana-sdk = { path = "../sdk", version = "=1.11.8" } -solana-version = { path = "../version", version = "=1.11.8" } +solana-clap-utils = { path = "../clap-utils", version = "=1.11.9" } +solana-client = { path = "../client", version = "=1.11.9" } +solana-config-program = { path = "../programs/config", version = "=1.11.9" } +solana-logger = { path = "../logger", version = "=1.11.9" } +solana-sdk = { path = "../sdk", version = "=1.11.9" } +solana-version = { path = "../version", version = "=1.11.9" } tar = "0.4.38" tempfile = "3.3.0" url = "2.2.2" diff --git a/keygen/Cargo.toml b/keygen/Cargo.toml index 15c232f9fd76cc..785b696cd891e8 100644 --- a/keygen/Cargo.toml +++ b/keygen/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-keygen" -version = "1.11.8" +version = "1.11.9" description = "Solana key generation utility" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,11 +14,11 @@ bs58 = "0.4.0" clap = { version = "3.1.5", features = ["cargo"] } dirs-next = "2.0.0" num_cpus = "1.13.1" -solana-clap-v3-utils = { path = "../clap-v3-utils", version = "=1.11.8" } -solana-cli-config = { path = "../cli-config", version = "=1.11.8" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.11.8" } -solana-sdk = { path = "../sdk", version = "=1.11.8" } -solana-version = { path = "../version", version = "=1.11.8" } +solana-clap-v3-utils = { path = "../clap-v3-utils", version = "=1.11.9" } +solana-cli-config = { path = "../cli-config", version = "=1.11.9" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.11.9" } +solana-sdk = { path = "../sdk", version = "=1.11.9" } +solana-version = { path = "../version", version = "=1.11.9" } tiny-bip39 = "0.8.2" [[bin]] diff --git a/ledger-tool/Cargo.toml b/ledger-tool/Cargo.toml index bf17adbc611888..03926f94de050d 100644 --- a/ledger-tool/Cargo.toml +++ b/ledger-tool/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-ledger-tool" description = "Blockchain, Rebuilt for Scale" -version = "1.11.8" +version = "1.11.9" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -22,20 +22,20 @@ log = { version = "0.4.17" } regex = "1" serde = { version = "1.0", features = ["derive"] } serde_json = "1.0.81" -solana-clap-utils = { path = "../clap-utils", version = "=1.11.8" } -solana-cli-output = { path = "../cli-output", version = "=1.11.8" } -solana-core = { path = "../core", version = "=1.11.8" } -solana-entry = { path = "../entry", version = "=1.11.8" } -solana-ledger = { path = "../ledger", version = "=1.11.8" } -solana-logger = { path = "../logger", version = "=1.11.8" } -solana-measure = { path = "../measure", version = "=1.11.8" } -solana-runtime = { path = "../runtime", version = "=1.11.8" } -solana-sdk = { path = "../sdk", version = "=1.11.8" } -solana-stake-program = { path = "../programs/stake", version = "=1.11.8" } -solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.11.8" } -solana-transaction-status = { path = "../transaction-status", version = "=1.11.8" } -solana-version = { path = "../version", version = "=1.11.8" } -solana-vote-program = { path = "../programs/vote", version = "=1.11.8" } +solana-clap-utils = { path = "../clap-utils", version = "=1.11.9" } +solana-cli-output = { path = "../cli-output", version = "=1.11.9" } +solana-core = { path = "../core", version = "=1.11.9" } +solana-entry = { path = "../entry", version = "=1.11.9" } +solana-ledger = { path = "../ledger", version = "=1.11.9" } +solana-logger = { path = "../logger", version = "=1.11.9" } +solana-measure = { path = "../measure", version = "=1.11.9" } +solana-runtime = { path = "../runtime", version = "=1.11.9" } +solana-sdk = { path = "../sdk", version = "=1.11.9" } +solana-stake-program = { path = "../programs/stake", version = "=1.11.9" } +solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.11.9" } +solana-transaction-status = { path = "../transaction-status", version = "=1.11.9" } +solana-version = { path = "../version", version = "=1.11.9" } +solana-vote-program = { path = "../programs/vote", version = "=1.11.9" } tokio = { version = "1", features = ["full"] } [target.'cfg(not(target_env = "msvc"))'.dependencies] diff --git a/ledger/Cargo.toml b/ledger/Cargo.toml index c32aa993f791b4..2329558f10707e 100644 --- a/ledger/Cargo.toml +++ b/ledger/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-ledger" -version = "1.11.8" +version = "1.11.9" description = "Solana ledger" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -34,23 +34,23 @@ reed-solomon-erasure = { version = "5.0.3", features = ["simd-accel"] } serde = "1.0.138" serde_bytes = "0.11.6" sha2 = "0.10.2" -solana-account-decoder = { path = "../account-decoder", version = "=1.11.8" } -solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.11.8" } -solana-entry = { path = "../entry", version = "=1.11.8" } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.11.8" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.11.8" } -solana-measure = { path = "../measure", version = "=1.11.8" } -solana-metrics = { path = "../metrics", version = "=1.11.8" } -solana-perf = { path = "../perf", version = "=1.11.8" } -solana-program-runtime = { path = "../program-runtime", version = "=1.11.8" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.11.8" } -solana-runtime = { path = "../runtime", version = "=1.11.8" } -solana-sdk = { path = "../sdk", version = "=1.11.8" } -solana-stake-program = { path = "../programs/stake", version = "=1.11.8" } -solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.11.8" } -solana-storage-proto = { path = "../storage-proto", version = "=1.11.8" } -solana-transaction-status = { path = "../transaction-status", version = "=1.11.8" } -solana-vote-program = { path = "../programs/vote", version = "=1.11.8" } +solana-account-decoder = { path = "../account-decoder", version = "=1.11.9" } +solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.11.9" } +solana-entry = { path = "../entry", version = "=1.11.9" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.11.9" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.11.9" } +solana-measure = { path = "../measure", version = "=1.11.9" } +solana-metrics = { path = "../metrics", version = "=1.11.9" } +solana-perf = { path = "../perf", version = "=1.11.9" } +solana-program-runtime = { path = "../program-runtime", version = "=1.11.9" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.11.9" } +solana-runtime = { path = "../runtime", version = "=1.11.9" } +solana-sdk = { path = "../sdk", version = "=1.11.9" } +solana-stake-program = { path = "../programs/stake", version = "=1.11.9" } +solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.11.9" } +solana-storage-proto = { path = "../storage-proto", version = "=1.11.9" } +solana-transaction-status = { path = "../transaction-status", version = "=1.11.9" } +solana-vote-program = { path = "../programs/vote", version = "=1.11.9" } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } spl-token-2022 = { version = "=0.4.2", features = ["no-entrypoint"] } static_assertions = "1.1.0" @@ -71,8 +71,8 @@ features = ["lz4"] assert_matches = "1.5.0" bs58 = "0.4.0" matches = "0.1.9" -solana-account-decoder = { path = "../account-decoder", version = "=1.11.8" } -solana-logger = { path = "../logger", version = "=1.11.8" } +solana-account-decoder = { path = "../account-decoder", version = "=1.11.9" } +solana-logger = { path = "../logger", version = "=1.11.9" } test-case = "2.1.0" [build-dependencies] diff --git a/local-cluster/Cargo.toml b/local-cluster/Cargo.toml index c08aa50ad64850..1f8ed94dd8971b 100644 --- a/local-cluster/Cargo.toml +++ b/local-cluster/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-local-cluster" description = "Blockchain, Rebuilt for Scale" -version = "1.11.8" +version = "1.11.9" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -16,25 +16,25 @@ itertools = "0.10.3" log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" -solana-client = { path = "../client", version = "=1.11.8" } -solana-config-program = { path = "../programs/config", version = "=1.11.8" } -solana-core = { path = "../core", version = "=1.11.8" } -solana-entry = { path = "../entry", version = "=1.11.8" } -solana-gossip = { path = "../gossip", version = "=1.11.8" } -solana-ledger = { path = "../ledger", version = "=1.11.8" } -solana-runtime = { path = "../runtime", version = "=1.11.8" } -solana-sdk = { path = "../sdk", version = "=1.11.8" } -solana-stake-program = { path = "../programs/stake", version = "=1.11.8" } -solana-streamer = { path = "../streamer", version = "=1.11.8" } -solana-vote-program = { path = "../programs/vote", version = "=1.11.8" } +solana-client = { path = "../client", version = "=1.11.9" } +solana-config-program = { path = "../programs/config", version = "=1.11.9" } +solana-core = { path = "../core", version = "=1.11.9" } +solana-entry = { path = "../entry", version = "=1.11.9" } +solana-gossip = { path = "../gossip", version = "=1.11.9" } +solana-ledger = { path = "../ledger", version = "=1.11.9" } +solana-runtime = { path = "../runtime", version = "=1.11.9" } +solana-sdk = { path = "../sdk", version = "=1.11.9" } +solana-stake-program = { path = "../programs/stake", version = "=1.11.9" } +solana-streamer = { path = "../streamer", version = "=1.11.9" } +solana-vote-program = { path = "../programs/vote", version = "=1.11.9" } tempfile = "3.3.0" [dev-dependencies] assert_matches = "1.5.0" gag = "1.0.0" serial_test = "0.8.0" -solana-download-utils = { path = "../download-utils", version = "=1.11.8" } -solana-logger = { path = "../logger", version = "=1.11.8" } +solana-download-utils = { path = "../download-utils", version = "=1.11.9" } +solana-logger = { path = "../logger", version = "=1.11.9" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/log-analyzer/Cargo.toml b/log-analyzer/Cargo.toml index ee1e477f28c949..ea2fe6a5b86663 100644 --- a/log-analyzer/Cargo.toml +++ b/log-analyzer/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-log-analyzer" description = "The solana cluster network analysis tool" -version = "1.11.8" +version = "1.11.9" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,8 +14,8 @@ byte-unit = "4.0.14" clap = { version = "3.1.5", features = ["cargo"] } serde = "1.0.138" serde_json = "1.0.81" -solana-logger = { path = "../logger", version = "=1.11.8" } -solana-version = { path = "../version", version = "=1.11.8" } +solana-logger = { path = "../logger", version = "=1.11.9" } +solana-version = { path = "../version", version = "=1.11.9" } [[bin]] name = "solana-log-analyzer" diff --git a/logger/Cargo.toml b/logger/Cargo.toml index 13fa052ae175c6..48fd2551958768 100644 --- a/logger/Cargo.toml +++ b/logger/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-logger" -version = "1.11.8" +version = "1.11.9" description = "Solana Logger" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/measure/Cargo.toml b/measure/Cargo.toml index ef2c34b2a8632c..e185be56f614e6 100644 --- a/measure/Cargo.toml +++ b/measure/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "solana-measure" description = "Blockchain, Rebuilt for Scale" -version = "1.11.8" +version = "1.11.9" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-measure" readme = "../README.md" @@ -12,7 +12,7 @@ edition = "2021" [dependencies] log = "0.4.17" -solana-sdk = { path = "../sdk", version = "=1.11.8" } +solana-sdk = { path = "../sdk", version = "=1.11.9" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/merkle-root-bench/Cargo.toml b/merkle-root-bench/Cargo.toml index 6fdcce0a21b3b4..04e9e5f07af6f4 100644 --- a/merkle-root-bench/Cargo.toml +++ b/merkle-root-bench/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-merkle-root-bench" -version = "1.11.8" +version = "1.11.9" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -11,11 +11,11 @@ publish = false [dependencies] clap = "2.33.1" log = "0.4.17" -solana-logger = { path = "../logger", version = "=1.11.8" } -solana-measure = { path = "../measure", version = "=1.11.8" } -solana-runtime = { path = "../runtime", version = "=1.11.8" } -solana-sdk = { path = "../sdk", version = "=1.11.8" } -solana-version = { path = "../version", version = "=1.11.8" } +solana-logger = { path = "../logger", version = "=1.11.9" } +solana-measure = { path = "../measure", version = "=1.11.9" } +solana-runtime = { path = "../runtime", version = "=1.11.9" } +solana-sdk = { path = "../sdk", version = "=1.11.9" } +solana-version = { path = "../version", version = "=1.11.9" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/merkle-tree/Cargo.toml b/merkle-tree/Cargo.toml index 00e45c796b2803..5282fa97cfd018 100644 --- a/merkle-tree/Cargo.toml +++ b/merkle-tree/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-merkle-tree" -version = "1.11.8" +version = "1.11.9" description = "Solana Merkle Tree" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -11,7 +11,7 @@ edition = "2021" [dependencies] fast-math = "0.1" -solana-program = { path = "../sdk/program", version = "=1.11.8" } +solana-program = { path = "../sdk/program", version = "=1.11.9" } # This can go once the BPF toolchain target Rust 1.42.0+ [target.bpfel-unknown-unknown.dependencies] diff --git a/metrics/Cargo.toml b/metrics/Cargo.toml index 12e4dacffe4025..4c8119b3b9b151 100644 --- a/metrics/Cargo.toml +++ b/metrics/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-metrics" -version = "1.11.8" +version = "1.11.9" description = "Solana Metrics" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -15,7 +15,7 @@ gethostname = "0.2.3" lazy_static = "1.4.0" log = "0.4.17" reqwest = { version = "0.11.11", default-features = false, features = ["blocking", "brotli", "deflate", "gzip", "rustls-tls", "json"] } -solana-sdk = { path = "../sdk", version = "=1.11.8" } +solana-sdk = { path = "../sdk", version = "=1.11.9" } [dev-dependencies] env_logger = "0.9.0" diff --git a/net-shaper/Cargo.toml b/net-shaper/Cargo.toml index 299c4efd94c9c8..28c457c31fc2b8 100644 --- a/net-shaper/Cargo.toml +++ b/net-shaper/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-net-shaper" description = "The solana cluster network shaping tool" -version = "1.11.8" +version = "1.11.9" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,7 +14,7 @@ clap = { version = "3.1.5", features = ["cargo"] } rand = "0.7.0" serde = { version = "1.0.138", features = ["derive"] } serde_json = "1.0.81" -solana-logger = { path = "../logger", version = "=1.11.8" } +solana-logger = { path = "../logger", version = "=1.11.9" } [[bin]] name = "solana-net-shaper" diff --git a/net-utils/Cargo.toml b/net-utils/Cargo.toml index dc98e78ca3f3c4..fd11703f1b7dec 100644 --- a/net-utils/Cargo.toml +++ b/net-utils/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-net-utils" -version = "1.11.8" +version = "1.11.9" description = "Solana Network Utilities" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -19,9 +19,9 @@ rand = "0.7.0" serde = "1.0.138" serde_derive = "1.0.103" socket2 = "0.4.4" -solana-logger = { path = "../logger", version = "=1.11.8" } -solana-sdk = { path = "../sdk", version = "=1.11.8" } -solana-version = { path = "../version", version = "=1.11.8" } +solana-logger = { path = "../logger", version = "=1.11.9" } +solana-sdk = { path = "../sdk", version = "=1.11.9" } +solana-version = { path = "../version", version = "=1.11.9" } tokio = { version = "1", features = ["full"] } url = "2.2.2" diff --git a/notifier/Cargo.toml b/notifier/Cargo.toml index 2bc25d160b674c..8176b3b1c502f2 100644 --- a/notifier/Cargo.toml +++ b/notifier/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-notifier" -version = "1.11.8" +version = "1.11.9" description = "Solana Notifier" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/perf/Cargo.toml b/perf/Cargo.toml index c25dda501c5b44..80e99f31b5948a 100644 --- a/perf/Cargo.toml +++ b/perf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-perf" -version = "1.11.8" +version = "1.11.9" description = "Solana Performance APIs" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -22,10 +22,10 @@ log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" serde = "1.0.138" -solana-metrics = { path = "../metrics", version = "=1.11.8" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.11.8" } -solana-sdk = { path = "../sdk", version = "=1.11.8" } -solana-vote-program = { path = "../programs/vote", version = "=1.11.8" } +solana-metrics = { path = "../metrics", version = "=1.11.9" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.11.9" } +solana-sdk = { path = "../sdk", version = "=1.11.9" } +solana-vote-program = { path = "../programs/vote", version = "=1.11.9" } [target."cfg(target_os = \"linux\")".dependencies] caps = "0.5.3" @@ -37,7 +37,7 @@ name = "solana_perf" [dev-dependencies] matches = "0.1.9" -solana-logger = { path = "../logger", version = "=1.11.8" } +solana-logger = { path = "../logger", version = "=1.11.9" } [[bench]] name = "sigverify" diff --git a/poh-bench/Cargo.toml b/poh-bench/Cargo.toml index 0384ba188be769..0844da1e0bccf9 100644 --- a/poh-bench/Cargo.toml +++ b/poh-bench/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-poh-bench" -version = "1.11.8" +version = "1.11.9" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,12 +14,12 @@ clap = { version = "3.1.5", features = ["cargo"] } log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" -solana-entry = { path = "../entry", version = "=1.11.8" } -solana-logger = { path = "../logger", version = "=1.11.8" } -solana-measure = { path = "../measure", version = "=1.11.8" } -solana-perf = { path = "../perf", version = "=1.11.8" } -solana-sdk = { path = "../sdk", version = "=1.11.8" } -solana-version = { path = "../version", version = "=1.11.8" } +solana-entry = { path = "../entry", version = "=1.11.9" } +solana-logger = { path = "../logger", version = "=1.11.9" } +solana-measure = { path = "../measure", version = "=1.11.9" } +solana-perf = { path = "../perf", version = "=1.11.9" } +solana-sdk = { path = "../sdk", version = "=1.11.9" } +solana-version = { path = "../version", version = "=1.11.9" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/poh/Cargo.toml b/poh/Cargo.toml index 10a0667b105ac8..e3e8e556d0393e 100644 --- a/poh/Cargo.toml +++ b/poh/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-poh" -version = "1.11.8" +version = "1.11.9" description = "Solana PoH" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,21 +13,21 @@ edition = "2021" core_affinity = "0.5.10" crossbeam-channel = "0.5" log = "0.4.17" -solana-entry = { path = "../entry", version = "=1.11.8" } -solana-ledger = { path = "../ledger", version = "=1.11.8" } -solana-measure = { path = "../measure", version = "=1.11.8" } -solana-metrics = { path = "../metrics", version = "=1.11.8" } -solana-runtime = { path = "../runtime", version = "=1.11.8" } -solana-sdk = { path = "../sdk", version = "=1.11.8" } -solana-sys-tuner = { path = "../sys-tuner", version = "=1.11.8" } +solana-entry = { path = "../entry", version = "=1.11.9" } +solana-ledger = { path = "../ledger", version = "=1.11.9" } +solana-measure = { path = "../measure", version = "=1.11.9" } +solana-metrics = { path = "../metrics", version = "=1.11.9" } +solana-runtime = { path = "../runtime", version = "=1.11.9" } +solana-sdk = { path = "../sdk", version = "=1.11.9" } +solana-sys-tuner = { path = "../sys-tuner", version = "=1.11.9" } thiserror = "1.0" [dev-dependencies] bincode = "1.3.3" matches = "0.1.9" rand = "0.7.0" -solana-logger = { path = "../logger", version = "=1.11.8" } -solana-perf = { path = "../perf", version = "=1.11.8" } +solana-logger = { path = "../logger", version = "=1.11.9" } +solana-perf = { path = "../perf", version = "=1.11.9" } [lib] crate-type = ["lib"] diff --git a/program-runtime/Cargo.toml b/program-runtime/Cargo.toml index b2af79c72e9f9e..3ef89d6cdeed0a 100644 --- a/program-runtime/Cargo.toml +++ b/program-runtime/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-program-runtime" -version = "1.11.8" +version = "1.11.9" description = "Solana program runtime" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -20,16 +20,16 @@ log = "0.4.14" num-derive = { version = "0.3" } num-traits = { version = "0.2" } serde = { version = "1.0.129", features = ["derive", "rc"] } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.11.8" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.11.8" } -solana-measure = { path = "../measure", version = "=1.11.8" } -solana-metrics = { path = "../metrics", version = "=1.11.8" } -solana-sdk = { path = "../sdk", version = "=1.11.8" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.11.9" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.11.9" } +solana-measure = { path = "../measure", version = "=1.11.9" } +solana-metrics = { path = "../metrics", version = "=1.11.9" } +solana-sdk = { path = "../sdk", version = "=1.11.9" } thiserror = "1.0" enum-iterator = "0.8.1" [dev-dependencies] -solana-logger = { path = "../logger", version = "=1.11.8" } +solana-logger = { path = "../logger", version = "=1.11.9" } [lib] crate-type = ["lib"] diff --git a/program-test/Cargo.toml b/program-test/Cargo.toml index ab5746324f9b75..746d1ce8bc2042 100644 --- a/program-test/Cargo.toml +++ b/program-test/Cargo.toml @@ -5,7 +5,7 @@ edition = "2021" license = "Apache-2.0" name = "solana-program-test" repository = "https://github.com/solana-labs/solana" -version = "1.11.8" +version = "1.11.9" [dependencies] assert_matches = "1.5.0" @@ -15,13 +15,13 @@ bincode = "1.3.3" chrono-humanize = "0.2.1" log = "0.4.17" serde = "1.0.138" -solana-banks-client = { path = "../banks-client", version = "=1.11.8" } -solana-banks-server = { path = "../banks-server", version = "=1.11.8" } -solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.11.8" } -solana-logger = { path = "../logger", version = "=1.11.8" } -solana-program-runtime = { path = "../program-runtime", version = "=1.11.8" } -solana-runtime = { path = "../runtime", version = "=1.11.8" } -solana-sdk = { path = "../sdk", version = "=1.11.8" } -solana-vote-program = { path = "../programs/vote", version = "=1.11.8" } +solana-banks-client = { path = "../banks-client", version = "=1.11.9" } +solana-banks-server = { path = "../banks-server", version = "=1.11.9" } +solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.11.9" } +solana-logger = { path = "../logger", version = "=1.11.9" } +solana-program-runtime = { path = "../program-runtime", version = "=1.11.9" } +solana-runtime = { path = "../runtime", version = "=1.11.9" } +solana-sdk = { path = "../sdk", version = "=1.11.9" } +solana-vote-program = { path = "../programs/vote", version = "=1.11.9" } thiserror = "1.0" tokio = { version = "1", features = ["full"] } diff --git a/programs/address-lookup-table-tests/Cargo.toml b/programs/address-lookup-table-tests/Cargo.toml index 13b4e2c14f1e95..3ca93af17726ca 100644 --- a/programs/address-lookup-table-tests/Cargo.toml +++ b/programs/address-lookup-table-tests/Cargo.toml @@ -3,7 +3,7 @@ [package] name = "solana-address-lookup-table-program-tests" -version = "1.11.8" +version = "1.11.9" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" @@ -14,9 +14,9 @@ publish = false [dev-dependencies] assert_matches = "1.5.0" bincode = "1.3.3" -solana-address-lookup-table-program = { path = "../address-lookup-table", version = "=1.11.8" } -solana-program-test = { path = "../../program-test", version = "=1.11.8" } -solana-sdk = { path = "../../sdk", version = "=1.11.8" } +solana-address-lookup-table-program = { path = "../address-lookup-table", version = "=1.11.9" } +solana-program-test = { path = "../../program-test", version = "=1.11.9" } +solana-sdk = { path = "../../sdk", version = "=1.11.9" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/address-lookup-table/Cargo.toml b/programs/address-lookup-table/Cargo.toml index e5c7ce031d7e18..98ca0bb3d44ba5 100644 --- a/programs/address-lookup-table/Cargo.toml +++ b/programs/address-lookup-table/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-address-lookup-table-program" -version = "1.11.8" +version = "1.11.9" description = "Solana address lookup table program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -16,14 +16,14 @@ log = "0.4.17" num-derive = "0.3" num-traits = "0.2" serde = { version = "1.0.138", features = ["derive"] } -solana-frozen-abi = { path = "../../frozen-abi", version = "=1.11.8" } -solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.11.8" } -solana-program = { path = "../../sdk/program", version = "=1.11.8" } +solana-frozen-abi = { path = "../../frozen-abi", version = "=1.11.9" } +solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.11.9" } +solana-program = { path = "../../sdk/program", version = "=1.11.9" } thiserror = "1.0" [target.'cfg(not(target_os = "solana"))'.dependencies] -solana-program-runtime = { path = "../../program-runtime", version = "=1.11.8" } -solana-sdk = { path = "../../sdk", version = "=1.11.8" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.11.9" } +solana-sdk = { path = "../../sdk", version = "=1.11.9" } [build-dependencies] rustc_version = "0.4" diff --git a/programs/bpf-loader-tests/Cargo.toml b/programs/bpf-loader-tests/Cargo.toml index 5ab1104589f25f..b3fc007f0b4b09 100644 --- a/programs/bpf-loader-tests/Cargo.toml +++ b/programs/bpf-loader-tests/Cargo.toml @@ -3,7 +3,7 @@ [package] name = "solana-bpf-loader-program-tests" -version = "1.11.8" +version = "1.11.9" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" @@ -14,9 +14,9 @@ publish = false [dev-dependencies] assert_matches = "1.5.0" bincode = "1.3.3" -solana-bpf-loader-program = { path = "../bpf_loader", version = "=1.11.8" } -solana-program-test = { path = "../../program-test", version = "=1.11.8" } -solana-sdk = { path = "../../sdk", version = "=1.11.8" } +solana-bpf-loader-program = { path = "../bpf_loader", version = "=1.11.9" } +solana-program-test = { path = "../../program-test", version = "=1.11.9" } +solana-sdk = { path = "../../sdk", version = "=1.11.9" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/bpf/Cargo.lock b/programs/bpf/Cargo.lock index fc832585a23dee..b73830e72e7f66 100644 --- a/programs/bpf/Cargo.lock +++ b/programs/bpf/Cargo.lock @@ -4060,7 +4060,7 @@ dependencies = [ [[package]] name = "solana-account-decoder" -version = "1.11.8" +version = "1.11.9" dependencies = [ "Inflector", "base64 0.13.0", @@ -4072,7 +4072,7 @@ dependencies = [ "serde_derive", "serde_json", "solana-config-program", - "solana-sdk 1.11.8", + "solana-sdk 1.11.9", "solana-vote-program", "spl-token", "spl-token-2022", @@ -4082,7 +4082,7 @@ dependencies = [ [[package]] name = "solana-address-lookup-table-program" -version = "1.11.8" +version = "1.11.9" dependencies = [ "bincode", "bytemuck", @@ -4091,23 +4091,23 @@ dependencies = [ "num-traits", "rustc_version", "serde", - "solana-frozen-abi 1.11.8", - "solana-frozen-abi-macro 1.11.8", - "solana-program 1.11.8", + "solana-frozen-abi 1.11.9", + "solana-frozen-abi-macro 1.11.9", + "solana-program 1.11.9", "solana-program-runtime", - "solana-sdk 1.11.8", + "solana-sdk 1.11.9", "thiserror", ] [[package]] name = "solana-banks-client" -version = "1.11.8" +version = "1.11.9" dependencies = [ "borsh", "futures 0.3.21", "solana-banks-interface", - "solana-program 1.11.8", - "solana-sdk 1.11.8", + "solana-program 1.11.9", + "solana-sdk 1.11.9", "tarpc", "thiserror", "tokio", @@ -4116,16 +4116,16 @@ dependencies = [ [[package]] name = "solana-banks-interface" -version = "1.11.8" +version = "1.11.9" dependencies = [ "serde", - "solana-sdk 1.11.8", + "solana-sdk 1.11.9", "tarpc", ] [[package]] name = "solana-banks-server" -version = "1.11.8" +version = "1.11.9" dependencies = [ "bincode", "crossbeam-channel", @@ -4133,7 +4133,7 @@ dependencies = [ "solana-banks-interface", "solana-client", "solana-runtime", - "solana-sdk 1.11.8", + "solana-sdk 1.11.9", "solana-send-transaction-service", "tarpc", "tokio", @@ -4143,7 +4143,7 @@ dependencies = [ [[package]] name = "solana-bloom" -version = "1.11.8" +version = "1.11.9" dependencies = [ "bv", "fnv", @@ -4153,14 +4153,14 @@ dependencies = [ "rustc_version", "serde", "serde_derive", - "solana-frozen-abi 1.11.8", - "solana-frozen-abi-macro 1.11.8", - "solana-sdk 1.11.8", + "solana-frozen-abi 1.11.9", + "solana-frozen-abi-macro 1.11.9", + "solana-sdk 1.11.9", ] [[package]] name = "solana-bpf-loader-program" -version = "1.11.8" +version = "1.11.9" dependencies = [ "bincode", "byteorder 1.4.3", @@ -4169,15 +4169,15 @@ dependencies = [ "solana-measure", "solana-metrics", "solana-program-runtime", - "solana-sdk 1.11.8", - "solana-zk-token-sdk 1.11.8", + "solana-sdk 1.11.9", + "solana-zk-token-sdk 1.11.9", "solana_rbpf", "thiserror", ] [[package]] name = "solana-bpf-programs" -version = "1.11.8" +version = "1.11.9" dependencies = [ "bincode", "byteorder 1.4.3", @@ -4193,11 +4193,11 @@ dependencies = [ "solana-bpf-rust-realloc-invoke", "solana-cli-output", "solana-ledger", - "solana-logger 1.11.8", + "solana-logger 1.11.9", "solana-measure", "solana-program-runtime", "solana-runtime", - "solana-sdk 1.11.8", + "solana-sdk 1.11.9", "solana-transaction-status", "solana_rbpf", "walkdir", @@ -4205,385 +4205,385 @@ dependencies = [ [[package]] name = "solana-bpf-rust-128bit" -version = "1.11.8" +version = "1.11.9" dependencies = [ "solana-bpf-rust-128bit-dep", - "solana-program 1.11.8", + "solana-program 1.11.9", ] [[package]] name = "solana-bpf-rust-128bit-dep" -version = "1.11.8" +version = "1.11.9" dependencies = [ - "solana-program 1.11.8", + "solana-program 1.11.9", ] [[package]] name = "solana-bpf-rust-alloc" -version = "1.11.8" +version = "1.11.9" dependencies = [ - "solana-program 1.11.8", + "solana-program 1.11.9", ] [[package]] name = "solana-bpf-rust-call-depth" -version = "1.11.8" +version = "1.11.9" dependencies = [ - "solana-program 1.11.8", + "solana-program 1.11.9", ] [[package]] name = "solana-bpf-rust-caller-access" -version = "1.11.8" +version = "1.11.9" dependencies = [ - "solana-program 1.11.8", + "solana-program 1.11.9", ] [[package]] name = "solana-bpf-rust-curve25519" -version = "1.11.8" +version = "1.11.9" dependencies = [ - "solana-program 1.11.8", - "solana-zk-token-sdk 1.11.8", + "solana-program 1.11.9", + "solana-zk-token-sdk 1.11.9", ] [[package]] name = "solana-bpf-rust-custom-heap" -version = "1.11.8" +version = "1.11.9" dependencies = [ - "solana-program 1.11.8", + "solana-program 1.11.9", ] [[package]] name = "solana-bpf-rust-dep-crate" -version = "1.11.8" +version = "1.11.9" dependencies = [ "byteorder 1.4.3", "solana-address-lookup-table-program", - "solana-program 1.11.8", + "solana-program 1.11.9", ] [[package]] name = "solana-bpf-rust-deprecated-loader" -version = "1.11.8" +version = "1.11.9" dependencies = [ - "solana-program 1.11.8", + "solana-program 1.11.9", ] [[package]] name = "solana-bpf-rust-dup-accounts" -version = "1.11.8" +version = "1.11.9" dependencies = [ - "solana-program 1.11.8", + "solana-program 1.11.9", ] [[package]] name = "solana-bpf-rust-error-handling" -version = "1.11.8" +version = "1.11.9" dependencies = [ "num-derive", "num-traits", - "solana-program 1.11.8", + "solana-program 1.11.9", "thiserror", ] [[package]] name = "solana-bpf-rust-external-spend" -version = "1.11.8" +version = "1.11.9" dependencies = [ - "solana-program 1.11.8", + "solana-program 1.11.9", ] [[package]] name = "solana-bpf-rust-finalize" -version = "1.11.8" +version = "1.11.9" dependencies = [ - "solana-program 1.11.8", + "solana-program 1.11.9", ] [[package]] name = "solana-bpf-rust-get-minimum-delegation" -version = "1.11.8" +version = "1.11.9" dependencies = [ - "solana-program 1.11.8", + "solana-program 1.11.9", ] [[package]] name = "solana-bpf-rust-inner_instruction_alignment_check" -version = "1.11.8" +version = "1.11.9" dependencies = [ - "solana-program 1.11.8", + "solana-program 1.11.9", ] [[package]] name = "solana-bpf-rust-instruction-introspection" -version = "1.11.8" +version = "1.11.9" dependencies = [ - "solana-program 1.11.8", + "solana-program 1.11.9", ] [[package]] name = "solana-bpf-rust-invoke" -version = "1.11.8" +version = "1.11.9" dependencies = [ "solana-bpf-rust-invoked", - "solana-program 1.11.8", + "solana-program 1.11.9", ] [[package]] name = "solana-bpf-rust-invoke-and-error" -version = "1.11.8" +version = "1.11.9" dependencies = [ - "solana-program 1.11.8", + "solana-program 1.11.9", ] [[package]] name = "solana-bpf-rust-invoke-and-ok" -version = "1.11.8" +version = "1.11.9" dependencies = [ - "solana-program 1.11.8", + "solana-program 1.11.9", ] [[package]] name = "solana-bpf-rust-invoke-and-return" -version = "1.11.8" +version = "1.11.9" dependencies = [ - "solana-program 1.11.8", + "solana-program 1.11.9", ] [[package]] name = "solana-bpf-rust-invoked" -version = "1.11.8" +version = "1.11.9" dependencies = [ - "solana-program 1.11.8", + "solana-program 1.11.9", ] [[package]] name = "solana-bpf-rust-iter" -version = "1.11.8" +version = "1.11.9" dependencies = [ - "solana-program 1.11.8", + "solana-program 1.11.9", ] [[package]] name = "solana-bpf-rust-log-data" -version = "1.11.8" +version = "1.11.9" dependencies = [ - "solana-program 1.11.8", + "solana-program 1.11.9", ] [[package]] name = "solana-bpf-rust-many-args" -version = "1.11.8" +version = "1.11.9" dependencies = [ "solana-bpf-rust-many-args-dep", - "solana-program 1.11.8", + "solana-program 1.11.9", ] [[package]] name = "solana-bpf-rust-many-args-dep" -version = "1.11.8" +version = "1.11.9" dependencies = [ - "solana-program 1.11.8", + "solana-program 1.11.9", ] [[package]] name = "solana-bpf-rust-mem" -version = "1.11.8" +version = "1.11.9" dependencies = [ - "solana-program 1.11.8", + "solana-program 1.11.9", "solana-program-runtime", "solana-program-test", - "solana-sdk 1.11.8", + "solana-sdk 1.11.9", ] [[package]] name = "solana-bpf-rust-membuiltins" -version = "1.11.8" +version = "1.11.9" dependencies = [ "solana-bpf-rust-mem", - "solana-program 1.11.8", + "solana-program 1.11.9", ] [[package]] name = "solana-bpf-rust-noop" -version = "1.11.8" +version = "1.11.9" dependencies = [ - "solana-program 1.11.8", + "solana-program 1.11.9", ] [[package]] name = "solana-bpf-rust-panic" -version = "1.11.8" +version = "1.11.9" dependencies = [ - "solana-program 1.11.8", + "solana-program 1.11.9", ] [[package]] name = "solana-bpf-rust-param-passing" -version = "1.11.8" +version = "1.11.9" dependencies = [ "solana-bpf-rust-param-passing-dep", - "solana-program 1.11.8", + "solana-program 1.11.9", ] [[package]] name = "solana-bpf-rust-param-passing-dep" -version = "1.11.8" +version = "1.11.9" dependencies = [ - "solana-program 1.11.8", + "solana-program 1.11.9", ] [[package]] name = "solana-bpf-rust-rand" -version = "1.11.8" +version = "1.11.9" dependencies = [ "getrandom 0.1.14", "rand 0.7.3", - "solana-program 1.11.8", + "solana-program 1.11.9", ] [[package]] name = "solana-bpf-rust-realloc" -version = "1.11.8" +version = "1.11.9" dependencies = [ - "solana-program 1.11.8", + "solana-program 1.11.9", ] [[package]] name = "solana-bpf-rust-realloc-invoke" -version = "1.11.8" +version = "1.11.9" dependencies = [ "solana-bpf-rust-realloc", - "solana-program 1.11.8", + "solana-program 1.11.9", ] [[package]] name = "solana-bpf-rust-ro-account_modify" -version = "1.11.8" +version = "1.11.9" dependencies = [ - "solana-program 1.11.8", + "solana-program 1.11.9", ] [[package]] name = "solana-bpf-rust-ro-modify" -version = "1.11.8" +version = "1.11.9" dependencies = [ - "solana-program 1.11.8", + "solana-program 1.11.9", ] [[package]] name = "solana-bpf-rust-sanity" -version = "1.11.8" +version = "1.11.9" dependencies = [ - "solana-program 1.11.8", + "solana-program 1.11.9", "solana-program-runtime", "solana-program-test", - "solana-sdk 1.11.8", + "solana-sdk 1.11.9", ] [[package]] name = "solana-bpf-rust-secp256k1-recover" -version = "1.11.8" +version = "1.11.9" dependencies = [ "libsecp256k1 0.7.0", - "solana-program 1.11.8", + "solana-program 1.11.9", ] [[package]] name = "solana-bpf-rust-sha" -version = "1.11.8" +version = "1.11.9" dependencies = [ "blake3", - "solana-program 1.11.8", + "solana-program 1.11.9", ] [[package]] name = "solana-bpf-rust-sibling-instructions" -version = "1.11.8" +version = "1.11.9" dependencies = [ - "solana-program 1.11.8", + "solana-program 1.11.9", ] [[package]] name = "solana-bpf-rust-sibling_inner-instructions" -version = "1.11.8" +version = "1.11.9" dependencies = [ - "solana-program 1.11.8", + "solana-program 1.11.9", ] [[package]] name = "solana-bpf-rust-simulation" -version = "1.11.8" +version = "1.11.9" dependencies = [ - "solana-logger 1.11.8", - "solana-program 1.11.8", + "solana-logger 1.11.9", + "solana-program 1.11.9", "solana-program-test", - "solana-sdk 1.11.8", + "solana-sdk 1.11.9", "solana-validator", ] [[package]] name = "solana-bpf-rust-spoof1" -version = "1.11.8" +version = "1.11.9" dependencies = [ - "solana-program 1.11.8", + "solana-program 1.11.9", ] [[package]] name = "solana-bpf-rust-spoof1-system" -version = "1.11.8" +version = "1.11.9" dependencies = [ - "solana-program 1.11.8", + "solana-program 1.11.9", ] [[package]] name = "solana-bpf-rust-sysvar" -version = "1.11.8" +version = "1.11.9" dependencies = [ - "solana-program 1.11.8", + "solana-program 1.11.9", "solana-program-runtime", "solana-program-test", - "solana-sdk 1.11.8", + "solana-sdk 1.11.9", ] [[package]] name = "solana-bpf-rust-upgradeable" -version = "1.11.8" +version = "1.11.9" dependencies = [ - "solana-program 1.11.8", + "solana-program 1.11.9", ] [[package]] name = "solana-bpf-rust-upgraded" -version = "1.11.8" +version = "1.11.9" dependencies = [ - "solana-program 1.11.8", + "solana-program 1.11.9", ] [[package]] name = "solana-bucket-map" -version = "1.11.8" +version = "1.11.9" dependencies = [ "log", "memmap2", "modular-bitfield", "rand 0.7.3", "solana-measure", - "solana-sdk 1.11.8", + "solana-sdk 1.11.9", "tempfile", ] [[package]] name = "solana-clap-utils" -version = "1.11.8" +version = "1.11.9" dependencies = [ "chrono", "clap 2.33.3", "rpassword", "solana-perf", "solana-remote-wallet", - "solana-sdk 1.11.8", + "solana-sdk 1.11.9", "thiserror", "tiny-bip39", "uriparse", @@ -4592,7 +4592,7 @@ dependencies = [ [[package]] name = "solana-cli-config" -version = "1.11.8" +version = "1.11.9" dependencies = [ "dirs-next", "lazy_static", @@ -4600,13 +4600,13 @@ dependencies = [ "serde_derive", "serde_yaml", "solana-clap-utils", - "solana-sdk 1.11.8", + "solana-sdk 1.11.9", "url 2.2.2", ] [[package]] name = "solana-cli-output" -version = "1.11.8" +version = "1.11.9" dependencies = [ "Inflector", "base64 0.13.0", @@ -4623,7 +4623,7 @@ dependencies = [ "solana-clap-utils", "solana-cli-config", "solana-client", - "solana-sdk 1.11.8", + "solana-sdk 1.11.9", "solana-transaction-status", "solana-vote-program", "spl-memo", @@ -4631,7 +4631,7 @@ dependencies = [ [[package]] name = "solana-client" -version = "1.11.8" +version = "1.11.9" dependencies = [ "async-mutex", "async-trait", @@ -4667,7 +4667,7 @@ dependencies = [ "solana-measure", "solana-metrics", "solana-net-utils", - "solana-sdk 1.11.8", + "solana-sdk 1.11.9", "solana-streamer", "solana-transaction-status", "solana-version", @@ -4683,27 +4683,27 @@ dependencies = [ [[package]] name = "solana-compute-budget-program" -version = "1.11.8" +version = "1.11.9" dependencies = [ "solana-program-runtime", - "solana-sdk 1.11.8", + "solana-sdk 1.11.9", ] [[package]] name = "solana-config-program" -version = "1.11.8" +version = "1.11.9" dependencies = [ "bincode", "chrono", "serde", "serde_derive", "solana-program-runtime", - "solana-sdk 1.11.8", + "solana-sdk 1.11.9", ] [[package]] name = "solana-core" -version = "1.11.8" +version = "1.11.9" dependencies = [ "ahash", "base64 0.13.0", @@ -4731,8 +4731,8 @@ dependencies = [ "solana-bloom", "solana-client", "solana-entry", - "solana-frozen-abi 1.11.8", - "solana-frozen-abi-macro 1.11.8", + "solana-frozen-abi 1.11.9", + "solana-frozen-abi-macro 1.11.9", "solana-geyser-plugin-manager", "solana-gossip", "solana-ledger", @@ -4745,7 +4745,7 @@ dependencies = [ "solana-rayon-threadlimit", "solana-rpc", "solana-runtime", - "solana-sdk 1.11.8", + "solana-sdk 1.11.9", "solana-send-transaction-service", "solana-streamer", "solana-transaction-status", @@ -4761,19 +4761,19 @@ dependencies = [ [[package]] name = "solana-download-utils" -version = "1.11.8" +version = "1.11.9" dependencies = [ "console", "indicatif", "log", "reqwest", "solana-runtime", - "solana-sdk 1.11.8", + "solana-sdk 1.11.9", ] [[package]] name = "solana-entry" -version = "1.11.8" +version = "1.11.9" dependencies = [ "bincode", "crossbeam-channel", @@ -4789,12 +4789,12 @@ dependencies = [ "solana-metrics", "solana-perf", "solana-rayon-threadlimit", - "solana-sdk 1.11.8", + "solana-sdk 1.11.9", ] [[package]] name = "solana-faucet" -version = "1.11.8" +version = "1.11.9" dependencies = [ "bincode", "byteorder 1.4.3", @@ -4805,9 +4805,9 @@ dependencies = [ "serde_derive", "solana-clap-utils", "solana-cli-config", - "solana-logger 1.11.8", + "solana-logger 1.11.9", "solana-metrics", - "solana-sdk 1.11.8", + "solana-sdk 1.11.9", "solana-version", "spl-memo", "thiserror", @@ -4838,7 +4838,7 @@ dependencies = [ [[package]] name = "solana-frozen-abi" -version = "1.11.8" +version = "1.11.9" dependencies = [ "ahash", "blake3", @@ -4863,7 +4863,7 @@ dependencies = [ "serde_derive", "serde_json", "sha2 0.10.2", - "solana-frozen-abi-macro 1.11.8", + "solana-frozen-abi-macro 1.11.9", "subtle", "thiserror", ] @@ -4882,7 +4882,7 @@ dependencies = [ [[package]] name = "solana-frozen-abi-macro" -version = "1.11.8" +version = "1.11.9" dependencies = [ "proc-macro2 1.0.41", "quote 1.0.18", @@ -4892,26 +4892,26 @@ dependencies = [ [[package]] name = "solana-genesis-utils" -version = "1.11.8" +version = "1.11.9" dependencies = [ "solana-download-utils", "solana-runtime", - "solana-sdk 1.11.8", + "solana-sdk 1.11.9", ] [[package]] name = "solana-geyser-plugin-interface" -version = "1.11.8" +version = "1.11.9" dependencies = [ "log", - "solana-sdk 1.11.8", + "solana-sdk 1.11.9", "solana-transaction-status", "thiserror", ] [[package]] name = "solana-geyser-plugin-manager" -version = "1.11.8" +version = "1.11.9" dependencies = [ "bs58", "crossbeam-channel", @@ -4924,14 +4924,14 @@ dependencies = [ "solana-metrics", "solana-rpc", "solana-runtime", - "solana-sdk 1.11.8", + "solana-sdk 1.11.9", "solana-transaction-status", "thiserror", ] [[package]] name = "solana-gossip" -version = "1.11.8" +version = "1.11.9" dependencies = [ "bincode", "bv", @@ -4955,17 +4955,17 @@ dependencies = [ "solana-clap-utils", "solana-client", "solana-entry", - "solana-frozen-abi 1.11.8", - "solana-frozen-abi-macro 1.11.8", + "solana-frozen-abi 1.11.9", + "solana-frozen-abi-macro 1.11.9", "solana-ledger", - "solana-logger 1.11.8", + "solana-logger 1.11.9", "solana-measure", "solana-metrics", "solana-net-utils", "solana-perf", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.11.8", + "solana-sdk 1.11.9", "solana-streamer", "solana-version", "solana-vote-program", @@ -4974,7 +4974,7 @@ dependencies = [ [[package]] name = "solana-ledger" -version = "1.11.8" +version = "1.11.9" dependencies = [ "bincode", "bitflags", @@ -5005,15 +5005,15 @@ dependencies = [ "solana-account-decoder", "solana-bpf-loader-program", "solana-entry", - "solana-frozen-abi 1.11.8", - "solana-frozen-abi-macro 1.11.8", + "solana-frozen-abi 1.11.9", + "solana-frozen-abi-macro 1.11.9", "solana-measure", "solana-metrics", "solana-perf", "solana-program-runtime", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.11.8", + "solana-sdk 1.11.9", "solana-stake-program", "solana-storage-bigtable", "solana-storage-proto", @@ -5042,7 +5042,7 @@ dependencies = [ [[package]] name = "solana-logger" -version = "1.11.8" +version = "1.11.9" dependencies = [ "env_logger", "lazy_static", @@ -5051,36 +5051,36 @@ dependencies = [ [[package]] name = "solana-measure" -version = "1.11.8" +version = "1.11.9" dependencies = [ "log", - "solana-sdk 1.11.8", + "solana-sdk 1.11.9", ] [[package]] name = "solana-merkle-tree" -version = "1.11.8" +version = "1.11.9" dependencies = [ "fast-math", "matches", - "solana-program 1.11.8", + "solana-program 1.11.9", ] [[package]] name = "solana-metrics" -version = "1.11.8" +version = "1.11.9" dependencies = [ "crossbeam-channel", "gethostname", "lazy_static", "log", "reqwest", - "solana-sdk 1.11.8", + "solana-sdk 1.11.9", ] [[package]] name = "solana-net-utils" -version = "1.11.8" +version = "1.11.9" dependencies = [ "bincode", "clap 3.1.6", @@ -5091,8 +5091,8 @@ dependencies = [ "serde", "serde_derive", "socket2", - "solana-logger 1.11.8", - "solana-sdk 1.11.8", + "solana-logger 1.11.9", + "solana-sdk 1.11.9", "solana-version", "tokio", "url 2.2.2", @@ -5100,7 +5100,7 @@ dependencies = [ [[package]] name = "solana-perf" -version = "1.11.8" +version = "1.11.9" dependencies = [ "ahash", "bincode", @@ -5119,13 +5119,13 @@ dependencies = [ "serde", "solana-metrics", "solana-rayon-threadlimit", - "solana-sdk 1.11.8", + "solana-sdk 1.11.9", "solana-vote-program", ] [[package]] name = "solana-poh" -version = "1.11.8" +version = "1.11.9" dependencies = [ "core_affinity", "crossbeam-channel", @@ -5135,7 +5135,7 @@ dependencies = [ "solana-measure", "solana-metrics", "solana-runtime", - "solana-sdk 1.11.8", + "solana-sdk 1.11.9", "solana-sys-tuner", "thiserror", ] @@ -5184,7 +5184,7 @@ dependencies = [ [[package]] name = "solana-program" -version = "1.11.8" +version = "1.11.9" dependencies = [ "base64 0.13.0", "bincode", @@ -5220,9 +5220,9 @@ dependencies = [ "serde_json", "sha2 0.10.2", "sha3 0.10.1", - "solana-frozen-abi 1.11.8", - "solana-frozen-abi-macro 1.11.8", - "solana-sdk-macro 1.11.8", + "solana-frozen-abi 1.11.9", + "solana-frozen-abi-macro 1.11.9", + "solana-sdk-macro 1.11.9", "thiserror", "tiny-bip39", "wasm-bindgen", @@ -5231,7 +5231,7 @@ dependencies = [ [[package]] name = "solana-program-runtime" -version = "1.11.8" +version = "1.11.9" dependencies = [ "base64 0.13.0", "bincode", @@ -5245,17 +5245,17 @@ dependencies = [ "num-traits", "rustc_version", "serde", - "solana-frozen-abi 1.11.8", - "solana-frozen-abi-macro 1.11.8", + "solana-frozen-abi 1.11.9", + "solana-frozen-abi-macro 1.11.9", "solana-measure", "solana-metrics", - "solana-sdk 1.11.8", + "solana-sdk 1.11.9", "thiserror", ] [[package]] name = "solana-program-test" -version = "1.11.8" +version = "1.11.9" dependencies = [ "assert_matches", "async-trait", @@ -5267,10 +5267,10 @@ dependencies = [ "solana-banks-client", "solana-banks-server", "solana-bpf-loader-program", - "solana-logger 1.11.8", + "solana-logger 1.11.9", "solana-program-runtime", "solana-runtime", - "solana-sdk 1.11.8", + "solana-sdk 1.11.9", "solana-vote-program", "thiserror", "tokio", @@ -5278,7 +5278,7 @@ dependencies = [ [[package]] name = "solana-rayon-threadlimit" -version = "1.11.8" +version = "1.11.9" dependencies = [ "lazy_static", "num_cpus", @@ -5286,7 +5286,7 @@ dependencies = [ [[package]] name = "solana-remote-wallet" -version = "1.11.8" +version = "1.11.9" dependencies = [ "console", "dialoguer", @@ -5296,14 +5296,14 @@ dependencies = [ "parking_lot 0.12.1", "qstring", "semver", - "solana-sdk 1.11.8", + "solana-sdk 1.11.9", "thiserror", "uriparse", ] [[package]] name = "solana-rpc" -version = "1.11.8" +version = "1.11.9" dependencies = [ "base64 0.13.0", "bincode", @@ -5336,7 +5336,7 @@ dependencies = [ "solana-poh", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.11.8", + "solana-sdk 1.11.9", "solana-send-transaction-service", "solana-stake-program", "solana-storage-bigtable", @@ -5354,7 +5354,7 @@ dependencies = [ [[package]] name = "solana-runtime" -version = "1.11.8" +version = "1.11.9" dependencies = [ "arrayref", "bincode", @@ -5390,17 +5390,17 @@ dependencies = [ "solana-bucket-map", "solana-compute-budget-program", "solana-config-program", - "solana-frozen-abi 1.11.8", - "solana-frozen-abi-macro 1.11.8", + "solana-frozen-abi 1.11.9", + "solana-frozen-abi-macro 1.11.9", "solana-measure", "solana-metrics", "solana-program-runtime", "solana-rayon-threadlimit", - "solana-sdk 1.11.8", + "solana-sdk 1.11.9", "solana-stake-program", "solana-vote-program", "solana-zk-token-proof-program", - "solana-zk-token-sdk 1.11.8", + "solana-zk-token-sdk 1.11.9", "strum", "strum_macros", "symlink", @@ -5463,7 +5463,7 @@ dependencies = [ [[package]] name = "solana-sdk" -version = "1.11.8" +version = "1.11.9" dependencies = [ "assert_matches", "base64 0.13.0", @@ -5500,11 +5500,11 @@ dependencies = [ "serde_json", "sha2 0.10.2", "sha3 0.10.1", - "solana-frozen-abi 1.11.8", - "solana-frozen-abi-macro 1.11.8", - "solana-logger 1.11.8", - "solana-program 1.11.8", - "solana-sdk-macro 1.11.8", + "solana-frozen-abi 1.11.9", + "solana-frozen-abi-macro 1.11.9", + "solana-logger 1.11.9", + "solana-program 1.11.9", + "solana-sdk-macro 1.11.9", "thiserror", "uriparse", "wasm-bindgen", @@ -5525,7 +5525,7 @@ dependencies = [ [[package]] name = "solana-sdk-macro" -version = "1.11.8" +version = "1.11.9" dependencies = [ "bs58", "proc-macro2 1.0.41", @@ -5536,7 +5536,7 @@ dependencies = [ [[package]] name = "solana-send-transaction-service" -version = "1.11.8" +version = "1.11.9" dependencies = [ "crossbeam-channel", "log", @@ -5544,12 +5544,12 @@ dependencies = [ "solana-measure", "solana-metrics", "solana-runtime", - "solana-sdk 1.11.8", + "solana-sdk 1.11.9", ] [[package]] name = "solana-stake-program" -version = "1.11.8" +version = "1.11.9" dependencies = [ "bincode", "log", @@ -5559,18 +5559,18 @@ dependencies = [ "serde", "serde_derive", "solana-config-program", - "solana-frozen-abi 1.11.8", - "solana-frozen-abi-macro 1.11.8", + "solana-frozen-abi 1.11.9", + "solana-frozen-abi-macro 1.11.9", "solana-metrics", "solana-program-runtime", - "solana-sdk 1.11.8", + "solana-sdk 1.11.9", "solana-vote-program", "thiserror", ] [[package]] name = "solana-storage-bigtable" -version = "1.11.8" +version = "1.11.9" dependencies = [ "backoff", "bincode", @@ -5591,7 +5591,7 @@ dependencies = [ "serde_derive", "smpl_jwt", "solana-metrics", - "solana-sdk 1.11.8", + "solana-sdk 1.11.9", "solana-storage-proto", "solana-transaction-status", "thiserror", @@ -5602,7 +5602,7 @@ dependencies = [ [[package]] name = "solana-storage-proto" -version = "1.11.8" +version = "1.11.9" dependencies = [ "bincode", "bs58", @@ -5610,14 +5610,14 @@ dependencies = [ "protobuf-src", "serde", "solana-account-decoder", - "solana-sdk 1.11.8", + "solana-sdk 1.11.9", "solana-transaction-status", "tonic-build 0.8.0", ] [[package]] name = "solana-streamer" -version = "1.11.8" +version = "1.11.9" dependencies = [ "crossbeam-channel", "futures-util", @@ -5636,7 +5636,7 @@ dependencies = [ "rustls 0.20.6", "solana-metrics", "solana-perf", - "solana-sdk 1.11.8", + "solana-sdk 1.11.9", "thiserror", "tokio", "x509-parser", @@ -5644,13 +5644,13 @@ dependencies = [ [[package]] name = "solana-sys-tuner" -version = "1.11.8" +version = "1.11.9" dependencies = [ "clap 2.33.3", "libc", "log", "nix", - "solana-logger 1.11.8", + "solana-logger 1.11.9", "solana-version", "sysctl", "unix_socket2", @@ -5659,7 +5659,7 @@ dependencies = [ [[package]] name = "solana-test-validator" -version = "1.11.8" +version = "1.11.9" dependencies = [ "base64 0.13.0", "log", @@ -5670,20 +5670,20 @@ dependencies = [ "solana-core", "solana-gossip", "solana-ledger", - "solana-logger 1.11.8", + "solana-logger 1.11.9", "solana-net-utils", "solana-program-runtime", "solana-program-test", "solana-rpc", "solana-runtime", - "solana-sdk 1.11.8", + "solana-sdk 1.11.9", "solana-streamer", "tokio", ] [[package]] name = "solana-transaction-status" -version = "1.11.8" +version = "1.11.9" dependencies = [ "Inflector", "base64 0.13.0", @@ -5698,7 +5698,7 @@ dependencies = [ "solana-account-decoder", "solana-measure", "solana-metrics", - "solana-sdk 1.11.8", + "solana-sdk 1.11.9", "solana-vote-program", "spl-associated-token-account", "spl-memo", @@ -5709,7 +5709,7 @@ dependencies = [ [[package]] name = "solana-validator" -version = "1.11.8" +version = "1.11.9" dependencies = [ "chrono", "clap 2.33.3", @@ -5740,14 +5740,14 @@ dependencies = [ "solana-genesis-utils", "solana-gossip", "solana-ledger", - "solana-logger 1.11.8", + "solana-logger 1.11.9", "solana-metrics", "solana-net-utils", "solana-perf", "solana-poh", "solana-rpc", "solana-runtime", - "solana-sdk 1.11.8", + "solana-sdk 1.11.9", "solana-send-transaction-service", "solana-storage-bigtable", "solana-streamer", @@ -5760,21 +5760,21 @@ dependencies = [ [[package]] name = "solana-version" -version = "1.11.8" +version = "1.11.9" dependencies = [ "log", "rustc_version", "semver", "serde", "serde_derive", - "solana-frozen-abi 1.11.8", - "solana-frozen-abi-macro 1.11.8", - "solana-sdk 1.11.8", + "solana-frozen-abi 1.11.9", + "solana-frozen-abi-macro 1.11.9", + "solana-sdk 1.11.9", ] [[package]] name = "solana-vote-program" -version = "1.11.8" +version = "1.11.9" dependencies = [ "bincode", "log", @@ -5783,25 +5783,25 @@ dependencies = [ "rustc_version", "serde", "serde_derive", - "solana-frozen-abi 1.11.8", - "solana-frozen-abi-macro 1.11.8", + "solana-frozen-abi 1.11.9", + "solana-frozen-abi-macro 1.11.9", "solana-metrics", "solana-program-runtime", - "solana-sdk 1.11.8", + "solana-sdk 1.11.9", "thiserror", ] [[package]] name = "solana-zk-token-proof-program" -version = "1.11.8" +version = "1.11.9" dependencies = [ "bytemuck", "getrandom 0.1.14", "num-derive", "num-traits", "solana-program-runtime", - "solana-sdk 1.11.8", - "solana-zk-token-sdk 1.11.8", + "solana-sdk 1.11.9", + "solana-zk-token-sdk 1.11.9", ] [[package]] @@ -5836,7 +5836,7 @@ dependencies = [ [[package]] name = "solana-zk-token-sdk" -version = "1.11.8" +version = "1.11.9" dependencies = [ "aes-gcm-siv", "arrayref", @@ -5855,8 +5855,8 @@ dependencies = [ "serde", "serde_json", "sha3 0.9.1", - "solana-program 1.11.8", - "solana-sdk 1.11.8", + "solana-program 1.11.9", + "solana-sdk 1.11.9", "subtle", "thiserror", "zeroize", diff --git a/programs/bpf/Cargo.toml b/programs/bpf/Cargo.toml index 591b69e84cdb76..ad20f9b9d1d704 100644 --- a/programs/bpf/Cargo.toml +++ b/programs/bpf/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "solana-bpf-programs" description = "Blockchain, Rebuilt for Scale" -version = "1.11.8" +version = "1.11.9" documentation = "https://docs.rs/solana" homepage = "https://solana.com/" readme = "README.md" @@ -26,22 +26,22 @@ itertools = "0.10.1" log = "0.4.11" miow = "0.3.6" net2 = "0.2.37" -solana-account-decoder = { path = "../../account-decoder", version = "=1.11.8" } -solana-bpf-loader-program = { path = "../bpf_loader", version = "=1.11.8" } -solana-bpf-rust-invoke = { path = "rust/invoke", version = "=1.11.8" } -solana-bpf-rust-realloc = { path = "rust/realloc", version = "=1.11.8" } -solana-bpf-rust-realloc-invoke = { path = "rust/realloc_invoke", version = "=1.11.8" } -solana-cli-output = { path = "../../cli-output", version = "=1.11.8" } -solana-logger = { path = "../../logger", version = "=1.11.8" } -solana-measure = { path = "../../measure", version = "=1.11.8" } -solana-program-runtime = { path = "../../program-runtime", version = "=1.11.8" } -solana-runtime = { path = "../../runtime", version = "=1.11.8" } -solana-sdk = { path = "../../sdk", version = "=1.11.8" } -solana-transaction-status = { path = "../../transaction-status", version = "=1.11.8" } +solana-account-decoder = { path = "../../account-decoder", version = "=1.11.9" } +solana-bpf-loader-program = { path = "../bpf_loader", version = "=1.11.9" } +solana-bpf-rust-invoke = { path = "rust/invoke", version = "=1.11.9" } +solana-bpf-rust-realloc = { path = "rust/realloc", version = "=1.11.9" } +solana-bpf-rust-realloc-invoke = { path = "rust/realloc_invoke", version = "=1.11.9" } +solana-cli-output = { path = "../../cli-output", version = "=1.11.9" } +solana-logger = { path = "../../logger", version = "=1.11.9" } +solana-measure = { path = "../../measure", version = "=1.11.9" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.11.9" } +solana-runtime = { path = "../../runtime", version = "=1.11.9" } +solana-sdk = { path = "../../sdk", version = "=1.11.9" } +solana-transaction-status = { path = "../../transaction-status", version = "=1.11.9" } solana_rbpf = "=0.2.31" [dev-dependencies] -solana-ledger = { path = "../../ledger", version = "=1.11.8" } +solana-ledger = { path = "../../ledger", version = "=1.11.9" } [[bench]] name = "bpf_loader" diff --git a/programs/bpf/rust/128bit/Cargo.toml b/programs/bpf/rust/128bit/Cargo.toml index fa158ecb889ef1..e40d4174945626 100644 --- a/programs/bpf/rust/128bit/Cargo.toml +++ b/programs/bpf/rust/128bit/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-128bit" -version = "1.11.8" +version = "1.11.9" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ documentation = "https://docs.rs/solana-bpf-rust-128bit" edition = "2021" [dependencies] -solana-bpf-rust-128bit-dep = { path = "../128bit_dep", version = "=1.11.8" } -solana-program = { path = "../../../../sdk/program", version = "=1.11.8" } +solana-bpf-rust-128bit-dep = { path = "../128bit_dep", version = "=1.11.9" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.9" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/128bit_dep/Cargo.toml b/programs/bpf/rust/128bit_dep/Cargo.toml index be9223f4488bc9..a9ab63b27c8c2a 100644 --- a/programs/bpf/rust/128bit_dep/Cargo.toml +++ b/programs/bpf/rust/128bit_dep/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-128bit-dep" -version = "1.11.8" +version = "1.11.9" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-128bit-dep" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.8" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.9" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/bpf/rust/alloc/Cargo.toml b/programs/bpf/rust/alloc/Cargo.toml index 537756249da95e..6b4e844d70bbd4 100644 --- a/programs/bpf/rust/alloc/Cargo.toml +++ b/programs/bpf/rust/alloc/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-alloc" -version = "1.11.8" +version = "1.11.9" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-alloc" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.8" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.9" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/call_depth/Cargo.toml b/programs/bpf/rust/call_depth/Cargo.toml index d593e1c0dd8663..1f649630b132c8 100644 --- a/programs/bpf/rust/call_depth/Cargo.toml +++ b/programs/bpf/rust/call_depth/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-call-depth" -version = "1.11.8" +version = "1.11.9" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-call-depth" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.8" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.9" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/caller_access/Cargo.toml b/programs/bpf/rust/caller_access/Cargo.toml index 7cbd3e18f23061..09741732193f27 100644 --- a/programs/bpf/rust/caller_access/Cargo.toml +++ b/programs/bpf/rust/caller_access/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-caller-access" -version = "1.11.8" +version = "1.11.9" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-caller-access" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.8" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.9" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/curve25519/Cargo.toml b/programs/bpf/rust/curve25519/Cargo.toml index eb61f96ee542cd..018bc2e34c3073 100644 --- a/programs/bpf/rust/curve25519/Cargo.toml +++ b/programs/bpf/rust/curve25519/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-curve25519" -version = "1.11.8" +version = "1.11.9" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ documentation = "https://docs.rs/solana-bpf-rust-zktoken_crypto" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.8" } -solana-zk-token-sdk = { path = "../../../../zk-token-sdk", version = "=1.11.8" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.9" } +solana-zk-token-sdk = { path = "../../../../zk-token-sdk", version = "=1.11.9" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/custom_heap/Cargo.toml b/programs/bpf/rust/custom_heap/Cargo.toml index c827698a52f3f5..ac4c1243a8e850 100644 --- a/programs/bpf/rust/custom_heap/Cargo.toml +++ b/programs/bpf/rust/custom_heap/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-custom-heap" -version = "1.11.8" +version = "1.11.9" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-custom-heap" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.8" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.9" } [features] default = ["custom-heap"] diff --git a/programs/bpf/rust/dep_crate/Cargo.toml b/programs/bpf/rust/dep_crate/Cargo.toml index 3aa4024a723511..ef131840c2780d 100644 --- a/programs/bpf/rust/dep_crate/Cargo.toml +++ b/programs/bpf/rust/dep_crate/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-dep-crate" -version = "1.11.8" +version = "1.11.9" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,8 +12,8 @@ edition = "2021" [dependencies] byteorder = { version = "1", default-features = false } # list of crates which must be buildable for bpf programs -solana-address-lookup-table-program = { path = "../../../../programs/address-lookup-table", version = "=1.11.8" } -solana-program = { path = "../../../../sdk/program", version = "=1.11.8" } +solana-address-lookup-table-program = { path = "../../../../programs/address-lookup-table", version = "=1.11.9" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.9" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/deprecated_loader/Cargo.toml b/programs/bpf/rust/deprecated_loader/Cargo.toml index 0a9f882678eca3..167a1646cf1ec0 100644 --- a/programs/bpf/rust/deprecated_loader/Cargo.toml +++ b/programs/bpf/rust/deprecated_loader/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-deprecated-loader" -version = "1.11.8" +version = "1.11.9" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-deprecated-loader" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.8" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.9" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/dup_accounts/Cargo.toml b/programs/bpf/rust/dup_accounts/Cargo.toml index 7261d63d45ecdc..29becf36574bef 100644 --- a/programs/bpf/rust/dup_accounts/Cargo.toml +++ b/programs/bpf/rust/dup_accounts/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-dup-accounts" -version = "1.11.8" +version = "1.11.9" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-dup-accounts" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.8" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.9" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/error_handling/Cargo.toml b/programs/bpf/rust/error_handling/Cargo.toml index 80c9b2fb5825dd..3b845d9fd20ac0 100644 --- a/programs/bpf/rust/error_handling/Cargo.toml +++ b/programs/bpf/rust/error_handling/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-error-handling" -version = "1.11.8" +version = "1.11.9" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,7 +12,7 @@ edition = "2021" [dependencies] num-derive = "0.3" num-traits = "0.2" -solana-program = { path = "../../../../sdk/program", version = "=1.11.8" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.9" } thiserror = "1.0" [lib] diff --git a/programs/bpf/rust/external_spend/Cargo.toml b/programs/bpf/rust/external_spend/Cargo.toml index a3c4636992708b..419a177c5c56b9 100644 --- a/programs/bpf/rust/external_spend/Cargo.toml +++ b/programs/bpf/rust/external_spend/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-external-spend" -version = "1.11.8" +version = "1.11.9" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-external-spend" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.8" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.9" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/finalize/Cargo.toml b/programs/bpf/rust/finalize/Cargo.toml index 043df826139ead..c9039891870a2d 100644 --- a/programs/bpf/rust/finalize/Cargo.toml +++ b/programs/bpf/rust/finalize/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-finalize" -version = "1.11.8" +version = "1.11.9" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-finalize" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.8" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.9" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/get_minimum_delegation/Cargo.toml b/programs/bpf/rust/get_minimum_delegation/Cargo.toml index 52530d4064762c..7744fba4b687fd 100644 --- a/programs/bpf/rust/get_minimum_delegation/Cargo.toml +++ b/programs/bpf/rust/get_minimum_delegation/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-get-minimum-delegation" -version = "1.11.8" +version = "1.11.9" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-get-minimum-delegation" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.8" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.9" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/inner_instruction_alignment_check/Cargo.toml b/programs/bpf/rust/inner_instruction_alignment_check/Cargo.toml index 11924bf5da5042..c34b031ad368a1 100644 --- a/programs/bpf/rust/inner_instruction_alignment_check/Cargo.toml +++ b/programs/bpf/rust/inner_instruction_alignment_check/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-inner_instruction_alignment_check" -version = "1.11.8" +version = "1.11.9" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-inner_instruction_alignment_che edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.8" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.9" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/instruction_introspection/Cargo.toml b/programs/bpf/rust/instruction_introspection/Cargo.toml index dc0860b1d5bec9..ac4a52c97fe054 100644 --- a/programs/bpf/rust/instruction_introspection/Cargo.toml +++ b/programs/bpf/rust/instruction_introspection/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-instruction-introspection" -version = "1.11.8" +version = "1.11.9" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-instruction-introspection" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.8" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.9" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/invoke/Cargo.toml b/programs/bpf/rust/invoke/Cargo.toml index 7551830c46a28e..7ceed3ea0fdfd8 100644 --- a/programs/bpf/rust/invoke/Cargo.toml +++ b/programs/bpf/rust/invoke/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-invoke" -version = "1.11.8" +version = "1.11.9" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -15,7 +15,7 @@ program = [] [dependencies] solana-bpf-rust-invoked = { path = "../invoked", default-features = false } -solana-program = { path = "../../../../sdk/program", version = "=1.11.8" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.9" } [lib] crate-type = ["lib", "cdylib"] diff --git a/programs/bpf/rust/invoke_and_error/Cargo.toml b/programs/bpf/rust/invoke_and_error/Cargo.toml index c18712a8624044..d867b0f319ef5f 100644 --- a/programs/bpf/rust/invoke_and_error/Cargo.toml +++ b/programs/bpf/rust/invoke_and_error/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-invoke-and-error" -version = "1.11.8" +version = "1.11.9" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-invoke-and-error" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.8" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.9" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/invoke_and_ok/Cargo.toml b/programs/bpf/rust/invoke_and_ok/Cargo.toml index 65d567a65c00cc..732a321f13e5aa 100644 --- a/programs/bpf/rust/invoke_and_ok/Cargo.toml +++ b/programs/bpf/rust/invoke_and_ok/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-invoke-and-ok" -version = "1.11.8" +version = "1.11.9" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-invoke-and-ok" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.8" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.9" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/invoke_and_return/Cargo.toml b/programs/bpf/rust/invoke_and_return/Cargo.toml index e0bb02e383b214..07c03696c1532d 100644 --- a/programs/bpf/rust/invoke_and_return/Cargo.toml +++ b/programs/bpf/rust/invoke_and_return/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-invoke-and-return" -version = "1.11.8" +version = "1.11.9" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-invoke-and-return" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.8" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.9" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/invoked/Cargo.toml b/programs/bpf/rust/invoked/Cargo.toml index 6bfe2f4e816b6b..5effe173a7154a 100644 --- a/programs/bpf/rust/invoked/Cargo.toml +++ b/programs/bpf/rust/invoked/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-invoked" -version = "1.11.8" +version = "1.11.9" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,7 +14,7 @@ default = ["program"] program = [] [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.8" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.9" } [lib] crate-type = ["lib", "cdylib"] diff --git a/programs/bpf/rust/iter/Cargo.toml b/programs/bpf/rust/iter/Cargo.toml index 19f6f9038ee225..416a62019c88ad 100644 --- a/programs/bpf/rust/iter/Cargo.toml +++ b/programs/bpf/rust/iter/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-iter" -version = "1.11.8" +version = "1.11.9" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-iter" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.8" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.9" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/log_data/Cargo.toml b/programs/bpf/rust/log_data/Cargo.toml index 39b96c2208e404..1533ad3c618567 100644 --- a/programs/bpf/rust/log_data/Cargo.toml +++ b/programs/bpf/rust/log_data/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-log-data" -version = "1.11.8" +version = "1.11.9" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-log-data" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.8" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.9" } [features] default = ["program"] diff --git a/programs/bpf/rust/many_args/Cargo.toml b/programs/bpf/rust/many_args/Cargo.toml index 2d5bf2dae16ed8..22c1a3bf0332f7 100644 --- a/programs/bpf/rust/many_args/Cargo.toml +++ b/programs/bpf/rust/many_args/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-many-args" -version = "1.11.8" +version = "1.11.9" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ documentation = "https://docs.rs/solana-bpf-rust-many-args" edition = "2021" [dependencies] -solana-bpf-rust-many-args-dep = { path = "../many_args_dep", version = "=1.11.8" } -solana-program = { path = "../../../../sdk/program", version = "=1.11.8" } +solana-bpf-rust-many-args-dep = { path = "../many_args_dep", version = "=1.11.9" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.9" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/many_args_dep/Cargo.toml b/programs/bpf/rust/many_args_dep/Cargo.toml index a09e5d62c4f38e..8a54b1a03a4bbe 100644 --- a/programs/bpf/rust/many_args_dep/Cargo.toml +++ b/programs/bpf/rust/many_args_dep/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-many-args-dep" -version = "1.11.8" +version = "1.11.9" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-many-args-dep" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.8" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.9" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/bpf/rust/mem/Cargo.toml b/programs/bpf/rust/mem/Cargo.toml index 657e6fa8f211e7..b75f1ee8aa528c 100644 --- a/programs/bpf/rust/mem/Cargo.toml +++ b/programs/bpf/rust/mem/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-mem" -version = "1.11.8" +version = "1.11.9" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,12 +13,12 @@ edition = "2021" no-entrypoint = [] [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.8" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.9" } [dev-dependencies] -solana-program-runtime = { path = "../../../../program-runtime", version = "=1.11.8" } -solana-program-test = { path = "../../../../program-test", version = "=1.11.8" } -solana-sdk = { path = "../../../../sdk", version = "=1.11.8" } +solana-program-runtime = { path = "../../../../program-runtime", version = "=1.11.9" } +solana-program-test = { path = "../../../../program-test", version = "=1.11.9" } +solana-sdk = { path = "../../../../sdk", version = "=1.11.9" } [lib] crate-type = ["cdylib", "lib"] diff --git a/programs/bpf/rust/membuiltins/Cargo.toml b/programs/bpf/rust/membuiltins/Cargo.toml index 11ca354d0110da..898116bbc421e7 100644 --- a/programs/bpf/rust/membuiltins/Cargo.toml +++ b/programs/bpf/rust/membuiltins/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-membuiltins" -version = "1.11.8" +version = "1.11.9" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ documentation = "https://docs.rs/solana-bpf-rust-mem" edition = "2021" [dependencies] -solana-bpf-rust-mem = { path = "../mem", version = "=1.11.8", features = [ "no-entrypoint" ] } -solana-program = { path = "../../../../sdk/program", version = "=1.11.8" } +solana-bpf-rust-mem = { path = "../mem", version = "=1.11.9", features = [ "no-entrypoint" ] } +solana-program = { path = "../../../../sdk/program", version = "=1.11.9" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/noop/Cargo.toml b/programs/bpf/rust/noop/Cargo.toml index 9833469754ec7f..ccb303a77e7299 100644 --- a/programs/bpf/rust/noop/Cargo.toml +++ b/programs/bpf/rust/noop/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-noop" -version = "1.11.8" +version = "1.11.9" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-noop" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.8" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.9" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/panic/Cargo.toml b/programs/bpf/rust/panic/Cargo.toml index a6f6afd5bef730..e3d739661ba1b7 100644 --- a/programs/bpf/rust/panic/Cargo.toml +++ b/programs/bpf/rust/panic/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-panic" -version = "1.11.8" +version = "1.11.9" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-panic" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.8" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.9" } [features] default = ["custom-panic"] diff --git a/programs/bpf/rust/param_passing/Cargo.toml b/programs/bpf/rust/param_passing/Cargo.toml index 40137e695c8b3b..05ea4cfae80244 100644 --- a/programs/bpf/rust/param_passing/Cargo.toml +++ b/programs/bpf/rust/param_passing/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-param-passing" -version = "1.11.8" +version = "1.11.9" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ documentation = "https://docs.rs/solana-bpf-rust-param-passing" edition = "2021" [dependencies] -solana-bpf-rust-param-passing-dep = { path = "../param_passing_dep", version = "=1.11.8" } -solana-program = { path = "../../../../sdk/program", version = "=1.11.8" } +solana-bpf-rust-param-passing-dep = { path = "../param_passing_dep", version = "=1.11.9" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.9" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/param_passing_dep/Cargo.toml b/programs/bpf/rust/param_passing_dep/Cargo.toml index d9769856df9673..c3ab378b560cd1 100644 --- a/programs/bpf/rust/param_passing_dep/Cargo.toml +++ b/programs/bpf/rust/param_passing_dep/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-param-passing-dep" -version = "1.11.8" +version = "1.11.9" description = "Solana BPF program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-param-passing-dep" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.8" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.9" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/bpf/rust/rand/Cargo.toml b/programs/bpf/rust/rand/Cargo.toml index 89dccc7776806f..89e75f4c9292e2 100644 --- a/programs/bpf/rust/rand/Cargo.toml +++ b/programs/bpf/rust/rand/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-rand" -version = "1.11.8" +version = "1.11.9" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,7 +12,7 @@ edition = "2021" [dependencies] getrandom = { version = "0.1.14", features = ["dummy"] } rand = "0.7" -solana-program = { path = "../../../../sdk/program", version = "=1.11.8" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.9" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/realloc/Cargo.toml b/programs/bpf/rust/realloc/Cargo.toml index 671d4d190f8998..00ee51085710a0 100644 --- a/programs/bpf/rust/realloc/Cargo.toml +++ b/programs/bpf/rust/realloc/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-realloc" -version = "1.11.8" +version = "1.11.9" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,7 +14,7 @@ default = ["program"] program = [] [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.8" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.9" } [lib] crate-type = ["lib", "cdylib"] diff --git a/programs/bpf/rust/realloc_invoke/Cargo.toml b/programs/bpf/rust/realloc_invoke/Cargo.toml index b28183d2945aa6..f8ef754dda19e1 100644 --- a/programs/bpf/rust/realloc_invoke/Cargo.toml +++ b/programs/bpf/rust/realloc_invoke/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-realloc-invoke" -version = "1.11.8" +version = "1.11.9" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,8 +14,8 @@ default = ["program"] program = [] [dependencies] -solana-bpf-rust-realloc = { path = "../realloc", version = "=1.11.8", default-features = false } -solana-program = { path = "../../../../sdk/program", version = "=1.11.8" } +solana-bpf-rust-realloc = { path = "../realloc", version = "=1.11.9", default-features = false } +solana-program = { path = "../../../../sdk/program", version = "=1.11.9" } [lib] crate-type = ["lib", "cdylib"] diff --git a/programs/bpf/rust/ro_account_modify/Cargo.toml b/programs/bpf/rust/ro_account_modify/Cargo.toml index da59a850ccb1da..e53564c56b6a12 100644 --- a/programs/bpf/rust/ro_account_modify/Cargo.toml +++ b/programs/bpf/rust/ro_account_modify/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-ro-account_modify" -version = "1.11.8" +version = "1.11.9" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-ro-modify" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.8" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.9" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/ro_modify/Cargo.toml b/programs/bpf/rust/ro_modify/Cargo.toml index f9bb3ea3999810..331eae0d2832d3 100644 --- a/programs/bpf/rust/ro_modify/Cargo.toml +++ b/programs/bpf/rust/ro_modify/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-ro-modify" -version = "1.11.8" +version = "1.11.9" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-ro-modify" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.8" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.9" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/sanity/Cargo.toml b/programs/bpf/rust/sanity/Cargo.toml index 77b42ddd3e8cd8..2294e9e3a252b8 100644 --- a/programs/bpf/rust/sanity/Cargo.toml +++ b/programs/bpf/rust/sanity/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-sanity" -version = "1.11.8" +version = "1.11.9" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,12 +13,12 @@ edition = "2021" test-bpf = [] [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.8" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.9" } [dev-dependencies] -solana-program-runtime = { path = "../../../../program-runtime", version = "=1.11.8" } -solana-program-test = { path = "../../../../program-test", version = "=1.11.8" } -solana-sdk = { path = "../../../../sdk", version = "=1.11.8" } +solana-program-runtime = { path = "../../../../program-runtime", version = "=1.11.9" } +solana-program-test = { path = "../../../../program-test", version = "=1.11.9" } +solana-sdk = { path = "../../../../sdk", version = "=1.11.9" } [lib] crate-type = ["cdylib", "lib"] diff --git a/programs/bpf/rust/secp256k1_recover/Cargo.toml b/programs/bpf/rust/secp256k1_recover/Cargo.toml index c05d637e41a44a..25a3861e71752b 100644 --- a/programs/bpf/rust/secp256k1_recover/Cargo.toml +++ b/programs/bpf/rust/secp256k1_recover/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-secp256k1-recover" -version = "1.11.8" +version = "1.11.9" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -11,7 +11,7 @@ edition = "2021" [dependencies] libsecp256k1 = { version = "0.7.0", default-features = false } -solana-program = { path = "../../../../sdk/program", version = "=1.11.8" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.9" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/sha/Cargo.toml b/programs/bpf/rust/sha/Cargo.toml index e28e0f14e63f5c..f5bb0cb3599e06 100644 --- a/programs/bpf/rust/sha/Cargo.toml +++ b/programs/bpf/rust/sha/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-sha" -version = "1.11.8" +version = "1.11.9" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -11,7 +11,7 @@ edition = "2021" [dependencies] blake3 = "1.0.0" -solana-program = { path = "../../../../sdk/program", version = "=1.11.8" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.9" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/sibling_inner_instruction/Cargo.toml b/programs/bpf/rust/sibling_inner_instruction/Cargo.toml index 7ca9d02ea71445..3b8f2672811a88 100644 --- a/programs/bpf/rust/sibling_inner_instruction/Cargo.toml +++ b/programs/bpf/rust/sibling_inner_instruction/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-sibling_inner-instructions" -version = "1.11.8" +version = "1.11.9" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-log-data" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.8" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.9" } [features] default = ["program"] diff --git a/programs/bpf/rust/sibling_instruction/Cargo.toml b/programs/bpf/rust/sibling_instruction/Cargo.toml index 32f4b92087fb63..4deb61f4ea5bc5 100644 --- a/programs/bpf/rust/sibling_instruction/Cargo.toml +++ b/programs/bpf/rust/sibling_instruction/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-sibling-instructions" -version = "1.11.8" +version = "1.11.9" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-log-data" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.8" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.9" } [features] default = ["program"] diff --git a/programs/bpf/rust/simulation/Cargo.toml b/programs/bpf/rust/simulation/Cargo.toml index 01ac087852d7c7..db732cc29c789c 100644 --- a/programs/bpf/rust/simulation/Cargo.toml +++ b/programs/bpf/rust/simulation/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-simulation" -version = "1.11.8" +version = "1.11.9" description = "Solana BPF Program Simulation Differences" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,13 +13,13 @@ edition = "2021" test-bpf = [] [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.8" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.9" } [dev-dependencies] -solana-logger = { path = "../../../../logger", version = "=1.11.8" } -solana-program-test = { path = "../../../../program-test", version = "=1.11.8" } -solana-sdk = { path = "../../../../sdk", version = "=1.11.8" } -solana-validator = { path = "../../../../validator", version = "=1.11.8" } +solana-logger = { path = "../../../../logger", version = "=1.11.9" } +solana-program-test = { path = "../../../../program-test", version = "=1.11.9" } +solana-sdk = { path = "../../../../sdk", version = "=1.11.9" } +solana-validator = { path = "../../../../validator", version = "=1.11.9" } [lib] crate-type = ["cdylib", "lib"] diff --git a/programs/bpf/rust/spoof1/Cargo.toml b/programs/bpf/rust/spoof1/Cargo.toml index 71f7264b607e3d..a29494dba92f61 100644 --- a/programs/bpf/rust/spoof1/Cargo.toml +++ b/programs/bpf/rust/spoof1/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-spoof1" -version = "1.11.8" +version = "1.11.9" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-spoof1" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.8" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.9" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/spoof1_system/Cargo.toml b/programs/bpf/rust/spoof1_system/Cargo.toml index 3ee5f3df84bdcd..fa67a4c5614d58 100644 --- a/programs/bpf/rust/spoof1_system/Cargo.toml +++ b/programs/bpf/rust/spoof1_system/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-spoof1-system" -version = "1.11.8" +version = "1.11.9" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-spoof1-system" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.8" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.9" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/sysvar/Cargo.toml b/programs/bpf/rust/sysvar/Cargo.toml index 13fef4321e949e..ca517c3c1b06c2 100644 --- a/programs/bpf/rust/sysvar/Cargo.toml +++ b/programs/bpf/rust/sysvar/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-sysvar" -version = "1.11.8" +version = "1.11.9" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,12 +10,12 @@ documentation = "https://docs.rs/solana-bpf-rust-sysvar" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.8" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.9" } [dev-dependencies] -solana-program-runtime = { path = "../../../../program-runtime", version = "=1.11.8" } -solana-program-test = { path = "../../../../program-test", version = "=1.11.8" } -solana-sdk = { path = "../../../../sdk", version = "=1.11.8" } +solana-program-runtime = { path = "../../../../program-runtime", version = "=1.11.9" } +solana-program-test = { path = "../../../../program-test", version = "=1.11.9" } +solana-sdk = { path = "../../../../sdk", version = "=1.11.9" } [lib] crate-type = ["cdylib", "lib"] diff --git a/programs/bpf/rust/upgradeable/Cargo.toml b/programs/bpf/rust/upgradeable/Cargo.toml index 3ec82b4f6dbe41..e54f6ff85495d6 100644 --- a/programs/bpf/rust/upgradeable/Cargo.toml +++ b/programs/bpf/rust/upgradeable/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-upgradeable" -version = "1.11.8" +version = "1.11.9" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-upgradeable" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.8" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.9" } [lib] name = "solana_bpf_rust_upgradeable" diff --git a/programs/bpf/rust/upgraded/Cargo.toml b/programs/bpf/rust/upgraded/Cargo.toml index 7f980554db7053..dc8941a788cca2 100644 --- a/programs/bpf/rust/upgraded/Cargo.toml +++ b/programs/bpf/rust/upgraded/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-upgraded" -version = "1.11.8" +version = "1.11.9" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-upgraded" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.8" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.9" } [lib] name = "solana_bpf_rust_upgraded" diff --git a/programs/bpf_loader/Cargo.toml b/programs/bpf_loader/Cargo.toml index 6cc1d4f29b0c1e..79aee7f2f38d07 100644 --- a/programs/bpf_loader/Cargo.toml +++ b/programs/bpf_loader/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-loader-program" -version = "1.11.8" +version = "1.11.9" description = "Solana BPF loader" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,17 +14,17 @@ bincode = "1.3.3" byteorder = "1.4.3" libsecp256k1 = "0.6.0" log = "0.4.17" -solana-measure = { path = "../../measure", version = "=1.11.8" } -solana-metrics = { path = "../../metrics", version = "=1.11.8" } -solana-program-runtime = { path = "../../program-runtime", version = "=1.11.8" } -solana-sdk = { path = "../../sdk", version = "=1.11.8" } -solana-zk-token-sdk = { path = "../../zk-token-sdk", version = "=1.11.8" } +solana-measure = { path = "../../measure", version = "=1.11.9" } +solana-metrics = { path = "../../metrics", version = "=1.11.9" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.11.9" } +solana-sdk = { path = "../../sdk", version = "=1.11.9" } +solana-zk-token-sdk = { path = "../../zk-token-sdk", version = "=1.11.9" } solana_rbpf = "=0.2.31" thiserror = "1.0" [dev-dependencies] rand = "0.7.3" -solana-runtime = { path = "../../runtime", version = "=1.11.8" } +solana-runtime = { path = "../../runtime", version = "=1.11.9" } [lib] crate-type = ["lib"] diff --git a/programs/bpf_loader/gen-syscall-list/Cargo.toml b/programs/bpf_loader/gen-syscall-list/Cargo.toml index 9a90e03a14d75d..0f2816c80e7d0c 100644 --- a/programs/bpf_loader/gen-syscall-list/Cargo.toml +++ b/programs/bpf_loader/gen-syscall-list/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "gen-syscall-list" -version = "1.11.8" +version = "1.11.9" edition = "2021" license = "Apache-2.0" publish = false diff --git a/programs/compute-budget/Cargo.toml b/programs/compute-budget/Cargo.toml index b58481f3a072cb..79e26e61abf9f6 100644 --- a/programs/compute-budget/Cargo.toml +++ b/programs/compute-budget/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "solana-compute-budget-program" description = "Solana Compute Budget program" -version = "1.11.8" +version = "1.11.9" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-compute-budget-program" repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ license = "Apache-2.0" edition = "2021" [dependencies] -solana-program-runtime = { path = "../../program-runtime", version = "=1.11.8" } -solana-sdk = { path = "../../sdk", version = "=1.11.8" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.11.9" } +solana-sdk = { path = "../../sdk", version = "=1.11.9" } [lib] crate-type = ["lib"] diff --git a/programs/config/Cargo.toml b/programs/config/Cargo.toml index a689941cc09466..574a082df4d331 100644 --- a/programs/config/Cargo.toml +++ b/programs/config/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-config-program" -version = "1.11.8" +version = "1.11.9" description = "Solana Config program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,11 +14,11 @@ bincode = "1.3.3" chrono = { version = "0.4.11", features = ["serde"] } serde = "1.0.138" serde_derive = "1.0.103" -solana-program-runtime = { path = "../../program-runtime", version = "=1.11.8" } -solana-sdk = { path = "../../sdk", version = "=1.11.8" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.11.9" } +solana-sdk = { path = "../../sdk", version = "=1.11.9" } [dev-dependencies] -solana-logger = { path = "../../logger", version = "=1.11.8" } +solana-logger = { path = "../../logger", version = "=1.11.9" } [lib] crate-type = ["lib"] diff --git a/programs/ed25519-tests/Cargo.toml b/programs/ed25519-tests/Cargo.toml index 543a7a70a196cd..efc31aa617611d 100644 --- a/programs/ed25519-tests/Cargo.toml +++ b/programs/ed25519-tests/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-ed25519-program-tests" -version = "1.11.8" +version = "1.11.9" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" @@ -12,8 +12,8 @@ publish = false assert_matches = "1.5.0" ed25519-dalek = "=1.0.1" rand = "0.7.0" -solana-program-test = { path = "../../program-test", version = "=1.11.8" } -solana-sdk = { path = "../../sdk", version = "=1.11.8" } +solana-program-test = { path = "../../program-test", version = "=1.11.9" } +solana-sdk = { path = "../../sdk", version = "=1.11.9" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/stake/Cargo.toml b/programs/stake/Cargo.toml index 2b5e6c326d2c45..08ace1cdd44970 100644 --- a/programs/stake/Cargo.toml +++ b/programs/stake/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-stake-program" -version = "1.11.8" +version = "1.11.9" description = "Solana Stake program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -16,19 +16,19 @@ num-derive = "0.3" num-traits = "0.2" serde = "1.0.138" serde_derive = "1.0.103" -solana-config-program = { path = "../config", version = "=1.11.8" } -solana-frozen-abi = { path = "../../frozen-abi", version = "=1.11.8" } -solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.11.8" } -solana-metrics = { path = "../../metrics", version = "=1.11.8" } -solana-program-runtime = { path = "../../program-runtime", version = "=1.11.8" } -solana-sdk = { path = "../../sdk", version = "=1.11.8" } -solana-vote-program = { path = "../vote", version = "=1.11.8" } +solana-config-program = { path = "../config", version = "=1.11.9" } +solana-frozen-abi = { path = "../../frozen-abi", version = "=1.11.9" } +solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.11.9" } +solana-metrics = { path = "../../metrics", version = "=1.11.9" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.11.9" } +solana-sdk = { path = "../../sdk", version = "=1.11.9" } +solana-vote-program = { path = "../vote", version = "=1.11.9" } thiserror = "1.0" [dev-dependencies] assert_matches = "1.5.0" proptest = "1.0" -solana-logger = { path = "../../logger", version = "=1.11.8" } +solana-logger = { path = "../../logger", version = "=1.11.9" } test-case = "2.1.0" [build-dependencies] diff --git a/programs/vote/Cargo.toml b/programs/vote/Cargo.toml index e3e0b1ab516cda..3002d61702dd5f 100644 --- a/programs/vote/Cargo.toml +++ b/programs/vote/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-vote-program" -version = "1.11.8" +version = "1.11.9" description = "Solana Vote program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -16,15 +16,15 @@ num-derive = "0.3" num-traits = "0.2" serde = "1.0.138" serde_derive = "1.0.103" -solana-frozen-abi = { path = "../../frozen-abi", version = "=1.11.8" } -solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.11.8" } -solana-metrics = { path = "../../metrics", version = "=1.11.8" } -solana-program-runtime = { path = "../../program-runtime", version = "=1.11.8" } -solana-sdk = { path = "../../sdk", version = "=1.11.8" } +solana-frozen-abi = { path = "../../frozen-abi", version = "=1.11.9" } +solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.11.9" } +solana-metrics = { path = "../../metrics", version = "=1.11.9" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.11.9" } +solana-sdk = { path = "../../sdk", version = "=1.11.9" } thiserror = "1.0" [dev-dependencies] -solana-logger = { path = "../../logger", version = "=1.11.8" } +solana-logger = { path = "../../logger", version = "=1.11.9" } [build-dependencies] rustc_version = "0.4" diff --git a/programs/zk-token-proof/Cargo.toml b/programs/zk-token-proof/Cargo.toml index b6420c4a96005a..48f17f9d76f633 100644 --- a/programs/zk-token-proof/Cargo.toml +++ b/programs/zk-token-proof/Cargo.toml @@ -3,7 +3,7 @@ name = "solana-zk-token-proof-program" description = "Solana Zk Token Proof Program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" -version = "1.11.8" +version = "1.11.9" license = "Apache-2.0" edition = "2021" @@ -12,6 +12,6 @@ bytemuck = { version = "1.11.0", features = ["derive"] } getrandom = { version = "0.1", features = ["dummy"] } num-derive = "0.3" num-traits = "0.2" -solana-program-runtime = { path = "../../program-runtime", version = "=1.11.8" } -solana-sdk = { path = "../../sdk", version = "=1.11.8" } -solana-zk-token-sdk = { path = "../../zk-token-sdk", version = "=1.11.8" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.11.9" } +solana-sdk = { path = "../../sdk", version = "=1.11.9" } +solana-zk-token-sdk = { path = "../../zk-token-sdk", version = "=1.11.9" } diff --git a/rayon-threadlimit/Cargo.toml b/rayon-threadlimit/Cargo.toml index 436e67c67a4bfd..81f1134f779289 100644 --- a/rayon-threadlimit/Cargo.toml +++ b/rayon-threadlimit/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-rayon-threadlimit" -version = "1.11.8" +version = "1.11.9" description = "solana-rayon-threadlimit" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-rayon-threadlimit" diff --git a/rbpf-cli/Cargo.toml b/rbpf-cli/Cargo.toml index 2e793e7f622bca..647c0533e02f22 100644 --- a/rbpf-cli/Cargo.toml +++ b/rbpf-cli/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "rbpf-cli" -version = "1.11.8" +version = "1.11.9" description = "CLI to test and analyze eBPF programs" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/rbpf" @@ -13,8 +13,8 @@ publish = false clap = { version = "3.1.5", features = ["cargo"] } serde = "1.0.138" serde_json = "1.0.81" -solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.11.8" } -solana-logger = { path = "../logger", version = "=1.11.8" } -solana-program-runtime = { path = "../program-runtime", version = "=1.11.8" } -solana-sdk = { path = "../sdk", version = "=1.11.8" } +solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.11.9" } +solana-logger = { path = "../logger", version = "=1.11.9" } +solana-program-runtime = { path = "../program-runtime", version = "=1.11.9" } +solana-sdk = { path = "../sdk", version = "=1.11.9" } solana_rbpf = "=0.2.31" diff --git a/remote-wallet/Cargo.toml b/remote-wallet/Cargo.toml index 9e44d435dfba6d..83fe8f5109de2e 100644 --- a/remote-wallet/Cargo.toml +++ b/remote-wallet/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-remote-wallet" description = "Blockchain, Rebuilt for Scale" -version = "1.11.8" +version = "1.11.9" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -19,7 +19,7 @@ num-traits = { version = "0.2" } parking_lot = "0.12" qstring = "0.7.2" semver = "1.0" -solana-sdk = { path = "../sdk", version = "=1.11.8" } +solana-sdk = { path = "../sdk", version = "=1.11.9" } thiserror = "1.0" uriparse = "0.6.4" diff --git a/rpc-test/Cargo.toml b/rpc-test/Cargo.toml index c0db2b02a24d92..cb88f6722227f6 100644 --- a/rpc-test/Cargo.toml +++ b/rpc-test/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-rpc-test" -version = "1.11.8" +version = "1.11.9" description = "Solana RPC Test" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -19,17 +19,17 @@ log = "0.4.17" reqwest = { version = "0.11.11", default-features = false, features = ["blocking", "brotli", "deflate", "gzip", "rustls-tls", "json"] } serde = "1.0.138" serde_json = "1.0.81" -solana-account-decoder = { path = "../account-decoder", version = "=1.11.8" } -solana-client = { path = "../client", version = "=1.11.8" } -solana-rpc = { path = "../rpc", version = "=1.11.8" } -solana-sdk = { path = "../sdk", version = "=1.11.8" } -solana-streamer = { path = "../streamer", version = "=1.11.8" } -solana-test-validator = { path = "../test-validator", version = "=1.11.8" } -solana-transaction-status = { path = "../transaction-status", version = "=1.11.8" } +solana-account-decoder = { path = "../account-decoder", version = "=1.11.9" } +solana-client = { path = "../client", version = "=1.11.9" } +solana-rpc = { path = "../rpc", version = "=1.11.9" } +solana-sdk = { path = "../sdk", version = "=1.11.9" } +solana-streamer = { path = "../streamer", version = "=1.11.9" } +solana-test-validator = { path = "../test-validator", version = "=1.11.9" } +solana-transaction-status = { path = "../transaction-status", version = "=1.11.9" } tokio = { version = "~1.14.1", features = ["full"] } [dev-dependencies] -solana-logger = { path = "../logger", version = "=1.11.8" } +solana-logger = { path = "../logger", version = "=1.11.9" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/rpc/Cargo.toml b/rpc/Cargo.toml index c4dd1bb2ea8df3..3e2291294ca589 100644 --- a/rpc/Cargo.toml +++ b/rpc/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-rpc" -version = "1.11.8" +version = "1.11.9" description = "Solana RPC" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -29,26 +29,26 @@ serde = "1.0.138" serde_derive = "1.0.103" serde_json = "1.0.81" soketto = "0.7" -solana-account-decoder = { path = "../account-decoder", version = "=1.11.8" } -solana-client = { path = "../client", version = "=1.11.8" } -solana-entry = { path = "../entry", version = "=1.11.8" } -solana-faucet = { path = "../faucet", version = "=1.11.8" } -solana-gossip = { path = "../gossip", version = "=1.11.8" } -solana-ledger = { path = "../ledger", version = "=1.11.8" } -solana-measure = { path = "../measure", version = "=1.11.8" } -solana-metrics = { path = "../metrics", version = "=1.11.8" } -solana-perf = { path = "../perf", version = "=1.11.8" } -solana-poh = { path = "../poh", version = "=1.11.8" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.11.8" } -solana-runtime = { path = "../runtime", version = "=1.11.8" } -solana-sdk = { path = "../sdk", version = "=1.11.8" } -solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.11.8" } -solana-stake-program = { path = "../programs/stake", version = "=1.11.8" } -solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.11.8" } -solana-streamer = { path = "../streamer", version = "=1.11.8" } -solana-transaction-status = { path = "../transaction-status", version = "=1.11.8" } -solana-version = { path = "../version", version = "=1.11.8" } -solana-vote-program = { path = "../programs/vote", version = "=1.11.8" } +solana-account-decoder = { path = "../account-decoder", version = "=1.11.9" } +solana-client = { path = "../client", version = "=1.11.9" } +solana-entry = { path = "../entry", version = "=1.11.9" } +solana-faucet = { path = "../faucet", version = "=1.11.9" } +solana-gossip = { path = "../gossip", version = "=1.11.9" } +solana-ledger = { path = "../ledger", version = "=1.11.9" } +solana-measure = { path = "../measure", version = "=1.11.9" } +solana-metrics = { path = "../metrics", version = "=1.11.9" } +solana-perf = { path = "../perf", version = "=1.11.9" } +solana-poh = { path = "../poh", version = "=1.11.9" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.11.9" } +solana-runtime = { path = "../runtime", version = "=1.11.9" } +solana-sdk = { path = "../sdk", version = "=1.11.9" } +solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.11.9" } +solana-stake-program = { path = "../programs/stake", version = "=1.11.9" } +solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.11.9" } +solana-streamer = { path = "../streamer", version = "=1.11.9" } +solana-transaction-status = { path = "../transaction-status", version = "=1.11.9" } +solana-version = { path = "../version", version = "=1.11.9" } +solana-vote-program = { path = "../programs/vote", version = "=1.11.9" } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } spl-token-2022 = { version = "=0.4.2", features = ["no-entrypoint"] } stream-cancel = "0.8.1" @@ -58,9 +58,9 @@ tokio-util = { version = "0.6", features = ["codec", "compat"] } [dev-dependencies] serial_test = "0.8.0" -solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.11.8" } -solana-net-utils = { path = "../net-utils", version = "=1.11.8" } -solana-stake-program = { path = "../programs/stake", version = "=1.11.8" } +solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.11.9" } +solana-net-utils = { path = "../net-utils", version = "=1.11.9" } +solana-stake-program = { path = "../programs/stake", version = "=1.11.9" } symlink = "0.1.0" [lib] diff --git a/runtime/Cargo.toml b/runtime/Cargo.toml index 3baf16d7af408e..9c09f424a5e73a 100644 --- a/runtime/Cargo.toml +++ b/runtime/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-runtime" -version = "1.11.8" +version = "1.11.9" description = "Solana runtime" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -39,21 +39,21 @@ rayon = "1.5.3" regex = "1.5.6" serde = { version = "1.0.138", features = ["rc"] } serde_derive = "1.0.103" -solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.11.8" } -solana-bucket-map = { path = "../bucket_map", version = "=1.11.8" } -solana-compute-budget-program = { path = "../programs/compute-budget", version = "=1.11.8" } -solana-config-program = { path = "../programs/config", version = "=1.11.8" } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.11.8" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.11.8" } -solana-measure = { path = "../measure", version = "=1.11.8" } -solana-metrics = { path = "../metrics", version = "=1.11.8" } -solana-program-runtime = { path = "../program-runtime", version = "=1.11.8" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.11.8" } -solana-sdk = { path = "../sdk", version = "=1.11.8" } -solana-stake-program = { path = "../programs/stake", version = "=1.11.8" } -solana-vote-program = { path = "../programs/vote", version = "=1.11.8" } -solana-zk-token-proof-program = { path = "../programs/zk-token-proof", version = "=1.11.8" } -solana-zk-token-sdk = { path = "../zk-token-sdk", version = "=1.11.8" } +solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.11.9" } +solana-bucket-map = { path = "../bucket_map", version = "=1.11.9" } +solana-compute-budget-program = { path = "../programs/compute-budget", version = "=1.11.9" } +solana-config-program = { path = "../programs/config", version = "=1.11.9" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.11.9" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.11.9" } +solana-measure = { path = "../measure", version = "=1.11.9" } +solana-metrics = { path = "../metrics", version = "=1.11.9" } +solana-program-runtime = { path = "../program-runtime", version = "=1.11.9" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.11.9" } +solana-sdk = { path = "../sdk", version = "=1.11.9" } +solana-stake-program = { path = "../programs/stake", version = "=1.11.9" } +solana-vote-program = { path = "../programs/vote", version = "=1.11.9" } +solana-zk-token-proof-program = { path = "../programs/zk-token-proof", version = "=1.11.9" } +solana-zk-token-sdk = { path = "../zk-token-sdk", version = "=1.11.9" } strum = { version = "0.24", features = ["derive"] } strum_macros = "0.24" symlink = "0.1.0" @@ -71,7 +71,7 @@ assert_matches = "1.5.0" ed25519-dalek = "=1.0.1" libsecp256k1 = "0.6.0" rand_chacha = "0.2.2" -solana-logger = { path = "../logger", version = "=1.11.8" } +solana-logger = { path = "../logger", version = "=1.11.9" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/runtime/store-tool/Cargo.toml b/runtime/store-tool/Cargo.toml index 2935d482b79d40..bc7b748a630b88 100644 --- a/runtime/store-tool/Cargo.toml +++ b/runtime/store-tool/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-store-tool" description = "Tool to inspect append vecs" -version = "1.11.8" +version = "1.11.9" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -12,9 +12,9 @@ publish = false [dependencies] clap = "2.33.1" log = { version = "0.4.17" } -solana-logger = { path = "../../logger", version = "=1.11.8" } -solana-runtime = { path = "..", version = "=1.11.8" } -solana-version = { path = "../../version", version = "=1.11.8" } +solana-logger = { path = "../../logger", version = "=1.11.9" } +solana-runtime = { path = "..", version = "=1.11.9" } +solana-version = { path = "../../version", version = "=1.11.9" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/sdk/Cargo.toml b/sdk/Cargo.toml index f30f769fcb1399..f3a79dd30d9863 100644 --- a/sdk/Cargo.toml +++ b/sdk/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-sdk" -version = "1.11.8" +version = "1.11.9" description = "Solana SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -71,11 +71,11 @@ serde_derive = "1.0.103" serde_json = { version = "1.0.81", optional = true } sha2 = "0.10.2" sha3 = { version = "0.10.1", optional = true } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.11.8" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.11.8" } -solana-logger = { path = "../logger", version = "=1.11.8", optional = true } -solana-program = { path = "program", version = "=1.11.8" } -solana-sdk-macro = { path = "macro", version = "=1.11.8" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.11.9" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.11.9" } +solana-logger = { path = "../logger", version = "=1.11.9", optional = true } +solana-program = { path = "program", version = "=1.11.9" } +solana-sdk-macro = { path = "macro", version = "=1.11.9" } thiserror = "1.0" uriparse = "0.6.4" wasm-bindgen = "0.2" diff --git a/sdk/cargo-build-bpf/Cargo.toml b/sdk/cargo-build-bpf/Cargo.toml index 786fff9818876c..45d42f6f143979 100644 --- a/sdk/cargo-build-bpf/Cargo.toml +++ b/sdk/cargo-build-bpf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-cargo-build-bpf" -version = "1.11.8" +version = "1.11.9" description = "Compile a local package and all of its dependencies using the Solana SBF SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,7 +12,7 @@ publish = false [dependencies] cargo_metadata = "0.15.0" clap = { version = "3.1.5", features = ["cargo", "env"] } -solana-sdk = { path = "..", version = "=1.11.8" } +solana-sdk = { path = "..", version = "=1.11.9" } [features] program = [] diff --git a/sdk/cargo-build-sbf/Cargo.toml b/sdk/cargo-build-sbf/Cargo.toml index 8baa7189804ef3..4b013ee94eb4c0 100644 --- a/sdk/cargo-build-sbf/Cargo.toml +++ b/sdk/cargo-build-sbf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-cargo-build-sbf" -version = "1.11.8" +version = "1.11.9" description = "Compile a local package and all of its dependencies using the Solana SBF SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -15,9 +15,9 @@ cargo_metadata = "0.15.0" clap = { version = "3.1.5", features = ["cargo", "env"] } log = { version = "0.4.14", features = ["std"] } regex = "1.5.6" -solana-download-utils = { path = "../../download-utils", version = "=1.11.8" } -solana-logger = { path = "../../logger", version = "=1.11.8" } -solana-sdk = { path = "..", version = "=1.11.8" } +solana-download-utils = { path = "../../download-utils", version = "=1.11.9" } +solana-logger = { path = "../../logger", version = "=1.11.9" } +solana-sdk = { path = "..", version = "=1.11.9" } tar = "0.4.38" [dev-dependencies] diff --git a/sdk/cargo-build-sbf/tests/crates/fail/Cargo.toml b/sdk/cargo-build-sbf/tests/crates/fail/Cargo.toml index 9b73054865228b..f294017009e629 100644 --- a/sdk/cargo-build-sbf/tests/crates/fail/Cargo.toml +++ b/sdk/cargo-build-sbf/tests/crates/fail/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "fail" -version = "1.11.8" +version = "1.11.9" description = "Solana SBF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ edition = "2021" publish = false [dependencies] -solana-program = { path = "../../../../program", version = "=1.11.8" } +solana-program = { path = "../../../../program", version = "=1.11.9" } [lib] crate-type = ["cdylib"] diff --git a/sdk/cargo-build-sbf/tests/crates/noop/Cargo.toml b/sdk/cargo-build-sbf/tests/crates/noop/Cargo.toml index 3800a75485cce0..3584ccb1435a61 100644 --- a/sdk/cargo-build-sbf/tests/crates/noop/Cargo.toml +++ b/sdk/cargo-build-sbf/tests/crates/noop/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "noop" -version = "1.11.8" +version = "1.11.9" description = "Solana SBF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ edition = "2021" publish = false [dependencies] -solana-program = { path = "../../../../program", version = "=1.11.8" } +solana-program = { path = "../../../../program", version = "=1.11.9" } [lib] crate-type = ["cdylib"] diff --git a/sdk/cargo-test-bpf/Cargo.toml b/sdk/cargo-test-bpf/Cargo.toml index 3442598f2822bf..2668ec58c42d82 100644 --- a/sdk/cargo-test-bpf/Cargo.toml +++ b/sdk/cargo-test-bpf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-cargo-test-bpf" -version = "1.11.8" +version = "1.11.9" description = "Execute all unit and integration tests after building with the Solana SBF SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/sdk/cargo-test-sbf/Cargo.toml b/sdk/cargo-test-sbf/Cargo.toml index 4f628b9aa9e6d6..309e72f1b40cdf 100644 --- a/sdk/cargo-test-sbf/Cargo.toml +++ b/sdk/cargo-test-sbf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-cargo-test-sbf" -version = "1.11.8" +version = "1.11.9" description = "Execute all unit and integration tests after building with the Solana SBF SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/sdk/gen-headers/Cargo.toml b/sdk/gen-headers/Cargo.toml index 8fc3eba8e1fe03..9b77595812dd4e 100644 --- a/sdk/gen-headers/Cargo.toml +++ b/sdk/gen-headers/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "gen-headers" -version = "1.11.8" +version = "1.11.9" edition = "2021" license = "Apache-2.0" publish = false diff --git a/sdk/macro/Cargo.toml b/sdk/macro/Cargo.toml index 1b77fe9f0da77c..b6f04bfa7aeaf0 100644 --- a/sdk/macro/Cargo.toml +++ b/sdk/macro/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-sdk-macro" -version = "1.11.8" +version = "1.11.9" description = "Solana SDK Macro" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/sdk/program/Cargo.toml b/sdk/program/Cargo.toml index e3995231b2b45e..1065c054dad781 100644 --- a/sdk/program/Cargo.toml +++ b/sdk/program/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-program" -version = "1.11.8" +version = "1.11.9" description = "Solana Program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -31,9 +31,9 @@ serde_derive = "1.0" serde_json = "1.0" sha2 = "0.10.0" sha3 = "0.10.0" -solana-frozen-abi = { path = "../../frozen-abi", version = "=1.11.8" } -solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.11.8" } -solana-sdk-macro = { path = "../macro", version = "=1.11.8" } +solana-frozen-abi = { path = "../../frozen-abi", version = "=1.11.9" } +solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.11.9" } +solana-sdk-macro = { path = "../macro", version = "=1.11.9" } thiserror = "1.0" [target.'cfg(not(target_os = "solana"))'.dependencies] @@ -50,7 +50,7 @@ wasm-bindgen = "0.2" zeroize = { version = "1.3", default-features = true, features = ["zeroize_derive"] } [target.'cfg(not(target_os = "solana"))'.dev-dependencies] -solana-logger = { path = "../../logger", version = "=1.11.8" } +solana-logger = { path = "../../logger", version = "=1.11.9" } [target.'cfg(target_arch = "wasm32")'.dependencies] console_error_panic_hook = "0.1.7" diff --git a/send-transaction-service/Cargo.toml b/send-transaction-service/Cargo.toml index f6c18a04f6d871..095ceb925e728e 100644 --- a/send-transaction-service/Cargo.toml +++ b/send-transaction-service/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-send-transaction-service" -version = "1.11.8" +version = "1.11.9" description = "Solana send transaction service" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,14 +12,14 @@ edition = "2021" [dependencies] crossbeam-channel = "0.5" log = "0.4.17" -solana-client = { path = "../client", version = "=1.11.8" } -solana-measure = { path = "../measure", version = "=1.11.8" } -solana-metrics = { path = "../metrics", version = "=1.11.8" } -solana-runtime = { path = "../runtime", version = "=1.11.8" } -solana-sdk = { path = "../sdk", version = "=1.11.8" } +solana-client = { path = "../client", version = "=1.11.9" } +solana-measure = { path = "../measure", version = "=1.11.9" } +solana-metrics = { path = "../metrics", version = "=1.11.9" } +solana-runtime = { path = "../runtime", version = "=1.11.9" } +solana-sdk = { path = "../sdk", version = "=1.11.9" } [dev-dependencies] -solana-logger = { path = "../logger", version = "=1.11.8" } +solana-logger = { path = "../logger", version = "=1.11.9" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/stake-accounts/Cargo.toml b/stake-accounts/Cargo.toml index 4eb078bf1340d4..55b194506ac597 100644 --- a/stake-accounts/Cargo.toml +++ b/stake-accounts/Cargo.toml @@ -3,7 +3,7 @@ name = "solana-stake-accounts" description = "Blockchain, Rebuilt for Scale" authors = ["Solana Maintainers "] edition = "2021" -version = "1.11.8" +version = "1.11.9" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -11,15 +11,15 @@ documentation = "https://docs.rs/solana-stake-accounts" [dependencies] clap = "2.33.1" -solana-clap-utils = { path = "../clap-utils", version = "=1.11.8" } -solana-cli-config = { path = "../cli-config", version = "=1.11.8" } -solana-client = { path = "../client", version = "=1.11.8" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.11.8" } -solana-sdk = { path = "../sdk", version = "=1.11.8" } -solana-stake-program = { path = "../programs/stake", version = "=1.11.8" } +solana-clap-utils = { path = "../clap-utils", version = "=1.11.9" } +solana-cli-config = { path = "../cli-config", version = "=1.11.9" } +solana-client = { path = "../client", version = "=1.11.9" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.11.9" } +solana-sdk = { path = "../sdk", version = "=1.11.9" } +solana-stake-program = { path = "../programs/stake", version = "=1.11.9" } [dev-dependencies] -solana-runtime = { path = "../runtime", version = "=1.11.8" } +solana-runtime = { path = "../runtime", version = "=1.11.9" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/storage-bigtable/Cargo.toml b/storage-bigtable/Cargo.toml index b9e380ab5715c7..fda99dc3fba014 100644 --- a/storage-bigtable/Cargo.toml +++ b/storage-bigtable/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-storage-bigtable" -version = "1.11.8" +version = "1.11.9" description = "Solana Storage BigTable" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -27,10 +27,10 @@ prost-types = "0.11.0" serde = "1.0.138" serde_derive = "1.0.103" smpl_jwt = "0.7.1" -solana-metrics = { path = "../metrics", version = "=1.11.8" } -solana-sdk = { path = "../sdk", version = "=1.11.8" } -solana-storage-proto = { path = "../storage-proto", version = "=1.11.8" } -solana-transaction-status = { path = "../transaction-status", version = "=1.11.8" } +solana-metrics = { path = "../metrics", version = "=1.11.9" } +solana-sdk = { path = "../sdk", version = "=1.11.9" } +solana-storage-proto = { path = "../storage-proto", version = "=1.11.9" } +solana-transaction-status = { path = "../transaction-status", version = "=1.11.9" } thiserror = "1.0" tokio = "1" tonic = { version = "0.8.0", features = ["tls", "transport"] } diff --git a/storage-bigtable/build-proto/Cargo.lock b/storage-bigtable/build-proto/Cargo.lock index f99adeb24fb2a1..d1787618d19944 100644 --- a/storage-bigtable/build-proto/Cargo.lock +++ b/storage-bigtable/build-proto/Cargo.lock @@ -219,7 +219,7 @@ dependencies = [ [[package]] name = "proto" -version = "1.11.8" +version = "1.11.9" dependencies = [ "protobuf-src", "tonic-build", diff --git a/storage-bigtable/build-proto/Cargo.toml b/storage-bigtable/build-proto/Cargo.toml index 2d927a656986f6..a2365793de7e5e 100644 --- a/storage-bigtable/build-proto/Cargo.toml +++ b/storage-bigtable/build-proto/Cargo.toml @@ -7,7 +7,7 @@ license = "Apache-2.0" name = "proto" publish = false repository = "https://github.com/solana-labs/solana" -version = "1.11.8" +version = "1.11.9" [workspace] diff --git a/storage-proto/Cargo.toml b/storage-proto/Cargo.toml index 4daa07f30a158a..b9c633efddbf7a 100644 --- a/storage-proto/Cargo.toml +++ b/storage-proto/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-storage-proto" -version = "1.11.8" +version = "1.11.9" description = "Solana Storage Protobuf Definitions" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,9 +14,9 @@ bincode = "1.3.3" bs58 = "0.4.0" prost = "0.11.0" serde = "1.0.138" -solana-account-decoder = { path = "../account-decoder", version = "=1.11.8" } -solana-sdk = { path = "../sdk", version = "=1.11.8" } -solana-transaction-status = { path = "../transaction-status", version = "=1.11.8" } +solana-account-decoder = { path = "../account-decoder", version = "=1.11.9" } +solana-sdk = { path = "../sdk", version = "=1.11.9" } +solana-transaction-status = { path = "../transaction-status", version = "=1.11.9" } [dev-dependencies] enum-iterator = "0.8.1" diff --git a/streamer/Cargo.toml b/streamer/Cargo.toml index d87923155178b8..a3b27d799fee68 100644 --- a/streamer/Cargo.toml +++ b/streamer/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-streamer" -version = "1.11.8" +version = "1.11.9" description = "Solana Streamer" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -25,15 +25,15 @@ quinn = "0.8.3" rand = "0.7.0" rcgen = "0.9.2" rustls = { version = "0.20.6", features = ["dangerous_configuration"] } -solana-metrics = { path = "../metrics", version = "=1.11.8" } -solana-perf = { path = "../perf", version = "=1.11.8" } -solana-sdk = { path = "../sdk", version = "=1.11.8" } +solana-metrics = { path = "../metrics", version = "=1.11.9" } +solana-perf = { path = "../perf", version = "=1.11.9" } +solana-sdk = { path = "../sdk", version = "=1.11.9" } thiserror = "1.0" tokio = { version = "1", features = ["full"] } x509-parser = "0.14.0" [dev-dependencies] -solana-logger = { path = "../logger", version = "=1.11.8" } +solana-logger = { path = "../logger", version = "=1.11.9" } [lib] crate-type = ["lib"] diff --git a/sys-tuner/Cargo.toml b/sys-tuner/Cargo.toml index f85f4cc5b60da5..3bcd5aeac7a258 100644 --- a/sys-tuner/Cargo.toml +++ b/sys-tuner/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-sys-tuner" description = "The solana cluster system tuner daemon" -version = "1.11.8" +version = "1.11.9" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,8 +14,8 @@ publish = true clap = "2.33.1" libc = "0.2.126" log = "0.4.17" -solana-logger = { path = "../logger", version = "=1.11.8" } -solana-version = { path = "../version", version = "=1.11.8" } +solana-logger = { path = "../logger", version = "=1.11.9" } +solana-version = { path = "../version", version = "=1.11.9" } [target."cfg(unix)".dependencies] unix_socket2 = "0.5.4" diff --git a/test-validator/Cargo.toml b/test-validator/Cargo.toml index d0aaced3fc97e8..0cdcc385e53e7f 100644 --- a/test-validator/Cargo.toml +++ b/test-validator/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "solana-test-validator" description = "Blockchain, Rebuilt for Scale" -version = "1.11.8" +version = "1.11.9" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-test-validator" readme = "../README.md" @@ -15,19 +15,19 @@ base64 = "0.13.0" log = "0.4.17" serde_derive = "1.0.103" serde_json = "1.0.81" -solana-cli-output = { path = "../cli-output", version = "=1.11.8" } -solana-client = { path = "../client", version = "=1.11.8" } -solana-core = { path = "../core", version = "=1.11.8" } -solana-gossip = { path = "../gossip", version = "=1.11.8" } -solana-ledger = { path = "../ledger", version = "=1.11.8" } -solana-logger = { path = "../logger", version = "=1.11.8" } -solana-net-utils = { path = "../net-utils", version = "=1.11.8" } -solana-program-runtime = { path = "../program-runtime", version = "=1.11.8" } -solana-program-test = { path = "../program-test", version = "=1.11.8" } -solana-rpc = { path = "../rpc", version = "=1.11.8" } -solana-runtime = { path = "../runtime", version = "=1.11.8" } -solana-sdk = { path = "../sdk", version = "=1.11.8" } -solana-streamer = { path = "../streamer", version = "=1.11.8" } +solana-cli-output = { path = "../cli-output", version = "=1.11.9" } +solana-client = { path = "../client", version = "=1.11.9" } +solana-core = { path = "../core", version = "=1.11.9" } +solana-gossip = { path = "../gossip", version = "=1.11.9" } +solana-ledger = { path = "../ledger", version = "=1.11.9" } +solana-logger = { path = "../logger", version = "=1.11.9" } +solana-net-utils = { path = "../net-utils", version = "=1.11.9" } +solana-program-runtime = { path = "../program-runtime", version = "=1.11.9" } +solana-program-test = { path = "../program-test", version = "=1.11.9" } +solana-rpc = { path = "../rpc", version = "=1.11.9" } +solana-runtime = { path = "../runtime", version = "=1.11.9" } +solana-sdk = { path = "../sdk", version = "=1.11.9" } +solana-streamer = { path = "../streamer", version = "=1.11.9" } tokio = { version = "1", features = ["full"] } [package.metadata.docs.rs] diff --git a/tokens/Cargo.toml b/tokens/Cargo.toml index 755bb4408e7658..aa263e215b337e 100644 --- a/tokens/Cargo.toml +++ b/tokens/Cargo.toml @@ -3,7 +3,7 @@ name = "solana-tokens" description = "Blockchain, Rebuilt for Scale" authors = ["Solana Maintainers "] edition = "2021" -version = "1.11.8" +version = "1.11.9" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -19,14 +19,14 @@ indexmap = "1.9.1" indicatif = "0.16.2" pickledb = "0.4.1" serde = { version = "1.0", features = ["derive"] } -solana-account-decoder = { path = "../account-decoder", version = "=1.11.8" } -solana-clap-utils = { path = "../clap-utils", version = "=1.11.8" } -solana-cli-config = { path = "../cli-config", version = "=1.11.8" } -solana-client = { path = "../client", version = "=1.11.8" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.11.8" } -solana-sdk = { path = "../sdk", version = "=1.11.8" } -solana-transaction-status = { path = "../transaction-status", version = "=1.11.8" } -solana-version = { path = "../version", version = "=1.11.8" } +solana-account-decoder = { path = "../account-decoder", version = "=1.11.9" } +solana-clap-utils = { path = "../clap-utils", version = "=1.11.9" } +solana-cli-config = { path = "../cli-config", version = "=1.11.9" } +solana-client = { path = "../client", version = "=1.11.9" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.11.9" } +solana-sdk = { path = "../sdk", version = "=1.11.9" } +solana-transaction-status = { path = "../transaction-status", version = "=1.11.9" } +solana-version = { path = "../version", version = "=1.11.9" } spl-associated-token-account = { version = "=1.1.1" } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } tempfile = "3.3.0" @@ -34,6 +34,6 @@ thiserror = "1.0" [dev-dependencies] bincode = "1.3.3" -solana-logger = { path = "../logger", version = "=1.11.8" } -solana-streamer = { path = "../streamer", version = "=1.11.8" } -solana-test-validator = { path = "../test-validator", version = "=1.11.8" } +solana-logger = { path = "../logger", version = "=1.11.9" } +solana-streamer = { path = "../streamer", version = "=1.11.9" } +solana-test-validator = { path = "../test-validator", version = "=1.11.9" } diff --git a/transaction-dos/Cargo.toml b/transaction-dos/Cargo.toml index b7be63e65a0181..938ec2aff061ce 100644 --- a/transaction-dos/Cargo.toml +++ b/transaction-dos/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-transaction-dos" -version = "1.11.8" +version = "1.11.9" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,23 +14,23 @@ clap = "2.33.1" log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" -solana-clap-utils = { path = "../clap-utils", version = "=1.11.8" } -solana-cli = { path = "../cli", version = "=1.11.8" } -solana-client = { path = "../client", version = "=1.11.8" } -solana-core = { path = "../core", version = "=1.11.8" } -solana-faucet = { path = "../faucet", version = "=1.11.8" } -solana-gossip = { path = "../gossip", version = "=1.11.8" } -solana-logger = { path = "../logger", version = "=1.11.8" } -solana-measure = { path = "../measure", version = "=1.11.8" } -solana-net-utils = { path = "../net-utils", version = "=1.11.8" } -solana-runtime = { path = "../runtime", version = "=1.11.8" } -solana-sdk = { path = "../sdk", version = "=1.11.8" } -solana-streamer = { path = "../streamer", version = "=1.11.8" } -solana-transaction-status = { path = "../transaction-status", version = "=1.11.8" } -solana-version = { path = "../version", version = "=1.11.8" } +solana-clap-utils = { path = "../clap-utils", version = "=1.11.9" } +solana-cli = { path = "../cli", version = "=1.11.9" } +solana-client = { path = "../client", version = "=1.11.9" } +solana-core = { path = "../core", version = "=1.11.9" } +solana-faucet = { path = "../faucet", version = "=1.11.9" } +solana-gossip = { path = "../gossip", version = "=1.11.9" } +solana-logger = { path = "../logger", version = "=1.11.9" } +solana-measure = { path = "../measure", version = "=1.11.9" } +solana-net-utils = { path = "../net-utils", version = "=1.11.9" } +solana-runtime = { path = "../runtime", version = "=1.11.9" } +solana-sdk = { path = "../sdk", version = "=1.11.9" } +solana-streamer = { path = "../streamer", version = "=1.11.9" } +solana-transaction-status = { path = "../transaction-status", version = "=1.11.9" } +solana-version = { path = "../version", version = "=1.11.9" } [dev-dependencies] -solana-local-cluster = { path = "../local-cluster", version = "=1.11.8" } +solana-local-cluster = { path = "../local-cluster", version = "=1.11.9" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/transaction-status/Cargo.toml b/transaction-status/Cargo.toml index f0d9a895ca39a1..da10acc896338d 100644 --- a/transaction-status/Cargo.toml +++ b/transaction-status/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-transaction-status" -version = "1.11.8" +version = "1.11.9" description = "Solana transaction status types" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -20,11 +20,11 @@ log = "0.4.17" serde = "1.0.138" serde_derive = "1.0.103" serde_json = "1.0.81" -solana-account-decoder = { path = "../account-decoder", version = "=1.11.8" } -solana-measure = { path = "../measure", version = "=1.11.8" } -solana-metrics = { path = "../metrics", version = "=1.11.8" } -solana-sdk = { path = "../sdk", version = "=1.11.8" } -solana-vote-program = { path = "../programs/vote", version = "=1.11.8" } +solana-account-decoder = { path = "../account-decoder", version = "=1.11.9" } +solana-measure = { path = "../measure", version = "=1.11.9" } +solana-metrics = { path = "../metrics", version = "=1.11.9" } +solana-sdk = { path = "../sdk", version = "=1.11.9" } +solana-vote-program = { path = "../programs/vote", version = "=1.11.9" } spl-associated-token-account = { version = "=1.1.1", features = ["no-entrypoint"] } spl-memo = { version = "=3.0.1", features = ["no-entrypoint"] } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } diff --git a/upload-perf/Cargo.toml b/upload-perf/Cargo.toml index 58f9480a46895c..f74450e155c099 100644 --- a/upload-perf/Cargo.toml +++ b/upload-perf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-upload-perf" -version = "1.11.8" +version = "1.11.9" description = "Metrics Upload Utility" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -11,7 +11,7 @@ publish = false [dependencies] serde_json = "1.0.81" -solana-metrics = { path = "../metrics", version = "=1.11.8" } +solana-metrics = { path = "../metrics", version = "=1.11.9" } [[bin]] name = "solana-upload-perf" diff --git a/validator/Cargo.toml b/validator/Cargo.toml index 1e93d405176501..63991941d02472 100644 --- a/validator/Cargo.toml +++ b/validator/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-validator" description = "Blockchain, Rebuilt for Scale" -version = "1.11.8" +version = "1.11.9" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -28,30 +28,30 @@ num_cpus = "1.13.1" rand = "0.7.0" serde = "1.0.138" serde_json = "1.0.81" -solana-clap-utils = { path = "../clap-utils", version = "=1.11.8" } -solana-cli-config = { path = "../cli-config", version = "=1.11.8" } -solana-client = { path = "../client", version = "=1.11.8" } -solana-core = { path = "../core", version = "=1.11.8" } -solana-download-utils = { path = "../download-utils", version = "=1.11.8" } -solana-entry = { path = "../entry", version = "=1.11.8" } -solana-faucet = { path = "../faucet", version = "=1.11.8" } -solana-genesis-utils = { path = "../genesis-utils", version = "=1.11.8" } -solana-gossip = { path = "../gossip", version = "=1.11.8" } -solana-ledger = { path = "../ledger", version = "=1.11.8" } -solana-logger = { path = "../logger", version = "=1.11.8" } -solana-metrics = { path = "../metrics", version = "=1.11.8" } -solana-net-utils = { path = "../net-utils", version = "=1.11.8" } -solana-perf = { path = "../perf", version = "=1.11.8" } -solana-poh = { path = "../poh", version = "=1.11.8" } -solana-rpc = { path = "../rpc", version = "=1.11.8" } -solana-runtime = { path = "../runtime", version = "=1.11.8" } -solana-sdk = { path = "../sdk", version = "=1.11.8" } -solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.11.8" } -solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.11.8" } -solana-streamer = { path = "../streamer", version = "=1.11.8" } -solana-test-validator = { path = "../test-validator", version = "=1.11.8" } -solana-version = { path = "../version", version = "=1.11.8" } -solana-vote-program = { path = "../programs/vote", version = "=1.11.8" } +solana-clap-utils = { path = "../clap-utils", version = "=1.11.9" } +solana-cli-config = { path = "../cli-config", version = "=1.11.9" } +solana-client = { path = "../client", version = "=1.11.9" } +solana-core = { path = "../core", version = "=1.11.9" } +solana-download-utils = { path = "../download-utils", version = "=1.11.9" } +solana-entry = { path = "../entry", version = "=1.11.9" } +solana-faucet = { path = "../faucet", version = "=1.11.9" } +solana-genesis-utils = { path = "../genesis-utils", version = "=1.11.9" } +solana-gossip = { path = "../gossip", version = "=1.11.9" } +solana-ledger = { path = "../ledger", version = "=1.11.9" } +solana-logger = { path = "../logger", version = "=1.11.9" } +solana-metrics = { path = "../metrics", version = "=1.11.9" } +solana-net-utils = { path = "../net-utils", version = "=1.11.9" } +solana-perf = { path = "../perf", version = "=1.11.9" } +solana-poh = { path = "../poh", version = "=1.11.9" } +solana-rpc = { path = "../rpc", version = "=1.11.9" } +solana-runtime = { path = "../runtime", version = "=1.11.9" } +solana-sdk = { path = "../sdk", version = "=1.11.9" } +solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.11.9" } +solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.11.9" } +solana-streamer = { path = "../streamer", version = "=1.11.9" } +solana-test-validator = { path = "../test-validator", version = "=1.11.9" } +solana-version = { path = "../version", version = "=1.11.9" } +solana-vote-program = { path = "../programs/vote", version = "=1.11.9" } symlink = "0.1.0" [target.'cfg(not(target_env = "msvc"))'.dependencies] diff --git a/version/Cargo.toml b/version/Cargo.toml index ef2ca5f24746c8..b90e0a27bd691e 100644 --- a/version/Cargo.toml +++ b/version/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-version" -version = "1.11.8" +version = "1.11.9" description = "Solana Version" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,9 +14,9 @@ log = "0.4.17" semver = "1.0.10" serde = "1.0.138" serde_derive = "1.0.103" -solana-frozen-abi = { path = "../frozen-abi", version = "=1.11.8" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.11.8" } -solana-sdk = { path = "../sdk", version = "=1.11.8" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.11.9" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.11.9" } +solana-sdk = { path = "../sdk", version = "=1.11.9" } [lib] name = "solana_version" diff --git a/watchtower/Cargo.toml b/watchtower/Cargo.toml index 89d7376c8dc737..32c5f5a2230ca8 100644 --- a/watchtower/Cargo.toml +++ b/watchtower/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-watchtower" description = "Blockchain, Rebuilt for Scale" -version = "1.11.8" +version = "1.11.9" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -13,15 +13,15 @@ documentation = "https://docs.rs/solana-watchtower" clap = "2.33.1" humantime = "2.0.1" log = "0.4.17" -solana-clap-utils = { path = "../clap-utils", version = "=1.11.8" } -solana-cli-config = { path = "../cli-config", version = "=1.11.8" } -solana-cli-output = { path = "../cli-output", version = "=1.11.8" } -solana-client = { path = "../client", version = "=1.11.8" } -solana-logger = { path = "../logger", version = "=1.11.8" } -solana-metrics = { path = "../metrics", version = "=1.11.8" } -solana-notifier = { path = "../notifier", version = "=1.11.8" } -solana-sdk = { path = "../sdk", version = "=1.11.8" } -solana-version = { path = "../version", version = "=1.11.8" } +solana-clap-utils = { path = "../clap-utils", version = "=1.11.9" } +solana-cli-config = { path = "../cli-config", version = "=1.11.9" } +solana-cli-output = { path = "../cli-output", version = "=1.11.9" } +solana-client = { path = "../client", version = "=1.11.9" } +solana-logger = { path = "../logger", version = "=1.11.9" } +solana-metrics = { path = "../metrics", version = "=1.11.9" } +solana-notifier = { path = "../notifier", version = "=1.11.9" } +solana-sdk = { path = "../sdk", version = "=1.11.9" } +solana-version = { path = "../version", version = "=1.11.9" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/zk-token-sdk/Cargo.toml b/zk-token-sdk/Cargo.toml index 843bd76ae6ce1b..da3ae5037ca76c 100644 --- a/zk-token-sdk/Cargo.toml +++ b/zk-token-sdk/Cargo.toml @@ -3,7 +3,7 @@ name = "solana-zk-token-sdk" description = "Solana Zk Token SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" -version = "1.11.8" +version = "1.11.9" license = "Apache-2.0" edition = "2021" @@ -12,7 +12,7 @@ base64 = "0.13" bytemuck = { version = "1.11.0", features = ["derive"] } num-derive = "0.3" num-traits = "0.2" -solana-program = { path = "../sdk/program", version = "=1.11.8" } +solana-program = { path = "../sdk/program", version = "=1.11.9" } [target.'cfg(not(target_os = "solana"))'.dependencies] aes-gcm-siv = "0.10.3" @@ -28,7 +28,7 @@ rand = "0.7" serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" sha3 = "0.9" -solana-sdk = { path = "../sdk", version = "=1.11.8" } +solana-sdk = { path = "../sdk", version = "=1.11.9" } subtle = "2" thiserror = "1.0" zeroize = { version = "1.3", default-features = false, features = ["zeroize_derive"] } From a0f6588ac851acacacdfc60dcc91406376f592e0 Mon Sep 17 00:00:00 2001 From: Trent Nelson Date: Thu, 25 Aug 2022 12:56:56 -0600 Subject: [PATCH 069/465] make fatal log message sound fatal (cherry picked from commit b1cff5d7402c12664a53b1cd9be1a97b3e47c106) --- core/src/accounts_hash_verifier.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/accounts_hash_verifier.rs b/core/src/accounts_hash_verifier.rs index 6dbdbaa9237087..b8bc425c4a33d3 100644 --- a/core/src/accounts_hash_verifier.rs +++ b/core/src/accounts_hash_verifier.rs @@ -293,7 +293,7 @@ impl AccountsHashVerifier { accounts_hashes.iter().any(|(slot, hash)| { if let Some(reference_hash) = slot_to_hash.get(slot) { if *hash != *reference_hash { - error!("Known validator {} produced conflicting hashes for slot: {} ({} != {})", + error!("Fatal! Exiting! Known validator {} produced conflicting hashes for slot: {} ({} != {})", known_validator, slot, hash, From de7888e9cf1edf2bd184660c454648ceee4146a4 Mon Sep 17 00:00:00 2001 From: Trent Nelson Date: Fri, 26 Aug 2022 14:09:01 -0600 Subject: [PATCH 070/465] Address RUSTSEC-2022-0051 `lz4` to 1.24.0 `lz4-sys` to 1.9.4 --- Cargo.lock | 8 ++++---- programs/bpf/Cargo.lock | 8 ++++---- runtime/Cargo.toml | 2 +- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 34587e3ab9c4d5..355927c192bea3 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2521,9 +2521,9 @@ dependencies = [ [[package]] name = "lz4" -version = "1.23.3" +version = "1.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4edcb94251b1c375c459e5abe9fb0168c1c826c3370172684844f8f3f8d1a885" +checksum = "7e9e2dd86df36ce760a60f6ff6ad526f7ba1f14ba0356f8254fb6905e6494df1" dependencies = [ "libc", "lz4-sys", @@ -2531,9 +2531,9 @@ dependencies = [ [[package]] name = "lz4-sys" -version = "1.9.3" +version = "1.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7be8908e2ed6f31c02db8a9fa962f03e36c53fbfde437363eae3306b85d7e17" +checksum = "57d27b317e207b10f69f5e75494119e391a96f48861ae870d1da6edac98ca900" dependencies = [ "cc", "libc", diff --git a/programs/bpf/Cargo.lock b/programs/bpf/Cargo.lock index b73830e72e7f66..062ba1989c9456 100644 --- a/programs/bpf/Cargo.lock +++ b/programs/bpf/Cargo.lock @@ -2325,9 +2325,9 @@ dependencies = [ [[package]] name = "lz4" -version = "1.23.3" +version = "1.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4edcb94251b1c375c459e5abe9fb0168c1c826c3370172684844f8f3f8d1a885" +checksum = "7e9e2dd86df36ce760a60f6ff6ad526f7ba1f14ba0356f8254fb6905e6494df1" dependencies = [ "libc", "lz4-sys", @@ -2335,9 +2335,9 @@ dependencies = [ [[package]] name = "lz4-sys" -version = "1.9.3" +version = "1.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7be8908e2ed6f31c02db8a9fa962f03e36c53fbfde437363eae3306b85d7e17" +checksum = "57d27b317e207b10f69f5e75494119e391a96f48861ae870d1da6edac98ca900" dependencies = [ "cc", "libc", diff --git a/runtime/Cargo.toml b/runtime/Cargo.toml index 9c09f424a5e73a..140e80ff802bc4 100644 --- a/runtime/Cargo.toml +++ b/runtime/Cargo.toml @@ -27,7 +27,7 @@ index_list = "0.2.7" itertools = "0.10.3" lazy_static = "1.4.0" log = "0.4.17" -lz4 = "1.23.3" +lz4 = "1.24.0" memmap2 = "0.5.3" num-derive = { version = "0.3" } num-traits = { version = "0.2" } From 843e018c77678de5ef75dc6e5e5a72f2da5caa48 Mon Sep 17 00:00:00 2001 From: Will Hickey Date: Fri, 26 Aug 2022 15:43:43 -0500 Subject: [PATCH 071/465] Bump version to 1.11.10 (#27427) --- Cargo.lock | 484 ++++++++--------- account-decoder/Cargo.toml | 8 +- accounts-bench/Cargo.toml | 12 +- accounts-cluster-bench/Cargo.toml | 34 +- banking-bench/Cargo.toml | 26 +- banks-client/Cargo.toml | 12 +- banks-interface/Cargo.toml | 4 +- banks-server/Cargo.toml | 12 +- bench-streamer/Cargo.toml | 8 +- bench-tps/Cargo.toml | 38 +- bloom/Cargo.toml | 8 +- bucket_map/Cargo.toml | 8 +- clap-utils/Cargo.toml | 8 +- clap-v3-utils/Cargo.toml | 8 +- cli-config/Cargo.toml | 6 +- cli-output/Cargo.toml | 16 +- cli/Cargo.toml | 36 +- client-test/Cargo.toml | 32 +- client/Cargo.toml | 28 +- core/Cargo.toml | 56 +- docs/src/developing/clients/jsonrpc-api.md | 4 +- dos/Cargo.toml | 30 +- download-utils/Cargo.toml | 6 +- entry/Cargo.toml | 16 +- faucet/Cargo.toml | 14 +- frozen-abi/Cargo.toml | 6 +- frozen-abi/macro/Cargo.toml | 2 +- genesis-utils/Cargo.toml | 8 +- genesis/Cargo.toml | 22 +- geyser-plugin-interface/Cargo.toml | 6 +- geyser-plugin-manager/Cargo.toml | 16 +- gossip/Cargo.toml | 38 +- install/Cargo.toml | 14 +- keygen/Cargo.toml | 12 +- ledger-tool/Cargo.toml | 30 +- ledger/Cargo.toml | 40 +- local-cluster/Cargo.toml | 28 +- log-analyzer/Cargo.toml | 6 +- logger/Cargo.toml | 2 +- measure/Cargo.toml | 4 +- merkle-root-bench/Cargo.toml | 12 +- merkle-tree/Cargo.toml | 4 +- metrics/Cargo.toml | 4 +- net-shaper/Cargo.toml | 4 +- net-utils/Cargo.toml | 8 +- notifier/Cargo.toml | 2 +- perf/Cargo.toml | 12 +- poh-bench/Cargo.toml | 14 +- poh/Cargo.toml | 20 +- program-runtime/Cargo.toml | 14 +- program-test/Cargo.toml | 18 +- .../address-lookup-table-tests/Cargo.toml | 8 +- programs/address-lookup-table/Cargo.toml | 12 +- programs/bpf-loader-tests/Cargo.toml | 8 +- programs/bpf/Cargo.lock | 490 +++++++++--------- programs/bpf/Cargo.toml | 28 +- programs/bpf/rust/128bit/Cargo.toml | 6 +- programs/bpf/rust/128bit_dep/Cargo.toml | 4 +- programs/bpf/rust/alloc/Cargo.toml | 4 +- programs/bpf/rust/call_depth/Cargo.toml | 4 +- programs/bpf/rust/caller_access/Cargo.toml | 4 +- programs/bpf/rust/curve25519/Cargo.toml | 6 +- programs/bpf/rust/custom_heap/Cargo.toml | 4 +- programs/bpf/rust/dep_crate/Cargo.toml | 6 +- .../bpf/rust/deprecated_loader/Cargo.toml | 4 +- programs/bpf/rust/dup_accounts/Cargo.toml | 4 +- programs/bpf/rust/error_handling/Cargo.toml | 4 +- programs/bpf/rust/external_spend/Cargo.toml | 4 +- programs/bpf/rust/finalize/Cargo.toml | 4 +- .../rust/get_minimum_delegation/Cargo.toml | 4 +- .../Cargo.toml | 4 +- .../rust/instruction_introspection/Cargo.toml | 4 +- programs/bpf/rust/invoke/Cargo.toml | 4 +- programs/bpf/rust/invoke_and_error/Cargo.toml | 4 +- programs/bpf/rust/invoke_and_ok/Cargo.toml | 4 +- .../bpf/rust/invoke_and_return/Cargo.toml | 4 +- programs/bpf/rust/invoked/Cargo.toml | 4 +- programs/bpf/rust/iter/Cargo.toml | 4 +- programs/bpf/rust/log_data/Cargo.toml | 4 +- programs/bpf/rust/many_args/Cargo.toml | 6 +- programs/bpf/rust/many_args_dep/Cargo.toml | 4 +- programs/bpf/rust/mem/Cargo.toml | 10 +- programs/bpf/rust/membuiltins/Cargo.toml | 6 +- programs/bpf/rust/noop/Cargo.toml | 4 +- programs/bpf/rust/panic/Cargo.toml | 4 +- programs/bpf/rust/param_passing/Cargo.toml | 6 +- .../bpf/rust/param_passing_dep/Cargo.toml | 4 +- programs/bpf/rust/rand/Cargo.toml | 4 +- programs/bpf/rust/realloc/Cargo.toml | 4 +- programs/bpf/rust/realloc_invoke/Cargo.toml | 6 +- .../bpf/rust/ro_account_modify/Cargo.toml | 4 +- programs/bpf/rust/ro_modify/Cargo.toml | 4 +- programs/bpf/rust/sanity/Cargo.toml | 10 +- .../bpf/rust/secp256k1_recover/Cargo.toml | 4 +- programs/bpf/rust/sha/Cargo.toml | 4 +- .../rust/sibling_inner_instruction/Cargo.toml | 4 +- .../bpf/rust/sibling_instruction/Cargo.toml | 4 +- programs/bpf/rust/simulation/Cargo.toml | 12 +- programs/bpf/rust/spoof1/Cargo.toml | 4 +- programs/bpf/rust/spoof1_system/Cargo.toml | 4 +- programs/bpf/rust/sysvar/Cargo.toml | 10 +- programs/bpf/rust/upgradeable/Cargo.toml | 4 +- programs/bpf/rust/upgraded/Cargo.toml | 4 +- programs/bpf_loader/Cargo.toml | 14 +- .../bpf_loader/gen-syscall-list/Cargo.toml | 2 +- programs/compute-budget/Cargo.toml | 6 +- programs/config/Cargo.toml | 8 +- programs/ed25519-tests/Cargo.toml | 6 +- programs/stake/Cargo.toml | 18 +- programs/vote/Cargo.toml | 14 +- programs/zk-token-proof/Cargo.toml | 8 +- rayon-threadlimit/Cargo.toml | 2 +- rbpf-cli/Cargo.toml | 10 +- remote-wallet/Cargo.toml | 4 +- rpc-test/Cargo.toml | 18 +- rpc/Cargo.toml | 48 +- runtime/Cargo.toml | 34 +- runtime/store-tool/Cargo.toml | 8 +- sdk/Cargo.toml | 12 +- sdk/cargo-build-bpf/Cargo.toml | 4 +- sdk/cargo-build-sbf/Cargo.toml | 8 +- .../tests/crates/fail/Cargo.toml | 4 +- .../tests/crates/noop/Cargo.toml | 4 +- sdk/cargo-test-bpf/Cargo.toml | 2 +- sdk/cargo-test-sbf/Cargo.toml | 2 +- sdk/gen-headers/Cargo.toml | 2 +- sdk/macro/Cargo.toml | 2 +- sdk/program/Cargo.toml | 10 +- send-transaction-service/Cargo.toml | 14 +- stake-accounts/Cargo.toml | 16 +- storage-bigtable/Cargo.toml | 10 +- storage-bigtable/build-proto/Cargo.lock | 2 +- storage-bigtable/build-proto/Cargo.toml | 2 +- storage-proto/Cargo.toml | 8 +- streamer/Cargo.toml | 10 +- sys-tuner/Cargo.toml | 6 +- test-validator/Cargo.toml | 28 +- tokens/Cargo.toml | 24 +- transaction-dos/Cargo.toml | 32 +- transaction-status/Cargo.toml | 12 +- upload-perf/Cargo.toml | 4 +- validator/Cargo.toml | 50 +- version/Cargo.toml | 8 +- watchtower/Cargo.toml | 20 +- zk-token-sdk/Cargo.toml | 6 +- 145 files changed, 1268 insertions(+), 1268 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 355927c192bea3..7eb30dc0574e3d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1686,7 +1686,7 @@ dependencies = [ [[package]] name = "gen-headers" -version = "1.11.9" +version = "1.11.10" dependencies = [ "log", "regex", @@ -1694,7 +1694,7 @@ dependencies = [ [[package]] name = "gen-syscall-list" -version = "1.11.9" +version = "1.11.10" dependencies = [ "regex", ] @@ -3754,15 +3754,15 @@ dependencies = [ [[package]] name = "rbpf-cli" -version = "1.11.9" +version = "1.11.10" dependencies = [ "clap 3.1.8", "serde", "serde_json", "solana-bpf-loader-program", - "solana-logger 1.11.9", + "solana-logger 1.11.10", "solana-program-runtime", - "solana-sdk 1.11.9", + "solana-sdk 1.11.10", "solana_rbpf", ] @@ -4473,7 +4473,7 @@ dependencies = [ [[package]] name = "solana-account-decoder" -version = "1.11.9" +version = "1.11.10" dependencies = [ "Inflector", "base64 0.13.0", @@ -4485,7 +4485,7 @@ dependencies = [ "serde_derive", "serde_json", "solana-config-program", - "solana-sdk 1.11.9", + "solana-sdk 1.11.10", "solana-vote-program", "spl-token", "spl-token-2022", @@ -4495,21 +4495,21 @@ dependencies = [ [[package]] name = "solana-accounts-bench" -version = "1.11.9" +version = "1.11.10" dependencies = [ "clap 2.33.3", "log", "rayon", - "solana-logger 1.11.9", + "solana-logger 1.11.10", "solana-measure", "solana-runtime", - "solana-sdk 1.11.9", + "solana-sdk 1.11.10", "solana-version", ] [[package]] name = "solana-accounts-cluster-bench" -version = "1.11.9" +version = "1.11.10" dependencies = [ "clap 2.33.3", "log", @@ -4522,11 +4522,11 @@ dependencies = [ "solana-faucet", "solana-gossip", "solana-local-cluster", - "solana-logger 1.11.9", + "solana-logger 1.11.10", "solana-measure", "solana-net-utils", "solana-runtime", - "solana-sdk 1.11.9", + "solana-sdk 1.11.10", "solana-streamer", "solana-test-validator", "solana-transaction-status", @@ -4536,7 +4536,7 @@ dependencies = [ [[package]] name = "solana-address-lookup-table-program" -version = "1.11.9" +version = "1.11.10" dependencies = [ "bincode", "bytemuck", @@ -4545,28 +4545,28 @@ dependencies = [ "num-traits", "rustc_version 0.4.0", "serde", - "solana-frozen-abi 1.11.9", - "solana-frozen-abi-macro 1.11.9", - "solana-program 1.11.9", + "solana-frozen-abi 1.11.10", + "solana-frozen-abi-macro 1.11.10", + "solana-program 1.11.10", "solana-program-runtime", - "solana-sdk 1.11.9", + "solana-sdk 1.11.10", "thiserror", ] [[package]] name = "solana-address-lookup-table-program-tests" -version = "1.11.9" +version = "1.11.10" dependencies = [ "assert_matches", "bincode", "solana-address-lookup-table-program", "solana-program-test", - "solana-sdk 1.11.9", + "solana-sdk 1.11.10", ] [[package]] name = "solana-banking-bench" -version = "1.11.9" +version = "1.11.10" dependencies = [ "clap 3.1.8", "crossbeam-channel", @@ -4577,27 +4577,27 @@ dependencies = [ "solana-core", "solana-gossip", "solana-ledger", - "solana-logger 1.11.9", + "solana-logger 1.11.10", "solana-measure", "solana-perf", "solana-poh", "solana-runtime", - "solana-sdk 1.11.9", + "solana-sdk 1.11.10", "solana-streamer", "solana-version", ] [[package]] name = "solana-banks-client" -version = "1.11.9" +version = "1.11.10" dependencies = [ "borsh", "futures 0.3.21", "solana-banks-interface", "solana-banks-server", - "solana-program 1.11.9", + "solana-program 1.11.10", "solana-runtime", - "solana-sdk 1.11.9", + "solana-sdk 1.11.10", "tarpc", "thiserror", "tokio", @@ -4606,16 +4606,16 @@ dependencies = [ [[package]] name = "solana-banks-interface" -version = "1.11.9" +version = "1.11.10" dependencies = [ "serde", - "solana-sdk 1.11.9", + "solana-sdk 1.11.10", "tarpc", ] [[package]] name = "solana-banks-server" -version = "1.11.9" +version = "1.11.10" dependencies = [ "bincode", "crossbeam-channel", @@ -4623,7 +4623,7 @@ dependencies = [ "solana-banks-interface", "solana-client", "solana-runtime", - "solana-sdk 1.11.9", + "solana-sdk 1.11.10", "solana-send-transaction-service", "tarpc", "tokio", @@ -4633,7 +4633,7 @@ dependencies = [ [[package]] name = "solana-bench-streamer" -version = "1.11.9" +version = "1.11.10" dependencies = [ "clap 3.1.8", "crossbeam-channel", @@ -4644,7 +4644,7 @@ dependencies = [ [[package]] name = "solana-bench-tps" -version = "1.11.9" +version = "1.11.10" dependencies = [ "clap 2.33.3", "crossbeam-channel", @@ -4661,13 +4661,13 @@ dependencies = [ "solana-genesis", "solana-gossip", "solana-local-cluster", - "solana-logger 1.11.9", + "solana-logger 1.11.10", "solana-measure", "solana-metrics", "solana-net-utils", "solana-rpc", "solana-runtime", - "solana-sdk 1.11.9", + "solana-sdk 1.11.10", "solana-streamer", "solana-test-validator", "solana-version", @@ -4676,7 +4676,7 @@ dependencies = [ [[package]] name = "solana-bloom" -version = "1.11.9" +version = "1.11.10" dependencies = [ "bv", "fnv", @@ -4686,14 +4686,14 @@ dependencies = [ "rustc_version 0.4.0", "serde", "serde_derive", - "solana-frozen-abi 1.11.9", - "solana-frozen-abi-macro 1.11.9", - "solana-sdk 1.11.9", + "solana-frozen-abi 1.11.10", + "solana-frozen-abi-macro 1.11.10", + "solana-sdk 1.11.10", ] [[package]] name = "solana-bpf-loader-program" -version = "1.11.9" +version = "1.11.10" dependencies = [ "bincode", "byteorder", @@ -4704,26 +4704,26 @@ dependencies = [ "solana-metrics", "solana-program-runtime", "solana-runtime", - "solana-sdk 1.11.9", - "solana-zk-token-sdk 1.11.9", + "solana-sdk 1.11.10", + "solana-zk-token-sdk 1.11.10", "solana_rbpf", "thiserror", ] [[package]] name = "solana-bpf-loader-program-tests" -version = "1.11.9" +version = "1.11.10" dependencies = [ "assert_matches", "bincode", "solana-bpf-loader-program", "solana-program-test", - "solana-sdk 1.11.9", + "solana-sdk 1.11.10", ] [[package]] name = "solana-bucket-map" -version = "1.11.9" +version = "1.11.10" dependencies = [ "fs_extra", "log", @@ -4731,24 +4731,24 @@ dependencies = [ "modular-bitfield", "rand 0.7.3", "rayon", - "solana-logger 1.11.9", + "solana-logger 1.11.10", "solana-measure", - "solana-sdk 1.11.9", + "solana-sdk 1.11.10", "tempfile", ] [[package]] name = "solana-cargo-build-bpf" -version = "1.11.9" +version = "1.11.10" dependencies = [ "cargo_metadata", "clap 3.1.8", - "solana-sdk 1.11.9", + "solana-sdk 1.11.10", ] [[package]] name = "solana-cargo-build-sbf" -version = "1.11.9" +version = "1.11.10" dependencies = [ "bzip2", "cargo_metadata", @@ -4757,14 +4757,14 @@ dependencies = [ "regex", "serial_test", "solana-download-utils", - "solana-logger 1.11.9", - "solana-sdk 1.11.9", + "solana-logger 1.11.10", + "solana-sdk 1.11.10", "tar", ] [[package]] name = "solana-cargo-test-bpf" -version = "1.11.9" +version = "1.11.10" dependencies = [ "cargo_metadata", "clap 3.1.8", @@ -4772,7 +4772,7 @@ dependencies = [ [[package]] name = "solana-cargo-test-sbf" -version = "1.11.9" +version = "1.11.10" dependencies = [ "cargo_metadata", "clap 3.1.8", @@ -4780,14 +4780,14 @@ dependencies = [ [[package]] name = "solana-clap-utils" -version = "1.11.9" +version = "1.11.10" dependencies = [ "chrono", "clap 2.33.3", "rpassword", "solana-perf", "solana-remote-wallet", - "solana-sdk 1.11.9", + "solana-sdk 1.11.10", "tempfile", "thiserror", "tiny-bip39", @@ -4797,14 +4797,14 @@ dependencies = [ [[package]] name = "solana-clap-v3-utils" -version = "1.11.9" +version = "1.11.10" dependencies = [ "chrono", "clap 3.1.8", "rpassword", "solana-perf", "solana-remote-wallet", - "solana-sdk 1.11.9", + "solana-sdk 1.11.10", "tempfile", "thiserror", "tiny-bip39", @@ -4814,7 +4814,7 @@ dependencies = [ [[package]] name = "solana-cli" -version = "1.11.9" +version = "1.11.10" dependencies = [ "bincode", "bs58", @@ -4841,10 +4841,10 @@ dependencies = [ "solana-client", "solana-config-program", "solana-faucet", - "solana-logger 1.11.9", + "solana-logger 1.11.10", "solana-program-runtime", "solana-remote-wallet", - "solana-sdk 1.11.9", + "solana-sdk 1.11.10", "solana-streamer", "solana-test-validator", "solana-transaction-status", @@ -4859,7 +4859,7 @@ dependencies = [ [[package]] name = "solana-cli-config" -version = "1.11.9" +version = "1.11.10" dependencies = [ "anyhow", "dirs-next", @@ -4868,13 +4868,13 @@ dependencies = [ "serde_derive", "serde_yaml", "solana-clap-utils", - "solana-sdk 1.11.9", + "solana-sdk 1.11.10", "url 2.2.2", ] [[package]] name = "solana-cli-output" -version = "1.11.9" +version = "1.11.10" dependencies = [ "Inflector", "base64 0.13.0", @@ -4892,7 +4892,7 @@ dependencies = [ "solana-clap-utils", "solana-cli-config", "solana-client", - "solana-sdk 1.11.9", + "solana-sdk 1.11.10", "solana-transaction-status", "solana-vote-program", "spl-memo", @@ -4900,7 +4900,7 @@ dependencies = [ [[package]] name = "solana-client" -version = "1.11.9" +version = "1.11.10" dependencies = [ "anyhow", "assert_matches", @@ -4936,12 +4936,12 @@ dependencies = [ "solana-account-decoder", "solana-clap-utils", "solana-faucet", - "solana-logger 1.11.9", + "solana-logger 1.11.10", "solana-measure", "solana-metrics", "solana-net-utils", "solana-perf", - "solana-sdk 1.11.9", + "solana-sdk 1.11.10", "solana-streamer", "solana-transaction-status", "solana-version", @@ -4957,14 +4957,14 @@ dependencies = [ [[package]] name = "solana-client-test" -version = "1.11.9" +version = "1.11.10" dependencies = [ "futures-util", "serde_json", "serial_test", "solana-client", "solana-ledger", - "solana-logger 1.11.9", + "solana-logger 1.11.10", "solana-measure", "solana-merkle-tree", "solana-metrics", @@ -4972,7 +4972,7 @@ dependencies = [ "solana-rayon-threadlimit", "solana-rpc", "solana-runtime", - "solana-sdk 1.11.9", + "solana-sdk 1.11.10", "solana-streamer", "solana-test-validator", "solana-transaction-status", @@ -4983,28 +4983,28 @@ dependencies = [ [[package]] name = "solana-compute-budget-program" -version = "1.11.9" +version = "1.11.10" dependencies = [ "solana-program-runtime", - "solana-sdk 1.11.9", + "solana-sdk 1.11.10", ] [[package]] name = "solana-config-program" -version = "1.11.9" +version = "1.11.10" dependencies = [ "bincode", "chrono", "serde", "serde_derive", - "solana-logger 1.11.9", + "solana-logger 1.11.10", "solana-program-runtime", - "solana-sdk 1.11.9", + "solana-sdk 1.11.10", ] [[package]] name = "solana-core" -version = "1.11.9" +version = "1.11.10" dependencies = [ "ahash", "base64 0.13.0", @@ -5036,12 +5036,12 @@ dependencies = [ "solana-bloom", "solana-client", "solana-entry", - "solana-frozen-abi 1.11.9", - "solana-frozen-abi-macro 1.11.9", + "solana-frozen-abi 1.11.10", + "solana-frozen-abi-macro 1.11.10", "solana-geyser-plugin-manager", "solana-gossip", "solana-ledger", - "solana-logger 1.11.9", + "solana-logger 1.11.10", "solana-measure", "solana-metrics", "solana-net-utils", @@ -5051,7 +5051,7 @@ dependencies = [ "solana-rayon-threadlimit", "solana-rpc", "solana-runtime", - "solana-sdk 1.11.9", + "solana-sdk 1.11.10", "solana-send-transaction-service", "solana-stake-program", "solana-streamer", @@ -5071,7 +5071,7 @@ dependencies = [ [[package]] name = "solana-dos" -version = "1.11.9" +version = "1.11.10" dependencies = [ "bincode", "clap 3.1.8", @@ -5087,42 +5087,42 @@ dependencies = [ "solana-faucet", "solana-gossip", "solana-local-cluster", - "solana-logger 1.11.9", + "solana-logger 1.11.10", "solana-measure", "solana-net-utils", "solana-perf", "solana-rpc", - "solana-sdk 1.11.9", + "solana-sdk 1.11.10", "solana-streamer", "solana-version", ] [[package]] name = "solana-download-utils" -version = "1.11.9" +version = "1.11.10" dependencies = [ "console", "indicatif", "log", "reqwest", "solana-runtime", - "solana-sdk 1.11.9", + "solana-sdk 1.11.10", ] [[package]] name = "solana-ed25519-program-tests" -version = "1.11.9" +version = "1.11.10" dependencies = [ "assert_matches", "ed25519-dalek", "rand 0.7.3", "solana-program-test", - "solana-sdk 1.11.9", + "solana-sdk 1.11.10", ] [[package]] name = "solana-entry" -version = "1.11.9" +version = "1.11.10" dependencies = [ "bincode", "crossbeam-channel", @@ -5134,18 +5134,18 @@ dependencies = [ "rand 0.7.3", "rayon", "serde", - "solana-logger 1.11.9", + "solana-logger 1.11.10", "solana-measure", "solana-merkle-tree", "solana-metrics", "solana-perf", "solana-rayon-threadlimit", - "solana-sdk 1.11.9", + "solana-sdk 1.11.10", ] [[package]] name = "solana-faucet" -version = "1.11.9" +version = "1.11.10" dependencies = [ "bincode", "byteorder", @@ -5156,9 +5156,9 @@ dependencies = [ "serde_derive", "solana-clap-utils", "solana-cli-config", - "solana-logger 1.11.9", + "solana-logger 1.11.10", "solana-metrics", - "solana-sdk 1.11.9", + "solana-sdk 1.11.10", "solana-version", "spl-memo", "thiserror", @@ -5189,7 +5189,7 @@ dependencies = [ [[package]] name = "solana-frozen-abi" -version = "1.11.9" +version = "1.11.10" dependencies = [ "ahash", "blake3", @@ -5214,8 +5214,8 @@ dependencies = [ "serde_derive", "serde_json", "sha2 0.10.2", - "solana-frozen-abi-macro 1.11.9", - "solana-logger 1.11.9", + "solana-frozen-abi-macro 1.11.10", + "solana-logger 1.11.10", "subtle", "thiserror", ] @@ -5234,7 +5234,7 @@ dependencies = [ [[package]] name = "solana-frozen-abi-macro" -version = "1.11.9" +version = "1.11.10" dependencies = [ "proc-macro2 1.0.41", "quote 1.0.18", @@ -5244,7 +5244,7 @@ dependencies = [ [[package]] name = "solana-genesis" -version = "1.11.9" +version = "1.11.10" dependencies = [ "base64 0.13.0", "clap 2.33.3", @@ -5255,9 +5255,9 @@ dependencies = [ "solana-cli-config", "solana-entry", "solana-ledger", - "solana-logger 1.11.9", + "solana-logger 1.11.10", "solana-runtime", - "solana-sdk 1.11.9", + "solana-sdk 1.11.10", "solana-stake-program", "solana-version", "solana-vote-program", @@ -5266,26 +5266,26 @@ dependencies = [ [[package]] name = "solana-genesis-utils" -version = "1.11.9" +version = "1.11.10" dependencies = [ "solana-download-utils", "solana-runtime", - "solana-sdk 1.11.9", + "solana-sdk 1.11.10", ] [[package]] name = "solana-geyser-plugin-interface" -version = "1.11.9" +version = "1.11.10" dependencies = [ "log", - "solana-sdk 1.11.9", + "solana-sdk 1.11.10", "solana-transaction-status", "thiserror", ] [[package]] name = "solana-geyser-plugin-manager" -version = "1.11.9" +version = "1.11.10" dependencies = [ "bs58", "crossbeam-channel", @@ -5298,14 +5298,14 @@ dependencies = [ "solana-metrics", "solana-rpc", "solana-runtime", - "solana-sdk 1.11.9", + "solana-sdk 1.11.10", "solana-transaction-status", "thiserror", ] [[package]] name = "solana-gossip" -version = "1.11.9" +version = "1.11.10" dependencies = [ "bincode", "bv", @@ -5332,17 +5332,17 @@ dependencies = [ "solana-clap-utils", "solana-client", "solana-entry", - "solana-frozen-abi 1.11.9", - "solana-frozen-abi-macro 1.11.9", + "solana-frozen-abi 1.11.10", + "solana-frozen-abi-macro 1.11.10", "solana-ledger", - "solana-logger 1.11.9", + "solana-logger 1.11.10", "solana-measure", "solana-metrics", "solana-net-utils", "solana-perf", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.11.9", + "solana-sdk 1.11.10", "solana-streamer", "solana-version", "solana-vote-program", @@ -5351,7 +5351,7 @@ dependencies = [ [[package]] name = "solana-install" -version = "1.11.9" +version = "1.11.10" dependencies = [ "atty", "bincode", @@ -5372,8 +5372,8 @@ dependencies = [ "solana-clap-utils", "solana-client", "solana-config-program", - "solana-logger 1.11.9", - "solana-sdk 1.11.9", + "solana-logger 1.11.10", + "solana-sdk 1.11.10", "solana-version", "tar", "tempfile", @@ -5384,7 +5384,7 @@ dependencies = [ [[package]] name = "solana-keygen" -version = "1.11.9" +version = "1.11.10" dependencies = [ "bs58", "clap 3.1.8", @@ -5393,14 +5393,14 @@ dependencies = [ "solana-clap-v3-utils", "solana-cli-config", "solana-remote-wallet", - "solana-sdk 1.11.9", + "solana-sdk 1.11.10", "solana-version", "tiny-bip39", ] [[package]] name = "solana-ledger" -version = "1.11.9" +version = "1.11.10" dependencies = [ "assert_matches", "bincode", @@ -5434,16 +5434,16 @@ dependencies = [ "solana-account-decoder", "solana-bpf-loader-program", "solana-entry", - "solana-frozen-abi 1.11.9", - "solana-frozen-abi-macro 1.11.9", - "solana-logger 1.11.9", + "solana-frozen-abi 1.11.10", + "solana-frozen-abi-macro 1.11.10", + "solana-logger 1.11.10", "solana-measure", "solana-metrics", "solana-perf", "solana-program-runtime", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.11.9", + "solana-sdk 1.11.10", "solana-stake-program", "solana-storage-bigtable", "solana-storage-proto", @@ -5462,7 +5462,7 @@ dependencies = [ [[package]] name = "solana-ledger-tool" -version = "1.11.9" +version = "1.11.10" dependencies = [ "assert_cmd", "bs58", @@ -5484,10 +5484,10 @@ dependencies = [ "solana-core", "solana-entry", "solana-ledger", - "solana-logger 1.11.9", + "solana-logger 1.11.10", "solana-measure", "solana-runtime", - "solana-sdk 1.11.9", + "solana-sdk 1.11.10", "solana-stake-program", "solana-storage-bigtable", "solana-transaction-status", @@ -5499,7 +5499,7 @@ dependencies = [ [[package]] name = "solana-local-cluster" -version = "1.11.9" +version = "1.11.10" dependencies = [ "assert_matches", "crossbeam-channel", @@ -5517,9 +5517,9 @@ dependencies = [ "solana-entry", "solana-gossip", "solana-ledger", - "solana-logger 1.11.9", + "solana-logger 1.11.10", "solana-runtime", - "solana-sdk 1.11.9", + "solana-sdk 1.11.10", "solana-stake-program", "solana-streamer", "solana-vote-program", @@ -5528,13 +5528,13 @@ dependencies = [ [[package]] name = "solana-log-analyzer" -version = "1.11.9" +version = "1.11.10" dependencies = [ "byte-unit", "clap 3.1.8", "serde", "serde_json", - "solana-logger 1.11.9", + "solana-logger 1.11.10", "solana-version", ] @@ -5551,7 +5551,7 @@ dependencies = [ [[package]] name = "solana-logger" -version = "1.11.9" +version = "1.11.10" dependencies = [ "env_logger", "lazy_static", @@ -5560,38 +5560,38 @@ dependencies = [ [[package]] name = "solana-measure" -version = "1.11.9" +version = "1.11.10" dependencies = [ "log", - "solana-sdk 1.11.9", + "solana-sdk 1.11.10", ] [[package]] name = "solana-merkle-root-bench" -version = "1.11.9" +version = "1.11.10" dependencies = [ "clap 2.33.3", "log", - "solana-logger 1.11.9", + "solana-logger 1.11.10", "solana-measure", "solana-runtime", - "solana-sdk 1.11.9", + "solana-sdk 1.11.10", "solana-version", ] [[package]] name = "solana-merkle-tree" -version = "1.11.9" +version = "1.11.10" dependencies = [ "fast-math", "hex", "matches", - "solana-program 1.11.9", + "solana-program 1.11.10", ] [[package]] name = "solana-metrics" -version = "1.11.9" +version = "1.11.10" dependencies = [ "crossbeam-channel", "env_logger", @@ -5601,23 +5601,23 @@ dependencies = [ "rand 0.7.3", "reqwest", "serial_test", - "solana-sdk 1.11.9", + "solana-sdk 1.11.10", ] [[package]] name = "solana-net-shaper" -version = "1.11.9" +version = "1.11.10" dependencies = [ "clap 3.1.8", "rand 0.7.3", "serde", "serde_json", - "solana-logger 1.11.9", + "solana-logger 1.11.10", ] [[package]] name = "solana-net-utils" -version = "1.11.9" +version = "1.11.10" dependencies = [ "bincode", "clap 3.1.8", @@ -5628,8 +5628,8 @@ dependencies = [ "serde", "serde_derive", "socket2", - "solana-logger 1.11.9", - "solana-sdk 1.11.9", + "solana-logger 1.11.10", + "solana-sdk 1.11.10", "solana-version", "tokio", "url 2.2.2", @@ -5637,7 +5637,7 @@ dependencies = [ [[package]] name = "solana-notifier" -version = "1.11.9" +version = "1.11.10" dependencies = [ "log", "reqwest", @@ -5646,7 +5646,7 @@ dependencies = [ [[package]] name = "solana-perf" -version = "1.11.9" +version = "1.11.10" dependencies = [ "ahash", "bincode", @@ -5664,16 +5664,16 @@ dependencies = [ "rand 0.7.3", "rayon", "serde", - "solana-logger 1.11.9", + "solana-logger 1.11.10", "solana-metrics", "solana-rayon-threadlimit", - "solana-sdk 1.11.9", + "solana-sdk 1.11.10", "solana-vote-program", ] [[package]] name = "solana-poh" -version = "1.11.9" +version = "1.11.10" dependencies = [ "bincode", "core_affinity", @@ -5683,29 +5683,29 @@ dependencies = [ "rand 0.7.3", "solana-entry", "solana-ledger", - "solana-logger 1.11.9", + "solana-logger 1.11.10", "solana-measure", "solana-metrics", "solana-perf", "solana-runtime", - "solana-sdk 1.11.9", + "solana-sdk 1.11.10", "solana-sys-tuner", "thiserror", ] [[package]] name = "solana-poh-bench" -version = "1.11.9" +version = "1.11.10" dependencies = [ "clap 3.1.8", "log", "rand 0.7.3", "rayon", "solana-entry", - "solana-logger 1.11.9", + "solana-logger 1.11.10", "solana-measure", "solana-perf", - "solana-sdk 1.11.9", + "solana-sdk 1.11.10", "solana-version", ] @@ -5753,7 +5753,7 @@ dependencies = [ [[package]] name = "solana-program" -version = "1.11.9" +version = "1.11.10" dependencies = [ "anyhow", "assert_matches", @@ -5791,10 +5791,10 @@ dependencies = [ "serde_json", "sha2 0.10.2", "sha3 0.10.1", - "solana-frozen-abi 1.11.9", - "solana-frozen-abi-macro 1.11.9", - "solana-logger 1.11.9", - "solana-sdk-macro 1.11.9", + "solana-frozen-abi 1.11.10", + "solana-frozen-abi-macro 1.11.10", + "solana-logger 1.11.10", + "solana-sdk-macro 1.11.10", "static_assertions", "thiserror", "tiny-bip39", @@ -5804,7 +5804,7 @@ dependencies = [ [[package]] name = "solana-program-runtime" -version = "1.11.9" +version = "1.11.10" dependencies = [ "base64 0.13.0", "bincode", @@ -5818,18 +5818,18 @@ dependencies = [ "num-traits", "rustc_version 0.4.0", "serde", - "solana-frozen-abi 1.11.9", - "solana-frozen-abi-macro 1.11.9", - "solana-logger 1.11.9", + "solana-frozen-abi 1.11.10", + "solana-frozen-abi-macro 1.11.10", + "solana-logger 1.11.10", "solana-measure", "solana-metrics", - "solana-sdk 1.11.9", + "solana-sdk 1.11.10", "thiserror", ] [[package]] name = "solana-program-test" -version = "1.11.9" +version = "1.11.10" dependencies = [ "assert_matches", "async-trait", @@ -5841,10 +5841,10 @@ dependencies = [ "solana-banks-client", "solana-banks-server", "solana-bpf-loader-program", - "solana-logger 1.11.9", + "solana-logger 1.11.10", "solana-program-runtime", "solana-runtime", - "solana-sdk 1.11.9", + "solana-sdk 1.11.10", "solana-vote-program", "thiserror", "tokio", @@ -5852,7 +5852,7 @@ dependencies = [ [[package]] name = "solana-rayon-threadlimit" -version = "1.11.9" +version = "1.11.10" dependencies = [ "lazy_static", "num_cpus", @@ -5860,7 +5860,7 @@ dependencies = [ [[package]] name = "solana-remote-wallet" -version = "1.11.9" +version = "1.11.10" dependencies = [ "console", "dialoguer", @@ -5871,14 +5871,14 @@ dependencies = [ "parking_lot 0.12.1", "qstring", "semver 1.0.10", - "solana-sdk 1.11.9", + "solana-sdk 1.11.10", "thiserror", "uriparse", ] [[package]] name = "solana-rpc" -version = "1.11.9" +version = "1.11.10" dependencies = [ "base64 0.13.0", "bincode", @@ -5914,7 +5914,7 @@ dependencies = [ "solana-poh", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.11.9", + "solana-sdk 1.11.10", "solana-send-transaction-service", "solana-stake-program", "solana-storage-bigtable", @@ -5933,7 +5933,7 @@ dependencies = [ [[package]] name = "solana-rpc-test" -version = "1.11.9" +version = "1.11.10" dependencies = [ "bincode", "bs58", @@ -5945,9 +5945,9 @@ dependencies = [ "serde_json", "solana-account-decoder", "solana-client", - "solana-logger 1.11.9", + "solana-logger 1.11.10", "solana-rpc", - "solana-sdk 1.11.9", + "solana-sdk 1.11.10", "solana-streamer", "solana-test-validator", "solana-transaction-status", @@ -5956,7 +5956,7 @@ dependencies = [ [[package]] name = "solana-runtime" -version = "1.11.9" +version = "1.11.10" dependencies = [ "arrayref", "assert_matches", @@ -5996,18 +5996,18 @@ dependencies = [ "solana-bucket-map", "solana-compute-budget-program", "solana-config-program", - "solana-frozen-abi 1.11.9", - "solana-frozen-abi-macro 1.11.9", - "solana-logger 1.11.9", + "solana-frozen-abi 1.11.10", + "solana-frozen-abi-macro 1.11.10", + "solana-logger 1.11.10", "solana-measure", "solana-metrics", "solana-program-runtime", "solana-rayon-threadlimit", - "solana-sdk 1.11.9", + "solana-sdk 1.11.10", "solana-stake-program", "solana-vote-program", "solana-zk-token-proof-program", - "solana-zk-token-sdk 1.11.9", + "solana-zk-token-sdk 1.11.10", "strum", "strum_macros", "symlink", @@ -6070,7 +6070,7 @@ dependencies = [ [[package]] name = "solana-sdk" -version = "1.11.9" +version = "1.11.10" dependencies = [ "anyhow", "assert_matches", @@ -6110,11 +6110,11 @@ dependencies = [ "serde_json", "sha2 0.10.2", "sha3 0.10.1", - "solana-frozen-abi 1.11.9", - "solana-frozen-abi-macro 1.11.9", - "solana-logger 1.11.9", - "solana-program 1.11.9", - "solana-sdk-macro 1.11.9", + "solana-frozen-abi 1.11.10", + "solana-frozen-abi-macro 1.11.10", + "solana-logger 1.11.10", + "solana-program 1.11.10", + "solana-sdk-macro 1.11.10", "static_assertions", "thiserror", "tiny-bip39", @@ -6137,7 +6137,7 @@ dependencies = [ [[package]] name = "solana-sdk-macro" -version = "1.11.9" +version = "1.11.10" dependencies = [ "bs58", "proc-macro2 1.0.41", @@ -6148,21 +6148,21 @@ dependencies = [ [[package]] name = "solana-send-transaction-service" -version = "1.11.9" +version = "1.11.10" dependencies = [ "crossbeam-channel", "log", "solana-client", - "solana-logger 1.11.9", + "solana-logger 1.11.10", "solana-measure", "solana-metrics", "solana-runtime", - "solana-sdk 1.11.9", + "solana-sdk 1.11.10", ] [[package]] name = "solana-stake-accounts" -version = "1.11.9" +version = "1.11.10" dependencies = [ "clap 2.33.3", "solana-clap-utils", @@ -6170,13 +6170,13 @@ dependencies = [ "solana-client", "solana-remote-wallet", "solana-runtime", - "solana-sdk 1.11.9", + "solana-sdk 1.11.10", "solana-stake-program", ] [[package]] name = "solana-stake-program" -version = "1.11.9" +version = "1.11.10" dependencies = [ "assert_matches", "bincode", @@ -6188,12 +6188,12 @@ dependencies = [ "serde", "serde_derive", "solana-config-program", - "solana-frozen-abi 1.11.9", - "solana-frozen-abi-macro 1.11.9", - "solana-logger 1.11.9", + "solana-frozen-abi 1.11.10", + "solana-frozen-abi-macro 1.11.10", + "solana-logger 1.11.10", "solana-metrics", "solana-program-runtime", - "solana-sdk 1.11.9", + "solana-sdk 1.11.10", "solana-vote-program", "test-case", "thiserror", @@ -6201,7 +6201,7 @@ dependencies = [ [[package]] name = "solana-storage-bigtable" -version = "1.11.9" +version = "1.11.10" dependencies = [ "backoff", "bincode", @@ -6222,7 +6222,7 @@ dependencies = [ "serde_derive", "smpl_jwt", "solana-metrics", - "solana-sdk 1.11.9", + "solana-sdk 1.11.10", "solana-storage-proto", "solana-transaction-status", "thiserror", @@ -6233,7 +6233,7 @@ dependencies = [ [[package]] name = "solana-storage-proto" -version = "1.11.9" +version = "1.11.10" dependencies = [ "bincode", "bs58", @@ -6242,25 +6242,25 @@ dependencies = [ "protobuf-src", "serde", "solana-account-decoder", - "solana-sdk 1.11.9", + "solana-sdk 1.11.10", "solana-transaction-status", "tonic-build 0.8.0", ] [[package]] name = "solana-store-tool" -version = "1.11.9" +version = "1.11.10" dependencies = [ "clap 2.33.3", "log", - "solana-logger 1.11.9", + "solana-logger 1.11.10", "solana-runtime", "solana-version", ] [[package]] name = "solana-streamer" -version = "1.11.9" +version = "1.11.10" dependencies = [ "crossbeam-channel", "futures-util", @@ -6277,10 +6277,10 @@ dependencies = [ "rand 0.7.3", "rcgen", "rustls 0.20.6", - "solana-logger 1.11.9", + "solana-logger 1.11.10", "solana-metrics", "solana-perf", - "solana-sdk 1.11.9", + "solana-sdk 1.11.10", "thiserror", "tokio", "x509-parser", @@ -6288,13 +6288,13 @@ dependencies = [ [[package]] name = "solana-sys-tuner" -version = "1.11.9" +version = "1.11.10" dependencies = [ "clap 2.33.3", "libc", "log", "nix", - "solana-logger 1.11.9", + "solana-logger 1.11.10", "solana-version", "sysctl", "unix_socket2", @@ -6303,7 +6303,7 @@ dependencies = [ [[package]] name = "solana-test-validator" -version = "1.11.9" +version = "1.11.10" dependencies = [ "base64 0.13.0", "log", @@ -6314,20 +6314,20 @@ dependencies = [ "solana-core", "solana-gossip", "solana-ledger", - "solana-logger 1.11.9", + "solana-logger 1.11.10", "solana-net-utils", "solana-program-runtime", "solana-program-test", "solana-rpc", "solana-runtime", - "solana-sdk 1.11.9", + "solana-sdk 1.11.10", "solana-streamer", "tokio", ] [[package]] name = "solana-tokens" -version = "1.11.9" +version = "1.11.10" dependencies = [ "bincode", "chrono", @@ -6343,9 +6343,9 @@ dependencies = [ "solana-clap-utils", "solana-cli-config", "solana-client", - "solana-logger 1.11.9", + "solana-logger 1.11.10", "solana-remote-wallet", - "solana-sdk 1.11.9", + "solana-sdk 1.11.10", "solana-streamer", "solana-test-validator", "solana-transaction-status", @@ -6358,7 +6358,7 @@ dependencies = [ [[package]] name = "solana-transaction-dos" -version = "1.11.9" +version = "1.11.10" dependencies = [ "bincode", "clap 2.33.3", @@ -6372,11 +6372,11 @@ dependencies = [ "solana-faucet", "solana-gossip", "solana-local-cluster", - "solana-logger 1.11.9", + "solana-logger 1.11.10", "solana-measure", "solana-net-utils", "solana-runtime", - "solana-sdk 1.11.9", + "solana-sdk 1.11.10", "solana-streamer", "solana-transaction-status", "solana-version", @@ -6384,7 +6384,7 @@ dependencies = [ [[package]] name = "solana-transaction-status" -version = "1.11.9" +version = "1.11.10" dependencies = [ "Inflector", "base64 0.13.0", @@ -6399,7 +6399,7 @@ dependencies = [ "solana-account-decoder", "solana-measure", "solana-metrics", - "solana-sdk 1.11.9", + "solana-sdk 1.11.10", "solana-vote-program", "spl-associated-token-account", "spl-memo", @@ -6410,7 +6410,7 @@ dependencies = [ [[package]] name = "solana-upload-perf" -version = "1.11.9" +version = "1.11.10" dependencies = [ "serde_json", "solana-metrics", @@ -6418,7 +6418,7 @@ dependencies = [ [[package]] name = "solana-validator" -version = "1.11.9" +version = "1.11.10" dependencies = [ "chrono", "clap 2.33.3", @@ -6449,14 +6449,14 @@ dependencies = [ "solana-genesis-utils", "solana-gossip", "solana-ledger", - "solana-logger 1.11.9", + "solana-logger 1.11.10", "solana-metrics", "solana-net-utils", "solana-perf", "solana-poh", "solana-rpc", "solana-runtime", - "solana-sdk 1.11.9", + "solana-sdk 1.11.10", "solana-send-transaction-service", "solana-storage-bigtable", "solana-streamer", @@ -6469,21 +6469,21 @@ dependencies = [ [[package]] name = "solana-version" -version = "1.11.9" +version = "1.11.10" dependencies = [ "log", "rustc_version 0.4.0", "semver 1.0.10", "serde", "serde_derive", - "solana-frozen-abi 1.11.9", - "solana-frozen-abi-macro 1.11.9", - "solana-sdk 1.11.9", + "solana-frozen-abi 1.11.10", + "solana-frozen-abi-macro 1.11.10", + "solana-sdk 1.11.10", ] [[package]] name = "solana-vote-program" -version = "1.11.9" +version = "1.11.10" dependencies = [ "bincode", "log", @@ -6492,18 +6492,18 @@ dependencies = [ "rustc_version 0.4.0", "serde", "serde_derive", - "solana-frozen-abi 1.11.9", - "solana-frozen-abi-macro 1.11.9", - "solana-logger 1.11.9", + "solana-frozen-abi 1.11.10", + "solana-frozen-abi-macro 1.11.10", + "solana-logger 1.11.10", "solana-metrics", "solana-program-runtime", - "solana-sdk 1.11.9", + "solana-sdk 1.11.10", "thiserror", ] [[package]] name = "solana-watchtower" -version = "1.11.9" +version = "1.11.10" dependencies = [ "clap 2.33.3", "humantime", @@ -6512,24 +6512,24 @@ dependencies = [ "solana-cli-config", "solana-cli-output", "solana-client", - "solana-logger 1.11.9", + "solana-logger 1.11.10", "solana-metrics", "solana-notifier", - "solana-sdk 1.11.9", + "solana-sdk 1.11.10", "solana-version", ] [[package]] name = "solana-zk-token-proof-program" -version = "1.11.9" +version = "1.11.10" dependencies = [ "bytemuck", "getrandom 0.1.16", "num-derive", "num-traits", "solana-program-runtime", - "solana-sdk 1.11.9", - "solana-zk-token-sdk 1.11.9", + "solana-sdk 1.11.10", + "solana-zk-token-sdk 1.11.10", ] [[package]] @@ -6564,7 +6564,7 @@ dependencies = [ [[package]] name = "solana-zk-token-sdk" -version = "1.11.9" +version = "1.11.10" dependencies = [ "aes-gcm-siv", "arrayref", @@ -6583,8 +6583,8 @@ dependencies = [ "serde", "serde_json", "sha3 0.9.1", - "solana-program 1.11.9", - "solana-sdk 1.11.9", + "solana-program 1.11.10", + "solana-sdk 1.11.10", "subtle", "thiserror", "zeroize", diff --git a/account-decoder/Cargo.toml b/account-decoder/Cargo.toml index 8bbcfbb403f481..db9128a64e157f 100644 --- a/account-decoder/Cargo.toml +++ b/account-decoder/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-account-decoder" -version = "1.11.9" +version = "1.11.10" description = "Solana account decoder" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -19,9 +19,9 @@ lazy_static = "1.4.0" serde = "1.0.138" serde_derive = "1.0.103" serde_json = "1.0.81" -solana-config-program = { path = "../programs/config", version = "=1.11.9" } -solana-sdk = { path = "../sdk", version = "=1.11.9" } -solana-vote-program = { path = "../programs/vote", version = "=1.11.9" } +solana-config-program = { path = "../programs/config", version = "=1.11.10" } +solana-sdk = { path = "../sdk", version = "=1.11.10" } +solana-vote-program = { path = "../programs/vote", version = "=1.11.10" } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } spl-token-2022 = { version = "=0.4.2", features = ["no-entrypoint"] } thiserror = "1.0" diff --git a/accounts-bench/Cargo.toml b/accounts-bench/Cargo.toml index eb7b45101e77ab..88a09eccdf6b0f 100644 --- a/accounts-bench/Cargo.toml +++ b/accounts-bench/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-accounts-bench" -version = "1.11.9" +version = "1.11.10" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -12,11 +12,11 @@ publish = false clap = "2.33.1" log = "0.4.17" rayon = "1.5.3" -solana-logger = { path = "../logger", version = "=1.11.9" } -solana-measure = { path = "../measure", version = "=1.11.9" } -solana-runtime = { path = "../runtime", version = "=1.11.9" } -solana-sdk = { path = "../sdk", version = "=1.11.9" } -solana-version = { path = "../version", version = "=1.11.9" } +solana-logger = { path = "../logger", version = "=1.11.10" } +solana-measure = { path = "../measure", version = "=1.11.10" } +solana-runtime = { path = "../runtime", version = "=1.11.10" } +solana-sdk = { path = "../sdk", version = "=1.11.10" } +solana-version = { path = "../version", version = "=1.11.10" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/accounts-cluster-bench/Cargo.toml b/accounts-cluster-bench/Cargo.toml index d373c14bd1085f..c9eb1e2d25b52b 100644 --- a/accounts-cluster-bench/Cargo.toml +++ b/accounts-cluster-bench/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-accounts-cluster-bench" -version = "1.11.9" +version = "1.11.10" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -13,25 +13,25 @@ clap = "2.33.1" log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" -solana-account-decoder = { path = "../account-decoder", version = "=1.11.9" } -solana-clap-utils = { path = "../clap-utils", version = "=1.11.9" } -solana-client = { path = "../client", version = "=1.11.9" } -solana-faucet = { path = "../faucet", version = "=1.11.9" } -solana-gossip = { path = "../gossip", version = "=1.11.9" } -solana-logger = { path = "../logger", version = "=1.11.9" } -solana-measure = { path = "../measure", version = "=1.11.9" } -solana-net-utils = { path = "../net-utils", version = "=1.11.9" } -solana-runtime = { path = "../runtime", version = "=1.11.9" } -solana-sdk = { path = "../sdk", version = "=1.11.9" } -solana-streamer = { path = "../streamer", version = "=1.11.9" } -solana-transaction-status = { path = "../transaction-status", version = "=1.11.9" } -solana-version = { path = "../version", version = "=1.11.9" } +solana-account-decoder = { path = "../account-decoder", version = "=1.11.10" } +solana-clap-utils = { path = "../clap-utils", version = "=1.11.10" } +solana-client = { path = "../client", version = "=1.11.10" } +solana-faucet = { path = "../faucet", version = "=1.11.10" } +solana-gossip = { path = "../gossip", version = "=1.11.10" } +solana-logger = { path = "../logger", version = "=1.11.10" } +solana-measure = { path = "../measure", version = "=1.11.10" } +solana-net-utils = { path = "../net-utils", version = "=1.11.10" } +solana-runtime = { path = "../runtime", version = "=1.11.10" } +solana-sdk = { path = "../sdk", version = "=1.11.10" } +solana-streamer = { path = "../streamer", version = "=1.11.10" } +solana-transaction-status = { path = "../transaction-status", version = "=1.11.10" } +solana-version = { path = "../version", version = "=1.11.10" } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } [dev-dependencies] -solana-core = { path = "../core", version = "=1.11.9" } -solana-local-cluster = { path = "../local-cluster", version = "=1.11.9" } -solana-test-validator = { path = "../test-validator", version = "=1.11.9" } +solana-core = { path = "../core", version = "=1.11.10" } +solana-local-cluster = { path = "../local-cluster", version = "=1.11.10" } +solana-test-validator = { path = "../test-validator", version = "=1.11.10" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/banking-bench/Cargo.toml b/banking-bench/Cargo.toml index 5818e6994562e7..8b3b31528a6d4a 100644 --- a/banking-bench/Cargo.toml +++ b/banking-bench/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-banking-bench" -version = "1.11.9" +version = "1.11.10" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,18 +14,18 @@ crossbeam-channel = "0.5" log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" -solana-client = { path = "../client", version = "=1.11.9" } -solana-core = { path = "../core", version = "=1.11.9" } -solana-gossip = { path = "../gossip", version = "=1.11.9" } -solana-ledger = { path = "../ledger", version = "=1.11.9" } -solana-logger = { path = "../logger", version = "=1.11.9" } -solana-measure = { path = "../measure", version = "=1.11.9" } -solana-perf = { path = "../perf", version = "=1.11.9" } -solana-poh = { path = "../poh", version = "=1.11.9" } -solana-runtime = { path = "../runtime", version = "=1.11.9" } -solana-sdk = { path = "../sdk", version = "=1.11.9" } -solana-streamer = { path = "../streamer", version = "=1.11.9" } -solana-version = { path = "../version", version = "=1.11.9" } +solana-client = { path = "../client", version = "=1.11.10" } +solana-core = { path = "../core", version = "=1.11.10" } +solana-gossip = { path = "../gossip", version = "=1.11.10" } +solana-ledger = { path = "../ledger", version = "=1.11.10" } +solana-logger = { path = "../logger", version = "=1.11.10" } +solana-measure = { path = "../measure", version = "=1.11.10" } +solana-perf = { path = "../perf", version = "=1.11.10" } +solana-poh = { path = "../poh", version = "=1.11.10" } +solana-runtime = { path = "../runtime", version = "=1.11.10" } +solana-sdk = { path = "../sdk", version = "=1.11.10" } +solana-streamer = { path = "../streamer", version = "=1.11.10" } +solana-version = { path = "../version", version = "=1.11.10" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/banks-client/Cargo.toml b/banks-client/Cargo.toml index 9bb2e87dd54768..4ad8346515245a 100644 --- a/banks-client/Cargo.toml +++ b/banks-client/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-banks-client" -version = "1.11.9" +version = "1.11.10" description = "Solana banks client" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,17 +12,17 @@ edition = "2021" [dependencies] borsh = "0.9.3" futures = "0.3" -solana-banks-interface = { path = "../banks-interface", version = "=1.11.9" } -solana-program = { path = "../sdk/program", version = "=1.11.9" } -solana-sdk = { path = "../sdk", version = "=1.11.9" } +solana-banks-interface = { path = "../banks-interface", version = "=1.11.10" } +solana-program = { path = "../sdk/program", version = "=1.11.10" } +solana-sdk = { path = "../sdk", version = "=1.11.10" } tarpc = { version = "0.29.0", features = ["full"] } thiserror = "1.0" tokio = { version = "~1.14.1", features = ["full"] } tokio-serde = { version = "0.8", features = ["bincode"] } [dev-dependencies] -solana-banks-server = { path = "../banks-server", version = "=1.11.9" } -solana-runtime = { path = "../runtime", version = "=1.11.9" } +solana-banks-server = { path = "../banks-server", version = "=1.11.10" } +solana-runtime = { path = "../runtime", version = "=1.11.10" } [lib] crate-type = ["lib"] diff --git a/banks-interface/Cargo.toml b/banks-interface/Cargo.toml index e6ae2fd21dc740..69849a526d00c5 100644 --- a/banks-interface/Cargo.toml +++ b/banks-interface/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-banks-interface" -version = "1.11.9" +version = "1.11.10" description = "Solana banks RPC interface" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -11,7 +11,7 @@ edition = "2021" [dependencies] serde = { version = "1.0.138", features = ["derive"] } -solana-sdk = { path = "../sdk", version = "=1.11.9" } +solana-sdk = { path = "../sdk", version = "=1.11.10" } tarpc = { version = "0.29.0", features = ["full"] } [lib] diff --git a/banks-server/Cargo.toml b/banks-server/Cargo.toml index 90fbaa8b038934..114288e8429be2 100644 --- a/banks-server/Cargo.toml +++ b/banks-server/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-banks-server" -version = "1.11.9" +version = "1.11.10" description = "Solana banks server" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,11 +13,11 @@ edition = "2021" bincode = "1.3.3" crossbeam-channel = "0.5" futures = "0.3" -solana-banks-interface = { path = "../banks-interface", version = "=1.11.9" } -solana-client = { path = "../client", version = "=1.11.9" } -solana-runtime = { path = "../runtime", version = "=1.11.9" } -solana-sdk = { path = "../sdk", version = "=1.11.9" } -solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.11.9" } +solana-banks-interface = { path = "../banks-interface", version = "=1.11.10" } +solana-client = { path = "../client", version = "=1.11.10" } +solana-runtime = { path = "../runtime", version = "=1.11.10" } +solana-sdk = { path = "../sdk", version = "=1.11.10" } +solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.11.10" } tarpc = { version = "0.29.0", features = ["full"] } tokio = { version = "1", features = ["full"] } tokio-serde = { version = "0.8", features = ["bincode"] } diff --git a/bench-streamer/Cargo.toml b/bench-streamer/Cargo.toml index 9a3100c0848972..51ba85e7e393eb 100644 --- a/bench-streamer/Cargo.toml +++ b/bench-streamer/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-bench-streamer" -version = "1.11.9" +version = "1.11.10" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -11,9 +11,9 @@ publish = false [dependencies] clap = { version = "3.1.5", features = ["cargo"] } crossbeam-channel = "0.5" -solana-net-utils = { path = "../net-utils", version = "=1.11.9" } -solana-streamer = { path = "../streamer", version = "=1.11.9" } -solana-version = { path = "../version", version = "=1.11.9" } +solana-net-utils = { path = "../net-utils", version = "=1.11.10" } +solana-streamer = { path = "../streamer", version = "=1.11.10" } +solana-version = { path = "../version", version = "=1.11.10" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/bench-tps/Cargo.toml b/bench-tps/Cargo.toml index 5da232d02f7e14..3308cf505f9bb5 100644 --- a/bench-tps/Cargo.toml +++ b/bench-tps/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-bench-tps" -version = "1.11.9" +version = "1.11.10" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -15,28 +15,28 @@ log = "0.4.17" rayon = "1.5.3" serde_json = "1.0.81" serde_yaml = "0.8.26" -solana-clap-utils = { path = "../clap-utils", version = "=1.11.9" } -solana-cli-config = { path = "../cli-config", version = "=1.11.9" } -solana-client = { path = "../client", version = "=1.11.9" } -solana-core = { path = "../core", version = "=1.11.9" } -solana-faucet = { path = "../faucet", version = "=1.11.9" } -solana-genesis = { path = "../genesis", version = "=1.11.9" } -solana-gossip = { path = "../gossip", version = "=1.11.9" } -solana-logger = { path = "../logger", version = "=1.11.9" } -solana-measure = { path = "../measure", version = "=1.11.9" } -solana-metrics = { path = "../metrics", version = "=1.11.9" } -solana-net-utils = { path = "../net-utils", version = "=1.11.9" } -solana-rpc = { path = "../rpc", version = "=1.11.9" } -solana-runtime = { path = "../runtime", version = "=1.11.9" } -solana-sdk = { path = "../sdk", version = "=1.11.9" } -solana-streamer = { path = "../streamer", version = "=1.11.9" } -solana-version = { path = "../version", version = "=1.11.9" } +solana-clap-utils = { path = "../clap-utils", version = "=1.11.10" } +solana-cli-config = { path = "../cli-config", version = "=1.11.10" } +solana-client = { path = "../client", version = "=1.11.10" } +solana-core = { path = "../core", version = "=1.11.10" } +solana-faucet = { path = "../faucet", version = "=1.11.10" } +solana-genesis = { path = "../genesis", version = "=1.11.10" } +solana-gossip = { path = "../gossip", version = "=1.11.10" } +solana-logger = { path = "../logger", version = "=1.11.10" } +solana-measure = { path = "../measure", version = "=1.11.10" } +solana-metrics = { path = "../metrics", version = "=1.11.10" } +solana-net-utils = { path = "../net-utils", version = "=1.11.10" } +solana-rpc = { path = "../rpc", version = "=1.11.10" } +solana-runtime = { path = "../runtime", version = "=1.11.10" } +solana-sdk = { path = "../sdk", version = "=1.11.10" } +solana-streamer = { path = "../streamer", version = "=1.11.10" } +solana-version = { path = "../version", version = "=1.11.10" } thiserror = "1.0" [dev-dependencies] serial_test = "0.8.0" -solana-local-cluster = { path = "../local-cluster", version = "=1.11.9" } -solana-test-validator = { path = "../test-validator", version = "=1.11.9" } +solana-local-cluster = { path = "../local-cluster", version = "=1.11.10" } +solana-test-validator = { path = "../test-validator", version = "=1.11.10" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/bloom/Cargo.toml b/bloom/Cargo.toml index e4a40fa3f2354e..bfe9b1a7e9e23f 100644 --- a/bloom/Cargo.toml +++ b/bloom/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bloom" -version = "1.11.9" +version = "1.11.10" description = "Solana bloom filter" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -17,9 +17,9 @@ rand = "0.7.0" rayon = "1.5.3" serde = { version = "1.0.138", features = ["rc"] } serde_derive = "1.0.103" -solana-frozen-abi = { path = "../frozen-abi", version = "=1.11.9" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.11.9" } -solana-sdk = { path = "../sdk", version = "=1.11.9" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.11.10" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.11.10" } +solana-sdk = { path = "../sdk", version = "=1.11.10" } [lib] crate-type = ["lib"] diff --git a/bucket_map/Cargo.toml b/bucket_map/Cargo.toml index f4a691785df0e4..154b64339e86f9 100644 --- a/bucket_map/Cargo.toml +++ b/bucket_map/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bucket-map" -version = "1.11.9" +version = "1.11.10" description = "solana-bucket-map" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-bucket-map" @@ -15,14 +15,14 @@ log = { version = "0.4.17" } memmap2 = "0.5.3" modular-bitfield = "0.11.2" rand = "0.7.0" -solana-measure = { path = "../measure", version = "=1.11.9" } -solana-sdk = { path = "../sdk", version = "=1.11.9" } +solana-measure = { path = "../measure", version = "=1.11.10" } +solana-sdk = { path = "../sdk", version = "=1.11.10" } tempfile = "3.3.0" [dev-dependencies] fs_extra = "1.2.0" rayon = "1.5.3" -solana-logger = { path = "../logger", version = "=1.11.9" } +solana-logger = { path = "../logger", version = "=1.11.10" } [lib] crate-type = ["lib"] diff --git a/clap-utils/Cargo.toml b/clap-utils/Cargo.toml index 0a95c8f867a319..cf68b69fcdd3ae 100644 --- a/clap-utils/Cargo.toml +++ b/clap-utils/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-clap-utils" -version = "1.11.9" +version = "1.11.10" description = "Solana utilities for the clap" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,9 +13,9 @@ edition = "2021" chrono = "0.4" clap = "2.33.0" rpassword = "6.0" -solana-perf = { path = "../perf", version = "=1.11.9" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.11.9", default-features = false } -solana-sdk = { path = "../sdk", version = "=1.11.9" } +solana-perf = { path = "../perf", version = "=1.11.10" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.11.10", default-features = false } +solana-sdk = { path = "../sdk", version = "=1.11.10" } thiserror = "1.0.31" tiny-bip39 = "0.8.2" uriparse = "0.6.4" diff --git a/clap-v3-utils/Cargo.toml b/clap-v3-utils/Cargo.toml index f0ee9e1fca6513..4a4664d7a9bb58 100644 --- a/clap-v3-utils/Cargo.toml +++ b/clap-v3-utils/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-clap-v3-utils" -version = "1.11.9" +version = "1.11.10" description = "Solana utilities for the clap v3" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,9 +13,9 @@ edition = "2021" chrono = "0.4" clap = { version = "3.1.5", features = ["cargo"] } rpassword = "6.0" -solana-perf = { path = "../perf", version = "=1.11.9" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.11.9", default-features = false } -solana-sdk = { path = "../sdk", version = "=1.11.9" } +solana-perf = { path = "../perf", version = "=1.11.10" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.11.10", default-features = false } +solana-sdk = { path = "../sdk", version = "=1.11.10" } thiserror = "1.0.31" tiny-bip39 = "0.8.2" uriparse = "0.6.4" diff --git a/cli-config/Cargo.toml b/cli-config/Cargo.toml index dec40e6d39012d..a257abf24cd155 100644 --- a/cli-config/Cargo.toml +++ b/cli-config/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-cli-config" description = "Blockchain, Rebuilt for Scale" -version = "1.11.9" +version = "1.11.10" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -15,8 +15,8 @@ lazy_static = "1.4.0" serde = "1.0.138" serde_derive = "1.0.103" serde_yaml = "0.8.26" -solana-clap-utils = { path = "../clap-utils", version = "=1.11.9" } -solana-sdk = { path = "../sdk", version = "=1.11.9" } +solana-clap-utils = { path = "../clap-utils", version = "=1.11.10" } +solana-sdk = { path = "../sdk", version = "=1.11.10" } url = "2.2.2" [dev-dependencies] diff --git a/cli-output/Cargo.toml b/cli-output/Cargo.toml index 360ee8d223e5f9..a843074da112da 100644 --- a/cli-output/Cargo.toml +++ b/cli-output/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-cli-output" description = "Blockchain, Rebuilt for Scale" -version = "1.11.9" +version = "1.11.10" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -21,13 +21,13 @@ pretty-hex = "0.3.0" semver = "1.0.10" serde = "1.0.138" serde_json = "1.0.81" -solana-account-decoder = { path = "../account-decoder", version = "=1.11.9" } -solana-clap-utils = { path = "../clap-utils", version = "=1.11.9" } -solana-cli-config = { path = "../cli-config", version = "=1.11.9" } -solana-client = { path = "../client", version = "=1.11.9" } -solana-sdk = { path = "../sdk", version = "=1.11.9" } -solana-transaction-status = { path = "../transaction-status", version = "=1.11.9" } -solana-vote-program = { path = "../programs/vote", version = "=1.11.9" } +solana-account-decoder = { path = "../account-decoder", version = "=1.11.10" } +solana-clap-utils = { path = "../clap-utils", version = "=1.11.10" } +solana-cli-config = { path = "../cli-config", version = "=1.11.10" } +solana-client = { path = "../client", version = "=1.11.10" } +solana-sdk = { path = "../sdk", version = "=1.11.10" } +solana-transaction-status = { path = "../transaction-status", version = "=1.11.10" } +solana-vote-program = { path = "../programs/vote", version = "=1.11.10" } spl-memo = { version = "=3.0.1", features = ["no-entrypoint"] } [dev-dependencies] diff --git a/cli/Cargo.toml b/cli/Cargo.toml index 8782d0a3883118..39615f59126df6 100644 --- a/cli/Cargo.toml +++ b/cli/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-cli" description = "Blockchain, Rebuilt for Scale" -version = "1.11.9" +version = "1.11.10" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -27,29 +27,29 @@ semver = "1.0.10" serde = "1.0.138" serde_derive = "1.0.103" serde_json = "1.0.81" -solana-account-decoder = { path = "../account-decoder", version = "=1.11.9" } -solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.11.9" } -solana-clap-utils = { path = "../clap-utils", version = "=1.11.9" } -solana-cli-config = { path = "../cli-config", version = "=1.11.9" } -solana-cli-output = { path = "../cli-output", version = "=1.11.9" } -solana-client = { path = "../client", version = "=1.11.9" } -solana-config-program = { path = "../programs/config", version = "=1.11.9" } -solana-faucet = { path = "../faucet", version = "=1.11.9" } -solana-logger = { path = "../logger", version = "=1.11.9" } -solana-program-runtime = { path = "../program-runtime", version = "=1.11.9" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.11.9" } -solana-sdk = { path = "../sdk", version = "=1.11.9" } -solana-transaction-status = { path = "../transaction-status", version = "=1.11.9" } -solana-version = { path = "../version", version = "=1.11.9" } -solana-vote-program = { path = "../programs/vote", version = "=1.11.9" } +solana-account-decoder = { path = "../account-decoder", version = "=1.11.10" } +solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.11.10" } +solana-clap-utils = { path = "../clap-utils", version = "=1.11.10" } +solana-cli-config = { path = "../cli-config", version = "=1.11.10" } +solana-cli-output = { path = "../cli-output", version = "=1.11.10" } +solana-client = { path = "../client", version = "=1.11.10" } +solana-config-program = { path = "../programs/config", version = "=1.11.10" } +solana-faucet = { path = "../faucet", version = "=1.11.10" } +solana-logger = { path = "../logger", version = "=1.11.10" } +solana-program-runtime = { path = "../program-runtime", version = "=1.11.10" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.11.10" } +solana-sdk = { path = "../sdk", version = "=1.11.10" } +solana-transaction-status = { path = "../transaction-status", version = "=1.11.10" } +solana-version = { path = "../version", version = "=1.11.10" } +solana-vote-program = { path = "../programs/vote", version = "=1.11.10" } solana_rbpf = "=0.2.31" spl-memo = { version = "=3.0.1", features = ["no-entrypoint"] } thiserror = "1.0.31" tiny-bip39 = "0.8.2" [dev-dependencies] -solana-streamer = { path = "../streamer", version = "=1.11.9" } -solana-test-validator = { path = "../test-validator", version = "=1.11.9" } +solana-streamer = { path = "../streamer", version = "=1.11.10" } +solana-test-validator = { path = "../test-validator", version = "=1.11.10" } tempfile = "3.3.0" [[bin]] diff --git a/client-test/Cargo.toml b/client-test/Cargo.toml index 47ef654a119e22..5ccb0e52414ec9 100644 --- a/client-test/Cargo.toml +++ b/client-test/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-client-test" -version = "1.11.9" +version = "1.11.10" description = "Solana RPC Test" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,25 +14,25 @@ publish = false futures-util = "0.3.21" serde_json = "1.0.81" serial_test = "0.8.0" -solana-client = { path = "../client", version = "=1.11.9" } -solana-ledger = { path = "../ledger", version = "=1.11.9" } -solana-measure = { path = "../measure", version = "=1.11.9" } -solana-merkle-tree = { path = "../merkle-tree", version = "=1.11.9" } -solana-metrics = { path = "../metrics", version = "=1.11.9" } -solana-perf = { path = "../perf", version = "=1.11.9" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.11.9" } -solana-rpc = { path = "../rpc", version = "=1.11.9" } -solana-runtime = { path = "../runtime", version = "=1.11.9" } -solana-sdk = { path = "../sdk", version = "=1.11.9" } -solana-streamer = { path = "../streamer", version = "=1.11.9" } -solana-test-validator = { path = "../test-validator", version = "=1.11.9" } -solana-transaction-status = { path = "../transaction-status", version = "=1.11.9" } -solana-version = { path = "../version", version = "=1.11.9" } +solana-client = { path = "../client", version = "=1.11.10" } +solana-ledger = { path = "../ledger", version = "=1.11.10" } +solana-measure = { path = "../measure", version = "=1.11.10" } +solana-merkle-tree = { path = "../merkle-tree", version = "=1.11.10" } +solana-metrics = { path = "../metrics", version = "=1.11.10" } +solana-perf = { path = "../perf", version = "=1.11.10" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.11.10" } +solana-rpc = { path = "../rpc", version = "=1.11.10" } +solana-runtime = { path = "../runtime", version = "=1.11.10" } +solana-sdk = { path = "../sdk", version = "=1.11.10" } +solana-streamer = { path = "../streamer", version = "=1.11.10" } +solana-test-validator = { path = "../test-validator", version = "=1.11.10" } +solana-transaction-status = { path = "../transaction-status", version = "=1.11.10" } +solana-version = { path = "../version", version = "=1.11.10" } systemstat = "0.1.11" tokio = { version = "~1.14.1", features = ["full"] } [dev-dependencies] -solana-logger = { path = "../logger", version = "=1.11.9" } +solana-logger = { path = "../logger", version = "=1.11.10" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/client/Cargo.toml b/client/Cargo.toml index 544c54f10e3dd7..754b712248eed2 100644 --- a/client/Cargo.toml +++ b/client/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-client" -version = "1.11.9" +version = "1.11.10" description = "Solana Client" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -38,17 +38,17 @@ semver = "1.0.10" serde = "1.0.138" serde_derive = "1.0.103" serde_json = "1.0.81" -solana-account-decoder = { path = "../account-decoder", version = "=1.11.9" } -solana-clap-utils = { path = "../clap-utils", version = "=1.11.9" } -solana-faucet = { path = "../faucet", version = "=1.11.9" } -solana-measure = { path = "../measure", version = "=1.11.9" } -solana-metrics = { path = "../metrics", version = "=1.11.9" } -solana-net-utils = { path = "../net-utils", version = "=1.11.9" } -solana-sdk = { path = "../sdk", version = "=1.11.9" } -solana-streamer = { path = "../streamer", version = "=1.11.9" } -solana-transaction-status = { path = "../transaction-status", version = "=1.11.9" } -solana-version = { path = "../version", version = "=1.11.9" } -solana-vote-program = { path = "../programs/vote", version = "=1.11.9" } +solana-account-decoder = { path = "../account-decoder", version = "=1.11.10" } +solana-clap-utils = { path = "../clap-utils", version = "=1.11.10" } +solana-faucet = { path = "../faucet", version = "=1.11.10" } +solana-measure = { path = "../measure", version = "=1.11.10" } +solana-metrics = { path = "../metrics", version = "=1.11.10" } +solana-net-utils = { path = "../net-utils", version = "=1.11.10" } +solana-sdk = { path = "../sdk", version = "=1.11.10" } +solana-streamer = { path = "../streamer", version = "=1.11.10" } +solana-transaction-status = { path = "../transaction-status", version = "=1.11.10" } +solana-version = { path = "../version", version = "=1.11.10" } +solana-vote-program = { path = "../programs/vote", version = "=1.11.10" } spl-token-2022 = { version = "=0.4.2", features = ["no-entrypoint"] } thiserror = "1.0" tokio = { version = "1", features = ["full"] } @@ -61,8 +61,8 @@ url = "2.2.2" anyhow = "1.0.58" assert_matches = "1.5.0" jsonrpc-http-server = "18.0.0" -solana-logger = { path = "../logger", version = "=1.11.9" } -solana-perf = { path = "../perf", version = "=1.11.9" } +solana-logger = { path = "../logger", version = "=1.11.10" } +solana-perf = { path = "../perf", version = "=1.11.10" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/core/Cargo.toml b/core/Cargo.toml index f3b1d0a157a83e..843aa685ce6356 100644 --- a/core/Cargo.toml +++ b/core/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "solana-core" description = "Blockchain, Rebuilt for Scale" -version = "1.11.9" +version = "1.11.10" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-core" readme = "../README.md" @@ -35,30 +35,30 @@ rand_chacha = "0.2.2" rayon = "1.5.3" serde = "1.0.138" serde_derive = "1.0.103" -solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.11.9" } -solana-bloom = { path = "../bloom", version = "=1.11.9" } -solana-client = { path = "../client", version = "=1.11.9" } -solana-entry = { path = "../entry", version = "=1.11.9" } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.11.9" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.11.9" } -solana-geyser-plugin-manager = { path = "../geyser-plugin-manager", version = "=1.11.9" } -solana-gossip = { path = "../gossip", version = "=1.11.9" } -solana-ledger = { path = "../ledger", version = "=1.11.9" } -solana-measure = { path = "../measure", version = "=1.11.9" } -solana-metrics = { path = "../metrics", version = "=1.11.9" } -solana-net-utils = { path = "../net-utils", version = "=1.11.9" } -solana-perf = { path = "../perf", version = "=1.11.9" } -solana-poh = { path = "../poh", version = "=1.11.9" } -solana-program-runtime = { path = "../program-runtime", version = "=1.11.9" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.11.9" } -solana-rpc = { path = "../rpc", version = "=1.11.9" } -solana-runtime = { path = "../runtime", version = "=1.11.9" } -solana-sdk = { path = "../sdk", version = "=1.11.9" } -solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.11.9" } -solana-streamer = { path = "../streamer", version = "=1.11.9" } -solana-transaction-status = { path = "../transaction-status", version = "=1.11.9" } -solana-version = { path = "../version", version = "=1.11.9" } -solana-vote-program = { path = "../programs/vote", version = "=1.11.9" } +solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.11.10" } +solana-bloom = { path = "../bloom", version = "=1.11.10" } +solana-client = { path = "../client", version = "=1.11.10" } +solana-entry = { path = "../entry", version = "=1.11.10" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.11.10" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.11.10" } +solana-geyser-plugin-manager = { path = "../geyser-plugin-manager", version = "=1.11.10" } +solana-gossip = { path = "../gossip", version = "=1.11.10" } +solana-ledger = { path = "../ledger", version = "=1.11.10" } +solana-measure = { path = "../measure", version = "=1.11.10" } +solana-metrics = { path = "../metrics", version = "=1.11.10" } +solana-net-utils = { path = "../net-utils", version = "=1.11.10" } +solana-perf = { path = "../perf", version = "=1.11.10" } +solana-poh = { path = "../poh", version = "=1.11.10" } +solana-program-runtime = { path = "../program-runtime", version = "=1.11.10" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.11.10" } +solana-rpc = { path = "../rpc", version = "=1.11.10" } +solana-runtime = { path = "../runtime", version = "=1.11.10" } +solana-sdk = { path = "../sdk", version = "=1.11.10" } +solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.11.10" } +solana-streamer = { path = "../streamer", version = "=1.11.10" } +solana-transaction-status = { path = "../transaction-status", version = "=1.11.10" } +solana-version = { path = "../version", version = "=1.11.10" } +solana-vote-program = { path = "../programs/vote", version = "=1.11.10" } sys-info = "0.9.1" tempfile = "3.3.0" thiserror = "1.0" @@ -70,9 +70,9 @@ matches = "0.1.9" raptorq = "1.7.0" serde_json = "1.0.81" serial_test = "0.8.0" -solana-logger = { path = "../logger", version = "=1.11.9" } -solana-program-runtime = { path = "../program-runtime", version = "=1.11.9" } -solana-stake-program = { path = "../programs/stake", version = "=1.11.9" } +solana-logger = { path = "../logger", version = "=1.11.10" } +solana-program-runtime = { path = "../program-runtime", version = "=1.11.10" } +solana-stake-program = { path = "../programs/stake", version = "=1.11.10" } static_assertions = "1.1.0" systemstat = "0.1.11" test-case = "2.1.0" diff --git a/docs/src/developing/clients/jsonrpc-api.md b/docs/src/developing/clients/jsonrpc-api.md index 2629501fccc35c..14153bf7b0a733 100644 --- a/docs/src/developing/clients/jsonrpc-api.md +++ b/docs/src/developing/clients/jsonrpc-api.md @@ -1931,7 +1931,7 @@ Returns all accounts owned by the provided program Pubkey - `offset: ` - offset into program account data to start comparison - `bytes: ` - data to match, as encoded string - `encoding: ` - encoding for filter `bytes` data, either "base58" or "base64". Data is limited in size to 128 or fewer decoded bytes. - **NEW: This field, and base64 support generally, is only available in solana-core v1.11.9 or newer. Please omit when querying nodes on earlier versions** + **NEW: This field, and base64 support generally, is only available in solana-core v1.11.10 or newer. Please omit when querying nodes on earlier versions** - `dataSize: ` - compares the program account data length with the provided data size @@ -3150,7 +3150,7 @@ curl http://localhost:8899 -X POST -H "Content-Type: application/json" -d ' Result: ```json -{ "jsonrpc": "2.0", "result": { "solana-core": "1.11.9" }, "id": 1 } +{ "jsonrpc": "2.0", "result": { "solana-core": "1.11.10" }, "id": 1 } ``` ### getVoteAccounts diff --git a/dos/Cargo.toml b/dos/Cargo.toml index 674b4fcded1d57..5cce65904a61af 100644 --- a/dos/Cargo.toml +++ b/dos/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-dos" -version = "1.11.9" +version = "1.11.10" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -17,23 +17,23 @@ itertools = "0.10.3" log = "0.4.17" rand = "0.7.0" serde = "1.0.138" -solana-bench-tps = { path = "../bench-tps", version = "=1.11.9" } -solana-client = { path = "../client", version = "=1.11.9" } -solana-core = { path = "../core", version = "=1.11.9" } -solana-faucet = { path = "../faucet", version = "=1.11.9" } -solana-gossip = { path = "../gossip", version = "=1.11.9" } -solana-logger = { path = "../logger", version = "=1.11.9" } -solana-measure = { path = "../measure", version = "=1.11.9" } -solana-net-utils = { path = "../net-utils", version = "=1.11.9" } -solana-perf = { path = "../perf", version = "=1.11.9" } -solana-rpc = { path = "../rpc", version = "=1.11.9" } -solana-sdk = { path = "../sdk", version = "=1.11.9" } -solana-streamer = { path = "../streamer", version = "=1.11.9" } -solana-version = { path = "../version", version = "=1.11.9" } +solana-bench-tps = { path = "../bench-tps", version = "=1.11.10" } +solana-client = { path = "../client", version = "=1.11.10" } +solana-core = { path = "../core", version = "=1.11.10" } +solana-faucet = { path = "../faucet", version = "=1.11.10" } +solana-gossip = { path = "../gossip", version = "=1.11.10" } +solana-logger = { path = "../logger", version = "=1.11.10" } +solana-measure = { path = "../measure", version = "=1.11.10" } +solana-net-utils = { path = "../net-utils", version = "=1.11.10" } +solana-perf = { path = "../perf", version = "=1.11.10" } +solana-rpc = { path = "../rpc", version = "=1.11.10" } +solana-sdk = { path = "../sdk", version = "=1.11.10" } +solana-streamer = { path = "../streamer", version = "=1.11.10" } +solana-version = { path = "../version", version = "=1.11.10" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] [dev-dependencies] serial_test = "0.8.0" -solana-local-cluster = { path = "../local-cluster", version = "=1.11.9" } +solana-local-cluster = { path = "../local-cluster", version = "=1.11.10" } diff --git a/download-utils/Cargo.toml b/download-utils/Cargo.toml index 6d84f75d5c529f..71f6b534610671 100644 --- a/download-utils/Cargo.toml +++ b/download-utils/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-download-utils" -version = "1.11.9" +version = "1.11.10" description = "Solana Download Utils" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,8 +14,8 @@ console = "0.15.0" indicatif = "0.16.2" log = "0.4.17" reqwest = { version = "0.11.11", default-features = false, features = ["blocking", "brotli", "deflate", "gzip", "rustls-tls", "json"] } -solana-runtime = { path = "../runtime", version = "=1.11.9" } -solana-sdk = { path = "../sdk", version = "=1.11.9" } +solana-runtime = { path = "../runtime", version = "=1.11.10" } +solana-sdk = { path = "../sdk", version = "=1.11.10" } [lib] crate-type = ["lib"] diff --git a/entry/Cargo.toml b/entry/Cargo.toml index 90330b3b6ebca7..ad07831acf3baf 100644 --- a/entry/Cargo.toml +++ b/entry/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-entry" -version = "1.11.9" +version = "1.11.10" description = "Solana Entry" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -19,16 +19,16 @@ log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" serde = "1.0.138" -solana-measure = { path = "../measure", version = "=1.11.9" } -solana-merkle-tree = { path = "../merkle-tree", version = "=1.11.9" } -solana-metrics = { path = "../metrics", version = "=1.11.9" } -solana-perf = { path = "../perf", version = "=1.11.9" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.11.9" } -solana-sdk = { path = "../sdk", version = "=1.11.9" } +solana-measure = { path = "../measure", version = "=1.11.10" } +solana-merkle-tree = { path = "../merkle-tree", version = "=1.11.10" } +solana-metrics = { path = "../metrics", version = "=1.11.10" } +solana-perf = { path = "../perf", version = "=1.11.10" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.11.10" } +solana-sdk = { path = "../sdk", version = "=1.11.10" } [dev-dependencies] matches = "0.1.9" -solana-logger = { path = "../logger", version = "=1.11.9" } +solana-logger = { path = "../logger", version = "=1.11.10" } [lib] crate-type = ["lib"] diff --git a/faucet/Cargo.toml b/faucet/Cargo.toml index 027173b0cbf585..5816e193554da1 100644 --- a/faucet/Cargo.toml +++ b/faucet/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-faucet" -version = "1.11.9" +version = "1.11.10" description = "Solana Faucet" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -17,12 +17,12 @@ crossbeam-channel = "0.5" log = "0.4.17" serde = "1.0.138" serde_derive = "1.0.103" -solana-clap-utils = { path = "../clap-utils", version = "=1.11.9" } -solana-cli-config = { path = "../cli-config", version = "=1.11.9" } -solana-logger = { path = "../logger", version = "=1.11.9" } -solana-metrics = { path = "../metrics", version = "=1.11.9" } -solana-sdk = { path = "../sdk", version = "=1.11.9" } -solana-version = { path = "../version", version = "=1.11.9" } +solana-clap-utils = { path = "../clap-utils", version = "=1.11.10" } +solana-cli-config = { path = "../cli-config", version = "=1.11.10" } +solana-logger = { path = "../logger", version = "=1.11.10" } +solana-metrics = { path = "../metrics", version = "=1.11.10" } +solana-sdk = { path = "../sdk", version = "=1.11.10" } +solana-version = { path = "../version", version = "=1.11.10" } spl-memo = { version = "=3.0.1", features = ["no-entrypoint"] } thiserror = "1.0" tokio = { version = "1", features = ["full"] } diff --git a/frozen-abi/Cargo.toml b/frozen-abi/Cargo.toml index ceb27b4c0fed2f..93c44e9827a8ae 100644 --- a/frozen-abi/Cargo.toml +++ b/frozen-abi/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-frozen-abi" -version = "1.11.9" +version = "1.11.10" description = "Solana Frozen ABI" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -20,7 +20,7 @@ serde_bytes = "0.11" serde_derive = "1.0" serde_json = "1.0" sha2 = "0.10.2" -solana-frozen-abi-macro = { path = "macro", version = "=1.11.9" } +solana-frozen-abi-macro = { path = "macro", version = "=1.11.10" } thiserror = "1.0" [target.'cfg(not(target_os = "solana"))'.dependencies] @@ -43,7 +43,7 @@ rand_core = { version = "0.6.3", features = ["alloc", "getrandom", "std"] } subtle = { version = "2.4.1", features = ["default", "i128", "std"] } [target.'cfg(not(target_os = "solana"))'.dev-dependencies] -solana-logger = { path = "../logger", version = "=1.11.9" } +solana-logger = { path = "../logger", version = "=1.11.10" } [build-dependencies] rustc_version = "0.4" diff --git a/frozen-abi/macro/Cargo.toml b/frozen-abi/macro/Cargo.toml index 77b603d1f03579..d01b82c17f71cd 100644 --- a/frozen-abi/macro/Cargo.toml +++ b/frozen-abi/macro/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-frozen-abi-macro" -version = "1.11.9" +version = "1.11.10" description = "Solana Frozen ABI Macro" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/genesis-utils/Cargo.toml b/genesis-utils/Cargo.toml index eb25f2bb08a9be..25c739792db2bf 100644 --- a/genesis-utils/Cargo.toml +++ b/genesis-utils/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-genesis-utils" -version = "1.11.9" +version = "1.11.10" description = "Solana Genesis Utils" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,9 +10,9 @@ documentation = "https://docs.rs/solana-download-utils" edition = "2021" [dependencies] -solana-download-utils = { path = "../download-utils", version = "=1.11.9" } -solana-runtime = { path = "../runtime", version = "=1.11.9" } -solana-sdk = { path = "../sdk", version = "=1.11.9" } +solana-download-utils = { path = "../download-utils", version = "=1.11.10" } +solana-runtime = { path = "../runtime", version = "=1.11.10" } +solana-sdk = { path = "../sdk", version = "=1.11.10" } [lib] crate-type = ["lib"] diff --git a/genesis/Cargo.toml b/genesis/Cargo.toml index e9712936f6b2b0..d0a8126291d7b0 100644 --- a/genesis/Cargo.toml +++ b/genesis/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-genesis" description = "Blockchain, Rebuilt for Scale" -version = "1.11.9" +version = "1.11.10" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -15,16 +15,16 @@ clap = "2.33.1" serde = "1.0.138" serde_json = "1.0.81" serde_yaml = "0.8.26" -solana-clap-utils = { path = "../clap-utils", version = "=1.11.9" } -solana-cli-config = { path = "../cli-config", version = "=1.11.9" } -solana-entry = { path = "../entry", version = "=1.11.9" } -solana-ledger = { path = "../ledger", version = "=1.11.9" } -solana-logger = { path = "../logger", version = "=1.11.9" } -solana-runtime = { path = "../runtime", version = "=1.11.9" } -solana-sdk = { path = "../sdk", version = "=1.11.9" } -solana-stake-program = { path = "../programs/stake", version = "=1.11.9" } -solana-version = { path = "../version", version = "=1.11.9" } -solana-vote-program = { path = "../programs/vote", version = "=1.11.9" } +solana-clap-utils = { path = "../clap-utils", version = "=1.11.10" } +solana-cli-config = { path = "../cli-config", version = "=1.11.10" } +solana-entry = { path = "../entry", version = "=1.11.10" } +solana-ledger = { path = "../ledger", version = "=1.11.10" } +solana-logger = { path = "../logger", version = "=1.11.10" } +solana-runtime = { path = "../runtime", version = "=1.11.10" } +solana-sdk = { path = "../sdk", version = "=1.11.10" } +solana-stake-program = { path = "../programs/stake", version = "=1.11.10" } +solana-version = { path = "../version", version = "=1.11.10" } +solana-vote-program = { path = "../programs/vote", version = "=1.11.10" } tempfile = "3.3.0" [[bin]] diff --git a/geyser-plugin-interface/Cargo.toml b/geyser-plugin-interface/Cargo.toml index 6532dcc8028fcc..905497a8c3e5fa 100644 --- a/geyser-plugin-interface/Cargo.toml +++ b/geyser-plugin-interface/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-geyser-plugin-interface" description = "The Solana Geyser plugin interface." -version = "1.11.9" +version = "1.11.10" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -11,8 +11,8 @@ documentation = "https://docs.rs/solana-geyser-plugin-interface" [dependencies] log = "0.4.17" -solana-sdk = { path = "../sdk", version = "=1.11.9" } -solana-transaction-status = { path = "../transaction-status", version = "=1.11.9" } +solana-sdk = { path = "../sdk", version = "=1.11.10" } +solana-transaction-status = { path = "../transaction-status", version = "=1.11.10" } thiserror = "1.0.31" [package.metadata.docs.rs] diff --git a/geyser-plugin-manager/Cargo.toml b/geyser-plugin-manager/Cargo.toml index ae27d42a3b0beb..f34249d15dfd65 100644 --- a/geyser-plugin-manager/Cargo.toml +++ b/geyser-plugin-manager/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-geyser-plugin-manager" description = "The Solana Geyser plugin manager." -version = "1.11.9" +version = "1.11.10" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -16,13 +16,13 @@ json5 = "0.4.1" libloading = "0.7.3" log = "0.4.17" serde_json = "1.0.81" -solana-geyser-plugin-interface = { path = "../geyser-plugin-interface", version = "=1.11.9" } -solana-measure = { path = "../measure", version = "=1.11.9" } -solana-metrics = { path = "../metrics", version = "=1.11.9" } -solana-rpc = { path = "../rpc", version = "=1.11.9" } -solana-runtime = { path = "../runtime", version = "=1.11.9" } -solana-sdk = { path = "../sdk", version = "=1.11.9" } -solana-transaction-status = { path = "../transaction-status", version = "=1.11.9" } +solana-geyser-plugin-interface = { path = "../geyser-plugin-interface", version = "=1.11.10" } +solana-measure = { path = "../measure", version = "=1.11.10" } +solana-metrics = { path = "../metrics", version = "=1.11.10" } +solana-rpc = { path = "../rpc", version = "=1.11.10" } +solana-runtime = { path = "../runtime", version = "=1.11.10" } +solana-sdk = { path = "../sdk", version = "=1.11.10" } +solana-transaction-status = { path = "../transaction-status", version = "=1.11.10" } thiserror = "1.0.31" [package.metadata.docs.rs] diff --git a/gossip/Cargo.toml b/gossip/Cargo.toml index 3a993c732b8aa7..5b9ac02aa80d19 100644 --- a/gossip/Cargo.toml +++ b/gossip/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-gossip" description = "Blockchain, Rebuilt for Scale" -version = "1.11.9" +version = "1.11.10" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -27,24 +27,24 @@ rayon = "1.5.3" serde = "1.0.138" serde_bytes = "0.11" serde_derive = "1.0.103" -solana-bloom = { path = "../bloom", version = "=1.11.9" } -solana-clap-utils = { path = "../clap-utils", version = "=1.11.9" } -solana-client = { path = "../client", version = "=1.11.9" } -solana-entry = { path = "../entry", version = "=1.11.9" } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.11.9" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.11.9" } -solana-ledger = { path = "../ledger", version = "=1.11.9" } -solana-logger = { path = "../logger", version = "=1.11.9" } -solana-measure = { path = "../measure", version = "=1.11.9" } -solana-metrics = { path = "../metrics", version = "=1.11.9" } -solana-net-utils = { path = "../net-utils", version = "=1.11.9" } -solana-perf = { path = "../perf", version = "=1.11.9" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.11.9" } -solana-runtime = { path = "../runtime", version = "=1.11.9" } -solana-sdk = { path = "../sdk", version = "=1.11.9" } -solana-streamer = { path = "../streamer", version = "=1.11.9" } -solana-version = { path = "../version", version = "=1.11.9" } -solana-vote-program = { path = "../programs/vote", version = "=1.11.9" } +solana-bloom = { path = "../bloom", version = "=1.11.10" } +solana-clap-utils = { path = "../clap-utils", version = "=1.11.10" } +solana-client = { path = "../client", version = "=1.11.10" } +solana-entry = { path = "../entry", version = "=1.11.10" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.11.10" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.11.10" } +solana-ledger = { path = "../ledger", version = "=1.11.10" } +solana-logger = { path = "../logger", version = "=1.11.10" } +solana-measure = { path = "../measure", version = "=1.11.10" } +solana-metrics = { path = "../metrics", version = "=1.11.10" } +solana-net-utils = { path = "../net-utils", version = "=1.11.10" } +solana-perf = { path = "../perf", version = "=1.11.10" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.11.10" } +solana-runtime = { path = "../runtime", version = "=1.11.10" } +solana-sdk = { path = "../sdk", version = "=1.11.10" } +solana-streamer = { path = "../streamer", version = "=1.11.10" } +solana-version = { path = "../version", version = "=1.11.10" } +solana-vote-program = { path = "../programs/vote", version = "=1.11.10" } thiserror = "1.0" [dev-dependencies] diff --git a/install/Cargo.toml b/install/Cargo.toml index 539ca976af8729..c18f3aebe417e7 100644 --- a/install/Cargo.toml +++ b/install/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-install" description = "The solana cluster software installer" -version = "1.11.9" +version = "1.11.10" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -26,12 +26,12 @@ reqwest = { version = "0.11.11", default-features = false, features = ["blocking semver = "1.0.10" serde = { version = "1.0.138", features = ["derive"] } serde_yaml = "0.8.26" -solana-clap-utils = { path = "../clap-utils", version = "=1.11.9" } -solana-client = { path = "../client", version = "=1.11.9" } -solana-config-program = { path = "../programs/config", version = "=1.11.9" } -solana-logger = { path = "../logger", version = "=1.11.9" } -solana-sdk = { path = "../sdk", version = "=1.11.9" } -solana-version = { path = "../version", version = "=1.11.9" } +solana-clap-utils = { path = "../clap-utils", version = "=1.11.10" } +solana-client = { path = "../client", version = "=1.11.10" } +solana-config-program = { path = "../programs/config", version = "=1.11.10" } +solana-logger = { path = "../logger", version = "=1.11.10" } +solana-sdk = { path = "../sdk", version = "=1.11.10" } +solana-version = { path = "../version", version = "=1.11.10" } tar = "0.4.38" tempfile = "3.3.0" url = "2.2.2" diff --git a/keygen/Cargo.toml b/keygen/Cargo.toml index 785b696cd891e8..3351fb27b074b3 100644 --- a/keygen/Cargo.toml +++ b/keygen/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-keygen" -version = "1.11.9" +version = "1.11.10" description = "Solana key generation utility" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,11 +14,11 @@ bs58 = "0.4.0" clap = { version = "3.1.5", features = ["cargo"] } dirs-next = "2.0.0" num_cpus = "1.13.1" -solana-clap-v3-utils = { path = "../clap-v3-utils", version = "=1.11.9" } -solana-cli-config = { path = "../cli-config", version = "=1.11.9" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.11.9" } -solana-sdk = { path = "../sdk", version = "=1.11.9" } -solana-version = { path = "../version", version = "=1.11.9" } +solana-clap-v3-utils = { path = "../clap-v3-utils", version = "=1.11.10" } +solana-cli-config = { path = "../cli-config", version = "=1.11.10" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.11.10" } +solana-sdk = { path = "../sdk", version = "=1.11.10" } +solana-version = { path = "../version", version = "=1.11.10" } tiny-bip39 = "0.8.2" [[bin]] diff --git a/ledger-tool/Cargo.toml b/ledger-tool/Cargo.toml index 03926f94de050d..e1133a850b85a8 100644 --- a/ledger-tool/Cargo.toml +++ b/ledger-tool/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-ledger-tool" description = "Blockchain, Rebuilt for Scale" -version = "1.11.9" +version = "1.11.10" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -22,20 +22,20 @@ log = { version = "0.4.17" } regex = "1" serde = { version = "1.0", features = ["derive"] } serde_json = "1.0.81" -solana-clap-utils = { path = "../clap-utils", version = "=1.11.9" } -solana-cli-output = { path = "../cli-output", version = "=1.11.9" } -solana-core = { path = "../core", version = "=1.11.9" } -solana-entry = { path = "../entry", version = "=1.11.9" } -solana-ledger = { path = "../ledger", version = "=1.11.9" } -solana-logger = { path = "../logger", version = "=1.11.9" } -solana-measure = { path = "../measure", version = "=1.11.9" } -solana-runtime = { path = "../runtime", version = "=1.11.9" } -solana-sdk = { path = "../sdk", version = "=1.11.9" } -solana-stake-program = { path = "../programs/stake", version = "=1.11.9" } -solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.11.9" } -solana-transaction-status = { path = "../transaction-status", version = "=1.11.9" } -solana-version = { path = "../version", version = "=1.11.9" } -solana-vote-program = { path = "../programs/vote", version = "=1.11.9" } +solana-clap-utils = { path = "../clap-utils", version = "=1.11.10" } +solana-cli-output = { path = "../cli-output", version = "=1.11.10" } +solana-core = { path = "../core", version = "=1.11.10" } +solana-entry = { path = "../entry", version = "=1.11.10" } +solana-ledger = { path = "../ledger", version = "=1.11.10" } +solana-logger = { path = "../logger", version = "=1.11.10" } +solana-measure = { path = "../measure", version = "=1.11.10" } +solana-runtime = { path = "../runtime", version = "=1.11.10" } +solana-sdk = { path = "../sdk", version = "=1.11.10" } +solana-stake-program = { path = "../programs/stake", version = "=1.11.10" } +solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.11.10" } +solana-transaction-status = { path = "../transaction-status", version = "=1.11.10" } +solana-version = { path = "../version", version = "=1.11.10" } +solana-vote-program = { path = "../programs/vote", version = "=1.11.10" } tokio = { version = "1", features = ["full"] } [target.'cfg(not(target_env = "msvc"))'.dependencies] diff --git a/ledger/Cargo.toml b/ledger/Cargo.toml index 2329558f10707e..83e1834afc5ed1 100644 --- a/ledger/Cargo.toml +++ b/ledger/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-ledger" -version = "1.11.9" +version = "1.11.10" description = "Solana ledger" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -34,23 +34,23 @@ reed-solomon-erasure = { version = "5.0.3", features = ["simd-accel"] } serde = "1.0.138" serde_bytes = "0.11.6" sha2 = "0.10.2" -solana-account-decoder = { path = "../account-decoder", version = "=1.11.9" } -solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.11.9" } -solana-entry = { path = "../entry", version = "=1.11.9" } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.11.9" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.11.9" } -solana-measure = { path = "../measure", version = "=1.11.9" } -solana-metrics = { path = "../metrics", version = "=1.11.9" } -solana-perf = { path = "../perf", version = "=1.11.9" } -solana-program-runtime = { path = "../program-runtime", version = "=1.11.9" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.11.9" } -solana-runtime = { path = "../runtime", version = "=1.11.9" } -solana-sdk = { path = "../sdk", version = "=1.11.9" } -solana-stake-program = { path = "../programs/stake", version = "=1.11.9" } -solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.11.9" } -solana-storage-proto = { path = "../storage-proto", version = "=1.11.9" } -solana-transaction-status = { path = "../transaction-status", version = "=1.11.9" } -solana-vote-program = { path = "../programs/vote", version = "=1.11.9" } +solana-account-decoder = { path = "../account-decoder", version = "=1.11.10" } +solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.11.10" } +solana-entry = { path = "../entry", version = "=1.11.10" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.11.10" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.11.10" } +solana-measure = { path = "../measure", version = "=1.11.10" } +solana-metrics = { path = "../metrics", version = "=1.11.10" } +solana-perf = { path = "../perf", version = "=1.11.10" } +solana-program-runtime = { path = "../program-runtime", version = "=1.11.10" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.11.10" } +solana-runtime = { path = "../runtime", version = "=1.11.10" } +solana-sdk = { path = "../sdk", version = "=1.11.10" } +solana-stake-program = { path = "../programs/stake", version = "=1.11.10" } +solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.11.10" } +solana-storage-proto = { path = "../storage-proto", version = "=1.11.10" } +solana-transaction-status = { path = "../transaction-status", version = "=1.11.10" } +solana-vote-program = { path = "../programs/vote", version = "=1.11.10" } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } spl-token-2022 = { version = "=0.4.2", features = ["no-entrypoint"] } static_assertions = "1.1.0" @@ -71,8 +71,8 @@ features = ["lz4"] assert_matches = "1.5.0" bs58 = "0.4.0" matches = "0.1.9" -solana-account-decoder = { path = "../account-decoder", version = "=1.11.9" } -solana-logger = { path = "../logger", version = "=1.11.9" } +solana-account-decoder = { path = "../account-decoder", version = "=1.11.10" } +solana-logger = { path = "../logger", version = "=1.11.10" } test-case = "2.1.0" [build-dependencies] diff --git a/local-cluster/Cargo.toml b/local-cluster/Cargo.toml index 1f8ed94dd8971b..bb1ea3e9bc930c 100644 --- a/local-cluster/Cargo.toml +++ b/local-cluster/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-local-cluster" description = "Blockchain, Rebuilt for Scale" -version = "1.11.9" +version = "1.11.10" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -16,25 +16,25 @@ itertools = "0.10.3" log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" -solana-client = { path = "../client", version = "=1.11.9" } -solana-config-program = { path = "../programs/config", version = "=1.11.9" } -solana-core = { path = "../core", version = "=1.11.9" } -solana-entry = { path = "../entry", version = "=1.11.9" } -solana-gossip = { path = "../gossip", version = "=1.11.9" } -solana-ledger = { path = "../ledger", version = "=1.11.9" } -solana-runtime = { path = "../runtime", version = "=1.11.9" } -solana-sdk = { path = "../sdk", version = "=1.11.9" } -solana-stake-program = { path = "../programs/stake", version = "=1.11.9" } -solana-streamer = { path = "../streamer", version = "=1.11.9" } -solana-vote-program = { path = "../programs/vote", version = "=1.11.9" } +solana-client = { path = "../client", version = "=1.11.10" } +solana-config-program = { path = "../programs/config", version = "=1.11.10" } +solana-core = { path = "../core", version = "=1.11.10" } +solana-entry = { path = "../entry", version = "=1.11.10" } +solana-gossip = { path = "../gossip", version = "=1.11.10" } +solana-ledger = { path = "../ledger", version = "=1.11.10" } +solana-runtime = { path = "../runtime", version = "=1.11.10" } +solana-sdk = { path = "../sdk", version = "=1.11.10" } +solana-stake-program = { path = "../programs/stake", version = "=1.11.10" } +solana-streamer = { path = "../streamer", version = "=1.11.10" } +solana-vote-program = { path = "../programs/vote", version = "=1.11.10" } tempfile = "3.3.0" [dev-dependencies] assert_matches = "1.5.0" gag = "1.0.0" serial_test = "0.8.0" -solana-download-utils = { path = "../download-utils", version = "=1.11.9" } -solana-logger = { path = "../logger", version = "=1.11.9" } +solana-download-utils = { path = "../download-utils", version = "=1.11.10" } +solana-logger = { path = "../logger", version = "=1.11.10" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/log-analyzer/Cargo.toml b/log-analyzer/Cargo.toml index ea2fe6a5b86663..9f1117dd43ddd4 100644 --- a/log-analyzer/Cargo.toml +++ b/log-analyzer/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-log-analyzer" description = "The solana cluster network analysis tool" -version = "1.11.9" +version = "1.11.10" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,8 +14,8 @@ byte-unit = "4.0.14" clap = { version = "3.1.5", features = ["cargo"] } serde = "1.0.138" serde_json = "1.0.81" -solana-logger = { path = "../logger", version = "=1.11.9" } -solana-version = { path = "../version", version = "=1.11.9" } +solana-logger = { path = "../logger", version = "=1.11.10" } +solana-version = { path = "../version", version = "=1.11.10" } [[bin]] name = "solana-log-analyzer" diff --git a/logger/Cargo.toml b/logger/Cargo.toml index 48fd2551958768..8b9dfc63489048 100644 --- a/logger/Cargo.toml +++ b/logger/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-logger" -version = "1.11.9" +version = "1.11.10" description = "Solana Logger" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/measure/Cargo.toml b/measure/Cargo.toml index e185be56f614e6..3aa4bf9f958003 100644 --- a/measure/Cargo.toml +++ b/measure/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "solana-measure" description = "Blockchain, Rebuilt for Scale" -version = "1.11.9" +version = "1.11.10" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-measure" readme = "../README.md" @@ -12,7 +12,7 @@ edition = "2021" [dependencies] log = "0.4.17" -solana-sdk = { path = "../sdk", version = "=1.11.9" } +solana-sdk = { path = "../sdk", version = "=1.11.10" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/merkle-root-bench/Cargo.toml b/merkle-root-bench/Cargo.toml index 04e9e5f07af6f4..727daeb025766d 100644 --- a/merkle-root-bench/Cargo.toml +++ b/merkle-root-bench/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-merkle-root-bench" -version = "1.11.9" +version = "1.11.10" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -11,11 +11,11 @@ publish = false [dependencies] clap = "2.33.1" log = "0.4.17" -solana-logger = { path = "../logger", version = "=1.11.9" } -solana-measure = { path = "../measure", version = "=1.11.9" } -solana-runtime = { path = "../runtime", version = "=1.11.9" } -solana-sdk = { path = "../sdk", version = "=1.11.9" } -solana-version = { path = "../version", version = "=1.11.9" } +solana-logger = { path = "../logger", version = "=1.11.10" } +solana-measure = { path = "../measure", version = "=1.11.10" } +solana-runtime = { path = "../runtime", version = "=1.11.10" } +solana-sdk = { path = "../sdk", version = "=1.11.10" } +solana-version = { path = "../version", version = "=1.11.10" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/merkle-tree/Cargo.toml b/merkle-tree/Cargo.toml index 5282fa97cfd018..a0b72caf2a1211 100644 --- a/merkle-tree/Cargo.toml +++ b/merkle-tree/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-merkle-tree" -version = "1.11.9" +version = "1.11.10" description = "Solana Merkle Tree" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -11,7 +11,7 @@ edition = "2021" [dependencies] fast-math = "0.1" -solana-program = { path = "../sdk/program", version = "=1.11.9" } +solana-program = { path = "../sdk/program", version = "=1.11.10" } # This can go once the BPF toolchain target Rust 1.42.0+ [target.bpfel-unknown-unknown.dependencies] diff --git a/metrics/Cargo.toml b/metrics/Cargo.toml index 4c8119b3b9b151..ec5904737dbc2b 100644 --- a/metrics/Cargo.toml +++ b/metrics/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-metrics" -version = "1.11.9" +version = "1.11.10" description = "Solana Metrics" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -15,7 +15,7 @@ gethostname = "0.2.3" lazy_static = "1.4.0" log = "0.4.17" reqwest = { version = "0.11.11", default-features = false, features = ["blocking", "brotli", "deflate", "gzip", "rustls-tls", "json"] } -solana-sdk = { path = "../sdk", version = "=1.11.9" } +solana-sdk = { path = "../sdk", version = "=1.11.10" } [dev-dependencies] env_logger = "0.9.0" diff --git a/net-shaper/Cargo.toml b/net-shaper/Cargo.toml index 28c457c31fc2b8..7ea6de41421cc5 100644 --- a/net-shaper/Cargo.toml +++ b/net-shaper/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-net-shaper" description = "The solana cluster network shaping tool" -version = "1.11.9" +version = "1.11.10" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,7 +14,7 @@ clap = { version = "3.1.5", features = ["cargo"] } rand = "0.7.0" serde = { version = "1.0.138", features = ["derive"] } serde_json = "1.0.81" -solana-logger = { path = "../logger", version = "=1.11.9" } +solana-logger = { path = "../logger", version = "=1.11.10" } [[bin]] name = "solana-net-shaper" diff --git a/net-utils/Cargo.toml b/net-utils/Cargo.toml index fd11703f1b7dec..e1b4b13b2bd88e 100644 --- a/net-utils/Cargo.toml +++ b/net-utils/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-net-utils" -version = "1.11.9" +version = "1.11.10" description = "Solana Network Utilities" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -19,9 +19,9 @@ rand = "0.7.0" serde = "1.0.138" serde_derive = "1.0.103" socket2 = "0.4.4" -solana-logger = { path = "../logger", version = "=1.11.9" } -solana-sdk = { path = "../sdk", version = "=1.11.9" } -solana-version = { path = "../version", version = "=1.11.9" } +solana-logger = { path = "../logger", version = "=1.11.10" } +solana-sdk = { path = "../sdk", version = "=1.11.10" } +solana-version = { path = "../version", version = "=1.11.10" } tokio = { version = "1", features = ["full"] } url = "2.2.2" diff --git a/notifier/Cargo.toml b/notifier/Cargo.toml index 8176b3b1c502f2..34714970cb2125 100644 --- a/notifier/Cargo.toml +++ b/notifier/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-notifier" -version = "1.11.9" +version = "1.11.10" description = "Solana Notifier" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/perf/Cargo.toml b/perf/Cargo.toml index 80e99f31b5948a..d83770e5496b63 100644 --- a/perf/Cargo.toml +++ b/perf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-perf" -version = "1.11.9" +version = "1.11.10" description = "Solana Performance APIs" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -22,10 +22,10 @@ log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" serde = "1.0.138" -solana-metrics = { path = "../metrics", version = "=1.11.9" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.11.9" } -solana-sdk = { path = "../sdk", version = "=1.11.9" } -solana-vote-program = { path = "../programs/vote", version = "=1.11.9" } +solana-metrics = { path = "../metrics", version = "=1.11.10" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.11.10" } +solana-sdk = { path = "../sdk", version = "=1.11.10" } +solana-vote-program = { path = "../programs/vote", version = "=1.11.10" } [target."cfg(target_os = \"linux\")".dependencies] caps = "0.5.3" @@ -37,7 +37,7 @@ name = "solana_perf" [dev-dependencies] matches = "0.1.9" -solana-logger = { path = "../logger", version = "=1.11.9" } +solana-logger = { path = "../logger", version = "=1.11.10" } [[bench]] name = "sigverify" diff --git a/poh-bench/Cargo.toml b/poh-bench/Cargo.toml index 0844da1e0bccf9..43f7d2c614370f 100644 --- a/poh-bench/Cargo.toml +++ b/poh-bench/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-poh-bench" -version = "1.11.9" +version = "1.11.10" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,12 +14,12 @@ clap = { version = "3.1.5", features = ["cargo"] } log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" -solana-entry = { path = "../entry", version = "=1.11.9" } -solana-logger = { path = "../logger", version = "=1.11.9" } -solana-measure = { path = "../measure", version = "=1.11.9" } -solana-perf = { path = "../perf", version = "=1.11.9" } -solana-sdk = { path = "../sdk", version = "=1.11.9" } -solana-version = { path = "../version", version = "=1.11.9" } +solana-entry = { path = "../entry", version = "=1.11.10" } +solana-logger = { path = "../logger", version = "=1.11.10" } +solana-measure = { path = "../measure", version = "=1.11.10" } +solana-perf = { path = "../perf", version = "=1.11.10" } +solana-sdk = { path = "../sdk", version = "=1.11.10" } +solana-version = { path = "../version", version = "=1.11.10" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/poh/Cargo.toml b/poh/Cargo.toml index e3e8e556d0393e..d4f29cfeea23e3 100644 --- a/poh/Cargo.toml +++ b/poh/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-poh" -version = "1.11.9" +version = "1.11.10" description = "Solana PoH" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,21 +13,21 @@ edition = "2021" core_affinity = "0.5.10" crossbeam-channel = "0.5" log = "0.4.17" -solana-entry = { path = "../entry", version = "=1.11.9" } -solana-ledger = { path = "../ledger", version = "=1.11.9" } -solana-measure = { path = "../measure", version = "=1.11.9" } -solana-metrics = { path = "../metrics", version = "=1.11.9" } -solana-runtime = { path = "../runtime", version = "=1.11.9" } -solana-sdk = { path = "../sdk", version = "=1.11.9" } -solana-sys-tuner = { path = "../sys-tuner", version = "=1.11.9" } +solana-entry = { path = "../entry", version = "=1.11.10" } +solana-ledger = { path = "../ledger", version = "=1.11.10" } +solana-measure = { path = "../measure", version = "=1.11.10" } +solana-metrics = { path = "../metrics", version = "=1.11.10" } +solana-runtime = { path = "../runtime", version = "=1.11.10" } +solana-sdk = { path = "../sdk", version = "=1.11.10" } +solana-sys-tuner = { path = "../sys-tuner", version = "=1.11.10" } thiserror = "1.0" [dev-dependencies] bincode = "1.3.3" matches = "0.1.9" rand = "0.7.0" -solana-logger = { path = "../logger", version = "=1.11.9" } -solana-perf = { path = "../perf", version = "=1.11.9" } +solana-logger = { path = "../logger", version = "=1.11.10" } +solana-perf = { path = "../perf", version = "=1.11.10" } [lib] crate-type = ["lib"] diff --git a/program-runtime/Cargo.toml b/program-runtime/Cargo.toml index 3ef89d6cdeed0a..731b9a1b78995d 100644 --- a/program-runtime/Cargo.toml +++ b/program-runtime/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-program-runtime" -version = "1.11.9" +version = "1.11.10" description = "Solana program runtime" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -20,16 +20,16 @@ log = "0.4.14" num-derive = { version = "0.3" } num-traits = { version = "0.2" } serde = { version = "1.0.129", features = ["derive", "rc"] } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.11.9" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.11.9" } -solana-measure = { path = "../measure", version = "=1.11.9" } -solana-metrics = { path = "../metrics", version = "=1.11.9" } -solana-sdk = { path = "../sdk", version = "=1.11.9" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.11.10" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.11.10" } +solana-measure = { path = "../measure", version = "=1.11.10" } +solana-metrics = { path = "../metrics", version = "=1.11.10" } +solana-sdk = { path = "../sdk", version = "=1.11.10" } thiserror = "1.0" enum-iterator = "0.8.1" [dev-dependencies] -solana-logger = { path = "../logger", version = "=1.11.9" } +solana-logger = { path = "../logger", version = "=1.11.10" } [lib] crate-type = ["lib"] diff --git a/program-test/Cargo.toml b/program-test/Cargo.toml index 746d1ce8bc2042..b6f788ace9a18f 100644 --- a/program-test/Cargo.toml +++ b/program-test/Cargo.toml @@ -5,7 +5,7 @@ edition = "2021" license = "Apache-2.0" name = "solana-program-test" repository = "https://github.com/solana-labs/solana" -version = "1.11.9" +version = "1.11.10" [dependencies] assert_matches = "1.5.0" @@ -15,13 +15,13 @@ bincode = "1.3.3" chrono-humanize = "0.2.1" log = "0.4.17" serde = "1.0.138" -solana-banks-client = { path = "../banks-client", version = "=1.11.9" } -solana-banks-server = { path = "../banks-server", version = "=1.11.9" } -solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.11.9" } -solana-logger = { path = "../logger", version = "=1.11.9" } -solana-program-runtime = { path = "../program-runtime", version = "=1.11.9" } -solana-runtime = { path = "../runtime", version = "=1.11.9" } -solana-sdk = { path = "../sdk", version = "=1.11.9" } -solana-vote-program = { path = "../programs/vote", version = "=1.11.9" } +solana-banks-client = { path = "../banks-client", version = "=1.11.10" } +solana-banks-server = { path = "../banks-server", version = "=1.11.10" } +solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.11.10" } +solana-logger = { path = "../logger", version = "=1.11.10" } +solana-program-runtime = { path = "../program-runtime", version = "=1.11.10" } +solana-runtime = { path = "../runtime", version = "=1.11.10" } +solana-sdk = { path = "../sdk", version = "=1.11.10" } +solana-vote-program = { path = "../programs/vote", version = "=1.11.10" } thiserror = "1.0" tokio = { version = "1", features = ["full"] } diff --git a/programs/address-lookup-table-tests/Cargo.toml b/programs/address-lookup-table-tests/Cargo.toml index 3ca93af17726ca..ae5eabb5bf35bb 100644 --- a/programs/address-lookup-table-tests/Cargo.toml +++ b/programs/address-lookup-table-tests/Cargo.toml @@ -3,7 +3,7 @@ [package] name = "solana-address-lookup-table-program-tests" -version = "1.11.9" +version = "1.11.10" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" @@ -14,9 +14,9 @@ publish = false [dev-dependencies] assert_matches = "1.5.0" bincode = "1.3.3" -solana-address-lookup-table-program = { path = "../address-lookup-table", version = "=1.11.9" } -solana-program-test = { path = "../../program-test", version = "=1.11.9" } -solana-sdk = { path = "../../sdk", version = "=1.11.9" } +solana-address-lookup-table-program = { path = "../address-lookup-table", version = "=1.11.10" } +solana-program-test = { path = "../../program-test", version = "=1.11.10" } +solana-sdk = { path = "../../sdk", version = "=1.11.10" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/address-lookup-table/Cargo.toml b/programs/address-lookup-table/Cargo.toml index 98ca0bb3d44ba5..671f0dc271ae17 100644 --- a/programs/address-lookup-table/Cargo.toml +++ b/programs/address-lookup-table/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-address-lookup-table-program" -version = "1.11.9" +version = "1.11.10" description = "Solana address lookup table program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -16,14 +16,14 @@ log = "0.4.17" num-derive = "0.3" num-traits = "0.2" serde = { version = "1.0.138", features = ["derive"] } -solana-frozen-abi = { path = "../../frozen-abi", version = "=1.11.9" } -solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.11.9" } -solana-program = { path = "../../sdk/program", version = "=1.11.9" } +solana-frozen-abi = { path = "../../frozen-abi", version = "=1.11.10" } +solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.11.10" } +solana-program = { path = "../../sdk/program", version = "=1.11.10" } thiserror = "1.0" [target.'cfg(not(target_os = "solana"))'.dependencies] -solana-program-runtime = { path = "../../program-runtime", version = "=1.11.9" } -solana-sdk = { path = "../../sdk", version = "=1.11.9" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.11.10" } +solana-sdk = { path = "../../sdk", version = "=1.11.10" } [build-dependencies] rustc_version = "0.4" diff --git a/programs/bpf-loader-tests/Cargo.toml b/programs/bpf-loader-tests/Cargo.toml index b3fc007f0b4b09..24d414db8a2827 100644 --- a/programs/bpf-loader-tests/Cargo.toml +++ b/programs/bpf-loader-tests/Cargo.toml @@ -3,7 +3,7 @@ [package] name = "solana-bpf-loader-program-tests" -version = "1.11.9" +version = "1.11.10" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" @@ -14,9 +14,9 @@ publish = false [dev-dependencies] assert_matches = "1.5.0" bincode = "1.3.3" -solana-bpf-loader-program = { path = "../bpf_loader", version = "=1.11.9" } -solana-program-test = { path = "../../program-test", version = "=1.11.9" } -solana-sdk = { path = "../../sdk", version = "=1.11.9" } +solana-bpf-loader-program = { path = "../bpf_loader", version = "=1.11.10" } +solana-program-test = { path = "../../program-test", version = "=1.11.10" } +solana-sdk = { path = "../../sdk", version = "=1.11.10" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/bpf/Cargo.lock b/programs/bpf/Cargo.lock index 062ba1989c9456..38d7c470159728 100644 --- a/programs/bpf/Cargo.lock +++ b/programs/bpf/Cargo.lock @@ -4060,7 +4060,7 @@ dependencies = [ [[package]] name = "solana-account-decoder" -version = "1.11.9" +version = "1.11.10" dependencies = [ "Inflector", "base64 0.13.0", @@ -4072,7 +4072,7 @@ dependencies = [ "serde_derive", "serde_json", "solana-config-program", - "solana-sdk 1.11.9", + "solana-sdk 1.11.10", "solana-vote-program", "spl-token", "spl-token-2022", @@ -4082,7 +4082,7 @@ dependencies = [ [[package]] name = "solana-address-lookup-table-program" -version = "1.11.9" +version = "1.11.10" dependencies = [ "bincode", "bytemuck", @@ -4091,23 +4091,23 @@ dependencies = [ "num-traits", "rustc_version", "serde", - "solana-frozen-abi 1.11.9", - "solana-frozen-abi-macro 1.11.9", - "solana-program 1.11.9", + "solana-frozen-abi 1.11.10", + "solana-frozen-abi-macro 1.11.10", + "solana-program 1.11.10", "solana-program-runtime", - "solana-sdk 1.11.9", + "solana-sdk 1.11.10", "thiserror", ] [[package]] name = "solana-banks-client" -version = "1.11.9" +version = "1.11.10" dependencies = [ "borsh", "futures 0.3.21", "solana-banks-interface", - "solana-program 1.11.9", - "solana-sdk 1.11.9", + "solana-program 1.11.10", + "solana-sdk 1.11.10", "tarpc", "thiserror", "tokio", @@ -4116,16 +4116,16 @@ dependencies = [ [[package]] name = "solana-banks-interface" -version = "1.11.9" +version = "1.11.10" dependencies = [ "serde", - "solana-sdk 1.11.9", + "solana-sdk 1.11.10", "tarpc", ] [[package]] name = "solana-banks-server" -version = "1.11.9" +version = "1.11.10" dependencies = [ "bincode", "crossbeam-channel", @@ -4133,7 +4133,7 @@ dependencies = [ "solana-banks-interface", "solana-client", "solana-runtime", - "solana-sdk 1.11.9", + "solana-sdk 1.11.10", "solana-send-transaction-service", "tarpc", "tokio", @@ -4143,7 +4143,7 @@ dependencies = [ [[package]] name = "solana-bloom" -version = "1.11.9" +version = "1.11.10" dependencies = [ "bv", "fnv", @@ -4153,14 +4153,14 @@ dependencies = [ "rustc_version", "serde", "serde_derive", - "solana-frozen-abi 1.11.9", - "solana-frozen-abi-macro 1.11.9", - "solana-sdk 1.11.9", + "solana-frozen-abi 1.11.10", + "solana-frozen-abi-macro 1.11.10", + "solana-sdk 1.11.10", ] [[package]] name = "solana-bpf-loader-program" -version = "1.11.9" +version = "1.11.10" dependencies = [ "bincode", "byteorder 1.4.3", @@ -4169,15 +4169,15 @@ dependencies = [ "solana-measure", "solana-metrics", "solana-program-runtime", - "solana-sdk 1.11.9", - "solana-zk-token-sdk 1.11.9", + "solana-sdk 1.11.10", + "solana-zk-token-sdk 1.11.10", "solana_rbpf", "thiserror", ] [[package]] name = "solana-bpf-programs" -version = "1.11.9" +version = "1.11.10" dependencies = [ "bincode", "byteorder 1.4.3", @@ -4193,11 +4193,11 @@ dependencies = [ "solana-bpf-rust-realloc-invoke", "solana-cli-output", "solana-ledger", - "solana-logger 1.11.9", + "solana-logger 1.11.10", "solana-measure", "solana-program-runtime", "solana-runtime", - "solana-sdk 1.11.9", + "solana-sdk 1.11.10", "solana-transaction-status", "solana_rbpf", "walkdir", @@ -4205,385 +4205,385 @@ dependencies = [ [[package]] name = "solana-bpf-rust-128bit" -version = "1.11.9" +version = "1.11.10" dependencies = [ "solana-bpf-rust-128bit-dep", - "solana-program 1.11.9", + "solana-program 1.11.10", ] [[package]] name = "solana-bpf-rust-128bit-dep" -version = "1.11.9" +version = "1.11.10" dependencies = [ - "solana-program 1.11.9", + "solana-program 1.11.10", ] [[package]] name = "solana-bpf-rust-alloc" -version = "1.11.9" +version = "1.11.10" dependencies = [ - "solana-program 1.11.9", + "solana-program 1.11.10", ] [[package]] name = "solana-bpf-rust-call-depth" -version = "1.11.9" +version = "1.11.10" dependencies = [ - "solana-program 1.11.9", + "solana-program 1.11.10", ] [[package]] name = "solana-bpf-rust-caller-access" -version = "1.11.9" +version = "1.11.10" dependencies = [ - "solana-program 1.11.9", + "solana-program 1.11.10", ] [[package]] name = "solana-bpf-rust-curve25519" -version = "1.11.9" +version = "1.11.10" dependencies = [ - "solana-program 1.11.9", - "solana-zk-token-sdk 1.11.9", + "solana-program 1.11.10", + "solana-zk-token-sdk 1.11.10", ] [[package]] name = "solana-bpf-rust-custom-heap" -version = "1.11.9" +version = "1.11.10" dependencies = [ - "solana-program 1.11.9", + "solana-program 1.11.10", ] [[package]] name = "solana-bpf-rust-dep-crate" -version = "1.11.9" +version = "1.11.10" dependencies = [ "byteorder 1.4.3", "solana-address-lookup-table-program", - "solana-program 1.11.9", + "solana-program 1.11.10", ] [[package]] name = "solana-bpf-rust-deprecated-loader" -version = "1.11.9" +version = "1.11.10" dependencies = [ - "solana-program 1.11.9", + "solana-program 1.11.10", ] [[package]] name = "solana-bpf-rust-dup-accounts" -version = "1.11.9" +version = "1.11.10" dependencies = [ - "solana-program 1.11.9", + "solana-program 1.11.10", ] [[package]] name = "solana-bpf-rust-error-handling" -version = "1.11.9" +version = "1.11.10" dependencies = [ "num-derive", "num-traits", - "solana-program 1.11.9", + "solana-program 1.11.10", "thiserror", ] [[package]] name = "solana-bpf-rust-external-spend" -version = "1.11.9" +version = "1.11.10" dependencies = [ - "solana-program 1.11.9", + "solana-program 1.11.10", ] [[package]] name = "solana-bpf-rust-finalize" -version = "1.11.9" +version = "1.11.10" dependencies = [ - "solana-program 1.11.9", + "solana-program 1.11.10", ] [[package]] name = "solana-bpf-rust-get-minimum-delegation" -version = "1.11.9" +version = "1.11.10" dependencies = [ - "solana-program 1.11.9", + "solana-program 1.11.10", ] [[package]] name = "solana-bpf-rust-inner_instruction_alignment_check" -version = "1.11.9" +version = "1.11.10" dependencies = [ - "solana-program 1.11.9", + "solana-program 1.11.10", ] [[package]] name = "solana-bpf-rust-instruction-introspection" -version = "1.11.9" +version = "1.11.10" dependencies = [ - "solana-program 1.11.9", + "solana-program 1.11.10", ] [[package]] name = "solana-bpf-rust-invoke" -version = "1.11.9" +version = "1.11.10" dependencies = [ "solana-bpf-rust-invoked", - "solana-program 1.11.9", + "solana-program 1.11.10", ] [[package]] name = "solana-bpf-rust-invoke-and-error" -version = "1.11.9" +version = "1.11.10" dependencies = [ - "solana-program 1.11.9", + "solana-program 1.11.10", ] [[package]] name = "solana-bpf-rust-invoke-and-ok" -version = "1.11.9" +version = "1.11.10" dependencies = [ - "solana-program 1.11.9", + "solana-program 1.11.10", ] [[package]] name = "solana-bpf-rust-invoke-and-return" -version = "1.11.9" +version = "1.11.10" dependencies = [ - "solana-program 1.11.9", + "solana-program 1.11.10", ] [[package]] name = "solana-bpf-rust-invoked" -version = "1.11.9" +version = "1.11.10" dependencies = [ - "solana-program 1.11.9", + "solana-program 1.11.10", ] [[package]] name = "solana-bpf-rust-iter" -version = "1.11.9" +version = "1.11.10" dependencies = [ - "solana-program 1.11.9", + "solana-program 1.11.10", ] [[package]] name = "solana-bpf-rust-log-data" -version = "1.11.9" +version = "1.11.10" dependencies = [ - "solana-program 1.11.9", + "solana-program 1.11.10", ] [[package]] name = "solana-bpf-rust-many-args" -version = "1.11.9" +version = "1.11.10" dependencies = [ "solana-bpf-rust-many-args-dep", - "solana-program 1.11.9", + "solana-program 1.11.10", ] [[package]] name = "solana-bpf-rust-many-args-dep" -version = "1.11.9" +version = "1.11.10" dependencies = [ - "solana-program 1.11.9", + "solana-program 1.11.10", ] [[package]] name = "solana-bpf-rust-mem" -version = "1.11.9" +version = "1.11.10" dependencies = [ - "solana-program 1.11.9", + "solana-program 1.11.10", "solana-program-runtime", "solana-program-test", - "solana-sdk 1.11.9", + "solana-sdk 1.11.10", ] [[package]] name = "solana-bpf-rust-membuiltins" -version = "1.11.9" +version = "1.11.10" dependencies = [ "solana-bpf-rust-mem", - "solana-program 1.11.9", + "solana-program 1.11.10", ] [[package]] name = "solana-bpf-rust-noop" -version = "1.11.9" +version = "1.11.10" dependencies = [ - "solana-program 1.11.9", + "solana-program 1.11.10", ] [[package]] name = "solana-bpf-rust-panic" -version = "1.11.9" +version = "1.11.10" dependencies = [ - "solana-program 1.11.9", + "solana-program 1.11.10", ] [[package]] name = "solana-bpf-rust-param-passing" -version = "1.11.9" +version = "1.11.10" dependencies = [ "solana-bpf-rust-param-passing-dep", - "solana-program 1.11.9", + "solana-program 1.11.10", ] [[package]] name = "solana-bpf-rust-param-passing-dep" -version = "1.11.9" +version = "1.11.10" dependencies = [ - "solana-program 1.11.9", + "solana-program 1.11.10", ] [[package]] name = "solana-bpf-rust-rand" -version = "1.11.9" +version = "1.11.10" dependencies = [ "getrandom 0.1.14", "rand 0.7.3", - "solana-program 1.11.9", + "solana-program 1.11.10", ] [[package]] name = "solana-bpf-rust-realloc" -version = "1.11.9" +version = "1.11.10" dependencies = [ - "solana-program 1.11.9", + "solana-program 1.11.10", ] [[package]] name = "solana-bpf-rust-realloc-invoke" -version = "1.11.9" +version = "1.11.10" dependencies = [ "solana-bpf-rust-realloc", - "solana-program 1.11.9", + "solana-program 1.11.10", ] [[package]] name = "solana-bpf-rust-ro-account_modify" -version = "1.11.9" +version = "1.11.10" dependencies = [ - "solana-program 1.11.9", + "solana-program 1.11.10", ] [[package]] name = "solana-bpf-rust-ro-modify" -version = "1.11.9" +version = "1.11.10" dependencies = [ - "solana-program 1.11.9", + "solana-program 1.11.10", ] [[package]] name = "solana-bpf-rust-sanity" -version = "1.11.9" +version = "1.11.10" dependencies = [ - "solana-program 1.11.9", + "solana-program 1.11.10", "solana-program-runtime", "solana-program-test", - "solana-sdk 1.11.9", + "solana-sdk 1.11.10", ] [[package]] name = "solana-bpf-rust-secp256k1-recover" -version = "1.11.9" +version = "1.11.10" dependencies = [ "libsecp256k1 0.7.0", - "solana-program 1.11.9", + "solana-program 1.11.10", ] [[package]] name = "solana-bpf-rust-sha" -version = "1.11.9" +version = "1.11.10" dependencies = [ "blake3", - "solana-program 1.11.9", + "solana-program 1.11.10", ] [[package]] name = "solana-bpf-rust-sibling-instructions" -version = "1.11.9" +version = "1.11.10" dependencies = [ - "solana-program 1.11.9", + "solana-program 1.11.10", ] [[package]] name = "solana-bpf-rust-sibling_inner-instructions" -version = "1.11.9" +version = "1.11.10" dependencies = [ - "solana-program 1.11.9", + "solana-program 1.11.10", ] [[package]] name = "solana-bpf-rust-simulation" -version = "1.11.9" +version = "1.11.10" dependencies = [ - "solana-logger 1.11.9", - "solana-program 1.11.9", + "solana-logger 1.11.10", + "solana-program 1.11.10", "solana-program-test", - "solana-sdk 1.11.9", + "solana-sdk 1.11.10", "solana-validator", ] [[package]] name = "solana-bpf-rust-spoof1" -version = "1.11.9" +version = "1.11.10" dependencies = [ - "solana-program 1.11.9", + "solana-program 1.11.10", ] [[package]] name = "solana-bpf-rust-spoof1-system" -version = "1.11.9" +version = "1.11.10" dependencies = [ - "solana-program 1.11.9", + "solana-program 1.11.10", ] [[package]] name = "solana-bpf-rust-sysvar" -version = "1.11.9" +version = "1.11.10" dependencies = [ - "solana-program 1.11.9", + "solana-program 1.11.10", "solana-program-runtime", "solana-program-test", - "solana-sdk 1.11.9", + "solana-sdk 1.11.10", ] [[package]] name = "solana-bpf-rust-upgradeable" -version = "1.11.9" +version = "1.11.10" dependencies = [ - "solana-program 1.11.9", + "solana-program 1.11.10", ] [[package]] name = "solana-bpf-rust-upgraded" -version = "1.11.9" +version = "1.11.10" dependencies = [ - "solana-program 1.11.9", + "solana-program 1.11.10", ] [[package]] name = "solana-bucket-map" -version = "1.11.9" +version = "1.11.10" dependencies = [ "log", "memmap2", "modular-bitfield", "rand 0.7.3", "solana-measure", - "solana-sdk 1.11.9", + "solana-sdk 1.11.10", "tempfile", ] [[package]] name = "solana-clap-utils" -version = "1.11.9" +version = "1.11.10" dependencies = [ "chrono", "clap 2.33.3", "rpassword", "solana-perf", "solana-remote-wallet", - "solana-sdk 1.11.9", + "solana-sdk 1.11.10", "thiserror", "tiny-bip39", "uriparse", @@ -4592,7 +4592,7 @@ dependencies = [ [[package]] name = "solana-cli-config" -version = "1.11.9" +version = "1.11.10" dependencies = [ "dirs-next", "lazy_static", @@ -4600,13 +4600,13 @@ dependencies = [ "serde_derive", "serde_yaml", "solana-clap-utils", - "solana-sdk 1.11.9", + "solana-sdk 1.11.10", "url 2.2.2", ] [[package]] name = "solana-cli-output" -version = "1.11.9" +version = "1.11.10" dependencies = [ "Inflector", "base64 0.13.0", @@ -4623,7 +4623,7 @@ dependencies = [ "solana-clap-utils", "solana-cli-config", "solana-client", - "solana-sdk 1.11.9", + "solana-sdk 1.11.10", "solana-transaction-status", "solana-vote-program", "spl-memo", @@ -4631,7 +4631,7 @@ dependencies = [ [[package]] name = "solana-client" -version = "1.11.9" +version = "1.11.10" dependencies = [ "async-mutex", "async-trait", @@ -4667,7 +4667,7 @@ dependencies = [ "solana-measure", "solana-metrics", "solana-net-utils", - "solana-sdk 1.11.9", + "solana-sdk 1.11.10", "solana-streamer", "solana-transaction-status", "solana-version", @@ -4683,27 +4683,27 @@ dependencies = [ [[package]] name = "solana-compute-budget-program" -version = "1.11.9" +version = "1.11.10" dependencies = [ "solana-program-runtime", - "solana-sdk 1.11.9", + "solana-sdk 1.11.10", ] [[package]] name = "solana-config-program" -version = "1.11.9" +version = "1.11.10" dependencies = [ "bincode", "chrono", "serde", "serde_derive", "solana-program-runtime", - "solana-sdk 1.11.9", + "solana-sdk 1.11.10", ] [[package]] name = "solana-core" -version = "1.11.9" +version = "1.11.10" dependencies = [ "ahash", "base64 0.13.0", @@ -4731,8 +4731,8 @@ dependencies = [ "solana-bloom", "solana-client", "solana-entry", - "solana-frozen-abi 1.11.9", - "solana-frozen-abi-macro 1.11.9", + "solana-frozen-abi 1.11.10", + "solana-frozen-abi-macro 1.11.10", "solana-geyser-plugin-manager", "solana-gossip", "solana-ledger", @@ -4745,7 +4745,7 @@ dependencies = [ "solana-rayon-threadlimit", "solana-rpc", "solana-runtime", - "solana-sdk 1.11.9", + "solana-sdk 1.11.10", "solana-send-transaction-service", "solana-streamer", "solana-transaction-status", @@ -4761,19 +4761,19 @@ dependencies = [ [[package]] name = "solana-download-utils" -version = "1.11.9" +version = "1.11.10" dependencies = [ "console", "indicatif", "log", "reqwest", "solana-runtime", - "solana-sdk 1.11.9", + "solana-sdk 1.11.10", ] [[package]] name = "solana-entry" -version = "1.11.9" +version = "1.11.10" dependencies = [ "bincode", "crossbeam-channel", @@ -4789,12 +4789,12 @@ dependencies = [ "solana-metrics", "solana-perf", "solana-rayon-threadlimit", - "solana-sdk 1.11.9", + "solana-sdk 1.11.10", ] [[package]] name = "solana-faucet" -version = "1.11.9" +version = "1.11.10" dependencies = [ "bincode", "byteorder 1.4.3", @@ -4805,9 +4805,9 @@ dependencies = [ "serde_derive", "solana-clap-utils", "solana-cli-config", - "solana-logger 1.11.9", + "solana-logger 1.11.10", "solana-metrics", - "solana-sdk 1.11.9", + "solana-sdk 1.11.10", "solana-version", "spl-memo", "thiserror", @@ -4838,7 +4838,7 @@ dependencies = [ [[package]] name = "solana-frozen-abi" -version = "1.11.9" +version = "1.11.10" dependencies = [ "ahash", "blake3", @@ -4863,7 +4863,7 @@ dependencies = [ "serde_derive", "serde_json", "sha2 0.10.2", - "solana-frozen-abi-macro 1.11.9", + "solana-frozen-abi-macro 1.11.10", "subtle", "thiserror", ] @@ -4882,7 +4882,7 @@ dependencies = [ [[package]] name = "solana-frozen-abi-macro" -version = "1.11.9" +version = "1.11.10" dependencies = [ "proc-macro2 1.0.41", "quote 1.0.18", @@ -4892,26 +4892,26 @@ dependencies = [ [[package]] name = "solana-genesis-utils" -version = "1.11.9" +version = "1.11.10" dependencies = [ "solana-download-utils", "solana-runtime", - "solana-sdk 1.11.9", + "solana-sdk 1.11.10", ] [[package]] name = "solana-geyser-plugin-interface" -version = "1.11.9" +version = "1.11.10" dependencies = [ "log", - "solana-sdk 1.11.9", + "solana-sdk 1.11.10", "solana-transaction-status", "thiserror", ] [[package]] name = "solana-geyser-plugin-manager" -version = "1.11.9" +version = "1.11.10" dependencies = [ "bs58", "crossbeam-channel", @@ -4924,14 +4924,14 @@ dependencies = [ "solana-metrics", "solana-rpc", "solana-runtime", - "solana-sdk 1.11.9", + "solana-sdk 1.11.10", "solana-transaction-status", "thiserror", ] [[package]] name = "solana-gossip" -version = "1.11.9" +version = "1.11.10" dependencies = [ "bincode", "bv", @@ -4955,17 +4955,17 @@ dependencies = [ "solana-clap-utils", "solana-client", "solana-entry", - "solana-frozen-abi 1.11.9", - "solana-frozen-abi-macro 1.11.9", + "solana-frozen-abi 1.11.10", + "solana-frozen-abi-macro 1.11.10", "solana-ledger", - "solana-logger 1.11.9", + "solana-logger 1.11.10", "solana-measure", "solana-metrics", "solana-net-utils", "solana-perf", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.11.9", + "solana-sdk 1.11.10", "solana-streamer", "solana-version", "solana-vote-program", @@ -4974,7 +4974,7 @@ dependencies = [ [[package]] name = "solana-ledger" -version = "1.11.9" +version = "1.11.10" dependencies = [ "bincode", "bitflags", @@ -5005,15 +5005,15 @@ dependencies = [ "solana-account-decoder", "solana-bpf-loader-program", "solana-entry", - "solana-frozen-abi 1.11.9", - "solana-frozen-abi-macro 1.11.9", + "solana-frozen-abi 1.11.10", + "solana-frozen-abi-macro 1.11.10", "solana-measure", "solana-metrics", "solana-perf", "solana-program-runtime", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.11.9", + "solana-sdk 1.11.10", "solana-stake-program", "solana-storage-bigtable", "solana-storage-proto", @@ -5042,7 +5042,7 @@ dependencies = [ [[package]] name = "solana-logger" -version = "1.11.9" +version = "1.11.10" dependencies = [ "env_logger", "lazy_static", @@ -5051,36 +5051,36 @@ dependencies = [ [[package]] name = "solana-measure" -version = "1.11.9" +version = "1.11.10" dependencies = [ "log", - "solana-sdk 1.11.9", + "solana-sdk 1.11.10", ] [[package]] name = "solana-merkle-tree" -version = "1.11.9" +version = "1.11.10" dependencies = [ "fast-math", "matches", - "solana-program 1.11.9", + "solana-program 1.11.10", ] [[package]] name = "solana-metrics" -version = "1.11.9" +version = "1.11.10" dependencies = [ "crossbeam-channel", "gethostname", "lazy_static", "log", "reqwest", - "solana-sdk 1.11.9", + "solana-sdk 1.11.10", ] [[package]] name = "solana-net-utils" -version = "1.11.9" +version = "1.11.10" dependencies = [ "bincode", "clap 3.1.6", @@ -5091,8 +5091,8 @@ dependencies = [ "serde", "serde_derive", "socket2", - "solana-logger 1.11.9", - "solana-sdk 1.11.9", + "solana-logger 1.11.10", + "solana-sdk 1.11.10", "solana-version", "tokio", "url 2.2.2", @@ -5100,7 +5100,7 @@ dependencies = [ [[package]] name = "solana-perf" -version = "1.11.9" +version = "1.11.10" dependencies = [ "ahash", "bincode", @@ -5119,13 +5119,13 @@ dependencies = [ "serde", "solana-metrics", "solana-rayon-threadlimit", - "solana-sdk 1.11.9", + "solana-sdk 1.11.10", "solana-vote-program", ] [[package]] name = "solana-poh" -version = "1.11.9" +version = "1.11.10" dependencies = [ "core_affinity", "crossbeam-channel", @@ -5135,7 +5135,7 @@ dependencies = [ "solana-measure", "solana-metrics", "solana-runtime", - "solana-sdk 1.11.9", + "solana-sdk 1.11.10", "solana-sys-tuner", "thiserror", ] @@ -5184,7 +5184,7 @@ dependencies = [ [[package]] name = "solana-program" -version = "1.11.9" +version = "1.11.10" dependencies = [ "base64 0.13.0", "bincode", @@ -5220,9 +5220,9 @@ dependencies = [ "serde_json", "sha2 0.10.2", "sha3 0.10.1", - "solana-frozen-abi 1.11.9", - "solana-frozen-abi-macro 1.11.9", - "solana-sdk-macro 1.11.9", + "solana-frozen-abi 1.11.10", + "solana-frozen-abi-macro 1.11.10", + "solana-sdk-macro 1.11.10", "thiserror", "tiny-bip39", "wasm-bindgen", @@ -5231,7 +5231,7 @@ dependencies = [ [[package]] name = "solana-program-runtime" -version = "1.11.9" +version = "1.11.10" dependencies = [ "base64 0.13.0", "bincode", @@ -5245,17 +5245,17 @@ dependencies = [ "num-traits", "rustc_version", "serde", - "solana-frozen-abi 1.11.9", - "solana-frozen-abi-macro 1.11.9", + "solana-frozen-abi 1.11.10", + "solana-frozen-abi-macro 1.11.10", "solana-measure", "solana-metrics", - "solana-sdk 1.11.9", + "solana-sdk 1.11.10", "thiserror", ] [[package]] name = "solana-program-test" -version = "1.11.9" +version = "1.11.10" dependencies = [ "assert_matches", "async-trait", @@ -5267,10 +5267,10 @@ dependencies = [ "solana-banks-client", "solana-banks-server", "solana-bpf-loader-program", - "solana-logger 1.11.9", + "solana-logger 1.11.10", "solana-program-runtime", "solana-runtime", - "solana-sdk 1.11.9", + "solana-sdk 1.11.10", "solana-vote-program", "thiserror", "tokio", @@ -5278,7 +5278,7 @@ dependencies = [ [[package]] name = "solana-rayon-threadlimit" -version = "1.11.9" +version = "1.11.10" dependencies = [ "lazy_static", "num_cpus", @@ -5286,7 +5286,7 @@ dependencies = [ [[package]] name = "solana-remote-wallet" -version = "1.11.9" +version = "1.11.10" dependencies = [ "console", "dialoguer", @@ -5296,14 +5296,14 @@ dependencies = [ "parking_lot 0.12.1", "qstring", "semver", - "solana-sdk 1.11.9", + "solana-sdk 1.11.10", "thiserror", "uriparse", ] [[package]] name = "solana-rpc" -version = "1.11.9" +version = "1.11.10" dependencies = [ "base64 0.13.0", "bincode", @@ -5336,7 +5336,7 @@ dependencies = [ "solana-poh", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.11.9", + "solana-sdk 1.11.10", "solana-send-transaction-service", "solana-stake-program", "solana-storage-bigtable", @@ -5354,7 +5354,7 @@ dependencies = [ [[package]] name = "solana-runtime" -version = "1.11.9" +version = "1.11.10" dependencies = [ "arrayref", "bincode", @@ -5390,17 +5390,17 @@ dependencies = [ "solana-bucket-map", "solana-compute-budget-program", "solana-config-program", - "solana-frozen-abi 1.11.9", - "solana-frozen-abi-macro 1.11.9", + "solana-frozen-abi 1.11.10", + "solana-frozen-abi-macro 1.11.10", "solana-measure", "solana-metrics", "solana-program-runtime", "solana-rayon-threadlimit", - "solana-sdk 1.11.9", + "solana-sdk 1.11.10", "solana-stake-program", "solana-vote-program", "solana-zk-token-proof-program", - "solana-zk-token-sdk 1.11.9", + "solana-zk-token-sdk 1.11.10", "strum", "strum_macros", "symlink", @@ -5463,7 +5463,7 @@ dependencies = [ [[package]] name = "solana-sdk" -version = "1.11.9" +version = "1.11.10" dependencies = [ "assert_matches", "base64 0.13.0", @@ -5500,11 +5500,11 @@ dependencies = [ "serde_json", "sha2 0.10.2", "sha3 0.10.1", - "solana-frozen-abi 1.11.9", - "solana-frozen-abi-macro 1.11.9", - "solana-logger 1.11.9", - "solana-program 1.11.9", - "solana-sdk-macro 1.11.9", + "solana-frozen-abi 1.11.10", + "solana-frozen-abi-macro 1.11.10", + "solana-logger 1.11.10", + "solana-program 1.11.10", + "solana-sdk-macro 1.11.10", "thiserror", "uriparse", "wasm-bindgen", @@ -5525,7 +5525,7 @@ dependencies = [ [[package]] name = "solana-sdk-macro" -version = "1.11.9" +version = "1.11.10" dependencies = [ "bs58", "proc-macro2 1.0.41", @@ -5536,7 +5536,7 @@ dependencies = [ [[package]] name = "solana-send-transaction-service" -version = "1.11.9" +version = "1.11.10" dependencies = [ "crossbeam-channel", "log", @@ -5544,12 +5544,12 @@ dependencies = [ "solana-measure", "solana-metrics", "solana-runtime", - "solana-sdk 1.11.9", + "solana-sdk 1.11.10", ] [[package]] name = "solana-stake-program" -version = "1.11.9" +version = "1.11.10" dependencies = [ "bincode", "log", @@ -5559,18 +5559,18 @@ dependencies = [ "serde", "serde_derive", "solana-config-program", - "solana-frozen-abi 1.11.9", - "solana-frozen-abi-macro 1.11.9", + "solana-frozen-abi 1.11.10", + "solana-frozen-abi-macro 1.11.10", "solana-metrics", "solana-program-runtime", - "solana-sdk 1.11.9", + "solana-sdk 1.11.10", "solana-vote-program", "thiserror", ] [[package]] name = "solana-storage-bigtable" -version = "1.11.9" +version = "1.11.10" dependencies = [ "backoff", "bincode", @@ -5591,7 +5591,7 @@ dependencies = [ "serde_derive", "smpl_jwt", "solana-metrics", - "solana-sdk 1.11.9", + "solana-sdk 1.11.10", "solana-storage-proto", "solana-transaction-status", "thiserror", @@ -5602,7 +5602,7 @@ dependencies = [ [[package]] name = "solana-storage-proto" -version = "1.11.9" +version = "1.11.10" dependencies = [ "bincode", "bs58", @@ -5610,14 +5610,14 @@ dependencies = [ "protobuf-src", "serde", "solana-account-decoder", - "solana-sdk 1.11.9", + "solana-sdk 1.11.10", "solana-transaction-status", "tonic-build 0.8.0", ] [[package]] name = "solana-streamer" -version = "1.11.9" +version = "1.11.10" dependencies = [ "crossbeam-channel", "futures-util", @@ -5636,7 +5636,7 @@ dependencies = [ "rustls 0.20.6", "solana-metrics", "solana-perf", - "solana-sdk 1.11.9", + "solana-sdk 1.11.10", "thiserror", "tokio", "x509-parser", @@ -5644,13 +5644,13 @@ dependencies = [ [[package]] name = "solana-sys-tuner" -version = "1.11.9" +version = "1.11.10" dependencies = [ "clap 2.33.3", "libc", "log", "nix", - "solana-logger 1.11.9", + "solana-logger 1.11.10", "solana-version", "sysctl", "unix_socket2", @@ -5659,7 +5659,7 @@ dependencies = [ [[package]] name = "solana-test-validator" -version = "1.11.9" +version = "1.11.10" dependencies = [ "base64 0.13.0", "log", @@ -5670,20 +5670,20 @@ dependencies = [ "solana-core", "solana-gossip", "solana-ledger", - "solana-logger 1.11.9", + "solana-logger 1.11.10", "solana-net-utils", "solana-program-runtime", "solana-program-test", "solana-rpc", "solana-runtime", - "solana-sdk 1.11.9", + "solana-sdk 1.11.10", "solana-streamer", "tokio", ] [[package]] name = "solana-transaction-status" -version = "1.11.9" +version = "1.11.10" dependencies = [ "Inflector", "base64 0.13.0", @@ -5698,7 +5698,7 @@ dependencies = [ "solana-account-decoder", "solana-measure", "solana-metrics", - "solana-sdk 1.11.9", + "solana-sdk 1.11.10", "solana-vote-program", "spl-associated-token-account", "spl-memo", @@ -5709,7 +5709,7 @@ dependencies = [ [[package]] name = "solana-validator" -version = "1.11.9" +version = "1.11.10" dependencies = [ "chrono", "clap 2.33.3", @@ -5740,14 +5740,14 @@ dependencies = [ "solana-genesis-utils", "solana-gossip", "solana-ledger", - "solana-logger 1.11.9", + "solana-logger 1.11.10", "solana-metrics", "solana-net-utils", "solana-perf", "solana-poh", "solana-rpc", "solana-runtime", - "solana-sdk 1.11.9", + "solana-sdk 1.11.10", "solana-send-transaction-service", "solana-storage-bigtable", "solana-streamer", @@ -5760,21 +5760,21 @@ dependencies = [ [[package]] name = "solana-version" -version = "1.11.9" +version = "1.11.10" dependencies = [ "log", "rustc_version", "semver", "serde", "serde_derive", - "solana-frozen-abi 1.11.9", - "solana-frozen-abi-macro 1.11.9", - "solana-sdk 1.11.9", + "solana-frozen-abi 1.11.10", + "solana-frozen-abi-macro 1.11.10", + "solana-sdk 1.11.10", ] [[package]] name = "solana-vote-program" -version = "1.11.9" +version = "1.11.10" dependencies = [ "bincode", "log", @@ -5783,25 +5783,25 @@ dependencies = [ "rustc_version", "serde", "serde_derive", - "solana-frozen-abi 1.11.9", - "solana-frozen-abi-macro 1.11.9", + "solana-frozen-abi 1.11.10", + "solana-frozen-abi-macro 1.11.10", "solana-metrics", "solana-program-runtime", - "solana-sdk 1.11.9", + "solana-sdk 1.11.10", "thiserror", ] [[package]] name = "solana-zk-token-proof-program" -version = "1.11.9" +version = "1.11.10" dependencies = [ "bytemuck", "getrandom 0.1.14", "num-derive", "num-traits", "solana-program-runtime", - "solana-sdk 1.11.9", - "solana-zk-token-sdk 1.11.9", + "solana-sdk 1.11.10", + "solana-zk-token-sdk 1.11.10", ] [[package]] @@ -5836,7 +5836,7 @@ dependencies = [ [[package]] name = "solana-zk-token-sdk" -version = "1.11.9" +version = "1.11.10" dependencies = [ "aes-gcm-siv", "arrayref", @@ -5855,8 +5855,8 @@ dependencies = [ "serde", "serde_json", "sha3 0.9.1", - "solana-program 1.11.9", - "solana-sdk 1.11.9", + "solana-program 1.11.10", + "solana-sdk 1.11.10", "subtle", "thiserror", "zeroize", diff --git a/programs/bpf/Cargo.toml b/programs/bpf/Cargo.toml index ad20f9b9d1d704..3dc7f50c992ed5 100644 --- a/programs/bpf/Cargo.toml +++ b/programs/bpf/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "solana-bpf-programs" description = "Blockchain, Rebuilt for Scale" -version = "1.11.9" +version = "1.11.10" documentation = "https://docs.rs/solana" homepage = "https://solana.com/" readme = "README.md" @@ -26,22 +26,22 @@ itertools = "0.10.1" log = "0.4.11" miow = "0.3.6" net2 = "0.2.37" -solana-account-decoder = { path = "../../account-decoder", version = "=1.11.9" } -solana-bpf-loader-program = { path = "../bpf_loader", version = "=1.11.9" } -solana-bpf-rust-invoke = { path = "rust/invoke", version = "=1.11.9" } -solana-bpf-rust-realloc = { path = "rust/realloc", version = "=1.11.9" } -solana-bpf-rust-realloc-invoke = { path = "rust/realloc_invoke", version = "=1.11.9" } -solana-cli-output = { path = "../../cli-output", version = "=1.11.9" } -solana-logger = { path = "../../logger", version = "=1.11.9" } -solana-measure = { path = "../../measure", version = "=1.11.9" } -solana-program-runtime = { path = "../../program-runtime", version = "=1.11.9" } -solana-runtime = { path = "../../runtime", version = "=1.11.9" } -solana-sdk = { path = "../../sdk", version = "=1.11.9" } -solana-transaction-status = { path = "../../transaction-status", version = "=1.11.9" } +solana-account-decoder = { path = "../../account-decoder", version = "=1.11.10" } +solana-bpf-loader-program = { path = "../bpf_loader", version = "=1.11.10" } +solana-bpf-rust-invoke = { path = "rust/invoke", version = "=1.11.10" } +solana-bpf-rust-realloc = { path = "rust/realloc", version = "=1.11.10" } +solana-bpf-rust-realloc-invoke = { path = "rust/realloc_invoke", version = "=1.11.10" } +solana-cli-output = { path = "../../cli-output", version = "=1.11.10" } +solana-logger = { path = "../../logger", version = "=1.11.10" } +solana-measure = { path = "../../measure", version = "=1.11.10" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.11.10" } +solana-runtime = { path = "../../runtime", version = "=1.11.10" } +solana-sdk = { path = "../../sdk", version = "=1.11.10" } +solana-transaction-status = { path = "../../transaction-status", version = "=1.11.10" } solana_rbpf = "=0.2.31" [dev-dependencies] -solana-ledger = { path = "../../ledger", version = "=1.11.9" } +solana-ledger = { path = "../../ledger", version = "=1.11.10" } [[bench]] name = "bpf_loader" diff --git a/programs/bpf/rust/128bit/Cargo.toml b/programs/bpf/rust/128bit/Cargo.toml index e40d4174945626..f0dd25bcb26f1f 100644 --- a/programs/bpf/rust/128bit/Cargo.toml +++ b/programs/bpf/rust/128bit/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-128bit" -version = "1.11.9" +version = "1.11.10" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ documentation = "https://docs.rs/solana-bpf-rust-128bit" edition = "2021" [dependencies] -solana-bpf-rust-128bit-dep = { path = "../128bit_dep", version = "=1.11.9" } -solana-program = { path = "../../../../sdk/program", version = "=1.11.9" } +solana-bpf-rust-128bit-dep = { path = "../128bit_dep", version = "=1.11.10" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.10" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/128bit_dep/Cargo.toml b/programs/bpf/rust/128bit_dep/Cargo.toml index a9ab63b27c8c2a..a00b8274fb46d2 100644 --- a/programs/bpf/rust/128bit_dep/Cargo.toml +++ b/programs/bpf/rust/128bit_dep/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-128bit-dep" -version = "1.11.9" +version = "1.11.10" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-128bit-dep" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.9" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.10" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/bpf/rust/alloc/Cargo.toml b/programs/bpf/rust/alloc/Cargo.toml index 6b4e844d70bbd4..388224c6648e64 100644 --- a/programs/bpf/rust/alloc/Cargo.toml +++ b/programs/bpf/rust/alloc/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-alloc" -version = "1.11.9" +version = "1.11.10" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-alloc" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.9" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.10" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/call_depth/Cargo.toml b/programs/bpf/rust/call_depth/Cargo.toml index 1f649630b132c8..995edf96a7179d 100644 --- a/programs/bpf/rust/call_depth/Cargo.toml +++ b/programs/bpf/rust/call_depth/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-call-depth" -version = "1.11.9" +version = "1.11.10" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-call-depth" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.9" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.10" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/caller_access/Cargo.toml b/programs/bpf/rust/caller_access/Cargo.toml index 09741732193f27..d8787ee917e934 100644 --- a/programs/bpf/rust/caller_access/Cargo.toml +++ b/programs/bpf/rust/caller_access/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-caller-access" -version = "1.11.9" +version = "1.11.10" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-caller-access" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.9" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.10" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/curve25519/Cargo.toml b/programs/bpf/rust/curve25519/Cargo.toml index 018bc2e34c3073..650b44b4e384df 100644 --- a/programs/bpf/rust/curve25519/Cargo.toml +++ b/programs/bpf/rust/curve25519/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-curve25519" -version = "1.11.9" +version = "1.11.10" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ documentation = "https://docs.rs/solana-bpf-rust-zktoken_crypto" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.9" } -solana-zk-token-sdk = { path = "../../../../zk-token-sdk", version = "=1.11.9" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.10" } +solana-zk-token-sdk = { path = "../../../../zk-token-sdk", version = "=1.11.10" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/custom_heap/Cargo.toml b/programs/bpf/rust/custom_heap/Cargo.toml index ac4c1243a8e850..af7fd5200a4887 100644 --- a/programs/bpf/rust/custom_heap/Cargo.toml +++ b/programs/bpf/rust/custom_heap/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-custom-heap" -version = "1.11.9" +version = "1.11.10" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-custom-heap" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.9" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.10" } [features] default = ["custom-heap"] diff --git a/programs/bpf/rust/dep_crate/Cargo.toml b/programs/bpf/rust/dep_crate/Cargo.toml index ef131840c2780d..3273075fca8fd7 100644 --- a/programs/bpf/rust/dep_crate/Cargo.toml +++ b/programs/bpf/rust/dep_crate/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-dep-crate" -version = "1.11.9" +version = "1.11.10" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,8 +12,8 @@ edition = "2021" [dependencies] byteorder = { version = "1", default-features = false } # list of crates which must be buildable for bpf programs -solana-address-lookup-table-program = { path = "../../../../programs/address-lookup-table", version = "=1.11.9" } -solana-program = { path = "../../../../sdk/program", version = "=1.11.9" } +solana-address-lookup-table-program = { path = "../../../../programs/address-lookup-table", version = "=1.11.10" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.10" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/deprecated_loader/Cargo.toml b/programs/bpf/rust/deprecated_loader/Cargo.toml index 167a1646cf1ec0..4a54203d6d7739 100644 --- a/programs/bpf/rust/deprecated_loader/Cargo.toml +++ b/programs/bpf/rust/deprecated_loader/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-deprecated-loader" -version = "1.11.9" +version = "1.11.10" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-deprecated-loader" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.9" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.10" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/dup_accounts/Cargo.toml b/programs/bpf/rust/dup_accounts/Cargo.toml index 29becf36574bef..2d9a9da09837c3 100644 --- a/programs/bpf/rust/dup_accounts/Cargo.toml +++ b/programs/bpf/rust/dup_accounts/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-dup-accounts" -version = "1.11.9" +version = "1.11.10" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-dup-accounts" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.9" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.10" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/error_handling/Cargo.toml b/programs/bpf/rust/error_handling/Cargo.toml index 3b845d9fd20ac0..78a09f8c511d44 100644 --- a/programs/bpf/rust/error_handling/Cargo.toml +++ b/programs/bpf/rust/error_handling/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-error-handling" -version = "1.11.9" +version = "1.11.10" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,7 +12,7 @@ edition = "2021" [dependencies] num-derive = "0.3" num-traits = "0.2" -solana-program = { path = "../../../../sdk/program", version = "=1.11.9" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.10" } thiserror = "1.0" [lib] diff --git a/programs/bpf/rust/external_spend/Cargo.toml b/programs/bpf/rust/external_spend/Cargo.toml index 419a177c5c56b9..d57f5064a05c5c 100644 --- a/programs/bpf/rust/external_spend/Cargo.toml +++ b/programs/bpf/rust/external_spend/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-external-spend" -version = "1.11.9" +version = "1.11.10" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-external-spend" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.9" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.10" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/finalize/Cargo.toml b/programs/bpf/rust/finalize/Cargo.toml index c9039891870a2d..dc4b0d60e845dd 100644 --- a/programs/bpf/rust/finalize/Cargo.toml +++ b/programs/bpf/rust/finalize/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-finalize" -version = "1.11.9" +version = "1.11.10" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-finalize" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.9" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.10" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/get_minimum_delegation/Cargo.toml b/programs/bpf/rust/get_minimum_delegation/Cargo.toml index 7744fba4b687fd..fda2515af9b1dc 100644 --- a/programs/bpf/rust/get_minimum_delegation/Cargo.toml +++ b/programs/bpf/rust/get_minimum_delegation/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-get-minimum-delegation" -version = "1.11.9" +version = "1.11.10" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-get-minimum-delegation" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.9" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.10" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/inner_instruction_alignment_check/Cargo.toml b/programs/bpf/rust/inner_instruction_alignment_check/Cargo.toml index c34b031ad368a1..0adb7029a0a8e6 100644 --- a/programs/bpf/rust/inner_instruction_alignment_check/Cargo.toml +++ b/programs/bpf/rust/inner_instruction_alignment_check/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-inner_instruction_alignment_check" -version = "1.11.9" +version = "1.11.10" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-inner_instruction_alignment_che edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.9" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.10" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/instruction_introspection/Cargo.toml b/programs/bpf/rust/instruction_introspection/Cargo.toml index ac4a52c97fe054..26d38bc0738200 100644 --- a/programs/bpf/rust/instruction_introspection/Cargo.toml +++ b/programs/bpf/rust/instruction_introspection/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-instruction-introspection" -version = "1.11.9" +version = "1.11.10" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-instruction-introspection" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.9" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.10" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/invoke/Cargo.toml b/programs/bpf/rust/invoke/Cargo.toml index 7ceed3ea0fdfd8..e726fada2beb89 100644 --- a/programs/bpf/rust/invoke/Cargo.toml +++ b/programs/bpf/rust/invoke/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-invoke" -version = "1.11.9" +version = "1.11.10" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -15,7 +15,7 @@ program = [] [dependencies] solana-bpf-rust-invoked = { path = "../invoked", default-features = false } -solana-program = { path = "../../../../sdk/program", version = "=1.11.9" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.10" } [lib] crate-type = ["lib", "cdylib"] diff --git a/programs/bpf/rust/invoke_and_error/Cargo.toml b/programs/bpf/rust/invoke_and_error/Cargo.toml index d867b0f319ef5f..c20d607a800b11 100644 --- a/programs/bpf/rust/invoke_and_error/Cargo.toml +++ b/programs/bpf/rust/invoke_and_error/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-invoke-and-error" -version = "1.11.9" +version = "1.11.10" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-invoke-and-error" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.9" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.10" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/invoke_and_ok/Cargo.toml b/programs/bpf/rust/invoke_and_ok/Cargo.toml index 732a321f13e5aa..dccb40fa711e92 100644 --- a/programs/bpf/rust/invoke_and_ok/Cargo.toml +++ b/programs/bpf/rust/invoke_and_ok/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-invoke-and-ok" -version = "1.11.9" +version = "1.11.10" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-invoke-and-ok" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.9" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.10" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/invoke_and_return/Cargo.toml b/programs/bpf/rust/invoke_and_return/Cargo.toml index 07c03696c1532d..1858a34e3599d7 100644 --- a/programs/bpf/rust/invoke_and_return/Cargo.toml +++ b/programs/bpf/rust/invoke_and_return/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-invoke-and-return" -version = "1.11.9" +version = "1.11.10" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-invoke-and-return" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.9" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.10" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/invoked/Cargo.toml b/programs/bpf/rust/invoked/Cargo.toml index 5effe173a7154a..53b1326bb93a52 100644 --- a/programs/bpf/rust/invoked/Cargo.toml +++ b/programs/bpf/rust/invoked/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-invoked" -version = "1.11.9" +version = "1.11.10" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,7 +14,7 @@ default = ["program"] program = [] [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.9" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.10" } [lib] crate-type = ["lib", "cdylib"] diff --git a/programs/bpf/rust/iter/Cargo.toml b/programs/bpf/rust/iter/Cargo.toml index 416a62019c88ad..dfd8dd1903160c 100644 --- a/programs/bpf/rust/iter/Cargo.toml +++ b/programs/bpf/rust/iter/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-iter" -version = "1.11.9" +version = "1.11.10" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-iter" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.9" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.10" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/log_data/Cargo.toml b/programs/bpf/rust/log_data/Cargo.toml index 1533ad3c618567..2dc841c50a215c 100644 --- a/programs/bpf/rust/log_data/Cargo.toml +++ b/programs/bpf/rust/log_data/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-log-data" -version = "1.11.9" +version = "1.11.10" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-log-data" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.9" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.10" } [features] default = ["program"] diff --git a/programs/bpf/rust/many_args/Cargo.toml b/programs/bpf/rust/many_args/Cargo.toml index 22c1a3bf0332f7..972d78cfb1379b 100644 --- a/programs/bpf/rust/many_args/Cargo.toml +++ b/programs/bpf/rust/many_args/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-many-args" -version = "1.11.9" +version = "1.11.10" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ documentation = "https://docs.rs/solana-bpf-rust-many-args" edition = "2021" [dependencies] -solana-bpf-rust-many-args-dep = { path = "../many_args_dep", version = "=1.11.9" } -solana-program = { path = "../../../../sdk/program", version = "=1.11.9" } +solana-bpf-rust-many-args-dep = { path = "../many_args_dep", version = "=1.11.10" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.10" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/many_args_dep/Cargo.toml b/programs/bpf/rust/many_args_dep/Cargo.toml index 8a54b1a03a4bbe..bbe5246b7ad221 100644 --- a/programs/bpf/rust/many_args_dep/Cargo.toml +++ b/programs/bpf/rust/many_args_dep/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-many-args-dep" -version = "1.11.9" +version = "1.11.10" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-many-args-dep" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.9" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.10" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/bpf/rust/mem/Cargo.toml b/programs/bpf/rust/mem/Cargo.toml index b75f1ee8aa528c..c534cb4c1a28a9 100644 --- a/programs/bpf/rust/mem/Cargo.toml +++ b/programs/bpf/rust/mem/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-mem" -version = "1.11.9" +version = "1.11.10" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,12 +13,12 @@ edition = "2021" no-entrypoint = [] [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.9" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.10" } [dev-dependencies] -solana-program-runtime = { path = "../../../../program-runtime", version = "=1.11.9" } -solana-program-test = { path = "../../../../program-test", version = "=1.11.9" } -solana-sdk = { path = "../../../../sdk", version = "=1.11.9" } +solana-program-runtime = { path = "../../../../program-runtime", version = "=1.11.10" } +solana-program-test = { path = "../../../../program-test", version = "=1.11.10" } +solana-sdk = { path = "../../../../sdk", version = "=1.11.10" } [lib] crate-type = ["cdylib", "lib"] diff --git a/programs/bpf/rust/membuiltins/Cargo.toml b/programs/bpf/rust/membuiltins/Cargo.toml index 898116bbc421e7..1aef59a97d446f 100644 --- a/programs/bpf/rust/membuiltins/Cargo.toml +++ b/programs/bpf/rust/membuiltins/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-membuiltins" -version = "1.11.9" +version = "1.11.10" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ documentation = "https://docs.rs/solana-bpf-rust-mem" edition = "2021" [dependencies] -solana-bpf-rust-mem = { path = "../mem", version = "=1.11.9", features = [ "no-entrypoint" ] } -solana-program = { path = "../../../../sdk/program", version = "=1.11.9" } +solana-bpf-rust-mem = { path = "../mem", version = "=1.11.10", features = [ "no-entrypoint" ] } +solana-program = { path = "../../../../sdk/program", version = "=1.11.10" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/noop/Cargo.toml b/programs/bpf/rust/noop/Cargo.toml index ccb303a77e7299..072b82bc970f54 100644 --- a/programs/bpf/rust/noop/Cargo.toml +++ b/programs/bpf/rust/noop/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-noop" -version = "1.11.9" +version = "1.11.10" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-noop" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.9" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.10" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/panic/Cargo.toml b/programs/bpf/rust/panic/Cargo.toml index e3d739661ba1b7..d8f308de147088 100644 --- a/programs/bpf/rust/panic/Cargo.toml +++ b/programs/bpf/rust/panic/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-panic" -version = "1.11.9" +version = "1.11.10" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-panic" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.9" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.10" } [features] default = ["custom-panic"] diff --git a/programs/bpf/rust/param_passing/Cargo.toml b/programs/bpf/rust/param_passing/Cargo.toml index 05ea4cfae80244..7a329b6ba74c1c 100644 --- a/programs/bpf/rust/param_passing/Cargo.toml +++ b/programs/bpf/rust/param_passing/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-param-passing" -version = "1.11.9" +version = "1.11.10" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ documentation = "https://docs.rs/solana-bpf-rust-param-passing" edition = "2021" [dependencies] -solana-bpf-rust-param-passing-dep = { path = "../param_passing_dep", version = "=1.11.9" } -solana-program = { path = "../../../../sdk/program", version = "=1.11.9" } +solana-bpf-rust-param-passing-dep = { path = "../param_passing_dep", version = "=1.11.10" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.10" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/param_passing_dep/Cargo.toml b/programs/bpf/rust/param_passing_dep/Cargo.toml index c3ab378b560cd1..0483fdd6e96f1a 100644 --- a/programs/bpf/rust/param_passing_dep/Cargo.toml +++ b/programs/bpf/rust/param_passing_dep/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-param-passing-dep" -version = "1.11.9" +version = "1.11.10" description = "Solana BPF program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-param-passing-dep" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.9" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.10" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/bpf/rust/rand/Cargo.toml b/programs/bpf/rust/rand/Cargo.toml index 89e75f4c9292e2..f8e8ae55eaae17 100644 --- a/programs/bpf/rust/rand/Cargo.toml +++ b/programs/bpf/rust/rand/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-rand" -version = "1.11.9" +version = "1.11.10" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,7 +12,7 @@ edition = "2021" [dependencies] getrandom = { version = "0.1.14", features = ["dummy"] } rand = "0.7" -solana-program = { path = "../../../../sdk/program", version = "=1.11.9" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.10" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/realloc/Cargo.toml b/programs/bpf/rust/realloc/Cargo.toml index 00ee51085710a0..8932c9a7253db7 100644 --- a/programs/bpf/rust/realloc/Cargo.toml +++ b/programs/bpf/rust/realloc/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-realloc" -version = "1.11.9" +version = "1.11.10" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,7 +14,7 @@ default = ["program"] program = [] [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.9" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.10" } [lib] crate-type = ["lib", "cdylib"] diff --git a/programs/bpf/rust/realloc_invoke/Cargo.toml b/programs/bpf/rust/realloc_invoke/Cargo.toml index f8ef754dda19e1..008cb2235314df 100644 --- a/programs/bpf/rust/realloc_invoke/Cargo.toml +++ b/programs/bpf/rust/realloc_invoke/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-realloc-invoke" -version = "1.11.9" +version = "1.11.10" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,8 +14,8 @@ default = ["program"] program = [] [dependencies] -solana-bpf-rust-realloc = { path = "../realloc", version = "=1.11.9", default-features = false } -solana-program = { path = "../../../../sdk/program", version = "=1.11.9" } +solana-bpf-rust-realloc = { path = "../realloc", version = "=1.11.10", default-features = false } +solana-program = { path = "../../../../sdk/program", version = "=1.11.10" } [lib] crate-type = ["lib", "cdylib"] diff --git a/programs/bpf/rust/ro_account_modify/Cargo.toml b/programs/bpf/rust/ro_account_modify/Cargo.toml index e53564c56b6a12..4198e3efe70861 100644 --- a/programs/bpf/rust/ro_account_modify/Cargo.toml +++ b/programs/bpf/rust/ro_account_modify/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-ro-account_modify" -version = "1.11.9" +version = "1.11.10" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-ro-modify" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.9" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.10" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/ro_modify/Cargo.toml b/programs/bpf/rust/ro_modify/Cargo.toml index 331eae0d2832d3..9b9241eda4a6f0 100644 --- a/programs/bpf/rust/ro_modify/Cargo.toml +++ b/programs/bpf/rust/ro_modify/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-ro-modify" -version = "1.11.9" +version = "1.11.10" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-ro-modify" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.9" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.10" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/sanity/Cargo.toml b/programs/bpf/rust/sanity/Cargo.toml index 2294e9e3a252b8..d3ff4158f15d19 100644 --- a/programs/bpf/rust/sanity/Cargo.toml +++ b/programs/bpf/rust/sanity/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-sanity" -version = "1.11.9" +version = "1.11.10" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,12 +13,12 @@ edition = "2021" test-bpf = [] [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.9" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.10" } [dev-dependencies] -solana-program-runtime = { path = "../../../../program-runtime", version = "=1.11.9" } -solana-program-test = { path = "../../../../program-test", version = "=1.11.9" } -solana-sdk = { path = "../../../../sdk", version = "=1.11.9" } +solana-program-runtime = { path = "../../../../program-runtime", version = "=1.11.10" } +solana-program-test = { path = "../../../../program-test", version = "=1.11.10" } +solana-sdk = { path = "../../../../sdk", version = "=1.11.10" } [lib] crate-type = ["cdylib", "lib"] diff --git a/programs/bpf/rust/secp256k1_recover/Cargo.toml b/programs/bpf/rust/secp256k1_recover/Cargo.toml index 25a3861e71752b..687c143eac9e21 100644 --- a/programs/bpf/rust/secp256k1_recover/Cargo.toml +++ b/programs/bpf/rust/secp256k1_recover/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-secp256k1-recover" -version = "1.11.9" +version = "1.11.10" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -11,7 +11,7 @@ edition = "2021" [dependencies] libsecp256k1 = { version = "0.7.0", default-features = false } -solana-program = { path = "../../../../sdk/program", version = "=1.11.9" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.10" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/sha/Cargo.toml b/programs/bpf/rust/sha/Cargo.toml index f5bb0cb3599e06..61aceb32ad067f 100644 --- a/programs/bpf/rust/sha/Cargo.toml +++ b/programs/bpf/rust/sha/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-sha" -version = "1.11.9" +version = "1.11.10" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -11,7 +11,7 @@ edition = "2021" [dependencies] blake3 = "1.0.0" -solana-program = { path = "../../../../sdk/program", version = "=1.11.9" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.10" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/sibling_inner_instruction/Cargo.toml b/programs/bpf/rust/sibling_inner_instruction/Cargo.toml index 3b8f2672811a88..5d259c45f5c90f 100644 --- a/programs/bpf/rust/sibling_inner_instruction/Cargo.toml +++ b/programs/bpf/rust/sibling_inner_instruction/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-sibling_inner-instructions" -version = "1.11.9" +version = "1.11.10" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-log-data" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.9" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.10" } [features] default = ["program"] diff --git a/programs/bpf/rust/sibling_instruction/Cargo.toml b/programs/bpf/rust/sibling_instruction/Cargo.toml index 4deb61f4ea5bc5..233bf2a2622950 100644 --- a/programs/bpf/rust/sibling_instruction/Cargo.toml +++ b/programs/bpf/rust/sibling_instruction/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-sibling-instructions" -version = "1.11.9" +version = "1.11.10" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-log-data" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.9" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.10" } [features] default = ["program"] diff --git a/programs/bpf/rust/simulation/Cargo.toml b/programs/bpf/rust/simulation/Cargo.toml index db732cc29c789c..b147d9c210b599 100644 --- a/programs/bpf/rust/simulation/Cargo.toml +++ b/programs/bpf/rust/simulation/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-simulation" -version = "1.11.9" +version = "1.11.10" description = "Solana BPF Program Simulation Differences" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,13 +13,13 @@ edition = "2021" test-bpf = [] [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.9" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.10" } [dev-dependencies] -solana-logger = { path = "../../../../logger", version = "=1.11.9" } -solana-program-test = { path = "../../../../program-test", version = "=1.11.9" } -solana-sdk = { path = "../../../../sdk", version = "=1.11.9" } -solana-validator = { path = "../../../../validator", version = "=1.11.9" } +solana-logger = { path = "../../../../logger", version = "=1.11.10" } +solana-program-test = { path = "../../../../program-test", version = "=1.11.10" } +solana-sdk = { path = "../../../../sdk", version = "=1.11.10" } +solana-validator = { path = "../../../../validator", version = "=1.11.10" } [lib] crate-type = ["cdylib", "lib"] diff --git a/programs/bpf/rust/spoof1/Cargo.toml b/programs/bpf/rust/spoof1/Cargo.toml index a29494dba92f61..ceef89461c94ff 100644 --- a/programs/bpf/rust/spoof1/Cargo.toml +++ b/programs/bpf/rust/spoof1/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-spoof1" -version = "1.11.9" +version = "1.11.10" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-spoof1" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.9" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.10" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/spoof1_system/Cargo.toml b/programs/bpf/rust/spoof1_system/Cargo.toml index fa67a4c5614d58..3c143a480ed714 100644 --- a/programs/bpf/rust/spoof1_system/Cargo.toml +++ b/programs/bpf/rust/spoof1_system/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-spoof1-system" -version = "1.11.9" +version = "1.11.10" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-spoof1-system" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.9" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.10" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/sysvar/Cargo.toml b/programs/bpf/rust/sysvar/Cargo.toml index ca517c3c1b06c2..69500428467551 100644 --- a/programs/bpf/rust/sysvar/Cargo.toml +++ b/programs/bpf/rust/sysvar/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-sysvar" -version = "1.11.9" +version = "1.11.10" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,12 +10,12 @@ documentation = "https://docs.rs/solana-bpf-rust-sysvar" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.9" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.10" } [dev-dependencies] -solana-program-runtime = { path = "../../../../program-runtime", version = "=1.11.9" } -solana-program-test = { path = "../../../../program-test", version = "=1.11.9" } -solana-sdk = { path = "../../../../sdk", version = "=1.11.9" } +solana-program-runtime = { path = "../../../../program-runtime", version = "=1.11.10" } +solana-program-test = { path = "../../../../program-test", version = "=1.11.10" } +solana-sdk = { path = "../../../../sdk", version = "=1.11.10" } [lib] crate-type = ["cdylib", "lib"] diff --git a/programs/bpf/rust/upgradeable/Cargo.toml b/programs/bpf/rust/upgradeable/Cargo.toml index e54f6ff85495d6..e676fb12a55ef1 100644 --- a/programs/bpf/rust/upgradeable/Cargo.toml +++ b/programs/bpf/rust/upgradeable/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-upgradeable" -version = "1.11.9" +version = "1.11.10" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-upgradeable" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.9" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.10" } [lib] name = "solana_bpf_rust_upgradeable" diff --git a/programs/bpf/rust/upgraded/Cargo.toml b/programs/bpf/rust/upgraded/Cargo.toml index dc8941a788cca2..0993e3c9502960 100644 --- a/programs/bpf/rust/upgraded/Cargo.toml +++ b/programs/bpf/rust/upgraded/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-upgraded" -version = "1.11.9" +version = "1.11.10" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-upgraded" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.9" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.10" } [lib] name = "solana_bpf_rust_upgraded" diff --git a/programs/bpf_loader/Cargo.toml b/programs/bpf_loader/Cargo.toml index 79aee7f2f38d07..37426e56077853 100644 --- a/programs/bpf_loader/Cargo.toml +++ b/programs/bpf_loader/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-loader-program" -version = "1.11.9" +version = "1.11.10" description = "Solana BPF loader" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,17 +14,17 @@ bincode = "1.3.3" byteorder = "1.4.3" libsecp256k1 = "0.6.0" log = "0.4.17" -solana-measure = { path = "../../measure", version = "=1.11.9" } -solana-metrics = { path = "../../metrics", version = "=1.11.9" } -solana-program-runtime = { path = "../../program-runtime", version = "=1.11.9" } -solana-sdk = { path = "../../sdk", version = "=1.11.9" } -solana-zk-token-sdk = { path = "../../zk-token-sdk", version = "=1.11.9" } +solana-measure = { path = "../../measure", version = "=1.11.10" } +solana-metrics = { path = "../../metrics", version = "=1.11.10" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.11.10" } +solana-sdk = { path = "../../sdk", version = "=1.11.10" } +solana-zk-token-sdk = { path = "../../zk-token-sdk", version = "=1.11.10" } solana_rbpf = "=0.2.31" thiserror = "1.0" [dev-dependencies] rand = "0.7.3" -solana-runtime = { path = "../../runtime", version = "=1.11.9" } +solana-runtime = { path = "../../runtime", version = "=1.11.10" } [lib] crate-type = ["lib"] diff --git a/programs/bpf_loader/gen-syscall-list/Cargo.toml b/programs/bpf_loader/gen-syscall-list/Cargo.toml index 0f2816c80e7d0c..d88a5fe8c63b9f 100644 --- a/programs/bpf_loader/gen-syscall-list/Cargo.toml +++ b/programs/bpf_loader/gen-syscall-list/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "gen-syscall-list" -version = "1.11.9" +version = "1.11.10" edition = "2021" license = "Apache-2.0" publish = false diff --git a/programs/compute-budget/Cargo.toml b/programs/compute-budget/Cargo.toml index 79e26e61abf9f6..0d94c497405cbc 100644 --- a/programs/compute-budget/Cargo.toml +++ b/programs/compute-budget/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "solana-compute-budget-program" description = "Solana Compute Budget program" -version = "1.11.9" +version = "1.11.10" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-compute-budget-program" repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ license = "Apache-2.0" edition = "2021" [dependencies] -solana-program-runtime = { path = "../../program-runtime", version = "=1.11.9" } -solana-sdk = { path = "../../sdk", version = "=1.11.9" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.11.10" } +solana-sdk = { path = "../../sdk", version = "=1.11.10" } [lib] crate-type = ["lib"] diff --git a/programs/config/Cargo.toml b/programs/config/Cargo.toml index 574a082df4d331..80f761589fb02c 100644 --- a/programs/config/Cargo.toml +++ b/programs/config/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-config-program" -version = "1.11.9" +version = "1.11.10" description = "Solana Config program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,11 +14,11 @@ bincode = "1.3.3" chrono = { version = "0.4.11", features = ["serde"] } serde = "1.0.138" serde_derive = "1.0.103" -solana-program-runtime = { path = "../../program-runtime", version = "=1.11.9" } -solana-sdk = { path = "../../sdk", version = "=1.11.9" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.11.10" } +solana-sdk = { path = "../../sdk", version = "=1.11.10" } [dev-dependencies] -solana-logger = { path = "../../logger", version = "=1.11.9" } +solana-logger = { path = "../../logger", version = "=1.11.10" } [lib] crate-type = ["lib"] diff --git a/programs/ed25519-tests/Cargo.toml b/programs/ed25519-tests/Cargo.toml index efc31aa617611d..385361362e526e 100644 --- a/programs/ed25519-tests/Cargo.toml +++ b/programs/ed25519-tests/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-ed25519-program-tests" -version = "1.11.9" +version = "1.11.10" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" @@ -12,8 +12,8 @@ publish = false assert_matches = "1.5.0" ed25519-dalek = "=1.0.1" rand = "0.7.0" -solana-program-test = { path = "../../program-test", version = "=1.11.9" } -solana-sdk = { path = "../../sdk", version = "=1.11.9" } +solana-program-test = { path = "../../program-test", version = "=1.11.10" } +solana-sdk = { path = "../../sdk", version = "=1.11.10" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/stake/Cargo.toml b/programs/stake/Cargo.toml index 08ace1cdd44970..8c0af49522177f 100644 --- a/programs/stake/Cargo.toml +++ b/programs/stake/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-stake-program" -version = "1.11.9" +version = "1.11.10" description = "Solana Stake program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -16,19 +16,19 @@ num-derive = "0.3" num-traits = "0.2" serde = "1.0.138" serde_derive = "1.0.103" -solana-config-program = { path = "../config", version = "=1.11.9" } -solana-frozen-abi = { path = "../../frozen-abi", version = "=1.11.9" } -solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.11.9" } -solana-metrics = { path = "../../metrics", version = "=1.11.9" } -solana-program-runtime = { path = "../../program-runtime", version = "=1.11.9" } -solana-sdk = { path = "../../sdk", version = "=1.11.9" } -solana-vote-program = { path = "../vote", version = "=1.11.9" } +solana-config-program = { path = "../config", version = "=1.11.10" } +solana-frozen-abi = { path = "../../frozen-abi", version = "=1.11.10" } +solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.11.10" } +solana-metrics = { path = "../../metrics", version = "=1.11.10" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.11.10" } +solana-sdk = { path = "../../sdk", version = "=1.11.10" } +solana-vote-program = { path = "../vote", version = "=1.11.10" } thiserror = "1.0" [dev-dependencies] assert_matches = "1.5.0" proptest = "1.0" -solana-logger = { path = "../../logger", version = "=1.11.9" } +solana-logger = { path = "../../logger", version = "=1.11.10" } test-case = "2.1.0" [build-dependencies] diff --git a/programs/vote/Cargo.toml b/programs/vote/Cargo.toml index 3002d61702dd5f..78dbdaa2879ce8 100644 --- a/programs/vote/Cargo.toml +++ b/programs/vote/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-vote-program" -version = "1.11.9" +version = "1.11.10" description = "Solana Vote program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -16,15 +16,15 @@ num-derive = "0.3" num-traits = "0.2" serde = "1.0.138" serde_derive = "1.0.103" -solana-frozen-abi = { path = "../../frozen-abi", version = "=1.11.9" } -solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.11.9" } -solana-metrics = { path = "../../metrics", version = "=1.11.9" } -solana-program-runtime = { path = "../../program-runtime", version = "=1.11.9" } -solana-sdk = { path = "../../sdk", version = "=1.11.9" } +solana-frozen-abi = { path = "../../frozen-abi", version = "=1.11.10" } +solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.11.10" } +solana-metrics = { path = "../../metrics", version = "=1.11.10" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.11.10" } +solana-sdk = { path = "../../sdk", version = "=1.11.10" } thiserror = "1.0" [dev-dependencies] -solana-logger = { path = "../../logger", version = "=1.11.9" } +solana-logger = { path = "../../logger", version = "=1.11.10" } [build-dependencies] rustc_version = "0.4" diff --git a/programs/zk-token-proof/Cargo.toml b/programs/zk-token-proof/Cargo.toml index 48f17f9d76f633..dbd61a571ec4ac 100644 --- a/programs/zk-token-proof/Cargo.toml +++ b/programs/zk-token-proof/Cargo.toml @@ -3,7 +3,7 @@ name = "solana-zk-token-proof-program" description = "Solana Zk Token Proof Program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" -version = "1.11.9" +version = "1.11.10" license = "Apache-2.0" edition = "2021" @@ -12,6 +12,6 @@ bytemuck = { version = "1.11.0", features = ["derive"] } getrandom = { version = "0.1", features = ["dummy"] } num-derive = "0.3" num-traits = "0.2" -solana-program-runtime = { path = "../../program-runtime", version = "=1.11.9" } -solana-sdk = { path = "../../sdk", version = "=1.11.9" } -solana-zk-token-sdk = { path = "../../zk-token-sdk", version = "=1.11.9" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.11.10" } +solana-sdk = { path = "../../sdk", version = "=1.11.10" } +solana-zk-token-sdk = { path = "../../zk-token-sdk", version = "=1.11.10" } diff --git a/rayon-threadlimit/Cargo.toml b/rayon-threadlimit/Cargo.toml index 81f1134f779289..f9eac3bd5343ee 100644 --- a/rayon-threadlimit/Cargo.toml +++ b/rayon-threadlimit/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-rayon-threadlimit" -version = "1.11.9" +version = "1.11.10" description = "solana-rayon-threadlimit" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-rayon-threadlimit" diff --git a/rbpf-cli/Cargo.toml b/rbpf-cli/Cargo.toml index 647c0533e02f22..31d5814ddcc722 100644 --- a/rbpf-cli/Cargo.toml +++ b/rbpf-cli/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "rbpf-cli" -version = "1.11.9" +version = "1.11.10" description = "CLI to test and analyze eBPF programs" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/rbpf" @@ -13,8 +13,8 @@ publish = false clap = { version = "3.1.5", features = ["cargo"] } serde = "1.0.138" serde_json = "1.0.81" -solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.11.9" } -solana-logger = { path = "../logger", version = "=1.11.9" } -solana-program-runtime = { path = "../program-runtime", version = "=1.11.9" } -solana-sdk = { path = "../sdk", version = "=1.11.9" } +solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.11.10" } +solana-logger = { path = "../logger", version = "=1.11.10" } +solana-program-runtime = { path = "../program-runtime", version = "=1.11.10" } +solana-sdk = { path = "../sdk", version = "=1.11.10" } solana_rbpf = "=0.2.31" diff --git a/remote-wallet/Cargo.toml b/remote-wallet/Cargo.toml index 83fe8f5109de2e..09a8ba59e126bc 100644 --- a/remote-wallet/Cargo.toml +++ b/remote-wallet/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-remote-wallet" description = "Blockchain, Rebuilt for Scale" -version = "1.11.9" +version = "1.11.10" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -19,7 +19,7 @@ num-traits = { version = "0.2" } parking_lot = "0.12" qstring = "0.7.2" semver = "1.0" -solana-sdk = { path = "../sdk", version = "=1.11.9" } +solana-sdk = { path = "../sdk", version = "=1.11.10" } thiserror = "1.0" uriparse = "0.6.4" diff --git a/rpc-test/Cargo.toml b/rpc-test/Cargo.toml index cb88f6722227f6..b603de23208ac0 100644 --- a/rpc-test/Cargo.toml +++ b/rpc-test/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-rpc-test" -version = "1.11.9" +version = "1.11.10" description = "Solana RPC Test" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -19,17 +19,17 @@ log = "0.4.17" reqwest = { version = "0.11.11", default-features = false, features = ["blocking", "brotli", "deflate", "gzip", "rustls-tls", "json"] } serde = "1.0.138" serde_json = "1.0.81" -solana-account-decoder = { path = "../account-decoder", version = "=1.11.9" } -solana-client = { path = "../client", version = "=1.11.9" } -solana-rpc = { path = "../rpc", version = "=1.11.9" } -solana-sdk = { path = "../sdk", version = "=1.11.9" } -solana-streamer = { path = "../streamer", version = "=1.11.9" } -solana-test-validator = { path = "../test-validator", version = "=1.11.9" } -solana-transaction-status = { path = "../transaction-status", version = "=1.11.9" } +solana-account-decoder = { path = "../account-decoder", version = "=1.11.10" } +solana-client = { path = "../client", version = "=1.11.10" } +solana-rpc = { path = "../rpc", version = "=1.11.10" } +solana-sdk = { path = "../sdk", version = "=1.11.10" } +solana-streamer = { path = "../streamer", version = "=1.11.10" } +solana-test-validator = { path = "../test-validator", version = "=1.11.10" } +solana-transaction-status = { path = "../transaction-status", version = "=1.11.10" } tokio = { version = "~1.14.1", features = ["full"] } [dev-dependencies] -solana-logger = { path = "../logger", version = "=1.11.9" } +solana-logger = { path = "../logger", version = "=1.11.10" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/rpc/Cargo.toml b/rpc/Cargo.toml index 3e2291294ca589..f99c3a84ab4d66 100644 --- a/rpc/Cargo.toml +++ b/rpc/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-rpc" -version = "1.11.9" +version = "1.11.10" description = "Solana RPC" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -29,26 +29,26 @@ serde = "1.0.138" serde_derive = "1.0.103" serde_json = "1.0.81" soketto = "0.7" -solana-account-decoder = { path = "../account-decoder", version = "=1.11.9" } -solana-client = { path = "../client", version = "=1.11.9" } -solana-entry = { path = "../entry", version = "=1.11.9" } -solana-faucet = { path = "../faucet", version = "=1.11.9" } -solana-gossip = { path = "../gossip", version = "=1.11.9" } -solana-ledger = { path = "../ledger", version = "=1.11.9" } -solana-measure = { path = "../measure", version = "=1.11.9" } -solana-metrics = { path = "../metrics", version = "=1.11.9" } -solana-perf = { path = "../perf", version = "=1.11.9" } -solana-poh = { path = "../poh", version = "=1.11.9" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.11.9" } -solana-runtime = { path = "../runtime", version = "=1.11.9" } -solana-sdk = { path = "../sdk", version = "=1.11.9" } -solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.11.9" } -solana-stake-program = { path = "../programs/stake", version = "=1.11.9" } -solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.11.9" } -solana-streamer = { path = "../streamer", version = "=1.11.9" } -solana-transaction-status = { path = "../transaction-status", version = "=1.11.9" } -solana-version = { path = "../version", version = "=1.11.9" } -solana-vote-program = { path = "../programs/vote", version = "=1.11.9" } +solana-account-decoder = { path = "../account-decoder", version = "=1.11.10" } +solana-client = { path = "../client", version = "=1.11.10" } +solana-entry = { path = "../entry", version = "=1.11.10" } +solana-faucet = { path = "../faucet", version = "=1.11.10" } +solana-gossip = { path = "../gossip", version = "=1.11.10" } +solana-ledger = { path = "../ledger", version = "=1.11.10" } +solana-measure = { path = "../measure", version = "=1.11.10" } +solana-metrics = { path = "../metrics", version = "=1.11.10" } +solana-perf = { path = "../perf", version = "=1.11.10" } +solana-poh = { path = "../poh", version = "=1.11.10" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.11.10" } +solana-runtime = { path = "../runtime", version = "=1.11.10" } +solana-sdk = { path = "../sdk", version = "=1.11.10" } +solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.11.10" } +solana-stake-program = { path = "../programs/stake", version = "=1.11.10" } +solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.11.10" } +solana-streamer = { path = "../streamer", version = "=1.11.10" } +solana-transaction-status = { path = "../transaction-status", version = "=1.11.10" } +solana-version = { path = "../version", version = "=1.11.10" } +solana-vote-program = { path = "../programs/vote", version = "=1.11.10" } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } spl-token-2022 = { version = "=0.4.2", features = ["no-entrypoint"] } stream-cancel = "0.8.1" @@ -58,9 +58,9 @@ tokio-util = { version = "0.6", features = ["codec", "compat"] } [dev-dependencies] serial_test = "0.8.0" -solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.11.9" } -solana-net-utils = { path = "../net-utils", version = "=1.11.9" } -solana-stake-program = { path = "../programs/stake", version = "=1.11.9" } +solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.11.10" } +solana-net-utils = { path = "../net-utils", version = "=1.11.10" } +solana-stake-program = { path = "../programs/stake", version = "=1.11.10" } symlink = "0.1.0" [lib] diff --git a/runtime/Cargo.toml b/runtime/Cargo.toml index 140e80ff802bc4..eff524decedd05 100644 --- a/runtime/Cargo.toml +++ b/runtime/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-runtime" -version = "1.11.9" +version = "1.11.10" description = "Solana runtime" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -39,21 +39,21 @@ rayon = "1.5.3" regex = "1.5.6" serde = { version = "1.0.138", features = ["rc"] } serde_derive = "1.0.103" -solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.11.9" } -solana-bucket-map = { path = "../bucket_map", version = "=1.11.9" } -solana-compute-budget-program = { path = "../programs/compute-budget", version = "=1.11.9" } -solana-config-program = { path = "../programs/config", version = "=1.11.9" } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.11.9" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.11.9" } -solana-measure = { path = "../measure", version = "=1.11.9" } -solana-metrics = { path = "../metrics", version = "=1.11.9" } -solana-program-runtime = { path = "../program-runtime", version = "=1.11.9" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.11.9" } -solana-sdk = { path = "../sdk", version = "=1.11.9" } -solana-stake-program = { path = "../programs/stake", version = "=1.11.9" } -solana-vote-program = { path = "../programs/vote", version = "=1.11.9" } -solana-zk-token-proof-program = { path = "../programs/zk-token-proof", version = "=1.11.9" } -solana-zk-token-sdk = { path = "../zk-token-sdk", version = "=1.11.9" } +solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.11.10" } +solana-bucket-map = { path = "../bucket_map", version = "=1.11.10" } +solana-compute-budget-program = { path = "../programs/compute-budget", version = "=1.11.10" } +solana-config-program = { path = "../programs/config", version = "=1.11.10" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.11.10" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.11.10" } +solana-measure = { path = "../measure", version = "=1.11.10" } +solana-metrics = { path = "../metrics", version = "=1.11.10" } +solana-program-runtime = { path = "../program-runtime", version = "=1.11.10" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.11.10" } +solana-sdk = { path = "../sdk", version = "=1.11.10" } +solana-stake-program = { path = "../programs/stake", version = "=1.11.10" } +solana-vote-program = { path = "../programs/vote", version = "=1.11.10" } +solana-zk-token-proof-program = { path = "../programs/zk-token-proof", version = "=1.11.10" } +solana-zk-token-sdk = { path = "../zk-token-sdk", version = "=1.11.10" } strum = { version = "0.24", features = ["derive"] } strum_macros = "0.24" symlink = "0.1.0" @@ -71,7 +71,7 @@ assert_matches = "1.5.0" ed25519-dalek = "=1.0.1" libsecp256k1 = "0.6.0" rand_chacha = "0.2.2" -solana-logger = { path = "../logger", version = "=1.11.9" } +solana-logger = { path = "../logger", version = "=1.11.10" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/runtime/store-tool/Cargo.toml b/runtime/store-tool/Cargo.toml index bc7b748a630b88..359e61d5fe0a01 100644 --- a/runtime/store-tool/Cargo.toml +++ b/runtime/store-tool/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-store-tool" description = "Tool to inspect append vecs" -version = "1.11.9" +version = "1.11.10" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -12,9 +12,9 @@ publish = false [dependencies] clap = "2.33.1" log = { version = "0.4.17" } -solana-logger = { path = "../../logger", version = "=1.11.9" } -solana-runtime = { path = "..", version = "=1.11.9" } -solana-version = { path = "../../version", version = "=1.11.9" } +solana-logger = { path = "../../logger", version = "=1.11.10" } +solana-runtime = { path = "..", version = "=1.11.10" } +solana-version = { path = "../../version", version = "=1.11.10" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/sdk/Cargo.toml b/sdk/Cargo.toml index f3a79dd30d9863..170d8ea1ef74c2 100644 --- a/sdk/Cargo.toml +++ b/sdk/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-sdk" -version = "1.11.9" +version = "1.11.10" description = "Solana SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -71,11 +71,11 @@ serde_derive = "1.0.103" serde_json = { version = "1.0.81", optional = true } sha2 = "0.10.2" sha3 = { version = "0.10.1", optional = true } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.11.9" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.11.9" } -solana-logger = { path = "../logger", version = "=1.11.9", optional = true } -solana-program = { path = "program", version = "=1.11.9" } -solana-sdk-macro = { path = "macro", version = "=1.11.9" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.11.10" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.11.10" } +solana-logger = { path = "../logger", version = "=1.11.10", optional = true } +solana-program = { path = "program", version = "=1.11.10" } +solana-sdk-macro = { path = "macro", version = "=1.11.10" } thiserror = "1.0" uriparse = "0.6.4" wasm-bindgen = "0.2" diff --git a/sdk/cargo-build-bpf/Cargo.toml b/sdk/cargo-build-bpf/Cargo.toml index 45d42f6f143979..967b1ac82b02f6 100644 --- a/sdk/cargo-build-bpf/Cargo.toml +++ b/sdk/cargo-build-bpf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-cargo-build-bpf" -version = "1.11.9" +version = "1.11.10" description = "Compile a local package and all of its dependencies using the Solana SBF SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,7 +12,7 @@ publish = false [dependencies] cargo_metadata = "0.15.0" clap = { version = "3.1.5", features = ["cargo", "env"] } -solana-sdk = { path = "..", version = "=1.11.9" } +solana-sdk = { path = "..", version = "=1.11.10" } [features] program = [] diff --git a/sdk/cargo-build-sbf/Cargo.toml b/sdk/cargo-build-sbf/Cargo.toml index 4b013ee94eb4c0..fbe4c6e0540539 100644 --- a/sdk/cargo-build-sbf/Cargo.toml +++ b/sdk/cargo-build-sbf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-cargo-build-sbf" -version = "1.11.9" +version = "1.11.10" description = "Compile a local package and all of its dependencies using the Solana SBF SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -15,9 +15,9 @@ cargo_metadata = "0.15.0" clap = { version = "3.1.5", features = ["cargo", "env"] } log = { version = "0.4.14", features = ["std"] } regex = "1.5.6" -solana-download-utils = { path = "../../download-utils", version = "=1.11.9" } -solana-logger = { path = "../../logger", version = "=1.11.9" } -solana-sdk = { path = "..", version = "=1.11.9" } +solana-download-utils = { path = "../../download-utils", version = "=1.11.10" } +solana-logger = { path = "../../logger", version = "=1.11.10" } +solana-sdk = { path = "..", version = "=1.11.10" } tar = "0.4.38" [dev-dependencies] diff --git a/sdk/cargo-build-sbf/tests/crates/fail/Cargo.toml b/sdk/cargo-build-sbf/tests/crates/fail/Cargo.toml index f294017009e629..b394955a4bcf2c 100644 --- a/sdk/cargo-build-sbf/tests/crates/fail/Cargo.toml +++ b/sdk/cargo-build-sbf/tests/crates/fail/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "fail" -version = "1.11.9" +version = "1.11.10" description = "Solana SBF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ edition = "2021" publish = false [dependencies] -solana-program = { path = "../../../../program", version = "=1.11.9" } +solana-program = { path = "../../../../program", version = "=1.11.10" } [lib] crate-type = ["cdylib"] diff --git a/sdk/cargo-build-sbf/tests/crates/noop/Cargo.toml b/sdk/cargo-build-sbf/tests/crates/noop/Cargo.toml index 3584ccb1435a61..b44937bee0fcae 100644 --- a/sdk/cargo-build-sbf/tests/crates/noop/Cargo.toml +++ b/sdk/cargo-build-sbf/tests/crates/noop/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "noop" -version = "1.11.9" +version = "1.11.10" description = "Solana SBF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ edition = "2021" publish = false [dependencies] -solana-program = { path = "../../../../program", version = "=1.11.9" } +solana-program = { path = "../../../../program", version = "=1.11.10" } [lib] crate-type = ["cdylib"] diff --git a/sdk/cargo-test-bpf/Cargo.toml b/sdk/cargo-test-bpf/Cargo.toml index 2668ec58c42d82..196238d702958a 100644 --- a/sdk/cargo-test-bpf/Cargo.toml +++ b/sdk/cargo-test-bpf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-cargo-test-bpf" -version = "1.11.9" +version = "1.11.10" description = "Execute all unit and integration tests after building with the Solana SBF SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/sdk/cargo-test-sbf/Cargo.toml b/sdk/cargo-test-sbf/Cargo.toml index 309e72f1b40cdf..89ddc95c909c0b 100644 --- a/sdk/cargo-test-sbf/Cargo.toml +++ b/sdk/cargo-test-sbf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-cargo-test-sbf" -version = "1.11.9" +version = "1.11.10" description = "Execute all unit and integration tests after building with the Solana SBF SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/sdk/gen-headers/Cargo.toml b/sdk/gen-headers/Cargo.toml index 9b77595812dd4e..e970a4ba33ee4e 100644 --- a/sdk/gen-headers/Cargo.toml +++ b/sdk/gen-headers/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "gen-headers" -version = "1.11.9" +version = "1.11.10" edition = "2021" license = "Apache-2.0" publish = false diff --git a/sdk/macro/Cargo.toml b/sdk/macro/Cargo.toml index b6f04bfa7aeaf0..bd57e7ce763f6f 100644 --- a/sdk/macro/Cargo.toml +++ b/sdk/macro/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-sdk-macro" -version = "1.11.9" +version = "1.11.10" description = "Solana SDK Macro" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/sdk/program/Cargo.toml b/sdk/program/Cargo.toml index 1065c054dad781..e0d486927c15b4 100644 --- a/sdk/program/Cargo.toml +++ b/sdk/program/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-program" -version = "1.11.9" +version = "1.11.10" description = "Solana Program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -31,9 +31,9 @@ serde_derive = "1.0" serde_json = "1.0" sha2 = "0.10.0" sha3 = "0.10.0" -solana-frozen-abi = { path = "../../frozen-abi", version = "=1.11.9" } -solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.11.9" } -solana-sdk-macro = { path = "../macro", version = "=1.11.9" } +solana-frozen-abi = { path = "../../frozen-abi", version = "=1.11.10" } +solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.11.10" } +solana-sdk-macro = { path = "../macro", version = "=1.11.10" } thiserror = "1.0" [target.'cfg(not(target_os = "solana"))'.dependencies] @@ -50,7 +50,7 @@ wasm-bindgen = "0.2" zeroize = { version = "1.3", default-features = true, features = ["zeroize_derive"] } [target.'cfg(not(target_os = "solana"))'.dev-dependencies] -solana-logger = { path = "../../logger", version = "=1.11.9" } +solana-logger = { path = "../../logger", version = "=1.11.10" } [target.'cfg(target_arch = "wasm32")'.dependencies] console_error_panic_hook = "0.1.7" diff --git a/send-transaction-service/Cargo.toml b/send-transaction-service/Cargo.toml index 095ceb925e728e..a6a9e75a62dc69 100644 --- a/send-transaction-service/Cargo.toml +++ b/send-transaction-service/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-send-transaction-service" -version = "1.11.9" +version = "1.11.10" description = "Solana send transaction service" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,14 +12,14 @@ edition = "2021" [dependencies] crossbeam-channel = "0.5" log = "0.4.17" -solana-client = { path = "../client", version = "=1.11.9" } -solana-measure = { path = "../measure", version = "=1.11.9" } -solana-metrics = { path = "../metrics", version = "=1.11.9" } -solana-runtime = { path = "../runtime", version = "=1.11.9" } -solana-sdk = { path = "../sdk", version = "=1.11.9" } +solana-client = { path = "../client", version = "=1.11.10" } +solana-measure = { path = "../measure", version = "=1.11.10" } +solana-metrics = { path = "../metrics", version = "=1.11.10" } +solana-runtime = { path = "../runtime", version = "=1.11.10" } +solana-sdk = { path = "../sdk", version = "=1.11.10" } [dev-dependencies] -solana-logger = { path = "../logger", version = "=1.11.9" } +solana-logger = { path = "../logger", version = "=1.11.10" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/stake-accounts/Cargo.toml b/stake-accounts/Cargo.toml index 55b194506ac597..7cb017db3be7be 100644 --- a/stake-accounts/Cargo.toml +++ b/stake-accounts/Cargo.toml @@ -3,7 +3,7 @@ name = "solana-stake-accounts" description = "Blockchain, Rebuilt for Scale" authors = ["Solana Maintainers "] edition = "2021" -version = "1.11.9" +version = "1.11.10" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -11,15 +11,15 @@ documentation = "https://docs.rs/solana-stake-accounts" [dependencies] clap = "2.33.1" -solana-clap-utils = { path = "../clap-utils", version = "=1.11.9" } -solana-cli-config = { path = "../cli-config", version = "=1.11.9" } -solana-client = { path = "../client", version = "=1.11.9" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.11.9" } -solana-sdk = { path = "../sdk", version = "=1.11.9" } -solana-stake-program = { path = "../programs/stake", version = "=1.11.9" } +solana-clap-utils = { path = "../clap-utils", version = "=1.11.10" } +solana-cli-config = { path = "../cli-config", version = "=1.11.10" } +solana-client = { path = "../client", version = "=1.11.10" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.11.10" } +solana-sdk = { path = "../sdk", version = "=1.11.10" } +solana-stake-program = { path = "../programs/stake", version = "=1.11.10" } [dev-dependencies] -solana-runtime = { path = "../runtime", version = "=1.11.9" } +solana-runtime = { path = "../runtime", version = "=1.11.10" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/storage-bigtable/Cargo.toml b/storage-bigtable/Cargo.toml index fda99dc3fba014..0c283cccbff19d 100644 --- a/storage-bigtable/Cargo.toml +++ b/storage-bigtable/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-storage-bigtable" -version = "1.11.9" +version = "1.11.10" description = "Solana Storage BigTable" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -27,10 +27,10 @@ prost-types = "0.11.0" serde = "1.0.138" serde_derive = "1.0.103" smpl_jwt = "0.7.1" -solana-metrics = { path = "../metrics", version = "=1.11.9" } -solana-sdk = { path = "../sdk", version = "=1.11.9" } -solana-storage-proto = { path = "../storage-proto", version = "=1.11.9" } -solana-transaction-status = { path = "../transaction-status", version = "=1.11.9" } +solana-metrics = { path = "../metrics", version = "=1.11.10" } +solana-sdk = { path = "../sdk", version = "=1.11.10" } +solana-storage-proto = { path = "../storage-proto", version = "=1.11.10" } +solana-transaction-status = { path = "../transaction-status", version = "=1.11.10" } thiserror = "1.0" tokio = "1" tonic = { version = "0.8.0", features = ["tls", "transport"] } diff --git a/storage-bigtable/build-proto/Cargo.lock b/storage-bigtable/build-proto/Cargo.lock index d1787618d19944..31c47225d7fa41 100644 --- a/storage-bigtable/build-proto/Cargo.lock +++ b/storage-bigtable/build-proto/Cargo.lock @@ -219,7 +219,7 @@ dependencies = [ [[package]] name = "proto" -version = "1.11.9" +version = "1.11.10" dependencies = [ "protobuf-src", "tonic-build", diff --git a/storage-bigtable/build-proto/Cargo.toml b/storage-bigtable/build-proto/Cargo.toml index a2365793de7e5e..14aaa40e380acc 100644 --- a/storage-bigtable/build-proto/Cargo.toml +++ b/storage-bigtable/build-proto/Cargo.toml @@ -7,7 +7,7 @@ license = "Apache-2.0" name = "proto" publish = false repository = "https://github.com/solana-labs/solana" -version = "1.11.9" +version = "1.11.10" [workspace] diff --git a/storage-proto/Cargo.toml b/storage-proto/Cargo.toml index b9c633efddbf7a..d112edf27adc8b 100644 --- a/storage-proto/Cargo.toml +++ b/storage-proto/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-storage-proto" -version = "1.11.9" +version = "1.11.10" description = "Solana Storage Protobuf Definitions" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,9 +14,9 @@ bincode = "1.3.3" bs58 = "0.4.0" prost = "0.11.0" serde = "1.0.138" -solana-account-decoder = { path = "../account-decoder", version = "=1.11.9" } -solana-sdk = { path = "../sdk", version = "=1.11.9" } -solana-transaction-status = { path = "../transaction-status", version = "=1.11.9" } +solana-account-decoder = { path = "../account-decoder", version = "=1.11.10" } +solana-sdk = { path = "../sdk", version = "=1.11.10" } +solana-transaction-status = { path = "../transaction-status", version = "=1.11.10" } [dev-dependencies] enum-iterator = "0.8.1" diff --git a/streamer/Cargo.toml b/streamer/Cargo.toml index a3b27d799fee68..877a73d2f64f44 100644 --- a/streamer/Cargo.toml +++ b/streamer/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-streamer" -version = "1.11.9" +version = "1.11.10" description = "Solana Streamer" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -25,15 +25,15 @@ quinn = "0.8.3" rand = "0.7.0" rcgen = "0.9.2" rustls = { version = "0.20.6", features = ["dangerous_configuration"] } -solana-metrics = { path = "../metrics", version = "=1.11.9" } -solana-perf = { path = "../perf", version = "=1.11.9" } -solana-sdk = { path = "../sdk", version = "=1.11.9" } +solana-metrics = { path = "../metrics", version = "=1.11.10" } +solana-perf = { path = "../perf", version = "=1.11.10" } +solana-sdk = { path = "../sdk", version = "=1.11.10" } thiserror = "1.0" tokio = { version = "1", features = ["full"] } x509-parser = "0.14.0" [dev-dependencies] -solana-logger = { path = "../logger", version = "=1.11.9" } +solana-logger = { path = "../logger", version = "=1.11.10" } [lib] crate-type = ["lib"] diff --git a/sys-tuner/Cargo.toml b/sys-tuner/Cargo.toml index 3bcd5aeac7a258..b6b177cccf2f22 100644 --- a/sys-tuner/Cargo.toml +++ b/sys-tuner/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-sys-tuner" description = "The solana cluster system tuner daemon" -version = "1.11.9" +version = "1.11.10" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,8 +14,8 @@ publish = true clap = "2.33.1" libc = "0.2.126" log = "0.4.17" -solana-logger = { path = "../logger", version = "=1.11.9" } -solana-version = { path = "../version", version = "=1.11.9" } +solana-logger = { path = "../logger", version = "=1.11.10" } +solana-version = { path = "../version", version = "=1.11.10" } [target."cfg(unix)".dependencies] unix_socket2 = "0.5.4" diff --git a/test-validator/Cargo.toml b/test-validator/Cargo.toml index 0cdcc385e53e7f..ecbd151fbfd13f 100644 --- a/test-validator/Cargo.toml +++ b/test-validator/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "solana-test-validator" description = "Blockchain, Rebuilt for Scale" -version = "1.11.9" +version = "1.11.10" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-test-validator" readme = "../README.md" @@ -15,19 +15,19 @@ base64 = "0.13.0" log = "0.4.17" serde_derive = "1.0.103" serde_json = "1.0.81" -solana-cli-output = { path = "../cli-output", version = "=1.11.9" } -solana-client = { path = "../client", version = "=1.11.9" } -solana-core = { path = "../core", version = "=1.11.9" } -solana-gossip = { path = "../gossip", version = "=1.11.9" } -solana-ledger = { path = "../ledger", version = "=1.11.9" } -solana-logger = { path = "../logger", version = "=1.11.9" } -solana-net-utils = { path = "../net-utils", version = "=1.11.9" } -solana-program-runtime = { path = "../program-runtime", version = "=1.11.9" } -solana-program-test = { path = "../program-test", version = "=1.11.9" } -solana-rpc = { path = "../rpc", version = "=1.11.9" } -solana-runtime = { path = "../runtime", version = "=1.11.9" } -solana-sdk = { path = "../sdk", version = "=1.11.9" } -solana-streamer = { path = "../streamer", version = "=1.11.9" } +solana-cli-output = { path = "../cli-output", version = "=1.11.10" } +solana-client = { path = "../client", version = "=1.11.10" } +solana-core = { path = "../core", version = "=1.11.10" } +solana-gossip = { path = "../gossip", version = "=1.11.10" } +solana-ledger = { path = "../ledger", version = "=1.11.10" } +solana-logger = { path = "../logger", version = "=1.11.10" } +solana-net-utils = { path = "../net-utils", version = "=1.11.10" } +solana-program-runtime = { path = "../program-runtime", version = "=1.11.10" } +solana-program-test = { path = "../program-test", version = "=1.11.10" } +solana-rpc = { path = "../rpc", version = "=1.11.10" } +solana-runtime = { path = "../runtime", version = "=1.11.10" } +solana-sdk = { path = "../sdk", version = "=1.11.10" } +solana-streamer = { path = "../streamer", version = "=1.11.10" } tokio = { version = "1", features = ["full"] } [package.metadata.docs.rs] diff --git a/tokens/Cargo.toml b/tokens/Cargo.toml index aa263e215b337e..7645fa25a74800 100644 --- a/tokens/Cargo.toml +++ b/tokens/Cargo.toml @@ -3,7 +3,7 @@ name = "solana-tokens" description = "Blockchain, Rebuilt for Scale" authors = ["Solana Maintainers "] edition = "2021" -version = "1.11.9" +version = "1.11.10" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -19,14 +19,14 @@ indexmap = "1.9.1" indicatif = "0.16.2" pickledb = "0.4.1" serde = { version = "1.0", features = ["derive"] } -solana-account-decoder = { path = "../account-decoder", version = "=1.11.9" } -solana-clap-utils = { path = "../clap-utils", version = "=1.11.9" } -solana-cli-config = { path = "../cli-config", version = "=1.11.9" } -solana-client = { path = "../client", version = "=1.11.9" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.11.9" } -solana-sdk = { path = "../sdk", version = "=1.11.9" } -solana-transaction-status = { path = "../transaction-status", version = "=1.11.9" } -solana-version = { path = "../version", version = "=1.11.9" } +solana-account-decoder = { path = "../account-decoder", version = "=1.11.10" } +solana-clap-utils = { path = "../clap-utils", version = "=1.11.10" } +solana-cli-config = { path = "../cli-config", version = "=1.11.10" } +solana-client = { path = "../client", version = "=1.11.10" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.11.10" } +solana-sdk = { path = "../sdk", version = "=1.11.10" } +solana-transaction-status = { path = "../transaction-status", version = "=1.11.10" } +solana-version = { path = "../version", version = "=1.11.10" } spl-associated-token-account = { version = "=1.1.1" } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } tempfile = "3.3.0" @@ -34,6 +34,6 @@ thiserror = "1.0" [dev-dependencies] bincode = "1.3.3" -solana-logger = { path = "../logger", version = "=1.11.9" } -solana-streamer = { path = "../streamer", version = "=1.11.9" } -solana-test-validator = { path = "../test-validator", version = "=1.11.9" } +solana-logger = { path = "../logger", version = "=1.11.10" } +solana-streamer = { path = "../streamer", version = "=1.11.10" } +solana-test-validator = { path = "../test-validator", version = "=1.11.10" } diff --git a/transaction-dos/Cargo.toml b/transaction-dos/Cargo.toml index 938ec2aff061ce..1162781c1c22a9 100644 --- a/transaction-dos/Cargo.toml +++ b/transaction-dos/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-transaction-dos" -version = "1.11.9" +version = "1.11.10" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,23 +14,23 @@ clap = "2.33.1" log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" -solana-clap-utils = { path = "../clap-utils", version = "=1.11.9" } -solana-cli = { path = "../cli", version = "=1.11.9" } -solana-client = { path = "../client", version = "=1.11.9" } -solana-core = { path = "../core", version = "=1.11.9" } -solana-faucet = { path = "../faucet", version = "=1.11.9" } -solana-gossip = { path = "../gossip", version = "=1.11.9" } -solana-logger = { path = "../logger", version = "=1.11.9" } -solana-measure = { path = "../measure", version = "=1.11.9" } -solana-net-utils = { path = "../net-utils", version = "=1.11.9" } -solana-runtime = { path = "../runtime", version = "=1.11.9" } -solana-sdk = { path = "../sdk", version = "=1.11.9" } -solana-streamer = { path = "../streamer", version = "=1.11.9" } -solana-transaction-status = { path = "../transaction-status", version = "=1.11.9" } -solana-version = { path = "../version", version = "=1.11.9" } +solana-clap-utils = { path = "../clap-utils", version = "=1.11.10" } +solana-cli = { path = "../cli", version = "=1.11.10" } +solana-client = { path = "../client", version = "=1.11.10" } +solana-core = { path = "../core", version = "=1.11.10" } +solana-faucet = { path = "../faucet", version = "=1.11.10" } +solana-gossip = { path = "../gossip", version = "=1.11.10" } +solana-logger = { path = "../logger", version = "=1.11.10" } +solana-measure = { path = "../measure", version = "=1.11.10" } +solana-net-utils = { path = "../net-utils", version = "=1.11.10" } +solana-runtime = { path = "../runtime", version = "=1.11.10" } +solana-sdk = { path = "../sdk", version = "=1.11.10" } +solana-streamer = { path = "../streamer", version = "=1.11.10" } +solana-transaction-status = { path = "../transaction-status", version = "=1.11.10" } +solana-version = { path = "../version", version = "=1.11.10" } [dev-dependencies] -solana-local-cluster = { path = "../local-cluster", version = "=1.11.9" } +solana-local-cluster = { path = "../local-cluster", version = "=1.11.10" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/transaction-status/Cargo.toml b/transaction-status/Cargo.toml index da10acc896338d..3a8d8f035ae8cf 100644 --- a/transaction-status/Cargo.toml +++ b/transaction-status/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-transaction-status" -version = "1.11.9" +version = "1.11.10" description = "Solana transaction status types" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -20,11 +20,11 @@ log = "0.4.17" serde = "1.0.138" serde_derive = "1.0.103" serde_json = "1.0.81" -solana-account-decoder = { path = "../account-decoder", version = "=1.11.9" } -solana-measure = { path = "../measure", version = "=1.11.9" } -solana-metrics = { path = "../metrics", version = "=1.11.9" } -solana-sdk = { path = "../sdk", version = "=1.11.9" } -solana-vote-program = { path = "../programs/vote", version = "=1.11.9" } +solana-account-decoder = { path = "../account-decoder", version = "=1.11.10" } +solana-measure = { path = "../measure", version = "=1.11.10" } +solana-metrics = { path = "../metrics", version = "=1.11.10" } +solana-sdk = { path = "../sdk", version = "=1.11.10" } +solana-vote-program = { path = "../programs/vote", version = "=1.11.10" } spl-associated-token-account = { version = "=1.1.1", features = ["no-entrypoint"] } spl-memo = { version = "=3.0.1", features = ["no-entrypoint"] } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } diff --git a/upload-perf/Cargo.toml b/upload-perf/Cargo.toml index f74450e155c099..e582d040f2c45b 100644 --- a/upload-perf/Cargo.toml +++ b/upload-perf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-upload-perf" -version = "1.11.9" +version = "1.11.10" description = "Metrics Upload Utility" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -11,7 +11,7 @@ publish = false [dependencies] serde_json = "1.0.81" -solana-metrics = { path = "../metrics", version = "=1.11.9" } +solana-metrics = { path = "../metrics", version = "=1.11.10" } [[bin]] name = "solana-upload-perf" diff --git a/validator/Cargo.toml b/validator/Cargo.toml index 63991941d02472..25e7c5ff1c8ae0 100644 --- a/validator/Cargo.toml +++ b/validator/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-validator" description = "Blockchain, Rebuilt for Scale" -version = "1.11.9" +version = "1.11.10" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -28,30 +28,30 @@ num_cpus = "1.13.1" rand = "0.7.0" serde = "1.0.138" serde_json = "1.0.81" -solana-clap-utils = { path = "../clap-utils", version = "=1.11.9" } -solana-cli-config = { path = "../cli-config", version = "=1.11.9" } -solana-client = { path = "../client", version = "=1.11.9" } -solana-core = { path = "../core", version = "=1.11.9" } -solana-download-utils = { path = "../download-utils", version = "=1.11.9" } -solana-entry = { path = "../entry", version = "=1.11.9" } -solana-faucet = { path = "../faucet", version = "=1.11.9" } -solana-genesis-utils = { path = "../genesis-utils", version = "=1.11.9" } -solana-gossip = { path = "../gossip", version = "=1.11.9" } -solana-ledger = { path = "../ledger", version = "=1.11.9" } -solana-logger = { path = "../logger", version = "=1.11.9" } -solana-metrics = { path = "../metrics", version = "=1.11.9" } -solana-net-utils = { path = "../net-utils", version = "=1.11.9" } -solana-perf = { path = "../perf", version = "=1.11.9" } -solana-poh = { path = "../poh", version = "=1.11.9" } -solana-rpc = { path = "../rpc", version = "=1.11.9" } -solana-runtime = { path = "../runtime", version = "=1.11.9" } -solana-sdk = { path = "../sdk", version = "=1.11.9" } -solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.11.9" } -solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.11.9" } -solana-streamer = { path = "../streamer", version = "=1.11.9" } -solana-test-validator = { path = "../test-validator", version = "=1.11.9" } -solana-version = { path = "../version", version = "=1.11.9" } -solana-vote-program = { path = "../programs/vote", version = "=1.11.9" } +solana-clap-utils = { path = "../clap-utils", version = "=1.11.10" } +solana-cli-config = { path = "../cli-config", version = "=1.11.10" } +solana-client = { path = "../client", version = "=1.11.10" } +solana-core = { path = "../core", version = "=1.11.10" } +solana-download-utils = { path = "../download-utils", version = "=1.11.10" } +solana-entry = { path = "../entry", version = "=1.11.10" } +solana-faucet = { path = "../faucet", version = "=1.11.10" } +solana-genesis-utils = { path = "../genesis-utils", version = "=1.11.10" } +solana-gossip = { path = "../gossip", version = "=1.11.10" } +solana-ledger = { path = "../ledger", version = "=1.11.10" } +solana-logger = { path = "../logger", version = "=1.11.10" } +solana-metrics = { path = "../metrics", version = "=1.11.10" } +solana-net-utils = { path = "../net-utils", version = "=1.11.10" } +solana-perf = { path = "../perf", version = "=1.11.10" } +solana-poh = { path = "../poh", version = "=1.11.10" } +solana-rpc = { path = "../rpc", version = "=1.11.10" } +solana-runtime = { path = "../runtime", version = "=1.11.10" } +solana-sdk = { path = "../sdk", version = "=1.11.10" } +solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.11.10" } +solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.11.10" } +solana-streamer = { path = "../streamer", version = "=1.11.10" } +solana-test-validator = { path = "../test-validator", version = "=1.11.10" } +solana-version = { path = "../version", version = "=1.11.10" } +solana-vote-program = { path = "../programs/vote", version = "=1.11.10" } symlink = "0.1.0" [target.'cfg(not(target_env = "msvc"))'.dependencies] diff --git a/version/Cargo.toml b/version/Cargo.toml index b90e0a27bd691e..afc4a4fde93efa 100644 --- a/version/Cargo.toml +++ b/version/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-version" -version = "1.11.9" +version = "1.11.10" description = "Solana Version" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,9 +14,9 @@ log = "0.4.17" semver = "1.0.10" serde = "1.0.138" serde_derive = "1.0.103" -solana-frozen-abi = { path = "../frozen-abi", version = "=1.11.9" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.11.9" } -solana-sdk = { path = "../sdk", version = "=1.11.9" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.11.10" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.11.10" } +solana-sdk = { path = "../sdk", version = "=1.11.10" } [lib] name = "solana_version" diff --git a/watchtower/Cargo.toml b/watchtower/Cargo.toml index 32c5f5a2230ca8..0b9093e022c839 100644 --- a/watchtower/Cargo.toml +++ b/watchtower/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-watchtower" description = "Blockchain, Rebuilt for Scale" -version = "1.11.9" +version = "1.11.10" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -13,15 +13,15 @@ documentation = "https://docs.rs/solana-watchtower" clap = "2.33.1" humantime = "2.0.1" log = "0.4.17" -solana-clap-utils = { path = "../clap-utils", version = "=1.11.9" } -solana-cli-config = { path = "../cli-config", version = "=1.11.9" } -solana-cli-output = { path = "../cli-output", version = "=1.11.9" } -solana-client = { path = "../client", version = "=1.11.9" } -solana-logger = { path = "../logger", version = "=1.11.9" } -solana-metrics = { path = "../metrics", version = "=1.11.9" } -solana-notifier = { path = "../notifier", version = "=1.11.9" } -solana-sdk = { path = "../sdk", version = "=1.11.9" } -solana-version = { path = "../version", version = "=1.11.9" } +solana-clap-utils = { path = "../clap-utils", version = "=1.11.10" } +solana-cli-config = { path = "../cli-config", version = "=1.11.10" } +solana-cli-output = { path = "../cli-output", version = "=1.11.10" } +solana-client = { path = "../client", version = "=1.11.10" } +solana-logger = { path = "../logger", version = "=1.11.10" } +solana-metrics = { path = "../metrics", version = "=1.11.10" } +solana-notifier = { path = "../notifier", version = "=1.11.10" } +solana-sdk = { path = "../sdk", version = "=1.11.10" } +solana-version = { path = "../version", version = "=1.11.10" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/zk-token-sdk/Cargo.toml b/zk-token-sdk/Cargo.toml index da3ae5037ca76c..94bbd070a5f0d6 100644 --- a/zk-token-sdk/Cargo.toml +++ b/zk-token-sdk/Cargo.toml @@ -3,7 +3,7 @@ name = "solana-zk-token-sdk" description = "Solana Zk Token SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" -version = "1.11.9" +version = "1.11.10" license = "Apache-2.0" edition = "2021" @@ -12,7 +12,7 @@ base64 = "0.13" bytemuck = { version = "1.11.0", features = ["derive"] } num-derive = "0.3" num-traits = "0.2" -solana-program = { path = "../sdk/program", version = "=1.11.9" } +solana-program = { path = "../sdk/program", version = "=1.11.10" } [target.'cfg(not(target_os = "solana"))'.dependencies] aes-gcm-siv = "0.10.3" @@ -28,7 +28,7 @@ rand = "0.7" serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" sha3 = "0.9" -solana-sdk = { path = "../sdk", version = "=1.11.9" } +solana-sdk = { path = "../sdk", version = "=1.11.10" } subtle = "2" thiserror = "1.0" zeroize = { version = "1.3", default-features = false, features = ["zeroize_derive"] } From 8e8a76a90a43a64ef611da4771d49e870cc7563f Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 26 Aug 2022 17:59:07 -0500 Subject: [PATCH 072/465] Bump Version to 1.11.11 (#27433) Co-authored-by: willhickey --- Cargo.lock | 484 ++++++++--------- account-decoder/Cargo.toml | 8 +- accounts-bench/Cargo.toml | 12 +- accounts-cluster-bench/Cargo.toml | 34 +- banking-bench/Cargo.toml | 26 +- banks-client/Cargo.toml | 12 +- banks-interface/Cargo.toml | 4 +- banks-server/Cargo.toml | 12 +- bench-streamer/Cargo.toml | 8 +- bench-tps/Cargo.toml | 38 +- bloom/Cargo.toml | 8 +- bucket_map/Cargo.toml | 8 +- clap-utils/Cargo.toml | 8 +- clap-v3-utils/Cargo.toml | 8 +- cli-config/Cargo.toml | 6 +- cli-output/Cargo.toml | 16 +- cli/Cargo.toml | 36 +- client-test/Cargo.toml | 32 +- client/Cargo.toml | 28 +- core/Cargo.toml | 56 +- docs/src/developing/clients/jsonrpc-api.md | 4 +- dos/Cargo.toml | 30 +- download-utils/Cargo.toml | 6 +- entry/Cargo.toml | 16 +- faucet/Cargo.toml | 14 +- frozen-abi/Cargo.toml | 6 +- frozen-abi/macro/Cargo.toml | 2 +- genesis-utils/Cargo.toml | 8 +- genesis/Cargo.toml | 22 +- geyser-plugin-interface/Cargo.toml | 6 +- geyser-plugin-manager/Cargo.toml | 16 +- gossip/Cargo.toml | 38 +- install/Cargo.toml | 14 +- keygen/Cargo.toml | 12 +- ledger-tool/Cargo.toml | 30 +- ledger/Cargo.toml | 40 +- local-cluster/Cargo.toml | 28 +- log-analyzer/Cargo.toml | 6 +- logger/Cargo.toml | 2 +- measure/Cargo.toml | 4 +- merkle-root-bench/Cargo.toml | 12 +- merkle-tree/Cargo.toml | 4 +- metrics/Cargo.toml | 4 +- net-shaper/Cargo.toml | 4 +- net-utils/Cargo.toml | 8 +- notifier/Cargo.toml | 2 +- perf/Cargo.toml | 12 +- poh-bench/Cargo.toml | 14 +- poh/Cargo.toml | 20 +- program-runtime/Cargo.toml | 14 +- program-test/Cargo.toml | 18 +- .../address-lookup-table-tests/Cargo.toml | 8 +- programs/address-lookup-table/Cargo.toml | 12 +- programs/bpf-loader-tests/Cargo.toml | 8 +- programs/bpf/Cargo.lock | 490 +++++++++--------- programs/bpf/Cargo.toml | 28 +- programs/bpf/rust/128bit/Cargo.toml | 6 +- programs/bpf/rust/128bit_dep/Cargo.toml | 4 +- programs/bpf/rust/alloc/Cargo.toml | 4 +- programs/bpf/rust/call_depth/Cargo.toml | 4 +- programs/bpf/rust/caller_access/Cargo.toml | 4 +- programs/bpf/rust/curve25519/Cargo.toml | 6 +- programs/bpf/rust/custom_heap/Cargo.toml | 4 +- programs/bpf/rust/dep_crate/Cargo.toml | 6 +- .../bpf/rust/deprecated_loader/Cargo.toml | 4 +- programs/bpf/rust/dup_accounts/Cargo.toml | 4 +- programs/bpf/rust/error_handling/Cargo.toml | 4 +- programs/bpf/rust/external_spend/Cargo.toml | 4 +- programs/bpf/rust/finalize/Cargo.toml | 4 +- .../rust/get_minimum_delegation/Cargo.toml | 4 +- .../Cargo.toml | 4 +- .../rust/instruction_introspection/Cargo.toml | 4 +- programs/bpf/rust/invoke/Cargo.toml | 4 +- programs/bpf/rust/invoke_and_error/Cargo.toml | 4 +- programs/bpf/rust/invoke_and_ok/Cargo.toml | 4 +- .../bpf/rust/invoke_and_return/Cargo.toml | 4 +- programs/bpf/rust/invoked/Cargo.toml | 4 +- programs/bpf/rust/iter/Cargo.toml | 4 +- programs/bpf/rust/log_data/Cargo.toml | 4 +- programs/bpf/rust/many_args/Cargo.toml | 6 +- programs/bpf/rust/many_args_dep/Cargo.toml | 4 +- programs/bpf/rust/mem/Cargo.toml | 10 +- programs/bpf/rust/membuiltins/Cargo.toml | 6 +- programs/bpf/rust/noop/Cargo.toml | 4 +- programs/bpf/rust/panic/Cargo.toml | 4 +- programs/bpf/rust/param_passing/Cargo.toml | 6 +- .../bpf/rust/param_passing_dep/Cargo.toml | 4 +- programs/bpf/rust/rand/Cargo.toml | 4 +- programs/bpf/rust/realloc/Cargo.toml | 4 +- programs/bpf/rust/realloc_invoke/Cargo.toml | 6 +- .../bpf/rust/ro_account_modify/Cargo.toml | 4 +- programs/bpf/rust/ro_modify/Cargo.toml | 4 +- programs/bpf/rust/sanity/Cargo.toml | 10 +- .../bpf/rust/secp256k1_recover/Cargo.toml | 4 +- programs/bpf/rust/sha/Cargo.toml | 4 +- .../rust/sibling_inner_instruction/Cargo.toml | 4 +- .../bpf/rust/sibling_instruction/Cargo.toml | 4 +- programs/bpf/rust/simulation/Cargo.toml | 12 +- programs/bpf/rust/spoof1/Cargo.toml | 4 +- programs/bpf/rust/spoof1_system/Cargo.toml | 4 +- programs/bpf/rust/sysvar/Cargo.toml | 10 +- programs/bpf/rust/upgradeable/Cargo.toml | 4 +- programs/bpf/rust/upgraded/Cargo.toml | 4 +- programs/bpf_loader/Cargo.toml | 14 +- .../bpf_loader/gen-syscall-list/Cargo.toml | 2 +- programs/compute-budget/Cargo.toml | 6 +- programs/config/Cargo.toml | 8 +- programs/ed25519-tests/Cargo.toml | 6 +- programs/stake/Cargo.toml | 18 +- programs/vote/Cargo.toml | 14 +- programs/zk-token-proof/Cargo.toml | 8 +- rayon-threadlimit/Cargo.toml | 2 +- rbpf-cli/Cargo.toml | 10 +- remote-wallet/Cargo.toml | 4 +- rpc-test/Cargo.toml | 18 +- rpc/Cargo.toml | 48 +- runtime/Cargo.toml | 34 +- runtime/store-tool/Cargo.toml | 8 +- sdk/Cargo.toml | 12 +- sdk/cargo-build-bpf/Cargo.toml | 4 +- sdk/cargo-build-sbf/Cargo.toml | 8 +- .../tests/crates/fail/Cargo.toml | 4 +- .../tests/crates/noop/Cargo.toml | 4 +- sdk/cargo-test-bpf/Cargo.toml | 2 +- sdk/cargo-test-sbf/Cargo.toml | 2 +- sdk/gen-headers/Cargo.toml | 2 +- sdk/macro/Cargo.toml | 2 +- sdk/program/Cargo.toml | 10 +- send-transaction-service/Cargo.toml | 14 +- stake-accounts/Cargo.toml | 16 +- storage-bigtable/Cargo.toml | 10 +- storage-bigtable/build-proto/Cargo.lock | 2 +- storage-bigtable/build-proto/Cargo.toml | 2 +- storage-proto/Cargo.toml | 8 +- streamer/Cargo.toml | 10 +- sys-tuner/Cargo.toml | 6 +- test-validator/Cargo.toml | 28 +- tokens/Cargo.toml | 24 +- transaction-dos/Cargo.toml | 32 +- transaction-status/Cargo.toml | 12 +- upload-perf/Cargo.toml | 4 +- validator/Cargo.toml | 50 +- version/Cargo.toml | 8 +- watchtower/Cargo.toml | 20 +- zk-token-sdk/Cargo.toml | 6 +- 145 files changed, 1268 insertions(+), 1268 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 7eb30dc0574e3d..a8d960a6a441fa 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1686,7 +1686,7 @@ dependencies = [ [[package]] name = "gen-headers" -version = "1.11.10" +version = "1.11.11" dependencies = [ "log", "regex", @@ -1694,7 +1694,7 @@ dependencies = [ [[package]] name = "gen-syscall-list" -version = "1.11.10" +version = "1.11.11" dependencies = [ "regex", ] @@ -3754,15 +3754,15 @@ dependencies = [ [[package]] name = "rbpf-cli" -version = "1.11.10" +version = "1.11.11" dependencies = [ "clap 3.1.8", "serde", "serde_json", "solana-bpf-loader-program", - "solana-logger 1.11.10", + "solana-logger 1.11.11", "solana-program-runtime", - "solana-sdk 1.11.10", + "solana-sdk 1.11.11", "solana_rbpf", ] @@ -4473,7 +4473,7 @@ dependencies = [ [[package]] name = "solana-account-decoder" -version = "1.11.10" +version = "1.11.11" dependencies = [ "Inflector", "base64 0.13.0", @@ -4485,7 +4485,7 @@ dependencies = [ "serde_derive", "serde_json", "solana-config-program", - "solana-sdk 1.11.10", + "solana-sdk 1.11.11", "solana-vote-program", "spl-token", "spl-token-2022", @@ -4495,21 +4495,21 @@ dependencies = [ [[package]] name = "solana-accounts-bench" -version = "1.11.10" +version = "1.11.11" dependencies = [ "clap 2.33.3", "log", "rayon", - "solana-logger 1.11.10", + "solana-logger 1.11.11", "solana-measure", "solana-runtime", - "solana-sdk 1.11.10", + "solana-sdk 1.11.11", "solana-version", ] [[package]] name = "solana-accounts-cluster-bench" -version = "1.11.10" +version = "1.11.11" dependencies = [ "clap 2.33.3", "log", @@ -4522,11 +4522,11 @@ dependencies = [ "solana-faucet", "solana-gossip", "solana-local-cluster", - "solana-logger 1.11.10", + "solana-logger 1.11.11", "solana-measure", "solana-net-utils", "solana-runtime", - "solana-sdk 1.11.10", + "solana-sdk 1.11.11", "solana-streamer", "solana-test-validator", "solana-transaction-status", @@ -4536,7 +4536,7 @@ dependencies = [ [[package]] name = "solana-address-lookup-table-program" -version = "1.11.10" +version = "1.11.11" dependencies = [ "bincode", "bytemuck", @@ -4545,28 +4545,28 @@ dependencies = [ "num-traits", "rustc_version 0.4.0", "serde", - "solana-frozen-abi 1.11.10", - "solana-frozen-abi-macro 1.11.10", - "solana-program 1.11.10", + "solana-frozen-abi 1.11.11", + "solana-frozen-abi-macro 1.11.11", + "solana-program 1.11.11", "solana-program-runtime", - "solana-sdk 1.11.10", + "solana-sdk 1.11.11", "thiserror", ] [[package]] name = "solana-address-lookup-table-program-tests" -version = "1.11.10" +version = "1.11.11" dependencies = [ "assert_matches", "bincode", "solana-address-lookup-table-program", "solana-program-test", - "solana-sdk 1.11.10", + "solana-sdk 1.11.11", ] [[package]] name = "solana-banking-bench" -version = "1.11.10" +version = "1.11.11" dependencies = [ "clap 3.1.8", "crossbeam-channel", @@ -4577,27 +4577,27 @@ dependencies = [ "solana-core", "solana-gossip", "solana-ledger", - "solana-logger 1.11.10", + "solana-logger 1.11.11", "solana-measure", "solana-perf", "solana-poh", "solana-runtime", - "solana-sdk 1.11.10", + "solana-sdk 1.11.11", "solana-streamer", "solana-version", ] [[package]] name = "solana-banks-client" -version = "1.11.10" +version = "1.11.11" dependencies = [ "borsh", "futures 0.3.21", "solana-banks-interface", "solana-banks-server", - "solana-program 1.11.10", + "solana-program 1.11.11", "solana-runtime", - "solana-sdk 1.11.10", + "solana-sdk 1.11.11", "tarpc", "thiserror", "tokio", @@ -4606,16 +4606,16 @@ dependencies = [ [[package]] name = "solana-banks-interface" -version = "1.11.10" +version = "1.11.11" dependencies = [ "serde", - "solana-sdk 1.11.10", + "solana-sdk 1.11.11", "tarpc", ] [[package]] name = "solana-banks-server" -version = "1.11.10" +version = "1.11.11" dependencies = [ "bincode", "crossbeam-channel", @@ -4623,7 +4623,7 @@ dependencies = [ "solana-banks-interface", "solana-client", "solana-runtime", - "solana-sdk 1.11.10", + "solana-sdk 1.11.11", "solana-send-transaction-service", "tarpc", "tokio", @@ -4633,7 +4633,7 @@ dependencies = [ [[package]] name = "solana-bench-streamer" -version = "1.11.10" +version = "1.11.11" dependencies = [ "clap 3.1.8", "crossbeam-channel", @@ -4644,7 +4644,7 @@ dependencies = [ [[package]] name = "solana-bench-tps" -version = "1.11.10" +version = "1.11.11" dependencies = [ "clap 2.33.3", "crossbeam-channel", @@ -4661,13 +4661,13 @@ dependencies = [ "solana-genesis", "solana-gossip", "solana-local-cluster", - "solana-logger 1.11.10", + "solana-logger 1.11.11", "solana-measure", "solana-metrics", "solana-net-utils", "solana-rpc", "solana-runtime", - "solana-sdk 1.11.10", + "solana-sdk 1.11.11", "solana-streamer", "solana-test-validator", "solana-version", @@ -4676,7 +4676,7 @@ dependencies = [ [[package]] name = "solana-bloom" -version = "1.11.10" +version = "1.11.11" dependencies = [ "bv", "fnv", @@ -4686,14 +4686,14 @@ dependencies = [ "rustc_version 0.4.0", "serde", "serde_derive", - "solana-frozen-abi 1.11.10", - "solana-frozen-abi-macro 1.11.10", - "solana-sdk 1.11.10", + "solana-frozen-abi 1.11.11", + "solana-frozen-abi-macro 1.11.11", + "solana-sdk 1.11.11", ] [[package]] name = "solana-bpf-loader-program" -version = "1.11.10" +version = "1.11.11" dependencies = [ "bincode", "byteorder", @@ -4704,26 +4704,26 @@ dependencies = [ "solana-metrics", "solana-program-runtime", "solana-runtime", - "solana-sdk 1.11.10", - "solana-zk-token-sdk 1.11.10", + "solana-sdk 1.11.11", + "solana-zk-token-sdk 1.11.11", "solana_rbpf", "thiserror", ] [[package]] name = "solana-bpf-loader-program-tests" -version = "1.11.10" +version = "1.11.11" dependencies = [ "assert_matches", "bincode", "solana-bpf-loader-program", "solana-program-test", - "solana-sdk 1.11.10", + "solana-sdk 1.11.11", ] [[package]] name = "solana-bucket-map" -version = "1.11.10" +version = "1.11.11" dependencies = [ "fs_extra", "log", @@ -4731,24 +4731,24 @@ dependencies = [ "modular-bitfield", "rand 0.7.3", "rayon", - "solana-logger 1.11.10", + "solana-logger 1.11.11", "solana-measure", - "solana-sdk 1.11.10", + "solana-sdk 1.11.11", "tempfile", ] [[package]] name = "solana-cargo-build-bpf" -version = "1.11.10" +version = "1.11.11" dependencies = [ "cargo_metadata", "clap 3.1.8", - "solana-sdk 1.11.10", + "solana-sdk 1.11.11", ] [[package]] name = "solana-cargo-build-sbf" -version = "1.11.10" +version = "1.11.11" dependencies = [ "bzip2", "cargo_metadata", @@ -4757,14 +4757,14 @@ dependencies = [ "regex", "serial_test", "solana-download-utils", - "solana-logger 1.11.10", - "solana-sdk 1.11.10", + "solana-logger 1.11.11", + "solana-sdk 1.11.11", "tar", ] [[package]] name = "solana-cargo-test-bpf" -version = "1.11.10" +version = "1.11.11" dependencies = [ "cargo_metadata", "clap 3.1.8", @@ -4772,7 +4772,7 @@ dependencies = [ [[package]] name = "solana-cargo-test-sbf" -version = "1.11.10" +version = "1.11.11" dependencies = [ "cargo_metadata", "clap 3.1.8", @@ -4780,14 +4780,14 @@ dependencies = [ [[package]] name = "solana-clap-utils" -version = "1.11.10" +version = "1.11.11" dependencies = [ "chrono", "clap 2.33.3", "rpassword", "solana-perf", "solana-remote-wallet", - "solana-sdk 1.11.10", + "solana-sdk 1.11.11", "tempfile", "thiserror", "tiny-bip39", @@ -4797,14 +4797,14 @@ dependencies = [ [[package]] name = "solana-clap-v3-utils" -version = "1.11.10" +version = "1.11.11" dependencies = [ "chrono", "clap 3.1.8", "rpassword", "solana-perf", "solana-remote-wallet", - "solana-sdk 1.11.10", + "solana-sdk 1.11.11", "tempfile", "thiserror", "tiny-bip39", @@ -4814,7 +4814,7 @@ dependencies = [ [[package]] name = "solana-cli" -version = "1.11.10" +version = "1.11.11" dependencies = [ "bincode", "bs58", @@ -4841,10 +4841,10 @@ dependencies = [ "solana-client", "solana-config-program", "solana-faucet", - "solana-logger 1.11.10", + "solana-logger 1.11.11", "solana-program-runtime", "solana-remote-wallet", - "solana-sdk 1.11.10", + "solana-sdk 1.11.11", "solana-streamer", "solana-test-validator", "solana-transaction-status", @@ -4859,7 +4859,7 @@ dependencies = [ [[package]] name = "solana-cli-config" -version = "1.11.10" +version = "1.11.11" dependencies = [ "anyhow", "dirs-next", @@ -4868,13 +4868,13 @@ dependencies = [ "serde_derive", "serde_yaml", "solana-clap-utils", - "solana-sdk 1.11.10", + "solana-sdk 1.11.11", "url 2.2.2", ] [[package]] name = "solana-cli-output" -version = "1.11.10" +version = "1.11.11" dependencies = [ "Inflector", "base64 0.13.0", @@ -4892,7 +4892,7 @@ dependencies = [ "solana-clap-utils", "solana-cli-config", "solana-client", - "solana-sdk 1.11.10", + "solana-sdk 1.11.11", "solana-transaction-status", "solana-vote-program", "spl-memo", @@ -4900,7 +4900,7 @@ dependencies = [ [[package]] name = "solana-client" -version = "1.11.10" +version = "1.11.11" dependencies = [ "anyhow", "assert_matches", @@ -4936,12 +4936,12 @@ dependencies = [ "solana-account-decoder", "solana-clap-utils", "solana-faucet", - "solana-logger 1.11.10", + "solana-logger 1.11.11", "solana-measure", "solana-metrics", "solana-net-utils", "solana-perf", - "solana-sdk 1.11.10", + "solana-sdk 1.11.11", "solana-streamer", "solana-transaction-status", "solana-version", @@ -4957,14 +4957,14 @@ dependencies = [ [[package]] name = "solana-client-test" -version = "1.11.10" +version = "1.11.11" dependencies = [ "futures-util", "serde_json", "serial_test", "solana-client", "solana-ledger", - "solana-logger 1.11.10", + "solana-logger 1.11.11", "solana-measure", "solana-merkle-tree", "solana-metrics", @@ -4972,7 +4972,7 @@ dependencies = [ "solana-rayon-threadlimit", "solana-rpc", "solana-runtime", - "solana-sdk 1.11.10", + "solana-sdk 1.11.11", "solana-streamer", "solana-test-validator", "solana-transaction-status", @@ -4983,28 +4983,28 @@ dependencies = [ [[package]] name = "solana-compute-budget-program" -version = "1.11.10" +version = "1.11.11" dependencies = [ "solana-program-runtime", - "solana-sdk 1.11.10", + "solana-sdk 1.11.11", ] [[package]] name = "solana-config-program" -version = "1.11.10" +version = "1.11.11" dependencies = [ "bincode", "chrono", "serde", "serde_derive", - "solana-logger 1.11.10", + "solana-logger 1.11.11", "solana-program-runtime", - "solana-sdk 1.11.10", + "solana-sdk 1.11.11", ] [[package]] name = "solana-core" -version = "1.11.10" +version = "1.11.11" dependencies = [ "ahash", "base64 0.13.0", @@ -5036,12 +5036,12 @@ dependencies = [ "solana-bloom", "solana-client", "solana-entry", - "solana-frozen-abi 1.11.10", - "solana-frozen-abi-macro 1.11.10", + "solana-frozen-abi 1.11.11", + "solana-frozen-abi-macro 1.11.11", "solana-geyser-plugin-manager", "solana-gossip", "solana-ledger", - "solana-logger 1.11.10", + "solana-logger 1.11.11", "solana-measure", "solana-metrics", "solana-net-utils", @@ -5051,7 +5051,7 @@ dependencies = [ "solana-rayon-threadlimit", "solana-rpc", "solana-runtime", - "solana-sdk 1.11.10", + "solana-sdk 1.11.11", "solana-send-transaction-service", "solana-stake-program", "solana-streamer", @@ -5071,7 +5071,7 @@ dependencies = [ [[package]] name = "solana-dos" -version = "1.11.10" +version = "1.11.11" dependencies = [ "bincode", "clap 3.1.8", @@ -5087,42 +5087,42 @@ dependencies = [ "solana-faucet", "solana-gossip", "solana-local-cluster", - "solana-logger 1.11.10", + "solana-logger 1.11.11", "solana-measure", "solana-net-utils", "solana-perf", "solana-rpc", - "solana-sdk 1.11.10", + "solana-sdk 1.11.11", "solana-streamer", "solana-version", ] [[package]] name = "solana-download-utils" -version = "1.11.10" +version = "1.11.11" dependencies = [ "console", "indicatif", "log", "reqwest", "solana-runtime", - "solana-sdk 1.11.10", + "solana-sdk 1.11.11", ] [[package]] name = "solana-ed25519-program-tests" -version = "1.11.10" +version = "1.11.11" dependencies = [ "assert_matches", "ed25519-dalek", "rand 0.7.3", "solana-program-test", - "solana-sdk 1.11.10", + "solana-sdk 1.11.11", ] [[package]] name = "solana-entry" -version = "1.11.10" +version = "1.11.11" dependencies = [ "bincode", "crossbeam-channel", @@ -5134,18 +5134,18 @@ dependencies = [ "rand 0.7.3", "rayon", "serde", - "solana-logger 1.11.10", + "solana-logger 1.11.11", "solana-measure", "solana-merkle-tree", "solana-metrics", "solana-perf", "solana-rayon-threadlimit", - "solana-sdk 1.11.10", + "solana-sdk 1.11.11", ] [[package]] name = "solana-faucet" -version = "1.11.10" +version = "1.11.11" dependencies = [ "bincode", "byteorder", @@ -5156,9 +5156,9 @@ dependencies = [ "serde_derive", "solana-clap-utils", "solana-cli-config", - "solana-logger 1.11.10", + "solana-logger 1.11.11", "solana-metrics", - "solana-sdk 1.11.10", + "solana-sdk 1.11.11", "solana-version", "spl-memo", "thiserror", @@ -5189,7 +5189,7 @@ dependencies = [ [[package]] name = "solana-frozen-abi" -version = "1.11.10" +version = "1.11.11" dependencies = [ "ahash", "blake3", @@ -5214,8 +5214,8 @@ dependencies = [ "serde_derive", "serde_json", "sha2 0.10.2", - "solana-frozen-abi-macro 1.11.10", - "solana-logger 1.11.10", + "solana-frozen-abi-macro 1.11.11", + "solana-logger 1.11.11", "subtle", "thiserror", ] @@ -5234,7 +5234,7 @@ dependencies = [ [[package]] name = "solana-frozen-abi-macro" -version = "1.11.10" +version = "1.11.11" dependencies = [ "proc-macro2 1.0.41", "quote 1.0.18", @@ -5244,7 +5244,7 @@ dependencies = [ [[package]] name = "solana-genesis" -version = "1.11.10" +version = "1.11.11" dependencies = [ "base64 0.13.0", "clap 2.33.3", @@ -5255,9 +5255,9 @@ dependencies = [ "solana-cli-config", "solana-entry", "solana-ledger", - "solana-logger 1.11.10", + "solana-logger 1.11.11", "solana-runtime", - "solana-sdk 1.11.10", + "solana-sdk 1.11.11", "solana-stake-program", "solana-version", "solana-vote-program", @@ -5266,26 +5266,26 @@ dependencies = [ [[package]] name = "solana-genesis-utils" -version = "1.11.10" +version = "1.11.11" dependencies = [ "solana-download-utils", "solana-runtime", - "solana-sdk 1.11.10", + "solana-sdk 1.11.11", ] [[package]] name = "solana-geyser-plugin-interface" -version = "1.11.10" +version = "1.11.11" dependencies = [ "log", - "solana-sdk 1.11.10", + "solana-sdk 1.11.11", "solana-transaction-status", "thiserror", ] [[package]] name = "solana-geyser-plugin-manager" -version = "1.11.10" +version = "1.11.11" dependencies = [ "bs58", "crossbeam-channel", @@ -5298,14 +5298,14 @@ dependencies = [ "solana-metrics", "solana-rpc", "solana-runtime", - "solana-sdk 1.11.10", + "solana-sdk 1.11.11", "solana-transaction-status", "thiserror", ] [[package]] name = "solana-gossip" -version = "1.11.10" +version = "1.11.11" dependencies = [ "bincode", "bv", @@ -5332,17 +5332,17 @@ dependencies = [ "solana-clap-utils", "solana-client", "solana-entry", - "solana-frozen-abi 1.11.10", - "solana-frozen-abi-macro 1.11.10", + "solana-frozen-abi 1.11.11", + "solana-frozen-abi-macro 1.11.11", "solana-ledger", - "solana-logger 1.11.10", + "solana-logger 1.11.11", "solana-measure", "solana-metrics", "solana-net-utils", "solana-perf", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.11.10", + "solana-sdk 1.11.11", "solana-streamer", "solana-version", "solana-vote-program", @@ -5351,7 +5351,7 @@ dependencies = [ [[package]] name = "solana-install" -version = "1.11.10" +version = "1.11.11" dependencies = [ "atty", "bincode", @@ -5372,8 +5372,8 @@ dependencies = [ "solana-clap-utils", "solana-client", "solana-config-program", - "solana-logger 1.11.10", - "solana-sdk 1.11.10", + "solana-logger 1.11.11", + "solana-sdk 1.11.11", "solana-version", "tar", "tempfile", @@ -5384,7 +5384,7 @@ dependencies = [ [[package]] name = "solana-keygen" -version = "1.11.10" +version = "1.11.11" dependencies = [ "bs58", "clap 3.1.8", @@ -5393,14 +5393,14 @@ dependencies = [ "solana-clap-v3-utils", "solana-cli-config", "solana-remote-wallet", - "solana-sdk 1.11.10", + "solana-sdk 1.11.11", "solana-version", "tiny-bip39", ] [[package]] name = "solana-ledger" -version = "1.11.10" +version = "1.11.11" dependencies = [ "assert_matches", "bincode", @@ -5434,16 +5434,16 @@ dependencies = [ "solana-account-decoder", "solana-bpf-loader-program", "solana-entry", - "solana-frozen-abi 1.11.10", - "solana-frozen-abi-macro 1.11.10", - "solana-logger 1.11.10", + "solana-frozen-abi 1.11.11", + "solana-frozen-abi-macro 1.11.11", + "solana-logger 1.11.11", "solana-measure", "solana-metrics", "solana-perf", "solana-program-runtime", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.11.10", + "solana-sdk 1.11.11", "solana-stake-program", "solana-storage-bigtable", "solana-storage-proto", @@ -5462,7 +5462,7 @@ dependencies = [ [[package]] name = "solana-ledger-tool" -version = "1.11.10" +version = "1.11.11" dependencies = [ "assert_cmd", "bs58", @@ -5484,10 +5484,10 @@ dependencies = [ "solana-core", "solana-entry", "solana-ledger", - "solana-logger 1.11.10", + "solana-logger 1.11.11", "solana-measure", "solana-runtime", - "solana-sdk 1.11.10", + "solana-sdk 1.11.11", "solana-stake-program", "solana-storage-bigtable", "solana-transaction-status", @@ -5499,7 +5499,7 @@ dependencies = [ [[package]] name = "solana-local-cluster" -version = "1.11.10" +version = "1.11.11" dependencies = [ "assert_matches", "crossbeam-channel", @@ -5517,9 +5517,9 @@ dependencies = [ "solana-entry", "solana-gossip", "solana-ledger", - "solana-logger 1.11.10", + "solana-logger 1.11.11", "solana-runtime", - "solana-sdk 1.11.10", + "solana-sdk 1.11.11", "solana-stake-program", "solana-streamer", "solana-vote-program", @@ -5528,13 +5528,13 @@ dependencies = [ [[package]] name = "solana-log-analyzer" -version = "1.11.10" +version = "1.11.11" dependencies = [ "byte-unit", "clap 3.1.8", "serde", "serde_json", - "solana-logger 1.11.10", + "solana-logger 1.11.11", "solana-version", ] @@ -5551,7 +5551,7 @@ dependencies = [ [[package]] name = "solana-logger" -version = "1.11.10" +version = "1.11.11" dependencies = [ "env_logger", "lazy_static", @@ -5560,38 +5560,38 @@ dependencies = [ [[package]] name = "solana-measure" -version = "1.11.10" +version = "1.11.11" dependencies = [ "log", - "solana-sdk 1.11.10", + "solana-sdk 1.11.11", ] [[package]] name = "solana-merkle-root-bench" -version = "1.11.10" +version = "1.11.11" dependencies = [ "clap 2.33.3", "log", - "solana-logger 1.11.10", + "solana-logger 1.11.11", "solana-measure", "solana-runtime", - "solana-sdk 1.11.10", + "solana-sdk 1.11.11", "solana-version", ] [[package]] name = "solana-merkle-tree" -version = "1.11.10" +version = "1.11.11" dependencies = [ "fast-math", "hex", "matches", - "solana-program 1.11.10", + "solana-program 1.11.11", ] [[package]] name = "solana-metrics" -version = "1.11.10" +version = "1.11.11" dependencies = [ "crossbeam-channel", "env_logger", @@ -5601,23 +5601,23 @@ dependencies = [ "rand 0.7.3", "reqwest", "serial_test", - "solana-sdk 1.11.10", + "solana-sdk 1.11.11", ] [[package]] name = "solana-net-shaper" -version = "1.11.10" +version = "1.11.11" dependencies = [ "clap 3.1.8", "rand 0.7.3", "serde", "serde_json", - "solana-logger 1.11.10", + "solana-logger 1.11.11", ] [[package]] name = "solana-net-utils" -version = "1.11.10" +version = "1.11.11" dependencies = [ "bincode", "clap 3.1.8", @@ -5628,8 +5628,8 @@ dependencies = [ "serde", "serde_derive", "socket2", - "solana-logger 1.11.10", - "solana-sdk 1.11.10", + "solana-logger 1.11.11", + "solana-sdk 1.11.11", "solana-version", "tokio", "url 2.2.2", @@ -5637,7 +5637,7 @@ dependencies = [ [[package]] name = "solana-notifier" -version = "1.11.10" +version = "1.11.11" dependencies = [ "log", "reqwest", @@ -5646,7 +5646,7 @@ dependencies = [ [[package]] name = "solana-perf" -version = "1.11.10" +version = "1.11.11" dependencies = [ "ahash", "bincode", @@ -5664,16 +5664,16 @@ dependencies = [ "rand 0.7.3", "rayon", "serde", - "solana-logger 1.11.10", + "solana-logger 1.11.11", "solana-metrics", "solana-rayon-threadlimit", - "solana-sdk 1.11.10", + "solana-sdk 1.11.11", "solana-vote-program", ] [[package]] name = "solana-poh" -version = "1.11.10" +version = "1.11.11" dependencies = [ "bincode", "core_affinity", @@ -5683,29 +5683,29 @@ dependencies = [ "rand 0.7.3", "solana-entry", "solana-ledger", - "solana-logger 1.11.10", + "solana-logger 1.11.11", "solana-measure", "solana-metrics", "solana-perf", "solana-runtime", - "solana-sdk 1.11.10", + "solana-sdk 1.11.11", "solana-sys-tuner", "thiserror", ] [[package]] name = "solana-poh-bench" -version = "1.11.10" +version = "1.11.11" dependencies = [ "clap 3.1.8", "log", "rand 0.7.3", "rayon", "solana-entry", - "solana-logger 1.11.10", + "solana-logger 1.11.11", "solana-measure", "solana-perf", - "solana-sdk 1.11.10", + "solana-sdk 1.11.11", "solana-version", ] @@ -5753,7 +5753,7 @@ dependencies = [ [[package]] name = "solana-program" -version = "1.11.10" +version = "1.11.11" dependencies = [ "anyhow", "assert_matches", @@ -5791,10 +5791,10 @@ dependencies = [ "serde_json", "sha2 0.10.2", "sha3 0.10.1", - "solana-frozen-abi 1.11.10", - "solana-frozen-abi-macro 1.11.10", - "solana-logger 1.11.10", - "solana-sdk-macro 1.11.10", + "solana-frozen-abi 1.11.11", + "solana-frozen-abi-macro 1.11.11", + "solana-logger 1.11.11", + "solana-sdk-macro 1.11.11", "static_assertions", "thiserror", "tiny-bip39", @@ -5804,7 +5804,7 @@ dependencies = [ [[package]] name = "solana-program-runtime" -version = "1.11.10" +version = "1.11.11" dependencies = [ "base64 0.13.0", "bincode", @@ -5818,18 +5818,18 @@ dependencies = [ "num-traits", "rustc_version 0.4.0", "serde", - "solana-frozen-abi 1.11.10", - "solana-frozen-abi-macro 1.11.10", - "solana-logger 1.11.10", + "solana-frozen-abi 1.11.11", + "solana-frozen-abi-macro 1.11.11", + "solana-logger 1.11.11", "solana-measure", "solana-metrics", - "solana-sdk 1.11.10", + "solana-sdk 1.11.11", "thiserror", ] [[package]] name = "solana-program-test" -version = "1.11.10" +version = "1.11.11" dependencies = [ "assert_matches", "async-trait", @@ -5841,10 +5841,10 @@ dependencies = [ "solana-banks-client", "solana-banks-server", "solana-bpf-loader-program", - "solana-logger 1.11.10", + "solana-logger 1.11.11", "solana-program-runtime", "solana-runtime", - "solana-sdk 1.11.10", + "solana-sdk 1.11.11", "solana-vote-program", "thiserror", "tokio", @@ -5852,7 +5852,7 @@ dependencies = [ [[package]] name = "solana-rayon-threadlimit" -version = "1.11.10" +version = "1.11.11" dependencies = [ "lazy_static", "num_cpus", @@ -5860,7 +5860,7 @@ dependencies = [ [[package]] name = "solana-remote-wallet" -version = "1.11.10" +version = "1.11.11" dependencies = [ "console", "dialoguer", @@ -5871,14 +5871,14 @@ dependencies = [ "parking_lot 0.12.1", "qstring", "semver 1.0.10", - "solana-sdk 1.11.10", + "solana-sdk 1.11.11", "thiserror", "uriparse", ] [[package]] name = "solana-rpc" -version = "1.11.10" +version = "1.11.11" dependencies = [ "base64 0.13.0", "bincode", @@ -5914,7 +5914,7 @@ dependencies = [ "solana-poh", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.11.10", + "solana-sdk 1.11.11", "solana-send-transaction-service", "solana-stake-program", "solana-storage-bigtable", @@ -5933,7 +5933,7 @@ dependencies = [ [[package]] name = "solana-rpc-test" -version = "1.11.10" +version = "1.11.11" dependencies = [ "bincode", "bs58", @@ -5945,9 +5945,9 @@ dependencies = [ "serde_json", "solana-account-decoder", "solana-client", - "solana-logger 1.11.10", + "solana-logger 1.11.11", "solana-rpc", - "solana-sdk 1.11.10", + "solana-sdk 1.11.11", "solana-streamer", "solana-test-validator", "solana-transaction-status", @@ -5956,7 +5956,7 @@ dependencies = [ [[package]] name = "solana-runtime" -version = "1.11.10" +version = "1.11.11" dependencies = [ "arrayref", "assert_matches", @@ -5996,18 +5996,18 @@ dependencies = [ "solana-bucket-map", "solana-compute-budget-program", "solana-config-program", - "solana-frozen-abi 1.11.10", - "solana-frozen-abi-macro 1.11.10", - "solana-logger 1.11.10", + "solana-frozen-abi 1.11.11", + "solana-frozen-abi-macro 1.11.11", + "solana-logger 1.11.11", "solana-measure", "solana-metrics", "solana-program-runtime", "solana-rayon-threadlimit", - "solana-sdk 1.11.10", + "solana-sdk 1.11.11", "solana-stake-program", "solana-vote-program", "solana-zk-token-proof-program", - "solana-zk-token-sdk 1.11.10", + "solana-zk-token-sdk 1.11.11", "strum", "strum_macros", "symlink", @@ -6070,7 +6070,7 @@ dependencies = [ [[package]] name = "solana-sdk" -version = "1.11.10" +version = "1.11.11" dependencies = [ "anyhow", "assert_matches", @@ -6110,11 +6110,11 @@ dependencies = [ "serde_json", "sha2 0.10.2", "sha3 0.10.1", - "solana-frozen-abi 1.11.10", - "solana-frozen-abi-macro 1.11.10", - "solana-logger 1.11.10", - "solana-program 1.11.10", - "solana-sdk-macro 1.11.10", + "solana-frozen-abi 1.11.11", + "solana-frozen-abi-macro 1.11.11", + "solana-logger 1.11.11", + "solana-program 1.11.11", + "solana-sdk-macro 1.11.11", "static_assertions", "thiserror", "tiny-bip39", @@ -6137,7 +6137,7 @@ dependencies = [ [[package]] name = "solana-sdk-macro" -version = "1.11.10" +version = "1.11.11" dependencies = [ "bs58", "proc-macro2 1.0.41", @@ -6148,21 +6148,21 @@ dependencies = [ [[package]] name = "solana-send-transaction-service" -version = "1.11.10" +version = "1.11.11" dependencies = [ "crossbeam-channel", "log", "solana-client", - "solana-logger 1.11.10", + "solana-logger 1.11.11", "solana-measure", "solana-metrics", "solana-runtime", - "solana-sdk 1.11.10", + "solana-sdk 1.11.11", ] [[package]] name = "solana-stake-accounts" -version = "1.11.10" +version = "1.11.11" dependencies = [ "clap 2.33.3", "solana-clap-utils", @@ -6170,13 +6170,13 @@ dependencies = [ "solana-client", "solana-remote-wallet", "solana-runtime", - "solana-sdk 1.11.10", + "solana-sdk 1.11.11", "solana-stake-program", ] [[package]] name = "solana-stake-program" -version = "1.11.10" +version = "1.11.11" dependencies = [ "assert_matches", "bincode", @@ -6188,12 +6188,12 @@ dependencies = [ "serde", "serde_derive", "solana-config-program", - "solana-frozen-abi 1.11.10", - "solana-frozen-abi-macro 1.11.10", - "solana-logger 1.11.10", + "solana-frozen-abi 1.11.11", + "solana-frozen-abi-macro 1.11.11", + "solana-logger 1.11.11", "solana-metrics", "solana-program-runtime", - "solana-sdk 1.11.10", + "solana-sdk 1.11.11", "solana-vote-program", "test-case", "thiserror", @@ -6201,7 +6201,7 @@ dependencies = [ [[package]] name = "solana-storage-bigtable" -version = "1.11.10" +version = "1.11.11" dependencies = [ "backoff", "bincode", @@ -6222,7 +6222,7 @@ dependencies = [ "serde_derive", "smpl_jwt", "solana-metrics", - "solana-sdk 1.11.10", + "solana-sdk 1.11.11", "solana-storage-proto", "solana-transaction-status", "thiserror", @@ -6233,7 +6233,7 @@ dependencies = [ [[package]] name = "solana-storage-proto" -version = "1.11.10" +version = "1.11.11" dependencies = [ "bincode", "bs58", @@ -6242,25 +6242,25 @@ dependencies = [ "protobuf-src", "serde", "solana-account-decoder", - "solana-sdk 1.11.10", + "solana-sdk 1.11.11", "solana-transaction-status", "tonic-build 0.8.0", ] [[package]] name = "solana-store-tool" -version = "1.11.10" +version = "1.11.11" dependencies = [ "clap 2.33.3", "log", - "solana-logger 1.11.10", + "solana-logger 1.11.11", "solana-runtime", "solana-version", ] [[package]] name = "solana-streamer" -version = "1.11.10" +version = "1.11.11" dependencies = [ "crossbeam-channel", "futures-util", @@ -6277,10 +6277,10 @@ dependencies = [ "rand 0.7.3", "rcgen", "rustls 0.20.6", - "solana-logger 1.11.10", + "solana-logger 1.11.11", "solana-metrics", "solana-perf", - "solana-sdk 1.11.10", + "solana-sdk 1.11.11", "thiserror", "tokio", "x509-parser", @@ -6288,13 +6288,13 @@ dependencies = [ [[package]] name = "solana-sys-tuner" -version = "1.11.10" +version = "1.11.11" dependencies = [ "clap 2.33.3", "libc", "log", "nix", - "solana-logger 1.11.10", + "solana-logger 1.11.11", "solana-version", "sysctl", "unix_socket2", @@ -6303,7 +6303,7 @@ dependencies = [ [[package]] name = "solana-test-validator" -version = "1.11.10" +version = "1.11.11" dependencies = [ "base64 0.13.0", "log", @@ -6314,20 +6314,20 @@ dependencies = [ "solana-core", "solana-gossip", "solana-ledger", - "solana-logger 1.11.10", + "solana-logger 1.11.11", "solana-net-utils", "solana-program-runtime", "solana-program-test", "solana-rpc", "solana-runtime", - "solana-sdk 1.11.10", + "solana-sdk 1.11.11", "solana-streamer", "tokio", ] [[package]] name = "solana-tokens" -version = "1.11.10" +version = "1.11.11" dependencies = [ "bincode", "chrono", @@ -6343,9 +6343,9 @@ dependencies = [ "solana-clap-utils", "solana-cli-config", "solana-client", - "solana-logger 1.11.10", + "solana-logger 1.11.11", "solana-remote-wallet", - "solana-sdk 1.11.10", + "solana-sdk 1.11.11", "solana-streamer", "solana-test-validator", "solana-transaction-status", @@ -6358,7 +6358,7 @@ dependencies = [ [[package]] name = "solana-transaction-dos" -version = "1.11.10" +version = "1.11.11" dependencies = [ "bincode", "clap 2.33.3", @@ -6372,11 +6372,11 @@ dependencies = [ "solana-faucet", "solana-gossip", "solana-local-cluster", - "solana-logger 1.11.10", + "solana-logger 1.11.11", "solana-measure", "solana-net-utils", "solana-runtime", - "solana-sdk 1.11.10", + "solana-sdk 1.11.11", "solana-streamer", "solana-transaction-status", "solana-version", @@ -6384,7 +6384,7 @@ dependencies = [ [[package]] name = "solana-transaction-status" -version = "1.11.10" +version = "1.11.11" dependencies = [ "Inflector", "base64 0.13.0", @@ -6399,7 +6399,7 @@ dependencies = [ "solana-account-decoder", "solana-measure", "solana-metrics", - "solana-sdk 1.11.10", + "solana-sdk 1.11.11", "solana-vote-program", "spl-associated-token-account", "spl-memo", @@ -6410,7 +6410,7 @@ dependencies = [ [[package]] name = "solana-upload-perf" -version = "1.11.10" +version = "1.11.11" dependencies = [ "serde_json", "solana-metrics", @@ -6418,7 +6418,7 @@ dependencies = [ [[package]] name = "solana-validator" -version = "1.11.10" +version = "1.11.11" dependencies = [ "chrono", "clap 2.33.3", @@ -6449,14 +6449,14 @@ dependencies = [ "solana-genesis-utils", "solana-gossip", "solana-ledger", - "solana-logger 1.11.10", + "solana-logger 1.11.11", "solana-metrics", "solana-net-utils", "solana-perf", "solana-poh", "solana-rpc", "solana-runtime", - "solana-sdk 1.11.10", + "solana-sdk 1.11.11", "solana-send-transaction-service", "solana-storage-bigtable", "solana-streamer", @@ -6469,21 +6469,21 @@ dependencies = [ [[package]] name = "solana-version" -version = "1.11.10" +version = "1.11.11" dependencies = [ "log", "rustc_version 0.4.0", "semver 1.0.10", "serde", "serde_derive", - "solana-frozen-abi 1.11.10", - "solana-frozen-abi-macro 1.11.10", - "solana-sdk 1.11.10", + "solana-frozen-abi 1.11.11", + "solana-frozen-abi-macro 1.11.11", + "solana-sdk 1.11.11", ] [[package]] name = "solana-vote-program" -version = "1.11.10" +version = "1.11.11" dependencies = [ "bincode", "log", @@ -6492,18 +6492,18 @@ dependencies = [ "rustc_version 0.4.0", "serde", "serde_derive", - "solana-frozen-abi 1.11.10", - "solana-frozen-abi-macro 1.11.10", - "solana-logger 1.11.10", + "solana-frozen-abi 1.11.11", + "solana-frozen-abi-macro 1.11.11", + "solana-logger 1.11.11", "solana-metrics", "solana-program-runtime", - "solana-sdk 1.11.10", + "solana-sdk 1.11.11", "thiserror", ] [[package]] name = "solana-watchtower" -version = "1.11.10" +version = "1.11.11" dependencies = [ "clap 2.33.3", "humantime", @@ -6512,24 +6512,24 @@ dependencies = [ "solana-cli-config", "solana-cli-output", "solana-client", - "solana-logger 1.11.10", + "solana-logger 1.11.11", "solana-metrics", "solana-notifier", - "solana-sdk 1.11.10", + "solana-sdk 1.11.11", "solana-version", ] [[package]] name = "solana-zk-token-proof-program" -version = "1.11.10" +version = "1.11.11" dependencies = [ "bytemuck", "getrandom 0.1.16", "num-derive", "num-traits", "solana-program-runtime", - "solana-sdk 1.11.10", - "solana-zk-token-sdk 1.11.10", + "solana-sdk 1.11.11", + "solana-zk-token-sdk 1.11.11", ] [[package]] @@ -6564,7 +6564,7 @@ dependencies = [ [[package]] name = "solana-zk-token-sdk" -version = "1.11.10" +version = "1.11.11" dependencies = [ "aes-gcm-siv", "arrayref", @@ -6583,8 +6583,8 @@ dependencies = [ "serde", "serde_json", "sha3 0.9.1", - "solana-program 1.11.10", - "solana-sdk 1.11.10", + "solana-program 1.11.11", + "solana-sdk 1.11.11", "subtle", "thiserror", "zeroize", diff --git a/account-decoder/Cargo.toml b/account-decoder/Cargo.toml index db9128a64e157f..c5739c9ef1013a 100644 --- a/account-decoder/Cargo.toml +++ b/account-decoder/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-account-decoder" -version = "1.11.10" +version = "1.11.11" description = "Solana account decoder" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -19,9 +19,9 @@ lazy_static = "1.4.0" serde = "1.0.138" serde_derive = "1.0.103" serde_json = "1.0.81" -solana-config-program = { path = "../programs/config", version = "=1.11.10" } -solana-sdk = { path = "../sdk", version = "=1.11.10" } -solana-vote-program = { path = "../programs/vote", version = "=1.11.10" } +solana-config-program = { path = "../programs/config", version = "=1.11.11" } +solana-sdk = { path = "../sdk", version = "=1.11.11" } +solana-vote-program = { path = "../programs/vote", version = "=1.11.11" } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } spl-token-2022 = { version = "=0.4.2", features = ["no-entrypoint"] } thiserror = "1.0" diff --git a/accounts-bench/Cargo.toml b/accounts-bench/Cargo.toml index 88a09eccdf6b0f..fb6eabca514be7 100644 --- a/accounts-bench/Cargo.toml +++ b/accounts-bench/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-accounts-bench" -version = "1.11.10" +version = "1.11.11" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -12,11 +12,11 @@ publish = false clap = "2.33.1" log = "0.4.17" rayon = "1.5.3" -solana-logger = { path = "../logger", version = "=1.11.10" } -solana-measure = { path = "../measure", version = "=1.11.10" } -solana-runtime = { path = "../runtime", version = "=1.11.10" } -solana-sdk = { path = "../sdk", version = "=1.11.10" } -solana-version = { path = "../version", version = "=1.11.10" } +solana-logger = { path = "../logger", version = "=1.11.11" } +solana-measure = { path = "../measure", version = "=1.11.11" } +solana-runtime = { path = "../runtime", version = "=1.11.11" } +solana-sdk = { path = "../sdk", version = "=1.11.11" } +solana-version = { path = "../version", version = "=1.11.11" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/accounts-cluster-bench/Cargo.toml b/accounts-cluster-bench/Cargo.toml index c9eb1e2d25b52b..2862f484c72662 100644 --- a/accounts-cluster-bench/Cargo.toml +++ b/accounts-cluster-bench/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-accounts-cluster-bench" -version = "1.11.10" +version = "1.11.11" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -13,25 +13,25 @@ clap = "2.33.1" log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" -solana-account-decoder = { path = "../account-decoder", version = "=1.11.10" } -solana-clap-utils = { path = "../clap-utils", version = "=1.11.10" } -solana-client = { path = "../client", version = "=1.11.10" } -solana-faucet = { path = "../faucet", version = "=1.11.10" } -solana-gossip = { path = "../gossip", version = "=1.11.10" } -solana-logger = { path = "../logger", version = "=1.11.10" } -solana-measure = { path = "../measure", version = "=1.11.10" } -solana-net-utils = { path = "../net-utils", version = "=1.11.10" } -solana-runtime = { path = "../runtime", version = "=1.11.10" } -solana-sdk = { path = "../sdk", version = "=1.11.10" } -solana-streamer = { path = "../streamer", version = "=1.11.10" } -solana-transaction-status = { path = "../transaction-status", version = "=1.11.10" } -solana-version = { path = "../version", version = "=1.11.10" } +solana-account-decoder = { path = "../account-decoder", version = "=1.11.11" } +solana-clap-utils = { path = "../clap-utils", version = "=1.11.11" } +solana-client = { path = "../client", version = "=1.11.11" } +solana-faucet = { path = "../faucet", version = "=1.11.11" } +solana-gossip = { path = "../gossip", version = "=1.11.11" } +solana-logger = { path = "../logger", version = "=1.11.11" } +solana-measure = { path = "../measure", version = "=1.11.11" } +solana-net-utils = { path = "../net-utils", version = "=1.11.11" } +solana-runtime = { path = "../runtime", version = "=1.11.11" } +solana-sdk = { path = "../sdk", version = "=1.11.11" } +solana-streamer = { path = "../streamer", version = "=1.11.11" } +solana-transaction-status = { path = "../transaction-status", version = "=1.11.11" } +solana-version = { path = "../version", version = "=1.11.11" } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } [dev-dependencies] -solana-core = { path = "../core", version = "=1.11.10" } -solana-local-cluster = { path = "../local-cluster", version = "=1.11.10" } -solana-test-validator = { path = "../test-validator", version = "=1.11.10" } +solana-core = { path = "../core", version = "=1.11.11" } +solana-local-cluster = { path = "../local-cluster", version = "=1.11.11" } +solana-test-validator = { path = "../test-validator", version = "=1.11.11" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/banking-bench/Cargo.toml b/banking-bench/Cargo.toml index 8b3b31528a6d4a..0c02b4066d9745 100644 --- a/banking-bench/Cargo.toml +++ b/banking-bench/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-banking-bench" -version = "1.11.10" +version = "1.11.11" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,18 +14,18 @@ crossbeam-channel = "0.5" log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" -solana-client = { path = "../client", version = "=1.11.10" } -solana-core = { path = "../core", version = "=1.11.10" } -solana-gossip = { path = "../gossip", version = "=1.11.10" } -solana-ledger = { path = "../ledger", version = "=1.11.10" } -solana-logger = { path = "../logger", version = "=1.11.10" } -solana-measure = { path = "../measure", version = "=1.11.10" } -solana-perf = { path = "../perf", version = "=1.11.10" } -solana-poh = { path = "../poh", version = "=1.11.10" } -solana-runtime = { path = "../runtime", version = "=1.11.10" } -solana-sdk = { path = "../sdk", version = "=1.11.10" } -solana-streamer = { path = "../streamer", version = "=1.11.10" } -solana-version = { path = "../version", version = "=1.11.10" } +solana-client = { path = "../client", version = "=1.11.11" } +solana-core = { path = "../core", version = "=1.11.11" } +solana-gossip = { path = "../gossip", version = "=1.11.11" } +solana-ledger = { path = "../ledger", version = "=1.11.11" } +solana-logger = { path = "../logger", version = "=1.11.11" } +solana-measure = { path = "../measure", version = "=1.11.11" } +solana-perf = { path = "../perf", version = "=1.11.11" } +solana-poh = { path = "../poh", version = "=1.11.11" } +solana-runtime = { path = "../runtime", version = "=1.11.11" } +solana-sdk = { path = "../sdk", version = "=1.11.11" } +solana-streamer = { path = "../streamer", version = "=1.11.11" } +solana-version = { path = "../version", version = "=1.11.11" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/banks-client/Cargo.toml b/banks-client/Cargo.toml index 4ad8346515245a..7cfa66a360fed7 100644 --- a/banks-client/Cargo.toml +++ b/banks-client/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-banks-client" -version = "1.11.10" +version = "1.11.11" description = "Solana banks client" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,17 +12,17 @@ edition = "2021" [dependencies] borsh = "0.9.3" futures = "0.3" -solana-banks-interface = { path = "../banks-interface", version = "=1.11.10" } -solana-program = { path = "../sdk/program", version = "=1.11.10" } -solana-sdk = { path = "../sdk", version = "=1.11.10" } +solana-banks-interface = { path = "../banks-interface", version = "=1.11.11" } +solana-program = { path = "../sdk/program", version = "=1.11.11" } +solana-sdk = { path = "../sdk", version = "=1.11.11" } tarpc = { version = "0.29.0", features = ["full"] } thiserror = "1.0" tokio = { version = "~1.14.1", features = ["full"] } tokio-serde = { version = "0.8", features = ["bincode"] } [dev-dependencies] -solana-banks-server = { path = "../banks-server", version = "=1.11.10" } -solana-runtime = { path = "../runtime", version = "=1.11.10" } +solana-banks-server = { path = "../banks-server", version = "=1.11.11" } +solana-runtime = { path = "../runtime", version = "=1.11.11" } [lib] crate-type = ["lib"] diff --git a/banks-interface/Cargo.toml b/banks-interface/Cargo.toml index 69849a526d00c5..78681df9b269b9 100644 --- a/banks-interface/Cargo.toml +++ b/banks-interface/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-banks-interface" -version = "1.11.10" +version = "1.11.11" description = "Solana banks RPC interface" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -11,7 +11,7 @@ edition = "2021" [dependencies] serde = { version = "1.0.138", features = ["derive"] } -solana-sdk = { path = "../sdk", version = "=1.11.10" } +solana-sdk = { path = "../sdk", version = "=1.11.11" } tarpc = { version = "0.29.0", features = ["full"] } [lib] diff --git a/banks-server/Cargo.toml b/banks-server/Cargo.toml index 114288e8429be2..1ced66cbc522e3 100644 --- a/banks-server/Cargo.toml +++ b/banks-server/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-banks-server" -version = "1.11.10" +version = "1.11.11" description = "Solana banks server" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,11 +13,11 @@ edition = "2021" bincode = "1.3.3" crossbeam-channel = "0.5" futures = "0.3" -solana-banks-interface = { path = "../banks-interface", version = "=1.11.10" } -solana-client = { path = "../client", version = "=1.11.10" } -solana-runtime = { path = "../runtime", version = "=1.11.10" } -solana-sdk = { path = "../sdk", version = "=1.11.10" } -solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.11.10" } +solana-banks-interface = { path = "../banks-interface", version = "=1.11.11" } +solana-client = { path = "../client", version = "=1.11.11" } +solana-runtime = { path = "../runtime", version = "=1.11.11" } +solana-sdk = { path = "../sdk", version = "=1.11.11" } +solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.11.11" } tarpc = { version = "0.29.0", features = ["full"] } tokio = { version = "1", features = ["full"] } tokio-serde = { version = "0.8", features = ["bincode"] } diff --git a/bench-streamer/Cargo.toml b/bench-streamer/Cargo.toml index 51ba85e7e393eb..005982d747a3ef 100644 --- a/bench-streamer/Cargo.toml +++ b/bench-streamer/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-bench-streamer" -version = "1.11.10" +version = "1.11.11" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -11,9 +11,9 @@ publish = false [dependencies] clap = { version = "3.1.5", features = ["cargo"] } crossbeam-channel = "0.5" -solana-net-utils = { path = "../net-utils", version = "=1.11.10" } -solana-streamer = { path = "../streamer", version = "=1.11.10" } -solana-version = { path = "../version", version = "=1.11.10" } +solana-net-utils = { path = "../net-utils", version = "=1.11.11" } +solana-streamer = { path = "../streamer", version = "=1.11.11" } +solana-version = { path = "../version", version = "=1.11.11" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/bench-tps/Cargo.toml b/bench-tps/Cargo.toml index 3308cf505f9bb5..681594f08b3979 100644 --- a/bench-tps/Cargo.toml +++ b/bench-tps/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-bench-tps" -version = "1.11.10" +version = "1.11.11" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -15,28 +15,28 @@ log = "0.4.17" rayon = "1.5.3" serde_json = "1.0.81" serde_yaml = "0.8.26" -solana-clap-utils = { path = "../clap-utils", version = "=1.11.10" } -solana-cli-config = { path = "../cli-config", version = "=1.11.10" } -solana-client = { path = "../client", version = "=1.11.10" } -solana-core = { path = "../core", version = "=1.11.10" } -solana-faucet = { path = "../faucet", version = "=1.11.10" } -solana-genesis = { path = "../genesis", version = "=1.11.10" } -solana-gossip = { path = "../gossip", version = "=1.11.10" } -solana-logger = { path = "../logger", version = "=1.11.10" } -solana-measure = { path = "../measure", version = "=1.11.10" } -solana-metrics = { path = "../metrics", version = "=1.11.10" } -solana-net-utils = { path = "../net-utils", version = "=1.11.10" } -solana-rpc = { path = "../rpc", version = "=1.11.10" } -solana-runtime = { path = "../runtime", version = "=1.11.10" } -solana-sdk = { path = "../sdk", version = "=1.11.10" } -solana-streamer = { path = "../streamer", version = "=1.11.10" } -solana-version = { path = "../version", version = "=1.11.10" } +solana-clap-utils = { path = "../clap-utils", version = "=1.11.11" } +solana-cli-config = { path = "../cli-config", version = "=1.11.11" } +solana-client = { path = "../client", version = "=1.11.11" } +solana-core = { path = "../core", version = "=1.11.11" } +solana-faucet = { path = "../faucet", version = "=1.11.11" } +solana-genesis = { path = "../genesis", version = "=1.11.11" } +solana-gossip = { path = "../gossip", version = "=1.11.11" } +solana-logger = { path = "../logger", version = "=1.11.11" } +solana-measure = { path = "../measure", version = "=1.11.11" } +solana-metrics = { path = "../metrics", version = "=1.11.11" } +solana-net-utils = { path = "../net-utils", version = "=1.11.11" } +solana-rpc = { path = "../rpc", version = "=1.11.11" } +solana-runtime = { path = "../runtime", version = "=1.11.11" } +solana-sdk = { path = "../sdk", version = "=1.11.11" } +solana-streamer = { path = "../streamer", version = "=1.11.11" } +solana-version = { path = "../version", version = "=1.11.11" } thiserror = "1.0" [dev-dependencies] serial_test = "0.8.0" -solana-local-cluster = { path = "../local-cluster", version = "=1.11.10" } -solana-test-validator = { path = "../test-validator", version = "=1.11.10" } +solana-local-cluster = { path = "../local-cluster", version = "=1.11.11" } +solana-test-validator = { path = "../test-validator", version = "=1.11.11" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/bloom/Cargo.toml b/bloom/Cargo.toml index bfe9b1a7e9e23f..c4e40ae9a21d96 100644 --- a/bloom/Cargo.toml +++ b/bloom/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bloom" -version = "1.11.10" +version = "1.11.11" description = "Solana bloom filter" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -17,9 +17,9 @@ rand = "0.7.0" rayon = "1.5.3" serde = { version = "1.0.138", features = ["rc"] } serde_derive = "1.0.103" -solana-frozen-abi = { path = "../frozen-abi", version = "=1.11.10" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.11.10" } -solana-sdk = { path = "../sdk", version = "=1.11.10" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.11.11" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.11.11" } +solana-sdk = { path = "../sdk", version = "=1.11.11" } [lib] crate-type = ["lib"] diff --git a/bucket_map/Cargo.toml b/bucket_map/Cargo.toml index 154b64339e86f9..91eed2680896cb 100644 --- a/bucket_map/Cargo.toml +++ b/bucket_map/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bucket-map" -version = "1.11.10" +version = "1.11.11" description = "solana-bucket-map" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-bucket-map" @@ -15,14 +15,14 @@ log = { version = "0.4.17" } memmap2 = "0.5.3" modular-bitfield = "0.11.2" rand = "0.7.0" -solana-measure = { path = "../measure", version = "=1.11.10" } -solana-sdk = { path = "../sdk", version = "=1.11.10" } +solana-measure = { path = "../measure", version = "=1.11.11" } +solana-sdk = { path = "../sdk", version = "=1.11.11" } tempfile = "3.3.0" [dev-dependencies] fs_extra = "1.2.0" rayon = "1.5.3" -solana-logger = { path = "../logger", version = "=1.11.10" } +solana-logger = { path = "../logger", version = "=1.11.11" } [lib] crate-type = ["lib"] diff --git a/clap-utils/Cargo.toml b/clap-utils/Cargo.toml index cf68b69fcdd3ae..9b9dba7ca8d11b 100644 --- a/clap-utils/Cargo.toml +++ b/clap-utils/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-clap-utils" -version = "1.11.10" +version = "1.11.11" description = "Solana utilities for the clap" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,9 +13,9 @@ edition = "2021" chrono = "0.4" clap = "2.33.0" rpassword = "6.0" -solana-perf = { path = "../perf", version = "=1.11.10" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.11.10", default-features = false } -solana-sdk = { path = "../sdk", version = "=1.11.10" } +solana-perf = { path = "../perf", version = "=1.11.11" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.11.11", default-features = false } +solana-sdk = { path = "../sdk", version = "=1.11.11" } thiserror = "1.0.31" tiny-bip39 = "0.8.2" uriparse = "0.6.4" diff --git a/clap-v3-utils/Cargo.toml b/clap-v3-utils/Cargo.toml index 4a4664d7a9bb58..2fb0afcc2fbca8 100644 --- a/clap-v3-utils/Cargo.toml +++ b/clap-v3-utils/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-clap-v3-utils" -version = "1.11.10" +version = "1.11.11" description = "Solana utilities for the clap v3" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,9 +13,9 @@ edition = "2021" chrono = "0.4" clap = { version = "3.1.5", features = ["cargo"] } rpassword = "6.0" -solana-perf = { path = "../perf", version = "=1.11.10" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.11.10", default-features = false } -solana-sdk = { path = "../sdk", version = "=1.11.10" } +solana-perf = { path = "../perf", version = "=1.11.11" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.11.11", default-features = false } +solana-sdk = { path = "../sdk", version = "=1.11.11" } thiserror = "1.0.31" tiny-bip39 = "0.8.2" uriparse = "0.6.4" diff --git a/cli-config/Cargo.toml b/cli-config/Cargo.toml index a257abf24cd155..dc4f30aa3ad9ce 100644 --- a/cli-config/Cargo.toml +++ b/cli-config/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-cli-config" description = "Blockchain, Rebuilt for Scale" -version = "1.11.10" +version = "1.11.11" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -15,8 +15,8 @@ lazy_static = "1.4.0" serde = "1.0.138" serde_derive = "1.0.103" serde_yaml = "0.8.26" -solana-clap-utils = { path = "../clap-utils", version = "=1.11.10" } -solana-sdk = { path = "../sdk", version = "=1.11.10" } +solana-clap-utils = { path = "../clap-utils", version = "=1.11.11" } +solana-sdk = { path = "../sdk", version = "=1.11.11" } url = "2.2.2" [dev-dependencies] diff --git a/cli-output/Cargo.toml b/cli-output/Cargo.toml index a843074da112da..ff6de8e81bbb75 100644 --- a/cli-output/Cargo.toml +++ b/cli-output/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-cli-output" description = "Blockchain, Rebuilt for Scale" -version = "1.11.10" +version = "1.11.11" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -21,13 +21,13 @@ pretty-hex = "0.3.0" semver = "1.0.10" serde = "1.0.138" serde_json = "1.0.81" -solana-account-decoder = { path = "../account-decoder", version = "=1.11.10" } -solana-clap-utils = { path = "../clap-utils", version = "=1.11.10" } -solana-cli-config = { path = "../cli-config", version = "=1.11.10" } -solana-client = { path = "../client", version = "=1.11.10" } -solana-sdk = { path = "../sdk", version = "=1.11.10" } -solana-transaction-status = { path = "../transaction-status", version = "=1.11.10" } -solana-vote-program = { path = "../programs/vote", version = "=1.11.10" } +solana-account-decoder = { path = "../account-decoder", version = "=1.11.11" } +solana-clap-utils = { path = "../clap-utils", version = "=1.11.11" } +solana-cli-config = { path = "../cli-config", version = "=1.11.11" } +solana-client = { path = "../client", version = "=1.11.11" } +solana-sdk = { path = "../sdk", version = "=1.11.11" } +solana-transaction-status = { path = "../transaction-status", version = "=1.11.11" } +solana-vote-program = { path = "../programs/vote", version = "=1.11.11" } spl-memo = { version = "=3.0.1", features = ["no-entrypoint"] } [dev-dependencies] diff --git a/cli/Cargo.toml b/cli/Cargo.toml index 39615f59126df6..ff3179a6a667a6 100644 --- a/cli/Cargo.toml +++ b/cli/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-cli" description = "Blockchain, Rebuilt for Scale" -version = "1.11.10" +version = "1.11.11" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -27,29 +27,29 @@ semver = "1.0.10" serde = "1.0.138" serde_derive = "1.0.103" serde_json = "1.0.81" -solana-account-decoder = { path = "../account-decoder", version = "=1.11.10" } -solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.11.10" } -solana-clap-utils = { path = "../clap-utils", version = "=1.11.10" } -solana-cli-config = { path = "../cli-config", version = "=1.11.10" } -solana-cli-output = { path = "../cli-output", version = "=1.11.10" } -solana-client = { path = "../client", version = "=1.11.10" } -solana-config-program = { path = "../programs/config", version = "=1.11.10" } -solana-faucet = { path = "../faucet", version = "=1.11.10" } -solana-logger = { path = "../logger", version = "=1.11.10" } -solana-program-runtime = { path = "../program-runtime", version = "=1.11.10" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.11.10" } -solana-sdk = { path = "../sdk", version = "=1.11.10" } -solana-transaction-status = { path = "../transaction-status", version = "=1.11.10" } -solana-version = { path = "../version", version = "=1.11.10" } -solana-vote-program = { path = "../programs/vote", version = "=1.11.10" } +solana-account-decoder = { path = "../account-decoder", version = "=1.11.11" } +solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.11.11" } +solana-clap-utils = { path = "../clap-utils", version = "=1.11.11" } +solana-cli-config = { path = "../cli-config", version = "=1.11.11" } +solana-cli-output = { path = "../cli-output", version = "=1.11.11" } +solana-client = { path = "../client", version = "=1.11.11" } +solana-config-program = { path = "../programs/config", version = "=1.11.11" } +solana-faucet = { path = "../faucet", version = "=1.11.11" } +solana-logger = { path = "../logger", version = "=1.11.11" } +solana-program-runtime = { path = "../program-runtime", version = "=1.11.11" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.11.11" } +solana-sdk = { path = "../sdk", version = "=1.11.11" } +solana-transaction-status = { path = "../transaction-status", version = "=1.11.11" } +solana-version = { path = "../version", version = "=1.11.11" } +solana-vote-program = { path = "../programs/vote", version = "=1.11.11" } solana_rbpf = "=0.2.31" spl-memo = { version = "=3.0.1", features = ["no-entrypoint"] } thiserror = "1.0.31" tiny-bip39 = "0.8.2" [dev-dependencies] -solana-streamer = { path = "../streamer", version = "=1.11.10" } -solana-test-validator = { path = "../test-validator", version = "=1.11.10" } +solana-streamer = { path = "../streamer", version = "=1.11.11" } +solana-test-validator = { path = "../test-validator", version = "=1.11.11" } tempfile = "3.3.0" [[bin]] diff --git a/client-test/Cargo.toml b/client-test/Cargo.toml index 5ccb0e52414ec9..bb6d79a2387c33 100644 --- a/client-test/Cargo.toml +++ b/client-test/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-client-test" -version = "1.11.10" +version = "1.11.11" description = "Solana RPC Test" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,25 +14,25 @@ publish = false futures-util = "0.3.21" serde_json = "1.0.81" serial_test = "0.8.0" -solana-client = { path = "../client", version = "=1.11.10" } -solana-ledger = { path = "../ledger", version = "=1.11.10" } -solana-measure = { path = "../measure", version = "=1.11.10" } -solana-merkle-tree = { path = "../merkle-tree", version = "=1.11.10" } -solana-metrics = { path = "../metrics", version = "=1.11.10" } -solana-perf = { path = "../perf", version = "=1.11.10" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.11.10" } -solana-rpc = { path = "../rpc", version = "=1.11.10" } -solana-runtime = { path = "../runtime", version = "=1.11.10" } -solana-sdk = { path = "../sdk", version = "=1.11.10" } -solana-streamer = { path = "../streamer", version = "=1.11.10" } -solana-test-validator = { path = "../test-validator", version = "=1.11.10" } -solana-transaction-status = { path = "../transaction-status", version = "=1.11.10" } -solana-version = { path = "../version", version = "=1.11.10" } +solana-client = { path = "../client", version = "=1.11.11" } +solana-ledger = { path = "../ledger", version = "=1.11.11" } +solana-measure = { path = "../measure", version = "=1.11.11" } +solana-merkle-tree = { path = "../merkle-tree", version = "=1.11.11" } +solana-metrics = { path = "../metrics", version = "=1.11.11" } +solana-perf = { path = "../perf", version = "=1.11.11" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.11.11" } +solana-rpc = { path = "../rpc", version = "=1.11.11" } +solana-runtime = { path = "../runtime", version = "=1.11.11" } +solana-sdk = { path = "../sdk", version = "=1.11.11" } +solana-streamer = { path = "../streamer", version = "=1.11.11" } +solana-test-validator = { path = "../test-validator", version = "=1.11.11" } +solana-transaction-status = { path = "../transaction-status", version = "=1.11.11" } +solana-version = { path = "../version", version = "=1.11.11" } systemstat = "0.1.11" tokio = { version = "~1.14.1", features = ["full"] } [dev-dependencies] -solana-logger = { path = "../logger", version = "=1.11.10" } +solana-logger = { path = "../logger", version = "=1.11.11" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/client/Cargo.toml b/client/Cargo.toml index 754b712248eed2..5e227d7ea683a1 100644 --- a/client/Cargo.toml +++ b/client/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-client" -version = "1.11.10" +version = "1.11.11" description = "Solana Client" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -38,17 +38,17 @@ semver = "1.0.10" serde = "1.0.138" serde_derive = "1.0.103" serde_json = "1.0.81" -solana-account-decoder = { path = "../account-decoder", version = "=1.11.10" } -solana-clap-utils = { path = "../clap-utils", version = "=1.11.10" } -solana-faucet = { path = "../faucet", version = "=1.11.10" } -solana-measure = { path = "../measure", version = "=1.11.10" } -solana-metrics = { path = "../metrics", version = "=1.11.10" } -solana-net-utils = { path = "../net-utils", version = "=1.11.10" } -solana-sdk = { path = "../sdk", version = "=1.11.10" } -solana-streamer = { path = "../streamer", version = "=1.11.10" } -solana-transaction-status = { path = "../transaction-status", version = "=1.11.10" } -solana-version = { path = "../version", version = "=1.11.10" } -solana-vote-program = { path = "../programs/vote", version = "=1.11.10" } +solana-account-decoder = { path = "../account-decoder", version = "=1.11.11" } +solana-clap-utils = { path = "../clap-utils", version = "=1.11.11" } +solana-faucet = { path = "../faucet", version = "=1.11.11" } +solana-measure = { path = "../measure", version = "=1.11.11" } +solana-metrics = { path = "../metrics", version = "=1.11.11" } +solana-net-utils = { path = "../net-utils", version = "=1.11.11" } +solana-sdk = { path = "../sdk", version = "=1.11.11" } +solana-streamer = { path = "../streamer", version = "=1.11.11" } +solana-transaction-status = { path = "../transaction-status", version = "=1.11.11" } +solana-version = { path = "../version", version = "=1.11.11" } +solana-vote-program = { path = "../programs/vote", version = "=1.11.11" } spl-token-2022 = { version = "=0.4.2", features = ["no-entrypoint"] } thiserror = "1.0" tokio = { version = "1", features = ["full"] } @@ -61,8 +61,8 @@ url = "2.2.2" anyhow = "1.0.58" assert_matches = "1.5.0" jsonrpc-http-server = "18.0.0" -solana-logger = { path = "../logger", version = "=1.11.10" } -solana-perf = { path = "../perf", version = "=1.11.10" } +solana-logger = { path = "../logger", version = "=1.11.11" } +solana-perf = { path = "../perf", version = "=1.11.11" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/core/Cargo.toml b/core/Cargo.toml index 843aa685ce6356..6bae68440cb3fe 100644 --- a/core/Cargo.toml +++ b/core/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "solana-core" description = "Blockchain, Rebuilt for Scale" -version = "1.11.10" +version = "1.11.11" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-core" readme = "../README.md" @@ -35,30 +35,30 @@ rand_chacha = "0.2.2" rayon = "1.5.3" serde = "1.0.138" serde_derive = "1.0.103" -solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.11.10" } -solana-bloom = { path = "../bloom", version = "=1.11.10" } -solana-client = { path = "../client", version = "=1.11.10" } -solana-entry = { path = "../entry", version = "=1.11.10" } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.11.10" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.11.10" } -solana-geyser-plugin-manager = { path = "../geyser-plugin-manager", version = "=1.11.10" } -solana-gossip = { path = "../gossip", version = "=1.11.10" } -solana-ledger = { path = "../ledger", version = "=1.11.10" } -solana-measure = { path = "../measure", version = "=1.11.10" } -solana-metrics = { path = "../metrics", version = "=1.11.10" } -solana-net-utils = { path = "../net-utils", version = "=1.11.10" } -solana-perf = { path = "../perf", version = "=1.11.10" } -solana-poh = { path = "../poh", version = "=1.11.10" } -solana-program-runtime = { path = "../program-runtime", version = "=1.11.10" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.11.10" } -solana-rpc = { path = "../rpc", version = "=1.11.10" } -solana-runtime = { path = "../runtime", version = "=1.11.10" } -solana-sdk = { path = "../sdk", version = "=1.11.10" } -solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.11.10" } -solana-streamer = { path = "../streamer", version = "=1.11.10" } -solana-transaction-status = { path = "../transaction-status", version = "=1.11.10" } -solana-version = { path = "../version", version = "=1.11.10" } -solana-vote-program = { path = "../programs/vote", version = "=1.11.10" } +solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.11.11" } +solana-bloom = { path = "../bloom", version = "=1.11.11" } +solana-client = { path = "../client", version = "=1.11.11" } +solana-entry = { path = "../entry", version = "=1.11.11" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.11.11" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.11.11" } +solana-geyser-plugin-manager = { path = "../geyser-plugin-manager", version = "=1.11.11" } +solana-gossip = { path = "../gossip", version = "=1.11.11" } +solana-ledger = { path = "../ledger", version = "=1.11.11" } +solana-measure = { path = "../measure", version = "=1.11.11" } +solana-metrics = { path = "../metrics", version = "=1.11.11" } +solana-net-utils = { path = "../net-utils", version = "=1.11.11" } +solana-perf = { path = "../perf", version = "=1.11.11" } +solana-poh = { path = "../poh", version = "=1.11.11" } +solana-program-runtime = { path = "../program-runtime", version = "=1.11.11" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.11.11" } +solana-rpc = { path = "../rpc", version = "=1.11.11" } +solana-runtime = { path = "../runtime", version = "=1.11.11" } +solana-sdk = { path = "../sdk", version = "=1.11.11" } +solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.11.11" } +solana-streamer = { path = "../streamer", version = "=1.11.11" } +solana-transaction-status = { path = "../transaction-status", version = "=1.11.11" } +solana-version = { path = "../version", version = "=1.11.11" } +solana-vote-program = { path = "../programs/vote", version = "=1.11.11" } sys-info = "0.9.1" tempfile = "3.3.0" thiserror = "1.0" @@ -70,9 +70,9 @@ matches = "0.1.9" raptorq = "1.7.0" serde_json = "1.0.81" serial_test = "0.8.0" -solana-logger = { path = "../logger", version = "=1.11.10" } -solana-program-runtime = { path = "../program-runtime", version = "=1.11.10" } -solana-stake-program = { path = "../programs/stake", version = "=1.11.10" } +solana-logger = { path = "../logger", version = "=1.11.11" } +solana-program-runtime = { path = "../program-runtime", version = "=1.11.11" } +solana-stake-program = { path = "../programs/stake", version = "=1.11.11" } static_assertions = "1.1.0" systemstat = "0.1.11" test-case = "2.1.0" diff --git a/docs/src/developing/clients/jsonrpc-api.md b/docs/src/developing/clients/jsonrpc-api.md index 14153bf7b0a733..4efc1dee205003 100644 --- a/docs/src/developing/clients/jsonrpc-api.md +++ b/docs/src/developing/clients/jsonrpc-api.md @@ -1931,7 +1931,7 @@ Returns all accounts owned by the provided program Pubkey - `offset: ` - offset into program account data to start comparison - `bytes: ` - data to match, as encoded string - `encoding: ` - encoding for filter `bytes` data, either "base58" or "base64". Data is limited in size to 128 or fewer decoded bytes. - **NEW: This field, and base64 support generally, is only available in solana-core v1.11.10 or newer. Please omit when querying nodes on earlier versions** + **NEW: This field, and base64 support generally, is only available in solana-core v1.11.11 or newer. Please omit when querying nodes on earlier versions** - `dataSize: ` - compares the program account data length with the provided data size @@ -3150,7 +3150,7 @@ curl http://localhost:8899 -X POST -H "Content-Type: application/json" -d ' Result: ```json -{ "jsonrpc": "2.0", "result": { "solana-core": "1.11.10" }, "id": 1 } +{ "jsonrpc": "2.0", "result": { "solana-core": "1.11.11" }, "id": 1 } ``` ### getVoteAccounts diff --git a/dos/Cargo.toml b/dos/Cargo.toml index 5cce65904a61af..d3c80ab5769325 100644 --- a/dos/Cargo.toml +++ b/dos/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-dos" -version = "1.11.10" +version = "1.11.11" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -17,23 +17,23 @@ itertools = "0.10.3" log = "0.4.17" rand = "0.7.0" serde = "1.0.138" -solana-bench-tps = { path = "../bench-tps", version = "=1.11.10" } -solana-client = { path = "../client", version = "=1.11.10" } -solana-core = { path = "../core", version = "=1.11.10" } -solana-faucet = { path = "../faucet", version = "=1.11.10" } -solana-gossip = { path = "../gossip", version = "=1.11.10" } -solana-logger = { path = "../logger", version = "=1.11.10" } -solana-measure = { path = "../measure", version = "=1.11.10" } -solana-net-utils = { path = "../net-utils", version = "=1.11.10" } -solana-perf = { path = "../perf", version = "=1.11.10" } -solana-rpc = { path = "../rpc", version = "=1.11.10" } -solana-sdk = { path = "../sdk", version = "=1.11.10" } -solana-streamer = { path = "../streamer", version = "=1.11.10" } -solana-version = { path = "../version", version = "=1.11.10" } +solana-bench-tps = { path = "../bench-tps", version = "=1.11.11" } +solana-client = { path = "../client", version = "=1.11.11" } +solana-core = { path = "../core", version = "=1.11.11" } +solana-faucet = { path = "../faucet", version = "=1.11.11" } +solana-gossip = { path = "../gossip", version = "=1.11.11" } +solana-logger = { path = "../logger", version = "=1.11.11" } +solana-measure = { path = "../measure", version = "=1.11.11" } +solana-net-utils = { path = "../net-utils", version = "=1.11.11" } +solana-perf = { path = "../perf", version = "=1.11.11" } +solana-rpc = { path = "../rpc", version = "=1.11.11" } +solana-sdk = { path = "../sdk", version = "=1.11.11" } +solana-streamer = { path = "../streamer", version = "=1.11.11" } +solana-version = { path = "../version", version = "=1.11.11" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] [dev-dependencies] serial_test = "0.8.0" -solana-local-cluster = { path = "../local-cluster", version = "=1.11.10" } +solana-local-cluster = { path = "../local-cluster", version = "=1.11.11" } diff --git a/download-utils/Cargo.toml b/download-utils/Cargo.toml index 71f6b534610671..90b6ba5d49f43b 100644 --- a/download-utils/Cargo.toml +++ b/download-utils/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-download-utils" -version = "1.11.10" +version = "1.11.11" description = "Solana Download Utils" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,8 +14,8 @@ console = "0.15.0" indicatif = "0.16.2" log = "0.4.17" reqwest = { version = "0.11.11", default-features = false, features = ["blocking", "brotli", "deflate", "gzip", "rustls-tls", "json"] } -solana-runtime = { path = "../runtime", version = "=1.11.10" } -solana-sdk = { path = "../sdk", version = "=1.11.10" } +solana-runtime = { path = "../runtime", version = "=1.11.11" } +solana-sdk = { path = "../sdk", version = "=1.11.11" } [lib] crate-type = ["lib"] diff --git a/entry/Cargo.toml b/entry/Cargo.toml index ad07831acf3baf..03e5428ca539ed 100644 --- a/entry/Cargo.toml +++ b/entry/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-entry" -version = "1.11.10" +version = "1.11.11" description = "Solana Entry" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -19,16 +19,16 @@ log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" serde = "1.0.138" -solana-measure = { path = "../measure", version = "=1.11.10" } -solana-merkle-tree = { path = "../merkle-tree", version = "=1.11.10" } -solana-metrics = { path = "../metrics", version = "=1.11.10" } -solana-perf = { path = "../perf", version = "=1.11.10" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.11.10" } -solana-sdk = { path = "../sdk", version = "=1.11.10" } +solana-measure = { path = "../measure", version = "=1.11.11" } +solana-merkle-tree = { path = "../merkle-tree", version = "=1.11.11" } +solana-metrics = { path = "../metrics", version = "=1.11.11" } +solana-perf = { path = "../perf", version = "=1.11.11" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.11.11" } +solana-sdk = { path = "../sdk", version = "=1.11.11" } [dev-dependencies] matches = "0.1.9" -solana-logger = { path = "../logger", version = "=1.11.10" } +solana-logger = { path = "../logger", version = "=1.11.11" } [lib] crate-type = ["lib"] diff --git a/faucet/Cargo.toml b/faucet/Cargo.toml index 5816e193554da1..3f04f93650388a 100644 --- a/faucet/Cargo.toml +++ b/faucet/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-faucet" -version = "1.11.10" +version = "1.11.11" description = "Solana Faucet" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -17,12 +17,12 @@ crossbeam-channel = "0.5" log = "0.4.17" serde = "1.0.138" serde_derive = "1.0.103" -solana-clap-utils = { path = "../clap-utils", version = "=1.11.10" } -solana-cli-config = { path = "../cli-config", version = "=1.11.10" } -solana-logger = { path = "../logger", version = "=1.11.10" } -solana-metrics = { path = "../metrics", version = "=1.11.10" } -solana-sdk = { path = "../sdk", version = "=1.11.10" } -solana-version = { path = "../version", version = "=1.11.10" } +solana-clap-utils = { path = "../clap-utils", version = "=1.11.11" } +solana-cli-config = { path = "../cli-config", version = "=1.11.11" } +solana-logger = { path = "../logger", version = "=1.11.11" } +solana-metrics = { path = "../metrics", version = "=1.11.11" } +solana-sdk = { path = "../sdk", version = "=1.11.11" } +solana-version = { path = "../version", version = "=1.11.11" } spl-memo = { version = "=3.0.1", features = ["no-entrypoint"] } thiserror = "1.0" tokio = { version = "1", features = ["full"] } diff --git a/frozen-abi/Cargo.toml b/frozen-abi/Cargo.toml index 93c44e9827a8ae..1437643ca059b1 100644 --- a/frozen-abi/Cargo.toml +++ b/frozen-abi/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-frozen-abi" -version = "1.11.10" +version = "1.11.11" description = "Solana Frozen ABI" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -20,7 +20,7 @@ serde_bytes = "0.11" serde_derive = "1.0" serde_json = "1.0" sha2 = "0.10.2" -solana-frozen-abi-macro = { path = "macro", version = "=1.11.10" } +solana-frozen-abi-macro = { path = "macro", version = "=1.11.11" } thiserror = "1.0" [target.'cfg(not(target_os = "solana"))'.dependencies] @@ -43,7 +43,7 @@ rand_core = { version = "0.6.3", features = ["alloc", "getrandom", "std"] } subtle = { version = "2.4.1", features = ["default", "i128", "std"] } [target.'cfg(not(target_os = "solana"))'.dev-dependencies] -solana-logger = { path = "../logger", version = "=1.11.10" } +solana-logger = { path = "../logger", version = "=1.11.11" } [build-dependencies] rustc_version = "0.4" diff --git a/frozen-abi/macro/Cargo.toml b/frozen-abi/macro/Cargo.toml index d01b82c17f71cd..6c8d492fb60315 100644 --- a/frozen-abi/macro/Cargo.toml +++ b/frozen-abi/macro/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-frozen-abi-macro" -version = "1.11.10" +version = "1.11.11" description = "Solana Frozen ABI Macro" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/genesis-utils/Cargo.toml b/genesis-utils/Cargo.toml index 25c739792db2bf..3d505f28e37fce 100644 --- a/genesis-utils/Cargo.toml +++ b/genesis-utils/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-genesis-utils" -version = "1.11.10" +version = "1.11.11" description = "Solana Genesis Utils" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,9 +10,9 @@ documentation = "https://docs.rs/solana-download-utils" edition = "2021" [dependencies] -solana-download-utils = { path = "../download-utils", version = "=1.11.10" } -solana-runtime = { path = "../runtime", version = "=1.11.10" } -solana-sdk = { path = "../sdk", version = "=1.11.10" } +solana-download-utils = { path = "../download-utils", version = "=1.11.11" } +solana-runtime = { path = "../runtime", version = "=1.11.11" } +solana-sdk = { path = "../sdk", version = "=1.11.11" } [lib] crate-type = ["lib"] diff --git a/genesis/Cargo.toml b/genesis/Cargo.toml index d0a8126291d7b0..8bcab8698ef2e0 100644 --- a/genesis/Cargo.toml +++ b/genesis/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-genesis" description = "Blockchain, Rebuilt for Scale" -version = "1.11.10" +version = "1.11.11" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -15,16 +15,16 @@ clap = "2.33.1" serde = "1.0.138" serde_json = "1.0.81" serde_yaml = "0.8.26" -solana-clap-utils = { path = "../clap-utils", version = "=1.11.10" } -solana-cli-config = { path = "../cli-config", version = "=1.11.10" } -solana-entry = { path = "../entry", version = "=1.11.10" } -solana-ledger = { path = "../ledger", version = "=1.11.10" } -solana-logger = { path = "../logger", version = "=1.11.10" } -solana-runtime = { path = "../runtime", version = "=1.11.10" } -solana-sdk = { path = "../sdk", version = "=1.11.10" } -solana-stake-program = { path = "../programs/stake", version = "=1.11.10" } -solana-version = { path = "../version", version = "=1.11.10" } -solana-vote-program = { path = "../programs/vote", version = "=1.11.10" } +solana-clap-utils = { path = "../clap-utils", version = "=1.11.11" } +solana-cli-config = { path = "../cli-config", version = "=1.11.11" } +solana-entry = { path = "../entry", version = "=1.11.11" } +solana-ledger = { path = "../ledger", version = "=1.11.11" } +solana-logger = { path = "../logger", version = "=1.11.11" } +solana-runtime = { path = "../runtime", version = "=1.11.11" } +solana-sdk = { path = "../sdk", version = "=1.11.11" } +solana-stake-program = { path = "../programs/stake", version = "=1.11.11" } +solana-version = { path = "../version", version = "=1.11.11" } +solana-vote-program = { path = "../programs/vote", version = "=1.11.11" } tempfile = "3.3.0" [[bin]] diff --git a/geyser-plugin-interface/Cargo.toml b/geyser-plugin-interface/Cargo.toml index 905497a8c3e5fa..a1a61abbf70019 100644 --- a/geyser-plugin-interface/Cargo.toml +++ b/geyser-plugin-interface/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-geyser-plugin-interface" description = "The Solana Geyser plugin interface." -version = "1.11.10" +version = "1.11.11" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -11,8 +11,8 @@ documentation = "https://docs.rs/solana-geyser-plugin-interface" [dependencies] log = "0.4.17" -solana-sdk = { path = "../sdk", version = "=1.11.10" } -solana-transaction-status = { path = "../transaction-status", version = "=1.11.10" } +solana-sdk = { path = "../sdk", version = "=1.11.11" } +solana-transaction-status = { path = "../transaction-status", version = "=1.11.11" } thiserror = "1.0.31" [package.metadata.docs.rs] diff --git a/geyser-plugin-manager/Cargo.toml b/geyser-plugin-manager/Cargo.toml index f34249d15dfd65..a80de6a5f098dc 100644 --- a/geyser-plugin-manager/Cargo.toml +++ b/geyser-plugin-manager/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-geyser-plugin-manager" description = "The Solana Geyser plugin manager." -version = "1.11.10" +version = "1.11.11" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -16,13 +16,13 @@ json5 = "0.4.1" libloading = "0.7.3" log = "0.4.17" serde_json = "1.0.81" -solana-geyser-plugin-interface = { path = "../geyser-plugin-interface", version = "=1.11.10" } -solana-measure = { path = "../measure", version = "=1.11.10" } -solana-metrics = { path = "../metrics", version = "=1.11.10" } -solana-rpc = { path = "../rpc", version = "=1.11.10" } -solana-runtime = { path = "../runtime", version = "=1.11.10" } -solana-sdk = { path = "../sdk", version = "=1.11.10" } -solana-transaction-status = { path = "../transaction-status", version = "=1.11.10" } +solana-geyser-plugin-interface = { path = "../geyser-plugin-interface", version = "=1.11.11" } +solana-measure = { path = "../measure", version = "=1.11.11" } +solana-metrics = { path = "../metrics", version = "=1.11.11" } +solana-rpc = { path = "../rpc", version = "=1.11.11" } +solana-runtime = { path = "../runtime", version = "=1.11.11" } +solana-sdk = { path = "../sdk", version = "=1.11.11" } +solana-transaction-status = { path = "../transaction-status", version = "=1.11.11" } thiserror = "1.0.31" [package.metadata.docs.rs] diff --git a/gossip/Cargo.toml b/gossip/Cargo.toml index 5b9ac02aa80d19..b2c3e505fb5c13 100644 --- a/gossip/Cargo.toml +++ b/gossip/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-gossip" description = "Blockchain, Rebuilt for Scale" -version = "1.11.10" +version = "1.11.11" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -27,24 +27,24 @@ rayon = "1.5.3" serde = "1.0.138" serde_bytes = "0.11" serde_derive = "1.0.103" -solana-bloom = { path = "../bloom", version = "=1.11.10" } -solana-clap-utils = { path = "../clap-utils", version = "=1.11.10" } -solana-client = { path = "../client", version = "=1.11.10" } -solana-entry = { path = "../entry", version = "=1.11.10" } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.11.10" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.11.10" } -solana-ledger = { path = "../ledger", version = "=1.11.10" } -solana-logger = { path = "../logger", version = "=1.11.10" } -solana-measure = { path = "../measure", version = "=1.11.10" } -solana-metrics = { path = "../metrics", version = "=1.11.10" } -solana-net-utils = { path = "../net-utils", version = "=1.11.10" } -solana-perf = { path = "../perf", version = "=1.11.10" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.11.10" } -solana-runtime = { path = "../runtime", version = "=1.11.10" } -solana-sdk = { path = "../sdk", version = "=1.11.10" } -solana-streamer = { path = "../streamer", version = "=1.11.10" } -solana-version = { path = "../version", version = "=1.11.10" } -solana-vote-program = { path = "../programs/vote", version = "=1.11.10" } +solana-bloom = { path = "../bloom", version = "=1.11.11" } +solana-clap-utils = { path = "../clap-utils", version = "=1.11.11" } +solana-client = { path = "../client", version = "=1.11.11" } +solana-entry = { path = "../entry", version = "=1.11.11" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.11.11" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.11.11" } +solana-ledger = { path = "../ledger", version = "=1.11.11" } +solana-logger = { path = "../logger", version = "=1.11.11" } +solana-measure = { path = "../measure", version = "=1.11.11" } +solana-metrics = { path = "../metrics", version = "=1.11.11" } +solana-net-utils = { path = "../net-utils", version = "=1.11.11" } +solana-perf = { path = "../perf", version = "=1.11.11" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.11.11" } +solana-runtime = { path = "../runtime", version = "=1.11.11" } +solana-sdk = { path = "../sdk", version = "=1.11.11" } +solana-streamer = { path = "../streamer", version = "=1.11.11" } +solana-version = { path = "../version", version = "=1.11.11" } +solana-vote-program = { path = "../programs/vote", version = "=1.11.11" } thiserror = "1.0" [dev-dependencies] diff --git a/install/Cargo.toml b/install/Cargo.toml index c18f3aebe417e7..cefcafbed7ac9c 100644 --- a/install/Cargo.toml +++ b/install/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-install" description = "The solana cluster software installer" -version = "1.11.10" +version = "1.11.11" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -26,12 +26,12 @@ reqwest = { version = "0.11.11", default-features = false, features = ["blocking semver = "1.0.10" serde = { version = "1.0.138", features = ["derive"] } serde_yaml = "0.8.26" -solana-clap-utils = { path = "../clap-utils", version = "=1.11.10" } -solana-client = { path = "../client", version = "=1.11.10" } -solana-config-program = { path = "../programs/config", version = "=1.11.10" } -solana-logger = { path = "../logger", version = "=1.11.10" } -solana-sdk = { path = "../sdk", version = "=1.11.10" } -solana-version = { path = "../version", version = "=1.11.10" } +solana-clap-utils = { path = "../clap-utils", version = "=1.11.11" } +solana-client = { path = "../client", version = "=1.11.11" } +solana-config-program = { path = "../programs/config", version = "=1.11.11" } +solana-logger = { path = "../logger", version = "=1.11.11" } +solana-sdk = { path = "../sdk", version = "=1.11.11" } +solana-version = { path = "../version", version = "=1.11.11" } tar = "0.4.38" tempfile = "3.3.0" url = "2.2.2" diff --git a/keygen/Cargo.toml b/keygen/Cargo.toml index 3351fb27b074b3..3522ce4a7543c5 100644 --- a/keygen/Cargo.toml +++ b/keygen/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-keygen" -version = "1.11.10" +version = "1.11.11" description = "Solana key generation utility" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,11 +14,11 @@ bs58 = "0.4.0" clap = { version = "3.1.5", features = ["cargo"] } dirs-next = "2.0.0" num_cpus = "1.13.1" -solana-clap-v3-utils = { path = "../clap-v3-utils", version = "=1.11.10" } -solana-cli-config = { path = "../cli-config", version = "=1.11.10" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.11.10" } -solana-sdk = { path = "../sdk", version = "=1.11.10" } -solana-version = { path = "../version", version = "=1.11.10" } +solana-clap-v3-utils = { path = "../clap-v3-utils", version = "=1.11.11" } +solana-cli-config = { path = "../cli-config", version = "=1.11.11" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.11.11" } +solana-sdk = { path = "../sdk", version = "=1.11.11" } +solana-version = { path = "../version", version = "=1.11.11" } tiny-bip39 = "0.8.2" [[bin]] diff --git a/ledger-tool/Cargo.toml b/ledger-tool/Cargo.toml index e1133a850b85a8..bf69bbe243ff34 100644 --- a/ledger-tool/Cargo.toml +++ b/ledger-tool/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-ledger-tool" description = "Blockchain, Rebuilt for Scale" -version = "1.11.10" +version = "1.11.11" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -22,20 +22,20 @@ log = { version = "0.4.17" } regex = "1" serde = { version = "1.0", features = ["derive"] } serde_json = "1.0.81" -solana-clap-utils = { path = "../clap-utils", version = "=1.11.10" } -solana-cli-output = { path = "../cli-output", version = "=1.11.10" } -solana-core = { path = "../core", version = "=1.11.10" } -solana-entry = { path = "../entry", version = "=1.11.10" } -solana-ledger = { path = "../ledger", version = "=1.11.10" } -solana-logger = { path = "../logger", version = "=1.11.10" } -solana-measure = { path = "../measure", version = "=1.11.10" } -solana-runtime = { path = "../runtime", version = "=1.11.10" } -solana-sdk = { path = "../sdk", version = "=1.11.10" } -solana-stake-program = { path = "../programs/stake", version = "=1.11.10" } -solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.11.10" } -solana-transaction-status = { path = "../transaction-status", version = "=1.11.10" } -solana-version = { path = "../version", version = "=1.11.10" } -solana-vote-program = { path = "../programs/vote", version = "=1.11.10" } +solana-clap-utils = { path = "../clap-utils", version = "=1.11.11" } +solana-cli-output = { path = "../cli-output", version = "=1.11.11" } +solana-core = { path = "../core", version = "=1.11.11" } +solana-entry = { path = "../entry", version = "=1.11.11" } +solana-ledger = { path = "../ledger", version = "=1.11.11" } +solana-logger = { path = "../logger", version = "=1.11.11" } +solana-measure = { path = "../measure", version = "=1.11.11" } +solana-runtime = { path = "../runtime", version = "=1.11.11" } +solana-sdk = { path = "../sdk", version = "=1.11.11" } +solana-stake-program = { path = "../programs/stake", version = "=1.11.11" } +solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.11.11" } +solana-transaction-status = { path = "../transaction-status", version = "=1.11.11" } +solana-version = { path = "../version", version = "=1.11.11" } +solana-vote-program = { path = "../programs/vote", version = "=1.11.11" } tokio = { version = "1", features = ["full"] } [target.'cfg(not(target_env = "msvc"))'.dependencies] diff --git a/ledger/Cargo.toml b/ledger/Cargo.toml index 83e1834afc5ed1..91b079893064b4 100644 --- a/ledger/Cargo.toml +++ b/ledger/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-ledger" -version = "1.11.10" +version = "1.11.11" description = "Solana ledger" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -34,23 +34,23 @@ reed-solomon-erasure = { version = "5.0.3", features = ["simd-accel"] } serde = "1.0.138" serde_bytes = "0.11.6" sha2 = "0.10.2" -solana-account-decoder = { path = "../account-decoder", version = "=1.11.10" } -solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.11.10" } -solana-entry = { path = "../entry", version = "=1.11.10" } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.11.10" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.11.10" } -solana-measure = { path = "../measure", version = "=1.11.10" } -solana-metrics = { path = "../metrics", version = "=1.11.10" } -solana-perf = { path = "../perf", version = "=1.11.10" } -solana-program-runtime = { path = "../program-runtime", version = "=1.11.10" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.11.10" } -solana-runtime = { path = "../runtime", version = "=1.11.10" } -solana-sdk = { path = "../sdk", version = "=1.11.10" } -solana-stake-program = { path = "../programs/stake", version = "=1.11.10" } -solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.11.10" } -solana-storage-proto = { path = "../storage-proto", version = "=1.11.10" } -solana-transaction-status = { path = "../transaction-status", version = "=1.11.10" } -solana-vote-program = { path = "../programs/vote", version = "=1.11.10" } +solana-account-decoder = { path = "../account-decoder", version = "=1.11.11" } +solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.11.11" } +solana-entry = { path = "../entry", version = "=1.11.11" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.11.11" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.11.11" } +solana-measure = { path = "../measure", version = "=1.11.11" } +solana-metrics = { path = "../metrics", version = "=1.11.11" } +solana-perf = { path = "../perf", version = "=1.11.11" } +solana-program-runtime = { path = "../program-runtime", version = "=1.11.11" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.11.11" } +solana-runtime = { path = "../runtime", version = "=1.11.11" } +solana-sdk = { path = "../sdk", version = "=1.11.11" } +solana-stake-program = { path = "../programs/stake", version = "=1.11.11" } +solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.11.11" } +solana-storage-proto = { path = "../storage-proto", version = "=1.11.11" } +solana-transaction-status = { path = "../transaction-status", version = "=1.11.11" } +solana-vote-program = { path = "../programs/vote", version = "=1.11.11" } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } spl-token-2022 = { version = "=0.4.2", features = ["no-entrypoint"] } static_assertions = "1.1.0" @@ -71,8 +71,8 @@ features = ["lz4"] assert_matches = "1.5.0" bs58 = "0.4.0" matches = "0.1.9" -solana-account-decoder = { path = "../account-decoder", version = "=1.11.10" } -solana-logger = { path = "../logger", version = "=1.11.10" } +solana-account-decoder = { path = "../account-decoder", version = "=1.11.11" } +solana-logger = { path = "../logger", version = "=1.11.11" } test-case = "2.1.0" [build-dependencies] diff --git a/local-cluster/Cargo.toml b/local-cluster/Cargo.toml index bb1ea3e9bc930c..089947e73e73db 100644 --- a/local-cluster/Cargo.toml +++ b/local-cluster/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-local-cluster" description = "Blockchain, Rebuilt for Scale" -version = "1.11.10" +version = "1.11.11" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -16,25 +16,25 @@ itertools = "0.10.3" log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" -solana-client = { path = "../client", version = "=1.11.10" } -solana-config-program = { path = "../programs/config", version = "=1.11.10" } -solana-core = { path = "../core", version = "=1.11.10" } -solana-entry = { path = "../entry", version = "=1.11.10" } -solana-gossip = { path = "../gossip", version = "=1.11.10" } -solana-ledger = { path = "../ledger", version = "=1.11.10" } -solana-runtime = { path = "../runtime", version = "=1.11.10" } -solana-sdk = { path = "../sdk", version = "=1.11.10" } -solana-stake-program = { path = "../programs/stake", version = "=1.11.10" } -solana-streamer = { path = "../streamer", version = "=1.11.10" } -solana-vote-program = { path = "../programs/vote", version = "=1.11.10" } +solana-client = { path = "../client", version = "=1.11.11" } +solana-config-program = { path = "../programs/config", version = "=1.11.11" } +solana-core = { path = "../core", version = "=1.11.11" } +solana-entry = { path = "../entry", version = "=1.11.11" } +solana-gossip = { path = "../gossip", version = "=1.11.11" } +solana-ledger = { path = "../ledger", version = "=1.11.11" } +solana-runtime = { path = "../runtime", version = "=1.11.11" } +solana-sdk = { path = "../sdk", version = "=1.11.11" } +solana-stake-program = { path = "../programs/stake", version = "=1.11.11" } +solana-streamer = { path = "../streamer", version = "=1.11.11" } +solana-vote-program = { path = "../programs/vote", version = "=1.11.11" } tempfile = "3.3.0" [dev-dependencies] assert_matches = "1.5.0" gag = "1.0.0" serial_test = "0.8.0" -solana-download-utils = { path = "../download-utils", version = "=1.11.10" } -solana-logger = { path = "../logger", version = "=1.11.10" } +solana-download-utils = { path = "../download-utils", version = "=1.11.11" } +solana-logger = { path = "../logger", version = "=1.11.11" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/log-analyzer/Cargo.toml b/log-analyzer/Cargo.toml index 9f1117dd43ddd4..a20174cd79d03b 100644 --- a/log-analyzer/Cargo.toml +++ b/log-analyzer/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-log-analyzer" description = "The solana cluster network analysis tool" -version = "1.11.10" +version = "1.11.11" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,8 +14,8 @@ byte-unit = "4.0.14" clap = { version = "3.1.5", features = ["cargo"] } serde = "1.0.138" serde_json = "1.0.81" -solana-logger = { path = "../logger", version = "=1.11.10" } -solana-version = { path = "../version", version = "=1.11.10" } +solana-logger = { path = "../logger", version = "=1.11.11" } +solana-version = { path = "../version", version = "=1.11.11" } [[bin]] name = "solana-log-analyzer" diff --git a/logger/Cargo.toml b/logger/Cargo.toml index 8b9dfc63489048..92b2ba6b75ef22 100644 --- a/logger/Cargo.toml +++ b/logger/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-logger" -version = "1.11.10" +version = "1.11.11" description = "Solana Logger" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/measure/Cargo.toml b/measure/Cargo.toml index 3aa4bf9f958003..392be6131b0e8a 100644 --- a/measure/Cargo.toml +++ b/measure/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "solana-measure" description = "Blockchain, Rebuilt for Scale" -version = "1.11.10" +version = "1.11.11" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-measure" readme = "../README.md" @@ -12,7 +12,7 @@ edition = "2021" [dependencies] log = "0.4.17" -solana-sdk = { path = "../sdk", version = "=1.11.10" } +solana-sdk = { path = "../sdk", version = "=1.11.11" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/merkle-root-bench/Cargo.toml b/merkle-root-bench/Cargo.toml index 727daeb025766d..8c716103311b79 100644 --- a/merkle-root-bench/Cargo.toml +++ b/merkle-root-bench/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-merkle-root-bench" -version = "1.11.10" +version = "1.11.11" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -11,11 +11,11 @@ publish = false [dependencies] clap = "2.33.1" log = "0.4.17" -solana-logger = { path = "../logger", version = "=1.11.10" } -solana-measure = { path = "../measure", version = "=1.11.10" } -solana-runtime = { path = "../runtime", version = "=1.11.10" } -solana-sdk = { path = "../sdk", version = "=1.11.10" } -solana-version = { path = "../version", version = "=1.11.10" } +solana-logger = { path = "../logger", version = "=1.11.11" } +solana-measure = { path = "../measure", version = "=1.11.11" } +solana-runtime = { path = "../runtime", version = "=1.11.11" } +solana-sdk = { path = "../sdk", version = "=1.11.11" } +solana-version = { path = "../version", version = "=1.11.11" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/merkle-tree/Cargo.toml b/merkle-tree/Cargo.toml index a0b72caf2a1211..6a5c36ff05bad9 100644 --- a/merkle-tree/Cargo.toml +++ b/merkle-tree/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-merkle-tree" -version = "1.11.10" +version = "1.11.11" description = "Solana Merkle Tree" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -11,7 +11,7 @@ edition = "2021" [dependencies] fast-math = "0.1" -solana-program = { path = "../sdk/program", version = "=1.11.10" } +solana-program = { path = "../sdk/program", version = "=1.11.11" } # This can go once the BPF toolchain target Rust 1.42.0+ [target.bpfel-unknown-unknown.dependencies] diff --git a/metrics/Cargo.toml b/metrics/Cargo.toml index ec5904737dbc2b..34bfa8216f6e5b 100644 --- a/metrics/Cargo.toml +++ b/metrics/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-metrics" -version = "1.11.10" +version = "1.11.11" description = "Solana Metrics" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -15,7 +15,7 @@ gethostname = "0.2.3" lazy_static = "1.4.0" log = "0.4.17" reqwest = { version = "0.11.11", default-features = false, features = ["blocking", "brotli", "deflate", "gzip", "rustls-tls", "json"] } -solana-sdk = { path = "../sdk", version = "=1.11.10" } +solana-sdk = { path = "../sdk", version = "=1.11.11" } [dev-dependencies] env_logger = "0.9.0" diff --git a/net-shaper/Cargo.toml b/net-shaper/Cargo.toml index 7ea6de41421cc5..680dc9225a9cb5 100644 --- a/net-shaper/Cargo.toml +++ b/net-shaper/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-net-shaper" description = "The solana cluster network shaping tool" -version = "1.11.10" +version = "1.11.11" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,7 +14,7 @@ clap = { version = "3.1.5", features = ["cargo"] } rand = "0.7.0" serde = { version = "1.0.138", features = ["derive"] } serde_json = "1.0.81" -solana-logger = { path = "../logger", version = "=1.11.10" } +solana-logger = { path = "../logger", version = "=1.11.11" } [[bin]] name = "solana-net-shaper" diff --git a/net-utils/Cargo.toml b/net-utils/Cargo.toml index e1b4b13b2bd88e..f5dac641725c66 100644 --- a/net-utils/Cargo.toml +++ b/net-utils/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-net-utils" -version = "1.11.10" +version = "1.11.11" description = "Solana Network Utilities" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -19,9 +19,9 @@ rand = "0.7.0" serde = "1.0.138" serde_derive = "1.0.103" socket2 = "0.4.4" -solana-logger = { path = "../logger", version = "=1.11.10" } -solana-sdk = { path = "../sdk", version = "=1.11.10" } -solana-version = { path = "../version", version = "=1.11.10" } +solana-logger = { path = "../logger", version = "=1.11.11" } +solana-sdk = { path = "../sdk", version = "=1.11.11" } +solana-version = { path = "../version", version = "=1.11.11" } tokio = { version = "1", features = ["full"] } url = "2.2.2" diff --git a/notifier/Cargo.toml b/notifier/Cargo.toml index 34714970cb2125..cacd87e991df75 100644 --- a/notifier/Cargo.toml +++ b/notifier/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-notifier" -version = "1.11.10" +version = "1.11.11" description = "Solana Notifier" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/perf/Cargo.toml b/perf/Cargo.toml index d83770e5496b63..df4801eff102ef 100644 --- a/perf/Cargo.toml +++ b/perf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-perf" -version = "1.11.10" +version = "1.11.11" description = "Solana Performance APIs" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -22,10 +22,10 @@ log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" serde = "1.0.138" -solana-metrics = { path = "../metrics", version = "=1.11.10" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.11.10" } -solana-sdk = { path = "../sdk", version = "=1.11.10" } -solana-vote-program = { path = "../programs/vote", version = "=1.11.10" } +solana-metrics = { path = "../metrics", version = "=1.11.11" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.11.11" } +solana-sdk = { path = "../sdk", version = "=1.11.11" } +solana-vote-program = { path = "../programs/vote", version = "=1.11.11" } [target."cfg(target_os = \"linux\")".dependencies] caps = "0.5.3" @@ -37,7 +37,7 @@ name = "solana_perf" [dev-dependencies] matches = "0.1.9" -solana-logger = { path = "../logger", version = "=1.11.10" } +solana-logger = { path = "../logger", version = "=1.11.11" } [[bench]] name = "sigverify" diff --git a/poh-bench/Cargo.toml b/poh-bench/Cargo.toml index 43f7d2c614370f..e5e537ae3b7632 100644 --- a/poh-bench/Cargo.toml +++ b/poh-bench/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-poh-bench" -version = "1.11.10" +version = "1.11.11" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,12 +14,12 @@ clap = { version = "3.1.5", features = ["cargo"] } log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" -solana-entry = { path = "../entry", version = "=1.11.10" } -solana-logger = { path = "../logger", version = "=1.11.10" } -solana-measure = { path = "../measure", version = "=1.11.10" } -solana-perf = { path = "../perf", version = "=1.11.10" } -solana-sdk = { path = "../sdk", version = "=1.11.10" } -solana-version = { path = "../version", version = "=1.11.10" } +solana-entry = { path = "../entry", version = "=1.11.11" } +solana-logger = { path = "../logger", version = "=1.11.11" } +solana-measure = { path = "../measure", version = "=1.11.11" } +solana-perf = { path = "../perf", version = "=1.11.11" } +solana-sdk = { path = "../sdk", version = "=1.11.11" } +solana-version = { path = "../version", version = "=1.11.11" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/poh/Cargo.toml b/poh/Cargo.toml index d4f29cfeea23e3..20e5b5b2ea2de3 100644 --- a/poh/Cargo.toml +++ b/poh/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-poh" -version = "1.11.10" +version = "1.11.11" description = "Solana PoH" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,21 +13,21 @@ edition = "2021" core_affinity = "0.5.10" crossbeam-channel = "0.5" log = "0.4.17" -solana-entry = { path = "../entry", version = "=1.11.10" } -solana-ledger = { path = "../ledger", version = "=1.11.10" } -solana-measure = { path = "../measure", version = "=1.11.10" } -solana-metrics = { path = "../metrics", version = "=1.11.10" } -solana-runtime = { path = "../runtime", version = "=1.11.10" } -solana-sdk = { path = "../sdk", version = "=1.11.10" } -solana-sys-tuner = { path = "../sys-tuner", version = "=1.11.10" } +solana-entry = { path = "../entry", version = "=1.11.11" } +solana-ledger = { path = "../ledger", version = "=1.11.11" } +solana-measure = { path = "../measure", version = "=1.11.11" } +solana-metrics = { path = "../metrics", version = "=1.11.11" } +solana-runtime = { path = "../runtime", version = "=1.11.11" } +solana-sdk = { path = "../sdk", version = "=1.11.11" } +solana-sys-tuner = { path = "../sys-tuner", version = "=1.11.11" } thiserror = "1.0" [dev-dependencies] bincode = "1.3.3" matches = "0.1.9" rand = "0.7.0" -solana-logger = { path = "../logger", version = "=1.11.10" } -solana-perf = { path = "../perf", version = "=1.11.10" } +solana-logger = { path = "../logger", version = "=1.11.11" } +solana-perf = { path = "../perf", version = "=1.11.11" } [lib] crate-type = ["lib"] diff --git a/program-runtime/Cargo.toml b/program-runtime/Cargo.toml index 731b9a1b78995d..c227c21c36137d 100644 --- a/program-runtime/Cargo.toml +++ b/program-runtime/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-program-runtime" -version = "1.11.10" +version = "1.11.11" description = "Solana program runtime" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -20,16 +20,16 @@ log = "0.4.14" num-derive = { version = "0.3" } num-traits = { version = "0.2" } serde = { version = "1.0.129", features = ["derive", "rc"] } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.11.10" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.11.10" } -solana-measure = { path = "../measure", version = "=1.11.10" } -solana-metrics = { path = "../metrics", version = "=1.11.10" } -solana-sdk = { path = "../sdk", version = "=1.11.10" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.11.11" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.11.11" } +solana-measure = { path = "../measure", version = "=1.11.11" } +solana-metrics = { path = "../metrics", version = "=1.11.11" } +solana-sdk = { path = "../sdk", version = "=1.11.11" } thiserror = "1.0" enum-iterator = "0.8.1" [dev-dependencies] -solana-logger = { path = "../logger", version = "=1.11.10" } +solana-logger = { path = "../logger", version = "=1.11.11" } [lib] crate-type = ["lib"] diff --git a/program-test/Cargo.toml b/program-test/Cargo.toml index b6f788ace9a18f..860dbb6bfb9497 100644 --- a/program-test/Cargo.toml +++ b/program-test/Cargo.toml @@ -5,7 +5,7 @@ edition = "2021" license = "Apache-2.0" name = "solana-program-test" repository = "https://github.com/solana-labs/solana" -version = "1.11.10" +version = "1.11.11" [dependencies] assert_matches = "1.5.0" @@ -15,13 +15,13 @@ bincode = "1.3.3" chrono-humanize = "0.2.1" log = "0.4.17" serde = "1.0.138" -solana-banks-client = { path = "../banks-client", version = "=1.11.10" } -solana-banks-server = { path = "../banks-server", version = "=1.11.10" } -solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.11.10" } -solana-logger = { path = "../logger", version = "=1.11.10" } -solana-program-runtime = { path = "../program-runtime", version = "=1.11.10" } -solana-runtime = { path = "../runtime", version = "=1.11.10" } -solana-sdk = { path = "../sdk", version = "=1.11.10" } -solana-vote-program = { path = "../programs/vote", version = "=1.11.10" } +solana-banks-client = { path = "../banks-client", version = "=1.11.11" } +solana-banks-server = { path = "../banks-server", version = "=1.11.11" } +solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.11.11" } +solana-logger = { path = "../logger", version = "=1.11.11" } +solana-program-runtime = { path = "../program-runtime", version = "=1.11.11" } +solana-runtime = { path = "../runtime", version = "=1.11.11" } +solana-sdk = { path = "../sdk", version = "=1.11.11" } +solana-vote-program = { path = "../programs/vote", version = "=1.11.11" } thiserror = "1.0" tokio = { version = "1", features = ["full"] } diff --git a/programs/address-lookup-table-tests/Cargo.toml b/programs/address-lookup-table-tests/Cargo.toml index ae5eabb5bf35bb..2566152ebbc2cc 100644 --- a/programs/address-lookup-table-tests/Cargo.toml +++ b/programs/address-lookup-table-tests/Cargo.toml @@ -3,7 +3,7 @@ [package] name = "solana-address-lookup-table-program-tests" -version = "1.11.10" +version = "1.11.11" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" @@ -14,9 +14,9 @@ publish = false [dev-dependencies] assert_matches = "1.5.0" bincode = "1.3.3" -solana-address-lookup-table-program = { path = "../address-lookup-table", version = "=1.11.10" } -solana-program-test = { path = "../../program-test", version = "=1.11.10" } -solana-sdk = { path = "../../sdk", version = "=1.11.10" } +solana-address-lookup-table-program = { path = "../address-lookup-table", version = "=1.11.11" } +solana-program-test = { path = "../../program-test", version = "=1.11.11" } +solana-sdk = { path = "../../sdk", version = "=1.11.11" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/address-lookup-table/Cargo.toml b/programs/address-lookup-table/Cargo.toml index 671f0dc271ae17..fff902a3713c63 100644 --- a/programs/address-lookup-table/Cargo.toml +++ b/programs/address-lookup-table/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-address-lookup-table-program" -version = "1.11.10" +version = "1.11.11" description = "Solana address lookup table program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -16,14 +16,14 @@ log = "0.4.17" num-derive = "0.3" num-traits = "0.2" serde = { version = "1.0.138", features = ["derive"] } -solana-frozen-abi = { path = "../../frozen-abi", version = "=1.11.10" } -solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.11.10" } -solana-program = { path = "../../sdk/program", version = "=1.11.10" } +solana-frozen-abi = { path = "../../frozen-abi", version = "=1.11.11" } +solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.11.11" } +solana-program = { path = "../../sdk/program", version = "=1.11.11" } thiserror = "1.0" [target.'cfg(not(target_os = "solana"))'.dependencies] -solana-program-runtime = { path = "../../program-runtime", version = "=1.11.10" } -solana-sdk = { path = "../../sdk", version = "=1.11.10" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.11.11" } +solana-sdk = { path = "../../sdk", version = "=1.11.11" } [build-dependencies] rustc_version = "0.4" diff --git a/programs/bpf-loader-tests/Cargo.toml b/programs/bpf-loader-tests/Cargo.toml index 24d414db8a2827..b0a5c259637bd1 100644 --- a/programs/bpf-loader-tests/Cargo.toml +++ b/programs/bpf-loader-tests/Cargo.toml @@ -3,7 +3,7 @@ [package] name = "solana-bpf-loader-program-tests" -version = "1.11.10" +version = "1.11.11" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" @@ -14,9 +14,9 @@ publish = false [dev-dependencies] assert_matches = "1.5.0" bincode = "1.3.3" -solana-bpf-loader-program = { path = "../bpf_loader", version = "=1.11.10" } -solana-program-test = { path = "../../program-test", version = "=1.11.10" } -solana-sdk = { path = "../../sdk", version = "=1.11.10" } +solana-bpf-loader-program = { path = "../bpf_loader", version = "=1.11.11" } +solana-program-test = { path = "../../program-test", version = "=1.11.11" } +solana-sdk = { path = "../../sdk", version = "=1.11.11" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/bpf/Cargo.lock b/programs/bpf/Cargo.lock index 38d7c470159728..5833374ea60e9a 100644 --- a/programs/bpf/Cargo.lock +++ b/programs/bpf/Cargo.lock @@ -4060,7 +4060,7 @@ dependencies = [ [[package]] name = "solana-account-decoder" -version = "1.11.10" +version = "1.11.11" dependencies = [ "Inflector", "base64 0.13.0", @@ -4072,7 +4072,7 @@ dependencies = [ "serde_derive", "serde_json", "solana-config-program", - "solana-sdk 1.11.10", + "solana-sdk 1.11.11", "solana-vote-program", "spl-token", "spl-token-2022", @@ -4082,7 +4082,7 @@ dependencies = [ [[package]] name = "solana-address-lookup-table-program" -version = "1.11.10" +version = "1.11.11" dependencies = [ "bincode", "bytemuck", @@ -4091,23 +4091,23 @@ dependencies = [ "num-traits", "rustc_version", "serde", - "solana-frozen-abi 1.11.10", - "solana-frozen-abi-macro 1.11.10", - "solana-program 1.11.10", + "solana-frozen-abi 1.11.11", + "solana-frozen-abi-macro 1.11.11", + "solana-program 1.11.11", "solana-program-runtime", - "solana-sdk 1.11.10", + "solana-sdk 1.11.11", "thiserror", ] [[package]] name = "solana-banks-client" -version = "1.11.10" +version = "1.11.11" dependencies = [ "borsh", "futures 0.3.21", "solana-banks-interface", - "solana-program 1.11.10", - "solana-sdk 1.11.10", + "solana-program 1.11.11", + "solana-sdk 1.11.11", "tarpc", "thiserror", "tokio", @@ -4116,16 +4116,16 @@ dependencies = [ [[package]] name = "solana-banks-interface" -version = "1.11.10" +version = "1.11.11" dependencies = [ "serde", - "solana-sdk 1.11.10", + "solana-sdk 1.11.11", "tarpc", ] [[package]] name = "solana-banks-server" -version = "1.11.10" +version = "1.11.11" dependencies = [ "bincode", "crossbeam-channel", @@ -4133,7 +4133,7 @@ dependencies = [ "solana-banks-interface", "solana-client", "solana-runtime", - "solana-sdk 1.11.10", + "solana-sdk 1.11.11", "solana-send-transaction-service", "tarpc", "tokio", @@ -4143,7 +4143,7 @@ dependencies = [ [[package]] name = "solana-bloom" -version = "1.11.10" +version = "1.11.11" dependencies = [ "bv", "fnv", @@ -4153,14 +4153,14 @@ dependencies = [ "rustc_version", "serde", "serde_derive", - "solana-frozen-abi 1.11.10", - "solana-frozen-abi-macro 1.11.10", - "solana-sdk 1.11.10", + "solana-frozen-abi 1.11.11", + "solana-frozen-abi-macro 1.11.11", + "solana-sdk 1.11.11", ] [[package]] name = "solana-bpf-loader-program" -version = "1.11.10" +version = "1.11.11" dependencies = [ "bincode", "byteorder 1.4.3", @@ -4169,15 +4169,15 @@ dependencies = [ "solana-measure", "solana-metrics", "solana-program-runtime", - "solana-sdk 1.11.10", - "solana-zk-token-sdk 1.11.10", + "solana-sdk 1.11.11", + "solana-zk-token-sdk 1.11.11", "solana_rbpf", "thiserror", ] [[package]] name = "solana-bpf-programs" -version = "1.11.10" +version = "1.11.11" dependencies = [ "bincode", "byteorder 1.4.3", @@ -4193,11 +4193,11 @@ dependencies = [ "solana-bpf-rust-realloc-invoke", "solana-cli-output", "solana-ledger", - "solana-logger 1.11.10", + "solana-logger 1.11.11", "solana-measure", "solana-program-runtime", "solana-runtime", - "solana-sdk 1.11.10", + "solana-sdk 1.11.11", "solana-transaction-status", "solana_rbpf", "walkdir", @@ -4205,385 +4205,385 @@ dependencies = [ [[package]] name = "solana-bpf-rust-128bit" -version = "1.11.10" +version = "1.11.11" dependencies = [ "solana-bpf-rust-128bit-dep", - "solana-program 1.11.10", + "solana-program 1.11.11", ] [[package]] name = "solana-bpf-rust-128bit-dep" -version = "1.11.10" +version = "1.11.11" dependencies = [ - "solana-program 1.11.10", + "solana-program 1.11.11", ] [[package]] name = "solana-bpf-rust-alloc" -version = "1.11.10" +version = "1.11.11" dependencies = [ - "solana-program 1.11.10", + "solana-program 1.11.11", ] [[package]] name = "solana-bpf-rust-call-depth" -version = "1.11.10" +version = "1.11.11" dependencies = [ - "solana-program 1.11.10", + "solana-program 1.11.11", ] [[package]] name = "solana-bpf-rust-caller-access" -version = "1.11.10" +version = "1.11.11" dependencies = [ - "solana-program 1.11.10", + "solana-program 1.11.11", ] [[package]] name = "solana-bpf-rust-curve25519" -version = "1.11.10" +version = "1.11.11" dependencies = [ - "solana-program 1.11.10", - "solana-zk-token-sdk 1.11.10", + "solana-program 1.11.11", + "solana-zk-token-sdk 1.11.11", ] [[package]] name = "solana-bpf-rust-custom-heap" -version = "1.11.10" +version = "1.11.11" dependencies = [ - "solana-program 1.11.10", + "solana-program 1.11.11", ] [[package]] name = "solana-bpf-rust-dep-crate" -version = "1.11.10" +version = "1.11.11" dependencies = [ "byteorder 1.4.3", "solana-address-lookup-table-program", - "solana-program 1.11.10", + "solana-program 1.11.11", ] [[package]] name = "solana-bpf-rust-deprecated-loader" -version = "1.11.10" +version = "1.11.11" dependencies = [ - "solana-program 1.11.10", + "solana-program 1.11.11", ] [[package]] name = "solana-bpf-rust-dup-accounts" -version = "1.11.10" +version = "1.11.11" dependencies = [ - "solana-program 1.11.10", + "solana-program 1.11.11", ] [[package]] name = "solana-bpf-rust-error-handling" -version = "1.11.10" +version = "1.11.11" dependencies = [ "num-derive", "num-traits", - "solana-program 1.11.10", + "solana-program 1.11.11", "thiserror", ] [[package]] name = "solana-bpf-rust-external-spend" -version = "1.11.10" +version = "1.11.11" dependencies = [ - "solana-program 1.11.10", + "solana-program 1.11.11", ] [[package]] name = "solana-bpf-rust-finalize" -version = "1.11.10" +version = "1.11.11" dependencies = [ - "solana-program 1.11.10", + "solana-program 1.11.11", ] [[package]] name = "solana-bpf-rust-get-minimum-delegation" -version = "1.11.10" +version = "1.11.11" dependencies = [ - "solana-program 1.11.10", + "solana-program 1.11.11", ] [[package]] name = "solana-bpf-rust-inner_instruction_alignment_check" -version = "1.11.10" +version = "1.11.11" dependencies = [ - "solana-program 1.11.10", + "solana-program 1.11.11", ] [[package]] name = "solana-bpf-rust-instruction-introspection" -version = "1.11.10" +version = "1.11.11" dependencies = [ - "solana-program 1.11.10", + "solana-program 1.11.11", ] [[package]] name = "solana-bpf-rust-invoke" -version = "1.11.10" +version = "1.11.11" dependencies = [ "solana-bpf-rust-invoked", - "solana-program 1.11.10", + "solana-program 1.11.11", ] [[package]] name = "solana-bpf-rust-invoke-and-error" -version = "1.11.10" +version = "1.11.11" dependencies = [ - "solana-program 1.11.10", + "solana-program 1.11.11", ] [[package]] name = "solana-bpf-rust-invoke-and-ok" -version = "1.11.10" +version = "1.11.11" dependencies = [ - "solana-program 1.11.10", + "solana-program 1.11.11", ] [[package]] name = "solana-bpf-rust-invoke-and-return" -version = "1.11.10" +version = "1.11.11" dependencies = [ - "solana-program 1.11.10", + "solana-program 1.11.11", ] [[package]] name = "solana-bpf-rust-invoked" -version = "1.11.10" +version = "1.11.11" dependencies = [ - "solana-program 1.11.10", + "solana-program 1.11.11", ] [[package]] name = "solana-bpf-rust-iter" -version = "1.11.10" +version = "1.11.11" dependencies = [ - "solana-program 1.11.10", + "solana-program 1.11.11", ] [[package]] name = "solana-bpf-rust-log-data" -version = "1.11.10" +version = "1.11.11" dependencies = [ - "solana-program 1.11.10", + "solana-program 1.11.11", ] [[package]] name = "solana-bpf-rust-many-args" -version = "1.11.10" +version = "1.11.11" dependencies = [ "solana-bpf-rust-many-args-dep", - "solana-program 1.11.10", + "solana-program 1.11.11", ] [[package]] name = "solana-bpf-rust-many-args-dep" -version = "1.11.10" +version = "1.11.11" dependencies = [ - "solana-program 1.11.10", + "solana-program 1.11.11", ] [[package]] name = "solana-bpf-rust-mem" -version = "1.11.10" +version = "1.11.11" dependencies = [ - "solana-program 1.11.10", + "solana-program 1.11.11", "solana-program-runtime", "solana-program-test", - "solana-sdk 1.11.10", + "solana-sdk 1.11.11", ] [[package]] name = "solana-bpf-rust-membuiltins" -version = "1.11.10" +version = "1.11.11" dependencies = [ "solana-bpf-rust-mem", - "solana-program 1.11.10", + "solana-program 1.11.11", ] [[package]] name = "solana-bpf-rust-noop" -version = "1.11.10" +version = "1.11.11" dependencies = [ - "solana-program 1.11.10", + "solana-program 1.11.11", ] [[package]] name = "solana-bpf-rust-panic" -version = "1.11.10" +version = "1.11.11" dependencies = [ - "solana-program 1.11.10", + "solana-program 1.11.11", ] [[package]] name = "solana-bpf-rust-param-passing" -version = "1.11.10" +version = "1.11.11" dependencies = [ "solana-bpf-rust-param-passing-dep", - "solana-program 1.11.10", + "solana-program 1.11.11", ] [[package]] name = "solana-bpf-rust-param-passing-dep" -version = "1.11.10" +version = "1.11.11" dependencies = [ - "solana-program 1.11.10", + "solana-program 1.11.11", ] [[package]] name = "solana-bpf-rust-rand" -version = "1.11.10" +version = "1.11.11" dependencies = [ "getrandom 0.1.14", "rand 0.7.3", - "solana-program 1.11.10", + "solana-program 1.11.11", ] [[package]] name = "solana-bpf-rust-realloc" -version = "1.11.10" +version = "1.11.11" dependencies = [ - "solana-program 1.11.10", + "solana-program 1.11.11", ] [[package]] name = "solana-bpf-rust-realloc-invoke" -version = "1.11.10" +version = "1.11.11" dependencies = [ "solana-bpf-rust-realloc", - "solana-program 1.11.10", + "solana-program 1.11.11", ] [[package]] name = "solana-bpf-rust-ro-account_modify" -version = "1.11.10" +version = "1.11.11" dependencies = [ - "solana-program 1.11.10", + "solana-program 1.11.11", ] [[package]] name = "solana-bpf-rust-ro-modify" -version = "1.11.10" +version = "1.11.11" dependencies = [ - "solana-program 1.11.10", + "solana-program 1.11.11", ] [[package]] name = "solana-bpf-rust-sanity" -version = "1.11.10" +version = "1.11.11" dependencies = [ - "solana-program 1.11.10", + "solana-program 1.11.11", "solana-program-runtime", "solana-program-test", - "solana-sdk 1.11.10", + "solana-sdk 1.11.11", ] [[package]] name = "solana-bpf-rust-secp256k1-recover" -version = "1.11.10" +version = "1.11.11" dependencies = [ "libsecp256k1 0.7.0", - "solana-program 1.11.10", + "solana-program 1.11.11", ] [[package]] name = "solana-bpf-rust-sha" -version = "1.11.10" +version = "1.11.11" dependencies = [ "blake3", - "solana-program 1.11.10", + "solana-program 1.11.11", ] [[package]] name = "solana-bpf-rust-sibling-instructions" -version = "1.11.10" +version = "1.11.11" dependencies = [ - "solana-program 1.11.10", + "solana-program 1.11.11", ] [[package]] name = "solana-bpf-rust-sibling_inner-instructions" -version = "1.11.10" +version = "1.11.11" dependencies = [ - "solana-program 1.11.10", + "solana-program 1.11.11", ] [[package]] name = "solana-bpf-rust-simulation" -version = "1.11.10" +version = "1.11.11" dependencies = [ - "solana-logger 1.11.10", - "solana-program 1.11.10", + "solana-logger 1.11.11", + "solana-program 1.11.11", "solana-program-test", - "solana-sdk 1.11.10", + "solana-sdk 1.11.11", "solana-validator", ] [[package]] name = "solana-bpf-rust-spoof1" -version = "1.11.10" +version = "1.11.11" dependencies = [ - "solana-program 1.11.10", + "solana-program 1.11.11", ] [[package]] name = "solana-bpf-rust-spoof1-system" -version = "1.11.10" +version = "1.11.11" dependencies = [ - "solana-program 1.11.10", + "solana-program 1.11.11", ] [[package]] name = "solana-bpf-rust-sysvar" -version = "1.11.10" +version = "1.11.11" dependencies = [ - "solana-program 1.11.10", + "solana-program 1.11.11", "solana-program-runtime", "solana-program-test", - "solana-sdk 1.11.10", + "solana-sdk 1.11.11", ] [[package]] name = "solana-bpf-rust-upgradeable" -version = "1.11.10" +version = "1.11.11" dependencies = [ - "solana-program 1.11.10", + "solana-program 1.11.11", ] [[package]] name = "solana-bpf-rust-upgraded" -version = "1.11.10" +version = "1.11.11" dependencies = [ - "solana-program 1.11.10", + "solana-program 1.11.11", ] [[package]] name = "solana-bucket-map" -version = "1.11.10" +version = "1.11.11" dependencies = [ "log", "memmap2", "modular-bitfield", "rand 0.7.3", "solana-measure", - "solana-sdk 1.11.10", + "solana-sdk 1.11.11", "tempfile", ] [[package]] name = "solana-clap-utils" -version = "1.11.10" +version = "1.11.11" dependencies = [ "chrono", "clap 2.33.3", "rpassword", "solana-perf", "solana-remote-wallet", - "solana-sdk 1.11.10", + "solana-sdk 1.11.11", "thiserror", "tiny-bip39", "uriparse", @@ -4592,7 +4592,7 @@ dependencies = [ [[package]] name = "solana-cli-config" -version = "1.11.10" +version = "1.11.11" dependencies = [ "dirs-next", "lazy_static", @@ -4600,13 +4600,13 @@ dependencies = [ "serde_derive", "serde_yaml", "solana-clap-utils", - "solana-sdk 1.11.10", + "solana-sdk 1.11.11", "url 2.2.2", ] [[package]] name = "solana-cli-output" -version = "1.11.10" +version = "1.11.11" dependencies = [ "Inflector", "base64 0.13.0", @@ -4623,7 +4623,7 @@ dependencies = [ "solana-clap-utils", "solana-cli-config", "solana-client", - "solana-sdk 1.11.10", + "solana-sdk 1.11.11", "solana-transaction-status", "solana-vote-program", "spl-memo", @@ -4631,7 +4631,7 @@ dependencies = [ [[package]] name = "solana-client" -version = "1.11.10" +version = "1.11.11" dependencies = [ "async-mutex", "async-trait", @@ -4667,7 +4667,7 @@ dependencies = [ "solana-measure", "solana-metrics", "solana-net-utils", - "solana-sdk 1.11.10", + "solana-sdk 1.11.11", "solana-streamer", "solana-transaction-status", "solana-version", @@ -4683,27 +4683,27 @@ dependencies = [ [[package]] name = "solana-compute-budget-program" -version = "1.11.10" +version = "1.11.11" dependencies = [ "solana-program-runtime", - "solana-sdk 1.11.10", + "solana-sdk 1.11.11", ] [[package]] name = "solana-config-program" -version = "1.11.10" +version = "1.11.11" dependencies = [ "bincode", "chrono", "serde", "serde_derive", "solana-program-runtime", - "solana-sdk 1.11.10", + "solana-sdk 1.11.11", ] [[package]] name = "solana-core" -version = "1.11.10" +version = "1.11.11" dependencies = [ "ahash", "base64 0.13.0", @@ -4731,8 +4731,8 @@ dependencies = [ "solana-bloom", "solana-client", "solana-entry", - "solana-frozen-abi 1.11.10", - "solana-frozen-abi-macro 1.11.10", + "solana-frozen-abi 1.11.11", + "solana-frozen-abi-macro 1.11.11", "solana-geyser-plugin-manager", "solana-gossip", "solana-ledger", @@ -4745,7 +4745,7 @@ dependencies = [ "solana-rayon-threadlimit", "solana-rpc", "solana-runtime", - "solana-sdk 1.11.10", + "solana-sdk 1.11.11", "solana-send-transaction-service", "solana-streamer", "solana-transaction-status", @@ -4761,19 +4761,19 @@ dependencies = [ [[package]] name = "solana-download-utils" -version = "1.11.10" +version = "1.11.11" dependencies = [ "console", "indicatif", "log", "reqwest", "solana-runtime", - "solana-sdk 1.11.10", + "solana-sdk 1.11.11", ] [[package]] name = "solana-entry" -version = "1.11.10" +version = "1.11.11" dependencies = [ "bincode", "crossbeam-channel", @@ -4789,12 +4789,12 @@ dependencies = [ "solana-metrics", "solana-perf", "solana-rayon-threadlimit", - "solana-sdk 1.11.10", + "solana-sdk 1.11.11", ] [[package]] name = "solana-faucet" -version = "1.11.10" +version = "1.11.11" dependencies = [ "bincode", "byteorder 1.4.3", @@ -4805,9 +4805,9 @@ dependencies = [ "serde_derive", "solana-clap-utils", "solana-cli-config", - "solana-logger 1.11.10", + "solana-logger 1.11.11", "solana-metrics", - "solana-sdk 1.11.10", + "solana-sdk 1.11.11", "solana-version", "spl-memo", "thiserror", @@ -4838,7 +4838,7 @@ dependencies = [ [[package]] name = "solana-frozen-abi" -version = "1.11.10" +version = "1.11.11" dependencies = [ "ahash", "blake3", @@ -4863,7 +4863,7 @@ dependencies = [ "serde_derive", "serde_json", "sha2 0.10.2", - "solana-frozen-abi-macro 1.11.10", + "solana-frozen-abi-macro 1.11.11", "subtle", "thiserror", ] @@ -4882,7 +4882,7 @@ dependencies = [ [[package]] name = "solana-frozen-abi-macro" -version = "1.11.10" +version = "1.11.11" dependencies = [ "proc-macro2 1.0.41", "quote 1.0.18", @@ -4892,26 +4892,26 @@ dependencies = [ [[package]] name = "solana-genesis-utils" -version = "1.11.10" +version = "1.11.11" dependencies = [ "solana-download-utils", "solana-runtime", - "solana-sdk 1.11.10", + "solana-sdk 1.11.11", ] [[package]] name = "solana-geyser-plugin-interface" -version = "1.11.10" +version = "1.11.11" dependencies = [ "log", - "solana-sdk 1.11.10", + "solana-sdk 1.11.11", "solana-transaction-status", "thiserror", ] [[package]] name = "solana-geyser-plugin-manager" -version = "1.11.10" +version = "1.11.11" dependencies = [ "bs58", "crossbeam-channel", @@ -4924,14 +4924,14 @@ dependencies = [ "solana-metrics", "solana-rpc", "solana-runtime", - "solana-sdk 1.11.10", + "solana-sdk 1.11.11", "solana-transaction-status", "thiserror", ] [[package]] name = "solana-gossip" -version = "1.11.10" +version = "1.11.11" dependencies = [ "bincode", "bv", @@ -4955,17 +4955,17 @@ dependencies = [ "solana-clap-utils", "solana-client", "solana-entry", - "solana-frozen-abi 1.11.10", - "solana-frozen-abi-macro 1.11.10", + "solana-frozen-abi 1.11.11", + "solana-frozen-abi-macro 1.11.11", "solana-ledger", - "solana-logger 1.11.10", + "solana-logger 1.11.11", "solana-measure", "solana-metrics", "solana-net-utils", "solana-perf", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.11.10", + "solana-sdk 1.11.11", "solana-streamer", "solana-version", "solana-vote-program", @@ -4974,7 +4974,7 @@ dependencies = [ [[package]] name = "solana-ledger" -version = "1.11.10" +version = "1.11.11" dependencies = [ "bincode", "bitflags", @@ -5005,15 +5005,15 @@ dependencies = [ "solana-account-decoder", "solana-bpf-loader-program", "solana-entry", - "solana-frozen-abi 1.11.10", - "solana-frozen-abi-macro 1.11.10", + "solana-frozen-abi 1.11.11", + "solana-frozen-abi-macro 1.11.11", "solana-measure", "solana-metrics", "solana-perf", "solana-program-runtime", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.11.10", + "solana-sdk 1.11.11", "solana-stake-program", "solana-storage-bigtable", "solana-storage-proto", @@ -5042,7 +5042,7 @@ dependencies = [ [[package]] name = "solana-logger" -version = "1.11.10" +version = "1.11.11" dependencies = [ "env_logger", "lazy_static", @@ -5051,36 +5051,36 @@ dependencies = [ [[package]] name = "solana-measure" -version = "1.11.10" +version = "1.11.11" dependencies = [ "log", - "solana-sdk 1.11.10", + "solana-sdk 1.11.11", ] [[package]] name = "solana-merkle-tree" -version = "1.11.10" +version = "1.11.11" dependencies = [ "fast-math", "matches", - "solana-program 1.11.10", + "solana-program 1.11.11", ] [[package]] name = "solana-metrics" -version = "1.11.10" +version = "1.11.11" dependencies = [ "crossbeam-channel", "gethostname", "lazy_static", "log", "reqwest", - "solana-sdk 1.11.10", + "solana-sdk 1.11.11", ] [[package]] name = "solana-net-utils" -version = "1.11.10" +version = "1.11.11" dependencies = [ "bincode", "clap 3.1.6", @@ -5091,8 +5091,8 @@ dependencies = [ "serde", "serde_derive", "socket2", - "solana-logger 1.11.10", - "solana-sdk 1.11.10", + "solana-logger 1.11.11", + "solana-sdk 1.11.11", "solana-version", "tokio", "url 2.2.2", @@ -5100,7 +5100,7 @@ dependencies = [ [[package]] name = "solana-perf" -version = "1.11.10" +version = "1.11.11" dependencies = [ "ahash", "bincode", @@ -5119,13 +5119,13 @@ dependencies = [ "serde", "solana-metrics", "solana-rayon-threadlimit", - "solana-sdk 1.11.10", + "solana-sdk 1.11.11", "solana-vote-program", ] [[package]] name = "solana-poh" -version = "1.11.10" +version = "1.11.11" dependencies = [ "core_affinity", "crossbeam-channel", @@ -5135,7 +5135,7 @@ dependencies = [ "solana-measure", "solana-metrics", "solana-runtime", - "solana-sdk 1.11.10", + "solana-sdk 1.11.11", "solana-sys-tuner", "thiserror", ] @@ -5184,7 +5184,7 @@ dependencies = [ [[package]] name = "solana-program" -version = "1.11.10" +version = "1.11.11" dependencies = [ "base64 0.13.0", "bincode", @@ -5220,9 +5220,9 @@ dependencies = [ "serde_json", "sha2 0.10.2", "sha3 0.10.1", - "solana-frozen-abi 1.11.10", - "solana-frozen-abi-macro 1.11.10", - "solana-sdk-macro 1.11.10", + "solana-frozen-abi 1.11.11", + "solana-frozen-abi-macro 1.11.11", + "solana-sdk-macro 1.11.11", "thiserror", "tiny-bip39", "wasm-bindgen", @@ -5231,7 +5231,7 @@ dependencies = [ [[package]] name = "solana-program-runtime" -version = "1.11.10" +version = "1.11.11" dependencies = [ "base64 0.13.0", "bincode", @@ -5245,17 +5245,17 @@ dependencies = [ "num-traits", "rustc_version", "serde", - "solana-frozen-abi 1.11.10", - "solana-frozen-abi-macro 1.11.10", + "solana-frozen-abi 1.11.11", + "solana-frozen-abi-macro 1.11.11", "solana-measure", "solana-metrics", - "solana-sdk 1.11.10", + "solana-sdk 1.11.11", "thiserror", ] [[package]] name = "solana-program-test" -version = "1.11.10" +version = "1.11.11" dependencies = [ "assert_matches", "async-trait", @@ -5267,10 +5267,10 @@ dependencies = [ "solana-banks-client", "solana-banks-server", "solana-bpf-loader-program", - "solana-logger 1.11.10", + "solana-logger 1.11.11", "solana-program-runtime", "solana-runtime", - "solana-sdk 1.11.10", + "solana-sdk 1.11.11", "solana-vote-program", "thiserror", "tokio", @@ -5278,7 +5278,7 @@ dependencies = [ [[package]] name = "solana-rayon-threadlimit" -version = "1.11.10" +version = "1.11.11" dependencies = [ "lazy_static", "num_cpus", @@ -5286,7 +5286,7 @@ dependencies = [ [[package]] name = "solana-remote-wallet" -version = "1.11.10" +version = "1.11.11" dependencies = [ "console", "dialoguer", @@ -5296,14 +5296,14 @@ dependencies = [ "parking_lot 0.12.1", "qstring", "semver", - "solana-sdk 1.11.10", + "solana-sdk 1.11.11", "thiserror", "uriparse", ] [[package]] name = "solana-rpc" -version = "1.11.10" +version = "1.11.11" dependencies = [ "base64 0.13.0", "bincode", @@ -5336,7 +5336,7 @@ dependencies = [ "solana-poh", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.11.10", + "solana-sdk 1.11.11", "solana-send-transaction-service", "solana-stake-program", "solana-storage-bigtable", @@ -5354,7 +5354,7 @@ dependencies = [ [[package]] name = "solana-runtime" -version = "1.11.10" +version = "1.11.11" dependencies = [ "arrayref", "bincode", @@ -5390,17 +5390,17 @@ dependencies = [ "solana-bucket-map", "solana-compute-budget-program", "solana-config-program", - "solana-frozen-abi 1.11.10", - "solana-frozen-abi-macro 1.11.10", + "solana-frozen-abi 1.11.11", + "solana-frozen-abi-macro 1.11.11", "solana-measure", "solana-metrics", "solana-program-runtime", "solana-rayon-threadlimit", - "solana-sdk 1.11.10", + "solana-sdk 1.11.11", "solana-stake-program", "solana-vote-program", "solana-zk-token-proof-program", - "solana-zk-token-sdk 1.11.10", + "solana-zk-token-sdk 1.11.11", "strum", "strum_macros", "symlink", @@ -5463,7 +5463,7 @@ dependencies = [ [[package]] name = "solana-sdk" -version = "1.11.10" +version = "1.11.11" dependencies = [ "assert_matches", "base64 0.13.0", @@ -5500,11 +5500,11 @@ dependencies = [ "serde_json", "sha2 0.10.2", "sha3 0.10.1", - "solana-frozen-abi 1.11.10", - "solana-frozen-abi-macro 1.11.10", - "solana-logger 1.11.10", - "solana-program 1.11.10", - "solana-sdk-macro 1.11.10", + "solana-frozen-abi 1.11.11", + "solana-frozen-abi-macro 1.11.11", + "solana-logger 1.11.11", + "solana-program 1.11.11", + "solana-sdk-macro 1.11.11", "thiserror", "uriparse", "wasm-bindgen", @@ -5525,7 +5525,7 @@ dependencies = [ [[package]] name = "solana-sdk-macro" -version = "1.11.10" +version = "1.11.11" dependencies = [ "bs58", "proc-macro2 1.0.41", @@ -5536,7 +5536,7 @@ dependencies = [ [[package]] name = "solana-send-transaction-service" -version = "1.11.10" +version = "1.11.11" dependencies = [ "crossbeam-channel", "log", @@ -5544,12 +5544,12 @@ dependencies = [ "solana-measure", "solana-metrics", "solana-runtime", - "solana-sdk 1.11.10", + "solana-sdk 1.11.11", ] [[package]] name = "solana-stake-program" -version = "1.11.10" +version = "1.11.11" dependencies = [ "bincode", "log", @@ -5559,18 +5559,18 @@ dependencies = [ "serde", "serde_derive", "solana-config-program", - "solana-frozen-abi 1.11.10", - "solana-frozen-abi-macro 1.11.10", + "solana-frozen-abi 1.11.11", + "solana-frozen-abi-macro 1.11.11", "solana-metrics", "solana-program-runtime", - "solana-sdk 1.11.10", + "solana-sdk 1.11.11", "solana-vote-program", "thiserror", ] [[package]] name = "solana-storage-bigtable" -version = "1.11.10" +version = "1.11.11" dependencies = [ "backoff", "bincode", @@ -5591,7 +5591,7 @@ dependencies = [ "serde_derive", "smpl_jwt", "solana-metrics", - "solana-sdk 1.11.10", + "solana-sdk 1.11.11", "solana-storage-proto", "solana-transaction-status", "thiserror", @@ -5602,7 +5602,7 @@ dependencies = [ [[package]] name = "solana-storage-proto" -version = "1.11.10" +version = "1.11.11" dependencies = [ "bincode", "bs58", @@ -5610,14 +5610,14 @@ dependencies = [ "protobuf-src", "serde", "solana-account-decoder", - "solana-sdk 1.11.10", + "solana-sdk 1.11.11", "solana-transaction-status", "tonic-build 0.8.0", ] [[package]] name = "solana-streamer" -version = "1.11.10" +version = "1.11.11" dependencies = [ "crossbeam-channel", "futures-util", @@ -5636,7 +5636,7 @@ dependencies = [ "rustls 0.20.6", "solana-metrics", "solana-perf", - "solana-sdk 1.11.10", + "solana-sdk 1.11.11", "thiserror", "tokio", "x509-parser", @@ -5644,13 +5644,13 @@ dependencies = [ [[package]] name = "solana-sys-tuner" -version = "1.11.10" +version = "1.11.11" dependencies = [ "clap 2.33.3", "libc", "log", "nix", - "solana-logger 1.11.10", + "solana-logger 1.11.11", "solana-version", "sysctl", "unix_socket2", @@ -5659,7 +5659,7 @@ dependencies = [ [[package]] name = "solana-test-validator" -version = "1.11.10" +version = "1.11.11" dependencies = [ "base64 0.13.0", "log", @@ -5670,20 +5670,20 @@ dependencies = [ "solana-core", "solana-gossip", "solana-ledger", - "solana-logger 1.11.10", + "solana-logger 1.11.11", "solana-net-utils", "solana-program-runtime", "solana-program-test", "solana-rpc", "solana-runtime", - "solana-sdk 1.11.10", + "solana-sdk 1.11.11", "solana-streamer", "tokio", ] [[package]] name = "solana-transaction-status" -version = "1.11.10" +version = "1.11.11" dependencies = [ "Inflector", "base64 0.13.0", @@ -5698,7 +5698,7 @@ dependencies = [ "solana-account-decoder", "solana-measure", "solana-metrics", - "solana-sdk 1.11.10", + "solana-sdk 1.11.11", "solana-vote-program", "spl-associated-token-account", "spl-memo", @@ -5709,7 +5709,7 @@ dependencies = [ [[package]] name = "solana-validator" -version = "1.11.10" +version = "1.11.11" dependencies = [ "chrono", "clap 2.33.3", @@ -5740,14 +5740,14 @@ dependencies = [ "solana-genesis-utils", "solana-gossip", "solana-ledger", - "solana-logger 1.11.10", + "solana-logger 1.11.11", "solana-metrics", "solana-net-utils", "solana-perf", "solana-poh", "solana-rpc", "solana-runtime", - "solana-sdk 1.11.10", + "solana-sdk 1.11.11", "solana-send-transaction-service", "solana-storage-bigtable", "solana-streamer", @@ -5760,21 +5760,21 @@ dependencies = [ [[package]] name = "solana-version" -version = "1.11.10" +version = "1.11.11" dependencies = [ "log", "rustc_version", "semver", "serde", "serde_derive", - "solana-frozen-abi 1.11.10", - "solana-frozen-abi-macro 1.11.10", - "solana-sdk 1.11.10", + "solana-frozen-abi 1.11.11", + "solana-frozen-abi-macro 1.11.11", + "solana-sdk 1.11.11", ] [[package]] name = "solana-vote-program" -version = "1.11.10" +version = "1.11.11" dependencies = [ "bincode", "log", @@ -5783,25 +5783,25 @@ dependencies = [ "rustc_version", "serde", "serde_derive", - "solana-frozen-abi 1.11.10", - "solana-frozen-abi-macro 1.11.10", + "solana-frozen-abi 1.11.11", + "solana-frozen-abi-macro 1.11.11", "solana-metrics", "solana-program-runtime", - "solana-sdk 1.11.10", + "solana-sdk 1.11.11", "thiserror", ] [[package]] name = "solana-zk-token-proof-program" -version = "1.11.10" +version = "1.11.11" dependencies = [ "bytemuck", "getrandom 0.1.14", "num-derive", "num-traits", "solana-program-runtime", - "solana-sdk 1.11.10", - "solana-zk-token-sdk 1.11.10", + "solana-sdk 1.11.11", + "solana-zk-token-sdk 1.11.11", ] [[package]] @@ -5836,7 +5836,7 @@ dependencies = [ [[package]] name = "solana-zk-token-sdk" -version = "1.11.10" +version = "1.11.11" dependencies = [ "aes-gcm-siv", "arrayref", @@ -5855,8 +5855,8 @@ dependencies = [ "serde", "serde_json", "sha3 0.9.1", - "solana-program 1.11.10", - "solana-sdk 1.11.10", + "solana-program 1.11.11", + "solana-sdk 1.11.11", "subtle", "thiserror", "zeroize", diff --git a/programs/bpf/Cargo.toml b/programs/bpf/Cargo.toml index 3dc7f50c992ed5..96e43129f4e183 100644 --- a/programs/bpf/Cargo.toml +++ b/programs/bpf/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "solana-bpf-programs" description = "Blockchain, Rebuilt for Scale" -version = "1.11.10" +version = "1.11.11" documentation = "https://docs.rs/solana" homepage = "https://solana.com/" readme = "README.md" @@ -26,22 +26,22 @@ itertools = "0.10.1" log = "0.4.11" miow = "0.3.6" net2 = "0.2.37" -solana-account-decoder = { path = "../../account-decoder", version = "=1.11.10" } -solana-bpf-loader-program = { path = "../bpf_loader", version = "=1.11.10" } -solana-bpf-rust-invoke = { path = "rust/invoke", version = "=1.11.10" } -solana-bpf-rust-realloc = { path = "rust/realloc", version = "=1.11.10" } -solana-bpf-rust-realloc-invoke = { path = "rust/realloc_invoke", version = "=1.11.10" } -solana-cli-output = { path = "../../cli-output", version = "=1.11.10" } -solana-logger = { path = "../../logger", version = "=1.11.10" } -solana-measure = { path = "../../measure", version = "=1.11.10" } -solana-program-runtime = { path = "../../program-runtime", version = "=1.11.10" } -solana-runtime = { path = "../../runtime", version = "=1.11.10" } -solana-sdk = { path = "../../sdk", version = "=1.11.10" } -solana-transaction-status = { path = "../../transaction-status", version = "=1.11.10" } +solana-account-decoder = { path = "../../account-decoder", version = "=1.11.11" } +solana-bpf-loader-program = { path = "../bpf_loader", version = "=1.11.11" } +solana-bpf-rust-invoke = { path = "rust/invoke", version = "=1.11.11" } +solana-bpf-rust-realloc = { path = "rust/realloc", version = "=1.11.11" } +solana-bpf-rust-realloc-invoke = { path = "rust/realloc_invoke", version = "=1.11.11" } +solana-cli-output = { path = "../../cli-output", version = "=1.11.11" } +solana-logger = { path = "../../logger", version = "=1.11.11" } +solana-measure = { path = "../../measure", version = "=1.11.11" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.11.11" } +solana-runtime = { path = "../../runtime", version = "=1.11.11" } +solana-sdk = { path = "../../sdk", version = "=1.11.11" } +solana-transaction-status = { path = "../../transaction-status", version = "=1.11.11" } solana_rbpf = "=0.2.31" [dev-dependencies] -solana-ledger = { path = "../../ledger", version = "=1.11.10" } +solana-ledger = { path = "../../ledger", version = "=1.11.11" } [[bench]] name = "bpf_loader" diff --git a/programs/bpf/rust/128bit/Cargo.toml b/programs/bpf/rust/128bit/Cargo.toml index f0dd25bcb26f1f..8b1541e7f05f03 100644 --- a/programs/bpf/rust/128bit/Cargo.toml +++ b/programs/bpf/rust/128bit/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-128bit" -version = "1.11.10" +version = "1.11.11" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ documentation = "https://docs.rs/solana-bpf-rust-128bit" edition = "2021" [dependencies] -solana-bpf-rust-128bit-dep = { path = "../128bit_dep", version = "=1.11.10" } -solana-program = { path = "../../../../sdk/program", version = "=1.11.10" } +solana-bpf-rust-128bit-dep = { path = "../128bit_dep", version = "=1.11.11" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.11" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/128bit_dep/Cargo.toml b/programs/bpf/rust/128bit_dep/Cargo.toml index a00b8274fb46d2..9c6f3abefc000c 100644 --- a/programs/bpf/rust/128bit_dep/Cargo.toml +++ b/programs/bpf/rust/128bit_dep/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-128bit-dep" -version = "1.11.10" +version = "1.11.11" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-128bit-dep" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.10" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.11" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/bpf/rust/alloc/Cargo.toml b/programs/bpf/rust/alloc/Cargo.toml index 388224c6648e64..b5cab48300188f 100644 --- a/programs/bpf/rust/alloc/Cargo.toml +++ b/programs/bpf/rust/alloc/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-alloc" -version = "1.11.10" +version = "1.11.11" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-alloc" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.10" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.11" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/call_depth/Cargo.toml b/programs/bpf/rust/call_depth/Cargo.toml index 995edf96a7179d..25c883a0eb6062 100644 --- a/programs/bpf/rust/call_depth/Cargo.toml +++ b/programs/bpf/rust/call_depth/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-call-depth" -version = "1.11.10" +version = "1.11.11" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-call-depth" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.10" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.11" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/caller_access/Cargo.toml b/programs/bpf/rust/caller_access/Cargo.toml index d8787ee917e934..5b884f86d07031 100644 --- a/programs/bpf/rust/caller_access/Cargo.toml +++ b/programs/bpf/rust/caller_access/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-caller-access" -version = "1.11.10" +version = "1.11.11" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-caller-access" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.10" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.11" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/curve25519/Cargo.toml b/programs/bpf/rust/curve25519/Cargo.toml index 650b44b4e384df..667afdf53bb9ce 100644 --- a/programs/bpf/rust/curve25519/Cargo.toml +++ b/programs/bpf/rust/curve25519/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-curve25519" -version = "1.11.10" +version = "1.11.11" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ documentation = "https://docs.rs/solana-bpf-rust-zktoken_crypto" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.10" } -solana-zk-token-sdk = { path = "../../../../zk-token-sdk", version = "=1.11.10" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.11" } +solana-zk-token-sdk = { path = "../../../../zk-token-sdk", version = "=1.11.11" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/custom_heap/Cargo.toml b/programs/bpf/rust/custom_heap/Cargo.toml index af7fd5200a4887..fff103a87dc6bd 100644 --- a/programs/bpf/rust/custom_heap/Cargo.toml +++ b/programs/bpf/rust/custom_heap/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-custom-heap" -version = "1.11.10" +version = "1.11.11" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-custom-heap" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.10" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.11" } [features] default = ["custom-heap"] diff --git a/programs/bpf/rust/dep_crate/Cargo.toml b/programs/bpf/rust/dep_crate/Cargo.toml index 3273075fca8fd7..128b294807c227 100644 --- a/programs/bpf/rust/dep_crate/Cargo.toml +++ b/programs/bpf/rust/dep_crate/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-dep-crate" -version = "1.11.10" +version = "1.11.11" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,8 +12,8 @@ edition = "2021" [dependencies] byteorder = { version = "1", default-features = false } # list of crates which must be buildable for bpf programs -solana-address-lookup-table-program = { path = "../../../../programs/address-lookup-table", version = "=1.11.10" } -solana-program = { path = "../../../../sdk/program", version = "=1.11.10" } +solana-address-lookup-table-program = { path = "../../../../programs/address-lookup-table", version = "=1.11.11" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.11" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/deprecated_loader/Cargo.toml b/programs/bpf/rust/deprecated_loader/Cargo.toml index 4a54203d6d7739..00ec6f81646441 100644 --- a/programs/bpf/rust/deprecated_loader/Cargo.toml +++ b/programs/bpf/rust/deprecated_loader/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-deprecated-loader" -version = "1.11.10" +version = "1.11.11" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-deprecated-loader" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.10" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.11" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/dup_accounts/Cargo.toml b/programs/bpf/rust/dup_accounts/Cargo.toml index 2d9a9da09837c3..2fcd41204a9000 100644 --- a/programs/bpf/rust/dup_accounts/Cargo.toml +++ b/programs/bpf/rust/dup_accounts/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-dup-accounts" -version = "1.11.10" +version = "1.11.11" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-dup-accounts" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.10" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.11" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/error_handling/Cargo.toml b/programs/bpf/rust/error_handling/Cargo.toml index 78a09f8c511d44..302c34f1ab1a58 100644 --- a/programs/bpf/rust/error_handling/Cargo.toml +++ b/programs/bpf/rust/error_handling/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-error-handling" -version = "1.11.10" +version = "1.11.11" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,7 +12,7 @@ edition = "2021" [dependencies] num-derive = "0.3" num-traits = "0.2" -solana-program = { path = "../../../../sdk/program", version = "=1.11.10" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.11" } thiserror = "1.0" [lib] diff --git a/programs/bpf/rust/external_spend/Cargo.toml b/programs/bpf/rust/external_spend/Cargo.toml index d57f5064a05c5c..ae3ac90c36d40d 100644 --- a/programs/bpf/rust/external_spend/Cargo.toml +++ b/programs/bpf/rust/external_spend/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-external-spend" -version = "1.11.10" +version = "1.11.11" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-external-spend" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.10" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.11" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/finalize/Cargo.toml b/programs/bpf/rust/finalize/Cargo.toml index dc4b0d60e845dd..f49f879d128f09 100644 --- a/programs/bpf/rust/finalize/Cargo.toml +++ b/programs/bpf/rust/finalize/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-finalize" -version = "1.11.10" +version = "1.11.11" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-finalize" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.10" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.11" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/get_minimum_delegation/Cargo.toml b/programs/bpf/rust/get_minimum_delegation/Cargo.toml index fda2515af9b1dc..44ecd7fef1ea6f 100644 --- a/programs/bpf/rust/get_minimum_delegation/Cargo.toml +++ b/programs/bpf/rust/get_minimum_delegation/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-get-minimum-delegation" -version = "1.11.10" +version = "1.11.11" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-get-minimum-delegation" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.10" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.11" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/inner_instruction_alignment_check/Cargo.toml b/programs/bpf/rust/inner_instruction_alignment_check/Cargo.toml index 0adb7029a0a8e6..8f920928ec322f 100644 --- a/programs/bpf/rust/inner_instruction_alignment_check/Cargo.toml +++ b/programs/bpf/rust/inner_instruction_alignment_check/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-inner_instruction_alignment_check" -version = "1.11.10" +version = "1.11.11" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-inner_instruction_alignment_che edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.10" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.11" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/instruction_introspection/Cargo.toml b/programs/bpf/rust/instruction_introspection/Cargo.toml index 26d38bc0738200..6f901fdc1b593b 100644 --- a/programs/bpf/rust/instruction_introspection/Cargo.toml +++ b/programs/bpf/rust/instruction_introspection/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-instruction-introspection" -version = "1.11.10" +version = "1.11.11" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-instruction-introspection" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.10" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.11" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/invoke/Cargo.toml b/programs/bpf/rust/invoke/Cargo.toml index e726fada2beb89..a721201e146c16 100644 --- a/programs/bpf/rust/invoke/Cargo.toml +++ b/programs/bpf/rust/invoke/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-invoke" -version = "1.11.10" +version = "1.11.11" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -15,7 +15,7 @@ program = [] [dependencies] solana-bpf-rust-invoked = { path = "../invoked", default-features = false } -solana-program = { path = "../../../../sdk/program", version = "=1.11.10" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.11" } [lib] crate-type = ["lib", "cdylib"] diff --git a/programs/bpf/rust/invoke_and_error/Cargo.toml b/programs/bpf/rust/invoke_and_error/Cargo.toml index c20d607a800b11..a4a21322c5701c 100644 --- a/programs/bpf/rust/invoke_and_error/Cargo.toml +++ b/programs/bpf/rust/invoke_and_error/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-invoke-and-error" -version = "1.11.10" +version = "1.11.11" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-invoke-and-error" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.10" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.11" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/invoke_and_ok/Cargo.toml b/programs/bpf/rust/invoke_and_ok/Cargo.toml index dccb40fa711e92..a904d03e12a600 100644 --- a/programs/bpf/rust/invoke_and_ok/Cargo.toml +++ b/programs/bpf/rust/invoke_and_ok/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-invoke-and-ok" -version = "1.11.10" +version = "1.11.11" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-invoke-and-ok" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.10" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.11" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/invoke_and_return/Cargo.toml b/programs/bpf/rust/invoke_and_return/Cargo.toml index 1858a34e3599d7..6ca5547482dc09 100644 --- a/programs/bpf/rust/invoke_and_return/Cargo.toml +++ b/programs/bpf/rust/invoke_and_return/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-invoke-and-return" -version = "1.11.10" +version = "1.11.11" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-invoke-and-return" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.10" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.11" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/invoked/Cargo.toml b/programs/bpf/rust/invoked/Cargo.toml index 53b1326bb93a52..edca1a38b63aba 100644 --- a/programs/bpf/rust/invoked/Cargo.toml +++ b/programs/bpf/rust/invoked/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-invoked" -version = "1.11.10" +version = "1.11.11" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,7 +14,7 @@ default = ["program"] program = [] [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.10" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.11" } [lib] crate-type = ["lib", "cdylib"] diff --git a/programs/bpf/rust/iter/Cargo.toml b/programs/bpf/rust/iter/Cargo.toml index dfd8dd1903160c..c52c1d571cf1d5 100644 --- a/programs/bpf/rust/iter/Cargo.toml +++ b/programs/bpf/rust/iter/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-iter" -version = "1.11.10" +version = "1.11.11" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-iter" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.10" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.11" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/log_data/Cargo.toml b/programs/bpf/rust/log_data/Cargo.toml index 2dc841c50a215c..7aa407adc16edc 100644 --- a/programs/bpf/rust/log_data/Cargo.toml +++ b/programs/bpf/rust/log_data/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-log-data" -version = "1.11.10" +version = "1.11.11" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-log-data" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.10" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.11" } [features] default = ["program"] diff --git a/programs/bpf/rust/many_args/Cargo.toml b/programs/bpf/rust/many_args/Cargo.toml index 972d78cfb1379b..fce5f3aa5bcb44 100644 --- a/programs/bpf/rust/many_args/Cargo.toml +++ b/programs/bpf/rust/many_args/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-many-args" -version = "1.11.10" +version = "1.11.11" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ documentation = "https://docs.rs/solana-bpf-rust-many-args" edition = "2021" [dependencies] -solana-bpf-rust-many-args-dep = { path = "../many_args_dep", version = "=1.11.10" } -solana-program = { path = "../../../../sdk/program", version = "=1.11.10" } +solana-bpf-rust-many-args-dep = { path = "../many_args_dep", version = "=1.11.11" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.11" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/many_args_dep/Cargo.toml b/programs/bpf/rust/many_args_dep/Cargo.toml index bbe5246b7ad221..b6679b9acc1fd7 100644 --- a/programs/bpf/rust/many_args_dep/Cargo.toml +++ b/programs/bpf/rust/many_args_dep/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-many-args-dep" -version = "1.11.10" +version = "1.11.11" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-many-args-dep" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.10" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.11" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/bpf/rust/mem/Cargo.toml b/programs/bpf/rust/mem/Cargo.toml index c534cb4c1a28a9..259f5703c05aab 100644 --- a/programs/bpf/rust/mem/Cargo.toml +++ b/programs/bpf/rust/mem/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-mem" -version = "1.11.10" +version = "1.11.11" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,12 +13,12 @@ edition = "2021" no-entrypoint = [] [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.10" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.11" } [dev-dependencies] -solana-program-runtime = { path = "../../../../program-runtime", version = "=1.11.10" } -solana-program-test = { path = "../../../../program-test", version = "=1.11.10" } -solana-sdk = { path = "../../../../sdk", version = "=1.11.10" } +solana-program-runtime = { path = "../../../../program-runtime", version = "=1.11.11" } +solana-program-test = { path = "../../../../program-test", version = "=1.11.11" } +solana-sdk = { path = "../../../../sdk", version = "=1.11.11" } [lib] crate-type = ["cdylib", "lib"] diff --git a/programs/bpf/rust/membuiltins/Cargo.toml b/programs/bpf/rust/membuiltins/Cargo.toml index 1aef59a97d446f..e8a4286a7933db 100644 --- a/programs/bpf/rust/membuiltins/Cargo.toml +++ b/programs/bpf/rust/membuiltins/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-membuiltins" -version = "1.11.10" +version = "1.11.11" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ documentation = "https://docs.rs/solana-bpf-rust-mem" edition = "2021" [dependencies] -solana-bpf-rust-mem = { path = "../mem", version = "=1.11.10", features = [ "no-entrypoint" ] } -solana-program = { path = "../../../../sdk/program", version = "=1.11.10" } +solana-bpf-rust-mem = { path = "../mem", version = "=1.11.11", features = [ "no-entrypoint" ] } +solana-program = { path = "../../../../sdk/program", version = "=1.11.11" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/noop/Cargo.toml b/programs/bpf/rust/noop/Cargo.toml index 072b82bc970f54..3a540d17a0f183 100644 --- a/programs/bpf/rust/noop/Cargo.toml +++ b/programs/bpf/rust/noop/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-noop" -version = "1.11.10" +version = "1.11.11" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-noop" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.10" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.11" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/panic/Cargo.toml b/programs/bpf/rust/panic/Cargo.toml index d8f308de147088..a73cdd65db61db 100644 --- a/programs/bpf/rust/panic/Cargo.toml +++ b/programs/bpf/rust/panic/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-panic" -version = "1.11.10" +version = "1.11.11" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-panic" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.10" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.11" } [features] default = ["custom-panic"] diff --git a/programs/bpf/rust/param_passing/Cargo.toml b/programs/bpf/rust/param_passing/Cargo.toml index 7a329b6ba74c1c..cae1126346d3f2 100644 --- a/programs/bpf/rust/param_passing/Cargo.toml +++ b/programs/bpf/rust/param_passing/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-param-passing" -version = "1.11.10" +version = "1.11.11" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ documentation = "https://docs.rs/solana-bpf-rust-param-passing" edition = "2021" [dependencies] -solana-bpf-rust-param-passing-dep = { path = "../param_passing_dep", version = "=1.11.10" } -solana-program = { path = "../../../../sdk/program", version = "=1.11.10" } +solana-bpf-rust-param-passing-dep = { path = "../param_passing_dep", version = "=1.11.11" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.11" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/param_passing_dep/Cargo.toml b/programs/bpf/rust/param_passing_dep/Cargo.toml index 0483fdd6e96f1a..83c4a6075e2817 100644 --- a/programs/bpf/rust/param_passing_dep/Cargo.toml +++ b/programs/bpf/rust/param_passing_dep/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-param-passing-dep" -version = "1.11.10" +version = "1.11.11" description = "Solana BPF program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-param-passing-dep" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.10" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.11" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/bpf/rust/rand/Cargo.toml b/programs/bpf/rust/rand/Cargo.toml index f8e8ae55eaae17..b7a55d958ea353 100644 --- a/programs/bpf/rust/rand/Cargo.toml +++ b/programs/bpf/rust/rand/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-rand" -version = "1.11.10" +version = "1.11.11" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,7 +12,7 @@ edition = "2021" [dependencies] getrandom = { version = "0.1.14", features = ["dummy"] } rand = "0.7" -solana-program = { path = "../../../../sdk/program", version = "=1.11.10" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.11" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/realloc/Cargo.toml b/programs/bpf/rust/realloc/Cargo.toml index 8932c9a7253db7..3b7996862d6af6 100644 --- a/programs/bpf/rust/realloc/Cargo.toml +++ b/programs/bpf/rust/realloc/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-realloc" -version = "1.11.10" +version = "1.11.11" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,7 +14,7 @@ default = ["program"] program = [] [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.10" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.11" } [lib] crate-type = ["lib", "cdylib"] diff --git a/programs/bpf/rust/realloc_invoke/Cargo.toml b/programs/bpf/rust/realloc_invoke/Cargo.toml index 008cb2235314df..7b0eeb5c05786c 100644 --- a/programs/bpf/rust/realloc_invoke/Cargo.toml +++ b/programs/bpf/rust/realloc_invoke/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-realloc-invoke" -version = "1.11.10" +version = "1.11.11" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,8 +14,8 @@ default = ["program"] program = [] [dependencies] -solana-bpf-rust-realloc = { path = "../realloc", version = "=1.11.10", default-features = false } -solana-program = { path = "../../../../sdk/program", version = "=1.11.10" } +solana-bpf-rust-realloc = { path = "../realloc", version = "=1.11.11", default-features = false } +solana-program = { path = "../../../../sdk/program", version = "=1.11.11" } [lib] crate-type = ["lib", "cdylib"] diff --git a/programs/bpf/rust/ro_account_modify/Cargo.toml b/programs/bpf/rust/ro_account_modify/Cargo.toml index 4198e3efe70861..05d6bff8fecf76 100644 --- a/programs/bpf/rust/ro_account_modify/Cargo.toml +++ b/programs/bpf/rust/ro_account_modify/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-ro-account_modify" -version = "1.11.10" +version = "1.11.11" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-ro-modify" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.10" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.11" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/ro_modify/Cargo.toml b/programs/bpf/rust/ro_modify/Cargo.toml index 9b9241eda4a6f0..0fad4772bd5cf5 100644 --- a/programs/bpf/rust/ro_modify/Cargo.toml +++ b/programs/bpf/rust/ro_modify/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-ro-modify" -version = "1.11.10" +version = "1.11.11" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-ro-modify" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.10" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.11" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/sanity/Cargo.toml b/programs/bpf/rust/sanity/Cargo.toml index d3ff4158f15d19..46f4d30e687d9c 100644 --- a/programs/bpf/rust/sanity/Cargo.toml +++ b/programs/bpf/rust/sanity/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-sanity" -version = "1.11.10" +version = "1.11.11" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,12 +13,12 @@ edition = "2021" test-bpf = [] [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.10" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.11" } [dev-dependencies] -solana-program-runtime = { path = "../../../../program-runtime", version = "=1.11.10" } -solana-program-test = { path = "../../../../program-test", version = "=1.11.10" } -solana-sdk = { path = "../../../../sdk", version = "=1.11.10" } +solana-program-runtime = { path = "../../../../program-runtime", version = "=1.11.11" } +solana-program-test = { path = "../../../../program-test", version = "=1.11.11" } +solana-sdk = { path = "../../../../sdk", version = "=1.11.11" } [lib] crate-type = ["cdylib", "lib"] diff --git a/programs/bpf/rust/secp256k1_recover/Cargo.toml b/programs/bpf/rust/secp256k1_recover/Cargo.toml index 687c143eac9e21..9c4be3245d2108 100644 --- a/programs/bpf/rust/secp256k1_recover/Cargo.toml +++ b/programs/bpf/rust/secp256k1_recover/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-secp256k1-recover" -version = "1.11.10" +version = "1.11.11" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -11,7 +11,7 @@ edition = "2021" [dependencies] libsecp256k1 = { version = "0.7.0", default-features = false } -solana-program = { path = "../../../../sdk/program", version = "=1.11.10" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.11" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/sha/Cargo.toml b/programs/bpf/rust/sha/Cargo.toml index 61aceb32ad067f..c6cb3bbd4c2ef5 100644 --- a/programs/bpf/rust/sha/Cargo.toml +++ b/programs/bpf/rust/sha/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-sha" -version = "1.11.10" +version = "1.11.11" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -11,7 +11,7 @@ edition = "2021" [dependencies] blake3 = "1.0.0" -solana-program = { path = "../../../../sdk/program", version = "=1.11.10" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.11" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/sibling_inner_instruction/Cargo.toml b/programs/bpf/rust/sibling_inner_instruction/Cargo.toml index 5d259c45f5c90f..37a4572a51c564 100644 --- a/programs/bpf/rust/sibling_inner_instruction/Cargo.toml +++ b/programs/bpf/rust/sibling_inner_instruction/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-sibling_inner-instructions" -version = "1.11.10" +version = "1.11.11" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-log-data" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.10" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.11" } [features] default = ["program"] diff --git a/programs/bpf/rust/sibling_instruction/Cargo.toml b/programs/bpf/rust/sibling_instruction/Cargo.toml index 233bf2a2622950..8ba09ed6190a1d 100644 --- a/programs/bpf/rust/sibling_instruction/Cargo.toml +++ b/programs/bpf/rust/sibling_instruction/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-sibling-instructions" -version = "1.11.10" +version = "1.11.11" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-log-data" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.10" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.11" } [features] default = ["program"] diff --git a/programs/bpf/rust/simulation/Cargo.toml b/programs/bpf/rust/simulation/Cargo.toml index b147d9c210b599..f09b9e418cdb03 100644 --- a/programs/bpf/rust/simulation/Cargo.toml +++ b/programs/bpf/rust/simulation/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-simulation" -version = "1.11.10" +version = "1.11.11" description = "Solana BPF Program Simulation Differences" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,13 +13,13 @@ edition = "2021" test-bpf = [] [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.10" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.11" } [dev-dependencies] -solana-logger = { path = "../../../../logger", version = "=1.11.10" } -solana-program-test = { path = "../../../../program-test", version = "=1.11.10" } -solana-sdk = { path = "../../../../sdk", version = "=1.11.10" } -solana-validator = { path = "../../../../validator", version = "=1.11.10" } +solana-logger = { path = "../../../../logger", version = "=1.11.11" } +solana-program-test = { path = "../../../../program-test", version = "=1.11.11" } +solana-sdk = { path = "../../../../sdk", version = "=1.11.11" } +solana-validator = { path = "../../../../validator", version = "=1.11.11" } [lib] crate-type = ["cdylib", "lib"] diff --git a/programs/bpf/rust/spoof1/Cargo.toml b/programs/bpf/rust/spoof1/Cargo.toml index ceef89461c94ff..75c298b38cecdb 100644 --- a/programs/bpf/rust/spoof1/Cargo.toml +++ b/programs/bpf/rust/spoof1/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-spoof1" -version = "1.11.10" +version = "1.11.11" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-spoof1" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.10" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.11" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/spoof1_system/Cargo.toml b/programs/bpf/rust/spoof1_system/Cargo.toml index 3c143a480ed714..a73c596eb6e3b3 100644 --- a/programs/bpf/rust/spoof1_system/Cargo.toml +++ b/programs/bpf/rust/spoof1_system/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-spoof1-system" -version = "1.11.10" +version = "1.11.11" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-spoof1-system" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.10" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.11" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/sysvar/Cargo.toml b/programs/bpf/rust/sysvar/Cargo.toml index 69500428467551..cdb7f4cd86acdb 100644 --- a/programs/bpf/rust/sysvar/Cargo.toml +++ b/programs/bpf/rust/sysvar/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-sysvar" -version = "1.11.10" +version = "1.11.11" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,12 +10,12 @@ documentation = "https://docs.rs/solana-bpf-rust-sysvar" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.10" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.11" } [dev-dependencies] -solana-program-runtime = { path = "../../../../program-runtime", version = "=1.11.10" } -solana-program-test = { path = "../../../../program-test", version = "=1.11.10" } -solana-sdk = { path = "../../../../sdk", version = "=1.11.10" } +solana-program-runtime = { path = "../../../../program-runtime", version = "=1.11.11" } +solana-program-test = { path = "../../../../program-test", version = "=1.11.11" } +solana-sdk = { path = "../../../../sdk", version = "=1.11.11" } [lib] crate-type = ["cdylib", "lib"] diff --git a/programs/bpf/rust/upgradeable/Cargo.toml b/programs/bpf/rust/upgradeable/Cargo.toml index e676fb12a55ef1..2266b823b51cf4 100644 --- a/programs/bpf/rust/upgradeable/Cargo.toml +++ b/programs/bpf/rust/upgradeable/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-upgradeable" -version = "1.11.10" +version = "1.11.11" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-upgradeable" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.10" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.11" } [lib] name = "solana_bpf_rust_upgradeable" diff --git a/programs/bpf/rust/upgraded/Cargo.toml b/programs/bpf/rust/upgraded/Cargo.toml index 0993e3c9502960..858a40863a96b3 100644 --- a/programs/bpf/rust/upgraded/Cargo.toml +++ b/programs/bpf/rust/upgraded/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-upgraded" -version = "1.11.10" +version = "1.11.11" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-upgraded" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.10" } +solana-program = { path = "../../../../sdk/program", version = "=1.11.11" } [lib] name = "solana_bpf_rust_upgraded" diff --git a/programs/bpf_loader/Cargo.toml b/programs/bpf_loader/Cargo.toml index 37426e56077853..64bb198062daa3 100644 --- a/programs/bpf_loader/Cargo.toml +++ b/programs/bpf_loader/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-loader-program" -version = "1.11.10" +version = "1.11.11" description = "Solana BPF loader" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,17 +14,17 @@ bincode = "1.3.3" byteorder = "1.4.3" libsecp256k1 = "0.6.0" log = "0.4.17" -solana-measure = { path = "../../measure", version = "=1.11.10" } -solana-metrics = { path = "../../metrics", version = "=1.11.10" } -solana-program-runtime = { path = "../../program-runtime", version = "=1.11.10" } -solana-sdk = { path = "../../sdk", version = "=1.11.10" } -solana-zk-token-sdk = { path = "../../zk-token-sdk", version = "=1.11.10" } +solana-measure = { path = "../../measure", version = "=1.11.11" } +solana-metrics = { path = "../../metrics", version = "=1.11.11" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.11.11" } +solana-sdk = { path = "../../sdk", version = "=1.11.11" } +solana-zk-token-sdk = { path = "../../zk-token-sdk", version = "=1.11.11" } solana_rbpf = "=0.2.31" thiserror = "1.0" [dev-dependencies] rand = "0.7.3" -solana-runtime = { path = "../../runtime", version = "=1.11.10" } +solana-runtime = { path = "../../runtime", version = "=1.11.11" } [lib] crate-type = ["lib"] diff --git a/programs/bpf_loader/gen-syscall-list/Cargo.toml b/programs/bpf_loader/gen-syscall-list/Cargo.toml index d88a5fe8c63b9f..101e6c6191286b 100644 --- a/programs/bpf_loader/gen-syscall-list/Cargo.toml +++ b/programs/bpf_loader/gen-syscall-list/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "gen-syscall-list" -version = "1.11.10" +version = "1.11.11" edition = "2021" license = "Apache-2.0" publish = false diff --git a/programs/compute-budget/Cargo.toml b/programs/compute-budget/Cargo.toml index 0d94c497405cbc..1533438e6ceebc 100644 --- a/programs/compute-budget/Cargo.toml +++ b/programs/compute-budget/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "solana-compute-budget-program" description = "Solana Compute Budget program" -version = "1.11.10" +version = "1.11.11" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-compute-budget-program" repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ license = "Apache-2.0" edition = "2021" [dependencies] -solana-program-runtime = { path = "../../program-runtime", version = "=1.11.10" } -solana-sdk = { path = "../../sdk", version = "=1.11.10" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.11.11" } +solana-sdk = { path = "../../sdk", version = "=1.11.11" } [lib] crate-type = ["lib"] diff --git a/programs/config/Cargo.toml b/programs/config/Cargo.toml index 80f761589fb02c..0b73b80f12f4ce 100644 --- a/programs/config/Cargo.toml +++ b/programs/config/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-config-program" -version = "1.11.10" +version = "1.11.11" description = "Solana Config program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,11 +14,11 @@ bincode = "1.3.3" chrono = { version = "0.4.11", features = ["serde"] } serde = "1.0.138" serde_derive = "1.0.103" -solana-program-runtime = { path = "../../program-runtime", version = "=1.11.10" } -solana-sdk = { path = "../../sdk", version = "=1.11.10" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.11.11" } +solana-sdk = { path = "../../sdk", version = "=1.11.11" } [dev-dependencies] -solana-logger = { path = "../../logger", version = "=1.11.10" } +solana-logger = { path = "../../logger", version = "=1.11.11" } [lib] crate-type = ["lib"] diff --git a/programs/ed25519-tests/Cargo.toml b/programs/ed25519-tests/Cargo.toml index 385361362e526e..f21c036bbcc56f 100644 --- a/programs/ed25519-tests/Cargo.toml +++ b/programs/ed25519-tests/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-ed25519-program-tests" -version = "1.11.10" +version = "1.11.11" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" @@ -12,8 +12,8 @@ publish = false assert_matches = "1.5.0" ed25519-dalek = "=1.0.1" rand = "0.7.0" -solana-program-test = { path = "../../program-test", version = "=1.11.10" } -solana-sdk = { path = "../../sdk", version = "=1.11.10" } +solana-program-test = { path = "../../program-test", version = "=1.11.11" } +solana-sdk = { path = "../../sdk", version = "=1.11.11" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/stake/Cargo.toml b/programs/stake/Cargo.toml index 8c0af49522177f..8423643d2a799b 100644 --- a/programs/stake/Cargo.toml +++ b/programs/stake/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-stake-program" -version = "1.11.10" +version = "1.11.11" description = "Solana Stake program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -16,19 +16,19 @@ num-derive = "0.3" num-traits = "0.2" serde = "1.0.138" serde_derive = "1.0.103" -solana-config-program = { path = "../config", version = "=1.11.10" } -solana-frozen-abi = { path = "../../frozen-abi", version = "=1.11.10" } -solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.11.10" } -solana-metrics = { path = "../../metrics", version = "=1.11.10" } -solana-program-runtime = { path = "../../program-runtime", version = "=1.11.10" } -solana-sdk = { path = "../../sdk", version = "=1.11.10" } -solana-vote-program = { path = "../vote", version = "=1.11.10" } +solana-config-program = { path = "../config", version = "=1.11.11" } +solana-frozen-abi = { path = "../../frozen-abi", version = "=1.11.11" } +solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.11.11" } +solana-metrics = { path = "../../metrics", version = "=1.11.11" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.11.11" } +solana-sdk = { path = "../../sdk", version = "=1.11.11" } +solana-vote-program = { path = "../vote", version = "=1.11.11" } thiserror = "1.0" [dev-dependencies] assert_matches = "1.5.0" proptest = "1.0" -solana-logger = { path = "../../logger", version = "=1.11.10" } +solana-logger = { path = "../../logger", version = "=1.11.11" } test-case = "2.1.0" [build-dependencies] diff --git a/programs/vote/Cargo.toml b/programs/vote/Cargo.toml index 78dbdaa2879ce8..2e7e613765b0cd 100644 --- a/programs/vote/Cargo.toml +++ b/programs/vote/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-vote-program" -version = "1.11.10" +version = "1.11.11" description = "Solana Vote program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -16,15 +16,15 @@ num-derive = "0.3" num-traits = "0.2" serde = "1.0.138" serde_derive = "1.0.103" -solana-frozen-abi = { path = "../../frozen-abi", version = "=1.11.10" } -solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.11.10" } -solana-metrics = { path = "../../metrics", version = "=1.11.10" } -solana-program-runtime = { path = "../../program-runtime", version = "=1.11.10" } -solana-sdk = { path = "../../sdk", version = "=1.11.10" } +solana-frozen-abi = { path = "../../frozen-abi", version = "=1.11.11" } +solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.11.11" } +solana-metrics = { path = "../../metrics", version = "=1.11.11" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.11.11" } +solana-sdk = { path = "../../sdk", version = "=1.11.11" } thiserror = "1.0" [dev-dependencies] -solana-logger = { path = "../../logger", version = "=1.11.10" } +solana-logger = { path = "../../logger", version = "=1.11.11" } [build-dependencies] rustc_version = "0.4" diff --git a/programs/zk-token-proof/Cargo.toml b/programs/zk-token-proof/Cargo.toml index dbd61a571ec4ac..dc35cc3d1cc5e5 100644 --- a/programs/zk-token-proof/Cargo.toml +++ b/programs/zk-token-proof/Cargo.toml @@ -3,7 +3,7 @@ name = "solana-zk-token-proof-program" description = "Solana Zk Token Proof Program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" -version = "1.11.10" +version = "1.11.11" license = "Apache-2.0" edition = "2021" @@ -12,6 +12,6 @@ bytemuck = { version = "1.11.0", features = ["derive"] } getrandom = { version = "0.1", features = ["dummy"] } num-derive = "0.3" num-traits = "0.2" -solana-program-runtime = { path = "../../program-runtime", version = "=1.11.10" } -solana-sdk = { path = "../../sdk", version = "=1.11.10" } -solana-zk-token-sdk = { path = "../../zk-token-sdk", version = "=1.11.10" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.11.11" } +solana-sdk = { path = "../../sdk", version = "=1.11.11" } +solana-zk-token-sdk = { path = "../../zk-token-sdk", version = "=1.11.11" } diff --git a/rayon-threadlimit/Cargo.toml b/rayon-threadlimit/Cargo.toml index f9eac3bd5343ee..6a0e07d523cc67 100644 --- a/rayon-threadlimit/Cargo.toml +++ b/rayon-threadlimit/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-rayon-threadlimit" -version = "1.11.10" +version = "1.11.11" description = "solana-rayon-threadlimit" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-rayon-threadlimit" diff --git a/rbpf-cli/Cargo.toml b/rbpf-cli/Cargo.toml index 31d5814ddcc722..1fc1971f5e9542 100644 --- a/rbpf-cli/Cargo.toml +++ b/rbpf-cli/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "rbpf-cli" -version = "1.11.10" +version = "1.11.11" description = "CLI to test and analyze eBPF programs" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/rbpf" @@ -13,8 +13,8 @@ publish = false clap = { version = "3.1.5", features = ["cargo"] } serde = "1.0.138" serde_json = "1.0.81" -solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.11.10" } -solana-logger = { path = "../logger", version = "=1.11.10" } -solana-program-runtime = { path = "../program-runtime", version = "=1.11.10" } -solana-sdk = { path = "../sdk", version = "=1.11.10" } +solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.11.11" } +solana-logger = { path = "../logger", version = "=1.11.11" } +solana-program-runtime = { path = "../program-runtime", version = "=1.11.11" } +solana-sdk = { path = "../sdk", version = "=1.11.11" } solana_rbpf = "=0.2.31" diff --git a/remote-wallet/Cargo.toml b/remote-wallet/Cargo.toml index 09a8ba59e126bc..ef432abff56e1e 100644 --- a/remote-wallet/Cargo.toml +++ b/remote-wallet/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-remote-wallet" description = "Blockchain, Rebuilt for Scale" -version = "1.11.10" +version = "1.11.11" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -19,7 +19,7 @@ num-traits = { version = "0.2" } parking_lot = "0.12" qstring = "0.7.2" semver = "1.0" -solana-sdk = { path = "../sdk", version = "=1.11.10" } +solana-sdk = { path = "../sdk", version = "=1.11.11" } thiserror = "1.0" uriparse = "0.6.4" diff --git a/rpc-test/Cargo.toml b/rpc-test/Cargo.toml index b603de23208ac0..ff7bca9c6277cd 100644 --- a/rpc-test/Cargo.toml +++ b/rpc-test/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-rpc-test" -version = "1.11.10" +version = "1.11.11" description = "Solana RPC Test" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -19,17 +19,17 @@ log = "0.4.17" reqwest = { version = "0.11.11", default-features = false, features = ["blocking", "brotli", "deflate", "gzip", "rustls-tls", "json"] } serde = "1.0.138" serde_json = "1.0.81" -solana-account-decoder = { path = "../account-decoder", version = "=1.11.10" } -solana-client = { path = "../client", version = "=1.11.10" } -solana-rpc = { path = "../rpc", version = "=1.11.10" } -solana-sdk = { path = "../sdk", version = "=1.11.10" } -solana-streamer = { path = "../streamer", version = "=1.11.10" } -solana-test-validator = { path = "../test-validator", version = "=1.11.10" } -solana-transaction-status = { path = "../transaction-status", version = "=1.11.10" } +solana-account-decoder = { path = "../account-decoder", version = "=1.11.11" } +solana-client = { path = "../client", version = "=1.11.11" } +solana-rpc = { path = "../rpc", version = "=1.11.11" } +solana-sdk = { path = "../sdk", version = "=1.11.11" } +solana-streamer = { path = "../streamer", version = "=1.11.11" } +solana-test-validator = { path = "../test-validator", version = "=1.11.11" } +solana-transaction-status = { path = "../transaction-status", version = "=1.11.11" } tokio = { version = "~1.14.1", features = ["full"] } [dev-dependencies] -solana-logger = { path = "../logger", version = "=1.11.10" } +solana-logger = { path = "../logger", version = "=1.11.11" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/rpc/Cargo.toml b/rpc/Cargo.toml index f99c3a84ab4d66..44f57e84adfd34 100644 --- a/rpc/Cargo.toml +++ b/rpc/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-rpc" -version = "1.11.10" +version = "1.11.11" description = "Solana RPC" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -29,26 +29,26 @@ serde = "1.0.138" serde_derive = "1.0.103" serde_json = "1.0.81" soketto = "0.7" -solana-account-decoder = { path = "../account-decoder", version = "=1.11.10" } -solana-client = { path = "../client", version = "=1.11.10" } -solana-entry = { path = "../entry", version = "=1.11.10" } -solana-faucet = { path = "../faucet", version = "=1.11.10" } -solana-gossip = { path = "../gossip", version = "=1.11.10" } -solana-ledger = { path = "../ledger", version = "=1.11.10" } -solana-measure = { path = "../measure", version = "=1.11.10" } -solana-metrics = { path = "../metrics", version = "=1.11.10" } -solana-perf = { path = "../perf", version = "=1.11.10" } -solana-poh = { path = "../poh", version = "=1.11.10" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.11.10" } -solana-runtime = { path = "../runtime", version = "=1.11.10" } -solana-sdk = { path = "../sdk", version = "=1.11.10" } -solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.11.10" } -solana-stake-program = { path = "../programs/stake", version = "=1.11.10" } -solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.11.10" } -solana-streamer = { path = "../streamer", version = "=1.11.10" } -solana-transaction-status = { path = "../transaction-status", version = "=1.11.10" } -solana-version = { path = "../version", version = "=1.11.10" } -solana-vote-program = { path = "../programs/vote", version = "=1.11.10" } +solana-account-decoder = { path = "../account-decoder", version = "=1.11.11" } +solana-client = { path = "../client", version = "=1.11.11" } +solana-entry = { path = "../entry", version = "=1.11.11" } +solana-faucet = { path = "../faucet", version = "=1.11.11" } +solana-gossip = { path = "../gossip", version = "=1.11.11" } +solana-ledger = { path = "../ledger", version = "=1.11.11" } +solana-measure = { path = "../measure", version = "=1.11.11" } +solana-metrics = { path = "../metrics", version = "=1.11.11" } +solana-perf = { path = "../perf", version = "=1.11.11" } +solana-poh = { path = "../poh", version = "=1.11.11" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.11.11" } +solana-runtime = { path = "../runtime", version = "=1.11.11" } +solana-sdk = { path = "../sdk", version = "=1.11.11" } +solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.11.11" } +solana-stake-program = { path = "../programs/stake", version = "=1.11.11" } +solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.11.11" } +solana-streamer = { path = "../streamer", version = "=1.11.11" } +solana-transaction-status = { path = "../transaction-status", version = "=1.11.11" } +solana-version = { path = "../version", version = "=1.11.11" } +solana-vote-program = { path = "../programs/vote", version = "=1.11.11" } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } spl-token-2022 = { version = "=0.4.2", features = ["no-entrypoint"] } stream-cancel = "0.8.1" @@ -58,9 +58,9 @@ tokio-util = { version = "0.6", features = ["codec", "compat"] } [dev-dependencies] serial_test = "0.8.0" -solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.11.10" } -solana-net-utils = { path = "../net-utils", version = "=1.11.10" } -solana-stake-program = { path = "../programs/stake", version = "=1.11.10" } +solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.11.11" } +solana-net-utils = { path = "../net-utils", version = "=1.11.11" } +solana-stake-program = { path = "../programs/stake", version = "=1.11.11" } symlink = "0.1.0" [lib] diff --git a/runtime/Cargo.toml b/runtime/Cargo.toml index eff524decedd05..5abc718a344674 100644 --- a/runtime/Cargo.toml +++ b/runtime/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-runtime" -version = "1.11.10" +version = "1.11.11" description = "Solana runtime" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -39,21 +39,21 @@ rayon = "1.5.3" regex = "1.5.6" serde = { version = "1.0.138", features = ["rc"] } serde_derive = "1.0.103" -solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.11.10" } -solana-bucket-map = { path = "../bucket_map", version = "=1.11.10" } -solana-compute-budget-program = { path = "../programs/compute-budget", version = "=1.11.10" } -solana-config-program = { path = "../programs/config", version = "=1.11.10" } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.11.10" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.11.10" } -solana-measure = { path = "../measure", version = "=1.11.10" } -solana-metrics = { path = "../metrics", version = "=1.11.10" } -solana-program-runtime = { path = "../program-runtime", version = "=1.11.10" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.11.10" } -solana-sdk = { path = "../sdk", version = "=1.11.10" } -solana-stake-program = { path = "../programs/stake", version = "=1.11.10" } -solana-vote-program = { path = "../programs/vote", version = "=1.11.10" } -solana-zk-token-proof-program = { path = "../programs/zk-token-proof", version = "=1.11.10" } -solana-zk-token-sdk = { path = "../zk-token-sdk", version = "=1.11.10" } +solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.11.11" } +solana-bucket-map = { path = "../bucket_map", version = "=1.11.11" } +solana-compute-budget-program = { path = "../programs/compute-budget", version = "=1.11.11" } +solana-config-program = { path = "../programs/config", version = "=1.11.11" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.11.11" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.11.11" } +solana-measure = { path = "../measure", version = "=1.11.11" } +solana-metrics = { path = "../metrics", version = "=1.11.11" } +solana-program-runtime = { path = "../program-runtime", version = "=1.11.11" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.11.11" } +solana-sdk = { path = "../sdk", version = "=1.11.11" } +solana-stake-program = { path = "../programs/stake", version = "=1.11.11" } +solana-vote-program = { path = "../programs/vote", version = "=1.11.11" } +solana-zk-token-proof-program = { path = "../programs/zk-token-proof", version = "=1.11.11" } +solana-zk-token-sdk = { path = "../zk-token-sdk", version = "=1.11.11" } strum = { version = "0.24", features = ["derive"] } strum_macros = "0.24" symlink = "0.1.0" @@ -71,7 +71,7 @@ assert_matches = "1.5.0" ed25519-dalek = "=1.0.1" libsecp256k1 = "0.6.0" rand_chacha = "0.2.2" -solana-logger = { path = "../logger", version = "=1.11.10" } +solana-logger = { path = "../logger", version = "=1.11.11" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/runtime/store-tool/Cargo.toml b/runtime/store-tool/Cargo.toml index 359e61d5fe0a01..def5771d32f17e 100644 --- a/runtime/store-tool/Cargo.toml +++ b/runtime/store-tool/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-store-tool" description = "Tool to inspect append vecs" -version = "1.11.10" +version = "1.11.11" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -12,9 +12,9 @@ publish = false [dependencies] clap = "2.33.1" log = { version = "0.4.17" } -solana-logger = { path = "../../logger", version = "=1.11.10" } -solana-runtime = { path = "..", version = "=1.11.10" } -solana-version = { path = "../../version", version = "=1.11.10" } +solana-logger = { path = "../../logger", version = "=1.11.11" } +solana-runtime = { path = "..", version = "=1.11.11" } +solana-version = { path = "../../version", version = "=1.11.11" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/sdk/Cargo.toml b/sdk/Cargo.toml index 170d8ea1ef74c2..ec3a4e54ac0d22 100644 --- a/sdk/Cargo.toml +++ b/sdk/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-sdk" -version = "1.11.10" +version = "1.11.11" description = "Solana SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -71,11 +71,11 @@ serde_derive = "1.0.103" serde_json = { version = "1.0.81", optional = true } sha2 = "0.10.2" sha3 = { version = "0.10.1", optional = true } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.11.10" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.11.10" } -solana-logger = { path = "../logger", version = "=1.11.10", optional = true } -solana-program = { path = "program", version = "=1.11.10" } -solana-sdk-macro = { path = "macro", version = "=1.11.10" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.11.11" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.11.11" } +solana-logger = { path = "../logger", version = "=1.11.11", optional = true } +solana-program = { path = "program", version = "=1.11.11" } +solana-sdk-macro = { path = "macro", version = "=1.11.11" } thiserror = "1.0" uriparse = "0.6.4" wasm-bindgen = "0.2" diff --git a/sdk/cargo-build-bpf/Cargo.toml b/sdk/cargo-build-bpf/Cargo.toml index 967b1ac82b02f6..1e94098ca66894 100644 --- a/sdk/cargo-build-bpf/Cargo.toml +++ b/sdk/cargo-build-bpf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-cargo-build-bpf" -version = "1.11.10" +version = "1.11.11" description = "Compile a local package and all of its dependencies using the Solana SBF SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,7 +12,7 @@ publish = false [dependencies] cargo_metadata = "0.15.0" clap = { version = "3.1.5", features = ["cargo", "env"] } -solana-sdk = { path = "..", version = "=1.11.10" } +solana-sdk = { path = "..", version = "=1.11.11" } [features] program = [] diff --git a/sdk/cargo-build-sbf/Cargo.toml b/sdk/cargo-build-sbf/Cargo.toml index fbe4c6e0540539..6dc03dd171ab2c 100644 --- a/sdk/cargo-build-sbf/Cargo.toml +++ b/sdk/cargo-build-sbf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-cargo-build-sbf" -version = "1.11.10" +version = "1.11.11" description = "Compile a local package and all of its dependencies using the Solana SBF SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -15,9 +15,9 @@ cargo_metadata = "0.15.0" clap = { version = "3.1.5", features = ["cargo", "env"] } log = { version = "0.4.14", features = ["std"] } regex = "1.5.6" -solana-download-utils = { path = "../../download-utils", version = "=1.11.10" } -solana-logger = { path = "../../logger", version = "=1.11.10" } -solana-sdk = { path = "..", version = "=1.11.10" } +solana-download-utils = { path = "../../download-utils", version = "=1.11.11" } +solana-logger = { path = "../../logger", version = "=1.11.11" } +solana-sdk = { path = "..", version = "=1.11.11" } tar = "0.4.38" [dev-dependencies] diff --git a/sdk/cargo-build-sbf/tests/crates/fail/Cargo.toml b/sdk/cargo-build-sbf/tests/crates/fail/Cargo.toml index b394955a4bcf2c..e9fec2f7ffcaf0 100644 --- a/sdk/cargo-build-sbf/tests/crates/fail/Cargo.toml +++ b/sdk/cargo-build-sbf/tests/crates/fail/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "fail" -version = "1.11.10" +version = "1.11.11" description = "Solana SBF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ edition = "2021" publish = false [dependencies] -solana-program = { path = "../../../../program", version = "=1.11.10" } +solana-program = { path = "../../../../program", version = "=1.11.11" } [lib] crate-type = ["cdylib"] diff --git a/sdk/cargo-build-sbf/tests/crates/noop/Cargo.toml b/sdk/cargo-build-sbf/tests/crates/noop/Cargo.toml index b44937bee0fcae..c3210e7056f4a9 100644 --- a/sdk/cargo-build-sbf/tests/crates/noop/Cargo.toml +++ b/sdk/cargo-build-sbf/tests/crates/noop/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "noop" -version = "1.11.10" +version = "1.11.11" description = "Solana SBF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ edition = "2021" publish = false [dependencies] -solana-program = { path = "../../../../program", version = "=1.11.10" } +solana-program = { path = "../../../../program", version = "=1.11.11" } [lib] crate-type = ["cdylib"] diff --git a/sdk/cargo-test-bpf/Cargo.toml b/sdk/cargo-test-bpf/Cargo.toml index 196238d702958a..54b2b5f6032db2 100644 --- a/sdk/cargo-test-bpf/Cargo.toml +++ b/sdk/cargo-test-bpf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-cargo-test-bpf" -version = "1.11.10" +version = "1.11.11" description = "Execute all unit and integration tests after building with the Solana SBF SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/sdk/cargo-test-sbf/Cargo.toml b/sdk/cargo-test-sbf/Cargo.toml index 89ddc95c909c0b..884ddf5094cb37 100644 --- a/sdk/cargo-test-sbf/Cargo.toml +++ b/sdk/cargo-test-sbf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-cargo-test-sbf" -version = "1.11.10" +version = "1.11.11" description = "Execute all unit and integration tests after building with the Solana SBF SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/sdk/gen-headers/Cargo.toml b/sdk/gen-headers/Cargo.toml index e970a4ba33ee4e..5814693c18e1bf 100644 --- a/sdk/gen-headers/Cargo.toml +++ b/sdk/gen-headers/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "gen-headers" -version = "1.11.10" +version = "1.11.11" edition = "2021" license = "Apache-2.0" publish = false diff --git a/sdk/macro/Cargo.toml b/sdk/macro/Cargo.toml index bd57e7ce763f6f..e4c7fcdf35538b 100644 --- a/sdk/macro/Cargo.toml +++ b/sdk/macro/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-sdk-macro" -version = "1.11.10" +version = "1.11.11" description = "Solana SDK Macro" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/sdk/program/Cargo.toml b/sdk/program/Cargo.toml index e0d486927c15b4..255fdba010ece4 100644 --- a/sdk/program/Cargo.toml +++ b/sdk/program/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-program" -version = "1.11.10" +version = "1.11.11" description = "Solana Program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -31,9 +31,9 @@ serde_derive = "1.0" serde_json = "1.0" sha2 = "0.10.0" sha3 = "0.10.0" -solana-frozen-abi = { path = "../../frozen-abi", version = "=1.11.10" } -solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.11.10" } -solana-sdk-macro = { path = "../macro", version = "=1.11.10" } +solana-frozen-abi = { path = "../../frozen-abi", version = "=1.11.11" } +solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.11.11" } +solana-sdk-macro = { path = "../macro", version = "=1.11.11" } thiserror = "1.0" [target.'cfg(not(target_os = "solana"))'.dependencies] @@ -50,7 +50,7 @@ wasm-bindgen = "0.2" zeroize = { version = "1.3", default-features = true, features = ["zeroize_derive"] } [target.'cfg(not(target_os = "solana"))'.dev-dependencies] -solana-logger = { path = "../../logger", version = "=1.11.10" } +solana-logger = { path = "../../logger", version = "=1.11.11" } [target.'cfg(target_arch = "wasm32")'.dependencies] console_error_panic_hook = "0.1.7" diff --git a/send-transaction-service/Cargo.toml b/send-transaction-service/Cargo.toml index a6a9e75a62dc69..fff729c3e72f37 100644 --- a/send-transaction-service/Cargo.toml +++ b/send-transaction-service/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-send-transaction-service" -version = "1.11.10" +version = "1.11.11" description = "Solana send transaction service" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,14 +12,14 @@ edition = "2021" [dependencies] crossbeam-channel = "0.5" log = "0.4.17" -solana-client = { path = "../client", version = "=1.11.10" } -solana-measure = { path = "../measure", version = "=1.11.10" } -solana-metrics = { path = "../metrics", version = "=1.11.10" } -solana-runtime = { path = "../runtime", version = "=1.11.10" } -solana-sdk = { path = "../sdk", version = "=1.11.10" } +solana-client = { path = "../client", version = "=1.11.11" } +solana-measure = { path = "../measure", version = "=1.11.11" } +solana-metrics = { path = "../metrics", version = "=1.11.11" } +solana-runtime = { path = "../runtime", version = "=1.11.11" } +solana-sdk = { path = "../sdk", version = "=1.11.11" } [dev-dependencies] -solana-logger = { path = "../logger", version = "=1.11.10" } +solana-logger = { path = "../logger", version = "=1.11.11" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/stake-accounts/Cargo.toml b/stake-accounts/Cargo.toml index 7cb017db3be7be..e5c542467418f8 100644 --- a/stake-accounts/Cargo.toml +++ b/stake-accounts/Cargo.toml @@ -3,7 +3,7 @@ name = "solana-stake-accounts" description = "Blockchain, Rebuilt for Scale" authors = ["Solana Maintainers "] edition = "2021" -version = "1.11.10" +version = "1.11.11" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -11,15 +11,15 @@ documentation = "https://docs.rs/solana-stake-accounts" [dependencies] clap = "2.33.1" -solana-clap-utils = { path = "../clap-utils", version = "=1.11.10" } -solana-cli-config = { path = "../cli-config", version = "=1.11.10" } -solana-client = { path = "../client", version = "=1.11.10" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.11.10" } -solana-sdk = { path = "../sdk", version = "=1.11.10" } -solana-stake-program = { path = "../programs/stake", version = "=1.11.10" } +solana-clap-utils = { path = "../clap-utils", version = "=1.11.11" } +solana-cli-config = { path = "../cli-config", version = "=1.11.11" } +solana-client = { path = "../client", version = "=1.11.11" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.11.11" } +solana-sdk = { path = "../sdk", version = "=1.11.11" } +solana-stake-program = { path = "../programs/stake", version = "=1.11.11" } [dev-dependencies] -solana-runtime = { path = "../runtime", version = "=1.11.10" } +solana-runtime = { path = "../runtime", version = "=1.11.11" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/storage-bigtable/Cargo.toml b/storage-bigtable/Cargo.toml index 0c283cccbff19d..45d15186bc5ed1 100644 --- a/storage-bigtable/Cargo.toml +++ b/storage-bigtable/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-storage-bigtable" -version = "1.11.10" +version = "1.11.11" description = "Solana Storage BigTable" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -27,10 +27,10 @@ prost-types = "0.11.0" serde = "1.0.138" serde_derive = "1.0.103" smpl_jwt = "0.7.1" -solana-metrics = { path = "../metrics", version = "=1.11.10" } -solana-sdk = { path = "../sdk", version = "=1.11.10" } -solana-storage-proto = { path = "../storage-proto", version = "=1.11.10" } -solana-transaction-status = { path = "../transaction-status", version = "=1.11.10" } +solana-metrics = { path = "../metrics", version = "=1.11.11" } +solana-sdk = { path = "../sdk", version = "=1.11.11" } +solana-storage-proto = { path = "../storage-proto", version = "=1.11.11" } +solana-transaction-status = { path = "../transaction-status", version = "=1.11.11" } thiserror = "1.0" tokio = "1" tonic = { version = "0.8.0", features = ["tls", "transport"] } diff --git a/storage-bigtable/build-proto/Cargo.lock b/storage-bigtable/build-proto/Cargo.lock index 31c47225d7fa41..dc5dd869e2e267 100644 --- a/storage-bigtable/build-proto/Cargo.lock +++ b/storage-bigtable/build-proto/Cargo.lock @@ -219,7 +219,7 @@ dependencies = [ [[package]] name = "proto" -version = "1.11.10" +version = "1.11.11" dependencies = [ "protobuf-src", "tonic-build", diff --git a/storage-bigtable/build-proto/Cargo.toml b/storage-bigtable/build-proto/Cargo.toml index 14aaa40e380acc..d9fa741470511e 100644 --- a/storage-bigtable/build-proto/Cargo.toml +++ b/storage-bigtable/build-proto/Cargo.toml @@ -7,7 +7,7 @@ license = "Apache-2.0" name = "proto" publish = false repository = "https://github.com/solana-labs/solana" -version = "1.11.10" +version = "1.11.11" [workspace] diff --git a/storage-proto/Cargo.toml b/storage-proto/Cargo.toml index d112edf27adc8b..d9090664da0ed4 100644 --- a/storage-proto/Cargo.toml +++ b/storage-proto/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-storage-proto" -version = "1.11.10" +version = "1.11.11" description = "Solana Storage Protobuf Definitions" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,9 +14,9 @@ bincode = "1.3.3" bs58 = "0.4.0" prost = "0.11.0" serde = "1.0.138" -solana-account-decoder = { path = "../account-decoder", version = "=1.11.10" } -solana-sdk = { path = "../sdk", version = "=1.11.10" } -solana-transaction-status = { path = "../transaction-status", version = "=1.11.10" } +solana-account-decoder = { path = "../account-decoder", version = "=1.11.11" } +solana-sdk = { path = "../sdk", version = "=1.11.11" } +solana-transaction-status = { path = "../transaction-status", version = "=1.11.11" } [dev-dependencies] enum-iterator = "0.8.1" diff --git a/streamer/Cargo.toml b/streamer/Cargo.toml index 877a73d2f64f44..5b2cc340b4d96d 100644 --- a/streamer/Cargo.toml +++ b/streamer/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-streamer" -version = "1.11.10" +version = "1.11.11" description = "Solana Streamer" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -25,15 +25,15 @@ quinn = "0.8.3" rand = "0.7.0" rcgen = "0.9.2" rustls = { version = "0.20.6", features = ["dangerous_configuration"] } -solana-metrics = { path = "../metrics", version = "=1.11.10" } -solana-perf = { path = "../perf", version = "=1.11.10" } -solana-sdk = { path = "../sdk", version = "=1.11.10" } +solana-metrics = { path = "../metrics", version = "=1.11.11" } +solana-perf = { path = "../perf", version = "=1.11.11" } +solana-sdk = { path = "../sdk", version = "=1.11.11" } thiserror = "1.0" tokio = { version = "1", features = ["full"] } x509-parser = "0.14.0" [dev-dependencies] -solana-logger = { path = "../logger", version = "=1.11.10" } +solana-logger = { path = "../logger", version = "=1.11.11" } [lib] crate-type = ["lib"] diff --git a/sys-tuner/Cargo.toml b/sys-tuner/Cargo.toml index b6b177cccf2f22..cfc4e890d75453 100644 --- a/sys-tuner/Cargo.toml +++ b/sys-tuner/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-sys-tuner" description = "The solana cluster system tuner daemon" -version = "1.11.10" +version = "1.11.11" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,8 +14,8 @@ publish = true clap = "2.33.1" libc = "0.2.126" log = "0.4.17" -solana-logger = { path = "../logger", version = "=1.11.10" } -solana-version = { path = "../version", version = "=1.11.10" } +solana-logger = { path = "../logger", version = "=1.11.11" } +solana-version = { path = "../version", version = "=1.11.11" } [target."cfg(unix)".dependencies] unix_socket2 = "0.5.4" diff --git a/test-validator/Cargo.toml b/test-validator/Cargo.toml index ecbd151fbfd13f..00774f1d8c8e75 100644 --- a/test-validator/Cargo.toml +++ b/test-validator/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "solana-test-validator" description = "Blockchain, Rebuilt for Scale" -version = "1.11.10" +version = "1.11.11" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-test-validator" readme = "../README.md" @@ -15,19 +15,19 @@ base64 = "0.13.0" log = "0.4.17" serde_derive = "1.0.103" serde_json = "1.0.81" -solana-cli-output = { path = "../cli-output", version = "=1.11.10" } -solana-client = { path = "../client", version = "=1.11.10" } -solana-core = { path = "../core", version = "=1.11.10" } -solana-gossip = { path = "../gossip", version = "=1.11.10" } -solana-ledger = { path = "../ledger", version = "=1.11.10" } -solana-logger = { path = "../logger", version = "=1.11.10" } -solana-net-utils = { path = "../net-utils", version = "=1.11.10" } -solana-program-runtime = { path = "../program-runtime", version = "=1.11.10" } -solana-program-test = { path = "../program-test", version = "=1.11.10" } -solana-rpc = { path = "../rpc", version = "=1.11.10" } -solana-runtime = { path = "../runtime", version = "=1.11.10" } -solana-sdk = { path = "../sdk", version = "=1.11.10" } -solana-streamer = { path = "../streamer", version = "=1.11.10" } +solana-cli-output = { path = "../cli-output", version = "=1.11.11" } +solana-client = { path = "../client", version = "=1.11.11" } +solana-core = { path = "../core", version = "=1.11.11" } +solana-gossip = { path = "../gossip", version = "=1.11.11" } +solana-ledger = { path = "../ledger", version = "=1.11.11" } +solana-logger = { path = "../logger", version = "=1.11.11" } +solana-net-utils = { path = "../net-utils", version = "=1.11.11" } +solana-program-runtime = { path = "../program-runtime", version = "=1.11.11" } +solana-program-test = { path = "../program-test", version = "=1.11.11" } +solana-rpc = { path = "../rpc", version = "=1.11.11" } +solana-runtime = { path = "../runtime", version = "=1.11.11" } +solana-sdk = { path = "../sdk", version = "=1.11.11" } +solana-streamer = { path = "../streamer", version = "=1.11.11" } tokio = { version = "1", features = ["full"] } [package.metadata.docs.rs] diff --git a/tokens/Cargo.toml b/tokens/Cargo.toml index 7645fa25a74800..6ee2e4fa72d874 100644 --- a/tokens/Cargo.toml +++ b/tokens/Cargo.toml @@ -3,7 +3,7 @@ name = "solana-tokens" description = "Blockchain, Rebuilt for Scale" authors = ["Solana Maintainers "] edition = "2021" -version = "1.11.10" +version = "1.11.11" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -19,14 +19,14 @@ indexmap = "1.9.1" indicatif = "0.16.2" pickledb = "0.4.1" serde = { version = "1.0", features = ["derive"] } -solana-account-decoder = { path = "../account-decoder", version = "=1.11.10" } -solana-clap-utils = { path = "../clap-utils", version = "=1.11.10" } -solana-cli-config = { path = "../cli-config", version = "=1.11.10" } -solana-client = { path = "../client", version = "=1.11.10" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.11.10" } -solana-sdk = { path = "../sdk", version = "=1.11.10" } -solana-transaction-status = { path = "../transaction-status", version = "=1.11.10" } -solana-version = { path = "../version", version = "=1.11.10" } +solana-account-decoder = { path = "../account-decoder", version = "=1.11.11" } +solana-clap-utils = { path = "../clap-utils", version = "=1.11.11" } +solana-cli-config = { path = "../cli-config", version = "=1.11.11" } +solana-client = { path = "../client", version = "=1.11.11" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.11.11" } +solana-sdk = { path = "../sdk", version = "=1.11.11" } +solana-transaction-status = { path = "../transaction-status", version = "=1.11.11" } +solana-version = { path = "../version", version = "=1.11.11" } spl-associated-token-account = { version = "=1.1.1" } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } tempfile = "3.3.0" @@ -34,6 +34,6 @@ thiserror = "1.0" [dev-dependencies] bincode = "1.3.3" -solana-logger = { path = "../logger", version = "=1.11.10" } -solana-streamer = { path = "../streamer", version = "=1.11.10" } -solana-test-validator = { path = "../test-validator", version = "=1.11.10" } +solana-logger = { path = "../logger", version = "=1.11.11" } +solana-streamer = { path = "../streamer", version = "=1.11.11" } +solana-test-validator = { path = "../test-validator", version = "=1.11.11" } diff --git a/transaction-dos/Cargo.toml b/transaction-dos/Cargo.toml index 1162781c1c22a9..815b22cfd6708f 100644 --- a/transaction-dos/Cargo.toml +++ b/transaction-dos/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-transaction-dos" -version = "1.11.10" +version = "1.11.11" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,23 +14,23 @@ clap = "2.33.1" log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" -solana-clap-utils = { path = "../clap-utils", version = "=1.11.10" } -solana-cli = { path = "../cli", version = "=1.11.10" } -solana-client = { path = "../client", version = "=1.11.10" } -solana-core = { path = "../core", version = "=1.11.10" } -solana-faucet = { path = "../faucet", version = "=1.11.10" } -solana-gossip = { path = "../gossip", version = "=1.11.10" } -solana-logger = { path = "../logger", version = "=1.11.10" } -solana-measure = { path = "../measure", version = "=1.11.10" } -solana-net-utils = { path = "../net-utils", version = "=1.11.10" } -solana-runtime = { path = "../runtime", version = "=1.11.10" } -solana-sdk = { path = "../sdk", version = "=1.11.10" } -solana-streamer = { path = "../streamer", version = "=1.11.10" } -solana-transaction-status = { path = "../transaction-status", version = "=1.11.10" } -solana-version = { path = "../version", version = "=1.11.10" } +solana-clap-utils = { path = "../clap-utils", version = "=1.11.11" } +solana-cli = { path = "../cli", version = "=1.11.11" } +solana-client = { path = "../client", version = "=1.11.11" } +solana-core = { path = "../core", version = "=1.11.11" } +solana-faucet = { path = "../faucet", version = "=1.11.11" } +solana-gossip = { path = "../gossip", version = "=1.11.11" } +solana-logger = { path = "../logger", version = "=1.11.11" } +solana-measure = { path = "../measure", version = "=1.11.11" } +solana-net-utils = { path = "../net-utils", version = "=1.11.11" } +solana-runtime = { path = "../runtime", version = "=1.11.11" } +solana-sdk = { path = "../sdk", version = "=1.11.11" } +solana-streamer = { path = "../streamer", version = "=1.11.11" } +solana-transaction-status = { path = "../transaction-status", version = "=1.11.11" } +solana-version = { path = "../version", version = "=1.11.11" } [dev-dependencies] -solana-local-cluster = { path = "../local-cluster", version = "=1.11.10" } +solana-local-cluster = { path = "../local-cluster", version = "=1.11.11" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/transaction-status/Cargo.toml b/transaction-status/Cargo.toml index 3a8d8f035ae8cf..594f5bc2e1f37b 100644 --- a/transaction-status/Cargo.toml +++ b/transaction-status/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-transaction-status" -version = "1.11.10" +version = "1.11.11" description = "Solana transaction status types" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -20,11 +20,11 @@ log = "0.4.17" serde = "1.0.138" serde_derive = "1.0.103" serde_json = "1.0.81" -solana-account-decoder = { path = "../account-decoder", version = "=1.11.10" } -solana-measure = { path = "../measure", version = "=1.11.10" } -solana-metrics = { path = "../metrics", version = "=1.11.10" } -solana-sdk = { path = "../sdk", version = "=1.11.10" } -solana-vote-program = { path = "../programs/vote", version = "=1.11.10" } +solana-account-decoder = { path = "../account-decoder", version = "=1.11.11" } +solana-measure = { path = "../measure", version = "=1.11.11" } +solana-metrics = { path = "../metrics", version = "=1.11.11" } +solana-sdk = { path = "../sdk", version = "=1.11.11" } +solana-vote-program = { path = "../programs/vote", version = "=1.11.11" } spl-associated-token-account = { version = "=1.1.1", features = ["no-entrypoint"] } spl-memo = { version = "=3.0.1", features = ["no-entrypoint"] } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } diff --git a/upload-perf/Cargo.toml b/upload-perf/Cargo.toml index e582d040f2c45b..eeb76b0b1d5c38 100644 --- a/upload-perf/Cargo.toml +++ b/upload-perf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-upload-perf" -version = "1.11.10" +version = "1.11.11" description = "Metrics Upload Utility" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -11,7 +11,7 @@ publish = false [dependencies] serde_json = "1.0.81" -solana-metrics = { path = "../metrics", version = "=1.11.10" } +solana-metrics = { path = "../metrics", version = "=1.11.11" } [[bin]] name = "solana-upload-perf" diff --git a/validator/Cargo.toml b/validator/Cargo.toml index 25e7c5ff1c8ae0..091321bf206a3f 100644 --- a/validator/Cargo.toml +++ b/validator/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-validator" description = "Blockchain, Rebuilt for Scale" -version = "1.11.10" +version = "1.11.11" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -28,30 +28,30 @@ num_cpus = "1.13.1" rand = "0.7.0" serde = "1.0.138" serde_json = "1.0.81" -solana-clap-utils = { path = "../clap-utils", version = "=1.11.10" } -solana-cli-config = { path = "../cli-config", version = "=1.11.10" } -solana-client = { path = "../client", version = "=1.11.10" } -solana-core = { path = "../core", version = "=1.11.10" } -solana-download-utils = { path = "../download-utils", version = "=1.11.10" } -solana-entry = { path = "../entry", version = "=1.11.10" } -solana-faucet = { path = "../faucet", version = "=1.11.10" } -solana-genesis-utils = { path = "../genesis-utils", version = "=1.11.10" } -solana-gossip = { path = "../gossip", version = "=1.11.10" } -solana-ledger = { path = "../ledger", version = "=1.11.10" } -solana-logger = { path = "../logger", version = "=1.11.10" } -solana-metrics = { path = "../metrics", version = "=1.11.10" } -solana-net-utils = { path = "../net-utils", version = "=1.11.10" } -solana-perf = { path = "../perf", version = "=1.11.10" } -solana-poh = { path = "../poh", version = "=1.11.10" } -solana-rpc = { path = "../rpc", version = "=1.11.10" } -solana-runtime = { path = "../runtime", version = "=1.11.10" } -solana-sdk = { path = "../sdk", version = "=1.11.10" } -solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.11.10" } -solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.11.10" } -solana-streamer = { path = "../streamer", version = "=1.11.10" } -solana-test-validator = { path = "../test-validator", version = "=1.11.10" } -solana-version = { path = "../version", version = "=1.11.10" } -solana-vote-program = { path = "../programs/vote", version = "=1.11.10" } +solana-clap-utils = { path = "../clap-utils", version = "=1.11.11" } +solana-cli-config = { path = "../cli-config", version = "=1.11.11" } +solana-client = { path = "../client", version = "=1.11.11" } +solana-core = { path = "../core", version = "=1.11.11" } +solana-download-utils = { path = "../download-utils", version = "=1.11.11" } +solana-entry = { path = "../entry", version = "=1.11.11" } +solana-faucet = { path = "../faucet", version = "=1.11.11" } +solana-genesis-utils = { path = "../genesis-utils", version = "=1.11.11" } +solana-gossip = { path = "../gossip", version = "=1.11.11" } +solana-ledger = { path = "../ledger", version = "=1.11.11" } +solana-logger = { path = "../logger", version = "=1.11.11" } +solana-metrics = { path = "../metrics", version = "=1.11.11" } +solana-net-utils = { path = "../net-utils", version = "=1.11.11" } +solana-perf = { path = "../perf", version = "=1.11.11" } +solana-poh = { path = "../poh", version = "=1.11.11" } +solana-rpc = { path = "../rpc", version = "=1.11.11" } +solana-runtime = { path = "../runtime", version = "=1.11.11" } +solana-sdk = { path = "../sdk", version = "=1.11.11" } +solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.11.11" } +solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.11.11" } +solana-streamer = { path = "../streamer", version = "=1.11.11" } +solana-test-validator = { path = "../test-validator", version = "=1.11.11" } +solana-version = { path = "../version", version = "=1.11.11" } +solana-vote-program = { path = "../programs/vote", version = "=1.11.11" } symlink = "0.1.0" [target.'cfg(not(target_env = "msvc"))'.dependencies] diff --git a/version/Cargo.toml b/version/Cargo.toml index afc4a4fde93efa..3e1f74b267b559 100644 --- a/version/Cargo.toml +++ b/version/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-version" -version = "1.11.10" +version = "1.11.11" description = "Solana Version" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,9 +14,9 @@ log = "0.4.17" semver = "1.0.10" serde = "1.0.138" serde_derive = "1.0.103" -solana-frozen-abi = { path = "../frozen-abi", version = "=1.11.10" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.11.10" } -solana-sdk = { path = "../sdk", version = "=1.11.10" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.11.11" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.11.11" } +solana-sdk = { path = "../sdk", version = "=1.11.11" } [lib] name = "solana_version" diff --git a/watchtower/Cargo.toml b/watchtower/Cargo.toml index 0b9093e022c839..cc83d161c4afbe 100644 --- a/watchtower/Cargo.toml +++ b/watchtower/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-watchtower" description = "Blockchain, Rebuilt for Scale" -version = "1.11.10" +version = "1.11.11" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -13,15 +13,15 @@ documentation = "https://docs.rs/solana-watchtower" clap = "2.33.1" humantime = "2.0.1" log = "0.4.17" -solana-clap-utils = { path = "../clap-utils", version = "=1.11.10" } -solana-cli-config = { path = "../cli-config", version = "=1.11.10" } -solana-cli-output = { path = "../cli-output", version = "=1.11.10" } -solana-client = { path = "../client", version = "=1.11.10" } -solana-logger = { path = "../logger", version = "=1.11.10" } -solana-metrics = { path = "../metrics", version = "=1.11.10" } -solana-notifier = { path = "../notifier", version = "=1.11.10" } -solana-sdk = { path = "../sdk", version = "=1.11.10" } -solana-version = { path = "../version", version = "=1.11.10" } +solana-clap-utils = { path = "../clap-utils", version = "=1.11.11" } +solana-cli-config = { path = "../cli-config", version = "=1.11.11" } +solana-cli-output = { path = "../cli-output", version = "=1.11.11" } +solana-client = { path = "../client", version = "=1.11.11" } +solana-logger = { path = "../logger", version = "=1.11.11" } +solana-metrics = { path = "../metrics", version = "=1.11.11" } +solana-notifier = { path = "../notifier", version = "=1.11.11" } +solana-sdk = { path = "../sdk", version = "=1.11.11" } +solana-version = { path = "../version", version = "=1.11.11" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/zk-token-sdk/Cargo.toml b/zk-token-sdk/Cargo.toml index 94bbd070a5f0d6..4691e7d51a3505 100644 --- a/zk-token-sdk/Cargo.toml +++ b/zk-token-sdk/Cargo.toml @@ -3,7 +3,7 @@ name = "solana-zk-token-sdk" description = "Solana Zk Token SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" -version = "1.11.10" +version = "1.11.11" license = "Apache-2.0" edition = "2021" @@ -12,7 +12,7 @@ base64 = "0.13" bytemuck = { version = "1.11.0", features = ["derive"] } num-derive = "0.3" num-traits = "0.2" -solana-program = { path = "../sdk/program", version = "=1.11.10" } +solana-program = { path = "../sdk/program", version = "=1.11.11" } [target.'cfg(not(target_os = "solana"))'.dependencies] aes-gcm-siv = "0.10.3" @@ -28,7 +28,7 @@ rand = "0.7" serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" sha3 = "0.9" -solana-sdk = { path = "../sdk", version = "=1.11.10" } +solana-sdk = { path = "../sdk", version = "=1.11.11" } subtle = "2" thiserror = "1.0" zeroize = { version = "1.3", default-features = false, features = ["zeroize_derive"] } From 1333d0e8be956ea429c7b473c75646a470de531b Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Fri, 26 Aug 2022 23:22:19 +0000 Subject: [PATCH 073/465] rpc-sts: respect app exit in tx receiver thread (backport #27404) (#27423) rpc-sts: respect app exit in tx receiver thread (cherry picked from commit 14c60bae164766d8c5e9a83ba9f42ae23da11331) Co-authored-by: Trent Nelson --- send-transaction-service/src/send_transaction_service.rs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/send-transaction-service/src/send_transaction_service.rs b/send-transaction-service/src/send_transaction_service.rs index 97b29ee82e542b..a1b82e7676ab6b 100644 --- a/send-transaction-service/src/send_transaction_service.rs +++ b/send-transaction-service/src/send_transaction_service.rs @@ -414,7 +414,11 @@ impl SendTransactionService { .spawn(move || loop { let recv_timeout_ms = config.batch_send_rate_ms; let stats = &stats_report.stats; - match receiver.recv_timeout(Duration::from_millis(recv_timeout_ms)) { + let recv_result = receiver.recv_timeout(Duration::from_millis(recv_timeout_ms)); + if exit.load(Ordering::Relaxed) { + break; + } + match recv_result { Err(RecvTimeoutError::Disconnected) => { info!("Terminating send-transaction-service."); exit.store(true, Ordering::Relaxed); From 078c7a01042a9a69bf3a731005873ae7c1921cff Mon Sep 17 00:00:00 2001 From: Michael Vines Date: Fri, 26 Aug 2022 10:25:13 -0700 Subject: [PATCH 074/465] Update runtime background hash verifier thread name (cherry picked from commit d0983c3cf77e74004e74ddee938e3630d8e6efea) --- runtime/src/bank.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/runtime/src/bank.rs b/runtime/src/bank.rs index 282d1aef442d22..10df65d9c32a16 100644 --- a/runtime/src/bank.rs +++ b/runtime/src/bank.rs @@ -6889,7 +6889,7 @@ impl Bank { let accounts_ = Arc::clone(&accounts); accounts.accounts_db.verify_accounts_hash_in_bg.start(|| { Builder::new() - .name("solana-bg-hash-verifier".to_string()) + .name("solBgHashVerify".into()) .spawn(move || { info!( "running initial verification accounts hash calculation in background" From 54eda1e329b84608272c8aebd7c26cbc5ae0cd22 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Mon, 29 Aug 2022 16:25:58 +0000 Subject: [PATCH 075/465] remove unnecessary references (backport #27219) (#27320) remove unnecessary references (#27219) (cherry picked from commit a655d45f3a4d070e56238fa08cb3a83302c53400) Co-authored-by: apfitzge --- runtime/src/in_mem_accounts_index.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/runtime/src/in_mem_accounts_index.rs b/runtime/src/in_mem_accounts_index.rs index b252499267ba4b..be9b53af09113a 100644 --- a/runtime/src/in_mem_accounts_index.rs +++ b/runtime/src/in_mem_accounts_index.rs @@ -319,7 +319,7 @@ impl InMemAccountsIndex { callback(Some(entry)).1 } else { // not in cache, look on disk - let stats = &self.stats(); + let stats = self.stats(); let disk_entry = self.load_account_entry_from_disk(pubkey); if disk_entry.is_none() { return callback(None).1; @@ -527,7 +527,7 @@ impl InMemAccountsIndex { } fn update_entry_stats(&self, stopped_measure: Measure, found: bool) { - let stats = &self.stats(); + let stats = self.stats(); let (count, time) = if found { (&stats.entries_from_mem, &stats.entry_mem_us) } else { From 007438c2da834ce8f25873e37d1725ae1710c335 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Mon, 29 Aug 2022 16:45:22 +0000 Subject: [PATCH 076/465] slots_per_epoch shouldn't be optional (backport #27256) (#27295) * slots_per_epoch shouldn't be optional (#27256) (cherry picked from commit 9d5029da15f8ed32aa4cafc746905f80e4545b10) # Conflicts: # runtime/src/accounts_db.rs * resolve conflict Co-authored-by: apfitzge Co-authored-by: Andrew Fitzgerald --- runtime/src/accounts_db.rs | 28 +++++++++++++--------------- 1 file changed, 13 insertions(+), 15 deletions(-) diff --git a/runtime/src/accounts_db.rs b/runtime/src/accounts_db.rs index 5036ce9f1e1273..c0ffb435896ac0 100644 --- a/runtime/src/accounts_db.rs +++ b/runtime/src/accounts_db.rs @@ -6646,20 +6646,18 @@ impl AccountsDb { } /// storages are sorted by slot and have range info. - /// if we know slots_per_epoch, then add all stores older than slots_per_epoch to dirty_stores so clean visits these slots - fn mark_old_slots_as_dirty(&self, storages: &SortedStorages, slots_per_epoch: Option) { - if let Some(slots_per_epoch) = slots_per_epoch { - let max = storages.max_slot_inclusive(); - let acceptable_straggler_slot_count = 100; // do nothing special for these old stores which will likely get cleaned up shortly - let sub = slots_per_epoch + acceptable_straggler_slot_count; - let in_epoch_range_start = max.saturating_sub(sub); - for (slot, storages) in storages.iter_range(..in_epoch_range_start) { - if let Some(storages) = storages { - storages.iter().for_each(|store| { - self.dirty_stores - .insert((slot, store.append_vec_id()), store.clone()); - }); - } + /// add all stores older than slots_per_epoch to dirty_stores so clean visits these slots + fn mark_old_slots_as_dirty(&self, storages: &SortedStorages, slots_per_epoch: Slot) { + let max = storages.max_slot_inclusive(); + let acceptable_straggler_slot_count = 100; // do nothing special for these old stores which will likely get cleaned up shortly + let sub = slots_per_epoch + acceptable_straggler_slot_count; + let in_epoch_range_start = max.saturating_sub(sub); + for (slot, storages) in storages.iter_range(..in_epoch_range_start) { + if let Some(storages) = storages { + storages.iter().for_each(|store| { + self.dirty_stores + .insert((slot, store.append_vec_id()), store.clone()); + }); } } } @@ -6888,7 +6886,7 @@ impl AccountsDb { stats.oldest_root = storages.range().start; - self.mark_old_slots_as_dirty(storages, Some(config.epoch_schedule.slots_per_epoch)); + self.mark_old_slots_as_dirty(storages, config.epoch_schedule.slots_per_epoch); let (num_hash_scan_passes, bins_per_pass) = Self::bins_per_pass(self.num_hash_scan_passes); let use_bg_thread_pool = config.use_bg_thread_pool; From 331fb3270fd8fa292f0d6f1fb2fb95b6fd60d9d6 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Tue, 30 Aug 2022 00:33:30 +0000 Subject: [PATCH 077/465] cli: Require `--bypass-warning` flag to close program accounts (backport #27108) (#27457) cli: Require `--bypass-warning` flag to close program accounts (#27108) * cli: Display warning when closing program accounts * Fix parsing tests (cherry picked from commit bcff977f4c261e71c8ad5476082f9e36c2915793) Co-authored-by: Justin Starry --- cli/src/program.rs | 46 ++++++++++++++++++++++++++++++++++++++++++++ cli/tests/program.rs | 22 ++++++++++++++++++++- 2 files changed, 67 insertions(+), 1 deletion(-) diff --git a/cli/src/program.rs b/cli/src/program.rs index cc4285e9e6b3df..c90eeb9c27669d 100644 --- a/cli/src/program.rs +++ b/cli/src/program.rs @@ -60,6 +60,11 @@ use { }, }; +pub const CLOSE_PROGRAM_WARNING: &str = "WARNING! \ +Closed programs cannot be recreated at the same program id. \ +Once a program is closed, it can never be invoked again. \ +To proceed with closing, rerun the `close` command with the `--bypass-warning` flag"; + #[derive(Debug, PartialEq, Eq)] pub enum ProgramCliCommand { Deploy { @@ -109,6 +114,7 @@ pub enum ProgramCliCommand { recipient_pubkey: Pubkey, authority_index: SignerIndex, use_lamports_unit: bool, + bypass_warning: bool, }, } @@ -386,6 +392,12 @@ impl ProgramSubCommands for App<'_, '_> { .long("lamports") .takes_value(false) .help("Display balance in lamports instead of SOL"), + ) + .arg( + Arg::with_name("bypass_warning") + .long("bypass-warning") + .takes_value(false) + .help("Bypass the permanent program closure warning"), ), ) ) @@ -674,6 +686,7 @@ pub fn parse_program_subcommand( recipient_pubkey, authority_index: signer_info.index_of(authority_pubkey).unwrap(), use_lamports_unit: matches.is_present("lamports"), + bypass_warning: matches.is_present("bypass_warning"), }), signers: signer_info.signers, } @@ -781,6 +794,7 @@ pub fn process_program_subcommand( recipient_pubkey, authority_index, use_lamports_unit, + bypass_warning, } => process_close( &rpc_client, config, @@ -788,6 +802,7 @@ pub fn process_program_subcommand( *recipient_pubkey, *authority_index, *use_lamports_unit, + *bypass_warning, ), } } @@ -1553,6 +1568,7 @@ fn process_close( recipient_pubkey: Pubkey, authority_index: SignerIndex, use_lamports_unit: bool, + bypass_warning: bool, ) -> ProcessResult { let authority_signer = config.signers[authority_index]; @@ -1615,6 +1631,9 @@ fn process_close( ) .into()) } else { + if !bypass_warning { + return Err(String::from(CLOSE_PROGRAM_WARNING).into()); + } close( rpc_client, config, @@ -3010,6 +3029,30 @@ mod tests { recipient_pubkey: default_keypair.pubkey(), authority_index: 0, use_lamports_unit: false, + bypass_warning: false, + }), + signers: vec![read_keypair_file(&keypair_file).unwrap().into()], + } + ); + + // with bypass-warning + write_keypair_file(&authority_keypair, &authority_keypair_file).unwrap(); + let test_command = test_commands.clone().get_matches_from(vec![ + "test", + "program", + "close", + &buffer_pubkey.to_string(), + "--bypass-warning", + ]); + assert_eq!( + parse_command(&test_command, &default_signer, &mut None).unwrap(), + CliCommandInfo { + command: CliCommand::Program(ProgramCliCommand::Close { + account_pubkey: Some(buffer_pubkey), + recipient_pubkey: default_keypair.pubkey(), + authority_index: 0, + use_lamports_unit: false, + bypass_warning: true, }), signers: vec![read_keypair_file(&keypair_file).unwrap().into()], } @@ -3033,6 +3076,7 @@ mod tests { recipient_pubkey: default_keypair.pubkey(), authority_index: 1, use_lamports_unit: false, + bypass_warning: false, }), signers: vec![ read_keypair_file(&keypair_file).unwrap().into(), @@ -3058,6 +3102,7 @@ mod tests { recipient_pubkey, authority_index: 0, use_lamports_unit: false, + bypass_warning: false, }), signers: vec![read_keypair_file(&keypair_file).unwrap().into(),], } @@ -3079,6 +3124,7 @@ mod tests { recipient_pubkey: default_keypair.pubkey(), authority_index: 0, use_lamports_unit: true, + bypass_warning: false, }), signers: vec![read_keypair_file(&keypair_file).unwrap().into(),], } diff --git a/cli/tests/program.rs b/cli/tests/program.rs index 6dbae5cefc812b..315e9213f0442c 100644 --- a/cli/tests/program.rs +++ b/cli/tests/program.rs @@ -1,9 +1,10 @@ #![allow(clippy::integer_arithmetic)] + use { serde_json::Value, solana_cli::{ cli::{process_command, CliCommand, CliConfig}, - program::ProgramCliCommand, + program::{ProgramCliCommand, CLOSE_PROGRAM_WARNING}, }, solana_cli_output::OutputFormat, solana_client::rpc_client::RpcClient, @@ -638,13 +639,30 @@ fn test_cli_program_close_program() { let programdata_lamports = close_account.lamports; let recipient_pubkey = Pubkey::new_unique(); config.signers = vec![&keypair, &upgrade_authority]; + + // Close without --bypass-warning flag + config.command = CliCommand::Program(ProgramCliCommand::Close { + account_pubkey: Some(program_keypair.pubkey()), + recipient_pubkey, + authority_index: 1, + use_lamports_unit: false, + bypass_warning: false, + }); + assert_eq!( + process_command(&config).unwrap_err().to_string(), + CLOSE_PROGRAM_WARNING.to_string() + ); + + // Close with --bypass-warning flag config.command = CliCommand::Program(ProgramCliCommand::Close { account_pubkey: Some(program_keypair.pubkey()), recipient_pubkey, authority_index: 1, use_lamports_unit: false, + bypass_warning: true, }); process_command(&config).unwrap(); + rpc_client.get_account(&programdata_pubkey).unwrap_err(); let recipient_account = rpc_client.get_account(&recipient_pubkey).unwrap(); assert_eq!(programdata_lamports, recipient_account.lamports); @@ -902,6 +920,7 @@ fn test_cli_program_write_buffer() { recipient_pubkey, authority_index: 1, use_lamports_unit: false, + bypass_warning: false, }); process_command(&config).unwrap(); rpc_client.get_account(&buffer_pubkey).unwrap_err(); @@ -938,6 +957,7 @@ fn test_cli_program_write_buffer() { recipient_pubkey: keypair.pubkey(), authority_index: 0, use_lamports_unit: false, + bypass_warning: false, }); process_command(&config).unwrap(); rpc_client.get_account(&new_buffer_pubkey).unwrap_err(); From 7650bd2ad6feb0f7acca16b9a0da9a7bd9cf87f9 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Tue, 30 Aug 2022 15:36:32 +0000 Subject: [PATCH 078/465] clean_dead_slots_from_accounts_index unrefs correctly (backport #27461) (#27467) clean_dead_slots_from_accounts_index unrefs correctly (#27461) (cherry picked from commit a4b8ab2f590ca4d257e9c00e5320ce1aa1732177) Co-authored-by: Jeff Washington (jwash) --- runtime/src/accounts_db.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/runtime/src/accounts_db.rs b/runtime/src/accounts_db.rs index c0ffb435896ac0..4745b567e7394c 100644 --- a/runtime/src/accounts_db.rs +++ b/runtime/src/accounts_db.rs @@ -7478,7 +7478,7 @@ impl AccountsDb { let mut accounts_index_root_stats = AccountsIndexRootsStats::default(); let mut measure = Measure::start("unref_from_storage"); if let Some(purged_stored_account_slots) = purged_stored_account_slots { - let len = purged_stored_account_slots.len(); + let len = purged_slot_pubkeys.len(); const BATCH_SIZE: usize = 10_000; let batches = 1 + (len / BATCH_SIZE); self.thread_pool_clean.install(|| { From baa33d37844625c0676ad72767d1d0d1f1a61046 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Tue, 30 Aug 2022 20:32:26 +0000 Subject: [PATCH 079/465] Fix test_bench_tps_local_cluster_solana (backport #27448) (#27477) Fix test_bench_tps_local_cluster_solana (#27448) * Fix test_bench_tps_local_cluster_solana * Remove #[ignore] annotations from dos tests (which are also fixed by this change) * Remove #[ignore] annotations from local cluster tests (which are also fixed by this change) (cherry picked from commit 4aa2a42cc728460289440de208968281c2a9fd4d) Co-authored-by: Will Hickey --- bench-tps/tests/bench_tps.rs | 1 - dos/src/main.rs | 2 -- gossip/src/cluster_info.rs | 2 +- local-cluster/tests/local_cluster.rs | 2 -- local-cluster/tests/local_cluster_slow_2.rs | 1 - 5 files changed, 1 insertion(+), 7 deletions(-) diff --git a/bench-tps/tests/bench_tps.rs b/bench-tps/tests/bench_tps.rs index a3c4bcfc986cec..6d1c32b47a2629 100644 --- a/bench-tps/tests/bench_tps.rs +++ b/bench-tps/tests/bench_tps.rs @@ -129,7 +129,6 @@ fn test_bench_tps_test_validator(config: Config) { #[test] #[serial] -#[ignore] fn test_bench_tps_local_cluster_solana() { test_bench_tps_local_cluster(Config { tx_count: 100, diff --git a/dos/src/main.rs b/dos/src/main.rs index baadc5c0016388..fa75fe90b79435 100644 --- a/dos/src/main.rs +++ b/dos/src/main.rs @@ -1185,13 +1185,11 @@ pub mod test { } #[test] - #[ignore] fn test_dos_with_blockhash_and_payer() { run_dos_with_blockhash_and_payer(/*tpu_use_quic*/ false) } #[test] - #[ignore] fn test_dos_with_blockhash_and_payer_and_quic() { run_dos_with_blockhash_and_payer(/*tpu_use_quic*/ true) } diff --git a/gossip/src/cluster_info.rs b/gossip/src/cluster_info.rs index a60003355c9381..0b547765bdc98e 100644 --- a/gossip/src/cluster_info.rs +++ b/gossip/src/cluster_info.rs @@ -2755,7 +2755,7 @@ impl Node { Self::new_localhost_with_pubkey(&pubkey) } pub fn new_localhost_with_pubkey(pubkey: &Pubkey) -> Self { - let bind_ip_addr = IpAddr::V4(Ipv4Addr::new(0, 0, 0, 0)); + let bind_ip_addr = IpAddr::V4(Ipv4Addr::new(127, 0, 0, 1)); let port_range = (1024, 65535); let ((_tpu_port, tpu), (_tpu_quic_port, tpu_quic)) = bind_two_in_range_with_offset(bind_ip_addr, port_range, QUIC_PORT_OFFSET).unwrap(); diff --git a/local-cluster/tests/local_cluster.rs b/local-cluster/tests/local_cluster.rs index 6fad4c541c47c8..782cae76b543b1 100644 --- a/local-cluster/tests/local_cluster.rs +++ b/local-cluster/tests/local_cluster.rs @@ -312,7 +312,6 @@ fn test_two_unbalanced_stakes() { #[test] #[serial] -#[ignore] fn test_forwarding() { solana_logger::setup_with_default(RUST_LOG_FILTER); // Set up a cluster where one node is never the leader, so all txs sent to this node @@ -1230,7 +1229,6 @@ fn test_incremental_snapshot_download_with_crossing_full_snapshot_interval_at_st #[allow(unused_attributes)] #[test] #[serial] -#[ignore] fn test_snapshot_restart_tower() { solana_logger::setup_with_default(RUST_LOG_FILTER); // First set up the cluster with 2 nodes diff --git a/local-cluster/tests/local_cluster_slow_2.rs b/local-cluster/tests/local_cluster_slow_2.rs index d6d315ed0d46d8..6488ddea1e0e57 100644 --- a/local-cluster/tests/local_cluster_slow_2.rs +++ b/local-cluster/tests/local_cluster_slow_2.rs @@ -201,7 +201,6 @@ fn test_leader_failure_4() { #[test] #[serial] -#[ignore] fn test_ledger_cleanup_service() { solana_logger::setup_with_default(RUST_LOG_FILTER); error!("test_ledger_cleanup_service"); From 192a4c2b4805a94bbb202d52909ca4d6f5e9bb02 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Tue, 30 Aug 2022 20:50:36 +0000 Subject: [PATCH 080/465] `solana-validator exit`: Wait for first incremental snapshot after a full snapshot before restarting (backport #27471) (#27478) Wait for first incremental snapshot after a full snapshot before restarting (cherry picked from commit 574097f6400d7e6da018b71d266716181bbbd9ef) Co-authored-by: Michael Vines --- validator/src/main.rs | 28 +++++++++++++++++++++++----- 1 file changed, 23 insertions(+), 5 deletions(-) diff --git a/validator/src/main.rs b/validator/src/main.rs index ae039919c91538..8f8f010599c33b 100644 --- a/validator/src/main.rs +++ b/validator/src/main.rs @@ -164,8 +164,16 @@ fn wait_for_restart_window( let progress_bar = new_spinner_progress_bar(); let monitor_start_time = SystemTime::now(); + + let mut seen_incremential_snapshot = false; loop { let snapshot_slot_info = rpc_client.get_highest_snapshot_slot().ok(); + let snapshot_slot_info_has_incremential = snapshot_slot_info + .as_ref() + .map(|snapshot_slot_info| snapshot_slot_info.incremental.is_some()) + .unwrap_or_default(); + seen_incremential_snapshot |= snapshot_slot_info_has_incremential; + let epoch_info = rpc_client.get_epoch_info_with_commitment(CommitmentConfig::processed())?; let healthy = rpc_client.get_health().ok().is_some(); let delinquent_stake_percentage = { @@ -294,16 +302,16 @@ fn wait_for_restart_window( } }; - let snapshot_slot = snapshot_slot_info.map(|snapshot_slot_info| { - snapshot_slot_info - .incremental - .unwrap_or(snapshot_slot_info.full) - }); match in_leader_schedule_hole { Ok(_) => { if skip_new_snapshot_check { break; // Restart! } + let snapshot_slot = snapshot_slot_info.map(|snapshot_slot_info| { + snapshot_slot_info + .incremental + .unwrap_or(snapshot_slot_info.full) + }); if restart_snapshot == None { restart_snapshot = snapshot_slot; } @@ -313,6 +321,16 @@ fn wait_for_restart_window( >= (max_delinquency_percentage as f64 / 100.) { style("Delinquency too high").red().to_string() + } else if seen_incremential_snapshot && !snapshot_slot_info_has_incremential + { + // Restarts using just a full snapshot will put the node significantly + // further behind than if an incremental snapshot is also used, as full + // snapshots are larger and take much longer to create. + // + // Therefore if the node just created a new full snapshot, wait a + // little longer until it creates the first incremental snapshot for + // the full snapshot. + "Waiting for incremental snapshot".to_string() } else { break; // Restart! } From d1b51f7f68e40213b598b8a20bf3679032480b9f Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Wed, 31 Aug 2022 03:09:26 +0000 Subject: [PATCH 081/465] zk-token-sdk: use constant-time msm for inner product proof generation (backport #27355) (#27489) zk-token-sdk: use constant-time msm for inner product proof generation (#27355) (cherry picked from commit 19fc4fcbf8ba7bb4e35453f3845ae8b2b1283a6e) Co-authored-by: samkim-crypto --- zk-token-sdk/src/range_proof/inner_product.rs | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/zk-token-sdk/src/range_proof/inner_product.rs b/zk-token-sdk/src/range_proof/inner_product.rs index 45df5d39b9bc6d..38af9d6edc260c 100644 --- a/zk-token-sdk/src/range_proof/inner_product.rs +++ b/zk-token-sdk/src/range_proof/inner_product.rs @@ -7,7 +7,7 @@ use { curve25519_dalek::{ ristretto::{CompressedRistretto, RistrettoPoint}, scalar::Scalar, - traits::VartimeMultiscalarMul, + traits::{MultiscalarMul, VartimeMultiscalarMul}, }, merlin::Transcript, std::borrow::Borrow, @@ -85,7 +85,7 @@ impl InnerProductProof { let c_L = util::inner_product(a_L, b_R); let c_R = util::inner_product(a_R, b_L); - let L = RistrettoPoint::vartime_multiscalar_mul( + let L = RistrettoPoint::multiscalar_mul( a_L.iter() .zip(G_factors[n..2 * n].iter()) .map(|(a_L_i, g)| a_L_i * g) @@ -99,7 +99,7 @@ impl InnerProductProof { ) .compress(); - let R = RistrettoPoint::vartime_multiscalar_mul( + let R = RistrettoPoint::multiscalar_mul( a_R.iter() .zip(G_factors[0..n].iter()) .map(|(a_R_i, g)| a_R_i * g) @@ -125,11 +125,11 @@ impl InnerProductProof { for i in 0..n { a_L[i] = a_L[i] * u + u_inv * a_R[i]; b_L[i] = b_L[i] * u_inv + u * b_R[i]; - G_L[i] = RistrettoPoint::vartime_multiscalar_mul( + G_L[i] = RistrettoPoint::multiscalar_mul( &[u_inv * G_factors[i], u * G_factors[n + i]], &[G_L[i], G_R[i]], ); - H_L[i] = RistrettoPoint::vartime_multiscalar_mul( + H_L[i] = RistrettoPoint::multiscalar_mul( &[u * H_factors[i], u_inv * H_factors[n + i]], &[H_L[i], H_R[i]], ) @@ -151,13 +151,13 @@ impl InnerProductProof { let c_L = util::inner_product(a_L, b_R); let c_R = util::inner_product(a_R, b_L); - let L = RistrettoPoint::vartime_multiscalar_mul( + let L = RistrettoPoint::multiscalar_mul( a_L.iter().chain(b_R.iter()).chain(iter::once(&c_L)), G_R.iter().chain(H_L.iter()).chain(iter::once(Q)), ) .compress(); - let R = RistrettoPoint::vartime_multiscalar_mul( + let R = RistrettoPoint::multiscalar_mul( a_R.iter().chain(b_L.iter()).chain(iter::once(&c_R)), G_L.iter().chain(H_R.iter()).chain(iter::once(Q)), ) @@ -175,8 +175,8 @@ impl InnerProductProof { for i in 0..n { a_L[i] = a_L[i] * u + u_inv * a_R[i]; b_L[i] = b_L[i] * u_inv + u * b_R[i]; - G_L[i] = RistrettoPoint::vartime_multiscalar_mul(&[u_inv, u], &[G_L[i], G_R[i]]); - H_L[i] = RistrettoPoint::vartime_multiscalar_mul(&[u, u_inv], &[H_L[i], H_R[i]]); + G_L[i] = RistrettoPoint::multiscalar_mul(&[u_inv, u], &[G_L[i], G_R[i]]); + H_L[i] = RistrettoPoint::multiscalar_mul(&[u, u_inv], &[H_L[i], H_R[i]]); } a = a_L; From 0278dcff62b11b7cc51aeb54d19473435009e296 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Wed, 31 Aug 2022 03:19:55 +0000 Subject: [PATCH 082/465] zk-token-sdk: remove non-constant time assign for fee_proof transcript (backport #27354) (#27488) zk-token-sdk: remove non-constant time assign for fee_proof transcript (#27354) (cherry picked from commit 804dfe0f1ac93f81114cc8324a0fa53dc07f8c04) Co-authored-by: samkim-crypto --- zk-token-sdk/src/sigma_proofs/fee_proof.rs | 40 +++++++++++++--------- 1 file changed, 24 insertions(+), 16 deletions(-) diff --git a/zk-token-sdk/src/sigma_proofs/fee_proof.rs b/zk-token-sdk/src/sigma_proofs/fee_proof.rs index bb9342da6d0bc2..9445b5576144e6 100644 --- a/zk-token-sdk/src/sigma_proofs/fee_proof.rs +++ b/zk-token-sdk/src/sigma_proofs/fee_proof.rs @@ -40,6 +40,9 @@ impl FeeSigmaProof { /// Creates a fee sigma proof assuming that the committed fee is greater than the maximum fee /// bound. /// + /// Note: the proof is generated twice via `create_proof_fee_above_max` and + /// `create_proof_fee_below_max` to enforce constant time execution. + /// /// * `(fee_amount, fee_commitment, fee_opening)` - The amount, Pedersen commitment, and /// opening of the transfer fee /// * `(delta_fee, delta_commitment, delta_opening)` - The amount, Pedersen commitment, and @@ -76,24 +79,29 @@ impl FeeSigmaProof { let below_max = u64::ct_gt(&max_fee, &fee_amount); - // conditionally assign transcript; transcript is not conditionally selectable - if bool::from(below_max) { - *transcript = transcript_fee_below_max; - } else { - *transcript = transcript_fee_above_max; - } + // choose one of `proof_fee_above_max` or `proof_fee_below_max` according to whether the + // fee amount surpasses max fee + let fee_max_proof = FeeMaxProof::conditional_select( + &proof_fee_above_max.fee_max_proof, + &proof_fee_below_max.fee_max_proof, + below_max, + ); + + let fee_equality_proof = FeeEqualityProof::conditional_select( + &proof_fee_above_max.fee_equality_proof, + &proof_fee_below_max.fee_equality_proof, + below_max, + ); + + transcript.append_point(b"Y_max_proof", &fee_max_proof.Y_max_proof); + transcript.append_point(b"Y_delta", &fee_equality_proof.Y_delta); + transcript.append_point(b"Y_claimed", &fee_equality_proof.Y_claimed); + transcript.challenge_scalar(b"c"); + transcript.challenge_scalar(b"w"); Self { - fee_max_proof: FeeMaxProof::conditional_select( - &proof_fee_above_max.fee_max_proof, - &proof_fee_below_max.fee_max_proof, - below_max, - ), - fee_equality_proof: FeeEqualityProof::conditional_select( - &proof_fee_above_max.fee_equality_proof, - &proof_fee_below_max.fee_equality_proof, - below_max, - ), + fee_max_proof, + fee_equality_proof, } } From 2a738d57a06bc1b762352502cb00b6fd191df41f Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Wed, 31 Aug 2022 03:42:01 +0000 Subject: [PATCH 083/465] zk-token-sdk: constant time equality check for elgamal and aes key derivation (backport #27364) (#27491) zk-token-sdk: constant time equality check for elgamal and aes key derivation (#27364) zk-token-sdk: use constant time equality check for elgamal and aes key derivation (cherry picked from commit 5e8b8abd84bb09e3141983836cfcb615a7e5e349) Co-authored-by: samkim-crypto --- zk-token-sdk/src/encryption/auth_encryption.rs | 3 ++- zk-token-sdk/src/encryption/elgamal.rs | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/zk-token-sdk/src/encryption/auth_encryption.rs b/zk-token-sdk/src/encryption/auth_encryption.rs index 02c1478a4c3f8c..86fa7376904878 100644 --- a/zk-token-sdk/src/encryption/auth_encryption.rs +++ b/zk-token-sdk/src/encryption/auth_encryption.rs @@ -16,6 +16,7 @@ use { signer::{Signer, SignerError}, }, std::{convert::TryInto, fmt}, + subtle::ConstantTimeEq, zeroize::Zeroize, }; @@ -71,7 +72,7 @@ impl AeKey { // Some `Signer` implementations return the default signature, which is not suitable for // use as key material - if signature == Signature::default() { + if bool::from(signature.as_ref().ct_eq(Signature::default().as_ref())) { Err(SignerError::Custom("Rejecting default signature".into())) } else { Ok(AeKey(signature.as_ref()[..16].try_into().unwrap())) diff --git a/zk-token-sdk/src/encryption/elgamal.rs b/zk-token-sdk/src/encryption/elgamal.rs index e49454c2a947e8..c205bb4824fcdc 100644 --- a/zk-token-sdk/src/encryption/elgamal.rs +++ b/zk-token-sdk/src/encryption/elgamal.rs @@ -166,7 +166,7 @@ impl ElGamalKeypair { // Some `Signer` implementations return the default signature, which is not suitable for // use as key material - if signature == Signature::default() { + if bool::from(signature.as_ref().ct_eq(Signature::default().as_ref())) { return Err(SignerError::Custom("Rejecting default signature".into())); } From 39a578734695c543416a2664a8552976157b855d Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Wed, 31 Aug 2022 03:54:07 +0000 Subject: [PATCH 084/465] zk-token-sdk:add length checks (backport #27389) (#27492) zk-token-sdk:add length checks (#27389) * zk-token-sdk: add length check for ristretto encodings * zk-token-sdk: add type check for sigma proofs (cherry picked from commit 4c944931c521b53b757b1be52a23fa51b69a1b59) Co-authored-by: samkim-crypto --- zk-token-sdk/src/encryption/elgamal.rs | 36 ++++++++++++------- zk-token-sdk/src/encryption/pedersen.rs | 4 +++ .../src/sigma_proofs/equality_proof.rs | 8 +++++ zk-token-sdk/src/sigma_proofs/fee_proof.rs | 4 +++ .../src/sigma_proofs/validity_proof.rs | 4 +++ .../src/sigma_proofs/zero_balance_proof.rs | 4 +++ 6 files changed, 48 insertions(+), 12 deletions(-) diff --git a/zk-token-sdk/src/encryption/elgamal.rs b/zk-token-sdk/src/encryption/elgamal.rs index c205bb4824fcdc..928844e3f1ac83 100644 --- a/zk-token-sdk/src/encryption/elgamal.rs +++ b/zk-token-sdk/src/encryption/elgamal.rs @@ -18,7 +18,6 @@ use { discrete_log::DiscreteLog, pedersen::{Pedersen, PedersenCommitment, PedersenOpening, G, H}, }, - arrayref::{array_ref, array_refs}, core::ops::{Add, Mul, Sub}, curve25519_dalek::{ ristretto::{CompressedRistretto, RistrettoPoint}, @@ -195,8 +194,12 @@ impl ElGamalKeypair { } pub fn from_bytes(bytes: &[u8]) -> Option { + if bytes.len() != 64 { + return None; + } + Some(Self { - public: ElGamalPubkey::from_bytes(bytes[..32].try_into().ok()?)?, + public: ElGamalPubkey::from_bytes(&bytes[..32])?, secret: ElGamalSecretKey::from_bytes(bytes[32..].try_into().ok()?)?, }) } @@ -276,7 +279,11 @@ impl ElGamalPubkey { self.0.compress().to_bytes() } - pub fn from_bytes(bytes: &[u8; 32]) -> Option { + pub fn from_bytes(bytes: &[u8]) -> Option { + if bytes.len() != 32 { + return None; + } + Some(ElGamalPubkey( CompressedRistretto::from_slice(bytes).decompress()?, )) @@ -375,8 +382,11 @@ impl ElGamalSecretKey { self.0.to_bytes() } - pub fn from_bytes(bytes: [u8; 32]) -> Option { - Scalar::from_canonical_bytes(bytes).map(ElGamalSecretKey) + pub fn from_bytes(bytes: &[u8]) -> Option { + match bytes.try_into() { + Ok(bytes) => Scalar::from_canonical_bytes(bytes).map(ElGamalSecretKey), + _ => None, + } } } @@ -431,15 +441,13 @@ impl ElGamalCiphertext { } pub fn from_bytes(bytes: &[u8]) -> Option { - let bytes = array_ref![bytes, 0, 64]; - let (commitment, handle) = array_refs![bytes, 32, 32]; - - let commitment = CompressedRistretto::from_slice(commitment).decompress()?; - let handle = CompressedRistretto::from_slice(handle).decompress()?; + if bytes.len() != 64 { + return None; + } Some(ElGamalCiphertext { - commitment: PedersenCommitment(commitment), - handle: DecryptHandle(handle), + commitment: PedersenCommitment::from_bytes(&bytes[..32])?, + handle: DecryptHandle::from_bytes(&bytes[32..])?, }) } @@ -549,6 +557,10 @@ impl DecryptHandle { } pub fn from_bytes(bytes: &[u8]) -> Option { + if bytes.len() != 32 { + return None; + } + Some(DecryptHandle( CompressedRistretto::from_slice(bytes).decompress()?, )) diff --git a/zk-token-sdk/src/encryption/pedersen.rs b/zk-token-sdk/src/encryption/pedersen.rs index 345809317dcbe9..bfa9d28018d770 100644 --- a/zk-token-sdk/src/encryption/pedersen.rs +++ b/zk-token-sdk/src/encryption/pedersen.rs @@ -176,6 +176,10 @@ impl PedersenCommitment { } pub fn from_bytes(bytes: &[u8]) -> Option { + if bytes.len() != 32 { + return None; + } + Some(PedersenCommitment( CompressedRistretto::from_slice(bytes).decompress()?, )) diff --git a/zk-token-sdk/src/sigma_proofs/equality_proof.rs b/zk-token-sdk/src/sigma_proofs/equality_proof.rs index f3f4feffdead37..79df896cec2a79 100644 --- a/zk-token-sdk/src/sigma_proofs/equality_proof.rs +++ b/zk-token-sdk/src/sigma_proofs/equality_proof.rs @@ -205,6 +205,10 @@ impl CtxtCommEqualityProof { } pub fn from_bytes(bytes: &[u8]) -> Result { + if bytes.len() != 192 { + return Err(EqualityProofError::Format); + } + let bytes = array_ref![bytes, 0, 192]; let (Y_0, Y_1, Y_2, z_s, z_x, z_r) = array_refs![bytes, 32, 32, 32, 32, 32, 32]; @@ -424,6 +428,10 @@ impl CtxtCtxtEqualityProof { } pub fn from_bytes(bytes: &[u8]) -> Result { + if bytes.len() != 224 { + return Err(EqualityProofError::Format); + } + let bytes = array_ref![bytes, 0, 224]; let (Y_0, Y_1, Y_2, Y_3, z_s, z_x, z_r) = array_refs![bytes, 32, 32, 32, 32, 32, 32, 32]; diff --git a/zk-token-sdk/src/sigma_proofs/fee_proof.rs b/zk-token-sdk/src/sigma_proofs/fee_proof.rs index 9445b5576144e6..ff70586bfd9c2d 100644 --- a/zk-token-sdk/src/sigma_proofs/fee_proof.rs +++ b/zk-token-sdk/src/sigma_proofs/fee_proof.rs @@ -360,6 +360,10 @@ impl FeeSigmaProof { } pub fn from_bytes(bytes: &[u8]) -> Result { + if bytes.len() != 256 { + return Err(FeeSigmaProofError::Format); + } + let bytes = array_ref![bytes, 0, 256]; let (Y_max_proof, z_max_proof, c_max_proof, Y_delta, Y_claimed, z_x, z_delta, z_claimed) = array_refs![bytes, 32, 32, 32, 32, 32, 32, 32, 32]; diff --git a/zk-token-sdk/src/sigma_proofs/validity_proof.rs b/zk-token-sdk/src/sigma_proofs/validity_proof.rs index 6084657612c20e..de45beaf0fccec 100644 --- a/zk-token-sdk/src/sigma_proofs/validity_proof.rs +++ b/zk-token-sdk/src/sigma_proofs/validity_proof.rs @@ -193,6 +193,10 @@ impl ValidityProof { } pub fn from_bytes(bytes: &[u8]) -> Result { + if bytes.len() != 160 { + return Err(ValidityProofError::Format); + } + let bytes = array_ref![bytes, 0, 160]; let (Y_0, Y_1, Y_2, z_r, z_x) = array_refs![bytes, 32, 32, 32, 32, 32]; diff --git a/zk-token-sdk/src/sigma_proofs/zero_balance_proof.rs b/zk-token-sdk/src/sigma_proofs/zero_balance_proof.rs index 642e8b57edb923..17c19582a0a11a 100644 --- a/zk-token-sdk/src/sigma_proofs/zero_balance_proof.rs +++ b/zk-token-sdk/src/sigma_proofs/zero_balance_proof.rs @@ -152,6 +152,10 @@ impl ZeroBalanceProof { } pub fn from_bytes(bytes: &[u8]) -> Result { + if bytes.len() != 96 { + return Err(ZeroBalanceProofError::Format); + } + let bytes = array_ref![bytes, 0, 96]; let (Y_P, Y_D, z) = array_refs![bytes, 32, 32, 32]; From de92adcd8c3ac97fde89414aaf39595bc43c3934 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Wed, 31 Aug 2022 08:32:39 +0000 Subject: [PATCH 085/465] Zk token sdk/batch discrete log (backport #27412) (#27493) Zk token sdk/batch discrete log (#27412) * zk-token-sdk: optimize discrete log search with batch compression * zk-token-sdk: include batch size as part of discrete log struct * zk-token-sdk: add a note on discrete log timings * zk-token-sdk: add upper bound on the number of threads * zk-token-sdk: minor * zk-token-sdk: cargo.lock (cherry picked from commit bd88e2a11ca916edfbc9f8f8cd533386df12aae0) Co-authored-by: samkim-crypto --- Cargo.lock | 1 + programs/bpf/Cargo.lock | 1 + zk-token-sdk/Cargo.toml | 1 + .../decode_u32_precomputation_for_G.bincode | Bin 2228232 -> 2228232 bytes zk-token-sdk/src/encryption/discrete_log.rs | 96 +++++++++++++++--- zk-token-sdk/src/errors.rs | 2 + 6 files changed, 86 insertions(+), 15 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index a8d960a6a441fa..8dc6ac70c6a74c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -6575,6 +6575,7 @@ dependencies = [ "cipher 0.4.3", "curve25519-dalek", "getrandom 0.1.16", + "itertools", "lazy_static", "merlin", "num-derive", diff --git a/programs/bpf/Cargo.lock b/programs/bpf/Cargo.lock index 5833374ea60e9a..622dadd194d6fa 100644 --- a/programs/bpf/Cargo.lock +++ b/programs/bpf/Cargo.lock @@ -5847,6 +5847,7 @@ dependencies = [ "cipher 0.4.3", "curve25519-dalek", "getrandom 0.1.14", + "itertools", "lazy_static", "merlin", "num-derive", diff --git a/zk-token-sdk/Cargo.toml b/zk-token-sdk/Cargo.toml index 4691e7d51a3505..81679cb8268d54 100644 --- a/zk-token-sdk/Cargo.toml +++ b/zk-token-sdk/Cargo.toml @@ -22,6 +22,7 @@ byteorder = "1" cipher = "0.4" curve25519-dalek = { version = "3.2.1", features = ["serde"] } getrandom = { version = "0.1", features = ["dummy"] } +itertools = "0.10.3" lazy_static = "1.4.0" merlin = "3" rand = "0.7" diff --git a/zk-token-sdk/src/encryption/decode_u32_precomputation_for_G.bincode b/zk-token-sdk/src/encryption/decode_u32_precomputation_for_G.bincode index 7be1353b3e5ff659d14647bce3e0cfd217baba97..f8aaaa937e8190118e763a949d5a38ffe2e52b8c 100644 GIT binary patch delta 1509825 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�NfUhV>O&6(C6}u+T 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%0DS6ov(!Ze-pp)`HqDWM$!*XdoaN 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
g?aCeQlo+6S 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 z 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�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

=-APZf0QSo@7-7~n}~1dw*2h6 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°SZc0)cjgzJS*s!nGP9uSgtJyeZ1(nGo77-g{nT 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 z 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⩔8CF7J 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/XuglPTa(uEyLU1TIcf1U4MLy( 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

z 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 delta 1507647 zcmWh!bySpZ6NRO_8)3nvL%O@WrCYkCL0~EAu9udUZc##78tM4aU6P`Jb5dX~*=(+;&|=yRR)j_6w@${0Z-)JAtf5Z)YSh2Q zFOMuxK72w(>c!dka+7qA>aa8at#{sSHLqz(awhVJRvV6IjgBAWprOz>2 z5OwE#TCx3M$7NWH2G1tIdij&AY1q+kqS$o*FmIYZAv(L{)tekfPWYJsKAXbpwVZ^9 zs7~Th*Q7Qr0P_li5Tf(~xc$U~LP%u*n|yL8ocNE19uD7IC??e5t~@SLyiS8=%0+R! zN2U~Fa8B(!i6xKq;g82065ko?mvf)5w=k5Uugx52q<_Ap5r5w1*IA!S#?1T+t9A)A z$aQC1omtBhuX-< ze%6>Sf!4EFn^>`0k2l0nLJ3M=4Oz;7BSMs<4oGCs9nC)#VJpqJeoc%y#hjj2`Z~xC zC1#uiFPS$p;#1CSwK4MX>2%^7tgW78-Msz{#TsB71rq}j(#M8_2f#6^d~&OPWSke~0fki>i9 zzBTfCu<=N%xNi$l__jf;agR9reyZEk1AN%nP=z$+Z2LwESk@B+yNR2y#EGy#SC4-0 z)2T`0Aa5VOywDxJUU|`PuWB|EoH;+UuzNOPhVwqA9;a7tCF&F^E5(Aw&VFB$GNnS_0I`X-xu}z;oye8nyxuxv)OKPgC{1$2qdyYM&(>}V`>NqGf#(^K- zxn+N8(&7*NajXr-4k@RyoJ*8~RUr5F|269l;MRfpR;ZfLutO=a5!<{kEN`P|gInj1 zIHU5eKo24OV_1Q-xC>c&0AN=@0)-)GL3=*6@Fq#wtCX=5xijp>H=!L|MPqZn(+nVZ zcjHe<-82Ri#t}jlAgo$k8fSFoPBSb7cBYoC1o3`Uk90*?(>hIwJPeZ%TDliIp5;6Y zxry(kyNc=Jb;NW3Vi*|%!zthn9rCEI?Kt{sXG_3h4J{N_@x%-{@LZfI3~@9K4h;6( zfGC}M)CHtelnG=k5kVo3BtVhLD=1{X8erBXfx`2fyPx~J%2?=d6FY*I517&ePn(iZ z;;-p?J3EHp{Pr2b*H~~e}BX?A8%}i#9w|}m0S`Z5u)mij`Wu8 z#_J|=ltEvyoX)kW&WGKe9a+4p1XSEHp)dhKsr=CK4@$8KkA3M#-**xuzd85Ha1fTg zwhiLX+T&fekqZVMMUbIzjq7{WxUPXl7k⩔WTrkxKJ7;rE@K&6N5G*c-On07iBAp z?5n5kOG0YsjbU+lqkNI@S+etdlkfsFKPntg!r_h87v+BGHaL#zlu+q&h2HLDO z=BC1BJ64O}#^f-8D;pAqBU&m6MTR{4RaIc9CgaBROF~xdgqR}76w|5E+J^6~lU&0V zwt&%l*rrl&h|+L=Lh=Z~_tI$0Fs2Xv2chE}8(JSe+NINYLLr8V0GAIA6c*(uqLj#d z*0cJdaWJGm%z>)&tD|AD09T(w(hh*YP#0b z?hUoHm&%_VL}PP)0*a+9(f74a>!m0qSeAx9E z4BWqt*F}{K-6`ZYDf_zg2=IsGc9GOmdRE;qZG z&g;M>*ar3IouY%1uRJgr6>KSU&B-8G?=^$sN&arQV%?EWQjq$H(g>?$L%DsbfR!%

6X}`f>#ng1iH4jgdoP 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�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

VwWGS=JDqcpf6AQdoH&s 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 z

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 B>q1fEo`+-5lPL}jTUW67*u(& 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

Cj(=~PNa@co7xdEF~aFX`^_k# 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

  • 8 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 pS} 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�sQFU(Ic&B0s(^GIwg7(QGd0 zH7vEpcVt0(N%Q?q;Pk69Lq9C2E_^6b$%FaH4AL7k!?gU<>Zc&u`T72`wRKc2@gEd% zy5UkOKzWH+@m+J+7OBd&Q&wVsuC~kZl098|bf;$hau&@*#Gofy~!jG&h{n7L?m8HUeQ@BKrN6nF~ zoFm`kI9Ndh*5@OfRJqNN);sI&#raR2r0Gzr5i@OTI}B`9?1@Sw{zNU)zxbh`7ztS= z4O)klB~r{vYy_5?3SybUa_p=^uy)m;lp)ja{`xtaCaOq}2@a9s0-2Aq)tc#k?39tu zx)vkUHMa-0{RO;;tg;htX6>(-@8?=&l+iSW@C?~< zqook_5`8=V>XoJOxWmgx0cpWt34nm;*wB`(Dyo6?7$bxrgxPfdrVvT%EB7zIT<}ht zy>MJ5vL09@0Izool2h9GHd^DH%jpNy$PZ2_j18mJy$~-QEHC|%_A$TcXm2})8{0P9 zGB~97mQ*6ltAu*TK4;Vtj3C-r#)UoK9FKh353d+t<9@fan z1eiiuhTyOTVNa5Pbth1uX@3z`)gl4QqmT}h{kYdJ&e>J;aL6|&I<0ZqnQwb#tYvc8 zrme)62;(-fI*Y}S`X|+={$Jz$O(++3m-Y#mIZ@<|doCD2C6tvB*dc$g%X#vbYR|76xKpkPmVH*}NypviMFLy?47PQu5_d%nFK;7)mt^@J{*1x)+~%jcljZQRDW zo-VJNO>`cd=a|FqGTMQz!tM{h-B1gWgiD|_83X}sb?^;K%W6YzDQ6sPS(iOYVP14W~6lwXSTvbw~ws{nE}u+alY3G6k2ZOLCI)W%~Ielbims_?Ml zRxJ=*=>#GJT1!G@OwKWxsVE{8&?i7Q3%K)wZtqS|ceJww-!2@Tl&A^*JzM!e7AdW{ zJFSo|cjq<{qnk?uo6;b^_~zz#0rjz_H*Z%_0jXe?&S#9@JClA}D$}dZ8n!OQ!v!8u z0=SU{d0P0mC0Wo8(F_RmEYZfC+N~CppU@xQ!|1GPRCj7y8u5FS^34E?pWp^j{i6Ku zGi;P!b9b~P#R9c~(;-vhnAF$F9&v(1=mJ+m3Vp+~L z{O5Rc1!E>(8y@^&zB8Daoio`NCU9TVo-S4*Ssd}r8Pq%e!NOB))ie|iVsam+wUsKE zT#f#C$~)Dr)U6>M3FDrwialkC{K8@H8TJGT15U&R&=o*X&g37E(*e%BTfHH~?EUEc zewNC!?K{HcRgOF}^A!Aajp&=?FkVIFw4r!W>lXB4bgQX1(=<xn3%9fcSwE91Yd& zduYv5+pe!dboLdHJp_+zZ543Y0iG6FWI#I>hn&j7=B{?jFE?{PG1O)%!_?9*;}_P{ zx*AkP%7NO#>&(L`b`oG%1WQ33*Q^;u){DFyw2@O@niyq-&OUU<(En1NJ8Ll$;mzVX z&KBqapgV$T?2`*15)JAqt!h&NaC;hMJ1J9~9lGfKNYJCnPESI>Hcc_U5sXFeUNJT} zKF~t~hLEL0ldkDtyzbw8@rQv3-e2ctd)TkvGiL_{l7vzD$e2Y#h%R>}^_gqGqMNb)fu%W{Quoj z^kYtaU#D=lIZWMM)t&M5y0g4_%)t)`=FR1Fe{UEjDTuBsAh7^MXwL5d820}qLlJ3>k}(@D>A;{X`Y>V{mg2=HRa_tu}E%wd8Zq@xvUDu?oTq zvp)gaYVf7*NzxkSePvnnpeo4`_kH#VAuQ>oS5T09=_RXf`f)&-3_Dr`XpVtwS_3c2 zZxCVKoc)spnw~BUEYwDUxc)Dq$hKWr7_qNIKZz9BgZ}Br!HEf@>QF6?# z-%d&693R(J(+FJEyEu0#>l~xgKIS-zpLy*0((Bo|9j(-*%(dD3+wHj%Mb_EfrUFPo zV8W|?4!oIwB@+Y#a6SmG;&LpIw+-^dti%C9T(HUZlnP{&gPo8me!%)374-evx@$W= zx>*e}h5d+DfrtM&L+Xcc_Dxfe#GrCk(fqqSzkdkrtQ#l2aC$2}jJ+5xHoQtn{$TZj z#JB1;g5|Wj*=f2qE}#sY1QSU9OO|k_86LjyQYqqE;aH0`W!-($u9+GGbqWS@=}!(D z3`g@6#C5ZV#x}mO`{Y3J$fhUr@HFyI4f5H(-`1CcRDX=fzSHCOazDlXv#8c}x7G*_ zUDMiJKDG)#ml0c)dEU%6w9JoX|LE71_juH92SRj5nq7>Dq9G=8;r_su6BZ(rDh#0f zhZq!JA0r4v8`*g}@0+x|M+K%}mZmMteC9tG5IvR%xo}cH=k$M+WeL6b>YWu%zK0za zJD*$|&-_JcC|@#CMA-88L07uv^D4g}49 z(-5(g+vhK+7V0+(J3RNCt$AIW)BEY(2r)qapbPNwzXZftm8EN&eKiu`V8d3FPunV1 z-&1ZIFW7n{m!P|ZC;RYnu>Kht`*u5)68@((?u-kN#tGhn#4&&%9!P5pqPV2rLWbJ4 zQy12^4w!90rT%B!4Bd0*Npmk?Jhjv{Wp*XfZ*KUDqcE4V@zWS%;af%UNr)MK*>UAB zyEwsr(%u%_x{65dvYI#6X-m-=_0V28Jw45ld zyJ|V=e{xmY!wM%d)U6t(|C+ZIoQ{(P(zGf?IgXy3g=QpYTP8CoT@n)i@&4HGkRC#j zFeR2`I;}0gC;W2n8$$e?)Bi3CogZ5iOMoKxLjcW$ElQxJb-n3MiDY17Y7u*v^6@N$ z!1o6pq_bp3XxWz3+G1GHpm#M#SE;+J z@eJz1w`26t(I4@9KlXMj_08}p&0kLI3g1s<7sY92B79qpeA7D=hX_BgOe=)VAtlA> zqo~mX;=q~q){8lNL(@1KH*pCA@IpbSrVc3@SCE-5jnEs#2196&~j@s9W6d z=`0DIqbV)$n+SDxVn!z+p09Z?NM*OM+epOspNVZhRJM=QKKS{*lnTezF^8&?`-trF zFml_BNnr>&M+2*tpze*Cx9A%T3ulu?(x_5|9pAwHtla3QWjU8gW)-0dK{vP=Hj>)K zVRy;(o0=g1!t0|{t^gcTGJ0xRTCqpWAvY!LWYItxBf!HSWVao_aJDm3smT@1Ra_v& zHRx&=zg`OUH*0QDsf3|M_;sk-Zk+-zF(B-7Y638Ff^k%t3wW{xIUcgAV)4rlHy%}> z)CLN&{92WrSomfYO|fB`QwmCVGs>B4Bpw(O0V|9s;#NCVkKh{HOOzCrlbJir`wzkE za*l!#!C8%JMm1Xjp02_f<%5>ykE*{r5Hs#{=5wrEG~p0AtJm+Bq$eFL69yR0Z~>7q z&?ZXchhH?t>=*5d>cJi**0C!U_@{nv=pSK|78(gop?5F|x@&p;6PmMU(n~c|1*#JR zvzvW+I`Zag%R;u$^lvtjzHeeO6()@&7l>7Ffm;weCkAd>lT4&old=yXb8A90Rnah# z(rxLgSqE45pM1k*DO~rMq$cA2VXxF{EYkvZGcbryohzwwARwlk4#*pWV?9c2eodyT zVMTA67ht_f_EB4r_O_bc*p?*j=VV`Dar;PMZrCo9x{0&7idj-!WNEK$$(H#Bur6)j6ueYR6Q`s2ThIRQ@0R;opY`ZI(9l`ao^)L0- zazTsvir+0e5|;DN1cx;+Zvvu^2#C`0)TCc_KZK^y1S*o( zf6+7@h`%nq($}T$zKR-6Wb0?0@-hU(y&@{j2OwJR$q#CTwO?aAoA__`Ki=AR!0gD$ znVv-qP7c!T8<{Fq2LrX}U=fDuUFIm8DbfYuLg?2QWl}rQkWlb_VL1i$@9Wt2ay552@4J(+V&xM4o%8s*24!1E>2lL9S0@QVmo85z%mmGDck87bL&(y|%3bXvr}^tCxn z$T=xYPngwdmd#$y;e|p-tCyB~2h6{Q*b+obapY2hVP!7lk243AEm4LmGGvgo=%Dw|N3DEzpxNv17niFv*Jlj2Xh8K(K<*dcDycRVj zJM3K8EMpc{SA_??C5^ba^!`sZn$>|6y9|VFCE;QASZxqDHMTwb>@`kAiDKgXiyA*~ zZ|fH|K3wQGk5ct9LwRwj9})(KA}8vo3f?(s1*VH0K-Ctj3bIdp7aqt>(qzn*;OO?a znv@IWeQ!-|b1u4J%GNiL6V9^?Wu-W|FRYPz{|$G65wa8#EL9ya-a1(VX*(DgeDtX1 z4>{OtI63rcJ~>A9qK@?e*XBf40@+y=?49V^Jht=uy)YpRjA(w4xq-%!b@=M|_|ZiF zlEU9<`eFGD=h;NB_`WdOAMOwT`&L0Ab4kKEg|{iK`~>7-`%fj)5xrkcXGvd=qAqmH z=XvU}F|maf)%Bu9?doM~fUI}&*E*)vhPn^qZGBPZ2;N{UZxU&nL z@ZUpWKXibyKWwJ1EMlB*fT}Z?^LZQtjdozYXK}**Ixzt0N@N7IuE0bcQf_4D-o966 ztvIvp?M?oX_0jia07#cXke<{O*b4$jgK#%;YiG`cTI_eg(@ylJaBI-Sjvs~UE#lDq z?&WTuX1}$pvjU`Lz>yTgPkQ2OlU@7n&nuA@uOH|MmfM|0qilf3k22d>yy`wJW!*K6M5Y`!yftO-72ncu9!o-@PrQ2 z3klhY*iQ+Har$^Xgttx4e!t{AEa;c-TZ82G%Cs~6Q~Hl`rsZaqbaPL623jp&SEb>4 zmd(!yi!_Wt4tlzY7;R;y+%^H*Nrmyec}Z%NfDNTX42I;6Y4SYf6wMI$ZAFYoo&0&$ zp2IK_624`0s8mk<`lsTwGj-Ah{ji}ojQ;r2J|p{CHQ-bZb_;Uifv66!oRXCU@cF

    qL#M2Uk=e{@IW1_(g0B)rbta_`!TyHKobX0Uyw50Q(AG@kr zWZx4kOW(Q~3q<yKsLzC;jVqL_R!FwJB~ zE|K`H$}D#kjZ;?(ki&yva?qT1bDE;bxApJ@^9mX>$M&vg4{Ca&aj@b!cJXOGffozM zBdHdo|0#yHM?lDWUqc_#JRqYWjo<1g_^~TGxecI_OxO>}77~6?ngCQOK(J3X87K<^ zyFfbmz{f`LttFZyEpmWWwKA}W4OZ2DAwV1zxZg4JfIDum+UDE^I{m?YuOkXr4S)<> z`8O0fBu}nQ_tZwO$_ZjFx52#6@{Nw7tq)E5eeNPMmAG5*IU?-ahmrBL;mnffymz9~ zeJP7yaN2w-Js7ft7-LD%9OVJq2e6=pGVob1DF2>EHR~2aSwLYSKY-ZJrcq1pE&K;v&e6^<6|gJQa8&;=_~pa6qh+iiHtB$E5%6!tl-oz* zXIAs55e|M`Kqc^w2&mS^JV6Meown=FTv!D^ zPW;e(G?e<|+&`yN;pXcj+^%yEwd6pW9azdJw-u?-nQr?bUos)XhL5B6k}Ankt@y&2 z3dl)``&tc*6i_eXpO@xRINcYR;{{9^5|Dt57_eiGUkBW@f9-!qbT#!nn3#TbQ&gQ??z&BD`IU3?yS>y5qbz4~(Xj+Oz+WjxJClQ&b-jTa*N=O^ z^Z|oNI#t2XH9-HsvB{6(xK9ycPn^D$<&r|+UW=}{O%`EGIn6s?YYKZAdS5I2wc@u4 zJ+>l;%v#-_SPe2RldDFa9%q2`&;QPwv0;l2iwKS+oTvKdH;rKpDWNB)-t$ZdWS^2Q z5XZBsC30N>c60C&E23>J%=Ge2kVD&lPtt|-C}};=mt|WboT~Ibv}ssc2&O}n0r(R@ zG$}{}hy#a!Qa14DDrZ2;Qx8;;foPs} z8s#rLwS8aS6-St{Fv6%uu6(GY4)5;aCrpM`=-8Pn96XA~9&>23vSufBA_(f=Qa|f( zA=vcFbiEYhBhqm2?;PP8bO8Kr5aT*v2P(Mn!FdG(s>hH6KZK_%5O#Sqr*s-&C^il{5clQ(zjeA%9{SD{u ze1!zwHwWQy@p@l&vR^_Nez>(`^=Sk?`5nw8FMkU8%ta@GC}Z&R-dzBR)ZkY~7a$BB zgq5B=0OlC*Ydb1X^#$B)^h$uWKX_|!I%#5m_v>EZfH<@(2p6+N?WL>2dadH^&mRmW z;9s8~_KwdSF1g-GcidIq>U_4|HVtL^rJ{dm^7n3_%eUVn(De($hgN_+47{P#w*iD* zum_>|y)%GLH0Q$~ONNmcdQ7%2zDs+$l`e8hsJcYjce6Bix_`%kUq)cTwb!QDh?bE- z0>dq&pHYPu&sn>SNVgE|AR&=JC6DXWxJ)+G4cv|3f`iw_$&X9VuKEMS;-M3YiVMcHr z3T!9*zb2}{>HxUzio^gmCAb#+hQO*3n10Q>0Gn4}yK9UEXcYn125t#yf;A}SLs5y~ zif4A8xnCWN*kXb@ZpWV4P$@3S8?kVkM{n;E$8#xu-cgXPNiG52+QerY?RH`H4T!q2 z@(`a)Gy*d~dKGM?1%W6x2<0}9Gymit$!o1fu08Aj=ud^-y8s7~gS`@;@f^hHUn3w$ zT}leD7K8Xazo0C)4upyIZfWw@U%Csv16iKkxJvm5oS#bR!aowrPosWo2`PuP$1+9l zVU=4*x$c#Z89=CvQ_n3iHv)V)lB6-&1pJ|pH3+%jLsJ{Oe=FD$*mXH|m;{eQ{72DM zMb)tcLEI%c!9BRUy9al7hu{|6U4ksZgS!Ry;2zxFg9nEoZ{OEFaJXmL-I?j?s_O2) zMsZPiW}~@EU#%w#&Tvun@o%~D4oXG+9ZMxtZZT#M0?LsWf5mule2RPY7dirlaKSt1 zdj#mef#Yw*Cldtj{7_<;5Tgx4y&_Cql3ck*4jupYVk9wAEL$4qQEXVQspOJh;x^v@J%54<8&R1ZI92Im3NC4RZpj_6VTh%E~|I?$c?PSPu3E8BN zR$q;W{xdsq-{|XMfgV9Bp$`C%L4!r4aF04$bB0+VwaJyTlP1SY@zA~lH#YV??~B_k zP#xzSMz*9}yBD4VZd(}bl+5;#QDzcHyQnKGsqEb~tGSb6}&SaltRGoM(f9(evSx035cbJHDWMYXt=}v`m-)Br^Bj-3OI8 z+e9JwYG5n{jJla&09-6szP5>pNhX*?op$;M>SaY#9?EqV2BWkI>x74XutF~Rt5Rja zy9sc60(#pgqSxsJuKtxd>Q!C>#9P#&RY(;ZBl z|AP&*!MEI%40b13+-48yE#kDqacItk&ZGz>cThsEwY2P2&k8cqB9;Qi^uhDXsvl@y z1AAcb{*lgOh81fRmHeCN^Bt}A7nEkR4#cL{gH;1sOaZw#fZe9KNS3_6!05EAbIRPU zg1ukZq6bA%rlC7>y2jP5ynn4C5anHjV1e8qO6Rm@H{^xKPj@lCmnmwo?UwXL6o?%x zL5+vZzuNz!f3yA2n>0X4xfGxq+_WI92F?IN4v>H3r3RY2Ko_D3J8-cJ0%sFvd<5sZ zUA)Ept>ykp=eXNBn*z`a;1Q|xSeu_t6DV&i zwiwD9f2QG=b24}s9S17ye4WvZJ9A|4Mt9o*L}kHL?@bE0cqAjUG0F;&Ex$7I1d@q8 z##S6z(@h1M$XH88@^ViiaMmwE^(6j@)pdQ9nbRHBcK$_>55G1=IQ9J(fuhhA7QP>g z6lIa508f^<#ks9T>zaIx&SjQ>FKl|GKJ^xqE83R*T$1_LQ?iv1H1Ki{MrFat^f(lg zW~CyB?vBUDI%$l-l!7$q4l@xVrO_Pc_67qk^##Bi1|$<8Y_H_Ph&tZ!F4A`OZIie| zR1MAxvk2Yy2Y77%)Q&cuOS#+#%ETZ{Y!EKHGJNhA`iwGmuC+dQSDkoOttu$_b71F)Y|4qb(|uO*h*7d=fO^)I6!|4YZv8A`1n%WK9qNqwG23%Zve zAd&PZr{e`6eS}AZ3Q+>cxIv+HSspm~0hYF-!NxtG{f>VBiee%{6Gw{M<7kr2cDgca zWPPh2xliL>Kxp^N#D?LP3=*Lks^PeP^jmh>u)^YD@p{nrO?yJ_G}b~ctSR6b3uJ56 zpq$6%GEP;HYlPQ}zN8!?>_0H+>g<&96w3W`^iz*}55SlJcmdFWFK#7`<$#7%Lp@*j zxS;)69i5E^~yV?85)qsMkEIXEDKE{i$+PYuX z_b<9EE;BA@&?SFik;ypELRo38CploRQzq`o0u@DcF05VP1I%^VCkE5o2W~VOOXvC! zefPsesXY5NM_xn}dP8)p{zaw2nP{i=j4PVH^EkS27LO(Q=f1`<$sqfEXOK@@%|hj8 zduaK4?dOdzRBCPUjsAx8x_s1ZyC#<6jWz9aVMv4r!EAb&&d}B)tTyWpZFFhgri+fA z?Ud?cM5wSCVE*}kT5=80vjl~0##Z2Y0tBJoI)EY%Foh)%1Dr9y<;|QuC68$^x8K`f z%Z-6u)e@`Pb$1;&gXchz0Kc2ilX<2ul0TKsHqqbDEa03fd_Blf-8?sAdDoY)^;@cd zgAh@|=L;Xclgky3Wwakri_EVfaHfk({mH6o;uZdIw-pRuXF8%%%G5zZ0?KYorF9*TpEhK=X1tvT%+!kB+rs+cZvasI_JUHQS!)V{Aq$4IJ3muHq3Ua)e%|5mR zy=NdSbvFaZU_hB2P6{lj22FXhrW177Pn5z(W~+3r=deTi!>AbOf7=srv(x@Mmuy&j zIdh2sZ+74}cN>9BY_J~IFV}>H>F?Gy}(6=!A8OMO-P3THy{K@vzX0!;~LpMdN< zFi!eq0A749%sSvJivZ#qNXm_A_^c+~#&) zxKw_(#7yHE;1mI$j4v~QQ1bscK+pEAHg7Jzy7T2BBiW|Z)9Bo+COMKQI4sx4%smP> zN?IV4KsNE!{3+@%cLl(Q`{c@%2^|UkFTPRZtGUq$U$%vV4=DA118$k%CoAKh1pkPxXf3PlpmkXdB%~ zGmuXUN}YmO`;D@*!V|k6|NM4VFF}pH;59QymBBGAiK8&<`*xAYv^B+D{avT=M<^N6 zyi^0u1H={NxI02$|KE`BTxUu(BE`&MTL4Wh_^yc{OKxv}`AD@{2lBII1mUW|RP9Tk zhifm3HdQ(D%ImO@{sMr3La-{#RMrqohMIeLVu#IAD^@R+`o59T8>f=zx8N z#awTGKC-+3kvD;5r<1SE6wl_QH4*Yzdrkh0${vzajOjbVmOl_>0KUWH1faJbOtm*{ z0G$Nz-3B?NT=avNc&tfQjLy8?^FS;mKML3<#*?{^eN*>~N+}boFzHdWaGCq3M8)%d z!c?bfa8&&5M{nlis+*1#em5R;O5!Ks{bp)^V@;rJ19V+JT2H-_lPyE0G!IK*o&AK0 z)}XAYKTwQLO0oQIvGlef2Vu+)hzfwm_(bG3j+VUk>{{5<{Ab--K68to-t{PRa{g4d`~LK5Dfl{H;Xl zrw3yGf-0@6C(sQAep(#>FDGEJ5=u-=jtbqkD^8?$1@pSYeBbbIHp8t{Tx_MWe@59j zn_R_nOePc~_Nh9EN#2@YYxBH5%_V=KRyk{T*sjqZ+$ zvlP|q^idl=%?_2fXhG%&^~vLzo|9;};%5)0N|cOS5fs=*po8^E`U-iq7p3&q zlv)SOyYSF#LR<9yWRKx5D|-u1cGI0l*8m0|XvY@zN63)XUQ6S|F56yJT`lPB?xwHS zDnR;Au;XaR$L0l=NTQvD=N1X;I20evdmU5(=wxDUy05bh98T9v{v)keA)Hp$ zSgtf#jCViY+GvalA^Fv-dGWIlGrW*Cy`}~;49}1&9k{P981%{M(8quxE>KnFoaW5o z;>Zd0l3z~RXhtE3hml{lPZ3%yikT{p72dN~mq)cvxljaMO}c>eItVL*@BsW2P{2j8 zNr96FM;(*_tS=y2>x=^+xq`2%Hws9i2b;Cr(`!*P$(-)FsEkx9x^e`im{%nH{M~fr zq_ymp;Z3dUjHvu|Q_LKXG4%)S6fF8`t(2NI{(j1N=YAh+>*SPl8Rrn>DT`9ll#Of_ z?E^p1A^3L@hedv4k607QsoeCg897`=m}a&EH%}(_-```i- zO)T*w{zK1#z;;T%$Y5{|p_kAf#eNqqr{J0PF}BqLNj zNQTalJ{5a3{1k~P{oEv&o@BRmpya!*^~EI}>J?prmuNmEvz|=)T5!N$bCO7PIn=C( z^Nd)_%?)0!mU8&%+uAgM?i>b}uTXAIqEpz_C&+elZ`cg5Hr zZjXVU9tYq@1_`v;>r~ec9-oA$XS!DVGdeG!pcfN7$p_u3BK_fsnd(uHTCQLH<#KFe z&yBBytbZ3W@VUqP-h-Q>Ua?fosdF90y590g0a)Jx^XKN$p~(Up>dRslwo`}D4`)nS zzmSe@Gh0(+b|YSCww;W@i==793ddo)&!?3gO)9-AoP9DfNMeeia!1XA6(D3o`tz7f+L6=3MV1(3~ zJLSI#*YxZwhgM0h2DHF2UQ|#BFjjZVR~NOGkR+_reo82Fi7t0$Lx%sD)diMev4!M3 za6zAz7#L;wvjL@K@EdUk`TdamssF|=P$CX|OqQJvqg7k0HD01qFPU<5m?$ckgd6|@ zH1NMTQ`4%)u?Ptv;F}~d*k*ouRy;Q8Qk5EB>FS?wEo$`FMYuf%QiZ^0R96BJ!GL<@ z$#t)DWbI>5so!v0_Tas6k!nZwmn6&lhFkUm{g}qeV9yF$Ad?5&E$)QCh$T4v!I?*G z>yI8=vbJ}WXZ_dYH0ZsTIPddhvoXb>Y3T9&I#Vlu8>=7Gd^n2TouyJd;fcdAhp_RN z6`WpZC2tE`d68TnoR}DaFcUCpp+o@AyPzYDEE$L@1?^O>c@^4J3zdtzsgM=Kgfj}^ zk_JLXQzjwU7~~W$j=t*;*2uPvHa)zecEwzBm15%0$&#Z8wC9Sq#O^a%8jf0yksQ`v z7Xq+VnA|fBv)?SfV-yhL*=LiAri{XJ^tQc)Y!~c;qc}`}vmFqfovZ*8TwokF;VjFc zD2&s6txh#DQh9ni`N64|I}HExM=`qw>%ypFgo6}J)W<-C_lO^*)<<2^xozbsbrN+H z76viC3bVplq|W}_4tRhhBS@s?y90h&AiL#W0?1l{m?ZTa;C%(xX2uP``xR_|(;bLn zsuT|q$ZhbtM!`zv_rsrj*iY+L%V>$_EjIHU^N!3wh3MH!p2nr;>pU?blP|l}Li^I_ zWJ;zN6Z1y9OH;HIl6fhh2TMj4NU_x(wG@8UiudXKGY|4z`J768t$zb>%VA?l z2$_v=AuaYFuQK$qB{H}JO{aCE$JP4$mFkk}R~bp==Hu^qSw$=mRNQ$<0A&trM5=_3 zZ=*313?}eQc?-ci6rA4=_Pt$4hNb`ZYE$=|B~;kxFVq5BPGHKg*#TTFgWN_@HdXNV zDKx9Og#1e1m_~>=y)pcv%&OkS-eAKZlx+)G!np?sG~3Oex=2L-JnPN@ix{#)I`ueD zmA8ej2P4YmQ>S{tyaZ?o zL7LSr1kfl2_pSUYkP!f$J2g?jqai4J%ucWRC=hLk?o(M2Ihw(cSgq|bEO+~Ay&1Jx zsV;bNz$5$vf)fT>sX>>Hd}*WF@xn8I1+io&TN>I3;B9u@=4xBdrJ2PO zs+wC*WI-xV^;11KCW190A?|0%ft_h+>cXdcqhWRrH8>9%BKK?xFN%rmS?&E>&GI&Z zy$W^guZb>x!-&0ZD9jJ=wJy+JOSIz&tXPuS-3kjaau{)zerL~aznXLSDDoYd0wojV zzEAs@5FThWw6fTGV@Y%xf77wDH&i;PP-!xcMB@lxnzOCZsHC8tlmYP3z)g?I4J4$3 zxFg9Fz_tKCb5nqe8}JBad;rp?LBe-Y7RfA=nts+N&C#qd=2~lV2!U*ox^}(yDUoTe`sbwkH_3AWE=Cq^^e;(LMnOKEAKQvCq4j@7g6pSo>(<4Dr zL2TmM7MyOmEBxG2QdeggUzexh&oXDtnK_fAQCNu3;K#wSV1V8VM-NCE=L~D~hf}{z zvC9rthgMdpm1M3L1fDy=y_ir3_-4Y8QSP7Ah%Iu>U(rgB-5JeOBZiosEr0vM1UW5} zYl5m#Eyu`Rn<5}VP9^!I*fB~_3CuVl2@sE0b#=|0%x7k}KlNqeJ0OO<`zy*x2m_o< z;2e=|{&uTr1y<+h(HaZlijdYVHY82sC*2(OJhcpOm=`JztL{&Y!5H+x+zQ>;l3L~@ zVxzv~7(&_R@!!nGtUk74q1$>n{pv(-GkP*6t2>1;se6B&@DCGTU-5YQOxNbA2Ne*j zLl`fCt9ODa25m&po|vt0^S!+{UV5GGag-XFnnKvG*{Np>BGL`;<0m1r329hXr6SJH zoO+8N)AkcnfoG>Z(ujhjv1={HHuB_sShA}vli%53%ZfLXg&2ddP9mR2DvJH%&J!3M z*1|Vx9Z;kr0Q>B4Y1h3ZfCKjlr>nujL~eCL;U|GM-vwY-I^JY6#iNSz8F*m@LA0m_ z@S*^&bt-4z;wxAq!R{gN=GGUeYd$V7NHR%@>*$&|U*B9uC4&Bikm=_miH*2GG4QAj zI!9>si%43vdZDTx9Cs0$ed!8%1g4u5IVH36jVyO%Ww(A2JLv&2S0I3U%LWke!GR>1 zG${C=`&QzLM+n$CBU|>~aCeb^9tmi#RBGFn>u(v0QGNQfFK#>i`I5-jF_TaSu<`js zwR!Tz_JDl-x`%cGCu7YOtpY%}1f!762Y?D1B(ozhksuG80*(&brdJO8 ziY^=G7r37u8-<@AOp$NS;9*$o;~bP&oq$y_@QtKn0YwyGt;SjK$-)O3`z0zQT2k_2 zAS=vXy|SSspICyxL8UxtfSjL_SXO5v)VZ28JFGKmafZ=p!)CUHbcbwCBQi90k zH`)^~V6+IDDX){V|28sv(bF z0%&W%Ts6ryHFS)CQq3Ex+H(JzT1{jHS)7Ii=6m#}pyirMJvN5!zeS*T6ck^wc@^!f zN9DDk5oJocR!~Vv^YX+;t8D-Mi<$rHUdWH*$i<>$vQ;@4Sgm%}&rjM}j;ZTjPk)DYcAUol96&ZFMG?N z{!gVNM5p5b;}^D6Nai_&LS}BBI*KVOcNxP?I7>dbtA=S ziE(=z5beLyApAMY>cen)$-J_Re4m@nXitA%7C}+F(obAWl=oF($tFx?y6oq%?t@o; z{jW0N#y3lj%j3r6*R-0#8kw0>0x~Md16biBtH*bB1M5{%N_CV(`Gi3BI5wuV`|TO0 zq)Vu^>|%Cw6Ngxu^F4(Uweg+&Z=uWJK$~qIUcu0Qy|#4m^x*WLs0~p5-5&8O0k6Imo6;gX-Z2PSO)MdYcA-%91lbr|-nzJaEz`XCW){8V zDwVQ8C+JrRbl=176cSKltlw1gAvRCdiMcHN$MwVHr%X92WTk}S5+77cc}6npB99Q_ zMwO77(Lnrlvrw&8d;Ti3tDeBeljATEF7);U8fvQD0J9(H67bfdjSE9gA2Dn?x)va~ z_#-ohc3pT+rNDiy&c0{-mdD6zD20Yzd!OyR-Xzt?#80twohZZ^Ago)wn>RopT`l{{ z!6(FUK%VmSP+sLKxs(86WUrA!0-reOWP z@|T-LUn#bMDR#^#66jxm-VGR%XrR)E%ZZ@=Z%m56MvPT>@ZzK{3&WRv2g!mzXU>FP z>hT*d<*fkh_OOxi_5eEB_&aX`f^v;wm(v8khOj5{kffL}d%2!nB|O zX!{`D$w(Z*V~ha-%eek9=Avw*+V5An8bT3s4{$YnZazgd6XEh&34&Z9rI)6i@2YB% zw9Pdx^Qd|&C1F0IvkA;*(bQlkEi?fx(!o@RQ&qY)R&n|xEd$d6qVqAPpY&fLqRxuX zsT^HbKN0QxCN=fKeYp=X8)Pu|vLA->so)N!MrtOqMNeFx4Xi(xEjR6ZDhOQT-2y6k!`*;lFdS zFmq^#&P4o$WZnGUP3oZ~g zH(5M0AR!R+lkKM2uvj8HN3Yl~Du_lvx9W`QXS=%Ce!d&?eLO;2v6U3eFlc_lcV~;4 z%ERk3V(_gL?z=B3(1Vz*=g0W%r<30Fk5c&>I8+4_SZ*j_%oijjI)Cdq2c@(MV3Qge z1s?I*jni>wjzHK-9nH(qeY7V-S4R68?5c*#R!aQzOt?;AZeU&QM{evjM3;*>B@mBVCt3%tIa&R&(Cer%Mq#g3j;xdraY-XsAU>~Me>y*?g<207u zlEFxpz66pYkhk$4?E)pC9)RKkCYMC3KusSSS)fJNhY7`R9#T~!^$;)kX$$Vd;$O1O zT~J-HQm2_HY?)%MsC5u(NPyb6z~p~ZZA6bec1=`M-3(REUvgsXsl}O_=_pZMNDQ-j zR0!N+!cha2_?HW`NQO@lQi+Op{7vzzVjkP2AYlsV+-Ymcyqz(8H(tG9o@GxFB7`D* zz9O4g*{M(XGnYvup7gq=PzzPf*T) z=qgo8K&M6bXOP)X)U{NbGhU@(tyjB?+^;&8)C%i8`c63B4!mK2zUYCIin<=SV~g2K zn5g&@Pg);}U6CM0{hylOlG<$J9tcx~|KJ1s9H8HZCX{z=3vRl2^c9Cg$5oipbuf#- zL{R*jmS$)V@)yiJBy^TJr93e_^Hhy0125FJ$_2CGnCoQTRWDXY>4I>rzpgm6a(f|V zxs)8RyfnR=&b7X3<=S=5`2%)C#0|b3|l z<4&m+`IT+30-TAw`S}YCfRYUEA);8|SQyk;+gBm1+3$^t*(1(=qh>^=3%9xO%}78` zG6K*=xad<1h7t>EyZ?|liXr&uoc+Ay*SbH5uXcS3)+Dk&ica0~ca_5tD?c7l@%+Zc zJD%LWShP4ClSX(!*H0(ERUh7^gIu0cp^S+0?j%f4?AHawfn4dqP2;kz^huqf-Bk<& z*hqm!gqmjpM6p3joe3lg&R;5UT-i=yDEvVX)7B1a$FmvrNJ@w^18X-kc^U@C7_GSf zO!2(n>Gg&G>~WJ#{)+vk(m7p3E`YGWYx z@*_|4}+* zQzI*qhFZsqDnP-XU$W@zEcNrE`2B5t`ZARi#a>eUs&9-6Q7?@~*^#&a$frgJ`w`KT zMLSh7)kjUa-^#ra8HrT}%6$9ToK^4x^eh;iES_jgmD}B@Fv-=~DI3_^AX7u{3A6M} zq$FVdAw=y*?fzZ($^4ykv+hZ1Ii~DaXUG>L=!6H11KQ6%IiHDPd;dN#9u^%dIi3LW z*r0-v3O0l&0mTA~7H~Qqm>^HN1I};Y?~%v=Yz&amNs0lO*T8TieY(mqovlrwh)s}2 ztNr(VCW0M%Fms_lF~ZEhcmm;Y2Ex%BsQC>RzP@-Lc0TJbG>W-X2rX0Vu(`AqBWy;e zTDbEM7#|@aXy>{An6^kK);$Zs;KLMPP8hgQ>NNQC*7E|jc?CUpiZ`gKF6uH4aUJ>@ zb{Its=hY)-DUAE}#TQq3K;%zkFp1$j>sJpQ86{AI_~B8*UXcFB9tHhGU?4FuZ<=Km zN?8s!n&rXL8dK$y(SVyPE6(pf#EHCrzL`oB2uSJ$&8~L^U50$sWtQDtVj8Zpk#u6e z)jPCWHW+Pvi(s7nku@fC7hqGDICvbtt}ICqu?duQf^p*U3>Xmv)fd^G^oE-gWQzI@ zX#x+1o`18_k6h|B-n3GX8}}x()Ut-OY)*g!0*I&0P=G@$5U)nq0C7@aN@;Nh5D0@Y zs@q*!3r=HabS==WmD*jLV|=WNw76M{-Z{I-NpG`zaFrWR7(nm_4L%uJvqIA02n=J_ zuneV4G>4-XE>QOhAGM3i8KX$)yWA`3zbXN7Z=js|jF%2}c!VNI20G)xgL8fk7+C-> z3HJcxW`J!x4R)dYkeiGS+sVzpyBIQ&5p{w3f@JBG57eh7rnvWzC|9pgn-Od2GU@p% z>*5gF!A|jx-)H)xQ1eO_DoltPZji)WD;OT zniDM0M$n%MDVjR^jFYD) zNl>8@L6)`N@k178=dA#TwY~1Hlh7Yx{{RSMAjOODn0>x2zJd?!O>)9`jg!N0*)np$ zvL)pF$)+wWWw4uA;0Pb^^8u-$fptKy50rK9_n8Mx{xFneYsL)n$$hz&eYwZebnTaO z&29Q?smAI&pkW!3!fg+lDKh}OVepj}EC9>3pyQ^U0BuFJq1PrQ?QvY@YoOia*bxz7 zm$T{QCNVq>6e7bk?RXmPiOe%9Q~Kb9y-{k$g`vr!r%e7s$sr^JwC+d0emrFI^6X97 z_iUZ^{WNSd_4maqxzXkWos(apIdtkG(anoo?VJg1 zT={`F=F}T)=W;@J!klCep)WS9TCD+l6&HciK7V@Tc6eh2lV|NjjOvL`+ROVl*sKK#`&B-xf%8MX?;xv4KeF;?z+*W&^^4RzPHm`*R;F=Nc9 zrAOEBx>O6E{4eeNfmIgmiB`&fK2^?-CRo<}1k zoDvptqh&PSCq{0jT>=R~K(q=(s8NWDPut#BGbWzJJ&q04K!p>j1QGvhQ2Kr;Oc!3Y zm5n7SIdBFtw}Fg_^5G7@b$M{=ua9IqV_2EayH0|Wv*13ke-yt|(ATKe(QZ6*eZE3T zb*Owfwr_)6k^g(M==zoBtqoPKumQyvXBTafqdRnfz^NQ+q zvf*`mgRVG*MM5n9!#31_EEML_Y4FGc>^1)*k!S;ygZ(V%(5;n`gVG*1p1gQ2lutLb=&n zrY9)RCRF@XZEH&}YaV_Bj46ZUiQ;QYJNN~9!HKhsz8{kZ-8c(dA`I6zduyZP%XR0t zPtMdQIJ_IWr0QTdc~P(c!gFg@&bVqEJBu^OV<+#$nC$iiUki;n|DR=;IBEZI%8=fr zynJ!xRCGw?C-wognh&!VW5Sm%(+sQ%8SIX@6-RKr{Ch5S8TR>2sb;X0)oQ)R+nGOB zs=dof$a#g}W3A5EOw3SKarw*r6#S0W9me%zrhdm^&WNd7C1TBx1ST@7HkC4;Zxcrf zx#G@wdik#cSs}1}c$B{D`9P@*)AQe8yy(m1>yaL0kHWqm$ToOcvMaSFssyctjwCI~B8smaFhshzZ%hG8lp z%0D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


    $z@E9R4UuY|v?Pt^ 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

    (0q&mj`o}v zEiDK4E6aUpxlBtK9)usLqBl-!P$>LMQ+W79^rIg*%wpiP)7S*H4X z;`5t6mO&d{5EGlue}G0%SRy5*hEs=Oy{YILiiWU?2!m2SsnWSbT}5h&kmvJ?f3SY| zber?SgGA@ApTQ4y!M&5xo9k<$+}y~*xbim%w08ltO*%kc9f$@l^&jb@c{08-*eM`y z%^eUK9hy~p{j^ig#B+r{wbsBpr5bDlr#ir>!L-YL9%9s@k3_CaAt^yvuORI-g@=t= zZjp5S9K5Mlp-id>+oUNlHYk|=omJ|WIlwBLu=G9Es0Es)t+X}wz>7@s(3dUw<>A-mbs+(=nJF3*)Aa)1jm4VfD> zpAFh{Tj2Z?XnULSl}Jen-qz*L53u2ZEUb=Pf>P-huA`(pXlxzTVtA{dgO9&0)eUtn zf_Z$!>OvL_gtJ-gwvVQ~z6`{K5Iy6_+=inp^OD*ck<7mp;XKTa7#KpY`PUJ+V+9ei z6g|_DFz@e)h`A4Fyn%3rD-M6_|62=t`SfUOqr zZ$k+IL_^@PADOS^XP+C{ynCLG@y!32n)rjXo|xF%YF*i@-7S-03Vo!{#JU8z+ZZai;X!%a5j&=*q z?u+P-X6qtYiwZ{h+7C3xCir@|8H@O-KC=2lo(vsI3oKwK@o>(cmLlCj@g3v>qNP)& zWb|hpiNfZXWn?dZZR1uczCY?9Z6;V#e6^IRm`l+J5yz<}=QWcU7n;x08!Q8y55d=! zc+3QsTZ0e(jT>V;x88O&E-cm8nafc8E&)0j-|FM>U!W8j5UT(>phxN|R&YE0VmCH* zkgXNbuVl#O5!gM$hM6GEM{sn6ZOH-?iM>!l77{+Vw~uWgiShzT6`Teht;`Io=ssFUnvm9S%a512$_~57aP2TYbpBX;_SI91wf3sm_570ge zf`2&nW`|Egc(=F5b=d)RAA=P~^3qFPDl?VCnna8ZgXqHy4P8JG9GIA6Zvzx4fISi4 zEr6p0dS@ugV205tt2_e>Z>_V~{Y=Cmq@)+J8CibeePdZ<&>y4vbmltCQWMjJF?Qg{ z?fDraT&DEyREz7A6b-FuUikXFS-XgV1<_U5x!MT_XF^*gKitB`Xri zCYFf?5?Zq8(dnVxfipno47}-d>VQZ;kb>uE0Sw5%cPciFGg$n@{^0KzQCkf)<3%57 zhjj}jG-db2vo7xXg`>{z2NUr66*O&3Pyti4pc>P=ar!d8$0X1m8YWKXRKNZnL`6ih zUo0RMqj%XUpyoB=@Xr9~mI9}D0t5m?VL8$;5o4$V56-DHHOp={nWEzP(c5QWN%U2Qt$_BtACdm^pcmho&8dX4N zE=US=Pr+&HY?AZOqqDg?U}_XEpD>C@Uc!;PjZvaEzR%kQu->rfTzWLV*Rqrbd_Jvj zH;UUz3}@KI9kJoit(DiS+LSZ&Ujhy#Ktkae4Z)64@c-Lq%va4~ODJHp8Y_}kE{%PcXLxGN;1ma^(kMhXc zR~o8Nl&_z;a4`TSbx?J;`~X@bz?w3PMD|F_!jVQ;Wc8i+38%a=+L?XqZdtwI%2C@#lc^PJ?e&W$=xc^KWKa6}TP=F3z zPy#}r_a0=*J4@nE3Iyw{QR zO|g&tuLKf%ck?gEu^!=#j$hT=tqHo7rpEwdFVGs&od9HifXHwN5_tCoznUunNIl^B z_1=`;t_eC{m;ssp_i+qcbhajv(mXY*6TQ^WJ%_^zsL^`X!mx7MI(=>XFeCW zfej>j&R`LS_`wRR!JD1X7lXjiN8ic!4|SQ{eI_nGy66M@B#yFQeLY{vTq<1iccxuC zgvo&(z@`F%&f6qF2^!>}m{x#jWKb`0?%I*5;d2gp03wC)bF{uRfn|D&RwC%%& z;X;)m$d^G^zcu(+7r57_g=1Bkqpp1c-s8a%5~2Y_{(mEi0x$3!heBch4AUumcCO>o{AXje)myN8;N~9@O3Bac zB5Ra_#n0TG>gKY@asoY`5)i1l;JiXVNyr1LcaetjR`w0%s1XwE#*!>1wD4ivXg>+L z39B`xbb{yimz7k1&W~ToOv~Px#{J`C#A1S8K&~lBPgZ42ku=k6Q)jrpydbQviUu)m zru{&0lBaJf%EN!nW_&_<>Faiq!;Zh?Xz0-3bZ}%rlAm^QD2^#v=n2j-JQn5Cc3M?E zmB|=E*-gbLiN{XAq0B^|EVMZunfqG*<#cQ7R|yjBf4eM4!PwA9H=8c^1)%&>MkG!wHa2_ts$sEPnwoFp6{ z{4Y@m6i63iJLJy^Vt$tHhosFXZwlXROfwLVX22fejfz2CaMEmCNDk51bFL=TzU)>>Laha9c*%K|jbt?psZ=`ori}57r zx2*SH^gRC%a7Ria-n#<1H;a2D$VXWyP>iZ29sDJOf9O`0FC{ zZRmddV|3*SfN2q=Kv$*!6)-(q4l5R-hmG$|n!-!qm!b^R4KQJk(jP7MBbV)}sBL03 z^hxt81&2=#(afu zgI1~_Id5z*XB-vG)h+R)QJ;?SVNRotY1yi)hi zY*Bk_e@aNIsfh+CH14fjv2j~Q%Zyi}<6j>cWShXw zPyKX;c33=$Xt)d%F@Y7dZsaqCjBPm;GP2j3r)+h%`9hk~M*S$mbk6obJ$ri$QpibKrR1HD=^4HF9Y;~nb0&aPJXRH_pyG-`;Mu?JKmqQj#t#TjPT$q zUEl!=Rl*%})|NS-cMFuNXPyBGM^IUtS_^pSr@ncdEEWE#mGDU|_??|eeY%3~_nf1+ z_By&Yw1&Dz3Tbq5DYuuw&1dG1=JZaz?AutxH1@EZr=g_}mxjb3)BvCY32dLv6B}na zldDVN64bF`kL)Xr5CjnX@mGB#HmBf!TPH5+SycOl|NG|D#c+Z-nT&_p9Qupa5C!gg zEoGWJ(>mis`KG%lGBHj#c}G8|V2vueITXcfl+$k%m0FJJ zlhTcXbaYx=TzV{(#K5M{EK4#6!6idQB!nY@KCf%h2*>d@64pZM$C~(i`CEkOq8(_7 zN{GaYkc6g~aLAO;w#8>7W=H#8_MURI`o9ZXN#Q)Z=pZB!UA|U+f@UAib><$bWsvBQ zY+o;c?V~SjLHW#*kFTl@6np_c`ubxs?5OW7K`Biq_F9KSVa1N zXwfiO8G$WlFeuI|59$$1Zlb9+07o*dn%X8RZwBN2v+qU@c9-enttRBr)_l6SiSFMUkJ~aV4 ztmgV5xBuRUzk75rdYc5u79tHwrfSO(uCEJ;|Wc$W9v&>lSncgPC3C4!VT=TPE3 zmNY;Adb1d-g*&ee90Z0Udd&W!kG+|SnLo@+d(r>?DG2sL6v)^Q;Qv;(@I%ree%G~= zzCttJuHP@?-;ZtzM^k33hy`jbRSTnyR=#@EAGTc(Qm%~DQ37(zgj~s%%{?}hGHPdO zr=LBshchq}HZ89E4Gbt$#;guP03u8nL@2*mfZPo<^{^>G?-smvJOE*w;58El*n&qKrig3qWCKlIl`Ocn;!kmFLHYikQeQ7!i|~?TDAkASjuDzn?Y+*3qz<+oriz4L z+avGOK3h0yWp4q*I-t!RAaV!y-o!R=sWR@LCXl<6&bZ^Y@KRf~6-;!wktMIx`aaSE zl(m|6qsb~Gy>^KU{M{745X!k!(sSQ2O7g2qdgtF#rjD89lIYZ z9q*=-&Eozs)8!-~r6WGT95f{5tyOLo4)@-BosU{F6VIRq*wE?){oETF)&5WWW(TbN!IV!Z3Sf2t z7p@>Um?*k5lywaC*rmCWPUiNNL3zLS#99ouzh!?3hFhw_vwj>OIk@{E)51P8a35_4 zk@y3WGZjJhqR8T$@u|yc5mWhx;X}!{?pIlj<(T>km@FP=zAGxGs#1L%eLd&-7A8m< z2dTDHa5)zB2=|#6-l-v1NbImdt~@`Keh-ZU0~vb#dz$y~?6J)DYIEJMl)n9b0D>>FT}{QA0xtLI7m}Ol$mXfs}I4 zU*L8@?Iw3X`Gs4|k=-j}=%G(A(A=gZ(Z!dE`mp|%Jx`EXItQH8!BBeNEqe~9k~8C!(ezZSX^Gs=gcKFrc&l{s zzmhS#J19uS#{s`SFyiO-f%q55jXHVEi$y22L>7-y1#GB|g3eNs1U|xOJLdP27p+2s zz!eb-v@+Wh$;}%y$;fTpDEu2s<$HLVFy&x4YReU*+bfP+qoR1NVu!}tF+Y49fB8%z zAfvws&wlyB(Q$jcn!Sfgpp>annFud|o!X~K%JOMYX9iuE*l!{%EOD;0i+9V%_Tgo!L$FHeR~+vz9f~#>KRG1>SUf*EnBU%P ztKBCmJ1@nZ^?7+aoWE7DkXBh!(olTa`kFeU6YQ+uIBcFsb-zd}gs7(g8Lr7KK{W1^ z@i@&6i;*@PPQEuuA^wWx=XR+KMaCUg3UUT;F7zgQ|PoNwl5krR&!ky4Xo&sc4P7ms$PiMaLFQ?)A85%9!^Tq1x() zGU`m?V!L{rqjKuR8ISLC(*V1!J`~^~0FtE#*8(PnKG^j+5wu^*LI_0XXJ*q3N%JOb zwM8hW)8S}`8$;-{hz?ebh!=n4H>I$;4=YnVc*#Za?876)gOCmTOtU9bX%1l6f@~9Z ziLukn#!xAw+xB?bR-ag%Boefz(wbg9j0EV5qCpBmO{UMlLm!A9U*LJIUVlbO^;Uws zW8Jbc8ap_rnaT1&m{|5Q&mZ*+>cOIGG7ZaRr(m<`+5}E#^{Uc zN9s|lT5pu>B@bHtHjqsVVw!b4PIP=d8PsfVIlkh2M;$5JmiscsC7pp{*Cz4>!AyFV zKem8L0uXo9b2ibu;YXG+DuS7=3(oVmV^t}!vlxR&o-q&ybQct;g_zQkyKBj9ViG;R zG}>*D+7Et(`)ySdxa)ngt>t&#e6>XBfXmbZ4bU^mkTTbOXJqgz)!uk(0M70PLUdSt z1=HLe*&ccEj;m71zfx@p{^Z(3o+OLcwmo($4g3oi?csM^%)xeeBEAI!*2MCGy8@mTUJzb;amO9_E#Ns8jvM zED9-cjbJ8bXb-@L9>hPKM*-$D&}|*v0;JC10;|~-w6BLh`BDFD2UA|a1uDjt37iMO zP!r5+nzG9#tQ83IL6Y+FBNuQg0JRD%_$=Dx(ajuuFIZL-Aat@0AMJC z%_}_-heSA2t91H)a>9S?Syi@uMN9+RW)r+>*RPM zA)Ud<i9+b`ul;p;fTd&(;AvctK^`I*k}f zx`0Wpq!joR{+?!z)nQ%~X4mf>F{_4#PaXqsAw;F0sxEo*p8K9D994V=HW`jfh|Zs` z0xn>`rbH6q5B*gVuw(|5WWYTzZqOf@vTSN2f$LOK_Z19{QU89Sj1lEDfZE#|kk`b`;0HY;w z6oBDQ3?lmrSSa$a=3|A>mIRq6AND2%o|AB*%tb%EYIKQyjYsIUZBGWo48df?jS5(| z0uwRLTp%J6#J!;uD!z#(s?hB#wX%8@|15u_^sdfbCQ~w35a_iUpX-0)3fI!ee+edy zn1Qx@)1iiW&+v2AG9!fK@pK-toXV|EAPA@y0ld<{{zq^4{O|2d559~a^P+ubpEmDG z`Bns;$L9~)TIX|7OKyAU)ms3eXOP*BK>l%FKaR&TodMmqG0eQz-T_LL*%ivUToS!w zL5@>1Kyii`3iJ<)o){kfBN9trc54iJIe>m=l%N?d>lDiF3Mk#){LF@F5xOe6bpPxz zM9+RVQ0YivsqqJ!x_`)XRn1id5q4b#tzmQCN?)nQeB+|_{;Nqac*{$5a>d;Q`JKZ2`vqJ9kKW-dY&E&Ps|aoViUb6;{2AP| zyCi)B1L5fmv9aXZkO^Bv+_OqlRan5I9y~N1PXMhlh$uymL&zxUQ%y}3HU8!OH94nIUU$MIl7mVJ905K;$M0tW2u=*EdTA3Ae8cAyn_*||W3 z!>R{f*x8rDZ3d@s#zKinIV7l1eL*L6`FEzx#He+b;p-LOKF*v@{nIObCGwxo1L?$X zAom3Qs6OO@uzucVbHuo7$!3rez7 z3hFwVfx$t2iiL`Ts>vLOt>|f}!V!qV7}F*@G(XVP_6q&yL`$GZ3FWzkiCgul`^-#T zRhHIiKdsl75>ph4I!V`e@OXX;f@$uxA>Jd`nT6m9+RN?ILi)=@b|#y}Sg+x=O~t@* z+9B!5Cq!H^+{30uEJSH9=?jT{w6IlR^%iVt*QvpoeY?W6T#+{B&Ss11foVZuU zn3N9Pfc)9NvPz7#AFhPRL$vgB$d6@k^B}*{8`Cvr!fJ>k00?@K-j z!hxvT;|NWg%tJlh0U}J&fI}uY3Fc>0B*n|i6n2?TE=|TnoW6Eejjl7zY#6VIX{|x} zS@{ZzB@oCQ0?*P=-~;1z2fR5})}ZM!oI~Y8HpUvsdt=t_vWo1=0nG}z{S+Lyv=B^t z@9qH|P*4KuLI@ZV0k^ac0ajQ$=(lCU1?(QL`Efp0n=gwW;Y~|8@3NB!_3HW)SQ6o7 z(VX@t$nG~L*qS8tBOLrRa*6l~v?M zS|7qD>lr@f3N@Y|&be5UJmj{b0j)bj(V}3`RcvI_l8IUx?HteC9CNt48viPC6s=&8 zW$JfZ?2=Hx;vNj`{P{o_A^6Q@iw8@@Z95PBE-xg;ZT)za*6s6s{8zK;;k~3IunNDV zkhYd2TLgo4HvFUqu>~Dw_q}=}B{stI$*>XH;Jn58NO!0z!*3&4&~McOvh4? zOZzdrDIc;<=*&X3o(92vgw9{62=857IQByAzg)xxti^0rh)0qMQuU&wm&ohWd`ppa zf;6+7W>Sw7LnPhLa#R(rAy%XS-UBdr*nRftT)L!T=tCn6Mmvjr{1xM%``bL`tPbf6 zfk=uD?ZtuV3q5Y*Vd1}E!&l{K(*51>!}r$m@06wylHQ?}fj#L@6r+d$K00_}Om5tW zXOH>6Fra678SnaFKM{(VAR$dz++k#5u-<9Zs_+!Qo*-&q@hk<^>&c<}Pz}j(KFEZ5 z>Lblhv@%=DQ;_6R_<&l2mY}Kp@dh41*?cJMcc6*^eCB?PhCLRzGVbdBc*39097=qhFzOM{J53>Cu`6ldgK2r6mLHp?} zb=Dr4ERTqz)KKsf&}#;|7+i2;(EnRIz{=}98{^w3Ue0+bYNSzshs5=ay5}h633Sf4 z1pJtk02^Z+AdCat+5r&rWi$@GtR4Kv%NCrNc-CY{`wUV(W;0&<(Q8l`&1!yx=&eICjEJ@nf|OzxA75cv-k zik9ffM21;?+CP-E*ifq4G7dI5ZY9+zO4Sm26W|DJB~BZlbB0Qs{_ZMev=bhjGZH|1 z7fB?C7e_%HTh!)dyl`=K3dhS6uHS41l(}%gZ$vgCK3F5sPw1Ith(foR|79I z+-+)TjrYrMvd~gZJPmiE%k5c1R+hqm!!}rLRb`~dKPY~iSY}t(lAwCZ2%IzWQA0xL zpR?_~Bfk^GUxLe=118BqwHqsnUR3Y8P7YH>mf)CuUcaxWqY46ilN0A~vn*5$_`mJM zCf+ZC^ea+-x=-0skrzxI!$|1jPHl<#aT?Y>x|`E`HfTsOJ0SI)F*&CKDu(-4Z6nvH zuk#z8JGZ9L8UL2(l>!jOYGEbiI#wM&*{J=4GdjUA^yRfa=Np!^@<7Jk`7nor-fWro38TC$bmE5ErY$)w7absDH2SNL3au_c<@77*$wA_~~R-BVG3=$If@a0aXeZi}a-`v<@{)k6{ z;|YADa`#4BY&h@E*n8=C(DYAo)6Kg*5Msa+6NxC|L801@ZWrSGoFg_l;yTC^JKr=B zy<#dDI|_sN^$?_JNq~_IO$?}z2B#@HWUf-%q`Fj%AD3@=|4WnhVP7KntR0m}l z1;+-ESOt0maxwq+#y%z3u9MId&LdJi_WCy}AMF(&9tHWYPQ)`wb;4c;4ogJ$mPnnj z1v|6}vCz@Dz|i;+>&xK}5|7o5cB&UT`fc9}zmEYX5+G?gyRt0*aBn|MuT+f%o%RD( zqJ!2R+#q2MkmssjC-k5wZ{*MJ$75HPC5#)*CkGR9>^c{oECFtcrICn*OnhsCZnSX2 zVP(WM3e&07$KCmIlX9c7t_#2aUDMJ_d1D`GfR?{8sS}hZG_YDp3SFw z0K*OR-65Dji}nAT+4`gdA*Cbia0raaBL73U;yi`AnGVB z2=wBC*Q0L0Pn3W>ut2V$ZJ|K4FPQ`4>^kUs&emLOPR-WS;;a@`T&?3up}TL-SPjv! z$7B(|6ZK6#ovQ>sKp@R6mWR7l#_E)}+~2W6zRxtm-gLneLlWEsS^GJgZa+n17_)k! z-7kXC$<>dH`O*pRfp+XB`s##x>r+Y! z!KV8^%Gout$q!unZEVJ!v3yGCTFgBkB|qxFA?c?zWo}C~YIN&7vtHuW@L=)MZ~8T# z(x~g&`Ab7$sfE%$&+;9&X`(CN%AbmqxexVnLgJ z!-M7eI-|7EFmXyG1$4#|B0^Qc1Nhir<&_W&i1C6XuEAJfWC|3AVuv$R!=Yt7GqqA< z=ckw{FoFD~VZ^J4q>hX-a0+)GHX=ax6BvI3GuI0gpo9->vxb!uk~dWWfdaWzX3)J) zpJ~LnNKwzpWd8gpWB7zvp%DqSAdf|3d~1z>g2;KNqeU{d`R`RC51ym=6R>krK^uiS zt}to>;NOGyq>TZ>tiYpTl>i*jgWk+wi=PFX5YJx46i@Jp3Uk!fMWMw zczAI14nP5<(m2FGO3~bcU+D%2I7k4(8~95Hf~J<;-Q5WNd#&4k9jqEkY_PT{QP5h>Hmj#)K=jSv)z)&5 zFfS}ALa0nRxjV0ia^j4#Gbw=yQK7JQv7yADEc}cW!2!edu2#U$zQuyM4xQUn1waS_ z`zq^LK(;yf4JV7G-&~p~f4qukd2_y0!Gw~xH8#UKegDhg<26(T8$1Y8=w-xNyQlnS z5xQ=k0k8jqX6YyV0z~(S?u>(zDZ!?I1UmC5@aG$ds2Vt433oaj7Th>$vf!wqAms1| z7^e2Qcg{lSciHJN!G<#ZLjsz_z#>o*oVQm4Ya+Q=fSU_UlA^JIu@I23Y4Y`9Iaq&< zs+^WyLG8FI5&G#7^^$g@s8@#t;!OnFzu0&iHtrT;{y<{?8mn#U553NCQyg%QNx(`q zCXt7&cNVoO3vCQ!vw$5hiKvq4pJl_Uv}X>nmbiU^Q7NId9wkWw0&vTr$aI*wjS>Z@ zfKwb;q3NI{$K-(Q0V$xQ7$o7HEIFv{)6~Hd_=^Y{KK(WANuQ~gDpECHw2z9e6$QNDVE1M4X(*4lm8-Vry_~93e;&&w5DB88H8ayxJsD_o1!Djj+VV_buc_hs z{kOY6ne6vRN59Vzv_6sdB>dZW@)i5Uu7oF zMMv}`YL!bn1nuE!7jXDL^-uW)hyY+3lB89Ffok2YCiW(@Fe1=F9Kq!1u5&((k<$O& z?=10I5K++-34o~w(+{H(pz0s!^V;YEG=ET$*JF~cl0E%*wb-S0Mbm|xpu6~P5>rFD2slzFjKo;UCp#sxQBpuZ*K;?jA zsohZsYyO97i!mXyQHy{gMGeRsxT+jx~J-@}%6oP~= zP<%tN|8zxTO7=^RSPNyQ#>bW3ji4-rBl1jH5kw~zU9-C8fXUbB$m~KJM*);W!o7Ek z-VIx5UeVf^@Y)-~{$M02(do;d>>4d{#yVwR-I|xa*}>qzMu|Ms(ltl38;8>I=s&

    `&-Tni6WODk9eJ$hqa+>qpdycC-`R%I*0HrKu~(yl89Pb}fV^ zO#<6Y4eW$lg%UGy4NCBM?|ZO64Afv7NDJ3f@jJfPY$F)D-ul~*2G)r4_3t`YdqLv> zDxl&C6qYYALQiFW`?cSiV5*dAUDzp)UVJ|Ld)j1)b}_ zGccnDKQ|yLE-trFk>~O%LEsJ;O@eLII&4Cncs*H;z`k{*RPkJyq=<(+Yvw=2lU`|^ zE`607vTmu)JQ#e{| zbcnS6QSR;N%e*BTWj%ygP+xC;>Ur!S+1z5DFDGbQ_9BE_k$iF@hwHUj?0?o&Nj?md$B z);Mjd>qcVUq`fTL7>~Pfsot$deH>wT=H9iR*^-gxo^rh(8&6KM4O%?7Ulh%)A{X>W z&3i7M^|dKScyf(>HBGNV%yEbzdVuLh_Q=Y9ij-YIxB2P^958?#;a!sDG?vd**t=pR zh%smr3$*;X@`7_2`A@butU{NM&+#&**1+EXgxFPQKt&OhTX73zUGUez{h7pD{9q7( z76Xb4u$)SP`@AcyCDsiaC*E+ypkG;X@SPV$pErf;oO;ZYy!X#h$>r3;NJOOJ?zl zs=9Rb-(OgiG@p`g9>3gbvU=7qkNhdup`nvYQ&4f~S2-4Tyf&ok(1c?BnTEfG`e_ci zmLqJ5kzPDNh5H8}%?UDc-QIu-7VzA;g-LgIhJT$J*T*e4c7*EI`{fhI=kE~3f}zeX zZaX(kV)xVroYjJ{E@c!z(gD4fPy=A#3^s2Rx&b>-ddbGmyU06{KRtCz&#Wb-unr31 zbhn@QTzR*fH@@k7sg2pgQfS-i$r0zm42!eWT4aNxE`gNK;Ba1b8c?JdF`Bs`?8Pt7 zPGMfHRCvD$2u_jSCl(H?q8&!LcNL<~n;1%XTD>B4r27K|`GHh@qjx|E1;p9Lp8q3737 zJ%z%bDm6{b{sCck^%VBTFh{E^VFSGGtn|PDC;IBnczH4G9?ZVVD7%D)49N1jkT!cEe%Ajn>{bAE<}!e(ld}J>lck<*!h7r?p)x4JrF_FkoznfetEaF!*1t0Z8K6pD8Sw`?TJNJwN+$P|E4WR%XPT<=Z z6Oe3MxfBU<@l;79lxVgZf1<45zThuWyZh5`&z`4st7};c@JoUZQ{@DVrGn)}nE{|; zghLLg1DHZ0Q$Wd50rb@rU{VJBvQ9m)|rQhGpOOzw$V0xFWS zcg1p&yt}_P10DX;E$k?GY9{Y;q?w3VtKIGGi)%cI+E5s!`NR62nMX6)s@W;L0hf)8 z-nPnY!`Cw+e94DHR@etJ{ylQvmS70GyY^MM$Dq+Te3yZi6_6ogL55(cLenK7T0geK z&A_8K#l!nG_XqartUBjHKnc^rff+gkkS7j)MnASR9PoJHh5}(4Agce7--srfAuPFa z>rc{EcC#`WjK2Cu1O{9yd&atYT<<0~m#R@<4-eGyp}(=?UXE-?A6ZO5?Qxj@{kAJ+ zjv(jD>b-`?jGKHH*_%W$uLI$Vn3(|lSggN`#UBos7&qckicRGtMu`T=aW zWbSbelHPvZ5Fruu?i?k-NuXwL;p#o&L}Y3Ey6mn>)&_Nc2`q#BBpYHDHA}kzXrb(j zJKWRrIm%6aiCHpJxAw6_y}p4JCmCb)fxj9gs!%0!@A3mZ>hCYoeKY<#2z8TPJDOQ- z;JA=3gcPiKn#;SZk9jlXZ+TfYW;cJ0{^_KzU*tz%YU%SU_USxz5h{QhPS7Wa*aN-Q z;4MKIId-?mJG-G~snox=z&ftu4w=BMvLCwDAHXQnN88*1|93hHLOJEz6YExLdTN z0<<_cw^(v>dW5&xi89C*+5F*RAzcB!VrkolSjT^Ul22WUoI%v_&$yCkvZTcH2fkO+ zuj~Lt7GP<|JAljULKK6-bW-r71=Ac@g=$E7jDYvOvsDd^Bj}<^lUZ96B1E<%R5C@5 zqmsdbgPUxa(Oc^%spxJhivZi>o|8Zh?+?JM3#LLU*nrdj}ICV=5UE6SU!rT3}lYqrM5aB<|tO#>$=v@5vw6^Kf1yQMh zanm|6)GJ335v}2v$ySAF(s>Hp$%B@1)ajL&fEF_lhjkK>cRn);Ym%6~zxI=L<)3i( za=y_$)7PgN;3N$U9;@Ymq&*lCI6VN?TR3o`^vF>YU1P`2j92t6c`cGHb-Yo0#e$Nh zFMc={Pu~Z3Cp{icx4$x~ZqVPBjSqHLxmITpT>0-reFSaT2hv4aKm5@axK)z;h&h?1 z^;mxdZ4{LJxn8tDB$4o8>)xZ$9qTDJt4!@;)- zmy`w$gi*^zWp}S0|681DikZNO8RX3JqOYj0B*4`jnSQ6X(Bya3v^@e&Ucd)$fdRHa z#W?8)20sNZNKHX>3~n03bxxAV+9i{_;b&vtHmgH8hI#5ranv7sbgu%oHVu&IO5?h{ zLry<@5fIAZ>QgRn8O)p5)AqQJJAoSpP}9~=>S;Fuwr@vp(BW3}_6rLWgsw?05x>78 z?Fjt9GLn0;#N6F1?JswgWw!A3kjimm4p6H|H4mFhl5s0&b$TXjt&8s{{@MCt z8%f0Txo@8_3BGQV%U{suGne1I4HId}{n|Pb(j5&LL?vsTN_2+xX(Gb&{v654*w8}w zB71@DWPwH2fX9jyxIBlKS5%!yNsFFI>91z_nGa7VmDmt2xqb)w2_8h&~z^4@f=xwKFmFJR`WP1Y~D z_^5u4_hC(C*a|luZ2N5`s3nkTfP8U8W642vvRwxEx2EdMl=2n=AnpYVp(OugNf3;i z9S25KL3!rokCY6K=z#Tofli8__KTSo%){fTZ2Mo2JudHzxg#VoKgLorJ9Zr6u zfj%qE%p{UmBqs6MVbUnsQPPj__u`YG#?swxjVz1;(lX{HGt169Kra$h)u6t&^Bo$y zP017gUTRVKBdE}9!!6tR)KpxM^#S1lj!**g5lJfr~p z)dSi$M`ix9XYv@;?KZ%BrM?51V<7*sKthinE~G%k>`DQ0qj` z;4sqtDdhW9ln5zXhcSVxYEemrymcig*jv~gC+$sdJrU;cxchBSs&N4O|3%rjX@G$~ zSWQ&zdC4_a3dffp7mjNnO`R7SW(#xPT^_LJ{CEAns{|o(6cKv4FP~RB{^$)w14K zD%-B$;4hYuP{Q!-)d?faXtjS6fzP0l+%1?+HG<4a^fpNFeLN!#0KA+Dm+v&?ZN3v#A;fz5UM(Hr9&aAjSES>mQ*?-9SL%i&>G(-#+)?_xRp`OoETk zkAZ2T$O1SrfxxN*IMwJj&u%R&$J@2N2w5}8*QHAydf>rK&SVa0QwD@0=tuB#$h4R7 z?eCgO{*2j`?uG1Hv+wI;C5c4q-OX|x0|rrE3J0GTrAA!wk8TAAZAr; zZPTjqEV}rT66Mp#&BL&su$8NTfKpz3`xpI_w$UE^2EWc)Vhr$pMT7{&J_T&0f)n3f z0C5T`gN*#JV!ioyGJIbSA+}zXRz39h+JP5%Ii|C(61SIdC10wDg?;el<;LIo`C}`D zk*&5#Vc}*F4$gX|c7DJXdQ^G8&+(45a(oCq3f09g`h#@r#XU7Zd-Ztmr`gay(~t^D z;-jKI#Neu(c^PK6EGJV>dvL7Jms%Z`&+f0GIMIq1A2^uY2z(A<@WupoS2qgmR{Oqm zx1tW5U6FZb^un30law(S3IG>xpxA$bSAV_#;w6XawP#ijIUe3c@jrQwC^1ziPK&i+ zL?O5aE899VJSNc{Yj9(F?aNPcE4wwu%3AvJi}JimU4#9L`wgVe{rFoDH3vWB)Y)e) z23_5{PM-LCCKweu59}RKbP%dje6pT$U5{s(QC<0;!X9+wel+be2BzAzAoU`bG(32| zPVOvgs2b7&Kb}FrhJ~c14kksT)wO)eS;X~2Z#|t zc%B*qm^=p|qt$o=v%*kJ1_BFC4sxdl$W20s&r~f8C1qpg>X+a8zf^L!lIQu!X26z1 z=NCuc;iVxh{GfimNxesp#P5YK%af+^7(!bQ zkemcFNjWzlWgpBsR?S=H$WtIxm6S7|v?jG(KlGwe3!W^cSxo8I&Ix|-)9Q{w~2-jNA_S1JgTp@16Z z+8|A_R~qPW2KzWx))h`xj#JiG1-ns*@V(L5zpr=w%hFJ2UieT9YK)HGv_ogE62HS2 ziHQJGVHjtel`=o8Lk1``*G!l=+6w|xc|DeXgY_;|0>`G9RSI{b^>F>uK z(=L~!0Lm0;LDDZT%w(wiG_20cwuSHqO@sn#=|I^3{K6^=z>W|^FlIB82{&E#@4f^Hf!8!2n{(w*hc<-`g;O&2r%>!ki+Xo!7Z7LoCSbT1{ zu(mv_*^=9xjha(m50sP&sa$ahOL6GH&6|7+V(xL@@3G~#eRqz{&;n zH)Q@pv6+-)Ju-zB%BkmkQ${rL3lTffUd3NSWi~QctXy1~l8^k2i+YX z(f*9WnE0Mc#h&b8)TIkpS|0R)NMTxo-D;OV>~V20qsZEmbg`E+RvMsuZXKfzyj{|uwURz;tZ+qP&eP%r4-{pBk>KrpC0 zkoD94>nY|Dt*_H&bejP z7O#DRvBT?5?h943R-+mVKEv^U;f~!S{(N%BWJMv$c9-RDhqFH)xXBZw!}ca4m0r8ihYk)uCJL(dMkE(?eTYc!`Nu}_WkVj}blslL z(1DOr&hbjDFlnNk;UEomLhT`(s9m>7Zc&K-tRf`VyS23A)-qv&>riH$8B%g)G~{H#p9NI>d!?F40_(#jRa9+fF?0ZsHN#Pv}RnqMQ^Qxy#Qix#YSt zH{TQDd5?Yx(7?2Lx%ENu3X&HkoKXK#L-&@Ot#Rze=92YtJ`qMrcR?83H7>!D5BXt# zM#IPaj-3fdD%9d9m~Vi03fHqf{HaYy#ag63Xx7722078Qcf3E70w1lI0-zoM{ml*m z5EKp~8wf>`r(+sl_t7SJm#C5;5u2T6qe?dAFeEWRV>An+Z8o!!&SV3w~HmP9T>Q#26+? z_9$duJ|>vDdS2hlnbfgV_l;t5q_wMMTj4tkwBeIt{dNSJ8o{@;e1oE-M#%bmg+*%i zjn5b};XDCX6Jas#GwBuQV8pMCYV^spJboS;mc6@;vgI1bt zic_`R`Z0pp$gkBH$U*pk2&E7Uh~R;REAQExvG9$aPj4p<4^N0joVrtRwTa-G2qhN@ zJbdKRRHaQlGtlx2L}4Hx0op5&Q8L7|`avYQ6ZuW(YZX$SZ%jSk$DiTe_g_yqKMdm8 zd|F>*oD+Z9{FCt*UmJB&sxH~Eha~_DZIl}Kj0G%vR;RjCH!$2D*+GWmUA3&iOqFtfdF*PV_jz!d zikL~v>-}Fc@=2E@d8w#LiR#dNz;f_dD+X$|A};?zF*|dltr!r$1+LB!TLq@6!K^_7 z%8C9^>SZ3;8Y6W!S|8?!lWynwteWT#f(swfYImkJd?P~LZY&Wt_4kx@v(?OnFd_WQ z_{>`u?18O@lP`C}N;yQ$^#GD7cqa2Q0D~S7dT}ZSa1p>)GG;uf-WuWA#z7?{sFvB% zwnU^dU35)ceJPVf%HwG8M+_=d1|XG#BM-EJe8Bm3L$X`7=BzVVN84|{G#ckzNtr`A z7dj}Et7raX*yoXZaLCzNdjGS$eMe>1=uRw!IGzuJ1CQjPYEvBlC=!p2AHxVS4|m;4 zAnRpI{;xH?M<}`>L?W+xWyOLOJ_B^H^RVGnrznry<03f(r_8yw7L^EmPG01cvrAwc z8EOs|5~`rZ=6IFN!A{j^H>u&^OCFaZY}QwmqV^@eygM}4I|a=JLkrc{qg+DfcM`>U zq_cmO;0DpsQ1RL}T=85vpT)hD_oqEd94L+XqyH#6%cwY(APVE|?(Xg$+&#EE1b2r3 z!QEl7;1-c4wCwhWlw~moV87FuVtCX4v2rs85*vuIWYgW%S0{eF#rb`3M6qcFtqGq( zvv%}G1+j66$0i_HM%|s=>`P?=cX9i!HAW#+R*7#6nX^N>@^{_`Q&x(6QJPcvd^*^H ziCVBO>^KK_PJ;qgq#JOY0>5Skr2K@}u2UI%xj?AcCZ^(#_6~(Wq8zQR*@&-F!uZ8L ze|NCiO^@cS!~Al24oeL=Cw+5bFU)8IKAe7 zryoJq`e%-+)Hk}hF%oZ5a&mN#0`GMYsz5Jj>L5mid)n0)4svgk%d zFn`PbhIa)2q&{%w2v*}zO7tveBb4AH?nIo4F45kIAwJxd%v}zz_V>vs+)f=~IrK&j z9ruN&>XF6Bzm%*k^3kp;?Ie0#!zlNDe?t;D;!Z{hD-(b`8<=0o)8{btHhR={`x5hS zJ;m8?gjZ8%@A0hiL{{zvsFDM(EaVcPaYdyF#!=EMv4djeJ%b5ME_#dEqJjE}j9PkF z)91%>cq@=>Lk_b)5)Yd8LT?l^LNs?re);UcW}4A3;hXa8+VN?XaYW<;Ztpt8iizT4 zCBD})!#LA*!rH2BYy@Y|czzM`(^^QYijrZ=&IrBx-`%1mKV)J=xyyZ3imIf)M2()? ztm83-aPP5<=ALlUCUS*arxpeLZ9fiBRvOyga_uz|AJ+(ya^x!{tcIaTtBV13P%J>% zv;mb%m=wX+7pinq;;|`eL_P*{wX4%G&e{9xUd6ku7JfV5zr979$lqx2ec#Yc*i6R% z+NbxmH>_Bd)m;@aJv|8X{bXiXfqacW!Xpwwaw4+%j~LyTM0Iw!u+uP$51V>O=GnTR zYOTv);RMwdJ54(J=hkiW_o8Gmjb5{}QJDuDX1i7ZVof+iTe{k%ZP1CxL^#Gxjt_n} z5P@9G?rQ4U_xmp6q(}94+-&epMH)SpeaHcaqiMGHELR0 z+exvUk1_*8MoC4TVtD7S^QIphg<{|htDTt{!nQhZGOozWa)AjhFk9TNKM=o8f_4AX zfsuRII!?*@X7^rFBiRXox$Ze1E-!EpIwneJnksL>ZK{N4(~D({oeFCqt@og=uSz{B z@(Bi283ise9T4aTA*0p}pd24;^{neqRA&_{@u$4rX{cAlhy2{?PPWD%wcv>wbTAeW zq8dtw>c_`SJZ{@9@3)ZIBhFUYDnnyEwN}SknFyh4#+kD&`H{)rWpv9=hZkF8-vr^_fw%6r za#*Vl6GmR_vBcXU!7_{WL1&QhGAp#(>MW^`f_L;bI=az)1Fwtty}CNDI7KHka?5Bs z3k|ekk#UkJU<>waK|S>Y2%kYwgpkj6Rl$Kw9fdHl>$Yz@uW89om4c=&mhbzdAa?6EyLH*D43U7T=8N=7Am5{|*wEffN~sFXO6SzkbE5J?tUs%5)d(MJHewR9usXfCvm zffi>B+RRk1Yh<&G8T;#Z;5HI8<<2LS9F62YB}SNC7r1qNrRE&x_--A!Hv33)BU3ya_mrI}s1Gpx#|3 zQtc6JE43H?V!0GY8ZnYd?wE6P~h^2=F@6Hue5gr}6pW_Ta+nyEc*mLv^H6+`+^$Yv_XU38t5xXWYI_?i$917=wJELpg z-jdU7y3-WB%Zfuvb}*`SxYGc~XOLoo0e}-^kp4dVYYn%6#l( z@3rntCCdaM24ZQ;>-j5C*$!4$Q=d-4=?>z@$Pz|S$0*4M#KpniV4X}_Ja`$NtAO4-_>{u|Ksy2RcqF>*c$?48 zB`NoQ5vOkhTRc8#4%A9QZQe}R)daQ|<%2E2_SDIsqG#cMDmuyp_$ zHo?#C`YHL%F|}$#5%b54^*~d>N_S`NPJdh}URRR>1-# zWGfN{_Fo}?tg%@$HI=*XXsn$Ge?8n8W^^LB`0U}MX>wLa)`w-di_&!NC}`HVDox>j zu~GFyzYN0Y%b9xBOe~Px&Lkn@#voe?x&Qf#ZB>Z(dQ|MG1|^!DaOGF$2O16p(WRZXI>K zK=}iRTmBUpXNFZ^;nqt>X-nwTUZS4re(8Y6I*!AhECn*hL6{~JQ=Fw9 z+Eug1DY`@ndt{A0Yu*Y%IXSOTr{Hrbky*^4vQjFFlKe1N>_TM`CDe;K{DV(m)5G*u zxMfGNkx!a@-ye(YYk+_Syyn|0faWXsDK=|>Kn>6vLm)jgT==*NkI71@7WrN59Upo4R|Yl4krAQr%(%jn>Uuwl7l&=mv9 zFThRS-E;|d?#hqgtnJeH2ZySeNzEDLQ_m9^yUL?myK$A4$t=DhP5 zWPIhL=9aFmqb4i_jH z6j&s}?UFsHqg{EWxPI{Uab^Fc>F?hu z6mOX3+`Y6tXBmv@8$yfyI|J%5Qc6xe=f&b0YsVMQ4|j%(hcMU}Nv&CI3zXk5)t+2( zBl5zGhFuh+;XXsCIe4LJv)z_nd};odV6m1v6@@@9ZTpOm;SL8u6~%lhyaYuh$W$y` zq3F}Q{L8^ME0^^9COk=U2I{U;K!!|r7Qg}vP6!{F?TKo3lc=XI@nTty=kAq3o9uP= z$A6M-7Mq<}av;cZ(%sj26Dfa5xw^Fq%dgq^sfHTUzq_dbBMy%h^t z%`?#v3*T@;^&0S5tJC}gvFYMuHJ#ta49GBvXj1atck{ci5Etq!zhOu ze+54LghrITx0}*psEaI*EiFb6>>fq?JstnOXaWKXAMa#7oUeudL2T|LkzN}E` zHQt|;Uke&f0~|%?WwX#$O z?H43-|ISLSP8|u<8Gz&#K|9}dY+JNOu?ipA9?#y{bqy@4m!z^2>tPA^@!G`_zUfR# zCA}_OYd8|!Kkj3Wbt3QZp}A$~?dr6afF|XhjQZ`sRDR&)1Z-gnTwqE4!G*7pi%V!A z(PEc8I6!bUcp#GP*pHNu&~BT{r@=fJdrp2WY0~oA5DJH;D#Gw>`;c+vG{qU??%T^N z%x5O^#spx29rU*d_pwinbYmUJ=$`P_#NI?PBt%0xARiLv*1s|1q75I9A?9q8q?n}h zcWm0zd5As87vpwZ?;OZwt96w=(O0@otd`R%$OJ0)!QDZJ3V@3SA4_|Iy%I3{K06OQ z>VtJ4K3QO*6PYqtq>AkJ*G33Ep*_U@$F}T8Y+L&?->ZPio&`((w{bUfJMyn6tdo!_ zHWxTEfhYc5EpS$UBy{i#c_b_E^L7wv`}~oFnI=>@w^LN%%}Iv|+%92c{OvAl+9*jy z@mTfT9~*5)SalJHkSM+#zK%Om=dK>x=0016@gk1vlo4nFB7&F*P^;uX;a@Ny_O}~L zI-^qjr+&zcx4h`qse;6W?MOstO+7H(P4sj=ZV34=UXR@Uaa^qwVDP%zyRh;$Q+Xut zjgvj3J8-f3v0D}|LHq$Y=mmKz)kGq}Xyk&j+N_e;olAA^9}*Zu>;l{z9}dnJexpme zjnN~IHRG8J_EnWBB>oWX32c(4F#O?#!wbZ<_LE-zS}*>o2uQ%SlZDf`zGJ;&oKF0B zj?oNQy*#!?hwGuLK~ZT&E2XSn=qf7Bf(_O@KFtoaZj*H0cMS+hBmRmAMb!Wt zIDj{M;3aJpd}vijOP-z18$f1hD*nRrUID#eQM4I=%K`XT3?|72j$OD+!2ZzCorRbKUWm=R~UP7i^htRr0an+orURkxshaTuI*zW z$C?mqg3RhAwx01DbNv7SiJvewiLdh_|6Vtd7!3V7+P+7$w@$Ven9q1H!GN5ygygZN z0xRNqMB~!$=llW@=xEbzlUgf9)LmmRuqB4E4s**<*Y$2H&6snXY0nCd4-$6!phGwO zDLT-9Chs%s74z7TpZcQgmNi;wD{Bt2BvpMLF-nrJhZ2_@Oq_oxyrlr|R&(OJ;?c% z9be-2&n~|O0AFs9?X0We!h^QVftMK?9dI3D&lS;rVVIJ7@=GhfZK33nb`+M|5&+1y z!JXE-i-wXvjy3YI&VX4sk=>*?lUH}_a|sz+JL&SZG(T#Kz#+aQPS;z2U2w@ezQ(&Q zwBEO%(o$rFPft4mC&f!xR6 z)wh)*_}%IJo{bcHQQ(&mqNT459)XLhe|kPYHY zhw`!3@_a|>5|?Lae61{7?`{Uc1r>#jaHx%PNbL`v($GIuNFhxJx1p)dRuKe z!0{LOW!(A$C?w!6ffrML9oHXsvEKsA)tQvX8f27wFGB5lMZkhJErswSxdlmKXlmv8 zuPpVYMxkp8?AJAOXzmEWAM6r^8lVUIghAI;4A?O=s%P!T z${W7ZVc3dF9jK<{f4?=}<0F)2ljdMN#@vAu)%=~_sS8Dn{9}yz6&0kh%K{NO)Am_k z>LK6dD=chi^Q-B9=`$UoXzA1E`0S$EIOf_P3~0?sod}&Y+Q)tHiGmY&j zu<;LE5vag`?Ei>d2gv(lfj+0hNX9bb4wL+4R#pg z2dsM4&blt!RK7>pH2l$N{WDz~Z01dhS~nvSwb)1Z!Ypz0`RV=OkPk>dwx|?CeluH{ zw!$MB#A5bIQ;nnucCSb*96f*1fhVQ9@cZr+l`LV@~=nMT3&29T8W3bGUxLukpZ9uyg^Am4()>LOS_Ei%fvOi!uU%u*TV$G`#SDFf((au^=_wa=k|(d_!X@Xt8aj-AX|esD!Vl3- z=kqOj5(@8H<1XB7$wgWq6A^4bBat4%*42+zoVi5(T8lK5WwPRIk_RKR&7T@(i~95X z9u{?`tK-l>(ufrT%@@~eB{`;9p;9sBilhZ&MB-7$6rwf}N1uN|eq;vOt%FG|0UyaD zi09=wg3lT#YJO<&p^hQLB1luEc3{zRwEKqZX#Cdrm7Q1ypSs+LucJu}AM8doPVuWc zbq}^fUo;>6_gh6HhlL)7}HZKn`2WEGk5~ZIZr_rXJ#I6}c znh9D%OaYBTr$qu@qH+-x*O<`p1npaDDqpisYE-YKBF6;+%V(8Q7n*_j%;0GK^cf1dFUcd$Kbe{0x2SUhbVnQo&cCTZokJX}=!9r| zBsy-UgM6YB-)*!9tmL(DiT47sqE+}88I{QlzAZM#Gkd1-fBqsX#r{Gk$s!RxhOD40 z6uukdt#0!Z6IjIq>q3%3o3|b^ziyPo-LJw5T*J4oLcaT3($1{b!K0SLdLuF@YVS6j z7wU!k({v{yCH=+Vi&1g*g3CTv4^2SI!*r%`P)3z0AlgL8GeL3g?1T93lpfE}ds_+k zS9t!!*ebk?$|+_rO#5_xaUET>{!DU1deK6K@sYfeZ;YbuWFk0X)$G|`UN2w%kLmaJ z_aIjXe@YJKpRvG1+YDXNFr({{lLW6?HM^BPyOD7npBo!R?eqnDXk0XlxTKoPZ{GsVr%Xjc8%s%QTg2EZ*RZI{`qPa)!@Co3|idtNB_+f=fvYz#PLq= zm(X-59NBhectFQlarpeb=cKrZko&u6;ibP%w%#aX8cZ*RtWFe9onMjjtxd=7m+)_A zkmj$=@YPx^fHc=S3AgSCOe;u4I%jMRLW(V1IWBIDJAv&o$QK$!^wJWWFW$p;#;3cJ zfu>f#qa6r0X%S}jfIwVlk>>~n3Ey*UiTGk4Q3~01rD>G1AF7@7=RPt`?f_wNF~qM# zQpMg#E}*qhDI@0|ac4s>U3Jg+`x#4spYbTv=Ok0Lbc0_EKL5VylXWGTTv>9^yJ8wt zKeUk6+`rE0-OQ7A!dN!};z*$Ds1}VcS52*@L5;x{EqSC<3iFaus;Za{yKY7X-bm}N z$d%9qoHtv>kd_3IO(M8C2aqtw!bWeEQC`Ps`L($+5uyAk=+BcDNMumDTb+b8_}nGZ@BK z$=qwQv$IjM`;DkdhVzy>R|T7}S~MrjmaRY2iqg)Y{O4 zK-qKwJH)MnP;71O~*!$%Dho zj7(0wZqYVAxD$`+ZwUIw_HxuM4T+ll=4Uz7$5uano}4LW&>fNMT%!$!3^(dAVEa7w zi5?FKQUZr9TdC4`;r3WUpjipD&Hl@IhaT~b_SmAyk`FDL9lOK09%7`kQsu!W5}rlK z%6-2pwSrTT-4O5`TYKQ72EvgJqD%B5-xc6(#md zQg?d@BiN{$9dOkJk?uls{}YQSuznXxkRo>bjkCYtz1Jw}*y95tWS~~Bv;l;w zASrB3XpDA^OhmUf(`k(wr}I-k*tt7je7TTN*_#d{ z+e>razljN=7#Mr0D{zF2l4fPtu-hd*eb+g?=e+4>=OwBf(hgxtT@d=1NubXb2lauw zo4m*cIL8Ca2UWPKi-9*NOm^F|^XaGxiT-Z1wskKTuD{0yJ^y?MVpl-GPir15G|* z2(V-errZyzfvjCnLS*Ix@sHp;h6(~U$6z$TWCh&If$t2{32b_UHJe);j!u={qxq5n zSx-9K(3ntPauQX!m#Tt4)+{%|-h4JT8S+5h2KX6lYyg5DaB&C?W|l%al~}izou_jr zfBM1Z+q7zL=n(kQMW2M`yRCaBipbZBq<9URhCi$CZP$LS_n8(h7EqemcT{)gJCex@NT;&Y8J2r)B^mmWUa zNZ;+v-71?tjjh89OySe6sqdJhN@e+YE6=QAL(|;$aB5!I7%DX%P*W@0dB1wm&-f!R z%c=CmG^Co(@FXEV^zZ3Vg1(GnU{DT$4IF?zf=~>TKnOVfF!&^yEVCT{sW7!<+U`ZY z?zE8m^Phhc2B#3%ezNX4ca;SCO?^|6ZvM4I!C~appB!^L7&b7?eyQW=xl*o%)IFZr z71N$h4Ow5SNBPP_JD9U2wc{aBWUtqM^^9xXx}YtBF~Y2|mNX(*k*QLC2}$9o7Om&~ z{<{$LZMX30uvL2(Z9wTsIrt@p*mKM7i?;0WdMz|)uH4VC4jZ2K8QKeDtyMljB{K8# zJ+0i^+r#_lEyQ)`TE?_I)aHikJmDd;4q~J-`jv+~JeCMu^NpI#W3|N4bCzLKux^?S_ zAk%NoYePzKFo_y70nTdR-oI@mY2a+z`T_y zv>R=T#U`j`&u8D7M)}Vk+Ss=2J9*w&1e}SzfUj93h*0ZXfCw^J50p+UJ*9oW;*=Po z@=(i7fx8i3S2$j(skMhL>0ED7BYQP?pa!;Ez?sliAC`{u-PstzKCV>g#C|6?3dF;^ zF!{~ZGxe{cp{p*N619n-S^BhDIAu_BSmN-nwMWQhy9MD)Up#{t4YjkQdd^UwwrSw- zCsQxUM_v`LD85XJp$&pEnF>8>%*wCdosi)?O7)s9cH`l(VJ23yeUVvjn|13^gGHm( zS#SecrKcb2G*(bmpgz$RGR2V_&D|+#V{ADTjAq|3Bcy(Qhwh!j#{4ES!t+A1;{Yh1 zffCCxS{{gi7MAAua~Zx%XVXKWRD3m)UHWW`Nzj-^oj#xlEvoS7dbdb&^+QRjPUfd} z7hAWdaLlH#sA&IAPMZQE_dB=ZCV*E8HngHupW_nwAXp2&LN7zMjZ{ssZtbTnmuV-> z&!Z*n99u7`^xgwCnILgQBmr>zKTi(jn&(%Rp1o9Dc)+V)u}FwQ~dEt#Hm@5Iit~d z#xwoz&8<37_M!OEHM1KI-uK}KpANeLSacHGvlqRzNM10~&?eA9W>ajcK?Dj$$q<8E zlXR+?C!aQJP_uN@we){=q_B5>IqMidK+mLWQ~5*hg$4c2K}Ta-#r%p+9$XgbE{>Jn z@MfiO6o+PvRP2m;>SGRb&BGd0FxXrE^+; z)CS|perhPKuYM7oN6w81?<|+5XEMkRA#_)h>Fi|uvrp5IBl5p%hsSQZJt&gl>O+_g zItql=buKA<}gPjKQ^aN?h}@uO1K zvWn5v1*hHs;6nEY02E2Ef~}2;AI}dnK=}&K0p1 z&6&pWqojy}P&NcpsHes6$@ul2@FAnfvq&q-eH~dlxkIj9v!7%Rkt?p_*D0K{YAEUCWiaQRZ38sJSI6Fu3j3w7J0c_ z1@+}In%7JR08F+)#lfZs91MYE*w8Jo`UynQ!zI{~bpN#`w|6-hV^|Bw*?mL{OW!?T zF>&x;kvl~R=OoHS10FwuD}(|rv4_1hT`u;f@h%O_pp4Bn>Jyhrv~u^2uG zX4VIfhX}>6TR_Z^zENt;$85UO@?(Cy+2$+lNg$aMh+l815zbk$A#j$C!fH_zy|wFB z9n!WUzNHGbYUa3pkcQk_g2C?B(!k!S1sXnr)Sm1dkT-_)|?Dr^nvpE{x_f~ z4qi6TH{fy=%;TCc0#>o$v6|ToFrQ7#~Ia1o{X@Wqi(TAI$HpwggamGs&vZTY^Lxr5vH|+F=cdj45ALK+J z&lpu=T)(TLE}eOrDAH+@p;fRhS(M1%d6LZe7;8#wfgjX@CkzkR1jjuDBPCh&w{8K> z>JUy$L%OOhcH$~J$s+uQzQ2?yh{y4ms%a3!r`1m$RH)e3L5Cb#zjy69(> z>b5m4+!%j8c%gQLJqQSF^u_nfj+mox;@ZS7JAw-`ew8x=h`}^n+7A0m_T_)l$GPu_ z1$&hWk;vHedEvXaFw1_k^4o+FRD*#Ft|`Z?!2BN;?Z9m2_Dd%!5{f^e?CCmToA+9x zM?KFbII4V*xqy&0HU;Dvu;W2M3HA5_+@gSj2PYE38Gn!5{ogiEP?aC0z0zCejB3$u zU#9W}(dp*+q@VsSRRAB@!(~e(=)FA9U^JO_;p`jNADnN($VC5KAnQpb*Be#Q6&T}! z21#9dZuJgze(->({tt;Hn3;b}?3!x%ZT8)Bg}f1itlQ^RZAgbgz$Fb1s+|w7SB@3+ z8%Ot=Yc&dq+f?3khIS+LM?`x-F&X@ANlF5uq+md{2^LYwz;?x5d%#lz#7#uqb4Z@+ zZft%wYen-d#q;wcnZnT`L(XK&74DBJpMB^MOG?^B`ADSE46~o0%_L0+Q~uJ7Z-QU5 z{o}8L9ApQ(daFQMj`|Yc88xP6bbvn-Hrk{>mGQmiZ?#|~0%dJw0S+;+73&T#nFAw~ z+ipMz0~GOnodUcaxV`U86FVu*O97YLiB^rxq__`o5Ynaxw5<9_j?)3YT7e4pc0}6S z?)n5Jbl=nlv)|?k2%Ie5v;17NcLlK?EYpVmQa~+G0P2HaG?%pmaCn0eCEcey-j1=M z$CxdQmL04lVuksfy5+#>i()a9-c-sY%n&|yD&Rzc0Ms!SLlF3KdYhf>+~Hj{9(<;p zz2cr3ESWu3W6Z0&_`cPIG0Bp5NyVH=9SJuT6{wQ__|Ny6htAD#kyw4H&)S6DwRT!p zfMWo-y!McQO_u+o&>~>r1E@;3OMp^6(9WLX^vEe8*g5RiLv0B&CQmn_PE3;~bem3Q ziqkafGs8}V<0qYv$c9&Cto36}KQt!<65-MDsb`PgzZOX+&X4(mG>%qD(wTGM(Cr#m zq?B72Xi;zGTbB+jW?U90Kky>o&bKjWrAgCR!|in9@xPah7xNNl}%jqFEqBrJ0eS3x@6S^F!)*uMFka*-sxx2`hYL#d_;ee7{i;aFLqSJ3ZYhQdoSlQ| zh(1k#?hWkE{yv@~tFPf=`r)O~MIVUPX<`@N+uR6dgdQwy5 zKKY??tRT7Stj`uh1ODoWetZSJ(Ifr9LPO{%SZbRZHSam?*W^P{3yLfYBu->0W)6nT z0m4I^o~$A{%29_=loQ;u_AqK~^C5Q}A4=YXYAq87e*j zG|T1EhP;PV((FyF{NZP^40?jc2<{C8(y+uhD8ii|H6nWyM*`5zSZ9i`yJ2{Q+FFn~ zNkaH)3G5GiKo%-^T(pi!s^adpccr9iE_ASb`O=vx8`5rqh>ILRQEM?LZ=}y#)(yb? zPx)Hts$1lC^1oNHra_BBwxIiJ{QPz(ro7cuw7mBNMPJ2+2UYhV@KqR{Hmh!fU;YSH zxuCgy8= z=l7z|Fhfiy%BTz&Ie>>0gsEzwPOcxp_9FQi5oE?L|B8ynGsk<4vxkpJ70YQNlsYFh z5Xc3_Z~}aMt)zdLK+ZZ%_(@|@SwDob7nOX=k@gp%@h>lKyl4Y0h>YFRF zP5FY87CpmRU5z!K;03k(!5dAfx1EE59`ZX%{e>{cJwKI27DB})r{GIKM&uynj_kOj z4i>qX2*rpC(B5Ga#y9l7NyS;^<8#yXjqWuMxfA-%*XV3v3Hdb*u<{2B+=)kt$lV=Z zz7hN(z{HZn_?tkXklE6y`G91k=PggVp*UivuLs1}gYx0+063unlip;;K=>yRKbx2@ zR_+)(+(1t4j79Imrj^G~tga!00fTCa8dUZI*N=OV= z;g`>OLH6gm3PGx_5QEZ2oP*nBTB95zRzbT~X5h#)mr~F%Fs0@W?Tp;ax3??2=^TMg z5JSVIEIXj7cG+TUwcFQ+A}S?ChevsyX;nTyy;r_pb>cOAL&dGebOko3lFnI?z^KB3 zg*jx=JRVVLUsss;9uoPC(*8_Zse8{0Q4)Au0B@IG{|mxD8e@F;GJWIDe32O}s$FZJ)8~m{MepC}Dl5R-eP|osXtmwE z-|g8g6|gLs#21L##v{ya;g%Jt+)^Q|>??)V@XPcA)iIiP-NniDt;Ws22JoZCl*@w z?w=%5D=8rlkiG?;tOCp#Q=nNhg}J?zMyEHP?FY=#PzJ%L7iD?2owHS3iaLI$AI)QD z(Hy$(3^>VDtv8z;FBS5zNn1QB^JQ^1MjwmpojbDziq|iLYj1&*OYomxFXU8YXer3J zhq)cqEk2@<4+V*|o3qt3GF8!%;gh0&aNv3aZjHdx?yVBeWb+;Y%jX9M0<<>o?hsC# z4Gk$cqA!IG%zla?DH6MXz!af0m|*Aw-_0pdrX!NCUS>psd_P1@zRw;z3oz zla2Q4b4SGYKMtCF4I6_dgof|t_!jLXdWkB2k1m%Gix@boUAPnLb@kuH`3>^A3*gva zj|)ap`3Pk1&LdnOZp_Cmn~(B<5HF~p1c!}?0e`)+yjCGE=mW~YsKUFjg+V?(+EPG7 z9YpClJQ0G6c2#Y1g1YaO8nl~>3%6qFJ8?Mmqb!**JaW6(ME;!sL_VO0fXR!EEPT+i zsBK61UwPtk8s`t24fh33I*Y}D#L-oxR$mYgmm0=8*XA_ieytAlRlG9KtEivqp*rSmMrv9w@R&%N0FJ z%Aa~sVKmke3Hc;PC}_Ix2|juIvF1A+elVkcfm*r`d<0=+c-N+aU$Vw2vFp!MxV1QM`1-&b7D+eg+T+m-3jq_!fx^*FEOairVpHZHsF9t4$!)d0*j`>x)q97 zq2UJFPVU}S0?sfO=7-k>cVhi`cdBpP>SLiE59~US9t!F=_oY@H#(9XALyjSui!y5 zDHs5kreG8ln+-TRgW3>97zojX1f8V2fSOq_0x^;X$QVE z(uK%A-l4Hyx;)EOl5bGEt(o*60?MbgABnmCPxC7)(@DS4mWWU}CE~0W93T+NC@;8l zSYwm{qF^w}p<)3jO2IvMS4)qAXGR4++wTwY77eAOpiI?fDA}JI!zF)Yfq6FuPvs;g zpn(eBnEX(Gm)=p&MFJJnCG4wJS=T(T+FLMjI{(rIGMDiY3 z!oILB3#th@K6;kjR?F{Ihv|$3cz9>mboItHyzb2J-1LsW{0sZ1*PUnAo-md&Rg!Zd zm9J>y6edoBOnVumY0hSnLL!R{V5u0idKU`qtQ!|r$`B^U)Ruj|;12ULV5rIo z5Tu8n^y)`2wio0p5d;c5!COq0k-7l-?j5DB=aJ(UwZyo0@l)j=o9sAo@h^LRbfQTf zH{_m;OEV-50BYjFgC{%{P)rAdoJ_>n^6Q#l6y;F|>r(5|XFA~3SKH)v#(;JumF$=- z^dFpEW*SaDMesT_ncnZ6R%!G)%38`(-2O8Wub=78@#Nphf3XqZd!d(En`D0c$1@~RMLztmWK}<{>WdWyRG}?%C){_4M&+1WYLF+o7Wpo{n%O>>w-|e z4{k@}Ms|FH%-K{v?&sAK?c`NuSASKu+h|b;&znB={?IpX_iJiUEEH1PBl5v}g#K&T z%hyQA5)FMIodXriwr|!|p$k$+8i`q(U|}2IS*(?uCZ2A(SC2F68-xq=*A#x-NTknO zObSYA7THXMuAS4O*2OVc$nC2iZP7PS>`IXb2rfp#`DIQ>rQ3VMH1BMsgoEi~%dJad zZo9p@Au|ZVUr4!*nE|3za2VdSq5(4YeyOG7F-%J71AaZ9uvkQ59DZBA6GoR;@RcJ& zU;xtekgm5X5&0+9gom9lXH07>$$g_Pr9xs@@5eoT$g04W-gp?BTSp0>gIt$vR_A~Zr}~ARF%r->HBK~rn2r1Jv{&i9t1?1@&kV% zp%ddBvH0b?JjE4p$jP;BgSn{L><<0VnW#r8RLcw-pzaAwx7;5AaQ{GxjSLr9P6op` zq%c4n2azIp35qWov+TQA#L?d(Eed~Y8MepLDuwm*%}p%hxd={MI)vY!@-krEmK7Ri zL;l7!G4(D&^>|wgl)??mjW&MACTY>sbict;&75-lV&HSHZCQ!YKiUln@W2v7OL^vxLl>I zhCCviYBy}e``~&dQ-mI{LY;kg-{|AR7^stiZKJQRR>EWli<*uR0WM08$ds)G!SG6U5!${vvc3|ig zG&{~2K2uV7V(Ra#=pMpAJ4!X1)4Nr#XsG*lxMTk641nfOitO+FdJwu@US|q6~6;%zy}D)7OyC$Qq&Xy5gMUlS`6DwQ}EuMp}9o#I9|9uT_Nn zs1b?r2ZvAyQtj^HqbjxSuRa;{A@>U%N}SBT9CZ~)4&G**dM8ZZ!W<9X=UimH1wZcr z^Q#1^u}Da*TF5CZaw(VrWt70cch zJunkm-{v?zNABnrlv$`%A<1Tn+DCh*`Elr6a_YnMx9nE8;nGVbv!1XB{r=Wrj{4(J|8<4ct-CeeZdazz^3>oU916{^L_PDlj)$Z8l+ZBOwskAI?M-T8OYe-h zZ&Sz_6Ic)cW%lD7P#6UkORhQ4MHb(J&?gkF6^ibz{N77?A_7?GrVBdgtSQg-jd>8=|MrNn0Q$hFab2^t|TuW|W*` zKXPHsB>^zMK{vwWTEOHCELDyj13h}6N|J}3qFIpWV1aQVwsP1vbf>T;YZmjF;lyaB zqKEqj!9BzLzPS6f82FIf=9G)6=NOb2zGWSivB@gC+MQVUeC@>dzNdUYggZK$o7H|XuW?^kh zBu`?(5f_RyD)mOIAroIhS?9lfs0MXHxe!9={6WkF|=j zBsF{)e||S7CNZ`4=StOQz+HYlCc}!*dQcng9JHlIrwRYE8Oib(*oL0oe8i;aeB}dJ z(SYt4(}oA)B!A|=t&~Q|!M7xK6TgQpxmae?9en&llTvb(41R~_^PHJicZ=DO6hSrZ^|9Q4Vni{IgLZ=xct zbcjIJRrMoi))~34d?^!^qxup0;dY``v3zre?d5p90^tj&?bSd5VI!4=&(3f(m@7od z%liwDOWeh0-o4>Jimoy&i#3SS-Q5k+ozmSY(%m2}NOyO$bOvm7nOLg-iLQaNxqq9K`UNY@~%jC7#SxE8hUblRP zCG~683P-(L^wW_5DTe;^vbxgVbZQha(yKuFS0tBX=&adP`h5j|^XLYT`T{_1g5$-c z%j$8RdP)Y|Q{rd!SG5KerJ}5Yo`Z0llZG)njduonjzK%9zn6u7#EG_!k_bXIs%&q3 z$Ys9HKD8j@j1^m9#^>pN%xVO&Nv_yE0pr(7x@fW%PhqmC}rQRi9 zeYuZkt0qvA&vdLi=MElIJOnWhxxP|i28X}xeZ?tM^+&-R@~fIS>I=K#4?r9Ge$>}Jsfl9Pms^l62KJhKfGaTF$Y zJJAl3PHL5?XdI0bq?%ESbGB~*1t1{^CG`=wy97yd3nkzI4{WTO^|-#&Rn461emURe zN)%xmym(u%etTC}*q|<_W5Z?B5l;&MDiuHrdZF|;3CzR#V#-k#4ss=($3M5JXDr`% z9QFlk`8)zGirHnVOsuXv&LI^j?Ptg+zsy0&G;4f{BqG>aY% z$Mp|+;gnm*3AL6fZqv%_OF}b^nfgqAQ35)Jh&N!f5G3=5C;_=eL<$**3jWU4D*r9L zmk%(^TZ6tspKS4^3D2Emot!^!R;cn{sCHV<^CjiQ+)MlLOqIj8IczrrgtVVb;_i6| zs8fA(h|!sT;sBiv;Qy=!0W7bgPz3zdmN`IBHY7wO{0Q5|gxO9_`tY|F9nzHV^oS^QXQ3>3X0A+eTqpeJT{Y#I2n`L zMQuBjmcqo3myu7Km#J0hFZxI>;whYJCufN}vYwh3je+(b5;65sFYg0ZsRIGSDJ;YQ z3NM+ao4&wYz2;e$SKc2?UoBEbPFG$7{ZwXWhV=d{YkKUIoilmi?u_Cz=1k7+La|et zdm8#Eam_3UPC-CLeR82@wC1&M?8|>rR`>^rFM3-QNiog39sreDn@^D#11vcPN(rp7 z_6}XE=WMQW?XjMN{Z-rL6ills(x>$ok$xfGHJC;9`wH`WT5$Zqh5g34dwa7 zcgnMIN3YD&f_}*y zVD2@my0rnNE3=U@v6+XBOLC^|)>XS*_T2)W!9kX*lG ze`0euO$a}3$ES4Hhh-tZtbAPNs%y<|mpx=7wGx)v5`PePxGv_&3nOgvA684_pp4hw zF`0-Qy0RS)7eIM$B$AnrX%&#W2^0z~2+R{T&7Cf%nAp!imeyIK-4sff{2X%%qzi&< znbk1!7`n5_g#1^#PyW+Y5zVn=nZv z61Ex<`Q$V-HwCYHX9jkE4?gv~&(=!~Etcj9SkQc!*uak;AfLgBXqB|&j*D$(1P%2q zZ$#Q|QX=WpQ29XCj>Q@3>nO}Gq(Uj+uoWD3PDkC$(0#%4ITfn50gh%;*2TD*Yz7if zF@&PA{5^of40^`EjDPsOundJ*EQ|kG#2MYnMCh8tJv%sHrGKuGD}6PgU&90B{J{-S z(aw1|wVxA*AwkR^jc)zKy6ODuYlcx_Z(tV`F6H#^A#=uIfWif2RWaHDh5u>5$zMRC z7-)!0k_H&egZ`E5*_%{vl3Rn73fPj5h3O2Et8|9?hW`Bky&5%^3rE}*(n>V2cmx(i zHtcYwkTeLn=uY3M9!q6O_AR1|SKOHu>Oqr7g9eiZDt0GApyB^$!nryi@b53{c5-}U{Gt7OPv37akDRavg@9HMBn6F#4rAPC+~vTdF_F^iSvZiC(v@OG zDZG*Ad6iCTtlqcGPmBtbegLadJaj-o1Vl~`Pk^Q$C`Rlp1cU~`6>Dm@r?C}?%5CSv z?X2fH{2x!pN{JU~pQK$=O`fEw^`5o~QLC;~L7VBD`R0{YWH^L$OyETh(wsfC#=RACKW zNKwUm{tA{vL6b}*23>sH+hIs1RUxc!Z<{5ty6^F`#{8}dn7)tIYVaFeDr+%%n$gR> z6&{~+gvc{0zv3@R+@wxMnDhoQ%}8?(mTLF5C1>rb%L~;bcy9p9xS$r_f=VxTX|uOW z_O6^soEF77Ke`RcE>@P<*%SxWbmaAGl-2^PpgC{(c zb<-Q2s^+Hage;g^>(Ws#O$KWm#d*vB^8(0vi3XvmCV(0iMl6*y` zxWnVj2iw6ENKOs$y9O{40Be`iO<-smjGDf#CVE-;79~3FF=Lnbs^@DouljN@K`mVxG4(tBZad%?NM9j=Tr^g0v2TOK_ z-oZ@vX>un$)5a8S%(Rgyh=0ZG++3oyUQaUus8gPHu*F9@-Fu2wdkw2tamw=XDS-TI z&_wQOAJ~ruUrm7(aPAI1+#4Z~VGfQsZrdojDf~u;SmkaJ;|H{yPGj;!kRVntj$4)BEJ}CkUQIW+Rycv_SfTy(DganylY)reJ2ZuoCeG8JmNRu2}kOcfN-ee z)m|C7-xXtg!ZWu<$gW0xdIAHMjGuFH6sA#mvDi8PJ!@E!WhCz`;!~*Gl#w6^BNN3K`2$+Kw#|oveQp!Hl9CO ze#R*yT{p#<-B8Z2$Y#~!4%+jl3&g-CkaqySNT>q9;{WcJBY{~BujPy2y0qtXt5xr4 zn!!-tD`#nmdIU1r--Yfk|8z_(0p~cdKE}b$`Iv$9+M&X{LUG0piJb#L6+by#N}Hox zh0HTU59ldyb)SFQC|6Y1zJdKmC+wPgmg-ILlDqWnOTwkwa->uf+Q``vv6?)$&pRmhP!CMFR+glRn&T=1NRqtL)zIaHA$8%2ZQiNY4!f;?=I*-e)aiIP;p!b}A*KxA4h0q7?rTxM$c3Q$QgZl*cLc z_nOk%PXw;ojH_OT5^QtD)$%O5_M9VM#;1(ldHyqX#eN3vw7`5eTMv|~gAsX~7ia@j zRRR7oLL-Pb?h#`*ht1cUTf;Z7R?mBEx8D}x_+*3r-Rqa&3963slNS=$-)lb)XBGx& zB6J<~eEsBw^;I-cX(XT6)86KV*o2+dPKb=sI@zUg(Zktn>-OSg{462zb;^7Rhd1uV z?jT>Jc7ZJe8s~!xITlxq3rsmtz^GTN$|}paYZ|tiBHz7j_8rFOd^kxO>yII1SS~mp zdbDdDf7}Xf1nF_%zZ*juf51pk1dO;q4L2U$VR5MBAQ8&JWPM=d$z-&aolm4LA^AO~ zDX#q_YL6{a2?BsI4bFvR&=qf`OKyGMi2qR%(JW6jfh4$+R3eJ;2K&?77^+l1QtU)` zfI4`3!u2lZ_Id>7%#`aV8f+*%-fY0Ziq52(Bx>lKp zT0uk4v|!l1D3$ow`giJ(gos)z;w!XUo_U$TQ9H`tjv)EhFsxvD^rXwNMB7+J+)&R> zQk+7mPcy-gB&4q{w7==zU8|65#dy1OzY&h0chWN82DChjdMc6QV+H%$t6D{iyh~QN|J14e^TBB^q9eA_i9W8xE;&Ngn>LJ^fck^1*$1Z9>WV% z-=Ou;C7GEJ7ekewb(H!X=R7?BOc=cdh z_KXJjAwhTJQNzh`>GF)=*i6+6{pa;-xO>@1+N^3(rZ#fh8JdfgpHNjCz)J|I8mRsR zl=6cNOiM9vP6swDKMwGseN)s~eL|ZLeKww1BM(J28AnK2hR%T;FHI4(c|_aM1PFM+ z;Pf#SXaGG~XzaoU(q(qs2zOb6XYz0PgYO{kvCKF4y4Gm(8`aJ;p-&|;IRGtif2T~l z@OPN@1V=RC%QA8H4h}p0=k6f?rnKW0YVAX2PyNf153G<>u`(B%>}7U1&4Gws##=^M z{}|t5{QO0`fwz%u^h?CgEcQ6z0ZLHe~2x$JuLyu1+FdcMRdc22M;}2Js@=h(qU+(z-$FLNLH{$ zp^ql!P(o%0`-x)-bA-^EtItfm8leYUbELYd0-K#g-KW7*&MQUjbr)F-7r!ZW7~E7I ztkq^A@$*B!!Ep65r(9i)Qt7=?UC07#5P6tn?9Zk6Mj`A9|9Mt3b;rV&kN|7pn=F5; zj_~`s#XP^ea0lO~Oky?a^#~T{QRd^-J<0VpP>^MeKvG-OY$@+TfNqW{cuGfFQ7JAl zRCiCc?v~D35NMo);sc1XKvF`vsQ@j_AY*;rTR?^3Of~W;*PtCqcUL5`eBoel8{Nmg zEyxNwVwTtSi#S&0Um|`U{M>x%!TUOUNlppVsCyD5*Xfl^*Mv$?vOc;4S6dpd(B@$Fo&Y=9wDuoA6jW9Lx=;okYgeZI4UNpg)>P}AFYAiYue$* z-cSb?vq20F^Wsd+IUz1sfoNd)EG5S&N;*13lR-Sh%gwcj*!%~Usm`lyELLYT%y12Io=UKzaX&>%@3-W$S-^Z}{#zWCM~Y#KI`3TAV$a{KP5YQ*)yOE%~jSN#F4q zSbYU5UVdYCscayx80!pn-rBIs2=f63pwmu(ip-@xMx7hDmX@l)*(A=vHW9;Ix(+5vA)TwX>)n@I<*I~ zT&zd>=uDy3^I<+?2=eJET?pt~@bHJ%mijb9B@mT+nfX%AaL>>0wP6U84ghY$peD+3 zl08{9;5hyv2!~?_H(0FNzHR|I$l|xy@aGv~Rr_~7?=QvGqk_ySTr%Uz$Ei?}t~oEh zO4MYb%ZE_RP|@KRv+R5$Ol|QHU(LRj2gD(cIRzRC3yoaSy&E*#nkww3U#)1&DN0IK z9!niiAW{j=BO_p``I!&C>?eAWx<&`k{U~*G@`3e(ey#FcQx_F>ayo?0&@SCPX6m~N z%48UJE=ljbD)orDnM330rmvAIugn8|GFX03{zfteymJ+%Xh(0|KaX2MmTTNfuzfe0 zw(E3|Vb<%|KEMvmBd1FX+p5Vq|2k$N9z5Qg&%>?^T%)m5xo!rgr0&UL1HW)cP*=KZ zAh}AmGl*yY8gN%Yc?BE;BB1dLR5%VGk_%=GvyV!YV{WfbPCBpWiSu9QjCa3>HW&!D z6?#04u*kjI8^a5LRXQ`+=8uOYG5KY7$xPi&WcKA6^cMZK+=V+QF=Oa(6^O&kSizu6 zssNm8gN@B=jcLdO{vDxqn?+3z9k^~P!jLU4L6O-t&Mo^|K>8--^THD5e5(m z23ML?=0M(MTJy4ly)Gwq&8@dend{VmzIqvZ-g&y{OhkBxfKRHx=@eLdPX_@w-|#7H zex%!&&vbvQ<3tbb9XIone98K5H63-)J%F4yULb|uD5z9*LKnf0{D6`r5#?^G`Y{JO zt3;V^=l05WZ-mTzGLh3#3DfgU7e+XHs^~$nHoz*qxUvJnzs?Cowp+e%k~%sOGDEt9 z04Q(=pO5j&xkTrjzsCk2?G*#j;MT5~&+*MxJZI6SbINmdoZgbf*Cv3%5Cr)R(3dls z9GoY%v;{xjI*mre1!9&JMAuZ;DVFrVAe;92dh$#+rOFKV5fpi!ZfU?NV)QYsZ1A3} zxWg3I=A=VBz;+{EFh9td?WO+F|M$!;)>)=H$aycp|J<`|qB7t5RwM70Y5WGUnUzOX zhxF9^VpXt3(!sPBWGn_OiqCWOgWi zgnO$XQCZ$@@}2$DEuFMi_^HaW?2D^$qun^Z`GSygcdyZZJ+&?ATl=uS}Pz^$kWGvE`Dxq z_mc8J)+v)^%fvAI_}NPr_}c?!qi-&0ZlHkAu?uKu2cOS3e;M=EaiSvasc74xZSDaH zZ7|Y*#xwZaw`!Q+Svx*1h^Xt9HKaY_C>xazHiZcp4KM*Bthx&1TtxV>5KG!J24fm$ zV$PsjqIzL0g5`rBOVy~1aWl}uxAUv^(UWmb9e)3+)8)E3U_+}PZCj^l>DULj~5 zF?$){{k@6cErd=|&}Kl>;?ZnY5=Y+!kCA~AW&LwU-)N85451pA7@}$6m#m^66@tR{ zSvl|CfH^O=yYEL_uK~wB1r<0lR7;{W2T7UM1Gg~%O&10Wsxmpf3KsmTvqU`Rv8bd) zhfjfTmg1pox)u}(OATD`>feKze@5k=C@2>Kcw^u$0<`6S$tH-hiB(ebFZ%nx+Eom6 zp!kJ4%c%AyE$DppB=RX;*nu~Cux@7E+E1^l442;{54HNq7Mj^hU`x(fckui*bcAS+ z{`zXh?e7rqO&ipa7QBvwdr!uU{Iwlg;W}+2e0b|;84Po`?2GD>o9JrFn$)rp0g54z zA*fRWbmXuorL~BH!(eh}3%y7D^7kC1arKaeI+{^#N$I{QtOKFpn22G#){*-Uapj zf<5$_P_{O+YFjT~!39*DV5m09Ay4NQ8y2F_y>cEq2HxwjN^#dQkrd=rVhj6q8J48h zuPBq&>(sd6$##|UD&O{mlc%#Jx#Nw_a=Aw)BhAn?h`hI*xe)q2&e|WvvMg^dQ8TNx zOYHY|o^j`DZIE9`9f%IX>UbqAkpN8tP_SSEI=|9@1RNeE;A{szsIL~FNejXn2`D0$Ax5^6MN$==^te)JPCVciCv4&=g}%fI0mYg zMo|0z=+cIu(cif7D*aXB4O&)^lFDGR_RYW+Qg{(-T=r=m9;euZPT$j&rvt`AK&W&X z-?B?*DnI5xNZltN+SEySmzqXxVIBQLK)^1XHUfE8a$y2kmIoP@<88os9vq)7X199m z4v77E!+%wve3V)xH{D7z`xni9?z0FMe9ffipf2q;5XcQ$ila0F{bHa@4+B{QA7V@W zpqWA^Bz$Huf=zvrQcrC7lEN_@B~2m(zn4~D_+_96@DTA;>5YFq5~H%4GccCWYC_gG zC`bNy`I+-Ky|5KZn52k-&IDvcDr3X*{<};za?~{{3#BmWOIg?D`4kgj$Pd8>50*79 z+!3~HzI0O4w0Y7`!kC^{$k&0sS>B7eZqj@2K&=bN6w7%6l?5O(uQctQ8wRPrd+@ci zJrZrr9&2>{RjYM)2L6$)k(%HwC(>0`q zRF_c7?R`C8y2aGYVLO4^X0UHhrUzJbf(PN$7Ff;)Gi2QZaJT_}JR&WC@fX;?hgw(I zwmyIO$9K!jDLE3PDI+z>-Aoot(ms z0FCtoamEw_LWgl<9|xb(k+yI#;ZPvMbg?-}7x34C0y^j?*0(&`$> z@K7n|0$4`KoQ{0TJCMX|D~PcS%A1nHB}lO-pUnqcexqTB{4+uqoJT?h8@G=Be(2OB~$pV<^(=!dS6|sq$d6k-rk|do) z1Z$-#lm9 zu5vnw6NPmb7~ooR?SvTC0jVpnuE+ZX$PN78BW(r_PeI-&3k}F|15GL%>?g)`gZie zfMR~SIYRq(0kcehHl=HNGc6`X(P?2KofS3o&s{uhqh`4I{gyYv5{K0q=&TYW2(02; zTO#e8&r8#D>|%`if*m)6zuSfM`LUaHmJ?U32Ao*^bf`7e+_Zi~2*H_%NV3~x`?KjqttylccPNZ# z%I$GbWL*`8CHjX+b?U|8qRIQ+h;^fLS(EM3~T!-`YtlhHIsJuluWC z%ZF>xS`uPH{(G!Nh%Zn4VcwHw782?qXiv)~7e~6}5sdGT(?a+GO@#NHYXa}zv$N~} z$X}$ZxS5BOMC>j$y1$EK$oCcz-v5A&CLxAYK6>8EPG%KJdZFUP+-zE{!`gx@wdI9M zWkl1^xwT{hAOj2Q;nE1~g{kZ&wFnZ9;PN@BSIL(L;wQLcEQa0@S&fPO&t*r3z^(0& z>EHB4Rt_^Zrg0>8JP5E!m=2?Ui!LqCWO4?6*t4=&da#JlDb)}b1Nw!){1~3bnp!FJ z=>n_d7)57mNWj>9n`OE*Z>VD~noX{@Yyp~>1QkHa1u3arYhbb+EVyMdfu{jb+%Z(8 z2KjyMlRGw(7i$^sfKC6omZzX>PW}I4B6VRO1;;?Pb5hAlE1x;pb36p zd&4059bY&8?G8`-`CVv(HnID}TAZbq_>k{nr*TJ#jt|2e^k=J&fq+|q(`r8=_w!de zP@9U!Xh&4N5RXZW!G#Y4{Aoa=&h=U7}#FUWv-5>$qN6nAn)4BXc1JXfG@S(M8W&%k->JS)bj->#(1Mm~% zqyaFgVDB@X1sJUaf8m_yE-J!k7J=-iRoqUta*?&wnzAznMge`(<~-FbS`NZJV^K;TmRGEvy1aN6j5)<&IPeUgLOq|l;( z&^2iF4+pP>C(X@0a{`wwVWChus~6*|IIivK{qH;gezDBlrWw+`+4mdoRJT|EPaa@> zdWJ9HyON?AoNeG-CjutTlVci@gE9wzF$?m8P$r$^cBgS@TY+Ia=>kG|3{&;++OlM0 zgpJ`Xt~TDg^kncpSY`ti7kO95MUK)|5wvA_{$+=M5$Xk~#U+|Ozds}d;I07~sUY_B z-vK-cK@Vn%eFV~O=hjqOgw0qCu3DL21QTMm@+^^L-ORQFNmyZ{w(@r}w-Lh&W~MrW zL=m5$MFr$_u+&EcEDNQo3vI--sWKfPyMdevkN{SYlrR|die?Q+^!JQ8E+70{>&;L# z7^d0Ay2SxwL~rN{^QQth{RD=4-dW%dA52DVHIr}0zZH}5kB|5{TL@Ubr1T~ z&Ob4B%%eEe%BN#gn8T|1*%Ghn7*jjsn>~8o?|xKsjT$_ZUaT6`Mg<+?(? zF#S9^io2tx07%BkMGO+$f$lGBogz5OLVE-p9*nCtkV1*p;t{ePz!@79BGjQKu&xSD zeQZkrM%&H z2Ua?RYw_*t7j2RYl+;M(LMY)C z^RX4BJfmVBN4t1E3mloprQ_7GB2=4oBq($=EiL(nxYg?#`ArU|hnEj&IzoZ1xU1QK z%KzrlL&HEDE{LtdyMTuw5PaLCrGzI_*aRQ7Wy<1fk<_(Iz!LP0YUF;lJxU*pS`5($ zFEvxgmto^}dafNBb$Sh9OPQklH%dUs{B@7E3}b=YLNdDoPd>S2z}!%^f5E}v81IvDY?6D*Z;(XXJ6A~yu1NVuo8os$9db2kx&Z&ld5hfq+jXm&r zA*hc>_`|Nj*)HvrBxSe>xaELwGr9_}=m7tEgSCMW7-Tq43reK(=})kyv|K{88JV0#~7^okjfAod58ZSfM zBuK)=LW??{yK%p0iV@EnDtFn}bZ~#6QLO~!$VRd8js zCJqTj4lA|*%~F-)VjZOh{E!2I(!hf+otWKHs)Ah1Mv2S1jOPfx#hwgr(V7e%S+GyZ zkACLNC1AA$)a?bs5&S`{T;6g3xDZwk_w8kz$8em=H5O6Rdw(Ntm?_P>c+~?iRAA$M zNC;4f0l`?PB4DQr25S07z^()g&_sAZq%L>|p+1*ab%)fa+7O%bJh3pope0$x@+7l} ze9;&GCI#7Rk14RD;g>2nvKqBaN4waV=fNr1^G74)FWu9klb&xkk7H*%v*|cd| zpOxpXoeXnby+-N?TuwPTZeu|(_FC^%b5;lr(Q2B%G~MUSaME8FjAAKe$yDl&Iw9`? zO7`Hqo&l93M<%%OFguTHLdn7wUc`!BH)MiwSEK)Dx-3lpRT5N}d?s>HYK2|+vP#>Z#+AnA#Wn>Y_Ufv zpty5R?29VzO2W9yT==>=CphkKE^Yiqj0EBOUdkVmps837kTigAKCs8V& zexH({^T$3~ljnwz_t1;;v^NEN)08j-(SMx_mWC*#0GtvCuw5Bax;McbJH^PQiQ$Sq z7?#eSF&?6vARS(oM}qm(|d)^3{mfD#u=b|A)}PBv6e!` z`Sb=b;)3=or`$Fi47NR1drHtDwG-i-Kd|vty)DA?gGkEYndM4NMe5ph5f`=oRIKinoUhXCgDf257LEfrt%!ft3r>PePvrNxG z(FZHtoC7!#;7oJYGazIL&i@?h0AxYf6gJ)7GOYc~GW*J8#~;s+33GWFi-00hPFf4n zeu)^Z@0~FpWBe;uY)JXZU;MB+CxX%1UHe>nO_vy$C`L0o8}nNk;W$8RTc?w{d|jQ8 zTMd>DG{s?WqNd5(=#OL*d1>dY*zN_Nzaj(Y6L_G4#$z9jhwGFF8oP=zn`rg9fZrJQ z>YCRL`ec3$8rLj>ooq)z>|Y{bDsE4m*L7gpVsHZmOu)`msyv5heBO^J+vY$k+66#H z3-lJaq;?i$!wtxde!gi{x}YT*vG7(&p3GQKr(F3&Lh#_y$d)4ARBYF09}%0Fa~A?r z_ICIF@>@?ZMdF@&faHy9RNfB-XAAFQu4Lu|J8nw?s#1l!QWnVp+~3dPglB!PxnwNe z3T&jl{!;0GaJ7HaT9=cL|9a>(t8<+8Q#@Hht}mfyN|V@^miy2Q#4mwfIQu*PDQ{Zb zCe;}5XpXi}zbA&OMmPN7XGl#txpp9OrtHyrM1kEHFmZ;a(zWGzox!Vj(UctFm*IzX z9!dq0qU}5JeN0lwlVI|OVex6uIejIPk(R&xl_tO)P5#B*51FDBR?1Qfe%h}be*n=K z4)DJR^T}c^;0OcSIYCW5opX5ZJAJUTe#vBV`C#SXAcB;0X1OS}!y3rB{WH+Ue65Y6 zQd0?+nuz~CQ0B1dY9OK2#igtKA(^|O*^M;kGd_lYQdN?FR~?!Eizr zR9>Aw(1eXOG3!0Ks`=s7vE(VXShT+(PX^kE!qE;<<#rX&>;O;kt%jU2FoO4yf5e~IsmJI`nuc7*t0^JlMJp+$k@viz8fD$Wsr4+b8^bFy0 z8u>{Z7KNLA{w6&2+e40Cfs}j*+Zlx-X&*L&UO{M8xBW?!(9UytD}vRHLYiM6DgQ%R zn4HxHw%sG>v)*Tz4}m0ZFxYePJLodZJjhsH#>{EHV2+(h0wG$ zBHp=1ENL*TrI)xU|5=`;sgINH+(32<^-PMsAqJcm9ohvE;3*CE#R$rYcEzDT;H2fU ziiT4?O(EZY_u2XvbRE9_kbJZ^mro^|IiNN5fT7gIt(F6aC(Yj<&*Zd#aKiZc>=*I^ zGaJPuiW9tR7N%r}dzQNj;=&m0F*WxAYUKNfe++0B?&BBrw_!a-_kP13VSNMJ>})cFi%Dh%VS~X%OAaLD_cjS zGx8qN{3*`>P>fNKkeMx&PvObEH?BCWZXNPE_P1McXR+Mj1E)wdkTniQok)+#c*+iA zSvtPl1mSH$MY(nXmGEzL7GpWDG31s9D@QnE2f#Tmc!A2dHGX6an;s~+&WuuUt+vA$Bs_oh=Isvn?I5O=0!LdSEB#894|~36YVd6i zRNVE0zm*Jl$qWhRxv%4* z%-!s-Pd_#eN>Q_;MTBPlti~UyZhF`;y@%1X9k0h z13zljaVfEK;_LMk5*KY@vuXqfYSHx7B8LXP)O~ZX21YeN44E1UF#Z4$p2F}q;c{;B zOT*&)M2@o;?05R5LR^~TG&I2+Ar=k;S?N#NsG;qVUnW(1h|)GSWDcUVBTk>UIQDA; zS#x0cEpy_j zc5OAj>f$~_N$M)&{a9i69U$bx@Oow*hl2LgrcTMh(4h`{2 zsAr)ak{&Twqzm_bzxW5{u0Ml64Lt>JzXc}?0~(b1Gk@1BBHum!K$c)5GVDv`QPaIH z!F~Vd8Imbje?zBgF1{K=UjSo>^oJvkm?%V%$SsZy-~8C~%p>qe0ShqRfrSMX2nTq- zgAJ9_V2dPpb(X3~KqXM{tJFJ-W5fNI^XJ)sKCh>Eeh3_ZC&L0*wFX1!!xsRj4@8)} z@e*th9Rs({#l@W1%ZfNES4tOuayo?9WzVv{%OE97oN_wCP=PY6X4DHome-9owN3pWOKkofhMG+in%b&k)_vT)!`if520i z&Unk2k&rTA(393As;=MN3(=T-3UnGvbQ{9B5n4R$#Vfn)Oddoz)nAv>k?Sm8KTj8O zP!LZMs$$%PkSdINzOE8Dz`Bh?vyqmQVQ&9MA8e2^9D(g4SITr`2l#h^&A;MH96VGw zYnWP1Mz1+zh>p~!1tur%i{-6ATBtpAnHnv9_&*w*qM1o2YQh;54-H`py={upMW45# z|GtTy#tw0e`m!Q2>iRNcJ$uRakKGtTp!@*^|4hxt{hY+UiC6J>ZGi3@}OU>)6C#9F(Kak-{mz_W_O=V8T4~0qj)3>$W)vFhYY`^vK=)*QkQvxPF32Qccmo z7w7qGjEbZRqq?*AO}B;ZolpFY3bkz6(V10k`veIdN-Z~R5wreqcpp~1l}&|UC=%ZZFEO_t zn7?;(L-A|0)Kk(#oPNk30ivTpH9$W?Ix0xI&MPQ2o94*vl((fI_C-GMUKLbDVR$d{ z8wMxCk0+M3gd--w_Ung0k05=WG6QX9T&~S68`<=xif1wFew2Gi9EgnzDvH9?%cz(y zc;F3YoAk`$OG7(j_|>V$I2x6HiDFUf-4bdh?!@_x{wa@ahx3Z!`xI-ZH>&Vt7H;th z3s#j3(F1Ezfa$@1cZPT@RI#>Ur+EC9Vg3v3BgFQE=AOIFI^*AM)Knw6^VcSSHfk0^}2;d!~7+JwyfX zB*{TvV@Z*~=?uri3;`e50XYEKDXKhRkru>`+dqM2&;K#x2EbSjz5=sCz^xb@DcmMz z|5BC8K*@sH@d@K%%|_}(`OoRR*x(U`T{)Fk%aOZkdElMpfa&CuZY!y*1!B#rpQj~~ zU`c?L?`(>G>pzY?Nc5_@(vPNEPOp!K{==^IFw6hQyX!_wO1D;OzM2PNa=3CkLQ4Z5 z&B0*Vzf7-H)*$ySdjiYz+rO8uxYs0ys)v-277r(vYC?u=v{KflV0q-w^?#DY#i zax4MkP{cdgn8~MN6-4_!<8De+-4Ot79$7B{Ck@G(3weQ-i1_c*7ueixg4jyF#_6k= ze{)swFRq!l7cfRr#BC5AoWmc(t|7{ow8!x@1&GF3g*hk*NhUCJ!$1-wUSENO{0B{9iYj zl)7{*nMxBl;gbOrY?&snHbNhD_u}2X%KE!5Jw5zlcoBbO&3~%qk>~0B^qZ3Or7@#9 zfKs5*ZnExVLRc*+Ap;v_Bg?mQ74#S2qd3Shae~cr77(gMChO#uy5zb*2r9SdS-Lo7 zL-P$GlAz`UGZ}aAvWgu@@GqtK;yW)6WMV=aaowsNMd{sVreG!;cX&7?A0@;cL`&hn zqycwi;Bq1Z%Yt`3pMSK?zuxohM!u_ceBEf`UwIeM@nv$KK$u>cVELpZmSx+5^k0uoeh$iT51$d$6Q0O|B#BBo&z>QMIP zhWdi)fS@}|lAYf$brKkh`h1nE1GwHZm>FPCvbgc4&BN{P$!ShyA0TD009jeuK0RxPN?? z-T@;vu&SZZ5K)&@@9(Xe%bW8Q&xBAf7{S4ojvKseEyS5umr|A0Dh$Ws*S{OQ4| zue5Z_XfT8e6rEh~C+NG@HF%hBZ0N&cr#3$GcD=u3duXI`G~!e!JOplFGI49Lt#}r& zG$(IeKRA^psMC-x_Omz7_D!ia6RZ+Fau2Zvr?FhQh;;rkc-khBSBO#KHAkn#OrN+19fUw}=Fyi{P-5{xPHCjfy6*mzV4 z1dtBFRH7gaB*uWda#??P_9%C}pThcV+p>)Y?I%D+QcNfYw1v8G%xI56OdKIRk8zq0 zAZodx>9WbF|6#XV$K35Y?%)ANPTF>sM8kw%#kA#sw?1$@Ykuq>MNsm5HM5*K9$xFAS(s*U4-FDp7GE#QQ$9~Gu&-p#Om3A>{Q?ZFf!zNKYGk+yovQk>p}MFq%!YD;mZmpuzgzv1USI*m z?=<2d{UCHeZ2**SM#lhe%wWmJTWe?A3zMSur-rXSp!@p>{l@9a9fa)igUboVSusLIKgDjLcERgB}z5_KC6eH}DqgScY0T!p3pBec>EOa3d z0tJlB)2ljXVw!dAertfjKhPV~GuX`L5CPBp<9^e_cOn)#Rn9R>wIF(?N%g9^>HCj; zbp|Zr@eFgsnqNhHt;!d zoCc|Lj}9zm`pryF(V5tq%LJ`clo@Hmworq0R3cSQ^S;z>gqK0`{mzprEjm7= zGJrPBGDQe{yarEQD3re@UzG?&QyiYNO*S@<8CfyQ86CC)KtdAU=@qbxW zc=y|ZgvqeAY>GkMP z2W3wN??n4oC5`T!0RTKJ5hKz}YvTp~kttQJn0cIXbNuSY*xK@VM#W&^O%ZXv-}ps5 zLZOBpXj%r3Co@sGdeVsp>qmXm<6)cG@YrE(hM==+O0VKF&4zLWUqC^cUl+3j~1h00TM2 z7jV)9Q4B67-4sAWG9pX0_!o;Ov)mB(Sv)>XN>(fOjuA{5O*4c_s36m4%(7 zj7{tLWIpE4fZAP#4~2;=Zfkw{PFd~j+}8u)Xcnu~%wq2PxA0%%RDNTj3FJ;j(<*%( z!&LMwPdr690F!Xg=K#XP^}5-=Gqi%;#i_4gO&-^J`lJLb`-D_fG-a`39++oxq!y-6-obE z|3ar3L)mi^wl8ShnTqo*96PGTt6#!rcLPvS28(H6cD`+X&4THXQNSk|{;Zxyx8#F0 zp`%K30#;6^$6)CY23Q(E6HgD?PNJ=pWZnf?*dP`X(53Kn&Uj3}OYbcM5CypsXE=3; z5c%)lFSQ}3eltl7o99^$Ej|p0P+RXel68%^bcAA zu0IaAvD+EFBD5iX_NdDdR_Mb051^X^C&DF9H`sff&*A!tO%66k9(2Fx%nvQo^&q)P zjtlVWN+g6?tg0FjV-w^*aX%TrEG2B*>u`BjrLAr#MbCxzgwIrRl}6DOLw2Y;f+FgY zC$2E=CUmjaLrneotgUi%sYmOm7GoJ9vExSe-mfq!>Te+#5qE5&tL;3u7qqy%Ccxq> zC7x3_>4^)i8@h3u0*S+04+DYd#JQ59y%&$(Jm&4cd>n)(RTB5NM27OUxs5cFWzDn1 zsDxuav*%7SkCFi_`=tZaj4SqpVvrf zO7xwnKE-Cncddwtcu(h}Aa|K5SDl7AQxQsAM7ijvWLerc&6^ea&1Vb(O`S|+kkagp zN96Sg0}qXe7pIV6q;pF(21NAZXYT(_G9HP^-V%*t;86*GB9WWdC07TROhy6mp zQ!P-Ug{lB_E#QEtXLNn=9NiWxUV%>Bew) z#7DbuXJoQ&_@0T=f8rpJ^6s%n-K+ESnlasAe!Z-p-r_!h^RL@}Tf!g8^7I^~NtzjG zKegBLQ_0HK!p|ov9JfO}RbtI^qk(SXE;y*ZQocFyk=Yl4Pw~x@U3Vu=>Sgf>KwU=3 zVJ?Nu<D%Gy8-Mk&k-6(1&SMbyrFI`R7ZP zP!k-GyrW=7=L6D+iJ6?Zhzz~)Am!-R!$j&tge#j^!qmqr8z-|G_=#9TUY|Kp0y=n0 zjqi)bm$(aOnxOXaRLp%wNnr^tNSezW!Q5zQg&30o8Q*xZVElJ-n zS7o>#fa6AZ<~VVXFJlDi;e|;_N&Yuvnn+4(z#~DKlTe~TZkB?YJnp-;8PVelj9$~w zd%9hCs$vlu`eU$QojD2KDC0Tx6VOZpx2F`+13hd89jf-lXFL4Z*Le0&R21|wnnZk@ zJktE~dwVhHHz>LCaPs=&AB7bPxEBK@C67}-QI@LF%(pE|ScxzvLtErCVc&3*UnT~S zvgdMhRu4xbC|y9S8mno|tpCSZVK$bhta$EaZet|nvjXlD?mUEO12T_$jFR9~4Ct`{ zl@x`$w5+!G@Guwbk6qk-*DFYVM0R`^%W!k#$rX&cTTKGz<8+dQRjKJR1hIg7pl)eT z%OZV$GosCvQ`OStIWp~x2Ip=CmN3Cp{5dgEbDe<~L0^~|T%HvQAc~iaoF>_M*4+d! zgnZJy`|)%WA|W*#F1QEI*X#bedS2Hj;hW3rs4eBG^o2Ram-IV(RDTG2aXymX_SGkt z&*cSRKeCpch1MRvv$dOuR$2KvcCE$ZdQd<7>0E;B-G1$UpM+{=cQ7SUa;5GqCB9+1 zqRGZYYdPmnUm$)AMDCY^fMhzTbdFxiRg>lW$zq$L`TMpv@k`>+Id{h>^NF^%guAws z|5kp}_R?HD)HowvrP$VDFp7GVkCQNO(6xG(NlT=W#b3|p#^pelt4$){ll7CG6Gkh` zV};eH`p-;nUjh5N1&jd}p2+7I3G)@xw-YY9?E8)D*)<}eoP8%kTsTr1&8K5+#;|66yTAJya#D-)YWA_-@D8$@^ybFO z#wa~iYgxc}fkuDfdT`t<_w>{{wN?xyn*0FH0gxx}4Fh~>{;zUn159mT4i$Zka%xM( ze!-*VXwd$TyR~4(j`!Lprnv2Bt@BoOhSpos?}gBnjFB2TUaY(?o~k+d^$x2HN4xF( zq9=E;qJKU5FGE)8=xnsU{<;-X`D0-UQ|+|B)Y?7c-!jq<{=7-5y0x13ywR?wGiLVg zYk4!lu=po$D#LzjmE_6bgC8KP1;N8uNdZ3ef`(b$>*_1?RPV0MuLXCl9~?=rZ_ScRvs-4Z?hsv75(dVphfE$7~&S7q|&)r*{*y zmFt<8D&xG=A**bqXV{|2g&V$Oi`C!3+6gTiBU9@G&yL#w*OsET);2cN_b$S`N#HwbEcGc+fL4X7k-Bm zG8GZnn|vd|!XFklP&bW_@GiYSA9H`2L?FB0f`-(0A^_gRa1NI598g;yJz(~o_V4jO-4wFq~Cp_E5$y z&PK^|W04`4o)&i}758;)+$B*U-vHu;V82F3S6%&u}v3UkYfss|_0VhIAo zV;i(@v1QAy_9!|=%u|Ktx40BI+E(GaXw7PFp~W2GAuKKe*BP=&DzlP-%XBrEH`%>_L16=0h+;_@4pI0SrvRCRx6& z#>$yuzYQZ4A78{{lus7O!Up%IRB80>;Yz4rcu+n;epbqov7+38l%e&?;6OX+JjcUr zja@LkbQlU5A91Dfmd)1D?pK0u&9G9lN48G<^Y`p;)P;uLkLDd+kmMoYvF@xD*SWoJ zh$PMlyLZR6R8iw3m1zEO|#qJ4yc}c8l2Uij!IK8E7dlT7forsq^pRr>r&{aRE4Q60ZJL5uvnpn zaQvdK9%TPVT6oDVY|$Q;-h}Y`%RR#1?REr{bzM@8vH?Uzz=~yC2PF0Xzd)p<`QVyj z8}3L-W4Y4UqIJ`Iz5Z~VjKd2Q2TcOg_6i)YZ2>xMkh<}{1~frEgU$Tu&z=LZ3n0}{zYUCJf&q!*0tUOlXTdWDEPVt= z3%XqZK6Y>$ryWxG5vAK7O36A%JDTbpNOU`^>hnm z*KbfL(sekr_`V{shhJ?)8;{-d&>7YX4;LCZ3cVfH=l#n{P@xvrI;~43<%V(-&h2oy9JxJc11U~I*kYSRV%X`#f5_Kdye~X zB3-rl2StV%K3&JeV4|MG)OaX(K$8WKI|mgArR!|v8;lvKVh<4kE~A{j&ceMdM_bjP zBTm!7>*OCSC9dB8fXsCerCs7SHZ>Mak1!S#4>(D1UGO%kHqECxc2(1ub>-)61-D7P zd1(?kTB~ojtgx{b9SThprTs!P+j0{SsTAwI`uggdIWK)f%9&fQAh#rLgz3(XcydCS zGS)v{Gsc-T=zA6-Ynds-@I(iikUR;<%tPmEJzgVWg`WHi^@l*sMEt-%U$32wpNdPp zuLsIjzypkz%2;NWXt7YOd|`o+Q>`WwN}=X2f_zLXc(pg=`*p)tu-_`tne_8rl?*WUZyNZ^p*%`Yc;0$I=C)=4vs zHZ+9>e^_o$o3|;!TCy3|01aNeCre>%>Yo#{a`Evw$;861@Lf>C5$-^DF-YI_y#h=` zF_@gD#jtw^bnsiX_!WL2M_C7+&4J}NviI=DarnNu^Bd$nT=o^#T?4d+;$QXIggKqY zlb!8>7(7v#SZSe&tva^g`zFfAggwV_i8x&tS>{3mN-oPq*b+x@h-f?E;!E zz%_DT?4OJ_Y)jNwY{(oQZM4Hzq*L$IT2C%RPX-im>$Gu(@>nxCl?fx#XTUtHKzjS% z_lO^ng?i`QN;<}nd_ng`c^(|c4Bhsh%WVz75x!#zkWT>mA#ilgNS+Sjlg~y(#VJYI z^hc14e4j0e$9nN7C$wp*ol@KSHFi1gH4Sat-JcU{|UY1f8mie3XDrT3T zs3C{{o^YaKL``n%FTAO!ltdqjNWAeZ%aJ;BPsof8W!s5a-_@o& zfK(08o&#B{tpuB@38VBX*K-m_FzNlXnS`e5$e=&ILG`k z@qM$^+4#CnK5GbOeRkBIS4Ya^{t)378S&)Oa*oF4CHRzdt1 z`XPn?-*XD-^J_m9)5}yzfy|hnr)F|4USl^CzonWyUVO#`PE0_(!=46e6Kl3UbIdk| zXHwybqV8u=oo10)sFXq+f3vb3s20$gZ$7?A1Ia)Hq19yLiUc63Vfyw!LEge-qdK0% zsPaN{HAI&RZ*5CG*%PZtCJ60&IrqUAI6lj%rW0oU_x~8QzLCUi&Iwu1He@p@FbeW5 zLglE`ZA%?4oxl3ylQh6Jt%x^%S|->6gUKL9&XxzdrNP>;5Rr-y09S!ZKu31)=XZCF zuKG&7h9E+T=7%rHL=NLU<@PJL%Ts9Knco9VEcwvdMrCw3VtHz#BI`qZQ?UDmYcL0t z!f>~$Yt9m<&S`uWm5$3=%eh;MrgI3h$Yk|a*k|!P_yfUG$FIbG z*D9hAMK*l9QPkoEkv5HXax%?*sYwer(R*~0)mGDen z!F0{R)GPaF=n$R)v_?bcb@hwe1oAt6mUulEe&xVOHxvfvC%()QpV%4V34wR(`7FzP;rx?_Te9 zr5_#Vlek-7UDrlo;|LXWF~L5lXiH`F9==r#y}65tyUPm`qJ8pc!^QQNI#%rL@ec#aQIEXKAIKF1CnlXR0RK2J x9grjg+2UZOuU2uhW7Sl8sJo$X2x#=rlGNwbC#@ diff --git a/zk-token-sdk/src/encryption/discrete_log.rs b/zk-token-sdk/src/encryption/discrete_log.rs index 03beda9efdb202..bc50576998f330 100644 --- a/zk-token-sdk/src/encryption/discrete_log.rs +++ b/zk-token-sdk/src/encryption/discrete_log.rs @@ -1,16 +1,36 @@ +//! The discrete log implementation for the twisted ElGamal decryption. +//! +//! The implementation uses the baby-step giant-step method, which consists of a precomputation +//! step and an online step. The precomputation step involves computing a hash table of a number +//! of Ristretto points that is independent of a discrete log instance. The online phase computes +//! the final discrete log solution using the discrete log instance and the pre-computed hash +//! table. More details on the baby-step giant-step algorithm and the implementation can be found +//! in the [spl documentation](https://spl.solana.com). +//! +//! The implementation is NOT intended to run in constant-time. There are some measures to prevent +//! straightforward timing attacks. For instance, it does not short-circuit the search when a +//! solution is found. However, the use of hashtables, batching, and threads make the +//! implementation inherently not constant-time. This may theoretically allow an adversary to gain +//! information on a discrete log solution depending on the execution time of the implementation. +//! + #![cfg(not(target_os = "solana"))] use { crate::errors::ProofError, curve25519_dalek::{ - constants::RISTRETTO_BASEPOINT_POINT as G, ristretto::RistrettoPoint, scalar::Scalar, - traits::Identity, + constants::RISTRETTO_BASEPOINT_POINT as G, + ristretto::RistrettoPoint, + scalar::Scalar, + traits::{Identity, IsIdentity}, }, + itertools::Itertools, serde::{Deserialize, Serialize}, std::{collections::HashMap, thread}, }; const TWO16: u64 = 65536; // 2^16 +const TWO17: u64 = 131072; // 2^17 /// Type that captures a discrete log challenge. /// @@ -28,6 +48,8 @@ pub struct DiscreteLog { range_bound: usize, /// Ristretto point representing each step of the discrete log search step_point: RistrettoPoint, + /// Ristretto point compression batch size + compression_batch_size: usize, } #[derive(Serialize, Deserialize, Default)] @@ -38,11 +60,11 @@ pub struct DecodePrecomputation(HashMap<[u8; 32], u16>); fn decode_u32_precomputation(generator: RistrettoPoint) -> DecodePrecomputation { let mut hashmap = HashMap::new(); - let two16_scalar = Scalar::from(TWO16); + let two17_scalar = Scalar::from(TWO17); let identity = RistrettoPoint::identity(); // 0 * G - let generator = two16_scalar * generator; // 2^16 * G + let generator = two17_scalar * generator; // 2^17 * G - // iterator for 2^12*0G , 2^12*1G, 2^12*2G, ... + // iterator for 2^17*0G , 2^17*1G, 2^17*2G, ... let ristretto_iter = RistrettoIterator::new((identity, 0), (generator, 1)); for (point, x_hi) in ristretto_iter.take(TWO16 as usize) { let key = point.compress().to_bytes(); @@ -73,13 +95,14 @@ impl DiscreteLog { num_threads: 1, range_bound: TWO16 as usize, step_point: G, + compression_batch_size: 32, } } /// Adjusts number of threads in a discrete log instance. pub fn num_threads(&mut self, num_threads: usize) -> Result<(), ProofError> { // number of threads must be a positive power-of-two integer - if num_threads == 0 || (num_threads & (num_threads - 1)) != 0 { + if num_threads == 0 || (num_threads & (num_threads - 1)) != 0 || num_threads > 65536 { return Err(ProofError::DiscreteLogThreads); } @@ -90,6 +113,19 @@ impl DiscreteLog { Ok(()) } + /// Adjusts inversion batch size in a discrete log instance. + pub fn set_compression_batch_size( + &mut self, + compression_batch_size: usize, + ) -> Result<(), ProofError> { + if compression_batch_size >= TWO16 as usize { + return Err(ProofError::DiscreteLogBatchSize); + } + self.compression_batch_size = compression_batch_size; + + Ok(()) + } + /// Solves the discrete log problem under the assumption that the solution /// is a 32-bit number. pub fn decode_u32(self) -> Option { @@ -102,8 +138,14 @@ impl DiscreteLog { (-(&self.step_point), self.num_threads as u64), ); - let handle = - thread::spawn(move || Self::decode_range(ristretto_iterator, self.range_bound)); + let handle = thread::spawn(move || { + Self::decode_range( + ristretto_iterator, + self.range_bound, + self.compression_batch_size, + ) + // Self::decode_range(ristretto_iterator, self.range_bound) + }); starting_point -= G; handle @@ -120,16 +162,39 @@ impl DiscreteLog { solution } - fn decode_range(ristretto_iterator: RistrettoIterator, range_bound: usize) -> Option { + fn decode_range( + ristretto_iterator: RistrettoIterator, + range_bound: usize, + compression_batch_size: usize, + ) -> Option { let hashmap = &DECODE_PRECOMPUTATION_FOR_G; let mut decoded = None; - for (point, x_lo) in ristretto_iterator.take(range_bound) { - let key = point.compress().to_bytes(); - if hashmap.0.contains_key(&key) { - let x_hi = hashmap.0[&key]; - decoded = Some(x_lo + TWO16 * x_hi as u64); + + for batch in &ristretto_iterator + .take(range_bound) + .chunks(compression_batch_size) + { + let (batch_points, batch_indices): (Vec<_>, Vec<_>) = batch + .filter(|(point, index)| { + if point.is_identity() { + decoded = Some(*index); + return false; + } + true + }) + .unzip(); + + let batch_compressed = RistrettoPoint::double_and_compress_batch(&batch_points); + + for (point, x_lo) in batch_compressed.iter().zip(batch_indices.iter()) { + let key = point.to_bytes(); + if hashmap.0.contains_key(&key) { + let x_hi = hashmap.0[&key]; + decoded = Some(x_lo + TWO16 * x_hi as u64); + } } } + decoded } } @@ -167,6 +232,7 @@ mod tests { #[allow(non_snake_case)] fn test_serialize_decode_u32_precomputation_for_G() { let decode_u32_precomputation_for_G = decode_u32_precomputation(G); + // let decode_u32_precomputation_for_G = decode_u32_precomputation(G); if decode_u32_precomputation_for_G.0 != DECODE_PRECOMPUTATION_FOR_G.0 { use std::{fs::File, io::Write, path::PathBuf}; @@ -183,7 +249,7 @@ mod tests { #[test] fn test_decode_correctness() { // general case - let amount: u64 = 55; + let amount: u64 = 4294967295; let instance = DiscreteLog::new(G, Scalar::from(amount) * G); diff --git a/zk-token-sdk/src/errors.rs b/zk-token-sdk/src/errors.rs index 61f958a2d686d3..bb25ee911537f1 100644 --- a/zk-token-sdk/src/errors.rs +++ b/zk-token-sdk/src/errors.rs @@ -30,6 +30,8 @@ pub enum ProofError { Decryption, #[error("discrete log number of threads not power-of-two")] DiscreteLogThreads, + #[error("discrete log batch size too large")] + DiscreteLogBatchSize, } #[derive(Error, Clone, Debug, Eq, PartialEq)] From b4ea42e8ecbd96725cbcd99383a649fcf7a3ca98 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Wed, 31 Aug 2022 08:32:52 +0000 Subject: [PATCH 086/465] zk-token-sdk: calculate transfer fee without conditional branch (backport #27356) (#27490) zk-token-sdk: calculate transfer fee without conditional branch (#27356) (cherry picked from commit 0ea984ae201c56e85e5d1b51e5bd9d5bdd18692f) Co-authored-by: samkim-crypto --- .../src/instruction/transfer_with_fee.rs | 20 ++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/zk-token-sdk/src/instruction/transfer_with_fee.rs b/zk-token-sdk/src/instruction/transfer_with_fee.rs index bdab2e2d8a7337..7442f4e3c7782b 100644 --- a/zk-token-sdk/src/instruction/transfer_with_fee.rs +++ b/zk-token-sdk/src/instruction/transfer_with_fee.rs @@ -697,18 +697,20 @@ impl FeeParameters { #[cfg(not(target_os = "solana"))] fn calculate_fee(transfer_amount: u64, fee_rate_basis_points: u16) -> Option<(u64, u64)> { let numerator = (transfer_amount as u128).checked_mul(fee_rate_basis_points as u128)?; - let mut fee = numerator.checked_div(ONE_IN_BASIS_POINTS)?; - let mut delta_fee = 0_u128; - let remainder = numerator.checked_rem(ONE_IN_BASIS_POINTS)?; - if remainder > 0 { - fee = fee.checked_add(1)?; + // Warning: Division may involve CPU opcodes that have variable execution times. This + // non-constant-time execution of the fee calculation can theoretically reveal information + // about the transfer amount. For transfers that invole extremely sensitive data, additional + // care should be put into how the fees are calculated. + let fee = numerator + .checked_add(ONE_IN_BASIS_POINTS)? + .checked_sub(1)? + .checked_div(ONE_IN_BASIS_POINTS)?; - let scaled_fee = fee.checked_mul(ONE_IN_BASIS_POINTS)?; - delta_fee = scaled_fee.checked_sub(numerator)?; - } + let delta_fee = fee + .checked_mul(ONE_IN_BASIS_POINTS)? + .checked_sub(numerator)?; - let fee = u64::try_from(fee).ok()?; Some((fee as u64, delta_fee as u64)) } From b1ba005ae3b7958a3b69fc0d13603aadfb2d5c74 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Wed, 31 Aug 2022 17:33:51 +0000 Subject: [PATCH 087/465] chore: add cargo audit at the beginning of secondary pipeline (backport #27470) (#27502) chore: add cargo audit at the beginning of secondary pipeline (#27470) (cherry picked from commit bbc3c5c32de7ee77832cdc564ef09a7f26f52376) Co-authored-by: Yihau Chen --- ci/buildkite-secondary.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/ci/buildkite-secondary.yml b/ci/buildkite-secondary.yml index ff5a898e50a661..7dfa2a701c7967 100644 --- a/ci/buildkite-secondary.yml +++ b/ci/buildkite-secondary.yml @@ -2,6 +2,12 @@ # Build steps that run after the primary pipeline on pushes and tags. # Pull requests to not run these steps. steps: + - name: "cargo audit" + command: ". ci/rust-version.sh; ci/docker-run.sh $$rust_stable_docker_image ci/do-audit.sh" + agents: + queue: "release-build" + timeout_in_minutes: 10 + - wait - name: "publish tarball (x86_64-unknown-linux-gnu)" command: "ci/publish-tarball.sh" agents: From a5cb2fd7cff0c4d7b6fd60dd1d483fe2c9e1949b Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Thu, 1 Sep 2022 12:52:38 +0000 Subject: [PATCH 088/465] chore: bump shellcheck v0.8.0 (backport #27463) (#27534) chore: bump shellcheck v0.8.0 (#27463) * bump shellcheck to stable verion, v0.8.0 * fix SC2086 * fix SC2269, https://www.shellcheck.net/wiki/SC2294 * fix SC2294 * do null and unset check for variable, FORCE_DELETE (cherry picked from commit e7689f7961d423d9bed5d374682a70ebdfcaf2ce) Co-authored-by: Yihau Chen --- ci/shellcheck.sh | 2 +- net/gce.sh | 1 + net/net.sh | 6 +++--- net/scripts/colo-node-onfree.sh | 2 +- system-test/testnet-automation.sh | 2 +- 5 files changed, 7 insertions(+), 6 deletions(-) diff --git a/ci/shellcheck.sh b/ci/shellcheck.sh index 9612c8390b6794..1c93af633fa84c 100755 --- a/ci/shellcheck.sh +++ b/ci/shellcheck.sh @@ -7,6 +7,6 @@ cd "$(dirname "$0")/.." ( set -x git ls-files -- '*.sh' ':(exclude)ci/semver_bash' \ - | xargs ci/docker-run.sh koalaman/shellcheck@sha256:fe24ab9a9b6b62d3adb162f4a80e006b6a63cae8c6ffafbae45772bab85e7294 --color=always --external-sources --shell=bash + | xargs ci/docker-run.sh koalaman/shellcheck:v0.8.0 --color=always --external-sources --shell=bash ) echo --- ok diff --git a/net/gce.sh b/net/gce.sh index 6c9e9b357f6e18..1a4eb775e220c1 100755 --- a/net/gce.sh +++ b/net/gce.sh @@ -397,6 +397,7 @@ cloud_ForEachInstance() { declare name publicIp privateIp IFS=: read -r name publicIp privateIp zone < <(echo "$info") + # shellcheck disable=SC2294 eval "$cmd" "$name" "$publicIp" "$privateIp" "$zone" "$count" "$@" count=$((count + 1)) done diff --git a/net/net.sh b/net/net.sh index 418716c47b00ff..4f07965a501470 100755 --- a/net/net.sh +++ b/net/net.sh @@ -595,7 +595,7 @@ deploy() { if $bootstrapLeader; then SECONDS=0 declare bootstrapNodeDeployTime= - startBootstrapLeader "$nodeAddress" $nodeIndex "$netLogDir/bootstrap-validator-$ipAddress.log" + startBootstrapLeader "$nodeAddress" "$nodeIndex" "$netLogDir/bootstrap-validator-$ipAddress.log" bootstrapNodeDeployTime=$SECONDS $metricsWriteDatapoint "testnet-deploy net-bootnode-leader-started=1" @@ -603,7 +603,7 @@ deploy() { SECONDS=0 pids=() else - startNode "$ipAddress" $nodeType $nodeIndex + startNode "$ipAddress" "$nodeType" "$nodeIndex" # Stagger additional node start time. If too many nodes start simultaneously # the bootstrap node gets more rsync requests from the additional nodes than @@ -1114,7 +1114,7 @@ startnode) nodeType= nodeIndex= getNodeType - startNode "$nodeAddress" $nodeType $nodeIndex + startNode "$nodeAddress" "$nodeType" "$nodeIndex" ;; startclients) startClients diff --git a/net/scripts/colo-node-onfree.sh b/net/scripts/colo-node-onfree.sh index c541b210d1adb4..e5af6a4df172a6 100644 --- a/net/scripts/colo-node-onfree.sh +++ b/net/scripts/colo-node-onfree.sh @@ -4,7 +4,7 @@ SOLANA_LOCK_FILE="${SOLANA_LOCK_FILE:?}" SECONDARY_DISK_MOUNT_POINT="${SECONDARY_DISK_MOUNT_POINT:?}" SSH_AUTHORIZED_KEYS="${SSH_AUTHORIZED_KEYS:?}" -FORCE_DELETE="${FORCE_DELETE}" +FORCE_DELETE="${FORCE_DELETE:?}" RC=false if [[ -f "${SOLANA_LOCK_FILE}" ]]; then diff --git a/system-test/testnet-automation.sh b/system-test/testnet-automation.sh index 4cf23222c02d73..00426e18d8cdb7 100755 --- a/system-test/testnet-automation.sh +++ b/system-test/testnet-automation.sh @@ -13,7 +13,7 @@ Test failed during step: ${STEP} Failure occured when running the following command: -$(eval echo "$@")" +$*" fi # shellcheck disable=SC2034 From b3951507a1cfa4eb57d25c392329660c805f53b8 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Thu, 1 Sep 2022 19:09:41 +0000 Subject: [PATCH 089/465] deserialize(or eof) snapshot epoch_accounts_hash (backport #27513) (#27549) deserialize(or eof) snapshot epoch_accounts_hash (#27513) deserialize(or eof) snapshot prior_epoch_accounts_hash (cherry picked from commit 3e40fad46b59497099ef774372ce08220c72b5fb) Co-authored-by: Jeff Washington (jwash) --- runtime/src/bank.rs | 1 + runtime/src/serde_snapshot/newer.rs | 6 +++++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/runtime/src/bank.rs b/runtime/src/bank.rs index 10df65d9c32a16..dfd30066fa4796 100644 --- a/runtime/src/bank.rs +++ b/runtime/src/bank.rs @@ -996,6 +996,7 @@ pub struct BankFieldsToDeserialize { pub(crate) is_delta: bool, pub(crate) accounts_data_len: u64, pub(crate) incremental_snapshot_persistence: Option, + pub(crate) epoch_accounts_hash: Option, } // Bank's common fields shared by all supported snapshot versions for serialization. diff --git a/runtime/src/serde_snapshot/newer.rs b/runtime/src/serde_snapshot/newer.rs index 68b13f80582954..f8a2b5755890cb 100644 --- a/runtime/src/serde_snapshot/newer.rs +++ b/runtime/src/serde_snapshot/newer.rs @@ -97,6 +97,7 @@ impl From for BankFieldsToDeserialize { epoch_stakes: dvb.epoch_stakes, is_delta: dvb.is_delta, incremental_snapshot_persistence: None, + epoch_accounts_hash: None, } } } @@ -317,9 +318,12 @@ impl<'a> TypeContext<'a> for Context { .fee_rate_governor .clone_with_lamports_per_signature(lamports_per_signature); - let incremental_snapshot_persistence = ignore_eof_error(deserialize_from(stream))?; + let incremental_snapshot_persistence = ignore_eof_error(deserialize_from(&mut stream))?; bank_fields.incremental_snapshot_persistence = incremental_snapshot_persistence; + let epoch_accounts_hash = ignore_eof_error(deserialize_from(stream))?; + bank_fields.epoch_accounts_hash = epoch_accounts_hash; + Ok((bank_fields, accounts_db_fields)) } From 30b4484a9a3eb69dde4528de8fbda04772d70669 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Thu, 1 Sep 2022 20:29:01 +0000 Subject: [PATCH 090/465] Fixed typo and json standards in the document (backport #27557) (#27559) Fixed typo and json standards in the document (#27557) * fixed message.accountKeys typo * Fixed parameter argument according to json standards (cherry picked from commit b2002177be8d975095448248fc4c0d1d54b68773) Co-authored-by: Piyush Jaiswal <46999854+JaisPiyush@users.noreply.github.com> --- docs/src/developing/clients/jsonrpc-api.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/src/developing/clients/jsonrpc-api.md b/docs/src/developing/clients/jsonrpc-api.md index 4efc1dee205003..3e0d462db2f51a 100644 --- a/docs/src/developing/clients/jsonrpc-api.md +++ b/docs/src/developing/clients/jsonrpc-api.md @@ -413,7 +413,7 @@ Returns identity and transaction information about a confirmed block in the ledg ["jsonParsed" encoding](jsonrpc-api.md#parsed-responses) attempts to use program-specific instruction parsers to return more human-readable and explicit data in the `transaction.message.instructions` list. If "jsonParsed" is requested but a parser cannot be found, the instruction falls back to regular JSON encoding (`accounts`, `data`, and `programIdIndex` fields). - (optional) `transactionDetails: ` - level of transaction detail to return, either "full", "signatures", or "none". If parameter not provided, the default detail level is "full". - (optional) `rewards: bool` - whether to populate the `rewards` array. If parameter not provided, the default includes rewards. - - (optional) [Commitment](jsonrpc-api.md#configuring-state-commitment); "processed" is not supported. If parameter not provided, the default is "finalized". + - (optional) `commitment: ` - [Commitment](jsonrpc-api.md#configuring-state-commitment); "processed" is not supported. If parameter not provided, the default is "finalized". - (optional) `maxSupportedTransactionVersion: ` - set the max transaction version to return in responses. If the requested block contains a transaction with a higher version, an error will be returned. If this parameter is omitted, only legacy transactions will be returned, and a block containing any versioned transaction will prompt the error. #### Results: @@ -577,11 +577,11 @@ Transactions are quite different from those on other blockchains. Be sure to rev The JSON structure of a transaction is defined as follows: -- `signatures: ` - A list of base-58 encoded signatures applied to the transaction. The list is always of length `message.header.numRequiredSignatures` and not empty. The signature at index `i` corresponds to the public key at index `i` in `message.account_keys`. The first one is used as the [transaction id](../../terminology.md#transaction-id). +- `signatures: ` - A list of base-58 encoded signatures applied to the transaction. The list is always of length `message.header.numRequiredSignatures` and not empty. The signature at index `i` corresponds to the public key at index `i` in `message.accountKeys`. The first one is used as the [transaction id](../../terminology.md#transaction-id). - `message: ` - Defines the content of the transaction. - `accountKeys: ` - List of base-58 encoded public keys used by the transaction, including by the instructions and for signatures. The first `message.header.numRequiredSignatures` public keys must sign the transaction. - `header: ` - Details the account types and signatures required by the transaction. - - `numRequiredSignatures: ` - The total number of signatures required to make the transaction valid. The signatures must match the first `numRequiredSignatures` of `message.account_keys`. + - `numRequiredSignatures: ` - The total number of signatures required to make the transaction valid. The signatures must match the first `numRequiredSignatures` of `message.accountKeys`. - `numReadonlySignedAccounts: ` - The last `numReadonlySignedAccounts` of the signed keys are read-only accounts. Programs may process multiple transactions that load read-only accounts within a single PoH entry, but are not permitted to credit or debit lamports or modify account data. Transactions targeting the same read-write account are evaluated sequentially. - `numReadonlyUnsignedAccounts: ` - The last `numReadonlyUnsignedAccounts` of the unsigned keys are read-only accounts. - `recentBlockhash: ` - A base-58 encoded hash of a recent block in the ledger used to prevent transaction duplication and to give transactions lifetimes. From ca6a8a83cc1da7b1ec06ace24075f00f88dac90d Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Thu, 1 Sep 2022 23:36:50 +0000 Subject: [PATCH 091/465] Use batch send in bench-tps to send transactions (backport #27527) (#27560) * Use batch send in bench-tps to send transactions (#27527) * Use batch send in bench-tps to send transactions * serialize using par iter (cherry picked from commit 49df1c47e8188218772ff460aaa5dc1e621b02ef) # Conflicts: # tpu-client/src/tpu_client.rs * fix merge issues Co-authored-by: Pankaj Garg --- bench-tps/src/bench_tps_client/tpu_client.rs | 4 +- client/src/nonblocking/tpu_client.rs | 53 ++++++++++++++++++++ client/src/tpu_client.rs | 45 +++++++++++++++++ 3 files changed, 99 insertions(+), 3 deletions(-) diff --git a/bench-tps/src/bench_tps_client/tpu_client.rs b/bench-tps/src/bench_tps_client/tpu_client.rs index 53b0102a00f11b..a55326ae0f2b0b 100644 --- a/bench-tps/src/bench_tps_client/tpu_client.rs +++ b/bench-tps/src/bench_tps_client/tpu_client.rs @@ -14,9 +14,7 @@ impl BenchTpsClient for TpuClient { Ok(signature) } fn send_batch(&self, transactions: Vec) -> Result<()> { - for transaction in transactions { - BenchTpsClient::send_transaction(self, transaction)?; - } + self.try_send_transaction_batch(&transactions)?; Ok(()) } fn get_latest_blockhash(&self) -> Result { diff --git a/client/src/nonblocking/tpu_client.rs b/client/src/nonblocking/tpu_client.rs index 4dd39c7685407b..deb34e97114b56 100644 --- a/client/src/nonblocking/tpu_client.rs +++ b/client/src/nonblocking/tpu_client.rs @@ -77,6 +77,15 @@ async fn send_wire_transaction_to_addr( conn.send_wire_transaction(wire_transaction.clone()).await } +async fn send_wire_transaction_batch_to_addr( + connection_cache: &ConnectionCache, + addr: &SocketAddr, + wire_transactions: &[Vec], +) -> TransportResult<()> { + let conn = connection_cache.get_nonblocking_connection(addr); + conn.send_wire_transaction_batch(wire_transactions).await +} + impl TpuClient { /// Serialize and send transaction to the current and upcoming leader TPUs according to fanout /// size @@ -140,6 +149,50 @@ impl TpuClient { } } + /// Send a batch of wire transactions to the current and upcoming leader TPUs according to + /// fanout size + /// Returns the last error if all sends fail + pub async fn try_send_wire_transaction_batch( + &self, + wire_transactions: Vec>, + ) -> TransportResult<()> { + let leaders = self + .leader_tpu_service + .leader_tpu_sockets(self.fanout_slots); + let futures = leaders + .iter() + .map(|addr| { + send_wire_transaction_batch_to_addr( + &self.connection_cache, + addr, + &wire_transactions, + ) + }) + .collect::>(); + let results: Vec> = join_all(futures).await; + + let mut last_error: Option = None; + let mut some_success = false; + for result in results { + if let Err(e) = result { + if last_error.is_none() { + last_error = Some(e); + } + } else { + some_success = true; + } + } + if !some_success { + Err(if let Some(err) = last_error { + err + } else { + std::io::Error::new(std::io::ErrorKind::Other, "No sends attempted").into() + }) + } else { + Ok(()) + } + } + /// Create a new client that disconnects when dropped pub async fn new( rpc_client: Arc, diff --git a/client/src/tpu_client.rs b/client/src/tpu_client.rs index 5e94098e2624b9..f47c29e609c5aa 100644 --- a/client/src/tpu_client.rs +++ b/client/src/tpu_client.rs @@ -11,6 +11,7 @@ use { }, bincode::serialize, log::*, + rayon::iter::{IntoParallelIterator, ParallelIterator}, solana_sdk::{ clock::Slot, commitment_config::CommitmentConfig, @@ -111,6 +112,17 @@ impl TpuClient { self.try_send_wire_transaction(wire_transaction) } + /// Serialize and send a batch of transactions to the current and upcoming leader TPUs according + /// to fanout size + /// Returns the last error if all sends fail + pub fn try_send_transaction_batch(&self, transactions: &[Transaction]) -> TransportResult<()> { + let wire_transactions = transactions + .into_par_iter() + .map(|tx| bincode::serialize(&tx).expect("serialize Transaction in send_batch")) + .collect::>(); + self.try_send_wire_transaction_batch(wire_transactions) + } + /// Send a wire transaction to the current and upcoming leader TPUs according to fanout size /// Returns the last error if all sends fail fn try_send_wire_transaction(&self, wire_transaction: Vec) -> TransportResult<()> { @@ -140,6 +152,39 @@ impl TpuClient { } } + /// Send a batch of wire transactions to the current and upcoming leader TPUs according to + /// fanout size + /// Returns the last error if all sends fail + fn try_send_wire_transaction_batch( + &self, + wire_transactions: Vec>, + ) -> TransportResult<()> { + let mut last_error: Option = None; + let mut some_success = false; + + for tpu_address in self + .leader_tpu_service + .leader_tpu_sockets(self.fanout_slots) + { + let conn = self.connection_cache.get_connection(&tpu_address); + let result = conn.send_wire_transaction_batch_async(wire_transactions.clone()); + if let Err(err) = result { + last_error = Some(err); + } else { + some_success = true; + } + } + if !some_success { + Err(if let Some(err) = last_error { + err + } else { + std::io::Error::new(std::io::ErrorKind::Other, "No sends attempted").into() + }) + } else { + Ok(()) + } + } + /// Create a new client that disconnects when dropped pub fn new( rpc_client: Arc, From 9036e5ee38abd056e7e5966f618061d15de78c10 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Fri, 2 Sep 2022 14:43:31 +0000 Subject: [PATCH 092/465] Fixup docs formatting re: commitment configuration (backport #27561) (#27574) Fixup docs formatting re: commitment configuration (#27561) * Make commitment docs more consistent * Add missing config field doc * Make (optional) tag placement consistent (cherry picked from commit 67b54b763422be176f9fc5e5cc2f751ff837a47a) Co-authored-by: Tyera Eulberg --- docs/src/developing/clients/jsonrpc-api.md | 170 +++++++++++---------- 1 file changed, 93 insertions(+), 77 deletions(-) diff --git a/docs/src/developing/clients/jsonrpc-api.md b/docs/src/developing/clients/jsonrpc-api.md index 3e0d462db2f51a..89f4b1588dfb4c 100644 --- a/docs/src/developing/clients/jsonrpc-api.md +++ b/docs/src/developing/clients/jsonrpc-api.md @@ -249,7 +249,7 @@ Returns all information associated with the account of provided Pubkey #### Parameters: - `` - Pubkey of account to query, as base-58 encoded string -- `` - (optional) Configuration object containing the following fields: +- (optional) `` - Configuration object containing the following fields: - (optional) `commitment: ` - [Commitment](jsonrpc-api.md#configuring-state-commitment) - (optional) `encoding: ` - encoding for Account data, either "base58" (_slow_), "base64", "base64+zstd", or "jsonParsed". "base58" is limited to Account data of less than 129 bytes. @@ -373,7 +373,7 @@ Returns the balance of the account of provided Pubkey #### Parameters: - `` - Pubkey of account to query, as base-58 encoded string -- `` - (optional) Configuration object containing the following fields: +- (optional) `` - Configuration object containing the following fields: - (optional) `commitment: ` - [Commitment](jsonrpc-api.md#configuring-state-commitment) - (optional) `minContextSlot: ` - set the minimum slot that the request can be evaluated at. @@ -408,7 +408,7 @@ Returns identity and transaction information about a confirmed block in the ledg #### Parameters: - `` - slot, as u64 integer -- `` - (optional) Configuration object containing the following optional fields: +- (optional) `` - Configuration object containing the following optional fields: - (optional) `encoding: ` - encoding for each returned Transaction, either "json", "jsonParsed", "base58" (_slow_), "base64". If parameter not provided, the default encoding is "json". ["jsonParsed" encoding](jsonrpc-api.md#parsed-responses) attempts to use program-specific instruction parsers to return more human-readable and explicit data in the `transaction.message.instructions` list. If "jsonParsed" is requested but a parser cannot be found, the instruction falls back to regular JSON encoding (`accounts`, `data`, and `programIdIndex` fields). - (optional) `transactionDetails: ` - level of transaction detail to return, either "full", "signatures", or "none". If parameter not provided, the default detail level is "full". @@ -626,7 +626,7 @@ Returns the current block height of the node #### Parameters: -- `` - (optional) Configuration object containing the following fields: +- (optional) `` - Configuration object containing the following fields: - (optional) `commitment: ` - [Commitment](jsonrpc-api.md#configuring-state-commitment) - (optional) `minContextSlot: ` - set the minimum slot that the request can be evaluated at. @@ -656,8 +656,8 @@ Returns recent block production information from the current or previous epoch. #### Parameters: -- `` - (optional) Configuration object containing the following optional fields: - - (optional) [Commitment](jsonrpc-api.md#configuring-state-commitment) +- (optional) `` - Configuration object containing the following optional fields: + - (optional) `commitment: ` - [Commitment](jsonrpc-api.md#configuring-state-commitment) - (optional) `range: ` - Slot range to return block production for. If parameter not provided, defaults to current epoch. - `firstSlot: ` - first slot to return block production information for (inclusive) - (optional) `lastSlot: ` - last slot to return block production information for (inclusive). If parameter not provided, defaults to the highest slot @@ -804,8 +804,9 @@ Returns a list of confirmed blocks between two slots #### Parameters: - `` - start_slot, as u64 integer -- `` - (optional) end_slot, as u64 integer (must be no more than 500,000 blocks higher than the `start_slot`) -- (optional) [Commitment](jsonrpc-api.md#configuring-state-commitment); "processed" is not supported. If parameter not provided, the default is "finalized". +- (optional) `` - end_slot, as u64 integer (must be no more than 500,000 blocks higher than the `start_slot`) +- (optional) `` - Configuration object containing the following field: + - (optional) `commitment: ` - [Commitment](jsonrpc-api.md#configuring-state-commitment); "processed" is not supported. If parameter not provided, the default is "finalized". #### Results: @@ -837,7 +838,8 @@ Returns a list of confirmed blocks starting at the given slot - `` - start_slot, as u64 integer - `` - limit, as u64 integer (must be no more than 500,000 blocks higher than the `start_slot`) -- (optional) [Commitment](jsonrpc-api.md#configuring-state-commitment); "processed" is not supported. If parameter not provided, the default is "finalized". +- (optional) `` - Configuration object containing the following field: + - (optional) `commitment: ` - [Commitment](jsonrpc-api.md#configuring-state-commitment); "processed" is not supported. If parameter not provided, the default is "finalized". #### Results: @@ -948,7 +950,7 @@ Returns information about the current epoch #### Parameters: -- `` - (optional) Configuration object containing the following fields: +- (optional) `` - Configuration object containing the following fields: - (optional) `commitment: ` - [Commitment](jsonrpc-api.md#configuring-state-commitment) - (optional) `minContextSlot: ` - set the minimum slot that the request can be evaluated at. @@ -1044,7 +1046,9 @@ Get the fee the network will charge for a particular Message #### Parameters: - `message: ` - Base-64 encoded Message -- `` - (optional) [Commitment](jsonrpc-api.md#configuring-state-commitment) (used for retrieving blockhash) +- (optional) `` - Configuration object containing the following optional fields: + - (optional) `commitment: ` - [Commitment](jsonrpc-api.md#configuring-state-commitment) (used for retrieving blockhash) + - (optional) `minContextSlot: ` - set the minimum slot that the request can be evaluated at. #### Results: @@ -1292,7 +1296,8 @@ Returns the current inflation governor #### Parameters: -- `` - (optional) [Commitment](jsonrpc-api.md#configuring-state-commitment) +- (optional) `` - Configuration object containing the following field: + - (optional) `commitment: ` - [Commitment](jsonrpc-api.md#configuring-state-commitment) #### Results: @@ -1380,7 +1385,7 @@ Returns the inflation / staking reward for a list of addresses for an epoch #### Parameters: - `` - An array of addresses to query, as base-58 encoded strings -- `` - (optional) Configuration object containing the following fields: +- (optional) `` - Configuration object containing the following fields: - (optional) `commitment: ` - [Commitment](jsonrpc-api.md#configuring-state-commitment) - (optional) `epoch: ` - An epoch for which the reward occurs. If omitted, the previous epoch will be used - (optional) `minContextSlot: ` - set the minimum slot that the request can be evaluated at. @@ -1436,8 +1441,8 @@ Returns the 20 largest accounts, by lamport balance (results may be cached up to #### Parameters: -- `` - (optional) Configuration object containing the following optional fields: - - (optional) [Commitment](jsonrpc-api.md#configuring-state-commitment) +- (optional) `` - Configuration object containing the following optional fields: + - (optional) `commitment: ` - [Commitment](jsonrpc-api.md#configuring-state-commitment) - (optional) `filter: ` - filter results by account type; currently supported: `circulating|nonCirculating` #### Results: @@ -1555,7 +1560,7 @@ Returns the latest blockhash #### Parameters: -- `` - (optional) Configuration object containing the following fields: +- (optional) `` - Configuration object containing the following fields: - (optional) `commitment: ` - [Commitment](jsonrpc-api.md#configuring-state-commitment) (used for retrieving blockhash) - (optional) `minContextSlot: ` - set the minimum slot that the request can be evaluated at. @@ -1608,10 +1613,10 @@ Returns the leader schedule for an epoch #### Parameters: -- `` - (optional) Fetch the leader schedule for the epoch that corresponds to the provided slot. +- (optional) `` - Fetch the leader schedule for the epoch that corresponds to the provided slot. If unspecified, the leader schedule for the current epoch is fetched -- `` - (optional) Configuration object containing the following field: - - (optional) [Commitment](jsonrpc-api.md#configuring-state-commitment) +- (optional) `` - Configuration object containing the following field: + - (optional) `commitment: ` - [Commitment](jsonrpc-api.md#configuring-state-commitment) - (optional) `identity: ` - Only return results for this validator identity (base-58 encoded) #### Results: @@ -1740,7 +1745,8 @@ Returns minimum balance required to make account rent exempt. #### Parameters: - `` - account data length -- `` - (optional) [Commitment](jsonrpc-api.md#configuring-state-commitment) +- (optional) `` - Configuration object containing the following field: + - (optional) `commitment: ` - [Commitment](jsonrpc-api.md#configuring-state-commitment) #### Results: @@ -1769,7 +1775,7 @@ Returns the account information for a list of Pubkeys. #### Parameters: - `` - An array of Pubkeys to query, as base-58 encoded strings (up to a maximum of 100). -- `` - (optional) Configuration object containing the following fields: +- (optional) `` - Configuration object containing the following fields: - (optional) `commitment: ` - [Commitment](jsonrpc-api.md#configuring-state-commitment) - (optional) `encoding: ` - encoding for Account data, either "base58" (_slow_), "base64", "base64+zstd", or "jsonParsed". "base58" is limited to Account data of less than 129 bytes. @@ -1912,7 +1918,7 @@ Returns all accounts owned by the provided program Pubkey #### Parameters: - `` - Pubkey of program, as base-58 encoded string -- `` - (optional) Configuration object containing the following fields: +- (optional) `` - Configuration object containing the following fields: - (optional) `commitment: ` - [Commitment](jsonrpc-api.md#configuring-state-commitment) - (optional) `encoding: ` - encoding for Account data, either "base58" (_slow_), "base64", "base64+zstd", or "jsonParsed". "base58" is limited to Account data of less than 129 bytes. @@ -2038,7 +2044,7 @@ include the number of transactions and slots that occur in a given time window. #### Parameters: -- `limit: ` - (optional) number of samples to return (maximum 720) +- (optional) `limit: ` - number of samples to return (maximum 720) #### Results: @@ -2105,7 +2111,7 @@ provided signature or most recent confirmed block #### Parameters: - `` - account address as base-58 encoded string -- `` - (optional) Configuration object containing the following fields: +- (optional) `` - Configuration object containing the following fields: - (optional) `limit: ` - maximum transaction signatures to return (between 1 and 1,000, default: 1,000). - (optional) `before: ` - start searching backwards from this transaction signature. If not provided the search starts from the top of the highest max confirmed block. @@ -2173,7 +2179,7 @@ active slots plus `MAX_RECENT_BLOCKHASHES` rooted slots. #### Parameters: - `` - An array of transaction signatures to confirm, as base-58 encoded strings (up to a maximum of 256) -- `` - (optional) Configuration object containing the following field: +- (optional) `` - Configuration object containing the following field: - `searchTransactionHistory: ` - if true, a Solana node will search its ledger cache for any signatures not found in the recent status cache #### Results: @@ -2294,7 +2300,7 @@ Returns the slot that has reached the [given or default commitment level](jsonrp #### Parameters: -- `` - (optional) Configuration object containing the following fields: +- (optional) `` - Configuration object containing the following fields: - (optional) `commitment: ` - [Commitment](jsonrpc-api.md#configuring-state-commitment) - (optional) `minContextSlot: ` - set the minimum slot that the request can be evaluated at. @@ -2324,7 +2330,7 @@ Returns the current slot leader #### Parameters: -- `` - (optional) Configuration object containing the following fields: +- (optional) `` - Configuration object containing the following fields: - (optional) `commitment: ` - [Commitment](jsonrpc-api.md#configuring-state-commitment) - (optional) `minContextSlot: ` - set the minimum slot that the request can be evaluated at. @@ -2407,7 +2413,7 @@ Returns epoch activation information for a stake account #### Parameters: - `` - Pubkey of stake account to query, as base-58 encoded string -- `` - (optional) Configuration object containing the following fields: +- (optional) `` - Configuration object containing the following fields: - (optional) `commitment: ` - [Commitment](jsonrpc-api.md#configuring-state-commitment) - (optional) `epoch: ` - epoch for which to calculate activation details. If parameter not provided, defaults to current epoch. - (optional) `minContextSlot: ` - set the minimum slot that the request can be evaluated at. @@ -2480,7 +2486,8 @@ Returns the stake minimum delegation, in lamports. #### Parameters: -- `` - (optional) [Commitment](jsonrpc-api.md#configuring-state-commitment) +- (optional) `` - Configuration object containing the following field: + - (optional) `commitment: ` - [Commitment](jsonrpc-api.md#configuring-state-commitment) #### Results: @@ -2519,8 +2526,8 @@ Returns information about the current supply. #### Parameters: -- `` - (optional) Configuration object containing the following optional fields: - - (optional) [Commitment](jsonrpc-api.md#configuring-state-commitment) +- (optional) `` - Configuration object containing the following optional fields: + - (optional) `commitment: ` - [Commitment](jsonrpc-api.md#configuring-state-commitment) - (optional) `excludeNonCirculatingAccountsList: ` - exclude non circulating accounts list from response #### Results: @@ -2574,7 +2581,8 @@ Returns the token balance of an SPL Token account. #### Parameters: - `` - Pubkey of Token account to query, as base-58 encoded string -- `` - (optional) [Commitment](jsonrpc-api.md#configuring-state-commitment) +- (optional) `` - Configuration object containing the following field: + - (optional) `commitment: ` - [Commitment](jsonrpc-api.md#configuring-state-commitment) #### Results: @@ -2628,7 +2636,7 @@ Returns all SPL Token accounts by approved Delegate. - `` - Either: - `mint: ` - Pubkey of the specific token Mint to limit accounts to, as base-58 encoded string; or - `programId: ` - Pubkey of the Token program that owns the accounts, as base-58 encoded string -- `` - (optional) Configuration object containing the following fields: +- (optional) `` - Configuration object containing the following fields: - (optional) `commitment: ` - [Commitment](jsonrpc-api.md#configuring-state-commitment) - (optional) `encoding: ` - encoding for Account data, either "base58" (_slow_), "base64", "base64+zstd", or "jsonParsed". "base58" is limited to Account data of less than 129 bytes. @@ -2734,7 +2742,7 @@ Returns all SPL Token accounts by token owner. - `` - Either: - `mint: ` - Pubkey of the specific token Mint to limit accounts to, as base-58 encoded string; or - `programId: ` - Pubkey of the Token program that owns the accounts, as base-58 encoded string -- `` - (optional) Configuration object containing the following fields: +- (optional) `` - Configuration object containing the following fields: - (optional) `commitment: ` - [Commitment](jsonrpc-api.md#configuring-state-commitment) - (optional) `encoding: ` - encoding for Account data, either "base58" (_slow_), "base64", "base64+zstd", or "jsonParsed". "base58" is limited to Account data of less than 129 bytes. @@ -2838,7 +2846,8 @@ Returns the 20 largest accounts of a particular SPL Token type. #### Parameters: - `` - Pubkey of token Mint to query, as base-58 encoded string -- `` - (optional) [Commitment](jsonrpc-api.md#configuring-state-commitment) +- (optional) `` - Configuration object containing the following field: + - (optional) `commitment: ` - [Commitment](jsonrpc-api.md#configuring-state-commitment) #### Results: @@ -2895,7 +2904,8 @@ Returns the total supply of an SPL Token type. #### Parameters: - `` - Pubkey of token Mint to query, as base-58 encoded string -- `` - (optional) [Commitment](jsonrpc-api.md#configuring-state-commitment) +- (optional) `` - Configuration object containing the following field: + - (optional) `commitment: ` - [Commitment](jsonrpc-api.md#configuring-state-commitment) #### Results: @@ -2941,10 +2951,10 @@ Returns transaction details for a confirmed transaction #### Parameters: - `` - transaction signature as base-58 encoded string -- `` - (optional) Configuration object containing the following optional fields: +- (optional) `` - Configuration object containing the following optional fields: - (optional) `encoding: ` - encoding for each returned Transaction, either "json", "jsonParsed", "base58" (_slow_), "base64". If parameter not provided, the default encoding is "json". ["jsonParsed" encoding](jsonrpc-api.md#parsed-responses) attempts to use program-specific instruction parsers to return more human-readable and explicit data in the `transaction.message.instructions` list. If "jsonParsed" is requested but a parser cannot be found, the instruction falls back to regular JSON encoding (`accounts`, `data`, and `programIdIndex` fields). - - (optional) [Commitment](jsonrpc-api.md#configuring-state-commitment); "processed" is not supported. If parameter not provided, the default is "finalized". + - (optional) `commitment: ` - [Commitment](jsonrpc-api.md#configuring-state-commitment); "processed" is not supported. If parameter not provided, the default is "finalized". - (optional) `maxSupportedTransactionVersion: ` - set the max transaction version to return in responses. If the requested transaction is a higher version, an error will be returned. If this parameter is omitted, only legacy transactions will be returned, and any versioned transaction will prompt the error. #### Results: @@ -3099,7 +3109,7 @@ Returns the current Transaction count from the ledger #### Parameters: -- `` - (optional) Configuration object containing the following fields: +- (optional) `` - Configuration object containing the following fields: - (optional) `commitment: ` - [Commitment](jsonrpc-api.md#configuring-state-commitment) - (optional) `minContextSlot: ` - set the minimum slot that the request can be evaluated at. @@ -3159,8 +3169,8 @@ Returns the account info and associated stake for all the voting accounts in the #### Parameters: -- `` - (optional) Configuration object containing the following field: - - (optional) [Commitment](jsonrpc-api.md#configuring-state-commitment) +- (optional) `` - Configuration object containing the following field: + - (optional) `commitment: ` - [Commitment](jsonrpc-api.md#configuring-state-commitment) - (optional) `votePubkey: ` - Only return results for this validator vote address (base-58 encoded) - (optional) `keepUnstakedDelinquents: ` - Do not filter out delinquent validators with no stake - (optional) `delinquentSlotDistance: ` - Specify the number of slots behind the tip that a validator must fall to be considered delinquent. **NOTE:** For the sake of consistency between ecosystem products, _it is **not** recommended that this argument be specified._ @@ -3279,7 +3289,7 @@ Returns whether a blockhash is still valid or not #### Parameters: - `blockhash: ` - the blockhash of this block, as base-58 encoded string -- `` - (optional) Configuration object containing the following fields: +- (optional) `` - Configuration object containing the following fields: - (optional) `commitment: ` - [Commitment](jsonrpc-api.md#configuring-state-commitment) (used for retrieving blockhash) - (optional) `minContextSlot: ` - set the minimum slot that the request can be evaluated at. @@ -3356,7 +3366,8 @@ Requests an airdrop of lamports to a Pubkey - `` - Pubkey of account to receive lamports, as base-58 encoded string - `` - lamports, as a u64 -- `` - (optional) [Commitment](jsonrpc-api.md#configuring-state-commitment) (used for retrieving blockhash and verifying airdrop success) +- (optional) `` - Configuration object containing the following field: + - (optional) `commitment: ` - [Commitment](jsonrpc-api.md#configuring-state-commitment) (used for retrieving blockhash and verifying airdrop success) #### Results: @@ -3415,11 +3426,11 @@ submission. #### Parameters: - `` - fully-signed Transaction, as encoded string -- `` - (optional) Configuration object containing the following field: +- (optional) `` - Configuration object containing the following field: - `skipPreflight: ` - if true, skip the preflight transaction checks (default: false) - - `preflightCommitment: ` - (optional) [Commitment](jsonrpc-api.md#configuring-state-commitment) level to use for preflight (default: `"finalized"`). - - `encoding: ` - (optional) Encoding used for the transaction data. Either `"base58"` (_slow_, **DEPRECATED**), or `"base64"`. (default: `"base58"`). - - `maxRetries: ` - (optional) Maximum number of times for the RPC node to retry sending the transaction to the leader. + - (optional) `preflightCommitment: ` - [Commitment](jsonrpc-api.md#configuring-state-commitment) level to use for preflight (default: `"finalized"`). + - (optional) `encoding: ` - Encoding used for the transaction data. Either `"base58"` (_slow_, **DEPRECATED**), or `"base64"`. (default: `"base58"`). + - (optional) `maxRetries: ` - Maximum number of times for the RPC node to retry sending the transaction to the leader. If this parameter not provided, the RPC node will retry the transaction until it is finalized or until the blockhash expires. - (optional) `minContextSlot: ` - set the minimum slot at which to perform preflight transaction checks. @@ -3460,14 +3471,14 @@ Simulate sending a transaction #### Parameters: - `` - Transaction, as an encoded string. The transaction must have a valid blockhash, but is not required to be signed. -- `` - (optional) Configuration object containing the following fields: +- (optional) `` - Configuration object containing the following fields: - `sigVerify: ` - if true the transaction signatures will be verified (default: false, conflicts with `replaceRecentBlockhash`) - - `commitment: ` - (optional) [Commitment](jsonrpc-api.md#configuring-state-commitment) level to simulate the transaction at (default: `"finalized"`). - - `encoding: ` - (optional) Encoding used for the transaction data. Either `"base58"` (_slow_, **DEPRECATED**), or `"base64"`. (default: `"base58"`). - - `replaceRecentBlockhash: ` - (optional) if true the transaction recent blockhash will be replaced with the most recent blockhash. + - (optional) `commitment: ` - [Commitment](jsonrpc-api.md#configuring-state-commitment) level to simulate the transaction at (default: `"finalized"`). + - (optional) `encoding: ` - Encoding used for the transaction data. Either `"base58"` (_slow_, **DEPRECATED**), or `"base64"`. (default: `"base58"`). + - (optional) `replaceRecentBlockhash: ` - if true the transaction recent blockhash will be replaced with the most recent blockhash. (default: false, conflicts with `sigVerify`) - - `accounts: ` - (optional) Accounts configuration object containing the following fields: - - `encoding: ` - (optional) encoding for returned Account data, either "base64" (default), "base64+zstd" or "jsonParsed". + - (optional) `accounts: ` - Accounts configuration object containing the following fields: + - (optional) `encoding: ` - encoding for returned Account data, either "base64" (default), "base64+zstd" or "jsonParsed". ["jsonParsed" encoding](jsonrpc-api.md#parsed-responses) attempts to use program-specific state parsers to return more human-readable and explicit account state data. If "jsonParsed" is requested but a parser cannot be found, the field falls back to binary encoding, detectable when the `data` field is type ``. - `addresses: ` - An array of accounts to return, as base-58 encoded strings - (optional) `minContextSlot: ` - set the minimum slot that the request can be evaluated at. @@ -3557,8 +3568,8 @@ Subscribe to an account to receive notifications when the lamports or data for a #### Parameters: - `` - account Pubkey, as base-58 encoded string -- `` - (optional) Configuration object containing the following optional fields: - - `` - (optional) [Commitment](jsonrpc-api.md#configuring-state-commitment) +- (optional) `` - Configuration object containing the following optional fields: + - (optional) `commitment: ` - [Commitment](jsonrpc-api.md#configuring-state-commitment) - `encoding: ` - encoding for Account data, either "base58" (_slow_), "base64", "base64+zstd" or "jsonParsed". ["jsonParsed" encoding](jsonrpc-api.md#parsed-responses) attempts to use program-specific state parsers to return more human-readable and explicit account state data. If "jsonParsed" is requested but a parser cannot be found, the field falls back to binary encoding, detectable when the `data` field is type ``. @@ -3708,8 +3719,8 @@ Subscribe to receive notification anytime a new block is Confirmed or Finalized. - `filter: |` - filter criteria for the logs to receive results by account type; currently supported: - "all" - include all transactions in block - `{ "mentionsAccountOrProgram": }` - return only transactions that mention the provided public key (as base-58 encoded string). If no mentions in a given block, then no notification will be sent. -- `` - (optional) Configuration object containing the following optional fields: - - (optional) [Commitment](jsonrpc-api.md#configuring-state-commitment) +- (optional) `` - Configuration object containing the following optional fields: + - (optional) `commitment: ` - [Commitment](jsonrpc-api.md#configuring-state-commitment) - (optional) `encoding: ` - encoding for Account data, either "base58" (_slow_), "base64", "base64+zstd" or "jsonParsed". ["jsonParsed" encoding](jsonrpc-api.md#parsed-responses) attempts to use program-specific state parsers to return more human-readable and explicit account state data. If "jsonParsed" is requested but a parser cannot be found, the field falls back to base64 encoding, detectable when the `data` field is type ``. Default is "base64". - (optional) `transactionDetails: ` - level of transaction detail to return, either "full", "signatures", or "none". If parameter not provided, the default detail level is "full". @@ -3998,8 +4009,8 @@ Subscribe to transaction logging - "all" - subscribe to all transactions except for simple vote transactions - "allWithVotes" - subscribe to all transactions including simple vote transactions - `{ "mentions": [ ] }` - subscribe to all transactions that mention the provided Pubkey (as base-58 encoded string) -- `` - (optional) Configuration object containing the following optional fields: - - (optional) [Commitment](jsonrpc-api.md#configuring-state-commitment) +- (optional) `` - Configuration object containing the following optional fields: + - (optional) `commitment: ` - [Commitment](jsonrpc-api.md#configuring-state-commitment) #### Results: @@ -4102,8 +4113,8 @@ Subscribe to a program to receive notifications when the lamports or data for a #### Parameters: - `` - program_id Pubkey, as base-58 encoded string -- `` - (optional) Configuration object containing the following optional fields: - - (optional) [Commitment](jsonrpc-api.md#configuring-state-commitment) +- (optional) `` - Configuration object containing the following optional fields: + - (optional) `commitment: ` - [Commitment](jsonrpc-api.md#configuring-state-commitment) - `encoding: ` - encoding for Account data, either "base58" (_slow_), "base64", "base64+zstd" or "jsonParsed". ["jsonParsed" encoding](jsonrpc-api.md#parsed-responses) attempts to use program-specific state parsers to return more human-readable and explicit account state data. If "jsonParsed" is requested but a parser cannot be found, the field falls back to base64 encoding, detectable when the `data` field is type ``. - (optional) `filters: ` - filter results using various [filter objects](jsonrpc-api.md#filters); account must meet all filter criteria to be included in results @@ -4270,7 +4281,8 @@ Subscribe to a transaction signature to receive notification when the transactio #### Parameters: - `` - Transaction Signature, as base-58 encoded string -- `` - (optional) [Commitment](jsonrpc-api.md#configuring-state-commitment) +- (optional) `` - Configuration object containing the following field: + - (optional) `commitment: ` - [Commitment](jsonrpc-api.md#configuring-state-commitment) #### Results: @@ -4692,12 +4704,12 @@ Returns identity and transaction information about a confirmed block in the ledg #### Parameters: - `` - slot, as u64 integer -- `` - (optional) Configuration object containing the following optional fields: +- (optional) `` - Configuration object containing the following optional fields: - (optional) `encoding: ` - encoding for each returned Transaction, either "json", "jsonParsed", "base58" (_slow_), "base64". If parameter not provided, the default encoding is "json". ["jsonParsed" encoding](jsonrpc-api.md#parsed-responses) attempts to use program-specific instruction parsers to return more human-readable and explicit data in the `transaction.message.instructions` list. If "jsonParsed" is requested but a parser cannot be found, the instruction falls back to regular JSON encoding (`accounts`, `data`, and `programIdIndex` fields). - (optional) `transactionDetails: ` - level of transaction detail to return, either "full", "signatures", or "none". If parameter not provided, the default detail level is "full". - (optional) `rewards: bool` - whether to populate the `rewards` array. If parameter not provided, the default includes rewards. - - (optional) [Commitment](jsonrpc-api.md#configuring-state-commitment); "processed" is not supported. If parameter not provided, the default is "finalized". + - (optional) `commitment: ` - [Commitment](jsonrpc-api.md#configuring-state-commitment); "processed" is not supported. If parameter not provided, the default is "finalized". #### Results: @@ -4862,8 +4874,9 @@ Returns a list of confirmed blocks between two slots #### Parameters: - `` - start_slot, as u64 integer -- `` - (optional) end_slot, as u64 integer -- (optional) [Commitment](jsonrpc-api.md#configuring-state-commitment); "processed" is not supported. If parameter not provided, the default is "finalized". +- (optional) `` - end_slot, as u64 integer +- (optional) `` - Configuration object containing the following field: + - (optional) `commitment: ` - [Commitment](jsonrpc-api.md#configuring-state-commitment); "processed" is not supported. If parameter not provided, the default is "finalized". #### Results: @@ -4898,7 +4911,8 @@ Returns a list of confirmed blocks starting at the given slot - `` - start_slot, as u64 integer - `` - limit, as u64 integer -- (optional) [Commitment](jsonrpc-api.md#configuring-state-commitment); "processed" is not supported. If parameter not provided, the default is "finalized". +- (optional) `` - Configuration object containing the following field: + - (optional) `commitment: ` - [Commitment](jsonrpc-api.md#configuring-state-commitment); "processed" is not supported. If parameter not provided, the default is "finalized". #### Results: @@ -4933,12 +4947,12 @@ provided signature or most recent confirmed block #### Parameters: - `` - account address as base-58 encoded string -- `` - (optional) Configuration object containing the following fields: - - `limit: ` - (optional) maximum transaction signatures to return (between 1 and 1,000, default: 1,000). - - `before: ` - (optional) start searching backwards from this transaction signature. +- (optional) `` - Configuration object containing the following fields: + - (optional) `limit: ` - maximum transaction signatures to return (between 1 and 1,000, default: 1,000). + - (optional) `before: ` - start searching backwards from this transaction signature. If not provided the search starts from the top of the highest max confirmed block. - - `until: ` - (optional) search until this transaction signature, if found before limit reached. - - (optional) [Commitment](jsonrpc-api.md#configuring-state-commitment); "processed" is not supported. If parameter not provided, the default is "finalized". + - (optional) `until: ` - search until this transaction signature, if found before limit reached. + - (optional) `commitment: ` - [Commitment](jsonrpc-api.md#configuring-state-commitment); "processed" is not supported. If parameter not provided, the default is "finalized". #### Results: @@ -5000,10 +5014,10 @@ Returns transaction details for a confirmed transaction #### Parameters: - `` - transaction signature as base-58 encoded string -- `` - (optional) Configuration object containing the following optional fields: +- (optional) `` - Configuration object containing the following optional fields: - (optional) `encoding: ` - encoding for each returned Transaction, either "json", "jsonParsed", "base58" (_slow_), "base64". If parameter not provided, the default encoding is "json". ["jsonParsed" encoding](jsonrpc-api.md#parsed-responses) attempts to use program-specific instruction parsers to return more human-readable and explicit data in the `transaction.message.instructions` list. If "jsonParsed" is requested but a parser cannot be found, the instruction falls back to regular JSON encoding (`accounts`, `data`, and `programIdIndex` fields). - - (optional) [Commitment](jsonrpc-api.md#configuring-state-commitment); "processed" is not supported. If parameter not provided, the default is "finalized". + - (optional) `commitment: ` - [Commitment](jsonrpc-api.md#configuring-state-commitment); "processed" is not supported. If parameter not provided, the default is "finalized". #### Results: @@ -5151,7 +5165,7 @@ Returns the fee calculator associated with the query blockhash, or `null` if the #### Parameters: - `` - query blockhash as a Base58 encoded string -- `` - (optional) Configuration object containing the following fields: +- (optional) `` - Configuration object containing the following fields: - (optional) `commitment: ` - [Commitment](jsonrpc-api.md#configuring-state-commitment) - (optional) `minContextSlot: ` - set the minimum slot that the request can be evaluated at. @@ -5261,7 +5275,8 @@ which the blockhash will be valid. #### Parameters: -- `` - (optional) [Commitment](jsonrpc-api.md#configuring-state-commitment) +- (optional) `` - Configuration object containing the following field: + - (optional) `commitment: ` - [Commitment](jsonrpc-api.md#configuring-state-commitment) #### Results: @@ -5313,7 +5328,8 @@ Returns a recent block hash from the ledger, and a fee schedule that can be used #### Parameters: -- `` - (optional) [Commitment](jsonrpc-api.md#configuring-state-commitment) +- (optional) `` - Configuration object containing the following field: + - (optional) `commitment: ` - [Commitment](jsonrpc-api.md#configuring-state-commitment) #### Results: From c42c21005cd02e4b7feb6db89c337ea20058b267 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Fri, 2 Sep 2022 20:22:14 +0000 Subject: [PATCH 093/465] RPC Notifier Signal when Setup Complete (backport #27481) (#27578) RPC Notifier Signal when Setup Complete (#27481) * RPC notifier signal when ready (cherry picked from commit 242c9cb442ec195267c37d30c95273bd8e102daf) Co-authored-by: Brennan Watt --- core/src/validator.rs | 1 + rpc/src/rpc_subscriptions.rs | 27 +++++++++++++++++++++++---- 2 files changed, 24 insertions(+), 4 deletions(-) diff --git a/core/src/validator.rs b/core/src/validator.rs index fa354f3f758af5..c23f5786caf000 100644 --- a/core/src/validator.rs +++ b/core/src/validator.rs @@ -737,6 +737,7 @@ impl Validator { block_commitment_cache.clone(), optimistically_confirmed_bank.clone(), &config.pubsub_config, + None, )); let max_slots = Arc::new(MaxSlots::default()); diff --git a/rpc/src/rpc_subscriptions.rs b/rpc/src/rpc_subscriptions.rs index 9ee8696d7b5cb7..718fc4d2b78e97 100644 --- a/rpc/src/rpc_subscriptions.rs +++ b/rpc/src/rpc_subscriptions.rs @@ -559,6 +559,7 @@ impl RpcSubscriptions { block_commitment_cache, optimistically_confirmed_bank, &PubSubConfig::default(), + None, ) } @@ -573,14 +574,13 @@ impl RpcSubscriptions { let blockstore = Blockstore::open(&ledger_path).unwrap(); let blockstore = Arc::new(blockstore); - Self::new_with_config( + Self::new_for_tests_with_blockstore( exit, max_complete_transaction_status_slot, blockstore, bank_forks, block_commitment_cache, optimistically_confirmed_bank, - &PubSubConfig::default_for_tests(), ) } @@ -592,7 +592,9 @@ impl RpcSubscriptions { block_commitment_cache: Arc>, optimistically_confirmed_bank: Arc>, ) -> Self { - Self::new_with_config( + let rpc_notifier_ready = Arc::new(AtomicBool::new(false)); + + let rpc_subscriptions = Self::new_with_config( exit, max_complete_transaction_status_slot, blockstore, @@ -600,7 +602,20 @@ impl RpcSubscriptions { block_commitment_cache, optimistically_confirmed_bank, &PubSubConfig::default_for_tests(), - ) + Some(rpc_notifier_ready.clone()), + ); + + // Ensure RPC notifier is ready to receive notifications before proceeding + let start_time = Instant::now(); + loop { + if rpc_notifier_ready.load(Ordering::Relaxed) { + break; + } else if (Instant::now() - start_time).as_millis() > 5000 { + panic!("RPC notifier thread setup took too long"); + } + } + + rpc_subscriptions } pub fn new_with_config( @@ -611,6 +626,7 @@ impl RpcSubscriptions { block_commitment_cache: Arc>, optimistically_confirmed_bank: Arc>, config: &PubSubConfig, + rpc_notifier_ready: Option>, ) -> Self { let (notification_sender, notification_receiver) = crossbeam_channel::unbounded(); @@ -640,6 +656,9 @@ impl RpcSubscriptions { .build() .unwrap(); pool.install(|| { + if let Some(rpc_notifier_ready) = rpc_notifier_ready { + rpc_notifier_ready.fetch_or(true, Ordering::Relaxed); + } Self::process_notifications( exit_clone, max_complete_transaction_status_slot, From 9dc85c6f8f5c4c2105a04bc230d11aeb578d8ed5 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Sat, 3 Sep 2022 04:37:48 +0000 Subject: [PATCH 094/465] chore: tee coverage test stderr (backport #27551) (#27584) chore: tee coverage test stderr (#27551) * chore: tee coverage test stderr * chore: add --no-capture (cherry picked from commit 4071dc3cac3fecdb6acec54ba6bb807b15c80761) Co-authored-by: Yihau Chen --- scripts/coverage.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/coverage.sh b/scripts/coverage.sh index d06bfcdb1a7cb6..059ddc2e20c654 100755 --- a/scripts/coverage.sh +++ b/scripts/coverage.sh @@ -79,7 +79,7 @@ NPROC=$(nproc) JOBS=$((JOBS>NPROC ? NPROC : JOBS)) RUST_LOG=solana=trace _ "$cargo" nightly test --jobs "$JOBS" --target-dir target/cov --no-run "${packages[@]}" -if RUST_LOG=solana=trace _ "$cargo" nightly test --jobs "$JOBS" --target-dir target/cov "${packages[@]}" 2> target/cov/coverage-stderr.log; then +if RUST_LOG=solana=trace _ "$cargo" nightly test --jobs "$JOBS" --target-dir target/cov "${packages[@]}" -- --nocapture 2> >(tee target/cov/coverage-stderr.log >&2); then test_status=0 else test_status=$? From 87af8b9550b6f207ff679944eecef93156170846 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Tue, 6 Sep 2022 12:46:14 -0700 Subject: [PATCH 095/465] protect access to rent paying account vec (backport #26919) (#27562) protect access to rent paying account vec (#26919) (cherry picked from commit 73fe4004075508ef808d5b63ef8fadc02024100c) Co-authored-by: Jeff Washington (jwash) --- runtime/src/rent_paying_accounts_by_partition.rs | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/runtime/src/rent_paying_accounts_by_partition.rs b/runtime/src/rent_paying_accounts_by_partition.rs index 286e5eebd5483b..9232677ac96ed7 100644 --- a/runtime/src/rent_paying_accounts_by_partition.rs +++ b/runtime/src/rent_paying_accounts_by_partition.rs @@ -5,6 +5,10 @@ use { std::collections::HashSet, }; +lazy_static! { + pub static ref EMPTY_HASHSET: HashSet = HashSet::default(); +} + /// populated at startup with the accounts that were found that are rent paying. /// These are the 'possible' rent paying accounts. /// This set can never grow during runtime since it is not possible to create rent paying accounts now. @@ -45,7 +49,9 @@ impl RentPayingAccountsByPartition { &self, partition_end_index: PartitionIndex, ) -> &HashSet { - &self.accounts[partition_end_index as usize] + self.accounts + .get(partition_end_index as usize) + .unwrap_or(&EMPTY_HASHSET) } pub fn is_initialized(&self) -> bool { self.partition_count != 0 From 2722cbc68f461a3c36ba6cd32fdb4a4278dd2759 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Wed, 7 Sep 2022 02:43:36 +0000 Subject: [PATCH 096/465] track time to coalesce entries in recv_slot_entries (backport #27525) (#27628) track time to coalesce entries in recv_slot_entries (#27525) (cherry picked from commit 269eb519dda9d5e13dc8be1bd4f3eaea07333372) Co-authored-by: Jeff Biseda --- core/src/broadcast_stage/broadcast_utils.rs | 19 ++++++++++--------- .../broadcast_stage/standard_broadcast_run.rs | 7 +++++++ ledger/src/shred/stats.rs | 4 ++++ 3 files changed, 21 insertions(+), 9 deletions(-) diff --git a/core/src/broadcast_stage/broadcast_utils.rs b/core/src/broadcast_stage/broadcast_utils.rs index 8079d396ddab7a..f9485d59a9ebd8 100644 --- a/core/src/broadcast_stage/broadcast_utils.rs +++ b/core/src/broadcast_stage/broadcast_utils.rs @@ -18,6 +18,7 @@ const ENTRY_COALESCE_DURATION: Duration = Duration::from_millis(50); pub(super) struct ReceiveResults { pub entries: Vec, pub time_elapsed: Duration, + pub time_coalesced: Duration, pub bank: Arc, pub last_tick_height: u64, } @@ -35,11 +36,8 @@ pub(super) fn recv_slot_entries(receiver: &Receiver) -> Result 32 * ShredData::capacity(/*merkle_proof_size*/ None).unwrap() as u64; let timer = Duration::new(1, 0); let recv_start = Instant::now(); - let (mut bank, (entry, mut last_tick_height)) = receiver.recv_timeout(timer)?; - let mut entries = vec![entry]; - assert!(last_tick_height <= bank.max_tick_height()); // Drain channel @@ -63,14 +61,15 @@ pub(super) fn recv_slot_entries(receiver: &Receiver) -> Result let mut serialized_batch_byte_count = serialized_size(&entries)?; // Wait up to `ENTRY_COALESCE_DURATION` to try to coalesce entries into a 32 shred batch - let mut coalesce_deadline = Instant::now() + ENTRY_COALESCE_DURATION; + let mut coalesce_start = Instant::now(); while last_tick_height != bank.max_tick_height() && serialized_batch_byte_count < target_serialized_batch_byte_count { - let (try_bank, (entry, tick_height)) = match receiver.recv_deadline(coalesce_deadline) { - Ok(working_bank_entry) => working_bank_entry, - Err(_) => break, - }; + let (try_bank, (entry, tick_height)) = + match receiver.recv_deadline(coalesce_start + ENTRY_COALESCE_DURATION) { + Ok(working_bank_entry) => working_bank_entry, + Err(_) => break, + }; // If the bank changed, that implies the previous slot was interrupted and we do not have to // broadcast its entries. if try_bank.slot() != bank.slot() { @@ -78,7 +77,7 @@ pub(super) fn recv_slot_entries(receiver: &Receiver) -> Result entries.clear(); serialized_batch_byte_count = 8; // Vec len bank = try_bank; - coalesce_deadline = Instant::now() + ENTRY_COALESCE_DURATION; + coalesce_start = Instant::now(); } last_tick_height = tick_height; let entry_bytes = serialized_size(&entry)?; @@ -86,11 +85,13 @@ pub(super) fn recv_slot_entries(receiver: &Receiver) -> Result entries.push(entry); assert!(last_tick_height <= bank.max_tick_height()); } + let time_coalesced = coalesce_start.elapsed(); let time_elapsed = recv_start.elapsed(); Ok(ReceiveResults { entries, time_elapsed, + time_coalesced, bank, last_tick_height, }) diff --git a/core/src/broadcast_stage/standard_broadcast_run.rs b/core/src/broadcast_stage/standard_broadcast_run.rs index 87715f8b16c82b..3d3138f654e54c 100644 --- a/core/src/broadcast_stage/standard_broadcast_run.rs +++ b/core/src/broadcast_stage/standard_broadcast_run.rs @@ -177,6 +177,7 @@ impl StandardBroadcastRun { receive_results: ReceiveResults, ) -> Result<()> { let mut receive_elapsed = receive_results.time_elapsed; + let mut coalesce_elapsed = receive_results.time_coalesced; let num_entries = receive_results.entries.len(); let bank = receive_results.bank.clone(); let last_tick_height = receive_results.last_tick_height; @@ -193,6 +194,7 @@ impl StandardBroadcastRun { self.current_slot_and_parent = Some((slot, parent_slot)); receive_elapsed = Duration::new(0, 0); + coalesce_elapsed = Duration::new(0, 0); } let mut process_stats = ProcessShredsStats::default(); @@ -291,6 +293,7 @@ impl StandardBroadcastRun { process_stats.shredding_elapsed = to_shreds_time.as_us(); process_stats.get_leader_schedule_elapsed = get_leader_schedule_time.as_us(); process_stats.receive_elapsed = duration_as_us(&receive_elapsed); + process_stats.coalesce_elapsed = duration_as_us(&coalesce_elapsed); process_stats.coding_send_elapsed = coding_send_time.as_us(); self.process_shreds_stats += process_stats; @@ -552,6 +555,7 @@ mod test { let receive_results = ReceiveResults { entries: ticks0.clone(), time_elapsed: Duration::new(3, 0), + time_coalesced: Duration::new(2, 0), bank: bank0.clone(), last_tick_height: (ticks0.len() - 1) as u64, }; @@ -620,6 +624,7 @@ mod test { let receive_results = ReceiveResults { entries: ticks1.clone(), time_elapsed: Duration::new(2, 0), + time_coalesced: Duration::new(1, 0), bank: bank2, last_tick_height: (ticks1.len() - 1) as u64, }; @@ -684,6 +689,7 @@ mod test { let receive_results = ReceiveResults { entries: ticks, time_elapsed: Duration::new(1, 0), + time_coalesced: Duration::new(0, 0), bank: bank.clone(), last_tick_height, }; @@ -727,6 +733,7 @@ mod test { let receive_results = ReceiveResults { entries: ticks.clone(), time_elapsed: Duration::new(3, 0), + time_coalesced: Duration::new(2, 0), bank: bank0, last_tick_height: ticks.len() as u64, }; diff --git a/ledger/src/shred/stats.rs b/ledger/src/shred/stats.rs index c095906583fc39..c48e4901bf6c90 100644 --- a/ledger/src/shred/stats.rs +++ b/ledger/src/shred/stats.rs @@ -17,6 +17,7 @@ pub struct ProcessShredsStats { pub sign_coding_elapsed: u64, pub coding_send_elapsed: u64, pub get_leader_schedule_elapsed: u64, + pub coalesce_elapsed: u64, // Histogram count of num_data_shreds obtained from serializing entries // counted in 5 buckets. num_data_shreds_hist: [usize; 5], @@ -83,6 +84,7 @@ impl ProcessShredsStats { ("num_data_shreds_31", self.num_data_shreds_hist[2], i64), ("num_data_shreds_63", self.num_data_shreds_hist[3], i64), ("num_data_shreds_64", self.num_data_shreds_hist[4], i64), + ("coalesce_elapsed", self.coalesce_elapsed, i64), ); *self = Self::default(); } @@ -134,6 +136,7 @@ impl AddAssign for ProcessShredsStats { sign_coding_elapsed, coding_send_elapsed, get_leader_schedule_elapsed, + coalesce_elapsed, num_data_shreds_hist, num_extant_slots, data_buffer_residual, @@ -146,6 +149,7 @@ impl AddAssign for ProcessShredsStats { self.sign_coding_elapsed += sign_coding_elapsed; self.coding_send_elapsed += coding_send_elapsed; self.get_leader_schedule_elapsed += get_leader_schedule_elapsed; + self.coalesce_elapsed += coalesce_elapsed; self.num_extant_slots += num_extant_slots; self.data_buffer_residual += data_buffer_residual; for (i, bucket) in self.num_data_shreds_hist.iter_mut().enumerate() { From e8744e3f8b1a22c9b5d298a33f6ca7f0f6dc3099 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Wed, 7 Sep 2022 05:14:23 +0000 Subject: [PATCH 097/465] RPC: include resolved keys from table lookups in parsed message response (backport #27552) (#27610) RPC: include resolved keys from table lookups in parsed message response (#27552) * RPC: include resolved keys from table lookups in parsed message response * Add source to ParsedAccount * Ensure that rpc client can parse account meta from old api versions (cherry picked from commit c620b7b34f90172f240a6ca9fb6c16d850b1f775) Co-authored-by: Justin Starry --- transaction-status/src/lib.rs | 6 +-- transaction-status/src/parse_accounts.rs | 55 ++++++++++++++++++++---- 2 files changed, 49 insertions(+), 12 deletions(-) diff --git a/transaction-status/src/lib.rs b/transaction-status/src/lib.rs index 4a677606fcad51..9409308d3c5938 100644 --- a/transaction-status/src/lib.rs +++ b/transaction-status/src/lib.rs @@ -3,7 +3,7 @@ pub use {crate::extract_memos::extract_and_fmt_memos, solana_sdk::reward_type::RewardType}; use { crate::{ - parse_accounts::{parse_accounts, parse_static_accounts, ParsedAccount}, + parse_accounts::{parse_legacy_message_accounts, parse_v0_message_accounts, ParsedAccount}, parse_instruction::{parse, ParsedInstruction}, }, solana_account_decoder::parse_token::UiTokenAmount, @@ -903,7 +903,7 @@ impl Encodable for Message { if encoding == UiTransactionEncoding::JsonParsed { let account_keys = AccountKeys::new(&self.account_keys, None); UiMessage::Parsed(UiParsedMessage { - account_keys: parse_accounts(self), + account_keys: parse_legacy_message_accounts(self), recent_blockhash: self.recent_blockhash.to_string(), instructions: self .instructions @@ -935,7 +935,7 @@ impl EncodableWithMeta for v0::Message { let account_keys = AccountKeys::new(&self.account_keys, Some(&meta.loaded_addresses)); let loaded_message = LoadedMessage::new_borrowed(self, &meta.loaded_addresses); UiMessage::Parsed(UiParsedMessage { - account_keys: parse_static_accounts(&loaded_message), + account_keys: parse_v0_message_accounts(&loaded_message), recent_blockhash: self.recent_blockhash.to_string(), instructions: self .instructions diff --git a/transaction-status/src/parse_accounts.rs b/transaction-status/src/parse_accounts.rs index a84fd06bf92ca1..6ad0ec82a6fdad 100644 --- a/transaction-status/src/parse_accounts.rs +++ b/transaction-status/src/parse_accounts.rs @@ -6,27 +6,42 @@ pub struct ParsedAccount { pub pubkey: String, pub writable: bool, pub signer: bool, + pub source: Option, } -pub fn parse_accounts(message: &Message) -> Vec { +#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)] +#[serde(rename_all = "camelCase")] +pub enum ParsedAccountSource { + Transaction, + LookupTable, +} + +pub fn parse_legacy_message_accounts(message: &Message) -> Vec { let mut accounts: Vec = vec![]; for (i, account_key) in message.account_keys.iter().enumerate() { accounts.push(ParsedAccount { pubkey: account_key.to_string(), writable: message.is_writable(i), signer: message.is_signer(i), + source: Some(ParsedAccountSource::Transaction), }); } accounts } -pub fn parse_static_accounts(message: &LoadedMessage) -> Vec { +pub fn parse_v0_message_accounts(message: &LoadedMessage) -> Vec { let mut accounts: Vec = vec![]; - for (i, account_key) in message.static_account_keys().iter().enumerate() { + for (i, account_key) in message.account_keys().iter().enumerate() { + let source = if i < message.static_account_keys().len() { + ParsedAccountSource::Transaction + } else { + ParsedAccountSource::LookupTable + }; accounts.push(ParsedAccount { pubkey: account_key.to_string(), writable: message.is_writable(i), signer: message.is_signer(i), + source: Some(source), }); } accounts @@ -43,7 +58,7 @@ mod test { }; #[test] - fn test_parse_accounts() { + fn test_parse_legacy_message_accounts() { let pubkey0 = Pubkey::new_unique(); let pubkey1 = Pubkey::new_unique(); let pubkey2 = Pubkey::new_unique(); @@ -59,38 +74,44 @@ mod test { }; assert_eq!( - parse_accounts(&message), + parse_legacy_message_accounts(&message), vec![ ParsedAccount { pubkey: pubkey0.to_string(), writable: true, signer: true, + source: Some(ParsedAccountSource::Transaction), }, ParsedAccount { pubkey: pubkey1.to_string(), writable: false, signer: true, + source: Some(ParsedAccountSource::Transaction), }, ParsedAccount { pubkey: pubkey2.to_string(), writable: true, signer: false, + source: Some(ParsedAccountSource::Transaction), }, ParsedAccount { pubkey: pubkey3.to_string(), writable: false, signer: false, + source: Some(ParsedAccountSource::Transaction), }, ] ); } #[test] - fn test_parse_static_accounts() { + fn test_parse_v0_message_accounts() { let pubkey0 = Pubkey::new_unique(); let pubkey1 = Pubkey::new_unique(); let pubkey2 = Pubkey::new_unique(); let pubkey3 = Pubkey::new_unique(); + let pubkey4 = Pubkey::new_unique(); + let pubkey5 = Pubkey::new_unique(); let message = LoadedMessage::new( v0::Message { header: MessageHeader { @@ -102,33 +123,49 @@ mod test { ..v0::Message::default() }, LoadedAddresses { - writable: vec![Pubkey::new_unique()], - readonly: vec![Pubkey::new_unique()], + writable: vec![pubkey4], + readonly: vec![pubkey5], }, ); assert_eq!( - parse_static_accounts(&message), + parse_v0_message_accounts(&message), vec![ ParsedAccount { pubkey: pubkey0.to_string(), writable: true, signer: true, + source: Some(ParsedAccountSource::Transaction), }, ParsedAccount { pubkey: pubkey1.to_string(), writable: false, signer: true, + source: Some(ParsedAccountSource::Transaction), }, ParsedAccount { pubkey: pubkey2.to_string(), writable: true, signer: false, + source: Some(ParsedAccountSource::Transaction), }, ParsedAccount { pubkey: pubkey3.to_string(), writable: false, signer: false, + source: Some(ParsedAccountSource::Transaction), + }, + ParsedAccount { + pubkey: pubkey4.to_string(), + writable: true, + signer: false, + source: Some(ParsedAccountSource::LookupTable), + }, + ParsedAccount { + pubkey: pubkey5.to_string(), + writable: false, + signer: false, + source: Some(ParsedAccountSource::LookupTable), }, ] ); From 5a421873819b8bd0fda246c42a3173c1d23db6ff Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Wed, 7 Sep 2022 09:55:22 +0000 Subject: [PATCH 098/465] chore: only generate test result on specific branches (backport #27591) (#27635) * chore: only generate test result on specific branches (#27591) * chore: only generate test result on specific branches * lint (cherry picked from commit 8c1093534ee31f861a49f4ad5e47645349f42ca7) # Conflicts: # .buildkite/hooks/post-command # ci/test-stable.sh * fix conflict Co-authored-by: Yihau Chen --- .buildkite/hooks/post-command | 12 +++++ ci/test-stable.sh | 97 ++++++++++++++++++++++++++++++----- 2 files changed, 96 insertions(+), 13 deletions(-) diff --git a/.buildkite/hooks/post-command b/.buildkite/hooks/post-command index 513b1b1f89b1a0..a5b86ec1c2f1c8 100644 --- a/.buildkite/hooks/post-command +++ b/.buildkite/hooks/post-command @@ -20,6 +20,18 @@ else SUCCESS=false fi + if [[ -n $BUILDKITE && -f "results.json" ]]; then + # prepare result file + awk '/{ "type": .* }/' results.json > sanitized-results.json + + # upload to buildkite + buildkite-test-collector < sanitized-results.json + + # upload to datadog + cargo2junit > results.xml < sanitized-results.json + datadog-ci junit upload --service solana results.xml + fi + point_tags="pipeline=$BUILDKITE_PIPELINE_SLUG,job=$CI_LABEL,pr=$PR,success=$SUCCESS" point_tags="${point_tags// /\\ }" # Escape spaces diff --git a/ci/test-stable.sh b/ci/test-stable.sh index 5372183da05939..a9f8e3aa129bff 100755 --- a/ci/test-stable.sh +++ b/ci/test-stable.sh @@ -12,6 +12,12 @@ annotate() { } } +exit_if_error() { + if [[ "$1" -ne 0 ]]; then + exit "$1" + fi +} + # Run the appropriate test based on entrypoint testName=$(basename "$0" .sh) @@ -32,10 +38,35 @@ NPROC=$(nproc) JOBS=$((JOBS>NPROC ? NPROC : JOBS)) +# get channel info +eval "$(ci/channel-info.sh)" + +need_to_generate_test_result() { + local branches=( + "$EDGE_CHANNEL" + "$BETA_CHANNEL" + "$STABLE_CHANNEL" + ) + + for n in "${branches[@]}"; + do + if [[ "$CI_BRANCH" == "$n" ]]; then + return 0 + fi + done + + return 1 +} + echo "Executing $testName" case $testName in test-stable) - _ "$cargo" stable test --jobs "$JOBS" --all --tests --exclude solana-local-cluster ${V:+--verbose} -- --nocapture + if need_to_generate_test_result; then + _ "$cargo" stable test --jobs "$JOBS" --all --tests --exclude solana-local-cluster ${V:+--verbose} -- -Z unstable-options --format json --report-time | tee results.json + exit_if_error "${PIPESTATUS[0]}" + else + _ "$cargo" stable test --jobs "$JOBS" --all --tests --exclude solana-local-cluster ${V:+--verbose} -- --nocapture + fi ;; test-stable-bpf) # Clear the C dependency files, if dependency moves these files are not regenerated @@ -57,9 +88,16 @@ test-stable-bpf) # BPF C program system tests _ make -C programs/bpf/c tests - _ "$cargo" stable test \ - --manifest-path programs/bpf/Cargo.toml \ - --no-default-features --features=bpf_c,bpf_rust -- --nocapture + if need_to_generate_test_result; then + _ "$cargo" stable test \ + --manifest-path programs/bpf/Cargo.toml \ + --no-default-features --features=bpf_c,bpf_rust -- -Z unstable-options --format json --report-time | tee results.json + exit_if_error "${PIPESTATUS[0]}" + else + _ "$cargo" stable test \ + --manifest-path programs/bpf/Cargo.toml \ + --no-default-features --features=bpf_c,bpf_rust -- --nocapture + fi # BPF Rust program unit tests for bpf_test in programs/bpf/rust/*; do @@ -92,10 +130,18 @@ test-stable-bpf) # BPF program instruction count assertion bpf_target_path=programs/bpf/target - _ "$cargo" stable test \ - --manifest-path programs/bpf/Cargo.toml \ - --no-default-features --features=bpf_c,bpf_rust assert_instruction_count \ - -- --nocapture &> "${bpf_target_path}"/deploy/instuction_counts.txt + if need_to_generate_test_result; then + _ "$cargo" stable test \ + --manifest-path programs/bpf/Cargo.toml \ + --no-default-features --features=bpf_c,bpf_rust assert_instruction_count \ + -- -Z unstable-options --format json --report-time |& tee results.json + awk '!/{ "type": .* }/' results.json >"${bpf_target_path}"/deploy/instuction_counts.txt + else + _ "$cargo" stable test \ + --manifest-path programs/bpf/Cargo.toml \ + --no-default-features --features=bpf_c,bpf_rust assert_instruction_count \ + -- --nocapture &> "${bpf_target_path}"/deploy/instuction_counts.txt + fi bpf_dump_archive="bpf-dumps.tar.bz2" rm -f "$bpf_dump_archive" @@ -120,27 +166,52 @@ test-stable-perf) fi _ "$cargo" stable build --bins ${V:+--verbose} - _ "$cargo" stable test --package solana-perf --package solana-ledger --package solana-core --lib ${V:+--verbose} -- --nocapture + if need_to_generate_test_result; then + _ "$cargo" stable test --package solana-perf --package solana-ledger --package solana-core --lib ${V:+--verbose} -- -Z unstable-options --format json --report-time | tee results.json + exit_if_error "${PIPESTATUS[0]}" + else + _ "$cargo" stable test --package solana-perf --package solana-ledger --package solana-core --lib ${V:+--verbose} -- --nocapture + fi _ "$cargo" stable run --manifest-path poh-bench/Cargo.toml ${V:+--verbose} -- --hashes-per-tick 10 ;; test-local-cluster) _ "$cargo" stable build --release --bins ${V:+--verbose} - _ "$cargo" stable test --release --package solana-local-cluster --test local_cluster ${V:+--verbose} -- --nocapture --test-threads=1 + if need_to_generate_test_result; then + _ "$cargo" stable test --release --package solana-local-cluster --test local_cluster ${V:+--verbose} -- --test-threads=1 -Z unstable-options --format json --report-time | tee results.json + exit_if_error "${PIPESTATUS[0]}" + else + _ "$cargo" stable test --release --package solana-local-cluster --test local_cluster ${V:+--verbose} -- --nocapture --test-threads=1 + fi exit 0 ;; test-local-cluster-flakey) _ "$cargo" stable build --release --bins ${V:+--verbose} - _ "$cargo" stable test --release --package solana-local-cluster --test local_cluster_flakey ${V:+--verbose} -- --nocapture --test-threads=1 + if need_to_generate_test_result; then + _ "$cargo" stable test --release --package solana-local-cluster --test local_cluster_flakey ${V:+--verbose} -- --test-threads=1 -Z unstable-options --format json --report-time | tee results.json + exit_if_error "${PIPESTATUS[0]}" + else + _ "$cargo" stable test --release --package solana-local-cluster --test local_cluster_flakey ${V:+--verbose} -- --nocapture --test-threads=1 + fi exit 0 ;; test-local-cluster-slow-1) _ "$cargo" stable build --release --bins ${V:+--verbose} - _ "$cargo" stable test --release --package solana-local-cluster --test local_cluster_slow_1 ${V:+--verbose} -- --nocapture --test-threads=1 + if need_to_generate_test_result; then + _ "$cargo" stable test --release --package solana-local-cluster --test local_cluster_slow_1 ${V:+--verbose} -- --test-threads=1 -Z unstable-options --format json --report-time | tee results.json + exit_if_error "${PIPESTATUS[0]}" + else + _ "$cargo" stable test --release --package solana-local-cluster --test local_cluster_slow_1 ${V:+--verbose} -- --nocapture --test-threads=1 + fi exit 0 ;; test-local-cluster-slow-2) _ "$cargo" stable build --release --bins ${V:+--verbose} - _ "$cargo" stable test --release --package solana-local-cluster --test local_cluster_slow_2 ${V:+--verbose} -- --nocapture --test-threads=1 + if need_to_generate_test_result; then + _ "$cargo" stable test --release --package solana-local-cluster --test local_cluster_slow_2 ${V:+--verbose} -- --test-threads=1 -Z unstable-options --format json --report-time | tee results.json + exit_if_error "${PIPESTATUS[0]}" + else + _ "$cargo" stable test --release --package solana-local-cluster --test local_cluster_slow_2 ${V:+--verbose} -- --nocapture --test-threads=1 + fi exit 0 ;; test-wasm) From 7452527cfb83e263aa5a493ee80f6d9edc6b74fb Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Wed, 7 Sep 2022 17:47:15 +0000 Subject: [PATCH 099/465] Skip loadedAddresses for jsonParsed tx meta (backport #27618) (#27639) Skip loadedAddresses for jsonParsed tx meta (#27618) Skip loaded_addresses for jsonParsed tx meta (cherry picked from commit 1df88307905e1b372bfb8d7cd9c0a5f59fdfe173) Co-authored-by: Tyera Eulberg --- transaction-status/src/lib.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/transaction-status/src/lib.rs b/transaction-status/src/lib.rs index 9409308d3c5938..e8fe2bbf913212 100644 --- a/transaction-status/src/lib.rs +++ b/transaction-status/src/lib.rs @@ -378,7 +378,7 @@ impl UiTransactionStatusMeta { .post_token_balances .map(|balance| balance.into_iter().map(Into::into).collect()), rewards: meta.rewards, - loaded_addresses: Some(UiLoadedAddresses::from(&meta.loaded_addresses)), + loaded_addresses: None, return_data: meta.return_data, compute_units_consumed: meta.compute_units_consumed, } From a39fd77d789a176d07c6c63a494d93404093c012 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Wed, 7 Sep 2022 18:01:25 +0000 Subject: [PATCH 100/465] test-validator clone with get_multiple_accounts (backport #27636) (#27637) test-validator clone with get_multiple_accounts Co-authored-by: skrrb --- test-validator/src/lib.rs | 29 +++++++++++++++++++---------- 1 file changed, 19 insertions(+), 10 deletions(-) diff --git a/test-validator/src/lib.rs b/test-validator/src/lib.rs index 73f4f700562a81..72d622643e30b5 100644 --- a/test-validator/src/lib.rs +++ b/test-validator/src/lib.rs @@ -6,6 +6,7 @@ use { connection_cache::{DEFAULT_TPU_CONNECTION_POOL_SIZE, DEFAULT_TPU_USE_QUIC}, nonblocking, rpc_client::RpcClient, + rpc_request::MAX_MULTIPLE_ACCOUNTS, }, solana_core::{ tower_storage::TowerStorage, @@ -283,16 +284,24 @@ impl TestValidatorGenesis { where T: IntoIterator, { - for address in addresses { - info!("Fetching {} over RPC...", address); - let res = rpc_client.get_account(&address); - if let Ok(account) = res { - self.add_account(address, AccountSharedData::from(account)); - } else if skip_missing { - warn!("Could not find {}, skipping.", address); - } else { - error!("Failed to fetch {}: {}", address, res.unwrap_err()); - solana_core::validator::abort(); + let addresses: Vec = addresses.into_iter().collect(); + for chunk in addresses.chunks(MAX_MULTIPLE_ACCOUNTS) { + info!("Fetching {:?} over RPC...", chunk); + let responses = rpc_client + .get_multiple_accounts(chunk) + .unwrap_or_else(|err| { + error!("Failed to fetch: {}", err); + solana_core::validator::abort(); + }); + for (address, res) in chunk.iter().zip(responses) { + if let Some(account) = res { + self.add_account(*address, AccountSharedData::from(account)); + } else if skip_missing { + warn!("Could not find {}, skipping.", address); + } else { + error!("Failed to fetch {}", address); + solana_core::validator::abort(); + } } } self From aa164ef3b3369739ff965502e6922456222cacba Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Wed, 7 Sep 2022 23:03:25 +0000 Subject: [PATCH 101/465] Fixed the local-cluster test case test_optimistic_confirmation_violation_detection (backport #27580) (#27649) Fixed the local-cluster test case test_optimistic_confirmation_violation_detection (#27580) * Fixed the local-cluster test case test_optimistic_confirmation_violation_detection, which is an existing test issue exposed when we disable the udp based tpu port. In the test, when we restart the node, we restarted the entry point validator. And when the gossip port of the restarted node changes, the two nodes are not able to talk to each other via gossip. I have changed the restart the logic to make the second validator the heavier node and restart it instead of the entypoint one (the first node). * Addressed a review comment from Carl (cherry picked from commit fc054331e964cf2db722756817cf423e2bca3632) Co-authored-by: Lijun Wang <83639177+lijunwangs@users.noreply.github.com> --- local-cluster/tests/local_cluster.rs | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/local-cluster/tests/local_cluster.rs b/local-cluster/tests/local_cluster.rs index 782cae76b543b1..cc88d869924eab 100644 --- a/local-cluster/tests/local_cluster.rs +++ b/local-cluster/tests/local_cluster.rs @@ -1594,7 +1594,7 @@ fn test_optimistic_confirmation_violation_detection() { solana_logger::setup_with_default(RUST_LOG_FILTER); // First set up the cluster with 2 nodes let slots_per_epoch = 2048; - let node_stakes = vec![51 * DEFAULT_NODE_STAKE, 50 * DEFAULT_NODE_STAKE]; + let node_stakes = vec![50 * DEFAULT_NODE_STAKE, 51 * DEFAULT_NODE_STAKE]; let validator_keys: Vec<_> = vec![ "4qhhXNTbKD1a5vxDDLZcHKj7ELNeiivtUBxn3wUK1F5VRsQVP89VUhfXqSfgiFB14GfuBgtrQ96n9NvWQADVkcCg", "3kHBzVwie5vTEaY6nFCPeFT8qDpoXzn7dCEioGRNBTnUDpvwnG85w8Wq63gVWpVTP8k2a8cgcWRjSXyUkEygpXWS", @@ -1603,6 +1603,12 @@ fn test_optimistic_confirmation_violation_detection() { .map(|s| (Arc::new(Keypair::from_base58_string(s)), true)) .take(node_stakes.len()) .collect(); + + // Do not restart the validator which is the cluster entrypoint because its gossip port + // might be changed after restart resulting in the two nodes not being able to + // to form a cluster. The heavier validator is the second node. + let node_to_restart = validator_keys[1].0.pubkey(); + let mut config = ClusterConfig { cluster_lamports: DEFAULT_CLUSTER_LAMPORTS + node_stakes.iter().sum::(), node_stakes: node_stakes.clone(), @@ -1617,12 +1623,11 @@ fn test_optimistic_confirmation_violation_detection() { ..ClusterConfig::default() }; let mut cluster = LocalCluster::new(&mut config, SocketAddrSpace::Unspecified); - let entry_point_id = cluster.entry_point_info.id; // Let the nodes run for a while. Wait for validators to vote on slot `S` // so that the vote on `S-1` is definitely in gossip and optimistic confirmation is // detected on slot `S-1` for sure, then stop the heavier of the two // validators - let client = cluster.get_validator_client(&entry_point_id).unwrap(); + let client = cluster.get_validator_client(&node_to_restart).unwrap(); let mut prev_voted_slot = 0; loop { let last_voted_slot = client @@ -1638,7 +1643,7 @@ fn test_optimistic_confirmation_violation_detection() { sleep(Duration::from_millis(100)); } - let exited_validator_info = cluster.exit_node(&entry_point_id); + let exited_validator_info = cluster.exit_node(&node_to_restart); // Mark fork as dead on the heavier validator, this should make the fork effectively // dead, even though it was optimistically confirmed. The smaller validator should @@ -1658,7 +1663,7 @@ fn test_optimistic_confirmation_violation_detection() { // on ancestors of last vote) // 2) Won't reset to this earlier ancestor becasue reset can only happen on same voted fork if // it's for the last vote slot or later - remove_tower(&exited_validator_info.info.ledger_path, &entry_point_id); + remove_tower(&exited_validator_info.info.ledger_path, &node_to_restart); blockstore.set_dead_slot(prev_voted_slot).unwrap(); } @@ -1668,7 +1673,7 @@ fn test_optimistic_confirmation_violation_detection() { .err() .map(|_| BufferRedirect::stderr().unwrap()); cluster.restart_node( - &entry_point_id, + &node_to_restart, exited_validator_info, SocketAddrSpace::Unspecified, ); @@ -1676,7 +1681,7 @@ fn test_optimistic_confirmation_violation_detection() { // Wait for a root > prev_voted_slot to be set. Because the root is on a // different fork than `prev_voted_slot`, then optimistic confirmation is // violated - let client = cluster.get_validator_client(&entry_point_id).unwrap(); + let client = cluster.get_validator_client(&node_to_restart).unwrap(); loop { let last_root = client .get_slot_with_commitment(CommitmentConfig::finalized()) @@ -1716,7 +1721,7 @@ fn test_optimistic_confirmation_violation_detection() { // Make sure validator still makes progress cluster_tests::check_for_new_roots( 16, - &[cluster.get_contact_info(&entry_point_id).unwrap().clone()], + &[cluster.get_contact_info(&node_to_restart).unwrap().clone()], &cluster.connection_cache, "test_optimistic_confirmation_violation", ); From d0ecfe3ec9d51178d642d9889717c77c01cd9c1b Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Thu, 8 Sep 2022 05:22:05 +0000 Subject: [PATCH 102/465] Added option to turn on UDP for TPU transaction and make UDP based TPU off by default (backport #27462) (#27658) * Added option to turn on UDP for TPU transaction and make UDP based TPU off by default (#27462) --tpu-enable-udp is introduced. And when this is on, the transaction receive and transaction forward is enabled using udp. Except for a few tests which was hard-coded sending transactions using udp, most tests are being done with udp based tpu disabled. (cherry picked from commit 7f223dc582dee5ec65739105907a9108b1a46bc7) # Conflicts: # cli/src/cli.rs # core/src/tpu.rs # core/src/validator.rs # local-cluster/src/local_cluster.rs # net/net.sh # net/remote/remote-node.sh # test-validator/src/lib.rs # validator/src/main.rs * Fixed merge conflicts * Fixed another conflict * Fixed a fmt Co-authored-by: Lijun Wang <83639177+lijunwangs@users.noreply.github.com> --- client/src/connection_cache.rs | 2 + core/src/fetch_stage.rs | 74 ++++++++++++++++----------- core/src/tpu.rs | 2 + core/src/validator.rs | 9 +++- local-cluster/src/local_cluster.rs | 6 ++- multinode-demo/bootstrap-validator.sh | 3 ++ multinode-demo/validator.sh | 3 ++ net/net.sh | 10 ++++ net/remote/remote-node.sh | 10 ++++ rpc-test/tests/rpc.rs | 2 +- test-validator/src/lib.rs | 31 ++++++++++- validator/src/main.rs | 19 ++++++- 12 files changed, 135 insertions(+), 36 deletions(-) diff --git a/client/src/connection_cache.rs b/client/src/connection_cache.rs index 28d8f10e5e8433..502d0ede8719ba 100644 --- a/client/src/connection_cache.rs +++ b/client/src/connection_cache.rs @@ -37,6 +37,8 @@ pub const DEFAULT_TPU_USE_QUIC: bool = true; /// Default TPU connection pool size per remote address pub const DEFAULT_TPU_CONNECTION_POOL_SIZE: usize = 4; +pub const DEFAULT_TPU_ENABLE_UDP: bool = false; + #[derive(Default)] pub struct ConnectionCacheStats { cache_hits: AtomicU64, diff --git a/core/src/fetch_stage.rs b/core/src/fetch_stage.rs index 93d8ed28ac1bd1..4ea12395c1c3af 100644 --- a/core/src/fetch_stage.rs +++ b/core/src/fetch_stage.rs @@ -6,6 +6,7 @@ use { result::{Error, Result}, }, crossbeam_channel::{unbounded, RecvTimeoutError}, + solana_client::connection_cache::DEFAULT_TPU_ENABLE_UDP, solana_metrics::{inc_new_counter_debug, inc_new_counter_info}, solana_perf::{packet::PacketBatchRecycler, recycler::Recycler}, solana_poh::poh_recorder::PohRecorder, @@ -57,6 +58,7 @@ impl FetchStage { poh_recorder, coalesce_ms, None, + DEFAULT_TPU_ENABLE_UDP, ), receiver, vote_receiver, @@ -76,6 +78,7 @@ impl FetchStage { poh_recorder: &Arc>, coalesce_ms: u64, in_vote_only_mode: Option>, + tpu_enable_udp: bool, ) -> Self { let tx_sockets = sockets.into_iter().map(Arc::new).collect(); let tpu_forwards_sockets = tpu_forwards_sockets.into_iter().map(Arc::new).collect(); @@ -92,6 +95,7 @@ impl FetchStage { poh_recorder, coalesce_ms, in_vote_only_mode, + tpu_enable_udp, ) } @@ -150,42 +154,52 @@ impl FetchStage { poh_recorder: &Arc>, coalesce_ms: u64, in_vote_only_mode: Option>, + tpu_enable_udp: bool, ) -> Self { let recycler: PacketBatchRecycler = Recycler::warmed(1000, 1024); let tpu_stats = Arc::new(StreamerReceiveStats::new("tpu_receiver")); - let tpu_threads: Vec<_> = tpu_sockets - .into_iter() - .map(|socket| { - streamer::receiver( - socket, - exit.clone(), - sender.clone(), - recycler.clone(), - tpu_stats.clone(), - coalesce_ms, - true, - in_vote_only_mode.clone(), - ) - }) - .collect(); + + let tpu_threads: Vec<_> = if tpu_enable_udp { + tpu_sockets + .into_iter() + .map(|socket| { + streamer::receiver( + socket, + exit.clone(), + sender.clone(), + recycler.clone(), + tpu_stats.clone(), + coalesce_ms, + true, + in_vote_only_mode.clone(), + ) + }) + .collect() + } else { + Vec::default() + }; let tpu_forward_stats = Arc::new(StreamerReceiveStats::new("tpu_forwards_receiver")); - let tpu_forwards_threads: Vec<_> = tpu_forwards_sockets - .into_iter() - .map(|socket| { - streamer::receiver( - socket, - exit.clone(), - forward_sender.clone(), - recycler.clone(), - tpu_forward_stats.clone(), - coalesce_ms, - true, - in_vote_only_mode.clone(), - ) - }) - .collect(); + let tpu_forwards_threads: Vec<_> = if tpu_enable_udp { + tpu_forwards_sockets + .into_iter() + .map(|socket| { + streamer::receiver( + socket, + exit.clone(), + forward_sender.clone(), + recycler.clone(), + tpu_forward_stats.clone(), + coalesce_ms, + true, + in_vote_only_mode.clone(), + ) + }) + .collect() + } else { + Vec::default() + }; let tpu_vote_stats = Arc::new(StreamerReceiveStats::new("tpu_vote_receiver")); let tpu_vote_threads: Vec<_> = tpu_vote_sockets diff --git a/core/src/tpu.rs b/core/src/tpu.rs index eb4d8aba68fe67..21b633c55b269d 100644 --- a/core/src/tpu.rs +++ b/core/src/tpu.rs @@ -97,6 +97,7 @@ impl Tpu { keypair: &Keypair, log_messages_bytes_limit: Option, staked_nodes: &Arc>, + tpu_enable_udp: bool, ) -> Self { let TpuSockets { transactions: transactions_sockets, @@ -122,6 +123,7 @@ impl Tpu { poh_recorder, tpu_coalesce_ms, Some(bank_forks.read().unwrap().get_vote_only_mode_signal()), + tpu_enable_udp, ); let staked_nodes_updater_service = StakedNodesUpdaterService::new( diff --git a/core/src/validator.rs b/core/src/validator.rs index c23f5786caf000..ef160a7a5f8d98 100644 --- a/core/src/validator.rs +++ b/core/src/validator.rs @@ -390,6 +390,7 @@ impl Validator { socket_addr_space: SocketAddrSpace, use_quic: bool, tpu_connection_pool_size: usize, + tpu_enable_udp: bool, ) -> Self { let id = identity_keypair.pubkey(); assert_eq!(id, node.info.id); @@ -1044,6 +1045,7 @@ impl Validator { &identity_keypair, config.runtime_config.log_messages_bytes_limit, &staked_nodes, + tpu_enable_udp, ); datapoint_info!( @@ -2094,7 +2096,9 @@ mod tests { use { super::*, crossbeam_channel::{bounded, RecvTimeoutError}, - solana_client::connection_cache::{DEFAULT_TPU_CONNECTION_POOL_SIZE, DEFAULT_TPU_USE_QUIC}, + solana_client::connection_cache::{ + DEFAULT_TPU_CONNECTION_POOL_SIZE, DEFAULT_TPU_ENABLE_UDP, DEFAULT_TPU_USE_QUIC, + }, solana_ledger::{create_new_tmp_ledger, genesis_utils::create_genesis_config_with_leader}, solana_sdk::{genesis_config::create_genesis_config, poh_config::PohConfig}, std::{fs::remove_dir_all, thread, time::Duration}, @@ -2132,7 +2136,9 @@ mod tests { SocketAddrSpace::Unspecified, DEFAULT_TPU_USE_QUIC, DEFAULT_TPU_CONNECTION_POOL_SIZE, + DEFAULT_TPU_ENABLE_UDP, ); + assert_eq!( *start_progress.read().unwrap(), ValidatorStartProgress::Running @@ -2215,6 +2221,7 @@ mod tests { SocketAddrSpace::Unspecified, DEFAULT_TPU_USE_QUIC, DEFAULT_TPU_CONNECTION_POOL_SIZE, + DEFAULT_TPU_ENABLE_UDP, ) }) .collect(); diff --git a/local-cluster/src/local_cluster.rs b/local-cluster/src/local_cluster.rs index 5c0196fecd0a1a..5389f9dca6c8e6 100644 --- a/local-cluster/src/local_cluster.rs +++ b/local-cluster/src/local_cluster.rs @@ -8,7 +8,8 @@ use { log::*, solana_client::{ connection_cache::{ - ConnectionCache, DEFAULT_TPU_CONNECTION_POOL_SIZE, DEFAULT_TPU_USE_QUIC, + ConnectionCache, DEFAULT_TPU_CONNECTION_POOL_SIZE, DEFAULT_TPU_ENABLE_UDP, + DEFAULT_TPU_USE_QUIC, }, thin_client::ThinClient, }, @@ -282,6 +283,7 @@ impl LocalCluster { socket_addr_space, DEFAULT_TPU_USE_QUIC, DEFAULT_TPU_CONNECTION_POOL_SIZE, + DEFAULT_TPU_ENABLE_UDP, ); let mut validators = HashMap::new(); @@ -480,6 +482,7 @@ impl LocalCluster { socket_addr_space, DEFAULT_TPU_USE_QUIC, DEFAULT_TPU_CONNECTION_POOL_SIZE, + DEFAULT_TPU_ENABLE_UDP, ); let validator_pubkey = validator_keypair.pubkey(); @@ -841,6 +844,7 @@ impl Cluster for LocalCluster { socket_addr_space, DEFAULT_TPU_USE_QUIC, DEFAULT_TPU_CONNECTION_POOL_SIZE, + DEFAULT_TPU_ENABLE_UDP, ); cluster_validator_info.validator = Some(restarted_node); cluster_validator_info diff --git a/multinode-demo/bootstrap-validator.sh b/multinode-demo/bootstrap-validator.sh index deb82f106fae04..fb6353f76bc9d7 100755 --- a/multinode-demo/bootstrap-validator.sh +++ b/multinode-demo/bootstrap-validator.sh @@ -64,6 +64,9 @@ while [[ -n $1 ]]; do elif [[ $1 = --tpu-disable-quic ]]; then args+=("$1") shift + elif [[ $1 = --tpu-enable-udp ]]; then + args+=("$1") + shift elif [[ $1 = --rpc-send-batch-ms ]]; then args+=("$1" "$2") shift 2 diff --git a/multinode-demo/validator.sh b/multinode-demo/validator.sh index 84bfe2caae0313..1ccfc72f9d0b97 100755 --- a/multinode-demo/validator.sh +++ b/multinode-demo/validator.sh @@ -150,6 +150,9 @@ while [[ -n $1 ]]; do elif [[ $1 = --tpu-use-quic ]]; then args+=("$1") shift + elif [[ $1 = --tpu-enable-udp ]]; then + args+=("$1") + shift elif [[ $1 = --rpc-send-batch-ms ]]; then args+=("$1" "$2") shift 2 diff --git a/net/net.sh b/net/net.sh index 4f07965a501470..ade427e767c103 100755 --- a/net/net.sh +++ b/net/net.sh @@ -107,6 +107,10 @@ Operate a configured testnet - Boot from a snapshot that has warped ahead to WARP_SLOT rather than a slot 0 genesis. --full-rpc - Support full RPC services on all nodes + + --tpu-enable-udp + - Enable UDP for tpu transactions + sanity/start-specific options: -F - Discard validator nodes that didn't bootup successfully -o noInstallCheck - Skip solana-install sanity @@ -320,6 +324,7 @@ startBootstrapLeader() { \"$waitForNodeInit\" \ \"$extraPrimordialStakes\" \ \"$TMPFS_ACCOUNTS\" \ + \"$enableUdp\" \ " ) >> "$logFile" 2>&1 || { @@ -392,6 +397,7 @@ startNode() { \"$waitForNodeInit\" \ \"$extraPrimordialStakes\" \ \"$TMPFS_ACCOUNTS\" \ + \"$enableUdp\" \ " ) >> "$logFile" 2>&1 & declare pid=$! @@ -800,6 +806,7 @@ maybeWarpSlot= maybeFullRpc=false waitForNodeInit=true extraPrimordialStakes=0 +enableUdp=false command=$1 [[ -n $command ]] || usage @@ -912,6 +919,9 @@ while [[ -n $1 ]]; do elif [[ $1 == --full-rpc ]]; then maybeFullRpc=true shift 1 + elif [[ $1 == --tpu-enable-udp ]]; then + enableUdp=true + shift 1 elif [[ $1 == --async-node-init ]]; then waitForNodeInit=false shift 1 diff --git a/net/remote/remote-node.sh b/net/remote/remote-node.sh index 2b93ffed145a66..7c5a931ac3a5fa 100755 --- a/net/remote/remote-node.sh +++ b/net/remote/remote-node.sh @@ -28,6 +28,8 @@ maybeFullRpc="${19}" waitForNodeInit="${20}" extraPrimordialStakes="${21:=0}" tmpfsAccounts="${22:false}" +enableUdp="${23}" + set +x missing() { @@ -283,6 +285,10 @@ EOF args+=(--enable-extended-tx-metadata-storage) fi + if $enableUdp; then + args+=(--tpu-enable-udp) + fi + if [[ $airdropsEnabled = true ]]; then cat >> ~/solana/on-reboot < faucet.log 2>&1 & @@ -411,6 +417,10 @@ EOF args+=(--enable-extended-tx-metadata-storage) fi + if $enableUdp; then + args+=(--tpu-enable-udp) + fi + cat >> ~/solana/on-reboot < validator.log.\$now 2>&1 & diff --git a/rpc-test/tests/rpc.rs b/rpc-test/tests/rpc.rs index 81d4338bdd8316..d1aa922289fd8c 100644 --- a/rpc-test/tests/rpc.rs +++ b/rpc-test/tests/rpc.rs @@ -242,7 +242,7 @@ fn test_rpc_subscriptions() { let alice = Keypair::new(); let test_validator = - TestValidator::with_no_fees(alice.pubkey(), None, SocketAddrSpace::Unspecified); + TestValidator::with_no_fees_udp(alice.pubkey(), None, SocketAddrSpace::Unspecified); let transactions_socket = UdpSocket::bind("0.0.0.0:0").unwrap(); transactions_socket.connect(test_validator.tpu()).unwrap(); diff --git a/test-validator/src/lib.rs b/test-validator/src/lib.rs index 72d622643e30b5..1d9472d0fc3e62 100644 --- a/test-validator/src/lib.rs +++ b/test-validator/src/lib.rs @@ -3,7 +3,9 @@ use { log::*, solana_cli_output::CliAccount, solana_client::{ - connection_cache::{DEFAULT_TPU_CONNECTION_POOL_SIZE, DEFAULT_TPU_USE_QUIC}, + connection_cache::{ + DEFAULT_TPU_CONNECTION_POOL_SIZE, DEFAULT_TPU_ENABLE_UDP, DEFAULT_TPU_USE_QUIC, + }, nonblocking, rpc_client::RpcClient, rpc_request::MAX_MULTIPLE_ACCOUNTS, @@ -123,6 +125,7 @@ pub struct TestValidatorGenesis { deactivate_feature_set: HashSet, compute_unit_limit: Option, pub log_messages_bytes_limit: Option, + pub tpu_enable_udp: bool, } impl Default for TestValidatorGenesis { @@ -152,6 +155,7 @@ impl Default for TestValidatorGenesis { deactivate_feature_set: HashSet::::default(), compute_unit_limit: Option::::default(), log_messages_bytes_limit: Option::::default(), + tpu_enable_udp: DEFAULT_TPU_ENABLE_UDP, } } } @@ -179,6 +183,11 @@ impl TestValidatorGenesis { ledger_path.join("vote-account-keypair.json").exists() } + pub fn tpu_enable_udp(&mut self, tpu_enable_udp: bool) -> &mut Self { + self.tpu_enable_udp = tpu_enable_udp; + self + } + pub fn fee_rate_governor(&mut self, fee_rate_governor: FeeRateGovernor) -> &mut Self { self.fee_rate_governor = fee_rate_governor; self @@ -551,6 +560,25 @@ impl TestValidator { .expect("validator start failed") } + /// Create a test validator using udp for TPU. + pub fn with_no_fees_udp( + mint_address: Pubkey, + faucet_addr: Option, + socket_addr_space: SocketAddrSpace, + ) -> Self { + TestValidatorGenesis::default() + .tpu_enable_udp(true) + .fee_rate_governor(FeeRateGovernor::new(0, 0)) + .rent(Rent { + lamports_per_byte_year: 1, + exemption_threshold: 1.0, + ..Rent::default() + }) + .faucet_addr(faucet_addr) + .start_with_mint_address(mint_address, socket_addr_space) + .expect("validator start failed") + } + /// Create and start a `TestValidator` with custom transaction fees and minimal rent. /// Faucet optional. /// @@ -815,6 +843,7 @@ impl TestValidator { socket_addr_space, DEFAULT_TPU_USE_QUIC, DEFAULT_TPU_CONNECTION_POOL_SIZE, + config.tpu_enable_udp, )); // Needed to avoid panics in `solana-responder-gossip` in tests that create a number of diff --git a/validator/src/main.rs b/validator/src/main.rs index 8f8f010599c33b..e1ebd8861429ae 100644 --- a/validator/src/main.rs +++ b/validator/src/main.rs @@ -19,8 +19,10 @@ use { keypair::SKIP_SEED_PHRASE_VALIDATION_ARG, }, solana_client::{ - connection_cache::DEFAULT_TPU_CONNECTION_POOL_SIZE, rpc_client::RpcClient, - rpc_config::RpcLeaderScheduleConfig, rpc_request::MAX_MULTIPLE_ACCOUNTS, + connection_cache::{DEFAULT_TPU_CONNECTION_POOL_SIZE, DEFAULT_TPU_ENABLE_UDP}, + rpc_client::RpcClient, + rpc_config::RpcLeaderScheduleConfig, + rpc_request::MAX_MULTIPLE_ACCOUNTS, }, solana_core::{ ledger_cleanup_service::{DEFAULT_MAX_LEDGER_SHREDS, DEFAULT_MIN_MAX_LEDGER_SHREDS}, @@ -1241,6 +1243,12 @@ pub fn main() { .takes_value(false) .help("Do not use QUIC to send transactions."), ) + .arg( + Arg::with_name("tpu_enable_udp") + .long("tpu-enable-udp") + .takes_value(false) + .help("Enable UDP for receiving/sending transactions."), + ) .arg( Arg::with_name("disable_quic_servers") .long("disable-quic-servers") @@ -2341,6 +2349,12 @@ pub fn main() { let accounts_shrink_optimize_total_space = value_t_or_exit!(matches, "accounts_shrink_optimize_total_space", bool); let tpu_use_quic = !matches.is_present("tpu_disable_quic"); + let tpu_enable_udp = if matches.is_present("tpu_enable_udp") { + true + } else { + DEFAULT_TPU_ENABLE_UDP + }; + let tpu_connection_pool_size = value_t_or_exit!(matches, "tpu_connection_pool_size", usize); let shrink_ratio = value_t_or_exit!(matches, "accounts_shrink_ratio", f64); @@ -3116,6 +3130,7 @@ pub fn main() { socket_addr_space, tpu_use_quic, tpu_connection_pool_size, + tpu_enable_udp, ); *admin_service_post_init.write().unwrap() = Some(admin_rpc_service::AdminRpcRequestMetadataPostInit { From b44fe590808dfd5ad394ec0f02111bb4a75cb7d6 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Thu, 8 Sep 2022 10:22:56 +0000 Subject: [PATCH 103/465] chore: make docs test upload test result when needed (backport #27660) (#27664) * chore: make docs test upload test result when needed (#27660) (cherry picked from commit 54129c4f16fd18cc7edb475bbc6d52dbcfcc40a9) # Conflicts: # ci/test-stable.sh * fix conflict Co-authored-by: Yihau Chen --- ci/test-stable.sh | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/ci/test-stable.sh b/ci/test-stable.sh index a9f8e3aa129bff..e3a630599d5402 100755 --- a/ci/test-stable.sh +++ b/ci/test-stable.sh @@ -228,8 +228,13 @@ test-wasm) exit 0 ;; test-docs) - _ "$cargo" stable test --jobs "$JOBS" --all --doc --exclude solana-local-cluster ${V:+--verbose} -- --nocapture - exit 0 + if need_to_generate_test_result; then + _ "$cargo" stable test --jobs "$JOBS" --all --doc --exclude solana-local-cluster ${V:+--verbose} -- -Z unstable-options --format json --report-time | tee results.json + exit "${PIPESTATUS[0]}" + else + _ "$cargo" stable test --jobs "$JOBS" --all --doc --exclude solana-local-cluster ${V:+--verbose} -- --nocapture + exit 0 + fi ;; *) echo "Error: Unknown test: $testName" From 98577ac441a54a05523a1ee7c9e81187f51c4894 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Thu, 8 Sep 2022 17:42:59 +0000 Subject: [PATCH 104/465] add new leader slot metric to track account contention throttling (backport #27654) (#27668) add new leader slot metric to track account contention throttling (#27654) (cherry picked from commit cc58968b762897f58a3873cf9cda202acbd44797) Co-authored-by: Maximilian Schneider --- core/src/leader_slot_banking_stage_metrics.rs | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/core/src/leader_slot_banking_stage_metrics.rs b/core/src/leader_slot_banking_stage_metrics.rs index 06e767ed358ae5..a189efde155b31 100644 --- a/core/src/leader_slot_banking_stage_metrics.rs +++ b/core/src/leader_slot_banking_stage_metrics.rs @@ -104,6 +104,11 @@ struct LeaderSlotPacketCountMetrics { // then hit the age limit after failing to be comitted. executed_transactions_failed_commit_count: u64, + // total number of transactions that were excluded from the block because there were concurrent write locks active. + // These transactions are added back to the buffered queue and are already counted in + // `self.retrayble_errored_transaction_count`. + account_lock_throttled_transactions_count: u64, + // total number of transactions that were excluded from the block because they were too expensive // according to the cost model. These transactions are added back to the buffered queue and are // already counted in `self.retrayble_errored_transaction_count`. @@ -197,6 +202,11 @@ impl LeaderSlotPacketCountMetrics { self.executed_transactions_failed_commit_count as i64, i64 ), + ( + "account_lock_throttled_transactions_count", + self.account_lock_throttled_transactions_count as i64, + i64 + ), ( "cost_model_throttled_transactions_count", self.cost_model_throttled_transactions_count as i64, @@ -394,6 +404,7 @@ impl LeaderSlotMetricsTracker { cost_model_throttled_transactions_count, cost_model_us, ref execute_and_commit_timings, + error_counters, .. } = process_transactions_summary; @@ -441,6 +452,13 @@ impl LeaderSlotMetricsTracker { .saturating_sub(retryable_transaction_indexes.len()) as u64 ); + saturating_add_assign!( + leader_slot_metrics + .packet_count_metrics + .account_lock_throttled_transactions_count, + error_counters.account_in_use as u64 + ); + saturating_add_assign!( leader_slot_metrics .packet_count_metrics From a17b777b226c20e756154f794893de07855fc315 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Thu, 8 Sep 2022 18:33:11 +0000 Subject: [PATCH 105/465] Respect rewards parameter in getBlock transaction-level rewards (backport #27655) (#27670) Respect rewards parameter in getBlock transaction-level rewards (#27655) * Respect options.show_rewards in UiTransactionStatusMeta * Fixup docs (cherry picked from commit 54284955ded0e90ee10478f6d923e9e523b7a49c) Co-authored-by: Tyera Eulberg --- docs/src/developing/clients/jsonrpc-api.md | 14 ++++++++-- ledger-tool/src/bigtable.rs | 2 +- transaction-status/src/lib.rs | 31 ++++++++++++++++------ 3 files changed, 36 insertions(+), 11 deletions(-) diff --git a/docs/src/developing/clients/jsonrpc-api.md b/docs/src/developing/clients/jsonrpc-api.md index 89f4b1588dfb4c..c58a33f79d890a 100644 --- a/docs/src/developing/clients/jsonrpc-api.md +++ b/docs/src/developing/clients/jsonrpc-api.md @@ -436,6 +436,12 @@ The result field will be an object with the following fields: - `preTokenBalances: ` - List of [token balances](#token-balances-structure) from before the transaction was processed or omitted if token balance recording was not yet enabled during this transaction - `postTokenBalances: ` - List of [token balances](#token-balances-structure) from after the transaction was processed or omitted if token balance recording was not yet enabled during this transaction - `logMessages: ` - array of string log messages or `null` if log message recording was not enabled during this transaction + - `rewards: ` - transaction-level rewards, populated if rewards are requested; an array of JSON objects containing: + - `pubkey: ` - The public key, as base-58 encoded string, of the account that received the reward + - `lamports: `- number of reward lamports credited or debited by the account, as a i64 + - `postBalance: ` - account balance in lamports after the reward was applied + - `rewardType: ` - type of reward: "fee", "rent", "voting", "staking" + - `commission: ` - vote account commission when the reward was credited, only present for voting and staking rewards - DEPRECATED: `status: ` - Transaction status - `"Ok": ` - Transaction was successful - `"Err": ` - Transaction failed with TransactionError @@ -444,7 +450,7 @@ The result field will be an object with the following fields: - `readonly: ` - Ordered list of base-58 encoded addresses for readonly loaded accounts - `version: <"legacy"|number|undefined>` - Transaction version. Undefined if `maxSupportedTransactionVersion` is not set in request params. - `signatures: ` - present if "signatures" are requested for transaction details; an array of signatures strings, corresponding to the transaction order in the block - - `rewards: ` - present if rewards are requested; an array of JSON objects containing: + - `rewards: ` - block-level rewards, present if rewards are requested; an array of JSON objects containing: - `pubkey: ` - The public key, as base-58 encoded string, of the account that received the reward - `lamports: `- number of reward lamports credited or debited by the account, as a i64 - `postBalance: ` - account balance in lamports after the reward was applied @@ -485,6 +491,7 @@ Result: "postTokenBalances": [], "preBalances": [499998937500, 26858640, 1, 1, 1], "preTokenBalances": [], + "rewards": null, "status": { "Ok": null } @@ -556,6 +563,7 @@ Result: "postTokenBalances": [], "preBalances": [499998937500, 26858640, 1, 1, 1], "preTokenBalances": [], + "rewards": [], "status": { "Ok": null } @@ -2976,7 +2984,7 @@ Returns transaction details for a confirmed transaction - DEPRECATED: `status: ` - Transaction status - `"Ok": ` - Transaction was successful - `"Err": ` - Transaction failed with TransactionError - - `rewards: ` - present if rewards are requested; an array of JSON objects containing: + - `rewards: ` - transaction-level rewards, populated if rewards are requested; an array of JSON objects containing: - `pubkey: ` - The public key, as base-58 encoded string, of the account that received the reward - `lamports: `- number of reward lamports credited or debited by the account, as a i64 - `postBalance: ` - account balance in lamports after the reward was applied @@ -3019,6 +3027,7 @@ Result: "postTokenBalances": [], "preBalances": [499998937500, 26858640, 1, 1, 1], "preTokenBalances": [], + "rewards": [], "status": { "Ok": null } @@ -3089,6 +3098,7 @@ Result: "postTokenBalances": [], "preBalances": [499998937500, 26858640, 1, 1, 1], "preTokenBalances": [], + "rewards": null, "status": { "Ok": null } diff --git a/ledger-tool/src/bigtable.rs b/ledger-tool/src/bigtable.rs index 8dcce92534e4ec..e19eacf34b6b16 100644 --- a/ledger-tool/src/bigtable.rs +++ b/ledger-tool/src/bigtable.rs @@ -213,7 +213,7 @@ async fn confirm( let decoded_tx = confirmed_tx.get_transaction(); let encoded_tx_with_meta = confirmed_tx .tx_with_meta - .encode(UiTransactionEncoding::Json, Some(0)) + .encode(UiTransactionEncoding::Json, Some(0), true) .map_err(|_| "Failed to encode transaction in block".to_string())?; transaction = Some(CliTransaction { transaction: encoded_tx_with_meta.transaction, diff --git a/transaction-status/src/lib.rs b/transaction-status/src/lib.rs index e8fe2bbf913212..c80bffb75286dc 100644 --- a/transaction-status/src/lib.rs +++ b/transaction-status/src/lib.rs @@ -357,7 +357,7 @@ impl From<&LoadedAddresses> for UiLoadedAddresses { } impl UiTransactionStatusMeta { - fn parse(meta: TransactionStatusMeta, static_keys: &[Pubkey]) -> Self { + fn parse(meta: TransactionStatusMeta, static_keys: &[Pubkey], show_rewards: bool) -> Self { let account_keys = AccountKeys::new(static_keys, Some(&meta.loaded_addresses)); Self { err: meta.status.clone().err(), @@ -377,7 +377,7 @@ impl UiTransactionStatusMeta { post_token_balances: meta .post_token_balances .map(|balance| balance.into_iter().map(Into::into).collect()), - rewards: meta.rewards, + rewards: if show_rewards { meta.rewards } else { None }, loaded_addresses: None, return_data: meta.return_data, compute_units_consumed: meta.compute_units_consumed, @@ -539,7 +539,11 @@ impl ConfirmedBlock { self.transactions .into_iter() .map(|tx_with_meta| { - tx_with_meta.encode(encoding, options.max_supported_transaction_version) + tx_with_meta.encode( + encoding, + options.max_supported_transaction_version, + options.show_rewards, + ) }) .collect::, _>>()?, ), @@ -658,6 +662,7 @@ impl TransactionWithStatusMeta { self, encoding: UiTransactionEncoding, max_supported_transaction_version: Option, + show_rewards: bool, ) -> Result { match self { Self::MissingMetadata(ref transaction) => Ok(EncodedTransactionWithStatusMeta { @@ -666,7 +671,7 @@ impl TransactionWithStatusMeta { meta: None, }), Self::Complete(tx_with_meta) => { - tx_with_meta.encode(encoding, max_supported_transaction_version) + tx_with_meta.encode(encoding, max_supported_transaction_version, show_rewards) } } } @@ -684,6 +689,7 @@ impl VersionedTransactionWithStatusMeta { self, encoding: UiTransactionEncoding, max_supported_transaction_version: Option, + show_rewards: bool, ) -> Result { let version = match ( max_supported_transaction_version, @@ -710,8 +716,15 @@ impl VersionedTransactionWithStatusMeta { UiTransactionEncoding::JsonParsed => UiTransactionStatusMeta::parse( self.meta, self.transaction.message.static_account_keys(), + show_rewards, ), - _ => UiTransactionStatusMeta::from(self.meta), + _ => { + let mut meta = UiTransactionStatusMeta::from(self.meta); + if !show_rewards { + meta.rewards = None; + } + meta + } }), version, }) @@ -756,9 +769,11 @@ impl ConfirmedTransactionWithStatusMeta { ) -> Result { Ok(EncodedConfirmedTransactionWithStatusMeta { slot: self.slot, - transaction: self - .tx_with_meta - .encode(encoding, max_supported_transaction_version)?, + transaction: self.tx_with_meta.encode( + encoding, + max_supported_transaction_version, + true, + )?, block_time: self.block_time, }) } From 132ab5ed4a97a27073e22397df6cfd857aa14c65 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Thu, 8 Sep 2022 23:59:10 +0000 Subject: [PATCH 106/465] Update getBlock/getTransaction rpc handling of return_data (backport #27672) (#27681) * Update getBlock/getTransaction rpc handling of return_data (#27672) * Move return_data type to transaction-status crate * Use UiTransactionReturnData in UiTransactionStatusMeta * Fixup display handling * Update docs (cherry picked from commit 0bfc18837583b943780da7a2c3a0fa744ad2be67) # Conflicts: # client/src/rpc_response.rs * Fix conflict Co-authored-by: Tyera Eulberg --- cli-output/src/display.rs | 21 ++++++++++---- client/src/rpc_response.rs | 26 ++---------------- docs/src/developing/clients/jsonrpc-api.md | 6 ++++ transaction-status/src/lib.rs | 32 ++++++++++++++++++++-- 4 files changed, 53 insertions(+), 32 deletions(-) diff --git a/cli-output/src/display.rs b/cli-output/src/display.rs index 9c26c0d145df61..e0a67b91fd1e08 100644 --- a/cli-output/src/display.rs +++ b/cli-output/src/display.rs @@ -15,9 +15,10 @@ use { signature::Signature, stake, transaction::{TransactionError, TransactionVersion, VersionedTransaction}, - transaction_context::TransactionReturnData, }, - solana_transaction_status::{Rewards, UiTransactionStatusMeta}, + solana_transaction_status::{ + Rewards, UiReturnDataEncoding, UiTransactionReturnData, UiTransactionStatusMeta, + }, spl_memo::{id as spl_memo_id, v1::id as spl_memo_v1_id}, std::{collections::HashMap, fmt, io}, }; @@ -597,18 +598,27 @@ fn write_balances( fn write_return_data( w: &mut W, - return_data: Option<&TransactionReturnData>, + return_data: Option<&UiTransactionReturnData>, prefix: &str, ) -> io::Result<()> { if let Some(return_data) = return_data { - if !return_data.data.is_empty() { + let (data, encoding) = &return_data.data; + let raw_return_data = match encoding { + UiReturnDataEncoding::Base64 => base64::decode(data).map_err(|err| { + io::Error::new( + io::ErrorKind::Other, + format!("could not parse data as {:?}: {:?}", encoding, err), + ) + })?, + }; + if !raw_return_data.is_empty() { use pretty_hex::*; writeln!( w, "{}Return Data from Program {}:", prefix, return_data.program_id )?; - writeln!(w, "{} {:?}", prefix, return_data.data.hex_dump())?; + writeln!(w, "{} {:?}", prefix, raw_return_data.hex_dump())?; } } Ok(()) @@ -721,6 +731,7 @@ mod test { pubkey::Pubkey, signature::{Keypair, Signer}, transaction::Transaction, + transaction_context::TransactionReturnData, }, solana_transaction_status::{Reward, RewardType, TransactionStatusMeta}, std::io::BufWriter, diff --git a/client/src/rpc_response.rs b/client/src/rpc_response.rs index b54feb3a777139..f7158ff88ae04a 100644 --- a/client/src/rpc_response.rs +++ b/client/src/rpc_response.rs @@ -8,10 +8,10 @@ use { hash::Hash, inflation::Inflation, transaction::{Result, TransactionError}, - transaction_context::TransactionReturnData, }, solana_transaction_status::{ ConfirmedTransactionStatusWithSignature, TransactionConfirmationStatus, UiConfirmedBlock, + UiTransactionReturnData, }, std::{collections::HashMap, fmt, net::SocketAddr, str::FromStr}, thiserror::Error, @@ -399,29 +399,7 @@ pub struct RpcSimulateTransactionResult { pub logs: Option>, pub accounts: Option>>, pub units_consumed: Option, - pub return_data: Option, -} - -#[derive(Serialize, Deserialize, Clone, Debug)] -#[serde(rename_all = "camelCase")] -pub struct RpcTransactionReturnData { - pub program_id: String, - pub data: (String, ReturnDataEncoding), -} - -impl From for RpcTransactionReturnData { - fn from(return_data: TransactionReturnData) -> Self { - Self { - program_id: return_data.program_id.to_string(), - data: (base64::encode(return_data.data), ReturnDataEncoding::Base64), - } - } -} - -#[derive(Serialize, Deserialize, Clone, Copy, Debug, Eq, Hash, PartialEq)] -#[serde(rename_all = "camelCase")] -pub enum ReturnDataEncoding { - Base64, + pub return_data: Option, } #[derive(Serialize, Deserialize, Clone, Debug)] diff --git a/docs/src/developing/clients/jsonrpc-api.md b/docs/src/developing/clients/jsonrpc-api.md index c58a33f79d890a..5f894eaf49cc38 100644 --- a/docs/src/developing/clients/jsonrpc-api.md +++ b/docs/src/developing/clients/jsonrpc-api.md @@ -448,6 +448,9 @@ The result field will be an object with the following fields: - `loadedAddresses: ` - Transaction addresses loaded from address lookup tables. Undefined if `maxSupportedTransactionVersion` is not set in request params. - `writable: ` - Ordered list of base-58 encoded addresses for writable loaded accounts - `readonly: ` - Ordered list of base-58 encoded addresses for readonly loaded accounts + - `returnData: ` - the most-recent return data generated by an instruction in the transaction, with the following fields: + - `programId: `, the program that generated the return data, as base-58 encoded Pubkey + - `data: <[string, encoding]>`, the return data itself, as base-64 encoded binary data - `version: <"legacy"|number|undefined>` - Transaction version. Undefined if `maxSupportedTransactionVersion` is not set in request params. - `signatures: ` - present if "signatures" are requested for transaction details; an array of signatures strings, corresponding to the transaction order in the block - `rewards: ` - block-level rewards, present if rewards are requested; an array of JSON objects containing: @@ -2993,6 +2996,9 @@ Returns transaction details for a confirmed transaction - `loadedAddresses: ` - Transaction addresses loaded from address lookup tables. Undefined if `maxSupportedTransactionVersion` is not set in request params. - `writable: ` - Ordered list of base-58 encoded addresses for writable loaded accounts - `readonly: ` - Ordered list of base-58 encoded addresses for readonly loaded accounts + - `returnData: ` - the most-recent return data generated by an instruction in the transaction, with the following fields: + - `programId: `, the program that generated the return data, as base-58 encoded Pubkey + - `data: <[string, encoding]>`, the return data itself, as base-64 encoded binary data - `version: <"legacy"|number|undefined>` - Transaction version. Undefined if `maxSupportedTransactionVersion` is not set in request params. #### Example: diff --git a/transaction-status/src/lib.rs b/transaction-status/src/lib.rs index c80bffb75286dc..281581ccf15eea 100644 --- a/transaction-status/src/lib.rs +++ b/transaction-status/src/lib.rs @@ -326,7 +326,8 @@ pub struct UiTransactionStatusMeta { pub rewards: Option, #[serde(default, skip_serializing_if = "Option::is_none")] pub loaded_addresses: Option, - pub return_data: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub return_data: Option, #[serde(default, skip_serializing_if = "Option::is_none")] pub compute_units_consumed: Option, } @@ -379,7 +380,7 @@ impl UiTransactionStatusMeta { .map(|balance| balance.into_iter().map(Into::into).collect()), rewards: if show_rewards { meta.rewards } else { None }, loaded_addresses: None, - return_data: meta.return_data, + return_data: meta.return_data.map(|return_data| return_data.into()), compute_units_consumed: meta.compute_units_consumed, } } @@ -405,7 +406,7 @@ impl From for UiTransactionStatusMeta { .map(|balance| balance.into_iter().map(Into::into).collect()), rewards: meta.rewards, loaded_addresses: Some(UiLoadedAddresses::from(&meta.loaded_addresses)), - return_data: meta.return_data, + return_data: meta.return_data.map(|return_data| return_data.into()), compute_units_consumed: meta.compute_units_consumed, } } @@ -1030,6 +1031,31 @@ pub struct TransactionByAddrInfo { pub block_time: Option, } +#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq)] +#[serde(rename_all = "camelCase")] +pub struct UiTransactionReturnData { + pub program_id: String, + pub data: (String, UiReturnDataEncoding), +} + +impl From for UiTransactionReturnData { + fn from(return_data: TransactionReturnData) -> Self { + Self { + program_id: return_data.program_id.to_string(), + data: ( + base64::encode(return_data.data), + UiReturnDataEncoding::Base64, + ), + } + } +} + +#[derive(Serialize, Deserialize, Clone, Copy, Debug, Eq, Hash, PartialEq)] +#[serde(rename_all = "camelCase")] +pub enum UiReturnDataEncoding { + Base64, +} + #[cfg(test)] mod test { use super::*; From 515d7f21982977cb72ebea793f1dc3396fb1e897 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Fri, 9 Sep 2022 20:09:28 +0000 Subject: [PATCH 107/465] removes set_{slot,index,last_in_slot} implementations for merkle shreds (backport #27689) (#27691) removes set_{slot,index,last_in_slot} implementations for merkle shreds (#27689) These methods are only used in tests but invoked on a merkle shred they will always invalidate the shred because the merkle proof will no longer verify. As a result the shred will not sanitize and blockstore will avoid inserting them. Their use in tests will result in spurious test coverage because the shreds will not be ingested. The commit removes implementation of these methods for merkle shreds. Follow up commits will entirely remove these methods from shreds api. (cherry picked from commit 37296caee829faa399cd5034df007867593cd9c0) Co-authored-by: behzad nouri --- ledger/src/shred/common.rs | 22 ++++++++++++++++++---- ledger/src/shred/legacy.rs | 14 +++++++------- ledger/src/shred/merkle.rs | 13 +++---------- ledger/src/shred/shred_data.rs | 9 ++++++++- ledger/src/shred/traits.rs | 3 --- 5 files changed, 36 insertions(+), 25 deletions(-) diff --git a/ledger/src/shred/common.rs b/ledger/src/shred/common.rs index 3478001a0cbff5..330e4a8da9ff6d 100644 --- a/ledger/src/shred/common.rs +++ b/ledger/src/shred/common.rs @@ -51,14 +51,28 @@ macro_rules! impl_shred_common { // Only for tests. fn set_index(&mut self, index: u32) { - self.common_header.index = index; - bincode::serialize_into(&mut self.payload[..], &self.common_header).unwrap(); + match self.common_header.shred_variant { + ShredVariant::LegacyCode | ShredVariant::LegacyData => { + self.common_header.index = index; + bincode::serialize_into(&mut self.payload[..], &self.common_header).unwrap(); + } + ShredVariant::MerkleCode(_) | ShredVariant::MerkleData(_) => { + panic!("Not Implemented!"); + } + } } // Only for tests. fn set_slot(&mut self, slot: Slot) { - self.common_header.slot = slot; - bincode::serialize_into(&mut self.payload[..], &self.common_header).unwrap(); + match self.common_header.shred_variant { + ShredVariant::LegacyCode | ShredVariant::LegacyData => { + self.common_header.slot = slot; + bincode::serialize_into(&mut self.payload[..], &self.common_header).unwrap(); + } + ShredVariant::MerkleCode(_) | ShredVariant::MerkleData(_) => { + panic!("Not Implemented!"); + } + } } }; } diff --git a/ledger/src/shred/legacy.rs b/ledger/src/shred/legacy.rs index 1096ef1f542d53..62eb58bc38e164 100644 --- a/ledger/src/shred/legacy.rs +++ b/ledger/src/shred/legacy.rs @@ -196,13 +196,6 @@ impl ShredDataTrait for ShredData { } Ok(&self.payload[Self::SIZE_OF_HEADERS..size]) } - - // Only for tests. - fn set_last_in_slot(&mut self) { - self.data_header.flags |= ShredFlags::LAST_SHRED_IN_SLOT; - let buffer = &mut self.payload[SIZE_OF_COMMON_SHRED_HEADER..]; - bincode::serialize_into(buffer, &self.data_header).unwrap(); - } } impl ShredCodeTrait for ShredCode { @@ -278,6 +271,13 @@ impl ShredData { shred.resize(Self::SIZE_OF_PAYLOAD, 0u8); Ok(shred) } + + // Only for tests. + pub(crate) fn set_last_in_slot(&mut self) { + self.data_header.flags |= ShredFlags::LAST_SHRED_IN_SLOT; + let buffer = &mut self.payload[SIZE_OF_COMMON_SHRED_HEADER..]; + bincode::serialize_into(buffer, &self.data_header).unwrap(); + } } impl ShredCode { diff --git a/ledger/src/shred/merkle.rs b/ledger/src/shred/merkle.rs index 9d0482b95354a5..147955d3a98558 100644 --- a/ledger/src/shred/merkle.rs +++ b/ledger/src/shred/merkle.rs @@ -8,9 +8,8 @@ use { traits::{ Shred as ShredTrait, ShredCode as ShredCodeTrait, ShredData as ShredDataTrait, }, - CodingShredHeader, DataShredHeader, Error, ShredCommonHeader, ShredFlags, ShredVariant, - SIZE_OF_CODING_SHRED_HEADERS, SIZE_OF_COMMON_SHRED_HEADER, SIZE_OF_DATA_SHRED_HEADERS, - SIZE_OF_SIGNATURE, + CodingShredHeader, DataShredHeader, Error, ShredCommonHeader, ShredVariant, + SIZE_OF_CODING_SHRED_HEADERS, SIZE_OF_DATA_SHRED_HEADERS, SIZE_OF_SIGNATURE, }, shredder::ReedSolomon, }, @@ -511,13 +510,6 @@ impl ShredDataTrait for ShredData { } Ok(&self.payload[Self::SIZE_OF_HEADERS..size]) } - - // Only for tests. - fn set_last_in_slot(&mut self) { - self.data_header.flags |= ShredFlags::LAST_SHRED_IN_SLOT; - let buffer = &mut self.payload[SIZE_OF_COMMON_SHRED_HEADER..]; - bincode::serialize_into(buffer, &self.data_header).unwrap(); - } } impl ShredCodeTrait for ShredCode { @@ -746,6 +738,7 @@ pub(super) fn recover(mut shreds: Vec) -> Result, Error> { mod test { use { super::*, + crate::shred::ShredFlags, itertools::Itertools, matches::assert_matches, rand::{seq::SliceRandom, CryptoRng, Rng}, diff --git a/ledger/src/shred/shred_data.rs b/ledger/src/shred/shred_data.rs index d6976514e22188..73c8ef221645d5 100644 --- a/ledger/src/shred/shred_data.rs +++ b/ledger/src/shred/shred_data.rs @@ -28,7 +28,6 @@ impl ShredData { dispatch!(pub(super) fn parent(&self) -> Result); dispatch!(pub(super) fn payload(&self) -> &Vec); dispatch!(pub(super) fn sanitize(&self) -> Result<(), Error>); - dispatch!(pub(super) fn set_last_in_slot(&mut self)); dispatch!(pub(super) fn set_signature(&mut self, signature: Signature)); dispatch!(pub(super) fn signed_message(&self) -> &[u8]); @@ -105,6 +104,14 @@ impl ShredData { Some(proof_size) => merkle::ShredData::capacity(proof_size), } } + + // Only for tests. + pub(super) fn set_last_in_slot(&mut self) { + match self { + Self::Legacy(shred) => shred.set_last_in_slot(), + Self::Merkle(_) => panic!("Not Implemented!"), + } + } } impl From for ShredData { diff --git a/ledger/src/shred/traits.rs b/ledger/src/shred/traits.rs index b5326b62a74de0..5ae2b955aaa45a 100644 --- a/ledger/src/shred/traits.rs +++ b/ledger/src/shred/traits.rs @@ -54,9 +54,6 @@ pub(super) trait ShredData: Shred { } fn data(&self) -> Result<&[u8], Error>; - - // Only for tests. - fn set_last_in_slot(&mut self); } pub(super) trait ShredCode: Shred { From e6a9c7e47c26f753f791509c77f6e1e39b8c5cbc Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Sun, 11 Sep 2022 17:37:22 +0000 Subject: [PATCH 108/465] Add --process-ledger-before-service flag to solana-validator (backport #27716) (#27717) * Add --process-ledger-before-service flag to solana-validator (cherry picked from commit 83d4d128c2f97aa348cbd594d17803331c8db04b) * Update validator.rs Co-authored-by: Michael Vines --- core/src/validator.rs | 5 +++++ local-cluster/src/validator_configs.rs | 1 + validator/src/main.rs | 7 +++++++ 3 files changed, 13 insertions(+) diff --git a/core/src/validator.rs b/core/src/validator.rs index ef160a7a5f8d98..09f0e4fe47b76b 100644 --- a/core/src/validator.rs +++ b/core/src/validator.rs @@ -161,6 +161,7 @@ pub struct ValidatorConfig { pub no_os_disk_stats_reporting: bool, pub poh_pinned_cpu_core: usize, pub poh_hashes_per_batch: u64, + pub process_ledger_before_services: bool, pub account_indexes: AccountSecondaryIndexes, pub accounts_db_caching_enabled: bool, pub accounts_db_config: Option, @@ -223,6 +224,7 @@ impl Default for ValidatorConfig { no_os_disk_stats_reporting: true, poh_pinned_cpu_core: poh_service::DEFAULT_PINNED_CPU_CORE, poh_hashes_per_batch: poh_service::DEFAULT_HASHES_PER_BATCH, + process_ledger_before_services: false, account_indexes: AccountSecondaryIndexes::default(), accounts_db_caching_enabled: false, warp_slot: None, @@ -705,6 +707,9 @@ impl Validator { &leader_schedule_cache, ); + if config.process_ledger_before_services { + process_blockstore.process(); + } *start_progress.write().unwrap() = ValidatorStartProgress::StartingServices; let sample_performance_service = diff --git a/local-cluster/src/validator_configs.rs b/local-cluster/src/validator_configs.rs index ace823dd60ac77..7ad91f47c27575 100644 --- a/local-cluster/src/validator_configs.rs +++ b/local-cluster/src/validator_configs.rs @@ -58,6 +58,7 @@ pub fn safe_clone_config(config: &ValidatorConfig) -> ValidatorConfig { tpu_coalesce_ms: config.tpu_coalesce_ms, validator_exit: Arc::new(RwLock::new(Exit::default())), poh_hashes_per_batch: config.poh_hashes_per_batch, + process_ledger_before_services: config.process_ledger_before_services, no_wait_for_vote_to_start_leader: config.no_wait_for_vote_to_start_leader, accounts_shrink_ratio: config.accounts_shrink_ratio, accounts_db_config: config.accounts_db_config.clone(), diff --git a/validator/src/main.rs b/validator/src/main.rs index e1ebd8861429ae..519b6a11e4e165 100644 --- a/validator/src/main.rs +++ b/validator/src/main.rs @@ -1625,6 +1625,12 @@ pub fn main() { .value_name("NUM") .help("Specify hashes per batch in PoH service"), ) + .arg( + Arg::with_name("process_ledger_before_services") + .long("process-ledger-before-services") + .hidden(true) + .help("Process the local ledger fully before starting networking services") + ) .arg( Arg::with_name("account_indexes") .long("account-index") @@ -2693,6 +2699,7 @@ pub fn main() { .unwrap_or(poh_service::DEFAULT_PINNED_CPU_CORE), poh_hashes_per_batch: value_of(&matches, "poh_hashes_per_batch") .unwrap_or(poh_service::DEFAULT_HASHES_PER_BATCH), + process_ledger_before_services: matches.is_present("process_ledger_before_services"), account_indexes, accounts_db_caching_enabled: !matches.is_present("no_accounts_db_caching"), accounts_db_test_hash_calculation: matches.is_present("accounts_db_test_hash_calculation"), From 78c05e0a529acc1a1943c9f76597e5c6daac4109 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Mon, 12 Sep 2022 14:25:09 +0000 Subject: [PATCH 109/465] Update validator-start.md (backport #27723) (#27724) Update validator-start.md Typo (missing noun). (cherry picked from commit 836ba734ea69c084b53a0373ae1d7c240f40ebae) Co-authored-by: Artie Kushner <34076599+rtviii@users.noreply.github.com> --- docs/src/running-validator/validator-start.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/src/running-validator/validator-start.md b/docs/src/running-validator/validator-start.md index 6089c218319afd..69966e28865c0a 100644 --- a/docs/src/running-validator/validator-start.md +++ b/docs/src/running-validator/validator-start.md @@ -393,7 +393,7 @@ to be reverted and the issue reproduced before help can be provided. The validator log file, as specified by `--log ~/solana-validator.log`, can get very large over time and it's recommended that log rotation be configured. -The validator will re-open its when it receives the `USR1` signal, which is the +The validator will re-open its log file when it receives the `USR1` signal, which is the basic primitive that enables log rotation. If the validator is being started by a wrapper shell script, it is important to From 651364a660c7c33ff20f7f4d916ab435fb15fc7c Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Mon, 12 Sep 2022 20:10:25 +0000 Subject: [PATCH 110/465] uses varint encoding for vote-state lockout offsets (backport #27565) (#27727) * adds serde varint encoder/decoder #[derive(Deserialize, Serialize)] struct Foo { #[serde(with = "serde_varint")] field: u64, ... } (cherry picked from commit f6fbc47b2d7a4ea1060841372c47fad906ac6a72) * uses varint encoding for vote-state lockout offsets The commit removes CompactVoteStateUpdate and instead reduces serialized size of VoteStateUpdate using varint encoding for vote-state lockout offsets. (cherry picked from commit 4f22ee8f9bd7d3390770dbc8e846d3adf86d1333) # Conflicts: # core/src/consensus.rs # programs/vote/src/vote_instruction.rs # programs/vote/src/vote_state/mod.rs # sdk/program/src/vote/state/mod.rs * removes mergify merge conflicts Co-authored-by: behzad nouri --- Cargo.lock | 2 + core/src/consensus.rs | 2 +- core/src/replay_stage.rs | 8 +- programs/vote/Cargo.toml | 2 + programs/vote/src/vote_instruction.rs | 16 +- programs/vote/src/vote_processor.rs | 5 +- programs/vote/src/vote_state/mod.rs | 508 ++++++++------------------ runtime/src/vote_parser.rs | 14 +- sdk/program/src/lib.rs | 1 + sdk/program/src/serde_varint.rs | 260 +++++++++++++ transaction-status/src/parse_vote.rs | 14 +- 11 files changed, 445 insertions(+), 387 deletions(-) create mode 100644 sdk/program/src/serde_varint.rs diff --git a/Cargo.lock b/Cargo.lock index 8dc6ac70c6a74c..d708d465423593 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -6486,9 +6486,11 @@ name = "solana-vote-program" version = "1.11.11" dependencies = [ "bincode", + "itertools", "log", "num-derive", "num-traits", + "rand 0.7.3", "rustc_version 0.4.0", "serde", "serde_derive", diff --git a/core/src/consensus.rs b/core/src/consensus.rs index 37c80014aeaa94..b94dded42eb676 100644 --- a/core/src/consensus.rs +++ b/core/src/consensus.rs @@ -169,7 +169,7 @@ impl TowerVersions { } } -#[frozen_abi(digest = "8Y9r3XAwXwmrVGMCyTuy4Kbdotnt1V6N8J6NEniBFD9x")] +#[frozen_abi(digest = "F2LpNgXygZAqWwGUCn8rTWTYGd8LhQS7tT1e5FYDWCDj")] #[derive(Clone, Serialize, Deserialize, Debug, PartialEq, AbiExample)] pub struct Tower { pub node_pubkey: Pubkey, diff --git a/core/src/replay_stage.rs b/core/src/replay_stage.rs index 02dbcb69775183..f07b1cfb240431 100644 --- a/core/src/replay_stage.rs +++ b/core/src/replay_stage.rs @@ -2012,13 +2012,7 @@ impl ReplayStage { .is_active(&feature_set::compact_vote_state_updates::id()); let vote = match (should_compact, vote) { (true, VoteTransaction::VoteStateUpdate(vote_state_update)) => { - if let Some(compact_vote_state_update) = vote_state_update.compact() { - VoteTransaction::from(compact_vote_state_update) - } else { - // Compaction failed - warn!("Compaction failed when generating vote tx for vote account {}. Unable to vote", vote_account_pubkey); - return None; - } + VoteTransaction::CompactVoteStateUpdate(vote_state_update) } (_, vote) => vote, }; diff --git a/programs/vote/Cargo.toml b/programs/vote/Cargo.toml index 2e7e613765b0cd..09b87a2488480e 100644 --- a/programs/vote/Cargo.toml +++ b/programs/vote/Cargo.toml @@ -24,6 +24,8 @@ solana-sdk = { path = "../../sdk", version = "=1.11.11" } thiserror = "1.0" [dev-dependencies] +itertools = "0.10.3" +rand = "0.7.0" solana-logger = { path = "../../logger", version = "=1.11.11" } [build-dependencies] diff --git a/programs/vote/src/vote_instruction.rs b/programs/vote/src/vote_instruction.rs index 97829e332fb4f1..8056714de51026 100644 --- a/programs/vote/src/vote_instruction.rs +++ b/programs/vote/src/vote_instruction.rs @@ -4,7 +4,7 @@ use { crate::{ id, vote_state::{ - CompactVoteStateUpdate, Vote, VoteAuthorize, VoteAuthorizeCheckedWithSeedArgs, + serde_compact_vote_state_update, Vote, VoteAuthorize, VoteAuthorizeCheckedWithSeedArgs, VoteAuthorizeWithSeedArgs, VoteInit, VoteState, VoteStateUpdate, }, }, @@ -132,14 +132,18 @@ pub enum VoteInstruction { /// # Account references /// 0. `[Write]` Vote account to vote with /// 1. `[SIGNER]` Vote authority - CompactUpdateVoteState(CompactVoteStateUpdate), + #[serde(with = "serde_compact_vote_state_update")] + CompactUpdateVoteState(VoteStateUpdate), /// Update the onchain vote state for the signer along with a switching proof. /// /// # Account references /// 0. `[Write]` Vote account to vote with /// 1. `[SIGNER]` Vote authority - CompactUpdateVoteStateSwitch(CompactVoteStateUpdate, Hash), + CompactUpdateVoteStateSwitch( + #[serde(with = "serde_compact_vote_state_update")] VoteStateUpdate, + Hash, + ), } fn initialize_account(vote_pubkey: &Pubkey, vote_init: &VoteInit) -> Instruction { @@ -387,7 +391,7 @@ pub fn update_vote_state_switch( pub fn compact_update_vote_state( vote_pubkey: &Pubkey, authorized_voter_pubkey: &Pubkey, - compact_vote_state_update: CompactVoteStateUpdate, + vote_state_update: VoteStateUpdate, ) -> Instruction { let account_metas = vec![ AccountMeta::new(*vote_pubkey, false), @@ -396,7 +400,7 @@ pub fn compact_update_vote_state( Instruction::new_with_bincode( id(), - &VoteInstruction::CompactUpdateVoteState(compact_vote_state_update), + &VoteInstruction::CompactUpdateVoteState(vote_state_update), account_metas, ) } @@ -404,7 +408,7 @@ pub fn compact_update_vote_state( pub fn compact_update_vote_state_switch( vote_pubkey: &Pubkey, authorized_voter_pubkey: &Pubkey, - vote_state_update: CompactVoteStateUpdate, + vote_state_update: VoteStateUpdate, proof_hash: Hash, ) -> Instruction { let account_metas = vec![ diff --git a/programs/vote/src/vote_processor.rs b/programs/vote/src/vote_processor.rs index 9abc361f4abe6e..319bd68d610a93 100644 --- a/programs/vote/src/vote_processor.rs +++ b/programs/vote/src/vote_processor.rs @@ -173,8 +173,8 @@ pub fn process_instruction( Err(InstructionError::InvalidInstructionData) } } - VoteInstruction::CompactUpdateVoteState(compact_vote_state_update) - | VoteInstruction::CompactUpdateVoteStateSwitch(compact_vote_state_update, _) => { + VoteInstruction::CompactUpdateVoteState(vote_state_update) + | VoteInstruction::CompactUpdateVoteStateSwitch(vote_state_update, _) => { if invoke_context .feature_set .is_active(&feature_set::allow_votes_to_directly_update_vote_state::id()) @@ -185,7 +185,6 @@ pub fn process_instruction( let sysvar_cache = invoke_context.get_sysvar_cache(); let slot_hashes = sysvar_cache.get_slot_hashes()?; let clock = sysvar_cache.get_clock()?; - let vote_state_update = compact_vote_state_update.uncompact()?; vote_state::process_vote_state_update( &mut me, slot_hashes.slot_hashes(), diff --git a/programs/vote/src/vote_state/mod.rs b/programs/vote/src/vote_state/mod.rs index f3ad383988263f..37b2ab2b3459ad 100644 --- a/programs/vote/src/vote_state/mod.rs +++ b/programs/vote/src/vote_state/mod.rs @@ -16,7 +16,6 @@ use { instruction::InstructionError, pubkey::Pubkey, rent::Rent, - short_vec, slot_hashes::SlotHash, sysvar::clock::Clock, transaction_context::{BorrowedAccount, InstructionContext, TransactionContext}, @@ -42,12 +41,13 @@ pub const MAX_EPOCH_CREDITS_HISTORY: usize = 64; // Offset of VoteState::prior_voters, for determining initialization status without deserialization const DEFAULT_PRIOR_VOTERS_OFFSET: usize = 82; -#[frozen_abi(digest = "EYPXjH9Zn2vLzxyjHejkRkoTh4Tg4sirvb4FX9ye25qF")] +#[frozen_abi(digest = "4RSrLCthxW7e6KgpzDCf1kQUxa2v2aCg9mxn3975V7bm")] #[derive(Debug, PartialEq, Eq, Clone, Serialize, Deserialize, AbiEnumVisitor, AbiExample)] pub enum VoteTransaction { Vote(Vote), VoteStateUpdate(VoteStateUpdate), - CompactVoteStateUpdate(CompactVoteStateUpdate), + #[serde(with = "serde_compact_vote_state_update")] + CompactVoteStateUpdate(VoteStateUpdate), } impl VoteTransaction { @@ -55,32 +55,26 @@ impl VoteTransaction { match self { VoteTransaction::Vote(vote) => vote.slots.clone(), VoteTransaction::VoteStateUpdate(vote_state_update) => vote_state_update.slots(), - VoteTransaction::CompactVoteStateUpdate(compact_state_update) => { - compact_state_update.slots() - } + VoteTransaction::CompactVoteStateUpdate(vote_state_update) => vote_state_update.slots(), } } pub fn slot(&self, i: usize) -> Slot { match self { VoteTransaction::Vote(vote) => vote.slots[i], - VoteTransaction::VoteStateUpdate(vote_state_update) => { + VoteTransaction::VoteStateUpdate(vote_state_update) + | VoteTransaction::CompactVoteStateUpdate(vote_state_update) => { vote_state_update.lockouts[i].slot } - VoteTransaction::CompactVoteStateUpdate(compact_state_update) => { - compact_state_update.slots()[i] - } } } pub fn len(&self) -> usize { match self { VoteTransaction::Vote(vote) => vote.slots.len(), - VoteTransaction::VoteStateUpdate(vote_state_update) => vote_state_update.lockouts.len(), - VoteTransaction::CompactVoteStateUpdate(compact_state_update) => { - 1 + compact_state_update.lockouts_32.len() - + compact_state_update.lockouts_16.len() - + compact_state_update.lockouts_8.len() + VoteTransaction::VoteStateUpdate(vote_state_update) + | VoteTransaction::CompactVoteStateUpdate(vote_state_update) => { + vote_state_update.lockouts.len() } } } @@ -88,10 +82,10 @@ impl VoteTransaction { pub fn is_empty(&self) -> bool { match self { VoteTransaction::Vote(vote) => vote.slots.is_empty(), - VoteTransaction::VoteStateUpdate(vote_state_update) => { + VoteTransaction::VoteStateUpdate(vote_state_update) + | VoteTransaction::CompactVoteStateUpdate(vote_state_update) => { vote_state_update.lockouts.is_empty() } - VoteTransaction::CompactVoteStateUpdate(_) => false, } } @@ -99,18 +93,16 @@ impl VoteTransaction { match self { VoteTransaction::Vote(vote) => vote.hash, VoteTransaction::VoteStateUpdate(vote_state_update) => vote_state_update.hash, - VoteTransaction::CompactVoteStateUpdate(compact_state_update) => { - compact_state_update.hash - } + VoteTransaction::CompactVoteStateUpdate(vote_state_update) => vote_state_update.hash, } } pub fn timestamp(&self) -> Option { match self { VoteTransaction::Vote(vote) => vote.timestamp, - VoteTransaction::VoteStateUpdate(vote_state_update) => vote_state_update.timestamp, - VoteTransaction::CompactVoteStateUpdate(compact_state_update) => { - compact_state_update.timestamp + VoteTransaction::VoteStateUpdate(vote_state_update) + | VoteTransaction::CompactVoteStateUpdate(vote_state_update) => { + vote_state_update.timestamp } } } @@ -118,9 +110,9 @@ impl VoteTransaction { pub fn set_timestamp(&mut self, ts: Option) { match self { VoteTransaction::Vote(vote) => vote.timestamp = ts, - VoteTransaction::VoteStateUpdate(vote_state_update) => vote_state_update.timestamp = ts, - VoteTransaction::CompactVoteStateUpdate(compact_state_update) => { - compact_state_update.timestamp = ts + VoteTransaction::VoteStateUpdate(vote_state_update) + | VoteTransaction::CompactVoteStateUpdate(vote_state_update) => { + vote_state_update.timestamp = ts } } } @@ -128,12 +120,10 @@ impl VoteTransaction { pub fn last_voted_slot(&self) -> Option { match self { VoteTransaction::Vote(vote) => vote.slots.last().copied(), - VoteTransaction::VoteStateUpdate(vote_state_update) => { + VoteTransaction::VoteStateUpdate(vote_state_update) + | VoteTransaction::CompactVoteStateUpdate(vote_state_update) => { Some(vote_state_update.lockouts.back()?.slot) } - VoteTransaction::CompactVoteStateUpdate(compact_state_update) => { - compact_state_update.slots().last().copied() - } } } @@ -154,12 +144,6 @@ impl From for VoteTransaction { } } -impl From for VoteTransaction { - fn from(compact_state_update: CompactVoteStateUpdate) -> Self { - VoteTransaction::CompactVoteStateUpdate(compact_state_update) - } -} - #[frozen_abi(digest = "Ch2vVEwos2EjAVqSHCyJjnN2MNX1yrpapZTGhMSCjWUH")] #[derive(Serialize, Default, Deserialize, Debug, PartialEq, Eq, Clone, AbiExample)] pub struct Vote { @@ -212,28 +196,6 @@ impl Lockout { } } -#[derive(Serialize, Default, Deserialize, Debug, PartialEq, Eq, Copy, Clone, AbiExample)] -pub struct CompactLockout { - // Offset to the next vote, 0 if this is the last vote in the tower - pub offset: T, - // Confirmation count, guarenteed to be < 32 - pub confirmation_count: u8, -} - -impl CompactLockout { - pub fn new(offset: T) -> Self { - Self { - offset, - confirmation_count: 1, - } - } - - // The number of slots for which this vote is locked - pub fn lockout(&self) -> u64 { - (INITIAL_LOCKOUT as u64).pow(self.confirmation_count.into()) - } -} - #[frozen_abi(digest = "BctadFJjUKbvPJzr6TszbX6rBfQUNSRKpKKngkzgXgeY")] #[derive(Serialize, Default, Deserialize, Debug, PartialEq, Eq, Clone, AbiExample)] pub struct VoteStateUpdate { @@ -278,205 +240,6 @@ impl VoteStateUpdate { pub fn slots(&self) -> Vec { self.lockouts.iter().map(|lockout| lockout.slot).collect() } - - pub fn compact(self) -> Option { - CompactVoteStateUpdate::new(self.lockouts, self.root, self.hash, self.timestamp) - } -} - -/// Ignoring overhead, in a full `VoteStateUpdate` the lockouts take up -/// 31 * (64 + 32) = 2976 bits. -/// -/// In this schema we separate the votes into 3 separate lockout structures -/// and store offsets rather than slot number, allowing us to use smaller fields. -/// -/// In a full `CompactVoteStateUpdate` the lockouts take up -/// 64 + (32 + 8) * 16 + (16 + 8) * 8 + (8 + 8) * 6 = 992 bits -/// allowing us to greatly reduce block size. -#[frozen_abi(digest = "C8ZrdXqqF3VxgsoCxnqNaYJggV6rr9PC3rtmVudJFmqG")] -#[derive(Serialize, Default, Deserialize, Debug, PartialEq, Eq, Clone, AbiExample)] -pub struct CompactVoteStateUpdate { - /// The proposed root, u64::MAX if there is no root - pub root: Slot, - /// The offset from the root (or 0 if no root) to the first vote - pub root_to_first_vote_offset: u64, - /// Part of the proposed tower, votes with confirmation_count > 15 - #[serde(with = "short_vec")] - pub lockouts_32: Vec>, - /// Part of the proposed tower, votes with 15 >= confirmation_count > 7 - #[serde(with = "short_vec")] - pub lockouts_16: Vec>, - /// Part of the proposed tower, votes with 7 >= confirmation_count - #[serde(with = "short_vec")] - pub lockouts_8: Vec>, - - /// Signature of the bank's state at the last slot - pub hash: Hash, - /// Processing timestamp of last slot - pub timestamp: Option, -} - -impl From> for CompactVoteStateUpdate { - fn from(recent_slots: Vec<(Slot, u32)>) -> Self { - let lockouts: VecDeque = recent_slots - .into_iter() - .map(|(slot, confirmation_count)| Lockout { - slot, - confirmation_count, - }) - .collect(); - Self::new(lockouts, None, Hash::default(), None).unwrap() - } -} - -impl CompactVoteStateUpdate { - pub fn new( - mut lockouts: VecDeque, - root: Option, - hash: Hash, - timestamp: Option, - ) -> Option { - if lockouts.is_empty() { - return Some(Self::default()); - } - let mut cur_slot = root.unwrap_or(0u64); - let mut cur_confirmation_count = 0; - let offset = lockouts - .pop_front() - .map( - |Lockout { - slot, - confirmation_count, - }| { - assert!(confirmation_count < 32); - - slot.checked_sub(cur_slot).map(|offset| { - cur_slot = slot; - cur_confirmation_count = confirmation_count; - offset - }) - }, - ) - .expect("Tower should not be empty")?; - let mut lockouts_32 = Vec::new(); - let mut lockouts_16 = Vec::new(); - let mut lockouts_8 = Vec::new(); - - for Lockout { - slot, - confirmation_count, - } in lockouts - { - assert!(confirmation_count < 32); - let offset = slot.checked_sub(cur_slot)?; - if cur_confirmation_count > 15 { - lockouts_32.push(CompactLockout { - offset: offset.try_into().unwrap(), - confirmation_count: cur_confirmation_count.try_into().unwrap(), - }); - } else if cur_confirmation_count > 7 { - lockouts_16.push(CompactLockout { - offset: offset.try_into().unwrap(), - confirmation_count: cur_confirmation_count.try_into().unwrap(), - }); - } else { - lockouts_8.push(CompactLockout { - offset: offset.try_into().unwrap(), - confirmation_count: cur_confirmation_count.try_into().unwrap(), - }) - } - - cur_slot = slot; - cur_confirmation_count = confirmation_count; - } - // Last vote should be at the top of tower, so we don't have to explicitly store it - assert!(cur_confirmation_count == 1); - Some(Self { - root: root.unwrap_or(u64::MAX), - root_to_first_vote_offset: offset, - lockouts_32, - lockouts_16, - lockouts_8, - hash, - timestamp, - }) - } - - pub fn root(&self) -> Option { - if self.root == u64::MAX { - None - } else { - Some(self.root) - } - } - - pub fn slots(&self) -> Vec { - std::iter::once(self.root_to_first_vote_offset) - .chain(self.lockouts_32.iter().map(|lockout| lockout.offset.into())) - .chain(self.lockouts_16.iter().map(|lockout| lockout.offset.into())) - .chain(self.lockouts_8.iter().map(|lockout| lockout.offset.into())) - .scan(self.root().unwrap_or(0), |prev_slot, offset| { - prev_slot.checked_add(offset).map(|slot| { - *prev_slot = slot; - slot - }) - }) - .collect() - } - - pub fn uncompact(self) -> Result { - let first_slot = self - .root() - .unwrap_or(0) - .checked_add(self.root_to_first_vote_offset) - .ok_or(InstructionError::ArithmeticOverflow)?; - let mut arithmetic_overflow_occured = false; - let lockouts = self - .lockouts_32 - .iter() - .map(|lockout| (lockout.offset.into(), lockout.confirmation_count)) - .chain( - self.lockouts_16 - .iter() - .map(|lockout| (lockout.offset.into(), lockout.confirmation_count)), - ) - .chain( - self.lockouts_8 - .iter() - .map(|lockout| (lockout.offset.into(), lockout.confirmation_count)), - ) - .chain( - // To pick up the last element - std::iter::once((0, 1)), - ) - .scan( - first_slot, - |slot, (offset, confirmation_count): (u64, u8)| { - let cur_slot = *slot; - if let Some(new_slot) = slot.checked_add(offset) { - *slot = new_slot; - Some(Lockout { - slot: cur_slot, - confirmation_count: confirmation_count.into(), - }) - } else { - arithmetic_overflow_occured = true; - None - } - }, - ) - .collect(); - if arithmetic_overflow_occured { - Err(InstructionError::ArithmeticOverflow) - } else { - Ok(VoteStateUpdate { - lockouts, - root: self.root(), - hash: self.hash, - timestamp: self.timestamp, - }) - } - } } #[derive(Default, Serialize, Deserialize, Debug, PartialEq, Eq, Clone, Copy)] @@ -1489,6 +1252,102 @@ impl VoteState { } } +pub mod serde_compact_vote_state_update { + use { + super::*, + serde::{Deserialize, Deserializer, Serialize, Serializer}, + solana_sdk::{serde_varint, short_vec}, + }; + + #[derive(Deserialize, Serialize, AbiExample)] + struct LockoutOffset { + #[serde(with = "serde_varint")] + offset: Slot, + confirmation_count: u8, + } + + #[derive(Deserialize, Serialize)] + struct CompactVoteStateUpdate { + root: Slot, + #[serde(with = "short_vec")] + lockout_offsets: Vec, + hash: Hash, + timestamp: Option, + } + + pub fn serialize( + vote_state_update: &VoteStateUpdate, + serializer: S, + ) -> Result + where + S: Serializer, + { + let lockout_offsets = vote_state_update.lockouts.iter().scan( + vote_state_update.root.unwrap_or_default(), + |slot, lockout| { + let offset = match lockout.slot.checked_sub(*slot) { + None => return Some(Err(serde::ser::Error::custom("Invalid vote lockout"))), + Some(offset) => offset, + }; + let confirmation_count = match u8::try_from(lockout.confirmation_count) { + Ok(confirmation_count) => confirmation_count, + Err(_) => { + return Some(Err(serde::ser::Error::custom("Invalid confirmation count"))) + } + }; + let lockout_offset = LockoutOffset { + offset, + confirmation_count, + }; + *slot = lockout.slot; + Some(Ok(lockout_offset)) + }, + ); + let compact_vote_state_update = CompactVoteStateUpdate { + root: vote_state_update.root.unwrap_or(Slot::MAX), + lockout_offsets: lockout_offsets.collect::>()?, + hash: vote_state_update.hash, + timestamp: vote_state_update.timestamp, + }; + compact_vote_state_update.serialize(serializer) + } + + pub fn deserialize<'de, D>(deserializer: D) -> Result + where + D: Deserializer<'de>, + { + let CompactVoteStateUpdate { + root, + lockout_offsets, + hash, + timestamp, + } = CompactVoteStateUpdate::deserialize(deserializer)?; + let root = (root != Slot::MAX).then(|| root); + let lockouts = + lockout_offsets + .iter() + .scan(root.unwrap_or_default(), |slot, lockout_offset| { + *slot = match slot.checked_add(lockout_offset.offset) { + None => { + return Some(Err(serde::de::Error::custom("Invalid lockout offset"))) + } + Some(slot) => slot, + }; + let lockout = Lockout { + slot: *slot, + confirmation_count: u32::from(lockout_offset.confirmation_count), + }; + Some(Ok(lockout)) + }); + Ok(VoteStateUpdate { + root, + lockouts: lockouts.collect::>()?, + hash, + timestamp, + }) + } +} + /// Authorize the given pubkey to withdraw or sign votes. This may be called multiple times, /// but will implicitly withdraw authorization from the previously authorized /// key @@ -1792,6 +1651,8 @@ mod tests { use { super::*, crate::vote_state, + itertools::Itertools, + rand::Rng, solana_sdk::{account::AccountSharedData, account_utils::StateMut, hash::hash}, std::cell::RefCell, }; @@ -4168,101 +4029,48 @@ mod tests { } #[test] - fn test_compact_vote_state_update_parity() { - let mut vote_state_update = VoteStateUpdate::from(vec![(2, 4), (4, 3), (6, 2), (7, 1)]); - vote_state_update.hash = Hash::new_unique(); - vote_state_update.root = Some(1); - - let compact_vote_state_update = vote_state_update.clone().compact().unwrap(); - - assert_eq!(vote_state_update.slots(), compact_vote_state_update.slots()); - assert_eq!(vote_state_update.hash, compact_vote_state_update.hash); - assert_eq!(vote_state_update.root, compact_vote_state_update.root()); - - let vote_state_update_new = compact_vote_state_update.uncompact().unwrap(); - assert_eq!(vote_state_update, vote_state_update_new); - } - - #[test] - fn test_compact_vote_state_update_large_offsets() { - let vote_state_update = VoteStateUpdate::from(vec![ - (0, 31), - (1, 30), - (2, 29), - (3, 28), - (u64::pow(2, 28), 17), - (u64::pow(2, 28) + u64::pow(2, 16), 1), - ]); - let compact_vote_state_update = vote_state_update.clone().compact().unwrap(); - - assert_eq!(vote_state_update.slots(), compact_vote_state_update.slots()); - - let vote_state_update_new = compact_vote_state_update.uncompact().unwrap(); - assert_eq!(vote_state_update, vote_state_update_new); - } - - #[test] - fn test_compact_vote_state_update_border_conditions() { - let two_31 = u64::pow(2, 31); - let two_15 = u64::pow(2, 15); - let vote_state_update = VoteStateUpdate::from(vec![ - (0, 31), - (two_31, 16), - (two_31 + 1, 15), - (two_31 + two_15, 7), - (two_31 + two_15 + 1, 6), - (two_31 + two_15 + 1 + 64, 1), - ]); - let compact_vote_state_update = vote_state_update.clone().compact().unwrap(); - - assert_eq!(vote_state_update.slots(), compact_vote_state_update.slots()); - - let vote_state_update_new = compact_vote_state_update.uncompact().unwrap(); - assert_eq!(vote_state_update, vote_state_update_new); - } - - #[test] - fn test_compact_vote_state_update_large_root() { - let two_58 = u64::pow(2, 58); - let two_31 = u64::pow(2, 31); - let mut vote_state_update = VoteStateUpdate::from(vec![(two_58, 31), (two_58 + two_31, 1)]); - vote_state_update.root = Some(two_31); - let compact_vote_state_update = vote_state_update.clone().compact().unwrap(); - - assert_eq!(vote_state_update.slots(), compact_vote_state_update.slots()); - - let vote_state_update_new = compact_vote_state_update.uncompact().unwrap(); - assert_eq!(vote_state_update, vote_state_update_new); + fn test_serde_compact_vote_state_update() { + let mut rng = rand::thread_rng(); + for _ in 0..5000 { + run_serde_compact_vote_state_update(&mut rng); + } } - #[test] - fn test_compact_vote_state_update_overflow() { - let compact_vote_state_update = CompactVoteStateUpdate { - root: u64::MAX - 1, - root_to_first_vote_offset: 10, - lockouts_32: vec![], - lockouts_16: vec![], - lockouts_8: vec![CompactLockout::new(10)], - hash: Hash::new_unique(), - timestamp: None, - }; - assert_eq!( - Err(InstructionError::ArithmeticOverflow), - compact_vote_state_update.uncompact() - ); - - let compact_vote_state_update = CompactVoteStateUpdate { - root: u64::MAX - u32::MAX as u64, - root_to_first_vote_offset: 10, - lockouts_32: vec![CompactLockout::new(u32::MAX)], - lockouts_16: vec![], - lockouts_8: vec![CompactLockout::new(10)], - hash: Hash::new_unique(), - timestamp: None, + #[allow(clippy::integer_arithmetic)] + fn run_serde_compact_vote_state_update(rng: &mut R) { + let lockouts: VecDeque<_> = std::iter::repeat_with(|| Lockout { + slot: 149_303_885 + rng.gen_range(0, 10_000), + confirmation_count: rng.gen_range(0, 33), + }) + .take(32) + .sorted_by_key(|lockout| lockout.slot) + .collect(); + let root = rng + .gen_ratio(1, 2) + .then(|| lockouts[0].slot - rng.gen_range(0, 1_000)); + let timestamp = rng.gen_ratio(1, 2).then(|| rng.gen()); + let hash = Hash::from(rng.gen::<[u8; 32]>()); + let vote_state_update = VoteStateUpdate { + lockouts, + root, + hash, + timestamp, }; - assert_eq!( - Err(InstructionError::ArithmeticOverflow), - compact_vote_state_update.uncompact() - ); + #[derive(Debug, Eq, PartialEq, Deserialize, Serialize)] + enum VoteInstruction { + #[serde(with = "serde_compact_vote_state_update")] + UpdateVoteState(VoteStateUpdate), + UpdateVoteStateSwitch( + #[serde(with = "serde_compact_vote_state_update")] VoteStateUpdate, + Hash, + ), + } + let vote = VoteInstruction::UpdateVoteState(vote_state_update.clone()); + let bytes = bincode::serialize(&vote).unwrap(); + assert_eq!(vote, bincode::deserialize(&bytes).unwrap()); + let hash = Hash::from(rng.gen::<[u8; 32]>()); + let vote = VoteInstruction::UpdateVoteStateSwitch(vote_state_update, hash); + let bytes = bincode::serialize(&vote).unwrap(); + assert_eq!(vote, bincode::deserialize(&bytes).unwrap()); } } diff --git a/runtime/src/vote_parser.rs b/runtime/src/vote_parser.rs index 660328db0ab9f5..9505345edbe7f5 100644 --- a/runtime/src/vote_parser.rs +++ b/runtime/src/vote_parser.rs @@ -82,17 +82,11 @@ fn parse_vote_instruction_data( VoteInstruction::UpdateVoteStateSwitch(vote_state_update, hash) => { Some((VoteTransaction::from(vote_state_update), Some(hash))) } - VoteInstruction::CompactUpdateVoteState(compact_vote_state_update) => { - compact_vote_state_update - .uncompact() - .ok() - .map(|vote_state_update| (VoteTransaction::from(vote_state_update), None)) + VoteInstruction::CompactUpdateVoteState(vote_state_update) => { + Some((VoteTransaction::from(vote_state_update), None)) } - VoteInstruction::CompactUpdateVoteStateSwitch(compact_vote_state_update, hash) => { - compact_vote_state_update - .uncompact() - .ok() - .map(|vote_state_update| (VoteTransaction::from(vote_state_update), Some(hash))) + VoteInstruction::CompactUpdateVoteStateSwitch(vote_state_update, hash) => { + Some((VoteTransaction::from(vote_state_update), Some(hash))) } VoteInstruction::Authorize(_, _) | VoteInstruction::AuthorizeChecked(_) diff --git a/sdk/program/src/lib.rs b/sdk/program/src/lib.rs index 65b951014cfe84..e224f2abd4248e 100644 --- a/sdk/program/src/lib.rs +++ b/sdk/program/src/lib.rs @@ -597,6 +597,7 @@ pub mod rent; pub mod sanitize; pub mod secp256k1_program; pub mod secp256k1_recover; +pub mod serde_varint; pub mod serialize_utils; pub mod short_vec; pub mod slot_hashes; diff --git a/sdk/program/src/serde_varint.rs b/sdk/program/src/serde_varint.rs new file mode 100644 index 00000000000000..80324bbe084700 --- /dev/null +++ b/sdk/program/src/serde_varint.rs @@ -0,0 +1,260 @@ +#![allow(clippy::integer_arithmetic)] +use { + serde::{ + de::{Error as _, SeqAccess, Visitor}, + ser::SerializeTuple, + Deserializer, Serializer, + }, + std::{fmt, marker::PhantomData}, +}; + +pub trait VarInt: Sized { + fn visit_seq<'de, A>(seq: A) -> Result + where + A: SeqAccess<'de>; + + fn serialize(self, serializer: S) -> Result + where + S: Serializer; +} + +struct VarIntVisitor { + phantom: PhantomData, +} + +impl<'de, T> Visitor<'de> for VarIntVisitor +where + T: VarInt, +{ + type Value = T; + + fn expecting(&self, formatter: &mut fmt::Formatter) -> fmt::Result { + formatter.write_str("a VarInt") + } + + fn visit_seq(self, seq: A) -> Result + where + A: SeqAccess<'de>, + { + T::visit_seq(seq) + } +} + +pub fn serialize(value: &T, serializer: S) -> Result +where + T: Copy + VarInt, + S: Serializer, +{ + (*value).serialize(serializer) +} + +pub fn deserialize<'de, D, T>(deserializer: D) -> Result +where + D: Deserializer<'de>, + T: VarInt, +{ + deserializer.deserialize_tuple( + (std::mem::size_of::() * 8 + 6) / 7, + VarIntVisitor { + phantom: PhantomData::default(), + }, + ) +} + +macro_rules! impl_var_int { + ($type:ty) => { + impl VarInt for $type { + fn visit_seq<'de, A>(mut seq: A) -> Result + where + A: SeqAccess<'de>, + { + let mut out = 0; + let mut shift = 0u32; + while shift < <$type>::BITS { + let byte = match seq.next_element::()? { + None => return Err(A::Error::custom("Invalid Sequence")), + Some(byte) => byte, + }; + out |= ((byte & 0x7F) as Self) << shift; + if byte & 0x80 == 0 { + // Last byte should not have been truncated when it was + // shifted to the left above. + if (out >> shift) as u8 != byte { + return Err(A::Error::custom("Last Byte Truncated")); + } + // Last byte can be zero only if there was only one + // byte and the output is also zero. + if byte == 0u8 && (shift != 0 || out != 0) { + return Err(A::Error::custom("Invalid Trailing Zeros")); + } + return Ok(out); + } + shift += 7; + } + Err(A::Error::custom("Left Shift Overflows")) + } + + fn serialize(mut self, serializer: S) -> Result + where + S: Serializer, + { + let bits = <$type>::BITS - self.leading_zeros(); + let num_bytes = ((bits + 6) / 7).max(1) as usize; + let mut seq = serializer.serialize_tuple(num_bytes)?; + while self >= 0x80 { + let byte = ((self & 0x7F) | 0x80) as u8; + seq.serialize_element(&byte)?; + self >>= 7; + } + seq.serialize_element(&(self as u8))?; + seq.end() + } + } + }; +} + +impl_var_int!(u32); +impl_var_int!(u64); + +#[cfg(test)] +mod tests { + use rand::Rng; + + #[derive(Debug, Eq, PartialEq, Serialize, Deserialize)] + struct Dummy { + #[serde(with = "super")] + a: u32, + b: u64, + #[serde(with = "super")] + c: u64, + d: u32, + } + + #[test] + fn test_serde_varint() { + assert_eq!((std::mem::size_of::() * 8 + 6) / 7, 5); + assert_eq!((std::mem::size_of::() * 8 + 6) / 7, 10); + let dummy = Dummy { + a: 698, + b: 370, + c: 146, + d: 796, + }; + let bytes = bincode::serialize(&dummy).unwrap(); + assert_eq!(bytes.len(), 16); + let other: Dummy = bincode::deserialize(&bytes).unwrap(); + assert_eq!(other, dummy); + } + + #[test] + fn test_serde_varint_zero() { + let dummy = Dummy { + a: 0, + b: 0, + c: 0, + d: 0, + }; + let bytes = bincode::serialize(&dummy).unwrap(); + assert_eq!(bytes.len(), 14); + let other: Dummy = bincode::deserialize(&bytes).unwrap(); + assert_eq!(other, dummy); + } + + #[test] + fn test_serde_varint_max() { + let dummy = Dummy { + a: u32::MAX, + b: u64::MAX, + c: u64::MAX, + d: u32::MAX, + }; + let bytes = bincode::serialize(&dummy).unwrap(); + assert_eq!(bytes.len(), 27); + let other: Dummy = bincode::deserialize(&bytes).unwrap(); + assert_eq!(other, dummy); + } + + #[test] + fn test_serde_varint_rand() { + let mut rng = rand::thread_rng(); + for _ in 0..100_000 { + let dummy = Dummy { + a: rng.gen::() >> rng.gen_range(0, u32::BITS), + b: rng.gen::() >> rng.gen_range(0, u64::BITS), + c: rng.gen::() >> rng.gen_range(0, u64::BITS), + d: rng.gen::() >> rng.gen_range(0, u32::BITS), + }; + let bytes = bincode::serialize(&dummy).unwrap(); + let other: Dummy = bincode::deserialize(&bytes).unwrap(); + assert_eq!(other, dummy); + } + } + + #[test] + fn test_serde_varint_trailing_zeros() { + let buffer = [0x93, 0xc2, 0xa9, 0x8d, 0x0]; + let out = bincode::deserialize::(&buffer); + assert!(out.is_err()); + assert_eq!( + format!("{:?}", out), + r#"Err(Custom("Invalid Trailing Zeros"))"# + ); + let buffer = [0x80, 0x0]; + let out = bincode::deserialize::(&buffer); + assert!(out.is_err()); + assert_eq!( + format!("{:?}", out), + r#"Err(Custom("Invalid Trailing Zeros"))"# + ); + } + + #[test] + fn test_serde_varint_last_byte_truncated() { + let buffer = [0xe4, 0xd7, 0x88, 0xf6, 0x6f, 0xd4, 0xb9, 0x59]; + let out = bincode::deserialize::(&buffer); + assert!(out.is_err()); + assert_eq!( + format!("{:?}", out), + r#"Err(Custom("Last Byte Truncated"))"# + ); + } + + #[test] + fn test_serde_varint_shift_overflow() { + let buffer = [0x84, 0xdf, 0x96, 0xfa, 0xef]; + let out = bincode::deserialize::(&buffer); + assert!(out.is_err()); + assert_eq!( + format!("{:?}", out), + r#"Err(Custom("Left Shift Overflows"))"# + ); + } + + #[test] + fn test_serde_varint_short_buffer() { + let buffer = [0x84, 0xdf, 0x96, 0xfa]; + let out = bincode::deserialize::(&buffer); + assert!(out.is_err()); + assert_eq!(format!("{:?}", out), r#"Err(Io(Kind(UnexpectedEof)))"#); + } + + #[test] + fn test_serde_varint_fuzz() { + let mut rng = rand::thread_rng(); + let mut buffer = [0u8; 36]; + let mut num_errors = 0; + for _ in 0..200_000 { + rng.fill(&mut buffer[..]); + match bincode::deserialize::(&buffer) { + Err(_) => { + num_errors += 1; + } + Ok(dummy) => { + let bytes = bincode::serialize(&dummy).unwrap(); + assert_eq!(bytes, &buffer[..bytes.len()]); + } + } + } + assert!(num_errors > 2_000); + } +} diff --git a/transaction-status/src/parse_vote.rs b/transaction-status/src/parse_vote.rs index 96f03863c7da4a..ec5079d7e456e8 100644 --- a/transaction-status/src/parse_vote.rs +++ b/transaction-status/src/parse_vote.rs @@ -135,10 +135,7 @@ pub fn parse_vote( }), }) } - VoteInstruction::CompactUpdateVoteState(compact_vote_state_update) => { - let vote_state_update = compact_vote_state_update.uncompact().map_err(|_| { - ParseInstructionError::InstructionNotParsable(ParsableProgram::Vote) - })?; + VoteInstruction::CompactUpdateVoteState(vote_state_update) => { check_num_vote_accounts(&instruction.accounts, 2)?; let vote_state_update = json!({ "lockouts": vote_state_update.lockouts, @@ -155,10 +152,7 @@ pub fn parse_vote( }), }) } - VoteInstruction::CompactUpdateVoteStateSwitch(compact_vote_state_update, hash) => { - let vote_state_update = compact_vote_state_update.uncompact().map_err(|_| { - ParseInstructionError::InstructionNotParsable(ParsableProgram::Vote) - })?; + VoteInstruction::CompactUpdateVoteStateSwitch(vote_state_update, hash) => { check_num_vote_accounts(&instruction.accounts, 2)?; let vote_state_update = json!({ "lockouts": vote_state_update.lockouts, @@ -770,7 +764,7 @@ mod test { #[test] fn test_parse_compact_vote_state_update_ix() { let vote_state_update = VoteStateUpdate::from(vec![(0, 3), (1, 2), (2, 1)]); - let compact_vote_state_update = vote_state_update.clone().compact().unwrap(); + let compact_vote_state_update = vote_state_update.clone(); let vote_pubkey = Pubkey::new_unique(); let authorized_voter_pubkey = Pubkey::new_unique(); @@ -813,7 +807,7 @@ mod test { #[test] fn test_parse_compact_vote_state_update_switch_ix() { let vote_state_update = VoteStateUpdate::from(vec![(0, 3), (1, 2), (2, 1)]); - let compact_vote_state_update = vote_state_update.clone().compact().unwrap(); + let compact_vote_state_update = vote_state_update.clone(); let vote_pubkey = Pubkey::new_unique(); let authorized_voter_pubkey = Pubkey::new_unique(); From b30afa6a5f3804d70f51caa7a4b8acad7eb2fcdc Mon Sep 17 00:00:00 2001 From: Michael Vines Date: Mon, 12 Sep 2022 08:42:26 -0700 Subject: [PATCH 111/465] Rework 'remove_dead_slots_metadata: slots' info log message (cherry picked from commit 0bcd9134bc085e372289b3bfba80640d1cbc466b) --- runtime/src/accounts_db.rs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/runtime/src/accounts_db.rs b/runtime/src/accounts_db.rs index 4745b567e7394c..3e148e5e171b03 100644 --- a/runtime/src/accounts_db.rs +++ b/runtime/src/accounts_db.rs @@ -7523,7 +7523,11 @@ impl AccountsDb { measure.stop(); accounts_index_root_stats.clean_dead_slot_us += measure.as_us(); if self.log_dead_slots.load(Ordering::Relaxed) { - info!("remove_dead_slots_metadata: slots {:?}", dead_slots); + info!( + "remove_dead_slots_metadata: {} dead slots", + dead_slots.len() + ); + trace!("remove_dead_slots_metadata: dead_slots: {:?}", dead_slots); } accounts_index_root_stats.rooted_cleaned_count += rooted_cleaned_count; From 7c44a824451b817e031859e72490da705c4d4ad8 Mon Sep 17 00:00:00 2001 From: Yihau Chen Date: Tue, 13 Sep 2022 18:23:06 +0800 Subject: [PATCH 112/465] chore: bump axum-core to v0.2.8 (#27746) --- Cargo.lock | 10 ++++++---- programs/bpf/Cargo.lock | 10 ++++++---- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index d708d465423593..0ce0f922a16cda 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -305,9 +305,9 @@ dependencies = [ [[package]] name = "axum-core" -version = "0.2.1" +version = "0.2.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a671c9ae99531afdd5d3ee8340b8da547779430689947144c140fc74a740244" +checksum = "d9f0c0a60006f2a293d82d571f635042a72edf927539b7685bd62d361963839b" dependencies = [ "async-trait", "bytes", @@ -315,6 +315,8 @@ dependencies = [ "http", "http-body", "mime", + "tower-layer", + "tower-service", ] [[package]] @@ -1971,9 +1973,9 @@ dependencies = [ [[package]] name = "http-body" -version = "0.4.4" +version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ff4f84919677303da5f147645dbea6b1881f368d03ac84e1dc09031ebd7b2c6" +checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1" dependencies = [ "bytes", "http", diff --git a/programs/bpf/Cargo.lock b/programs/bpf/Cargo.lock index 622dadd194d6fa..f8fe2f9e2c3d9a 100644 --- a/programs/bpf/Cargo.lock +++ b/programs/bpf/Cargo.lock @@ -291,9 +291,9 @@ dependencies = [ [[package]] name = "axum-core" -version = "0.2.2" +version = "0.2.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3ddbd16eabff8b45f21b98671fddcc93daaa7ac4c84f8473693437226040de5" +checksum = "d9f0c0a60006f2a293d82d571f635042a72edf927539b7685bd62d361963839b" dependencies = [ "async-trait", "bytes", @@ -301,6 +301,8 @@ dependencies = [ "http", "http-body", "mime", + "tower-layer", + "tower-service", ] [[package]] @@ -1736,9 +1738,9 @@ dependencies = [ [[package]] name = "http-body" -version = "0.4.4" +version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ff4f84919677303da5f147645dbea6b1881f368d03ac84e1dc09031ebd7b2c6" +checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1" dependencies = [ "bytes", "http", From f6c39ee5262ac58429098b4f558645564897d936 Mon Sep 17 00:00:00 2001 From: Will Hickey Date: Tue, 13 Sep 2022 09:06:32 -0500 Subject: [PATCH 113/465] Bump version to v1.14.0 (#27742) * Bump version to v1.12.0 * Bump version to v1.13.0 * Bump version to v1.14.0 --- Cargo.lock | 484 ++++++++--------- account-decoder/Cargo.toml | 8 +- accounts-bench/Cargo.toml | 12 +- accounts-cluster-bench/Cargo.toml | 34 +- banking-bench/Cargo.toml | 26 +- banks-client/Cargo.toml | 12 +- banks-interface/Cargo.toml | 4 +- banks-server/Cargo.toml | 12 +- bench-streamer/Cargo.toml | 8 +- bench-tps/Cargo.toml | 38 +- bloom/Cargo.toml | 8 +- bucket_map/Cargo.toml | 8 +- clap-utils/Cargo.toml | 8 +- clap-v3-utils/Cargo.toml | 8 +- cli-config/Cargo.toml | 6 +- cli-output/Cargo.toml | 16 +- cli/Cargo.toml | 36 +- client-test/Cargo.toml | 32 +- client/Cargo.toml | 28 +- core/Cargo.toml | 56 +- docs/src/developing/clients/jsonrpc-api.md | 6 +- dos/Cargo.toml | 30 +- download-utils/Cargo.toml | 6 +- entry/Cargo.toml | 16 +- faucet/Cargo.toml | 14 +- frozen-abi/Cargo.toml | 6 +- frozen-abi/macro/Cargo.toml | 2 +- genesis-utils/Cargo.toml | 8 +- genesis/Cargo.toml | 22 +- geyser-plugin-interface/Cargo.toml | 6 +- geyser-plugin-manager/Cargo.toml | 16 +- gossip/Cargo.toml | 38 +- install/Cargo.toml | 14 +- keygen/Cargo.toml | 12 +- ledger-tool/Cargo.toml | 30 +- ledger/Cargo.toml | 40 +- local-cluster/Cargo.toml | 28 +- log-analyzer/Cargo.toml | 6 +- logger/Cargo.toml | 2 +- measure/Cargo.toml | 4 +- merkle-root-bench/Cargo.toml | 12 +- merkle-tree/Cargo.toml | 4 +- metrics/Cargo.toml | 4 +- net-shaper/Cargo.toml | 4 +- net-utils/Cargo.toml | 8 +- notifier/Cargo.toml | 2 +- perf/Cargo.toml | 12 +- poh-bench/Cargo.toml | 14 +- poh/Cargo.toml | 20 +- program-runtime/Cargo.toml | 14 +- program-test/Cargo.toml | 18 +- .../address-lookup-table-tests/Cargo.toml | 8 +- programs/address-lookup-table/Cargo.toml | 12 +- programs/bpf-loader-tests/Cargo.toml | 8 +- programs/bpf/Cargo.lock | 490 +++++++++--------- programs/bpf/Cargo.toml | 28 +- programs/bpf/rust/128bit/Cargo.toml | 6 +- programs/bpf/rust/128bit_dep/Cargo.toml | 4 +- programs/bpf/rust/alloc/Cargo.toml | 4 +- programs/bpf/rust/call_depth/Cargo.toml | 4 +- programs/bpf/rust/caller_access/Cargo.toml | 4 +- programs/bpf/rust/curve25519/Cargo.toml | 6 +- programs/bpf/rust/custom_heap/Cargo.toml | 4 +- programs/bpf/rust/dep_crate/Cargo.toml | 6 +- .../bpf/rust/deprecated_loader/Cargo.toml | 4 +- programs/bpf/rust/dup_accounts/Cargo.toml | 4 +- programs/bpf/rust/error_handling/Cargo.toml | 4 +- programs/bpf/rust/external_spend/Cargo.toml | 4 +- programs/bpf/rust/finalize/Cargo.toml | 4 +- .../rust/get_minimum_delegation/Cargo.toml | 4 +- .../Cargo.toml | 4 +- .../rust/instruction_introspection/Cargo.toml | 4 +- programs/bpf/rust/invoke/Cargo.toml | 4 +- programs/bpf/rust/invoke_and_error/Cargo.toml | 4 +- programs/bpf/rust/invoke_and_ok/Cargo.toml | 4 +- .../bpf/rust/invoke_and_return/Cargo.toml | 4 +- programs/bpf/rust/invoked/Cargo.toml | 4 +- programs/bpf/rust/iter/Cargo.toml | 4 +- programs/bpf/rust/log_data/Cargo.toml | 4 +- programs/bpf/rust/many_args/Cargo.toml | 6 +- programs/bpf/rust/many_args_dep/Cargo.toml | 4 +- programs/bpf/rust/mem/Cargo.toml | 10 +- programs/bpf/rust/membuiltins/Cargo.toml | 6 +- programs/bpf/rust/noop/Cargo.toml | 4 +- programs/bpf/rust/panic/Cargo.toml | 4 +- programs/bpf/rust/param_passing/Cargo.toml | 6 +- .../bpf/rust/param_passing_dep/Cargo.toml | 4 +- programs/bpf/rust/rand/Cargo.toml | 4 +- programs/bpf/rust/realloc/Cargo.toml | 4 +- programs/bpf/rust/realloc_invoke/Cargo.toml | 6 +- .../bpf/rust/ro_account_modify/Cargo.toml | 4 +- programs/bpf/rust/ro_modify/Cargo.toml | 4 +- programs/bpf/rust/sanity/Cargo.toml | 10 +- .../bpf/rust/secp256k1_recover/Cargo.toml | 4 +- programs/bpf/rust/sha/Cargo.toml | 4 +- .../rust/sibling_inner_instruction/Cargo.toml | 4 +- .../bpf/rust/sibling_instruction/Cargo.toml | 4 +- programs/bpf/rust/simulation/Cargo.toml | 12 +- programs/bpf/rust/spoof1/Cargo.toml | 4 +- programs/bpf/rust/spoof1_system/Cargo.toml | 4 +- programs/bpf/rust/sysvar/Cargo.toml | 10 +- programs/bpf/rust/upgradeable/Cargo.toml | 4 +- programs/bpf/rust/upgraded/Cargo.toml | 4 +- programs/bpf_loader/Cargo.toml | 14 +- .../bpf_loader/gen-syscall-list/Cargo.toml | 2 +- programs/compute-budget/Cargo.toml | 6 +- programs/config/Cargo.toml | 8 +- programs/ed25519-tests/Cargo.toml | 6 +- programs/stake/Cargo.toml | 18 +- programs/vote/Cargo.toml | 14 +- programs/zk-token-proof/Cargo.toml | 8 +- rayon-threadlimit/Cargo.toml | 2 +- rbpf-cli/Cargo.toml | 10 +- remote-wallet/Cargo.toml | 4 +- rpc-test/Cargo.toml | 18 +- rpc/Cargo.toml | 48 +- runtime/Cargo.toml | 34 +- runtime/store-tool/Cargo.toml | 8 +- sdk/Cargo.toml | 12 +- sdk/cargo-build-bpf/Cargo.toml | 4 +- sdk/cargo-build-sbf/Cargo.toml | 8 +- .../tests/crates/fail/Cargo.toml | 4 +- .../tests/crates/noop/Cargo.toml | 4 +- sdk/cargo-test-bpf/Cargo.toml | 2 +- sdk/cargo-test-sbf/Cargo.toml | 2 +- sdk/gen-headers/Cargo.toml | 2 +- sdk/macro/Cargo.toml | 2 +- sdk/program/Cargo.toml | 10 +- send-transaction-service/Cargo.toml | 14 +- stake-accounts/Cargo.toml | 16 +- storage-bigtable/Cargo.toml | 10 +- storage-bigtable/build-proto/Cargo.lock | 2 +- storage-bigtable/build-proto/Cargo.toml | 2 +- storage-proto/Cargo.toml | 8 +- streamer/Cargo.toml | 10 +- sys-tuner/Cargo.toml | 6 +- test-validator/Cargo.toml | 28 +- tokens/Cargo.toml | 24 +- transaction-dos/Cargo.toml | 32 +- transaction-status/Cargo.toml | 12 +- upload-perf/Cargo.toml | 4 +- validator/Cargo.toml | 50 +- version/Cargo.toml | 8 +- watchtower/Cargo.toml | 20 +- zk-token-sdk/Cargo.toml | 6 +- 145 files changed, 1269 insertions(+), 1269 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 0ce0f922a16cda..e316ee16a6f670 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1688,7 +1688,7 @@ dependencies = [ [[package]] name = "gen-headers" -version = "1.11.11" +version = "1.14.0" dependencies = [ "log", "regex", @@ -1696,7 +1696,7 @@ dependencies = [ [[package]] name = "gen-syscall-list" -version = "1.11.11" +version = "1.14.0" dependencies = [ "regex", ] @@ -3756,15 +3756,15 @@ dependencies = [ [[package]] name = "rbpf-cli" -version = "1.11.11" +version = "1.14.0" dependencies = [ "clap 3.1.8", "serde", "serde_json", "solana-bpf-loader-program", - "solana-logger 1.11.11", + "solana-logger 1.14.0", "solana-program-runtime", - "solana-sdk 1.11.11", + "solana-sdk 1.14.0", "solana_rbpf", ] @@ -4475,7 +4475,7 @@ dependencies = [ [[package]] name = "solana-account-decoder" -version = "1.11.11" +version = "1.14.0" dependencies = [ "Inflector", "base64 0.13.0", @@ -4487,7 +4487,7 @@ dependencies = [ "serde_derive", "serde_json", "solana-config-program", - "solana-sdk 1.11.11", + "solana-sdk 1.14.0", "solana-vote-program", "spl-token", "spl-token-2022", @@ -4497,21 +4497,21 @@ dependencies = [ [[package]] name = "solana-accounts-bench" -version = "1.11.11" +version = "1.14.0" dependencies = [ "clap 2.33.3", "log", "rayon", - "solana-logger 1.11.11", + "solana-logger 1.14.0", "solana-measure", "solana-runtime", - "solana-sdk 1.11.11", + "solana-sdk 1.14.0", "solana-version", ] [[package]] name = "solana-accounts-cluster-bench" -version = "1.11.11" +version = "1.14.0" dependencies = [ "clap 2.33.3", "log", @@ -4524,11 +4524,11 @@ dependencies = [ "solana-faucet", "solana-gossip", "solana-local-cluster", - "solana-logger 1.11.11", + "solana-logger 1.14.0", "solana-measure", "solana-net-utils", "solana-runtime", - "solana-sdk 1.11.11", + "solana-sdk 1.14.0", "solana-streamer", "solana-test-validator", "solana-transaction-status", @@ -4538,7 +4538,7 @@ dependencies = [ [[package]] name = "solana-address-lookup-table-program" -version = "1.11.11" +version = "1.14.0" dependencies = [ "bincode", "bytemuck", @@ -4547,28 +4547,28 @@ dependencies = [ "num-traits", "rustc_version 0.4.0", "serde", - "solana-frozen-abi 1.11.11", - "solana-frozen-abi-macro 1.11.11", - "solana-program 1.11.11", + "solana-frozen-abi 1.14.0", + "solana-frozen-abi-macro 1.14.0", + "solana-program 1.14.0", "solana-program-runtime", - "solana-sdk 1.11.11", + "solana-sdk 1.14.0", "thiserror", ] [[package]] name = "solana-address-lookup-table-program-tests" -version = "1.11.11" +version = "1.14.0" dependencies = [ "assert_matches", "bincode", "solana-address-lookup-table-program", "solana-program-test", - "solana-sdk 1.11.11", + "solana-sdk 1.14.0", ] [[package]] name = "solana-banking-bench" -version = "1.11.11" +version = "1.14.0" dependencies = [ "clap 3.1.8", "crossbeam-channel", @@ -4579,27 +4579,27 @@ dependencies = [ "solana-core", "solana-gossip", "solana-ledger", - "solana-logger 1.11.11", + "solana-logger 1.14.0", "solana-measure", "solana-perf", "solana-poh", "solana-runtime", - "solana-sdk 1.11.11", + "solana-sdk 1.14.0", "solana-streamer", "solana-version", ] [[package]] name = "solana-banks-client" -version = "1.11.11" +version = "1.14.0" dependencies = [ "borsh", "futures 0.3.21", "solana-banks-interface", "solana-banks-server", - "solana-program 1.11.11", + "solana-program 1.14.0", "solana-runtime", - "solana-sdk 1.11.11", + "solana-sdk 1.14.0", "tarpc", "thiserror", "tokio", @@ -4608,16 +4608,16 @@ dependencies = [ [[package]] name = "solana-banks-interface" -version = "1.11.11" +version = "1.14.0" dependencies = [ "serde", - "solana-sdk 1.11.11", + "solana-sdk 1.14.0", "tarpc", ] [[package]] name = "solana-banks-server" -version = "1.11.11" +version = "1.14.0" dependencies = [ "bincode", "crossbeam-channel", @@ -4625,7 +4625,7 @@ dependencies = [ "solana-banks-interface", "solana-client", "solana-runtime", - "solana-sdk 1.11.11", + "solana-sdk 1.14.0", "solana-send-transaction-service", "tarpc", "tokio", @@ -4635,7 +4635,7 @@ dependencies = [ [[package]] name = "solana-bench-streamer" -version = "1.11.11" +version = "1.14.0" dependencies = [ "clap 3.1.8", "crossbeam-channel", @@ -4646,7 +4646,7 @@ dependencies = [ [[package]] name = "solana-bench-tps" -version = "1.11.11" +version = "1.14.0" dependencies = [ "clap 2.33.3", "crossbeam-channel", @@ -4663,13 +4663,13 @@ dependencies = [ "solana-genesis", "solana-gossip", "solana-local-cluster", - "solana-logger 1.11.11", + "solana-logger 1.14.0", "solana-measure", "solana-metrics", "solana-net-utils", "solana-rpc", "solana-runtime", - "solana-sdk 1.11.11", + "solana-sdk 1.14.0", "solana-streamer", "solana-test-validator", "solana-version", @@ -4678,7 +4678,7 @@ dependencies = [ [[package]] name = "solana-bloom" -version = "1.11.11" +version = "1.14.0" dependencies = [ "bv", "fnv", @@ -4688,14 +4688,14 @@ dependencies = [ "rustc_version 0.4.0", "serde", "serde_derive", - "solana-frozen-abi 1.11.11", - "solana-frozen-abi-macro 1.11.11", - "solana-sdk 1.11.11", + "solana-frozen-abi 1.14.0", + "solana-frozen-abi-macro 1.14.0", + "solana-sdk 1.14.0", ] [[package]] name = "solana-bpf-loader-program" -version = "1.11.11" +version = "1.14.0" dependencies = [ "bincode", "byteorder", @@ -4706,26 +4706,26 @@ dependencies = [ "solana-metrics", "solana-program-runtime", "solana-runtime", - "solana-sdk 1.11.11", - "solana-zk-token-sdk 1.11.11", + "solana-sdk 1.14.0", + "solana-zk-token-sdk 1.14.0", "solana_rbpf", "thiserror", ] [[package]] name = "solana-bpf-loader-program-tests" -version = "1.11.11" +version = "1.14.0" dependencies = [ "assert_matches", "bincode", "solana-bpf-loader-program", "solana-program-test", - "solana-sdk 1.11.11", + "solana-sdk 1.14.0", ] [[package]] name = "solana-bucket-map" -version = "1.11.11" +version = "1.14.0" dependencies = [ "fs_extra", "log", @@ -4733,24 +4733,24 @@ dependencies = [ "modular-bitfield", "rand 0.7.3", "rayon", - "solana-logger 1.11.11", + "solana-logger 1.14.0", "solana-measure", - "solana-sdk 1.11.11", + "solana-sdk 1.14.0", "tempfile", ] [[package]] name = "solana-cargo-build-bpf" -version = "1.11.11" +version = "1.14.0" dependencies = [ "cargo_metadata", "clap 3.1.8", - "solana-sdk 1.11.11", + "solana-sdk 1.14.0", ] [[package]] name = "solana-cargo-build-sbf" -version = "1.11.11" +version = "1.14.0" dependencies = [ "bzip2", "cargo_metadata", @@ -4759,14 +4759,14 @@ dependencies = [ "regex", "serial_test", "solana-download-utils", - "solana-logger 1.11.11", - "solana-sdk 1.11.11", + "solana-logger 1.14.0", + "solana-sdk 1.14.0", "tar", ] [[package]] name = "solana-cargo-test-bpf" -version = "1.11.11" +version = "1.14.0" dependencies = [ "cargo_metadata", "clap 3.1.8", @@ -4774,7 +4774,7 @@ dependencies = [ [[package]] name = "solana-cargo-test-sbf" -version = "1.11.11" +version = "1.14.0" dependencies = [ "cargo_metadata", "clap 3.1.8", @@ -4782,14 +4782,14 @@ dependencies = [ [[package]] name = "solana-clap-utils" -version = "1.11.11" +version = "1.14.0" dependencies = [ "chrono", "clap 2.33.3", "rpassword", "solana-perf", "solana-remote-wallet", - "solana-sdk 1.11.11", + "solana-sdk 1.14.0", "tempfile", "thiserror", "tiny-bip39", @@ -4799,14 +4799,14 @@ dependencies = [ [[package]] name = "solana-clap-v3-utils" -version = "1.11.11" +version = "1.14.0" dependencies = [ "chrono", "clap 3.1.8", "rpassword", "solana-perf", "solana-remote-wallet", - "solana-sdk 1.11.11", + "solana-sdk 1.14.0", "tempfile", "thiserror", "tiny-bip39", @@ -4816,7 +4816,7 @@ dependencies = [ [[package]] name = "solana-cli" -version = "1.11.11" +version = "1.14.0" dependencies = [ "bincode", "bs58", @@ -4843,10 +4843,10 @@ dependencies = [ "solana-client", "solana-config-program", "solana-faucet", - "solana-logger 1.11.11", + "solana-logger 1.14.0", "solana-program-runtime", "solana-remote-wallet", - "solana-sdk 1.11.11", + "solana-sdk 1.14.0", "solana-streamer", "solana-test-validator", "solana-transaction-status", @@ -4861,7 +4861,7 @@ dependencies = [ [[package]] name = "solana-cli-config" -version = "1.11.11" +version = "1.14.0" dependencies = [ "anyhow", "dirs-next", @@ -4870,13 +4870,13 @@ dependencies = [ "serde_derive", "serde_yaml", "solana-clap-utils", - "solana-sdk 1.11.11", + "solana-sdk 1.14.0", "url 2.2.2", ] [[package]] name = "solana-cli-output" -version = "1.11.11" +version = "1.14.0" dependencies = [ "Inflector", "base64 0.13.0", @@ -4894,7 +4894,7 @@ dependencies = [ "solana-clap-utils", "solana-cli-config", "solana-client", - "solana-sdk 1.11.11", + "solana-sdk 1.14.0", "solana-transaction-status", "solana-vote-program", "spl-memo", @@ -4902,7 +4902,7 @@ dependencies = [ [[package]] name = "solana-client" -version = "1.11.11" +version = "1.14.0" dependencies = [ "anyhow", "assert_matches", @@ -4938,12 +4938,12 @@ dependencies = [ "solana-account-decoder", "solana-clap-utils", "solana-faucet", - "solana-logger 1.11.11", + "solana-logger 1.14.0", "solana-measure", "solana-metrics", "solana-net-utils", "solana-perf", - "solana-sdk 1.11.11", + "solana-sdk 1.14.0", "solana-streamer", "solana-transaction-status", "solana-version", @@ -4959,14 +4959,14 @@ dependencies = [ [[package]] name = "solana-client-test" -version = "1.11.11" +version = "1.14.0" dependencies = [ "futures-util", "serde_json", "serial_test", "solana-client", "solana-ledger", - "solana-logger 1.11.11", + "solana-logger 1.14.0", "solana-measure", "solana-merkle-tree", "solana-metrics", @@ -4974,7 +4974,7 @@ dependencies = [ "solana-rayon-threadlimit", "solana-rpc", "solana-runtime", - "solana-sdk 1.11.11", + "solana-sdk 1.14.0", "solana-streamer", "solana-test-validator", "solana-transaction-status", @@ -4985,28 +4985,28 @@ dependencies = [ [[package]] name = "solana-compute-budget-program" -version = "1.11.11" +version = "1.14.0" dependencies = [ "solana-program-runtime", - "solana-sdk 1.11.11", + "solana-sdk 1.14.0", ] [[package]] name = "solana-config-program" -version = "1.11.11" +version = "1.14.0" dependencies = [ "bincode", "chrono", "serde", "serde_derive", - "solana-logger 1.11.11", + "solana-logger 1.14.0", "solana-program-runtime", - "solana-sdk 1.11.11", + "solana-sdk 1.14.0", ] [[package]] name = "solana-core" -version = "1.11.11" +version = "1.14.0" dependencies = [ "ahash", "base64 0.13.0", @@ -5038,12 +5038,12 @@ dependencies = [ "solana-bloom", "solana-client", "solana-entry", - "solana-frozen-abi 1.11.11", - "solana-frozen-abi-macro 1.11.11", + "solana-frozen-abi 1.14.0", + "solana-frozen-abi-macro 1.14.0", "solana-geyser-plugin-manager", "solana-gossip", "solana-ledger", - "solana-logger 1.11.11", + "solana-logger 1.14.0", "solana-measure", "solana-metrics", "solana-net-utils", @@ -5053,7 +5053,7 @@ dependencies = [ "solana-rayon-threadlimit", "solana-rpc", "solana-runtime", - "solana-sdk 1.11.11", + "solana-sdk 1.14.0", "solana-send-transaction-service", "solana-stake-program", "solana-streamer", @@ -5073,7 +5073,7 @@ dependencies = [ [[package]] name = "solana-dos" -version = "1.11.11" +version = "1.14.0" dependencies = [ "bincode", "clap 3.1.8", @@ -5089,42 +5089,42 @@ dependencies = [ "solana-faucet", "solana-gossip", "solana-local-cluster", - "solana-logger 1.11.11", + "solana-logger 1.14.0", "solana-measure", "solana-net-utils", "solana-perf", "solana-rpc", - "solana-sdk 1.11.11", + "solana-sdk 1.14.0", "solana-streamer", "solana-version", ] [[package]] name = "solana-download-utils" -version = "1.11.11" +version = "1.14.0" dependencies = [ "console", "indicatif", "log", "reqwest", "solana-runtime", - "solana-sdk 1.11.11", + "solana-sdk 1.14.0", ] [[package]] name = "solana-ed25519-program-tests" -version = "1.11.11" +version = "1.14.0" dependencies = [ "assert_matches", "ed25519-dalek", "rand 0.7.3", "solana-program-test", - "solana-sdk 1.11.11", + "solana-sdk 1.14.0", ] [[package]] name = "solana-entry" -version = "1.11.11" +version = "1.14.0" dependencies = [ "bincode", "crossbeam-channel", @@ -5136,18 +5136,18 @@ dependencies = [ "rand 0.7.3", "rayon", "serde", - "solana-logger 1.11.11", + "solana-logger 1.14.0", "solana-measure", "solana-merkle-tree", "solana-metrics", "solana-perf", "solana-rayon-threadlimit", - "solana-sdk 1.11.11", + "solana-sdk 1.14.0", ] [[package]] name = "solana-faucet" -version = "1.11.11" +version = "1.14.0" dependencies = [ "bincode", "byteorder", @@ -5158,9 +5158,9 @@ dependencies = [ "serde_derive", "solana-clap-utils", "solana-cli-config", - "solana-logger 1.11.11", + "solana-logger 1.14.0", "solana-metrics", - "solana-sdk 1.11.11", + "solana-sdk 1.14.0", "solana-version", "spl-memo", "thiserror", @@ -5191,7 +5191,7 @@ dependencies = [ [[package]] name = "solana-frozen-abi" -version = "1.11.11" +version = "1.14.0" dependencies = [ "ahash", "blake3", @@ -5216,8 +5216,8 @@ dependencies = [ "serde_derive", "serde_json", "sha2 0.10.2", - "solana-frozen-abi-macro 1.11.11", - "solana-logger 1.11.11", + "solana-frozen-abi-macro 1.14.0", + "solana-logger 1.14.0", "subtle", "thiserror", ] @@ -5236,7 +5236,7 @@ dependencies = [ [[package]] name = "solana-frozen-abi-macro" -version = "1.11.11" +version = "1.14.0" dependencies = [ "proc-macro2 1.0.41", "quote 1.0.18", @@ -5246,7 +5246,7 @@ dependencies = [ [[package]] name = "solana-genesis" -version = "1.11.11" +version = "1.14.0" dependencies = [ "base64 0.13.0", "clap 2.33.3", @@ -5257,9 +5257,9 @@ dependencies = [ "solana-cli-config", "solana-entry", "solana-ledger", - "solana-logger 1.11.11", + "solana-logger 1.14.0", "solana-runtime", - "solana-sdk 1.11.11", + "solana-sdk 1.14.0", "solana-stake-program", "solana-version", "solana-vote-program", @@ -5268,26 +5268,26 @@ dependencies = [ [[package]] name = "solana-genesis-utils" -version = "1.11.11" +version = "1.14.0" dependencies = [ "solana-download-utils", "solana-runtime", - "solana-sdk 1.11.11", + "solana-sdk 1.14.0", ] [[package]] name = "solana-geyser-plugin-interface" -version = "1.11.11" +version = "1.14.0" dependencies = [ "log", - "solana-sdk 1.11.11", + "solana-sdk 1.14.0", "solana-transaction-status", "thiserror", ] [[package]] name = "solana-geyser-plugin-manager" -version = "1.11.11" +version = "1.14.0" dependencies = [ "bs58", "crossbeam-channel", @@ -5300,14 +5300,14 @@ dependencies = [ "solana-metrics", "solana-rpc", "solana-runtime", - "solana-sdk 1.11.11", + "solana-sdk 1.14.0", "solana-transaction-status", "thiserror", ] [[package]] name = "solana-gossip" -version = "1.11.11" +version = "1.14.0" dependencies = [ "bincode", "bv", @@ -5334,17 +5334,17 @@ dependencies = [ "solana-clap-utils", "solana-client", "solana-entry", - "solana-frozen-abi 1.11.11", - "solana-frozen-abi-macro 1.11.11", + "solana-frozen-abi 1.14.0", + "solana-frozen-abi-macro 1.14.0", "solana-ledger", - "solana-logger 1.11.11", + "solana-logger 1.14.0", "solana-measure", "solana-metrics", "solana-net-utils", "solana-perf", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.11.11", + "solana-sdk 1.14.0", "solana-streamer", "solana-version", "solana-vote-program", @@ -5353,7 +5353,7 @@ dependencies = [ [[package]] name = "solana-install" -version = "1.11.11" +version = "1.14.0" dependencies = [ "atty", "bincode", @@ -5374,8 +5374,8 @@ dependencies = [ "solana-clap-utils", "solana-client", "solana-config-program", - "solana-logger 1.11.11", - "solana-sdk 1.11.11", + "solana-logger 1.14.0", + "solana-sdk 1.14.0", "solana-version", "tar", "tempfile", @@ -5386,7 +5386,7 @@ dependencies = [ [[package]] name = "solana-keygen" -version = "1.11.11" +version = "1.14.0" dependencies = [ "bs58", "clap 3.1.8", @@ -5395,14 +5395,14 @@ dependencies = [ "solana-clap-v3-utils", "solana-cli-config", "solana-remote-wallet", - "solana-sdk 1.11.11", + "solana-sdk 1.14.0", "solana-version", "tiny-bip39", ] [[package]] name = "solana-ledger" -version = "1.11.11" +version = "1.14.0" dependencies = [ "assert_matches", "bincode", @@ -5436,16 +5436,16 @@ dependencies = [ "solana-account-decoder", "solana-bpf-loader-program", "solana-entry", - "solana-frozen-abi 1.11.11", - "solana-frozen-abi-macro 1.11.11", - "solana-logger 1.11.11", + "solana-frozen-abi 1.14.0", + "solana-frozen-abi-macro 1.14.0", + "solana-logger 1.14.0", "solana-measure", "solana-metrics", "solana-perf", "solana-program-runtime", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.11.11", + "solana-sdk 1.14.0", "solana-stake-program", "solana-storage-bigtable", "solana-storage-proto", @@ -5464,7 +5464,7 @@ dependencies = [ [[package]] name = "solana-ledger-tool" -version = "1.11.11" +version = "1.14.0" dependencies = [ "assert_cmd", "bs58", @@ -5486,10 +5486,10 @@ dependencies = [ "solana-core", "solana-entry", "solana-ledger", - "solana-logger 1.11.11", + "solana-logger 1.14.0", "solana-measure", "solana-runtime", - "solana-sdk 1.11.11", + "solana-sdk 1.14.0", "solana-stake-program", "solana-storage-bigtable", "solana-transaction-status", @@ -5501,7 +5501,7 @@ dependencies = [ [[package]] name = "solana-local-cluster" -version = "1.11.11" +version = "1.14.0" dependencies = [ "assert_matches", "crossbeam-channel", @@ -5519,9 +5519,9 @@ dependencies = [ "solana-entry", "solana-gossip", "solana-ledger", - "solana-logger 1.11.11", + "solana-logger 1.14.0", "solana-runtime", - "solana-sdk 1.11.11", + "solana-sdk 1.14.0", "solana-stake-program", "solana-streamer", "solana-vote-program", @@ -5530,13 +5530,13 @@ dependencies = [ [[package]] name = "solana-log-analyzer" -version = "1.11.11" +version = "1.14.0" dependencies = [ "byte-unit", "clap 3.1.8", "serde", "serde_json", - "solana-logger 1.11.11", + "solana-logger 1.14.0", "solana-version", ] @@ -5553,7 +5553,7 @@ dependencies = [ [[package]] name = "solana-logger" -version = "1.11.11" +version = "1.14.0" dependencies = [ "env_logger", "lazy_static", @@ -5562,38 +5562,38 @@ dependencies = [ [[package]] name = "solana-measure" -version = "1.11.11" +version = "1.14.0" dependencies = [ "log", - "solana-sdk 1.11.11", + "solana-sdk 1.14.0", ] [[package]] name = "solana-merkle-root-bench" -version = "1.11.11" +version = "1.14.0" dependencies = [ "clap 2.33.3", "log", - "solana-logger 1.11.11", + "solana-logger 1.14.0", "solana-measure", "solana-runtime", - "solana-sdk 1.11.11", + "solana-sdk 1.14.0", "solana-version", ] [[package]] name = "solana-merkle-tree" -version = "1.11.11" +version = "1.14.0" dependencies = [ "fast-math", "hex", "matches", - "solana-program 1.11.11", + "solana-program 1.14.0", ] [[package]] name = "solana-metrics" -version = "1.11.11" +version = "1.14.0" dependencies = [ "crossbeam-channel", "env_logger", @@ -5603,23 +5603,23 @@ dependencies = [ "rand 0.7.3", "reqwest", "serial_test", - "solana-sdk 1.11.11", + "solana-sdk 1.14.0", ] [[package]] name = "solana-net-shaper" -version = "1.11.11" +version = "1.14.0" dependencies = [ "clap 3.1.8", "rand 0.7.3", "serde", "serde_json", - "solana-logger 1.11.11", + "solana-logger 1.14.0", ] [[package]] name = "solana-net-utils" -version = "1.11.11" +version = "1.14.0" dependencies = [ "bincode", "clap 3.1.8", @@ -5630,8 +5630,8 @@ dependencies = [ "serde", "serde_derive", "socket2", - "solana-logger 1.11.11", - "solana-sdk 1.11.11", + "solana-logger 1.14.0", + "solana-sdk 1.14.0", "solana-version", "tokio", "url 2.2.2", @@ -5639,7 +5639,7 @@ dependencies = [ [[package]] name = "solana-notifier" -version = "1.11.11" +version = "1.14.0" dependencies = [ "log", "reqwest", @@ -5648,7 +5648,7 @@ dependencies = [ [[package]] name = "solana-perf" -version = "1.11.11" +version = "1.14.0" dependencies = [ "ahash", "bincode", @@ -5666,16 +5666,16 @@ dependencies = [ "rand 0.7.3", "rayon", "serde", - "solana-logger 1.11.11", + "solana-logger 1.14.0", "solana-metrics", "solana-rayon-threadlimit", - "solana-sdk 1.11.11", + "solana-sdk 1.14.0", "solana-vote-program", ] [[package]] name = "solana-poh" -version = "1.11.11" +version = "1.14.0" dependencies = [ "bincode", "core_affinity", @@ -5685,29 +5685,29 @@ dependencies = [ "rand 0.7.3", "solana-entry", "solana-ledger", - "solana-logger 1.11.11", + "solana-logger 1.14.0", "solana-measure", "solana-metrics", "solana-perf", "solana-runtime", - "solana-sdk 1.11.11", + "solana-sdk 1.14.0", "solana-sys-tuner", "thiserror", ] [[package]] name = "solana-poh-bench" -version = "1.11.11" +version = "1.14.0" dependencies = [ "clap 3.1.8", "log", "rand 0.7.3", "rayon", "solana-entry", - "solana-logger 1.11.11", + "solana-logger 1.14.0", "solana-measure", "solana-perf", - "solana-sdk 1.11.11", + "solana-sdk 1.14.0", "solana-version", ] @@ -5755,7 +5755,7 @@ dependencies = [ [[package]] name = "solana-program" -version = "1.11.11" +version = "1.14.0" dependencies = [ "anyhow", "assert_matches", @@ -5793,10 +5793,10 @@ dependencies = [ "serde_json", "sha2 0.10.2", "sha3 0.10.1", - "solana-frozen-abi 1.11.11", - "solana-frozen-abi-macro 1.11.11", - "solana-logger 1.11.11", - "solana-sdk-macro 1.11.11", + "solana-frozen-abi 1.14.0", + "solana-frozen-abi-macro 1.14.0", + "solana-logger 1.14.0", + "solana-sdk-macro 1.14.0", "static_assertions", "thiserror", "tiny-bip39", @@ -5806,7 +5806,7 @@ dependencies = [ [[package]] name = "solana-program-runtime" -version = "1.11.11" +version = "1.14.0" dependencies = [ "base64 0.13.0", "bincode", @@ -5820,18 +5820,18 @@ dependencies = [ "num-traits", "rustc_version 0.4.0", "serde", - "solana-frozen-abi 1.11.11", - "solana-frozen-abi-macro 1.11.11", - "solana-logger 1.11.11", + "solana-frozen-abi 1.14.0", + "solana-frozen-abi-macro 1.14.0", + "solana-logger 1.14.0", "solana-measure", "solana-metrics", - "solana-sdk 1.11.11", + "solana-sdk 1.14.0", "thiserror", ] [[package]] name = "solana-program-test" -version = "1.11.11" +version = "1.14.0" dependencies = [ "assert_matches", "async-trait", @@ -5843,10 +5843,10 @@ dependencies = [ "solana-banks-client", "solana-banks-server", "solana-bpf-loader-program", - "solana-logger 1.11.11", + "solana-logger 1.14.0", "solana-program-runtime", "solana-runtime", - "solana-sdk 1.11.11", + "solana-sdk 1.14.0", "solana-vote-program", "thiserror", "tokio", @@ -5854,7 +5854,7 @@ dependencies = [ [[package]] name = "solana-rayon-threadlimit" -version = "1.11.11" +version = "1.14.0" dependencies = [ "lazy_static", "num_cpus", @@ -5862,7 +5862,7 @@ dependencies = [ [[package]] name = "solana-remote-wallet" -version = "1.11.11" +version = "1.14.0" dependencies = [ "console", "dialoguer", @@ -5873,14 +5873,14 @@ dependencies = [ "parking_lot 0.12.1", "qstring", "semver 1.0.10", - "solana-sdk 1.11.11", + "solana-sdk 1.14.0", "thiserror", "uriparse", ] [[package]] name = "solana-rpc" -version = "1.11.11" +version = "1.14.0" dependencies = [ "base64 0.13.0", "bincode", @@ -5916,7 +5916,7 @@ dependencies = [ "solana-poh", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.11.11", + "solana-sdk 1.14.0", "solana-send-transaction-service", "solana-stake-program", "solana-storage-bigtable", @@ -5935,7 +5935,7 @@ dependencies = [ [[package]] name = "solana-rpc-test" -version = "1.11.11" +version = "1.14.0" dependencies = [ "bincode", "bs58", @@ -5947,9 +5947,9 @@ dependencies = [ "serde_json", "solana-account-decoder", "solana-client", - "solana-logger 1.11.11", + "solana-logger 1.14.0", "solana-rpc", - "solana-sdk 1.11.11", + "solana-sdk 1.14.0", "solana-streamer", "solana-test-validator", "solana-transaction-status", @@ -5958,7 +5958,7 @@ dependencies = [ [[package]] name = "solana-runtime" -version = "1.11.11" +version = "1.14.0" dependencies = [ "arrayref", "assert_matches", @@ -5998,18 +5998,18 @@ dependencies = [ "solana-bucket-map", "solana-compute-budget-program", "solana-config-program", - "solana-frozen-abi 1.11.11", - "solana-frozen-abi-macro 1.11.11", - "solana-logger 1.11.11", + "solana-frozen-abi 1.14.0", + "solana-frozen-abi-macro 1.14.0", + "solana-logger 1.14.0", "solana-measure", "solana-metrics", "solana-program-runtime", "solana-rayon-threadlimit", - "solana-sdk 1.11.11", + "solana-sdk 1.14.0", "solana-stake-program", "solana-vote-program", "solana-zk-token-proof-program", - "solana-zk-token-sdk 1.11.11", + "solana-zk-token-sdk 1.14.0", "strum", "strum_macros", "symlink", @@ -6072,7 +6072,7 @@ dependencies = [ [[package]] name = "solana-sdk" -version = "1.11.11" +version = "1.14.0" dependencies = [ "anyhow", "assert_matches", @@ -6112,11 +6112,11 @@ dependencies = [ "serde_json", "sha2 0.10.2", "sha3 0.10.1", - "solana-frozen-abi 1.11.11", - "solana-frozen-abi-macro 1.11.11", - "solana-logger 1.11.11", - "solana-program 1.11.11", - "solana-sdk-macro 1.11.11", + "solana-frozen-abi 1.14.0", + "solana-frozen-abi-macro 1.14.0", + "solana-logger 1.14.0", + "solana-program 1.14.0", + "solana-sdk-macro 1.14.0", "static_assertions", "thiserror", "tiny-bip39", @@ -6139,7 +6139,7 @@ dependencies = [ [[package]] name = "solana-sdk-macro" -version = "1.11.11" +version = "1.14.0" dependencies = [ "bs58", "proc-macro2 1.0.41", @@ -6150,21 +6150,21 @@ dependencies = [ [[package]] name = "solana-send-transaction-service" -version = "1.11.11" +version = "1.14.0" dependencies = [ "crossbeam-channel", "log", "solana-client", - "solana-logger 1.11.11", + "solana-logger 1.14.0", "solana-measure", "solana-metrics", "solana-runtime", - "solana-sdk 1.11.11", + "solana-sdk 1.14.0", ] [[package]] name = "solana-stake-accounts" -version = "1.11.11" +version = "1.14.0" dependencies = [ "clap 2.33.3", "solana-clap-utils", @@ -6172,13 +6172,13 @@ dependencies = [ "solana-client", "solana-remote-wallet", "solana-runtime", - "solana-sdk 1.11.11", + "solana-sdk 1.14.0", "solana-stake-program", ] [[package]] name = "solana-stake-program" -version = "1.11.11" +version = "1.14.0" dependencies = [ "assert_matches", "bincode", @@ -6190,12 +6190,12 @@ dependencies = [ "serde", "serde_derive", "solana-config-program", - "solana-frozen-abi 1.11.11", - "solana-frozen-abi-macro 1.11.11", - "solana-logger 1.11.11", + "solana-frozen-abi 1.14.0", + "solana-frozen-abi-macro 1.14.0", + "solana-logger 1.14.0", "solana-metrics", "solana-program-runtime", - "solana-sdk 1.11.11", + "solana-sdk 1.14.0", "solana-vote-program", "test-case", "thiserror", @@ -6203,7 +6203,7 @@ dependencies = [ [[package]] name = "solana-storage-bigtable" -version = "1.11.11" +version = "1.14.0" dependencies = [ "backoff", "bincode", @@ -6224,7 +6224,7 @@ dependencies = [ "serde_derive", "smpl_jwt", "solana-metrics", - "solana-sdk 1.11.11", + "solana-sdk 1.14.0", "solana-storage-proto", "solana-transaction-status", "thiserror", @@ -6235,7 +6235,7 @@ dependencies = [ [[package]] name = "solana-storage-proto" -version = "1.11.11" +version = "1.14.0" dependencies = [ "bincode", "bs58", @@ -6244,25 +6244,25 @@ dependencies = [ "protobuf-src", "serde", "solana-account-decoder", - "solana-sdk 1.11.11", + "solana-sdk 1.14.0", "solana-transaction-status", "tonic-build 0.8.0", ] [[package]] name = "solana-store-tool" -version = "1.11.11" +version = "1.14.0" dependencies = [ "clap 2.33.3", "log", - "solana-logger 1.11.11", + "solana-logger 1.14.0", "solana-runtime", "solana-version", ] [[package]] name = "solana-streamer" -version = "1.11.11" +version = "1.14.0" dependencies = [ "crossbeam-channel", "futures-util", @@ -6279,10 +6279,10 @@ dependencies = [ "rand 0.7.3", "rcgen", "rustls 0.20.6", - "solana-logger 1.11.11", + "solana-logger 1.14.0", "solana-metrics", "solana-perf", - "solana-sdk 1.11.11", + "solana-sdk 1.14.0", "thiserror", "tokio", "x509-parser", @@ -6290,13 +6290,13 @@ dependencies = [ [[package]] name = "solana-sys-tuner" -version = "1.11.11" +version = "1.14.0" dependencies = [ "clap 2.33.3", "libc", "log", "nix", - "solana-logger 1.11.11", + "solana-logger 1.14.0", "solana-version", "sysctl", "unix_socket2", @@ -6305,7 +6305,7 @@ dependencies = [ [[package]] name = "solana-test-validator" -version = "1.11.11" +version = "1.14.0" dependencies = [ "base64 0.13.0", "log", @@ -6316,20 +6316,20 @@ dependencies = [ "solana-core", "solana-gossip", "solana-ledger", - "solana-logger 1.11.11", + "solana-logger 1.14.0", "solana-net-utils", "solana-program-runtime", "solana-program-test", "solana-rpc", "solana-runtime", - "solana-sdk 1.11.11", + "solana-sdk 1.14.0", "solana-streamer", "tokio", ] [[package]] name = "solana-tokens" -version = "1.11.11" +version = "1.14.0" dependencies = [ "bincode", "chrono", @@ -6345,9 +6345,9 @@ dependencies = [ "solana-clap-utils", "solana-cli-config", "solana-client", - "solana-logger 1.11.11", + "solana-logger 1.14.0", "solana-remote-wallet", - "solana-sdk 1.11.11", + "solana-sdk 1.14.0", "solana-streamer", "solana-test-validator", "solana-transaction-status", @@ -6360,7 +6360,7 @@ dependencies = [ [[package]] name = "solana-transaction-dos" -version = "1.11.11" +version = "1.14.0" dependencies = [ "bincode", "clap 2.33.3", @@ -6374,11 +6374,11 @@ dependencies = [ "solana-faucet", "solana-gossip", "solana-local-cluster", - "solana-logger 1.11.11", + "solana-logger 1.14.0", "solana-measure", "solana-net-utils", "solana-runtime", - "solana-sdk 1.11.11", + "solana-sdk 1.14.0", "solana-streamer", "solana-transaction-status", "solana-version", @@ -6386,7 +6386,7 @@ dependencies = [ [[package]] name = "solana-transaction-status" -version = "1.11.11" +version = "1.14.0" dependencies = [ "Inflector", "base64 0.13.0", @@ -6401,7 +6401,7 @@ dependencies = [ "solana-account-decoder", "solana-measure", "solana-metrics", - "solana-sdk 1.11.11", + "solana-sdk 1.14.0", "solana-vote-program", "spl-associated-token-account", "spl-memo", @@ -6412,7 +6412,7 @@ dependencies = [ [[package]] name = "solana-upload-perf" -version = "1.11.11" +version = "1.14.0" dependencies = [ "serde_json", "solana-metrics", @@ -6420,7 +6420,7 @@ dependencies = [ [[package]] name = "solana-validator" -version = "1.11.11" +version = "1.14.0" dependencies = [ "chrono", "clap 2.33.3", @@ -6451,14 +6451,14 @@ dependencies = [ "solana-genesis-utils", "solana-gossip", "solana-ledger", - "solana-logger 1.11.11", + "solana-logger 1.14.0", "solana-metrics", "solana-net-utils", "solana-perf", "solana-poh", "solana-rpc", "solana-runtime", - "solana-sdk 1.11.11", + "solana-sdk 1.14.0", "solana-send-transaction-service", "solana-storage-bigtable", "solana-streamer", @@ -6471,21 +6471,21 @@ dependencies = [ [[package]] name = "solana-version" -version = "1.11.11" +version = "1.14.0" dependencies = [ "log", "rustc_version 0.4.0", "semver 1.0.10", "serde", "serde_derive", - "solana-frozen-abi 1.11.11", - "solana-frozen-abi-macro 1.11.11", - "solana-sdk 1.11.11", + "solana-frozen-abi 1.14.0", + "solana-frozen-abi-macro 1.14.0", + "solana-sdk 1.14.0", ] [[package]] name = "solana-vote-program" -version = "1.11.11" +version = "1.14.0" dependencies = [ "bincode", "itertools", @@ -6496,18 +6496,18 @@ dependencies = [ "rustc_version 0.4.0", "serde", "serde_derive", - "solana-frozen-abi 1.11.11", - "solana-frozen-abi-macro 1.11.11", - "solana-logger 1.11.11", + "solana-frozen-abi 1.14.0", + "solana-frozen-abi-macro 1.14.0", + "solana-logger 1.14.0", "solana-metrics", "solana-program-runtime", - "solana-sdk 1.11.11", + "solana-sdk 1.14.0", "thiserror", ] [[package]] name = "solana-watchtower" -version = "1.11.11" +version = "1.14.0" dependencies = [ "clap 2.33.3", "humantime", @@ -6516,24 +6516,24 @@ dependencies = [ "solana-cli-config", "solana-cli-output", "solana-client", - "solana-logger 1.11.11", + "solana-logger 1.14.0", "solana-metrics", "solana-notifier", - "solana-sdk 1.11.11", + "solana-sdk 1.14.0", "solana-version", ] [[package]] name = "solana-zk-token-proof-program" -version = "1.11.11" +version = "1.14.0" dependencies = [ "bytemuck", "getrandom 0.1.16", "num-derive", "num-traits", "solana-program-runtime", - "solana-sdk 1.11.11", - "solana-zk-token-sdk 1.11.11", + "solana-sdk 1.14.0", + "solana-zk-token-sdk 1.14.0", ] [[package]] @@ -6568,7 +6568,7 @@ dependencies = [ [[package]] name = "solana-zk-token-sdk" -version = "1.11.11" +version = "1.14.0" dependencies = [ "aes-gcm-siv", "arrayref", @@ -6588,8 +6588,8 @@ dependencies = [ "serde", "serde_json", "sha3 0.9.1", - "solana-program 1.11.11", - "solana-sdk 1.11.11", + "solana-program 1.14.0", + "solana-sdk 1.14.0", "subtle", "thiserror", "zeroize", diff --git a/account-decoder/Cargo.toml b/account-decoder/Cargo.toml index c5739c9ef1013a..3f5230901afe87 100644 --- a/account-decoder/Cargo.toml +++ b/account-decoder/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-account-decoder" -version = "1.11.11" +version = "1.14.0" description = "Solana account decoder" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -19,9 +19,9 @@ lazy_static = "1.4.0" serde = "1.0.138" serde_derive = "1.0.103" serde_json = "1.0.81" -solana-config-program = { path = "../programs/config", version = "=1.11.11" } -solana-sdk = { path = "../sdk", version = "=1.11.11" } -solana-vote-program = { path = "../programs/vote", version = "=1.11.11" } +solana-config-program = { path = "../programs/config", version = "=1.14.0" } +solana-sdk = { path = "../sdk", version = "=1.14.0" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.0" } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } spl-token-2022 = { version = "=0.4.2", features = ["no-entrypoint"] } thiserror = "1.0" diff --git a/accounts-bench/Cargo.toml b/accounts-bench/Cargo.toml index fb6eabca514be7..f626ce55534f5a 100644 --- a/accounts-bench/Cargo.toml +++ b/accounts-bench/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-accounts-bench" -version = "1.11.11" +version = "1.14.0" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -12,11 +12,11 @@ publish = false clap = "2.33.1" log = "0.4.17" rayon = "1.5.3" -solana-logger = { path = "../logger", version = "=1.11.11" } -solana-measure = { path = "../measure", version = "=1.11.11" } -solana-runtime = { path = "../runtime", version = "=1.11.11" } -solana-sdk = { path = "../sdk", version = "=1.11.11" } -solana-version = { path = "../version", version = "=1.11.11" } +solana-logger = { path = "../logger", version = "=1.14.0" } +solana-measure = { path = "../measure", version = "=1.14.0" } +solana-runtime = { path = "../runtime", version = "=1.14.0" } +solana-sdk = { path = "../sdk", version = "=1.14.0" } +solana-version = { path = "../version", version = "=1.14.0" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/accounts-cluster-bench/Cargo.toml b/accounts-cluster-bench/Cargo.toml index 2862f484c72662..ea021ca3f81307 100644 --- a/accounts-cluster-bench/Cargo.toml +++ b/accounts-cluster-bench/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-accounts-cluster-bench" -version = "1.11.11" +version = "1.14.0" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -13,25 +13,25 @@ clap = "2.33.1" log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" -solana-account-decoder = { path = "../account-decoder", version = "=1.11.11" } -solana-clap-utils = { path = "../clap-utils", version = "=1.11.11" } -solana-client = { path = "../client", version = "=1.11.11" } -solana-faucet = { path = "../faucet", version = "=1.11.11" } -solana-gossip = { path = "../gossip", version = "=1.11.11" } -solana-logger = { path = "../logger", version = "=1.11.11" } -solana-measure = { path = "../measure", version = "=1.11.11" } -solana-net-utils = { path = "../net-utils", version = "=1.11.11" } -solana-runtime = { path = "../runtime", version = "=1.11.11" } -solana-sdk = { path = "../sdk", version = "=1.11.11" } -solana-streamer = { path = "../streamer", version = "=1.11.11" } -solana-transaction-status = { path = "../transaction-status", version = "=1.11.11" } -solana-version = { path = "../version", version = "=1.11.11" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.0" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.0" } +solana-client = { path = "../client", version = "=1.14.0" } +solana-faucet = { path = "../faucet", version = "=1.14.0" } +solana-gossip = { path = "../gossip", version = "=1.14.0" } +solana-logger = { path = "../logger", version = "=1.14.0" } +solana-measure = { path = "../measure", version = "=1.14.0" } +solana-net-utils = { path = "../net-utils", version = "=1.14.0" } +solana-runtime = { path = "../runtime", version = "=1.14.0" } +solana-sdk = { path = "../sdk", version = "=1.14.0" } +solana-streamer = { path = "../streamer", version = "=1.14.0" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.0" } +solana-version = { path = "../version", version = "=1.14.0" } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } [dev-dependencies] -solana-core = { path = "../core", version = "=1.11.11" } -solana-local-cluster = { path = "../local-cluster", version = "=1.11.11" } -solana-test-validator = { path = "../test-validator", version = "=1.11.11" } +solana-core = { path = "../core", version = "=1.14.0" } +solana-local-cluster = { path = "../local-cluster", version = "=1.14.0" } +solana-test-validator = { path = "../test-validator", version = "=1.14.0" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/banking-bench/Cargo.toml b/banking-bench/Cargo.toml index 0c02b4066d9745..6b05cf09085b70 100644 --- a/banking-bench/Cargo.toml +++ b/banking-bench/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-banking-bench" -version = "1.11.11" +version = "1.14.0" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,18 +14,18 @@ crossbeam-channel = "0.5" log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" -solana-client = { path = "../client", version = "=1.11.11" } -solana-core = { path = "../core", version = "=1.11.11" } -solana-gossip = { path = "../gossip", version = "=1.11.11" } -solana-ledger = { path = "../ledger", version = "=1.11.11" } -solana-logger = { path = "../logger", version = "=1.11.11" } -solana-measure = { path = "../measure", version = "=1.11.11" } -solana-perf = { path = "../perf", version = "=1.11.11" } -solana-poh = { path = "../poh", version = "=1.11.11" } -solana-runtime = { path = "../runtime", version = "=1.11.11" } -solana-sdk = { path = "../sdk", version = "=1.11.11" } -solana-streamer = { path = "../streamer", version = "=1.11.11" } -solana-version = { path = "../version", version = "=1.11.11" } +solana-client = { path = "../client", version = "=1.14.0" } +solana-core = { path = "../core", version = "=1.14.0" } +solana-gossip = { path = "../gossip", version = "=1.14.0" } +solana-ledger = { path = "../ledger", version = "=1.14.0" } +solana-logger = { path = "../logger", version = "=1.14.0" } +solana-measure = { path = "../measure", version = "=1.14.0" } +solana-perf = { path = "../perf", version = "=1.14.0" } +solana-poh = { path = "../poh", version = "=1.14.0" } +solana-runtime = { path = "../runtime", version = "=1.14.0" } +solana-sdk = { path = "../sdk", version = "=1.14.0" } +solana-streamer = { path = "../streamer", version = "=1.14.0" } +solana-version = { path = "../version", version = "=1.14.0" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/banks-client/Cargo.toml b/banks-client/Cargo.toml index 7cfa66a360fed7..891d0994897415 100644 --- a/banks-client/Cargo.toml +++ b/banks-client/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-banks-client" -version = "1.11.11" +version = "1.14.0" description = "Solana banks client" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,17 +12,17 @@ edition = "2021" [dependencies] borsh = "0.9.3" futures = "0.3" -solana-banks-interface = { path = "../banks-interface", version = "=1.11.11" } -solana-program = { path = "../sdk/program", version = "=1.11.11" } -solana-sdk = { path = "../sdk", version = "=1.11.11" } +solana-banks-interface = { path = "../banks-interface", version = "=1.14.0" } +solana-program = { path = "../sdk/program", version = "=1.14.0" } +solana-sdk = { path = "../sdk", version = "=1.14.0" } tarpc = { version = "0.29.0", features = ["full"] } thiserror = "1.0" tokio = { version = "~1.14.1", features = ["full"] } tokio-serde = { version = "0.8", features = ["bincode"] } [dev-dependencies] -solana-banks-server = { path = "../banks-server", version = "=1.11.11" } -solana-runtime = { path = "../runtime", version = "=1.11.11" } +solana-banks-server = { path = "../banks-server", version = "=1.14.0" } +solana-runtime = { path = "../runtime", version = "=1.14.0" } [lib] crate-type = ["lib"] diff --git a/banks-interface/Cargo.toml b/banks-interface/Cargo.toml index 78681df9b269b9..1f1386dd5bf6e3 100644 --- a/banks-interface/Cargo.toml +++ b/banks-interface/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-banks-interface" -version = "1.11.11" +version = "1.14.0" description = "Solana banks RPC interface" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -11,7 +11,7 @@ edition = "2021" [dependencies] serde = { version = "1.0.138", features = ["derive"] } -solana-sdk = { path = "../sdk", version = "=1.11.11" } +solana-sdk = { path = "../sdk", version = "=1.14.0" } tarpc = { version = "0.29.0", features = ["full"] } [lib] diff --git a/banks-server/Cargo.toml b/banks-server/Cargo.toml index 1ced66cbc522e3..d809784d9b7d48 100644 --- a/banks-server/Cargo.toml +++ b/banks-server/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-banks-server" -version = "1.11.11" +version = "1.14.0" description = "Solana banks server" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,11 +13,11 @@ edition = "2021" bincode = "1.3.3" crossbeam-channel = "0.5" futures = "0.3" -solana-banks-interface = { path = "../banks-interface", version = "=1.11.11" } -solana-client = { path = "../client", version = "=1.11.11" } -solana-runtime = { path = "../runtime", version = "=1.11.11" } -solana-sdk = { path = "../sdk", version = "=1.11.11" } -solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.11.11" } +solana-banks-interface = { path = "../banks-interface", version = "=1.14.0" } +solana-client = { path = "../client", version = "=1.14.0" } +solana-runtime = { path = "../runtime", version = "=1.14.0" } +solana-sdk = { path = "../sdk", version = "=1.14.0" } +solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.0" } tarpc = { version = "0.29.0", features = ["full"] } tokio = { version = "1", features = ["full"] } tokio-serde = { version = "0.8", features = ["bincode"] } diff --git a/bench-streamer/Cargo.toml b/bench-streamer/Cargo.toml index 005982d747a3ef..950390665cba1a 100644 --- a/bench-streamer/Cargo.toml +++ b/bench-streamer/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-bench-streamer" -version = "1.11.11" +version = "1.14.0" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -11,9 +11,9 @@ publish = false [dependencies] clap = { version = "3.1.5", features = ["cargo"] } crossbeam-channel = "0.5" -solana-net-utils = { path = "../net-utils", version = "=1.11.11" } -solana-streamer = { path = "../streamer", version = "=1.11.11" } -solana-version = { path = "../version", version = "=1.11.11" } +solana-net-utils = { path = "../net-utils", version = "=1.14.0" } +solana-streamer = { path = "../streamer", version = "=1.14.0" } +solana-version = { path = "../version", version = "=1.14.0" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/bench-tps/Cargo.toml b/bench-tps/Cargo.toml index 681594f08b3979..9d8eda21e57ff7 100644 --- a/bench-tps/Cargo.toml +++ b/bench-tps/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-bench-tps" -version = "1.11.11" +version = "1.14.0" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -15,28 +15,28 @@ log = "0.4.17" rayon = "1.5.3" serde_json = "1.0.81" serde_yaml = "0.8.26" -solana-clap-utils = { path = "../clap-utils", version = "=1.11.11" } -solana-cli-config = { path = "../cli-config", version = "=1.11.11" } -solana-client = { path = "../client", version = "=1.11.11" } -solana-core = { path = "../core", version = "=1.11.11" } -solana-faucet = { path = "../faucet", version = "=1.11.11" } -solana-genesis = { path = "../genesis", version = "=1.11.11" } -solana-gossip = { path = "../gossip", version = "=1.11.11" } -solana-logger = { path = "../logger", version = "=1.11.11" } -solana-measure = { path = "../measure", version = "=1.11.11" } -solana-metrics = { path = "../metrics", version = "=1.11.11" } -solana-net-utils = { path = "../net-utils", version = "=1.11.11" } -solana-rpc = { path = "../rpc", version = "=1.11.11" } -solana-runtime = { path = "../runtime", version = "=1.11.11" } -solana-sdk = { path = "../sdk", version = "=1.11.11" } -solana-streamer = { path = "../streamer", version = "=1.11.11" } -solana-version = { path = "../version", version = "=1.11.11" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.0" } +solana-cli-config = { path = "../cli-config", version = "=1.14.0" } +solana-client = { path = "../client", version = "=1.14.0" } +solana-core = { path = "../core", version = "=1.14.0" } +solana-faucet = { path = "../faucet", version = "=1.14.0" } +solana-genesis = { path = "../genesis", version = "=1.14.0" } +solana-gossip = { path = "../gossip", version = "=1.14.0" } +solana-logger = { path = "../logger", version = "=1.14.0" } +solana-measure = { path = "../measure", version = "=1.14.0" } +solana-metrics = { path = "../metrics", version = "=1.14.0" } +solana-net-utils = { path = "../net-utils", version = "=1.14.0" } +solana-rpc = { path = "../rpc", version = "=1.14.0" } +solana-runtime = { path = "../runtime", version = "=1.14.0" } +solana-sdk = { path = "../sdk", version = "=1.14.0" } +solana-streamer = { path = "../streamer", version = "=1.14.0" } +solana-version = { path = "../version", version = "=1.14.0" } thiserror = "1.0" [dev-dependencies] serial_test = "0.8.0" -solana-local-cluster = { path = "../local-cluster", version = "=1.11.11" } -solana-test-validator = { path = "../test-validator", version = "=1.11.11" } +solana-local-cluster = { path = "../local-cluster", version = "=1.14.0" } +solana-test-validator = { path = "../test-validator", version = "=1.14.0" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/bloom/Cargo.toml b/bloom/Cargo.toml index c4e40ae9a21d96..1ec07b406da797 100644 --- a/bloom/Cargo.toml +++ b/bloom/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bloom" -version = "1.11.11" +version = "1.14.0" description = "Solana bloom filter" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -17,9 +17,9 @@ rand = "0.7.0" rayon = "1.5.3" serde = { version = "1.0.138", features = ["rc"] } serde_derive = "1.0.103" -solana-frozen-abi = { path = "../frozen-abi", version = "=1.11.11" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.11.11" } -solana-sdk = { path = "../sdk", version = "=1.11.11" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.0" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.0" } +solana-sdk = { path = "../sdk", version = "=1.14.0" } [lib] crate-type = ["lib"] diff --git a/bucket_map/Cargo.toml b/bucket_map/Cargo.toml index 91eed2680896cb..1d35d523e4d2e0 100644 --- a/bucket_map/Cargo.toml +++ b/bucket_map/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bucket-map" -version = "1.11.11" +version = "1.14.0" description = "solana-bucket-map" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-bucket-map" @@ -15,14 +15,14 @@ log = { version = "0.4.17" } memmap2 = "0.5.3" modular-bitfield = "0.11.2" rand = "0.7.0" -solana-measure = { path = "../measure", version = "=1.11.11" } -solana-sdk = { path = "../sdk", version = "=1.11.11" } +solana-measure = { path = "../measure", version = "=1.14.0" } +solana-sdk = { path = "../sdk", version = "=1.14.0" } tempfile = "3.3.0" [dev-dependencies] fs_extra = "1.2.0" rayon = "1.5.3" -solana-logger = { path = "../logger", version = "=1.11.11" } +solana-logger = { path = "../logger", version = "=1.14.0" } [lib] crate-type = ["lib"] diff --git a/clap-utils/Cargo.toml b/clap-utils/Cargo.toml index 9b9dba7ca8d11b..2b06bce6e717e5 100644 --- a/clap-utils/Cargo.toml +++ b/clap-utils/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-clap-utils" -version = "1.11.11" +version = "1.14.0" description = "Solana utilities for the clap" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,9 +13,9 @@ edition = "2021" chrono = "0.4" clap = "2.33.0" rpassword = "6.0" -solana-perf = { path = "../perf", version = "=1.11.11" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.11.11", default-features = false } -solana-sdk = { path = "../sdk", version = "=1.11.11" } +solana-perf = { path = "../perf", version = "=1.14.0" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.0", default-features = false } +solana-sdk = { path = "../sdk", version = "=1.14.0" } thiserror = "1.0.31" tiny-bip39 = "0.8.2" uriparse = "0.6.4" diff --git a/clap-v3-utils/Cargo.toml b/clap-v3-utils/Cargo.toml index 2fb0afcc2fbca8..76199a85d2634c 100644 --- a/clap-v3-utils/Cargo.toml +++ b/clap-v3-utils/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-clap-v3-utils" -version = "1.11.11" +version = "1.14.0" description = "Solana utilities for the clap v3" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,9 +13,9 @@ edition = "2021" chrono = "0.4" clap = { version = "3.1.5", features = ["cargo"] } rpassword = "6.0" -solana-perf = { path = "../perf", version = "=1.11.11" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.11.11", default-features = false } -solana-sdk = { path = "../sdk", version = "=1.11.11" } +solana-perf = { path = "../perf", version = "=1.14.0" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.0", default-features = false } +solana-sdk = { path = "../sdk", version = "=1.14.0" } thiserror = "1.0.31" tiny-bip39 = "0.8.2" uriparse = "0.6.4" diff --git a/cli-config/Cargo.toml b/cli-config/Cargo.toml index dc4f30aa3ad9ce..73b45d968d2faa 100644 --- a/cli-config/Cargo.toml +++ b/cli-config/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-cli-config" description = "Blockchain, Rebuilt for Scale" -version = "1.11.11" +version = "1.14.0" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -15,8 +15,8 @@ lazy_static = "1.4.0" serde = "1.0.138" serde_derive = "1.0.103" serde_yaml = "0.8.26" -solana-clap-utils = { path = "../clap-utils", version = "=1.11.11" } -solana-sdk = { path = "../sdk", version = "=1.11.11" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.0" } +solana-sdk = { path = "../sdk", version = "=1.14.0" } url = "2.2.2" [dev-dependencies] diff --git a/cli-output/Cargo.toml b/cli-output/Cargo.toml index ff6de8e81bbb75..6dd19ef3285d20 100644 --- a/cli-output/Cargo.toml +++ b/cli-output/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-cli-output" description = "Blockchain, Rebuilt for Scale" -version = "1.11.11" +version = "1.14.0" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -21,13 +21,13 @@ pretty-hex = "0.3.0" semver = "1.0.10" serde = "1.0.138" serde_json = "1.0.81" -solana-account-decoder = { path = "../account-decoder", version = "=1.11.11" } -solana-clap-utils = { path = "../clap-utils", version = "=1.11.11" } -solana-cli-config = { path = "../cli-config", version = "=1.11.11" } -solana-client = { path = "../client", version = "=1.11.11" } -solana-sdk = { path = "../sdk", version = "=1.11.11" } -solana-transaction-status = { path = "../transaction-status", version = "=1.11.11" } -solana-vote-program = { path = "../programs/vote", version = "=1.11.11" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.0" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.0" } +solana-cli-config = { path = "../cli-config", version = "=1.14.0" } +solana-client = { path = "../client", version = "=1.14.0" } +solana-sdk = { path = "../sdk", version = "=1.14.0" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.0" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.0" } spl-memo = { version = "=3.0.1", features = ["no-entrypoint"] } [dev-dependencies] diff --git a/cli/Cargo.toml b/cli/Cargo.toml index ff3179a6a667a6..798bf935f02e20 100644 --- a/cli/Cargo.toml +++ b/cli/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-cli" description = "Blockchain, Rebuilt for Scale" -version = "1.11.11" +version = "1.14.0" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -27,29 +27,29 @@ semver = "1.0.10" serde = "1.0.138" serde_derive = "1.0.103" serde_json = "1.0.81" -solana-account-decoder = { path = "../account-decoder", version = "=1.11.11" } -solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.11.11" } -solana-clap-utils = { path = "../clap-utils", version = "=1.11.11" } -solana-cli-config = { path = "../cli-config", version = "=1.11.11" } -solana-cli-output = { path = "../cli-output", version = "=1.11.11" } -solana-client = { path = "../client", version = "=1.11.11" } -solana-config-program = { path = "../programs/config", version = "=1.11.11" } -solana-faucet = { path = "../faucet", version = "=1.11.11" } -solana-logger = { path = "../logger", version = "=1.11.11" } -solana-program-runtime = { path = "../program-runtime", version = "=1.11.11" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.11.11" } -solana-sdk = { path = "../sdk", version = "=1.11.11" } -solana-transaction-status = { path = "../transaction-status", version = "=1.11.11" } -solana-version = { path = "../version", version = "=1.11.11" } -solana-vote-program = { path = "../programs/vote", version = "=1.11.11" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.0" } +solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.0" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.0" } +solana-cli-config = { path = "../cli-config", version = "=1.14.0" } +solana-cli-output = { path = "../cli-output", version = "=1.14.0" } +solana-client = { path = "../client", version = "=1.14.0" } +solana-config-program = { path = "../programs/config", version = "=1.14.0" } +solana-faucet = { path = "../faucet", version = "=1.14.0" } +solana-logger = { path = "../logger", version = "=1.14.0" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.0" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.0" } +solana-sdk = { path = "../sdk", version = "=1.14.0" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.0" } +solana-version = { path = "../version", version = "=1.14.0" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.0" } solana_rbpf = "=0.2.31" spl-memo = { version = "=3.0.1", features = ["no-entrypoint"] } thiserror = "1.0.31" tiny-bip39 = "0.8.2" [dev-dependencies] -solana-streamer = { path = "../streamer", version = "=1.11.11" } -solana-test-validator = { path = "../test-validator", version = "=1.11.11" } +solana-streamer = { path = "../streamer", version = "=1.14.0" } +solana-test-validator = { path = "../test-validator", version = "=1.14.0" } tempfile = "3.3.0" [[bin]] diff --git a/client-test/Cargo.toml b/client-test/Cargo.toml index bb6d79a2387c33..e59f1fc0f83f17 100644 --- a/client-test/Cargo.toml +++ b/client-test/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-client-test" -version = "1.11.11" +version = "1.14.0" description = "Solana RPC Test" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,25 +14,25 @@ publish = false futures-util = "0.3.21" serde_json = "1.0.81" serial_test = "0.8.0" -solana-client = { path = "../client", version = "=1.11.11" } -solana-ledger = { path = "../ledger", version = "=1.11.11" } -solana-measure = { path = "../measure", version = "=1.11.11" } -solana-merkle-tree = { path = "../merkle-tree", version = "=1.11.11" } -solana-metrics = { path = "../metrics", version = "=1.11.11" } -solana-perf = { path = "../perf", version = "=1.11.11" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.11.11" } -solana-rpc = { path = "../rpc", version = "=1.11.11" } -solana-runtime = { path = "../runtime", version = "=1.11.11" } -solana-sdk = { path = "../sdk", version = "=1.11.11" } -solana-streamer = { path = "../streamer", version = "=1.11.11" } -solana-test-validator = { path = "../test-validator", version = "=1.11.11" } -solana-transaction-status = { path = "../transaction-status", version = "=1.11.11" } -solana-version = { path = "../version", version = "=1.11.11" } +solana-client = { path = "../client", version = "=1.14.0" } +solana-ledger = { path = "../ledger", version = "=1.14.0" } +solana-measure = { path = "../measure", version = "=1.14.0" } +solana-merkle-tree = { path = "../merkle-tree", version = "=1.14.0" } +solana-metrics = { path = "../metrics", version = "=1.14.0" } +solana-perf = { path = "../perf", version = "=1.14.0" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.0" } +solana-rpc = { path = "../rpc", version = "=1.14.0" } +solana-runtime = { path = "../runtime", version = "=1.14.0" } +solana-sdk = { path = "../sdk", version = "=1.14.0" } +solana-streamer = { path = "../streamer", version = "=1.14.0" } +solana-test-validator = { path = "../test-validator", version = "=1.14.0" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.0" } +solana-version = { path = "../version", version = "=1.14.0" } systemstat = "0.1.11" tokio = { version = "~1.14.1", features = ["full"] } [dev-dependencies] -solana-logger = { path = "../logger", version = "=1.11.11" } +solana-logger = { path = "../logger", version = "=1.14.0" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/client/Cargo.toml b/client/Cargo.toml index 5e227d7ea683a1..98052c4bd759c2 100644 --- a/client/Cargo.toml +++ b/client/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-client" -version = "1.11.11" +version = "1.14.0" description = "Solana Client" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -38,17 +38,17 @@ semver = "1.0.10" serde = "1.0.138" serde_derive = "1.0.103" serde_json = "1.0.81" -solana-account-decoder = { path = "../account-decoder", version = "=1.11.11" } -solana-clap-utils = { path = "../clap-utils", version = "=1.11.11" } -solana-faucet = { path = "../faucet", version = "=1.11.11" } -solana-measure = { path = "../measure", version = "=1.11.11" } -solana-metrics = { path = "../metrics", version = "=1.11.11" } -solana-net-utils = { path = "../net-utils", version = "=1.11.11" } -solana-sdk = { path = "../sdk", version = "=1.11.11" } -solana-streamer = { path = "../streamer", version = "=1.11.11" } -solana-transaction-status = { path = "../transaction-status", version = "=1.11.11" } -solana-version = { path = "../version", version = "=1.11.11" } -solana-vote-program = { path = "../programs/vote", version = "=1.11.11" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.0" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.0" } +solana-faucet = { path = "../faucet", version = "=1.14.0" } +solana-measure = { path = "../measure", version = "=1.14.0" } +solana-metrics = { path = "../metrics", version = "=1.14.0" } +solana-net-utils = { path = "../net-utils", version = "=1.14.0" } +solana-sdk = { path = "../sdk", version = "=1.14.0" } +solana-streamer = { path = "../streamer", version = "=1.14.0" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.0" } +solana-version = { path = "../version", version = "=1.14.0" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.0" } spl-token-2022 = { version = "=0.4.2", features = ["no-entrypoint"] } thiserror = "1.0" tokio = { version = "1", features = ["full"] } @@ -61,8 +61,8 @@ url = "2.2.2" anyhow = "1.0.58" assert_matches = "1.5.0" jsonrpc-http-server = "18.0.0" -solana-logger = { path = "../logger", version = "=1.11.11" } -solana-perf = { path = "../perf", version = "=1.11.11" } +solana-logger = { path = "../logger", version = "=1.14.0" } +solana-perf = { path = "../perf", version = "=1.14.0" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/core/Cargo.toml b/core/Cargo.toml index 6bae68440cb3fe..1df6c21fc44d53 100644 --- a/core/Cargo.toml +++ b/core/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "solana-core" description = "Blockchain, Rebuilt for Scale" -version = "1.11.11" +version = "1.14.0" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-core" readme = "../README.md" @@ -35,30 +35,30 @@ rand_chacha = "0.2.2" rayon = "1.5.3" serde = "1.0.138" serde_derive = "1.0.103" -solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.11.11" } -solana-bloom = { path = "../bloom", version = "=1.11.11" } -solana-client = { path = "../client", version = "=1.11.11" } -solana-entry = { path = "../entry", version = "=1.11.11" } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.11.11" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.11.11" } -solana-geyser-plugin-manager = { path = "../geyser-plugin-manager", version = "=1.11.11" } -solana-gossip = { path = "../gossip", version = "=1.11.11" } -solana-ledger = { path = "../ledger", version = "=1.11.11" } -solana-measure = { path = "../measure", version = "=1.11.11" } -solana-metrics = { path = "../metrics", version = "=1.11.11" } -solana-net-utils = { path = "../net-utils", version = "=1.11.11" } -solana-perf = { path = "../perf", version = "=1.11.11" } -solana-poh = { path = "../poh", version = "=1.11.11" } -solana-program-runtime = { path = "../program-runtime", version = "=1.11.11" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.11.11" } -solana-rpc = { path = "../rpc", version = "=1.11.11" } -solana-runtime = { path = "../runtime", version = "=1.11.11" } -solana-sdk = { path = "../sdk", version = "=1.11.11" } -solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.11.11" } -solana-streamer = { path = "../streamer", version = "=1.11.11" } -solana-transaction-status = { path = "../transaction-status", version = "=1.11.11" } -solana-version = { path = "../version", version = "=1.11.11" } -solana-vote-program = { path = "../programs/vote", version = "=1.11.11" } +solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.0" } +solana-bloom = { path = "../bloom", version = "=1.14.0" } +solana-client = { path = "../client", version = "=1.14.0" } +solana-entry = { path = "../entry", version = "=1.14.0" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.0" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.0" } +solana-geyser-plugin-manager = { path = "../geyser-plugin-manager", version = "=1.14.0" } +solana-gossip = { path = "../gossip", version = "=1.14.0" } +solana-ledger = { path = "../ledger", version = "=1.14.0" } +solana-measure = { path = "../measure", version = "=1.14.0" } +solana-metrics = { path = "../metrics", version = "=1.14.0" } +solana-net-utils = { path = "../net-utils", version = "=1.14.0" } +solana-perf = { path = "../perf", version = "=1.14.0" } +solana-poh = { path = "../poh", version = "=1.14.0" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.0" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.0" } +solana-rpc = { path = "../rpc", version = "=1.14.0" } +solana-runtime = { path = "../runtime", version = "=1.14.0" } +solana-sdk = { path = "../sdk", version = "=1.14.0" } +solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.0" } +solana-streamer = { path = "../streamer", version = "=1.14.0" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.0" } +solana-version = { path = "../version", version = "=1.14.0" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.0" } sys-info = "0.9.1" tempfile = "3.3.0" thiserror = "1.0" @@ -70,9 +70,9 @@ matches = "0.1.9" raptorq = "1.7.0" serde_json = "1.0.81" serial_test = "0.8.0" -solana-logger = { path = "../logger", version = "=1.11.11" } -solana-program-runtime = { path = "../program-runtime", version = "=1.11.11" } -solana-stake-program = { path = "../programs/stake", version = "=1.11.11" } +solana-logger = { path = "../logger", version = "=1.14.0" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.0" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.0" } static_assertions = "1.1.0" systemstat = "0.1.11" test-case = "2.1.0" diff --git a/docs/src/developing/clients/jsonrpc-api.md b/docs/src/developing/clients/jsonrpc-api.md index 5f894eaf49cc38..72d53e27fd9c0f 100644 --- a/docs/src/developing/clients/jsonrpc-api.md +++ b/docs/src/developing/clients/jsonrpc-api.md @@ -214,7 +214,7 @@ JSON parsing for the following native and SPL programs: | Program | Account State | Instructions | | --- | --- | --- | -| Address Lookup | v1.12.0 | | +| Address Lookup | v1.14.0 | | | BPF Loader | n/a | stable | | BPF Upgradeable Loader | stable | stable | | Config | stable | | @@ -1948,7 +1948,7 @@ Returns all accounts owned by the provided program Pubkey - `offset: ` - offset into program account data to start comparison - `bytes: ` - data to match, as encoded string - `encoding: ` - encoding for filter `bytes` data, either "base58" or "base64". Data is limited in size to 128 or fewer decoded bytes. - **NEW: This field, and base64 support generally, is only available in solana-core v1.11.11 or newer. Please omit when querying nodes on earlier versions** + **NEW: This field, and base64 support generally, is only available in solana-core v1.14.0 or newer. Please omit when querying nodes on earlier versions** - `dataSize: ` - compares the program account data length with the provided data size @@ -3176,7 +3176,7 @@ curl http://localhost:8899 -X POST -H "Content-Type: application/json" -d ' Result: ```json -{ "jsonrpc": "2.0", "result": { "solana-core": "1.11.11" }, "id": 1 } +{ "jsonrpc": "2.0", "result": { "solana-core": "1.14.0" }, "id": 1 } ``` ### getVoteAccounts diff --git a/dos/Cargo.toml b/dos/Cargo.toml index d3c80ab5769325..79eafc28e6adba 100644 --- a/dos/Cargo.toml +++ b/dos/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-dos" -version = "1.11.11" +version = "1.14.0" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -17,23 +17,23 @@ itertools = "0.10.3" log = "0.4.17" rand = "0.7.0" serde = "1.0.138" -solana-bench-tps = { path = "../bench-tps", version = "=1.11.11" } -solana-client = { path = "../client", version = "=1.11.11" } -solana-core = { path = "../core", version = "=1.11.11" } -solana-faucet = { path = "../faucet", version = "=1.11.11" } -solana-gossip = { path = "../gossip", version = "=1.11.11" } -solana-logger = { path = "../logger", version = "=1.11.11" } -solana-measure = { path = "../measure", version = "=1.11.11" } -solana-net-utils = { path = "../net-utils", version = "=1.11.11" } -solana-perf = { path = "../perf", version = "=1.11.11" } -solana-rpc = { path = "../rpc", version = "=1.11.11" } -solana-sdk = { path = "../sdk", version = "=1.11.11" } -solana-streamer = { path = "../streamer", version = "=1.11.11" } -solana-version = { path = "../version", version = "=1.11.11" } +solana-bench-tps = { path = "../bench-tps", version = "=1.14.0" } +solana-client = { path = "../client", version = "=1.14.0" } +solana-core = { path = "../core", version = "=1.14.0" } +solana-faucet = { path = "../faucet", version = "=1.14.0" } +solana-gossip = { path = "../gossip", version = "=1.14.0" } +solana-logger = { path = "../logger", version = "=1.14.0" } +solana-measure = { path = "../measure", version = "=1.14.0" } +solana-net-utils = { path = "../net-utils", version = "=1.14.0" } +solana-perf = { path = "../perf", version = "=1.14.0" } +solana-rpc = { path = "../rpc", version = "=1.14.0" } +solana-sdk = { path = "../sdk", version = "=1.14.0" } +solana-streamer = { path = "../streamer", version = "=1.14.0" } +solana-version = { path = "../version", version = "=1.14.0" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] [dev-dependencies] serial_test = "0.8.0" -solana-local-cluster = { path = "../local-cluster", version = "=1.11.11" } +solana-local-cluster = { path = "../local-cluster", version = "=1.14.0" } diff --git a/download-utils/Cargo.toml b/download-utils/Cargo.toml index 90b6ba5d49f43b..9d486933bc3954 100644 --- a/download-utils/Cargo.toml +++ b/download-utils/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-download-utils" -version = "1.11.11" +version = "1.14.0" description = "Solana Download Utils" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,8 +14,8 @@ console = "0.15.0" indicatif = "0.16.2" log = "0.4.17" reqwest = { version = "0.11.11", default-features = false, features = ["blocking", "brotli", "deflate", "gzip", "rustls-tls", "json"] } -solana-runtime = { path = "../runtime", version = "=1.11.11" } -solana-sdk = { path = "../sdk", version = "=1.11.11" } +solana-runtime = { path = "../runtime", version = "=1.14.0" } +solana-sdk = { path = "../sdk", version = "=1.14.0" } [lib] crate-type = ["lib"] diff --git a/entry/Cargo.toml b/entry/Cargo.toml index 03e5428ca539ed..5bebd213cb2088 100644 --- a/entry/Cargo.toml +++ b/entry/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-entry" -version = "1.11.11" +version = "1.14.0" description = "Solana Entry" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -19,16 +19,16 @@ log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" serde = "1.0.138" -solana-measure = { path = "../measure", version = "=1.11.11" } -solana-merkle-tree = { path = "../merkle-tree", version = "=1.11.11" } -solana-metrics = { path = "../metrics", version = "=1.11.11" } -solana-perf = { path = "../perf", version = "=1.11.11" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.11.11" } -solana-sdk = { path = "../sdk", version = "=1.11.11" } +solana-measure = { path = "../measure", version = "=1.14.0" } +solana-merkle-tree = { path = "../merkle-tree", version = "=1.14.0" } +solana-metrics = { path = "../metrics", version = "=1.14.0" } +solana-perf = { path = "../perf", version = "=1.14.0" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.0" } +solana-sdk = { path = "../sdk", version = "=1.14.0" } [dev-dependencies] matches = "0.1.9" -solana-logger = { path = "../logger", version = "=1.11.11" } +solana-logger = { path = "../logger", version = "=1.14.0" } [lib] crate-type = ["lib"] diff --git a/faucet/Cargo.toml b/faucet/Cargo.toml index 3f04f93650388a..8cdfe14c445dac 100644 --- a/faucet/Cargo.toml +++ b/faucet/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-faucet" -version = "1.11.11" +version = "1.14.0" description = "Solana Faucet" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -17,12 +17,12 @@ crossbeam-channel = "0.5" log = "0.4.17" serde = "1.0.138" serde_derive = "1.0.103" -solana-clap-utils = { path = "../clap-utils", version = "=1.11.11" } -solana-cli-config = { path = "../cli-config", version = "=1.11.11" } -solana-logger = { path = "../logger", version = "=1.11.11" } -solana-metrics = { path = "../metrics", version = "=1.11.11" } -solana-sdk = { path = "../sdk", version = "=1.11.11" } -solana-version = { path = "../version", version = "=1.11.11" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.0" } +solana-cli-config = { path = "../cli-config", version = "=1.14.0" } +solana-logger = { path = "../logger", version = "=1.14.0" } +solana-metrics = { path = "../metrics", version = "=1.14.0" } +solana-sdk = { path = "../sdk", version = "=1.14.0" } +solana-version = { path = "../version", version = "=1.14.0" } spl-memo = { version = "=3.0.1", features = ["no-entrypoint"] } thiserror = "1.0" tokio = { version = "1", features = ["full"] } diff --git a/frozen-abi/Cargo.toml b/frozen-abi/Cargo.toml index 1437643ca059b1..9ae48d50d61a07 100644 --- a/frozen-abi/Cargo.toml +++ b/frozen-abi/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-frozen-abi" -version = "1.11.11" +version = "1.14.0" description = "Solana Frozen ABI" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -20,7 +20,7 @@ serde_bytes = "0.11" serde_derive = "1.0" serde_json = "1.0" sha2 = "0.10.2" -solana-frozen-abi-macro = { path = "macro", version = "=1.11.11" } +solana-frozen-abi-macro = { path = "macro", version = "=1.14.0" } thiserror = "1.0" [target.'cfg(not(target_os = "solana"))'.dependencies] @@ -43,7 +43,7 @@ rand_core = { version = "0.6.3", features = ["alloc", "getrandom", "std"] } subtle = { version = "2.4.1", features = ["default", "i128", "std"] } [target.'cfg(not(target_os = "solana"))'.dev-dependencies] -solana-logger = { path = "../logger", version = "=1.11.11" } +solana-logger = { path = "../logger", version = "=1.14.0" } [build-dependencies] rustc_version = "0.4" diff --git a/frozen-abi/macro/Cargo.toml b/frozen-abi/macro/Cargo.toml index 6c8d492fb60315..a27e0521b435d0 100644 --- a/frozen-abi/macro/Cargo.toml +++ b/frozen-abi/macro/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-frozen-abi-macro" -version = "1.11.11" +version = "1.14.0" description = "Solana Frozen ABI Macro" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/genesis-utils/Cargo.toml b/genesis-utils/Cargo.toml index 3d505f28e37fce..d60358d213696d 100644 --- a/genesis-utils/Cargo.toml +++ b/genesis-utils/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-genesis-utils" -version = "1.11.11" +version = "1.14.0" description = "Solana Genesis Utils" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,9 +10,9 @@ documentation = "https://docs.rs/solana-download-utils" edition = "2021" [dependencies] -solana-download-utils = { path = "../download-utils", version = "=1.11.11" } -solana-runtime = { path = "../runtime", version = "=1.11.11" } -solana-sdk = { path = "../sdk", version = "=1.11.11" } +solana-download-utils = { path = "../download-utils", version = "=1.14.0" } +solana-runtime = { path = "../runtime", version = "=1.14.0" } +solana-sdk = { path = "../sdk", version = "=1.14.0" } [lib] crate-type = ["lib"] diff --git a/genesis/Cargo.toml b/genesis/Cargo.toml index 8bcab8698ef2e0..7d7d46d779f81c 100644 --- a/genesis/Cargo.toml +++ b/genesis/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-genesis" description = "Blockchain, Rebuilt for Scale" -version = "1.11.11" +version = "1.14.0" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -15,16 +15,16 @@ clap = "2.33.1" serde = "1.0.138" serde_json = "1.0.81" serde_yaml = "0.8.26" -solana-clap-utils = { path = "../clap-utils", version = "=1.11.11" } -solana-cli-config = { path = "../cli-config", version = "=1.11.11" } -solana-entry = { path = "../entry", version = "=1.11.11" } -solana-ledger = { path = "../ledger", version = "=1.11.11" } -solana-logger = { path = "../logger", version = "=1.11.11" } -solana-runtime = { path = "../runtime", version = "=1.11.11" } -solana-sdk = { path = "../sdk", version = "=1.11.11" } -solana-stake-program = { path = "../programs/stake", version = "=1.11.11" } -solana-version = { path = "../version", version = "=1.11.11" } -solana-vote-program = { path = "../programs/vote", version = "=1.11.11" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.0" } +solana-cli-config = { path = "../cli-config", version = "=1.14.0" } +solana-entry = { path = "../entry", version = "=1.14.0" } +solana-ledger = { path = "../ledger", version = "=1.14.0" } +solana-logger = { path = "../logger", version = "=1.14.0" } +solana-runtime = { path = "../runtime", version = "=1.14.0" } +solana-sdk = { path = "../sdk", version = "=1.14.0" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.0" } +solana-version = { path = "../version", version = "=1.14.0" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.0" } tempfile = "3.3.0" [[bin]] diff --git a/geyser-plugin-interface/Cargo.toml b/geyser-plugin-interface/Cargo.toml index a1a61abbf70019..1f91aa00421c80 100644 --- a/geyser-plugin-interface/Cargo.toml +++ b/geyser-plugin-interface/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-geyser-plugin-interface" description = "The Solana Geyser plugin interface." -version = "1.11.11" +version = "1.14.0" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -11,8 +11,8 @@ documentation = "https://docs.rs/solana-geyser-plugin-interface" [dependencies] log = "0.4.17" -solana-sdk = { path = "../sdk", version = "=1.11.11" } -solana-transaction-status = { path = "../transaction-status", version = "=1.11.11" } +solana-sdk = { path = "../sdk", version = "=1.14.0" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.0" } thiserror = "1.0.31" [package.metadata.docs.rs] diff --git a/geyser-plugin-manager/Cargo.toml b/geyser-plugin-manager/Cargo.toml index a80de6a5f098dc..c4eea416cc2743 100644 --- a/geyser-plugin-manager/Cargo.toml +++ b/geyser-plugin-manager/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-geyser-plugin-manager" description = "The Solana Geyser plugin manager." -version = "1.11.11" +version = "1.14.0" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -16,13 +16,13 @@ json5 = "0.4.1" libloading = "0.7.3" log = "0.4.17" serde_json = "1.0.81" -solana-geyser-plugin-interface = { path = "../geyser-plugin-interface", version = "=1.11.11" } -solana-measure = { path = "../measure", version = "=1.11.11" } -solana-metrics = { path = "../metrics", version = "=1.11.11" } -solana-rpc = { path = "../rpc", version = "=1.11.11" } -solana-runtime = { path = "../runtime", version = "=1.11.11" } -solana-sdk = { path = "../sdk", version = "=1.11.11" } -solana-transaction-status = { path = "../transaction-status", version = "=1.11.11" } +solana-geyser-plugin-interface = { path = "../geyser-plugin-interface", version = "=1.14.0" } +solana-measure = { path = "../measure", version = "=1.14.0" } +solana-metrics = { path = "../metrics", version = "=1.14.0" } +solana-rpc = { path = "../rpc", version = "=1.14.0" } +solana-runtime = { path = "../runtime", version = "=1.14.0" } +solana-sdk = { path = "../sdk", version = "=1.14.0" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.0" } thiserror = "1.0.31" [package.metadata.docs.rs] diff --git a/gossip/Cargo.toml b/gossip/Cargo.toml index b2c3e505fb5c13..804550359aa47e 100644 --- a/gossip/Cargo.toml +++ b/gossip/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-gossip" description = "Blockchain, Rebuilt for Scale" -version = "1.11.11" +version = "1.14.0" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -27,24 +27,24 @@ rayon = "1.5.3" serde = "1.0.138" serde_bytes = "0.11" serde_derive = "1.0.103" -solana-bloom = { path = "../bloom", version = "=1.11.11" } -solana-clap-utils = { path = "../clap-utils", version = "=1.11.11" } -solana-client = { path = "../client", version = "=1.11.11" } -solana-entry = { path = "../entry", version = "=1.11.11" } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.11.11" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.11.11" } -solana-ledger = { path = "../ledger", version = "=1.11.11" } -solana-logger = { path = "../logger", version = "=1.11.11" } -solana-measure = { path = "../measure", version = "=1.11.11" } -solana-metrics = { path = "../metrics", version = "=1.11.11" } -solana-net-utils = { path = "../net-utils", version = "=1.11.11" } -solana-perf = { path = "../perf", version = "=1.11.11" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.11.11" } -solana-runtime = { path = "../runtime", version = "=1.11.11" } -solana-sdk = { path = "../sdk", version = "=1.11.11" } -solana-streamer = { path = "../streamer", version = "=1.11.11" } -solana-version = { path = "../version", version = "=1.11.11" } -solana-vote-program = { path = "../programs/vote", version = "=1.11.11" } +solana-bloom = { path = "../bloom", version = "=1.14.0" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.0" } +solana-client = { path = "../client", version = "=1.14.0" } +solana-entry = { path = "../entry", version = "=1.14.0" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.0" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.0" } +solana-ledger = { path = "../ledger", version = "=1.14.0" } +solana-logger = { path = "../logger", version = "=1.14.0" } +solana-measure = { path = "../measure", version = "=1.14.0" } +solana-metrics = { path = "../metrics", version = "=1.14.0" } +solana-net-utils = { path = "../net-utils", version = "=1.14.0" } +solana-perf = { path = "../perf", version = "=1.14.0" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.0" } +solana-runtime = { path = "../runtime", version = "=1.14.0" } +solana-sdk = { path = "../sdk", version = "=1.14.0" } +solana-streamer = { path = "../streamer", version = "=1.14.0" } +solana-version = { path = "../version", version = "=1.14.0" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.0" } thiserror = "1.0" [dev-dependencies] diff --git a/install/Cargo.toml b/install/Cargo.toml index cefcafbed7ac9c..3e0af72255652b 100644 --- a/install/Cargo.toml +++ b/install/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-install" description = "The solana cluster software installer" -version = "1.11.11" +version = "1.14.0" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -26,12 +26,12 @@ reqwest = { version = "0.11.11", default-features = false, features = ["blocking semver = "1.0.10" serde = { version = "1.0.138", features = ["derive"] } serde_yaml = "0.8.26" -solana-clap-utils = { path = "../clap-utils", version = "=1.11.11" } -solana-client = { path = "../client", version = "=1.11.11" } -solana-config-program = { path = "../programs/config", version = "=1.11.11" } -solana-logger = { path = "../logger", version = "=1.11.11" } -solana-sdk = { path = "../sdk", version = "=1.11.11" } -solana-version = { path = "../version", version = "=1.11.11" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.0" } +solana-client = { path = "../client", version = "=1.14.0" } +solana-config-program = { path = "../programs/config", version = "=1.14.0" } +solana-logger = { path = "../logger", version = "=1.14.0" } +solana-sdk = { path = "../sdk", version = "=1.14.0" } +solana-version = { path = "../version", version = "=1.14.0" } tar = "0.4.38" tempfile = "3.3.0" url = "2.2.2" diff --git a/keygen/Cargo.toml b/keygen/Cargo.toml index 3522ce4a7543c5..c2dfec9a716330 100644 --- a/keygen/Cargo.toml +++ b/keygen/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-keygen" -version = "1.11.11" +version = "1.14.0" description = "Solana key generation utility" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,11 +14,11 @@ bs58 = "0.4.0" clap = { version = "3.1.5", features = ["cargo"] } dirs-next = "2.0.0" num_cpus = "1.13.1" -solana-clap-v3-utils = { path = "../clap-v3-utils", version = "=1.11.11" } -solana-cli-config = { path = "../cli-config", version = "=1.11.11" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.11.11" } -solana-sdk = { path = "../sdk", version = "=1.11.11" } -solana-version = { path = "../version", version = "=1.11.11" } +solana-clap-v3-utils = { path = "../clap-v3-utils", version = "=1.14.0" } +solana-cli-config = { path = "../cli-config", version = "=1.14.0" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.0" } +solana-sdk = { path = "../sdk", version = "=1.14.0" } +solana-version = { path = "../version", version = "=1.14.0" } tiny-bip39 = "0.8.2" [[bin]] diff --git a/ledger-tool/Cargo.toml b/ledger-tool/Cargo.toml index bf69bbe243ff34..93b781c1b4711a 100644 --- a/ledger-tool/Cargo.toml +++ b/ledger-tool/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-ledger-tool" description = "Blockchain, Rebuilt for Scale" -version = "1.11.11" +version = "1.14.0" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -22,20 +22,20 @@ log = { version = "0.4.17" } regex = "1" serde = { version = "1.0", features = ["derive"] } serde_json = "1.0.81" -solana-clap-utils = { path = "../clap-utils", version = "=1.11.11" } -solana-cli-output = { path = "../cli-output", version = "=1.11.11" } -solana-core = { path = "../core", version = "=1.11.11" } -solana-entry = { path = "../entry", version = "=1.11.11" } -solana-ledger = { path = "../ledger", version = "=1.11.11" } -solana-logger = { path = "../logger", version = "=1.11.11" } -solana-measure = { path = "../measure", version = "=1.11.11" } -solana-runtime = { path = "../runtime", version = "=1.11.11" } -solana-sdk = { path = "../sdk", version = "=1.11.11" } -solana-stake-program = { path = "../programs/stake", version = "=1.11.11" } -solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.11.11" } -solana-transaction-status = { path = "../transaction-status", version = "=1.11.11" } -solana-version = { path = "../version", version = "=1.11.11" } -solana-vote-program = { path = "../programs/vote", version = "=1.11.11" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.0" } +solana-cli-output = { path = "../cli-output", version = "=1.14.0" } +solana-core = { path = "../core", version = "=1.14.0" } +solana-entry = { path = "../entry", version = "=1.14.0" } +solana-ledger = { path = "../ledger", version = "=1.14.0" } +solana-logger = { path = "../logger", version = "=1.14.0" } +solana-measure = { path = "../measure", version = "=1.14.0" } +solana-runtime = { path = "../runtime", version = "=1.14.0" } +solana-sdk = { path = "../sdk", version = "=1.14.0" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.0" } +solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.0" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.0" } +solana-version = { path = "../version", version = "=1.14.0" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.0" } tokio = { version = "1", features = ["full"] } [target.'cfg(not(target_env = "msvc"))'.dependencies] diff --git a/ledger/Cargo.toml b/ledger/Cargo.toml index 91b079893064b4..a16597af6785a4 100644 --- a/ledger/Cargo.toml +++ b/ledger/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-ledger" -version = "1.11.11" +version = "1.14.0" description = "Solana ledger" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -34,23 +34,23 @@ reed-solomon-erasure = { version = "5.0.3", features = ["simd-accel"] } serde = "1.0.138" serde_bytes = "0.11.6" sha2 = "0.10.2" -solana-account-decoder = { path = "../account-decoder", version = "=1.11.11" } -solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.11.11" } -solana-entry = { path = "../entry", version = "=1.11.11" } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.11.11" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.11.11" } -solana-measure = { path = "../measure", version = "=1.11.11" } -solana-metrics = { path = "../metrics", version = "=1.11.11" } -solana-perf = { path = "../perf", version = "=1.11.11" } -solana-program-runtime = { path = "../program-runtime", version = "=1.11.11" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.11.11" } -solana-runtime = { path = "../runtime", version = "=1.11.11" } -solana-sdk = { path = "../sdk", version = "=1.11.11" } -solana-stake-program = { path = "../programs/stake", version = "=1.11.11" } -solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.11.11" } -solana-storage-proto = { path = "../storage-proto", version = "=1.11.11" } -solana-transaction-status = { path = "../transaction-status", version = "=1.11.11" } -solana-vote-program = { path = "../programs/vote", version = "=1.11.11" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.0" } +solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.0" } +solana-entry = { path = "../entry", version = "=1.14.0" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.0" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.0" } +solana-measure = { path = "../measure", version = "=1.14.0" } +solana-metrics = { path = "../metrics", version = "=1.14.0" } +solana-perf = { path = "../perf", version = "=1.14.0" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.0" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.0" } +solana-runtime = { path = "../runtime", version = "=1.14.0" } +solana-sdk = { path = "../sdk", version = "=1.14.0" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.0" } +solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.0" } +solana-storage-proto = { path = "../storage-proto", version = "=1.14.0" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.0" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.0" } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } spl-token-2022 = { version = "=0.4.2", features = ["no-entrypoint"] } static_assertions = "1.1.0" @@ -71,8 +71,8 @@ features = ["lz4"] assert_matches = "1.5.0" bs58 = "0.4.0" matches = "0.1.9" -solana-account-decoder = { path = "../account-decoder", version = "=1.11.11" } -solana-logger = { path = "../logger", version = "=1.11.11" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.0" } +solana-logger = { path = "../logger", version = "=1.14.0" } test-case = "2.1.0" [build-dependencies] diff --git a/local-cluster/Cargo.toml b/local-cluster/Cargo.toml index 089947e73e73db..a465f7f6398e69 100644 --- a/local-cluster/Cargo.toml +++ b/local-cluster/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-local-cluster" description = "Blockchain, Rebuilt for Scale" -version = "1.11.11" +version = "1.14.0" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -16,25 +16,25 @@ itertools = "0.10.3" log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" -solana-client = { path = "../client", version = "=1.11.11" } -solana-config-program = { path = "../programs/config", version = "=1.11.11" } -solana-core = { path = "../core", version = "=1.11.11" } -solana-entry = { path = "../entry", version = "=1.11.11" } -solana-gossip = { path = "../gossip", version = "=1.11.11" } -solana-ledger = { path = "../ledger", version = "=1.11.11" } -solana-runtime = { path = "../runtime", version = "=1.11.11" } -solana-sdk = { path = "../sdk", version = "=1.11.11" } -solana-stake-program = { path = "../programs/stake", version = "=1.11.11" } -solana-streamer = { path = "../streamer", version = "=1.11.11" } -solana-vote-program = { path = "../programs/vote", version = "=1.11.11" } +solana-client = { path = "../client", version = "=1.14.0" } +solana-config-program = { path = "../programs/config", version = "=1.14.0" } +solana-core = { path = "../core", version = "=1.14.0" } +solana-entry = { path = "../entry", version = "=1.14.0" } +solana-gossip = { path = "../gossip", version = "=1.14.0" } +solana-ledger = { path = "../ledger", version = "=1.14.0" } +solana-runtime = { path = "../runtime", version = "=1.14.0" } +solana-sdk = { path = "../sdk", version = "=1.14.0" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.0" } +solana-streamer = { path = "../streamer", version = "=1.14.0" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.0" } tempfile = "3.3.0" [dev-dependencies] assert_matches = "1.5.0" gag = "1.0.0" serial_test = "0.8.0" -solana-download-utils = { path = "../download-utils", version = "=1.11.11" } -solana-logger = { path = "../logger", version = "=1.11.11" } +solana-download-utils = { path = "../download-utils", version = "=1.14.0" } +solana-logger = { path = "../logger", version = "=1.14.0" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/log-analyzer/Cargo.toml b/log-analyzer/Cargo.toml index a20174cd79d03b..7ecadd550fafcc 100644 --- a/log-analyzer/Cargo.toml +++ b/log-analyzer/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-log-analyzer" description = "The solana cluster network analysis tool" -version = "1.11.11" +version = "1.14.0" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,8 +14,8 @@ byte-unit = "4.0.14" clap = { version = "3.1.5", features = ["cargo"] } serde = "1.0.138" serde_json = "1.0.81" -solana-logger = { path = "../logger", version = "=1.11.11" } -solana-version = { path = "../version", version = "=1.11.11" } +solana-logger = { path = "../logger", version = "=1.14.0" } +solana-version = { path = "../version", version = "=1.14.0" } [[bin]] name = "solana-log-analyzer" diff --git a/logger/Cargo.toml b/logger/Cargo.toml index 92b2ba6b75ef22..932f21cdbf881f 100644 --- a/logger/Cargo.toml +++ b/logger/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-logger" -version = "1.11.11" +version = "1.14.0" description = "Solana Logger" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/measure/Cargo.toml b/measure/Cargo.toml index 392be6131b0e8a..0177cac7e5c77d 100644 --- a/measure/Cargo.toml +++ b/measure/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "solana-measure" description = "Blockchain, Rebuilt for Scale" -version = "1.11.11" +version = "1.14.0" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-measure" readme = "../README.md" @@ -12,7 +12,7 @@ edition = "2021" [dependencies] log = "0.4.17" -solana-sdk = { path = "../sdk", version = "=1.11.11" } +solana-sdk = { path = "../sdk", version = "=1.14.0" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/merkle-root-bench/Cargo.toml b/merkle-root-bench/Cargo.toml index 8c716103311b79..9156fab094fb88 100644 --- a/merkle-root-bench/Cargo.toml +++ b/merkle-root-bench/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-merkle-root-bench" -version = "1.11.11" +version = "1.14.0" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -11,11 +11,11 @@ publish = false [dependencies] clap = "2.33.1" log = "0.4.17" -solana-logger = { path = "../logger", version = "=1.11.11" } -solana-measure = { path = "../measure", version = "=1.11.11" } -solana-runtime = { path = "../runtime", version = "=1.11.11" } -solana-sdk = { path = "../sdk", version = "=1.11.11" } -solana-version = { path = "../version", version = "=1.11.11" } +solana-logger = { path = "../logger", version = "=1.14.0" } +solana-measure = { path = "../measure", version = "=1.14.0" } +solana-runtime = { path = "../runtime", version = "=1.14.0" } +solana-sdk = { path = "../sdk", version = "=1.14.0" } +solana-version = { path = "../version", version = "=1.14.0" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/merkle-tree/Cargo.toml b/merkle-tree/Cargo.toml index 6a5c36ff05bad9..6a4a0e23c5a982 100644 --- a/merkle-tree/Cargo.toml +++ b/merkle-tree/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-merkle-tree" -version = "1.11.11" +version = "1.14.0" description = "Solana Merkle Tree" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -11,7 +11,7 @@ edition = "2021" [dependencies] fast-math = "0.1" -solana-program = { path = "../sdk/program", version = "=1.11.11" } +solana-program = { path = "../sdk/program", version = "=1.14.0" } # This can go once the BPF toolchain target Rust 1.42.0+ [target.bpfel-unknown-unknown.dependencies] diff --git a/metrics/Cargo.toml b/metrics/Cargo.toml index 34bfa8216f6e5b..dd925a3582bd1a 100644 --- a/metrics/Cargo.toml +++ b/metrics/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-metrics" -version = "1.11.11" +version = "1.14.0" description = "Solana Metrics" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -15,7 +15,7 @@ gethostname = "0.2.3" lazy_static = "1.4.0" log = "0.4.17" reqwest = { version = "0.11.11", default-features = false, features = ["blocking", "brotli", "deflate", "gzip", "rustls-tls", "json"] } -solana-sdk = { path = "../sdk", version = "=1.11.11" } +solana-sdk = { path = "../sdk", version = "=1.14.0" } [dev-dependencies] env_logger = "0.9.0" diff --git a/net-shaper/Cargo.toml b/net-shaper/Cargo.toml index 680dc9225a9cb5..57b07e042fcbc0 100644 --- a/net-shaper/Cargo.toml +++ b/net-shaper/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-net-shaper" description = "The solana cluster network shaping tool" -version = "1.11.11" +version = "1.14.0" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,7 +14,7 @@ clap = { version = "3.1.5", features = ["cargo"] } rand = "0.7.0" serde = { version = "1.0.138", features = ["derive"] } serde_json = "1.0.81" -solana-logger = { path = "../logger", version = "=1.11.11" } +solana-logger = { path = "../logger", version = "=1.14.0" } [[bin]] name = "solana-net-shaper" diff --git a/net-utils/Cargo.toml b/net-utils/Cargo.toml index f5dac641725c66..7155664d22e955 100644 --- a/net-utils/Cargo.toml +++ b/net-utils/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-net-utils" -version = "1.11.11" +version = "1.14.0" description = "Solana Network Utilities" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -19,9 +19,9 @@ rand = "0.7.0" serde = "1.0.138" serde_derive = "1.0.103" socket2 = "0.4.4" -solana-logger = { path = "../logger", version = "=1.11.11" } -solana-sdk = { path = "../sdk", version = "=1.11.11" } -solana-version = { path = "../version", version = "=1.11.11" } +solana-logger = { path = "../logger", version = "=1.14.0" } +solana-sdk = { path = "../sdk", version = "=1.14.0" } +solana-version = { path = "../version", version = "=1.14.0" } tokio = { version = "1", features = ["full"] } url = "2.2.2" diff --git a/notifier/Cargo.toml b/notifier/Cargo.toml index cacd87e991df75..bcdd66cefb08e3 100644 --- a/notifier/Cargo.toml +++ b/notifier/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-notifier" -version = "1.11.11" +version = "1.14.0" description = "Solana Notifier" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/perf/Cargo.toml b/perf/Cargo.toml index df4801eff102ef..9677c9fbaf62d7 100644 --- a/perf/Cargo.toml +++ b/perf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-perf" -version = "1.11.11" +version = "1.14.0" description = "Solana Performance APIs" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -22,10 +22,10 @@ log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" serde = "1.0.138" -solana-metrics = { path = "../metrics", version = "=1.11.11" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.11.11" } -solana-sdk = { path = "../sdk", version = "=1.11.11" } -solana-vote-program = { path = "../programs/vote", version = "=1.11.11" } +solana-metrics = { path = "../metrics", version = "=1.14.0" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.0" } +solana-sdk = { path = "../sdk", version = "=1.14.0" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.0" } [target."cfg(target_os = \"linux\")".dependencies] caps = "0.5.3" @@ -37,7 +37,7 @@ name = "solana_perf" [dev-dependencies] matches = "0.1.9" -solana-logger = { path = "../logger", version = "=1.11.11" } +solana-logger = { path = "../logger", version = "=1.14.0" } [[bench]] name = "sigverify" diff --git a/poh-bench/Cargo.toml b/poh-bench/Cargo.toml index e5e537ae3b7632..9c4e444389ad7e 100644 --- a/poh-bench/Cargo.toml +++ b/poh-bench/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-poh-bench" -version = "1.11.11" +version = "1.14.0" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,12 +14,12 @@ clap = { version = "3.1.5", features = ["cargo"] } log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" -solana-entry = { path = "../entry", version = "=1.11.11" } -solana-logger = { path = "../logger", version = "=1.11.11" } -solana-measure = { path = "../measure", version = "=1.11.11" } -solana-perf = { path = "../perf", version = "=1.11.11" } -solana-sdk = { path = "../sdk", version = "=1.11.11" } -solana-version = { path = "../version", version = "=1.11.11" } +solana-entry = { path = "../entry", version = "=1.14.0" } +solana-logger = { path = "../logger", version = "=1.14.0" } +solana-measure = { path = "../measure", version = "=1.14.0" } +solana-perf = { path = "../perf", version = "=1.14.0" } +solana-sdk = { path = "../sdk", version = "=1.14.0" } +solana-version = { path = "../version", version = "=1.14.0" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/poh/Cargo.toml b/poh/Cargo.toml index 20e5b5b2ea2de3..6105911e95b594 100644 --- a/poh/Cargo.toml +++ b/poh/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-poh" -version = "1.11.11" +version = "1.14.0" description = "Solana PoH" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,21 +13,21 @@ edition = "2021" core_affinity = "0.5.10" crossbeam-channel = "0.5" log = "0.4.17" -solana-entry = { path = "../entry", version = "=1.11.11" } -solana-ledger = { path = "../ledger", version = "=1.11.11" } -solana-measure = { path = "../measure", version = "=1.11.11" } -solana-metrics = { path = "../metrics", version = "=1.11.11" } -solana-runtime = { path = "../runtime", version = "=1.11.11" } -solana-sdk = { path = "../sdk", version = "=1.11.11" } -solana-sys-tuner = { path = "../sys-tuner", version = "=1.11.11" } +solana-entry = { path = "../entry", version = "=1.14.0" } +solana-ledger = { path = "../ledger", version = "=1.14.0" } +solana-measure = { path = "../measure", version = "=1.14.0" } +solana-metrics = { path = "../metrics", version = "=1.14.0" } +solana-runtime = { path = "../runtime", version = "=1.14.0" } +solana-sdk = { path = "../sdk", version = "=1.14.0" } +solana-sys-tuner = { path = "../sys-tuner", version = "=1.14.0" } thiserror = "1.0" [dev-dependencies] bincode = "1.3.3" matches = "0.1.9" rand = "0.7.0" -solana-logger = { path = "../logger", version = "=1.11.11" } -solana-perf = { path = "../perf", version = "=1.11.11" } +solana-logger = { path = "../logger", version = "=1.14.0" } +solana-perf = { path = "../perf", version = "=1.14.0" } [lib] crate-type = ["lib"] diff --git a/program-runtime/Cargo.toml b/program-runtime/Cargo.toml index c227c21c36137d..320ec4525899b0 100644 --- a/program-runtime/Cargo.toml +++ b/program-runtime/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-program-runtime" -version = "1.11.11" +version = "1.14.0" description = "Solana program runtime" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -20,16 +20,16 @@ log = "0.4.14" num-derive = { version = "0.3" } num-traits = { version = "0.2" } serde = { version = "1.0.129", features = ["derive", "rc"] } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.11.11" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.11.11" } -solana-measure = { path = "../measure", version = "=1.11.11" } -solana-metrics = { path = "../metrics", version = "=1.11.11" } -solana-sdk = { path = "../sdk", version = "=1.11.11" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.0" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.0" } +solana-measure = { path = "../measure", version = "=1.14.0" } +solana-metrics = { path = "../metrics", version = "=1.14.0" } +solana-sdk = { path = "../sdk", version = "=1.14.0" } thiserror = "1.0" enum-iterator = "0.8.1" [dev-dependencies] -solana-logger = { path = "../logger", version = "=1.11.11" } +solana-logger = { path = "../logger", version = "=1.14.0" } [lib] crate-type = ["lib"] diff --git a/program-test/Cargo.toml b/program-test/Cargo.toml index 860dbb6bfb9497..d7d82a18150251 100644 --- a/program-test/Cargo.toml +++ b/program-test/Cargo.toml @@ -5,7 +5,7 @@ edition = "2021" license = "Apache-2.0" name = "solana-program-test" repository = "https://github.com/solana-labs/solana" -version = "1.11.11" +version = "1.14.0" [dependencies] assert_matches = "1.5.0" @@ -15,13 +15,13 @@ bincode = "1.3.3" chrono-humanize = "0.2.1" log = "0.4.17" serde = "1.0.138" -solana-banks-client = { path = "../banks-client", version = "=1.11.11" } -solana-banks-server = { path = "../banks-server", version = "=1.11.11" } -solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.11.11" } -solana-logger = { path = "../logger", version = "=1.11.11" } -solana-program-runtime = { path = "../program-runtime", version = "=1.11.11" } -solana-runtime = { path = "../runtime", version = "=1.11.11" } -solana-sdk = { path = "../sdk", version = "=1.11.11" } -solana-vote-program = { path = "../programs/vote", version = "=1.11.11" } +solana-banks-client = { path = "../banks-client", version = "=1.14.0" } +solana-banks-server = { path = "../banks-server", version = "=1.14.0" } +solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.0" } +solana-logger = { path = "../logger", version = "=1.14.0" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.0" } +solana-runtime = { path = "../runtime", version = "=1.14.0" } +solana-sdk = { path = "../sdk", version = "=1.14.0" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.0" } thiserror = "1.0" tokio = { version = "1", features = ["full"] } diff --git a/programs/address-lookup-table-tests/Cargo.toml b/programs/address-lookup-table-tests/Cargo.toml index 2566152ebbc2cc..413c44d19d1fd7 100644 --- a/programs/address-lookup-table-tests/Cargo.toml +++ b/programs/address-lookup-table-tests/Cargo.toml @@ -3,7 +3,7 @@ [package] name = "solana-address-lookup-table-program-tests" -version = "1.11.11" +version = "1.14.0" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" @@ -14,9 +14,9 @@ publish = false [dev-dependencies] assert_matches = "1.5.0" bincode = "1.3.3" -solana-address-lookup-table-program = { path = "../address-lookup-table", version = "=1.11.11" } -solana-program-test = { path = "../../program-test", version = "=1.11.11" } -solana-sdk = { path = "../../sdk", version = "=1.11.11" } +solana-address-lookup-table-program = { path = "../address-lookup-table", version = "=1.14.0" } +solana-program-test = { path = "../../program-test", version = "=1.14.0" } +solana-sdk = { path = "../../sdk", version = "=1.14.0" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/address-lookup-table/Cargo.toml b/programs/address-lookup-table/Cargo.toml index fff902a3713c63..5f191afeb2fafb 100644 --- a/programs/address-lookup-table/Cargo.toml +++ b/programs/address-lookup-table/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-address-lookup-table-program" -version = "1.11.11" +version = "1.14.0" description = "Solana address lookup table program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -16,14 +16,14 @@ log = "0.4.17" num-derive = "0.3" num-traits = "0.2" serde = { version = "1.0.138", features = ["derive"] } -solana-frozen-abi = { path = "../../frozen-abi", version = "=1.11.11" } -solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.11.11" } -solana-program = { path = "../../sdk/program", version = "=1.11.11" } +solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.0" } +solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.0" } +solana-program = { path = "../../sdk/program", version = "=1.14.0" } thiserror = "1.0" [target.'cfg(not(target_os = "solana"))'.dependencies] -solana-program-runtime = { path = "../../program-runtime", version = "=1.11.11" } -solana-sdk = { path = "../../sdk", version = "=1.11.11" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.0" } +solana-sdk = { path = "../../sdk", version = "=1.14.0" } [build-dependencies] rustc_version = "0.4" diff --git a/programs/bpf-loader-tests/Cargo.toml b/programs/bpf-loader-tests/Cargo.toml index b0a5c259637bd1..3c8d77a45456f6 100644 --- a/programs/bpf-loader-tests/Cargo.toml +++ b/programs/bpf-loader-tests/Cargo.toml @@ -3,7 +3,7 @@ [package] name = "solana-bpf-loader-program-tests" -version = "1.11.11" +version = "1.14.0" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" @@ -14,9 +14,9 @@ publish = false [dev-dependencies] assert_matches = "1.5.0" bincode = "1.3.3" -solana-bpf-loader-program = { path = "../bpf_loader", version = "=1.11.11" } -solana-program-test = { path = "../../program-test", version = "=1.11.11" } -solana-sdk = { path = "../../sdk", version = "=1.11.11" } +solana-bpf-loader-program = { path = "../bpf_loader", version = "=1.14.0" } +solana-program-test = { path = "../../program-test", version = "=1.14.0" } +solana-sdk = { path = "../../sdk", version = "=1.14.0" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/bpf/Cargo.lock b/programs/bpf/Cargo.lock index f8fe2f9e2c3d9a..aec25227db8e93 100644 --- a/programs/bpf/Cargo.lock +++ b/programs/bpf/Cargo.lock @@ -4062,7 +4062,7 @@ dependencies = [ [[package]] name = "solana-account-decoder" -version = "1.11.11" +version = "1.14.0" dependencies = [ "Inflector", "base64 0.13.0", @@ -4074,7 +4074,7 @@ dependencies = [ "serde_derive", "serde_json", "solana-config-program", - "solana-sdk 1.11.11", + "solana-sdk 1.14.0", "solana-vote-program", "spl-token", "spl-token-2022", @@ -4084,7 +4084,7 @@ dependencies = [ [[package]] name = "solana-address-lookup-table-program" -version = "1.11.11" +version = "1.14.0" dependencies = [ "bincode", "bytemuck", @@ -4093,23 +4093,23 @@ dependencies = [ "num-traits", "rustc_version", "serde", - "solana-frozen-abi 1.11.11", - "solana-frozen-abi-macro 1.11.11", - "solana-program 1.11.11", + "solana-frozen-abi 1.14.0", + "solana-frozen-abi-macro 1.14.0", + "solana-program 1.14.0", "solana-program-runtime", - "solana-sdk 1.11.11", + "solana-sdk 1.14.0", "thiserror", ] [[package]] name = "solana-banks-client" -version = "1.11.11" +version = "1.14.0" dependencies = [ "borsh", "futures 0.3.21", "solana-banks-interface", - "solana-program 1.11.11", - "solana-sdk 1.11.11", + "solana-program 1.14.0", + "solana-sdk 1.14.0", "tarpc", "thiserror", "tokio", @@ -4118,16 +4118,16 @@ dependencies = [ [[package]] name = "solana-banks-interface" -version = "1.11.11" +version = "1.14.0" dependencies = [ "serde", - "solana-sdk 1.11.11", + "solana-sdk 1.14.0", "tarpc", ] [[package]] name = "solana-banks-server" -version = "1.11.11" +version = "1.14.0" dependencies = [ "bincode", "crossbeam-channel", @@ -4135,7 +4135,7 @@ dependencies = [ "solana-banks-interface", "solana-client", "solana-runtime", - "solana-sdk 1.11.11", + "solana-sdk 1.14.0", "solana-send-transaction-service", "tarpc", "tokio", @@ -4145,7 +4145,7 @@ dependencies = [ [[package]] name = "solana-bloom" -version = "1.11.11" +version = "1.14.0" dependencies = [ "bv", "fnv", @@ -4155,14 +4155,14 @@ dependencies = [ "rustc_version", "serde", "serde_derive", - "solana-frozen-abi 1.11.11", - "solana-frozen-abi-macro 1.11.11", - "solana-sdk 1.11.11", + "solana-frozen-abi 1.14.0", + "solana-frozen-abi-macro 1.14.0", + "solana-sdk 1.14.0", ] [[package]] name = "solana-bpf-loader-program" -version = "1.11.11" +version = "1.14.0" dependencies = [ "bincode", "byteorder 1.4.3", @@ -4171,15 +4171,15 @@ dependencies = [ "solana-measure", "solana-metrics", "solana-program-runtime", - "solana-sdk 1.11.11", - "solana-zk-token-sdk 1.11.11", + "solana-sdk 1.14.0", + "solana-zk-token-sdk 1.14.0", "solana_rbpf", "thiserror", ] [[package]] name = "solana-bpf-programs" -version = "1.11.11" +version = "1.14.0" dependencies = [ "bincode", "byteorder 1.4.3", @@ -4195,11 +4195,11 @@ dependencies = [ "solana-bpf-rust-realloc-invoke", "solana-cli-output", "solana-ledger", - "solana-logger 1.11.11", + "solana-logger 1.14.0", "solana-measure", "solana-program-runtime", "solana-runtime", - "solana-sdk 1.11.11", + "solana-sdk 1.14.0", "solana-transaction-status", "solana_rbpf", "walkdir", @@ -4207,385 +4207,385 @@ dependencies = [ [[package]] name = "solana-bpf-rust-128bit" -version = "1.11.11" +version = "1.14.0" dependencies = [ "solana-bpf-rust-128bit-dep", - "solana-program 1.11.11", + "solana-program 1.14.0", ] [[package]] name = "solana-bpf-rust-128bit-dep" -version = "1.11.11" +version = "1.14.0" dependencies = [ - "solana-program 1.11.11", + "solana-program 1.14.0", ] [[package]] name = "solana-bpf-rust-alloc" -version = "1.11.11" +version = "1.14.0" dependencies = [ - "solana-program 1.11.11", + "solana-program 1.14.0", ] [[package]] name = "solana-bpf-rust-call-depth" -version = "1.11.11" +version = "1.14.0" dependencies = [ - "solana-program 1.11.11", + "solana-program 1.14.0", ] [[package]] name = "solana-bpf-rust-caller-access" -version = "1.11.11" +version = "1.14.0" dependencies = [ - "solana-program 1.11.11", + "solana-program 1.14.0", ] [[package]] name = "solana-bpf-rust-curve25519" -version = "1.11.11" +version = "1.14.0" dependencies = [ - "solana-program 1.11.11", - "solana-zk-token-sdk 1.11.11", + "solana-program 1.14.0", + "solana-zk-token-sdk 1.14.0", ] [[package]] name = "solana-bpf-rust-custom-heap" -version = "1.11.11" +version = "1.14.0" dependencies = [ - "solana-program 1.11.11", + "solana-program 1.14.0", ] [[package]] name = "solana-bpf-rust-dep-crate" -version = "1.11.11" +version = "1.14.0" dependencies = [ "byteorder 1.4.3", "solana-address-lookup-table-program", - "solana-program 1.11.11", + "solana-program 1.14.0", ] [[package]] name = "solana-bpf-rust-deprecated-loader" -version = "1.11.11" +version = "1.14.0" dependencies = [ - "solana-program 1.11.11", + "solana-program 1.14.0", ] [[package]] name = "solana-bpf-rust-dup-accounts" -version = "1.11.11" +version = "1.14.0" dependencies = [ - "solana-program 1.11.11", + "solana-program 1.14.0", ] [[package]] name = "solana-bpf-rust-error-handling" -version = "1.11.11" +version = "1.14.0" dependencies = [ "num-derive", "num-traits", - "solana-program 1.11.11", + "solana-program 1.14.0", "thiserror", ] [[package]] name = "solana-bpf-rust-external-spend" -version = "1.11.11" +version = "1.14.0" dependencies = [ - "solana-program 1.11.11", + "solana-program 1.14.0", ] [[package]] name = "solana-bpf-rust-finalize" -version = "1.11.11" +version = "1.14.0" dependencies = [ - "solana-program 1.11.11", + "solana-program 1.14.0", ] [[package]] name = "solana-bpf-rust-get-minimum-delegation" -version = "1.11.11" +version = "1.14.0" dependencies = [ - "solana-program 1.11.11", + "solana-program 1.14.0", ] [[package]] name = "solana-bpf-rust-inner_instruction_alignment_check" -version = "1.11.11" +version = "1.14.0" dependencies = [ - "solana-program 1.11.11", + "solana-program 1.14.0", ] [[package]] name = "solana-bpf-rust-instruction-introspection" -version = "1.11.11" +version = "1.14.0" dependencies = [ - "solana-program 1.11.11", + "solana-program 1.14.0", ] [[package]] name = "solana-bpf-rust-invoke" -version = "1.11.11" +version = "1.14.0" dependencies = [ "solana-bpf-rust-invoked", - "solana-program 1.11.11", + "solana-program 1.14.0", ] [[package]] name = "solana-bpf-rust-invoke-and-error" -version = "1.11.11" +version = "1.14.0" dependencies = [ - "solana-program 1.11.11", + "solana-program 1.14.0", ] [[package]] name = "solana-bpf-rust-invoke-and-ok" -version = "1.11.11" +version = "1.14.0" dependencies = [ - "solana-program 1.11.11", + "solana-program 1.14.0", ] [[package]] name = "solana-bpf-rust-invoke-and-return" -version = "1.11.11" +version = "1.14.0" dependencies = [ - "solana-program 1.11.11", + "solana-program 1.14.0", ] [[package]] name = "solana-bpf-rust-invoked" -version = "1.11.11" +version = "1.14.0" dependencies = [ - "solana-program 1.11.11", + "solana-program 1.14.0", ] [[package]] name = "solana-bpf-rust-iter" -version = "1.11.11" +version = "1.14.0" dependencies = [ - "solana-program 1.11.11", + "solana-program 1.14.0", ] [[package]] name = "solana-bpf-rust-log-data" -version = "1.11.11" +version = "1.14.0" dependencies = [ - "solana-program 1.11.11", + "solana-program 1.14.0", ] [[package]] name = "solana-bpf-rust-many-args" -version = "1.11.11" +version = "1.14.0" dependencies = [ "solana-bpf-rust-many-args-dep", - "solana-program 1.11.11", + "solana-program 1.14.0", ] [[package]] name = "solana-bpf-rust-many-args-dep" -version = "1.11.11" +version = "1.14.0" dependencies = [ - "solana-program 1.11.11", + "solana-program 1.14.0", ] [[package]] name = "solana-bpf-rust-mem" -version = "1.11.11" +version = "1.14.0" dependencies = [ - "solana-program 1.11.11", + "solana-program 1.14.0", "solana-program-runtime", "solana-program-test", - "solana-sdk 1.11.11", + "solana-sdk 1.14.0", ] [[package]] name = "solana-bpf-rust-membuiltins" -version = "1.11.11" +version = "1.14.0" dependencies = [ "solana-bpf-rust-mem", - "solana-program 1.11.11", + "solana-program 1.14.0", ] [[package]] name = "solana-bpf-rust-noop" -version = "1.11.11" +version = "1.14.0" dependencies = [ - "solana-program 1.11.11", + "solana-program 1.14.0", ] [[package]] name = "solana-bpf-rust-panic" -version = "1.11.11" +version = "1.14.0" dependencies = [ - "solana-program 1.11.11", + "solana-program 1.14.0", ] [[package]] name = "solana-bpf-rust-param-passing" -version = "1.11.11" +version = "1.14.0" dependencies = [ "solana-bpf-rust-param-passing-dep", - "solana-program 1.11.11", + "solana-program 1.14.0", ] [[package]] name = "solana-bpf-rust-param-passing-dep" -version = "1.11.11" +version = "1.14.0" dependencies = [ - "solana-program 1.11.11", + "solana-program 1.14.0", ] [[package]] name = "solana-bpf-rust-rand" -version = "1.11.11" +version = "1.14.0" dependencies = [ "getrandom 0.1.14", "rand 0.7.3", - "solana-program 1.11.11", + "solana-program 1.14.0", ] [[package]] name = "solana-bpf-rust-realloc" -version = "1.11.11" +version = "1.14.0" dependencies = [ - "solana-program 1.11.11", + "solana-program 1.14.0", ] [[package]] name = "solana-bpf-rust-realloc-invoke" -version = "1.11.11" +version = "1.14.0" dependencies = [ "solana-bpf-rust-realloc", - "solana-program 1.11.11", + "solana-program 1.14.0", ] [[package]] name = "solana-bpf-rust-ro-account_modify" -version = "1.11.11" +version = "1.14.0" dependencies = [ - "solana-program 1.11.11", + "solana-program 1.14.0", ] [[package]] name = "solana-bpf-rust-ro-modify" -version = "1.11.11" +version = "1.14.0" dependencies = [ - "solana-program 1.11.11", + "solana-program 1.14.0", ] [[package]] name = "solana-bpf-rust-sanity" -version = "1.11.11" +version = "1.14.0" dependencies = [ - "solana-program 1.11.11", + "solana-program 1.14.0", "solana-program-runtime", "solana-program-test", - "solana-sdk 1.11.11", + "solana-sdk 1.14.0", ] [[package]] name = "solana-bpf-rust-secp256k1-recover" -version = "1.11.11" +version = "1.14.0" dependencies = [ "libsecp256k1 0.7.0", - "solana-program 1.11.11", + "solana-program 1.14.0", ] [[package]] name = "solana-bpf-rust-sha" -version = "1.11.11" +version = "1.14.0" dependencies = [ "blake3", - "solana-program 1.11.11", + "solana-program 1.14.0", ] [[package]] name = "solana-bpf-rust-sibling-instructions" -version = "1.11.11" +version = "1.14.0" dependencies = [ - "solana-program 1.11.11", + "solana-program 1.14.0", ] [[package]] name = "solana-bpf-rust-sibling_inner-instructions" -version = "1.11.11" +version = "1.14.0" dependencies = [ - "solana-program 1.11.11", + "solana-program 1.14.0", ] [[package]] name = "solana-bpf-rust-simulation" -version = "1.11.11" +version = "1.14.0" dependencies = [ - "solana-logger 1.11.11", - "solana-program 1.11.11", + "solana-logger 1.14.0", + "solana-program 1.14.0", "solana-program-test", - "solana-sdk 1.11.11", + "solana-sdk 1.14.0", "solana-validator", ] [[package]] name = "solana-bpf-rust-spoof1" -version = "1.11.11" +version = "1.14.0" dependencies = [ - "solana-program 1.11.11", + "solana-program 1.14.0", ] [[package]] name = "solana-bpf-rust-spoof1-system" -version = "1.11.11" +version = "1.14.0" dependencies = [ - "solana-program 1.11.11", + "solana-program 1.14.0", ] [[package]] name = "solana-bpf-rust-sysvar" -version = "1.11.11" +version = "1.14.0" dependencies = [ - "solana-program 1.11.11", + "solana-program 1.14.0", "solana-program-runtime", "solana-program-test", - "solana-sdk 1.11.11", + "solana-sdk 1.14.0", ] [[package]] name = "solana-bpf-rust-upgradeable" -version = "1.11.11" +version = "1.14.0" dependencies = [ - "solana-program 1.11.11", + "solana-program 1.14.0", ] [[package]] name = "solana-bpf-rust-upgraded" -version = "1.11.11" +version = "1.14.0" dependencies = [ - "solana-program 1.11.11", + "solana-program 1.14.0", ] [[package]] name = "solana-bucket-map" -version = "1.11.11" +version = "1.14.0" dependencies = [ "log", "memmap2", "modular-bitfield", "rand 0.7.3", "solana-measure", - "solana-sdk 1.11.11", + "solana-sdk 1.14.0", "tempfile", ] [[package]] name = "solana-clap-utils" -version = "1.11.11" +version = "1.14.0" dependencies = [ "chrono", "clap 2.33.3", "rpassword", "solana-perf", "solana-remote-wallet", - "solana-sdk 1.11.11", + "solana-sdk 1.14.0", "thiserror", "tiny-bip39", "uriparse", @@ -4594,7 +4594,7 @@ dependencies = [ [[package]] name = "solana-cli-config" -version = "1.11.11" +version = "1.14.0" dependencies = [ "dirs-next", "lazy_static", @@ -4602,13 +4602,13 @@ dependencies = [ "serde_derive", "serde_yaml", "solana-clap-utils", - "solana-sdk 1.11.11", + "solana-sdk 1.14.0", "url 2.2.2", ] [[package]] name = "solana-cli-output" -version = "1.11.11" +version = "1.14.0" dependencies = [ "Inflector", "base64 0.13.0", @@ -4625,7 +4625,7 @@ dependencies = [ "solana-clap-utils", "solana-cli-config", "solana-client", - "solana-sdk 1.11.11", + "solana-sdk 1.14.0", "solana-transaction-status", "solana-vote-program", "spl-memo", @@ -4633,7 +4633,7 @@ dependencies = [ [[package]] name = "solana-client" -version = "1.11.11" +version = "1.14.0" dependencies = [ "async-mutex", "async-trait", @@ -4669,7 +4669,7 @@ dependencies = [ "solana-measure", "solana-metrics", "solana-net-utils", - "solana-sdk 1.11.11", + "solana-sdk 1.14.0", "solana-streamer", "solana-transaction-status", "solana-version", @@ -4685,27 +4685,27 @@ dependencies = [ [[package]] name = "solana-compute-budget-program" -version = "1.11.11" +version = "1.14.0" dependencies = [ "solana-program-runtime", - "solana-sdk 1.11.11", + "solana-sdk 1.14.0", ] [[package]] name = "solana-config-program" -version = "1.11.11" +version = "1.14.0" dependencies = [ "bincode", "chrono", "serde", "serde_derive", "solana-program-runtime", - "solana-sdk 1.11.11", + "solana-sdk 1.14.0", ] [[package]] name = "solana-core" -version = "1.11.11" +version = "1.14.0" dependencies = [ "ahash", "base64 0.13.0", @@ -4733,8 +4733,8 @@ dependencies = [ "solana-bloom", "solana-client", "solana-entry", - "solana-frozen-abi 1.11.11", - "solana-frozen-abi-macro 1.11.11", + "solana-frozen-abi 1.14.0", + "solana-frozen-abi-macro 1.14.0", "solana-geyser-plugin-manager", "solana-gossip", "solana-ledger", @@ -4747,7 +4747,7 @@ dependencies = [ "solana-rayon-threadlimit", "solana-rpc", "solana-runtime", - "solana-sdk 1.11.11", + "solana-sdk 1.14.0", "solana-send-transaction-service", "solana-streamer", "solana-transaction-status", @@ -4763,19 +4763,19 @@ dependencies = [ [[package]] name = "solana-download-utils" -version = "1.11.11" +version = "1.14.0" dependencies = [ "console", "indicatif", "log", "reqwest", "solana-runtime", - "solana-sdk 1.11.11", + "solana-sdk 1.14.0", ] [[package]] name = "solana-entry" -version = "1.11.11" +version = "1.14.0" dependencies = [ "bincode", "crossbeam-channel", @@ -4791,12 +4791,12 @@ dependencies = [ "solana-metrics", "solana-perf", "solana-rayon-threadlimit", - "solana-sdk 1.11.11", + "solana-sdk 1.14.0", ] [[package]] name = "solana-faucet" -version = "1.11.11" +version = "1.14.0" dependencies = [ "bincode", "byteorder 1.4.3", @@ -4807,9 +4807,9 @@ dependencies = [ "serde_derive", "solana-clap-utils", "solana-cli-config", - "solana-logger 1.11.11", + "solana-logger 1.14.0", "solana-metrics", - "solana-sdk 1.11.11", + "solana-sdk 1.14.0", "solana-version", "spl-memo", "thiserror", @@ -4840,7 +4840,7 @@ dependencies = [ [[package]] name = "solana-frozen-abi" -version = "1.11.11" +version = "1.14.0" dependencies = [ "ahash", "blake3", @@ -4865,7 +4865,7 @@ dependencies = [ "serde_derive", "serde_json", "sha2 0.10.2", - "solana-frozen-abi-macro 1.11.11", + "solana-frozen-abi-macro 1.14.0", "subtle", "thiserror", ] @@ -4884,7 +4884,7 @@ dependencies = [ [[package]] name = "solana-frozen-abi-macro" -version = "1.11.11" +version = "1.14.0" dependencies = [ "proc-macro2 1.0.41", "quote 1.0.18", @@ -4894,26 +4894,26 @@ dependencies = [ [[package]] name = "solana-genesis-utils" -version = "1.11.11" +version = "1.14.0" dependencies = [ "solana-download-utils", "solana-runtime", - "solana-sdk 1.11.11", + "solana-sdk 1.14.0", ] [[package]] name = "solana-geyser-plugin-interface" -version = "1.11.11" +version = "1.14.0" dependencies = [ "log", - "solana-sdk 1.11.11", + "solana-sdk 1.14.0", "solana-transaction-status", "thiserror", ] [[package]] name = "solana-geyser-plugin-manager" -version = "1.11.11" +version = "1.14.0" dependencies = [ "bs58", "crossbeam-channel", @@ -4926,14 +4926,14 @@ dependencies = [ "solana-metrics", "solana-rpc", "solana-runtime", - "solana-sdk 1.11.11", + "solana-sdk 1.14.0", "solana-transaction-status", "thiserror", ] [[package]] name = "solana-gossip" -version = "1.11.11" +version = "1.14.0" dependencies = [ "bincode", "bv", @@ -4957,17 +4957,17 @@ dependencies = [ "solana-clap-utils", "solana-client", "solana-entry", - "solana-frozen-abi 1.11.11", - "solana-frozen-abi-macro 1.11.11", + "solana-frozen-abi 1.14.0", + "solana-frozen-abi-macro 1.14.0", "solana-ledger", - "solana-logger 1.11.11", + "solana-logger 1.14.0", "solana-measure", "solana-metrics", "solana-net-utils", "solana-perf", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.11.11", + "solana-sdk 1.14.0", "solana-streamer", "solana-version", "solana-vote-program", @@ -4976,7 +4976,7 @@ dependencies = [ [[package]] name = "solana-ledger" -version = "1.11.11" +version = "1.14.0" dependencies = [ "bincode", "bitflags", @@ -5007,15 +5007,15 @@ dependencies = [ "solana-account-decoder", "solana-bpf-loader-program", "solana-entry", - "solana-frozen-abi 1.11.11", - "solana-frozen-abi-macro 1.11.11", + "solana-frozen-abi 1.14.0", + "solana-frozen-abi-macro 1.14.0", "solana-measure", "solana-metrics", "solana-perf", "solana-program-runtime", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.11.11", + "solana-sdk 1.14.0", "solana-stake-program", "solana-storage-bigtable", "solana-storage-proto", @@ -5044,7 +5044,7 @@ dependencies = [ [[package]] name = "solana-logger" -version = "1.11.11" +version = "1.14.0" dependencies = [ "env_logger", "lazy_static", @@ -5053,36 +5053,36 @@ dependencies = [ [[package]] name = "solana-measure" -version = "1.11.11" +version = "1.14.0" dependencies = [ "log", - "solana-sdk 1.11.11", + "solana-sdk 1.14.0", ] [[package]] name = "solana-merkle-tree" -version = "1.11.11" +version = "1.14.0" dependencies = [ "fast-math", "matches", - "solana-program 1.11.11", + "solana-program 1.14.0", ] [[package]] name = "solana-metrics" -version = "1.11.11" +version = "1.14.0" dependencies = [ "crossbeam-channel", "gethostname", "lazy_static", "log", "reqwest", - "solana-sdk 1.11.11", + "solana-sdk 1.14.0", ] [[package]] name = "solana-net-utils" -version = "1.11.11" +version = "1.14.0" dependencies = [ "bincode", "clap 3.1.6", @@ -5093,8 +5093,8 @@ dependencies = [ "serde", "serde_derive", "socket2", - "solana-logger 1.11.11", - "solana-sdk 1.11.11", + "solana-logger 1.14.0", + "solana-sdk 1.14.0", "solana-version", "tokio", "url 2.2.2", @@ -5102,7 +5102,7 @@ dependencies = [ [[package]] name = "solana-perf" -version = "1.11.11" +version = "1.14.0" dependencies = [ "ahash", "bincode", @@ -5121,13 +5121,13 @@ dependencies = [ "serde", "solana-metrics", "solana-rayon-threadlimit", - "solana-sdk 1.11.11", + "solana-sdk 1.14.0", "solana-vote-program", ] [[package]] name = "solana-poh" -version = "1.11.11" +version = "1.14.0" dependencies = [ "core_affinity", "crossbeam-channel", @@ -5137,7 +5137,7 @@ dependencies = [ "solana-measure", "solana-metrics", "solana-runtime", - "solana-sdk 1.11.11", + "solana-sdk 1.14.0", "solana-sys-tuner", "thiserror", ] @@ -5186,7 +5186,7 @@ dependencies = [ [[package]] name = "solana-program" -version = "1.11.11" +version = "1.14.0" dependencies = [ "base64 0.13.0", "bincode", @@ -5222,9 +5222,9 @@ dependencies = [ "serde_json", "sha2 0.10.2", "sha3 0.10.1", - "solana-frozen-abi 1.11.11", - "solana-frozen-abi-macro 1.11.11", - "solana-sdk-macro 1.11.11", + "solana-frozen-abi 1.14.0", + "solana-frozen-abi-macro 1.14.0", + "solana-sdk-macro 1.14.0", "thiserror", "tiny-bip39", "wasm-bindgen", @@ -5233,7 +5233,7 @@ dependencies = [ [[package]] name = "solana-program-runtime" -version = "1.11.11" +version = "1.14.0" dependencies = [ "base64 0.13.0", "bincode", @@ -5247,17 +5247,17 @@ dependencies = [ "num-traits", "rustc_version", "serde", - "solana-frozen-abi 1.11.11", - "solana-frozen-abi-macro 1.11.11", + "solana-frozen-abi 1.14.0", + "solana-frozen-abi-macro 1.14.0", "solana-measure", "solana-metrics", - "solana-sdk 1.11.11", + "solana-sdk 1.14.0", "thiserror", ] [[package]] name = "solana-program-test" -version = "1.11.11" +version = "1.14.0" dependencies = [ "assert_matches", "async-trait", @@ -5269,10 +5269,10 @@ dependencies = [ "solana-banks-client", "solana-banks-server", "solana-bpf-loader-program", - "solana-logger 1.11.11", + "solana-logger 1.14.0", "solana-program-runtime", "solana-runtime", - "solana-sdk 1.11.11", + "solana-sdk 1.14.0", "solana-vote-program", "thiserror", "tokio", @@ -5280,7 +5280,7 @@ dependencies = [ [[package]] name = "solana-rayon-threadlimit" -version = "1.11.11" +version = "1.14.0" dependencies = [ "lazy_static", "num_cpus", @@ -5288,7 +5288,7 @@ dependencies = [ [[package]] name = "solana-remote-wallet" -version = "1.11.11" +version = "1.14.0" dependencies = [ "console", "dialoguer", @@ -5298,14 +5298,14 @@ dependencies = [ "parking_lot 0.12.1", "qstring", "semver", - "solana-sdk 1.11.11", + "solana-sdk 1.14.0", "thiserror", "uriparse", ] [[package]] name = "solana-rpc" -version = "1.11.11" +version = "1.14.0" dependencies = [ "base64 0.13.0", "bincode", @@ -5338,7 +5338,7 @@ dependencies = [ "solana-poh", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.11.11", + "solana-sdk 1.14.0", "solana-send-transaction-service", "solana-stake-program", "solana-storage-bigtable", @@ -5356,7 +5356,7 @@ dependencies = [ [[package]] name = "solana-runtime" -version = "1.11.11" +version = "1.14.0" dependencies = [ "arrayref", "bincode", @@ -5392,17 +5392,17 @@ dependencies = [ "solana-bucket-map", "solana-compute-budget-program", "solana-config-program", - "solana-frozen-abi 1.11.11", - "solana-frozen-abi-macro 1.11.11", + "solana-frozen-abi 1.14.0", + "solana-frozen-abi-macro 1.14.0", "solana-measure", "solana-metrics", "solana-program-runtime", "solana-rayon-threadlimit", - "solana-sdk 1.11.11", + "solana-sdk 1.14.0", "solana-stake-program", "solana-vote-program", "solana-zk-token-proof-program", - "solana-zk-token-sdk 1.11.11", + "solana-zk-token-sdk 1.14.0", "strum", "strum_macros", "symlink", @@ -5465,7 +5465,7 @@ dependencies = [ [[package]] name = "solana-sdk" -version = "1.11.11" +version = "1.14.0" dependencies = [ "assert_matches", "base64 0.13.0", @@ -5502,11 +5502,11 @@ dependencies = [ "serde_json", "sha2 0.10.2", "sha3 0.10.1", - "solana-frozen-abi 1.11.11", - "solana-frozen-abi-macro 1.11.11", - "solana-logger 1.11.11", - "solana-program 1.11.11", - "solana-sdk-macro 1.11.11", + "solana-frozen-abi 1.14.0", + "solana-frozen-abi-macro 1.14.0", + "solana-logger 1.14.0", + "solana-program 1.14.0", + "solana-sdk-macro 1.14.0", "thiserror", "uriparse", "wasm-bindgen", @@ -5527,7 +5527,7 @@ dependencies = [ [[package]] name = "solana-sdk-macro" -version = "1.11.11" +version = "1.14.0" dependencies = [ "bs58", "proc-macro2 1.0.41", @@ -5538,7 +5538,7 @@ dependencies = [ [[package]] name = "solana-send-transaction-service" -version = "1.11.11" +version = "1.14.0" dependencies = [ "crossbeam-channel", "log", @@ -5546,12 +5546,12 @@ dependencies = [ "solana-measure", "solana-metrics", "solana-runtime", - "solana-sdk 1.11.11", + "solana-sdk 1.14.0", ] [[package]] name = "solana-stake-program" -version = "1.11.11" +version = "1.14.0" dependencies = [ "bincode", "log", @@ -5561,18 +5561,18 @@ dependencies = [ "serde", "serde_derive", "solana-config-program", - "solana-frozen-abi 1.11.11", - "solana-frozen-abi-macro 1.11.11", + "solana-frozen-abi 1.14.0", + "solana-frozen-abi-macro 1.14.0", "solana-metrics", "solana-program-runtime", - "solana-sdk 1.11.11", + "solana-sdk 1.14.0", "solana-vote-program", "thiserror", ] [[package]] name = "solana-storage-bigtable" -version = "1.11.11" +version = "1.14.0" dependencies = [ "backoff", "bincode", @@ -5593,7 +5593,7 @@ dependencies = [ "serde_derive", "smpl_jwt", "solana-metrics", - "solana-sdk 1.11.11", + "solana-sdk 1.14.0", "solana-storage-proto", "solana-transaction-status", "thiserror", @@ -5604,7 +5604,7 @@ dependencies = [ [[package]] name = "solana-storage-proto" -version = "1.11.11" +version = "1.14.0" dependencies = [ "bincode", "bs58", @@ -5612,14 +5612,14 @@ dependencies = [ "protobuf-src", "serde", "solana-account-decoder", - "solana-sdk 1.11.11", + "solana-sdk 1.14.0", "solana-transaction-status", "tonic-build 0.8.0", ] [[package]] name = "solana-streamer" -version = "1.11.11" +version = "1.14.0" dependencies = [ "crossbeam-channel", "futures-util", @@ -5638,7 +5638,7 @@ dependencies = [ "rustls 0.20.6", "solana-metrics", "solana-perf", - "solana-sdk 1.11.11", + "solana-sdk 1.14.0", "thiserror", "tokio", "x509-parser", @@ -5646,13 +5646,13 @@ dependencies = [ [[package]] name = "solana-sys-tuner" -version = "1.11.11" +version = "1.14.0" dependencies = [ "clap 2.33.3", "libc", "log", "nix", - "solana-logger 1.11.11", + "solana-logger 1.14.0", "solana-version", "sysctl", "unix_socket2", @@ -5661,7 +5661,7 @@ dependencies = [ [[package]] name = "solana-test-validator" -version = "1.11.11" +version = "1.14.0" dependencies = [ "base64 0.13.0", "log", @@ -5672,20 +5672,20 @@ dependencies = [ "solana-core", "solana-gossip", "solana-ledger", - "solana-logger 1.11.11", + "solana-logger 1.14.0", "solana-net-utils", "solana-program-runtime", "solana-program-test", "solana-rpc", "solana-runtime", - "solana-sdk 1.11.11", + "solana-sdk 1.14.0", "solana-streamer", "tokio", ] [[package]] name = "solana-transaction-status" -version = "1.11.11" +version = "1.14.0" dependencies = [ "Inflector", "base64 0.13.0", @@ -5700,7 +5700,7 @@ dependencies = [ "solana-account-decoder", "solana-measure", "solana-metrics", - "solana-sdk 1.11.11", + "solana-sdk 1.14.0", "solana-vote-program", "spl-associated-token-account", "spl-memo", @@ -5711,7 +5711,7 @@ dependencies = [ [[package]] name = "solana-validator" -version = "1.11.11" +version = "1.14.0" dependencies = [ "chrono", "clap 2.33.3", @@ -5742,14 +5742,14 @@ dependencies = [ "solana-genesis-utils", "solana-gossip", "solana-ledger", - "solana-logger 1.11.11", + "solana-logger 1.14.0", "solana-metrics", "solana-net-utils", "solana-perf", "solana-poh", "solana-rpc", "solana-runtime", - "solana-sdk 1.11.11", + "solana-sdk 1.14.0", "solana-send-transaction-service", "solana-storage-bigtable", "solana-streamer", @@ -5762,21 +5762,21 @@ dependencies = [ [[package]] name = "solana-version" -version = "1.11.11" +version = "1.14.0" dependencies = [ "log", "rustc_version", "semver", "serde", "serde_derive", - "solana-frozen-abi 1.11.11", - "solana-frozen-abi-macro 1.11.11", - "solana-sdk 1.11.11", + "solana-frozen-abi 1.14.0", + "solana-frozen-abi-macro 1.14.0", + "solana-sdk 1.14.0", ] [[package]] name = "solana-vote-program" -version = "1.11.11" +version = "1.14.0" dependencies = [ "bincode", "log", @@ -5785,25 +5785,25 @@ dependencies = [ "rustc_version", "serde", "serde_derive", - "solana-frozen-abi 1.11.11", - "solana-frozen-abi-macro 1.11.11", + "solana-frozen-abi 1.14.0", + "solana-frozen-abi-macro 1.14.0", "solana-metrics", "solana-program-runtime", - "solana-sdk 1.11.11", + "solana-sdk 1.14.0", "thiserror", ] [[package]] name = "solana-zk-token-proof-program" -version = "1.11.11" +version = "1.14.0" dependencies = [ "bytemuck", "getrandom 0.1.14", "num-derive", "num-traits", "solana-program-runtime", - "solana-sdk 1.11.11", - "solana-zk-token-sdk 1.11.11", + "solana-sdk 1.14.0", + "solana-zk-token-sdk 1.14.0", ] [[package]] @@ -5838,7 +5838,7 @@ dependencies = [ [[package]] name = "solana-zk-token-sdk" -version = "1.11.11" +version = "1.14.0" dependencies = [ "aes-gcm-siv", "arrayref", @@ -5858,8 +5858,8 @@ dependencies = [ "serde", "serde_json", "sha3 0.9.1", - "solana-program 1.11.11", - "solana-sdk 1.11.11", + "solana-program 1.14.0", + "solana-sdk 1.14.0", "subtle", "thiserror", "zeroize", diff --git a/programs/bpf/Cargo.toml b/programs/bpf/Cargo.toml index 96e43129f4e183..596960fa5e503f 100644 --- a/programs/bpf/Cargo.toml +++ b/programs/bpf/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "solana-bpf-programs" description = "Blockchain, Rebuilt for Scale" -version = "1.11.11" +version = "1.14.0" documentation = "https://docs.rs/solana" homepage = "https://solana.com/" readme = "README.md" @@ -26,22 +26,22 @@ itertools = "0.10.1" log = "0.4.11" miow = "0.3.6" net2 = "0.2.37" -solana-account-decoder = { path = "../../account-decoder", version = "=1.11.11" } -solana-bpf-loader-program = { path = "../bpf_loader", version = "=1.11.11" } -solana-bpf-rust-invoke = { path = "rust/invoke", version = "=1.11.11" } -solana-bpf-rust-realloc = { path = "rust/realloc", version = "=1.11.11" } -solana-bpf-rust-realloc-invoke = { path = "rust/realloc_invoke", version = "=1.11.11" } -solana-cli-output = { path = "../../cli-output", version = "=1.11.11" } -solana-logger = { path = "../../logger", version = "=1.11.11" } -solana-measure = { path = "../../measure", version = "=1.11.11" } -solana-program-runtime = { path = "../../program-runtime", version = "=1.11.11" } -solana-runtime = { path = "../../runtime", version = "=1.11.11" } -solana-sdk = { path = "../../sdk", version = "=1.11.11" } -solana-transaction-status = { path = "../../transaction-status", version = "=1.11.11" } +solana-account-decoder = { path = "../../account-decoder", version = "=1.14.0" } +solana-bpf-loader-program = { path = "../bpf_loader", version = "=1.14.0" } +solana-bpf-rust-invoke = { path = "rust/invoke", version = "=1.14.0" } +solana-bpf-rust-realloc = { path = "rust/realloc", version = "=1.14.0" } +solana-bpf-rust-realloc-invoke = { path = "rust/realloc_invoke", version = "=1.14.0" } +solana-cli-output = { path = "../../cli-output", version = "=1.14.0" } +solana-logger = { path = "../../logger", version = "=1.14.0" } +solana-measure = { path = "../../measure", version = "=1.14.0" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.0" } +solana-runtime = { path = "../../runtime", version = "=1.14.0" } +solana-sdk = { path = "../../sdk", version = "=1.14.0" } +solana-transaction-status = { path = "../../transaction-status", version = "=1.14.0" } solana_rbpf = "=0.2.31" [dev-dependencies] -solana-ledger = { path = "../../ledger", version = "=1.11.11" } +solana-ledger = { path = "../../ledger", version = "=1.14.0" } [[bench]] name = "bpf_loader" diff --git a/programs/bpf/rust/128bit/Cargo.toml b/programs/bpf/rust/128bit/Cargo.toml index 8b1541e7f05f03..a86e5c378387cd 100644 --- a/programs/bpf/rust/128bit/Cargo.toml +++ b/programs/bpf/rust/128bit/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-128bit" -version = "1.11.11" +version = "1.14.0" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ documentation = "https://docs.rs/solana-bpf-rust-128bit" edition = "2021" [dependencies] -solana-bpf-rust-128bit-dep = { path = "../128bit_dep", version = "=1.11.11" } -solana-program = { path = "../../../../sdk/program", version = "=1.11.11" } +solana-bpf-rust-128bit-dep = { path = "../128bit_dep", version = "=1.14.0" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.0" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/128bit_dep/Cargo.toml b/programs/bpf/rust/128bit_dep/Cargo.toml index 9c6f3abefc000c..e8669dbdb7ba2b 100644 --- a/programs/bpf/rust/128bit_dep/Cargo.toml +++ b/programs/bpf/rust/128bit_dep/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-128bit-dep" -version = "1.11.11" +version = "1.14.0" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-128bit-dep" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.11" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.0" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/bpf/rust/alloc/Cargo.toml b/programs/bpf/rust/alloc/Cargo.toml index b5cab48300188f..b1522312fd8c5c 100644 --- a/programs/bpf/rust/alloc/Cargo.toml +++ b/programs/bpf/rust/alloc/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-alloc" -version = "1.11.11" +version = "1.14.0" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-alloc" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.11" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.0" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/call_depth/Cargo.toml b/programs/bpf/rust/call_depth/Cargo.toml index 25c883a0eb6062..c7f0541c6efeff 100644 --- a/programs/bpf/rust/call_depth/Cargo.toml +++ b/programs/bpf/rust/call_depth/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-call-depth" -version = "1.11.11" +version = "1.14.0" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-call-depth" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.11" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.0" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/caller_access/Cargo.toml b/programs/bpf/rust/caller_access/Cargo.toml index 5b884f86d07031..d854999daea7c1 100644 --- a/programs/bpf/rust/caller_access/Cargo.toml +++ b/programs/bpf/rust/caller_access/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-caller-access" -version = "1.11.11" +version = "1.14.0" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-caller-access" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.11" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.0" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/curve25519/Cargo.toml b/programs/bpf/rust/curve25519/Cargo.toml index 667afdf53bb9ce..e6f1a5a5f60c72 100644 --- a/programs/bpf/rust/curve25519/Cargo.toml +++ b/programs/bpf/rust/curve25519/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-curve25519" -version = "1.11.11" +version = "1.14.0" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ documentation = "https://docs.rs/solana-bpf-rust-zktoken_crypto" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.11" } -solana-zk-token-sdk = { path = "../../../../zk-token-sdk", version = "=1.11.11" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.0" } +solana-zk-token-sdk = { path = "../../../../zk-token-sdk", version = "=1.14.0" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/custom_heap/Cargo.toml b/programs/bpf/rust/custom_heap/Cargo.toml index fff103a87dc6bd..3ec9ff9af6ce71 100644 --- a/programs/bpf/rust/custom_heap/Cargo.toml +++ b/programs/bpf/rust/custom_heap/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-custom-heap" -version = "1.11.11" +version = "1.14.0" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-custom-heap" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.11" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.0" } [features] default = ["custom-heap"] diff --git a/programs/bpf/rust/dep_crate/Cargo.toml b/programs/bpf/rust/dep_crate/Cargo.toml index 128b294807c227..0e46da98944cc0 100644 --- a/programs/bpf/rust/dep_crate/Cargo.toml +++ b/programs/bpf/rust/dep_crate/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-dep-crate" -version = "1.11.11" +version = "1.14.0" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,8 +12,8 @@ edition = "2021" [dependencies] byteorder = { version = "1", default-features = false } # list of crates which must be buildable for bpf programs -solana-address-lookup-table-program = { path = "../../../../programs/address-lookup-table", version = "=1.11.11" } -solana-program = { path = "../../../../sdk/program", version = "=1.11.11" } +solana-address-lookup-table-program = { path = "../../../../programs/address-lookup-table", version = "=1.14.0" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.0" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/deprecated_loader/Cargo.toml b/programs/bpf/rust/deprecated_loader/Cargo.toml index 00ec6f81646441..2eadd86a487a2b 100644 --- a/programs/bpf/rust/deprecated_loader/Cargo.toml +++ b/programs/bpf/rust/deprecated_loader/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-deprecated-loader" -version = "1.11.11" +version = "1.14.0" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-deprecated-loader" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.11" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.0" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/dup_accounts/Cargo.toml b/programs/bpf/rust/dup_accounts/Cargo.toml index 2fcd41204a9000..fa2f64b1f60fe8 100644 --- a/programs/bpf/rust/dup_accounts/Cargo.toml +++ b/programs/bpf/rust/dup_accounts/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-dup-accounts" -version = "1.11.11" +version = "1.14.0" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-dup-accounts" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.11" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.0" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/error_handling/Cargo.toml b/programs/bpf/rust/error_handling/Cargo.toml index 302c34f1ab1a58..0bbb230fc61f7a 100644 --- a/programs/bpf/rust/error_handling/Cargo.toml +++ b/programs/bpf/rust/error_handling/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-error-handling" -version = "1.11.11" +version = "1.14.0" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,7 +12,7 @@ edition = "2021" [dependencies] num-derive = "0.3" num-traits = "0.2" -solana-program = { path = "../../../../sdk/program", version = "=1.11.11" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.0" } thiserror = "1.0" [lib] diff --git a/programs/bpf/rust/external_spend/Cargo.toml b/programs/bpf/rust/external_spend/Cargo.toml index ae3ac90c36d40d..cf8aaf0ead38e4 100644 --- a/programs/bpf/rust/external_spend/Cargo.toml +++ b/programs/bpf/rust/external_spend/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-external-spend" -version = "1.11.11" +version = "1.14.0" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-external-spend" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.11" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.0" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/finalize/Cargo.toml b/programs/bpf/rust/finalize/Cargo.toml index f49f879d128f09..42259b9b71b987 100644 --- a/programs/bpf/rust/finalize/Cargo.toml +++ b/programs/bpf/rust/finalize/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-finalize" -version = "1.11.11" +version = "1.14.0" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-finalize" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.11" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.0" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/get_minimum_delegation/Cargo.toml b/programs/bpf/rust/get_minimum_delegation/Cargo.toml index 44ecd7fef1ea6f..94b3fae087c823 100644 --- a/programs/bpf/rust/get_minimum_delegation/Cargo.toml +++ b/programs/bpf/rust/get_minimum_delegation/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-get-minimum-delegation" -version = "1.11.11" +version = "1.14.0" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-get-minimum-delegation" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.11" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.0" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/inner_instruction_alignment_check/Cargo.toml b/programs/bpf/rust/inner_instruction_alignment_check/Cargo.toml index 8f920928ec322f..fc0212966fa5d6 100644 --- a/programs/bpf/rust/inner_instruction_alignment_check/Cargo.toml +++ b/programs/bpf/rust/inner_instruction_alignment_check/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-inner_instruction_alignment_check" -version = "1.11.11" +version = "1.14.0" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-inner_instruction_alignment_che edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.11" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.0" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/instruction_introspection/Cargo.toml b/programs/bpf/rust/instruction_introspection/Cargo.toml index 6f901fdc1b593b..b091aba070fbfa 100644 --- a/programs/bpf/rust/instruction_introspection/Cargo.toml +++ b/programs/bpf/rust/instruction_introspection/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-instruction-introspection" -version = "1.11.11" +version = "1.14.0" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-instruction-introspection" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.11" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.0" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/invoke/Cargo.toml b/programs/bpf/rust/invoke/Cargo.toml index a721201e146c16..9673bdebbf3e4e 100644 --- a/programs/bpf/rust/invoke/Cargo.toml +++ b/programs/bpf/rust/invoke/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-invoke" -version = "1.11.11" +version = "1.14.0" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -15,7 +15,7 @@ program = [] [dependencies] solana-bpf-rust-invoked = { path = "../invoked", default-features = false } -solana-program = { path = "../../../../sdk/program", version = "=1.11.11" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.0" } [lib] crate-type = ["lib", "cdylib"] diff --git a/programs/bpf/rust/invoke_and_error/Cargo.toml b/programs/bpf/rust/invoke_and_error/Cargo.toml index a4a21322c5701c..d105272e358e71 100644 --- a/programs/bpf/rust/invoke_and_error/Cargo.toml +++ b/programs/bpf/rust/invoke_and_error/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-invoke-and-error" -version = "1.11.11" +version = "1.14.0" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-invoke-and-error" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.11" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.0" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/invoke_and_ok/Cargo.toml b/programs/bpf/rust/invoke_and_ok/Cargo.toml index a904d03e12a600..3d8aedc15c3722 100644 --- a/programs/bpf/rust/invoke_and_ok/Cargo.toml +++ b/programs/bpf/rust/invoke_and_ok/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-invoke-and-ok" -version = "1.11.11" +version = "1.14.0" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-invoke-and-ok" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.11" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.0" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/invoke_and_return/Cargo.toml b/programs/bpf/rust/invoke_and_return/Cargo.toml index 6ca5547482dc09..2f49c15b3ca711 100644 --- a/programs/bpf/rust/invoke_and_return/Cargo.toml +++ b/programs/bpf/rust/invoke_and_return/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-invoke-and-return" -version = "1.11.11" +version = "1.14.0" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-invoke-and-return" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.11" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.0" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/invoked/Cargo.toml b/programs/bpf/rust/invoked/Cargo.toml index edca1a38b63aba..557d73d4e0e5be 100644 --- a/programs/bpf/rust/invoked/Cargo.toml +++ b/programs/bpf/rust/invoked/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-invoked" -version = "1.11.11" +version = "1.14.0" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,7 +14,7 @@ default = ["program"] program = [] [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.11" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.0" } [lib] crate-type = ["lib", "cdylib"] diff --git a/programs/bpf/rust/iter/Cargo.toml b/programs/bpf/rust/iter/Cargo.toml index c52c1d571cf1d5..2ed9eb44ffed44 100644 --- a/programs/bpf/rust/iter/Cargo.toml +++ b/programs/bpf/rust/iter/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-iter" -version = "1.11.11" +version = "1.14.0" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-iter" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.11" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.0" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/log_data/Cargo.toml b/programs/bpf/rust/log_data/Cargo.toml index 7aa407adc16edc..9a110fee393149 100644 --- a/programs/bpf/rust/log_data/Cargo.toml +++ b/programs/bpf/rust/log_data/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-log-data" -version = "1.11.11" +version = "1.14.0" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-log-data" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.11" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.0" } [features] default = ["program"] diff --git a/programs/bpf/rust/many_args/Cargo.toml b/programs/bpf/rust/many_args/Cargo.toml index fce5f3aa5bcb44..ea166c372d3397 100644 --- a/programs/bpf/rust/many_args/Cargo.toml +++ b/programs/bpf/rust/many_args/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-many-args" -version = "1.11.11" +version = "1.14.0" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ documentation = "https://docs.rs/solana-bpf-rust-many-args" edition = "2021" [dependencies] -solana-bpf-rust-many-args-dep = { path = "../many_args_dep", version = "=1.11.11" } -solana-program = { path = "../../../../sdk/program", version = "=1.11.11" } +solana-bpf-rust-many-args-dep = { path = "../many_args_dep", version = "=1.14.0" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.0" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/many_args_dep/Cargo.toml b/programs/bpf/rust/many_args_dep/Cargo.toml index b6679b9acc1fd7..22ad6e45305a2f 100644 --- a/programs/bpf/rust/many_args_dep/Cargo.toml +++ b/programs/bpf/rust/many_args_dep/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-many-args-dep" -version = "1.11.11" +version = "1.14.0" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-many-args-dep" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.11" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.0" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/bpf/rust/mem/Cargo.toml b/programs/bpf/rust/mem/Cargo.toml index 259f5703c05aab..fc7784cb0d5998 100644 --- a/programs/bpf/rust/mem/Cargo.toml +++ b/programs/bpf/rust/mem/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-mem" -version = "1.11.11" +version = "1.14.0" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,12 +13,12 @@ edition = "2021" no-entrypoint = [] [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.11" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.0" } [dev-dependencies] -solana-program-runtime = { path = "../../../../program-runtime", version = "=1.11.11" } -solana-program-test = { path = "../../../../program-test", version = "=1.11.11" } -solana-sdk = { path = "../../../../sdk", version = "=1.11.11" } +solana-program-runtime = { path = "../../../../program-runtime", version = "=1.14.0" } +solana-program-test = { path = "../../../../program-test", version = "=1.14.0" } +solana-sdk = { path = "../../../../sdk", version = "=1.14.0" } [lib] crate-type = ["cdylib", "lib"] diff --git a/programs/bpf/rust/membuiltins/Cargo.toml b/programs/bpf/rust/membuiltins/Cargo.toml index e8a4286a7933db..ecf0b409c0c764 100644 --- a/programs/bpf/rust/membuiltins/Cargo.toml +++ b/programs/bpf/rust/membuiltins/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-membuiltins" -version = "1.11.11" +version = "1.14.0" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ documentation = "https://docs.rs/solana-bpf-rust-mem" edition = "2021" [dependencies] -solana-bpf-rust-mem = { path = "../mem", version = "=1.11.11", features = [ "no-entrypoint" ] } -solana-program = { path = "../../../../sdk/program", version = "=1.11.11" } +solana-bpf-rust-mem = { path = "../mem", version = "=1.14.0", features = [ "no-entrypoint" ] } +solana-program = { path = "../../../../sdk/program", version = "=1.14.0" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/noop/Cargo.toml b/programs/bpf/rust/noop/Cargo.toml index 3a540d17a0f183..5f2a8c66630418 100644 --- a/programs/bpf/rust/noop/Cargo.toml +++ b/programs/bpf/rust/noop/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-noop" -version = "1.11.11" +version = "1.14.0" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-noop" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.11" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.0" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/panic/Cargo.toml b/programs/bpf/rust/panic/Cargo.toml index a73cdd65db61db..f609e2ab9ae185 100644 --- a/programs/bpf/rust/panic/Cargo.toml +++ b/programs/bpf/rust/panic/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-panic" -version = "1.11.11" +version = "1.14.0" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-panic" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.11" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.0" } [features] default = ["custom-panic"] diff --git a/programs/bpf/rust/param_passing/Cargo.toml b/programs/bpf/rust/param_passing/Cargo.toml index cae1126346d3f2..cadd223bd58de3 100644 --- a/programs/bpf/rust/param_passing/Cargo.toml +++ b/programs/bpf/rust/param_passing/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-param-passing" -version = "1.11.11" +version = "1.14.0" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ documentation = "https://docs.rs/solana-bpf-rust-param-passing" edition = "2021" [dependencies] -solana-bpf-rust-param-passing-dep = { path = "../param_passing_dep", version = "=1.11.11" } -solana-program = { path = "../../../../sdk/program", version = "=1.11.11" } +solana-bpf-rust-param-passing-dep = { path = "../param_passing_dep", version = "=1.14.0" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.0" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/param_passing_dep/Cargo.toml b/programs/bpf/rust/param_passing_dep/Cargo.toml index 83c4a6075e2817..4b129d1744d53d 100644 --- a/programs/bpf/rust/param_passing_dep/Cargo.toml +++ b/programs/bpf/rust/param_passing_dep/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-param-passing-dep" -version = "1.11.11" +version = "1.14.0" description = "Solana BPF program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-param-passing-dep" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.11" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.0" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/bpf/rust/rand/Cargo.toml b/programs/bpf/rust/rand/Cargo.toml index b7a55d958ea353..d97fcd348f1482 100644 --- a/programs/bpf/rust/rand/Cargo.toml +++ b/programs/bpf/rust/rand/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-rand" -version = "1.11.11" +version = "1.14.0" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,7 +12,7 @@ edition = "2021" [dependencies] getrandom = { version = "0.1.14", features = ["dummy"] } rand = "0.7" -solana-program = { path = "../../../../sdk/program", version = "=1.11.11" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.0" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/realloc/Cargo.toml b/programs/bpf/rust/realloc/Cargo.toml index 3b7996862d6af6..89af7309fc22c6 100644 --- a/programs/bpf/rust/realloc/Cargo.toml +++ b/programs/bpf/rust/realloc/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-realloc" -version = "1.11.11" +version = "1.14.0" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,7 +14,7 @@ default = ["program"] program = [] [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.11" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.0" } [lib] crate-type = ["lib", "cdylib"] diff --git a/programs/bpf/rust/realloc_invoke/Cargo.toml b/programs/bpf/rust/realloc_invoke/Cargo.toml index 7b0eeb5c05786c..978ff3269ec50c 100644 --- a/programs/bpf/rust/realloc_invoke/Cargo.toml +++ b/programs/bpf/rust/realloc_invoke/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-realloc-invoke" -version = "1.11.11" +version = "1.14.0" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,8 +14,8 @@ default = ["program"] program = [] [dependencies] -solana-bpf-rust-realloc = { path = "../realloc", version = "=1.11.11", default-features = false } -solana-program = { path = "../../../../sdk/program", version = "=1.11.11" } +solana-bpf-rust-realloc = { path = "../realloc", version = "=1.14.0", default-features = false } +solana-program = { path = "../../../../sdk/program", version = "=1.14.0" } [lib] crate-type = ["lib", "cdylib"] diff --git a/programs/bpf/rust/ro_account_modify/Cargo.toml b/programs/bpf/rust/ro_account_modify/Cargo.toml index 05d6bff8fecf76..8bdd3013ec3908 100644 --- a/programs/bpf/rust/ro_account_modify/Cargo.toml +++ b/programs/bpf/rust/ro_account_modify/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-ro-account_modify" -version = "1.11.11" +version = "1.14.0" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-ro-modify" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.11" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.0" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/ro_modify/Cargo.toml b/programs/bpf/rust/ro_modify/Cargo.toml index 0fad4772bd5cf5..0641cd0c72c657 100644 --- a/programs/bpf/rust/ro_modify/Cargo.toml +++ b/programs/bpf/rust/ro_modify/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-ro-modify" -version = "1.11.11" +version = "1.14.0" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-ro-modify" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.11" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.0" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/sanity/Cargo.toml b/programs/bpf/rust/sanity/Cargo.toml index 46f4d30e687d9c..6fb68032c9b6fe 100644 --- a/programs/bpf/rust/sanity/Cargo.toml +++ b/programs/bpf/rust/sanity/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-sanity" -version = "1.11.11" +version = "1.14.0" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,12 +13,12 @@ edition = "2021" test-bpf = [] [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.11" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.0" } [dev-dependencies] -solana-program-runtime = { path = "../../../../program-runtime", version = "=1.11.11" } -solana-program-test = { path = "../../../../program-test", version = "=1.11.11" } -solana-sdk = { path = "../../../../sdk", version = "=1.11.11" } +solana-program-runtime = { path = "../../../../program-runtime", version = "=1.14.0" } +solana-program-test = { path = "../../../../program-test", version = "=1.14.0" } +solana-sdk = { path = "../../../../sdk", version = "=1.14.0" } [lib] crate-type = ["cdylib", "lib"] diff --git a/programs/bpf/rust/secp256k1_recover/Cargo.toml b/programs/bpf/rust/secp256k1_recover/Cargo.toml index 9c4be3245d2108..9ca5b6585fbf6f 100644 --- a/programs/bpf/rust/secp256k1_recover/Cargo.toml +++ b/programs/bpf/rust/secp256k1_recover/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-secp256k1-recover" -version = "1.11.11" +version = "1.14.0" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -11,7 +11,7 @@ edition = "2021" [dependencies] libsecp256k1 = { version = "0.7.0", default-features = false } -solana-program = { path = "../../../../sdk/program", version = "=1.11.11" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.0" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/sha/Cargo.toml b/programs/bpf/rust/sha/Cargo.toml index c6cb3bbd4c2ef5..5543a70f0a6b4c 100644 --- a/programs/bpf/rust/sha/Cargo.toml +++ b/programs/bpf/rust/sha/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-sha" -version = "1.11.11" +version = "1.14.0" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -11,7 +11,7 @@ edition = "2021" [dependencies] blake3 = "1.0.0" -solana-program = { path = "../../../../sdk/program", version = "=1.11.11" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.0" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/sibling_inner_instruction/Cargo.toml b/programs/bpf/rust/sibling_inner_instruction/Cargo.toml index 37a4572a51c564..7f1aef4e289dad 100644 --- a/programs/bpf/rust/sibling_inner_instruction/Cargo.toml +++ b/programs/bpf/rust/sibling_inner_instruction/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-sibling_inner-instructions" -version = "1.11.11" +version = "1.14.0" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-log-data" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.11" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.0" } [features] default = ["program"] diff --git a/programs/bpf/rust/sibling_instruction/Cargo.toml b/programs/bpf/rust/sibling_instruction/Cargo.toml index 8ba09ed6190a1d..6e9c6dda0baf4e 100644 --- a/programs/bpf/rust/sibling_instruction/Cargo.toml +++ b/programs/bpf/rust/sibling_instruction/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-sibling-instructions" -version = "1.11.11" +version = "1.14.0" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-log-data" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.11" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.0" } [features] default = ["program"] diff --git a/programs/bpf/rust/simulation/Cargo.toml b/programs/bpf/rust/simulation/Cargo.toml index f09b9e418cdb03..1b1c1bd0cccf90 100644 --- a/programs/bpf/rust/simulation/Cargo.toml +++ b/programs/bpf/rust/simulation/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-simulation" -version = "1.11.11" +version = "1.14.0" description = "Solana BPF Program Simulation Differences" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,13 +13,13 @@ edition = "2021" test-bpf = [] [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.11" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.0" } [dev-dependencies] -solana-logger = { path = "../../../../logger", version = "=1.11.11" } -solana-program-test = { path = "../../../../program-test", version = "=1.11.11" } -solana-sdk = { path = "../../../../sdk", version = "=1.11.11" } -solana-validator = { path = "../../../../validator", version = "=1.11.11" } +solana-logger = { path = "../../../../logger", version = "=1.14.0" } +solana-program-test = { path = "../../../../program-test", version = "=1.14.0" } +solana-sdk = { path = "../../../../sdk", version = "=1.14.0" } +solana-validator = { path = "../../../../validator", version = "=1.14.0" } [lib] crate-type = ["cdylib", "lib"] diff --git a/programs/bpf/rust/spoof1/Cargo.toml b/programs/bpf/rust/spoof1/Cargo.toml index 75c298b38cecdb..a5fb89edfbd45e 100644 --- a/programs/bpf/rust/spoof1/Cargo.toml +++ b/programs/bpf/rust/spoof1/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-spoof1" -version = "1.11.11" +version = "1.14.0" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-spoof1" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.11" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.0" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/spoof1_system/Cargo.toml b/programs/bpf/rust/spoof1_system/Cargo.toml index a73c596eb6e3b3..ca965efd55e6c5 100644 --- a/programs/bpf/rust/spoof1_system/Cargo.toml +++ b/programs/bpf/rust/spoof1_system/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-spoof1-system" -version = "1.11.11" +version = "1.14.0" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-spoof1-system" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.11" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.0" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/sysvar/Cargo.toml b/programs/bpf/rust/sysvar/Cargo.toml index cdb7f4cd86acdb..ab53a6b0b4173a 100644 --- a/programs/bpf/rust/sysvar/Cargo.toml +++ b/programs/bpf/rust/sysvar/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-sysvar" -version = "1.11.11" +version = "1.14.0" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,12 +10,12 @@ documentation = "https://docs.rs/solana-bpf-rust-sysvar" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.11" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.0" } [dev-dependencies] -solana-program-runtime = { path = "../../../../program-runtime", version = "=1.11.11" } -solana-program-test = { path = "../../../../program-test", version = "=1.11.11" } -solana-sdk = { path = "../../../../sdk", version = "=1.11.11" } +solana-program-runtime = { path = "../../../../program-runtime", version = "=1.14.0" } +solana-program-test = { path = "../../../../program-test", version = "=1.14.0" } +solana-sdk = { path = "../../../../sdk", version = "=1.14.0" } [lib] crate-type = ["cdylib", "lib"] diff --git a/programs/bpf/rust/upgradeable/Cargo.toml b/programs/bpf/rust/upgradeable/Cargo.toml index 2266b823b51cf4..383714a54d6c5e 100644 --- a/programs/bpf/rust/upgradeable/Cargo.toml +++ b/programs/bpf/rust/upgradeable/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-upgradeable" -version = "1.11.11" +version = "1.14.0" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-upgradeable" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.11" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.0" } [lib] name = "solana_bpf_rust_upgradeable" diff --git a/programs/bpf/rust/upgraded/Cargo.toml b/programs/bpf/rust/upgraded/Cargo.toml index 858a40863a96b3..3bd13102eb9de5 100644 --- a/programs/bpf/rust/upgraded/Cargo.toml +++ b/programs/bpf/rust/upgraded/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-upgraded" -version = "1.11.11" +version = "1.14.0" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-upgraded" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.11.11" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.0" } [lib] name = "solana_bpf_rust_upgraded" diff --git a/programs/bpf_loader/Cargo.toml b/programs/bpf_loader/Cargo.toml index 64bb198062daa3..b4cb1bb0906ef5 100644 --- a/programs/bpf_loader/Cargo.toml +++ b/programs/bpf_loader/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-loader-program" -version = "1.11.11" +version = "1.14.0" description = "Solana BPF loader" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,17 +14,17 @@ bincode = "1.3.3" byteorder = "1.4.3" libsecp256k1 = "0.6.0" log = "0.4.17" -solana-measure = { path = "../../measure", version = "=1.11.11" } -solana-metrics = { path = "../../metrics", version = "=1.11.11" } -solana-program-runtime = { path = "../../program-runtime", version = "=1.11.11" } -solana-sdk = { path = "../../sdk", version = "=1.11.11" } -solana-zk-token-sdk = { path = "../../zk-token-sdk", version = "=1.11.11" } +solana-measure = { path = "../../measure", version = "=1.14.0" } +solana-metrics = { path = "../../metrics", version = "=1.14.0" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.0" } +solana-sdk = { path = "../../sdk", version = "=1.14.0" } +solana-zk-token-sdk = { path = "../../zk-token-sdk", version = "=1.14.0" } solana_rbpf = "=0.2.31" thiserror = "1.0" [dev-dependencies] rand = "0.7.3" -solana-runtime = { path = "../../runtime", version = "=1.11.11" } +solana-runtime = { path = "../../runtime", version = "=1.14.0" } [lib] crate-type = ["lib"] diff --git a/programs/bpf_loader/gen-syscall-list/Cargo.toml b/programs/bpf_loader/gen-syscall-list/Cargo.toml index 101e6c6191286b..6744a5ed2f6bd0 100644 --- a/programs/bpf_loader/gen-syscall-list/Cargo.toml +++ b/programs/bpf_loader/gen-syscall-list/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "gen-syscall-list" -version = "1.11.11" +version = "1.14.0" edition = "2021" license = "Apache-2.0" publish = false diff --git a/programs/compute-budget/Cargo.toml b/programs/compute-budget/Cargo.toml index 1533438e6ceebc..865793787e83c5 100644 --- a/programs/compute-budget/Cargo.toml +++ b/programs/compute-budget/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "solana-compute-budget-program" description = "Solana Compute Budget program" -version = "1.11.11" +version = "1.14.0" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-compute-budget-program" repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ license = "Apache-2.0" edition = "2021" [dependencies] -solana-program-runtime = { path = "../../program-runtime", version = "=1.11.11" } -solana-sdk = { path = "../../sdk", version = "=1.11.11" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.0" } +solana-sdk = { path = "../../sdk", version = "=1.14.0" } [lib] crate-type = ["lib"] diff --git a/programs/config/Cargo.toml b/programs/config/Cargo.toml index 0b73b80f12f4ce..9bb40db33386ed 100644 --- a/programs/config/Cargo.toml +++ b/programs/config/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-config-program" -version = "1.11.11" +version = "1.14.0" description = "Solana Config program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,11 +14,11 @@ bincode = "1.3.3" chrono = { version = "0.4.11", features = ["serde"] } serde = "1.0.138" serde_derive = "1.0.103" -solana-program-runtime = { path = "../../program-runtime", version = "=1.11.11" } -solana-sdk = { path = "../../sdk", version = "=1.11.11" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.0" } +solana-sdk = { path = "../../sdk", version = "=1.14.0" } [dev-dependencies] -solana-logger = { path = "../../logger", version = "=1.11.11" } +solana-logger = { path = "../../logger", version = "=1.14.0" } [lib] crate-type = ["lib"] diff --git a/programs/ed25519-tests/Cargo.toml b/programs/ed25519-tests/Cargo.toml index f21c036bbcc56f..a3b5e5fda39b74 100644 --- a/programs/ed25519-tests/Cargo.toml +++ b/programs/ed25519-tests/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-ed25519-program-tests" -version = "1.11.11" +version = "1.14.0" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" @@ -12,8 +12,8 @@ publish = false assert_matches = "1.5.0" ed25519-dalek = "=1.0.1" rand = "0.7.0" -solana-program-test = { path = "../../program-test", version = "=1.11.11" } -solana-sdk = { path = "../../sdk", version = "=1.11.11" } +solana-program-test = { path = "../../program-test", version = "=1.14.0" } +solana-sdk = { path = "../../sdk", version = "=1.14.0" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/stake/Cargo.toml b/programs/stake/Cargo.toml index 8423643d2a799b..3cd6c7929e2662 100644 --- a/programs/stake/Cargo.toml +++ b/programs/stake/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-stake-program" -version = "1.11.11" +version = "1.14.0" description = "Solana Stake program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -16,19 +16,19 @@ num-derive = "0.3" num-traits = "0.2" serde = "1.0.138" serde_derive = "1.0.103" -solana-config-program = { path = "../config", version = "=1.11.11" } -solana-frozen-abi = { path = "../../frozen-abi", version = "=1.11.11" } -solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.11.11" } -solana-metrics = { path = "../../metrics", version = "=1.11.11" } -solana-program-runtime = { path = "../../program-runtime", version = "=1.11.11" } -solana-sdk = { path = "../../sdk", version = "=1.11.11" } -solana-vote-program = { path = "../vote", version = "=1.11.11" } +solana-config-program = { path = "../config", version = "=1.14.0" } +solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.0" } +solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.0" } +solana-metrics = { path = "../../metrics", version = "=1.14.0" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.0" } +solana-sdk = { path = "../../sdk", version = "=1.14.0" } +solana-vote-program = { path = "../vote", version = "=1.14.0" } thiserror = "1.0" [dev-dependencies] assert_matches = "1.5.0" proptest = "1.0" -solana-logger = { path = "../../logger", version = "=1.11.11" } +solana-logger = { path = "../../logger", version = "=1.14.0" } test-case = "2.1.0" [build-dependencies] diff --git a/programs/vote/Cargo.toml b/programs/vote/Cargo.toml index 09b87a2488480e..b78692dedb4ed2 100644 --- a/programs/vote/Cargo.toml +++ b/programs/vote/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-vote-program" -version = "1.11.11" +version = "1.14.0" description = "Solana Vote program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -16,17 +16,17 @@ num-derive = "0.3" num-traits = "0.2" serde = "1.0.138" serde_derive = "1.0.103" -solana-frozen-abi = { path = "../../frozen-abi", version = "=1.11.11" } -solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.11.11" } -solana-metrics = { path = "../../metrics", version = "=1.11.11" } -solana-program-runtime = { path = "../../program-runtime", version = "=1.11.11" } -solana-sdk = { path = "../../sdk", version = "=1.11.11" } +solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.0" } +solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.0" } +solana-metrics = { path = "../../metrics", version = "=1.14.0" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.0" } +solana-sdk = { path = "../../sdk", version = "=1.14.0" } thiserror = "1.0" [dev-dependencies] itertools = "0.10.3" rand = "0.7.0" -solana-logger = { path = "../../logger", version = "=1.11.11" } +solana-logger = { path = "../../logger", version = "=1.14.0" } [build-dependencies] rustc_version = "0.4" diff --git a/programs/zk-token-proof/Cargo.toml b/programs/zk-token-proof/Cargo.toml index dc35cc3d1cc5e5..808b5d8584f4dd 100644 --- a/programs/zk-token-proof/Cargo.toml +++ b/programs/zk-token-proof/Cargo.toml @@ -3,7 +3,7 @@ name = "solana-zk-token-proof-program" description = "Solana Zk Token Proof Program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" -version = "1.11.11" +version = "1.14.0" license = "Apache-2.0" edition = "2021" @@ -12,6 +12,6 @@ bytemuck = { version = "1.11.0", features = ["derive"] } getrandom = { version = "0.1", features = ["dummy"] } num-derive = "0.3" num-traits = "0.2" -solana-program-runtime = { path = "../../program-runtime", version = "=1.11.11" } -solana-sdk = { path = "../../sdk", version = "=1.11.11" } -solana-zk-token-sdk = { path = "../../zk-token-sdk", version = "=1.11.11" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.0" } +solana-sdk = { path = "../../sdk", version = "=1.14.0" } +solana-zk-token-sdk = { path = "../../zk-token-sdk", version = "=1.14.0" } diff --git a/rayon-threadlimit/Cargo.toml b/rayon-threadlimit/Cargo.toml index 6a0e07d523cc67..f90a2f409ab0aa 100644 --- a/rayon-threadlimit/Cargo.toml +++ b/rayon-threadlimit/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-rayon-threadlimit" -version = "1.11.11" +version = "1.14.0" description = "solana-rayon-threadlimit" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-rayon-threadlimit" diff --git a/rbpf-cli/Cargo.toml b/rbpf-cli/Cargo.toml index 1fc1971f5e9542..ad2904247c41fd 100644 --- a/rbpf-cli/Cargo.toml +++ b/rbpf-cli/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "rbpf-cli" -version = "1.11.11" +version = "1.14.0" description = "CLI to test and analyze eBPF programs" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/rbpf" @@ -13,8 +13,8 @@ publish = false clap = { version = "3.1.5", features = ["cargo"] } serde = "1.0.138" serde_json = "1.0.81" -solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.11.11" } -solana-logger = { path = "../logger", version = "=1.11.11" } -solana-program-runtime = { path = "../program-runtime", version = "=1.11.11" } -solana-sdk = { path = "../sdk", version = "=1.11.11" } +solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.0" } +solana-logger = { path = "../logger", version = "=1.14.0" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.0" } +solana-sdk = { path = "../sdk", version = "=1.14.0" } solana_rbpf = "=0.2.31" diff --git a/remote-wallet/Cargo.toml b/remote-wallet/Cargo.toml index ef432abff56e1e..6b4c0accae3d9c 100644 --- a/remote-wallet/Cargo.toml +++ b/remote-wallet/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-remote-wallet" description = "Blockchain, Rebuilt for Scale" -version = "1.11.11" +version = "1.14.0" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -19,7 +19,7 @@ num-traits = { version = "0.2" } parking_lot = "0.12" qstring = "0.7.2" semver = "1.0" -solana-sdk = { path = "../sdk", version = "=1.11.11" } +solana-sdk = { path = "../sdk", version = "=1.14.0" } thiserror = "1.0" uriparse = "0.6.4" diff --git a/rpc-test/Cargo.toml b/rpc-test/Cargo.toml index ff7bca9c6277cd..7f3940b0bc874c 100644 --- a/rpc-test/Cargo.toml +++ b/rpc-test/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-rpc-test" -version = "1.11.11" +version = "1.14.0" description = "Solana RPC Test" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -19,17 +19,17 @@ log = "0.4.17" reqwest = { version = "0.11.11", default-features = false, features = ["blocking", "brotli", "deflate", "gzip", "rustls-tls", "json"] } serde = "1.0.138" serde_json = "1.0.81" -solana-account-decoder = { path = "../account-decoder", version = "=1.11.11" } -solana-client = { path = "../client", version = "=1.11.11" } -solana-rpc = { path = "../rpc", version = "=1.11.11" } -solana-sdk = { path = "../sdk", version = "=1.11.11" } -solana-streamer = { path = "../streamer", version = "=1.11.11" } -solana-test-validator = { path = "../test-validator", version = "=1.11.11" } -solana-transaction-status = { path = "../transaction-status", version = "=1.11.11" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.0" } +solana-client = { path = "../client", version = "=1.14.0" } +solana-rpc = { path = "../rpc", version = "=1.14.0" } +solana-sdk = { path = "../sdk", version = "=1.14.0" } +solana-streamer = { path = "../streamer", version = "=1.14.0" } +solana-test-validator = { path = "../test-validator", version = "=1.14.0" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.0" } tokio = { version = "~1.14.1", features = ["full"] } [dev-dependencies] -solana-logger = { path = "../logger", version = "=1.11.11" } +solana-logger = { path = "../logger", version = "=1.14.0" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/rpc/Cargo.toml b/rpc/Cargo.toml index 44f57e84adfd34..1b632c7bccbab5 100644 --- a/rpc/Cargo.toml +++ b/rpc/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-rpc" -version = "1.11.11" +version = "1.14.0" description = "Solana RPC" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -29,26 +29,26 @@ serde = "1.0.138" serde_derive = "1.0.103" serde_json = "1.0.81" soketto = "0.7" -solana-account-decoder = { path = "../account-decoder", version = "=1.11.11" } -solana-client = { path = "../client", version = "=1.11.11" } -solana-entry = { path = "../entry", version = "=1.11.11" } -solana-faucet = { path = "../faucet", version = "=1.11.11" } -solana-gossip = { path = "../gossip", version = "=1.11.11" } -solana-ledger = { path = "../ledger", version = "=1.11.11" } -solana-measure = { path = "../measure", version = "=1.11.11" } -solana-metrics = { path = "../metrics", version = "=1.11.11" } -solana-perf = { path = "../perf", version = "=1.11.11" } -solana-poh = { path = "../poh", version = "=1.11.11" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.11.11" } -solana-runtime = { path = "../runtime", version = "=1.11.11" } -solana-sdk = { path = "../sdk", version = "=1.11.11" } -solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.11.11" } -solana-stake-program = { path = "../programs/stake", version = "=1.11.11" } -solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.11.11" } -solana-streamer = { path = "../streamer", version = "=1.11.11" } -solana-transaction-status = { path = "../transaction-status", version = "=1.11.11" } -solana-version = { path = "../version", version = "=1.11.11" } -solana-vote-program = { path = "../programs/vote", version = "=1.11.11" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.0" } +solana-client = { path = "../client", version = "=1.14.0" } +solana-entry = { path = "../entry", version = "=1.14.0" } +solana-faucet = { path = "../faucet", version = "=1.14.0" } +solana-gossip = { path = "../gossip", version = "=1.14.0" } +solana-ledger = { path = "../ledger", version = "=1.14.0" } +solana-measure = { path = "../measure", version = "=1.14.0" } +solana-metrics = { path = "../metrics", version = "=1.14.0" } +solana-perf = { path = "../perf", version = "=1.14.0" } +solana-poh = { path = "../poh", version = "=1.14.0" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.0" } +solana-runtime = { path = "../runtime", version = "=1.14.0" } +solana-sdk = { path = "../sdk", version = "=1.14.0" } +solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.0" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.0" } +solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.0" } +solana-streamer = { path = "../streamer", version = "=1.14.0" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.0" } +solana-version = { path = "../version", version = "=1.14.0" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.0" } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } spl-token-2022 = { version = "=0.4.2", features = ["no-entrypoint"] } stream-cancel = "0.8.1" @@ -58,9 +58,9 @@ tokio-util = { version = "0.6", features = ["codec", "compat"] } [dev-dependencies] serial_test = "0.8.0" -solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.11.11" } -solana-net-utils = { path = "../net-utils", version = "=1.11.11" } -solana-stake-program = { path = "../programs/stake", version = "=1.11.11" } +solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.0" } +solana-net-utils = { path = "../net-utils", version = "=1.14.0" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.0" } symlink = "0.1.0" [lib] diff --git a/runtime/Cargo.toml b/runtime/Cargo.toml index 5abc718a344674..129082ce5fc486 100644 --- a/runtime/Cargo.toml +++ b/runtime/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-runtime" -version = "1.11.11" +version = "1.14.0" description = "Solana runtime" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -39,21 +39,21 @@ rayon = "1.5.3" regex = "1.5.6" serde = { version = "1.0.138", features = ["rc"] } serde_derive = "1.0.103" -solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.11.11" } -solana-bucket-map = { path = "../bucket_map", version = "=1.11.11" } -solana-compute-budget-program = { path = "../programs/compute-budget", version = "=1.11.11" } -solana-config-program = { path = "../programs/config", version = "=1.11.11" } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.11.11" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.11.11" } -solana-measure = { path = "../measure", version = "=1.11.11" } -solana-metrics = { path = "../metrics", version = "=1.11.11" } -solana-program-runtime = { path = "../program-runtime", version = "=1.11.11" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.11.11" } -solana-sdk = { path = "../sdk", version = "=1.11.11" } -solana-stake-program = { path = "../programs/stake", version = "=1.11.11" } -solana-vote-program = { path = "../programs/vote", version = "=1.11.11" } -solana-zk-token-proof-program = { path = "../programs/zk-token-proof", version = "=1.11.11" } -solana-zk-token-sdk = { path = "../zk-token-sdk", version = "=1.11.11" } +solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.0" } +solana-bucket-map = { path = "../bucket_map", version = "=1.14.0" } +solana-compute-budget-program = { path = "../programs/compute-budget", version = "=1.14.0" } +solana-config-program = { path = "../programs/config", version = "=1.14.0" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.0" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.0" } +solana-measure = { path = "../measure", version = "=1.14.0" } +solana-metrics = { path = "../metrics", version = "=1.14.0" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.0" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.0" } +solana-sdk = { path = "../sdk", version = "=1.14.0" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.0" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.0" } +solana-zk-token-proof-program = { path = "../programs/zk-token-proof", version = "=1.14.0" } +solana-zk-token-sdk = { path = "../zk-token-sdk", version = "=1.14.0" } strum = { version = "0.24", features = ["derive"] } strum_macros = "0.24" symlink = "0.1.0" @@ -71,7 +71,7 @@ assert_matches = "1.5.0" ed25519-dalek = "=1.0.1" libsecp256k1 = "0.6.0" rand_chacha = "0.2.2" -solana-logger = { path = "../logger", version = "=1.11.11" } +solana-logger = { path = "../logger", version = "=1.14.0" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/runtime/store-tool/Cargo.toml b/runtime/store-tool/Cargo.toml index def5771d32f17e..2060261d943b96 100644 --- a/runtime/store-tool/Cargo.toml +++ b/runtime/store-tool/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-store-tool" description = "Tool to inspect append vecs" -version = "1.11.11" +version = "1.14.0" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -12,9 +12,9 @@ publish = false [dependencies] clap = "2.33.1" log = { version = "0.4.17" } -solana-logger = { path = "../../logger", version = "=1.11.11" } -solana-runtime = { path = "..", version = "=1.11.11" } -solana-version = { path = "../../version", version = "=1.11.11" } +solana-logger = { path = "../../logger", version = "=1.14.0" } +solana-runtime = { path = "..", version = "=1.14.0" } +solana-version = { path = "../../version", version = "=1.14.0" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/sdk/Cargo.toml b/sdk/Cargo.toml index ec3a4e54ac0d22..b4751931a7c366 100644 --- a/sdk/Cargo.toml +++ b/sdk/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-sdk" -version = "1.11.11" +version = "1.14.0" description = "Solana SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -71,11 +71,11 @@ serde_derive = "1.0.103" serde_json = { version = "1.0.81", optional = true } sha2 = "0.10.2" sha3 = { version = "0.10.1", optional = true } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.11.11" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.11.11" } -solana-logger = { path = "../logger", version = "=1.11.11", optional = true } -solana-program = { path = "program", version = "=1.11.11" } -solana-sdk-macro = { path = "macro", version = "=1.11.11" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.0" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.0" } +solana-logger = { path = "../logger", version = "=1.14.0", optional = true } +solana-program = { path = "program", version = "=1.14.0" } +solana-sdk-macro = { path = "macro", version = "=1.14.0" } thiserror = "1.0" uriparse = "0.6.4" wasm-bindgen = "0.2" diff --git a/sdk/cargo-build-bpf/Cargo.toml b/sdk/cargo-build-bpf/Cargo.toml index 1e94098ca66894..8f444c113c8f9f 100644 --- a/sdk/cargo-build-bpf/Cargo.toml +++ b/sdk/cargo-build-bpf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-cargo-build-bpf" -version = "1.11.11" +version = "1.14.0" description = "Compile a local package and all of its dependencies using the Solana SBF SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,7 +12,7 @@ publish = false [dependencies] cargo_metadata = "0.15.0" clap = { version = "3.1.5", features = ["cargo", "env"] } -solana-sdk = { path = "..", version = "=1.11.11" } +solana-sdk = { path = "..", version = "=1.14.0" } [features] program = [] diff --git a/sdk/cargo-build-sbf/Cargo.toml b/sdk/cargo-build-sbf/Cargo.toml index 6dc03dd171ab2c..4d03aed4ade05b 100644 --- a/sdk/cargo-build-sbf/Cargo.toml +++ b/sdk/cargo-build-sbf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-cargo-build-sbf" -version = "1.11.11" +version = "1.14.0" description = "Compile a local package and all of its dependencies using the Solana SBF SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -15,9 +15,9 @@ cargo_metadata = "0.15.0" clap = { version = "3.1.5", features = ["cargo", "env"] } log = { version = "0.4.14", features = ["std"] } regex = "1.5.6" -solana-download-utils = { path = "../../download-utils", version = "=1.11.11" } -solana-logger = { path = "../../logger", version = "=1.11.11" } -solana-sdk = { path = "..", version = "=1.11.11" } +solana-download-utils = { path = "../../download-utils", version = "=1.14.0" } +solana-logger = { path = "../../logger", version = "=1.14.0" } +solana-sdk = { path = "..", version = "=1.14.0" } tar = "0.4.38" [dev-dependencies] diff --git a/sdk/cargo-build-sbf/tests/crates/fail/Cargo.toml b/sdk/cargo-build-sbf/tests/crates/fail/Cargo.toml index e9fec2f7ffcaf0..eb552628fad371 100644 --- a/sdk/cargo-build-sbf/tests/crates/fail/Cargo.toml +++ b/sdk/cargo-build-sbf/tests/crates/fail/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "fail" -version = "1.11.11" +version = "1.14.0" description = "Solana SBF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ edition = "2021" publish = false [dependencies] -solana-program = { path = "../../../../program", version = "=1.11.11" } +solana-program = { path = "../../../../program", version = "=1.14.0" } [lib] crate-type = ["cdylib"] diff --git a/sdk/cargo-build-sbf/tests/crates/noop/Cargo.toml b/sdk/cargo-build-sbf/tests/crates/noop/Cargo.toml index c3210e7056f4a9..1c65ab61c9fc24 100644 --- a/sdk/cargo-build-sbf/tests/crates/noop/Cargo.toml +++ b/sdk/cargo-build-sbf/tests/crates/noop/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "noop" -version = "1.11.11" +version = "1.14.0" description = "Solana SBF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ edition = "2021" publish = false [dependencies] -solana-program = { path = "../../../../program", version = "=1.11.11" } +solana-program = { path = "../../../../program", version = "=1.14.0" } [lib] crate-type = ["cdylib"] diff --git a/sdk/cargo-test-bpf/Cargo.toml b/sdk/cargo-test-bpf/Cargo.toml index 54b2b5f6032db2..c9ad9ba0ee2469 100644 --- a/sdk/cargo-test-bpf/Cargo.toml +++ b/sdk/cargo-test-bpf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-cargo-test-bpf" -version = "1.11.11" +version = "1.14.0" description = "Execute all unit and integration tests after building with the Solana SBF SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/sdk/cargo-test-sbf/Cargo.toml b/sdk/cargo-test-sbf/Cargo.toml index 884ddf5094cb37..f6f81483d7740d 100644 --- a/sdk/cargo-test-sbf/Cargo.toml +++ b/sdk/cargo-test-sbf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-cargo-test-sbf" -version = "1.11.11" +version = "1.14.0" description = "Execute all unit and integration tests after building with the Solana SBF SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/sdk/gen-headers/Cargo.toml b/sdk/gen-headers/Cargo.toml index 5814693c18e1bf..c7f6884c4d5f2b 100644 --- a/sdk/gen-headers/Cargo.toml +++ b/sdk/gen-headers/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "gen-headers" -version = "1.11.11" +version = "1.14.0" edition = "2021" license = "Apache-2.0" publish = false diff --git a/sdk/macro/Cargo.toml b/sdk/macro/Cargo.toml index e4c7fcdf35538b..94ad8ff909907b 100644 --- a/sdk/macro/Cargo.toml +++ b/sdk/macro/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-sdk-macro" -version = "1.11.11" +version = "1.14.0" description = "Solana SDK Macro" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/sdk/program/Cargo.toml b/sdk/program/Cargo.toml index 255fdba010ece4..3b63740355c956 100644 --- a/sdk/program/Cargo.toml +++ b/sdk/program/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-program" -version = "1.11.11" +version = "1.14.0" description = "Solana Program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -31,9 +31,9 @@ serde_derive = "1.0" serde_json = "1.0" sha2 = "0.10.0" sha3 = "0.10.0" -solana-frozen-abi = { path = "../../frozen-abi", version = "=1.11.11" } -solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.11.11" } -solana-sdk-macro = { path = "../macro", version = "=1.11.11" } +solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.0" } +solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.0" } +solana-sdk-macro = { path = "../macro", version = "=1.14.0" } thiserror = "1.0" [target.'cfg(not(target_os = "solana"))'.dependencies] @@ -50,7 +50,7 @@ wasm-bindgen = "0.2" zeroize = { version = "1.3", default-features = true, features = ["zeroize_derive"] } [target.'cfg(not(target_os = "solana"))'.dev-dependencies] -solana-logger = { path = "../../logger", version = "=1.11.11" } +solana-logger = { path = "../../logger", version = "=1.14.0" } [target.'cfg(target_arch = "wasm32")'.dependencies] console_error_panic_hook = "0.1.7" diff --git a/send-transaction-service/Cargo.toml b/send-transaction-service/Cargo.toml index fff729c3e72f37..9684cae4dca995 100644 --- a/send-transaction-service/Cargo.toml +++ b/send-transaction-service/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-send-transaction-service" -version = "1.11.11" +version = "1.14.0" description = "Solana send transaction service" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,14 +12,14 @@ edition = "2021" [dependencies] crossbeam-channel = "0.5" log = "0.4.17" -solana-client = { path = "../client", version = "=1.11.11" } -solana-measure = { path = "../measure", version = "=1.11.11" } -solana-metrics = { path = "../metrics", version = "=1.11.11" } -solana-runtime = { path = "../runtime", version = "=1.11.11" } -solana-sdk = { path = "../sdk", version = "=1.11.11" } +solana-client = { path = "../client", version = "=1.14.0" } +solana-measure = { path = "../measure", version = "=1.14.0" } +solana-metrics = { path = "../metrics", version = "=1.14.0" } +solana-runtime = { path = "../runtime", version = "=1.14.0" } +solana-sdk = { path = "../sdk", version = "=1.14.0" } [dev-dependencies] -solana-logger = { path = "../logger", version = "=1.11.11" } +solana-logger = { path = "../logger", version = "=1.14.0" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/stake-accounts/Cargo.toml b/stake-accounts/Cargo.toml index e5c542467418f8..ed3237e891a5eb 100644 --- a/stake-accounts/Cargo.toml +++ b/stake-accounts/Cargo.toml @@ -3,7 +3,7 @@ name = "solana-stake-accounts" description = "Blockchain, Rebuilt for Scale" authors = ["Solana Maintainers "] edition = "2021" -version = "1.11.11" +version = "1.14.0" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -11,15 +11,15 @@ documentation = "https://docs.rs/solana-stake-accounts" [dependencies] clap = "2.33.1" -solana-clap-utils = { path = "../clap-utils", version = "=1.11.11" } -solana-cli-config = { path = "../cli-config", version = "=1.11.11" } -solana-client = { path = "../client", version = "=1.11.11" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.11.11" } -solana-sdk = { path = "../sdk", version = "=1.11.11" } -solana-stake-program = { path = "../programs/stake", version = "=1.11.11" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.0" } +solana-cli-config = { path = "../cli-config", version = "=1.14.0" } +solana-client = { path = "../client", version = "=1.14.0" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.0" } +solana-sdk = { path = "../sdk", version = "=1.14.0" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.0" } [dev-dependencies] -solana-runtime = { path = "../runtime", version = "=1.11.11" } +solana-runtime = { path = "../runtime", version = "=1.14.0" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/storage-bigtable/Cargo.toml b/storage-bigtable/Cargo.toml index 45d15186bc5ed1..f76b00b4ef74e4 100644 --- a/storage-bigtable/Cargo.toml +++ b/storage-bigtable/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-storage-bigtable" -version = "1.11.11" +version = "1.14.0" description = "Solana Storage BigTable" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -27,10 +27,10 @@ prost-types = "0.11.0" serde = "1.0.138" serde_derive = "1.0.103" smpl_jwt = "0.7.1" -solana-metrics = { path = "../metrics", version = "=1.11.11" } -solana-sdk = { path = "../sdk", version = "=1.11.11" } -solana-storage-proto = { path = "../storage-proto", version = "=1.11.11" } -solana-transaction-status = { path = "../transaction-status", version = "=1.11.11" } +solana-metrics = { path = "../metrics", version = "=1.14.0" } +solana-sdk = { path = "../sdk", version = "=1.14.0" } +solana-storage-proto = { path = "../storage-proto", version = "=1.14.0" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.0" } thiserror = "1.0" tokio = "1" tonic = { version = "0.8.0", features = ["tls", "transport"] } diff --git a/storage-bigtable/build-proto/Cargo.lock b/storage-bigtable/build-proto/Cargo.lock index dc5dd869e2e267..6d825e06157206 100644 --- a/storage-bigtable/build-proto/Cargo.lock +++ b/storage-bigtable/build-proto/Cargo.lock @@ -219,7 +219,7 @@ dependencies = [ [[package]] name = "proto" -version = "1.11.11" +version = "1.14.0" dependencies = [ "protobuf-src", "tonic-build", diff --git a/storage-bigtable/build-proto/Cargo.toml b/storage-bigtable/build-proto/Cargo.toml index d9fa741470511e..a68e4cf659c3fd 100644 --- a/storage-bigtable/build-proto/Cargo.toml +++ b/storage-bigtable/build-proto/Cargo.toml @@ -7,7 +7,7 @@ license = "Apache-2.0" name = "proto" publish = false repository = "https://github.com/solana-labs/solana" -version = "1.11.11" +version = "1.14.0" [workspace] diff --git a/storage-proto/Cargo.toml b/storage-proto/Cargo.toml index d9090664da0ed4..172c74b1ccbe25 100644 --- a/storage-proto/Cargo.toml +++ b/storage-proto/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-storage-proto" -version = "1.11.11" +version = "1.14.0" description = "Solana Storage Protobuf Definitions" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,9 +14,9 @@ bincode = "1.3.3" bs58 = "0.4.0" prost = "0.11.0" serde = "1.0.138" -solana-account-decoder = { path = "../account-decoder", version = "=1.11.11" } -solana-sdk = { path = "../sdk", version = "=1.11.11" } -solana-transaction-status = { path = "../transaction-status", version = "=1.11.11" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.0" } +solana-sdk = { path = "../sdk", version = "=1.14.0" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.0" } [dev-dependencies] enum-iterator = "0.8.1" diff --git a/streamer/Cargo.toml b/streamer/Cargo.toml index 5b2cc340b4d96d..9fbf7e71b7d613 100644 --- a/streamer/Cargo.toml +++ b/streamer/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-streamer" -version = "1.11.11" +version = "1.14.0" description = "Solana Streamer" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -25,15 +25,15 @@ quinn = "0.8.3" rand = "0.7.0" rcgen = "0.9.2" rustls = { version = "0.20.6", features = ["dangerous_configuration"] } -solana-metrics = { path = "../metrics", version = "=1.11.11" } -solana-perf = { path = "../perf", version = "=1.11.11" } -solana-sdk = { path = "../sdk", version = "=1.11.11" } +solana-metrics = { path = "../metrics", version = "=1.14.0" } +solana-perf = { path = "../perf", version = "=1.14.0" } +solana-sdk = { path = "../sdk", version = "=1.14.0" } thiserror = "1.0" tokio = { version = "1", features = ["full"] } x509-parser = "0.14.0" [dev-dependencies] -solana-logger = { path = "../logger", version = "=1.11.11" } +solana-logger = { path = "../logger", version = "=1.14.0" } [lib] crate-type = ["lib"] diff --git a/sys-tuner/Cargo.toml b/sys-tuner/Cargo.toml index cfc4e890d75453..303eddd19c9c38 100644 --- a/sys-tuner/Cargo.toml +++ b/sys-tuner/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-sys-tuner" description = "The solana cluster system tuner daemon" -version = "1.11.11" +version = "1.14.0" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,8 +14,8 @@ publish = true clap = "2.33.1" libc = "0.2.126" log = "0.4.17" -solana-logger = { path = "../logger", version = "=1.11.11" } -solana-version = { path = "../version", version = "=1.11.11" } +solana-logger = { path = "../logger", version = "=1.14.0" } +solana-version = { path = "../version", version = "=1.14.0" } [target."cfg(unix)".dependencies] unix_socket2 = "0.5.4" diff --git a/test-validator/Cargo.toml b/test-validator/Cargo.toml index 00774f1d8c8e75..93a91051594dfb 100644 --- a/test-validator/Cargo.toml +++ b/test-validator/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "solana-test-validator" description = "Blockchain, Rebuilt for Scale" -version = "1.11.11" +version = "1.14.0" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-test-validator" readme = "../README.md" @@ -15,19 +15,19 @@ base64 = "0.13.0" log = "0.4.17" serde_derive = "1.0.103" serde_json = "1.0.81" -solana-cli-output = { path = "../cli-output", version = "=1.11.11" } -solana-client = { path = "../client", version = "=1.11.11" } -solana-core = { path = "../core", version = "=1.11.11" } -solana-gossip = { path = "../gossip", version = "=1.11.11" } -solana-ledger = { path = "../ledger", version = "=1.11.11" } -solana-logger = { path = "../logger", version = "=1.11.11" } -solana-net-utils = { path = "../net-utils", version = "=1.11.11" } -solana-program-runtime = { path = "../program-runtime", version = "=1.11.11" } -solana-program-test = { path = "../program-test", version = "=1.11.11" } -solana-rpc = { path = "../rpc", version = "=1.11.11" } -solana-runtime = { path = "../runtime", version = "=1.11.11" } -solana-sdk = { path = "../sdk", version = "=1.11.11" } -solana-streamer = { path = "../streamer", version = "=1.11.11" } +solana-cli-output = { path = "../cli-output", version = "=1.14.0" } +solana-client = { path = "../client", version = "=1.14.0" } +solana-core = { path = "../core", version = "=1.14.0" } +solana-gossip = { path = "../gossip", version = "=1.14.0" } +solana-ledger = { path = "../ledger", version = "=1.14.0" } +solana-logger = { path = "../logger", version = "=1.14.0" } +solana-net-utils = { path = "../net-utils", version = "=1.14.0" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.0" } +solana-program-test = { path = "../program-test", version = "=1.14.0" } +solana-rpc = { path = "../rpc", version = "=1.14.0" } +solana-runtime = { path = "../runtime", version = "=1.14.0" } +solana-sdk = { path = "../sdk", version = "=1.14.0" } +solana-streamer = { path = "../streamer", version = "=1.14.0" } tokio = { version = "1", features = ["full"] } [package.metadata.docs.rs] diff --git a/tokens/Cargo.toml b/tokens/Cargo.toml index 6ee2e4fa72d874..5ffc78eec6afc9 100644 --- a/tokens/Cargo.toml +++ b/tokens/Cargo.toml @@ -3,7 +3,7 @@ name = "solana-tokens" description = "Blockchain, Rebuilt for Scale" authors = ["Solana Maintainers "] edition = "2021" -version = "1.11.11" +version = "1.14.0" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -19,14 +19,14 @@ indexmap = "1.9.1" indicatif = "0.16.2" pickledb = "0.4.1" serde = { version = "1.0", features = ["derive"] } -solana-account-decoder = { path = "../account-decoder", version = "=1.11.11" } -solana-clap-utils = { path = "../clap-utils", version = "=1.11.11" } -solana-cli-config = { path = "../cli-config", version = "=1.11.11" } -solana-client = { path = "../client", version = "=1.11.11" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.11.11" } -solana-sdk = { path = "../sdk", version = "=1.11.11" } -solana-transaction-status = { path = "../transaction-status", version = "=1.11.11" } -solana-version = { path = "../version", version = "=1.11.11" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.0" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.0" } +solana-cli-config = { path = "../cli-config", version = "=1.14.0" } +solana-client = { path = "../client", version = "=1.14.0" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.0" } +solana-sdk = { path = "../sdk", version = "=1.14.0" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.0" } +solana-version = { path = "../version", version = "=1.14.0" } spl-associated-token-account = { version = "=1.1.1" } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } tempfile = "3.3.0" @@ -34,6 +34,6 @@ thiserror = "1.0" [dev-dependencies] bincode = "1.3.3" -solana-logger = { path = "../logger", version = "=1.11.11" } -solana-streamer = { path = "../streamer", version = "=1.11.11" } -solana-test-validator = { path = "../test-validator", version = "=1.11.11" } +solana-logger = { path = "../logger", version = "=1.14.0" } +solana-streamer = { path = "../streamer", version = "=1.14.0" } +solana-test-validator = { path = "../test-validator", version = "=1.14.0" } diff --git a/transaction-dos/Cargo.toml b/transaction-dos/Cargo.toml index 815b22cfd6708f..cd5c80b8831465 100644 --- a/transaction-dos/Cargo.toml +++ b/transaction-dos/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-transaction-dos" -version = "1.11.11" +version = "1.14.0" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,23 +14,23 @@ clap = "2.33.1" log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" -solana-clap-utils = { path = "../clap-utils", version = "=1.11.11" } -solana-cli = { path = "../cli", version = "=1.11.11" } -solana-client = { path = "../client", version = "=1.11.11" } -solana-core = { path = "../core", version = "=1.11.11" } -solana-faucet = { path = "../faucet", version = "=1.11.11" } -solana-gossip = { path = "../gossip", version = "=1.11.11" } -solana-logger = { path = "../logger", version = "=1.11.11" } -solana-measure = { path = "../measure", version = "=1.11.11" } -solana-net-utils = { path = "../net-utils", version = "=1.11.11" } -solana-runtime = { path = "../runtime", version = "=1.11.11" } -solana-sdk = { path = "../sdk", version = "=1.11.11" } -solana-streamer = { path = "../streamer", version = "=1.11.11" } -solana-transaction-status = { path = "../transaction-status", version = "=1.11.11" } -solana-version = { path = "../version", version = "=1.11.11" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.0" } +solana-cli = { path = "../cli", version = "=1.14.0" } +solana-client = { path = "../client", version = "=1.14.0" } +solana-core = { path = "../core", version = "=1.14.0" } +solana-faucet = { path = "../faucet", version = "=1.14.0" } +solana-gossip = { path = "../gossip", version = "=1.14.0" } +solana-logger = { path = "../logger", version = "=1.14.0" } +solana-measure = { path = "../measure", version = "=1.14.0" } +solana-net-utils = { path = "../net-utils", version = "=1.14.0" } +solana-runtime = { path = "../runtime", version = "=1.14.0" } +solana-sdk = { path = "../sdk", version = "=1.14.0" } +solana-streamer = { path = "../streamer", version = "=1.14.0" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.0" } +solana-version = { path = "../version", version = "=1.14.0" } [dev-dependencies] -solana-local-cluster = { path = "../local-cluster", version = "=1.11.11" } +solana-local-cluster = { path = "../local-cluster", version = "=1.14.0" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/transaction-status/Cargo.toml b/transaction-status/Cargo.toml index 594f5bc2e1f37b..ba71c9fdc274a1 100644 --- a/transaction-status/Cargo.toml +++ b/transaction-status/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-transaction-status" -version = "1.11.11" +version = "1.14.0" description = "Solana transaction status types" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -20,11 +20,11 @@ log = "0.4.17" serde = "1.0.138" serde_derive = "1.0.103" serde_json = "1.0.81" -solana-account-decoder = { path = "../account-decoder", version = "=1.11.11" } -solana-measure = { path = "../measure", version = "=1.11.11" } -solana-metrics = { path = "../metrics", version = "=1.11.11" } -solana-sdk = { path = "../sdk", version = "=1.11.11" } -solana-vote-program = { path = "../programs/vote", version = "=1.11.11" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.0" } +solana-measure = { path = "../measure", version = "=1.14.0" } +solana-metrics = { path = "../metrics", version = "=1.14.0" } +solana-sdk = { path = "../sdk", version = "=1.14.0" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.0" } spl-associated-token-account = { version = "=1.1.1", features = ["no-entrypoint"] } spl-memo = { version = "=3.0.1", features = ["no-entrypoint"] } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } diff --git a/upload-perf/Cargo.toml b/upload-perf/Cargo.toml index eeb76b0b1d5c38..a65e4bb40737f3 100644 --- a/upload-perf/Cargo.toml +++ b/upload-perf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-upload-perf" -version = "1.11.11" +version = "1.14.0" description = "Metrics Upload Utility" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -11,7 +11,7 @@ publish = false [dependencies] serde_json = "1.0.81" -solana-metrics = { path = "../metrics", version = "=1.11.11" } +solana-metrics = { path = "../metrics", version = "=1.14.0" } [[bin]] name = "solana-upload-perf" diff --git a/validator/Cargo.toml b/validator/Cargo.toml index 091321bf206a3f..2f3e25677503b9 100644 --- a/validator/Cargo.toml +++ b/validator/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-validator" description = "Blockchain, Rebuilt for Scale" -version = "1.11.11" +version = "1.14.0" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -28,30 +28,30 @@ num_cpus = "1.13.1" rand = "0.7.0" serde = "1.0.138" serde_json = "1.0.81" -solana-clap-utils = { path = "../clap-utils", version = "=1.11.11" } -solana-cli-config = { path = "../cli-config", version = "=1.11.11" } -solana-client = { path = "../client", version = "=1.11.11" } -solana-core = { path = "../core", version = "=1.11.11" } -solana-download-utils = { path = "../download-utils", version = "=1.11.11" } -solana-entry = { path = "../entry", version = "=1.11.11" } -solana-faucet = { path = "../faucet", version = "=1.11.11" } -solana-genesis-utils = { path = "../genesis-utils", version = "=1.11.11" } -solana-gossip = { path = "../gossip", version = "=1.11.11" } -solana-ledger = { path = "../ledger", version = "=1.11.11" } -solana-logger = { path = "../logger", version = "=1.11.11" } -solana-metrics = { path = "../metrics", version = "=1.11.11" } -solana-net-utils = { path = "../net-utils", version = "=1.11.11" } -solana-perf = { path = "../perf", version = "=1.11.11" } -solana-poh = { path = "../poh", version = "=1.11.11" } -solana-rpc = { path = "../rpc", version = "=1.11.11" } -solana-runtime = { path = "../runtime", version = "=1.11.11" } -solana-sdk = { path = "../sdk", version = "=1.11.11" } -solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.11.11" } -solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.11.11" } -solana-streamer = { path = "../streamer", version = "=1.11.11" } -solana-test-validator = { path = "../test-validator", version = "=1.11.11" } -solana-version = { path = "../version", version = "=1.11.11" } -solana-vote-program = { path = "../programs/vote", version = "=1.11.11" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.0" } +solana-cli-config = { path = "../cli-config", version = "=1.14.0" } +solana-client = { path = "../client", version = "=1.14.0" } +solana-core = { path = "../core", version = "=1.14.0" } +solana-download-utils = { path = "../download-utils", version = "=1.14.0" } +solana-entry = { path = "../entry", version = "=1.14.0" } +solana-faucet = { path = "../faucet", version = "=1.14.0" } +solana-genesis-utils = { path = "../genesis-utils", version = "=1.14.0" } +solana-gossip = { path = "../gossip", version = "=1.14.0" } +solana-ledger = { path = "../ledger", version = "=1.14.0" } +solana-logger = { path = "../logger", version = "=1.14.0" } +solana-metrics = { path = "../metrics", version = "=1.14.0" } +solana-net-utils = { path = "../net-utils", version = "=1.14.0" } +solana-perf = { path = "../perf", version = "=1.14.0" } +solana-poh = { path = "../poh", version = "=1.14.0" } +solana-rpc = { path = "../rpc", version = "=1.14.0" } +solana-runtime = { path = "../runtime", version = "=1.14.0" } +solana-sdk = { path = "../sdk", version = "=1.14.0" } +solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.0" } +solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.0" } +solana-streamer = { path = "../streamer", version = "=1.14.0" } +solana-test-validator = { path = "../test-validator", version = "=1.14.0" } +solana-version = { path = "../version", version = "=1.14.0" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.0" } symlink = "0.1.0" [target.'cfg(not(target_env = "msvc"))'.dependencies] diff --git a/version/Cargo.toml b/version/Cargo.toml index 3e1f74b267b559..d03f336b535c74 100644 --- a/version/Cargo.toml +++ b/version/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-version" -version = "1.11.11" +version = "1.14.0" description = "Solana Version" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,9 +14,9 @@ log = "0.4.17" semver = "1.0.10" serde = "1.0.138" serde_derive = "1.0.103" -solana-frozen-abi = { path = "../frozen-abi", version = "=1.11.11" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.11.11" } -solana-sdk = { path = "../sdk", version = "=1.11.11" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.0" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.0" } +solana-sdk = { path = "../sdk", version = "=1.14.0" } [lib] name = "solana_version" diff --git a/watchtower/Cargo.toml b/watchtower/Cargo.toml index cc83d161c4afbe..3e8f2e4fe6d5eb 100644 --- a/watchtower/Cargo.toml +++ b/watchtower/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-watchtower" description = "Blockchain, Rebuilt for Scale" -version = "1.11.11" +version = "1.14.0" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -13,15 +13,15 @@ documentation = "https://docs.rs/solana-watchtower" clap = "2.33.1" humantime = "2.0.1" log = "0.4.17" -solana-clap-utils = { path = "../clap-utils", version = "=1.11.11" } -solana-cli-config = { path = "../cli-config", version = "=1.11.11" } -solana-cli-output = { path = "../cli-output", version = "=1.11.11" } -solana-client = { path = "../client", version = "=1.11.11" } -solana-logger = { path = "../logger", version = "=1.11.11" } -solana-metrics = { path = "../metrics", version = "=1.11.11" } -solana-notifier = { path = "../notifier", version = "=1.11.11" } -solana-sdk = { path = "../sdk", version = "=1.11.11" } -solana-version = { path = "../version", version = "=1.11.11" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.0" } +solana-cli-config = { path = "../cli-config", version = "=1.14.0" } +solana-cli-output = { path = "../cli-output", version = "=1.14.0" } +solana-client = { path = "../client", version = "=1.14.0" } +solana-logger = { path = "../logger", version = "=1.14.0" } +solana-metrics = { path = "../metrics", version = "=1.14.0" } +solana-notifier = { path = "../notifier", version = "=1.14.0" } +solana-sdk = { path = "../sdk", version = "=1.14.0" } +solana-version = { path = "../version", version = "=1.14.0" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/zk-token-sdk/Cargo.toml b/zk-token-sdk/Cargo.toml index 81679cb8268d54..ce813eea716de4 100644 --- a/zk-token-sdk/Cargo.toml +++ b/zk-token-sdk/Cargo.toml @@ -3,7 +3,7 @@ name = "solana-zk-token-sdk" description = "Solana Zk Token SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" -version = "1.11.11" +version = "1.14.0" license = "Apache-2.0" edition = "2021" @@ -12,7 +12,7 @@ base64 = "0.13" bytemuck = { version = "1.11.0", features = ["derive"] } num-derive = "0.3" num-traits = "0.2" -solana-program = { path = "../sdk/program", version = "=1.11.11" } +solana-program = { path = "../sdk/program", version = "=1.14.0" } [target.'cfg(not(target_os = "solana"))'.dependencies] aes-gcm-siv = "0.10.3" @@ -29,7 +29,7 @@ rand = "0.7" serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" sha3 = "0.9" -solana-sdk = { path = "../sdk", version = "=1.11.11" } +solana-sdk = { path = "../sdk", version = "=1.14.0" } subtle = "2" thiserror = "1.0" zeroize = { version = "1.3", default-features = false, features = ["zeroize_derive"] } From 16158be5322910f807119083f0adcd2ae6fecff9 Mon Sep 17 00:00:00 2001 From: Will Hickey Date: Tue, 13 Sep 2022 11:27:25 -0500 Subject: [PATCH 114/465] Bump version to v1.14.1 (#27754) --- Cargo.lock | 484 ++++++++--------- account-decoder/Cargo.toml | 8 +- accounts-bench/Cargo.toml | 12 +- accounts-cluster-bench/Cargo.toml | 34 +- banking-bench/Cargo.toml | 26 +- banks-client/Cargo.toml | 12 +- banks-interface/Cargo.toml | 4 +- banks-server/Cargo.toml | 12 +- bench-streamer/Cargo.toml | 8 +- bench-tps/Cargo.toml | 38 +- bloom/Cargo.toml | 8 +- bucket_map/Cargo.toml | 8 +- clap-utils/Cargo.toml | 8 +- clap-v3-utils/Cargo.toml | 8 +- cli-config/Cargo.toml | 6 +- cli-output/Cargo.toml | 16 +- cli/Cargo.toml | 36 +- client-test/Cargo.toml | 32 +- client/Cargo.toml | 28 +- core/Cargo.toml | 56 +- docs/src/developing/clients/jsonrpc-api.md | 6 +- dos/Cargo.toml | 30 +- download-utils/Cargo.toml | 6 +- entry/Cargo.toml | 16 +- faucet/Cargo.toml | 14 +- frozen-abi/Cargo.toml | 6 +- frozen-abi/macro/Cargo.toml | 2 +- genesis-utils/Cargo.toml | 8 +- genesis/Cargo.toml | 22 +- geyser-plugin-interface/Cargo.toml | 6 +- geyser-plugin-manager/Cargo.toml | 16 +- gossip/Cargo.toml | 38 +- install/Cargo.toml | 14 +- keygen/Cargo.toml | 12 +- ledger-tool/Cargo.toml | 30 +- ledger/Cargo.toml | 40 +- local-cluster/Cargo.toml | 28 +- log-analyzer/Cargo.toml | 6 +- logger/Cargo.toml | 2 +- measure/Cargo.toml | 4 +- merkle-root-bench/Cargo.toml | 12 +- merkle-tree/Cargo.toml | 4 +- metrics/Cargo.toml | 4 +- net-shaper/Cargo.toml | 4 +- net-utils/Cargo.toml | 8 +- notifier/Cargo.toml | 2 +- perf/Cargo.toml | 12 +- poh-bench/Cargo.toml | 14 +- poh/Cargo.toml | 20 +- program-runtime/Cargo.toml | 14 +- program-test/Cargo.toml | 18 +- .../address-lookup-table-tests/Cargo.toml | 8 +- programs/address-lookup-table/Cargo.toml | 12 +- programs/bpf-loader-tests/Cargo.toml | 8 +- programs/bpf/Cargo.lock | 490 +++++++++--------- programs/bpf/Cargo.toml | 28 +- programs/bpf/rust/128bit/Cargo.toml | 6 +- programs/bpf/rust/128bit_dep/Cargo.toml | 4 +- programs/bpf/rust/alloc/Cargo.toml | 4 +- programs/bpf/rust/call_depth/Cargo.toml | 4 +- programs/bpf/rust/caller_access/Cargo.toml | 4 +- programs/bpf/rust/curve25519/Cargo.toml | 6 +- programs/bpf/rust/custom_heap/Cargo.toml | 4 +- programs/bpf/rust/dep_crate/Cargo.toml | 6 +- .../bpf/rust/deprecated_loader/Cargo.toml | 4 +- programs/bpf/rust/dup_accounts/Cargo.toml | 4 +- programs/bpf/rust/error_handling/Cargo.toml | 4 +- programs/bpf/rust/external_spend/Cargo.toml | 4 +- programs/bpf/rust/finalize/Cargo.toml | 4 +- .../rust/get_minimum_delegation/Cargo.toml | 4 +- .../Cargo.toml | 4 +- .../rust/instruction_introspection/Cargo.toml | 4 +- programs/bpf/rust/invoke/Cargo.toml | 4 +- programs/bpf/rust/invoke_and_error/Cargo.toml | 4 +- programs/bpf/rust/invoke_and_ok/Cargo.toml | 4 +- .../bpf/rust/invoke_and_return/Cargo.toml | 4 +- programs/bpf/rust/invoked/Cargo.toml | 4 +- programs/bpf/rust/iter/Cargo.toml | 4 +- programs/bpf/rust/log_data/Cargo.toml | 4 +- programs/bpf/rust/many_args/Cargo.toml | 6 +- programs/bpf/rust/many_args_dep/Cargo.toml | 4 +- programs/bpf/rust/mem/Cargo.toml | 10 +- programs/bpf/rust/membuiltins/Cargo.toml | 6 +- programs/bpf/rust/noop/Cargo.toml | 4 +- programs/bpf/rust/panic/Cargo.toml | 4 +- programs/bpf/rust/param_passing/Cargo.toml | 6 +- .../bpf/rust/param_passing_dep/Cargo.toml | 4 +- programs/bpf/rust/rand/Cargo.toml | 4 +- programs/bpf/rust/realloc/Cargo.toml | 4 +- programs/bpf/rust/realloc_invoke/Cargo.toml | 6 +- .../bpf/rust/ro_account_modify/Cargo.toml | 4 +- programs/bpf/rust/ro_modify/Cargo.toml | 4 +- programs/bpf/rust/sanity/Cargo.toml | 10 +- .../bpf/rust/secp256k1_recover/Cargo.toml | 4 +- programs/bpf/rust/sha/Cargo.toml | 4 +- .../rust/sibling_inner_instruction/Cargo.toml | 4 +- .../bpf/rust/sibling_instruction/Cargo.toml | 4 +- programs/bpf/rust/simulation/Cargo.toml | 12 +- programs/bpf/rust/spoof1/Cargo.toml | 4 +- programs/bpf/rust/spoof1_system/Cargo.toml | 4 +- programs/bpf/rust/sysvar/Cargo.toml | 10 +- programs/bpf/rust/upgradeable/Cargo.toml | 4 +- programs/bpf/rust/upgraded/Cargo.toml | 4 +- programs/bpf_loader/Cargo.toml | 14 +- .../bpf_loader/gen-syscall-list/Cargo.toml | 2 +- programs/compute-budget/Cargo.toml | 6 +- programs/config/Cargo.toml | 8 +- programs/ed25519-tests/Cargo.toml | 6 +- programs/stake/Cargo.toml | 18 +- programs/vote/Cargo.toml | 14 +- programs/zk-token-proof/Cargo.toml | 8 +- rayon-threadlimit/Cargo.toml | 2 +- rbpf-cli/Cargo.toml | 10 +- remote-wallet/Cargo.toml | 4 +- rpc-test/Cargo.toml | 18 +- rpc/Cargo.toml | 48 +- runtime/Cargo.toml | 34 +- runtime/store-tool/Cargo.toml | 8 +- sdk/Cargo.toml | 12 +- sdk/cargo-build-bpf/Cargo.toml | 4 +- sdk/cargo-build-sbf/Cargo.toml | 8 +- .../tests/crates/fail/Cargo.toml | 4 +- .../tests/crates/noop/Cargo.toml | 4 +- sdk/cargo-test-bpf/Cargo.toml | 2 +- sdk/cargo-test-sbf/Cargo.toml | 2 +- sdk/gen-headers/Cargo.toml | 2 +- sdk/macro/Cargo.toml | 2 +- sdk/program/Cargo.toml | 10 +- send-transaction-service/Cargo.toml | 14 +- stake-accounts/Cargo.toml | 16 +- storage-bigtable/Cargo.toml | 10 +- storage-bigtable/build-proto/Cargo.lock | 2 +- storage-bigtable/build-proto/Cargo.toml | 2 +- storage-proto/Cargo.toml | 8 +- streamer/Cargo.toml | 10 +- sys-tuner/Cargo.toml | 6 +- test-validator/Cargo.toml | 28 +- tokens/Cargo.toml | 24 +- transaction-dos/Cargo.toml | 32 +- transaction-status/Cargo.toml | 12 +- upload-perf/Cargo.toml | 4 +- validator/Cargo.toml | 50 +- version/Cargo.toml | 8 +- watchtower/Cargo.toml | 20 +- zk-token-sdk/Cargo.toml | 6 +- 145 files changed, 1269 insertions(+), 1269 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index e316ee16a6f670..1d52962c6039ca 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1688,7 +1688,7 @@ dependencies = [ [[package]] name = "gen-headers" -version = "1.14.0" +version = "1.14.1" dependencies = [ "log", "regex", @@ -1696,7 +1696,7 @@ dependencies = [ [[package]] name = "gen-syscall-list" -version = "1.14.0" +version = "1.14.1" dependencies = [ "regex", ] @@ -3756,15 +3756,15 @@ dependencies = [ [[package]] name = "rbpf-cli" -version = "1.14.0" +version = "1.14.1" dependencies = [ "clap 3.1.8", "serde", "serde_json", "solana-bpf-loader-program", - "solana-logger 1.14.0", + "solana-logger 1.14.1", "solana-program-runtime", - "solana-sdk 1.14.0", + "solana-sdk 1.14.1", "solana_rbpf", ] @@ -4475,7 +4475,7 @@ dependencies = [ [[package]] name = "solana-account-decoder" -version = "1.14.0" +version = "1.14.1" dependencies = [ "Inflector", "base64 0.13.0", @@ -4487,7 +4487,7 @@ dependencies = [ "serde_derive", "serde_json", "solana-config-program", - "solana-sdk 1.14.0", + "solana-sdk 1.14.1", "solana-vote-program", "spl-token", "spl-token-2022", @@ -4497,21 +4497,21 @@ dependencies = [ [[package]] name = "solana-accounts-bench" -version = "1.14.0" +version = "1.14.1" dependencies = [ "clap 2.33.3", "log", "rayon", - "solana-logger 1.14.0", + "solana-logger 1.14.1", "solana-measure", "solana-runtime", - "solana-sdk 1.14.0", + "solana-sdk 1.14.1", "solana-version", ] [[package]] name = "solana-accounts-cluster-bench" -version = "1.14.0" +version = "1.14.1" dependencies = [ "clap 2.33.3", "log", @@ -4524,11 +4524,11 @@ dependencies = [ "solana-faucet", "solana-gossip", "solana-local-cluster", - "solana-logger 1.14.0", + "solana-logger 1.14.1", "solana-measure", "solana-net-utils", "solana-runtime", - "solana-sdk 1.14.0", + "solana-sdk 1.14.1", "solana-streamer", "solana-test-validator", "solana-transaction-status", @@ -4538,7 +4538,7 @@ dependencies = [ [[package]] name = "solana-address-lookup-table-program" -version = "1.14.0" +version = "1.14.1" dependencies = [ "bincode", "bytemuck", @@ -4547,28 +4547,28 @@ dependencies = [ "num-traits", "rustc_version 0.4.0", "serde", - "solana-frozen-abi 1.14.0", - "solana-frozen-abi-macro 1.14.0", - "solana-program 1.14.0", + "solana-frozen-abi 1.14.1", + "solana-frozen-abi-macro 1.14.1", + "solana-program 1.14.1", "solana-program-runtime", - "solana-sdk 1.14.0", + "solana-sdk 1.14.1", "thiserror", ] [[package]] name = "solana-address-lookup-table-program-tests" -version = "1.14.0" +version = "1.14.1" dependencies = [ "assert_matches", "bincode", "solana-address-lookup-table-program", "solana-program-test", - "solana-sdk 1.14.0", + "solana-sdk 1.14.1", ] [[package]] name = "solana-banking-bench" -version = "1.14.0" +version = "1.14.1" dependencies = [ "clap 3.1.8", "crossbeam-channel", @@ -4579,27 +4579,27 @@ dependencies = [ "solana-core", "solana-gossip", "solana-ledger", - "solana-logger 1.14.0", + "solana-logger 1.14.1", "solana-measure", "solana-perf", "solana-poh", "solana-runtime", - "solana-sdk 1.14.0", + "solana-sdk 1.14.1", "solana-streamer", "solana-version", ] [[package]] name = "solana-banks-client" -version = "1.14.0" +version = "1.14.1" dependencies = [ "borsh", "futures 0.3.21", "solana-banks-interface", "solana-banks-server", - "solana-program 1.14.0", + "solana-program 1.14.1", "solana-runtime", - "solana-sdk 1.14.0", + "solana-sdk 1.14.1", "tarpc", "thiserror", "tokio", @@ -4608,16 +4608,16 @@ dependencies = [ [[package]] name = "solana-banks-interface" -version = "1.14.0" +version = "1.14.1" dependencies = [ "serde", - "solana-sdk 1.14.0", + "solana-sdk 1.14.1", "tarpc", ] [[package]] name = "solana-banks-server" -version = "1.14.0" +version = "1.14.1" dependencies = [ "bincode", "crossbeam-channel", @@ -4625,7 +4625,7 @@ dependencies = [ "solana-banks-interface", "solana-client", "solana-runtime", - "solana-sdk 1.14.0", + "solana-sdk 1.14.1", "solana-send-transaction-service", "tarpc", "tokio", @@ -4635,7 +4635,7 @@ dependencies = [ [[package]] name = "solana-bench-streamer" -version = "1.14.0" +version = "1.14.1" dependencies = [ "clap 3.1.8", "crossbeam-channel", @@ -4646,7 +4646,7 @@ dependencies = [ [[package]] name = "solana-bench-tps" -version = "1.14.0" +version = "1.14.1" dependencies = [ "clap 2.33.3", "crossbeam-channel", @@ -4663,13 +4663,13 @@ dependencies = [ "solana-genesis", "solana-gossip", "solana-local-cluster", - "solana-logger 1.14.0", + "solana-logger 1.14.1", "solana-measure", "solana-metrics", "solana-net-utils", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.0", + "solana-sdk 1.14.1", "solana-streamer", "solana-test-validator", "solana-version", @@ -4678,7 +4678,7 @@ dependencies = [ [[package]] name = "solana-bloom" -version = "1.14.0" +version = "1.14.1" dependencies = [ "bv", "fnv", @@ -4688,14 +4688,14 @@ dependencies = [ "rustc_version 0.4.0", "serde", "serde_derive", - "solana-frozen-abi 1.14.0", - "solana-frozen-abi-macro 1.14.0", - "solana-sdk 1.14.0", + "solana-frozen-abi 1.14.1", + "solana-frozen-abi-macro 1.14.1", + "solana-sdk 1.14.1", ] [[package]] name = "solana-bpf-loader-program" -version = "1.14.0" +version = "1.14.1" dependencies = [ "bincode", "byteorder", @@ -4706,26 +4706,26 @@ dependencies = [ "solana-metrics", "solana-program-runtime", "solana-runtime", - "solana-sdk 1.14.0", - "solana-zk-token-sdk 1.14.0", + "solana-sdk 1.14.1", + "solana-zk-token-sdk 1.14.1", "solana_rbpf", "thiserror", ] [[package]] name = "solana-bpf-loader-program-tests" -version = "1.14.0" +version = "1.14.1" dependencies = [ "assert_matches", "bincode", "solana-bpf-loader-program", "solana-program-test", - "solana-sdk 1.14.0", + "solana-sdk 1.14.1", ] [[package]] name = "solana-bucket-map" -version = "1.14.0" +version = "1.14.1" dependencies = [ "fs_extra", "log", @@ -4733,24 +4733,24 @@ dependencies = [ "modular-bitfield", "rand 0.7.3", "rayon", - "solana-logger 1.14.0", + "solana-logger 1.14.1", "solana-measure", - "solana-sdk 1.14.0", + "solana-sdk 1.14.1", "tempfile", ] [[package]] name = "solana-cargo-build-bpf" -version = "1.14.0" +version = "1.14.1" dependencies = [ "cargo_metadata", "clap 3.1.8", - "solana-sdk 1.14.0", + "solana-sdk 1.14.1", ] [[package]] name = "solana-cargo-build-sbf" -version = "1.14.0" +version = "1.14.1" dependencies = [ "bzip2", "cargo_metadata", @@ -4759,14 +4759,14 @@ dependencies = [ "regex", "serial_test", "solana-download-utils", - "solana-logger 1.14.0", - "solana-sdk 1.14.0", + "solana-logger 1.14.1", + "solana-sdk 1.14.1", "tar", ] [[package]] name = "solana-cargo-test-bpf" -version = "1.14.0" +version = "1.14.1" dependencies = [ "cargo_metadata", "clap 3.1.8", @@ -4774,7 +4774,7 @@ dependencies = [ [[package]] name = "solana-cargo-test-sbf" -version = "1.14.0" +version = "1.14.1" dependencies = [ "cargo_metadata", "clap 3.1.8", @@ -4782,14 +4782,14 @@ dependencies = [ [[package]] name = "solana-clap-utils" -version = "1.14.0" +version = "1.14.1" dependencies = [ "chrono", "clap 2.33.3", "rpassword", "solana-perf", "solana-remote-wallet", - "solana-sdk 1.14.0", + "solana-sdk 1.14.1", "tempfile", "thiserror", "tiny-bip39", @@ -4799,14 +4799,14 @@ dependencies = [ [[package]] name = "solana-clap-v3-utils" -version = "1.14.0" +version = "1.14.1" dependencies = [ "chrono", "clap 3.1.8", "rpassword", "solana-perf", "solana-remote-wallet", - "solana-sdk 1.14.0", + "solana-sdk 1.14.1", "tempfile", "thiserror", "tiny-bip39", @@ -4816,7 +4816,7 @@ dependencies = [ [[package]] name = "solana-cli" -version = "1.14.0" +version = "1.14.1" dependencies = [ "bincode", "bs58", @@ -4843,10 +4843,10 @@ dependencies = [ "solana-client", "solana-config-program", "solana-faucet", - "solana-logger 1.14.0", + "solana-logger 1.14.1", "solana-program-runtime", "solana-remote-wallet", - "solana-sdk 1.14.0", + "solana-sdk 1.14.1", "solana-streamer", "solana-test-validator", "solana-transaction-status", @@ -4861,7 +4861,7 @@ dependencies = [ [[package]] name = "solana-cli-config" -version = "1.14.0" +version = "1.14.1" dependencies = [ "anyhow", "dirs-next", @@ -4870,13 +4870,13 @@ dependencies = [ "serde_derive", "serde_yaml", "solana-clap-utils", - "solana-sdk 1.14.0", + "solana-sdk 1.14.1", "url 2.2.2", ] [[package]] name = "solana-cli-output" -version = "1.14.0" +version = "1.14.1" dependencies = [ "Inflector", "base64 0.13.0", @@ -4894,7 +4894,7 @@ dependencies = [ "solana-clap-utils", "solana-cli-config", "solana-client", - "solana-sdk 1.14.0", + "solana-sdk 1.14.1", "solana-transaction-status", "solana-vote-program", "spl-memo", @@ -4902,7 +4902,7 @@ dependencies = [ [[package]] name = "solana-client" -version = "1.14.0" +version = "1.14.1" dependencies = [ "anyhow", "assert_matches", @@ -4938,12 +4938,12 @@ dependencies = [ "solana-account-decoder", "solana-clap-utils", "solana-faucet", - "solana-logger 1.14.0", + "solana-logger 1.14.1", "solana-measure", "solana-metrics", "solana-net-utils", "solana-perf", - "solana-sdk 1.14.0", + "solana-sdk 1.14.1", "solana-streamer", "solana-transaction-status", "solana-version", @@ -4959,14 +4959,14 @@ dependencies = [ [[package]] name = "solana-client-test" -version = "1.14.0" +version = "1.14.1" dependencies = [ "futures-util", "serde_json", "serial_test", "solana-client", "solana-ledger", - "solana-logger 1.14.0", + "solana-logger 1.14.1", "solana-measure", "solana-merkle-tree", "solana-metrics", @@ -4974,7 +4974,7 @@ dependencies = [ "solana-rayon-threadlimit", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.0", + "solana-sdk 1.14.1", "solana-streamer", "solana-test-validator", "solana-transaction-status", @@ -4985,28 +4985,28 @@ dependencies = [ [[package]] name = "solana-compute-budget-program" -version = "1.14.0" +version = "1.14.1" dependencies = [ "solana-program-runtime", - "solana-sdk 1.14.0", + "solana-sdk 1.14.1", ] [[package]] name = "solana-config-program" -version = "1.14.0" +version = "1.14.1" dependencies = [ "bincode", "chrono", "serde", "serde_derive", - "solana-logger 1.14.0", + "solana-logger 1.14.1", "solana-program-runtime", - "solana-sdk 1.14.0", + "solana-sdk 1.14.1", ] [[package]] name = "solana-core" -version = "1.14.0" +version = "1.14.1" dependencies = [ "ahash", "base64 0.13.0", @@ -5038,12 +5038,12 @@ dependencies = [ "solana-bloom", "solana-client", "solana-entry", - "solana-frozen-abi 1.14.0", - "solana-frozen-abi-macro 1.14.0", + "solana-frozen-abi 1.14.1", + "solana-frozen-abi-macro 1.14.1", "solana-geyser-plugin-manager", "solana-gossip", "solana-ledger", - "solana-logger 1.14.0", + "solana-logger 1.14.1", "solana-measure", "solana-metrics", "solana-net-utils", @@ -5053,7 +5053,7 @@ dependencies = [ "solana-rayon-threadlimit", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.0", + "solana-sdk 1.14.1", "solana-send-transaction-service", "solana-stake-program", "solana-streamer", @@ -5073,7 +5073,7 @@ dependencies = [ [[package]] name = "solana-dos" -version = "1.14.0" +version = "1.14.1" dependencies = [ "bincode", "clap 3.1.8", @@ -5089,42 +5089,42 @@ dependencies = [ "solana-faucet", "solana-gossip", "solana-local-cluster", - "solana-logger 1.14.0", + "solana-logger 1.14.1", "solana-measure", "solana-net-utils", "solana-perf", "solana-rpc", - "solana-sdk 1.14.0", + "solana-sdk 1.14.1", "solana-streamer", "solana-version", ] [[package]] name = "solana-download-utils" -version = "1.14.0" +version = "1.14.1" dependencies = [ "console", "indicatif", "log", "reqwest", "solana-runtime", - "solana-sdk 1.14.0", + "solana-sdk 1.14.1", ] [[package]] name = "solana-ed25519-program-tests" -version = "1.14.0" +version = "1.14.1" dependencies = [ "assert_matches", "ed25519-dalek", "rand 0.7.3", "solana-program-test", - "solana-sdk 1.14.0", + "solana-sdk 1.14.1", ] [[package]] name = "solana-entry" -version = "1.14.0" +version = "1.14.1" dependencies = [ "bincode", "crossbeam-channel", @@ -5136,18 +5136,18 @@ dependencies = [ "rand 0.7.3", "rayon", "serde", - "solana-logger 1.14.0", + "solana-logger 1.14.1", "solana-measure", "solana-merkle-tree", "solana-metrics", "solana-perf", "solana-rayon-threadlimit", - "solana-sdk 1.14.0", + "solana-sdk 1.14.1", ] [[package]] name = "solana-faucet" -version = "1.14.0" +version = "1.14.1" dependencies = [ "bincode", "byteorder", @@ -5158,9 +5158,9 @@ dependencies = [ "serde_derive", "solana-clap-utils", "solana-cli-config", - "solana-logger 1.14.0", + "solana-logger 1.14.1", "solana-metrics", - "solana-sdk 1.14.0", + "solana-sdk 1.14.1", "solana-version", "spl-memo", "thiserror", @@ -5191,7 +5191,7 @@ dependencies = [ [[package]] name = "solana-frozen-abi" -version = "1.14.0" +version = "1.14.1" dependencies = [ "ahash", "blake3", @@ -5216,8 +5216,8 @@ dependencies = [ "serde_derive", "serde_json", "sha2 0.10.2", - "solana-frozen-abi-macro 1.14.0", - "solana-logger 1.14.0", + "solana-frozen-abi-macro 1.14.1", + "solana-logger 1.14.1", "subtle", "thiserror", ] @@ -5236,7 +5236,7 @@ dependencies = [ [[package]] name = "solana-frozen-abi-macro" -version = "1.14.0" +version = "1.14.1" dependencies = [ "proc-macro2 1.0.41", "quote 1.0.18", @@ -5246,7 +5246,7 @@ dependencies = [ [[package]] name = "solana-genesis" -version = "1.14.0" +version = "1.14.1" dependencies = [ "base64 0.13.0", "clap 2.33.3", @@ -5257,9 +5257,9 @@ dependencies = [ "solana-cli-config", "solana-entry", "solana-ledger", - "solana-logger 1.14.0", + "solana-logger 1.14.1", "solana-runtime", - "solana-sdk 1.14.0", + "solana-sdk 1.14.1", "solana-stake-program", "solana-version", "solana-vote-program", @@ -5268,26 +5268,26 @@ dependencies = [ [[package]] name = "solana-genesis-utils" -version = "1.14.0" +version = "1.14.1" dependencies = [ "solana-download-utils", "solana-runtime", - "solana-sdk 1.14.0", + "solana-sdk 1.14.1", ] [[package]] name = "solana-geyser-plugin-interface" -version = "1.14.0" +version = "1.14.1" dependencies = [ "log", - "solana-sdk 1.14.0", + "solana-sdk 1.14.1", "solana-transaction-status", "thiserror", ] [[package]] name = "solana-geyser-plugin-manager" -version = "1.14.0" +version = "1.14.1" dependencies = [ "bs58", "crossbeam-channel", @@ -5300,14 +5300,14 @@ dependencies = [ "solana-metrics", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.0", + "solana-sdk 1.14.1", "solana-transaction-status", "thiserror", ] [[package]] name = "solana-gossip" -version = "1.14.0" +version = "1.14.1" dependencies = [ "bincode", "bv", @@ -5334,17 +5334,17 @@ dependencies = [ "solana-clap-utils", "solana-client", "solana-entry", - "solana-frozen-abi 1.14.0", - "solana-frozen-abi-macro 1.14.0", + "solana-frozen-abi 1.14.1", + "solana-frozen-abi-macro 1.14.1", "solana-ledger", - "solana-logger 1.14.0", + "solana-logger 1.14.1", "solana-measure", "solana-metrics", "solana-net-utils", "solana-perf", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.14.0", + "solana-sdk 1.14.1", "solana-streamer", "solana-version", "solana-vote-program", @@ -5353,7 +5353,7 @@ dependencies = [ [[package]] name = "solana-install" -version = "1.14.0" +version = "1.14.1" dependencies = [ "atty", "bincode", @@ -5374,8 +5374,8 @@ dependencies = [ "solana-clap-utils", "solana-client", "solana-config-program", - "solana-logger 1.14.0", - "solana-sdk 1.14.0", + "solana-logger 1.14.1", + "solana-sdk 1.14.1", "solana-version", "tar", "tempfile", @@ -5386,7 +5386,7 @@ dependencies = [ [[package]] name = "solana-keygen" -version = "1.14.0" +version = "1.14.1" dependencies = [ "bs58", "clap 3.1.8", @@ -5395,14 +5395,14 @@ dependencies = [ "solana-clap-v3-utils", "solana-cli-config", "solana-remote-wallet", - "solana-sdk 1.14.0", + "solana-sdk 1.14.1", "solana-version", "tiny-bip39", ] [[package]] name = "solana-ledger" -version = "1.14.0" +version = "1.14.1" dependencies = [ "assert_matches", "bincode", @@ -5436,16 +5436,16 @@ dependencies = [ "solana-account-decoder", "solana-bpf-loader-program", "solana-entry", - "solana-frozen-abi 1.14.0", - "solana-frozen-abi-macro 1.14.0", - "solana-logger 1.14.0", + "solana-frozen-abi 1.14.1", + "solana-frozen-abi-macro 1.14.1", + "solana-logger 1.14.1", "solana-measure", "solana-metrics", "solana-perf", "solana-program-runtime", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.14.0", + "solana-sdk 1.14.1", "solana-stake-program", "solana-storage-bigtable", "solana-storage-proto", @@ -5464,7 +5464,7 @@ dependencies = [ [[package]] name = "solana-ledger-tool" -version = "1.14.0" +version = "1.14.1" dependencies = [ "assert_cmd", "bs58", @@ -5486,10 +5486,10 @@ dependencies = [ "solana-core", "solana-entry", "solana-ledger", - "solana-logger 1.14.0", + "solana-logger 1.14.1", "solana-measure", "solana-runtime", - "solana-sdk 1.14.0", + "solana-sdk 1.14.1", "solana-stake-program", "solana-storage-bigtable", "solana-transaction-status", @@ -5501,7 +5501,7 @@ dependencies = [ [[package]] name = "solana-local-cluster" -version = "1.14.0" +version = "1.14.1" dependencies = [ "assert_matches", "crossbeam-channel", @@ -5519,9 +5519,9 @@ dependencies = [ "solana-entry", "solana-gossip", "solana-ledger", - "solana-logger 1.14.0", + "solana-logger 1.14.1", "solana-runtime", - "solana-sdk 1.14.0", + "solana-sdk 1.14.1", "solana-stake-program", "solana-streamer", "solana-vote-program", @@ -5530,13 +5530,13 @@ dependencies = [ [[package]] name = "solana-log-analyzer" -version = "1.14.0" +version = "1.14.1" dependencies = [ "byte-unit", "clap 3.1.8", "serde", "serde_json", - "solana-logger 1.14.0", + "solana-logger 1.14.1", "solana-version", ] @@ -5553,7 +5553,7 @@ dependencies = [ [[package]] name = "solana-logger" -version = "1.14.0" +version = "1.14.1" dependencies = [ "env_logger", "lazy_static", @@ -5562,38 +5562,38 @@ dependencies = [ [[package]] name = "solana-measure" -version = "1.14.0" +version = "1.14.1" dependencies = [ "log", - "solana-sdk 1.14.0", + "solana-sdk 1.14.1", ] [[package]] name = "solana-merkle-root-bench" -version = "1.14.0" +version = "1.14.1" dependencies = [ "clap 2.33.3", "log", - "solana-logger 1.14.0", + "solana-logger 1.14.1", "solana-measure", "solana-runtime", - "solana-sdk 1.14.0", + "solana-sdk 1.14.1", "solana-version", ] [[package]] name = "solana-merkle-tree" -version = "1.14.0" +version = "1.14.1" dependencies = [ "fast-math", "hex", "matches", - "solana-program 1.14.0", + "solana-program 1.14.1", ] [[package]] name = "solana-metrics" -version = "1.14.0" +version = "1.14.1" dependencies = [ "crossbeam-channel", "env_logger", @@ -5603,23 +5603,23 @@ dependencies = [ "rand 0.7.3", "reqwest", "serial_test", - "solana-sdk 1.14.0", + "solana-sdk 1.14.1", ] [[package]] name = "solana-net-shaper" -version = "1.14.0" +version = "1.14.1" dependencies = [ "clap 3.1.8", "rand 0.7.3", "serde", "serde_json", - "solana-logger 1.14.0", + "solana-logger 1.14.1", ] [[package]] name = "solana-net-utils" -version = "1.14.0" +version = "1.14.1" dependencies = [ "bincode", "clap 3.1.8", @@ -5630,8 +5630,8 @@ dependencies = [ "serde", "serde_derive", "socket2", - "solana-logger 1.14.0", - "solana-sdk 1.14.0", + "solana-logger 1.14.1", + "solana-sdk 1.14.1", "solana-version", "tokio", "url 2.2.2", @@ -5639,7 +5639,7 @@ dependencies = [ [[package]] name = "solana-notifier" -version = "1.14.0" +version = "1.14.1" dependencies = [ "log", "reqwest", @@ -5648,7 +5648,7 @@ dependencies = [ [[package]] name = "solana-perf" -version = "1.14.0" +version = "1.14.1" dependencies = [ "ahash", "bincode", @@ -5666,16 +5666,16 @@ dependencies = [ "rand 0.7.3", "rayon", "serde", - "solana-logger 1.14.0", + "solana-logger 1.14.1", "solana-metrics", "solana-rayon-threadlimit", - "solana-sdk 1.14.0", + "solana-sdk 1.14.1", "solana-vote-program", ] [[package]] name = "solana-poh" -version = "1.14.0" +version = "1.14.1" dependencies = [ "bincode", "core_affinity", @@ -5685,29 +5685,29 @@ dependencies = [ "rand 0.7.3", "solana-entry", "solana-ledger", - "solana-logger 1.14.0", + "solana-logger 1.14.1", "solana-measure", "solana-metrics", "solana-perf", "solana-runtime", - "solana-sdk 1.14.0", + "solana-sdk 1.14.1", "solana-sys-tuner", "thiserror", ] [[package]] name = "solana-poh-bench" -version = "1.14.0" +version = "1.14.1" dependencies = [ "clap 3.1.8", "log", "rand 0.7.3", "rayon", "solana-entry", - "solana-logger 1.14.0", + "solana-logger 1.14.1", "solana-measure", "solana-perf", - "solana-sdk 1.14.0", + "solana-sdk 1.14.1", "solana-version", ] @@ -5755,7 +5755,7 @@ dependencies = [ [[package]] name = "solana-program" -version = "1.14.0" +version = "1.14.1" dependencies = [ "anyhow", "assert_matches", @@ -5793,10 +5793,10 @@ dependencies = [ "serde_json", "sha2 0.10.2", "sha3 0.10.1", - "solana-frozen-abi 1.14.0", - "solana-frozen-abi-macro 1.14.0", - "solana-logger 1.14.0", - "solana-sdk-macro 1.14.0", + "solana-frozen-abi 1.14.1", + "solana-frozen-abi-macro 1.14.1", + "solana-logger 1.14.1", + "solana-sdk-macro 1.14.1", "static_assertions", "thiserror", "tiny-bip39", @@ -5806,7 +5806,7 @@ dependencies = [ [[package]] name = "solana-program-runtime" -version = "1.14.0" +version = "1.14.1" dependencies = [ "base64 0.13.0", "bincode", @@ -5820,18 +5820,18 @@ dependencies = [ "num-traits", "rustc_version 0.4.0", "serde", - "solana-frozen-abi 1.14.0", - "solana-frozen-abi-macro 1.14.0", - "solana-logger 1.14.0", + "solana-frozen-abi 1.14.1", + "solana-frozen-abi-macro 1.14.1", + "solana-logger 1.14.1", "solana-measure", "solana-metrics", - "solana-sdk 1.14.0", + "solana-sdk 1.14.1", "thiserror", ] [[package]] name = "solana-program-test" -version = "1.14.0" +version = "1.14.1" dependencies = [ "assert_matches", "async-trait", @@ -5843,10 +5843,10 @@ dependencies = [ "solana-banks-client", "solana-banks-server", "solana-bpf-loader-program", - "solana-logger 1.14.0", + "solana-logger 1.14.1", "solana-program-runtime", "solana-runtime", - "solana-sdk 1.14.0", + "solana-sdk 1.14.1", "solana-vote-program", "thiserror", "tokio", @@ -5854,7 +5854,7 @@ dependencies = [ [[package]] name = "solana-rayon-threadlimit" -version = "1.14.0" +version = "1.14.1" dependencies = [ "lazy_static", "num_cpus", @@ -5862,7 +5862,7 @@ dependencies = [ [[package]] name = "solana-remote-wallet" -version = "1.14.0" +version = "1.14.1" dependencies = [ "console", "dialoguer", @@ -5873,14 +5873,14 @@ dependencies = [ "parking_lot 0.12.1", "qstring", "semver 1.0.10", - "solana-sdk 1.14.0", + "solana-sdk 1.14.1", "thiserror", "uriparse", ] [[package]] name = "solana-rpc" -version = "1.14.0" +version = "1.14.1" dependencies = [ "base64 0.13.0", "bincode", @@ -5916,7 +5916,7 @@ dependencies = [ "solana-poh", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.14.0", + "solana-sdk 1.14.1", "solana-send-transaction-service", "solana-stake-program", "solana-storage-bigtable", @@ -5935,7 +5935,7 @@ dependencies = [ [[package]] name = "solana-rpc-test" -version = "1.14.0" +version = "1.14.1" dependencies = [ "bincode", "bs58", @@ -5947,9 +5947,9 @@ dependencies = [ "serde_json", "solana-account-decoder", "solana-client", - "solana-logger 1.14.0", + "solana-logger 1.14.1", "solana-rpc", - "solana-sdk 1.14.0", + "solana-sdk 1.14.1", "solana-streamer", "solana-test-validator", "solana-transaction-status", @@ -5958,7 +5958,7 @@ dependencies = [ [[package]] name = "solana-runtime" -version = "1.14.0" +version = "1.14.1" dependencies = [ "arrayref", "assert_matches", @@ -5998,18 +5998,18 @@ dependencies = [ "solana-bucket-map", "solana-compute-budget-program", "solana-config-program", - "solana-frozen-abi 1.14.0", - "solana-frozen-abi-macro 1.14.0", - "solana-logger 1.14.0", + "solana-frozen-abi 1.14.1", + "solana-frozen-abi-macro 1.14.1", + "solana-logger 1.14.1", "solana-measure", "solana-metrics", "solana-program-runtime", "solana-rayon-threadlimit", - "solana-sdk 1.14.0", + "solana-sdk 1.14.1", "solana-stake-program", "solana-vote-program", "solana-zk-token-proof-program", - "solana-zk-token-sdk 1.14.0", + "solana-zk-token-sdk 1.14.1", "strum", "strum_macros", "symlink", @@ -6072,7 +6072,7 @@ dependencies = [ [[package]] name = "solana-sdk" -version = "1.14.0" +version = "1.14.1" dependencies = [ "anyhow", "assert_matches", @@ -6112,11 +6112,11 @@ dependencies = [ "serde_json", "sha2 0.10.2", "sha3 0.10.1", - "solana-frozen-abi 1.14.0", - "solana-frozen-abi-macro 1.14.0", - "solana-logger 1.14.0", - "solana-program 1.14.0", - "solana-sdk-macro 1.14.0", + "solana-frozen-abi 1.14.1", + "solana-frozen-abi-macro 1.14.1", + "solana-logger 1.14.1", + "solana-program 1.14.1", + "solana-sdk-macro 1.14.1", "static_assertions", "thiserror", "tiny-bip39", @@ -6139,7 +6139,7 @@ dependencies = [ [[package]] name = "solana-sdk-macro" -version = "1.14.0" +version = "1.14.1" dependencies = [ "bs58", "proc-macro2 1.0.41", @@ -6150,21 +6150,21 @@ dependencies = [ [[package]] name = "solana-send-transaction-service" -version = "1.14.0" +version = "1.14.1" dependencies = [ "crossbeam-channel", "log", "solana-client", - "solana-logger 1.14.0", + "solana-logger 1.14.1", "solana-measure", "solana-metrics", "solana-runtime", - "solana-sdk 1.14.0", + "solana-sdk 1.14.1", ] [[package]] name = "solana-stake-accounts" -version = "1.14.0" +version = "1.14.1" dependencies = [ "clap 2.33.3", "solana-clap-utils", @@ -6172,13 +6172,13 @@ dependencies = [ "solana-client", "solana-remote-wallet", "solana-runtime", - "solana-sdk 1.14.0", + "solana-sdk 1.14.1", "solana-stake-program", ] [[package]] name = "solana-stake-program" -version = "1.14.0" +version = "1.14.1" dependencies = [ "assert_matches", "bincode", @@ -6190,12 +6190,12 @@ dependencies = [ "serde", "serde_derive", "solana-config-program", - "solana-frozen-abi 1.14.0", - "solana-frozen-abi-macro 1.14.0", - "solana-logger 1.14.0", + "solana-frozen-abi 1.14.1", + "solana-frozen-abi-macro 1.14.1", + "solana-logger 1.14.1", "solana-metrics", "solana-program-runtime", - "solana-sdk 1.14.0", + "solana-sdk 1.14.1", "solana-vote-program", "test-case", "thiserror", @@ -6203,7 +6203,7 @@ dependencies = [ [[package]] name = "solana-storage-bigtable" -version = "1.14.0" +version = "1.14.1" dependencies = [ "backoff", "bincode", @@ -6224,7 +6224,7 @@ dependencies = [ "serde_derive", "smpl_jwt", "solana-metrics", - "solana-sdk 1.14.0", + "solana-sdk 1.14.1", "solana-storage-proto", "solana-transaction-status", "thiserror", @@ -6235,7 +6235,7 @@ dependencies = [ [[package]] name = "solana-storage-proto" -version = "1.14.0" +version = "1.14.1" dependencies = [ "bincode", "bs58", @@ -6244,25 +6244,25 @@ dependencies = [ "protobuf-src", "serde", "solana-account-decoder", - "solana-sdk 1.14.0", + "solana-sdk 1.14.1", "solana-transaction-status", "tonic-build 0.8.0", ] [[package]] name = "solana-store-tool" -version = "1.14.0" +version = "1.14.1" dependencies = [ "clap 2.33.3", "log", - "solana-logger 1.14.0", + "solana-logger 1.14.1", "solana-runtime", "solana-version", ] [[package]] name = "solana-streamer" -version = "1.14.0" +version = "1.14.1" dependencies = [ "crossbeam-channel", "futures-util", @@ -6279,10 +6279,10 @@ dependencies = [ "rand 0.7.3", "rcgen", "rustls 0.20.6", - "solana-logger 1.14.0", + "solana-logger 1.14.1", "solana-metrics", "solana-perf", - "solana-sdk 1.14.0", + "solana-sdk 1.14.1", "thiserror", "tokio", "x509-parser", @@ -6290,13 +6290,13 @@ dependencies = [ [[package]] name = "solana-sys-tuner" -version = "1.14.0" +version = "1.14.1" dependencies = [ "clap 2.33.3", "libc", "log", "nix", - "solana-logger 1.14.0", + "solana-logger 1.14.1", "solana-version", "sysctl", "unix_socket2", @@ -6305,7 +6305,7 @@ dependencies = [ [[package]] name = "solana-test-validator" -version = "1.14.0" +version = "1.14.1" dependencies = [ "base64 0.13.0", "log", @@ -6316,20 +6316,20 @@ dependencies = [ "solana-core", "solana-gossip", "solana-ledger", - "solana-logger 1.14.0", + "solana-logger 1.14.1", "solana-net-utils", "solana-program-runtime", "solana-program-test", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.0", + "solana-sdk 1.14.1", "solana-streamer", "tokio", ] [[package]] name = "solana-tokens" -version = "1.14.0" +version = "1.14.1" dependencies = [ "bincode", "chrono", @@ -6345,9 +6345,9 @@ dependencies = [ "solana-clap-utils", "solana-cli-config", "solana-client", - "solana-logger 1.14.0", + "solana-logger 1.14.1", "solana-remote-wallet", - "solana-sdk 1.14.0", + "solana-sdk 1.14.1", "solana-streamer", "solana-test-validator", "solana-transaction-status", @@ -6360,7 +6360,7 @@ dependencies = [ [[package]] name = "solana-transaction-dos" -version = "1.14.0" +version = "1.14.1" dependencies = [ "bincode", "clap 2.33.3", @@ -6374,11 +6374,11 @@ dependencies = [ "solana-faucet", "solana-gossip", "solana-local-cluster", - "solana-logger 1.14.0", + "solana-logger 1.14.1", "solana-measure", "solana-net-utils", "solana-runtime", - "solana-sdk 1.14.0", + "solana-sdk 1.14.1", "solana-streamer", "solana-transaction-status", "solana-version", @@ -6386,7 +6386,7 @@ dependencies = [ [[package]] name = "solana-transaction-status" -version = "1.14.0" +version = "1.14.1" dependencies = [ "Inflector", "base64 0.13.0", @@ -6401,7 +6401,7 @@ dependencies = [ "solana-account-decoder", "solana-measure", "solana-metrics", - "solana-sdk 1.14.0", + "solana-sdk 1.14.1", "solana-vote-program", "spl-associated-token-account", "spl-memo", @@ -6412,7 +6412,7 @@ dependencies = [ [[package]] name = "solana-upload-perf" -version = "1.14.0" +version = "1.14.1" dependencies = [ "serde_json", "solana-metrics", @@ -6420,7 +6420,7 @@ dependencies = [ [[package]] name = "solana-validator" -version = "1.14.0" +version = "1.14.1" dependencies = [ "chrono", "clap 2.33.3", @@ -6451,14 +6451,14 @@ dependencies = [ "solana-genesis-utils", "solana-gossip", "solana-ledger", - "solana-logger 1.14.0", + "solana-logger 1.14.1", "solana-metrics", "solana-net-utils", "solana-perf", "solana-poh", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.0", + "solana-sdk 1.14.1", "solana-send-transaction-service", "solana-storage-bigtable", "solana-streamer", @@ -6471,21 +6471,21 @@ dependencies = [ [[package]] name = "solana-version" -version = "1.14.0" +version = "1.14.1" dependencies = [ "log", "rustc_version 0.4.0", "semver 1.0.10", "serde", "serde_derive", - "solana-frozen-abi 1.14.0", - "solana-frozen-abi-macro 1.14.0", - "solana-sdk 1.14.0", + "solana-frozen-abi 1.14.1", + "solana-frozen-abi-macro 1.14.1", + "solana-sdk 1.14.1", ] [[package]] name = "solana-vote-program" -version = "1.14.0" +version = "1.14.1" dependencies = [ "bincode", "itertools", @@ -6496,18 +6496,18 @@ dependencies = [ "rustc_version 0.4.0", "serde", "serde_derive", - "solana-frozen-abi 1.14.0", - "solana-frozen-abi-macro 1.14.0", - "solana-logger 1.14.0", + "solana-frozen-abi 1.14.1", + "solana-frozen-abi-macro 1.14.1", + "solana-logger 1.14.1", "solana-metrics", "solana-program-runtime", - "solana-sdk 1.14.0", + "solana-sdk 1.14.1", "thiserror", ] [[package]] name = "solana-watchtower" -version = "1.14.0" +version = "1.14.1" dependencies = [ "clap 2.33.3", "humantime", @@ -6516,24 +6516,24 @@ dependencies = [ "solana-cli-config", "solana-cli-output", "solana-client", - "solana-logger 1.14.0", + "solana-logger 1.14.1", "solana-metrics", "solana-notifier", - "solana-sdk 1.14.0", + "solana-sdk 1.14.1", "solana-version", ] [[package]] name = "solana-zk-token-proof-program" -version = "1.14.0" +version = "1.14.1" dependencies = [ "bytemuck", "getrandom 0.1.16", "num-derive", "num-traits", "solana-program-runtime", - "solana-sdk 1.14.0", - "solana-zk-token-sdk 1.14.0", + "solana-sdk 1.14.1", + "solana-zk-token-sdk 1.14.1", ] [[package]] @@ -6568,7 +6568,7 @@ dependencies = [ [[package]] name = "solana-zk-token-sdk" -version = "1.14.0" +version = "1.14.1" dependencies = [ "aes-gcm-siv", "arrayref", @@ -6588,8 +6588,8 @@ dependencies = [ "serde", "serde_json", "sha3 0.9.1", - "solana-program 1.14.0", - "solana-sdk 1.14.0", + "solana-program 1.14.1", + "solana-sdk 1.14.1", "subtle", "thiserror", "zeroize", diff --git a/account-decoder/Cargo.toml b/account-decoder/Cargo.toml index 3f5230901afe87..bfb78e4ffe6b55 100644 --- a/account-decoder/Cargo.toml +++ b/account-decoder/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-account-decoder" -version = "1.14.0" +version = "1.14.1" description = "Solana account decoder" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -19,9 +19,9 @@ lazy_static = "1.4.0" serde = "1.0.138" serde_derive = "1.0.103" serde_json = "1.0.81" -solana-config-program = { path = "../programs/config", version = "=1.14.0" } -solana-sdk = { path = "../sdk", version = "=1.14.0" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.0" } +solana-config-program = { path = "../programs/config", version = "=1.14.1" } +solana-sdk = { path = "../sdk", version = "=1.14.1" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.1" } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } spl-token-2022 = { version = "=0.4.2", features = ["no-entrypoint"] } thiserror = "1.0" diff --git a/accounts-bench/Cargo.toml b/accounts-bench/Cargo.toml index f626ce55534f5a..6c7a823324a9a4 100644 --- a/accounts-bench/Cargo.toml +++ b/accounts-bench/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-accounts-bench" -version = "1.14.0" +version = "1.14.1" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -12,11 +12,11 @@ publish = false clap = "2.33.1" log = "0.4.17" rayon = "1.5.3" -solana-logger = { path = "../logger", version = "=1.14.0" } -solana-measure = { path = "../measure", version = "=1.14.0" } -solana-runtime = { path = "../runtime", version = "=1.14.0" } -solana-sdk = { path = "../sdk", version = "=1.14.0" } -solana-version = { path = "../version", version = "=1.14.0" } +solana-logger = { path = "../logger", version = "=1.14.1" } +solana-measure = { path = "../measure", version = "=1.14.1" } +solana-runtime = { path = "../runtime", version = "=1.14.1" } +solana-sdk = { path = "../sdk", version = "=1.14.1" } +solana-version = { path = "../version", version = "=1.14.1" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/accounts-cluster-bench/Cargo.toml b/accounts-cluster-bench/Cargo.toml index ea021ca3f81307..cad40c5e2a019b 100644 --- a/accounts-cluster-bench/Cargo.toml +++ b/accounts-cluster-bench/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-accounts-cluster-bench" -version = "1.14.0" +version = "1.14.1" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -13,25 +13,25 @@ clap = "2.33.1" log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.0" } -solana-clap-utils = { path = "../clap-utils", version = "=1.14.0" } -solana-client = { path = "../client", version = "=1.14.0" } -solana-faucet = { path = "../faucet", version = "=1.14.0" } -solana-gossip = { path = "../gossip", version = "=1.14.0" } -solana-logger = { path = "../logger", version = "=1.14.0" } -solana-measure = { path = "../measure", version = "=1.14.0" } -solana-net-utils = { path = "../net-utils", version = "=1.14.0" } -solana-runtime = { path = "../runtime", version = "=1.14.0" } -solana-sdk = { path = "../sdk", version = "=1.14.0" } -solana-streamer = { path = "../streamer", version = "=1.14.0" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.0" } -solana-version = { path = "../version", version = "=1.14.0" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.1" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.1" } +solana-client = { path = "../client", version = "=1.14.1" } +solana-faucet = { path = "../faucet", version = "=1.14.1" } +solana-gossip = { path = "../gossip", version = "=1.14.1" } +solana-logger = { path = "../logger", version = "=1.14.1" } +solana-measure = { path = "../measure", version = "=1.14.1" } +solana-net-utils = { path = "../net-utils", version = "=1.14.1" } +solana-runtime = { path = "../runtime", version = "=1.14.1" } +solana-sdk = { path = "../sdk", version = "=1.14.1" } +solana-streamer = { path = "../streamer", version = "=1.14.1" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.1" } +solana-version = { path = "../version", version = "=1.14.1" } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } [dev-dependencies] -solana-core = { path = "../core", version = "=1.14.0" } -solana-local-cluster = { path = "../local-cluster", version = "=1.14.0" } -solana-test-validator = { path = "../test-validator", version = "=1.14.0" } +solana-core = { path = "../core", version = "=1.14.1" } +solana-local-cluster = { path = "../local-cluster", version = "=1.14.1" } +solana-test-validator = { path = "../test-validator", version = "=1.14.1" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/banking-bench/Cargo.toml b/banking-bench/Cargo.toml index 6b05cf09085b70..2ec862d83ad240 100644 --- a/banking-bench/Cargo.toml +++ b/banking-bench/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-banking-bench" -version = "1.14.0" +version = "1.14.1" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,18 +14,18 @@ crossbeam-channel = "0.5" log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" -solana-client = { path = "../client", version = "=1.14.0" } -solana-core = { path = "../core", version = "=1.14.0" } -solana-gossip = { path = "../gossip", version = "=1.14.0" } -solana-ledger = { path = "../ledger", version = "=1.14.0" } -solana-logger = { path = "../logger", version = "=1.14.0" } -solana-measure = { path = "../measure", version = "=1.14.0" } -solana-perf = { path = "../perf", version = "=1.14.0" } -solana-poh = { path = "../poh", version = "=1.14.0" } -solana-runtime = { path = "../runtime", version = "=1.14.0" } -solana-sdk = { path = "../sdk", version = "=1.14.0" } -solana-streamer = { path = "../streamer", version = "=1.14.0" } -solana-version = { path = "../version", version = "=1.14.0" } +solana-client = { path = "../client", version = "=1.14.1" } +solana-core = { path = "../core", version = "=1.14.1" } +solana-gossip = { path = "../gossip", version = "=1.14.1" } +solana-ledger = { path = "../ledger", version = "=1.14.1" } +solana-logger = { path = "../logger", version = "=1.14.1" } +solana-measure = { path = "../measure", version = "=1.14.1" } +solana-perf = { path = "../perf", version = "=1.14.1" } +solana-poh = { path = "../poh", version = "=1.14.1" } +solana-runtime = { path = "../runtime", version = "=1.14.1" } +solana-sdk = { path = "../sdk", version = "=1.14.1" } +solana-streamer = { path = "../streamer", version = "=1.14.1" } +solana-version = { path = "../version", version = "=1.14.1" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/banks-client/Cargo.toml b/banks-client/Cargo.toml index 891d0994897415..c6f923057e1276 100644 --- a/banks-client/Cargo.toml +++ b/banks-client/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-banks-client" -version = "1.14.0" +version = "1.14.1" description = "Solana banks client" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,17 +12,17 @@ edition = "2021" [dependencies] borsh = "0.9.3" futures = "0.3" -solana-banks-interface = { path = "../banks-interface", version = "=1.14.0" } -solana-program = { path = "../sdk/program", version = "=1.14.0" } -solana-sdk = { path = "../sdk", version = "=1.14.0" } +solana-banks-interface = { path = "../banks-interface", version = "=1.14.1" } +solana-program = { path = "../sdk/program", version = "=1.14.1" } +solana-sdk = { path = "../sdk", version = "=1.14.1" } tarpc = { version = "0.29.0", features = ["full"] } thiserror = "1.0" tokio = { version = "~1.14.1", features = ["full"] } tokio-serde = { version = "0.8", features = ["bincode"] } [dev-dependencies] -solana-banks-server = { path = "../banks-server", version = "=1.14.0" } -solana-runtime = { path = "../runtime", version = "=1.14.0" } +solana-banks-server = { path = "../banks-server", version = "=1.14.1" } +solana-runtime = { path = "../runtime", version = "=1.14.1" } [lib] crate-type = ["lib"] diff --git a/banks-interface/Cargo.toml b/banks-interface/Cargo.toml index 1f1386dd5bf6e3..278efd4c0c9da8 100644 --- a/banks-interface/Cargo.toml +++ b/banks-interface/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-banks-interface" -version = "1.14.0" +version = "1.14.1" description = "Solana banks RPC interface" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -11,7 +11,7 @@ edition = "2021" [dependencies] serde = { version = "1.0.138", features = ["derive"] } -solana-sdk = { path = "../sdk", version = "=1.14.0" } +solana-sdk = { path = "../sdk", version = "=1.14.1" } tarpc = { version = "0.29.0", features = ["full"] } [lib] diff --git a/banks-server/Cargo.toml b/banks-server/Cargo.toml index d809784d9b7d48..27af15f6754b14 100644 --- a/banks-server/Cargo.toml +++ b/banks-server/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-banks-server" -version = "1.14.0" +version = "1.14.1" description = "Solana banks server" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,11 +13,11 @@ edition = "2021" bincode = "1.3.3" crossbeam-channel = "0.5" futures = "0.3" -solana-banks-interface = { path = "../banks-interface", version = "=1.14.0" } -solana-client = { path = "../client", version = "=1.14.0" } -solana-runtime = { path = "../runtime", version = "=1.14.0" } -solana-sdk = { path = "../sdk", version = "=1.14.0" } -solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.0" } +solana-banks-interface = { path = "../banks-interface", version = "=1.14.1" } +solana-client = { path = "../client", version = "=1.14.1" } +solana-runtime = { path = "../runtime", version = "=1.14.1" } +solana-sdk = { path = "../sdk", version = "=1.14.1" } +solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.1" } tarpc = { version = "0.29.0", features = ["full"] } tokio = { version = "1", features = ["full"] } tokio-serde = { version = "0.8", features = ["bincode"] } diff --git a/bench-streamer/Cargo.toml b/bench-streamer/Cargo.toml index 950390665cba1a..4ea64fbecdd4a5 100644 --- a/bench-streamer/Cargo.toml +++ b/bench-streamer/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-bench-streamer" -version = "1.14.0" +version = "1.14.1" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -11,9 +11,9 @@ publish = false [dependencies] clap = { version = "3.1.5", features = ["cargo"] } crossbeam-channel = "0.5" -solana-net-utils = { path = "../net-utils", version = "=1.14.0" } -solana-streamer = { path = "../streamer", version = "=1.14.0" } -solana-version = { path = "../version", version = "=1.14.0" } +solana-net-utils = { path = "../net-utils", version = "=1.14.1" } +solana-streamer = { path = "../streamer", version = "=1.14.1" } +solana-version = { path = "../version", version = "=1.14.1" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/bench-tps/Cargo.toml b/bench-tps/Cargo.toml index 9d8eda21e57ff7..7b30e031f8a74c 100644 --- a/bench-tps/Cargo.toml +++ b/bench-tps/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-bench-tps" -version = "1.14.0" +version = "1.14.1" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -15,28 +15,28 @@ log = "0.4.17" rayon = "1.5.3" serde_json = "1.0.81" serde_yaml = "0.8.26" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.0" } -solana-cli-config = { path = "../cli-config", version = "=1.14.0" } -solana-client = { path = "../client", version = "=1.14.0" } -solana-core = { path = "../core", version = "=1.14.0" } -solana-faucet = { path = "../faucet", version = "=1.14.0" } -solana-genesis = { path = "../genesis", version = "=1.14.0" } -solana-gossip = { path = "../gossip", version = "=1.14.0" } -solana-logger = { path = "../logger", version = "=1.14.0" } -solana-measure = { path = "../measure", version = "=1.14.0" } -solana-metrics = { path = "../metrics", version = "=1.14.0" } -solana-net-utils = { path = "../net-utils", version = "=1.14.0" } -solana-rpc = { path = "../rpc", version = "=1.14.0" } -solana-runtime = { path = "../runtime", version = "=1.14.0" } -solana-sdk = { path = "../sdk", version = "=1.14.0" } -solana-streamer = { path = "../streamer", version = "=1.14.0" } -solana-version = { path = "../version", version = "=1.14.0" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.1" } +solana-cli-config = { path = "../cli-config", version = "=1.14.1" } +solana-client = { path = "../client", version = "=1.14.1" } +solana-core = { path = "../core", version = "=1.14.1" } +solana-faucet = { path = "../faucet", version = "=1.14.1" } +solana-genesis = { path = "../genesis", version = "=1.14.1" } +solana-gossip = { path = "../gossip", version = "=1.14.1" } +solana-logger = { path = "../logger", version = "=1.14.1" } +solana-measure = { path = "../measure", version = "=1.14.1" } +solana-metrics = { path = "../metrics", version = "=1.14.1" } +solana-net-utils = { path = "../net-utils", version = "=1.14.1" } +solana-rpc = { path = "../rpc", version = "=1.14.1" } +solana-runtime = { path = "../runtime", version = "=1.14.1" } +solana-sdk = { path = "../sdk", version = "=1.14.1" } +solana-streamer = { path = "../streamer", version = "=1.14.1" } +solana-version = { path = "../version", version = "=1.14.1" } thiserror = "1.0" [dev-dependencies] serial_test = "0.8.0" -solana-local-cluster = { path = "../local-cluster", version = "=1.14.0" } -solana-test-validator = { path = "../test-validator", version = "=1.14.0" } +solana-local-cluster = { path = "../local-cluster", version = "=1.14.1" } +solana-test-validator = { path = "../test-validator", version = "=1.14.1" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/bloom/Cargo.toml b/bloom/Cargo.toml index 1ec07b406da797..bd09fdcd59b070 100644 --- a/bloom/Cargo.toml +++ b/bloom/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bloom" -version = "1.14.0" +version = "1.14.1" description = "Solana bloom filter" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -17,9 +17,9 @@ rand = "0.7.0" rayon = "1.5.3" serde = { version = "1.0.138", features = ["rc"] } serde_derive = "1.0.103" -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.0" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.0" } -solana-sdk = { path = "../sdk", version = "=1.14.0" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.1" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.1" } +solana-sdk = { path = "../sdk", version = "=1.14.1" } [lib] crate-type = ["lib"] diff --git a/bucket_map/Cargo.toml b/bucket_map/Cargo.toml index 1d35d523e4d2e0..55ce2c2a7e368c 100644 --- a/bucket_map/Cargo.toml +++ b/bucket_map/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bucket-map" -version = "1.14.0" +version = "1.14.1" description = "solana-bucket-map" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-bucket-map" @@ -15,14 +15,14 @@ log = { version = "0.4.17" } memmap2 = "0.5.3" modular-bitfield = "0.11.2" rand = "0.7.0" -solana-measure = { path = "../measure", version = "=1.14.0" } -solana-sdk = { path = "../sdk", version = "=1.14.0" } +solana-measure = { path = "../measure", version = "=1.14.1" } +solana-sdk = { path = "../sdk", version = "=1.14.1" } tempfile = "3.3.0" [dev-dependencies] fs_extra = "1.2.0" rayon = "1.5.3" -solana-logger = { path = "../logger", version = "=1.14.0" } +solana-logger = { path = "../logger", version = "=1.14.1" } [lib] crate-type = ["lib"] diff --git a/clap-utils/Cargo.toml b/clap-utils/Cargo.toml index 2b06bce6e717e5..92ed800765ddf6 100644 --- a/clap-utils/Cargo.toml +++ b/clap-utils/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-clap-utils" -version = "1.14.0" +version = "1.14.1" description = "Solana utilities for the clap" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,9 +13,9 @@ edition = "2021" chrono = "0.4" clap = "2.33.0" rpassword = "6.0" -solana-perf = { path = "../perf", version = "=1.14.0" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.0", default-features = false } -solana-sdk = { path = "../sdk", version = "=1.14.0" } +solana-perf = { path = "../perf", version = "=1.14.1" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.1", default-features = false } +solana-sdk = { path = "../sdk", version = "=1.14.1" } thiserror = "1.0.31" tiny-bip39 = "0.8.2" uriparse = "0.6.4" diff --git a/clap-v3-utils/Cargo.toml b/clap-v3-utils/Cargo.toml index 76199a85d2634c..c04f7bb7c3a76a 100644 --- a/clap-v3-utils/Cargo.toml +++ b/clap-v3-utils/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-clap-v3-utils" -version = "1.14.0" +version = "1.14.1" description = "Solana utilities for the clap v3" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,9 +13,9 @@ edition = "2021" chrono = "0.4" clap = { version = "3.1.5", features = ["cargo"] } rpassword = "6.0" -solana-perf = { path = "../perf", version = "=1.14.0" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.0", default-features = false } -solana-sdk = { path = "../sdk", version = "=1.14.0" } +solana-perf = { path = "../perf", version = "=1.14.1" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.1", default-features = false } +solana-sdk = { path = "../sdk", version = "=1.14.1" } thiserror = "1.0.31" tiny-bip39 = "0.8.2" uriparse = "0.6.4" diff --git a/cli-config/Cargo.toml b/cli-config/Cargo.toml index 73b45d968d2faa..ededb12fb54a8f 100644 --- a/cli-config/Cargo.toml +++ b/cli-config/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-cli-config" description = "Blockchain, Rebuilt for Scale" -version = "1.14.0" +version = "1.14.1" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -15,8 +15,8 @@ lazy_static = "1.4.0" serde = "1.0.138" serde_derive = "1.0.103" serde_yaml = "0.8.26" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.0" } -solana-sdk = { path = "../sdk", version = "=1.14.0" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.1" } +solana-sdk = { path = "../sdk", version = "=1.14.1" } url = "2.2.2" [dev-dependencies] diff --git a/cli-output/Cargo.toml b/cli-output/Cargo.toml index 6dd19ef3285d20..5801f9354dafcf 100644 --- a/cli-output/Cargo.toml +++ b/cli-output/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-cli-output" description = "Blockchain, Rebuilt for Scale" -version = "1.14.0" +version = "1.14.1" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -21,13 +21,13 @@ pretty-hex = "0.3.0" semver = "1.0.10" serde = "1.0.138" serde_json = "1.0.81" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.0" } -solana-clap-utils = { path = "../clap-utils", version = "=1.14.0" } -solana-cli-config = { path = "../cli-config", version = "=1.14.0" } -solana-client = { path = "../client", version = "=1.14.0" } -solana-sdk = { path = "../sdk", version = "=1.14.0" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.0" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.0" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.1" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.1" } +solana-cli-config = { path = "../cli-config", version = "=1.14.1" } +solana-client = { path = "../client", version = "=1.14.1" } +solana-sdk = { path = "../sdk", version = "=1.14.1" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.1" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.1" } spl-memo = { version = "=3.0.1", features = ["no-entrypoint"] } [dev-dependencies] diff --git a/cli/Cargo.toml b/cli/Cargo.toml index 798bf935f02e20..43fb12e7e967eb 100644 --- a/cli/Cargo.toml +++ b/cli/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-cli" description = "Blockchain, Rebuilt for Scale" -version = "1.14.0" +version = "1.14.1" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -27,29 +27,29 @@ semver = "1.0.10" serde = "1.0.138" serde_derive = "1.0.103" serde_json = "1.0.81" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.0" } -solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.0" } -solana-clap-utils = { path = "../clap-utils", version = "=1.14.0" } -solana-cli-config = { path = "../cli-config", version = "=1.14.0" } -solana-cli-output = { path = "../cli-output", version = "=1.14.0" } -solana-client = { path = "../client", version = "=1.14.0" } -solana-config-program = { path = "../programs/config", version = "=1.14.0" } -solana-faucet = { path = "../faucet", version = "=1.14.0" } -solana-logger = { path = "../logger", version = "=1.14.0" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.0" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.0" } -solana-sdk = { path = "../sdk", version = "=1.14.0" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.0" } -solana-version = { path = "../version", version = "=1.14.0" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.0" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.1" } +solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.1" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.1" } +solana-cli-config = { path = "../cli-config", version = "=1.14.1" } +solana-cli-output = { path = "../cli-output", version = "=1.14.1" } +solana-client = { path = "../client", version = "=1.14.1" } +solana-config-program = { path = "../programs/config", version = "=1.14.1" } +solana-faucet = { path = "../faucet", version = "=1.14.1" } +solana-logger = { path = "../logger", version = "=1.14.1" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.1" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.1" } +solana-sdk = { path = "../sdk", version = "=1.14.1" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.1" } +solana-version = { path = "../version", version = "=1.14.1" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.1" } solana_rbpf = "=0.2.31" spl-memo = { version = "=3.0.1", features = ["no-entrypoint"] } thiserror = "1.0.31" tiny-bip39 = "0.8.2" [dev-dependencies] -solana-streamer = { path = "../streamer", version = "=1.14.0" } -solana-test-validator = { path = "../test-validator", version = "=1.14.0" } +solana-streamer = { path = "../streamer", version = "=1.14.1" } +solana-test-validator = { path = "../test-validator", version = "=1.14.1" } tempfile = "3.3.0" [[bin]] diff --git a/client-test/Cargo.toml b/client-test/Cargo.toml index e59f1fc0f83f17..a6d7813b67ad7d 100644 --- a/client-test/Cargo.toml +++ b/client-test/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-client-test" -version = "1.14.0" +version = "1.14.1" description = "Solana RPC Test" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,25 +14,25 @@ publish = false futures-util = "0.3.21" serde_json = "1.0.81" serial_test = "0.8.0" -solana-client = { path = "../client", version = "=1.14.0" } -solana-ledger = { path = "../ledger", version = "=1.14.0" } -solana-measure = { path = "../measure", version = "=1.14.0" } -solana-merkle-tree = { path = "../merkle-tree", version = "=1.14.0" } -solana-metrics = { path = "../metrics", version = "=1.14.0" } -solana-perf = { path = "../perf", version = "=1.14.0" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.0" } -solana-rpc = { path = "../rpc", version = "=1.14.0" } -solana-runtime = { path = "../runtime", version = "=1.14.0" } -solana-sdk = { path = "../sdk", version = "=1.14.0" } -solana-streamer = { path = "../streamer", version = "=1.14.0" } -solana-test-validator = { path = "../test-validator", version = "=1.14.0" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.0" } -solana-version = { path = "../version", version = "=1.14.0" } +solana-client = { path = "../client", version = "=1.14.1" } +solana-ledger = { path = "../ledger", version = "=1.14.1" } +solana-measure = { path = "../measure", version = "=1.14.1" } +solana-merkle-tree = { path = "../merkle-tree", version = "=1.14.1" } +solana-metrics = { path = "../metrics", version = "=1.14.1" } +solana-perf = { path = "../perf", version = "=1.14.1" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.1" } +solana-rpc = { path = "../rpc", version = "=1.14.1" } +solana-runtime = { path = "../runtime", version = "=1.14.1" } +solana-sdk = { path = "../sdk", version = "=1.14.1" } +solana-streamer = { path = "../streamer", version = "=1.14.1" } +solana-test-validator = { path = "../test-validator", version = "=1.14.1" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.1" } +solana-version = { path = "../version", version = "=1.14.1" } systemstat = "0.1.11" tokio = { version = "~1.14.1", features = ["full"] } [dev-dependencies] -solana-logger = { path = "../logger", version = "=1.14.0" } +solana-logger = { path = "../logger", version = "=1.14.1" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/client/Cargo.toml b/client/Cargo.toml index 98052c4bd759c2..1a49ba450e1f57 100644 --- a/client/Cargo.toml +++ b/client/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-client" -version = "1.14.0" +version = "1.14.1" description = "Solana Client" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -38,17 +38,17 @@ semver = "1.0.10" serde = "1.0.138" serde_derive = "1.0.103" serde_json = "1.0.81" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.0" } -solana-clap-utils = { path = "../clap-utils", version = "=1.14.0" } -solana-faucet = { path = "../faucet", version = "=1.14.0" } -solana-measure = { path = "../measure", version = "=1.14.0" } -solana-metrics = { path = "../metrics", version = "=1.14.0" } -solana-net-utils = { path = "../net-utils", version = "=1.14.0" } -solana-sdk = { path = "../sdk", version = "=1.14.0" } -solana-streamer = { path = "../streamer", version = "=1.14.0" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.0" } -solana-version = { path = "../version", version = "=1.14.0" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.0" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.1" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.1" } +solana-faucet = { path = "../faucet", version = "=1.14.1" } +solana-measure = { path = "../measure", version = "=1.14.1" } +solana-metrics = { path = "../metrics", version = "=1.14.1" } +solana-net-utils = { path = "../net-utils", version = "=1.14.1" } +solana-sdk = { path = "../sdk", version = "=1.14.1" } +solana-streamer = { path = "../streamer", version = "=1.14.1" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.1" } +solana-version = { path = "../version", version = "=1.14.1" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.1" } spl-token-2022 = { version = "=0.4.2", features = ["no-entrypoint"] } thiserror = "1.0" tokio = { version = "1", features = ["full"] } @@ -61,8 +61,8 @@ url = "2.2.2" anyhow = "1.0.58" assert_matches = "1.5.0" jsonrpc-http-server = "18.0.0" -solana-logger = { path = "../logger", version = "=1.14.0" } -solana-perf = { path = "../perf", version = "=1.14.0" } +solana-logger = { path = "../logger", version = "=1.14.1" } +solana-perf = { path = "../perf", version = "=1.14.1" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/core/Cargo.toml b/core/Cargo.toml index 1df6c21fc44d53..83193b6bb326ee 100644 --- a/core/Cargo.toml +++ b/core/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "solana-core" description = "Blockchain, Rebuilt for Scale" -version = "1.14.0" +version = "1.14.1" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-core" readme = "../README.md" @@ -35,30 +35,30 @@ rand_chacha = "0.2.2" rayon = "1.5.3" serde = "1.0.138" serde_derive = "1.0.103" -solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.0" } -solana-bloom = { path = "../bloom", version = "=1.14.0" } -solana-client = { path = "../client", version = "=1.14.0" } -solana-entry = { path = "../entry", version = "=1.14.0" } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.0" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.0" } -solana-geyser-plugin-manager = { path = "../geyser-plugin-manager", version = "=1.14.0" } -solana-gossip = { path = "../gossip", version = "=1.14.0" } -solana-ledger = { path = "../ledger", version = "=1.14.0" } -solana-measure = { path = "../measure", version = "=1.14.0" } -solana-metrics = { path = "../metrics", version = "=1.14.0" } -solana-net-utils = { path = "../net-utils", version = "=1.14.0" } -solana-perf = { path = "../perf", version = "=1.14.0" } -solana-poh = { path = "../poh", version = "=1.14.0" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.0" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.0" } -solana-rpc = { path = "../rpc", version = "=1.14.0" } -solana-runtime = { path = "../runtime", version = "=1.14.0" } -solana-sdk = { path = "../sdk", version = "=1.14.0" } -solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.0" } -solana-streamer = { path = "../streamer", version = "=1.14.0" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.0" } -solana-version = { path = "../version", version = "=1.14.0" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.0" } +solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.1" } +solana-bloom = { path = "../bloom", version = "=1.14.1" } +solana-client = { path = "../client", version = "=1.14.1" } +solana-entry = { path = "../entry", version = "=1.14.1" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.1" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.1" } +solana-geyser-plugin-manager = { path = "../geyser-plugin-manager", version = "=1.14.1" } +solana-gossip = { path = "../gossip", version = "=1.14.1" } +solana-ledger = { path = "../ledger", version = "=1.14.1" } +solana-measure = { path = "../measure", version = "=1.14.1" } +solana-metrics = { path = "../metrics", version = "=1.14.1" } +solana-net-utils = { path = "../net-utils", version = "=1.14.1" } +solana-perf = { path = "../perf", version = "=1.14.1" } +solana-poh = { path = "../poh", version = "=1.14.1" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.1" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.1" } +solana-rpc = { path = "../rpc", version = "=1.14.1" } +solana-runtime = { path = "../runtime", version = "=1.14.1" } +solana-sdk = { path = "../sdk", version = "=1.14.1" } +solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.1" } +solana-streamer = { path = "../streamer", version = "=1.14.1" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.1" } +solana-version = { path = "../version", version = "=1.14.1" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.1" } sys-info = "0.9.1" tempfile = "3.3.0" thiserror = "1.0" @@ -70,9 +70,9 @@ matches = "0.1.9" raptorq = "1.7.0" serde_json = "1.0.81" serial_test = "0.8.0" -solana-logger = { path = "../logger", version = "=1.14.0" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.0" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.0" } +solana-logger = { path = "../logger", version = "=1.14.1" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.1" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.1" } static_assertions = "1.1.0" systemstat = "0.1.11" test-case = "2.1.0" diff --git a/docs/src/developing/clients/jsonrpc-api.md b/docs/src/developing/clients/jsonrpc-api.md index 72d53e27fd9c0f..78c3a9af6e4c54 100644 --- a/docs/src/developing/clients/jsonrpc-api.md +++ b/docs/src/developing/clients/jsonrpc-api.md @@ -214,7 +214,7 @@ JSON parsing for the following native and SPL programs: | Program | Account State | Instructions | | --- | --- | --- | -| Address Lookup | v1.14.0 | | +| Address Lookup | v1.14.1 | | | BPF Loader | n/a | stable | | BPF Upgradeable Loader | stable | stable | | Config | stable | | @@ -1948,7 +1948,7 @@ Returns all accounts owned by the provided program Pubkey - `offset: ` - offset into program account data to start comparison - `bytes: ` - data to match, as encoded string - `encoding: ` - encoding for filter `bytes` data, either "base58" or "base64". Data is limited in size to 128 or fewer decoded bytes. - **NEW: This field, and base64 support generally, is only available in solana-core v1.14.0 or newer. Please omit when querying nodes on earlier versions** + **NEW: This field, and base64 support generally, is only available in solana-core v1.14.1 or newer. Please omit when querying nodes on earlier versions** - `dataSize: ` - compares the program account data length with the provided data size @@ -3176,7 +3176,7 @@ curl http://localhost:8899 -X POST -H "Content-Type: application/json" -d ' Result: ```json -{ "jsonrpc": "2.0", "result": { "solana-core": "1.14.0" }, "id": 1 } +{ "jsonrpc": "2.0", "result": { "solana-core": "1.14.1" }, "id": 1 } ``` ### getVoteAccounts diff --git a/dos/Cargo.toml b/dos/Cargo.toml index 79eafc28e6adba..fd6287646e4c15 100644 --- a/dos/Cargo.toml +++ b/dos/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-dos" -version = "1.14.0" +version = "1.14.1" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -17,23 +17,23 @@ itertools = "0.10.3" log = "0.4.17" rand = "0.7.0" serde = "1.0.138" -solana-bench-tps = { path = "../bench-tps", version = "=1.14.0" } -solana-client = { path = "../client", version = "=1.14.0" } -solana-core = { path = "../core", version = "=1.14.0" } -solana-faucet = { path = "../faucet", version = "=1.14.0" } -solana-gossip = { path = "../gossip", version = "=1.14.0" } -solana-logger = { path = "../logger", version = "=1.14.0" } -solana-measure = { path = "../measure", version = "=1.14.0" } -solana-net-utils = { path = "../net-utils", version = "=1.14.0" } -solana-perf = { path = "../perf", version = "=1.14.0" } -solana-rpc = { path = "../rpc", version = "=1.14.0" } -solana-sdk = { path = "../sdk", version = "=1.14.0" } -solana-streamer = { path = "../streamer", version = "=1.14.0" } -solana-version = { path = "../version", version = "=1.14.0" } +solana-bench-tps = { path = "../bench-tps", version = "=1.14.1" } +solana-client = { path = "../client", version = "=1.14.1" } +solana-core = { path = "../core", version = "=1.14.1" } +solana-faucet = { path = "../faucet", version = "=1.14.1" } +solana-gossip = { path = "../gossip", version = "=1.14.1" } +solana-logger = { path = "../logger", version = "=1.14.1" } +solana-measure = { path = "../measure", version = "=1.14.1" } +solana-net-utils = { path = "../net-utils", version = "=1.14.1" } +solana-perf = { path = "../perf", version = "=1.14.1" } +solana-rpc = { path = "../rpc", version = "=1.14.1" } +solana-sdk = { path = "../sdk", version = "=1.14.1" } +solana-streamer = { path = "../streamer", version = "=1.14.1" } +solana-version = { path = "../version", version = "=1.14.1" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] [dev-dependencies] serial_test = "0.8.0" -solana-local-cluster = { path = "../local-cluster", version = "=1.14.0" } +solana-local-cluster = { path = "../local-cluster", version = "=1.14.1" } diff --git a/download-utils/Cargo.toml b/download-utils/Cargo.toml index 9d486933bc3954..464298002978a6 100644 --- a/download-utils/Cargo.toml +++ b/download-utils/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-download-utils" -version = "1.14.0" +version = "1.14.1" description = "Solana Download Utils" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,8 +14,8 @@ console = "0.15.0" indicatif = "0.16.2" log = "0.4.17" reqwest = { version = "0.11.11", default-features = false, features = ["blocking", "brotli", "deflate", "gzip", "rustls-tls", "json"] } -solana-runtime = { path = "../runtime", version = "=1.14.0" } -solana-sdk = { path = "../sdk", version = "=1.14.0" } +solana-runtime = { path = "../runtime", version = "=1.14.1" } +solana-sdk = { path = "../sdk", version = "=1.14.1" } [lib] crate-type = ["lib"] diff --git a/entry/Cargo.toml b/entry/Cargo.toml index 5bebd213cb2088..a082590fe95b44 100644 --- a/entry/Cargo.toml +++ b/entry/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-entry" -version = "1.14.0" +version = "1.14.1" description = "Solana Entry" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -19,16 +19,16 @@ log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" serde = "1.0.138" -solana-measure = { path = "../measure", version = "=1.14.0" } -solana-merkle-tree = { path = "../merkle-tree", version = "=1.14.0" } -solana-metrics = { path = "../metrics", version = "=1.14.0" } -solana-perf = { path = "../perf", version = "=1.14.0" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.0" } -solana-sdk = { path = "../sdk", version = "=1.14.0" } +solana-measure = { path = "../measure", version = "=1.14.1" } +solana-merkle-tree = { path = "../merkle-tree", version = "=1.14.1" } +solana-metrics = { path = "../metrics", version = "=1.14.1" } +solana-perf = { path = "../perf", version = "=1.14.1" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.1" } +solana-sdk = { path = "../sdk", version = "=1.14.1" } [dev-dependencies] matches = "0.1.9" -solana-logger = { path = "../logger", version = "=1.14.0" } +solana-logger = { path = "../logger", version = "=1.14.1" } [lib] crate-type = ["lib"] diff --git a/faucet/Cargo.toml b/faucet/Cargo.toml index 8cdfe14c445dac..cfb69bbed5cac5 100644 --- a/faucet/Cargo.toml +++ b/faucet/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-faucet" -version = "1.14.0" +version = "1.14.1" description = "Solana Faucet" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -17,12 +17,12 @@ crossbeam-channel = "0.5" log = "0.4.17" serde = "1.0.138" serde_derive = "1.0.103" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.0" } -solana-cli-config = { path = "../cli-config", version = "=1.14.0" } -solana-logger = { path = "../logger", version = "=1.14.0" } -solana-metrics = { path = "../metrics", version = "=1.14.0" } -solana-sdk = { path = "../sdk", version = "=1.14.0" } -solana-version = { path = "../version", version = "=1.14.0" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.1" } +solana-cli-config = { path = "../cli-config", version = "=1.14.1" } +solana-logger = { path = "../logger", version = "=1.14.1" } +solana-metrics = { path = "../metrics", version = "=1.14.1" } +solana-sdk = { path = "../sdk", version = "=1.14.1" } +solana-version = { path = "../version", version = "=1.14.1" } spl-memo = { version = "=3.0.1", features = ["no-entrypoint"] } thiserror = "1.0" tokio = { version = "1", features = ["full"] } diff --git a/frozen-abi/Cargo.toml b/frozen-abi/Cargo.toml index 9ae48d50d61a07..4a22b6fd144606 100644 --- a/frozen-abi/Cargo.toml +++ b/frozen-abi/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-frozen-abi" -version = "1.14.0" +version = "1.14.1" description = "Solana Frozen ABI" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -20,7 +20,7 @@ serde_bytes = "0.11" serde_derive = "1.0" serde_json = "1.0" sha2 = "0.10.2" -solana-frozen-abi-macro = { path = "macro", version = "=1.14.0" } +solana-frozen-abi-macro = { path = "macro", version = "=1.14.1" } thiserror = "1.0" [target.'cfg(not(target_os = "solana"))'.dependencies] @@ -43,7 +43,7 @@ rand_core = { version = "0.6.3", features = ["alloc", "getrandom", "std"] } subtle = { version = "2.4.1", features = ["default", "i128", "std"] } [target.'cfg(not(target_os = "solana"))'.dev-dependencies] -solana-logger = { path = "../logger", version = "=1.14.0" } +solana-logger = { path = "../logger", version = "=1.14.1" } [build-dependencies] rustc_version = "0.4" diff --git a/frozen-abi/macro/Cargo.toml b/frozen-abi/macro/Cargo.toml index a27e0521b435d0..c84dcbb223077a 100644 --- a/frozen-abi/macro/Cargo.toml +++ b/frozen-abi/macro/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-frozen-abi-macro" -version = "1.14.0" +version = "1.14.1" description = "Solana Frozen ABI Macro" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/genesis-utils/Cargo.toml b/genesis-utils/Cargo.toml index d60358d213696d..fb1d7c5ef015c1 100644 --- a/genesis-utils/Cargo.toml +++ b/genesis-utils/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-genesis-utils" -version = "1.14.0" +version = "1.14.1" description = "Solana Genesis Utils" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,9 +10,9 @@ documentation = "https://docs.rs/solana-download-utils" edition = "2021" [dependencies] -solana-download-utils = { path = "../download-utils", version = "=1.14.0" } -solana-runtime = { path = "../runtime", version = "=1.14.0" } -solana-sdk = { path = "../sdk", version = "=1.14.0" } +solana-download-utils = { path = "../download-utils", version = "=1.14.1" } +solana-runtime = { path = "../runtime", version = "=1.14.1" } +solana-sdk = { path = "../sdk", version = "=1.14.1" } [lib] crate-type = ["lib"] diff --git a/genesis/Cargo.toml b/genesis/Cargo.toml index 7d7d46d779f81c..f2405d43195c87 100644 --- a/genesis/Cargo.toml +++ b/genesis/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-genesis" description = "Blockchain, Rebuilt for Scale" -version = "1.14.0" +version = "1.14.1" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -15,16 +15,16 @@ clap = "2.33.1" serde = "1.0.138" serde_json = "1.0.81" serde_yaml = "0.8.26" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.0" } -solana-cli-config = { path = "../cli-config", version = "=1.14.0" } -solana-entry = { path = "../entry", version = "=1.14.0" } -solana-ledger = { path = "../ledger", version = "=1.14.0" } -solana-logger = { path = "../logger", version = "=1.14.0" } -solana-runtime = { path = "../runtime", version = "=1.14.0" } -solana-sdk = { path = "../sdk", version = "=1.14.0" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.0" } -solana-version = { path = "../version", version = "=1.14.0" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.0" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.1" } +solana-cli-config = { path = "../cli-config", version = "=1.14.1" } +solana-entry = { path = "../entry", version = "=1.14.1" } +solana-ledger = { path = "../ledger", version = "=1.14.1" } +solana-logger = { path = "../logger", version = "=1.14.1" } +solana-runtime = { path = "../runtime", version = "=1.14.1" } +solana-sdk = { path = "../sdk", version = "=1.14.1" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.1" } +solana-version = { path = "../version", version = "=1.14.1" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.1" } tempfile = "3.3.0" [[bin]] diff --git a/geyser-plugin-interface/Cargo.toml b/geyser-plugin-interface/Cargo.toml index 1f91aa00421c80..f6cbf869213969 100644 --- a/geyser-plugin-interface/Cargo.toml +++ b/geyser-plugin-interface/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-geyser-plugin-interface" description = "The Solana Geyser plugin interface." -version = "1.14.0" +version = "1.14.1" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -11,8 +11,8 @@ documentation = "https://docs.rs/solana-geyser-plugin-interface" [dependencies] log = "0.4.17" -solana-sdk = { path = "../sdk", version = "=1.14.0" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.0" } +solana-sdk = { path = "../sdk", version = "=1.14.1" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.1" } thiserror = "1.0.31" [package.metadata.docs.rs] diff --git a/geyser-plugin-manager/Cargo.toml b/geyser-plugin-manager/Cargo.toml index c4eea416cc2743..1f533717660d8f 100644 --- a/geyser-plugin-manager/Cargo.toml +++ b/geyser-plugin-manager/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-geyser-plugin-manager" description = "The Solana Geyser plugin manager." -version = "1.14.0" +version = "1.14.1" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -16,13 +16,13 @@ json5 = "0.4.1" libloading = "0.7.3" log = "0.4.17" serde_json = "1.0.81" -solana-geyser-plugin-interface = { path = "../geyser-plugin-interface", version = "=1.14.0" } -solana-measure = { path = "../measure", version = "=1.14.0" } -solana-metrics = { path = "../metrics", version = "=1.14.0" } -solana-rpc = { path = "../rpc", version = "=1.14.0" } -solana-runtime = { path = "../runtime", version = "=1.14.0" } -solana-sdk = { path = "../sdk", version = "=1.14.0" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.0" } +solana-geyser-plugin-interface = { path = "../geyser-plugin-interface", version = "=1.14.1" } +solana-measure = { path = "../measure", version = "=1.14.1" } +solana-metrics = { path = "../metrics", version = "=1.14.1" } +solana-rpc = { path = "../rpc", version = "=1.14.1" } +solana-runtime = { path = "../runtime", version = "=1.14.1" } +solana-sdk = { path = "../sdk", version = "=1.14.1" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.1" } thiserror = "1.0.31" [package.metadata.docs.rs] diff --git a/gossip/Cargo.toml b/gossip/Cargo.toml index 804550359aa47e..69e733e48455aa 100644 --- a/gossip/Cargo.toml +++ b/gossip/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-gossip" description = "Blockchain, Rebuilt for Scale" -version = "1.14.0" +version = "1.14.1" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -27,24 +27,24 @@ rayon = "1.5.3" serde = "1.0.138" serde_bytes = "0.11" serde_derive = "1.0.103" -solana-bloom = { path = "../bloom", version = "=1.14.0" } -solana-clap-utils = { path = "../clap-utils", version = "=1.14.0" } -solana-client = { path = "../client", version = "=1.14.0" } -solana-entry = { path = "../entry", version = "=1.14.0" } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.0" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.0" } -solana-ledger = { path = "../ledger", version = "=1.14.0" } -solana-logger = { path = "../logger", version = "=1.14.0" } -solana-measure = { path = "../measure", version = "=1.14.0" } -solana-metrics = { path = "../metrics", version = "=1.14.0" } -solana-net-utils = { path = "../net-utils", version = "=1.14.0" } -solana-perf = { path = "../perf", version = "=1.14.0" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.0" } -solana-runtime = { path = "../runtime", version = "=1.14.0" } -solana-sdk = { path = "../sdk", version = "=1.14.0" } -solana-streamer = { path = "../streamer", version = "=1.14.0" } -solana-version = { path = "../version", version = "=1.14.0" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.0" } +solana-bloom = { path = "../bloom", version = "=1.14.1" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.1" } +solana-client = { path = "../client", version = "=1.14.1" } +solana-entry = { path = "../entry", version = "=1.14.1" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.1" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.1" } +solana-ledger = { path = "../ledger", version = "=1.14.1" } +solana-logger = { path = "../logger", version = "=1.14.1" } +solana-measure = { path = "../measure", version = "=1.14.1" } +solana-metrics = { path = "../metrics", version = "=1.14.1" } +solana-net-utils = { path = "../net-utils", version = "=1.14.1" } +solana-perf = { path = "../perf", version = "=1.14.1" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.1" } +solana-runtime = { path = "../runtime", version = "=1.14.1" } +solana-sdk = { path = "../sdk", version = "=1.14.1" } +solana-streamer = { path = "../streamer", version = "=1.14.1" } +solana-version = { path = "../version", version = "=1.14.1" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.1" } thiserror = "1.0" [dev-dependencies] diff --git a/install/Cargo.toml b/install/Cargo.toml index 3e0af72255652b..d99bab89776077 100644 --- a/install/Cargo.toml +++ b/install/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-install" description = "The solana cluster software installer" -version = "1.14.0" +version = "1.14.1" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -26,12 +26,12 @@ reqwest = { version = "0.11.11", default-features = false, features = ["blocking semver = "1.0.10" serde = { version = "1.0.138", features = ["derive"] } serde_yaml = "0.8.26" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.0" } -solana-client = { path = "../client", version = "=1.14.0" } -solana-config-program = { path = "../programs/config", version = "=1.14.0" } -solana-logger = { path = "../logger", version = "=1.14.0" } -solana-sdk = { path = "../sdk", version = "=1.14.0" } -solana-version = { path = "../version", version = "=1.14.0" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.1" } +solana-client = { path = "../client", version = "=1.14.1" } +solana-config-program = { path = "../programs/config", version = "=1.14.1" } +solana-logger = { path = "../logger", version = "=1.14.1" } +solana-sdk = { path = "../sdk", version = "=1.14.1" } +solana-version = { path = "../version", version = "=1.14.1" } tar = "0.4.38" tempfile = "3.3.0" url = "2.2.2" diff --git a/keygen/Cargo.toml b/keygen/Cargo.toml index c2dfec9a716330..9afb7717b7d006 100644 --- a/keygen/Cargo.toml +++ b/keygen/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-keygen" -version = "1.14.0" +version = "1.14.1" description = "Solana key generation utility" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,11 +14,11 @@ bs58 = "0.4.0" clap = { version = "3.1.5", features = ["cargo"] } dirs-next = "2.0.0" num_cpus = "1.13.1" -solana-clap-v3-utils = { path = "../clap-v3-utils", version = "=1.14.0" } -solana-cli-config = { path = "../cli-config", version = "=1.14.0" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.0" } -solana-sdk = { path = "../sdk", version = "=1.14.0" } -solana-version = { path = "../version", version = "=1.14.0" } +solana-clap-v3-utils = { path = "../clap-v3-utils", version = "=1.14.1" } +solana-cli-config = { path = "../cli-config", version = "=1.14.1" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.1" } +solana-sdk = { path = "../sdk", version = "=1.14.1" } +solana-version = { path = "../version", version = "=1.14.1" } tiny-bip39 = "0.8.2" [[bin]] diff --git a/ledger-tool/Cargo.toml b/ledger-tool/Cargo.toml index 93b781c1b4711a..7eb82e640a17ae 100644 --- a/ledger-tool/Cargo.toml +++ b/ledger-tool/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-ledger-tool" description = "Blockchain, Rebuilt for Scale" -version = "1.14.0" +version = "1.14.1" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -22,20 +22,20 @@ log = { version = "0.4.17" } regex = "1" serde = { version = "1.0", features = ["derive"] } serde_json = "1.0.81" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.0" } -solana-cli-output = { path = "../cli-output", version = "=1.14.0" } -solana-core = { path = "../core", version = "=1.14.0" } -solana-entry = { path = "../entry", version = "=1.14.0" } -solana-ledger = { path = "../ledger", version = "=1.14.0" } -solana-logger = { path = "../logger", version = "=1.14.0" } -solana-measure = { path = "../measure", version = "=1.14.0" } -solana-runtime = { path = "../runtime", version = "=1.14.0" } -solana-sdk = { path = "../sdk", version = "=1.14.0" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.0" } -solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.0" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.0" } -solana-version = { path = "../version", version = "=1.14.0" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.0" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.1" } +solana-cli-output = { path = "../cli-output", version = "=1.14.1" } +solana-core = { path = "../core", version = "=1.14.1" } +solana-entry = { path = "../entry", version = "=1.14.1" } +solana-ledger = { path = "../ledger", version = "=1.14.1" } +solana-logger = { path = "../logger", version = "=1.14.1" } +solana-measure = { path = "../measure", version = "=1.14.1" } +solana-runtime = { path = "../runtime", version = "=1.14.1" } +solana-sdk = { path = "../sdk", version = "=1.14.1" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.1" } +solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.1" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.1" } +solana-version = { path = "../version", version = "=1.14.1" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.1" } tokio = { version = "1", features = ["full"] } [target.'cfg(not(target_env = "msvc"))'.dependencies] diff --git a/ledger/Cargo.toml b/ledger/Cargo.toml index a16597af6785a4..08afae1a7e326b 100644 --- a/ledger/Cargo.toml +++ b/ledger/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-ledger" -version = "1.14.0" +version = "1.14.1" description = "Solana ledger" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -34,23 +34,23 @@ reed-solomon-erasure = { version = "5.0.3", features = ["simd-accel"] } serde = "1.0.138" serde_bytes = "0.11.6" sha2 = "0.10.2" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.0" } -solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.0" } -solana-entry = { path = "../entry", version = "=1.14.0" } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.0" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.0" } -solana-measure = { path = "../measure", version = "=1.14.0" } -solana-metrics = { path = "../metrics", version = "=1.14.0" } -solana-perf = { path = "../perf", version = "=1.14.0" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.0" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.0" } -solana-runtime = { path = "../runtime", version = "=1.14.0" } -solana-sdk = { path = "../sdk", version = "=1.14.0" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.0" } -solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.0" } -solana-storage-proto = { path = "../storage-proto", version = "=1.14.0" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.0" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.0" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.1" } +solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.1" } +solana-entry = { path = "../entry", version = "=1.14.1" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.1" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.1" } +solana-measure = { path = "../measure", version = "=1.14.1" } +solana-metrics = { path = "../metrics", version = "=1.14.1" } +solana-perf = { path = "../perf", version = "=1.14.1" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.1" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.1" } +solana-runtime = { path = "../runtime", version = "=1.14.1" } +solana-sdk = { path = "../sdk", version = "=1.14.1" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.1" } +solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.1" } +solana-storage-proto = { path = "../storage-proto", version = "=1.14.1" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.1" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.1" } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } spl-token-2022 = { version = "=0.4.2", features = ["no-entrypoint"] } static_assertions = "1.1.0" @@ -71,8 +71,8 @@ features = ["lz4"] assert_matches = "1.5.0" bs58 = "0.4.0" matches = "0.1.9" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.0" } -solana-logger = { path = "../logger", version = "=1.14.0" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.1" } +solana-logger = { path = "../logger", version = "=1.14.1" } test-case = "2.1.0" [build-dependencies] diff --git a/local-cluster/Cargo.toml b/local-cluster/Cargo.toml index a465f7f6398e69..650f33a11a51fe 100644 --- a/local-cluster/Cargo.toml +++ b/local-cluster/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-local-cluster" description = "Blockchain, Rebuilt for Scale" -version = "1.14.0" +version = "1.14.1" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -16,25 +16,25 @@ itertools = "0.10.3" log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" -solana-client = { path = "../client", version = "=1.14.0" } -solana-config-program = { path = "../programs/config", version = "=1.14.0" } -solana-core = { path = "../core", version = "=1.14.0" } -solana-entry = { path = "../entry", version = "=1.14.0" } -solana-gossip = { path = "../gossip", version = "=1.14.0" } -solana-ledger = { path = "../ledger", version = "=1.14.0" } -solana-runtime = { path = "../runtime", version = "=1.14.0" } -solana-sdk = { path = "../sdk", version = "=1.14.0" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.0" } -solana-streamer = { path = "../streamer", version = "=1.14.0" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.0" } +solana-client = { path = "../client", version = "=1.14.1" } +solana-config-program = { path = "../programs/config", version = "=1.14.1" } +solana-core = { path = "../core", version = "=1.14.1" } +solana-entry = { path = "../entry", version = "=1.14.1" } +solana-gossip = { path = "../gossip", version = "=1.14.1" } +solana-ledger = { path = "../ledger", version = "=1.14.1" } +solana-runtime = { path = "../runtime", version = "=1.14.1" } +solana-sdk = { path = "../sdk", version = "=1.14.1" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.1" } +solana-streamer = { path = "../streamer", version = "=1.14.1" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.1" } tempfile = "3.3.0" [dev-dependencies] assert_matches = "1.5.0" gag = "1.0.0" serial_test = "0.8.0" -solana-download-utils = { path = "../download-utils", version = "=1.14.0" } -solana-logger = { path = "../logger", version = "=1.14.0" } +solana-download-utils = { path = "../download-utils", version = "=1.14.1" } +solana-logger = { path = "../logger", version = "=1.14.1" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/log-analyzer/Cargo.toml b/log-analyzer/Cargo.toml index 7ecadd550fafcc..28263022348997 100644 --- a/log-analyzer/Cargo.toml +++ b/log-analyzer/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-log-analyzer" description = "The solana cluster network analysis tool" -version = "1.14.0" +version = "1.14.1" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,8 +14,8 @@ byte-unit = "4.0.14" clap = { version = "3.1.5", features = ["cargo"] } serde = "1.0.138" serde_json = "1.0.81" -solana-logger = { path = "../logger", version = "=1.14.0" } -solana-version = { path = "../version", version = "=1.14.0" } +solana-logger = { path = "../logger", version = "=1.14.1" } +solana-version = { path = "../version", version = "=1.14.1" } [[bin]] name = "solana-log-analyzer" diff --git a/logger/Cargo.toml b/logger/Cargo.toml index 932f21cdbf881f..8deb15de6797fe 100644 --- a/logger/Cargo.toml +++ b/logger/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-logger" -version = "1.14.0" +version = "1.14.1" description = "Solana Logger" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/measure/Cargo.toml b/measure/Cargo.toml index 0177cac7e5c77d..34bf4d0a23541a 100644 --- a/measure/Cargo.toml +++ b/measure/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "solana-measure" description = "Blockchain, Rebuilt for Scale" -version = "1.14.0" +version = "1.14.1" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-measure" readme = "../README.md" @@ -12,7 +12,7 @@ edition = "2021" [dependencies] log = "0.4.17" -solana-sdk = { path = "../sdk", version = "=1.14.0" } +solana-sdk = { path = "../sdk", version = "=1.14.1" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/merkle-root-bench/Cargo.toml b/merkle-root-bench/Cargo.toml index 9156fab094fb88..54a8772cb2c0de 100644 --- a/merkle-root-bench/Cargo.toml +++ b/merkle-root-bench/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-merkle-root-bench" -version = "1.14.0" +version = "1.14.1" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -11,11 +11,11 @@ publish = false [dependencies] clap = "2.33.1" log = "0.4.17" -solana-logger = { path = "../logger", version = "=1.14.0" } -solana-measure = { path = "../measure", version = "=1.14.0" } -solana-runtime = { path = "../runtime", version = "=1.14.0" } -solana-sdk = { path = "../sdk", version = "=1.14.0" } -solana-version = { path = "../version", version = "=1.14.0" } +solana-logger = { path = "../logger", version = "=1.14.1" } +solana-measure = { path = "../measure", version = "=1.14.1" } +solana-runtime = { path = "../runtime", version = "=1.14.1" } +solana-sdk = { path = "../sdk", version = "=1.14.1" } +solana-version = { path = "../version", version = "=1.14.1" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/merkle-tree/Cargo.toml b/merkle-tree/Cargo.toml index 6a4a0e23c5a982..1d4aa7f6e8c0a2 100644 --- a/merkle-tree/Cargo.toml +++ b/merkle-tree/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-merkle-tree" -version = "1.14.0" +version = "1.14.1" description = "Solana Merkle Tree" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -11,7 +11,7 @@ edition = "2021" [dependencies] fast-math = "0.1" -solana-program = { path = "../sdk/program", version = "=1.14.0" } +solana-program = { path = "../sdk/program", version = "=1.14.1" } # This can go once the BPF toolchain target Rust 1.42.0+ [target.bpfel-unknown-unknown.dependencies] diff --git a/metrics/Cargo.toml b/metrics/Cargo.toml index dd925a3582bd1a..ac19bfd82323da 100644 --- a/metrics/Cargo.toml +++ b/metrics/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-metrics" -version = "1.14.0" +version = "1.14.1" description = "Solana Metrics" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -15,7 +15,7 @@ gethostname = "0.2.3" lazy_static = "1.4.0" log = "0.4.17" reqwest = { version = "0.11.11", default-features = false, features = ["blocking", "brotli", "deflate", "gzip", "rustls-tls", "json"] } -solana-sdk = { path = "../sdk", version = "=1.14.0" } +solana-sdk = { path = "../sdk", version = "=1.14.1" } [dev-dependencies] env_logger = "0.9.0" diff --git a/net-shaper/Cargo.toml b/net-shaper/Cargo.toml index 57b07e042fcbc0..ff144e3d28ef80 100644 --- a/net-shaper/Cargo.toml +++ b/net-shaper/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-net-shaper" description = "The solana cluster network shaping tool" -version = "1.14.0" +version = "1.14.1" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,7 +14,7 @@ clap = { version = "3.1.5", features = ["cargo"] } rand = "0.7.0" serde = { version = "1.0.138", features = ["derive"] } serde_json = "1.0.81" -solana-logger = { path = "../logger", version = "=1.14.0" } +solana-logger = { path = "../logger", version = "=1.14.1" } [[bin]] name = "solana-net-shaper" diff --git a/net-utils/Cargo.toml b/net-utils/Cargo.toml index 7155664d22e955..e77864d173be47 100644 --- a/net-utils/Cargo.toml +++ b/net-utils/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-net-utils" -version = "1.14.0" +version = "1.14.1" description = "Solana Network Utilities" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -19,9 +19,9 @@ rand = "0.7.0" serde = "1.0.138" serde_derive = "1.0.103" socket2 = "0.4.4" -solana-logger = { path = "../logger", version = "=1.14.0" } -solana-sdk = { path = "../sdk", version = "=1.14.0" } -solana-version = { path = "../version", version = "=1.14.0" } +solana-logger = { path = "../logger", version = "=1.14.1" } +solana-sdk = { path = "../sdk", version = "=1.14.1" } +solana-version = { path = "../version", version = "=1.14.1" } tokio = { version = "1", features = ["full"] } url = "2.2.2" diff --git a/notifier/Cargo.toml b/notifier/Cargo.toml index bcdd66cefb08e3..d01de7dd015772 100644 --- a/notifier/Cargo.toml +++ b/notifier/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-notifier" -version = "1.14.0" +version = "1.14.1" description = "Solana Notifier" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/perf/Cargo.toml b/perf/Cargo.toml index 9677c9fbaf62d7..99a57e80c07230 100644 --- a/perf/Cargo.toml +++ b/perf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-perf" -version = "1.14.0" +version = "1.14.1" description = "Solana Performance APIs" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -22,10 +22,10 @@ log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" serde = "1.0.138" -solana-metrics = { path = "../metrics", version = "=1.14.0" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.0" } -solana-sdk = { path = "../sdk", version = "=1.14.0" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.0" } +solana-metrics = { path = "../metrics", version = "=1.14.1" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.1" } +solana-sdk = { path = "../sdk", version = "=1.14.1" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.1" } [target."cfg(target_os = \"linux\")".dependencies] caps = "0.5.3" @@ -37,7 +37,7 @@ name = "solana_perf" [dev-dependencies] matches = "0.1.9" -solana-logger = { path = "../logger", version = "=1.14.0" } +solana-logger = { path = "../logger", version = "=1.14.1" } [[bench]] name = "sigverify" diff --git a/poh-bench/Cargo.toml b/poh-bench/Cargo.toml index 9c4e444389ad7e..af3ea552993b07 100644 --- a/poh-bench/Cargo.toml +++ b/poh-bench/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-poh-bench" -version = "1.14.0" +version = "1.14.1" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,12 +14,12 @@ clap = { version = "3.1.5", features = ["cargo"] } log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" -solana-entry = { path = "../entry", version = "=1.14.0" } -solana-logger = { path = "../logger", version = "=1.14.0" } -solana-measure = { path = "../measure", version = "=1.14.0" } -solana-perf = { path = "../perf", version = "=1.14.0" } -solana-sdk = { path = "../sdk", version = "=1.14.0" } -solana-version = { path = "../version", version = "=1.14.0" } +solana-entry = { path = "../entry", version = "=1.14.1" } +solana-logger = { path = "../logger", version = "=1.14.1" } +solana-measure = { path = "../measure", version = "=1.14.1" } +solana-perf = { path = "../perf", version = "=1.14.1" } +solana-sdk = { path = "../sdk", version = "=1.14.1" } +solana-version = { path = "../version", version = "=1.14.1" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/poh/Cargo.toml b/poh/Cargo.toml index 6105911e95b594..b8dfa9bfb308ca 100644 --- a/poh/Cargo.toml +++ b/poh/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-poh" -version = "1.14.0" +version = "1.14.1" description = "Solana PoH" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,21 +13,21 @@ edition = "2021" core_affinity = "0.5.10" crossbeam-channel = "0.5" log = "0.4.17" -solana-entry = { path = "../entry", version = "=1.14.0" } -solana-ledger = { path = "../ledger", version = "=1.14.0" } -solana-measure = { path = "../measure", version = "=1.14.0" } -solana-metrics = { path = "../metrics", version = "=1.14.0" } -solana-runtime = { path = "../runtime", version = "=1.14.0" } -solana-sdk = { path = "../sdk", version = "=1.14.0" } -solana-sys-tuner = { path = "../sys-tuner", version = "=1.14.0" } +solana-entry = { path = "../entry", version = "=1.14.1" } +solana-ledger = { path = "../ledger", version = "=1.14.1" } +solana-measure = { path = "../measure", version = "=1.14.1" } +solana-metrics = { path = "../metrics", version = "=1.14.1" } +solana-runtime = { path = "../runtime", version = "=1.14.1" } +solana-sdk = { path = "../sdk", version = "=1.14.1" } +solana-sys-tuner = { path = "../sys-tuner", version = "=1.14.1" } thiserror = "1.0" [dev-dependencies] bincode = "1.3.3" matches = "0.1.9" rand = "0.7.0" -solana-logger = { path = "../logger", version = "=1.14.0" } -solana-perf = { path = "../perf", version = "=1.14.0" } +solana-logger = { path = "../logger", version = "=1.14.1" } +solana-perf = { path = "../perf", version = "=1.14.1" } [lib] crate-type = ["lib"] diff --git a/program-runtime/Cargo.toml b/program-runtime/Cargo.toml index 320ec4525899b0..ca01bbb81831e2 100644 --- a/program-runtime/Cargo.toml +++ b/program-runtime/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-program-runtime" -version = "1.14.0" +version = "1.14.1" description = "Solana program runtime" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -20,16 +20,16 @@ log = "0.4.14" num-derive = { version = "0.3" } num-traits = { version = "0.2" } serde = { version = "1.0.129", features = ["derive", "rc"] } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.0" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.0" } -solana-measure = { path = "../measure", version = "=1.14.0" } -solana-metrics = { path = "../metrics", version = "=1.14.0" } -solana-sdk = { path = "../sdk", version = "=1.14.0" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.1" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.1" } +solana-measure = { path = "../measure", version = "=1.14.1" } +solana-metrics = { path = "../metrics", version = "=1.14.1" } +solana-sdk = { path = "../sdk", version = "=1.14.1" } thiserror = "1.0" enum-iterator = "0.8.1" [dev-dependencies] -solana-logger = { path = "../logger", version = "=1.14.0" } +solana-logger = { path = "../logger", version = "=1.14.1" } [lib] crate-type = ["lib"] diff --git a/program-test/Cargo.toml b/program-test/Cargo.toml index d7d82a18150251..55fc9692608fb5 100644 --- a/program-test/Cargo.toml +++ b/program-test/Cargo.toml @@ -5,7 +5,7 @@ edition = "2021" license = "Apache-2.0" name = "solana-program-test" repository = "https://github.com/solana-labs/solana" -version = "1.14.0" +version = "1.14.1" [dependencies] assert_matches = "1.5.0" @@ -15,13 +15,13 @@ bincode = "1.3.3" chrono-humanize = "0.2.1" log = "0.4.17" serde = "1.0.138" -solana-banks-client = { path = "../banks-client", version = "=1.14.0" } -solana-banks-server = { path = "../banks-server", version = "=1.14.0" } -solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.0" } -solana-logger = { path = "../logger", version = "=1.14.0" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.0" } -solana-runtime = { path = "../runtime", version = "=1.14.0" } -solana-sdk = { path = "../sdk", version = "=1.14.0" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.0" } +solana-banks-client = { path = "../banks-client", version = "=1.14.1" } +solana-banks-server = { path = "../banks-server", version = "=1.14.1" } +solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.1" } +solana-logger = { path = "../logger", version = "=1.14.1" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.1" } +solana-runtime = { path = "../runtime", version = "=1.14.1" } +solana-sdk = { path = "../sdk", version = "=1.14.1" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.1" } thiserror = "1.0" tokio = { version = "1", features = ["full"] } diff --git a/programs/address-lookup-table-tests/Cargo.toml b/programs/address-lookup-table-tests/Cargo.toml index 413c44d19d1fd7..1e17b435e103a5 100644 --- a/programs/address-lookup-table-tests/Cargo.toml +++ b/programs/address-lookup-table-tests/Cargo.toml @@ -3,7 +3,7 @@ [package] name = "solana-address-lookup-table-program-tests" -version = "1.14.0" +version = "1.14.1" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" @@ -14,9 +14,9 @@ publish = false [dev-dependencies] assert_matches = "1.5.0" bincode = "1.3.3" -solana-address-lookup-table-program = { path = "../address-lookup-table", version = "=1.14.0" } -solana-program-test = { path = "../../program-test", version = "=1.14.0" } -solana-sdk = { path = "../../sdk", version = "=1.14.0" } +solana-address-lookup-table-program = { path = "../address-lookup-table", version = "=1.14.1" } +solana-program-test = { path = "../../program-test", version = "=1.14.1" } +solana-sdk = { path = "../../sdk", version = "=1.14.1" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/address-lookup-table/Cargo.toml b/programs/address-lookup-table/Cargo.toml index 5f191afeb2fafb..169c8961f70515 100644 --- a/programs/address-lookup-table/Cargo.toml +++ b/programs/address-lookup-table/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-address-lookup-table-program" -version = "1.14.0" +version = "1.14.1" description = "Solana address lookup table program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -16,14 +16,14 @@ log = "0.4.17" num-derive = "0.3" num-traits = "0.2" serde = { version = "1.0.138", features = ["derive"] } -solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.0" } -solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.0" } -solana-program = { path = "../../sdk/program", version = "=1.14.0" } +solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.1" } +solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.1" } +solana-program = { path = "../../sdk/program", version = "=1.14.1" } thiserror = "1.0" [target.'cfg(not(target_os = "solana"))'.dependencies] -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.0" } -solana-sdk = { path = "../../sdk", version = "=1.14.0" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.1" } +solana-sdk = { path = "../../sdk", version = "=1.14.1" } [build-dependencies] rustc_version = "0.4" diff --git a/programs/bpf-loader-tests/Cargo.toml b/programs/bpf-loader-tests/Cargo.toml index 3c8d77a45456f6..5e0b0df0acc214 100644 --- a/programs/bpf-loader-tests/Cargo.toml +++ b/programs/bpf-loader-tests/Cargo.toml @@ -3,7 +3,7 @@ [package] name = "solana-bpf-loader-program-tests" -version = "1.14.0" +version = "1.14.1" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" @@ -14,9 +14,9 @@ publish = false [dev-dependencies] assert_matches = "1.5.0" bincode = "1.3.3" -solana-bpf-loader-program = { path = "../bpf_loader", version = "=1.14.0" } -solana-program-test = { path = "../../program-test", version = "=1.14.0" } -solana-sdk = { path = "../../sdk", version = "=1.14.0" } +solana-bpf-loader-program = { path = "../bpf_loader", version = "=1.14.1" } +solana-program-test = { path = "../../program-test", version = "=1.14.1" } +solana-sdk = { path = "../../sdk", version = "=1.14.1" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/bpf/Cargo.lock b/programs/bpf/Cargo.lock index aec25227db8e93..a4e2319f8a5822 100644 --- a/programs/bpf/Cargo.lock +++ b/programs/bpf/Cargo.lock @@ -4062,7 +4062,7 @@ dependencies = [ [[package]] name = "solana-account-decoder" -version = "1.14.0" +version = "1.14.1" dependencies = [ "Inflector", "base64 0.13.0", @@ -4074,7 +4074,7 @@ dependencies = [ "serde_derive", "serde_json", "solana-config-program", - "solana-sdk 1.14.0", + "solana-sdk 1.14.1", "solana-vote-program", "spl-token", "spl-token-2022", @@ -4084,7 +4084,7 @@ dependencies = [ [[package]] name = "solana-address-lookup-table-program" -version = "1.14.0" +version = "1.14.1" dependencies = [ "bincode", "bytemuck", @@ -4093,23 +4093,23 @@ dependencies = [ "num-traits", "rustc_version", "serde", - "solana-frozen-abi 1.14.0", - "solana-frozen-abi-macro 1.14.0", - "solana-program 1.14.0", + "solana-frozen-abi 1.14.1", + "solana-frozen-abi-macro 1.14.1", + "solana-program 1.14.1", "solana-program-runtime", - "solana-sdk 1.14.0", + "solana-sdk 1.14.1", "thiserror", ] [[package]] name = "solana-banks-client" -version = "1.14.0" +version = "1.14.1" dependencies = [ "borsh", "futures 0.3.21", "solana-banks-interface", - "solana-program 1.14.0", - "solana-sdk 1.14.0", + "solana-program 1.14.1", + "solana-sdk 1.14.1", "tarpc", "thiserror", "tokio", @@ -4118,16 +4118,16 @@ dependencies = [ [[package]] name = "solana-banks-interface" -version = "1.14.0" +version = "1.14.1" dependencies = [ "serde", - "solana-sdk 1.14.0", + "solana-sdk 1.14.1", "tarpc", ] [[package]] name = "solana-banks-server" -version = "1.14.0" +version = "1.14.1" dependencies = [ "bincode", "crossbeam-channel", @@ -4135,7 +4135,7 @@ dependencies = [ "solana-banks-interface", "solana-client", "solana-runtime", - "solana-sdk 1.14.0", + "solana-sdk 1.14.1", "solana-send-transaction-service", "tarpc", "tokio", @@ -4145,7 +4145,7 @@ dependencies = [ [[package]] name = "solana-bloom" -version = "1.14.0" +version = "1.14.1" dependencies = [ "bv", "fnv", @@ -4155,14 +4155,14 @@ dependencies = [ "rustc_version", "serde", "serde_derive", - "solana-frozen-abi 1.14.0", - "solana-frozen-abi-macro 1.14.0", - "solana-sdk 1.14.0", + "solana-frozen-abi 1.14.1", + "solana-frozen-abi-macro 1.14.1", + "solana-sdk 1.14.1", ] [[package]] name = "solana-bpf-loader-program" -version = "1.14.0" +version = "1.14.1" dependencies = [ "bincode", "byteorder 1.4.3", @@ -4171,15 +4171,15 @@ dependencies = [ "solana-measure", "solana-metrics", "solana-program-runtime", - "solana-sdk 1.14.0", - "solana-zk-token-sdk 1.14.0", + "solana-sdk 1.14.1", + "solana-zk-token-sdk 1.14.1", "solana_rbpf", "thiserror", ] [[package]] name = "solana-bpf-programs" -version = "1.14.0" +version = "1.14.1" dependencies = [ "bincode", "byteorder 1.4.3", @@ -4195,11 +4195,11 @@ dependencies = [ "solana-bpf-rust-realloc-invoke", "solana-cli-output", "solana-ledger", - "solana-logger 1.14.0", + "solana-logger 1.14.1", "solana-measure", "solana-program-runtime", "solana-runtime", - "solana-sdk 1.14.0", + "solana-sdk 1.14.1", "solana-transaction-status", "solana_rbpf", "walkdir", @@ -4207,385 +4207,385 @@ dependencies = [ [[package]] name = "solana-bpf-rust-128bit" -version = "1.14.0" +version = "1.14.1" dependencies = [ "solana-bpf-rust-128bit-dep", - "solana-program 1.14.0", + "solana-program 1.14.1", ] [[package]] name = "solana-bpf-rust-128bit-dep" -version = "1.14.0" +version = "1.14.1" dependencies = [ - "solana-program 1.14.0", + "solana-program 1.14.1", ] [[package]] name = "solana-bpf-rust-alloc" -version = "1.14.0" +version = "1.14.1" dependencies = [ - "solana-program 1.14.0", + "solana-program 1.14.1", ] [[package]] name = "solana-bpf-rust-call-depth" -version = "1.14.0" +version = "1.14.1" dependencies = [ - "solana-program 1.14.0", + "solana-program 1.14.1", ] [[package]] name = "solana-bpf-rust-caller-access" -version = "1.14.0" +version = "1.14.1" dependencies = [ - "solana-program 1.14.0", + "solana-program 1.14.1", ] [[package]] name = "solana-bpf-rust-curve25519" -version = "1.14.0" +version = "1.14.1" dependencies = [ - "solana-program 1.14.0", - "solana-zk-token-sdk 1.14.0", + "solana-program 1.14.1", + "solana-zk-token-sdk 1.14.1", ] [[package]] name = "solana-bpf-rust-custom-heap" -version = "1.14.0" +version = "1.14.1" dependencies = [ - "solana-program 1.14.0", + "solana-program 1.14.1", ] [[package]] name = "solana-bpf-rust-dep-crate" -version = "1.14.0" +version = "1.14.1" dependencies = [ "byteorder 1.4.3", "solana-address-lookup-table-program", - "solana-program 1.14.0", + "solana-program 1.14.1", ] [[package]] name = "solana-bpf-rust-deprecated-loader" -version = "1.14.0" +version = "1.14.1" dependencies = [ - "solana-program 1.14.0", + "solana-program 1.14.1", ] [[package]] name = "solana-bpf-rust-dup-accounts" -version = "1.14.0" +version = "1.14.1" dependencies = [ - "solana-program 1.14.0", + "solana-program 1.14.1", ] [[package]] name = "solana-bpf-rust-error-handling" -version = "1.14.0" +version = "1.14.1" dependencies = [ "num-derive", "num-traits", - "solana-program 1.14.0", + "solana-program 1.14.1", "thiserror", ] [[package]] name = "solana-bpf-rust-external-spend" -version = "1.14.0" +version = "1.14.1" dependencies = [ - "solana-program 1.14.0", + "solana-program 1.14.1", ] [[package]] name = "solana-bpf-rust-finalize" -version = "1.14.0" +version = "1.14.1" dependencies = [ - "solana-program 1.14.0", + "solana-program 1.14.1", ] [[package]] name = "solana-bpf-rust-get-minimum-delegation" -version = "1.14.0" +version = "1.14.1" dependencies = [ - "solana-program 1.14.0", + "solana-program 1.14.1", ] [[package]] name = "solana-bpf-rust-inner_instruction_alignment_check" -version = "1.14.0" +version = "1.14.1" dependencies = [ - "solana-program 1.14.0", + "solana-program 1.14.1", ] [[package]] name = "solana-bpf-rust-instruction-introspection" -version = "1.14.0" +version = "1.14.1" dependencies = [ - "solana-program 1.14.0", + "solana-program 1.14.1", ] [[package]] name = "solana-bpf-rust-invoke" -version = "1.14.0" +version = "1.14.1" dependencies = [ "solana-bpf-rust-invoked", - "solana-program 1.14.0", + "solana-program 1.14.1", ] [[package]] name = "solana-bpf-rust-invoke-and-error" -version = "1.14.0" +version = "1.14.1" dependencies = [ - "solana-program 1.14.0", + "solana-program 1.14.1", ] [[package]] name = "solana-bpf-rust-invoke-and-ok" -version = "1.14.0" +version = "1.14.1" dependencies = [ - "solana-program 1.14.0", + "solana-program 1.14.1", ] [[package]] name = "solana-bpf-rust-invoke-and-return" -version = "1.14.0" +version = "1.14.1" dependencies = [ - "solana-program 1.14.0", + "solana-program 1.14.1", ] [[package]] name = "solana-bpf-rust-invoked" -version = "1.14.0" +version = "1.14.1" dependencies = [ - "solana-program 1.14.0", + "solana-program 1.14.1", ] [[package]] name = "solana-bpf-rust-iter" -version = "1.14.0" +version = "1.14.1" dependencies = [ - "solana-program 1.14.0", + "solana-program 1.14.1", ] [[package]] name = "solana-bpf-rust-log-data" -version = "1.14.0" +version = "1.14.1" dependencies = [ - "solana-program 1.14.0", + "solana-program 1.14.1", ] [[package]] name = "solana-bpf-rust-many-args" -version = "1.14.0" +version = "1.14.1" dependencies = [ "solana-bpf-rust-many-args-dep", - "solana-program 1.14.0", + "solana-program 1.14.1", ] [[package]] name = "solana-bpf-rust-many-args-dep" -version = "1.14.0" +version = "1.14.1" dependencies = [ - "solana-program 1.14.0", + "solana-program 1.14.1", ] [[package]] name = "solana-bpf-rust-mem" -version = "1.14.0" +version = "1.14.1" dependencies = [ - "solana-program 1.14.0", + "solana-program 1.14.1", "solana-program-runtime", "solana-program-test", - "solana-sdk 1.14.0", + "solana-sdk 1.14.1", ] [[package]] name = "solana-bpf-rust-membuiltins" -version = "1.14.0" +version = "1.14.1" dependencies = [ "solana-bpf-rust-mem", - "solana-program 1.14.0", + "solana-program 1.14.1", ] [[package]] name = "solana-bpf-rust-noop" -version = "1.14.0" +version = "1.14.1" dependencies = [ - "solana-program 1.14.0", + "solana-program 1.14.1", ] [[package]] name = "solana-bpf-rust-panic" -version = "1.14.0" +version = "1.14.1" dependencies = [ - "solana-program 1.14.0", + "solana-program 1.14.1", ] [[package]] name = "solana-bpf-rust-param-passing" -version = "1.14.0" +version = "1.14.1" dependencies = [ "solana-bpf-rust-param-passing-dep", - "solana-program 1.14.0", + "solana-program 1.14.1", ] [[package]] name = "solana-bpf-rust-param-passing-dep" -version = "1.14.0" +version = "1.14.1" dependencies = [ - "solana-program 1.14.0", + "solana-program 1.14.1", ] [[package]] name = "solana-bpf-rust-rand" -version = "1.14.0" +version = "1.14.1" dependencies = [ "getrandom 0.1.14", "rand 0.7.3", - "solana-program 1.14.0", + "solana-program 1.14.1", ] [[package]] name = "solana-bpf-rust-realloc" -version = "1.14.0" +version = "1.14.1" dependencies = [ - "solana-program 1.14.0", + "solana-program 1.14.1", ] [[package]] name = "solana-bpf-rust-realloc-invoke" -version = "1.14.0" +version = "1.14.1" dependencies = [ "solana-bpf-rust-realloc", - "solana-program 1.14.0", + "solana-program 1.14.1", ] [[package]] name = "solana-bpf-rust-ro-account_modify" -version = "1.14.0" +version = "1.14.1" dependencies = [ - "solana-program 1.14.0", + "solana-program 1.14.1", ] [[package]] name = "solana-bpf-rust-ro-modify" -version = "1.14.0" +version = "1.14.1" dependencies = [ - "solana-program 1.14.0", + "solana-program 1.14.1", ] [[package]] name = "solana-bpf-rust-sanity" -version = "1.14.0" +version = "1.14.1" dependencies = [ - "solana-program 1.14.0", + "solana-program 1.14.1", "solana-program-runtime", "solana-program-test", - "solana-sdk 1.14.0", + "solana-sdk 1.14.1", ] [[package]] name = "solana-bpf-rust-secp256k1-recover" -version = "1.14.0" +version = "1.14.1" dependencies = [ "libsecp256k1 0.7.0", - "solana-program 1.14.0", + "solana-program 1.14.1", ] [[package]] name = "solana-bpf-rust-sha" -version = "1.14.0" +version = "1.14.1" dependencies = [ "blake3", - "solana-program 1.14.0", + "solana-program 1.14.1", ] [[package]] name = "solana-bpf-rust-sibling-instructions" -version = "1.14.0" +version = "1.14.1" dependencies = [ - "solana-program 1.14.0", + "solana-program 1.14.1", ] [[package]] name = "solana-bpf-rust-sibling_inner-instructions" -version = "1.14.0" +version = "1.14.1" dependencies = [ - "solana-program 1.14.0", + "solana-program 1.14.1", ] [[package]] name = "solana-bpf-rust-simulation" -version = "1.14.0" +version = "1.14.1" dependencies = [ - "solana-logger 1.14.0", - "solana-program 1.14.0", + "solana-logger 1.14.1", + "solana-program 1.14.1", "solana-program-test", - "solana-sdk 1.14.0", + "solana-sdk 1.14.1", "solana-validator", ] [[package]] name = "solana-bpf-rust-spoof1" -version = "1.14.0" +version = "1.14.1" dependencies = [ - "solana-program 1.14.0", + "solana-program 1.14.1", ] [[package]] name = "solana-bpf-rust-spoof1-system" -version = "1.14.0" +version = "1.14.1" dependencies = [ - "solana-program 1.14.0", + "solana-program 1.14.1", ] [[package]] name = "solana-bpf-rust-sysvar" -version = "1.14.0" +version = "1.14.1" dependencies = [ - "solana-program 1.14.0", + "solana-program 1.14.1", "solana-program-runtime", "solana-program-test", - "solana-sdk 1.14.0", + "solana-sdk 1.14.1", ] [[package]] name = "solana-bpf-rust-upgradeable" -version = "1.14.0" +version = "1.14.1" dependencies = [ - "solana-program 1.14.0", + "solana-program 1.14.1", ] [[package]] name = "solana-bpf-rust-upgraded" -version = "1.14.0" +version = "1.14.1" dependencies = [ - "solana-program 1.14.0", + "solana-program 1.14.1", ] [[package]] name = "solana-bucket-map" -version = "1.14.0" +version = "1.14.1" dependencies = [ "log", "memmap2", "modular-bitfield", "rand 0.7.3", "solana-measure", - "solana-sdk 1.14.0", + "solana-sdk 1.14.1", "tempfile", ] [[package]] name = "solana-clap-utils" -version = "1.14.0" +version = "1.14.1" dependencies = [ "chrono", "clap 2.33.3", "rpassword", "solana-perf", "solana-remote-wallet", - "solana-sdk 1.14.0", + "solana-sdk 1.14.1", "thiserror", "tiny-bip39", "uriparse", @@ -4594,7 +4594,7 @@ dependencies = [ [[package]] name = "solana-cli-config" -version = "1.14.0" +version = "1.14.1" dependencies = [ "dirs-next", "lazy_static", @@ -4602,13 +4602,13 @@ dependencies = [ "serde_derive", "serde_yaml", "solana-clap-utils", - "solana-sdk 1.14.0", + "solana-sdk 1.14.1", "url 2.2.2", ] [[package]] name = "solana-cli-output" -version = "1.14.0" +version = "1.14.1" dependencies = [ "Inflector", "base64 0.13.0", @@ -4625,7 +4625,7 @@ dependencies = [ "solana-clap-utils", "solana-cli-config", "solana-client", - "solana-sdk 1.14.0", + "solana-sdk 1.14.1", "solana-transaction-status", "solana-vote-program", "spl-memo", @@ -4633,7 +4633,7 @@ dependencies = [ [[package]] name = "solana-client" -version = "1.14.0" +version = "1.14.1" dependencies = [ "async-mutex", "async-trait", @@ -4669,7 +4669,7 @@ dependencies = [ "solana-measure", "solana-metrics", "solana-net-utils", - "solana-sdk 1.14.0", + "solana-sdk 1.14.1", "solana-streamer", "solana-transaction-status", "solana-version", @@ -4685,27 +4685,27 @@ dependencies = [ [[package]] name = "solana-compute-budget-program" -version = "1.14.0" +version = "1.14.1" dependencies = [ "solana-program-runtime", - "solana-sdk 1.14.0", + "solana-sdk 1.14.1", ] [[package]] name = "solana-config-program" -version = "1.14.0" +version = "1.14.1" dependencies = [ "bincode", "chrono", "serde", "serde_derive", "solana-program-runtime", - "solana-sdk 1.14.0", + "solana-sdk 1.14.1", ] [[package]] name = "solana-core" -version = "1.14.0" +version = "1.14.1" dependencies = [ "ahash", "base64 0.13.0", @@ -4733,8 +4733,8 @@ dependencies = [ "solana-bloom", "solana-client", "solana-entry", - "solana-frozen-abi 1.14.0", - "solana-frozen-abi-macro 1.14.0", + "solana-frozen-abi 1.14.1", + "solana-frozen-abi-macro 1.14.1", "solana-geyser-plugin-manager", "solana-gossip", "solana-ledger", @@ -4747,7 +4747,7 @@ dependencies = [ "solana-rayon-threadlimit", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.0", + "solana-sdk 1.14.1", "solana-send-transaction-service", "solana-streamer", "solana-transaction-status", @@ -4763,19 +4763,19 @@ dependencies = [ [[package]] name = "solana-download-utils" -version = "1.14.0" +version = "1.14.1" dependencies = [ "console", "indicatif", "log", "reqwest", "solana-runtime", - "solana-sdk 1.14.0", + "solana-sdk 1.14.1", ] [[package]] name = "solana-entry" -version = "1.14.0" +version = "1.14.1" dependencies = [ "bincode", "crossbeam-channel", @@ -4791,12 +4791,12 @@ dependencies = [ "solana-metrics", "solana-perf", "solana-rayon-threadlimit", - "solana-sdk 1.14.0", + "solana-sdk 1.14.1", ] [[package]] name = "solana-faucet" -version = "1.14.0" +version = "1.14.1" dependencies = [ "bincode", "byteorder 1.4.3", @@ -4807,9 +4807,9 @@ dependencies = [ "serde_derive", "solana-clap-utils", "solana-cli-config", - "solana-logger 1.14.0", + "solana-logger 1.14.1", "solana-metrics", - "solana-sdk 1.14.0", + "solana-sdk 1.14.1", "solana-version", "spl-memo", "thiserror", @@ -4840,7 +4840,7 @@ dependencies = [ [[package]] name = "solana-frozen-abi" -version = "1.14.0" +version = "1.14.1" dependencies = [ "ahash", "blake3", @@ -4865,7 +4865,7 @@ dependencies = [ "serde_derive", "serde_json", "sha2 0.10.2", - "solana-frozen-abi-macro 1.14.0", + "solana-frozen-abi-macro 1.14.1", "subtle", "thiserror", ] @@ -4884,7 +4884,7 @@ dependencies = [ [[package]] name = "solana-frozen-abi-macro" -version = "1.14.0" +version = "1.14.1" dependencies = [ "proc-macro2 1.0.41", "quote 1.0.18", @@ -4894,26 +4894,26 @@ dependencies = [ [[package]] name = "solana-genesis-utils" -version = "1.14.0" +version = "1.14.1" dependencies = [ "solana-download-utils", "solana-runtime", - "solana-sdk 1.14.0", + "solana-sdk 1.14.1", ] [[package]] name = "solana-geyser-plugin-interface" -version = "1.14.0" +version = "1.14.1" dependencies = [ "log", - "solana-sdk 1.14.0", + "solana-sdk 1.14.1", "solana-transaction-status", "thiserror", ] [[package]] name = "solana-geyser-plugin-manager" -version = "1.14.0" +version = "1.14.1" dependencies = [ "bs58", "crossbeam-channel", @@ -4926,14 +4926,14 @@ dependencies = [ "solana-metrics", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.0", + "solana-sdk 1.14.1", "solana-transaction-status", "thiserror", ] [[package]] name = "solana-gossip" -version = "1.14.0" +version = "1.14.1" dependencies = [ "bincode", "bv", @@ -4957,17 +4957,17 @@ dependencies = [ "solana-clap-utils", "solana-client", "solana-entry", - "solana-frozen-abi 1.14.0", - "solana-frozen-abi-macro 1.14.0", + "solana-frozen-abi 1.14.1", + "solana-frozen-abi-macro 1.14.1", "solana-ledger", - "solana-logger 1.14.0", + "solana-logger 1.14.1", "solana-measure", "solana-metrics", "solana-net-utils", "solana-perf", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.14.0", + "solana-sdk 1.14.1", "solana-streamer", "solana-version", "solana-vote-program", @@ -4976,7 +4976,7 @@ dependencies = [ [[package]] name = "solana-ledger" -version = "1.14.0" +version = "1.14.1" dependencies = [ "bincode", "bitflags", @@ -5007,15 +5007,15 @@ dependencies = [ "solana-account-decoder", "solana-bpf-loader-program", "solana-entry", - "solana-frozen-abi 1.14.0", - "solana-frozen-abi-macro 1.14.0", + "solana-frozen-abi 1.14.1", + "solana-frozen-abi-macro 1.14.1", "solana-measure", "solana-metrics", "solana-perf", "solana-program-runtime", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.14.0", + "solana-sdk 1.14.1", "solana-stake-program", "solana-storage-bigtable", "solana-storage-proto", @@ -5044,7 +5044,7 @@ dependencies = [ [[package]] name = "solana-logger" -version = "1.14.0" +version = "1.14.1" dependencies = [ "env_logger", "lazy_static", @@ -5053,36 +5053,36 @@ dependencies = [ [[package]] name = "solana-measure" -version = "1.14.0" +version = "1.14.1" dependencies = [ "log", - "solana-sdk 1.14.0", + "solana-sdk 1.14.1", ] [[package]] name = "solana-merkle-tree" -version = "1.14.0" +version = "1.14.1" dependencies = [ "fast-math", "matches", - "solana-program 1.14.0", + "solana-program 1.14.1", ] [[package]] name = "solana-metrics" -version = "1.14.0" +version = "1.14.1" dependencies = [ "crossbeam-channel", "gethostname", "lazy_static", "log", "reqwest", - "solana-sdk 1.14.0", + "solana-sdk 1.14.1", ] [[package]] name = "solana-net-utils" -version = "1.14.0" +version = "1.14.1" dependencies = [ "bincode", "clap 3.1.6", @@ -5093,8 +5093,8 @@ dependencies = [ "serde", "serde_derive", "socket2", - "solana-logger 1.14.0", - "solana-sdk 1.14.0", + "solana-logger 1.14.1", + "solana-sdk 1.14.1", "solana-version", "tokio", "url 2.2.2", @@ -5102,7 +5102,7 @@ dependencies = [ [[package]] name = "solana-perf" -version = "1.14.0" +version = "1.14.1" dependencies = [ "ahash", "bincode", @@ -5121,13 +5121,13 @@ dependencies = [ "serde", "solana-metrics", "solana-rayon-threadlimit", - "solana-sdk 1.14.0", + "solana-sdk 1.14.1", "solana-vote-program", ] [[package]] name = "solana-poh" -version = "1.14.0" +version = "1.14.1" dependencies = [ "core_affinity", "crossbeam-channel", @@ -5137,7 +5137,7 @@ dependencies = [ "solana-measure", "solana-metrics", "solana-runtime", - "solana-sdk 1.14.0", + "solana-sdk 1.14.1", "solana-sys-tuner", "thiserror", ] @@ -5186,7 +5186,7 @@ dependencies = [ [[package]] name = "solana-program" -version = "1.14.0" +version = "1.14.1" dependencies = [ "base64 0.13.0", "bincode", @@ -5222,9 +5222,9 @@ dependencies = [ "serde_json", "sha2 0.10.2", "sha3 0.10.1", - "solana-frozen-abi 1.14.0", - "solana-frozen-abi-macro 1.14.0", - "solana-sdk-macro 1.14.0", + "solana-frozen-abi 1.14.1", + "solana-frozen-abi-macro 1.14.1", + "solana-sdk-macro 1.14.1", "thiserror", "tiny-bip39", "wasm-bindgen", @@ -5233,7 +5233,7 @@ dependencies = [ [[package]] name = "solana-program-runtime" -version = "1.14.0" +version = "1.14.1" dependencies = [ "base64 0.13.0", "bincode", @@ -5247,17 +5247,17 @@ dependencies = [ "num-traits", "rustc_version", "serde", - "solana-frozen-abi 1.14.0", - "solana-frozen-abi-macro 1.14.0", + "solana-frozen-abi 1.14.1", + "solana-frozen-abi-macro 1.14.1", "solana-measure", "solana-metrics", - "solana-sdk 1.14.0", + "solana-sdk 1.14.1", "thiserror", ] [[package]] name = "solana-program-test" -version = "1.14.0" +version = "1.14.1" dependencies = [ "assert_matches", "async-trait", @@ -5269,10 +5269,10 @@ dependencies = [ "solana-banks-client", "solana-banks-server", "solana-bpf-loader-program", - "solana-logger 1.14.0", + "solana-logger 1.14.1", "solana-program-runtime", "solana-runtime", - "solana-sdk 1.14.0", + "solana-sdk 1.14.1", "solana-vote-program", "thiserror", "tokio", @@ -5280,7 +5280,7 @@ dependencies = [ [[package]] name = "solana-rayon-threadlimit" -version = "1.14.0" +version = "1.14.1" dependencies = [ "lazy_static", "num_cpus", @@ -5288,7 +5288,7 @@ dependencies = [ [[package]] name = "solana-remote-wallet" -version = "1.14.0" +version = "1.14.1" dependencies = [ "console", "dialoguer", @@ -5298,14 +5298,14 @@ dependencies = [ "parking_lot 0.12.1", "qstring", "semver", - "solana-sdk 1.14.0", + "solana-sdk 1.14.1", "thiserror", "uriparse", ] [[package]] name = "solana-rpc" -version = "1.14.0" +version = "1.14.1" dependencies = [ "base64 0.13.0", "bincode", @@ -5338,7 +5338,7 @@ dependencies = [ "solana-poh", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.14.0", + "solana-sdk 1.14.1", "solana-send-transaction-service", "solana-stake-program", "solana-storage-bigtable", @@ -5356,7 +5356,7 @@ dependencies = [ [[package]] name = "solana-runtime" -version = "1.14.0" +version = "1.14.1" dependencies = [ "arrayref", "bincode", @@ -5392,17 +5392,17 @@ dependencies = [ "solana-bucket-map", "solana-compute-budget-program", "solana-config-program", - "solana-frozen-abi 1.14.0", - "solana-frozen-abi-macro 1.14.0", + "solana-frozen-abi 1.14.1", + "solana-frozen-abi-macro 1.14.1", "solana-measure", "solana-metrics", "solana-program-runtime", "solana-rayon-threadlimit", - "solana-sdk 1.14.0", + "solana-sdk 1.14.1", "solana-stake-program", "solana-vote-program", "solana-zk-token-proof-program", - "solana-zk-token-sdk 1.14.0", + "solana-zk-token-sdk 1.14.1", "strum", "strum_macros", "symlink", @@ -5465,7 +5465,7 @@ dependencies = [ [[package]] name = "solana-sdk" -version = "1.14.0" +version = "1.14.1" dependencies = [ "assert_matches", "base64 0.13.0", @@ -5502,11 +5502,11 @@ dependencies = [ "serde_json", "sha2 0.10.2", "sha3 0.10.1", - "solana-frozen-abi 1.14.0", - "solana-frozen-abi-macro 1.14.0", - "solana-logger 1.14.0", - "solana-program 1.14.0", - "solana-sdk-macro 1.14.0", + "solana-frozen-abi 1.14.1", + "solana-frozen-abi-macro 1.14.1", + "solana-logger 1.14.1", + "solana-program 1.14.1", + "solana-sdk-macro 1.14.1", "thiserror", "uriparse", "wasm-bindgen", @@ -5527,7 +5527,7 @@ dependencies = [ [[package]] name = "solana-sdk-macro" -version = "1.14.0" +version = "1.14.1" dependencies = [ "bs58", "proc-macro2 1.0.41", @@ -5538,7 +5538,7 @@ dependencies = [ [[package]] name = "solana-send-transaction-service" -version = "1.14.0" +version = "1.14.1" dependencies = [ "crossbeam-channel", "log", @@ -5546,12 +5546,12 @@ dependencies = [ "solana-measure", "solana-metrics", "solana-runtime", - "solana-sdk 1.14.0", + "solana-sdk 1.14.1", ] [[package]] name = "solana-stake-program" -version = "1.14.0" +version = "1.14.1" dependencies = [ "bincode", "log", @@ -5561,18 +5561,18 @@ dependencies = [ "serde", "serde_derive", "solana-config-program", - "solana-frozen-abi 1.14.0", - "solana-frozen-abi-macro 1.14.0", + "solana-frozen-abi 1.14.1", + "solana-frozen-abi-macro 1.14.1", "solana-metrics", "solana-program-runtime", - "solana-sdk 1.14.0", + "solana-sdk 1.14.1", "solana-vote-program", "thiserror", ] [[package]] name = "solana-storage-bigtable" -version = "1.14.0" +version = "1.14.1" dependencies = [ "backoff", "bincode", @@ -5593,7 +5593,7 @@ dependencies = [ "serde_derive", "smpl_jwt", "solana-metrics", - "solana-sdk 1.14.0", + "solana-sdk 1.14.1", "solana-storage-proto", "solana-transaction-status", "thiserror", @@ -5604,7 +5604,7 @@ dependencies = [ [[package]] name = "solana-storage-proto" -version = "1.14.0" +version = "1.14.1" dependencies = [ "bincode", "bs58", @@ -5612,14 +5612,14 @@ dependencies = [ "protobuf-src", "serde", "solana-account-decoder", - "solana-sdk 1.14.0", + "solana-sdk 1.14.1", "solana-transaction-status", "tonic-build 0.8.0", ] [[package]] name = "solana-streamer" -version = "1.14.0" +version = "1.14.1" dependencies = [ "crossbeam-channel", "futures-util", @@ -5638,7 +5638,7 @@ dependencies = [ "rustls 0.20.6", "solana-metrics", "solana-perf", - "solana-sdk 1.14.0", + "solana-sdk 1.14.1", "thiserror", "tokio", "x509-parser", @@ -5646,13 +5646,13 @@ dependencies = [ [[package]] name = "solana-sys-tuner" -version = "1.14.0" +version = "1.14.1" dependencies = [ "clap 2.33.3", "libc", "log", "nix", - "solana-logger 1.14.0", + "solana-logger 1.14.1", "solana-version", "sysctl", "unix_socket2", @@ -5661,7 +5661,7 @@ dependencies = [ [[package]] name = "solana-test-validator" -version = "1.14.0" +version = "1.14.1" dependencies = [ "base64 0.13.0", "log", @@ -5672,20 +5672,20 @@ dependencies = [ "solana-core", "solana-gossip", "solana-ledger", - "solana-logger 1.14.0", + "solana-logger 1.14.1", "solana-net-utils", "solana-program-runtime", "solana-program-test", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.0", + "solana-sdk 1.14.1", "solana-streamer", "tokio", ] [[package]] name = "solana-transaction-status" -version = "1.14.0" +version = "1.14.1" dependencies = [ "Inflector", "base64 0.13.0", @@ -5700,7 +5700,7 @@ dependencies = [ "solana-account-decoder", "solana-measure", "solana-metrics", - "solana-sdk 1.14.0", + "solana-sdk 1.14.1", "solana-vote-program", "spl-associated-token-account", "spl-memo", @@ -5711,7 +5711,7 @@ dependencies = [ [[package]] name = "solana-validator" -version = "1.14.0" +version = "1.14.1" dependencies = [ "chrono", "clap 2.33.3", @@ -5742,14 +5742,14 @@ dependencies = [ "solana-genesis-utils", "solana-gossip", "solana-ledger", - "solana-logger 1.14.0", + "solana-logger 1.14.1", "solana-metrics", "solana-net-utils", "solana-perf", "solana-poh", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.0", + "solana-sdk 1.14.1", "solana-send-transaction-service", "solana-storage-bigtable", "solana-streamer", @@ -5762,21 +5762,21 @@ dependencies = [ [[package]] name = "solana-version" -version = "1.14.0" +version = "1.14.1" dependencies = [ "log", "rustc_version", "semver", "serde", "serde_derive", - "solana-frozen-abi 1.14.0", - "solana-frozen-abi-macro 1.14.0", - "solana-sdk 1.14.0", + "solana-frozen-abi 1.14.1", + "solana-frozen-abi-macro 1.14.1", + "solana-sdk 1.14.1", ] [[package]] name = "solana-vote-program" -version = "1.14.0" +version = "1.14.1" dependencies = [ "bincode", "log", @@ -5785,25 +5785,25 @@ dependencies = [ "rustc_version", "serde", "serde_derive", - "solana-frozen-abi 1.14.0", - "solana-frozen-abi-macro 1.14.0", + "solana-frozen-abi 1.14.1", + "solana-frozen-abi-macro 1.14.1", "solana-metrics", "solana-program-runtime", - "solana-sdk 1.14.0", + "solana-sdk 1.14.1", "thiserror", ] [[package]] name = "solana-zk-token-proof-program" -version = "1.14.0" +version = "1.14.1" dependencies = [ "bytemuck", "getrandom 0.1.14", "num-derive", "num-traits", "solana-program-runtime", - "solana-sdk 1.14.0", - "solana-zk-token-sdk 1.14.0", + "solana-sdk 1.14.1", + "solana-zk-token-sdk 1.14.1", ] [[package]] @@ -5838,7 +5838,7 @@ dependencies = [ [[package]] name = "solana-zk-token-sdk" -version = "1.14.0" +version = "1.14.1" dependencies = [ "aes-gcm-siv", "arrayref", @@ -5858,8 +5858,8 @@ dependencies = [ "serde", "serde_json", "sha3 0.9.1", - "solana-program 1.14.0", - "solana-sdk 1.14.0", + "solana-program 1.14.1", + "solana-sdk 1.14.1", "subtle", "thiserror", "zeroize", diff --git a/programs/bpf/Cargo.toml b/programs/bpf/Cargo.toml index 596960fa5e503f..9fe4c8bbf1bf83 100644 --- a/programs/bpf/Cargo.toml +++ b/programs/bpf/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "solana-bpf-programs" description = "Blockchain, Rebuilt for Scale" -version = "1.14.0" +version = "1.14.1" documentation = "https://docs.rs/solana" homepage = "https://solana.com/" readme = "README.md" @@ -26,22 +26,22 @@ itertools = "0.10.1" log = "0.4.11" miow = "0.3.6" net2 = "0.2.37" -solana-account-decoder = { path = "../../account-decoder", version = "=1.14.0" } -solana-bpf-loader-program = { path = "../bpf_loader", version = "=1.14.0" } -solana-bpf-rust-invoke = { path = "rust/invoke", version = "=1.14.0" } -solana-bpf-rust-realloc = { path = "rust/realloc", version = "=1.14.0" } -solana-bpf-rust-realloc-invoke = { path = "rust/realloc_invoke", version = "=1.14.0" } -solana-cli-output = { path = "../../cli-output", version = "=1.14.0" } -solana-logger = { path = "../../logger", version = "=1.14.0" } -solana-measure = { path = "../../measure", version = "=1.14.0" } -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.0" } -solana-runtime = { path = "../../runtime", version = "=1.14.0" } -solana-sdk = { path = "../../sdk", version = "=1.14.0" } -solana-transaction-status = { path = "../../transaction-status", version = "=1.14.0" } +solana-account-decoder = { path = "../../account-decoder", version = "=1.14.1" } +solana-bpf-loader-program = { path = "../bpf_loader", version = "=1.14.1" } +solana-bpf-rust-invoke = { path = "rust/invoke", version = "=1.14.1" } +solana-bpf-rust-realloc = { path = "rust/realloc", version = "=1.14.1" } +solana-bpf-rust-realloc-invoke = { path = "rust/realloc_invoke", version = "=1.14.1" } +solana-cli-output = { path = "../../cli-output", version = "=1.14.1" } +solana-logger = { path = "../../logger", version = "=1.14.1" } +solana-measure = { path = "../../measure", version = "=1.14.1" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.1" } +solana-runtime = { path = "../../runtime", version = "=1.14.1" } +solana-sdk = { path = "../../sdk", version = "=1.14.1" } +solana-transaction-status = { path = "../../transaction-status", version = "=1.14.1" } solana_rbpf = "=0.2.31" [dev-dependencies] -solana-ledger = { path = "../../ledger", version = "=1.14.0" } +solana-ledger = { path = "../../ledger", version = "=1.14.1" } [[bench]] name = "bpf_loader" diff --git a/programs/bpf/rust/128bit/Cargo.toml b/programs/bpf/rust/128bit/Cargo.toml index a86e5c378387cd..1b4bb280281112 100644 --- a/programs/bpf/rust/128bit/Cargo.toml +++ b/programs/bpf/rust/128bit/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-128bit" -version = "1.14.0" +version = "1.14.1" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ documentation = "https://docs.rs/solana-bpf-rust-128bit" edition = "2021" [dependencies] -solana-bpf-rust-128bit-dep = { path = "../128bit_dep", version = "=1.14.0" } -solana-program = { path = "../../../../sdk/program", version = "=1.14.0" } +solana-bpf-rust-128bit-dep = { path = "../128bit_dep", version = "=1.14.1" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.1" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/128bit_dep/Cargo.toml b/programs/bpf/rust/128bit_dep/Cargo.toml index e8669dbdb7ba2b..0fcbac51286021 100644 --- a/programs/bpf/rust/128bit_dep/Cargo.toml +++ b/programs/bpf/rust/128bit_dep/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-128bit-dep" -version = "1.14.0" +version = "1.14.1" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-128bit-dep" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.0" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.1" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/bpf/rust/alloc/Cargo.toml b/programs/bpf/rust/alloc/Cargo.toml index b1522312fd8c5c..0952d40e55c86e 100644 --- a/programs/bpf/rust/alloc/Cargo.toml +++ b/programs/bpf/rust/alloc/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-alloc" -version = "1.14.0" +version = "1.14.1" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-alloc" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.0" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.1" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/call_depth/Cargo.toml b/programs/bpf/rust/call_depth/Cargo.toml index c7f0541c6efeff..6df3cf16cc1295 100644 --- a/programs/bpf/rust/call_depth/Cargo.toml +++ b/programs/bpf/rust/call_depth/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-call-depth" -version = "1.14.0" +version = "1.14.1" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-call-depth" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.0" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.1" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/caller_access/Cargo.toml b/programs/bpf/rust/caller_access/Cargo.toml index d854999daea7c1..5700379d707e71 100644 --- a/programs/bpf/rust/caller_access/Cargo.toml +++ b/programs/bpf/rust/caller_access/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-caller-access" -version = "1.14.0" +version = "1.14.1" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-caller-access" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.0" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.1" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/curve25519/Cargo.toml b/programs/bpf/rust/curve25519/Cargo.toml index e6f1a5a5f60c72..5bbd42a9d725af 100644 --- a/programs/bpf/rust/curve25519/Cargo.toml +++ b/programs/bpf/rust/curve25519/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-curve25519" -version = "1.14.0" +version = "1.14.1" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ documentation = "https://docs.rs/solana-bpf-rust-zktoken_crypto" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.0" } -solana-zk-token-sdk = { path = "../../../../zk-token-sdk", version = "=1.14.0" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.1" } +solana-zk-token-sdk = { path = "../../../../zk-token-sdk", version = "=1.14.1" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/custom_heap/Cargo.toml b/programs/bpf/rust/custom_heap/Cargo.toml index 3ec9ff9af6ce71..75bd87aec91aa5 100644 --- a/programs/bpf/rust/custom_heap/Cargo.toml +++ b/programs/bpf/rust/custom_heap/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-custom-heap" -version = "1.14.0" +version = "1.14.1" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-custom-heap" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.0" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.1" } [features] default = ["custom-heap"] diff --git a/programs/bpf/rust/dep_crate/Cargo.toml b/programs/bpf/rust/dep_crate/Cargo.toml index 0e46da98944cc0..4ce366df7720c7 100644 --- a/programs/bpf/rust/dep_crate/Cargo.toml +++ b/programs/bpf/rust/dep_crate/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-dep-crate" -version = "1.14.0" +version = "1.14.1" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,8 +12,8 @@ edition = "2021" [dependencies] byteorder = { version = "1", default-features = false } # list of crates which must be buildable for bpf programs -solana-address-lookup-table-program = { path = "../../../../programs/address-lookup-table", version = "=1.14.0" } -solana-program = { path = "../../../../sdk/program", version = "=1.14.0" } +solana-address-lookup-table-program = { path = "../../../../programs/address-lookup-table", version = "=1.14.1" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.1" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/deprecated_loader/Cargo.toml b/programs/bpf/rust/deprecated_loader/Cargo.toml index 2eadd86a487a2b..eab18f9d1fd7b7 100644 --- a/programs/bpf/rust/deprecated_loader/Cargo.toml +++ b/programs/bpf/rust/deprecated_loader/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-deprecated-loader" -version = "1.14.0" +version = "1.14.1" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-deprecated-loader" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.0" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.1" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/dup_accounts/Cargo.toml b/programs/bpf/rust/dup_accounts/Cargo.toml index fa2f64b1f60fe8..7cabb0d8c2e547 100644 --- a/programs/bpf/rust/dup_accounts/Cargo.toml +++ b/programs/bpf/rust/dup_accounts/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-dup-accounts" -version = "1.14.0" +version = "1.14.1" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-dup-accounts" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.0" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.1" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/error_handling/Cargo.toml b/programs/bpf/rust/error_handling/Cargo.toml index 0bbb230fc61f7a..92a6e6a8ac7bad 100644 --- a/programs/bpf/rust/error_handling/Cargo.toml +++ b/programs/bpf/rust/error_handling/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-error-handling" -version = "1.14.0" +version = "1.14.1" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,7 +12,7 @@ edition = "2021" [dependencies] num-derive = "0.3" num-traits = "0.2" -solana-program = { path = "../../../../sdk/program", version = "=1.14.0" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.1" } thiserror = "1.0" [lib] diff --git a/programs/bpf/rust/external_spend/Cargo.toml b/programs/bpf/rust/external_spend/Cargo.toml index cf8aaf0ead38e4..05d1c5d0ac5ad9 100644 --- a/programs/bpf/rust/external_spend/Cargo.toml +++ b/programs/bpf/rust/external_spend/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-external-spend" -version = "1.14.0" +version = "1.14.1" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-external-spend" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.0" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.1" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/finalize/Cargo.toml b/programs/bpf/rust/finalize/Cargo.toml index 42259b9b71b987..4db31add384929 100644 --- a/programs/bpf/rust/finalize/Cargo.toml +++ b/programs/bpf/rust/finalize/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-finalize" -version = "1.14.0" +version = "1.14.1" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-finalize" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.0" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.1" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/get_minimum_delegation/Cargo.toml b/programs/bpf/rust/get_minimum_delegation/Cargo.toml index 94b3fae087c823..c257419615e623 100644 --- a/programs/bpf/rust/get_minimum_delegation/Cargo.toml +++ b/programs/bpf/rust/get_minimum_delegation/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-get-minimum-delegation" -version = "1.14.0" +version = "1.14.1" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-get-minimum-delegation" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.0" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.1" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/inner_instruction_alignment_check/Cargo.toml b/programs/bpf/rust/inner_instruction_alignment_check/Cargo.toml index fc0212966fa5d6..df19dd65f30b1c 100644 --- a/programs/bpf/rust/inner_instruction_alignment_check/Cargo.toml +++ b/programs/bpf/rust/inner_instruction_alignment_check/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-inner_instruction_alignment_check" -version = "1.14.0" +version = "1.14.1" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-inner_instruction_alignment_che edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.0" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.1" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/instruction_introspection/Cargo.toml b/programs/bpf/rust/instruction_introspection/Cargo.toml index b091aba070fbfa..d7348ea0d52897 100644 --- a/programs/bpf/rust/instruction_introspection/Cargo.toml +++ b/programs/bpf/rust/instruction_introspection/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-instruction-introspection" -version = "1.14.0" +version = "1.14.1" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-instruction-introspection" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.0" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.1" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/invoke/Cargo.toml b/programs/bpf/rust/invoke/Cargo.toml index 9673bdebbf3e4e..60d24677950a52 100644 --- a/programs/bpf/rust/invoke/Cargo.toml +++ b/programs/bpf/rust/invoke/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-invoke" -version = "1.14.0" +version = "1.14.1" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -15,7 +15,7 @@ program = [] [dependencies] solana-bpf-rust-invoked = { path = "../invoked", default-features = false } -solana-program = { path = "../../../../sdk/program", version = "=1.14.0" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.1" } [lib] crate-type = ["lib", "cdylib"] diff --git a/programs/bpf/rust/invoke_and_error/Cargo.toml b/programs/bpf/rust/invoke_and_error/Cargo.toml index d105272e358e71..426c25f3ae1a1b 100644 --- a/programs/bpf/rust/invoke_and_error/Cargo.toml +++ b/programs/bpf/rust/invoke_and_error/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-invoke-and-error" -version = "1.14.0" +version = "1.14.1" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-invoke-and-error" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.0" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.1" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/invoke_and_ok/Cargo.toml b/programs/bpf/rust/invoke_and_ok/Cargo.toml index 3d8aedc15c3722..8d2b1d60b8847e 100644 --- a/programs/bpf/rust/invoke_and_ok/Cargo.toml +++ b/programs/bpf/rust/invoke_and_ok/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-invoke-and-ok" -version = "1.14.0" +version = "1.14.1" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-invoke-and-ok" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.0" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.1" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/invoke_and_return/Cargo.toml b/programs/bpf/rust/invoke_and_return/Cargo.toml index 2f49c15b3ca711..4e7b45ef8093e9 100644 --- a/programs/bpf/rust/invoke_and_return/Cargo.toml +++ b/programs/bpf/rust/invoke_and_return/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-invoke-and-return" -version = "1.14.0" +version = "1.14.1" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-invoke-and-return" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.0" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.1" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/invoked/Cargo.toml b/programs/bpf/rust/invoked/Cargo.toml index 557d73d4e0e5be..a06b449aa67ce6 100644 --- a/programs/bpf/rust/invoked/Cargo.toml +++ b/programs/bpf/rust/invoked/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-invoked" -version = "1.14.0" +version = "1.14.1" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,7 +14,7 @@ default = ["program"] program = [] [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.0" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.1" } [lib] crate-type = ["lib", "cdylib"] diff --git a/programs/bpf/rust/iter/Cargo.toml b/programs/bpf/rust/iter/Cargo.toml index 2ed9eb44ffed44..e2c7be744ea0b1 100644 --- a/programs/bpf/rust/iter/Cargo.toml +++ b/programs/bpf/rust/iter/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-iter" -version = "1.14.0" +version = "1.14.1" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-iter" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.0" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.1" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/log_data/Cargo.toml b/programs/bpf/rust/log_data/Cargo.toml index 9a110fee393149..735fa84e328bac 100644 --- a/programs/bpf/rust/log_data/Cargo.toml +++ b/programs/bpf/rust/log_data/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-log-data" -version = "1.14.0" +version = "1.14.1" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-log-data" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.0" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.1" } [features] default = ["program"] diff --git a/programs/bpf/rust/many_args/Cargo.toml b/programs/bpf/rust/many_args/Cargo.toml index ea166c372d3397..7bbb96f085a9c1 100644 --- a/programs/bpf/rust/many_args/Cargo.toml +++ b/programs/bpf/rust/many_args/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-many-args" -version = "1.14.0" +version = "1.14.1" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ documentation = "https://docs.rs/solana-bpf-rust-many-args" edition = "2021" [dependencies] -solana-bpf-rust-many-args-dep = { path = "../many_args_dep", version = "=1.14.0" } -solana-program = { path = "../../../../sdk/program", version = "=1.14.0" } +solana-bpf-rust-many-args-dep = { path = "../many_args_dep", version = "=1.14.1" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.1" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/many_args_dep/Cargo.toml b/programs/bpf/rust/many_args_dep/Cargo.toml index 22ad6e45305a2f..b91a508db4ebdb 100644 --- a/programs/bpf/rust/many_args_dep/Cargo.toml +++ b/programs/bpf/rust/many_args_dep/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-many-args-dep" -version = "1.14.0" +version = "1.14.1" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-many-args-dep" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.0" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.1" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/bpf/rust/mem/Cargo.toml b/programs/bpf/rust/mem/Cargo.toml index fc7784cb0d5998..8f91576cd08fa3 100644 --- a/programs/bpf/rust/mem/Cargo.toml +++ b/programs/bpf/rust/mem/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-mem" -version = "1.14.0" +version = "1.14.1" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,12 +13,12 @@ edition = "2021" no-entrypoint = [] [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.0" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.1" } [dev-dependencies] -solana-program-runtime = { path = "../../../../program-runtime", version = "=1.14.0" } -solana-program-test = { path = "../../../../program-test", version = "=1.14.0" } -solana-sdk = { path = "../../../../sdk", version = "=1.14.0" } +solana-program-runtime = { path = "../../../../program-runtime", version = "=1.14.1" } +solana-program-test = { path = "../../../../program-test", version = "=1.14.1" } +solana-sdk = { path = "../../../../sdk", version = "=1.14.1" } [lib] crate-type = ["cdylib", "lib"] diff --git a/programs/bpf/rust/membuiltins/Cargo.toml b/programs/bpf/rust/membuiltins/Cargo.toml index ecf0b409c0c764..15ef256720526f 100644 --- a/programs/bpf/rust/membuiltins/Cargo.toml +++ b/programs/bpf/rust/membuiltins/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-membuiltins" -version = "1.14.0" +version = "1.14.1" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ documentation = "https://docs.rs/solana-bpf-rust-mem" edition = "2021" [dependencies] -solana-bpf-rust-mem = { path = "../mem", version = "=1.14.0", features = [ "no-entrypoint" ] } -solana-program = { path = "../../../../sdk/program", version = "=1.14.0" } +solana-bpf-rust-mem = { path = "../mem", version = "=1.14.1", features = [ "no-entrypoint" ] } +solana-program = { path = "../../../../sdk/program", version = "=1.14.1" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/noop/Cargo.toml b/programs/bpf/rust/noop/Cargo.toml index 5f2a8c66630418..41708def2571e4 100644 --- a/programs/bpf/rust/noop/Cargo.toml +++ b/programs/bpf/rust/noop/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-noop" -version = "1.14.0" +version = "1.14.1" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-noop" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.0" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.1" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/panic/Cargo.toml b/programs/bpf/rust/panic/Cargo.toml index f609e2ab9ae185..7a5a41ada3f8ae 100644 --- a/programs/bpf/rust/panic/Cargo.toml +++ b/programs/bpf/rust/panic/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-panic" -version = "1.14.0" +version = "1.14.1" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-panic" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.0" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.1" } [features] default = ["custom-panic"] diff --git a/programs/bpf/rust/param_passing/Cargo.toml b/programs/bpf/rust/param_passing/Cargo.toml index cadd223bd58de3..59dbe7d46e4599 100644 --- a/programs/bpf/rust/param_passing/Cargo.toml +++ b/programs/bpf/rust/param_passing/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-param-passing" -version = "1.14.0" +version = "1.14.1" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ documentation = "https://docs.rs/solana-bpf-rust-param-passing" edition = "2021" [dependencies] -solana-bpf-rust-param-passing-dep = { path = "../param_passing_dep", version = "=1.14.0" } -solana-program = { path = "../../../../sdk/program", version = "=1.14.0" } +solana-bpf-rust-param-passing-dep = { path = "../param_passing_dep", version = "=1.14.1" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.1" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/param_passing_dep/Cargo.toml b/programs/bpf/rust/param_passing_dep/Cargo.toml index 4b129d1744d53d..1230d45f03c0eb 100644 --- a/programs/bpf/rust/param_passing_dep/Cargo.toml +++ b/programs/bpf/rust/param_passing_dep/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-param-passing-dep" -version = "1.14.0" +version = "1.14.1" description = "Solana BPF program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-param-passing-dep" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.0" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.1" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/bpf/rust/rand/Cargo.toml b/programs/bpf/rust/rand/Cargo.toml index d97fcd348f1482..f82e943e8108fa 100644 --- a/programs/bpf/rust/rand/Cargo.toml +++ b/programs/bpf/rust/rand/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-rand" -version = "1.14.0" +version = "1.14.1" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,7 +12,7 @@ edition = "2021" [dependencies] getrandom = { version = "0.1.14", features = ["dummy"] } rand = "0.7" -solana-program = { path = "../../../../sdk/program", version = "=1.14.0" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.1" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/realloc/Cargo.toml b/programs/bpf/rust/realloc/Cargo.toml index 89af7309fc22c6..a19b6a724a5aa8 100644 --- a/programs/bpf/rust/realloc/Cargo.toml +++ b/programs/bpf/rust/realloc/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-realloc" -version = "1.14.0" +version = "1.14.1" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,7 +14,7 @@ default = ["program"] program = [] [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.0" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.1" } [lib] crate-type = ["lib", "cdylib"] diff --git a/programs/bpf/rust/realloc_invoke/Cargo.toml b/programs/bpf/rust/realloc_invoke/Cargo.toml index 978ff3269ec50c..0bff157baf3f4d 100644 --- a/programs/bpf/rust/realloc_invoke/Cargo.toml +++ b/programs/bpf/rust/realloc_invoke/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-realloc-invoke" -version = "1.14.0" +version = "1.14.1" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,8 +14,8 @@ default = ["program"] program = [] [dependencies] -solana-bpf-rust-realloc = { path = "../realloc", version = "=1.14.0", default-features = false } -solana-program = { path = "../../../../sdk/program", version = "=1.14.0" } +solana-bpf-rust-realloc = { path = "../realloc", version = "=1.14.1", default-features = false } +solana-program = { path = "../../../../sdk/program", version = "=1.14.1" } [lib] crate-type = ["lib", "cdylib"] diff --git a/programs/bpf/rust/ro_account_modify/Cargo.toml b/programs/bpf/rust/ro_account_modify/Cargo.toml index 8bdd3013ec3908..2cef2de8ecccb0 100644 --- a/programs/bpf/rust/ro_account_modify/Cargo.toml +++ b/programs/bpf/rust/ro_account_modify/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-ro-account_modify" -version = "1.14.0" +version = "1.14.1" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-ro-modify" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.0" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.1" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/ro_modify/Cargo.toml b/programs/bpf/rust/ro_modify/Cargo.toml index 0641cd0c72c657..074cee35137d87 100644 --- a/programs/bpf/rust/ro_modify/Cargo.toml +++ b/programs/bpf/rust/ro_modify/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-ro-modify" -version = "1.14.0" +version = "1.14.1" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-ro-modify" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.0" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.1" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/sanity/Cargo.toml b/programs/bpf/rust/sanity/Cargo.toml index 6fb68032c9b6fe..90ce599546ba92 100644 --- a/programs/bpf/rust/sanity/Cargo.toml +++ b/programs/bpf/rust/sanity/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-sanity" -version = "1.14.0" +version = "1.14.1" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,12 +13,12 @@ edition = "2021" test-bpf = [] [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.0" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.1" } [dev-dependencies] -solana-program-runtime = { path = "../../../../program-runtime", version = "=1.14.0" } -solana-program-test = { path = "../../../../program-test", version = "=1.14.0" } -solana-sdk = { path = "../../../../sdk", version = "=1.14.0" } +solana-program-runtime = { path = "../../../../program-runtime", version = "=1.14.1" } +solana-program-test = { path = "../../../../program-test", version = "=1.14.1" } +solana-sdk = { path = "../../../../sdk", version = "=1.14.1" } [lib] crate-type = ["cdylib", "lib"] diff --git a/programs/bpf/rust/secp256k1_recover/Cargo.toml b/programs/bpf/rust/secp256k1_recover/Cargo.toml index 9ca5b6585fbf6f..1cfc97d920fb7f 100644 --- a/programs/bpf/rust/secp256k1_recover/Cargo.toml +++ b/programs/bpf/rust/secp256k1_recover/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-secp256k1-recover" -version = "1.14.0" +version = "1.14.1" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -11,7 +11,7 @@ edition = "2021" [dependencies] libsecp256k1 = { version = "0.7.0", default-features = false } -solana-program = { path = "../../../../sdk/program", version = "=1.14.0" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.1" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/sha/Cargo.toml b/programs/bpf/rust/sha/Cargo.toml index 5543a70f0a6b4c..5ca2d2a6abfe68 100644 --- a/programs/bpf/rust/sha/Cargo.toml +++ b/programs/bpf/rust/sha/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-sha" -version = "1.14.0" +version = "1.14.1" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -11,7 +11,7 @@ edition = "2021" [dependencies] blake3 = "1.0.0" -solana-program = { path = "../../../../sdk/program", version = "=1.14.0" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.1" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/sibling_inner_instruction/Cargo.toml b/programs/bpf/rust/sibling_inner_instruction/Cargo.toml index 7f1aef4e289dad..12b7079311b0a3 100644 --- a/programs/bpf/rust/sibling_inner_instruction/Cargo.toml +++ b/programs/bpf/rust/sibling_inner_instruction/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-sibling_inner-instructions" -version = "1.14.0" +version = "1.14.1" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-log-data" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.0" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.1" } [features] default = ["program"] diff --git a/programs/bpf/rust/sibling_instruction/Cargo.toml b/programs/bpf/rust/sibling_instruction/Cargo.toml index 6e9c6dda0baf4e..0fb616090239c7 100644 --- a/programs/bpf/rust/sibling_instruction/Cargo.toml +++ b/programs/bpf/rust/sibling_instruction/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-sibling-instructions" -version = "1.14.0" +version = "1.14.1" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-log-data" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.0" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.1" } [features] default = ["program"] diff --git a/programs/bpf/rust/simulation/Cargo.toml b/programs/bpf/rust/simulation/Cargo.toml index 1b1c1bd0cccf90..a2140dba6857f8 100644 --- a/programs/bpf/rust/simulation/Cargo.toml +++ b/programs/bpf/rust/simulation/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-simulation" -version = "1.14.0" +version = "1.14.1" description = "Solana BPF Program Simulation Differences" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,13 +13,13 @@ edition = "2021" test-bpf = [] [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.0" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.1" } [dev-dependencies] -solana-logger = { path = "../../../../logger", version = "=1.14.0" } -solana-program-test = { path = "../../../../program-test", version = "=1.14.0" } -solana-sdk = { path = "../../../../sdk", version = "=1.14.0" } -solana-validator = { path = "../../../../validator", version = "=1.14.0" } +solana-logger = { path = "../../../../logger", version = "=1.14.1" } +solana-program-test = { path = "../../../../program-test", version = "=1.14.1" } +solana-sdk = { path = "../../../../sdk", version = "=1.14.1" } +solana-validator = { path = "../../../../validator", version = "=1.14.1" } [lib] crate-type = ["cdylib", "lib"] diff --git a/programs/bpf/rust/spoof1/Cargo.toml b/programs/bpf/rust/spoof1/Cargo.toml index a5fb89edfbd45e..396b7085d5ea65 100644 --- a/programs/bpf/rust/spoof1/Cargo.toml +++ b/programs/bpf/rust/spoof1/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-spoof1" -version = "1.14.0" +version = "1.14.1" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-spoof1" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.0" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.1" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/spoof1_system/Cargo.toml b/programs/bpf/rust/spoof1_system/Cargo.toml index ca965efd55e6c5..934fb9c4e4e1ca 100644 --- a/programs/bpf/rust/spoof1_system/Cargo.toml +++ b/programs/bpf/rust/spoof1_system/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-spoof1-system" -version = "1.14.0" +version = "1.14.1" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-spoof1-system" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.0" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.1" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/sysvar/Cargo.toml b/programs/bpf/rust/sysvar/Cargo.toml index ab53a6b0b4173a..48dd913ca5f19e 100644 --- a/programs/bpf/rust/sysvar/Cargo.toml +++ b/programs/bpf/rust/sysvar/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-sysvar" -version = "1.14.0" +version = "1.14.1" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,12 +10,12 @@ documentation = "https://docs.rs/solana-bpf-rust-sysvar" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.0" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.1" } [dev-dependencies] -solana-program-runtime = { path = "../../../../program-runtime", version = "=1.14.0" } -solana-program-test = { path = "../../../../program-test", version = "=1.14.0" } -solana-sdk = { path = "../../../../sdk", version = "=1.14.0" } +solana-program-runtime = { path = "../../../../program-runtime", version = "=1.14.1" } +solana-program-test = { path = "../../../../program-test", version = "=1.14.1" } +solana-sdk = { path = "../../../../sdk", version = "=1.14.1" } [lib] crate-type = ["cdylib", "lib"] diff --git a/programs/bpf/rust/upgradeable/Cargo.toml b/programs/bpf/rust/upgradeable/Cargo.toml index 383714a54d6c5e..529cd21de7bce7 100644 --- a/programs/bpf/rust/upgradeable/Cargo.toml +++ b/programs/bpf/rust/upgradeable/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-upgradeable" -version = "1.14.0" +version = "1.14.1" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-upgradeable" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.0" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.1" } [lib] name = "solana_bpf_rust_upgradeable" diff --git a/programs/bpf/rust/upgraded/Cargo.toml b/programs/bpf/rust/upgraded/Cargo.toml index 3bd13102eb9de5..8144945cab0d5b 100644 --- a/programs/bpf/rust/upgraded/Cargo.toml +++ b/programs/bpf/rust/upgraded/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-upgraded" -version = "1.14.0" +version = "1.14.1" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-upgraded" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.0" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.1" } [lib] name = "solana_bpf_rust_upgraded" diff --git a/programs/bpf_loader/Cargo.toml b/programs/bpf_loader/Cargo.toml index b4cb1bb0906ef5..9f94bf6b78dbeb 100644 --- a/programs/bpf_loader/Cargo.toml +++ b/programs/bpf_loader/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-loader-program" -version = "1.14.0" +version = "1.14.1" description = "Solana BPF loader" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,17 +14,17 @@ bincode = "1.3.3" byteorder = "1.4.3" libsecp256k1 = "0.6.0" log = "0.4.17" -solana-measure = { path = "../../measure", version = "=1.14.0" } -solana-metrics = { path = "../../metrics", version = "=1.14.0" } -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.0" } -solana-sdk = { path = "../../sdk", version = "=1.14.0" } -solana-zk-token-sdk = { path = "../../zk-token-sdk", version = "=1.14.0" } +solana-measure = { path = "../../measure", version = "=1.14.1" } +solana-metrics = { path = "../../metrics", version = "=1.14.1" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.1" } +solana-sdk = { path = "../../sdk", version = "=1.14.1" } +solana-zk-token-sdk = { path = "../../zk-token-sdk", version = "=1.14.1" } solana_rbpf = "=0.2.31" thiserror = "1.0" [dev-dependencies] rand = "0.7.3" -solana-runtime = { path = "../../runtime", version = "=1.14.0" } +solana-runtime = { path = "../../runtime", version = "=1.14.1" } [lib] crate-type = ["lib"] diff --git a/programs/bpf_loader/gen-syscall-list/Cargo.toml b/programs/bpf_loader/gen-syscall-list/Cargo.toml index 6744a5ed2f6bd0..f198e1b00307f9 100644 --- a/programs/bpf_loader/gen-syscall-list/Cargo.toml +++ b/programs/bpf_loader/gen-syscall-list/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "gen-syscall-list" -version = "1.14.0" +version = "1.14.1" edition = "2021" license = "Apache-2.0" publish = false diff --git a/programs/compute-budget/Cargo.toml b/programs/compute-budget/Cargo.toml index 865793787e83c5..f5cdc51b472d62 100644 --- a/programs/compute-budget/Cargo.toml +++ b/programs/compute-budget/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "solana-compute-budget-program" description = "Solana Compute Budget program" -version = "1.14.0" +version = "1.14.1" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-compute-budget-program" repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ license = "Apache-2.0" edition = "2021" [dependencies] -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.0" } -solana-sdk = { path = "../../sdk", version = "=1.14.0" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.1" } +solana-sdk = { path = "../../sdk", version = "=1.14.1" } [lib] crate-type = ["lib"] diff --git a/programs/config/Cargo.toml b/programs/config/Cargo.toml index 9bb40db33386ed..9f98e906b3f60e 100644 --- a/programs/config/Cargo.toml +++ b/programs/config/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-config-program" -version = "1.14.0" +version = "1.14.1" description = "Solana Config program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,11 +14,11 @@ bincode = "1.3.3" chrono = { version = "0.4.11", features = ["serde"] } serde = "1.0.138" serde_derive = "1.0.103" -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.0" } -solana-sdk = { path = "../../sdk", version = "=1.14.0" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.1" } +solana-sdk = { path = "../../sdk", version = "=1.14.1" } [dev-dependencies] -solana-logger = { path = "../../logger", version = "=1.14.0" } +solana-logger = { path = "../../logger", version = "=1.14.1" } [lib] crate-type = ["lib"] diff --git a/programs/ed25519-tests/Cargo.toml b/programs/ed25519-tests/Cargo.toml index a3b5e5fda39b74..2e622b115b7f37 100644 --- a/programs/ed25519-tests/Cargo.toml +++ b/programs/ed25519-tests/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-ed25519-program-tests" -version = "1.14.0" +version = "1.14.1" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" @@ -12,8 +12,8 @@ publish = false assert_matches = "1.5.0" ed25519-dalek = "=1.0.1" rand = "0.7.0" -solana-program-test = { path = "../../program-test", version = "=1.14.0" } -solana-sdk = { path = "../../sdk", version = "=1.14.0" } +solana-program-test = { path = "../../program-test", version = "=1.14.1" } +solana-sdk = { path = "../../sdk", version = "=1.14.1" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/stake/Cargo.toml b/programs/stake/Cargo.toml index 3cd6c7929e2662..2f98967e0f43e1 100644 --- a/programs/stake/Cargo.toml +++ b/programs/stake/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-stake-program" -version = "1.14.0" +version = "1.14.1" description = "Solana Stake program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -16,19 +16,19 @@ num-derive = "0.3" num-traits = "0.2" serde = "1.0.138" serde_derive = "1.0.103" -solana-config-program = { path = "../config", version = "=1.14.0" } -solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.0" } -solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.0" } -solana-metrics = { path = "../../metrics", version = "=1.14.0" } -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.0" } -solana-sdk = { path = "../../sdk", version = "=1.14.0" } -solana-vote-program = { path = "../vote", version = "=1.14.0" } +solana-config-program = { path = "../config", version = "=1.14.1" } +solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.1" } +solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.1" } +solana-metrics = { path = "../../metrics", version = "=1.14.1" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.1" } +solana-sdk = { path = "../../sdk", version = "=1.14.1" } +solana-vote-program = { path = "../vote", version = "=1.14.1" } thiserror = "1.0" [dev-dependencies] assert_matches = "1.5.0" proptest = "1.0" -solana-logger = { path = "../../logger", version = "=1.14.0" } +solana-logger = { path = "../../logger", version = "=1.14.1" } test-case = "2.1.0" [build-dependencies] diff --git a/programs/vote/Cargo.toml b/programs/vote/Cargo.toml index b78692dedb4ed2..556e372dc3cc73 100644 --- a/programs/vote/Cargo.toml +++ b/programs/vote/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-vote-program" -version = "1.14.0" +version = "1.14.1" description = "Solana Vote program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -16,17 +16,17 @@ num-derive = "0.3" num-traits = "0.2" serde = "1.0.138" serde_derive = "1.0.103" -solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.0" } -solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.0" } -solana-metrics = { path = "../../metrics", version = "=1.14.0" } -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.0" } -solana-sdk = { path = "../../sdk", version = "=1.14.0" } +solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.1" } +solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.1" } +solana-metrics = { path = "../../metrics", version = "=1.14.1" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.1" } +solana-sdk = { path = "../../sdk", version = "=1.14.1" } thiserror = "1.0" [dev-dependencies] itertools = "0.10.3" rand = "0.7.0" -solana-logger = { path = "../../logger", version = "=1.14.0" } +solana-logger = { path = "../../logger", version = "=1.14.1" } [build-dependencies] rustc_version = "0.4" diff --git a/programs/zk-token-proof/Cargo.toml b/programs/zk-token-proof/Cargo.toml index 808b5d8584f4dd..d405ea071ed18b 100644 --- a/programs/zk-token-proof/Cargo.toml +++ b/programs/zk-token-proof/Cargo.toml @@ -3,7 +3,7 @@ name = "solana-zk-token-proof-program" description = "Solana Zk Token Proof Program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" -version = "1.14.0" +version = "1.14.1" license = "Apache-2.0" edition = "2021" @@ -12,6 +12,6 @@ bytemuck = { version = "1.11.0", features = ["derive"] } getrandom = { version = "0.1", features = ["dummy"] } num-derive = "0.3" num-traits = "0.2" -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.0" } -solana-sdk = { path = "../../sdk", version = "=1.14.0" } -solana-zk-token-sdk = { path = "../../zk-token-sdk", version = "=1.14.0" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.1" } +solana-sdk = { path = "../../sdk", version = "=1.14.1" } +solana-zk-token-sdk = { path = "../../zk-token-sdk", version = "=1.14.1" } diff --git a/rayon-threadlimit/Cargo.toml b/rayon-threadlimit/Cargo.toml index f90a2f409ab0aa..12d83ee31599b9 100644 --- a/rayon-threadlimit/Cargo.toml +++ b/rayon-threadlimit/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-rayon-threadlimit" -version = "1.14.0" +version = "1.14.1" description = "solana-rayon-threadlimit" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-rayon-threadlimit" diff --git a/rbpf-cli/Cargo.toml b/rbpf-cli/Cargo.toml index ad2904247c41fd..02dd07efe6d5f9 100644 --- a/rbpf-cli/Cargo.toml +++ b/rbpf-cli/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "rbpf-cli" -version = "1.14.0" +version = "1.14.1" description = "CLI to test and analyze eBPF programs" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/rbpf" @@ -13,8 +13,8 @@ publish = false clap = { version = "3.1.5", features = ["cargo"] } serde = "1.0.138" serde_json = "1.0.81" -solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.0" } -solana-logger = { path = "../logger", version = "=1.14.0" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.0" } -solana-sdk = { path = "../sdk", version = "=1.14.0" } +solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.1" } +solana-logger = { path = "../logger", version = "=1.14.1" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.1" } +solana-sdk = { path = "../sdk", version = "=1.14.1" } solana_rbpf = "=0.2.31" diff --git a/remote-wallet/Cargo.toml b/remote-wallet/Cargo.toml index 6b4c0accae3d9c..82973140f1a7a2 100644 --- a/remote-wallet/Cargo.toml +++ b/remote-wallet/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-remote-wallet" description = "Blockchain, Rebuilt for Scale" -version = "1.14.0" +version = "1.14.1" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -19,7 +19,7 @@ num-traits = { version = "0.2" } parking_lot = "0.12" qstring = "0.7.2" semver = "1.0" -solana-sdk = { path = "../sdk", version = "=1.14.0" } +solana-sdk = { path = "../sdk", version = "=1.14.1" } thiserror = "1.0" uriparse = "0.6.4" diff --git a/rpc-test/Cargo.toml b/rpc-test/Cargo.toml index 7f3940b0bc874c..ffdd6ffc03ed4c 100644 --- a/rpc-test/Cargo.toml +++ b/rpc-test/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-rpc-test" -version = "1.14.0" +version = "1.14.1" description = "Solana RPC Test" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -19,17 +19,17 @@ log = "0.4.17" reqwest = { version = "0.11.11", default-features = false, features = ["blocking", "brotli", "deflate", "gzip", "rustls-tls", "json"] } serde = "1.0.138" serde_json = "1.0.81" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.0" } -solana-client = { path = "../client", version = "=1.14.0" } -solana-rpc = { path = "../rpc", version = "=1.14.0" } -solana-sdk = { path = "../sdk", version = "=1.14.0" } -solana-streamer = { path = "../streamer", version = "=1.14.0" } -solana-test-validator = { path = "../test-validator", version = "=1.14.0" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.0" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.1" } +solana-client = { path = "../client", version = "=1.14.1" } +solana-rpc = { path = "../rpc", version = "=1.14.1" } +solana-sdk = { path = "../sdk", version = "=1.14.1" } +solana-streamer = { path = "../streamer", version = "=1.14.1" } +solana-test-validator = { path = "../test-validator", version = "=1.14.1" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.1" } tokio = { version = "~1.14.1", features = ["full"] } [dev-dependencies] -solana-logger = { path = "../logger", version = "=1.14.0" } +solana-logger = { path = "../logger", version = "=1.14.1" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/rpc/Cargo.toml b/rpc/Cargo.toml index 1b632c7bccbab5..843ed6cd955e7f 100644 --- a/rpc/Cargo.toml +++ b/rpc/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-rpc" -version = "1.14.0" +version = "1.14.1" description = "Solana RPC" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -29,26 +29,26 @@ serde = "1.0.138" serde_derive = "1.0.103" serde_json = "1.0.81" soketto = "0.7" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.0" } -solana-client = { path = "../client", version = "=1.14.0" } -solana-entry = { path = "../entry", version = "=1.14.0" } -solana-faucet = { path = "../faucet", version = "=1.14.0" } -solana-gossip = { path = "../gossip", version = "=1.14.0" } -solana-ledger = { path = "../ledger", version = "=1.14.0" } -solana-measure = { path = "../measure", version = "=1.14.0" } -solana-metrics = { path = "../metrics", version = "=1.14.0" } -solana-perf = { path = "../perf", version = "=1.14.0" } -solana-poh = { path = "../poh", version = "=1.14.0" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.0" } -solana-runtime = { path = "../runtime", version = "=1.14.0" } -solana-sdk = { path = "../sdk", version = "=1.14.0" } -solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.0" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.0" } -solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.0" } -solana-streamer = { path = "../streamer", version = "=1.14.0" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.0" } -solana-version = { path = "../version", version = "=1.14.0" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.0" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.1" } +solana-client = { path = "../client", version = "=1.14.1" } +solana-entry = { path = "../entry", version = "=1.14.1" } +solana-faucet = { path = "../faucet", version = "=1.14.1" } +solana-gossip = { path = "../gossip", version = "=1.14.1" } +solana-ledger = { path = "../ledger", version = "=1.14.1" } +solana-measure = { path = "../measure", version = "=1.14.1" } +solana-metrics = { path = "../metrics", version = "=1.14.1" } +solana-perf = { path = "../perf", version = "=1.14.1" } +solana-poh = { path = "../poh", version = "=1.14.1" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.1" } +solana-runtime = { path = "../runtime", version = "=1.14.1" } +solana-sdk = { path = "../sdk", version = "=1.14.1" } +solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.1" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.1" } +solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.1" } +solana-streamer = { path = "../streamer", version = "=1.14.1" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.1" } +solana-version = { path = "../version", version = "=1.14.1" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.1" } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } spl-token-2022 = { version = "=0.4.2", features = ["no-entrypoint"] } stream-cancel = "0.8.1" @@ -58,9 +58,9 @@ tokio-util = { version = "0.6", features = ["codec", "compat"] } [dev-dependencies] serial_test = "0.8.0" -solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.0" } -solana-net-utils = { path = "../net-utils", version = "=1.14.0" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.0" } +solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.1" } +solana-net-utils = { path = "../net-utils", version = "=1.14.1" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.1" } symlink = "0.1.0" [lib] diff --git a/runtime/Cargo.toml b/runtime/Cargo.toml index 129082ce5fc486..e678b10812072d 100644 --- a/runtime/Cargo.toml +++ b/runtime/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-runtime" -version = "1.14.0" +version = "1.14.1" description = "Solana runtime" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -39,21 +39,21 @@ rayon = "1.5.3" regex = "1.5.6" serde = { version = "1.0.138", features = ["rc"] } serde_derive = "1.0.103" -solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.0" } -solana-bucket-map = { path = "../bucket_map", version = "=1.14.0" } -solana-compute-budget-program = { path = "../programs/compute-budget", version = "=1.14.0" } -solana-config-program = { path = "../programs/config", version = "=1.14.0" } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.0" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.0" } -solana-measure = { path = "../measure", version = "=1.14.0" } -solana-metrics = { path = "../metrics", version = "=1.14.0" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.0" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.0" } -solana-sdk = { path = "../sdk", version = "=1.14.0" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.0" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.0" } -solana-zk-token-proof-program = { path = "../programs/zk-token-proof", version = "=1.14.0" } -solana-zk-token-sdk = { path = "../zk-token-sdk", version = "=1.14.0" } +solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.1" } +solana-bucket-map = { path = "../bucket_map", version = "=1.14.1" } +solana-compute-budget-program = { path = "../programs/compute-budget", version = "=1.14.1" } +solana-config-program = { path = "../programs/config", version = "=1.14.1" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.1" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.1" } +solana-measure = { path = "../measure", version = "=1.14.1" } +solana-metrics = { path = "../metrics", version = "=1.14.1" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.1" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.1" } +solana-sdk = { path = "../sdk", version = "=1.14.1" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.1" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.1" } +solana-zk-token-proof-program = { path = "../programs/zk-token-proof", version = "=1.14.1" } +solana-zk-token-sdk = { path = "../zk-token-sdk", version = "=1.14.1" } strum = { version = "0.24", features = ["derive"] } strum_macros = "0.24" symlink = "0.1.0" @@ -71,7 +71,7 @@ assert_matches = "1.5.0" ed25519-dalek = "=1.0.1" libsecp256k1 = "0.6.0" rand_chacha = "0.2.2" -solana-logger = { path = "../logger", version = "=1.14.0" } +solana-logger = { path = "../logger", version = "=1.14.1" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/runtime/store-tool/Cargo.toml b/runtime/store-tool/Cargo.toml index 2060261d943b96..affdb5894fd640 100644 --- a/runtime/store-tool/Cargo.toml +++ b/runtime/store-tool/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-store-tool" description = "Tool to inspect append vecs" -version = "1.14.0" +version = "1.14.1" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -12,9 +12,9 @@ publish = false [dependencies] clap = "2.33.1" log = { version = "0.4.17" } -solana-logger = { path = "../../logger", version = "=1.14.0" } -solana-runtime = { path = "..", version = "=1.14.0" } -solana-version = { path = "../../version", version = "=1.14.0" } +solana-logger = { path = "../../logger", version = "=1.14.1" } +solana-runtime = { path = "..", version = "=1.14.1" } +solana-version = { path = "../../version", version = "=1.14.1" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/sdk/Cargo.toml b/sdk/Cargo.toml index b4751931a7c366..df316e0365da8a 100644 --- a/sdk/Cargo.toml +++ b/sdk/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-sdk" -version = "1.14.0" +version = "1.14.1" description = "Solana SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -71,11 +71,11 @@ serde_derive = "1.0.103" serde_json = { version = "1.0.81", optional = true } sha2 = "0.10.2" sha3 = { version = "0.10.1", optional = true } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.0" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.0" } -solana-logger = { path = "../logger", version = "=1.14.0", optional = true } -solana-program = { path = "program", version = "=1.14.0" } -solana-sdk-macro = { path = "macro", version = "=1.14.0" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.1" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.1" } +solana-logger = { path = "../logger", version = "=1.14.1", optional = true } +solana-program = { path = "program", version = "=1.14.1" } +solana-sdk-macro = { path = "macro", version = "=1.14.1" } thiserror = "1.0" uriparse = "0.6.4" wasm-bindgen = "0.2" diff --git a/sdk/cargo-build-bpf/Cargo.toml b/sdk/cargo-build-bpf/Cargo.toml index 8f444c113c8f9f..0ba4b251affd5d 100644 --- a/sdk/cargo-build-bpf/Cargo.toml +++ b/sdk/cargo-build-bpf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-cargo-build-bpf" -version = "1.14.0" +version = "1.14.1" description = "Compile a local package and all of its dependencies using the Solana SBF SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,7 +12,7 @@ publish = false [dependencies] cargo_metadata = "0.15.0" clap = { version = "3.1.5", features = ["cargo", "env"] } -solana-sdk = { path = "..", version = "=1.14.0" } +solana-sdk = { path = "..", version = "=1.14.1" } [features] program = [] diff --git a/sdk/cargo-build-sbf/Cargo.toml b/sdk/cargo-build-sbf/Cargo.toml index 4d03aed4ade05b..404538ef3b5b9d 100644 --- a/sdk/cargo-build-sbf/Cargo.toml +++ b/sdk/cargo-build-sbf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-cargo-build-sbf" -version = "1.14.0" +version = "1.14.1" description = "Compile a local package and all of its dependencies using the Solana SBF SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -15,9 +15,9 @@ cargo_metadata = "0.15.0" clap = { version = "3.1.5", features = ["cargo", "env"] } log = { version = "0.4.14", features = ["std"] } regex = "1.5.6" -solana-download-utils = { path = "../../download-utils", version = "=1.14.0" } -solana-logger = { path = "../../logger", version = "=1.14.0" } -solana-sdk = { path = "..", version = "=1.14.0" } +solana-download-utils = { path = "../../download-utils", version = "=1.14.1" } +solana-logger = { path = "../../logger", version = "=1.14.1" } +solana-sdk = { path = "..", version = "=1.14.1" } tar = "0.4.38" [dev-dependencies] diff --git a/sdk/cargo-build-sbf/tests/crates/fail/Cargo.toml b/sdk/cargo-build-sbf/tests/crates/fail/Cargo.toml index eb552628fad371..ac07d7486e9a10 100644 --- a/sdk/cargo-build-sbf/tests/crates/fail/Cargo.toml +++ b/sdk/cargo-build-sbf/tests/crates/fail/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "fail" -version = "1.14.0" +version = "1.14.1" description = "Solana SBF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ edition = "2021" publish = false [dependencies] -solana-program = { path = "../../../../program", version = "=1.14.0" } +solana-program = { path = "../../../../program", version = "=1.14.1" } [lib] crate-type = ["cdylib"] diff --git a/sdk/cargo-build-sbf/tests/crates/noop/Cargo.toml b/sdk/cargo-build-sbf/tests/crates/noop/Cargo.toml index 1c65ab61c9fc24..5a78e3202c106d 100644 --- a/sdk/cargo-build-sbf/tests/crates/noop/Cargo.toml +++ b/sdk/cargo-build-sbf/tests/crates/noop/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "noop" -version = "1.14.0" +version = "1.14.1" description = "Solana SBF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ edition = "2021" publish = false [dependencies] -solana-program = { path = "../../../../program", version = "=1.14.0" } +solana-program = { path = "../../../../program", version = "=1.14.1" } [lib] crate-type = ["cdylib"] diff --git a/sdk/cargo-test-bpf/Cargo.toml b/sdk/cargo-test-bpf/Cargo.toml index c9ad9ba0ee2469..cbb009d59e2a7c 100644 --- a/sdk/cargo-test-bpf/Cargo.toml +++ b/sdk/cargo-test-bpf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-cargo-test-bpf" -version = "1.14.0" +version = "1.14.1" description = "Execute all unit and integration tests after building with the Solana SBF SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/sdk/cargo-test-sbf/Cargo.toml b/sdk/cargo-test-sbf/Cargo.toml index f6f81483d7740d..e1caa492128e7d 100644 --- a/sdk/cargo-test-sbf/Cargo.toml +++ b/sdk/cargo-test-sbf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-cargo-test-sbf" -version = "1.14.0" +version = "1.14.1" description = "Execute all unit and integration tests after building with the Solana SBF SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/sdk/gen-headers/Cargo.toml b/sdk/gen-headers/Cargo.toml index c7f6884c4d5f2b..9a753117a88f0d 100644 --- a/sdk/gen-headers/Cargo.toml +++ b/sdk/gen-headers/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "gen-headers" -version = "1.14.0" +version = "1.14.1" edition = "2021" license = "Apache-2.0" publish = false diff --git a/sdk/macro/Cargo.toml b/sdk/macro/Cargo.toml index 94ad8ff909907b..7076a90105bf9f 100644 --- a/sdk/macro/Cargo.toml +++ b/sdk/macro/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-sdk-macro" -version = "1.14.0" +version = "1.14.1" description = "Solana SDK Macro" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/sdk/program/Cargo.toml b/sdk/program/Cargo.toml index 3b63740355c956..de5b4eb9b8ccd3 100644 --- a/sdk/program/Cargo.toml +++ b/sdk/program/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-program" -version = "1.14.0" +version = "1.14.1" description = "Solana Program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -31,9 +31,9 @@ serde_derive = "1.0" serde_json = "1.0" sha2 = "0.10.0" sha3 = "0.10.0" -solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.0" } -solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.0" } -solana-sdk-macro = { path = "../macro", version = "=1.14.0" } +solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.1" } +solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.1" } +solana-sdk-macro = { path = "../macro", version = "=1.14.1" } thiserror = "1.0" [target.'cfg(not(target_os = "solana"))'.dependencies] @@ -50,7 +50,7 @@ wasm-bindgen = "0.2" zeroize = { version = "1.3", default-features = true, features = ["zeroize_derive"] } [target.'cfg(not(target_os = "solana"))'.dev-dependencies] -solana-logger = { path = "../../logger", version = "=1.14.0" } +solana-logger = { path = "../../logger", version = "=1.14.1" } [target.'cfg(target_arch = "wasm32")'.dependencies] console_error_panic_hook = "0.1.7" diff --git a/send-transaction-service/Cargo.toml b/send-transaction-service/Cargo.toml index 9684cae4dca995..59d81783e5453b 100644 --- a/send-transaction-service/Cargo.toml +++ b/send-transaction-service/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-send-transaction-service" -version = "1.14.0" +version = "1.14.1" description = "Solana send transaction service" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,14 +12,14 @@ edition = "2021" [dependencies] crossbeam-channel = "0.5" log = "0.4.17" -solana-client = { path = "../client", version = "=1.14.0" } -solana-measure = { path = "../measure", version = "=1.14.0" } -solana-metrics = { path = "../metrics", version = "=1.14.0" } -solana-runtime = { path = "../runtime", version = "=1.14.0" } -solana-sdk = { path = "../sdk", version = "=1.14.0" } +solana-client = { path = "../client", version = "=1.14.1" } +solana-measure = { path = "../measure", version = "=1.14.1" } +solana-metrics = { path = "../metrics", version = "=1.14.1" } +solana-runtime = { path = "../runtime", version = "=1.14.1" } +solana-sdk = { path = "../sdk", version = "=1.14.1" } [dev-dependencies] -solana-logger = { path = "../logger", version = "=1.14.0" } +solana-logger = { path = "../logger", version = "=1.14.1" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/stake-accounts/Cargo.toml b/stake-accounts/Cargo.toml index ed3237e891a5eb..57f1cdb3f29095 100644 --- a/stake-accounts/Cargo.toml +++ b/stake-accounts/Cargo.toml @@ -3,7 +3,7 @@ name = "solana-stake-accounts" description = "Blockchain, Rebuilt for Scale" authors = ["Solana Maintainers "] edition = "2021" -version = "1.14.0" +version = "1.14.1" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -11,15 +11,15 @@ documentation = "https://docs.rs/solana-stake-accounts" [dependencies] clap = "2.33.1" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.0" } -solana-cli-config = { path = "../cli-config", version = "=1.14.0" } -solana-client = { path = "../client", version = "=1.14.0" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.0" } -solana-sdk = { path = "../sdk", version = "=1.14.0" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.0" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.1" } +solana-cli-config = { path = "../cli-config", version = "=1.14.1" } +solana-client = { path = "../client", version = "=1.14.1" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.1" } +solana-sdk = { path = "../sdk", version = "=1.14.1" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.1" } [dev-dependencies] -solana-runtime = { path = "../runtime", version = "=1.14.0" } +solana-runtime = { path = "../runtime", version = "=1.14.1" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/storage-bigtable/Cargo.toml b/storage-bigtable/Cargo.toml index f76b00b4ef74e4..72b06e00eb88d6 100644 --- a/storage-bigtable/Cargo.toml +++ b/storage-bigtable/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-storage-bigtable" -version = "1.14.0" +version = "1.14.1" description = "Solana Storage BigTable" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -27,10 +27,10 @@ prost-types = "0.11.0" serde = "1.0.138" serde_derive = "1.0.103" smpl_jwt = "0.7.1" -solana-metrics = { path = "../metrics", version = "=1.14.0" } -solana-sdk = { path = "../sdk", version = "=1.14.0" } -solana-storage-proto = { path = "../storage-proto", version = "=1.14.0" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.0" } +solana-metrics = { path = "../metrics", version = "=1.14.1" } +solana-sdk = { path = "../sdk", version = "=1.14.1" } +solana-storage-proto = { path = "../storage-proto", version = "=1.14.1" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.1" } thiserror = "1.0" tokio = "1" tonic = { version = "0.8.0", features = ["tls", "transport"] } diff --git a/storage-bigtable/build-proto/Cargo.lock b/storage-bigtable/build-proto/Cargo.lock index 6d825e06157206..6e56fc2174b540 100644 --- a/storage-bigtable/build-proto/Cargo.lock +++ b/storage-bigtable/build-proto/Cargo.lock @@ -219,7 +219,7 @@ dependencies = [ [[package]] name = "proto" -version = "1.14.0" +version = "1.14.1" dependencies = [ "protobuf-src", "tonic-build", diff --git a/storage-bigtable/build-proto/Cargo.toml b/storage-bigtable/build-proto/Cargo.toml index a68e4cf659c3fd..54e51095bd34a2 100644 --- a/storage-bigtable/build-proto/Cargo.toml +++ b/storage-bigtable/build-proto/Cargo.toml @@ -7,7 +7,7 @@ license = "Apache-2.0" name = "proto" publish = false repository = "https://github.com/solana-labs/solana" -version = "1.14.0" +version = "1.14.1" [workspace] diff --git a/storage-proto/Cargo.toml b/storage-proto/Cargo.toml index 172c74b1ccbe25..8fc413ebd66292 100644 --- a/storage-proto/Cargo.toml +++ b/storage-proto/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-storage-proto" -version = "1.14.0" +version = "1.14.1" description = "Solana Storage Protobuf Definitions" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,9 +14,9 @@ bincode = "1.3.3" bs58 = "0.4.0" prost = "0.11.0" serde = "1.0.138" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.0" } -solana-sdk = { path = "../sdk", version = "=1.14.0" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.0" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.1" } +solana-sdk = { path = "../sdk", version = "=1.14.1" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.1" } [dev-dependencies] enum-iterator = "0.8.1" diff --git a/streamer/Cargo.toml b/streamer/Cargo.toml index 9fbf7e71b7d613..96f2e4cfab8175 100644 --- a/streamer/Cargo.toml +++ b/streamer/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-streamer" -version = "1.14.0" +version = "1.14.1" description = "Solana Streamer" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -25,15 +25,15 @@ quinn = "0.8.3" rand = "0.7.0" rcgen = "0.9.2" rustls = { version = "0.20.6", features = ["dangerous_configuration"] } -solana-metrics = { path = "../metrics", version = "=1.14.0" } -solana-perf = { path = "../perf", version = "=1.14.0" } -solana-sdk = { path = "../sdk", version = "=1.14.0" } +solana-metrics = { path = "../metrics", version = "=1.14.1" } +solana-perf = { path = "../perf", version = "=1.14.1" } +solana-sdk = { path = "../sdk", version = "=1.14.1" } thiserror = "1.0" tokio = { version = "1", features = ["full"] } x509-parser = "0.14.0" [dev-dependencies] -solana-logger = { path = "../logger", version = "=1.14.0" } +solana-logger = { path = "../logger", version = "=1.14.1" } [lib] crate-type = ["lib"] diff --git a/sys-tuner/Cargo.toml b/sys-tuner/Cargo.toml index 303eddd19c9c38..f9d32e8ca2e08b 100644 --- a/sys-tuner/Cargo.toml +++ b/sys-tuner/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-sys-tuner" description = "The solana cluster system tuner daemon" -version = "1.14.0" +version = "1.14.1" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,8 +14,8 @@ publish = true clap = "2.33.1" libc = "0.2.126" log = "0.4.17" -solana-logger = { path = "../logger", version = "=1.14.0" } -solana-version = { path = "../version", version = "=1.14.0" } +solana-logger = { path = "../logger", version = "=1.14.1" } +solana-version = { path = "../version", version = "=1.14.1" } [target."cfg(unix)".dependencies] unix_socket2 = "0.5.4" diff --git a/test-validator/Cargo.toml b/test-validator/Cargo.toml index 93a91051594dfb..051b38525259b3 100644 --- a/test-validator/Cargo.toml +++ b/test-validator/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "solana-test-validator" description = "Blockchain, Rebuilt for Scale" -version = "1.14.0" +version = "1.14.1" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-test-validator" readme = "../README.md" @@ -15,19 +15,19 @@ base64 = "0.13.0" log = "0.4.17" serde_derive = "1.0.103" serde_json = "1.0.81" -solana-cli-output = { path = "../cli-output", version = "=1.14.0" } -solana-client = { path = "../client", version = "=1.14.0" } -solana-core = { path = "../core", version = "=1.14.0" } -solana-gossip = { path = "../gossip", version = "=1.14.0" } -solana-ledger = { path = "../ledger", version = "=1.14.0" } -solana-logger = { path = "../logger", version = "=1.14.0" } -solana-net-utils = { path = "../net-utils", version = "=1.14.0" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.0" } -solana-program-test = { path = "../program-test", version = "=1.14.0" } -solana-rpc = { path = "../rpc", version = "=1.14.0" } -solana-runtime = { path = "../runtime", version = "=1.14.0" } -solana-sdk = { path = "../sdk", version = "=1.14.0" } -solana-streamer = { path = "../streamer", version = "=1.14.0" } +solana-cli-output = { path = "../cli-output", version = "=1.14.1" } +solana-client = { path = "../client", version = "=1.14.1" } +solana-core = { path = "../core", version = "=1.14.1" } +solana-gossip = { path = "../gossip", version = "=1.14.1" } +solana-ledger = { path = "../ledger", version = "=1.14.1" } +solana-logger = { path = "../logger", version = "=1.14.1" } +solana-net-utils = { path = "../net-utils", version = "=1.14.1" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.1" } +solana-program-test = { path = "../program-test", version = "=1.14.1" } +solana-rpc = { path = "../rpc", version = "=1.14.1" } +solana-runtime = { path = "../runtime", version = "=1.14.1" } +solana-sdk = { path = "../sdk", version = "=1.14.1" } +solana-streamer = { path = "../streamer", version = "=1.14.1" } tokio = { version = "1", features = ["full"] } [package.metadata.docs.rs] diff --git a/tokens/Cargo.toml b/tokens/Cargo.toml index 5ffc78eec6afc9..36095a4d612137 100644 --- a/tokens/Cargo.toml +++ b/tokens/Cargo.toml @@ -3,7 +3,7 @@ name = "solana-tokens" description = "Blockchain, Rebuilt for Scale" authors = ["Solana Maintainers "] edition = "2021" -version = "1.14.0" +version = "1.14.1" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -19,14 +19,14 @@ indexmap = "1.9.1" indicatif = "0.16.2" pickledb = "0.4.1" serde = { version = "1.0", features = ["derive"] } -solana-account-decoder = { path = "../account-decoder", version = "=1.14.0" } -solana-clap-utils = { path = "../clap-utils", version = "=1.14.0" } -solana-cli-config = { path = "../cli-config", version = "=1.14.0" } -solana-client = { path = "../client", version = "=1.14.0" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.0" } -solana-sdk = { path = "../sdk", version = "=1.14.0" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.0" } -solana-version = { path = "../version", version = "=1.14.0" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.1" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.1" } +solana-cli-config = { path = "../cli-config", version = "=1.14.1" } +solana-client = { path = "../client", version = "=1.14.1" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.1" } +solana-sdk = { path = "../sdk", version = "=1.14.1" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.1" } +solana-version = { path = "../version", version = "=1.14.1" } spl-associated-token-account = { version = "=1.1.1" } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } tempfile = "3.3.0" @@ -34,6 +34,6 @@ thiserror = "1.0" [dev-dependencies] bincode = "1.3.3" -solana-logger = { path = "../logger", version = "=1.14.0" } -solana-streamer = { path = "../streamer", version = "=1.14.0" } -solana-test-validator = { path = "../test-validator", version = "=1.14.0" } +solana-logger = { path = "../logger", version = "=1.14.1" } +solana-streamer = { path = "../streamer", version = "=1.14.1" } +solana-test-validator = { path = "../test-validator", version = "=1.14.1" } diff --git a/transaction-dos/Cargo.toml b/transaction-dos/Cargo.toml index cd5c80b8831465..c6fd3a685221cb 100644 --- a/transaction-dos/Cargo.toml +++ b/transaction-dos/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-transaction-dos" -version = "1.14.0" +version = "1.14.1" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,23 +14,23 @@ clap = "2.33.1" log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.0" } -solana-cli = { path = "../cli", version = "=1.14.0" } -solana-client = { path = "../client", version = "=1.14.0" } -solana-core = { path = "../core", version = "=1.14.0" } -solana-faucet = { path = "../faucet", version = "=1.14.0" } -solana-gossip = { path = "../gossip", version = "=1.14.0" } -solana-logger = { path = "../logger", version = "=1.14.0" } -solana-measure = { path = "../measure", version = "=1.14.0" } -solana-net-utils = { path = "../net-utils", version = "=1.14.0" } -solana-runtime = { path = "../runtime", version = "=1.14.0" } -solana-sdk = { path = "../sdk", version = "=1.14.0" } -solana-streamer = { path = "../streamer", version = "=1.14.0" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.0" } -solana-version = { path = "../version", version = "=1.14.0" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.1" } +solana-cli = { path = "../cli", version = "=1.14.1" } +solana-client = { path = "../client", version = "=1.14.1" } +solana-core = { path = "../core", version = "=1.14.1" } +solana-faucet = { path = "../faucet", version = "=1.14.1" } +solana-gossip = { path = "../gossip", version = "=1.14.1" } +solana-logger = { path = "../logger", version = "=1.14.1" } +solana-measure = { path = "../measure", version = "=1.14.1" } +solana-net-utils = { path = "../net-utils", version = "=1.14.1" } +solana-runtime = { path = "../runtime", version = "=1.14.1" } +solana-sdk = { path = "../sdk", version = "=1.14.1" } +solana-streamer = { path = "../streamer", version = "=1.14.1" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.1" } +solana-version = { path = "../version", version = "=1.14.1" } [dev-dependencies] -solana-local-cluster = { path = "../local-cluster", version = "=1.14.0" } +solana-local-cluster = { path = "../local-cluster", version = "=1.14.1" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/transaction-status/Cargo.toml b/transaction-status/Cargo.toml index ba71c9fdc274a1..0624a4fc4e1d21 100644 --- a/transaction-status/Cargo.toml +++ b/transaction-status/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-transaction-status" -version = "1.14.0" +version = "1.14.1" description = "Solana transaction status types" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -20,11 +20,11 @@ log = "0.4.17" serde = "1.0.138" serde_derive = "1.0.103" serde_json = "1.0.81" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.0" } -solana-measure = { path = "../measure", version = "=1.14.0" } -solana-metrics = { path = "../metrics", version = "=1.14.0" } -solana-sdk = { path = "../sdk", version = "=1.14.0" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.0" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.1" } +solana-measure = { path = "../measure", version = "=1.14.1" } +solana-metrics = { path = "../metrics", version = "=1.14.1" } +solana-sdk = { path = "../sdk", version = "=1.14.1" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.1" } spl-associated-token-account = { version = "=1.1.1", features = ["no-entrypoint"] } spl-memo = { version = "=3.0.1", features = ["no-entrypoint"] } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } diff --git a/upload-perf/Cargo.toml b/upload-perf/Cargo.toml index a65e4bb40737f3..92e3be2c0f7ffa 100644 --- a/upload-perf/Cargo.toml +++ b/upload-perf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-upload-perf" -version = "1.14.0" +version = "1.14.1" description = "Metrics Upload Utility" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -11,7 +11,7 @@ publish = false [dependencies] serde_json = "1.0.81" -solana-metrics = { path = "../metrics", version = "=1.14.0" } +solana-metrics = { path = "../metrics", version = "=1.14.1" } [[bin]] name = "solana-upload-perf" diff --git a/validator/Cargo.toml b/validator/Cargo.toml index 2f3e25677503b9..5eea4b84aee7f4 100644 --- a/validator/Cargo.toml +++ b/validator/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-validator" description = "Blockchain, Rebuilt for Scale" -version = "1.14.0" +version = "1.14.1" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -28,30 +28,30 @@ num_cpus = "1.13.1" rand = "0.7.0" serde = "1.0.138" serde_json = "1.0.81" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.0" } -solana-cli-config = { path = "../cli-config", version = "=1.14.0" } -solana-client = { path = "../client", version = "=1.14.0" } -solana-core = { path = "../core", version = "=1.14.0" } -solana-download-utils = { path = "../download-utils", version = "=1.14.0" } -solana-entry = { path = "../entry", version = "=1.14.0" } -solana-faucet = { path = "../faucet", version = "=1.14.0" } -solana-genesis-utils = { path = "../genesis-utils", version = "=1.14.0" } -solana-gossip = { path = "../gossip", version = "=1.14.0" } -solana-ledger = { path = "../ledger", version = "=1.14.0" } -solana-logger = { path = "../logger", version = "=1.14.0" } -solana-metrics = { path = "../metrics", version = "=1.14.0" } -solana-net-utils = { path = "../net-utils", version = "=1.14.0" } -solana-perf = { path = "../perf", version = "=1.14.0" } -solana-poh = { path = "../poh", version = "=1.14.0" } -solana-rpc = { path = "../rpc", version = "=1.14.0" } -solana-runtime = { path = "../runtime", version = "=1.14.0" } -solana-sdk = { path = "../sdk", version = "=1.14.0" } -solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.0" } -solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.0" } -solana-streamer = { path = "../streamer", version = "=1.14.0" } -solana-test-validator = { path = "../test-validator", version = "=1.14.0" } -solana-version = { path = "../version", version = "=1.14.0" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.0" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.1" } +solana-cli-config = { path = "../cli-config", version = "=1.14.1" } +solana-client = { path = "../client", version = "=1.14.1" } +solana-core = { path = "../core", version = "=1.14.1" } +solana-download-utils = { path = "../download-utils", version = "=1.14.1" } +solana-entry = { path = "../entry", version = "=1.14.1" } +solana-faucet = { path = "../faucet", version = "=1.14.1" } +solana-genesis-utils = { path = "../genesis-utils", version = "=1.14.1" } +solana-gossip = { path = "../gossip", version = "=1.14.1" } +solana-ledger = { path = "../ledger", version = "=1.14.1" } +solana-logger = { path = "../logger", version = "=1.14.1" } +solana-metrics = { path = "../metrics", version = "=1.14.1" } +solana-net-utils = { path = "../net-utils", version = "=1.14.1" } +solana-perf = { path = "../perf", version = "=1.14.1" } +solana-poh = { path = "../poh", version = "=1.14.1" } +solana-rpc = { path = "../rpc", version = "=1.14.1" } +solana-runtime = { path = "../runtime", version = "=1.14.1" } +solana-sdk = { path = "../sdk", version = "=1.14.1" } +solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.1" } +solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.1" } +solana-streamer = { path = "../streamer", version = "=1.14.1" } +solana-test-validator = { path = "../test-validator", version = "=1.14.1" } +solana-version = { path = "../version", version = "=1.14.1" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.1" } symlink = "0.1.0" [target.'cfg(not(target_env = "msvc"))'.dependencies] diff --git a/version/Cargo.toml b/version/Cargo.toml index d03f336b535c74..538d355629ddf7 100644 --- a/version/Cargo.toml +++ b/version/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-version" -version = "1.14.0" +version = "1.14.1" description = "Solana Version" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,9 +14,9 @@ log = "0.4.17" semver = "1.0.10" serde = "1.0.138" serde_derive = "1.0.103" -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.0" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.0" } -solana-sdk = { path = "../sdk", version = "=1.14.0" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.1" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.1" } +solana-sdk = { path = "../sdk", version = "=1.14.1" } [lib] name = "solana_version" diff --git a/watchtower/Cargo.toml b/watchtower/Cargo.toml index 3e8f2e4fe6d5eb..f4ea09421370d4 100644 --- a/watchtower/Cargo.toml +++ b/watchtower/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-watchtower" description = "Blockchain, Rebuilt for Scale" -version = "1.14.0" +version = "1.14.1" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -13,15 +13,15 @@ documentation = "https://docs.rs/solana-watchtower" clap = "2.33.1" humantime = "2.0.1" log = "0.4.17" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.0" } -solana-cli-config = { path = "../cli-config", version = "=1.14.0" } -solana-cli-output = { path = "../cli-output", version = "=1.14.0" } -solana-client = { path = "../client", version = "=1.14.0" } -solana-logger = { path = "../logger", version = "=1.14.0" } -solana-metrics = { path = "../metrics", version = "=1.14.0" } -solana-notifier = { path = "../notifier", version = "=1.14.0" } -solana-sdk = { path = "../sdk", version = "=1.14.0" } -solana-version = { path = "../version", version = "=1.14.0" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.1" } +solana-cli-config = { path = "../cli-config", version = "=1.14.1" } +solana-cli-output = { path = "../cli-output", version = "=1.14.1" } +solana-client = { path = "../client", version = "=1.14.1" } +solana-logger = { path = "../logger", version = "=1.14.1" } +solana-metrics = { path = "../metrics", version = "=1.14.1" } +solana-notifier = { path = "../notifier", version = "=1.14.1" } +solana-sdk = { path = "../sdk", version = "=1.14.1" } +solana-version = { path = "../version", version = "=1.14.1" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/zk-token-sdk/Cargo.toml b/zk-token-sdk/Cargo.toml index ce813eea716de4..7f4c54a154f1df 100644 --- a/zk-token-sdk/Cargo.toml +++ b/zk-token-sdk/Cargo.toml @@ -3,7 +3,7 @@ name = "solana-zk-token-sdk" description = "Solana Zk Token SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" -version = "1.14.0" +version = "1.14.1" license = "Apache-2.0" edition = "2021" @@ -12,7 +12,7 @@ base64 = "0.13" bytemuck = { version = "1.11.0", features = ["derive"] } num-derive = "0.3" num-traits = "0.2" -solana-program = { path = "../sdk/program", version = "=1.14.0" } +solana-program = { path = "../sdk/program", version = "=1.14.1" } [target.'cfg(not(target_os = "solana"))'.dependencies] aes-gcm-siv = "0.10.3" @@ -29,7 +29,7 @@ rand = "0.7" serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" sha3 = "0.9" -solana-sdk = { path = "../sdk", version = "=1.14.0" } +solana-sdk = { path = "../sdk", version = "=1.14.1" } subtle = "2" thiserror = "1.0" zeroize = { version = "1.3", default-features = false, features = ["zeroize_derive"] } From c6f807806a5c222f538c6eb1ce9afe9042040cb9 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Tue, 13 Sep 2022 22:25:29 +0000 Subject: [PATCH 115/465] Restore aliasing rules in BPF loader. (backport #27752) (#27760) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Restore aliasing rules in BPF loader. (#27752) (cherry picked from commit c9eac2e6a1e48276f3c44247709d7321b057886c) Co-authored-by: Alexander Meißner --- programs/bpf_loader/src/lib.rs | 27 +++++++++------------------ 1 file changed, 9 insertions(+), 18 deletions(-) diff --git a/programs/bpf_loader/src/lib.rs b/programs/bpf_loader/src/lib.rs index 741f5ea5533d37..619467cdaba089 100644 --- a/programs/bpf_loader/src/lib.rs +++ b/programs/bpf_loader/src/lib.rs @@ -588,7 +588,6 @@ fn process_loader_upgradeable_instruction( return Err(InstructionError::InvalidArgument); } let buffer_key = *buffer.get_key(); - let buffer_lamports = buffer.get_lamports(); let buffer_data_offset = UpgradeableLoaderState::size_of_buffer_metadata(); let buffer_data_len = buffer.get_data().len().saturating_sub(buffer_data_offset); let programdata_data_offset = UpgradeableLoaderState::size_of_programdata_metadata(); @@ -623,12 +622,11 @@ fn process_loader_upgradeable_instruction( // Drain the Buffer account to payer before paying for programdata account { - let mut payer = - instruction_context.try_borrow_instruction_account(transaction_context, 0)?; - payer.checked_add_lamports(buffer_lamports)?; - drop(payer); let mut buffer = instruction_context.try_borrow_instruction_account(transaction_context, 3)?; + let mut payer = + instruction_context.try_borrow_instruction_account(transaction_context, 0)?; + payer.checked_add_lamports(buffer.get_lamports())?; buffer.set_lamports(0)?; } @@ -870,23 +868,18 @@ fn process_loader_upgradeable_instruction( .fill(0); // Fund ProgramData to rent-exemption, spill the rest - - let programdata_lamports = programdata.get_lamports(); - programdata.set_lamports(programdata_balance_required)?; - drop(programdata); - let mut buffer = instruction_context.try_borrow_instruction_account(transaction_context, 2)?; - buffer.set_lamports(0)?; - drop(buffer); - let mut spill = instruction_context.try_borrow_instruction_account(transaction_context, 3)?; spill.checked_add_lamports( - programdata_lamports + programdata + .get_lamports() .saturating_add(buffer_lamports) .saturating_sub(programdata_balance_required), )?; + buffer.set_lamports(0)?; + programdata.set_lamports(programdata_balance_required)?; ic_logger_msg!(log_collector, "Upgraded program {:?}", new_program_id); } @@ -971,12 +964,10 @@ fn process_loader_upgradeable_instruction( let close_key = *close_account.get_key(); match close_account.get_state()? { UpgradeableLoaderState::Uninitialized => { - let close_lamports = close_account.get_lamports(); - close_account.set_lamports(0)?; - drop(close_account); let mut recipient_account = instruction_context .try_borrow_instruction_account(transaction_context, 1)?; - recipient_account.checked_add_lamports(close_lamports)?; + recipient_account.checked_add_lamports(close_account.get_lamports())?; + close_account.set_lamports(0)?; ic_logger_msg!(log_collector, "Closed Uninitialized {}", close_key); } From 8aec9795bcfc0a67226a2f7b1aaeee9231b827cf Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 14 Sep 2022 17:15:33 -0600 Subject: [PATCH 116/465] Bump Version to 1.14.2 (#27785) Co-authored-by: willhickey --- Cargo.lock | 484 ++++++++--------- account-decoder/Cargo.toml | 8 +- accounts-bench/Cargo.toml | 12 +- accounts-cluster-bench/Cargo.toml | 34 +- banking-bench/Cargo.toml | 26 +- banks-client/Cargo.toml | 12 +- banks-interface/Cargo.toml | 4 +- banks-server/Cargo.toml | 12 +- bench-streamer/Cargo.toml | 8 +- bench-tps/Cargo.toml | 38 +- bloom/Cargo.toml | 8 +- bucket_map/Cargo.toml | 8 +- clap-utils/Cargo.toml | 8 +- clap-v3-utils/Cargo.toml | 8 +- cli-config/Cargo.toml | 6 +- cli-output/Cargo.toml | 16 +- cli/Cargo.toml | 36 +- client-test/Cargo.toml | 32 +- client/Cargo.toml | 28 +- core/Cargo.toml | 56 +- docs/src/developing/clients/jsonrpc-api.md | 6 +- dos/Cargo.toml | 30 +- download-utils/Cargo.toml | 6 +- entry/Cargo.toml | 16 +- faucet/Cargo.toml | 14 +- frozen-abi/Cargo.toml | 6 +- frozen-abi/macro/Cargo.toml | 2 +- genesis-utils/Cargo.toml | 8 +- genesis/Cargo.toml | 22 +- geyser-plugin-interface/Cargo.toml | 6 +- geyser-plugin-manager/Cargo.toml | 16 +- gossip/Cargo.toml | 38 +- install/Cargo.toml | 14 +- keygen/Cargo.toml | 12 +- ledger-tool/Cargo.toml | 30 +- ledger/Cargo.toml | 40 +- local-cluster/Cargo.toml | 28 +- log-analyzer/Cargo.toml | 6 +- logger/Cargo.toml | 2 +- measure/Cargo.toml | 4 +- merkle-root-bench/Cargo.toml | 12 +- merkle-tree/Cargo.toml | 4 +- metrics/Cargo.toml | 4 +- net-shaper/Cargo.toml | 4 +- net-utils/Cargo.toml | 8 +- notifier/Cargo.toml | 2 +- perf/Cargo.toml | 12 +- poh-bench/Cargo.toml | 14 +- poh/Cargo.toml | 20 +- program-runtime/Cargo.toml | 14 +- program-test/Cargo.toml | 18 +- .../address-lookup-table-tests/Cargo.toml | 8 +- programs/address-lookup-table/Cargo.toml | 12 +- programs/bpf-loader-tests/Cargo.toml | 8 +- programs/bpf/Cargo.lock | 490 +++++++++--------- programs/bpf/Cargo.toml | 28 +- programs/bpf/rust/128bit/Cargo.toml | 6 +- programs/bpf/rust/128bit_dep/Cargo.toml | 4 +- programs/bpf/rust/alloc/Cargo.toml | 4 +- programs/bpf/rust/call_depth/Cargo.toml | 4 +- programs/bpf/rust/caller_access/Cargo.toml | 4 +- programs/bpf/rust/curve25519/Cargo.toml | 6 +- programs/bpf/rust/custom_heap/Cargo.toml | 4 +- programs/bpf/rust/dep_crate/Cargo.toml | 6 +- .../bpf/rust/deprecated_loader/Cargo.toml | 4 +- programs/bpf/rust/dup_accounts/Cargo.toml | 4 +- programs/bpf/rust/error_handling/Cargo.toml | 4 +- programs/bpf/rust/external_spend/Cargo.toml | 4 +- programs/bpf/rust/finalize/Cargo.toml | 4 +- .../rust/get_minimum_delegation/Cargo.toml | 4 +- .../Cargo.toml | 4 +- .../rust/instruction_introspection/Cargo.toml | 4 +- programs/bpf/rust/invoke/Cargo.toml | 4 +- programs/bpf/rust/invoke_and_error/Cargo.toml | 4 +- programs/bpf/rust/invoke_and_ok/Cargo.toml | 4 +- .../bpf/rust/invoke_and_return/Cargo.toml | 4 +- programs/bpf/rust/invoked/Cargo.toml | 4 +- programs/bpf/rust/iter/Cargo.toml | 4 +- programs/bpf/rust/log_data/Cargo.toml | 4 +- programs/bpf/rust/many_args/Cargo.toml | 6 +- programs/bpf/rust/many_args_dep/Cargo.toml | 4 +- programs/bpf/rust/mem/Cargo.toml | 10 +- programs/bpf/rust/membuiltins/Cargo.toml | 6 +- programs/bpf/rust/noop/Cargo.toml | 4 +- programs/bpf/rust/panic/Cargo.toml | 4 +- programs/bpf/rust/param_passing/Cargo.toml | 6 +- .../bpf/rust/param_passing_dep/Cargo.toml | 4 +- programs/bpf/rust/rand/Cargo.toml | 4 +- programs/bpf/rust/realloc/Cargo.toml | 4 +- programs/bpf/rust/realloc_invoke/Cargo.toml | 6 +- .../bpf/rust/ro_account_modify/Cargo.toml | 4 +- programs/bpf/rust/ro_modify/Cargo.toml | 4 +- programs/bpf/rust/sanity/Cargo.toml | 10 +- .../bpf/rust/secp256k1_recover/Cargo.toml | 4 +- programs/bpf/rust/sha/Cargo.toml | 4 +- .../rust/sibling_inner_instruction/Cargo.toml | 4 +- .../bpf/rust/sibling_instruction/Cargo.toml | 4 +- programs/bpf/rust/simulation/Cargo.toml | 12 +- programs/bpf/rust/spoof1/Cargo.toml | 4 +- programs/bpf/rust/spoof1_system/Cargo.toml | 4 +- programs/bpf/rust/sysvar/Cargo.toml | 10 +- programs/bpf/rust/upgradeable/Cargo.toml | 4 +- programs/bpf/rust/upgraded/Cargo.toml | 4 +- programs/bpf_loader/Cargo.toml | 14 +- .../bpf_loader/gen-syscall-list/Cargo.toml | 2 +- programs/compute-budget/Cargo.toml | 6 +- programs/config/Cargo.toml | 8 +- programs/ed25519-tests/Cargo.toml | 6 +- programs/stake/Cargo.toml | 18 +- programs/vote/Cargo.toml | 14 +- programs/zk-token-proof/Cargo.toml | 8 +- rayon-threadlimit/Cargo.toml | 2 +- rbpf-cli/Cargo.toml | 10 +- remote-wallet/Cargo.toml | 4 +- rpc-test/Cargo.toml | 18 +- rpc/Cargo.toml | 48 +- runtime/Cargo.toml | 34 +- runtime/store-tool/Cargo.toml | 8 +- sdk/Cargo.toml | 12 +- sdk/cargo-build-bpf/Cargo.toml | 4 +- sdk/cargo-build-sbf/Cargo.toml | 8 +- .../tests/crates/fail/Cargo.toml | 4 +- .../tests/crates/noop/Cargo.toml | 4 +- sdk/cargo-test-bpf/Cargo.toml | 2 +- sdk/cargo-test-sbf/Cargo.toml | 2 +- sdk/gen-headers/Cargo.toml | 2 +- sdk/macro/Cargo.toml | 2 +- sdk/program/Cargo.toml | 10 +- send-transaction-service/Cargo.toml | 14 +- stake-accounts/Cargo.toml | 16 +- storage-bigtable/Cargo.toml | 10 +- storage-bigtable/build-proto/Cargo.lock | 2 +- storage-bigtable/build-proto/Cargo.toml | 2 +- storage-proto/Cargo.toml | 8 +- streamer/Cargo.toml | 10 +- sys-tuner/Cargo.toml | 6 +- test-validator/Cargo.toml | 28 +- tokens/Cargo.toml | 24 +- transaction-dos/Cargo.toml | 32 +- transaction-status/Cargo.toml | 12 +- upload-perf/Cargo.toml | 4 +- validator/Cargo.toml | 50 +- version/Cargo.toml | 8 +- watchtower/Cargo.toml | 20 +- zk-token-sdk/Cargo.toml | 6 +- 145 files changed, 1269 insertions(+), 1269 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 1d52962c6039ca..2d8547c0bdc29c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1688,7 +1688,7 @@ dependencies = [ [[package]] name = "gen-headers" -version = "1.14.1" +version = "1.14.2" dependencies = [ "log", "regex", @@ -1696,7 +1696,7 @@ dependencies = [ [[package]] name = "gen-syscall-list" -version = "1.14.1" +version = "1.14.2" dependencies = [ "regex", ] @@ -3756,15 +3756,15 @@ dependencies = [ [[package]] name = "rbpf-cli" -version = "1.14.1" +version = "1.14.2" dependencies = [ "clap 3.1.8", "serde", "serde_json", "solana-bpf-loader-program", - "solana-logger 1.14.1", + "solana-logger 1.14.2", "solana-program-runtime", - "solana-sdk 1.14.1", + "solana-sdk 1.14.2", "solana_rbpf", ] @@ -4475,7 +4475,7 @@ dependencies = [ [[package]] name = "solana-account-decoder" -version = "1.14.1" +version = "1.14.2" dependencies = [ "Inflector", "base64 0.13.0", @@ -4487,7 +4487,7 @@ dependencies = [ "serde_derive", "serde_json", "solana-config-program", - "solana-sdk 1.14.1", + "solana-sdk 1.14.2", "solana-vote-program", "spl-token", "spl-token-2022", @@ -4497,21 +4497,21 @@ dependencies = [ [[package]] name = "solana-accounts-bench" -version = "1.14.1" +version = "1.14.2" dependencies = [ "clap 2.33.3", "log", "rayon", - "solana-logger 1.14.1", + "solana-logger 1.14.2", "solana-measure", "solana-runtime", - "solana-sdk 1.14.1", + "solana-sdk 1.14.2", "solana-version", ] [[package]] name = "solana-accounts-cluster-bench" -version = "1.14.1" +version = "1.14.2" dependencies = [ "clap 2.33.3", "log", @@ -4524,11 +4524,11 @@ dependencies = [ "solana-faucet", "solana-gossip", "solana-local-cluster", - "solana-logger 1.14.1", + "solana-logger 1.14.2", "solana-measure", "solana-net-utils", "solana-runtime", - "solana-sdk 1.14.1", + "solana-sdk 1.14.2", "solana-streamer", "solana-test-validator", "solana-transaction-status", @@ -4538,7 +4538,7 @@ dependencies = [ [[package]] name = "solana-address-lookup-table-program" -version = "1.14.1" +version = "1.14.2" dependencies = [ "bincode", "bytemuck", @@ -4547,28 +4547,28 @@ dependencies = [ "num-traits", "rustc_version 0.4.0", "serde", - "solana-frozen-abi 1.14.1", - "solana-frozen-abi-macro 1.14.1", - "solana-program 1.14.1", + "solana-frozen-abi 1.14.2", + "solana-frozen-abi-macro 1.14.2", + "solana-program 1.14.2", "solana-program-runtime", - "solana-sdk 1.14.1", + "solana-sdk 1.14.2", "thiserror", ] [[package]] name = "solana-address-lookup-table-program-tests" -version = "1.14.1" +version = "1.14.2" dependencies = [ "assert_matches", "bincode", "solana-address-lookup-table-program", "solana-program-test", - "solana-sdk 1.14.1", + "solana-sdk 1.14.2", ] [[package]] name = "solana-banking-bench" -version = "1.14.1" +version = "1.14.2" dependencies = [ "clap 3.1.8", "crossbeam-channel", @@ -4579,27 +4579,27 @@ dependencies = [ "solana-core", "solana-gossip", "solana-ledger", - "solana-logger 1.14.1", + "solana-logger 1.14.2", "solana-measure", "solana-perf", "solana-poh", "solana-runtime", - "solana-sdk 1.14.1", + "solana-sdk 1.14.2", "solana-streamer", "solana-version", ] [[package]] name = "solana-banks-client" -version = "1.14.1" +version = "1.14.2" dependencies = [ "borsh", "futures 0.3.21", "solana-banks-interface", "solana-banks-server", - "solana-program 1.14.1", + "solana-program 1.14.2", "solana-runtime", - "solana-sdk 1.14.1", + "solana-sdk 1.14.2", "tarpc", "thiserror", "tokio", @@ -4608,16 +4608,16 @@ dependencies = [ [[package]] name = "solana-banks-interface" -version = "1.14.1" +version = "1.14.2" dependencies = [ "serde", - "solana-sdk 1.14.1", + "solana-sdk 1.14.2", "tarpc", ] [[package]] name = "solana-banks-server" -version = "1.14.1" +version = "1.14.2" dependencies = [ "bincode", "crossbeam-channel", @@ -4625,7 +4625,7 @@ dependencies = [ "solana-banks-interface", "solana-client", "solana-runtime", - "solana-sdk 1.14.1", + "solana-sdk 1.14.2", "solana-send-transaction-service", "tarpc", "tokio", @@ -4635,7 +4635,7 @@ dependencies = [ [[package]] name = "solana-bench-streamer" -version = "1.14.1" +version = "1.14.2" dependencies = [ "clap 3.1.8", "crossbeam-channel", @@ -4646,7 +4646,7 @@ dependencies = [ [[package]] name = "solana-bench-tps" -version = "1.14.1" +version = "1.14.2" dependencies = [ "clap 2.33.3", "crossbeam-channel", @@ -4663,13 +4663,13 @@ dependencies = [ "solana-genesis", "solana-gossip", "solana-local-cluster", - "solana-logger 1.14.1", + "solana-logger 1.14.2", "solana-measure", "solana-metrics", "solana-net-utils", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.1", + "solana-sdk 1.14.2", "solana-streamer", "solana-test-validator", "solana-version", @@ -4678,7 +4678,7 @@ dependencies = [ [[package]] name = "solana-bloom" -version = "1.14.1" +version = "1.14.2" dependencies = [ "bv", "fnv", @@ -4688,14 +4688,14 @@ dependencies = [ "rustc_version 0.4.0", "serde", "serde_derive", - "solana-frozen-abi 1.14.1", - "solana-frozen-abi-macro 1.14.1", - "solana-sdk 1.14.1", + "solana-frozen-abi 1.14.2", + "solana-frozen-abi-macro 1.14.2", + "solana-sdk 1.14.2", ] [[package]] name = "solana-bpf-loader-program" -version = "1.14.1" +version = "1.14.2" dependencies = [ "bincode", "byteorder", @@ -4706,26 +4706,26 @@ dependencies = [ "solana-metrics", "solana-program-runtime", "solana-runtime", - "solana-sdk 1.14.1", - "solana-zk-token-sdk 1.14.1", + "solana-sdk 1.14.2", + "solana-zk-token-sdk 1.14.2", "solana_rbpf", "thiserror", ] [[package]] name = "solana-bpf-loader-program-tests" -version = "1.14.1" +version = "1.14.2" dependencies = [ "assert_matches", "bincode", "solana-bpf-loader-program", "solana-program-test", - "solana-sdk 1.14.1", + "solana-sdk 1.14.2", ] [[package]] name = "solana-bucket-map" -version = "1.14.1" +version = "1.14.2" dependencies = [ "fs_extra", "log", @@ -4733,24 +4733,24 @@ dependencies = [ "modular-bitfield", "rand 0.7.3", "rayon", - "solana-logger 1.14.1", + "solana-logger 1.14.2", "solana-measure", - "solana-sdk 1.14.1", + "solana-sdk 1.14.2", "tempfile", ] [[package]] name = "solana-cargo-build-bpf" -version = "1.14.1" +version = "1.14.2" dependencies = [ "cargo_metadata", "clap 3.1.8", - "solana-sdk 1.14.1", + "solana-sdk 1.14.2", ] [[package]] name = "solana-cargo-build-sbf" -version = "1.14.1" +version = "1.14.2" dependencies = [ "bzip2", "cargo_metadata", @@ -4759,14 +4759,14 @@ dependencies = [ "regex", "serial_test", "solana-download-utils", - "solana-logger 1.14.1", - "solana-sdk 1.14.1", + "solana-logger 1.14.2", + "solana-sdk 1.14.2", "tar", ] [[package]] name = "solana-cargo-test-bpf" -version = "1.14.1" +version = "1.14.2" dependencies = [ "cargo_metadata", "clap 3.1.8", @@ -4774,7 +4774,7 @@ dependencies = [ [[package]] name = "solana-cargo-test-sbf" -version = "1.14.1" +version = "1.14.2" dependencies = [ "cargo_metadata", "clap 3.1.8", @@ -4782,14 +4782,14 @@ dependencies = [ [[package]] name = "solana-clap-utils" -version = "1.14.1" +version = "1.14.2" dependencies = [ "chrono", "clap 2.33.3", "rpassword", "solana-perf", "solana-remote-wallet", - "solana-sdk 1.14.1", + "solana-sdk 1.14.2", "tempfile", "thiserror", "tiny-bip39", @@ -4799,14 +4799,14 @@ dependencies = [ [[package]] name = "solana-clap-v3-utils" -version = "1.14.1" +version = "1.14.2" dependencies = [ "chrono", "clap 3.1.8", "rpassword", "solana-perf", "solana-remote-wallet", - "solana-sdk 1.14.1", + "solana-sdk 1.14.2", "tempfile", "thiserror", "tiny-bip39", @@ -4816,7 +4816,7 @@ dependencies = [ [[package]] name = "solana-cli" -version = "1.14.1" +version = "1.14.2" dependencies = [ "bincode", "bs58", @@ -4843,10 +4843,10 @@ dependencies = [ "solana-client", "solana-config-program", "solana-faucet", - "solana-logger 1.14.1", + "solana-logger 1.14.2", "solana-program-runtime", "solana-remote-wallet", - "solana-sdk 1.14.1", + "solana-sdk 1.14.2", "solana-streamer", "solana-test-validator", "solana-transaction-status", @@ -4861,7 +4861,7 @@ dependencies = [ [[package]] name = "solana-cli-config" -version = "1.14.1" +version = "1.14.2" dependencies = [ "anyhow", "dirs-next", @@ -4870,13 +4870,13 @@ dependencies = [ "serde_derive", "serde_yaml", "solana-clap-utils", - "solana-sdk 1.14.1", + "solana-sdk 1.14.2", "url 2.2.2", ] [[package]] name = "solana-cli-output" -version = "1.14.1" +version = "1.14.2" dependencies = [ "Inflector", "base64 0.13.0", @@ -4894,7 +4894,7 @@ dependencies = [ "solana-clap-utils", "solana-cli-config", "solana-client", - "solana-sdk 1.14.1", + "solana-sdk 1.14.2", "solana-transaction-status", "solana-vote-program", "spl-memo", @@ -4902,7 +4902,7 @@ dependencies = [ [[package]] name = "solana-client" -version = "1.14.1" +version = "1.14.2" dependencies = [ "anyhow", "assert_matches", @@ -4938,12 +4938,12 @@ dependencies = [ "solana-account-decoder", "solana-clap-utils", "solana-faucet", - "solana-logger 1.14.1", + "solana-logger 1.14.2", "solana-measure", "solana-metrics", "solana-net-utils", "solana-perf", - "solana-sdk 1.14.1", + "solana-sdk 1.14.2", "solana-streamer", "solana-transaction-status", "solana-version", @@ -4959,14 +4959,14 @@ dependencies = [ [[package]] name = "solana-client-test" -version = "1.14.1" +version = "1.14.2" dependencies = [ "futures-util", "serde_json", "serial_test", "solana-client", "solana-ledger", - "solana-logger 1.14.1", + "solana-logger 1.14.2", "solana-measure", "solana-merkle-tree", "solana-metrics", @@ -4974,7 +4974,7 @@ dependencies = [ "solana-rayon-threadlimit", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.1", + "solana-sdk 1.14.2", "solana-streamer", "solana-test-validator", "solana-transaction-status", @@ -4985,28 +4985,28 @@ dependencies = [ [[package]] name = "solana-compute-budget-program" -version = "1.14.1" +version = "1.14.2" dependencies = [ "solana-program-runtime", - "solana-sdk 1.14.1", + "solana-sdk 1.14.2", ] [[package]] name = "solana-config-program" -version = "1.14.1" +version = "1.14.2" dependencies = [ "bincode", "chrono", "serde", "serde_derive", - "solana-logger 1.14.1", + "solana-logger 1.14.2", "solana-program-runtime", - "solana-sdk 1.14.1", + "solana-sdk 1.14.2", ] [[package]] name = "solana-core" -version = "1.14.1" +version = "1.14.2" dependencies = [ "ahash", "base64 0.13.0", @@ -5038,12 +5038,12 @@ dependencies = [ "solana-bloom", "solana-client", "solana-entry", - "solana-frozen-abi 1.14.1", - "solana-frozen-abi-macro 1.14.1", + "solana-frozen-abi 1.14.2", + "solana-frozen-abi-macro 1.14.2", "solana-geyser-plugin-manager", "solana-gossip", "solana-ledger", - "solana-logger 1.14.1", + "solana-logger 1.14.2", "solana-measure", "solana-metrics", "solana-net-utils", @@ -5053,7 +5053,7 @@ dependencies = [ "solana-rayon-threadlimit", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.1", + "solana-sdk 1.14.2", "solana-send-transaction-service", "solana-stake-program", "solana-streamer", @@ -5073,7 +5073,7 @@ dependencies = [ [[package]] name = "solana-dos" -version = "1.14.1" +version = "1.14.2" dependencies = [ "bincode", "clap 3.1.8", @@ -5089,42 +5089,42 @@ dependencies = [ "solana-faucet", "solana-gossip", "solana-local-cluster", - "solana-logger 1.14.1", + "solana-logger 1.14.2", "solana-measure", "solana-net-utils", "solana-perf", "solana-rpc", - "solana-sdk 1.14.1", + "solana-sdk 1.14.2", "solana-streamer", "solana-version", ] [[package]] name = "solana-download-utils" -version = "1.14.1" +version = "1.14.2" dependencies = [ "console", "indicatif", "log", "reqwest", "solana-runtime", - "solana-sdk 1.14.1", + "solana-sdk 1.14.2", ] [[package]] name = "solana-ed25519-program-tests" -version = "1.14.1" +version = "1.14.2" dependencies = [ "assert_matches", "ed25519-dalek", "rand 0.7.3", "solana-program-test", - "solana-sdk 1.14.1", + "solana-sdk 1.14.2", ] [[package]] name = "solana-entry" -version = "1.14.1" +version = "1.14.2" dependencies = [ "bincode", "crossbeam-channel", @@ -5136,18 +5136,18 @@ dependencies = [ "rand 0.7.3", "rayon", "serde", - "solana-logger 1.14.1", + "solana-logger 1.14.2", "solana-measure", "solana-merkle-tree", "solana-metrics", "solana-perf", "solana-rayon-threadlimit", - "solana-sdk 1.14.1", + "solana-sdk 1.14.2", ] [[package]] name = "solana-faucet" -version = "1.14.1" +version = "1.14.2" dependencies = [ "bincode", "byteorder", @@ -5158,9 +5158,9 @@ dependencies = [ "serde_derive", "solana-clap-utils", "solana-cli-config", - "solana-logger 1.14.1", + "solana-logger 1.14.2", "solana-metrics", - "solana-sdk 1.14.1", + "solana-sdk 1.14.2", "solana-version", "spl-memo", "thiserror", @@ -5191,7 +5191,7 @@ dependencies = [ [[package]] name = "solana-frozen-abi" -version = "1.14.1" +version = "1.14.2" dependencies = [ "ahash", "blake3", @@ -5216,8 +5216,8 @@ dependencies = [ "serde_derive", "serde_json", "sha2 0.10.2", - "solana-frozen-abi-macro 1.14.1", - "solana-logger 1.14.1", + "solana-frozen-abi-macro 1.14.2", + "solana-logger 1.14.2", "subtle", "thiserror", ] @@ -5236,7 +5236,7 @@ dependencies = [ [[package]] name = "solana-frozen-abi-macro" -version = "1.14.1" +version = "1.14.2" dependencies = [ "proc-macro2 1.0.41", "quote 1.0.18", @@ -5246,7 +5246,7 @@ dependencies = [ [[package]] name = "solana-genesis" -version = "1.14.1" +version = "1.14.2" dependencies = [ "base64 0.13.0", "clap 2.33.3", @@ -5257,9 +5257,9 @@ dependencies = [ "solana-cli-config", "solana-entry", "solana-ledger", - "solana-logger 1.14.1", + "solana-logger 1.14.2", "solana-runtime", - "solana-sdk 1.14.1", + "solana-sdk 1.14.2", "solana-stake-program", "solana-version", "solana-vote-program", @@ -5268,26 +5268,26 @@ dependencies = [ [[package]] name = "solana-genesis-utils" -version = "1.14.1" +version = "1.14.2" dependencies = [ "solana-download-utils", "solana-runtime", - "solana-sdk 1.14.1", + "solana-sdk 1.14.2", ] [[package]] name = "solana-geyser-plugin-interface" -version = "1.14.1" +version = "1.14.2" dependencies = [ "log", - "solana-sdk 1.14.1", + "solana-sdk 1.14.2", "solana-transaction-status", "thiserror", ] [[package]] name = "solana-geyser-plugin-manager" -version = "1.14.1" +version = "1.14.2" dependencies = [ "bs58", "crossbeam-channel", @@ -5300,14 +5300,14 @@ dependencies = [ "solana-metrics", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.1", + "solana-sdk 1.14.2", "solana-transaction-status", "thiserror", ] [[package]] name = "solana-gossip" -version = "1.14.1" +version = "1.14.2" dependencies = [ "bincode", "bv", @@ -5334,17 +5334,17 @@ dependencies = [ "solana-clap-utils", "solana-client", "solana-entry", - "solana-frozen-abi 1.14.1", - "solana-frozen-abi-macro 1.14.1", + "solana-frozen-abi 1.14.2", + "solana-frozen-abi-macro 1.14.2", "solana-ledger", - "solana-logger 1.14.1", + "solana-logger 1.14.2", "solana-measure", "solana-metrics", "solana-net-utils", "solana-perf", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.14.1", + "solana-sdk 1.14.2", "solana-streamer", "solana-version", "solana-vote-program", @@ -5353,7 +5353,7 @@ dependencies = [ [[package]] name = "solana-install" -version = "1.14.1" +version = "1.14.2" dependencies = [ "atty", "bincode", @@ -5374,8 +5374,8 @@ dependencies = [ "solana-clap-utils", "solana-client", "solana-config-program", - "solana-logger 1.14.1", - "solana-sdk 1.14.1", + "solana-logger 1.14.2", + "solana-sdk 1.14.2", "solana-version", "tar", "tempfile", @@ -5386,7 +5386,7 @@ dependencies = [ [[package]] name = "solana-keygen" -version = "1.14.1" +version = "1.14.2" dependencies = [ "bs58", "clap 3.1.8", @@ -5395,14 +5395,14 @@ dependencies = [ "solana-clap-v3-utils", "solana-cli-config", "solana-remote-wallet", - "solana-sdk 1.14.1", + "solana-sdk 1.14.2", "solana-version", "tiny-bip39", ] [[package]] name = "solana-ledger" -version = "1.14.1" +version = "1.14.2" dependencies = [ "assert_matches", "bincode", @@ -5436,16 +5436,16 @@ dependencies = [ "solana-account-decoder", "solana-bpf-loader-program", "solana-entry", - "solana-frozen-abi 1.14.1", - "solana-frozen-abi-macro 1.14.1", - "solana-logger 1.14.1", + "solana-frozen-abi 1.14.2", + "solana-frozen-abi-macro 1.14.2", + "solana-logger 1.14.2", "solana-measure", "solana-metrics", "solana-perf", "solana-program-runtime", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.14.1", + "solana-sdk 1.14.2", "solana-stake-program", "solana-storage-bigtable", "solana-storage-proto", @@ -5464,7 +5464,7 @@ dependencies = [ [[package]] name = "solana-ledger-tool" -version = "1.14.1" +version = "1.14.2" dependencies = [ "assert_cmd", "bs58", @@ -5486,10 +5486,10 @@ dependencies = [ "solana-core", "solana-entry", "solana-ledger", - "solana-logger 1.14.1", + "solana-logger 1.14.2", "solana-measure", "solana-runtime", - "solana-sdk 1.14.1", + "solana-sdk 1.14.2", "solana-stake-program", "solana-storage-bigtable", "solana-transaction-status", @@ -5501,7 +5501,7 @@ dependencies = [ [[package]] name = "solana-local-cluster" -version = "1.14.1" +version = "1.14.2" dependencies = [ "assert_matches", "crossbeam-channel", @@ -5519,9 +5519,9 @@ dependencies = [ "solana-entry", "solana-gossip", "solana-ledger", - "solana-logger 1.14.1", + "solana-logger 1.14.2", "solana-runtime", - "solana-sdk 1.14.1", + "solana-sdk 1.14.2", "solana-stake-program", "solana-streamer", "solana-vote-program", @@ -5530,13 +5530,13 @@ dependencies = [ [[package]] name = "solana-log-analyzer" -version = "1.14.1" +version = "1.14.2" dependencies = [ "byte-unit", "clap 3.1.8", "serde", "serde_json", - "solana-logger 1.14.1", + "solana-logger 1.14.2", "solana-version", ] @@ -5553,7 +5553,7 @@ dependencies = [ [[package]] name = "solana-logger" -version = "1.14.1" +version = "1.14.2" dependencies = [ "env_logger", "lazy_static", @@ -5562,38 +5562,38 @@ dependencies = [ [[package]] name = "solana-measure" -version = "1.14.1" +version = "1.14.2" dependencies = [ "log", - "solana-sdk 1.14.1", + "solana-sdk 1.14.2", ] [[package]] name = "solana-merkle-root-bench" -version = "1.14.1" +version = "1.14.2" dependencies = [ "clap 2.33.3", "log", - "solana-logger 1.14.1", + "solana-logger 1.14.2", "solana-measure", "solana-runtime", - "solana-sdk 1.14.1", + "solana-sdk 1.14.2", "solana-version", ] [[package]] name = "solana-merkle-tree" -version = "1.14.1" +version = "1.14.2" dependencies = [ "fast-math", "hex", "matches", - "solana-program 1.14.1", + "solana-program 1.14.2", ] [[package]] name = "solana-metrics" -version = "1.14.1" +version = "1.14.2" dependencies = [ "crossbeam-channel", "env_logger", @@ -5603,23 +5603,23 @@ dependencies = [ "rand 0.7.3", "reqwest", "serial_test", - "solana-sdk 1.14.1", + "solana-sdk 1.14.2", ] [[package]] name = "solana-net-shaper" -version = "1.14.1" +version = "1.14.2" dependencies = [ "clap 3.1.8", "rand 0.7.3", "serde", "serde_json", - "solana-logger 1.14.1", + "solana-logger 1.14.2", ] [[package]] name = "solana-net-utils" -version = "1.14.1" +version = "1.14.2" dependencies = [ "bincode", "clap 3.1.8", @@ -5630,8 +5630,8 @@ dependencies = [ "serde", "serde_derive", "socket2", - "solana-logger 1.14.1", - "solana-sdk 1.14.1", + "solana-logger 1.14.2", + "solana-sdk 1.14.2", "solana-version", "tokio", "url 2.2.2", @@ -5639,7 +5639,7 @@ dependencies = [ [[package]] name = "solana-notifier" -version = "1.14.1" +version = "1.14.2" dependencies = [ "log", "reqwest", @@ -5648,7 +5648,7 @@ dependencies = [ [[package]] name = "solana-perf" -version = "1.14.1" +version = "1.14.2" dependencies = [ "ahash", "bincode", @@ -5666,16 +5666,16 @@ dependencies = [ "rand 0.7.3", "rayon", "serde", - "solana-logger 1.14.1", + "solana-logger 1.14.2", "solana-metrics", "solana-rayon-threadlimit", - "solana-sdk 1.14.1", + "solana-sdk 1.14.2", "solana-vote-program", ] [[package]] name = "solana-poh" -version = "1.14.1" +version = "1.14.2" dependencies = [ "bincode", "core_affinity", @@ -5685,29 +5685,29 @@ dependencies = [ "rand 0.7.3", "solana-entry", "solana-ledger", - "solana-logger 1.14.1", + "solana-logger 1.14.2", "solana-measure", "solana-metrics", "solana-perf", "solana-runtime", - "solana-sdk 1.14.1", + "solana-sdk 1.14.2", "solana-sys-tuner", "thiserror", ] [[package]] name = "solana-poh-bench" -version = "1.14.1" +version = "1.14.2" dependencies = [ "clap 3.1.8", "log", "rand 0.7.3", "rayon", "solana-entry", - "solana-logger 1.14.1", + "solana-logger 1.14.2", "solana-measure", "solana-perf", - "solana-sdk 1.14.1", + "solana-sdk 1.14.2", "solana-version", ] @@ -5755,7 +5755,7 @@ dependencies = [ [[package]] name = "solana-program" -version = "1.14.1" +version = "1.14.2" dependencies = [ "anyhow", "assert_matches", @@ -5793,10 +5793,10 @@ dependencies = [ "serde_json", "sha2 0.10.2", "sha3 0.10.1", - "solana-frozen-abi 1.14.1", - "solana-frozen-abi-macro 1.14.1", - "solana-logger 1.14.1", - "solana-sdk-macro 1.14.1", + "solana-frozen-abi 1.14.2", + "solana-frozen-abi-macro 1.14.2", + "solana-logger 1.14.2", + "solana-sdk-macro 1.14.2", "static_assertions", "thiserror", "tiny-bip39", @@ -5806,7 +5806,7 @@ dependencies = [ [[package]] name = "solana-program-runtime" -version = "1.14.1" +version = "1.14.2" dependencies = [ "base64 0.13.0", "bincode", @@ -5820,18 +5820,18 @@ dependencies = [ "num-traits", "rustc_version 0.4.0", "serde", - "solana-frozen-abi 1.14.1", - "solana-frozen-abi-macro 1.14.1", - "solana-logger 1.14.1", + "solana-frozen-abi 1.14.2", + "solana-frozen-abi-macro 1.14.2", + "solana-logger 1.14.2", "solana-measure", "solana-metrics", - "solana-sdk 1.14.1", + "solana-sdk 1.14.2", "thiserror", ] [[package]] name = "solana-program-test" -version = "1.14.1" +version = "1.14.2" dependencies = [ "assert_matches", "async-trait", @@ -5843,10 +5843,10 @@ dependencies = [ "solana-banks-client", "solana-banks-server", "solana-bpf-loader-program", - "solana-logger 1.14.1", + "solana-logger 1.14.2", "solana-program-runtime", "solana-runtime", - "solana-sdk 1.14.1", + "solana-sdk 1.14.2", "solana-vote-program", "thiserror", "tokio", @@ -5854,7 +5854,7 @@ dependencies = [ [[package]] name = "solana-rayon-threadlimit" -version = "1.14.1" +version = "1.14.2" dependencies = [ "lazy_static", "num_cpus", @@ -5862,7 +5862,7 @@ dependencies = [ [[package]] name = "solana-remote-wallet" -version = "1.14.1" +version = "1.14.2" dependencies = [ "console", "dialoguer", @@ -5873,14 +5873,14 @@ dependencies = [ "parking_lot 0.12.1", "qstring", "semver 1.0.10", - "solana-sdk 1.14.1", + "solana-sdk 1.14.2", "thiserror", "uriparse", ] [[package]] name = "solana-rpc" -version = "1.14.1" +version = "1.14.2" dependencies = [ "base64 0.13.0", "bincode", @@ -5916,7 +5916,7 @@ dependencies = [ "solana-poh", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.14.1", + "solana-sdk 1.14.2", "solana-send-transaction-service", "solana-stake-program", "solana-storage-bigtable", @@ -5935,7 +5935,7 @@ dependencies = [ [[package]] name = "solana-rpc-test" -version = "1.14.1" +version = "1.14.2" dependencies = [ "bincode", "bs58", @@ -5947,9 +5947,9 @@ dependencies = [ "serde_json", "solana-account-decoder", "solana-client", - "solana-logger 1.14.1", + "solana-logger 1.14.2", "solana-rpc", - "solana-sdk 1.14.1", + "solana-sdk 1.14.2", "solana-streamer", "solana-test-validator", "solana-transaction-status", @@ -5958,7 +5958,7 @@ dependencies = [ [[package]] name = "solana-runtime" -version = "1.14.1" +version = "1.14.2" dependencies = [ "arrayref", "assert_matches", @@ -5998,18 +5998,18 @@ dependencies = [ "solana-bucket-map", "solana-compute-budget-program", "solana-config-program", - "solana-frozen-abi 1.14.1", - "solana-frozen-abi-macro 1.14.1", - "solana-logger 1.14.1", + "solana-frozen-abi 1.14.2", + "solana-frozen-abi-macro 1.14.2", + "solana-logger 1.14.2", "solana-measure", "solana-metrics", "solana-program-runtime", "solana-rayon-threadlimit", - "solana-sdk 1.14.1", + "solana-sdk 1.14.2", "solana-stake-program", "solana-vote-program", "solana-zk-token-proof-program", - "solana-zk-token-sdk 1.14.1", + "solana-zk-token-sdk 1.14.2", "strum", "strum_macros", "symlink", @@ -6072,7 +6072,7 @@ dependencies = [ [[package]] name = "solana-sdk" -version = "1.14.1" +version = "1.14.2" dependencies = [ "anyhow", "assert_matches", @@ -6112,11 +6112,11 @@ dependencies = [ "serde_json", "sha2 0.10.2", "sha3 0.10.1", - "solana-frozen-abi 1.14.1", - "solana-frozen-abi-macro 1.14.1", - "solana-logger 1.14.1", - "solana-program 1.14.1", - "solana-sdk-macro 1.14.1", + "solana-frozen-abi 1.14.2", + "solana-frozen-abi-macro 1.14.2", + "solana-logger 1.14.2", + "solana-program 1.14.2", + "solana-sdk-macro 1.14.2", "static_assertions", "thiserror", "tiny-bip39", @@ -6139,7 +6139,7 @@ dependencies = [ [[package]] name = "solana-sdk-macro" -version = "1.14.1" +version = "1.14.2" dependencies = [ "bs58", "proc-macro2 1.0.41", @@ -6150,21 +6150,21 @@ dependencies = [ [[package]] name = "solana-send-transaction-service" -version = "1.14.1" +version = "1.14.2" dependencies = [ "crossbeam-channel", "log", "solana-client", - "solana-logger 1.14.1", + "solana-logger 1.14.2", "solana-measure", "solana-metrics", "solana-runtime", - "solana-sdk 1.14.1", + "solana-sdk 1.14.2", ] [[package]] name = "solana-stake-accounts" -version = "1.14.1" +version = "1.14.2" dependencies = [ "clap 2.33.3", "solana-clap-utils", @@ -6172,13 +6172,13 @@ dependencies = [ "solana-client", "solana-remote-wallet", "solana-runtime", - "solana-sdk 1.14.1", + "solana-sdk 1.14.2", "solana-stake-program", ] [[package]] name = "solana-stake-program" -version = "1.14.1" +version = "1.14.2" dependencies = [ "assert_matches", "bincode", @@ -6190,12 +6190,12 @@ dependencies = [ "serde", "serde_derive", "solana-config-program", - "solana-frozen-abi 1.14.1", - "solana-frozen-abi-macro 1.14.1", - "solana-logger 1.14.1", + "solana-frozen-abi 1.14.2", + "solana-frozen-abi-macro 1.14.2", + "solana-logger 1.14.2", "solana-metrics", "solana-program-runtime", - "solana-sdk 1.14.1", + "solana-sdk 1.14.2", "solana-vote-program", "test-case", "thiserror", @@ -6203,7 +6203,7 @@ dependencies = [ [[package]] name = "solana-storage-bigtable" -version = "1.14.1" +version = "1.14.2" dependencies = [ "backoff", "bincode", @@ -6224,7 +6224,7 @@ dependencies = [ "serde_derive", "smpl_jwt", "solana-metrics", - "solana-sdk 1.14.1", + "solana-sdk 1.14.2", "solana-storage-proto", "solana-transaction-status", "thiserror", @@ -6235,7 +6235,7 @@ dependencies = [ [[package]] name = "solana-storage-proto" -version = "1.14.1" +version = "1.14.2" dependencies = [ "bincode", "bs58", @@ -6244,25 +6244,25 @@ dependencies = [ "protobuf-src", "serde", "solana-account-decoder", - "solana-sdk 1.14.1", + "solana-sdk 1.14.2", "solana-transaction-status", "tonic-build 0.8.0", ] [[package]] name = "solana-store-tool" -version = "1.14.1" +version = "1.14.2" dependencies = [ "clap 2.33.3", "log", - "solana-logger 1.14.1", + "solana-logger 1.14.2", "solana-runtime", "solana-version", ] [[package]] name = "solana-streamer" -version = "1.14.1" +version = "1.14.2" dependencies = [ "crossbeam-channel", "futures-util", @@ -6279,10 +6279,10 @@ dependencies = [ "rand 0.7.3", "rcgen", "rustls 0.20.6", - "solana-logger 1.14.1", + "solana-logger 1.14.2", "solana-metrics", "solana-perf", - "solana-sdk 1.14.1", + "solana-sdk 1.14.2", "thiserror", "tokio", "x509-parser", @@ -6290,13 +6290,13 @@ dependencies = [ [[package]] name = "solana-sys-tuner" -version = "1.14.1" +version = "1.14.2" dependencies = [ "clap 2.33.3", "libc", "log", "nix", - "solana-logger 1.14.1", + "solana-logger 1.14.2", "solana-version", "sysctl", "unix_socket2", @@ -6305,7 +6305,7 @@ dependencies = [ [[package]] name = "solana-test-validator" -version = "1.14.1" +version = "1.14.2" dependencies = [ "base64 0.13.0", "log", @@ -6316,20 +6316,20 @@ dependencies = [ "solana-core", "solana-gossip", "solana-ledger", - "solana-logger 1.14.1", + "solana-logger 1.14.2", "solana-net-utils", "solana-program-runtime", "solana-program-test", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.1", + "solana-sdk 1.14.2", "solana-streamer", "tokio", ] [[package]] name = "solana-tokens" -version = "1.14.1" +version = "1.14.2" dependencies = [ "bincode", "chrono", @@ -6345,9 +6345,9 @@ dependencies = [ "solana-clap-utils", "solana-cli-config", "solana-client", - "solana-logger 1.14.1", + "solana-logger 1.14.2", "solana-remote-wallet", - "solana-sdk 1.14.1", + "solana-sdk 1.14.2", "solana-streamer", "solana-test-validator", "solana-transaction-status", @@ -6360,7 +6360,7 @@ dependencies = [ [[package]] name = "solana-transaction-dos" -version = "1.14.1" +version = "1.14.2" dependencies = [ "bincode", "clap 2.33.3", @@ -6374,11 +6374,11 @@ dependencies = [ "solana-faucet", "solana-gossip", "solana-local-cluster", - "solana-logger 1.14.1", + "solana-logger 1.14.2", "solana-measure", "solana-net-utils", "solana-runtime", - "solana-sdk 1.14.1", + "solana-sdk 1.14.2", "solana-streamer", "solana-transaction-status", "solana-version", @@ -6386,7 +6386,7 @@ dependencies = [ [[package]] name = "solana-transaction-status" -version = "1.14.1" +version = "1.14.2" dependencies = [ "Inflector", "base64 0.13.0", @@ -6401,7 +6401,7 @@ dependencies = [ "solana-account-decoder", "solana-measure", "solana-metrics", - "solana-sdk 1.14.1", + "solana-sdk 1.14.2", "solana-vote-program", "spl-associated-token-account", "spl-memo", @@ -6412,7 +6412,7 @@ dependencies = [ [[package]] name = "solana-upload-perf" -version = "1.14.1" +version = "1.14.2" dependencies = [ "serde_json", "solana-metrics", @@ -6420,7 +6420,7 @@ dependencies = [ [[package]] name = "solana-validator" -version = "1.14.1" +version = "1.14.2" dependencies = [ "chrono", "clap 2.33.3", @@ -6451,14 +6451,14 @@ dependencies = [ "solana-genesis-utils", "solana-gossip", "solana-ledger", - "solana-logger 1.14.1", + "solana-logger 1.14.2", "solana-metrics", "solana-net-utils", "solana-perf", "solana-poh", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.1", + "solana-sdk 1.14.2", "solana-send-transaction-service", "solana-storage-bigtable", "solana-streamer", @@ -6471,21 +6471,21 @@ dependencies = [ [[package]] name = "solana-version" -version = "1.14.1" +version = "1.14.2" dependencies = [ "log", "rustc_version 0.4.0", "semver 1.0.10", "serde", "serde_derive", - "solana-frozen-abi 1.14.1", - "solana-frozen-abi-macro 1.14.1", - "solana-sdk 1.14.1", + "solana-frozen-abi 1.14.2", + "solana-frozen-abi-macro 1.14.2", + "solana-sdk 1.14.2", ] [[package]] name = "solana-vote-program" -version = "1.14.1" +version = "1.14.2" dependencies = [ "bincode", "itertools", @@ -6496,18 +6496,18 @@ dependencies = [ "rustc_version 0.4.0", "serde", "serde_derive", - "solana-frozen-abi 1.14.1", - "solana-frozen-abi-macro 1.14.1", - "solana-logger 1.14.1", + "solana-frozen-abi 1.14.2", + "solana-frozen-abi-macro 1.14.2", + "solana-logger 1.14.2", "solana-metrics", "solana-program-runtime", - "solana-sdk 1.14.1", + "solana-sdk 1.14.2", "thiserror", ] [[package]] name = "solana-watchtower" -version = "1.14.1" +version = "1.14.2" dependencies = [ "clap 2.33.3", "humantime", @@ -6516,24 +6516,24 @@ dependencies = [ "solana-cli-config", "solana-cli-output", "solana-client", - "solana-logger 1.14.1", + "solana-logger 1.14.2", "solana-metrics", "solana-notifier", - "solana-sdk 1.14.1", + "solana-sdk 1.14.2", "solana-version", ] [[package]] name = "solana-zk-token-proof-program" -version = "1.14.1" +version = "1.14.2" dependencies = [ "bytemuck", "getrandom 0.1.16", "num-derive", "num-traits", "solana-program-runtime", - "solana-sdk 1.14.1", - "solana-zk-token-sdk 1.14.1", + "solana-sdk 1.14.2", + "solana-zk-token-sdk 1.14.2", ] [[package]] @@ -6568,7 +6568,7 @@ dependencies = [ [[package]] name = "solana-zk-token-sdk" -version = "1.14.1" +version = "1.14.2" dependencies = [ "aes-gcm-siv", "arrayref", @@ -6588,8 +6588,8 @@ dependencies = [ "serde", "serde_json", "sha3 0.9.1", - "solana-program 1.14.1", - "solana-sdk 1.14.1", + "solana-program 1.14.2", + "solana-sdk 1.14.2", "subtle", "thiserror", "zeroize", diff --git a/account-decoder/Cargo.toml b/account-decoder/Cargo.toml index bfb78e4ffe6b55..276fbd2cbbaf16 100644 --- a/account-decoder/Cargo.toml +++ b/account-decoder/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-account-decoder" -version = "1.14.1" +version = "1.14.2" description = "Solana account decoder" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -19,9 +19,9 @@ lazy_static = "1.4.0" serde = "1.0.138" serde_derive = "1.0.103" serde_json = "1.0.81" -solana-config-program = { path = "../programs/config", version = "=1.14.1" } -solana-sdk = { path = "../sdk", version = "=1.14.1" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.1" } +solana-config-program = { path = "../programs/config", version = "=1.14.2" } +solana-sdk = { path = "../sdk", version = "=1.14.2" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.2" } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } spl-token-2022 = { version = "=0.4.2", features = ["no-entrypoint"] } thiserror = "1.0" diff --git a/accounts-bench/Cargo.toml b/accounts-bench/Cargo.toml index 6c7a823324a9a4..83a9996822eff5 100644 --- a/accounts-bench/Cargo.toml +++ b/accounts-bench/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-accounts-bench" -version = "1.14.1" +version = "1.14.2" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -12,11 +12,11 @@ publish = false clap = "2.33.1" log = "0.4.17" rayon = "1.5.3" -solana-logger = { path = "../logger", version = "=1.14.1" } -solana-measure = { path = "../measure", version = "=1.14.1" } -solana-runtime = { path = "../runtime", version = "=1.14.1" } -solana-sdk = { path = "../sdk", version = "=1.14.1" } -solana-version = { path = "../version", version = "=1.14.1" } +solana-logger = { path = "../logger", version = "=1.14.2" } +solana-measure = { path = "../measure", version = "=1.14.2" } +solana-runtime = { path = "../runtime", version = "=1.14.2" } +solana-sdk = { path = "../sdk", version = "=1.14.2" } +solana-version = { path = "../version", version = "=1.14.2" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/accounts-cluster-bench/Cargo.toml b/accounts-cluster-bench/Cargo.toml index cad40c5e2a019b..b455ca05c82f84 100644 --- a/accounts-cluster-bench/Cargo.toml +++ b/accounts-cluster-bench/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-accounts-cluster-bench" -version = "1.14.1" +version = "1.14.2" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -13,25 +13,25 @@ clap = "2.33.1" log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.1" } -solana-clap-utils = { path = "../clap-utils", version = "=1.14.1" } -solana-client = { path = "../client", version = "=1.14.1" } -solana-faucet = { path = "../faucet", version = "=1.14.1" } -solana-gossip = { path = "../gossip", version = "=1.14.1" } -solana-logger = { path = "../logger", version = "=1.14.1" } -solana-measure = { path = "../measure", version = "=1.14.1" } -solana-net-utils = { path = "../net-utils", version = "=1.14.1" } -solana-runtime = { path = "../runtime", version = "=1.14.1" } -solana-sdk = { path = "../sdk", version = "=1.14.1" } -solana-streamer = { path = "../streamer", version = "=1.14.1" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.1" } -solana-version = { path = "../version", version = "=1.14.1" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.2" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.2" } +solana-client = { path = "../client", version = "=1.14.2" } +solana-faucet = { path = "../faucet", version = "=1.14.2" } +solana-gossip = { path = "../gossip", version = "=1.14.2" } +solana-logger = { path = "../logger", version = "=1.14.2" } +solana-measure = { path = "../measure", version = "=1.14.2" } +solana-net-utils = { path = "../net-utils", version = "=1.14.2" } +solana-runtime = { path = "../runtime", version = "=1.14.2" } +solana-sdk = { path = "../sdk", version = "=1.14.2" } +solana-streamer = { path = "../streamer", version = "=1.14.2" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.2" } +solana-version = { path = "../version", version = "=1.14.2" } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } [dev-dependencies] -solana-core = { path = "../core", version = "=1.14.1" } -solana-local-cluster = { path = "../local-cluster", version = "=1.14.1" } -solana-test-validator = { path = "../test-validator", version = "=1.14.1" } +solana-core = { path = "../core", version = "=1.14.2" } +solana-local-cluster = { path = "../local-cluster", version = "=1.14.2" } +solana-test-validator = { path = "../test-validator", version = "=1.14.2" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/banking-bench/Cargo.toml b/banking-bench/Cargo.toml index 2ec862d83ad240..1305bccb264f81 100644 --- a/banking-bench/Cargo.toml +++ b/banking-bench/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-banking-bench" -version = "1.14.1" +version = "1.14.2" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,18 +14,18 @@ crossbeam-channel = "0.5" log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" -solana-client = { path = "../client", version = "=1.14.1" } -solana-core = { path = "../core", version = "=1.14.1" } -solana-gossip = { path = "../gossip", version = "=1.14.1" } -solana-ledger = { path = "../ledger", version = "=1.14.1" } -solana-logger = { path = "../logger", version = "=1.14.1" } -solana-measure = { path = "../measure", version = "=1.14.1" } -solana-perf = { path = "../perf", version = "=1.14.1" } -solana-poh = { path = "../poh", version = "=1.14.1" } -solana-runtime = { path = "../runtime", version = "=1.14.1" } -solana-sdk = { path = "../sdk", version = "=1.14.1" } -solana-streamer = { path = "../streamer", version = "=1.14.1" } -solana-version = { path = "../version", version = "=1.14.1" } +solana-client = { path = "../client", version = "=1.14.2" } +solana-core = { path = "../core", version = "=1.14.2" } +solana-gossip = { path = "../gossip", version = "=1.14.2" } +solana-ledger = { path = "../ledger", version = "=1.14.2" } +solana-logger = { path = "../logger", version = "=1.14.2" } +solana-measure = { path = "../measure", version = "=1.14.2" } +solana-perf = { path = "../perf", version = "=1.14.2" } +solana-poh = { path = "../poh", version = "=1.14.2" } +solana-runtime = { path = "../runtime", version = "=1.14.2" } +solana-sdk = { path = "../sdk", version = "=1.14.2" } +solana-streamer = { path = "../streamer", version = "=1.14.2" } +solana-version = { path = "../version", version = "=1.14.2" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/banks-client/Cargo.toml b/banks-client/Cargo.toml index c6f923057e1276..b9ea119601419e 100644 --- a/banks-client/Cargo.toml +++ b/banks-client/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-banks-client" -version = "1.14.1" +version = "1.14.2" description = "Solana banks client" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,17 +12,17 @@ edition = "2021" [dependencies] borsh = "0.9.3" futures = "0.3" -solana-banks-interface = { path = "../banks-interface", version = "=1.14.1" } -solana-program = { path = "../sdk/program", version = "=1.14.1" } -solana-sdk = { path = "../sdk", version = "=1.14.1" } +solana-banks-interface = { path = "../banks-interface", version = "=1.14.2" } +solana-program = { path = "../sdk/program", version = "=1.14.2" } +solana-sdk = { path = "../sdk", version = "=1.14.2" } tarpc = { version = "0.29.0", features = ["full"] } thiserror = "1.0" tokio = { version = "~1.14.1", features = ["full"] } tokio-serde = { version = "0.8", features = ["bincode"] } [dev-dependencies] -solana-banks-server = { path = "../banks-server", version = "=1.14.1" } -solana-runtime = { path = "../runtime", version = "=1.14.1" } +solana-banks-server = { path = "../banks-server", version = "=1.14.2" } +solana-runtime = { path = "../runtime", version = "=1.14.2" } [lib] crate-type = ["lib"] diff --git a/banks-interface/Cargo.toml b/banks-interface/Cargo.toml index 278efd4c0c9da8..9c9bdf0d5ed231 100644 --- a/banks-interface/Cargo.toml +++ b/banks-interface/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-banks-interface" -version = "1.14.1" +version = "1.14.2" description = "Solana banks RPC interface" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -11,7 +11,7 @@ edition = "2021" [dependencies] serde = { version = "1.0.138", features = ["derive"] } -solana-sdk = { path = "../sdk", version = "=1.14.1" } +solana-sdk = { path = "../sdk", version = "=1.14.2" } tarpc = { version = "0.29.0", features = ["full"] } [lib] diff --git a/banks-server/Cargo.toml b/banks-server/Cargo.toml index 27af15f6754b14..69d6e1eaadc0b8 100644 --- a/banks-server/Cargo.toml +++ b/banks-server/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-banks-server" -version = "1.14.1" +version = "1.14.2" description = "Solana banks server" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,11 +13,11 @@ edition = "2021" bincode = "1.3.3" crossbeam-channel = "0.5" futures = "0.3" -solana-banks-interface = { path = "../banks-interface", version = "=1.14.1" } -solana-client = { path = "../client", version = "=1.14.1" } -solana-runtime = { path = "../runtime", version = "=1.14.1" } -solana-sdk = { path = "../sdk", version = "=1.14.1" } -solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.1" } +solana-banks-interface = { path = "../banks-interface", version = "=1.14.2" } +solana-client = { path = "../client", version = "=1.14.2" } +solana-runtime = { path = "../runtime", version = "=1.14.2" } +solana-sdk = { path = "../sdk", version = "=1.14.2" } +solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.2" } tarpc = { version = "0.29.0", features = ["full"] } tokio = { version = "1", features = ["full"] } tokio-serde = { version = "0.8", features = ["bincode"] } diff --git a/bench-streamer/Cargo.toml b/bench-streamer/Cargo.toml index 4ea64fbecdd4a5..866693c802d998 100644 --- a/bench-streamer/Cargo.toml +++ b/bench-streamer/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-bench-streamer" -version = "1.14.1" +version = "1.14.2" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -11,9 +11,9 @@ publish = false [dependencies] clap = { version = "3.1.5", features = ["cargo"] } crossbeam-channel = "0.5" -solana-net-utils = { path = "../net-utils", version = "=1.14.1" } -solana-streamer = { path = "../streamer", version = "=1.14.1" } -solana-version = { path = "../version", version = "=1.14.1" } +solana-net-utils = { path = "../net-utils", version = "=1.14.2" } +solana-streamer = { path = "../streamer", version = "=1.14.2" } +solana-version = { path = "../version", version = "=1.14.2" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/bench-tps/Cargo.toml b/bench-tps/Cargo.toml index 7b30e031f8a74c..e35e1680d4e3fa 100644 --- a/bench-tps/Cargo.toml +++ b/bench-tps/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-bench-tps" -version = "1.14.1" +version = "1.14.2" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -15,28 +15,28 @@ log = "0.4.17" rayon = "1.5.3" serde_json = "1.0.81" serde_yaml = "0.8.26" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.1" } -solana-cli-config = { path = "../cli-config", version = "=1.14.1" } -solana-client = { path = "../client", version = "=1.14.1" } -solana-core = { path = "../core", version = "=1.14.1" } -solana-faucet = { path = "../faucet", version = "=1.14.1" } -solana-genesis = { path = "../genesis", version = "=1.14.1" } -solana-gossip = { path = "../gossip", version = "=1.14.1" } -solana-logger = { path = "../logger", version = "=1.14.1" } -solana-measure = { path = "../measure", version = "=1.14.1" } -solana-metrics = { path = "../metrics", version = "=1.14.1" } -solana-net-utils = { path = "../net-utils", version = "=1.14.1" } -solana-rpc = { path = "../rpc", version = "=1.14.1" } -solana-runtime = { path = "../runtime", version = "=1.14.1" } -solana-sdk = { path = "../sdk", version = "=1.14.1" } -solana-streamer = { path = "../streamer", version = "=1.14.1" } -solana-version = { path = "../version", version = "=1.14.1" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.2" } +solana-cli-config = { path = "../cli-config", version = "=1.14.2" } +solana-client = { path = "../client", version = "=1.14.2" } +solana-core = { path = "../core", version = "=1.14.2" } +solana-faucet = { path = "../faucet", version = "=1.14.2" } +solana-genesis = { path = "../genesis", version = "=1.14.2" } +solana-gossip = { path = "../gossip", version = "=1.14.2" } +solana-logger = { path = "../logger", version = "=1.14.2" } +solana-measure = { path = "../measure", version = "=1.14.2" } +solana-metrics = { path = "../metrics", version = "=1.14.2" } +solana-net-utils = { path = "../net-utils", version = "=1.14.2" } +solana-rpc = { path = "../rpc", version = "=1.14.2" } +solana-runtime = { path = "../runtime", version = "=1.14.2" } +solana-sdk = { path = "../sdk", version = "=1.14.2" } +solana-streamer = { path = "../streamer", version = "=1.14.2" } +solana-version = { path = "../version", version = "=1.14.2" } thiserror = "1.0" [dev-dependencies] serial_test = "0.8.0" -solana-local-cluster = { path = "../local-cluster", version = "=1.14.1" } -solana-test-validator = { path = "../test-validator", version = "=1.14.1" } +solana-local-cluster = { path = "../local-cluster", version = "=1.14.2" } +solana-test-validator = { path = "../test-validator", version = "=1.14.2" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/bloom/Cargo.toml b/bloom/Cargo.toml index bd09fdcd59b070..1c78315fb027fb 100644 --- a/bloom/Cargo.toml +++ b/bloom/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bloom" -version = "1.14.1" +version = "1.14.2" description = "Solana bloom filter" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -17,9 +17,9 @@ rand = "0.7.0" rayon = "1.5.3" serde = { version = "1.0.138", features = ["rc"] } serde_derive = "1.0.103" -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.1" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.1" } -solana-sdk = { path = "../sdk", version = "=1.14.1" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.2" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.2" } +solana-sdk = { path = "../sdk", version = "=1.14.2" } [lib] crate-type = ["lib"] diff --git a/bucket_map/Cargo.toml b/bucket_map/Cargo.toml index 55ce2c2a7e368c..8d04714bbffa08 100644 --- a/bucket_map/Cargo.toml +++ b/bucket_map/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bucket-map" -version = "1.14.1" +version = "1.14.2" description = "solana-bucket-map" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-bucket-map" @@ -15,14 +15,14 @@ log = { version = "0.4.17" } memmap2 = "0.5.3" modular-bitfield = "0.11.2" rand = "0.7.0" -solana-measure = { path = "../measure", version = "=1.14.1" } -solana-sdk = { path = "../sdk", version = "=1.14.1" } +solana-measure = { path = "../measure", version = "=1.14.2" } +solana-sdk = { path = "../sdk", version = "=1.14.2" } tempfile = "3.3.0" [dev-dependencies] fs_extra = "1.2.0" rayon = "1.5.3" -solana-logger = { path = "../logger", version = "=1.14.1" } +solana-logger = { path = "../logger", version = "=1.14.2" } [lib] crate-type = ["lib"] diff --git a/clap-utils/Cargo.toml b/clap-utils/Cargo.toml index 92ed800765ddf6..e5397a1e8a8066 100644 --- a/clap-utils/Cargo.toml +++ b/clap-utils/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-clap-utils" -version = "1.14.1" +version = "1.14.2" description = "Solana utilities for the clap" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,9 +13,9 @@ edition = "2021" chrono = "0.4" clap = "2.33.0" rpassword = "6.0" -solana-perf = { path = "../perf", version = "=1.14.1" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.1", default-features = false } -solana-sdk = { path = "../sdk", version = "=1.14.1" } +solana-perf = { path = "../perf", version = "=1.14.2" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.2", default-features = false } +solana-sdk = { path = "../sdk", version = "=1.14.2" } thiserror = "1.0.31" tiny-bip39 = "0.8.2" uriparse = "0.6.4" diff --git a/clap-v3-utils/Cargo.toml b/clap-v3-utils/Cargo.toml index c04f7bb7c3a76a..5b120e6622de65 100644 --- a/clap-v3-utils/Cargo.toml +++ b/clap-v3-utils/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-clap-v3-utils" -version = "1.14.1" +version = "1.14.2" description = "Solana utilities for the clap v3" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,9 +13,9 @@ edition = "2021" chrono = "0.4" clap = { version = "3.1.5", features = ["cargo"] } rpassword = "6.0" -solana-perf = { path = "../perf", version = "=1.14.1" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.1", default-features = false } -solana-sdk = { path = "../sdk", version = "=1.14.1" } +solana-perf = { path = "../perf", version = "=1.14.2" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.2", default-features = false } +solana-sdk = { path = "../sdk", version = "=1.14.2" } thiserror = "1.0.31" tiny-bip39 = "0.8.2" uriparse = "0.6.4" diff --git a/cli-config/Cargo.toml b/cli-config/Cargo.toml index ededb12fb54a8f..ec5455800e20a2 100644 --- a/cli-config/Cargo.toml +++ b/cli-config/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-cli-config" description = "Blockchain, Rebuilt for Scale" -version = "1.14.1" +version = "1.14.2" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -15,8 +15,8 @@ lazy_static = "1.4.0" serde = "1.0.138" serde_derive = "1.0.103" serde_yaml = "0.8.26" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.1" } -solana-sdk = { path = "../sdk", version = "=1.14.1" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.2" } +solana-sdk = { path = "../sdk", version = "=1.14.2" } url = "2.2.2" [dev-dependencies] diff --git a/cli-output/Cargo.toml b/cli-output/Cargo.toml index 5801f9354dafcf..6eb4afa6acc570 100644 --- a/cli-output/Cargo.toml +++ b/cli-output/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-cli-output" description = "Blockchain, Rebuilt for Scale" -version = "1.14.1" +version = "1.14.2" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -21,13 +21,13 @@ pretty-hex = "0.3.0" semver = "1.0.10" serde = "1.0.138" serde_json = "1.0.81" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.1" } -solana-clap-utils = { path = "../clap-utils", version = "=1.14.1" } -solana-cli-config = { path = "../cli-config", version = "=1.14.1" } -solana-client = { path = "../client", version = "=1.14.1" } -solana-sdk = { path = "../sdk", version = "=1.14.1" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.1" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.1" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.2" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.2" } +solana-cli-config = { path = "../cli-config", version = "=1.14.2" } +solana-client = { path = "../client", version = "=1.14.2" } +solana-sdk = { path = "../sdk", version = "=1.14.2" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.2" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.2" } spl-memo = { version = "=3.0.1", features = ["no-entrypoint"] } [dev-dependencies] diff --git a/cli/Cargo.toml b/cli/Cargo.toml index 43fb12e7e967eb..c3004e07365f51 100644 --- a/cli/Cargo.toml +++ b/cli/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-cli" description = "Blockchain, Rebuilt for Scale" -version = "1.14.1" +version = "1.14.2" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -27,29 +27,29 @@ semver = "1.0.10" serde = "1.0.138" serde_derive = "1.0.103" serde_json = "1.0.81" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.1" } -solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.1" } -solana-clap-utils = { path = "../clap-utils", version = "=1.14.1" } -solana-cli-config = { path = "../cli-config", version = "=1.14.1" } -solana-cli-output = { path = "../cli-output", version = "=1.14.1" } -solana-client = { path = "../client", version = "=1.14.1" } -solana-config-program = { path = "../programs/config", version = "=1.14.1" } -solana-faucet = { path = "../faucet", version = "=1.14.1" } -solana-logger = { path = "../logger", version = "=1.14.1" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.1" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.1" } -solana-sdk = { path = "../sdk", version = "=1.14.1" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.1" } -solana-version = { path = "../version", version = "=1.14.1" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.1" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.2" } +solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.2" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.2" } +solana-cli-config = { path = "../cli-config", version = "=1.14.2" } +solana-cli-output = { path = "../cli-output", version = "=1.14.2" } +solana-client = { path = "../client", version = "=1.14.2" } +solana-config-program = { path = "../programs/config", version = "=1.14.2" } +solana-faucet = { path = "../faucet", version = "=1.14.2" } +solana-logger = { path = "../logger", version = "=1.14.2" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.2" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.2" } +solana-sdk = { path = "../sdk", version = "=1.14.2" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.2" } +solana-version = { path = "../version", version = "=1.14.2" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.2" } solana_rbpf = "=0.2.31" spl-memo = { version = "=3.0.1", features = ["no-entrypoint"] } thiserror = "1.0.31" tiny-bip39 = "0.8.2" [dev-dependencies] -solana-streamer = { path = "../streamer", version = "=1.14.1" } -solana-test-validator = { path = "../test-validator", version = "=1.14.1" } +solana-streamer = { path = "../streamer", version = "=1.14.2" } +solana-test-validator = { path = "../test-validator", version = "=1.14.2" } tempfile = "3.3.0" [[bin]] diff --git a/client-test/Cargo.toml b/client-test/Cargo.toml index a6d7813b67ad7d..9797b22cd0333a 100644 --- a/client-test/Cargo.toml +++ b/client-test/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-client-test" -version = "1.14.1" +version = "1.14.2" description = "Solana RPC Test" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,25 +14,25 @@ publish = false futures-util = "0.3.21" serde_json = "1.0.81" serial_test = "0.8.0" -solana-client = { path = "../client", version = "=1.14.1" } -solana-ledger = { path = "../ledger", version = "=1.14.1" } -solana-measure = { path = "../measure", version = "=1.14.1" } -solana-merkle-tree = { path = "../merkle-tree", version = "=1.14.1" } -solana-metrics = { path = "../metrics", version = "=1.14.1" } -solana-perf = { path = "../perf", version = "=1.14.1" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.1" } -solana-rpc = { path = "../rpc", version = "=1.14.1" } -solana-runtime = { path = "../runtime", version = "=1.14.1" } -solana-sdk = { path = "../sdk", version = "=1.14.1" } -solana-streamer = { path = "../streamer", version = "=1.14.1" } -solana-test-validator = { path = "../test-validator", version = "=1.14.1" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.1" } -solana-version = { path = "../version", version = "=1.14.1" } +solana-client = { path = "../client", version = "=1.14.2" } +solana-ledger = { path = "../ledger", version = "=1.14.2" } +solana-measure = { path = "../measure", version = "=1.14.2" } +solana-merkle-tree = { path = "../merkle-tree", version = "=1.14.2" } +solana-metrics = { path = "../metrics", version = "=1.14.2" } +solana-perf = { path = "../perf", version = "=1.14.2" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.2" } +solana-rpc = { path = "../rpc", version = "=1.14.2" } +solana-runtime = { path = "../runtime", version = "=1.14.2" } +solana-sdk = { path = "../sdk", version = "=1.14.2" } +solana-streamer = { path = "../streamer", version = "=1.14.2" } +solana-test-validator = { path = "../test-validator", version = "=1.14.2" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.2" } +solana-version = { path = "../version", version = "=1.14.2" } systemstat = "0.1.11" tokio = { version = "~1.14.1", features = ["full"] } [dev-dependencies] -solana-logger = { path = "../logger", version = "=1.14.1" } +solana-logger = { path = "../logger", version = "=1.14.2" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/client/Cargo.toml b/client/Cargo.toml index 1a49ba450e1f57..91308d16462125 100644 --- a/client/Cargo.toml +++ b/client/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-client" -version = "1.14.1" +version = "1.14.2" description = "Solana Client" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -38,17 +38,17 @@ semver = "1.0.10" serde = "1.0.138" serde_derive = "1.0.103" serde_json = "1.0.81" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.1" } -solana-clap-utils = { path = "../clap-utils", version = "=1.14.1" } -solana-faucet = { path = "../faucet", version = "=1.14.1" } -solana-measure = { path = "../measure", version = "=1.14.1" } -solana-metrics = { path = "../metrics", version = "=1.14.1" } -solana-net-utils = { path = "../net-utils", version = "=1.14.1" } -solana-sdk = { path = "../sdk", version = "=1.14.1" } -solana-streamer = { path = "../streamer", version = "=1.14.1" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.1" } -solana-version = { path = "../version", version = "=1.14.1" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.1" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.2" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.2" } +solana-faucet = { path = "../faucet", version = "=1.14.2" } +solana-measure = { path = "../measure", version = "=1.14.2" } +solana-metrics = { path = "../metrics", version = "=1.14.2" } +solana-net-utils = { path = "../net-utils", version = "=1.14.2" } +solana-sdk = { path = "../sdk", version = "=1.14.2" } +solana-streamer = { path = "../streamer", version = "=1.14.2" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.2" } +solana-version = { path = "../version", version = "=1.14.2" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.2" } spl-token-2022 = { version = "=0.4.2", features = ["no-entrypoint"] } thiserror = "1.0" tokio = { version = "1", features = ["full"] } @@ -61,8 +61,8 @@ url = "2.2.2" anyhow = "1.0.58" assert_matches = "1.5.0" jsonrpc-http-server = "18.0.0" -solana-logger = { path = "../logger", version = "=1.14.1" } -solana-perf = { path = "../perf", version = "=1.14.1" } +solana-logger = { path = "../logger", version = "=1.14.2" } +solana-perf = { path = "../perf", version = "=1.14.2" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/core/Cargo.toml b/core/Cargo.toml index 83193b6bb326ee..0cb290060f79f1 100644 --- a/core/Cargo.toml +++ b/core/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "solana-core" description = "Blockchain, Rebuilt for Scale" -version = "1.14.1" +version = "1.14.2" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-core" readme = "../README.md" @@ -35,30 +35,30 @@ rand_chacha = "0.2.2" rayon = "1.5.3" serde = "1.0.138" serde_derive = "1.0.103" -solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.1" } -solana-bloom = { path = "../bloom", version = "=1.14.1" } -solana-client = { path = "../client", version = "=1.14.1" } -solana-entry = { path = "../entry", version = "=1.14.1" } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.1" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.1" } -solana-geyser-plugin-manager = { path = "../geyser-plugin-manager", version = "=1.14.1" } -solana-gossip = { path = "../gossip", version = "=1.14.1" } -solana-ledger = { path = "../ledger", version = "=1.14.1" } -solana-measure = { path = "../measure", version = "=1.14.1" } -solana-metrics = { path = "../metrics", version = "=1.14.1" } -solana-net-utils = { path = "../net-utils", version = "=1.14.1" } -solana-perf = { path = "../perf", version = "=1.14.1" } -solana-poh = { path = "../poh", version = "=1.14.1" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.1" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.1" } -solana-rpc = { path = "../rpc", version = "=1.14.1" } -solana-runtime = { path = "../runtime", version = "=1.14.1" } -solana-sdk = { path = "../sdk", version = "=1.14.1" } -solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.1" } -solana-streamer = { path = "../streamer", version = "=1.14.1" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.1" } -solana-version = { path = "../version", version = "=1.14.1" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.1" } +solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.2" } +solana-bloom = { path = "../bloom", version = "=1.14.2" } +solana-client = { path = "../client", version = "=1.14.2" } +solana-entry = { path = "../entry", version = "=1.14.2" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.2" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.2" } +solana-geyser-plugin-manager = { path = "../geyser-plugin-manager", version = "=1.14.2" } +solana-gossip = { path = "../gossip", version = "=1.14.2" } +solana-ledger = { path = "../ledger", version = "=1.14.2" } +solana-measure = { path = "../measure", version = "=1.14.2" } +solana-metrics = { path = "../metrics", version = "=1.14.2" } +solana-net-utils = { path = "../net-utils", version = "=1.14.2" } +solana-perf = { path = "../perf", version = "=1.14.2" } +solana-poh = { path = "../poh", version = "=1.14.2" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.2" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.2" } +solana-rpc = { path = "../rpc", version = "=1.14.2" } +solana-runtime = { path = "../runtime", version = "=1.14.2" } +solana-sdk = { path = "../sdk", version = "=1.14.2" } +solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.2" } +solana-streamer = { path = "../streamer", version = "=1.14.2" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.2" } +solana-version = { path = "../version", version = "=1.14.2" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.2" } sys-info = "0.9.1" tempfile = "3.3.0" thiserror = "1.0" @@ -70,9 +70,9 @@ matches = "0.1.9" raptorq = "1.7.0" serde_json = "1.0.81" serial_test = "0.8.0" -solana-logger = { path = "../logger", version = "=1.14.1" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.1" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.1" } +solana-logger = { path = "../logger", version = "=1.14.2" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.2" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.2" } static_assertions = "1.1.0" systemstat = "0.1.11" test-case = "2.1.0" diff --git a/docs/src/developing/clients/jsonrpc-api.md b/docs/src/developing/clients/jsonrpc-api.md index 78c3a9af6e4c54..311a2b1156eec0 100644 --- a/docs/src/developing/clients/jsonrpc-api.md +++ b/docs/src/developing/clients/jsonrpc-api.md @@ -214,7 +214,7 @@ JSON parsing for the following native and SPL programs: | Program | Account State | Instructions | | --- | --- | --- | -| Address Lookup | v1.14.1 | | +| Address Lookup | v1.14.2 | | | BPF Loader | n/a | stable | | BPF Upgradeable Loader | stable | stable | | Config | stable | | @@ -1948,7 +1948,7 @@ Returns all accounts owned by the provided program Pubkey - `offset: ` - offset into program account data to start comparison - `bytes: ` - data to match, as encoded string - `encoding: ` - encoding for filter `bytes` data, either "base58" or "base64". Data is limited in size to 128 or fewer decoded bytes. - **NEW: This field, and base64 support generally, is only available in solana-core v1.14.1 or newer. Please omit when querying nodes on earlier versions** + **NEW: This field, and base64 support generally, is only available in solana-core v1.14.2 or newer. Please omit when querying nodes on earlier versions** - `dataSize: ` - compares the program account data length with the provided data size @@ -3176,7 +3176,7 @@ curl http://localhost:8899 -X POST -H "Content-Type: application/json" -d ' Result: ```json -{ "jsonrpc": "2.0", "result": { "solana-core": "1.14.1" }, "id": 1 } +{ "jsonrpc": "2.0", "result": { "solana-core": "1.14.2" }, "id": 1 } ``` ### getVoteAccounts diff --git a/dos/Cargo.toml b/dos/Cargo.toml index fd6287646e4c15..4530dd7e582dec 100644 --- a/dos/Cargo.toml +++ b/dos/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-dos" -version = "1.14.1" +version = "1.14.2" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -17,23 +17,23 @@ itertools = "0.10.3" log = "0.4.17" rand = "0.7.0" serde = "1.0.138" -solana-bench-tps = { path = "../bench-tps", version = "=1.14.1" } -solana-client = { path = "../client", version = "=1.14.1" } -solana-core = { path = "../core", version = "=1.14.1" } -solana-faucet = { path = "../faucet", version = "=1.14.1" } -solana-gossip = { path = "../gossip", version = "=1.14.1" } -solana-logger = { path = "../logger", version = "=1.14.1" } -solana-measure = { path = "../measure", version = "=1.14.1" } -solana-net-utils = { path = "../net-utils", version = "=1.14.1" } -solana-perf = { path = "../perf", version = "=1.14.1" } -solana-rpc = { path = "../rpc", version = "=1.14.1" } -solana-sdk = { path = "../sdk", version = "=1.14.1" } -solana-streamer = { path = "../streamer", version = "=1.14.1" } -solana-version = { path = "../version", version = "=1.14.1" } +solana-bench-tps = { path = "../bench-tps", version = "=1.14.2" } +solana-client = { path = "../client", version = "=1.14.2" } +solana-core = { path = "../core", version = "=1.14.2" } +solana-faucet = { path = "../faucet", version = "=1.14.2" } +solana-gossip = { path = "../gossip", version = "=1.14.2" } +solana-logger = { path = "../logger", version = "=1.14.2" } +solana-measure = { path = "../measure", version = "=1.14.2" } +solana-net-utils = { path = "../net-utils", version = "=1.14.2" } +solana-perf = { path = "../perf", version = "=1.14.2" } +solana-rpc = { path = "../rpc", version = "=1.14.2" } +solana-sdk = { path = "../sdk", version = "=1.14.2" } +solana-streamer = { path = "../streamer", version = "=1.14.2" } +solana-version = { path = "../version", version = "=1.14.2" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] [dev-dependencies] serial_test = "0.8.0" -solana-local-cluster = { path = "../local-cluster", version = "=1.14.1" } +solana-local-cluster = { path = "../local-cluster", version = "=1.14.2" } diff --git a/download-utils/Cargo.toml b/download-utils/Cargo.toml index 464298002978a6..73bc65bda5e2bc 100644 --- a/download-utils/Cargo.toml +++ b/download-utils/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-download-utils" -version = "1.14.1" +version = "1.14.2" description = "Solana Download Utils" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,8 +14,8 @@ console = "0.15.0" indicatif = "0.16.2" log = "0.4.17" reqwest = { version = "0.11.11", default-features = false, features = ["blocking", "brotli", "deflate", "gzip", "rustls-tls", "json"] } -solana-runtime = { path = "../runtime", version = "=1.14.1" } -solana-sdk = { path = "../sdk", version = "=1.14.1" } +solana-runtime = { path = "../runtime", version = "=1.14.2" } +solana-sdk = { path = "../sdk", version = "=1.14.2" } [lib] crate-type = ["lib"] diff --git a/entry/Cargo.toml b/entry/Cargo.toml index a082590fe95b44..5bf12417b5850c 100644 --- a/entry/Cargo.toml +++ b/entry/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-entry" -version = "1.14.1" +version = "1.14.2" description = "Solana Entry" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -19,16 +19,16 @@ log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" serde = "1.0.138" -solana-measure = { path = "../measure", version = "=1.14.1" } -solana-merkle-tree = { path = "../merkle-tree", version = "=1.14.1" } -solana-metrics = { path = "../metrics", version = "=1.14.1" } -solana-perf = { path = "../perf", version = "=1.14.1" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.1" } -solana-sdk = { path = "../sdk", version = "=1.14.1" } +solana-measure = { path = "../measure", version = "=1.14.2" } +solana-merkle-tree = { path = "../merkle-tree", version = "=1.14.2" } +solana-metrics = { path = "../metrics", version = "=1.14.2" } +solana-perf = { path = "../perf", version = "=1.14.2" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.2" } +solana-sdk = { path = "../sdk", version = "=1.14.2" } [dev-dependencies] matches = "0.1.9" -solana-logger = { path = "../logger", version = "=1.14.1" } +solana-logger = { path = "../logger", version = "=1.14.2" } [lib] crate-type = ["lib"] diff --git a/faucet/Cargo.toml b/faucet/Cargo.toml index cfb69bbed5cac5..54cbc204932b1f 100644 --- a/faucet/Cargo.toml +++ b/faucet/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-faucet" -version = "1.14.1" +version = "1.14.2" description = "Solana Faucet" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -17,12 +17,12 @@ crossbeam-channel = "0.5" log = "0.4.17" serde = "1.0.138" serde_derive = "1.0.103" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.1" } -solana-cli-config = { path = "../cli-config", version = "=1.14.1" } -solana-logger = { path = "../logger", version = "=1.14.1" } -solana-metrics = { path = "../metrics", version = "=1.14.1" } -solana-sdk = { path = "../sdk", version = "=1.14.1" } -solana-version = { path = "../version", version = "=1.14.1" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.2" } +solana-cli-config = { path = "../cli-config", version = "=1.14.2" } +solana-logger = { path = "../logger", version = "=1.14.2" } +solana-metrics = { path = "../metrics", version = "=1.14.2" } +solana-sdk = { path = "../sdk", version = "=1.14.2" } +solana-version = { path = "../version", version = "=1.14.2" } spl-memo = { version = "=3.0.1", features = ["no-entrypoint"] } thiserror = "1.0" tokio = { version = "1", features = ["full"] } diff --git a/frozen-abi/Cargo.toml b/frozen-abi/Cargo.toml index 4a22b6fd144606..7876e34ffd8aff 100644 --- a/frozen-abi/Cargo.toml +++ b/frozen-abi/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-frozen-abi" -version = "1.14.1" +version = "1.14.2" description = "Solana Frozen ABI" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -20,7 +20,7 @@ serde_bytes = "0.11" serde_derive = "1.0" serde_json = "1.0" sha2 = "0.10.2" -solana-frozen-abi-macro = { path = "macro", version = "=1.14.1" } +solana-frozen-abi-macro = { path = "macro", version = "=1.14.2" } thiserror = "1.0" [target.'cfg(not(target_os = "solana"))'.dependencies] @@ -43,7 +43,7 @@ rand_core = { version = "0.6.3", features = ["alloc", "getrandom", "std"] } subtle = { version = "2.4.1", features = ["default", "i128", "std"] } [target.'cfg(not(target_os = "solana"))'.dev-dependencies] -solana-logger = { path = "../logger", version = "=1.14.1" } +solana-logger = { path = "../logger", version = "=1.14.2" } [build-dependencies] rustc_version = "0.4" diff --git a/frozen-abi/macro/Cargo.toml b/frozen-abi/macro/Cargo.toml index c84dcbb223077a..6c6a1edf1ca4cf 100644 --- a/frozen-abi/macro/Cargo.toml +++ b/frozen-abi/macro/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-frozen-abi-macro" -version = "1.14.1" +version = "1.14.2" description = "Solana Frozen ABI Macro" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/genesis-utils/Cargo.toml b/genesis-utils/Cargo.toml index fb1d7c5ef015c1..ea883cb32ec75d 100644 --- a/genesis-utils/Cargo.toml +++ b/genesis-utils/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-genesis-utils" -version = "1.14.1" +version = "1.14.2" description = "Solana Genesis Utils" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,9 +10,9 @@ documentation = "https://docs.rs/solana-download-utils" edition = "2021" [dependencies] -solana-download-utils = { path = "../download-utils", version = "=1.14.1" } -solana-runtime = { path = "../runtime", version = "=1.14.1" } -solana-sdk = { path = "../sdk", version = "=1.14.1" } +solana-download-utils = { path = "../download-utils", version = "=1.14.2" } +solana-runtime = { path = "../runtime", version = "=1.14.2" } +solana-sdk = { path = "../sdk", version = "=1.14.2" } [lib] crate-type = ["lib"] diff --git a/genesis/Cargo.toml b/genesis/Cargo.toml index f2405d43195c87..1c71dfda78c9c8 100644 --- a/genesis/Cargo.toml +++ b/genesis/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-genesis" description = "Blockchain, Rebuilt for Scale" -version = "1.14.1" +version = "1.14.2" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -15,16 +15,16 @@ clap = "2.33.1" serde = "1.0.138" serde_json = "1.0.81" serde_yaml = "0.8.26" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.1" } -solana-cli-config = { path = "../cli-config", version = "=1.14.1" } -solana-entry = { path = "../entry", version = "=1.14.1" } -solana-ledger = { path = "../ledger", version = "=1.14.1" } -solana-logger = { path = "../logger", version = "=1.14.1" } -solana-runtime = { path = "../runtime", version = "=1.14.1" } -solana-sdk = { path = "../sdk", version = "=1.14.1" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.1" } -solana-version = { path = "../version", version = "=1.14.1" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.1" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.2" } +solana-cli-config = { path = "../cli-config", version = "=1.14.2" } +solana-entry = { path = "../entry", version = "=1.14.2" } +solana-ledger = { path = "../ledger", version = "=1.14.2" } +solana-logger = { path = "../logger", version = "=1.14.2" } +solana-runtime = { path = "../runtime", version = "=1.14.2" } +solana-sdk = { path = "../sdk", version = "=1.14.2" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.2" } +solana-version = { path = "../version", version = "=1.14.2" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.2" } tempfile = "3.3.0" [[bin]] diff --git a/geyser-plugin-interface/Cargo.toml b/geyser-plugin-interface/Cargo.toml index f6cbf869213969..6cb51a6fe64a5e 100644 --- a/geyser-plugin-interface/Cargo.toml +++ b/geyser-plugin-interface/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-geyser-plugin-interface" description = "The Solana Geyser plugin interface." -version = "1.14.1" +version = "1.14.2" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -11,8 +11,8 @@ documentation = "https://docs.rs/solana-geyser-plugin-interface" [dependencies] log = "0.4.17" -solana-sdk = { path = "../sdk", version = "=1.14.1" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.1" } +solana-sdk = { path = "../sdk", version = "=1.14.2" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.2" } thiserror = "1.0.31" [package.metadata.docs.rs] diff --git a/geyser-plugin-manager/Cargo.toml b/geyser-plugin-manager/Cargo.toml index 1f533717660d8f..743570653b54cf 100644 --- a/geyser-plugin-manager/Cargo.toml +++ b/geyser-plugin-manager/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-geyser-plugin-manager" description = "The Solana Geyser plugin manager." -version = "1.14.1" +version = "1.14.2" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -16,13 +16,13 @@ json5 = "0.4.1" libloading = "0.7.3" log = "0.4.17" serde_json = "1.0.81" -solana-geyser-plugin-interface = { path = "../geyser-plugin-interface", version = "=1.14.1" } -solana-measure = { path = "../measure", version = "=1.14.1" } -solana-metrics = { path = "../metrics", version = "=1.14.1" } -solana-rpc = { path = "../rpc", version = "=1.14.1" } -solana-runtime = { path = "../runtime", version = "=1.14.1" } -solana-sdk = { path = "../sdk", version = "=1.14.1" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.1" } +solana-geyser-plugin-interface = { path = "../geyser-plugin-interface", version = "=1.14.2" } +solana-measure = { path = "../measure", version = "=1.14.2" } +solana-metrics = { path = "../metrics", version = "=1.14.2" } +solana-rpc = { path = "../rpc", version = "=1.14.2" } +solana-runtime = { path = "../runtime", version = "=1.14.2" } +solana-sdk = { path = "../sdk", version = "=1.14.2" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.2" } thiserror = "1.0.31" [package.metadata.docs.rs] diff --git a/gossip/Cargo.toml b/gossip/Cargo.toml index 69e733e48455aa..b09a10aeb7144a 100644 --- a/gossip/Cargo.toml +++ b/gossip/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-gossip" description = "Blockchain, Rebuilt for Scale" -version = "1.14.1" +version = "1.14.2" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -27,24 +27,24 @@ rayon = "1.5.3" serde = "1.0.138" serde_bytes = "0.11" serde_derive = "1.0.103" -solana-bloom = { path = "../bloom", version = "=1.14.1" } -solana-clap-utils = { path = "../clap-utils", version = "=1.14.1" } -solana-client = { path = "../client", version = "=1.14.1" } -solana-entry = { path = "../entry", version = "=1.14.1" } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.1" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.1" } -solana-ledger = { path = "../ledger", version = "=1.14.1" } -solana-logger = { path = "../logger", version = "=1.14.1" } -solana-measure = { path = "../measure", version = "=1.14.1" } -solana-metrics = { path = "../metrics", version = "=1.14.1" } -solana-net-utils = { path = "../net-utils", version = "=1.14.1" } -solana-perf = { path = "../perf", version = "=1.14.1" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.1" } -solana-runtime = { path = "../runtime", version = "=1.14.1" } -solana-sdk = { path = "../sdk", version = "=1.14.1" } -solana-streamer = { path = "../streamer", version = "=1.14.1" } -solana-version = { path = "../version", version = "=1.14.1" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.1" } +solana-bloom = { path = "../bloom", version = "=1.14.2" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.2" } +solana-client = { path = "../client", version = "=1.14.2" } +solana-entry = { path = "../entry", version = "=1.14.2" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.2" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.2" } +solana-ledger = { path = "../ledger", version = "=1.14.2" } +solana-logger = { path = "../logger", version = "=1.14.2" } +solana-measure = { path = "../measure", version = "=1.14.2" } +solana-metrics = { path = "../metrics", version = "=1.14.2" } +solana-net-utils = { path = "../net-utils", version = "=1.14.2" } +solana-perf = { path = "../perf", version = "=1.14.2" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.2" } +solana-runtime = { path = "../runtime", version = "=1.14.2" } +solana-sdk = { path = "../sdk", version = "=1.14.2" } +solana-streamer = { path = "../streamer", version = "=1.14.2" } +solana-version = { path = "../version", version = "=1.14.2" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.2" } thiserror = "1.0" [dev-dependencies] diff --git a/install/Cargo.toml b/install/Cargo.toml index d99bab89776077..775bcaf1b422c5 100644 --- a/install/Cargo.toml +++ b/install/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-install" description = "The solana cluster software installer" -version = "1.14.1" +version = "1.14.2" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -26,12 +26,12 @@ reqwest = { version = "0.11.11", default-features = false, features = ["blocking semver = "1.0.10" serde = { version = "1.0.138", features = ["derive"] } serde_yaml = "0.8.26" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.1" } -solana-client = { path = "../client", version = "=1.14.1" } -solana-config-program = { path = "../programs/config", version = "=1.14.1" } -solana-logger = { path = "../logger", version = "=1.14.1" } -solana-sdk = { path = "../sdk", version = "=1.14.1" } -solana-version = { path = "../version", version = "=1.14.1" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.2" } +solana-client = { path = "../client", version = "=1.14.2" } +solana-config-program = { path = "../programs/config", version = "=1.14.2" } +solana-logger = { path = "../logger", version = "=1.14.2" } +solana-sdk = { path = "../sdk", version = "=1.14.2" } +solana-version = { path = "../version", version = "=1.14.2" } tar = "0.4.38" tempfile = "3.3.0" url = "2.2.2" diff --git a/keygen/Cargo.toml b/keygen/Cargo.toml index 9afb7717b7d006..2ead149699fe5a 100644 --- a/keygen/Cargo.toml +++ b/keygen/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-keygen" -version = "1.14.1" +version = "1.14.2" description = "Solana key generation utility" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,11 +14,11 @@ bs58 = "0.4.0" clap = { version = "3.1.5", features = ["cargo"] } dirs-next = "2.0.0" num_cpus = "1.13.1" -solana-clap-v3-utils = { path = "../clap-v3-utils", version = "=1.14.1" } -solana-cli-config = { path = "../cli-config", version = "=1.14.1" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.1" } -solana-sdk = { path = "../sdk", version = "=1.14.1" } -solana-version = { path = "../version", version = "=1.14.1" } +solana-clap-v3-utils = { path = "../clap-v3-utils", version = "=1.14.2" } +solana-cli-config = { path = "../cli-config", version = "=1.14.2" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.2" } +solana-sdk = { path = "../sdk", version = "=1.14.2" } +solana-version = { path = "../version", version = "=1.14.2" } tiny-bip39 = "0.8.2" [[bin]] diff --git a/ledger-tool/Cargo.toml b/ledger-tool/Cargo.toml index 7eb82e640a17ae..7a984bf6ad708b 100644 --- a/ledger-tool/Cargo.toml +++ b/ledger-tool/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-ledger-tool" description = "Blockchain, Rebuilt for Scale" -version = "1.14.1" +version = "1.14.2" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -22,20 +22,20 @@ log = { version = "0.4.17" } regex = "1" serde = { version = "1.0", features = ["derive"] } serde_json = "1.0.81" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.1" } -solana-cli-output = { path = "../cli-output", version = "=1.14.1" } -solana-core = { path = "../core", version = "=1.14.1" } -solana-entry = { path = "../entry", version = "=1.14.1" } -solana-ledger = { path = "../ledger", version = "=1.14.1" } -solana-logger = { path = "../logger", version = "=1.14.1" } -solana-measure = { path = "../measure", version = "=1.14.1" } -solana-runtime = { path = "../runtime", version = "=1.14.1" } -solana-sdk = { path = "../sdk", version = "=1.14.1" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.1" } -solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.1" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.1" } -solana-version = { path = "../version", version = "=1.14.1" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.1" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.2" } +solana-cli-output = { path = "../cli-output", version = "=1.14.2" } +solana-core = { path = "../core", version = "=1.14.2" } +solana-entry = { path = "../entry", version = "=1.14.2" } +solana-ledger = { path = "../ledger", version = "=1.14.2" } +solana-logger = { path = "../logger", version = "=1.14.2" } +solana-measure = { path = "../measure", version = "=1.14.2" } +solana-runtime = { path = "../runtime", version = "=1.14.2" } +solana-sdk = { path = "../sdk", version = "=1.14.2" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.2" } +solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.2" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.2" } +solana-version = { path = "../version", version = "=1.14.2" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.2" } tokio = { version = "1", features = ["full"] } [target.'cfg(not(target_env = "msvc"))'.dependencies] diff --git a/ledger/Cargo.toml b/ledger/Cargo.toml index 08afae1a7e326b..f3b5e187b7964f 100644 --- a/ledger/Cargo.toml +++ b/ledger/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-ledger" -version = "1.14.1" +version = "1.14.2" description = "Solana ledger" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -34,23 +34,23 @@ reed-solomon-erasure = { version = "5.0.3", features = ["simd-accel"] } serde = "1.0.138" serde_bytes = "0.11.6" sha2 = "0.10.2" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.1" } -solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.1" } -solana-entry = { path = "../entry", version = "=1.14.1" } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.1" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.1" } -solana-measure = { path = "../measure", version = "=1.14.1" } -solana-metrics = { path = "../metrics", version = "=1.14.1" } -solana-perf = { path = "../perf", version = "=1.14.1" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.1" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.1" } -solana-runtime = { path = "../runtime", version = "=1.14.1" } -solana-sdk = { path = "../sdk", version = "=1.14.1" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.1" } -solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.1" } -solana-storage-proto = { path = "../storage-proto", version = "=1.14.1" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.1" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.1" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.2" } +solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.2" } +solana-entry = { path = "../entry", version = "=1.14.2" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.2" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.2" } +solana-measure = { path = "../measure", version = "=1.14.2" } +solana-metrics = { path = "../metrics", version = "=1.14.2" } +solana-perf = { path = "../perf", version = "=1.14.2" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.2" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.2" } +solana-runtime = { path = "../runtime", version = "=1.14.2" } +solana-sdk = { path = "../sdk", version = "=1.14.2" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.2" } +solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.2" } +solana-storage-proto = { path = "../storage-proto", version = "=1.14.2" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.2" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.2" } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } spl-token-2022 = { version = "=0.4.2", features = ["no-entrypoint"] } static_assertions = "1.1.0" @@ -71,8 +71,8 @@ features = ["lz4"] assert_matches = "1.5.0" bs58 = "0.4.0" matches = "0.1.9" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.1" } -solana-logger = { path = "../logger", version = "=1.14.1" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.2" } +solana-logger = { path = "../logger", version = "=1.14.2" } test-case = "2.1.0" [build-dependencies] diff --git a/local-cluster/Cargo.toml b/local-cluster/Cargo.toml index 650f33a11a51fe..06b046bf98dca2 100644 --- a/local-cluster/Cargo.toml +++ b/local-cluster/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-local-cluster" description = "Blockchain, Rebuilt for Scale" -version = "1.14.1" +version = "1.14.2" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -16,25 +16,25 @@ itertools = "0.10.3" log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" -solana-client = { path = "../client", version = "=1.14.1" } -solana-config-program = { path = "../programs/config", version = "=1.14.1" } -solana-core = { path = "../core", version = "=1.14.1" } -solana-entry = { path = "../entry", version = "=1.14.1" } -solana-gossip = { path = "../gossip", version = "=1.14.1" } -solana-ledger = { path = "../ledger", version = "=1.14.1" } -solana-runtime = { path = "../runtime", version = "=1.14.1" } -solana-sdk = { path = "../sdk", version = "=1.14.1" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.1" } -solana-streamer = { path = "../streamer", version = "=1.14.1" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.1" } +solana-client = { path = "../client", version = "=1.14.2" } +solana-config-program = { path = "../programs/config", version = "=1.14.2" } +solana-core = { path = "../core", version = "=1.14.2" } +solana-entry = { path = "../entry", version = "=1.14.2" } +solana-gossip = { path = "../gossip", version = "=1.14.2" } +solana-ledger = { path = "../ledger", version = "=1.14.2" } +solana-runtime = { path = "../runtime", version = "=1.14.2" } +solana-sdk = { path = "../sdk", version = "=1.14.2" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.2" } +solana-streamer = { path = "../streamer", version = "=1.14.2" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.2" } tempfile = "3.3.0" [dev-dependencies] assert_matches = "1.5.0" gag = "1.0.0" serial_test = "0.8.0" -solana-download-utils = { path = "../download-utils", version = "=1.14.1" } -solana-logger = { path = "../logger", version = "=1.14.1" } +solana-download-utils = { path = "../download-utils", version = "=1.14.2" } +solana-logger = { path = "../logger", version = "=1.14.2" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/log-analyzer/Cargo.toml b/log-analyzer/Cargo.toml index 28263022348997..9ba092b71e646b 100644 --- a/log-analyzer/Cargo.toml +++ b/log-analyzer/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-log-analyzer" description = "The solana cluster network analysis tool" -version = "1.14.1" +version = "1.14.2" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,8 +14,8 @@ byte-unit = "4.0.14" clap = { version = "3.1.5", features = ["cargo"] } serde = "1.0.138" serde_json = "1.0.81" -solana-logger = { path = "../logger", version = "=1.14.1" } -solana-version = { path = "../version", version = "=1.14.1" } +solana-logger = { path = "../logger", version = "=1.14.2" } +solana-version = { path = "../version", version = "=1.14.2" } [[bin]] name = "solana-log-analyzer" diff --git a/logger/Cargo.toml b/logger/Cargo.toml index 8deb15de6797fe..1d47b526ede62f 100644 --- a/logger/Cargo.toml +++ b/logger/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-logger" -version = "1.14.1" +version = "1.14.2" description = "Solana Logger" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/measure/Cargo.toml b/measure/Cargo.toml index 34bf4d0a23541a..51675674aa6d47 100644 --- a/measure/Cargo.toml +++ b/measure/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "solana-measure" description = "Blockchain, Rebuilt for Scale" -version = "1.14.1" +version = "1.14.2" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-measure" readme = "../README.md" @@ -12,7 +12,7 @@ edition = "2021" [dependencies] log = "0.4.17" -solana-sdk = { path = "../sdk", version = "=1.14.1" } +solana-sdk = { path = "../sdk", version = "=1.14.2" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/merkle-root-bench/Cargo.toml b/merkle-root-bench/Cargo.toml index 54a8772cb2c0de..516b8dd4981c90 100644 --- a/merkle-root-bench/Cargo.toml +++ b/merkle-root-bench/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-merkle-root-bench" -version = "1.14.1" +version = "1.14.2" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -11,11 +11,11 @@ publish = false [dependencies] clap = "2.33.1" log = "0.4.17" -solana-logger = { path = "../logger", version = "=1.14.1" } -solana-measure = { path = "../measure", version = "=1.14.1" } -solana-runtime = { path = "../runtime", version = "=1.14.1" } -solana-sdk = { path = "../sdk", version = "=1.14.1" } -solana-version = { path = "../version", version = "=1.14.1" } +solana-logger = { path = "../logger", version = "=1.14.2" } +solana-measure = { path = "../measure", version = "=1.14.2" } +solana-runtime = { path = "../runtime", version = "=1.14.2" } +solana-sdk = { path = "../sdk", version = "=1.14.2" } +solana-version = { path = "../version", version = "=1.14.2" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/merkle-tree/Cargo.toml b/merkle-tree/Cargo.toml index 1d4aa7f6e8c0a2..1b05eca9e6c25b 100644 --- a/merkle-tree/Cargo.toml +++ b/merkle-tree/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-merkle-tree" -version = "1.14.1" +version = "1.14.2" description = "Solana Merkle Tree" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -11,7 +11,7 @@ edition = "2021" [dependencies] fast-math = "0.1" -solana-program = { path = "../sdk/program", version = "=1.14.1" } +solana-program = { path = "../sdk/program", version = "=1.14.2" } # This can go once the BPF toolchain target Rust 1.42.0+ [target.bpfel-unknown-unknown.dependencies] diff --git a/metrics/Cargo.toml b/metrics/Cargo.toml index ac19bfd82323da..68644c145ec9f3 100644 --- a/metrics/Cargo.toml +++ b/metrics/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-metrics" -version = "1.14.1" +version = "1.14.2" description = "Solana Metrics" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -15,7 +15,7 @@ gethostname = "0.2.3" lazy_static = "1.4.0" log = "0.4.17" reqwest = { version = "0.11.11", default-features = false, features = ["blocking", "brotli", "deflate", "gzip", "rustls-tls", "json"] } -solana-sdk = { path = "../sdk", version = "=1.14.1" } +solana-sdk = { path = "../sdk", version = "=1.14.2" } [dev-dependencies] env_logger = "0.9.0" diff --git a/net-shaper/Cargo.toml b/net-shaper/Cargo.toml index ff144e3d28ef80..e3747700e6f77c 100644 --- a/net-shaper/Cargo.toml +++ b/net-shaper/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-net-shaper" description = "The solana cluster network shaping tool" -version = "1.14.1" +version = "1.14.2" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,7 +14,7 @@ clap = { version = "3.1.5", features = ["cargo"] } rand = "0.7.0" serde = { version = "1.0.138", features = ["derive"] } serde_json = "1.0.81" -solana-logger = { path = "../logger", version = "=1.14.1" } +solana-logger = { path = "../logger", version = "=1.14.2" } [[bin]] name = "solana-net-shaper" diff --git a/net-utils/Cargo.toml b/net-utils/Cargo.toml index e77864d173be47..90ccb1b37ebed8 100644 --- a/net-utils/Cargo.toml +++ b/net-utils/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-net-utils" -version = "1.14.1" +version = "1.14.2" description = "Solana Network Utilities" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -19,9 +19,9 @@ rand = "0.7.0" serde = "1.0.138" serde_derive = "1.0.103" socket2 = "0.4.4" -solana-logger = { path = "../logger", version = "=1.14.1" } -solana-sdk = { path = "../sdk", version = "=1.14.1" } -solana-version = { path = "../version", version = "=1.14.1" } +solana-logger = { path = "../logger", version = "=1.14.2" } +solana-sdk = { path = "../sdk", version = "=1.14.2" } +solana-version = { path = "../version", version = "=1.14.2" } tokio = { version = "1", features = ["full"] } url = "2.2.2" diff --git a/notifier/Cargo.toml b/notifier/Cargo.toml index d01de7dd015772..92af7322d44305 100644 --- a/notifier/Cargo.toml +++ b/notifier/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-notifier" -version = "1.14.1" +version = "1.14.2" description = "Solana Notifier" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/perf/Cargo.toml b/perf/Cargo.toml index 99a57e80c07230..61c8b365732dbb 100644 --- a/perf/Cargo.toml +++ b/perf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-perf" -version = "1.14.1" +version = "1.14.2" description = "Solana Performance APIs" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -22,10 +22,10 @@ log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" serde = "1.0.138" -solana-metrics = { path = "../metrics", version = "=1.14.1" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.1" } -solana-sdk = { path = "../sdk", version = "=1.14.1" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.1" } +solana-metrics = { path = "../metrics", version = "=1.14.2" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.2" } +solana-sdk = { path = "../sdk", version = "=1.14.2" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.2" } [target."cfg(target_os = \"linux\")".dependencies] caps = "0.5.3" @@ -37,7 +37,7 @@ name = "solana_perf" [dev-dependencies] matches = "0.1.9" -solana-logger = { path = "../logger", version = "=1.14.1" } +solana-logger = { path = "../logger", version = "=1.14.2" } [[bench]] name = "sigverify" diff --git a/poh-bench/Cargo.toml b/poh-bench/Cargo.toml index af3ea552993b07..d53ee30e4b92ab 100644 --- a/poh-bench/Cargo.toml +++ b/poh-bench/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-poh-bench" -version = "1.14.1" +version = "1.14.2" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,12 +14,12 @@ clap = { version = "3.1.5", features = ["cargo"] } log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" -solana-entry = { path = "../entry", version = "=1.14.1" } -solana-logger = { path = "../logger", version = "=1.14.1" } -solana-measure = { path = "../measure", version = "=1.14.1" } -solana-perf = { path = "../perf", version = "=1.14.1" } -solana-sdk = { path = "../sdk", version = "=1.14.1" } -solana-version = { path = "../version", version = "=1.14.1" } +solana-entry = { path = "../entry", version = "=1.14.2" } +solana-logger = { path = "../logger", version = "=1.14.2" } +solana-measure = { path = "../measure", version = "=1.14.2" } +solana-perf = { path = "../perf", version = "=1.14.2" } +solana-sdk = { path = "../sdk", version = "=1.14.2" } +solana-version = { path = "../version", version = "=1.14.2" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/poh/Cargo.toml b/poh/Cargo.toml index b8dfa9bfb308ca..63471157211105 100644 --- a/poh/Cargo.toml +++ b/poh/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-poh" -version = "1.14.1" +version = "1.14.2" description = "Solana PoH" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,21 +13,21 @@ edition = "2021" core_affinity = "0.5.10" crossbeam-channel = "0.5" log = "0.4.17" -solana-entry = { path = "../entry", version = "=1.14.1" } -solana-ledger = { path = "../ledger", version = "=1.14.1" } -solana-measure = { path = "../measure", version = "=1.14.1" } -solana-metrics = { path = "../metrics", version = "=1.14.1" } -solana-runtime = { path = "../runtime", version = "=1.14.1" } -solana-sdk = { path = "../sdk", version = "=1.14.1" } -solana-sys-tuner = { path = "../sys-tuner", version = "=1.14.1" } +solana-entry = { path = "../entry", version = "=1.14.2" } +solana-ledger = { path = "../ledger", version = "=1.14.2" } +solana-measure = { path = "../measure", version = "=1.14.2" } +solana-metrics = { path = "../metrics", version = "=1.14.2" } +solana-runtime = { path = "../runtime", version = "=1.14.2" } +solana-sdk = { path = "../sdk", version = "=1.14.2" } +solana-sys-tuner = { path = "../sys-tuner", version = "=1.14.2" } thiserror = "1.0" [dev-dependencies] bincode = "1.3.3" matches = "0.1.9" rand = "0.7.0" -solana-logger = { path = "../logger", version = "=1.14.1" } -solana-perf = { path = "../perf", version = "=1.14.1" } +solana-logger = { path = "../logger", version = "=1.14.2" } +solana-perf = { path = "../perf", version = "=1.14.2" } [lib] crate-type = ["lib"] diff --git a/program-runtime/Cargo.toml b/program-runtime/Cargo.toml index ca01bbb81831e2..d44908e55a9d92 100644 --- a/program-runtime/Cargo.toml +++ b/program-runtime/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-program-runtime" -version = "1.14.1" +version = "1.14.2" description = "Solana program runtime" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -20,16 +20,16 @@ log = "0.4.14" num-derive = { version = "0.3" } num-traits = { version = "0.2" } serde = { version = "1.0.129", features = ["derive", "rc"] } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.1" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.1" } -solana-measure = { path = "../measure", version = "=1.14.1" } -solana-metrics = { path = "../metrics", version = "=1.14.1" } -solana-sdk = { path = "../sdk", version = "=1.14.1" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.2" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.2" } +solana-measure = { path = "../measure", version = "=1.14.2" } +solana-metrics = { path = "../metrics", version = "=1.14.2" } +solana-sdk = { path = "../sdk", version = "=1.14.2" } thiserror = "1.0" enum-iterator = "0.8.1" [dev-dependencies] -solana-logger = { path = "../logger", version = "=1.14.1" } +solana-logger = { path = "../logger", version = "=1.14.2" } [lib] crate-type = ["lib"] diff --git a/program-test/Cargo.toml b/program-test/Cargo.toml index 55fc9692608fb5..6885f5b1680c8f 100644 --- a/program-test/Cargo.toml +++ b/program-test/Cargo.toml @@ -5,7 +5,7 @@ edition = "2021" license = "Apache-2.0" name = "solana-program-test" repository = "https://github.com/solana-labs/solana" -version = "1.14.1" +version = "1.14.2" [dependencies] assert_matches = "1.5.0" @@ -15,13 +15,13 @@ bincode = "1.3.3" chrono-humanize = "0.2.1" log = "0.4.17" serde = "1.0.138" -solana-banks-client = { path = "../banks-client", version = "=1.14.1" } -solana-banks-server = { path = "../banks-server", version = "=1.14.1" } -solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.1" } -solana-logger = { path = "../logger", version = "=1.14.1" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.1" } -solana-runtime = { path = "../runtime", version = "=1.14.1" } -solana-sdk = { path = "../sdk", version = "=1.14.1" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.1" } +solana-banks-client = { path = "../banks-client", version = "=1.14.2" } +solana-banks-server = { path = "../banks-server", version = "=1.14.2" } +solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.2" } +solana-logger = { path = "../logger", version = "=1.14.2" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.2" } +solana-runtime = { path = "../runtime", version = "=1.14.2" } +solana-sdk = { path = "../sdk", version = "=1.14.2" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.2" } thiserror = "1.0" tokio = { version = "1", features = ["full"] } diff --git a/programs/address-lookup-table-tests/Cargo.toml b/programs/address-lookup-table-tests/Cargo.toml index 1e17b435e103a5..29168b31841aa2 100644 --- a/programs/address-lookup-table-tests/Cargo.toml +++ b/programs/address-lookup-table-tests/Cargo.toml @@ -3,7 +3,7 @@ [package] name = "solana-address-lookup-table-program-tests" -version = "1.14.1" +version = "1.14.2" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" @@ -14,9 +14,9 @@ publish = false [dev-dependencies] assert_matches = "1.5.0" bincode = "1.3.3" -solana-address-lookup-table-program = { path = "../address-lookup-table", version = "=1.14.1" } -solana-program-test = { path = "../../program-test", version = "=1.14.1" } -solana-sdk = { path = "../../sdk", version = "=1.14.1" } +solana-address-lookup-table-program = { path = "../address-lookup-table", version = "=1.14.2" } +solana-program-test = { path = "../../program-test", version = "=1.14.2" } +solana-sdk = { path = "../../sdk", version = "=1.14.2" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/address-lookup-table/Cargo.toml b/programs/address-lookup-table/Cargo.toml index 169c8961f70515..bc98a0697c8455 100644 --- a/programs/address-lookup-table/Cargo.toml +++ b/programs/address-lookup-table/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-address-lookup-table-program" -version = "1.14.1" +version = "1.14.2" description = "Solana address lookup table program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -16,14 +16,14 @@ log = "0.4.17" num-derive = "0.3" num-traits = "0.2" serde = { version = "1.0.138", features = ["derive"] } -solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.1" } -solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.1" } -solana-program = { path = "../../sdk/program", version = "=1.14.1" } +solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.2" } +solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.2" } +solana-program = { path = "../../sdk/program", version = "=1.14.2" } thiserror = "1.0" [target.'cfg(not(target_os = "solana"))'.dependencies] -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.1" } -solana-sdk = { path = "../../sdk", version = "=1.14.1" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.2" } +solana-sdk = { path = "../../sdk", version = "=1.14.2" } [build-dependencies] rustc_version = "0.4" diff --git a/programs/bpf-loader-tests/Cargo.toml b/programs/bpf-loader-tests/Cargo.toml index 5e0b0df0acc214..bd540def90802c 100644 --- a/programs/bpf-loader-tests/Cargo.toml +++ b/programs/bpf-loader-tests/Cargo.toml @@ -3,7 +3,7 @@ [package] name = "solana-bpf-loader-program-tests" -version = "1.14.1" +version = "1.14.2" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" @@ -14,9 +14,9 @@ publish = false [dev-dependencies] assert_matches = "1.5.0" bincode = "1.3.3" -solana-bpf-loader-program = { path = "../bpf_loader", version = "=1.14.1" } -solana-program-test = { path = "../../program-test", version = "=1.14.1" } -solana-sdk = { path = "../../sdk", version = "=1.14.1" } +solana-bpf-loader-program = { path = "../bpf_loader", version = "=1.14.2" } +solana-program-test = { path = "../../program-test", version = "=1.14.2" } +solana-sdk = { path = "../../sdk", version = "=1.14.2" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/bpf/Cargo.lock b/programs/bpf/Cargo.lock index a4e2319f8a5822..665380385266d4 100644 --- a/programs/bpf/Cargo.lock +++ b/programs/bpf/Cargo.lock @@ -4062,7 +4062,7 @@ dependencies = [ [[package]] name = "solana-account-decoder" -version = "1.14.1" +version = "1.14.2" dependencies = [ "Inflector", "base64 0.13.0", @@ -4074,7 +4074,7 @@ dependencies = [ "serde_derive", "serde_json", "solana-config-program", - "solana-sdk 1.14.1", + "solana-sdk 1.14.2", "solana-vote-program", "spl-token", "spl-token-2022", @@ -4084,7 +4084,7 @@ dependencies = [ [[package]] name = "solana-address-lookup-table-program" -version = "1.14.1" +version = "1.14.2" dependencies = [ "bincode", "bytemuck", @@ -4093,23 +4093,23 @@ dependencies = [ "num-traits", "rustc_version", "serde", - "solana-frozen-abi 1.14.1", - "solana-frozen-abi-macro 1.14.1", - "solana-program 1.14.1", + "solana-frozen-abi 1.14.2", + "solana-frozen-abi-macro 1.14.2", + "solana-program 1.14.2", "solana-program-runtime", - "solana-sdk 1.14.1", + "solana-sdk 1.14.2", "thiserror", ] [[package]] name = "solana-banks-client" -version = "1.14.1" +version = "1.14.2" dependencies = [ "borsh", "futures 0.3.21", "solana-banks-interface", - "solana-program 1.14.1", - "solana-sdk 1.14.1", + "solana-program 1.14.2", + "solana-sdk 1.14.2", "tarpc", "thiserror", "tokio", @@ -4118,16 +4118,16 @@ dependencies = [ [[package]] name = "solana-banks-interface" -version = "1.14.1" +version = "1.14.2" dependencies = [ "serde", - "solana-sdk 1.14.1", + "solana-sdk 1.14.2", "tarpc", ] [[package]] name = "solana-banks-server" -version = "1.14.1" +version = "1.14.2" dependencies = [ "bincode", "crossbeam-channel", @@ -4135,7 +4135,7 @@ dependencies = [ "solana-banks-interface", "solana-client", "solana-runtime", - "solana-sdk 1.14.1", + "solana-sdk 1.14.2", "solana-send-transaction-service", "tarpc", "tokio", @@ -4145,7 +4145,7 @@ dependencies = [ [[package]] name = "solana-bloom" -version = "1.14.1" +version = "1.14.2" dependencies = [ "bv", "fnv", @@ -4155,14 +4155,14 @@ dependencies = [ "rustc_version", "serde", "serde_derive", - "solana-frozen-abi 1.14.1", - "solana-frozen-abi-macro 1.14.1", - "solana-sdk 1.14.1", + "solana-frozen-abi 1.14.2", + "solana-frozen-abi-macro 1.14.2", + "solana-sdk 1.14.2", ] [[package]] name = "solana-bpf-loader-program" -version = "1.14.1" +version = "1.14.2" dependencies = [ "bincode", "byteorder 1.4.3", @@ -4171,15 +4171,15 @@ dependencies = [ "solana-measure", "solana-metrics", "solana-program-runtime", - "solana-sdk 1.14.1", - "solana-zk-token-sdk 1.14.1", + "solana-sdk 1.14.2", + "solana-zk-token-sdk 1.14.2", "solana_rbpf", "thiserror", ] [[package]] name = "solana-bpf-programs" -version = "1.14.1" +version = "1.14.2" dependencies = [ "bincode", "byteorder 1.4.3", @@ -4195,11 +4195,11 @@ dependencies = [ "solana-bpf-rust-realloc-invoke", "solana-cli-output", "solana-ledger", - "solana-logger 1.14.1", + "solana-logger 1.14.2", "solana-measure", "solana-program-runtime", "solana-runtime", - "solana-sdk 1.14.1", + "solana-sdk 1.14.2", "solana-transaction-status", "solana_rbpf", "walkdir", @@ -4207,385 +4207,385 @@ dependencies = [ [[package]] name = "solana-bpf-rust-128bit" -version = "1.14.1" +version = "1.14.2" dependencies = [ "solana-bpf-rust-128bit-dep", - "solana-program 1.14.1", + "solana-program 1.14.2", ] [[package]] name = "solana-bpf-rust-128bit-dep" -version = "1.14.1" +version = "1.14.2" dependencies = [ - "solana-program 1.14.1", + "solana-program 1.14.2", ] [[package]] name = "solana-bpf-rust-alloc" -version = "1.14.1" +version = "1.14.2" dependencies = [ - "solana-program 1.14.1", + "solana-program 1.14.2", ] [[package]] name = "solana-bpf-rust-call-depth" -version = "1.14.1" +version = "1.14.2" dependencies = [ - "solana-program 1.14.1", + "solana-program 1.14.2", ] [[package]] name = "solana-bpf-rust-caller-access" -version = "1.14.1" +version = "1.14.2" dependencies = [ - "solana-program 1.14.1", + "solana-program 1.14.2", ] [[package]] name = "solana-bpf-rust-curve25519" -version = "1.14.1" +version = "1.14.2" dependencies = [ - "solana-program 1.14.1", - "solana-zk-token-sdk 1.14.1", + "solana-program 1.14.2", + "solana-zk-token-sdk 1.14.2", ] [[package]] name = "solana-bpf-rust-custom-heap" -version = "1.14.1" +version = "1.14.2" dependencies = [ - "solana-program 1.14.1", + "solana-program 1.14.2", ] [[package]] name = "solana-bpf-rust-dep-crate" -version = "1.14.1" +version = "1.14.2" dependencies = [ "byteorder 1.4.3", "solana-address-lookup-table-program", - "solana-program 1.14.1", + "solana-program 1.14.2", ] [[package]] name = "solana-bpf-rust-deprecated-loader" -version = "1.14.1" +version = "1.14.2" dependencies = [ - "solana-program 1.14.1", + "solana-program 1.14.2", ] [[package]] name = "solana-bpf-rust-dup-accounts" -version = "1.14.1" +version = "1.14.2" dependencies = [ - "solana-program 1.14.1", + "solana-program 1.14.2", ] [[package]] name = "solana-bpf-rust-error-handling" -version = "1.14.1" +version = "1.14.2" dependencies = [ "num-derive", "num-traits", - "solana-program 1.14.1", + "solana-program 1.14.2", "thiserror", ] [[package]] name = "solana-bpf-rust-external-spend" -version = "1.14.1" +version = "1.14.2" dependencies = [ - "solana-program 1.14.1", + "solana-program 1.14.2", ] [[package]] name = "solana-bpf-rust-finalize" -version = "1.14.1" +version = "1.14.2" dependencies = [ - "solana-program 1.14.1", + "solana-program 1.14.2", ] [[package]] name = "solana-bpf-rust-get-minimum-delegation" -version = "1.14.1" +version = "1.14.2" dependencies = [ - "solana-program 1.14.1", + "solana-program 1.14.2", ] [[package]] name = "solana-bpf-rust-inner_instruction_alignment_check" -version = "1.14.1" +version = "1.14.2" dependencies = [ - "solana-program 1.14.1", + "solana-program 1.14.2", ] [[package]] name = "solana-bpf-rust-instruction-introspection" -version = "1.14.1" +version = "1.14.2" dependencies = [ - "solana-program 1.14.1", + "solana-program 1.14.2", ] [[package]] name = "solana-bpf-rust-invoke" -version = "1.14.1" +version = "1.14.2" dependencies = [ "solana-bpf-rust-invoked", - "solana-program 1.14.1", + "solana-program 1.14.2", ] [[package]] name = "solana-bpf-rust-invoke-and-error" -version = "1.14.1" +version = "1.14.2" dependencies = [ - "solana-program 1.14.1", + "solana-program 1.14.2", ] [[package]] name = "solana-bpf-rust-invoke-and-ok" -version = "1.14.1" +version = "1.14.2" dependencies = [ - "solana-program 1.14.1", + "solana-program 1.14.2", ] [[package]] name = "solana-bpf-rust-invoke-and-return" -version = "1.14.1" +version = "1.14.2" dependencies = [ - "solana-program 1.14.1", + "solana-program 1.14.2", ] [[package]] name = "solana-bpf-rust-invoked" -version = "1.14.1" +version = "1.14.2" dependencies = [ - "solana-program 1.14.1", + "solana-program 1.14.2", ] [[package]] name = "solana-bpf-rust-iter" -version = "1.14.1" +version = "1.14.2" dependencies = [ - "solana-program 1.14.1", + "solana-program 1.14.2", ] [[package]] name = "solana-bpf-rust-log-data" -version = "1.14.1" +version = "1.14.2" dependencies = [ - "solana-program 1.14.1", + "solana-program 1.14.2", ] [[package]] name = "solana-bpf-rust-many-args" -version = "1.14.1" +version = "1.14.2" dependencies = [ "solana-bpf-rust-many-args-dep", - "solana-program 1.14.1", + "solana-program 1.14.2", ] [[package]] name = "solana-bpf-rust-many-args-dep" -version = "1.14.1" +version = "1.14.2" dependencies = [ - "solana-program 1.14.1", + "solana-program 1.14.2", ] [[package]] name = "solana-bpf-rust-mem" -version = "1.14.1" +version = "1.14.2" dependencies = [ - "solana-program 1.14.1", + "solana-program 1.14.2", "solana-program-runtime", "solana-program-test", - "solana-sdk 1.14.1", + "solana-sdk 1.14.2", ] [[package]] name = "solana-bpf-rust-membuiltins" -version = "1.14.1" +version = "1.14.2" dependencies = [ "solana-bpf-rust-mem", - "solana-program 1.14.1", + "solana-program 1.14.2", ] [[package]] name = "solana-bpf-rust-noop" -version = "1.14.1" +version = "1.14.2" dependencies = [ - "solana-program 1.14.1", + "solana-program 1.14.2", ] [[package]] name = "solana-bpf-rust-panic" -version = "1.14.1" +version = "1.14.2" dependencies = [ - "solana-program 1.14.1", + "solana-program 1.14.2", ] [[package]] name = "solana-bpf-rust-param-passing" -version = "1.14.1" +version = "1.14.2" dependencies = [ "solana-bpf-rust-param-passing-dep", - "solana-program 1.14.1", + "solana-program 1.14.2", ] [[package]] name = "solana-bpf-rust-param-passing-dep" -version = "1.14.1" +version = "1.14.2" dependencies = [ - "solana-program 1.14.1", + "solana-program 1.14.2", ] [[package]] name = "solana-bpf-rust-rand" -version = "1.14.1" +version = "1.14.2" dependencies = [ "getrandom 0.1.14", "rand 0.7.3", - "solana-program 1.14.1", + "solana-program 1.14.2", ] [[package]] name = "solana-bpf-rust-realloc" -version = "1.14.1" +version = "1.14.2" dependencies = [ - "solana-program 1.14.1", + "solana-program 1.14.2", ] [[package]] name = "solana-bpf-rust-realloc-invoke" -version = "1.14.1" +version = "1.14.2" dependencies = [ "solana-bpf-rust-realloc", - "solana-program 1.14.1", + "solana-program 1.14.2", ] [[package]] name = "solana-bpf-rust-ro-account_modify" -version = "1.14.1" +version = "1.14.2" dependencies = [ - "solana-program 1.14.1", + "solana-program 1.14.2", ] [[package]] name = "solana-bpf-rust-ro-modify" -version = "1.14.1" +version = "1.14.2" dependencies = [ - "solana-program 1.14.1", + "solana-program 1.14.2", ] [[package]] name = "solana-bpf-rust-sanity" -version = "1.14.1" +version = "1.14.2" dependencies = [ - "solana-program 1.14.1", + "solana-program 1.14.2", "solana-program-runtime", "solana-program-test", - "solana-sdk 1.14.1", + "solana-sdk 1.14.2", ] [[package]] name = "solana-bpf-rust-secp256k1-recover" -version = "1.14.1" +version = "1.14.2" dependencies = [ "libsecp256k1 0.7.0", - "solana-program 1.14.1", + "solana-program 1.14.2", ] [[package]] name = "solana-bpf-rust-sha" -version = "1.14.1" +version = "1.14.2" dependencies = [ "blake3", - "solana-program 1.14.1", + "solana-program 1.14.2", ] [[package]] name = "solana-bpf-rust-sibling-instructions" -version = "1.14.1" +version = "1.14.2" dependencies = [ - "solana-program 1.14.1", + "solana-program 1.14.2", ] [[package]] name = "solana-bpf-rust-sibling_inner-instructions" -version = "1.14.1" +version = "1.14.2" dependencies = [ - "solana-program 1.14.1", + "solana-program 1.14.2", ] [[package]] name = "solana-bpf-rust-simulation" -version = "1.14.1" +version = "1.14.2" dependencies = [ - "solana-logger 1.14.1", - "solana-program 1.14.1", + "solana-logger 1.14.2", + "solana-program 1.14.2", "solana-program-test", - "solana-sdk 1.14.1", + "solana-sdk 1.14.2", "solana-validator", ] [[package]] name = "solana-bpf-rust-spoof1" -version = "1.14.1" +version = "1.14.2" dependencies = [ - "solana-program 1.14.1", + "solana-program 1.14.2", ] [[package]] name = "solana-bpf-rust-spoof1-system" -version = "1.14.1" +version = "1.14.2" dependencies = [ - "solana-program 1.14.1", + "solana-program 1.14.2", ] [[package]] name = "solana-bpf-rust-sysvar" -version = "1.14.1" +version = "1.14.2" dependencies = [ - "solana-program 1.14.1", + "solana-program 1.14.2", "solana-program-runtime", "solana-program-test", - "solana-sdk 1.14.1", + "solana-sdk 1.14.2", ] [[package]] name = "solana-bpf-rust-upgradeable" -version = "1.14.1" +version = "1.14.2" dependencies = [ - "solana-program 1.14.1", + "solana-program 1.14.2", ] [[package]] name = "solana-bpf-rust-upgraded" -version = "1.14.1" +version = "1.14.2" dependencies = [ - "solana-program 1.14.1", + "solana-program 1.14.2", ] [[package]] name = "solana-bucket-map" -version = "1.14.1" +version = "1.14.2" dependencies = [ "log", "memmap2", "modular-bitfield", "rand 0.7.3", "solana-measure", - "solana-sdk 1.14.1", + "solana-sdk 1.14.2", "tempfile", ] [[package]] name = "solana-clap-utils" -version = "1.14.1" +version = "1.14.2" dependencies = [ "chrono", "clap 2.33.3", "rpassword", "solana-perf", "solana-remote-wallet", - "solana-sdk 1.14.1", + "solana-sdk 1.14.2", "thiserror", "tiny-bip39", "uriparse", @@ -4594,7 +4594,7 @@ dependencies = [ [[package]] name = "solana-cli-config" -version = "1.14.1" +version = "1.14.2" dependencies = [ "dirs-next", "lazy_static", @@ -4602,13 +4602,13 @@ dependencies = [ "serde_derive", "serde_yaml", "solana-clap-utils", - "solana-sdk 1.14.1", + "solana-sdk 1.14.2", "url 2.2.2", ] [[package]] name = "solana-cli-output" -version = "1.14.1" +version = "1.14.2" dependencies = [ "Inflector", "base64 0.13.0", @@ -4625,7 +4625,7 @@ dependencies = [ "solana-clap-utils", "solana-cli-config", "solana-client", - "solana-sdk 1.14.1", + "solana-sdk 1.14.2", "solana-transaction-status", "solana-vote-program", "spl-memo", @@ -4633,7 +4633,7 @@ dependencies = [ [[package]] name = "solana-client" -version = "1.14.1" +version = "1.14.2" dependencies = [ "async-mutex", "async-trait", @@ -4669,7 +4669,7 @@ dependencies = [ "solana-measure", "solana-metrics", "solana-net-utils", - "solana-sdk 1.14.1", + "solana-sdk 1.14.2", "solana-streamer", "solana-transaction-status", "solana-version", @@ -4685,27 +4685,27 @@ dependencies = [ [[package]] name = "solana-compute-budget-program" -version = "1.14.1" +version = "1.14.2" dependencies = [ "solana-program-runtime", - "solana-sdk 1.14.1", + "solana-sdk 1.14.2", ] [[package]] name = "solana-config-program" -version = "1.14.1" +version = "1.14.2" dependencies = [ "bincode", "chrono", "serde", "serde_derive", "solana-program-runtime", - "solana-sdk 1.14.1", + "solana-sdk 1.14.2", ] [[package]] name = "solana-core" -version = "1.14.1" +version = "1.14.2" dependencies = [ "ahash", "base64 0.13.0", @@ -4733,8 +4733,8 @@ dependencies = [ "solana-bloom", "solana-client", "solana-entry", - "solana-frozen-abi 1.14.1", - "solana-frozen-abi-macro 1.14.1", + "solana-frozen-abi 1.14.2", + "solana-frozen-abi-macro 1.14.2", "solana-geyser-plugin-manager", "solana-gossip", "solana-ledger", @@ -4747,7 +4747,7 @@ dependencies = [ "solana-rayon-threadlimit", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.1", + "solana-sdk 1.14.2", "solana-send-transaction-service", "solana-streamer", "solana-transaction-status", @@ -4763,19 +4763,19 @@ dependencies = [ [[package]] name = "solana-download-utils" -version = "1.14.1" +version = "1.14.2" dependencies = [ "console", "indicatif", "log", "reqwest", "solana-runtime", - "solana-sdk 1.14.1", + "solana-sdk 1.14.2", ] [[package]] name = "solana-entry" -version = "1.14.1" +version = "1.14.2" dependencies = [ "bincode", "crossbeam-channel", @@ -4791,12 +4791,12 @@ dependencies = [ "solana-metrics", "solana-perf", "solana-rayon-threadlimit", - "solana-sdk 1.14.1", + "solana-sdk 1.14.2", ] [[package]] name = "solana-faucet" -version = "1.14.1" +version = "1.14.2" dependencies = [ "bincode", "byteorder 1.4.3", @@ -4807,9 +4807,9 @@ dependencies = [ "serde_derive", "solana-clap-utils", "solana-cli-config", - "solana-logger 1.14.1", + "solana-logger 1.14.2", "solana-metrics", - "solana-sdk 1.14.1", + "solana-sdk 1.14.2", "solana-version", "spl-memo", "thiserror", @@ -4840,7 +4840,7 @@ dependencies = [ [[package]] name = "solana-frozen-abi" -version = "1.14.1" +version = "1.14.2" dependencies = [ "ahash", "blake3", @@ -4865,7 +4865,7 @@ dependencies = [ "serde_derive", "serde_json", "sha2 0.10.2", - "solana-frozen-abi-macro 1.14.1", + "solana-frozen-abi-macro 1.14.2", "subtle", "thiserror", ] @@ -4884,7 +4884,7 @@ dependencies = [ [[package]] name = "solana-frozen-abi-macro" -version = "1.14.1" +version = "1.14.2" dependencies = [ "proc-macro2 1.0.41", "quote 1.0.18", @@ -4894,26 +4894,26 @@ dependencies = [ [[package]] name = "solana-genesis-utils" -version = "1.14.1" +version = "1.14.2" dependencies = [ "solana-download-utils", "solana-runtime", - "solana-sdk 1.14.1", + "solana-sdk 1.14.2", ] [[package]] name = "solana-geyser-plugin-interface" -version = "1.14.1" +version = "1.14.2" dependencies = [ "log", - "solana-sdk 1.14.1", + "solana-sdk 1.14.2", "solana-transaction-status", "thiserror", ] [[package]] name = "solana-geyser-plugin-manager" -version = "1.14.1" +version = "1.14.2" dependencies = [ "bs58", "crossbeam-channel", @@ -4926,14 +4926,14 @@ dependencies = [ "solana-metrics", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.1", + "solana-sdk 1.14.2", "solana-transaction-status", "thiserror", ] [[package]] name = "solana-gossip" -version = "1.14.1" +version = "1.14.2" dependencies = [ "bincode", "bv", @@ -4957,17 +4957,17 @@ dependencies = [ "solana-clap-utils", "solana-client", "solana-entry", - "solana-frozen-abi 1.14.1", - "solana-frozen-abi-macro 1.14.1", + "solana-frozen-abi 1.14.2", + "solana-frozen-abi-macro 1.14.2", "solana-ledger", - "solana-logger 1.14.1", + "solana-logger 1.14.2", "solana-measure", "solana-metrics", "solana-net-utils", "solana-perf", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.14.1", + "solana-sdk 1.14.2", "solana-streamer", "solana-version", "solana-vote-program", @@ -4976,7 +4976,7 @@ dependencies = [ [[package]] name = "solana-ledger" -version = "1.14.1" +version = "1.14.2" dependencies = [ "bincode", "bitflags", @@ -5007,15 +5007,15 @@ dependencies = [ "solana-account-decoder", "solana-bpf-loader-program", "solana-entry", - "solana-frozen-abi 1.14.1", - "solana-frozen-abi-macro 1.14.1", + "solana-frozen-abi 1.14.2", + "solana-frozen-abi-macro 1.14.2", "solana-measure", "solana-metrics", "solana-perf", "solana-program-runtime", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.14.1", + "solana-sdk 1.14.2", "solana-stake-program", "solana-storage-bigtable", "solana-storage-proto", @@ -5044,7 +5044,7 @@ dependencies = [ [[package]] name = "solana-logger" -version = "1.14.1" +version = "1.14.2" dependencies = [ "env_logger", "lazy_static", @@ -5053,36 +5053,36 @@ dependencies = [ [[package]] name = "solana-measure" -version = "1.14.1" +version = "1.14.2" dependencies = [ "log", - "solana-sdk 1.14.1", + "solana-sdk 1.14.2", ] [[package]] name = "solana-merkle-tree" -version = "1.14.1" +version = "1.14.2" dependencies = [ "fast-math", "matches", - "solana-program 1.14.1", + "solana-program 1.14.2", ] [[package]] name = "solana-metrics" -version = "1.14.1" +version = "1.14.2" dependencies = [ "crossbeam-channel", "gethostname", "lazy_static", "log", "reqwest", - "solana-sdk 1.14.1", + "solana-sdk 1.14.2", ] [[package]] name = "solana-net-utils" -version = "1.14.1" +version = "1.14.2" dependencies = [ "bincode", "clap 3.1.6", @@ -5093,8 +5093,8 @@ dependencies = [ "serde", "serde_derive", "socket2", - "solana-logger 1.14.1", - "solana-sdk 1.14.1", + "solana-logger 1.14.2", + "solana-sdk 1.14.2", "solana-version", "tokio", "url 2.2.2", @@ -5102,7 +5102,7 @@ dependencies = [ [[package]] name = "solana-perf" -version = "1.14.1" +version = "1.14.2" dependencies = [ "ahash", "bincode", @@ -5121,13 +5121,13 @@ dependencies = [ "serde", "solana-metrics", "solana-rayon-threadlimit", - "solana-sdk 1.14.1", + "solana-sdk 1.14.2", "solana-vote-program", ] [[package]] name = "solana-poh" -version = "1.14.1" +version = "1.14.2" dependencies = [ "core_affinity", "crossbeam-channel", @@ -5137,7 +5137,7 @@ dependencies = [ "solana-measure", "solana-metrics", "solana-runtime", - "solana-sdk 1.14.1", + "solana-sdk 1.14.2", "solana-sys-tuner", "thiserror", ] @@ -5186,7 +5186,7 @@ dependencies = [ [[package]] name = "solana-program" -version = "1.14.1" +version = "1.14.2" dependencies = [ "base64 0.13.0", "bincode", @@ -5222,9 +5222,9 @@ dependencies = [ "serde_json", "sha2 0.10.2", "sha3 0.10.1", - "solana-frozen-abi 1.14.1", - "solana-frozen-abi-macro 1.14.1", - "solana-sdk-macro 1.14.1", + "solana-frozen-abi 1.14.2", + "solana-frozen-abi-macro 1.14.2", + "solana-sdk-macro 1.14.2", "thiserror", "tiny-bip39", "wasm-bindgen", @@ -5233,7 +5233,7 @@ dependencies = [ [[package]] name = "solana-program-runtime" -version = "1.14.1" +version = "1.14.2" dependencies = [ "base64 0.13.0", "bincode", @@ -5247,17 +5247,17 @@ dependencies = [ "num-traits", "rustc_version", "serde", - "solana-frozen-abi 1.14.1", - "solana-frozen-abi-macro 1.14.1", + "solana-frozen-abi 1.14.2", + "solana-frozen-abi-macro 1.14.2", "solana-measure", "solana-metrics", - "solana-sdk 1.14.1", + "solana-sdk 1.14.2", "thiserror", ] [[package]] name = "solana-program-test" -version = "1.14.1" +version = "1.14.2" dependencies = [ "assert_matches", "async-trait", @@ -5269,10 +5269,10 @@ dependencies = [ "solana-banks-client", "solana-banks-server", "solana-bpf-loader-program", - "solana-logger 1.14.1", + "solana-logger 1.14.2", "solana-program-runtime", "solana-runtime", - "solana-sdk 1.14.1", + "solana-sdk 1.14.2", "solana-vote-program", "thiserror", "tokio", @@ -5280,7 +5280,7 @@ dependencies = [ [[package]] name = "solana-rayon-threadlimit" -version = "1.14.1" +version = "1.14.2" dependencies = [ "lazy_static", "num_cpus", @@ -5288,7 +5288,7 @@ dependencies = [ [[package]] name = "solana-remote-wallet" -version = "1.14.1" +version = "1.14.2" dependencies = [ "console", "dialoguer", @@ -5298,14 +5298,14 @@ dependencies = [ "parking_lot 0.12.1", "qstring", "semver", - "solana-sdk 1.14.1", + "solana-sdk 1.14.2", "thiserror", "uriparse", ] [[package]] name = "solana-rpc" -version = "1.14.1" +version = "1.14.2" dependencies = [ "base64 0.13.0", "bincode", @@ -5338,7 +5338,7 @@ dependencies = [ "solana-poh", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.14.1", + "solana-sdk 1.14.2", "solana-send-transaction-service", "solana-stake-program", "solana-storage-bigtable", @@ -5356,7 +5356,7 @@ dependencies = [ [[package]] name = "solana-runtime" -version = "1.14.1" +version = "1.14.2" dependencies = [ "arrayref", "bincode", @@ -5392,17 +5392,17 @@ dependencies = [ "solana-bucket-map", "solana-compute-budget-program", "solana-config-program", - "solana-frozen-abi 1.14.1", - "solana-frozen-abi-macro 1.14.1", + "solana-frozen-abi 1.14.2", + "solana-frozen-abi-macro 1.14.2", "solana-measure", "solana-metrics", "solana-program-runtime", "solana-rayon-threadlimit", - "solana-sdk 1.14.1", + "solana-sdk 1.14.2", "solana-stake-program", "solana-vote-program", "solana-zk-token-proof-program", - "solana-zk-token-sdk 1.14.1", + "solana-zk-token-sdk 1.14.2", "strum", "strum_macros", "symlink", @@ -5465,7 +5465,7 @@ dependencies = [ [[package]] name = "solana-sdk" -version = "1.14.1" +version = "1.14.2" dependencies = [ "assert_matches", "base64 0.13.0", @@ -5502,11 +5502,11 @@ dependencies = [ "serde_json", "sha2 0.10.2", "sha3 0.10.1", - "solana-frozen-abi 1.14.1", - "solana-frozen-abi-macro 1.14.1", - "solana-logger 1.14.1", - "solana-program 1.14.1", - "solana-sdk-macro 1.14.1", + "solana-frozen-abi 1.14.2", + "solana-frozen-abi-macro 1.14.2", + "solana-logger 1.14.2", + "solana-program 1.14.2", + "solana-sdk-macro 1.14.2", "thiserror", "uriparse", "wasm-bindgen", @@ -5527,7 +5527,7 @@ dependencies = [ [[package]] name = "solana-sdk-macro" -version = "1.14.1" +version = "1.14.2" dependencies = [ "bs58", "proc-macro2 1.0.41", @@ -5538,7 +5538,7 @@ dependencies = [ [[package]] name = "solana-send-transaction-service" -version = "1.14.1" +version = "1.14.2" dependencies = [ "crossbeam-channel", "log", @@ -5546,12 +5546,12 @@ dependencies = [ "solana-measure", "solana-metrics", "solana-runtime", - "solana-sdk 1.14.1", + "solana-sdk 1.14.2", ] [[package]] name = "solana-stake-program" -version = "1.14.1" +version = "1.14.2" dependencies = [ "bincode", "log", @@ -5561,18 +5561,18 @@ dependencies = [ "serde", "serde_derive", "solana-config-program", - "solana-frozen-abi 1.14.1", - "solana-frozen-abi-macro 1.14.1", + "solana-frozen-abi 1.14.2", + "solana-frozen-abi-macro 1.14.2", "solana-metrics", "solana-program-runtime", - "solana-sdk 1.14.1", + "solana-sdk 1.14.2", "solana-vote-program", "thiserror", ] [[package]] name = "solana-storage-bigtable" -version = "1.14.1" +version = "1.14.2" dependencies = [ "backoff", "bincode", @@ -5593,7 +5593,7 @@ dependencies = [ "serde_derive", "smpl_jwt", "solana-metrics", - "solana-sdk 1.14.1", + "solana-sdk 1.14.2", "solana-storage-proto", "solana-transaction-status", "thiserror", @@ -5604,7 +5604,7 @@ dependencies = [ [[package]] name = "solana-storage-proto" -version = "1.14.1" +version = "1.14.2" dependencies = [ "bincode", "bs58", @@ -5612,14 +5612,14 @@ dependencies = [ "protobuf-src", "serde", "solana-account-decoder", - "solana-sdk 1.14.1", + "solana-sdk 1.14.2", "solana-transaction-status", "tonic-build 0.8.0", ] [[package]] name = "solana-streamer" -version = "1.14.1" +version = "1.14.2" dependencies = [ "crossbeam-channel", "futures-util", @@ -5638,7 +5638,7 @@ dependencies = [ "rustls 0.20.6", "solana-metrics", "solana-perf", - "solana-sdk 1.14.1", + "solana-sdk 1.14.2", "thiserror", "tokio", "x509-parser", @@ -5646,13 +5646,13 @@ dependencies = [ [[package]] name = "solana-sys-tuner" -version = "1.14.1" +version = "1.14.2" dependencies = [ "clap 2.33.3", "libc", "log", "nix", - "solana-logger 1.14.1", + "solana-logger 1.14.2", "solana-version", "sysctl", "unix_socket2", @@ -5661,7 +5661,7 @@ dependencies = [ [[package]] name = "solana-test-validator" -version = "1.14.1" +version = "1.14.2" dependencies = [ "base64 0.13.0", "log", @@ -5672,20 +5672,20 @@ dependencies = [ "solana-core", "solana-gossip", "solana-ledger", - "solana-logger 1.14.1", + "solana-logger 1.14.2", "solana-net-utils", "solana-program-runtime", "solana-program-test", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.1", + "solana-sdk 1.14.2", "solana-streamer", "tokio", ] [[package]] name = "solana-transaction-status" -version = "1.14.1" +version = "1.14.2" dependencies = [ "Inflector", "base64 0.13.0", @@ -5700,7 +5700,7 @@ dependencies = [ "solana-account-decoder", "solana-measure", "solana-metrics", - "solana-sdk 1.14.1", + "solana-sdk 1.14.2", "solana-vote-program", "spl-associated-token-account", "spl-memo", @@ -5711,7 +5711,7 @@ dependencies = [ [[package]] name = "solana-validator" -version = "1.14.1" +version = "1.14.2" dependencies = [ "chrono", "clap 2.33.3", @@ -5742,14 +5742,14 @@ dependencies = [ "solana-genesis-utils", "solana-gossip", "solana-ledger", - "solana-logger 1.14.1", + "solana-logger 1.14.2", "solana-metrics", "solana-net-utils", "solana-perf", "solana-poh", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.1", + "solana-sdk 1.14.2", "solana-send-transaction-service", "solana-storage-bigtable", "solana-streamer", @@ -5762,21 +5762,21 @@ dependencies = [ [[package]] name = "solana-version" -version = "1.14.1" +version = "1.14.2" dependencies = [ "log", "rustc_version", "semver", "serde", "serde_derive", - "solana-frozen-abi 1.14.1", - "solana-frozen-abi-macro 1.14.1", - "solana-sdk 1.14.1", + "solana-frozen-abi 1.14.2", + "solana-frozen-abi-macro 1.14.2", + "solana-sdk 1.14.2", ] [[package]] name = "solana-vote-program" -version = "1.14.1" +version = "1.14.2" dependencies = [ "bincode", "log", @@ -5785,25 +5785,25 @@ dependencies = [ "rustc_version", "serde", "serde_derive", - "solana-frozen-abi 1.14.1", - "solana-frozen-abi-macro 1.14.1", + "solana-frozen-abi 1.14.2", + "solana-frozen-abi-macro 1.14.2", "solana-metrics", "solana-program-runtime", - "solana-sdk 1.14.1", + "solana-sdk 1.14.2", "thiserror", ] [[package]] name = "solana-zk-token-proof-program" -version = "1.14.1" +version = "1.14.2" dependencies = [ "bytemuck", "getrandom 0.1.14", "num-derive", "num-traits", "solana-program-runtime", - "solana-sdk 1.14.1", - "solana-zk-token-sdk 1.14.1", + "solana-sdk 1.14.2", + "solana-zk-token-sdk 1.14.2", ] [[package]] @@ -5838,7 +5838,7 @@ dependencies = [ [[package]] name = "solana-zk-token-sdk" -version = "1.14.1" +version = "1.14.2" dependencies = [ "aes-gcm-siv", "arrayref", @@ -5858,8 +5858,8 @@ dependencies = [ "serde", "serde_json", "sha3 0.9.1", - "solana-program 1.14.1", - "solana-sdk 1.14.1", + "solana-program 1.14.2", + "solana-sdk 1.14.2", "subtle", "thiserror", "zeroize", diff --git a/programs/bpf/Cargo.toml b/programs/bpf/Cargo.toml index 9fe4c8bbf1bf83..531953f651e377 100644 --- a/programs/bpf/Cargo.toml +++ b/programs/bpf/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "solana-bpf-programs" description = "Blockchain, Rebuilt for Scale" -version = "1.14.1" +version = "1.14.2" documentation = "https://docs.rs/solana" homepage = "https://solana.com/" readme = "README.md" @@ -26,22 +26,22 @@ itertools = "0.10.1" log = "0.4.11" miow = "0.3.6" net2 = "0.2.37" -solana-account-decoder = { path = "../../account-decoder", version = "=1.14.1" } -solana-bpf-loader-program = { path = "../bpf_loader", version = "=1.14.1" } -solana-bpf-rust-invoke = { path = "rust/invoke", version = "=1.14.1" } -solana-bpf-rust-realloc = { path = "rust/realloc", version = "=1.14.1" } -solana-bpf-rust-realloc-invoke = { path = "rust/realloc_invoke", version = "=1.14.1" } -solana-cli-output = { path = "../../cli-output", version = "=1.14.1" } -solana-logger = { path = "../../logger", version = "=1.14.1" } -solana-measure = { path = "../../measure", version = "=1.14.1" } -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.1" } -solana-runtime = { path = "../../runtime", version = "=1.14.1" } -solana-sdk = { path = "../../sdk", version = "=1.14.1" } -solana-transaction-status = { path = "../../transaction-status", version = "=1.14.1" } +solana-account-decoder = { path = "../../account-decoder", version = "=1.14.2" } +solana-bpf-loader-program = { path = "../bpf_loader", version = "=1.14.2" } +solana-bpf-rust-invoke = { path = "rust/invoke", version = "=1.14.2" } +solana-bpf-rust-realloc = { path = "rust/realloc", version = "=1.14.2" } +solana-bpf-rust-realloc-invoke = { path = "rust/realloc_invoke", version = "=1.14.2" } +solana-cli-output = { path = "../../cli-output", version = "=1.14.2" } +solana-logger = { path = "../../logger", version = "=1.14.2" } +solana-measure = { path = "../../measure", version = "=1.14.2" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.2" } +solana-runtime = { path = "../../runtime", version = "=1.14.2" } +solana-sdk = { path = "../../sdk", version = "=1.14.2" } +solana-transaction-status = { path = "../../transaction-status", version = "=1.14.2" } solana_rbpf = "=0.2.31" [dev-dependencies] -solana-ledger = { path = "../../ledger", version = "=1.14.1" } +solana-ledger = { path = "../../ledger", version = "=1.14.2" } [[bench]] name = "bpf_loader" diff --git a/programs/bpf/rust/128bit/Cargo.toml b/programs/bpf/rust/128bit/Cargo.toml index 1b4bb280281112..e3a65e29464683 100644 --- a/programs/bpf/rust/128bit/Cargo.toml +++ b/programs/bpf/rust/128bit/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-128bit" -version = "1.14.1" +version = "1.14.2" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ documentation = "https://docs.rs/solana-bpf-rust-128bit" edition = "2021" [dependencies] -solana-bpf-rust-128bit-dep = { path = "../128bit_dep", version = "=1.14.1" } -solana-program = { path = "../../../../sdk/program", version = "=1.14.1" } +solana-bpf-rust-128bit-dep = { path = "../128bit_dep", version = "=1.14.2" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.2" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/128bit_dep/Cargo.toml b/programs/bpf/rust/128bit_dep/Cargo.toml index 0fcbac51286021..9a5406f80f98de 100644 --- a/programs/bpf/rust/128bit_dep/Cargo.toml +++ b/programs/bpf/rust/128bit_dep/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-128bit-dep" -version = "1.14.1" +version = "1.14.2" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-128bit-dep" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.1" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.2" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/bpf/rust/alloc/Cargo.toml b/programs/bpf/rust/alloc/Cargo.toml index 0952d40e55c86e..3491bd1c425dfe 100644 --- a/programs/bpf/rust/alloc/Cargo.toml +++ b/programs/bpf/rust/alloc/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-alloc" -version = "1.14.1" +version = "1.14.2" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-alloc" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.1" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.2" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/call_depth/Cargo.toml b/programs/bpf/rust/call_depth/Cargo.toml index 6df3cf16cc1295..183c8ec8c62a8e 100644 --- a/programs/bpf/rust/call_depth/Cargo.toml +++ b/programs/bpf/rust/call_depth/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-call-depth" -version = "1.14.1" +version = "1.14.2" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-call-depth" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.1" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.2" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/caller_access/Cargo.toml b/programs/bpf/rust/caller_access/Cargo.toml index 5700379d707e71..7add62284f77bd 100644 --- a/programs/bpf/rust/caller_access/Cargo.toml +++ b/programs/bpf/rust/caller_access/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-caller-access" -version = "1.14.1" +version = "1.14.2" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-caller-access" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.1" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.2" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/curve25519/Cargo.toml b/programs/bpf/rust/curve25519/Cargo.toml index 5bbd42a9d725af..ef533b5fa44210 100644 --- a/programs/bpf/rust/curve25519/Cargo.toml +++ b/programs/bpf/rust/curve25519/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-curve25519" -version = "1.14.1" +version = "1.14.2" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ documentation = "https://docs.rs/solana-bpf-rust-zktoken_crypto" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.1" } -solana-zk-token-sdk = { path = "../../../../zk-token-sdk", version = "=1.14.1" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.2" } +solana-zk-token-sdk = { path = "../../../../zk-token-sdk", version = "=1.14.2" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/custom_heap/Cargo.toml b/programs/bpf/rust/custom_heap/Cargo.toml index 75bd87aec91aa5..7dece9cdad5d41 100644 --- a/programs/bpf/rust/custom_heap/Cargo.toml +++ b/programs/bpf/rust/custom_heap/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-custom-heap" -version = "1.14.1" +version = "1.14.2" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-custom-heap" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.1" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.2" } [features] default = ["custom-heap"] diff --git a/programs/bpf/rust/dep_crate/Cargo.toml b/programs/bpf/rust/dep_crate/Cargo.toml index 4ce366df7720c7..65b1f4ab6e6c14 100644 --- a/programs/bpf/rust/dep_crate/Cargo.toml +++ b/programs/bpf/rust/dep_crate/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-dep-crate" -version = "1.14.1" +version = "1.14.2" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,8 +12,8 @@ edition = "2021" [dependencies] byteorder = { version = "1", default-features = false } # list of crates which must be buildable for bpf programs -solana-address-lookup-table-program = { path = "../../../../programs/address-lookup-table", version = "=1.14.1" } -solana-program = { path = "../../../../sdk/program", version = "=1.14.1" } +solana-address-lookup-table-program = { path = "../../../../programs/address-lookup-table", version = "=1.14.2" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.2" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/deprecated_loader/Cargo.toml b/programs/bpf/rust/deprecated_loader/Cargo.toml index eab18f9d1fd7b7..4c1ce8e40e78d5 100644 --- a/programs/bpf/rust/deprecated_loader/Cargo.toml +++ b/programs/bpf/rust/deprecated_loader/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-deprecated-loader" -version = "1.14.1" +version = "1.14.2" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-deprecated-loader" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.1" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.2" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/dup_accounts/Cargo.toml b/programs/bpf/rust/dup_accounts/Cargo.toml index 7cabb0d8c2e547..781415c5f4996b 100644 --- a/programs/bpf/rust/dup_accounts/Cargo.toml +++ b/programs/bpf/rust/dup_accounts/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-dup-accounts" -version = "1.14.1" +version = "1.14.2" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-dup-accounts" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.1" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.2" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/error_handling/Cargo.toml b/programs/bpf/rust/error_handling/Cargo.toml index 92a6e6a8ac7bad..0296faa43e9f3e 100644 --- a/programs/bpf/rust/error_handling/Cargo.toml +++ b/programs/bpf/rust/error_handling/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-error-handling" -version = "1.14.1" +version = "1.14.2" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,7 +12,7 @@ edition = "2021" [dependencies] num-derive = "0.3" num-traits = "0.2" -solana-program = { path = "../../../../sdk/program", version = "=1.14.1" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.2" } thiserror = "1.0" [lib] diff --git a/programs/bpf/rust/external_spend/Cargo.toml b/programs/bpf/rust/external_spend/Cargo.toml index 05d1c5d0ac5ad9..2a8aae8337727a 100644 --- a/programs/bpf/rust/external_spend/Cargo.toml +++ b/programs/bpf/rust/external_spend/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-external-spend" -version = "1.14.1" +version = "1.14.2" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-external-spend" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.1" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.2" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/finalize/Cargo.toml b/programs/bpf/rust/finalize/Cargo.toml index 4db31add384929..412541a5674487 100644 --- a/programs/bpf/rust/finalize/Cargo.toml +++ b/programs/bpf/rust/finalize/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-finalize" -version = "1.14.1" +version = "1.14.2" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-finalize" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.1" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.2" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/get_minimum_delegation/Cargo.toml b/programs/bpf/rust/get_minimum_delegation/Cargo.toml index c257419615e623..e58978d05350f0 100644 --- a/programs/bpf/rust/get_minimum_delegation/Cargo.toml +++ b/programs/bpf/rust/get_minimum_delegation/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-get-minimum-delegation" -version = "1.14.1" +version = "1.14.2" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-get-minimum-delegation" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.1" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.2" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/inner_instruction_alignment_check/Cargo.toml b/programs/bpf/rust/inner_instruction_alignment_check/Cargo.toml index df19dd65f30b1c..932d3fbef2da94 100644 --- a/programs/bpf/rust/inner_instruction_alignment_check/Cargo.toml +++ b/programs/bpf/rust/inner_instruction_alignment_check/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-inner_instruction_alignment_check" -version = "1.14.1" +version = "1.14.2" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-inner_instruction_alignment_che edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.1" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.2" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/instruction_introspection/Cargo.toml b/programs/bpf/rust/instruction_introspection/Cargo.toml index d7348ea0d52897..05850b89291c55 100644 --- a/programs/bpf/rust/instruction_introspection/Cargo.toml +++ b/programs/bpf/rust/instruction_introspection/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-instruction-introspection" -version = "1.14.1" +version = "1.14.2" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-instruction-introspection" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.1" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.2" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/invoke/Cargo.toml b/programs/bpf/rust/invoke/Cargo.toml index 60d24677950a52..b150a506642794 100644 --- a/programs/bpf/rust/invoke/Cargo.toml +++ b/programs/bpf/rust/invoke/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-invoke" -version = "1.14.1" +version = "1.14.2" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -15,7 +15,7 @@ program = [] [dependencies] solana-bpf-rust-invoked = { path = "../invoked", default-features = false } -solana-program = { path = "../../../../sdk/program", version = "=1.14.1" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.2" } [lib] crate-type = ["lib", "cdylib"] diff --git a/programs/bpf/rust/invoke_and_error/Cargo.toml b/programs/bpf/rust/invoke_and_error/Cargo.toml index 426c25f3ae1a1b..15f33c2bb2708c 100644 --- a/programs/bpf/rust/invoke_and_error/Cargo.toml +++ b/programs/bpf/rust/invoke_and_error/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-invoke-and-error" -version = "1.14.1" +version = "1.14.2" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-invoke-and-error" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.1" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.2" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/invoke_and_ok/Cargo.toml b/programs/bpf/rust/invoke_and_ok/Cargo.toml index 8d2b1d60b8847e..b74dd7fe125753 100644 --- a/programs/bpf/rust/invoke_and_ok/Cargo.toml +++ b/programs/bpf/rust/invoke_and_ok/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-invoke-and-ok" -version = "1.14.1" +version = "1.14.2" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-invoke-and-ok" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.1" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.2" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/invoke_and_return/Cargo.toml b/programs/bpf/rust/invoke_and_return/Cargo.toml index 4e7b45ef8093e9..4f2918cc5037b8 100644 --- a/programs/bpf/rust/invoke_and_return/Cargo.toml +++ b/programs/bpf/rust/invoke_and_return/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-invoke-and-return" -version = "1.14.1" +version = "1.14.2" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-invoke-and-return" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.1" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.2" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/invoked/Cargo.toml b/programs/bpf/rust/invoked/Cargo.toml index a06b449aa67ce6..945f9cf529dd47 100644 --- a/programs/bpf/rust/invoked/Cargo.toml +++ b/programs/bpf/rust/invoked/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-invoked" -version = "1.14.1" +version = "1.14.2" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,7 +14,7 @@ default = ["program"] program = [] [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.1" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.2" } [lib] crate-type = ["lib", "cdylib"] diff --git a/programs/bpf/rust/iter/Cargo.toml b/programs/bpf/rust/iter/Cargo.toml index e2c7be744ea0b1..42b6c5213a92d5 100644 --- a/programs/bpf/rust/iter/Cargo.toml +++ b/programs/bpf/rust/iter/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-iter" -version = "1.14.1" +version = "1.14.2" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-iter" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.1" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.2" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/log_data/Cargo.toml b/programs/bpf/rust/log_data/Cargo.toml index 735fa84e328bac..0cb9478993dabc 100644 --- a/programs/bpf/rust/log_data/Cargo.toml +++ b/programs/bpf/rust/log_data/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-log-data" -version = "1.14.1" +version = "1.14.2" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-log-data" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.1" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.2" } [features] default = ["program"] diff --git a/programs/bpf/rust/many_args/Cargo.toml b/programs/bpf/rust/many_args/Cargo.toml index 7bbb96f085a9c1..fd7dd9529c047f 100644 --- a/programs/bpf/rust/many_args/Cargo.toml +++ b/programs/bpf/rust/many_args/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-many-args" -version = "1.14.1" +version = "1.14.2" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ documentation = "https://docs.rs/solana-bpf-rust-many-args" edition = "2021" [dependencies] -solana-bpf-rust-many-args-dep = { path = "../many_args_dep", version = "=1.14.1" } -solana-program = { path = "../../../../sdk/program", version = "=1.14.1" } +solana-bpf-rust-many-args-dep = { path = "../many_args_dep", version = "=1.14.2" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.2" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/many_args_dep/Cargo.toml b/programs/bpf/rust/many_args_dep/Cargo.toml index b91a508db4ebdb..ba3c0fc07e26e5 100644 --- a/programs/bpf/rust/many_args_dep/Cargo.toml +++ b/programs/bpf/rust/many_args_dep/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-many-args-dep" -version = "1.14.1" +version = "1.14.2" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-many-args-dep" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.1" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.2" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/bpf/rust/mem/Cargo.toml b/programs/bpf/rust/mem/Cargo.toml index 8f91576cd08fa3..9a5915e938cd20 100644 --- a/programs/bpf/rust/mem/Cargo.toml +++ b/programs/bpf/rust/mem/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-mem" -version = "1.14.1" +version = "1.14.2" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,12 +13,12 @@ edition = "2021" no-entrypoint = [] [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.1" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.2" } [dev-dependencies] -solana-program-runtime = { path = "../../../../program-runtime", version = "=1.14.1" } -solana-program-test = { path = "../../../../program-test", version = "=1.14.1" } -solana-sdk = { path = "../../../../sdk", version = "=1.14.1" } +solana-program-runtime = { path = "../../../../program-runtime", version = "=1.14.2" } +solana-program-test = { path = "../../../../program-test", version = "=1.14.2" } +solana-sdk = { path = "../../../../sdk", version = "=1.14.2" } [lib] crate-type = ["cdylib", "lib"] diff --git a/programs/bpf/rust/membuiltins/Cargo.toml b/programs/bpf/rust/membuiltins/Cargo.toml index 15ef256720526f..9a4ddcb0446c8e 100644 --- a/programs/bpf/rust/membuiltins/Cargo.toml +++ b/programs/bpf/rust/membuiltins/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-membuiltins" -version = "1.14.1" +version = "1.14.2" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ documentation = "https://docs.rs/solana-bpf-rust-mem" edition = "2021" [dependencies] -solana-bpf-rust-mem = { path = "../mem", version = "=1.14.1", features = [ "no-entrypoint" ] } -solana-program = { path = "../../../../sdk/program", version = "=1.14.1" } +solana-bpf-rust-mem = { path = "../mem", version = "=1.14.2", features = [ "no-entrypoint" ] } +solana-program = { path = "../../../../sdk/program", version = "=1.14.2" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/noop/Cargo.toml b/programs/bpf/rust/noop/Cargo.toml index 41708def2571e4..37730fe4cad3b4 100644 --- a/programs/bpf/rust/noop/Cargo.toml +++ b/programs/bpf/rust/noop/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-noop" -version = "1.14.1" +version = "1.14.2" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-noop" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.1" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.2" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/panic/Cargo.toml b/programs/bpf/rust/panic/Cargo.toml index 7a5a41ada3f8ae..6e5a7d6782d8eb 100644 --- a/programs/bpf/rust/panic/Cargo.toml +++ b/programs/bpf/rust/panic/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-panic" -version = "1.14.1" +version = "1.14.2" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-panic" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.1" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.2" } [features] default = ["custom-panic"] diff --git a/programs/bpf/rust/param_passing/Cargo.toml b/programs/bpf/rust/param_passing/Cargo.toml index 59dbe7d46e4599..9bd5fed63a5137 100644 --- a/programs/bpf/rust/param_passing/Cargo.toml +++ b/programs/bpf/rust/param_passing/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-param-passing" -version = "1.14.1" +version = "1.14.2" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ documentation = "https://docs.rs/solana-bpf-rust-param-passing" edition = "2021" [dependencies] -solana-bpf-rust-param-passing-dep = { path = "../param_passing_dep", version = "=1.14.1" } -solana-program = { path = "../../../../sdk/program", version = "=1.14.1" } +solana-bpf-rust-param-passing-dep = { path = "../param_passing_dep", version = "=1.14.2" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.2" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/param_passing_dep/Cargo.toml b/programs/bpf/rust/param_passing_dep/Cargo.toml index 1230d45f03c0eb..4e775bd588dffc 100644 --- a/programs/bpf/rust/param_passing_dep/Cargo.toml +++ b/programs/bpf/rust/param_passing_dep/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-param-passing-dep" -version = "1.14.1" +version = "1.14.2" description = "Solana BPF program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-param-passing-dep" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.1" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.2" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/bpf/rust/rand/Cargo.toml b/programs/bpf/rust/rand/Cargo.toml index f82e943e8108fa..2bacfe4d26f976 100644 --- a/programs/bpf/rust/rand/Cargo.toml +++ b/programs/bpf/rust/rand/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-rand" -version = "1.14.1" +version = "1.14.2" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,7 +12,7 @@ edition = "2021" [dependencies] getrandom = { version = "0.1.14", features = ["dummy"] } rand = "0.7" -solana-program = { path = "../../../../sdk/program", version = "=1.14.1" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.2" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/realloc/Cargo.toml b/programs/bpf/rust/realloc/Cargo.toml index a19b6a724a5aa8..99798dfaf8658b 100644 --- a/programs/bpf/rust/realloc/Cargo.toml +++ b/programs/bpf/rust/realloc/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-realloc" -version = "1.14.1" +version = "1.14.2" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,7 +14,7 @@ default = ["program"] program = [] [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.1" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.2" } [lib] crate-type = ["lib", "cdylib"] diff --git a/programs/bpf/rust/realloc_invoke/Cargo.toml b/programs/bpf/rust/realloc_invoke/Cargo.toml index 0bff157baf3f4d..787288c0c349a4 100644 --- a/programs/bpf/rust/realloc_invoke/Cargo.toml +++ b/programs/bpf/rust/realloc_invoke/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-realloc-invoke" -version = "1.14.1" +version = "1.14.2" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,8 +14,8 @@ default = ["program"] program = [] [dependencies] -solana-bpf-rust-realloc = { path = "../realloc", version = "=1.14.1", default-features = false } -solana-program = { path = "../../../../sdk/program", version = "=1.14.1" } +solana-bpf-rust-realloc = { path = "../realloc", version = "=1.14.2", default-features = false } +solana-program = { path = "../../../../sdk/program", version = "=1.14.2" } [lib] crate-type = ["lib", "cdylib"] diff --git a/programs/bpf/rust/ro_account_modify/Cargo.toml b/programs/bpf/rust/ro_account_modify/Cargo.toml index 2cef2de8ecccb0..9cd43785a19358 100644 --- a/programs/bpf/rust/ro_account_modify/Cargo.toml +++ b/programs/bpf/rust/ro_account_modify/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-ro-account_modify" -version = "1.14.1" +version = "1.14.2" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-ro-modify" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.1" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.2" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/ro_modify/Cargo.toml b/programs/bpf/rust/ro_modify/Cargo.toml index 074cee35137d87..e45ef4012fa1f8 100644 --- a/programs/bpf/rust/ro_modify/Cargo.toml +++ b/programs/bpf/rust/ro_modify/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-ro-modify" -version = "1.14.1" +version = "1.14.2" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-ro-modify" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.1" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.2" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/sanity/Cargo.toml b/programs/bpf/rust/sanity/Cargo.toml index 90ce599546ba92..93cb814768b476 100644 --- a/programs/bpf/rust/sanity/Cargo.toml +++ b/programs/bpf/rust/sanity/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-sanity" -version = "1.14.1" +version = "1.14.2" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,12 +13,12 @@ edition = "2021" test-bpf = [] [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.1" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.2" } [dev-dependencies] -solana-program-runtime = { path = "../../../../program-runtime", version = "=1.14.1" } -solana-program-test = { path = "../../../../program-test", version = "=1.14.1" } -solana-sdk = { path = "../../../../sdk", version = "=1.14.1" } +solana-program-runtime = { path = "../../../../program-runtime", version = "=1.14.2" } +solana-program-test = { path = "../../../../program-test", version = "=1.14.2" } +solana-sdk = { path = "../../../../sdk", version = "=1.14.2" } [lib] crate-type = ["cdylib", "lib"] diff --git a/programs/bpf/rust/secp256k1_recover/Cargo.toml b/programs/bpf/rust/secp256k1_recover/Cargo.toml index 1cfc97d920fb7f..174aabf3c8cf99 100644 --- a/programs/bpf/rust/secp256k1_recover/Cargo.toml +++ b/programs/bpf/rust/secp256k1_recover/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-secp256k1-recover" -version = "1.14.1" +version = "1.14.2" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -11,7 +11,7 @@ edition = "2021" [dependencies] libsecp256k1 = { version = "0.7.0", default-features = false } -solana-program = { path = "../../../../sdk/program", version = "=1.14.1" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.2" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/sha/Cargo.toml b/programs/bpf/rust/sha/Cargo.toml index 5ca2d2a6abfe68..15ae0b4cffac13 100644 --- a/programs/bpf/rust/sha/Cargo.toml +++ b/programs/bpf/rust/sha/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-sha" -version = "1.14.1" +version = "1.14.2" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -11,7 +11,7 @@ edition = "2021" [dependencies] blake3 = "1.0.0" -solana-program = { path = "../../../../sdk/program", version = "=1.14.1" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.2" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/sibling_inner_instruction/Cargo.toml b/programs/bpf/rust/sibling_inner_instruction/Cargo.toml index 12b7079311b0a3..8a1cc6506b9fbf 100644 --- a/programs/bpf/rust/sibling_inner_instruction/Cargo.toml +++ b/programs/bpf/rust/sibling_inner_instruction/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-sibling_inner-instructions" -version = "1.14.1" +version = "1.14.2" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-log-data" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.1" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.2" } [features] default = ["program"] diff --git a/programs/bpf/rust/sibling_instruction/Cargo.toml b/programs/bpf/rust/sibling_instruction/Cargo.toml index 0fb616090239c7..6e1890b2afa493 100644 --- a/programs/bpf/rust/sibling_instruction/Cargo.toml +++ b/programs/bpf/rust/sibling_instruction/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-sibling-instructions" -version = "1.14.1" +version = "1.14.2" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-log-data" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.1" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.2" } [features] default = ["program"] diff --git a/programs/bpf/rust/simulation/Cargo.toml b/programs/bpf/rust/simulation/Cargo.toml index a2140dba6857f8..936273e341c29b 100644 --- a/programs/bpf/rust/simulation/Cargo.toml +++ b/programs/bpf/rust/simulation/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-simulation" -version = "1.14.1" +version = "1.14.2" description = "Solana BPF Program Simulation Differences" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,13 +13,13 @@ edition = "2021" test-bpf = [] [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.1" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.2" } [dev-dependencies] -solana-logger = { path = "../../../../logger", version = "=1.14.1" } -solana-program-test = { path = "../../../../program-test", version = "=1.14.1" } -solana-sdk = { path = "../../../../sdk", version = "=1.14.1" } -solana-validator = { path = "../../../../validator", version = "=1.14.1" } +solana-logger = { path = "../../../../logger", version = "=1.14.2" } +solana-program-test = { path = "../../../../program-test", version = "=1.14.2" } +solana-sdk = { path = "../../../../sdk", version = "=1.14.2" } +solana-validator = { path = "../../../../validator", version = "=1.14.2" } [lib] crate-type = ["cdylib", "lib"] diff --git a/programs/bpf/rust/spoof1/Cargo.toml b/programs/bpf/rust/spoof1/Cargo.toml index 396b7085d5ea65..b9e26f379868aa 100644 --- a/programs/bpf/rust/spoof1/Cargo.toml +++ b/programs/bpf/rust/spoof1/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-spoof1" -version = "1.14.1" +version = "1.14.2" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-spoof1" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.1" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.2" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/spoof1_system/Cargo.toml b/programs/bpf/rust/spoof1_system/Cargo.toml index 934fb9c4e4e1ca..4e96d67a8a410d 100644 --- a/programs/bpf/rust/spoof1_system/Cargo.toml +++ b/programs/bpf/rust/spoof1_system/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-spoof1-system" -version = "1.14.1" +version = "1.14.2" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-spoof1-system" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.1" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.2" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/sysvar/Cargo.toml b/programs/bpf/rust/sysvar/Cargo.toml index 48dd913ca5f19e..98c42f00c1620c 100644 --- a/programs/bpf/rust/sysvar/Cargo.toml +++ b/programs/bpf/rust/sysvar/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-sysvar" -version = "1.14.1" +version = "1.14.2" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,12 +10,12 @@ documentation = "https://docs.rs/solana-bpf-rust-sysvar" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.1" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.2" } [dev-dependencies] -solana-program-runtime = { path = "../../../../program-runtime", version = "=1.14.1" } -solana-program-test = { path = "../../../../program-test", version = "=1.14.1" } -solana-sdk = { path = "../../../../sdk", version = "=1.14.1" } +solana-program-runtime = { path = "../../../../program-runtime", version = "=1.14.2" } +solana-program-test = { path = "../../../../program-test", version = "=1.14.2" } +solana-sdk = { path = "../../../../sdk", version = "=1.14.2" } [lib] crate-type = ["cdylib", "lib"] diff --git a/programs/bpf/rust/upgradeable/Cargo.toml b/programs/bpf/rust/upgradeable/Cargo.toml index 529cd21de7bce7..31599601b3808a 100644 --- a/programs/bpf/rust/upgradeable/Cargo.toml +++ b/programs/bpf/rust/upgradeable/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-upgradeable" -version = "1.14.1" +version = "1.14.2" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-upgradeable" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.1" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.2" } [lib] name = "solana_bpf_rust_upgradeable" diff --git a/programs/bpf/rust/upgraded/Cargo.toml b/programs/bpf/rust/upgraded/Cargo.toml index 8144945cab0d5b..768761c6f830e9 100644 --- a/programs/bpf/rust/upgraded/Cargo.toml +++ b/programs/bpf/rust/upgraded/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-upgraded" -version = "1.14.1" +version = "1.14.2" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-upgraded" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.1" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.2" } [lib] name = "solana_bpf_rust_upgraded" diff --git a/programs/bpf_loader/Cargo.toml b/programs/bpf_loader/Cargo.toml index 9f94bf6b78dbeb..53d2fba76a806b 100644 --- a/programs/bpf_loader/Cargo.toml +++ b/programs/bpf_loader/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-loader-program" -version = "1.14.1" +version = "1.14.2" description = "Solana BPF loader" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,17 +14,17 @@ bincode = "1.3.3" byteorder = "1.4.3" libsecp256k1 = "0.6.0" log = "0.4.17" -solana-measure = { path = "../../measure", version = "=1.14.1" } -solana-metrics = { path = "../../metrics", version = "=1.14.1" } -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.1" } -solana-sdk = { path = "../../sdk", version = "=1.14.1" } -solana-zk-token-sdk = { path = "../../zk-token-sdk", version = "=1.14.1" } +solana-measure = { path = "../../measure", version = "=1.14.2" } +solana-metrics = { path = "../../metrics", version = "=1.14.2" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.2" } +solana-sdk = { path = "../../sdk", version = "=1.14.2" } +solana-zk-token-sdk = { path = "../../zk-token-sdk", version = "=1.14.2" } solana_rbpf = "=0.2.31" thiserror = "1.0" [dev-dependencies] rand = "0.7.3" -solana-runtime = { path = "../../runtime", version = "=1.14.1" } +solana-runtime = { path = "../../runtime", version = "=1.14.2" } [lib] crate-type = ["lib"] diff --git a/programs/bpf_loader/gen-syscall-list/Cargo.toml b/programs/bpf_loader/gen-syscall-list/Cargo.toml index f198e1b00307f9..5b4d054b7c7869 100644 --- a/programs/bpf_loader/gen-syscall-list/Cargo.toml +++ b/programs/bpf_loader/gen-syscall-list/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "gen-syscall-list" -version = "1.14.1" +version = "1.14.2" edition = "2021" license = "Apache-2.0" publish = false diff --git a/programs/compute-budget/Cargo.toml b/programs/compute-budget/Cargo.toml index f5cdc51b472d62..a1ebc95d73440b 100644 --- a/programs/compute-budget/Cargo.toml +++ b/programs/compute-budget/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "solana-compute-budget-program" description = "Solana Compute Budget program" -version = "1.14.1" +version = "1.14.2" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-compute-budget-program" repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ license = "Apache-2.0" edition = "2021" [dependencies] -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.1" } -solana-sdk = { path = "../../sdk", version = "=1.14.1" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.2" } +solana-sdk = { path = "../../sdk", version = "=1.14.2" } [lib] crate-type = ["lib"] diff --git a/programs/config/Cargo.toml b/programs/config/Cargo.toml index 9f98e906b3f60e..61eae864324cc8 100644 --- a/programs/config/Cargo.toml +++ b/programs/config/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-config-program" -version = "1.14.1" +version = "1.14.2" description = "Solana Config program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,11 +14,11 @@ bincode = "1.3.3" chrono = { version = "0.4.11", features = ["serde"] } serde = "1.0.138" serde_derive = "1.0.103" -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.1" } -solana-sdk = { path = "../../sdk", version = "=1.14.1" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.2" } +solana-sdk = { path = "../../sdk", version = "=1.14.2" } [dev-dependencies] -solana-logger = { path = "../../logger", version = "=1.14.1" } +solana-logger = { path = "../../logger", version = "=1.14.2" } [lib] crate-type = ["lib"] diff --git a/programs/ed25519-tests/Cargo.toml b/programs/ed25519-tests/Cargo.toml index 2e622b115b7f37..d88195cea90c0b 100644 --- a/programs/ed25519-tests/Cargo.toml +++ b/programs/ed25519-tests/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-ed25519-program-tests" -version = "1.14.1" +version = "1.14.2" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" @@ -12,8 +12,8 @@ publish = false assert_matches = "1.5.0" ed25519-dalek = "=1.0.1" rand = "0.7.0" -solana-program-test = { path = "../../program-test", version = "=1.14.1" } -solana-sdk = { path = "../../sdk", version = "=1.14.1" } +solana-program-test = { path = "../../program-test", version = "=1.14.2" } +solana-sdk = { path = "../../sdk", version = "=1.14.2" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/stake/Cargo.toml b/programs/stake/Cargo.toml index 2f98967e0f43e1..a63f1e9a52fbe0 100644 --- a/programs/stake/Cargo.toml +++ b/programs/stake/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-stake-program" -version = "1.14.1" +version = "1.14.2" description = "Solana Stake program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -16,19 +16,19 @@ num-derive = "0.3" num-traits = "0.2" serde = "1.0.138" serde_derive = "1.0.103" -solana-config-program = { path = "../config", version = "=1.14.1" } -solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.1" } -solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.1" } -solana-metrics = { path = "../../metrics", version = "=1.14.1" } -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.1" } -solana-sdk = { path = "../../sdk", version = "=1.14.1" } -solana-vote-program = { path = "../vote", version = "=1.14.1" } +solana-config-program = { path = "../config", version = "=1.14.2" } +solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.2" } +solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.2" } +solana-metrics = { path = "../../metrics", version = "=1.14.2" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.2" } +solana-sdk = { path = "../../sdk", version = "=1.14.2" } +solana-vote-program = { path = "../vote", version = "=1.14.2" } thiserror = "1.0" [dev-dependencies] assert_matches = "1.5.0" proptest = "1.0" -solana-logger = { path = "../../logger", version = "=1.14.1" } +solana-logger = { path = "../../logger", version = "=1.14.2" } test-case = "2.1.0" [build-dependencies] diff --git a/programs/vote/Cargo.toml b/programs/vote/Cargo.toml index 556e372dc3cc73..c3f2711ec1af11 100644 --- a/programs/vote/Cargo.toml +++ b/programs/vote/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-vote-program" -version = "1.14.1" +version = "1.14.2" description = "Solana Vote program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -16,17 +16,17 @@ num-derive = "0.3" num-traits = "0.2" serde = "1.0.138" serde_derive = "1.0.103" -solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.1" } -solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.1" } -solana-metrics = { path = "../../metrics", version = "=1.14.1" } -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.1" } -solana-sdk = { path = "../../sdk", version = "=1.14.1" } +solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.2" } +solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.2" } +solana-metrics = { path = "../../metrics", version = "=1.14.2" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.2" } +solana-sdk = { path = "../../sdk", version = "=1.14.2" } thiserror = "1.0" [dev-dependencies] itertools = "0.10.3" rand = "0.7.0" -solana-logger = { path = "../../logger", version = "=1.14.1" } +solana-logger = { path = "../../logger", version = "=1.14.2" } [build-dependencies] rustc_version = "0.4" diff --git a/programs/zk-token-proof/Cargo.toml b/programs/zk-token-proof/Cargo.toml index d405ea071ed18b..198bb4902a1265 100644 --- a/programs/zk-token-proof/Cargo.toml +++ b/programs/zk-token-proof/Cargo.toml @@ -3,7 +3,7 @@ name = "solana-zk-token-proof-program" description = "Solana Zk Token Proof Program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" -version = "1.14.1" +version = "1.14.2" license = "Apache-2.0" edition = "2021" @@ -12,6 +12,6 @@ bytemuck = { version = "1.11.0", features = ["derive"] } getrandom = { version = "0.1", features = ["dummy"] } num-derive = "0.3" num-traits = "0.2" -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.1" } -solana-sdk = { path = "../../sdk", version = "=1.14.1" } -solana-zk-token-sdk = { path = "../../zk-token-sdk", version = "=1.14.1" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.2" } +solana-sdk = { path = "../../sdk", version = "=1.14.2" } +solana-zk-token-sdk = { path = "../../zk-token-sdk", version = "=1.14.2" } diff --git a/rayon-threadlimit/Cargo.toml b/rayon-threadlimit/Cargo.toml index 12d83ee31599b9..a8c3655fba5254 100644 --- a/rayon-threadlimit/Cargo.toml +++ b/rayon-threadlimit/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-rayon-threadlimit" -version = "1.14.1" +version = "1.14.2" description = "solana-rayon-threadlimit" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-rayon-threadlimit" diff --git a/rbpf-cli/Cargo.toml b/rbpf-cli/Cargo.toml index 02dd07efe6d5f9..a6e6c6bc31cc53 100644 --- a/rbpf-cli/Cargo.toml +++ b/rbpf-cli/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "rbpf-cli" -version = "1.14.1" +version = "1.14.2" description = "CLI to test and analyze eBPF programs" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/rbpf" @@ -13,8 +13,8 @@ publish = false clap = { version = "3.1.5", features = ["cargo"] } serde = "1.0.138" serde_json = "1.0.81" -solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.1" } -solana-logger = { path = "../logger", version = "=1.14.1" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.1" } -solana-sdk = { path = "../sdk", version = "=1.14.1" } +solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.2" } +solana-logger = { path = "../logger", version = "=1.14.2" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.2" } +solana-sdk = { path = "../sdk", version = "=1.14.2" } solana_rbpf = "=0.2.31" diff --git a/remote-wallet/Cargo.toml b/remote-wallet/Cargo.toml index 82973140f1a7a2..a1f7df55cb354b 100644 --- a/remote-wallet/Cargo.toml +++ b/remote-wallet/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-remote-wallet" description = "Blockchain, Rebuilt for Scale" -version = "1.14.1" +version = "1.14.2" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -19,7 +19,7 @@ num-traits = { version = "0.2" } parking_lot = "0.12" qstring = "0.7.2" semver = "1.0" -solana-sdk = { path = "../sdk", version = "=1.14.1" } +solana-sdk = { path = "../sdk", version = "=1.14.2" } thiserror = "1.0" uriparse = "0.6.4" diff --git a/rpc-test/Cargo.toml b/rpc-test/Cargo.toml index ffdd6ffc03ed4c..6244422a8b36c9 100644 --- a/rpc-test/Cargo.toml +++ b/rpc-test/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-rpc-test" -version = "1.14.1" +version = "1.14.2" description = "Solana RPC Test" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -19,17 +19,17 @@ log = "0.4.17" reqwest = { version = "0.11.11", default-features = false, features = ["blocking", "brotli", "deflate", "gzip", "rustls-tls", "json"] } serde = "1.0.138" serde_json = "1.0.81" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.1" } -solana-client = { path = "../client", version = "=1.14.1" } -solana-rpc = { path = "../rpc", version = "=1.14.1" } -solana-sdk = { path = "../sdk", version = "=1.14.1" } -solana-streamer = { path = "../streamer", version = "=1.14.1" } -solana-test-validator = { path = "../test-validator", version = "=1.14.1" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.1" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.2" } +solana-client = { path = "../client", version = "=1.14.2" } +solana-rpc = { path = "../rpc", version = "=1.14.2" } +solana-sdk = { path = "../sdk", version = "=1.14.2" } +solana-streamer = { path = "../streamer", version = "=1.14.2" } +solana-test-validator = { path = "../test-validator", version = "=1.14.2" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.2" } tokio = { version = "~1.14.1", features = ["full"] } [dev-dependencies] -solana-logger = { path = "../logger", version = "=1.14.1" } +solana-logger = { path = "../logger", version = "=1.14.2" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/rpc/Cargo.toml b/rpc/Cargo.toml index 843ed6cd955e7f..db4db097a9cbd9 100644 --- a/rpc/Cargo.toml +++ b/rpc/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-rpc" -version = "1.14.1" +version = "1.14.2" description = "Solana RPC" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -29,26 +29,26 @@ serde = "1.0.138" serde_derive = "1.0.103" serde_json = "1.0.81" soketto = "0.7" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.1" } -solana-client = { path = "../client", version = "=1.14.1" } -solana-entry = { path = "../entry", version = "=1.14.1" } -solana-faucet = { path = "../faucet", version = "=1.14.1" } -solana-gossip = { path = "../gossip", version = "=1.14.1" } -solana-ledger = { path = "../ledger", version = "=1.14.1" } -solana-measure = { path = "../measure", version = "=1.14.1" } -solana-metrics = { path = "../metrics", version = "=1.14.1" } -solana-perf = { path = "../perf", version = "=1.14.1" } -solana-poh = { path = "../poh", version = "=1.14.1" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.1" } -solana-runtime = { path = "../runtime", version = "=1.14.1" } -solana-sdk = { path = "../sdk", version = "=1.14.1" } -solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.1" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.1" } -solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.1" } -solana-streamer = { path = "../streamer", version = "=1.14.1" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.1" } -solana-version = { path = "../version", version = "=1.14.1" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.1" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.2" } +solana-client = { path = "../client", version = "=1.14.2" } +solana-entry = { path = "../entry", version = "=1.14.2" } +solana-faucet = { path = "../faucet", version = "=1.14.2" } +solana-gossip = { path = "../gossip", version = "=1.14.2" } +solana-ledger = { path = "../ledger", version = "=1.14.2" } +solana-measure = { path = "../measure", version = "=1.14.2" } +solana-metrics = { path = "../metrics", version = "=1.14.2" } +solana-perf = { path = "../perf", version = "=1.14.2" } +solana-poh = { path = "../poh", version = "=1.14.2" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.2" } +solana-runtime = { path = "../runtime", version = "=1.14.2" } +solana-sdk = { path = "../sdk", version = "=1.14.2" } +solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.2" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.2" } +solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.2" } +solana-streamer = { path = "../streamer", version = "=1.14.2" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.2" } +solana-version = { path = "../version", version = "=1.14.2" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.2" } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } spl-token-2022 = { version = "=0.4.2", features = ["no-entrypoint"] } stream-cancel = "0.8.1" @@ -58,9 +58,9 @@ tokio-util = { version = "0.6", features = ["codec", "compat"] } [dev-dependencies] serial_test = "0.8.0" -solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.1" } -solana-net-utils = { path = "../net-utils", version = "=1.14.1" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.1" } +solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.2" } +solana-net-utils = { path = "../net-utils", version = "=1.14.2" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.2" } symlink = "0.1.0" [lib] diff --git a/runtime/Cargo.toml b/runtime/Cargo.toml index e678b10812072d..4e5fb73c7cbea1 100644 --- a/runtime/Cargo.toml +++ b/runtime/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-runtime" -version = "1.14.1" +version = "1.14.2" description = "Solana runtime" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -39,21 +39,21 @@ rayon = "1.5.3" regex = "1.5.6" serde = { version = "1.0.138", features = ["rc"] } serde_derive = "1.0.103" -solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.1" } -solana-bucket-map = { path = "../bucket_map", version = "=1.14.1" } -solana-compute-budget-program = { path = "../programs/compute-budget", version = "=1.14.1" } -solana-config-program = { path = "../programs/config", version = "=1.14.1" } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.1" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.1" } -solana-measure = { path = "../measure", version = "=1.14.1" } -solana-metrics = { path = "../metrics", version = "=1.14.1" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.1" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.1" } -solana-sdk = { path = "../sdk", version = "=1.14.1" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.1" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.1" } -solana-zk-token-proof-program = { path = "../programs/zk-token-proof", version = "=1.14.1" } -solana-zk-token-sdk = { path = "../zk-token-sdk", version = "=1.14.1" } +solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.2" } +solana-bucket-map = { path = "../bucket_map", version = "=1.14.2" } +solana-compute-budget-program = { path = "../programs/compute-budget", version = "=1.14.2" } +solana-config-program = { path = "../programs/config", version = "=1.14.2" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.2" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.2" } +solana-measure = { path = "../measure", version = "=1.14.2" } +solana-metrics = { path = "../metrics", version = "=1.14.2" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.2" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.2" } +solana-sdk = { path = "../sdk", version = "=1.14.2" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.2" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.2" } +solana-zk-token-proof-program = { path = "../programs/zk-token-proof", version = "=1.14.2" } +solana-zk-token-sdk = { path = "../zk-token-sdk", version = "=1.14.2" } strum = { version = "0.24", features = ["derive"] } strum_macros = "0.24" symlink = "0.1.0" @@ -71,7 +71,7 @@ assert_matches = "1.5.0" ed25519-dalek = "=1.0.1" libsecp256k1 = "0.6.0" rand_chacha = "0.2.2" -solana-logger = { path = "../logger", version = "=1.14.1" } +solana-logger = { path = "../logger", version = "=1.14.2" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/runtime/store-tool/Cargo.toml b/runtime/store-tool/Cargo.toml index affdb5894fd640..9fd91554a4ac91 100644 --- a/runtime/store-tool/Cargo.toml +++ b/runtime/store-tool/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-store-tool" description = "Tool to inspect append vecs" -version = "1.14.1" +version = "1.14.2" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -12,9 +12,9 @@ publish = false [dependencies] clap = "2.33.1" log = { version = "0.4.17" } -solana-logger = { path = "../../logger", version = "=1.14.1" } -solana-runtime = { path = "..", version = "=1.14.1" } -solana-version = { path = "../../version", version = "=1.14.1" } +solana-logger = { path = "../../logger", version = "=1.14.2" } +solana-runtime = { path = "..", version = "=1.14.2" } +solana-version = { path = "../../version", version = "=1.14.2" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/sdk/Cargo.toml b/sdk/Cargo.toml index df316e0365da8a..697ebd62cc83d0 100644 --- a/sdk/Cargo.toml +++ b/sdk/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-sdk" -version = "1.14.1" +version = "1.14.2" description = "Solana SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -71,11 +71,11 @@ serde_derive = "1.0.103" serde_json = { version = "1.0.81", optional = true } sha2 = "0.10.2" sha3 = { version = "0.10.1", optional = true } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.1" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.1" } -solana-logger = { path = "../logger", version = "=1.14.1", optional = true } -solana-program = { path = "program", version = "=1.14.1" } -solana-sdk-macro = { path = "macro", version = "=1.14.1" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.2" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.2" } +solana-logger = { path = "../logger", version = "=1.14.2", optional = true } +solana-program = { path = "program", version = "=1.14.2" } +solana-sdk-macro = { path = "macro", version = "=1.14.2" } thiserror = "1.0" uriparse = "0.6.4" wasm-bindgen = "0.2" diff --git a/sdk/cargo-build-bpf/Cargo.toml b/sdk/cargo-build-bpf/Cargo.toml index 0ba4b251affd5d..8009778097e14f 100644 --- a/sdk/cargo-build-bpf/Cargo.toml +++ b/sdk/cargo-build-bpf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-cargo-build-bpf" -version = "1.14.1" +version = "1.14.2" description = "Compile a local package and all of its dependencies using the Solana SBF SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,7 +12,7 @@ publish = false [dependencies] cargo_metadata = "0.15.0" clap = { version = "3.1.5", features = ["cargo", "env"] } -solana-sdk = { path = "..", version = "=1.14.1" } +solana-sdk = { path = "..", version = "=1.14.2" } [features] program = [] diff --git a/sdk/cargo-build-sbf/Cargo.toml b/sdk/cargo-build-sbf/Cargo.toml index 404538ef3b5b9d..5ca2d5697587e9 100644 --- a/sdk/cargo-build-sbf/Cargo.toml +++ b/sdk/cargo-build-sbf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-cargo-build-sbf" -version = "1.14.1" +version = "1.14.2" description = "Compile a local package and all of its dependencies using the Solana SBF SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -15,9 +15,9 @@ cargo_metadata = "0.15.0" clap = { version = "3.1.5", features = ["cargo", "env"] } log = { version = "0.4.14", features = ["std"] } regex = "1.5.6" -solana-download-utils = { path = "../../download-utils", version = "=1.14.1" } -solana-logger = { path = "../../logger", version = "=1.14.1" } -solana-sdk = { path = "..", version = "=1.14.1" } +solana-download-utils = { path = "../../download-utils", version = "=1.14.2" } +solana-logger = { path = "../../logger", version = "=1.14.2" } +solana-sdk = { path = "..", version = "=1.14.2" } tar = "0.4.38" [dev-dependencies] diff --git a/sdk/cargo-build-sbf/tests/crates/fail/Cargo.toml b/sdk/cargo-build-sbf/tests/crates/fail/Cargo.toml index ac07d7486e9a10..bb87a11e7602aa 100644 --- a/sdk/cargo-build-sbf/tests/crates/fail/Cargo.toml +++ b/sdk/cargo-build-sbf/tests/crates/fail/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "fail" -version = "1.14.1" +version = "1.14.2" description = "Solana SBF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ edition = "2021" publish = false [dependencies] -solana-program = { path = "../../../../program", version = "=1.14.1" } +solana-program = { path = "../../../../program", version = "=1.14.2" } [lib] crate-type = ["cdylib"] diff --git a/sdk/cargo-build-sbf/tests/crates/noop/Cargo.toml b/sdk/cargo-build-sbf/tests/crates/noop/Cargo.toml index 5a78e3202c106d..5a83d39356cc6f 100644 --- a/sdk/cargo-build-sbf/tests/crates/noop/Cargo.toml +++ b/sdk/cargo-build-sbf/tests/crates/noop/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "noop" -version = "1.14.1" +version = "1.14.2" description = "Solana SBF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ edition = "2021" publish = false [dependencies] -solana-program = { path = "../../../../program", version = "=1.14.1" } +solana-program = { path = "../../../../program", version = "=1.14.2" } [lib] crate-type = ["cdylib"] diff --git a/sdk/cargo-test-bpf/Cargo.toml b/sdk/cargo-test-bpf/Cargo.toml index cbb009d59e2a7c..3c5c05a14c6f9f 100644 --- a/sdk/cargo-test-bpf/Cargo.toml +++ b/sdk/cargo-test-bpf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-cargo-test-bpf" -version = "1.14.1" +version = "1.14.2" description = "Execute all unit and integration tests after building with the Solana SBF SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/sdk/cargo-test-sbf/Cargo.toml b/sdk/cargo-test-sbf/Cargo.toml index e1caa492128e7d..fe2a1ec60b1092 100644 --- a/sdk/cargo-test-sbf/Cargo.toml +++ b/sdk/cargo-test-sbf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-cargo-test-sbf" -version = "1.14.1" +version = "1.14.2" description = "Execute all unit and integration tests after building with the Solana SBF SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/sdk/gen-headers/Cargo.toml b/sdk/gen-headers/Cargo.toml index 9a753117a88f0d..1bf70979f2e3a5 100644 --- a/sdk/gen-headers/Cargo.toml +++ b/sdk/gen-headers/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "gen-headers" -version = "1.14.1" +version = "1.14.2" edition = "2021" license = "Apache-2.0" publish = false diff --git a/sdk/macro/Cargo.toml b/sdk/macro/Cargo.toml index 7076a90105bf9f..74ab1b7062f10a 100644 --- a/sdk/macro/Cargo.toml +++ b/sdk/macro/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-sdk-macro" -version = "1.14.1" +version = "1.14.2" description = "Solana SDK Macro" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/sdk/program/Cargo.toml b/sdk/program/Cargo.toml index de5b4eb9b8ccd3..ecbf8d0c102423 100644 --- a/sdk/program/Cargo.toml +++ b/sdk/program/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-program" -version = "1.14.1" +version = "1.14.2" description = "Solana Program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -31,9 +31,9 @@ serde_derive = "1.0" serde_json = "1.0" sha2 = "0.10.0" sha3 = "0.10.0" -solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.1" } -solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.1" } -solana-sdk-macro = { path = "../macro", version = "=1.14.1" } +solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.2" } +solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.2" } +solana-sdk-macro = { path = "../macro", version = "=1.14.2" } thiserror = "1.0" [target.'cfg(not(target_os = "solana"))'.dependencies] @@ -50,7 +50,7 @@ wasm-bindgen = "0.2" zeroize = { version = "1.3", default-features = true, features = ["zeroize_derive"] } [target.'cfg(not(target_os = "solana"))'.dev-dependencies] -solana-logger = { path = "../../logger", version = "=1.14.1" } +solana-logger = { path = "../../logger", version = "=1.14.2" } [target.'cfg(target_arch = "wasm32")'.dependencies] console_error_panic_hook = "0.1.7" diff --git a/send-transaction-service/Cargo.toml b/send-transaction-service/Cargo.toml index 59d81783e5453b..52db08473821a0 100644 --- a/send-transaction-service/Cargo.toml +++ b/send-transaction-service/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-send-transaction-service" -version = "1.14.1" +version = "1.14.2" description = "Solana send transaction service" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,14 +12,14 @@ edition = "2021" [dependencies] crossbeam-channel = "0.5" log = "0.4.17" -solana-client = { path = "../client", version = "=1.14.1" } -solana-measure = { path = "../measure", version = "=1.14.1" } -solana-metrics = { path = "../metrics", version = "=1.14.1" } -solana-runtime = { path = "../runtime", version = "=1.14.1" } -solana-sdk = { path = "../sdk", version = "=1.14.1" } +solana-client = { path = "../client", version = "=1.14.2" } +solana-measure = { path = "../measure", version = "=1.14.2" } +solana-metrics = { path = "../metrics", version = "=1.14.2" } +solana-runtime = { path = "../runtime", version = "=1.14.2" } +solana-sdk = { path = "../sdk", version = "=1.14.2" } [dev-dependencies] -solana-logger = { path = "../logger", version = "=1.14.1" } +solana-logger = { path = "../logger", version = "=1.14.2" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/stake-accounts/Cargo.toml b/stake-accounts/Cargo.toml index 57f1cdb3f29095..49fdaf0b7aea78 100644 --- a/stake-accounts/Cargo.toml +++ b/stake-accounts/Cargo.toml @@ -3,7 +3,7 @@ name = "solana-stake-accounts" description = "Blockchain, Rebuilt for Scale" authors = ["Solana Maintainers "] edition = "2021" -version = "1.14.1" +version = "1.14.2" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -11,15 +11,15 @@ documentation = "https://docs.rs/solana-stake-accounts" [dependencies] clap = "2.33.1" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.1" } -solana-cli-config = { path = "../cli-config", version = "=1.14.1" } -solana-client = { path = "../client", version = "=1.14.1" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.1" } -solana-sdk = { path = "../sdk", version = "=1.14.1" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.1" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.2" } +solana-cli-config = { path = "../cli-config", version = "=1.14.2" } +solana-client = { path = "../client", version = "=1.14.2" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.2" } +solana-sdk = { path = "../sdk", version = "=1.14.2" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.2" } [dev-dependencies] -solana-runtime = { path = "../runtime", version = "=1.14.1" } +solana-runtime = { path = "../runtime", version = "=1.14.2" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/storage-bigtable/Cargo.toml b/storage-bigtable/Cargo.toml index 72b06e00eb88d6..051f2fdb2c8e34 100644 --- a/storage-bigtable/Cargo.toml +++ b/storage-bigtable/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-storage-bigtable" -version = "1.14.1" +version = "1.14.2" description = "Solana Storage BigTable" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -27,10 +27,10 @@ prost-types = "0.11.0" serde = "1.0.138" serde_derive = "1.0.103" smpl_jwt = "0.7.1" -solana-metrics = { path = "../metrics", version = "=1.14.1" } -solana-sdk = { path = "../sdk", version = "=1.14.1" } -solana-storage-proto = { path = "../storage-proto", version = "=1.14.1" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.1" } +solana-metrics = { path = "../metrics", version = "=1.14.2" } +solana-sdk = { path = "../sdk", version = "=1.14.2" } +solana-storage-proto = { path = "../storage-proto", version = "=1.14.2" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.2" } thiserror = "1.0" tokio = "1" tonic = { version = "0.8.0", features = ["tls", "transport"] } diff --git a/storage-bigtable/build-proto/Cargo.lock b/storage-bigtable/build-proto/Cargo.lock index 6e56fc2174b540..40d09b2ae440bd 100644 --- a/storage-bigtable/build-proto/Cargo.lock +++ b/storage-bigtable/build-proto/Cargo.lock @@ -219,7 +219,7 @@ dependencies = [ [[package]] name = "proto" -version = "1.14.1" +version = "1.14.2" dependencies = [ "protobuf-src", "tonic-build", diff --git a/storage-bigtable/build-proto/Cargo.toml b/storage-bigtable/build-proto/Cargo.toml index 54e51095bd34a2..8d64fc717d74f2 100644 --- a/storage-bigtable/build-proto/Cargo.toml +++ b/storage-bigtable/build-proto/Cargo.toml @@ -7,7 +7,7 @@ license = "Apache-2.0" name = "proto" publish = false repository = "https://github.com/solana-labs/solana" -version = "1.14.1" +version = "1.14.2" [workspace] diff --git a/storage-proto/Cargo.toml b/storage-proto/Cargo.toml index 8fc413ebd66292..0e515fa636f97b 100644 --- a/storage-proto/Cargo.toml +++ b/storage-proto/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-storage-proto" -version = "1.14.1" +version = "1.14.2" description = "Solana Storage Protobuf Definitions" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,9 +14,9 @@ bincode = "1.3.3" bs58 = "0.4.0" prost = "0.11.0" serde = "1.0.138" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.1" } -solana-sdk = { path = "../sdk", version = "=1.14.1" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.1" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.2" } +solana-sdk = { path = "../sdk", version = "=1.14.2" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.2" } [dev-dependencies] enum-iterator = "0.8.1" diff --git a/streamer/Cargo.toml b/streamer/Cargo.toml index 96f2e4cfab8175..d34177b80ae81b 100644 --- a/streamer/Cargo.toml +++ b/streamer/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-streamer" -version = "1.14.1" +version = "1.14.2" description = "Solana Streamer" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -25,15 +25,15 @@ quinn = "0.8.3" rand = "0.7.0" rcgen = "0.9.2" rustls = { version = "0.20.6", features = ["dangerous_configuration"] } -solana-metrics = { path = "../metrics", version = "=1.14.1" } -solana-perf = { path = "../perf", version = "=1.14.1" } -solana-sdk = { path = "../sdk", version = "=1.14.1" } +solana-metrics = { path = "../metrics", version = "=1.14.2" } +solana-perf = { path = "../perf", version = "=1.14.2" } +solana-sdk = { path = "../sdk", version = "=1.14.2" } thiserror = "1.0" tokio = { version = "1", features = ["full"] } x509-parser = "0.14.0" [dev-dependencies] -solana-logger = { path = "../logger", version = "=1.14.1" } +solana-logger = { path = "../logger", version = "=1.14.2" } [lib] crate-type = ["lib"] diff --git a/sys-tuner/Cargo.toml b/sys-tuner/Cargo.toml index f9d32e8ca2e08b..987b35f2106cd6 100644 --- a/sys-tuner/Cargo.toml +++ b/sys-tuner/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-sys-tuner" description = "The solana cluster system tuner daemon" -version = "1.14.1" +version = "1.14.2" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,8 +14,8 @@ publish = true clap = "2.33.1" libc = "0.2.126" log = "0.4.17" -solana-logger = { path = "../logger", version = "=1.14.1" } -solana-version = { path = "../version", version = "=1.14.1" } +solana-logger = { path = "../logger", version = "=1.14.2" } +solana-version = { path = "../version", version = "=1.14.2" } [target."cfg(unix)".dependencies] unix_socket2 = "0.5.4" diff --git a/test-validator/Cargo.toml b/test-validator/Cargo.toml index 051b38525259b3..9291774d63b4c4 100644 --- a/test-validator/Cargo.toml +++ b/test-validator/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "solana-test-validator" description = "Blockchain, Rebuilt for Scale" -version = "1.14.1" +version = "1.14.2" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-test-validator" readme = "../README.md" @@ -15,19 +15,19 @@ base64 = "0.13.0" log = "0.4.17" serde_derive = "1.0.103" serde_json = "1.0.81" -solana-cli-output = { path = "../cli-output", version = "=1.14.1" } -solana-client = { path = "../client", version = "=1.14.1" } -solana-core = { path = "../core", version = "=1.14.1" } -solana-gossip = { path = "../gossip", version = "=1.14.1" } -solana-ledger = { path = "../ledger", version = "=1.14.1" } -solana-logger = { path = "../logger", version = "=1.14.1" } -solana-net-utils = { path = "../net-utils", version = "=1.14.1" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.1" } -solana-program-test = { path = "../program-test", version = "=1.14.1" } -solana-rpc = { path = "../rpc", version = "=1.14.1" } -solana-runtime = { path = "../runtime", version = "=1.14.1" } -solana-sdk = { path = "../sdk", version = "=1.14.1" } -solana-streamer = { path = "../streamer", version = "=1.14.1" } +solana-cli-output = { path = "../cli-output", version = "=1.14.2" } +solana-client = { path = "../client", version = "=1.14.2" } +solana-core = { path = "../core", version = "=1.14.2" } +solana-gossip = { path = "../gossip", version = "=1.14.2" } +solana-ledger = { path = "../ledger", version = "=1.14.2" } +solana-logger = { path = "../logger", version = "=1.14.2" } +solana-net-utils = { path = "../net-utils", version = "=1.14.2" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.2" } +solana-program-test = { path = "../program-test", version = "=1.14.2" } +solana-rpc = { path = "../rpc", version = "=1.14.2" } +solana-runtime = { path = "../runtime", version = "=1.14.2" } +solana-sdk = { path = "../sdk", version = "=1.14.2" } +solana-streamer = { path = "../streamer", version = "=1.14.2" } tokio = { version = "1", features = ["full"] } [package.metadata.docs.rs] diff --git a/tokens/Cargo.toml b/tokens/Cargo.toml index 36095a4d612137..1e8945b881cd45 100644 --- a/tokens/Cargo.toml +++ b/tokens/Cargo.toml @@ -3,7 +3,7 @@ name = "solana-tokens" description = "Blockchain, Rebuilt for Scale" authors = ["Solana Maintainers "] edition = "2021" -version = "1.14.1" +version = "1.14.2" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -19,14 +19,14 @@ indexmap = "1.9.1" indicatif = "0.16.2" pickledb = "0.4.1" serde = { version = "1.0", features = ["derive"] } -solana-account-decoder = { path = "../account-decoder", version = "=1.14.1" } -solana-clap-utils = { path = "../clap-utils", version = "=1.14.1" } -solana-cli-config = { path = "../cli-config", version = "=1.14.1" } -solana-client = { path = "../client", version = "=1.14.1" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.1" } -solana-sdk = { path = "../sdk", version = "=1.14.1" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.1" } -solana-version = { path = "../version", version = "=1.14.1" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.2" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.2" } +solana-cli-config = { path = "../cli-config", version = "=1.14.2" } +solana-client = { path = "../client", version = "=1.14.2" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.2" } +solana-sdk = { path = "../sdk", version = "=1.14.2" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.2" } +solana-version = { path = "../version", version = "=1.14.2" } spl-associated-token-account = { version = "=1.1.1" } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } tempfile = "3.3.0" @@ -34,6 +34,6 @@ thiserror = "1.0" [dev-dependencies] bincode = "1.3.3" -solana-logger = { path = "../logger", version = "=1.14.1" } -solana-streamer = { path = "../streamer", version = "=1.14.1" } -solana-test-validator = { path = "../test-validator", version = "=1.14.1" } +solana-logger = { path = "../logger", version = "=1.14.2" } +solana-streamer = { path = "../streamer", version = "=1.14.2" } +solana-test-validator = { path = "../test-validator", version = "=1.14.2" } diff --git a/transaction-dos/Cargo.toml b/transaction-dos/Cargo.toml index c6fd3a685221cb..93447fa00be807 100644 --- a/transaction-dos/Cargo.toml +++ b/transaction-dos/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-transaction-dos" -version = "1.14.1" +version = "1.14.2" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,23 +14,23 @@ clap = "2.33.1" log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.1" } -solana-cli = { path = "../cli", version = "=1.14.1" } -solana-client = { path = "../client", version = "=1.14.1" } -solana-core = { path = "../core", version = "=1.14.1" } -solana-faucet = { path = "../faucet", version = "=1.14.1" } -solana-gossip = { path = "../gossip", version = "=1.14.1" } -solana-logger = { path = "../logger", version = "=1.14.1" } -solana-measure = { path = "../measure", version = "=1.14.1" } -solana-net-utils = { path = "../net-utils", version = "=1.14.1" } -solana-runtime = { path = "../runtime", version = "=1.14.1" } -solana-sdk = { path = "../sdk", version = "=1.14.1" } -solana-streamer = { path = "../streamer", version = "=1.14.1" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.1" } -solana-version = { path = "../version", version = "=1.14.1" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.2" } +solana-cli = { path = "../cli", version = "=1.14.2" } +solana-client = { path = "../client", version = "=1.14.2" } +solana-core = { path = "../core", version = "=1.14.2" } +solana-faucet = { path = "../faucet", version = "=1.14.2" } +solana-gossip = { path = "../gossip", version = "=1.14.2" } +solana-logger = { path = "../logger", version = "=1.14.2" } +solana-measure = { path = "../measure", version = "=1.14.2" } +solana-net-utils = { path = "../net-utils", version = "=1.14.2" } +solana-runtime = { path = "../runtime", version = "=1.14.2" } +solana-sdk = { path = "../sdk", version = "=1.14.2" } +solana-streamer = { path = "../streamer", version = "=1.14.2" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.2" } +solana-version = { path = "../version", version = "=1.14.2" } [dev-dependencies] -solana-local-cluster = { path = "../local-cluster", version = "=1.14.1" } +solana-local-cluster = { path = "../local-cluster", version = "=1.14.2" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/transaction-status/Cargo.toml b/transaction-status/Cargo.toml index 0624a4fc4e1d21..20abfe9a6f3fa1 100644 --- a/transaction-status/Cargo.toml +++ b/transaction-status/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-transaction-status" -version = "1.14.1" +version = "1.14.2" description = "Solana transaction status types" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -20,11 +20,11 @@ log = "0.4.17" serde = "1.0.138" serde_derive = "1.0.103" serde_json = "1.0.81" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.1" } -solana-measure = { path = "../measure", version = "=1.14.1" } -solana-metrics = { path = "../metrics", version = "=1.14.1" } -solana-sdk = { path = "../sdk", version = "=1.14.1" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.1" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.2" } +solana-measure = { path = "../measure", version = "=1.14.2" } +solana-metrics = { path = "../metrics", version = "=1.14.2" } +solana-sdk = { path = "../sdk", version = "=1.14.2" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.2" } spl-associated-token-account = { version = "=1.1.1", features = ["no-entrypoint"] } spl-memo = { version = "=3.0.1", features = ["no-entrypoint"] } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } diff --git a/upload-perf/Cargo.toml b/upload-perf/Cargo.toml index 92e3be2c0f7ffa..23da5d2fa27253 100644 --- a/upload-perf/Cargo.toml +++ b/upload-perf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-upload-perf" -version = "1.14.1" +version = "1.14.2" description = "Metrics Upload Utility" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -11,7 +11,7 @@ publish = false [dependencies] serde_json = "1.0.81" -solana-metrics = { path = "../metrics", version = "=1.14.1" } +solana-metrics = { path = "../metrics", version = "=1.14.2" } [[bin]] name = "solana-upload-perf" diff --git a/validator/Cargo.toml b/validator/Cargo.toml index 5eea4b84aee7f4..877ffccbc9fe20 100644 --- a/validator/Cargo.toml +++ b/validator/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-validator" description = "Blockchain, Rebuilt for Scale" -version = "1.14.1" +version = "1.14.2" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -28,30 +28,30 @@ num_cpus = "1.13.1" rand = "0.7.0" serde = "1.0.138" serde_json = "1.0.81" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.1" } -solana-cli-config = { path = "../cli-config", version = "=1.14.1" } -solana-client = { path = "../client", version = "=1.14.1" } -solana-core = { path = "../core", version = "=1.14.1" } -solana-download-utils = { path = "../download-utils", version = "=1.14.1" } -solana-entry = { path = "../entry", version = "=1.14.1" } -solana-faucet = { path = "../faucet", version = "=1.14.1" } -solana-genesis-utils = { path = "../genesis-utils", version = "=1.14.1" } -solana-gossip = { path = "../gossip", version = "=1.14.1" } -solana-ledger = { path = "../ledger", version = "=1.14.1" } -solana-logger = { path = "../logger", version = "=1.14.1" } -solana-metrics = { path = "../metrics", version = "=1.14.1" } -solana-net-utils = { path = "../net-utils", version = "=1.14.1" } -solana-perf = { path = "../perf", version = "=1.14.1" } -solana-poh = { path = "../poh", version = "=1.14.1" } -solana-rpc = { path = "../rpc", version = "=1.14.1" } -solana-runtime = { path = "../runtime", version = "=1.14.1" } -solana-sdk = { path = "../sdk", version = "=1.14.1" } -solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.1" } -solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.1" } -solana-streamer = { path = "../streamer", version = "=1.14.1" } -solana-test-validator = { path = "../test-validator", version = "=1.14.1" } -solana-version = { path = "../version", version = "=1.14.1" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.1" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.2" } +solana-cli-config = { path = "../cli-config", version = "=1.14.2" } +solana-client = { path = "../client", version = "=1.14.2" } +solana-core = { path = "../core", version = "=1.14.2" } +solana-download-utils = { path = "../download-utils", version = "=1.14.2" } +solana-entry = { path = "../entry", version = "=1.14.2" } +solana-faucet = { path = "../faucet", version = "=1.14.2" } +solana-genesis-utils = { path = "../genesis-utils", version = "=1.14.2" } +solana-gossip = { path = "../gossip", version = "=1.14.2" } +solana-ledger = { path = "../ledger", version = "=1.14.2" } +solana-logger = { path = "../logger", version = "=1.14.2" } +solana-metrics = { path = "../metrics", version = "=1.14.2" } +solana-net-utils = { path = "../net-utils", version = "=1.14.2" } +solana-perf = { path = "../perf", version = "=1.14.2" } +solana-poh = { path = "../poh", version = "=1.14.2" } +solana-rpc = { path = "../rpc", version = "=1.14.2" } +solana-runtime = { path = "../runtime", version = "=1.14.2" } +solana-sdk = { path = "../sdk", version = "=1.14.2" } +solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.2" } +solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.2" } +solana-streamer = { path = "../streamer", version = "=1.14.2" } +solana-test-validator = { path = "../test-validator", version = "=1.14.2" } +solana-version = { path = "../version", version = "=1.14.2" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.2" } symlink = "0.1.0" [target.'cfg(not(target_env = "msvc"))'.dependencies] diff --git a/version/Cargo.toml b/version/Cargo.toml index 538d355629ddf7..d2800776ab937f 100644 --- a/version/Cargo.toml +++ b/version/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-version" -version = "1.14.1" +version = "1.14.2" description = "Solana Version" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,9 +14,9 @@ log = "0.4.17" semver = "1.0.10" serde = "1.0.138" serde_derive = "1.0.103" -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.1" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.1" } -solana-sdk = { path = "../sdk", version = "=1.14.1" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.2" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.2" } +solana-sdk = { path = "../sdk", version = "=1.14.2" } [lib] name = "solana_version" diff --git a/watchtower/Cargo.toml b/watchtower/Cargo.toml index f4ea09421370d4..1b99c5a48e8c53 100644 --- a/watchtower/Cargo.toml +++ b/watchtower/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-watchtower" description = "Blockchain, Rebuilt for Scale" -version = "1.14.1" +version = "1.14.2" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -13,15 +13,15 @@ documentation = "https://docs.rs/solana-watchtower" clap = "2.33.1" humantime = "2.0.1" log = "0.4.17" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.1" } -solana-cli-config = { path = "../cli-config", version = "=1.14.1" } -solana-cli-output = { path = "../cli-output", version = "=1.14.1" } -solana-client = { path = "../client", version = "=1.14.1" } -solana-logger = { path = "../logger", version = "=1.14.1" } -solana-metrics = { path = "../metrics", version = "=1.14.1" } -solana-notifier = { path = "../notifier", version = "=1.14.1" } -solana-sdk = { path = "../sdk", version = "=1.14.1" } -solana-version = { path = "../version", version = "=1.14.1" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.2" } +solana-cli-config = { path = "../cli-config", version = "=1.14.2" } +solana-cli-output = { path = "../cli-output", version = "=1.14.2" } +solana-client = { path = "../client", version = "=1.14.2" } +solana-logger = { path = "../logger", version = "=1.14.2" } +solana-metrics = { path = "../metrics", version = "=1.14.2" } +solana-notifier = { path = "../notifier", version = "=1.14.2" } +solana-sdk = { path = "../sdk", version = "=1.14.2" } +solana-version = { path = "../version", version = "=1.14.2" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/zk-token-sdk/Cargo.toml b/zk-token-sdk/Cargo.toml index 7f4c54a154f1df..db833848132b90 100644 --- a/zk-token-sdk/Cargo.toml +++ b/zk-token-sdk/Cargo.toml @@ -3,7 +3,7 @@ name = "solana-zk-token-sdk" description = "Solana Zk Token SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" -version = "1.14.1" +version = "1.14.2" license = "Apache-2.0" edition = "2021" @@ -12,7 +12,7 @@ base64 = "0.13" bytemuck = { version = "1.11.0", features = ["derive"] } num-derive = "0.3" num-traits = "0.2" -solana-program = { path = "../sdk/program", version = "=1.14.1" } +solana-program = { path = "../sdk/program", version = "=1.14.2" } [target.'cfg(not(target_os = "solana"))'.dependencies] aes-gcm-siv = "0.10.3" @@ -29,7 +29,7 @@ rand = "0.7" serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" sha3 = "0.9" -solana-sdk = { path = "../sdk", version = "=1.14.1" } +solana-sdk = { path = "../sdk", version = "=1.14.2" } subtle = "2" thiserror = "1.0" zeroize = { version = "1.3", default-features = false, features = ["zeroize_derive"] } From 4516dd90a641cbc28d72b88f7f9b013abdb70310 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Thu, 15 Sep 2022 02:27:07 +0000 Subject: [PATCH 117/465] Add serialization-control enum for RPC Options (backport #27676) (#27791) * Add serialization-control enum for RPC Options (#27676) * Add test to verify output when deserializing/reserializing empty fields * Add test to verify serialization from UiTransactionStatusMeta constructors * Add OptionSerializer * Use OptionSerializer for inner_instructions * Use OptionSerializer for loaded_addresses * Remove Default variant, use into instead * Add as_ref implementation * Use OptionSerializer for log_messages and rewards * Use OptionSerializer for token_balances * Use OptionSerializer for return_data * Use OptionSerializer for compute_units_consumed (cherry picked from commit 360ca07a4018fea2fe1511b3dd7b3d1c14570bf4) * Appease incorrect nightly lint Co-authored-by: Tyera Eulberg --- cli-output/src/display.rs | 12 +- client/src/mock_sender.rs | 19 +- transaction-status/src/lib.rs | 270 +++++++++++++++++--- transaction-status/src/option_serializer.rs | 78 ++++++ 4 files changed, 325 insertions(+), 54 deletions(-) create mode 100644 transaction-status/src/option_serializer.rs diff --git a/cli-output/src/display.rs b/cli-output/src/display.rs index e0a67b91fd1e08..38a9086f59f89f 100644 --- a/cli-output/src/display.rs +++ b/cli-output/src/display.rs @@ -263,10 +263,14 @@ fn write_transaction( write_status(w, &transaction_status.status, prefix)?; write_fees(w, transaction_status.fee, prefix)?; write_balances(w, transaction_status, prefix)?; - write_compute_units_consumed(w, transaction_status.compute_units_consumed, prefix)?; - write_log_messages(w, transaction_status.log_messages.as_ref(), prefix)?; - write_return_data(w, transaction_status.return_data.as_ref(), prefix)?; - write_rewards(w, transaction_status.rewards.as_ref(), prefix)?; + write_compute_units_consumed( + w, + transaction_status.compute_units_consumed.clone().into(), + prefix, + )?; + write_log_messages(w, transaction_status.log_messages.as_ref().into(), prefix)?; + write_return_data(w, transaction_status.return_data.as_ref().into(), prefix)?; + write_rewards(w, transaction_status.rewards.as_ref().into(), prefix)?; } else { writeln!(w, "{}Status: Unavailable", prefix)?; } diff --git a/client/src/mock_sender.rs b/client/src/mock_sender.rs index 8ab244a2996df9..d94cf0c53451b0 100644 --- a/client/src/mock_sender.rs +++ b/client/src/mock_sender.rs @@ -31,7 +31,8 @@ use { transaction::{self, Transaction, TransactionError, TransactionVersion}, }, solana_transaction_status::{ - EncodedConfirmedBlock, EncodedConfirmedTransactionWithStatusMeta, EncodedTransaction, + option_serializer::OptionSerializer, EncodedConfirmedBlock, + EncodedConfirmedTransactionWithStatusMeta, EncodedTransaction, EncodedTransactionWithStatusMeta, Rewards, TransactionBinaryEncoding, TransactionConfirmationStatus, TransactionStatus, UiCompiledInstruction, UiMessage, UiRawMessage, UiTransaction, UiTransactionStatusMeta, @@ -223,14 +224,14 @@ impl RpcSender for MockSender { fee: 0, pre_balances: vec![499999999999999950, 50, 1], post_balances: vec![499999999999999950, 50, 1], - inner_instructions: None, - log_messages: None, - pre_token_balances: None, - post_token_balances: None, - rewards: None, - loaded_addresses: None, - return_data: None, - compute_units_consumed: None, + inner_instructions: OptionSerializer::None, + log_messages: OptionSerializer::None, + pre_token_balances: OptionSerializer::None, + post_token_balances: OptionSerializer::None, + rewards: OptionSerializer::None, + loaded_addresses: OptionSerializer::Skip, + return_data: OptionSerializer::Skip, + compute_units_consumed: OptionSerializer::Skip, }), }, block_time: Some(1628633791), diff --git a/transaction-status/src/lib.rs b/transaction-status/src/lib.rs index 281581ccf15eea..430a79c9362108 100644 --- a/transaction-status/src/lib.rs +++ b/transaction-status/src/lib.rs @@ -3,6 +3,7 @@ pub use {crate::extract_memos::extract_and_fmt_memos, solana_sdk::reward_type::RewardType}; use { crate::{ + option_serializer::OptionSerializer, parse_accounts::{parse_legacy_message_accounts, parse_v0_message_accounts, ParsedAccount}, parse_instruction::{parse, ParsedInstruction}, }, @@ -33,6 +34,7 @@ extern crate lazy_static; extern crate serde_derive; pub mod extract_memos; +pub mod option_serializer; pub mod parse_accounts; pub mod parse_associated_token; pub mod parse_bpf_loader; @@ -249,10 +251,16 @@ pub struct UiTransactionTokenBalance { pub account_index: u8, pub mint: String, pub ui_token_amount: UiTokenAmount, - #[serde(default, skip_serializing_if = "Option::is_none")] - pub owner: Option, - #[serde(default, skip_serializing_if = "Option::is_none")] - pub program_id: Option, + #[serde( + default = "OptionSerializer::skip", + skip_serializing_if = "OptionSerializer::should_skip" + )] + pub owner: OptionSerializer, + #[serde( + default = "OptionSerializer::skip", + skip_serializing_if = "OptionSerializer::should_skip" + )] + pub program_id: OptionSerializer, } impl From for UiTransactionTokenBalance { @@ -262,14 +270,14 @@ impl From for UiTransactionTokenBalance { mint: token_balance.mint, ui_token_amount: token_balance.ui_token_amount, owner: if !token_balance.owner.is_empty() { - Some(token_balance.owner) + OptionSerializer::Some(token_balance.owner) } else { - None + OptionSerializer::Skip }, program_id: if !token_balance.program_id.is_empty() { - Some(token_balance.program_id) + OptionSerializer::Some(token_balance.program_id) } else { - None + OptionSerializer::Skip }, } } @@ -319,17 +327,46 @@ pub struct UiTransactionStatusMeta { pub fee: u64, pub pre_balances: Vec, pub post_balances: Vec, - pub inner_instructions: Option>, - pub log_messages: Option>, - pub pre_token_balances: Option>, - pub post_token_balances: Option>, - pub rewards: Option, - #[serde(default, skip_serializing_if = "Option::is_none")] - pub loaded_addresses: Option, - #[serde(default, skip_serializing_if = "Option::is_none")] - pub return_data: Option, - #[serde(default, skip_serializing_if = "Option::is_none")] - pub compute_units_consumed: Option, + #[serde( + default = "OptionSerializer::none", + skip_serializing_if = "OptionSerializer::should_skip" + )] + pub inner_instructions: OptionSerializer>, + #[serde( + default = "OptionSerializer::none", + skip_serializing_if = "OptionSerializer::should_skip" + )] + pub log_messages: OptionSerializer>, + #[serde( + default = "OptionSerializer::none", + skip_serializing_if = "OptionSerializer::should_skip" + )] + pub pre_token_balances: OptionSerializer>, + #[serde( + default = "OptionSerializer::none", + skip_serializing_if = "OptionSerializer::should_skip" + )] + pub post_token_balances: OptionSerializer>, + #[serde( + default = "OptionSerializer::none", + skip_serializing_if = "OptionSerializer::should_skip" + )] + pub rewards: OptionSerializer, + #[serde( + default = "OptionSerializer::skip", + skip_serializing_if = "OptionSerializer::should_skip" + )] + pub loaded_addresses: OptionSerializer, + #[serde( + default = "OptionSerializer::skip", + skip_serializing_if = "OptionSerializer::should_skip" + )] + pub return_data: OptionSerializer, + #[serde( + default = "OptionSerializer::skip", + skip_serializing_if = "OptionSerializer::should_skip" + )] + pub compute_units_consumed: OptionSerializer, } /// A duplicate representation of LoadedAddresses @@ -366,22 +403,29 @@ impl UiTransactionStatusMeta { fee: meta.fee, pre_balances: meta.pre_balances, post_balances: meta.post_balances, - inner_instructions: meta.inner_instructions.map(|ixs| { - ixs.into_iter() - .map(|ix| UiInnerInstructions::parse(ix, &account_keys)) - .collect() - }), - log_messages: meta.log_messages, + inner_instructions: meta + .inner_instructions + .map(|ixs| { + ixs.into_iter() + .map(|ix| UiInnerInstructions::parse(ix, &account_keys)) + .collect() + }) + .into(), + log_messages: meta.log_messages.into(), pre_token_balances: meta .pre_token_balances - .map(|balance| balance.into_iter().map(Into::into).collect()), + .map(|balance| balance.into_iter().map(Into::into).collect()) + .into(), post_token_balances: meta .post_token_balances - .map(|balance| balance.into_iter().map(Into::into).collect()), - rewards: if show_rewards { meta.rewards } else { None }, - loaded_addresses: None, - return_data: meta.return_data.map(|return_data| return_data.into()), - compute_units_consumed: meta.compute_units_consumed, + .map(|balance| balance.into_iter().map(Into::into).collect()) + .into(), + rewards: if show_rewards { meta.rewards } else { None }.into(), + loaded_addresses: OptionSerializer::Skip, + return_data: OptionSerializer::or_skip( + meta.return_data.map(|return_data| return_data.into()), + ), + compute_units_consumed: OptionSerializer::or_skip(meta.compute_units_consumed), } } } @@ -396,18 +440,23 @@ impl From for UiTransactionStatusMeta { post_balances: meta.post_balances, inner_instructions: meta .inner_instructions - .map(|ixs| ixs.into_iter().map(Into::into).collect()), - log_messages: meta.log_messages, + .map(|ixs| ixs.into_iter().map(Into::into).collect()) + .into(), + log_messages: meta.log_messages.into(), pre_token_balances: meta .pre_token_balances - .map(|balance| balance.into_iter().map(Into::into).collect()), + .map(|balance| balance.into_iter().map(Into::into).collect()) + .into(), post_token_balances: meta .post_token_balances - .map(|balance| balance.into_iter().map(Into::into).collect()), - rewards: meta.rewards, - loaded_addresses: Some(UiLoadedAddresses::from(&meta.loaded_addresses)), - return_data: meta.return_data.map(|return_data| return_data.into()), - compute_units_consumed: meta.compute_units_consumed, + .map(|balance| balance.into_iter().map(Into::into).collect()) + .into(), + rewards: meta.rewards.into(), + loaded_addresses: Some(UiLoadedAddresses::from(&meta.loaded_addresses)).into(), + return_data: OptionSerializer::or_skip( + meta.return_data.map(|return_data| return_data.into()), + ), + compute_units_consumed: OptionSerializer::or_skip(meta.compute_units_consumed), } } } @@ -722,7 +771,7 @@ impl VersionedTransactionWithStatusMeta { _ => { let mut meta = UiTransactionStatusMeta::from(self.meta); if !show_rewards { - meta.rewards = None; + meta.rewards = OptionSerializer::None; } meta } @@ -1038,6 +1087,15 @@ pub struct UiTransactionReturnData { pub data: (String, UiReturnDataEncoding), } +impl Default for UiTransactionReturnData { + fn default() -> Self { + Self { + program_id: String::default(), + data: (String::default(), UiReturnDataEncoding::Base64), + } + } +} + impl From for UiTransactionReturnData { fn from(return_data: TransactionReturnData) -> Self { Self { @@ -1058,7 +1116,7 @@ pub enum UiReturnDataEncoding { #[cfg(test)] mod test { - use super::*; + use {super::*, serde_json::json}; #[test] fn test_decode_invalid_transaction() { @@ -1152,4 +1210,134 @@ mod test { }; assert!(status.satisfies_commitment(CommitmentConfig::confirmed())); } + + #[test] + fn test_serde_empty_fields() { + fn test_serde<'de, T: serde::Serialize + serde::Deserialize<'de>>( + json_input: &'de str, + expected_json_output: &str, + ) { + let typed_meta: T = serde_json::from_str(json_input).unwrap(); + let reserialized_value = json!(typed_meta); + + let expected_json_output_value: serde_json::Value = + serde_json::from_str(expected_json_output).unwrap(); + assert_eq!(reserialized_value, expected_json_output_value); + } + + let json_input = "{\ + \"err\":null,\ + \"status\":{\"Ok\":null},\ + \"fee\":1234,\ + \"preBalances\":[1,2,3],\ + \"postBalances\":[4,5,6]\ + }"; + let expected_json_output = "{\ + \"err\":null,\ + \"status\":{\"Ok\":null},\ + \"fee\":1234,\ + \"preBalances\":[1,2,3],\ + \"postBalances\":[4,5,6],\ + \"innerInstructions\":null,\ + \"logMessages\":null,\ + \"preTokenBalances\":null,\ + \"postTokenBalances\":null,\ + \"rewards\":null\ + }"; + test_serde::(json_input, expected_json_output); + + let json_input = "{\ + \"accountIndex\":5,\ + \"mint\":\"DXM2yVSouSg1twmQgHLKoSReqXhtUroehWxrTgPmmfWi\",\ + \"uiTokenAmount\": { + \"amount\": \"1\",\ + \"decimals\": 0,\ + \"uiAmount\": 1.0,\ + \"uiAmountString\": \"1\"\ + }\ + }"; + let expected_json_output = "{\ + \"accountIndex\":5,\ + \"mint\":\"DXM2yVSouSg1twmQgHLKoSReqXhtUroehWxrTgPmmfWi\",\ + \"uiTokenAmount\": { + \"amount\": \"1\",\ + \"decimals\": 0,\ + \"uiAmount\": 1.0,\ + \"uiAmountString\": \"1\"\ + }\ + }"; + test_serde::(json_input, expected_json_output); + } + + #[test] + fn test_ui_transaction_status_meta_ctors_serialization() { + let meta = TransactionStatusMeta { + status: Ok(()), + fee: 1234, + pre_balances: vec![1, 2, 3], + post_balances: vec![4, 5, 6], + inner_instructions: None, + log_messages: None, + pre_token_balances: None, + post_token_balances: None, + rewards: None, + loaded_addresses: LoadedAddresses { + writable: vec![], + readonly: vec![], + }, + return_data: None, + compute_units_consumed: None, + }; + let expected_json_output_value: serde_json::Value = serde_json::from_str( + "{\ + \"err\":null,\ + \"status\":{\"Ok\":null},\ + \"fee\":1234,\ + \"preBalances\":[1,2,3],\ + \"postBalances\":[4,5,6],\ + \"innerInstructions\":null,\ + \"logMessages\":null,\ + \"preTokenBalances\":null,\ + \"postTokenBalances\":null,\ + \"rewards\":null,\ + \"loadedAddresses\":{\ + \"readonly\": [],\ + \"writable\": []\ + }\ + }", + ) + .unwrap(); + let ui_meta_from: UiTransactionStatusMeta = meta.clone().into(); + assert_eq!( + serde_json::to_value(&ui_meta_from).unwrap(), + expected_json_output_value + ); + + let expected_json_output_value: serde_json::Value = serde_json::from_str( + "{\ + \"err\":null,\ + \"status\":{\"Ok\":null},\ + \"fee\":1234,\ + \"preBalances\":[1,2,3],\ + \"postBalances\":[4,5,6],\ + \"innerInstructions\":null,\ + \"logMessages\":null,\ + \"preTokenBalances\":null,\ + \"postTokenBalances\":null,\ + \"rewards\":null\ + }", + ) + .unwrap(); + let ui_meta_parse_with_rewards = UiTransactionStatusMeta::parse(meta.clone(), &[], true); + assert_eq!( + serde_json::to_value(&ui_meta_parse_with_rewards).unwrap(), + expected_json_output_value + ); + + let ui_meta_parse_no_rewards = UiTransactionStatusMeta::parse(meta, &[], false); + assert_eq!( + serde_json::to_value(&ui_meta_parse_no_rewards).unwrap(), + expected_json_output_value + ); + } } diff --git a/transaction-status/src/option_serializer.rs b/transaction-status/src/option_serializer.rs new file mode 100644 index 00000000000000..2078d7dff801b6 --- /dev/null +++ b/transaction-status/src/option_serializer.rs @@ -0,0 +1,78 @@ +use serde::{ser::Error, Deserialize, Deserializer, Serialize, Serializer}; + +#[derive(Clone, Debug, PartialEq, Eq)] +pub enum OptionSerializer { + Some(T), + None, + Skip, +} + +impl OptionSerializer { + pub fn none() -> Self { + Self::None + } + + pub fn skip() -> Self { + Self::Skip + } + + pub fn should_skip(&self) -> bool { + matches!(self, Self::Skip) + } + + pub fn or_skip(option: Option) -> Self { + match option { + Option::Some(item) => Self::Some(item), + Option::None => Self::Skip, + } + } + + pub fn as_ref(&self) -> OptionSerializer<&T> { + #[allow(clippy::needless_match)] // The nightly clippy used by CI is incorrect here + match self { + OptionSerializer::Some(item) => OptionSerializer::Some(item), + OptionSerializer::None => OptionSerializer::None, + OptionSerializer::Skip => OptionSerializer::Skip, + } + } +} + +impl From> for OptionSerializer { + fn from(option: Option) -> Self { + match option { + Option::Some(item) => Self::Some(item), + Option::None => Self::None, + } + } +} + +impl From> for Option { + fn from(option: OptionSerializer) -> Self { + match option { + OptionSerializer::Some(item) => Self::Some(item), + _ => Self::None, + } + } +} + +impl Serialize for OptionSerializer { + fn serialize(&self, serializer: S) -> Result + where + S: Serializer, + { + match self { + Self::Some(item) => item.serialize(serializer), + Self::None => serializer.serialize_none(), + Self::Skip => Err(Error::custom("Skip variants should not be serialized")), + } + } +} + +impl<'de, T: Deserialize<'de>> Deserialize<'de> for OptionSerializer { + fn deserialize(deserializer: D) -> Result + where + D: Deserializer<'de>, + { + Option::deserialize(deserializer).map(Into::into) + } +} From 4354ea9a58e1474f146e4fea1b18d6cb2d6062f4 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Thu, 15 Sep 2022 10:43:59 +0000 Subject: [PATCH 118/465] chore: fix docs pipeline (backport #27794) (#27796) * chore: fix docs pipeline (#27794) * trigger docs build when .github/workflows/docs.yml changed * echo tag info * echo channel info * echo any changes info * bump tj-actions/changed-files@v29.0.7 * fix variable name * fix broken link (cherry picked from commit 6eeff08b156e3285f9ffd93c0f289c735b612a32) # Conflicts: # docs/src/getstarted/local.md * fix conflict Co-authored-by: Yihau Chen --- .github/workflows/docs.yml | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index e57865565d352d..72d5e9c20b6922 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -31,21 +31,25 @@ jobs: - name: Get specific changed files id: changed-files-specific - uses: tj-actions/changed-files@v19 + uses: tj-actions/changed-files@v29.0.7 with: files: | + .github/workflows/docs.yml docs/** - name: Pre Build id: prebuild run: | + echo "tag: ${{ steps.check.outputs.tag }}" + echo "channel: ${{ steps.check.outputs.channel }}" + echo "any changes: ${{ steps.changed-files-specific.outputs.any_changed }}" echo "::set-output name=need_to_build::${{ steps.check.outputs.tag != '' || ( (steps.check.outputs.channel == 'edge' || steps.check.outputs.channel == 'beta') && - steps.changed-files-specific.outputs.any_change != '' + steps.changed-files-specific.outputs.any_changed != '' ) }}" shell: bash From 48328549d425ab3b54b4ef0da882a5dcb2125dc2 Mon Sep 17 00:00:00 2001 From: Tyera Eulberg Date: Thu, 15 Sep 2022 09:41:46 -0700 Subject: [PATCH 119/465] Fix parsing versions in published docs (#27806) Fix parsing versions --- docs/src/developing/clients/jsonrpc-api.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/src/developing/clients/jsonrpc-api.md b/docs/src/developing/clients/jsonrpc-api.md index 311a2b1156eec0..cf89577c0e94a7 100644 --- a/docs/src/developing/clients/jsonrpc-api.md +++ b/docs/src/developing/clients/jsonrpc-api.md @@ -214,7 +214,7 @@ JSON parsing for the following native and SPL programs: | Program | Account State | Instructions | | --- | --- | --- | -| Address Lookup | v1.14.2 | | +| Address Lookup | v1.15.0 | v1.15.0 | | BPF Loader | n/a | stable | | BPF Upgradeable Loader | stable | stable | | Config | stable | | From 0dda25fa9482928f97e70dbb8cb91d134dfbf742 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Thu, 15 Sep 2022 11:56:00 -0700 Subject: [PATCH 120/465] don't return zero lamport accounts from 'load' with feature (backport #27793) (#27803) * don't return zero lamport accounts from 'load' with feature (#27793) * don't return zero lamport accounts from 'load' * add feature * rename (cherry picked from commit 138d5ed5b0d21e8e0a287748e05678040e830943) # Conflicts: # runtime/src/accounts.rs # sdk/src/feature_set.rs * fix merge errors Co-authored-by: Jeff Washington (jwash) --- runtime/src/accounts.rs | 58 +++++++++++++++++------- runtime/src/accounts_db.rs | 29 +++++++++--- runtime/src/bank/address_lookup_table.rs | 12 +++++ sdk/src/feature_set.rs | 5 ++ 4 files changed, 82 insertions(+), 22 deletions(-) diff --git a/runtime/src/accounts.rs b/runtime/src/accounts.rs index 1da0fb7d8406e7..66770e85675492 100644 --- a/runtime/src/accounts.rs +++ b/runtime/src/accounts.rs @@ -4,7 +4,7 @@ use { account_rent_state::{check_rent_state_with_account, RentState}, accounts_db::{ AccountShrinkThreshold, AccountsAddRootTiming, AccountsDb, AccountsDbConfig, - BankHashInfo, LoadHint, LoadedAccount, ScanStorageResult, + BankHashInfo, LoadHint, LoadZeroLamports, LoadedAccount, ScanStorageResult, ACCOUNTS_DB_CONFIG_FOR_BENCHMARKS, ACCOUNTS_DB_CONFIG_FOR_TESTING, }, accounts_index::{ @@ -35,7 +35,8 @@ use { bpf_loader_upgradeable::{self, UpgradeableLoaderState}, clock::{BankId, Slot, INITIAL_RENT_EPOCH}, feature_set::{ - self, add_set_compute_unit_price_ix, use_default_units_in_fee_calculation, FeatureSet, + self, add_set_compute_unit_price_ix, return_none_for_zero_lamport_accounts, + use_default_units_in_fee_calculation, FeatureSet, }, fee::FeeStructure, genesis_config::ClusterType, @@ -253,6 +254,13 @@ impl Accounts { feature_set: &FeatureSet, account_overrides: Option<&AccountOverrides>, ) -> Result { + let load_zero_lamports = + if feature_set.is_active(&return_none_for_zero_lamport_accounts::id()) { + LoadZeroLamports::None + } else { + LoadZeroLamports::SomeWithZeroLamportAccount + }; + // Copy all the accounts let message = tx.message(); // NOTE: this check will never fail because `tx` is sanitized @@ -288,7 +296,7 @@ impl Accounts { (account_override.clone(), 0) } else { self.accounts_db - .load_with_fixed_root(ancestors, key) + .load_with_fixed_root(ancestors, key, load_zero_lamports) .map(|(mut account, _)| { if message.is_writable(i) { let rent_due = rent_collector @@ -337,9 +345,12 @@ impl Accounts { programdata_address, }) = account.state() { - if let Some((programdata_account, _)) = self - .accounts_db - .load_with_fixed_root(ancestors, &programdata_address) + if let Some((programdata_account, _)) = + self.accounts_db.load_with_fixed_root( + ancestors, + &programdata_address, + load_zero_lamports, + ) { account_deps .push((programdata_address, programdata_account)); @@ -383,6 +394,7 @@ impl Accounts { &mut accounts, instruction.program_id_index as usize, error_counters, + load_zero_lamports, ) }) .collect::>>>()?; @@ -454,6 +466,7 @@ impl Accounts { accounts: &mut Vec, mut program_account_index: usize, error_counters: &mut TransactionErrorMetrics, + load_zero_lamports: LoadZeroLamports, ) -> Result> { let mut account_indices = Vec::new(); let mut program_id = match accounts.get(program_account_index) { @@ -471,10 +484,11 @@ impl Accounts { } depth += 1; - program_account_index = match self - .accounts_db - .load_with_fixed_root(ancestors, &program_id) - { + program_account_index = match self.accounts_db.load_with_fixed_root( + ancestors, + &program_id, + load_zero_lamports, + ) { Some((program_account, _)) => { let account_index = accounts.len(); accounts.push((program_id, program_account)); @@ -500,10 +514,11 @@ impl Accounts { programdata_address, }) = program.state() { - let programdata_account_index = match self - .accounts_db - .load_with_fixed_root(ancestors, &programdata_address) - { + let programdata_account_index = match self.accounts_db.load_with_fixed_root( + ancestors, + &programdata_address, + load_zero_lamports, + ) { Some((programdata_account, _)) => { let account_index = accounts.len(); accounts.push((programdata_address, programdata_account)); @@ -601,10 +616,15 @@ impl Accounts { ancestors: &Ancestors, address_table_lookup: &MessageAddressTableLookup, slot_hashes: &SlotHashes, + load_zero_lamports: LoadZeroLamports, ) -> std::result::Result { let table_account = self .accounts_db - .load_with_fixed_root(ancestors, &address_table_lookup.account_key) + .load_with_fixed_root( + ancestors, + &address_table_lookup.account_key, + load_zero_lamports, + ) .map(|(account, _rent)| account) .ok_or(AddressLookupError::LookupTableAccountNotFound)?; @@ -2063,6 +2083,7 @@ mod tests { &ancestors, &address_table_lookup, &SlotHashes::default(), + LoadZeroLamports::SomeWithZeroLamportAccount, ), Err(AddressLookupError::LookupTableAccountNotFound), ); @@ -2080,7 +2101,8 @@ mod tests { ); let invalid_table_key = Pubkey::new_unique(); - let invalid_table_account = AccountSharedData::default(); + let mut invalid_table_account = AccountSharedData::default(); + invalid_table_account.set_lamports(1); accounts.store_slow_uncached(0, &invalid_table_key, &invalid_table_account); let address_table_lookup = MessageAddressTableLookup { @@ -2094,6 +2116,7 @@ mod tests { &ancestors, &address_table_lookup, &SlotHashes::default(), + LoadZeroLamports::SomeWithZeroLamportAccount, ), Err(AddressLookupError::InvalidAccountOwner), ); @@ -2126,6 +2149,7 @@ mod tests { &ancestors, &address_table_lookup, &SlotHashes::default(), + LoadZeroLamports::SomeWithZeroLamportAccount, ), Err(AddressLookupError::InvalidAccountData), ); @@ -2170,6 +2194,7 @@ mod tests { &ancestors, &address_table_lookup, &SlotHashes::default(), + LoadZeroLamports::SomeWithZeroLamportAccount, ), Ok(LoadedAddresses { writable: vec![table_addresses[0]], @@ -2466,6 +2491,7 @@ mod tests { &mut vec![(keypair.pubkey(), account)], 0, &mut error_counters, + LoadZeroLamports::SomeWithZeroLamportAccount, ), Err(TransactionError::ProgramAccountNotFound) ); diff --git a/runtime/src/accounts_db.rs b/runtime/src/accounts_db.rs index 3e148e5e171b03..1a74280a314364 100644 --- a/runtime/src/accounts_db.rs +++ b/runtime/src/accounts_db.rs @@ -142,6 +142,17 @@ pub enum StoreReclaims { Ignore, } +/// specifies how to return zero lamport accounts +/// This will only be useful until a feature activation occurs. +#[derive(Clone, Copy)] +pub enum LoadZeroLamports { + /// return None if loaded account has zero lamports + None, + /// return Some(account with zero lamports) if loaded account has zero lamports + /// Today this is the default. With feature activation, this will no longer be possible. + SomeWithZeroLamportAccount, +} + // the current best way to add filler accounts is gradually. // In other scenarios, such as monitoring catchup with large # of accounts, it may be useful to be able to // add filler accounts at the beginning, so that code path remains but won't execute at the moment. @@ -4284,8 +4295,15 @@ impl AccountsDb { &self, ancestors: &Ancestors, pubkey: &Pubkey, + load_zero_lamports: LoadZeroLamports, ) -> Option<(AccountSharedData, Slot)> { self.load(ancestors, pubkey, LoadHint::FixedMaxRoot) + .filter(|(account, _)| { + matches!( + load_zero_lamports, + LoadZeroLamports::SomeWithZeroLamportAccount + ) || !account.is_zero_lamport() + }) } pub fn load_without_fixed_root( @@ -13432,13 +13450,13 @@ pub mod tests { assert_eq!(db.read_only_accounts_cache.cache_len(), 0); let account = db - .load_with_fixed_root(&Ancestors::default(), &account_key) + .load_with_fixed_root(&Ancestors::default(), &account_key, LoadZeroLamports::None) .map(|(account, _)| account) .unwrap(); assert_eq!(account.lamports(), 1); assert_eq!(db.read_only_accounts_cache.cache_len(), 1); let account = db - .load_with_fixed_root(&Ancestors::default(), &account_key) + .load_with_fixed_root(&Ancestors::default(), &account_key, LoadZeroLamports::None) .map(|(account, _)| account) .unwrap(); assert_eq!(account.lamports(), 1); @@ -13446,10 +13464,9 @@ pub mod tests { db.store_cached((2, &[(&account_key, &zero_lamport_account)][..]), None); assert_eq!(db.read_only_accounts_cache.cache_len(), 1); let account = db - .load_with_fixed_root(&Ancestors::default(), &account_key) - .map(|(account, _)| account) - .unwrap(); - assert_eq!(account.lamports(), 0); + .load_with_fixed_root(&Ancestors::default(), &account_key, LoadZeroLamports::None) + .map(|(account, _)| account); + assert!(account.is_none()); assert_eq!(db.read_only_accounts_cache.cache_len(), 1); } diff --git a/runtime/src/bank/address_lookup_table.rs b/runtime/src/bank/address_lookup_table.rs index 3916177afd5668..0a4bc732f45ba6 100644 --- a/runtime/src/bank/address_lookup_table.rs +++ b/runtime/src/bank/address_lookup_table.rs @@ -1,7 +1,9 @@ use { super::Bank, + crate::accounts_db::LoadZeroLamports, solana_address_lookup_table_program::error::AddressLookupError, solana_sdk::{ + feature_set::return_none_for_zero_lamport_accounts, message::v0::{LoadedAddresses, MessageAddressTableLookup}, transaction::{AddressLoader, Result as TransactionResult, TransactionError}, }, @@ -16,6 +18,15 @@ impl AddressLoader for &Bank { return Err(TransactionError::UnsupportedVersion); } + let load_zero_lamports = if self + .feature_set + .is_active(&return_none_for_zero_lamport_accounts::id()) + { + LoadZeroLamports::None + } else { + LoadZeroLamports::SomeWithZeroLamportAccount + }; + let slot_hashes = self .sysvar_cache .read() @@ -30,6 +41,7 @@ impl AddressLoader for &Bank { &self.ancestors, address_table_lookup, &slot_hashes, + load_zero_lamports, ) }) .collect::>()?) diff --git a/sdk/src/feature_set.rs b/sdk/src/feature_set.rs index d9f054ce7e2040..f30d439c2e79bb 100644 --- a/sdk/src/feature_set.rs +++ b/sdk/src/feature_set.rs @@ -504,6 +504,10 @@ pub mod vote_state_update_root_fix { solana_sdk::declare_id!("G74BkWBzmsByZ1kxHy44H3wjwp5hp7JbrGRuDpco22tY"); } +pub mod return_none_for_zero_lamport_accounts { + solana_sdk::declare_id!("7K5HFrS1WAq6ND7RQbShXZXbtAookyTfaDQPTJNuZpze"); +} + lazy_static! { /// Map of feature identifiers to user-visible description pub static ref FEATURE_NAMES: HashMap = [ @@ -624,6 +628,7 @@ lazy_static! { (check_ping_ancestor_requests::id(), "ancestor hash repair socket ping/pong support #26963"), (incremental_snapshot_only_incremental_hash_calculation::id(), "only hash accounts in incremental snapshot during incremental snapshot creation #26799"), (vote_state_update_root_fix::id(), "fix root in vote state updates #27361"), + (return_none_for_zero_lamport_accounts::id(), "return none for zero lamport accounts #27800"), /*************** ADD NEW FEATURES HERE ***************/ ] .iter() From eb3d8046c238177f681b2f4432f3e66036df921f Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Thu, 15 Sep 2022 19:35:41 +0000 Subject: [PATCH 121/465] Add new TransactionDetails level (backport #27601) (#27805) Add new TransactionDetails level (#27601) * Add new transaction details level * Dedupe common code * Update docs * Respect showRewards parameter in tx meta (cherry picked from commit 973a5fb0e94e5569f5f4de72a2cdcaf524203195) Co-authored-by: Tyera Eulberg --- docs/src/developing/clients/jsonrpc-api.md | 2 +- transaction-status/src/lib.rs | 138 +++++++++++++++++++-- 2 files changed, 132 insertions(+), 8 deletions(-) diff --git a/docs/src/developing/clients/jsonrpc-api.md b/docs/src/developing/clients/jsonrpc-api.md index cf89577c0e94a7..f9952cb9ca058c 100644 --- a/docs/src/developing/clients/jsonrpc-api.md +++ b/docs/src/developing/clients/jsonrpc-api.md @@ -411,7 +411,7 @@ Returns identity and transaction information about a confirmed block in the ledg - (optional) `` - Configuration object containing the following optional fields: - (optional) `encoding: ` - encoding for each returned Transaction, either "json", "jsonParsed", "base58" (_slow_), "base64". If parameter not provided, the default encoding is "json". ["jsonParsed" encoding](jsonrpc-api.md#parsed-responses) attempts to use program-specific instruction parsers to return more human-readable and explicit data in the `transaction.message.instructions` list. If "jsonParsed" is requested but a parser cannot be found, the instruction falls back to regular JSON encoding (`accounts`, `data`, and `programIdIndex` fields). - - (optional) `transactionDetails: ` - level of transaction detail to return, either "full", "signatures", or "none". If parameter not provided, the default detail level is "full". + - (optional) `transactionDetails: ` - level of transaction detail to return, either "full", "accounts", "signatures", or "none". If parameter not provided, the default detail level is "full". If "accounts" are requested, transaction details only include signatures and an annotated list of accounts in each transaction. Transaction metadata is limited to only: fee, err, pre_balances, post_balances, pre_token_balances, and post_token_balances. - (optional) `rewards: bool` - whether to populate the `rewards` array. If parameter not provided, the default includes rewards. - (optional) `commitment: ` - [Commitment](jsonrpc-api.md#configuring-state-commitment); "processed" is not supported. If parameter not provided, the default is "finalized". - (optional) `maxSupportedTransactionVersion: ` - set the max transaction version to return in responses. If the requested block contains a transaction with a higher version, an error will be returned. If this parameter is omitted, only legacy transactions will be returned, and a block containing any versioned transaction will prompt the error. diff --git a/transaction-status/src/lib.rs b/transaction-status/src/lib.rs index 430a79c9362108..ea219516f78b31 100644 --- a/transaction-status/src/lib.rs +++ b/transaction-status/src/lib.rs @@ -74,6 +74,11 @@ pub trait EncodableWithMeta { fn json_encode(&self) -> Self::Encoded; } +trait JsonAccounts { + type Encoded; + fn build_json_accounts(&self) -> Self::Encoded; +} + #[derive(Serialize, Deserialize, Clone, Copy, Debug, Eq, Hash, PartialEq)] #[serde(rename_all = "camelCase")] pub enum TransactionBinaryEncoding { @@ -115,6 +120,7 @@ pub enum TransactionDetails { Full, Signatures, None, + Accounts, } impl Default for TransactionDetails { @@ -428,6 +434,34 @@ impl UiTransactionStatusMeta { compute_units_consumed: OptionSerializer::or_skip(meta.compute_units_consumed), } } + + fn build_simple(meta: TransactionStatusMeta, show_rewards: bool) -> Self { + Self { + err: meta.status.clone().err(), + status: meta.status, + fee: meta.fee, + pre_balances: meta.pre_balances, + post_balances: meta.post_balances, + inner_instructions: OptionSerializer::Skip, + log_messages: OptionSerializer::Skip, + pre_token_balances: meta + .pre_token_balances + .map(|balance| balance.into_iter().map(Into::into).collect()) + .into(), + post_token_balances: meta + .post_token_balances + .map(|balance| balance.into_iter().map(Into::into).collect()) + .into(), + rewards: if show_rewards { + meta.rewards.into() + } else { + OptionSerializer::Skip + }, + loaded_addresses: OptionSerializer::Skip, + return_data: OptionSerializer::Skip, + compute_units_consumed: OptionSerializer::Skip, + } + } } impl From for UiTransactionStatusMeta { @@ -609,6 +643,20 @@ impl ConfirmedBlock { ), ), TransactionDetails::None => (None, None), + TransactionDetails::Accounts => ( + Some( + self.transactions + .into_iter() + .map(|tx_with_meta| { + tx_with_meta.build_json_accounts( + options.max_supported_transaction_version, + options.show_rewards, + ) + }) + .collect::, _>>()?, + ), + None, + ), }; Ok(UiConfirmedBlock { previous_blockhash: self.previous_blockhash, @@ -732,16 +780,31 @@ impl TransactionWithStatusMeta { Self::Complete(tx_with_meta) => tx_with_meta.account_keys(), } } -} -impl VersionedTransactionWithStatusMeta { - pub fn encode( + fn build_json_accounts( self, - encoding: UiTransactionEncoding, max_supported_transaction_version: Option, show_rewards: bool, ) -> Result { - let version = match ( + match self { + Self::MissingMetadata(ref transaction) => Ok(EncodedTransactionWithStatusMeta { + version: None, + transaction: transaction.build_json_accounts(), + meta: None, + }), + Self::Complete(tx_with_meta) => { + tx_with_meta.build_json_accounts(max_supported_transaction_version, show_rewards) + } + } + } +} + +impl VersionedTransactionWithStatusMeta { + fn validate_version( + &self, + max_supported_transaction_version: Option, + ) -> Result, EncodeError> { + match ( max_supported_transaction_version, self.transaction.version(), ) { @@ -758,7 +821,16 @@ impl VersionedTransactionWithStatusMeta { Err(EncodeError::UnsupportedTransactionVersion(version)) } } - }?; + } + } + + pub fn encode( + self, + encoding: UiTransactionEncoding, + max_supported_transaction_version: Option, + show_rewards: bool, + ) -> Result { + let version = self.validate_version(max_supported_transaction_version)?; Ok(EncodedTransactionWithStatusMeta { transaction: self.transaction.encode_with_meta(encoding, &self.meta), @@ -786,6 +858,40 @@ impl VersionedTransactionWithStatusMeta { Some(&self.meta.loaded_addresses), ) } + + fn build_json_accounts( + self, + max_supported_transaction_version: Option, + show_rewards: bool, + ) -> Result { + let version = self.validate_version(max_supported_transaction_version)?; + + let account_keys = match &self.transaction.message { + VersionedMessage::Legacy(message) => parse_legacy_message_accounts(message), + VersionedMessage::V0(message) => { + let loaded_message = + LoadedMessage::new_borrowed(message, &self.meta.loaded_addresses); + parse_v0_message_accounts(&loaded_message) + } + }; + + Ok(EncodedTransactionWithStatusMeta { + transaction: EncodedTransaction::Accounts(UiAccountsList { + signatures: self + .transaction + .signatures + .iter() + .map(ToString::to_string) + .collect(), + account_keys, + }), + meta: Some(UiTransactionStatusMeta::build_simple( + self.meta, + show_rewards, + )), + version, + }) + } } #[derive(Clone, Debug, PartialEq, Serialize, Deserialize)] @@ -848,6 +954,7 @@ pub enum EncodedTransaction { LegacyBinary(String), // Old way of expressing base-58, retained for RPC backwards compatibility Binary(String, TransactionBinaryEncoding), Json(UiTransaction), + Accounts(UiAccountsList), } impl EncodableWithMeta for VersionedTransaction { @@ -919,10 +1026,20 @@ impl Encodable for Transaction { } } +impl JsonAccounts for Transaction { + type Encoded = EncodedTransaction; + fn build_json_accounts(&self) -> Self::Encoded { + EncodedTransaction::Accounts(UiAccountsList { + signatures: self.signatures.iter().map(ToString::to_string).collect(), + account_keys: parse_legacy_message_accounts(&self.message), + }) + } +} + impl EncodedTransaction { pub fn decode(&self) -> Option { let (blob, encoding) = match self { - Self::Json(_) => return None, + Self::Json(_) | Self::Accounts(_) => return None, Self::LegacyBinary(blob) => (blob, TransactionBinaryEncoding::Base58), Self::Binary(blob, encoding) => (blob, *encoding), }; @@ -1040,6 +1157,13 @@ pub struct UiRawMessage { pub address_table_lookups: Option>, } +#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +pub struct UiAccountsList { + pub signatures: Vec, + pub account_keys: Vec, +} + /// A duplicate representation of a MessageAddressTableLookup, in raw format, for pretty JSON serialization #[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] From c3182e16804f1baf31a6ab0c92e5233787e92951 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Thu, 15 Sep 2022 12:38:44 -0700 Subject: [PATCH 122/465] clean race condition with extra unref (backport #27682) (#27802) * clean race condition with extra unref (#27682) * clean race condition with extra unref * clarify comment * fix test * cleanup test * clippy (cherry picked from commit 1811d684b5bee2ab6e127cf09b16ae9a725b4b89) # Conflicts: # runtime/src/accounts_db.rs # runtime/src/accounts_index.rs # runtime/src/in_mem_accounts_index.rs * fix merge errors * fix cargo version difference Co-authored-by: Jeff Washington (jwash) --- runtime/src/accounts_db.rs | 123 +++++++++++--- runtime/src/accounts_index.rs | 237 +++++++++++++++++++++++++-- runtime/src/in_mem_accounts_index.rs | 52 +++++- runtime/src/snapshot_minimizer.rs | 2 +- 4 files changed, 379 insertions(+), 35 deletions(-) diff --git a/runtime/src/accounts_db.rs b/runtime/src/accounts_db.rs index 1a74280a314364..28082e7e7bebdd 100644 --- a/runtime/src/accounts_db.rs +++ b/runtime/src/accounts_db.rs @@ -429,6 +429,7 @@ pub(crate) type SlotStores = Arc>; type AppendVecOffsets = HashMap>; type ReclaimResult = (AccountSlots, AppendVecOffsets); +type PubkeysRemovedFromAccountsIndex = HashSet; type ShrinkCandidates = HashMap>>; trait Versioned { @@ -2162,15 +2163,20 @@ impl AccountsDb { purges: Vec, max_clean_root: Option, ancient_account_cleans: &AtomicU64, - ) -> ReclaimResult { + ) -> (ReclaimResult, PubkeysRemovedFromAccountsIndex) { + let pubkeys_removed_from_accounts_index = HashSet::default(); if purges.is_empty() { - return ReclaimResult::default(); + return ( + ReclaimResult::default(), + pubkeys_removed_from_accounts_index, + ); } // This number isn't carefully chosen; just guessed randomly such that // the hot loop will be the order of ~Xms. const INDEX_CLEAN_BULK_COUNT: usize = 4096; let one_epoch_old = self.get_accounts_hash_complete_one_epoch_old(); + let pubkeys_removed_from_accounts_index = Mutex::new(pubkeys_removed_from_accounts_index); let mut clean_rooted = Measure::start("clean_old_root-ms"); let reclaim_vecs = purges @@ -2178,9 +2184,20 @@ impl AccountsDb { .filter_map(|pubkeys: &[Pubkey]| { let mut reclaims = Vec::new(); for pubkey in pubkeys { - self.accounts_index - .clean_rooted_entries(pubkey, &mut reclaims, max_clean_root); + let removed_from_index = self.accounts_index.clean_rooted_entries( + pubkey, + &mut reclaims, + max_clean_root, + ); + + if removed_from_index { + pubkeys_removed_from_accounts_index + .lock() + .unwrap() + .insert(*pubkey); + } } + (!reclaims.is_empty()).then(|| { // figure out how many ancient accounts have been reclaimed let old_reclaims = reclaims @@ -2194,6 +2211,8 @@ impl AccountsDb { .collect::>(); clean_rooted.stop(); inc_new_counter_info!("clean-old-root-par-clean-ms", clean_rooted.as_ms() as usize); + let pubkeys_removed_from_accounts_index = + pubkeys_removed_from_accounts_index.into_inner().unwrap(); self.clean_accounts_stats .clean_old_root_us .fetch_add(clean_rooted.as_us(), Ordering::Relaxed); @@ -2210,6 +2229,7 @@ impl AccountsDb { None, Some((&self.clean_accounts_stats.purge_stats, &mut reclaim_result)), reset_accounts, + &pubkeys_removed_from_accounts_index, ); measure.stop(); debug!("{} {}", clean_rooted, measure); @@ -2217,7 +2237,7 @@ impl AccountsDb { self.clean_accounts_stats .clean_old_root_reclaim_us .fetch_add(measure.as_us(), Ordering::Relaxed); - reclaim_result + (reclaim_result, pubkeys_removed_from_accounts_index) } fn do_reset_uncleaned_roots(&self, max_clean_root: Option) { @@ -2325,10 +2345,11 @@ impl AccountsDb { self.sender_bg_hasher = Some(sender); } + #[must_use] pub(crate) fn purge_keys_exact<'a, C: 'a>( &'a self, pubkey_to_slot_set: impl Iterator, - ) -> Vec<(Slot, AccountInfo)> + ) -> (Vec<(Slot, AccountInfo)>, PubkeysRemovedFromAccountsIndex) where C: Contains<'a, Slot>, { @@ -2344,9 +2365,10 @@ impl AccountsDb { } } - self.accounts_index + let pubkeys_removed_from_accounts_index = self + .accounts_index .handle_dead_keys(&dead_keys, &self.account_indexes); - reclaims + (reclaims, pubkeys_removed_from_accounts_index) } fn max_clean_root(&self, proposed_clean_root: Option) -> Option { @@ -2666,11 +2688,12 @@ impl AccountsDb { accounts_scan.stop(); let mut clean_old_rooted = Measure::start("clean_old_roots"); - let (purged_account_slots, removed_accounts) = self.clean_accounts_older_than_root( - purges_old_accounts, - max_clean_root, - &ancient_account_cleans, - ); + let ((purged_account_slots, removed_accounts), mut pubkeys_removed_from_accounts_index) = + self.clean_accounts_older_than_root( + purges_old_accounts, + max_clean_root, + &ancient_account_cleans, + ); if self.caching_enabled { self.do_reset_uncleaned_roots(max_clean_root); @@ -2763,7 +2786,10 @@ impl AccountsDb { }) .collect(); - let reclaims = self.purge_keys_exact(pubkey_to_slot_set.iter()); + let (reclaims, pubkeys_removed_from_accounts_index2) = + self.purge_keys_exact(pubkey_to_slot_set.iter()); + pubkeys_removed_from_accounts_index + .extend(pubkeys_removed_from_accounts_index2.into_iter()); // Don't reset from clean, since the pubkeys in those stores may need to be unref'ed // and those stores may be used for background hashing. @@ -2774,6 +2800,7 @@ impl AccountsDb { None, Some((&self.clean_accounts_stats.purge_stats, &mut reclaim_result)), reset_accounts, + &pubkeys_removed_from_accounts_index, ); reclaims_time.stop(); @@ -2789,6 +2816,11 @@ impl AccountsDb { i64 ), ("oldest_dirty_slot", key_timings.oldest_dirty_slot, i64), + ( + "pubkeys_removed_from_accounts_index", + pubkeys_removed_from_accounts_index.len(), + i64 + ), ( "dirty_store_processing_us", key_timings.dirty_store_processing_us, @@ -2921,12 +2953,15 @@ impl AccountsDb { /// * `reset_accounts` - Reset the append_vec store when the store is dead (count==0) /// From the clean and shrink paths it should be false since there may be an in-progress /// hash operation and the stores may hold accounts that need to be unref'ed. + /// * `pubkeys_removed_from_accounts_index` - These keys have already been removed from the accounts index + /// and should not be unref'd. If they exist in the accounts index, they are NEW. fn handle_reclaims<'a, I>( &'a self, reclaims: Option, expected_single_dead_slot: Option, purge_stats_and_reclaim_result: Option<(&PurgeStats, &mut ReclaimResult)>, reset_accounts: bool, + pubkeys_removed_from_accounts_index: &PubkeysRemovedFromAccountsIndex, ) where I: Iterator, { @@ -2961,7 +2996,12 @@ impl AccountsDb { } } - self.process_dead_slots(&dead_slots, purged_account_slots, purge_stats); + self.process_dead_slots( + &dead_slots, + purged_account_slots, + purge_stats, + pubkeys_removed_from_accounts_index, + ); } else { // not sure why this fails yet with ancient append vecs if !self.ancient_append_vecs { @@ -3043,17 +3083,24 @@ impl AccountsDb { // Must be kept private!, does sensitive cleanup that should only be called from // supported pipelines in AccountsDb + // pubkeys_removed_from_accounts_index - These keys have already been removed from the accounts index + // and should not be unref'd. If they exist in the accounts index, they are NEW. fn process_dead_slots( &self, dead_slots: &HashSet, purged_account_slots: Option<&mut AccountSlots>, purge_stats: &PurgeStats, + pubkeys_removed_from_accounts_index: &PubkeysRemovedFromAccountsIndex, ) { if dead_slots.is_empty() { return; } let mut clean_dead_slots = Measure::start("reclaims::clean_dead_slots"); - self.clean_stored_dead_slots(dead_slots, purged_account_slots); + self.clean_stored_dead_slots( + dead_slots, + purged_account_slots, + pubkeys_removed_from_accounts_index, + ); clean_dead_slots.stop(); let mut purge_removed_slots = Measure::start("reclaims::purge_removed_slots"); @@ -5179,7 +5226,13 @@ impl AccountsDb { (*account.key(), purged_slot) }) .collect(); - self.purge_slot_cache_pubkeys(purged_slot, purged_slot_pubkeys, pubkey_to_slot_set, true); + self.purge_slot_cache_pubkeys( + purged_slot, + purged_slot_pubkeys, + pubkey_to_slot_set, + true, + &HashSet::default(), + ); } fn purge_slot_cache_pubkeys( @@ -5188,17 +5241,19 @@ impl AccountsDb { purged_slot_pubkeys: HashSet<(Slot, Pubkey)>, pubkey_to_slot_set: Vec<(Pubkey, Slot)>, is_dead: bool, + pubkeys_removed_from_accounts_index: &PubkeysRemovedFromAccountsIndex, ) { // Slot purged from cache should not exist in the backing store assert!(self.storage.get_slot_stores(purged_slot).is_none()); let num_purged_keys = pubkey_to_slot_set.len(); - let reclaims = self.purge_keys_exact(pubkey_to_slot_set.iter()); + let (reclaims, _) = self.purge_keys_exact(pubkey_to_slot_set.iter()); assert_eq!(reclaims.len(), num_purged_keys); if is_dead { self.remove_dead_slots_metadata( std::iter::once(&purged_slot), purged_slot_pubkeys, None, + pubkeys_removed_from_accounts_index, ); } } @@ -5228,7 +5283,7 @@ impl AccountsDb { .fetch_add(scan_storages_elasped.as_us(), Ordering::Relaxed); let mut purge_accounts_index_elapsed = Measure::start("purge_accounts_index_elapsed"); - let reclaims = match scan_result { + let (reclaims, pubkeys_removed_from_accounts_index) = match scan_result { ScanStorageResult::Cached(_) => { panic!("Should not see cached keys in this `else` branch, since we checked this slot did not exist in the cache above"); } @@ -5252,6 +5307,7 @@ impl AccountsDb { expected_dead_slot, Some((purge_stats, &mut ReclaimResult::default())), false, + &pubkeys_removed_from_accounts_index, ); handle_reclaims_elapsed.stop(); purge_stats @@ -5804,7 +5860,13 @@ impl AccountsDb { let is_dead_slot = accounts.is_empty(); // Remove the account index entries from earlier roots that are outdated by later roots. // Safe because queries to the index will be reading updates from later roots. - self.purge_slot_cache_pubkeys(slot, purged_slot_pubkeys, pubkey_to_slot_set, is_dead_slot); + self.purge_slot_cache_pubkeys( + slot, + purged_slot_pubkeys, + pubkey_to_slot_set, + is_dead_slot, + &HashSet::default(), + ); if !is_dead_slot { let aligned_total_size = Self::page_align(total_size); @@ -7463,18 +7525,22 @@ impl AccountsDb { dead_slots } + // pubkeys_removed_from_accounts_index - These keys have already been removed from the accounts index + // and should not be unref'd. If they exist in the accounts index, they are NEW. fn remove_dead_slots_metadata<'a>( &'a self, dead_slots_iter: impl Iterator + Clone, purged_slot_pubkeys: HashSet<(Slot, Pubkey)>, // Should only be `Some` for non-cached slots purged_stored_account_slots: Option<&mut AccountSlots>, + pubkeys_removed_from_accounts_index: &PubkeysRemovedFromAccountsIndex, ) { let mut measure = Measure::start("remove_dead_slots_metadata-ms"); self.clean_dead_slots_from_accounts_index( dead_slots_iter.clone(), purged_slot_pubkeys, purged_stored_account_slots, + pubkeys_removed_from_accounts_index, ); { let mut bank_hashes = self.bank_hashes.write().unwrap(); @@ -7492,6 +7558,7 @@ impl AccountsDb { purged_slot_pubkeys: HashSet<(Slot, Pubkey)>, // Should only be `Some` for non-cached slots purged_stored_account_slots: Option<&mut AccountSlots>, + pubkeys_removed_from_accounts_index: &PubkeysRemovedFromAccountsIndex, ) { let mut accounts_index_root_stats = AccountsIndexRootsStats::default(); let mut measure = Measure::start("unref_from_storage"); @@ -7507,7 +7574,12 @@ impl AccountsDb { .iter() .skip(skip) .take(BATCH_SIZE) - .map(|(_slot, pubkey)| pubkey), + .filter_map(|(_slot, pubkey)| { + // filter out pubkeys that have already been removed from the accounts index in a previous step + let already_removed = + pubkeys_removed_from_accounts_index.contains(pubkey); + (!already_removed).then(|| pubkey) + }), |_pubkey, _slots_refs| AccountsIndexScanResult::Unref, ) }) @@ -7556,10 +7628,13 @@ impl AccountsDb { .update(&accounts_index_root_stats); } + // pubkeys_removed_from_accounts_index - These keys have already been removed from the accounts index + // and should not be unref'd. If they exist in the accounts index, they are NEW. fn clean_stored_dead_slots( &self, dead_slots: &HashSet, purged_account_slots: Option<&mut AccountSlots>, + pubkeys_removed_from_accounts_index: &PubkeysRemovedFromAccountsIndex, ) { let mut measure = Measure::start("clean_stored_dead_slots-ms"); let mut stores: Vec> = vec![]; @@ -7592,6 +7667,7 @@ impl AccountsDb { dead_slots.iter(), purged_slot_pubkeys, purged_account_slots, + pubkeys_removed_from_accounts_index, ); measure.stop(); inc_new_counter_info!("clean_stored_dead_slots-ms", measure.as_ms() as usize); @@ -7930,6 +8006,7 @@ impl AccountsDb { expected_single_dead_slot, None, reset_accounts, + &HashSet::default(), ); handle_reclaims_time.stop(); self.stats @@ -11455,7 +11532,7 @@ pub mod tests { let slots: HashSet = vec![1].into_iter().collect(); let purge_keys = vec![(key1, slots)]; - db.purge_keys_exact(purge_keys.iter()); + let _ = db.purge_keys_exact(purge_keys.iter()); let account2 = AccountSharedData::new(3, 0, &key); db.store_uncached(2, &[(&key1, &account2)]); @@ -12362,7 +12439,7 @@ pub mod tests { let accounts = AccountsDb::new_single_for_tests(); let mut dead_slots = HashSet::new(); dead_slots.insert(10); - accounts.clean_stored_dead_slots(&dead_slots, None); + accounts.clean_stored_dead_slots(&dead_slots, None, &HashSet::default()); } #[test] diff --git a/runtime/src/accounts_index.rs b/runtime/src/accounts_index.rs index a2bd30d35d4bda..3cd88ba07a1980 100644 --- a/runtime/src/accounts_index.rs +++ b/runtime/src/accounts_index.rs @@ -1131,15 +1131,20 @@ impl AccountsIndex { read_lock.slot_list_mut(pubkey, user) } + /// Remove keys from the account index if the key's slot list is empty. + /// Returns the keys that were removed from the index. These keys should not be accessed again in the current code path. + #[must_use] pub fn handle_dead_keys( &self, dead_keys: &[&Pubkey], account_indexes: &AccountSecondaryIndexes, - ) { + ) -> HashSet { + let mut pubkeys_removed_from_accounts_index = HashSet::default(); if !dead_keys.is_empty() { for key in dead_keys.iter() { let w_index = self.get_account_maps_read_lock(key); if w_index.remove_if_slot_list_empty(**key) { + pubkeys_removed_from_accounts_index.insert(**key); // Note it's only safe to remove all the entries for this key // because we have the lock for this key's entry in the AccountsIndex, // so no other thread is also updating the index @@ -1147,6 +1152,7 @@ impl AccountsIndex { } } } + pubkeys_removed_from_accounts_index } /// call func with every pubkey and index visible from a given set of ancestors @@ -1710,26 +1716,34 @@ impl AccountsIndex { }); } + /// return true if pubkey was removed from the accounts index + /// or does not exist in the accounts index + /// This means it should NOT be unref'd later. + #[must_use] pub fn clean_rooted_entries( &self, pubkey: &Pubkey, reclaims: &mut SlotList, max_clean_root: Option, - ) { + ) -> bool { let mut is_slot_list_empty = false; - self.slot_list_mut(pubkey, |slot_list| { - self.purge_older_root_entries(slot_list, reclaims, max_clean_root); - is_slot_list_empty = slot_list.is_empty(); - }); + let missing_in_accounts_index = self + .slot_list_mut(pubkey, |slot_list| { + self.purge_older_root_entries(slot_list, reclaims, max_clean_root); + is_slot_list_empty = slot_list.is_empty(); + }) + .is_none(); + let mut removed = false; // If the slot list is empty, remove the pubkey from `account_maps`. Make sure to grab the // lock and double check the slot list is still empty, because another writer could have // locked and inserted the pubkey in-between when `is_slot_list_empty=true` and the call to // remove() below. if is_slot_list_empty { let w_maps = self.get_account_maps_read_lock(pubkey); - w_maps.remove_if_slot_list_empty(*pubkey); + removed = w_maps.remove_if_slot_list_empty(*pubkey); } + removed || missing_in_accounts_index } /// When can an entry be purged? @@ -3501,7 +3515,7 @@ pub mod tests { &mut vec![], ); - index.handle_dead_keys(&[&account_key], secondary_indexes); + let _ = index.handle_dead_keys(&[&account_key], secondary_indexes); assert!(secondary_index.index.is_empty()); assert!(secondary_index.reverse_index.is_empty()); } @@ -3719,7 +3733,7 @@ pub mod tests { index.slot_list_mut(&account_key, |slot_list| slot_list.clear()); // Everything should be deleted - index.handle_dead_keys(&[&account_key], &secondary_indexes); + let _ = index.handle_dead_keys(&[&account_key], &secondary_indexes); assert!(secondary_index.index.is_empty()); assert!(secondary_index.reverse_index.is_empty()); } @@ -3840,7 +3854,7 @@ pub mod tests { // pubkey as dead and finally remove all the secondary indexes let mut reclaims = vec![]; index.purge_exact(&account_key, &later_slot, &mut reclaims); - index.handle_dead_keys(&[&account_key], secondary_indexes); + let _ = index.handle_dead_keys(&[&account_key], secondary_indexes); assert!(secondary_index.index.is_empty()); assert!(secondary_index.reverse_index.is_empty()); } @@ -3950,6 +3964,209 @@ pub mod tests { ); } + #[test] + fn test_get_newest_root_in_slot_list() { + let index = AccountsIndex::::default_for_tests(); + let return_0 = 0; + let slot1 = 1; + let slot2 = 2; + let slot99 = 99; + + // no roots, so always 0 + { + let roots_tracker = &index.roots_tracker.read().unwrap(); + let slot_list = Vec::<(Slot, bool)>::default(); + assert_eq!( + return_0, + AccountsIndex::get_newest_root_in_slot_list( + &roots_tracker.alive_roots, + &slot_list, + Some(slot1), + ) + ); + assert_eq!( + return_0, + AccountsIndex::get_newest_root_in_slot_list( + &roots_tracker.alive_roots, + &slot_list, + Some(slot2), + ) + ); + assert_eq!( + return_0, + AccountsIndex::get_newest_root_in_slot_list( + &roots_tracker.alive_roots, + &slot_list, + Some(slot99), + ) + ); + } + + index.add_root(slot2, true); + + { + let roots_tracker = &index.roots_tracker.read().unwrap(); + let slot_list = vec![(slot2, true)]; + assert_eq!( + slot2, + AccountsIndex::get_newest_root_in_slot_list( + &roots_tracker.alive_roots, + &slot_list, + Some(slot2), + ) + ); + // no newest root + assert_eq!( + return_0, + AccountsIndex::get_newest_root_in_slot_list( + &roots_tracker.alive_roots, + &slot_list, + Some(slot1), + ) + ); + assert_eq!( + slot2, + AccountsIndex::get_newest_root_in_slot_list( + &roots_tracker.alive_roots, + &slot_list, + Some(slot99), + ) + ); + } + } + + impl AccountsIndex { + fn upsert_simple_test(&self, key: &Pubkey, slot: Slot, value: T) { + let mut gc = Vec::new(); + self.upsert( + slot, + slot, + key, + &AccountSharedData::default(), + &AccountSecondaryIndexes::default(), + value, + &mut gc, + UPSERT_PREVIOUS_SLOT_ENTRY_WAS_CACHED_FALSE, + ); + assert!(gc.is_empty()); + } + } + + #[test] + fn test_clean_rooted_entries_return() { + solana_logger::setup(); + let value = true; + let key = solana_sdk::pubkey::new_rand(); + let key_unknown = solana_sdk::pubkey::new_rand(); + let index = AccountsIndex::::default_for_tests(); + let slot1 = 1; + + let mut gc = Vec::new(); + // return true if we don't know anything about 'key_unknown' + // the item did not exist in the accounts index at all, so index is up to date + assert!(index.clean_rooted_entries(&key_unknown, &mut gc, None)); + + index.upsert_simple_test(&key, slot1, value); + + let slot2 = 2; + // none for max root because we don't want to delete the entry yet + assert!(!index.clean_rooted_entries(&key, &mut gc, None)); + // this is because of inclusive vs exclusive in the call to can_purge_older_entries + assert!(!index.clean_rooted_entries(&key, &mut gc, Some(slot1))); + // this will delete the entry because it is <= max_root_inclusive and NOT a root + // note this has to be slot2 because of inclusive vs exclusive in the call to can_purge_older_entries + { + let mut gc = Vec::new(); + assert!(index.clean_rooted_entries(&key, &mut gc, Some(slot2))); + assert_eq!(gc, vec![(slot1, value)]); + } + + // re-add it + index.upsert_simple_test(&key, slot1, value); + + index.add_root(slot1, value); + assert!(!index.clean_rooted_entries(&key, &mut gc, Some(slot2))); + index.upsert_simple_test(&key, slot2, value); + + assert_eq!( + 2, + index + .get_account_read_entry(&key) + .unwrap() + .slot_list() + .len() + ); + assert_eq!( + &vec![(slot1, value), (slot2, value)], + index.get_account_read_entry(&key).unwrap().slot_list() + ); + assert!(!index.clean_rooted_entries(&key, &mut gc, Some(slot2))); + assert_eq!( + 2, + index + .get_account_read_entry(&key) + .unwrap() + .slot_list() + .len() + ); + assert!(gc.is_empty()); + { + { + let roots_tracker = &index.roots_tracker.read().unwrap(); + let slot_list = vec![(slot2, value)]; + assert_eq!( + 0, + AccountsIndex::get_newest_root_in_slot_list( + &roots_tracker.alive_roots, + &slot_list, + None, + ) + ); + } + index.add_root(slot2, true); + { + let roots_tracker = &index.roots_tracker.read().unwrap(); + let slot_list = vec![(slot2, value)]; + assert_eq!( + slot2, + AccountsIndex::get_newest_root_in_slot_list( + &roots_tracker.alive_roots, + &slot_list, + None, + ) + ); + assert_eq!( + 0, + AccountsIndex::get_newest_root_in_slot_list( + &roots_tracker.alive_roots, + &slot_list, + Some(0), + ) + ); + } + } + + assert!(gc.is_empty()); + assert!(!index.clean_rooted_entries(&key, &mut gc, Some(slot2))); + assert_eq!(gc, vec![(slot1, value)]); + gc.clear(); + index.clean_dead_slot(slot2, &mut AccountsIndexRootsStats::default()); + let slot3 = 3; + assert!(index.clean_rooted_entries(&key, &mut gc, Some(slot3))); + assert_eq!(gc, vec![(slot2, value)]); + } + + #[test] + fn test_handle_dead_keys_return() { + let key = solana_sdk::pubkey::new_rand(); + let index = AccountsIndex::::default_for_tests(); + + assert_eq!( + index.handle_dead_keys(&[&key], &AccountSecondaryIndexes::default()), + vec![key].into_iter().collect::>() + ); + } + #[test] fn test_start_end_bin() { let index = AccountsIndex::::default_for_tests(); diff --git a/runtime/src/in_mem_accounts_index.rs b/runtime/src/in_mem_accounts_index.rs index be9b53af09113a..a4bd3d5f7d962f 100644 --- a/runtime/src/in_mem_accounts_index.rs +++ b/runtime/src/in_mem_accounts_index.rs @@ -358,6 +358,8 @@ impl InMemAccountsIndex { } } + /// return false if the entry is in the index (disk or memory) and has a slot list len > 0 + /// return true in all other cases, including if the entry is NOT in the index at all fn remove_if_slot_list_empty_entry(&self, entry: Entry>) -> bool { match entry { Entry::Occupied(occupied) => { @@ -391,7 +393,7 @@ impl InMemAccountsIndex { false } } - None => false, // not in cache or on disk + None => true, // not in cache or on disk, but slot list is 'empty' and entry is not in index, so return true } } } @@ -1950,4 +1952,52 @@ mod tests { // After the FlushGuard is dropped, the flag will be cleared. assert!(!flushing_active.load(Ordering::Acquire)); } + + #[test] + fn test_remove_if_slot_list_empty_entry() { + let key = solana_sdk::pubkey::new_rand(); + let unknown_key = solana_sdk::pubkey::new_rand(); + + let test = new_for_test::(); + + let mut map = test.map_internal.write().unwrap(); + + { + // item is NOT in index at all, still return true from remove_if_slot_list_empty_entry + // make sure not initially in index + let entry = map.entry(unknown_key); + assert!(matches!(entry, Entry::Vacant(_))); + let entry = map.entry(unknown_key); + assert!(test.remove_if_slot_list_empty_entry(entry)); + // make sure still not in index + let entry = map.entry(unknown_key); + assert!(matches!(entry, Entry::Vacant(_))); + } + + { + // add an entry with an empty slot list + let val = Arc::new(AccountMapEntryInner::::default()); + map.insert(key, val); + let entry = map.entry(key); + assert!(matches!(entry, Entry::Occupied(_))); + // should have removed it since it had an empty slot list + assert!(test.remove_if_slot_list_empty_entry(entry)); + let entry = map.entry(key); + assert!(matches!(entry, Entry::Vacant(_))); + // return true - item is not in index at all now + assert!(test.remove_if_slot_list_empty_entry(entry)); + } + + { + // add an entry with a NON empty slot list - it will NOT get removed + let val = Arc::new(AccountMapEntryInner::::default()); + val.slot_list.write().unwrap().push((1, 1)); + map.insert(key, val); + // does NOT remove it since it has a non-empty slot list + let entry = map.entry(key); + assert!(!test.remove_if_slot_list_empty_entry(entry)); + let entry = map.entry(key); + assert!(matches!(entry, Entry::Occupied(_))); + } + } } diff --git a/runtime/src/snapshot_minimizer.rs b/runtime/src/snapshot_minimizer.rs index 69e7a99e8e7601..c4b5c3ab7b85f9 100644 --- a/runtime/src/snapshot_minimizer.rs +++ b/runtime/src/snapshot_minimizer.rs @@ -353,7 +353,7 @@ impl<'a> SnapshotMinimizer<'a> { .into_iter() .map(|pubkey| (*pubkey, slot)) .collect(); - self.accounts_db().purge_keys_exact(purge_pubkeys.iter()); + let _ = self.accounts_db().purge_keys_exact(purge_pubkeys.iter()); let aligned_total: u64 = AccountsDb::page_align(total_bytes as u64); if aligned_total > 0 { From 25ce9a75b67f1ec931a37e8a5f7c441202ddb0ed Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Fri, 16 Sep 2022 11:55:21 +0000 Subject: [PATCH 123/465] patches range check in get_signed_message_range (backport #27822) (#27831) * patches range check in shred::layout::get_signed_message_range (#27822) (cherry picked from commit b183e00dcfcc7e799f0ff1622e20c0becd8d3ab0) # Conflicts: # ledger/src/shred.rs * removes mergify merge conflicts Co-authored-by: behzad nouri --- ledger/src/shred.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ledger/src/shred.rs b/ledger/src/shred.rs index 997b7bd3b6861b..6a5ade8b410bc4 100644 --- a/ledger/src/shred.rs +++ b/ledger/src/shred.rs @@ -623,7 +623,7 @@ pub mod layout { merkle::ShredData::get_signed_message_range(proof_size)? } }; - (shred.len() <= range.end).then(|| range) + (range.end <= shred.len()).then(|| range) } pub(crate) fn get_reference_tick(shred: &[u8]) -> Result { From 3518e2b1c4a7fe05d77d4e34127029fb66432b48 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 16 Sep 2022 14:28:58 -0500 Subject: [PATCH 124/465] Bump Version to 1.14.3 (#27844) Co-authored-by: willhickey --- Cargo.lock | 484 ++++++++--------- account-decoder/Cargo.toml | 8 +- accounts-bench/Cargo.toml | 12 +- accounts-cluster-bench/Cargo.toml | 34 +- banking-bench/Cargo.toml | 26 +- banks-client/Cargo.toml | 12 +- banks-interface/Cargo.toml | 4 +- banks-server/Cargo.toml | 12 +- bench-streamer/Cargo.toml | 8 +- bench-tps/Cargo.toml | 38 +- bloom/Cargo.toml | 8 +- bucket_map/Cargo.toml | 8 +- clap-utils/Cargo.toml | 8 +- clap-v3-utils/Cargo.toml | 8 +- cli-config/Cargo.toml | 6 +- cli-output/Cargo.toml | 16 +- cli/Cargo.toml | 36 +- client-test/Cargo.toml | 32 +- client/Cargo.toml | 28 +- core/Cargo.toml | 56 +- docs/src/developing/clients/jsonrpc-api.md | 4 +- dos/Cargo.toml | 30 +- download-utils/Cargo.toml | 6 +- entry/Cargo.toml | 16 +- faucet/Cargo.toml | 14 +- frozen-abi/Cargo.toml | 6 +- frozen-abi/macro/Cargo.toml | 2 +- genesis-utils/Cargo.toml | 8 +- genesis/Cargo.toml | 22 +- geyser-plugin-interface/Cargo.toml | 6 +- geyser-plugin-manager/Cargo.toml | 16 +- gossip/Cargo.toml | 38 +- install/Cargo.toml | 14 +- keygen/Cargo.toml | 12 +- ledger-tool/Cargo.toml | 30 +- ledger/Cargo.toml | 40 +- local-cluster/Cargo.toml | 28 +- log-analyzer/Cargo.toml | 6 +- logger/Cargo.toml | 2 +- measure/Cargo.toml | 4 +- merkle-root-bench/Cargo.toml | 12 +- merkle-tree/Cargo.toml | 4 +- metrics/Cargo.toml | 4 +- net-shaper/Cargo.toml | 4 +- net-utils/Cargo.toml | 8 +- notifier/Cargo.toml | 2 +- perf/Cargo.toml | 12 +- poh-bench/Cargo.toml | 14 +- poh/Cargo.toml | 20 +- program-runtime/Cargo.toml | 14 +- program-test/Cargo.toml | 18 +- .../address-lookup-table-tests/Cargo.toml | 8 +- programs/address-lookup-table/Cargo.toml | 12 +- programs/bpf-loader-tests/Cargo.toml | 8 +- programs/bpf/Cargo.lock | 490 +++++++++--------- programs/bpf/Cargo.toml | 28 +- programs/bpf/rust/128bit/Cargo.toml | 6 +- programs/bpf/rust/128bit_dep/Cargo.toml | 4 +- programs/bpf/rust/alloc/Cargo.toml | 4 +- programs/bpf/rust/call_depth/Cargo.toml | 4 +- programs/bpf/rust/caller_access/Cargo.toml | 4 +- programs/bpf/rust/curve25519/Cargo.toml | 6 +- programs/bpf/rust/custom_heap/Cargo.toml | 4 +- programs/bpf/rust/dep_crate/Cargo.toml | 6 +- .../bpf/rust/deprecated_loader/Cargo.toml | 4 +- programs/bpf/rust/dup_accounts/Cargo.toml | 4 +- programs/bpf/rust/error_handling/Cargo.toml | 4 +- programs/bpf/rust/external_spend/Cargo.toml | 4 +- programs/bpf/rust/finalize/Cargo.toml | 4 +- .../rust/get_minimum_delegation/Cargo.toml | 4 +- .../Cargo.toml | 4 +- .../rust/instruction_introspection/Cargo.toml | 4 +- programs/bpf/rust/invoke/Cargo.toml | 4 +- programs/bpf/rust/invoke_and_error/Cargo.toml | 4 +- programs/bpf/rust/invoke_and_ok/Cargo.toml | 4 +- .../bpf/rust/invoke_and_return/Cargo.toml | 4 +- programs/bpf/rust/invoked/Cargo.toml | 4 +- programs/bpf/rust/iter/Cargo.toml | 4 +- programs/bpf/rust/log_data/Cargo.toml | 4 +- programs/bpf/rust/many_args/Cargo.toml | 6 +- programs/bpf/rust/many_args_dep/Cargo.toml | 4 +- programs/bpf/rust/mem/Cargo.toml | 10 +- programs/bpf/rust/membuiltins/Cargo.toml | 6 +- programs/bpf/rust/noop/Cargo.toml | 4 +- programs/bpf/rust/panic/Cargo.toml | 4 +- programs/bpf/rust/param_passing/Cargo.toml | 6 +- .../bpf/rust/param_passing_dep/Cargo.toml | 4 +- programs/bpf/rust/rand/Cargo.toml | 4 +- programs/bpf/rust/realloc/Cargo.toml | 4 +- programs/bpf/rust/realloc_invoke/Cargo.toml | 6 +- .../bpf/rust/ro_account_modify/Cargo.toml | 4 +- programs/bpf/rust/ro_modify/Cargo.toml | 4 +- programs/bpf/rust/sanity/Cargo.toml | 10 +- .../bpf/rust/secp256k1_recover/Cargo.toml | 4 +- programs/bpf/rust/sha/Cargo.toml | 4 +- .../rust/sibling_inner_instruction/Cargo.toml | 4 +- .../bpf/rust/sibling_instruction/Cargo.toml | 4 +- programs/bpf/rust/simulation/Cargo.toml | 12 +- programs/bpf/rust/spoof1/Cargo.toml | 4 +- programs/bpf/rust/spoof1_system/Cargo.toml | 4 +- programs/bpf/rust/sysvar/Cargo.toml | 10 +- programs/bpf/rust/upgradeable/Cargo.toml | 4 +- programs/bpf/rust/upgraded/Cargo.toml | 4 +- programs/bpf_loader/Cargo.toml | 14 +- .../bpf_loader/gen-syscall-list/Cargo.toml | 2 +- programs/compute-budget/Cargo.toml | 6 +- programs/config/Cargo.toml | 8 +- programs/ed25519-tests/Cargo.toml | 6 +- programs/stake/Cargo.toml | 18 +- programs/vote/Cargo.toml | 14 +- programs/zk-token-proof/Cargo.toml | 8 +- rayon-threadlimit/Cargo.toml | 2 +- rbpf-cli/Cargo.toml | 10 +- remote-wallet/Cargo.toml | 4 +- rpc-test/Cargo.toml | 18 +- rpc/Cargo.toml | 48 +- runtime/Cargo.toml | 34 +- runtime/store-tool/Cargo.toml | 8 +- sdk/Cargo.toml | 12 +- sdk/cargo-build-bpf/Cargo.toml | 4 +- sdk/cargo-build-sbf/Cargo.toml | 8 +- .../tests/crates/fail/Cargo.toml | 4 +- .../tests/crates/noop/Cargo.toml | 4 +- sdk/cargo-test-bpf/Cargo.toml | 2 +- sdk/cargo-test-sbf/Cargo.toml | 2 +- sdk/gen-headers/Cargo.toml | 2 +- sdk/macro/Cargo.toml | 2 +- sdk/program/Cargo.toml | 10 +- send-transaction-service/Cargo.toml | 14 +- stake-accounts/Cargo.toml | 16 +- storage-bigtable/Cargo.toml | 10 +- storage-bigtable/build-proto/Cargo.lock | 2 +- storage-bigtable/build-proto/Cargo.toml | 2 +- storage-proto/Cargo.toml | 8 +- streamer/Cargo.toml | 10 +- sys-tuner/Cargo.toml | 6 +- test-validator/Cargo.toml | 28 +- tokens/Cargo.toml | 24 +- transaction-dos/Cargo.toml | 32 +- transaction-status/Cargo.toml | 12 +- upload-perf/Cargo.toml | 4 +- validator/Cargo.toml | 50 +- version/Cargo.toml | 8 +- watchtower/Cargo.toml | 20 +- zk-token-sdk/Cargo.toml | 6 +- 145 files changed, 1268 insertions(+), 1268 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 2d8547c0bdc29c..17e24f6f19ab24 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1688,7 +1688,7 @@ dependencies = [ [[package]] name = "gen-headers" -version = "1.14.2" +version = "1.14.3" dependencies = [ "log", "regex", @@ -1696,7 +1696,7 @@ dependencies = [ [[package]] name = "gen-syscall-list" -version = "1.14.2" +version = "1.14.3" dependencies = [ "regex", ] @@ -3756,15 +3756,15 @@ dependencies = [ [[package]] name = "rbpf-cli" -version = "1.14.2" +version = "1.14.3" dependencies = [ "clap 3.1.8", "serde", "serde_json", "solana-bpf-loader-program", - "solana-logger 1.14.2", + "solana-logger 1.14.3", "solana-program-runtime", - "solana-sdk 1.14.2", + "solana-sdk 1.14.3", "solana_rbpf", ] @@ -4475,7 +4475,7 @@ dependencies = [ [[package]] name = "solana-account-decoder" -version = "1.14.2" +version = "1.14.3" dependencies = [ "Inflector", "base64 0.13.0", @@ -4487,7 +4487,7 @@ dependencies = [ "serde_derive", "serde_json", "solana-config-program", - "solana-sdk 1.14.2", + "solana-sdk 1.14.3", "solana-vote-program", "spl-token", "spl-token-2022", @@ -4497,21 +4497,21 @@ dependencies = [ [[package]] name = "solana-accounts-bench" -version = "1.14.2" +version = "1.14.3" dependencies = [ "clap 2.33.3", "log", "rayon", - "solana-logger 1.14.2", + "solana-logger 1.14.3", "solana-measure", "solana-runtime", - "solana-sdk 1.14.2", + "solana-sdk 1.14.3", "solana-version", ] [[package]] name = "solana-accounts-cluster-bench" -version = "1.14.2" +version = "1.14.3" dependencies = [ "clap 2.33.3", "log", @@ -4524,11 +4524,11 @@ dependencies = [ "solana-faucet", "solana-gossip", "solana-local-cluster", - "solana-logger 1.14.2", + "solana-logger 1.14.3", "solana-measure", "solana-net-utils", "solana-runtime", - "solana-sdk 1.14.2", + "solana-sdk 1.14.3", "solana-streamer", "solana-test-validator", "solana-transaction-status", @@ -4538,7 +4538,7 @@ dependencies = [ [[package]] name = "solana-address-lookup-table-program" -version = "1.14.2" +version = "1.14.3" dependencies = [ "bincode", "bytemuck", @@ -4547,28 +4547,28 @@ dependencies = [ "num-traits", "rustc_version 0.4.0", "serde", - "solana-frozen-abi 1.14.2", - "solana-frozen-abi-macro 1.14.2", - "solana-program 1.14.2", + "solana-frozen-abi 1.14.3", + "solana-frozen-abi-macro 1.14.3", + "solana-program 1.14.3", "solana-program-runtime", - "solana-sdk 1.14.2", + "solana-sdk 1.14.3", "thiserror", ] [[package]] name = "solana-address-lookup-table-program-tests" -version = "1.14.2" +version = "1.14.3" dependencies = [ "assert_matches", "bincode", "solana-address-lookup-table-program", "solana-program-test", - "solana-sdk 1.14.2", + "solana-sdk 1.14.3", ] [[package]] name = "solana-banking-bench" -version = "1.14.2" +version = "1.14.3" dependencies = [ "clap 3.1.8", "crossbeam-channel", @@ -4579,27 +4579,27 @@ dependencies = [ "solana-core", "solana-gossip", "solana-ledger", - "solana-logger 1.14.2", + "solana-logger 1.14.3", "solana-measure", "solana-perf", "solana-poh", "solana-runtime", - "solana-sdk 1.14.2", + "solana-sdk 1.14.3", "solana-streamer", "solana-version", ] [[package]] name = "solana-banks-client" -version = "1.14.2" +version = "1.14.3" dependencies = [ "borsh", "futures 0.3.21", "solana-banks-interface", "solana-banks-server", - "solana-program 1.14.2", + "solana-program 1.14.3", "solana-runtime", - "solana-sdk 1.14.2", + "solana-sdk 1.14.3", "tarpc", "thiserror", "tokio", @@ -4608,16 +4608,16 @@ dependencies = [ [[package]] name = "solana-banks-interface" -version = "1.14.2" +version = "1.14.3" dependencies = [ "serde", - "solana-sdk 1.14.2", + "solana-sdk 1.14.3", "tarpc", ] [[package]] name = "solana-banks-server" -version = "1.14.2" +version = "1.14.3" dependencies = [ "bincode", "crossbeam-channel", @@ -4625,7 +4625,7 @@ dependencies = [ "solana-banks-interface", "solana-client", "solana-runtime", - "solana-sdk 1.14.2", + "solana-sdk 1.14.3", "solana-send-transaction-service", "tarpc", "tokio", @@ -4635,7 +4635,7 @@ dependencies = [ [[package]] name = "solana-bench-streamer" -version = "1.14.2" +version = "1.14.3" dependencies = [ "clap 3.1.8", "crossbeam-channel", @@ -4646,7 +4646,7 @@ dependencies = [ [[package]] name = "solana-bench-tps" -version = "1.14.2" +version = "1.14.3" dependencies = [ "clap 2.33.3", "crossbeam-channel", @@ -4663,13 +4663,13 @@ dependencies = [ "solana-genesis", "solana-gossip", "solana-local-cluster", - "solana-logger 1.14.2", + "solana-logger 1.14.3", "solana-measure", "solana-metrics", "solana-net-utils", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.2", + "solana-sdk 1.14.3", "solana-streamer", "solana-test-validator", "solana-version", @@ -4678,7 +4678,7 @@ dependencies = [ [[package]] name = "solana-bloom" -version = "1.14.2" +version = "1.14.3" dependencies = [ "bv", "fnv", @@ -4688,14 +4688,14 @@ dependencies = [ "rustc_version 0.4.0", "serde", "serde_derive", - "solana-frozen-abi 1.14.2", - "solana-frozen-abi-macro 1.14.2", - "solana-sdk 1.14.2", + "solana-frozen-abi 1.14.3", + "solana-frozen-abi-macro 1.14.3", + "solana-sdk 1.14.3", ] [[package]] name = "solana-bpf-loader-program" -version = "1.14.2" +version = "1.14.3" dependencies = [ "bincode", "byteorder", @@ -4706,26 +4706,26 @@ dependencies = [ "solana-metrics", "solana-program-runtime", "solana-runtime", - "solana-sdk 1.14.2", - "solana-zk-token-sdk 1.14.2", + "solana-sdk 1.14.3", + "solana-zk-token-sdk 1.14.3", "solana_rbpf", "thiserror", ] [[package]] name = "solana-bpf-loader-program-tests" -version = "1.14.2" +version = "1.14.3" dependencies = [ "assert_matches", "bincode", "solana-bpf-loader-program", "solana-program-test", - "solana-sdk 1.14.2", + "solana-sdk 1.14.3", ] [[package]] name = "solana-bucket-map" -version = "1.14.2" +version = "1.14.3" dependencies = [ "fs_extra", "log", @@ -4733,24 +4733,24 @@ dependencies = [ "modular-bitfield", "rand 0.7.3", "rayon", - "solana-logger 1.14.2", + "solana-logger 1.14.3", "solana-measure", - "solana-sdk 1.14.2", + "solana-sdk 1.14.3", "tempfile", ] [[package]] name = "solana-cargo-build-bpf" -version = "1.14.2" +version = "1.14.3" dependencies = [ "cargo_metadata", "clap 3.1.8", - "solana-sdk 1.14.2", + "solana-sdk 1.14.3", ] [[package]] name = "solana-cargo-build-sbf" -version = "1.14.2" +version = "1.14.3" dependencies = [ "bzip2", "cargo_metadata", @@ -4759,14 +4759,14 @@ dependencies = [ "regex", "serial_test", "solana-download-utils", - "solana-logger 1.14.2", - "solana-sdk 1.14.2", + "solana-logger 1.14.3", + "solana-sdk 1.14.3", "tar", ] [[package]] name = "solana-cargo-test-bpf" -version = "1.14.2" +version = "1.14.3" dependencies = [ "cargo_metadata", "clap 3.1.8", @@ -4774,7 +4774,7 @@ dependencies = [ [[package]] name = "solana-cargo-test-sbf" -version = "1.14.2" +version = "1.14.3" dependencies = [ "cargo_metadata", "clap 3.1.8", @@ -4782,14 +4782,14 @@ dependencies = [ [[package]] name = "solana-clap-utils" -version = "1.14.2" +version = "1.14.3" dependencies = [ "chrono", "clap 2.33.3", "rpassword", "solana-perf", "solana-remote-wallet", - "solana-sdk 1.14.2", + "solana-sdk 1.14.3", "tempfile", "thiserror", "tiny-bip39", @@ -4799,14 +4799,14 @@ dependencies = [ [[package]] name = "solana-clap-v3-utils" -version = "1.14.2" +version = "1.14.3" dependencies = [ "chrono", "clap 3.1.8", "rpassword", "solana-perf", "solana-remote-wallet", - "solana-sdk 1.14.2", + "solana-sdk 1.14.3", "tempfile", "thiserror", "tiny-bip39", @@ -4816,7 +4816,7 @@ dependencies = [ [[package]] name = "solana-cli" -version = "1.14.2" +version = "1.14.3" dependencies = [ "bincode", "bs58", @@ -4843,10 +4843,10 @@ dependencies = [ "solana-client", "solana-config-program", "solana-faucet", - "solana-logger 1.14.2", + "solana-logger 1.14.3", "solana-program-runtime", "solana-remote-wallet", - "solana-sdk 1.14.2", + "solana-sdk 1.14.3", "solana-streamer", "solana-test-validator", "solana-transaction-status", @@ -4861,7 +4861,7 @@ dependencies = [ [[package]] name = "solana-cli-config" -version = "1.14.2" +version = "1.14.3" dependencies = [ "anyhow", "dirs-next", @@ -4870,13 +4870,13 @@ dependencies = [ "serde_derive", "serde_yaml", "solana-clap-utils", - "solana-sdk 1.14.2", + "solana-sdk 1.14.3", "url 2.2.2", ] [[package]] name = "solana-cli-output" -version = "1.14.2" +version = "1.14.3" dependencies = [ "Inflector", "base64 0.13.0", @@ -4894,7 +4894,7 @@ dependencies = [ "solana-clap-utils", "solana-cli-config", "solana-client", - "solana-sdk 1.14.2", + "solana-sdk 1.14.3", "solana-transaction-status", "solana-vote-program", "spl-memo", @@ -4902,7 +4902,7 @@ dependencies = [ [[package]] name = "solana-client" -version = "1.14.2" +version = "1.14.3" dependencies = [ "anyhow", "assert_matches", @@ -4938,12 +4938,12 @@ dependencies = [ "solana-account-decoder", "solana-clap-utils", "solana-faucet", - "solana-logger 1.14.2", + "solana-logger 1.14.3", "solana-measure", "solana-metrics", "solana-net-utils", "solana-perf", - "solana-sdk 1.14.2", + "solana-sdk 1.14.3", "solana-streamer", "solana-transaction-status", "solana-version", @@ -4959,14 +4959,14 @@ dependencies = [ [[package]] name = "solana-client-test" -version = "1.14.2" +version = "1.14.3" dependencies = [ "futures-util", "serde_json", "serial_test", "solana-client", "solana-ledger", - "solana-logger 1.14.2", + "solana-logger 1.14.3", "solana-measure", "solana-merkle-tree", "solana-metrics", @@ -4974,7 +4974,7 @@ dependencies = [ "solana-rayon-threadlimit", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.2", + "solana-sdk 1.14.3", "solana-streamer", "solana-test-validator", "solana-transaction-status", @@ -4985,28 +4985,28 @@ dependencies = [ [[package]] name = "solana-compute-budget-program" -version = "1.14.2" +version = "1.14.3" dependencies = [ "solana-program-runtime", - "solana-sdk 1.14.2", + "solana-sdk 1.14.3", ] [[package]] name = "solana-config-program" -version = "1.14.2" +version = "1.14.3" dependencies = [ "bincode", "chrono", "serde", "serde_derive", - "solana-logger 1.14.2", + "solana-logger 1.14.3", "solana-program-runtime", - "solana-sdk 1.14.2", + "solana-sdk 1.14.3", ] [[package]] name = "solana-core" -version = "1.14.2" +version = "1.14.3" dependencies = [ "ahash", "base64 0.13.0", @@ -5038,12 +5038,12 @@ dependencies = [ "solana-bloom", "solana-client", "solana-entry", - "solana-frozen-abi 1.14.2", - "solana-frozen-abi-macro 1.14.2", + "solana-frozen-abi 1.14.3", + "solana-frozen-abi-macro 1.14.3", "solana-geyser-plugin-manager", "solana-gossip", "solana-ledger", - "solana-logger 1.14.2", + "solana-logger 1.14.3", "solana-measure", "solana-metrics", "solana-net-utils", @@ -5053,7 +5053,7 @@ dependencies = [ "solana-rayon-threadlimit", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.2", + "solana-sdk 1.14.3", "solana-send-transaction-service", "solana-stake-program", "solana-streamer", @@ -5073,7 +5073,7 @@ dependencies = [ [[package]] name = "solana-dos" -version = "1.14.2" +version = "1.14.3" dependencies = [ "bincode", "clap 3.1.8", @@ -5089,42 +5089,42 @@ dependencies = [ "solana-faucet", "solana-gossip", "solana-local-cluster", - "solana-logger 1.14.2", + "solana-logger 1.14.3", "solana-measure", "solana-net-utils", "solana-perf", "solana-rpc", - "solana-sdk 1.14.2", + "solana-sdk 1.14.3", "solana-streamer", "solana-version", ] [[package]] name = "solana-download-utils" -version = "1.14.2" +version = "1.14.3" dependencies = [ "console", "indicatif", "log", "reqwest", "solana-runtime", - "solana-sdk 1.14.2", + "solana-sdk 1.14.3", ] [[package]] name = "solana-ed25519-program-tests" -version = "1.14.2" +version = "1.14.3" dependencies = [ "assert_matches", "ed25519-dalek", "rand 0.7.3", "solana-program-test", - "solana-sdk 1.14.2", + "solana-sdk 1.14.3", ] [[package]] name = "solana-entry" -version = "1.14.2" +version = "1.14.3" dependencies = [ "bincode", "crossbeam-channel", @@ -5136,18 +5136,18 @@ dependencies = [ "rand 0.7.3", "rayon", "serde", - "solana-logger 1.14.2", + "solana-logger 1.14.3", "solana-measure", "solana-merkle-tree", "solana-metrics", "solana-perf", "solana-rayon-threadlimit", - "solana-sdk 1.14.2", + "solana-sdk 1.14.3", ] [[package]] name = "solana-faucet" -version = "1.14.2" +version = "1.14.3" dependencies = [ "bincode", "byteorder", @@ -5158,9 +5158,9 @@ dependencies = [ "serde_derive", "solana-clap-utils", "solana-cli-config", - "solana-logger 1.14.2", + "solana-logger 1.14.3", "solana-metrics", - "solana-sdk 1.14.2", + "solana-sdk 1.14.3", "solana-version", "spl-memo", "thiserror", @@ -5191,7 +5191,7 @@ dependencies = [ [[package]] name = "solana-frozen-abi" -version = "1.14.2" +version = "1.14.3" dependencies = [ "ahash", "blake3", @@ -5216,8 +5216,8 @@ dependencies = [ "serde_derive", "serde_json", "sha2 0.10.2", - "solana-frozen-abi-macro 1.14.2", - "solana-logger 1.14.2", + "solana-frozen-abi-macro 1.14.3", + "solana-logger 1.14.3", "subtle", "thiserror", ] @@ -5236,7 +5236,7 @@ dependencies = [ [[package]] name = "solana-frozen-abi-macro" -version = "1.14.2" +version = "1.14.3" dependencies = [ "proc-macro2 1.0.41", "quote 1.0.18", @@ -5246,7 +5246,7 @@ dependencies = [ [[package]] name = "solana-genesis" -version = "1.14.2" +version = "1.14.3" dependencies = [ "base64 0.13.0", "clap 2.33.3", @@ -5257,9 +5257,9 @@ dependencies = [ "solana-cli-config", "solana-entry", "solana-ledger", - "solana-logger 1.14.2", + "solana-logger 1.14.3", "solana-runtime", - "solana-sdk 1.14.2", + "solana-sdk 1.14.3", "solana-stake-program", "solana-version", "solana-vote-program", @@ -5268,26 +5268,26 @@ dependencies = [ [[package]] name = "solana-genesis-utils" -version = "1.14.2" +version = "1.14.3" dependencies = [ "solana-download-utils", "solana-runtime", - "solana-sdk 1.14.2", + "solana-sdk 1.14.3", ] [[package]] name = "solana-geyser-plugin-interface" -version = "1.14.2" +version = "1.14.3" dependencies = [ "log", - "solana-sdk 1.14.2", + "solana-sdk 1.14.3", "solana-transaction-status", "thiserror", ] [[package]] name = "solana-geyser-plugin-manager" -version = "1.14.2" +version = "1.14.3" dependencies = [ "bs58", "crossbeam-channel", @@ -5300,14 +5300,14 @@ dependencies = [ "solana-metrics", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.2", + "solana-sdk 1.14.3", "solana-transaction-status", "thiserror", ] [[package]] name = "solana-gossip" -version = "1.14.2" +version = "1.14.3" dependencies = [ "bincode", "bv", @@ -5334,17 +5334,17 @@ dependencies = [ "solana-clap-utils", "solana-client", "solana-entry", - "solana-frozen-abi 1.14.2", - "solana-frozen-abi-macro 1.14.2", + "solana-frozen-abi 1.14.3", + "solana-frozen-abi-macro 1.14.3", "solana-ledger", - "solana-logger 1.14.2", + "solana-logger 1.14.3", "solana-measure", "solana-metrics", "solana-net-utils", "solana-perf", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.14.2", + "solana-sdk 1.14.3", "solana-streamer", "solana-version", "solana-vote-program", @@ -5353,7 +5353,7 @@ dependencies = [ [[package]] name = "solana-install" -version = "1.14.2" +version = "1.14.3" dependencies = [ "atty", "bincode", @@ -5374,8 +5374,8 @@ dependencies = [ "solana-clap-utils", "solana-client", "solana-config-program", - "solana-logger 1.14.2", - "solana-sdk 1.14.2", + "solana-logger 1.14.3", + "solana-sdk 1.14.3", "solana-version", "tar", "tempfile", @@ -5386,7 +5386,7 @@ dependencies = [ [[package]] name = "solana-keygen" -version = "1.14.2" +version = "1.14.3" dependencies = [ "bs58", "clap 3.1.8", @@ -5395,14 +5395,14 @@ dependencies = [ "solana-clap-v3-utils", "solana-cli-config", "solana-remote-wallet", - "solana-sdk 1.14.2", + "solana-sdk 1.14.3", "solana-version", "tiny-bip39", ] [[package]] name = "solana-ledger" -version = "1.14.2" +version = "1.14.3" dependencies = [ "assert_matches", "bincode", @@ -5436,16 +5436,16 @@ dependencies = [ "solana-account-decoder", "solana-bpf-loader-program", "solana-entry", - "solana-frozen-abi 1.14.2", - "solana-frozen-abi-macro 1.14.2", - "solana-logger 1.14.2", + "solana-frozen-abi 1.14.3", + "solana-frozen-abi-macro 1.14.3", + "solana-logger 1.14.3", "solana-measure", "solana-metrics", "solana-perf", "solana-program-runtime", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.14.2", + "solana-sdk 1.14.3", "solana-stake-program", "solana-storage-bigtable", "solana-storage-proto", @@ -5464,7 +5464,7 @@ dependencies = [ [[package]] name = "solana-ledger-tool" -version = "1.14.2" +version = "1.14.3" dependencies = [ "assert_cmd", "bs58", @@ -5486,10 +5486,10 @@ dependencies = [ "solana-core", "solana-entry", "solana-ledger", - "solana-logger 1.14.2", + "solana-logger 1.14.3", "solana-measure", "solana-runtime", - "solana-sdk 1.14.2", + "solana-sdk 1.14.3", "solana-stake-program", "solana-storage-bigtable", "solana-transaction-status", @@ -5501,7 +5501,7 @@ dependencies = [ [[package]] name = "solana-local-cluster" -version = "1.14.2" +version = "1.14.3" dependencies = [ "assert_matches", "crossbeam-channel", @@ -5519,9 +5519,9 @@ dependencies = [ "solana-entry", "solana-gossip", "solana-ledger", - "solana-logger 1.14.2", + "solana-logger 1.14.3", "solana-runtime", - "solana-sdk 1.14.2", + "solana-sdk 1.14.3", "solana-stake-program", "solana-streamer", "solana-vote-program", @@ -5530,13 +5530,13 @@ dependencies = [ [[package]] name = "solana-log-analyzer" -version = "1.14.2" +version = "1.14.3" dependencies = [ "byte-unit", "clap 3.1.8", "serde", "serde_json", - "solana-logger 1.14.2", + "solana-logger 1.14.3", "solana-version", ] @@ -5553,7 +5553,7 @@ dependencies = [ [[package]] name = "solana-logger" -version = "1.14.2" +version = "1.14.3" dependencies = [ "env_logger", "lazy_static", @@ -5562,38 +5562,38 @@ dependencies = [ [[package]] name = "solana-measure" -version = "1.14.2" +version = "1.14.3" dependencies = [ "log", - "solana-sdk 1.14.2", + "solana-sdk 1.14.3", ] [[package]] name = "solana-merkle-root-bench" -version = "1.14.2" +version = "1.14.3" dependencies = [ "clap 2.33.3", "log", - "solana-logger 1.14.2", + "solana-logger 1.14.3", "solana-measure", "solana-runtime", - "solana-sdk 1.14.2", + "solana-sdk 1.14.3", "solana-version", ] [[package]] name = "solana-merkle-tree" -version = "1.14.2" +version = "1.14.3" dependencies = [ "fast-math", "hex", "matches", - "solana-program 1.14.2", + "solana-program 1.14.3", ] [[package]] name = "solana-metrics" -version = "1.14.2" +version = "1.14.3" dependencies = [ "crossbeam-channel", "env_logger", @@ -5603,23 +5603,23 @@ dependencies = [ "rand 0.7.3", "reqwest", "serial_test", - "solana-sdk 1.14.2", + "solana-sdk 1.14.3", ] [[package]] name = "solana-net-shaper" -version = "1.14.2" +version = "1.14.3" dependencies = [ "clap 3.1.8", "rand 0.7.3", "serde", "serde_json", - "solana-logger 1.14.2", + "solana-logger 1.14.3", ] [[package]] name = "solana-net-utils" -version = "1.14.2" +version = "1.14.3" dependencies = [ "bincode", "clap 3.1.8", @@ -5630,8 +5630,8 @@ dependencies = [ "serde", "serde_derive", "socket2", - "solana-logger 1.14.2", - "solana-sdk 1.14.2", + "solana-logger 1.14.3", + "solana-sdk 1.14.3", "solana-version", "tokio", "url 2.2.2", @@ -5639,7 +5639,7 @@ dependencies = [ [[package]] name = "solana-notifier" -version = "1.14.2" +version = "1.14.3" dependencies = [ "log", "reqwest", @@ -5648,7 +5648,7 @@ dependencies = [ [[package]] name = "solana-perf" -version = "1.14.2" +version = "1.14.3" dependencies = [ "ahash", "bincode", @@ -5666,16 +5666,16 @@ dependencies = [ "rand 0.7.3", "rayon", "serde", - "solana-logger 1.14.2", + "solana-logger 1.14.3", "solana-metrics", "solana-rayon-threadlimit", - "solana-sdk 1.14.2", + "solana-sdk 1.14.3", "solana-vote-program", ] [[package]] name = "solana-poh" -version = "1.14.2" +version = "1.14.3" dependencies = [ "bincode", "core_affinity", @@ -5685,29 +5685,29 @@ dependencies = [ "rand 0.7.3", "solana-entry", "solana-ledger", - "solana-logger 1.14.2", + "solana-logger 1.14.3", "solana-measure", "solana-metrics", "solana-perf", "solana-runtime", - "solana-sdk 1.14.2", + "solana-sdk 1.14.3", "solana-sys-tuner", "thiserror", ] [[package]] name = "solana-poh-bench" -version = "1.14.2" +version = "1.14.3" dependencies = [ "clap 3.1.8", "log", "rand 0.7.3", "rayon", "solana-entry", - "solana-logger 1.14.2", + "solana-logger 1.14.3", "solana-measure", "solana-perf", - "solana-sdk 1.14.2", + "solana-sdk 1.14.3", "solana-version", ] @@ -5755,7 +5755,7 @@ dependencies = [ [[package]] name = "solana-program" -version = "1.14.2" +version = "1.14.3" dependencies = [ "anyhow", "assert_matches", @@ -5793,10 +5793,10 @@ dependencies = [ "serde_json", "sha2 0.10.2", "sha3 0.10.1", - "solana-frozen-abi 1.14.2", - "solana-frozen-abi-macro 1.14.2", - "solana-logger 1.14.2", - "solana-sdk-macro 1.14.2", + "solana-frozen-abi 1.14.3", + "solana-frozen-abi-macro 1.14.3", + "solana-logger 1.14.3", + "solana-sdk-macro 1.14.3", "static_assertions", "thiserror", "tiny-bip39", @@ -5806,7 +5806,7 @@ dependencies = [ [[package]] name = "solana-program-runtime" -version = "1.14.2" +version = "1.14.3" dependencies = [ "base64 0.13.0", "bincode", @@ -5820,18 +5820,18 @@ dependencies = [ "num-traits", "rustc_version 0.4.0", "serde", - "solana-frozen-abi 1.14.2", - "solana-frozen-abi-macro 1.14.2", - "solana-logger 1.14.2", + "solana-frozen-abi 1.14.3", + "solana-frozen-abi-macro 1.14.3", + "solana-logger 1.14.3", "solana-measure", "solana-metrics", - "solana-sdk 1.14.2", + "solana-sdk 1.14.3", "thiserror", ] [[package]] name = "solana-program-test" -version = "1.14.2" +version = "1.14.3" dependencies = [ "assert_matches", "async-trait", @@ -5843,10 +5843,10 @@ dependencies = [ "solana-banks-client", "solana-banks-server", "solana-bpf-loader-program", - "solana-logger 1.14.2", + "solana-logger 1.14.3", "solana-program-runtime", "solana-runtime", - "solana-sdk 1.14.2", + "solana-sdk 1.14.3", "solana-vote-program", "thiserror", "tokio", @@ -5854,7 +5854,7 @@ dependencies = [ [[package]] name = "solana-rayon-threadlimit" -version = "1.14.2" +version = "1.14.3" dependencies = [ "lazy_static", "num_cpus", @@ -5862,7 +5862,7 @@ dependencies = [ [[package]] name = "solana-remote-wallet" -version = "1.14.2" +version = "1.14.3" dependencies = [ "console", "dialoguer", @@ -5873,14 +5873,14 @@ dependencies = [ "parking_lot 0.12.1", "qstring", "semver 1.0.10", - "solana-sdk 1.14.2", + "solana-sdk 1.14.3", "thiserror", "uriparse", ] [[package]] name = "solana-rpc" -version = "1.14.2" +version = "1.14.3" dependencies = [ "base64 0.13.0", "bincode", @@ -5916,7 +5916,7 @@ dependencies = [ "solana-poh", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.14.2", + "solana-sdk 1.14.3", "solana-send-transaction-service", "solana-stake-program", "solana-storage-bigtable", @@ -5935,7 +5935,7 @@ dependencies = [ [[package]] name = "solana-rpc-test" -version = "1.14.2" +version = "1.14.3" dependencies = [ "bincode", "bs58", @@ -5947,9 +5947,9 @@ dependencies = [ "serde_json", "solana-account-decoder", "solana-client", - "solana-logger 1.14.2", + "solana-logger 1.14.3", "solana-rpc", - "solana-sdk 1.14.2", + "solana-sdk 1.14.3", "solana-streamer", "solana-test-validator", "solana-transaction-status", @@ -5958,7 +5958,7 @@ dependencies = [ [[package]] name = "solana-runtime" -version = "1.14.2" +version = "1.14.3" dependencies = [ "arrayref", "assert_matches", @@ -5998,18 +5998,18 @@ dependencies = [ "solana-bucket-map", "solana-compute-budget-program", "solana-config-program", - "solana-frozen-abi 1.14.2", - "solana-frozen-abi-macro 1.14.2", - "solana-logger 1.14.2", + "solana-frozen-abi 1.14.3", + "solana-frozen-abi-macro 1.14.3", + "solana-logger 1.14.3", "solana-measure", "solana-metrics", "solana-program-runtime", "solana-rayon-threadlimit", - "solana-sdk 1.14.2", + "solana-sdk 1.14.3", "solana-stake-program", "solana-vote-program", "solana-zk-token-proof-program", - "solana-zk-token-sdk 1.14.2", + "solana-zk-token-sdk 1.14.3", "strum", "strum_macros", "symlink", @@ -6072,7 +6072,7 @@ dependencies = [ [[package]] name = "solana-sdk" -version = "1.14.2" +version = "1.14.3" dependencies = [ "anyhow", "assert_matches", @@ -6112,11 +6112,11 @@ dependencies = [ "serde_json", "sha2 0.10.2", "sha3 0.10.1", - "solana-frozen-abi 1.14.2", - "solana-frozen-abi-macro 1.14.2", - "solana-logger 1.14.2", - "solana-program 1.14.2", - "solana-sdk-macro 1.14.2", + "solana-frozen-abi 1.14.3", + "solana-frozen-abi-macro 1.14.3", + "solana-logger 1.14.3", + "solana-program 1.14.3", + "solana-sdk-macro 1.14.3", "static_assertions", "thiserror", "tiny-bip39", @@ -6139,7 +6139,7 @@ dependencies = [ [[package]] name = "solana-sdk-macro" -version = "1.14.2" +version = "1.14.3" dependencies = [ "bs58", "proc-macro2 1.0.41", @@ -6150,21 +6150,21 @@ dependencies = [ [[package]] name = "solana-send-transaction-service" -version = "1.14.2" +version = "1.14.3" dependencies = [ "crossbeam-channel", "log", "solana-client", - "solana-logger 1.14.2", + "solana-logger 1.14.3", "solana-measure", "solana-metrics", "solana-runtime", - "solana-sdk 1.14.2", + "solana-sdk 1.14.3", ] [[package]] name = "solana-stake-accounts" -version = "1.14.2" +version = "1.14.3" dependencies = [ "clap 2.33.3", "solana-clap-utils", @@ -6172,13 +6172,13 @@ dependencies = [ "solana-client", "solana-remote-wallet", "solana-runtime", - "solana-sdk 1.14.2", + "solana-sdk 1.14.3", "solana-stake-program", ] [[package]] name = "solana-stake-program" -version = "1.14.2" +version = "1.14.3" dependencies = [ "assert_matches", "bincode", @@ -6190,12 +6190,12 @@ dependencies = [ "serde", "serde_derive", "solana-config-program", - "solana-frozen-abi 1.14.2", - "solana-frozen-abi-macro 1.14.2", - "solana-logger 1.14.2", + "solana-frozen-abi 1.14.3", + "solana-frozen-abi-macro 1.14.3", + "solana-logger 1.14.3", "solana-metrics", "solana-program-runtime", - "solana-sdk 1.14.2", + "solana-sdk 1.14.3", "solana-vote-program", "test-case", "thiserror", @@ -6203,7 +6203,7 @@ dependencies = [ [[package]] name = "solana-storage-bigtable" -version = "1.14.2" +version = "1.14.3" dependencies = [ "backoff", "bincode", @@ -6224,7 +6224,7 @@ dependencies = [ "serde_derive", "smpl_jwt", "solana-metrics", - "solana-sdk 1.14.2", + "solana-sdk 1.14.3", "solana-storage-proto", "solana-transaction-status", "thiserror", @@ -6235,7 +6235,7 @@ dependencies = [ [[package]] name = "solana-storage-proto" -version = "1.14.2" +version = "1.14.3" dependencies = [ "bincode", "bs58", @@ -6244,25 +6244,25 @@ dependencies = [ "protobuf-src", "serde", "solana-account-decoder", - "solana-sdk 1.14.2", + "solana-sdk 1.14.3", "solana-transaction-status", "tonic-build 0.8.0", ] [[package]] name = "solana-store-tool" -version = "1.14.2" +version = "1.14.3" dependencies = [ "clap 2.33.3", "log", - "solana-logger 1.14.2", + "solana-logger 1.14.3", "solana-runtime", "solana-version", ] [[package]] name = "solana-streamer" -version = "1.14.2" +version = "1.14.3" dependencies = [ "crossbeam-channel", "futures-util", @@ -6279,10 +6279,10 @@ dependencies = [ "rand 0.7.3", "rcgen", "rustls 0.20.6", - "solana-logger 1.14.2", + "solana-logger 1.14.3", "solana-metrics", "solana-perf", - "solana-sdk 1.14.2", + "solana-sdk 1.14.3", "thiserror", "tokio", "x509-parser", @@ -6290,13 +6290,13 @@ dependencies = [ [[package]] name = "solana-sys-tuner" -version = "1.14.2" +version = "1.14.3" dependencies = [ "clap 2.33.3", "libc", "log", "nix", - "solana-logger 1.14.2", + "solana-logger 1.14.3", "solana-version", "sysctl", "unix_socket2", @@ -6305,7 +6305,7 @@ dependencies = [ [[package]] name = "solana-test-validator" -version = "1.14.2" +version = "1.14.3" dependencies = [ "base64 0.13.0", "log", @@ -6316,20 +6316,20 @@ dependencies = [ "solana-core", "solana-gossip", "solana-ledger", - "solana-logger 1.14.2", + "solana-logger 1.14.3", "solana-net-utils", "solana-program-runtime", "solana-program-test", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.2", + "solana-sdk 1.14.3", "solana-streamer", "tokio", ] [[package]] name = "solana-tokens" -version = "1.14.2" +version = "1.14.3" dependencies = [ "bincode", "chrono", @@ -6345,9 +6345,9 @@ dependencies = [ "solana-clap-utils", "solana-cli-config", "solana-client", - "solana-logger 1.14.2", + "solana-logger 1.14.3", "solana-remote-wallet", - "solana-sdk 1.14.2", + "solana-sdk 1.14.3", "solana-streamer", "solana-test-validator", "solana-transaction-status", @@ -6360,7 +6360,7 @@ dependencies = [ [[package]] name = "solana-transaction-dos" -version = "1.14.2" +version = "1.14.3" dependencies = [ "bincode", "clap 2.33.3", @@ -6374,11 +6374,11 @@ dependencies = [ "solana-faucet", "solana-gossip", "solana-local-cluster", - "solana-logger 1.14.2", + "solana-logger 1.14.3", "solana-measure", "solana-net-utils", "solana-runtime", - "solana-sdk 1.14.2", + "solana-sdk 1.14.3", "solana-streamer", "solana-transaction-status", "solana-version", @@ -6386,7 +6386,7 @@ dependencies = [ [[package]] name = "solana-transaction-status" -version = "1.14.2" +version = "1.14.3" dependencies = [ "Inflector", "base64 0.13.0", @@ -6401,7 +6401,7 @@ dependencies = [ "solana-account-decoder", "solana-measure", "solana-metrics", - "solana-sdk 1.14.2", + "solana-sdk 1.14.3", "solana-vote-program", "spl-associated-token-account", "spl-memo", @@ -6412,7 +6412,7 @@ dependencies = [ [[package]] name = "solana-upload-perf" -version = "1.14.2" +version = "1.14.3" dependencies = [ "serde_json", "solana-metrics", @@ -6420,7 +6420,7 @@ dependencies = [ [[package]] name = "solana-validator" -version = "1.14.2" +version = "1.14.3" dependencies = [ "chrono", "clap 2.33.3", @@ -6451,14 +6451,14 @@ dependencies = [ "solana-genesis-utils", "solana-gossip", "solana-ledger", - "solana-logger 1.14.2", + "solana-logger 1.14.3", "solana-metrics", "solana-net-utils", "solana-perf", "solana-poh", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.2", + "solana-sdk 1.14.3", "solana-send-transaction-service", "solana-storage-bigtable", "solana-streamer", @@ -6471,21 +6471,21 @@ dependencies = [ [[package]] name = "solana-version" -version = "1.14.2" +version = "1.14.3" dependencies = [ "log", "rustc_version 0.4.0", "semver 1.0.10", "serde", "serde_derive", - "solana-frozen-abi 1.14.2", - "solana-frozen-abi-macro 1.14.2", - "solana-sdk 1.14.2", + "solana-frozen-abi 1.14.3", + "solana-frozen-abi-macro 1.14.3", + "solana-sdk 1.14.3", ] [[package]] name = "solana-vote-program" -version = "1.14.2" +version = "1.14.3" dependencies = [ "bincode", "itertools", @@ -6496,18 +6496,18 @@ dependencies = [ "rustc_version 0.4.0", "serde", "serde_derive", - "solana-frozen-abi 1.14.2", - "solana-frozen-abi-macro 1.14.2", - "solana-logger 1.14.2", + "solana-frozen-abi 1.14.3", + "solana-frozen-abi-macro 1.14.3", + "solana-logger 1.14.3", "solana-metrics", "solana-program-runtime", - "solana-sdk 1.14.2", + "solana-sdk 1.14.3", "thiserror", ] [[package]] name = "solana-watchtower" -version = "1.14.2" +version = "1.14.3" dependencies = [ "clap 2.33.3", "humantime", @@ -6516,24 +6516,24 @@ dependencies = [ "solana-cli-config", "solana-cli-output", "solana-client", - "solana-logger 1.14.2", + "solana-logger 1.14.3", "solana-metrics", "solana-notifier", - "solana-sdk 1.14.2", + "solana-sdk 1.14.3", "solana-version", ] [[package]] name = "solana-zk-token-proof-program" -version = "1.14.2" +version = "1.14.3" dependencies = [ "bytemuck", "getrandom 0.1.16", "num-derive", "num-traits", "solana-program-runtime", - "solana-sdk 1.14.2", - "solana-zk-token-sdk 1.14.2", + "solana-sdk 1.14.3", + "solana-zk-token-sdk 1.14.3", ] [[package]] @@ -6568,7 +6568,7 @@ dependencies = [ [[package]] name = "solana-zk-token-sdk" -version = "1.14.2" +version = "1.14.3" dependencies = [ "aes-gcm-siv", "arrayref", @@ -6588,8 +6588,8 @@ dependencies = [ "serde", "serde_json", "sha3 0.9.1", - "solana-program 1.14.2", - "solana-sdk 1.14.2", + "solana-program 1.14.3", + "solana-sdk 1.14.3", "subtle", "thiserror", "zeroize", diff --git a/account-decoder/Cargo.toml b/account-decoder/Cargo.toml index 276fbd2cbbaf16..d0967511a337f8 100644 --- a/account-decoder/Cargo.toml +++ b/account-decoder/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-account-decoder" -version = "1.14.2" +version = "1.14.3" description = "Solana account decoder" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -19,9 +19,9 @@ lazy_static = "1.4.0" serde = "1.0.138" serde_derive = "1.0.103" serde_json = "1.0.81" -solana-config-program = { path = "../programs/config", version = "=1.14.2" } -solana-sdk = { path = "../sdk", version = "=1.14.2" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.2" } +solana-config-program = { path = "../programs/config", version = "=1.14.3" } +solana-sdk = { path = "../sdk", version = "=1.14.3" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.3" } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } spl-token-2022 = { version = "=0.4.2", features = ["no-entrypoint"] } thiserror = "1.0" diff --git a/accounts-bench/Cargo.toml b/accounts-bench/Cargo.toml index 83a9996822eff5..a4cfe7104769e3 100644 --- a/accounts-bench/Cargo.toml +++ b/accounts-bench/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-accounts-bench" -version = "1.14.2" +version = "1.14.3" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -12,11 +12,11 @@ publish = false clap = "2.33.1" log = "0.4.17" rayon = "1.5.3" -solana-logger = { path = "../logger", version = "=1.14.2" } -solana-measure = { path = "../measure", version = "=1.14.2" } -solana-runtime = { path = "../runtime", version = "=1.14.2" } -solana-sdk = { path = "../sdk", version = "=1.14.2" } -solana-version = { path = "../version", version = "=1.14.2" } +solana-logger = { path = "../logger", version = "=1.14.3" } +solana-measure = { path = "../measure", version = "=1.14.3" } +solana-runtime = { path = "../runtime", version = "=1.14.3" } +solana-sdk = { path = "../sdk", version = "=1.14.3" } +solana-version = { path = "../version", version = "=1.14.3" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/accounts-cluster-bench/Cargo.toml b/accounts-cluster-bench/Cargo.toml index b455ca05c82f84..adf26ddf30f5c5 100644 --- a/accounts-cluster-bench/Cargo.toml +++ b/accounts-cluster-bench/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-accounts-cluster-bench" -version = "1.14.2" +version = "1.14.3" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -13,25 +13,25 @@ clap = "2.33.1" log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.2" } -solana-clap-utils = { path = "../clap-utils", version = "=1.14.2" } -solana-client = { path = "../client", version = "=1.14.2" } -solana-faucet = { path = "../faucet", version = "=1.14.2" } -solana-gossip = { path = "../gossip", version = "=1.14.2" } -solana-logger = { path = "../logger", version = "=1.14.2" } -solana-measure = { path = "../measure", version = "=1.14.2" } -solana-net-utils = { path = "../net-utils", version = "=1.14.2" } -solana-runtime = { path = "../runtime", version = "=1.14.2" } -solana-sdk = { path = "../sdk", version = "=1.14.2" } -solana-streamer = { path = "../streamer", version = "=1.14.2" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.2" } -solana-version = { path = "../version", version = "=1.14.2" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.3" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.3" } +solana-client = { path = "../client", version = "=1.14.3" } +solana-faucet = { path = "../faucet", version = "=1.14.3" } +solana-gossip = { path = "../gossip", version = "=1.14.3" } +solana-logger = { path = "../logger", version = "=1.14.3" } +solana-measure = { path = "../measure", version = "=1.14.3" } +solana-net-utils = { path = "../net-utils", version = "=1.14.3" } +solana-runtime = { path = "../runtime", version = "=1.14.3" } +solana-sdk = { path = "../sdk", version = "=1.14.3" } +solana-streamer = { path = "../streamer", version = "=1.14.3" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.3" } +solana-version = { path = "../version", version = "=1.14.3" } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } [dev-dependencies] -solana-core = { path = "../core", version = "=1.14.2" } -solana-local-cluster = { path = "../local-cluster", version = "=1.14.2" } -solana-test-validator = { path = "../test-validator", version = "=1.14.2" } +solana-core = { path = "../core", version = "=1.14.3" } +solana-local-cluster = { path = "../local-cluster", version = "=1.14.3" } +solana-test-validator = { path = "../test-validator", version = "=1.14.3" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/banking-bench/Cargo.toml b/banking-bench/Cargo.toml index 1305bccb264f81..a57859d07f07c3 100644 --- a/banking-bench/Cargo.toml +++ b/banking-bench/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-banking-bench" -version = "1.14.2" +version = "1.14.3" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,18 +14,18 @@ crossbeam-channel = "0.5" log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" -solana-client = { path = "../client", version = "=1.14.2" } -solana-core = { path = "../core", version = "=1.14.2" } -solana-gossip = { path = "../gossip", version = "=1.14.2" } -solana-ledger = { path = "../ledger", version = "=1.14.2" } -solana-logger = { path = "../logger", version = "=1.14.2" } -solana-measure = { path = "../measure", version = "=1.14.2" } -solana-perf = { path = "../perf", version = "=1.14.2" } -solana-poh = { path = "../poh", version = "=1.14.2" } -solana-runtime = { path = "../runtime", version = "=1.14.2" } -solana-sdk = { path = "../sdk", version = "=1.14.2" } -solana-streamer = { path = "../streamer", version = "=1.14.2" } -solana-version = { path = "../version", version = "=1.14.2" } +solana-client = { path = "../client", version = "=1.14.3" } +solana-core = { path = "../core", version = "=1.14.3" } +solana-gossip = { path = "../gossip", version = "=1.14.3" } +solana-ledger = { path = "../ledger", version = "=1.14.3" } +solana-logger = { path = "../logger", version = "=1.14.3" } +solana-measure = { path = "../measure", version = "=1.14.3" } +solana-perf = { path = "../perf", version = "=1.14.3" } +solana-poh = { path = "../poh", version = "=1.14.3" } +solana-runtime = { path = "../runtime", version = "=1.14.3" } +solana-sdk = { path = "../sdk", version = "=1.14.3" } +solana-streamer = { path = "../streamer", version = "=1.14.3" } +solana-version = { path = "../version", version = "=1.14.3" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/banks-client/Cargo.toml b/banks-client/Cargo.toml index b9ea119601419e..aee3ee9dfd71de 100644 --- a/banks-client/Cargo.toml +++ b/banks-client/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-banks-client" -version = "1.14.2" +version = "1.14.3" description = "Solana banks client" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,17 +12,17 @@ edition = "2021" [dependencies] borsh = "0.9.3" futures = "0.3" -solana-banks-interface = { path = "../banks-interface", version = "=1.14.2" } -solana-program = { path = "../sdk/program", version = "=1.14.2" } -solana-sdk = { path = "../sdk", version = "=1.14.2" } +solana-banks-interface = { path = "../banks-interface", version = "=1.14.3" } +solana-program = { path = "../sdk/program", version = "=1.14.3" } +solana-sdk = { path = "../sdk", version = "=1.14.3" } tarpc = { version = "0.29.0", features = ["full"] } thiserror = "1.0" tokio = { version = "~1.14.1", features = ["full"] } tokio-serde = { version = "0.8", features = ["bincode"] } [dev-dependencies] -solana-banks-server = { path = "../banks-server", version = "=1.14.2" } -solana-runtime = { path = "../runtime", version = "=1.14.2" } +solana-banks-server = { path = "../banks-server", version = "=1.14.3" } +solana-runtime = { path = "../runtime", version = "=1.14.3" } [lib] crate-type = ["lib"] diff --git a/banks-interface/Cargo.toml b/banks-interface/Cargo.toml index 9c9bdf0d5ed231..92b95aa42c4742 100644 --- a/banks-interface/Cargo.toml +++ b/banks-interface/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-banks-interface" -version = "1.14.2" +version = "1.14.3" description = "Solana banks RPC interface" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -11,7 +11,7 @@ edition = "2021" [dependencies] serde = { version = "1.0.138", features = ["derive"] } -solana-sdk = { path = "../sdk", version = "=1.14.2" } +solana-sdk = { path = "../sdk", version = "=1.14.3" } tarpc = { version = "0.29.0", features = ["full"] } [lib] diff --git a/banks-server/Cargo.toml b/banks-server/Cargo.toml index 69d6e1eaadc0b8..afb32f2276f440 100644 --- a/banks-server/Cargo.toml +++ b/banks-server/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-banks-server" -version = "1.14.2" +version = "1.14.3" description = "Solana banks server" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,11 +13,11 @@ edition = "2021" bincode = "1.3.3" crossbeam-channel = "0.5" futures = "0.3" -solana-banks-interface = { path = "../banks-interface", version = "=1.14.2" } -solana-client = { path = "../client", version = "=1.14.2" } -solana-runtime = { path = "../runtime", version = "=1.14.2" } -solana-sdk = { path = "../sdk", version = "=1.14.2" } -solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.2" } +solana-banks-interface = { path = "../banks-interface", version = "=1.14.3" } +solana-client = { path = "../client", version = "=1.14.3" } +solana-runtime = { path = "../runtime", version = "=1.14.3" } +solana-sdk = { path = "../sdk", version = "=1.14.3" } +solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.3" } tarpc = { version = "0.29.0", features = ["full"] } tokio = { version = "1", features = ["full"] } tokio-serde = { version = "0.8", features = ["bincode"] } diff --git a/bench-streamer/Cargo.toml b/bench-streamer/Cargo.toml index 866693c802d998..9441cd1c2eaaa3 100644 --- a/bench-streamer/Cargo.toml +++ b/bench-streamer/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-bench-streamer" -version = "1.14.2" +version = "1.14.3" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -11,9 +11,9 @@ publish = false [dependencies] clap = { version = "3.1.5", features = ["cargo"] } crossbeam-channel = "0.5" -solana-net-utils = { path = "../net-utils", version = "=1.14.2" } -solana-streamer = { path = "../streamer", version = "=1.14.2" } -solana-version = { path = "../version", version = "=1.14.2" } +solana-net-utils = { path = "../net-utils", version = "=1.14.3" } +solana-streamer = { path = "../streamer", version = "=1.14.3" } +solana-version = { path = "../version", version = "=1.14.3" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/bench-tps/Cargo.toml b/bench-tps/Cargo.toml index e35e1680d4e3fa..c37b9ef6fd7604 100644 --- a/bench-tps/Cargo.toml +++ b/bench-tps/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-bench-tps" -version = "1.14.2" +version = "1.14.3" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -15,28 +15,28 @@ log = "0.4.17" rayon = "1.5.3" serde_json = "1.0.81" serde_yaml = "0.8.26" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.2" } -solana-cli-config = { path = "../cli-config", version = "=1.14.2" } -solana-client = { path = "../client", version = "=1.14.2" } -solana-core = { path = "../core", version = "=1.14.2" } -solana-faucet = { path = "../faucet", version = "=1.14.2" } -solana-genesis = { path = "../genesis", version = "=1.14.2" } -solana-gossip = { path = "../gossip", version = "=1.14.2" } -solana-logger = { path = "../logger", version = "=1.14.2" } -solana-measure = { path = "../measure", version = "=1.14.2" } -solana-metrics = { path = "../metrics", version = "=1.14.2" } -solana-net-utils = { path = "../net-utils", version = "=1.14.2" } -solana-rpc = { path = "../rpc", version = "=1.14.2" } -solana-runtime = { path = "../runtime", version = "=1.14.2" } -solana-sdk = { path = "../sdk", version = "=1.14.2" } -solana-streamer = { path = "../streamer", version = "=1.14.2" } -solana-version = { path = "../version", version = "=1.14.2" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.3" } +solana-cli-config = { path = "../cli-config", version = "=1.14.3" } +solana-client = { path = "../client", version = "=1.14.3" } +solana-core = { path = "../core", version = "=1.14.3" } +solana-faucet = { path = "../faucet", version = "=1.14.3" } +solana-genesis = { path = "../genesis", version = "=1.14.3" } +solana-gossip = { path = "../gossip", version = "=1.14.3" } +solana-logger = { path = "../logger", version = "=1.14.3" } +solana-measure = { path = "../measure", version = "=1.14.3" } +solana-metrics = { path = "../metrics", version = "=1.14.3" } +solana-net-utils = { path = "../net-utils", version = "=1.14.3" } +solana-rpc = { path = "../rpc", version = "=1.14.3" } +solana-runtime = { path = "../runtime", version = "=1.14.3" } +solana-sdk = { path = "../sdk", version = "=1.14.3" } +solana-streamer = { path = "../streamer", version = "=1.14.3" } +solana-version = { path = "../version", version = "=1.14.3" } thiserror = "1.0" [dev-dependencies] serial_test = "0.8.0" -solana-local-cluster = { path = "../local-cluster", version = "=1.14.2" } -solana-test-validator = { path = "../test-validator", version = "=1.14.2" } +solana-local-cluster = { path = "../local-cluster", version = "=1.14.3" } +solana-test-validator = { path = "../test-validator", version = "=1.14.3" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/bloom/Cargo.toml b/bloom/Cargo.toml index 1c78315fb027fb..c7d427004f3beb 100644 --- a/bloom/Cargo.toml +++ b/bloom/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bloom" -version = "1.14.2" +version = "1.14.3" description = "Solana bloom filter" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -17,9 +17,9 @@ rand = "0.7.0" rayon = "1.5.3" serde = { version = "1.0.138", features = ["rc"] } serde_derive = "1.0.103" -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.2" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.2" } -solana-sdk = { path = "../sdk", version = "=1.14.2" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.3" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.3" } +solana-sdk = { path = "../sdk", version = "=1.14.3" } [lib] crate-type = ["lib"] diff --git a/bucket_map/Cargo.toml b/bucket_map/Cargo.toml index 8d04714bbffa08..941ba523527bb9 100644 --- a/bucket_map/Cargo.toml +++ b/bucket_map/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bucket-map" -version = "1.14.2" +version = "1.14.3" description = "solana-bucket-map" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-bucket-map" @@ -15,14 +15,14 @@ log = { version = "0.4.17" } memmap2 = "0.5.3" modular-bitfield = "0.11.2" rand = "0.7.0" -solana-measure = { path = "../measure", version = "=1.14.2" } -solana-sdk = { path = "../sdk", version = "=1.14.2" } +solana-measure = { path = "../measure", version = "=1.14.3" } +solana-sdk = { path = "../sdk", version = "=1.14.3" } tempfile = "3.3.0" [dev-dependencies] fs_extra = "1.2.0" rayon = "1.5.3" -solana-logger = { path = "../logger", version = "=1.14.2" } +solana-logger = { path = "../logger", version = "=1.14.3" } [lib] crate-type = ["lib"] diff --git a/clap-utils/Cargo.toml b/clap-utils/Cargo.toml index e5397a1e8a8066..70b9ff58e8c24e 100644 --- a/clap-utils/Cargo.toml +++ b/clap-utils/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-clap-utils" -version = "1.14.2" +version = "1.14.3" description = "Solana utilities for the clap" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,9 +13,9 @@ edition = "2021" chrono = "0.4" clap = "2.33.0" rpassword = "6.0" -solana-perf = { path = "../perf", version = "=1.14.2" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.2", default-features = false } -solana-sdk = { path = "../sdk", version = "=1.14.2" } +solana-perf = { path = "../perf", version = "=1.14.3" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.3", default-features = false } +solana-sdk = { path = "../sdk", version = "=1.14.3" } thiserror = "1.0.31" tiny-bip39 = "0.8.2" uriparse = "0.6.4" diff --git a/clap-v3-utils/Cargo.toml b/clap-v3-utils/Cargo.toml index 5b120e6622de65..e02e268e1b6dd5 100644 --- a/clap-v3-utils/Cargo.toml +++ b/clap-v3-utils/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-clap-v3-utils" -version = "1.14.2" +version = "1.14.3" description = "Solana utilities for the clap v3" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,9 +13,9 @@ edition = "2021" chrono = "0.4" clap = { version = "3.1.5", features = ["cargo"] } rpassword = "6.0" -solana-perf = { path = "../perf", version = "=1.14.2" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.2", default-features = false } -solana-sdk = { path = "../sdk", version = "=1.14.2" } +solana-perf = { path = "../perf", version = "=1.14.3" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.3", default-features = false } +solana-sdk = { path = "../sdk", version = "=1.14.3" } thiserror = "1.0.31" tiny-bip39 = "0.8.2" uriparse = "0.6.4" diff --git a/cli-config/Cargo.toml b/cli-config/Cargo.toml index ec5455800e20a2..850ecca264146c 100644 --- a/cli-config/Cargo.toml +++ b/cli-config/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-cli-config" description = "Blockchain, Rebuilt for Scale" -version = "1.14.2" +version = "1.14.3" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -15,8 +15,8 @@ lazy_static = "1.4.0" serde = "1.0.138" serde_derive = "1.0.103" serde_yaml = "0.8.26" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.2" } -solana-sdk = { path = "../sdk", version = "=1.14.2" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.3" } +solana-sdk = { path = "../sdk", version = "=1.14.3" } url = "2.2.2" [dev-dependencies] diff --git a/cli-output/Cargo.toml b/cli-output/Cargo.toml index 6eb4afa6acc570..fc335781213685 100644 --- a/cli-output/Cargo.toml +++ b/cli-output/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-cli-output" description = "Blockchain, Rebuilt for Scale" -version = "1.14.2" +version = "1.14.3" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -21,13 +21,13 @@ pretty-hex = "0.3.0" semver = "1.0.10" serde = "1.0.138" serde_json = "1.0.81" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.2" } -solana-clap-utils = { path = "../clap-utils", version = "=1.14.2" } -solana-cli-config = { path = "../cli-config", version = "=1.14.2" } -solana-client = { path = "../client", version = "=1.14.2" } -solana-sdk = { path = "../sdk", version = "=1.14.2" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.2" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.2" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.3" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.3" } +solana-cli-config = { path = "../cli-config", version = "=1.14.3" } +solana-client = { path = "../client", version = "=1.14.3" } +solana-sdk = { path = "../sdk", version = "=1.14.3" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.3" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.3" } spl-memo = { version = "=3.0.1", features = ["no-entrypoint"] } [dev-dependencies] diff --git a/cli/Cargo.toml b/cli/Cargo.toml index c3004e07365f51..12806d94c4bb6b 100644 --- a/cli/Cargo.toml +++ b/cli/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-cli" description = "Blockchain, Rebuilt for Scale" -version = "1.14.2" +version = "1.14.3" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -27,29 +27,29 @@ semver = "1.0.10" serde = "1.0.138" serde_derive = "1.0.103" serde_json = "1.0.81" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.2" } -solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.2" } -solana-clap-utils = { path = "../clap-utils", version = "=1.14.2" } -solana-cli-config = { path = "../cli-config", version = "=1.14.2" } -solana-cli-output = { path = "../cli-output", version = "=1.14.2" } -solana-client = { path = "../client", version = "=1.14.2" } -solana-config-program = { path = "../programs/config", version = "=1.14.2" } -solana-faucet = { path = "../faucet", version = "=1.14.2" } -solana-logger = { path = "../logger", version = "=1.14.2" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.2" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.2" } -solana-sdk = { path = "../sdk", version = "=1.14.2" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.2" } -solana-version = { path = "../version", version = "=1.14.2" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.2" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.3" } +solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.3" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.3" } +solana-cli-config = { path = "../cli-config", version = "=1.14.3" } +solana-cli-output = { path = "../cli-output", version = "=1.14.3" } +solana-client = { path = "../client", version = "=1.14.3" } +solana-config-program = { path = "../programs/config", version = "=1.14.3" } +solana-faucet = { path = "../faucet", version = "=1.14.3" } +solana-logger = { path = "../logger", version = "=1.14.3" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.3" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.3" } +solana-sdk = { path = "../sdk", version = "=1.14.3" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.3" } +solana-version = { path = "../version", version = "=1.14.3" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.3" } solana_rbpf = "=0.2.31" spl-memo = { version = "=3.0.1", features = ["no-entrypoint"] } thiserror = "1.0.31" tiny-bip39 = "0.8.2" [dev-dependencies] -solana-streamer = { path = "../streamer", version = "=1.14.2" } -solana-test-validator = { path = "../test-validator", version = "=1.14.2" } +solana-streamer = { path = "../streamer", version = "=1.14.3" } +solana-test-validator = { path = "../test-validator", version = "=1.14.3" } tempfile = "3.3.0" [[bin]] diff --git a/client-test/Cargo.toml b/client-test/Cargo.toml index 9797b22cd0333a..b36b2e30ad4f84 100644 --- a/client-test/Cargo.toml +++ b/client-test/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-client-test" -version = "1.14.2" +version = "1.14.3" description = "Solana RPC Test" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,25 +14,25 @@ publish = false futures-util = "0.3.21" serde_json = "1.0.81" serial_test = "0.8.0" -solana-client = { path = "../client", version = "=1.14.2" } -solana-ledger = { path = "../ledger", version = "=1.14.2" } -solana-measure = { path = "../measure", version = "=1.14.2" } -solana-merkle-tree = { path = "../merkle-tree", version = "=1.14.2" } -solana-metrics = { path = "../metrics", version = "=1.14.2" } -solana-perf = { path = "../perf", version = "=1.14.2" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.2" } -solana-rpc = { path = "../rpc", version = "=1.14.2" } -solana-runtime = { path = "../runtime", version = "=1.14.2" } -solana-sdk = { path = "../sdk", version = "=1.14.2" } -solana-streamer = { path = "../streamer", version = "=1.14.2" } -solana-test-validator = { path = "../test-validator", version = "=1.14.2" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.2" } -solana-version = { path = "../version", version = "=1.14.2" } +solana-client = { path = "../client", version = "=1.14.3" } +solana-ledger = { path = "../ledger", version = "=1.14.3" } +solana-measure = { path = "../measure", version = "=1.14.3" } +solana-merkle-tree = { path = "../merkle-tree", version = "=1.14.3" } +solana-metrics = { path = "../metrics", version = "=1.14.3" } +solana-perf = { path = "../perf", version = "=1.14.3" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.3" } +solana-rpc = { path = "../rpc", version = "=1.14.3" } +solana-runtime = { path = "../runtime", version = "=1.14.3" } +solana-sdk = { path = "../sdk", version = "=1.14.3" } +solana-streamer = { path = "../streamer", version = "=1.14.3" } +solana-test-validator = { path = "../test-validator", version = "=1.14.3" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.3" } +solana-version = { path = "../version", version = "=1.14.3" } systemstat = "0.1.11" tokio = { version = "~1.14.1", features = ["full"] } [dev-dependencies] -solana-logger = { path = "../logger", version = "=1.14.2" } +solana-logger = { path = "../logger", version = "=1.14.3" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/client/Cargo.toml b/client/Cargo.toml index 91308d16462125..68db38e2c3ace8 100644 --- a/client/Cargo.toml +++ b/client/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-client" -version = "1.14.2" +version = "1.14.3" description = "Solana Client" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -38,17 +38,17 @@ semver = "1.0.10" serde = "1.0.138" serde_derive = "1.0.103" serde_json = "1.0.81" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.2" } -solana-clap-utils = { path = "../clap-utils", version = "=1.14.2" } -solana-faucet = { path = "../faucet", version = "=1.14.2" } -solana-measure = { path = "../measure", version = "=1.14.2" } -solana-metrics = { path = "../metrics", version = "=1.14.2" } -solana-net-utils = { path = "../net-utils", version = "=1.14.2" } -solana-sdk = { path = "../sdk", version = "=1.14.2" } -solana-streamer = { path = "../streamer", version = "=1.14.2" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.2" } -solana-version = { path = "../version", version = "=1.14.2" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.2" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.3" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.3" } +solana-faucet = { path = "../faucet", version = "=1.14.3" } +solana-measure = { path = "../measure", version = "=1.14.3" } +solana-metrics = { path = "../metrics", version = "=1.14.3" } +solana-net-utils = { path = "../net-utils", version = "=1.14.3" } +solana-sdk = { path = "../sdk", version = "=1.14.3" } +solana-streamer = { path = "../streamer", version = "=1.14.3" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.3" } +solana-version = { path = "../version", version = "=1.14.3" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.3" } spl-token-2022 = { version = "=0.4.2", features = ["no-entrypoint"] } thiserror = "1.0" tokio = { version = "1", features = ["full"] } @@ -61,8 +61,8 @@ url = "2.2.2" anyhow = "1.0.58" assert_matches = "1.5.0" jsonrpc-http-server = "18.0.0" -solana-logger = { path = "../logger", version = "=1.14.2" } -solana-perf = { path = "../perf", version = "=1.14.2" } +solana-logger = { path = "../logger", version = "=1.14.3" } +solana-perf = { path = "../perf", version = "=1.14.3" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/core/Cargo.toml b/core/Cargo.toml index 0cb290060f79f1..a92980c4dfd1af 100644 --- a/core/Cargo.toml +++ b/core/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "solana-core" description = "Blockchain, Rebuilt for Scale" -version = "1.14.2" +version = "1.14.3" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-core" readme = "../README.md" @@ -35,30 +35,30 @@ rand_chacha = "0.2.2" rayon = "1.5.3" serde = "1.0.138" serde_derive = "1.0.103" -solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.2" } -solana-bloom = { path = "../bloom", version = "=1.14.2" } -solana-client = { path = "../client", version = "=1.14.2" } -solana-entry = { path = "../entry", version = "=1.14.2" } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.2" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.2" } -solana-geyser-plugin-manager = { path = "../geyser-plugin-manager", version = "=1.14.2" } -solana-gossip = { path = "../gossip", version = "=1.14.2" } -solana-ledger = { path = "../ledger", version = "=1.14.2" } -solana-measure = { path = "../measure", version = "=1.14.2" } -solana-metrics = { path = "../metrics", version = "=1.14.2" } -solana-net-utils = { path = "../net-utils", version = "=1.14.2" } -solana-perf = { path = "../perf", version = "=1.14.2" } -solana-poh = { path = "../poh", version = "=1.14.2" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.2" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.2" } -solana-rpc = { path = "../rpc", version = "=1.14.2" } -solana-runtime = { path = "../runtime", version = "=1.14.2" } -solana-sdk = { path = "../sdk", version = "=1.14.2" } -solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.2" } -solana-streamer = { path = "../streamer", version = "=1.14.2" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.2" } -solana-version = { path = "../version", version = "=1.14.2" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.2" } +solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.3" } +solana-bloom = { path = "../bloom", version = "=1.14.3" } +solana-client = { path = "../client", version = "=1.14.3" } +solana-entry = { path = "../entry", version = "=1.14.3" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.3" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.3" } +solana-geyser-plugin-manager = { path = "../geyser-plugin-manager", version = "=1.14.3" } +solana-gossip = { path = "../gossip", version = "=1.14.3" } +solana-ledger = { path = "../ledger", version = "=1.14.3" } +solana-measure = { path = "../measure", version = "=1.14.3" } +solana-metrics = { path = "../metrics", version = "=1.14.3" } +solana-net-utils = { path = "../net-utils", version = "=1.14.3" } +solana-perf = { path = "../perf", version = "=1.14.3" } +solana-poh = { path = "../poh", version = "=1.14.3" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.3" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.3" } +solana-rpc = { path = "../rpc", version = "=1.14.3" } +solana-runtime = { path = "../runtime", version = "=1.14.3" } +solana-sdk = { path = "../sdk", version = "=1.14.3" } +solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.3" } +solana-streamer = { path = "../streamer", version = "=1.14.3" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.3" } +solana-version = { path = "../version", version = "=1.14.3" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.3" } sys-info = "0.9.1" tempfile = "3.3.0" thiserror = "1.0" @@ -70,9 +70,9 @@ matches = "0.1.9" raptorq = "1.7.0" serde_json = "1.0.81" serial_test = "0.8.0" -solana-logger = { path = "../logger", version = "=1.14.2" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.2" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.2" } +solana-logger = { path = "../logger", version = "=1.14.3" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.3" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.3" } static_assertions = "1.1.0" systemstat = "0.1.11" test-case = "2.1.0" diff --git a/docs/src/developing/clients/jsonrpc-api.md b/docs/src/developing/clients/jsonrpc-api.md index f9952cb9ca058c..bf5d8c2c74ebc2 100644 --- a/docs/src/developing/clients/jsonrpc-api.md +++ b/docs/src/developing/clients/jsonrpc-api.md @@ -1948,7 +1948,7 @@ Returns all accounts owned by the provided program Pubkey - `offset: ` - offset into program account data to start comparison - `bytes: ` - data to match, as encoded string - `encoding: ` - encoding for filter `bytes` data, either "base58" or "base64". Data is limited in size to 128 or fewer decoded bytes. - **NEW: This field, and base64 support generally, is only available in solana-core v1.14.2 or newer. Please omit when querying nodes on earlier versions** + **NEW: This field, and base64 support generally, is only available in solana-core v1.14.3 or newer. Please omit when querying nodes on earlier versions** - `dataSize: ` - compares the program account data length with the provided data size @@ -3176,7 +3176,7 @@ curl http://localhost:8899 -X POST -H "Content-Type: application/json" -d ' Result: ```json -{ "jsonrpc": "2.0", "result": { "solana-core": "1.14.2" }, "id": 1 } +{ "jsonrpc": "2.0", "result": { "solana-core": "1.14.3" }, "id": 1 } ``` ### getVoteAccounts diff --git a/dos/Cargo.toml b/dos/Cargo.toml index 4530dd7e582dec..9ac116c08d10a4 100644 --- a/dos/Cargo.toml +++ b/dos/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-dos" -version = "1.14.2" +version = "1.14.3" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -17,23 +17,23 @@ itertools = "0.10.3" log = "0.4.17" rand = "0.7.0" serde = "1.0.138" -solana-bench-tps = { path = "../bench-tps", version = "=1.14.2" } -solana-client = { path = "../client", version = "=1.14.2" } -solana-core = { path = "../core", version = "=1.14.2" } -solana-faucet = { path = "../faucet", version = "=1.14.2" } -solana-gossip = { path = "../gossip", version = "=1.14.2" } -solana-logger = { path = "../logger", version = "=1.14.2" } -solana-measure = { path = "../measure", version = "=1.14.2" } -solana-net-utils = { path = "../net-utils", version = "=1.14.2" } -solana-perf = { path = "../perf", version = "=1.14.2" } -solana-rpc = { path = "../rpc", version = "=1.14.2" } -solana-sdk = { path = "../sdk", version = "=1.14.2" } -solana-streamer = { path = "../streamer", version = "=1.14.2" } -solana-version = { path = "../version", version = "=1.14.2" } +solana-bench-tps = { path = "../bench-tps", version = "=1.14.3" } +solana-client = { path = "../client", version = "=1.14.3" } +solana-core = { path = "../core", version = "=1.14.3" } +solana-faucet = { path = "../faucet", version = "=1.14.3" } +solana-gossip = { path = "../gossip", version = "=1.14.3" } +solana-logger = { path = "../logger", version = "=1.14.3" } +solana-measure = { path = "../measure", version = "=1.14.3" } +solana-net-utils = { path = "../net-utils", version = "=1.14.3" } +solana-perf = { path = "../perf", version = "=1.14.3" } +solana-rpc = { path = "../rpc", version = "=1.14.3" } +solana-sdk = { path = "../sdk", version = "=1.14.3" } +solana-streamer = { path = "../streamer", version = "=1.14.3" } +solana-version = { path = "../version", version = "=1.14.3" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] [dev-dependencies] serial_test = "0.8.0" -solana-local-cluster = { path = "../local-cluster", version = "=1.14.2" } +solana-local-cluster = { path = "../local-cluster", version = "=1.14.3" } diff --git a/download-utils/Cargo.toml b/download-utils/Cargo.toml index 73bc65bda5e2bc..2f0cc2f0af30a5 100644 --- a/download-utils/Cargo.toml +++ b/download-utils/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-download-utils" -version = "1.14.2" +version = "1.14.3" description = "Solana Download Utils" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,8 +14,8 @@ console = "0.15.0" indicatif = "0.16.2" log = "0.4.17" reqwest = { version = "0.11.11", default-features = false, features = ["blocking", "brotli", "deflate", "gzip", "rustls-tls", "json"] } -solana-runtime = { path = "../runtime", version = "=1.14.2" } -solana-sdk = { path = "../sdk", version = "=1.14.2" } +solana-runtime = { path = "../runtime", version = "=1.14.3" } +solana-sdk = { path = "../sdk", version = "=1.14.3" } [lib] crate-type = ["lib"] diff --git a/entry/Cargo.toml b/entry/Cargo.toml index 5bf12417b5850c..5e039d56b32ae1 100644 --- a/entry/Cargo.toml +++ b/entry/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-entry" -version = "1.14.2" +version = "1.14.3" description = "Solana Entry" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -19,16 +19,16 @@ log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" serde = "1.0.138" -solana-measure = { path = "../measure", version = "=1.14.2" } -solana-merkle-tree = { path = "../merkle-tree", version = "=1.14.2" } -solana-metrics = { path = "../metrics", version = "=1.14.2" } -solana-perf = { path = "../perf", version = "=1.14.2" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.2" } -solana-sdk = { path = "../sdk", version = "=1.14.2" } +solana-measure = { path = "../measure", version = "=1.14.3" } +solana-merkle-tree = { path = "../merkle-tree", version = "=1.14.3" } +solana-metrics = { path = "../metrics", version = "=1.14.3" } +solana-perf = { path = "../perf", version = "=1.14.3" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.3" } +solana-sdk = { path = "../sdk", version = "=1.14.3" } [dev-dependencies] matches = "0.1.9" -solana-logger = { path = "../logger", version = "=1.14.2" } +solana-logger = { path = "../logger", version = "=1.14.3" } [lib] crate-type = ["lib"] diff --git a/faucet/Cargo.toml b/faucet/Cargo.toml index 54cbc204932b1f..1c425a44f9b187 100644 --- a/faucet/Cargo.toml +++ b/faucet/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-faucet" -version = "1.14.2" +version = "1.14.3" description = "Solana Faucet" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -17,12 +17,12 @@ crossbeam-channel = "0.5" log = "0.4.17" serde = "1.0.138" serde_derive = "1.0.103" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.2" } -solana-cli-config = { path = "../cli-config", version = "=1.14.2" } -solana-logger = { path = "../logger", version = "=1.14.2" } -solana-metrics = { path = "../metrics", version = "=1.14.2" } -solana-sdk = { path = "../sdk", version = "=1.14.2" } -solana-version = { path = "../version", version = "=1.14.2" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.3" } +solana-cli-config = { path = "../cli-config", version = "=1.14.3" } +solana-logger = { path = "../logger", version = "=1.14.3" } +solana-metrics = { path = "../metrics", version = "=1.14.3" } +solana-sdk = { path = "../sdk", version = "=1.14.3" } +solana-version = { path = "../version", version = "=1.14.3" } spl-memo = { version = "=3.0.1", features = ["no-entrypoint"] } thiserror = "1.0" tokio = { version = "1", features = ["full"] } diff --git a/frozen-abi/Cargo.toml b/frozen-abi/Cargo.toml index 7876e34ffd8aff..8ad372a14eaeaa 100644 --- a/frozen-abi/Cargo.toml +++ b/frozen-abi/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-frozen-abi" -version = "1.14.2" +version = "1.14.3" description = "Solana Frozen ABI" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -20,7 +20,7 @@ serde_bytes = "0.11" serde_derive = "1.0" serde_json = "1.0" sha2 = "0.10.2" -solana-frozen-abi-macro = { path = "macro", version = "=1.14.2" } +solana-frozen-abi-macro = { path = "macro", version = "=1.14.3" } thiserror = "1.0" [target.'cfg(not(target_os = "solana"))'.dependencies] @@ -43,7 +43,7 @@ rand_core = { version = "0.6.3", features = ["alloc", "getrandom", "std"] } subtle = { version = "2.4.1", features = ["default", "i128", "std"] } [target.'cfg(not(target_os = "solana"))'.dev-dependencies] -solana-logger = { path = "../logger", version = "=1.14.2" } +solana-logger = { path = "../logger", version = "=1.14.3" } [build-dependencies] rustc_version = "0.4" diff --git a/frozen-abi/macro/Cargo.toml b/frozen-abi/macro/Cargo.toml index 6c6a1edf1ca4cf..8bc9076b8694fd 100644 --- a/frozen-abi/macro/Cargo.toml +++ b/frozen-abi/macro/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-frozen-abi-macro" -version = "1.14.2" +version = "1.14.3" description = "Solana Frozen ABI Macro" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/genesis-utils/Cargo.toml b/genesis-utils/Cargo.toml index ea883cb32ec75d..d86c3e75a48e06 100644 --- a/genesis-utils/Cargo.toml +++ b/genesis-utils/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-genesis-utils" -version = "1.14.2" +version = "1.14.3" description = "Solana Genesis Utils" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,9 +10,9 @@ documentation = "https://docs.rs/solana-download-utils" edition = "2021" [dependencies] -solana-download-utils = { path = "../download-utils", version = "=1.14.2" } -solana-runtime = { path = "../runtime", version = "=1.14.2" } -solana-sdk = { path = "../sdk", version = "=1.14.2" } +solana-download-utils = { path = "../download-utils", version = "=1.14.3" } +solana-runtime = { path = "../runtime", version = "=1.14.3" } +solana-sdk = { path = "../sdk", version = "=1.14.3" } [lib] crate-type = ["lib"] diff --git a/genesis/Cargo.toml b/genesis/Cargo.toml index 1c71dfda78c9c8..2b8f32cd3270ca 100644 --- a/genesis/Cargo.toml +++ b/genesis/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-genesis" description = "Blockchain, Rebuilt for Scale" -version = "1.14.2" +version = "1.14.3" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -15,16 +15,16 @@ clap = "2.33.1" serde = "1.0.138" serde_json = "1.0.81" serde_yaml = "0.8.26" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.2" } -solana-cli-config = { path = "../cli-config", version = "=1.14.2" } -solana-entry = { path = "../entry", version = "=1.14.2" } -solana-ledger = { path = "../ledger", version = "=1.14.2" } -solana-logger = { path = "../logger", version = "=1.14.2" } -solana-runtime = { path = "../runtime", version = "=1.14.2" } -solana-sdk = { path = "../sdk", version = "=1.14.2" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.2" } -solana-version = { path = "../version", version = "=1.14.2" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.2" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.3" } +solana-cli-config = { path = "../cli-config", version = "=1.14.3" } +solana-entry = { path = "../entry", version = "=1.14.3" } +solana-ledger = { path = "../ledger", version = "=1.14.3" } +solana-logger = { path = "../logger", version = "=1.14.3" } +solana-runtime = { path = "../runtime", version = "=1.14.3" } +solana-sdk = { path = "../sdk", version = "=1.14.3" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.3" } +solana-version = { path = "../version", version = "=1.14.3" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.3" } tempfile = "3.3.0" [[bin]] diff --git a/geyser-plugin-interface/Cargo.toml b/geyser-plugin-interface/Cargo.toml index 6cb51a6fe64a5e..7262f490d56a42 100644 --- a/geyser-plugin-interface/Cargo.toml +++ b/geyser-plugin-interface/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-geyser-plugin-interface" description = "The Solana Geyser plugin interface." -version = "1.14.2" +version = "1.14.3" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -11,8 +11,8 @@ documentation = "https://docs.rs/solana-geyser-plugin-interface" [dependencies] log = "0.4.17" -solana-sdk = { path = "../sdk", version = "=1.14.2" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.2" } +solana-sdk = { path = "../sdk", version = "=1.14.3" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.3" } thiserror = "1.0.31" [package.metadata.docs.rs] diff --git a/geyser-plugin-manager/Cargo.toml b/geyser-plugin-manager/Cargo.toml index 743570653b54cf..231d8468e1972f 100644 --- a/geyser-plugin-manager/Cargo.toml +++ b/geyser-plugin-manager/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-geyser-plugin-manager" description = "The Solana Geyser plugin manager." -version = "1.14.2" +version = "1.14.3" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -16,13 +16,13 @@ json5 = "0.4.1" libloading = "0.7.3" log = "0.4.17" serde_json = "1.0.81" -solana-geyser-plugin-interface = { path = "../geyser-plugin-interface", version = "=1.14.2" } -solana-measure = { path = "../measure", version = "=1.14.2" } -solana-metrics = { path = "../metrics", version = "=1.14.2" } -solana-rpc = { path = "../rpc", version = "=1.14.2" } -solana-runtime = { path = "../runtime", version = "=1.14.2" } -solana-sdk = { path = "../sdk", version = "=1.14.2" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.2" } +solana-geyser-plugin-interface = { path = "../geyser-plugin-interface", version = "=1.14.3" } +solana-measure = { path = "../measure", version = "=1.14.3" } +solana-metrics = { path = "../metrics", version = "=1.14.3" } +solana-rpc = { path = "../rpc", version = "=1.14.3" } +solana-runtime = { path = "../runtime", version = "=1.14.3" } +solana-sdk = { path = "../sdk", version = "=1.14.3" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.3" } thiserror = "1.0.31" [package.metadata.docs.rs] diff --git a/gossip/Cargo.toml b/gossip/Cargo.toml index b09a10aeb7144a..e8cbfcc310cac2 100644 --- a/gossip/Cargo.toml +++ b/gossip/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-gossip" description = "Blockchain, Rebuilt for Scale" -version = "1.14.2" +version = "1.14.3" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -27,24 +27,24 @@ rayon = "1.5.3" serde = "1.0.138" serde_bytes = "0.11" serde_derive = "1.0.103" -solana-bloom = { path = "../bloom", version = "=1.14.2" } -solana-clap-utils = { path = "../clap-utils", version = "=1.14.2" } -solana-client = { path = "../client", version = "=1.14.2" } -solana-entry = { path = "../entry", version = "=1.14.2" } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.2" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.2" } -solana-ledger = { path = "../ledger", version = "=1.14.2" } -solana-logger = { path = "../logger", version = "=1.14.2" } -solana-measure = { path = "../measure", version = "=1.14.2" } -solana-metrics = { path = "../metrics", version = "=1.14.2" } -solana-net-utils = { path = "../net-utils", version = "=1.14.2" } -solana-perf = { path = "../perf", version = "=1.14.2" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.2" } -solana-runtime = { path = "../runtime", version = "=1.14.2" } -solana-sdk = { path = "../sdk", version = "=1.14.2" } -solana-streamer = { path = "../streamer", version = "=1.14.2" } -solana-version = { path = "../version", version = "=1.14.2" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.2" } +solana-bloom = { path = "../bloom", version = "=1.14.3" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.3" } +solana-client = { path = "../client", version = "=1.14.3" } +solana-entry = { path = "../entry", version = "=1.14.3" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.3" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.3" } +solana-ledger = { path = "../ledger", version = "=1.14.3" } +solana-logger = { path = "../logger", version = "=1.14.3" } +solana-measure = { path = "../measure", version = "=1.14.3" } +solana-metrics = { path = "../metrics", version = "=1.14.3" } +solana-net-utils = { path = "../net-utils", version = "=1.14.3" } +solana-perf = { path = "../perf", version = "=1.14.3" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.3" } +solana-runtime = { path = "../runtime", version = "=1.14.3" } +solana-sdk = { path = "../sdk", version = "=1.14.3" } +solana-streamer = { path = "../streamer", version = "=1.14.3" } +solana-version = { path = "../version", version = "=1.14.3" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.3" } thiserror = "1.0" [dev-dependencies] diff --git a/install/Cargo.toml b/install/Cargo.toml index 775bcaf1b422c5..2b726449c3e1ad 100644 --- a/install/Cargo.toml +++ b/install/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-install" description = "The solana cluster software installer" -version = "1.14.2" +version = "1.14.3" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -26,12 +26,12 @@ reqwest = { version = "0.11.11", default-features = false, features = ["blocking semver = "1.0.10" serde = { version = "1.0.138", features = ["derive"] } serde_yaml = "0.8.26" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.2" } -solana-client = { path = "../client", version = "=1.14.2" } -solana-config-program = { path = "../programs/config", version = "=1.14.2" } -solana-logger = { path = "../logger", version = "=1.14.2" } -solana-sdk = { path = "../sdk", version = "=1.14.2" } -solana-version = { path = "../version", version = "=1.14.2" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.3" } +solana-client = { path = "../client", version = "=1.14.3" } +solana-config-program = { path = "../programs/config", version = "=1.14.3" } +solana-logger = { path = "../logger", version = "=1.14.3" } +solana-sdk = { path = "../sdk", version = "=1.14.3" } +solana-version = { path = "../version", version = "=1.14.3" } tar = "0.4.38" tempfile = "3.3.0" url = "2.2.2" diff --git a/keygen/Cargo.toml b/keygen/Cargo.toml index 2ead149699fe5a..3ac6106eb9d6f7 100644 --- a/keygen/Cargo.toml +++ b/keygen/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-keygen" -version = "1.14.2" +version = "1.14.3" description = "Solana key generation utility" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,11 +14,11 @@ bs58 = "0.4.0" clap = { version = "3.1.5", features = ["cargo"] } dirs-next = "2.0.0" num_cpus = "1.13.1" -solana-clap-v3-utils = { path = "../clap-v3-utils", version = "=1.14.2" } -solana-cli-config = { path = "../cli-config", version = "=1.14.2" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.2" } -solana-sdk = { path = "../sdk", version = "=1.14.2" } -solana-version = { path = "../version", version = "=1.14.2" } +solana-clap-v3-utils = { path = "../clap-v3-utils", version = "=1.14.3" } +solana-cli-config = { path = "../cli-config", version = "=1.14.3" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.3" } +solana-sdk = { path = "../sdk", version = "=1.14.3" } +solana-version = { path = "../version", version = "=1.14.3" } tiny-bip39 = "0.8.2" [[bin]] diff --git a/ledger-tool/Cargo.toml b/ledger-tool/Cargo.toml index 7a984bf6ad708b..b82b4e6f58f401 100644 --- a/ledger-tool/Cargo.toml +++ b/ledger-tool/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-ledger-tool" description = "Blockchain, Rebuilt for Scale" -version = "1.14.2" +version = "1.14.3" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -22,20 +22,20 @@ log = { version = "0.4.17" } regex = "1" serde = { version = "1.0", features = ["derive"] } serde_json = "1.0.81" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.2" } -solana-cli-output = { path = "../cli-output", version = "=1.14.2" } -solana-core = { path = "../core", version = "=1.14.2" } -solana-entry = { path = "../entry", version = "=1.14.2" } -solana-ledger = { path = "../ledger", version = "=1.14.2" } -solana-logger = { path = "../logger", version = "=1.14.2" } -solana-measure = { path = "../measure", version = "=1.14.2" } -solana-runtime = { path = "../runtime", version = "=1.14.2" } -solana-sdk = { path = "../sdk", version = "=1.14.2" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.2" } -solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.2" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.2" } -solana-version = { path = "../version", version = "=1.14.2" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.2" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.3" } +solana-cli-output = { path = "../cli-output", version = "=1.14.3" } +solana-core = { path = "../core", version = "=1.14.3" } +solana-entry = { path = "../entry", version = "=1.14.3" } +solana-ledger = { path = "../ledger", version = "=1.14.3" } +solana-logger = { path = "../logger", version = "=1.14.3" } +solana-measure = { path = "../measure", version = "=1.14.3" } +solana-runtime = { path = "../runtime", version = "=1.14.3" } +solana-sdk = { path = "../sdk", version = "=1.14.3" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.3" } +solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.3" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.3" } +solana-version = { path = "../version", version = "=1.14.3" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.3" } tokio = { version = "1", features = ["full"] } [target.'cfg(not(target_env = "msvc"))'.dependencies] diff --git a/ledger/Cargo.toml b/ledger/Cargo.toml index f3b5e187b7964f..fb1b1c1a7ab805 100644 --- a/ledger/Cargo.toml +++ b/ledger/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-ledger" -version = "1.14.2" +version = "1.14.3" description = "Solana ledger" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -34,23 +34,23 @@ reed-solomon-erasure = { version = "5.0.3", features = ["simd-accel"] } serde = "1.0.138" serde_bytes = "0.11.6" sha2 = "0.10.2" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.2" } -solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.2" } -solana-entry = { path = "../entry", version = "=1.14.2" } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.2" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.2" } -solana-measure = { path = "../measure", version = "=1.14.2" } -solana-metrics = { path = "../metrics", version = "=1.14.2" } -solana-perf = { path = "../perf", version = "=1.14.2" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.2" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.2" } -solana-runtime = { path = "../runtime", version = "=1.14.2" } -solana-sdk = { path = "../sdk", version = "=1.14.2" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.2" } -solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.2" } -solana-storage-proto = { path = "../storage-proto", version = "=1.14.2" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.2" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.2" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.3" } +solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.3" } +solana-entry = { path = "../entry", version = "=1.14.3" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.3" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.3" } +solana-measure = { path = "../measure", version = "=1.14.3" } +solana-metrics = { path = "../metrics", version = "=1.14.3" } +solana-perf = { path = "../perf", version = "=1.14.3" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.3" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.3" } +solana-runtime = { path = "../runtime", version = "=1.14.3" } +solana-sdk = { path = "../sdk", version = "=1.14.3" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.3" } +solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.3" } +solana-storage-proto = { path = "../storage-proto", version = "=1.14.3" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.3" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.3" } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } spl-token-2022 = { version = "=0.4.2", features = ["no-entrypoint"] } static_assertions = "1.1.0" @@ -71,8 +71,8 @@ features = ["lz4"] assert_matches = "1.5.0" bs58 = "0.4.0" matches = "0.1.9" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.2" } -solana-logger = { path = "../logger", version = "=1.14.2" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.3" } +solana-logger = { path = "../logger", version = "=1.14.3" } test-case = "2.1.0" [build-dependencies] diff --git a/local-cluster/Cargo.toml b/local-cluster/Cargo.toml index 06b046bf98dca2..3ad6c45531843d 100644 --- a/local-cluster/Cargo.toml +++ b/local-cluster/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-local-cluster" description = "Blockchain, Rebuilt for Scale" -version = "1.14.2" +version = "1.14.3" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -16,25 +16,25 @@ itertools = "0.10.3" log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" -solana-client = { path = "../client", version = "=1.14.2" } -solana-config-program = { path = "../programs/config", version = "=1.14.2" } -solana-core = { path = "../core", version = "=1.14.2" } -solana-entry = { path = "../entry", version = "=1.14.2" } -solana-gossip = { path = "../gossip", version = "=1.14.2" } -solana-ledger = { path = "../ledger", version = "=1.14.2" } -solana-runtime = { path = "../runtime", version = "=1.14.2" } -solana-sdk = { path = "../sdk", version = "=1.14.2" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.2" } -solana-streamer = { path = "../streamer", version = "=1.14.2" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.2" } +solana-client = { path = "../client", version = "=1.14.3" } +solana-config-program = { path = "../programs/config", version = "=1.14.3" } +solana-core = { path = "../core", version = "=1.14.3" } +solana-entry = { path = "../entry", version = "=1.14.3" } +solana-gossip = { path = "../gossip", version = "=1.14.3" } +solana-ledger = { path = "../ledger", version = "=1.14.3" } +solana-runtime = { path = "../runtime", version = "=1.14.3" } +solana-sdk = { path = "../sdk", version = "=1.14.3" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.3" } +solana-streamer = { path = "../streamer", version = "=1.14.3" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.3" } tempfile = "3.3.0" [dev-dependencies] assert_matches = "1.5.0" gag = "1.0.0" serial_test = "0.8.0" -solana-download-utils = { path = "../download-utils", version = "=1.14.2" } -solana-logger = { path = "../logger", version = "=1.14.2" } +solana-download-utils = { path = "../download-utils", version = "=1.14.3" } +solana-logger = { path = "../logger", version = "=1.14.3" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/log-analyzer/Cargo.toml b/log-analyzer/Cargo.toml index 9ba092b71e646b..ded944ce5ef917 100644 --- a/log-analyzer/Cargo.toml +++ b/log-analyzer/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-log-analyzer" description = "The solana cluster network analysis tool" -version = "1.14.2" +version = "1.14.3" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,8 +14,8 @@ byte-unit = "4.0.14" clap = { version = "3.1.5", features = ["cargo"] } serde = "1.0.138" serde_json = "1.0.81" -solana-logger = { path = "../logger", version = "=1.14.2" } -solana-version = { path = "../version", version = "=1.14.2" } +solana-logger = { path = "../logger", version = "=1.14.3" } +solana-version = { path = "../version", version = "=1.14.3" } [[bin]] name = "solana-log-analyzer" diff --git a/logger/Cargo.toml b/logger/Cargo.toml index 1d47b526ede62f..14c5e1d2995fe6 100644 --- a/logger/Cargo.toml +++ b/logger/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-logger" -version = "1.14.2" +version = "1.14.3" description = "Solana Logger" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/measure/Cargo.toml b/measure/Cargo.toml index 51675674aa6d47..2df2abb1297074 100644 --- a/measure/Cargo.toml +++ b/measure/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "solana-measure" description = "Blockchain, Rebuilt for Scale" -version = "1.14.2" +version = "1.14.3" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-measure" readme = "../README.md" @@ -12,7 +12,7 @@ edition = "2021" [dependencies] log = "0.4.17" -solana-sdk = { path = "../sdk", version = "=1.14.2" } +solana-sdk = { path = "../sdk", version = "=1.14.3" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/merkle-root-bench/Cargo.toml b/merkle-root-bench/Cargo.toml index 516b8dd4981c90..704b562c041b4b 100644 --- a/merkle-root-bench/Cargo.toml +++ b/merkle-root-bench/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-merkle-root-bench" -version = "1.14.2" +version = "1.14.3" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -11,11 +11,11 @@ publish = false [dependencies] clap = "2.33.1" log = "0.4.17" -solana-logger = { path = "../logger", version = "=1.14.2" } -solana-measure = { path = "../measure", version = "=1.14.2" } -solana-runtime = { path = "../runtime", version = "=1.14.2" } -solana-sdk = { path = "../sdk", version = "=1.14.2" } -solana-version = { path = "../version", version = "=1.14.2" } +solana-logger = { path = "../logger", version = "=1.14.3" } +solana-measure = { path = "../measure", version = "=1.14.3" } +solana-runtime = { path = "../runtime", version = "=1.14.3" } +solana-sdk = { path = "../sdk", version = "=1.14.3" } +solana-version = { path = "../version", version = "=1.14.3" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/merkle-tree/Cargo.toml b/merkle-tree/Cargo.toml index 1b05eca9e6c25b..1fae248f0c9531 100644 --- a/merkle-tree/Cargo.toml +++ b/merkle-tree/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-merkle-tree" -version = "1.14.2" +version = "1.14.3" description = "Solana Merkle Tree" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -11,7 +11,7 @@ edition = "2021" [dependencies] fast-math = "0.1" -solana-program = { path = "../sdk/program", version = "=1.14.2" } +solana-program = { path = "../sdk/program", version = "=1.14.3" } # This can go once the BPF toolchain target Rust 1.42.0+ [target.bpfel-unknown-unknown.dependencies] diff --git a/metrics/Cargo.toml b/metrics/Cargo.toml index 68644c145ec9f3..2d5820601597c6 100644 --- a/metrics/Cargo.toml +++ b/metrics/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-metrics" -version = "1.14.2" +version = "1.14.3" description = "Solana Metrics" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -15,7 +15,7 @@ gethostname = "0.2.3" lazy_static = "1.4.0" log = "0.4.17" reqwest = { version = "0.11.11", default-features = false, features = ["blocking", "brotli", "deflate", "gzip", "rustls-tls", "json"] } -solana-sdk = { path = "../sdk", version = "=1.14.2" } +solana-sdk = { path = "../sdk", version = "=1.14.3" } [dev-dependencies] env_logger = "0.9.0" diff --git a/net-shaper/Cargo.toml b/net-shaper/Cargo.toml index e3747700e6f77c..4a49c83d73ed8c 100644 --- a/net-shaper/Cargo.toml +++ b/net-shaper/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-net-shaper" description = "The solana cluster network shaping tool" -version = "1.14.2" +version = "1.14.3" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,7 +14,7 @@ clap = { version = "3.1.5", features = ["cargo"] } rand = "0.7.0" serde = { version = "1.0.138", features = ["derive"] } serde_json = "1.0.81" -solana-logger = { path = "../logger", version = "=1.14.2" } +solana-logger = { path = "../logger", version = "=1.14.3" } [[bin]] name = "solana-net-shaper" diff --git a/net-utils/Cargo.toml b/net-utils/Cargo.toml index 90ccb1b37ebed8..d78a1476739717 100644 --- a/net-utils/Cargo.toml +++ b/net-utils/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-net-utils" -version = "1.14.2" +version = "1.14.3" description = "Solana Network Utilities" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -19,9 +19,9 @@ rand = "0.7.0" serde = "1.0.138" serde_derive = "1.0.103" socket2 = "0.4.4" -solana-logger = { path = "../logger", version = "=1.14.2" } -solana-sdk = { path = "../sdk", version = "=1.14.2" } -solana-version = { path = "../version", version = "=1.14.2" } +solana-logger = { path = "../logger", version = "=1.14.3" } +solana-sdk = { path = "../sdk", version = "=1.14.3" } +solana-version = { path = "../version", version = "=1.14.3" } tokio = { version = "1", features = ["full"] } url = "2.2.2" diff --git a/notifier/Cargo.toml b/notifier/Cargo.toml index 92af7322d44305..0fcfada45382a5 100644 --- a/notifier/Cargo.toml +++ b/notifier/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-notifier" -version = "1.14.2" +version = "1.14.3" description = "Solana Notifier" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/perf/Cargo.toml b/perf/Cargo.toml index 61c8b365732dbb..50cc486013d7a5 100644 --- a/perf/Cargo.toml +++ b/perf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-perf" -version = "1.14.2" +version = "1.14.3" description = "Solana Performance APIs" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -22,10 +22,10 @@ log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" serde = "1.0.138" -solana-metrics = { path = "../metrics", version = "=1.14.2" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.2" } -solana-sdk = { path = "../sdk", version = "=1.14.2" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.2" } +solana-metrics = { path = "../metrics", version = "=1.14.3" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.3" } +solana-sdk = { path = "../sdk", version = "=1.14.3" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.3" } [target."cfg(target_os = \"linux\")".dependencies] caps = "0.5.3" @@ -37,7 +37,7 @@ name = "solana_perf" [dev-dependencies] matches = "0.1.9" -solana-logger = { path = "../logger", version = "=1.14.2" } +solana-logger = { path = "../logger", version = "=1.14.3" } [[bench]] name = "sigverify" diff --git a/poh-bench/Cargo.toml b/poh-bench/Cargo.toml index d53ee30e4b92ab..7875264e41d78c 100644 --- a/poh-bench/Cargo.toml +++ b/poh-bench/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-poh-bench" -version = "1.14.2" +version = "1.14.3" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,12 +14,12 @@ clap = { version = "3.1.5", features = ["cargo"] } log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" -solana-entry = { path = "../entry", version = "=1.14.2" } -solana-logger = { path = "../logger", version = "=1.14.2" } -solana-measure = { path = "../measure", version = "=1.14.2" } -solana-perf = { path = "../perf", version = "=1.14.2" } -solana-sdk = { path = "../sdk", version = "=1.14.2" } -solana-version = { path = "../version", version = "=1.14.2" } +solana-entry = { path = "../entry", version = "=1.14.3" } +solana-logger = { path = "../logger", version = "=1.14.3" } +solana-measure = { path = "../measure", version = "=1.14.3" } +solana-perf = { path = "../perf", version = "=1.14.3" } +solana-sdk = { path = "../sdk", version = "=1.14.3" } +solana-version = { path = "../version", version = "=1.14.3" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/poh/Cargo.toml b/poh/Cargo.toml index 63471157211105..fccc28486109d6 100644 --- a/poh/Cargo.toml +++ b/poh/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-poh" -version = "1.14.2" +version = "1.14.3" description = "Solana PoH" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,21 +13,21 @@ edition = "2021" core_affinity = "0.5.10" crossbeam-channel = "0.5" log = "0.4.17" -solana-entry = { path = "../entry", version = "=1.14.2" } -solana-ledger = { path = "../ledger", version = "=1.14.2" } -solana-measure = { path = "../measure", version = "=1.14.2" } -solana-metrics = { path = "../metrics", version = "=1.14.2" } -solana-runtime = { path = "../runtime", version = "=1.14.2" } -solana-sdk = { path = "../sdk", version = "=1.14.2" } -solana-sys-tuner = { path = "../sys-tuner", version = "=1.14.2" } +solana-entry = { path = "../entry", version = "=1.14.3" } +solana-ledger = { path = "../ledger", version = "=1.14.3" } +solana-measure = { path = "../measure", version = "=1.14.3" } +solana-metrics = { path = "../metrics", version = "=1.14.3" } +solana-runtime = { path = "../runtime", version = "=1.14.3" } +solana-sdk = { path = "../sdk", version = "=1.14.3" } +solana-sys-tuner = { path = "../sys-tuner", version = "=1.14.3" } thiserror = "1.0" [dev-dependencies] bincode = "1.3.3" matches = "0.1.9" rand = "0.7.0" -solana-logger = { path = "../logger", version = "=1.14.2" } -solana-perf = { path = "../perf", version = "=1.14.2" } +solana-logger = { path = "../logger", version = "=1.14.3" } +solana-perf = { path = "../perf", version = "=1.14.3" } [lib] crate-type = ["lib"] diff --git a/program-runtime/Cargo.toml b/program-runtime/Cargo.toml index d44908e55a9d92..689474df7fc52b 100644 --- a/program-runtime/Cargo.toml +++ b/program-runtime/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-program-runtime" -version = "1.14.2" +version = "1.14.3" description = "Solana program runtime" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -20,16 +20,16 @@ log = "0.4.14" num-derive = { version = "0.3" } num-traits = { version = "0.2" } serde = { version = "1.0.129", features = ["derive", "rc"] } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.2" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.2" } -solana-measure = { path = "../measure", version = "=1.14.2" } -solana-metrics = { path = "../metrics", version = "=1.14.2" } -solana-sdk = { path = "../sdk", version = "=1.14.2" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.3" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.3" } +solana-measure = { path = "../measure", version = "=1.14.3" } +solana-metrics = { path = "../metrics", version = "=1.14.3" } +solana-sdk = { path = "../sdk", version = "=1.14.3" } thiserror = "1.0" enum-iterator = "0.8.1" [dev-dependencies] -solana-logger = { path = "../logger", version = "=1.14.2" } +solana-logger = { path = "../logger", version = "=1.14.3" } [lib] crate-type = ["lib"] diff --git a/program-test/Cargo.toml b/program-test/Cargo.toml index 6885f5b1680c8f..22229a5472a457 100644 --- a/program-test/Cargo.toml +++ b/program-test/Cargo.toml @@ -5,7 +5,7 @@ edition = "2021" license = "Apache-2.0" name = "solana-program-test" repository = "https://github.com/solana-labs/solana" -version = "1.14.2" +version = "1.14.3" [dependencies] assert_matches = "1.5.0" @@ -15,13 +15,13 @@ bincode = "1.3.3" chrono-humanize = "0.2.1" log = "0.4.17" serde = "1.0.138" -solana-banks-client = { path = "../banks-client", version = "=1.14.2" } -solana-banks-server = { path = "../banks-server", version = "=1.14.2" } -solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.2" } -solana-logger = { path = "../logger", version = "=1.14.2" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.2" } -solana-runtime = { path = "../runtime", version = "=1.14.2" } -solana-sdk = { path = "../sdk", version = "=1.14.2" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.2" } +solana-banks-client = { path = "../banks-client", version = "=1.14.3" } +solana-banks-server = { path = "../banks-server", version = "=1.14.3" } +solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.3" } +solana-logger = { path = "../logger", version = "=1.14.3" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.3" } +solana-runtime = { path = "../runtime", version = "=1.14.3" } +solana-sdk = { path = "../sdk", version = "=1.14.3" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.3" } thiserror = "1.0" tokio = { version = "1", features = ["full"] } diff --git a/programs/address-lookup-table-tests/Cargo.toml b/programs/address-lookup-table-tests/Cargo.toml index 29168b31841aa2..42503f14735c39 100644 --- a/programs/address-lookup-table-tests/Cargo.toml +++ b/programs/address-lookup-table-tests/Cargo.toml @@ -3,7 +3,7 @@ [package] name = "solana-address-lookup-table-program-tests" -version = "1.14.2" +version = "1.14.3" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" @@ -14,9 +14,9 @@ publish = false [dev-dependencies] assert_matches = "1.5.0" bincode = "1.3.3" -solana-address-lookup-table-program = { path = "../address-lookup-table", version = "=1.14.2" } -solana-program-test = { path = "../../program-test", version = "=1.14.2" } -solana-sdk = { path = "../../sdk", version = "=1.14.2" } +solana-address-lookup-table-program = { path = "../address-lookup-table", version = "=1.14.3" } +solana-program-test = { path = "../../program-test", version = "=1.14.3" } +solana-sdk = { path = "../../sdk", version = "=1.14.3" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/address-lookup-table/Cargo.toml b/programs/address-lookup-table/Cargo.toml index bc98a0697c8455..fdc258b6b329bc 100644 --- a/programs/address-lookup-table/Cargo.toml +++ b/programs/address-lookup-table/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-address-lookup-table-program" -version = "1.14.2" +version = "1.14.3" description = "Solana address lookup table program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -16,14 +16,14 @@ log = "0.4.17" num-derive = "0.3" num-traits = "0.2" serde = { version = "1.0.138", features = ["derive"] } -solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.2" } -solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.2" } -solana-program = { path = "../../sdk/program", version = "=1.14.2" } +solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.3" } +solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.3" } +solana-program = { path = "../../sdk/program", version = "=1.14.3" } thiserror = "1.0" [target.'cfg(not(target_os = "solana"))'.dependencies] -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.2" } -solana-sdk = { path = "../../sdk", version = "=1.14.2" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.3" } +solana-sdk = { path = "../../sdk", version = "=1.14.3" } [build-dependencies] rustc_version = "0.4" diff --git a/programs/bpf-loader-tests/Cargo.toml b/programs/bpf-loader-tests/Cargo.toml index bd540def90802c..ebe958c79bc470 100644 --- a/programs/bpf-loader-tests/Cargo.toml +++ b/programs/bpf-loader-tests/Cargo.toml @@ -3,7 +3,7 @@ [package] name = "solana-bpf-loader-program-tests" -version = "1.14.2" +version = "1.14.3" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" @@ -14,9 +14,9 @@ publish = false [dev-dependencies] assert_matches = "1.5.0" bincode = "1.3.3" -solana-bpf-loader-program = { path = "../bpf_loader", version = "=1.14.2" } -solana-program-test = { path = "../../program-test", version = "=1.14.2" } -solana-sdk = { path = "../../sdk", version = "=1.14.2" } +solana-bpf-loader-program = { path = "../bpf_loader", version = "=1.14.3" } +solana-program-test = { path = "../../program-test", version = "=1.14.3" } +solana-sdk = { path = "../../sdk", version = "=1.14.3" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/bpf/Cargo.lock b/programs/bpf/Cargo.lock index 665380385266d4..25e64c33da0b93 100644 --- a/programs/bpf/Cargo.lock +++ b/programs/bpf/Cargo.lock @@ -4062,7 +4062,7 @@ dependencies = [ [[package]] name = "solana-account-decoder" -version = "1.14.2" +version = "1.14.3" dependencies = [ "Inflector", "base64 0.13.0", @@ -4074,7 +4074,7 @@ dependencies = [ "serde_derive", "serde_json", "solana-config-program", - "solana-sdk 1.14.2", + "solana-sdk 1.14.3", "solana-vote-program", "spl-token", "spl-token-2022", @@ -4084,7 +4084,7 @@ dependencies = [ [[package]] name = "solana-address-lookup-table-program" -version = "1.14.2" +version = "1.14.3" dependencies = [ "bincode", "bytemuck", @@ -4093,23 +4093,23 @@ dependencies = [ "num-traits", "rustc_version", "serde", - "solana-frozen-abi 1.14.2", - "solana-frozen-abi-macro 1.14.2", - "solana-program 1.14.2", + "solana-frozen-abi 1.14.3", + "solana-frozen-abi-macro 1.14.3", + "solana-program 1.14.3", "solana-program-runtime", - "solana-sdk 1.14.2", + "solana-sdk 1.14.3", "thiserror", ] [[package]] name = "solana-banks-client" -version = "1.14.2" +version = "1.14.3" dependencies = [ "borsh", "futures 0.3.21", "solana-banks-interface", - "solana-program 1.14.2", - "solana-sdk 1.14.2", + "solana-program 1.14.3", + "solana-sdk 1.14.3", "tarpc", "thiserror", "tokio", @@ -4118,16 +4118,16 @@ dependencies = [ [[package]] name = "solana-banks-interface" -version = "1.14.2" +version = "1.14.3" dependencies = [ "serde", - "solana-sdk 1.14.2", + "solana-sdk 1.14.3", "tarpc", ] [[package]] name = "solana-banks-server" -version = "1.14.2" +version = "1.14.3" dependencies = [ "bincode", "crossbeam-channel", @@ -4135,7 +4135,7 @@ dependencies = [ "solana-banks-interface", "solana-client", "solana-runtime", - "solana-sdk 1.14.2", + "solana-sdk 1.14.3", "solana-send-transaction-service", "tarpc", "tokio", @@ -4145,7 +4145,7 @@ dependencies = [ [[package]] name = "solana-bloom" -version = "1.14.2" +version = "1.14.3" dependencies = [ "bv", "fnv", @@ -4155,14 +4155,14 @@ dependencies = [ "rustc_version", "serde", "serde_derive", - "solana-frozen-abi 1.14.2", - "solana-frozen-abi-macro 1.14.2", - "solana-sdk 1.14.2", + "solana-frozen-abi 1.14.3", + "solana-frozen-abi-macro 1.14.3", + "solana-sdk 1.14.3", ] [[package]] name = "solana-bpf-loader-program" -version = "1.14.2" +version = "1.14.3" dependencies = [ "bincode", "byteorder 1.4.3", @@ -4171,15 +4171,15 @@ dependencies = [ "solana-measure", "solana-metrics", "solana-program-runtime", - "solana-sdk 1.14.2", - "solana-zk-token-sdk 1.14.2", + "solana-sdk 1.14.3", + "solana-zk-token-sdk 1.14.3", "solana_rbpf", "thiserror", ] [[package]] name = "solana-bpf-programs" -version = "1.14.2" +version = "1.14.3" dependencies = [ "bincode", "byteorder 1.4.3", @@ -4195,11 +4195,11 @@ dependencies = [ "solana-bpf-rust-realloc-invoke", "solana-cli-output", "solana-ledger", - "solana-logger 1.14.2", + "solana-logger 1.14.3", "solana-measure", "solana-program-runtime", "solana-runtime", - "solana-sdk 1.14.2", + "solana-sdk 1.14.3", "solana-transaction-status", "solana_rbpf", "walkdir", @@ -4207,385 +4207,385 @@ dependencies = [ [[package]] name = "solana-bpf-rust-128bit" -version = "1.14.2" +version = "1.14.3" dependencies = [ "solana-bpf-rust-128bit-dep", - "solana-program 1.14.2", + "solana-program 1.14.3", ] [[package]] name = "solana-bpf-rust-128bit-dep" -version = "1.14.2" +version = "1.14.3" dependencies = [ - "solana-program 1.14.2", + "solana-program 1.14.3", ] [[package]] name = "solana-bpf-rust-alloc" -version = "1.14.2" +version = "1.14.3" dependencies = [ - "solana-program 1.14.2", + "solana-program 1.14.3", ] [[package]] name = "solana-bpf-rust-call-depth" -version = "1.14.2" +version = "1.14.3" dependencies = [ - "solana-program 1.14.2", + "solana-program 1.14.3", ] [[package]] name = "solana-bpf-rust-caller-access" -version = "1.14.2" +version = "1.14.3" dependencies = [ - "solana-program 1.14.2", + "solana-program 1.14.3", ] [[package]] name = "solana-bpf-rust-curve25519" -version = "1.14.2" +version = "1.14.3" dependencies = [ - "solana-program 1.14.2", - "solana-zk-token-sdk 1.14.2", + "solana-program 1.14.3", + "solana-zk-token-sdk 1.14.3", ] [[package]] name = "solana-bpf-rust-custom-heap" -version = "1.14.2" +version = "1.14.3" dependencies = [ - "solana-program 1.14.2", + "solana-program 1.14.3", ] [[package]] name = "solana-bpf-rust-dep-crate" -version = "1.14.2" +version = "1.14.3" dependencies = [ "byteorder 1.4.3", "solana-address-lookup-table-program", - "solana-program 1.14.2", + "solana-program 1.14.3", ] [[package]] name = "solana-bpf-rust-deprecated-loader" -version = "1.14.2" +version = "1.14.3" dependencies = [ - "solana-program 1.14.2", + "solana-program 1.14.3", ] [[package]] name = "solana-bpf-rust-dup-accounts" -version = "1.14.2" +version = "1.14.3" dependencies = [ - "solana-program 1.14.2", + "solana-program 1.14.3", ] [[package]] name = "solana-bpf-rust-error-handling" -version = "1.14.2" +version = "1.14.3" dependencies = [ "num-derive", "num-traits", - "solana-program 1.14.2", + "solana-program 1.14.3", "thiserror", ] [[package]] name = "solana-bpf-rust-external-spend" -version = "1.14.2" +version = "1.14.3" dependencies = [ - "solana-program 1.14.2", + "solana-program 1.14.3", ] [[package]] name = "solana-bpf-rust-finalize" -version = "1.14.2" +version = "1.14.3" dependencies = [ - "solana-program 1.14.2", + "solana-program 1.14.3", ] [[package]] name = "solana-bpf-rust-get-minimum-delegation" -version = "1.14.2" +version = "1.14.3" dependencies = [ - "solana-program 1.14.2", + "solana-program 1.14.3", ] [[package]] name = "solana-bpf-rust-inner_instruction_alignment_check" -version = "1.14.2" +version = "1.14.3" dependencies = [ - "solana-program 1.14.2", + "solana-program 1.14.3", ] [[package]] name = "solana-bpf-rust-instruction-introspection" -version = "1.14.2" +version = "1.14.3" dependencies = [ - "solana-program 1.14.2", + "solana-program 1.14.3", ] [[package]] name = "solana-bpf-rust-invoke" -version = "1.14.2" +version = "1.14.3" dependencies = [ "solana-bpf-rust-invoked", - "solana-program 1.14.2", + "solana-program 1.14.3", ] [[package]] name = "solana-bpf-rust-invoke-and-error" -version = "1.14.2" +version = "1.14.3" dependencies = [ - "solana-program 1.14.2", + "solana-program 1.14.3", ] [[package]] name = "solana-bpf-rust-invoke-and-ok" -version = "1.14.2" +version = "1.14.3" dependencies = [ - "solana-program 1.14.2", + "solana-program 1.14.3", ] [[package]] name = "solana-bpf-rust-invoke-and-return" -version = "1.14.2" +version = "1.14.3" dependencies = [ - "solana-program 1.14.2", + "solana-program 1.14.3", ] [[package]] name = "solana-bpf-rust-invoked" -version = "1.14.2" +version = "1.14.3" dependencies = [ - "solana-program 1.14.2", + "solana-program 1.14.3", ] [[package]] name = "solana-bpf-rust-iter" -version = "1.14.2" +version = "1.14.3" dependencies = [ - "solana-program 1.14.2", + "solana-program 1.14.3", ] [[package]] name = "solana-bpf-rust-log-data" -version = "1.14.2" +version = "1.14.3" dependencies = [ - "solana-program 1.14.2", + "solana-program 1.14.3", ] [[package]] name = "solana-bpf-rust-many-args" -version = "1.14.2" +version = "1.14.3" dependencies = [ "solana-bpf-rust-many-args-dep", - "solana-program 1.14.2", + "solana-program 1.14.3", ] [[package]] name = "solana-bpf-rust-many-args-dep" -version = "1.14.2" +version = "1.14.3" dependencies = [ - "solana-program 1.14.2", + "solana-program 1.14.3", ] [[package]] name = "solana-bpf-rust-mem" -version = "1.14.2" +version = "1.14.3" dependencies = [ - "solana-program 1.14.2", + "solana-program 1.14.3", "solana-program-runtime", "solana-program-test", - "solana-sdk 1.14.2", + "solana-sdk 1.14.3", ] [[package]] name = "solana-bpf-rust-membuiltins" -version = "1.14.2" +version = "1.14.3" dependencies = [ "solana-bpf-rust-mem", - "solana-program 1.14.2", + "solana-program 1.14.3", ] [[package]] name = "solana-bpf-rust-noop" -version = "1.14.2" +version = "1.14.3" dependencies = [ - "solana-program 1.14.2", + "solana-program 1.14.3", ] [[package]] name = "solana-bpf-rust-panic" -version = "1.14.2" +version = "1.14.3" dependencies = [ - "solana-program 1.14.2", + "solana-program 1.14.3", ] [[package]] name = "solana-bpf-rust-param-passing" -version = "1.14.2" +version = "1.14.3" dependencies = [ "solana-bpf-rust-param-passing-dep", - "solana-program 1.14.2", + "solana-program 1.14.3", ] [[package]] name = "solana-bpf-rust-param-passing-dep" -version = "1.14.2" +version = "1.14.3" dependencies = [ - "solana-program 1.14.2", + "solana-program 1.14.3", ] [[package]] name = "solana-bpf-rust-rand" -version = "1.14.2" +version = "1.14.3" dependencies = [ "getrandom 0.1.14", "rand 0.7.3", - "solana-program 1.14.2", + "solana-program 1.14.3", ] [[package]] name = "solana-bpf-rust-realloc" -version = "1.14.2" +version = "1.14.3" dependencies = [ - "solana-program 1.14.2", + "solana-program 1.14.3", ] [[package]] name = "solana-bpf-rust-realloc-invoke" -version = "1.14.2" +version = "1.14.3" dependencies = [ "solana-bpf-rust-realloc", - "solana-program 1.14.2", + "solana-program 1.14.3", ] [[package]] name = "solana-bpf-rust-ro-account_modify" -version = "1.14.2" +version = "1.14.3" dependencies = [ - "solana-program 1.14.2", + "solana-program 1.14.3", ] [[package]] name = "solana-bpf-rust-ro-modify" -version = "1.14.2" +version = "1.14.3" dependencies = [ - "solana-program 1.14.2", + "solana-program 1.14.3", ] [[package]] name = "solana-bpf-rust-sanity" -version = "1.14.2" +version = "1.14.3" dependencies = [ - "solana-program 1.14.2", + "solana-program 1.14.3", "solana-program-runtime", "solana-program-test", - "solana-sdk 1.14.2", + "solana-sdk 1.14.3", ] [[package]] name = "solana-bpf-rust-secp256k1-recover" -version = "1.14.2" +version = "1.14.3" dependencies = [ "libsecp256k1 0.7.0", - "solana-program 1.14.2", + "solana-program 1.14.3", ] [[package]] name = "solana-bpf-rust-sha" -version = "1.14.2" +version = "1.14.3" dependencies = [ "blake3", - "solana-program 1.14.2", + "solana-program 1.14.3", ] [[package]] name = "solana-bpf-rust-sibling-instructions" -version = "1.14.2" +version = "1.14.3" dependencies = [ - "solana-program 1.14.2", + "solana-program 1.14.3", ] [[package]] name = "solana-bpf-rust-sibling_inner-instructions" -version = "1.14.2" +version = "1.14.3" dependencies = [ - "solana-program 1.14.2", + "solana-program 1.14.3", ] [[package]] name = "solana-bpf-rust-simulation" -version = "1.14.2" +version = "1.14.3" dependencies = [ - "solana-logger 1.14.2", - "solana-program 1.14.2", + "solana-logger 1.14.3", + "solana-program 1.14.3", "solana-program-test", - "solana-sdk 1.14.2", + "solana-sdk 1.14.3", "solana-validator", ] [[package]] name = "solana-bpf-rust-spoof1" -version = "1.14.2" +version = "1.14.3" dependencies = [ - "solana-program 1.14.2", + "solana-program 1.14.3", ] [[package]] name = "solana-bpf-rust-spoof1-system" -version = "1.14.2" +version = "1.14.3" dependencies = [ - "solana-program 1.14.2", + "solana-program 1.14.3", ] [[package]] name = "solana-bpf-rust-sysvar" -version = "1.14.2" +version = "1.14.3" dependencies = [ - "solana-program 1.14.2", + "solana-program 1.14.3", "solana-program-runtime", "solana-program-test", - "solana-sdk 1.14.2", + "solana-sdk 1.14.3", ] [[package]] name = "solana-bpf-rust-upgradeable" -version = "1.14.2" +version = "1.14.3" dependencies = [ - "solana-program 1.14.2", + "solana-program 1.14.3", ] [[package]] name = "solana-bpf-rust-upgraded" -version = "1.14.2" +version = "1.14.3" dependencies = [ - "solana-program 1.14.2", + "solana-program 1.14.3", ] [[package]] name = "solana-bucket-map" -version = "1.14.2" +version = "1.14.3" dependencies = [ "log", "memmap2", "modular-bitfield", "rand 0.7.3", "solana-measure", - "solana-sdk 1.14.2", + "solana-sdk 1.14.3", "tempfile", ] [[package]] name = "solana-clap-utils" -version = "1.14.2" +version = "1.14.3" dependencies = [ "chrono", "clap 2.33.3", "rpassword", "solana-perf", "solana-remote-wallet", - "solana-sdk 1.14.2", + "solana-sdk 1.14.3", "thiserror", "tiny-bip39", "uriparse", @@ -4594,7 +4594,7 @@ dependencies = [ [[package]] name = "solana-cli-config" -version = "1.14.2" +version = "1.14.3" dependencies = [ "dirs-next", "lazy_static", @@ -4602,13 +4602,13 @@ dependencies = [ "serde_derive", "serde_yaml", "solana-clap-utils", - "solana-sdk 1.14.2", + "solana-sdk 1.14.3", "url 2.2.2", ] [[package]] name = "solana-cli-output" -version = "1.14.2" +version = "1.14.3" dependencies = [ "Inflector", "base64 0.13.0", @@ -4625,7 +4625,7 @@ dependencies = [ "solana-clap-utils", "solana-cli-config", "solana-client", - "solana-sdk 1.14.2", + "solana-sdk 1.14.3", "solana-transaction-status", "solana-vote-program", "spl-memo", @@ -4633,7 +4633,7 @@ dependencies = [ [[package]] name = "solana-client" -version = "1.14.2" +version = "1.14.3" dependencies = [ "async-mutex", "async-trait", @@ -4669,7 +4669,7 @@ dependencies = [ "solana-measure", "solana-metrics", "solana-net-utils", - "solana-sdk 1.14.2", + "solana-sdk 1.14.3", "solana-streamer", "solana-transaction-status", "solana-version", @@ -4685,27 +4685,27 @@ dependencies = [ [[package]] name = "solana-compute-budget-program" -version = "1.14.2" +version = "1.14.3" dependencies = [ "solana-program-runtime", - "solana-sdk 1.14.2", + "solana-sdk 1.14.3", ] [[package]] name = "solana-config-program" -version = "1.14.2" +version = "1.14.3" dependencies = [ "bincode", "chrono", "serde", "serde_derive", "solana-program-runtime", - "solana-sdk 1.14.2", + "solana-sdk 1.14.3", ] [[package]] name = "solana-core" -version = "1.14.2" +version = "1.14.3" dependencies = [ "ahash", "base64 0.13.0", @@ -4733,8 +4733,8 @@ dependencies = [ "solana-bloom", "solana-client", "solana-entry", - "solana-frozen-abi 1.14.2", - "solana-frozen-abi-macro 1.14.2", + "solana-frozen-abi 1.14.3", + "solana-frozen-abi-macro 1.14.3", "solana-geyser-plugin-manager", "solana-gossip", "solana-ledger", @@ -4747,7 +4747,7 @@ dependencies = [ "solana-rayon-threadlimit", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.2", + "solana-sdk 1.14.3", "solana-send-transaction-service", "solana-streamer", "solana-transaction-status", @@ -4763,19 +4763,19 @@ dependencies = [ [[package]] name = "solana-download-utils" -version = "1.14.2" +version = "1.14.3" dependencies = [ "console", "indicatif", "log", "reqwest", "solana-runtime", - "solana-sdk 1.14.2", + "solana-sdk 1.14.3", ] [[package]] name = "solana-entry" -version = "1.14.2" +version = "1.14.3" dependencies = [ "bincode", "crossbeam-channel", @@ -4791,12 +4791,12 @@ dependencies = [ "solana-metrics", "solana-perf", "solana-rayon-threadlimit", - "solana-sdk 1.14.2", + "solana-sdk 1.14.3", ] [[package]] name = "solana-faucet" -version = "1.14.2" +version = "1.14.3" dependencies = [ "bincode", "byteorder 1.4.3", @@ -4807,9 +4807,9 @@ dependencies = [ "serde_derive", "solana-clap-utils", "solana-cli-config", - "solana-logger 1.14.2", + "solana-logger 1.14.3", "solana-metrics", - "solana-sdk 1.14.2", + "solana-sdk 1.14.3", "solana-version", "spl-memo", "thiserror", @@ -4840,7 +4840,7 @@ dependencies = [ [[package]] name = "solana-frozen-abi" -version = "1.14.2" +version = "1.14.3" dependencies = [ "ahash", "blake3", @@ -4865,7 +4865,7 @@ dependencies = [ "serde_derive", "serde_json", "sha2 0.10.2", - "solana-frozen-abi-macro 1.14.2", + "solana-frozen-abi-macro 1.14.3", "subtle", "thiserror", ] @@ -4884,7 +4884,7 @@ dependencies = [ [[package]] name = "solana-frozen-abi-macro" -version = "1.14.2" +version = "1.14.3" dependencies = [ "proc-macro2 1.0.41", "quote 1.0.18", @@ -4894,26 +4894,26 @@ dependencies = [ [[package]] name = "solana-genesis-utils" -version = "1.14.2" +version = "1.14.3" dependencies = [ "solana-download-utils", "solana-runtime", - "solana-sdk 1.14.2", + "solana-sdk 1.14.3", ] [[package]] name = "solana-geyser-plugin-interface" -version = "1.14.2" +version = "1.14.3" dependencies = [ "log", - "solana-sdk 1.14.2", + "solana-sdk 1.14.3", "solana-transaction-status", "thiserror", ] [[package]] name = "solana-geyser-plugin-manager" -version = "1.14.2" +version = "1.14.3" dependencies = [ "bs58", "crossbeam-channel", @@ -4926,14 +4926,14 @@ dependencies = [ "solana-metrics", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.2", + "solana-sdk 1.14.3", "solana-transaction-status", "thiserror", ] [[package]] name = "solana-gossip" -version = "1.14.2" +version = "1.14.3" dependencies = [ "bincode", "bv", @@ -4957,17 +4957,17 @@ dependencies = [ "solana-clap-utils", "solana-client", "solana-entry", - "solana-frozen-abi 1.14.2", - "solana-frozen-abi-macro 1.14.2", + "solana-frozen-abi 1.14.3", + "solana-frozen-abi-macro 1.14.3", "solana-ledger", - "solana-logger 1.14.2", + "solana-logger 1.14.3", "solana-measure", "solana-metrics", "solana-net-utils", "solana-perf", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.14.2", + "solana-sdk 1.14.3", "solana-streamer", "solana-version", "solana-vote-program", @@ -4976,7 +4976,7 @@ dependencies = [ [[package]] name = "solana-ledger" -version = "1.14.2" +version = "1.14.3" dependencies = [ "bincode", "bitflags", @@ -5007,15 +5007,15 @@ dependencies = [ "solana-account-decoder", "solana-bpf-loader-program", "solana-entry", - "solana-frozen-abi 1.14.2", - "solana-frozen-abi-macro 1.14.2", + "solana-frozen-abi 1.14.3", + "solana-frozen-abi-macro 1.14.3", "solana-measure", "solana-metrics", "solana-perf", "solana-program-runtime", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.14.2", + "solana-sdk 1.14.3", "solana-stake-program", "solana-storage-bigtable", "solana-storage-proto", @@ -5044,7 +5044,7 @@ dependencies = [ [[package]] name = "solana-logger" -version = "1.14.2" +version = "1.14.3" dependencies = [ "env_logger", "lazy_static", @@ -5053,36 +5053,36 @@ dependencies = [ [[package]] name = "solana-measure" -version = "1.14.2" +version = "1.14.3" dependencies = [ "log", - "solana-sdk 1.14.2", + "solana-sdk 1.14.3", ] [[package]] name = "solana-merkle-tree" -version = "1.14.2" +version = "1.14.3" dependencies = [ "fast-math", "matches", - "solana-program 1.14.2", + "solana-program 1.14.3", ] [[package]] name = "solana-metrics" -version = "1.14.2" +version = "1.14.3" dependencies = [ "crossbeam-channel", "gethostname", "lazy_static", "log", "reqwest", - "solana-sdk 1.14.2", + "solana-sdk 1.14.3", ] [[package]] name = "solana-net-utils" -version = "1.14.2" +version = "1.14.3" dependencies = [ "bincode", "clap 3.1.6", @@ -5093,8 +5093,8 @@ dependencies = [ "serde", "serde_derive", "socket2", - "solana-logger 1.14.2", - "solana-sdk 1.14.2", + "solana-logger 1.14.3", + "solana-sdk 1.14.3", "solana-version", "tokio", "url 2.2.2", @@ -5102,7 +5102,7 @@ dependencies = [ [[package]] name = "solana-perf" -version = "1.14.2" +version = "1.14.3" dependencies = [ "ahash", "bincode", @@ -5121,13 +5121,13 @@ dependencies = [ "serde", "solana-metrics", "solana-rayon-threadlimit", - "solana-sdk 1.14.2", + "solana-sdk 1.14.3", "solana-vote-program", ] [[package]] name = "solana-poh" -version = "1.14.2" +version = "1.14.3" dependencies = [ "core_affinity", "crossbeam-channel", @@ -5137,7 +5137,7 @@ dependencies = [ "solana-measure", "solana-metrics", "solana-runtime", - "solana-sdk 1.14.2", + "solana-sdk 1.14.3", "solana-sys-tuner", "thiserror", ] @@ -5186,7 +5186,7 @@ dependencies = [ [[package]] name = "solana-program" -version = "1.14.2" +version = "1.14.3" dependencies = [ "base64 0.13.0", "bincode", @@ -5222,9 +5222,9 @@ dependencies = [ "serde_json", "sha2 0.10.2", "sha3 0.10.1", - "solana-frozen-abi 1.14.2", - "solana-frozen-abi-macro 1.14.2", - "solana-sdk-macro 1.14.2", + "solana-frozen-abi 1.14.3", + "solana-frozen-abi-macro 1.14.3", + "solana-sdk-macro 1.14.3", "thiserror", "tiny-bip39", "wasm-bindgen", @@ -5233,7 +5233,7 @@ dependencies = [ [[package]] name = "solana-program-runtime" -version = "1.14.2" +version = "1.14.3" dependencies = [ "base64 0.13.0", "bincode", @@ -5247,17 +5247,17 @@ dependencies = [ "num-traits", "rustc_version", "serde", - "solana-frozen-abi 1.14.2", - "solana-frozen-abi-macro 1.14.2", + "solana-frozen-abi 1.14.3", + "solana-frozen-abi-macro 1.14.3", "solana-measure", "solana-metrics", - "solana-sdk 1.14.2", + "solana-sdk 1.14.3", "thiserror", ] [[package]] name = "solana-program-test" -version = "1.14.2" +version = "1.14.3" dependencies = [ "assert_matches", "async-trait", @@ -5269,10 +5269,10 @@ dependencies = [ "solana-banks-client", "solana-banks-server", "solana-bpf-loader-program", - "solana-logger 1.14.2", + "solana-logger 1.14.3", "solana-program-runtime", "solana-runtime", - "solana-sdk 1.14.2", + "solana-sdk 1.14.3", "solana-vote-program", "thiserror", "tokio", @@ -5280,7 +5280,7 @@ dependencies = [ [[package]] name = "solana-rayon-threadlimit" -version = "1.14.2" +version = "1.14.3" dependencies = [ "lazy_static", "num_cpus", @@ -5288,7 +5288,7 @@ dependencies = [ [[package]] name = "solana-remote-wallet" -version = "1.14.2" +version = "1.14.3" dependencies = [ "console", "dialoguer", @@ -5298,14 +5298,14 @@ dependencies = [ "parking_lot 0.12.1", "qstring", "semver", - "solana-sdk 1.14.2", + "solana-sdk 1.14.3", "thiserror", "uriparse", ] [[package]] name = "solana-rpc" -version = "1.14.2" +version = "1.14.3" dependencies = [ "base64 0.13.0", "bincode", @@ -5338,7 +5338,7 @@ dependencies = [ "solana-poh", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.14.2", + "solana-sdk 1.14.3", "solana-send-transaction-service", "solana-stake-program", "solana-storage-bigtable", @@ -5356,7 +5356,7 @@ dependencies = [ [[package]] name = "solana-runtime" -version = "1.14.2" +version = "1.14.3" dependencies = [ "arrayref", "bincode", @@ -5392,17 +5392,17 @@ dependencies = [ "solana-bucket-map", "solana-compute-budget-program", "solana-config-program", - "solana-frozen-abi 1.14.2", - "solana-frozen-abi-macro 1.14.2", + "solana-frozen-abi 1.14.3", + "solana-frozen-abi-macro 1.14.3", "solana-measure", "solana-metrics", "solana-program-runtime", "solana-rayon-threadlimit", - "solana-sdk 1.14.2", + "solana-sdk 1.14.3", "solana-stake-program", "solana-vote-program", "solana-zk-token-proof-program", - "solana-zk-token-sdk 1.14.2", + "solana-zk-token-sdk 1.14.3", "strum", "strum_macros", "symlink", @@ -5465,7 +5465,7 @@ dependencies = [ [[package]] name = "solana-sdk" -version = "1.14.2" +version = "1.14.3" dependencies = [ "assert_matches", "base64 0.13.0", @@ -5502,11 +5502,11 @@ dependencies = [ "serde_json", "sha2 0.10.2", "sha3 0.10.1", - "solana-frozen-abi 1.14.2", - "solana-frozen-abi-macro 1.14.2", - "solana-logger 1.14.2", - "solana-program 1.14.2", - "solana-sdk-macro 1.14.2", + "solana-frozen-abi 1.14.3", + "solana-frozen-abi-macro 1.14.3", + "solana-logger 1.14.3", + "solana-program 1.14.3", + "solana-sdk-macro 1.14.3", "thiserror", "uriparse", "wasm-bindgen", @@ -5527,7 +5527,7 @@ dependencies = [ [[package]] name = "solana-sdk-macro" -version = "1.14.2" +version = "1.14.3" dependencies = [ "bs58", "proc-macro2 1.0.41", @@ -5538,7 +5538,7 @@ dependencies = [ [[package]] name = "solana-send-transaction-service" -version = "1.14.2" +version = "1.14.3" dependencies = [ "crossbeam-channel", "log", @@ -5546,12 +5546,12 @@ dependencies = [ "solana-measure", "solana-metrics", "solana-runtime", - "solana-sdk 1.14.2", + "solana-sdk 1.14.3", ] [[package]] name = "solana-stake-program" -version = "1.14.2" +version = "1.14.3" dependencies = [ "bincode", "log", @@ -5561,18 +5561,18 @@ dependencies = [ "serde", "serde_derive", "solana-config-program", - "solana-frozen-abi 1.14.2", - "solana-frozen-abi-macro 1.14.2", + "solana-frozen-abi 1.14.3", + "solana-frozen-abi-macro 1.14.3", "solana-metrics", "solana-program-runtime", - "solana-sdk 1.14.2", + "solana-sdk 1.14.3", "solana-vote-program", "thiserror", ] [[package]] name = "solana-storage-bigtable" -version = "1.14.2" +version = "1.14.3" dependencies = [ "backoff", "bincode", @@ -5593,7 +5593,7 @@ dependencies = [ "serde_derive", "smpl_jwt", "solana-metrics", - "solana-sdk 1.14.2", + "solana-sdk 1.14.3", "solana-storage-proto", "solana-transaction-status", "thiserror", @@ -5604,7 +5604,7 @@ dependencies = [ [[package]] name = "solana-storage-proto" -version = "1.14.2" +version = "1.14.3" dependencies = [ "bincode", "bs58", @@ -5612,14 +5612,14 @@ dependencies = [ "protobuf-src", "serde", "solana-account-decoder", - "solana-sdk 1.14.2", + "solana-sdk 1.14.3", "solana-transaction-status", "tonic-build 0.8.0", ] [[package]] name = "solana-streamer" -version = "1.14.2" +version = "1.14.3" dependencies = [ "crossbeam-channel", "futures-util", @@ -5638,7 +5638,7 @@ dependencies = [ "rustls 0.20.6", "solana-metrics", "solana-perf", - "solana-sdk 1.14.2", + "solana-sdk 1.14.3", "thiserror", "tokio", "x509-parser", @@ -5646,13 +5646,13 @@ dependencies = [ [[package]] name = "solana-sys-tuner" -version = "1.14.2" +version = "1.14.3" dependencies = [ "clap 2.33.3", "libc", "log", "nix", - "solana-logger 1.14.2", + "solana-logger 1.14.3", "solana-version", "sysctl", "unix_socket2", @@ -5661,7 +5661,7 @@ dependencies = [ [[package]] name = "solana-test-validator" -version = "1.14.2" +version = "1.14.3" dependencies = [ "base64 0.13.0", "log", @@ -5672,20 +5672,20 @@ dependencies = [ "solana-core", "solana-gossip", "solana-ledger", - "solana-logger 1.14.2", + "solana-logger 1.14.3", "solana-net-utils", "solana-program-runtime", "solana-program-test", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.2", + "solana-sdk 1.14.3", "solana-streamer", "tokio", ] [[package]] name = "solana-transaction-status" -version = "1.14.2" +version = "1.14.3" dependencies = [ "Inflector", "base64 0.13.0", @@ -5700,7 +5700,7 @@ dependencies = [ "solana-account-decoder", "solana-measure", "solana-metrics", - "solana-sdk 1.14.2", + "solana-sdk 1.14.3", "solana-vote-program", "spl-associated-token-account", "spl-memo", @@ -5711,7 +5711,7 @@ dependencies = [ [[package]] name = "solana-validator" -version = "1.14.2" +version = "1.14.3" dependencies = [ "chrono", "clap 2.33.3", @@ -5742,14 +5742,14 @@ dependencies = [ "solana-genesis-utils", "solana-gossip", "solana-ledger", - "solana-logger 1.14.2", + "solana-logger 1.14.3", "solana-metrics", "solana-net-utils", "solana-perf", "solana-poh", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.2", + "solana-sdk 1.14.3", "solana-send-transaction-service", "solana-storage-bigtable", "solana-streamer", @@ -5762,21 +5762,21 @@ dependencies = [ [[package]] name = "solana-version" -version = "1.14.2" +version = "1.14.3" dependencies = [ "log", "rustc_version", "semver", "serde", "serde_derive", - "solana-frozen-abi 1.14.2", - "solana-frozen-abi-macro 1.14.2", - "solana-sdk 1.14.2", + "solana-frozen-abi 1.14.3", + "solana-frozen-abi-macro 1.14.3", + "solana-sdk 1.14.3", ] [[package]] name = "solana-vote-program" -version = "1.14.2" +version = "1.14.3" dependencies = [ "bincode", "log", @@ -5785,25 +5785,25 @@ dependencies = [ "rustc_version", "serde", "serde_derive", - "solana-frozen-abi 1.14.2", - "solana-frozen-abi-macro 1.14.2", + "solana-frozen-abi 1.14.3", + "solana-frozen-abi-macro 1.14.3", "solana-metrics", "solana-program-runtime", - "solana-sdk 1.14.2", + "solana-sdk 1.14.3", "thiserror", ] [[package]] name = "solana-zk-token-proof-program" -version = "1.14.2" +version = "1.14.3" dependencies = [ "bytemuck", "getrandom 0.1.14", "num-derive", "num-traits", "solana-program-runtime", - "solana-sdk 1.14.2", - "solana-zk-token-sdk 1.14.2", + "solana-sdk 1.14.3", + "solana-zk-token-sdk 1.14.3", ] [[package]] @@ -5838,7 +5838,7 @@ dependencies = [ [[package]] name = "solana-zk-token-sdk" -version = "1.14.2" +version = "1.14.3" dependencies = [ "aes-gcm-siv", "arrayref", @@ -5858,8 +5858,8 @@ dependencies = [ "serde", "serde_json", "sha3 0.9.1", - "solana-program 1.14.2", - "solana-sdk 1.14.2", + "solana-program 1.14.3", + "solana-sdk 1.14.3", "subtle", "thiserror", "zeroize", diff --git a/programs/bpf/Cargo.toml b/programs/bpf/Cargo.toml index 531953f651e377..4342db6cd62dfb 100644 --- a/programs/bpf/Cargo.toml +++ b/programs/bpf/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "solana-bpf-programs" description = "Blockchain, Rebuilt for Scale" -version = "1.14.2" +version = "1.14.3" documentation = "https://docs.rs/solana" homepage = "https://solana.com/" readme = "README.md" @@ -26,22 +26,22 @@ itertools = "0.10.1" log = "0.4.11" miow = "0.3.6" net2 = "0.2.37" -solana-account-decoder = { path = "../../account-decoder", version = "=1.14.2" } -solana-bpf-loader-program = { path = "../bpf_loader", version = "=1.14.2" } -solana-bpf-rust-invoke = { path = "rust/invoke", version = "=1.14.2" } -solana-bpf-rust-realloc = { path = "rust/realloc", version = "=1.14.2" } -solana-bpf-rust-realloc-invoke = { path = "rust/realloc_invoke", version = "=1.14.2" } -solana-cli-output = { path = "../../cli-output", version = "=1.14.2" } -solana-logger = { path = "../../logger", version = "=1.14.2" } -solana-measure = { path = "../../measure", version = "=1.14.2" } -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.2" } -solana-runtime = { path = "../../runtime", version = "=1.14.2" } -solana-sdk = { path = "../../sdk", version = "=1.14.2" } -solana-transaction-status = { path = "../../transaction-status", version = "=1.14.2" } +solana-account-decoder = { path = "../../account-decoder", version = "=1.14.3" } +solana-bpf-loader-program = { path = "../bpf_loader", version = "=1.14.3" } +solana-bpf-rust-invoke = { path = "rust/invoke", version = "=1.14.3" } +solana-bpf-rust-realloc = { path = "rust/realloc", version = "=1.14.3" } +solana-bpf-rust-realloc-invoke = { path = "rust/realloc_invoke", version = "=1.14.3" } +solana-cli-output = { path = "../../cli-output", version = "=1.14.3" } +solana-logger = { path = "../../logger", version = "=1.14.3" } +solana-measure = { path = "../../measure", version = "=1.14.3" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.3" } +solana-runtime = { path = "../../runtime", version = "=1.14.3" } +solana-sdk = { path = "../../sdk", version = "=1.14.3" } +solana-transaction-status = { path = "../../transaction-status", version = "=1.14.3" } solana_rbpf = "=0.2.31" [dev-dependencies] -solana-ledger = { path = "../../ledger", version = "=1.14.2" } +solana-ledger = { path = "../../ledger", version = "=1.14.3" } [[bench]] name = "bpf_loader" diff --git a/programs/bpf/rust/128bit/Cargo.toml b/programs/bpf/rust/128bit/Cargo.toml index e3a65e29464683..5b6b09fcd8072c 100644 --- a/programs/bpf/rust/128bit/Cargo.toml +++ b/programs/bpf/rust/128bit/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-128bit" -version = "1.14.2" +version = "1.14.3" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ documentation = "https://docs.rs/solana-bpf-rust-128bit" edition = "2021" [dependencies] -solana-bpf-rust-128bit-dep = { path = "../128bit_dep", version = "=1.14.2" } -solana-program = { path = "../../../../sdk/program", version = "=1.14.2" } +solana-bpf-rust-128bit-dep = { path = "../128bit_dep", version = "=1.14.3" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.3" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/128bit_dep/Cargo.toml b/programs/bpf/rust/128bit_dep/Cargo.toml index 9a5406f80f98de..19502494abc2f6 100644 --- a/programs/bpf/rust/128bit_dep/Cargo.toml +++ b/programs/bpf/rust/128bit_dep/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-128bit-dep" -version = "1.14.2" +version = "1.14.3" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-128bit-dep" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.2" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.3" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/bpf/rust/alloc/Cargo.toml b/programs/bpf/rust/alloc/Cargo.toml index 3491bd1c425dfe..b8ac95302a3776 100644 --- a/programs/bpf/rust/alloc/Cargo.toml +++ b/programs/bpf/rust/alloc/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-alloc" -version = "1.14.2" +version = "1.14.3" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-alloc" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.2" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.3" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/call_depth/Cargo.toml b/programs/bpf/rust/call_depth/Cargo.toml index 183c8ec8c62a8e..de242d928b9e23 100644 --- a/programs/bpf/rust/call_depth/Cargo.toml +++ b/programs/bpf/rust/call_depth/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-call-depth" -version = "1.14.2" +version = "1.14.3" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-call-depth" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.2" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.3" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/caller_access/Cargo.toml b/programs/bpf/rust/caller_access/Cargo.toml index 7add62284f77bd..f0c5934b1a1da9 100644 --- a/programs/bpf/rust/caller_access/Cargo.toml +++ b/programs/bpf/rust/caller_access/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-caller-access" -version = "1.14.2" +version = "1.14.3" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-caller-access" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.2" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.3" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/curve25519/Cargo.toml b/programs/bpf/rust/curve25519/Cargo.toml index ef533b5fa44210..045086ac17624a 100644 --- a/programs/bpf/rust/curve25519/Cargo.toml +++ b/programs/bpf/rust/curve25519/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-curve25519" -version = "1.14.2" +version = "1.14.3" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ documentation = "https://docs.rs/solana-bpf-rust-zktoken_crypto" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.2" } -solana-zk-token-sdk = { path = "../../../../zk-token-sdk", version = "=1.14.2" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.3" } +solana-zk-token-sdk = { path = "../../../../zk-token-sdk", version = "=1.14.3" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/custom_heap/Cargo.toml b/programs/bpf/rust/custom_heap/Cargo.toml index 7dece9cdad5d41..c439425a0b943c 100644 --- a/programs/bpf/rust/custom_heap/Cargo.toml +++ b/programs/bpf/rust/custom_heap/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-custom-heap" -version = "1.14.2" +version = "1.14.3" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-custom-heap" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.2" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.3" } [features] default = ["custom-heap"] diff --git a/programs/bpf/rust/dep_crate/Cargo.toml b/programs/bpf/rust/dep_crate/Cargo.toml index 65b1f4ab6e6c14..455cc35630c3b6 100644 --- a/programs/bpf/rust/dep_crate/Cargo.toml +++ b/programs/bpf/rust/dep_crate/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-dep-crate" -version = "1.14.2" +version = "1.14.3" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,8 +12,8 @@ edition = "2021" [dependencies] byteorder = { version = "1", default-features = false } # list of crates which must be buildable for bpf programs -solana-address-lookup-table-program = { path = "../../../../programs/address-lookup-table", version = "=1.14.2" } -solana-program = { path = "../../../../sdk/program", version = "=1.14.2" } +solana-address-lookup-table-program = { path = "../../../../programs/address-lookup-table", version = "=1.14.3" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.3" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/deprecated_loader/Cargo.toml b/programs/bpf/rust/deprecated_loader/Cargo.toml index 4c1ce8e40e78d5..c43688847bd28d 100644 --- a/programs/bpf/rust/deprecated_loader/Cargo.toml +++ b/programs/bpf/rust/deprecated_loader/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-deprecated-loader" -version = "1.14.2" +version = "1.14.3" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-deprecated-loader" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.2" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.3" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/dup_accounts/Cargo.toml b/programs/bpf/rust/dup_accounts/Cargo.toml index 781415c5f4996b..8f561f6e3de692 100644 --- a/programs/bpf/rust/dup_accounts/Cargo.toml +++ b/programs/bpf/rust/dup_accounts/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-dup-accounts" -version = "1.14.2" +version = "1.14.3" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-dup-accounts" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.2" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.3" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/error_handling/Cargo.toml b/programs/bpf/rust/error_handling/Cargo.toml index 0296faa43e9f3e..d80c8463cd5043 100644 --- a/programs/bpf/rust/error_handling/Cargo.toml +++ b/programs/bpf/rust/error_handling/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-error-handling" -version = "1.14.2" +version = "1.14.3" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,7 +12,7 @@ edition = "2021" [dependencies] num-derive = "0.3" num-traits = "0.2" -solana-program = { path = "../../../../sdk/program", version = "=1.14.2" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.3" } thiserror = "1.0" [lib] diff --git a/programs/bpf/rust/external_spend/Cargo.toml b/programs/bpf/rust/external_spend/Cargo.toml index 2a8aae8337727a..e7ed9216a1a4cf 100644 --- a/programs/bpf/rust/external_spend/Cargo.toml +++ b/programs/bpf/rust/external_spend/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-external-spend" -version = "1.14.2" +version = "1.14.3" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-external-spend" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.2" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.3" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/finalize/Cargo.toml b/programs/bpf/rust/finalize/Cargo.toml index 412541a5674487..64839446ee1130 100644 --- a/programs/bpf/rust/finalize/Cargo.toml +++ b/programs/bpf/rust/finalize/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-finalize" -version = "1.14.2" +version = "1.14.3" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-finalize" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.2" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.3" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/get_minimum_delegation/Cargo.toml b/programs/bpf/rust/get_minimum_delegation/Cargo.toml index e58978d05350f0..a0572ccdce4719 100644 --- a/programs/bpf/rust/get_minimum_delegation/Cargo.toml +++ b/programs/bpf/rust/get_minimum_delegation/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-get-minimum-delegation" -version = "1.14.2" +version = "1.14.3" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-get-minimum-delegation" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.2" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.3" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/inner_instruction_alignment_check/Cargo.toml b/programs/bpf/rust/inner_instruction_alignment_check/Cargo.toml index 932d3fbef2da94..245f64bb1a236c 100644 --- a/programs/bpf/rust/inner_instruction_alignment_check/Cargo.toml +++ b/programs/bpf/rust/inner_instruction_alignment_check/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-inner_instruction_alignment_check" -version = "1.14.2" +version = "1.14.3" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-inner_instruction_alignment_che edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.2" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.3" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/instruction_introspection/Cargo.toml b/programs/bpf/rust/instruction_introspection/Cargo.toml index 05850b89291c55..236e3632ae99c2 100644 --- a/programs/bpf/rust/instruction_introspection/Cargo.toml +++ b/programs/bpf/rust/instruction_introspection/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-instruction-introspection" -version = "1.14.2" +version = "1.14.3" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-instruction-introspection" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.2" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.3" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/invoke/Cargo.toml b/programs/bpf/rust/invoke/Cargo.toml index b150a506642794..e2a0dec4c8ff48 100644 --- a/programs/bpf/rust/invoke/Cargo.toml +++ b/programs/bpf/rust/invoke/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-invoke" -version = "1.14.2" +version = "1.14.3" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -15,7 +15,7 @@ program = [] [dependencies] solana-bpf-rust-invoked = { path = "../invoked", default-features = false } -solana-program = { path = "../../../../sdk/program", version = "=1.14.2" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.3" } [lib] crate-type = ["lib", "cdylib"] diff --git a/programs/bpf/rust/invoke_and_error/Cargo.toml b/programs/bpf/rust/invoke_and_error/Cargo.toml index 15f33c2bb2708c..6ec03a021955a1 100644 --- a/programs/bpf/rust/invoke_and_error/Cargo.toml +++ b/programs/bpf/rust/invoke_and_error/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-invoke-and-error" -version = "1.14.2" +version = "1.14.3" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-invoke-and-error" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.2" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.3" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/invoke_and_ok/Cargo.toml b/programs/bpf/rust/invoke_and_ok/Cargo.toml index b74dd7fe125753..d84a4f7fb02cb4 100644 --- a/programs/bpf/rust/invoke_and_ok/Cargo.toml +++ b/programs/bpf/rust/invoke_and_ok/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-invoke-and-ok" -version = "1.14.2" +version = "1.14.3" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-invoke-and-ok" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.2" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.3" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/invoke_and_return/Cargo.toml b/programs/bpf/rust/invoke_and_return/Cargo.toml index 4f2918cc5037b8..4f995c069bac47 100644 --- a/programs/bpf/rust/invoke_and_return/Cargo.toml +++ b/programs/bpf/rust/invoke_and_return/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-invoke-and-return" -version = "1.14.2" +version = "1.14.3" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-invoke-and-return" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.2" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.3" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/invoked/Cargo.toml b/programs/bpf/rust/invoked/Cargo.toml index 945f9cf529dd47..400fd83dea8b1b 100644 --- a/programs/bpf/rust/invoked/Cargo.toml +++ b/programs/bpf/rust/invoked/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-invoked" -version = "1.14.2" +version = "1.14.3" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,7 +14,7 @@ default = ["program"] program = [] [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.2" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.3" } [lib] crate-type = ["lib", "cdylib"] diff --git a/programs/bpf/rust/iter/Cargo.toml b/programs/bpf/rust/iter/Cargo.toml index 42b6c5213a92d5..eefecd4df782e1 100644 --- a/programs/bpf/rust/iter/Cargo.toml +++ b/programs/bpf/rust/iter/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-iter" -version = "1.14.2" +version = "1.14.3" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-iter" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.2" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.3" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/log_data/Cargo.toml b/programs/bpf/rust/log_data/Cargo.toml index 0cb9478993dabc..2e21e230ce6e1f 100644 --- a/programs/bpf/rust/log_data/Cargo.toml +++ b/programs/bpf/rust/log_data/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-log-data" -version = "1.14.2" +version = "1.14.3" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-log-data" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.2" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.3" } [features] default = ["program"] diff --git a/programs/bpf/rust/many_args/Cargo.toml b/programs/bpf/rust/many_args/Cargo.toml index fd7dd9529c047f..d4d46ecb64338e 100644 --- a/programs/bpf/rust/many_args/Cargo.toml +++ b/programs/bpf/rust/many_args/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-many-args" -version = "1.14.2" +version = "1.14.3" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ documentation = "https://docs.rs/solana-bpf-rust-many-args" edition = "2021" [dependencies] -solana-bpf-rust-many-args-dep = { path = "../many_args_dep", version = "=1.14.2" } -solana-program = { path = "../../../../sdk/program", version = "=1.14.2" } +solana-bpf-rust-many-args-dep = { path = "../many_args_dep", version = "=1.14.3" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.3" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/many_args_dep/Cargo.toml b/programs/bpf/rust/many_args_dep/Cargo.toml index ba3c0fc07e26e5..6e934bbc627cb1 100644 --- a/programs/bpf/rust/many_args_dep/Cargo.toml +++ b/programs/bpf/rust/many_args_dep/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-many-args-dep" -version = "1.14.2" +version = "1.14.3" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-many-args-dep" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.2" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.3" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/bpf/rust/mem/Cargo.toml b/programs/bpf/rust/mem/Cargo.toml index 9a5915e938cd20..8aad19aa6fd66a 100644 --- a/programs/bpf/rust/mem/Cargo.toml +++ b/programs/bpf/rust/mem/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-mem" -version = "1.14.2" +version = "1.14.3" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,12 +13,12 @@ edition = "2021" no-entrypoint = [] [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.2" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.3" } [dev-dependencies] -solana-program-runtime = { path = "../../../../program-runtime", version = "=1.14.2" } -solana-program-test = { path = "../../../../program-test", version = "=1.14.2" } -solana-sdk = { path = "../../../../sdk", version = "=1.14.2" } +solana-program-runtime = { path = "../../../../program-runtime", version = "=1.14.3" } +solana-program-test = { path = "../../../../program-test", version = "=1.14.3" } +solana-sdk = { path = "../../../../sdk", version = "=1.14.3" } [lib] crate-type = ["cdylib", "lib"] diff --git a/programs/bpf/rust/membuiltins/Cargo.toml b/programs/bpf/rust/membuiltins/Cargo.toml index 9a4ddcb0446c8e..fdf0534b5f6b7a 100644 --- a/programs/bpf/rust/membuiltins/Cargo.toml +++ b/programs/bpf/rust/membuiltins/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-membuiltins" -version = "1.14.2" +version = "1.14.3" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ documentation = "https://docs.rs/solana-bpf-rust-mem" edition = "2021" [dependencies] -solana-bpf-rust-mem = { path = "../mem", version = "=1.14.2", features = [ "no-entrypoint" ] } -solana-program = { path = "../../../../sdk/program", version = "=1.14.2" } +solana-bpf-rust-mem = { path = "../mem", version = "=1.14.3", features = [ "no-entrypoint" ] } +solana-program = { path = "../../../../sdk/program", version = "=1.14.3" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/noop/Cargo.toml b/programs/bpf/rust/noop/Cargo.toml index 37730fe4cad3b4..73bd2332299700 100644 --- a/programs/bpf/rust/noop/Cargo.toml +++ b/programs/bpf/rust/noop/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-noop" -version = "1.14.2" +version = "1.14.3" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-noop" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.2" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.3" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/panic/Cargo.toml b/programs/bpf/rust/panic/Cargo.toml index 6e5a7d6782d8eb..e65cdf3c0dca73 100644 --- a/programs/bpf/rust/panic/Cargo.toml +++ b/programs/bpf/rust/panic/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-panic" -version = "1.14.2" +version = "1.14.3" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-panic" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.2" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.3" } [features] default = ["custom-panic"] diff --git a/programs/bpf/rust/param_passing/Cargo.toml b/programs/bpf/rust/param_passing/Cargo.toml index 9bd5fed63a5137..de61584856b1a5 100644 --- a/programs/bpf/rust/param_passing/Cargo.toml +++ b/programs/bpf/rust/param_passing/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-param-passing" -version = "1.14.2" +version = "1.14.3" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ documentation = "https://docs.rs/solana-bpf-rust-param-passing" edition = "2021" [dependencies] -solana-bpf-rust-param-passing-dep = { path = "../param_passing_dep", version = "=1.14.2" } -solana-program = { path = "../../../../sdk/program", version = "=1.14.2" } +solana-bpf-rust-param-passing-dep = { path = "../param_passing_dep", version = "=1.14.3" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.3" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/param_passing_dep/Cargo.toml b/programs/bpf/rust/param_passing_dep/Cargo.toml index 4e775bd588dffc..719a5ac6213e84 100644 --- a/programs/bpf/rust/param_passing_dep/Cargo.toml +++ b/programs/bpf/rust/param_passing_dep/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-param-passing-dep" -version = "1.14.2" +version = "1.14.3" description = "Solana BPF program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-param-passing-dep" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.2" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.3" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/bpf/rust/rand/Cargo.toml b/programs/bpf/rust/rand/Cargo.toml index 2bacfe4d26f976..9e16be725f67df 100644 --- a/programs/bpf/rust/rand/Cargo.toml +++ b/programs/bpf/rust/rand/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-rand" -version = "1.14.2" +version = "1.14.3" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,7 +12,7 @@ edition = "2021" [dependencies] getrandom = { version = "0.1.14", features = ["dummy"] } rand = "0.7" -solana-program = { path = "../../../../sdk/program", version = "=1.14.2" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.3" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/realloc/Cargo.toml b/programs/bpf/rust/realloc/Cargo.toml index 99798dfaf8658b..8c5c40caa868b0 100644 --- a/programs/bpf/rust/realloc/Cargo.toml +++ b/programs/bpf/rust/realloc/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-realloc" -version = "1.14.2" +version = "1.14.3" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,7 +14,7 @@ default = ["program"] program = [] [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.2" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.3" } [lib] crate-type = ["lib", "cdylib"] diff --git a/programs/bpf/rust/realloc_invoke/Cargo.toml b/programs/bpf/rust/realloc_invoke/Cargo.toml index 787288c0c349a4..ca9d26ba54a12f 100644 --- a/programs/bpf/rust/realloc_invoke/Cargo.toml +++ b/programs/bpf/rust/realloc_invoke/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-realloc-invoke" -version = "1.14.2" +version = "1.14.3" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,8 +14,8 @@ default = ["program"] program = [] [dependencies] -solana-bpf-rust-realloc = { path = "../realloc", version = "=1.14.2", default-features = false } -solana-program = { path = "../../../../sdk/program", version = "=1.14.2" } +solana-bpf-rust-realloc = { path = "../realloc", version = "=1.14.3", default-features = false } +solana-program = { path = "../../../../sdk/program", version = "=1.14.3" } [lib] crate-type = ["lib", "cdylib"] diff --git a/programs/bpf/rust/ro_account_modify/Cargo.toml b/programs/bpf/rust/ro_account_modify/Cargo.toml index 9cd43785a19358..0ae1dc8ddd2be7 100644 --- a/programs/bpf/rust/ro_account_modify/Cargo.toml +++ b/programs/bpf/rust/ro_account_modify/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-ro-account_modify" -version = "1.14.2" +version = "1.14.3" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-ro-modify" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.2" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.3" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/ro_modify/Cargo.toml b/programs/bpf/rust/ro_modify/Cargo.toml index e45ef4012fa1f8..ac19c7944bb558 100644 --- a/programs/bpf/rust/ro_modify/Cargo.toml +++ b/programs/bpf/rust/ro_modify/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-ro-modify" -version = "1.14.2" +version = "1.14.3" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-ro-modify" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.2" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.3" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/sanity/Cargo.toml b/programs/bpf/rust/sanity/Cargo.toml index 93cb814768b476..0bf1f1df6f3eb1 100644 --- a/programs/bpf/rust/sanity/Cargo.toml +++ b/programs/bpf/rust/sanity/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-sanity" -version = "1.14.2" +version = "1.14.3" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,12 +13,12 @@ edition = "2021" test-bpf = [] [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.2" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.3" } [dev-dependencies] -solana-program-runtime = { path = "../../../../program-runtime", version = "=1.14.2" } -solana-program-test = { path = "../../../../program-test", version = "=1.14.2" } -solana-sdk = { path = "../../../../sdk", version = "=1.14.2" } +solana-program-runtime = { path = "../../../../program-runtime", version = "=1.14.3" } +solana-program-test = { path = "../../../../program-test", version = "=1.14.3" } +solana-sdk = { path = "../../../../sdk", version = "=1.14.3" } [lib] crate-type = ["cdylib", "lib"] diff --git a/programs/bpf/rust/secp256k1_recover/Cargo.toml b/programs/bpf/rust/secp256k1_recover/Cargo.toml index 174aabf3c8cf99..74ba14c629f51c 100644 --- a/programs/bpf/rust/secp256k1_recover/Cargo.toml +++ b/programs/bpf/rust/secp256k1_recover/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-secp256k1-recover" -version = "1.14.2" +version = "1.14.3" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -11,7 +11,7 @@ edition = "2021" [dependencies] libsecp256k1 = { version = "0.7.0", default-features = false } -solana-program = { path = "../../../../sdk/program", version = "=1.14.2" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.3" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/sha/Cargo.toml b/programs/bpf/rust/sha/Cargo.toml index 15ae0b4cffac13..72bfd9f2e0e561 100644 --- a/programs/bpf/rust/sha/Cargo.toml +++ b/programs/bpf/rust/sha/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-sha" -version = "1.14.2" +version = "1.14.3" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -11,7 +11,7 @@ edition = "2021" [dependencies] blake3 = "1.0.0" -solana-program = { path = "../../../../sdk/program", version = "=1.14.2" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.3" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/sibling_inner_instruction/Cargo.toml b/programs/bpf/rust/sibling_inner_instruction/Cargo.toml index 8a1cc6506b9fbf..e54128f24a6390 100644 --- a/programs/bpf/rust/sibling_inner_instruction/Cargo.toml +++ b/programs/bpf/rust/sibling_inner_instruction/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-sibling_inner-instructions" -version = "1.14.2" +version = "1.14.3" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-log-data" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.2" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.3" } [features] default = ["program"] diff --git a/programs/bpf/rust/sibling_instruction/Cargo.toml b/programs/bpf/rust/sibling_instruction/Cargo.toml index 6e1890b2afa493..6bee9229303248 100644 --- a/programs/bpf/rust/sibling_instruction/Cargo.toml +++ b/programs/bpf/rust/sibling_instruction/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-sibling-instructions" -version = "1.14.2" +version = "1.14.3" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-log-data" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.2" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.3" } [features] default = ["program"] diff --git a/programs/bpf/rust/simulation/Cargo.toml b/programs/bpf/rust/simulation/Cargo.toml index 936273e341c29b..7977486acd1afe 100644 --- a/programs/bpf/rust/simulation/Cargo.toml +++ b/programs/bpf/rust/simulation/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-simulation" -version = "1.14.2" +version = "1.14.3" description = "Solana BPF Program Simulation Differences" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,13 +13,13 @@ edition = "2021" test-bpf = [] [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.2" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.3" } [dev-dependencies] -solana-logger = { path = "../../../../logger", version = "=1.14.2" } -solana-program-test = { path = "../../../../program-test", version = "=1.14.2" } -solana-sdk = { path = "../../../../sdk", version = "=1.14.2" } -solana-validator = { path = "../../../../validator", version = "=1.14.2" } +solana-logger = { path = "../../../../logger", version = "=1.14.3" } +solana-program-test = { path = "../../../../program-test", version = "=1.14.3" } +solana-sdk = { path = "../../../../sdk", version = "=1.14.3" } +solana-validator = { path = "../../../../validator", version = "=1.14.3" } [lib] crate-type = ["cdylib", "lib"] diff --git a/programs/bpf/rust/spoof1/Cargo.toml b/programs/bpf/rust/spoof1/Cargo.toml index b9e26f379868aa..282307253c1f52 100644 --- a/programs/bpf/rust/spoof1/Cargo.toml +++ b/programs/bpf/rust/spoof1/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-spoof1" -version = "1.14.2" +version = "1.14.3" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-spoof1" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.2" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.3" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/spoof1_system/Cargo.toml b/programs/bpf/rust/spoof1_system/Cargo.toml index 4e96d67a8a410d..2e07fa797a8017 100644 --- a/programs/bpf/rust/spoof1_system/Cargo.toml +++ b/programs/bpf/rust/spoof1_system/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-spoof1-system" -version = "1.14.2" +version = "1.14.3" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-spoof1-system" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.2" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.3" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/sysvar/Cargo.toml b/programs/bpf/rust/sysvar/Cargo.toml index 98c42f00c1620c..092537c2e544db 100644 --- a/programs/bpf/rust/sysvar/Cargo.toml +++ b/programs/bpf/rust/sysvar/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-sysvar" -version = "1.14.2" +version = "1.14.3" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,12 +10,12 @@ documentation = "https://docs.rs/solana-bpf-rust-sysvar" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.2" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.3" } [dev-dependencies] -solana-program-runtime = { path = "../../../../program-runtime", version = "=1.14.2" } -solana-program-test = { path = "../../../../program-test", version = "=1.14.2" } -solana-sdk = { path = "../../../../sdk", version = "=1.14.2" } +solana-program-runtime = { path = "../../../../program-runtime", version = "=1.14.3" } +solana-program-test = { path = "../../../../program-test", version = "=1.14.3" } +solana-sdk = { path = "../../../../sdk", version = "=1.14.3" } [lib] crate-type = ["cdylib", "lib"] diff --git a/programs/bpf/rust/upgradeable/Cargo.toml b/programs/bpf/rust/upgradeable/Cargo.toml index 31599601b3808a..64f145742b76a3 100644 --- a/programs/bpf/rust/upgradeable/Cargo.toml +++ b/programs/bpf/rust/upgradeable/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-upgradeable" -version = "1.14.2" +version = "1.14.3" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-upgradeable" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.2" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.3" } [lib] name = "solana_bpf_rust_upgradeable" diff --git a/programs/bpf/rust/upgraded/Cargo.toml b/programs/bpf/rust/upgraded/Cargo.toml index 768761c6f830e9..4d46a233f9fd64 100644 --- a/programs/bpf/rust/upgraded/Cargo.toml +++ b/programs/bpf/rust/upgraded/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-upgraded" -version = "1.14.2" +version = "1.14.3" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-upgraded" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.2" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.3" } [lib] name = "solana_bpf_rust_upgraded" diff --git a/programs/bpf_loader/Cargo.toml b/programs/bpf_loader/Cargo.toml index 53d2fba76a806b..d3e294cb9c9166 100644 --- a/programs/bpf_loader/Cargo.toml +++ b/programs/bpf_loader/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-loader-program" -version = "1.14.2" +version = "1.14.3" description = "Solana BPF loader" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,17 +14,17 @@ bincode = "1.3.3" byteorder = "1.4.3" libsecp256k1 = "0.6.0" log = "0.4.17" -solana-measure = { path = "../../measure", version = "=1.14.2" } -solana-metrics = { path = "../../metrics", version = "=1.14.2" } -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.2" } -solana-sdk = { path = "../../sdk", version = "=1.14.2" } -solana-zk-token-sdk = { path = "../../zk-token-sdk", version = "=1.14.2" } +solana-measure = { path = "../../measure", version = "=1.14.3" } +solana-metrics = { path = "../../metrics", version = "=1.14.3" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.3" } +solana-sdk = { path = "../../sdk", version = "=1.14.3" } +solana-zk-token-sdk = { path = "../../zk-token-sdk", version = "=1.14.3" } solana_rbpf = "=0.2.31" thiserror = "1.0" [dev-dependencies] rand = "0.7.3" -solana-runtime = { path = "../../runtime", version = "=1.14.2" } +solana-runtime = { path = "../../runtime", version = "=1.14.3" } [lib] crate-type = ["lib"] diff --git a/programs/bpf_loader/gen-syscall-list/Cargo.toml b/programs/bpf_loader/gen-syscall-list/Cargo.toml index 5b4d054b7c7869..1d5941a3b8277b 100644 --- a/programs/bpf_loader/gen-syscall-list/Cargo.toml +++ b/programs/bpf_loader/gen-syscall-list/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "gen-syscall-list" -version = "1.14.2" +version = "1.14.3" edition = "2021" license = "Apache-2.0" publish = false diff --git a/programs/compute-budget/Cargo.toml b/programs/compute-budget/Cargo.toml index a1ebc95d73440b..397fa86f931073 100644 --- a/programs/compute-budget/Cargo.toml +++ b/programs/compute-budget/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "solana-compute-budget-program" description = "Solana Compute Budget program" -version = "1.14.2" +version = "1.14.3" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-compute-budget-program" repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ license = "Apache-2.0" edition = "2021" [dependencies] -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.2" } -solana-sdk = { path = "../../sdk", version = "=1.14.2" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.3" } +solana-sdk = { path = "../../sdk", version = "=1.14.3" } [lib] crate-type = ["lib"] diff --git a/programs/config/Cargo.toml b/programs/config/Cargo.toml index 61eae864324cc8..878edcd9058642 100644 --- a/programs/config/Cargo.toml +++ b/programs/config/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-config-program" -version = "1.14.2" +version = "1.14.3" description = "Solana Config program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,11 +14,11 @@ bincode = "1.3.3" chrono = { version = "0.4.11", features = ["serde"] } serde = "1.0.138" serde_derive = "1.0.103" -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.2" } -solana-sdk = { path = "../../sdk", version = "=1.14.2" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.3" } +solana-sdk = { path = "../../sdk", version = "=1.14.3" } [dev-dependencies] -solana-logger = { path = "../../logger", version = "=1.14.2" } +solana-logger = { path = "../../logger", version = "=1.14.3" } [lib] crate-type = ["lib"] diff --git a/programs/ed25519-tests/Cargo.toml b/programs/ed25519-tests/Cargo.toml index d88195cea90c0b..6ec88c9dc01cb5 100644 --- a/programs/ed25519-tests/Cargo.toml +++ b/programs/ed25519-tests/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-ed25519-program-tests" -version = "1.14.2" +version = "1.14.3" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" @@ -12,8 +12,8 @@ publish = false assert_matches = "1.5.0" ed25519-dalek = "=1.0.1" rand = "0.7.0" -solana-program-test = { path = "../../program-test", version = "=1.14.2" } -solana-sdk = { path = "../../sdk", version = "=1.14.2" } +solana-program-test = { path = "../../program-test", version = "=1.14.3" } +solana-sdk = { path = "../../sdk", version = "=1.14.3" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/stake/Cargo.toml b/programs/stake/Cargo.toml index a63f1e9a52fbe0..b444a0ff7fc0de 100644 --- a/programs/stake/Cargo.toml +++ b/programs/stake/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-stake-program" -version = "1.14.2" +version = "1.14.3" description = "Solana Stake program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -16,19 +16,19 @@ num-derive = "0.3" num-traits = "0.2" serde = "1.0.138" serde_derive = "1.0.103" -solana-config-program = { path = "../config", version = "=1.14.2" } -solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.2" } -solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.2" } -solana-metrics = { path = "../../metrics", version = "=1.14.2" } -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.2" } -solana-sdk = { path = "../../sdk", version = "=1.14.2" } -solana-vote-program = { path = "../vote", version = "=1.14.2" } +solana-config-program = { path = "../config", version = "=1.14.3" } +solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.3" } +solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.3" } +solana-metrics = { path = "../../metrics", version = "=1.14.3" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.3" } +solana-sdk = { path = "../../sdk", version = "=1.14.3" } +solana-vote-program = { path = "../vote", version = "=1.14.3" } thiserror = "1.0" [dev-dependencies] assert_matches = "1.5.0" proptest = "1.0" -solana-logger = { path = "../../logger", version = "=1.14.2" } +solana-logger = { path = "../../logger", version = "=1.14.3" } test-case = "2.1.0" [build-dependencies] diff --git a/programs/vote/Cargo.toml b/programs/vote/Cargo.toml index c3f2711ec1af11..0cc6174d30693c 100644 --- a/programs/vote/Cargo.toml +++ b/programs/vote/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-vote-program" -version = "1.14.2" +version = "1.14.3" description = "Solana Vote program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -16,17 +16,17 @@ num-derive = "0.3" num-traits = "0.2" serde = "1.0.138" serde_derive = "1.0.103" -solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.2" } -solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.2" } -solana-metrics = { path = "../../metrics", version = "=1.14.2" } -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.2" } -solana-sdk = { path = "../../sdk", version = "=1.14.2" } +solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.3" } +solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.3" } +solana-metrics = { path = "../../metrics", version = "=1.14.3" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.3" } +solana-sdk = { path = "../../sdk", version = "=1.14.3" } thiserror = "1.0" [dev-dependencies] itertools = "0.10.3" rand = "0.7.0" -solana-logger = { path = "../../logger", version = "=1.14.2" } +solana-logger = { path = "../../logger", version = "=1.14.3" } [build-dependencies] rustc_version = "0.4" diff --git a/programs/zk-token-proof/Cargo.toml b/programs/zk-token-proof/Cargo.toml index 198bb4902a1265..8f98c86b2d73b8 100644 --- a/programs/zk-token-proof/Cargo.toml +++ b/programs/zk-token-proof/Cargo.toml @@ -3,7 +3,7 @@ name = "solana-zk-token-proof-program" description = "Solana Zk Token Proof Program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" -version = "1.14.2" +version = "1.14.3" license = "Apache-2.0" edition = "2021" @@ -12,6 +12,6 @@ bytemuck = { version = "1.11.0", features = ["derive"] } getrandom = { version = "0.1", features = ["dummy"] } num-derive = "0.3" num-traits = "0.2" -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.2" } -solana-sdk = { path = "../../sdk", version = "=1.14.2" } -solana-zk-token-sdk = { path = "../../zk-token-sdk", version = "=1.14.2" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.3" } +solana-sdk = { path = "../../sdk", version = "=1.14.3" } +solana-zk-token-sdk = { path = "../../zk-token-sdk", version = "=1.14.3" } diff --git a/rayon-threadlimit/Cargo.toml b/rayon-threadlimit/Cargo.toml index a8c3655fba5254..c2d3942ed25fb8 100644 --- a/rayon-threadlimit/Cargo.toml +++ b/rayon-threadlimit/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-rayon-threadlimit" -version = "1.14.2" +version = "1.14.3" description = "solana-rayon-threadlimit" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-rayon-threadlimit" diff --git a/rbpf-cli/Cargo.toml b/rbpf-cli/Cargo.toml index a6e6c6bc31cc53..ebfb34bdb389dc 100644 --- a/rbpf-cli/Cargo.toml +++ b/rbpf-cli/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "rbpf-cli" -version = "1.14.2" +version = "1.14.3" description = "CLI to test and analyze eBPF programs" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/rbpf" @@ -13,8 +13,8 @@ publish = false clap = { version = "3.1.5", features = ["cargo"] } serde = "1.0.138" serde_json = "1.0.81" -solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.2" } -solana-logger = { path = "../logger", version = "=1.14.2" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.2" } -solana-sdk = { path = "../sdk", version = "=1.14.2" } +solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.3" } +solana-logger = { path = "../logger", version = "=1.14.3" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.3" } +solana-sdk = { path = "../sdk", version = "=1.14.3" } solana_rbpf = "=0.2.31" diff --git a/remote-wallet/Cargo.toml b/remote-wallet/Cargo.toml index a1f7df55cb354b..47644ced0948e1 100644 --- a/remote-wallet/Cargo.toml +++ b/remote-wallet/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-remote-wallet" description = "Blockchain, Rebuilt for Scale" -version = "1.14.2" +version = "1.14.3" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -19,7 +19,7 @@ num-traits = { version = "0.2" } parking_lot = "0.12" qstring = "0.7.2" semver = "1.0" -solana-sdk = { path = "../sdk", version = "=1.14.2" } +solana-sdk = { path = "../sdk", version = "=1.14.3" } thiserror = "1.0" uriparse = "0.6.4" diff --git a/rpc-test/Cargo.toml b/rpc-test/Cargo.toml index 6244422a8b36c9..072daead2e3858 100644 --- a/rpc-test/Cargo.toml +++ b/rpc-test/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-rpc-test" -version = "1.14.2" +version = "1.14.3" description = "Solana RPC Test" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -19,17 +19,17 @@ log = "0.4.17" reqwest = { version = "0.11.11", default-features = false, features = ["blocking", "brotli", "deflate", "gzip", "rustls-tls", "json"] } serde = "1.0.138" serde_json = "1.0.81" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.2" } -solana-client = { path = "../client", version = "=1.14.2" } -solana-rpc = { path = "../rpc", version = "=1.14.2" } -solana-sdk = { path = "../sdk", version = "=1.14.2" } -solana-streamer = { path = "../streamer", version = "=1.14.2" } -solana-test-validator = { path = "../test-validator", version = "=1.14.2" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.2" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.3" } +solana-client = { path = "../client", version = "=1.14.3" } +solana-rpc = { path = "../rpc", version = "=1.14.3" } +solana-sdk = { path = "../sdk", version = "=1.14.3" } +solana-streamer = { path = "../streamer", version = "=1.14.3" } +solana-test-validator = { path = "../test-validator", version = "=1.14.3" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.3" } tokio = { version = "~1.14.1", features = ["full"] } [dev-dependencies] -solana-logger = { path = "../logger", version = "=1.14.2" } +solana-logger = { path = "../logger", version = "=1.14.3" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/rpc/Cargo.toml b/rpc/Cargo.toml index db4db097a9cbd9..54454f37f3cfe0 100644 --- a/rpc/Cargo.toml +++ b/rpc/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-rpc" -version = "1.14.2" +version = "1.14.3" description = "Solana RPC" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -29,26 +29,26 @@ serde = "1.0.138" serde_derive = "1.0.103" serde_json = "1.0.81" soketto = "0.7" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.2" } -solana-client = { path = "../client", version = "=1.14.2" } -solana-entry = { path = "../entry", version = "=1.14.2" } -solana-faucet = { path = "../faucet", version = "=1.14.2" } -solana-gossip = { path = "../gossip", version = "=1.14.2" } -solana-ledger = { path = "../ledger", version = "=1.14.2" } -solana-measure = { path = "../measure", version = "=1.14.2" } -solana-metrics = { path = "../metrics", version = "=1.14.2" } -solana-perf = { path = "../perf", version = "=1.14.2" } -solana-poh = { path = "../poh", version = "=1.14.2" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.2" } -solana-runtime = { path = "../runtime", version = "=1.14.2" } -solana-sdk = { path = "../sdk", version = "=1.14.2" } -solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.2" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.2" } -solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.2" } -solana-streamer = { path = "../streamer", version = "=1.14.2" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.2" } -solana-version = { path = "../version", version = "=1.14.2" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.2" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.3" } +solana-client = { path = "../client", version = "=1.14.3" } +solana-entry = { path = "../entry", version = "=1.14.3" } +solana-faucet = { path = "../faucet", version = "=1.14.3" } +solana-gossip = { path = "../gossip", version = "=1.14.3" } +solana-ledger = { path = "../ledger", version = "=1.14.3" } +solana-measure = { path = "../measure", version = "=1.14.3" } +solana-metrics = { path = "../metrics", version = "=1.14.3" } +solana-perf = { path = "../perf", version = "=1.14.3" } +solana-poh = { path = "../poh", version = "=1.14.3" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.3" } +solana-runtime = { path = "../runtime", version = "=1.14.3" } +solana-sdk = { path = "../sdk", version = "=1.14.3" } +solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.3" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.3" } +solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.3" } +solana-streamer = { path = "../streamer", version = "=1.14.3" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.3" } +solana-version = { path = "../version", version = "=1.14.3" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.3" } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } spl-token-2022 = { version = "=0.4.2", features = ["no-entrypoint"] } stream-cancel = "0.8.1" @@ -58,9 +58,9 @@ tokio-util = { version = "0.6", features = ["codec", "compat"] } [dev-dependencies] serial_test = "0.8.0" -solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.2" } -solana-net-utils = { path = "../net-utils", version = "=1.14.2" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.2" } +solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.3" } +solana-net-utils = { path = "../net-utils", version = "=1.14.3" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.3" } symlink = "0.1.0" [lib] diff --git a/runtime/Cargo.toml b/runtime/Cargo.toml index 4e5fb73c7cbea1..830c8ccc4e96ca 100644 --- a/runtime/Cargo.toml +++ b/runtime/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-runtime" -version = "1.14.2" +version = "1.14.3" description = "Solana runtime" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -39,21 +39,21 @@ rayon = "1.5.3" regex = "1.5.6" serde = { version = "1.0.138", features = ["rc"] } serde_derive = "1.0.103" -solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.2" } -solana-bucket-map = { path = "../bucket_map", version = "=1.14.2" } -solana-compute-budget-program = { path = "../programs/compute-budget", version = "=1.14.2" } -solana-config-program = { path = "../programs/config", version = "=1.14.2" } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.2" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.2" } -solana-measure = { path = "../measure", version = "=1.14.2" } -solana-metrics = { path = "../metrics", version = "=1.14.2" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.2" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.2" } -solana-sdk = { path = "../sdk", version = "=1.14.2" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.2" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.2" } -solana-zk-token-proof-program = { path = "../programs/zk-token-proof", version = "=1.14.2" } -solana-zk-token-sdk = { path = "../zk-token-sdk", version = "=1.14.2" } +solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.3" } +solana-bucket-map = { path = "../bucket_map", version = "=1.14.3" } +solana-compute-budget-program = { path = "../programs/compute-budget", version = "=1.14.3" } +solana-config-program = { path = "../programs/config", version = "=1.14.3" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.3" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.3" } +solana-measure = { path = "../measure", version = "=1.14.3" } +solana-metrics = { path = "../metrics", version = "=1.14.3" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.3" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.3" } +solana-sdk = { path = "../sdk", version = "=1.14.3" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.3" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.3" } +solana-zk-token-proof-program = { path = "../programs/zk-token-proof", version = "=1.14.3" } +solana-zk-token-sdk = { path = "../zk-token-sdk", version = "=1.14.3" } strum = { version = "0.24", features = ["derive"] } strum_macros = "0.24" symlink = "0.1.0" @@ -71,7 +71,7 @@ assert_matches = "1.5.0" ed25519-dalek = "=1.0.1" libsecp256k1 = "0.6.0" rand_chacha = "0.2.2" -solana-logger = { path = "../logger", version = "=1.14.2" } +solana-logger = { path = "../logger", version = "=1.14.3" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/runtime/store-tool/Cargo.toml b/runtime/store-tool/Cargo.toml index 9fd91554a4ac91..efa4fcfa63dfb8 100644 --- a/runtime/store-tool/Cargo.toml +++ b/runtime/store-tool/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-store-tool" description = "Tool to inspect append vecs" -version = "1.14.2" +version = "1.14.3" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -12,9 +12,9 @@ publish = false [dependencies] clap = "2.33.1" log = { version = "0.4.17" } -solana-logger = { path = "../../logger", version = "=1.14.2" } -solana-runtime = { path = "..", version = "=1.14.2" } -solana-version = { path = "../../version", version = "=1.14.2" } +solana-logger = { path = "../../logger", version = "=1.14.3" } +solana-runtime = { path = "..", version = "=1.14.3" } +solana-version = { path = "../../version", version = "=1.14.3" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/sdk/Cargo.toml b/sdk/Cargo.toml index 697ebd62cc83d0..bcde802d6eb9bb 100644 --- a/sdk/Cargo.toml +++ b/sdk/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-sdk" -version = "1.14.2" +version = "1.14.3" description = "Solana SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -71,11 +71,11 @@ serde_derive = "1.0.103" serde_json = { version = "1.0.81", optional = true } sha2 = "0.10.2" sha3 = { version = "0.10.1", optional = true } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.2" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.2" } -solana-logger = { path = "../logger", version = "=1.14.2", optional = true } -solana-program = { path = "program", version = "=1.14.2" } -solana-sdk-macro = { path = "macro", version = "=1.14.2" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.3" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.3" } +solana-logger = { path = "../logger", version = "=1.14.3", optional = true } +solana-program = { path = "program", version = "=1.14.3" } +solana-sdk-macro = { path = "macro", version = "=1.14.3" } thiserror = "1.0" uriparse = "0.6.4" wasm-bindgen = "0.2" diff --git a/sdk/cargo-build-bpf/Cargo.toml b/sdk/cargo-build-bpf/Cargo.toml index 8009778097e14f..c883bff088afc3 100644 --- a/sdk/cargo-build-bpf/Cargo.toml +++ b/sdk/cargo-build-bpf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-cargo-build-bpf" -version = "1.14.2" +version = "1.14.3" description = "Compile a local package and all of its dependencies using the Solana SBF SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,7 +12,7 @@ publish = false [dependencies] cargo_metadata = "0.15.0" clap = { version = "3.1.5", features = ["cargo", "env"] } -solana-sdk = { path = "..", version = "=1.14.2" } +solana-sdk = { path = "..", version = "=1.14.3" } [features] program = [] diff --git a/sdk/cargo-build-sbf/Cargo.toml b/sdk/cargo-build-sbf/Cargo.toml index 5ca2d5697587e9..1647fc9d6c74c2 100644 --- a/sdk/cargo-build-sbf/Cargo.toml +++ b/sdk/cargo-build-sbf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-cargo-build-sbf" -version = "1.14.2" +version = "1.14.3" description = "Compile a local package and all of its dependencies using the Solana SBF SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -15,9 +15,9 @@ cargo_metadata = "0.15.0" clap = { version = "3.1.5", features = ["cargo", "env"] } log = { version = "0.4.14", features = ["std"] } regex = "1.5.6" -solana-download-utils = { path = "../../download-utils", version = "=1.14.2" } -solana-logger = { path = "../../logger", version = "=1.14.2" } -solana-sdk = { path = "..", version = "=1.14.2" } +solana-download-utils = { path = "../../download-utils", version = "=1.14.3" } +solana-logger = { path = "../../logger", version = "=1.14.3" } +solana-sdk = { path = "..", version = "=1.14.3" } tar = "0.4.38" [dev-dependencies] diff --git a/sdk/cargo-build-sbf/tests/crates/fail/Cargo.toml b/sdk/cargo-build-sbf/tests/crates/fail/Cargo.toml index bb87a11e7602aa..f269612feee51f 100644 --- a/sdk/cargo-build-sbf/tests/crates/fail/Cargo.toml +++ b/sdk/cargo-build-sbf/tests/crates/fail/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "fail" -version = "1.14.2" +version = "1.14.3" description = "Solana SBF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ edition = "2021" publish = false [dependencies] -solana-program = { path = "../../../../program", version = "=1.14.2" } +solana-program = { path = "../../../../program", version = "=1.14.3" } [lib] crate-type = ["cdylib"] diff --git a/sdk/cargo-build-sbf/tests/crates/noop/Cargo.toml b/sdk/cargo-build-sbf/tests/crates/noop/Cargo.toml index 5a83d39356cc6f..db942347773d6f 100644 --- a/sdk/cargo-build-sbf/tests/crates/noop/Cargo.toml +++ b/sdk/cargo-build-sbf/tests/crates/noop/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "noop" -version = "1.14.2" +version = "1.14.3" description = "Solana SBF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ edition = "2021" publish = false [dependencies] -solana-program = { path = "../../../../program", version = "=1.14.2" } +solana-program = { path = "../../../../program", version = "=1.14.3" } [lib] crate-type = ["cdylib"] diff --git a/sdk/cargo-test-bpf/Cargo.toml b/sdk/cargo-test-bpf/Cargo.toml index 3c5c05a14c6f9f..4625594649df9e 100644 --- a/sdk/cargo-test-bpf/Cargo.toml +++ b/sdk/cargo-test-bpf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-cargo-test-bpf" -version = "1.14.2" +version = "1.14.3" description = "Execute all unit and integration tests after building with the Solana SBF SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/sdk/cargo-test-sbf/Cargo.toml b/sdk/cargo-test-sbf/Cargo.toml index fe2a1ec60b1092..da371b07035751 100644 --- a/sdk/cargo-test-sbf/Cargo.toml +++ b/sdk/cargo-test-sbf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-cargo-test-sbf" -version = "1.14.2" +version = "1.14.3" description = "Execute all unit and integration tests after building with the Solana SBF SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/sdk/gen-headers/Cargo.toml b/sdk/gen-headers/Cargo.toml index 1bf70979f2e3a5..d5edc1c40e4504 100644 --- a/sdk/gen-headers/Cargo.toml +++ b/sdk/gen-headers/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "gen-headers" -version = "1.14.2" +version = "1.14.3" edition = "2021" license = "Apache-2.0" publish = false diff --git a/sdk/macro/Cargo.toml b/sdk/macro/Cargo.toml index 74ab1b7062f10a..56c2ab90ad8f76 100644 --- a/sdk/macro/Cargo.toml +++ b/sdk/macro/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-sdk-macro" -version = "1.14.2" +version = "1.14.3" description = "Solana SDK Macro" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/sdk/program/Cargo.toml b/sdk/program/Cargo.toml index ecbf8d0c102423..6635171648282f 100644 --- a/sdk/program/Cargo.toml +++ b/sdk/program/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-program" -version = "1.14.2" +version = "1.14.3" description = "Solana Program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -31,9 +31,9 @@ serde_derive = "1.0" serde_json = "1.0" sha2 = "0.10.0" sha3 = "0.10.0" -solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.2" } -solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.2" } -solana-sdk-macro = { path = "../macro", version = "=1.14.2" } +solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.3" } +solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.3" } +solana-sdk-macro = { path = "../macro", version = "=1.14.3" } thiserror = "1.0" [target.'cfg(not(target_os = "solana"))'.dependencies] @@ -50,7 +50,7 @@ wasm-bindgen = "0.2" zeroize = { version = "1.3", default-features = true, features = ["zeroize_derive"] } [target.'cfg(not(target_os = "solana"))'.dev-dependencies] -solana-logger = { path = "../../logger", version = "=1.14.2" } +solana-logger = { path = "../../logger", version = "=1.14.3" } [target.'cfg(target_arch = "wasm32")'.dependencies] console_error_panic_hook = "0.1.7" diff --git a/send-transaction-service/Cargo.toml b/send-transaction-service/Cargo.toml index 52db08473821a0..c50bcbdee49a08 100644 --- a/send-transaction-service/Cargo.toml +++ b/send-transaction-service/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-send-transaction-service" -version = "1.14.2" +version = "1.14.3" description = "Solana send transaction service" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,14 +12,14 @@ edition = "2021" [dependencies] crossbeam-channel = "0.5" log = "0.4.17" -solana-client = { path = "../client", version = "=1.14.2" } -solana-measure = { path = "../measure", version = "=1.14.2" } -solana-metrics = { path = "../metrics", version = "=1.14.2" } -solana-runtime = { path = "../runtime", version = "=1.14.2" } -solana-sdk = { path = "../sdk", version = "=1.14.2" } +solana-client = { path = "../client", version = "=1.14.3" } +solana-measure = { path = "../measure", version = "=1.14.3" } +solana-metrics = { path = "../metrics", version = "=1.14.3" } +solana-runtime = { path = "../runtime", version = "=1.14.3" } +solana-sdk = { path = "../sdk", version = "=1.14.3" } [dev-dependencies] -solana-logger = { path = "../logger", version = "=1.14.2" } +solana-logger = { path = "../logger", version = "=1.14.3" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/stake-accounts/Cargo.toml b/stake-accounts/Cargo.toml index 49fdaf0b7aea78..3cd962b5972f84 100644 --- a/stake-accounts/Cargo.toml +++ b/stake-accounts/Cargo.toml @@ -3,7 +3,7 @@ name = "solana-stake-accounts" description = "Blockchain, Rebuilt for Scale" authors = ["Solana Maintainers "] edition = "2021" -version = "1.14.2" +version = "1.14.3" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -11,15 +11,15 @@ documentation = "https://docs.rs/solana-stake-accounts" [dependencies] clap = "2.33.1" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.2" } -solana-cli-config = { path = "../cli-config", version = "=1.14.2" } -solana-client = { path = "../client", version = "=1.14.2" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.2" } -solana-sdk = { path = "../sdk", version = "=1.14.2" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.2" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.3" } +solana-cli-config = { path = "../cli-config", version = "=1.14.3" } +solana-client = { path = "../client", version = "=1.14.3" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.3" } +solana-sdk = { path = "../sdk", version = "=1.14.3" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.3" } [dev-dependencies] -solana-runtime = { path = "../runtime", version = "=1.14.2" } +solana-runtime = { path = "../runtime", version = "=1.14.3" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/storage-bigtable/Cargo.toml b/storage-bigtable/Cargo.toml index 051f2fdb2c8e34..ce917ac8759f20 100644 --- a/storage-bigtable/Cargo.toml +++ b/storage-bigtable/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-storage-bigtable" -version = "1.14.2" +version = "1.14.3" description = "Solana Storage BigTable" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -27,10 +27,10 @@ prost-types = "0.11.0" serde = "1.0.138" serde_derive = "1.0.103" smpl_jwt = "0.7.1" -solana-metrics = { path = "../metrics", version = "=1.14.2" } -solana-sdk = { path = "../sdk", version = "=1.14.2" } -solana-storage-proto = { path = "../storage-proto", version = "=1.14.2" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.2" } +solana-metrics = { path = "../metrics", version = "=1.14.3" } +solana-sdk = { path = "../sdk", version = "=1.14.3" } +solana-storage-proto = { path = "../storage-proto", version = "=1.14.3" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.3" } thiserror = "1.0" tokio = "1" tonic = { version = "0.8.0", features = ["tls", "transport"] } diff --git a/storage-bigtable/build-proto/Cargo.lock b/storage-bigtable/build-proto/Cargo.lock index 40d09b2ae440bd..2a2377fcd87859 100644 --- a/storage-bigtable/build-proto/Cargo.lock +++ b/storage-bigtable/build-proto/Cargo.lock @@ -219,7 +219,7 @@ dependencies = [ [[package]] name = "proto" -version = "1.14.2" +version = "1.14.3" dependencies = [ "protobuf-src", "tonic-build", diff --git a/storage-bigtable/build-proto/Cargo.toml b/storage-bigtable/build-proto/Cargo.toml index 8d64fc717d74f2..3d7da4ee36c827 100644 --- a/storage-bigtable/build-proto/Cargo.toml +++ b/storage-bigtable/build-proto/Cargo.toml @@ -7,7 +7,7 @@ license = "Apache-2.0" name = "proto" publish = false repository = "https://github.com/solana-labs/solana" -version = "1.14.2" +version = "1.14.3" [workspace] diff --git a/storage-proto/Cargo.toml b/storage-proto/Cargo.toml index 0e515fa636f97b..99673e952c35fb 100644 --- a/storage-proto/Cargo.toml +++ b/storage-proto/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-storage-proto" -version = "1.14.2" +version = "1.14.3" description = "Solana Storage Protobuf Definitions" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,9 +14,9 @@ bincode = "1.3.3" bs58 = "0.4.0" prost = "0.11.0" serde = "1.0.138" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.2" } -solana-sdk = { path = "../sdk", version = "=1.14.2" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.2" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.3" } +solana-sdk = { path = "../sdk", version = "=1.14.3" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.3" } [dev-dependencies] enum-iterator = "0.8.1" diff --git a/streamer/Cargo.toml b/streamer/Cargo.toml index d34177b80ae81b..e471f98e199eb0 100644 --- a/streamer/Cargo.toml +++ b/streamer/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-streamer" -version = "1.14.2" +version = "1.14.3" description = "Solana Streamer" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -25,15 +25,15 @@ quinn = "0.8.3" rand = "0.7.0" rcgen = "0.9.2" rustls = { version = "0.20.6", features = ["dangerous_configuration"] } -solana-metrics = { path = "../metrics", version = "=1.14.2" } -solana-perf = { path = "../perf", version = "=1.14.2" } -solana-sdk = { path = "../sdk", version = "=1.14.2" } +solana-metrics = { path = "../metrics", version = "=1.14.3" } +solana-perf = { path = "../perf", version = "=1.14.3" } +solana-sdk = { path = "../sdk", version = "=1.14.3" } thiserror = "1.0" tokio = { version = "1", features = ["full"] } x509-parser = "0.14.0" [dev-dependencies] -solana-logger = { path = "../logger", version = "=1.14.2" } +solana-logger = { path = "../logger", version = "=1.14.3" } [lib] crate-type = ["lib"] diff --git a/sys-tuner/Cargo.toml b/sys-tuner/Cargo.toml index 987b35f2106cd6..159295078b3597 100644 --- a/sys-tuner/Cargo.toml +++ b/sys-tuner/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-sys-tuner" description = "The solana cluster system tuner daemon" -version = "1.14.2" +version = "1.14.3" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,8 +14,8 @@ publish = true clap = "2.33.1" libc = "0.2.126" log = "0.4.17" -solana-logger = { path = "../logger", version = "=1.14.2" } -solana-version = { path = "../version", version = "=1.14.2" } +solana-logger = { path = "../logger", version = "=1.14.3" } +solana-version = { path = "../version", version = "=1.14.3" } [target."cfg(unix)".dependencies] unix_socket2 = "0.5.4" diff --git a/test-validator/Cargo.toml b/test-validator/Cargo.toml index 9291774d63b4c4..311bbffad4f9da 100644 --- a/test-validator/Cargo.toml +++ b/test-validator/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "solana-test-validator" description = "Blockchain, Rebuilt for Scale" -version = "1.14.2" +version = "1.14.3" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-test-validator" readme = "../README.md" @@ -15,19 +15,19 @@ base64 = "0.13.0" log = "0.4.17" serde_derive = "1.0.103" serde_json = "1.0.81" -solana-cli-output = { path = "../cli-output", version = "=1.14.2" } -solana-client = { path = "../client", version = "=1.14.2" } -solana-core = { path = "../core", version = "=1.14.2" } -solana-gossip = { path = "../gossip", version = "=1.14.2" } -solana-ledger = { path = "../ledger", version = "=1.14.2" } -solana-logger = { path = "../logger", version = "=1.14.2" } -solana-net-utils = { path = "../net-utils", version = "=1.14.2" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.2" } -solana-program-test = { path = "../program-test", version = "=1.14.2" } -solana-rpc = { path = "../rpc", version = "=1.14.2" } -solana-runtime = { path = "../runtime", version = "=1.14.2" } -solana-sdk = { path = "../sdk", version = "=1.14.2" } -solana-streamer = { path = "../streamer", version = "=1.14.2" } +solana-cli-output = { path = "../cli-output", version = "=1.14.3" } +solana-client = { path = "../client", version = "=1.14.3" } +solana-core = { path = "../core", version = "=1.14.3" } +solana-gossip = { path = "../gossip", version = "=1.14.3" } +solana-ledger = { path = "../ledger", version = "=1.14.3" } +solana-logger = { path = "../logger", version = "=1.14.3" } +solana-net-utils = { path = "../net-utils", version = "=1.14.3" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.3" } +solana-program-test = { path = "../program-test", version = "=1.14.3" } +solana-rpc = { path = "../rpc", version = "=1.14.3" } +solana-runtime = { path = "../runtime", version = "=1.14.3" } +solana-sdk = { path = "../sdk", version = "=1.14.3" } +solana-streamer = { path = "../streamer", version = "=1.14.3" } tokio = { version = "1", features = ["full"] } [package.metadata.docs.rs] diff --git a/tokens/Cargo.toml b/tokens/Cargo.toml index 1e8945b881cd45..58762f6d1bab45 100644 --- a/tokens/Cargo.toml +++ b/tokens/Cargo.toml @@ -3,7 +3,7 @@ name = "solana-tokens" description = "Blockchain, Rebuilt for Scale" authors = ["Solana Maintainers "] edition = "2021" -version = "1.14.2" +version = "1.14.3" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -19,14 +19,14 @@ indexmap = "1.9.1" indicatif = "0.16.2" pickledb = "0.4.1" serde = { version = "1.0", features = ["derive"] } -solana-account-decoder = { path = "../account-decoder", version = "=1.14.2" } -solana-clap-utils = { path = "../clap-utils", version = "=1.14.2" } -solana-cli-config = { path = "../cli-config", version = "=1.14.2" } -solana-client = { path = "../client", version = "=1.14.2" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.2" } -solana-sdk = { path = "../sdk", version = "=1.14.2" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.2" } -solana-version = { path = "../version", version = "=1.14.2" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.3" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.3" } +solana-cli-config = { path = "../cli-config", version = "=1.14.3" } +solana-client = { path = "../client", version = "=1.14.3" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.3" } +solana-sdk = { path = "../sdk", version = "=1.14.3" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.3" } +solana-version = { path = "../version", version = "=1.14.3" } spl-associated-token-account = { version = "=1.1.1" } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } tempfile = "3.3.0" @@ -34,6 +34,6 @@ thiserror = "1.0" [dev-dependencies] bincode = "1.3.3" -solana-logger = { path = "../logger", version = "=1.14.2" } -solana-streamer = { path = "../streamer", version = "=1.14.2" } -solana-test-validator = { path = "../test-validator", version = "=1.14.2" } +solana-logger = { path = "../logger", version = "=1.14.3" } +solana-streamer = { path = "../streamer", version = "=1.14.3" } +solana-test-validator = { path = "../test-validator", version = "=1.14.3" } diff --git a/transaction-dos/Cargo.toml b/transaction-dos/Cargo.toml index 93447fa00be807..84dc2f5a79fae5 100644 --- a/transaction-dos/Cargo.toml +++ b/transaction-dos/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-transaction-dos" -version = "1.14.2" +version = "1.14.3" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,23 +14,23 @@ clap = "2.33.1" log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.2" } -solana-cli = { path = "../cli", version = "=1.14.2" } -solana-client = { path = "../client", version = "=1.14.2" } -solana-core = { path = "../core", version = "=1.14.2" } -solana-faucet = { path = "../faucet", version = "=1.14.2" } -solana-gossip = { path = "../gossip", version = "=1.14.2" } -solana-logger = { path = "../logger", version = "=1.14.2" } -solana-measure = { path = "../measure", version = "=1.14.2" } -solana-net-utils = { path = "../net-utils", version = "=1.14.2" } -solana-runtime = { path = "../runtime", version = "=1.14.2" } -solana-sdk = { path = "../sdk", version = "=1.14.2" } -solana-streamer = { path = "../streamer", version = "=1.14.2" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.2" } -solana-version = { path = "../version", version = "=1.14.2" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.3" } +solana-cli = { path = "../cli", version = "=1.14.3" } +solana-client = { path = "../client", version = "=1.14.3" } +solana-core = { path = "../core", version = "=1.14.3" } +solana-faucet = { path = "../faucet", version = "=1.14.3" } +solana-gossip = { path = "../gossip", version = "=1.14.3" } +solana-logger = { path = "../logger", version = "=1.14.3" } +solana-measure = { path = "../measure", version = "=1.14.3" } +solana-net-utils = { path = "../net-utils", version = "=1.14.3" } +solana-runtime = { path = "../runtime", version = "=1.14.3" } +solana-sdk = { path = "../sdk", version = "=1.14.3" } +solana-streamer = { path = "../streamer", version = "=1.14.3" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.3" } +solana-version = { path = "../version", version = "=1.14.3" } [dev-dependencies] -solana-local-cluster = { path = "../local-cluster", version = "=1.14.2" } +solana-local-cluster = { path = "../local-cluster", version = "=1.14.3" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/transaction-status/Cargo.toml b/transaction-status/Cargo.toml index 20abfe9a6f3fa1..36291299cef7a5 100644 --- a/transaction-status/Cargo.toml +++ b/transaction-status/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-transaction-status" -version = "1.14.2" +version = "1.14.3" description = "Solana transaction status types" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -20,11 +20,11 @@ log = "0.4.17" serde = "1.0.138" serde_derive = "1.0.103" serde_json = "1.0.81" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.2" } -solana-measure = { path = "../measure", version = "=1.14.2" } -solana-metrics = { path = "../metrics", version = "=1.14.2" } -solana-sdk = { path = "../sdk", version = "=1.14.2" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.2" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.3" } +solana-measure = { path = "../measure", version = "=1.14.3" } +solana-metrics = { path = "../metrics", version = "=1.14.3" } +solana-sdk = { path = "../sdk", version = "=1.14.3" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.3" } spl-associated-token-account = { version = "=1.1.1", features = ["no-entrypoint"] } spl-memo = { version = "=3.0.1", features = ["no-entrypoint"] } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } diff --git a/upload-perf/Cargo.toml b/upload-perf/Cargo.toml index 23da5d2fa27253..5799a1eaf58289 100644 --- a/upload-perf/Cargo.toml +++ b/upload-perf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-upload-perf" -version = "1.14.2" +version = "1.14.3" description = "Metrics Upload Utility" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -11,7 +11,7 @@ publish = false [dependencies] serde_json = "1.0.81" -solana-metrics = { path = "../metrics", version = "=1.14.2" } +solana-metrics = { path = "../metrics", version = "=1.14.3" } [[bin]] name = "solana-upload-perf" diff --git a/validator/Cargo.toml b/validator/Cargo.toml index 877ffccbc9fe20..af0b7169a1c78a 100644 --- a/validator/Cargo.toml +++ b/validator/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-validator" description = "Blockchain, Rebuilt for Scale" -version = "1.14.2" +version = "1.14.3" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -28,30 +28,30 @@ num_cpus = "1.13.1" rand = "0.7.0" serde = "1.0.138" serde_json = "1.0.81" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.2" } -solana-cli-config = { path = "../cli-config", version = "=1.14.2" } -solana-client = { path = "../client", version = "=1.14.2" } -solana-core = { path = "../core", version = "=1.14.2" } -solana-download-utils = { path = "../download-utils", version = "=1.14.2" } -solana-entry = { path = "../entry", version = "=1.14.2" } -solana-faucet = { path = "../faucet", version = "=1.14.2" } -solana-genesis-utils = { path = "../genesis-utils", version = "=1.14.2" } -solana-gossip = { path = "../gossip", version = "=1.14.2" } -solana-ledger = { path = "../ledger", version = "=1.14.2" } -solana-logger = { path = "../logger", version = "=1.14.2" } -solana-metrics = { path = "../metrics", version = "=1.14.2" } -solana-net-utils = { path = "../net-utils", version = "=1.14.2" } -solana-perf = { path = "../perf", version = "=1.14.2" } -solana-poh = { path = "../poh", version = "=1.14.2" } -solana-rpc = { path = "../rpc", version = "=1.14.2" } -solana-runtime = { path = "../runtime", version = "=1.14.2" } -solana-sdk = { path = "../sdk", version = "=1.14.2" } -solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.2" } -solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.2" } -solana-streamer = { path = "../streamer", version = "=1.14.2" } -solana-test-validator = { path = "../test-validator", version = "=1.14.2" } -solana-version = { path = "../version", version = "=1.14.2" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.2" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.3" } +solana-cli-config = { path = "../cli-config", version = "=1.14.3" } +solana-client = { path = "../client", version = "=1.14.3" } +solana-core = { path = "../core", version = "=1.14.3" } +solana-download-utils = { path = "../download-utils", version = "=1.14.3" } +solana-entry = { path = "../entry", version = "=1.14.3" } +solana-faucet = { path = "../faucet", version = "=1.14.3" } +solana-genesis-utils = { path = "../genesis-utils", version = "=1.14.3" } +solana-gossip = { path = "../gossip", version = "=1.14.3" } +solana-ledger = { path = "../ledger", version = "=1.14.3" } +solana-logger = { path = "../logger", version = "=1.14.3" } +solana-metrics = { path = "../metrics", version = "=1.14.3" } +solana-net-utils = { path = "../net-utils", version = "=1.14.3" } +solana-perf = { path = "../perf", version = "=1.14.3" } +solana-poh = { path = "../poh", version = "=1.14.3" } +solana-rpc = { path = "../rpc", version = "=1.14.3" } +solana-runtime = { path = "../runtime", version = "=1.14.3" } +solana-sdk = { path = "../sdk", version = "=1.14.3" } +solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.3" } +solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.3" } +solana-streamer = { path = "../streamer", version = "=1.14.3" } +solana-test-validator = { path = "../test-validator", version = "=1.14.3" } +solana-version = { path = "../version", version = "=1.14.3" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.3" } symlink = "0.1.0" [target.'cfg(not(target_env = "msvc"))'.dependencies] diff --git a/version/Cargo.toml b/version/Cargo.toml index d2800776ab937f..440dc121e5818a 100644 --- a/version/Cargo.toml +++ b/version/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-version" -version = "1.14.2" +version = "1.14.3" description = "Solana Version" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,9 +14,9 @@ log = "0.4.17" semver = "1.0.10" serde = "1.0.138" serde_derive = "1.0.103" -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.2" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.2" } -solana-sdk = { path = "../sdk", version = "=1.14.2" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.3" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.3" } +solana-sdk = { path = "../sdk", version = "=1.14.3" } [lib] name = "solana_version" diff --git a/watchtower/Cargo.toml b/watchtower/Cargo.toml index 1b99c5a48e8c53..bc8d1b769033bc 100644 --- a/watchtower/Cargo.toml +++ b/watchtower/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-watchtower" description = "Blockchain, Rebuilt for Scale" -version = "1.14.2" +version = "1.14.3" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -13,15 +13,15 @@ documentation = "https://docs.rs/solana-watchtower" clap = "2.33.1" humantime = "2.0.1" log = "0.4.17" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.2" } -solana-cli-config = { path = "../cli-config", version = "=1.14.2" } -solana-cli-output = { path = "../cli-output", version = "=1.14.2" } -solana-client = { path = "../client", version = "=1.14.2" } -solana-logger = { path = "../logger", version = "=1.14.2" } -solana-metrics = { path = "../metrics", version = "=1.14.2" } -solana-notifier = { path = "../notifier", version = "=1.14.2" } -solana-sdk = { path = "../sdk", version = "=1.14.2" } -solana-version = { path = "../version", version = "=1.14.2" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.3" } +solana-cli-config = { path = "../cli-config", version = "=1.14.3" } +solana-cli-output = { path = "../cli-output", version = "=1.14.3" } +solana-client = { path = "../client", version = "=1.14.3" } +solana-logger = { path = "../logger", version = "=1.14.3" } +solana-metrics = { path = "../metrics", version = "=1.14.3" } +solana-notifier = { path = "../notifier", version = "=1.14.3" } +solana-sdk = { path = "../sdk", version = "=1.14.3" } +solana-version = { path = "../version", version = "=1.14.3" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/zk-token-sdk/Cargo.toml b/zk-token-sdk/Cargo.toml index db833848132b90..594e12d2bce792 100644 --- a/zk-token-sdk/Cargo.toml +++ b/zk-token-sdk/Cargo.toml @@ -3,7 +3,7 @@ name = "solana-zk-token-sdk" description = "Solana Zk Token SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" -version = "1.14.2" +version = "1.14.3" license = "Apache-2.0" edition = "2021" @@ -12,7 +12,7 @@ base64 = "0.13" bytemuck = { version = "1.11.0", features = ["derive"] } num-derive = "0.3" num-traits = "0.2" -solana-program = { path = "../sdk/program", version = "=1.14.2" } +solana-program = { path = "../sdk/program", version = "=1.14.3" } [target.'cfg(not(target_os = "solana"))'.dependencies] aes-gcm-siv = "0.10.3" @@ -29,7 +29,7 @@ rand = "0.7" serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" sha3 = "0.9" -solana-sdk = { path = "../sdk", version = "=1.14.2" } +solana-sdk = { path = "../sdk", version = "=1.14.3" } subtle = "2" thiserror = "1.0" zeroize = { version = "1.3", default-features = false, features = ["zeroize_derive"] } From 3bb2d06f3a164772cc45fb45d6b054f252e007ec Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Fri, 16 Sep 2022 21:20:29 +0100 Subject: [PATCH 125/465] Increase transaction account lock limit from 64 to 128 (backport #27242) (#27810) * Increase transaction account lock limit from 64 to 128 (backport #27242) * resolve conflicts Co-authored-by: Justin Starry --- programs/bpf/tests/programs.rs | 2 +- programs/bpf_loader/src/syscalls/cpi.rs | 10 +++++- runtime/src/accounts.rs | 37 +++++++++++++------- runtime/src/bank.rs | 46 +++++++++++++++++++------ sdk/bpf/c/inc/sol/cpi.h | 4 +-- sdk/bpf/c/inc/sol/inc/cpi.inc | 4 +-- sdk/program/src/syscalls/mod.rs | 4 +-- sdk/src/feature_set.rs | 5 +++ sdk/src/transaction/sanitized.rs | 13 ++++--- 9 files changed, 88 insertions(+), 37 deletions(-) diff --git a/programs/bpf/tests/programs.rs b/programs/bpf/tests/programs.rs index a1ac58440ff446..186841d4f8cb38 100644 --- a/programs/bpf/tests/programs.rs +++ b/programs/bpf/tests/programs.rs @@ -1264,7 +1264,7 @@ fn test_program_bpf_invoke_sanity() { format!("Program log: invoke {program_lang} program"), "Program log: Test max account infos exceeded".into(), "skip".into(), // don't compare compute consumption logs - "Program failed to complete: Invoked an instruction with too many account info's (65 > 64)".into(), + "Program failed to complete: Invoked an instruction with too many account info's (129 > 128)".into(), format!("Program {invoke_program_id} failed: Program failed to complete"), ]), ); diff --git a/programs/bpf_loader/src/syscalls/cpi.rs b/programs/bpf_loader/src/syscalls/cpi.rs index f569812565d3e3..96eaf810341d97 100644 --- a/programs/bpf_loader/src/syscalls/cpi.rs +++ b/programs/bpf_loader/src/syscalls/cpi.rs @@ -792,8 +792,16 @@ fn check_account_infos( .feature_set .is_active(&feature_set::loosen_cpi_size_restriction::id()) { + let max_cpi_account_infos = if invoke_context + .feature_set + .is_active(&feature_set::increase_tx_account_lock_limit::id()) + { + MAX_CPI_ACCOUNT_INFOS + } else { + 64 + }; let num_account_infos = num_account_infos as u64; - let max_account_infos = MAX_CPI_ACCOUNT_INFOS as u64; + let max_account_infos = max_cpi_account_infos as u64; if num_account_infos > max_account_infos { return Err(SyscallError::MaxInstructionAccountInfosExceeded { num_account_infos, diff --git a/runtime/src/accounts.rs b/runtime/src/accounts.rs index 66770e85675492..b36e2825d4c457 100644 --- a/runtime/src/accounts.rs +++ b/runtime/src/accounts.rs @@ -1139,9 +1139,11 @@ impl Accounts { pub fn lock_accounts<'a>( &self, txs: impl Iterator, + tx_account_lock_limit: usize, ) -> Vec> { - let tx_account_locks_results: Vec> = - txs.map(|tx| tx.get_account_locks()).collect(); + let tx_account_locks_results: Vec> = txs + .map(|tx| tx.get_account_locks(tx_account_lock_limit)) + .collect(); self.lock_accounts_inner(tx_account_locks_results) } @@ -1151,11 +1153,12 @@ impl Accounts { &self, txs: impl Iterator, results: impl Iterator>, + tx_account_lock_limit: usize, ) -> Vec> { let tx_account_locks_results: Vec> = txs .zip(results) .map(|(tx, result)| match result { - Ok(()) => tx.get_account_locks(), + Ok(()) => tx.get_account_locks(tx_account_lock_limit), Err(err) => Err(err.clone()), }) .collect(); @@ -2532,7 +2535,7 @@ mod tests { }; let tx = new_sanitized_tx(&[&keypair], message, Hash::default()); - let results = accounts.lock_accounts([tx].iter()); + let results = accounts.lock_accounts([tx].iter(), MAX_TX_ACCOUNT_LOCKS); assert_eq!(results[0], Err(TransactionError::AccountLoadedTwice)); } @@ -2565,7 +2568,7 @@ mod tests { }; let txs = vec![new_sanitized_tx(&[&keypair], message, Hash::default())]; - let results = accounts.lock_accounts(txs.iter()); + let results = accounts.lock_accounts(txs.iter(), MAX_TX_ACCOUNT_LOCKS); assert_eq!(results[0], Ok(())); accounts.unlock_accounts(txs.iter(), &results); } @@ -2587,7 +2590,7 @@ mod tests { }; let txs = vec![new_sanitized_tx(&[&keypair], message, Hash::default())]; - let results = accounts.lock_accounts(txs.iter()); + let results = accounts.lock_accounts(txs.iter(), MAX_TX_ACCOUNT_LOCKS); assert_eq!(results[0], Err(TransactionError::TooManyAccountLocks)); } } @@ -2626,7 +2629,7 @@ mod tests { instructions, ); let tx = new_sanitized_tx(&[&keypair0], message, Hash::default()); - let results0 = accounts.lock_accounts([tx.clone()].iter()); + let results0 = accounts.lock_accounts([tx.clone()].iter(), MAX_TX_ACCOUNT_LOCKS); assert!(results0[0].is_ok()); assert_eq!( @@ -2661,7 +2664,7 @@ mod tests { ); let tx1 = new_sanitized_tx(&[&keypair1], message, Hash::default()); let txs = vec![tx0, tx1]; - let results1 = accounts.lock_accounts(txs.iter()); + let results1 = accounts.lock_accounts(txs.iter(), MAX_TX_ACCOUNT_LOCKS); assert!(results1[0].is_ok()); // Read-only account (keypair1) can be referenced multiple times assert!(results1[1].is_err()); // Read-only account (keypair1) cannot also be locked as writable @@ -2688,7 +2691,7 @@ mod tests { instructions, ); let tx = new_sanitized_tx(&[&keypair1], message, Hash::default()); - let results2 = accounts.lock_accounts([tx].iter()); + let results2 = accounts.lock_accounts([tx].iter(), MAX_TX_ACCOUNT_LOCKS); assert!(results2[0].is_ok()); // Now keypair1 account can be locked as writable // Check that read-only lock with zero references is deleted @@ -2757,7 +2760,9 @@ mod tests { let exit_clone = exit_clone.clone(); loop { let txs = vec![writable_tx.clone()]; - let results = accounts_clone.clone().lock_accounts(txs.iter()); + let results = accounts_clone + .clone() + .lock_accounts(txs.iter(), MAX_TX_ACCOUNT_LOCKS); for result in results.iter() { if result.is_ok() { counter_clone.clone().fetch_add(1, Ordering::SeqCst); @@ -2772,7 +2777,9 @@ mod tests { let counter_clone = counter; for _ in 0..5 { let txs = vec![readonly_tx.clone()]; - let results = accounts_arc.clone().lock_accounts(txs.iter()); + let results = accounts_arc + .clone() + .lock_accounts(txs.iter(), MAX_TX_ACCOUNT_LOCKS); if results[0].is_ok() { let counter_value = counter_clone.clone().load(Ordering::SeqCst); thread::sleep(time::Duration::from_millis(50)); @@ -2818,7 +2825,7 @@ mod tests { instructions, ); let tx = new_sanitized_tx(&[&keypair0], message, Hash::default()); - let results0 = accounts.lock_accounts([tx].iter()); + let results0 = accounts.lock_accounts([tx].iter(), MAX_TX_ACCOUNT_LOCKS); assert!(results0[0].is_ok()); // Instruction program-id account demoted to readonly @@ -2909,7 +2916,11 @@ mod tests { Ok(()), ]; - let results = accounts.lock_accounts_with_results(txs.iter(), qos_results.iter()); + let results = accounts.lock_accounts_with_results( + txs.iter(), + qos_results.iter(), + MAX_TX_ACCOUNT_LOCKS, + ); assert!(results[0].is_ok()); // Read-only account (keypair0) can be referenced multiple times assert!(results[1].is_err()); // is not locked due to !qos_results[1].is_ok() diff --git a/runtime/src/bank.rs b/runtime/src/bank.rs index dfd30066fa4796..91faab65025167 100644 --- a/runtime/src/bank.rs +++ b/runtime/src/bank.rs @@ -140,7 +140,7 @@ use { timing::years_as_slots, transaction::{ MessageHash, Result, SanitizedTransaction, Transaction, TransactionError, - TransactionVerificationMode, VersionedTransaction, + TransactionVerificationMode, VersionedTransaction, MAX_TX_ACCOUNT_LOCKS, }, transaction_context::{ ExecutionRecord, InstructionTrace, TransactionAccount, TransactionContext, @@ -3880,13 +3880,28 @@ impl Bank { } } + /// Get the max number of accounts that a transaction may lock in this block + pub fn get_transaction_account_lock_limit(&self) -> usize { + if self + .feature_set + .is_active(&feature_set::increase_tx_account_lock_limit::id()) + { + MAX_TX_ACCOUNT_LOCKS + } else { + 64 + } + } + /// Prepare a transaction batch from a list of legacy transactions. Used for tests only. pub fn prepare_batch_for_tests(&self, txs: Vec) -> TransactionBatch { let sanitized_txs = txs .into_iter() .map(SanitizedTransaction::from_transaction_for_tests) .collect::>(); - let lock_results = self.rc.accounts.lock_accounts(sanitized_txs.iter()); + let lock_results = self.rc.accounts.lock_accounts( + sanitized_txs.iter(), + self.get_transaction_account_lock_limit(), + ); TransactionBatch::new(lock_results, self, Cow::Owned(sanitized_txs)) } @@ -3906,7 +3921,10 @@ impl Bank { ) }) .collect::>>()?; - let lock_results = self.rc.accounts.lock_accounts(sanitized_txs.iter()); + let lock_results = self.rc.accounts.lock_accounts( + sanitized_txs.iter(), + self.get_transaction_account_lock_limit(), + ); Ok(TransactionBatch::new( lock_results, self, @@ -3919,7 +3937,10 @@ impl Bank { &'a self, txs: &'b [SanitizedTransaction], ) -> TransactionBatch<'a, 'b> { - let lock_results = self.rc.accounts.lock_accounts(txs.iter()); + let lock_results = self + .rc + .accounts + .lock_accounts(txs.iter(), self.get_transaction_account_lock_limit()); TransactionBatch::new(lock_results, self, Cow::Borrowed(txs)) } @@ -3931,10 +3952,11 @@ impl Bank { transaction_results: impl Iterator>, ) -> TransactionBatch<'a, 'b> { // this lock_results could be: Ok, AccountInUse, WouldExceedBlockMaxLimit or WouldExceedAccountMaxLimit - let lock_results = self - .rc - .accounts - .lock_accounts_with_results(transactions.iter(), transaction_results); + let lock_results = self.rc.accounts.lock_accounts_with_results( + transactions.iter(), + transaction_results, + self.get_transaction_account_lock_limit(), + ); TransactionBatch::new(lock_results, self, Cow::Borrowed(transactions)) } @@ -3943,7 +3965,9 @@ impl Bank { &'a self, transaction: SanitizedTransaction, ) -> TransactionBatch<'a, '_> { - let lock_result = transaction.get_account_locks().map(|_| ()); + let lock_result = transaction + .get_account_locks(self.get_transaction_account_lock_limit()) + .map(|_| ()); let mut batch = TransactionBatch::new(vec![lock_result], self, Cow::Owned(vec![transaction])); batch.set_needs_unlock(false); @@ -8065,7 +8089,6 @@ pub(crate) mod tests { system_instruction::{self, SystemError, MAX_PERMITTED_DATA_LENGTH}, system_program, timing::duration_as_s, - transaction::MAX_TX_ACCOUNT_LOCKS, transaction_context::InstructionContext, }, solana_vote_program::{ @@ -14287,7 +14310,8 @@ pub(crate) mod tests { bank.last_blockhash(), ); - while tx.message.account_keys.len() <= MAX_TX_ACCOUNT_LOCKS { + let transaction_account_lock_limit = bank.get_transaction_account_lock_limit(); + while tx.message.account_keys.len() <= transaction_account_lock_limit { tx.message.account_keys.push(solana_sdk::pubkey::new_rand()); } diff --git a/sdk/bpf/c/inc/sol/cpi.h b/sdk/bpf/c/inc/sol/cpi.h index a1c4c21de5e7f7..b3748cff2240f9 100644 --- a/sdk/bpf/c/inc/sol/cpi.h +++ b/sdk/bpf/c/inc/sol/cpi.h @@ -28,10 +28,10 @@ static const uint8_t MAX_CPI_INSTRUCTION_ACCOUNTS = 255; /** * Maximum number of account info structs that can be used in a single CPI * invocation. A limit on account info structs is effectively the same as - * limiting the number of unique accounts. 64 was chosen to match the max + * limiting the number of unique accounts. 128 was chosen to match the max * number of locked accounts per transaction (MAX_TX_ACCOUNT_LOCKS). */ -static const uint8_t MAX_CPI_ACCOUNT_INFOS = 64; +static const uint16_t MAX_CPI_ACCOUNT_INFOS = 128; /** * Account Meta diff --git a/sdk/bpf/c/inc/sol/inc/cpi.inc b/sdk/bpf/c/inc/sol/inc/cpi.inc index ce615e90b84f4d..41ce4fb01a691b 100644 --- a/sdk/bpf/c/inc/sol/inc/cpi.inc +++ b/sdk/bpf/c/inc/sol/inc/cpi.inc @@ -28,10 +28,10 @@ static const uint8_t MAX_CPI_INSTRUCTION_ACCOUNTS = 255; /** * Maximum number of account info structs that can be used in a single CPI * invocation. A limit on account info structs is effectively the same as - * limiting the number of unique accounts. 64 was chosen to match the max + * limiting the number of unique accounts. 128 was chosen to match the max * number of locked accounts per transaction (MAX_TX_ACCOUNT_LOCKS). */ -static const uint8_t MAX_CPI_ACCOUNT_INFOS = 64; +static const uint16_t MAX_CPI_ACCOUNT_INFOS = 128; /** * Account Meta diff --git a/sdk/program/src/syscalls/mod.rs b/sdk/program/src/syscalls/mod.rs index aa0a85c23f4590..d66c9361e95792 100644 --- a/sdk/program/src/syscalls/mod.rs +++ b/sdk/program/src/syscalls/mod.rs @@ -16,6 +16,6 @@ pub const MAX_CPI_INSTRUCTION_ACCOUNTS: u8 = u8::MAX; /// Maximum number of account info structs that can be used in a single CPI /// invocation. A limit on account info structs is effectively the same as -/// limiting the number of unique accounts. 64 was chosen to match the max +/// limiting the number of unique accounts. 128 was chosen to match the max /// number of locked accounts per transaction (MAX_TX_ACCOUNT_LOCKS). -pub const MAX_CPI_ACCOUNT_INFOS: usize = 64; +pub const MAX_CPI_ACCOUNT_INFOS: usize = 128; diff --git a/sdk/src/feature_set.rs b/sdk/src/feature_set.rs index f30d439c2e79bb..d4cf48400c0e85 100644 --- a/sdk/src/feature_set.rs +++ b/sdk/src/feature_set.rs @@ -508,6 +508,10 @@ pub mod return_none_for_zero_lamport_accounts { solana_sdk::declare_id!("7K5HFrS1WAq6ND7RQbShXZXbtAookyTfaDQPTJNuZpze"); } +pub mod increase_tx_account_lock_limit { + solana_sdk::declare_id!("9LZdXeKGeBV6hRLdxS1rHbHoEUsKqesCC2ZAPTPKJAbK"); +} + lazy_static! { /// Map of feature identifiers to user-visible description pub static ref FEATURE_NAMES: HashMap = [ @@ -629,6 +633,7 @@ lazy_static! { (incremental_snapshot_only_incremental_hash_calculation::id(), "only hash accounts in incremental snapshot during incremental snapshot creation #26799"), (vote_state_update_root_fix::id(), "fix root in vote state updates #27361"), (return_none_for_zero_lamport_accounts::id(), "return none for zero lamport accounts #27800"), + (increase_tx_account_lock_limit::id(), "increase tx account lock limit to 128 #27241"), /*************** ADD NEW FEATURES HERE ***************/ ] .iter() diff --git a/sdk/src/transaction/sanitized.rs b/sdk/src/transaction/sanitized.rs index 35a379f724da0a..06a963a4354f66 100644 --- a/sdk/src/transaction/sanitized.rs +++ b/sdk/src/transaction/sanitized.rs @@ -20,9 +20,9 @@ use { }; /// Maximum number of accounts that a transaction may lock. -/// 64 was chosen because it is roughly twice the previous -/// number of account keys that could fit in a legacy tx. -pub const MAX_TX_ACCOUNT_LOCKS: usize = 64; +/// 128 was chosen because it is the minimum number of accounts +/// needed for the Neon EVM implementation. +pub const MAX_TX_ACCOUNT_LOCKS: usize = 128; /// Sanitized transaction and the hash of its message #[derive(Debug, Clone)] @@ -208,10 +208,13 @@ impl SanitizedTransaction { } /// Validate and return the account keys locked by this transaction - pub fn get_account_locks(&self) -> Result { + pub fn get_account_locks( + &self, + tx_account_lock_limit: usize, + ) -> Result { if self.message.has_duplicates() { Err(TransactionError::AccountLoadedTwice) - } else if self.message.account_keys().len() > MAX_TX_ACCOUNT_LOCKS { + } else if self.message.account_keys().len() > tx_account_lock_limit { Err(TransactionError::TooManyAccountLocks) } else { Ok(self.get_account_locks_unchecked()) From 0c03f39e9e24455fb2e93ff8936b84466bfe3766 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Fri, 16 Sep 2022 21:55:30 +0000 Subject: [PATCH 126/465] ci: Add spl-token-upgrade to downstream program build (backport #27826) (#27830) ci: Add spl-token-upgrade to downstream program build (#27826) (cherry picked from commit 51ab9627d731c7277217b83fce19be7fd32bcb4a) Co-authored-by: Jon Cinque --- scripts/build-downstream-projects.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/scripts/build-downstream-projects.sh b/scripts/build-downstream-projects.sh index 2efd67cec4aad0..7c1fa5557c467e 100755 --- a/scripts/build-downstream-projects.sh +++ b/scripts/build-downstream-projects.sh @@ -45,6 +45,7 @@ spl() { token/program-2022 token/program-2022-test associated-token-account/program + token-upgrade/program feature-proposal/program governance/addin-mock/program governance/program From 19f5ba4a2ce39d78992c71429584b0587de125e0 Mon Sep 17 00:00:00 2001 From: Ivan Mironov Date: Sun, 7 Aug 2022 15:26:27 +0500 Subject: [PATCH 127/465] Add watchtower option to add custom string into notifications This helps to distinguish between Mainnet and Testnet notifications sent into the same notification channel. Usage example: solana-watchtower --name-suffix " mainnet" ... solana-watchtower --name-suffix " testnet" ... (cherry picked from commit 2f40c5680e8a5fdf91955bd6bb7030455d3d9c30) --- watchtower/src/main.rs | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/watchtower/src/main.rs b/watchtower/src/main.rs index 15504001e57486..f70aa1d3379c92 100644 --- a/watchtower/src/main.rs +++ b/watchtower/src/main.rs @@ -34,6 +34,7 @@ struct Config { monitor_active_stake: bool, unhealthy_threshold: usize, validator_identity_pubkeys: Vec, + name_suffix: String, } fn get_config() -> Config { @@ -134,6 +135,14 @@ fn get_config() -> Config { no alerting should a Bad Gateway error be a side effect of \ the real problem") ) + .arg( + Arg::with_name("name_suffix") + .long("name-suffix") + .value_name("SUFFIX") + .takes_value(true) + .default_value("") + .help("Add this string into all notification messages after \"solana-watchtower\"") + ) .get_matches(); let config = if let Some(config_file) = matches.value_of("config_file") { @@ -159,6 +168,8 @@ fn get_config() -> Config { let monitor_active_stake = matches.is_present("monitor_active_stake"); let ignore_http_bad_gateway = matches.is_present("ignore_http_bad_gateway"); + let name_suffix = value_t_or_exit!(matches, "name_suffix", String); + let config = Config { address_labels: config.address_labels, ignore_http_bad_gateway, @@ -168,6 +179,7 @@ fn get_config() -> Config { monitor_active_stake, unhealthy_threshold, validator_identity_pubkeys, + name_suffix, }; info!("RPC URL: {}", config.json_rpc_url); @@ -337,8 +349,8 @@ fn main() -> Result<(), Box> { if let Some((failure_test_name, failure_error_message)) = &failure { let notification_msg = format!( - "solana-watchtower: Error: {}: {}", - failure_test_name, failure_error_message + "solana-watchtower{}: Error: {}: {}", + config.name_suffix, failure_test_name, failure_error_message ); num_consecutive_failures += 1; if num_consecutive_failures > config.unhealthy_threshold { @@ -370,7 +382,10 @@ fn main() -> Result<(), Box> { humantime::format_duration(alarm_duration) ); info!("{}", all_clear_msg); - notifier.send(&format!("solana-watchtower: {}", all_clear_msg)); + notifier.send(&format!( + "solana-watchtower{}: {}", + config.name_suffix, all_clear_msg + )); } last_notification_msg = "".into(); last_success = Instant::now(); From 6ae6ca4f70612478c0e4b409c9d3268a9d24da09 Mon Sep 17 00:00:00 2001 From: Ivan Mironov Date: Sun, 7 Aug 2022 16:00:32 +0500 Subject: [PATCH 128/465] Add watchtower option to specify RPC timeout This is useful when solana-watchtower is running on slow network. (cherry picked from commit 9159415e1b3851356c97b5176ed444ab9313d927) --- watchtower/src/main.rs | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/watchtower/src/main.rs b/watchtower/src/main.rs index f70aa1d3379c92..bf3d0a807bed79 100644 --- a/watchtower/src/main.rs +++ b/watchtower/src/main.rs @@ -30,6 +30,7 @@ struct Config { ignore_http_bad_gateway: bool, interval: Duration, json_rpc_url: String, + rpc_timeout: Duration, minimum_validator_identity_balance: u64, monitor_active_stake: bool, unhealthy_threshold: usize, @@ -80,6 +81,14 @@ fn get_config() -> Config { .validator(is_url) .help("JSON RPC URL for the cluster"), ) + .arg( + Arg::with_name("rpc_timeout") + .long("rpc-timeout") + .value_name("SECONDS") + .takes_value(true) + .default_value("30") + .help("Timeout value for RPC requests"), + ) .arg( Arg::with_name("interval") .long("interval") @@ -160,6 +169,8 @@ fn get_config() -> Config { )); let json_rpc_url = value_t!(matches, "json_rpc_url", String).unwrap_or_else(|_| config.json_rpc_url.clone()); + let rpc_timeout = value_t_or_exit!(matches, "rpc_timeout", u64); + let rpc_timeout = Duration::from_secs(rpc_timeout); let validator_identity_pubkeys: Vec<_> = pubkeys_of(&matches, "validator_identities") .unwrap_or_default() .into_iter() @@ -175,6 +186,7 @@ fn get_config() -> Config { ignore_http_bad_gateway, interval, json_rpc_url, + rpc_timeout, minimum_validator_identity_balance, monitor_active_stake, unhealthy_threshold, @@ -220,7 +232,7 @@ fn main() -> Result<(), Box> { let config = get_config(); - let rpc_client = RpcClient::new(config.json_rpc_url.clone()); + let rpc_client = RpcClient::new_with_timeout(config.json_rpc_url.clone(), config.rpc_timeout); let notifier = Notifier::default(); let mut last_transaction_count = 0; let mut last_recent_blockhash = Hash::default(); From 672f88056b5a9761360b3a2584eb446f7e4931ee Mon Sep 17 00:00:00 2001 From: Ivan Mironov Date: Sat, 17 Sep 2022 00:42:44 +0500 Subject: [PATCH 129/465] rpc-client: Use regular timeout value for pool idle timeout too Setting pool idle timeout to a value smaller than solana-watchtower's poll interval can fix following error: [2022-08-25T04:03:22.811160892Z INFO solana_watchtower] Failure 1 of 3: solana-watchtower testnet: Error: rpc-error: error sending request for url (https://api.testnet.solana.com/): connection closed before message completed It looks like this happens because either RPC servers or ISPs drop HTTP connections without properly notifying the client in some cases. Similar issue: https://github.com/hyperium/hyper/issues/2136. (cherry picked from commit 798975ffa598a84b45ff21bb276d5b200d9ab0a6) --- client/src/http_sender.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/client/src/http_sender.rs b/client/src/http_sender.rs index 84e1418d7a0fe9..18caad62d6d403 100644 --- a/client/src/http_sender.rs +++ b/client/src/http_sender.rs @@ -59,6 +59,7 @@ impl HttpSender { reqwest::Client::builder() .default_headers(default_headers) .timeout(timeout) + .pool_idle_timeout(timeout) .build() .expect("build rpc client"), ); From de7e274fb47a7db360257be87d2eb78bd44066d9 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Mon, 19 Sep 2022 21:36:44 +0000 Subject: [PATCH 130/465] tracks number of staked/stale/dead nodes in turbine cluster-nodes (backport #27915) (#27924) tracks number of staked/stale/dead nodes in turbine cluster-nodes (#27915) (cherry picked from commit abfb9961359e5c544a6dc143c9d7705164298c11) Co-authored-by: behzad nouri --- core/src/broadcast_stage.rs | 9 +------ core/src/cluster_nodes.rs | 47 +++++++++++++++++++++--------------- core/src/retransmit_stage.rs | 5 ++-- 3 files changed, 31 insertions(+), 30 deletions(-) diff --git a/core/src/broadcast_stage.rs b/core/src/broadcast_stage.rs index 68729600d1983e..61f34d388dabed 100644 --- a/core/src/broadcast_stage.rs +++ b/core/src/broadcast_stage.rs @@ -381,14 +381,7 @@ fn update_peer_stats( last_datapoint_submit: &AtomicInterval, ) { if last_datapoint_submit.should_update(1000) { - let now = timestamp(); - let num_live_peers = cluster_nodes.num_peers_live(now); - let broadcast_len = cluster_nodes.num_peers() + 1; - datapoint_info!( - "cluster_info-num_nodes", - ("live_count", num_live_peers, i64), - ("broadcast_count", broadcast_len, i64) - ); + cluster_nodes.submit_metrics("cluster_nodes_broadcast", timestamp()); } } diff --git a/core/src/cluster_nodes.rs b/core/src/cluster_nodes.rs index 22fcc882c07186..1e1283e81c0d0f 100644 --- a/core/src/cluster_nodes.rs +++ b/core/src/cluster_nodes.rs @@ -87,25 +87,34 @@ impl Node { } impl ClusterNodes { - pub(crate) fn num_peers(&self) -> usize { - self.nodes.len().saturating_sub(1) - } - - // A peer is considered live if they generated their contact info recently. - pub(crate) fn num_peers_live(&self, now: u64) -> usize { - self.nodes - .iter() - .filter(|node| node.pubkey() != self.pubkey) - .filter_map(|node| node.contact_info()) - .filter(|node| { - let elapsed = if node.wallclock < now { - now - node.wallclock - } else { - node.wallclock - now - }; - elapsed < CRDS_GOSSIP_PULL_CRDS_TIMEOUT_MS - }) - .count() + pub(crate) fn submit_metrics(&self, name: &'static str, now: u64) { + let mut num_nodes_dead = 0; + let mut num_nodes_staked = 0; + let mut num_nodes_stale = 0; + for node in &self.nodes { + if node.stake != 0u64 { + num_nodes_staked += 1; + } + match node.contact_info() { + None => { + num_nodes_dead += 1; + } + Some(node) => { + let age = now.saturating_sub(node.wallclock); + if age > CRDS_GOSSIP_PULL_CRDS_TIMEOUT_MS { + num_nodes_stale += 1; + } + } + } + } + num_nodes_stale += num_nodes_dead; + datapoint_info!( + name, + ("num_nodes", self.nodes.len(), i64), + ("num_nodes_dead", num_nodes_dead, i64), + ("num_nodes_staked", num_nodes_staked, i64), + ("num_nodes_stale", num_nodes_stale, i64), + ); } } diff --git a/core/src/retransmit_stage.rs b/core/src/retransmit_stage.rs index bf4e9c2e76819c..2b05396b203175 100644 --- a/core/src/retransmit_stage.rs +++ b/core/src/retransmit_stage.rs @@ -89,10 +89,9 @@ impl RetransmitStats { if self.since.elapsed() < SUBMIT_CADENCE { return; } - let num_peers = cluster_nodes_cache + cluster_nodes_cache .get(root_bank.slot(), root_bank, working_bank, cluster_info) - .num_peers(); - datapoint_info!("retransmit-num_nodes", ("count", num_peers, i64)); + .submit_metrics("cluster_nodes_retransmit", timestamp()); datapoint_info!( "retransmit-stage", ("total_time", self.total_time, i64), From 0dedb99a902496d444dc66baa8204d1cd6fc54df Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Wed, 21 Sep 2022 18:43:54 +0000 Subject: [PATCH 131/465] Add missing fields to JSON-RPC docs (backport #27964) (#27966) Add missing fields to JSON-RPC docs (#27964) * Add docs for computeUnitsConsumed field * Add confirmationStatus to getSignaturesForAddress response docs * Make field-type formatting consistent (cherry picked from commit fa0550da32c63275bca2518851450a57e8dc3e55) Co-authored-by: Tyera Eulberg --- docs/src/developing/clients/jsonrpc-api.md | 95 +++++++++++----------- 1 file changed, 49 insertions(+), 46 deletions(-) diff --git a/docs/src/developing/clients/jsonrpc-api.md b/docs/src/developing/clients/jsonrpc-api.md index bf5d8c2c74ebc2..5ede3e5064a94f 100644 --- a/docs/src/developing/clients/jsonrpc-api.md +++ b/docs/src/developing/clients/jsonrpc-api.md @@ -428,7 +428,7 @@ The result field will be an object with the following fields: - `transactions: ` - present if "full" transaction details are requested; an array of JSON objects containing: - `transaction: ` - [Transaction](#transaction-structure) object, either in JSON format or encoded binary data, depending on encoding parameter - `meta: ` - transaction status metadata object, containing `null` or: - - `err: ` - Error if transaction failed, null if transaction succeeded. [TransactionError definitions](https://github.com/solana-labs/solana/blob/c0c60386544ec9a9ec7119229f37386d9f070523/sdk/src/transaction/error.rs#L13) + - `err: ` - Error if transaction failed, null if transaction succeeded. [TransactionError definitions](https://github.com/solana-labs/solana/blob/c0c60386544ec9a9ec7119229f37386d9f070523/sdk/src/transaction/error.rs#L13) - `fee: ` - fee this transaction was charged, as u64 integer - `preBalances: ` - array of u64 account balances from before the transaction was processed - `postBalances: ` - array of u64 account balances after the transaction was processed @@ -451,6 +451,7 @@ The result field will be an object with the following fields: - `returnData: ` - the most-recent return data generated by an instruction in the transaction, with the following fields: - `programId: `, the program that generated the return data, as base-58 encoded Pubkey - `data: <[string, encoding]>`, the return data itself, as base-64 encoded binary data + - `computeUnitsConsumed: `, number of [compute units](developing/programming-model/runtime.md#compute-budget) consumed by the transaction - `version: <"legacy"|number|undefined>` - Transaction version. Undefined if `maxSupportedTransactionVersion` is not set in request params. - `signatures: ` - present if "signatures" are requested for transaction details; an array of signatures strings, corresponding to the transaction order in the block - `rewards: ` - block-level rewards, present if rewards are requested; an array of JSON objects containing: @@ -459,8 +460,8 @@ The result field will be an object with the following fields: - `postBalance: ` - account balance in lamports after the reward was applied - `rewardType: ` - type of reward: "fee", "rent", "voting", "staking" - `commission: ` - vote account commission when the reward was credited, only present for voting and staking rewards - - `blockTime: ` - estimated production time, as Unix timestamp (seconds since the Unix epoch). null if not available - - `blockHeight: ` - the number of blocks beneath this block + - `blockTime: ` - estimated production time, as Unix timestamp (seconds since the Unix epoch). null if not available + - `blockHeight: ` - the number of blocks beneath this block #### Example: @@ -623,12 +624,12 @@ The JSON structure of token balances is defined as a list of objects in the foll - `accountIndex: ` - Index of the account in which the token balance is provided for. - `mint: ` - Pubkey of the token's mint. -- `owner: ` - Pubkey of token balance's owner. -- `programId: ` - Pubkey of the Token program that owns the account. +- `owner: ` - Pubkey of token balance's owner. +- `programId: ` - Pubkey of the Token program that owns the account. - `uiTokenAmount: ` - - `amount: ` - Raw amount of tokens as a string, ignoring decimals. - `decimals: ` - Number of decimals configured for token's mint. - - `uiAmount: ` - Token amount as a float, accounting for decimals. **DEPRECATED** + - `uiAmount: ` - Token amount as a float, accounting for decimals. **DEPRECATED** - `uiAmountString: ` - Token amount as a string, accounting for decimals. ### getBlockHeight @@ -920,12 +921,12 @@ None The result field will be an array of JSON objects, each with the following sub fields: - `pubkey: ` - Node public key, as base-58 encoded string -- `gossip: ` - Gossip network address for the node -- `tpu: ` - TPU network address for the node -- `rpc: ` - JSON RPC network address for the node, or `null` if the JSON RPC service is not enabled -- `version: ` - The software version of the node, or `null` if the version information is not available -- `featureSet: ` - The unique identifier of the node's feature set -- `shredVersion: ` - The shred version the node has been configured to use +- `gossip: ` - Gossip network address for the node +- `tpu: ` - TPU network address for the node +- `rpc: ` - JSON RPC network address for the node, or `null` if the JSON RPC service is not enabled +- `version: ` - The software version of the node, or `null` if the version information is not available +- `featureSet: ` - The unique identifier of the node's feature set +- `shredVersion: ` - The shred version the node has been configured to use #### Example: @@ -974,7 +975,7 @@ The result field will be an object with the following fields: - `epoch: `, the current epoch - `slotIndex: `, the current slot relative to the start of the current epoch - `slotsInEpoch: `, the number of slots in this epoch -- `transactionCount: `, total number of transactions processed without error since genesis +- `transactionCount: `, total number of transactions processed without error since genesis #### Example: @@ -1063,7 +1064,7 @@ Get the fee the network will charge for a particular Message #### Results: -- `` - Fee corresponding to the message at the specified blockhash +- `` - Fee corresponding to the message at the specified blockhash #### Example: @@ -1239,7 +1240,7 @@ None - `` - `full: ` - Highest full snapshot slot - - `incremental: ` - Highest incremental snapshot slot _based on_ `full` + - `incremental: ` - Highest incremental snapshot slot _based on_ `full` #### Example: @@ -2138,9 +2139,10 @@ from newest to oldest transaction: - `` - `signature: ` - transaction signature as base-58 encoded string - `slot: ` - The slot that contains the block with the transaction - - `err: ` - Error if transaction failed, null if transaction succeeded. [TransactionError definitions](https://github.com/solana-labs/solana/blob/c0c60386544ec9a9ec7119229f37386d9f070523/sdk/src/transaction/error.rs#L13) - - `memo: ` - Memo associated with the transaction, null if no memo is present - - `blockTime: ` - estimated production time, as Unix timestamp (seconds since the Unix epoch) of when transaction was processed. null if not available. + - `err: ` - Error if transaction failed, null if transaction succeeded. [TransactionError definitions](https://github.com/solana-labs/solana/blob/c0c60386544ec9a9ec7119229f37386d9f070523/sdk/src/transaction/error.rs#L13) + - `memo: ` - Memo associated with the transaction, null if no memo is present + - `blockTime: ` - estimated production time, as Unix timestamp (seconds since the Unix epoch) of when transaction was processed. null if not available. + - `confirmationStatus: ` - The transaction's cluster confirmation status; either `processed`, `confirmed`, or `finalized`. See [Commitment](jsonrpc-api.md#configuring-state-commitment) for more on optimistic confirmation. #### Example: @@ -2204,9 +2206,9 @@ An array of: - `` - Unknown transaction - `` - `slot: ` - The slot the transaction was processed - - `confirmations: ` - Number of blocks since signature confirmation, null if rooted, as well as finalized by a supermajority of the cluster - - `err: ` - Error if transaction failed, null if transaction succeeded. [TransactionError definitions](https://github.com/solana-labs/solana/blob/c0c60386544ec9a9ec7119229f37386d9f070523/sdk/src/transaction/error.rs#L13) - - `confirmationStatus: ` - The transaction's cluster confirmation status; either `processed`, `confirmed`, or `finalized`. See [Commitment](jsonrpc-api.md#configuring-state-commitment) for more on optimistic confirmation. + - `confirmations: ` - Number of blocks since signature confirmation, null if rooted, as well as finalized by a supermajority of the cluster + - `err: ` - Error if transaction failed, null if transaction succeeded. [TransactionError definitions](https://github.com/solana-labs/solana/blob/c0c60386544ec9a9ec7119229f37386d9f070523/sdk/src/transaction/error.rs#L13) + - `confirmationStatus: ` - The transaction's cluster confirmation status; either `processed`, `confirmed`, or `finalized`. See [Commitment](jsonrpc-api.md#configuring-state-commitment) for more on optimistic confirmation. - DEPRECATED: `status: ` - Transaction status - `"Ok": ` - Transaction was successful - `"Err": ` - Transaction failed with TransactionError @@ -2601,7 +2603,7 @@ The result will be an RpcResponse JSON object with `value` equal to a JSON objec - `amount: ` - the raw balance without decimals, a string representation of u64 - `decimals: ` - number of base 10 digits to the right of the decimal place -- `uiAmount: ` - the balance, using mint-prescribed decimals **DEPRECATED** +- `uiAmount: ` - the balance, using mint-prescribed decimals **DEPRECATED** - `uiAmountString: ` - the balance as a string, using mint-prescribed decimals For more details on returned data: The @@ -2867,7 +2869,7 @@ The result will be an RpcResponse JSON object with `value` equal to an array of - `address: ` - the address of the token account - `amount: ` - the raw token account balance without decimals, a string representation of u64 - `decimals: ` - number of base 10 digits to the right of the decimal place -- `uiAmount: ` - the token account balance, using mint-prescribed decimals **DEPRECATED** +- `uiAmount: ` - the token account balance, using mint-prescribed decimals **DEPRECATED** - `uiAmountString: ` - the token account balance as a string, using mint-prescribed decimals #### Example: @@ -2924,7 +2926,7 @@ The result will be an RpcResponse JSON object with `value` equal to a JSON objec - `amount: ` - the raw total token supply without decimals, a string representation of u64 - `decimals: ` - number of base 10 digits to the right of the decimal place -- `uiAmount: ` - the total token supply, using mint-prescribed decimals **DEPRECATED** +- `uiAmount: ` - the total token supply, using mint-prescribed decimals **DEPRECATED** - `uiAmountString: ` - the total token supply as a string, using mint-prescribed decimals #### Example: @@ -2974,9 +2976,9 @@ Returns transaction details for a confirmed transaction - `` - if transaction is confirmed, an object with the following fields: - `slot: ` - the slot this transaction was processed in - `transaction: ` - [Transaction](#transaction-structure) object, either in JSON format or encoded binary data, depending on encoding parameter - - `blockTime: ` - estimated production time, as Unix timestamp (seconds since the Unix epoch) of when the transaction was processed. null if not available - - `meta: ` - transaction status metadata object: - - `err: ` - Error if transaction failed, null if transaction succeeded. [TransactionError definitions](https://docs.rs/solana-sdk/VERSION_FOR_DOCS_RS/solana_sdk/transaction/enum.TransactionError.html) + - `blockTime: ` - estimated production time, as Unix timestamp (seconds since the Unix epoch) of when the transaction was processed. null if not available + - `meta: ` - transaction status metadata object: + - `err: ` - Error if transaction failed, null if transaction succeeded. [TransactionError definitions](https://docs.rs/solana-sdk/VERSION_FOR_DOCS_RS/solana_sdk/transaction/enum.TransactionError.html) - `fee: ` - fee this transaction was charged, as u64 integer - `preBalances: ` - array of u64 account balances from before the transaction was processed - `postBalances: ` - array of u64 account balances after the transaction was processed @@ -2999,6 +3001,7 @@ Returns transaction details for a confirmed transaction - `returnData: ` - the most-recent return data generated by an instruction in the transaction, with the following fields: - `programId: `, the program that generated the return data, as base-58 encoded Pubkey - `data: <[string, encoding]>`, the return data itself, as base-64 encoded binary data + - `computeUnitsConsumed: `, number of [compute units](developing/programming-model/runtime.md#compute-budget) consumed by the transaction - `version: <"legacy"|number|undefined>` - Transaction version. Undefined if `maxSupportedTransactionVersion` is not set in request params. #### Example: @@ -3504,9 +3507,9 @@ Simulate sending a transaction An RpcResponse containing a TransactionStatus object The result will be an RpcResponse JSON object with `value` set to a JSON object with the following fields: -- `err: ` - Error if transaction failed, null if transaction succeeded. [TransactionError definitions](https://github.com/solana-labs/solana/blob/c0c60386544ec9a9ec7119229f37386d9f070523/sdk/src/transaction/error.rs#L13) -- `logs: ` - Array of log messages the transaction instructions output during execution, null if simulation failed before the transaction was able to execute (for example due to an invalid blockhash or signature verification failure) -- `accounts: ` - array of accounts with the same length as the `accounts.addresses` array in the request +- `err: ` - Error if transaction failed, null if transaction succeeded. [TransactionError definitions](https://github.com/solana-labs/solana/blob/c0c60386544ec9a9ec7119229f37386d9f070523/sdk/src/transaction/error.rs#L13) +- `logs: ` - Array of log messages the transaction instructions output during execution, null if simulation failed before the transaction was able to execute (for example due to an invalid blockhash or signature verification failure) +- `accounts: ` - array of accounts with the same length as the `accounts.addresses` array in the request - `` - if the account doesn't exist or if `err` is not null - `` - otherwise, a JSON object containing: - `lamports: `, number of lamports assigned to this account, as a u64 @@ -3514,8 +3517,8 @@ The result will be an RpcResponse JSON object with `value` set to a JSON object - `data: <[string, encoding]|object>`, data associated with the account, either as encoded binary data or JSON format `{: }`, depending on encoding parameter - `executable: `, boolean indicating if the account contains a program \(and is strictly read-only\) - `rentEpoch: `, the epoch at which this account will next owe rent, as u64 -- `unitsConsumed: `, The number of compute budget units consumed during the processing of this transaction -- `returnData: ` - the most-recent return data generated by an instruction in the transaction, with the following fields: +- `unitsConsumed: `, The number of compute budget units consumed during the processing of this transaction +- `returnData: ` - the most-recent return data generated by an instruction in the transaction, with the following fields: - `programId: `, the program that generated the return data, as base-58 encoded Pubkey - `data: <[string, encoding]>`, the return data itself, as base-64 encoded binary data @@ -3785,8 +3788,8 @@ The notification will be an object with the following fields: -`slot: ` - The corresponding slot. -- `err: ` - Error if something went wrong publishing the notification otherwise null. -- `block: ` - A block object as seen in the [getBlock](jsonrpc-api.md#getblock) RPC HTTP method. +- `err: ` - Error if something went wrong publishing the notification otherwise null. +- `block: ` - A block object as seen in the [getBlock](jsonrpc-api.md#getblock) RPC HTTP method. ```json { @@ -4069,8 +4072,8 @@ Result: The notification will be an RpcResponse JSON object with value equal to: - `signature: ` - The transaction signature base58 encoded. -- `err: ` - Error if transaction failed, null if transaction succeeded. [TransactionError definitions](https://github.com/solana-labs/solana/blob/c0c60386544ec9a9ec7119229f37386d9f070523/sdk/src/transaction/error.rs#L13) -- `logs: ` - Array of log messages the transaction instructions output during execution, null if simulation failed before the transaction was able to execute (for example due to an invalid blockhash or signature verification failure) +- `err: ` - Error if transaction failed, null if transaction succeeded. [TransactionError definitions](https://github.com/solana-labs/solana/blob/c0c60386544ec9a9ec7119229f37386d9f070523/sdk/src/transaction/error.rs#L13) +- `logs: ` - Array of log messages the transaction instructions output during execution, null if simulation failed before the transaction was able to execute (for example due to an invalid blockhash or signature verification failure) Example: @@ -4341,7 +4344,7 @@ Result: The notification will be an RpcResponse JSON object with value containing an object with: -- `err: ` - Error if transaction failed, null if transaction succeeded. [TransactionError definitions](https://github.com/solana-labs/solana/blob/c0c60386544ec9a9ec7119229f37386d9f070523/sdk/src/transaction/error.rs#L13) +- `err: ` - Error if transaction failed, null if transaction succeeded. [TransactionError definitions](https://github.com/solana-labs/solana/blob/c0c60386544ec9a9ec7119229f37386d9f070523/sdk/src/transaction/error.rs#L13) Example: @@ -4664,7 +4667,7 @@ The notification will be an object with the following fields: - `hash: ` - The vote hash - `slots: ` - The slots covered by the vote, as an array of u64 integers -- `timestamp: ` - The timestamp of the vote +- `timestamp: ` - The timestamp of the vote - `signature: ` - The signature of the transaction that contained this vote ```json @@ -4739,7 +4742,7 @@ The result field will be an object with the following fields: - `transactions: ` - present if "full" transaction details are requested; an array of JSON objects containing: - `transaction: ` - [Transaction](#transaction-structure) object, either in JSON format or encoded binary data, depending on encoding parameter - `meta: ` - transaction status metadata object, containing `null` or: - - `err: ` - Error if transaction failed, null if transaction succeeded. [TransactionError definitions](https://github.com/solana-labs/solana/blob/c0c60386544ec9a9ec7119229f37386d9f070523/sdk/src/transaction/error.rs#L13) + - `err: ` - Error if transaction failed, null if transaction succeeded. [TransactionError definitions](https://github.com/solana-labs/solana/blob/c0c60386544ec9a9ec7119229f37386d9f070523/sdk/src/transaction/error.rs#L13) - `fee: ` - fee this transaction was charged, as u64 integer - `preBalances: ` - array of u64 account balances from before the transaction was processed - `postBalances: ` - array of u64 account balances after the transaction was processed @@ -4757,7 +4760,7 @@ The result field will be an object with the following fields: - `postBalance: ` - account balance in lamports after the reward was applied - `rewardType: ` - type of reward: "fee", "rent", "voting", "staking" - `commission: ` - vote account commission when the reward was credited, only present for voting and staking rewards - - `blockTime: ` - estimated production time, as Unix timestamp (seconds since the Unix epoch). null if not available + - `blockTime: ` - estimated production time, as Unix timestamp (seconds since the Unix epoch). null if not available #### Example: @@ -4978,9 +4981,9 @@ from newest to oldest transaction: - `` - `signature: ` - transaction signature as base-58 encoded string - `slot: ` - The slot that contains the block with the transaction - - `err: ` - Error if transaction failed, null if transaction succeeded. [TransactionError definitions](https://github.com/solana-labs/solana/blob/c0c60386544ec9a9ec7119229f37386d9f070523/sdk/src/transaction/error.rs#L13) - - `memo: ` - Memo associated with the transaction, null if no memo is present - - `blockTime: ` - estimated production time, as Unix timestamp (seconds since the Unix epoch) of when transaction was processed. null if not available. + - `err: ` - Error if transaction failed, null if transaction succeeded. [TransactionError definitions](https://github.com/solana-labs/solana/blob/c0c60386544ec9a9ec7119229f37386d9f070523/sdk/src/transaction/error.rs#L13) + - `memo: ` - Memo associated with the transaction, null if no memo is present + - `blockTime: ` - estimated production time, as Unix timestamp (seconds since the Unix epoch) of when transaction was processed. null if not available. #### Example: @@ -5041,9 +5044,9 @@ Returns transaction details for a confirmed transaction - `` - if transaction is confirmed, an object with the following fields: - `slot: ` - the slot this transaction was processed in - `transaction: ` - [Transaction](#transaction-structure) object, either in JSON format or encoded binary data, depending on encoding parameter - - `blockTime: ` - estimated production time, as Unix timestamp (seconds since the Unix epoch) of when the transaction was processed. null if not available - - `meta: ` - transaction status metadata object: - - `err: ` - Error if transaction failed, null if transaction succeeded. [TransactionError definitions](https://docs.rs/solana-sdk/VERSION_FOR_DOCS_RS/solana_sdk/transaction/enum.TransactionError.html) + - `blockTime: ` - estimated production time, as Unix timestamp (seconds since the Unix epoch) of when the transaction was processed. null if not available + - `meta: ` - transaction status metadata object: + - `err: ` - Error if transaction failed, null if transaction succeeded. [TransactionError definitions](https://docs.rs/solana-sdk/VERSION_FOR_DOCS_RS/solana_sdk/transaction/enum.TransactionError.html) - `fee: ` - fee this transaction was charged, as u64 integer - `preBalances: ` - array of u64 account balances from before the transaction was processed - `postBalances: ` - array of u64 account balances after the transaction was processed From 565aacc23a4f9bfcc258e3ae5e75b911d2bbc9f8 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Thu, 22 Sep 2022 06:10:01 +0000 Subject: [PATCH 132/465] Require program account to be writable in extend program data ix (backport #27911) (#27978) * Require program account to be writable in extend program data ix (#27911) * Require program account to be writable in extend program data ix * feedback (cherry picked from commit 108b245e6b06752a94d9b50841dd00535289cb23) # Conflicts: # programs/bpf_loader/src/lib.rs * fix conflicts Co-authored-by: Justin Starry --- .../tests/extend_program_data_ix.rs | 422 ----------- .../tests/extend_program_ix.rs | 715 ++++++++++++++++++ programs/bpf_loader/src/lib.rs | 42 +- sdk/program/src/bpf_loader_upgradeable.rs | 16 +- .../src/loader_upgradeable_instruction.rs | 9 +- sdk/src/feature_set.rs | 4 +- transaction-status/src/parse_bpf_loader.rs | 13 +- 7 files changed, 778 insertions(+), 443 deletions(-) delete mode 100644 programs/bpf-loader-tests/tests/extend_program_data_ix.rs create mode 100644 programs/bpf-loader-tests/tests/extend_program_ix.rs diff --git a/programs/bpf-loader-tests/tests/extend_program_data_ix.rs b/programs/bpf-loader-tests/tests/extend_program_data_ix.rs deleted file mode 100644 index d5c79c577e1cb5..00000000000000 --- a/programs/bpf-loader-tests/tests/extend_program_data_ix.rs +++ /dev/null @@ -1,422 +0,0 @@ -use { - assert_matches::assert_matches, - common::{add_upgradeable_loader_account, assert_ix_error, setup_test_context}, - solana_program_test::*, - solana_sdk::{ - account::{AccountSharedData, ReadableAccount}, - account_utils::StateMut, - bpf_loader_upgradeable::{extend_program_data, id, UpgradeableLoaderState}, - instruction::InstructionError, - pubkey::Pubkey, - signature::{Keypair, Signer}, - system_instruction::{self, SystemError, MAX_PERMITTED_DATA_LENGTH}, - system_program, - transaction::Transaction, - }, -}; - -mod common; - -#[tokio::test] -async fn test_extend_program_data() { - let mut context = setup_test_context().await; - - let program_data_address = Pubkey::new_unique(); - let program_data_len = 100; - add_upgradeable_loader_account( - &mut context, - &program_data_address, - &UpgradeableLoaderState::ProgramData { - slot: 0, - upgrade_authority_address: Some(Pubkey::new_unique()), - }, - program_data_len, - ) - .await; - - let client = &mut context.banks_client; - let payer = &context.payer; - let recent_blockhash = context.last_blockhash; - const ADDITIONAL_BYTES: u32 = 42; - let transaction = Transaction::new_signed_with_payer( - &[extend_program_data( - &program_data_address, - Some(&payer.pubkey()), - ADDITIONAL_BYTES, - )], - Some(&payer.pubkey()), - &[payer], - recent_blockhash, - ); - - assert_matches!(client.process_transaction(transaction).await, Ok(())); - let updated_program_data_account = client - .get_account(program_data_address) - .await - .unwrap() - .unwrap(); - assert_eq!( - updated_program_data_account.data().len(), - program_data_len + ADDITIONAL_BYTES as usize - ); -} - -#[tokio::test] -async fn test_extend_program_data_not_upgradeable() { - let mut context = setup_test_context().await; - - let program_data_address = Pubkey::new_unique(); - add_upgradeable_loader_account( - &mut context, - &program_data_address, - &UpgradeableLoaderState::ProgramData { - slot: 0, - upgrade_authority_address: None, - }, - 100, - ) - .await; - - let payer_address = context.payer.pubkey(); - assert_ix_error( - &mut context, - extend_program_data(&program_data_address, Some(&payer_address), 42), - None, - InstructionError::Immutable, - "should fail because the program data account isn't upgradeable", - ) - .await; -} - -#[tokio::test] -async fn test_extend_program_data_by_zero_bytes() { - let mut context = setup_test_context().await; - - let program_data_address = Pubkey::new_unique(); - add_upgradeable_loader_account( - &mut context, - &program_data_address, - &UpgradeableLoaderState::ProgramData { - slot: 0, - upgrade_authority_address: Some(Pubkey::new_unique()), - }, - 100, - ) - .await; - - let payer_address = context.payer.pubkey(); - assert_ix_error( - &mut context, - extend_program_data(&program_data_address, Some(&payer_address), 0), - None, - InstructionError::InvalidInstructionData, - "should fail because the program data account must be extended by more than 0 bytes", - ) - .await; -} - -#[tokio::test] -async fn test_extend_program_data_past_max_size() { - let mut context = setup_test_context().await; - - let program_data_address = Pubkey::new_unique(); - add_upgradeable_loader_account( - &mut context, - &program_data_address, - &UpgradeableLoaderState::ProgramData { - slot: 0, - upgrade_authority_address: Some(Pubkey::new_unique()), - }, - MAX_PERMITTED_DATA_LENGTH as usize, - ) - .await; - - let payer_address = context.payer.pubkey(); - assert_ix_error( - &mut context, - extend_program_data(&program_data_address, Some(&payer_address), 1), - None, - InstructionError::InvalidRealloc, - "should fail because the program data account cannot be extended past the max data size", - ) - .await; -} - -#[tokio::test] -async fn test_extend_program_data_with_invalid_payer() { - let mut context = setup_test_context().await; - let rent = context.banks_client.get_rent().await.unwrap(); - - let program_data_address = Pubkey::new_unique(); - add_upgradeable_loader_account( - &mut context, - &program_data_address, - &UpgradeableLoaderState::ProgramData { - slot: 0, - upgrade_authority_address: Some(Pubkey::new_unique()), - }, - 100, - ) - .await; - - let payer_with_sufficient_funds = Keypair::new(); - context.set_account( - &payer_with_sufficient_funds.pubkey(), - &AccountSharedData::new(10_000_000_000, 0, &system_program::id()), - ); - - let payer_with_insufficient_funds = Keypair::new(); - context.set_account( - &payer_with_insufficient_funds.pubkey(), - &AccountSharedData::new(rent.minimum_balance(0), 0, &system_program::id()), - ); - - let payer_with_invalid_owner = Keypair::new(); - context.set_account( - &payer_with_invalid_owner.pubkey(), - &AccountSharedData::new(rent.minimum_balance(0), 0, &id()), - ); - - assert_ix_error( - &mut context, - extend_program_data( - &program_data_address, - Some(&payer_with_insufficient_funds.pubkey()), - 1024, - ), - Some(&payer_with_insufficient_funds), - InstructionError::from(SystemError::ResultWithNegativeLamports), - "should fail because the payer has insufficient funds to cover program data account rent", - ) - .await; - - assert_ix_error( - &mut context, - extend_program_data( - &program_data_address, - Some(&payer_with_invalid_owner.pubkey()), - 1, - ), - Some(&payer_with_invalid_owner), - InstructionError::ExternalAccountLamportSpend, - "should fail because the payer is not a system account", - ) - .await; - - let mut ix = extend_program_data( - &program_data_address, - Some(&payer_with_sufficient_funds.pubkey()), - 1, - ); - - // Demote payer account meta to non-signer so that transaction signing succeeds - { - let payer_meta = ix - .accounts - .iter_mut() - .find(|meta| meta.pubkey == payer_with_sufficient_funds.pubkey()) - .expect("expected to find payer account meta"); - payer_meta.is_signer = false; - } - - assert_ix_error( - &mut context, - ix, - None, - InstructionError::PrivilegeEscalation, - "should fail because the payer did not sign", - ) - .await; -} - -#[tokio::test] -async fn test_extend_program_data_without_payer() { - let mut context = setup_test_context().await; - let rent = context.banks_client.get_rent().await.unwrap(); - - let program_data_address = Pubkey::new_unique(); - let program_data_len = 100; - add_upgradeable_loader_account( - &mut context, - &program_data_address, - &UpgradeableLoaderState::ProgramData { - slot: 0, - upgrade_authority_address: Some(Pubkey::new_unique()), - }, - program_data_len, - ) - .await; - - assert_ix_error( - &mut context, - extend_program_data(&program_data_address, None, 1024), - None, - InstructionError::NotEnoughAccountKeys, - "should fail because program data has insufficient funds to cover rent", - ) - .await; - - let client = &mut context.banks_client; - let payer = &context.payer; - let recent_blockhash = context.last_blockhash; - - const ADDITIONAL_BYTES: u32 = 42; - let min_balance_increase_for_extend = rent - .minimum_balance(ADDITIONAL_BYTES as usize) - .saturating_sub(rent.minimum_balance(0)); - - let transaction = Transaction::new_signed_with_payer( - &[ - system_instruction::transfer( - &payer.pubkey(), - &program_data_address, - min_balance_increase_for_extend, - ), - extend_program_data(&program_data_address, None, ADDITIONAL_BYTES), - ], - Some(&payer.pubkey()), - &[payer], - recent_blockhash, - ); - - assert_matches!(client.process_transaction(transaction).await, Ok(())); - let updated_program_data_account = client - .get_account(program_data_address) - .await - .unwrap() - .unwrap(); - assert_eq!( - updated_program_data_account.data().len(), - program_data_len + ADDITIONAL_BYTES as usize - ); -} - -#[tokio::test] -async fn test_extend_program_data_with_invalid_system_program() { - let mut context = setup_test_context().await; - - let program_data_address = Pubkey::new_unique(); - let program_data_len = 100; - add_upgradeable_loader_account( - &mut context, - &program_data_address, - &UpgradeableLoaderState::ProgramData { - slot: 0, - upgrade_authority_address: Some(Pubkey::new_unique()), - }, - program_data_len, - ) - .await; - - let payer_address = context.payer.pubkey(); - let mut ix = extend_program_data(&program_data_address, Some(&payer_address), 1); - - // Change system program to an invalid key - { - let system_program_meta = ix - .accounts - .iter_mut() - .find(|meta| meta.pubkey == crate::system_program::ID) - .expect("expected to find system program account meta"); - system_program_meta.pubkey = Pubkey::new_unique(); - } - - assert_ix_error( - &mut context, - ix, - None, - InstructionError::MissingAccount, - "should fail because the system program is missing", - ) - .await; -} - -#[tokio::test] -async fn test_extend_program_data_with_invalid_program_data() { - let mut context = setup_test_context().await; - let rent = context.banks_client.get_rent().await.unwrap(); - let payer_address = context.payer.pubkey(); - - let program_data_address = Pubkey::new_unique(); - add_upgradeable_loader_account( - &mut context, - &program_data_address, - &UpgradeableLoaderState::ProgramData { - slot: 0, - upgrade_authority_address: Some(Pubkey::new_unique()), - }, - 100, - ) - .await; - - let program_data_address_with_invalid_state = Pubkey::new_unique(); - { - let mut account = AccountSharedData::new(rent.minimum_balance(100), 100, &id()); - account - .set_state(&UpgradeableLoaderState::Buffer { - authority_address: Some(payer_address), - }) - .expect("serialization failed"); - context.set_account(&program_data_address_with_invalid_state, &account); - } - - let program_data_address_with_invalid_owner = Pubkey::new_unique(); - { - let invalid_owner = Pubkey::new_unique(); - let mut account = AccountSharedData::new(rent.minimum_balance(100), 100, &invalid_owner); - account - .set_state(&UpgradeableLoaderState::ProgramData { - slot: 0, - upgrade_authority_address: Some(payer_address), - }) - .expect("serialization failed"); - context.set_account(&program_data_address_with_invalid_owner, &account); - } - - assert_ix_error( - &mut context, - extend_program_data( - &program_data_address_with_invalid_state, - Some(&payer_address), - 1024, - ), - None, - InstructionError::InvalidAccountData, - "should fail because the program data account state isn't valid", - ) - .await; - - assert_ix_error( - &mut context, - extend_program_data( - &program_data_address_with_invalid_owner, - Some(&payer_address), - 1024, - ), - None, - InstructionError::InvalidAccountOwner, - "should fail because the program data account owner isn't valid", - ) - .await; - - let mut ix = extend_program_data(&program_data_address, Some(&payer_address), 1); - - // Demote ProgramData account meta to read-only - { - let program_data_meta = ix - .accounts - .iter_mut() - .find(|meta| meta.pubkey == program_data_address) - .expect("expected to find program data account meta"); - program_data_meta.is_writable = false; - } - - assert_ix_error( - &mut context, - ix, - None, - InstructionError::InvalidArgument, - "should fail because the program data account is not writable", - ) - .await; -} diff --git a/programs/bpf-loader-tests/tests/extend_program_ix.rs b/programs/bpf-loader-tests/tests/extend_program_ix.rs new file mode 100644 index 00000000000000..7c928446e54579 --- /dev/null +++ b/programs/bpf-loader-tests/tests/extend_program_ix.rs @@ -0,0 +1,715 @@ +use { + assert_matches::assert_matches, + common::{add_upgradeable_loader_account, assert_ix_error, setup_test_context}, + solana_program_test::*, + solana_sdk::{ + account::{AccountSharedData, ReadableAccount}, + account_utils::StateMut, + bpf_loader_upgradeable::{extend_program, id, UpgradeableLoaderState}, + instruction::InstructionError, + pubkey::Pubkey, + signature::{Keypair, Signer}, + system_instruction::{self, SystemError, MAX_PERMITTED_DATA_LENGTH}, + system_program, + transaction::Transaction, + }, +}; + +mod common; + +#[tokio::test] +async fn test_extend_program() { + let mut context = setup_test_context().await; + + let program_address = Pubkey::new_unique(); + let (programdata_address, _) = Pubkey::find_program_address(&[program_address.as_ref()], &id()); + let program_data_len = 100; + add_upgradeable_loader_account( + &mut context, + &program_address, + &UpgradeableLoaderState::Program { + programdata_address, + }, + UpgradeableLoaderState::size_of_program(), + ) + .await; + add_upgradeable_loader_account( + &mut context, + &programdata_address, + &UpgradeableLoaderState::ProgramData { + slot: 0, + upgrade_authority_address: Some(Pubkey::new_unique()), + }, + program_data_len, + ) + .await; + + let client = &mut context.banks_client; + let payer = &context.payer; + let recent_blockhash = context.last_blockhash; + const ADDITIONAL_BYTES: u32 = 42; + let transaction = Transaction::new_signed_with_payer( + &[extend_program( + &program_address, + Some(&payer.pubkey()), + ADDITIONAL_BYTES, + )], + Some(&payer.pubkey()), + &[payer], + recent_blockhash, + ); + + assert_matches!(client.process_transaction(transaction).await, Ok(())); + let updated_program_data_account = client + .get_account(programdata_address) + .await + .unwrap() + .unwrap(); + assert_eq!( + updated_program_data_account.data().len(), + program_data_len + ADDITIONAL_BYTES as usize + ); +} + +#[tokio::test] +async fn test_extend_program_not_upgradeable() { + let mut context = setup_test_context().await; + + let program_address = Pubkey::new_unique(); + let (programdata_address, _) = Pubkey::find_program_address(&[program_address.as_ref()], &id()); + add_upgradeable_loader_account( + &mut context, + &program_address, + &UpgradeableLoaderState::Program { + programdata_address, + }, + UpgradeableLoaderState::size_of_program(), + ) + .await; + add_upgradeable_loader_account( + &mut context, + &programdata_address, + &UpgradeableLoaderState::ProgramData { + slot: 0, + upgrade_authority_address: None, + }, + 100, + ) + .await; + + let payer_address = context.payer.pubkey(); + assert_ix_error( + &mut context, + extend_program(&program_address, Some(&payer_address), 42), + None, + InstructionError::Immutable, + "should fail because the program data account isn't upgradeable", + ) + .await; +} + +#[tokio::test] +async fn test_extend_program_by_zero_bytes() { + let mut context = setup_test_context().await; + + let program_address = Pubkey::new_unique(); + let (programdata_address, _) = Pubkey::find_program_address(&[program_address.as_ref()], &id()); + add_upgradeable_loader_account( + &mut context, + &program_address, + &UpgradeableLoaderState::Program { + programdata_address, + }, + UpgradeableLoaderState::size_of_program(), + ) + .await; + add_upgradeable_loader_account( + &mut context, + &programdata_address, + &UpgradeableLoaderState::ProgramData { + slot: 0, + upgrade_authority_address: Some(Pubkey::new_unique()), + }, + 100, + ) + .await; + + let payer_address = context.payer.pubkey(); + assert_ix_error( + &mut context, + extend_program(&program_address, Some(&payer_address), 0), + None, + InstructionError::InvalidInstructionData, + "should fail because the program data account must be extended by more than 0 bytes", + ) + .await; +} + +#[tokio::test] +async fn test_extend_program_past_max_size() { + let mut context = setup_test_context().await; + + let program_address = Pubkey::new_unique(); + let (programdata_address, _) = Pubkey::find_program_address(&[program_address.as_ref()], &id()); + add_upgradeable_loader_account( + &mut context, + &program_address, + &UpgradeableLoaderState::Program { + programdata_address, + }, + UpgradeableLoaderState::size_of_program(), + ) + .await; + add_upgradeable_loader_account( + &mut context, + &programdata_address, + &UpgradeableLoaderState::ProgramData { + slot: 0, + upgrade_authority_address: Some(Pubkey::new_unique()), + }, + MAX_PERMITTED_DATA_LENGTH as usize, + ) + .await; + + let payer_address = context.payer.pubkey(); + assert_ix_error( + &mut context, + extend_program(&program_address, Some(&payer_address), 1), + None, + InstructionError::InvalidRealloc, + "should fail because the program data account cannot be extended past the max data size", + ) + .await; +} + +#[tokio::test] +async fn test_extend_program_with_invalid_payer() { + let mut context = setup_test_context().await; + let rent = context.banks_client.get_rent().await.unwrap(); + + let program_address = Pubkey::new_unique(); + let (programdata_address, _) = Pubkey::find_program_address(&[program_address.as_ref()], &id()); + add_upgradeable_loader_account( + &mut context, + &program_address, + &UpgradeableLoaderState::Program { + programdata_address, + }, + UpgradeableLoaderState::size_of_program(), + ) + .await; + add_upgradeable_loader_account( + &mut context, + &programdata_address, + &UpgradeableLoaderState::ProgramData { + slot: 0, + upgrade_authority_address: Some(Pubkey::new_unique()), + }, + 100, + ) + .await; + + let payer_with_sufficient_funds = Keypair::new(); + context.set_account( + &payer_with_sufficient_funds.pubkey(), + &AccountSharedData::new(10_000_000_000, 0, &system_program::id()), + ); + + let payer_with_insufficient_funds = Keypair::new(); + context.set_account( + &payer_with_insufficient_funds.pubkey(), + &AccountSharedData::new(rent.minimum_balance(0), 0, &system_program::id()), + ); + + let payer_with_invalid_owner = Keypair::new(); + context.set_account( + &payer_with_invalid_owner.pubkey(), + &AccountSharedData::new(rent.minimum_balance(0), 0, &id()), + ); + + assert_ix_error( + &mut context, + extend_program( + &program_address, + Some(&payer_with_insufficient_funds.pubkey()), + 1024, + ), + Some(&payer_with_insufficient_funds), + InstructionError::from(SystemError::ResultWithNegativeLamports), + "should fail because the payer has insufficient funds to cover program data account rent", + ) + .await; + + assert_ix_error( + &mut context, + extend_program( + &program_address, + Some(&payer_with_invalid_owner.pubkey()), + 1, + ), + Some(&payer_with_invalid_owner), + InstructionError::ExternalAccountLamportSpend, + "should fail because the payer is not a system account", + ) + .await; + + let mut ix = extend_program( + &program_address, + Some(&payer_with_sufficient_funds.pubkey()), + 1, + ); + + // Demote payer account meta to non-signer so that transaction signing succeeds + { + let payer_meta = ix + .accounts + .iter_mut() + .find(|meta| meta.pubkey == payer_with_sufficient_funds.pubkey()) + .expect("expected to find payer account meta"); + payer_meta.is_signer = false; + } + + assert_ix_error( + &mut context, + ix, + None, + InstructionError::PrivilegeEscalation, + "should fail because the payer did not sign", + ) + .await; +} + +#[tokio::test] +async fn test_extend_program_without_payer() { + let mut context = setup_test_context().await; + let rent = context.banks_client.get_rent().await.unwrap(); + + let program_address = Pubkey::new_unique(); + let (programdata_address, _) = Pubkey::find_program_address(&[program_address.as_ref()], &id()); + add_upgradeable_loader_account( + &mut context, + &program_address, + &UpgradeableLoaderState::Program { + programdata_address, + }, + UpgradeableLoaderState::size_of_program(), + ) + .await; + let program_data_len = 100; + add_upgradeable_loader_account( + &mut context, + &programdata_address, + &UpgradeableLoaderState::ProgramData { + slot: 0, + upgrade_authority_address: Some(Pubkey::new_unique()), + }, + program_data_len, + ) + .await; + + assert_ix_error( + &mut context, + extend_program(&program_address, None, 1024), + None, + InstructionError::NotEnoughAccountKeys, + "should fail because program data has insufficient funds to cover rent", + ) + .await; + + let client = &mut context.banks_client; + let payer = &context.payer; + let recent_blockhash = context.last_blockhash; + + const ADDITIONAL_BYTES: u32 = 42; + let min_balance_increase_for_extend = rent + .minimum_balance(ADDITIONAL_BYTES as usize) + .saturating_sub(rent.minimum_balance(0)); + + let transaction = Transaction::new_signed_with_payer( + &[ + system_instruction::transfer( + &payer.pubkey(), + &programdata_address, + min_balance_increase_for_extend, + ), + extend_program(&program_address, None, ADDITIONAL_BYTES), + ], + Some(&payer.pubkey()), + &[payer], + recent_blockhash, + ); + + assert_matches!(client.process_transaction(transaction).await, Ok(())); + let updated_program_data_account = client + .get_account(programdata_address) + .await + .unwrap() + .unwrap(); + assert_eq!( + updated_program_data_account.data().len(), + program_data_len + ADDITIONAL_BYTES as usize + ); +} + +#[tokio::test] +async fn test_extend_program_with_invalid_system_program() { + let mut context = setup_test_context().await; + + let program_address = Pubkey::new_unique(); + let (programdata_address, _) = Pubkey::find_program_address(&[program_address.as_ref()], &id()); + add_upgradeable_loader_account( + &mut context, + &program_address, + &UpgradeableLoaderState::Program { + programdata_address, + }, + UpgradeableLoaderState::size_of_program(), + ) + .await; + let program_data_len = 100; + add_upgradeable_loader_account( + &mut context, + &programdata_address, + &UpgradeableLoaderState::ProgramData { + slot: 0, + upgrade_authority_address: Some(Pubkey::new_unique()), + }, + program_data_len, + ) + .await; + + let payer_address = context.payer.pubkey(); + let mut ix = extend_program(&program_address, Some(&payer_address), 1); + + // Change system program to an invalid key + { + let system_program_meta = ix + .accounts + .iter_mut() + .find(|meta| meta.pubkey == crate::system_program::ID) + .expect("expected to find system program account meta"); + system_program_meta.pubkey = Pubkey::new_unique(); + } + + assert_ix_error( + &mut context, + ix, + None, + InstructionError::MissingAccount, + "should fail because the system program is missing", + ) + .await; +} + +#[tokio::test] +async fn test_extend_program_with_mismatch_program_data() { + let mut context = setup_test_context().await; + let payer_address = context.payer.pubkey(); + + let program_address = Pubkey::new_unique(); + let (programdata_address, _) = Pubkey::find_program_address(&[program_address.as_ref()], &id()); + add_upgradeable_loader_account( + &mut context, + &program_address, + &UpgradeableLoaderState::Program { + programdata_address, + }, + UpgradeableLoaderState::size_of_program(), + ) + .await; + + let mismatch_programdata_address = Pubkey::new_unique(); + add_upgradeable_loader_account( + &mut context, + &mismatch_programdata_address, + &UpgradeableLoaderState::ProgramData { + slot: 0, + upgrade_authority_address: Some(Pubkey::new_unique()), + }, + 100, + ) + .await; + + let mut ix = extend_program(&program_address, Some(&payer_address), 1); + + // Replace ProgramData account meta with invalid account + { + let program_data_meta = ix + .accounts + .iter_mut() + .find(|meta| meta.pubkey == programdata_address) + .expect("expected to find program data account meta"); + program_data_meta.pubkey = mismatch_programdata_address; + } + + assert_ix_error( + &mut context, + ix, + None, + InstructionError::InvalidArgument, + "should fail because the program data account doesn't match the program", + ) + .await; +} + +#[tokio::test] +async fn test_extend_program_with_readonly_program_data() { + let mut context = setup_test_context().await; + let payer_address = context.payer.pubkey(); + + let program_address = Pubkey::new_unique(); + let (programdata_address, _) = Pubkey::find_program_address(&[program_address.as_ref()], &id()); + add_upgradeable_loader_account( + &mut context, + &program_address, + &UpgradeableLoaderState::Program { + programdata_address, + }, + UpgradeableLoaderState::size_of_program(), + ) + .await; + add_upgradeable_loader_account( + &mut context, + &programdata_address, + &UpgradeableLoaderState::ProgramData { + slot: 0, + upgrade_authority_address: Some(Pubkey::new_unique()), + }, + 100, + ) + .await; + + let mut ix = extend_program(&program_address, Some(&payer_address), 1); + + // Demote ProgramData account meta to read-only + { + let program_data_meta = ix + .accounts + .iter_mut() + .find(|meta| meta.pubkey == programdata_address) + .expect("expected to find program data account meta"); + program_data_meta.is_writable = false; + } + + assert_ix_error( + &mut context, + ix, + None, + InstructionError::InvalidArgument, + "should fail because the program data account is not writable", + ) + .await; +} + +#[tokio::test] +async fn test_extend_program_with_invalid_program_data_state() { + let mut context = setup_test_context().await; + let rent = context.banks_client.get_rent().await.unwrap(); + let payer_address = context.payer.pubkey(); + + let program_address = Pubkey::new_unique(); + let (programdata_address, _) = Pubkey::find_program_address(&[program_address.as_ref()], &id()); + add_upgradeable_loader_account( + &mut context, + &program_address, + &UpgradeableLoaderState::Program { + programdata_address, + }, + UpgradeableLoaderState::size_of_program(), + ) + .await; + + { + let mut account = AccountSharedData::new(rent.minimum_balance(100), 100, &id()); + account + .set_state(&UpgradeableLoaderState::Buffer { + authority_address: Some(payer_address), + }) + .expect("serialization failed"); + context.set_account(&programdata_address, &account); + } + + assert_ix_error( + &mut context, + extend_program(&program_address, Some(&payer_address), 1024), + None, + InstructionError::InvalidAccountData, + "should fail because the program data account state isn't valid", + ) + .await; +} + +#[tokio::test] +async fn test_extend_program_with_invalid_program_data_owner() { + let mut context = setup_test_context().await; + let rent = context.banks_client.get_rent().await.unwrap(); + let payer_address = context.payer.pubkey(); + + let program_address = Pubkey::new_unique(); + let (programdata_address, _) = Pubkey::find_program_address(&[program_address.as_ref()], &id()); + add_upgradeable_loader_account( + &mut context, + &program_address, + &UpgradeableLoaderState::Program { + programdata_address, + }, + UpgradeableLoaderState::size_of_program(), + ) + .await; + + { + let invalid_owner = Pubkey::new_unique(); + let mut account = AccountSharedData::new(rent.minimum_balance(100), 100, &invalid_owner); + account + .set_state(&UpgradeableLoaderState::ProgramData { + slot: 0, + upgrade_authority_address: Some(payer_address), + }) + .expect("serialization failed"); + context.set_account(&programdata_address, &account); + } + + assert_ix_error( + &mut context, + extend_program(&program_address, Some(&payer_address), 1024), + None, + InstructionError::InvalidAccountOwner, + "should fail because the program data account owner isn't valid", + ) + .await; +} + +#[tokio::test] +async fn test_extend_program_with_readonly_program() { + let mut context = setup_test_context().await; + let payer_address = context.payer.pubkey(); + + let program_address = Pubkey::new_unique(); + let (programdata_address, _) = Pubkey::find_program_address(&[program_address.as_ref()], &id()); + add_upgradeable_loader_account( + &mut context, + &program_address, + &UpgradeableLoaderState::Program { + programdata_address, + }, + UpgradeableLoaderState::size_of_program(), + ) + .await; + add_upgradeable_loader_account( + &mut context, + &programdata_address, + &UpgradeableLoaderState::ProgramData { + slot: 0, + upgrade_authority_address: Some(Pubkey::new_unique()), + }, + 100, + ) + .await; + + let mut ix = extend_program(&program_address, Some(&payer_address), 1); + + // Demote Program account meta to read-only + { + let program_meta = ix + .accounts + .iter_mut() + .find(|meta| meta.pubkey == program_address) + .expect("expected to find program account meta"); + program_meta.is_writable = false; + } + + assert_ix_error( + &mut context, + ix, + None, + InstructionError::InvalidArgument, + "should fail because the program account is not writable", + ) + .await; +} + +#[tokio::test] +async fn test_extend_program_with_invalid_program_owner() { + let mut context = setup_test_context().await; + let rent = context.banks_client.get_rent().await.unwrap(); + let payer_address = context.payer.pubkey(); + + let program_address = Pubkey::new_unique(); + let (programdata_address, _) = Pubkey::find_program_address(&[program_address.as_ref()], &id()); + + { + let invalid_owner = Pubkey::new_unique(); + let program_len = UpgradeableLoaderState::size_of_program(); + let mut account = AccountSharedData::new( + rent.minimum_balance(program_len), + program_len, + &invalid_owner, + ); + account + .set_state(&UpgradeableLoaderState::Program { + programdata_address, + }) + .expect("serialization failed"); + context.set_account(&program_address, &account); + } + + add_upgradeable_loader_account( + &mut context, + &programdata_address, + &UpgradeableLoaderState::ProgramData { + slot: 0, + upgrade_authority_address: Some(Pubkey::new_unique()), + }, + 100, + ) + .await; + + assert_ix_error( + &mut context, + extend_program(&program_address, Some(&payer_address), 1024), + None, + InstructionError::InvalidAccountOwner, + "should fail because the program account owner isn't valid", + ) + .await; +} + +#[tokio::test] +async fn test_extend_program_with_invalid_program_state() { + let mut context = setup_test_context().await; + let rent = context.banks_client.get_rent().await.unwrap(); + let payer_address = context.payer.pubkey(); + + let program_address = Pubkey::new_unique(); + let (programdata_address, _) = Pubkey::find_program_address(&[program_address.as_ref()], &id()); + + { + let mut account = AccountSharedData::new(rent.minimum_balance(100), 100, &id()); + account + .set_state(&UpgradeableLoaderState::Buffer { + authority_address: Some(payer_address), + }) + .expect("serialization failed"); + context.set_account(&program_address, &account); + } + + add_upgradeable_loader_account( + &mut context, + &programdata_address, + &UpgradeableLoaderState::ProgramData { + slot: 0, + upgrade_authority_address: Some(Pubkey::new_unique()), + }, + 100, + ) + .await; + + assert_ix_error( + &mut context, + extend_program(&program_address, Some(&payer_address), 1024), + None, + InstructionError::InvalidAccountData, + "should fail because the program account state isn't valid", + ) + .await; +} diff --git a/programs/bpf_loader/src/lib.rs b/programs/bpf_loader/src/lib.rs index 619467cdaba089..2fac50964717e3 100644 --- a/programs/bpf_loader/src/lib.rs +++ b/programs/bpf_loader/src/lib.rs @@ -44,8 +44,8 @@ use { cap_accounts_data_len, cap_bpf_program_instruction_accounts, disable_bpf_deprecated_load_instructions, disable_bpf_unresolved_symbols_at_runtime, disable_deploy_of_alloc_free_syscall, disable_deprecated_loader, - enable_bpf_loader_extend_program_data_ix, - error_on_syscall_bpf_function_hash_collisions, reject_callx_r10, + enable_bpf_loader_extend_program_ix, error_on_syscall_bpf_function_hash_collisions, + reject_callx_r10, }, instruction::{AccountMeta, InstructionError}, loader_instruction::LoaderInstruction, @@ -1036,10 +1036,10 @@ fn process_loader_upgradeable_instruction( } } } - UpgradeableLoaderInstruction::ExtendProgramData { additional_bytes } => { + UpgradeableLoaderInstruction::ExtendProgram { additional_bytes } => { if !invoke_context .feature_set - .is_active(&enable_bpf_loader_extend_program_data_ix::ID) + .is_active(&enable_bpf_loader_extend_program_ix::ID) { return Err(InstructionError::InvalidInstructionData); } @@ -1050,10 +1050,11 @@ fn process_loader_upgradeable_instruction( } const PROGRAM_DATA_ACCOUNT_INDEX: usize = 0; + const PROGRAM_ACCOUNT_INDEX: usize = 1; #[allow(dead_code)] // System program is only required when a CPI is performed - const OPTIONAL_SYSTEM_PROGRAM_ACCOUNT_INDEX: usize = 1; - const OPTIONAL_PAYER_ACCOUNT_INDEX: usize = 2; + const OPTIONAL_SYSTEM_PROGRAM_ACCOUNT_INDEX: usize = 2; + const OPTIONAL_PAYER_ACCOUNT_INDEX: usize = 3; let programdata_account = instruction_context .try_borrow_instruction_account(transaction_context, PROGRAM_DATA_ACCOUNT_INDEX)?; @@ -1068,6 +1069,35 @@ fn process_loader_upgradeable_instruction( return Err(InstructionError::InvalidArgument); } + let program_account = instruction_context + .try_borrow_instruction_account(transaction_context, PROGRAM_ACCOUNT_INDEX)?; + if !program_account.is_writable() { + ic_logger_msg!(log_collector, "Program account is not writable"); + return Err(InstructionError::InvalidArgument); + } + if program_account.get_owner() != program_id { + ic_logger_msg!(log_collector, "Program account not owned by loader"); + return Err(InstructionError::InvalidAccountOwner); + } + match program_account.get_state()? { + UpgradeableLoaderState::Program { + programdata_address, + } => { + if programdata_address != programdata_key { + ic_logger_msg!( + log_collector, + "Program account does not match ProgramData account" + ); + return Err(InstructionError::InvalidArgument); + } + } + _ => { + ic_logger_msg!(log_collector, "Invalid Program account"); + return Err(InstructionError::InvalidAccountData); + } + } + drop(program_account); + let old_len = programdata_account.get_data().len(); let new_len = old_len.saturating_add(additional_bytes as usize); if new_len > MAX_PERMITTED_DATA_LENGTH as usize { diff --git a/sdk/program/src/bpf_loader_upgradeable.rs b/sdk/program/src/bpf_loader_upgradeable.rs index 19264adb05750d..a2d2aa49119cc0 100644 --- a/sdk/program/src/bpf_loader_upgradeable.rs +++ b/sdk/program/src/bpf_loader_upgradeable.rs @@ -300,13 +300,19 @@ pub fn close_any( Instruction::new_with_bincode(id(), &UpgradeableLoaderInstruction::Close, metas) } -/// Returns the instruction required to extend the size of a program data account -pub fn extend_program_data( - program_data_address: &Pubkey, +/// Returns the instruction required to extend the size of a program's +/// executable data account +pub fn extend_program( + program_address: &Pubkey, payer_address: Option<&Pubkey>, additional_bytes: u32, ) -> Instruction { - let mut metas = vec![AccountMeta::new(*program_data_address, false)]; + let (program_data_address, _) = + Pubkey::find_program_address(&[program_address.as_ref()], &id()); + let mut metas = vec![ + AccountMeta::new(program_data_address, false), + AccountMeta::new(*program_address, false), + ]; if let Some(payer_address) = payer_address { metas.push(AccountMeta::new_readonly( crate::system_program::id(), @@ -316,7 +322,7 @@ pub fn extend_program_data( } Instruction::new_with_bincode( id(), - &UpgradeableLoaderInstruction::ExtendProgramData { additional_bytes }, + &UpgradeableLoaderInstruction::ExtendProgram { additional_bytes }, metas, ) } diff --git a/sdk/program/src/loader_upgradeable_instruction.rs b/sdk/program/src/loader_upgradeable_instruction.rs index e751c40a1369fd..b8832c5329e9de 100644 --- a/sdk/program/src/loader_upgradeable_instruction.rs +++ b/sdk/program/src/loader_upgradeable_instruction.rs @@ -128,7 +128,7 @@ pub enum UpgradeableLoaderInstruction { /// is a ProgramData account. Close, - /// Extend a ProgramData account by the specified number of bytes. + /// Extend a program's ProgramData account by the specified number of bytes. /// Only upgradeable program's can be extended. /// /// The payer account must contain sufficient lamports to fund the @@ -138,11 +138,12 @@ pub enum UpgradeableLoaderInstruction { /// /// # Account references /// 0. `[writable]` The ProgramData account. - /// 1. `[]` System program (`solana_sdk::system_program::id()`), optional, used to transfer + /// 1. `[writable]` The ProgramData account's associated Program account. + /// 2. `[]` System program (`solana_sdk::system_program::id()`), optional, used to transfer /// lamports from the payer to the ProgramData account. - /// 2. `[signer]` The payer account, optional, that will pay necessary rent exemption costs + /// 3. `[signer]` The payer account, optional, that will pay necessary rent exemption costs /// for the increased storage size. - ExtendProgramData { + ExtendProgram { /// Number of bytes to extend the program data. additional_bytes: u32, }, diff --git a/sdk/src/feature_set.rs b/sdk/src/feature_set.rs index d4cf48400c0e85..d2a30438e143f0 100644 --- a/sdk/src/feature_set.rs +++ b/sdk/src/feature_set.rs @@ -456,7 +456,7 @@ pub mod preserve_rent_epoch_for_rent_exempt_accounts { solana_sdk::declare_id!("HH3MUYReL2BvqqA3oEcAa7txju5GY6G4nxJ51zvsEjEZ"); } -pub mod enable_bpf_loader_extend_program_data_ix { +pub mod enable_bpf_loader_extend_program_ix { solana_sdk::declare_id!("8Zs9W7D9MpSEtUWSQdGniZk2cNmV22y6FLJwCx53asme"); } @@ -620,7 +620,7 @@ lazy_static! { (cap_accounts_data_size_per_block::id(), "cap the accounts data size per block #25517"), (stake_redelegate_instruction::id(), "enable the redelegate stake instruction #26294"), (preserve_rent_epoch_for_rent_exempt_accounts::id(), "preserve rent epoch for rent exempt accounts #26479"), - (enable_bpf_loader_extend_program_data_ix::id(), "enable bpf upgradeable loader ExtendProgramData instruction #25234"), + (enable_bpf_loader_extend_program_ix::id(), "enable bpf upgradeable loader ExtendProgram instruction #25234"), (enable_early_verification_of_account_modifications::id(), "enable early verification of account modifications #25899"), (prevent_crediting_accounts_that_end_rent_paying::id(), "prevent crediting rent paying accounts #26606"), (cap_bpf_program_instruction_accounts::id(), "enforce max number of accounts per bpf program instruction #26628"), diff --git a/transaction-status/src/parse_bpf_loader.rs b/transaction-status/src/parse_bpf_loader.rs index cfb31d36502ea9..1442d81506a047 100644 --- a/transaction-status/src/parse_bpf_loader.rs +++ b/transaction-status/src/parse_bpf_loader.rs @@ -150,19 +150,24 @@ pub fn parse_bpf_upgradeable_loader( }), }) } - UpgradeableLoaderInstruction::ExtendProgramData { additional_bytes } => { + UpgradeableLoaderInstruction::ExtendProgram { additional_bytes } => { check_num_bpf_upgradeable_loader_accounts(&instruction.accounts, 2)?; Ok(ParsedInstructionEnum { - instruction_type: "extendProgramData".to_string(), + instruction_type: "extendProgram".to_string(), info: json!({ "additionalBytes": additional_bytes, "programDataAccount": account_keys[instruction.accounts[0] as usize].to_string(), - "systemProgram": account_keys[instruction.accounts[1] as usize].to_string(), - "payerAccount": if instruction.accounts.len() > 2 { + "programAccount": account_keys[instruction.accounts[1] as usize].to_string(), + "systemProgram": if instruction.accounts.len() > 3 { Some(account_keys[instruction.accounts[2] as usize].to_string()) } else { None }, + "payerAccount": if instruction.accounts.len() > 4 { + Some(account_keys[instruction.accounts[3] as usize].to_string()) + } else { + None + }, }), }) } From 4ff3fdfbbe3fac0f1e570a5efc90469a40e84175 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Thu, 22 Sep 2022 06:34:58 +0000 Subject: [PATCH 133/465] docs: Add versioned tx info to exchange integration guide (backport #27564) (#27980) docs: Add versioned tx info to exchange integration guide (#27564) * docs: Add versioned tx info to exchange integration guide * feedback, extra tips, formatting (cherry picked from commit 91d556dc6628f87e1e7f7898e1b7ae70fcd84f66) Co-authored-by: Justin Starry --- docs/src/integrations/exchange.md | 326 ++++++++++++++++++++++-------- 1 file changed, 238 insertions(+), 88 deletions(-) diff --git a/docs/src/integrations/exchange.md b/docs/src/integrations/exchange.md index c308d001fbe1ad..5dd71508387c56 100644 --- a/docs/src/integrations/exchange.md +++ b/docs/src/integrations/exchange.md @@ -159,8 +159,14 @@ the minimum rent-exempt balance for your deposit accounts, query the [`getMinimumBalanceForRentExemption` endpoint](developing/clients/jsonrpc-api.md#getminimumbalanceforrentexemption): ```bash -curl -X POST -H "Content-Type: application/json" -d '{"jsonrpc": "2.0","id":1,"method":"getMinimumBalanceForRentExemption","params":[0]}' localhost:8899 +curl localhost:8899 -X POST -H "Content-Type: application/json" -d '{ + "jsonrpc": "2.0", + "id": 1, + "method": "getMinimumBalanceForRentExemption", + "params":[0] +}' +# Result {"jsonrpc":"2.0","result":890880,"id":1} ``` @@ -175,6 +181,37 @@ greater security. If so, you will need to move SOL to hot accounts using our When a user wants to deposit SOL into your exchange, instruct them to send a transfer to the appropriate deposit address. +### Versioned Transaction Migration + +When the Mainnet Beta network starts processing versioned transactions, exchanges +**MUST** make changes. If no changes are made, deposit detection will no longer +work properly because fetching a versioned transaction or a block containing +versioned transactions will return an error. + +- `{"maxSupportedTransactionVersion": 0}` + + The `maxSupportedTransactionVersion` parameter must be added to `getBlock` and + `getTransaction` requests to avoid disruption to deposit detection. The latest + transaction version is `0` and should be specified as the max supported + transaction version value. + +It's important to understand that versioned transactions allow users to create +transactions that use another set of account keys loaded from on-chain address +lookup tables. + +- `{"encoding": "jsonParsed"}` + + When fetching blocks and transactions, it's now recommended to use the + `"jsonParsed"` encoding because it includes all transaction account keys + (including those from lookup tables) in the message `"accountKeys"` list. + This makes it straightforward to resolve balance changes detailed in + `preBalances` / `postBalances` and `preTokenBalances` / `postTokenBalances`. + + If the `"json"` encoding is used instead, entries in `preBalances` / + `postBalances` and `preTokenBalances` / `postTokenBalances` may refer to + account keys that are **NOT** in the `"accountKeys"` list and need to be + resolved using `"loadedAddresses"` entries in the transaction metadata. + ### Poll for Blocks To track all the deposit accounts for your exchange, poll for each confirmed @@ -185,8 +222,14 @@ Solana API node. passing the last block you have already processed as the start-slot parameter: ```bash -curl -X POST -H "Content-Type: application/json" -d '{"jsonrpc": "2.0","id":1,"method":"getBlocks","params":[5]}' localhost:8899 +curl localhost:8899 -X POST -H "Content-Type: application/json" -d '{ + "jsonrpc": "2.0", + "id": 1, + "method": "getBlocks", + "params": [5] +}' +# Result {"jsonrpc":"2.0","result":[5,6,8,9,11],"id":1} ``` @@ -194,63 +237,92 @@ Not every slot produces a block, so there may be gaps in the sequence of integer - For each block, request its contents with a [`getBlock` request](developing/clients/jsonrpc-api.md#getblock): +### Block Fetching Tips + +- `{"rewards": false}` + +By default, fetched blocks will return information about validator fees on each +block and staking rewards on epoch boundaries. If you don't need this +information, disable it with the "rewards" parameter. + +- `{"transactionDetails": "accounts"}` + +By default, fetched blocks will return a lot of transaction info and metadata +that isn't necessary for tracking account balances. Set the "transactionDetails" +parameter to speed up block fetching. + ```bash -curl -X POST -H "Content-Type: application/json" -d '{"jsonrpc": "2.0","id":1,"method":"getBlock","params":[5, "json"]}' localhost:8899 +curl localhost:8899 -X POST -H 'Content-Type: application/json' -d '{ + "jsonrpc": "2.0", + "id": 1, + "method": "getBlock", + "params": [ + 148696677, + { + "encoding": "jsonParsed", + "maxSupportedTransactionVersion": 0, + "transactionDetails": "accounts", + "rewards": false + } + ] +}' +# Result { "jsonrpc": "2.0", "result": { - "blockhash": "2WcrsKSVANoe6xQHKtCcqNdUpCQPQ3vb6QTgi1dcE2oL", - "parentSlot": 4, - "previousBlockhash": "7ZDoGW83nXgP14vnn9XhGSaGjbuLdLWkQAoUQ7pg6qDZ", - "rewards": [], + "blockHeight": 134239354, + "blockTime": 1662064341, + "blockhash": "AuPLyvFX2yA1aVFUqvFfyiB2Sxwu2McL8ALhwbU6w7er", + "parentSlot": 148696675, + "previousBlockhash": "AKu155zCvrgrPvcVBFyboAfY2GF33S3ZDkj2Pa8x19XM", "transactions": [ { "meta": { "err": null, "fee": 5000, "postBalances": [ - 2033973061360, - 218099990000, - 42000000003 + 7161091286, + 2769675090, + 1 ], + "postTokenBalances": [], "preBalances": [ - 2044973066360, - 207099990000, - 42000000003 + 8130576328, + 1800195048, + 1 ], + "preTokenBalances": [], "status": { "Ok": null } }, "transaction": { - "message": { - "accountKeys": [ - "Bbqg1M4YVVfbhEzwA9SpC9FhsaG83YMTYoR4a8oTDLX", - "47Sbuv6jL7CViK9F2NMW51aQGhfdpUu7WNvKyH645Rfi", - "11111111111111111111111111111111" - ], - "header": { - "numReadonlySignedAccounts": 0, - "numReadonlyUnsignedAccounts": 1, - "numRequiredSignatures": 1 + "accountKeys": [ + { + "pubkey": "ogDsdvMKRRRMmsrT2hTPdkQBu1qY2z1jBDzgpi8HZri", + "signer": true, + "source": "transaction", + "writable": true }, - "instructions": [ - { - "accounts": [ - 0, - 1 - ], - "data": "3Bxs3zyH82bhpB8j", - "programIdIndex": 2 - } - ], - "recentBlockhash": "7GytRgrWXncJWKhzovVoP9kjfLwoiuDb3cWjpXGnmxWh" - }, + { + "pubkey": "3M2b3tLji7rvscqrLAHMukYxDK2nB96Q9hwfV6QkdzBN", + "signer": false, + "source": "transaction", + "writable": true + }, + { + "pubkey": "11111111111111111111111111111111", + "signer": false, + "source": "transaction", + "writable": false + } + ], "signatures": [ - "dhjhJp2V2ybQGVfELWM1aZy98guVVsxRCB5KhNiXFjCBMK5KEyzV8smhkVvs3xwkAug31KnpzJpiNPtcD5bG1t6" + "36Q383JMiqiobuPV9qBqy41xjMsVnQBm9rdZSdpbrLTGhSQDTGZJnocM4TQTVfUGfV2vEX9ZB3sex6wUBUWzjEvs" ] - } + }, + "version": "legacy" } ] }, @@ -262,9 +334,9 @@ The `preBalances` and `postBalances` fields allow you to track the balance changes in every account without having to parse the entire transaction. They list the starting and ending balances of each account in [lamports](../terminology.md#lamport), indexed to the `accountKeys` list. For -example, if the deposit address if interest is -`47Sbuv6jL7CViK9F2NMW51aQGhfdpUu7WNvKyH645Rfi`, this transaction represents a -transfer of 218099990000 - 207099990000 = 11000000000 lamports = 11 SOL +example, if the deposit address of interest is +`3M2b3tLji7rvscqrLAHMukYxDK2nB96Q9hwfV6QkdzBN`, this transaction represents a +transfer of 2769675090 - 1800195048 = 969,480,042 lamports = 0.969485042 SOL If you need more information about the transaction type or other specifics, you can request the block from RPC in binary format, and parse it using either our @@ -282,28 +354,45 @@ time. request to the api node: ```bash -curl -X POST -H "Content-Type: application/json" -d '{"jsonrpc": "2.0","id":1,"method":"getSignaturesForAddress","params":["6H94zdiaYfRfPfKjYLjyr2VFBg6JHXygy84r3qhc3NsC", {"limit": 3}]}' localhost:8899 +curl localhost:8899 -X POST -H "Content-Type: application/json" -d '{ + "jsonrpc": "2.0", + "id": 1, + "method": "getSignaturesForAddress", + "params": [ + "3M2b3tLji7rvscqrLAHMukYxDK2nB96Q9hwfV6QkdzBN", + { + "limit": 3 + } + ] +}' +# Result { "jsonrpc": "2.0", "result": [ { + "blockTime": 1662064640, + "confirmationStatus": "finalized", "err": null, "memo": null, - "signature": "35YGay1Lwjwgxe9zaH6APSHbt9gYQUCtBWTNL3aVwVGn9xTFw2fgds7qK5AL29mP63A9j3rh8KpN1TgSR62XCaby", - "slot": 114 + "signature": "3EDRvnD5TbbMS2mCusop6oyHLD8CgnjncaYQd5RXpgnjYUXRCYwiNPmXb6ZG5KdTK4zAaygEhfdLoP7TDzwKBVQp", + "slot": 148697216 }, { + "blockTime": 1662064434, + "confirmationStatus": "finalized", "err": null, "memo": null, - "signature": "4bJdGN8Tt2kLWZ3Fa1dpwPSEkXWWTSszPSf1rRVsCwNjxbbUdwTeiWtmi8soA26YmwnKD4aAxNp8ci1Gjpdv4gsr", - "slot": 112 + "signature": "4rPQ5wthgSP1kLdLqcRgQnkYkPAZqjv5vm59LijrQDSKuL2HLmZHoHjdSLDXXWFwWdaKXUuryRBGwEvSxn3TQckY", + "slot": 148696843 }, { + "blockTime": 1662064341, + "confirmationStatus": "finalized", "err": null, "memo": null, - "signature": "dhjhJp2V2ybQGVfELWM1aZy98guVVsxRCB5KhNiXFjCBMK5KEyzV8smhkVvs3xwkAug31KnpzJpiNPtcD5bG1t6", - "slot": 108 + "signature": "36Q383JMiqiobuPV9qBqy41xjMsVnQBm9rdZSdpbrLTGhSQDTGZJnocM4TQTVfUGfV2vEX9ZB3sex6wUBUWzjEvs", + "slot": 148696677 } ], "id": 1 @@ -314,58 +403,102 @@ curl -X POST -H "Content-Type: application/json" -d '{"jsonrpc": "2.0","id":1,"m [`getTransaction`](developing/clients/jsonrpc-api.md#gettransaction) request: ```bash -curl -X POST -H "Content-Type: application/json" -d '{"jsonrpc": "2.0","id":1,"method":"getTransaction","params":["dhjhJp2V2ybQGVfELWM1aZy98guVVsxRCB5KhNiXFjCBMK5KEyzV8smhkVvs3xwkAug31KnpzJpiNPtcD5bG1t6", "json"]}' localhost:8899 +curl localhost:8899 -X POST -H 'Content-Type: application/json' -d '{ + "jsonrpc":"2.0", + "id":1, + "method":"getTransaction", + "params":[ + "4Cswku8E9sm8TVZ4kP4iHbwCQygMDx78SXSURBkJuJAaXCbL9eYM8RPS2BDooLd5ftML4JjQrohe4deJrFkVzPBa", + { + "encoding":"jsonParsed", + "maxSupportedTransactionVersion":0 + } + ] +}' -// Result +# Result { "jsonrpc": "2.0", "result": { - "slot": 5, + "blockTime": 1660763773, + "meta": { + "err": null, + "fee": 5000, + "innerInstructions": [], + "logMessages": [ + "Program 11111111111111111111111111111111 invoke [1]", + "Program 11111111111111111111111111111111 success" + ], + "postBalances": [ + 2078778739, + 1, + 26396753106 + ], + "postTokenBalances": [], + "preBalances": [ + 2078783740, + 1, + 26396753105 + ], + "preTokenBalances": [], + "rewards": [], + "status": { + "Ok": null + } + }, + "slot": 155713260, "transaction": { "message": { "accountKeys": [ - "Bbqg1M4YVVfbhEzwA9SpC9FhsaG83YMTYoR4a8oTDLX", - "47Sbuv6jL7CViK9F2NMW51aQGhfdpUu7WNvKyH645Rfi", - "11111111111111111111111111111111" + { + "pubkey": "9aE476sH92Vz7DMPyq5WLPkrKWivxeuTKEFKd2sZZcde", + "signer": true, + "source": "transaction", + "writable": true + }, + { + "pubkey": "11111111111111111111111111111111", + "signer": false, + "source": "transaction", + "writable": false + }, + { + "pubkey": "2xNweLHLqrbx4zo1waDvgWJHgsUpPj8Y8icbAFeR4a8i", + "signer": false, + "source": "lookupTable", + "writable": true + } ], - "header": { - "numReadonlySignedAccounts": 0, - "numReadonlyUnsignedAccounts": 1, - "numRequiredSignatures": 1 - }, - "instructions": [ + "addressTableLookups": [ { - "accounts": [ - 0, + "accountKey": "3LZbwptsCkv5R5uu1GNZKiX9SoC6egNG8NXg9zH5ZVM9", + "readonlyIndexes": [], + "writableIndexes": [ 1 - ], - "data": "3Bxs3zyH82bhpB8j", - "programIdIndex": 2 + ] } ], - "recentBlockhash": "7GytRgrWXncJWKhzovVoP9kjfLwoiuDb3cWjpXGnmxWh" + "instructions": [ + { + "parsed": { + "info": { + "destination": "2xNweLHLqrbx4zo1waDvgWJHgsUpPj8Y8icbAFeR4a8i", + "lamports": 1, + "source": "9aE476sH92Vz7DMPyq5WLPkrKWivxeuTKEFKd2sZZcde" + }, + "type": "transfer" + }, + "program": "system", + "programId": "11111111111111111111111111111111" + } + ], + "recentBlockhash": "9nLh3gmVhyjrh68UeV1rafyo8BFNyZtHSRUUjZYikveh" }, "signatures": [ - "dhjhJp2V2ybQGVfELWM1aZy98guVVsxRCB5KhNiXFjCBMK5KEyzV8smhkVvs3xwkAug31KnpzJpiNPtcD5bG1t6" + "4Cswku8E9sm8TVZ4kP4iHbwCQygMDx78SXSURBkJuJAaXCbL9eYM8RPS2BDooLd5ftML4JjQrohe4deJrFkVzPBa" ] }, - "meta": { - "err": null, - "fee": 5000, - "postBalances": [ - 2033973061360, - 218099990000, - 42000000003 - ], - "preBalances": [ - 2044973066360, - 207099990000, - 42000000003 - ], - "status": { - "Ok": null - } - } + "version": 0 }, "id": 1 } @@ -435,8 +568,19 @@ The `confirmations` field reports how many transaction was processed. If `confirmations: null`, it is [finalized](../terminology.md#finality). ```bash -curl -X POST -H "Content-Type: application/json" -d '{"jsonrpc":"2.0", "id":1, "method":"getSignatureStatuses", "params":[["5VERv8NMvzbJMEkV8xnrLkEaWRtSz9CosKDYjCJjBRnbJLgp8uirBgmQpjKhoR4tjF3ZpRzrFmBV6UjKdiSZkQUW", "5j7s6NiJS3JAkvgkoc18WVAsiSaci2pxB2A6ueCJP4tprA2TFg9wSyTLeYouxPBJEMzJinENTkpA52YStRW5Dia7"]]}' http://localhost:8899 +curl localhost:8899 -X POST -H "Content-Type: application/json" -d '{ + "jsonrpc":"2.0", + "id":1, + "method":"getSignatureStatuses", + "params":[ + [ + "5VERv8NMvzbJMEkV8xnrLkEaWRtSz9CosKDYjCJjBRnbJLgp8uirBgmQpjKhoR4tjF3ZpRzrFmBV6UjKdiSZkQUW", + "5j7s6NiJS3JAkvgkoc18WVAsiSaci2pxB2A6ueCJP4tprA2TFg9wSyTLeYouxPBJEMzJinENTkpA52YStRW5Dia7" + ] + ] +}' +# Result { "jsonrpc": "2.0", "result": { @@ -480,7 +624,7 @@ As withdrawals are irreversible, it may be a good practice to validate a user-supplied account address before authorizing a withdrawal in order to prevent accidental loss of user funds. -#### Basic verfication +#### Basic verification Solana addresses a 32-byte array, encoded with the bitcoin base58 alphabet. This results in an ASCII text string matching the following regular expression: @@ -575,8 +719,14 @@ holding no data), currently: 0.000890880 SOL Similarly, every deposit account must contain at least this balance. ```bash -curl -X POST -H "Content-Type: application/json" -d '{"jsonrpc": "2.0","id":1,"method":"getMinimumBalanceForRentExemption","params":[0]}' localhost:8899 +curl localhost:8899 -X POST -H "Content-Type: application/json" -d '{ + "jsonrpc": "2.0", + "id": 1, + "method": "getMinimumBalanceForRentExemption", + "params": [0] +}' +# Result {"jsonrpc":"2.0","result":890880,"id":1} ``` @@ -722,7 +872,7 @@ identify the token mint and account owner (main wallet address) of the affected account. Note that if a receiving account is created during the transaction, it will have no -`preTokenBalance` entry as there is no existing account state. In this +`preTokenBalance` entry as there is no existing account state. In this case, the initial balance can be assumed to be zero. ### Withdrawing @@ -734,7 +884,7 @@ the exchange should check the address as [described above](#validating-user-supplied-account-addresses-for-withdrawals). Additionally this address must be owned by the System Program and have no account data. If the address has no SOL balance, user confirmation should be -obtained before proceeding with the withdrawal. All other withdrawal addresses +obtained before proceeding with the withdrawal. All other withdrawal addresses must be rejected. From the withdrawal address, the [Associated Token Account](https://spl.solana.com/associated-token-account) From 725e446f0a51e1568d227edb772de72c394e022e Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Fri, 23 Sep 2022 08:48:47 +0800 Subject: [PATCH 134/465] Relax keypair ordering restriction for `VersionedTransaction::try_new` (backport #27397) (#27979) Relax keypair ordering restriction for `VersionedTransaction::try_new` (#27397) * Relax keypair ordering restriction for VersionedTransaction::try_new * feedback (cherry picked from commit 56cebf9da2d5e675745cd86d3044e07ae803fe2f) Co-authored-by: Justin Starry --- sdk/src/transaction/versioned/mod.rs | 86 ++++++++++++++++++++++++++-- 1 file changed, 80 insertions(+), 6 deletions(-) diff --git a/sdk/src/transaction/versioned/mod.rs b/sdk/src/transaction/versioned/mod.rs index 5c0ce8772289ee..e257eb6b93e7a2 100644 --- a/sdk/src/transaction/versioned/mod.rs +++ b/sdk/src/transaction/versioned/mod.rs @@ -71,7 +71,7 @@ impl VersionedTransaction { return Err(SignerError::InvalidInput("invalid message".to_string())); } - let signer_keys = keypairs.pubkeys(); + let signer_keys = keypairs.try_pubkeys()?; let expected_signer_keys = &static_account_keys[0..message.header().num_required_signatures as usize]; @@ -81,12 +81,27 @@ impl VersionedTransaction { Ordering::Equal => Ok(()), }?; - if signer_keys != expected_signer_keys { - return Err(SignerError::KeypairPubkeyMismatch); - } - let message_data = message.serialize(); - let signatures = keypairs.try_sign_message(&message_data)?; + let signature_indexes: Vec = expected_signer_keys + .iter() + .map(|signer_key| { + signer_keys + .iter() + .position(|key| key == signer_key) + .ok_or(SignerError::KeypairPubkeyMismatch) + }) + .collect::>()?; + + let unordered_signatures = keypairs.try_sign_message(&message_data)?; + let signatures: Vec = signature_indexes + .into_iter() + .map(|index| { + unordered_signatures + .get(index) + .copied() + .ok_or_else(|| SignerError::InvalidInput("invalid keypairs".to_string())) + }) + .collect::>()?; Ok(Self { signatures, @@ -167,3 +182,62 @@ impl VersionedTransaction { .collect() } } + +#[cfg(test)] +mod tests { + use { + super::*, + crate::{ + message::Message as LegacyMessage, + signer::{keypair::Keypair, Signer}, + }, + solana_program::{ + instruction::{AccountMeta, Instruction}, + pubkey::Pubkey, + }, + }; + + #[test] + fn test_try_new() { + let keypair0 = Keypair::new(); + let keypair1 = Keypair::new(); + let keypair2 = Keypair::new(); + + let message = VersionedMessage::Legacy(LegacyMessage::new( + &[Instruction::new_with_bytes( + Pubkey::new_unique(), + &[], + vec![ + AccountMeta::new_readonly(keypair1.pubkey(), true), + AccountMeta::new_readonly(keypair2.pubkey(), false), + ], + )], + Some(&keypair0.pubkey()), + )); + + assert_eq!( + VersionedTransaction::try_new(message.clone(), &[&keypair0]), + Err(SignerError::NotEnoughSigners) + ); + + assert_eq!( + VersionedTransaction::try_new(message.clone(), &[&keypair0, &keypair0]), + Err(SignerError::KeypairPubkeyMismatch) + ); + + assert_eq!( + VersionedTransaction::try_new(message.clone(), &[&keypair1, &keypair2]), + Err(SignerError::KeypairPubkeyMismatch) + ); + + match VersionedTransaction::try_new(message.clone(), &[&keypair0, &keypair1]) { + Ok(tx) => assert_eq!(tx.verify_with_results(), vec![true; 2]), + Err(err) => assert_eq!(Some(err), None), + } + + match VersionedTransaction::try_new(message, &[&keypair1, &keypair0]) { + Ok(tx) => assert_eq!(tx.verify_with_results(), vec![true; 2]), + Err(err) => assert_eq!(Some(err), None), + } + } +} From 73bb1b059aa5621fbaf27a0a0f7e7214296792bf Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Fri, 23 Sep 2022 14:42:31 +0800 Subject: [PATCH 135/465] Support sending versioned txs in rpc client (backport #27933) (#27975) * Support sending versioned txs in rpc client (#27933) * fix conflicts Co-authored-by: Justin Starry --- client/src/nonblocking/rpc_client.rs | 44 +++++---- client/src/rpc_client.rs | 52 ++++++++-- sdk/src/transaction/versioned/mod.rs | 137 +++++++++++++++++++++++++++ 3 files changed, 205 insertions(+), 28 deletions(-) diff --git a/client/src/nonblocking/rpc_client.rs b/client/src/nonblocking/rpc_client.rs index c6f0098d71eb64..99f4ef82830ca2 100644 --- a/client/src/nonblocking/rpc_client.rs +++ b/client/src/nonblocking/rpc_client.rs @@ -17,7 +17,9 @@ use { client_error::{ClientError, ClientErrorKind, Result as ClientResult}, http_sender::HttpSender, mock_sender::MockSender, - rpc_client::{GetConfirmedSignaturesForAddress2Config, RpcClientConfig}, + rpc_client::{ + GetConfirmedSignaturesForAddress2Config, RpcClientConfig, SerializableTransaction, + }, rpc_config::{RpcAccountInfoConfig, *}, rpc_filter::{self, RpcFilterType}, rpc_request::{RpcError, RpcRequest, RpcResponseErrorData, TokenAccountsFilter}, @@ -43,7 +45,7 @@ use { message::Message, pubkey::Pubkey, signature::Signature, - transaction::{self, uses_durable_nonce, Transaction}, + transaction::{self}, }, solana_transaction_status::{ EncodedConfirmedBlock, EncodedConfirmedTransactionWithStatusMeta, TransactionStatus, @@ -656,7 +658,7 @@ impl RpcClient { /// ``` pub async fn send_and_confirm_transaction( &self, - transaction: &Transaction, + transaction: &impl SerializableTransaction, ) -> ClientResult { const SEND_RETRIES: usize = 1; const GET_STATUS_RETRIES: usize = usize::MAX; @@ -664,13 +666,13 @@ impl RpcClient { 'sending: for _ in 0..SEND_RETRIES { let signature = self.send_transaction(transaction).await?; - let recent_blockhash = if uses_durable_nonce(transaction).is_some() { + let recent_blockhash = if transaction.uses_durable_nonce() { let (recent_blockhash, ..) = self .get_latest_blockhash_with_commitment(CommitmentConfig::processed()) .await?; recent_blockhash } else { - transaction.message.recent_blockhash + *transaction.get_recent_blockhash() }; for status_retry in 0..GET_STATUS_RETRIES { @@ -708,7 +710,7 @@ impl RpcClient { pub async fn send_and_confirm_transaction_with_spinner( &self, - transaction: &Transaction, + transaction: &impl SerializableTransaction, ) -> ClientResult { self.send_and_confirm_transaction_with_spinner_and_commitment( transaction, @@ -719,7 +721,7 @@ impl RpcClient { pub async fn send_and_confirm_transaction_with_spinner_and_commitment( &self, - transaction: &Transaction, + transaction: &impl SerializableTransaction, commitment: CommitmentConfig, ) -> ClientResult { self.send_and_confirm_transaction_with_spinner_and_config( @@ -735,16 +737,16 @@ impl RpcClient { pub async fn send_and_confirm_transaction_with_spinner_and_config( &self, - transaction: &Transaction, + transaction: &impl SerializableTransaction, commitment: CommitmentConfig, config: RpcSendTransactionConfig, ) -> ClientResult { - let recent_blockhash = if uses_durable_nonce(transaction).is_some() { + let recent_blockhash = if transaction.uses_durable_nonce() { self.get_latest_blockhash_with_commitment(CommitmentConfig::processed()) .await? .0 } else { - transaction.message.recent_blockhash + *transaction.get_recent_blockhash() }; let signature = self .send_transaction_with_config(transaction, config) @@ -826,7 +828,10 @@ impl RpcClient { /// # })?; /// # Ok::<(), ClientError>(()) /// ``` - pub async fn send_transaction(&self, transaction: &Transaction) -> ClientResult { + pub async fn send_transaction( + &self, + transaction: &impl SerializableTransaction, + ) -> ClientResult { self.send_transaction_with_config( transaction, RpcSendTransactionConfig { @@ -924,7 +929,7 @@ impl RpcClient { /// ``` pub async fn send_transaction_with_config( &self, - transaction: &Transaction, + transaction: &impl SerializableTransaction, config: RpcSendTransactionConfig, ) -> ClientResult { let encoding = if let Some(encoding) = config.encoding { @@ -941,7 +946,7 @@ impl RpcClient { preflight_commitment: Some(preflight_commitment.commitment), ..config }; - let serialized_encoded = serialize_and_encode::(transaction, encoding)?; + let serialized_encoded = serialize_and_encode(transaction, encoding)?; let signature_base58_str: String = match self .send( RpcRequest::SendTransaction, @@ -981,14 +986,15 @@ impl RpcClient { // should not be passed along to confirmation methods. The transaction may or may // not have been submitted to the cluster, so callers should verify the success of // the correct transaction signature independently. - if signature != transaction.signatures[0] { + if signature != *transaction.get_signature() { Err(RpcError::RpcRequestError(format!( "RPC node returned mismatched signature {:?}, expected {:?}", - signature, transaction.signatures[0] + signature, + transaction.get_signature() )) .into()) } else { - Ok(transaction.signatures[0]) + Ok(*transaction.get_signature()) } } @@ -1290,7 +1296,7 @@ impl RpcClient { /// ``` pub async fn simulate_transaction( &self, - transaction: &Transaction, + transaction: &impl SerializableTransaction, ) -> RpcResult { self.simulate_transaction_with_config( transaction, @@ -1377,7 +1383,7 @@ impl RpcClient { /// ``` pub async fn simulate_transaction_with_config( &self, - transaction: &Transaction, + transaction: &impl SerializableTransaction, config: RpcSimulateTransactionConfig, ) -> RpcResult { let encoding = if let Some(encoding) = config.encoding { @@ -1392,7 +1398,7 @@ impl RpcClient { commitment: Some(commitment), ..config }; - let serialized_encoded = serialize_and_encode::(transaction, encoding)?; + let serialized_encoded = serialize_and_encode(transaction, encoding)?; self.send( RpcRequest::SimulateTransaction, json!([serialized_encoded, config]), diff --git a/client/src/rpc_client.rs b/client/src/rpc_client.rs index c216df985a8bd8..96b151fc15e411 100644 --- a/client/src/rpc_client.rs +++ b/client/src/rpc_client.rs @@ -20,6 +20,7 @@ use { rpc_response::*, rpc_sender::*, }, + serde::Serialize, serde_json::Value, solana_account_decoder::{ parse_token::{UiTokenAccount, UiTokenAmount}, @@ -36,7 +37,7 @@ use { message::Message, pubkey::Pubkey, signature::Signature, - transaction::{self, Transaction}, + transaction::{self, uses_durable_nonce, Transaction, VersionedTransaction}, }, solana_transaction_status::{ EncodedConfirmedBlock, EncodedConfirmedTransactionWithStatusMeta, TransactionStatus, @@ -60,6 +61,36 @@ impl RpcClientConfig { } } +/// Trait used to add support for versioned transactions to RPC APIs while +/// retaining backwards compatibility +pub trait SerializableTransaction: Serialize { + fn get_signature(&self) -> &Signature; + fn get_recent_blockhash(&self) -> &Hash; + fn uses_durable_nonce(&self) -> bool; +} +impl SerializableTransaction for Transaction { + fn get_signature(&self) -> &Signature { + &self.signatures[0] + } + fn get_recent_blockhash(&self) -> &Hash { + &self.message.recent_blockhash + } + fn uses_durable_nonce(&self) -> bool { + uses_durable_nonce(self).is_some() + } +} +impl SerializableTransaction for VersionedTransaction { + fn get_signature(&self) -> &Signature { + &self.signatures[0] + } + fn get_recent_blockhash(&self) -> &Hash { + self.message.recent_blockhash() + } + fn uses_durable_nonce(&self) -> bool { + self.uses_durable_nonce() + } +} + #[derive(Debug, Default)] pub struct GetConfirmedSignaturesForAddress2Config { pub before: Option, @@ -622,14 +653,14 @@ impl RpcClient { /// ``` pub fn send_and_confirm_transaction( &self, - transaction: &Transaction, + transaction: &impl SerializableTransaction, ) -> ClientResult { self.invoke(self.rpc_client.send_and_confirm_transaction(transaction)) } pub fn send_and_confirm_transaction_with_spinner( &self, - transaction: &Transaction, + transaction: &impl SerializableTransaction, ) -> ClientResult { self.invoke( self.rpc_client @@ -639,7 +670,7 @@ impl RpcClient { pub fn send_and_confirm_transaction_with_spinner_and_commitment( &self, - transaction: &Transaction, + transaction: &impl SerializableTransaction, commitment: CommitmentConfig, ) -> ClientResult { self.invoke( @@ -650,7 +681,7 @@ impl RpcClient { pub fn send_and_confirm_transaction_with_spinner_and_config( &self, - transaction: &Transaction, + transaction: &impl SerializableTransaction, commitment: CommitmentConfig, config: RpcSendTransactionConfig, ) -> ClientResult { @@ -734,7 +765,10 @@ impl RpcClient { /// let signature = rpc_client.send_transaction(&tx)?; /// # Ok::<(), ClientError>(()) /// ``` - pub fn send_transaction(&self, transaction: &Transaction) -> ClientResult { + pub fn send_transaction( + &self, + transaction: &impl SerializableTransaction, + ) -> ClientResult { self.invoke(self.rpc_client.send_transaction(transaction)) } @@ -819,7 +853,7 @@ impl RpcClient { /// ``` pub fn send_transaction_with_config( &self, - transaction: &Transaction, + transaction: &impl SerializableTransaction, config: RpcSendTransactionConfig, ) -> ClientResult { self.invoke( @@ -1025,7 +1059,7 @@ impl RpcClient { /// ``` pub fn simulate_transaction( &self, - transaction: &Transaction, + transaction: &impl SerializableTransaction, ) -> RpcResult { self.invoke(self.rpc_client.simulate_transaction(transaction)) } @@ -1102,7 +1136,7 @@ impl RpcClient { /// ``` pub fn simulate_transaction_with_config( &self, - transaction: &Transaction, + transaction: &impl SerializableTransaction, config: RpcSimulateTransactionConfig, ) -> RpcResult { self.invoke( diff --git a/sdk/src/transaction/versioned/mod.rs b/sdk/src/transaction/versioned/mod.rs index e257eb6b93e7a2..fd749c3892ae5f 100644 --- a/sdk/src/transaction/versioned/mod.rs +++ b/sdk/src/transaction/versioned/mod.rs @@ -20,6 +20,12 @@ use { mod sanitized; pub use sanitized::*; +use { + crate::program_utils::limited_deserialize, + solana_program::{ + nonce::NONCED_TX_MARKER_IX_INDEX, system_instruction::SystemInstruction, system_program, + }, +}; /// Type that serializes to the string "legacy" #[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)] @@ -181,6 +187,35 @@ impl VersionedTransaction { .map(|(signature, pubkey)| signature.verify(pubkey.as_ref(), message_bytes)) .collect() } + + /// Returns true if transaction begins with a valid advance nonce + /// instruction. Since dynamically loaded addresses can't have write locks + /// demoted without loading addresses, this shouldn't be used in the + /// runtime. + pub fn uses_durable_nonce(&self) -> bool { + let message = &self.message; + message + .instructions() + .get(NONCED_TX_MARKER_IX_INDEX as usize) + .filter(|instruction| { + // Is system program + matches!( + message.static_account_keys().get(instruction.program_id_index as usize), + Some(program_id) if system_program::check_id(program_id) + ) + // Is a nonce advance instruction + && matches!( + limited_deserialize(&instruction.data), + Ok(SystemInstruction::AdvanceNonceAccount) + ) + // Nonce account is writable + && matches!( + instruction.accounts.first(), + Some(index) if message.is_maybe_writable(*index as usize) + ) + }) + .is_some() + } } #[cfg(test)] @@ -190,6 +225,7 @@ mod tests { crate::{ message::Message as LegacyMessage, signer::{keypair::Keypair, Signer}, + system_instruction, sysvar, }, solana_program::{ instruction::{AccountMeta, Instruction}, @@ -240,4 +276,105 @@ mod tests { Err(err) => assert_eq!(Some(err), None), } } + + fn nonced_transfer_tx() -> (Pubkey, Pubkey, VersionedTransaction) { + let from_keypair = Keypair::new(); + let from_pubkey = from_keypair.pubkey(); + let nonce_keypair = Keypair::new(); + let nonce_pubkey = nonce_keypair.pubkey(); + let instructions = [ + system_instruction::advance_nonce_account(&nonce_pubkey, &nonce_pubkey), + system_instruction::transfer(&from_pubkey, &nonce_pubkey, 42), + ]; + let message = LegacyMessage::new(&instructions, Some(&nonce_pubkey)); + let tx = Transaction::new(&[&from_keypair, &nonce_keypair], message, Hash::default()); + (from_pubkey, nonce_pubkey, tx.into()) + } + + #[test] + fn tx_uses_nonce_ok() { + let (_, _, tx) = nonced_transfer_tx(); + assert!(tx.uses_durable_nonce()); + } + + #[test] + fn tx_uses_nonce_empty_ix_fail() { + assert!(!VersionedTransaction::default().uses_durable_nonce()); + } + + #[test] + fn tx_uses_nonce_bad_prog_id_idx_fail() { + let (_, _, mut tx) = nonced_transfer_tx(); + match &mut tx.message { + VersionedMessage::Legacy(message) => { + message.instructions.get_mut(0).unwrap().program_id_index = 255u8; + } + VersionedMessage::V0(_) => unreachable!(), + }; + assert!(!tx.uses_durable_nonce()); + } + + #[test] + fn tx_uses_nonce_first_prog_id_not_nonce_fail() { + let from_keypair = Keypair::new(); + let from_pubkey = from_keypair.pubkey(); + let nonce_keypair = Keypair::new(); + let nonce_pubkey = nonce_keypair.pubkey(); + let instructions = [ + system_instruction::transfer(&from_pubkey, &nonce_pubkey, 42), + system_instruction::advance_nonce_account(&nonce_pubkey, &nonce_pubkey), + ]; + let message = LegacyMessage::new(&instructions, Some(&from_pubkey)); + let tx = Transaction::new(&[&from_keypair, &nonce_keypair], message, Hash::default()); + let tx = VersionedTransaction::from(tx); + assert!(!tx.uses_durable_nonce()); + } + + #[test] + fn tx_uses_ro_nonce_account() { + let from_keypair = Keypair::new(); + let from_pubkey = from_keypair.pubkey(); + let nonce_keypair = Keypair::new(); + let nonce_pubkey = nonce_keypair.pubkey(); + let account_metas = vec![ + AccountMeta::new_readonly(nonce_pubkey, false), + #[allow(deprecated)] + AccountMeta::new_readonly(sysvar::recent_blockhashes::id(), false), + AccountMeta::new_readonly(nonce_pubkey, true), + ]; + let nonce_instruction = Instruction::new_with_bincode( + system_program::id(), + &system_instruction::SystemInstruction::AdvanceNonceAccount, + account_metas, + ); + let tx = Transaction::new_signed_with_payer( + &[nonce_instruction], + Some(&from_pubkey), + &[&from_keypair, &nonce_keypair], + Hash::default(), + ); + let tx = VersionedTransaction::from(tx); + assert!(!tx.uses_durable_nonce()); + } + + #[test] + fn tx_uses_nonce_wrong_first_nonce_ix_fail() { + let from_keypair = Keypair::new(); + let from_pubkey = from_keypair.pubkey(); + let nonce_keypair = Keypair::new(); + let nonce_pubkey = nonce_keypair.pubkey(); + let instructions = [ + system_instruction::withdraw_nonce_account( + &nonce_pubkey, + &nonce_pubkey, + &from_pubkey, + 42, + ), + system_instruction::transfer(&from_pubkey, &nonce_pubkey, 42), + ]; + let message = LegacyMessage::new(&instructions, Some(&nonce_pubkey)); + let tx = Transaction::new(&[&from_keypair, &nonce_keypair], message, Hash::default()); + let tx = VersionedTransaction::from(tx); + assert!(!tx.uses_durable_nonce()); + } } From eb4e5bf6053feb9056e5161c709391df2624efbe Mon Sep 17 00:00:00 2001 From: Michael Vines Date: Thu, 22 Sep 2022 14:51:26 -0700 Subject: [PATCH 136/465] Nodes with 0% commission are now included in the `getBlock` RPC method `rewards` response field. (cherry picked from commit fb686cc83b32a31b77e286163d75ba5d16b52eb8) --- runtime/src/bank.rs | 53 +++++++++++++++++++++++++-------------------- 1 file changed, 30 insertions(+), 23 deletions(-) diff --git a/runtime/src/bank.rs b/runtime/src/bank.rs index 91faab65025167..c9717f12757c50 100644 --- a/runtime/src/bank.rs +++ b/runtime/src/bank.rs @@ -3228,19 +3228,15 @@ impl Bank { self.store_account(&vote_pubkey, &vote_account); } - if vote_rewards > 0 { - Some(( - vote_pubkey, - RewardInfo { - reward_type: RewardType::Voting, - lamports: vote_rewards as i64, - post_balance: vote_account.lamports(), - commission: Some(commission), - }, - )) - } else { - None - } + Some(( + vote_pubkey, + RewardInfo { + reward_type: RewardType::Voting, + lamports: vote_rewards as i64, + post_balance: vote_account.lamports(), + commission: Some(commission), + }, + )) }, ) .collect::>(); @@ -10295,15 +10291,26 @@ pub(crate) mod tests { // verify validator rewards show up in bank1.rewards vector assert_eq!( *bank1.rewards.read().unwrap(), - vec![( - stake_id, - RewardInfo { - reward_type: RewardType::Staking, - lamports: validator_rewards as i64, - post_balance: bank1.get_balance(&stake_id), - commission: Some(0), - } - )] + vec![ + ( + vote_id, + RewardInfo { + reward_type: RewardType::Voting, + lamports: 0, + post_balance: bank1.get_balance(&vote_id), + commission: Some(0), + } + ), + ( + stake_id, + RewardInfo { + reward_type: RewardType::Staking, + lamports: validator_rewards as i64, + post_balance: bank1.get_balance(&stake_id), + commission: Some(0), + } + ) + ] ); bank1.freeze(); assert!(bank1.calculate_and_verify_capitalization(true)); @@ -10346,7 +10353,7 @@ pub(crate) mod tests { let vote_id = solana_sdk::pubkey::new_rand(); let mut vote_account = - vote_state::create_account(&vote_id, &solana_sdk::pubkey::new_rand(), 50, 100); + vote_state::create_account(&vote_id, &solana_sdk::pubkey::new_rand(), 0, 100); let (stake_id1, stake_account1) = crate::stakes::tests::create_stake_account(123, &vote_id); let (stake_id2, stake_account2) = crate::stakes::tests::create_stake_account(456, &vote_id); From e1bbf8c81af4ccd9877cd2557099b65cc44d245a Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Fri, 23 Sep 2022 11:51:05 +0000 Subject: [PATCH 137/465] Add Blockstore::highest_slot() method (backport #27981) (#28012) Add Blockstore::highest_slot() method (#27981) (cherry picked from commit e4affb9feaecde9a65c8e932c0d480d946a8dc84) Co-authored-by: steviez --- core/src/validator.rs | 29 ++++------------------------ ledger/src/blockstore.rs | 31 ++++++++++++++++++++++++++++++ ledger/src/blockstore_processor.rs | 6 ++---- 3 files changed, 37 insertions(+), 29 deletions(-) diff --git a/core/src/validator.rs b/core/src/validator.rs index 09f0e4fe47b76b..ffac0201f6f169 100644 --- a/core/src/validator.rs +++ b/core/src/validator.rs @@ -1435,7 +1435,9 @@ fn load_blockstore( let blockstore = Arc::new(blockstore); let blockstore_root_scan = BlockstoreRootScan::new(config, &blockstore, exit); - let halt_at_slot = config.halt_at_slot.or_else(|| highest_slot(&blockstore)); + let halt_at_slot = config + .halt_at_slot + .or_else(|| blockstore.highest_slot().unwrap_or(None)); let process_options = blockstore_processor::ProcessOptions { poh_verify: config.poh_verify, @@ -1534,29 +1536,6 @@ fn load_blockstore( ) } -fn highest_slot(blockstore: &Blockstore) -> Option { - let mut start = Measure::start("Blockstore search for highest slot"); - let highest_slot = blockstore - .slot_meta_iterator(0) - .map(|metas| { - let slots: Vec<_> = metas.map(|(slot, _)| slot).collect(); - if slots.is_empty() { - info!("Ledger is empty"); - None - } else { - let first = slots.first().unwrap(); - Some(*slots.last().unwrap_or(first)) - } - }) - .unwrap_or_else(|err| { - warn!("Failed to ledger slot meta: {}", err); - None - }); - start.stop(); - info!("{}. Found slot {:?}", start, highest_slot); - highest_slot -} - pub struct ProcessBlockStore<'a> { id: &'a Pubkey, vote_account: &'a Pubkey, @@ -1615,7 +1594,7 @@ impl<'a> ProcessBlockStore<'a> { *self.start_progress.write().unwrap() = ValidatorStartProgress::LoadingLedger; let exit = Arc::new(AtomicBool::new(false)); - if let Some(max_slot) = highest_slot(self.blockstore) { + if let Ok(Some(max_slot)) = self.blockstore.highest_slot() { let bank_forks = self.bank_forks.clone(); let exit = exit.clone(); let start_progress = self.start_progress.clone(); diff --git a/ledger/src/blockstore.rs b/ledger/src/blockstore.rs index 4acb9fa8aad2ed..4289df09e7ef46 100644 --- a/ledger/src/blockstore.rs +++ b/ledger/src/blockstore.rs @@ -3216,6 +3216,16 @@ impl Blockstore { self.last_root() } + /// Returns the highest available slot in the blockstore + pub fn highest_slot(&self) -> Result> { + let highest_slot = self + .db + .iter::(IteratorMode::End)? + .next() + .map(|(slot, _)| slot); + Ok(highest_slot) + } + pub fn lowest_cleanup_slot(&self) -> Slot { *self.lowest_cleanup_slot.read().unwrap() } @@ -8390,6 +8400,27 @@ pub mod tests { assert_eq!(blockstore.lowest_slot(), 6); } + #[test] + fn test_highest_slot() { + let ledger_path = get_tmp_ledger_path_auto_delete!(); + let blockstore = Blockstore::open(ledger_path.path()).unwrap(); + + assert_eq!(blockstore.highest_slot().unwrap(), None); + + for slot in 0..10 { + let (shreds, _) = make_slot_entries(slot, 0, 1); + blockstore.insert_shreds(shreds, None, false).unwrap(); + assert_eq!(blockstore.highest_slot().unwrap(), Some(slot)); + } + blockstore + .run_purge(5, 10, PurgeType::PrimaryIndex) + .unwrap(); + assert_eq!(blockstore.highest_slot().unwrap(), Some(4)); + + blockstore.run_purge(0, 4, PurgeType::PrimaryIndex).unwrap(); + assert_eq!(blockstore.highest_slot().unwrap(), None); + } + #[test] fn test_recovery() { let ledger_path = get_tmp_ledger_path_auto_delete!(); diff --git a/ledger/src/blockstore_processor.rs b/ledger/src/blockstore_processor.rs index 29dfc67c3a9bb6..20ac00f7c93435 100644 --- a/ledger/src/blockstore_processor.rs +++ b/ledger/src/blockstore_processor.rs @@ -808,10 +808,8 @@ pub fn process_blockstore_from_root( ); } - if let Ok(metas) = blockstore.slot_meta_iterator(start_slot) { - if let Some((slot, _meta)) = metas.last() { - info!("ledger holds data through slot {}", slot); - } + if let Ok(Some(highest_slot)) = blockstore.highest_slot() { + info!("ledger holds data through slot {}", highest_slot); } let mut timing = ExecuteTimings::default(); From ab48215279f012fcd447eec2c7e3dd9b47de5ac1 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Fri, 23 Sep 2022 16:18:36 +0000 Subject: [PATCH 138/465] boxes StakeState in stake_account::Error::InvalidDelegation (backport #28006) (#28014) boxes StakeState in stake_account::Error::InvalidDelegation (#28006) This avoids clippy::result_large_err error on newer rust versions: https://rust-lang.github.io/rust-clippy/master/#result_large_err (cherry picked from commit 315707504efdf3301fb6fc458cbc63eddc20fd15) Co-authored-by: behzad nouri --- runtime/src/stake_account.rs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/runtime/src/stake_account.rs b/runtime/src/stake_account.rs index b335255d7ec680..8421e3783211ab 100644 --- a/runtime/src/stake_account.rs +++ b/runtime/src/stake_account.rs @@ -29,7 +29,7 @@ pub enum Error { #[error(transparent)] InstructionError(#[from] InstructionError), #[error("Invalid delegation: {0:?}")] - InvalidDelegation(StakeState), + InvalidDelegation(Box), #[error("Invalid stake account owner: {0}")] InvalidOwner(/*owner:*/ Pubkey), } @@ -79,7 +79,9 @@ impl TryFrom for StakeAccount { fn try_from(account: AccountSharedData) -> Result { let stake_account = StakeAccount::<()>::try_from(account)?; if stake_account.stake_state.delegation().is_none() { - return Err(Error::InvalidDelegation(stake_account.stake_state)); + return Err(Error::InvalidDelegation(Box::new( + stake_account.stake_state, + ))); } Ok(Self { account: stake_account.account, From cba444b6ed8ee6f105cc3ea0c95e2e2e6498bf88 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Fri, 23 Sep 2022 17:32:17 +0000 Subject: [PATCH 139/465] Update CI error message when the version number needs to be bumped (backport #27997) (#28022) Update CI error message when the version number needs to be bumped (#27997) * Update CI error message when the version number needs to be bumped * Move channel version check to its own file and put it before nits (cherry picked from commit 0a97a5a00639142aa517165104b3ecc1e74c4d33) Co-authored-by: Will Hickey --- ci/check-channel-version.sh | 27 +++++++++++++++++++++++++++ ci/test-sanity.sh | 26 +------------------------- 2 files changed, 28 insertions(+), 25 deletions(-) create mode 100755 ci/check-channel-version.sh diff --git a/ci/check-channel-version.sh b/ci/check-channel-version.sh new file mode 100755 index 00000000000000..abd9d10634c6e8 --- /dev/null +++ b/ci/check-channel-version.sh @@ -0,0 +1,27 @@ + # Ensure the current channel version is not equal ("greater") than +# the version of the latest tag +if [[ -z $CI_TAG ]]; then + echo "--- channel version check" + ( + eval "$(ci/channel-info.sh)" + + if [[ -n $CHANNEL_LATEST_TAG ]]; then + source scripts/read-cargo-variable.sh + + version=$(readCargoVariable version "version/Cargo.toml") + echo "latest channel tag: $CHANNEL_LATEST_TAG" + echo "current version: v$version" + + if [[ $CHANNEL_LATEST_TAG = v$version ]]; then + echo -e "\033[31mError:\033[0m A release has been tagged since your feature branch was last rebased. must be greater than .. + Possible solutions (in the order they should be tried): + 1. rebase your feature branch on the base branch + 2. merge the PR: \"Bump Version to ...\" once it has passed ci/checks, then rebase + 3. ask for help in #devops on discord" + exit 1 + fi + else + echo "Skipped. CHANNEL_LATEST_TAG (CHANNEL=$CHANNEL) unset" + fi + ) +fi diff --git a/ci/test-sanity.sh b/ci/test-sanity.sh index c4dd244bb10e4d..7d482982ef21c4 100755 --- a/ci/test-sanity.sh +++ b/ci/test-sanity.sh @@ -22,32 +22,8 @@ source ci/_ echo +_ ci/check-channel-version.sh _ ci/nits.sh _ ci/check-ssh-keys.sh - -# Ensure the current channel version is not equal ("greater") than -# the version of the latest tag -if [[ -z $CI_TAG ]]; then - echo "--- channel version check" - ( - eval "$(ci/channel-info.sh)" - - if [[ -n $CHANNEL_LATEST_TAG ]]; then - source scripts/read-cargo-variable.sh - - version=$(readCargoVariable version "version/Cargo.toml") - echo "version: v$version" - echo "latest channel tag: $CHANNEL_LATEST_TAG" - - if [[ $CHANNEL_LATEST_TAG = v$version ]]; then - echo "Error: please run ./scripts/increment-cargo-version.sh" - exit 1 - fi - else - echo "Skipped. CHANNEL_LATEST_TAG (CHANNEL=$CHANNEL) unset" - fi - ) -fi - echo --- ok From b58584a137166c7b092685d85c321e4d07a32d62 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Fri, 23 Sep 2022 18:44:48 +0000 Subject: [PATCH 140/465] patches clippy errors from new rust nightly release (backport #27996) (#28013) * patches clippy errors from new rust nightly release (#27996) (cherry picked from commit 9a57c64f21ed94e3afbb6c495d5f65c8a799f420) # Conflicts: # core/src/validator.rs # programs/bpf/build.rs # runtime/src/accounts_db.rs # runtime/src/status_cache.rs # sdk/cargo-build-sbf/tests/crates.rs * removes mergify merge conflicts Co-authored-by: behzad nouri --- account-decoder/src/lib.rs | 5 +- bench-streamer/src/main.rs | 2 +- bucket_map/src/bucket_map.rs | 4 +- clap-utils/src/keypair.rs | 2 +- clap-v3-utils/src/keypair.rs | 2 +- cli-config/src/config.rs | 4 +- cli/src/cluster_query.rs | 2 +- cli/src/program.rs | 2 +- client/src/rpc_filter.rs | 2 +- .../broadcast_fake_shreds_run.rs | 2 +- core/src/consensus.rs | 2 +- core/src/repair_weight.rs | 11 +-- core/src/replay_stage.rs | 2 +- core/src/snapshot_packager_service.rs | 2 +- core/src/tower_storage.rs | 2 +- core/src/unprocessed_packet_batches.rs | 2 +- core/src/warm_quic_cache_service.rs | 2 +- core/src/window_service.rs | 2 +- core/tests/snapshots.rs | 2 +- gossip/src/cluster_info.rs | 6 +- install/src/command.rs | 4 +- install/src/defaults.rs | 6 +- keygen/src/keygen.rs | 10 +-- ledger-tool/src/bigtable.rs | 2 +- ledger-tool/src/ledger_path.rs | 2 +- ledger/src/blockstore.rs | 4 +- ledger/src/blockstore_db.rs | 2 +- ledger/src/sigverify_shreds.rs | 2 +- local-cluster/tests/local_cluster.rs | 2 +- net-utils/src/lib.rs | 2 +- perf/src/perf_libs.rs | 2 +- program-test/src/lib.rs | 4 +- programs/bpf/build.rs | 2 +- rbpf-cli/src/main.rs | 6 +- remote-wallet/src/bin/ledger-udev.rs | 2 +- rpc/src/rpc_subscriptions.rs | 4 +- runtime/benches/status_cache.rs | 2 +- .../src/accounts_db/geyser_plugin_utils.rs | 4 +- runtime/src/append_vec.rs | 2 +- runtime/src/bank.rs | 12 +-- runtime/src/cost_tracker.rs | 2 +- runtime/src/expected_rent_collection.rs | 10 +-- runtime/src/hardened_unpack.rs | 2 +- runtime/src/secondary_index.rs | 10 +-- runtime/src/snapshot_utils.rs | 10 +-- runtime/src/status_cache.rs | 77 +++++++++---------- sdk/cargo-build-sbf/src/main.rs | 22 +++--- sdk/cargo-build-sbf/tests/crates.rs | 2 +- sdk/cargo-test-sbf/src/main.rs | 2 +- sdk/macro/src/lib.rs | 4 +- sdk/src/genesis_config.rs | 4 +- sdk/src/packet.rs | 3 +- sdk/src/secp256k1_instruction.rs | 4 +- streamer/src/packet.rs | 2 +- streamer/src/recvmmsg.rs | 13 ++-- streamer/src/sendmmsg.rs | 3 +- streamer/tests/recvmmsg.rs | 4 +- sys-tuner/src/main.rs | 2 +- tokens/src/commands.rs | 6 +- upload-perf/src/upload-perf.rs | 2 +- validator/src/bin/solana-test-validator.rs | 2 +- validator/src/lib.rs | 2 +- 62 files changed, 151 insertions(+), 173 deletions(-) diff --git a/account-decoder/src/lib.rs b/account-decoder/src/lib.rs index 303391d1d89b4e..b73b50d5286680 100644 --- a/account-decoder/src/lib.rs +++ b/account-decoder/src/lib.rs @@ -114,10 +114,7 @@ impl UiAccount { { UiAccountData::Json(parsed_data) } else { - UiAccountData::Binary( - base64::encode(&account.data()), - UiAccountEncoding::Base64, - ) + UiAccountData::Binary(base64::encode(account.data()), UiAccountEncoding::Base64) } } }; diff --git a/bench-streamer/src/main.rs b/bench-streamer/src/main.rs index f03d29bf7428e1..c4951574f14db6 100644 --- a/bench-streamer/src/main.rs +++ b/bench-streamer/src/main.rs @@ -38,7 +38,7 @@ fn producer(addr: &SocketAddr, exit: Arc) -> JoinHandle<()> { let a = p.meta.socket_addr(); assert!(p.meta.size <= PACKET_DATA_SIZE); let data = p.data(..).unwrap_or_default(); - send.send_to(data, &a).unwrap(); + send.send_to(data, a).unwrap(); num += 1; } assert_eq!(num, 10); diff --git a/bucket_map/src/bucket_map.rs b/bucket_map/src/bucket_map.rs index 9df7651da72eb0..02666316f55a4a 100644 --- a/bucket_map/src/bucket_map.rs +++ b/bucket_map/src/bucket_map.rs @@ -105,8 +105,8 @@ impl BucketMap { fn erase_previous_drives(drives: &[PathBuf]) { drives.iter().for_each(|folder| { - let _ = fs::remove_dir_all(&folder); - let _ = fs::create_dir_all(&folder); + let _ = fs::remove_dir_all(folder); + let _ = fs::create_dir_all(folder); }) } diff --git a/clap-utils/src/keypair.rs b/clap-utils/src/keypair.rs index 1634e6bb3e00fe..dd0c29a2e778f0 100644 --- a/clap-utils/src/keypair.rs +++ b/clap-utils/src/keypair.rs @@ -1229,7 +1229,7 @@ mod tests { } if p == absolute_path_str) ); assert!( - matches!(parse_signer_source(&relative_path_str).unwrap(), SignerSource { + matches!(parse_signer_source(relative_path_str).unwrap(), SignerSource { kind: SignerSourceKind::Filepath(p), derivation_path: None, legacy: false, diff --git a/clap-v3-utils/src/keypair.rs b/clap-v3-utils/src/keypair.rs index fd7dd6d5026c34..8fe60437112e21 100644 --- a/clap-v3-utils/src/keypair.rs +++ b/clap-v3-utils/src/keypair.rs @@ -1229,7 +1229,7 @@ mod tests { } if p == absolute_path_str) ); assert!( - matches!(parse_signer_source(&relative_path_str).unwrap(), SignerSource { + matches!(parse_signer_source(relative_path_str).unwrap(), SignerSource { kind: SignerSourceKind::Filepath(p), derivation_path: None, legacy: false, diff --git a/cli-config/src/config.rs b/cli-config/src/config.rs index bedac8a381db35..d3dc4bc0aacd59 100644 --- a/cli-config/src/config.rs +++ b/cli-config/src/config.rs @@ -18,7 +18,7 @@ lazy_static! { /// [lazy_static]: https://docs.rs/lazy_static pub static ref CONFIG_FILE: Option = { dirs_next::home_dir().map(|mut path| { - path.extend(&[".config", "solana", "cli", "config.yml"]); + path.extend([".config", "solana", "cli", "config.yml"]); path.to_str().unwrap().to_string() }) }; @@ -70,7 +70,7 @@ impl Default for Config { fn default() -> Self { let keypair_path = { let mut keypair_path = dirs_next::home_dir().expect("home directory"); - keypair_path.extend(&[".config", "solana", "id.json"]); + keypair_path.extend([".config", "solana", "id.json"]); keypair_path.to_str().unwrap().to_string() }; let json_rpc_url = "https://api.mainnet-beta.solana.com".to_string(); diff --git a/cli/src/cluster_query.rs b/cli/src/cluster_query.rs index c6b08e3a2862fc..6ebd8f77bc36eb 100644 --- a/cli/src/cluster_query.rs +++ b/cli/src/cluster_query.rs @@ -2060,7 +2060,7 @@ pub fn process_transaction_history( Some(status) => format!("{:?}", status), } }, - result.memo.unwrap_or_else(|| "".to_string()), + result.memo.unwrap_or_default(), ); } else { println!("{}", result.signature); diff --git a/cli/src/program.rs b/cli/src/program.rs index c90eeb9c27669d..25fe419a45f826 100644 --- a/cli/src/program.rs +++ b/cli/src/program.rs @@ -816,7 +816,7 @@ fn get_default_program_keypair(program_location: &Option) -> Keypair { filename.push("-keypair"); keypair_file.set_file_name(filename); keypair_file.set_extension("json"); - if let Ok(keypair) = read_keypair_file(&keypair_file.to_str().unwrap()) { + if let Ok(keypair) = read_keypair_file(keypair_file.to_str().unwrap()) { keypair } else { Keypair::new() diff --git a/client/src/rpc_filter.rs b/client/src/rpc_filter.rs index 1f6548c80a822c..a428eb5ae7807f 100644 --- a/client/src/rpc_filter.rs +++ b/client/src/rpc_filter.rs @@ -57,7 +57,7 @@ impl RpcFilterType { if bytes.len() > MAX_DATA_BASE64_SIZE { return Err(RpcFilterError::DataTooLarge); } - let bytes = base64::decode(&bytes)?; + let bytes = base64::decode(bytes)?; if bytes.len() > MAX_DATA_SIZE { Err(RpcFilterError::DataTooLarge) } else { diff --git a/core/src/broadcast_stage/broadcast_fake_shreds_run.rs b/core/src/broadcast_stage/broadcast_fake_shreds_run.rs index 743cc9b072d6d0..8dbff959a24ff3 100644 --- a/core/src/broadcast_stage/broadcast_fake_shreds_run.rs +++ b/core/src/broadcast_stage/broadcast_fake_shreds_run.rs @@ -134,7 +134,7 @@ impl BroadcastRun for BroadcastFakeShredsRun { if fake == (i <= self.partition) { // Send fake shreds to the first N peers data_shreds.iter().for_each(|b| { - sock.send_to(b.payload(), &peer.tvu_forwards).unwrap(); + sock.send_to(b.payload(), peer.tvu_forwards).unwrap(); }); } }); diff --git a/core/src/consensus.rs b/core/src/consensus.rs index b94dded42eb676..7c384d48ef2b0f 100644 --- a/core/src/consensus.rs +++ b/core/src/consensus.rs @@ -2823,7 +2823,7 @@ pub mod test { OpenOptions::new() .write(true) .truncate(true) - .open(&path) + .open(path) .unwrap_or_else(|_| panic!("Failed to truncate file: {:?}", path)); }, ); diff --git a/core/src/repair_weight.rs b/core/src/repair_weight.rs index b55803bba70ede..f387d4ae219c40 100644 --- a/core/src/repair_weight.rs +++ b/core/src/repair_weight.rs @@ -475,14 +475,9 @@ impl RepairWeight { .get_mut(&orphan_tree_root) .expect("Orphan must exist"); - let num_skip = if parent_tree_root.is_some() { - // Skip the leaf of the parent tree that the - // orphan would merge with later in a call - // to `merge_trees` - 1 - } else { - 0 - }; + // Skip the leaf of the parent tree that the orphan would merge + // with later in a call to `merge_trees` + let num_skip = usize::from(parent_tree_root.is_some()); for ancestor in new_ancestors.iter().skip(num_skip).rev() { self.slot_to_tree.insert(*ancestor, orphan_tree_root); diff --git a/core/src/replay_stage.rs b/core/src/replay_stage.rs index f07b1cfb240431..84a2197365fb9d 100644 --- a/core/src/replay_stage.rs +++ b/core/src/replay_stage.rs @@ -929,7 +929,7 @@ impl ReplayStage { replay_active_banks_time.as_us(), wait_receive_time.as_us(), heaviest_fork_failures_time.as_us(), - if did_complete_bank {1} else {0}, + u64::from(did_complete_bank), process_gossip_duplicate_confirmed_slots_time.as_us(), process_unfrozen_gossip_verified_vote_hashes_time.as_us(), process_duplicate_slots_time.as_us(), diff --git a/core/src/snapshot_packager_service.rs b/core/src/snapshot_packager_service.rs index 3234dcbeea2c15..02b53abb724498 100644 --- a/core/src/snapshot_packager_service.rs +++ b/core/src/snapshot_packager_service.rs @@ -298,7 +298,7 @@ mod tests { .collect(); // Create directory of hard links for snapshots - let link_snapshots_dir = tempfile::tempdir_in(&temp_dir).unwrap(); + let link_snapshots_dir = tempfile::tempdir_in(temp_dir).unwrap(); for snapshots_path in snapshots_paths { let snapshot_file_name = snapshots_path.file_name().unwrap(); let link_snapshots_dir = link_snapshots_dir.path().join(snapshot_file_name); diff --git a/core/src/tower_storage.rs b/core/src/tower_storage.rs index 330cf7bdc48351..a69700251f5ae0 100644 --- a/core/src/tower_storage.rs +++ b/core/src/tower_storage.rs @@ -173,7 +173,7 @@ impl TowerStorage for FileTowerStorage { trace!("load {}", filename.display()); // Ensure to create parent dir here, because restore() precedes save() always - fs::create_dir_all(&filename.parent().unwrap())?; + fs::create_dir_all(filename.parent().unwrap())?; if let Ok(file) = File::open(&filename) { // New format diff --git a/core/src/unprocessed_packet_batches.rs b/core/src/unprocessed_packet_batches.rs index 3305e264b77d4f..2e72262b2ca787 100644 --- a/core/src/unprocessed_packet_batches.rs +++ b/core/src/unprocessed_packet_batches.rs @@ -586,7 +586,7 @@ mod tests { let capacity = transactions.len(); let mut packet_vector = Vec::with_capacity(capacity); for tx in transactions.iter() { - packet_vector.push(Packet::from_data(None, &tx).unwrap()); + packet_vector.push(Packet::from_data(None, tx).unwrap()); } for index in vote_indexes.iter() { packet_vector[*index].meta.flags |= PacketFlags::SIMPLE_VOTE_TX; diff --git a/core/src/warm_quic_cache_service.rs b/core/src/warm_quic_cache_service.rs index 08428d589878ae..d685210dd799e2 100644 --- a/core/src/warm_quic_cache_service.rs +++ b/core/src/warm_quic_cache_service.rs @@ -50,7 +50,7 @@ impl WarmQuicCacheService { .lookup_contact_info(&leader_pubkey, |leader| leader.tpu) { let conn = connection_cache.get_connection(&addr); - if let Err(err) = conn.send_wire_transaction(&[0u8]) { + if let Err(err) = conn.send_wire_transaction([0u8]) { warn!( "Failed to warmup QUIC connection to the leader {:?}, Error {:?}", leader_pubkey, err diff --git a/core/src/window_service.rs b/core/src/window_service.rs index 2f7983bd86d7eb..d1edc1846613d2 100644 --- a/core/src/window_service.rs +++ b/core/src/window_service.rs @@ -426,7 +426,7 @@ impl WindowService { &verified_receiver, &blockstore, &leader_schedule_cache, - &handle_duplicate, + handle_duplicate, &mut metrics, &mut ws_metrics, &completed_data_sets_sender, diff --git a/core/tests/snapshots.rs b/core/tests/snapshots.rs index dffc0a258dadca..505ccb81d518ef 100644 --- a/core/tests/snapshots.rs +++ b/core/tests/snapshots.rs @@ -450,7 +450,7 @@ fn test_concurrent_snapshot_packaging( // currently sitting in the channel snapshot_utils::purge_old_bank_snapshots(bank_snapshots_dir); - let mut bank_snapshots = snapshot_utils::get_bank_snapshots_pre(&bank_snapshots_dir); + let mut bank_snapshots = snapshot_utils::get_bank_snapshots_pre(bank_snapshots_dir); bank_snapshots.sort_unstable(); assert!(bank_snapshots .into_iter() diff --git a/gossip/src/cluster_info.rs b/gossip/src/cluster_info.rs index 0b547765bdc98e..6745f74df7c0f5 100644 --- a/gossip/src/cluster_info.rs +++ b/gossip/src/cluster_info.rs @@ -548,7 +548,7 @@ impl ClusterInfo { let filename = self.contact_info_path.join("contact-info.bin"); let tmp_filename = &filename.with_extension("tmp"); - match File::create(&tmp_filename) { + match File::create(tmp_filename) { Ok(mut file) => { if let Err(err) = bincode::serialize_into(&mut file, &nodes) { warn!( @@ -565,7 +565,7 @@ impl ClusterInfo { } } - match fs::rename(&tmp_filename, &filename) { + match fs::rename(tmp_filename, &filename) { Ok(()) => { info!( "Saved contact info for {} nodes into {}", @@ -1097,7 +1097,7 @@ impl ClusterInfo { ) -> Result<(), GossipError> { let tpu = tpu.unwrap_or_else(|| self.my_contact_info().tpu); let buf = serialize(transaction)?; - self.socket.send_to(&buf, &tpu)?; + self.socket.send_to(&buf, tpu)?; Ok(()) } diff --git a/install/src/command.rs b/install/src/command.rs index 13ec7c6b47e282..c5d29f47108be8 100644 --- a/install/src/command.rs +++ b/install/src/command.rs @@ -163,7 +163,7 @@ fn extract_release_archive( progress_bar.set_message(format!("{}Extracting...", PACKAGE)); if extract_dir.exists() { - let _ = fs::remove_dir_all(&extract_dir); + let _ = fs::remove_dir_all(extract_dir); } let tmp_extract_dir = extract_dir.with_file_name("tmp-extract"); @@ -184,7 +184,7 @@ fn extract_release_archive( } fn load_release_version(version_yml: &Path) -> Result { - let file = File::open(&version_yml) + let file = File::open(version_yml) .map_err(|err| format!("Unable to open {:?}: {:?}", version_yml, err))?; let version: ReleaseVersion = serde_yaml::from_reader(file) .map_err(|err| format!("Unable to parse {:?}: {:?}", version_yml, err))?; diff --git a/install/src/defaults.rs b/install/src/defaults.rs index 78aa1bc720beed..6851eb9819180f 100644 --- a/install/src/defaults.rs +++ b/install/src/defaults.rs @@ -3,19 +3,19 @@ pub const JSON_RPC_URL: &str = "http://api.devnet.solana.com"; lazy_static! { pub static ref CONFIG_FILE: Option = { dirs_next::home_dir().map(|mut path| { - path.extend(&[".config", "solana", "install", "config.yml"]); + path.extend([".config", "solana", "install", "config.yml"]); path.to_str().unwrap().to_string() }) }; pub static ref USER_KEYPAIR: Option = { dirs_next::home_dir().map(|mut path| { - path.extend(&[".config", "solana", "id.json"]); + path.extend([".config", "solana", "id.json"]); path.to_str().unwrap().to_string() }) }; pub static ref DATA_DIR: Option = { dirs_next::home_dir().map(|mut path| { - path.extend(&[".local", "share", "solana", "install"]); + path.extend([".local", "share", "solana", "install"]); path.to_str().unwrap().to_string() }) }; diff --git a/keygen/src/keygen.rs b/keygen/src/keygen.rs index 953c9153bc6695..2c201c10692cd7 100644 --- a/keygen/src/keygen.rs +++ b/keygen/src/keygen.rs @@ -68,7 +68,7 @@ const NO_OUTFILE_ARG: ArgConstant<'static> = ArgConstant { fn word_count_arg<'a>() -> Arg<'a> { Arg::new(WORD_COUNT_ARG.name) .long(WORD_COUNT_ARG.long) - .possible_values(&["12", "15", "18", "21", "24"]) + .possible_values(["12", "15", "18", "21", "24"]) .default_value("12") .value_name("NUMBER") .takes_value(true) @@ -78,7 +78,7 @@ fn word_count_arg<'a>() -> Arg<'a> { fn language_arg<'a>() -> Arg<'a> { Arg::new(LANGUAGE_ARG.name) .long(LANGUAGE_ARG.long) - .possible_values(&[ + .possible_values([ "english", "chinese-simplified", "chinese-traditional", @@ -138,7 +138,7 @@ fn get_keypair_from_matches( } else if !config.keypair_path.is_empty() { &config.keypair_path } else { - path.extend(&[".config", "solana", "id.json"]); + path.extend([".config", "solana", "id.json"]); path.to_str().unwrap() }; signer_from_path(matches, path, "pubkey recovery", wallet_manager) @@ -558,7 +558,7 @@ fn do_main(matches: &ArgMatches) -> Result<(), Box> { } else if matches.is_present(NO_OUTFILE_ARG.name) { None } else { - path.extend(&[".config", "solana", "id.json"]); + path.extend([".config", "solana", "id.json"]); Some(path.to_str().unwrap()) }; @@ -601,7 +601,7 @@ fn do_main(matches: &ArgMatches) -> Result<(), Box> { let outfile = if matches.is_present("outfile") { matches.value_of("outfile").unwrap() } else { - path.extend(&[".config", "solana", "id.json"]); + path.extend([".config", "solana", "id.json"]); path.to_str().unwrap() }; diff --git a/ledger-tool/src/bigtable.rs b/ledger-tool/src/bigtable.rs index e19eacf34b6b16..7d2cdff22c3bcf 100644 --- a/ledger-tool/src/bigtable.rs +++ b/ledger-tool/src/bigtable.rs @@ -277,7 +277,7 @@ pub async fn transaction_history( "{}, slot={}, memo=\"{}\", status={}", result.signature, result.slot, - result.memo.unwrap_or_else(|| "".to_string()), + result.memo.unwrap_or_default(), match result.err { None => "Confirmed".to_string(), Some(err) => format!("Failed: {:?}", err), diff --git a/ledger-tool/src/ledger_path.rs b/ledger-tool/src/ledger_path.rs index b446652c707c54..34274e85c0b935 100644 --- a/ledger-tool/src/ledger_path.rs +++ b/ledger-tool/src/ledger_path.rs @@ -19,7 +19,7 @@ pub fn parse_ledger_path(matches: &ArgMatches<'_>, name: &str) -> PathBuf { // Canonicalize ledger path to avoid issues with symlink creation pub fn canonicalize_ledger_path(ledger_path: &Path) -> PathBuf { - fs::canonicalize(&ledger_path).unwrap_or_else(|err| { + fs::canonicalize(ledger_path).unwrap_or_else(|err| { eprintln!( "Unable to access ledger path '{}': {}", ledger_path.display(), diff --git a/ledger/src/blockstore.rs b/ledger/src/blockstore.rs index 4289df09e7ef46..d44dabed6a230c 100644 --- a/ledger/src/blockstore.rs +++ b/ledger/src/blockstore.rs @@ -234,7 +234,7 @@ impl Blockstore { } fn do_open(ledger_path: &Path, options: BlockstoreOptions) -> Result { - fs::create_dir_all(&ledger_path)?; + fs::create_dir_all(ledger_path)?; let blockstore_path = ledger_path.join( options .column_options @@ -2567,7 +2567,7 @@ impl Blockstore { // Check the active_transaction_status_index to see if it contains slot. If so, start with // that index, as it will contain higher slots let starting_primary_index = *self.active_transaction_status_index.read().unwrap(); - let next_primary_index = if starting_primary_index == 0 { 1 } else { 0 }; + let next_primary_index = u64::from(starting_primary_index == 0); let next_max_slot = self .transaction_status_index_cf .get(next_primary_index)? diff --git a/ledger/src/blockstore_db.rs b/ledger/src/blockstore_db.rs index ed5b4ab9001f1b..ba44026f0dac4a 100644 --- a/ledger/src/blockstore_db.rs +++ b/ledger/src/blockstore_db.rs @@ -259,7 +259,7 @@ impl Rocks { let access_type = options.access_type.clone(); let recovery_mode = options.recovery_mode.clone(); - fs::create_dir_all(&path)?; + fs::create_dir_all(path)?; // Use default database options if should_disable_auto_compactions(&access_type) { diff --git a/ledger/src/sigverify_shreds.rs b/ledger/src/sigverify_shreds.rs index 87bffcb00469ee..653d331a76f036 100644 --- a/ledger/src/sigverify_shreds.rs +++ b/ledger/src/sigverify_shreds.rs @@ -304,7 +304,7 @@ pub fn sign_shreds_gpu_pinned_keypair(keypair: &Keypair, cache: &RecyclerCache) let pubkey = keypair.pubkey().to_bytes(); let secret = keypair.secret().to_bytes(); let mut hasher = Sha512::default(); - hasher.update(&secret); + hasher.update(secret); let mut result = hasher.finalize(); result[0] &= 248; result[31] &= 63; diff --git a/local-cluster/tests/local_cluster.rs b/local-cluster/tests/local_cluster.rs index cc88d869924eab..aaf312ddd8d5e4 100644 --- a/local-cluster/tests/local_cluster.rs +++ b/local-cluster/tests/local_cluster.rs @@ -1337,7 +1337,7 @@ fn test_snapshots_blockstore_floor() { let archive_info = loop { let archive = - snapshot_utils::get_highest_full_snapshot_archive_info(&full_snapshot_archives_dir); + snapshot_utils::get_highest_full_snapshot_archive_info(full_snapshot_archives_dir); if archive.is_some() { trace!("snapshot exists"); break archive.unwrap(); diff --git a/net-utils/src/lib.rs b/net-utils/src/lib.rs index f690a05f6bdc25..47e296be51ad21 100644 --- a/net-utils/src/lib.rs +++ b/net-utils/src/lib.rs @@ -523,7 +523,7 @@ pub fn bind_common( let addr = SocketAddr::new(ip_addr, port); let sock_addr = SockAddr::from(addr); sock.bind(&sock_addr) - .and_then(|_| TcpListener::bind(&addr).map(|listener| (sock.into(), listener))) + .and_then(|_| TcpListener::bind(addr).map(|listener| (sock.into(), listener))) } pub fn bind_two_in_range_with_offset( diff --git a/perf/src/perf_libs.rs b/perf/src/perf_libs.rs index 1f0505b4a4e7dd..6644a1eabd1cef 100644 --- a/perf/src/perf_libs.rs +++ b/perf/src/perf_libs.rs @@ -121,7 +121,7 @@ fn find_cuda_home(perf_libs_path: &Path) -> Option { } // Search /usr/local for a `cuda-` directory that matches a perf-libs subdirectory - for entry in fs::read_dir(&perf_libs_path).unwrap().flatten() { + for entry in fs::read_dir(perf_libs_path).unwrap().flatten() { let path = entry.path(); if !path.is_dir() { continue; diff --git a/program-test/src/lib.rs b/program-test/src/lib.rs index d7c3e260f8d2d6..fe9eba15a84df5 100644 --- a/program-test/src/lib.rs +++ b/program-test/src/lib.rs @@ -405,7 +405,7 @@ impl solana_sdk::program_stubs::SyscallStubs for SyscallStubs { pub fn find_file(filename: &str) -> Option { for dir in default_shared_object_dirs() { - let candidate = dir.join(&filename); + let candidate = dir.join(filename); if candidate.exists() { return Some(candidate); } @@ -606,7 +606,7 @@ impl ProgramTest { }) .ok() .flatten() - .unwrap_or_else(|| "".to_string()) + .unwrap_or_default() ); this.add_account( diff --git a/programs/bpf/build.rs b/programs/bpf/build.rs index 05220a1536b2bc..016eb55b9d180d 100644 --- a/programs/bpf/build.rs +++ b/programs/bpf/build.rs @@ -108,7 +108,7 @@ fn main() { program ); assert!(Command::new("../../cargo-build-bpf") - .args(&[ + .args([ "--manifest-path", &format!("rust/{}/Cargo.toml", program), "--bpf-out-dir", diff --git a/rbpf-cli/src/main.rs b/rbpf-cli/src/main.rs index 3a136606b12422..e5aba7c053dfa6 100644 --- a/rbpf-cli/src/main.rs +++ b/rbpf-cli/src/main.rs @@ -128,7 +128,7 @@ native machine code before execting it in the virtual machine.", .long("use") .takes_value(true) .value_name("VALUE") - .possible_values(&["cfg", "disassembler", "interpreter", "jit"]) + .possible_values(["cfg", "disassembler", "interpreter", "jit"]) .default_value("jit"), ) .arg( @@ -159,7 +159,7 @@ native machine code before execting it in the virtual machine.", .value_name("FORMAT") .global(true) .takes_value(true) - .possible_values(&["json", "json-compact"]), + .possible_values(["json", "json-compact"]), ) .get_matches(); @@ -243,7 +243,7 @@ native machine code before execting it in the virtual machine.", let mut instruction_meter = ThisInstructionMeter { compute_meter }; let program = matches.value_of("PROGRAM").unwrap(); - let mut file = File::open(&Path::new(program)).unwrap(); + let mut file = File::open(Path::new(program)).unwrap(); let mut magic = [0u8; 4]; file.read_exact(&mut magic).unwrap(); file.seek(SeekFrom::Start(0)).unwrap(); diff --git a/remote-wallet/src/bin/ledger-udev.rs b/remote-wallet/src/bin/ledger-udev.rs index d5f4b8573730ea..fef91aeb518158 100644 --- a/remote-wallet/src/bin/ledger-udev.rs +++ b/remote-wallet/src/bin/ledger-udev.rs @@ -36,7 +36,7 @@ fn main() -> Result<(), Box> { Command::new("udevadm").arg("trigger").output().unwrap(); Command::new("udevadm") - .args(&["control", "--reload-rules"]) + .args(["control", "--reload-rules"]) .output() .unwrap(); diff --git a/rpc/src/rpc_subscriptions.rs b/rpc/src/rpc_subscriptions.rs index 718fc4d2b78e97..bc463940f76485 100644 --- a/rpc/src/rpc_subscriptions.rs +++ b/rpc/src/rpc_subscriptions.rs @@ -818,7 +818,7 @@ impl RpcSubscriptions { { debug!("slot notify: {:?}", slot_info); inc_new_counter_info!("rpc-subscription-notify-slot", 1); - notifier.notify(&slot_info, sub, false); + notifier.notify(slot_info, sub, false); } } NotificationEntry::SlotUpdate(slot_update) => { @@ -857,7 +857,7 @@ impl RpcSubscriptions { { debug!("root notify: {:?}", root); inc_new_counter_info!("rpc-subscription-notify-root", 1); - notifier.notify(&root, sub, false); + notifier.notify(root, sub, false); } } NotificationEntry::Bank(commitment_slots) => { diff --git a/runtime/benches/status_cache.rs b/runtime/benches/status_cache.rs index c207a71246cc10..dfe6ccfc98ec18 100644 --- a/runtime/benches/status_cache.rs +++ b/runtime/benches/status_cache.rs @@ -25,7 +25,7 @@ fn bench_status_cache_serialize(bencher: &mut Bencher) { id = hash(id.as_ref()); sigbytes.extend(id.as_ref()); let sig = Signature::new(&sigbytes); - status_cache.insert(&blockhash, &sig, 0, Ok(())); + status_cache.insert(&blockhash, sig, 0, Ok(())); } } bencher.iter(|| { diff --git a/runtime/src/accounts_db/geyser_plugin_utils.rs b/runtime/src/accounts_db/geyser_plugin_utils.rs index 3371472b680f53..701ff99f77f2d6 100644 --- a/runtime/src/accounts_db/geyser_plugin_utils.rs +++ b/runtime/src/accounts_db/geyser_plugin_utils.rs @@ -192,7 +192,7 @@ pub mod tests { ) { self.accounts_notified .entry(meta.pubkey) - .or_insert(Vec::default()) + .or_default() .push((slot, account.clone())); } @@ -201,7 +201,7 @@ pub mod tests { fn notify_account_restore_from_snapshot(&self, slot: Slot, account: &StoredAccountMeta) { self.accounts_notified .entry(account.meta.pubkey) - .or_insert(Vec::default()) + .or_default() .push((slot, account.clone_account())); } diff --git a/runtime/src/append_vec.rs b/runtime/src/append_vec.rs index 4eae2ade86c175..50b7f6719bf832 100644 --- a/runtime/src/append_vec.rs +++ b/runtime/src/append_vec.rs @@ -659,7 +659,7 @@ pub mod tests { .read(true) .write(true) .create(true) - .open(&path) + .open(path) .expect("create a test file for mmap"); let result = AppendVec::new_from_file(path, 0); diff --git a/runtime/src/bank.rs b/runtime/src/bank.rs index c9717f12757c50..66aa4a14276646 100644 --- a/runtime/src/bank.rs +++ b/runtime/src/bank.rs @@ -8934,11 +8934,7 @@ pub(crate) mod tests { // Since, validator 1 and validator 2 has equal smallest stake, it comes down to comparison // between their pubkey. - let tweak_1 = if validator_1_pubkey > validator_2_pubkey { - 1 - } else { - 0 - }; + let tweak_1 = u64::from(validator_1_pubkey > validator_2_pubkey); let validator_1_portion = ((validator_1_stake_lamports * rent_to_be_distributed) as f64 / 100.0) as u64 + tweak_1; assert_eq!( @@ -8948,11 +8944,7 @@ pub(crate) mod tests { // Since, validator 1 and validator 2 has equal smallest stake, it comes down to comparison // between their pubkey. - let tweak_2 = if validator_2_pubkey > validator_1_pubkey { - 1 - } else { - 0 - }; + let tweak_2 = u64::from(validator_2_pubkey > validator_1_pubkey); let validator_2_portion = ((validator_2_stake_lamports * rent_to_be_distributed) as f64 / 100.0) as u64 + tweak_2; assert_eq!( diff --git a/runtime/src/cost_tracker.rs b/runtime/src/cost_tracker.rs index a1d779a8a581b3..468730bcb54703 100644 --- a/runtime/src/cost_tracker.rs +++ b/runtime/src/cost_tracker.rs @@ -316,7 +316,7 @@ impl CostTracker { fn number_of_accounts(&self) -> usize { self.cost_by_writable_accounts .iter() - .map(|(_key, units)| if *units > 0 { 1 } else { 0 }) + .map(|(_key, units)| usize::from(*units > 0)) .sum() } } diff --git a/runtime/src/expected_rent_collection.rs b/runtime/src/expected_rent_collection.rs index d049430933db33..0aeb5471cb0794 100644 --- a/runtime/src/expected_rent_collection.rs +++ b/runtime/src/expected_rent_collection.rs @@ -703,7 +703,7 @@ pub mod tests { let result = ExpectedRentCollection::new( &pubkey, &account, - expected_rent_collection_slot_max_epoch + if greater { 1 } else { 0 }, + expected_rent_collection_slot_max_epoch + u64::from(greater), &epoch_schedule, &rent_collector, &SlotInfoInEpoch::new(max_slot_in_storages_inclusive, &epoch_schedule), @@ -740,7 +740,7 @@ pub mod tests { find_unskipped_slot, None, ); - let epoch_delta = if previous_epoch { 1 } else { 0 }; + let epoch_delta = u64::from(previous_epoch); let slot_delta = epoch_delta * slots_per_epoch; assert_eq!( result, @@ -763,7 +763,7 @@ pub mod tests { let original_rent_epoch = account.rent_epoch(); for already_collected in [true, false] { // to consider: maybe if we already collected rent_epoch IN this slot and slot matches what we need, then we should return None here - account.set_rent_epoch(original_rent_epoch + if already_collected { 1 } else { 0 }); + account.set_rent_epoch(original_rent_epoch + u64::from(already_collected)); let result = ExpectedRentCollection::new( &pubkey, &account, @@ -959,7 +959,7 @@ pub mod tests { } else { expected_rent_collection_slot_max_epoch }, - rent_epoch: rent_collector.epoch - if prior_epoch { 1 } else { 0 }, + rent_epoch: rent_collector.epoch - u64::from(prior_epoch), }), "find_unskipped_slot(0): {:?}, rent_collector.epoch: {}, prior_epoch: {}", find_unskipped_slot(0), @@ -1047,7 +1047,7 @@ pub mod tests { rent_collector.epoch = epoch_schedule.get_epoch(max_slot_in_storages_inclusive); let first_slot_in_max_epoch = max_slot_in_storages_inclusive - max_slot_in_storages_inclusive % slots_per_epoch; - let skip_offset = if skipped_slot { 1 } else { 0 }; + let skip_offset = u64::from(skipped_slot); let mut expected_rent_collection_slot_max_epoch = first_slot_in_max_epoch + partition_from_pubkey + skip_offset; let hit_this_epoch = diff --git a/runtime/src/hardened_unpack.rs b/runtime/src/hardened_unpack.rs index e3af855216e409..558e2d428d4648 100644 --- a/runtime/src/hardened_unpack.rs +++ b/runtime/src/hardened_unpack.rs @@ -482,7 +482,7 @@ pub fn unpack_genesis_archive( let extract_start = Instant::now(); fs::create_dir_all(destination_dir)?; - let tar_bz2 = File::open(&archive_filename)?; + let tar_bz2 = File::open(archive_filename)?; let tar = BzDecoder::new(BufReader::new(tar_bz2)); let mut archive = Archive::new(tar); unpack_genesis( diff --git a/runtime/src/secondary_index.rs b/runtime/src/secondary_index.rs index c1b5d4336876a5..2987f066776a0e 100644 --- a/runtime/src/secondary_index.rs +++ b/runtime/src/secondary_index.rs @@ -120,12 +120,10 @@ impl pub fn insert(&self, key: &Pubkey, inner_key: &Pubkey) { { - let pubkeys_map = self.index.get(key).unwrap_or_else(|| { - self.index - .entry(*key) - .or_insert(SecondaryIndexEntryType::default()) - .downgrade() - }); + let pubkeys_map = self + .index + .get(key) + .unwrap_or_else(|| self.index.entry(*key).or_default().downgrade()); pubkeys_map.insert_if_not_exists(inner_key, &self.stats.num_inner_keys); } diff --git a/runtime/src/snapshot_utils.rs b/runtime/src/snapshot_utils.rs index d818367ed1b5f2..e11f7a65d1ca86 100644 --- a/runtime/src/snapshot_utils.rs +++ b/runtime/src/snapshot_utils.rs @@ -422,7 +422,7 @@ pub fn archive_snapshot_package( // Atomically move the archive into position for other validators to find let metadata = fs::metadata(&archive_path) .map_err(|e| SnapshotError::IoWithSource(e, "archive path stat"))?; - fs::rename(&archive_path, &snapshot_package.path()) + fs::rename(&archive_path, snapshot_package.path()) .map_err(|e| SnapshotError::IoWithSource(e, "archive path rename"))?; purge_old_snapshot_archives( @@ -1506,10 +1506,8 @@ pub fn purge_old_snapshot_archives( incremental_snapshot_archives.sort_unstable(); let num_to_retain = if Some(base_slot) == highest_full_snapshot_slot { maximum_incremental_snapshot_archives_to_retain - } else if retained_full_snapshot_slots.contains(&base_slot) { - 1 } else { - 0 + usize::from(retained_full_snapshot_slots.contains(&base_slot)) }; trace!( "There are {} incremental snapshot archives for base slot {}, removing {} of them", @@ -1569,7 +1567,7 @@ fn untar_snapshot_create_shared_buffer( snapshot_tar: &Path, archive_format: ArchiveFormat, ) -> SharedBuffer { - let open_file = || File::open(&snapshot_tar).unwrap(); + let open_file = || File::open(snapshot_tar).unwrap(); match archive_format { ArchiveFormat::TarBzip2 => SharedBuffer::new(BzDecoder::new(BufReader::new(open_file()))), ArchiveFormat::TarGzip => SharedBuffer::new(GzDecoder::new(BufReader::new(open_file()))), @@ -2911,7 +2909,7 @@ mod tests { let temp_snap_dir = tempfile::TempDir::new().unwrap(); for snap_name in snapshot_names { - let snap_path = temp_snap_dir.path().join(&snap_name); + let snap_path = temp_snap_dir.path().join(snap_name); let mut _snap_file = File::create(snap_path); } purge_old_snapshot_archives( diff --git a/runtime/src/status_cache.rs b/runtime/src/status_cache.rs index f9d48941e8f3e1..0458ddfc832b25 100644 --- a/runtime/src/status_cache.rs +++ b/runtime/src/status_cache.rs @@ -315,11 +315,11 @@ mod tests { let blockhash = hash(Hash::default().as_ref()); let status_cache = BankStatusCache::default(); assert_eq!( - status_cache.get_status(&sig, &blockhash, &Ancestors::default()), + status_cache.get_status(sig, &blockhash, &Ancestors::default()), None ); assert_eq!( - status_cache.get_status_any_blockhash(&sig, &Ancestors::default()), + status_cache.get_status_any_blockhash(sig, &Ancestors::default()), None ); } @@ -330,13 +330,13 @@ mod tests { let mut status_cache = BankStatusCache::default(); let blockhash = hash(Hash::default().as_ref()); let ancestors = vec![(0, 1)].into_iter().collect(); - status_cache.insert(&blockhash, &sig, 0, ()); + status_cache.insert(&blockhash, sig, 0, ()); assert_eq!( - status_cache.get_status(&sig, &blockhash, &ancestors), + status_cache.get_status(sig, &blockhash, &ancestors), Some((0, ())) ); assert_eq!( - status_cache.get_status_any_blockhash(&sig, &ancestors), + status_cache.get_status_any_blockhash(sig, &ancestors), Some((0, ())) ); } @@ -347,12 +347,9 @@ mod tests { let mut status_cache = BankStatusCache::default(); let blockhash = hash(Hash::default().as_ref()); let ancestors = Ancestors::default(); - status_cache.insert(&blockhash, &sig, 1, ()); - assert_eq!(status_cache.get_status(&sig, &blockhash, &ancestors), None); - assert_eq!( - status_cache.get_status_any_blockhash(&sig, &ancestors), - None - ); + status_cache.insert(&blockhash, sig, 1, ()); + assert_eq!(status_cache.get_status(sig, &blockhash, &ancestors), None); + assert_eq!(status_cache.get_status_any_blockhash(sig, &ancestors), None); } #[test] @@ -361,10 +358,10 @@ mod tests { let mut status_cache = BankStatusCache::default(); let blockhash = hash(Hash::default().as_ref()); let ancestors = Ancestors::default(); - status_cache.insert(&blockhash, &sig, 0, ()); + status_cache.insert(&blockhash, sig, 0, ()); status_cache.add_root(0); assert_eq!( - status_cache.get_status(&sig, &blockhash, &ancestors), + status_cache.get_status(sig, &blockhash, &ancestors), Some((0, ())) ); } @@ -375,13 +372,13 @@ mod tests { let mut status_cache = BankStatusCache::default(); let blockhash = hash(Hash::default().as_ref()); let ancestors = vec![(0, 0)].into_iter().collect(); - status_cache.insert(&blockhash, &sig, 0, ()); - status_cache.insert(&blockhash, &sig, 1, ()); + status_cache.insert(&blockhash, sig, 0, ()); + status_cache.insert(&blockhash, sig, 1, ()); for i in 0..(MAX_CACHE_ENTRIES + 1) { status_cache.add_root(i as u64); } assert!(status_cache - .get_status(&sig, &blockhash, &ancestors) + .get_status(sig, &blockhash, &ancestors) .is_some()); } @@ -391,11 +388,11 @@ mod tests { let mut status_cache = BankStatusCache::default(); let blockhash = hash(Hash::default().as_ref()); let ancestors = Ancestors::default(); - status_cache.insert(&blockhash, &sig, 0, ()); + status_cache.insert(&blockhash, sig, 0, ()); for i in 0..(MAX_CACHE_ENTRIES + 1) { status_cache.add_root(i as u64); } - assert_eq!(status_cache.get_status(&sig, &blockhash, &ancestors), None); + assert_eq!(status_cache.get_status(sig, &blockhash, &ancestors), None); } #[test] @@ -404,10 +401,10 @@ mod tests { let mut status_cache = BankStatusCache::default(); let blockhash = hash(Hash::default().as_ref()); let ancestors = Ancestors::default(); - status_cache.insert(&blockhash, &sig, 0, ()); + status_cache.insert(&blockhash, sig, 0, ()); status_cache.add_root(0); status_cache.clear(); - assert_eq!(status_cache.get_status(&sig, &blockhash, &ancestors), None); + assert_eq!(status_cache.get_status(sig, &blockhash, &ancestors), None); } #[test] @@ -418,9 +415,9 @@ mod tests { let ancestors = Ancestors::default(); status_cache.add_root(0); status_cache.clear(); - status_cache.insert(&blockhash, &sig, 0, ()); + status_cache.insert(&blockhash, sig, 0, ()); assert!(status_cache - .get_status(&sig, &blockhash, &ancestors) + .get_status(sig, &blockhash, &ancestors) .is_some()); } @@ -430,7 +427,7 @@ mod tests { let mut status_cache = BankStatusCache::default(); let blockhash = hash(Hash::default().as_ref()); status_cache.clear(); - status_cache.insert(&blockhash, &sig, 0, ()); + status_cache.insert(&blockhash, sig, 0, ()); let (_, index, sig_map) = status_cache.cache.get(&blockhash).unwrap(); let sig_slice: &[u8; CACHED_KEY_SIZE] = arrayref::array_ref![sig.as_ref(), *index, CACHED_KEY_SIZE]; @@ -443,7 +440,7 @@ mod tests { let mut status_cache = BankStatusCache::default(); let blockhash = hash(Hash::default().as_ref()); status_cache.clear(); - status_cache.insert(&blockhash, &sig, 0, ()); + status_cache.insert(&blockhash, sig, 0, ()); let slot_deltas = status_cache.slot_deltas(&[0]); let cache = StatusCache::from_slot_deltas(&slot_deltas); assert_eq!(cache, status_cache); @@ -458,9 +455,9 @@ mod tests { let mut status_cache = BankStatusCache::default(); let blockhash = hash(Hash::default().as_ref()); let blockhash2 = hash(blockhash.as_ref()); - status_cache.insert(&blockhash, &sig, 0, ()); - status_cache.insert(&blockhash, &sig, 1, ()); - status_cache.insert(&blockhash2, &sig, 1, ()); + status_cache.insert(&blockhash, sig, 0, ()); + status_cache.insert(&blockhash, sig, 1, ()); + status_cache.insert(&blockhash2, sig, 1, ()); for i in 0..(MAX_CACHE_ENTRIES + 1) { status_cache.add_root(i as u64); } @@ -484,9 +481,9 @@ mod tests { let mut status_cache = BankStatusCache::default(); let blockhash = hash(Hash::default().as_ref()); let blockhash2 = hash(blockhash.as_ref()); - status_cache.insert(&blockhash, &sig, 0, ()); - status_cache.insert(&blockhash, &sig, 1, ()); - status_cache.insert(&blockhash2, &sig, 1, ()); + status_cache.insert(&blockhash, sig, 0, ()); + status_cache.insert(&blockhash, sig, 1, ()); + status_cache.insert(&blockhash2, sig, 1, ()); let mut ancestors0 = Ancestors::default(); ancestors0.insert(0, 0); @@ -495,17 +492,17 @@ mod tests { // Clear slot 0 related data assert!(status_cache - .get_status(&sig, &blockhash, &ancestors0) + .get_status(sig, &blockhash, &ancestors0) .is_some()); status_cache.clear_slot_entries(0); assert!(status_cache - .get_status(&sig, &blockhash, &ancestors0) + .get_status(sig, &blockhash, &ancestors0) .is_none()); assert!(status_cache - .get_status(&sig, &blockhash, &ancestors1) + .get_status(sig, &blockhash, &ancestors1) .is_some()); assert!(status_cache - .get_status(&sig, &blockhash2, &ancestors1) + .get_status(sig, &blockhash2, &ancestors1) .is_some()); // Check that the slot delta for slot 0 is gone, but slot 1 still @@ -517,10 +514,10 @@ mod tests { status_cache.clear_slot_entries(1); assert!(status_cache.slot_deltas.is_empty()); assert!(status_cache - .get_status(&sig, &blockhash, &ancestors1) + .get_status(sig, &blockhash, &ancestors1) .is_none()); assert!(status_cache - .get_status(&sig, &blockhash2, &ancestors1) + .get_status(sig, &blockhash2, &ancestors1) .is_none()); assert!(status_cache.cache.is_empty()); } @@ -536,13 +533,13 @@ mod tests { let blockhash = hash(blockhash.as_ref()); let sig_key = Signature::default(); let hash_key = Hash::new_unique(); - status_cache.insert(&blockhash, &sig_key, 0, ()); - status_cache.insert(&blockhash, &hash_key, 0, ()); + status_cache.insert(&blockhash, sig_key, 0, ()); + status_cache.insert(&blockhash, hash_key, 0, ()); assert!(status_cache - .get_status(&sig_key, &blockhash, &ancestors) + .get_status(sig_key, &blockhash, &ancestors) .is_some()); assert!(status_cache - .get_status(&hash_key, &blockhash, &ancestors) + .get_status(hash_key, &blockhash, &ancestors) .is_some()); } } diff --git a/sdk/cargo-build-sbf/src/main.rs b/sdk/cargo-build-sbf/src/main.rs index d6437b043414e7..c97eabedbe730e 100644 --- a/sdk/cargo-build-sbf/src/main.rs +++ b/sdk/cargo-build-sbf/src/main.rs @@ -141,7 +141,7 @@ fn install_if_missing( .next() .is_none() { - fs::remove_dir(&target_path).map_err(|err| err.to_string())?; + fs::remove_dir(target_path).map_err(|err| err.to_string())?; } // Check whether the package is already in ~/.cache/solana. @@ -153,9 +153,9 @@ fn install_if_missing( .unwrap_or(false) { if target_path.exists() { - fs::remove_file(&target_path).map_err(|err| err.to_string())?; + fs::remove_file(target_path).map_err(|err| err.to_string())?; } - fs::create_dir_all(&target_path).map_err(|err| err.to_string())?; + fs::create_dir_all(target_path).map_err(|err| err.to_string())?; let mut url = String::from(url); url.push('/'); url.push_str(config.sbf_tools_version); @@ -169,9 +169,7 @@ fn install_if_missing( let zip = File::open(&download_file_path).map_err(|err| err.to_string())?; let tar = BzDecoder::new(BufReader::new(zip)); let mut archive = Archive::new(tar); - archive - .unpack(&target_path) - .map_err(|err| err.to_string())?; + archive.unpack(target_path).map_err(|err| err.to_string())?; fs::remove_file(download_file_path).map_err(|err| err.to_string())?; } // Make a symbolic link source_path -> target_path in the @@ -475,7 +473,7 @@ fn build_sbf_package(config: &Config, target_directory: &Path, package: &cargo_m }) .join("release"); - env::set_current_dir(&root_package_dir).unwrap_or_else(|err| { + env::set_current_dir(root_package_dir).unwrap_or_else(|err| { error!( "Unable to set current directory to {}: {}", root_package_dir, err @@ -536,7 +534,7 @@ fn build_sbf_package(config: &Config, target_directory: &Path, package: &cargo_m // The package version directory doesn't contain a valid // installation, and it should be removed. let target_path_parent = target_path.parent().expect("Invalid package path"); - fs::remove_dir_all(&target_path_parent).unwrap_or_else(|err| { + fs::remove_dir_all(target_path_parent).unwrap_or_else(|err| { error!( "Failed to remove {} while recovering from installation failure: {}", target_path_parent.to_string_lossy(), @@ -705,7 +703,7 @@ fn build_sbf_package(config: &Config, target_directory: &Path, package: &cargo_m #[cfg(not(windows))] let output = spawn( &config.sbf_sdk.join("scripts").join("strip.sh"), - &[&program_unstripped_so, &program_so], + [&program_unstripped_so, &program_so], config.generate_child_script_on_failure, ); if config.verbose { @@ -728,7 +726,7 @@ fn build_sbf_package(config: &Config, target_directory: &Path, package: &cargo_m { let output = spawn( &dump_script, - &[&program_unstripped_so, &program_dump], + [&program_unstripped_so, &program_dump], config.generate_child_script_on_failure, ); if config.verbose { @@ -746,7 +744,7 @@ fn build_sbf_package(config: &Config, target_directory: &Path, package: &cargo_m let output = spawn( llvm_objcopy, - &[ + [ "--only-keep-debug".as_ref(), program_unstripped_so.as_os_str(), program_debug.as_os_str(), @@ -933,7 +931,7 @@ fn main() { .arg( Arg::new("arch") .long("arch") - .possible_values(&["bpf", "sbf", "sbfv2"]) + .possible_values(["bpf", "sbf", "sbfv2"]) .default_value("sbf") .help("Build for the given SBF version"), ) diff --git a/sdk/cargo-build-sbf/tests/crates.rs b/sdk/cargo-build-sbf/tests/crates.rs index d71a11410d8b83..6fb6ad625a8a27 100644 --- a/sdk/cargo-build-sbf/tests/crates.rs +++ b/sdk/cargo-build-sbf/tests/crates.rs @@ -65,7 +65,7 @@ fn test_build() { fn test_dump() { // This test requires rustfilt. assert!(Command::new("cargo") - .args(&["install", "-f", "rustfilt"]) + .args(["install", "-f", "rustfilt"]) .status() .expect("Unable to install rustfilt required for --dump option") .success()); diff --git a/sdk/cargo-test-sbf/src/main.rs b/sdk/cargo-test-sbf/src/main.rs index 01ea5848ef5a0c..483d5b81cc12d1 100644 --- a/sdk/cargo-test-sbf/src/main.rs +++ b/sdk/cargo-test-sbf/src/main.rs @@ -319,7 +319,7 @@ fn main() { .arg( Arg::new("arch") .long("arch") - .possible_values(&["bpf", "sbf", "sbfv2"]) + .possible_values(["bpf", "sbf", "sbfv2"]) .default_value("sbf") .help("Build for the given SBF version"), ) diff --git a/sdk/macro/src/lib.rs b/sdk/macro/src/lib.rs index 723a5729c1b1e5..3e8859366443ad 100644 --- a/sdk/macro/src/lib.rs +++ b/sdk/macro/src/lib.rs @@ -291,10 +291,10 @@ fn parse_pubkey( ) -> Result { let id_vec = bs58::decode(id_literal.value()) .into_vec() - .map_err(|_| syn::Error::new_spanned(&id_literal, "failed to decode base58 string"))?; + .map_err(|_| syn::Error::new_spanned(id_literal, "failed to decode base58 string"))?; let id_array = <[u8; 32]>::try_from(<&[u8]>::clone(&&id_vec[..])).map_err(|_| { syn::Error::new_spanned( - &id_literal, + id_literal, format!("pubkey array is not 32 bytes long: len={}", id_vec.len()), ) })?; diff --git a/sdk/src/genesis_config.rs b/sdk/src/genesis_config.rs index 7b6b02457f9503..9bcf995386e9a9 100644 --- a/sdk/src/genesis_config.rs +++ b/sdk/src/genesis_config.rs @@ -197,7 +197,7 @@ impl GenesisConfig { ) })?; - std::fs::create_dir_all(&ledger_path)?; + std::fs::create_dir_all(ledger_path)?; let mut file = File::create(Self::genesis_filename(ledger_path))?; file.write_all(&serialized) @@ -343,6 +343,6 @@ mod tests { config.write(path).expect("write"); let loaded_config = GenesisConfig::load(path).expect("load"); assert_eq!(config.hash(), loaded_config.hash()); - let _ignored = std::fs::remove_file(&path); + let _ignored = std::fs::remove_file(path); } } diff --git a/sdk/src/packet.rs b/sdk/src/packet.rs index 412375e35fec81..2befff66be94ce 100644 --- a/sdk/src/packet.rs +++ b/sdk/src/packet.rs @@ -130,8 +130,9 @@ impl fmt::Debug for Packet { #[allow(clippy::uninit_assumed_init)] impl Default for Packet { fn default() -> Packet { + let buffer = std::mem::MaybeUninit::<[u8; PACKET_DATA_SIZE]>::uninit(); Packet { - buffer: unsafe { std::mem::MaybeUninit::uninit().assume_init() }, + buffer: unsafe { buffer.assume_init() }, meta: Meta::default(), } } diff --git a/sdk/src/secp256k1_instruction.rs b/sdk/src/secp256k1_instruction.rs index a70ad00bdcd1ed..767b91127cfc8b 100644 --- a/sdk/src/secp256k1_instruction.rs +++ b/sdk/src/secp256k1_instruction.rs @@ -852,7 +852,7 @@ pub fn new_secp256k1_instruction( let secp_pubkey = libsecp256k1::PublicKey::from_secret_key(priv_key); let eth_pubkey = construct_eth_pubkey(&secp_pubkey); let mut hasher = sha3::Keccak256::new(); - hasher.update(&message_arr); + hasher.update(message_arr); let message_hash = hasher.finalize(); let mut message_hash_arr = [0u8; 32]; message_hash_arr.copy_from_slice(message_hash.as_slice()); @@ -1318,7 +1318,7 @@ pub mod test { data.extend(signature.serialize()); data.push(recovery_id.serialize()); let eth_address_offset = data.len(); - data.extend(ð_address); + data.extend(eth_address); let message_data_offset = data.len(); data.extend(message); diff --git a/streamer/src/packet.rs b/streamer/src/packet.rs index ea8e346f8d88d5..9824b052cec211 100644 --- a/streamer/src/packet.rs +++ b/streamer/src/packet.rs @@ -68,7 +68,7 @@ pub fn send_to( let addr = p.meta.socket_addr(); if socket_addr_space.check(&addr) { if let Some(data) = p.data(..) { - socket.send_to(data, &addr)?; + socket.send_to(data, addr)?; } } } diff --git a/streamer/src/recvmmsg.rs b/streamer/src/recvmmsg.rs index bb2691009b1f07..722b4a22cd2fe2 100644 --- a/streamer/src/recvmmsg.rs +++ b/streamer/src/recvmmsg.rs @@ -75,7 +75,8 @@ pub fn recv_mmsg(sock: &UdpSocket, packets: &mut [Packet]) -> io::Result(); let mut hdrs: [mmsghdr; NUM_RCVMMSGS] = unsafe { mem::zeroed() }; - let mut iovs: [iovec; NUM_RCVMMSGS] = unsafe { mem::MaybeUninit::uninit().assume_init() }; + let iovs = mem::MaybeUninit::<[iovec; NUM_RCVMMSGS]>::uninit(); + let mut iovs: [iovec; NUM_RCVMMSGS] = unsafe { iovs.assume_init() }; let mut addrs: [sockaddr_storage; NUM_RCVMMSGS] = unsafe { mem::zeroed() }; let sock_fd = sock.as_raw_fd(); @@ -141,7 +142,7 @@ mod tests { let sent = TEST_NUM_MSGS - 1; for _ in 0..sent { let data = [0; PACKET_DATA_SIZE]; - sender.send_to(&data[..], &addr).unwrap(); + sender.send_to(&data[..], addr).unwrap(); } let mut packets = vec![Packet::default(); TEST_NUM_MSGS]; @@ -167,7 +168,7 @@ mod tests { let sent = TEST_NUM_MSGS + 10; for _ in 0..sent { let data = [0; PACKET_DATA_SIZE]; - sender.send_to(&data[..], &addr).unwrap(); + sender.send_to(&data[..], addr).unwrap(); } let mut packets = vec![Packet::default(); TEST_NUM_MSGS]; @@ -208,7 +209,7 @@ mod tests { let sent = TEST_NUM_MSGS; for _ in 0..sent { let data = [0; PACKET_DATA_SIZE]; - sender.send_to(&data[..], &addr).unwrap(); + sender.send_to(&data[..], addr).unwrap(); } let start = Instant::now(); @@ -243,12 +244,12 @@ mod tests { for _ in 0..sent1 { let data = [0; PACKET_DATA_SIZE]; - sender1.send_to(&data[..], &addr).unwrap(); + sender1.send_to(&data[..], addr).unwrap(); } for _ in 0..sent2 { let data = [0; PACKET_DATA_SIZE]; - sender2.send_to(&data[..], &addr).unwrap(); + sender2.send_to(&data[..], addr).unwrap(); } let mut packets = vec![Packet::default(); TEST_NUM_MSGS]; diff --git a/streamer/src/sendmmsg.rs b/streamer/src/sendmmsg.rs index 8147ac9e1814f9..e035341fedf22c 100644 --- a/streamer/src/sendmmsg.rs +++ b/streamer/src/sendmmsg.rs @@ -134,7 +134,8 @@ where { let size = packets.len(); #[allow(clippy::uninit_assumed_init)] - let mut iovs = vec![unsafe { std::mem::MaybeUninit::uninit().assume_init() }; size]; + let iovec = std::mem::MaybeUninit::::uninit(); + let mut iovs = vec![unsafe { iovec.assume_init() }; size]; let mut addrs = vec![unsafe { std::mem::zeroed() }; size]; let mut hdrs = vec![unsafe { std::mem::zeroed() }; size]; for ((pkt, dest), hdr, iov, addr) in izip!(packets, &mut hdrs, &mut iovs, &mut addrs) { diff --git a/streamer/tests/recvmmsg.rs b/streamer/tests/recvmmsg.rs index ffda66c6cfc632..7c8f602ad2ca42 100644 --- a/streamer/tests/recvmmsg.rs +++ b/streamer/tests/recvmmsg.rs @@ -22,7 +22,7 @@ pub fn test_recv_mmsg_batch_size() { (0..1000).for_each(|_| { for _ in 0..sent { let data = [0; PACKET_DATA_SIZE]; - sender.send_to(&data[..], &addr).unwrap(); + sender.send_to(&data[..], addr).unwrap(); } let mut packets = vec![Packet::default(); TEST_BATCH_SIZE]; let now = Instant::now(); @@ -38,7 +38,7 @@ pub fn test_recv_mmsg_batch_size() { (0..1000).for_each(|_| { for _ in 0..sent { let data = [0; PACKET_DATA_SIZE]; - sender.send_to(&data[..], &addr).unwrap(); + sender.send_to(&data[..], addr).unwrap(); } let mut packets = vec![Packet::default(); 4]; let mut recv = 0; diff --git a/sys-tuner/src/main.rs b/sys-tuner/src/main.rs index 2b8578b9713fd5..7fd5271333e95e 100644 --- a/sys-tuner/src/main.rs +++ b/sys-tuner/src/main.rs @@ -52,7 +52,7 @@ fn tune_poh_service_priority(uid: u32) { info!("PoH thread PID is {}", pid); let pid = format!("{}", pid); let output = Command::new("chrt") - .args(&["-r", "-p", "99", pid.as_str()]) + .args(["-r", "-p", "99", pid.as_str()]) .output() .expect("Expected to set priority of thread"); if output.status.success() { diff --git a/tokens/src/commands.rs b/tokens/src/commands.rs index ec23b0bab9183a..55724c4e74757d 100644 --- a/tokens/src/commands.rs +++ b/tokens/src/commands.rs @@ -913,7 +913,7 @@ pub fn test_process_distribute_tokens_with_client( let allocations_file = NamedTempFile::new().unwrap(); let input_csv = allocations_file.path().to_str().unwrap().to_string(); let mut wtr = csv::WriterBuilder::new().from_writer(allocations_file); - wtr.write_record(&["recipient", "amount"]).unwrap(); + wtr.write_record(["recipient", "amount"]).unwrap(); wtr.write_record(&[ alice_pubkey.to_string(), lamports_to_sol(expected_amount).to_string(), @@ -1013,7 +1013,7 @@ pub fn test_process_create_stake_with_client(client: &RpcClient, sender_keypair: let file = NamedTempFile::new().unwrap(); let input_csv = file.path().to_str().unwrap().to_string(); let mut wtr = csv::WriterBuilder::new().from_writer(file); - wtr.write_record(&["recipient", "amount", "lockup_date"]) + wtr.write_record(["recipient", "amount", "lockup_date"]) .unwrap(); wtr.write_record(&[ alice_pubkey.to_string(), @@ -1135,7 +1135,7 @@ pub fn test_process_distribute_stake_with_client(client: &RpcClient, sender_keyp let file = NamedTempFile::new().unwrap(); let input_csv = file.path().to_str().unwrap().to_string(); let mut wtr = csv::WriterBuilder::new().from_writer(file); - wtr.write_record(&["recipient", "amount", "lockup_date"]) + wtr.write_record(["recipient", "amount", "lockup_date"]) .unwrap(); wtr.write_record(&[ alice_pubkey.to_string(), diff --git a/upload-perf/src/upload-perf.rs b/upload-perf/src/upload-perf.rs index cb349c94b2619f..16f8a433dbb40d 100644 --- a/upload-perf/src/upload-perf.rs +++ b/upload-perf/src/upload-perf.rs @@ -43,7 +43,7 @@ fn main() { let upload_metrics = args.len() > 2; let git_output = Command::new("git") - .args(&["rev-parse", "HEAD"]) + .args(["rev-parse", "HEAD"]) .output() .expect("failed to execute git rev-parse"); let git_commit_hash = String::from_utf8_lossy(&git_output.stdout); diff --git a/validator/src/bin/solana-test-validator.rs b/validator/src/bin/solana-test-validator.rs index f01f7d383bd387..c37eff175ef00b 100644 --- a/validator/src/bin/solana-test-validator.rs +++ b/validator/src/bin/solana-test-validator.rs @@ -848,7 +848,7 @@ fn main() { } fn remove_directory_contents(ledger_path: &Path) -> Result<(), io::Error> { - for entry in fs::read_dir(&ledger_path)? { + for entry in fs::read_dir(ledger_path)? { let entry = entry?; if entry.metadata()?.is_dir() { fs::remove_dir_all(&entry.path())? diff --git a/validator/src/lib.rs b/validator/src/lib.rs index 913ac2fa3034d2..a093e48602ab31 100644 --- a/validator/src/lib.rs +++ b/validator/src/lib.rs @@ -57,7 +57,7 @@ pub fn redirect_stderr_to_file(logfile: Option) -> Option { use log::info; let mut signals = - signal_hook::iterator::Signals::new(&[signal_hook::consts::SIGUSR1]) + signal_hook::iterator::Signals::new([signal_hook::consts::SIGUSR1]) .unwrap_or_else(|err| { eprintln!("Unable to register SIGUSR1 handler: {:?}", err); exit(1); From a53fba3985044a5494965d54dbe46c311ca6d0f2 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Fri, 23 Sep 2022 22:09:43 +0000 Subject: [PATCH 141/465] generates merkle shreds from ledger entries (backport #27675) (#28024) * generates merkle shreds from ledger entries The commit adds methods to convert &[Entry] to vector of Merkle shreds. (cherry picked from commit 7d3f3b2f7d5e720e6f189b33df22c231862e55a3) * plumbs through flag to generate merkle variant of shreds (cherry picked from commit 97c9af4c6baeccb637036bf4ff6db292ccc83df5) # Conflicts: # ledger-tool/tests/basic.rs # ledger/src/blockstore.rs * removes mergify merge conflicts * removes .then_some Co-authored-by: behzad nouri --- core/benches/retransmit_stage.rs | 1 + core/benches/shredder.rs | 10 +- core/src/banking_stage.rs | 18 +- core/src/broadcast_stage.rs | 1 + .../broadcast_duplicates_run.rs | 3 + .../broadcast_fake_shreds_run.rs | 2 + .../fail_entry_verification_broadcast_run.rs | 3 + .../broadcast_stage/standard_broadcast_run.rs | 2 + core/src/consensus.rs | 16 +- core/src/repair_generic_traversal.rs | 1 + core/src/repair_service.rs | 40 +- core/src/repair_weighted_traversal.rs | 26 +- core/src/replay_stage.rs | 45 +- core/src/validator.rs | 9 +- core/src/window_service.rs | 8 +- core/tests/ledger_cleanup.rs | 12 +- gossip/src/duplicate_shred.rs | 1 + ledger/benches/blockstore.rs | 15 +- ledger/src/ancestor_iterator.rs | 6 +- ledger/src/blockstore.rs | 289 ++++++++-- ledger/src/blockstore/blockstore_purge.rs | 27 +- ledger/src/leader_schedule_cache.rs | 4 +- ledger/src/shred.rs | 40 +- ledger/src/shred/merkle.rs | 499 +++++++++++++++++- ledger/src/shredder.rs | 43 +- ledger/tests/blockstore.rs | 9 +- ledger/tests/shred.rs | 8 +- rpc/src/rpc.rs | 10 +- 28 files changed, 995 insertions(+), 153 deletions(-) diff --git a/core/benches/retransmit_stage.rs b/core/benches/retransmit_stage.rs index 1b460ea03a522e..bac12781f4b8b8 100644 --- a/core/benches/retransmit_stage.rs +++ b/core/benches/retransmit_stage.rs @@ -106,6 +106,7 @@ fn bench_retransmitter(bencher: &mut Bencher) { true, // is_last_in_slot 0, // next_shred_index 0, // next_code_index + true, // merkle_variant &mut ProcessShredsStats::default(), ); diff --git a/core/benches/shredder.rs b/core/benches/shredder.rs index 8df66e9b47f362..981dabf6f9599c 100644 --- a/core/benches/shredder.rs +++ b/core/benches/shredder.rs @@ -49,9 +49,10 @@ fn make_shreds(num_shreds: usize) -> Vec { let (data_shreds, _) = shredder.entries_to_shreds( &Keypair::new(), &entries, - true, // is_last_in_slot - 0, // next_shred_index - 0, // next_code_index + true, // is_last_in_slot + 0, // next_shred_index + 0, // next_code_index + false, // merkle_variant &mut ProcessShredsStats::default(), ); assert!(data_shreds.len() >= num_shreds); @@ -85,6 +86,7 @@ fn bench_shredder_ticks(bencher: &mut Bencher) { true, 0, 0, + true, // merkle_variant &mut ProcessShredsStats::default(), ); }) @@ -111,6 +113,7 @@ fn bench_shredder_large_entries(bencher: &mut Bencher) { true, 0, 0, + true, // merkle_variant &mut ProcessShredsStats::default(), ); }) @@ -131,6 +134,7 @@ fn bench_deshredder(bencher: &mut Bencher) { true, 0, 0, + true, // merkle_variant &mut ProcessShredsStats::default(), ); bencher.iter(|| { diff --git a/core/src/banking_stage.rs b/core/src/banking_stage.rs index db9eba5861ab6e..074be1b83261ec 100644 --- a/core/src/banking_stage.rs +++ b/core/src/banking_stage.rs @@ -3673,7 +3673,14 @@ mod tests { poh_recorder.write().unwrap().set_bank(&bank, false); - let shreds = entries_to_test_shreds(&entries, bank.slot(), 0, true, 0); + let shreds = entries_to_test_shreds( + &entries, + bank.slot(), + 0, // parent_slot + true, // is_full_slot + 0, // version + true, // merkle_variant + ); blockstore.insert_shreds(shreds, None, false).unwrap(); blockstore.set_roots(std::iter::once(&bank.slot())).unwrap(); @@ -3835,7 +3842,14 @@ mod tests { poh_recorder.write().unwrap().set_bank(&bank, false); - let shreds = entries_to_test_shreds(&entries, bank.slot(), 0, true, 0); + let shreds = entries_to_test_shreds( + &entries, + bank.slot(), + 0, // parent_slot + true, // is_full_slot + 0, // version + true, // merkle_variant + ); blockstore.insert_shreds(shreds, None, false).unwrap(); blockstore.set_roots(std::iter::once(&bank.slot())).unwrap(); diff --git a/core/src/broadcast_stage.rs b/core/src/broadcast_stage.rs index 61f34d388dabed..0163c5c10cf41a 100644 --- a/core/src/broadcast_stage.rs +++ b/core/src/broadcast_stage.rs @@ -481,6 +481,7 @@ pub mod test { true, // is_last_in_slot 0, // next_shred_index, 0, // next_code_index + true, // merkle_variant &mut ProcessShredsStats::default(), ); ( diff --git a/core/src/broadcast_stage/broadcast_duplicates_run.rs b/core/src/broadcast_stage/broadcast_duplicates_run.rs index 9e60d6c8196cfe..f7d48644030ed1 100644 --- a/core/src/broadcast_stage/broadcast_duplicates_run.rs +++ b/core/src/broadcast_stage/broadcast_duplicates_run.rs @@ -163,6 +163,7 @@ impl BroadcastRun for BroadcastDuplicatesRun { last_tick_height == bank.max_tick_height() && last_entries.is_none(), self.next_shred_index, self.next_code_index, + false, // merkle_variant &mut ProcessShredsStats::default(), ); @@ -178,6 +179,7 @@ impl BroadcastRun for BroadcastDuplicatesRun { true, self.next_shred_index, self.next_code_index, + false, // merkle_variant &mut ProcessShredsStats::default(), ); // Don't mark the last shred as last so that validators won't @@ -189,6 +191,7 @@ impl BroadcastRun for BroadcastDuplicatesRun { true, self.next_shred_index, self.next_code_index, + false, // merkle_variant &mut ProcessShredsStats::default(), ); let sigs: Vec<_> = partition_last_data_shred diff --git a/core/src/broadcast_stage/broadcast_fake_shreds_run.rs b/core/src/broadcast_stage/broadcast_fake_shreds_run.rs index 8dbff959a24ff3..10b2f6c6b91c6a 100644 --- a/core/src/broadcast_stage/broadcast_fake_shreds_run.rs +++ b/core/src/broadcast_stage/broadcast_fake_shreds_run.rs @@ -60,6 +60,7 @@ impl BroadcastRun for BroadcastFakeShredsRun { last_tick_height == bank.max_tick_height(), next_shred_index, self.next_code_index, + true, // merkle_variant &mut ProcessShredsStats::default(), ); @@ -79,6 +80,7 @@ impl BroadcastRun for BroadcastFakeShredsRun { last_tick_height == bank.max_tick_height(), next_shred_index, self.next_code_index, + true, // merkle_variant &mut ProcessShredsStats::default(), ); diff --git a/core/src/broadcast_stage/fail_entry_verification_broadcast_run.rs b/core/src/broadcast_stage/fail_entry_verification_broadcast_run.rs index c8fd4acc9e1cfc..d5b77e59bdb022 100644 --- a/core/src/broadcast_stage/fail_entry_verification_broadcast_run.rs +++ b/core/src/broadcast_stage/fail_entry_verification_broadcast_run.rs @@ -91,6 +91,7 @@ impl BroadcastRun for FailEntryVerificationBroadcastRun { last_tick_height == bank.max_tick_height() && last_entries.is_none(), self.next_shred_index, self.next_code_index, + true, // merkle_variant &mut ProcessShredsStats::default(), ); @@ -105,6 +106,7 @@ impl BroadcastRun for FailEntryVerificationBroadcastRun { true, self.next_shred_index, self.next_code_index, + true, // merkle_variant &mut ProcessShredsStats::default(), ); // Don't mark the last shred as last so that validators won't know @@ -116,6 +118,7 @@ impl BroadcastRun for FailEntryVerificationBroadcastRun { false, self.next_shred_index, self.next_code_index, + true, // merkle_variant &mut ProcessShredsStats::default(), ); self.next_shred_index += 1; diff --git a/core/src/broadcast_stage/standard_broadcast_run.rs b/core/src/broadcast_stage/standard_broadcast_run.rs index 3d3138f654e54c..ba3e6b0962fa69 100644 --- a/core/src/broadcast_stage/standard_broadcast_run.rs +++ b/core/src/broadcast_stage/standard_broadcast_run.rs @@ -76,6 +76,7 @@ impl StandardBroadcastRun { true, // is_last_in_slot, state.next_shred_index, state.next_code_index, + false, // merkle_variant stats, ); self.report_and_reset_stats(true); @@ -124,6 +125,7 @@ impl StandardBroadcastRun { is_slot_end, next_shred_index, next_code_index, + false, // merkle_variant process_stats, ); let next_shred_index = match data_shreds.iter().map(Shred::index).max() { diff --git a/core/src/consensus.rs b/core/src/consensus.rs index 7c384d48ef2b0f..5870e4cf5fb765 100644 --- a/core/src/consensus.rs +++ b/core/src/consensus.rs @@ -2848,11 +2848,11 @@ pub mod test { { let blockstore = Blockstore::open(&blockstore_path).unwrap(); - let (shreds, _) = make_slot_entries(1, 0, 42); + let (shreds, _) = make_slot_entries(1, 0, 42, /*merkle_variant:*/ true); blockstore.insert_shreds(shreds, None, false).unwrap(); - let (shreds, _) = make_slot_entries(3, 1, 42); + let (shreds, _) = make_slot_entries(3, 1, 42, /*merkle_variant:*/ true); blockstore.insert_shreds(shreds, None, false).unwrap(); - let (shreds, _) = make_slot_entries(4, 1, 42); + let (shreds, _) = make_slot_entries(4, 1, 42, /*merkle_variant:*/ true); blockstore.insert_shreds(shreds, None, false).unwrap(); assert!(!blockstore.is_root(0)); assert!(!blockstore.is_root(1)); @@ -2886,11 +2886,11 @@ pub mod test { { let blockstore = Blockstore::open(&blockstore_path).unwrap(); - let (shreds, _) = make_slot_entries(1, 0, 42); + let (shreds, _) = make_slot_entries(1, 0, 42, /*merkle_variant:*/ true); blockstore.insert_shreds(shreds, None, false).unwrap(); - let (shreds, _) = make_slot_entries(3, 1, 42); + let (shreds, _) = make_slot_entries(3, 1, 42, /*merkle_variant:*/ true); blockstore.insert_shreds(shreds, None, false).unwrap(); - let (shreds, _) = make_slot_entries(4, 1, 42); + let (shreds, _) = make_slot_entries(4, 1, 42, /*merkle_variant:*/ true); blockstore.insert_shreds(shreds, None, false).unwrap(); blockstore.set_roots(std::iter::once(&3)).unwrap(); assert!(!blockstore.is_root(0)); @@ -2917,9 +2917,9 @@ pub mod test { { let blockstore = Blockstore::open(&blockstore_path).unwrap(); - let (shreds, _) = make_slot_entries(1, 0, 42); + let (shreds, _) = make_slot_entries(1, 0, 42, /*merkle_variant:*/ true); blockstore.insert_shreds(shreds, None, false).unwrap(); - let (shreds, _) = make_slot_entries(3, 1, 42); + let (shreds, _) = make_slot_entries(3, 1, 42, /*merkle_variant:*/ true); blockstore.insert_shreds(shreds, None, false).unwrap(); assert!(!blockstore.is_root(0)); assert!(!blockstore.is_root(1)); diff --git a/core/src/repair_generic_traversal.rs b/core/src/repair_generic_traversal.rs index 03cd9d7329ab2c..d150c18b52fb00 100644 --- a/core/src/repair_generic_traversal.rs +++ b/core/src/repair_generic_traversal.rs @@ -307,6 +307,7 @@ pub mod test { parent.unwrap_or(slot), is_slot_complete, 0, + true, // merkle_variant ); // remove next to last shred diff --git a/core/src/repair_service.rs b/core/src/repair_service.rs index 2b8bda8705842c..6303ee323d1f0b 100644 --- a/core/src/repair_service.rs +++ b/core/src/repair_service.rs @@ -774,8 +774,8 @@ mod test { let blockstore = Blockstore::open(&blockstore_path).unwrap(); // Create some orphan slots - let (mut shreds, _) = make_slot_entries(1, 0, 1); - let (shreds2, _) = make_slot_entries(5, 2, 1); + let (mut shreds, _) = make_slot_entries(1, 0, 1, /*merkle_variant:*/ true); + let (shreds2, _) = make_slot_entries(5, 2, 1, /*merkle_variant:*/ true); shreds.extend(shreds2); blockstore.insert_shreds(shreds, None, false).unwrap(); let mut repair_weight = RepairWeight::new(0); @@ -808,7 +808,7 @@ mod test { { let blockstore = Blockstore::open(&blockstore_path).unwrap(); - let (shreds, _) = make_slot_entries(2, 0, 1); + let (shreds, _) = make_slot_entries(2, 0, 1, /*merkle_variant:*/ true); // Write this shred to slot 2, should chain to slot 0, which we haven't received // any shreds for @@ -854,7 +854,11 @@ mod test { let mut missing_indexes_per_slot = vec![]; for i in (0..num_shreds).rev() { let index = i % num_shreds_per_slot; - if index % nth == 0 { + // get_best_repair_shreds only returns missing shreds in + // between shreds received; So this should either insert the + // last shred in each slot, or exclude missing shreds after the + // last inserted shred from expected repairs. + if index % nth == 0 || index + 1 == num_shreds_per_slot { shreds_to_write.insert(0, shreds.remove(i as usize)); } else if i < num_shreds_per_slot { missing_indexes_per_slot.insert(0, index); @@ -918,7 +922,12 @@ mod test { let num_entries_per_slot = 100; // Create some shreds - let (mut shreds, _) = make_slot_entries(0, 0, num_entries_per_slot as u64); + let (mut shreds, _) = make_slot_entries( + 0, // slot + 0, // parent_slot + num_entries_per_slot as u64, + true, // merkle_variant + ); let num_shreds_per_slot = shreds.len() as u64; // Remove last shred (which is also last in slot) so that slot is not complete @@ -1014,7 +1023,12 @@ mod test { // Create some shreds in slots 0..num_slots for i in start..start + num_slots { let parent = if i > 0 { i - 1 } else { 0 }; - let (shreds, _) = make_slot_entries(i, parent, num_entries_per_slot as u64); + let (shreds, _) = make_slot_entries( + i, // slot + parent, + num_entries_per_slot as u64, + true, // merkle_variant + ); blockstore.insert_shreds(shreds, None, false).unwrap(); } @@ -1054,7 +1068,12 @@ mod test { // Insert some shreds to create a SlotMeta, should make repairs let num_entries_per_slot = max_ticks_per_n_shreds(1, None) + 1; - let (mut shreds, _) = make_slot_entries(dead_slot, dead_slot - 1, num_entries_per_slot); + let (mut shreds, _) = make_slot_entries( + dead_slot, // slot + dead_slot - 1, // parent_slot + num_entries_per_slot, + true, // merkle_variant + ); blockstore .insert_shreds(shreds[..shreds.len() - 1].to_vec(), None, false) .unwrap(); @@ -1094,7 +1113,12 @@ mod test { // Insert some shreds to create a SlotMeta, let num_entries_per_slot = max_ticks_per_n_shreds(1, None) + 1; - let (mut shreds, _) = make_slot_entries(dead_slot, dead_slot - 1, num_entries_per_slot); + let (mut shreds, _) = make_slot_entries( + dead_slot, + dead_slot - 1, + num_entries_per_slot, + true, // merkle_variant + ); blockstore .insert_shreds(shreds[..shreds.len() - 1].to_vec(), None, false) .unwrap(); diff --git a/core/src/repair_weighted_traversal.rs b/core/src/repair_weighted_traversal.rs index 426cfd17e8166d..58a2657108335d 100644 --- a/core/src/repair_weighted_traversal.rs +++ b/core/src/repair_weighted_traversal.rs @@ -140,7 +140,10 @@ pub fn get_best_repair_shreds<'a>( pub mod test { use { super::*, - solana_ledger::{get_tmp_ledger_path, shred::Shred}, + solana_ledger::{ + get_tmp_ledger_path, + shred::{Shred, ShredFlags}, + }, solana_runtime::bank_utils, solana_sdk::hash::Hash, trees::tr, @@ -272,15 +275,18 @@ pub mod test { let completed_shreds: Vec = [0, 2, 4, 6] .iter() .map(|slot| { - let mut shred = Shred::new_from_serialized_shred( - blockstore - .get_data_shred(*slot, last_shred - 1) - .unwrap() - .unwrap(), - ) - .unwrap(); - shred.set_index(last_shred as u32); - shred.set_last_in_slot(); + let parent_offset = if *slot == 0 { 0 } else { 1 }; + let shred = Shred::new_from_data( + *slot, + last_shred as u32, // index + parent_offset, + &[0u8; 8], // data + ShredFlags::LAST_SHRED_IN_SLOT, + 8, // reference_tick + 0, // version + last_shred as u32, // fec_set_index + ); + assert!(shred.sanitize().is_ok()); shred }) .collect(); diff --git a/core/src/replay_stage.rs b/core/src/replay_stage.rs index 84a2197365fb9d..da322cd311f4fb 100644 --- a/core/src/replay_stage.rs +++ b/core/src/replay_stage.rs @@ -3706,7 +3706,12 @@ pub(crate) mod tests { // Insert shreds for slot NUM_CONSECUTIVE_LEADER_SLOTS, // chaining to slot 1 - let (shreds, _) = make_slot_entries(NUM_CONSECUTIVE_LEADER_SLOTS, 1, 8); + let (shreds, _) = make_slot_entries( + NUM_CONSECUTIVE_LEADER_SLOTS, // slot + 1, // parent_slot + 8, // num_entries + true, // merkle_variant + ); blockstore.insert_shreds(shreds, None, false).unwrap(); assert!(bank_forks .read() @@ -3730,7 +3735,12 @@ pub(crate) mod tests { // Insert shreds for slot 2 * NUM_CONSECUTIVE_LEADER_SLOTS, // chaining to slot 1 - let (shreds, _) = make_slot_entries(2 * NUM_CONSECUTIVE_LEADER_SLOTS, 1, 8); + let (shreds, _) = make_slot_entries( + 2 * NUM_CONSECUTIVE_LEADER_SLOTS, + 1, + 8, + true, // merkle_variant + ); blockstore.insert_shreds(shreds, None, false).unwrap(); assert!(bank_forks .read() @@ -3946,7 +3956,14 @@ pub(crate) mod tests { ), // should cause AccountNotFound error ], ); - entries_to_test_shreds(&[entry], slot, slot.saturating_sub(1), false, 0) + entries_to_test_shreds( + &[entry], + slot, + slot.saturating_sub(1), // parent_slot + false, // is_full_slot + 0, // version + true, // merkle_variant + ) }); assert_matches!( @@ -3976,7 +3993,14 @@ pub(crate) mod tests { blockhash, )], ); - entries_to_test_shreds(&[entry], slot, slot.saturating_sub(1), false, 0) + entries_to_test_shreds( + &[entry], + slot, + slot.saturating_sub(1), // parent_slot + false, // is_full_slot + 0, // version + true, // merkle_variant + ) }); if let Err(BlockstoreProcessorError::InvalidBlock(block_error)) = res { @@ -4001,6 +4025,7 @@ pub(crate) mod tests { slot.saturating_sub(1), false, 0, + true, // merkle_variant ) }); @@ -4025,6 +4050,7 @@ pub(crate) mod tests { slot.saturating_sub(1), false, 0, + true, // merkle_variant ) }); @@ -4045,6 +4071,7 @@ pub(crate) mod tests { slot.saturating_sub(1), true, 0, + true, // merkle_variant ) }); @@ -4067,6 +4094,7 @@ pub(crate) mod tests { slot.saturating_sub(1), false, 0, + true, // merkle_variant ) }); @@ -4090,7 +4118,14 @@ pub(crate) mod tests { let tx = system_transaction::transfer(funded_keypair, &keypair.pubkey(), 2, blockhash); let trailing_entry = entry::next_entry(&last_entry_hash, 1, vec![tx]); entries.push(trailing_entry); - entries_to_test_shreds(&entries, slot, slot.saturating_sub(1), true, 0) + entries_to_test_shreds( + &entries, + slot, + slot.saturating_sub(1), // parent_slot + true, // is_full_slot + 0, // version + true, // merkle_variant + ) }); if let Err(BlockstoreProcessorError::InvalidBlock(block_error)) = res { diff --git a/core/src/validator.rs b/core/src/validator.rs index ffac0201f6f169..c79993684490de 100644 --- a/core/src/validator.rs +++ b/core/src/validator.rs @@ -2148,7 +2148,14 @@ mod tests { info!("creating shreds"); let mut last_print = Instant::now(); for i in 1..10 { - let shreds = blockstore::entries_to_test_shreds(&entries, i, i - 1, true, 1); + let shreds = blockstore::entries_to_test_shreds( + &entries, + i, // slot + i - 1, // parent_slot + true, // is_full_slot + 1, // version + true, // merkle_variant + ); blockstore.insert_shreds(shreds, None, true).unwrap(); if last_print.elapsed().as_millis() > 5000 { info!("inserted {}", i); diff --git a/core/src/window_service.rs b/core/src/window_service.rs index d1edc1846613d2..35330f50ff5db9 100644 --- a/core/src/window_service.rs +++ b/core/src/window_service.rs @@ -506,6 +506,7 @@ mod test { true, // is_last_in_slot 0, // next_shred_index 0, // next_code_index + true, // merkle_variant &mut ProcessShredsStats::default(), ); data_shreds @@ -539,8 +540,11 @@ mod test { blockstore .insert_shreds(shreds.clone(), None, false) .unwrap(); - let mut duplicate_shred = shreds[1].clone(); - duplicate_shred.set_slot(shreds[0].slot()); + let duplicate_shred = { + let (mut shreds, _) = make_many_slot_entries(5, 1, 10); + shreds.swap_remove(0) + }; + assert_eq!(duplicate_shred.slot(), shreds[0].slot()); let duplicate_shred_slot = duplicate_shred.slot(); sender.send(duplicate_shred).unwrap(); assert!(!blockstore.has_duplicate_shreds_in_slot(duplicate_shred_slot)); diff --git a/core/tests/ledger_cleanup.rs b/core/tests/ledger_cleanup.rs index 809f35972d8ca6..3e43eb8c897545 100644 --- a/core/tests/ledger_cleanup.rs +++ b/core/tests/ledger_cleanup.rs @@ -479,8 +479,6 @@ mod tests { let mut num_shreds = 0; let mut max_speed = 0f32; let mut min_speed = f32::MAX; - let (mut shreds_with_parent, _) = make_many_slot_shreds( - 1, batch_size_slots, shreds_per_slot); let (first_shreds, _) = make_many_slot_shreds( 0, batch_size_slots, shreds_per_slot); loop { @@ -502,14 +500,10 @@ mod tests { break; } } else { - let mut slot_id = start_slot; + let slot_id = start_slot; if slot_id > 0 { - for shred in shreds_with_parent.iter_mut() { - shred.set_slot(slot_id); - if shred.index() as u64 == shreds_per_slot - 1 { - slot_id += 1; - } - } + let (shreds_with_parent, _) = make_many_slot_shreds( + slot_id, batch_size_slots, shreds_per_slot); total += shreds_with_parent.len(); cloned_blockstore.insert_shreds( shreds_with_parent.clone(), None, false).unwrap() diff --git a/gossip/src/duplicate_shred.rs b/gossip/src/duplicate_shred.rs index 6ce635159101ab..283d2c409388a8 100644 --- a/gossip/src/duplicate_shred.rs +++ b/gossip/src/duplicate_shred.rs @@ -342,6 +342,7 @@ pub(crate) mod tests { true, // is_last_in_slot next_shred_index, next_shred_index, // next_code_index + true, // merkle_variant &mut ProcessShredsStats::default(), ); data_shreds.swap_remove(0) diff --git a/ledger/benches/blockstore.rs b/ledger/benches/blockstore.rs index d9ac870ec7d0d8..c55562b19c83d9 100644 --- a/ledger/benches/blockstore.rs +++ b/ledger/benches/blockstore.rs @@ -20,7 +20,7 @@ fn bench_write_shreds(bench: &mut Bencher, entries: Vec, ledger_path: &Pa let blockstore = Blockstore::open(ledger_path).expect("Expected to be able to open database ledger"); bench.iter(move || { - let shreds = entries_to_test_shreds(&entries, 0, 0, true, 0); + let shreds = entries_to_test_shreds(&entries, 0, 0, true, 0, /*merkle_variant:*/ true); blockstore.insert_shreds(shreds, None, false).unwrap(); }); @@ -42,7 +42,14 @@ fn setup_read_bench( ); // Convert the entries to shreds, write the shreds to the ledger - let shreds = entries_to_test_shreds(&entries, slot, slot.saturating_sub(1), true, 0); + let shreds = entries_to_test_shreds( + &entries, + slot, + slot.saturating_sub(1), // parent_slot + true, // is_full_slot + 0, // version + true, // merkle_variant + ); blockstore .insert_shreds(shreds, None, false) .expect("Expectd successful insertion of shreds into ledger"); @@ -135,7 +142,7 @@ fn bench_insert_data_shred_small(bench: &mut Bencher) { let num_entries = 32 * 1024; let entries = create_ticks(num_entries, 0, Hash::default()); bench.iter(move || { - let shreds = entries_to_test_shreds(&entries, 0, 0, true, 0); + let shreds = entries_to_test_shreds(&entries, 0, 0, true, 0, /*merkle_variant:*/ true); blockstore.insert_shreds(shreds, None, false).unwrap(); }); Blockstore::destroy(&ledger_path).expect("Expected successful database destruction"); @@ -150,7 +157,7 @@ fn bench_insert_data_shred_big(bench: &mut Bencher) { let num_entries = 32 * 1024; let entries = create_ticks(num_entries, 0, Hash::default()); bench.iter(move || { - let shreds = entries_to_test_shreds(&entries, 0, 0, true, 0); + let shreds = entries_to_test_shreds(&entries, 0, 0, true, 0, /*merkle_variant:*/ true); blockstore.insert_shreds(shreds, None, false).unwrap(); }); Blockstore::destroy(&ledger_path).expect("Expected successful database destruction"); diff --git a/ledger/src/ancestor_iterator.rs b/ledger/src/ancestor_iterator.rs index 8e723be5eaa0be..dc1abc774114bc 100644 --- a/ledger/src/ancestor_iterator.rs +++ b/ledger/src/ancestor_iterator.rs @@ -124,11 +124,11 @@ mod tests { let ledger_path = get_tmp_ledger_path_auto_delete!(); let blockstore = Blockstore::open(ledger_path.path()).unwrap(); - let (shreds, _) = make_slot_entries(0, 0, 42); + let (shreds, _) = make_slot_entries(0, 0, 42, /*merkle_variant:*/ true); blockstore.insert_shreds(shreds, None, false).unwrap(); - let (shreds, _) = make_slot_entries(1, 0, 42); + let (shreds, _) = make_slot_entries(1, 0, 42, /*merkle_variant:*/ true); blockstore.insert_shreds(shreds, None, false).unwrap(); - let (shreds, _) = make_slot_entries(2, 1, 42); + let (shreds, _) = make_slot_entries(2, 1, 42, /*merkle_variant:*/ true); blockstore.insert_shreds(shreds, None, false).unwrap(); assert_eq!( diff --git a/ledger/src/blockstore.rs b/ledger/src/blockstore.rs index d44dabed6a230c..70b11d7193b399 100644 --- a/ledger/src/blockstore.rs +++ b/ledger/src/blockstore.rs @@ -401,6 +401,7 @@ impl Blockstore { parent.unwrap_or(slot), is_slot_complete, 0, + true, // merkle_variant ); self.insert_shreds(shreds, None, false).unwrap(); } @@ -1732,6 +1733,7 @@ impl Blockstore { true, // is_last_in_slot start_index, // next_shred_index start_index, // next_code_index + true, // merkle_variant &mut ProcessShredsStats::default(), ); all_shreds.append(&mut data_shreds); @@ -1756,8 +1758,9 @@ impl Blockstore { keypair, &slot_entries, is_full_slot, - 0, // next_shred_index - 0, // next_code_index + 0, // next_shred_index + 0, // next_code_index + true, // merkle_variant &mut ProcessShredsStats::default(), ); all_shreds.append(&mut data_shreds); @@ -3866,6 +3869,7 @@ pub fn create_new_ledger( true, // is_last_in_slot 0, // next_shred_index 0, // next_code_index + true, // merkle_variant &mut ProcessShredsStats::default(), ); assert!(shreds.last().unwrap().last_in_slot()); @@ -4121,6 +4125,7 @@ pub fn entries_to_test_shreds( parent_slot: Slot, is_full_slot: bool, version: u16, + merkle_variant: bool, ) -> Vec { Shredder::new(slot, parent_slot, 0, version) .unwrap() @@ -4130,6 +4135,7 @@ pub fn entries_to_test_shreds( is_full_slot, 0, // next_shred_index, 0, // next_code_index + merkle_variant, &mut ProcessShredsStats::default(), ) .0 @@ -4140,9 +4146,10 @@ pub fn make_slot_entries( slot: Slot, parent_slot: Slot, num_entries: u64, + merkle_variant: bool, ) -> (Vec, Vec) { let entries = create_ticks(num_entries, 0, Hash::default()); - let shreds = entries_to_test_shreds(&entries, slot, parent_slot, true, 0); + let shreds = entries_to_test_shreds(&entries, slot, parent_slot, true, 0, merkle_variant); (shreds, entries) } @@ -4157,7 +4164,12 @@ pub fn make_many_slot_entries( for slot in start_slot..start_slot + num_slots { let parent_slot = if slot == 0 { 0 } else { slot - 1 }; - let (slot_shreds, slot_entries) = make_slot_entries(slot, parent_slot, entries_per_slot); + let (slot_shreds, slot_entries) = make_slot_entries( + slot, + parent_slot, + entries_per_slot, + true, // merkle_variant + ); shreds.extend(slot_shreds); entries.extend(slot_entries); } @@ -4286,7 +4298,12 @@ pub fn make_chaining_slot_entries( } }; - let result = make_slot_entries(*slot, parent_slot, entries_per_slot); + let result = make_slot_entries( + *slot, + parent_slot, + entries_per_slot, + true, // merkle_variant + ); slots_shreds_and_entries.push(result); } @@ -4397,7 +4414,12 @@ pub mod tests { } fn make_and_insert_slot(blockstore: &Blockstore, slot: Slot, parent_slot: Slot) { - let (shreds, _) = make_slot_entries(slot, parent_slot, 100); + let (shreds, _) = make_slot_entries( + slot, + parent_slot, + 100, // num_entries + true, // merkle_variant + ); blockstore.insert_shreds(shreds, None, true).unwrap(); let meta = blockstore.meta(slot).unwrap().unwrap(); @@ -4461,7 +4483,12 @@ pub mod tests { let num_entries = max_ticks_per_n_shreds(1, None) + 1; assert!(num_entries > 1); - let (mut shreds, _) = make_slot_entries(0, 0, num_entries); + let (mut shreds, _) = make_slot_entries( + 0, // slot + 0, // parent_slot + num_entries, + true, // merkle_variant + ); let ledger_path = get_tmp_ledger_path_auto_delete!(); let blockstore = Blockstore::open(ledger_path.path()).unwrap(); @@ -4629,7 +4656,7 @@ pub mod tests { #[test] fn test_read_shred_bytes() { let slot = 0; - let (shreds, _) = make_slot_entries(slot, 0, 100); + let (shreds, _) = make_slot_entries(slot, 0, 100, /*merkle_variant:*/ true); let num_shreds = shreds.len() as u64; let shred_bufs: Vec<_> = shreds.iter().map(Shred::payload).cloned().collect(); @@ -4685,7 +4712,7 @@ pub mod tests { #[test] fn test_shred_cleanup_check() { let slot = 1; - let (shreds, _) = make_slot_entries(slot, 0, 100); + let (shreds, _) = make_slot_entries(slot, 0, 100, /*merkle_variant:*/ true); let ledger_path = get_tmp_ledger_path_auto_delete!(); let blockstore = Blockstore::open(ledger_path.path()).unwrap(); @@ -4710,7 +4737,12 @@ pub mod tests { let num_entries = max_ticks_per_n_shreds(1, None) + 1; assert!(num_entries > 1); - let (mut shreds, entries) = make_slot_entries(0, 0, num_entries); + let (mut shreds, entries) = make_slot_entries( + 0, // slot + 0, // parent_slot + num_entries, + true, // merkle_variant + ); let num_shreds = shreds.len() as u64; let ledger_path = get_tmp_ledger_path_auto_delete!(); @@ -4753,7 +4785,12 @@ pub mod tests { fn test_insert_data_shreds_reverse() { let num_shreds = 10; let num_entries = max_ticks_per_n_shreds(num_shreds, None); - let (mut shreds, entries) = make_slot_entries(0, 0, num_entries); + let (mut shreds, entries) = make_slot_entries( + 0, // slot + 0, // parent_slot + num_entries, + true, // merkle_variant + ); let num_shreds = shreds.len() as u64; let ledger_path = get_tmp_ledger_path_auto_delete!(); @@ -4831,12 +4868,26 @@ pub mod tests { let ledger_path = get_tmp_ledger_path_auto_delete!(); let blockstore = Blockstore::open(ledger_path.path()).unwrap(); let entries = create_ticks(8, 0, Hash::default()); - let shreds = entries_to_test_shreds(&entries[0..4], 1, 0, false, 0); + let shreds = entries_to_test_shreds( + &entries[0..4], + 1, + 0, + false, + 0, + true, // merkle_variant + ); blockstore .insert_shreds(shreds, None, false) .expect("Expected successful write of shreds"); - let mut shreds1 = entries_to_test_shreds(&entries[4..], 1, 0, false, 0); + let mut shreds1 = entries_to_test_shreds( + &entries[4..], + 1, + 0, + false, + 0, + false, // merkle_variant + ); for (i, b) in shreds1.iter_mut().enumerate() { b.set_index(8 + i as u32); } @@ -4864,8 +4915,14 @@ pub mod tests { for slot in 0..num_slots { let entries = create_ticks(slot + 1, 0, Hash::default()); let last_entry = entries.last().unwrap().clone(); - let mut shreds = - entries_to_test_shreds(&entries, slot, slot.saturating_sub(1), false, 0); + let mut shreds = entries_to_test_shreds( + &entries, + slot, + slot.saturating_sub(1), + false, + 0, + true, // merkle_variant + ); for b in shreds.iter_mut() { b.set_index(index); b.set_slot(slot as u64); @@ -4898,7 +4955,14 @@ pub mod tests { // Write entries for slot in 0..num_slots { let entries = create_ticks(entries_per_slot, 0, Hash::default()); - let shreds = entries_to_test_shreds(&entries, slot, slot.saturating_sub(1), false, 0); + let shreds = entries_to_test_shreds( + &entries, + slot, + slot.saturating_sub(1), + false, + 0, + true, // merkle_variant + ); assert!(shreds.len() as u64 >= shreds_per_slot); blockstore .insert_shreds(shreds, None, false) @@ -4918,7 +4982,12 @@ pub mod tests { let parent_slot = if i == 0 { 0 } else { i - 1 }; // Write entries let num_entries = min_entries * (i + 1); - let (shreds, original_entries) = make_slot_entries(slot, parent_slot, num_entries); + let (shreds, original_entries) = make_slot_entries( + slot, + parent_slot, + num_entries, + true, // merkle_variant + ); let num_shreds = shreds.len() as u64; assert!(num_shreds > 1); @@ -4976,7 +5045,8 @@ pub mod tests { let slot = 0; let num_entries = max_ticks_per_n_shreds(1, None) + 1; let entries = create_ticks(num_entries, slot, Hash::default()); - let shreds = entries_to_test_shreds(&entries, slot, 0, true, 0); + let shreds = + entries_to_test_shreds(&entries, slot, 0, true, 0, /*merkle_variant:*/ true); let num_shreds = shreds.len(); assert!(num_shreds > 1); assert!(blockstore @@ -5015,7 +5085,12 @@ pub mod tests { let entries_per_slot = 50; // Create entries for slot 0 - let (mut shreds, _) = make_slot_entries(0, 0, entries_per_slot); + let (mut shreds, _) = make_slot_entries( + 0, // slot + 0, // parent_slot + entries_per_slot, + false, // merkle_variant + ); let shreds_per_slot = shreds.len() as u64; // Insert second shred, but we're missing the first shred, so no consecutive @@ -5045,7 +5120,12 @@ pub mod tests { let mut shreds = vec![]; let mut missing_shreds = vec![]; for slot in 1..num_slots + 1 { - let (mut slot_shreds, _) = make_slot_entries(slot, slot - 1, entries_per_slot); + let (mut slot_shreds, _) = make_slot_entries( + slot, + slot - 1, // parent_slot + entries_per_slot, + false, // merkle_variant + ); let missing_shred = slot_shreds.remove(slot as usize - 1); shreds.extend(slot_shreds); missing_shreds.push(missing_shred); @@ -5059,7 +5139,12 @@ pub mod tests { // should get no updates let shreds: Vec<_> = (1..num_slots + 1) .flat_map(|slot| { - let (mut shred, _) = make_slot_entries(slot, slot - 1, 1); + let (mut shred, _) = make_slot_entries( + slot, + slot - 1, // parent_slot + 1, // num_entries + false, // merkle_variant + ); shred[0].set_index(2 * num_slots as u32); shred }) @@ -5099,7 +5184,8 @@ pub mod tests { let entries_per_slot = 10; // Create shreds for slot 0 - let (mut shreds, _) = make_slot_entries(0, 0, entries_per_slot); + let (mut shreds, _) = + make_slot_entries(0, 0, entries_per_slot, /*merkle_variant:*/ true); let shred0 = shreds.remove(0); // Insert all but the first shred in the slot, should not be considered complete @@ -5174,7 +5260,12 @@ pub mod tests { let (shreds0, _) = all_shreds.remove(0); let (shreds1, _) = all_shreds.remove(0); let (shreds2, _) = all_shreds.remove(0); - let (shreds3, _) = make_slot_entries(disconnected_slot, 1, entries_per_slot); + let (shreds3, _) = make_slot_entries( + disconnected_slot, + 1, // parent_slot + entries_per_slot, + true, // merkle_variant + ); let mut all_shreds: Vec<_> = vec![shreds0, shreds1, shreds2, shreds3] .into_iter() @@ -5273,7 +5364,12 @@ pub mod tests { slot - 1 } }; - let (slot_shreds, _) = make_slot_entries(slot, parent_slot, entries_per_slot); + let (slot_shreds, _) = make_slot_entries( + slot, + parent_slot, + entries_per_slot, + true, // merkle_variant + ); shreds_per_slot = slot_shreds.len(); if slot % 2 == 1 { @@ -5646,8 +5742,8 @@ pub mod tests { // Write some slot that also chains to existing slots and orphan, // nothing should change - let (shred4, _) = make_slot_entries(4, 0, 1); - let (shred5, _) = make_slot_entries(5, 1, 1); + let (shred4, _) = make_slot_entries(4, 0, 1, /*merkle_variant:*/ true); + let (shred5, _) = make_slot_entries(5, 1, 1, /*merkle_variant:*/ true); blockstore.insert_shreds(shred4, None, false).unwrap(); blockstore.insert_shreds(shred5, None, false).unwrap(); assert_eq!( @@ -5686,7 +5782,8 @@ pub mod tests { } }; - let (mut shred, entry) = make_slot_entries(slot, parent_slot, 1); + let (mut shred, entry) = + make_slot_entries(slot, parent_slot, 1, /*merkle_variant:*/ false); num_shreds_per_slot = shred.len() as u64; shred .iter_mut() @@ -5738,7 +5835,8 @@ pub mod tests { // Create enough entries to ensure there are at least two shreds created let num_entries = max_ticks_per_n_shreds(1, None) + 1; let entries = create_ticks(num_entries, 0, Hash::default()); - let mut shreds = entries_to_test_shreds(&entries, slot, 0, true, 0); + let mut shreds = + entries_to_test_shreds(&entries, slot, 0, true, 0, /*merkle_variant:*/ false); let num_shreds = shreds.len(); assert!(num_shreds > 1); for (i, s) in shreds.iter_mut().enumerate() { @@ -5876,7 +5974,8 @@ pub mod tests { ); let entries = create_ticks(100, 0, Hash::default()); - let mut shreds = entries_to_test_shreds(&entries, slot, 0, true, 0); + let mut shreds = + entries_to_test_shreds(&entries, slot, 0, true, 0, /*merkle_variant:*/ false); assert!(shreds.len() > 2); shreds.drain(2..); @@ -5915,7 +6014,8 @@ pub mod tests { // Write entries let num_entries = 10; let entries = create_ticks(num_entries, 0, Hash::default()); - let shreds = entries_to_test_shreds(&entries, slot, 0, true, 0); + let shreds = + entries_to_test_shreds(&entries, slot, 0, true, 0, /*merkle_variant:*/ true); let num_shreds = shreds.len(); blockstore.insert_shreds(shreds, None, false).unwrap(); @@ -5949,7 +6049,7 @@ pub mod tests { #[test] fn test_should_insert_data_shred() { solana_logger::setup(); - let (mut shreds, _) = make_slot_entries(0, 0, 200); + let (mut shreds, _) = make_slot_entries(0, 0, 200, /*merkle_variant:*/ false); let ledger_path = get_tmp_ledger_path_auto_delete!(); let blockstore = Blockstore::open(ledger_path.path()).unwrap(); @@ -6035,7 +6135,7 @@ pub mod tests { #[test] fn test_is_data_shred_present() { - let (shreds, _) = make_slot_entries(0, 0, 200); + let (shreds, _) = make_slot_entries(0, 0, 200, /*merkle_variant:*/ true); let ledger_path = get_tmp_ledger_path_auto_delete!(); let blockstore = Blockstore::open(ledger_path.path()).unwrap(); let index_cf = &blockstore.index_cf; @@ -6195,7 +6295,7 @@ pub mod tests { #[test] fn test_insert_multiple_is_last() { solana_logger::setup(); - let (shreds, _) = make_slot_entries(0, 0, 20); + let (shreds, _) = make_slot_entries(0, 0, 20, /*merkle_variant:*/ true); let num_shreds = shreds.len() as u64; let ledger_path = get_tmp_ledger_path_auto_delete!(); let blockstore = Blockstore::open(ledger_path.path()).unwrap(); @@ -6208,7 +6308,7 @@ pub mod tests { assert_eq!(slot_meta.last_index, Some(num_shreds - 1)); assert!(slot_meta.is_full()); - let (shreds, _) = make_slot_entries(0, 0, 22); + let (shreds, _) = make_slot_entries(0, 0, 22, /*merkle_variant:*/ true); blockstore.insert_shreds(shreds, None, false).unwrap(); let slot_meta = blockstore.meta(0).unwrap().unwrap(); @@ -6361,7 +6461,8 @@ pub mod tests { let num_ticks = 8; let entries = create_ticks(num_ticks, 0, Hash::default()); let slot = 1; - let shreds = entries_to_test_shreds(&entries, slot, 0, false, 0); + let shreds = + entries_to_test_shreds(&entries, slot, 0, false, 0, /*merkle_variant:*/ true); let next_shred_index = shreds.len(); blockstore .insert_shreds(shreds, None, false) @@ -6395,7 +6496,7 @@ pub mod tests { fn test_no_insert_but_modify_slot_meta() { // This tests correctness of the SlotMeta in various cases in which a shred // that gets filtered out by checks - let (shreds0, _) = make_slot_entries(0, 0, 200); + let (shreds0, _) = make_slot_entries(0, 0, 200, /*merkle_variant:*/ true); let ledger_path = get_tmp_ledger_path_auto_delete!(); let blockstore = Blockstore::open(ledger_path.path()).unwrap(); @@ -6407,8 +6508,8 @@ pub mod tests { // Insert a repetitive shred for slot 's', should get ignored, but also // insert shreds that chains to 's', should see the update in the SlotMeta // for 's'. - let (mut shreds2, _) = make_slot_entries(2, 0, 200); - let (mut shreds3, _) = make_slot_entries(3, 0, 200); + let (mut shreds2, _) = make_slot_entries(2, 0, 200, /*merkle_variant:*/ true); + let (mut shreds3, _) = make_slot_entries(3, 0, 200, /*merkle_variant:*/ true); shreds2.push(shreds0[1].clone()); shreds3.insert(0, shreds0[1].clone()); blockstore.insert_shreds(shreds2, None, false).unwrap(); @@ -6425,7 +6526,7 @@ pub mod tests { let blockstore = Blockstore::open(ledger_path.path()).unwrap(); // Make shred for slot 1 - let (shreds1, _) = make_slot_entries(1, 0, 1); + let (shreds1, _) = make_slot_entries(1, 0, 1, /*merkle_variant:*/ true); let last_root = 100; blockstore.set_roots(std::iter::once(&last_root)).unwrap(); @@ -6454,7 +6555,14 @@ pub mod tests { assert_eq!(blockstore.lowest_slot(), 0); for slot in 1..4 { let entries = make_slot_entries_with_transactions(100); - let shreds = entries_to_test_shreds(&entries, slot, slot - 1, true, 0); + let shreds = entries_to_test_shreds( + &entries, + slot, + slot - 1, // parent_slot + true, // is_full_slot + 0, // version + true, // merkle_variant + ); blockstore.insert_shreds(shreds, None, false).unwrap(); blockstore.set_roots(vec![slot].iter()).unwrap(); } @@ -6473,9 +6581,30 @@ pub mod tests { let slot = 10; let entries = make_slot_entries_with_transactions(100); let blockhash = get_last_hash(entries.iter()).unwrap(); - let shreds = entries_to_test_shreds(&entries, slot, slot - 1, true, 0); - let more_shreds = entries_to_test_shreds(&entries, slot + 1, slot, true, 0); - let unrooted_shreds = entries_to_test_shreds(&entries, slot + 2, slot + 1, true, 0); + let shreds = entries_to_test_shreds( + &entries, + slot, + slot - 1, // parent_slot + true, // is_full_slot + 0, // version + true, // merkle_variant + ); + let more_shreds = entries_to_test_shreds( + &entries, + slot + 1, + slot, // parent_slot + true, // is_full_slot + 0, // version + true, // merkle_variant + ); + let unrooted_shreds = entries_to_test_shreds( + &entries, + slot + 2, + slot + 1, // parent_slot + true, // is_full_slot + 0, // version + true, // merkle_variant + ); let ledger_path = get_tmp_ledger_path_auto_delete!(); let blockstore = Blockstore::open(ledger_path.path()).unwrap(); blockstore.insert_shreds(shreds, None, false).unwrap(); @@ -7385,7 +7514,14 @@ pub mod tests { fn test_get_rooted_transaction() { let slot = 2; let entries = make_slot_entries_with_transactions(5); - let shreds = entries_to_test_shreds(&entries, slot, slot - 1, true, 0); + let shreds = entries_to_test_shreds( + &entries, + slot, + slot - 1, // parent_slot + true, // is_full_slot + 0, // version + true, // merkle_variant + ); let ledger_path = get_tmp_ledger_path_auto_delete!(); let blockstore = Blockstore::open(ledger_path.path()).unwrap(); blockstore.insert_shreds(shreds, None, false).unwrap(); @@ -7498,7 +7634,14 @@ pub mod tests { let slot = 2; let entries = make_slot_entries_with_transactions(5); - let shreds = entries_to_test_shreds(&entries, slot, slot - 1, true, 0); + let shreds = entries_to_test_shreds( + &entries, + slot, + slot - 1, // parent_slot + true, // is_full_slot + 0, // version + true, // merkle_variant + ); blockstore.insert_shreds(shreds, None, false).unwrap(); let expected_transactions: Vec = entries @@ -7834,7 +7977,7 @@ pub mod tests { let ledger_path = get_tmp_ledger_path_auto_delete!(); let blockstore = Blockstore::open(ledger_path.path()).unwrap(); - let (shreds, _) = make_slot_entries(1, 0, 4); + let (shreds, _) = make_slot_entries(1, 0, 4, /*merkle_variant:*/ true); blockstore.insert_shreds(shreds, None, false).unwrap(); fn make_slot_entries_with_transaction_addresses(addresses: &[Pubkey]) -> Vec { @@ -7861,7 +8004,14 @@ pub mod tests { let entries = make_slot_entries_with_transaction_addresses(&[ address0, address1, address0, address1, ]); - let shreds = entries_to_test_shreds(&entries, slot, slot - 1, true, 0); + let shreds = entries_to_test_shreds( + &entries, + slot, + slot - 1, // parent_slot + true, // is_full_slot + 0, // version + true, // merkle_variant + ); blockstore.insert_shreds(shreds, None, false).unwrap(); for entry in entries.into_iter() { @@ -7885,7 +8035,8 @@ pub mod tests { let entries = make_slot_entries_with_transaction_addresses(&[ address0, address1, address0, address1, ]); - let shreds = entries_to_test_shreds(&entries, slot, 8, true, 0); + let shreds = + entries_to_test_shreds(&entries, slot, 8, true, 0, /*merkle_variant:*/ true); blockstore.insert_shreds(shreds, None, false).unwrap(); for entry in entries.into_iter() { @@ -8390,9 +8541,10 @@ pub mod tests { let ledger_path = get_tmp_ledger_path_auto_delete!(); let blockstore = Blockstore::open(ledger_path.path()).unwrap(); - for i in 0..10 { - let slot = i; - let (shreds, _) = make_slot_entries(slot, 0, 1); + assert_eq!(blockstore.lowest_slot(), 0); + + for slot in 0..10 { + let (shreds, _) = make_slot_entries(slot, 0, 1, /*merkle_variant:*/ true); blockstore.insert_shreds(shreds, None, false).unwrap(); } assert_eq!(blockstore.lowest_slot(), 1); @@ -8408,7 +8560,7 @@ pub mod tests { assert_eq!(blockstore.highest_slot().unwrap(), None); for slot in 0..10 { - let (shreds, _) = make_slot_entries(slot, 0, 1); + let (shreds, _) = make_slot_entries(slot, 0, 1, /*merkle_variant:*/ true); blockstore.insert_shreds(shreds, None, false).unwrap(); assert_eq!(blockstore.highest_slot().unwrap(), Some(slot)); } @@ -8600,6 +8752,7 @@ pub mod tests { true, // is_last_in_slot 0, // next_shred_index 0, // next_code_index + true, // merkle_variant &mut ProcessShredsStats::default(), ); @@ -8661,6 +8814,7 @@ pub mod tests { true, // is_last_in_slot 0, // next_shred_index 0, // next_code_index, + true, // merkle_variant &mut ProcessShredsStats::default(), ); let (duplicate_shreds, _) = shredder.entries_to_shreds( @@ -8669,6 +8823,7 @@ pub mod tests { true, // is_last_in_slot 0, // next_shred_index 0, // next_code_index + true, // merkle_variant &mut ProcessShredsStats::default(), ); let shred = shreds[0].clone(); @@ -9003,7 +9158,14 @@ pub mod tests { let parent = 0; let num_txs = 20; let entry = make_large_tx_entry(num_txs); - let shreds = entries_to_test_shreds(&[entry], slot, parent, true, 0); + let shreds = entries_to_test_shreds( + &[entry], + slot, + parent, + true, // is_full_slot + 0, // version + false, // merkle_variant + ); assert!(shreds.len() > 1); let ledger_path = get_tmp_ledger_path_auto_delete!(); @@ -9036,7 +9198,8 @@ pub mod tests { // Create enough entries to ensure there are at least two shreds created let num_unique_entries = max_ticks_per_n_shreds(1, None) + 1; - let (mut original_shreds, original_entries) = make_slot_entries(0, 0, num_unique_entries); + let (mut original_shreds, original_entries) = + make_slot_entries(0, 0, num_unique_entries, /*merkle_variant:*/ true); // Discard first shred, so that the slot is not full assert!(original_shreds.len() > 1); @@ -9059,7 +9222,14 @@ pub mod tests { assert!(!blockstore.is_full(0)); } - let duplicate_shreds = entries_to_test_shreds(&original_entries, 0, 0, true, 0); + let duplicate_shreds = entries_to_test_shreds( + &original_entries, + 0, // slot + 0, // parent_slot + true, // is_full_slot + 0, // version + true, // merkle_variant + ); let num_shreds = duplicate_shreds.len() as u64; blockstore .insert_shreds(duplicate_shreds, None, false) @@ -9081,7 +9251,8 @@ pub mod tests { let num_shreds = 2; let num_entries = max_ticks_per_n_shreds(num_shreds, None); let slot = 1; - let (mut shreds, _) = make_slot_entries(slot, 0, num_entries); + let (mut shreds, _) = + make_slot_entries(slot, 0, num_entries, /*merkle_variant:*/ false); // Mark both as last shred shreds[0].set_last_in_slot(); @@ -9102,7 +9273,8 @@ pub mod tests { let setup_test_shreds = |slot: Slot| -> Vec { let num_entries = max_ticks_per_n_shreds(num_shreds, None); - let (mut shreds, _) = make_slot_entries(slot, 0, num_entries); + let (mut shreds, _) = + make_slot_entries(slot, 0, num_entries, /*merkle_variant:*/ false); shreds[smaller_last_shred_index].set_last_in_slot(); shreds[larger_last_shred_index].set_last_in_slot(); shreds @@ -9276,7 +9448,8 @@ pub mod tests { let num_shreds = 10; let middle_shred_index = 5; let num_entries = max_ticks_per_n_shreds(num_shreds, None); - let (shreds, _) = make_slot_entries(slot, 0, num_entries); + let (shreds, _) = + make_slot_entries(slot, 0, num_entries, /*merkle_variant:*/ false); // Reverse shreds so that last shred gets inserted first and sets meta.received let mut shreds: Vec = shreds.into_iter().rev().collect(); diff --git a/ledger/src/blockstore/blockstore_purge.rs b/ledger/src/blockstore/blockstore_purge.rs index 1e79e4b81288e1..734debbded2a66 100644 --- a/ledger/src/blockstore/blockstore_purge.rs +++ b/ledger/src/blockstore/blockstore_purge.rs @@ -807,7 +807,14 @@ pub mod tests { for x in 0..index0_max_slot + 1 { let entries = make_slot_entries_with_transactions(1); - let shreds = entries_to_test_shreds(&entries, x, x.saturating_sub(1), true, 0); + let shreds = entries_to_test_shreds( + &entries, + x, // slot + x.saturating_sub(1), // parent_slot + true, // is_full_slot + 0, // version + true, // merkle_variant + ); blockstore.insert_shreds(shreds, None, false).unwrap(); let signature = entries .iter() @@ -843,7 +850,14 @@ pub mod tests { for x in index0_max_slot + 1..index1_max_slot + 1 { let entries = make_slot_entries_with_transactions(1); - let shreds = entries_to_test_shreds(&entries, x, x.saturating_sub(1), true, 0); + let shreds = entries_to_test_shreds( + &entries, + x, // slot + x.saturating_sub(1), // parent_slot + true, // is_full_slot + 0, // version + true, // merkle_variant + ); blockstore.insert_shreds(shreds, None, false).unwrap(); let signature: Signature = entries .iter() @@ -1243,7 +1257,14 @@ pub mod tests { let mut tick = create_ticks(1, 0, hash(&serialize(&x).unwrap())); entries.append(&mut tick); } - let shreds = entries_to_test_shreds(&entries, slot, slot - 1, true, 0); + let shreds = entries_to_test_shreds( + &entries, + slot, + slot - 1, // parent_slot + true, // is_full_slot + 0, // version + true, // merkle_variant + ); blockstore.insert_shreds(shreds, None, false).unwrap(); let mut write_batch = blockstore.db.batch().unwrap(); diff --git a/ledger/src/leader_schedule_cache.rs b/ledger/src/leader_schedule_cache.rs index 465ade38d3af11..a8200c8bade297 100644 --- a/ledger/src/leader_schedule_cache.rs +++ b/ledger/src/leader_schedule_cache.rs @@ -451,7 +451,7 @@ mod tests { // Write a shred into slot 2 that chains to slot 1, // but slot 1 is empty so should not be skipped - let (shreds, _) = make_slot_entries(2, 1, 1); + let (shreds, _) = make_slot_entries(2, 1, 1, /*merkle_variant:*/ true); blockstore.insert_shreds(shreds, None, false).unwrap(); assert_eq!( cache @@ -462,7 +462,7 @@ mod tests { ); // Write a shred into slot 1 - let (shreds, _) = make_slot_entries(1, 0, 1); + let (shreds, _) = make_slot_entries(1, 0, 1, /*merkle_variant:*/ true); // Check that slot 1 and 2 are skipped blockstore.insert_shreds(shreds, None, false).unwrap(); diff --git a/ledger/src/shred.rs b/ledger/src/shred.rs index 6a5ade8b410bc4..953182d87fe6d8 100644 --- a/ledger/src/shred.rs +++ b/ledger/src/shred.rs @@ -56,6 +56,7 @@ use { crate::blockstore::{self, MAX_DATA_SHREDS_PER_SLOT}, bitflags::bitflags, num_enum::{IntoPrimitive, TryFromPrimitive}, + rayon::ThreadPool, reed_solomon_erasure::Error::TooFewShardsPresent, serde::{Deserialize, Serialize}, solana_entry::entry::{create_ticks, Entry}, @@ -67,7 +68,7 @@ use { signature::{Keypair, Signature, Signer, SIGNATURE_BYTES}, }, static_assertions::const_assert_eq, - std::fmt::Debug, + std::{fmt::Debug, time::Instant}, thiserror::Error, }; pub use { @@ -134,7 +135,7 @@ pub enum Error { #[error("Invalid data size: {size}, payload: {payload}")] InvalidDataSize { size: u16, payload: usize }, #[error("Invalid erasure shard index: {0:?}")] - InvalidErasureShardIndex(/*headers:*/ Box), + InvalidErasureShardIndex(/*headers:*/ Box), #[error("Invalid merkle proof")] InvalidMerkleProof, #[error("Invalid num coding shreds: {0}")] @@ -161,6 +162,8 @@ pub enum Error { InvalidShredVariant, #[error(transparent)] IoError(#[from] std::io::Error), + #[error("Unknown proof size")] + UnknownProofSize, } #[repr(u8)] @@ -735,6 +738,39 @@ pub(crate) fn recover(shreds: Vec) -> Result, Error> { } } +#[allow(clippy::too_many_arguments)] +pub(crate) fn make_merkle_shreds_from_entries( + thread_pool: &ThreadPool, + keypair: &Keypair, + entries: &[Entry], + slot: Slot, + parent_slot: Slot, + shred_version: u16, + reference_tick: u8, + is_last_in_slot: bool, + next_shred_index: u32, + next_code_index: u32, + stats: &mut ProcessShredsStats, +) -> Result, Error> { + let now = Instant::now(); + let entries = bincode::serialize(entries)?; + stats.serialize_elapsed += now.elapsed().as_micros() as u64; + let shreds = merkle::make_shreds_from_data( + thread_pool, + keypair, + &entries[..], + slot, + parent_slot, + shred_version, + reference_tick, + is_last_in_slot, + next_shred_index, + next_code_index, + stats, + )?; + Ok(shreds.into_iter().flatten().map(Shred::from).collect()) +} + // Accepts shreds in the slot range [root + 1, max_slot]. #[must_use] pub fn should_discard_shred( diff --git a/ledger/src/shred/merkle.rs b/ledger/src/shred/merkle.rs index 147955d3a98558..4e3c0fb9a65d7a 100644 --- a/ledger/src/shred/merkle.rs +++ b/ledger/src/shred/merkle.rs @@ -1,30 +1,37 @@ #[cfg(test)] -use {crate::shred::ShredType, solana_sdk::pubkey::Pubkey}; +use crate::shred::ShredType; use { crate::{ shred::{ + self, common::impl_shred_common, dispatch, shred_code, shred_data, traits::{ Shred as ShredTrait, ShredCode as ShredCodeTrait, ShredData as ShredDataTrait, }, - CodingShredHeader, DataShredHeader, Error, ShredCommonHeader, ShredVariant, - SIZE_OF_CODING_SHRED_HEADERS, SIZE_OF_DATA_SHRED_HEADERS, SIZE_OF_SIGNATURE, + CodingShredHeader, DataShredHeader, Error, ProcessShredsStats, ShredCommonHeader, + ShredFlags, ShredVariant, DATA_SHREDS_PER_FEC_BLOCK, SIZE_OF_CODING_SHRED_HEADERS, + SIZE_OF_DATA_SHRED_HEADERS, SIZE_OF_SIGNATURE, }, - shredder::ReedSolomon, + shredder::{self, ReedSolomon}, }, + itertools::Itertools, + rayon::{prelude::*, ThreadPool}, reed_solomon_erasure::Error::{InvalidIndex, TooFewParityShards, TooFewShards}, solana_perf::packet::deserialize_from_with_limit, solana_sdk::{ clock::Slot, hash::{hashv, Hash}, - signature::Signature, + pubkey::Pubkey, + signature::{Signature, Signer}, + signer::keypair::Keypair, }, static_assertions::const_assert_eq, std::{ - io::{Cursor, Seek, SeekFrom}, + io::{Cursor, Seek, SeekFrom, Write}, iter::repeat_with, ops::Range, + time::Instant, }, }; @@ -82,8 +89,11 @@ impl Shred { dispatch!(fn erasure_shard_as_slice(&self) -> Result<&[u8], Error>); dispatch!(fn erasure_shard_index(&self) -> Result); dispatch!(fn merkle_tree_node(&self) -> Result); + dispatch!(fn payload(&self) -> &Vec); dispatch!(fn sanitize(&self) -> Result<(), Error>); dispatch!(fn set_merkle_branch(&mut self, merkle_branch: MerkleBranch) -> Result<(), Error>); + dispatch!(fn set_signature(&mut self, signature: Signature)); + dispatch!(fn signed_message(&self) -> &[u8]); fn merkle_root(&self) -> &MerkleRoot { match self { @@ -91,13 +101,28 @@ impl Shred { Self::ShredData(shred) => &shred.merkle_branch.root, } } + + #[must_use] + fn verify(&self, pubkey: &Pubkey) -> bool { + let message = self.signed_message(); + self.signature().verify(pubkey.as_ref(), message) + } + + fn signature(&self) -> Signature { + self.common_header().signature + } + + fn from_payload(shred: Vec) -> Result { + match shred::layout::get_shred_variant(&shred)? { + ShredVariant::LegacyCode | ShredVariant::LegacyData => Err(Error::InvalidShredVariant), + ShredVariant::MerkleCode(_) => Ok(Self::ShredCode(ShredCode::from_payload(shred)?)), + ShredVariant::MerkleData(_) => Ok(Self::ShredData(ShredData::from_payload(shred)?)), + } + } } #[cfg(test)] impl Shred { - dispatch!(fn set_signature(&mut self, signature: Signature)); - dispatch!(fn signed_message(&self) -> &[u8]); - fn index(&self) -> u32 { self.common_header().index } @@ -105,16 +130,6 @@ impl Shred { fn shred_type(&self) -> ShredType { ShredType::from(self.common_header().shred_variant) } - - fn signature(&self) -> Signature { - self.common_header().signature - } - - #[must_use] - fn verify(&self, pubkey: &Pubkey) -> bool { - let message = self.signed_message(); - self.signature().verify(pubkey.as_ref(), message) - } } impl ShredData { @@ -723,6 +738,11 @@ pub(super) fn recover(mut shreds: Vec) -> Result, Error> { return Err(Error::InvalidMerkleProof); } shred.set_merkle_branch(merkle_branch)?; + // Assert that shred payload is fully populated. + debug_assert_eq!(shred, { + let shred = shred.payload().clone(); + &Shred::from_payload(shred).unwrap() + }); } } // TODO: No need to verify merkle proof in sanitize here. @@ -734,6 +754,258 @@ pub(super) fn recover(mut shreds: Vec) -> Result, Error> { .collect() } +// Maps number of (code + data) shreds to MerkleBranch.proof.len(). +fn get_proof_size(num_shreds: usize) -> u8 { + let bits = usize::BITS - num_shreds.leading_zeros(); + let proof_size = if num_shreds.is_power_of_two() { + bits.checked_sub(1).unwrap() + } else { + bits + }; + u8::try_from(proof_size).unwrap() +} + +#[allow(clippy::too_many_arguments)] +pub(super) fn make_shreds_from_data( + thread_pool: &ThreadPool, + keypair: &Keypair, + mut data: &[u8], // Serialized &[Entry] + slot: Slot, + parent_slot: Slot, + shred_version: u16, + reference_tick: u8, + is_last_in_slot: bool, + next_shred_index: u32, + next_code_index: u32, + stats: &mut ProcessShredsStats, +) -> Result>, Error> { + fn new_shred_data( + common_header: ShredCommonHeader, + mut data_header: DataShredHeader, + data: &[u8], + merkle_branch: MerkleBranch, + ) -> ShredData { + let size = ShredData::SIZE_OF_HEADERS + data.len(); + let mut payload = vec![0u8; ShredData::SIZE_OF_PAYLOAD]; + payload[ShredData::SIZE_OF_HEADERS..size].copy_from_slice(data); + data_header.size = size as u16; + ShredData { + common_header, + data_header, + merkle_branch, + payload, + } + } + let now = Instant::now(); + let erasure_batch_size = shredder::get_erasure_batch_size(DATA_SHREDS_PER_FEC_BLOCK); + let proof_size = get_proof_size(erasure_batch_size); + let data_buffer_size = ShredData::capacity(proof_size)?; + let chunk_size = DATA_SHREDS_PER_FEC_BLOCK * data_buffer_size; + let mut common_header = ShredCommonHeader { + signature: Signature::default(), + shred_variant: ShredVariant::MerkleData(proof_size), + slot, + index: next_shred_index, + version: shred_version, + fec_set_index: next_shred_index, + }; + let data_header = { + let parent_offset = slot + .checked_sub(parent_slot) + .and_then(|offset| u16::try_from(offset).ok()) + .ok_or(Error::InvalidParentSlot { slot, parent_slot })?; + let flags = unsafe { + ShredFlags::from_bits_unchecked( + ShredFlags::SHRED_TICK_REFERENCE_MASK + .bits() + .min(reference_tick), + ) + }; + DataShredHeader { + parent_offset, + flags, + size: 0u16, + } + }; + let merkle_branch = MerkleBranch::new_zeroed(proof_size); + // Split the data into erasure batches and initialize + // data shreds from chunks of each batch. + let mut shreds = Vec::::new(); + while data.len() >= 2 * chunk_size || data.len() == chunk_size { + let (chunk, rest) = data.split_at(chunk_size); + common_header.fec_set_index = common_header.index; + for shred in chunk.chunks(data_buffer_size) { + let shred = new_shred_data(common_header, data_header, shred, merkle_branch.clone()); + shreds.push(shred); + common_header.index += 1; + } + data = rest; + } + if !data.is_empty() { + // Find the Merkle proof_size and data_buffer_size + // which can embed the remaining data. + let (proof_size, data_buffer_size) = (1u8..32) + .find_map(|proof_size| { + let data_buffer_size = ShredData::capacity(proof_size).ok()?; + let num_data_shreds = (data.len() + data_buffer_size - 1) / data_buffer_size; + let erasure_batch_size = shredder::get_erasure_batch_size(num_data_shreds); + (proof_size == get_proof_size(erasure_batch_size)) + .then(|| (proof_size, data_buffer_size)) + }) + .ok_or(Error::UnknownProofSize)?; + let merkle_branch = MerkleBranch::new_zeroed(proof_size); + common_header.shred_variant = ShredVariant::MerkleData(proof_size); + common_header.fec_set_index = common_header.index; + for shred in data.chunks(data_buffer_size) { + let shred = new_shred_data(common_header, data_header, shred, merkle_branch.clone()); + shreds.push(shred); + common_header.index += 1; + } + if let Some(shred) = shreds.last() { + stats.data_buffer_residual += data_buffer_size - shred.data()?.len(); + } + } + // Only the very last shred may have residual data buffer. + debug_assert!(shreds.iter().rev().skip(1).all(|shred| { + let proof_size = shred.proof_size().unwrap(); + let capacity = ShredData::capacity(proof_size).unwrap(); + shred.data().unwrap().len() == capacity + })); + // Adjust flags for the very last shred. + if let Some(shred) = shreds.last_mut() { + shred.data_header.flags |= if is_last_in_slot { + ShredFlags::LAST_SHRED_IN_SLOT // also implies DATA_COMPLETE_SHRED + } else { + ShredFlags::DATA_COMPLETE_SHRED + }; + } + // Write common and data headers into data shreds' payload buffer. + thread_pool.install(|| { + shreds.par_iter_mut().try_for_each(|shred| { + let mut cursor = Cursor::new(&mut shred.payload[..]); + bincode::serialize_into(&mut cursor, &shred.common_header)?; + bincode::serialize_into(&mut cursor, &shred.data_header) + }) + })?; + stats.gen_data_elapsed += now.elapsed().as_micros() as u64; + stats.record_num_data_shreds(shreds.len()); + let now = Instant::now(); + // Group shreds by their respective erasure-batch. + let shreds: Vec> = shreds + .into_iter() + .group_by(|shred| shred.common_header.fec_set_index) + .into_iter() + .map(|(_, shreds)| shreds.collect()) + .collect(); + // Obtain the shred index for the first coding shred of each batch. + let next_code_index: Vec<_> = shreds + .iter() + .scan(next_code_index, |next_code_index, chunk| { + let out = Some(*next_code_index); + let num_data_shreds = chunk.len(); + let erasure_batch_size = shredder::get_erasure_batch_size(num_data_shreds); + let num_coding_shreds = erasure_batch_size - num_data_shreds; + *next_code_index += num_coding_shreds as u32; + out + }) + .collect(); + // Generate coding shreds, populate merkle branch + // for all shreds and attach signature. + let shreds = thread_pool.install(|| { + shreds + .into_par_iter() + .zip(next_code_index) + .map(|(shreds, next_code_index)| make_erasure_batch(keypair, shreds, next_code_index)) + .collect::, Error>>() + }); + stats.gen_coding_elapsed += now.elapsed().as_micros() as u64; + shreds +} + +// Generates coding shreds from data shreds, populates merke branch for all +// shreds and attaches signature. +fn make_erasure_batch( + keypair: &Keypair, + shreds: Vec, + next_code_index: u32, +) -> Result, Error> { + let num_data_shreds = shreds.len(); + let erasure_batch_size = shredder::get_erasure_batch_size(num_data_shreds); + let num_coding_shreds = erasure_batch_size - num_data_shreds; + let proof_size = get_proof_size(erasure_batch_size); + debug_assert!(shreds + .iter() + .all(|shred| shred.common_header.shred_variant == ShredVariant::MerkleData(proof_size))); + let mut common_header = match shreds.first() { + None => return Ok(Vec::default()), + Some(shred) => shred.common_header, + }; + // Generate erasure codings for encoded shard of data shreds. + let data: Vec<_> = shreds + .iter() + .map(ShredData::erasure_shard_as_slice) + .collect::>()?; + // Shreds should have erasure encoded shard of the same length. + debug_assert_eq!(data.iter().map(|shard| shard.len()).dedup().count(), 1); + let mut parity = vec![vec![0u8; data[0].len()]; num_coding_shreds]; + ReedSolomon::new(num_data_shreds, num_coding_shreds)?.encode_sep(&data, &mut parity[..])?; + let mut shreds: Vec<_> = shreds.into_iter().map(Shred::ShredData).collect(); + // Initialize coding shreds from erasure coding shards. + common_header.index = next_code_index; + common_header.shred_variant = ShredVariant::MerkleCode(proof_size); + let mut coding_header = CodingShredHeader { + num_data_shreds: num_data_shreds as u16, + num_coding_shreds: num_coding_shreds as u16, + position: 0, + }; + let merkle_branch = MerkleBranch::new_zeroed(proof_size); + for code in parity { + let mut payload = vec![0u8; ShredCode::SIZE_OF_PAYLOAD]; + let mut cursor = Cursor::new(&mut payload[..]); + bincode::serialize_into(&mut cursor, &common_header)?; + bincode::serialize_into(&mut cursor, &coding_header)?; + cursor.write_all(&code)?; + let shred = ShredCode { + common_header, + coding_header, + merkle_branch: merkle_branch.clone(), + payload, + }; + shreds.push(Shred::ShredCode(shred)); + common_header.index += 1; + coding_header.position += 1; + } + // Compute Merkle tree for the erasure batch. + let tree = make_merkle_tree( + shreds + .iter() + .map(Shred::merkle_tree_node) + .collect::>()?, + ); + // Sign root of Merkle tree. + let signature = { + let root = tree.last().ok_or(Error::InvalidMerkleProof)?; + let root = &root.as_ref()[..SIZE_OF_MERKLE_ROOT]; + keypair.sign_message(root) + }; + // Populate merkle branch for all shreds and attach signature. + for (index, shred) in shreds.iter_mut().enumerate() { + let merkle_branch = make_merkle_branch(index, erasure_batch_size, &tree) + .ok_or(Error::InvalidMerkleProof)?; + debug_assert_eq!(merkle_branch.proof.len(), usize::from(proof_size)); + shred.set_merkle_branch(merkle_branch)?; + shred.set_signature(signature); + debug_assert!(shred.verify(&keypair.pubkey())); + debug_assert!(shred.sanitize().is_ok()); + // Assert that shred payload is fully populated. + debug_assert_eq!(shred, { + let shred = shred.payload().clone(); + &Shred::from_payload(shred).unwrap() + }); + } + Ok(shreds) +} + #[cfg(test)] mod test { use { @@ -742,6 +1014,7 @@ mod test { itertools::Itertools, matches::assert_matches, rand::{seq::SliceRandom, CryptoRng, Rng}, + rayon::ThreadPoolBuilder, solana_sdk::signature::{Keypair, Signer}, std::{cmp::Ordering, iter::repeat_with}, test_case::test_case, @@ -853,7 +1126,7 @@ mod test { ) { let keypair = Keypair::generate(rng); let num_shreds = num_data_shreds + num_coding_shreds; - let proof_size = (num_shreds as f64).log2().ceil() as u8; + let proof_size = get_proof_size(num_shreds); let capacity = ShredData::capacity(proof_size).unwrap(); let common_header = ShredCommonHeader { signature: Signature::default(), @@ -983,4 +1256,190 @@ mod test { assert_eq!(recovered_shreds, removed_shreds); } } + + #[test] + fn test_get_proof_size() { + assert_eq!(get_proof_size(0), 0); + assert_eq!(get_proof_size(1), 0); + assert_eq!(get_proof_size(2), 1); + assert_eq!(get_proof_size(3), 2); + assert_eq!(get_proof_size(4), 2); + assert_eq!(get_proof_size(5), 3); + assert_eq!(get_proof_size(63), 6); + assert_eq!(get_proof_size(64), 6); + assert_eq!(get_proof_size(65), 7); + assert_eq!(get_proof_size(usize::MAX - 1), 64); + assert_eq!(get_proof_size(usize::MAX), 64); + for proof_size in 1u8..9 { + let max_num_shreds = 1usize << u32::from(proof_size); + let min_num_shreds = (max_num_shreds >> 1) + 1; + for num_shreds in min_num_shreds..=max_num_shreds { + assert_eq!(get_proof_size(num_shreds), proof_size); + } + } + } + + #[test_case(0)] + #[test_case(15600)] + #[test_case(31200)] + #[test_case(46800)] + fn test_make_shreds_from_data(data_size: usize) { + let mut rng = rand::thread_rng(); + let data_size = data_size.saturating_sub(16).max(1); + for data_size in (data_size..data_size + 32).step_by(3) { + run_make_shreds_from_data(&mut rng, data_size); + } + } + + #[test] + fn test_make_shreds_from_data_rand() { + let mut rng = rand::thread_rng(); + for _ in 0..32 { + let data_size = rng.gen_range(0, 31200 * 7); + run_make_shreds_from_data(&mut rng, data_size); + } + } + + fn run_make_shreds_from_data(rng: &mut R, data_size: usize) { + let thread_pool = ThreadPoolBuilder::new().num_threads(2).build().unwrap(); + let keypair = Keypair::new(); + let slot = 149_745_689; + let parent_slot = slot - rng.gen_range(1, 65536); + let shred_version = rng.gen(); + let reference_tick = rng.gen_range(1, 64); + let next_shred_index = rng.gen_range(0, 671); + let next_code_index = rng.gen_range(0, 781); + let mut data = vec![0u8; data_size]; + rng.fill(&mut data[..]); + let shreds = make_shreds_from_data( + &thread_pool, + &keypair, + &data[..], + slot, + parent_slot, + shred_version, + reference_tick, + true, // is_last_in_slot + next_shred_index, + next_code_index, + &mut ProcessShredsStats::default(), + ) + .unwrap(); + let shreds: Vec<_> = shreds.into_iter().flatten().collect(); + let data_shreds: Vec<_> = shreds + .iter() + .filter_map(|shred| match shred { + Shred::ShredCode(_) => None, + Shred::ShredData(shred) => Some(shred), + }) + .collect(); + // Assert that the input data can be recovered from data sherds. + assert_eq!( + data, + data_shreds + .iter() + .flat_map(|shred| shred.data().unwrap()) + .copied() + .collect::>() + ); + // Assert that shreds sanitize and verify. + for shred in &shreds { + assert!(shred.verify(&keypair.pubkey())); + assert_matches!(shred.sanitize(), Ok(())); + let ShredCommonHeader { + signature, + shred_variant, + slot, + index, + version, + fec_set_index: _, + } = *shred.common_header(); + let shred = shred.payload(); + assert_eq!(shred::layout::get_signature(shred), Some(signature)); + assert_eq!( + shred::layout::get_shred_variant(shred).unwrap(), + shred_variant + ); + assert_eq!(shred::layout::get_slot(shred), Some(slot)); + assert_eq!(shred::layout::get_index(shred), Some(index)); + assert_eq!(shred::layout::get_version(shred), Some(version)); + let slice = shred::layout::get_signed_message_range(shred).unwrap(); + let message = shred.get(slice).unwrap(); + assert!(signature.verify(keypair.pubkey().as_ref(), message)); + } + // Verify common, data and coding headers. + let mut num_data_shreds = 0; + let mut num_coding_shreds = 0; + for shred in &shreds { + let common_header = shred.common_header(); + assert_eq!(common_header.slot, slot); + assert_eq!(common_header.version, shred_version); + match shred { + Shred::ShredCode(_) => { + assert_eq!(common_header.index, next_code_index + num_coding_shreds); + assert_matches!(common_header.shred_variant, ShredVariant::MerkleCode(_)); + num_coding_shreds += 1; + } + Shred::ShredData(shred) => { + assert_eq!(common_header.index, next_shred_index + num_data_shreds); + assert_matches!(common_header.shred_variant, ShredVariant::MerkleData(_)); + assert!(common_header.fec_set_index <= common_header.index); + assert_eq!( + Slot::from(shred.data_header.parent_offset), + slot - parent_slot + ); + assert_eq!( + (shred.data_header.flags & ShredFlags::SHRED_TICK_REFERENCE_MASK).bits(), + reference_tick, + ); + let shred = shred.payload(); + assert_eq!( + shred::layout::get_parent_offset(shred), + Some(u16::try_from(slot - parent_slot).unwrap()), + ); + assert_eq!( + shred::layout::get_reference_tick(shred).unwrap(), + reference_tick + ); + num_data_shreds += 1; + } + } + } + assert!(num_coding_shreds >= num_data_shreds); + // Assert that only the last shred is LAST_SHRED_IN_SLOT. + assert_eq!( + data_shreds + .iter() + .filter(|shred| shred + .data_header + .flags + .contains(ShredFlags::LAST_SHRED_IN_SLOT)) + .count(), + 1 + ); + assert!(data_shreds + .last() + .unwrap() + .data_header + .flags + .contains(ShredFlags::LAST_SHRED_IN_SLOT)); + // Assert that data shreds can be recovered from coding shreds. + let recovered_data_shreds: Vec<_> = shreds + .iter() + .filter_map(|shred| match shred { + Shred::ShredCode(_) => Some(shred.clone()), + Shred::ShredData(_) => None, + }) + .group_by(|shred| shred.common_header().fec_set_index) + .into_iter() + .flat_map(|(_, shreds)| recover(shreds.collect()).unwrap()) + .collect(); + assert_eq!(recovered_data_shreds.len(), data_shreds.len()); + for (shred, other) in recovered_data_shreds.into_iter().zip(data_shreds) { + match shred { + Shred::ShredCode(_) => panic!("Invalid shred type!"), + Shred::ShredData(shred) => assert_eq!(shred, *other), + } + } + } } diff --git a/ledger/src/shredder.rs b/ledger/src/shredder.rs index 1b1db2f9775bd4..c34742df81787b 100644 --- a/ledger/src/shredder.rs +++ b/ledger/src/shredder.rs @@ -1,6 +1,6 @@ use { crate::shred::{ - Error, ProcessShredsStats, Shred, ShredData, ShredFlags, DATA_SHREDS_PER_FEC_BLOCK, + self, Error, ProcessShredsStats, Shred, ShredData, ShredFlags, DATA_SHREDS_PER_FEC_BLOCK, }, itertools::Itertools, lazy_static::lazy_static, @@ -69,11 +69,30 @@ impl Shredder { is_last_in_slot: bool, next_shred_index: u32, next_code_index: u32, + merkle_variant: bool, stats: &mut ProcessShredsStats, ) -> ( Vec, // data shreds Vec, // coding shreds ) { + if merkle_variant { + return shred::make_merkle_shreds_from_entries( + &PAR_THREAD_POOL, + keypair, + entries, + self.slot, + self.parent_slot, + self.version, + self.reference_tick, + is_last_in_slot, + next_shred_index, + next_code_index, + stats, + ) + .unwrap() + .into_iter() + .partition(Shred::is_data); + } let data_shreds = self.entries_to_data_shreds(keypair, entries, is_last_in_slot, next_shred_index, stats); let coding_shreds = @@ -347,7 +366,7 @@ impl Shredder { } /// Maps number of data shreds in each batch to the erasure batch size. -fn get_erasure_batch_size(num_data_shreds: usize) -> usize { +pub(crate) fn get_erasure_batch_size(num_data_shreds: usize) -> usize { ERASURE_BATCH_SIZE .get(num_data_shreds) .copied() @@ -444,6 +463,7 @@ mod tests { true, // is_last_in_slot start_index, // next_shred_index start_index, // next_code_index + true, // merkle_variant &mut ProcessShredsStats::default(), ); let next_index = data_shreds.last().unwrap().index() + 1; @@ -521,6 +541,7 @@ mod tests { true, // is_last_in_slot 0, // next_shred_index 0, // next_code_index + true, // merkle_variant &mut ProcessShredsStats::default(), ); let deserialized_shred = @@ -551,6 +572,7 @@ mod tests { true, // is_last_in_slot 0, // next_shred_index 0, // next_code_index + true, // merkle_variant &mut ProcessShredsStats::default(), ); data_shreds.iter().for_each(|s| { @@ -586,6 +608,7 @@ mod tests { true, // is_last_in_slot 0, // next_shred_index 0, // next_code_index + true, // merkle_variant &mut ProcessShredsStats::default(), ); data_shreds.iter().for_each(|s| { @@ -630,6 +653,7 @@ mod tests { true, // is_last_in_slot 0, // next_shred_index 0, // next_code_index + true, // merkle_variant &mut ProcessShredsStats::default(), ); for (i, s) in data_shreds.iter().enumerate() { @@ -682,8 +706,9 @@ mod tests { &keypair, &entries, is_last_in_slot, - 0, // next_shred_index - 0, // next_code_index + 0, // next_shred_index + 0, // next_code_index + false, // merkle_variant &mut ProcessShredsStats::default(), ); let num_coding_shreds = coding_shreds.len(); @@ -809,9 +834,10 @@ mod tests { let (data_shreds, coding_shreds) = shredder.entries_to_shreds( &keypair, &entries, - true, // is_last_in_slot - 25, // next_shred_index, - 25, // next_code_index + true, // is_last_in_slot + 25, // next_shred_index, + 25, // next_code_index + false, // merkle_variant &mut ProcessShredsStats::default(), ); // We should have 10 shreds now @@ -903,6 +929,7 @@ mod tests { is_last_in_slot, next_shred_index, next_shred_index, // next_code_index + false, // merkle_variant &mut ProcessShredsStats::default(), ); let num_data_shreds = data_shreds.len(); @@ -963,6 +990,7 @@ mod tests { true, // is_last_in_slot 0, // next_shred_index 0, // next_code_index + true, // merkle_variant &mut ProcessShredsStats::default(), ); assert!(!data_shreds @@ -995,6 +1023,7 @@ mod tests { true, // is_last_in_slot start_index, // next_shred_index start_index, // next_code_index + true, // merkle_variant &mut ProcessShredsStats::default(), ); const MIN_CHUNK_SIZE: usize = DATA_SHREDS_PER_FEC_BLOCK; diff --git a/ledger/tests/blockstore.rs b/ledger/tests/blockstore.rs index b2268ee3a2d84e..d5af08671fcdbe 100644 --- a/ledger/tests/blockstore.rs +++ b/ledger/tests/blockstore.rs @@ -21,7 +21,14 @@ fn test_multiple_threads_insert_shred() { let threads: Vec<_> = (0..num_threads) .map(|i| { let entries = entry::create_ticks(1, 0, Hash::default()); - let shreds = blockstore::entries_to_test_shreds(&entries, i + 1, 0, false, 0); + let shreds = blockstore::entries_to_test_shreds( + &entries, + i + 1, + 0, + false, + 0, + true, // merkle_variant + ); let blockstore_ = blockstore.clone(); Builder::new() .name("blockstore-writer".to_string()) diff --git a/ledger/tests/shred.rs b/ledger/tests/shred.rs index 23a1cf83f967f7..c3caaf1b4b98c0 100644 --- a/ledger/tests/shred.rs +++ b/ledger/tests/shred.rs @@ -51,9 +51,10 @@ fn test_multi_fec_block_coding() { let (data_shreds, coding_shreds) = shredder.entries_to_shreds( &keypair, &entries, - true, // is_last_in_slot - 0, // next_shred_index - 0, // next_code_index + true, // is_last_in_slot + 0, // next_shred_index + 0, // next_code_index + false, // merkle_variant &mut ProcessShredsStats::default(), ); let next_index = data_shreds.last().unwrap().index() + 1; @@ -226,6 +227,7 @@ fn setup_different_sized_fec_blocks( is_last, next_shred_index, next_code_index, + false, // merkle_variant &mut ProcessShredsStats::default(), ); for shred in &data_shreds { diff --git a/rpc/src/rpc.rs b/rpc/src/rpc.rs index 7c4a34ded4d0e7..99c7b54c551453 100644 --- a/rpc/src/rpc.rs +++ b/rpc/src/rpc.rs @@ -4519,8 +4519,14 @@ pub fn populate_blockstore_for_tests( ) { let slot = bank.slot(); let parent_slot = bank.parent_slot(); - let shreds = - solana_ledger::blockstore::entries_to_test_shreds(&entries, slot, parent_slot, true, 0); + let shreds = solana_ledger::blockstore::entries_to_test_shreds( + &entries, + slot, + parent_slot, + true, + 0, + true, // merkle_variant + ); blockstore.insert_shreds(shreds, None, false).unwrap(); blockstore.set_roots(std::iter::once(&slot)).unwrap(); From 810745fccbd31c204c2bc4fb98cabea69d3790c0 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Sat, 24 Sep 2022 05:55:23 +0000 Subject: [PATCH 142/465] docs: fix wrong args in 'solana program set-buffer-authority' (backport #27817) (#28046) docs: fix wrong args in 'solana program set-buffer-authority' (#27817) fix wrong args in 'solana program set-buffer-authority' (cherry picked from commit aae07807cba4743d72e0448a725f1719583264f2) Co-authored-by: Yihau Chen --- docs/src/cli/deploy-a-program.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/src/cli/deploy-a-program.md b/docs/src/cli/deploy-a-program.md index 0c6b693c0e0680..22ac61c7ec9ab5 100644 --- a/docs/src/cli/deploy-a-program.md +++ b/docs/src/cli/deploy-a-program.md @@ -284,7 +284,7 @@ solana program write-buffer Buffer accounts support authorities like program accounts: ```bash -solana program set-buffer-authority --new-upgrade-authority +solana program set-buffer-authority --new-buffer-authority ``` One exception is that buffer accounts cannot be marked immutable like program From 1a01f33a2a1c19484bc2db9a6957878caabcc5c5 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Sat, 24 Sep 2022 15:17:35 +0000 Subject: [PATCH 143/465] patches clippy errors from new rust nightly release (backport #28028) (#28035) * patches clippy errors from new rust nightly release (#28028) (cherry picked from commit 9ee53e594dd9cc3180dd037d7e296ed72ee34c85) # Conflicts: # core/src/repair_weighted_traversal.rs # runtime/src/accounts_index.rs * removes mergify merge conflicts Co-authored-by: behzad nouri --- client/src/nonblocking/tpu_client.rs | 2 +- core/benches/cluster_nodes.rs | 2 +- core/src/banking_stage.rs | 4 ++-- core/src/repair_service.rs | 9 +-------- core/src/replay_stage.rs | 5 +---- core/src/sigverify_stage.rs | 10 +++------- genesis/src/genesis_accounts.rs | 4 ++-- genesis/src/main.rs | 4 ++-- genesis/src/stakes.rs | 4 ++-- ledger/src/slot_stats.rs | 6 +++--- log-analyzer/src/main.rs | 4 ++-- runtime/src/accounts_index.rs | 4 ++-- runtime/src/bank.rs | 2 +- runtime/src/cost_tracker.rs | 21 ++++++++------------- runtime/src/execute_cost_table.rs | 2 +- runtime/src/expected_rent_collection.rs | 4 ++-- runtime/src/in_mem_accounts_index.rs | 2 +- runtime/src/status_cache.rs | 4 +--- sdk/src/signer/signers.rs | 1 - storage-bigtable/src/lib.rs | 6 +----- 20 files changed, 37 insertions(+), 63 deletions(-) diff --git a/client/src/nonblocking/tpu_client.rs b/client/src/nonblocking/tpu_client.rs index deb34e97114b56..27ed331334141c 100644 --- a/client/src/nonblocking/tpu_client.rs +++ b/client/src/nonblocking/tpu_client.rs @@ -342,7 +342,7 @@ impl TpuClient { } } - transactions = pending_transactions.into_iter().map(|(_k, v)| v).collect(); + transactions = pending_transactions.into_values().collect(); progress_bar.println(format!( "Blockhash expired. {} retries remaining", expired_blockhash_retries diff --git a/core/benches/cluster_nodes.rs b/core/benches/cluster_nodes.rs index 10900c0bea54b3..2e359193885e26 100644 --- a/core/benches/cluster_nodes.rs +++ b/core/benches/cluster_nodes.rs @@ -36,7 +36,7 @@ fn get_retransmit_peers_deterministic( root_bank: &Bank, num_simulated_shreds: usize, ) { - let parent_offset = if slot == 0 { 0 } else { 1 }; + let parent_offset = u16::from(slot != 0); for i in 0..num_simulated_shreds { let index = i as u32; let shred = Shred::new_from_data( diff --git a/core/src/banking_stage.rs b/core/src/banking_stage.rs index 074be1b83261ec..a748ea701cbfec 100644 --- a/core/src/banking_stage.rs +++ b/core/src/banking_stage.rs @@ -1647,8 +1647,8 @@ impl BankingStage { let (units, times): (Vec<_>, Vec<_>) = execute_timings .details .per_program_timings - .iter() - .map(|(_program_id, program_timings)| { + .values() + .map(|program_timings| { ( program_timings.accumulated_units, program_timings.accumulated_us, diff --git a/core/src/repair_service.rs b/core/src/repair_service.rs index 6303ee323d1f0b..6e5047e3cd114d 100644 --- a/core/src/repair_service.rs +++ b/core/src/repair_service.rs @@ -393,14 +393,7 @@ impl RepairService { .chain(repair_stats.highest_shred.slot_pubkeys.iter()) .chain(repair_stats.orphan.slot_pubkeys.iter()) .map(|(slot, slot_repairs)| { - ( - slot, - slot_repairs - .pubkey_repairs - .iter() - .map(|(_key, count)| count) - .sum::(), - ) + (slot, slot_repairs.pubkey_repairs.values().sum::()) }) .collect(); info!("repair_stats: {:?}", slot_to_count); diff --git a/core/src/replay_stage.rs b/core/src/replay_stage.rs index da322cd311f4fb..880624ed182c69 100644 --- a/core/src/replay_stage.rs +++ b/core/src/replay_stage.rs @@ -3866,10 +3866,7 @@ pub(crate) mod tests { vec![root, root + 1] ); assert_eq!( - epoch_slots_frozen_slots - .into_iter() - .map(|(slot, _hash)| slot) - .collect::>(), + epoch_slots_frozen_slots.into_keys().collect::>(), vec![root, root + 1] ); } diff --git a/core/src/sigverify_stage.rs b/core/src/sigverify_stage.rs index 30174dc986888b..15fa4fc7cd903c 100644 --- a/core/src/sigverify_stage.rs +++ b/core/src/sigverify_stage.rs @@ -472,13 +472,9 @@ mod tests { fn count_non_discard(packet_batches: &[PacketBatch]) -> usize { packet_batches .iter() - .map(|batch| { - batch - .iter() - .map(|p| if p.meta.discard() { 0 } else { 1 }) - .sum::() - }) - .sum::() + .flatten() + .filter(|p| !p.meta.discard()) + .count() } #[test] diff --git a/genesis/src/genesis_accounts.rs b/genesis/src/genesis_accounts.rs index 1f540d4c6f72b6..0704985913838f 100644 --- a/genesis/src/genesis_accounts.rs +++ b/genesis/src/genesis_accounts.rs @@ -276,8 +276,8 @@ mod tests { let lamports = genesis_config .accounts - .iter() - .map(|(_, account)| account.lamports) + .values() + .map(|account| account.lamports) .sum::(); assert_eq!(500_000_000 * LAMPORTS_PER_SOL, lamports); diff --git a/genesis/src/main.rs b/genesis/src/main.rs index 01989e331b9892..d88516c11003c8 100644 --- a/genesis/src/main.rs +++ b/genesis/src/main.rs @@ -580,8 +580,8 @@ fn main() -> Result<(), Box> { let issued_lamports = genesis_config .accounts - .iter() - .map(|(_key, account)| account.lamports) + .values() + .map(|account| account.lamports) .sum::(); add_genesis_accounts(&mut genesis_config, issued_lamports - faucet_lamports); diff --git a/genesis/src/stakes.rs b/genesis/src/stakes.rs index a3b645ed3edc54..4fbb6d34d68daf 100644 --- a/genesis/src/stakes.rs +++ b/genesis/src/stakes.rs @@ -183,8 +183,8 @@ mod tests { assert_eq!( genesis_config .accounts - .iter() - .map(|(_pubkey, account)| account.lamports) + .values() + .map(|account| account.lamports) .sum::(), total_lamports, ); diff --git a/ledger/src/slot_stats.rs b/ledger/src/slot_stats.rs index 0f3a72defd8e43..f144eb245d4de6 100644 --- a/ledger/src/slot_stats.rs +++ b/ledger/src/slot_stats.rs @@ -39,10 +39,10 @@ pub struct SlotStats { impl SlotStats { pub fn get_min_index_count(&self) -> usize { self.turbine_fec_set_index_counts - .iter() - .map(|(_, cnt)| *cnt) + .values() .min() - .unwrap_or(0) + .copied() + .unwrap_or_default() } fn report(&self, slot: Slot) { diff --git a/log-analyzer/src/main.rs b/log-analyzer/src/main.rs index c2bd11aa072803..d28bdf597324f4 100644 --- a/log-analyzer/src/main.rs +++ b/log-analyzer/src/main.rs @@ -129,8 +129,8 @@ fn process_iftop_logs(matches: &ArgMatches) { } }); let output: Vec = unique_latest_logs - .into_iter() - .map(|(_, l)| { + .into_values() + .map(|l| { if map_list.is_empty() { l } else { diff --git a/runtime/src/accounts_index.rs b/runtime/src/accounts_index.rs index 3cd88ba07a1980..e3618d7494f713 100644 --- a/runtime/src/accounts_index.rs +++ b/runtime/src/accounts_index.rs @@ -412,7 +412,7 @@ impl PreAllocatedAccountMapEntry { account_info: T, storage: &Arc>, ) -> AccountMapEntry { - let ref_count = if account_info.is_cached() { 0 } else { 1 }; + let ref_count = u64::from(!account_info.is_cached()); let meta = AccountMapEntryMeta::new_dirty(storage); Arc::new(AccountMapEntryInner::new( vec![(slot, account_info)], @@ -2587,7 +2587,7 @@ pub mod tests { // verify the added entry matches expected { let entry = index.get_account_read_entry(&key).unwrap(); - assert_eq!(entry.ref_count(), if is_cached { 0 } else { 1 }); + assert_eq!(entry.ref_count(), u64::from(!is_cached)); let expected = vec![(slot0, account_infos[0])]; assert_eq!(entry.slot_list().to_vec(), expected); let new_entry: AccountMapEntry<_> = PreAllocatedAccountMapEntry::new( diff --git a/runtime/src/bank.rs b/runtime/src/bank.rs index 66aa4a14276646..e2d048c2173120 100644 --- a/runtime/src/bank.rs +++ b/runtime/src/bank.rs @@ -16930,7 +16930,7 @@ pub(crate) mod tests { load_vote_and_stake_accounts(&bank).vote_with_stake_delegations_map; assert_eq!( vote_and_stake_accounts.len(), - if check_owner_change { 0 } else { 1 } + usize::from(!check_owner_change) ); } diff --git a/runtime/src/cost_tracker.rs b/runtime/src/cost_tracker.rs index 468730bcb54703..518ac8fb759df0 100644 --- a/runtime/src/cost_tracker.rs +++ b/runtime/src/cost_tracker.rs @@ -164,16 +164,11 @@ impl CostTracker { } fn find_costliest_account(&self) -> (Pubkey, u64) { - let mut costliest_account = Pubkey::default(); - let mut costliest_account_cost = 0; - for (key, cost) in self.cost_by_writable_accounts.iter() { - if *cost > costliest_account_cost { - costliest_account = *key; - costliest_account_cost = *cost; - } - } - - (costliest_account, costliest_account_cost) + self.cost_by_writable_accounts + .iter() + .max_by_key(|(_, &cost)| cost) + .map(|(&pubkey, &cost)| (pubkey, cost)) + .unwrap_or_default() } fn would_fit(&self, tx_cost: &TransactionCost) -> Result<(), CostTrackerError> { @@ -315,9 +310,9 @@ impl CostTracker { /// count number of none-zero CU accounts fn number_of_accounts(&self) -> usize { self.cost_by_writable_accounts - .iter() - .map(|(_key, units)| usize::from(*units > 0)) - .sum() + .values() + .filter(|units| **units > 0) + .count() } } diff --git a/runtime/src/execute_cost_table.rs b/runtime/src/execute_cost_table.rs index 922d31c1c0ed7e..0fc76974a204a2 100644 --- a/runtime/src/execute_cost_table.rs +++ b/runtime/src/execute_cost_table.rs @@ -54,7 +54,7 @@ impl ExecuteCostTable { if self.table.is_empty() { self.get_default_compute_unit_limit() } else { - self.table.iter().map(|(_, value)| value).sum::() / self.get_count() as u64 + self.table.values().sum::() / self.get_count() as u64 } } diff --git a/runtime/src/expected_rent_collection.rs b/runtime/src/expected_rent_collection.rs index 0aeb5471cb0794..4e2c45b839bb84 100644 --- a/runtime/src/expected_rent_collection.rs +++ b/runtime/src/expected_rent_collection.rs @@ -866,7 +866,7 @@ pub mod tests { ); let partition_index_passed_pubkey = partition_from_pubkey <= partition_index; let expected_rent_epoch = - rent_collector.epoch - if partition_index_passed_pubkey { 0 } else { 1 }; + rent_collector.epoch - u64::from(!partition_index_passed_pubkey); let expected_rent_collection_slot_max_epoch = first_slot_in_max_epoch + partition_from_pubkey - if partition_index_passed_pubkey { @@ -1090,7 +1090,7 @@ pub mod tests { partition_index_from_max_slot, first_slot_in_max_epoch, expected_rent_collection_slot_max_epoch, - rent_epoch: rent_collector.epoch - if hit_this_epoch { 0 } else {1}, + rent_epoch: rent_collector.epoch - u64::from(!hit_this_epoch), }), "partition_index_from_max_slot: {}, epoch: {}, hit_this_epoch: {}, skipped_slot: {}", partition_index_from_max_slot, diff --git a/runtime/src/in_mem_accounts_index.rs b/runtime/src/in_mem_accounts_index.rs index a4bd3d5f7d962f..9796ac9be667d8 100644 --- a/runtime/src/in_mem_accounts_index.rs +++ b/runtime/src/in_mem_accounts_index.rs @@ -1116,7 +1116,7 @@ impl InMemAccountsIndex { let mut count = 0; insert.into_iter().for_each(|(slot, k, v)| { let entry = (slot, v); - let new_ref_count = if v.is_cached() { 0 } else { 1 }; + let new_ref_count = u64::from(!v.is_cached()); disk.update(&k, |current| { match current { Some((current_slot_list, mut ref_count)) => { diff --git a/runtime/src/status_cache.rs b/runtime/src/status_cache.rs index 0458ddfc832b25..bb7cfc98db5c99 100644 --- a/runtime/src/status_cache.rs +++ b/runtime/src/status_cache.rs @@ -154,9 +154,7 @@ impl StatusCache { key: K, ancestors: &Ancestors, ) -> Option<(Slot, T)> { - let mut keys = vec![]; - let mut val: Vec<_> = self.cache.iter().map(|(k, _)| *k).collect(); - keys.append(&mut val); + let keys: Vec<_> = self.cache.keys().copied().collect(); for blockhash in keys.iter() { trace!("get_status_any_blockhash: trying {}", blockhash); diff --git a/sdk/src/signer/signers.rs b/sdk/src/signer/signers.rs index bd25c0d6194337..eaf2fce0e394f6 100644 --- a/sdk/src/signer/signers.rs +++ b/sdk/src/signer/signers.rs @@ -170,7 +170,6 @@ mod tests { } #[test] - #[allow(clippy::blacklisted_name)] fn test_dyn_keypairs_by_ref_compile() { let foo = Foo {}; let bar = Bar {}; diff --git a/storage-bigtable/src/lib.rs b/storage-bigtable/src/lib.rs index b644509b715793..fa96d3a102bc32 100644 --- a/storage-bigtable/src/lib.rs +++ b/storage-bigtable/src/lib.rs @@ -975,11 +975,7 @@ impl LedgerStorage { .collect(); let tx_deletion_rows = if !expected_tx_infos.is_empty() { - let signatures = expected_tx_infos - .iter() - .map(|(signature, _info)| signature) - .cloned() - .collect::>(); + let signatures = expected_tx_infos.keys().cloned().collect::>(); let fetched_tx_infos: HashMap> = self.connection .get_bincode_cells_with_retry::("tx", &signatures) From 24f101d12ec34525f8ae966449abbf92151e9288 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Sat, 24 Sep 2022 19:23:57 +0000 Subject: [PATCH 144/465] updates reed-solomon-erasure crate version to 6.0.0 (backport #28033) (#28048) * updates reed-solomon-erasure crate version to 6.0.0 (#28033) Need to pick up: https://github.com/rust-rse/reed-solomon-erasure/pull/104 in order to unblock: https://github.com/solana-labs/solana/pull/27510 (cherry picked from commit f02fe9c7e7aca59a3406a7b06b799aaa75d09122) # Conflicts: # ledger/Cargo.toml * removes mergify merge conflicts Co-authored-by: behzad nouri --- Cargo.lock | 11 ++++++----- ledger/Cargo.toml | 2 +- programs/bpf/Cargo.lock | 11 ++++++----- 3 files changed, 13 insertions(+), 11 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 17e24f6f19ab24..a59f906bc034e5 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2514,11 +2514,11 @@ dependencies = [ [[package]] name = "lru" -version = "0.7.7" +version = "0.7.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c84e6fe5655adc6ce00787cf7dcaf8dc4f998a0565d23eafc207a8b08ca3349a" +checksum = "e999beba7b6e8345721bd280141ed958096a2e4abdf74f67ff4ce49b4b54e47a" dependencies = [ - "hashbrown 0.11.2", + "hashbrown 0.12.3", ] [[package]] @@ -3810,13 +3810,14 @@ dependencies = [ [[package]] name = "reed-solomon-erasure" -version = "5.0.3" +version = "6.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2fe31452b684b8b33f65f8730c8b8812c3f5a0bb8a096934717edb1ac488641" +checksum = "7263373d500d4d4f505d43a2a662d475a894aa94503a1ee28e9188b5f3960d4f" dependencies = [ "cc", "libc", "libm", + "lru", "parking_lot 0.11.2", "smallvec", "spin 0.9.2", diff --git a/ledger/Cargo.toml b/ledger/Cargo.toml index fb1b1c1a7ab805..fd93fdcbcc1a0d 100644 --- a/ledger/Cargo.toml +++ b/ledger/Cargo.toml @@ -30,7 +30,7 @@ prost = "0.11.0" rand = "0.7.0" rand_chacha = "0.2.2" rayon = "1.5.3" -reed-solomon-erasure = { version = "5.0.3", features = ["simd-accel"] } +reed-solomon-erasure = { version = "6.0.0", features = ["simd-accel"] } serde = "1.0.138" serde_bytes = "0.11.6" sha2 = "0.10.2" diff --git a/programs/bpf/Cargo.lock b/programs/bpf/Cargo.lock index 25e64c33da0b93..8d64ea892a92c2 100644 --- a/programs/bpf/Cargo.lock +++ b/programs/bpf/Cargo.lock @@ -2318,11 +2318,11 @@ dependencies = [ [[package]] name = "lru" -version = "0.7.7" +version = "0.7.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c84e6fe5655adc6ce00787cf7dcaf8dc4f998a0565d23eafc207a8b08ca3349a" +checksum = "e999beba7b6e8345721bd280141ed958096a2e4abdf74f67ff4ce49b4b54e47a" dependencies = [ - "hashbrown 0.11.2", + "hashbrown 0.12.3", ] [[package]] @@ -3481,13 +3481,14 @@ dependencies = [ [[package]] name = "reed-solomon-erasure" -version = "5.0.3" +version = "6.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2fe31452b684b8b33f65f8730c8b8812c3f5a0bb8a096934717edb1ac488641" +checksum = "7263373d500d4d4f505d43a2a662d475a894aa94503a1ee28e9188b5f3960d4f" dependencies = [ "cc", "libc", "libm", + "lru", "parking_lot 0.11.2", "smallvec", "spin 0.9.3", From 25e6d7f97520ff64e621fca60623e94f571a158f Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Sat, 24 Sep 2022 19:47:38 +0000 Subject: [PATCH 145/465] Minor shred constant cleanup (backport #27472) (#28050) Minor shred constant cleanup (#27472) * Minor shred constant cleanup to eliminate magic number (cherry picked from commit dfdb422fb1e348ad9e14e07fe0259780907ec95c) Co-authored-by: Brennan Watt --- ledger/src/shred/shred_code.rs | 19 +++++++++++-------- ledger/src/shredder.rs | 2 +- 2 files changed, 12 insertions(+), 9 deletions(-) diff --git a/ledger/src/shred/shred_code.rs b/ledger/src/shred/shred_code.rs index 538bb25427f38f..414e958cd0357b 100644 --- a/ledger/src/shred/shred_code.rs +++ b/ledger/src/shred/shred_code.rs @@ -1,18 +1,21 @@ use { - crate::shred::{ - common::dispatch, - legacy, merkle, - traits::{Shred, ShredCode as ShredCodeTrait}, - CodingShredHeader, Error, ShredCommonHeader, ShredType, DATA_SHREDS_PER_FEC_BLOCK, - MAX_DATA_SHREDS_PER_SLOT, SIZE_OF_NONCE, + crate::{ + shred::{ + common::dispatch, + legacy, merkle, + traits::{Shred, ShredCode as ShredCodeTrait}, + CodingShredHeader, Error, ShredCommonHeader, ShredType, DATA_SHREDS_PER_FEC_BLOCK, + MAX_DATA_SHREDS_PER_SLOT, SIZE_OF_NONCE, + }, + shredder::ERASURE_BATCH_SIZE, }, solana_sdk::{clock::Slot, packet::PACKET_DATA_SIZE, signature::Signature}, static_assertions::const_assert_eq, }; -// See ERASURE_BATCH_SIZE. const_assert_eq!(MAX_CODE_SHREDS_PER_SLOT, 32_768 * 17); -pub(crate) const MAX_CODE_SHREDS_PER_SLOT: usize = MAX_DATA_SHREDS_PER_SLOT * 17; +pub(crate) const MAX_CODE_SHREDS_PER_SLOT: usize = + MAX_DATA_SHREDS_PER_SLOT * (ERASURE_BATCH_SIZE[1] - 1); const_assert_eq!(ShredCode::SIZE_OF_PAYLOAD, 1228); diff --git a/ledger/src/shredder.rs b/ledger/src/shredder.rs index c34742df81787b..feebcdcb468b65 100644 --- a/ledger/src/shredder.rs +++ b/ledger/src/shredder.rs @@ -26,7 +26,7 @@ lazy_static! { // Maps number of data shreds to the optimal erasure batch size which has the // same recovery probabilities as a 32:32 erasure batch. -const ERASURE_BATCH_SIZE: [usize; 33] = [ +pub(crate) const ERASURE_BATCH_SIZE: [usize; 33] = [ 0, 18, 20, 22, 23, 25, 27, 28, 30, // 8 32, 33, 35, 36, 38, 39, 41, 42, // 16 43, 45, 46, 48, 49, 51, 52, 53, // 24 From cb106b05a0d7020938a8871a048a3a20d0f58f0c Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Sat, 24 Sep 2022 19:59:37 +0000 Subject: [PATCH 146/465] removes redundant shred.sanitize() from blockstore (backport #28016) (#28049) removes redundant shred.sanitize() from blockstore (#28016) Shreds received from other nodes over the socket are sanitized when the payload is deserialized: https://github.com/solana-labs/solana/blob/315707504/ledger/src/shred/legacy.rs#L137 https://github.com/solana-labs/solana/blob/315707504/ledger/src/shred/legacy.rs#L77 https://github.com/solana-labs/solana/blob/315707504/ledger/src/shred/merkle.rs#L355 https://github.com/solana-labs/solana/blob/315707504/ledger/src/shred/merkle.rs#L439 Similarly, shreds recovered from erasure codes are also sanitized at deserialization: https://github.com/solana-labs/solana/blob/f02fe9c7e/ledger/src/shredder.rs#L330 or explicitly so for Merkle shreds: https://github.com/solana-labs/solana/blob/f02fe9c7e/ledger/src/shred/merkle.rs#L753 Shreds generated locally by the node itself during its leader slots do not need to be sanitized. So sanitizing shreds in blockstore is redundant and wasteful. In particular this becomes more wasteful with Merkle shreds because sanitizing shreds would require verifying Merkle proof. As such the commit removes redundant shred.sanitize() from blockstore. (cherry picked from commit 45e26574f3fdb89ffd2934ff5678e1f4424778d5) Co-authored-by: behzad nouri --- ledger/Cargo.toml | 2 +- ledger/src/blockstore.rs | 37 ++++++------------------------------- ledger/src/shred/merkle.rs | 3 ++- programs/bpf/Cargo.lock | 1 + 4 files changed, 10 insertions(+), 33 deletions(-) diff --git a/ledger/Cargo.toml b/ledger/Cargo.toml index fd93fdcbcc1a0d..70f7926c2c68e4 100644 --- a/ledger/Cargo.toml +++ b/ledger/Cargo.toml @@ -10,6 +10,7 @@ documentation = "https://docs.rs/solana-ledger" edition = "2021" [dependencies] +assert_matches = "1.5.0" bincode = "1.3.3" bitflags = "1.3.1" byteorder = "1.4.3" @@ -68,7 +69,6 @@ default-features = false features = ["lz4"] [dev-dependencies] -assert_matches = "1.5.0" bs58 = "0.4.0" matches = "0.1.9" solana-account-decoder = { path = "../account-decoder", version = "=1.14.3" } diff --git a/ledger/src/blockstore.rs b/ledger/src/blockstore.rs index 70b11d7193b399..a5fff9671aae1f 100644 --- a/ledger/src/blockstore.rs +++ b/ledger/src/blockstore.rs @@ -22,6 +22,7 @@ use { }, slot_stats::{ShredSource, SlotsStats}, }, + assert_matches::debug_assert_matches, bincode::deserialize, crossbeam_channel::{bounded, Receiver, Sender, TrySendError}, dashmap::DashSet, @@ -1359,7 +1360,8 @@ impl Blockstore { } fn should_insert_coding_shred(shred: &Shred, last_root: &RwLock) -> bool { - shred.is_code() && shred.sanitize().is_ok() && shred.slot() > *last_root.read().unwrap() + debug_assert_matches!(shred.sanitize(), Ok(())); + shred.is_code() && shred.slot() > *last_root.read().unwrap() } fn insert_coding_shred( @@ -1373,7 +1375,8 @@ impl Blockstore { // Assert guaranteed by integrity checks on the shred that happen before // `insert_coding_shred` is called - assert!(shred.is_code() && shred.sanitize().is_ok()); + debug_assert_matches!(shred.sanitize(), Ok(())); + assert!(shred.is_code()); // Commit step: commit all changes to the mutable structures at once, or none at all. // We don't want only a subset of these changes going through. @@ -1422,23 +1425,7 @@ impl Blockstore { } else { false }; - if let Err(err) = shred.sanitize() { - let leader_pubkey = leader_schedule - .and_then(|leader_schedule| leader_schedule.slot_leader_at(slot, None)); - - datapoint_error!( - "blockstore_error", - ( - "error", - format!( - "Leader {:?}, slot {}: received invalid shred: {:?}", - leader_pubkey, slot, err, - ), - String - ) - ); - return false; - } + debug_assert_matches!(shred.sanitize(), Ok(())); // Check that we do not receive shred_index >= than the last_index // for the slot let last_index = slot_meta.last_index; @@ -6269,18 +6256,6 @@ pub mod tests { &last_root )); - // Trying to insert a shred with index < position should fail - { - let mut coding_shred = coding_shred.clone(); - let index = coding_shred.index() - coding_shred.fec_set_index() - 1; - coding_shred.set_index(index as u32); - - assert!(!Blockstore::should_insert_coding_shred( - &coding_shred, - &last_root - )); - } - // Trying to insert value into slot <= than last root should fail { let mut coding_shred = coding_shred.clone(); diff --git a/ledger/src/shred/merkle.rs b/ledger/src/shred/merkle.rs index 4e3c0fb9a65d7a..06db998b4e9b00 100644 --- a/ledger/src/shred/merkle.rs +++ b/ledger/src/shred/merkle.rs @@ -15,6 +15,7 @@ use { }, shredder::{self, ReedSolomon}, }, + assert_matches::debug_assert_matches, itertools::Itertools, rayon::{prelude::*, ThreadPool}, reed_solomon_erasure::Error::{InvalidIndex, TooFewParityShards, TooFewShards}, @@ -996,7 +997,7 @@ fn make_erasure_batch( shred.set_merkle_branch(merkle_branch)?; shred.set_signature(signature); debug_assert!(shred.verify(&keypair.pubkey())); - debug_assert!(shred.sanitize().is_ok()); + debug_assert_matches!(shred.sanitize(), Ok(())); // Assert that shred payload is fully populated. debug_assert_eq!(shred, { let shred = shred.payload().clone(); diff --git a/programs/bpf/Cargo.lock b/programs/bpf/Cargo.lock index 8d64ea892a92c2..471c187c75a342 100644 --- a/programs/bpf/Cargo.lock +++ b/programs/bpf/Cargo.lock @@ -4979,6 +4979,7 @@ dependencies = [ name = "solana-ledger" version = "1.14.3" dependencies = [ + "assert_matches", "bincode", "bitflags", "byteorder 1.4.3", From 56b4c5614986a521c4226323bc091ece65accb35 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Sat, 24 Sep 2022 21:03:13 +0000 Subject: [PATCH 147/465] allow unsigned repair requests (backport #27910) (#28027) * allow unsigned repair requests (#27910) (cherry picked from commit 206cc9407b30d8524872d4c8b789843ac1a506d5) # Conflicts: # sdk/src/feature_set.rs * resolve merge conflicts Co-authored-by: Jeff Biseda --- core/src/serve_repair.rs | 142 ++------------------------------------- sdk/src/feature_set.rs | 5 -- 2 files changed, 5 insertions(+), 142 deletions(-) diff --git a/core/src/serve_repair.rs b/core/src/serve_repair.rs index 0b7d63a7ddc2f7..a425c4aee15f4a 100644 --- a/core/src/serve_repair.rs +++ b/core/src/serve_repair.rs @@ -32,7 +32,7 @@ use { solana_runtime::{bank::Bank, bank_forks::BankForks}, solana_sdk::{ clock::Slot, - feature_set::{check_ping_ancestor_requests, sign_repair_requests}, + feature_set::sign_repair_requests, hash::{Hash, HASH_BYTES}, packet::PACKET_DATA_SIZE, pubkey::{Pubkey, PUBKEY_BYTES}, @@ -162,7 +162,6 @@ struct ServeRepairStats { orphan: usize, pong: usize, ancestor_hashes: usize, - pings_required: usize, err_time_skew: usize, err_malformed: usize, err_sig_verify: usize, @@ -442,24 +441,6 @@ impl ServeRepair { } } - fn check_ping_ancestor_requests_activated_epoch(root_bank: &Bank) -> Option { - root_bank - .feature_set - .activated_slot(&check_ping_ancestor_requests::id()) - .map(|slot| root_bank.epoch_schedule().get_epoch(slot)) - } - - fn should_check_ping_ancestor_request( - slot: Slot, - root_bank: &Bank, - check_ping_ancestor_request_epoch: Option, - ) -> bool { - match check_ping_ancestor_request_epoch { - None => false, - Some(feature_epoch) => feature_epoch < root_bank.epoch_schedule().get_epoch(slot), - } - } - /// Process messages from the network fn run_listen( &self, @@ -541,7 +522,6 @@ impl ServeRepair { i64 ), ("pong", stats.pong, i64), - ("pings_required", stats.pings_required, i64), ("err_time_skew", stats.err_time_skew, i64), ("err_malformed", stats.err_malformed, i64), ("err_sig_verify", stats.err_sig_verify, i64), @@ -663,78 +643,6 @@ impl ServeRepair { true } - fn check_ping_cache( - request: &RepairProtocol, - from_addr: &SocketAddr, - identity_keypair: &Keypair, - ping_cache: &mut PingCache, - ) -> (bool, Option) { - let mut rng = rand::thread_rng(); - let mut pingf = move || Ping::new_rand(&mut rng, identity_keypair).ok(); - ping_cache.check(Instant::now(), (*request.sender(), *from_addr), &mut pingf) - } - - fn requires_signature_check( - request: &RepairProtocol, - root_bank: &Bank, - sign_repairs_epoch: Option, - ) -> bool { - match request { - RepairProtocol::LegacyWindowIndex(_, slot, _) - | RepairProtocol::LegacyHighestWindowIndex(_, slot, _) - | RepairProtocol::LegacyOrphan(_, slot) - | RepairProtocol::LegacyWindowIndexWithNonce(_, slot, _, _) - | RepairProtocol::LegacyHighestWindowIndexWithNonce(_, slot, _, _) - | RepairProtocol::LegacyOrphanWithNonce(_, slot, _) - | RepairProtocol::LegacyAncestorHashes(_, slot, _) - | RepairProtocol::WindowIndex { slot, .. } - | RepairProtocol::HighestWindowIndex { slot, .. } - | RepairProtocol::Orphan { slot, .. } - | RepairProtocol::AncestorHashes { slot, .. } => { - Self::should_sign_repair_request(*slot, root_bank, sign_repairs_epoch) - } - RepairProtocol::Pong(_) => true, - } - } - - fn ping_to_packet_mapper_by_request_variant( - request: &RepairProtocol, - dest_addr: SocketAddr, - root_bank: &Bank, - check_ping_ancestor_request_epoch: Option, - ) -> Option Option>> { - match request { - RepairProtocol::LegacyWindowIndex(_, _, _) - | RepairProtocol::LegacyHighestWindowIndex(_, _, _) - | RepairProtocol::LegacyOrphan(_, _) - | RepairProtocol::LegacyWindowIndexWithNonce(_, _, _, _) - | RepairProtocol::LegacyHighestWindowIndexWithNonce(_, _, _, _) - | RepairProtocol::LegacyOrphanWithNonce(_, _, _) - | RepairProtocol::LegacyAncestorHashes(_, _, _) - | RepairProtocol::Pong(_) => None, - RepairProtocol::WindowIndex { .. } - | RepairProtocol::HighestWindowIndex { .. } - | RepairProtocol::Orphan { .. } => Some(Box::new(move |ping| { - let ping = RepairResponse::Ping(ping); - Packet::from_data(Some(&dest_addr), ping).ok() - })), - RepairProtocol::AncestorHashes { slot, .. } => { - if Self::should_check_ping_ancestor_request( - *slot, - root_bank, - check_ping_ancestor_request_epoch, - ) { - Some(Box::new(move |ping| { - let ping = AncestorHashesResponse::Ping(ping); - Packet::from_data(Some(&dest_addr), ping).ok() - })) - } else { - None - } - } - } - } - fn handle_packets( &self, ping_cache: &mut PingCache, @@ -742,17 +650,12 @@ impl ServeRepair { blockstore: &Blockstore, packet_batch: PacketBatch, response_sender: &PacketBatchSender, - root_bank: &Bank, + _root_bank: &Bank, stats: &mut ServeRepairStats, data_budget: &DataBudget, ) { - let sign_repairs_epoch = Self::sign_repair_requests_activated_epoch(root_bank); - let check_ping_ancestor_request_epoch = - Self::check_ping_ancestor_requests_activated_epoch(root_bank); let identity_keypair = self.cluster_info.keypair().clone(); - let socket_addr_space = *self.cluster_info.socket_addr_space(); let my_id = identity_keypair.pubkey(); - let mut pending_pings = Vec::default(); // iter over the packets for (i, packet) in packet_batch.iter().enumerate() { @@ -769,42 +672,12 @@ impl ServeRepair { continue; } - let require_signature_check = - Self::requires_signature_check(&request, root_bank, sign_repairs_epoch); - if require_signature_check && !request.supports_signature() { - stats.err_unsigned += 1; - continue; - } - if request.supports_signature() - && !Self::verify_signed_packet(&my_id, packet, &request, stats) - { - continue; + if request.supports_signature() { + // collect stats for signature verification + Self::verify_signed_packet(&my_id, packet, &request, stats); } let from_addr = packet.meta.socket_addr(); - if let Some(ping_to_pkt) = Self::ping_to_packet_mapper_by_request_variant( - &request, - from_addr, - root_bank, - check_ping_ancestor_request_epoch, - ) { - if !ContactInfo::is_valid_address(&from_addr, &socket_addr_space) { - stats.err_malformed += 1; - continue; - } - let (check, ping) = - Self::check_ping_cache(&request, &from_addr, &identity_keypair, ping_cache); - if let Some(ping) = ping { - if let Some(pkt) = ping_to_pkt(ping) { - pending_pings.push(pkt); - } - } - if !check { - stats.pings_required += 1; - continue; - } - } - stats.processed += 1; let rsp = match Self::handle_repair( recycler, &from_addr, blockstore, request, stats, ping_cache, @@ -823,11 +696,6 @@ impl ServeRepair { break; } } - - if !pending_pings.is_empty() { - let batch = PacketBatch::new(pending_pings); - let _ignore = response_sender.send(batch); - } } pub fn ancestor_repair_request_bytes( diff --git a/sdk/src/feature_set.rs b/sdk/src/feature_set.rs index d2a30438e143f0..1a81ec00c034e6 100644 --- a/sdk/src/feature_set.rs +++ b/sdk/src/feature_set.rs @@ -492,10 +492,6 @@ pub mod concurrent_replay_of_forks { solana_sdk::declare_id!("9F2Dcu8xkBPKxiiy65XKPZYdCG3VZDpjDTuSmeYLozJe"); } -pub mod check_ping_ancestor_requests { - solana_sdk::declare_id!("AXLB87anNaUQtqBSsxkm4gvNzYY985aLtNtpJC94uWLJ"); -} - pub mod incremental_snapshot_only_incremental_hash_calculation { solana_sdk::declare_id!("25vqsfjk7Nv1prsQJmA4Xu1bN61s8LXCBGUPp8Rfy1UF"); } @@ -629,7 +625,6 @@ lazy_static! { (compact_vote_state_updates::id(), "Compact vote state updates to lower block size"), (sign_repair_requests::id(), "sign repair requests #26834"), (concurrent_replay_of_forks::id(), "Allow slots from different forks to be replayed concurrently #26465"), - (check_ping_ancestor_requests::id(), "ancestor hash repair socket ping/pong support #26963"), (incremental_snapshot_only_incremental_hash_calculation::id(), "only hash accounts in incremental snapshot during incremental snapshot creation #26799"), (vote_state_update_root_fix::id(), "fix root in vote state updates #27361"), (return_none_for_zero_lamport_accounts::id(), "return none for zero lamport accounts #27800"), From c4d12b6cb45a015633bb245c821bbf7501ef7c95 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Sat, 24 Sep 2022 21:22:46 +0000 Subject: [PATCH 148/465] Remove priority from vote transactions (backport #28030) (#28038) * Remove priority from vote transactions (#28030) vote transactions have same priority fee (cherry picked from commit e51cf46d6bb5dc2b67485f2394ac803525f16db8) # Conflicts: # core/src/immutable_deserialized_packet.rs * merge fix Co-authored-by: Tao Zhu <82401714+taozhu-chicago@users.noreply.github.com> Co-authored-by: Tao Zhu --- core/src/unprocessed_packet_batches.rs | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/core/src/unprocessed_packet_batches.rs b/core/src/unprocessed_packet_batches.rs index 2e72262b2ca787..1973b8f9dc91ba 100644 --- a/core/src/unprocessed_packet_batches.rs +++ b/core/src/unprocessed_packet_batches.rs @@ -108,10 +108,15 @@ impl DeserializedPacket { let is_simple_vote = packet.meta.is_simple_vote_tx(); // drop transaction if prioritization fails. - let priority_details = priority_details + let mut priority_details = priority_details .or_else(|| sanitized_transaction.get_transaction_priority_details()) .ok_or(DeserializedPacketError::PrioritizationFailure)?; + // set priority to zero for vote transactions + if is_simple_vote { + priority_details.priority = 0; + }; + Ok(Self { immutable_section: Rc::new(ImmutableDeserializedPacket { original_packet: packet, From f3f9f604f57e65e82735ffefbed6e4619fbdc545 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Sun, 25 Sep 2022 00:23:17 +0000 Subject: [PATCH 149/465] count unsigned repair requests (backport #27953) (#28051) * count unsigned repair requests (#27953) (cherry picked from commit 8b43215ddd7116dec1e23cb074c598f2b192ac06) # Conflicts: # core/src/serve_repair.rs * resolve merge conflicts Co-authored-by: Jeff Biseda --- core/src/serve_repair.rs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/core/src/serve_repair.rs b/core/src/serve_repair.rs index a425c4aee15f4a..cd260cbbb7ff62 100644 --- a/core/src/serve_repair.rs +++ b/core/src/serve_repair.rs @@ -151,6 +151,7 @@ impl RequestResponse for AncestorHashesRepairType { #[derive(Default)] struct ServeRepairStats { total_requests: usize, + unsigned_requests: usize, dropped_requests: usize, total_dropped_response_packets: usize, total_response_packets: usize, @@ -500,6 +501,7 @@ impl ServeRepair { datapoint_info!( "serve_repair-requests_received", ("total_requests", stats.total_requests, i64), + ("unsigned_requests", stats.unsigned_requests, i64), ("dropped_requests", stats.dropped_requests, i64), ( "total_dropped_response_packets", @@ -675,6 +677,8 @@ impl ServeRepair { if request.supports_signature() { // collect stats for signature verification Self::verify_signed_packet(&my_id, packet, &request, stats); + } else { + stats.unsigned_requests += 1; } let from_addr = packet.meta.socket_addr(); From 19f65a6997faa8a2458d7e20d296d0969dd05e81 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Sun, 25 Sep 2022 08:24:00 +0000 Subject: [PATCH 150/465] metrics to distinguish why repair packets are dropped (backport #27960) (#28057) metrics to distinguish why repair packets are dropped (#27960) (cherry picked from commit 9816c94d7e6209c24d2360fb79ca0f62cc11898d) Co-authored-by: Jeff Biseda --- core/src/serve_repair.rs | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/core/src/serve_repair.rs b/core/src/serve_repair.rs index cd260cbbb7ff62..faef7a95e06f69 100644 --- a/core/src/serve_repair.rs +++ b/core/src/serve_repair.rs @@ -152,7 +152,8 @@ impl RequestResponse for AncestorHashesRepairType { struct ServeRepairStats { total_requests: usize, unsigned_requests: usize, - dropped_requests: usize, + dropped_requests_outbound_bandwidth: usize, + dropped_requests_load_shed: usize, total_dropped_response_packets: usize, total_response_packets: usize, total_response_bytes: usize, @@ -469,7 +470,7 @@ impl ServeRepair { } } - stats.dropped_requests += dropped_requests; + stats.dropped_requests_load_shed += dropped_requests; stats.total_requests += total_requests; let root_bank = self.bank_forks.read().unwrap().root_bank(); @@ -502,7 +503,16 @@ impl ServeRepair { "serve_repair-requests_received", ("total_requests", stats.total_requests, i64), ("unsigned_requests", stats.unsigned_requests, i64), - ("dropped_requests", stats.dropped_requests, i64), + ( + "dropped_requests_outbound_bandwidth", + stats.dropped_requests_outbound_bandwidth, + i64 + ), + ( + "dropped_requests_load_shed", + stats.dropped_requests_load_shed, + i64 + ), ( "total_dropped_response_packets", stats.total_dropped_response_packets, @@ -695,7 +705,7 @@ impl ServeRepair { stats.total_response_bytes += num_response_bytes; stats.total_response_packets += num_response_packets; } else { - stats.dropped_requests += packet_batch.len() - i; + stats.dropped_requests_outbound_bandwidth += packet_batch.len() - i; stats.total_dropped_response_packets += num_response_packets; break; } From e916d8ec3bdbe7f658b113de07213d5b83e13b0f Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Sun, 25 Sep 2022 12:05:33 -0700 Subject: [PATCH 151/465] get_one_epoch_old_slot_for_hash_calc_scan to handle many old append vecs (backport #28000) (#28029) * get_one_epoch_old_slot_for_hash_calc_scan to handle many old append vecs (#28000) (cherry picked from commit 89b0abcf4d9263f1696e6d0456df7dbcb698f801) # Conflicts: # runtime/src/accounts_db.rs * fix merge errors Co-authored-by: Jeff Washington (jwash) --- runtime/src/accounts_db.rs | 27 +++++++++++++++++++++++---- 1 file changed, 23 insertions(+), 4 deletions(-) diff --git a/runtime/src/accounts_db.rs b/runtime/src/accounts_db.rs index 28082e7e7bebdd..4481fa3cfc7a0c 100644 --- a/runtime/src/accounts_db.rs +++ b/runtime/src/accounts_db.rs @@ -6508,6 +6508,27 @@ impl AccountsDb { } } + /// if ancient append vecs are enabled, return a slot one epoch old from 'max_slot_inclusive' + /// otherwise, return 0 + fn get_one_epoch_old_slot_for_hash_calc_scan( + &self, + max_slot_inclusive: Slot, + config: &CalcAccountsHashConfig<'_>, + ) -> Slot { + if self.ancient_append_vecs { + // we are going to use a fixed slots per epoch here. + // We are mainly interested in the network at steady state. + let slots_in_epoch = config.epoch_schedule.slots_per_epoch; + // For performance, this is required when ancient appendvecs are enabled + max_slot_inclusive.saturating_sub(slots_in_epoch) + } else { + // This causes the entire range to be chunked together, treating older append vecs just like new ones. + // This performs well if there are many old append vecs that haven't been cleaned yet. + // 0 will have the effect of causing ALL older append vecs to be chunked together, just like every other append vec. + 0 + } + } + /// Scan through all the account storage in parallel fn scan_account_storage_no_bank( &self, @@ -6531,10 +6552,8 @@ impl AccountsDb { // 3. evenly divided full chunks in the middle // 4. unevenly divided chunk of most recent slots (may be empty) let max_slot_inclusive = snapshot_storages.max_slot_inclusive(); - // we are going to use a fixed slots per epoch here. - // We are mainly interested in the network at steady state. - let slots_in_epoch = config.epoch_schedule.slots_per_epoch; - let one_epoch_old_slot = max_slot_inclusive.saturating_sub(slots_in_epoch); + let one_epoch_old_slot = + self.get_one_epoch_old_slot_for_hash_calc_scan(max_slot_inclusive, config); let range = snapshot_storages.range(); let ancient_slots = snapshot_storages From 8bde78e29eeb4e59102aa9a09fcf4fdc00e6ecc6 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Sun, 25 Sep 2022 12:06:06 -0700 Subject: [PATCH 152/465] remove extra accounts cap call at startup (backport #27949) (#27995) * remove extra accounts cap call at startup (#27949) (cherry picked from commit 7ddacc4bb4df29b5d1b695ddb695b1fe03e7f657) # Conflicts: # ledger/src/blockstore_processor.rs * fix merge conflicts Co-authored-by: Jeff Washington (jwash) --- ledger/src/blockstore_processor.rs | 20 -------------------- 1 file changed, 20 deletions(-) diff --git a/ledger/src/blockstore_processor.rs b/ledger/src/blockstore_processor.rs index 20ac00f7c93435..2a42bac824f3c5 100644 --- a/ledger/src/blockstore_processor.rs +++ b/ledger/src/blockstore_processor.rs @@ -845,25 +845,6 @@ pub fn process_blockstore_from_root( let processing_time = now.elapsed(); - let debug_verify = opts.accounts_db_test_hash_calculation; - let mut time_cap = Measure::start("capitalization"); - // We might be promptly restarted after bad capitalization was detected while creating newer snapshot. - // In that case, we're most likely restored from the last good snapshot and replayed up to this root. - // So again check here for the bad capitalization to avoid to continue until the next snapshot creation. - if !bank_forks - .read() - .unwrap() - .root_bank() - .calculate_and_verify_capitalization(debug_verify) - { - return Err( - BlockstoreProcessorError::RootBankWithMismatchedCapitalization( - bank_forks.read().unwrap().root(), - ), - ); - } - time_cap.stop(); - datapoint_info!( "process_blockstore_from_root", ("total_time_us", processing_time.as_micros(), i64), @@ -874,7 +855,6 @@ pub fn process_blockstore_from_root( ), ("slot", bank_forks.read().unwrap().root(), i64), ("forks", bank_forks.read().unwrap().banks().len(), i64), - ("calculate_capitalization_us", time_cap.as_us(), i64), ); info!("ledger processing timing: {:?}", timing); From c32c076696eef9a5c6d9b4f90178be7d9c6eaa65 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Sun, 25 Sep 2022 12:06:18 -0700 Subject: [PATCH 153/465] re-enable caching of hash calculation (backport #27920) (#27989) re-enable caching of hash calculation (#27920) (cherry picked from commit 4893dd3490f624c0160cf224690dbdfb95bd596a) Co-authored-by: Jeff Washington (jwash) --- runtime/src/accounts_hash.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/runtime/src/accounts_hash.rs b/runtime/src/accounts_hash.rs index c36a95d3e02640..4aad51756f34bf 100644 --- a/runtime/src/accounts_hash.rs +++ b/runtime/src/accounts_hash.rs @@ -63,7 +63,8 @@ impl<'a> CalcAccountsHashConfig<'a> { /// return true if we should cache accounts hash intermediate data between calls pub fn get_should_cache_hash_data() -> bool { // when we are skipping rewrites, we cannot rely on the cached data from old append vecs, so we have to disable caching for now - false + // skipping rewrites is not enabled in this branch. It requires a cli argument. + true } } From 71eb137916e9fa3f97cd70f1fcac7335cf51a659 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Mon, 26 Sep 2022 13:36:17 +0000 Subject: [PATCH 154/465] caches reed-solomon encoder/decoder instance (backport #27510) (#28062) caches reed-solomon encoder/decoder instance (#27510) ReedSolomon::new(...) initializes a matrix and a data-decode-matrix cache: https://github.com/rust-rse/reed-solomon-erasure/blob/273ebbced/src/core.rs#L460-L466 In order to cache this computation, this commit caches the reed-solomon encoder/decoder instance for each (data_shards, parity_shards) pair. (cherry picked from commit f49beb0cbc51ea63a893d345cfac68b88bdad2ce) Co-authored-by: behzad nouri --- core/benches/retransmit_stage.rs | 3 +- core/benches/shredder.rs | 16 ++- core/src/broadcast_stage.rs | 3 +- .../broadcast_duplicates_run.rs | 7 +- .../broadcast_fake_shreds_run.rs | 6 +- .../fail_entry_verification_broadcast_run.rs | 7 +- .../broadcast_stage/standard_broadcast_run.rs | 6 +- core/src/shred_fetch_stage.rs | 3 +- core/src/window_service.rs | 7 +- gossip/src/duplicate_shred.rs | 3 +- ledger/src/blockstore.rs | 34 +++++- ledger/src/shred.rs | 15 ++- ledger/src/shred/merkle.rs | 52 ++++++-- ledger/src/shredder.rs | 111 +++++++++++++++--- ledger/tests/shred.rs | 14 ++- 15 files changed, 233 insertions(+), 54 deletions(-) diff --git a/core/benches/retransmit_stage.rs b/core/benches/retransmit_stage.rs index bac12781f4b8b8..bad02d043a51f5 100644 --- a/core/benches/retransmit_stage.rs +++ b/core/benches/retransmit_stage.rs @@ -15,7 +15,7 @@ use { solana_ledger::{ genesis_utils::{create_genesis_config, GenesisConfigInfo}, leader_schedule_cache::LeaderScheduleCache, - shred::{ProcessShredsStats, Shredder}, + shred::{ProcessShredsStats, ReedSolomonCache, Shredder}, }, solana_measure::measure::Measure, solana_runtime::{bank::Bank, bank_forks::BankForks}, @@ -107,6 +107,7 @@ fn bench_retransmitter(bencher: &mut Bencher) { 0, // next_shred_index 0, // next_code_index true, // merkle_variant + &ReedSolomonCache::default(), &mut ProcessShredsStats::default(), ); diff --git a/core/benches/shredder.rs b/core/benches/shredder.rs index 981dabf6f9599c..fa98d4049ef1c0 100644 --- a/core/benches/shredder.rs +++ b/core/benches/shredder.rs @@ -8,8 +8,8 @@ use { raptorq::{Decoder, Encoder}, solana_entry::entry::{create_ticks, Entry}, solana_ledger::shred::{ - max_entries_per_n_shred, max_ticks_per_n_shreds, ProcessShredsStats, Shred, ShredFlags, - Shredder, DATA_SHREDS_PER_FEC_BLOCK, LEGACY_SHRED_DATA_CAPACITY, + max_entries_per_n_shred, max_ticks_per_n_shreds, ProcessShredsStats, ReedSolomonCache, + Shred, ShredFlags, Shredder, DATA_SHREDS_PER_FEC_BLOCK, LEGACY_SHRED_DATA_CAPACITY, }, solana_perf::test_tx, solana_sdk::{hash::Hash, packet::PACKET_DATA_SIZE, signature::Keypair}, @@ -53,6 +53,7 @@ fn make_shreds(num_shreds: usize) -> Vec { 0, // next_shred_index 0, // next_code_index false, // merkle_variant + &ReedSolomonCache::default(), &mut ProcessShredsStats::default(), ); assert!(data_shreds.len() >= num_shreds); @@ -78,6 +79,7 @@ fn bench_shredder_ticks(bencher: &mut Bencher) { // ~1Mb let num_ticks = max_ticks_per_n_shreds(1, Some(LEGACY_SHRED_DATA_CAPACITY)) * num_shreds as u64; let entries = create_ticks(num_ticks, 0, Hash::default()); + let reed_solomon_cache = ReedSolomonCache::default(); bencher.iter(|| { let shredder = Shredder::new(1, 0, 0, 0).unwrap(); shredder.entries_to_shreds( @@ -87,6 +89,7 @@ fn bench_shredder_ticks(bencher: &mut Bencher) { 0, 0, true, // merkle_variant + &reed_solomon_cache, &mut ProcessShredsStats::default(), ); }) @@ -104,6 +107,7 @@ fn bench_shredder_large_entries(bencher: &mut Bencher) { Some(shred_size), ); let entries = make_large_unchained_entries(txs_per_entry, num_entries); + let reed_solomon_cache = ReedSolomonCache::default(); // 1Mb bencher.iter(|| { let shredder = Shredder::new(1, 0, 0, 0).unwrap(); @@ -114,6 +118,7 @@ fn bench_shredder_large_entries(bencher: &mut Bencher) { 0, 0, true, // merkle_variant + &reed_solomon_cache, &mut ProcessShredsStats::default(), ); }) @@ -135,6 +140,7 @@ fn bench_deshredder(bencher: &mut Bencher) { 0, 0, true, // merkle_variant + &ReedSolomonCache::default(), &mut ProcessShredsStats::default(), ); bencher.iter(|| { @@ -159,10 +165,12 @@ fn bench_deserialize_hdr(bencher: &mut Bencher) { fn bench_shredder_coding(bencher: &mut Bencher) { let symbol_count = DATA_SHREDS_PER_FEC_BLOCK; let data_shreds = make_shreds(symbol_count); + let reed_solomon_cache = ReedSolomonCache::default(); bencher.iter(|| { Shredder::generate_coding_shreds( &data_shreds[..symbol_count], 0, // next_code_index + &reed_solomon_cache, ) .len(); }) @@ -172,12 +180,14 @@ fn bench_shredder_coding(bencher: &mut Bencher) { fn bench_shredder_decoding(bencher: &mut Bencher) { let symbol_count = DATA_SHREDS_PER_FEC_BLOCK; let data_shreds = make_shreds(symbol_count); + let reed_solomon_cache = ReedSolomonCache::default(); let coding_shreds = Shredder::generate_coding_shreds( &data_shreds[..symbol_count], 0, // next_code_index + &reed_solomon_cache, ); bencher.iter(|| { - Shredder::try_recovery(coding_shreds[..].to_vec()).unwrap(); + Shredder::try_recovery(coding_shreds[..].to_vec(), &reed_solomon_cache).unwrap(); }) } diff --git a/core/src/broadcast_stage.rs b/core/src/broadcast_stage.rs index 0163c5c10cf41a..a42c8a68851037 100644 --- a/core/src/broadcast_stage.rs +++ b/core/src/broadcast_stage.rs @@ -443,7 +443,7 @@ pub mod test { blockstore::Blockstore, genesis_utils::{create_genesis_config, GenesisConfigInfo}, get_tmp_ledger_path, - shred::{max_ticks_per_n_shreds, ProcessShredsStats, Shredder}, + shred::{max_ticks_per_n_shreds, ProcessShredsStats, ReedSolomonCache, Shredder}, }, solana_runtime::bank::Bank, solana_sdk::{ @@ -482,6 +482,7 @@ pub mod test { 0, // next_shred_index, 0, // next_code_index true, // merkle_variant + &ReedSolomonCache::default(), &mut ProcessShredsStats::default(), ); ( diff --git a/core/src/broadcast_stage/broadcast_duplicates_run.rs b/core/src/broadcast_stage/broadcast_duplicates_run.rs index f7d48644030ed1..0315a343b98739 100644 --- a/core/src/broadcast_stage/broadcast_duplicates_run.rs +++ b/core/src/broadcast_stage/broadcast_duplicates_run.rs @@ -4,7 +4,7 @@ use { itertools::Itertools, solana_entry::entry::Entry, solana_gossip::contact_info::ContactInfo, - solana_ledger::shred::{ProcessShredsStats, Shredder}, + solana_ledger::shred::{ProcessShredsStats, ReedSolomonCache, Shredder}, solana_sdk::{ hash::Hash, signature::{Keypair, Signature, Signer}, @@ -36,6 +36,7 @@ pub(super) struct BroadcastDuplicatesRun { cluster_nodes_cache: Arc>, original_last_data_shreds: Arc>>, partition_last_data_shreds: Arc>>, + reed_solomon_cache: Arc, } impl BroadcastDuplicatesRun { @@ -56,6 +57,7 @@ impl BroadcastDuplicatesRun { cluster_nodes_cache, original_last_data_shreds: Arc::>>::default(), partition_last_data_shreds: Arc::>>::default(), + reed_solomon_cache: Arc::::default(), } } } @@ -164,6 +166,7 @@ impl BroadcastRun for BroadcastDuplicatesRun { self.next_shred_index, self.next_code_index, false, // merkle_variant + &self.reed_solomon_cache, &mut ProcessShredsStats::default(), ); @@ -180,6 +183,7 @@ impl BroadcastRun for BroadcastDuplicatesRun { self.next_shred_index, self.next_code_index, false, // merkle_variant + &self.reed_solomon_cache, &mut ProcessShredsStats::default(), ); // Don't mark the last shred as last so that validators won't @@ -192,6 +196,7 @@ impl BroadcastRun for BroadcastDuplicatesRun { self.next_shred_index, self.next_code_index, false, // merkle_variant + &self.reed_solomon_cache, &mut ProcessShredsStats::default(), ); let sigs: Vec<_> = partition_last_data_shred diff --git a/core/src/broadcast_stage/broadcast_fake_shreds_run.rs b/core/src/broadcast_stage/broadcast_fake_shreds_run.rs index 10b2f6c6b91c6a..69aaf410af9123 100644 --- a/core/src/broadcast_stage/broadcast_fake_shreds_run.rs +++ b/core/src/broadcast_stage/broadcast_fake_shreds_run.rs @@ -1,7 +1,7 @@ use { super::*, solana_entry::entry::Entry, - solana_ledger::shred::{ProcessShredsStats, Shredder}, + solana_ledger::shred::{ProcessShredsStats, ReedSolomonCache, Shredder}, solana_sdk::{hash::Hash, signature::Keypair}, }; @@ -11,6 +11,7 @@ pub(super) struct BroadcastFakeShredsRun { partition: usize, shred_version: u16, next_code_index: u32, + reed_solomon_cache: Arc, } impl BroadcastFakeShredsRun { @@ -20,6 +21,7 @@ impl BroadcastFakeShredsRun { partition, shred_version, next_code_index: 0, + reed_solomon_cache: Arc::::default(), } } } @@ -61,6 +63,7 @@ impl BroadcastRun for BroadcastFakeShredsRun { next_shred_index, self.next_code_index, true, // merkle_variant + &self.reed_solomon_cache, &mut ProcessShredsStats::default(), ); @@ -81,6 +84,7 @@ impl BroadcastRun for BroadcastFakeShredsRun { next_shred_index, self.next_code_index, true, // merkle_variant + &self.reed_solomon_cache, &mut ProcessShredsStats::default(), ); diff --git a/core/src/broadcast_stage/fail_entry_verification_broadcast_run.rs b/core/src/broadcast_stage/fail_entry_verification_broadcast_run.rs index d5b77e59bdb022..e7b899ab0fdbbb 100644 --- a/core/src/broadcast_stage/fail_entry_verification_broadcast_run.rs +++ b/core/src/broadcast_stage/fail_entry_verification_broadcast_run.rs @@ -1,7 +1,7 @@ use { super::*, crate::cluster_nodes::ClusterNodesCache, - solana_ledger::shred::{ProcessShredsStats, Shredder}, + solana_ledger::shred::{ProcessShredsStats, ReedSolomonCache, Shredder}, solana_sdk::{hash::Hash, signature::Keypair}, std::{thread::sleep, time::Duration}, }; @@ -17,6 +17,7 @@ pub(super) struct FailEntryVerificationBroadcastRun { next_shred_index: u32, next_code_index: u32, cluster_nodes_cache: Arc>, + reed_solomon_cache: Arc, } impl FailEntryVerificationBroadcastRun { @@ -32,6 +33,7 @@ impl FailEntryVerificationBroadcastRun { next_shred_index: 0, next_code_index: 0, cluster_nodes_cache, + reed_solomon_cache: Arc::::default(), } } } @@ -92,6 +94,7 @@ impl BroadcastRun for FailEntryVerificationBroadcastRun { self.next_shred_index, self.next_code_index, true, // merkle_variant + &self.reed_solomon_cache, &mut ProcessShredsStats::default(), ); @@ -107,6 +110,7 @@ impl BroadcastRun for FailEntryVerificationBroadcastRun { self.next_shred_index, self.next_code_index, true, // merkle_variant + &self.reed_solomon_cache, &mut ProcessShredsStats::default(), ); // Don't mark the last shred as last so that validators won't know @@ -119,6 +123,7 @@ impl BroadcastRun for FailEntryVerificationBroadcastRun { self.next_shred_index, self.next_code_index, true, // merkle_variant + &self.reed_solomon_cache, &mut ProcessShredsStats::default(), ); self.next_shred_index += 1; diff --git a/core/src/broadcast_stage/standard_broadcast_run.rs b/core/src/broadcast_stage/standard_broadcast_run.rs index ba3e6b0962fa69..37c6584069efc4 100644 --- a/core/src/broadcast_stage/standard_broadcast_run.rs +++ b/core/src/broadcast_stage/standard_broadcast_run.rs @@ -9,7 +9,7 @@ use { broadcast_stage::broadcast_utils::UnfinishedSlotInfo, cluster_nodes::ClusterNodesCache, }, solana_entry::entry::Entry, - solana_ledger::shred::{ProcessShredsStats, Shred, ShredFlags, Shredder}, + solana_ledger::shred::{ProcessShredsStats, ReedSolomonCache, Shred, ShredFlags, Shredder}, solana_sdk::{ signature::Keypair, timing::{duration_as_us, AtomicInterval}, @@ -29,6 +29,7 @@ pub struct StandardBroadcastRun { last_datapoint_submit: Arc, num_batches: usize, cluster_nodes_cache: Arc>, + reed_solomon_cache: Arc, } impl StandardBroadcastRun { @@ -48,6 +49,7 @@ impl StandardBroadcastRun { last_datapoint_submit: Arc::default(), num_batches: 0, cluster_nodes_cache, + reed_solomon_cache: Arc::::default(), } } @@ -77,6 +79,7 @@ impl StandardBroadcastRun { state.next_shred_index, state.next_code_index, false, // merkle_variant + &self.reed_solomon_cache, stats, ); self.report_and_reset_stats(true); @@ -126,6 +129,7 @@ impl StandardBroadcastRun { next_shred_index, next_code_index, false, // merkle_variant + &self.reed_solomon_cache, process_stats, ); let next_shred_index = match data_shreds.iter().map(Shred::index).max() { diff --git a/core/src/shred_fetch_stage.rs b/core/src/shred_fetch_stage.rs index 25c9b00cdf7c76..cde36c8389b2cc 100644 --- a/core/src/shred_fetch_stage.rs +++ b/core/src/shred_fetch_stage.rs @@ -251,7 +251,7 @@ mod tests { super::*, solana_ledger::{ blockstore::MAX_DATA_SHREDS_PER_SLOT, - shred::{Shred, ShredFlags}, + shred::{ReedSolomonCache, Shred, ShredFlags}, }, }; @@ -294,6 +294,7 @@ mod tests { let coding = solana_ledger::shred::Shredder::generate_coding_shreds( &[shred], 3, // next_code_index + &ReedSolomonCache::default(), ); coding[0].copy_to_packet(&mut packet); assert!(!should_discard_packet( diff --git a/core/src/window_service.rs b/core/src/window_service.rs index 35330f50ff5db9..5e7d0e4bd5b0dc 100644 --- a/core/src/window_service.rs +++ b/core/src/window_service.rs @@ -16,7 +16,7 @@ use { solana_ledger::{ blockstore::{Blockstore, BlockstoreInsertionMetrics}, leader_schedule_cache::LeaderScheduleCache, - shred::{self, Nonce, Shred}, + shred::{self, Nonce, ReedSolomonCache, Shred}, }, solana_measure::measure::Measure, solana_metrics::inc_new_counter_error, @@ -220,6 +220,7 @@ fn run_insert( completed_data_sets_sender: &CompletedDataSetsSender, retransmit_sender: &Sender>, outstanding_requests: &RwLock, + reed_solomon_cache: &ReedSolomonCache, ) -> Result<()> where F: Fn(Shred), @@ -282,6 +283,7 @@ where false, // is_trusted Some(retransmit_sender), &handle_duplicate, + reed_solomon_cache, metrics, )?; for index in inserted_indices { @@ -411,6 +413,7 @@ impl WindowService { .thread_name(|i| format!("solWinInsert{:02}", i)) .build() .unwrap(); + let reed_solomon_cache = ReedSolomonCache::default(); Builder::new() .name("solWinInsert".to_string()) .spawn(move || { @@ -432,6 +435,7 @@ impl WindowService { &completed_data_sets_sender, &retransmit_sender, &outstanding_requests, + &reed_solomon_cache, ) { ws_metrics.record_error(&e); if Self::should_exit_on_error(e, &handle_error) { @@ -507,6 +511,7 @@ mod test { 0, // next_shred_index 0, // next_code_index true, // merkle_variant + &ReedSolomonCache::default(), &mut ProcessShredsStats::default(), ); data_shreds diff --git a/gossip/src/duplicate_shred.rs b/gossip/src/duplicate_shred.rs index 283d2c409388a8..d6861c1fc54daf 100644 --- a/gossip/src/duplicate_shred.rs +++ b/gossip/src/duplicate_shred.rs @@ -284,7 +284,7 @@ pub(crate) mod tests { super::*, rand::Rng, solana_entry::entry::Entry, - solana_ledger::shred::{ProcessShredsStats, Shredder}, + solana_ledger::shred::{ProcessShredsStats, ReedSolomonCache, Shredder}, solana_sdk::{ hash, signature::{Keypair, Signer}, @@ -343,6 +343,7 @@ pub(crate) mod tests { next_shred_index, next_shred_index, // next_code_index true, // merkle_variant + &ReedSolomonCache::default(), &mut ProcessShredsStats::default(), ); data_shreds.swap_remove(0) diff --git a/ledger/src/blockstore.rs b/ledger/src/blockstore.rs index a5fff9671aae1f..3a3b4403a65e6f 100644 --- a/ledger/src/blockstore.rs +++ b/ledger/src/blockstore.rs @@ -17,8 +17,8 @@ use { leader_schedule_cache::LeaderScheduleCache, next_slots_iterator::NextSlotsIterator, shred::{ - self, max_ticks_per_n_shreds, ErasureSetId, ProcessShredsStats, Shred, ShredData, - ShredId, ShredType, Shredder, + self, max_ticks_per_n_shreds, ErasureSetId, ProcessShredsStats, ReedSolomonCache, + Shred, ShredData, ShredId, ShredType, Shredder, }, slot_stats::{ShredSource, SlotsStats}, }, @@ -630,6 +630,7 @@ impl Blockstore { recovered_shreds: &mut Vec, data_cf: &LedgerColumn, code_cf: &LedgerColumn, + reed_solomon_cache: &ReedSolomonCache, ) { // Find shreds for this erasure set and try recovery let slot = index.slot; @@ -648,7 +649,7 @@ impl Blockstore { code_cf, )) .collect(); - if let Ok(mut result) = shred::recover(available_shreds) { + if let Ok(mut result) = shred::recover(available_shreds, reed_solomon_cache) { Self::submit_metrics(slot, erasure_meta, true, "complete".into(), result.len()); recovered_shreds.append(&mut result); } else { @@ -708,6 +709,7 @@ impl Blockstore { erasure_metas: &HashMap, index_working_set: &mut HashMap, prev_inserted_shreds: &HashMap, + reed_solomon_cache: &ReedSolomonCache, ) -> Vec { let data_cf = db.column::(); let code_cf = db.column::(); @@ -730,6 +732,7 @@ impl Blockstore { &mut recovered_shreds, &data_cf, &code_cf, + reed_solomon_cache, ); } ErasureMetaStatus::DataFull => { @@ -808,6 +811,7 @@ impl Blockstore { is_trusted: bool, retransmit_sender: Option<&Sender>>>, handle_duplicate: &F, + reed_solomon_cache: &ReedSolomonCache, metrics: &mut BlockstoreInsertionMetrics, ) -> Result<(Vec, Vec)> where @@ -895,6 +899,7 @@ impl Blockstore { &erasure_metas, &mut index_working_set, &just_inserted_shreds, + reed_solomon_cache, ); metrics.num_recovered += recovered_shreds @@ -1094,6 +1099,7 @@ impl Blockstore { is_trusted, None, // retransmit-sender &|_| {}, // handle-duplicates + &ReedSolomonCache::default(), &mut BlockstoreInsertionMetrics::default(), ) } @@ -1700,6 +1706,7 @@ impl Blockstore { let mut shredder = Shredder::new(current_slot, parent_slot, 0, version).unwrap(); let mut all_shreds = vec![]; let mut slot_entries = vec![]; + let reed_solomon_cache = ReedSolomonCache::default(); // Find all the entries for start_slot for entry in entries.into_iter() { if remaining_ticks_in_slot == 0 { @@ -1721,6 +1728,7 @@ impl Blockstore { start_index, // next_shred_index start_index, // next_code_index true, // merkle_variant + &reed_solomon_cache, &mut ProcessShredsStats::default(), ); all_shreds.append(&mut data_shreds); @@ -1748,6 +1756,7 @@ impl Blockstore { 0, // next_shred_index 0, // next_code_index true, // merkle_variant + &reed_solomon_cache, &mut ProcessShredsStats::default(), ); all_shreds.append(&mut data_shreds); @@ -3857,6 +3866,7 @@ pub fn create_new_ledger( 0, // next_shred_index 0, // next_code_index true, // merkle_variant + &ReedSolomonCache::default(), &mut ProcessShredsStats::default(), ); assert!(shreds.last().unwrap().last_in_slot()); @@ -4123,6 +4133,7 @@ pub fn entries_to_test_shreds( 0, // next_shred_index, 0, // next_code_index merkle_variant, + &ReedSolomonCache::default(), &mut ProcessShredsStats::default(), ) .0 @@ -8728,6 +8739,7 @@ pub mod tests { 0, // next_shred_index 0, // next_code_index true, // merkle_variant + &ReedSolomonCache::default(), &mut ProcessShredsStats::default(), ); @@ -8782,6 +8794,7 @@ pub mod tests { let entries1 = make_slot_entries_with_transactions(1); let entries2 = make_slot_entries_with_transactions(1); let leader_keypair = Arc::new(Keypair::new()); + let reed_solomon_cache = ReedSolomonCache::default(); let shredder = Shredder::new(slot, 0, 0, 0).unwrap(); let (shreds, _) = shredder.entries_to_shreds( &leader_keypair, @@ -8790,6 +8803,7 @@ pub mod tests { 0, // next_shred_index 0, // next_code_index, true, // merkle_variant + &reed_solomon_cache, &mut ProcessShredsStats::default(), ); let (duplicate_shreds, _) = shredder.entries_to_shreds( @@ -8799,6 +8813,7 @@ pub mod tests { 0, // next_shred_index 0, // next_code_index true, // merkle_variant + &reed_solomon_cache, &mut ProcessShredsStats::default(), ); let shred = shreds[0].clone(); @@ -9146,8 +9161,17 @@ pub mod tests { let ledger_path = get_tmp_ledger_path_auto_delete!(); let blockstore = Blockstore::open(ledger_path.path()).unwrap(); - let coding1 = Shredder::generate_coding_shreds(&shreds, /*next_code_index:*/ 0); - let coding2 = Shredder::generate_coding_shreds(&shreds, /*next_code_index:*/ 1); + let reed_solomon_cache = ReedSolomonCache::default(); + let coding1 = Shredder::generate_coding_shreds( + &shreds, + 0, // next_code_index + &reed_solomon_cache, + ); + let coding2 = Shredder::generate_coding_shreds( + &shreds, + 1, // next_code_index + &reed_solomon_cache, + ); for shred in &shreds { info!("shred {:?}", shred); } diff --git a/ledger/src/shred.rs b/ledger/src/shred.rs index 953182d87fe6d8..ad9a039611a7a7 100644 --- a/ledger/src/shred.rs +++ b/ledger/src/shred.rs @@ -76,7 +76,7 @@ pub use { shred_data::ShredData, stats::{ProcessShredsStats, ShredFetchStats}, }, - crate::shredder::Shredder, + crate::shredder::{ReedSolomonCache, Shredder}, }; mod common; @@ -717,20 +717,25 @@ impl TryFrom for ShredVariant { } } -pub(crate) fn recover(shreds: Vec) -> Result, Error> { +pub(crate) fn recover( + shreds: Vec, + reed_solomon_cache: &ReedSolomonCache, +) -> Result, Error> { match shreds .first() .ok_or(TooFewShardsPresent)? .common_header() .shred_variant { - ShredVariant::LegacyData | ShredVariant::LegacyCode => Shredder::try_recovery(shreds), + ShredVariant::LegacyData | ShredVariant::LegacyCode => { + Shredder::try_recovery(shreds, reed_solomon_cache) + } ShredVariant::MerkleCode(_) | ShredVariant::MerkleData(_) => { let shreds = shreds .into_iter() .map(merkle::Shred::try_from) .collect::>()?; - Ok(merkle::recover(shreds)? + Ok(merkle::recover(shreds, reed_solomon_cache)? .into_iter() .map(Shred::from) .collect()) @@ -750,6 +755,7 @@ pub(crate) fn make_merkle_shreds_from_entries( is_last_in_slot: bool, next_shred_index: u32, next_code_index: u32, + reed_solomon_cache: &ReedSolomonCache, stats: &mut ProcessShredsStats, ) -> Result, Error> { let now = Instant::now(); @@ -766,6 +772,7 @@ pub(crate) fn make_merkle_shreds_from_entries( is_last_in_slot, next_shred_index, next_code_index, + reed_solomon_cache, stats, )?; Ok(shreds.into_iter().flatten().map(Shred::from).collect()) diff --git a/ledger/src/shred/merkle.rs b/ledger/src/shred/merkle.rs index 06db998b4e9b00..ff2541c9dc5434 100644 --- a/ledger/src/shred/merkle.rs +++ b/ledger/src/shred/merkle.rs @@ -13,7 +13,7 @@ use { ShredFlags, ShredVariant, DATA_SHREDS_PER_FEC_BLOCK, SIZE_OF_CODING_SHRED_HEADERS, SIZE_OF_DATA_SHRED_HEADERS, SIZE_OF_SIGNATURE, }, - shredder::{self, ReedSolomon}, + shredder::{self, ReedSolomonCache}, }, assert_matches::debug_assert_matches, itertools::Itertools, @@ -597,7 +597,10 @@ fn make_merkle_branch( Some(MerkleBranch { root, proof }) } -pub(super) fn recover(mut shreds: Vec) -> Result, Error> { +pub(super) fn recover( + mut shreds: Vec, + reed_solomon_cache: &ReedSolomonCache, +) -> Result, Error> { // Grab {common, coding} headers from first coding shred. let headers = shreds.iter().find_map(|shred| { let shred = match shred { @@ -674,7 +677,9 @@ pub(super) fn recover(mut shreds: Vec) -> Result, Error> { .iter() .map(|shred| Some(shred.as_ref()?.erasure_shard_as_slice().ok()?.to_vec())) .collect(); - ReedSolomon::new(num_data_shreds, num_coding_shreds)?.reconstruct(&mut shards)?; + reed_solomon_cache + .get(num_data_shreds, num_coding_shreds)? + .reconstruct(&mut shards)?; let mask: Vec<_> = shreds.iter().map(Option::is_some).collect(); // Reconstruct code and data shreds from erasure encoded shards. let mut shreds: Vec<_> = shreds @@ -778,6 +783,7 @@ pub(super) fn make_shreds_from_data( is_last_in_slot: bool, next_shred_index: u32, next_code_index: u32, + reed_solomon_cache: &ReedSolomonCache, stats: &mut ProcessShredsStats, ) -> Result>, Error> { fn new_shred_data( @@ -916,7 +922,9 @@ pub(super) fn make_shreds_from_data( shreds .into_par_iter() .zip(next_code_index) - .map(|(shreds, next_code_index)| make_erasure_batch(keypair, shreds, next_code_index)) + .map(|(shreds, next_code_index)| { + make_erasure_batch(keypair, shreds, next_code_index, reed_solomon_cache) + }) .collect::, Error>>() }); stats.gen_coding_elapsed += now.elapsed().as_micros() as u64; @@ -929,6 +937,7 @@ fn make_erasure_batch( keypair: &Keypair, shreds: Vec, next_code_index: u32, + reed_solomon_cache: &ReedSolomonCache, ) -> Result, Error> { let num_data_shreds = shreds.len(); let erasure_batch_size = shredder::get_erasure_batch_size(num_data_shreds); @@ -949,7 +958,9 @@ fn make_erasure_batch( // Shreds should have erasure encoded shard of the same length. debug_assert_eq!(data.iter().map(|shard| shard.len()).dedup().count(), 1); let mut parity = vec![vec![0u8; data[0].len()]; num_coding_shreds]; - ReedSolomon::new(num_data_shreds, num_coding_shreds)?.encode_sep(&data, &mut parity[..])?; + reed_solomon_cache + .get(num_data_shreds, num_coding_shreds)? + .encode_sep(&data, &mut parity[..])?; let mut shreds: Vec<_> = shreds.into_iter().map(Shred::ShredData).collect(); // Initialize coding shreds from erasure coding shards. common_header.index = next_code_index; @@ -1114,9 +1125,15 @@ mod test { #[test_case(73)] fn test_recover_merkle_shreds(num_shreds: usize) { let mut rng = rand::thread_rng(); + let reed_solomon_cache = ReedSolomonCache::default(); for num_data_shreds in 1..num_shreds { let num_coding_shreds = num_shreds - num_data_shreds; - run_recover_merkle_shreds(&mut rng, num_data_shreds, num_coding_shreds); + run_recover_merkle_shreds( + &mut rng, + num_data_shreds, + num_coding_shreds, + &reed_solomon_cache, + ); } } @@ -1124,6 +1141,7 @@ mod test { rng: &mut R, num_data_shreds: usize, num_coding_shreds: usize, + reed_solomon_cache: &ReedSolomonCache, ) { let keypair = Keypair::generate(rng); let num_shreds = num_data_shreds + num_coding_shreds; @@ -1177,7 +1195,8 @@ mod test { .collect::>() .unwrap(); let mut parity = vec![vec![0u8; data[0].len()]; num_coding_shreds]; - ReedSolomon::new(num_data_shreds, num_coding_shreds) + reed_solomon_cache + .get(num_data_shreds, num_coding_shreds) .unwrap() .encode_sep(&data, &mut parity[..]) .unwrap(); @@ -1237,12 +1256,12 @@ mod test { ) }) { assert_matches!( - recover(shreds), + recover(shreds, reed_solomon_cache), Err(Error::ErasureError(TooFewParityShards)) ); continue; } - let recovered_shreds = recover(shreds).unwrap(); + let recovered_shreds = recover(shreds, reed_solomon_cache).unwrap(); assert_eq!(size + recovered_shreds.len(), num_shreds); assert_eq!(recovered_shreds.len(), removed_shreds.len()); removed_shreds.sort_by(|a, b| { @@ -1287,21 +1306,27 @@ mod test { fn test_make_shreds_from_data(data_size: usize) { let mut rng = rand::thread_rng(); let data_size = data_size.saturating_sub(16).max(1); + let reed_solomon_cache = ReedSolomonCache::default(); for data_size in (data_size..data_size + 32).step_by(3) { - run_make_shreds_from_data(&mut rng, data_size); + run_make_shreds_from_data(&mut rng, data_size, &reed_solomon_cache); } } #[test] fn test_make_shreds_from_data_rand() { let mut rng = rand::thread_rng(); + let reed_solomon_cache = ReedSolomonCache::default(); for _ in 0..32 { let data_size = rng.gen_range(0, 31200 * 7); - run_make_shreds_from_data(&mut rng, data_size); + run_make_shreds_from_data(&mut rng, data_size, &reed_solomon_cache); } } - fn run_make_shreds_from_data(rng: &mut R, data_size: usize) { + fn run_make_shreds_from_data( + rng: &mut R, + data_size: usize, + reed_solomon_cache: &ReedSolomonCache, + ) { let thread_pool = ThreadPoolBuilder::new().num_threads(2).build().unwrap(); let keypair = Keypair::new(); let slot = 149_745_689; @@ -1323,6 +1348,7 @@ mod test { true, // is_last_in_slot next_shred_index, next_code_index, + reed_solomon_cache, &mut ProcessShredsStats::default(), ) .unwrap(); @@ -1433,7 +1459,7 @@ mod test { }) .group_by(|shred| shred.common_header().fec_set_index) .into_iter() - .flat_map(|(_, shreds)| recover(shreds.collect()).unwrap()) + .flat_map(|(_, shreds)| recover(shreds.collect(), reed_solomon_cache).unwrap()) .collect(); assert_eq!(recovered_data_shreds.len(), data_shreds.len()); for (shred, other) in recovered_data_shreds.into_iter().zip(data_shreds) { diff --git a/ledger/src/shredder.rs b/ledger/src/shredder.rs index feebcdcb468b65..132cf670b8c637 100644 --- a/ledger/src/shredder.rs +++ b/ledger/src/shredder.rs @@ -4,6 +4,7 @@ use { }, itertools::Itertools, lazy_static::lazy_static, + lru::LruCache, rayon::{prelude::*, ThreadPool}, reed_solomon_erasure::{ galois_8::Field, @@ -13,7 +14,11 @@ use { solana_measure::measure::Measure, solana_rayon_threadlimit::get_thread_count, solana_sdk::{clock::Slot, signature::Keypair}, - std::{borrow::Borrow, fmt::Debug}, + std::{ + borrow::Borrow, + fmt::Debug, + sync::{Arc, Mutex}, + }, }; lazy_static! { @@ -33,7 +38,11 @@ pub(crate) const ERASURE_BATCH_SIZE: [usize; 33] = [ 55, 56, 58, 59, 60, 62, 63, 64, // 32 ]; -pub(crate) type ReedSolomon = reed_solomon_erasure::ReedSolomon; +type ReedSolomon = reed_solomon_erasure::ReedSolomon; + +pub struct ReedSolomonCache( + Mutex>>, +); #[derive(Debug)] pub struct Shredder { @@ -70,6 +79,7 @@ impl Shredder { next_shred_index: u32, next_code_index: u32, merkle_variant: bool, + reed_solomon_cache: &ReedSolomonCache, stats: &mut ProcessShredsStats, ) -> ( Vec, // data shreds @@ -87,6 +97,7 @@ impl Shredder { is_last_in_slot, next_shred_index, next_code_index, + reed_solomon_cache, stats, ) .unwrap() @@ -95,9 +106,14 @@ impl Shredder { } let data_shreds = self.entries_to_data_shreds(keypair, entries, is_last_in_slot, next_shred_index, stats); - let coding_shreds = - Self::data_shreds_to_coding_shreds(keypair, &data_shreds, next_code_index, stats) - .unwrap(); + let coding_shreds = Self::data_shreds_to_coding_shreds( + keypair, + &data_shreds, + next_code_index, + reed_solomon_cache, + stats, + ) + .unwrap(); (data_shreds, coding_shreds) } @@ -174,6 +190,7 @@ impl Shredder { keypair: &Keypair, data_shreds: &[Shred], next_code_index: u32, + reed_solomon_cache: &ReedSolomonCache, process_stats: &mut ProcessShredsStats, ) -> Result, Error> { if data_shreds.is_empty() { @@ -204,7 +221,7 @@ impl Shredder { .into_par_iter() .zip(next_code_index) .flat_map(|(shreds, next_code_index)| { - Shredder::generate_coding_shreds(&shreds, next_code_index) + Shredder::generate_coding_shreds(&shreds, next_code_index, reed_solomon_cache) }) .collect() }); @@ -228,6 +245,7 @@ impl Shredder { pub fn generate_coding_shreds>( data: &[T], next_code_index: u32, + reed_solomon_cache: &ReedSolomonCache, ) -> Vec { let (slot, index, version, fec_set_index) = { let shred = data.first().unwrap().borrow(); @@ -257,7 +275,8 @@ impl Shredder { .collect::>() .unwrap(); let mut parity = vec![vec![0u8; data[0].len()]; num_coding]; - ReedSolomon::new(num_data, num_coding) + reed_solomon_cache + .get(num_data, num_coding) .unwrap() .encode_sep(&data, &mut parity[..]) .unwrap(); @@ -282,7 +301,10 @@ impl Shredder { .collect() } - pub fn try_recovery(shreds: Vec) -> Result, Error> { + pub fn try_recovery( + shreds: Vec, + reed_solomon_cache: &ReedSolomonCache, + ) -> Result, Error> { let (slot, fec_set_index) = match shreds.first() { None => return Err(Error::from(TooFewShardsPresent)), Some(shred) => (shred.slot(), shred.fec_set_index()), @@ -322,7 +344,9 @@ impl Shredder { mask[index] = true; } } - ReedSolomon::new(num_data_shreds, num_coding_shreds)?.reconstruct_data(&mut shards)?; + reed_solomon_cache + .get(num_data_shreds, num_coding_shreds)? + .reconstruct_data(&mut shards)?; let recovered_data = mask .into_iter() .zip(shards) @@ -365,6 +389,38 @@ impl Shredder { } } +impl ReedSolomonCache { + const CAPACITY: usize = 4 * DATA_SHREDS_PER_FEC_BLOCK; + + pub(crate) fn get( + &self, + data_shards: usize, + parity_shards: usize, + ) -> Result, reed_solomon_erasure::Error> { + let key = (data_shards, parity_shards); + { + let mut cache = self.0.lock().unwrap(); + if let Some(entry) = cache.get(&key) { + return Ok(entry.clone()); + } + } + let entry = ReedSolomon::new(data_shards, parity_shards)?; + let entry = Arc::new(entry); + { + let entry = entry.clone(); + let mut cache = self.0.lock().unwrap(); + cache.put(key, entry); + } + Ok(entry) + } +} + +impl Default for ReedSolomonCache { + fn default() -> Self { + Self(Mutex::new(LruCache::new(Self::CAPACITY))) + } +} + /// Maps number of data shreds in each batch to the erasure batch size. pub(crate) fn get_erasure_batch_size(num_data_shreds: usize) -> usize { ERASURE_BATCH_SIZE @@ -464,6 +520,7 @@ mod tests { start_index, // next_shred_index start_index, // next_code_index true, // merkle_variant + &ReedSolomonCache::default(), &mut ProcessShredsStats::default(), ); let next_index = data_shreds.last().unwrap().index() + 1; @@ -542,6 +599,7 @@ mod tests { 0, // next_shred_index 0, // next_code_index true, // merkle_variant + &ReedSolomonCache::default(), &mut ProcessShredsStats::default(), ); let deserialized_shred = @@ -573,6 +631,7 @@ mod tests { 0, // next_shred_index 0, // next_code_index true, // merkle_variant + &ReedSolomonCache::default(), &mut ProcessShredsStats::default(), ); data_shreds.iter().for_each(|s| { @@ -609,6 +668,7 @@ mod tests { 0, // next_shred_index 0, // next_code_index true, // merkle_variant + &ReedSolomonCache::default(), &mut ProcessShredsStats::default(), ); data_shreds.iter().for_each(|s| { @@ -654,6 +714,7 @@ mod tests { 0, // next_shred_index 0, // next_code_index true, // merkle_variant + &ReedSolomonCache::default(), &mut ProcessShredsStats::default(), ); for (i, s) in data_shreds.iter().enumerate() { @@ -701,6 +762,7 @@ mod tests { }) .collect(); + let reed_solomon_cache = ReedSolomonCache::default(); let serialized_entries = bincode::serialize(&entries).unwrap(); let (data_shreds, coding_shreds) = shredder.entries_to_shreds( &keypair, @@ -709,6 +771,7 @@ mod tests { 0, // next_shred_index 0, // next_code_index false, // merkle_variant + &reed_solomon_cache, &mut ProcessShredsStats::default(), ); let num_coding_shreds = coding_shreds.len(); @@ -728,12 +791,17 @@ mod tests { // Test0: Try recovery/reassembly with only data shreds, but not all data shreds. Hint: should fail assert_eq!( - Shredder::try_recovery(data_shreds[..data_shreds.len() - 1].to_vec()).unwrap(), + Shredder::try_recovery( + data_shreds[..data_shreds.len() - 1].to_vec(), + &reed_solomon_cache + ) + .unwrap(), Vec::default() ); // Test1: Try recovery/reassembly with only data shreds. Hint: should work - let recovered_data = Shredder::try_recovery(data_shreds[..].to_vec()).unwrap(); + let recovered_data = + Shredder::try_recovery(data_shreds[..].to_vec(), &reed_solomon_cache).unwrap(); assert!(recovered_data.is_empty()); // Test2: Try recovery/reassembly with missing data shreds + coding shreds. Hint: should work @@ -743,7 +811,8 @@ mod tests { .filter_map(|(i, b)| if i % 2 == 0 { Some(b.clone()) } else { None }) .collect(); - let mut recovered_data = Shredder::try_recovery(shred_info.clone()).unwrap(); + let mut recovered_data = + Shredder::try_recovery(shred_info.clone(), &reed_solomon_cache).unwrap(); assert_eq!(recovered_data.len(), 2); // Data shreds 1 and 3 were missing let recovered_shred = recovered_data.remove(0); @@ -783,7 +852,8 @@ mod tests { .filter_map(|(i, b)| if i % 2 != 0 { Some(b.clone()) } else { None }) .collect(); - let recovered_data = Shredder::try_recovery(shred_info.clone()).unwrap(); + let recovered_data = + Shredder::try_recovery(shred_info.clone(), &reed_solomon_cache).unwrap(); assert_eq!(recovered_data.len(), 3); // Data shreds 0, 2, 4 were missing for (i, recovered_shred) in recovered_data.into_iter().enumerate() { @@ -838,6 +908,7 @@ mod tests { 25, // next_shred_index, 25, // next_code_index false, // merkle_variant + &ReedSolomonCache::default(), &mut ProcessShredsStats::default(), ); // We should have 10 shreds now @@ -855,7 +926,8 @@ mod tests { .filter_map(|(i, b)| if i % 2 != 0 { Some(b.clone()) } else { None }) .collect(); - let recovered_data = Shredder::try_recovery(shred_info.clone()).unwrap(); + let recovered_data = + Shredder::try_recovery(shred_info.clone(), &reed_solomon_cache).unwrap(); assert_eq!(recovered_data.len(), 3); // Data shreds 25, 27, 29 were missing for (i, recovered_shred) in recovered_data.into_iter().enumerate() { @@ -879,7 +951,8 @@ mod tests { assert_eq!(serialized_entries[..], result[..serialized_entries.len()]); // Test6: Try recovery/reassembly with incorrect slot. Hint: does not recover any shreds - let recovered_data = Shredder::try_recovery(shred_info.clone()).unwrap(); + let recovered_data = + Shredder::try_recovery(shred_info.clone(), &reed_solomon_cache).unwrap(); assert!(recovered_data.is_empty()); } @@ -923,6 +996,7 @@ mod tests { ) .unwrap(); let next_shred_index = rng.gen_range(1, 1024); + let reed_solomon_cache = ReedSolomonCache::default(); let (data_shreds, coding_shreds) = shredder.entries_to_shreds( &keypair, &[entry], @@ -930,6 +1004,7 @@ mod tests { next_shred_index, next_shred_index, // next_code_index false, // merkle_variant + &reed_solomon_cache, &mut ProcessShredsStats::default(), ); let num_data_shreds = data_shreds.len(); @@ -949,7 +1024,7 @@ mod tests { .filter(|shred| shred.is_data()) .map(|shred| shred.index()) .collect(); - let recovered_shreds = Shredder::try_recovery(shreds).unwrap(); + let recovered_shreds = Shredder::try_recovery(shreds, &reed_solomon_cache).unwrap(); assert_eq!( recovered_shreds, data_shreds @@ -991,6 +1066,7 @@ mod tests { 0, // next_shred_index 0, // next_code_index true, // merkle_variant + &ReedSolomonCache::default(), &mut ProcessShredsStats::default(), ); assert!(!data_shreds @@ -1024,6 +1100,7 @@ mod tests { start_index, // next_shred_index start_index, // next_code_index true, // merkle_variant + &ReedSolomonCache::default(), &mut ProcessShredsStats::default(), ); const MIN_CHUNK_SIZE: usize = DATA_SHREDS_PER_FEC_BLOCK; @@ -1084,6 +1161,7 @@ mod tests { ); let next_code_index = data_shreds[0].index(); + let reed_solomon_cache = ReedSolomonCache::default(); for size in (1..data_shreds.len()).step_by(5) { let data_shreds = &data_shreds[..size]; @@ -1091,6 +1169,7 @@ mod tests { &keypair, data_shreds, next_code_index, + &reed_solomon_cache, &mut stats, ) .unwrap(); diff --git a/ledger/tests/shred.rs b/ledger/tests/shred.rs index c3caaf1b4b98c0..ef873bd8f585d8 100644 --- a/ledger/tests/shred.rs +++ b/ledger/tests/shred.rs @@ -2,8 +2,8 @@ use { solana_entry::entry::Entry, solana_ledger::shred::{ - max_entries_per_n_shred, verify_test_data_shred, ProcessShredsStats, Shred, Shredder, - DATA_SHREDS_PER_FEC_BLOCK, LEGACY_SHRED_DATA_CAPACITY, + max_entries_per_n_shred, verify_test_data_shred, ProcessShredsStats, ReedSolomonCache, + Shred, Shredder, DATA_SHREDS_PER_FEC_BLOCK, LEGACY_SHRED_DATA_CAPACITY, }, solana_sdk::{ clock::Slot, @@ -47,6 +47,7 @@ fn test_multi_fec_block_coding() { }) .collect(); + let reed_solomon_cache = ReedSolomonCache::default(); let serialized_entries = bincode::serialize(&entries).unwrap(); let (data_shreds, coding_shreds) = shredder.entries_to_shreds( &keypair, @@ -55,6 +56,7 @@ fn test_multi_fec_block_coding() { 0, // next_shred_index 0, // next_code_index false, // merkle_variant + &reed_solomon_cache, &mut ProcessShredsStats::default(), ); let next_index = data_shreds.last().unwrap().index() + 1; @@ -82,7 +84,8 @@ fn test_multi_fec_block_coding() { .filter_map(|(i, b)| if i % 2 != 0 { Some(b.clone()) } else { None }) .collect(); - let recovered_data = Shredder::try_recovery(shred_info.clone()).unwrap(); + let recovered_data = + Shredder::try_recovery(shred_info.clone(), &reed_solomon_cache).unwrap(); for (i, recovered_shred) in recovered_data.into_iter().enumerate() { let index = shred_start_index + (i * 2); @@ -116,6 +119,7 @@ fn test_multi_fec_block_different_size_coding() { setup_different_sized_fec_blocks(slot, parent_slot, keypair.clone()); let total_num_data_shreds: usize = fec_data.values().map(|x| x.len()).sum(); + let reed_solomon_cache = ReedSolomonCache::default(); // Test recovery for (fec_data_shreds, fec_coding_shreds) in fec_data.values().zip(fec_coding.values()) { let first_data_index = fec_data_shreds.first().unwrap().index() as usize; @@ -125,7 +129,7 @@ fn test_multi_fec_block_different_size_coding() { .chain(fec_coding_shreds.iter().step_by(2)) .cloned() .collect(); - let recovered_data = Shredder::try_recovery(all_shreds).unwrap(); + let recovered_data = Shredder::try_recovery(all_shreds, &reed_solomon_cache).unwrap(); // Necessary in order to ensure the last shred in the slot // is part of the recovered set, and that the below `index` // calcuation in the loop is correct @@ -219,6 +223,7 @@ fn setup_different_sized_fec_blocks( let mut coding_slot_and_index = HashSet::new(); let total_num_data_shreds: usize = 2 * num_shreds_per_iter; + let reed_solomon_cache = ReedSolomonCache::default(); for i in 0..2 { let is_last = i == 1; let (data_shreds, coding_shreds) = shredder.entries_to_shreds( @@ -228,6 +233,7 @@ fn setup_different_sized_fec_blocks( next_shred_index, next_code_index, false, // merkle_variant + &reed_solomon_cache, &mut ProcessShredsStats::default(), ); for shred in &data_shreds { From 2ef20f7065268cc4d814a45a08672d8c483ce02c Mon Sep 17 00:00:00 2001 From: Yihau Chen Date: Mon, 26 Sep 2022 23:17:08 +0800 Subject: [PATCH 155/465] docs: backporting (#27799) * [docs] Adding content pages under "developing" section (#26816) * feat: added intro to dApps and programs pages * style: removed whitespaces and updates MD syntax * fix: spellcheck * feat: what is rent page * fix: fix typos and removed whitespaces * fix: updated terminolgy * feat: added what is web 3 page * fix: removed dapps and web3 pages * feat: added links to the developing sidebar * fix: updated text based on comments * fix: fixed link * fix: fixed the incorrect/unknown redirects (#26844) * docs: updated "transaction fees" page (#26861) * docs: transaction fees, compute units, compute budget * docs: added messages definition * Revert "docs: added messages definition" This reverts commit 3c56156dfaaf17158c5eafbc5877080a83607a06. * docs: added messages definition * Update docs/src/transaction_fees.md Co-authored-by: Jacob Creech <82475023+jacobcreech@users.noreply.github.com> * fix: updates from feedback Co-authored-by: Jacob Creech <82475023+jacobcreech@users.noreply.github.com> * docs: updated absolute routes to local routes (#27004) * [docs] Docs sidebar/navbar restructure (#27005) * fix: minor title changes * fix: updated structure of 2 pages * fix: proposals page and submitting one added proposals page and made it clear how to submit one * fix: minor update to docs home page * fix: footer links added more footer links and minor restructure * fix: sidebar restructure * fix: removed duplicate geyser link * fix: sidebars and navbar final separation of sidebars and updated navbar * fix: formatting for the navbar icons * fix: changes some sidebar links to refs * style: changed order of footer's SPL link * style: removed comment and fixed whitespace check * [docs] added commitment page (#27265) feat: added commitment doc * [docs] developers home page (#27436) * feat: developers landing page * fix: updated links * fix: updated labels for translateIds * refactor: updated index page to use Card component * style: removed whitespace * refactor: added static labels for developer sidebar items * feat: developer's sidebar and new layout file * chore: removed whitespace * fix: removed duplicate CLI sidebar item * fix: card shadows and RPC card text * [docs] quickstart guides (#27592) * feat(wip): rust quickstart page * feat: added quickstart pages * fix: updated cards and card layout * feat: added quickstart home (and to sidebar ) * fix: updated quickstarts * fix: renamed to get started * fix: typos and seo * fix: JS example to interact with the onchain program * fix empty link Co-authored-by: Nick Frostbutter <75431177+nickfrosty@users.noreply.github.com> Co-authored-by: nickfrosty Co-authored-by: Jacob Creech <82475023+jacobcreech@users.noreply.github.com> --- CONTRIBUTING.md | 26 +- docs/components/Card.jsx | 50 ++ docs/docusaurus.config.js | 92 ++- docs/layouts/CardLayout.js | 87 +++ docs/publish-docs.sh | 19 +- docs/sidebars.js | 628 ++++++++++++------ docs/src/cli/deploy-a-program.md | 2 +- docs/src/cluster/commitments.md | 21 + docs/src/css/custom.css | 71 +- docs/src/developing/clients/javascript-api.md | 124 ++-- .../clients/javascript-reference.md | 363 +++++----- docs/src/developing/intro/programs.md | 57 ++ docs/src/developing/intro/rent.md | 40 ++ .../developing/on-chain-programs/debugging.md | 2 +- .../developing/on-chain-programs/deploying.md | 4 +- .../on-chain-programs/developing-c.md | 3 +- .../on-chain-programs/developing-rust.md | 3 +- .../developing/on-chain-programs/examples.md | 2 +- .../developing/programming-model/runtime.md | 37 +- .../programming-model/transactions.md | 2 +- docs/src/getstarted/hello-world.md | 287 ++++++++ docs/src/getstarted/local.md | 92 +++ docs/src/getstarted/rust.md | 147 ++++ docs/src/implemented-proposals/commitment.md | 4 +- .../implemented-proposals.md | 16 +- .../src/integrations/retrying-transactions.md | 36 +- docs/src/pages/developers.js | 184 +++++ docs/src/pages/getstarted.jsx | 126 ++++ docs/src/pages/index.js | 216 +++--- docs/src/pages/styles.module.css | 6 +- docs/src/proposals.md | 49 ++ .../proposals/accepted-design-proposals.md | 18 +- docs/src/terminology.md | 52 +- docs/src/transaction_fees.md | 67 +- .../solana-get-started-build-and-deploy.png | Bin 0 -> 218708 bytes ...olana-get-started-import-on-playground.png | Bin 0 -> 148564 bytes .../solana-get-started-successful-build.png | Bin 0 -> 146124 bytes ...lana-get-started-view-logs-on-explorer.png | Bin 0 -> 174869 bytes 38 files changed, 2243 insertions(+), 690 deletions(-) create mode 100644 docs/components/Card.jsx create mode 100644 docs/layouts/CardLayout.js create mode 100644 docs/src/cluster/commitments.md create mode 100644 docs/src/developing/intro/programs.md create mode 100644 docs/src/developing/intro/rent.md create mode 100644 docs/src/getstarted/hello-world.md create mode 100644 docs/src/getstarted/local.md create mode 100644 docs/src/getstarted/rust.md create mode 100644 docs/src/pages/developers.js create mode 100644 docs/src/pages/getstarted.jsx create mode 100644 docs/src/proposals.md create mode 100644 docs/static/img/quickstarts/solana-get-started-build-and-deploy.png create mode 100644 docs/static/img/quickstarts/solana-get-started-import-on-playground.png create mode 100644 docs/static/img/quickstarts/solana-get-started-successful-build.png create mode 100644 docs/static/img/quickstarts/solana-get-started-view-logs-on-explorer.png diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 3f4918fd7f10b5..4a64afe79e7b3c 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -250,20 +250,12 @@ confused with 3-letter acronyms. ## Design Proposals -Solana's architecture is described by docs generated from markdown files in -the `docs/src/` directory, maintained by an *editor* (currently @garious). To -add a design proposal, you'll need to include it in the -[Accepted Design Proposals](https://docs.solana.com/proposals/accepted-design-proposals) -section of the Solana docs. Here's the full process: - -1. Propose a design by creating a PR that adds a markdown document to the - `docs/src/proposals` directory and references it from the [table of - contents](docs/src/SUMMARY.md). Add any relevant *maintainers* to the PR - review. -2. The PR being merged indicates your proposed change was accepted and that the - maintainers support your plan of attack. -3. Submit PRs that implement the proposal. When the implementation reveals the - need for tweaks to the proposal, be sure to update the proposal and have that - change reviewed by the same people as in step 1. -4. Once the implementation is complete, submit a PR that moves the link from - the Accepted Proposals to the Implemented Proposals section. +Solana's architecture is described by docs generated from markdown files in the `docs/src/` +directory and viewable on the official [Solana Documentation](https://docs.solana.com) website. + +Current design proposals may be viewed on the docs site: + +1. [Accepted Proposals](https://docs.solana.com/proposals/accepted-design-proposals.md). +2. [Implemented Proposals](https://docs.solana.com/implemented-proposals/implemented-proposals.md) + +New design proposals should follow this guide on [how to submit a design proposal](./docs/src/proposals.md#submit-a-design-proposal). \ No newline at end of file diff --git a/docs/components/Card.jsx b/docs/components/Card.jsx new file mode 100644 index 00000000000000..56f25958011d7d --- /dev/null +++ b/docs/components/Card.jsx @@ -0,0 +1,50 @@ +import React from "react"; +import clsx from "clsx"; +import Link from "@docusaurus/Link"; +import styles from "../src/pages/styles.module.css"; +import Translate from "@docusaurus/Translate"; + +function Card({ to, header, body, externalIcon = false }) { + /* + Both the `header` and `body` expect an object with the following type + header = { + label: String, // + translateId: String // + } + */ + + return ( +
    + +
    +

    + + {header.label} + + {externalIcon && ( + + )} +

    +
    +
    +

    + {body.label} +

    +
    + +
    + ); +} + +export default Card; diff --git a/docs/docusaurus.config.js b/docs/docusaurus.config.js index 0735f62839e60c..088f7ca7bdffff 100644 --- a/docs/docusaurus.config.js +++ b/docs/docusaurus.config.js @@ -53,29 +53,45 @@ module.exports = { }, items: [ { - href: "https://spl.solana.com", - label: "Program Library »", + to: "introduction", + label: "Learn", position: "left", }, { - to: "developing/programming-model/overview", - label: "Develop", + to: "cluster/overview", + label: "Architecture", position: "left", }, { - to: "running-validator", - label: "Validate", + to: "cli", + label: "CLI", position: "left", }, { - to: "integrations/exchange", - label: "Integrate", + to: "/developers", + label: "Developers", position: "left", }, { - to: "cluster/overview", - label: "Learn", + to: "running-validator", + label: "Validators", + position: "left", + }, + { + label: "More", position: "left", + items: [ + { label: "Terminology", to: "terminology" }, + { label: "Staking", to: "staking" }, + { label: "Integrations", to: "integrations/exchange" }, + { label: "Economics", to: "economics_overview" }, + { label: "Proposals", to: "proposals" }, + { + href: "https://spl.solana.com", + label: "Solana Program Library »", + position: "left", + }, + ], }, { type: "localeDropdown", @@ -83,12 +99,16 @@ module.exports = { }, { href: "https://discordapp.com/invite/pquxPsq", - label: "Chat", + // label: "Discord", + className: "header-link-icon header-discord-link", + "aria-label": "Solana Discord", position: "right", }, { href: "https://github.com/solana-labs/solana", - label: "GitHub", + // label: "GitHub", + className: "header-link-icon header-github-link", + "aria-label": "GitHub repository", position: "right", }, ], @@ -103,37 +123,69 @@ module.exports = { style: "dark", links: [ { - title: "Docs", + title: "Documentation", items: [ { - label: "Introduction", + label: "Learn", to: "introduction", }, + { + label: "Developers", + to: "/developers", + }, + { + label: "Validators", + to: "running-validator", + }, + { + label: "Command Line", + to: "cli", + }, + { + label: "Architecture", + to: "cluster/overview", + }, ], }, { title: "Community", items: [ { - label: "Discord", + label: "Stack Exchange »", + href: "https://solana.stackexchange.com/", + }, + { + label: "GitHub »", + href: "https://github.com/solana-labs/solana", + }, + { + label: "Discord »", href: "https://discordapp.com/invite/pquxPsq", }, { - label: "Twitter", + label: "Twitter »", href: "https://twitter.com/solana", }, { - label: "Forums", + label: "Forums »", href: "https://forums.solana.com", }, ], }, { - title: "More", + title: "Resources", items: [ { - label: "GitHub", - href: "https://github.com/solana-labs/solana", + label: "Proposals", + to: "proposals", + }, + { + label: "Integrations", + to: "integrations/exchange", + }, + { + href: "https://spl.solana.com", + label: "Solana Program Library »", }, ], }, diff --git a/docs/layouts/CardLayout.js b/docs/layouts/CardLayout.js new file mode 100644 index 00000000000000..6c95b218b654d9 --- /dev/null +++ b/docs/layouts/CardLayout.js @@ -0,0 +1,87 @@ +import React from "react"; +import Layout from "@theme/Layout"; +import DocSidebar from "@theme/DocSidebar"; +import ThemeClassNames from "@docusaurus/theme-classic/lib/theme/DocPage/styles.module.css"; +import sidebar from "../sidebars"; + +function CardLayout({ + children, + sidebarKey = false, + title = "", + description = "", + path = "", +}) { + // load the sidebar item from the master `sidebars.js` file + const sidebarItems = (sidebarKey && sidebar?.[sidebarKey]) || []; + + // process each of the loaded sidebar items for formatting + if (sidebarItems?.length) { + Object.keys(sidebarItems).forEach((key) => { + if (sidebarItems[key]?.type?.toLowerCase() === "category") { + for (let i = 0; i < sidebarItems[key]?.items?.length; i++) + sidebarItems[key].items[i] = formatter(sidebarItems[key].items[i]); + sidebarItems[key].collapsed = true; + } else sidebarItems[key] = formatter(sidebarItems[key]); + }); + } + + // return the page layout, ready to go + return ( + +
    + {sidebarItems?.length > 0 && ( + + )} + +
    {children}
    +
    +
    + ); +} +export default CardLayout; + +/* + Create a simple label based on the string of a doc file path +*/ +const computeLabel = (label) => { + label = label.split("/"); + label = label[label?.length - 1]?.replace("-", " "); + label = label.charAt(0).toUpperCase() + label.slice(1); + return label && label; +}; + +/* + Parser to format a sidebar item to be compatible with the `DocSidebar` component +*/ +const formatter = (item) => { + // handle string only document ids + if (typeof item === "string") { + item = { + type: "link", + href: item, + label: computeLabel(item) || item || "[unknown label]", + }; + } + + // handle object style docs + else if (item?.type?.toLowerCase() === "doc") { + item.type = "link"; + item.href = item.id; + item.label = item.label || computeLabel(item.href) || "[unknown label]"; + delete item.id; + } + + // fix for local routing that does not specify starting at the site root + if ( + !( + item?.href.startsWith("/") || + item?.href.startsWith("http:") || + item?.href.startsWith("https") + ) + ) + item.href = `/${item?.href}`; + + return item; +}; diff --git a/docs/publish-docs.sh b/docs/publish-docs.sh index c16425818819d1..898fd415f59f86 100755 --- a/docs/publish-docs.sh +++ b/docs/publish-docs.sh @@ -30,21 +30,22 @@ cat > "$CONFIG_FILE" <2 years of rent are rent exempt and do not pay the periodic fee." +keywords: "" +--- + +The fee every Solana Account to store data on the blockchain is called "_rent_". This _time and space_ based fee is required to keep an account, and its therefore its data, alive on the blockchain since [clusters](../../cluster/overview.md) must actively maintain this data. + +All Solana Accounts (and therefore Programs) are required to maintain a high enough LAMPORT balance to become [rent exempt](#rent-exempt) and remain on the Solana blockchain. + +When an Account no longer has enough LAMPORTS to pay its rent, it will be removed from the network in a process known as [Garbage Collection](#garbage-collection). + +> **Note:** Rent is different from [transactions fees](../../transaction_fees.md). Rent is paid (or held in an Account) to keep data stored on the Solana blockchain. Where as transaction fees are paid to process [instructions](../developing/../programming-model/transactions.md#instructions) on the network. + +### Rent rate + +The Solana rent rate is set on a network wide basis, primarily based on the set LAMPORTS _per_ byte _per_ year. + +Currently, the rent rate is a static amount and stored in the the [Rent sysvar](../runtime-facilities/sysvars.md#rent). + +## Rent exempt + +Accounts that maintain a minimum LAMPORT balance greater than 2 years worth of rent payments are considered "_rent exempt_" and will not incur a rent collection. + +> At the time of writing this, new Accounts and Programs **are required** to be initialized with enough LAMPORTS to become rent-exempt. The RPC endpoints have the ability to calculate this [estimated rent exempt balance](../clients/jsonrpc-api.md#getminimumbalanceforrentexemption) and is recommended to be used. + +Every time an account's balance is reduced, a check is performed to see if the account is still rent exempt. Transactions that would cause an account's balance to drop below the rent exempt threshold will fail. + +## Garbage collection + +Accounts that do not maintain their rent exempt status, or have a balance high enough to pay rent, are removed from the network in a process known as _garbage collection_. This process is done to help reduce the network wide storage of no longer used/maintained data. + +You can learn more about [garbage collection here](../../implemented-proposals/persistent-account-storage.md#garbage-collection) in this implemented proposal. + +## Learn more about Rent + +You can learn more about Solana Rent with the following articles and documentation: + +- [Implemented Proposals - Rent](../../implemented-proposals/rent.md) +- [Implemented Proposals - Account Storage](../../implemented-proposals/persistent-account-storage.md) diff --git a/docs/src/developing/on-chain-programs/debugging.md b/docs/src/developing/on-chain-programs/debugging.md index a9ded2bd31cb7c..d673ab23a33f64 100644 --- a/docs/src/developing/on-chain-programs/debugging.md +++ b/docs/src/developing/on-chain-programs/debugging.md @@ -1,5 +1,5 @@ --- -title: "Debugging" +title: "Debugging Programs" --- Solana programs run on-chain, so debugging them in the wild can be challenging. diff --git a/docs/src/developing/on-chain-programs/deploying.md b/docs/src/developing/on-chain-programs/deploying.md index 767d6d114bea94..852e8a195f863d 100644 --- a/docs/src/developing/on-chain-programs/deploying.md +++ b/docs/src/developing/on-chain-programs/deploying.md @@ -1,5 +1,5 @@ --- -title: "Deploying" +title: "Deploying Programs" --- ![SDK tools](/img/sdk-tools.svg) @@ -11,7 +11,7 @@ clients via a _program ID_. The program ID is an _address_ specified when deploying and is used to reference the program in subsequent transactions. Upon a successful deployment the account that holds the program is marked -executable. If the program is marked "final", its account data become permanently +executable. If the program is marked "final", its account data become permanently immutable. If any changes are required to the finalized program (features, patches, etc...) the new program must be deployed to a new program ID. diff --git a/docs/src/developing/on-chain-programs/developing-c.md b/docs/src/developing/on-chain-programs/developing-c.md index df1d551f13e117..52469efcd7e09b 100644 --- a/docs/src/developing/on-chain-programs/developing-c.md +++ b/docs/src/developing/on-chain-programs/developing-c.md @@ -33,8 +33,7 @@ for an example of a C program. First setup the environment: - Install the latest Rust stable from https://rustup.rs -- Install the latest Solana command-line tools from - https://docs.solana.com/cli/install-solana-cli-tools +- Install the latest [Solana command-line tools](../../cli/install-solana-cli-tools.md) Then build using make: diff --git a/docs/src/developing/on-chain-programs/developing-rust.md b/docs/src/developing/on-chain-programs/developing-rust.md index ee948933cc8f03..b6406902b3232f 100644 --- a/docs/src/developing/on-chain-programs/developing-rust.md +++ b/docs/src/developing/on-chain-programs/developing-rust.md @@ -59,8 +59,7 @@ For example: First setup the environment: - Install the latest Rust stable from https://rustup.rs/ -- Install the latest Solana command-line tools from - https://docs.solana.com/cli/install-solana-cli-tools +- Install the latest [Solana command-line tools](../../cli/install-solana-cli-tools.md) The normal cargo build is available for building programs against your host machine which can be used for unit testing: diff --git a/docs/src/developing/on-chain-programs/examples.md b/docs/src/developing/on-chain-programs/examples.md index d1d6adb4b03672..ef07c7b8b4cc9f 100644 --- a/docs/src/developing/on-chain-programs/examples.md +++ b/docs/src/developing/on-chain-programs/examples.md @@ -1,5 +1,5 @@ --- -title: "Examples" +title: "Program Examples" --- ## Helloworld diff --git a/docs/src/developing/programming-model/runtime.md b/docs/src/developing/programming-model/runtime.md index f0d402508808da..ac8284b723d92e 100644 --- a/docs/src/developing/programming-model/runtime.md +++ b/docs/src/developing/programming-model/runtime.md @@ -49,7 +49,9 @@ To prevent abuse of computational resources, each transaction is allocated a compute budget. The budget specifies a maximum number of compute units that a transaction can consume, the costs associated with different types of operations the transaction may perform, and operational bounds the transaction must adhere -to. As the transaction is processed compute units are consumed by its +to. + +As the transaction is processed compute units are consumed by its instruction's programs performing operations such as executing BPF instructions, calling syscalls, etc... When the transaction consumes its entire budget, or exceeds a bound such as attempting a call stack that is too deep, the runtime @@ -71,11 +73,11 @@ budget, or exceeds a bound, the entire invocation chain and the top level transaction processing are halted. The current [compute -budget](https://github.com/solana-labs/solana/blob/090e11210aa7222d8295610a6ccac4acda711bb9/program-runtime/src/compute_budget.rs#L26-L87) +budget](https://github.com/solana-labs/solana/blob/090e11210aa7222d8295610a6ccac4acda711bb9/program-runtime/src/compute_budget.rs#L26-L87) can be found in the Solana Program Runtime. -can be found in the Solana Program Runtime. +#### Example Compute Budget -For example, if the current budget is: +For example, if the compute budget set in the Solana runtime is: ```rust max_units: 1,400,000, @@ -89,21 +91,23 @@ log_pubkey_units: 100, ... ``` -Then the transaction +Then any transaction: - Could execute 1,400,000 BPF instructions, if it did nothing else. - Cannot exceed 4k of stack usage. - Cannot exceed a BPF call depth of 64. - Cannot exceed 4 levels of cross-program invocations. -Since the compute budget is consumed incrementally as the transaction executes, -the total budget consumption will be a combination of the various costs of the -operations it performs. +> **NOTE:** Since the compute budget is consumed incrementally as the transaction executes, +> the total budget consumption will be a combination of the various costs of the +> operations it performs. At runtime a program may log how much of the compute budget remains. See [debugging](developing/on-chain-programs/debugging.md#monitoring-compute-budget-consumption) for more information. +### Prioritization fees + A transaction may set the maximum number of compute units it is allowed to consume and the compute unit price by including a `SetComputeUnitLimit` and a `SetComputeUnitPrice` @@ -112,20 +116,19 @@ respectively. If no `SetComputeUnitLimit` is provided the limit will be calculated as the product of the number of instructions in the transaction (excluding the [Compute -budget -instructions](https://github.com/solana-labs/solana/blob/db32549c00a1b5370fcaf128981ad3323bbd9570/sdk/src/compute_budget.rs#L22)) -and the default per-instruction units, which is currently 200k. - -Note that a transaction's prioritization fee is calculated by multiplying the -number of compute units by the compute unit price (measured in micro-lamports) -set by the transaction via compute budget instructions. So transactions should -request the minimum amount of compute units required for execution to minimize +budget instructions](https://github.com/solana-labs/solana/blob/db32549c00a1b5370fcaf128981ad3323bbd9570/sdk/src/compute_budget.rs#L22)) and the default per-instruction units, which is currently 200k. + +> **NOTE:** A transaction's [prioritization fee](./../../terminology.md#prioritization-fee) is calculated by multiplying the +> number of _compute units_ by the _compute unit price_ (measured in micro-lamports) +> set by the transaction via compute budget instructions. + +Transactions should request the minimum amount of compute units required for execution to minimize fees. Also note that fees are not adjusted when the number of requested compute units exceeds the number of compute units actually consumed by an executed transaction. Compute Budget instructions don't require any accounts and don't consume any -compute units to process. Transactions can only contain one of each type of +compute units to process. Transactions can only contain one of each type of compute budget instruction, duplicate types will result in an error. The `ComputeBudgetInstruction::set_compute_unit_limit` and diff --git a/docs/src/developing/programming-model/transactions.md b/docs/src/developing/programming-model/transactions.md index c93dd80de62755..42e6ca2d23762a 100644 --- a/docs/src/developing/programming-model/transactions.md +++ b/docs/src/developing/programming-model/transactions.md @@ -202,7 +202,7 @@ found in [Accounts](accounts.md#signers) ## Recent Blockhash -A transaction includes a recent [blockhash](terminology.md#blockhash) to prevent +A transaction includes a recent [blockhash](../../terminology.md#blockhash) to prevent duplication and to give transactions lifetimes. Any transaction that is completely identical to a previous one is rejected, so adding a newer blockhash allows multiple transactions to repeat the exact same action. Transactions also diff --git a/docs/src/getstarted/hello-world.md b/docs/src/getstarted/hello-world.md new file mode 100644 index 00000000000000..f397c75f9d0eeb --- /dev/null +++ b/docs/src/getstarted/hello-world.md @@ -0,0 +1,287 @@ +--- +title: "Hello World Quickstart Guide" +description: 'This "hello world" quickstart guide will demonstrate how to setup, build, and deploy your first Solana program in your browser with Solana Playground.' +keywords: "playground, solana pg, on chain, rust, native program, tutorial, intro to solana development, blockchain developer, blockchain tutorial, web3 developer" +--- + +For this "hello world" quickstart guide, we will use [Solana Playground](https://beta.solpg.io), a browser the based IDE, to develop and deploy our Solana program. To use it, you do **NOT** have to install any software on your computer. Simply open Solana Playground in your browser of choice, and you are ready to write and deploy Solana programs. + +## What you will learn + +- How to get started with Solana Playground +- How to create a Solana wallet on Playground +- How to program a basic Solana program in Rust +- How to build and deploy a Solana Rust program +- How to interact with your on chain program using JavaScript + +## Using Solana Playground + +[Solana Playground](https://beta.solpg.io) is browser based application that will let you write, build, and deploy on chain Solana programs. All from your browser. No installation needed. + +It is a great developer resources for getting started with Solana development, especially on Windows. + +### Import our example project + +In a new tab in your browser, open our example "_Hello World_" project on Solana Playground: https://beta.solpg.io/6314a69688a7fca897ad7d1d + +Next, import the project into your local workspace by clicking the "**Import**" icon and naming your project `hello_world`. + +![Import the get started Solana program on Solana Playground](/img/quickstarts/solana-get-started-import-on-playground.png) + +> If you do **not** import the program into **your** Solana Playground, then you will **not** be able to make changes to the code. But you **will** still be able to build and deploy the code to a Solana cluster. + +### Create a Playground wallet + +Normally with [local development](./local.md), you will need to create a file system wallet for use with the Solana CLI. But with the Solana Playground, you only need to click a few buttons to create a browser based wallet. + +> **Note:** +> Your _Playground Wallet_ will be saved in your browser's local storage. Clearing your browser cache will remove your saved wallet. When creating a new wallet, you will have the option to save a local copy of your wallet's keypair file. + +Click on the red status indicator button at the bottom left of the screen, (optionally) save your wallet's keypair file to your computer for backup, then click "**Continue**". + +After your Playground Wallet is created, you will notice the bottom of the window now states your wallet's address, your SOL balance, and the Solana cluster you are connected to (Devnet is usually the default/recommended, but a "localhost" [test validator](./local.md) is also acceptable). + +## Create a Solana program + +The code for your Rust based Solana program will live in your `src/lib.rs` file. Inside `src/lib.rs` you will be able to import your Rust crates and define your logic. Open your `src/lib.rs` file within Solana Playground. + +### Import the `solana_program` crate + +At the top of `lib.rs`, we import the `solana-program` crate and bring our needed items into the local namespace: + +```rust +use solana_program::{ + account_info::AccountInfo, + entrypoint, + entrypoint::ProgramResult, + pubkey::Pubkey, + msg, +}; +``` + +### Write your program logic + +Every Solana program must define an `entrypoint` that tells the Solana runtime where to start executing your on chain code. Your program's [entrypoint](../developing/on-chain-programs/developing-rust#program-entrypoint) should provide a public function named `process_instruction`: + +```rust +// declare and export the program's entrypoint +entrypoint!(process_instruction); + +// program entrypoint's implementation +pub fn process_instruction( + program_id: &Pubkey, + accounts: &[AccountInfo], + instruction_data: &[u8] +) -> ProgramResult { + // log a message to the blockchain + msg!("Hello, world!"); + + // gracefully exit the program + Ok(()) +} +``` + +Every on chain program should return the `Ok` [result enum](https://doc.rust-lang.org/std/result/) with a value of `()`. This tells the Solana runtime that your program executed successfully without errors. + +Our program above will simply [log a message](../developing/on-chain-programs/debugging#logging) of "_Hello, world!_" to the blockchain cluster, then gracefully exit with `Ok(())`. + +### Build your program + +On the left sidebar, select the "**Build & Deploy**" tab. Next, click the "Build" button. + +If you look at the Playground's terminal, you should see your Solana program begin to compile. Once complete, you will see a success message. + +![Viewing a successful build of your Rust based program](/img/quickstarts/solana-get-started-successful-build.png) + +> Note: +> You may receive _warning_ when your program is compiled due to unused variables. Don't worry, these warning will not affect your build. They are due to our very simple program not using all the variables we declared in the `process_instruction` function. + +### Deploy your program + +You can click the "Deploy" button to deploy your first program to the Solana blockchain. Specifically to your selected cluster (e.g. Devnet, Testnet, etc). + +After each deployment, you will see your Playground Wallet balance change. By default, Solana Playground will automatically request SOL airdrops on your behalf to ensure your wallet has enough SOL to cover the cost of deployment. + +![Build and deploy your Solana program to the blockchain](/img/quickstarts/solana-get-started-build-and-deploy.png) + +### Find your program id + +When executing a program using [web3.js](../developing/clients/javascript-reference.md) or from [another Solana program](../developing/programming-model/calling-between-programs.md), you will need to provide the `program id` (aka public address of your program). + +Inside Solana Playground's **Build & Deploy** sidebar, you can find your `program id` under the **Program Credentials** dropdown. + +#### Congratulations! + +You have successfully setup, built, and deployed a Solana program using the Rust language directly in your browser. Next, we will demonstrate how to interact with your on chain program. + +## Interact with your on chain program + +Once you have successfully deployed a Solana program to the blockchain, you will want to be able to interact with that program. + +Like most developers creating dApps and websites, we will interact with our on chain program using JavaScript inside a NodeJS application. Specifically, will use the open source [NPM package](https://www.npmjs.com/package/@solana/web3.js) `@solana/web3.js` to aid in our client application. + +> **NOTE:** +> This web3.js package is an abstraction layer on top of the [JSON RPC API](./../developing/clients/jsonrpc-api.md) that reduced the need for rewriting common boilerplate, helping to simplify your client side application code. + +### Initialize a new Node project + +For a simple client application for our on chain program, create a new folder for the Node project to live: + +```bash +mkdir hello_world && cd hello_world +``` + +Initialize a new Node project on you local computer: + +```bash +npm init -y +# or +yarn init -y +``` + +To easily interact with the Solana blockchain, add the [`@solana/web3.js`](../developing/clients/javascript-api.md) package to your Node project: + +```bash +npm i @solana/web3.js +# or +yarn add @solana/web3.js +``` + +Create a new file named `app.js` and open it in your favorite code editor. This is where we will work for the rest of our `hello world` program. + +### Connect to the cluster + +Import the `@solana/web3.js` library into your project so we can use all the JSON RPC helper functions that are built into it: + +```js +// import the Solana web3.js library +const web3 = require("@solana/web3.js"); +``` + +We will also define the `SOLANA_CLUSTER` your program was deployed as well as the `PROGRAM_ID` of your new program: + +```js +// define our program ID and cluster to interact with +const SOLANA_CLUSTER = "devnet"; +const PROGRAM_ID = "5AQaXHRKmoZMuBem544ELfEAN2qe2y9PU8nnezvpgeP7"; +``` + +Next we will need to create a `connection` to the specific cluster we deployed our program to: + +```js +// create a new connection to the Solana blockchain +const connection = new web3.Connection(web3.clusterApiUrl(SOLANA_CLUSTER)); +``` + +### Create and fund a wallet for testing + +In order to submit [transactions](../developing/programming-model/transactions.md) to a Solana cluster, you will need to have a wallet that will pay for the cost of execution. For simplicity, we will generate a dummy "throw away" wallet (and fund it with SOL) for our sample `hello_world` program named `payer` + +```js +// create a "throw away" wallet for testing +let payer = web3.Keypair.generate(); +console.log("Generated payer address:", payer.publicKey.toBase58()); + +// fund the "throw away" wallet via an airdrop +console.log("Requesting airdrop..."); +let airdropSignature = await connection.requestAirdrop( + payer.publicKey, + web3.LAMPORTS_PER_SOL, +); + +// wait for the airdrop to be completed +await connection.confirmTransaction(airdropSignature); + +// log the signature to the console +console.log( + "Airdrop submitted:", + `https://explorer.solana.com/tx/${airdropSignature}?cluster=${SOLANA_CLUSTER}`, +); +``` + +> You will notice that we are logging a URL of the Solana Explorer to the console. This will help us view our transaction on the blockchain when we run our Node application. + +### Create and send a transaction + +To execute your on chain program, you must send a [transaction](../developing/programming-model/transactions.md) to it. Each transaction submitted to the Solana blockchain contains a listing of instructions (and the program's that instruction will interact with). + +Here we create a new transaction and add a single `instruction` to it: + +```js +// create an empty transaction +const transaction = new web3.Transaction(); + +// add a single instruction to the transaction +transaction.add( + new web3.TransactionInstruction({ + keys: [ + { + pubkey: payer.publicKey, + isSigner: true, + isWritable: false, + }, + { + pubkey: web3.SystemProgram.programId, + isSigner: false, + isWritable: false, + }, + ], + programId: new web3.PublicKey(PROGRAM_ID), + }), +); +``` + +Each `instruction` must include all the keys involved in the operation and the program ID we want to execute. In this example, our `keys` contain the `payer` (that we created earlier to pay for the execution) and the [System Program](../developing/runtime-facilities/programs#system-program) (which is required for all program execution). + +With our transaction created, we can submit it to the cluster (via our `connection`): + +```js +// submit the transaction to the cluster +console.log("Sending transaction..."); +let txid = await web3.sendAndConfirmTransaction(connection, transaction, [ + payer, +]); +console.log( + "Transaction submitted:", + `https://explorer.solana.com/tx/${txid}?cluster=${SOLANA_CLUSTER}`, +); +``` + +### Run our application + +With our Node application written, you can run the code via the command line: + +```bash +node app.js +``` + +Once your Node application completes, you will see output similar to this: + +```bash +Generated payer address: 8fBnnMz2SLBcmrsrvWBAt91kSPAWRTkjbrVPJqDcxq2s +Requesting airdrop... +Airdrop complete: https://explorer.solana.com/tx/38EXqADsgAj1yNpcTDRwC66HooW1d9mk9PMnPP9V8JbsokZPuWZhP3W9EaixXhPFoBXVQk1NQ2otCs5W1ukt73Hc?cluster=devnet +Sending transaction... +Transaction submitted: https://explorer.solana.com/tx/3gv6uAkyDoLZR94hcMf3fDiwnDNN9rrdXos9rmMmok2xJtaW9NKehYKqSspxVH2HpAK7WHfRYQfsyuzr9gguzf2j?cluster=devnet +``` + +> View this example transaction on Solana explorer: https://explorer.solana.com/tx/3gv6uAkyDoLZR94hcMf3fDiwnDNN9rrdXos9rmMmok2xJtaW9NKehYKqSspxVH2HpAK7WHfRYQfsyuzr9gguzf2j?cluster=devnet + +Using the Solana explorer link for your "submitted transaction", you can view the message our program logged on chain, via `msg!("Hello, world!")`, in the "**Program Instruction Logs**" section of the Solana Explorer. + +![View the on chain instruction logs via Solana explorer](/img/quickstarts/solana-get-started-view-logs-on-explorer.png) + +#### Congratulations!!! + +You have now written a client application for your on chain program. You are now a Solana developer! + +PS: Try to update your program's message then re-build, re-deploy, and re-execute your program. + +## Next steps + +See the links below to learn more about writing Solana programs: + +- [Setup your local development environment](./local.md) +- [Overview of writing Solana programs](../developing/on-chain-programs/overview) +- [Learn more about developing Solana programs with Rust](../developing/on-chain-programs/developing-Rust) +- [Debugging on chain programs](../developing/on-chain-programs/debugging) diff --git a/docs/src/getstarted/local.md b/docs/src/getstarted/local.md new file mode 100644 index 00000000000000..cb93d936b99ce4 --- /dev/null +++ b/docs/src/getstarted/local.md @@ -0,0 +1,92 @@ +--- +title: "Local Development Quickstart" +description: "This quickstart guide will demonstrate how to quickly install and setup your local Solana development environment." +keywords: "rust, cargo, toml, program, tutorial, intro to solana development, blockchain developer, blockchain tutorial, web3 developer" +--- + +This quickstart guide will demonstrate how to quickly install and setup your local development environment, getting you ready to start developing and deploying Solana programs to the blockchain. + +## What you will learn + +- How to install the Solana CLI locally +- How to setup a localhost Solana cluster/validator +- How to create a Solana wallet for developing +- How to airdrop SOL tokens for your wallet + +## Install the Solana CLI + +To interact with the Solana clusters from your terminal, install the [Solana CLI tool suite](./../cli/install-solana-cli-tools) on your local system: + +```bash +sh -c "$(curl -sSfL https://release.solana.com/stable/install)" +``` + +## Setup a localhost blockchain cluster + +The Solana CLI comes with the [test validator](./../developing/test-validator.md) built in. This command line tool will allow you to run a full blockchain cluster on your machine. + +```bash +solana-test-validator +``` + +> **PRO TIP:** +> Run the Solana test validator in a new/separate terminal window that will remain open. The command line program must remain running for your localhost cluster to remain online and ready for action. + +Configure your Solana CLI to use your localhost validator for all your future terminal commands: + +```bash +solana config set --url localhost +``` + +At any time, you can view your current Solana CLI configuration settings: + +```bash +solana config get +``` + +## Create a file system wallet + +To deploy a program with Solana CLI, you will need a Solana wallet with SOL tokens to pay for the cost of transactions. + +Let's create a simple file system wallet for testing: + +```bash +solana-keygen new +``` + +By default, the `solana-keygen` command will create a new file system wallet located at `~/.config/solana/id.json`. You can manually specify the output file location using the `--outfile /path` option. + +> **NOTE:** +> If you already have a file system wallet saved at the default location, this command will **NOT** override it (unless you explicitly force override using the `--force` flag). + +#### Set your new wallet as default + +With your new file system wallet created, you must tell the Solana CLI to use this wallet to deploy and take ownership of your on chain program: + +```bash +solana config set -k ~/.config/solana/id.json +``` + +## Airdrop SOL tokens to your wallet + +Once your new wallet is set as the default, you can request a free airdrop of SOL tokens to it: + +```bash +solana airdrop 2 +``` + +> **NOTE:** +> The `solana airdrop` command has a limit of how many SOL tokens can be requested _per airdrop_ for each cluster (localhost, testnet, or devent). If your airdrop transaction fails, lower your airdrop request quantity and try again. + +You can check your current wallet's SOL balance any time: + +```bash +solana balance +``` + +## Next steps + +See the links below to learn more about writing Rust based Solana programs: + +- [Create and deploy a Solana Rust program](./rust.md) +- [Overview of writing Solana programs](../developing/on-chain-programs/overview) diff --git a/docs/src/getstarted/rust.md b/docs/src/getstarted/rust.md new file mode 100644 index 00000000000000..167580a97ec9b1 --- /dev/null +++ b/docs/src/getstarted/rust.md @@ -0,0 +1,147 @@ +--- +title: "Rust Program Quickstart" +description: "This quickstart guide will demonstrate how to quickly setup, build, and deploy your first Rust based Solana program to the blockchain." +keywords: "rust, cargo, toml, program, tutorial, intro to solana development, blockchain developer, blockchain tutorial, web3 developer" +--- + +Rust is the most common programming language to write Solana programs with. This quickstart guide will demonstrate how to quickly setup, build, and deploy your first Rust based Solana program to the blockchain. + +> **NOTE: ** +> This guide uses the Solana CLI and assumes you have setup your local development environment. Checkout our [local development quickstart guide](./local.md) here to quickly get setup. + +## What you will learn + +- How to install the Rust language locally +- How to initialize a new Solana Rust program +- How to code a basic Solana program in Rust +- How to build and deploy your Rust program + +## Install Rust and Cargo + +To be able to compile Rust based Solana programs, install the Rust language and Cargo (the Rust package manager) using [Rustup](https://rustup.rs/): + +```bash +curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh +``` + +## Run your localhost validator + +The Solana CLI comes with the [test validator](../developing/test-validator.md) built in. This command line tool will allow you to run a full blockchain cluster on your machine. + +```bash +solana-test-validator +``` + +> **PRO TIP:** +> Run the Solana test validator in a new/separate terminal window that will remain open. This command line program must remain running for your localhost validator to remain online and ready for action. + +Configure your Solana CLI to use your localhost validator for all your future terminal commands and Solana program deployment: + +```bash +solana config set --url localhost +``` + +## Create a new Rust library with Cargo + +Solana programs written in Rust are _libraries_ which are compiled to [BPF bytecode](../developing/on-chain-programs/overview#berkeley-packet-filter-bpf) and saved in the `.so` format. + +Initialize a new Rust library named `hello_world` via the Cargo command line: + +```bash +cargo init hello_world --lib +cd hello_world +``` + +Add the `solana-program` crate to your new Rust library: + +```bash +cargo add solana-program +``` + +Open your `Cargo.toml` file and add these required Rust library configuration settings, updating your project name as appropriate: + +```toml +[lib] +name = "hello_world" +crate-type = ["cdylib", "lib"] +``` + +## Create your first Solana program + +The code for your Rust based Solana program will live in your `src/lib.rs` file. Inside `src/lib.rs` you will be able to import your Rust crates and define your logic. Open your `src/lib.rs` file in your favorite editor. + +At the top of `lib.rs`, import the `solana-program` crate and bring our needed items into the local namespace: + +```rust +use solana_program::{ + account_info::AccountInfo, + entrypoint, + entrypoint::ProgramResult, + pubkey::Pubkey, + msg, +}; +``` + +Every Solana program must define an `entrypoint` that tells the Solana runtime where to start executing your on chain code. Your program's [entrypoint](../developing/on-chain-programs/developing-rust#program-entrypoint) should provide a public function named `process_instruction`: + +```rust +// declare and export the program's entrypoint +entrypoint!(process_instruction); + +// program entrypoint's implementation +pub fn process_instruction( + program_id: &Pubkey, + accounts: &[AccountInfo], + instruction_data: &[u8] +) -> ProgramResult { + // log a message to the blockchain + msg!("Hello, world!"); + + // gracefully exit the program + Ok(()) +} +``` + +Every on chain program should return the `Ok` [result enum](https://doc.rust-lang.org/std/result/) with a value of `()`. This tells the Solana runtime that your program executed successfully without errors. + +This program above will simply [log a message](../developing/on-chain-programs/debugging#logging) of "_Hello, world!_" to the blockchain cluster, then gracefully exit with `Ok(())`. + +## Build your Rust program + +Inside a terminal window, you can build your Solana Rust program by running in the root of your project (i.e. the directory with your `Cargo.toml` file): + +```bash +cargo build-bpf +``` + +> **NOTE:** +> After each time you build your Solana program, the above command will output the build path of your compiled program's `.so` file and the default keyfile that will be used for the program's address. + +## Deploy your Solana program + +Using the Solana CLI, you can deploy your program to your currently selected cluster: + +```bash +solana program deploy ./target/deploy/hello_world.so +``` + +Once your Solana program has been deployed (and the transaction [finalized](../cluster/commitments.md)), the above command will output your program's public address (aka its "program id"). + +```bash +# example output +Program Id: EFH95fWg49vkFNbAdw9vy75tM7sWZ2hQbTTUmuACGip3 +``` + +#### Congratulations! + +You have successfully setup, built, and deployed a Solana program using the Rust language. + +> PS: Check your Solana wallet's balance again after you deployed. See how much SOL it cost to deploy your simple program? + +## Next steps + +See the links below to learn more about writing Rust based Solana programs: + +- [Overview of writing Solana programs](../developing/on-chain-programs/overview) +- [Learn more about developing Solana programs with Rust](../developing/on-chain-programs/developing-Rust) +- [Debugging on chain programs](../developing/on-chain-programs/debugging) diff --git a/docs/src/implemented-proposals/commitment.md b/docs/src/implemented-proposals/commitment.md index a404aded2fe11f..3297dd9fe74bef 100644 --- a/docs/src/implemented-proposals/commitment.md +++ b/docs/src/implemented-proposals/commitment.md @@ -4,7 +4,7 @@ title: Commitment The commitment metric aims to give clients a measure of the network confirmation and stake levels on a particular block. Clients can then use this information to -derive their own measures of commitment. +derive their own [measures of commitment](../cluster/commitments.md). # Calculation RPC @@ -40,7 +40,7 @@ This computation is performed on a votable candidate bank `b` as follows. } ``` -where `f` is some accumulation function that modifies the `Stake` entry +Where `f` is some accumulation function that modifies the `Stake` entry for slot `a` with some data derivable from vote `v` and `vote_account` (stake, lockout, etc.). Note here that the `ancestors` here only includes slots that are present in the current status cache. Signatures for banks earlier diff --git a/docs/src/implemented-proposals/implemented-proposals.md b/docs/src/implemented-proposals/implemented-proposals.md index 52ecd71ee37473..5dd1bc16fe03d6 100644 --- a/docs/src/implemented-proposals/implemented-proposals.md +++ b/docs/src/implemented-proposals/implemented-proposals.md @@ -1,9 +1,15 @@ --- title: Implemented Design Proposals +sidebar_position: 1 +sidebar_label: Overview --- -The following architectural proposals have been accepted and implemented -by the Solana team. Any designs that may be subject to future change are noted -in the specific proposal page. -Design proposals that have been accepted but not yet implemented are found in -[Accepted Proposals](../proposals/accepted-design-proposals.md). +These architectural proposals have been accepted and implemented by the Solana maintainers. Any designs that may be subject to future change are noted in the specific proposal page. + +## Not Yet Implemented + +Design proposals that have been accepted but not yet implemented are found in [Accepted Proposals](../proposals/accepted-design-proposals.md). + +## Submit a New Proposal + +To submit a new design proposal, consult this guide on [how to submit a design proposal](../proposals.md#submit-a-design-proposal). diff --git a/docs/src/integrations/retrying-transactions.md b/docs/src/integrations/retrying-transactions.md index c8152ab1a0ee29..f3bf9f4f770d8f 100644 --- a/docs/src/integrations/retrying-transactions.md +++ b/docs/src/integrations/retrying-transactions.md @@ -7,7 +7,7 @@ title: Retrying Transactions On some occasions, a seemingly valid transaction may be dropped before it is included in a block. This most often occurs during periods of network congestion, when an RPC node fails to rebroadcast the transaction to the -[leader](https://docs.solana.com/terminology#leader). To an end-user, it may +[leader](../terminology#leader). To an end-user, it may appear as if their transaction disappears entirely. While RPC nodes are equipped with a generic rebroadcasting algorithm, application developers are also capable of developing their own custom rebroadcasting logic. @@ -25,6 +25,7 @@ Fact Sheet are submitted - Before re-signing any transaction, it is **very important** to ensure that the initial transaction’s blockhash has expired + ::: ## The Journey of a Transaction @@ -37,7 +38,7 @@ so that they can be processed into a block. There are two main ways in which a transaction can be sent to leaders: 1. By proxy via an RPC server and the - [sendTransaction](https://docs.solana.com/developing/clients/jsonrpc-api#sendtransaction) + [sendTransaction](../developing/clients/jsonrpc-api#sendtransaction) JSON-RPC method 2. Directly to leaders via a [TPU Client](https://docs.rs/solana-client/1.7.3/solana_client/tpu_client/index.html) @@ -50,9 +51,9 @@ outside of what the client and the relaying RPC nodes are aware of. In the case of a TPU client, rebroadcast and leader forwarding is handled entirely by the client software. -![Transaction Journey](/img/rt-tx-journey.png) +![Transaction Journey](../../static/img/rt-tx-journey.png) - + ### How RPC Nodes Broadcast Transactions @@ -64,7 +65,7 @@ communicate with one another, but does not provide any guarantees regarding transaction delivery. Because Solana’s leader schedule is known in advance of every -[epoch](https://docs.solana.com/terminology#epoch) (~2 days), an RPC node will +[epoch](../terminology#epoch) (~2 days), an RPC node will broadcast its transaction directly to the current and next leaders. This is in contrast to other gossip protocols such as Ethereum that propagate transactions randomly and broadly across the entire network. By default, RPC nodes will try @@ -89,7 +90,7 @@ The TPU processes transactions in five distinct phases: - [Proof of History Service](https://github.com/solana-labs/solana/blob/cd6f931223181d5a1d47cba64e857785a175a760/poh/src/poh_service.rs) - [Broadcast Stage](https://github.com/solana-labs/solana/blob/cd6f931223181d5a1d47cba64e857785a175a760/core/src/tpu.rs#L136) -![TPU Overview](/img/rt-tpu-jito-labs.png) +![TPU Overview](../../static/img/rt-tpu-jito-labs.png) Of these five phases, the Fetch Stage is responsible for receiving transactions. Within the Fetch Stage, validators will categorize incoming transactions @@ -132,15 +133,15 @@ it is processed. The first scenario involves transactions that are submitted via an RPC pool. Occasionally, part of the RPC pool can be sufficiently ahead of the rest of the pool. This can cause issues when nodes within the pool are required to work together. In this example, the transaction’s -[recentBlockhash](https://docs.solana.com/developing/programming-model/transactions#recent-blockhash) +[recentBlockhash](../developing/programming-model/transactions#recent-blockhash) is queried from the advanced part of the pool (Backend A). When the transaction is submitted to the lagging part of the pool (Backend B), the nodes will not recognize the advanced blockhash and will drop the transaction. This can be detected upon transaction submission if developers enable -[preflight checks](https://docs.solana.com/developing/clients/jsonrpc-api#sendtransaction) +[preflight checks](../developing/clients/jsonrpc-api#sendtransaction) on `sendTransaction`. -![Dropped via RPC Pool](/img/rt-dropped-via-rpc-pool.png) +![Dropped via RPC Pool](../../static/img/rt-dropped-via-rpc-pool.png) Temporarily network forks can also result in dropped transactions. If a validator is slow to replay its blocks within the Banking Stage, it may end up @@ -150,7 +151,7 @@ minority fork. After the transaction is submitted, the cluster can then switch away from its minority fork before the transaction is processed. In this scenario, the transaction is dropped due to the blockhash not being found. -![Dropped due to Minority Fork (Before Processed)](/img/rt-dropped-minority-fork-pre-process.png) +![Dropped due to Minority Fork (Before Processed)](../../static/img/rt-dropped-minority-fork-pre-process.png) ### After a transaction is processed and before it is finalized @@ -162,7 +163,7 @@ would fail to reach consensus with the majority of validators that do not recognize the minority fork. At this time, the transaction would be dropped before it could be finalized. -![Dropped due to Minority Fork (After Processed)](/img/rt-dropped-minority-fork-post-process.png) +![Dropped due to Minority Fork (After Processed)](../../static/img/rt-dropped-minority-fork-post-process.png) ## Handling Dropped Transactions @@ -189,7 +190,7 @@ the transaction will be processed or finalized by the cluster. - `skipPreflight`: `boolean` - if true, skip the preflight transaction checks (default: false) - (optional) `preflightCommitment`: `string` - - [Commitment](https://docs.solana.com/developing/clients/jsonrpc-api#configuring-state-commitment) + [Commitment](../developing/clients/jsonrpc-api#configuring-state-commitment) level to use for preflight simulations against the bank slot (default: "finalized"). - (optional) `encoding`: `string` - Encoding used for the transaction data. @@ -203,8 +204,9 @@ Response - `transaction id`: `string` - First transaction signature embedded in the transaction, as base-58 encoded string. This transaction id can be used with - [getSignatureStatuses](https://docs.solana.com/developing/clients/jsonrpc-api#getsignaturestatuses) + [getSignatureStatuses](../developing/clients/jsonrpc-api#getsignaturestatuses) to poll for status updates. + ::: ## Customizing Rebroadcast Logic @@ -217,9 +219,9 @@ developers to manually control the retry process A common pattern for manually retrying transactions involves temporarily storing the `lastValidBlockHeight` that comes from -[getLatestBlockhash](https://docs.solana.com/developing/clients/jsonrpc-api#getlatestblockhash). +[getLatestBlockhash](../developing/clients/jsonrpc-api#getlatestblockhash). Once stashed, an application can then -[poll the cluster’s blockheight](https://docs.solana.com/developing/clients/jsonrpc-api#getblockheight) +[poll the cluster’s blockheight](../developing/clients/jsonrpc-api#getblockheight) and manually retry the transaction at an appropriate interval. In times of network congestion, it’s advantageous to set `maxRetries` to 0 and manually rebroadcast via a custom algorithm. While some applications may employ an @@ -287,7 +289,7 @@ const sleep = async (ms: number) => { When polling via `getLatestBlockhash`, applications should specify their intended -[commitment](https://docs.solana.com/developing/clients/jsonrpc-api#configuring-state-commitment) +[commitment](../developing/clients/jsonrpc-api#configuring-state-commitment) level. By setting its commitment to `confirmed` (voted on) or `finalized` (~30 blocks after `confirmed`), an application can avoid polling a blockhash from a minority fork. @@ -329,6 +331,6 @@ In Solana, a dropped transaction can be safely discarded once the blockhash it references is older than the `lastValidBlockHeight` received from `getLatestBlockhash`. Developers should keep track of this `lastValidBlockHeight` by querying -[`getEpochInfo`](https://docs.solana.com/developing/clients/jsonrpc-api#getepochinfo) +[`getEpochInfo`](../developing/clients/jsonrpc-api#getepochinfo) and comparing with `blockHeight` in the response. Once a blockhash is invalidated, clients may re-sign with a newly-queried blockhash. diff --git a/docs/src/pages/developers.js b/docs/src/pages/developers.js new file mode 100644 index 00000000000000..b73d5080698b94 --- /dev/null +++ b/docs/src/pages/developers.js @@ -0,0 +1,184 @@ +import React from "react"; +import Link from "@docusaurus/Link"; +import styles from "./styles.module.css"; +import Card from "../../components/Card"; +import CardLayout from "../../layouts/CardLayout"; + +function Developers() { + return ( + +
    +
    +
    +

    Learn Solana Development

    + +
    +

    + Build and deploy your first on chain Solana program directly in + your browser. +

    + + + Get Started + +
    +
    + +
    +

    Learn core concepts

    + +
    + + + + + +
    +
    + +
    +

    Learn through coding

    + +
    + + + + + +
    +
    + +
    +

    Setup your local development

    + +
    + + + + {/* future card to replace the RPC API card */} + {/* */} + + +
    +
    +
    +
    +
    + ); +} + +export default Developers; diff --git a/docs/src/pages/getstarted.jsx b/docs/src/pages/getstarted.jsx new file mode 100644 index 00000000000000..2e6857922d1d20 --- /dev/null +++ b/docs/src/pages/getstarted.jsx @@ -0,0 +1,126 @@ +import React from "react"; +import Link from "@docusaurus/Link"; +import styles from "./styles.module.css"; +import Card from "../../components/Card"; +import CardLayout from "../../layouts/CardLayout"; + +function GetStartedPage() { + return ( + +
    +
    +
    +

    Get started with Solana development

    + +
    +

    + Build and deploy your first on chain Solana program directly in + your browser. +

    + + + Get Started + +
    +
    + +
    +
    + + + + + +
    +
    + +
    +

    Community Resources

    + +
    + + + + + +
    +
    +
    +
    +
    + ); +} + +export default GetStartedPage; diff --git a/docs/src/pages/index.js b/docs/src/pages/index.js index ebf7b60a7a4ca5..80558d647048ec 100644 --- a/docs/src/pages/index.js +++ b/docs/src/pages/index.js @@ -1,154 +1,96 @@ import React from "react"; -import clsx from "clsx"; import Layout from "@theme/Layout"; -import Link from "@docusaurus/Link"; import useDocusaurusContext from "@docusaurus/useDocusaurusContext"; -// import useBaseUrl from "@docusaurus/useBaseUrl"; import styles from "./styles.module.css"; -import Translate from "@docusaurus/Translate"; -// import { translate } from "@docusaurus/Translate"; +import Card from "../../components/Card"; function Home() { const context = useDocusaurusContext(); const { siteConfig = {} } = context; + return (
    -
    - -
    -
    -

    - - ⛏ Start Building - -

    -
    -
    -

    - - Get started building your decentralized app or - marketplace. - -

    -
    -
    - -
    -
    - -
    -
    -

    - - 🎛 Run a Validator Node - -

    -
    -
    -

    - - Validate transactions, secure the network, and earn - rewards. - -

    -
    -
    - -
    -
    - -
    -
    -

    - - 🏛 Create an SPL Token - -

    -
    -
    -

    - - Launch your own SPL Token, Solana's equivalent of - ERC-20. - -

    -
    -
    - -
    -
    - -
    -
    -

    - - 🏦 Integrate an Exchange - -

    -
    -
    -

    - - Follow our extensive integration guide to ensure a - seamless user experience. - -

    -
    -
    - -
    -
    - -
    -
    -

    - - 📲 Manage a Wallet - -

    -
    -
    -

    - - Create a wallet, check your balance, and learn about - wallet options. - -

    -
    -
    - -
    -
    - -
    -
    -

    - - 🤯 Learn How Solana Works - -

    -
    -
    -

    - - Get a high-level understanding of Solana's - architecture. - -

    -
    -
    - -
    + + + + + + + + + + +
    diff --git a/docs/src/pages/styles.module.css b/docs/src/pages/styles.module.css index c9d1c5aea88454..677dc9b068636f 100644 --- a/docs/src/pages/styles.module.css +++ b/docs/src/pages/styles.module.css @@ -30,7 +30,7 @@ .features { display: flex; - align-items: center; + align-items: top; padding: 2rem 0; width: 100%; } @@ -39,3 +39,7 @@ height: 200px; width: 200px; } + +.iconExternalIcon { + margin-left: 0.5em; +} diff --git a/docs/src/proposals.md b/docs/src/proposals.md new file mode 100644 index 00000000000000..d2a6e9a3255ce4 --- /dev/null +++ b/docs/src/proposals.md @@ -0,0 +1,49 @@ +--- +title: System Design Proposals +--- + +Changes to the Solana architecture are performed through a public proposal process (via pull requests) on the [Solana GitHub repository](https://github.com/solana-labs/solana). New proposals should be submitted with the "[Submit a Design Proposal](#submit-a-design-proposal)" guide below. + +There are currently two different states of these design proposals: + +1. [Accepted Proposals](./proposals/accepted-design-proposals.md) +2. [Implemented Proposals](./implemented-proposals/implemented-proposals.md) + +## Accepted Proposals + +These architectural proposals have been accepted by the Solana team, but are not yet fully implemented. + +Each proposal may be implemented as described, implemented differently as issues in the designs become evident, or not implemented at all. If implemented, the proposal will be moved to [Implemented Proposals](./implemented-proposals/implemented-proposals.md) and the details will be added to relevant sections of the docs. + +## Implemented Proposals + +These architectural proposals have been accepted and implemented by the Solana team. + +Any designs that may be subject to future change are noted in their specific proposal page. + +## Submit a Design Proposal + +To submit a new design proposal for Solana: + +1. Propose a design by creating a PR that adds a markdown document to the `docs/src/proposals` directory. +2. Add any relevant Solana maintainers to the PR review. +3. Publish the PR for community review and feedback. + +> **NOTE:** All people submitting PRs to the Solana repo should consult the [CONTRIBUTING](https://github.com/solana-labs/solana/blob/master/CONTRIBUTING.md) doc in the repo. + +### After Accepted + +Once a design proposal has been accepted, the PR will be merged into the `master` branch of the Solana repo. This also signifies the maintainers support your plan of attack. + +> **NOTE:** The merging of the PR will **automatically** create a link in the "Accepted Proposals" table of contents sidebar. +> Once approved, continue to submit PRs that implement the proposal. When the implementation reveals the need for tweaks to the proposal, be sure to update the "accepted proposal" document and have these change reviewed by the same approving maintainers. + +### After Implemented + +After a proposal has been fully implemented into the Solana architecture, a PR should be created to perform the following: + +1. Move the newly implemented proposal file from `docs/src/proposals` to `docs/src/implemented-proposals` +2. Create a new redirect in the `publish-docs.sh` to redirect the old `accepted` proposal page to the new `implemented-proposal` page +3. Publish the PR + +> **NOTE:** Moving the proposal document into the `implemented-proposals` directory will **automatically** move the link in the "Accepted Proposals" table of contents sidebar to the "Implemented Proposals" sidebar. diff --git a/docs/src/proposals/accepted-design-proposals.md b/docs/src/proposals/accepted-design-proposals.md index 98f197da4eddf4..e2145d26b656b1 100644 --- a/docs/src/proposals/accepted-design-proposals.md +++ b/docs/src/proposals/accepted-design-proposals.md @@ -1,11 +1,15 @@ --- title: Accepted Design Proposals +sidebar_position: 1 +sidebar_label: Overview --- -The following architectural proposals have been accepted by the Solana team, -but are not yet fully implemented. -The proposals may be implemented as described, implemented differently as -issues in the designs become evident, or not implemented at all. -If implemented, the proposal will be moved to -[Implemented Proposals](../implemented-proposals/implemented-proposals.md) -and the details will be added to relevant sections of the docs. +These architectural proposals have been accepted by the Solana maintainers, but are not yet fully implemented. These proposals may be implemented as described, implemented differently as issues in the designs become evident, or not implemented at all. + +## After Implemented + +Once a proposal has been implemented, it will be moved to [Implemented Proposals](../implemented-proposals/implemented-proposals.md) and the details will be added to relevant sections of the docs. + +## Submit a New Proposal + +To submit a new design proposal, consult this guide on [how to submit a design proposal](../proposals.md#submit-a-design-proposal). diff --git a/docs/src/terminology.md b/docs/src/terminology.md index 2c22efb2bbdfa3..5145fd486748fe 100644 --- a/docs/src/terminology.md +++ b/docs/src/terminology.md @@ -1,8 +1,10 @@ --- title: Terminology +description: "Learn the essential terminology used thoughtout the Solana blockchain and development models." +keywords: "terms, dictionary, definitions, define, programming models" --- -The following terms are used throughout the documentation. +The following terms are used throughout the Solana documentation and development ecosystem. ## account @@ -12,9 +14,9 @@ Like an account at a traditional bank, a Solana account may hold funds called [l The key may be one of: -* an ed25519 public key -* a program-derived account address (32byte value forced off the ed25519 curve) -* a hash of an ed25519 public key with a 32 character string +- an ed25519 public key +- a program-derived account address (32byte value forced off the ed25519 curve) +- a hash of an ed25519 public key with a 32 character string ## account owner @@ -34,7 +36,7 @@ A contiguous set of [entries](#entry) on the ledger covered by a [vote](#ledger- ## blockhash -A unique value ([hash](#hash)) that identifies a record (block). Solana computes a blockhash from the last [entry id](#entry-id) of the block. +A unique value ([hash](#hash)) that identifies a record (block). Solana computes a blockhash from the last [entry id](#entry-id) of the block. ## block height @@ -52,17 +54,29 @@ The Solana program that owns and loads [BPF](developing/on-chain-programs/overvi A computer program that accesses the Solana server network [cluster](#cluster). +## commitment + +A measure of the network confirmation for the [block](#block). + ## cluster A set of [validators](#validator) maintaining a single [ledger](#ledger). +## compute budget + +The maximum number of [compute units](#compute-units) consumed per transaction. + +## compute units + +The smallest unit of measure for consumption of computational resources of the blockchain. + ## confirmation time The wallclock duration between a [leader](#leader) creating a [tick entry](#tick) and creating a [confirmed block](#confirmed-block). ## confirmed block -A [block](#block) that has received a [supermajority](#supermajority) of [ledger votes](#ledger-vote). +A [block](#block) that has received a [super majority](#supermajority) of [ledger votes](#ledger-vote). ## control plane @@ -90,7 +104,7 @@ An off-chain service that acts as a custodian for a user's private key. It typic ## entry -An entry on the [ledger](#ledger) either a [tick](#tick) or a [transactions entry](#transactions-entry). +An entry on the [ledger](#ledger) either a [tick](#tick) or a [transaction's entry](#transactions-entry). ## entry id @@ -179,6 +193,12 @@ A [program](#program) with the ability to interpret the binary encoding of other The duration of time for which a [validator](#validator) is unable to [vote](#ledger-vote) on another [fork](#fork). +## message + +The structured contents of a [transaction](#transaction). Generally containing a header, array of account addresses, recent [blockhash](#blockhash), and an array of [instructions](#instruction). + +Learn more about the [message formatting inside of transactions](./developing/programming-model/transactions.md#message-format) here. + ## native token The [token](#token) used to track work done by [nodes](#node) in a cluster. @@ -205,7 +225,7 @@ The private key of a [keypair](#keypair). ## program -The code that interprets [instructions](#instruction). +The executable code that interprets the [instructions](#instruction) sent inside of each [transaction](#transaction) on the Solana. These programs are often referred to as "[_smart contracts_](./developing//intro/programs.md)" on other blockchains. ## program derived account (PDA) @@ -221,7 +241,7 @@ A stack of proofs, each of which proves that some data existed before the proof ## prioritization fee -An additional fee user can specify in compute budget [instruction](#instruction) to prioritize their [transactions](#transaction). +An additional fee user can specify in the compute budget [instruction](#instruction) to prioritize their [transactions](#transaction). The prioritization fee is calculated by multiplying the requested maximum compute units by the compute-unit price (specified in increments of 0.000001 lamports per compute unit) rounded up to the nearest lamport. @@ -231,6 +251,16 @@ Transactions should request the minimum amount of compute units required for exe The public key of a [keypair](#keypair). +## rent + +Fee paid by [Accounts](#account) and [Programs](#program) to store data on the blockchain. When accounts do not have enough balance to pay rent, they may be Garbage Collected. + +See also [rent exempt](#rent-exempt) below. Learn more about rent here: [What is rent?](../src/developing/intro/rent.md). + +## rent exempt + +Accounts that maintain more than 2 years with of rent payments in their account are considered "*rent exempt*" and will not incur the [collection of rent](../src/developing/intro/rent.md#collecting-rent). + ## root A [block](#block) or [slot](#slot) that has reached maximum [lockout](#lockout) on a [validator](#validator). The root is the highest block that is an ancestor of all active forks on a validator. All ancestor blocks of a root are also transitively a root. Blocks that are not an ancestor and not a descendant of the root are excluded from consideration for consensus and can be discarded. @@ -287,7 +317,7 @@ Tokens forfeit to the [cluster](#cluster) if malicious [validator](#validator) b ## sysvar -A system [account](#account). [Sysvars](developing/runtime-facilities/sysvars.md) provide cluster state information such as current tick height, rewards [points](#point) values, etc. Programs can access Sysvars via a Sysvar account (pubkey) or by querying via a syscall. +A system [account](#account). [Sysvars](developing/runtime-facilities/sysvars.md) provide cluster state information such as current tick height, rewards [points](#point) values, etc. Programs can access Sysvars via a Sysvar account (pubkey) or by querying via a syscall. ## thin client @@ -327,7 +357,7 @@ A set of [transactions](#transaction) that may be executed in parallel. ## validator -A full participant in a Solana network [cluster](#cluster) that produces new [blocks](#block). A validator validates the transactions added to the [ledger](#ledger) +A full participant in a Solana network [cluster](#cluster) that produces new [blocks](#block). A validator validates the transactions added to the [ledger](#ledger) ## VDF diff --git a/docs/src/transaction_fees.md b/docs/src/transaction_fees.md index c28cb32543457e..ee9fdfa43e9b93 100644 --- a/docs/src/transaction_fees.md +++ b/docs/src/transaction_fees.md @@ -1,21 +1,70 @@ --- title: Transaction Fees +description: "Transaction fees are the small fees paid to process instructions on the network. These fees are based on computation and an optional prioritization fee." +keywords: "instruction fee, processing fee, storage fee, low fee blockchain, gas, gwei, cheap network, affordable blockchain" --- -**Subject to change.** +The small fees paid to process [instructions](./terminology.md#instruction) on the Solana blockchain are known as "_transaction fees_". -Each transaction sent through the network, to be processed by the current leader validation-client and confirmed as a global state transaction, contains a transaction fee. Transaction fees offer many benefits in the Solana economic design, for example they: +As each transaction (which contains one or more instructions) is sent through the network, it gets processed by the current leader validation-client. Once confirmed as a global state transaction, this _transaction fee_ is paid to the network to help support the [economic design](#economic-design) of the Solana blockchain. -- provide unit compensation to the validator network for the CPU/GPU resources necessary to process the state transaction, +> **NOTE:** Transaction fees are different from [account rent](./terminology.md#rent)! +> While transaction fees are paid to process instructions on the Solana network, rent is paid to store data on the blockchain. + + + +## Why pay transaction fees? + +Transaction fees offer many benefits in the Solana [economic design](#basic-economic-design) described below. Mainly: + +- they provide compensation to the validator network for the CPU/GPU resources necessary to process transactions, - reduce network spam by introducing real cost to transactions, -- and provide potential long-term economic stability of the network through a protocol-captured minimum fee amount per transaction, as described below. +- and provide potential long-term economic stability of the network through a protocol-captured minimum fee amount per transaction + +> **NOTE:** Network consensus votes are sent as normal system transfers, which means that validators pay transaction fees to participate in consensus. + +## Basic economic design + +Many current blockchain economies \(e.g. Bitcoin, Ethereum\), rely on _protocol-based rewards_ to support the economy in the short term. And when the protocol derived rewards expire, predict that the revenue generated through _transaction fees_ will support the economy in the long term. + +In an attempt to create a sustainable economy on Solana through _protocol-based rewards_ and _transaction fees_: + +- a fixed portion (initially 50%) of each transaction fee is _burned_ (aka destroyed), +- with the remaining fee going to the current [leader](./terminology.md#leader) processing the transaction. + +A scheduled global inflation rate provides a source for [rewards](./implemented-proposals/staking-rewards.md) distributed to [Solana Validators](../src/running-validator.md). + +### Why burn some fees? + +As mentioned above, a fixed proportion of each transaction fee is _burned_ (aka destroyed). The intent of this design is to retain leader incentive to include as many transactions as possible within the leader-slot time. While still providing an inflation limiting mechanism that protects against "tax evasion" attacks \(i.e. side-channel fee payments\). + +Burnt fees can also help prevent malicious validators from censoring transactions by being considered in [fork](./terminology.md#fork) selection. + +#### Example of an attack: + +In the case of a [Proof of History (PoH)](./terminology.md#proof-of-history-poh) fork with a malicious, censoring leader: + +- due to the fees lost from censoring, we would expect the total fees destroyed to be **_less than_** a comparable honest fork +- if the censoring leader is to compensate for these lost protocol fees, they would have to replace the burnt fees on their fork themselves +- thus potentially reducing the incentive to censor in the first place + +## Calculating transaction fees + +Transactions fees are calculated based on two main parts: + +- a statically set base fee per signature, and +- the computational resources used during the transaction, measured in "[_compute units_](./terminology.md#compute-units)" + +Since each transaction may require a different amount of computational resources, they are alloted a maximum number of _compute units_ per transaction known as the "[_compute budget_](./terminology.md#compute-budget)". + +The execution of each instruction within a transactions consumes a different number of _compute units_. After the maximum number of _computer units_ has been consumed (aka compute budget exhaustion), the runtime will halt the transaction and return an error. Resulting in a failed transaction. -Network consensus votes are sent as normal system transfers, which means that validators pay transaction fees to participate in consensus. +> **Learn more:** compute units and the [Compute Budget](./developing/programming-model/runtime#compute-budget) in the Runtime and [requesting a fee estimate](./developing/clients/jsonrpc-api.md#getfeeformessage) from the RPC. -Many current blockchain economies \(e.g. Bitcoin, Ethereum\), rely on protocol-based rewards to support the economy in the short term, with the assumption that the revenue generated through transaction fees will support the economy in the long term, when the protocol derived rewards expire. In an attempt to create a sustainable economy through protocol-based rewards and transaction fees, a fixed portion (initially 50%) of each transaction fee is destroyed, with the remaining fee going to the current leader processing the transaction. A scheduled global inflation rate provides a source for rewards distributed to validation-clients, through the process described above. +## Prioritization fee -Transaction fees are set by the network cluster based on recent historical throughput, see [Congestion Driven Fees](implemented-proposals/transaction-fees.md#congestion-driven-fees). This minimum portion of each transaction fee can be dynamically adjusted depending on historical _signatures-per-slot_. In this way, the protocol can use the minimum fee to target a desired hardware utilization. By monitoring a protocol specified _signatures-per-slot_ with respect to a desired, target usage amount, the minimum fee can be raised/lowered which should, in turn, lower/raise the actual _signature-per-slot_ per block until it reaches the target amount. This adjustment process can be thought of as similar to the difficulty adjustment algorithm in the Bitcoin protocol, however in this case it is adjusting the minimum transaction fee to guide the transaction processing hardware usage to a desired level. +Recently, Solana has introduced an optional fee called the "_[prioritization fee](./terminology.md#prioritization-fee)_". This additional fee can be paid to help boost how a transaction is prioritized against others, resulting in faster transaction execution times. -As mentioned, a fixed-proportion of each transaction fee is to be destroyed. The intent of this design is to retain leader incentive to include as many transactions as possible within the leader-slot time, while providing an inflation limiting mechanism that protects against "tax evasion" attacks \(i.e. side-channel fee payments\). +The prioritization fee is calculated by multiplying the requested maximum _compute units_ by the compute-unit price (specified in increments of 0.000001 lamports per compute unit) rounded up to the nearest lamport. -Additionally, the burnt fees can be a consideration in fork selection. In the case of a PoH fork with a malicious, censoring leader, we would expect the total fees destroyed to be less than a comparable honest fork, due to the fees lost from censoring. If the censoring leader is to compensate for these lost protocol fees, they would have to replace the burnt fees on their fork themselves, thus potentially reducing the incentive to censor in the first place. +You can read more about the [compute budget instruction](./developing/programming-model/runtime.md#compute-budget) here. diff --git a/docs/static/img/quickstarts/solana-get-started-build-and-deploy.png b/docs/static/img/quickstarts/solana-get-started-build-and-deploy.png new file mode 100644 index 0000000000000000000000000000000000000000..59bb3ef527fd8ab099db943fec331cc9468c6d34 GIT binary patch literal 218708 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⪻9RIY!YwDxl=pcr5Z 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 Db3SY6 literal 0 HcmV?d00001 diff --git a/docs/static/img/quickstarts/solana-get-started-import-on-playground.png b/docs/static/img/quickstarts/solana-get-started-import-on-playground.png new file mode 100644 index 0000000000000000000000000000000000000000..cd90b00cb210ba967e54f98d0eec7fbab78bcf21 GIT binary patch literal 148564 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
  • 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 YDm?>Br1KzfVnQG?l8O>VVy}Gv7iG08s{jB1 literal 0 HcmV?d00001 From fa1e326333666ce9ccbb6fb0d73fda3067153fd3 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Mon, 26 Sep 2022 20:41:59 +0000 Subject: [PATCH 156/465] Remove markdown file update from version increment-cargo-version.sh (backport #27851) (#27928) * Remove markdown file update from version increment-cargo-version.sh (#27851) * Remove markdown file update from version increment-cargo-version.sh * Update doc version numbers that were incorrectly advanced by increment-cargo-version.sh * Revert incorrect doc change based on review feedback (cherry picked from commit 8f96a39e7316b904cf043ec29b295d16fbb0d999) # Conflicts: # docs/src/developing/clients/jsonrpc-api.md * Resolve conflict Co-authored-by: Will Hickey --- docs/src/developing/clients/jsonrpc-api.md | 2 +- scripts/increment-cargo-version.sh | 11 ----------- 2 files changed, 1 insertion(+), 12 deletions(-) diff --git a/docs/src/developing/clients/jsonrpc-api.md b/docs/src/developing/clients/jsonrpc-api.md index 5ede3e5064a94f..90972467510d89 100644 --- a/docs/src/developing/clients/jsonrpc-api.md +++ b/docs/src/developing/clients/jsonrpc-api.md @@ -1949,7 +1949,7 @@ Returns all accounts owned by the provided program Pubkey - `offset: ` - offset into program account data to start comparison - `bytes: ` - data to match, as encoded string - `encoding: ` - encoding for filter `bytes` data, either "base58" or "base64". Data is limited in size to 128 or fewer decoded bytes. - **NEW: This field, and base64 support generally, is only available in solana-core v1.14.3 or newer. Please omit when querying nodes on earlier versions** + **NEW: This field, and base64 support generally, is only available in solana-core v1.11.2 or newer. Please omit when querying nodes on earlier versions** - `dataSize: ` - compares the program account data length with the provided data size diff --git a/scripts/increment-cargo-version.sh b/scripts/increment-cargo-version.sh index 386b2b21239a05..7a5f48960360d4 100755 --- a/scripts/increment-cargo-version.sh +++ b/scripts/increment-cargo-version.sh @@ -33,8 +33,6 @@ done # shellcheck disable=2207 Cargo_tomls=($(find . -mindepth 2 -name Cargo.toml "${not_paths[@]}")) -# shellcheck disable=2207 -markdownFiles=($(find . -name "*.md" "${not_paths[@]}")) # Collect the name of all the internal crates crates=() @@ -138,15 +136,6 @@ for Cargo_toml in "${Cargo_tomls[@]}"; do done done -# Update all the documentation references -for file in "${markdownFiles[@]}"; do - # Set new crate version - ( - set -x - sed -i "$file" -e "s/$currentVersion/$newVersion/g" - ) -done - # Update cargo lock files scripts/cargo-for-all-lock-files.sh tree >/dev/null From bb868b596c522ca8f1115209f1b5473f1f65d812 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 26 Sep 2022 18:36:55 -0500 Subject: [PATCH 157/465] Bump Version to 1.14.4 (#28091) Co-authored-by: willhickey --- Cargo.lock | 484 ++++++++--------- account-decoder/Cargo.toml | 8 +- accounts-bench/Cargo.toml | 12 +- accounts-cluster-bench/Cargo.toml | 34 +- banking-bench/Cargo.toml | 26 +- banks-client/Cargo.toml | 12 +- banks-interface/Cargo.toml | 4 +- banks-server/Cargo.toml | 12 +- bench-streamer/Cargo.toml | 8 +- bench-tps/Cargo.toml | 38 +- bloom/Cargo.toml | 8 +- bucket_map/Cargo.toml | 8 +- clap-utils/Cargo.toml | 8 +- clap-v3-utils/Cargo.toml | 8 +- cli-config/Cargo.toml | 6 +- cli-output/Cargo.toml | 16 +- cli/Cargo.toml | 36 +- client-test/Cargo.toml | 32 +- client/Cargo.toml | 28 +- core/Cargo.toml | 56 +- dos/Cargo.toml | 30 +- download-utils/Cargo.toml | 6 +- entry/Cargo.toml | 16 +- faucet/Cargo.toml | 14 +- frozen-abi/Cargo.toml | 6 +- frozen-abi/macro/Cargo.toml | 2 +- genesis-utils/Cargo.toml | 8 +- genesis/Cargo.toml | 22 +- geyser-plugin-interface/Cargo.toml | 6 +- geyser-plugin-manager/Cargo.toml | 16 +- gossip/Cargo.toml | 38 +- install/Cargo.toml | 14 +- keygen/Cargo.toml | 12 +- ledger-tool/Cargo.toml | 30 +- ledger/Cargo.toml | 40 +- local-cluster/Cargo.toml | 28 +- log-analyzer/Cargo.toml | 6 +- logger/Cargo.toml | 2 +- measure/Cargo.toml | 4 +- merkle-root-bench/Cargo.toml | 12 +- merkle-tree/Cargo.toml | 4 +- metrics/Cargo.toml | 4 +- net-shaper/Cargo.toml | 4 +- net-utils/Cargo.toml | 8 +- notifier/Cargo.toml | 2 +- perf/Cargo.toml | 12 +- poh-bench/Cargo.toml | 14 +- poh/Cargo.toml | 20 +- program-runtime/Cargo.toml | 14 +- program-test/Cargo.toml | 18 +- .../address-lookup-table-tests/Cargo.toml | 8 +- programs/address-lookup-table/Cargo.toml | 12 +- programs/bpf-loader-tests/Cargo.toml | 8 +- programs/bpf/Cargo.lock | 490 +++++++++--------- programs/bpf/Cargo.toml | 28 +- programs/bpf/rust/128bit/Cargo.toml | 6 +- programs/bpf/rust/128bit_dep/Cargo.toml | 4 +- programs/bpf/rust/alloc/Cargo.toml | 4 +- programs/bpf/rust/call_depth/Cargo.toml | 4 +- programs/bpf/rust/caller_access/Cargo.toml | 4 +- programs/bpf/rust/curve25519/Cargo.toml | 6 +- programs/bpf/rust/custom_heap/Cargo.toml | 4 +- programs/bpf/rust/dep_crate/Cargo.toml | 6 +- .../bpf/rust/deprecated_loader/Cargo.toml | 4 +- programs/bpf/rust/dup_accounts/Cargo.toml | 4 +- programs/bpf/rust/error_handling/Cargo.toml | 4 +- programs/bpf/rust/external_spend/Cargo.toml | 4 +- programs/bpf/rust/finalize/Cargo.toml | 4 +- .../rust/get_minimum_delegation/Cargo.toml | 4 +- .../Cargo.toml | 4 +- .../rust/instruction_introspection/Cargo.toml | 4 +- programs/bpf/rust/invoke/Cargo.toml | 4 +- programs/bpf/rust/invoke_and_error/Cargo.toml | 4 +- programs/bpf/rust/invoke_and_ok/Cargo.toml | 4 +- .../bpf/rust/invoke_and_return/Cargo.toml | 4 +- programs/bpf/rust/invoked/Cargo.toml | 4 +- programs/bpf/rust/iter/Cargo.toml | 4 +- programs/bpf/rust/log_data/Cargo.toml | 4 +- programs/bpf/rust/many_args/Cargo.toml | 6 +- programs/bpf/rust/many_args_dep/Cargo.toml | 4 +- programs/bpf/rust/mem/Cargo.toml | 10 +- programs/bpf/rust/membuiltins/Cargo.toml | 6 +- programs/bpf/rust/noop/Cargo.toml | 4 +- programs/bpf/rust/panic/Cargo.toml | 4 +- programs/bpf/rust/param_passing/Cargo.toml | 6 +- .../bpf/rust/param_passing_dep/Cargo.toml | 4 +- programs/bpf/rust/rand/Cargo.toml | 4 +- programs/bpf/rust/realloc/Cargo.toml | 4 +- programs/bpf/rust/realloc_invoke/Cargo.toml | 6 +- .../bpf/rust/ro_account_modify/Cargo.toml | 4 +- programs/bpf/rust/ro_modify/Cargo.toml | 4 +- programs/bpf/rust/sanity/Cargo.toml | 10 +- .../bpf/rust/secp256k1_recover/Cargo.toml | 4 +- programs/bpf/rust/sha/Cargo.toml | 4 +- .../rust/sibling_inner_instruction/Cargo.toml | 4 +- .../bpf/rust/sibling_instruction/Cargo.toml | 4 +- programs/bpf/rust/simulation/Cargo.toml | 12 +- programs/bpf/rust/spoof1/Cargo.toml | 4 +- programs/bpf/rust/spoof1_system/Cargo.toml | 4 +- programs/bpf/rust/sysvar/Cargo.toml | 10 +- programs/bpf/rust/upgradeable/Cargo.toml | 4 +- programs/bpf/rust/upgraded/Cargo.toml | 4 +- programs/bpf_loader/Cargo.toml | 14 +- .../bpf_loader/gen-syscall-list/Cargo.toml | 2 +- programs/compute-budget/Cargo.toml | 6 +- programs/config/Cargo.toml | 8 +- programs/ed25519-tests/Cargo.toml | 6 +- programs/stake/Cargo.toml | 18 +- programs/vote/Cargo.toml | 14 +- programs/zk-token-proof/Cargo.toml | 8 +- rayon-threadlimit/Cargo.toml | 2 +- rbpf-cli/Cargo.toml | 10 +- remote-wallet/Cargo.toml | 4 +- rpc-test/Cargo.toml | 18 +- rpc/Cargo.toml | 48 +- runtime/Cargo.toml | 34 +- runtime/store-tool/Cargo.toml | 8 +- sdk/Cargo.toml | 12 +- sdk/cargo-build-bpf/Cargo.toml | 4 +- sdk/cargo-build-sbf/Cargo.toml | 8 +- .../tests/crates/fail/Cargo.toml | 4 +- .../tests/crates/noop/Cargo.toml | 4 +- sdk/cargo-test-bpf/Cargo.toml | 2 +- sdk/cargo-test-sbf/Cargo.toml | 2 +- sdk/gen-headers/Cargo.toml | 2 +- sdk/macro/Cargo.toml | 2 +- sdk/program/Cargo.toml | 10 +- send-transaction-service/Cargo.toml | 14 +- stake-accounts/Cargo.toml | 16 +- storage-bigtable/Cargo.toml | 10 +- storage-bigtable/build-proto/Cargo.lock | 2 +- storage-bigtable/build-proto/Cargo.toml | 2 +- storage-proto/Cargo.toml | 8 +- streamer/Cargo.toml | 10 +- sys-tuner/Cargo.toml | 6 +- test-validator/Cargo.toml | 28 +- tokens/Cargo.toml | 24 +- transaction-dos/Cargo.toml | 32 +- transaction-status/Cargo.toml | 12 +- upload-perf/Cargo.toml | 4 +- validator/Cargo.toml | 50 +- version/Cargo.toml | 8 +- watchtower/Cargo.toml | 20 +- zk-token-sdk/Cargo.toml | 6 +- 144 files changed, 1266 insertions(+), 1266 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index a59f906bc034e5..896321faf14e32 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1688,7 +1688,7 @@ dependencies = [ [[package]] name = "gen-headers" -version = "1.14.3" +version = "1.14.4" dependencies = [ "log", "regex", @@ -1696,7 +1696,7 @@ dependencies = [ [[package]] name = "gen-syscall-list" -version = "1.14.3" +version = "1.14.4" dependencies = [ "regex", ] @@ -3756,15 +3756,15 @@ dependencies = [ [[package]] name = "rbpf-cli" -version = "1.14.3" +version = "1.14.4" dependencies = [ "clap 3.1.8", "serde", "serde_json", "solana-bpf-loader-program", - "solana-logger 1.14.3", + "solana-logger 1.14.4", "solana-program-runtime", - "solana-sdk 1.14.3", + "solana-sdk 1.14.4", "solana_rbpf", ] @@ -4476,7 +4476,7 @@ dependencies = [ [[package]] name = "solana-account-decoder" -version = "1.14.3" +version = "1.14.4" dependencies = [ "Inflector", "base64 0.13.0", @@ -4488,7 +4488,7 @@ dependencies = [ "serde_derive", "serde_json", "solana-config-program", - "solana-sdk 1.14.3", + "solana-sdk 1.14.4", "solana-vote-program", "spl-token", "spl-token-2022", @@ -4498,21 +4498,21 @@ dependencies = [ [[package]] name = "solana-accounts-bench" -version = "1.14.3" +version = "1.14.4" dependencies = [ "clap 2.33.3", "log", "rayon", - "solana-logger 1.14.3", + "solana-logger 1.14.4", "solana-measure", "solana-runtime", - "solana-sdk 1.14.3", + "solana-sdk 1.14.4", "solana-version", ] [[package]] name = "solana-accounts-cluster-bench" -version = "1.14.3" +version = "1.14.4" dependencies = [ "clap 2.33.3", "log", @@ -4525,11 +4525,11 @@ dependencies = [ "solana-faucet", "solana-gossip", "solana-local-cluster", - "solana-logger 1.14.3", + "solana-logger 1.14.4", "solana-measure", "solana-net-utils", "solana-runtime", - "solana-sdk 1.14.3", + "solana-sdk 1.14.4", "solana-streamer", "solana-test-validator", "solana-transaction-status", @@ -4539,7 +4539,7 @@ dependencies = [ [[package]] name = "solana-address-lookup-table-program" -version = "1.14.3" +version = "1.14.4" dependencies = [ "bincode", "bytemuck", @@ -4548,28 +4548,28 @@ dependencies = [ "num-traits", "rustc_version 0.4.0", "serde", - "solana-frozen-abi 1.14.3", - "solana-frozen-abi-macro 1.14.3", - "solana-program 1.14.3", + "solana-frozen-abi 1.14.4", + "solana-frozen-abi-macro 1.14.4", + "solana-program 1.14.4", "solana-program-runtime", - "solana-sdk 1.14.3", + "solana-sdk 1.14.4", "thiserror", ] [[package]] name = "solana-address-lookup-table-program-tests" -version = "1.14.3" +version = "1.14.4" dependencies = [ "assert_matches", "bincode", "solana-address-lookup-table-program", "solana-program-test", - "solana-sdk 1.14.3", + "solana-sdk 1.14.4", ] [[package]] name = "solana-banking-bench" -version = "1.14.3" +version = "1.14.4" dependencies = [ "clap 3.1.8", "crossbeam-channel", @@ -4580,27 +4580,27 @@ dependencies = [ "solana-core", "solana-gossip", "solana-ledger", - "solana-logger 1.14.3", + "solana-logger 1.14.4", "solana-measure", "solana-perf", "solana-poh", "solana-runtime", - "solana-sdk 1.14.3", + "solana-sdk 1.14.4", "solana-streamer", "solana-version", ] [[package]] name = "solana-banks-client" -version = "1.14.3" +version = "1.14.4" dependencies = [ "borsh", "futures 0.3.21", "solana-banks-interface", "solana-banks-server", - "solana-program 1.14.3", + "solana-program 1.14.4", "solana-runtime", - "solana-sdk 1.14.3", + "solana-sdk 1.14.4", "tarpc", "thiserror", "tokio", @@ -4609,16 +4609,16 @@ dependencies = [ [[package]] name = "solana-banks-interface" -version = "1.14.3" +version = "1.14.4" dependencies = [ "serde", - "solana-sdk 1.14.3", + "solana-sdk 1.14.4", "tarpc", ] [[package]] name = "solana-banks-server" -version = "1.14.3" +version = "1.14.4" dependencies = [ "bincode", "crossbeam-channel", @@ -4626,7 +4626,7 @@ dependencies = [ "solana-banks-interface", "solana-client", "solana-runtime", - "solana-sdk 1.14.3", + "solana-sdk 1.14.4", "solana-send-transaction-service", "tarpc", "tokio", @@ -4636,7 +4636,7 @@ dependencies = [ [[package]] name = "solana-bench-streamer" -version = "1.14.3" +version = "1.14.4" dependencies = [ "clap 3.1.8", "crossbeam-channel", @@ -4647,7 +4647,7 @@ dependencies = [ [[package]] name = "solana-bench-tps" -version = "1.14.3" +version = "1.14.4" dependencies = [ "clap 2.33.3", "crossbeam-channel", @@ -4664,13 +4664,13 @@ dependencies = [ "solana-genesis", "solana-gossip", "solana-local-cluster", - "solana-logger 1.14.3", + "solana-logger 1.14.4", "solana-measure", "solana-metrics", "solana-net-utils", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.3", + "solana-sdk 1.14.4", "solana-streamer", "solana-test-validator", "solana-version", @@ -4679,7 +4679,7 @@ dependencies = [ [[package]] name = "solana-bloom" -version = "1.14.3" +version = "1.14.4" dependencies = [ "bv", "fnv", @@ -4689,14 +4689,14 @@ dependencies = [ "rustc_version 0.4.0", "serde", "serde_derive", - "solana-frozen-abi 1.14.3", - "solana-frozen-abi-macro 1.14.3", - "solana-sdk 1.14.3", + "solana-frozen-abi 1.14.4", + "solana-frozen-abi-macro 1.14.4", + "solana-sdk 1.14.4", ] [[package]] name = "solana-bpf-loader-program" -version = "1.14.3" +version = "1.14.4" dependencies = [ "bincode", "byteorder", @@ -4707,26 +4707,26 @@ dependencies = [ "solana-metrics", "solana-program-runtime", "solana-runtime", - "solana-sdk 1.14.3", - "solana-zk-token-sdk 1.14.3", + "solana-sdk 1.14.4", + "solana-zk-token-sdk 1.14.4", "solana_rbpf", "thiserror", ] [[package]] name = "solana-bpf-loader-program-tests" -version = "1.14.3" +version = "1.14.4" dependencies = [ "assert_matches", "bincode", "solana-bpf-loader-program", "solana-program-test", - "solana-sdk 1.14.3", + "solana-sdk 1.14.4", ] [[package]] name = "solana-bucket-map" -version = "1.14.3" +version = "1.14.4" dependencies = [ "fs_extra", "log", @@ -4734,24 +4734,24 @@ dependencies = [ "modular-bitfield", "rand 0.7.3", "rayon", - "solana-logger 1.14.3", + "solana-logger 1.14.4", "solana-measure", - "solana-sdk 1.14.3", + "solana-sdk 1.14.4", "tempfile", ] [[package]] name = "solana-cargo-build-bpf" -version = "1.14.3" +version = "1.14.4" dependencies = [ "cargo_metadata", "clap 3.1.8", - "solana-sdk 1.14.3", + "solana-sdk 1.14.4", ] [[package]] name = "solana-cargo-build-sbf" -version = "1.14.3" +version = "1.14.4" dependencies = [ "bzip2", "cargo_metadata", @@ -4760,14 +4760,14 @@ dependencies = [ "regex", "serial_test", "solana-download-utils", - "solana-logger 1.14.3", - "solana-sdk 1.14.3", + "solana-logger 1.14.4", + "solana-sdk 1.14.4", "tar", ] [[package]] name = "solana-cargo-test-bpf" -version = "1.14.3" +version = "1.14.4" dependencies = [ "cargo_metadata", "clap 3.1.8", @@ -4775,7 +4775,7 @@ dependencies = [ [[package]] name = "solana-cargo-test-sbf" -version = "1.14.3" +version = "1.14.4" dependencies = [ "cargo_metadata", "clap 3.1.8", @@ -4783,14 +4783,14 @@ dependencies = [ [[package]] name = "solana-clap-utils" -version = "1.14.3" +version = "1.14.4" dependencies = [ "chrono", "clap 2.33.3", "rpassword", "solana-perf", "solana-remote-wallet", - "solana-sdk 1.14.3", + "solana-sdk 1.14.4", "tempfile", "thiserror", "tiny-bip39", @@ -4800,14 +4800,14 @@ dependencies = [ [[package]] name = "solana-clap-v3-utils" -version = "1.14.3" +version = "1.14.4" dependencies = [ "chrono", "clap 3.1.8", "rpassword", "solana-perf", "solana-remote-wallet", - "solana-sdk 1.14.3", + "solana-sdk 1.14.4", "tempfile", "thiserror", "tiny-bip39", @@ -4817,7 +4817,7 @@ dependencies = [ [[package]] name = "solana-cli" -version = "1.14.3" +version = "1.14.4" dependencies = [ "bincode", "bs58", @@ -4844,10 +4844,10 @@ dependencies = [ "solana-client", "solana-config-program", "solana-faucet", - "solana-logger 1.14.3", + "solana-logger 1.14.4", "solana-program-runtime", "solana-remote-wallet", - "solana-sdk 1.14.3", + "solana-sdk 1.14.4", "solana-streamer", "solana-test-validator", "solana-transaction-status", @@ -4862,7 +4862,7 @@ dependencies = [ [[package]] name = "solana-cli-config" -version = "1.14.3" +version = "1.14.4" dependencies = [ "anyhow", "dirs-next", @@ -4871,13 +4871,13 @@ dependencies = [ "serde_derive", "serde_yaml", "solana-clap-utils", - "solana-sdk 1.14.3", + "solana-sdk 1.14.4", "url 2.2.2", ] [[package]] name = "solana-cli-output" -version = "1.14.3" +version = "1.14.4" dependencies = [ "Inflector", "base64 0.13.0", @@ -4895,7 +4895,7 @@ dependencies = [ "solana-clap-utils", "solana-cli-config", "solana-client", - "solana-sdk 1.14.3", + "solana-sdk 1.14.4", "solana-transaction-status", "solana-vote-program", "spl-memo", @@ -4903,7 +4903,7 @@ dependencies = [ [[package]] name = "solana-client" -version = "1.14.3" +version = "1.14.4" dependencies = [ "anyhow", "assert_matches", @@ -4939,12 +4939,12 @@ dependencies = [ "solana-account-decoder", "solana-clap-utils", "solana-faucet", - "solana-logger 1.14.3", + "solana-logger 1.14.4", "solana-measure", "solana-metrics", "solana-net-utils", "solana-perf", - "solana-sdk 1.14.3", + "solana-sdk 1.14.4", "solana-streamer", "solana-transaction-status", "solana-version", @@ -4960,14 +4960,14 @@ dependencies = [ [[package]] name = "solana-client-test" -version = "1.14.3" +version = "1.14.4" dependencies = [ "futures-util", "serde_json", "serial_test", "solana-client", "solana-ledger", - "solana-logger 1.14.3", + "solana-logger 1.14.4", "solana-measure", "solana-merkle-tree", "solana-metrics", @@ -4975,7 +4975,7 @@ dependencies = [ "solana-rayon-threadlimit", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.3", + "solana-sdk 1.14.4", "solana-streamer", "solana-test-validator", "solana-transaction-status", @@ -4986,28 +4986,28 @@ dependencies = [ [[package]] name = "solana-compute-budget-program" -version = "1.14.3" +version = "1.14.4" dependencies = [ "solana-program-runtime", - "solana-sdk 1.14.3", + "solana-sdk 1.14.4", ] [[package]] name = "solana-config-program" -version = "1.14.3" +version = "1.14.4" dependencies = [ "bincode", "chrono", "serde", "serde_derive", - "solana-logger 1.14.3", + "solana-logger 1.14.4", "solana-program-runtime", - "solana-sdk 1.14.3", + "solana-sdk 1.14.4", ] [[package]] name = "solana-core" -version = "1.14.3" +version = "1.14.4" dependencies = [ "ahash", "base64 0.13.0", @@ -5039,12 +5039,12 @@ dependencies = [ "solana-bloom", "solana-client", "solana-entry", - "solana-frozen-abi 1.14.3", - "solana-frozen-abi-macro 1.14.3", + "solana-frozen-abi 1.14.4", + "solana-frozen-abi-macro 1.14.4", "solana-geyser-plugin-manager", "solana-gossip", "solana-ledger", - "solana-logger 1.14.3", + "solana-logger 1.14.4", "solana-measure", "solana-metrics", "solana-net-utils", @@ -5054,7 +5054,7 @@ dependencies = [ "solana-rayon-threadlimit", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.3", + "solana-sdk 1.14.4", "solana-send-transaction-service", "solana-stake-program", "solana-streamer", @@ -5074,7 +5074,7 @@ dependencies = [ [[package]] name = "solana-dos" -version = "1.14.3" +version = "1.14.4" dependencies = [ "bincode", "clap 3.1.8", @@ -5090,42 +5090,42 @@ dependencies = [ "solana-faucet", "solana-gossip", "solana-local-cluster", - "solana-logger 1.14.3", + "solana-logger 1.14.4", "solana-measure", "solana-net-utils", "solana-perf", "solana-rpc", - "solana-sdk 1.14.3", + "solana-sdk 1.14.4", "solana-streamer", "solana-version", ] [[package]] name = "solana-download-utils" -version = "1.14.3" +version = "1.14.4" dependencies = [ "console", "indicatif", "log", "reqwest", "solana-runtime", - "solana-sdk 1.14.3", + "solana-sdk 1.14.4", ] [[package]] name = "solana-ed25519-program-tests" -version = "1.14.3" +version = "1.14.4" dependencies = [ "assert_matches", "ed25519-dalek", "rand 0.7.3", "solana-program-test", - "solana-sdk 1.14.3", + "solana-sdk 1.14.4", ] [[package]] name = "solana-entry" -version = "1.14.3" +version = "1.14.4" dependencies = [ "bincode", "crossbeam-channel", @@ -5137,18 +5137,18 @@ dependencies = [ "rand 0.7.3", "rayon", "serde", - "solana-logger 1.14.3", + "solana-logger 1.14.4", "solana-measure", "solana-merkle-tree", "solana-metrics", "solana-perf", "solana-rayon-threadlimit", - "solana-sdk 1.14.3", + "solana-sdk 1.14.4", ] [[package]] name = "solana-faucet" -version = "1.14.3" +version = "1.14.4" dependencies = [ "bincode", "byteorder", @@ -5159,9 +5159,9 @@ dependencies = [ "serde_derive", "solana-clap-utils", "solana-cli-config", - "solana-logger 1.14.3", + "solana-logger 1.14.4", "solana-metrics", - "solana-sdk 1.14.3", + "solana-sdk 1.14.4", "solana-version", "spl-memo", "thiserror", @@ -5192,7 +5192,7 @@ dependencies = [ [[package]] name = "solana-frozen-abi" -version = "1.14.3" +version = "1.14.4" dependencies = [ "ahash", "blake3", @@ -5217,8 +5217,8 @@ dependencies = [ "serde_derive", "serde_json", "sha2 0.10.2", - "solana-frozen-abi-macro 1.14.3", - "solana-logger 1.14.3", + "solana-frozen-abi-macro 1.14.4", + "solana-logger 1.14.4", "subtle", "thiserror", ] @@ -5237,7 +5237,7 @@ dependencies = [ [[package]] name = "solana-frozen-abi-macro" -version = "1.14.3" +version = "1.14.4" dependencies = [ "proc-macro2 1.0.41", "quote 1.0.18", @@ -5247,7 +5247,7 @@ dependencies = [ [[package]] name = "solana-genesis" -version = "1.14.3" +version = "1.14.4" dependencies = [ "base64 0.13.0", "clap 2.33.3", @@ -5258,9 +5258,9 @@ dependencies = [ "solana-cli-config", "solana-entry", "solana-ledger", - "solana-logger 1.14.3", + "solana-logger 1.14.4", "solana-runtime", - "solana-sdk 1.14.3", + "solana-sdk 1.14.4", "solana-stake-program", "solana-version", "solana-vote-program", @@ -5269,26 +5269,26 @@ dependencies = [ [[package]] name = "solana-genesis-utils" -version = "1.14.3" +version = "1.14.4" dependencies = [ "solana-download-utils", "solana-runtime", - "solana-sdk 1.14.3", + "solana-sdk 1.14.4", ] [[package]] name = "solana-geyser-plugin-interface" -version = "1.14.3" +version = "1.14.4" dependencies = [ "log", - "solana-sdk 1.14.3", + "solana-sdk 1.14.4", "solana-transaction-status", "thiserror", ] [[package]] name = "solana-geyser-plugin-manager" -version = "1.14.3" +version = "1.14.4" dependencies = [ "bs58", "crossbeam-channel", @@ -5301,14 +5301,14 @@ dependencies = [ "solana-metrics", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.3", + "solana-sdk 1.14.4", "solana-transaction-status", "thiserror", ] [[package]] name = "solana-gossip" -version = "1.14.3" +version = "1.14.4" dependencies = [ "bincode", "bv", @@ -5335,17 +5335,17 @@ dependencies = [ "solana-clap-utils", "solana-client", "solana-entry", - "solana-frozen-abi 1.14.3", - "solana-frozen-abi-macro 1.14.3", + "solana-frozen-abi 1.14.4", + "solana-frozen-abi-macro 1.14.4", "solana-ledger", - "solana-logger 1.14.3", + "solana-logger 1.14.4", "solana-measure", "solana-metrics", "solana-net-utils", "solana-perf", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.14.3", + "solana-sdk 1.14.4", "solana-streamer", "solana-version", "solana-vote-program", @@ -5354,7 +5354,7 @@ dependencies = [ [[package]] name = "solana-install" -version = "1.14.3" +version = "1.14.4" dependencies = [ "atty", "bincode", @@ -5375,8 +5375,8 @@ dependencies = [ "solana-clap-utils", "solana-client", "solana-config-program", - "solana-logger 1.14.3", - "solana-sdk 1.14.3", + "solana-logger 1.14.4", + "solana-sdk 1.14.4", "solana-version", "tar", "tempfile", @@ -5387,7 +5387,7 @@ dependencies = [ [[package]] name = "solana-keygen" -version = "1.14.3" +version = "1.14.4" dependencies = [ "bs58", "clap 3.1.8", @@ -5396,14 +5396,14 @@ dependencies = [ "solana-clap-v3-utils", "solana-cli-config", "solana-remote-wallet", - "solana-sdk 1.14.3", + "solana-sdk 1.14.4", "solana-version", "tiny-bip39", ] [[package]] name = "solana-ledger" -version = "1.14.3" +version = "1.14.4" dependencies = [ "assert_matches", "bincode", @@ -5437,16 +5437,16 @@ dependencies = [ "solana-account-decoder", "solana-bpf-loader-program", "solana-entry", - "solana-frozen-abi 1.14.3", - "solana-frozen-abi-macro 1.14.3", - "solana-logger 1.14.3", + "solana-frozen-abi 1.14.4", + "solana-frozen-abi-macro 1.14.4", + "solana-logger 1.14.4", "solana-measure", "solana-metrics", "solana-perf", "solana-program-runtime", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.14.3", + "solana-sdk 1.14.4", "solana-stake-program", "solana-storage-bigtable", "solana-storage-proto", @@ -5465,7 +5465,7 @@ dependencies = [ [[package]] name = "solana-ledger-tool" -version = "1.14.3" +version = "1.14.4" dependencies = [ "assert_cmd", "bs58", @@ -5487,10 +5487,10 @@ dependencies = [ "solana-core", "solana-entry", "solana-ledger", - "solana-logger 1.14.3", + "solana-logger 1.14.4", "solana-measure", "solana-runtime", - "solana-sdk 1.14.3", + "solana-sdk 1.14.4", "solana-stake-program", "solana-storage-bigtable", "solana-transaction-status", @@ -5502,7 +5502,7 @@ dependencies = [ [[package]] name = "solana-local-cluster" -version = "1.14.3" +version = "1.14.4" dependencies = [ "assert_matches", "crossbeam-channel", @@ -5520,9 +5520,9 @@ dependencies = [ "solana-entry", "solana-gossip", "solana-ledger", - "solana-logger 1.14.3", + "solana-logger 1.14.4", "solana-runtime", - "solana-sdk 1.14.3", + "solana-sdk 1.14.4", "solana-stake-program", "solana-streamer", "solana-vote-program", @@ -5531,13 +5531,13 @@ dependencies = [ [[package]] name = "solana-log-analyzer" -version = "1.14.3" +version = "1.14.4" dependencies = [ "byte-unit", "clap 3.1.8", "serde", "serde_json", - "solana-logger 1.14.3", + "solana-logger 1.14.4", "solana-version", ] @@ -5554,7 +5554,7 @@ dependencies = [ [[package]] name = "solana-logger" -version = "1.14.3" +version = "1.14.4" dependencies = [ "env_logger", "lazy_static", @@ -5563,38 +5563,38 @@ dependencies = [ [[package]] name = "solana-measure" -version = "1.14.3" +version = "1.14.4" dependencies = [ "log", - "solana-sdk 1.14.3", + "solana-sdk 1.14.4", ] [[package]] name = "solana-merkle-root-bench" -version = "1.14.3" +version = "1.14.4" dependencies = [ "clap 2.33.3", "log", - "solana-logger 1.14.3", + "solana-logger 1.14.4", "solana-measure", "solana-runtime", - "solana-sdk 1.14.3", + "solana-sdk 1.14.4", "solana-version", ] [[package]] name = "solana-merkle-tree" -version = "1.14.3" +version = "1.14.4" dependencies = [ "fast-math", "hex", "matches", - "solana-program 1.14.3", + "solana-program 1.14.4", ] [[package]] name = "solana-metrics" -version = "1.14.3" +version = "1.14.4" dependencies = [ "crossbeam-channel", "env_logger", @@ -5604,23 +5604,23 @@ dependencies = [ "rand 0.7.3", "reqwest", "serial_test", - "solana-sdk 1.14.3", + "solana-sdk 1.14.4", ] [[package]] name = "solana-net-shaper" -version = "1.14.3" +version = "1.14.4" dependencies = [ "clap 3.1.8", "rand 0.7.3", "serde", "serde_json", - "solana-logger 1.14.3", + "solana-logger 1.14.4", ] [[package]] name = "solana-net-utils" -version = "1.14.3" +version = "1.14.4" dependencies = [ "bincode", "clap 3.1.8", @@ -5631,8 +5631,8 @@ dependencies = [ "serde", "serde_derive", "socket2", - "solana-logger 1.14.3", - "solana-sdk 1.14.3", + "solana-logger 1.14.4", + "solana-sdk 1.14.4", "solana-version", "tokio", "url 2.2.2", @@ -5640,7 +5640,7 @@ dependencies = [ [[package]] name = "solana-notifier" -version = "1.14.3" +version = "1.14.4" dependencies = [ "log", "reqwest", @@ -5649,7 +5649,7 @@ dependencies = [ [[package]] name = "solana-perf" -version = "1.14.3" +version = "1.14.4" dependencies = [ "ahash", "bincode", @@ -5667,16 +5667,16 @@ dependencies = [ "rand 0.7.3", "rayon", "serde", - "solana-logger 1.14.3", + "solana-logger 1.14.4", "solana-metrics", "solana-rayon-threadlimit", - "solana-sdk 1.14.3", + "solana-sdk 1.14.4", "solana-vote-program", ] [[package]] name = "solana-poh" -version = "1.14.3" +version = "1.14.4" dependencies = [ "bincode", "core_affinity", @@ -5686,29 +5686,29 @@ dependencies = [ "rand 0.7.3", "solana-entry", "solana-ledger", - "solana-logger 1.14.3", + "solana-logger 1.14.4", "solana-measure", "solana-metrics", "solana-perf", "solana-runtime", - "solana-sdk 1.14.3", + "solana-sdk 1.14.4", "solana-sys-tuner", "thiserror", ] [[package]] name = "solana-poh-bench" -version = "1.14.3" +version = "1.14.4" dependencies = [ "clap 3.1.8", "log", "rand 0.7.3", "rayon", "solana-entry", - "solana-logger 1.14.3", + "solana-logger 1.14.4", "solana-measure", "solana-perf", - "solana-sdk 1.14.3", + "solana-sdk 1.14.4", "solana-version", ] @@ -5756,7 +5756,7 @@ dependencies = [ [[package]] name = "solana-program" -version = "1.14.3" +version = "1.14.4" dependencies = [ "anyhow", "assert_matches", @@ -5794,10 +5794,10 @@ dependencies = [ "serde_json", "sha2 0.10.2", "sha3 0.10.1", - "solana-frozen-abi 1.14.3", - "solana-frozen-abi-macro 1.14.3", - "solana-logger 1.14.3", - "solana-sdk-macro 1.14.3", + "solana-frozen-abi 1.14.4", + "solana-frozen-abi-macro 1.14.4", + "solana-logger 1.14.4", + "solana-sdk-macro 1.14.4", "static_assertions", "thiserror", "tiny-bip39", @@ -5807,7 +5807,7 @@ dependencies = [ [[package]] name = "solana-program-runtime" -version = "1.14.3" +version = "1.14.4" dependencies = [ "base64 0.13.0", "bincode", @@ -5821,18 +5821,18 @@ dependencies = [ "num-traits", "rustc_version 0.4.0", "serde", - "solana-frozen-abi 1.14.3", - "solana-frozen-abi-macro 1.14.3", - "solana-logger 1.14.3", + "solana-frozen-abi 1.14.4", + "solana-frozen-abi-macro 1.14.4", + "solana-logger 1.14.4", "solana-measure", "solana-metrics", - "solana-sdk 1.14.3", + "solana-sdk 1.14.4", "thiserror", ] [[package]] name = "solana-program-test" -version = "1.14.3" +version = "1.14.4" dependencies = [ "assert_matches", "async-trait", @@ -5844,10 +5844,10 @@ dependencies = [ "solana-banks-client", "solana-banks-server", "solana-bpf-loader-program", - "solana-logger 1.14.3", + "solana-logger 1.14.4", "solana-program-runtime", "solana-runtime", - "solana-sdk 1.14.3", + "solana-sdk 1.14.4", "solana-vote-program", "thiserror", "tokio", @@ -5855,7 +5855,7 @@ dependencies = [ [[package]] name = "solana-rayon-threadlimit" -version = "1.14.3" +version = "1.14.4" dependencies = [ "lazy_static", "num_cpus", @@ -5863,7 +5863,7 @@ dependencies = [ [[package]] name = "solana-remote-wallet" -version = "1.14.3" +version = "1.14.4" dependencies = [ "console", "dialoguer", @@ -5874,14 +5874,14 @@ dependencies = [ "parking_lot 0.12.1", "qstring", "semver 1.0.10", - "solana-sdk 1.14.3", + "solana-sdk 1.14.4", "thiserror", "uriparse", ] [[package]] name = "solana-rpc" -version = "1.14.3" +version = "1.14.4" dependencies = [ "base64 0.13.0", "bincode", @@ -5917,7 +5917,7 @@ dependencies = [ "solana-poh", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.14.3", + "solana-sdk 1.14.4", "solana-send-transaction-service", "solana-stake-program", "solana-storage-bigtable", @@ -5936,7 +5936,7 @@ dependencies = [ [[package]] name = "solana-rpc-test" -version = "1.14.3" +version = "1.14.4" dependencies = [ "bincode", "bs58", @@ -5948,9 +5948,9 @@ dependencies = [ "serde_json", "solana-account-decoder", "solana-client", - "solana-logger 1.14.3", + "solana-logger 1.14.4", "solana-rpc", - "solana-sdk 1.14.3", + "solana-sdk 1.14.4", "solana-streamer", "solana-test-validator", "solana-transaction-status", @@ -5959,7 +5959,7 @@ dependencies = [ [[package]] name = "solana-runtime" -version = "1.14.3" +version = "1.14.4" dependencies = [ "arrayref", "assert_matches", @@ -5999,18 +5999,18 @@ dependencies = [ "solana-bucket-map", "solana-compute-budget-program", "solana-config-program", - "solana-frozen-abi 1.14.3", - "solana-frozen-abi-macro 1.14.3", - "solana-logger 1.14.3", + "solana-frozen-abi 1.14.4", + "solana-frozen-abi-macro 1.14.4", + "solana-logger 1.14.4", "solana-measure", "solana-metrics", "solana-program-runtime", "solana-rayon-threadlimit", - "solana-sdk 1.14.3", + "solana-sdk 1.14.4", "solana-stake-program", "solana-vote-program", "solana-zk-token-proof-program", - "solana-zk-token-sdk 1.14.3", + "solana-zk-token-sdk 1.14.4", "strum", "strum_macros", "symlink", @@ -6073,7 +6073,7 @@ dependencies = [ [[package]] name = "solana-sdk" -version = "1.14.3" +version = "1.14.4" dependencies = [ "anyhow", "assert_matches", @@ -6113,11 +6113,11 @@ dependencies = [ "serde_json", "sha2 0.10.2", "sha3 0.10.1", - "solana-frozen-abi 1.14.3", - "solana-frozen-abi-macro 1.14.3", - "solana-logger 1.14.3", - "solana-program 1.14.3", - "solana-sdk-macro 1.14.3", + "solana-frozen-abi 1.14.4", + "solana-frozen-abi-macro 1.14.4", + "solana-logger 1.14.4", + "solana-program 1.14.4", + "solana-sdk-macro 1.14.4", "static_assertions", "thiserror", "tiny-bip39", @@ -6140,7 +6140,7 @@ dependencies = [ [[package]] name = "solana-sdk-macro" -version = "1.14.3" +version = "1.14.4" dependencies = [ "bs58", "proc-macro2 1.0.41", @@ -6151,21 +6151,21 @@ dependencies = [ [[package]] name = "solana-send-transaction-service" -version = "1.14.3" +version = "1.14.4" dependencies = [ "crossbeam-channel", "log", "solana-client", - "solana-logger 1.14.3", + "solana-logger 1.14.4", "solana-measure", "solana-metrics", "solana-runtime", - "solana-sdk 1.14.3", + "solana-sdk 1.14.4", ] [[package]] name = "solana-stake-accounts" -version = "1.14.3" +version = "1.14.4" dependencies = [ "clap 2.33.3", "solana-clap-utils", @@ -6173,13 +6173,13 @@ dependencies = [ "solana-client", "solana-remote-wallet", "solana-runtime", - "solana-sdk 1.14.3", + "solana-sdk 1.14.4", "solana-stake-program", ] [[package]] name = "solana-stake-program" -version = "1.14.3" +version = "1.14.4" dependencies = [ "assert_matches", "bincode", @@ -6191,12 +6191,12 @@ dependencies = [ "serde", "serde_derive", "solana-config-program", - "solana-frozen-abi 1.14.3", - "solana-frozen-abi-macro 1.14.3", - "solana-logger 1.14.3", + "solana-frozen-abi 1.14.4", + "solana-frozen-abi-macro 1.14.4", + "solana-logger 1.14.4", "solana-metrics", "solana-program-runtime", - "solana-sdk 1.14.3", + "solana-sdk 1.14.4", "solana-vote-program", "test-case", "thiserror", @@ -6204,7 +6204,7 @@ dependencies = [ [[package]] name = "solana-storage-bigtable" -version = "1.14.3" +version = "1.14.4" dependencies = [ "backoff", "bincode", @@ -6225,7 +6225,7 @@ dependencies = [ "serde_derive", "smpl_jwt", "solana-metrics", - "solana-sdk 1.14.3", + "solana-sdk 1.14.4", "solana-storage-proto", "solana-transaction-status", "thiserror", @@ -6236,7 +6236,7 @@ dependencies = [ [[package]] name = "solana-storage-proto" -version = "1.14.3" +version = "1.14.4" dependencies = [ "bincode", "bs58", @@ -6245,25 +6245,25 @@ dependencies = [ "protobuf-src", "serde", "solana-account-decoder", - "solana-sdk 1.14.3", + "solana-sdk 1.14.4", "solana-transaction-status", "tonic-build 0.8.0", ] [[package]] name = "solana-store-tool" -version = "1.14.3" +version = "1.14.4" dependencies = [ "clap 2.33.3", "log", - "solana-logger 1.14.3", + "solana-logger 1.14.4", "solana-runtime", "solana-version", ] [[package]] name = "solana-streamer" -version = "1.14.3" +version = "1.14.4" dependencies = [ "crossbeam-channel", "futures-util", @@ -6280,10 +6280,10 @@ dependencies = [ "rand 0.7.3", "rcgen", "rustls 0.20.6", - "solana-logger 1.14.3", + "solana-logger 1.14.4", "solana-metrics", "solana-perf", - "solana-sdk 1.14.3", + "solana-sdk 1.14.4", "thiserror", "tokio", "x509-parser", @@ -6291,13 +6291,13 @@ dependencies = [ [[package]] name = "solana-sys-tuner" -version = "1.14.3" +version = "1.14.4" dependencies = [ "clap 2.33.3", "libc", "log", "nix", - "solana-logger 1.14.3", + "solana-logger 1.14.4", "solana-version", "sysctl", "unix_socket2", @@ -6306,7 +6306,7 @@ dependencies = [ [[package]] name = "solana-test-validator" -version = "1.14.3" +version = "1.14.4" dependencies = [ "base64 0.13.0", "log", @@ -6317,20 +6317,20 @@ dependencies = [ "solana-core", "solana-gossip", "solana-ledger", - "solana-logger 1.14.3", + "solana-logger 1.14.4", "solana-net-utils", "solana-program-runtime", "solana-program-test", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.3", + "solana-sdk 1.14.4", "solana-streamer", "tokio", ] [[package]] name = "solana-tokens" -version = "1.14.3" +version = "1.14.4" dependencies = [ "bincode", "chrono", @@ -6346,9 +6346,9 @@ dependencies = [ "solana-clap-utils", "solana-cli-config", "solana-client", - "solana-logger 1.14.3", + "solana-logger 1.14.4", "solana-remote-wallet", - "solana-sdk 1.14.3", + "solana-sdk 1.14.4", "solana-streamer", "solana-test-validator", "solana-transaction-status", @@ -6361,7 +6361,7 @@ dependencies = [ [[package]] name = "solana-transaction-dos" -version = "1.14.3" +version = "1.14.4" dependencies = [ "bincode", "clap 2.33.3", @@ -6375,11 +6375,11 @@ dependencies = [ "solana-faucet", "solana-gossip", "solana-local-cluster", - "solana-logger 1.14.3", + "solana-logger 1.14.4", "solana-measure", "solana-net-utils", "solana-runtime", - "solana-sdk 1.14.3", + "solana-sdk 1.14.4", "solana-streamer", "solana-transaction-status", "solana-version", @@ -6387,7 +6387,7 @@ dependencies = [ [[package]] name = "solana-transaction-status" -version = "1.14.3" +version = "1.14.4" dependencies = [ "Inflector", "base64 0.13.0", @@ -6402,7 +6402,7 @@ dependencies = [ "solana-account-decoder", "solana-measure", "solana-metrics", - "solana-sdk 1.14.3", + "solana-sdk 1.14.4", "solana-vote-program", "spl-associated-token-account", "spl-memo", @@ -6413,7 +6413,7 @@ dependencies = [ [[package]] name = "solana-upload-perf" -version = "1.14.3" +version = "1.14.4" dependencies = [ "serde_json", "solana-metrics", @@ -6421,7 +6421,7 @@ dependencies = [ [[package]] name = "solana-validator" -version = "1.14.3" +version = "1.14.4" dependencies = [ "chrono", "clap 2.33.3", @@ -6452,14 +6452,14 @@ dependencies = [ "solana-genesis-utils", "solana-gossip", "solana-ledger", - "solana-logger 1.14.3", + "solana-logger 1.14.4", "solana-metrics", "solana-net-utils", "solana-perf", "solana-poh", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.3", + "solana-sdk 1.14.4", "solana-send-transaction-service", "solana-storage-bigtable", "solana-streamer", @@ -6472,21 +6472,21 @@ dependencies = [ [[package]] name = "solana-version" -version = "1.14.3" +version = "1.14.4" dependencies = [ "log", "rustc_version 0.4.0", "semver 1.0.10", "serde", "serde_derive", - "solana-frozen-abi 1.14.3", - "solana-frozen-abi-macro 1.14.3", - "solana-sdk 1.14.3", + "solana-frozen-abi 1.14.4", + "solana-frozen-abi-macro 1.14.4", + "solana-sdk 1.14.4", ] [[package]] name = "solana-vote-program" -version = "1.14.3" +version = "1.14.4" dependencies = [ "bincode", "itertools", @@ -6497,18 +6497,18 @@ dependencies = [ "rustc_version 0.4.0", "serde", "serde_derive", - "solana-frozen-abi 1.14.3", - "solana-frozen-abi-macro 1.14.3", - "solana-logger 1.14.3", + "solana-frozen-abi 1.14.4", + "solana-frozen-abi-macro 1.14.4", + "solana-logger 1.14.4", "solana-metrics", "solana-program-runtime", - "solana-sdk 1.14.3", + "solana-sdk 1.14.4", "thiserror", ] [[package]] name = "solana-watchtower" -version = "1.14.3" +version = "1.14.4" dependencies = [ "clap 2.33.3", "humantime", @@ -6517,24 +6517,24 @@ dependencies = [ "solana-cli-config", "solana-cli-output", "solana-client", - "solana-logger 1.14.3", + "solana-logger 1.14.4", "solana-metrics", "solana-notifier", - "solana-sdk 1.14.3", + "solana-sdk 1.14.4", "solana-version", ] [[package]] name = "solana-zk-token-proof-program" -version = "1.14.3" +version = "1.14.4" dependencies = [ "bytemuck", "getrandom 0.1.16", "num-derive", "num-traits", "solana-program-runtime", - "solana-sdk 1.14.3", - "solana-zk-token-sdk 1.14.3", + "solana-sdk 1.14.4", + "solana-zk-token-sdk 1.14.4", ] [[package]] @@ -6569,7 +6569,7 @@ dependencies = [ [[package]] name = "solana-zk-token-sdk" -version = "1.14.3" +version = "1.14.4" dependencies = [ "aes-gcm-siv", "arrayref", @@ -6589,8 +6589,8 @@ dependencies = [ "serde", "serde_json", "sha3 0.9.1", - "solana-program 1.14.3", - "solana-sdk 1.14.3", + "solana-program 1.14.4", + "solana-sdk 1.14.4", "subtle", "thiserror", "zeroize", diff --git a/account-decoder/Cargo.toml b/account-decoder/Cargo.toml index d0967511a337f8..729bcf196e68b0 100644 --- a/account-decoder/Cargo.toml +++ b/account-decoder/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-account-decoder" -version = "1.14.3" +version = "1.14.4" description = "Solana account decoder" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -19,9 +19,9 @@ lazy_static = "1.4.0" serde = "1.0.138" serde_derive = "1.0.103" serde_json = "1.0.81" -solana-config-program = { path = "../programs/config", version = "=1.14.3" } -solana-sdk = { path = "../sdk", version = "=1.14.3" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.3" } +solana-config-program = { path = "../programs/config", version = "=1.14.4" } +solana-sdk = { path = "../sdk", version = "=1.14.4" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.4" } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } spl-token-2022 = { version = "=0.4.2", features = ["no-entrypoint"] } thiserror = "1.0" diff --git a/accounts-bench/Cargo.toml b/accounts-bench/Cargo.toml index a4cfe7104769e3..7ad31932cda103 100644 --- a/accounts-bench/Cargo.toml +++ b/accounts-bench/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-accounts-bench" -version = "1.14.3" +version = "1.14.4" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -12,11 +12,11 @@ publish = false clap = "2.33.1" log = "0.4.17" rayon = "1.5.3" -solana-logger = { path = "../logger", version = "=1.14.3" } -solana-measure = { path = "../measure", version = "=1.14.3" } -solana-runtime = { path = "../runtime", version = "=1.14.3" } -solana-sdk = { path = "../sdk", version = "=1.14.3" } -solana-version = { path = "../version", version = "=1.14.3" } +solana-logger = { path = "../logger", version = "=1.14.4" } +solana-measure = { path = "../measure", version = "=1.14.4" } +solana-runtime = { path = "../runtime", version = "=1.14.4" } +solana-sdk = { path = "../sdk", version = "=1.14.4" } +solana-version = { path = "../version", version = "=1.14.4" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/accounts-cluster-bench/Cargo.toml b/accounts-cluster-bench/Cargo.toml index adf26ddf30f5c5..b158169f6c03f0 100644 --- a/accounts-cluster-bench/Cargo.toml +++ b/accounts-cluster-bench/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-accounts-cluster-bench" -version = "1.14.3" +version = "1.14.4" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -13,25 +13,25 @@ clap = "2.33.1" log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.3" } -solana-clap-utils = { path = "../clap-utils", version = "=1.14.3" } -solana-client = { path = "../client", version = "=1.14.3" } -solana-faucet = { path = "../faucet", version = "=1.14.3" } -solana-gossip = { path = "../gossip", version = "=1.14.3" } -solana-logger = { path = "../logger", version = "=1.14.3" } -solana-measure = { path = "../measure", version = "=1.14.3" } -solana-net-utils = { path = "../net-utils", version = "=1.14.3" } -solana-runtime = { path = "../runtime", version = "=1.14.3" } -solana-sdk = { path = "../sdk", version = "=1.14.3" } -solana-streamer = { path = "../streamer", version = "=1.14.3" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.3" } -solana-version = { path = "../version", version = "=1.14.3" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.4" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.4" } +solana-client = { path = "../client", version = "=1.14.4" } +solana-faucet = { path = "../faucet", version = "=1.14.4" } +solana-gossip = { path = "../gossip", version = "=1.14.4" } +solana-logger = { path = "../logger", version = "=1.14.4" } +solana-measure = { path = "../measure", version = "=1.14.4" } +solana-net-utils = { path = "../net-utils", version = "=1.14.4" } +solana-runtime = { path = "../runtime", version = "=1.14.4" } +solana-sdk = { path = "../sdk", version = "=1.14.4" } +solana-streamer = { path = "../streamer", version = "=1.14.4" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.4" } +solana-version = { path = "../version", version = "=1.14.4" } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } [dev-dependencies] -solana-core = { path = "../core", version = "=1.14.3" } -solana-local-cluster = { path = "../local-cluster", version = "=1.14.3" } -solana-test-validator = { path = "../test-validator", version = "=1.14.3" } +solana-core = { path = "../core", version = "=1.14.4" } +solana-local-cluster = { path = "../local-cluster", version = "=1.14.4" } +solana-test-validator = { path = "../test-validator", version = "=1.14.4" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/banking-bench/Cargo.toml b/banking-bench/Cargo.toml index a57859d07f07c3..edc21f7e7f0da8 100644 --- a/banking-bench/Cargo.toml +++ b/banking-bench/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-banking-bench" -version = "1.14.3" +version = "1.14.4" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,18 +14,18 @@ crossbeam-channel = "0.5" log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" -solana-client = { path = "../client", version = "=1.14.3" } -solana-core = { path = "../core", version = "=1.14.3" } -solana-gossip = { path = "../gossip", version = "=1.14.3" } -solana-ledger = { path = "../ledger", version = "=1.14.3" } -solana-logger = { path = "../logger", version = "=1.14.3" } -solana-measure = { path = "../measure", version = "=1.14.3" } -solana-perf = { path = "../perf", version = "=1.14.3" } -solana-poh = { path = "../poh", version = "=1.14.3" } -solana-runtime = { path = "../runtime", version = "=1.14.3" } -solana-sdk = { path = "../sdk", version = "=1.14.3" } -solana-streamer = { path = "../streamer", version = "=1.14.3" } -solana-version = { path = "../version", version = "=1.14.3" } +solana-client = { path = "../client", version = "=1.14.4" } +solana-core = { path = "../core", version = "=1.14.4" } +solana-gossip = { path = "../gossip", version = "=1.14.4" } +solana-ledger = { path = "../ledger", version = "=1.14.4" } +solana-logger = { path = "../logger", version = "=1.14.4" } +solana-measure = { path = "../measure", version = "=1.14.4" } +solana-perf = { path = "../perf", version = "=1.14.4" } +solana-poh = { path = "../poh", version = "=1.14.4" } +solana-runtime = { path = "../runtime", version = "=1.14.4" } +solana-sdk = { path = "../sdk", version = "=1.14.4" } +solana-streamer = { path = "../streamer", version = "=1.14.4" } +solana-version = { path = "../version", version = "=1.14.4" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/banks-client/Cargo.toml b/banks-client/Cargo.toml index aee3ee9dfd71de..a2a301076eafb3 100644 --- a/banks-client/Cargo.toml +++ b/banks-client/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-banks-client" -version = "1.14.3" +version = "1.14.4" description = "Solana banks client" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,17 +12,17 @@ edition = "2021" [dependencies] borsh = "0.9.3" futures = "0.3" -solana-banks-interface = { path = "../banks-interface", version = "=1.14.3" } -solana-program = { path = "../sdk/program", version = "=1.14.3" } -solana-sdk = { path = "../sdk", version = "=1.14.3" } +solana-banks-interface = { path = "../banks-interface", version = "=1.14.4" } +solana-program = { path = "../sdk/program", version = "=1.14.4" } +solana-sdk = { path = "../sdk", version = "=1.14.4" } tarpc = { version = "0.29.0", features = ["full"] } thiserror = "1.0" tokio = { version = "~1.14.1", features = ["full"] } tokio-serde = { version = "0.8", features = ["bincode"] } [dev-dependencies] -solana-banks-server = { path = "../banks-server", version = "=1.14.3" } -solana-runtime = { path = "../runtime", version = "=1.14.3" } +solana-banks-server = { path = "../banks-server", version = "=1.14.4" } +solana-runtime = { path = "../runtime", version = "=1.14.4" } [lib] crate-type = ["lib"] diff --git a/banks-interface/Cargo.toml b/banks-interface/Cargo.toml index 92b95aa42c4742..6e3b9a4be2adaf 100644 --- a/banks-interface/Cargo.toml +++ b/banks-interface/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-banks-interface" -version = "1.14.3" +version = "1.14.4" description = "Solana banks RPC interface" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -11,7 +11,7 @@ edition = "2021" [dependencies] serde = { version = "1.0.138", features = ["derive"] } -solana-sdk = { path = "../sdk", version = "=1.14.3" } +solana-sdk = { path = "../sdk", version = "=1.14.4" } tarpc = { version = "0.29.0", features = ["full"] } [lib] diff --git a/banks-server/Cargo.toml b/banks-server/Cargo.toml index afb32f2276f440..3eaeb32fcbbe3d 100644 --- a/banks-server/Cargo.toml +++ b/banks-server/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-banks-server" -version = "1.14.3" +version = "1.14.4" description = "Solana banks server" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,11 +13,11 @@ edition = "2021" bincode = "1.3.3" crossbeam-channel = "0.5" futures = "0.3" -solana-banks-interface = { path = "../banks-interface", version = "=1.14.3" } -solana-client = { path = "../client", version = "=1.14.3" } -solana-runtime = { path = "../runtime", version = "=1.14.3" } -solana-sdk = { path = "../sdk", version = "=1.14.3" } -solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.3" } +solana-banks-interface = { path = "../banks-interface", version = "=1.14.4" } +solana-client = { path = "../client", version = "=1.14.4" } +solana-runtime = { path = "../runtime", version = "=1.14.4" } +solana-sdk = { path = "../sdk", version = "=1.14.4" } +solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.4" } tarpc = { version = "0.29.0", features = ["full"] } tokio = { version = "1", features = ["full"] } tokio-serde = { version = "0.8", features = ["bincode"] } diff --git a/bench-streamer/Cargo.toml b/bench-streamer/Cargo.toml index 9441cd1c2eaaa3..9b6a4d5f48c55f 100644 --- a/bench-streamer/Cargo.toml +++ b/bench-streamer/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-bench-streamer" -version = "1.14.3" +version = "1.14.4" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -11,9 +11,9 @@ publish = false [dependencies] clap = { version = "3.1.5", features = ["cargo"] } crossbeam-channel = "0.5" -solana-net-utils = { path = "../net-utils", version = "=1.14.3" } -solana-streamer = { path = "../streamer", version = "=1.14.3" } -solana-version = { path = "../version", version = "=1.14.3" } +solana-net-utils = { path = "../net-utils", version = "=1.14.4" } +solana-streamer = { path = "../streamer", version = "=1.14.4" } +solana-version = { path = "../version", version = "=1.14.4" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/bench-tps/Cargo.toml b/bench-tps/Cargo.toml index c37b9ef6fd7604..ee2bdb35aa6e64 100644 --- a/bench-tps/Cargo.toml +++ b/bench-tps/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-bench-tps" -version = "1.14.3" +version = "1.14.4" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -15,28 +15,28 @@ log = "0.4.17" rayon = "1.5.3" serde_json = "1.0.81" serde_yaml = "0.8.26" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.3" } -solana-cli-config = { path = "../cli-config", version = "=1.14.3" } -solana-client = { path = "../client", version = "=1.14.3" } -solana-core = { path = "../core", version = "=1.14.3" } -solana-faucet = { path = "../faucet", version = "=1.14.3" } -solana-genesis = { path = "../genesis", version = "=1.14.3" } -solana-gossip = { path = "../gossip", version = "=1.14.3" } -solana-logger = { path = "../logger", version = "=1.14.3" } -solana-measure = { path = "../measure", version = "=1.14.3" } -solana-metrics = { path = "../metrics", version = "=1.14.3" } -solana-net-utils = { path = "../net-utils", version = "=1.14.3" } -solana-rpc = { path = "../rpc", version = "=1.14.3" } -solana-runtime = { path = "../runtime", version = "=1.14.3" } -solana-sdk = { path = "../sdk", version = "=1.14.3" } -solana-streamer = { path = "../streamer", version = "=1.14.3" } -solana-version = { path = "../version", version = "=1.14.3" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.4" } +solana-cli-config = { path = "../cli-config", version = "=1.14.4" } +solana-client = { path = "../client", version = "=1.14.4" } +solana-core = { path = "../core", version = "=1.14.4" } +solana-faucet = { path = "../faucet", version = "=1.14.4" } +solana-genesis = { path = "../genesis", version = "=1.14.4" } +solana-gossip = { path = "../gossip", version = "=1.14.4" } +solana-logger = { path = "../logger", version = "=1.14.4" } +solana-measure = { path = "../measure", version = "=1.14.4" } +solana-metrics = { path = "../metrics", version = "=1.14.4" } +solana-net-utils = { path = "../net-utils", version = "=1.14.4" } +solana-rpc = { path = "../rpc", version = "=1.14.4" } +solana-runtime = { path = "../runtime", version = "=1.14.4" } +solana-sdk = { path = "../sdk", version = "=1.14.4" } +solana-streamer = { path = "../streamer", version = "=1.14.4" } +solana-version = { path = "../version", version = "=1.14.4" } thiserror = "1.0" [dev-dependencies] serial_test = "0.8.0" -solana-local-cluster = { path = "../local-cluster", version = "=1.14.3" } -solana-test-validator = { path = "../test-validator", version = "=1.14.3" } +solana-local-cluster = { path = "../local-cluster", version = "=1.14.4" } +solana-test-validator = { path = "../test-validator", version = "=1.14.4" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/bloom/Cargo.toml b/bloom/Cargo.toml index c7d427004f3beb..5fc28d72469d92 100644 --- a/bloom/Cargo.toml +++ b/bloom/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bloom" -version = "1.14.3" +version = "1.14.4" description = "Solana bloom filter" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -17,9 +17,9 @@ rand = "0.7.0" rayon = "1.5.3" serde = { version = "1.0.138", features = ["rc"] } serde_derive = "1.0.103" -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.3" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.3" } -solana-sdk = { path = "../sdk", version = "=1.14.3" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.4" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.4" } +solana-sdk = { path = "../sdk", version = "=1.14.4" } [lib] crate-type = ["lib"] diff --git a/bucket_map/Cargo.toml b/bucket_map/Cargo.toml index 941ba523527bb9..bfcb7b5ccf6834 100644 --- a/bucket_map/Cargo.toml +++ b/bucket_map/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bucket-map" -version = "1.14.3" +version = "1.14.4" description = "solana-bucket-map" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-bucket-map" @@ -15,14 +15,14 @@ log = { version = "0.4.17" } memmap2 = "0.5.3" modular-bitfield = "0.11.2" rand = "0.7.0" -solana-measure = { path = "../measure", version = "=1.14.3" } -solana-sdk = { path = "../sdk", version = "=1.14.3" } +solana-measure = { path = "../measure", version = "=1.14.4" } +solana-sdk = { path = "../sdk", version = "=1.14.4" } tempfile = "3.3.0" [dev-dependencies] fs_extra = "1.2.0" rayon = "1.5.3" -solana-logger = { path = "../logger", version = "=1.14.3" } +solana-logger = { path = "../logger", version = "=1.14.4" } [lib] crate-type = ["lib"] diff --git a/clap-utils/Cargo.toml b/clap-utils/Cargo.toml index 70b9ff58e8c24e..dfa31b46c45238 100644 --- a/clap-utils/Cargo.toml +++ b/clap-utils/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-clap-utils" -version = "1.14.3" +version = "1.14.4" description = "Solana utilities for the clap" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,9 +13,9 @@ edition = "2021" chrono = "0.4" clap = "2.33.0" rpassword = "6.0" -solana-perf = { path = "../perf", version = "=1.14.3" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.3", default-features = false } -solana-sdk = { path = "../sdk", version = "=1.14.3" } +solana-perf = { path = "../perf", version = "=1.14.4" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.4", default-features = false } +solana-sdk = { path = "../sdk", version = "=1.14.4" } thiserror = "1.0.31" tiny-bip39 = "0.8.2" uriparse = "0.6.4" diff --git a/clap-v3-utils/Cargo.toml b/clap-v3-utils/Cargo.toml index e02e268e1b6dd5..350abe2b32b813 100644 --- a/clap-v3-utils/Cargo.toml +++ b/clap-v3-utils/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-clap-v3-utils" -version = "1.14.3" +version = "1.14.4" description = "Solana utilities for the clap v3" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,9 +13,9 @@ edition = "2021" chrono = "0.4" clap = { version = "3.1.5", features = ["cargo"] } rpassword = "6.0" -solana-perf = { path = "../perf", version = "=1.14.3" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.3", default-features = false } -solana-sdk = { path = "../sdk", version = "=1.14.3" } +solana-perf = { path = "../perf", version = "=1.14.4" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.4", default-features = false } +solana-sdk = { path = "../sdk", version = "=1.14.4" } thiserror = "1.0.31" tiny-bip39 = "0.8.2" uriparse = "0.6.4" diff --git a/cli-config/Cargo.toml b/cli-config/Cargo.toml index 850ecca264146c..9b5feac3a4b115 100644 --- a/cli-config/Cargo.toml +++ b/cli-config/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-cli-config" description = "Blockchain, Rebuilt for Scale" -version = "1.14.3" +version = "1.14.4" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -15,8 +15,8 @@ lazy_static = "1.4.0" serde = "1.0.138" serde_derive = "1.0.103" serde_yaml = "0.8.26" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.3" } -solana-sdk = { path = "../sdk", version = "=1.14.3" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.4" } +solana-sdk = { path = "../sdk", version = "=1.14.4" } url = "2.2.2" [dev-dependencies] diff --git a/cli-output/Cargo.toml b/cli-output/Cargo.toml index fc335781213685..50126c78e930d2 100644 --- a/cli-output/Cargo.toml +++ b/cli-output/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-cli-output" description = "Blockchain, Rebuilt for Scale" -version = "1.14.3" +version = "1.14.4" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -21,13 +21,13 @@ pretty-hex = "0.3.0" semver = "1.0.10" serde = "1.0.138" serde_json = "1.0.81" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.3" } -solana-clap-utils = { path = "../clap-utils", version = "=1.14.3" } -solana-cli-config = { path = "../cli-config", version = "=1.14.3" } -solana-client = { path = "../client", version = "=1.14.3" } -solana-sdk = { path = "../sdk", version = "=1.14.3" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.3" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.3" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.4" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.4" } +solana-cli-config = { path = "../cli-config", version = "=1.14.4" } +solana-client = { path = "../client", version = "=1.14.4" } +solana-sdk = { path = "../sdk", version = "=1.14.4" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.4" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.4" } spl-memo = { version = "=3.0.1", features = ["no-entrypoint"] } [dev-dependencies] diff --git a/cli/Cargo.toml b/cli/Cargo.toml index 12806d94c4bb6b..ec088fd31a4fa5 100644 --- a/cli/Cargo.toml +++ b/cli/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-cli" description = "Blockchain, Rebuilt for Scale" -version = "1.14.3" +version = "1.14.4" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -27,29 +27,29 @@ semver = "1.0.10" serde = "1.0.138" serde_derive = "1.0.103" serde_json = "1.0.81" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.3" } -solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.3" } -solana-clap-utils = { path = "../clap-utils", version = "=1.14.3" } -solana-cli-config = { path = "../cli-config", version = "=1.14.3" } -solana-cli-output = { path = "../cli-output", version = "=1.14.3" } -solana-client = { path = "../client", version = "=1.14.3" } -solana-config-program = { path = "../programs/config", version = "=1.14.3" } -solana-faucet = { path = "../faucet", version = "=1.14.3" } -solana-logger = { path = "../logger", version = "=1.14.3" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.3" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.3" } -solana-sdk = { path = "../sdk", version = "=1.14.3" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.3" } -solana-version = { path = "../version", version = "=1.14.3" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.3" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.4" } +solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.4" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.4" } +solana-cli-config = { path = "../cli-config", version = "=1.14.4" } +solana-cli-output = { path = "../cli-output", version = "=1.14.4" } +solana-client = { path = "../client", version = "=1.14.4" } +solana-config-program = { path = "../programs/config", version = "=1.14.4" } +solana-faucet = { path = "../faucet", version = "=1.14.4" } +solana-logger = { path = "../logger", version = "=1.14.4" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.4" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.4" } +solana-sdk = { path = "../sdk", version = "=1.14.4" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.4" } +solana-version = { path = "../version", version = "=1.14.4" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.4" } solana_rbpf = "=0.2.31" spl-memo = { version = "=3.0.1", features = ["no-entrypoint"] } thiserror = "1.0.31" tiny-bip39 = "0.8.2" [dev-dependencies] -solana-streamer = { path = "../streamer", version = "=1.14.3" } -solana-test-validator = { path = "../test-validator", version = "=1.14.3" } +solana-streamer = { path = "../streamer", version = "=1.14.4" } +solana-test-validator = { path = "../test-validator", version = "=1.14.4" } tempfile = "3.3.0" [[bin]] diff --git a/client-test/Cargo.toml b/client-test/Cargo.toml index b36b2e30ad4f84..34941ca6c0c460 100644 --- a/client-test/Cargo.toml +++ b/client-test/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-client-test" -version = "1.14.3" +version = "1.14.4" description = "Solana RPC Test" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,25 +14,25 @@ publish = false futures-util = "0.3.21" serde_json = "1.0.81" serial_test = "0.8.0" -solana-client = { path = "../client", version = "=1.14.3" } -solana-ledger = { path = "../ledger", version = "=1.14.3" } -solana-measure = { path = "../measure", version = "=1.14.3" } -solana-merkle-tree = { path = "../merkle-tree", version = "=1.14.3" } -solana-metrics = { path = "../metrics", version = "=1.14.3" } -solana-perf = { path = "../perf", version = "=1.14.3" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.3" } -solana-rpc = { path = "../rpc", version = "=1.14.3" } -solana-runtime = { path = "../runtime", version = "=1.14.3" } -solana-sdk = { path = "../sdk", version = "=1.14.3" } -solana-streamer = { path = "../streamer", version = "=1.14.3" } -solana-test-validator = { path = "../test-validator", version = "=1.14.3" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.3" } -solana-version = { path = "../version", version = "=1.14.3" } +solana-client = { path = "../client", version = "=1.14.4" } +solana-ledger = { path = "../ledger", version = "=1.14.4" } +solana-measure = { path = "../measure", version = "=1.14.4" } +solana-merkle-tree = { path = "../merkle-tree", version = "=1.14.4" } +solana-metrics = { path = "../metrics", version = "=1.14.4" } +solana-perf = { path = "../perf", version = "=1.14.4" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.4" } +solana-rpc = { path = "../rpc", version = "=1.14.4" } +solana-runtime = { path = "../runtime", version = "=1.14.4" } +solana-sdk = { path = "../sdk", version = "=1.14.4" } +solana-streamer = { path = "../streamer", version = "=1.14.4" } +solana-test-validator = { path = "../test-validator", version = "=1.14.4" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.4" } +solana-version = { path = "../version", version = "=1.14.4" } systemstat = "0.1.11" tokio = { version = "~1.14.1", features = ["full"] } [dev-dependencies] -solana-logger = { path = "../logger", version = "=1.14.3" } +solana-logger = { path = "../logger", version = "=1.14.4" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/client/Cargo.toml b/client/Cargo.toml index 68db38e2c3ace8..fcb0bc2fc1743d 100644 --- a/client/Cargo.toml +++ b/client/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-client" -version = "1.14.3" +version = "1.14.4" description = "Solana Client" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -38,17 +38,17 @@ semver = "1.0.10" serde = "1.0.138" serde_derive = "1.0.103" serde_json = "1.0.81" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.3" } -solana-clap-utils = { path = "../clap-utils", version = "=1.14.3" } -solana-faucet = { path = "../faucet", version = "=1.14.3" } -solana-measure = { path = "../measure", version = "=1.14.3" } -solana-metrics = { path = "../metrics", version = "=1.14.3" } -solana-net-utils = { path = "../net-utils", version = "=1.14.3" } -solana-sdk = { path = "../sdk", version = "=1.14.3" } -solana-streamer = { path = "../streamer", version = "=1.14.3" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.3" } -solana-version = { path = "../version", version = "=1.14.3" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.3" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.4" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.4" } +solana-faucet = { path = "../faucet", version = "=1.14.4" } +solana-measure = { path = "../measure", version = "=1.14.4" } +solana-metrics = { path = "../metrics", version = "=1.14.4" } +solana-net-utils = { path = "../net-utils", version = "=1.14.4" } +solana-sdk = { path = "../sdk", version = "=1.14.4" } +solana-streamer = { path = "../streamer", version = "=1.14.4" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.4" } +solana-version = { path = "../version", version = "=1.14.4" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.4" } spl-token-2022 = { version = "=0.4.2", features = ["no-entrypoint"] } thiserror = "1.0" tokio = { version = "1", features = ["full"] } @@ -61,8 +61,8 @@ url = "2.2.2" anyhow = "1.0.58" assert_matches = "1.5.0" jsonrpc-http-server = "18.0.0" -solana-logger = { path = "../logger", version = "=1.14.3" } -solana-perf = { path = "../perf", version = "=1.14.3" } +solana-logger = { path = "../logger", version = "=1.14.4" } +solana-perf = { path = "../perf", version = "=1.14.4" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/core/Cargo.toml b/core/Cargo.toml index a92980c4dfd1af..288a808e56100f 100644 --- a/core/Cargo.toml +++ b/core/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "solana-core" description = "Blockchain, Rebuilt for Scale" -version = "1.14.3" +version = "1.14.4" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-core" readme = "../README.md" @@ -35,30 +35,30 @@ rand_chacha = "0.2.2" rayon = "1.5.3" serde = "1.0.138" serde_derive = "1.0.103" -solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.3" } -solana-bloom = { path = "../bloom", version = "=1.14.3" } -solana-client = { path = "../client", version = "=1.14.3" } -solana-entry = { path = "../entry", version = "=1.14.3" } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.3" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.3" } -solana-geyser-plugin-manager = { path = "../geyser-plugin-manager", version = "=1.14.3" } -solana-gossip = { path = "../gossip", version = "=1.14.3" } -solana-ledger = { path = "../ledger", version = "=1.14.3" } -solana-measure = { path = "../measure", version = "=1.14.3" } -solana-metrics = { path = "../metrics", version = "=1.14.3" } -solana-net-utils = { path = "../net-utils", version = "=1.14.3" } -solana-perf = { path = "../perf", version = "=1.14.3" } -solana-poh = { path = "../poh", version = "=1.14.3" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.3" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.3" } -solana-rpc = { path = "../rpc", version = "=1.14.3" } -solana-runtime = { path = "../runtime", version = "=1.14.3" } -solana-sdk = { path = "../sdk", version = "=1.14.3" } -solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.3" } -solana-streamer = { path = "../streamer", version = "=1.14.3" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.3" } -solana-version = { path = "../version", version = "=1.14.3" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.3" } +solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.4" } +solana-bloom = { path = "../bloom", version = "=1.14.4" } +solana-client = { path = "../client", version = "=1.14.4" } +solana-entry = { path = "../entry", version = "=1.14.4" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.4" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.4" } +solana-geyser-plugin-manager = { path = "../geyser-plugin-manager", version = "=1.14.4" } +solana-gossip = { path = "../gossip", version = "=1.14.4" } +solana-ledger = { path = "../ledger", version = "=1.14.4" } +solana-measure = { path = "../measure", version = "=1.14.4" } +solana-metrics = { path = "../metrics", version = "=1.14.4" } +solana-net-utils = { path = "../net-utils", version = "=1.14.4" } +solana-perf = { path = "../perf", version = "=1.14.4" } +solana-poh = { path = "../poh", version = "=1.14.4" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.4" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.4" } +solana-rpc = { path = "../rpc", version = "=1.14.4" } +solana-runtime = { path = "../runtime", version = "=1.14.4" } +solana-sdk = { path = "../sdk", version = "=1.14.4" } +solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.4" } +solana-streamer = { path = "../streamer", version = "=1.14.4" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.4" } +solana-version = { path = "../version", version = "=1.14.4" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.4" } sys-info = "0.9.1" tempfile = "3.3.0" thiserror = "1.0" @@ -70,9 +70,9 @@ matches = "0.1.9" raptorq = "1.7.0" serde_json = "1.0.81" serial_test = "0.8.0" -solana-logger = { path = "../logger", version = "=1.14.3" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.3" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.3" } +solana-logger = { path = "../logger", version = "=1.14.4" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.4" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.4" } static_assertions = "1.1.0" systemstat = "0.1.11" test-case = "2.1.0" diff --git a/dos/Cargo.toml b/dos/Cargo.toml index 9ac116c08d10a4..48f1f399079fb3 100644 --- a/dos/Cargo.toml +++ b/dos/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-dos" -version = "1.14.3" +version = "1.14.4" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -17,23 +17,23 @@ itertools = "0.10.3" log = "0.4.17" rand = "0.7.0" serde = "1.0.138" -solana-bench-tps = { path = "../bench-tps", version = "=1.14.3" } -solana-client = { path = "../client", version = "=1.14.3" } -solana-core = { path = "../core", version = "=1.14.3" } -solana-faucet = { path = "../faucet", version = "=1.14.3" } -solana-gossip = { path = "../gossip", version = "=1.14.3" } -solana-logger = { path = "../logger", version = "=1.14.3" } -solana-measure = { path = "../measure", version = "=1.14.3" } -solana-net-utils = { path = "../net-utils", version = "=1.14.3" } -solana-perf = { path = "../perf", version = "=1.14.3" } -solana-rpc = { path = "../rpc", version = "=1.14.3" } -solana-sdk = { path = "../sdk", version = "=1.14.3" } -solana-streamer = { path = "../streamer", version = "=1.14.3" } -solana-version = { path = "../version", version = "=1.14.3" } +solana-bench-tps = { path = "../bench-tps", version = "=1.14.4" } +solana-client = { path = "../client", version = "=1.14.4" } +solana-core = { path = "../core", version = "=1.14.4" } +solana-faucet = { path = "../faucet", version = "=1.14.4" } +solana-gossip = { path = "../gossip", version = "=1.14.4" } +solana-logger = { path = "../logger", version = "=1.14.4" } +solana-measure = { path = "../measure", version = "=1.14.4" } +solana-net-utils = { path = "../net-utils", version = "=1.14.4" } +solana-perf = { path = "../perf", version = "=1.14.4" } +solana-rpc = { path = "../rpc", version = "=1.14.4" } +solana-sdk = { path = "../sdk", version = "=1.14.4" } +solana-streamer = { path = "../streamer", version = "=1.14.4" } +solana-version = { path = "../version", version = "=1.14.4" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] [dev-dependencies] serial_test = "0.8.0" -solana-local-cluster = { path = "../local-cluster", version = "=1.14.3" } +solana-local-cluster = { path = "../local-cluster", version = "=1.14.4" } diff --git a/download-utils/Cargo.toml b/download-utils/Cargo.toml index 2f0cc2f0af30a5..e86942938b86f9 100644 --- a/download-utils/Cargo.toml +++ b/download-utils/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-download-utils" -version = "1.14.3" +version = "1.14.4" description = "Solana Download Utils" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,8 +14,8 @@ console = "0.15.0" indicatif = "0.16.2" log = "0.4.17" reqwest = { version = "0.11.11", default-features = false, features = ["blocking", "brotli", "deflate", "gzip", "rustls-tls", "json"] } -solana-runtime = { path = "../runtime", version = "=1.14.3" } -solana-sdk = { path = "../sdk", version = "=1.14.3" } +solana-runtime = { path = "../runtime", version = "=1.14.4" } +solana-sdk = { path = "../sdk", version = "=1.14.4" } [lib] crate-type = ["lib"] diff --git a/entry/Cargo.toml b/entry/Cargo.toml index 5e039d56b32ae1..5580a6e10b4c1f 100644 --- a/entry/Cargo.toml +++ b/entry/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-entry" -version = "1.14.3" +version = "1.14.4" description = "Solana Entry" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -19,16 +19,16 @@ log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" serde = "1.0.138" -solana-measure = { path = "../measure", version = "=1.14.3" } -solana-merkle-tree = { path = "../merkle-tree", version = "=1.14.3" } -solana-metrics = { path = "../metrics", version = "=1.14.3" } -solana-perf = { path = "../perf", version = "=1.14.3" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.3" } -solana-sdk = { path = "../sdk", version = "=1.14.3" } +solana-measure = { path = "../measure", version = "=1.14.4" } +solana-merkle-tree = { path = "../merkle-tree", version = "=1.14.4" } +solana-metrics = { path = "../metrics", version = "=1.14.4" } +solana-perf = { path = "../perf", version = "=1.14.4" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.4" } +solana-sdk = { path = "../sdk", version = "=1.14.4" } [dev-dependencies] matches = "0.1.9" -solana-logger = { path = "../logger", version = "=1.14.3" } +solana-logger = { path = "../logger", version = "=1.14.4" } [lib] crate-type = ["lib"] diff --git a/faucet/Cargo.toml b/faucet/Cargo.toml index 1c425a44f9b187..604542dcd4a4d1 100644 --- a/faucet/Cargo.toml +++ b/faucet/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-faucet" -version = "1.14.3" +version = "1.14.4" description = "Solana Faucet" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -17,12 +17,12 @@ crossbeam-channel = "0.5" log = "0.4.17" serde = "1.0.138" serde_derive = "1.0.103" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.3" } -solana-cli-config = { path = "../cli-config", version = "=1.14.3" } -solana-logger = { path = "../logger", version = "=1.14.3" } -solana-metrics = { path = "../metrics", version = "=1.14.3" } -solana-sdk = { path = "../sdk", version = "=1.14.3" } -solana-version = { path = "../version", version = "=1.14.3" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.4" } +solana-cli-config = { path = "../cli-config", version = "=1.14.4" } +solana-logger = { path = "../logger", version = "=1.14.4" } +solana-metrics = { path = "../metrics", version = "=1.14.4" } +solana-sdk = { path = "../sdk", version = "=1.14.4" } +solana-version = { path = "../version", version = "=1.14.4" } spl-memo = { version = "=3.0.1", features = ["no-entrypoint"] } thiserror = "1.0" tokio = { version = "1", features = ["full"] } diff --git a/frozen-abi/Cargo.toml b/frozen-abi/Cargo.toml index 8ad372a14eaeaa..f4e7175d378508 100644 --- a/frozen-abi/Cargo.toml +++ b/frozen-abi/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-frozen-abi" -version = "1.14.3" +version = "1.14.4" description = "Solana Frozen ABI" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -20,7 +20,7 @@ serde_bytes = "0.11" serde_derive = "1.0" serde_json = "1.0" sha2 = "0.10.2" -solana-frozen-abi-macro = { path = "macro", version = "=1.14.3" } +solana-frozen-abi-macro = { path = "macro", version = "=1.14.4" } thiserror = "1.0" [target.'cfg(not(target_os = "solana"))'.dependencies] @@ -43,7 +43,7 @@ rand_core = { version = "0.6.3", features = ["alloc", "getrandom", "std"] } subtle = { version = "2.4.1", features = ["default", "i128", "std"] } [target.'cfg(not(target_os = "solana"))'.dev-dependencies] -solana-logger = { path = "../logger", version = "=1.14.3" } +solana-logger = { path = "../logger", version = "=1.14.4" } [build-dependencies] rustc_version = "0.4" diff --git a/frozen-abi/macro/Cargo.toml b/frozen-abi/macro/Cargo.toml index 8bc9076b8694fd..193f1f25ad9332 100644 --- a/frozen-abi/macro/Cargo.toml +++ b/frozen-abi/macro/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-frozen-abi-macro" -version = "1.14.3" +version = "1.14.4" description = "Solana Frozen ABI Macro" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/genesis-utils/Cargo.toml b/genesis-utils/Cargo.toml index d86c3e75a48e06..d4c53190d7f2b5 100644 --- a/genesis-utils/Cargo.toml +++ b/genesis-utils/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-genesis-utils" -version = "1.14.3" +version = "1.14.4" description = "Solana Genesis Utils" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,9 +10,9 @@ documentation = "https://docs.rs/solana-download-utils" edition = "2021" [dependencies] -solana-download-utils = { path = "../download-utils", version = "=1.14.3" } -solana-runtime = { path = "../runtime", version = "=1.14.3" } -solana-sdk = { path = "../sdk", version = "=1.14.3" } +solana-download-utils = { path = "../download-utils", version = "=1.14.4" } +solana-runtime = { path = "../runtime", version = "=1.14.4" } +solana-sdk = { path = "../sdk", version = "=1.14.4" } [lib] crate-type = ["lib"] diff --git a/genesis/Cargo.toml b/genesis/Cargo.toml index 2b8f32cd3270ca..473f9bbfd201e2 100644 --- a/genesis/Cargo.toml +++ b/genesis/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-genesis" description = "Blockchain, Rebuilt for Scale" -version = "1.14.3" +version = "1.14.4" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -15,16 +15,16 @@ clap = "2.33.1" serde = "1.0.138" serde_json = "1.0.81" serde_yaml = "0.8.26" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.3" } -solana-cli-config = { path = "../cli-config", version = "=1.14.3" } -solana-entry = { path = "../entry", version = "=1.14.3" } -solana-ledger = { path = "../ledger", version = "=1.14.3" } -solana-logger = { path = "../logger", version = "=1.14.3" } -solana-runtime = { path = "../runtime", version = "=1.14.3" } -solana-sdk = { path = "../sdk", version = "=1.14.3" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.3" } -solana-version = { path = "../version", version = "=1.14.3" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.3" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.4" } +solana-cli-config = { path = "../cli-config", version = "=1.14.4" } +solana-entry = { path = "../entry", version = "=1.14.4" } +solana-ledger = { path = "../ledger", version = "=1.14.4" } +solana-logger = { path = "../logger", version = "=1.14.4" } +solana-runtime = { path = "../runtime", version = "=1.14.4" } +solana-sdk = { path = "../sdk", version = "=1.14.4" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.4" } +solana-version = { path = "../version", version = "=1.14.4" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.4" } tempfile = "3.3.0" [[bin]] diff --git a/geyser-plugin-interface/Cargo.toml b/geyser-plugin-interface/Cargo.toml index 7262f490d56a42..c07e304bad323d 100644 --- a/geyser-plugin-interface/Cargo.toml +++ b/geyser-plugin-interface/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-geyser-plugin-interface" description = "The Solana Geyser plugin interface." -version = "1.14.3" +version = "1.14.4" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -11,8 +11,8 @@ documentation = "https://docs.rs/solana-geyser-plugin-interface" [dependencies] log = "0.4.17" -solana-sdk = { path = "../sdk", version = "=1.14.3" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.3" } +solana-sdk = { path = "../sdk", version = "=1.14.4" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.4" } thiserror = "1.0.31" [package.metadata.docs.rs] diff --git a/geyser-plugin-manager/Cargo.toml b/geyser-plugin-manager/Cargo.toml index 231d8468e1972f..a499a6d27f148d 100644 --- a/geyser-plugin-manager/Cargo.toml +++ b/geyser-plugin-manager/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-geyser-plugin-manager" description = "The Solana Geyser plugin manager." -version = "1.14.3" +version = "1.14.4" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -16,13 +16,13 @@ json5 = "0.4.1" libloading = "0.7.3" log = "0.4.17" serde_json = "1.0.81" -solana-geyser-plugin-interface = { path = "../geyser-plugin-interface", version = "=1.14.3" } -solana-measure = { path = "../measure", version = "=1.14.3" } -solana-metrics = { path = "../metrics", version = "=1.14.3" } -solana-rpc = { path = "../rpc", version = "=1.14.3" } -solana-runtime = { path = "../runtime", version = "=1.14.3" } -solana-sdk = { path = "../sdk", version = "=1.14.3" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.3" } +solana-geyser-plugin-interface = { path = "../geyser-plugin-interface", version = "=1.14.4" } +solana-measure = { path = "../measure", version = "=1.14.4" } +solana-metrics = { path = "../metrics", version = "=1.14.4" } +solana-rpc = { path = "../rpc", version = "=1.14.4" } +solana-runtime = { path = "../runtime", version = "=1.14.4" } +solana-sdk = { path = "../sdk", version = "=1.14.4" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.4" } thiserror = "1.0.31" [package.metadata.docs.rs] diff --git a/gossip/Cargo.toml b/gossip/Cargo.toml index e8cbfcc310cac2..42eee22d3677ac 100644 --- a/gossip/Cargo.toml +++ b/gossip/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-gossip" description = "Blockchain, Rebuilt for Scale" -version = "1.14.3" +version = "1.14.4" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -27,24 +27,24 @@ rayon = "1.5.3" serde = "1.0.138" serde_bytes = "0.11" serde_derive = "1.0.103" -solana-bloom = { path = "../bloom", version = "=1.14.3" } -solana-clap-utils = { path = "../clap-utils", version = "=1.14.3" } -solana-client = { path = "../client", version = "=1.14.3" } -solana-entry = { path = "../entry", version = "=1.14.3" } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.3" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.3" } -solana-ledger = { path = "../ledger", version = "=1.14.3" } -solana-logger = { path = "../logger", version = "=1.14.3" } -solana-measure = { path = "../measure", version = "=1.14.3" } -solana-metrics = { path = "../metrics", version = "=1.14.3" } -solana-net-utils = { path = "../net-utils", version = "=1.14.3" } -solana-perf = { path = "../perf", version = "=1.14.3" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.3" } -solana-runtime = { path = "../runtime", version = "=1.14.3" } -solana-sdk = { path = "../sdk", version = "=1.14.3" } -solana-streamer = { path = "../streamer", version = "=1.14.3" } -solana-version = { path = "../version", version = "=1.14.3" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.3" } +solana-bloom = { path = "../bloom", version = "=1.14.4" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.4" } +solana-client = { path = "../client", version = "=1.14.4" } +solana-entry = { path = "../entry", version = "=1.14.4" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.4" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.4" } +solana-ledger = { path = "../ledger", version = "=1.14.4" } +solana-logger = { path = "../logger", version = "=1.14.4" } +solana-measure = { path = "../measure", version = "=1.14.4" } +solana-metrics = { path = "../metrics", version = "=1.14.4" } +solana-net-utils = { path = "../net-utils", version = "=1.14.4" } +solana-perf = { path = "../perf", version = "=1.14.4" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.4" } +solana-runtime = { path = "../runtime", version = "=1.14.4" } +solana-sdk = { path = "../sdk", version = "=1.14.4" } +solana-streamer = { path = "../streamer", version = "=1.14.4" } +solana-version = { path = "../version", version = "=1.14.4" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.4" } thiserror = "1.0" [dev-dependencies] diff --git a/install/Cargo.toml b/install/Cargo.toml index 2b726449c3e1ad..d4ad845b5aea07 100644 --- a/install/Cargo.toml +++ b/install/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-install" description = "The solana cluster software installer" -version = "1.14.3" +version = "1.14.4" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -26,12 +26,12 @@ reqwest = { version = "0.11.11", default-features = false, features = ["blocking semver = "1.0.10" serde = { version = "1.0.138", features = ["derive"] } serde_yaml = "0.8.26" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.3" } -solana-client = { path = "../client", version = "=1.14.3" } -solana-config-program = { path = "../programs/config", version = "=1.14.3" } -solana-logger = { path = "../logger", version = "=1.14.3" } -solana-sdk = { path = "../sdk", version = "=1.14.3" } -solana-version = { path = "../version", version = "=1.14.3" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.4" } +solana-client = { path = "../client", version = "=1.14.4" } +solana-config-program = { path = "../programs/config", version = "=1.14.4" } +solana-logger = { path = "../logger", version = "=1.14.4" } +solana-sdk = { path = "../sdk", version = "=1.14.4" } +solana-version = { path = "../version", version = "=1.14.4" } tar = "0.4.38" tempfile = "3.3.0" url = "2.2.2" diff --git a/keygen/Cargo.toml b/keygen/Cargo.toml index 3ac6106eb9d6f7..08b492d4ca458e 100644 --- a/keygen/Cargo.toml +++ b/keygen/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-keygen" -version = "1.14.3" +version = "1.14.4" description = "Solana key generation utility" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,11 +14,11 @@ bs58 = "0.4.0" clap = { version = "3.1.5", features = ["cargo"] } dirs-next = "2.0.0" num_cpus = "1.13.1" -solana-clap-v3-utils = { path = "../clap-v3-utils", version = "=1.14.3" } -solana-cli-config = { path = "../cli-config", version = "=1.14.3" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.3" } -solana-sdk = { path = "../sdk", version = "=1.14.3" } -solana-version = { path = "../version", version = "=1.14.3" } +solana-clap-v3-utils = { path = "../clap-v3-utils", version = "=1.14.4" } +solana-cli-config = { path = "../cli-config", version = "=1.14.4" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.4" } +solana-sdk = { path = "../sdk", version = "=1.14.4" } +solana-version = { path = "../version", version = "=1.14.4" } tiny-bip39 = "0.8.2" [[bin]] diff --git a/ledger-tool/Cargo.toml b/ledger-tool/Cargo.toml index b82b4e6f58f401..e09669a53f76c3 100644 --- a/ledger-tool/Cargo.toml +++ b/ledger-tool/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-ledger-tool" description = "Blockchain, Rebuilt for Scale" -version = "1.14.3" +version = "1.14.4" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -22,20 +22,20 @@ log = { version = "0.4.17" } regex = "1" serde = { version = "1.0", features = ["derive"] } serde_json = "1.0.81" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.3" } -solana-cli-output = { path = "../cli-output", version = "=1.14.3" } -solana-core = { path = "../core", version = "=1.14.3" } -solana-entry = { path = "../entry", version = "=1.14.3" } -solana-ledger = { path = "../ledger", version = "=1.14.3" } -solana-logger = { path = "../logger", version = "=1.14.3" } -solana-measure = { path = "../measure", version = "=1.14.3" } -solana-runtime = { path = "../runtime", version = "=1.14.3" } -solana-sdk = { path = "../sdk", version = "=1.14.3" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.3" } -solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.3" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.3" } -solana-version = { path = "../version", version = "=1.14.3" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.3" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.4" } +solana-cli-output = { path = "../cli-output", version = "=1.14.4" } +solana-core = { path = "../core", version = "=1.14.4" } +solana-entry = { path = "../entry", version = "=1.14.4" } +solana-ledger = { path = "../ledger", version = "=1.14.4" } +solana-logger = { path = "../logger", version = "=1.14.4" } +solana-measure = { path = "../measure", version = "=1.14.4" } +solana-runtime = { path = "../runtime", version = "=1.14.4" } +solana-sdk = { path = "../sdk", version = "=1.14.4" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.4" } +solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.4" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.4" } +solana-version = { path = "../version", version = "=1.14.4" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.4" } tokio = { version = "1", features = ["full"] } [target.'cfg(not(target_env = "msvc"))'.dependencies] diff --git a/ledger/Cargo.toml b/ledger/Cargo.toml index 70f7926c2c68e4..f79fb8468ecac6 100644 --- a/ledger/Cargo.toml +++ b/ledger/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-ledger" -version = "1.14.3" +version = "1.14.4" description = "Solana ledger" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -35,23 +35,23 @@ reed-solomon-erasure = { version = "6.0.0", features = ["simd-accel"] } serde = "1.0.138" serde_bytes = "0.11.6" sha2 = "0.10.2" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.3" } -solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.3" } -solana-entry = { path = "../entry", version = "=1.14.3" } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.3" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.3" } -solana-measure = { path = "../measure", version = "=1.14.3" } -solana-metrics = { path = "../metrics", version = "=1.14.3" } -solana-perf = { path = "../perf", version = "=1.14.3" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.3" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.3" } -solana-runtime = { path = "../runtime", version = "=1.14.3" } -solana-sdk = { path = "../sdk", version = "=1.14.3" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.3" } -solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.3" } -solana-storage-proto = { path = "../storage-proto", version = "=1.14.3" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.3" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.3" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.4" } +solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.4" } +solana-entry = { path = "../entry", version = "=1.14.4" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.4" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.4" } +solana-measure = { path = "../measure", version = "=1.14.4" } +solana-metrics = { path = "../metrics", version = "=1.14.4" } +solana-perf = { path = "../perf", version = "=1.14.4" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.4" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.4" } +solana-runtime = { path = "../runtime", version = "=1.14.4" } +solana-sdk = { path = "../sdk", version = "=1.14.4" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.4" } +solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.4" } +solana-storage-proto = { path = "../storage-proto", version = "=1.14.4" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.4" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.4" } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } spl-token-2022 = { version = "=0.4.2", features = ["no-entrypoint"] } static_assertions = "1.1.0" @@ -71,8 +71,8 @@ features = ["lz4"] [dev-dependencies] bs58 = "0.4.0" matches = "0.1.9" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.3" } -solana-logger = { path = "../logger", version = "=1.14.3" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.4" } +solana-logger = { path = "../logger", version = "=1.14.4" } test-case = "2.1.0" [build-dependencies] diff --git a/local-cluster/Cargo.toml b/local-cluster/Cargo.toml index 3ad6c45531843d..027b4220d54c74 100644 --- a/local-cluster/Cargo.toml +++ b/local-cluster/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-local-cluster" description = "Blockchain, Rebuilt for Scale" -version = "1.14.3" +version = "1.14.4" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -16,25 +16,25 @@ itertools = "0.10.3" log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" -solana-client = { path = "../client", version = "=1.14.3" } -solana-config-program = { path = "../programs/config", version = "=1.14.3" } -solana-core = { path = "../core", version = "=1.14.3" } -solana-entry = { path = "../entry", version = "=1.14.3" } -solana-gossip = { path = "../gossip", version = "=1.14.3" } -solana-ledger = { path = "../ledger", version = "=1.14.3" } -solana-runtime = { path = "../runtime", version = "=1.14.3" } -solana-sdk = { path = "../sdk", version = "=1.14.3" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.3" } -solana-streamer = { path = "../streamer", version = "=1.14.3" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.3" } +solana-client = { path = "../client", version = "=1.14.4" } +solana-config-program = { path = "../programs/config", version = "=1.14.4" } +solana-core = { path = "../core", version = "=1.14.4" } +solana-entry = { path = "../entry", version = "=1.14.4" } +solana-gossip = { path = "../gossip", version = "=1.14.4" } +solana-ledger = { path = "../ledger", version = "=1.14.4" } +solana-runtime = { path = "../runtime", version = "=1.14.4" } +solana-sdk = { path = "../sdk", version = "=1.14.4" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.4" } +solana-streamer = { path = "../streamer", version = "=1.14.4" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.4" } tempfile = "3.3.0" [dev-dependencies] assert_matches = "1.5.0" gag = "1.0.0" serial_test = "0.8.0" -solana-download-utils = { path = "../download-utils", version = "=1.14.3" } -solana-logger = { path = "../logger", version = "=1.14.3" } +solana-download-utils = { path = "../download-utils", version = "=1.14.4" } +solana-logger = { path = "../logger", version = "=1.14.4" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/log-analyzer/Cargo.toml b/log-analyzer/Cargo.toml index ded944ce5ef917..1bda1aac197347 100644 --- a/log-analyzer/Cargo.toml +++ b/log-analyzer/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-log-analyzer" description = "The solana cluster network analysis tool" -version = "1.14.3" +version = "1.14.4" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,8 +14,8 @@ byte-unit = "4.0.14" clap = { version = "3.1.5", features = ["cargo"] } serde = "1.0.138" serde_json = "1.0.81" -solana-logger = { path = "../logger", version = "=1.14.3" } -solana-version = { path = "../version", version = "=1.14.3" } +solana-logger = { path = "../logger", version = "=1.14.4" } +solana-version = { path = "../version", version = "=1.14.4" } [[bin]] name = "solana-log-analyzer" diff --git a/logger/Cargo.toml b/logger/Cargo.toml index 14c5e1d2995fe6..0c1e9691ddf68f 100644 --- a/logger/Cargo.toml +++ b/logger/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-logger" -version = "1.14.3" +version = "1.14.4" description = "Solana Logger" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/measure/Cargo.toml b/measure/Cargo.toml index 2df2abb1297074..18ed4c95e4a757 100644 --- a/measure/Cargo.toml +++ b/measure/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "solana-measure" description = "Blockchain, Rebuilt for Scale" -version = "1.14.3" +version = "1.14.4" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-measure" readme = "../README.md" @@ -12,7 +12,7 @@ edition = "2021" [dependencies] log = "0.4.17" -solana-sdk = { path = "../sdk", version = "=1.14.3" } +solana-sdk = { path = "../sdk", version = "=1.14.4" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/merkle-root-bench/Cargo.toml b/merkle-root-bench/Cargo.toml index 704b562c041b4b..d131d77fd65dbf 100644 --- a/merkle-root-bench/Cargo.toml +++ b/merkle-root-bench/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-merkle-root-bench" -version = "1.14.3" +version = "1.14.4" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -11,11 +11,11 @@ publish = false [dependencies] clap = "2.33.1" log = "0.4.17" -solana-logger = { path = "../logger", version = "=1.14.3" } -solana-measure = { path = "../measure", version = "=1.14.3" } -solana-runtime = { path = "../runtime", version = "=1.14.3" } -solana-sdk = { path = "../sdk", version = "=1.14.3" } -solana-version = { path = "../version", version = "=1.14.3" } +solana-logger = { path = "../logger", version = "=1.14.4" } +solana-measure = { path = "../measure", version = "=1.14.4" } +solana-runtime = { path = "../runtime", version = "=1.14.4" } +solana-sdk = { path = "../sdk", version = "=1.14.4" } +solana-version = { path = "../version", version = "=1.14.4" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/merkle-tree/Cargo.toml b/merkle-tree/Cargo.toml index 1fae248f0c9531..c9222f94019b4d 100644 --- a/merkle-tree/Cargo.toml +++ b/merkle-tree/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-merkle-tree" -version = "1.14.3" +version = "1.14.4" description = "Solana Merkle Tree" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -11,7 +11,7 @@ edition = "2021" [dependencies] fast-math = "0.1" -solana-program = { path = "../sdk/program", version = "=1.14.3" } +solana-program = { path = "../sdk/program", version = "=1.14.4" } # This can go once the BPF toolchain target Rust 1.42.0+ [target.bpfel-unknown-unknown.dependencies] diff --git a/metrics/Cargo.toml b/metrics/Cargo.toml index 2d5820601597c6..9b8f78a09fe468 100644 --- a/metrics/Cargo.toml +++ b/metrics/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-metrics" -version = "1.14.3" +version = "1.14.4" description = "Solana Metrics" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -15,7 +15,7 @@ gethostname = "0.2.3" lazy_static = "1.4.0" log = "0.4.17" reqwest = { version = "0.11.11", default-features = false, features = ["blocking", "brotli", "deflate", "gzip", "rustls-tls", "json"] } -solana-sdk = { path = "../sdk", version = "=1.14.3" } +solana-sdk = { path = "../sdk", version = "=1.14.4" } [dev-dependencies] env_logger = "0.9.0" diff --git a/net-shaper/Cargo.toml b/net-shaper/Cargo.toml index 4a49c83d73ed8c..d29ed861c74808 100644 --- a/net-shaper/Cargo.toml +++ b/net-shaper/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-net-shaper" description = "The solana cluster network shaping tool" -version = "1.14.3" +version = "1.14.4" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,7 +14,7 @@ clap = { version = "3.1.5", features = ["cargo"] } rand = "0.7.0" serde = { version = "1.0.138", features = ["derive"] } serde_json = "1.0.81" -solana-logger = { path = "../logger", version = "=1.14.3" } +solana-logger = { path = "../logger", version = "=1.14.4" } [[bin]] name = "solana-net-shaper" diff --git a/net-utils/Cargo.toml b/net-utils/Cargo.toml index d78a1476739717..ec499652c5d428 100644 --- a/net-utils/Cargo.toml +++ b/net-utils/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-net-utils" -version = "1.14.3" +version = "1.14.4" description = "Solana Network Utilities" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -19,9 +19,9 @@ rand = "0.7.0" serde = "1.0.138" serde_derive = "1.0.103" socket2 = "0.4.4" -solana-logger = { path = "../logger", version = "=1.14.3" } -solana-sdk = { path = "../sdk", version = "=1.14.3" } -solana-version = { path = "../version", version = "=1.14.3" } +solana-logger = { path = "../logger", version = "=1.14.4" } +solana-sdk = { path = "../sdk", version = "=1.14.4" } +solana-version = { path = "../version", version = "=1.14.4" } tokio = { version = "1", features = ["full"] } url = "2.2.2" diff --git a/notifier/Cargo.toml b/notifier/Cargo.toml index 0fcfada45382a5..dc8257fff5ebc3 100644 --- a/notifier/Cargo.toml +++ b/notifier/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-notifier" -version = "1.14.3" +version = "1.14.4" description = "Solana Notifier" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/perf/Cargo.toml b/perf/Cargo.toml index 50cc486013d7a5..f0728e736e880f 100644 --- a/perf/Cargo.toml +++ b/perf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-perf" -version = "1.14.3" +version = "1.14.4" description = "Solana Performance APIs" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -22,10 +22,10 @@ log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" serde = "1.0.138" -solana-metrics = { path = "../metrics", version = "=1.14.3" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.3" } -solana-sdk = { path = "../sdk", version = "=1.14.3" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.3" } +solana-metrics = { path = "../metrics", version = "=1.14.4" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.4" } +solana-sdk = { path = "../sdk", version = "=1.14.4" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.4" } [target."cfg(target_os = \"linux\")".dependencies] caps = "0.5.3" @@ -37,7 +37,7 @@ name = "solana_perf" [dev-dependencies] matches = "0.1.9" -solana-logger = { path = "../logger", version = "=1.14.3" } +solana-logger = { path = "../logger", version = "=1.14.4" } [[bench]] name = "sigverify" diff --git a/poh-bench/Cargo.toml b/poh-bench/Cargo.toml index 7875264e41d78c..525879ffa45db6 100644 --- a/poh-bench/Cargo.toml +++ b/poh-bench/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-poh-bench" -version = "1.14.3" +version = "1.14.4" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,12 +14,12 @@ clap = { version = "3.1.5", features = ["cargo"] } log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" -solana-entry = { path = "../entry", version = "=1.14.3" } -solana-logger = { path = "../logger", version = "=1.14.3" } -solana-measure = { path = "../measure", version = "=1.14.3" } -solana-perf = { path = "../perf", version = "=1.14.3" } -solana-sdk = { path = "../sdk", version = "=1.14.3" } -solana-version = { path = "../version", version = "=1.14.3" } +solana-entry = { path = "../entry", version = "=1.14.4" } +solana-logger = { path = "../logger", version = "=1.14.4" } +solana-measure = { path = "../measure", version = "=1.14.4" } +solana-perf = { path = "../perf", version = "=1.14.4" } +solana-sdk = { path = "../sdk", version = "=1.14.4" } +solana-version = { path = "../version", version = "=1.14.4" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/poh/Cargo.toml b/poh/Cargo.toml index fccc28486109d6..77407e84f651f1 100644 --- a/poh/Cargo.toml +++ b/poh/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-poh" -version = "1.14.3" +version = "1.14.4" description = "Solana PoH" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,21 +13,21 @@ edition = "2021" core_affinity = "0.5.10" crossbeam-channel = "0.5" log = "0.4.17" -solana-entry = { path = "../entry", version = "=1.14.3" } -solana-ledger = { path = "../ledger", version = "=1.14.3" } -solana-measure = { path = "../measure", version = "=1.14.3" } -solana-metrics = { path = "../metrics", version = "=1.14.3" } -solana-runtime = { path = "../runtime", version = "=1.14.3" } -solana-sdk = { path = "../sdk", version = "=1.14.3" } -solana-sys-tuner = { path = "../sys-tuner", version = "=1.14.3" } +solana-entry = { path = "../entry", version = "=1.14.4" } +solana-ledger = { path = "../ledger", version = "=1.14.4" } +solana-measure = { path = "../measure", version = "=1.14.4" } +solana-metrics = { path = "../metrics", version = "=1.14.4" } +solana-runtime = { path = "../runtime", version = "=1.14.4" } +solana-sdk = { path = "../sdk", version = "=1.14.4" } +solana-sys-tuner = { path = "../sys-tuner", version = "=1.14.4" } thiserror = "1.0" [dev-dependencies] bincode = "1.3.3" matches = "0.1.9" rand = "0.7.0" -solana-logger = { path = "../logger", version = "=1.14.3" } -solana-perf = { path = "../perf", version = "=1.14.3" } +solana-logger = { path = "../logger", version = "=1.14.4" } +solana-perf = { path = "../perf", version = "=1.14.4" } [lib] crate-type = ["lib"] diff --git a/program-runtime/Cargo.toml b/program-runtime/Cargo.toml index 689474df7fc52b..41097ae8a17995 100644 --- a/program-runtime/Cargo.toml +++ b/program-runtime/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-program-runtime" -version = "1.14.3" +version = "1.14.4" description = "Solana program runtime" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -20,16 +20,16 @@ log = "0.4.14" num-derive = { version = "0.3" } num-traits = { version = "0.2" } serde = { version = "1.0.129", features = ["derive", "rc"] } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.3" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.3" } -solana-measure = { path = "../measure", version = "=1.14.3" } -solana-metrics = { path = "../metrics", version = "=1.14.3" } -solana-sdk = { path = "../sdk", version = "=1.14.3" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.4" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.4" } +solana-measure = { path = "../measure", version = "=1.14.4" } +solana-metrics = { path = "../metrics", version = "=1.14.4" } +solana-sdk = { path = "../sdk", version = "=1.14.4" } thiserror = "1.0" enum-iterator = "0.8.1" [dev-dependencies] -solana-logger = { path = "../logger", version = "=1.14.3" } +solana-logger = { path = "../logger", version = "=1.14.4" } [lib] crate-type = ["lib"] diff --git a/program-test/Cargo.toml b/program-test/Cargo.toml index 22229a5472a457..215503a8d7e499 100644 --- a/program-test/Cargo.toml +++ b/program-test/Cargo.toml @@ -5,7 +5,7 @@ edition = "2021" license = "Apache-2.0" name = "solana-program-test" repository = "https://github.com/solana-labs/solana" -version = "1.14.3" +version = "1.14.4" [dependencies] assert_matches = "1.5.0" @@ -15,13 +15,13 @@ bincode = "1.3.3" chrono-humanize = "0.2.1" log = "0.4.17" serde = "1.0.138" -solana-banks-client = { path = "../banks-client", version = "=1.14.3" } -solana-banks-server = { path = "../banks-server", version = "=1.14.3" } -solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.3" } -solana-logger = { path = "../logger", version = "=1.14.3" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.3" } -solana-runtime = { path = "../runtime", version = "=1.14.3" } -solana-sdk = { path = "../sdk", version = "=1.14.3" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.3" } +solana-banks-client = { path = "../banks-client", version = "=1.14.4" } +solana-banks-server = { path = "../banks-server", version = "=1.14.4" } +solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.4" } +solana-logger = { path = "../logger", version = "=1.14.4" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.4" } +solana-runtime = { path = "../runtime", version = "=1.14.4" } +solana-sdk = { path = "../sdk", version = "=1.14.4" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.4" } thiserror = "1.0" tokio = { version = "1", features = ["full"] } diff --git a/programs/address-lookup-table-tests/Cargo.toml b/programs/address-lookup-table-tests/Cargo.toml index 42503f14735c39..6c6105faf6cef4 100644 --- a/programs/address-lookup-table-tests/Cargo.toml +++ b/programs/address-lookup-table-tests/Cargo.toml @@ -3,7 +3,7 @@ [package] name = "solana-address-lookup-table-program-tests" -version = "1.14.3" +version = "1.14.4" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" @@ -14,9 +14,9 @@ publish = false [dev-dependencies] assert_matches = "1.5.0" bincode = "1.3.3" -solana-address-lookup-table-program = { path = "../address-lookup-table", version = "=1.14.3" } -solana-program-test = { path = "../../program-test", version = "=1.14.3" } -solana-sdk = { path = "../../sdk", version = "=1.14.3" } +solana-address-lookup-table-program = { path = "../address-lookup-table", version = "=1.14.4" } +solana-program-test = { path = "../../program-test", version = "=1.14.4" } +solana-sdk = { path = "../../sdk", version = "=1.14.4" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/address-lookup-table/Cargo.toml b/programs/address-lookup-table/Cargo.toml index fdc258b6b329bc..7e541b035f846f 100644 --- a/programs/address-lookup-table/Cargo.toml +++ b/programs/address-lookup-table/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-address-lookup-table-program" -version = "1.14.3" +version = "1.14.4" description = "Solana address lookup table program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -16,14 +16,14 @@ log = "0.4.17" num-derive = "0.3" num-traits = "0.2" serde = { version = "1.0.138", features = ["derive"] } -solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.3" } -solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.3" } -solana-program = { path = "../../sdk/program", version = "=1.14.3" } +solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.4" } +solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.4" } +solana-program = { path = "../../sdk/program", version = "=1.14.4" } thiserror = "1.0" [target.'cfg(not(target_os = "solana"))'.dependencies] -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.3" } -solana-sdk = { path = "../../sdk", version = "=1.14.3" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.4" } +solana-sdk = { path = "../../sdk", version = "=1.14.4" } [build-dependencies] rustc_version = "0.4" diff --git a/programs/bpf-loader-tests/Cargo.toml b/programs/bpf-loader-tests/Cargo.toml index ebe958c79bc470..cbf7678bfdc070 100644 --- a/programs/bpf-loader-tests/Cargo.toml +++ b/programs/bpf-loader-tests/Cargo.toml @@ -3,7 +3,7 @@ [package] name = "solana-bpf-loader-program-tests" -version = "1.14.3" +version = "1.14.4" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" @@ -14,9 +14,9 @@ publish = false [dev-dependencies] assert_matches = "1.5.0" bincode = "1.3.3" -solana-bpf-loader-program = { path = "../bpf_loader", version = "=1.14.3" } -solana-program-test = { path = "../../program-test", version = "=1.14.3" } -solana-sdk = { path = "../../sdk", version = "=1.14.3" } +solana-bpf-loader-program = { path = "../bpf_loader", version = "=1.14.4" } +solana-program-test = { path = "../../program-test", version = "=1.14.4" } +solana-sdk = { path = "../../sdk", version = "=1.14.4" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/bpf/Cargo.lock b/programs/bpf/Cargo.lock index 471c187c75a342..a2dd8f116b757b 100644 --- a/programs/bpf/Cargo.lock +++ b/programs/bpf/Cargo.lock @@ -4063,7 +4063,7 @@ dependencies = [ [[package]] name = "solana-account-decoder" -version = "1.14.3" +version = "1.14.4" dependencies = [ "Inflector", "base64 0.13.0", @@ -4075,7 +4075,7 @@ dependencies = [ "serde_derive", "serde_json", "solana-config-program", - "solana-sdk 1.14.3", + "solana-sdk 1.14.4", "solana-vote-program", "spl-token", "spl-token-2022", @@ -4085,7 +4085,7 @@ dependencies = [ [[package]] name = "solana-address-lookup-table-program" -version = "1.14.3" +version = "1.14.4" dependencies = [ "bincode", "bytemuck", @@ -4094,23 +4094,23 @@ dependencies = [ "num-traits", "rustc_version", "serde", - "solana-frozen-abi 1.14.3", - "solana-frozen-abi-macro 1.14.3", - "solana-program 1.14.3", + "solana-frozen-abi 1.14.4", + "solana-frozen-abi-macro 1.14.4", + "solana-program 1.14.4", "solana-program-runtime", - "solana-sdk 1.14.3", + "solana-sdk 1.14.4", "thiserror", ] [[package]] name = "solana-banks-client" -version = "1.14.3" +version = "1.14.4" dependencies = [ "borsh", "futures 0.3.21", "solana-banks-interface", - "solana-program 1.14.3", - "solana-sdk 1.14.3", + "solana-program 1.14.4", + "solana-sdk 1.14.4", "tarpc", "thiserror", "tokio", @@ -4119,16 +4119,16 @@ dependencies = [ [[package]] name = "solana-banks-interface" -version = "1.14.3" +version = "1.14.4" dependencies = [ "serde", - "solana-sdk 1.14.3", + "solana-sdk 1.14.4", "tarpc", ] [[package]] name = "solana-banks-server" -version = "1.14.3" +version = "1.14.4" dependencies = [ "bincode", "crossbeam-channel", @@ -4136,7 +4136,7 @@ dependencies = [ "solana-banks-interface", "solana-client", "solana-runtime", - "solana-sdk 1.14.3", + "solana-sdk 1.14.4", "solana-send-transaction-service", "tarpc", "tokio", @@ -4146,7 +4146,7 @@ dependencies = [ [[package]] name = "solana-bloom" -version = "1.14.3" +version = "1.14.4" dependencies = [ "bv", "fnv", @@ -4156,14 +4156,14 @@ dependencies = [ "rustc_version", "serde", "serde_derive", - "solana-frozen-abi 1.14.3", - "solana-frozen-abi-macro 1.14.3", - "solana-sdk 1.14.3", + "solana-frozen-abi 1.14.4", + "solana-frozen-abi-macro 1.14.4", + "solana-sdk 1.14.4", ] [[package]] name = "solana-bpf-loader-program" -version = "1.14.3" +version = "1.14.4" dependencies = [ "bincode", "byteorder 1.4.3", @@ -4172,15 +4172,15 @@ dependencies = [ "solana-measure", "solana-metrics", "solana-program-runtime", - "solana-sdk 1.14.3", - "solana-zk-token-sdk 1.14.3", + "solana-sdk 1.14.4", + "solana-zk-token-sdk 1.14.4", "solana_rbpf", "thiserror", ] [[package]] name = "solana-bpf-programs" -version = "1.14.3" +version = "1.14.4" dependencies = [ "bincode", "byteorder 1.4.3", @@ -4196,11 +4196,11 @@ dependencies = [ "solana-bpf-rust-realloc-invoke", "solana-cli-output", "solana-ledger", - "solana-logger 1.14.3", + "solana-logger 1.14.4", "solana-measure", "solana-program-runtime", "solana-runtime", - "solana-sdk 1.14.3", + "solana-sdk 1.14.4", "solana-transaction-status", "solana_rbpf", "walkdir", @@ -4208,385 +4208,385 @@ dependencies = [ [[package]] name = "solana-bpf-rust-128bit" -version = "1.14.3" +version = "1.14.4" dependencies = [ "solana-bpf-rust-128bit-dep", - "solana-program 1.14.3", + "solana-program 1.14.4", ] [[package]] name = "solana-bpf-rust-128bit-dep" -version = "1.14.3" +version = "1.14.4" dependencies = [ - "solana-program 1.14.3", + "solana-program 1.14.4", ] [[package]] name = "solana-bpf-rust-alloc" -version = "1.14.3" +version = "1.14.4" dependencies = [ - "solana-program 1.14.3", + "solana-program 1.14.4", ] [[package]] name = "solana-bpf-rust-call-depth" -version = "1.14.3" +version = "1.14.4" dependencies = [ - "solana-program 1.14.3", + "solana-program 1.14.4", ] [[package]] name = "solana-bpf-rust-caller-access" -version = "1.14.3" +version = "1.14.4" dependencies = [ - "solana-program 1.14.3", + "solana-program 1.14.4", ] [[package]] name = "solana-bpf-rust-curve25519" -version = "1.14.3" +version = "1.14.4" dependencies = [ - "solana-program 1.14.3", - "solana-zk-token-sdk 1.14.3", + "solana-program 1.14.4", + "solana-zk-token-sdk 1.14.4", ] [[package]] name = "solana-bpf-rust-custom-heap" -version = "1.14.3" +version = "1.14.4" dependencies = [ - "solana-program 1.14.3", + "solana-program 1.14.4", ] [[package]] name = "solana-bpf-rust-dep-crate" -version = "1.14.3" +version = "1.14.4" dependencies = [ "byteorder 1.4.3", "solana-address-lookup-table-program", - "solana-program 1.14.3", + "solana-program 1.14.4", ] [[package]] name = "solana-bpf-rust-deprecated-loader" -version = "1.14.3" +version = "1.14.4" dependencies = [ - "solana-program 1.14.3", + "solana-program 1.14.4", ] [[package]] name = "solana-bpf-rust-dup-accounts" -version = "1.14.3" +version = "1.14.4" dependencies = [ - "solana-program 1.14.3", + "solana-program 1.14.4", ] [[package]] name = "solana-bpf-rust-error-handling" -version = "1.14.3" +version = "1.14.4" dependencies = [ "num-derive", "num-traits", - "solana-program 1.14.3", + "solana-program 1.14.4", "thiserror", ] [[package]] name = "solana-bpf-rust-external-spend" -version = "1.14.3" +version = "1.14.4" dependencies = [ - "solana-program 1.14.3", + "solana-program 1.14.4", ] [[package]] name = "solana-bpf-rust-finalize" -version = "1.14.3" +version = "1.14.4" dependencies = [ - "solana-program 1.14.3", + "solana-program 1.14.4", ] [[package]] name = "solana-bpf-rust-get-minimum-delegation" -version = "1.14.3" +version = "1.14.4" dependencies = [ - "solana-program 1.14.3", + "solana-program 1.14.4", ] [[package]] name = "solana-bpf-rust-inner_instruction_alignment_check" -version = "1.14.3" +version = "1.14.4" dependencies = [ - "solana-program 1.14.3", + "solana-program 1.14.4", ] [[package]] name = "solana-bpf-rust-instruction-introspection" -version = "1.14.3" +version = "1.14.4" dependencies = [ - "solana-program 1.14.3", + "solana-program 1.14.4", ] [[package]] name = "solana-bpf-rust-invoke" -version = "1.14.3" +version = "1.14.4" dependencies = [ "solana-bpf-rust-invoked", - "solana-program 1.14.3", + "solana-program 1.14.4", ] [[package]] name = "solana-bpf-rust-invoke-and-error" -version = "1.14.3" +version = "1.14.4" dependencies = [ - "solana-program 1.14.3", + "solana-program 1.14.4", ] [[package]] name = "solana-bpf-rust-invoke-and-ok" -version = "1.14.3" +version = "1.14.4" dependencies = [ - "solana-program 1.14.3", + "solana-program 1.14.4", ] [[package]] name = "solana-bpf-rust-invoke-and-return" -version = "1.14.3" +version = "1.14.4" dependencies = [ - "solana-program 1.14.3", + "solana-program 1.14.4", ] [[package]] name = "solana-bpf-rust-invoked" -version = "1.14.3" +version = "1.14.4" dependencies = [ - "solana-program 1.14.3", + "solana-program 1.14.4", ] [[package]] name = "solana-bpf-rust-iter" -version = "1.14.3" +version = "1.14.4" dependencies = [ - "solana-program 1.14.3", + "solana-program 1.14.4", ] [[package]] name = "solana-bpf-rust-log-data" -version = "1.14.3" +version = "1.14.4" dependencies = [ - "solana-program 1.14.3", + "solana-program 1.14.4", ] [[package]] name = "solana-bpf-rust-many-args" -version = "1.14.3" +version = "1.14.4" dependencies = [ "solana-bpf-rust-many-args-dep", - "solana-program 1.14.3", + "solana-program 1.14.4", ] [[package]] name = "solana-bpf-rust-many-args-dep" -version = "1.14.3" +version = "1.14.4" dependencies = [ - "solana-program 1.14.3", + "solana-program 1.14.4", ] [[package]] name = "solana-bpf-rust-mem" -version = "1.14.3" +version = "1.14.4" dependencies = [ - "solana-program 1.14.3", + "solana-program 1.14.4", "solana-program-runtime", "solana-program-test", - "solana-sdk 1.14.3", + "solana-sdk 1.14.4", ] [[package]] name = "solana-bpf-rust-membuiltins" -version = "1.14.3" +version = "1.14.4" dependencies = [ "solana-bpf-rust-mem", - "solana-program 1.14.3", + "solana-program 1.14.4", ] [[package]] name = "solana-bpf-rust-noop" -version = "1.14.3" +version = "1.14.4" dependencies = [ - "solana-program 1.14.3", + "solana-program 1.14.4", ] [[package]] name = "solana-bpf-rust-panic" -version = "1.14.3" +version = "1.14.4" dependencies = [ - "solana-program 1.14.3", + "solana-program 1.14.4", ] [[package]] name = "solana-bpf-rust-param-passing" -version = "1.14.3" +version = "1.14.4" dependencies = [ "solana-bpf-rust-param-passing-dep", - "solana-program 1.14.3", + "solana-program 1.14.4", ] [[package]] name = "solana-bpf-rust-param-passing-dep" -version = "1.14.3" +version = "1.14.4" dependencies = [ - "solana-program 1.14.3", + "solana-program 1.14.4", ] [[package]] name = "solana-bpf-rust-rand" -version = "1.14.3" +version = "1.14.4" dependencies = [ "getrandom 0.1.14", "rand 0.7.3", - "solana-program 1.14.3", + "solana-program 1.14.4", ] [[package]] name = "solana-bpf-rust-realloc" -version = "1.14.3" +version = "1.14.4" dependencies = [ - "solana-program 1.14.3", + "solana-program 1.14.4", ] [[package]] name = "solana-bpf-rust-realloc-invoke" -version = "1.14.3" +version = "1.14.4" dependencies = [ "solana-bpf-rust-realloc", - "solana-program 1.14.3", + "solana-program 1.14.4", ] [[package]] name = "solana-bpf-rust-ro-account_modify" -version = "1.14.3" +version = "1.14.4" dependencies = [ - "solana-program 1.14.3", + "solana-program 1.14.4", ] [[package]] name = "solana-bpf-rust-ro-modify" -version = "1.14.3" +version = "1.14.4" dependencies = [ - "solana-program 1.14.3", + "solana-program 1.14.4", ] [[package]] name = "solana-bpf-rust-sanity" -version = "1.14.3" +version = "1.14.4" dependencies = [ - "solana-program 1.14.3", + "solana-program 1.14.4", "solana-program-runtime", "solana-program-test", - "solana-sdk 1.14.3", + "solana-sdk 1.14.4", ] [[package]] name = "solana-bpf-rust-secp256k1-recover" -version = "1.14.3" +version = "1.14.4" dependencies = [ "libsecp256k1 0.7.0", - "solana-program 1.14.3", + "solana-program 1.14.4", ] [[package]] name = "solana-bpf-rust-sha" -version = "1.14.3" +version = "1.14.4" dependencies = [ "blake3", - "solana-program 1.14.3", + "solana-program 1.14.4", ] [[package]] name = "solana-bpf-rust-sibling-instructions" -version = "1.14.3" +version = "1.14.4" dependencies = [ - "solana-program 1.14.3", + "solana-program 1.14.4", ] [[package]] name = "solana-bpf-rust-sibling_inner-instructions" -version = "1.14.3" +version = "1.14.4" dependencies = [ - "solana-program 1.14.3", + "solana-program 1.14.4", ] [[package]] name = "solana-bpf-rust-simulation" -version = "1.14.3" +version = "1.14.4" dependencies = [ - "solana-logger 1.14.3", - "solana-program 1.14.3", + "solana-logger 1.14.4", + "solana-program 1.14.4", "solana-program-test", - "solana-sdk 1.14.3", + "solana-sdk 1.14.4", "solana-validator", ] [[package]] name = "solana-bpf-rust-spoof1" -version = "1.14.3" +version = "1.14.4" dependencies = [ - "solana-program 1.14.3", + "solana-program 1.14.4", ] [[package]] name = "solana-bpf-rust-spoof1-system" -version = "1.14.3" +version = "1.14.4" dependencies = [ - "solana-program 1.14.3", + "solana-program 1.14.4", ] [[package]] name = "solana-bpf-rust-sysvar" -version = "1.14.3" +version = "1.14.4" dependencies = [ - "solana-program 1.14.3", + "solana-program 1.14.4", "solana-program-runtime", "solana-program-test", - "solana-sdk 1.14.3", + "solana-sdk 1.14.4", ] [[package]] name = "solana-bpf-rust-upgradeable" -version = "1.14.3" +version = "1.14.4" dependencies = [ - "solana-program 1.14.3", + "solana-program 1.14.4", ] [[package]] name = "solana-bpf-rust-upgraded" -version = "1.14.3" +version = "1.14.4" dependencies = [ - "solana-program 1.14.3", + "solana-program 1.14.4", ] [[package]] name = "solana-bucket-map" -version = "1.14.3" +version = "1.14.4" dependencies = [ "log", "memmap2", "modular-bitfield", "rand 0.7.3", "solana-measure", - "solana-sdk 1.14.3", + "solana-sdk 1.14.4", "tempfile", ] [[package]] name = "solana-clap-utils" -version = "1.14.3" +version = "1.14.4" dependencies = [ "chrono", "clap 2.33.3", "rpassword", "solana-perf", "solana-remote-wallet", - "solana-sdk 1.14.3", + "solana-sdk 1.14.4", "thiserror", "tiny-bip39", "uriparse", @@ -4595,7 +4595,7 @@ dependencies = [ [[package]] name = "solana-cli-config" -version = "1.14.3" +version = "1.14.4" dependencies = [ "dirs-next", "lazy_static", @@ -4603,13 +4603,13 @@ dependencies = [ "serde_derive", "serde_yaml", "solana-clap-utils", - "solana-sdk 1.14.3", + "solana-sdk 1.14.4", "url 2.2.2", ] [[package]] name = "solana-cli-output" -version = "1.14.3" +version = "1.14.4" dependencies = [ "Inflector", "base64 0.13.0", @@ -4626,7 +4626,7 @@ dependencies = [ "solana-clap-utils", "solana-cli-config", "solana-client", - "solana-sdk 1.14.3", + "solana-sdk 1.14.4", "solana-transaction-status", "solana-vote-program", "spl-memo", @@ -4634,7 +4634,7 @@ dependencies = [ [[package]] name = "solana-client" -version = "1.14.3" +version = "1.14.4" dependencies = [ "async-mutex", "async-trait", @@ -4670,7 +4670,7 @@ dependencies = [ "solana-measure", "solana-metrics", "solana-net-utils", - "solana-sdk 1.14.3", + "solana-sdk 1.14.4", "solana-streamer", "solana-transaction-status", "solana-version", @@ -4686,27 +4686,27 @@ dependencies = [ [[package]] name = "solana-compute-budget-program" -version = "1.14.3" +version = "1.14.4" dependencies = [ "solana-program-runtime", - "solana-sdk 1.14.3", + "solana-sdk 1.14.4", ] [[package]] name = "solana-config-program" -version = "1.14.3" +version = "1.14.4" dependencies = [ "bincode", "chrono", "serde", "serde_derive", "solana-program-runtime", - "solana-sdk 1.14.3", + "solana-sdk 1.14.4", ] [[package]] name = "solana-core" -version = "1.14.3" +version = "1.14.4" dependencies = [ "ahash", "base64 0.13.0", @@ -4734,8 +4734,8 @@ dependencies = [ "solana-bloom", "solana-client", "solana-entry", - "solana-frozen-abi 1.14.3", - "solana-frozen-abi-macro 1.14.3", + "solana-frozen-abi 1.14.4", + "solana-frozen-abi-macro 1.14.4", "solana-geyser-plugin-manager", "solana-gossip", "solana-ledger", @@ -4748,7 +4748,7 @@ dependencies = [ "solana-rayon-threadlimit", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.3", + "solana-sdk 1.14.4", "solana-send-transaction-service", "solana-streamer", "solana-transaction-status", @@ -4764,19 +4764,19 @@ dependencies = [ [[package]] name = "solana-download-utils" -version = "1.14.3" +version = "1.14.4" dependencies = [ "console", "indicatif", "log", "reqwest", "solana-runtime", - "solana-sdk 1.14.3", + "solana-sdk 1.14.4", ] [[package]] name = "solana-entry" -version = "1.14.3" +version = "1.14.4" dependencies = [ "bincode", "crossbeam-channel", @@ -4792,12 +4792,12 @@ dependencies = [ "solana-metrics", "solana-perf", "solana-rayon-threadlimit", - "solana-sdk 1.14.3", + "solana-sdk 1.14.4", ] [[package]] name = "solana-faucet" -version = "1.14.3" +version = "1.14.4" dependencies = [ "bincode", "byteorder 1.4.3", @@ -4808,9 +4808,9 @@ dependencies = [ "serde_derive", "solana-clap-utils", "solana-cli-config", - "solana-logger 1.14.3", + "solana-logger 1.14.4", "solana-metrics", - "solana-sdk 1.14.3", + "solana-sdk 1.14.4", "solana-version", "spl-memo", "thiserror", @@ -4841,7 +4841,7 @@ dependencies = [ [[package]] name = "solana-frozen-abi" -version = "1.14.3" +version = "1.14.4" dependencies = [ "ahash", "blake3", @@ -4866,7 +4866,7 @@ dependencies = [ "serde_derive", "serde_json", "sha2 0.10.2", - "solana-frozen-abi-macro 1.14.3", + "solana-frozen-abi-macro 1.14.4", "subtle", "thiserror", ] @@ -4885,7 +4885,7 @@ dependencies = [ [[package]] name = "solana-frozen-abi-macro" -version = "1.14.3" +version = "1.14.4" dependencies = [ "proc-macro2 1.0.41", "quote 1.0.18", @@ -4895,26 +4895,26 @@ dependencies = [ [[package]] name = "solana-genesis-utils" -version = "1.14.3" +version = "1.14.4" dependencies = [ "solana-download-utils", "solana-runtime", - "solana-sdk 1.14.3", + "solana-sdk 1.14.4", ] [[package]] name = "solana-geyser-plugin-interface" -version = "1.14.3" +version = "1.14.4" dependencies = [ "log", - "solana-sdk 1.14.3", + "solana-sdk 1.14.4", "solana-transaction-status", "thiserror", ] [[package]] name = "solana-geyser-plugin-manager" -version = "1.14.3" +version = "1.14.4" dependencies = [ "bs58", "crossbeam-channel", @@ -4927,14 +4927,14 @@ dependencies = [ "solana-metrics", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.3", + "solana-sdk 1.14.4", "solana-transaction-status", "thiserror", ] [[package]] name = "solana-gossip" -version = "1.14.3" +version = "1.14.4" dependencies = [ "bincode", "bv", @@ -4958,17 +4958,17 @@ dependencies = [ "solana-clap-utils", "solana-client", "solana-entry", - "solana-frozen-abi 1.14.3", - "solana-frozen-abi-macro 1.14.3", + "solana-frozen-abi 1.14.4", + "solana-frozen-abi-macro 1.14.4", "solana-ledger", - "solana-logger 1.14.3", + "solana-logger 1.14.4", "solana-measure", "solana-metrics", "solana-net-utils", "solana-perf", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.14.3", + "solana-sdk 1.14.4", "solana-streamer", "solana-version", "solana-vote-program", @@ -4977,7 +4977,7 @@ dependencies = [ [[package]] name = "solana-ledger" -version = "1.14.3" +version = "1.14.4" dependencies = [ "assert_matches", "bincode", @@ -5009,15 +5009,15 @@ dependencies = [ "solana-account-decoder", "solana-bpf-loader-program", "solana-entry", - "solana-frozen-abi 1.14.3", - "solana-frozen-abi-macro 1.14.3", + "solana-frozen-abi 1.14.4", + "solana-frozen-abi-macro 1.14.4", "solana-measure", "solana-metrics", "solana-perf", "solana-program-runtime", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.14.3", + "solana-sdk 1.14.4", "solana-stake-program", "solana-storage-bigtable", "solana-storage-proto", @@ -5046,7 +5046,7 @@ dependencies = [ [[package]] name = "solana-logger" -version = "1.14.3" +version = "1.14.4" dependencies = [ "env_logger", "lazy_static", @@ -5055,36 +5055,36 @@ dependencies = [ [[package]] name = "solana-measure" -version = "1.14.3" +version = "1.14.4" dependencies = [ "log", - "solana-sdk 1.14.3", + "solana-sdk 1.14.4", ] [[package]] name = "solana-merkle-tree" -version = "1.14.3" +version = "1.14.4" dependencies = [ "fast-math", "matches", - "solana-program 1.14.3", + "solana-program 1.14.4", ] [[package]] name = "solana-metrics" -version = "1.14.3" +version = "1.14.4" dependencies = [ "crossbeam-channel", "gethostname", "lazy_static", "log", "reqwest", - "solana-sdk 1.14.3", + "solana-sdk 1.14.4", ] [[package]] name = "solana-net-utils" -version = "1.14.3" +version = "1.14.4" dependencies = [ "bincode", "clap 3.1.6", @@ -5095,8 +5095,8 @@ dependencies = [ "serde", "serde_derive", "socket2", - "solana-logger 1.14.3", - "solana-sdk 1.14.3", + "solana-logger 1.14.4", + "solana-sdk 1.14.4", "solana-version", "tokio", "url 2.2.2", @@ -5104,7 +5104,7 @@ dependencies = [ [[package]] name = "solana-perf" -version = "1.14.3" +version = "1.14.4" dependencies = [ "ahash", "bincode", @@ -5123,13 +5123,13 @@ dependencies = [ "serde", "solana-metrics", "solana-rayon-threadlimit", - "solana-sdk 1.14.3", + "solana-sdk 1.14.4", "solana-vote-program", ] [[package]] name = "solana-poh" -version = "1.14.3" +version = "1.14.4" dependencies = [ "core_affinity", "crossbeam-channel", @@ -5139,7 +5139,7 @@ dependencies = [ "solana-measure", "solana-metrics", "solana-runtime", - "solana-sdk 1.14.3", + "solana-sdk 1.14.4", "solana-sys-tuner", "thiserror", ] @@ -5188,7 +5188,7 @@ dependencies = [ [[package]] name = "solana-program" -version = "1.14.3" +version = "1.14.4" dependencies = [ "base64 0.13.0", "bincode", @@ -5224,9 +5224,9 @@ dependencies = [ "serde_json", "sha2 0.10.2", "sha3 0.10.1", - "solana-frozen-abi 1.14.3", - "solana-frozen-abi-macro 1.14.3", - "solana-sdk-macro 1.14.3", + "solana-frozen-abi 1.14.4", + "solana-frozen-abi-macro 1.14.4", + "solana-sdk-macro 1.14.4", "thiserror", "tiny-bip39", "wasm-bindgen", @@ -5235,7 +5235,7 @@ dependencies = [ [[package]] name = "solana-program-runtime" -version = "1.14.3" +version = "1.14.4" dependencies = [ "base64 0.13.0", "bincode", @@ -5249,17 +5249,17 @@ dependencies = [ "num-traits", "rustc_version", "serde", - "solana-frozen-abi 1.14.3", - "solana-frozen-abi-macro 1.14.3", + "solana-frozen-abi 1.14.4", + "solana-frozen-abi-macro 1.14.4", "solana-measure", "solana-metrics", - "solana-sdk 1.14.3", + "solana-sdk 1.14.4", "thiserror", ] [[package]] name = "solana-program-test" -version = "1.14.3" +version = "1.14.4" dependencies = [ "assert_matches", "async-trait", @@ -5271,10 +5271,10 @@ dependencies = [ "solana-banks-client", "solana-banks-server", "solana-bpf-loader-program", - "solana-logger 1.14.3", + "solana-logger 1.14.4", "solana-program-runtime", "solana-runtime", - "solana-sdk 1.14.3", + "solana-sdk 1.14.4", "solana-vote-program", "thiserror", "tokio", @@ -5282,7 +5282,7 @@ dependencies = [ [[package]] name = "solana-rayon-threadlimit" -version = "1.14.3" +version = "1.14.4" dependencies = [ "lazy_static", "num_cpus", @@ -5290,7 +5290,7 @@ dependencies = [ [[package]] name = "solana-remote-wallet" -version = "1.14.3" +version = "1.14.4" dependencies = [ "console", "dialoguer", @@ -5300,14 +5300,14 @@ dependencies = [ "parking_lot 0.12.1", "qstring", "semver", - "solana-sdk 1.14.3", + "solana-sdk 1.14.4", "thiserror", "uriparse", ] [[package]] name = "solana-rpc" -version = "1.14.3" +version = "1.14.4" dependencies = [ "base64 0.13.0", "bincode", @@ -5340,7 +5340,7 @@ dependencies = [ "solana-poh", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.14.3", + "solana-sdk 1.14.4", "solana-send-transaction-service", "solana-stake-program", "solana-storage-bigtable", @@ -5358,7 +5358,7 @@ dependencies = [ [[package]] name = "solana-runtime" -version = "1.14.3" +version = "1.14.4" dependencies = [ "arrayref", "bincode", @@ -5394,17 +5394,17 @@ dependencies = [ "solana-bucket-map", "solana-compute-budget-program", "solana-config-program", - "solana-frozen-abi 1.14.3", - "solana-frozen-abi-macro 1.14.3", + "solana-frozen-abi 1.14.4", + "solana-frozen-abi-macro 1.14.4", "solana-measure", "solana-metrics", "solana-program-runtime", "solana-rayon-threadlimit", - "solana-sdk 1.14.3", + "solana-sdk 1.14.4", "solana-stake-program", "solana-vote-program", "solana-zk-token-proof-program", - "solana-zk-token-sdk 1.14.3", + "solana-zk-token-sdk 1.14.4", "strum", "strum_macros", "symlink", @@ -5467,7 +5467,7 @@ dependencies = [ [[package]] name = "solana-sdk" -version = "1.14.3" +version = "1.14.4" dependencies = [ "assert_matches", "base64 0.13.0", @@ -5504,11 +5504,11 @@ dependencies = [ "serde_json", "sha2 0.10.2", "sha3 0.10.1", - "solana-frozen-abi 1.14.3", - "solana-frozen-abi-macro 1.14.3", - "solana-logger 1.14.3", - "solana-program 1.14.3", - "solana-sdk-macro 1.14.3", + "solana-frozen-abi 1.14.4", + "solana-frozen-abi-macro 1.14.4", + "solana-logger 1.14.4", + "solana-program 1.14.4", + "solana-sdk-macro 1.14.4", "thiserror", "uriparse", "wasm-bindgen", @@ -5529,7 +5529,7 @@ dependencies = [ [[package]] name = "solana-sdk-macro" -version = "1.14.3" +version = "1.14.4" dependencies = [ "bs58", "proc-macro2 1.0.41", @@ -5540,7 +5540,7 @@ dependencies = [ [[package]] name = "solana-send-transaction-service" -version = "1.14.3" +version = "1.14.4" dependencies = [ "crossbeam-channel", "log", @@ -5548,12 +5548,12 @@ dependencies = [ "solana-measure", "solana-metrics", "solana-runtime", - "solana-sdk 1.14.3", + "solana-sdk 1.14.4", ] [[package]] name = "solana-stake-program" -version = "1.14.3" +version = "1.14.4" dependencies = [ "bincode", "log", @@ -5563,18 +5563,18 @@ dependencies = [ "serde", "serde_derive", "solana-config-program", - "solana-frozen-abi 1.14.3", - "solana-frozen-abi-macro 1.14.3", + "solana-frozen-abi 1.14.4", + "solana-frozen-abi-macro 1.14.4", "solana-metrics", "solana-program-runtime", - "solana-sdk 1.14.3", + "solana-sdk 1.14.4", "solana-vote-program", "thiserror", ] [[package]] name = "solana-storage-bigtable" -version = "1.14.3" +version = "1.14.4" dependencies = [ "backoff", "bincode", @@ -5595,7 +5595,7 @@ dependencies = [ "serde_derive", "smpl_jwt", "solana-metrics", - "solana-sdk 1.14.3", + "solana-sdk 1.14.4", "solana-storage-proto", "solana-transaction-status", "thiserror", @@ -5606,7 +5606,7 @@ dependencies = [ [[package]] name = "solana-storage-proto" -version = "1.14.3" +version = "1.14.4" dependencies = [ "bincode", "bs58", @@ -5614,14 +5614,14 @@ dependencies = [ "protobuf-src", "serde", "solana-account-decoder", - "solana-sdk 1.14.3", + "solana-sdk 1.14.4", "solana-transaction-status", "tonic-build 0.8.0", ] [[package]] name = "solana-streamer" -version = "1.14.3" +version = "1.14.4" dependencies = [ "crossbeam-channel", "futures-util", @@ -5640,7 +5640,7 @@ dependencies = [ "rustls 0.20.6", "solana-metrics", "solana-perf", - "solana-sdk 1.14.3", + "solana-sdk 1.14.4", "thiserror", "tokio", "x509-parser", @@ -5648,13 +5648,13 @@ dependencies = [ [[package]] name = "solana-sys-tuner" -version = "1.14.3" +version = "1.14.4" dependencies = [ "clap 2.33.3", "libc", "log", "nix", - "solana-logger 1.14.3", + "solana-logger 1.14.4", "solana-version", "sysctl", "unix_socket2", @@ -5663,7 +5663,7 @@ dependencies = [ [[package]] name = "solana-test-validator" -version = "1.14.3" +version = "1.14.4" dependencies = [ "base64 0.13.0", "log", @@ -5674,20 +5674,20 @@ dependencies = [ "solana-core", "solana-gossip", "solana-ledger", - "solana-logger 1.14.3", + "solana-logger 1.14.4", "solana-net-utils", "solana-program-runtime", "solana-program-test", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.3", + "solana-sdk 1.14.4", "solana-streamer", "tokio", ] [[package]] name = "solana-transaction-status" -version = "1.14.3" +version = "1.14.4" dependencies = [ "Inflector", "base64 0.13.0", @@ -5702,7 +5702,7 @@ dependencies = [ "solana-account-decoder", "solana-measure", "solana-metrics", - "solana-sdk 1.14.3", + "solana-sdk 1.14.4", "solana-vote-program", "spl-associated-token-account", "spl-memo", @@ -5713,7 +5713,7 @@ dependencies = [ [[package]] name = "solana-validator" -version = "1.14.3" +version = "1.14.4" dependencies = [ "chrono", "clap 2.33.3", @@ -5744,14 +5744,14 @@ dependencies = [ "solana-genesis-utils", "solana-gossip", "solana-ledger", - "solana-logger 1.14.3", + "solana-logger 1.14.4", "solana-metrics", "solana-net-utils", "solana-perf", "solana-poh", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.3", + "solana-sdk 1.14.4", "solana-send-transaction-service", "solana-storage-bigtable", "solana-streamer", @@ -5764,21 +5764,21 @@ dependencies = [ [[package]] name = "solana-version" -version = "1.14.3" +version = "1.14.4" dependencies = [ "log", "rustc_version", "semver", "serde", "serde_derive", - "solana-frozen-abi 1.14.3", - "solana-frozen-abi-macro 1.14.3", - "solana-sdk 1.14.3", + "solana-frozen-abi 1.14.4", + "solana-frozen-abi-macro 1.14.4", + "solana-sdk 1.14.4", ] [[package]] name = "solana-vote-program" -version = "1.14.3" +version = "1.14.4" dependencies = [ "bincode", "log", @@ -5787,25 +5787,25 @@ dependencies = [ "rustc_version", "serde", "serde_derive", - "solana-frozen-abi 1.14.3", - "solana-frozen-abi-macro 1.14.3", + "solana-frozen-abi 1.14.4", + "solana-frozen-abi-macro 1.14.4", "solana-metrics", "solana-program-runtime", - "solana-sdk 1.14.3", + "solana-sdk 1.14.4", "thiserror", ] [[package]] name = "solana-zk-token-proof-program" -version = "1.14.3" +version = "1.14.4" dependencies = [ "bytemuck", "getrandom 0.1.14", "num-derive", "num-traits", "solana-program-runtime", - "solana-sdk 1.14.3", - "solana-zk-token-sdk 1.14.3", + "solana-sdk 1.14.4", + "solana-zk-token-sdk 1.14.4", ] [[package]] @@ -5840,7 +5840,7 @@ dependencies = [ [[package]] name = "solana-zk-token-sdk" -version = "1.14.3" +version = "1.14.4" dependencies = [ "aes-gcm-siv", "arrayref", @@ -5860,8 +5860,8 @@ dependencies = [ "serde", "serde_json", "sha3 0.9.1", - "solana-program 1.14.3", - "solana-sdk 1.14.3", + "solana-program 1.14.4", + "solana-sdk 1.14.4", "subtle", "thiserror", "zeroize", diff --git a/programs/bpf/Cargo.toml b/programs/bpf/Cargo.toml index 4342db6cd62dfb..f5c9ae47b892f5 100644 --- a/programs/bpf/Cargo.toml +++ b/programs/bpf/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "solana-bpf-programs" description = "Blockchain, Rebuilt for Scale" -version = "1.14.3" +version = "1.14.4" documentation = "https://docs.rs/solana" homepage = "https://solana.com/" readme = "README.md" @@ -26,22 +26,22 @@ itertools = "0.10.1" log = "0.4.11" miow = "0.3.6" net2 = "0.2.37" -solana-account-decoder = { path = "../../account-decoder", version = "=1.14.3" } -solana-bpf-loader-program = { path = "../bpf_loader", version = "=1.14.3" } -solana-bpf-rust-invoke = { path = "rust/invoke", version = "=1.14.3" } -solana-bpf-rust-realloc = { path = "rust/realloc", version = "=1.14.3" } -solana-bpf-rust-realloc-invoke = { path = "rust/realloc_invoke", version = "=1.14.3" } -solana-cli-output = { path = "../../cli-output", version = "=1.14.3" } -solana-logger = { path = "../../logger", version = "=1.14.3" } -solana-measure = { path = "../../measure", version = "=1.14.3" } -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.3" } -solana-runtime = { path = "../../runtime", version = "=1.14.3" } -solana-sdk = { path = "../../sdk", version = "=1.14.3" } -solana-transaction-status = { path = "../../transaction-status", version = "=1.14.3" } +solana-account-decoder = { path = "../../account-decoder", version = "=1.14.4" } +solana-bpf-loader-program = { path = "../bpf_loader", version = "=1.14.4" } +solana-bpf-rust-invoke = { path = "rust/invoke", version = "=1.14.4" } +solana-bpf-rust-realloc = { path = "rust/realloc", version = "=1.14.4" } +solana-bpf-rust-realloc-invoke = { path = "rust/realloc_invoke", version = "=1.14.4" } +solana-cli-output = { path = "../../cli-output", version = "=1.14.4" } +solana-logger = { path = "../../logger", version = "=1.14.4" } +solana-measure = { path = "../../measure", version = "=1.14.4" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.4" } +solana-runtime = { path = "../../runtime", version = "=1.14.4" } +solana-sdk = { path = "../../sdk", version = "=1.14.4" } +solana-transaction-status = { path = "../../transaction-status", version = "=1.14.4" } solana_rbpf = "=0.2.31" [dev-dependencies] -solana-ledger = { path = "../../ledger", version = "=1.14.3" } +solana-ledger = { path = "../../ledger", version = "=1.14.4" } [[bench]] name = "bpf_loader" diff --git a/programs/bpf/rust/128bit/Cargo.toml b/programs/bpf/rust/128bit/Cargo.toml index 5b6b09fcd8072c..36c5d255d15a57 100644 --- a/programs/bpf/rust/128bit/Cargo.toml +++ b/programs/bpf/rust/128bit/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-128bit" -version = "1.14.3" +version = "1.14.4" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ documentation = "https://docs.rs/solana-bpf-rust-128bit" edition = "2021" [dependencies] -solana-bpf-rust-128bit-dep = { path = "../128bit_dep", version = "=1.14.3" } -solana-program = { path = "../../../../sdk/program", version = "=1.14.3" } +solana-bpf-rust-128bit-dep = { path = "../128bit_dep", version = "=1.14.4" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.4" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/128bit_dep/Cargo.toml b/programs/bpf/rust/128bit_dep/Cargo.toml index 19502494abc2f6..47a4a5d47e9665 100644 --- a/programs/bpf/rust/128bit_dep/Cargo.toml +++ b/programs/bpf/rust/128bit_dep/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-128bit-dep" -version = "1.14.3" +version = "1.14.4" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-128bit-dep" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.3" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.4" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/bpf/rust/alloc/Cargo.toml b/programs/bpf/rust/alloc/Cargo.toml index b8ac95302a3776..c9752c58005199 100644 --- a/programs/bpf/rust/alloc/Cargo.toml +++ b/programs/bpf/rust/alloc/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-alloc" -version = "1.14.3" +version = "1.14.4" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-alloc" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.3" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.4" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/call_depth/Cargo.toml b/programs/bpf/rust/call_depth/Cargo.toml index de242d928b9e23..6c673cda699201 100644 --- a/programs/bpf/rust/call_depth/Cargo.toml +++ b/programs/bpf/rust/call_depth/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-call-depth" -version = "1.14.3" +version = "1.14.4" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-call-depth" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.3" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.4" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/caller_access/Cargo.toml b/programs/bpf/rust/caller_access/Cargo.toml index f0c5934b1a1da9..81958585811e54 100644 --- a/programs/bpf/rust/caller_access/Cargo.toml +++ b/programs/bpf/rust/caller_access/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-caller-access" -version = "1.14.3" +version = "1.14.4" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-caller-access" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.3" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.4" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/curve25519/Cargo.toml b/programs/bpf/rust/curve25519/Cargo.toml index 045086ac17624a..0b1c76c9dec085 100644 --- a/programs/bpf/rust/curve25519/Cargo.toml +++ b/programs/bpf/rust/curve25519/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-curve25519" -version = "1.14.3" +version = "1.14.4" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ documentation = "https://docs.rs/solana-bpf-rust-zktoken_crypto" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.3" } -solana-zk-token-sdk = { path = "../../../../zk-token-sdk", version = "=1.14.3" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.4" } +solana-zk-token-sdk = { path = "../../../../zk-token-sdk", version = "=1.14.4" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/custom_heap/Cargo.toml b/programs/bpf/rust/custom_heap/Cargo.toml index c439425a0b943c..ce527344a14bb4 100644 --- a/programs/bpf/rust/custom_heap/Cargo.toml +++ b/programs/bpf/rust/custom_heap/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-custom-heap" -version = "1.14.3" +version = "1.14.4" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-custom-heap" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.3" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.4" } [features] default = ["custom-heap"] diff --git a/programs/bpf/rust/dep_crate/Cargo.toml b/programs/bpf/rust/dep_crate/Cargo.toml index 455cc35630c3b6..5d26d167110d8b 100644 --- a/programs/bpf/rust/dep_crate/Cargo.toml +++ b/programs/bpf/rust/dep_crate/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-dep-crate" -version = "1.14.3" +version = "1.14.4" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,8 +12,8 @@ edition = "2021" [dependencies] byteorder = { version = "1", default-features = false } # list of crates which must be buildable for bpf programs -solana-address-lookup-table-program = { path = "../../../../programs/address-lookup-table", version = "=1.14.3" } -solana-program = { path = "../../../../sdk/program", version = "=1.14.3" } +solana-address-lookup-table-program = { path = "../../../../programs/address-lookup-table", version = "=1.14.4" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.4" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/deprecated_loader/Cargo.toml b/programs/bpf/rust/deprecated_loader/Cargo.toml index c43688847bd28d..9b3b984f1f2f76 100644 --- a/programs/bpf/rust/deprecated_loader/Cargo.toml +++ b/programs/bpf/rust/deprecated_loader/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-deprecated-loader" -version = "1.14.3" +version = "1.14.4" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-deprecated-loader" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.3" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.4" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/dup_accounts/Cargo.toml b/programs/bpf/rust/dup_accounts/Cargo.toml index 8f561f6e3de692..4877d300cff61e 100644 --- a/programs/bpf/rust/dup_accounts/Cargo.toml +++ b/programs/bpf/rust/dup_accounts/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-dup-accounts" -version = "1.14.3" +version = "1.14.4" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-dup-accounts" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.3" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.4" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/error_handling/Cargo.toml b/programs/bpf/rust/error_handling/Cargo.toml index d80c8463cd5043..b0f77ca1706be5 100644 --- a/programs/bpf/rust/error_handling/Cargo.toml +++ b/programs/bpf/rust/error_handling/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-error-handling" -version = "1.14.3" +version = "1.14.4" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,7 +12,7 @@ edition = "2021" [dependencies] num-derive = "0.3" num-traits = "0.2" -solana-program = { path = "../../../../sdk/program", version = "=1.14.3" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.4" } thiserror = "1.0" [lib] diff --git a/programs/bpf/rust/external_spend/Cargo.toml b/programs/bpf/rust/external_spend/Cargo.toml index e7ed9216a1a4cf..45136d80b63db2 100644 --- a/programs/bpf/rust/external_spend/Cargo.toml +++ b/programs/bpf/rust/external_spend/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-external-spend" -version = "1.14.3" +version = "1.14.4" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-external-spend" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.3" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.4" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/finalize/Cargo.toml b/programs/bpf/rust/finalize/Cargo.toml index 64839446ee1130..606f3f17ee20d0 100644 --- a/programs/bpf/rust/finalize/Cargo.toml +++ b/programs/bpf/rust/finalize/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-finalize" -version = "1.14.3" +version = "1.14.4" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-finalize" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.3" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.4" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/get_minimum_delegation/Cargo.toml b/programs/bpf/rust/get_minimum_delegation/Cargo.toml index a0572ccdce4719..e31aa5884e9ea8 100644 --- a/programs/bpf/rust/get_minimum_delegation/Cargo.toml +++ b/programs/bpf/rust/get_minimum_delegation/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-get-minimum-delegation" -version = "1.14.3" +version = "1.14.4" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-get-minimum-delegation" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.3" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.4" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/inner_instruction_alignment_check/Cargo.toml b/programs/bpf/rust/inner_instruction_alignment_check/Cargo.toml index 245f64bb1a236c..c697b9eccc7392 100644 --- a/programs/bpf/rust/inner_instruction_alignment_check/Cargo.toml +++ b/programs/bpf/rust/inner_instruction_alignment_check/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-inner_instruction_alignment_check" -version = "1.14.3" +version = "1.14.4" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-inner_instruction_alignment_che edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.3" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.4" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/instruction_introspection/Cargo.toml b/programs/bpf/rust/instruction_introspection/Cargo.toml index 236e3632ae99c2..0b5985639ccc9e 100644 --- a/programs/bpf/rust/instruction_introspection/Cargo.toml +++ b/programs/bpf/rust/instruction_introspection/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-instruction-introspection" -version = "1.14.3" +version = "1.14.4" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-instruction-introspection" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.3" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.4" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/invoke/Cargo.toml b/programs/bpf/rust/invoke/Cargo.toml index e2a0dec4c8ff48..76fc49b1d78519 100644 --- a/programs/bpf/rust/invoke/Cargo.toml +++ b/programs/bpf/rust/invoke/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-invoke" -version = "1.14.3" +version = "1.14.4" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -15,7 +15,7 @@ program = [] [dependencies] solana-bpf-rust-invoked = { path = "../invoked", default-features = false } -solana-program = { path = "../../../../sdk/program", version = "=1.14.3" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.4" } [lib] crate-type = ["lib", "cdylib"] diff --git a/programs/bpf/rust/invoke_and_error/Cargo.toml b/programs/bpf/rust/invoke_and_error/Cargo.toml index 6ec03a021955a1..54f7f96833a9a8 100644 --- a/programs/bpf/rust/invoke_and_error/Cargo.toml +++ b/programs/bpf/rust/invoke_and_error/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-invoke-and-error" -version = "1.14.3" +version = "1.14.4" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-invoke-and-error" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.3" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.4" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/invoke_and_ok/Cargo.toml b/programs/bpf/rust/invoke_and_ok/Cargo.toml index d84a4f7fb02cb4..a848a6931d08f1 100644 --- a/programs/bpf/rust/invoke_and_ok/Cargo.toml +++ b/programs/bpf/rust/invoke_and_ok/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-invoke-and-ok" -version = "1.14.3" +version = "1.14.4" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-invoke-and-ok" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.3" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.4" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/invoke_and_return/Cargo.toml b/programs/bpf/rust/invoke_and_return/Cargo.toml index 4f995c069bac47..75918a0f1aaef5 100644 --- a/programs/bpf/rust/invoke_and_return/Cargo.toml +++ b/programs/bpf/rust/invoke_and_return/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-invoke-and-return" -version = "1.14.3" +version = "1.14.4" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-invoke-and-return" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.3" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.4" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/invoked/Cargo.toml b/programs/bpf/rust/invoked/Cargo.toml index 400fd83dea8b1b..bfc1c79ede8325 100644 --- a/programs/bpf/rust/invoked/Cargo.toml +++ b/programs/bpf/rust/invoked/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-invoked" -version = "1.14.3" +version = "1.14.4" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,7 +14,7 @@ default = ["program"] program = [] [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.3" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.4" } [lib] crate-type = ["lib", "cdylib"] diff --git a/programs/bpf/rust/iter/Cargo.toml b/programs/bpf/rust/iter/Cargo.toml index eefecd4df782e1..5f48e9cecbf581 100644 --- a/programs/bpf/rust/iter/Cargo.toml +++ b/programs/bpf/rust/iter/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-iter" -version = "1.14.3" +version = "1.14.4" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-iter" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.3" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.4" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/log_data/Cargo.toml b/programs/bpf/rust/log_data/Cargo.toml index 2e21e230ce6e1f..41724fa236798a 100644 --- a/programs/bpf/rust/log_data/Cargo.toml +++ b/programs/bpf/rust/log_data/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-log-data" -version = "1.14.3" +version = "1.14.4" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-log-data" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.3" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.4" } [features] default = ["program"] diff --git a/programs/bpf/rust/many_args/Cargo.toml b/programs/bpf/rust/many_args/Cargo.toml index d4d46ecb64338e..04bcbfac83145b 100644 --- a/programs/bpf/rust/many_args/Cargo.toml +++ b/programs/bpf/rust/many_args/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-many-args" -version = "1.14.3" +version = "1.14.4" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ documentation = "https://docs.rs/solana-bpf-rust-many-args" edition = "2021" [dependencies] -solana-bpf-rust-many-args-dep = { path = "../many_args_dep", version = "=1.14.3" } -solana-program = { path = "../../../../sdk/program", version = "=1.14.3" } +solana-bpf-rust-many-args-dep = { path = "../many_args_dep", version = "=1.14.4" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.4" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/many_args_dep/Cargo.toml b/programs/bpf/rust/many_args_dep/Cargo.toml index 6e934bbc627cb1..06c198133e11f1 100644 --- a/programs/bpf/rust/many_args_dep/Cargo.toml +++ b/programs/bpf/rust/many_args_dep/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-many-args-dep" -version = "1.14.3" +version = "1.14.4" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-many-args-dep" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.3" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.4" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/bpf/rust/mem/Cargo.toml b/programs/bpf/rust/mem/Cargo.toml index 8aad19aa6fd66a..c275978655de46 100644 --- a/programs/bpf/rust/mem/Cargo.toml +++ b/programs/bpf/rust/mem/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-mem" -version = "1.14.3" +version = "1.14.4" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,12 +13,12 @@ edition = "2021" no-entrypoint = [] [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.3" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.4" } [dev-dependencies] -solana-program-runtime = { path = "../../../../program-runtime", version = "=1.14.3" } -solana-program-test = { path = "../../../../program-test", version = "=1.14.3" } -solana-sdk = { path = "../../../../sdk", version = "=1.14.3" } +solana-program-runtime = { path = "../../../../program-runtime", version = "=1.14.4" } +solana-program-test = { path = "../../../../program-test", version = "=1.14.4" } +solana-sdk = { path = "../../../../sdk", version = "=1.14.4" } [lib] crate-type = ["cdylib", "lib"] diff --git a/programs/bpf/rust/membuiltins/Cargo.toml b/programs/bpf/rust/membuiltins/Cargo.toml index fdf0534b5f6b7a..b92b529b10b418 100644 --- a/programs/bpf/rust/membuiltins/Cargo.toml +++ b/programs/bpf/rust/membuiltins/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-membuiltins" -version = "1.14.3" +version = "1.14.4" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ documentation = "https://docs.rs/solana-bpf-rust-mem" edition = "2021" [dependencies] -solana-bpf-rust-mem = { path = "../mem", version = "=1.14.3", features = [ "no-entrypoint" ] } -solana-program = { path = "../../../../sdk/program", version = "=1.14.3" } +solana-bpf-rust-mem = { path = "../mem", version = "=1.14.4", features = [ "no-entrypoint" ] } +solana-program = { path = "../../../../sdk/program", version = "=1.14.4" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/noop/Cargo.toml b/programs/bpf/rust/noop/Cargo.toml index 73bd2332299700..42ebb990e8ffae 100644 --- a/programs/bpf/rust/noop/Cargo.toml +++ b/programs/bpf/rust/noop/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-noop" -version = "1.14.3" +version = "1.14.4" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-noop" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.3" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.4" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/panic/Cargo.toml b/programs/bpf/rust/panic/Cargo.toml index e65cdf3c0dca73..4ec29ab478ab41 100644 --- a/programs/bpf/rust/panic/Cargo.toml +++ b/programs/bpf/rust/panic/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-panic" -version = "1.14.3" +version = "1.14.4" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-panic" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.3" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.4" } [features] default = ["custom-panic"] diff --git a/programs/bpf/rust/param_passing/Cargo.toml b/programs/bpf/rust/param_passing/Cargo.toml index de61584856b1a5..2943ecdeada5a8 100644 --- a/programs/bpf/rust/param_passing/Cargo.toml +++ b/programs/bpf/rust/param_passing/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-param-passing" -version = "1.14.3" +version = "1.14.4" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ documentation = "https://docs.rs/solana-bpf-rust-param-passing" edition = "2021" [dependencies] -solana-bpf-rust-param-passing-dep = { path = "../param_passing_dep", version = "=1.14.3" } -solana-program = { path = "../../../../sdk/program", version = "=1.14.3" } +solana-bpf-rust-param-passing-dep = { path = "../param_passing_dep", version = "=1.14.4" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.4" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/param_passing_dep/Cargo.toml b/programs/bpf/rust/param_passing_dep/Cargo.toml index 719a5ac6213e84..72dcd2fbcb33fc 100644 --- a/programs/bpf/rust/param_passing_dep/Cargo.toml +++ b/programs/bpf/rust/param_passing_dep/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-param-passing-dep" -version = "1.14.3" +version = "1.14.4" description = "Solana BPF program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-param-passing-dep" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.3" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.4" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/bpf/rust/rand/Cargo.toml b/programs/bpf/rust/rand/Cargo.toml index 9e16be725f67df..0226f92552bae0 100644 --- a/programs/bpf/rust/rand/Cargo.toml +++ b/programs/bpf/rust/rand/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-rand" -version = "1.14.3" +version = "1.14.4" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,7 +12,7 @@ edition = "2021" [dependencies] getrandom = { version = "0.1.14", features = ["dummy"] } rand = "0.7" -solana-program = { path = "../../../../sdk/program", version = "=1.14.3" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.4" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/realloc/Cargo.toml b/programs/bpf/rust/realloc/Cargo.toml index 8c5c40caa868b0..e1988bfee5f0d6 100644 --- a/programs/bpf/rust/realloc/Cargo.toml +++ b/programs/bpf/rust/realloc/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-realloc" -version = "1.14.3" +version = "1.14.4" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,7 +14,7 @@ default = ["program"] program = [] [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.3" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.4" } [lib] crate-type = ["lib", "cdylib"] diff --git a/programs/bpf/rust/realloc_invoke/Cargo.toml b/programs/bpf/rust/realloc_invoke/Cargo.toml index ca9d26ba54a12f..5bdfb72c9a3ec8 100644 --- a/programs/bpf/rust/realloc_invoke/Cargo.toml +++ b/programs/bpf/rust/realloc_invoke/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-realloc-invoke" -version = "1.14.3" +version = "1.14.4" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,8 +14,8 @@ default = ["program"] program = [] [dependencies] -solana-bpf-rust-realloc = { path = "../realloc", version = "=1.14.3", default-features = false } -solana-program = { path = "../../../../sdk/program", version = "=1.14.3" } +solana-bpf-rust-realloc = { path = "../realloc", version = "=1.14.4", default-features = false } +solana-program = { path = "../../../../sdk/program", version = "=1.14.4" } [lib] crate-type = ["lib", "cdylib"] diff --git a/programs/bpf/rust/ro_account_modify/Cargo.toml b/programs/bpf/rust/ro_account_modify/Cargo.toml index 0ae1dc8ddd2be7..665880ea040c97 100644 --- a/programs/bpf/rust/ro_account_modify/Cargo.toml +++ b/programs/bpf/rust/ro_account_modify/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-ro-account_modify" -version = "1.14.3" +version = "1.14.4" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-ro-modify" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.3" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.4" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/ro_modify/Cargo.toml b/programs/bpf/rust/ro_modify/Cargo.toml index ac19c7944bb558..32665d1e5753e9 100644 --- a/programs/bpf/rust/ro_modify/Cargo.toml +++ b/programs/bpf/rust/ro_modify/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-ro-modify" -version = "1.14.3" +version = "1.14.4" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-ro-modify" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.3" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.4" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/sanity/Cargo.toml b/programs/bpf/rust/sanity/Cargo.toml index 0bf1f1df6f3eb1..801280653149dc 100644 --- a/programs/bpf/rust/sanity/Cargo.toml +++ b/programs/bpf/rust/sanity/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-sanity" -version = "1.14.3" +version = "1.14.4" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,12 +13,12 @@ edition = "2021" test-bpf = [] [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.3" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.4" } [dev-dependencies] -solana-program-runtime = { path = "../../../../program-runtime", version = "=1.14.3" } -solana-program-test = { path = "../../../../program-test", version = "=1.14.3" } -solana-sdk = { path = "../../../../sdk", version = "=1.14.3" } +solana-program-runtime = { path = "../../../../program-runtime", version = "=1.14.4" } +solana-program-test = { path = "../../../../program-test", version = "=1.14.4" } +solana-sdk = { path = "../../../../sdk", version = "=1.14.4" } [lib] crate-type = ["cdylib", "lib"] diff --git a/programs/bpf/rust/secp256k1_recover/Cargo.toml b/programs/bpf/rust/secp256k1_recover/Cargo.toml index 74ba14c629f51c..225703776e9abd 100644 --- a/programs/bpf/rust/secp256k1_recover/Cargo.toml +++ b/programs/bpf/rust/secp256k1_recover/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-secp256k1-recover" -version = "1.14.3" +version = "1.14.4" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -11,7 +11,7 @@ edition = "2021" [dependencies] libsecp256k1 = { version = "0.7.0", default-features = false } -solana-program = { path = "../../../../sdk/program", version = "=1.14.3" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.4" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/sha/Cargo.toml b/programs/bpf/rust/sha/Cargo.toml index 72bfd9f2e0e561..ea17ea290e8d5e 100644 --- a/programs/bpf/rust/sha/Cargo.toml +++ b/programs/bpf/rust/sha/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-sha" -version = "1.14.3" +version = "1.14.4" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -11,7 +11,7 @@ edition = "2021" [dependencies] blake3 = "1.0.0" -solana-program = { path = "../../../../sdk/program", version = "=1.14.3" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.4" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/sibling_inner_instruction/Cargo.toml b/programs/bpf/rust/sibling_inner_instruction/Cargo.toml index e54128f24a6390..fa2ac7fe4c42f4 100644 --- a/programs/bpf/rust/sibling_inner_instruction/Cargo.toml +++ b/programs/bpf/rust/sibling_inner_instruction/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-sibling_inner-instructions" -version = "1.14.3" +version = "1.14.4" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-log-data" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.3" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.4" } [features] default = ["program"] diff --git a/programs/bpf/rust/sibling_instruction/Cargo.toml b/programs/bpf/rust/sibling_instruction/Cargo.toml index 6bee9229303248..4d4cea18686ce2 100644 --- a/programs/bpf/rust/sibling_instruction/Cargo.toml +++ b/programs/bpf/rust/sibling_instruction/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-sibling-instructions" -version = "1.14.3" +version = "1.14.4" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-log-data" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.3" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.4" } [features] default = ["program"] diff --git a/programs/bpf/rust/simulation/Cargo.toml b/programs/bpf/rust/simulation/Cargo.toml index 7977486acd1afe..188c9de54d703f 100644 --- a/programs/bpf/rust/simulation/Cargo.toml +++ b/programs/bpf/rust/simulation/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-simulation" -version = "1.14.3" +version = "1.14.4" description = "Solana BPF Program Simulation Differences" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,13 +13,13 @@ edition = "2021" test-bpf = [] [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.3" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.4" } [dev-dependencies] -solana-logger = { path = "../../../../logger", version = "=1.14.3" } -solana-program-test = { path = "../../../../program-test", version = "=1.14.3" } -solana-sdk = { path = "../../../../sdk", version = "=1.14.3" } -solana-validator = { path = "../../../../validator", version = "=1.14.3" } +solana-logger = { path = "../../../../logger", version = "=1.14.4" } +solana-program-test = { path = "../../../../program-test", version = "=1.14.4" } +solana-sdk = { path = "../../../../sdk", version = "=1.14.4" } +solana-validator = { path = "../../../../validator", version = "=1.14.4" } [lib] crate-type = ["cdylib", "lib"] diff --git a/programs/bpf/rust/spoof1/Cargo.toml b/programs/bpf/rust/spoof1/Cargo.toml index 282307253c1f52..57666d109cad63 100644 --- a/programs/bpf/rust/spoof1/Cargo.toml +++ b/programs/bpf/rust/spoof1/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-spoof1" -version = "1.14.3" +version = "1.14.4" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-spoof1" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.3" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.4" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/spoof1_system/Cargo.toml b/programs/bpf/rust/spoof1_system/Cargo.toml index 2e07fa797a8017..db09952543699a 100644 --- a/programs/bpf/rust/spoof1_system/Cargo.toml +++ b/programs/bpf/rust/spoof1_system/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-spoof1-system" -version = "1.14.3" +version = "1.14.4" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-spoof1-system" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.3" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.4" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/sysvar/Cargo.toml b/programs/bpf/rust/sysvar/Cargo.toml index 092537c2e544db..342bd17816db7b 100644 --- a/programs/bpf/rust/sysvar/Cargo.toml +++ b/programs/bpf/rust/sysvar/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-sysvar" -version = "1.14.3" +version = "1.14.4" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,12 +10,12 @@ documentation = "https://docs.rs/solana-bpf-rust-sysvar" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.3" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.4" } [dev-dependencies] -solana-program-runtime = { path = "../../../../program-runtime", version = "=1.14.3" } -solana-program-test = { path = "../../../../program-test", version = "=1.14.3" } -solana-sdk = { path = "../../../../sdk", version = "=1.14.3" } +solana-program-runtime = { path = "../../../../program-runtime", version = "=1.14.4" } +solana-program-test = { path = "../../../../program-test", version = "=1.14.4" } +solana-sdk = { path = "../../../../sdk", version = "=1.14.4" } [lib] crate-type = ["cdylib", "lib"] diff --git a/programs/bpf/rust/upgradeable/Cargo.toml b/programs/bpf/rust/upgradeable/Cargo.toml index 64f145742b76a3..e90e6b54b43d5b 100644 --- a/programs/bpf/rust/upgradeable/Cargo.toml +++ b/programs/bpf/rust/upgradeable/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-upgradeable" -version = "1.14.3" +version = "1.14.4" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-upgradeable" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.3" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.4" } [lib] name = "solana_bpf_rust_upgradeable" diff --git a/programs/bpf/rust/upgraded/Cargo.toml b/programs/bpf/rust/upgraded/Cargo.toml index 4d46a233f9fd64..207287d043f59b 100644 --- a/programs/bpf/rust/upgraded/Cargo.toml +++ b/programs/bpf/rust/upgraded/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-upgraded" -version = "1.14.3" +version = "1.14.4" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-upgraded" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.3" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.4" } [lib] name = "solana_bpf_rust_upgraded" diff --git a/programs/bpf_loader/Cargo.toml b/programs/bpf_loader/Cargo.toml index d3e294cb9c9166..a135a470b9933e 100644 --- a/programs/bpf_loader/Cargo.toml +++ b/programs/bpf_loader/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-loader-program" -version = "1.14.3" +version = "1.14.4" description = "Solana BPF loader" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,17 +14,17 @@ bincode = "1.3.3" byteorder = "1.4.3" libsecp256k1 = "0.6.0" log = "0.4.17" -solana-measure = { path = "../../measure", version = "=1.14.3" } -solana-metrics = { path = "../../metrics", version = "=1.14.3" } -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.3" } -solana-sdk = { path = "../../sdk", version = "=1.14.3" } -solana-zk-token-sdk = { path = "../../zk-token-sdk", version = "=1.14.3" } +solana-measure = { path = "../../measure", version = "=1.14.4" } +solana-metrics = { path = "../../metrics", version = "=1.14.4" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.4" } +solana-sdk = { path = "../../sdk", version = "=1.14.4" } +solana-zk-token-sdk = { path = "../../zk-token-sdk", version = "=1.14.4" } solana_rbpf = "=0.2.31" thiserror = "1.0" [dev-dependencies] rand = "0.7.3" -solana-runtime = { path = "../../runtime", version = "=1.14.3" } +solana-runtime = { path = "../../runtime", version = "=1.14.4" } [lib] crate-type = ["lib"] diff --git a/programs/bpf_loader/gen-syscall-list/Cargo.toml b/programs/bpf_loader/gen-syscall-list/Cargo.toml index 1d5941a3b8277b..0cb6747f276d01 100644 --- a/programs/bpf_loader/gen-syscall-list/Cargo.toml +++ b/programs/bpf_loader/gen-syscall-list/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "gen-syscall-list" -version = "1.14.3" +version = "1.14.4" edition = "2021" license = "Apache-2.0" publish = false diff --git a/programs/compute-budget/Cargo.toml b/programs/compute-budget/Cargo.toml index 397fa86f931073..fe49fe7dc9d853 100644 --- a/programs/compute-budget/Cargo.toml +++ b/programs/compute-budget/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "solana-compute-budget-program" description = "Solana Compute Budget program" -version = "1.14.3" +version = "1.14.4" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-compute-budget-program" repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ license = "Apache-2.0" edition = "2021" [dependencies] -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.3" } -solana-sdk = { path = "../../sdk", version = "=1.14.3" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.4" } +solana-sdk = { path = "../../sdk", version = "=1.14.4" } [lib] crate-type = ["lib"] diff --git a/programs/config/Cargo.toml b/programs/config/Cargo.toml index 878edcd9058642..14a76dd6f8f1c7 100644 --- a/programs/config/Cargo.toml +++ b/programs/config/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-config-program" -version = "1.14.3" +version = "1.14.4" description = "Solana Config program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,11 +14,11 @@ bincode = "1.3.3" chrono = { version = "0.4.11", features = ["serde"] } serde = "1.0.138" serde_derive = "1.0.103" -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.3" } -solana-sdk = { path = "../../sdk", version = "=1.14.3" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.4" } +solana-sdk = { path = "../../sdk", version = "=1.14.4" } [dev-dependencies] -solana-logger = { path = "../../logger", version = "=1.14.3" } +solana-logger = { path = "../../logger", version = "=1.14.4" } [lib] crate-type = ["lib"] diff --git a/programs/ed25519-tests/Cargo.toml b/programs/ed25519-tests/Cargo.toml index 6ec88c9dc01cb5..9b8a99a22d6462 100644 --- a/programs/ed25519-tests/Cargo.toml +++ b/programs/ed25519-tests/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-ed25519-program-tests" -version = "1.14.3" +version = "1.14.4" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" @@ -12,8 +12,8 @@ publish = false assert_matches = "1.5.0" ed25519-dalek = "=1.0.1" rand = "0.7.0" -solana-program-test = { path = "../../program-test", version = "=1.14.3" } -solana-sdk = { path = "../../sdk", version = "=1.14.3" } +solana-program-test = { path = "../../program-test", version = "=1.14.4" } +solana-sdk = { path = "../../sdk", version = "=1.14.4" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/stake/Cargo.toml b/programs/stake/Cargo.toml index b444a0ff7fc0de..753e478e819c44 100644 --- a/programs/stake/Cargo.toml +++ b/programs/stake/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-stake-program" -version = "1.14.3" +version = "1.14.4" description = "Solana Stake program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -16,19 +16,19 @@ num-derive = "0.3" num-traits = "0.2" serde = "1.0.138" serde_derive = "1.0.103" -solana-config-program = { path = "../config", version = "=1.14.3" } -solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.3" } -solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.3" } -solana-metrics = { path = "../../metrics", version = "=1.14.3" } -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.3" } -solana-sdk = { path = "../../sdk", version = "=1.14.3" } -solana-vote-program = { path = "../vote", version = "=1.14.3" } +solana-config-program = { path = "../config", version = "=1.14.4" } +solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.4" } +solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.4" } +solana-metrics = { path = "../../metrics", version = "=1.14.4" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.4" } +solana-sdk = { path = "../../sdk", version = "=1.14.4" } +solana-vote-program = { path = "../vote", version = "=1.14.4" } thiserror = "1.0" [dev-dependencies] assert_matches = "1.5.0" proptest = "1.0" -solana-logger = { path = "../../logger", version = "=1.14.3" } +solana-logger = { path = "../../logger", version = "=1.14.4" } test-case = "2.1.0" [build-dependencies] diff --git a/programs/vote/Cargo.toml b/programs/vote/Cargo.toml index 0cc6174d30693c..029d7d3a4ae883 100644 --- a/programs/vote/Cargo.toml +++ b/programs/vote/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-vote-program" -version = "1.14.3" +version = "1.14.4" description = "Solana Vote program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -16,17 +16,17 @@ num-derive = "0.3" num-traits = "0.2" serde = "1.0.138" serde_derive = "1.0.103" -solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.3" } -solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.3" } -solana-metrics = { path = "../../metrics", version = "=1.14.3" } -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.3" } -solana-sdk = { path = "../../sdk", version = "=1.14.3" } +solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.4" } +solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.4" } +solana-metrics = { path = "../../metrics", version = "=1.14.4" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.4" } +solana-sdk = { path = "../../sdk", version = "=1.14.4" } thiserror = "1.0" [dev-dependencies] itertools = "0.10.3" rand = "0.7.0" -solana-logger = { path = "../../logger", version = "=1.14.3" } +solana-logger = { path = "../../logger", version = "=1.14.4" } [build-dependencies] rustc_version = "0.4" diff --git a/programs/zk-token-proof/Cargo.toml b/programs/zk-token-proof/Cargo.toml index 8f98c86b2d73b8..3b135b95e13159 100644 --- a/programs/zk-token-proof/Cargo.toml +++ b/programs/zk-token-proof/Cargo.toml @@ -3,7 +3,7 @@ name = "solana-zk-token-proof-program" description = "Solana Zk Token Proof Program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" -version = "1.14.3" +version = "1.14.4" license = "Apache-2.0" edition = "2021" @@ -12,6 +12,6 @@ bytemuck = { version = "1.11.0", features = ["derive"] } getrandom = { version = "0.1", features = ["dummy"] } num-derive = "0.3" num-traits = "0.2" -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.3" } -solana-sdk = { path = "../../sdk", version = "=1.14.3" } -solana-zk-token-sdk = { path = "../../zk-token-sdk", version = "=1.14.3" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.4" } +solana-sdk = { path = "../../sdk", version = "=1.14.4" } +solana-zk-token-sdk = { path = "../../zk-token-sdk", version = "=1.14.4" } diff --git a/rayon-threadlimit/Cargo.toml b/rayon-threadlimit/Cargo.toml index c2d3942ed25fb8..3367df36f08f4d 100644 --- a/rayon-threadlimit/Cargo.toml +++ b/rayon-threadlimit/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-rayon-threadlimit" -version = "1.14.3" +version = "1.14.4" description = "solana-rayon-threadlimit" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-rayon-threadlimit" diff --git a/rbpf-cli/Cargo.toml b/rbpf-cli/Cargo.toml index ebfb34bdb389dc..915113adfefd21 100644 --- a/rbpf-cli/Cargo.toml +++ b/rbpf-cli/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "rbpf-cli" -version = "1.14.3" +version = "1.14.4" description = "CLI to test and analyze eBPF programs" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/rbpf" @@ -13,8 +13,8 @@ publish = false clap = { version = "3.1.5", features = ["cargo"] } serde = "1.0.138" serde_json = "1.0.81" -solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.3" } -solana-logger = { path = "../logger", version = "=1.14.3" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.3" } -solana-sdk = { path = "../sdk", version = "=1.14.3" } +solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.4" } +solana-logger = { path = "../logger", version = "=1.14.4" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.4" } +solana-sdk = { path = "../sdk", version = "=1.14.4" } solana_rbpf = "=0.2.31" diff --git a/remote-wallet/Cargo.toml b/remote-wallet/Cargo.toml index 47644ced0948e1..f4ec73093037a2 100644 --- a/remote-wallet/Cargo.toml +++ b/remote-wallet/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-remote-wallet" description = "Blockchain, Rebuilt for Scale" -version = "1.14.3" +version = "1.14.4" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -19,7 +19,7 @@ num-traits = { version = "0.2" } parking_lot = "0.12" qstring = "0.7.2" semver = "1.0" -solana-sdk = { path = "../sdk", version = "=1.14.3" } +solana-sdk = { path = "../sdk", version = "=1.14.4" } thiserror = "1.0" uriparse = "0.6.4" diff --git a/rpc-test/Cargo.toml b/rpc-test/Cargo.toml index 072daead2e3858..0056a0bf6b1ac0 100644 --- a/rpc-test/Cargo.toml +++ b/rpc-test/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-rpc-test" -version = "1.14.3" +version = "1.14.4" description = "Solana RPC Test" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -19,17 +19,17 @@ log = "0.4.17" reqwest = { version = "0.11.11", default-features = false, features = ["blocking", "brotli", "deflate", "gzip", "rustls-tls", "json"] } serde = "1.0.138" serde_json = "1.0.81" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.3" } -solana-client = { path = "../client", version = "=1.14.3" } -solana-rpc = { path = "../rpc", version = "=1.14.3" } -solana-sdk = { path = "../sdk", version = "=1.14.3" } -solana-streamer = { path = "../streamer", version = "=1.14.3" } -solana-test-validator = { path = "../test-validator", version = "=1.14.3" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.3" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.4" } +solana-client = { path = "../client", version = "=1.14.4" } +solana-rpc = { path = "../rpc", version = "=1.14.4" } +solana-sdk = { path = "../sdk", version = "=1.14.4" } +solana-streamer = { path = "../streamer", version = "=1.14.4" } +solana-test-validator = { path = "../test-validator", version = "=1.14.4" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.4" } tokio = { version = "~1.14.1", features = ["full"] } [dev-dependencies] -solana-logger = { path = "../logger", version = "=1.14.3" } +solana-logger = { path = "../logger", version = "=1.14.4" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/rpc/Cargo.toml b/rpc/Cargo.toml index 54454f37f3cfe0..6281c7e6b40cd4 100644 --- a/rpc/Cargo.toml +++ b/rpc/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-rpc" -version = "1.14.3" +version = "1.14.4" description = "Solana RPC" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -29,26 +29,26 @@ serde = "1.0.138" serde_derive = "1.0.103" serde_json = "1.0.81" soketto = "0.7" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.3" } -solana-client = { path = "../client", version = "=1.14.3" } -solana-entry = { path = "../entry", version = "=1.14.3" } -solana-faucet = { path = "../faucet", version = "=1.14.3" } -solana-gossip = { path = "../gossip", version = "=1.14.3" } -solana-ledger = { path = "../ledger", version = "=1.14.3" } -solana-measure = { path = "../measure", version = "=1.14.3" } -solana-metrics = { path = "../metrics", version = "=1.14.3" } -solana-perf = { path = "../perf", version = "=1.14.3" } -solana-poh = { path = "../poh", version = "=1.14.3" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.3" } -solana-runtime = { path = "../runtime", version = "=1.14.3" } -solana-sdk = { path = "../sdk", version = "=1.14.3" } -solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.3" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.3" } -solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.3" } -solana-streamer = { path = "../streamer", version = "=1.14.3" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.3" } -solana-version = { path = "../version", version = "=1.14.3" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.3" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.4" } +solana-client = { path = "../client", version = "=1.14.4" } +solana-entry = { path = "../entry", version = "=1.14.4" } +solana-faucet = { path = "../faucet", version = "=1.14.4" } +solana-gossip = { path = "../gossip", version = "=1.14.4" } +solana-ledger = { path = "../ledger", version = "=1.14.4" } +solana-measure = { path = "../measure", version = "=1.14.4" } +solana-metrics = { path = "../metrics", version = "=1.14.4" } +solana-perf = { path = "../perf", version = "=1.14.4" } +solana-poh = { path = "../poh", version = "=1.14.4" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.4" } +solana-runtime = { path = "../runtime", version = "=1.14.4" } +solana-sdk = { path = "../sdk", version = "=1.14.4" } +solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.4" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.4" } +solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.4" } +solana-streamer = { path = "../streamer", version = "=1.14.4" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.4" } +solana-version = { path = "../version", version = "=1.14.4" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.4" } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } spl-token-2022 = { version = "=0.4.2", features = ["no-entrypoint"] } stream-cancel = "0.8.1" @@ -58,9 +58,9 @@ tokio-util = { version = "0.6", features = ["codec", "compat"] } [dev-dependencies] serial_test = "0.8.0" -solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.3" } -solana-net-utils = { path = "../net-utils", version = "=1.14.3" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.3" } +solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.4" } +solana-net-utils = { path = "../net-utils", version = "=1.14.4" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.4" } symlink = "0.1.0" [lib] diff --git a/runtime/Cargo.toml b/runtime/Cargo.toml index 830c8ccc4e96ca..fab7f8ffb4ef0f 100644 --- a/runtime/Cargo.toml +++ b/runtime/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-runtime" -version = "1.14.3" +version = "1.14.4" description = "Solana runtime" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -39,21 +39,21 @@ rayon = "1.5.3" regex = "1.5.6" serde = { version = "1.0.138", features = ["rc"] } serde_derive = "1.0.103" -solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.3" } -solana-bucket-map = { path = "../bucket_map", version = "=1.14.3" } -solana-compute-budget-program = { path = "../programs/compute-budget", version = "=1.14.3" } -solana-config-program = { path = "../programs/config", version = "=1.14.3" } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.3" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.3" } -solana-measure = { path = "../measure", version = "=1.14.3" } -solana-metrics = { path = "../metrics", version = "=1.14.3" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.3" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.3" } -solana-sdk = { path = "../sdk", version = "=1.14.3" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.3" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.3" } -solana-zk-token-proof-program = { path = "../programs/zk-token-proof", version = "=1.14.3" } -solana-zk-token-sdk = { path = "../zk-token-sdk", version = "=1.14.3" } +solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.4" } +solana-bucket-map = { path = "../bucket_map", version = "=1.14.4" } +solana-compute-budget-program = { path = "../programs/compute-budget", version = "=1.14.4" } +solana-config-program = { path = "../programs/config", version = "=1.14.4" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.4" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.4" } +solana-measure = { path = "../measure", version = "=1.14.4" } +solana-metrics = { path = "../metrics", version = "=1.14.4" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.4" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.4" } +solana-sdk = { path = "../sdk", version = "=1.14.4" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.4" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.4" } +solana-zk-token-proof-program = { path = "../programs/zk-token-proof", version = "=1.14.4" } +solana-zk-token-sdk = { path = "../zk-token-sdk", version = "=1.14.4" } strum = { version = "0.24", features = ["derive"] } strum_macros = "0.24" symlink = "0.1.0" @@ -71,7 +71,7 @@ assert_matches = "1.5.0" ed25519-dalek = "=1.0.1" libsecp256k1 = "0.6.0" rand_chacha = "0.2.2" -solana-logger = { path = "../logger", version = "=1.14.3" } +solana-logger = { path = "../logger", version = "=1.14.4" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/runtime/store-tool/Cargo.toml b/runtime/store-tool/Cargo.toml index efa4fcfa63dfb8..2cedba458949b6 100644 --- a/runtime/store-tool/Cargo.toml +++ b/runtime/store-tool/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-store-tool" description = "Tool to inspect append vecs" -version = "1.14.3" +version = "1.14.4" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -12,9 +12,9 @@ publish = false [dependencies] clap = "2.33.1" log = { version = "0.4.17" } -solana-logger = { path = "../../logger", version = "=1.14.3" } -solana-runtime = { path = "..", version = "=1.14.3" } -solana-version = { path = "../../version", version = "=1.14.3" } +solana-logger = { path = "../../logger", version = "=1.14.4" } +solana-runtime = { path = "..", version = "=1.14.4" } +solana-version = { path = "../../version", version = "=1.14.4" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/sdk/Cargo.toml b/sdk/Cargo.toml index bcde802d6eb9bb..1c0cba4d8fa56b 100644 --- a/sdk/Cargo.toml +++ b/sdk/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-sdk" -version = "1.14.3" +version = "1.14.4" description = "Solana SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -71,11 +71,11 @@ serde_derive = "1.0.103" serde_json = { version = "1.0.81", optional = true } sha2 = "0.10.2" sha3 = { version = "0.10.1", optional = true } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.3" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.3" } -solana-logger = { path = "../logger", version = "=1.14.3", optional = true } -solana-program = { path = "program", version = "=1.14.3" } -solana-sdk-macro = { path = "macro", version = "=1.14.3" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.4" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.4" } +solana-logger = { path = "../logger", version = "=1.14.4", optional = true } +solana-program = { path = "program", version = "=1.14.4" } +solana-sdk-macro = { path = "macro", version = "=1.14.4" } thiserror = "1.0" uriparse = "0.6.4" wasm-bindgen = "0.2" diff --git a/sdk/cargo-build-bpf/Cargo.toml b/sdk/cargo-build-bpf/Cargo.toml index c883bff088afc3..a1cc101807ee55 100644 --- a/sdk/cargo-build-bpf/Cargo.toml +++ b/sdk/cargo-build-bpf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-cargo-build-bpf" -version = "1.14.3" +version = "1.14.4" description = "Compile a local package and all of its dependencies using the Solana SBF SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,7 +12,7 @@ publish = false [dependencies] cargo_metadata = "0.15.0" clap = { version = "3.1.5", features = ["cargo", "env"] } -solana-sdk = { path = "..", version = "=1.14.3" } +solana-sdk = { path = "..", version = "=1.14.4" } [features] program = [] diff --git a/sdk/cargo-build-sbf/Cargo.toml b/sdk/cargo-build-sbf/Cargo.toml index 1647fc9d6c74c2..6bc9cd90277f1b 100644 --- a/sdk/cargo-build-sbf/Cargo.toml +++ b/sdk/cargo-build-sbf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-cargo-build-sbf" -version = "1.14.3" +version = "1.14.4" description = "Compile a local package and all of its dependencies using the Solana SBF SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -15,9 +15,9 @@ cargo_metadata = "0.15.0" clap = { version = "3.1.5", features = ["cargo", "env"] } log = { version = "0.4.14", features = ["std"] } regex = "1.5.6" -solana-download-utils = { path = "../../download-utils", version = "=1.14.3" } -solana-logger = { path = "../../logger", version = "=1.14.3" } -solana-sdk = { path = "..", version = "=1.14.3" } +solana-download-utils = { path = "../../download-utils", version = "=1.14.4" } +solana-logger = { path = "../../logger", version = "=1.14.4" } +solana-sdk = { path = "..", version = "=1.14.4" } tar = "0.4.38" [dev-dependencies] diff --git a/sdk/cargo-build-sbf/tests/crates/fail/Cargo.toml b/sdk/cargo-build-sbf/tests/crates/fail/Cargo.toml index f269612feee51f..d0ef954995889f 100644 --- a/sdk/cargo-build-sbf/tests/crates/fail/Cargo.toml +++ b/sdk/cargo-build-sbf/tests/crates/fail/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "fail" -version = "1.14.3" +version = "1.14.4" description = "Solana SBF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ edition = "2021" publish = false [dependencies] -solana-program = { path = "../../../../program", version = "=1.14.3" } +solana-program = { path = "../../../../program", version = "=1.14.4" } [lib] crate-type = ["cdylib"] diff --git a/sdk/cargo-build-sbf/tests/crates/noop/Cargo.toml b/sdk/cargo-build-sbf/tests/crates/noop/Cargo.toml index db942347773d6f..a71bfef8589e57 100644 --- a/sdk/cargo-build-sbf/tests/crates/noop/Cargo.toml +++ b/sdk/cargo-build-sbf/tests/crates/noop/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "noop" -version = "1.14.3" +version = "1.14.4" description = "Solana SBF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ edition = "2021" publish = false [dependencies] -solana-program = { path = "../../../../program", version = "=1.14.3" } +solana-program = { path = "../../../../program", version = "=1.14.4" } [lib] crate-type = ["cdylib"] diff --git a/sdk/cargo-test-bpf/Cargo.toml b/sdk/cargo-test-bpf/Cargo.toml index 4625594649df9e..66bd42721e8177 100644 --- a/sdk/cargo-test-bpf/Cargo.toml +++ b/sdk/cargo-test-bpf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-cargo-test-bpf" -version = "1.14.3" +version = "1.14.4" description = "Execute all unit and integration tests after building with the Solana SBF SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/sdk/cargo-test-sbf/Cargo.toml b/sdk/cargo-test-sbf/Cargo.toml index da371b07035751..55a7918159fdb0 100644 --- a/sdk/cargo-test-sbf/Cargo.toml +++ b/sdk/cargo-test-sbf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-cargo-test-sbf" -version = "1.14.3" +version = "1.14.4" description = "Execute all unit and integration tests after building with the Solana SBF SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/sdk/gen-headers/Cargo.toml b/sdk/gen-headers/Cargo.toml index d5edc1c40e4504..d10fc2ab3a6f96 100644 --- a/sdk/gen-headers/Cargo.toml +++ b/sdk/gen-headers/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "gen-headers" -version = "1.14.3" +version = "1.14.4" edition = "2021" license = "Apache-2.0" publish = false diff --git a/sdk/macro/Cargo.toml b/sdk/macro/Cargo.toml index 56c2ab90ad8f76..7e4fb801155be1 100644 --- a/sdk/macro/Cargo.toml +++ b/sdk/macro/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-sdk-macro" -version = "1.14.3" +version = "1.14.4" description = "Solana SDK Macro" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/sdk/program/Cargo.toml b/sdk/program/Cargo.toml index 6635171648282f..7691c6b81c288e 100644 --- a/sdk/program/Cargo.toml +++ b/sdk/program/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-program" -version = "1.14.3" +version = "1.14.4" description = "Solana Program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -31,9 +31,9 @@ serde_derive = "1.0" serde_json = "1.0" sha2 = "0.10.0" sha3 = "0.10.0" -solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.3" } -solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.3" } -solana-sdk-macro = { path = "../macro", version = "=1.14.3" } +solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.4" } +solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.4" } +solana-sdk-macro = { path = "../macro", version = "=1.14.4" } thiserror = "1.0" [target.'cfg(not(target_os = "solana"))'.dependencies] @@ -50,7 +50,7 @@ wasm-bindgen = "0.2" zeroize = { version = "1.3", default-features = true, features = ["zeroize_derive"] } [target.'cfg(not(target_os = "solana"))'.dev-dependencies] -solana-logger = { path = "../../logger", version = "=1.14.3" } +solana-logger = { path = "../../logger", version = "=1.14.4" } [target.'cfg(target_arch = "wasm32")'.dependencies] console_error_panic_hook = "0.1.7" diff --git a/send-transaction-service/Cargo.toml b/send-transaction-service/Cargo.toml index c50bcbdee49a08..6dc5a783fc761a 100644 --- a/send-transaction-service/Cargo.toml +++ b/send-transaction-service/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-send-transaction-service" -version = "1.14.3" +version = "1.14.4" description = "Solana send transaction service" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,14 +12,14 @@ edition = "2021" [dependencies] crossbeam-channel = "0.5" log = "0.4.17" -solana-client = { path = "../client", version = "=1.14.3" } -solana-measure = { path = "../measure", version = "=1.14.3" } -solana-metrics = { path = "../metrics", version = "=1.14.3" } -solana-runtime = { path = "../runtime", version = "=1.14.3" } -solana-sdk = { path = "../sdk", version = "=1.14.3" } +solana-client = { path = "../client", version = "=1.14.4" } +solana-measure = { path = "../measure", version = "=1.14.4" } +solana-metrics = { path = "../metrics", version = "=1.14.4" } +solana-runtime = { path = "../runtime", version = "=1.14.4" } +solana-sdk = { path = "../sdk", version = "=1.14.4" } [dev-dependencies] -solana-logger = { path = "../logger", version = "=1.14.3" } +solana-logger = { path = "../logger", version = "=1.14.4" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/stake-accounts/Cargo.toml b/stake-accounts/Cargo.toml index 3cd962b5972f84..ade7c852aada2b 100644 --- a/stake-accounts/Cargo.toml +++ b/stake-accounts/Cargo.toml @@ -3,7 +3,7 @@ name = "solana-stake-accounts" description = "Blockchain, Rebuilt for Scale" authors = ["Solana Maintainers "] edition = "2021" -version = "1.14.3" +version = "1.14.4" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -11,15 +11,15 @@ documentation = "https://docs.rs/solana-stake-accounts" [dependencies] clap = "2.33.1" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.3" } -solana-cli-config = { path = "../cli-config", version = "=1.14.3" } -solana-client = { path = "../client", version = "=1.14.3" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.3" } -solana-sdk = { path = "../sdk", version = "=1.14.3" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.3" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.4" } +solana-cli-config = { path = "../cli-config", version = "=1.14.4" } +solana-client = { path = "../client", version = "=1.14.4" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.4" } +solana-sdk = { path = "../sdk", version = "=1.14.4" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.4" } [dev-dependencies] -solana-runtime = { path = "../runtime", version = "=1.14.3" } +solana-runtime = { path = "../runtime", version = "=1.14.4" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/storage-bigtable/Cargo.toml b/storage-bigtable/Cargo.toml index ce917ac8759f20..a16f09c38facf6 100644 --- a/storage-bigtable/Cargo.toml +++ b/storage-bigtable/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-storage-bigtable" -version = "1.14.3" +version = "1.14.4" description = "Solana Storage BigTable" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -27,10 +27,10 @@ prost-types = "0.11.0" serde = "1.0.138" serde_derive = "1.0.103" smpl_jwt = "0.7.1" -solana-metrics = { path = "../metrics", version = "=1.14.3" } -solana-sdk = { path = "../sdk", version = "=1.14.3" } -solana-storage-proto = { path = "../storage-proto", version = "=1.14.3" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.3" } +solana-metrics = { path = "../metrics", version = "=1.14.4" } +solana-sdk = { path = "../sdk", version = "=1.14.4" } +solana-storage-proto = { path = "../storage-proto", version = "=1.14.4" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.4" } thiserror = "1.0" tokio = "1" tonic = { version = "0.8.0", features = ["tls", "transport"] } diff --git a/storage-bigtable/build-proto/Cargo.lock b/storage-bigtable/build-proto/Cargo.lock index 2a2377fcd87859..69c097bd246905 100644 --- a/storage-bigtable/build-proto/Cargo.lock +++ b/storage-bigtable/build-proto/Cargo.lock @@ -219,7 +219,7 @@ dependencies = [ [[package]] name = "proto" -version = "1.14.3" +version = "1.14.4" dependencies = [ "protobuf-src", "tonic-build", diff --git a/storage-bigtable/build-proto/Cargo.toml b/storage-bigtable/build-proto/Cargo.toml index 3d7da4ee36c827..09d871c4ec3727 100644 --- a/storage-bigtable/build-proto/Cargo.toml +++ b/storage-bigtable/build-proto/Cargo.toml @@ -7,7 +7,7 @@ license = "Apache-2.0" name = "proto" publish = false repository = "https://github.com/solana-labs/solana" -version = "1.14.3" +version = "1.14.4" [workspace] diff --git a/storage-proto/Cargo.toml b/storage-proto/Cargo.toml index 99673e952c35fb..496cdc18606921 100644 --- a/storage-proto/Cargo.toml +++ b/storage-proto/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-storage-proto" -version = "1.14.3" +version = "1.14.4" description = "Solana Storage Protobuf Definitions" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,9 +14,9 @@ bincode = "1.3.3" bs58 = "0.4.0" prost = "0.11.0" serde = "1.0.138" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.3" } -solana-sdk = { path = "../sdk", version = "=1.14.3" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.3" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.4" } +solana-sdk = { path = "../sdk", version = "=1.14.4" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.4" } [dev-dependencies] enum-iterator = "0.8.1" diff --git a/streamer/Cargo.toml b/streamer/Cargo.toml index e471f98e199eb0..a54999eea244b2 100644 --- a/streamer/Cargo.toml +++ b/streamer/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-streamer" -version = "1.14.3" +version = "1.14.4" description = "Solana Streamer" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -25,15 +25,15 @@ quinn = "0.8.3" rand = "0.7.0" rcgen = "0.9.2" rustls = { version = "0.20.6", features = ["dangerous_configuration"] } -solana-metrics = { path = "../metrics", version = "=1.14.3" } -solana-perf = { path = "../perf", version = "=1.14.3" } -solana-sdk = { path = "../sdk", version = "=1.14.3" } +solana-metrics = { path = "../metrics", version = "=1.14.4" } +solana-perf = { path = "../perf", version = "=1.14.4" } +solana-sdk = { path = "../sdk", version = "=1.14.4" } thiserror = "1.0" tokio = { version = "1", features = ["full"] } x509-parser = "0.14.0" [dev-dependencies] -solana-logger = { path = "../logger", version = "=1.14.3" } +solana-logger = { path = "../logger", version = "=1.14.4" } [lib] crate-type = ["lib"] diff --git a/sys-tuner/Cargo.toml b/sys-tuner/Cargo.toml index 159295078b3597..5d37e3586ef76a 100644 --- a/sys-tuner/Cargo.toml +++ b/sys-tuner/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-sys-tuner" description = "The solana cluster system tuner daemon" -version = "1.14.3" +version = "1.14.4" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,8 +14,8 @@ publish = true clap = "2.33.1" libc = "0.2.126" log = "0.4.17" -solana-logger = { path = "../logger", version = "=1.14.3" } -solana-version = { path = "../version", version = "=1.14.3" } +solana-logger = { path = "../logger", version = "=1.14.4" } +solana-version = { path = "../version", version = "=1.14.4" } [target."cfg(unix)".dependencies] unix_socket2 = "0.5.4" diff --git a/test-validator/Cargo.toml b/test-validator/Cargo.toml index 311bbffad4f9da..f703481cfaf120 100644 --- a/test-validator/Cargo.toml +++ b/test-validator/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "solana-test-validator" description = "Blockchain, Rebuilt for Scale" -version = "1.14.3" +version = "1.14.4" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-test-validator" readme = "../README.md" @@ -15,19 +15,19 @@ base64 = "0.13.0" log = "0.4.17" serde_derive = "1.0.103" serde_json = "1.0.81" -solana-cli-output = { path = "../cli-output", version = "=1.14.3" } -solana-client = { path = "../client", version = "=1.14.3" } -solana-core = { path = "../core", version = "=1.14.3" } -solana-gossip = { path = "../gossip", version = "=1.14.3" } -solana-ledger = { path = "../ledger", version = "=1.14.3" } -solana-logger = { path = "../logger", version = "=1.14.3" } -solana-net-utils = { path = "../net-utils", version = "=1.14.3" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.3" } -solana-program-test = { path = "../program-test", version = "=1.14.3" } -solana-rpc = { path = "../rpc", version = "=1.14.3" } -solana-runtime = { path = "../runtime", version = "=1.14.3" } -solana-sdk = { path = "../sdk", version = "=1.14.3" } -solana-streamer = { path = "../streamer", version = "=1.14.3" } +solana-cli-output = { path = "../cli-output", version = "=1.14.4" } +solana-client = { path = "../client", version = "=1.14.4" } +solana-core = { path = "../core", version = "=1.14.4" } +solana-gossip = { path = "../gossip", version = "=1.14.4" } +solana-ledger = { path = "../ledger", version = "=1.14.4" } +solana-logger = { path = "../logger", version = "=1.14.4" } +solana-net-utils = { path = "../net-utils", version = "=1.14.4" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.4" } +solana-program-test = { path = "../program-test", version = "=1.14.4" } +solana-rpc = { path = "../rpc", version = "=1.14.4" } +solana-runtime = { path = "../runtime", version = "=1.14.4" } +solana-sdk = { path = "../sdk", version = "=1.14.4" } +solana-streamer = { path = "../streamer", version = "=1.14.4" } tokio = { version = "1", features = ["full"] } [package.metadata.docs.rs] diff --git a/tokens/Cargo.toml b/tokens/Cargo.toml index 58762f6d1bab45..f9ecb46d1e755f 100644 --- a/tokens/Cargo.toml +++ b/tokens/Cargo.toml @@ -3,7 +3,7 @@ name = "solana-tokens" description = "Blockchain, Rebuilt for Scale" authors = ["Solana Maintainers "] edition = "2021" -version = "1.14.3" +version = "1.14.4" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -19,14 +19,14 @@ indexmap = "1.9.1" indicatif = "0.16.2" pickledb = "0.4.1" serde = { version = "1.0", features = ["derive"] } -solana-account-decoder = { path = "../account-decoder", version = "=1.14.3" } -solana-clap-utils = { path = "../clap-utils", version = "=1.14.3" } -solana-cli-config = { path = "../cli-config", version = "=1.14.3" } -solana-client = { path = "../client", version = "=1.14.3" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.3" } -solana-sdk = { path = "../sdk", version = "=1.14.3" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.3" } -solana-version = { path = "../version", version = "=1.14.3" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.4" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.4" } +solana-cli-config = { path = "../cli-config", version = "=1.14.4" } +solana-client = { path = "../client", version = "=1.14.4" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.4" } +solana-sdk = { path = "../sdk", version = "=1.14.4" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.4" } +solana-version = { path = "../version", version = "=1.14.4" } spl-associated-token-account = { version = "=1.1.1" } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } tempfile = "3.3.0" @@ -34,6 +34,6 @@ thiserror = "1.0" [dev-dependencies] bincode = "1.3.3" -solana-logger = { path = "../logger", version = "=1.14.3" } -solana-streamer = { path = "../streamer", version = "=1.14.3" } -solana-test-validator = { path = "../test-validator", version = "=1.14.3" } +solana-logger = { path = "../logger", version = "=1.14.4" } +solana-streamer = { path = "../streamer", version = "=1.14.4" } +solana-test-validator = { path = "../test-validator", version = "=1.14.4" } diff --git a/transaction-dos/Cargo.toml b/transaction-dos/Cargo.toml index 84dc2f5a79fae5..d02be32a146e32 100644 --- a/transaction-dos/Cargo.toml +++ b/transaction-dos/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-transaction-dos" -version = "1.14.3" +version = "1.14.4" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,23 +14,23 @@ clap = "2.33.1" log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.3" } -solana-cli = { path = "../cli", version = "=1.14.3" } -solana-client = { path = "../client", version = "=1.14.3" } -solana-core = { path = "../core", version = "=1.14.3" } -solana-faucet = { path = "../faucet", version = "=1.14.3" } -solana-gossip = { path = "../gossip", version = "=1.14.3" } -solana-logger = { path = "../logger", version = "=1.14.3" } -solana-measure = { path = "../measure", version = "=1.14.3" } -solana-net-utils = { path = "../net-utils", version = "=1.14.3" } -solana-runtime = { path = "../runtime", version = "=1.14.3" } -solana-sdk = { path = "../sdk", version = "=1.14.3" } -solana-streamer = { path = "../streamer", version = "=1.14.3" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.3" } -solana-version = { path = "../version", version = "=1.14.3" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.4" } +solana-cli = { path = "../cli", version = "=1.14.4" } +solana-client = { path = "../client", version = "=1.14.4" } +solana-core = { path = "../core", version = "=1.14.4" } +solana-faucet = { path = "../faucet", version = "=1.14.4" } +solana-gossip = { path = "../gossip", version = "=1.14.4" } +solana-logger = { path = "../logger", version = "=1.14.4" } +solana-measure = { path = "../measure", version = "=1.14.4" } +solana-net-utils = { path = "../net-utils", version = "=1.14.4" } +solana-runtime = { path = "../runtime", version = "=1.14.4" } +solana-sdk = { path = "../sdk", version = "=1.14.4" } +solana-streamer = { path = "../streamer", version = "=1.14.4" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.4" } +solana-version = { path = "../version", version = "=1.14.4" } [dev-dependencies] -solana-local-cluster = { path = "../local-cluster", version = "=1.14.3" } +solana-local-cluster = { path = "../local-cluster", version = "=1.14.4" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/transaction-status/Cargo.toml b/transaction-status/Cargo.toml index 36291299cef7a5..0c091896887133 100644 --- a/transaction-status/Cargo.toml +++ b/transaction-status/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-transaction-status" -version = "1.14.3" +version = "1.14.4" description = "Solana transaction status types" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -20,11 +20,11 @@ log = "0.4.17" serde = "1.0.138" serde_derive = "1.0.103" serde_json = "1.0.81" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.3" } -solana-measure = { path = "../measure", version = "=1.14.3" } -solana-metrics = { path = "../metrics", version = "=1.14.3" } -solana-sdk = { path = "../sdk", version = "=1.14.3" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.3" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.4" } +solana-measure = { path = "../measure", version = "=1.14.4" } +solana-metrics = { path = "../metrics", version = "=1.14.4" } +solana-sdk = { path = "../sdk", version = "=1.14.4" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.4" } spl-associated-token-account = { version = "=1.1.1", features = ["no-entrypoint"] } spl-memo = { version = "=3.0.1", features = ["no-entrypoint"] } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } diff --git a/upload-perf/Cargo.toml b/upload-perf/Cargo.toml index 5799a1eaf58289..53cbedbf33263e 100644 --- a/upload-perf/Cargo.toml +++ b/upload-perf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-upload-perf" -version = "1.14.3" +version = "1.14.4" description = "Metrics Upload Utility" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -11,7 +11,7 @@ publish = false [dependencies] serde_json = "1.0.81" -solana-metrics = { path = "../metrics", version = "=1.14.3" } +solana-metrics = { path = "../metrics", version = "=1.14.4" } [[bin]] name = "solana-upload-perf" diff --git a/validator/Cargo.toml b/validator/Cargo.toml index af0b7169a1c78a..677bc2fac87dd8 100644 --- a/validator/Cargo.toml +++ b/validator/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-validator" description = "Blockchain, Rebuilt for Scale" -version = "1.14.3" +version = "1.14.4" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -28,30 +28,30 @@ num_cpus = "1.13.1" rand = "0.7.0" serde = "1.0.138" serde_json = "1.0.81" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.3" } -solana-cli-config = { path = "../cli-config", version = "=1.14.3" } -solana-client = { path = "../client", version = "=1.14.3" } -solana-core = { path = "../core", version = "=1.14.3" } -solana-download-utils = { path = "../download-utils", version = "=1.14.3" } -solana-entry = { path = "../entry", version = "=1.14.3" } -solana-faucet = { path = "../faucet", version = "=1.14.3" } -solana-genesis-utils = { path = "../genesis-utils", version = "=1.14.3" } -solana-gossip = { path = "../gossip", version = "=1.14.3" } -solana-ledger = { path = "../ledger", version = "=1.14.3" } -solana-logger = { path = "../logger", version = "=1.14.3" } -solana-metrics = { path = "../metrics", version = "=1.14.3" } -solana-net-utils = { path = "../net-utils", version = "=1.14.3" } -solana-perf = { path = "../perf", version = "=1.14.3" } -solana-poh = { path = "../poh", version = "=1.14.3" } -solana-rpc = { path = "../rpc", version = "=1.14.3" } -solana-runtime = { path = "../runtime", version = "=1.14.3" } -solana-sdk = { path = "../sdk", version = "=1.14.3" } -solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.3" } -solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.3" } -solana-streamer = { path = "../streamer", version = "=1.14.3" } -solana-test-validator = { path = "../test-validator", version = "=1.14.3" } -solana-version = { path = "../version", version = "=1.14.3" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.3" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.4" } +solana-cli-config = { path = "../cli-config", version = "=1.14.4" } +solana-client = { path = "../client", version = "=1.14.4" } +solana-core = { path = "../core", version = "=1.14.4" } +solana-download-utils = { path = "../download-utils", version = "=1.14.4" } +solana-entry = { path = "../entry", version = "=1.14.4" } +solana-faucet = { path = "../faucet", version = "=1.14.4" } +solana-genesis-utils = { path = "../genesis-utils", version = "=1.14.4" } +solana-gossip = { path = "../gossip", version = "=1.14.4" } +solana-ledger = { path = "../ledger", version = "=1.14.4" } +solana-logger = { path = "../logger", version = "=1.14.4" } +solana-metrics = { path = "../metrics", version = "=1.14.4" } +solana-net-utils = { path = "../net-utils", version = "=1.14.4" } +solana-perf = { path = "../perf", version = "=1.14.4" } +solana-poh = { path = "../poh", version = "=1.14.4" } +solana-rpc = { path = "../rpc", version = "=1.14.4" } +solana-runtime = { path = "../runtime", version = "=1.14.4" } +solana-sdk = { path = "../sdk", version = "=1.14.4" } +solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.4" } +solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.4" } +solana-streamer = { path = "../streamer", version = "=1.14.4" } +solana-test-validator = { path = "../test-validator", version = "=1.14.4" } +solana-version = { path = "../version", version = "=1.14.4" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.4" } symlink = "0.1.0" [target.'cfg(not(target_env = "msvc"))'.dependencies] diff --git a/version/Cargo.toml b/version/Cargo.toml index 440dc121e5818a..c8a727ef99abca 100644 --- a/version/Cargo.toml +++ b/version/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-version" -version = "1.14.3" +version = "1.14.4" description = "Solana Version" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,9 +14,9 @@ log = "0.4.17" semver = "1.0.10" serde = "1.0.138" serde_derive = "1.0.103" -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.3" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.3" } -solana-sdk = { path = "../sdk", version = "=1.14.3" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.4" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.4" } +solana-sdk = { path = "../sdk", version = "=1.14.4" } [lib] name = "solana_version" diff --git a/watchtower/Cargo.toml b/watchtower/Cargo.toml index bc8d1b769033bc..3062bbc285956c 100644 --- a/watchtower/Cargo.toml +++ b/watchtower/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-watchtower" description = "Blockchain, Rebuilt for Scale" -version = "1.14.3" +version = "1.14.4" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -13,15 +13,15 @@ documentation = "https://docs.rs/solana-watchtower" clap = "2.33.1" humantime = "2.0.1" log = "0.4.17" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.3" } -solana-cli-config = { path = "../cli-config", version = "=1.14.3" } -solana-cli-output = { path = "../cli-output", version = "=1.14.3" } -solana-client = { path = "../client", version = "=1.14.3" } -solana-logger = { path = "../logger", version = "=1.14.3" } -solana-metrics = { path = "../metrics", version = "=1.14.3" } -solana-notifier = { path = "../notifier", version = "=1.14.3" } -solana-sdk = { path = "../sdk", version = "=1.14.3" } -solana-version = { path = "../version", version = "=1.14.3" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.4" } +solana-cli-config = { path = "../cli-config", version = "=1.14.4" } +solana-cli-output = { path = "../cli-output", version = "=1.14.4" } +solana-client = { path = "../client", version = "=1.14.4" } +solana-logger = { path = "../logger", version = "=1.14.4" } +solana-metrics = { path = "../metrics", version = "=1.14.4" } +solana-notifier = { path = "../notifier", version = "=1.14.4" } +solana-sdk = { path = "../sdk", version = "=1.14.4" } +solana-version = { path = "../version", version = "=1.14.4" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/zk-token-sdk/Cargo.toml b/zk-token-sdk/Cargo.toml index 594e12d2bce792..59522e6837584e 100644 --- a/zk-token-sdk/Cargo.toml +++ b/zk-token-sdk/Cargo.toml @@ -3,7 +3,7 @@ name = "solana-zk-token-sdk" description = "Solana Zk Token SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" -version = "1.14.3" +version = "1.14.4" license = "Apache-2.0" edition = "2021" @@ -12,7 +12,7 @@ base64 = "0.13" bytemuck = { version = "1.11.0", features = ["derive"] } num-derive = "0.3" num-traits = "0.2" -solana-program = { path = "../sdk/program", version = "=1.14.3" } +solana-program = { path = "../sdk/program", version = "=1.14.4" } [target.'cfg(not(target_os = "solana"))'.dependencies] aes-gcm-siv = "0.10.3" @@ -29,7 +29,7 @@ rand = "0.7" serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" sha3 = "0.9" -solana-sdk = { path = "../sdk", version = "=1.14.3" } +solana-sdk = { path = "../sdk", version = "=1.14.4" } subtle = "2" thiserror = "1.0" zeroize = { version = "1.3", default-features = false, features = ["zeroize_derive"] } From bbf7ddeb4f1d6b72a0552b15237e0cd973434d92 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Tue, 27 Sep 2022 04:20:51 +0000 Subject: [PATCH 158/465] [docs] versioned transactions and lookup tables (backport #28060) (#28095) [docs] versioned transactions and lookup tables (#28060) * feat: added versioned transaction and ALT docs * fix: relocated links and fixed sidebar parser (cherry picked from commit c893f925084058aad0f71c7938f995e0a0d99152) Co-authored-by: Nick Frostbutter <75431177+nickfrosty@users.noreply.github.com> --- docs/layouts/CardLayout.js | 30 ++-- docs/sidebars.js | 20 ++- docs/src/developing/clients/jsonrpc-api.md | 2 +- docs/src/developing/lookup-tables.md | 151 ++++++++++++++++++ docs/src/developing/versioned-transactions.md | 150 +++++++++++++++++ 5 files changed, 337 insertions(+), 16 deletions(-) create mode 100644 docs/src/developing/lookup-tables.md create mode 100644 docs/src/developing/versioned-transactions.md diff --git a/docs/layouts/CardLayout.js b/docs/layouts/CardLayout.js index 6c95b218b654d9..85f8e72750114b 100644 --- a/docs/layouts/CardLayout.js +++ b/docs/layouts/CardLayout.js @@ -12,18 +12,10 @@ function CardLayout({ path = "", }) { // load the sidebar item from the master `sidebars.js` file - const sidebarItems = (sidebarKey && sidebar?.[sidebarKey]) || []; + let sidebarItems = (sidebarKey && sidebar?.[sidebarKey]) || []; // process each of the loaded sidebar items for formatting - if (sidebarItems?.length) { - Object.keys(sidebarItems).forEach((key) => { - if (sidebarItems[key]?.type?.toLowerCase() === "category") { - for (let i = 0; i < sidebarItems[key]?.items?.length; i++) - sidebarItems[key].items[i] = formatter(sidebarItems[key].items[i]); - sidebarItems[key].collapsed = true; - } else sidebarItems[key] = formatter(sidebarItems[key]); - }); - } + if (sidebarItems?.length) sidebarItems = parseSidebar(sidebarItems); // return the page layout, ready to go return ( @@ -52,6 +44,18 @@ const computeLabel = (label) => { return label && label; }; +/* + Recursively parse the sidebar +*/ +const parseSidebar = (sidebarItems) => { + Object.keys(sidebarItems).forEach((key) => { + if (sidebarItems[key]?.type?.toLowerCase() === "category") { + sidebarItems[key].items = parseSidebar(sidebarItems[key].items); + } else sidebarItems[key] = formatter(sidebarItems[key]); + }); + return sidebarItems; +}; + /* Parser to format a sidebar item to be compatible with the `DocSidebar` component */ @@ -76,9 +80,9 @@ const formatter = (item) => { // fix for local routing that does not specify starting at the site root if ( !( - item?.href.startsWith("/") || - item?.href.startsWith("http:") || - item?.href.startsWith("https") + item?.href?.startsWith("/") || + item?.href?.startsWith("http:") || + item?.href?.startsWith("https") ) ) item.href = `/${item?.href}`; diff --git a/docs/sidebars.js b/docs/sidebars.js index f60e3c9a61e4b0..0fa270088bf727 100644 --- a/docs/sidebars.js +++ b/docs/sidebars.js @@ -138,9 +138,25 @@ module.exports = { label: "Accounts", }, { - type: "doc", - id: "developing/programming-model/transactions", + type: "category", label: "Transactions", + items: [ + { + type: "doc", + id: "developing/programming-model/transactions", + label: "Overview", + }, + { + type: "doc", + id: "developing/versioned-transactions", + label: "Versioned Transactions", + }, + { + type: "doc", + id: "developing/lookup-tables", + label: "Address Lookup Tables", + }, + ], }, { type: "doc", diff --git a/docs/src/developing/clients/jsonrpc-api.md b/docs/src/developing/clients/jsonrpc-api.md index 90972467510d89..098c8f2947589b 100644 --- a/docs/src/developing/clients/jsonrpc-api.md +++ b/docs/src/developing/clients/jsonrpc-api.md @@ -469,7 +469,7 @@ Request: ```bash curl http://localhost:8899 -X POST -H "Content-Type: application/json" -d ' - {"jsonrpc": "2.0","id":1,"method":"getBlock","params":[430, {"encoding": "json","transactionDetails":"full","rewards":false}]} + {"jsonrpc": "2.0","id":1,"method":"getBlock","params":[430, {"encoding": "json","maxSupportedTransactionVersion":0,"transactionDetails":"full","rewards":false}]} ' ``` diff --git a/docs/src/developing/lookup-tables.md b/docs/src/developing/lookup-tables.md new file mode 100644 index 00000000000000..b0c44d9c10cc52 --- /dev/null +++ b/docs/src/developing/lookup-tables.md @@ -0,0 +1,151 @@ +--- +title: Address Lookup Tables +description: "" +keywords: "" +--- + +Address Lookup Tables, commonly referred to as "_lookup tables_" or "_ALTs_" for short, allow developers to create a collection of related addresses to efficiently load more addresses in a single transaction. + +Since each transaction on the Solana blockchain requires a listing of every address that is interacted with as part of the transaction, this listing would be effectively be capped at 32 address per transaction. With the help of [Address Lookup Tables](./lookup-tables.md), a transaction would be now be able to raise that limit to 256 addresses per transaction. + +## Compressing on chain addresses + +After all the desired address have been stored on chain in an Address Lookup Table, each address can be referenced inside a transaction by its 1-byte index within the table (instead of their full 32-byte address). This lookup method effectively "_compresses_" a 32-byte address into a 1-byte index value. + +This "_compression_" enables storing up to 256 address in a single lookup table for use inside any given transaction. + +## Versioned Transactions + +To utilize an Address Lookup Table inside a transaction, developers must use v0 transactions that were introduced with the new [Versioned Transaction format](./versioned-transactions.md). + +## How to create an address lookup table + +Creating a new lookup table with the `@solana/web3.js` library is similar to the older `legacy` transactions, but with some differences. + +Using the `@solana/web3.js` library, you can use the [`createLookupTable`](https://solana-labs.github.io/solana-web3.js/classes/AddressLookupTableProgram.html#createLookupTable) function to construct the instruction needed to create a new lookup table, as well as determine its address: + +```js +const web3 = require("@solana/web3.js"); + +// connect to a cluster and get the current `slot` +const connection = new web3.Connection(web3.clusterApiUrl("devnet")); +const slot = await connection.getSlot(); + +// Assumption: +// `payer` is a valid `Keypair` with enough SOL to pay for the execution + +const [lookupTableInst, lookupTableAddress] = + web3.AddressLookupTableProgram.createLookupTable({ + authority: payer.publicKey, + payer: payer.publicKey, + recentSlot: slot, + }); + +console.log("lookup table address:", lookupTableAddress.toBase58()); + +// To create the Address Lookup Table on chain: +// send the `lookupTableInst` instruction in a transaction +``` + +> NOTE: +> Address lookup tables can be **created** with either a `v0` transaction or a `legacy` transaction. But the Solana runtime can only retrieve and handle the additional addresses within a lookup table while using [v0 Versioned Transactions](./versioned-transactions.md#current-transaction-versions). + +## Add addresses to a lookup table + +Adding addresses to a lookup table is known as "_extending_". Using the the `@solana/web3.js` library, you can create a new _extend_ instruction using the [`extendLookupTable`](https://solana-labs.github.io/solana-web3.js/classes/AddressLookupTableProgram.html#extendLookupTable) method: + +```js +// add addresses to the `lookupTableAddress` table via an `extend` instruction +const extendInstruction = web3.AddressLookupTableProgram.extendLookupTable({ + payer: payer.publicKey, + authority: payer.publicKey, + lookupTable: lookupTableAddress, + addresses: [ + payer.publicKey, + web3.SystemProgram.programId, + // list more `publicKey` addresses here + ], +}); + +// Send this `extendInstruction` in a transaction to the cluster +// to insert the listing of `addresses` into your lookup table with address `lookupTableAddress` +``` + +> NOTE: +> Due to the same memory limits of `legacy` transactions, any transaction used to _extend_ an Address Lookup Table is also limited in how many addresses can be added at a time. Because of this, you will need to use multiple transactions to _extend_ any table with more addresses (~20) that can fit withing a single transaction's memory limits. + +Once these address have been inserted into the table, and stored on chain, you will be able to utilize the Address Lookup Table in future transactions. Enabling up to 256 address in those future transactions. + +## Fetch an Address Lookup Table + +Similar to requesting another account (or PDA) from the cluster, you can fetch a complete Address Lookup Table with the [`getAddressLookupTable`](https://solana-labs.github.io/solana-web3.js/classes/Connection.html#getAddressLookupTable) method: + +```js +// define the `PublicKey` of the lookup table to fetch +const lookupTableAddress = new web3.PublicKey(""); + +// get the table from the cluster +const lookupTableAccount = await connection + .getAddressLookupTable(lookupTableAddress) + .then((res) => res.value); + +// `lookupTableAccount` will now be a `AddressLookupTableAccount` object + +console.log("Table address from cluster:", lookupTableAccount.key.toBase58()); +``` + +Our `lookupTableAccount` variable will now be a `AddressLookupTableAccount` object which we can parse to read the listing of all the addresses stored on chain in the lookup table: + +```js +// loop through and parse all the address stored in the table +for (let i = 0; i < lookupTableAccount.state.addresses.length; i++) { + const address = lookupTableAccount.state.addresses[i]; + console.log(i, address.toBase58()); +} +``` + +## How to use an address lookup table in a transaction + +After you have created your lookup table, and stored your needed address on chain (via extending the lookup table), you can create a `v0` transaction to utilize the on chain lookup capabilities. + +Just like older `legacy` transactions, you can create all the [instructions](./../terminology.md#instruction) your transaction will execute on chain. You can then provide an array of these instructions to the [Message](./../terminology.md#message) used in the `v0 transaction. + +> NOTE: +> The instructions used inside a `v0` transaction can be constructed using the same methods and functions used to create the instructions in the past. There is no required change to the instructions used involving an Address Lookup Table. + +```js +// Assumptions: +// - `arrayOfInstructions` has been created as an `array` of `TransactionInstruction` +// - we are are using the `lookupTableAccount` obtained above + +// construct a v0 compatible transaction `Message` +const messageV0 = new web3.TransactionMessage({ + payerKey: payer.publicKey, + recentBlockhash: blockhash, + instructions: arrayOfInstructions, // note this is an array of instructions +}).compileToV0Message([lookupTableAccount]); + +// create a v0 transaction from the v0 message +const transactionV0 = new web3.VersionedTransaction(messageV0); + +// sign the v0 transaction using the file system wallet we created named `payer` +transactionV0.sign([payer]); + +// send and confirm the transaction +// (NOTE: There is NOT an array of Signers here; see the note below...) +const txid = await web3.sendAndConfirmTransaction(connection, transactionV0); + +console.log( + `Transaction: https://explorer.solana.com/tx/${txidV0}?cluster=devnet`, +); +``` + +> NOTE: +> When sending a `VersionedTransaction` to the cluster, it must be signed BEFORE calling the +> `sendAndConfirmTransaction` method. If you pass an array of `Signer` +> (like with `legacy` transactions) the method will trigger an error! + +## More Resources + +- Read the [proposal](./../proposals/transactions-v2.md) for Address Lookup Tables and Versioned transactions +- [Example Rust program using Address Lookup Tables](https://github.com/TeamRaccoons/address-lookup-table-multi-swap) diff --git a/docs/src/developing/versioned-transactions.md b/docs/src/developing/versioned-transactions.md new file mode 100644 index 00000000000000..bb994226614b1f --- /dev/null +++ b/docs/src/developing/versioned-transactions.md @@ -0,0 +1,150 @@ +--- +title: Versioned Transactions +description: "" +keywords: "" +--- + +[Versioned Transactions](./versioned-transactions.md) are the new transaction format that allow for additional functionality in the Solana runtime, including [Address Lookup Tables](./lookup-tables.md). + +While changes to [on chain](./on-chain-programs/overview.md) programs are **NOT** required to support the new functionality of versioned transactions (or for backwards compatibility), developers **WILL** need update their client side code to prevent [errors due to different transaction versions](#max-supported-transaction-version). + +## Current Transaction Versions + +The Solana runtime supports two transaction versions: + +- `legacy` - older transaction format with no additional benefit +- `0` - added support for [Address Lookup Tables](./lookup-tables.md) + +## Max supported transaction version + +All RPC requests that return a transaction **_should_** specify the highest version of transactions they will support in their application using the `maxSupportedTransactionVersion` option. Including [`getBlock`](./clients/jsonrpc-api.md#getblock) and [`getTransaction`](./clients/jsonrpc-api.md#gettransaction), + +An RPC request will fail if a [Versioned Transaction](./versioned-transactions.md) is returned that is higher than the set `maxSupportedTransactionVersion`. (i.e. if a version `0` transaction is returned when `legacy` is selected) + +> WARNING: +> If no `maxSupportedTransactionVersion` value is set, then only `legacy` transactions will be allowed in the RPC response. Therefore, your RPC requests **WILL** fail if any version `0` transactions are returned. + +## How to set max supported version + +You can set the `maxSupportedTransactionVersion` using both the [`@solana/web3.js`](https://solana-labs.github.io/solana-web3.js/) library and JSON formatted requests directly to an RPC endpoint. + +### Using web3.js + +Using the [`@solana/web3.js`](https://solana-labs.github.io/solana-web3.js/) library, you can retrieve the most recent block or get a specific transaction: + +```js +// connect to the `devnet` cluster and get the current `slot` +const connection = new web3.Connection(web3.clusterApiUrl("devnet")); +const slot = await connection.getSlot(); + +// get the latest block (allowing for v0 transactions) +const block = await connection.getBlock(slot, { + maxSupportedTransactionVersion: 0, +}); + +// get a specific transaction (allowing for v0 transactions) +const getTx = await connection.getTransaction( + "3jpoANiFeVGisWRY5UP648xRXs3iQasCHABPWRWnoEjeA93nc79WrnGgpgazjq4K9m8g2NJoyKoWBV1Kx5VmtwHQ", + { + maxSupportedTransactionVersion: 0, + }, +); +``` + +### JSON requests to the RPC + +Using a standard JSON formatted POST request, you can set the `maxSupportedTransactionVersion` when retrieving a specific block: + +```bash +curl http://localhost:8899 -X POST -H "Content-Type: application/json" -d \ +'{"jsonrpc": "2.0", "id":1, "method": "getBlock", "params": [430, { + "encoding":"json", + "maxSupportedTransactionVersion":0, + "transactionDetails":"full", + "rewards":false +}]}' +``` + +## How create a Versioned Transaction + +Versioned transactions can be created similar to the older method of creating transactions. There are differences in using certain libraries that should be noted. + +Below is an example of how to create a Versioned Transaction, using the `@solana/web3.js` library, to send perform a SOL transfer between two accounts. + +#### Notes: + +- `payer` is a valid `Keypair` wallet, funded with SOL +- `toAccount` a valid `Keypair` + +Firstly, import the web3.js library and create a `connection` to your desired cluster. + +We then define the recent `blockhash` and `minRent` we will need for our transaction and the account. + +```js +const web3 = require("@solana/web3.js"); + +// connect to the cluster and get the minimum rent for rent exempt status +const connection = new web3.Connection(web3.clusterApiUrl("devnet")); +let minRent = await connection.getMinimumBalanceForRentExemption(0); +let blockhash = await connection + .getLatestBlockhash() + .then((res) => res.blockhash); +``` + +Create an `array` of all the `instructions` you desire to send in your transaction. In this example below, we are creating a simple SOL transfer instruction: + +```js +// create an array with your desires `instructions` +const instructions = [ + web3.SystemProgram.transfer({ + fromPubkey: payer.publicKey, + toPubkey: toAccount.publicKey, + lamports: minRent, + }), +]; +``` + +Next, construct a `MessageV0` formatted transaction message with your desired `instructions`: + +```js +// create v0 compatible message +const messageV0 = new web3.TransactionMessage({ + payerKey: payer.publicKey, + recentBlockhash: blockhash, + instructions, +}).compileToV0Message(); +``` + +Then, create a new `VersionedTransaction`, passing in our v0 compatible message: + +```js +const transaction = new web3.VersionedTransaction(messageV0); + +// sign your transaction with the required `Signers` +transaction.sign([payer]); +``` + +You can sign the transaction by either: + +- passing an array of `signatures` into the `VersionedTransaction` method, or +- call the `transaction.sign()` method, passing an array of the required `Signers` + +> NOTE: +> After calling the `transaction.sign()` method, all the previous transaction `signatures` will be fully replaced by new signatures created from the provided in `Signers`. + +After your `VersionedTransaction` has been signed by all required accounts, you can send it to the cluster and `await` the response. + +```js +// send our v0 transaction to the cluster +const txid = await connection.sendTransaction(transaction); +console.log(`https://explorer.solana.com/tx/${txid}?cluster=devnet`); +``` + +> NOTE: +> Unlike `legacy` transactions, sending a `VersionedTransaction` via `sendTransaction` does **NOT** support transaction signing via passing in an array of `Signers` as the second parameter. You will need to sign the transaction before calling `connection.sendTransaction()`. + +## More Resources + +- using [Versioned Transactions for Address Lookup Tables](./lookup-tables.md#how-to-create-an-address-lookup-table) +- view an [example of a v0 transaction](https://explorer.solana.com/tx/3jpoANiFeVGisWRY5UP648xRXs3iQasCHABPWRWnoEjeA93nc79WrnGgpgazjq4K9m8g2NJoyKoWBV1Kx5VmtwHQ/?cluster=devnet) on Solana Explorer +- read the [accepted proposal](./../proposals/transactions-v2.md) for Versioned Transaction and Address Lookup Tables From dd014373f148c403651199322035f55f9e1416d3 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Tue, 27 Sep 2022 07:03:01 +0000 Subject: [PATCH 159/465] make ping cache rate limit delay configurable (backport #27955) (#28088) make ping cache rate limit delay configurable (#27955) (cherry picked from commit 8b0f9b491745cbd7570b09dad69b86d044ddf6a8) Co-authored-by: Jeff Biseda --- core/src/serve_repair.rs | 12 ++++++++++-- gossip/src/cluster_info.rs | 2 ++ gossip/src/crds_gossip_pull.rs | 25 +++++++++++++++---------- gossip/src/ping_pong.rs | 16 +++++++++++----- gossip/tests/crds_gossip.rs | 5 +++-- 5 files changed, 41 insertions(+), 19 deletions(-) diff --git a/core/src/serve_repair.rs b/core/src/serve_repair.rs index faef7a95e06f69..b9592c6df4f9e8 100644 --- a/core/src/serve_repair.rs +++ b/core/src/serve_repair.rs @@ -3,7 +3,7 @@ use { cluster_slots::ClusterSlots, duplicate_repair_status::ANCESTOR_HASH_REPAIR_SAMPLE_SIZE, repair_response, - repair_service::{OutstandingShredRepairs, RepairStats}, + repair_service::{OutstandingShredRepairs, RepairStats, REPAIR_MS}, request_response::RequestResponse, result::{Error, Result}, }, @@ -76,6 +76,7 @@ pub const MAX_ANCESTOR_RESPONSES: usize = pub(crate) const REPAIR_PING_TOKEN_SIZE: usize = HASH_BYTES; pub const REPAIR_PING_CACHE_CAPACITY: usize = 65536; pub const REPAIR_PING_CACHE_TTL: Duration = Duration::from_secs(1280); +const REPAIR_PING_CACHE_RATE_LIMIT_DELAY: Duration = Duration::from_secs(2); pub(crate) const REPAIR_RESPONSE_SERIALIZED_PING_BYTES: usize = 4 /*enum discriminator*/ + PUBKEY_BYTES + REPAIR_PING_TOKEN_SIZE + SIGNATURE_BYTES; const SIGNED_REPAIR_TIME_WINDOW: Duration = Duration::from_secs(60 * 10); // 10 min @@ -555,7 +556,14 @@ impl ServeRepair { const MAX_BYTES_PER_SECOND: usize = 12_000_000; const MAX_BYTES_PER_INTERVAL: usize = MAX_BYTES_PER_SECOND * INTERVAL_MS as usize / 1000; - let mut ping_cache = PingCache::new(REPAIR_PING_CACHE_TTL, REPAIR_PING_CACHE_CAPACITY); + // rate limit delay should be greater than the repair request iteration delay + assert!(REPAIR_PING_CACHE_RATE_LIMIT_DELAY > Duration::from_millis(REPAIR_MS)); + + let mut ping_cache = PingCache::new( + REPAIR_PING_CACHE_TTL, + REPAIR_PING_CACHE_RATE_LIMIT_DELAY, + REPAIR_PING_CACHE_CAPACITY, + ); let recycler = PacketBatchRecycler::default(); Builder::new() diff --git a/gossip/src/cluster_info.rs b/gossip/src/cluster_info.rs index 6745f74df7c0f5..9c644691fe0e20 100644 --- a/gossip/src/cluster_info.rs +++ b/gossip/src/cluster_info.rs @@ -127,6 +127,7 @@ const MAX_PRUNE_DATA_NODES: usize = 32; const GOSSIP_PING_TOKEN_SIZE: usize = 32; const GOSSIP_PING_CACHE_CAPACITY: usize = 65536; const GOSSIP_PING_CACHE_TTL: Duration = Duration::from_secs(1280); +const GOSSIP_PING_CACHE_RATE_LIMIT_DELAY: Duration = Duration::from_secs(1280 / 64); pub const DEFAULT_CONTACT_DEBUG_INTERVAL_MILLIS: u64 = 10_000; pub const DEFAULT_CONTACT_SAVE_INTERVAL_MILLIS: u64 = 60_000; /// Minimum serialized size of a Protocol::PullResponse packet. @@ -412,6 +413,7 @@ impl ClusterInfo { my_contact_info: RwLock::new(contact_info), ping_cache: Mutex::new(PingCache::new( GOSSIP_PING_CACHE_TTL, + GOSSIP_PING_CACHE_RATE_LIMIT_DELAY, GOSSIP_PING_CACHE_CAPACITY, )), stats: GossipStats::default(), diff --git a/gossip/src/crds_gossip_pull.rs b/gossip/src/crds_gossip_pull.rs index 2780bf7dabf56b..b10ecf2f2de2ee 100644 --- a/gossip/src/crds_gossip_pull.rs +++ b/gossip/src/crds_gossip_pull.rs @@ -1010,8 +1010,9 @@ pub(crate) mod tests { let node = CrdsGossipPull::default(); let mut pings = Vec::new(); let ping_cache = Mutex::new(PingCache::new( - Duration::from_secs(20 * 60), // ttl - 128, // capacity + Duration::from_secs(20 * 60), // ttl + Duration::from_secs(20 * 60) / 64, // rate_limit_delay + 128, // capacity )); assert_eq!( node.new_pull_request( @@ -1108,8 +1109,9 @@ pub(crate) mod tests { let now: u64 = 1_605_127_770_789; let thread_pool = ThreadPoolBuilder::new().build().unwrap(); let mut ping_cache = PingCache::new( - Duration::from_secs(20 * 60), // ttl - 128, // capacity + Duration::from_secs(20 * 60), // ttl + Duration::from_secs(20 * 60) / 64, // rate_limit_delay + 128, // capacity ); let mut crds = Crds::default(); let node_keypair = Keypair::new(); @@ -1207,8 +1209,9 @@ pub(crate) mod tests { let node_keypair = Keypair::new(); let mut node_crds = Crds::default(); let mut ping_cache = PingCache::new( - Duration::from_secs(20 * 60), // ttl - 128, // capacity + Duration::from_secs(20 * 60), // ttl + Duration::from_secs(20 * 60) / 64, // rate_limit_delay + 128, // capacity ); let entry = CrdsValue::new_unsigned(CrdsData::ContactInfo(ContactInfo::new_localhost( &node_keypair.pubkey(), @@ -1319,8 +1322,9 @@ pub(crate) mod tests { .insert(entry, 0, GossipRoute::LocalMessage) .unwrap(); let mut ping_cache = PingCache::new( - Duration::from_secs(20 * 60), // ttl - 128, // capacity + Duration::from_secs(20 * 60), // ttl + Duration::from_secs(20 * 60) / 64, // rate_limit_delay + 128, // capacity ); let new = ContactInfo::new_localhost(&solana_sdk::pubkey::new_rand(), 0); ping_cache.mock_pong(new.id, new.gossip, Instant::now()); @@ -1379,8 +1383,9 @@ pub(crate) mod tests { .insert(entry, 0, GossipRoute::LocalMessage) .unwrap(); let mut ping_cache = PingCache::new( - Duration::from_secs(20 * 60), // ttl - 128, // capacity + Duration::from_secs(20 * 60), // ttl + Duration::from_secs(20 * 60) / 64, // rate_limit_delay + 128, // capacity ); let new = ContactInfo::new_localhost(&solana_sdk::pubkey::new_rand(), 1); ping_cache.mock_pong(new.id, new.gossip, Instant::now()); diff --git a/gossip/src/ping_pong.rs b/gossip/src/ping_pong.rs index 16961f26f18388..f6e47c6907eb0f 100644 --- a/gossip/src/ping_pong.rs +++ b/gossip/src/ping_pong.rs @@ -38,6 +38,8 @@ pub struct Pong { pub struct PingCache { // Time-to-live of received pong messages. ttl: Duration, + // Rate limit delay to generate pings for a given address + rate_limit_delay: Duration, // Timestamp of last ping message sent to a remote node. // Used to rate limit pings to remote nodes. pings: LruCache<(Pubkey, SocketAddr), Instant>, @@ -153,9 +155,12 @@ impl Signable for Pong { } impl PingCache { - pub fn new(ttl: Duration, cap: usize) -> Self { + pub fn new(ttl: Duration, rate_limit_delay: Duration, cap: usize) -> Self { + // Sanity check ttl/rate_limit_delay + assert!(rate_limit_delay <= ttl / 2); Self { ttl, + rate_limit_delay, pings: LruCache::new(cap), pongs: LruCache::new(cap), pending_cache: LruCache::new(cap), @@ -192,10 +197,9 @@ impl PingCache { T: Serialize, F: FnMut() -> Option>, { - // Rate limit consecutive pings sent to a remote node. - let delay = self.ttl / 64; match self.pings.peek(&node) { - Some(t) if now.saturating_duration_since(*t) < delay => None, + // Rate limit consecutive pings sent to a remote node. + Some(t) if now.saturating_duration_since(*t) < self.rate_limit_delay => None, _ => { let ping = pingf()?; let token = serialize(&ping.token).ok()?; @@ -255,6 +259,7 @@ impl PingCache { pub(crate) fn mock_clone(&self) -> Self { let mut clone = Self { ttl: self.ttl, + rate_limit_delay: self.rate_limit_delay, pings: LruCache::new(self.pings.cap()), pongs: LruCache::new(self.pongs.cap()), pending_cache: LruCache::new(self.pending_cache.cap()), @@ -317,7 +322,8 @@ mod tests { let now = Instant::now(); let mut rng = rand::thread_rng(); let ttl = Duration::from_millis(256); - let mut cache = PingCache::new(ttl, /*cap=*/ 1000); + let delay = ttl / 64; + let mut cache = PingCache::new(ttl, delay, /*cap=*/ 1000); let this_node = Keypair::new(); let keypairs: Vec<_> = repeat_with(Keypair::new).take(8).collect(); let sockets: Vec<_> = repeat_with(|| { diff --git a/gossip/tests/crds_gossip.rs b/gossip/tests/crds_gossip.rs index 5eff0147b52ce8..b91d6475792856 100644 --- a/gossip/tests/crds_gossip.rs +++ b/gossip/tests/crds_gossip.rs @@ -53,8 +53,9 @@ impl Node { stake: u64, ) -> Self { let ping_cache = Arc::new(Mutex::new(PingCache::new( - Duration::from_secs(20 * 60), // ttl - 2048, // capacity + Duration::from_secs(20 * 60), // ttl + Duration::from_secs(20 * 60) / 64, // delay + 2048, // capacity ))); Node { keypair, From 38104582d9cc5b91055cef4377f64b0ccd1cd499 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Tue, 27 Sep 2022 17:12:34 +0000 Subject: [PATCH 160/465] counts gossip packets received before excess packets are dropped (backport #28086) (#28103) counts gossip packets received before excess packets are dropped (#28086) Currently, gossip packets are counted after excess packets are dropped. This makes it difficult to debug gossip traffic spikes if the majority of the packets are dropped. This commit instead counts gossip packets received before excess packets are dropped (cherry picked from commit abfaf06e874281e3823edced433b69c8b9058f34) Co-authored-by: behzad nouri --- gossip/src/cluster_info.rs | 59 ++++++++++++++++++++++-------- gossip/src/cluster_info_metrics.rs | 18 +++++++++ 2 files changed, 61 insertions(+), 16 deletions(-) diff --git a/gossip/src/cluster_info.rs b/gossip/src/cluster_info.rs index 9c644691fe0e20..466f75cfaf50e4 100644 --- a/gossip/src/cluster_info.rs +++ b/gossip/src/cluster_info.rs @@ -279,6 +279,7 @@ pub(crate) enum Protocol { PruneMessage(Pubkey, PruneData), PingMessage(Ping), PongMessage(Pong), + // Update count_packets_received if new variants are added here. } impl Protocol { @@ -2410,18 +2411,6 @@ impl ClusterInfo { Protocol::PongMessage(pong) => pong_messages.push((from_addr, pong)), } } - self.stats - .packets_received_pull_requests_count - .add_relaxed(pull_requests.len() as u64); - self.stats - .packets_received_pull_responses_count - .add_relaxed(pull_responses.len() as u64); - self.stats - .packets_received_push_messages_count - .add_relaxed(push_messages.len() as u64); - self.stats - .packets_received_prune_messages_count - .add_relaxed(prune_messages.len() as u64); if self.require_stake_for_gossip(stakes) { for (_, data) in &mut pull_responses { retain_staked(data, stakes); @@ -2467,9 +2456,26 @@ impl ClusterInfo { thread_pool: &ThreadPool, ) -> Result<(), GossipError> { const RECV_TIMEOUT: Duration = Duration::from_secs(1); - let packets: Vec<_> = receiver.recv_timeout(RECV_TIMEOUT)?.into(); + fn count_packets_received(packets: &PacketBatch, counts: &mut [u64; 7]) { + for packet in packets { + let k = match packet + .data(..4) + .and_then(|data| <[u8; 4]>::try_from(data).ok()) + .map(u32::from_le_bytes) + { + Some(k @ 0..=6) => k as usize, + None | Some(_) => 6, + }; + counts[k] += 1; + } + } + let packets = receiver.recv_timeout(RECV_TIMEOUT)?; + let mut counts = [0u64; 7]; + count_packets_received(&packets, &mut counts); + let packets = Vec::from(packets); let mut packets = VecDeque::from(packets); for packet_batch in receiver.try_iter() { + count_packets_received(&packet_batch, &mut counts); packets.extend(packet_batch.iter().cloned()); let excess_count = packets.len().saturating_sub(MAX_GOSSIP_TRAFFIC); if excess_count > 0 { @@ -2479,9 +2485,6 @@ impl ClusterInfo { .add_relaxed(excess_count as u64); } } - self.stats - .packets_received_count - .add_relaxed(packets.len() as u64); let verify_packet = |packet: Packet| { let protocol: Protocol = packet.deserialize_slice(..).ok()?; protocol.sanitize().ok()?; @@ -2492,6 +2495,30 @@ impl ClusterInfo { let _st = ScopedTimer::from(&self.stats.verify_gossip_packets_time); thread_pool.install(|| packets.into_par_iter().filter_map(verify_packet).collect()) }; + self.stats + .packets_received_count + .add_relaxed(counts.iter().sum::()); + self.stats + .packets_received_pull_requests_count + .add_relaxed(counts[0]); + self.stats + .packets_received_pull_responses_count + .add_relaxed(counts[1]); + self.stats + .packets_received_push_messages_count + .add_relaxed(counts[2]); + self.stats + .packets_received_prune_messages_count + .add_relaxed(counts[3]); + self.stats + .packets_received_ping_messages_count + .add_relaxed(counts[4]); + self.stats + .packets_received_pong_messages_count + .add_relaxed(counts[5]); + self.stats + .packets_received_unknown_count + .add_relaxed(counts[6]); self.stats .packets_received_verified_count .add_relaxed(packets.len() as u64); diff --git a/gossip/src/cluster_info_metrics.rs b/gossip/src/cluster_info_metrics.rs index 81e63a0163e478..6d5a3586ce221c 100644 --- a/gossip/src/cluster_info_metrics.rs +++ b/gossip/src/cluster_info_metrics.rs @@ -131,10 +131,13 @@ pub struct GossipStats { pub(crate) new_push_requests: Counter, pub(crate) new_push_requests_num: Counter, pub(crate) packets_received_count: Counter, + pub(crate) packets_received_ping_messages_count: Counter, + pub(crate) packets_received_pong_messages_count: Counter, pub(crate) packets_received_prune_messages_count: Counter, pub(crate) packets_received_pull_requests_count: Counter, pub(crate) packets_received_pull_responses_count: Counter, pub(crate) packets_received_push_messages_count: Counter, + pub(crate) packets_received_unknown_count: Counter, pub(crate) packets_received_verified_count: Counter, pub(crate) packets_sent_gossip_requests_count: Counter, pub(crate) packets_sent_prune_messages_count: Counter, @@ -490,6 +493,16 @@ pub(crate) fn submit_gossip_stats( stats.packets_received_count.clear(), i64 ), + ( + "packets_received_ping_messages_count", + stats.packets_received_ping_messages_count.clear(), + i64 + ), + ( + "packets_received_pong_messages_count", + stats.packets_received_pong_messages_count.clear(), + i64 + ), ( "packets_received_prune_messages_count", stats.packets_received_prune_messages_count.clear(), @@ -510,6 +523,11 @@ pub(crate) fn submit_gossip_stats( stats.packets_received_push_messages_count.clear(), i64 ), + ( + "packets_received_unknown_count", + stats.packets_received_unknown_count.clear(), + i64 + ), ( "packets_received_verified_count", stats.packets_received_verified_count.clear(), From 3570e16e2df5fbf6f725a78877863b1f1ed5dc54 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Tue, 27 Sep 2022 17:14:45 +0000 Subject: [PATCH 161/465] bypasses rayon thread-pool for single entry vectors (backport #28077) (#28090) bypasses rayon thread-pool for single entry batches (#28077) With no parallelization, thread-pool only adds overhead. (cherry picked from commit 72537e7e077e3d4a2e6e17ce3c8554463da8f435) Co-authored-by: behzad nouri --- ledger/src/blockstore.rs | 22 ++++++++++++++++++---- ledger/src/shred/merkle.rs | 18 ++++++++++++++---- ledger/src/shredder.rs | 20 +++++++++++++++++--- 3 files changed, 49 insertions(+), 11 deletions(-) diff --git a/ledger/src/blockstore.rs b/ledger/src/blockstore.rs index 3a3b4403a65e6f..be19c2a3cdf57b 100644 --- a/ledger/src/blockstore.rs +++ b/ledger/src/blockstore.rs @@ -2781,14 +2781,28 @@ impl Blockstore { .map(|(_, end_index)| u64::from(*end_index) - start_index + 1) .unwrap_or(0); - let entries: Result>> = PAR_THREAD_POOL.install(|| { + let entries: Result>> = if completed_ranges.len() <= 1 { completed_ranges - .par_iter() + .into_iter() .map(|(start_index, end_index)| { - self.get_entries_in_data_block(slot, *start_index, *end_index, Some(&slot_meta)) + self.get_entries_in_data_block(slot, start_index, end_index, Some(&slot_meta)) }) .collect() - }); + } else { + PAR_THREAD_POOL.install(|| { + completed_ranges + .into_par_iter() + .map(|(start_index, end_index)| { + self.get_entries_in_data_block( + slot, + start_index, + end_index, + Some(&slot_meta), + ) + }) + .collect() + }) + }; let entries: Vec = entries?.into_iter().flatten().collect(); Ok((entries, num_shreds, slot_meta.is_full())) } diff --git a/ledger/src/shred/merkle.rs b/ledger/src/shred/merkle.rs index ff2541c9dc5434..581b8cbb39ea3a 100644 --- a/ledger/src/shred/merkle.rs +++ b/ledger/src/shred/merkle.rs @@ -918,15 +918,25 @@ pub(super) fn make_shreds_from_data( .collect(); // Generate coding shreds, populate merkle branch // for all shreds and attach signature. - let shreds = thread_pool.install(|| { + let shreds: Result, Error> = if shreds.len() <= 1 { shreds - .into_par_iter() + .into_iter() .zip(next_code_index) .map(|(shreds, next_code_index)| { make_erasure_batch(keypair, shreds, next_code_index, reed_solomon_cache) }) - .collect::, Error>>() - }); + .collect() + } else { + thread_pool.install(|| { + shreds + .into_par_iter() + .zip(next_code_index) + .map(|(shreds, next_code_index)| { + make_erasure_batch(keypair, shreds, next_code_index, reed_solomon_cache) + }) + .collect() + }) + }; stats.gen_coding_elapsed += now.elapsed().as_micros() as u64; shreds } diff --git a/ledger/src/shredder.rs b/ledger/src/shredder.rs index 132cf670b8c637..2c7dd0369c8ef8 100644 --- a/ledger/src/shredder.rs +++ b/ledger/src/shredder.rs @@ -216,15 +216,29 @@ impl Shredder { ) .collect(); // 1) Generate coding shreds - let mut coding_shreds: Vec<_> = PAR_THREAD_POOL.install(|| { + let mut coding_shreds: Vec<_> = if chunks.len() <= 1 { chunks - .into_par_iter() + .into_iter() .zip(next_code_index) .flat_map(|(shreds, next_code_index)| { Shredder::generate_coding_shreds(&shreds, next_code_index, reed_solomon_cache) }) .collect() - }); + } else { + PAR_THREAD_POOL.install(|| { + chunks + .into_par_iter() + .zip(next_code_index) + .flat_map(|(shreds, next_code_index)| { + Shredder::generate_coding_shreds( + &shreds, + next_code_index, + reed_solomon_cache, + ) + }) + .collect() + }) + }; gen_coding_time.stop(); let mut sign_coding_time = Measure::start("sign_coding_shreds"); From 4d7f20b75919ce391856cd742e09202f1d9f4f64 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Tue, 27 Sep 2022 20:56:52 +0000 Subject: [PATCH 162/465] bypasses merkle proof verification for recovered merkle shreds (backport #28076) (#28089) bypasses merkle proof verification for recovered merkle shreds (#28076) Merkle proof for shreds recovered from erasure codes are generated locally, and it is superfluous to verify them when sanitizing recovered shreds: https://github.com/solana-labs/solana/blob/a0f49c2e4/ledger/src/shred/merkle.rs#L727-L760 (cherry picked from commit b9849179c94c1805ddbef35c6e3265ed4a80f4bd) Co-authored-by: behzad nouri --- ledger/src/shred/merkle.rs | 85 ++++++++++++++++++++++---------------- 1 file changed, 49 insertions(+), 36 deletions(-) diff --git a/ledger/src/shred/merkle.rs b/ledger/src/shred/merkle.rs index 581b8cbb39ea3a..f4e394be9a8edb 100644 --- a/ledger/src/shred/merkle.rs +++ b/ledger/src/shred/merkle.rs @@ -91,7 +91,7 @@ impl Shred { dispatch!(fn erasure_shard_index(&self) -> Result); dispatch!(fn merkle_tree_node(&self) -> Result); dispatch!(fn payload(&self) -> &Vec); - dispatch!(fn sanitize(&self) -> Result<(), Error>); + dispatch!(fn sanitize(&self, verify_merkle_proof: bool) -> Result<(), Error>); dispatch!(fn set_merkle_branch(&mut self, merkle_branch: MerkleBranch) -> Result<(), Error>); dispatch!(fn set_signature(&mut self, signature: Signature)); dispatch!(fn signed_message(&self) -> &[u8]); @@ -219,6 +219,23 @@ impl ShredData { self.merkle_branch = merkle_branch; Ok(()) } + + fn sanitize(&self, verify_merkle_proof: bool) -> Result<(), Error> { + match self.common_header.shred_variant { + ShredVariant::MerkleData(proof_size) => { + if self.merkle_branch.proof.len() != usize::from(proof_size) { + return Err(Error::InvalidProofSize(proof_size)); + } + } + _ => return Err(Error::InvalidShredVariant), + } + if !verify_merkle_proof { + debug_assert_matches!(self.verify_merkle_proof(), Ok(true)); + } else if !self.verify_merkle_proof()? { + return Err(Error::InvalidMerkleProof); + } + shred_data::sanitize(self) + } } impl ShredCode { @@ -317,6 +334,23 @@ impl ShredCode { self.merkle_branch = merkle_branch; Ok(()) } + + fn sanitize(&self, verify_merkle_proof: bool) -> Result<(), Error> { + match self.common_header.shred_variant { + ShredVariant::MerkleCode(proof_size) => { + if self.merkle_branch.proof.len() != usize::from(proof_size) { + return Err(Error::InvalidProofSize(proof_size)); + } + } + _ => return Err(Error::InvalidShredVariant), + } + if !verify_merkle_proof { + debug_assert_matches!(self.verify_merkle_proof(), Ok(true)); + } else if !self.verify_merkle_proof()? { + return Err(Error::InvalidMerkleProof); + } + shred_code::sanitize(self) + } } impl MerkleBranch { @@ -368,7 +402,8 @@ impl ShredTrait for ShredData { merkle_branch, payload, }; - shred.sanitize().map(|_| shred) + shred.sanitize(/*verify_merkle_proof:*/ true)?; + Ok(shred) } fn erasure_shard_index(&self) -> Result { @@ -402,18 +437,7 @@ impl ShredTrait for ShredData { } fn sanitize(&self) -> Result<(), Error> { - match self.common_header.shred_variant { - ShredVariant::MerkleData(proof_size) => { - if self.merkle_branch.proof.len() != usize::from(proof_size) { - return Err(Error::InvalidProofSize(proof_size)); - } - } - _ => return Err(Error::InvalidShredVariant), - } - if !self.verify_merkle_proof()? { - return Err(Error::InvalidMerkleProof); - } - shred_data::sanitize(self) + self.sanitize(/*verify_merkle_proof:*/ true) } fn signed_message(&self) -> &[u8] { @@ -452,7 +476,8 @@ impl ShredTrait for ShredCode { merkle_branch, payload, }; - shred.sanitize().map(|_| shred) + shred.sanitize(/*verify_merkle_proof:*/ true)?; + Ok(shred) } fn erasure_shard_index(&self) -> Result { @@ -486,18 +511,7 @@ impl ShredTrait for ShredCode { } fn sanitize(&self) -> Result<(), Error> { - match self.common_header.shred_variant { - ShredVariant::MerkleCode(proof_size) => { - if self.merkle_branch.proof.len() != usize::from(proof_size) { - return Err(Error::InvalidProofSize(proof_size)); - } - } - _ => return Err(Error::InvalidShredVariant), - } - if !self.verify_merkle_proof()? { - return Err(Error::InvalidMerkleProof); - } - shred_code::sanitize(self) + self.sanitize(/*verify_merkle_proof:*/ true) } fn signed_message(&self) -> &[u8] { @@ -619,10 +633,7 @@ pub(super) fn recover( Some((common_header, coding_header)) }); let (common_header, coding_header) = headers.ok_or(TooFewParityShards)?; - debug_assert!(matches!( - common_header.shred_variant, - ShredVariant::MerkleCode(_) - )); + debug_assert_matches!(common_header.shred_variant, ShredVariant::MerkleCode(_)); let proof_size = match common_header.shred_variant { ShredVariant::MerkleCode(proof_size) => proof_size, ShredVariant::MerkleData(_) | ShredVariant::LegacyCode | ShredVariant::LegacyData => { @@ -751,12 +762,14 @@ pub(super) fn recover( }); } } - // TODO: No need to verify merkle proof in sanitize here. shreds .into_iter() .zip(mask) .filter(|(_, mask)| !mask) - .map(|(shred, _)| shred.sanitize().map(|_| shred)) + .map(|(shred, _)| { + shred.sanitize(/*verify_merkle_proof:*/ false)?; + Ok(shred) + }) .collect() } @@ -1018,7 +1031,7 @@ fn make_erasure_batch( shred.set_merkle_branch(merkle_branch)?; shred.set_signature(signature); debug_assert!(shred.verify(&keypair.pubkey())); - debug_assert_matches!(shred.sanitize(), Ok(())); + debug_assert_matches!(shred.sanitize(/*verify_merkle_proof:*/ true), Ok(())); // Assert that shred payload is fully populated. debug_assert_eq!(shred, { let shred = shred.payload().clone(); @@ -1247,7 +1260,7 @@ mod test { let signature = keypair.sign_message(shred.signed_message()); shred.set_signature(signature); assert!(shred.verify(&keypair.pubkey())); - assert_matches!(shred.sanitize(), Ok(())); + assert_matches!(shred.sanitize(/*verify_merkle_proof:*/ true), Ok(())); } assert_eq!(shreds.iter().map(Shred::signature).dedup().count(), 1); for size in num_data_shreds..num_shreds { @@ -1382,7 +1395,7 @@ mod test { // Assert that shreds sanitize and verify. for shred in &shreds { assert!(shred.verify(&keypair.pubkey())); - assert_matches!(shred.sanitize(), Ok(())); + assert_matches!(shred.sanitize(/*verify_merkle_proof:*/ true), Ok(())); let ShredCommonHeader { signature, shred_variant, From 02feb73fb0f6bb76229cedd1a7c30a31566d7bbd Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Tue, 27 Sep 2022 20:02:28 -0700 Subject: [PATCH 163/465] fix duplicate local variable (backport #28093) (#28108) fix duplicate local variable (#28093) (cherry picked from commit a89010cc89798fcde5984e60ad0454435dc3a2cc) Co-authored-by: Jeff Washington (jwash) --- runtime/src/in_mem_accounts_index.rs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/runtime/src/in_mem_accounts_index.rs b/runtime/src/in_mem_accounts_index.rs index 9796ac9be667d8..1201ef7491f7b9 100644 --- a/runtime/src/in_mem_accounts_index.rs +++ b/runtime/src/in_mem_accounts_index.rs @@ -1112,7 +1112,6 @@ impl InMemAccountsIndex { // merge all items into the disk index now let disk = self.bucket.as_ref().unwrap(); - let mut duplicate = vec![]; let mut count = 0; insert.into_iter().for_each(|(slot, k, v)| { let entry = (slot, v); @@ -1125,7 +1124,7 @@ impl InMemAccountsIndex { slot_list.extend_from_slice(current_slot_list); slot_list.push(entry); // will never be from the same slot that already exists in the list ref_count += new_ref_count; - duplicate.push((slot, k)); + duplicates.push((slot, k)); Some((slot_list, ref_count)) } None => { From 9e9f778f9ffca546084d3b75cfbb24280b5b4f13 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Sat, 1 Oct 2022 16:19:05 +0800 Subject: [PATCH 164/465] Parse address-lookup-table instructions (backport #27316) (#28135) * Parse address-lookup-table instructions (#27316) * Parse address-lookup-table instructions * Finish extend instruction handling * Rename payer, recipient * Update docs parsing status (cherry picked from commit 62eebe6e6dfa32f6a098af8a4b91555c990f0d97) # Conflicts: # docs/src/developing/clients/jsonrpc-api.md # transaction-status/Cargo.toml * resolve conflicts Co-authored-by: Tyera Eulberg Co-authored-by: Justin Starry --- Cargo.lock | 1 + docs/src/developing/clients/jsonrpc-api.md | 2 +- programs/bpf/Cargo.lock | 1 + transaction-status/Cargo.toml | 1 + transaction-status/src/lib.rs | 1 + .../src/parse_address_lookup_table.rs | 358 ++++++++++++++++++ transaction-status/src/parse_instruction.rs | 10 + 7 files changed, 373 insertions(+), 1 deletion(-) create mode 100644 transaction-status/src/parse_address_lookup_table.rs diff --git a/Cargo.lock b/Cargo.lock index 896321faf14e32..dcec1f99f294b5 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -6400,6 +6400,7 @@ dependencies = [ "serde_derive", "serde_json", "solana-account-decoder", + "solana-address-lookup-table-program", "solana-measure", "solana-metrics", "solana-sdk 1.14.4", diff --git a/docs/src/developing/clients/jsonrpc-api.md b/docs/src/developing/clients/jsonrpc-api.md index 098c8f2947589b..5fa34416923f9e 100644 --- a/docs/src/developing/clients/jsonrpc-api.md +++ b/docs/src/developing/clients/jsonrpc-api.md @@ -214,7 +214,7 @@ JSON parsing for the following native and SPL programs: | Program | Account State | Instructions | | --- | --- | --- | -| Address Lookup | v1.15.0 | v1.15.0 | +| Address Lookup | v1.14.4 | v1.14.4 | | BPF Loader | n/a | stable | | BPF Upgradeable Loader | stable | stable | | Config | stable | | diff --git a/programs/bpf/Cargo.lock b/programs/bpf/Cargo.lock index a2dd8f116b757b..453dcfadbaff46 100644 --- a/programs/bpf/Cargo.lock +++ b/programs/bpf/Cargo.lock @@ -5700,6 +5700,7 @@ dependencies = [ "serde_derive", "serde_json", "solana-account-decoder", + "solana-address-lookup-table-program", "solana-measure", "solana-metrics", "solana-sdk 1.14.4", diff --git a/transaction-status/Cargo.toml b/transaction-status/Cargo.toml index 0c091896887133..15857e8291bb5c 100644 --- a/transaction-status/Cargo.toml +++ b/transaction-status/Cargo.toml @@ -21,6 +21,7 @@ serde = "1.0.138" serde_derive = "1.0.103" serde_json = "1.0.81" solana-account-decoder = { path = "../account-decoder", version = "=1.14.4" } +solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.4" } solana-measure = { path = "../measure", version = "=1.14.4" } solana-metrics = { path = "../metrics", version = "=1.14.4" } solana-sdk = { path = "../sdk", version = "=1.14.4" } diff --git a/transaction-status/src/lib.rs b/transaction-status/src/lib.rs index ea219516f78b31..69ddd64a01e729 100644 --- a/transaction-status/src/lib.rs +++ b/transaction-status/src/lib.rs @@ -36,6 +36,7 @@ extern crate serde_derive; pub mod extract_memos; pub mod option_serializer; pub mod parse_accounts; +pub mod parse_address_lookup_table; pub mod parse_associated_token; pub mod parse_bpf_loader; pub mod parse_instruction; diff --git a/transaction-status/src/parse_address_lookup_table.rs b/transaction-status/src/parse_address_lookup_table.rs new file mode 100644 index 00000000000000..f30b61ad7fe8b5 --- /dev/null +++ b/transaction-status/src/parse_address_lookup_table.rs @@ -0,0 +1,358 @@ +use { + crate::parse_instruction::{ + check_num_accounts, ParsableProgram, ParseInstructionError, ParsedInstructionEnum, + }, + bincode::deserialize, + serde_json::json, + solana_address_lookup_table_program::instruction::ProgramInstruction, + solana_sdk::{instruction::CompiledInstruction, message::AccountKeys}, +}; + +pub fn parse_address_lookup_table( + instruction: &CompiledInstruction, + account_keys: &AccountKeys, +) -> Result { + let address_lookup_table_instruction: ProgramInstruction = deserialize(&instruction.data) + .map_err(|_| { + ParseInstructionError::InstructionNotParsable(ParsableProgram::AddressLookupTable) + })?; + match instruction.accounts.iter().max() { + Some(index) if (*index as usize) < account_keys.len() => {} + _ => { + // Runtime should prevent this from ever happening + return Err(ParseInstructionError::InstructionKeyMismatch( + ParsableProgram::AddressLookupTable, + )); + } + } + match address_lookup_table_instruction { + ProgramInstruction::CreateLookupTable { + recent_slot, + bump_seed, + } => { + check_num_address_lookup_table_accounts(&instruction.accounts, 4)?; + Ok(ParsedInstructionEnum { + instruction_type: "createLookupTable".to_string(), + info: json!({ + "lookupTableAccount": account_keys[instruction.accounts[0] as usize].to_string(), + "lookupTableAuthority": account_keys[instruction.accounts[1] as usize].to_string(), + "payerAccount": account_keys[instruction.accounts[2] as usize].to_string(), + "systemProgram": account_keys[instruction.accounts[3] as usize].to_string(), + "recentSlot": recent_slot, + "bumpSeed": bump_seed, + }), + }) + } + ProgramInstruction::FreezeLookupTable => { + check_num_address_lookup_table_accounts(&instruction.accounts, 2)?; + Ok(ParsedInstructionEnum { + instruction_type: "freezeLookupTable".to_string(), + info: json!({ + "lookupTableAccount": account_keys[instruction.accounts[0] as usize].to_string(), + "lookupTableAuthority": account_keys[instruction.accounts[1] as usize].to_string(), + }), + }) + } + ProgramInstruction::ExtendLookupTable { new_addresses } => { + check_num_address_lookup_table_accounts(&instruction.accounts, 2)?; + let new_addresses: Vec = new_addresses + .into_iter() + .map(|address| address.to_string()) + .collect(); + let mut value = json!({ + "lookupTableAccount": account_keys[instruction.accounts[0] as usize].to_string(), + "lookupTableAuthority": account_keys[instruction.accounts[1] as usize].to_string(), + "newAddresses": new_addresses, + }); + let map = value.as_object_mut().unwrap(); + if instruction.accounts.len() >= 4 { + map.insert( + "payerAccount".to_string(), + json!(account_keys[instruction.accounts[2] as usize].to_string()), + ); + map.insert( + "systemProgram".to_string(), + json!(account_keys[instruction.accounts[3] as usize].to_string()), + ); + } + Ok(ParsedInstructionEnum { + instruction_type: "extendLookupTable".to_string(), + info: value, + }) + } + ProgramInstruction::DeactivateLookupTable => { + check_num_address_lookup_table_accounts(&instruction.accounts, 2)?; + Ok(ParsedInstructionEnum { + instruction_type: "deactivateLookupTable".to_string(), + info: json!({ + "lookupTableAccount": account_keys[instruction.accounts[0] as usize].to_string(), + "lookupTableAuthority": account_keys[instruction.accounts[1] as usize].to_string(), + }), + }) + } + ProgramInstruction::CloseLookupTable => { + check_num_address_lookup_table_accounts(&instruction.accounts, 3)?; + Ok(ParsedInstructionEnum { + instruction_type: "closeLookupTable".to_string(), + info: json!({ + "lookupTableAccount": account_keys[instruction.accounts[0] as usize].to_string(), + "lookupTableAuthority": account_keys[instruction.accounts[1] as usize].to_string(), + "recipient": account_keys[instruction.accounts[2] as usize].to_string(), + }), + }) + } + } +} + +fn check_num_address_lookup_table_accounts( + accounts: &[u8], + num: usize, +) -> Result<(), ParseInstructionError> { + check_num_accounts(accounts, num, ParsableProgram::AddressLookupTable) +} + +#[cfg(test)] +mod test { + use { + super::*, + solana_address_lookup_table_program::instruction, + solana_sdk::{message::Message, pubkey::Pubkey, system_program}, + std::str::FromStr, + }; + + #[test] + fn test_parse_create_address_lookup_table_ix() { + let from_pubkey = Pubkey::new_unique(); + // use explicit key to have predicatble bump_seed + let authority = Pubkey::from_str("HkxY6vXdrKzoCQLmdJ3cYo9534FdZQxzBNWTyrJzzqJM").unwrap(); + let slot = 42; + + let (instruction, lookup_table_pubkey) = + instruction::create_lookup_table(authority, from_pubkey, slot); + let mut message = Message::new(&[instruction], None); + assert_eq!( + parse_address_lookup_table( + &message.instructions[0], + &AccountKeys::new(&message.account_keys, None) + ) + .unwrap(), + ParsedInstructionEnum { + instruction_type: "createLookupTable".to_string(), + info: json!({ + "lookupTableAccount": lookup_table_pubkey.to_string(), + "lookupTableAuthority": authority.to_string(), + "payerAccount": from_pubkey.to_string(), + "systemProgram": system_program::id().to_string(), + "recentSlot": slot, + "bumpSeed": 254, + }), + } + ); + assert!(parse_address_lookup_table( + &message.instructions[0], + &AccountKeys::new(&message.account_keys[0..3], None) + ) + .is_err()); + let keys = message.account_keys.clone(); + message.instructions[0].accounts.pop(); + assert!(parse_address_lookup_table( + &message.instructions[0], + &AccountKeys::new(&keys, None) + ) + .is_err()); + } + + #[test] + fn test_parse_freeze_lookup_table_ix() { + let lookup_table_pubkey = Pubkey::new_unique(); + let authority = Pubkey::new_unique(); + + let instruction = instruction::freeze_lookup_table(lookup_table_pubkey, authority); + let mut message = Message::new(&[instruction], None); + assert_eq!( + parse_address_lookup_table( + &message.instructions[0], + &AccountKeys::new(&message.account_keys, None) + ) + .unwrap(), + ParsedInstructionEnum { + instruction_type: "freezeLookupTable".to_string(), + info: json!({ + "lookupTableAccount": lookup_table_pubkey.to_string(), + "lookupTableAuthority": authority.to_string(), + }), + } + ); + assert!(parse_address_lookup_table( + &message.instructions[0], + &AccountKeys::new(&message.account_keys[0..1], None) + ) + .is_err()); + let keys = message.account_keys.clone(); + message.instructions[0].accounts.pop(); + assert!(parse_address_lookup_table( + &message.instructions[0], + &AccountKeys::new(&keys, None) + ) + .is_err()); + } + + #[test] + fn test_parse_extend_lookup_table_ix() { + let lookup_table_pubkey = Pubkey::new_unique(); + let authority = Pubkey::new_unique(); + let from_pubkey = Pubkey::new_unique(); + let no_addresses = vec![]; + let address0 = Pubkey::new_unique(); + let address1 = Pubkey::new_unique(); + let some_addresses = vec![address0, address1]; + + // No payer, no addresses + let instruction = + instruction::extend_lookup_table(lookup_table_pubkey, authority, None, no_addresses); + let mut message = Message::new(&[instruction], None); + assert_eq!( + parse_address_lookup_table( + &message.instructions[0], + &AccountKeys::new(&message.account_keys, None) + ) + .unwrap(), + ParsedInstructionEnum { + instruction_type: "extendLookupTable".to_string(), + info: json!({ + "lookupTableAccount": lookup_table_pubkey.to_string(), + "lookupTableAuthority": authority.to_string(), + "newAddresses": [], + }), + } + ); + assert!(parse_address_lookup_table( + &message.instructions[0], + &AccountKeys::new(&message.account_keys[0..1], None) + ) + .is_err()); + let keys = message.account_keys.clone(); + message.instructions[0].accounts.pop(); + assert!(parse_address_lookup_table( + &message.instructions[0], + &AccountKeys::new(&keys, None) + ) + .is_err()); + + // Some payer, some addresses + let instruction = instruction::extend_lookup_table( + lookup_table_pubkey, + authority, + Some(from_pubkey), + some_addresses, + ); + let mut message = Message::new(&[instruction], None); + assert_eq!( + parse_address_lookup_table( + &message.instructions[0], + &AccountKeys::new(&message.account_keys, None) + ) + .unwrap(), + ParsedInstructionEnum { + instruction_type: "extendLookupTable".to_string(), + info: json!({ + "lookupTableAccount": lookup_table_pubkey.to_string(), + "lookupTableAuthority": authority.to_string(), + "payerAccount": from_pubkey.to_string(), + "systemProgram": system_program::id().to_string(), + "newAddresses": [ + address0.to_string(), + address1.to_string(), + ], + }), + } + ); + assert!(parse_address_lookup_table( + &message.instructions[0], + &AccountKeys::new(&message.account_keys[0..1], None) + ) + .is_err()); + let keys = message.account_keys.clone(); + message.instructions[0].accounts.pop(); + message.instructions[0].accounts.pop(); + message.instructions[0].accounts.pop(); + assert!(parse_address_lookup_table( + &message.instructions[0], + &AccountKeys::new(&keys, None) + ) + .is_err()); + } + + #[test] + fn test_parse_deactivate_lookup_table_ix() { + let lookup_table_pubkey = Pubkey::new_unique(); + let authority = Pubkey::new_unique(); + + let instruction = instruction::deactivate_lookup_table(lookup_table_pubkey, authority); + let mut message = Message::new(&[instruction], None); + assert_eq!( + parse_address_lookup_table( + &message.instructions[0], + &AccountKeys::new(&message.account_keys, None) + ) + .unwrap(), + ParsedInstructionEnum { + instruction_type: "deactivateLookupTable".to_string(), + info: json!({ + "lookupTableAccount": lookup_table_pubkey.to_string(), + "lookupTableAuthority": authority.to_string(), + }), + } + ); + assert!(parse_address_lookup_table( + &message.instructions[0], + &AccountKeys::new(&message.account_keys[0..1], None) + ) + .is_err()); + let keys = message.account_keys.clone(); + message.instructions[0].accounts.pop(); + assert!(parse_address_lookup_table( + &message.instructions[0], + &AccountKeys::new(&keys, None) + ) + .is_err()); + } + + #[test] + fn test_parse_close_lookup_table_ix() { + let lookup_table_pubkey = Pubkey::new_unique(); + let authority = Pubkey::new_unique(); + let recipient = Pubkey::new_unique(); + + let instruction = + instruction::close_lookup_table(lookup_table_pubkey, authority, recipient); + let mut message = Message::new(&[instruction], None); + assert_eq!( + parse_address_lookup_table( + &message.instructions[0], + &AccountKeys::new(&message.account_keys, None) + ) + .unwrap(), + ParsedInstructionEnum { + instruction_type: "closeLookupTable".to_string(), + info: json!({ + "lookupTableAccount": lookup_table_pubkey.to_string(), + "lookupTableAuthority": authority.to_string(), + "recipient": recipient.to_string(), + }), + } + ); + assert!(parse_address_lookup_table( + &message.instructions[0], + &AccountKeys::new(&message.account_keys[0..2], None) + ) + .is_err()); + let keys = message.account_keys.clone(); + message.instructions[0].accounts.pop(); + assert!(parse_address_lookup_table( + &message.instructions[0], + &AccountKeys::new(&keys, None) + ) + .is_err()); + } +} diff --git a/transaction-status/src/parse_instruction.rs b/transaction-status/src/parse_instruction.rs index 29f812c418c875..4689e9c10600c4 100644 --- a/transaction-status/src/parse_instruction.rs +++ b/transaction-status/src/parse_instruction.rs @@ -1,6 +1,7 @@ use { crate::{ extract_memos::{spl_memo_id_v1, spl_memo_id_v3}, + parse_address_lookup_table::parse_address_lookup_table, parse_associated_token::{parse_associated_token, spl_associated_token_id}, parse_bpf_loader::{parse_bpf_loader, parse_bpf_upgradeable_loader}, parse_stake::parse_stake, @@ -23,6 +24,7 @@ use { }; lazy_static! { + static ref ADDRESS_LOOKUP_PROGRAM_ID: Pubkey = solana_address_lookup_table_program::id(); static ref ASSOCIATED_TOKEN_PROGRAM_ID: Pubkey = spl_associated_token_id(); static ref BPF_LOADER_PROGRAM_ID: Pubkey = solana_sdk::bpf_loader::id(); static ref BPF_UPGRADEABLE_LOADER_PROGRAM_ID: Pubkey = solana_sdk::bpf_loader_upgradeable::id(); @@ -33,6 +35,10 @@ lazy_static! { static ref VOTE_PROGRAM_ID: Pubkey = solana_vote_program::id(); static ref PARSABLE_PROGRAM_IDS: HashMap = { let mut m = HashMap::new(); + m.insert( + *ADDRESS_LOOKUP_PROGRAM_ID, + ParsableProgram::AddressLookupTable, + ); m.insert( *ASSOCIATED_TOKEN_PROGRAM_ID, ParsableProgram::SplAssociatedTokenAccount, @@ -89,6 +95,7 @@ pub struct ParsedInstructionEnum { #[derive(Debug, Serialize, Deserialize, PartialEq, Eq)] #[serde(rename_all = "camelCase")] pub enum ParsableProgram { + AddressLookupTable, SplAssociatedTokenAccount, SplMemo, SplToken, @@ -108,6 +115,9 @@ pub fn parse( .get(program_id) .ok_or(ParseInstructionError::ProgramNotParsable)?; let parsed_json = match program_name { + ParsableProgram::AddressLookupTable => { + serde_json::to_value(parse_address_lookup_table(instruction, account_keys)?)? + } ParsableProgram::SplAssociatedTokenAccount => { serde_json::to_value(parse_associated_token(instruction, account_keys)?)? } From 41eb7ec13c86998ca60b7ac015a57b7acf01cdef Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Sat, 1 Oct 2022 16:19:15 +0800 Subject: [PATCH 165/465] Support jsonParsed address lookup table accounts (backport #26723) (#28134) * Support jsonParsed address lookup table accounts (#26723) Parse address lookup table accounts (cherry picked from commit 80527e9c599a97061ec437ed93242a618d00fe5f) # Conflicts: # account-decoder/Cargo.toml * resolve conflicts Co-authored-by: Tyera Eulberg Co-authored-by: Justin Starry --- Cargo.lock | 1 + account-decoder/Cargo.toml | 1 + account-decoder/src/lib.rs | 1 + account-decoder/src/parse_account_data.rs | 10 ++ .../src/parse_address_lookup_table.rs | 117 ++++++++++++++++++ programs/bpf/Cargo.lock | 1 + 6 files changed, 131 insertions(+) create mode 100644 account-decoder/src/parse_address_lookup_table.rs diff --git a/Cargo.lock b/Cargo.lock index dcec1f99f294b5..74bc1d8b3e2fe2 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4487,6 +4487,7 @@ dependencies = [ "serde", "serde_derive", "serde_json", + "solana-address-lookup-table-program", "solana-config-program", "solana-sdk 1.14.4", "solana-vote-program", diff --git a/account-decoder/Cargo.toml b/account-decoder/Cargo.toml index 729bcf196e68b0..d3ef82fd216ec0 100644 --- a/account-decoder/Cargo.toml +++ b/account-decoder/Cargo.toml @@ -19,6 +19,7 @@ lazy_static = "1.4.0" serde = "1.0.138" serde_derive = "1.0.103" serde_json = "1.0.81" +solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.4" } solana-config-program = { path = "../programs/config", version = "=1.14.4" } solana-sdk = { path = "../sdk", version = "=1.14.4" } solana-vote-program = { path = "../programs/vote", version = "=1.14.4" } diff --git a/account-decoder/src/lib.rs b/account-decoder/src/lib.rs index b73b50d5286680..06c54a761a7e8d 100644 --- a/account-decoder/src/lib.rs +++ b/account-decoder/src/lib.rs @@ -5,6 +5,7 @@ extern crate lazy_static; extern crate serde_derive; pub mod parse_account_data; +pub mod parse_address_lookup_table; pub mod parse_bpf_loader; pub mod parse_config; pub mod parse_nonce; diff --git a/account-decoder/src/parse_account_data.rs b/account-decoder/src/parse_account_data.rs index 89d256dce7c28c..1ffdc4c0f0f11f 100644 --- a/account-decoder/src/parse_account_data.rs +++ b/account-decoder/src/parse_account_data.rs @@ -1,5 +1,6 @@ use { crate::{ + parse_address_lookup_table::parse_address_lookup_table, parse_bpf_loader::parse_bpf_upgradeable_loader, parse_config::parse_config, parse_nonce::parse_nonce, @@ -16,6 +17,7 @@ use { }; lazy_static! { + static ref ADDRESS_LOOKUP_PROGRAM_ID: Pubkey = solana_address_lookup_table_program::id(); static ref BPF_UPGRADEABLE_LOADER_PROGRAM_ID: Pubkey = solana_sdk::bpf_loader_upgradeable::id(); static ref CONFIG_PROGRAM_ID: Pubkey = solana_config_program::id(); static ref STAKE_PROGRAM_ID: Pubkey = stake::program::id(); @@ -24,6 +26,10 @@ lazy_static! { static ref VOTE_PROGRAM_ID: Pubkey = solana_vote_program::id(); pub static ref PARSABLE_PROGRAM_IDS: HashMap = { let mut m = HashMap::new(); + m.insert( + *ADDRESS_LOOKUP_PROGRAM_ID, + ParsableAccount::AddressLookupTable, + ); m.insert( *BPF_UPGRADEABLE_LOADER_PROGRAM_ID, ParsableAccount::BpfUpgradeableLoader, @@ -68,6 +74,7 @@ pub struct ParsedAccount { #[derive(Debug, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub enum ParsableAccount { + AddressLookupTable, BpfUpgradeableLoader, Config, Nonce, @@ -94,6 +101,9 @@ pub fn parse_account_data( .ok_or(ParseAccountError::ProgramNotParsable)?; let additional_data = additional_data.unwrap_or_default(); let parsed_json = match program_name { + ParsableAccount::AddressLookupTable => { + serde_json::to_value(parse_address_lookup_table(data)?)? + } ParsableAccount::BpfUpgradeableLoader => { serde_json::to_value(parse_bpf_upgradeable_loader(data)?)? } diff --git a/account-decoder/src/parse_address_lookup_table.rs b/account-decoder/src/parse_address_lookup_table.rs new file mode 100644 index 00000000000000..26955d74a74242 --- /dev/null +++ b/account-decoder/src/parse_address_lookup_table.rs @@ -0,0 +1,117 @@ +use { + crate::parse_account_data::{ParsableAccount, ParseAccountError}, + solana_address_lookup_table_program::state::AddressLookupTable, + solana_sdk::instruction::InstructionError, +}; + +pub fn parse_address_lookup_table( + data: &[u8], +) -> Result { + AddressLookupTable::deserialize(data) + .map(|address_lookup_table| { + LookupTableAccountType::LookupTable(address_lookup_table.into()) + }) + .or_else(|err| match err { + InstructionError::UninitializedAccount => Ok(LookupTableAccountType::Uninitialized), + _ => Err(ParseAccountError::AccountNotParsable( + ParsableAccount::AddressLookupTable, + )), + }) +} + +#[derive(Debug, Serialize, Deserialize, PartialEq)] +#[serde(rename_all = "camelCase", tag = "type", content = "info")] +pub enum LookupTableAccountType { + Uninitialized, + LookupTable(UiLookupTable), +} + +#[derive(Debug, Serialize, Deserialize, PartialEq, Eq)] +#[serde(rename_all = "camelCase")] +pub struct UiLookupTable { + pub deactivation_slot: String, + pub last_extended_slot: String, + pub last_extended_slot_start_index: u8, + #[serde(skip_serializing_if = "Option::is_none")] + pub authority: Option, + pub addresses: Vec, +} + +impl<'a> From> for UiLookupTable { + fn from(address_lookup_table: AddressLookupTable) -> Self { + Self { + deactivation_slot: address_lookup_table.meta.deactivation_slot.to_string(), + last_extended_slot: address_lookup_table.meta.last_extended_slot.to_string(), + last_extended_slot_start_index: address_lookup_table + .meta + .last_extended_slot_start_index, + authority: address_lookup_table + .meta + .authority + .map(|authority| authority.to_string()), + addresses: address_lookup_table + .addresses + .iter() + .map(|address| address.to_string()) + .collect(), + } + } +} + +#[cfg(test)] +mod test { + use { + super::*, + solana_address_lookup_table_program::state::{LookupTableMeta, LOOKUP_TABLE_META_SIZE}, + solana_sdk::pubkey::Pubkey, + std::borrow::Cow, + }; + + #[test] + fn test_parse_address_lookup_table() { + let authority = Pubkey::new_unique(); + let deactivation_slot = 1; + let last_extended_slot = 2; + let last_extended_slot_start_index = 3; + let lookup_table_meta = LookupTableMeta { + deactivation_slot, + last_extended_slot, + last_extended_slot_start_index, + authority: Some(authority), + ..LookupTableMeta::default() + }; + let num_addresses = 42; + let mut addresses = Vec::with_capacity(num_addresses); + addresses.resize_with(num_addresses, Pubkey::new_unique); + let lookup_table = AddressLookupTable { + meta: lookup_table_meta, + addresses: Cow::Owned(addresses), + }; + let lookup_table_data = + AddressLookupTable::serialize_for_tests(lookup_table.clone()).unwrap(); + + let parsing_result = parse_address_lookup_table(&lookup_table_data).unwrap(); + if let LookupTableAccountType::LookupTable(ui_lookup_table) = parsing_result { + assert_eq!( + ui_lookup_table.deactivation_slot, + deactivation_slot.to_string() + ); + assert_eq!( + ui_lookup_table.last_extended_slot, + last_extended_slot.to_string() + ); + assert_eq!( + ui_lookup_table.last_extended_slot_start_index, + last_extended_slot_start_index + ); + assert_eq!(ui_lookup_table.authority, Some(authority.to_string())); + assert_eq!(ui_lookup_table.addresses.len(), num_addresses); + } + + assert_eq!( + parse_address_lookup_table(&[0u8; LOOKUP_TABLE_META_SIZE]).unwrap(), + LookupTableAccountType::Uninitialized + ); + assert!(parse_address_lookup_table(&[]).is_err()); + } +} diff --git a/programs/bpf/Cargo.lock b/programs/bpf/Cargo.lock index 453dcfadbaff46..1d0032ba35833c 100644 --- a/programs/bpf/Cargo.lock +++ b/programs/bpf/Cargo.lock @@ -4074,6 +4074,7 @@ dependencies = [ "serde", "serde_derive", "serde_json", + "solana-address-lookup-table-program", "solana-config-program", "solana-sdk 1.14.4", "solana-vote-program", From 0a7006ae1668be7da284f038224ea6a18776ce4b Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Mon, 3 Oct 2022 13:14:15 +0000 Subject: [PATCH 166/465] Allow validators to reset to the slot which matches their last voted slot (backport #28172) (#28187) Allow validators to reset to the slot which matches their last voted slot (#28172) * Add failing test * Allow resetting to duplicate was confirmed * feedback * feedback * bump * simplify change * Revert "simplify change" This reverts commit 72e5de3e5bdac595f71dc7fc01650ca3bc7da98e. * update comment * Update core/src/replay_stage.rs (cherry picked from commit c2bb2b8e60ccbf176fc753963a98cc2cf95f53f7) Co-authored-by: Justin Starry --- core/src/heaviest_subtree_fork_choice.rs | 60 +++++---- core/src/replay_stage.rs | 151 ++++++++++++++++++++++- 2 files changed, 174 insertions(+), 37 deletions(-) diff --git a/core/src/heaviest_subtree_fork_choice.rs b/core/src/heaviest_subtree_fork_choice.rs index 96167eebe73967..f9c97f4adb893b 100644 --- a/core/src/heaviest_subtree_fork_choice.rs +++ b/core/src/heaviest_subtree_fork_choice.rs @@ -858,37 +858,32 @@ impl HeaviestSubtreeForkChoice { tower .last_voted_slot_hash() .and_then(|last_voted_slot_hash| { - let heaviest_slot_hash_on_same_voted_fork = self.best_slot(&last_voted_slot_hash); - if heaviest_slot_hash_on_same_voted_fork.is_none() { - if !tower.is_stray_last_vote() { - // Unless last vote is stray and stale, self.bast_slot(last_voted_slot) must return - // Some(_), justifying to panic! here. - // Also, adjust_lockouts_after_replay() correctly makes last_voted_slot None, - // if all saved votes are ancestors of replayed_root_slot. So this code shouldn't be - // touched in that case as well. - // In other words, except being stray, all other slots have been voted on while this - // validator has been running, so we must be able to fetch best_slots for all of - // them. - panic!( - "a bank at last_voted_slot({:?}) is a frozen bank so must have been \ - added to heaviest_subtree_fork_choice at time of freezing", - last_voted_slot_hash, - ) - } else { - // fork_infos doesn't have corresponding data for the stale stray last vote, - // meaning some inconsistency between saved tower and ledger. - // (newer snapshot, or only a saved tower is moved over to new setup?) - return None; + match self.is_candidate(&last_voted_slot_hash) { + Some(true) => self.best_slot(&last_voted_slot_hash), + Some(false) => None, + None => { + if !tower.is_stray_last_vote() { + // Unless last vote is stray and stale, self.is_candidate(last_voted_slot_hash) must return + // Some(_), justifying to panic! here. + // Also, adjust_lockouts_after_replay() correctly makes last_voted_slot None, + // if all saved votes are ancestors of replayed_root_slot. So this code shouldn't be + // touched in that case as well. + // In other words, except being stray, all other slots have been voted on while this + // validator has been running, so we must be able to fetch best_slots for all of + // them. + panic!( + "a bank at last_voted_slot({:?}) is a frozen bank so must have been \ + added to heaviest_subtree_fork_choice at time of freezing", + last_voted_slot_hash, + ) + } else { + // fork_infos doesn't have corresponding data for the stale stray last vote, + // meaning some inconsistency between saved tower and ledger. + // (newer snapshot, or only a saved tower is moved over to new setup?) + None + } } } - let heaviest_slot_hash_on_same_voted_fork = - heaviest_slot_hash_on_same_voted_fork.unwrap(); - - if heaviest_slot_hash_on_same_voted_fork == last_voted_slot_hash { - None - } else { - Some(heaviest_slot_hash_on_same_voted_fork) - } }) } @@ -2957,9 +2952,10 @@ mod test { // After marking the last vote in the tower as invalid, `heaviest_slot_on_same_voted_fork()` // should disregard all descendants of that invalid vote - assert!(heaviest_subtree_fork_choice - .heaviest_slot_on_same_voted_fork(&tower) - .is_none()); + assert_eq!( + heaviest_subtree_fork_choice.heaviest_slot_on_same_voted_fork(&tower), + None + ); // Adding another descendant to the invalid candidate won't // update the best slot, even if it contains votes diff --git a/core/src/replay_stage.rs b/core/src/replay_stage.rs index 880624ed182c69..ed8e474cf6503d 100644 --- a/core/src/replay_stage.rs +++ b/core/src/replay_stage.rs @@ -2902,9 +2902,18 @@ impl ReplayStage { ); } - // Given a heaviest bank, `heaviest_bank` and the next votable bank - // `heaviest_bank_on_same_voted_fork` as the validator's last vote, return - // a bank to vote on, a bank to reset to, + /// Given a `heaviest_bank` and a `heaviest_bank_on_same_voted_fork`, return + /// a bank to vote on, a bank to reset to, and a list of switch failure + /// reasons. + /// + /// If `heaviest_bank_on_same_voted_fork` is `None` due to that fork no + /// longer being valid to vote on, it's possible that a validator will not + /// be able to reset away from the invalid fork that they last voted on. To + /// resolve this scenario, validators need to wait until they can create a + /// switch proof for another fork or until the invalid fork is be marked + /// valid again if it was confirmed by the cluster. + /// Until this is resolved, leaders will build each of their + /// blocks from the last reset bank on the invalid fork. pub fn select_vote_and_reset_forks( heaviest_bank: &Arc, // Should only be None if there was no previous vote @@ -5605,6 +5614,139 @@ pub(crate) mod tests { ); } + #[test] + fn test_unconfirmed_duplicate_slots_and_lockouts_for_non_heaviest_fork() { + /* + Build fork structure: + + slot 0 + | + slot 1 + / \ + slot 2 | + | | + slot 3 | + | | + slot 4 | + slot 5 + */ + let forks = tr(0) / (tr(1) / (tr(2) / (tr(3) / (tr(4)))) / tr(5)); + + let mut vote_simulator = VoteSimulator::new(1); + vote_simulator.fill_bank_forks(forks, &HashMap::>::new(), true); + let (bank_forks, mut progress) = (vote_simulator.bank_forks, vote_simulator.progress); + let ledger_path = get_tmp_ledger_path!(); + let blockstore = Arc::new( + Blockstore::open(&ledger_path).expect("Expected to be able to open database ledger"), + ); + let mut tower = Tower::new_for_tests(8, 2.0 / 3.0); + + // All forks have same weight so heaviest bank to vote/reset on should be the tip of + // the fork with the lower slot + let (vote_fork, reset_fork) = run_compute_and_select_forks( + &bank_forks, + &mut progress, + &mut tower, + &mut vote_simulator.heaviest_subtree_fork_choice, + &mut vote_simulator.latest_validator_votes_for_frozen_banks, + ); + assert_eq!(vote_fork.unwrap(), 4); + assert_eq!(reset_fork.unwrap(), 4); + + // Record the vote for 5 which is not on the heaviest fork. + tower.record_bank_vote( + &bank_forks.read().unwrap().get(5).unwrap(), + &Pubkey::default(), + ); + + // 4 should be the heaviest slot, but should not be votable + // because of lockout. 5 is the heaviest slot on the same fork as the last vote. + let (vote_fork, reset_fork) = run_compute_and_select_forks( + &bank_forks, + &mut progress, + &mut tower, + &mut vote_simulator.heaviest_subtree_fork_choice, + &mut vote_simulator.latest_validator_votes_for_frozen_banks, + ); + assert!(vote_fork.is_none()); + assert_eq!(reset_fork, Some(5)); + + // Mark 5 as duplicate + blockstore.store_duplicate_slot(5, vec![], vec![]).unwrap(); + let mut duplicate_slots_tracker = DuplicateSlotsTracker::default(); + let mut gossip_duplicate_confirmed_slots = GossipDuplicateConfirmedSlots::default(); + let mut epoch_slots_frozen_slots = EpochSlotsFrozenSlots::default(); + let bank5_hash = bank_forks.read().unwrap().bank_hash(5).unwrap(); + assert_ne!(bank5_hash, Hash::default()); + let duplicate_state = DuplicateState::new_from_state( + 5, + &gossip_duplicate_confirmed_slots, + &mut vote_simulator.heaviest_subtree_fork_choice, + || progress.is_dead(5).unwrap_or(false), + || Some(bank5_hash), + ); + let (ancestor_hashes_replay_update_sender, _ancestor_hashes_replay_update_receiver) = + unbounded(); + check_slot_agrees_with_cluster( + 5, + bank_forks.read().unwrap().root(), + &blockstore, + &mut duplicate_slots_tracker, + &mut epoch_slots_frozen_slots, + &mut vote_simulator.heaviest_subtree_fork_choice, + &mut DuplicateSlotsToRepair::default(), + &ancestor_hashes_replay_update_sender, + SlotStateUpdate::Duplicate(duplicate_state), + ); + + // 4 should be the heaviest slot, but should not be votable + // because of lockout. 5 is no longer valid due to it being a duplicate. + let (vote_fork, reset_fork) = run_compute_and_select_forks( + &bank_forks, + &mut progress, + &mut tower, + &mut vote_simulator.heaviest_subtree_fork_choice, + &mut vote_simulator.latest_validator_votes_for_frozen_banks, + ); + assert!(vote_fork.is_none()); + assert!(reset_fork.is_none()); + + // If slot 5 is marked as confirmed, it becomes the heaviest bank on same slot again + let mut duplicate_slots_to_repair = DuplicateSlotsToRepair::default(); + gossip_duplicate_confirmed_slots.insert(5, bank5_hash); + let duplicate_confirmed_state = DuplicateConfirmedState::new_from_state( + bank5_hash, + || progress.is_dead(5).unwrap_or(false), + || Some(bank5_hash), + ); + check_slot_agrees_with_cluster( + 5, + bank_forks.read().unwrap().root(), + &blockstore, + &mut duplicate_slots_tracker, + &mut epoch_slots_frozen_slots, + &mut vote_simulator.heaviest_subtree_fork_choice, + &mut duplicate_slots_to_repair, + &ancestor_hashes_replay_update_sender, + SlotStateUpdate::DuplicateConfirmed(duplicate_confirmed_state), + ); + // The confirmed hash is detected in `progress`, which means + // it's confirmation on the replayed block. This means we have + // the right version of the block, so `duplicate_slots_to_repair` + // should be empty + assert!(duplicate_slots_to_repair.is_empty()); + let (vote_fork, reset_fork) = run_compute_and_select_forks( + &bank_forks, + &mut progress, + &mut tower, + &mut vote_simulator.heaviest_subtree_fork_choice, + &mut vote_simulator.latest_validator_votes_for_frozen_banks, + ); + // Should now pick 5 as the heaviest fork from last vote again. + assert!(vote_fork.is_none()); + assert_eq!(reset_fork.unwrap(), 5); + } + #[test] fn test_unconfirmed_duplicate_slots_and_lockouts() { /* @@ -5697,7 +5839,7 @@ pub(crate) mod tests { &mut vote_simulator.latest_validator_votes_for_frozen_banks, ); assert!(vote_fork.is_none()); - assert_eq!(reset_fork.unwrap(), 3); + assert_eq!(reset_fork, Some(3)); // Now mark 2, an ancestor of 4, as duplicate blockstore.store_duplicate_slot(2, vec![], vec![]).unwrap(); @@ -6778,7 +6920,6 @@ pub(crate) mod tests { ); let (heaviest_bank, heaviest_bank_on_same_fork) = heaviest_subtree_fork_choice .select_forks(&frozen_banks, tower, progress, ancestors, bank_forks); - assert!(heaviest_bank_on_same_fork.is_none()); let SelectVoteAndResetForkResult { vote_bank, reset_bank, From b05704983080069ea1af3f8e6a0cc1281736af5b Mon Sep 17 00:00:00 2001 From: ryleung-solana Date: Mon, 3 Oct 2022 16:05:43 +0000 Subject: [PATCH 167/465] Bump Version to 1.14.5 --- Cargo.lock | 484 ++++++++--------- account-decoder/Cargo.toml | 10 +- accounts-bench/Cargo.toml | 12 +- accounts-cluster-bench/Cargo.toml | 34 +- banking-bench/Cargo.toml | 26 +- banks-client/Cargo.toml | 12 +- banks-interface/Cargo.toml | 4 +- banks-server/Cargo.toml | 12 +- bench-streamer/Cargo.toml | 8 +- bench-tps/Cargo.toml | 38 +- bloom/Cargo.toml | 8 +- bucket_map/Cargo.toml | 8 +- clap-utils/Cargo.toml | 8 +- clap-v3-utils/Cargo.toml | 8 +- cli-config/Cargo.toml | 6 +- cli-output/Cargo.toml | 16 +- cli/Cargo.toml | 36 +- client-test/Cargo.toml | 32 +- client/Cargo.toml | 28 +- core/Cargo.toml | 56 +- dos/Cargo.toml | 30 +- download-utils/Cargo.toml | 6 +- entry/Cargo.toml | 16 +- faucet/Cargo.toml | 14 +- frozen-abi/Cargo.toml | 6 +- frozen-abi/macro/Cargo.toml | 2 +- genesis-utils/Cargo.toml | 8 +- genesis/Cargo.toml | 22 +- geyser-plugin-interface/Cargo.toml | 6 +- geyser-plugin-manager/Cargo.toml | 16 +- gossip/Cargo.toml | 38 +- install/Cargo.toml | 14 +- keygen/Cargo.toml | 12 +- ledger-tool/Cargo.toml | 30 +- ledger/Cargo.toml | 40 +- local-cluster/Cargo.toml | 28 +- log-analyzer/Cargo.toml | 6 +- logger/Cargo.toml | 2 +- measure/Cargo.toml | 4 +- merkle-root-bench/Cargo.toml | 12 +- merkle-tree/Cargo.toml | 4 +- metrics/Cargo.toml | 4 +- net-shaper/Cargo.toml | 4 +- net-utils/Cargo.toml | 8 +- notifier/Cargo.toml | 2 +- perf/Cargo.toml | 12 +- poh-bench/Cargo.toml | 14 +- poh/Cargo.toml | 20 +- program-runtime/Cargo.toml | 14 +- program-test/Cargo.toml | 18 +- .../address-lookup-table-tests/Cargo.toml | 8 +- programs/address-lookup-table/Cargo.toml | 12 +- programs/bpf-loader-tests/Cargo.toml | 8 +- programs/bpf/Cargo.lock | 490 +++++++++--------- programs/bpf/Cargo.toml | 28 +- programs/bpf/rust/128bit/Cargo.toml | 6 +- programs/bpf/rust/128bit_dep/Cargo.toml | 4 +- programs/bpf/rust/alloc/Cargo.toml | 4 +- programs/bpf/rust/call_depth/Cargo.toml | 4 +- programs/bpf/rust/caller_access/Cargo.toml | 4 +- programs/bpf/rust/curve25519/Cargo.toml | 6 +- programs/bpf/rust/custom_heap/Cargo.toml | 4 +- programs/bpf/rust/dep_crate/Cargo.toml | 6 +- .../bpf/rust/deprecated_loader/Cargo.toml | 4 +- programs/bpf/rust/dup_accounts/Cargo.toml | 4 +- programs/bpf/rust/error_handling/Cargo.toml | 4 +- programs/bpf/rust/external_spend/Cargo.toml | 4 +- programs/bpf/rust/finalize/Cargo.toml | 4 +- .../rust/get_minimum_delegation/Cargo.toml | 4 +- .../Cargo.toml | 4 +- .../rust/instruction_introspection/Cargo.toml | 4 +- programs/bpf/rust/invoke/Cargo.toml | 4 +- programs/bpf/rust/invoke_and_error/Cargo.toml | 4 +- programs/bpf/rust/invoke_and_ok/Cargo.toml | 4 +- .../bpf/rust/invoke_and_return/Cargo.toml | 4 +- programs/bpf/rust/invoked/Cargo.toml | 4 +- programs/bpf/rust/iter/Cargo.toml | 4 +- programs/bpf/rust/log_data/Cargo.toml | 4 +- programs/bpf/rust/many_args/Cargo.toml | 6 +- programs/bpf/rust/many_args_dep/Cargo.toml | 4 +- programs/bpf/rust/mem/Cargo.toml | 10 +- programs/bpf/rust/membuiltins/Cargo.toml | 6 +- programs/bpf/rust/noop/Cargo.toml | 4 +- programs/bpf/rust/panic/Cargo.toml | 4 +- programs/bpf/rust/param_passing/Cargo.toml | 6 +- .../bpf/rust/param_passing_dep/Cargo.toml | 4 +- programs/bpf/rust/rand/Cargo.toml | 4 +- programs/bpf/rust/realloc/Cargo.toml | 4 +- programs/bpf/rust/realloc_invoke/Cargo.toml | 6 +- .../bpf/rust/ro_account_modify/Cargo.toml | 4 +- programs/bpf/rust/ro_modify/Cargo.toml | 4 +- programs/bpf/rust/sanity/Cargo.toml | 10 +- .../bpf/rust/secp256k1_recover/Cargo.toml | 4 +- programs/bpf/rust/sha/Cargo.toml | 4 +- .../rust/sibling_inner_instruction/Cargo.toml | 4 +- .../bpf/rust/sibling_instruction/Cargo.toml | 4 +- programs/bpf/rust/simulation/Cargo.toml | 12 +- programs/bpf/rust/spoof1/Cargo.toml | 4 +- programs/bpf/rust/spoof1_system/Cargo.toml | 4 +- programs/bpf/rust/sysvar/Cargo.toml | 10 +- programs/bpf/rust/upgradeable/Cargo.toml | 4 +- programs/bpf/rust/upgraded/Cargo.toml | 4 +- programs/bpf_loader/Cargo.toml | 14 +- .../bpf_loader/gen-syscall-list/Cargo.toml | 2 +- programs/compute-budget/Cargo.toml | 6 +- programs/config/Cargo.toml | 8 +- programs/ed25519-tests/Cargo.toml | 6 +- programs/stake/Cargo.toml | 18 +- programs/vote/Cargo.toml | 14 +- programs/zk-token-proof/Cargo.toml | 8 +- rayon-threadlimit/Cargo.toml | 2 +- rbpf-cli/Cargo.toml | 10 +- remote-wallet/Cargo.toml | 4 +- rpc-test/Cargo.toml | 18 +- rpc/Cargo.toml | 48 +- runtime/Cargo.toml | 34 +- runtime/store-tool/Cargo.toml | 8 +- sdk/Cargo.toml | 12 +- sdk/cargo-build-bpf/Cargo.toml | 4 +- sdk/cargo-build-sbf/Cargo.toml | 8 +- .../tests/crates/fail/Cargo.toml | 4 +- .../tests/crates/noop/Cargo.toml | 4 +- sdk/cargo-test-bpf/Cargo.toml | 2 +- sdk/cargo-test-sbf/Cargo.toml | 2 +- sdk/gen-headers/Cargo.toml | 2 +- sdk/macro/Cargo.toml | 2 +- sdk/program/Cargo.toml | 10 +- send-transaction-service/Cargo.toml | 14 +- stake-accounts/Cargo.toml | 16 +- storage-bigtable/Cargo.toml | 10 +- storage-bigtable/build-proto/Cargo.lock | 2 +- storage-bigtable/build-proto/Cargo.toml | 2 +- storage-proto/Cargo.toml | 8 +- streamer/Cargo.toml | 10 +- sys-tuner/Cargo.toml | 6 +- test-validator/Cargo.toml | 28 +- tokens/Cargo.toml | 24 +- transaction-dos/Cargo.toml | 32 +- transaction-status/Cargo.toml | 14 +- upload-perf/Cargo.toml | 4 +- validator/Cargo.toml | 50 +- version/Cargo.toml | 8 +- watchtower/Cargo.toml | 20 +- zk-token-sdk/Cargo.toml | 6 +- 144 files changed, 1268 insertions(+), 1268 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 74bc1d8b3e2fe2..90f54b96bacc52 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1688,7 +1688,7 @@ dependencies = [ [[package]] name = "gen-headers" -version = "1.14.4" +version = "1.14.5" dependencies = [ "log", "regex", @@ -1696,7 +1696,7 @@ dependencies = [ [[package]] name = "gen-syscall-list" -version = "1.14.4" +version = "1.14.5" dependencies = [ "regex", ] @@ -3756,15 +3756,15 @@ dependencies = [ [[package]] name = "rbpf-cli" -version = "1.14.4" +version = "1.14.5" dependencies = [ "clap 3.1.8", "serde", "serde_json", "solana-bpf-loader-program", - "solana-logger 1.14.4", + "solana-logger 1.14.5", "solana-program-runtime", - "solana-sdk 1.14.4", + "solana-sdk 1.14.5", "solana_rbpf", ] @@ -4476,7 +4476,7 @@ dependencies = [ [[package]] name = "solana-account-decoder" -version = "1.14.4" +version = "1.14.5" dependencies = [ "Inflector", "base64 0.13.0", @@ -4489,7 +4489,7 @@ dependencies = [ "serde_json", "solana-address-lookup-table-program", "solana-config-program", - "solana-sdk 1.14.4", + "solana-sdk 1.14.5", "solana-vote-program", "spl-token", "spl-token-2022", @@ -4499,21 +4499,21 @@ dependencies = [ [[package]] name = "solana-accounts-bench" -version = "1.14.4" +version = "1.14.5" dependencies = [ "clap 2.33.3", "log", "rayon", - "solana-logger 1.14.4", + "solana-logger 1.14.5", "solana-measure", "solana-runtime", - "solana-sdk 1.14.4", + "solana-sdk 1.14.5", "solana-version", ] [[package]] name = "solana-accounts-cluster-bench" -version = "1.14.4" +version = "1.14.5" dependencies = [ "clap 2.33.3", "log", @@ -4526,11 +4526,11 @@ dependencies = [ "solana-faucet", "solana-gossip", "solana-local-cluster", - "solana-logger 1.14.4", + "solana-logger 1.14.5", "solana-measure", "solana-net-utils", "solana-runtime", - "solana-sdk 1.14.4", + "solana-sdk 1.14.5", "solana-streamer", "solana-test-validator", "solana-transaction-status", @@ -4540,7 +4540,7 @@ dependencies = [ [[package]] name = "solana-address-lookup-table-program" -version = "1.14.4" +version = "1.14.5" dependencies = [ "bincode", "bytemuck", @@ -4549,28 +4549,28 @@ dependencies = [ "num-traits", "rustc_version 0.4.0", "serde", - "solana-frozen-abi 1.14.4", - "solana-frozen-abi-macro 1.14.4", - "solana-program 1.14.4", + "solana-frozen-abi 1.14.5", + "solana-frozen-abi-macro 1.14.5", + "solana-program 1.14.5", "solana-program-runtime", - "solana-sdk 1.14.4", + "solana-sdk 1.14.5", "thiserror", ] [[package]] name = "solana-address-lookup-table-program-tests" -version = "1.14.4" +version = "1.14.5" dependencies = [ "assert_matches", "bincode", "solana-address-lookup-table-program", "solana-program-test", - "solana-sdk 1.14.4", + "solana-sdk 1.14.5", ] [[package]] name = "solana-banking-bench" -version = "1.14.4" +version = "1.14.5" dependencies = [ "clap 3.1.8", "crossbeam-channel", @@ -4581,27 +4581,27 @@ dependencies = [ "solana-core", "solana-gossip", "solana-ledger", - "solana-logger 1.14.4", + "solana-logger 1.14.5", "solana-measure", "solana-perf", "solana-poh", "solana-runtime", - "solana-sdk 1.14.4", + "solana-sdk 1.14.5", "solana-streamer", "solana-version", ] [[package]] name = "solana-banks-client" -version = "1.14.4" +version = "1.14.5" dependencies = [ "borsh", "futures 0.3.21", "solana-banks-interface", "solana-banks-server", - "solana-program 1.14.4", + "solana-program 1.14.5", "solana-runtime", - "solana-sdk 1.14.4", + "solana-sdk 1.14.5", "tarpc", "thiserror", "tokio", @@ -4610,16 +4610,16 @@ dependencies = [ [[package]] name = "solana-banks-interface" -version = "1.14.4" +version = "1.14.5" dependencies = [ "serde", - "solana-sdk 1.14.4", + "solana-sdk 1.14.5", "tarpc", ] [[package]] name = "solana-banks-server" -version = "1.14.4" +version = "1.14.5" dependencies = [ "bincode", "crossbeam-channel", @@ -4627,7 +4627,7 @@ dependencies = [ "solana-banks-interface", "solana-client", "solana-runtime", - "solana-sdk 1.14.4", + "solana-sdk 1.14.5", "solana-send-transaction-service", "tarpc", "tokio", @@ -4637,7 +4637,7 @@ dependencies = [ [[package]] name = "solana-bench-streamer" -version = "1.14.4" +version = "1.14.5" dependencies = [ "clap 3.1.8", "crossbeam-channel", @@ -4648,7 +4648,7 @@ dependencies = [ [[package]] name = "solana-bench-tps" -version = "1.14.4" +version = "1.14.5" dependencies = [ "clap 2.33.3", "crossbeam-channel", @@ -4665,13 +4665,13 @@ dependencies = [ "solana-genesis", "solana-gossip", "solana-local-cluster", - "solana-logger 1.14.4", + "solana-logger 1.14.5", "solana-measure", "solana-metrics", "solana-net-utils", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.4", + "solana-sdk 1.14.5", "solana-streamer", "solana-test-validator", "solana-version", @@ -4680,7 +4680,7 @@ dependencies = [ [[package]] name = "solana-bloom" -version = "1.14.4" +version = "1.14.5" dependencies = [ "bv", "fnv", @@ -4690,14 +4690,14 @@ dependencies = [ "rustc_version 0.4.0", "serde", "serde_derive", - "solana-frozen-abi 1.14.4", - "solana-frozen-abi-macro 1.14.4", - "solana-sdk 1.14.4", + "solana-frozen-abi 1.14.5", + "solana-frozen-abi-macro 1.14.5", + "solana-sdk 1.14.5", ] [[package]] name = "solana-bpf-loader-program" -version = "1.14.4" +version = "1.14.5" dependencies = [ "bincode", "byteorder", @@ -4708,26 +4708,26 @@ dependencies = [ "solana-metrics", "solana-program-runtime", "solana-runtime", - "solana-sdk 1.14.4", - "solana-zk-token-sdk 1.14.4", + "solana-sdk 1.14.5", + "solana-zk-token-sdk 1.14.5", "solana_rbpf", "thiserror", ] [[package]] name = "solana-bpf-loader-program-tests" -version = "1.14.4" +version = "1.14.5" dependencies = [ "assert_matches", "bincode", "solana-bpf-loader-program", "solana-program-test", - "solana-sdk 1.14.4", + "solana-sdk 1.14.5", ] [[package]] name = "solana-bucket-map" -version = "1.14.4" +version = "1.14.5" dependencies = [ "fs_extra", "log", @@ -4735,24 +4735,24 @@ dependencies = [ "modular-bitfield", "rand 0.7.3", "rayon", - "solana-logger 1.14.4", + "solana-logger 1.14.5", "solana-measure", - "solana-sdk 1.14.4", + "solana-sdk 1.14.5", "tempfile", ] [[package]] name = "solana-cargo-build-bpf" -version = "1.14.4" +version = "1.14.5" dependencies = [ "cargo_metadata", "clap 3.1.8", - "solana-sdk 1.14.4", + "solana-sdk 1.14.5", ] [[package]] name = "solana-cargo-build-sbf" -version = "1.14.4" +version = "1.14.5" dependencies = [ "bzip2", "cargo_metadata", @@ -4761,14 +4761,14 @@ dependencies = [ "regex", "serial_test", "solana-download-utils", - "solana-logger 1.14.4", - "solana-sdk 1.14.4", + "solana-logger 1.14.5", + "solana-sdk 1.14.5", "tar", ] [[package]] name = "solana-cargo-test-bpf" -version = "1.14.4" +version = "1.14.5" dependencies = [ "cargo_metadata", "clap 3.1.8", @@ -4776,7 +4776,7 @@ dependencies = [ [[package]] name = "solana-cargo-test-sbf" -version = "1.14.4" +version = "1.14.5" dependencies = [ "cargo_metadata", "clap 3.1.8", @@ -4784,14 +4784,14 @@ dependencies = [ [[package]] name = "solana-clap-utils" -version = "1.14.4" +version = "1.14.5" dependencies = [ "chrono", "clap 2.33.3", "rpassword", "solana-perf", "solana-remote-wallet", - "solana-sdk 1.14.4", + "solana-sdk 1.14.5", "tempfile", "thiserror", "tiny-bip39", @@ -4801,14 +4801,14 @@ dependencies = [ [[package]] name = "solana-clap-v3-utils" -version = "1.14.4" +version = "1.14.5" dependencies = [ "chrono", "clap 3.1.8", "rpassword", "solana-perf", "solana-remote-wallet", - "solana-sdk 1.14.4", + "solana-sdk 1.14.5", "tempfile", "thiserror", "tiny-bip39", @@ -4818,7 +4818,7 @@ dependencies = [ [[package]] name = "solana-cli" -version = "1.14.4" +version = "1.14.5" dependencies = [ "bincode", "bs58", @@ -4845,10 +4845,10 @@ dependencies = [ "solana-client", "solana-config-program", "solana-faucet", - "solana-logger 1.14.4", + "solana-logger 1.14.5", "solana-program-runtime", "solana-remote-wallet", - "solana-sdk 1.14.4", + "solana-sdk 1.14.5", "solana-streamer", "solana-test-validator", "solana-transaction-status", @@ -4863,7 +4863,7 @@ dependencies = [ [[package]] name = "solana-cli-config" -version = "1.14.4" +version = "1.14.5" dependencies = [ "anyhow", "dirs-next", @@ -4872,13 +4872,13 @@ dependencies = [ "serde_derive", "serde_yaml", "solana-clap-utils", - "solana-sdk 1.14.4", + "solana-sdk 1.14.5", "url 2.2.2", ] [[package]] name = "solana-cli-output" -version = "1.14.4" +version = "1.14.5" dependencies = [ "Inflector", "base64 0.13.0", @@ -4896,7 +4896,7 @@ dependencies = [ "solana-clap-utils", "solana-cli-config", "solana-client", - "solana-sdk 1.14.4", + "solana-sdk 1.14.5", "solana-transaction-status", "solana-vote-program", "spl-memo", @@ -4904,7 +4904,7 @@ dependencies = [ [[package]] name = "solana-client" -version = "1.14.4" +version = "1.14.5" dependencies = [ "anyhow", "assert_matches", @@ -4940,12 +4940,12 @@ dependencies = [ "solana-account-decoder", "solana-clap-utils", "solana-faucet", - "solana-logger 1.14.4", + "solana-logger 1.14.5", "solana-measure", "solana-metrics", "solana-net-utils", "solana-perf", - "solana-sdk 1.14.4", + "solana-sdk 1.14.5", "solana-streamer", "solana-transaction-status", "solana-version", @@ -4961,14 +4961,14 @@ dependencies = [ [[package]] name = "solana-client-test" -version = "1.14.4" +version = "1.14.5" dependencies = [ "futures-util", "serde_json", "serial_test", "solana-client", "solana-ledger", - "solana-logger 1.14.4", + "solana-logger 1.14.5", "solana-measure", "solana-merkle-tree", "solana-metrics", @@ -4976,7 +4976,7 @@ dependencies = [ "solana-rayon-threadlimit", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.4", + "solana-sdk 1.14.5", "solana-streamer", "solana-test-validator", "solana-transaction-status", @@ -4987,28 +4987,28 @@ dependencies = [ [[package]] name = "solana-compute-budget-program" -version = "1.14.4" +version = "1.14.5" dependencies = [ "solana-program-runtime", - "solana-sdk 1.14.4", + "solana-sdk 1.14.5", ] [[package]] name = "solana-config-program" -version = "1.14.4" +version = "1.14.5" dependencies = [ "bincode", "chrono", "serde", "serde_derive", - "solana-logger 1.14.4", + "solana-logger 1.14.5", "solana-program-runtime", - "solana-sdk 1.14.4", + "solana-sdk 1.14.5", ] [[package]] name = "solana-core" -version = "1.14.4" +version = "1.14.5" dependencies = [ "ahash", "base64 0.13.0", @@ -5040,12 +5040,12 @@ dependencies = [ "solana-bloom", "solana-client", "solana-entry", - "solana-frozen-abi 1.14.4", - "solana-frozen-abi-macro 1.14.4", + "solana-frozen-abi 1.14.5", + "solana-frozen-abi-macro 1.14.5", "solana-geyser-plugin-manager", "solana-gossip", "solana-ledger", - "solana-logger 1.14.4", + "solana-logger 1.14.5", "solana-measure", "solana-metrics", "solana-net-utils", @@ -5055,7 +5055,7 @@ dependencies = [ "solana-rayon-threadlimit", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.4", + "solana-sdk 1.14.5", "solana-send-transaction-service", "solana-stake-program", "solana-streamer", @@ -5075,7 +5075,7 @@ dependencies = [ [[package]] name = "solana-dos" -version = "1.14.4" +version = "1.14.5" dependencies = [ "bincode", "clap 3.1.8", @@ -5091,42 +5091,42 @@ dependencies = [ "solana-faucet", "solana-gossip", "solana-local-cluster", - "solana-logger 1.14.4", + "solana-logger 1.14.5", "solana-measure", "solana-net-utils", "solana-perf", "solana-rpc", - "solana-sdk 1.14.4", + "solana-sdk 1.14.5", "solana-streamer", "solana-version", ] [[package]] name = "solana-download-utils" -version = "1.14.4" +version = "1.14.5" dependencies = [ "console", "indicatif", "log", "reqwest", "solana-runtime", - "solana-sdk 1.14.4", + "solana-sdk 1.14.5", ] [[package]] name = "solana-ed25519-program-tests" -version = "1.14.4" +version = "1.14.5" dependencies = [ "assert_matches", "ed25519-dalek", "rand 0.7.3", "solana-program-test", - "solana-sdk 1.14.4", + "solana-sdk 1.14.5", ] [[package]] name = "solana-entry" -version = "1.14.4" +version = "1.14.5" dependencies = [ "bincode", "crossbeam-channel", @@ -5138,18 +5138,18 @@ dependencies = [ "rand 0.7.3", "rayon", "serde", - "solana-logger 1.14.4", + "solana-logger 1.14.5", "solana-measure", "solana-merkle-tree", "solana-metrics", "solana-perf", "solana-rayon-threadlimit", - "solana-sdk 1.14.4", + "solana-sdk 1.14.5", ] [[package]] name = "solana-faucet" -version = "1.14.4" +version = "1.14.5" dependencies = [ "bincode", "byteorder", @@ -5160,9 +5160,9 @@ dependencies = [ "serde_derive", "solana-clap-utils", "solana-cli-config", - "solana-logger 1.14.4", + "solana-logger 1.14.5", "solana-metrics", - "solana-sdk 1.14.4", + "solana-sdk 1.14.5", "solana-version", "spl-memo", "thiserror", @@ -5193,7 +5193,7 @@ dependencies = [ [[package]] name = "solana-frozen-abi" -version = "1.14.4" +version = "1.14.5" dependencies = [ "ahash", "blake3", @@ -5218,8 +5218,8 @@ dependencies = [ "serde_derive", "serde_json", "sha2 0.10.2", - "solana-frozen-abi-macro 1.14.4", - "solana-logger 1.14.4", + "solana-frozen-abi-macro 1.14.5", + "solana-logger 1.14.5", "subtle", "thiserror", ] @@ -5238,7 +5238,7 @@ dependencies = [ [[package]] name = "solana-frozen-abi-macro" -version = "1.14.4" +version = "1.14.5" dependencies = [ "proc-macro2 1.0.41", "quote 1.0.18", @@ -5248,7 +5248,7 @@ dependencies = [ [[package]] name = "solana-genesis" -version = "1.14.4" +version = "1.14.5" dependencies = [ "base64 0.13.0", "clap 2.33.3", @@ -5259,9 +5259,9 @@ dependencies = [ "solana-cli-config", "solana-entry", "solana-ledger", - "solana-logger 1.14.4", + "solana-logger 1.14.5", "solana-runtime", - "solana-sdk 1.14.4", + "solana-sdk 1.14.5", "solana-stake-program", "solana-version", "solana-vote-program", @@ -5270,26 +5270,26 @@ dependencies = [ [[package]] name = "solana-genesis-utils" -version = "1.14.4" +version = "1.14.5" dependencies = [ "solana-download-utils", "solana-runtime", - "solana-sdk 1.14.4", + "solana-sdk 1.14.5", ] [[package]] name = "solana-geyser-plugin-interface" -version = "1.14.4" +version = "1.14.5" dependencies = [ "log", - "solana-sdk 1.14.4", + "solana-sdk 1.14.5", "solana-transaction-status", "thiserror", ] [[package]] name = "solana-geyser-plugin-manager" -version = "1.14.4" +version = "1.14.5" dependencies = [ "bs58", "crossbeam-channel", @@ -5302,14 +5302,14 @@ dependencies = [ "solana-metrics", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.4", + "solana-sdk 1.14.5", "solana-transaction-status", "thiserror", ] [[package]] name = "solana-gossip" -version = "1.14.4" +version = "1.14.5" dependencies = [ "bincode", "bv", @@ -5336,17 +5336,17 @@ dependencies = [ "solana-clap-utils", "solana-client", "solana-entry", - "solana-frozen-abi 1.14.4", - "solana-frozen-abi-macro 1.14.4", + "solana-frozen-abi 1.14.5", + "solana-frozen-abi-macro 1.14.5", "solana-ledger", - "solana-logger 1.14.4", + "solana-logger 1.14.5", "solana-measure", "solana-metrics", "solana-net-utils", "solana-perf", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.14.4", + "solana-sdk 1.14.5", "solana-streamer", "solana-version", "solana-vote-program", @@ -5355,7 +5355,7 @@ dependencies = [ [[package]] name = "solana-install" -version = "1.14.4" +version = "1.14.5" dependencies = [ "atty", "bincode", @@ -5376,8 +5376,8 @@ dependencies = [ "solana-clap-utils", "solana-client", "solana-config-program", - "solana-logger 1.14.4", - "solana-sdk 1.14.4", + "solana-logger 1.14.5", + "solana-sdk 1.14.5", "solana-version", "tar", "tempfile", @@ -5388,7 +5388,7 @@ dependencies = [ [[package]] name = "solana-keygen" -version = "1.14.4" +version = "1.14.5" dependencies = [ "bs58", "clap 3.1.8", @@ -5397,14 +5397,14 @@ dependencies = [ "solana-clap-v3-utils", "solana-cli-config", "solana-remote-wallet", - "solana-sdk 1.14.4", + "solana-sdk 1.14.5", "solana-version", "tiny-bip39", ] [[package]] name = "solana-ledger" -version = "1.14.4" +version = "1.14.5" dependencies = [ "assert_matches", "bincode", @@ -5438,16 +5438,16 @@ dependencies = [ "solana-account-decoder", "solana-bpf-loader-program", "solana-entry", - "solana-frozen-abi 1.14.4", - "solana-frozen-abi-macro 1.14.4", - "solana-logger 1.14.4", + "solana-frozen-abi 1.14.5", + "solana-frozen-abi-macro 1.14.5", + "solana-logger 1.14.5", "solana-measure", "solana-metrics", "solana-perf", "solana-program-runtime", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.14.4", + "solana-sdk 1.14.5", "solana-stake-program", "solana-storage-bigtable", "solana-storage-proto", @@ -5466,7 +5466,7 @@ dependencies = [ [[package]] name = "solana-ledger-tool" -version = "1.14.4" +version = "1.14.5" dependencies = [ "assert_cmd", "bs58", @@ -5488,10 +5488,10 @@ dependencies = [ "solana-core", "solana-entry", "solana-ledger", - "solana-logger 1.14.4", + "solana-logger 1.14.5", "solana-measure", "solana-runtime", - "solana-sdk 1.14.4", + "solana-sdk 1.14.5", "solana-stake-program", "solana-storage-bigtable", "solana-transaction-status", @@ -5503,7 +5503,7 @@ dependencies = [ [[package]] name = "solana-local-cluster" -version = "1.14.4" +version = "1.14.5" dependencies = [ "assert_matches", "crossbeam-channel", @@ -5521,9 +5521,9 @@ dependencies = [ "solana-entry", "solana-gossip", "solana-ledger", - "solana-logger 1.14.4", + "solana-logger 1.14.5", "solana-runtime", - "solana-sdk 1.14.4", + "solana-sdk 1.14.5", "solana-stake-program", "solana-streamer", "solana-vote-program", @@ -5532,13 +5532,13 @@ dependencies = [ [[package]] name = "solana-log-analyzer" -version = "1.14.4" +version = "1.14.5" dependencies = [ "byte-unit", "clap 3.1.8", "serde", "serde_json", - "solana-logger 1.14.4", + "solana-logger 1.14.5", "solana-version", ] @@ -5555,7 +5555,7 @@ dependencies = [ [[package]] name = "solana-logger" -version = "1.14.4" +version = "1.14.5" dependencies = [ "env_logger", "lazy_static", @@ -5564,38 +5564,38 @@ dependencies = [ [[package]] name = "solana-measure" -version = "1.14.4" +version = "1.14.5" dependencies = [ "log", - "solana-sdk 1.14.4", + "solana-sdk 1.14.5", ] [[package]] name = "solana-merkle-root-bench" -version = "1.14.4" +version = "1.14.5" dependencies = [ "clap 2.33.3", "log", - "solana-logger 1.14.4", + "solana-logger 1.14.5", "solana-measure", "solana-runtime", - "solana-sdk 1.14.4", + "solana-sdk 1.14.5", "solana-version", ] [[package]] name = "solana-merkle-tree" -version = "1.14.4" +version = "1.14.5" dependencies = [ "fast-math", "hex", "matches", - "solana-program 1.14.4", + "solana-program 1.14.5", ] [[package]] name = "solana-metrics" -version = "1.14.4" +version = "1.14.5" dependencies = [ "crossbeam-channel", "env_logger", @@ -5605,23 +5605,23 @@ dependencies = [ "rand 0.7.3", "reqwest", "serial_test", - "solana-sdk 1.14.4", + "solana-sdk 1.14.5", ] [[package]] name = "solana-net-shaper" -version = "1.14.4" +version = "1.14.5" dependencies = [ "clap 3.1.8", "rand 0.7.3", "serde", "serde_json", - "solana-logger 1.14.4", + "solana-logger 1.14.5", ] [[package]] name = "solana-net-utils" -version = "1.14.4" +version = "1.14.5" dependencies = [ "bincode", "clap 3.1.8", @@ -5632,8 +5632,8 @@ dependencies = [ "serde", "serde_derive", "socket2", - "solana-logger 1.14.4", - "solana-sdk 1.14.4", + "solana-logger 1.14.5", + "solana-sdk 1.14.5", "solana-version", "tokio", "url 2.2.2", @@ -5641,7 +5641,7 @@ dependencies = [ [[package]] name = "solana-notifier" -version = "1.14.4" +version = "1.14.5" dependencies = [ "log", "reqwest", @@ -5650,7 +5650,7 @@ dependencies = [ [[package]] name = "solana-perf" -version = "1.14.4" +version = "1.14.5" dependencies = [ "ahash", "bincode", @@ -5668,16 +5668,16 @@ dependencies = [ "rand 0.7.3", "rayon", "serde", - "solana-logger 1.14.4", + "solana-logger 1.14.5", "solana-metrics", "solana-rayon-threadlimit", - "solana-sdk 1.14.4", + "solana-sdk 1.14.5", "solana-vote-program", ] [[package]] name = "solana-poh" -version = "1.14.4" +version = "1.14.5" dependencies = [ "bincode", "core_affinity", @@ -5687,29 +5687,29 @@ dependencies = [ "rand 0.7.3", "solana-entry", "solana-ledger", - "solana-logger 1.14.4", + "solana-logger 1.14.5", "solana-measure", "solana-metrics", "solana-perf", "solana-runtime", - "solana-sdk 1.14.4", + "solana-sdk 1.14.5", "solana-sys-tuner", "thiserror", ] [[package]] name = "solana-poh-bench" -version = "1.14.4" +version = "1.14.5" dependencies = [ "clap 3.1.8", "log", "rand 0.7.3", "rayon", "solana-entry", - "solana-logger 1.14.4", + "solana-logger 1.14.5", "solana-measure", "solana-perf", - "solana-sdk 1.14.4", + "solana-sdk 1.14.5", "solana-version", ] @@ -5757,7 +5757,7 @@ dependencies = [ [[package]] name = "solana-program" -version = "1.14.4" +version = "1.14.5" dependencies = [ "anyhow", "assert_matches", @@ -5795,10 +5795,10 @@ dependencies = [ "serde_json", "sha2 0.10.2", "sha3 0.10.1", - "solana-frozen-abi 1.14.4", - "solana-frozen-abi-macro 1.14.4", - "solana-logger 1.14.4", - "solana-sdk-macro 1.14.4", + "solana-frozen-abi 1.14.5", + "solana-frozen-abi-macro 1.14.5", + "solana-logger 1.14.5", + "solana-sdk-macro 1.14.5", "static_assertions", "thiserror", "tiny-bip39", @@ -5808,7 +5808,7 @@ dependencies = [ [[package]] name = "solana-program-runtime" -version = "1.14.4" +version = "1.14.5" dependencies = [ "base64 0.13.0", "bincode", @@ -5822,18 +5822,18 @@ dependencies = [ "num-traits", "rustc_version 0.4.0", "serde", - "solana-frozen-abi 1.14.4", - "solana-frozen-abi-macro 1.14.4", - "solana-logger 1.14.4", + "solana-frozen-abi 1.14.5", + "solana-frozen-abi-macro 1.14.5", + "solana-logger 1.14.5", "solana-measure", "solana-metrics", - "solana-sdk 1.14.4", + "solana-sdk 1.14.5", "thiserror", ] [[package]] name = "solana-program-test" -version = "1.14.4" +version = "1.14.5" dependencies = [ "assert_matches", "async-trait", @@ -5845,10 +5845,10 @@ dependencies = [ "solana-banks-client", "solana-banks-server", "solana-bpf-loader-program", - "solana-logger 1.14.4", + "solana-logger 1.14.5", "solana-program-runtime", "solana-runtime", - "solana-sdk 1.14.4", + "solana-sdk 1.14.5", "solana-vote-program", "thiserror", "tokio", @@ -5856,7 +5856,7 @@ dependencies = [ [[package]] name = "solana-rayon-threadlimit" -version = "1.14.4" +version = "1.14.5" dependencies = [ "lazy_static", "num_cpus", @@ -5864,7 +5864,7 @@ dependencies = [ [[package]] name = "solana-remote-wallet" -version = "1.14.4" +version = "1.14.5" dependencies = [ "console", "dialoguer", @@ -5875,14 +5875,14 @@ dependencies = [ "parking_lot 0.12.1", "qstring", "semver 1.0.10", - "solana-sdk 1.14.4", + "solana-sdk 1.14.5", "thiserror", "uriparse", ] [[package]] name = "solana-rpc" -version = "1.14.4" +version = "1.14.5" dependencies = [ "base64 0.13.0", "bincode", @@ -5918,7 +5918,7 @@ dependencies = [ "solana-poh", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.14.4", + "solana-sdk 1.14.5", "solana-send-transaction-service", "solana-stake-program", "solana-storage-bigtable", @@ -5937,7 +5937,7 @@ dependencies = [ [[package]] name = "solana-rpc-test" -version = "1.14.4" +version = "1.14.5" dependencies = [ "bincode", "bs58", @@ -5949,9 +5949,9 @@ dependencies = [ "serde_json", "solana-account-decoder", "solana-client", - "solana-logger 1.14.4", + "solana-logger 1.14.5", "solana-rpc", - "solana-sdk 1.14.4", + "solana-sdk 1.14.5", "solana-streamer", "solana-test-validator", "solana-transaction-status", @@ -5960,7 +5960,7 @@ dependencies = [ [[package]] name = "solana-runtime" -version = "1.14.4" +version = "1.14.5" dependencies = [ "arrayref", "assert_matches", @@ -6000,18 +6000,18 @@ dependencies = [ "solana-bucket-map", "solana-compute-budget-program", "solana-config-program", - "solana-frozen-abi 1.14.4", - "solana-frozen-abi-macro 1.14.4", - "solana-logger 1.14.4", + "solana-frozen-abi 1.14.5", + "solana-frozen-abi-macro 1.14.5", + "solana-logger 1.14.5", "solana-measure", "solana-metrics", "solana-program-runtime", "solana-rayon-threadlimit", - "solana-sdk 1.14.4", + "solana-sdk 1.14.5", "solana-stake-program", "solana-vote-program", "solana-zk-token-proof-program", - "solana-zk-token-sdk 1.14.4", + "solana-zk-token-sdk 1.14.5", "strum", "strum_macros", "symlink", @@ -6074,7 +6074,7 @@ dependencies = [ [[package]] name = "solana-sdk" -version = "1.14.4" +version = "1.14.5" dependencies = [ "anyhow", "assert_matches", @@ -6114,11 +6114,11 @@ dependencies = [ "serde_json", "sha2 0.10.2", "sha3 0.10.1", - "solana-frozen-abi 1.14.4", - "solana-frozen-abi-macro 1.14.4", - "solana-logger 1.14.4", - "solana-program 1.14.4", - "solana-sdk-macro 1.14.4", + "solana-frozen-abi 1.14.5", + "solana-frozen-abi-macro 1.14.5", + "solana-logger 1.14.5", + "solana-program 1.14.5", + "solana-sdk-macro 1.14.5", "static_assertions", "thiserror", "tiny-bip39", @@ -6141,7 +6141,7 @@ dependencies = [ [[package]] name = "solana-sdk-macro" -version = "1.14.4" +version = "1.14.5" dependencies = [ "bs58", "proc-macro2 1.0.41", @@ -6152,21 +6152,21 @@ dependencies = [ [[package]] name = "solana-send-transaction-service" -version = "1.14.4" +version = "1.14.5" dependencies = [ "crossbeam-channel", "log", "solana-client", - "solana-logger 1.14.4", + "solana-logger 1.14.5", "solana-measure", "solana-metrics", "solana-runtime", - "solana-sdk 1.14.4", + "solana-sdk 1.14.5", ] [[package]] name = "solana-stake-accounts" -version = "1.14.4" +version = "1.14.5" dependencies = [ "clap 2.33.3", "solana-clap-utils", @@ -6174,13 +6174,13 @@ dependencies = [ "solana-client", "solana-remote-wallet", "solana-runtime", - "solana-sdk 1.14.4", + "solana-sdk 1.14.5", "solana-stake-program", ] [[package]] name = "solana-stake-program" -version = "1.14.4" +version = "1.14.5" dependencies = [ "assert_matches", "bincode", @@ -6192,12 +6192,12 @@ dependencies = [ "serde", "serde_derive", "solana-config-program", - "solana-frozen-abi 1.14.4", - "solana-frozen-abi-macro 1.14.4", - "solana-logger 1.14.4", + "solana-frozen-abi 1.14.5", + "solana-frozen-abi-macro 1.14.5", + "solana-logger 1.14.5", "solana-metrics", "solana-program-runtime", - "solana-sdk 1.14.4", + "solana-sdk 1.14.5", "solana-vote-program", "test-case", "thiserror", @@ -6205,7 +6205,7 @@ dependencies = [ [[package]] name = "solana-storage-bigtable" -version = "1.14.4" +version = "1.14.5" dependencies = [ "backoff", "bincode", @@ -6226,7 +6226,7 @@ dependencies = [ "serde_derive", "smpl_jwt", "solana-metrics", - "solana-sdk 1.14.4", + "solana-sdk 1.14.5", "solana-storage-proto", "solana-transaction-status", "thiserror", @@ -6237,7 +6237,7 @@ dependencies = [ [[package]] name = "solana-storage-proto" -version = "1.14.4" +version = "1.14.5" dependencies = [ "bincode", "bs58", @@ -6246,25 +6246,25 @@ dependencies = [ "protobuf-src", "serde", "solana-account-decoder", - "solana-sdk 1.14.4", + "solana-sdk 1.14.5", "solana-transaction-status", "tonic-build 0.8.0", ] [[package]] name = "solana-store-tool" -version = "1.14.4" +version = "1.14.5" dependencies = [ "clap 2.33.3", "log", - "solana-logger 1.14.4", + "solana-logger 1.14.5", "solana-runtime", "solana-version", ] [[package]] name = "solana-streamer" -version = "1.14.4" +version = "1.14.5" dependencies = [ "crossbeam-channel", "futures-util", @@ -6281,10 +6281,10 @@ dependencies = [ "rand 0.7.3", "rcgen", "rustls 0.20.6", - "solana-logger 1.14.4", + "solana-logger 1.14.5", "solana-metrics", "solana-perf", - "solana-sdk 1.14.4", + "solana-sdk 1.14.5", "thiserror", "tokio", "x509-parser", @@ -6292,13 +6292,13 @@ dependencies = [ [[package]] name = "solana-sys-tuner" -version = "1.14.4" +version = "1.14.5" dependencies = [ "clap 2.33.3", "libc", "log", "nix", - "solana-logger 1.14.4", + "solana-logger 1.14.5", "solana-version", "sysctl", "unix_socket2", @@ -6307,7 +6307,7 @@ dependencies = [ [[package]] name = "solana-test-validator" -version = "1.14.4" +version = "1.14.5" dependencies = [ "base64 0.13.0", "log", @@ -6318,20 +6318,20 @@ dependencies = [ "solana-core", "solana-gossip", "solana-ledger", - "solana-logger 1.14.4", + "solana-logger 1.14.5", "solana-net-utils", "solana-program-runtime", "solana-program-test", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.4", + "solana-sdk 1.14.5", "solana-streamer", "tokio", ] [[package]] name = "solana-tokens" -version = "1.14.4" +version = "1.14.5" dependencies = [ "bincode", "chrono", @@ -6347,9 +6347,9 @@ dependencies = [ "solana-clap-utils", "solana-cli-config", "solana-client", - "solana-logger 1.14.4", + "solana-logger 1.14.5", "solana-remote-wallet", - "solana-sdk 1.14.4", + "solana-sdk 1.14.5", "solana-streamer", "solana-test-validator", "solana-transaction-status", @@ -6362,7 +6362,7 @@ dependencies = [ [[package]] name = "solana-transaction-dos" -version = "1.14.4" +version = "1.14.5" dependencies = [ "bincode", "clap 2.33.3", @@ -6376,11 +6376,11 @@ dependencies = [ "solana-faucet", "solana-gossip", "solana-local-cluster", - "solana-logger 1.14.4", + "solana-logger 1.14.5", "solana-measure", "solana-net-utils", "solana-runtime", - "solana-sdk 1.14.4", + "solana-sdk 1.14.5", "solana-streamer", "solana-transaction-status", "solana-version", @@ -6388,7 +6388,7 @@ dependencies = [ [[package]] name = "solana-transaction-status" -version = "1.14.4" +version = "1.14.5" dependencies = [ "Inflector", "base64 0.13.0", @@ -6404,7 +6404,7 @@ dependencies = [ "solana-address-lookup-table-program", "solana-measure", "solana-metrics", - "solana-sdk 1.14.4", + "solana-sdk 1.14.5", "solana-vote-program", "spl-associated-token-account", "spl-memo", @@ -6415,7 +6415,7 @@ dependencies = [ [[package]] name = "solana-upload-perf" -version = "1.14.4" +version = "1.14.5" dependencies = [ "serde_json", "solana-metrics", @@ -6423,7 +6423,7 @@ dependencies = [ [[package]] name = "solana-validator" -version = "1.14.4" +version = "1.14.5" dependencies = [ "chrono", "clap 2.33.3", @@ -6454,14 +6454,14 @@ dependencies = [ "solana-genesis-utils", "solana-gossip", "solana-ledger", - "solana-logger 1.14.4", + "solana-logger 1.14.5", "solana-metrics", "solana-net-utils", "solana-perf", "solana-poh", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.4", + "solana-sdk 1.14.5", "solana-send-transaction-service", "solana-storage-bigtable", "solana-streamer", @@ -6474,21 +6474,21 @@ dependencies = [ [[package]] name = "solana-version" -version = "1.14.4" +version = "1.14.5" dependencies = [ "log", "rustc_version 0.4.0", "semver 1.0.10", "serde", "serde_derive", - "solana-frozen-abi 1.14.4", - "solana-frozen-abi-macro 1.14.4", - "solana-sdk 1.14.4", + "solana-frozen-abi 1.14.5", + "solana-frozen-abi-macro 1.14.5", + "solana-sdk 1.14.5", ] [[package]] name = "solana-vote-program" -version = "1.14.4" +version = "1.14.5" dependencies = [ "bincode", "itertools", @@ -6499,18 +6499,18 @@ dependencies = [ "rustc_version 0.4.0", "serde", "serde_derive", - "solana-frozen-abi 1.14.4", - "solana-frozen-abi-macro 1.14.4", - "solana-logger 1.14.4", + "solana-frozen-abi 1.14.5", + "solana-frozen-abi-macro 1.14.5", + "solana-logger 1.14.5", "solana-metrics", "solana-program-runtime", - "solana-sdk 1.14.4", + "solana-sdk 1.14.5", "thiserror", ] [[package]] name = "solana-watchtower" -version = "1.14.4" +version = "1.14.5" dependencies = [ "clap 2.33.3", "humantime", @@ -6519,24 +6519,24 @@ dependencies = [ "solana-cli-config", "solana-cli-output", "solana-client", - "solana-logger 1.14.4", + "solana-logger 1.14.5", "solana-metrics", "solana-notifier", - "solana-sdk 1.14.4", + "solana-sdk 1.14.5", "solana-version", ] [[package]] name = "solana-zk-token-proof-program" -version = "1.14.4" +version = "1.14.5" dependencies = [ "bytemuck", "getrandom 0.1.16", "num-derive", "num-traits", "solana-program-runtime", - "solana-sdk 1.14.4", - "solana-zk-token-sdk 1.14.4", + "solana-sdk 1.14.5", + "solana-zk-token-sdk 1.14.5", ] [[package]] @@ -6571,7 +6571,7 @@ dependencies = [ [[package]] name = "solana-zk-token-sdk" -version = "1.14.4" +version = "1.14.5" dependencies = [ "aes-gcm-siv", "arrayref", @@ -6591,8 +6591,8 @@ dependencies = [ "serde", "serde_json", "sha3 0.9.1", - "solana-program 1.14.4", - "solana-sdk 1.14.4", + "solana-program 1.14.5", + "solana-sdk 1.14.5", "subtle", "thiserror", "zeroize", diff --git a/account-decoder/Cargo.toml b/account-decoder/Cargo.toml index d3ef82fd216ec0..b3d7ab60588adf 100644 --- a/account-decoder/Cargo.toml +++ b/account-decoder/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-account-decoder" -version = "1.14.4" +version = "1.14.5" description = "Solana account decoder" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -19,10 +19,10 @@ lazy_static = "1.4.0" serde = "1.0.138" serde_derive = "1.0.103" serde_json = "1.0.81" -solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.4" } -solana-config-program = { path = "../programs/config", version = "=1.14.4" } -solana-sdk = { path = "../sdk", version = "=1.14.4" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.4" } +solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.5" } +solana-config-program = { path = "../programs/config", version = "=1.14.5" } +solana-sdk = { path = "../sdk", version = "=1.14.5" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.5" } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } spl-token-2022 = { version = "=0.4.2", features = ["no-entrypoint"] } thiserror = "1.0" diff --git a/accounts-bench/Cargo.toml b/accounts-bench/Cargo.toml index 7ad31932cda103..f00d53c4e77ed7 100644 --- a/accounts-bench/Cargo.toml +++ b/accounts-bench/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-accounts-bench" -version = "1.14.4" +version = "1.14.5" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -12,11 +12,11 @@ publish = false clap = "2.33.1" log = "0.4.17" rayon = "1.5.3" -solana-logger = { path = "../logger", version = "=1.14.4" } -solana-measure = { path = "../measure", version = "=1.14.4" } -solana-runtime = { path = "../runtime", version = "=1.14.4" } -solana-sdk = { path = "../sdk", version = "=1.14.4" } -solana-version = { path = "../version", version = "=1.14.4" } +solana-logger = { path = "../logger", version = "=1.14.5" } +solana-measure = { path = "../measure", version = "=1.14.5" } +solana-runtime = { path = "../runtime", version = "=1.14.5" } +solana-sdk = { path = "../sdk", version = "=1.14.5" } +solana-version = { path = "../version", version = "=1.14.5" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/accounts-cluster-bench/Cargo.toml b/accounts-cluster-bench/Cargo.toml index b158169f6c03f0..b101cefcc0c06b 100644 --- a/accounts-cluster-bench/Cargo.toml +++ b/accounts-cluster-bench/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-accounts-cluster-bench" -version = "1.14.4" +version = "1.14.5" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -13,25 +13,25 @@ clap = "2.33.1" log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.4" } -solana-clap-utils = { path = "../clap-utils", version = "=1.14.4" } -solana-client = { path = "../client", version = "=1.14.4" } -solana-faucet = { path = "../faucet", version = "=1.14.4" } -solana-gossip = { path = "../gossip", version = "=1.14.4" } -solana-logger = { path = "../logger", version = "=1.14.4" } -solana-measure = { path = "../measure", version = "=1.14.4" } -solana-net-utils = { path = "../net-utils", version = "=1.14.4" } -solana-runtime = { path = "../runtime", version = "=1.14.4" } -solana-sdk = { path = "../sdk", version = "=1.14.4" } -solana-streamer = { path = "../streamer", version = "=1.14.4" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.4" } -solana-version = { path = "../version", version = "=1.14.4" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.5" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.5" } +solana-client = { path = "../client", version = "=1.14.5" } +solana-faucet = { path = "../faucet", version = "=1.14.5" } +solana-gossip = { path = "../gossip", version = "=1.14.5" } +solana-logger = { path = "../logger", version = "=1.14.5" } +solana-measure = { path = "../measure", version = "=1.14.5" } +solana-net-utils = { path = "../net-utils", version = "=1.14.5" } +solana-runtime = { path = "../runtime", version = "=1.14.5" } +solana-sdk = { path = "../sdk", version = "=1.14.5" } +solana-streamer = { path = "../streamer", version = "=1.14.5" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.5" } +solana-version = { path = "../version", version = "=1.14.5" } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } [dev-dependencies] -solana-core = { path = "../core", version = "=1.14.4" } -solana-local-cluster = { path = "../local-cluster", version = "=1.14.4" } -solana-test-validator = { path = "../test-validator", version = "=1.14.4" } +solana-core = { path = "../core", version = "=1.14.5" } +solana-local-cluster = { path = "../local-cluster", version = "=1.14.5" } +solana-test-validator = { path = "../test-validator", version = "=1.14.5" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/banking-bench/Cargo.toml b/banking-bench/Cargo.toml index edc21f7e7f0da8..387b15ba545dd9 100644 --- a/banking-bench/Cargo.toml +++ b/banking-bench/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-banking-bench" -version = "1.14.4" +version = "1.14.5" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,18 +14,18 @@ crossbeam-channel = "0.5" log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" -solana-client = { path = "../client", version = "=1.14.4" } -solana-core = { path = "../core", version = "=1.14.4" } -solana-gossip = { path = "../gossip", version = "=1.14.4" } -solana-ledger = { path = "../ledger", version = "=1.14.4" } -solana-logger = { path = "../logger", version = "=1.14.4" } -solana-measure = { path = "../measure", version = "=1.14.4" } -solana-perf = { path = "../perf", version = "=1.14.4" } -solana-poh = { path = "../poh", version = "=1.14.4" } -solana-runtime = { path = "../runtime", version = "=1.14.4" } -solana-sdk = { path = "../sdk", version = "=1.14.4" } -solana-streamer = { path = "../streamer", version = "=1.14.4" } -solana-version = { path = "../version", version = "=1.14.4" } +solana-client = { path = "../client", version = "=1.14.5" } +solana-core = { path = "../core", version = "=1.14.5" } +solana-gossip = { path = "../gossip", version = "=1.14.5" } +solana-ledger = { path = "../ledger", version = "=1.14.5" } +solana-logger = { path = "../logger", version = "=1.14.5" } +solana-measure = { path = "../measure", version = "=1.14.5" } +solana-perf = { path = "../perf", version = "=1.14.5" } +solana-poh = { path = "../poh", version = "=1.14.5" } +solana-runtime = { path = "../runtime", version = "=1.14.5" } +solana-sdk = { path = "../sdk", version = "=1.14.5" } +solana-streamer = { path = "../streamer", version = "=1.14.5" } +solana-version = { path = "../version", version = "=1.14.5" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/banks-client/Cargo.toml b/banks-client/Cargo.toml index a2a301076eafb3..c05c05fe759701 100644 --- a/banks-client/Cargo.toml +++ b/banks-client/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-banks-client" -version = "1.14.4" +version = "1.14.5" description = "Solana banks client" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,17 +12,17 @@ edition = "2021" [dependencies] borsh = "0.9.3" futures = "0.3" -solana-banks-interface = { path = "../banks-interface", version = "=1.14.4" } -solana-program = { path = "../sdk/program", version = "=1.14.4" } -solana-sdk = { path = "../sdk", version = "=1.14.4" } +solana-banks-interface = { path = "../banks-interface", version = "=1.14.5" } +solana-program = { path = "../sdk/program", version = "=1.14.5" } +solana-sdk = { path = "../sdk", version = "=1.14.5" } tarpc = { version = "0.29.0", features = ["full"] } thiserror = "1.0" tokio = { version = "~1.14.1", features = ["full"] } tokio-serde = { version = "0.8", features = ["bincode"] } [dev-dependencies] -solana-banks-server = { path = "../banks-server", version = "=1.14.4" } -solana-runtime = { path = "../runtime", version = "=1.14.4" } +solana-banks-server = { path = "../banks-server", version = "=1.14.5" } +solana-runtime = { path = "../runtime", version = "=1.14.5" } [lib] crate-type = ["lib"] diff --git a/banks-interface/Cargo.toml b/banks-interface/Cargo.toml index 6e3b9a4be2adaf..aa5b571e55f34c 100644 --- a/banks-interface/Cargo.toml +++ b/banks-interface/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-banks-interface" -version = "1.14.4" +version = "1.14.5" description = "Solana banks RPC interface" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -11,7 +11,7 @@ edition = "2021" [dependencies] serde = { version = "1.0.138", features = ["derive"] } -solana-sdk = { path = "../sdk", version = "=1.14.4" } +solana-sdk = { path = "../sdk", version = "=1.14.5" } tarpc = { version = "0.29.0", features = ["full"] } [lib] diff --git a/banks-server/Cargo.toml b/banks-server/Cargo.toml index 3eaeb32fcbbe3d..b3c7f60c7c50ed 100644 --- a/banks-server/Cargo.toml +++ b/banks-server/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-banks-server" -version = "1.14.4" +version = "1.14.5" description = "Solana banks server" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,11 +13,11 @@ edition = "2021" bincode = "1.3.3" crossbeam-channel = "0.5" futures = "0.3" -solana-banks-interface = { path = "../banks-interface", version = "=1.14.4" } -solana-client = { path = "../client", version = "=1.14.4" } -solana-runtime = { path = "../runtime", version = "=1.14.4" } -solana-sdk = { path = "../sdk", version = "=1.14.4" } -solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.4" } +solana-banks-interface = { path = "../banks-interface", version = "=1.14.5" } +solana-client = { path = "../client", version = "=1.14.5" } +solana-runtime = { path = "../runtime", version = "=1.14.5" } +solana-sdk = { path = "../sdk", version = "=1.14.5" } +solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.5" } tarpc = { version = "0.29.0", features = ["full"] } tokio = { version = "1", features = ["full"] } tokio-serde = { version = "0.8", features = ["bincode"] } diff --git a/bench-streamer/Cargo.toml b/bench-streamer/Cargo.toml index 9b6a4d5f48c55f..dba8f0a190e4d3 100644 --- a/bench-streamer/Cargo.toml +++ b/bench-streamer/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-bench-streamer" -version = "1.14.4" +version = "1.14.5" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -11,9 +11,9 @@ publish = false [dependencies] clap = { version = "3.1.5", features = ["cargo"] } crossbeam-channel = "0.5" -solana-net-utils = { path = "../net-utils", version = "=1.14.4" } -solana-streamer = { path = "../streamer", version = "=1.14.4" } -solana-version = { path = "../version", version = "=1.14.4" } +solana-net-utils = { path = "../net-utils", version = "=1.14.5" } +solana-streamer = { path = "../streamer", version = "=1.14.5" } +solana-version = { path = "../version", version = "=1.14.5" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/bench-tps/Cargo.toml b/bench-tps/Cargo.toml index ee2bdb35aa6e64..6d1de30a1c7490 100644 --- a/bench-tps/Cargo.toml +++ b/bench-tps/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-bench-tps" -version = "1.14.4" +version = "1.14.5" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -15,28 +15,28 @@ log = "0.4.17" rayon = "1.5.3" serde_json = "1.0.81" serde_yaml = "0.8.26" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.4" } -solana-cli-config = { path = "../cli-config", version = "=1.14.4" } -solana-client = { path = "../client", version = "=1.14.4" } -solana-core = { path = "../core", version = "=1.14.4" } -solana-faucet = { path = "../faucet", version = "=1.14.4" } -solana-genesis = { path = "../genesis", version = "=1.14.4" } -solana-gossip = { path = "../gossip", version = "=1.14.4" } -solana-logger = { path = "../logger", version = "=1.14.4" } -solana-measure = { path = "../measure", version = "=1.14.4" } -solana-metrics = { path = "../metrics", version = "=1.14.4" } -solana-net-utils = { path = "../net-utils", version = "=1.14.4" } -solana-rpc = { path = "../rpc", version = "=1.14.4" } -solana-runtime = { path = "../runtime", version = "=1.14.4" } -solana-sdk = { path = "../sdk", version = "=1.14.4" } -solana-streamer = { path = "../streamer", version = "=1.14.4" } -solana-version = { path = "../version", version = "=1.14.4" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.5" } +solana-cli-config = { path = "../cli-config", version = "=1.14.5" } +solana-client = { path = "../client", version = "=1.14.5" } +solana-core = { path = "../core", version = "=1.14.5" } +solana-faucet = { path = "../faucet", version = "=1.14.5" } +solana-genesis = { path = "../genesis", version = "=1.14.5" } +solana-gossip = { path = "../gossip", version = "=1.14.5" } +solana-logger = { path = "../logger", version = "=1.14.5" } +solana-measure = { path = "../measure", version = "=1.14.5" } +solana-metrics = { path = "../metrics", version = "=1.14.5" } +solana-net-utils = { path = "../net-utils", version = "=1.14.5" } +solana-rpc = { path = "../rpc", version = "=1.14.5" } +solana-runtime = { path = "../runtime", version = "=1.14.5" } +solana-sdk = { path = "../sdk", version = "=1.14.5" } +solana-streamer = { path = "../streamer", version = "=1.14.5" } +solana-version = { path = "../version", version = "=1.14.5" } thiserror = "1.0" [dev-dependencies] serial_test = "0.8.0" -solana-local-cluster = { path = "../local-cluster", version = "=1.14.4" } -solana-test-validator = { path = "../test-validator", version = "=1.14.4" } +solana-local-cluster = { path = "../local-cluster", version = "=1.14.5" } +solana-test-validator = { path = "../test-validator", version = "=1.14.5" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/bloom/Cargo.toml b/bloom/Cargo.toml index 5fc28d72469d92..7148de970af05c 100644 --- a/bloom/Cargo.toml +++ b/bloom/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bloom" -version = "1.14.4" +version = "1.14.5" description = "Solana bloom filter" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -17,9 +17,9 @@ rand = "0.7.0" rayon = "1.5.3" serde = { version = "1.0.138", features = ["rc"] } serde_derive = "1.0.103" -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.4" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.4" } -solana-sdk = { path = "../sdk", version = "=1.14.4" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.5" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.5" } +solana-sdk = { path = "../sdk", version = "=1.14.5" } [lib] crate-type = ["lib"] diff --git a/bucket_map/Cargo.toml b/bucket_map/Cargo.toml index bfcb7b5ccf6834..f7c338331ae9e1 100644 --- a/bucket_map/Cargo.toml +++ b/bucket_map/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bucket-map" -version = "1.14.4" +version = "1.14.5" description = "solana-bucket-map" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-bucket-map" @@ -15,14 +15,14 @@ log = { version = "0.4.17" } memmap2 = "0.5.3" modular-bitfield = "0.11.2" rand = "0.7.0" -solana-measure = { path = "../measure", version = "=1.14.4" } -solana-sdk = { path = "../sdk", version = "=1.14.4" } +solana-measure = { path = "../measure", version = "=1.14.5" } +solana-sdk = { path = "../sdk", version = "=1.14.5" } tempfile = "3.3.0" [dev-dependencies] fs_extra = "1.2.0" rayon = "1.5.3" -solana-logger = { path = "../logger", version = "=1.14.4" } +solana-logger = { path = "../logger", version = "=1.14.5" } [lib] crate-type = ["lib"] diff --git a/clap-utils/Cargo.toml b/clap-utils/Cargo.toml index dfa31b46c45238..1ed2001abb7dd2 100644 --- a/clap-utils/Cargo.toml +++ b/clap-utils/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-clap-utils" -version = "1.14.4" +version = "1.14.5" description = "Solana utilities for the clap" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,9 +13,9 @@ edition = "2021" chrono = "0.4" clap = "2.33.0" rpassword = "6.0" -solana-perf = { path = "../perf", version = "=1.14.4" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.4", default-features = false } -solana-sdk = { path = "../sdk", version = "=1.14.4" } +solana-perf = { path = "../perf", version = "=1.14.5" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.5", default-features = false } +solana-sdk = { path = "../sdk", version = "=1.14.5" } thiserror = "1.0.31" tiny-bip39 = "0.8.2" uriparse = "0.6.4" diff --git a/clap-v3-utils/Cargo.toml b/clap-v3-utils/Cargo.toml index 350abe2b32b813..3c849664033752 100644 --- a/clap-v3-utils/Cargo.toml +++ b/clap-v3-utils/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-clap-v3-utils" -version = "1.14.4" +version = "1.14.5" description = "Solana utilities for the clap v3" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,9 +13,9 @@ edition = "2021" chrono = "0.4" clap = { version = "3.1.5", features = ["cargo"] } rpassword = "6.0" -solana-perf = { path = "../perf", version = "=1.14.4" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.4", default-features = false } -solana-sdk = { path = "../sdk", version = "=1.14.4" } +solana-perf = { path = "../perf", version = "=1.14.5" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.5", default-features = false } +solana-sdk = { path = "../sdk", version = "=1.14.5" } thiserror = "1.0.31" tiny-bip39 = "0.8.2" uriparse = "0.6.4" diff --git a/cli-config/Cargo.toml b/cli-config/Cargo.toml index 9b5feac3a4b115..ecd4965f38459a 100644 --- a/cli-config/Cargo.toml +++ b/cli-config/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-cli-config" description = "Blockchain, Rebuilt for Scale" -version = "1.14.4" +version = "1.14.5" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -15,8 +15,8 @@ lazy_static = "1.4.0" serde = "1.0.138" serde_derive = "1.0.103" serde_yaml = "0.8.26" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.4" } -solana-sdk = { path = "../sdk", version = "=1.14.4" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.5" } +solana-sdk = { path = "../sdk", version = "=1.14.5" } url = "2.2.2" [dev-dependencies] diff --git a/cli-output/Cargo.toml b/cli-output/Cargo.toml index 50126c78e930d2..a37942d0d9fdb6 100644 --- a/cli-output/Cargo.toml +++ b/cli-output/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-cli-output" description = "Blockchain, Rebuilt for Scale" -version = "1.14.4" +version = "1.14.5" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -21,13 +21,13 @@ pretty-hex = "0.3.0" semver = "1.0.10" serde = "1.0.138" serde_json = "1.0.81" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.4" } -solana-clap-utils = { path = "../clap-utils", version = "=1.14.4" } -solana-cli-config = { path = "../cli-config", version = "=1.14.4" } -solana-client = { path = "../client", version = "=1.14.4" } -solana-sdk = { path = "../sdk", version = "=1.14.4" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.4" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.4" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.5" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.5" } +solana-cli-config = { path = "../cli-config", version = "=1.14.5" } +solana-client = { path = "../client", version = "=1.14.5" } +solana-sdk = { path = "../sdk", version = "=1.14.5" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.5" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.5" } spl-memo = { version = "=3.0.1", features = ["no-entrypoint"] } [dev-dependencies] diff --git a/cli/Cargo.toml b/cli/Cargo.toml index ec088fd31a4fa5..68a69732be4bf0 100644 --- a/cli/Cargo.toml +++ b/cli/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-cli" description = "Blockchain, Rebuilt for Scale" -version = "1.14.4" +version = "1.14.5" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -27,29 +27,29 @@ semver = "1.0.10" serde = "1.0.138" serde_derive = "1.0.103" serde_json = "1.0.81" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.4" } -solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.4" } -solana-clap-utils = { path = "../clap-utils", version = "=1.14.4" } -solana-cli-config = { path = "../cli-config", version = "=1.14.4" } -solana-cli-output = { path = "../cli-output", version = "=1.14.4" } -solana-client = { path = "../client", version = "=1.14.4" } -solana-config-program = { path = "../programs/config", version = "=1.14.4" } -solana-faucet = { path = "../faucet", version = "=1.14.4" } -solana-logger = { path = "../logger", version = "=1.14.4" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.4" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.4" } -solana-sdk = { path = "../sdk", version = "=1.14.4" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.4" } -solana-version = { path = "../version", version = "=1.14.4" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.4" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.5" } +solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.5" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.5" } +solana-cli-config = { path = "../cli-config", version = "=1.14.5" } +solana-cli-output = { path = "../cli-output", version = "=1.14.5" } +solana-client = { path = "../client", version = "=1.14.5" } +solana-config-program = { path = "../programs/config", version = "=1.14.5" } +solana-faucet = { path = "../faucet", version = "=1.14.5" } +solana-logger = { path = "../logger", version = "=1.14.5" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.5" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.5" } +solana-sdk = { path = "../sdk", version = "=1.14.5" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.5" } +solana-version = { path = "../version", version = "=1.14.5" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.5" } solana_rbpf = "=0.2.31" spl-memo = { version = "=3.0.1", features = ["no-entrypoint"] } thiserror = "1.0.31" tiny-bip39 = "0.8.2" [dev-dependencies] -solana-streamer = { path = "../streamer", version = "=1.14.4" } -solana-test-validator = { path = "../test-validator", version = "=1.14.4" } +solana-streamer = { path = "../streamer", version = "=1.14.5" } +solana-test-validator = { path = "../test-validator", version = "=1.14.5" } tempfile = "3.3.0" [[bin]] diff --git a/client-test/Cargo.toml b/client-test/Cargo.toml index 34941ca6c0c460..1fc1d08e99574a 100644 --- a/client-test/Cargo.toml +++ b/client-test/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-client-test" -version = "1.14.4" +version = "1.14.5" description = "Solana RPC Test" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,25 +14,25 @@ publish = false futures-util = "0.3.21" serde_json = "1.0.81" serial_test = "0.8.0" -solana-client = { path = "../client", version = "=1.14.4" } -solana-ledger = { path = "../ledger", version = "=1.14.4" } -solana-measure = { path = "../measure", version = "=1.14.4" } -solana-merkle-tree = { path = "../merkle-tree", version = "=1.14.4" } -solana-metrics = { path = "../metrics", version = "=1.14.4" } -solana-perf = { path = "../perf", version = "=1.14.4" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.4" } -solana-rpc = { path = "../rpc", version = "=1.14.4" } -solana-runtime = { path = "../runtime", version = "=1.14.4" } -solana-sdk = { path = "../sdk", version = "=1.14.4" } -solana-streamer = { path = "../streamer", version = "=1.14.4" } -solana-test-validator = { path = "../test-validator", version = "=1.14.4" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.4" } -solana-version = { path = "../version", version = "=1.14.4" } +solana-client = { path = "../client", version = "=1.14.5" } +solana-ledger = { path = "../ledger", version = "=1.14.5" } +solana-measure = { path = "../measure", version = "=1.14.5" } +solana-merkle-tree = { path = "../merkle-tree", version = "=1.14.5" } +solana-metrics = { path = "../metrics", version = "=1.14.5" } +solana-perf = { path = "../perf", version = "=1.14.5" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.5" } +solana-rpc = { path = "../rpc", version = "=1.14.5" } +solana-runtime = { path = "../runtime", version = "=1.14.5" } +solana-sdk = { path = "../sdk", version = "=1.14.5" } +solana-streamer = { path = "../streamer", version = "=1.14.5" } +solana-test-validator = { path = "../test-validator", version = "=1.14.5" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.5" } +solana-version = { path = "../version", version = "=1.14.5" } systemstat = "0.1.11" tokio = { version = "~1.14.1", features = ["full"] } [dev-dependencies] -solana-logger = { path = "../logger", version = "=1.14.4" } +solana-logger = { path = "../logger", version = "=1.14.5" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/client/Cargo.toml b/client/Cargo.toml index fcb0bc2fc1743d..700d839f0ef83d 100644 --- a/client/Cargo.toml +++ b/client/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-client" -version = "1.14.4" +version = "1.14.5" description = "Solana Client" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -38,17 +38,17 @@ semver = "1.0.10" serde = "1.0.138" serde_derive = "1.0.103" serde_json = "1.0.81" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.4" } -solana-clap-utils = { path = "../clap-utils", version = "=1.14.4" } -solana-faucet = { path = "../faucet", version = "=1.14.4" } -solana-measure = { path = "../measure", version = "=1.14.4" } -solana-metrics = { path = "../metrics", version = "=1.14.4" } -solana-net-utils = { path = "../net-utils", version = "=1.14.4" } -solana-sdk = { path = "../sdk", version = "=1.14.4" } -solana-streamer = { path = "../streamer", version = "=1.14.4" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.4" } -solana-version = { path = "../version", version = "=1.14.4" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.4" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.5" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.5" } +solana-faucet = { path = "../faucet", version = "=1.14.5" } +solana-measure = { path = "../measure", version = "=1.14.5" } +solana-metrics = { path = "../metrics", version = "=1.14.5" } +solana-net-utils = { path = "../net-utils", version = "=1.14.5" } +solana-sdk = { path = "../sdk", version = "=1.14.5" } +solana-streamer = { path = "../streamer", version = "=1.14.5" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.5" } +solana-version = { path = "../version", version = "=1.14.5" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.5" } spl-token-2022 = { version = "=0.4.2", features = ["no-entrypoint"] } thiserror = "1.0" tokio = { version = "1", features = ["full"] } @@ -61,8 +61,8 @@ url = "2.2.2" anyhow = "1.0.58" assert_matches = "1.5.0" jsonrpc-http-server = "18.0.0" -solana-logger = { path = "../logger", version = "=1.14.4" } -solana-perf = { path = "../perf", version = "=1.14.4" } +solana-logger = { path = "../logger", version = "=1.14.5" } +solana-perf = { path = "../perf", version = "=1.14.5" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/core/Cargo.toml b/core/Cargo.toml index 288a808e56100f..65f88744a8f893 100644 --- a/core/Cargo.toml +++ b/core/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "solana-core" description = "Blockchain, Rebuilt for Scale" -version = "1.14.4" +version = "1.14.5" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-core" readme = "../README.md" @@ -35,30 +35,30 @@ rand_chacha = "0.2.2" rayon = "1.5.3" serde = "1.0.138" serde_derive = "1.0.103" -solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.4" } -solana-bloom = { path = "../bloom", version = "=1.14.4" } -solana-client = { path = "../client", version = "=1.14.4" } -solana-entry = { path = "../entry", version = "=1.14.4" } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.4" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.4" } -solana-geyser-plugin-manager = { path = "../geyser-plugin-manager", version = "=1.14.4" } -solana-gossip = { path = "../gossip", version = "=1.14.4" } -solana-ledger = { path = "../ledger", version = "=1.14.4" } -solana-measure = { path = "../measure", version = "=1.14.4" } -solana-metrics = { path = "../metrics", version = "=1.14.4" } -solana-net-utils = { path = "../net-utils", version = "=1.14.4" } -solana-perf = { path = "../perf", version = "=1.14.4" } -solana-poh = { path = "../poh", version = "=1.14.4" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.4" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.4" } -solana-rpc = { path = "../rpc", version = "=1.14.4" } -solana-runtime = { path = "../runtime", version = "=1.14.4" } -solana-sdk = { path = "../sdk", version = "=1.14.4" } -solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.4" } -solana-streamer = { path = "../streamer", version = "=1.14.4" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.4" } -solana-version = { path = "../version", version = "=1.14.4" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.4" } +solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.5" } +solana-bloom = { path = "../bloom", version = "=1.14.5" } +solana-client = { path = "../client", version = "=1.14.5" } +solana-entry = { path = "../entry", version = "=1.14.5" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.5" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.5" } +solana-geyser-plugin-manager = { path = "../geyser-plugin-manager", version = "=1.14.5" } +solana-gossip = { path = "../gossip", version = "=1.14.5" } +solana-ledger = { path = "../ledger", version = "=1.14.5" } +solana-measure = { path = "../measure", version = "=1.14.5" } +solana-metrics = { path = "../metrics", version = "=1.14.5" } +solana-net-utils = { path = "../net-utils", version = "=1.14.5" } +solana-perf = { path = "../perf", version = "=1.14.5" } +solana-poh = { path = "../poh", version = "=1.14.5" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.5" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.5" } +solana-rpc = { path = "../rpc", version = "=1.14.5" } +solana-runtime = { path = "../runtime", version = "=1.14.5" } +solana-sdk = { path = "../sdk", version = "=1.14.5" } +solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.5" } +solana-streamer = { path = "../streamer", version = "=1.14.5" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.5" } +solana-version = { path = "../version", version = "=1.14.5" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.5" } sys-info = "0.9.1" tempfile = "3.3.0" thiserror = "1.0" @@ -70,9 +70,9 @@ matches = "0.1.9" raptorq = "1.7.0" serde_json = "1.0.81" serial_test = "0.8.0" -solana-logger = { path = "../logger", version = "=1.14.4" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.4" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.4" } +solana-logger = { path = "../logger", version = "=1.14.5" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.5" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.5" } static_assertions = "1.1.0" systemstat = "0.1.11" test-case = "2.1.0" diff --git a/dos/Cargo.toml b/dos/Cargo.toml index 48f1f399079fb3..c6c3e4a49a1938 100644 --- a/dos/Cargo.toml +++ b/dos/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-dos" -version = "1.14.4" +version = "1.14.5" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -17,23 +17,23 @@ itertools = "0.10.3" log = "0.4.17" rand = "0.7.0" serde = "1.0.138" -solana-bench-tps = { path = "../bench-tps", version = "=1.14.4" } -solana-client = { path = "../client", version = "=1.14.4" } -solana-core = { path = "../core", version = "=1.14.4" } -solana-faucet = { path = "../faucet", version = "=1.14.4" } -solana-gossip = { path = "../gossip", version = "=1.14.4" } -solana-logger = { path = "../logger", version = "=1.14.4" } -solana-measure = { path = "../measure", version = "=1.14.4" } -solana-net-utils = { path = "../net-utils", version = "=1.14.4" } -solana-perf = { path = "../perf", version = "=1.14.4" } -solana-rpc = { path = "../rpc", version = "=1.14.4" } -solana-sdk = { path = "../sdk", version = "=1.14.4" } -solana-streamer = { path = "../streamer", version = "=1.14.4" } -solana-version = { path = "../version", version = "=1.14.4" } +solana-bench-tps = { path = "../bench-tps", version = "=1.14.5" } +solana-client = { path = "../client", version = "=1.14.5" } +solana-core = { path = "../core", version = "=1.14.5" } +solana-faucet = { path = "../faucet", version = "=1.14.5" } +solana-gossip = { path = "../gossip", version = "=1.14.5" } +solana-logger = { path = "../logger", version = "=1.14.5" } +solana-measure = { path = "../measure", version = "=1.14.5" } +solana-net-utils = { path = "../net-utils", version = "=1.14.5" } +solana-perf = { path = "../perf", version = "=1.14.5" } +solana-rpc = { path = "../rpc", version = "=1.14.5" } +solana-sdk = { path = "../sdk", version = "=1.14.5" } +solana-streamer = { path = "../streamer", version = "=1.14.5" } +solana-version = { path = "../version", version = "=1.14.5" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] [dev-dependencies] serial_test = "0.8.0" -solana-local-cluster = { path = "../local-cluster", version = "=1.14.4" } +solana-local-cluster = { path = "../local-cluster", version = "=1.14.5" } diff --git a/download-utils/Cargo.toml b/download-utils/Cargo.toml index e86942938b86f9..6148d2b17c45ca 100644 --- a/download-utils/Cargo.toml +++ b/download-utils/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-download-utils" -version = "1.14.4" +version = "1.14.5" description = "Solana Download Utils" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,8 +14,8 @@ console = "0.15.0" indicatif = "0.16.2" log = "0.4.17" reqwest = { version = "0.11.11", default-features = false, features = ["blocking", "brotli", "deflate", "gzip", "rustls-tls", "json"] } -solana-runtime = { path = "../runtime", version = "=1.14.4" } -solana-sdk = { path = "../sdk", version = "=1.14.4" } +solana-runtime = { path = "../runtime", version = "=1.14.5" } +solana-sdk = { path = "../sdk", version = "=1.14.5" } [lib] crate-type = ["lib"] diff --git a/entry/Cargo.toml b/entry/Cargo.toml index 5580a6e10b4c1f..6ec6c17008804d 100644 --- a/entry/Cargo.toml +++ b/entry/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-entry" -version = "1.14.4" +version = "1.14.5" description = "Solana Entry" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -19,16 +19,16 @@ log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" serde = "1.0.138" -solana-measure = { path = "../measure", version = "=1.14.4" } -solana-merkle-tree = { path = "../merkle-tree", version = "=1.14.4" } -solana-metrics = { path = "../metrics", version = "=1.14.4" } -solana-perf = { path = "../perf", version = "=1.14.4" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.4" } -solana-sdk = { path = "../sdk", version = "=1.14.4" } +solana-measure = { path = "../measure", version = "=1.14.5" } +solana-merkle-tree = { path = "../merkle-tree", version = "=1.14.5" } +solana-metrics = { path = "../metrics", version = "=1.14.5" } +solana-perf = { path = "../perf", version = "=1.14.5" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.5" } +solana-sdk = { path = "../sdk", version = "=1.14.5" } [dev-dependencies] matches = "0.1.9" -solana-logger = { path = "../logger", version = "=1.14.4" } +solana-logger = { path = "../logger", version = "=1.14.5" } [lib] crate-type = ["lib"] diff --git a/faucet/Cargo.toml b/faucet/Cargo.toml index 604542dcd4a4d1..6931401beb89d7 100644 --- a/faucet/Cargo.toml +++ b/faucet/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-faucet" -version = "1.14.4" +version = "1.14.5" description = "Solana Faucet" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -17,12 +17,12 @@ crossbeam-channel = "0.5" log = "0.4.17" serde = "1.0.138" serde_derive = "1.0.103" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.4" } -solana-cli-config = { path = "../cli-config", version = "=1.14.4" } -solana-logger = { path = "../logger", version = "=1.14.4" } -solana-metrics = { path = "../metrics", version = "=1.14.4" } -solana-sdk = { path = "../sdk", version = "=1.14.4" } -solana-version = { path = "../version", version = "=1.14.4" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.5" } +solana-cli-config = { path = "../cli-config", version = "=1.14.5" } +solana-logger = { path = "../logger", version = "=1.14.5" } +solana-metrics = { path = "../metrics", version = "=1.14.5" } +solana-sdk = { path = "../sdk", version = "=1.14.5" } +solana-version = { path = "../version", version = "=1.14.5" } spl-memo = { version = "=3.0.1", features = ["no-entrypoint"] } thiserror = "1.0" tokio = { version = "1", features = ["full"] } diff --git a/frozen-abi/Cargo.toml b/frozen-abi/Cargo.toml index f4e7175d378508..70394f0cf1d18b 100644 --- a/frozen-abi/Cargo.toml +++ b/frozen-abi/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-frozen-abi" -version = "1.14.4" +version = "1.14.5" description = "Solana Frozen ABI" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -20,7 +20,7 @@ serde_bytes = "0.11" serde_derive = "1.0" serde_json = "1.0" sha2 = "0.10.2" -solana-frozen-abi-macro = { path = "macro", version = "=1.14.4" } +solana-frozen-abi-macro = { path = "macro", version = "=1.14.5" } thiserror = "1.0" [target.'cfg(not(target_os = "solana"))'.dependencies] @@ -43,7 +43,7 @@ rand_core = { version = "0.6.3", features = ["alloc", "getrandom", "std"] } subtle = { version = "2.4.1", features = ["default", "i128", "std"] } [target.'cfg(not(target_os = "solana"))'.dev-dependencies] -solana-logger = { path = "../logger", version = "=1.14.4" } +solana-logger = { path = "../logger", version = "=1.14.5" } [build-dependencies] rustc_version = "0.4" diff --git a/frozen-abi/macro/Cargo.toml b/frozen-abi/macro/Cargo.toml index 193f1f25ad9332..db3378b48caa99 100644 --- a/frozen-abi/macro/Cargo.toml +++ b/frozen-abi/macro/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-frozen-abi-macro" -version = "1.14.4" +version = "1.14.5" description = "Solana Frozen ABI Macro" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/genesis-utils/Cargo.toml b/genesis-utils/Cargo.toml index d4c53190d7f2b5..a9c420cbd2fe05 100644 --- a/genesis-utils/Cargo.toml +++ b/genesis-utils/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-genesis-utils" -version = "1.14.4" +version = "1.14.5" description = "Solana Genesis Utils" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,9 +10,9 @@ documentation = "https://docs.rs/solana-download-utils" edition = "2021" [dependencies] -solana-download-utils = { path = "../download-utils", version = "=1.14.4" } -solana-runtime = { path = "../runtime", version = "=1.14.4" } -solana-sdk = { path = "../sdk", version = "=1.14.4" } +solana-download-utils = { path = "../download-utils", version = "=1.14.5" } +solana-runtime = { path = "../runtime", version = "=1.14.5" } +solana-sdk = { path = "../sdk", version = "=1.14.5" } [lib] crate-type = ["lib"] diff --git a/genesis/Cargo.toml b/genesis/Cargo.toml index 473f9bbfd201e2..9a326119a066e2 100644 --- a/genesis/Cargo.toml +++ b/genesis/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-genesis" description = "Blockchain, Rebuilt for Scale" -version = "1.14.4" +version = "1.14.5" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -15,16 +15,16 @@ clap = "2.33.1" serde = "1.0.138" serde_json = "1.0.81" serde_yaml = "0.8.26" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.4" } -solana-cli-config = { path = "../cli-config", version = "=1.14.4" } -solana-entry = { path = "../entry", version = "=1.14.4" } -solana-ledger = { path = "../ledger", version = "=1.14.4" } -solana-logger = { path = "../logger", version = "=1.14.4" } -solana-runtime = { path = "../runtime", version = "=1.14.4" } -solana-sdk = { path = "../sdk", version = "=1.14.4" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.4" } -solana-version = { path = "../version", version = "=1.14.4" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.4" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.5" } +solana-cli-config = { path = "../cli-config", version = "=1.14.5" } +solana-entry = { path = "../entry", version = "=1.14.5" } +solana-ledger = { path = "../ledger", version = "=1.14.5" } +solana-logger = { path = "../logger", version = "=1.14.5" } +solana-runtime = { path = "../runtime", version = "=1.14.5" } +solana-sdk = { path = "../sdk", version = "=1.14.5" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.5" } +solana-version = { path = "../version", version = "=1.14.5" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.5" } tempfile = "3.3.0" [[bin]] diff --git a/geyser-plugin-interface/Cargo.toml b/geyser-plugin-interface/Cargo.toml index c07e304bad323d..1e3c0d87e12636 100644 --- a/geyser-plugin-interface/Cargo.toml +++ b/geyser-plugin-interface/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-geyser-plugin-interface" description = "The Solana Geyser plugin interface." -version = "1.14.4" +version = "1.14.5" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -11,8 +11,8 @@ documentation = "https://docs.rs/solana-geyser-plugin-interface" [dependencies] log = "0.4.17" -solana-sdk = { path = "../sdk", version = "=1.14.4" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.4" } +solana-sdk = { path = "../sdk", version = "=1.14.5" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.5" } thiserror = "1.0.31" [package.metadata.docs.rs] diff --git a/geyser-plugin-manager/Cargo.toml b/geyser-plugin-manager/Cargo.toml index a499a6d27f148d..19ebc5f08235d2 100644 --- a/geyser-plugin-manager/Cargo.toml +++ b/geyser-plugin-manager/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-geyser-plugin-manager" description = "The Solana Geyser plugin manager." -version = "1.14.4" +version = "1.14.5" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -16,13 +16,13 @@ json5 = "0.4.1" libloading = "0.7.3" log = "0.4.17" serde_json = "1.0.81" -solana-geyser-plugin-interface = { path = "../geyser-plugin-interface", version = "=1.14.4" } -solana-measure = { path = "../measure", version = "=1.14.4" } -solana-metrics = { path = "../metrics", version = "=1.14.4" } -solana-rpc = { path = "../rpc", version = "=1.14.4" } -solana-runtime = { path = "../runtime", version = "=1.14.4" } -solana-sdk = { path = "../sdk", version = "=1.14.4" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.4" } +solana-geyser-plugin-interface = { path = "../geyser-plugin-interface", version = "=1.14.5" } +solana-measure = { path = "../measure", version = "=1.14.5" } +solana-metrics = { path = "../metrics", version = "=1.14.5" } +solana-rpc = { path = "../rpc", version = "=1.14.5" } +solana-runtime = { path = "../runtime", version = "=1.14.5" } +solana-sdk = { path = "../sdk", version = "=1.14.5" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.5" } thiserror = "1.0.31" [package.metadata.docs.rs] diff --git a/gossip/Cargo.toml b/gossip/Cargo.toml index 42eee22d3677ac..92b56302576cfd 100644 --- a/gossip/Cargo.toml +++ b/gossip/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-gossip" description = "Blockchain, Rebuilt for Scale" -version = "1.14.4" +version = "1.14.5" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -27,24 +27,24 @@ rayon = "1.5.3" serde = "1.0.138" serde_bytes = "0.11" serde_derive = "1.0.103" -solana-bloom = { path = "../bloom", version = "=1.14.4" } -solana-clap-utils = { path = "../clap-utils", version = "=1.14.4" } -solana-client = { path = "../client", version = "=1.14.4" } -solana-entry = { path = "../entry", version = "=1.14.4" } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.4" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.4" } -solana-ledger = { path = "../ledger", version = "=1.14.4" } -solana-logger = { path = "../logger", version = "=1.14.4" } -solana-measure = { path = "../measure", version = "=1.14.4" } -solana-metrics = { path = "../metrics", version = "=1.14.4" } -solana-net-utils = { path = "../net-utils", version = "=1.14.4" } -solana-perf = { path = "../perf", version = "=1.14.4" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.4" } -solana-runtime = { path = "../runtime", version = "=1.14.4" } -solana-sdk = { path = "../sdk", version = "=1.14.4" } -solana-streamer = { path = "../streamer", version = "=1.14.4" } -solana-version = { path = "../version", version = "=1.14.4" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.4" } +solana-bloom = { path = "../bloom", version = "=1.14.5" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.5" } +solana-client = { path = "../client", version = "=1.14.5" } +solana-entry = { path = "../entry", version = "=1.14.5" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.5" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.5" } +solana-ledger = { path = "../ledger", version = "=1.14.5" } +solana-logger = { path = "../logger", version = "=1.14.5" } +solana-measure = { path = "../measure", version = "=1.14.5" } +solana-metrics = { path = "../metrics", version = "=1.14.5" } +solana-net-utils = { path = "../net-utils", version = "=1.14.5" } +solana-perf = { path = "../perf", version = "=1.14.5" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.5" } +solana-runtime = { path = "../runtime", version = "=1.14.5" } +solana-sdk = { path = "../sdk", version = "=1.14.5" } +solana-streamer = { path = "../streamer", version = "=1.14.5" } +solana-version = { path = "../version", version = "=1.14.5" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.5" } thiserror = "1.0" [dev-dependencies] diff --git a/install/Cargo.toml b/install/Cargo.toml index d4ad845b5aea07..5370f72b4968d4 100644 --- a/install/Cargo.toml +++ b/install/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-install" description = "The solana cluster software installer" -version = "1.14.4" +version = "1.14.5" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -26,12 +26,12 @@ reqwest = { version = "0.11.11", default-features = false, features = ["blocking semver = "1.0.10" serde = { version = "1.0.138", features = ["derive"] } serde_yaml = "0.8.26" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.4" } -solana-client = { path = "../client", version = "=1.14.4" } -solana-config-program = { path = "../programs/config", version = "=1.14.4" } -solana-logger = { path = "../logger", version = "=1.14.4" } -solana-sdk = { path = "../sdk", version = "=1.14.4" } -solana-version = { path = "../version", version = "=1.14.4" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.5" } +solana-client = { path = "../client", version = "=1.14.5" } +solana-config-program = { path = "../programs/config", version = "=1.14.5" } +solana-logger = { path = "../logger", version = "=1.14.5" } +solana-sdk = { path = "../sdk", version = "=1.14.5" } +solana-version = { path = "../version", version = "=1.14.5" } tar = "0.4.38" tempfile = "3.3.0" url = "2.2.2" diff --git a/keygen/Cargo.toml b/keygen/Cargo.toml index 08b492d4ca458e..07cf0b56b28f91 100644 --- a/keygen/Cargo.toml +++ b/keygen/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-keygen" -version = "1.14.4" +version = "1.14.5" description = "Solana key generation utility" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,11 +14,11 @@ bs58 = "0.4.0" clap = { version = "3.1.5", features = ["cargo"] } dirs-next = "2.0.0" num_cpus = "1.13.1" -solana-clap-v3-utils = { path = "../clap-v3-utils", version = "=1.14.4" } -solana-cli-config = { path = "../cli-config", version = "=1.14.4" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.4" } -solana-sdk = { path = "../sdk", version = "=1.14.4" } -solana-version = { path = "../version", version = "=1.14.4" } +solana-clap-v3-utils = { path = "../clap-v3-utils", version = "=1.14.5" } +solana-cli-config = { path = "../cli-config", version = "=1.14.5" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.5" } +solana-sdk = { path = "../sdk", version = "=1.14.5" } +solana-version = { path = "../version", version = "=1.14.5" } tiny-bip39 = "0.8.2" [[bin]] diff --git a/ledger-tool/Cargo.toml b/ledger-tool/Cargo.toml index e09669a53f76c3..fff48a86afa374 100644 --- a/ledger-tool/Cargo.toml +++ b/ledger-tool/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-ledger-tool" description = "Blockchain, Rebuilt for Scale" -version = "1.14.4" +version = "1.14.5" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -22,20 +22,20 @@ log = { version = "0.4.17" } regex = "1" serde = { version = "1.0", features = ["derive"] } serde_json = "1.0.81" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.4" } -solana-cli-output = { path = "../cli-output", version = "=1.14.4" } -solana-core = { path = "../core", version = "=1.14.4" } -solana-entry = { path = "../entry", version = "=1.14.4" } -solana-ledger = { path = "../ledger", version = "=1.14.4" } -solana-logger = { path = "../logger", version = "=1.14.4" } -solana-measure = { path = "../measure", version = "=1.14.4" } -solana-runtime = { path = "../runtime", version = "=1.14.4" } -solana-sdk = { path = "../sdk", version = "=1.14.4" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.4" } -solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.4" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.4" } -solana-version = { path = "../version", version = "=1.14.4" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.4" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.5" } +solana-cli-output = { path = "../cli-output", version = "=1.14.5" } +solana-core = { path = "../core", version = "=1.14.5" } +solana-entry = { path = "../entry", version = "=1.14.5" } +solana-ledger = { path = "../ledger", version = "=1.14.5" } +solana-logger = { path = "../logger", version = "=1.14.5" } +solana-measure = { path = "../measure", version = "=1.14.5" } +solana-runtime = { path = "../runtime", version = "=1.14.5" } +solana-sdk = { path = "../sdk", version = "=1.14.5" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.5" } +solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.5" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.5" } +solana-version = { path = "../version", version = "=1.14.5" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.5" } tokio = { version = "1", features = ["full"] } [target.'cfg(not(target_env = "msvc"))'.dependencies] diff --git a/ledger/Cargo.toml b/ledger/Cargo.toml index f79fb8468ecac6..11576a102ff603 100644 --- a/ledger/Cargo.toml +++ b/ledger/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-ledger" -version = "1.14.4" +version = "1.14.5" description = "Solana ledger" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -35,23 +35,23 @@ reed-solomon-erasure = { version = "6.0.0", features = ["simd-accel"] } serde = "1.0.138" serde_bytes = "0.11.6" sha2 = "0.10.2" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.4" } -solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.4" } -solana-entry = { path = "../entry", version = "=1.14.4" } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.4" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.4" } -solana-measure = { path = "../measure", version = "=1.14.4" } -solana-metrics = { path = "../metrics", version = "=1.14.4" } -solana-perf = { path = "../perf", version = "=1.14.4" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.4" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.4" } -solana-runtime = { path = "../runtime", version = "=1.14.4" } -solana-sdk = { path = "../sdk", version = "=1.14.4" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.4" } -solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.4" } -solana-storage-proto = { path = "../storage-proto", version = "=1.14.4" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.4" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.4" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.5" } +solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.5" } +solana-entry = { path = "../entry", version = "=1.14.5" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.5" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.5" } +solana-measure = { path = "../measure", version = "=1.14.5" } +solana-metrics = { path = "../metrics", version = "=1.14.5" } +solana-perf = { path = "../perf", version = "=1.14.5" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.5" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.5" } +solana-runtime = { path = "../runtime", version = "=1.14.5" } +solana-sdk = { path = "../sdk", version = "=1.14.5" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.5" } +solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.5" } +solana-storage-proto = { path = "../storage-proto", version = "=1.14.5" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.5" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.5" } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } spl-token-2022 = { version = "=0.4.2", features = ["no-entrypoint"] } static_assertions = "1.1.0" @@ -71,8 +71,8 @@ features = ["lz4"] [dev-dependencies] bs58 = "0.4.0" matches = "0.1.9" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.4" } -solana-logger = { path = "../logger", version = "=1.14.4" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.5" } +solana-logger = { path = "../logger", version = "=1.14.5" } test-case = "2.1.0" [build-dependencies] diff --git a/local-cluster/Cargo.toml b/local-cluster/Cargo.toml index 027b4220d54c74..57961130aaaf48 100644 --- a/local-cluster/Cargo.toml +++ b/local-cluster/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-local-cluster" description = "Blockchain, Rebuilt for Scale" -version = "1.14.4" +version = "1.14.5" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -16,25 +16,25 @@ itertools = "0.10.3" log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" -solana-client = { path = "../client", version = "=1.14.4" } -solana-config-program = { path = "../programs/config", version = "=1.14.4" } -solana-core = { path = "../core", version = "=1.14.4" } -solana-entry = { path = "../entry", version = "=1.14.4" } -solana-gossip = { path = "../gossip", version = "=1.14.4" } -solana-ledger = { path = "../ledger", version = "=1.14.4" } -solana-runtime = { path = "../runtime", version = "=1.14.4" } -solana-sdk = { path = "../sdk", version = "=1.14.4" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.4" } -solana-streamer = { path = "../streamer", version = "=1.14.4" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.4" } +solana-client = { path = "../client", version = "=1.14.5" } +solana-config-program = { path = "../programs/config", version = "=1.14.5" } +solana-core = { path = "../core", version = "=1.14.5" } +solana-entry = { path = "../entry", version = "=1.14.5" } +solana-gossip = { path = "../gossip", version = "=1.14.5" } +solana-ledger = { path = "../ledger", version = "=1.14.5" } +solana-runtime = { path = "../runtime", version = "=1.14.5" } +solana-sdk = { path = "../sdk", version = "=1.14.5" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.5" } +solana-streamer = { path = "../streamer", version = "=1.14.5" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.5" } tempfile = "3.3.0" [dev-dependencies] assert_matches = "1.5.0" gag = "1.0.0" serial_test = "0.8.0" -solana-download-utils = { path = "../download-utils", version = "=1.14.4" } -solana-logger = { path = "../logger", version = "=1.14.4" } +solana-download-utils = { path = "../download-utils", version = "=1.14.5" } +solana-logger = { path = "../logger", version = "=1.14.5" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/log-analyzer/Cargo.toml b/log-analyzer/Cargo.toml index 1bda1aac197347..1a2547b6d7c8c4 100644 --- a/log-analyzer/Cargo.toml +++ b/log-analyzer/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-log-analyzer" description = "The solana cluster network analysis tool" -version = "1.14.4" +version = "1.14.5" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,8 +14,8 @@ byte-unit = "4.0.14" clap = { version = "3.1.5", features = ["cargo"] } serde = "1.0.138" serde_json = "1.0.81" -solana-logger = { path = "../logger", version = "=1.14.4" } -solana-version = { path = "../version", version = "=1.14.4" } +solana-logger = { path = "../logger", version = "=1.14.5" } +solana-version = { path = "../version", version = "=1.14.5" } [[bin]] name = "solana-log-analyzer" diff --git a/logger/Cargo.toml b/logger/Cargo.toml index 0c1e9691ddf68f..5f9602d3afe429 100644 --- a/logger/Cargo.toml +++ b/logger/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-logger" -version = "1.14.4" +version = "1.14.5" description = "Solana Logger" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/measure/Cargo.toml b/measure/Cargo.toml index 18ed4c95e4a757..4c37c587bcc474 100644 --- a/measure/Cargo.toml +++ b/measure/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "solana-measure" description = "Blockchain, Rebuilt for Scale" -version = "1.14.4" +version = "1.14.5" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-measure" readme = "../README.md" @@ -12,7 +12,7 @@ edition = "2021" [dependencies] log = "0.4.17" -solana-sdk = { path = "../sdk", version = "=1.14.4" } +solana-sdk = { path = "../sdk", version = "=1.14.5" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/merkle-root-bench/Cargo.toml b/merkle-root-bench/Cargo.toml index d131d77fd65dbf..17be50b09fd980 100644 --- a/merkle-root-bench/Cargo.toml +++ b/merkle-root-bench/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-merkle-root-bench" -version = "1.14.4" +version = "1.14.5" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -11,11 +11,11 @@ publish = false [dependencies] clap = "2.33.1" log = "0.4.17" -solana-logger = { path = "../logger", version = "=1.14.4" } -solana-measure = { path = "../measure", version = "=1.14.4" } -solana-runtime = { path = "../runtime", version = "=1.14.4" } -solana-sdk = { path = "../sdk", version = "=1.14.4" } -solana-version = { path = "../version", version = "=1.14.4" } +solana-logger = { path = "../logger", version = "=1.14.5" } +solana-measure = { path = "../measure", version = "=1.14.5" } +solana-runtime = { path = "../runtime", version = "=1.14.5" } +solana-sdk = { path = "../sdk", version = "=1.14.5" } +solana-version = { path = "../version", version = "=1.14.5" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/merkle-tree/Cargo.toml b/merkle-tree/Cargo.toml index c9222f94019b4d..ea66fa28c845b1 100644 --- a/merkle-tree/Cargo.toml +++ b/merkle-tree/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-merkle-tree" -version = "1.14.4" +version = "1.14.5" description = "Solana Merkle Tree" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -11,7 +11,7 @@ edition = "2021" [dependencies] fast-math = "0.1" -solana-program = { path = "../sdk/program", version = "=1.14.4" } +solana-program = { path = "../sdk/program", version = "=1.14.5" } # This can go once the BPF toolchain target Rust 1.42.0+ [target.bpfel-unknown-unknown.dependencies] diff --git a/metrics/Cargo.toml b/metrics/Cargo.toml index 9b8f78a09fe468..484f1f100ebd4e 100644 --- a/metrics/Cargo.toml +++ b/metrics/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-metrics" -version = "1.14.4" +version = "1.14.5" description = "Solana Metrics" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -15,7 +15,7 @@ gethostname = "0.2.3" lazy_static = "1.4.0" log = "0.4.17" reqwest = { version = "0.11.11", default-features = false, features = ["blocking", "brotli", "deflate", "gzip", "rustls-tls", "json"] } -solana-sdk = { path = "../sdk", version = "=1.14.4" } +solana-sdk = { path = "../sdk", version = "=1.14.5" } [dev-dependencies] env_logger = "0.9.0" diff --git a/net-shaper/Cargo.toml b/net-shaper/Cargo.toml index d29ed861c74808..1a908cbe177d8b 100644 --- a/net-shaper/Cargo.toml +++ b/net-shaper/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-net-shaper" description = "The solana cluster network shaping tool" -version = "1.14.4" +version = "1.14.5" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,7 +14,7 @@ clap = { version = "3.1.5", features = ["cargo"] } rand = "0.7.0" serde = { version = "1.0.138", features = ["derive"] } serde_json = "1.0.81" -solana-logger = { path = "../logger", version = "=1.14.4" } +solana-logger = { path = "../logger", version = "=1.14.5" } [[bin]] name = "solana-net-shaper" diff --git a/net-utils/Cargo.toml b/net-utils/Cargo.toml index ec499652c5d428..d71aca2adcfd3b 100644 --- a/net-utils/Cargo.toml +++ b/net-utils/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-net-utils" -version = "1.14.4" +version = "1.14.5" description = "Solana Network Utilities" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -19,9 +19,9 @@ rand = "0.7.0" serde = "1.0.138" serde_derive = "1.0.103" socket2 = "0.4.4" -solana-logger = { path = "../logger", version = "=1.14.4" } -solana-sdk = { path = "../sdk", version = "=1.14.4" } -solana-version = { path = "../version", version = "=1.14.4" } +solana-logger = { path = "../logger", version = "=1.14.5" } +solana-sdk = { path = "../sdk", version = "=1.14.5" } +solana-version = { path = "../version", version = "=1.14.5" } tokio = { version = "1", features = ["full"] } url = "2.2.2" diff --git a/notifier/Cargo.toml b/notifier/Cargo.toml index dc8257fff5ebc3..1c63ec8c31caa8 100644 --- a/notifier/Cargo.toml +++ b/notifier/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-notifier" -version = "1.14.4" +version = "1.14.5" description = "Solana Notifier" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/perf/Cargo.toml b/perf/Cargo.toml index f0728e736e880f..e462069ea2abd8 100644 --- a/perf/Cargo.toml +++ b/perf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-perf" -version = "1.14.4" +version = "1.14.5" description = "Solana Performance APIs" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -22,10 +22,10 @@ log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" serde = "1.0.138" -solana-metrics = { path = "../metrics", version = "=1.14.4" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.4" } -solana-sdk = { path = "../sdk", version = "=1.14.4" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.4" } +solana-metrics = { path = "../metrics", version = "=1.14.5" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.5" } +solana-sdk = { path = "../sdk", version = "=1.14.5" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.5" } [target."cfg(target_os = \"linux\")".dependencies] caps = "0.5.3" @@ -37,7 +37,7 @@ name = "solana_perf" [dev-dependencies] matches = "0.1.9" -solana-logger = { path = "../logger", version = "=1.14.4" } +solana-logger = { path = "../logger", version = "=1.14.5" } [[bench]] name = "sigverify" diff --git a/poh-bench/Cargo.toml b/poh-bench/Cargo.toml index 525879ffa45db6..811b9858f75917 100644 --- a/poh-bench/Cargo.toml +++ b/poh-bench/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-poh-bench" -version = "1.14.4" +version = "1.14.5" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,12 +14,12 @@ clap = { version = "3.1.5", features = ["cargo"] } log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" -solana-entry = { path = "../entry", version = "=1.14.4" } -solana-logger = { path = "../logger", version = "=1.14.4" } -solana-measure = { path = "../measure", version = "=1.14.4" } -solana-perf = { path = "../perf", version = "=1.14.4" } -solana-sdk = { path = "../sdk", version = "=1.14.4" } -solana-version = { path = "../version", version = "=1.14.4" } +solana-entry = { path = "../entry", version = "=1.14.5" } +solana-logger = { path = "../logger", version = "=1.14.5" } +solana-measure = { path = "../measure", version = "=1.14.5" } +solana-perf = { path = "../perf", version = "=1.14.5" } +solana-sdk = { path = "../sdk", version = "=1.14.5" } +solana-version = { path = "../version", version = "=1.14.5" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/poh/Cargo.toml b/poh/Cargo.toml index 77407e84f651f1..d6fe30df881c5d 100644 --- a/poh/Cargo.toml +++ b/poh/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-poh" -version = "1.14.4" +version = "1.14.5" description = "Solana PoH" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,21 +13,21 @@ edition = "2021" core_affinity = "0.5.10" crossbeam-channel = "0.5" log = "0.4.17" -solana-entry = { path = "../entry", version = "=1.14.4" } -solana-ledger = { path = "../ledger", version = "=1.14.4" } -solana-measure = { path = "../measure", version = "=1.14.4" } -solana-metrics = { path = "../metrics", version = "=1.14.4" } -solana-runtime = { path = "../runtime", version = "=1.14.4" } -solana-sdk = { path = "../sdk", version = "=1.14.4" } -solana-sys-tuner = { path = "../sys-tuner", version = "=1.14.4" } +solana-entry = { path = "../entry", version = "=1.14.5" } +solana-ledger = { path = "../ledger", version = "=1.14.5" } +solana-measure = { path = "../measure", version = "=1.14.5" } +solana-metrics = { path = "../metrics", version = "=1.14.5" } +solana-runtime = { path = "../runtime", version = "=1.14.5" } +solana-sdk = { path = "../sdk", version = "=1.14.5" } +solana-sys-tuner = { path = "../sys-tuner", version = "=1.14.5" } thiserror = "1.0" [dev-dependencies] bincode = "1.3.3" matches = "0.1.9" rand = "0.7.0" -solana-logger = { path = "../logger", version = "=1.14.4" } -solana-perf = { path = "../perf", version = "=1.14.4" } +solana-logger = { path = "../logger", version = "=1.14.5" } +solana-perf = { path = "../perf", version = "=1.14.5" } [lib] crate-type = ["lib"] diff --git a/program-runtime/Cargo.toml b/program-runtime/Cargo.toml index 41097ae8a17995..52a3c058d19938 100644 --- a/program-runtime/Cargo.toml +++ b/program-runtime/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-program-runtime" -version = "1.14.4" +version = "1.14.5" description = "Solana program runtime" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -20,16 +20,16 @@ log = "0.4.14" num-derive = { version = "0.3" } num-traits = { version = "0.2" } serde = { version = "1.0.129", features = ["derive", "rc"] } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.4" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.4" } -solana-measure = { path = "../measure", version = "=1.14.4" } -solana-metrics = { path = "../metrics", version = "=1.14.4" } -solana-sdk = { path = "../sdk", version = "=1.14.4" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.5" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.5" } +solana-measure = { path = "../measure", version = "=1.14.5" } +solana-metrics = { path = "../metrics", version = "=1.14.5" } +solana-sdk = { path = "../sdk", version = "=1.14.5" } thiserror = "1.0" enum-iterator = "0.8.1" [dev-dependencies] -solana-logger = { path = "../logger", version = "=1.14.4" } +solana-logger = { path = "../logger", version = "=1.14.5" } [lib] crate-type = ["lib"] diff --git a/program-test/Cargo.toml b/program-test/Cargo.toml index 215503a8d7e499..0cb961b7ff2a9e 100644 --- a/program-test/Cargo.toml +++ b/program-test/Cargo.toml @@ -5,7 +5,7 @@ edition = "2021" license = "Apache-2.0" name = "solana-program-test" repository = "https://github.com/solana-labs/solana" -version = "1.14.4" +version = "1.14.5" [dependencies] assert_matches = "1.5.0" @@ -15,13 +15,13 @@ bincode = "1.3.3" chrono-humanize = "0.2.1" log = "0.4.17" serde = "1.0.138" -solana-banks-client = { path = "../banks-client", version = "=1.14.4" } -solana-banks-server = { path = "../banks-server", version = "=1.14.4" } -solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.4" } -solana-logger = { path = "../logger", version = "=1.14.4" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.4" } -solana-runtime = { path = "../runtime", version = "=1.14.4" } -solana-sdk = { path = "../sdk", version = "=1.14.4" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.4" } +solana-banks-client = { path = "../banks-client", version = "=1.14.5" } +solana-banks-server = { path = "../banks-server", version = "=1.14.5" } +solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.5" } +solana-logger = { path = "../logger", version = "=1.14.5" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.5" } +solana-runtime = { path = "../runtime", version = "=1.14.5" } +solana-sdk = { path = "../sdk", version = "=1.14.5" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.5" } thiserror = "1.0" tokio = { version = "1", features = ["full"] } diff --git a/programs/address-lookup-table-tests/Cargo.toml b/programs/address-lookup-table-tests/Cargo.toml index 6c6105faf6cef4..62ffe7c821a59c 100644 --- a/programs/address-lookup-table-tests/Cargo.toml +++ b/programs/address-lookup-table-tests/Cargo.toml @@ -3,7 +3,7 @@ [package] name = "solana-address-lookup-table-program-tests" -version = "1.14.4" +version = "1.14.5" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" @@ -14,9 +14,9 @@ publish = false [dev-dependencies] assert_matches = "1.5.0" bincode = "1.3.3" -solana-address-lookup-table-program = { path = "../address-lookup-table", version = "=1.14.4" } -solana-program-test = { path = "../../program-test", version = "=1.14.4" } -solana-sdk = { path = "../../sdk", version = "=1.14.4" } +solana-address-lookup-table-program = { path = "../address-lookup-table", version = "=1.14.5" } +solana-program-test = { path = "../../program-test", version = "=1.14.5" } +solana-sdk = { path = "../../sdk", version = "=1.14.5" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/address-lookup-table/Cargo.toml b/programs/address-lookup-table/Cargo.toml index 7e541b035f846f..558d08726f2053 100644 --- a/programs/address-lookup-table/Cargo.toml +++ b/programs/address-lookup-table/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-address-lookup-table-program" -version = "1.14.4" +version = "1.14.5" description = "Solana address lookup table program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -16,14 +16,14 @@ log = "0.4.17" num-derive = "0.3" num-traits = "0.2" serde = { version = "1.0.138", features = ["derive"] } -solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.4" } -solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.4" } -solana-program = { path = "../../sdk/program", version = "=1.14.4" } +solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.5" } +solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.5" } +solana-program = { path = "../../sdk/program", version = "=1.14.5" } thiserror = "1.0" [target.'cfg(not(target_os = "solana"))'.dependencies] -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.4" } -solana-sdk = { path = "../../sdk", version = "=1.14.4" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.5" } +solana-sdk = { path = "../../sdk", version = "=1.14.5" } [build-dependencies] rustc_version = "0.4" diff --git a/programs/bpf-loader-tests/Cargo.toml b/programs/bpf-loader-tests/Cargo.toml index cbf7678bfdc070..4097008d60d342 100644 --- a/programs/bpf-loader-tests/Cargo.toml +++ b/programs/bpf-loader-tests/Cargo.toml @@ -3,7 +3,7 @@ [package] name = "solana-bpf-loader-program-tests" -version = "1.14.4" +version = "1.14.5" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" @@ -14,9 +14,9 @@ publish = false [dev-dependencies] assert_matches = "1.5.0" bincode = "1.3.3" -solana-bpf-loader-program = { path = "../bpf_loader", version = "=1.14.4" } -solana-program-test = { path = "../../program-test", version = "=1.14.4" } -solana-sdk = { path = "../../sdk", version = "=1.14.4" } +solana-bpf-loader-program = { path = "../bpf_loader", version = "=1.14.5" } +solana-program-test = { path = "../../program-test", version = "=1.14.5" } +solana-sdk = { path = "../../sdk", version = "=1.14.5" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/bpf/Cargo.lock b/programs/bpf/Cargo.lock index 1d0032ba35833c..bba2e222421f53 100644 --- a/programs/bpf/Cargo.lock +++ b/programs/bpf/Cargo.lock @@ -4063,7 +4063,7 @@ dependencies = [ [[package]] name = "solana-account-decoder" -version = "1.14.4" +version = "1.14.5" dependencies = [ "Inflector", "base64 0.13.0", @@ -4076,7 +4076,7 @@ dependencies = [ "serde_json", "solana-address-lookup-table-program", "solana-config-program", - "solana-sdk 1.14.4", + "solana-sdk 1.14.5", "solana-vote-program", "spl-token", "spl-token-2022", @@ -4086,7 +4086,7 @@ dependencies = [ [[package]] name = "solana-address-lookup-table-program" -version = "1.14.4" +version = "1.14.5" dependencies = [ "bincode", "bytemuck", @@ -4095,23 +4095,23 @@ dependencies = [ "num-traits", "rustc_version", "serde", - "solana-frozen-abi 1.14.4", - "solana-frozen-abi-macro 1.14.4", - "solana-program 1.14.4", + "solana-frozen-abi 1.14.5", + "solana-frozen-abi-macro 1.14.5", + "solana-program 1.14.5", "solana-program-runtime", - "solana-sdk 1.14.4", + "solana-sdk 1.14.5", "thiserror", ] [[package]] name = "solana-banks-client" -version = "1.14.4" +version = "1.14.5" dependencies = [ "borsh", "futures 0.3.21", "solana-banks-interface", - "solana-program 1.14.4", - "solana-sdk 1.14.4", + "solana-program 1.14.5", + "solana-sdk 1.14.5", "tarpc", "thiserror", "tokio", @@ -4120,16 +4120,16 @@ dependencies = [ [[package]] name = "solana-banks-interface" -version = "1.14.4" +version = "1.14.5" dependencies = [ "serde", - "solana-sdk 1.14.4", + "solana-sdk 1.14.5", "tarpc", ] [[package]] name = "solana-banks-server" -version = "1.14.4" +version = "1.14.5" dependencies = [ "bincode", "crossbeam-channel", @@ -4137,7 +4137,7 @@ dependencies = [ "solana-banks-interface", "solana-client", "solana-runtime", - "solana-sdk 1.14.4", + "solana-sdk 1.14.5", "solana-send-transaction-service", "tarpc", "tokio", @@ -4147,7 +4147,7 @@ dependencies = [ [[package]] name = "solana-bloom" -version = "1.14.4" +version = "1.14.5" dependencies = [ "bv", "fnv", @@ -4157,14 +4157,14 @@ dependencies = [ "rustc_version", "serde", "serde_derive", - "solana-frozen-abi 1.14.4", - "solana-frozen-abi-macro 1.14.4", - "solana-sdk 1.14.4", + "solana-frozen-abi 1.14.5", + "solana-frozen-abi-macro 1.14.5", + "solana-sdk 1.14.5", ] [[package]] name = "solana-bpf-loader-program" -version = "1.14.4" +version = "1.14.5" dependencies = [ "bincode", "byteorder 1.4.3", @@ -4173,15 +4173,15 @@ dependencies = [ "solana-measure", "solana-metrics", "solana-program-runtime", - "solana-sdk 1.14.4", - "solana-zk-token-sdk 1.14.4", + "solana-sdk 1.14.5", + "solana-zk-token-sdk 1.14.5", "solana_rbpf", "thiserror", ] [[package]] name = "solana-bpf-programs" -version = "1.14.4" +version = "1.14.5" dependencies = [ "bincode", "byteorder 1.4.3", @@ -4197,11 +4197,11 @@ dependencies = [ "solana-bpf-rust-realloc-invoke", "solana-cli-output", "solana-ledger", - "solana-logger 1.14.4", + "solana-logger 1.14.5", "solana-measure", "solana-program-runtime", "solana-runtime", - "solana-sdk 1.14.4", + "solana-sdk 1.14.5", "solana-transaction-status", "solana_rbpf", "walkdir", @@ -4209,385 +4209,385 @@ dependencies = [ [[package]] name = "solana-bpf-rust-128bit" -version = "1.14.4" +version = "1.14.5" dependencies = [ "solana-bpf-rust-128bit-dep", - "solana-program 1.14.4", + "solana-program 1.14.5", ] [[package]] name = "solana-bpf-rust-128bit-dep" -version = "1.14.4" +version = "1.14.5" dependencies = [ - "solana-program 1.14.4", + "solana-program 1.14.5", ] [[package]] name = "solana-bpf-rust-alloc" -version = "1.14.4" +version = "1.14.5" dependencies = [ - "solana-program 1.14.4", + "solana-program 1.14.5", ] [[package]] name = "solana-bpf-rust-call-depth" -version = "1.14.4" +version = "1.14.5" dependencies = [ - "solana-program 1.14.4", + "solana-program 1.14.5", ] [[package]] name = "solana-bpf-rust-caller-access" -version = "1.14.4" +version = "1.14.5" dependencies = [ - "solana-program 1.14.4", + "solana-program 1.14.5", ] [[package]] name = "solana-bpf-rust-curve25519" -version = "1.14.4" +version = "1.14.5" dependencies = [ - "solana-program 1.14.4", - "solana-zk-token-sdk 1.14.4", + "solana-program 1.14.5", + "solana-zk-token-sdk 1.14.5", ] [[package]] name = "solana-bpf-rust-custom-heap" -version = "1.14.4" +version = "1.14.5" dependencies = [ - "solana-program 1.14.4", + "solana-program 1.14.5", ] [[package]] name = "solana-bpf-rust-dep-crate" -version = "1.14.4" +version = "1.14.5" dependencies = [ "byteorder 1.4.3", "solana-address-lookup-table-program", - "solana-program 1.14.4", + "solana-program 1.14.5", ] [[package]] name = "solana-bpf-rust-deprecated-loader" -version = "1.14.4" +version = "1.14.5" dependencies = [ - "solana-program 1.14.4", + "solana-program 1.14.5", ] [[package]] name = "solana-bpf-rust-dup-accounts" -version = "1.14.4" +version = "1.14.5" dependencies = [ - "solana-program 1.14.4", + "solana-program 1.14.5", ] [[package]] name = "solana-bpf-rust-error-handling" -version = "1.14.4" +version = "1.14.5" dependencies = [ "num-derive", "num-traits", - "solana-program 1.14.4", + "solana-program 1.14.5", "thiserror", ] [[package]] name = "solana-bpf-rust-external-spend" -version = "1.14.4" +version = "1.14.5" dependencies = [ - "solana-program 1.14.4", + "solana-program 1.14.5", ] [[package]] name = "solana-bpf-rust-finalize" -version = "1.14.4" +version = "1.14.5" dependencies = [ - "solana-program 1.14.4", + "solana-program 1.14.5", ] [[package]] name = "solana-bpf-rust-get-minimum-delegation" -version = "1.14.4" +version = "1.14.5" dependencies = [ - "solana-program 1.14.4", + "solana-program 1.14.5", ] [[package]] name = "solana-bpf-rust-inner_instruction_alignment_check" -version = "1.14.4" +version = "1.14.5" dependencies = [ - "solana-program 1.14.4", + "solana-program 1.14.5", ] [[package]] name = "solana-bpf-rust-instruction-introspection" -version = "1.14.4" +version = "1.14.5" dependencies = [ - "solana-program 1.14.4", + "solana-program 1.14.5", ] [[package]] name = "solana-bpf-rust-invoke" -version = "1.14.4" +version = "1.14.5" dependencies = [ "solana-bpf-rust-invoked", - "solana-program 1.14.4", + "solana-program 1.14.5", ] [[package]] name = "solana-bpf-rust-invoke-and-error" -version = "1.14.4" +version = "1.14.5" dependencies = [ - "solana-program 1.14.4", + "solana-program 1.14.5", ] [[package]] name = "solana-bpf-rust-invoke-and-ok" -version = "1.14.4" +version = "1.14.5" dependencies = [ - "solana-program 1.14.4", + "solana-program 1.14.5", ] [[package]] name = "solana-bpf-rust-invoke-and-return" -version = "1.14.4" +version = "1.14.5" dependencies = [ - "solana-program 1.14.4", + "solana-program 1.14.5", ] [[package]] name = "solana-bpf-rust-invoked" -version = "1.14.4" +version = "1.14.5" dependencies = [ - "solana-program 1.14.4", + "solana-program 1.14.5", ] [[package]] name = "solana-bpf-rust-iter" -version = "1.14.4" +version = "1.14.5" dependencies = [ - "solana-program 1.14.4", + "solana-program 1.14.5", ] [[package]] name = "solana-bpf-rust-log-data" -version = "1.14.4" +version = "1.14.5" dependencies = [ - "solana-program 1.14.4", + "solana-program 1.14.5", ] [[package]] name = "solana-bpf-rust-many-args" -version = "1.14.4" +version = "1.14.5" dependencies = [ "solana-bpf-rust-many-args-dep", - "solana-program 1.14.4", + "solana-program 1.14.5", ] [[package]] name = "solana-bpf-rust-many-args-dep" -version = "1.14.4" +version = "1.14.5" dependencies = [ - "solana-program 1.14.4", + "solana-program 1.14.5", ] [[package]] name = "solana-bpf-rust-mem" -version = "1.14.4" +version = "1.14.5" dependencies = [ - "solana-program 1.14.4", + "solana-program 1.14.5", "solana-program-runtime", "solana-program-test", - "solana-sdk 1.14.4", + "solana-sdk 1.14.5", ] [[package]] name = "solana-bpf-rust-membuiltins" -version = "1.14.4" +version = "1.14.5" dependencies = [ "solana-bpf-rust-mem", - "solana-program 1.14.4", + "solana-program 1.14.5", ] [[package]] name = "solana-bpf-rust-noop" -version = "1.14.4" +version = "1.14.5" dependencies = [ - "solana-program 1.14.4", + "solana-program 1.14.5", ] [[package]] name = "solana-bpf-rust-panic" -version = "1.14.4" +version = "1.14.5" dependencies = [ - "solana-program 1.14.4", + "solana-program 1.14.5", ] [[package]] name = "solana-bpf-rust-param-passing" -version = "1.14.4" +version = "1.14.5" dependencies = [ "solana-bpf-rust-param-passing-dep", - "solana-program 1.14.4", + "solana-program 1.14.5", ] [[package]] name = "solana-bpf-rust-param-passing-dep" -version = "1.14.4" +version = "1.14.5" dependencies = [ - "solana-program 1.14.4", + "solana-program 1.14.5", ] [[package]] name = "solana-bpf-rust-rand" -version = "1.14.4" +version = "1.14.5" dependencies = [ "getrandom 0.1.14", "rand 0.7.3", - "solana-program 1.14.4", + "solana-program 1.14.5", ] [[package]] name = "solana-bpf-rust-realloc" -version = "1.14.4" +version = "1.14.5" dependencies = [ - "solana-program 1.14.4", + "solana-program 1.14.5", ] [[package]] name = "solana-bpf-rust-realloc-invoke" -version = "1.14.4" +version = "1.14.5" dependencies = [ "solana-bpf-rust-realloc", - "solana-program 1.14.4", + "solana-program 1.14.5", ] [[package]] name = "solana-bpf-rust-ro-account_modify" -version = "1.14.4" +version = "1.14.5" dependencies = [ - "solana-program 1.14.4", + "solana-program 1.14.5", ] [[package]] name = "solana-bpf-rust-ro-modify" -version = "1.14.4" +version = "1.14.5" dependencies = [ - "solana-program 1.14.4", + "solana-program 1.14.5", ] [[package]] name = "solana-bpf-rust-sanity" -version = "1.14.4" +version = "1.14.5" dependencies = [ - "solana-program 1.14.4", + "solana-program 1.14.5", "solana-program-runtime", "solana-program-test", - "solana-sdk 1.14.4", + "solana-sdk 1.14.5", ] [[package]] name = "solana-bpf-rust-secp256k1-recover" -version = "1.14.4" +version = "1.14.5" dependencies = [ "libsecp256k1 0.7.0", - "solana-program 1.14.4", + "solana-program 1.14.5", ] [[package]] name = "solana-bpf-rust-sha" -version = "1.14.4" +version = "1.14.5" dependencies = [ "blake3", - "solana-program 1.14.4", + "solana-program 1.14.5", ] [[package]] name = "solana-bpf-rust-sibling-instructions" -version = "1.14.4" +version = "1.14.5" dependencies = [ - "solana-program 1.14.4", + "solana-program 1.14.5", ] [[package]] name = "solana-bpf-rust-sibling_inner-instructions" -version = "1.14.4" +version = "1.14.5" dependencies = [ - "solana-program 1.14.4", + "solana-program 1.14.5", ] [[package]] name = "solana-bpf-rust-simulation" -version = "1.14.4" +version = "1.14.5" dependencies = [ - "solana-logger 1.14.4", - "solana-program 1.14.4", + "solana-logger 1.14.5", + "solana-program 1.14.5", "solana-program-test", - "solana-sdk 1.14.4", + "solana-sdk 1.14.5", "solana-validator", ] [[package]] name = "solana-bpf-rust-spoof1" -version = "1.14.4" +version = "1.14.5" dependencies = [ - "solana-program 1.14.4", + "solana-program 1.14.5", ] [[package]] name = "solana-bpf-rust-spoof1-system" -version = "1.14.4" +version = "1.14.5" dependencies = [ - "solana-program 1.14.4", + "solana-program 1.14.5", ] [[package]] name = "solana-bpf-rust-sysvar" -version = "1.14.4" +version = "1.14.5" dependencies = [ - "solana-program 1.14.4", + "solana-program 1.14.5", "solana-program-runtime", "solana-program-test", - "solana-sdk 1.14.4", + "solana-sdk 1.14.5", ] [[package]] name = "solana-bpf-rust-upgradeable" -version = "1.14.4" +version = "1.14.5" dependencies = [ - "solana-program 1.14.4", + "solana-program 1.14.5", ] [[package]] name = "solana-bpf-rust-upgraded" -version = "1.14.4" +version = "1.14.5" dependencies = [ - "solana-program 1.14.4", + "solana-program 1.14.5", ] [[package]] name = "solana-bucket-map" -version = "1.14.4" +version = "1.14.5" dependencies = [ "log", "memmap2", "modular-bitfield", "rand 0.7.3", "solana-measure", - "solana-sdk 1.14.4", + "solana-sdk 1.14.5", "tempfile", ] [[package]] name = "solana-clap-utils" -version = "1.14.4" +version = "1.14.5" dependencies = [ "chrono", "clap 2.33.3", "rpassword", "solana-perf", "solana-remote-wallet", - "solana-sdk 1.14.4", + "solana-sdk 1.14.5", "thiserror", "tiny-bip39", "uriparse", @@ -4596,7 +4596,7 @@ dependencies = [ [[package]] name = "solana-cli-config" -version = "1.14.4" +version = "1.14.5" dependencies = [ "dirs-next", "lazy_static", @@ -4604,13 +4604,13 @@ dependencies = [ "serde_derive", "serde_yaml", "solana-clap-utils", - "solana-sdk 1.14.4", + "solana-sdk 1.14.5", "url 2.2.2", ] [[package]] name = "solana-cli-output" -version = "1.14.4" +version = "1.14.5" dependencies = [ "Inflector", "base64 0.13.0", @@ -4627,7 +4627,7 @@ dependencies = [ "solana-clap-utils", "solana-cli-config", "solana-client", - "solana-sdk 1.14.4", + "solana-sdk 1.14.5", "solana-transaction-status", "solana-vote-program", "spl-memo", @@ -4635,7 +4635,7 @@ dependencies = [ [[package]] name = "solana-client" -version = "1.14.4" +version = "1.14.5" dependencies = [ "async-mutex", "async-trait", @@ -4671,7 +4671,7 @@ dependencies = [ "solana-measure", "solana-metrics", "solana-net-utils", - "solana-sdk 1.14.4", + "solana-sdk 1.14.5", "solana-streamer", "solana-transaction-status", "solana-version", @@ -4687,27 +4687,27 @@ dependencies = [ [[package]] name = "solana-compute-budget-program" -version = "1.14.4" +version = "1.14.5" dependencies = [ "solana-program-runtime", - "solana-sdk 1.14.4", + "solana-sdk 1.14.5", ] [[package]] name = "solana-config-program" -version = "1.14.4" +version = "1.14.5" dependencies = [ "bincode", "chrono", "serde", "serde_derive", "solana-program-runtime", - "solana-sdk 1.14.4", + "solana-sdk 1.14.5", ] [[package]] name = "solana-core" -version = "1.14.4" +version = "1.14.5" dependencies = [ "ahash", "base64 0.13.0", @@ -4735,8 +4735,8 @@ dependencies = [ "solana-bloom", "solana-client", "solana-entry", - "solana-frozen-abi 1.14.4", - "solana-frozen-abi-macro 1.14.4", + "solana-frozen-abi 1.14.5", + "solana-frozen-abi-macro 1.14.5", "solana-geyser-plugin-manager", "solana-gossip", "solana-ledger", @@ -4749,7 +4749,7 @@ dependencies = [ "solana-rayon-threadlimit", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.4", + "solana-sdk 1.14.5", "solana-send-transaction-service", "solana-streamer", "solana-transaction-status", @@ -4765,19 +4765,19 @@ dependencies = [ [[package]] name = "solana-download-utils" -version = "1.14.4" +version = "1.14.5" dependencies = [ "console", "indicatif", "log", "reqwest", "solana-runtime", - "solana-sdk 1.14.4", + "solana-sdk 1.14.5", ] [[package]] name = "solana-entry" -version = "1.14.4" +version = "1.14.5" dependencies = [ "bincode", "crossbeam-channel", @@ -4793,12 +4793,12 @@ dependencies = [ "solana-metrics", "solana-perf", "solana-rayon-threadlimit", - "solana-sdk 1.14.4", + "solana-sdk 1.14.5", ] [[package]] name = "solana-faucet" -version = "1.14.4" +version = "1.14.5" dependencies = [ "bincode", "byteorder 1.4.3", @@ -4809,9 +4809,9 @@ dependencies = [ "serde_derive", "solana-clap-utils", "solana-cli-config", - "solana-logger 1.14.4", + "solana-logger 1.14.5", "solana-metrics", - "solana-sdk 1.14.4", + "solana-sdk 1.14.5", "solana-version", "spl-memo", "thiserror", @@ -4842,7 +4842,7 @@ dependencies = [ [[package]] name = "solana-frozen-abi" -version = "1.14.4" +version = "1.14.5" dependencies = [ "ahash", "blake3", @@ -4867,7 +4867,7 @@ dependencies = [ "serde_derive", "serde_json", "sha2 0.10.2", - "solana-frozen-abi-macro 1.14.4", + "solana-frozen-abi-macro 1.14.5", "subtle", "thiserror", ] @@ -4886,7 +4886,7 @@ dependencies = [ [[package]] name = "solana-frozen-abi-macro" -version = "1.14.4" +version = "1.14.5" dependencies = [ "proc-macro2 1.0.41", "quote 1.0.18", @@ -4896,26 +4896,26 @@ dependencies = [ [[package]] name = "solana-genesis-utils" -version = "1.14.4" +version = "1.14.5" dependencies = [ "solana-download-utils", "solana-runtime", - "solana-sdk 1.14.4", + "solana-sdk 1.14.5", ] [[package]] name = "solana-geyser-plugin-interface" -version = "1.14.4" +version = "1.14.5" dependencies = [ "log", - "solana-sdk 1.14.4", + "solana-sdk 1.14.5", "solana-transaction-status", "thiserror", ] [[package]] name = "solana-geyser-plugin-manager" -version = "1.14.4" +version = "1.14.5" dependencies = [ "bs58", "crossbeam-channel", @@ -4928,14 +4928,14 @@ dependencies = [ "solana-metrics", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.4", + "solana-sdk 1.14.5", "solana-transaction-status", "thiserror", ] [[package]] name = "solana-gossip" -version = "1.14.4" +version = "1.14.5" dependencies = [ "bincode", "bv", @@ -4959,17 +4959,17 @@ dependencies = [ "solana-clap-utils", "solana-client", "solana-entry", - "solana-frozen-abi 1.14.4", - "solana-frozen-abi-macro 1.14.4", + "solana-frozen-abi 1.14.5", + "solana-frozen-abi-macro 1.14.5", "solana-ledger", - "solana-logger 1.14.4", + "solana-logger 1.14.5", "solana-measure", "solana-metrics", "solana-net-utils", "solana-perf", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.14.4", + "solana-sdk 1.14.5", "solana-streamer", "solana-version", "solana-vote-program", @@ -4978,7 +4978,7 @@ dependencies = [ [[package]] name = "solana-ledger" -version = "1.14.4" +version = "1.14.5" dependencies = [ "assert_matches", "bincode", @@ -5010,15 +5010,15 @@ dependencies = [ "solana-account-decoder", "solana-bpf-loader-program", "solana-entry", - "solana-frozen-abi 1.14.4", - "solana-frozen-abi-macro 1.14.4", + "solana-frozen-abi 1.14.5", + "solana-frozen-abi-macro 1.14.5", "solana-measure", "solana-metrics", "solana-perf", "solana-program-runtime", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.14.4", + "solana-sdk 1.14.5", "solana-stake-program", "solana-storage-bigtable", "solana-storage-proto", @@ -5047,7 +5047,7 @@ dependencies = [ [[package]] name = "solana-logger" -version = "1.14.4" +version = "1.14.5" dependencies = [ "env_logger", "lazy_static", @@ -5056,36 +5056,36 @@ dependencies = [ [[package]] name = "solana-measure" -version = "1.14.4" +version = "1.14.5" dependencies = [ "log", - "solana-sdk 1.14.4", + "solana-sdk 1.14.5", ] [[package]] name = "solana-merkle-tree" -version = "1.14.4" +version = "1.14.5" dependencies = [ "fast-math", "matches", - "solana-program 1.14.4", + "solana-program 1.14.5", ] [[package]] name = "solana-metrics" -version = "1.14.4" +version = "1.14.5" dependencies = [ "crossbeam-channel", "gethostname", "lazy_static", "log", "reqwest", - "solana-sdk 1.14.4", + "solana-sdk 1.14.5", ] [[package]] name = "solana-net-utils" -version = "1.14.4" +version = "1.14.5" dependencies = [ "bincode", "clap 3.1.6", @@ -5096,8 +5096,8 @@ dependencies = [ "serde", "serde_derive", "socket2", - "solana-logger 1.14.4", - "solana-sdk 1.14.4", + "solana-logger 1.14.5", + "solana-sdk 1.14.5", "solana-version", "tokio", "url 2.2.2", @@ -5105,7 +5105,7 @@ dependencies = [ [[package]] name = "solana-perf" -version = "1.14.4" +version = "1.14.5" dependencies = [ "ahash", "bincode", @@ -5124,13 +5124,13 @@ dependencies = [ "serde", "solana-metrics", "solana-rayon-threadlimit", - "solana-sdk 1.14.4", + "solana-sdk 1.14.5", "solana-vote-program", ] [[package]] name = "solana-poh" -version = "1.14.4" +version = "1.14.5" dependencies = [ "core_affinity", "crossbeam-channel", @@ -5140,7 +5140,7 @@ dependencies = [ "solana-measure", "solana-metrics", "solana-runtime", - "solana-sdk 1.14.4", + "solana-sdk 1.14.5", "solana-sys-tuner", "thiserror", ] @@ -5189,7 +5189,7 @@ dependencies = [ [[package]] name = "solana-program" -version = "1.14.4" +version = "1.14.5" dependencies = [ "base64 0.13.0", "bincode", @@ -5225,9 +5225,9 @@ dependencies = [ "serde_json", "sha2 0.10.2", "sha3 0.10.1", - "solana-frozen-abi 1.14.4", - "solana-frozen-abi-macro 1.14.4", - "solana-sdk-macro 1.14.4", + "solana-frozen-abi 1.14.5", + "solana-frozen-abi-macro 1.14.5", + "solana-sdk-macro 1.14.5", "thiserror", "tiny-bip39", "wasm-bindgen", @@ -5236,7 +5236,7 @@ dependencies = [ [[package]] name = "solana-program-runtime" -version = "1.14.4" +version = "1.14.5" dependencies = [ "base64 0.13.0", "bincode", @@ -5250,17 +5250,17 @@ dependencies = [ "num-traits", "rustc_version", "serde", - "solana-frozen-abi 1.14.4", - "solana-frozen-abi-macro 1.14.4", + "solana-frozen-abi 1.14.5", + "solana-frozen-abi-macro 1.14.5", "solana-measure", "solana-metrics", - "solana-sdk 1.14.4", + "solana-sdk 1.14.5", "thiserror", ] [[package]] name = "solana-program-test" -version = "1.14.4" +version = "1.14.5" dependencies = [ "assert_matches", "async-trait", @@ -5272,10 +5272,10 @@ dependencies = [ "solana-banks-client", "solana-banks-server", "solana-bpf-loader-program", - "solana-logger 1.14.4", + "solana-logger 1.14.5", "solana-program-runtime", "solana-runtime", - "solana-sdk 1.14.4", + "solana-sdk 1.14.5", "solana-vote-program", "thiserror", "tokio", @@ -5283,7 +5283,7 @@ dependencies = [ [[package]] name = "solana-rayon-threadlimit" -version = "1.14.4" +version = "1.14.5" dependencies = [ "lazy_static", "num_cpus", @@ -5291,7 +5291,7 @@ dependencies = [ [[package]] name = "solana-remote-wallet" -version = "1.14.4" +version = "1.14.5" dependencies = [ "console", "dialoguer", @@ -5301,14 +5301,14 @@ dependencies = [ "parking_lot 0.12.1", "qstring", "semver", - "solana-sdk 1.14.4", + "solana-sdk 1.14.5", "thiserror", "uriparse", ] [[package]] name = "solana-rpc" -version = "1.14.4" +version = "1.14.5" dependencies = [ "base64 0.13.0", "bincode", @@ -5341,7 +5341,7 @@ dependencies = [ "solana-poh", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.14.4", + "solana-sdk 1.14.5", "solana-send-transaction-service", "solana-stake-program", "solana-storage-bigtable", @@ -5359,7 +5359,7 @@ dependencies = [ [[package]] name = "solana-runtime" -version = "1.14.4" +version = "1.14.5" dependencies = [ "arrayref", "bincode", @@ -5395,17 +5395,17 @@ dependencies = [ "solana-bucket-map", "solana-compute-budget-program", "solana-config-program", - "solana-frozen-abi 1.14.4", - "solana-frozen-abi-macro 1.14.4", + "solana-frozen-abi 1.14.5", + "solana-frozen-abi-macro 1.14.5", "solana-measure", "solana-metrics", "solana-program-runtime", "solana-rayon-threadlimit", - "solana-sdk 1.14.4", + "solana-sdk 1.14.5", "solana-stake-program", "solana-vote-program", "solana-zk-token-proof-program", - "solana-zk-token-sdk 1.14.4", + "solana-zk-token-sdk 1.14.5", "strum", "strum_macros", "symlink", @@ -5468,7 +5468,7 @@ dependencies = [ [[package]] name = "solana-sdk" -version = "1.14.4" +version = "1.14.5" dependencies = [ "assert_matches", "base64 0.13.0", @@ -5505,11 +5505,11 @@ dependencies = [ "serde_json", "sha2 0.10.2", "sha3 0.10.1", - "solana-frozen-abi 1.14.4", - "solana-frozen-abi-macro 1.14.4", - "solana-logger 1.14.4", - "solana-program 1.14.4", - "solana-sdk-macro 1.14.4", + "solana-frozen-abi 1.14.5", + "solana-frozen-abi-macro 1.14.5", + "solana-logger 1.14.5", + "solana-program 1.14.5", + "solana-sdk-macro 1.14.5", "thiserror", "uriparse", "wasm-bindgen", @@ -5530,7 +5530,7 @@ dependencies = [ [[package]] name = "solana-sdk-macro" -version = "1.14.4" +version = "1.14.5" dependencies = [ "bs58", "proc-macro2 1.0.41", @@ -5541,7 +5541,7 @@ dependencies = [ [[package]] name = "solana-send-transaction-service" -version = "1.14.4" +version = "1.14.5" dependencies = [ "crossbeam-channel", "log", @@ -5549,12 +5549,12 @@ dependencies = [ "solana-measure", "solana-metrics", "solana-runtime", - "solana-sdk 1.14.4", + "solana-sdk 1.14.5", ] [[package]] name = "solana-stake-program" -version = "1.14.4" +version = "1.14.5" dependencies = [ "bincode", "log", @@ -5564,18 +5564,18 @@ dependencies = [ "serde", "serde_derive", "solana-config-program", - "solana-frozen-abi 1.14.4", - "solana-frozen-abi-macro 1.14.4", + "solana-frozen-abi 1.14.5", + "solana-frozen-abi-macro 1.14.5", "solana-metrics", "solana-program-runtime", - "solana-sdk 1.14.4", + "solana-sdk 1.14.5", "solana-vote-program", "thiserror", ] [[package]] name = "solana-storage-bigtable" -version = "1.14.4" +version = "1.14.5" dependencies = [ "backoff", "bincode", @@ -5596,7 +5596,7 @@ dependencies = [ "serde_derive", "smpl_jwt", "solana-metrics", - "solana-sdk 1.14.4", + "solana-sdk 1.14.5", "solana-storage-proto", "solana-transaction-status", "thiserror", @@ -5607,7 +5607,7 @@ dependencies = [ [[package]] name = "solana-storage-proto" -version = "1.14.4" +version = "1.14.5" dependencies = [ "bincode", "bs58", @@ -5615,14 +5615,14 @@ dependencies = [ "protobuf-src", "serde", "solana-account-decoder", - "solana-sdk 1.14.4", + "solana-sdk 1.14.5", "solana-transaction-status", "tonic-build 0.8.0", ] [[package]] name = "solana-streamer" -version = "1.14.4" +version = "1.14.5" dependencies = [ "crossbeam-channel", "futures-util", @@ -5641,7 +5641,7 @@ dependencies = [ "rustls 0.20.6", "solana-metrics", "solana-perf", - "solana-sdk 1.14.4", + "solana-sdk 1.14.5", "thiserror", "tokio", "x509-parser", @@ -5649,13 +5649,13 @@ dependencies = [ [[package]] name = "solana-sys-tuner" -version = "1.14.4" +version = "1.14.5" dependencies = [ "clap 2.33.3", "libc", "log", "nix", - "solana-logger 1.14.4", + "solana-logger 1.14.5", "solana-version", "sysctl", "unix_socket2", @@ -5664,7 +5664,7 @@ dependencies = [ [[package]] name = "solana-test-validator" -version = "1.14.4" +version = "1.14.5" dependencies = [ "base64 0.13.0", "log", @@ -5675,20 +5675,20 @@ dependencies = [ "solana-core", "solana-gossip", "solana-ledger", - "solana-logger 1.14.4", + "solana-logger 1.14.5", "solana-net-utils", "solana-program-runtime", "solana-program-test", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.4", + "solana-sdk 1.14.5", "solana-streamer", "tokio", ] [[package]] name = "solana-transaction-status" -version = "1.14.4" +version = "1.14.5" dependencies = [ "Inflector", "base64 0.13.0", @@ -5704,7 +5704,7 @@ dependencies = [ "solana-address-lookup-table-program", "solana-measure", "solana-metrics", - "solana-sdk 1.14.4", + "solana-sdk 1.14.5", "solana-vote-program", "spl-associated-token-account", "spl-memo", @@ -5715,7 +5715,7 @@ dependencies = [ [[package]] name = "solana-validator" -version = "1.14.4" +version = "1.14.5" dependencies = [ "chrono", "clap 2.33.3", @@ -5746,14 +5746,14 @@ dependencies = [ "solana-genesis-utils", "solana-gossip", "solana-ledger", - "solana-logger 1.14.4", + "solana-logger 1.14.5", "solana-metrics", "solana-net-utils", "solana-perf", "solana-poh", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.4", + "solana-sdk 1.14.5", "solana-send-transaction-service", "solana-storage-bigtable", "solana-streamer", @@ -5766,21 +5766,21 @@ dependencies = [ [[package]] name = "solana-version" -version = "1.14.4" +version = "1.14.5" dependencies = [ "log", "rustc_version", "semver", "serde", "serde_derive", - "solana-frozen-abi 1.14.4", - "solana-frozen-abi-macro 1.14.4", - "solana-sdk 1.14.4", + "solana-frozen-abi 1.14.5", + "solana-frozen-abi-macro 1.14.5", + "solana-sdk 1.14.5", ] [[package]] name = "solana-vote-program" -version = "1.14.4" +version = "1.14.5" dependencies = [ "bincode", "log", @@ -5789,25 +5789,25 @@ dependencies = [ "rustc_version", "serde", "serde_derive", - "solana-frozen-abi 1.14.4", - "solana-frozen-abi-macro 1.14.4", + "solana-frozen-abi 1.14.5", + "solana-frozen-abi-macro 1.14.5", "solana-metrics", "solana-program-runtime", - "solana-sdk 1.14.4", + "solana-sdk 1.14.5", "thiserror", ] [[package]] name = "solana-zk-token-proof-program" -version = "1.14.4" +version = "1.14.5" dependencies = [ "bytemuck", "getrandom 0.1.14", "num-derive", "num-traits", "solana-program-runtime", - "solana-sdk 1.14.4", - "solana-zk-token-sdk 1.14.4", + "solana-sdk 1.14.5", + "solana-zk-token-sdk 1.14.5", ] [[package]] @@ -5842,7 +5842,7 @@ dependencies = [ [[package]] name = "solana-zk-token-sdk" -version = "1.14.4" +version = "1.14.5" dependencies = [ "aes-gcm-siv", "arrayref", @@ -5862,8 +5862,8 @@ dependencies = [ "serde", "serde_json", "sha3 0.9.1", - "solana-program 1.14.4", - "solana-sdk 1.14.4", + "solana-program 1.14.5", + "solana-sdk 1.14.5", "subtle", "thiserror", "zeroize", diff --git a/programs/bpf/Cargo.toml b/programs/bpf/Cargo.toml index f5c9ae47b892f5..048b242e557e7f 100644 --- a/programs/bpf/Cargo.toml +++ b/programs/bpf/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "solana-bpf-programs" description = "Blockchain, Rebuilt for Scale" -version = "1.14.4" +version = "1.14.5" documentation = "https://docs.rs/solana" homepage = "https://solana.com/" readme = "README.md" @@ -26,22 +26,22 @@ itertools = "0.10.1" log = "0.4.11" miow = "0.3.6" net2 = "0.2.37" -solana-account-decoder = { path = "../../account-decoder", version = "=1.14.4" } -solana-bpf-loader-program = { path = "../bpf_loader", version = "=1.14.4" } -solana-bpf-rust-invoke = { path = "rust/invoke", version = "=1.14.4" } -solana-bpf-rust-realloc = { path = "rust/realloc", version = "=1.14.4" } -solana-bpf-rust-realloc-invoke = { path = "rust/realloc_invoke", version = "=1.14.4" } -solana-cli-output = { path = "../../cli-output", version = "=1.14.4" } -solana-logger = { path = "../../logger", version = "=1.14.4" } -solana-measure = { path = "../../measure", version = "=1.14.4" } -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.4" } -solana-runtime = { path = "../../runtime", version = "=1.14.4" } -solana-sdk = { path = "../../sdk", version = "=1.14.4" } -solana-transaction-status = { path = "../../transaction-status", version = "=1.14.4" } +solana-account-decoder = { path = "../../account-decoder", version = "=1.14.5" } +solana-bpf-loader-program = { path = "../bpf_loader", version = "=1.14.5" } +solana-bpf-rust-invoke = { path = "rust/invoke", version = "=1.14.5" } +solana-bpf-rust-realloc = { path = "rust/realloc", version = "=1.14.5" } +solana-bpf-rust-realloc-invoke = { path = "rust/realloc_invoke", version = "=1.14.5" } +solana-cli-output = { path = "../../cli-output", version = "=1.14.5" } +solana-logger = { path = "../../logger", version = "=1.14.5" } +solana-measure = { path = "../../measure", version = "=1.14.5" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.5" } +solana-runtime = { path = "../../runtime", version = "=1.14.5" } +solana-sdk = { path = "../../sdk", version = "=1.14.5" } +solana-transaction-status = { path = "../../transaction-status", version = "=1.14.5" } solana_rbpf = "=0.2.31" [dev-dependencies] -solana-ledger = { path = "../../ledger", version = "=1.14.4" } +solana-ledger = { path = "../../ledger", version = "=1.14.5" } [[bench]] name = "bpf_loader" diff --git a/programs/bpf/rust/128bit/Cargo.toml b/programs/bpf/rust/128bit/Cargo.toml index 36c5d255d15a57..d662f6a92edef2 100644 --- a/programs/bpf/rust/128bit/Cargo.toml +++ b/programs/bpf/rust/128bit/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-128bit" -version = "1.14.4" +version = "1.14.5" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ documentation = "https://docs.rs/solana-bpf-rust-128bit" edition = "2021" [dependencies] -solana-bpf-rust-128bit-dep = { path = "../128bit_dep", version = "=1.14.4" } -solana-program = { path = "../../../../sdk/program", version = "=1.14.4" } +solana-bpf-rust-128bit-dep = { path = "../128bit_dep", version = "=1.14.5" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.5" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/128bit_dep/Cargo.toml b/programs/bpf/rust/128bit_dep/Cargo.toml index 47a4a5d47e9665..4c63aea93156cb 100644 --- a/programs/bpf/rust/128bit_dep/Cargo.toml +++ b/programs/bpf/rust/128bit_dep/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-128bit-dep" -version = "1.14.4" +version = "1.14.5" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-128bit-dep" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.4" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.5" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/bpf/rust/alloc/Cargo.toml b/programs/bpf/rust/alloc/Cargo.toml index c9752c58005199..314303e5093be2 100644 --- a/programs/bpf/rust/alloc/Cargo.toml +++ b/programs/bpf/rust/alloc/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-alloc" -version = "1.14.4" +version = "1.14.5" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-alloc" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.4" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.5" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/call_depth/Cargo.toml b/programs/bpf/rust/call_depth/Cargo.toml index 6c673cda699201..7d0a3f9700bac1 100644 --- a/programs/bpf/rust/call_depth/Cargo.toml +++ b/programs/bpf/rust/call_depth/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-call-depth" -version = "1.14.4" +version = "1.14.5" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-call-depth" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.4" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.5" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/caller_access/Cargo.toml b/programs/bpf/rust/caller_access/Cargo.toml index 81958585811e54..154e9d391f4542 100644 --- a/programs/bpf/rust/caller_access/Cargo.toml +++ b/programs/bpf/rust/caller_access/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-caller-access" -version = "1.14.4" +version = "1.14.5" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-caller-access" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.4" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.5" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/curve25519/Cargo.toml b/programs/bpf/rust/curve25519/Cargo.toml index 0b1c76c9dec085..687c0e52d895fb 100644 --- a/programs/bpf/rust/curve25519/Cargo.toml +++ b/programs/bpf/rust/curve25519/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-curve25519" -version = "1.14.4" +version = "1.14.5" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ documentation = "https://docs.rs/solana-bpf-rust-zktoken_crypto" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.4" } -solana-zk-token-sdk = { path = "../../../../zk-token-sdk", version = "=1.14.4" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.5" } +solana-zk-token-sdk = { path = "../../../../zk-token-sdk", version = "=1.14.5" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/custom_heap/Cargo.toml b/programs/bpf/rust/custom_heap/Cargo.toml index ce527344a14bb4..b41f9e74bd7e70 100644 --- a/programs/bpf/rust/custom_heap/Cargo.toml +++ b/programs/bpf/rust/custom_heap/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-custom-heap" -version = "1.14.4" +version = "1.14.5" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-custom-heap" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.4" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.5" } [features] default = ["custom-heap"] diff --git a/programs/bpf/rust/dep_crate/Cargo.toml b/programs/bpf/rust/dep_crate/Cargo.toml index 5d26d167110d8b..55026642e9451f 100644 --- a/programs/bpf/rust/dep_crate/Cargo.toml +++ b/programs/bpf/rust/dep_crate/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-dep-crate" -version = "1.14.4" +version = "1.14.5" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,8 +12,8 @@ edition = "2021" [dependencies] byteorder = { version = "1", default-features = false } # list of crates which must be buildable for bpf programs -solana-address-lookup-table-program = { path = "../../../../programs/address-lookup-table", version = "=1.14.4" } -solana-program = { path = "../../../../sdk/program", version = "=1.14.4" } +solana-address-lookup-table-program = { path = "../../../../programs/address-lookup-table", version = "=1.14.5" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.5" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/deprecated_loader/Cargo.toml b/programs/bpf/rust/deprecated_loader/Cargo.toml index 9b3b984f1f2f76..9f9b205a0e1935 100644 --- a/programs/bpf/rust/deprecated_loader/Cargo.toml +++ b/programs/bpf/rust/deprecated_loader/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-deprecated-loader" -version = "1.14.4" +version = "1.14.5" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-deprecated-loader" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.4" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.5" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/dup_accounts/Cargo.toml b/programs/bpf/rust/dup_accounts/Cargo.toml index 4877d300cff61e..1f6fd0e7983ca6 100644 --- a/programs/bpf/rust/dup_accounts/Cargo.toml +++ b/programs/bpf/rust/dup_accounts/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-dup-accounts" -version = "1.14.4" +version = "1.14.5" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-dup-accounts" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.4" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.5" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/error_handling/Cargo.toml b/programs/bpf/rust/error_handling/Cargo.toml index b0f77ca1706be5..4c11d7f1401cfe 100644 --- a/programs/bpf/rust/error_handling/Cargo.toml +++ b/programs/bpf/rust/error_handling/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-error-handling" -version = "1.14.4" +version = "1.14.5" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,7 +12,7 @@ edition = "2021" [dependencies] num-derive = "0.3" num-traits = "0.2" -solana-program = { path = "../../../../sdk/program", version = "=1.14.4" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.5" } thiserror = "1.0" [lib] diff --git a/programs/bpf/rust/external_spend/Cargo.toml b/programs/bpf/rust/external_spend/Cargo.toml index 45136d80b63db2..cd296800e2f8dc 100644 --- a/programs/bpf/rust/external_spend/Cargo.toml +++ b/programs/bpf/rust/external_spend/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-external-spend" -version = "1.14.4" +version = "1.14.5" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-external-spend" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.4" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.5" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/finalize/Cargo.toml b/programs/bpf/rust/finalize/Cargo.toml index 606f3f17ee20d0..ac8a5966eabd47 100644 --- a/programs/bpf/rust/finalize/Cargo.toml +++ b/programs/bpf/rust/finalize/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-finalize" -version = "1.14.4" +version = "1.14.5" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-finalize" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.4" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.5" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/get_minimum_delegation/Cargo.toml b/programs/bpf/rust/get_minimum_delegation/Cargo.toml index e31aa5884e9ea8..32fa764ca5aa27 100644 --- a/programs/bpf/rust/get_minimum_delegation/Cargo.toml +++ b/programs/bpf/rust/get_minimum_delegation/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-get-minimum-delegation" -version = "1.14.4" +version = "1.14.5" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-get-minimum-delegation" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.4" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.5" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/inner_instruction_alignment_check/Cargo.toml b/programs/bpf/rust/inner_instruction_alignment_check/Cargo.toml index c697b9eccc7392..8c99ff20c59761 100644 --- a/programs/bpf/rust/inner_instruction_alignment_check/Cargo.toml +++ b/programs/bpf/rust/inner_instruction_alignment_check/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-inner_instruction_alignment_check" -version = "1.14.4" +version = "1.14.5" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-inner_instruction_alignment_che edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.4" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.5" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/instruction_introspection/Cargo.toml b/programs/bpf/rust/instruction_introspection/Cargo.toml index 0b5985639ccc9e..2d5de0593e72de 100644 --- a/programs/bpf/rust/instruction_introspection/Cargo.toml +++ b/programs/bpf/rust/instruction_introspection/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-instruction-introspection" -version = "1.14.4" +version = "1.14.5" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-instruction-introspection" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.4" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.5" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/invoke/Cargo.toml b/programs/bpf/rust/invoke/Cargo.toml index 76fc49b1d78519..9104d3bb248f53 100644 --- a/programs/bpf/rust/invoke/Cargo.toml +++ b/programs/bpf/rust/invoke/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-invoke" -version = "1.14.4" +version = "1.14.5" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -15,7 +15,7 @@ program = [] [dependencies] solana-bpf-rust-invoked = { path = "../invoked", default-features = false } -solana-program = { path = "../../../../sdk/program", version = "=1.14.4" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.5" } [lib] crate-type = ["lib", "cdylib"] diff --git a/programs/bpf/rust/invoke_and_error/Cargo.toml b/programs/bpf/rust/invoke_and_error/Cargo.toml index 54f7f96833a9a8..a094ef8f1a4230 100644 --- a/programs/bpf/rust/invoke_and_error/Cargo.toml +++ b/programs/bpf/rust/invoke_and_error/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-invoke-and-error" -version = "1.14.4" +version = "1.14.5" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-invoke-and-error" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.4" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.5" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/invoke_and_ok/Cargo.toml b/programs/bpf/rust/invoke_and_ok/Cargo.toml index a848a6931d08f1..4d2a74a0dcf68b 100644 --- a/programs/bpf/rust/invoke_and_ok/Cargo.toml +++ b/programs/bpf/rust/invoke_and_ok/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-invoke-and-ok" -version = "1.14.4" +version = "1.14.5" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-invoke-and-ok" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.4" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.5" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/invoke_and_return/Cargo.toml b/programs/bpf/rust/invoke_and_return/Cargo.toml index 75918a0f1aaef5..8047e30bd55052 100644 --- a/programs/bpf/rust/invoke_and_return/Cargo.toml +++ b/programs/bpf/rust/invoke_and_return/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-invoke-and-return" -version = "1.14.4" +version = "1.14.5" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-invoke-and-return" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.4" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.5" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/invoked/Cargo.toml b/programs/bpf/rust/invoked/Cargo.toml index bfc1c79ede8325..b206e20d45a65a 100644 --- a/programs/bpf/rust/invoked/Cargo.toml +++ b/programs/bpf/rust/invoked/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-invoked" -version = "1.14.4" +version = "1.14.5" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,7 +14,7 @@ default = ["program"] program = [] [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.4" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.5" } [lib] crate-type = ["lib", "cdylib"] diff --git a/programs/bpf/rust/iter/Cargo.toml b/programs/bpf/rust/iter/Cargo.toml index 5f48e9cecbf581..2c5d106ab49f53 100644 --- a/programs/bpf/rust/iter/Cargo.toml +++ b/programs/bpf/rust/iter/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-iter" -version = "1.14.4" +version = "1.14.5" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-iter" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.4" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.5" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/log_data/Cargo.toml b/programs/bpf/rust/log_data/Cargo.toml index 41724fa236798a..c12938d512a870 100644 --- a/programs/bpf/rust/log_data/Cargo.toml +++ b/programs/bpf/rust/log_data/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-log-data" -version = "1.14.4" +version = "1.14.5" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-log-data" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.4" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.5" } [features] default = ["program"] diff --git a/programs/bpf/rust/many_args/Cargo.toml b/programs/bpf/rust/many_args/Cargo.toml index 04bcbfac83145b..ea716f7d334f0a 100644 --- a/programs/bpf/rust/many_args/Cargo.toml +++ b/programs/bpf/rust/many_args/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-many-args" -version = "1.14.4" +version = "1.14.5" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ documentation = "https://docs.rs/solana-bpf-rust-many-args" edition = "2021" [dependencies] -solana-bpf-rust-many-args-dep = { path = "../many_args_dep", version = "=1.14.4" } -solana-program = { path = "../../../../sdk/program", version = "=1.14.4" } +solana-bpf-rust-many-args-dep = { path = "../many_args_dep", version = "=1.14.5" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.5" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/many_args_dep/Cargo.toml b/programs/bpf/rust/many_args_dep/Cargo.toml index 06c198133e11f1..43f2015f23d3e8 100644 --- a/programs/bpf/rust/many_args_dep/Cargo.toml +++ b/programs/bpf/rust/many_args_dep/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-many-args-dep" -version = "1.14.4" +version = "1.14.5" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-many-args-dep" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.4" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.5" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/bpf/rust/mem/Cargo.toml b/programs/bpf/rust/mem/Cargo.toml index c275978655de46..e79db3c05bc372 100644 --- a/programs/bpf/rust/mem/Cargo.toml +++ b/programs/bpf/rust/mem/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-mem" -version = "1.14.4" +version = "1.14.5" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,12 +13,12 @@ edition = "2021" no-entrypoint = [] [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.4" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.5" } [dev-dependencies] -solana-program-runtime = { path = "../../../../program-runtime", version = "=1.14.4" } -solana-program-test = { path = "../../../../program-test", version = "=1.14.4" } -solana-sdk = { path = "../../../../sdk", version = "=1.14.4" } +solana-program-runtime = { path = "../../../../program-runtime", version = "=1.14.5" } +solana-program-test = { path = "../../../../program-test", version = "=1.14.5" } +solana-sdk = { path = "../../../../sdk", version = "=1.14.5" } [lib] crate-type = ["cdylib", "lib"] diff --git a/programs/bpf/rust/membuiltins/Cargo.toml b/programs/bpf/rust/membuiltins/Cargo.toml index b92b529b10b418..4e0ad7a8e10e38 100644 --- a/programs/bpf/rust/membuiltins/Cargo.toml +++ b/programs/bpf/rust/membuiltins/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-membuiltins" -version = "1.14.4" +version = "1.14.5" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ documentation = "https://docs.rs/solana-bpf-rust-mem" edition = "2021" [dependencies] -solana-bpf-rust-mem = { path = "../mem", version = "=1.14.4", features = [ "no-entrypoint" ] } -solana-program = { path = "../../../../sdk/program", version = "=1.14.4" } +solana-bpf-rust-mem = { path = "../mem", version = "=1.14.5", features = [ "no-entrypoint" ] } +solana-program = { path = "../../../../sdk/program", version = "=1.14.5" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/noop/Cargo.toml b/programs/bpf/rust/noop/Cargo.toml index 42ebb990e8ffae..d5d115eedcc127 100644 --- a/programs/bpf/rust/noop/Cargo.toml +++ b/programs/bpf/rust/noop/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-noop" -version = "1.14.4" +version = "1.14.5" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-noop" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.4" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.5" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/panic/Cargo.toml b/programs/bpf/rust/panic/Cargo.toml index 4ec29ab478ab41..8f6522c47e879a 100644 --- a/programs/bpf/rust/panic/Cargo.toml +++ b/programs/bpf/rust/panic/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-panic" -version = "1.14.4" +version = "1.14.5" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-panic" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.4" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.5" } [features] default = ["custom-panic"] diff --git a/programs/bpf/rust/param_passing/Cargo.toml b/programs/bpf/rust/param_passing/Cargo.toml index 2943ecdeada5a8..6d298587d022e6 100644 --- a/programs/bpf/rust/param_passing/Cargo.toml +++ b/programs/bpf/rust/param_passing/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-param-passing" -version = "1.14.4" +version = "1.14.5" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ documentation = "https://docs.rs/solana-bpf-rust-param-passing" edition = "2021" [dependencies] -solana-bpf-rust-param-passing-dep = { path = "../param_passing_dep", version = "=1.14.4" } -solana-program = { path = "../../../../sdk/program", version = "=1.14.4" } +solana-bpf-rust-param-passing-dep = { path = "../param_passing_dep", version = "=1.14.5" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.5" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/param_passing_dep/Cargo.toml b/programs/bpf/rust/param_passing_dep/Cargo.toml index 72dcd2fbcb33fc..03a874604c1e0f 100644 --- a/programs/bpf/rust/param_passing_dep/Cargo.toml +++ b/programs/bpf/rust/param_passing_dep/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-param-passing-dep" -version = "1.14.4" +version = "1.14.5" description = "Solana BPF program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-param-passing-dep" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.4" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.5" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/bpf/rust/rand/Cargo.toml b/programs/bpf/rust/rand/Cargo.toml index 0226f92552bae0..5b4f07bd08a10f 100644 --- a/programs/bpf/rust/rand/Cargo.toml +++ b/programs/bpf/rust/rand/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-rand" -version = "1.14.4" +version = "1.14.5" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,7 +12,7 @@ edition = "2021" [dependencies] getrandom = { version = "0.1.14", features = ["dummy"] } rand = "0.7" -solana-program = { path = "../../../../sdk/program", version = "=1.14.4" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.5" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/realloc/Cargo.toml b/programs/bpf/rust/realloc/Cargo.toml index e1988bfee5f0d6..2af10fad80093d 100644 --- a/programs/bpf/rust/realloc/Cargo.toml +++ b/programs/bpf/rust/realloc/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-realloc" -version = "1.14.4" +version = "1.14.5" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,7 +14,7 @@ default = ["program"] program = [] [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.4" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.5" } [lib] crate-type = ["lib", "cdylib"] diff --git a/programs/bpf/rust/realloc_invoke/Cargo.toml b/programs/bpf/rust/realloc_invoke/Cargo.toml index 5bdfb72c9a3ec8..49471b3374d2a7 100644 --- a/programs/bpf/rust/realloc_invoke/Cargo.toml +++ b/programs/bpf/rust/realloc_invoke/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-realloc-invoke" -version = "1.14.4" +version = "1.14.5" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,8 +14,8 @@ default = ["program"] program = [] [dependencies] -solana-bpf-rust-realloc = { path = "../realloc", version = "=1.14.4", default-features = false } -solana-program = { path = "../../../../sdk/program", version = "=1.14.4" } +solana-bpf-rust-realloc = { path = "../realloc", version = "=1.14.5", default-features = false } +solana-program = { path = "../../../../sdk/program", version = "=1.14.5" } [lib] crate-type = ["lib", "cdylib"] diff --git a/programs/bpf/rust/ro_account_modify/Cargo.toml b/programs/bpf/rust/ro_account_modify/Cargo.toml index 665880ea040c97..99ad090857a298 100644 --- a/programs/bpf/rust/ro_account_modify/Cargo.toml +++ b/programs/bpf/rust/ro_account_modify/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-ro-account_modify" -version = "1.14.4" +version = "1.14.5" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-ro-modify" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.4" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.5" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/ro_modify/Cargo.toml b/programs/bpf/rust/ro_modify/Cargo.toml index 32665d1e5753e9..4184f0f287ef65 100644 --- a/programs/bpf/rust/ro_modify/Cargo.toml +++ b/programs/bpf/rust/ro_modify/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-ro-modify" -version = "1.14.4" +version = "1.14.5" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-ro-modify" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.4" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.5" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/sanity/Cargo.toml b/programs/bpf/rust/sanity/Cargo.toml index 801280653149dc..619d70d26de90c 100644 --- a/programs/bpf/rust/sanity/Cargo.toml +++ b/programs/bpf/rust/sanity/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-sanity" -version = "1.14.4" +version = "1.14.5" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,12 +13,12 @@ edition = "2021" test-bpf = [] [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.4" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.5" } [dev-dependencies] -solana-program-runtime = { path = "../../../../program-runtime", version = "=1.14.4" } -solana-program-test = { path = "../../../../program-test", version = "=1.14.4" } -solana-sdk = { path = "../../../../sdk", version = "=1.14.4" } +solana-program-runtime = { path = "../../../../program-runtime", version = "=1.14.5" } +solana-program-test = { path = "../../../../program-test", version = "=1.14.5" } +solana-sdk = { path = "../../../../sdk", version = "=1.14.5" } [lib] crate-type = ["cdylib", "lib"] diff --git a/programs/bpf/rust/secp256k1_recover/Cargo.toml b/programs/bpf/rust/secp256k1_recover/Cargo.toml index 225703776e9abd..a7b2d1d2be1d4d 100644 --- a/programs/bpf/rust/secp256k1_recover/Cargo.toml +++ b/programs/bpf/rust/secp256k1_recover/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-secp256k1-recover" -version = "1.14.4" +version = "1.14.5" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -11,7 +11,7 @@ edition = "2021" [dependencies] libsecp256k1 = { version = "0.7.0", default-features = false } -solana-program = { path = "../../../../sdk/program", version = "=1.14.4" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.5" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/sha/Cargo.toml b/programs/bpf/rust/sha/Cargo.toml index ea17ea290e8d5e..a07658789681dc 100644 --- a/programs/bpf/rust/sha/Cargo.toml +++ b/programs/bpf/rust/sha/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-sha" -version = "1.14.4" +version = "1.14.5" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -11,7 +11,7 @@ edition = "2021" [dependencies] blake3 = "1.0.0" -solana-program = { path = "../../../../sdk/program", version = "=1.14.4" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.5" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/sibling_inner_instruction/Cargo.toml b/programs/bpf/rust/sibling_inner_instruction/Cargo.toml index fa2ac7fe4c42f4..018eba25c4ca4b 100644 --- a/programs/bpf/rust/sibling_inner_instruction/Cargo.toml +++ b/programs/bpf/rust/sibling_inner_instruction/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-sibling_inner-instructions" -version = "1.14.4" +version = "1.14.5" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-log-data" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.4" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.5" } [features] default = ["program"] diff --git a/programs/bpf/rust/sibling_instruction/Cargo.toml b/programs/bpf/rust/sibling_instruction/Cargo.toml index 4d4cea18686ce2..e0f91cd838945d 100644 --- a/programs/bpf/rust/sibling_instruction/Cargo.toml +++ b/programs/bpf/rust/sibling_instruction/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-sibling-instructions" -version = "1.14.4" +version = "1.14.5" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-log-data" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.4" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.5" } [features] default = ["program"] diff --git a/programs/bpf/rust/simulation/Cargo.toml b/programs/bpf/rust/simulation/Cargo.toml index 188c9de54d703f..4bacb29c33c992 100644 --- a/programs/bpf/rust/simulation/Cargo.toml +++ b/programs/bpf/rust/simulation/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-simulation" -version = "1.14.4" +version = "1.14.5" description = "Solana BPF Program Simulation Differences" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,13 +13,13 @@ edition = "2021" test-bpf = [] [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.4" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.5" } [dev-dependencies] -solana-logger = { path = "../../../../logger", version = "=1.14.4" } -solana-program-test = { path = "../../../../program-test", version = "=1.14.4" } -solana-sdk = { path = "../../../../sdk", version = "=1.14.4" } -solana-validator = { path = "../../../../validator", version = "=1.14.4" } +solana-logger = { path = "../../../../logger", version = "=1.14.5" } +solana-program-test = { path = "../../../../program-test", version = "=1.14.5" } +solana-sdk = { path = "../../../../sdk", version = "=1.14.5" } +solana-validator = { path = "../../../../validator", version = "=1.14.5" } [lib] crate-type = ["cdylib", "lib"] diff --git a/programs/bpf/rust/spoof1/Cargo.toml b/programs/bpf/rust/spoof1/Cargo.toml index 57666d109cad63..d876015acfba28 100644 --- a/programs/bpf/rust/spoof1/Cargo.toml +++ b/programs/bpf/rust/spoof1/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-spoof1" -version = "1.14.4" +version = "1.14.5" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-spoof1" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.4" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.5" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/spoof1_system/Cargo.toml b/programs/bpf/rust/spoof1_system/Cargo.toml index db09952543699a..f93e22e0cc8df3 100644 --- a/programs/bpf/rust/spoof1_system/Cargo.toml +++ b/programs/bpf/rust/spoof1_system/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-spoof1-system" -version = "1.14.4" +version = "1.14.5" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-spoof1-system" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.4" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.5" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/sysvar/Cargo.toml b/programs/bpf/rust/sysvar/Cargo.toml index 342bd17816db7b..afebb6620bc444 100644 --- a/programs/bpf/rust/sysvar/Cargo.toml +++ b/programs/bpf/rust/sysvar/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-sysvar" -version = "1.14.4" +version = "1.14.5" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,12 +10,12 @@ documentation = "https://docs.rs/solana-bpf-rust-sysvar" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.4" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.5" } [dev-dependencies] -solana-program-runtime = { path = "../../../../program-runtime", version = "=1.14.4" } -solana-program-test = { path = "../../../../program-test", version = "=1.14.4" } -solana-sdk = { path = "../../../../sdk", version = "=1.14.4" } +solana-program-runtime = { path = "../../../../program-runtime", version = "=1.14.5" } +solana-program-test = { path = "../../../../program-test", version = "=1.14.5" } +solana-sdk = { path = "../../../../sdk", version = "=1.14.5" } [lib] crate-type = ["cdylib", "lib"] diff --git a/programs/bpf/rust/upgradeable/Cargo.toml b/programs/bpf/rust/upgradeable/Cargo.toml index e90e6b54b43d5b..d91a75d67a73b5 100644 --- a/programs/bpf/rust/upgradeable/Cargo.toml +++ b/programs/bpf/rust/upgradeable/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-upgradeable" -version = "1.14.4" +version = "1.14.5" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-upgradeable" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.4" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.5" } [lib] name = "solana_bpf_rust_upgradeable" diff --git a/programs/bpf/rust/upgraded/Cargo.toml b/programs/bpf/rust/upgraded/Cargo.toml index 207287d043f59b..9e31d79b95523c 100644 --- a/programs/bpf/rust/upgraded/Cargo.toml +++ b/programs/bpf/rust/upgraded/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-upgraded" -version = "1.14.4" +version = "1.14.5" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-upgraded" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.4" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.5" } [lib] name = "solana_bpf_rust_upgraded" diff --git a/programs/bpf_loader/Cargo.toml b/programs/bpf_loader/Cargo.toml index a135a470b9933e..49a42f1db188b6 100644 --- a/programs/bpf_loader/Cargo.toml +++ b/programs/bpf_loader/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-loader-program" -version = "1.14.4" +version = "1.14.5" description = "Solana BPF loader" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,17 +14,17 @@ bincode = "1.3.3" byteorder = "1.4.3" libsecp256k1 = "0.6.0" log = "0.4.17" -solana-measure = { path = "../../measure", version = "=1.14.4" } -solana-metrics = { path = "../../metrics", version = "=1.14.4" } -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.4" } -solana-sdk = { path = "../../sdk", version = "=1.14.4" } -solana-zk-token-sdk = { path = "../../zk-token-sdk", version = "=1.14.4" } +solana-measure = { path = "../../measure", version = "=1.14.5" } +solana-metrics = { path = "../../metrics", version = "=1.14.5" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.5" } +solana-sdk = { path = "../../sdk", version = "=1.14.5" } +solana-zk-token-sdk = { path = "../../zk-token-sdk", version = "=1.14.5" } solana_rbpf = "=0.2.31" thiserror = "1.0" [dev-dependencies] rand = "0.7.3" -solana-runtime = { path = "../../runtime", version = "=1.14.4" } +solana-runtime = { path = "../../runtime", version = "=1.14.5" } [lib] crate-type = ["lib"] diff --git a/programs/bpf_loader/gen-syscall-list/Cargo.toml b/programs/bpf_loader/gen-syscall-list/Cargo.toml index 0cb6747f276d01..bfa394a335f6a2 100644 --- a/programs/bpf_loader/gen-syscall-list/Cargo.toml +++ b/programs/bpf_loader/gen-syscall-list/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "gen-syscall-list" -version = "1.14.4" +version = "1.14.5" edition = "2021" license = "Apache-2.0" publish = false diff --git a/programs/compute-budget/Cargo.toml b/programs/compute-budget/Cargo.toml index fe49fe7dc9d853..57e9d30dc18916 100644 --- a/programs/compute-budget/Cargo.toml +++ b/programs/compute-budget/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "solana-compute-budget-program" description = "Solana Compute Budget program" -version = "1.14.4" +version = "1.14.5" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-compute-budget-program" repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ license = "Apache-2.0" edition = "2021" [dependencies] -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.4" } -solana-sdk = { path = "../../sdk", version = "=1.14.4" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.5" } +solana-sdk = { path = "../../sdk", version = "=1.14.5" } [lib] crate-type = ["lib"] diff --git a/programs/config/Cargo.toml b/programs/config/Cargo.toml index 14a76dd6f8f1c7..a7b779faacf76e 100644 --- a/programs/config/Cargo.toml +++ b/programs/config/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-config-program" -version = "1.14.4" +version = "1.14.5" description = "Solana Config program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,11 +14,11 @@ bincode = "1.3.3" chrono = { version = "0.4.11", features = ["serde"] } serde = "1.0.138" serde_derive = "1.0.103" -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.4" } -solana-sdk = { path = "../../sdk", version = "=1.14.4" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.5" } +solana-sdk = { path = "../../sdk", version = "=1.14.5" } [dev-dependencies] -solana-logger = { path = "../../logger", version = "=1.14.4" } +solana-logger = { path = "../../logger", version = "=1.14.5" } [lib] crate-type = ["lib"] diff --git a/programs/ed25519-tests/Cargo.toml b/programs/ed25519-tests/Cargo.toml index 9b8a99a22d6462..e9650006dcdb9d 100644 --- a/programs/ed25519-tests/Cargo.toml +++ b/programs/ed25519-tests/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-ed25519-program-tests" -version = "1.14.4" +version = "1.14.5" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" @@ -12,8 +12,8 @@ publish = false assert_matches = "1.5.0" ed25519-dalek = "=1.0.1" rand = "0.7.0" -solana-program-test = { path = "../../program-test", version = "=1.14.4" } -solana-sdk = { path = "../../sdk", version = "=1.14.4" } +solana-program-test = { path = "../../program-test", version = "=1.14.5" } +solana-sdk = { path = "../../sdk", version = "=1.14.5" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/stake/Cargo.toml b/programs/stake/Cargo.toml index 753e478e819c44..6143c07c08f6fc 100644 --- a/programs/stake/Cargo.toml +++ b/programs/stake/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-stake-program" -version = "1.14.4" +version = "1.14.5" description = "Solana Stake program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -16,19 +16,19 @@ num-derive = "0.3" num-traits = "0.2" serde = "1.0.138" serde_derive = "1.0.103" -solana-config-program = { path = "../config", version = "=1.14.4" } -solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.4" } -solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.4" } -solana-metrics = { path = "../../metrics", version = "=1.14.4" } -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.4" } -solana-sdk = { path = "../../sdk", version = "=1.14.4" } -solana-vote-program = { path = "../vote", version = "=1.14.4" } +solana-config-program = { path = "../config", version = "=1.14.5" } +solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.5" } +solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.5" } +solana-metrics = { path = "../../metrics", version = "=1.14.5" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.5" } +solana-sdk = { path = "../../sdk", version = "=1.14.5" } +solana-vote-program = { path = "../vote", version = "=1.14.5" } thiserror = "1.0" [dev-dependencies] assert_matches = "1.5.0" proptest = "1.0" -solana-logger = { path = "../../logger", version = "=1.14.4" } +solana-logger = { path = "../../logger", version = "=1.14.5" } test-case = "2.1.0" [build-dependencies] diff --git a/programs/vote/Cargo.toml b/programs/vote/Cargo.toml index 029d7d3a4ae883..2a9ba44ada04b6 100644 --- a/programs/vote/Cargo.toml +++ b/programs/vote/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-vote-program" -version = "1.14.4" +version = "1.14.5" description = "Solana Vote program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -16,17 +16,17 @@ num-derive = "0.3" num-traits = "0.2" serde = "1.0.138" serde_derive = "1.0.103" -solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.4" } -solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.4" } -solana-metrics = { path = "../../metrics", version = "=1.14.4" } -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.4" } -solana-sdk = { path = "../../sdk", version = "=1.14.4" } +solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.5" } +solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.5" } +solana-metrics = { path = "../../metrics", version = "=1.14.5" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.5" } +solana-sdk = { path = "../../sdk", version = "=1.14.5" } thiserror = "1.0" [dev-dependencies] itertools = "0.10.3" rand = "0.7.0" -solana-logger = { path = "../../logger", version = "=1.14.4" } +solana-logger = { path = "../../logger", version = "=1.14.5" } [build-dependencies] rustc_version = "0.4" diff --git a/programs/zk-token-proof/Cargo.toml b/programs/zk-token-proof/Cargo.toml index 3b135b95e13159..5438a73bdbc015 100644 --- a/programs/zk-token-proof/Cargo.toml +++ b/programs/zk-token-proof/Cargo.toml @@ -3,7 +3,7 @@ name = "solana-zk-token-proof-program" description = "Solana Zk Token Proof Program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" -version = "1.14.4" +version = "1.14.5" license = "Apache-2.0" edition = "2021" @@ -12,6 +12,6 @@ bytemuck = { version = "1.11.0", features = ["derive"] } getrandom = { version = "0.1", features = ["dummy"] } num-derive = "0.3" num-traits = "0.2" -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.4" } -solana-sdk = { path = "../../sdk", version = "=1.14.4" } -solana-zk-token-sdk = { path = "../../zk-token-sdk", version = "=1.14.4" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.5" } +solana-sdk = { path = "../../sdk", version = "=1.14.5" } +solana-zk-token-sdk = { path = "../../zk-token-sdk", version = "=1.14.5" } diff --git a/rayon-threadlimit/Cargo.toml b/rayon-threadlimit/Cargo.toml index 3367df36f08f4d..7564ba15b3302d 100644 --- a/rayon-threadlimit/Cargo.toml +++ b/rayon-threadlimit/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-rayon-threadlimit" -version = "1.14.4" +version = "1.14.5" description = "solana-rayon-threadlimit" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-rayon-threadlimit" diff --git a/rbpf-cli/Cargo.toml b/rbpf-cli/Cargo.toml index 915113adfefd21..0451e472ca12fa 100644 --- a/rbpf-cli/Cargo.toml +++ b/rbpf-cli/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "rbpf-cli" -version = "1.14.4" +version = "1.14.5" description = "CLI to test and analyze eBPF programs" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/rbpf" @@ -13,8 +13,8 @@ publish = false clap = { version = "3.1.5", features = ["cargo"] } serde = "1.0.138" serde_json = "1.0.81" -solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.4" } -solana-logger = { path = "../logger", version = "=1.14.4" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.4" } -solana-sdk = { path = "../sdk", version = "=1.14.4" } +solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.5" } +solana-logger = { path = "../logger", version = "=1.14.5" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.5" } +solana-sdk = { path = "../sdk", version = "=1.14.5" } solana_rbpf = "=0.2.31" diff --git a/remote-wallet/Cargo.toml b/remote-wallet/Cargo.toml index f4ec73093037a2..c12e720e7318b5 100644 --- a/remote-wallet/Cargo.toml +++ b/remote-wallet/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-remote-wallet" description = "Blockchain, Rebuilt for Scale" -version = "1.14.4" +version = "1.14.5" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -19,7 +19,7 @@ num-traits = { version = "0.2" } parking_lot = "0.12" qstring = "0.7.2" semver = "1.0" -solana-sdk = { path = "../sdk", version = "=1.14.4" } +solana-sdk = { path = "../sdk", version = "=1.14.5" } thiserror = "1.0" uriparse = "0.6.4" diff --git a/rpc-test/Cargo.toml b/rpc-test/Cargo.toml index 0056a0bf6b1ac0..2e57f1d1551e00 100644 --- a/rpc-test/Cargo.toml +++ b/rpc-test/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-rpc-test" -version = "1.14.4" +version = "1.14.5" description = "Solana RPC Test" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -19,17 +19,17 @@ log = "0.4.17" reqwest = { version = "0.11.11", default-features = false, features = ["blocking", "brotli", "deflate", "gzip", "rustls-tls", "json"] } serde = "1.0.138" serde_json = "1.0.81" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.4" } -solana-client = { path = "../client", version = "=1.14.4" } -solana-rpc = { path = "../rpc", version = "=1.14.4" } -solana-sdk = { path = "../sdk", version = "=1.14.4" } -solana-streamer = { path = "../streamer", version = "=1.14.4" } -solana-test-validator = { path = "../test-validator", version = "=1.14.4" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.4" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.5" } +solana-client = { path = "../client", version = "=1.14.5" } +solana-rpc = { path = "../rpc", version = "=1.14.5" } +solana-sdk = { path = "../sdk", version = "=1.14.5" } +solana-streamer = { path = "../streamer", version = "=1.14.5" } +solana-test-validator = { path = "../test-validator", version = "=1.14.5" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.5" } tokio = { version = "~1.14.1", features = ["full"] } [dev-dependencies] -solana-logger = { path = "../logger", version = "=1.14.4" } +solana-logger = { path = "../logger", version = "=1.14.5" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/rpc/Cargo.toml b/rpc/Cargo.toml index 6281c7e6b40cd4..75ff6eebd23dda 100644 --- a/rpc/Cargo.toml +++ b/rpc/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-rpc" -version = "1.14.4" +version = "1.14.5" description = "Solana RPC" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -29,26 +29,26 @@ serde = "1.0.138" serde_derive = "1.0.103" serde_json = "1.0.81" soketto = "0.7" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.4" } -solana-client = { path = "../client", version = "=1.14.4" } -solana-entry = { path = "../entry", version = "=1.14.4" } -solana-faucet = { path = "../faucet", version = "=1.14.4" } -solana-gossip = { path = "../gossip", version = "=1.14.4" } -solana-ledger = { path = "../ledger", version = "=1.14.4" } -solana-measure = { path = "../measure", version = "=1.14.4" } -solana-metrics = { path = "../metrics", version = "=1.14.4" } -solana-perf = { path = "../perf", version = "=1.14.4" } -solana-poh = { path = "../poh", version = "=1.14.4" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.4" } -solana-runtime = { path = "../runtime", version = "=1.14.4" } -solana-sdk = { path = "../sdk", version = "=1.14.4" } -solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.4" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.4" } -solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.4" } -solana-streamer = { path = "../streamer", version = "=1.14.4" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.4" } -solana-version = { path = "../version", version = "=1.14.4" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.4" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.5" } +solana-client = { path = "../client", version = "=1.14.5" } +solana-entry = { path = "../entry", version = "=1.14.5" } +solana-faucet = { path = "../faucet", version = "=1.14.5" } +solana-gossip = { path = "../gossip", version = "=1.14.5" } +solana-ledger = { path = "../ledger", version = "=1.14.5" } +solana-measure = { path = "../measure", version = "=1.14.5" } +solana-metrics = { path = "../metrics", version = "=1.14.5" } +solana-perf = { path = "../perf", version = "=1.14.5" } +solana-poh = { path = "../poh", version = "=1.14.5" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.5" } +solana-runtime = { path = "../runtime", version = "=1.14.5" } +solana-sdk = { path = "../sdk", version = "=1.14.5" } +solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.5" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.5" } +solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.5" } +solana-streamer = { path = "../streamer", version = "=1.14.5" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.5" } +solana-version = { path = "../version", version = "=1.14.5" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.5" } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } spl-token-2022 = { version = "=0.4.2", features = ["no-entrypoint"] } stream-cancel = "0.8.1" @@ -58,9 +58,9 @@ tokio-util = { version = "0.6", features = ["codec", "compat"] } [dev-dependencies] serial_test = "0.8.0" -solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.4" } -solana-net-utils = { path = "../net-utils", version = "=1.14.4" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.4" } +solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.5" } +solana-net-utils = { path = "../net-utils", version = "=1.14.5" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.5" } symlink = "0.1.0" [lib] diff --git a/runtime/Cargo.toml b/runtime/Cargo.toml index fab7f8ffb4ef0f..ffb2410fe39f75 100644 --- a/runtime/Cargo.toml +++ b/runtime/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-runtime" -version = "1.14.4" +version = "1.14.5" description = "Solana runtime" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -39,21 +39,21 @@ rayon = "1.5.3" regex = "1.5.6" serde = { version = "1.0.138", features = ["rc"] } serde_derive = "1.0.103" -solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.4" } -solana-bucket-map = { path = "../bucket_map", version = "=1.14.4" } -solana-compute-budget-program = { path = "../programs/compute-budget", version = "=1.14.4" } -solana-config-program = { path = "../programs/config", version = "=1.14.4" } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.4" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.4" } -solana-measure = { path = "../measure", version = "=1.14.4" } -solana-metrics = { path = "../metrics", version = "=1.14.4" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.4" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.4" } -solana-sdk = { path = "../sdk", version = "=1.14.4" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.4" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.4" } -solana-zk-token-proof-program = { path = "../programs/zk-token-proof", version = "=1.14.4" } -solana-zk-token-sdk = { path = "../zk-token-sdk", version = "=1.14.4" } +solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.5" } +solana-bucket-map = { path = "../bucket_map", version = "=1.14.5" } +solana-compute-budget-program = { path = "../programs/compute-budget", version = "=1.14.5" } +solana-config-program = { path = "../programs/config", version = "=1.14.5" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.5" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.5" } +solana-measure = { path = "../measure", version = "=1.14.5" } +solana-metrics = { path = "../metrics", version = "=1.14.5" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.5" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.5" } +solana-sdk = { path = "../sdk", version = "=1.14.5" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.5" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.5" } +solana-zk-token-proof-program = { path = "../programs/zk-token-proof", version = "=1.14.5" } +solana-zk-token-sdk = { path = "../zk-token-sdk", version = "=1.14.5" } strum = { version = "0.24", features = ["derive"] } strum_macros = "0.24" symlink = "0.1.0" @@ -71,7 +71,7 @@ assert_matches = "1.5.0" ed25519-dalek = "=1.0.1" libsecp256k1 = "0.6.0" rand_chacha = "0.2.2" -solana-logger = { path = "../logger", version = "=1.14.4" } +solana-logger = { path = "../logger", version = "=1.14.5" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/runtime/store-tool/Cargo.toml b/runtime/store-tool/Cargo.toml index 2cedba458949b6..2717ea1c5ed53b 100644 --- a/runtime/store-tool/Cargo.toml +++ b/runtime/store-tool/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-store-tool" description = "Tool to inspect append vecs" -version = "1.14.4" +version = "1.14.5" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -12,9 +12,9 @@ publish = false [dependencies] clap = "2.33.1" log = { version = "0.4.17" } -solana-logger = { path = "../../logger", version = "=1.14.4" } -solana-runtime = { path = "..", version = "=1.14.4" } -solana-version = { path = "../../version", version = "=1.14.4" } +solana-logger = { path = "../../logger", version = "=1.14.5" } +solana-runtime = { path = "..", version = "=1.14.5" } +solana-version = { path = "../../version", version = "=1.14.5" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/sdk/Cargo.toml b/sdk/Cargo.toml index 1c0cba4d8fa56b..130129b00f5841 100644 --- a/sdk/Cargo.toml +++ b/sdk/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-sdk" -version = "1.14.4" +version = "1.14.5" description = "Solana SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -71,11 +71,11 @@ serde_derive = "1.0.103" serde_json = { version = "1.0.81", optional = true } sha2 = "0.10.2" sha3 = { version = "0.10.1", optional = true } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.4" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.4" } -solana-logger = { path = "../logger", version = "=1.14.4", optional = true } -solana-program = { path = "program", version = "=1.14.4" } -solana-sdk-macro = { path = "macro", version = "=1.14.4" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.5" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.5" } +solana-logger = { path = "../logger", version = "=1.14.5", optional = true } +solana-program = { path = "program", version = "=1.14.5" } +solana-sdk-macro = { path = "macro", version = "=1.14.5" } thiserror = "1.0" uriparse = "0.6.4" wasm-bindgen = "0.2" diff --git a/sdk/cargo-build-bpf/Cargo.toml b/sdk/cargo-build-bpf/Cargo.toml index a1cc101807ee55..d5603791e50975 100644 --- a/sdk/cargo-build-bpf/Cargo.toml +++ b/sdk/cargo-build-bpf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-cargo-build-bpf" -version = "1.14.4" +version = "1.14.5" description = "Compile a local package and all of its dependencies using the Solana SBF SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,7 +12,7 @@ publish = false [dependencies] cargo_metadata = "0.15.0" clap = { version = "3.1.5", features = ["cargo", "env"] } -solana-sdk = { path = "..", version = "=1.14.4" } +solana-sdk = { path = "..", version = "=1.14.5" } [features] program = [] diff --git a/sdk/cargo-build-sbf/Cargo.toml b/sdk/cargo-build-sbf/Cargo.toml index 6bc9cd90277f1b..fa1fb8e93a21eb 100644 --- a/sdk/cargo-build-sbf/Cargo.toml +++ b/sdk/cargo-build-sbf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-cargo-build-sbf" -version = "1.14.4" +version = "1.14.5" description = "Compile a local package and all of its dependencies using the Solana SBF SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -15,9 +15,9 @@ cargo_metadata = "0.15.0" clap = { version = "3.1.5", features = ["cargo", "env"] } log = { version = "0.4.14", features = ["std"] } regex = "1.5.6" -solana-download-utils = { path = "../../download-utils", version = "=1.14.4" } -solana-logger = { path = "../../logger", version = "=1.14.4" } -solana-sdk = { path = "..", version = "=1.14.4" } +solana-download-utils = { path = "../../download-utils", version = "=1.14.5" } +solana-logger = { path = "../../logger", version = "=1.14.5" } +solana-sdk = { path = "..", version = "=1.14.5" } tar = "0.4.38" [dev-dependencies] diff --git a/sdk/cargo-build-sbf/tests/crates/fail/Cargo.toml b/sdk/cargo-build-sbf/tests/crates/fail/Cargo.toml index d0ef954995889f..16b0d3c1f1a895 100644 --- a/sdk/cargo-build-sbf/tests/crates/fail/Cargo.toml +++ b/sdk/cargo-build-sbf/tests/crates/fail/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "fail" -version = "1.14.4" +version = "1.14.5" description = "Solana SBF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ edition = "2021" publish = false [dependencies] -solana-program = { path = "../../../../program", version = "=1.14.4" } +solana-program = { path = "../../../../program", version = "=1.14.5" } [lib] crate-type = ["cdylib"] diff --git a/sdk/cargo-build-sbf/tests/crates/noop/Cargo.toml b/sdk/cargo-build-sbf/tests/crates/noop/Cargo.toml index a71bfef8589e57..c2209674d5e399 100644 --- a/sdk/cargo-build-sbf/tests/crates/noop/Cargo.toml +++ b/sdk/cargo-build-sbf/tests/crates/noop/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "noop" -version = "1.14.4" +version = "1.14.5" description = "Solana SBF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ edition = "2021" publish = false [dependencies] -solana-program = { path = "../../../../program", version = "=1.14.4" } +solana-program = { path = "../../../../program", version = "=1.14.5" } [lib] crate-type = ["cdylib"] diff --git a/sdk/cargo-test-bpf/Cargo.toml b/sdk/cargo-test-bpf/Cargo.toml index 66bd42721e8177..bd9b2e7c909170 100644 --- a/sdk/cargo-test-bpf/Cargo.toml +++ b/sdk/cargo-test-bpf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-cargo-test-bpf" -version = "1.14.4" +version = "1.14.5" description = "Execute all unit and integration tests after building with the Solana SBF SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/sdk/cargo-test-sbf/Cargo.toml b/sdk/cargo-test-sbf/Cargo.toml index 55a7918159fdb0..04935e502d56d4 100644 --- a/sdk/cargo-test-sbf/Cargo.toml +++ b/sdk/cargo-test-sbf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-cargo-test-sbf" -version = "1.14.4" +version = "1.14.5" description = "Execute all unit and integration tests after building with the Solana SBF SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/sdk/gen-headers/Cargo.toml b/sdk/gen-headers/Cargo.toml index d10fc2ab3a6f96..a9291a664dae8f 100644 --- a/sdk/gen-headers/Cargo.toml +++ b/sdk/gen-headers/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "gen-headers" -version = "1.14.4" +version = "1.14.5" edition = "2021" license = "Apache-2.0" publish = false diff --git a/sdk/macro/Cargo.toml b/sdk/macro/Cargo.toml index 7e4fb801155be1..77394eb404e3c6 100644 --- a/sdk/macro/Cargo.toml +++ b/sdk/macro/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-sdk-macro" -version = "1.14.4" +version = "1.14.5" description = "Solana SDK Macro" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/sdk/program/Cargo.toml b/sdk/program/Cargo.toml index 7691c6b81c288e..789614a0f84cd6 100644 --- a/sdk/program/Cargo.toml +++ b/sdk/program/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-program" -version = "1.14.4" +version = "1.14.5" description = "Solana Program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -31,9 +31,9 @@ serde_derive = "1.0" serde_json = "1.0" sha2 = "0.10.0" sha3 = "0.10.0" -solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.4" } -solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.4" } -solana-sdk-macro = { path = "../macro", version = "=1.14.4" } +solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.5" } +solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.5" } +solana-sdk-macro = { path = "../macro", version = "=1.14.5" } thiserror = "1.0" [target.'cfg(not(target_os = "solana"))'.dependencies] @@ -50,7 +50,7 @@ wasm-bindgen = "0.2" zeroize = { version = "1.3", default-features = true, features = ["zeroize_derive"] } [target.'cfg(not(target_os = "solana"))'.dev-dependencies] -solana-logger = { path = "../../logger", version = "=1.14.4" } +solana-logger = { path = "../../logger", version = "=1.14.5" } [target.'cfg(target_arch = "wasm32")'.dependencies] console_error_panic_hook = "0.1.7" diff --git a/send-transaction-service/Cargo.toml b/send-transaction-service/Cargo.toml index 6dc5a783fc761a..d54eb44e1476f4 100644 --- a/send-transaction-service/Cargo.toml +++ b/send-transaction-service/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-send-transaction-service" -version = "1.14.4" +version = "1.14.5" description = "Solana send transaction service" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,14 +12,14 @@ edition = "2021" [dependencies] crossbeam-channel = "0.5" log = "0.4.17" -solana-client = { path = "../client", version = "=1.14.4" } -solana-measure = { path = "../measure", version = "=1.14.4" } -solana-metrics = { path = "../metrics", version = "=1.14.4" } -solana-runtime = { path = "../runtime", version = "=1.14.4" } -solana-sdk = { path = "../sdk", version = "=1.14.4" } +solana-client = { path = "../client", version = "=1.14.5" } +solana-measure = { path = "../measure", version = "=1.14.5" } +solana-metrics = { path = "../metrics", version = "=1.14.5" } +solana-runtime = { path = "../runtime", version = "=1.14.5" } +solana-sdk = { path = "../sdk", version = "=1.14.5" } [dev-dependencies] -solana-logger = { path = "../logger", version = "=1.14.4" } +solana-logger = { path = "../logger", version = "=1.14.5" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/stake-accounts/Cargo.toml b/stake-accounts/Cargo.toml index ade7c852aada2b..1649a24a4fe473 100644 --- a/stake-accounts/Cargo.toml +++ b/stake-accounts/Cargo.toml @@ -3,7 +3,7 @@ name = "solana-stake-accounts" description = "Blockchain, Rebuilt for Scale" authors = ["Solana Maintainers "] edition = "2021" -version = "1.14.4" +version = "1.14.5" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -11,15 +11,15 @@ documentation = "https://docs.rs/solana-stake-accounts" [dependencies] clap = "2.33.1" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.4" } -solana-cli-config = { path = "../cli-config", version = "=1.14.4" } -solana-client = { path = "../client", version = "=1.14.4" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.4" } -solana-sdk = { path = "../sdk", version = "=1.14.4" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.4" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.5" } +solana-cli-config = { path = "../cli-config", version = "=1.14.5" } +solana-client = { path = "../client", version = "=1.14.5" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.5" } +solana-sdk = { path = "../sdk", version = "=1.14.5" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.5" } [dev-dependencies] -solana-runtime = { path = "../runtime", version = "=1.14.4" } +solana-runtime = { path = "../runtime", version = "=1.14.5" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/storage-bigtable/Cargo.toml b/storage-bigtable/Cargo.toml index a16f09c38facf6..dbfcfa8c862d6f 100644 --- a/storage-bigtable/Cargo.toml +++ b/storage-bigtable/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-storage-bigtable" -version = "1.14.4" +version = "1.14.5" description = "Solana Storage BigTable" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -27,10 +27,10 @@ prost-types = "0.11.0" serde = "1.0.138" serde_derive = "1.0.103" smpl_jwt = "0.7.1" -solana-metrics = { path = "../metrics", version = "=1.14.4" } -solana-sdk = { path = "../sdk", version = "=1.14.4" } -solana-storage-proto = { path = "../storage-proto", version = "=1.14.4" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.4" } +solana-metrics = { path = "../metrics", version = "=1.14.5" } +solana-sdk = { path = "../sdk", version = "=1.14.5" } +solana-storage-proto = { path = "../storage-proto", version = "=1.14.5" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.5" } thiserror = "1.0" tokio = "1" tonic = { version = "0.8.0", features = ["tls", "transport"] } diff --git a/storage-bigtable/build-proto/Cargo.lock b/storage-bigtable/build-proto/Cargo.lock index 69c097bd246905..53f019c26ccca8 100644 --- a/storage-bigtable/build-proto/Cargo.lock +++ b/storage-bigtable/build-proto/Cargo.lock @@ -219,7 +219,7 @@ dependencies = [ [[package]] name = "proto" -version = "1.14.4" +version = "1.14.5" dependencies = [ "protobuf-src", "tonic-build", diff --git a/storage-bigtable/build-proto/Cargo.toml b/storage-bigtable/build-proto/Cargo.toml index 09d871c4ec3727..65b8a43a70f4bf 100644 --- a/storage-bigtable/build-proto/Cargo.toml +++ b/storage-bigtable/build-proto/Cargo.toml @@ -7,7 +7,7 @@ license = "Apache-2.0" name = "proto" publish = false repository = "https://github.com/solana-labs/solana" -version = "1.14.4" +version = "1.14.5" [workspace] diff --git a/storage-proto/Cargo.toml b/storage-proto/Cargo.toml index 496cdc18606921..38e2d1962e8b18 100644 --- a/storage-proto/Cargo.toml +++ b/storage-proto/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-storage-proto" -version = "1.14.4" +version = "1.14.5" description = "Solana Storage Protobuf Definitions" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,9 +14,9 @@ bincode = "1.3.3" bs58 = "0.4.0" prost = "0.11.0" serde = "1.0.138" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.4" } -solana-sdk = { path = "../sdk", version = "=1.14.4" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.4" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.5" } +solana-sdk = { path = "../sdk", version = "=1.14.5" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.5" } [dev-dependencies] enum-iterator = "0.8.1" diff --git a/streamer/Cargo.toml b/streamer/Cargo.toml index a54999eea244b2..3a72a8d2ac645b 100644 --- a/streamer/Cargo.toml +++ b/streamer/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-streamer" -version = "1.14.4" +version = "1.14.5" description = "Solana Streamer" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -25,15 +25,15 @@ quinn = "0.8.3" rand = "0.7.0" rcgen = "0.9.2" rustls = { version = "0.20.6", features = ["dangerous_configuration"] } -solana-metrics = { path = "../metrics", version = "=1.14.4" } -solana-perf = { path = "../perf", version = "=1.14.4" } -solana-sdk = { path = "../sdk", version = "=1.14.4" } +solana-metrics = { path = "../metrics", version = "=1.14.5" } +solana-perf = { path = "../perf", version = "=1.14.5" } +solana-sdk = { path = "../sdk", version = "=1.14.5" } thiserror = "1.0" tokio = { version = "1", features = ["full"] } x509-parser = "0.14.0" [dev-dependencies] -solana-logger = { path = "../logger", version = "=1.14.4" } +solana-logger = { path = "../logger", version = "=1.14.5" } [lib] crate-type = ["lib"] diff --git a/sys-tuner/Cargo.toml b/sys-tuner/Cargo.toml index 5d37e3586ef76a..077f1fb6ab2583 100644 --- a/sys-tuner/Cargo.toml +++ b/sys-tuner/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-sys-tuner" description = "The solana cluster system tuner daemon" -version = "1.14.4" +version = "1.14.5" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,8 +14,8 @@ publish = true clap = "2.33.1" libc = "0.2.126" log = "0.4.17" -solana-logger = { path = "../logger", version = "=1.14.4" } -solana-version = { path = "../version", version = "=1.14.4" } +solana-logger = { path = "../logger", version = "=1.14.5" } +solana-version = { path = "../version", version = "=1.14.5" } [target."cfg(unix)".dependencies] unix_socket2 = "0.5.4" diff --git a/test-validator/Cargo.toml b/test-validator/Cargo.toml index f703481cfaf120..5cec1b13dceeaa 100644 --- a/test-validator/Cargo.toml +++ b/test-validator/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "solana-test-validator" description = "Blockchain, Rebuilt for Scale" -version = "1.14.4" +version = "1.14.5" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-test-validator" readme = "../README.md" @@ -15,19 +15,19 @@ base64 = "0.13.0" log = "0.4.17" serde_derive = "1.0.103" serde_json = "1.0.81" -solana-cli-output = { path = "../cli-output", version = "=1.14.4" } -solana-client = { path = "../client", version = "=1.14.4" } -solana-core = { path = "../core", version = "=1.14.4" } -solana-gossip = { path = "../gossip", version = "=1.14.4" } -solana-ledger = { path = "../ledger", version = "=1.14.4" } -solana-logger = { path = "../logger", version = "=1.14.4" } -solana-net-utils = { path = "../net-utils", version = "=1.14.4" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.4" } -solana-program-test = { path = "../program-test", version = "=1.14.4" } -solana-rpc = { path = "../rpc", version = "=1.14.4" } -solana-runtime = { path = "../runtime", version = "=1.14.4" } -solana-sdk = { path = "../sdk", version = "=1.14.4" } -solana-streamer = { path = "../streamer", version = "=1.14.4" } +solana-cli-output = { path = "../cli-output", version = "=1.14.5" } +solana-client = { path = "../client", version = "=1.14.5" } +solana-core = { path = "../core", version = "=1.14.5" } +solana-gossip = { path = "../gossip", version = "=1.14.5" } +solana-ledger = { path = "../ledger", version = "=1.14.5" } +solana-logger = { path = "../logger", version = "=1.14.5" } +solana-net-utils = { path = "../net-utils", version = "=1.14.5" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.5" } +solana-program-test = { path = "../program-test", version = "=1.14.5" } +solana-rpc = { path = "../rpc", version = "=1.14.5" } +solana-runtime = { path = "../runtime", version = "=1.14.5" } +solana-sdk = { path = "../sdk", version = "=1.14.5" } +solana-streamer = { path = "../streamer", version = "=1.14.5" } tokio = { version = "1", features = ["full"] } [package.metadata.docs.rs] diff --git a/tokens/Cargo.toml b/tokens/Cargo.toml index f9ecb46d1e755f..a2486c19a468ee 100644 --- a/tokens/Cargo.toml +++ b/tokens/Cargo.toml @@ -3,7 +3,7 @@ name = "solana-tokens" description = "Blockchain, Rebuilt for Scale" authors = ["Solana Maintainers "] edition = "2021" -version = "1.14.4" +version = "1.14.5" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -19,14 +19,14 @@ indexmap = "1.9.1" indicatif = "0.16.2" pickledb = "0.4.1" serde = { version = "1.0", features = ["derive"] } -solana-account-decoder = { path = "../account-decoder", version = "=1.14.4" } -solana-clap-utils = { path = "../clap-utils", version = "=1.14.4" } -solana-cli-config = { path = "../cli-config", version = "=1.14.4" } -solana-client = { path = "../client", version = "=1.14.4" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.4" } -solana-sdk = { path = "../sdk", version = "=1.14.4" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.4" } -solana-version = { path = "../version", version = "=1.14.4" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.5" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.5" } +solana-cli-config = { path = "../cli-config", version = "=1.14.5" } +solana-client = { path = "../client", version = "=1.14.5" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.5" } +solana-sdk = { path = "../sdk", version = "=1.14.5" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.5" } +solana-version = { path = "../version", version = "=1.14.5" } spl-associated-token-account = { version = "=1.1.1" } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } tempfile = "3.3.0" @@ -34,6 +34,6 @@ thiserror = "1.0" [dev-dependencies] bincode = "1.3.3" -solana-logger = { path = "../logger", version = "=1.14.4" } -solana-streamer = { path = "../streamer", version = "=1.14.4" } -solana-test-validator = { path = "../test-validator", version = "=1.14.4" } +solana-logger = { path = "../logger", version = "=1.14.5" } +solana-streamer = { path = "../streamer", version = "=1.14.5" } +solana-test-validator = { path = "../test-validator", version = "=1.14.5" } diff --git a/transaction-dos/Cargo.toml b/transaction-dos/Cargo.toml index d02be32a146e32..7c6f54e39f1dea 100644 --- a/transaction-dos/Cargo.toml +++ b/transaction-dos/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-transaction-dos" -version = "1.14.4" +version = "1.14.5" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,23 +14,23 @@ clap = "2.33.1" log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.4" } -solana-cli = { path = "../cli", version = "=1.14.4" } -solana-client = { path = "../client", version = "=1.14.4" } -solana-core = { path = "../core", version = "=1.14.4" } -solana-faucet = { path = "../faucet", version = "=1.14.4" } -solana-gossip = { path = "../gossip", version = "=1.14.4" } -solana-logger = { path = "../logger", version = "=1.14.4" } -solana-measure = { path = "../measure", version = "=1.14.4" } -solana-net-utils = { path = "../net-utils", version = "=1.14.4" } -solana-runtime = { path = "../runtime", version = "=1.14.4" } -solana-sdk = { path = "../sdk", version = "=1.14.4" } -solana-streamer = { path = "../streamer", version = "=1.14.4" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.4" } -solana-version = { path = "../version", version = "=1.14.4" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.5" } +solana-cli = { path = "../cli", version = "=1.14.5" } +solana-client = { path = "../client", version = "=1.14.5" } +solana-core = { path = "../core", version = "=1.14.5" } +solana-faucet = { path = "../faucet", version = "=1.14.5" } +solana-gossip = { path = "../gossip", version = "=1.14.5" } +solana-logger = { path = "../logger", version = "=1.14.5" } +solana-measure = { path = "../measure", version = "=1.14.5" } +solana-net-utils = { path = "../net-utils", version = "=1.14.5" } +solana-runtime = { path = "../runtime", version = "=1.14.5" } +solana-sdk = { path = "../sdk", version = "=1.14.5" } +solana-streamer = { path = "../streamer", version = "=1.14.5" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.5" } +solana-version = { path = "../version", version = "=1.14.5" } [dev-dependencies] -solana-local-cluster = { path = "../local-cluster", version = "=1.14.4" } +solana-local-cluster = { path = "../local-cluster", version = "=1.14.5" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/transaction-status/Cargo.toml b/transaction-status/Cargo.toml index 15857e8291bb5c..706664eb56947c 100644 --- a/transaction-status/Cargo.toml +++ b/transaction-status/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-transaction-status" -version = "1.14.4" +version = "1.14.5" description = "Solana transaction status types" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -20,12 +20,12 @@ log = "0.4.17" serde = "1.0.138" serde_derive = "1.0.103" serde_json = "1.0.81" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.4" } -solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.4" } -solana-measure = { path = "../measure", version = "=1.14.4" } -solana-metrics = { path = "../metrics", version = "=1.14.4" } -solana-sdk = { path = "../sdk", version = "=1.14.4" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.4" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.5" } +solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.5" } +solana-measure = { path = "../measure", version = "=1.14.5" } +solana-metrics = { path = "../metrics", version = "=1.14.5" } +solana-sdk = { path = "../sdk", version = "=1.14.5" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.5" } spl-associated-token-account = { version = "=1.1.1", features = ["no-entrypoint"] } spl-memo = { version = "=3.0.1", features = ["no-entrypoint"] } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } diff --git a/upload-perf/Cargo.toml b/upload-perf/Cargo.toml index 53cbedbf33263e..ce109f14a8f8e6 100644 --- a/upload-perf/Cargo.toml +++ b/upload-perf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-upload-perf" -version = "1.14.4" +version = "1.14.5" description = "Metrics Upload Utility" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -11,7 +11,7 @@ publish = false [dependencies] serde_json = "1.0.81" -solana-metrics = { path = "../metrics", version = "=1.14.4" } +solana-metrics = { path = "../metrics", version = "=1.14.5" } [[bin]] name = "solana-upload-perf" diff --git a/validator/Cargo.toml b/validator/Cargo.toml index 677bc2fac87dd8..40a3b4e944b0b7 100644 --- a/validator/Cargo.toml +++ b/validator/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-validator" description = "Blockchain, Rebuilt for Scale" -version = "1.14.4" +version = "1.14.5" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -28,30 +28,30 @@ num_cpus = "1.13.1" rand = "0.7.0" serde = "1.0.138" serde_json = "1.0.81" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.4" } -solana-cli-config = { path = "../cli-config", version = "=1.14.4" } -solana-client = { path = "../client", version = "=1.14.4" } -solana-core = { path = "../core", version = "=1.14.4" } -solana-download-utils = { path = "../download-utils", version = "=1.14.4" } -solana-entry = { path = "../entry", version = "=1.14.4" } -solana-faucet = { path = "../faucet", version = "=1.14.4" } -solana-genesis-utils = { path = "../genesis-utils", version = "=1.14.4" } -solana-gossip = { path = "../gossip", version = "=1.14.4" } -solana-ledger = { path = "../ledger", version = "=1.14.4" } -solana-logger = { path = "../logger", version = "=1.14.4" } -solana-metrics = { path = "../metrics", version = "=1.14.4" } -solana-net-utils = { path = "../net-utils", version = "=1.14.4" } -solana-perf = { path = "../perf", version = "=1.14.4" } -solana-poh = { path = "../poh", version = "=1.14.4" } -solana-rpc = { path = "../rpc", version = "=1.14.4" } -solana-runtime = { path = "../runtime", version = "=1.14.4" } -solana-sdk = { path = "../sdk", version = "=1.14.4" } -solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.4" } -solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.4" } -solana-streamer = { path = "../streamer", version = "=1.14.4" } -solana-test-validator = { path = "../test-validator", version = "=1.14.4" } -solana-version = { path = "../version", version = "=1.14.4" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.4" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.5" } +solana-cli-config = { path = "../cli-config", version = "=1.14.5" } +solana-client = { path = "../client", version = "=1.14.5" } +solana-core = { path = "../core", version = "=1.14.5" } +solana-download-utils = { path = "../download-utils", version = "=1.14.5" } +solana-entry = { path = "../entry", version = "=1.14.5" } +solana-faucet = { path = "../faucet", version = "=1.14.5" } +solana-genesis-utils = { path = "../genesis-utils", version = "=1.14.5" } +solana-gossip = { path = "../gossip", version = "=1.14.5" } +solana-ledger = { path = "../ledger", version = "=1.14.5" } +solana-logger = { path = "../logger", version = "=1.14.5" } +solana-metrics = { path = "../metrics", version = "=1.14.5" } +solana-net-utils = { path = "../net-utils", version = "=1.14.5" } +solana-perf = { path = "../perf", version = "=1.14.5" } +solana-poh = { path = "../poh", version = "=1.14.5" } +solana-rpc = { path = "../rpc", version = "=1.14.5" } +solana-runtime = { path = "../runtime", version = "=1.14.5" } +solana-sdk = { path = "../sdk", version = "=1.14.5" } +solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.5" } +solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.5" } +solana-streamer = { path = "../streamer", version = "=1.14.5" } +solana-test-validator = { path = "../test-validator", version = "=1.14.5" } +solana-version = { path = "../version", version = "=1.14.5" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.5" } symlink = "0.1.0" [target.'cfg(not(target_env = "msvc"))'.dependencies] diff --git a/version/Cargo.toml b/version/Cargo.toml index c8a727ef99abca..82ba623d3cf2aa 100644 --- a/version/Cargo.toml +++ b/version/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-version" -version = "1.14.4" +version = "1.14.5" description = "Solana Version" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,9 +14,9 @@ log = "0.4.17" semver = "1.0.10" serde = "1.0.138" serde_derive = "1.0.103" -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.4" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.4" } -solana-sdk = { path = "../sdk", version = "=1.14.4" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.5" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.5" } +solana-sdk = { path = "../sdk", version = "=1.14.5" } [lib] name = "solana_version" diff --git a/watchtower/Cargo.toml b/watchtower/Cargo.toml index 3062bbc285956c..ee4052fa19dd17 100644 --- a/watchtower/Cargo.toml +++ b/watchtower/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-watchtower" description = "Blockchain, Rebuilt for Scale" -version = "1.14.4" +version = "1.14.5" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -13,15 +13,15 @@ documentation = "https://docs.rs/solana-watchtower" clap = "2.33.1" humantime = "2.0.1" log = "0.4.17" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.4" } -solana-cli-config = { path = "../cli-config", version = "=1.14.4" } -solana-cli-output = { path = "../cli-output", version = "=1.14.4" } -solana-client = { path = "../client", version = "=1.14.4" } -solana-logger = { path = "../logger", version = "=1.14.4" } -solana-metrics = { path = "../metrics", version = "=1.14.4" } -solana-notifier = { path = "../notifier", version = "=1.14.4" } -solana-sdk = { path = "../sdk", version = "=1.14.4" } -solana-version = { path = "../version", version = "=1.14.4" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.5" } +solana-cli-config = { path = "../cli-config", version = "=1.14.5" } +solana-cli-output = { path = "../cli-output", version = "=1.14.5" } +solana-client = { path = "../client", version = "=1.14.5" } +solana-logger = { path = "../logger", version = "=1.14.5" } +solana-metrics = { path = "../metrics", version = "=1.14.5" } +solana-notifier = { path = "../notifier", version = "=1.14.5" } +solana-sdk = { path = "../sdk", version = "=1.14.5" } +solana-version = { path = "../version", version = "=1.14.5" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/zk-token-sdk/Cargo.toml b/zk-token-sdk/Cargo.toml index 59522e6837584e..4d26f36d6688e8 100644 --- a/zk-token-sdk/Cargo.toml +++ b/zk-token-sdk/Cargo.toml @@ -3,7 +3,7 @@ name = "solana-zk-token-sdk" description = "Solana Zk Token SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" -version = "1.14.4" +version = "1.14.5" license = "Apache-2.0" edition = "2021" @@ -12,7 +12,7 @@ base64 = "0.13" bytemuck = { version = "1.11.0", features = ["derive"] } num-derive = "0.3" num-traits = "0.2" -solana-program = { path = "../sdk/program", version = "=1.14.4" } +solana-program = { path = "../sdk/program", version = "=1.14.5" } [target.'cfg(not(target_os = "solana"))'.dependencies] aes-gcm-siv = "0.10.3" @@ -29,7 +29,7 @@ rand = "0.7" serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" sha3 = "0.9" -solana-sdk = { path = "../sdk", version = "=1.14.4" } +solana-sdk = { path = "../sdk", version = "=1.14.5" } subtle = "2" thiserror = "1.0" zeroize = { version = "1.3", default-features = false, features = ["zeroize_derive"] } From 33c4c9c23474c3b890bcbd75fc0868f25b4c1987 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Tue, 4 Oct 2022 17:31:55 +0000 Subject: [PATCH 168/465] Rewrite the Quick Start guide to rely exclusively on the playground (beta.solpg.io) (backport #28101) (#28209) docs: Rewrite the Quick Start guide to rely exclusively on playground (#28101) * Update hello world docs client part * Sign the transaction with playground wallet keypair * Remove unused explorer image (cherry picked from commit 83f9c14d5cdabbf893a3fc9ff3ab2a7555adccf4) Co-authored-by: acheron <98934430+acheroncrypto@users.noreply.github.com> --- docs/src/getstarted/hello-world.md | 161 ++++++------------ ...lana-get-started-view-logs-on-explorer.png | Bin 174869 -> 0 bytes 2 files changed, 50 insertions(+), 111 deletions(-) delete mode 100644 docs/static/img/quickstarts/solana-get-started-view-logs-on-explorer.png diff --git a/docs/src/getstarted/hello-world.md b/docs/src/getstarted/hello-world.md index f397c75f9d0eeb..d33ae18a6dcc1e 100644 --- a/docs/src/getstarted/hello-world.md +++ b/docs/src/getstarted/hello-world.md @@ -18,7 +18,7 @@ For this "hello world" quickstart guide, we will use [Solana Playground](https:/ [Solana Playground](https://beta.solpg.io) is browser based application that will let you write, build, and deploy on chain Solana programs. All from your browser. No installation needed. -It is a great developer resources for getting started with Solana development, especially on Windows. +It is a great developer resource for getting started with Solana development, especially on Windows. ### Import our example project @@ -102,6 +102,12 @@ You can click the "Deploy" button to deploy your first program to the Solana blo After each deployment, you will see your Playground Wallet balance change. By default, Solana Playground will automatically request SOL airdrops on your behalf to ensure your wallet has enough SOL to cover the cost of deployment. +> Note: +> If you need more SOL, you can airdrop more by typing airdrop command in the playground terminal: +```sh +solana airdrop 2 +``` + ![Build and deploy your Solana program to the blockchain](/img/quickstarts/solana-get-started-build-and-deploy.png) ### Find your program id @@ -118,90 +124,29 @@ You have successfully setup, built, and deployed a Solana program using the Rust Once you have successfully deployed a Solana program to the blockchain, you will want to be able to interact with that program. -Like most developers creating dApps and websites, we will interact with our on chain program using JavaScript inside a NodeJS application. Specifically, will use the open source [NPM package](https://www.npmjs.com/package/@solana/web3.js) `@solana/web3.js` to aid in our client application. +Like most developers creating dApps and websites, we will interact with our on chain program using JavaScript. Specifically, will use the open source [NPM package](https://www.npmjs.com/package/@solana/web3.js) `@solana/web3.js` to aid in our client application. > **NOTE:** > This web3.js package is an abstraction layer on top of the [JSON RPC API](./../developing/clients/jsonrpc-api.md) that reduced the need for rewriting common boilerplate, helping to simplify your client side application code. -### Initialize a new Node project - -For a simple client application for our on chain program, create a new folder for the Node project to live: - -```bash -mkdir hello_world && cd hello_world -``` - -Initialize a new Node project on you local computer: - -```bash -npm init -y -# or -yarn init -y -``` +### Initialize client -To easily interact with the Solana blockchain, add the [`@solana/web3.js`](../developing/clients/javascript-api.md) package to your Node project: +We will be using Solana Playground for the client generation. Create a client folder by running `run` command in the playground terminal: ```bash -npm i @solana/web3.js -# or -yarn add @solana/web3.js -``` - -Create a new file named `app.js` and open it in your favorite code editor. This is where we will work for the rest of our `hello world` program. - -### Connect to the cluster - -Import the `@solana/web3.js` library into your project so we can use all the JSON RPC helper functions that are built into it: - -```js -// import the Solana web3.js library -const web3 = require("@solana/web3.js"); +run ``` -We will also define the `SOLANA_CLUSTER` your program was deployed as well as the `PROGRAM_ID` of your new program: +We have created `client` folder and a default `client.ts`. This is where we will work for the rest of our `hello world` program. -```js -// define our program ID and cluster to interact with -const SOLANA_CLUSTER = "devnet"; -const PROGRAM_ID = "5AQaXHRKmoZMuBem544ELfEAN2qe2y9PU8nnezvpgeP7"; -``` +### Playground globals -Next we will need to create a `connection` to the specific cluster we deployed our program to: +In playground, there are many utilities that are globally available for us to use without installing or setting up anything. Most important ones for our `hello world` program are `web3` for `@solana/web3.js` and `pg` for Solana Playground utilities. -```js -// create a new connection to the Solana blockchain -const connection = new web3.Connection(web3.clusterApiUrl(SOLANA_CLUSTER)); -``` - -### Create and fund a wallet for testing - -In order to submit [transactions](../developing/programming-model/transactions.md) to a Solana cluster, you will need to have a wallet that will pay for the cost of execution. For simplicity, we will generate a dummy "throw away" wallet (and fund it with SOL) for our sample `hello_world` program named `payer` - -```js -// create a "throw away" wallet for testing -let payer = web3.Keypair.generate(); -console.log("Generated payer address:", payer.publicKey.toBase58()); - -// fund the "throw away" wallet via an airdrop -console.log("Requesting airdrop..."); -let airdropSignature = await connection.requestAirdrop( - payer.publicKey, - web3.LAMPORTS_PER_SOL, -); - -// wait for the airdrop to be completed -await connection.confirmTransaction(airdropSignature); - -// log the signature to the console -console.log( - "Airdrop submitted:", - `https://explorer.solana.com/tx/${airdropSignature}?cluster=${SOLANA_CLUSTER}`, -); -``` - -> You will notice that we are logging a URL of the Solana Explorer to the console. This will help us view our transaction on the blockchain when we run our Node application. +> Note: +> You can go over all of the available globals by pressing `CTRL+SPACE` (or `CMD+SPACE` on macOS) inside the editor. -### Create and send a transaction +### Call the program To execute your on chain program, you must send a [transaction](../developing/programming-model/transactions.md) to it. Each transaction submitted to the Solana blockchain contains a listing of instructions (and the program's that instruction will interact with). @@ -211,65 +156,59 @@ Here we create a new transaction and add a single `instruction` to it: // create an empty transaction const transaction = new web3.Transaction(); -// add a single instruction to the transaction +// add a hello world program instruction to the transaction transaction.add( new web3.TransactionInstruction({ - keys: [ - { - pubkey: payer.publicKey, - isSigner: true, - isWritable: false, - }, - { - pubkey: web3.SystemProgram.programId, - isSigner: false, - isWritable: false, - }, - ], - programId: new web3.PublicKey(PROGRAM_ID), - }), + keys: [], + programId: new web3.PublicKey(pg.PROGRAM_ID), + }) ); ``` -Each `instruction` must include all the keys involved in the operation and the program ID we want to execute. In this example, our `keys` contain the `payer` (that we created earlier to pay for the execution) and the [System Program](../developing/runtime-facilities/programs#system-program) (which is required for all program execution). +Each `instruction` must include all the keys involved in the operation and the program ID we want to execute. In this example `keys` is empty because our program only logs `hello world` and doesn't need any accounts. -With our transaction created, we can submit it to the cluster (via our `connection`): +With our transaction created, we can submit it to the cluster: ```js -// submit the transaction to the cluster +// send the transaction to the Solana cluster console.log("Sending transaction..."); -let txid = await web3.sendAndConfirmTransaction(connection, transaction, [ - payer, -]); -console.log( - "Transaction submitted:", - `https://explorer.solana.com/tx/${txid}?cluster=${SOLANA_CLUSTER}`, +const txHash = await web3.sendAndConfirmTransaction( + pg.connection, + transaction, + [pg.wallet.keypair] ); +console.log("Transaction sent with hash:", txHash); ``` -### Run our application +> Note: +> The first signer in the signers array is the transaction fee payer by default. We are signing with our keypair `pg.wallet.keypair`. -With our Node application written, you can run the code via the command line: +### Run the application -```bash -node app.js -``` +With the client application written, you can run the code via the same `run` command. -Once your Node application completes, you will see output similar to this: +Once your application completes, you will see output similar to this: -```bash -Generated payer address: 8fBnnMz2SLBcmrsrvWBAt91kSPAWRTkjbrVPJqDcxq2s -Requesting airdrop... -Airdrop complete: https://explorer.solana.com/tx/38EXqADsgAj1yNpcTDRwC66HooW1d9mk9PMnPP9V8JbsokZPuWZhP3W9EaixXhPFoBXVQk1NQ2otCs5W1ukt73Hc?cluster=devnet -Sending transaction... -Transaction submitted: https://explorer.solana.com/tx/3gv6uAkyDoLZR94hcMf3fDiwnDNN9rrdXos9rmMmok2xJtaW9NKehYKqSspxVH2HpAK7WHfRYQfsyuzr9gguzf2j?cluster=devnet +```sh +Running client... + client.ts: + My address: GkxZRRNPfaUfL9XdYVfKF3rWjMcj5md6b6mpRoWpURwP + My balance: 5.7254472 SOL + Sending transaction... + Transaction sent with hash: 2Ra7D9JoqeNsax9HmNq6MB4qWtKPGcLwoqQ27mPYsPFh3h8wignvKB2mWZVvdzCyTnp7CEZhfg2cEpbavib9mCcq ``` -> View this example transaction on Solana explorer: https://explorer.solana.com/tx/3gv6uAkyDoLZR94hcMf3fDiwnDNN9rrdXos9rmMmok2xJtaW9NKehYKqSspxVH2HpAK7WHfRYQfsyuzr9gguzf2j?cluster=devnet +### Get transaction logs + +We will be using `solana-cli` directly in playground to get the information about any transaction: + +```sh +solana confirm -v +``` -Using the Solana explorer link for your "submitted transaction", you can view the message our program logged on chain, via `msg!("Hello, world!")`, in the "**Program Instruction Logs**" section of the Solana Explorer. +Change `` with the hash you received from calling `hello world` program. -![View the on chain instruction logs via Solana explorer](/img/quickstarts/solana-get-started-view-logs-on-explorer.png) +You should see `Hello, world!` in the **Log Messages** section of the output. 🎉 #### Congratulations!!! diff --git a/docs/static/img/quickstarts/solana-get-started-view-logs-on-explorer.png b/docs/static/img/quickstarts/solana-get-started-view-logs-on-explorer.png deleted file mode 100644 index 7ee379b0602f89eed3192c74678e4cd107523f1e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 174869 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­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
  • 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 YDm?>Br1KzfVnQG?l8O>VVy}Gv7iG08s{jB1 From 09aa69f23307ab0076de49fd7a9b138a53c03129 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Tue, 4 Oct 2022 17:49:20 +0000 Subject: [PATCH 169/465] Consensus Logging (backport #28176) (#28208) Consensus Logging (#28176) (cherry picked from commit 14a415ccf374535adee2e219358e6f44bcdd81ab) Co-authored-by: carllin --- core/src/cluster_slot_state_verifier.rs | 43 ++++++++++++++++++++++++- core/src/replay_stage.rs | 16 +++++++-- 2 files changed, 56 insertions(+), 3 deletions(-) diff --git a/core/src/cluster_slot_state_verifier.rs b/core/src/cluster_slot_state_verifier.rs index 24828b7568a0ce..8643f9c3afbaf8 100644 --- a/core/src/cluster_slot_state_verifier.rs +++ b/core/src/cluster_slot_state_verifier.rs @@ -763,11 +763,33 @@ pub(crate) fn check_slot_agrees_with_cluster( // Needs to happen before the bank_frozen_hash.is_none() check below to account for duplicate // signals arriving before the bank is constructed in replay. - if matches!(slot_state_update, SlotStateUpdate::Duplicate(_)) { + if let SlotStateUpdate::Duplicate(ref state) = slot_state_update { // If this slot has already been processed before, return if !duplicate_slots_tracker.insert(slot) { return; } + + datapoint_info!( + "duplicate_slot", + ("slot", slot, i64), + ( + "duplicate_confirmed_hash", + state + .duplicate_confirmed_hash + .unwrap_or_default() + .to_string(), + String + ), + ( + "my_hash", + state + .bank_status + .bank_hash() + .unwrap_or_default() + .to_string(), + String + ), + ); } // Avoid duplicate work from multiple of the same DuplicateConfirmed signal. This can @@ -778,6 +800,25 @@ pub(crate) fn check_slot_agrees_with_cluster( return; } } + + datapoint_info!( + "duplicate_confirmed_slot", + ("slot", slot, i64), + ( + "duplicate_confirmed_hash", + state.duplicate_confirmed_hash.to_string(), + String + ), + ( + "my_hash", + state + .bank_status + .bank_hash() + .unwrap_or_default() + .to_string(), + String + ), + ); } if let SlotStateUpdate::EpochSlotsFrozen(epoch_slots_frozen_state) = &slot_state_update { diff --git a/core/src/replay_stage.rs b/core/src/replay_stage.rs index ed8e474cf6503d..2e9247b364ab51 100644 --- a/core/src/replay_stage.rs +++ b/core/src/replay_stage.rs @@ -2473,6 +2473,11 @@ impl ReplayStage { transaction_status_sender.send_transaction_status_freeze_message(bank); } bank.freeze(); + datapoint_info!( + "bank_frozen", + ("slot", bank_slot, i64), + ("hash", bank.hash().to_string(), String), + ); // report cost tracker stats cost_update_sender .send(CostUpdate::FrozenBank { bank: bank.clone() }) @@ -2954,7 +2959,7 @@ impl ReplayStage { ); match switch_fork_decision { - SwitchForkDecision::FailedSwitchThreshold(_, _) => { + SwitchForkDecision::FailedSwitchThreshold(switch_proof_stake, total_stake) => { let reset_bank = heaviest_bank_on_same_voted_fork; // If we can't switch and our last vote was on a non-duplicate/confirmed slot, then // reset to the the next votable bank on the same fork as our last vote, @@ -2978,9 +2983,16 @@ impl ReplayStage { // then there will be no blocks to include the votes for slot 4, and the network halts // because 90% of validators can't vote info!( - "Waiting to switch vote to {}, resetting to slot {:?} for now", + "Waiting to switch vote to {}, + resetting to slot {:?} for now, + switch proof stake: {}, + threshold stake: {}, + total stake: {}", heaviest_bank.slot(), reset_bank.as_ref().map(|b| b.slot()), + switch_proof_stake, + total_stake as f64 * SWITCH_FORK_THRESHOLD, + total_stake ); failure_reasons.push(HeaviestForkFailures::FailedSwitchThreshold( heaviest_bank.slot(), From 05ffda9b16bfa9c784b22bbb0483f5a567373ae5 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Tue, 4 Oct 2022 18:25:50 +0000 Subject: [PATCH 170/465] RPC: Support versioned txs in getFeeForMessage API (backport #28217) (#28221) * RPC: Support versioned txs in getFeeForMessage API (#28217) * RPC: Support versioned txs in getFeeForMessage API * Update sdk/program/src/message/sanitized.rs Co-authored-by: Tyera Eulberg Co-authored-by: Tyera Eulberg (cherry picked from commit ddf95c181c4732ba1f67e24b9f122b2e69e81005) # Conflicts: # client/src/rpc_client.rs # rpc/src/rpc.rs # runtime/src/bank/address_lookup_table.rs # sdk/src/transaction/sanitized.rs * resolve conflicts Co-authored-by: Justin Starry --- cli/src/checks.rs | 2 +- client/src/nonblocking/rpc_client.rs | 42 +++---- client/src/rpc_client.rs | 10 +- programs/address-lookup-table/src/error.rs | 12 +- rpc/src/rpc.rs | 123 +++++++++++++++------ runtime/src/bank/address_lookup_table.rs | 13 ++- sdk/program/src/message/address_loader.rs | 56 ++++++++++ sdk/program/src/message/mod.rs | 3 +- sdk/program/src/message/sanitized.rs | 22 +++- sdk/src/transaction/error.rs | 24 +++- sdk/src/transaction/sanitized.rs | 22 +--- 11 files changed, 233 insertions(+), 96 deletions(-) create mode 100644 sdk/program/src/message/address_loader.rs diff --git a/cli/src/checks.rs b/cli/src/checks.rs index 8c45f6e0483e93..dea87e5c4a13db 100644 --- a/cli/src/checks.rs +++ b/cli/src/checks.rs @@ -114,7 +114,7 @@ pub fn get_fee_for_messages( ) -> Result { Ok(messages .iter() - .map(|message| rpc_client.get_fee_for_message(message)) + .map(|message| rpc_client.get_fee_for_message(*message)) .collect::, _>>()? .iter() .sum()) diff --git a/client/src/nonblocking/rpc_client.rs b/client/src/nonblocking/rpc_client.rs index 99f4ef82830ca2..a63289ee8a1504 100644 --- a/client/src/nonblocking/rpc_client.rs +++ b/client/src/nonblocking/rpc_client.rs @@ -18,7 +18,8 @@ use { http_sender::HttpSender, mock_sender::MockSender, rpc_client::{ - GetConfirmedSignaturesForAddress2Config, RpcClientConfig, SerializableTransaction, + GetConfirmedSignaturesForAddress2Config, RpcClientConfig, SerializableMessage, + SerializableTransaction, }, rpc_config::{RpcAccountInfoConfig, *}, rpc_filter::{self, RpcFilterType}, @@ -42,10 +43,9 @@ use { epoch_schedule::EpochSchedule, fee_calculator::{FeeCalculator, FeeRateGovernor}, hash::Hash, - message::Message, pubkey::Pubkey, signature::Signature, - transaction::{self}, + transaction, }, solana_transaction_status::{ EncodedConfirmedBlock, EncodedConfirmedTransactionWithStatusMeta, TransactionStatus, @@ -5353,28 +5353,20 @@ impl RpcClient { } #[allow(deprecated)] - pub async fn get_fee_for_message(&self, message: &Message) -> ClientResult { - if self.get_node_version().await? < semver::Version::new(1, 9, 0) { - let fee_calculator = self - .get_fee_calculator_for_blockhash(&message.recent_blockhash) - .await? - .ok_or_else(|| ClientErrorKind::Custom("Invalid blockhash".to_string()))?; - Ok(fee_calculator - .lamports_per_signature - .saturating_mul(message.header.num_required_signatures as u64)) - } else { - let serialized_encoded = - serialize_and_encode::(message, UiTransactionEncoding::Base64)?; - let result = self - .send::>>( - RpcRequest::GetFeeForMessage, - json!([serialized_encoded, self.commitment()]), - ) - .await?; - result - .value - .ok_or_else(|| ClientErrorKind::Custom("Invalid blockhash".to_string()).into()) - } + pub async fn get_fee_for_message( + &self, + message: &impl SerializableMessage, + ) -> ClientResult { + let serialized_encoded = serialize_and_encode(message, UiTransactionEncoding::Base64)?; + let result = self + .send::>>( + RpcRequest::GetFeeForMessage, + json!([serialized_encoded, self.commitment()]), + ) + .await?; + result + .value + .ok_or_else(|| ClientErrorKind::Custom("Invalid blockhash".to_string()).into()) } pub async fn get_new_latest_blockhash(&self, blockhash: &Hash) -> ClientResult { diff --git a/client/src/rpc_client.rs b/client/src/rpc_client.rs index 96b151fc15e411..53400fbce61777 100644 --- a/client/src/rpc_client.rs +++ b/client/src/rpc_client.rs @@ -34,7 +34,7 @@ use { epoch_schedule::EpochSchedule, fee_calculator::{FeeCalculator, FeeRateGovernor}, hash::Hash, - message::Message, + message::{v0, Message as LegacyMessage}, pubkey::Pubkey, signature::Signature, transaction::{self, uses_durable_nonce, Transaction, VersionedTransaction}, @@ -61,6 +61,12 @@ impl RpcClientConfig { } } +/// Trait used to add support for versioned messages to RPC APIs while +/// retaining backwards compatibility +pub trait SerializableMessage: Serialize {} +impl SerializableMessage for LegacyMessage {} +impl SerializableMessage for v0::Message {} + /// Trait used to add support for versioned transactions to RPC APIs while /// retaining backwards compatibility pub trait SerializableTransaction: Serialize { @@ -4123,7 +4129,7 @@ impl RpcClient { } #[allow(deprecated)] - pub fn get_fee_for_message(&self, message: &Message) -> ClientResult { + pub fn get_fee_for_message(&self, message: &impl SerializableMessage) -> ClientResult { self.invoke(self.rpc_client.get_fee_for_message(message)) } diff --git a/programs/address-lookup-table/src/error.rs b/programs/address-lookup-table/src/error.rs index 6fb67c703a65b0..b427067afc386c 100644 --- a/programs/address-lookup-table/src/error.rs +++ b/programs/address-lookup-table/src/error.rs @@ -1,5 +1,5 @@ #[cfg(not(target_os = "solana"))] -use solana_sdk::transaction::TransactionError; +use solana_program::message::AddressLoaderError; use thiserror::Error; #[derive(Debug, Error, PartialEq, Eq, Clone)] @@ -22,13 +22,13 @@ pub enum AddressLookupError { } #[cfg(not(target_os = "solana"))] -impl From for TransactionError { +impl From for AddressLoaderError { fn from(err: AddressLookupError) -> Self { match err { - AddressLookupError::LookupTableAccountNotFound => Self::AddressLookupTableNotFound, - AddressLookupError::InvalidAccountOwner => Self::InvalidAddressLookupTableOwner, - AddressLookupError::InvalidAccountData => Self::InvalidAddressLookupTableData, - AddressLookupError::InvalidLookupIndex => Self::InvalidAddressLookupTableIndex, + AddressLookupError::LookupTableAccountNotFound => Self::LookupTableAccountNotFound, + AddressLookupError::InvalidAccountOwner => Self::InvalidAccountOwner, + AddressLookupError::InvalidAccountData => Self::InvalidAccountData, + AddressLookupError::InvalidLookupIndex => Self::InvalidLookupIndex, } } } diff --git a/rpc/src/rpc.rs b/rpc/src/rpc.rs index 99c7b54c551453..21475a02982546 100644 --- a/rpc/src/rpc.rs +++ b/rpc/src/rpc.rs @@ -64,7 +64,7 @@ use { feature_set, fee_calculator::FeeCalculator, hash::Hash, - message::{Message, SanitizedMessage}, + message::SanitizedMessage, pubkey::{Pubkey, PUBKEY_BYTES}, signature::{Keypair, Signature, Signer}, stake::state::{StakeActivationStatus, StakeState}, @@ -2161,16 +2161,6 @@ impl JsonRpcRequestProcessor { Ok(new_response(&bank, is_valid)) } - fn get_fee_for_message( - &self, - message: &SanitizedMessage, - config: RpcContextConfig, - ) -> Result>> { - let bank = self.get_bank_with_config(config)?; - let fee = bank.get_fee_for_message(message); - Ok(new_response(&bank, fee)) - } - fn get_stake_minimum_delegation(&self, config: RpcContextConfig) -> Result> { let bank = self.get_bank_with_config(config)?; let stake_minimum_delegation = @@ -3270,7 +3260,10 @@ pub mod rpc_accounts { // Full RPC interface that an API node is expected to provide // (rpc_minimal should also be provided by an API node) pub mod rpc_full { - use super::*; + use { + super::*, + solana_sdk::message::{SanitizedVersionedMessage, VersionedMessage}, + }; #[rpc] pub trait Full { type Metadata; @@ -3978,12 +3971,21 @@ pub mod rpc_full { config: Option, ) -> Result>> { debug!("get_fee_for_message rpc request received"); - let (_, message) = - decode_and_deserialize::(data, TransactionBinaryEncoding::Base64)?; - let sanitized_message = SanitizedMessage::try_from(message).map_err(|err| { - Error::invalid_params(format!("invalid transaction message: {}", err)) - })?; - meta.get_fee_for_message(&sanitized_message, config.unwrap_or_default()) + let (_, message) = decode_and_deserialize::( + data, + TransactionBinaryEncoding::Base64, + )?; + let bank = &*meta.get_bank_with_config(config.unwrap_or_default())?; + let sanitized_versioned_message = SanitizedVersionedMessage::try_from(message) + .map_err(|err| { + Error::invalid_params(format!("invalid transaction message: {}", err)) + })?; + let sanitized_message = SanitizedMessage::try_new(sanitized_versioned_message, bank) + .map_err(|err| { + Error::invalid_params(format!("invalid transaction message: {}", err)) + })?; + let fee = bank.get_fee_for_message(&sanitized_message); + Ok(new_response(bank, fee)) } fn get_stake_minimum_delegation( @@ -4602,10 +4604,13 @@ pub mod tests { solana_sdk::{ account::{Account, WritableAccount}, clock::MAX_RECENT_BLOCKHASHES, - fee_calculator::DEFAULT_BURN_PERCENT, + fee_calculator::{FeeRateGovernor, DEFAULT_BURN_PERCENT}, hash::{hash, Hash}, instruction::InstructionError, - message::{v0, v0::MessageAddressTableLookup, MessageHeader, VersionedMessage}, + message::{ + v0::{self, MessageAddressTableLookup}, + Message, MessageHeader, VersionedMessage, + }, nonce::{self, state::DurableNonce}, rpc_port, signature::{Keypair, Signer}, @@ -4636,7 +4641,8 @@ pub mod tests { std::{borrow::Cow, collections::HashMap}, }; - const TEST_MINT_LAMPORTS: u64 = 1_000_000; + const TEST_MINT_LAMPORTS: u64 = 1_000_000_000; + const TEST_SIGNATURE_FEE: u64 = 5_000; const TEST_SLOTS_PER_EPOCH: u64 = DELINQUENT_VALIDATOR_SLOT_DISTANCE + 1; fn create_test_request(method: &str, params: Option) -> serde_json::Value { @@ -4781,8 +4787,12 @@ pub mod tests { let keypair3 = Keypair::new(); let bank = self.working_bank(); let rent_exempt_amount = bank.get_minimum_balance_for_rent_exemption(0); - bank.transfer(rent_exempt_amount, mint_keypair, &keypair2.pubkey()) - .unwrap(); + bank.transfer( + rent_exempt_amount + TEST_SIGNATURE_FEE, + mint_keypair, + &keypair2.pubkey(), + ) + .unwrap(); let (entries, signatures) = create_test_transaction_entries( vec![&self.mint_keypair, &keypair1, &keypair2, &keypair3], @@ -5409,7 +5419,7 @@ pub mod tests { "context": {"slot": 0, "apiVersion": RpcApiVersion::default()}, "value":{ "owner": "11111111111111111111111111111111", - "lamports": 1_000_000, + "lamports": TEST_MINT_LAMPORTS, "data": "", "executable": false, "rentEpoch": 0 @@ -5486,7 +5496,7 @@ pub mod tests { let expected = json!([ { "owner": "11111111111111111111111111111111", - "lamports": 1_000_000, + "lamports": TEST_MINT_LAMPORTS, "data": ["", "base64"], "executable": false, "rentEpoch": 0 @@ -5518,7 +5528,7 @@ pub mod tests { let expected = json!([ { "owner": "11111111111111111111111111111111", - "lamports": 1_000_000, + "lamports": TEST_MINT_LAMPORTS, "data": ["", "base58"], "executable": false, "rentEpoch": 0 @@ -6105,7 +6115,7 @@ pub mod tests { "value":{ "blockhash": recent_blockhash.to_string(), "feeCalculator": { - "lamportsPerSignature": 0, + "lamportsPerSignature": TEST_SIGNATURE_FEE, } }, }, @@ -6134,7 +6144,7 @@ pub mod tests { "value": { "blockhash": recent_blockhash.to_string(), "feeCalculator": { - "lamportsPerSignature": 0, + "lamportsPerSignature": TEST_SIGNATURE_FEE, }, "lastValidSlot": MAX_RECENT_BLOCKHASHES, "lastValidBlockHeight": MAX_RECENT_BLOCKHASHES, @@ -6214,9 +6224,9 @@ pub mod tests { "value":{ "feeRateGovernor": { "burnPercent": DEFAULT_BURN_PERCENT, - "maxLamportsPerSignature": 0, - "minLamportsPerSignature": 0, - "targetLamportsPerSignature": 0, + "maxLamportsPerSignature": TEST_SIGNATURE_FEE, + "minLamportsPerSignature": TEST_SIGNATURE_FEE, + "targetLamportsPerSignature": TEST_SIGNATURE_FEE, "targetSignaturesPerSlot": 0 } }, @@ -6484,6 +6494,7 @@ pub mod tests { genesis_config.rent.exemption_threshold = 2.0; genesis_config.epoch_schedule = EpochSchedule::custom(TEST_SLOTS_PER_EPOCH, TEST_SLOTS_PER_EPOCH, false); + genesis_config.fee_rate_governor = FeeRateGovernor::new(TEST_SIGNATURE_FEE, 0); let bank = Bank::new_for_tests(&genesis_config); ( @@ -8390,7 +8401,7 @@ pub mod tests { assert_eq!( sanitize_transaction(versioned_tx, SimpleAddressLoader::Disabled).unwrap_err(), Error::invalid_params( - "invalid transaction: Transaction loads an address table account that doesn't exist".to_string(), + "invalid transaction: Transaction version is unsupported".to_string(), ) ); } @@ -8411,4 +8422,52 @@ pub mod tests { expected_stake_minimum_delegation ); } + + #[test] + fn test_get_fee_for_message() { + let rpc = RpcHandler::start(); + let bank = rpc.working_bank(); + // Slot hashes is necessary for processing versioned txs. + bank.set_sysvar_for_tests(&SlotHashes::default()); + // Correct blockhash is needed because fees are specific to blockhashes + let recent_blockhash = bank.last_blockhash(); + + { + let legacy_msg = VersionedMessage::Legacy(Message { + header: MessageHeader { + num_required_signatures: 1, + ..MessageHeader::default() + }, + recent_blockhash, + account_keys: vec![Pubkey::new_unique()], + ..Message::default() + }); + + let request = create_test_request( + "getFeeForMessage", + Some(json!([base64::encode(&serialize(&legacy_msg).unwrap())])), + ); + let response: RpcResponse = parse_success_result(rpc.handle_request_sync(request)); + assert_eq!(response.value, TEST_SIGNATURE_FEE); + } + + { + let v0_msg = VersionedMessage::V0(v0::Message { + header: MessageHeader { + num_required_signatures: 1, + ..MessageHeader::default() + }, + recent_blockhash, + account_keys: vec![Pubkey::new_unique()], + ..v0::Message::default() + }); + + let request = create_test_request( + "getFeeForMessage", + Some(json!([base64::encode(&serialize(&v0_msg).unwrap())])), + ); + let response: RpcResponse = parse_success_result(rpc.handle_request_sync(request)); + assert_eq!(response.value, TEST_SIGNATURE_FEE); + } + } } diff --git a/runtime/src/bank/address_lookup_table.rs b/runtime/src/bank/address_lookup_table.rs index 0a4bc732f45ba6..7da3b125491a19 100644 --- a/runtime/src/bank/address_lookup_table.rs +++ b/runtime/src/bank/address_lookup_table.rs @@ -4,8 +4,11 @@ use { solana_address_lookup_table_program::error::AddressLookupError, solana_sdk::{ feature_set::return_none_for_zero_lamport_accounts, - message::v0::{LoadedAddresses, MessageAddressTableLookup}, - transaction::{AddressLoader, Result as TransactionResult, TransactionError}, + message::{ + v0::{LoadedAddresses, MessageAddressTableLookup}, + AddressLoaderError, + }, + transaction::AddressLoader, }, }; @@ -13,9 +16,9 @@ impl AddressLoader for &Bank { fn load_addresses( self, address_table_lookups: &[MessageAddressTableLookup], - ) -> TransactionResult { + ) -> Result { if !self.versioned_tx_message_enabled() { - return Err(TransactionError::UnsupportedVersion); + return Err(AddressLoaderError::Disabled); } let load_zero_lamports = if self @@ -32,7 +35,7 @@ impl AddressLoader for &Bank { .read() .unwrap() .get_slot_hashes() - .map_err(|_| TransactionError::AccountNotFound)?; + .map_err(|_| AddressLoaderError::SlotHashesSysvarNotFound)?; Ok(address_table_lookups .iter() diff --git a/sdk/program/src/message/address_loader.rs b/sdk/program/src/message/address_loader.rs new file mode 100644 index 00000000000000..83e514cd0bd63b --- /dev/null +++ b/sdk/program/src/message/address_loader.rs @@ -0,0 +1,56 @@ +use { + super::v0::{LoadedAddresses, MessageAddressTableLookup}, + thiserror::Error, +}; + +#[derive(Debug, Error, PartialEq, Eq, Clone)] +pub enum AddressLoaderError { + /// Address loading from lookup tables is disabled + #[error("Address loading from lookup tables is disabled")] + Disabled, + + /// Failed to load slot hashes sysvar + #[error("Failed to load slot hashes sysvar")] + SlotHashesSysvarNotFound, + + /// Attempted to lookup addresses from a table that does not exist + #[error("Attempted to lookup addresses from a table that does not exist")] + LookupTableAccountNotFound, + + /// Attempted to lookup addresses from an account owned by the wrong program + #[error("Attempted to lookup addresses from an account owned by the wrong program")] + InvalidAccountOwner, + + /// Attempted to lookup addresses from an invalid account + #[error("Attempted to lookup addresses from an invalid account")] + InvalidAccountData, + + /// Address lookup contains an invalid index + #[error("Address lookup contains an invalid index")] + InvalidLookupIndex, +} + +pub trait AddressLoader: Clone { + fn load_addresses( + self, + lookups: &[MessageAddressTableLookup], + ) -> Result; +} + +#[derive(Clone)] +pub enum SimpleAddressLoader { + Disabled, + Enabled(LoadedAddresses), +} + +impl AddressLoader for SimpleAddressLoader { + fn load_addresses( + self, + _lookups: &[MessageAddressTableLookup], + ) -> Result { + match self { + Self::Disabled => Err(AddressLoaderError::Disabled), + Self::Enabled(loaded_addresses) => Ok(loaded_addresses), + } + } +} diff --git a/sdk/program/src/message/mod.rs b/sdk/program/src/message/mod.rs index 376b81e9590d0b..e507335ae74c66 100644 --- a/sdk/program/src/message/mod.rs +++ b/sdk/program/src/message/mod.rs @@ -44,10 +44,11 @@ pub mod legacy; #[path = ""] mod non_bpf_modules { mod account_keys; + mod address_loader; mod sanitized; mod versions; - pub use {account_keys::*, sanitized::*, versions::*}; + pub use {account_keys::*, address_loader::*, sanitized::*, versions::*}; } use compiled_keys::*; diff --git a/sdk/program/src/message/sanitized.rs b/sdk/program/src/message/sanitized.rs index 5fc64cd05f8f58..b5ac09f45f0cc6 100644 --- a/sdk/program/src/message/sanitized.rs +++ b/sdk/program/src/message/sanitized.rs @@ -5,7 +5,8 @@ use { message::{ legacy::Message as LegacyMessage, v0::{self, LoadedAddresses}, - AccountKeys, MessageHeader, + AccountKeys, AddressLoader, AddressLoaderError, MessageHeader, + SanitizedVersionedMessage, VersionedMessage, }, nonce::NONCED_TX_MARKER_IX_INDEX, program_utils::limited_deserialize, @@ -35,6 +36,8 @@ pub enum SanitizeMessageError { ValueOutOfBounds, #[error("invalid value")] InvalidValue, + #[error("{0}")] + AddressLoaderError(#[from] AddressLoaderError), } impl From for SanitizeMessageError { @@ -56,6 +59,23 @@ impl TryFrom for SanitizedMessage { } impl SanitizedMessage { + /// Create a sanitized message from a sanitized versioned message. + /// If the input message uses address tables, attempt to look up the + /// address for each table index. + pub fn try_new( + sanitized_msg: SanitizedVersionedMessage, + address_loader: impl AddressLoader, + ) -> Result { + Ok(match sanitized_msg.message { + VersionedMessage::Legacy(message) => SanitizedMessage::Legacy(message), + VersionedMessage::V0(message) => { + let loaded_addresses = + address_loader.load_addresses(&message.address_table_lookups)?; + SanitizedMessage::V0(v0::LoadedMessage::new(message, loaded_addresses)) + } + }) + } + /// Return true if this message contains duplicate account keys pub fn has_duplicates(&self) -> bool { match self { diff --git a/sdk/src/transaction/error.rs b/sdk/src/transaction/error.rs index 2fe4e0e3756adf..3f25fa5a62541a 100644 --- a/sdk/src/transaction/error.rs +++ b/sdk/src/transaction/error.rs @@ -1,6 +1,8 @@ use { crate::{ - instruction::InstructionError, message::SanitizeMessageError, sanitize::SanitizeError, + instruction::InstructionError, + message::{AddressLoaderError, SanitizeMessageError}, + sanitize::SanitizeError, }, serde::Serialize, thiserror::Error, @@ -156,7 +158,23 @@ impl From for TransactionError { } impl From for TransactionError { - fn from(_err: SanitizeMessageError) -> Self { - Self::SanitizeFailure + fn from(err: SanitizeMessageError) -> Self { + match err { + SanitizeMessageError::AddressLoaderError(err) => Self::from(err), + _ => Self::SanitizeFailure, + } + } +} + +impl From for TransactionError { + fn from(err: AddressLoaderError) -> Self { + match err { + AddressLoaderError::Disabled => Self::UnsupportedVersion, + AddressLoaderError::SlotHashesSysvarNotFound => Self::AccountNotFound, + AddressLoaderError::LookupTableAccountNotFound => Self::AddressLookupTableNotFound, + AddressLoaderError::InvalidAccountOwner => Self::InvalidAddressLookupTableOwner, + AddressLoaderError::InvalidAccountData => Self::InvalidAddressLookupTableData, + AddressLoaderError::InvalidLookupIndex => Self::InvalidAddressLookupTableIndex, + } } } diff --git a/sdk/src/transaction/sanitized.rs b/sdk/src/transaction/sanitized.rs index 06a963a4354f66..69fcaee812d8c9 100644 --- a/sdk/src/transaction/sanitized.rs +++ b/sdk/src/transaction/sanitized.rs @@ -1,11 +1,12 @@ #![cfg(feature = "full")] +pub use crate::message::{AddressLoader, SimpleAddressLoader}; use { super::SanitizedVersionedTransaction, crate::{ hash::Hash, message::{ - v0::{self, LoadedAddresses, MessageAddressTableLookup}, + v0::{self, LoadedAddresses}, SanitizedMessage, VersionedMessage, }, precompiles::verify_if_precompile, @@ -42,25 +43,6 @@ pub struct TransactionAccountLocks<'a> { pub writable: Vec<&'a Pubkey>, } -pub trait AddressLoader: Clone { - fn load_addresses(self, lookups: &[MessageAddressTableLookup]) -> Result; -} - -#[derive(Clone)] -pub enum SimpleAddressLoader { - Disabled, - Enabled(LoadedAddresses), -} - -impl AddressLoader for SimpleAddressLoader { - fn load_addresses(self, _lookups: &[MessageAddressTableLookup]) -> Result { - match self { - Self::Disabled => Err(TransactionError::AddressLookupTableNotFound), - Self::Enabled(loaded_addresses) => Ok(loaded_addresses), - } - } -} - /// Type that represents whether the transaction message has been precomputed or /// not. pub enum MessageHash { From 78a1c84285f1e622a02b1d029b857ad66b20d5bf Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 4 Oct 2022 22:20:22 +0000 Subject: [PATCH 171/465] Bump Version to 1.14.6 (#28225) Co-authored-by: willhickey --- Cargo.lock | 484 ++++++++--------- account-decoder/Cargo.toml | 10 +- accounts-bench/Cargo.toml | 12 +- accounts-cluster-bench/Cargo.toml | 34 +- banking-bench/Cargo.toml | 26 +- banks-client/Cargo.toml | 12 +- banks-interface/Cargo.toml | 4 +- banks-server/Cargo.toml | 12 +- bench-streamer/Cargo.toml | 8 +- bench-tps/Cargo.toml | 38 +- bloom/Cargo.toml | 8 +- bucket_map/Cargo.toml | 8 +- clap-utils/Cargo.toml | 8 +- clap-v3-utils/Cargo.toml | 8 +- cli-config/Cargo.toml | 6 +- cli-output/Cargo.toml | 16 +- cli/Cargo.toml | 36 +- client-test/Cargo.toml | 32 +- client/Cargo.toml | 28 +- core/Cargo.toml | 56 +- dos/Cargo.toml | 30 +- download-utils/Cargo.toml | 6 +- entry/Cargo.toml | 16 +- faucet/Cargo.toml | 14 +- frozen-abi/Cargo.toml | 6 +- frozen-abi/macro/Cargo.toml | 2 +- genesis-utils/Cargo.toml | 8 +- genesis/Cargo.toml | 22 +- geyser-plugin-interface/Cargo.toml | 6 +- geyser-plugin-manager/Cargo.toml | 16 +- gossip/Cargo.toml | 38 +- install/Cargo.toml | 14 +- keygen/Cargo.toml | 12 +- ledger-tool/Cargo.toml | 30 +- ledger/Cargo.toml | 40 +- local-cluster/Cargo.toml | 28 +- log-analyzer/Cargo.toml | 6 +- logger/Cargo.toml | 2 +- measure/Cargo.toml | 4 +- merkle-root-bench/Cargo.toml | 12 +- merkle-tree/Cargo.toml | 4 +- metrics/Cargo.toml | 4 +- net-shaper/Cargo.toml | 4 +- net-utils/Cargo.toml | 8 +- notifier/Cargo.toml | 2 +- perf/Cargo.toml | 12 +- poh-bench/Cargo.toml | 14 +- poh/Cargo.toml | 20 +- program-runtime/Cargo.toml | 14 +- program-test/Cargo.toml | 18 +- .../address-lookup-table-tests/Cargo.toml | 8 +- programs/address-lookup-table/Cargo.toml | 12 +- programs/bpf-loader-tests/Cargo.toml | 8 +- programs/bpf/Cargo.lock | 490 +++++++++--------- programs/bpf/Cargo.toml | 28 +- programs/bpf/rust/128bit/Cargo.toml | 6 +- programs/bpf/rust/128bit_dep/Cargo.toml | 4 +- programs/bpf/rust/alloc/Cargo.toml | 4 +- programs/bpf/rust/call_depth/Cargo.toml | 4 +- programs/bpf/rust/caller_access/Cargo.toml | 4 +- programs/bpf/rust/curve25519/Cargo.toml | 6 +- programs/bpf/rust/custom_heap/Cargo.toml | 4 +- programs/bpf/rust/dep_crate/Cargo.toml | 6 +- .../bpf/rust/deprecated_loader/Cargo.toml | 4 +- programs/bpf/rust/dup_accounts/Cargo.toml | 4 +- programs/bpf/rust/error_handling/Cargo.toml | 4 +- programs/bpf/rust/external_spend/Cargo.toml | 4 +- programs/bpf/rust/finalize/Cargo.toml | 4 +- .../rust/get_minimum_delegation/Cargo.toml | 4 +- .../Cargo.toml | 4 +- .../rust/instruction_introspection/Cargo.toml | 4 +- programs/bpf/rust/invoke/Cargo.toml | 4 +- programs/bpf/rust/invoke_and_error/Cargo.toml | 4 +- programs/bpf/rust/invoke_and_ok/Cargo.toml | 4 +- .../bpf/rust/invoke_and_return/Cargo.toml | 4 +- programs/bpf/rust/invoked/Cargo.toml | 4 +- programs/bpf/rust/iter/Cargo.toml | 4 +- programs/bpf/rust/log_data/Cargo.toml | 4 +- programs/bpf/rust/many_args/Cargo.toml | 6 +- programs/bpf/rust/many_args_dep/Cargo.toml | 4 +- programs/bpf/rust/mem/Cargo.toml | 10 +- programs/bpf/rust/membuiltins/Cargo.toml | 6 +- programs/bpf/rust/noop/Cargo.toml | 4 +- programs/bpf/rust/panic/Cargo.toml | 4 +- programs/bpf/rust/param_passing/Cargo.toml | 6 +- .../bpf/rust/param_passing_dep/Cargo.toml | 4 +- programs/bpf/rust/rand/Cargo.toml | 4 +- programs/bpf/rust/realloc/Cargo.toml | 4 +- programs/bpf/rust/realloc_invoke/Cargo.toml | 6 +- .../bpf/rust/ro_account_modify/Cargo.toml | 4 +- programs/bpf/rust/ro_modify/Cargo.toml | 4 +- programs/bpf/rust/sanity/Cargo.toml | 10 +- .../bpf/rust/secp256k1_recover/Cargo.toml | 4 +- programs/bpf/rust/sha/Cargo.toml | 4 +- .../rust/sibling_inner_instruction/Cargo.toml | 4 +- .../bpf/rust/sibling_instruction/Cargo.toml | 4 +- programs/bpf/rust/simulation/Cargo.toml | 12 +- programs/bpf/rust/spoof1/Cargo.toml | 4 +- programs/bpf/rust/spoof1_system/Cargo.toml | 4 +- programs/bpf/rust/sysvar/Cargo.toml | 10 +- programs/bpf/rust/upgradeable/Cargo.toml | 4 +- programs/bpf/rust/upgraded/Cargo.toml | 4 +- programs/bpf_loader/Cargo.toml | 14 +- .../bpf_loader/gen-syscall-list/Cargo.toml | 2 +- programs/compute-budget/Cargo.toml | 6 +- programs/config/Cargo.toml | 8 +- programs/ed25519-tests/Cargo.toml | 6 +- programs/stake/Cargo.toml | 18 +- programs/vote/Cargo.toml | 14 +- programs/zk-token-proof/Cargo.toml | 8 +- rayon-threadlimit/Cargo.toml | 2 +- rbpf-cli/Cargo.toml | 10 +- remote-wallet/Cargo.toml | 4 +- rpc-test/Cargo.toml | 18 +- rpc/Cargo.toml | 48 +- runtime/Cargo.toml | 34 +- runtime/store-tool/Cargo.toml | 8 +- sdk/Cargo.toml | 12 +- sdk/cargo-build-bpf/Cargo.toml | 4 +- sdk/cargo-build-sbf/Cargo.toml | 8 +- .../tests/crates/fail/Cargo.toml | 4 +- .../tests/crates/noop/Cargo.toml | 4 +- sdk/cargo-test-bpf/Cargo.toml | 2 +- sdk/cargo-test-sbf/Cargo.toml | 2 +- sdk/gen-headers/Cargo.toml | 2 +- sdk/macro/Cargo.toml | 2 +- sdk/program/Cargo.toml | 10 +- send-transaction-service/Cargo.toml | 14 +- stake-accounts/Cargo.toml | 16 +- storage-bigtable/Cargo.toml | 10 +- storage-bigtable/build-proto/Cargo.lock | 2 +- storage-bigtable/build-proto/Cargo.toml | 2 +- storage-proto/Cargo.toml | 8 +- streamer/Cargo.toml | 10 +- sys-tuner/Cargo.toml | 6 +- test-validator/Cargo.toml | 28 +- tokens/Cargo.toml | 24 +- transaction-dos/Cargo.toml | 32 +- transaction-status/Cargo.toml | 14 +- upload-perf/Cargo.toml | 4 +- validator/Cargo.toml | 50 +- version/Cargo.toml | 8 +- watchtower/Cargo.toml | 20 +- zk-token-sdk/Cargo.toml | 6 +- 144 files changed, 1268 insertions(+), 1268 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 90f54b96bacc52..f5bb846cf7d0cd 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1688,7 +1688,7 @@ dependencies = [ [[package]] name = "gen-headers" -version = "1.14.5" +version = "1.14.6" dependencies = [ "log", "regex", @@ -1696,7 +1696,7 @@ dependencies = [ [[package]] name = "gen-syscall-list" -version = "1.14.5" +version = "1.14.6" dependencies = [ "regex", ] @@ -3756,15 +3756,15 @@ dependencies = [ [[package]] name = "rbpf-cli" -version = "1.14.5" +version = "1.14.6" dependencies = [ "clap 3.1.8", "serde", "serde_json", "solana-bpf-loader-program", - "solana-logger 1.14.5", + "solana-logger 1.14.6", "solana-program-runtime", - "solana-sdk 1.14.5", + "solana-sdk 1.14.6", "solana_rbpf", ] @@ -4476,7 +4476,7 @@ dependencies = [ [[package]] name = "solana-account-decoder" -version = "1.14.5" +version = "1.14.6" dependencies = [ "Inflector", "base64 0.13.0", @@ -4489,7 +4489,7 @@ dependencies = [ "serde_json", "solana-address-lookup-table-program", "solana-config-program", - "solana-sdk 1.14.5", + "solana-sdk 1.14.6", "solana-vote-program", "spl-token", "spl-token-2022", @@ -4499,21 +4499,21 @@ dependencies = [ [[package]] name = "solana-accounts-bench" -version = "1.14.5" +version = "1.14.6" dependencies = [ "clap 2.33.3", "log", "rayon", - "solana-logger 1.14.5", + "solana-logger 1.14.6", "solana-measure", "solana-runtime", - "solana-sdk 1.14.5", + "solana-sdk 1.14.6", "solana-version", ] [[package]] name = "solana-accounts-cluster-bench" -version = "1.14.5" +version = "1.14.6" dependencies = [ "clap 2.33.3", "log", @@ -4526,11 +4526,11 @@ dependencies = [ "solana-faucet", "solana-gossip", "solana-local-cluster", - "solana-logger 1.14.5", + "solana-logger 1.14.6", "solana-measure", "solana-net-utils", "solana-runtime", - "solana-sdk 1.14.5", + "solana-sdk 1.14.6", "solana-streamer", "solana-test-validator", "solana-transaction-status", @@ -4540,7 +4540,7 @@ dependencies = [ [[package]] name = "solana-address-lookup-table-program" -version = "1.14.5" +version = "1.14.6" dependencies = [ "bincode", "bytemuck", @@ -4549,28 +4549,28 @@ dependencies = [ "num-traits", "rustc_version 0.4.0", "serde", - "solana-frozen-abi 1.14.5", - "solana-frozen-abi-macro 1.14.5", - "solana-program 1.14.5", + "solana-frozen-abi 1.14.6", + "solana-frozen-abi-macro 1.14.6", + "solana-program 1.14.6", "solana-program-runtime", - "solana-sdk 1.14.5", + "solana-sdk 1.14.6", "thiserror", ] [[package]] name = "solana-address-lookup-table-program-tests" -version = "1.14.5" +version = "1.14.6" dependencies = [ "assert_matches", "bincode", "solana-address-lookup-table-program", "solana-program-test", - "solana-sdk 1.14.5", + "solana-sdk 1.14.6", ] [[package]] name = "solana-banking-bench" -version = "1.14.5" +version = "1.14.6" dependencies = [ "clap 3.1.8", "crossbeam-channel", @@ -4581,27 +4581,27 @@ dependencies = [ "solana-core", "solana-gossip", "solana-ledger", - "solana-logger 1.14.5", + "solana-logger 1.14.6", "solana-measure", "solana-perf", "solana-poh", "solana-runtime", - "solana-sdk 1.14.5", + "solana-sdk 1.14.6", "solana-streamer", "solana-version", ] [[package]] name = "solana-banks-client" -version = "1.14.5" +version = "1.14.6" dependencies = [ "borsh", "futures 0.3.21", "solana-banks-interface", "solana-banks-server", - "solana-program 1.14.5", + "solana-program 1.14.6", "solana-runtime", - "solana-sdk 1.14.5", + "solana-sdk 1.14.6", "tarpc", "thiserror", "tokio", @@ -4610,16 +4610,16 @@ dependencies = [ [[package]] name = "solana-banks-interface" -version = "1.14.5" +version = "1.14.6" dependencies = [ "serde", - "solana-sdk 1.14.5", + "solana-sdk 1.14.6", "tarpc", ] [[package]] name = "solana-banks-server" -version = "1.14.5" +version = "1.14.6" dependencies = [ "bincode", "crossbeam-channel", @@ -4627,7 +4627,7 @@ dependencies = [ "solana-banks-interface", "solana-client", "solana-runtime", - "solana-sdk 1.14.5", + "solana-sdk 1.14.6", "solana-send-transaction-service", "tarpc", "tokio", @@ -4637,7 +4637,7 @@ dependencies = [ [[package]] name = "solana-bench-streamer" -version = "1.14.5" +version = "1.14.6" dependencies = [ "clap 3.1.8", "crossbeam-channel", @@ -4648,7 +4648,7 @@ dependencies = [ [[package]] name = "solana-bench-tps" -version = "1.14.5" +version = "1.14.6" dependencies = [ "clap 2.33.3", "crossbeam-channel", @@ -4665,13 +4665,13 @@ dependencies = [ "solana-genesis", "solana-gossip", "solana-local-cluster", - "solana-logger 1.14.5", + "solana-logger 1.14.6", "solana-measure", "solana-metrics", "solana-net-utils", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.5", + "solana-sdk 1.14.6", "solana-streamer", "solana-test-validator", "solana-version", @@ -4680,7 +4680,7 @@ dependencies = [ [[package]] name = "solana-bloom" -version = "1.14.5" +version = "1.14.6" dependencies = [ "bv", "fnv", @@ -4690,14 +4690,14 @@ dependencies = [ "rustc_version 0.4.0", "serde", "serde_derive", - "solana-frozen-abi 1.14.5", - "solana-frozen-abi-macro 1.14.5", - "solana-sdk 1.14.5", + "solana-frozen-abi 1.14.6", + "solana-frozen-abi-macro 1.14.6", + "solana-sdk 1.14.6", ] [[package]] name = "solana-bpf-loader-program" -version = "1.14.5" +version = "1.14.6" dependencies = [ "bincode", "byteorder", @@ -4708,26 +4708,26 @@ dependencies = [ "solana-metrics", "solana-program-runtime", "solana-runtime", - "solana-sdk 1.14.5", - "solana-zk-token-sdk 1.14.5", + "solana-sdk 1.14.6", + "solana-zk-token-sdk 1.14.6", "solana_rbpf", "thiserror", ] [[package]] name = "solana-bpf-loader-program-tests" -version = "1.14.5" +version = "1.14.6" dependencies = [ "assert_matches", "bincode", "solana-bpf-loader-program", "solana-program-test", - "solana-sdk 1.14.5", + "solana-sdk 1.14.6", ] [[package]] name = "solana-bucket-map" -version = "1.14.5" +version = "1.14.6" dependencies = [ "fs_extra", "log", @@ -4735,24 +4735,24 @@ dependencies = [ "modular-bitfield", "rand 0.7.3", "rayon", - "solana-logger 1.14.5", + "solana-logger 1.14.6", "solana-measure", - "solana-sdk 1.14.5", + "solana-sdk 1.14.6", "tempfile", ] [[package]] name = "solana-cargo-build-bpf" -version = "1.14.5" +version = "1.14.6" dependencies = [ "cargo_metadata", "clap 3.1.8", - "solana-sdk 1.14.5", + "solana-sdk 1.14.6", ] [[package]] name = "solana-cargo-build-sbf" -version = "1.14.5" +version = "1.14.6" dependencies = [ "bzip2", "cargo_metadata", @@ -4761,14 +4761,14 @@ dependencies = [ "regex", "serial_test", "solana-download-utils", - "solana-logger 1.14.5", - "solana-sdk 1.14.5", + "solana-logger 1.14.6", + "solana-sdk 1.14.6", "tar", ] [[package]] name = "solana-cargo-test-bpf" -version = "1.14.5" +version = "1.14.6" dependencies = [ "cargo_metadata", "clap 3.1.8", @@ -4776,7 +4776,7 @@ dependencies = [ [[package]] name = "solana-cargo-test-sbf" -version = "1.14.5" +version = "1.14.6" dependencies = [ "cargo_metadata", "clap 3.1.8", @@ -4784,14 +4784,14 @@ dependencies = [ [[package]] name = "solana-clap-utils" -version = "1.14.5" +version = "1.14.6" dependencies = [ "chrono", "clap 2.33.3", "rpassword", "solana-perf", "solana-remote-wallet", - "solana-sdk 1.14.5", + "solana-sdk 1.14.6", "tempfile", "thiserror", "tiny-bip39", @@ -4801,14 +4801,14 @@ dependencies = [ [[package]] name = "solana-clap-v3-utils" -version = "1.14.5" +version = "1.14.6" dependencies = [ "chrono", "clap 3.1.8", "rpassword", "solana-perf", "solana-remote-wallet", - "solana-sdk 1.14.5", + "solana-sdk 1.14.6", "tempfile", "thiserror", "tiny-bip39", @@ -4818,7 +4818,7 @@ dependencies = [ [[package]] name = "solana-cli" -version = "1.14.5" +version = "1.14.6" dependencies = [ "bincode", "bs58", @@ -4845,10 +4845,10 @@ dependencies = [ "solana-client", "solana-config-program", "solana-faucet", - "solana-logger 1.14.5", + "solana-logger 1.14.6", "solana-program-runtime", "solana-remote-wallet", - "solana-sdk 1.14.5", + "solana-sdk 1.14.6", "solana-streamer", "solana-test-validator", "solana-transaction-status", @@ -4863,7 +4863,7 @@ dependencies = [ [[package]] name = "solana-cli-config" -version = "1.14.5" +version = "1.14.6" dependencies = [ "anyhow", "dirs-next", @@ -4872,13 +4872,13 @@ dependencies = [ "serde_derive", "serde_yaml", "solana-clap-utils", - "solana-sdk 1.14.5", + "solana-sdk 1.14.6", "url 2.2.2", ] [[package]] name = "solana-cli-output" -version = "1.14.5" +version = "1.14.6" dependencies = [ "Inflector", "base64 0.13.0", @@ -4896,7 +4896,7 @@ dependencies = [ "solana-clap-utils", "solana-cli-config", "solana-client", - "solana-sdk 1.14.5", + "solana-sdk 1.14.6", "solana-transaction-status", "solana-vote-program", "spl-memo", @@ -4904,7 +4904,7 @@ dependencies = [ [[package]] name = "solana-client" -version = "1.14.5" +version = "1.14.6" dependencies = [ "anyhow", "assert_matches", @@ -4940,12 +4940,12 @@ dependencies = [ "solana-account-decoder", "solana-clap-utils", "solana-faucet", - "solana-logger 1.14.5", + "solana-logger 1.14.6", "solana-measure", "solana-metrics", "solana-net-utils", "solana-perf", - "solana-sdk 1.14.5", + "solana-sdk 1.14.6", "solana-streamer", "solana-transaction-status", "solana-version", @@ -4961,14 +4961,14 @@ dependencies = [ [[package]] name = "solana-client-test" -version = "1.14.5" +version = "1.14.6" dependencies = [ "futures-util", "serde_json", "serial_test", "solana-client", "solana-ledger", - "solana-logger 1.14.5", + "solana-logger 1.14.6", "solana-measure", "solana-merkle-tree", "solana-metrics", @@ -4976,7 +4976,7 @@ dependencies = [ "solana-rayon-threadlimit", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.5", + "solana-sdk 1.14.6", "solana-streamer", "solana-test-validator", "solana-transaction-status", @@ -4987,28 +4987,28 @@ dependencies = [ [[package]] name = "solana-compute-budget-program" -version = "1.14.5" +version = "1.14.6" dependencies = [ "solana-program-runtime", - "solana-sdk 1.14.5", + "solana-sdk 1.14.6", ] [[package]] name = "solana-config-program" -version = "1.14.5" +version = "1.14.6" dependencies = [ "bincode", "chrono", "serde", "serde_derive", - "solana-logger 1.14.5", + "solana-logger 1.14.6", "solana-program-runtime", - "solana-sdk 1.14.5", + "solana-sdk 1.14.6", ] [[package]] name = "solana-core" -version = "1.14.5" +version = "1.14.6" dependencies = [ "ahash", "base64 0.13.0", @@ -5040,12 +5040,12 @@ dependencies = [ "solana-bloom", "solana-client", "solana-entry", - "solana-frozen-abi 1.14.5", - "solana-frozen-abi-macro 1.14.5", + "solana-frozen-abi 1.14.6", + "solana-frozen-abi-macro 1.14.6", "solana-geyser-plugin-manager", "solana-gossip", "solana-ledger", - "solana-logger 1.14.5", + "solana-logger 1.14.6", "solana-measure", "solana-metrics", "solana-net-utils", @@ -5055,7 +5055,7 @@ dependencies = [ "solana-rayon-threadlimit", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.5", + "solana-sdk 1.14.6", "solana-send-transaction-service", "solana-stake-program", "solana-streamer", @@ -5075,7 +5075,7 @@ dependencies = [ [[package]] name = "solana-dos" -version = "1.14.5" +version = "1.14.6" dependencies = [ "bincode", "clap 3.1.8", @@ -5091,42 +5091,42 @@ dependencies = [ "solana-faucet", "solana-gossip", "solana-local-cluster", - "solana-logger 1.14.5", + "solana-logger 1.14.6", "solana-measure", "solana-net-utils", "solana-perf", "solana-rpc", - "solana-sdk 1.14.5", + "solana-sdk 1.14.6", "solana-streamer", "solana-version", ] [[package]] name = "solana-download-utils" -version = "1.14.5" +version = "1.14.6" dependencies = [ "console", "indicatif", "log", "reqwest", "solana-runtime", - "solana-sdk 1.14.5", + "solana-sdk 1.14.6", ] [[package]] name = "solana-ed25519-program-tests" -version = "1.14.5" +version = "1.14.6" dependencies = [ "assert_matches", "ed25519-dalek", "rand 0.7.3", "solana-program-test", - "solana-sdk 1.14.5", + "solana-sdk 1.14.6", ] [[package]] name = "solana-entry" -version = "1.14.5" +version = "1.14.6" dependencies = [ "bincode", "crossbeam-channel", @@ -5138,18 +5138,18 @@ dependencies = [ "rand 0.7.3", "rayon", "serde", - "solana-logger 1.14.5", + "solana-logger 1.14.6", "solana-measure", "solana-merkle-tree", "solana-metrics", "solana-perf", "solana-rayon-threadlimit", - "solana-sdk 1.14.5", + "solana-sdk 1.14.6", ] [[package]] name = "solana-faucet" -version = "1.14.5" +version = "1.14.6" dependencies = [ "bincode", "byteorder", @@ -5160,9 +5160,9 @@ dependencies = [ "serde_derive", "solana-clap-utils", "solana-cli-config", - "solana-logger 1.14.5", + "solana-logger 1.14.6", "solana-metrics", - "solana-sdk 1.14.5", + "solana-sdk 1.14.6", "solana-version", "spl-memo", "thiserror", @@ -5193,7 +5193,7 @@ dependencies = [ [[package]] name = "solana-frozen-abi" -version = "1.14.5" +version = "1.14.6" dependencies = [ "ahash", "blake3", @@ -5218,8 +5218,8 @@ dependencies = [ "serde_derive", "serde_json", "sha2 0.10.2", - "solana-frozen-abi-macro 1.14.5", - "solana-logger 1.14.5", + "solana-frozen-abi-macro 1.14.6", + "solana-logger 1.14.6", "subtle", "thiserror", ] @@ -5238,7 +5238,7 @@ dependencies = [ [[package]] name = "solana-frozen-abi-macro" -version = "1.14.5" +version = "1.14.6" dependencies = [ "proc-macro2 1.0.41", "quote 1.0.18", @@ -5248,7 +5248,7 @@ dependencies = [ [[package]] name = "solana-genesis" -version = "1.14.5" +version = "1.14.6" dependencies = [ "base64 0.13.0", "clap 2.33.3", @@ -5259,9 +5259,9 @@ dependencies = [ "solana-cli-config", "solana-entry", "solana-ledger", - "solana-logger 1.14.5", + "solana-logger 1.14.6", "solana-runtime", - "solana-sdk 1.14.5", + "solana-sdk 1.14.6", "solana-stake-program", "solana-version", "solana-vote-program", @@ -5270,26 +5270,26 @@ dependencies = [ [[package]] name = "solana-genesis-utils" -version = "1.14.5" +version = "1.14.6" dependencies = [ "solana-download-utils", "solana-runtime", - "solana-sdk 1.14.5", + "solana-sdk 1.14.6", ] [[package]] name = "solana-geyser-plugin-interface" -version = "1.14.5" +version = "1.14.6" dependencies = [ "log", - "solana-sdk 1.14.5", + "solana-sdk 1.14.6", "solana-transaction-status", "thiserror", ] [[package]] name = "solana-geyser-plugin-manager" -version = "1.14.5" +version = "1.14.6" dependencies = [ "bs58", "crossbeam-channel", @@ -5302,14 +5302,14 @@ dependencies = [ "solana-metrics", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.5", + "solana-sdk 1.14.6", "solana-transaction-status", "thiserror", ] [[package]] name = "solana-gossip" -version = "1.14.5" +version = "1.14.6" dependencies = [ "bincode", "bv", @@ -5336,17 +5336,17 @@ dependencies = [ "solana-clap-utils", "solana-client", "solana-entry", - "solana-frozen-abi 1.14.5", - "solana-frozen-abi-macro 1.14.5", + "solana-frozen-abi 1.14.6", + "solana-frozen-abi-macro 1.14.6", "solana-ledger", - "solana-logger 1.14.5", + "solana-logger 1.14.6", "solana-measure", "solana-metrics", "solana-net-utils", "solana-perf", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.14.5", + "solana-sdk 1.14.6", "solana-streamer", "solana-version", "solana-vote-program", @@ -5355,7 +5355,7 @@ dependencies = [ [[package]] name = "solana-install" -version = "1.14.5" +version = "1.14.6" dependencies = [ "atty", "bincode", @@ -5376,8 +5376,8 @@ dependencies = [ "solana-clap-utils", "solana-client", "solana-config-program", - "solana-logger 1.14.5", - "solana-sdk 1.14.5", + "solana-logger 1.14.6", + "solana-sdk 1.14.6", "solana-version", "tar", "tempfile", @@ -5388,7 +5388,7 @@ dependencies = [ [[package]] name = "solana-keygen" -version = "1.14.5" +version = "1.14.6" dependencies = [ "bs58", "clap 3.1.8", @@ -5397,14 +5397,14 @@ dependencies = [ "solana-clap-v3-utils", "solana-cli-config", "solana-remote-wallet", - "solana-sdk 1.14.5", + "solana-sdk 1.14.6", "solana-version", "tiny-bip39", ] [[package]] name = "solana-ledger" -version = "1.14.5" +version = "1.14.6" dependencies = [ "assert_matches", "bincode", @@ -5438,16 +5438,16 @@ dependencies = [ "solana-account-decoder", "solana-bpf-loader-program", "solana-entry", - "solana-frozen-abi 1.14.5", - "solana-frozen-abi-macro 1.14.5", - "solana-logger 1.14.5", + "solana-frozen-abi 1.14.6", + "solana-frozen-abi-macro 1.14.6", + "solana-logger 1.14.6", "solana-measure", "solana-metrics", "solana-perf", "solana-program-runtime", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.14.5", + "solana-sdk 1.14.6", "solana-stake-program", "solana-storage-bigtable", "solana-storage-proto", @@ -5466,7 +5466,7 @@ dependencies = [ [[package]] name = "solana-ledger-tool" -version = "1.14.5" +version = "1.14.6" dependencies = [ "assert_cmd", "bs58", @@ -5488,10 +5488,10 @@ dependencies = [ "solana-core", "solana-entry", "solana-ledger", - "solana-logger 1.14.5", + "solana-logger 1.14.6", "solana-measure", "solana-runtime", - "solana-sdk 1.14.5", + "solana-sdk 1.14.6", "solana-stake-program", "solana-storage-bigtable", "solana-transaction-status", @@ -5503,7 +5503,7 @@ dependencies = [ [[package]] name = "solana-local-cluster" -version = "1.14.5" +version = "1.14.6" dependencies = [ "assert_matches", "crossbeam-channel", @@ -5521,9 +5521,9 @@ dependencies = [ "solana-entry", "solana-gossip", "solana-ledger", - "solana-logger 1.14.5", + "solana-logger 1.14.6", "solana-runtime", - "solana-sdk 1.14.5", + "solana-sdk 1.14.6", "solana-stake-program", "solana-streamer", "solana-vote-program", @@ -5532,13 +5532,13 @@ dependencies = [ [[package]] name = "solana-log-analyzer" -version = "1.14.5" +version = "1.14.6" dependencies = [ "byte-unit", "clap 3.1.8", "serde", "serde_json", - "solana-logger 1.14.5", + "solana-logger 1.14.6", "solana-version", ] @@ -5555,7 +5555,7 @@ dependencies = [ [[package]] name = "solana-logger" -version = "1.14.5" +version = "1.14.6" dependencies = [ "env_logger", "lazy_static", @@ -5564,38 +5564,38 @@ dependencies = [ [[package]] name = "solana-measure" -version = "1.14.5" +version = "1.14.6" dependencies = [ "log", - "solana-sdk 1.14.5", + "solana-sdk 1.14.6", ] [[package]] name = "solana-merkle-root-bench" -version = "1.14.5" +version = "1.14.6" dependencies = [ "clap 2.33.3", "log", - "solana-logger 1.14.5", + "solana-logger 1.14.6", "solana-measure", "solana-runtime", - "solana-sdk 1.14.5", + "solana-sdk 1.14.6", "solana-version", ] [[package]] name = "solana-merkle-tree" -version = "1.14.5" +version = "1.14.6" dependencies = [ "fast-math", "hex", "matches", - "solana-program 1.14.5", + "solana-program 1.14.6", ] [[package]] name = "solana-metrics" -version = "1.14.5" +version = "1.14.6" dependencies = [ "crossbeam-channel", "env_logger", @@ -5605,23 +5605,23 @@ dependencies = [ "rand 0.7.3", "reqwest", "serial_test", - "solana-sdk 1.14.5", + "solana-sdk 1.14.6", ] [[package]] name = "solana-net-shaper" -version = "1.14.5" +version = "1.14.6" dependencies = [ "clap 3.1.8", "rand 0.7.3", "serde", "serde_json", - "solana-logger 1.14.5", + "solana-logger 1.14.6", ] [[package]] name = "solana-net-utils" -version = "1.14.5" +version = "1.14.6" dependencies = [ "bincode", "clap 3.1.8", @@ -5632,8 +5632,8 @@ dependencies = [ "serde", "serde_derive", "socket2", - "solana-logger 1.14.5", - "solana-sdk 1.14.5", + "solana-logger 1.14.6", + "solana-sdk 1.14.6", "solana-version", "tokio", "url 2.2.2", @@ -5641,7 +5641,7 @@ dependencies = [ [[package]] name = "solana-notifier" -version = "1.14.5" +version = "1.14.6" dependencies = [ "log", "reqwest", @@ -5650,7 +5650,7 @@ dependencies = [ [[package]] name = "solana-perf" -version = "1.14.5" +version = "1.14.6" dependencies = [ "ahash", "bincode", @@ -5668,16 +5668,16 @@ dependencies = [ "rand 0.7.3", "rayon", "serde", - "solana-logger 1.14.5", + "solana-logger 1.14.6", "solana-metrics", "solana-rayon-threadlimit", - "solana-sdk 1.14.5", + "solana-sdk 1.14.6", "solana-vote-program", ] [[package]] name = "solana-poh" -version = "1.14.5" +version = "1.14.6" dependencies = [ "bincode", "core_affinity", @@ -5687,29 +5687,29 @@ dependencies = [ "rand 0.7.3", "solana-entry", "solana-ledger", - "solana-logger 1.14.5", + "solana-logger 1.14.6", "solana-measure", "solana-metrics", "solana-perf", "solana-runtime", - "solana-sdk 1.14.5", + "solana-sdk 1.14.6", "solana-sys-tuner", "thiserror", ] [[package]] name = "solana-poh-bench" -version = "1.14.5" +version = "1.14.6" dependencies = [ "clap 3.1.8", "log", "rand 0.7.3", "rayon", "solana-entry", - "solana-logger 1.14.5", + "solana-logger 1.14.6", "solana-measure", "solana-perf", - "solana-sdk 1.14.5", + "solana-sdk 1.14.6", "solana-version", ] @@ -5757,7 +5757,7 @@ dependencies = [ [[package]] name = "solana-program" -version = "1.14.5" +version = "1.14.6" dependencies = [ "anyhow", "assert_matches", @@ -5795,10 +5795,10 @@ dependencies = [ "serde_json", "sha2 0.10.2", "sha3 0.10.1", - "solana-frozen-abi 1.14.5", - "solana-frozen-abi-macro 1.14.5", - "solana-logger 1.14.5", - "solana-sdk-macro 1.14.5", + "solana-frozen-abi 1.14.6", + "solana-frozen-abi-macro 1.14.6", + "solana-logger 1.14.6", + "solana-sdk-macro 1.14.6", "static_assertions", "thiserror", "tiny-bip39", @@ -5808,7 +5808,7 @@ dependencies = [ [[package]] name = "solana-program-runtime" -version = "1.14.5" +version = "1.14.6" dependencies = [ "base64 0.13.0", "bincode", @@ -5822,18 +5822,18 @@ dependencies = [ "num-traits", "rustc_version 0.4.0", "serde", - "solana-frozen-abi 1.14.5", - "solana-frozen-abi-macro 1.14.5", - "solana-logger 1.14.5", + "solana-frozen-abi 1.14.6", + "solana-frozen-abi-macro 1.14.6", + "solana-logger 1.14.6", "solana-measure", "solana-metrics", - "solana-sdk 1.14.5", + "solana-sdk 1.14.6", "thiserror", ] [[package]] name = "solana-program-test" -version = "1.14.5" +version = "1.14.6" dependencies = [ "assert_matches", "async-trait", @@ -5845,10 +5845,10 @@ dependencies = [ "solana-banks-client", "solana-banks-server", "solana-bpf-loader-program", - "solana-logger 1.14.5", + "solana-logger 1.14.6", "solana-program-runtime", "solana-runtime", - "solana-sdk 1.14.5", + "solana-sdk 1.14.6", "solana-vote-program", "thiserror", "tokio", @@ -5856,7 +5856,7 @@ dependencies = [ [[package]] name = "solana-rayon-threadlimit" -version = "1.14.5" +version = "1.14.6" dependencies = [ "lazy_static", "num_cpus", @@ -5864,7 +5864,7 @@ dependencies = [ [[package]] name = "solana-remote-wallet" -version = "1.14.5" +version = "1.14.6" dependencies = [ "console", "dialoguer", @@ -5875,14 +5875,14 @@ dependencies = [ "parking_lot 0.12.1", "qstring", "semver 1.0.10", - "solana-sdk 1.14.5", + "solana-sdk 1.14.6", "thiserror", "uriparse", ] [[package]] name = "solana-rpc" -version = "1.14.5" +version = "1.14.6" dependencies = [ "base64 0.13.0", "bincode", @@ -5918,7 +5918,7 @@ dependencies = [ "solana-poh", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.14.5", + "solana-sdk 1.14.6", "solana-send-transaction-service", "solana-stake-program", "solana-storage-bigtable", @@ -5937,7 +5937,7 @@ dependencies = [ [[package]] name = "solana-rpc-test" -version = "1.14.5" +version = "1.14.6" dependencies = [ "bincode", "bs58", @@ -5949,9 +5949,9 @@ dependencies = [ "serde_json", "solana-account-decoder", "solana-client", - "solana-logger 1.14.5", + "solana-logger 1.14.6", "solana-rpc", - "solana-sdk 1.14.5", + "solana-sdk 1.14.6", "solana-streamer", "solana-test-validator", "solana-transaction-status", @@ -5960,7 +5960,7 @@ dependencies = [ [[package]] name = "solana-runtime" -version = "1.14.5" +version = "1.14.6" dependencies = [ "arrayref", "assert_matches", @@ -6000,18 +6000,18 @@ dependencies = [ "solana-bucket-map", "solana-compute-budget-program", "solana-config-program", - "solana-frozen-abi 1.14.5", - "solana-frozen-abi-macro 1.14.5", - "solana-logger 1.14.5", + "solana-frozen-abi 1.14.6", + "solana-frozen-abi-macro 1.14.6", + "solana-logger 1.14.6", "solana-measure", "solana-metrics", "solana-program-runtime", "solana-rayon-threadlimit", - "solana-sdk 1.14.5", + "solana-sdk 1.14.6", "solana-stake-program", "solana-vote-program", "solana-zk-token-proof-program", - "solana-zk-token-sdk 1.14.5", + "solana-zk-token-sdk 1.14.6", "strum", "strum_macros", "symlink", @@ -6074,7 +6074,7 @@ dependencies = [ [[package]] name = "solana-sdk" -version = "1.14.5" +version = "1.14.6" dependencies = [ "anyhow", "assert_matches", @@ -6114,11 +6114,11 @@ dependencies = [ "serde_json", "sha2 0.10.2", "sha3 0.10.1", - "solana-frozen-abi 1.14.5", - "solana-frozen-abi-macro 1.14.5", - "solana-logger 1.14.5", - "solana-program 1.14.5", - "solana-sdk-macro 1.14.5", + "solana-frozen-abi 1.14.6", + "solana-frozen-abi-macro 1.14.6", + "solana-logger 1.14.6", + "solana-program 1.14.6", + "solana-sdk-macro 1.14.6", "static_assertions", "thiserror", "tiny-bip39", @@ -6141,7 +6141,7 @@ dependencies = [ [[package]] name = "solana-sdk-macro" -version = "1.14.5" +version = "1.14.6" dependencies = [ "bs58", "proc-macro2 1.0.41", @@ -6152,21 +6152,21 @@ dependencies = [ [[package]] name = "solana-send-transaction-service" -version = "1.14.5" +version = "1.14.6" dependencies = [ "crossbeam-channel", "log", "solana-client", - "solana-logger 1.14.5", + "solana-logger 1.14.6", "solana-measure", "solana-metrics", "solana-runtime", - "solana-sdk 1.14.5", + "solana-sdk 1.14.6", ] [[package]] name = "solana-stake-accounts" -version = "1.14.5" +version = "1.14.6" dependencies = [ "clap 2.33.3", "solana-clap-utils", @@ -6174,13 +6174,13 @@ dependencies = [ "solana-client", "solana-remote-wallet", "solana-runtime", - "solana-sdk 1.14.5", + "solana-sdk 1.14.6", "solana-stake-program", ] [[package]] name = "solana-stake-program" -version = "1.14.5" +version = "1.14.6" dependencies = [ "assert_matches", "bincode", @@ -6192,12 +6192,12 @@ dependencies = [ "serde", "serde_derive", "solana-config-program", - "solana-frozen-abi 1.14.5", - "solana-frozen-abi-macro 1.14.5", - "solana-logger 1.14.5", + "solana-frozen-abi 1.14.6", + "solana-frozen-abi-macro 1.14.6", + "solana-logger 1.14.6", "solana-metrics", "solana-program-runtime", - "solana-sdk 1.14.5", + "solana-sdk 1.14.6", "solana-vote-program", "test-case", "thiserror", @@ -6205,7 +6205,7 @@ dependencies = [ [[package]] name = "solana-storage-bigtable" -version = "1.14.5" +version = "1.14.6" dependencies = [ "backoff", "bincode", @@ -6226,7 +6226,7 @@ dependencies = [ "serde_derive", "smpl_jwt", "solana-metrics", - "solana-sdk 1.14.5", + "solana-sdk 1.14.6", "solana-storage-proto", "solana-transaction-status", "thiserror", @@ -6237,7 +6237,7 @@ dependencies = [ [[package]] name = "solana-storage-proto" -version = "1.14.5" +version = "1.14.6" dependencies = [ "bincode", "bs58", @@ -6246,25 +6246,25 @@ dependencies = [ "protobuf-src", "serde", "solana-account-decoder", - "solana-sdk 1.14.5", + "solana-sdk 1.14.6", "solana-transaction-status", "tonic-build 0.8.0", ] [[package]] name = "solana-store-tool" -version = "1.14.5" +version = "1.14.6" dependencies = [ "clap 2.33.3", "log", - "solana-logger 1.14.5", + "solana-logger 1.14.6", "solana-runtime", "solana-version", ] [[package]] name = "solana-streamer" -version = "1.14.5" +version = "1.14.6" dependencies = [ "crossbeam-channel", "futures-util", @@ -6281,10 +6281,10 @@ dependencies = [ "rand 0.7.3", "rcgen", "rustls 0.20.6", - "solana-logger 1.14.5", + "solana-logger 1.14.6", "solana-metrics", "solana-perf", - "solana-sdk 1.14.5", + "solana-sdk 1.14.6", "thiserror", "tokio", "x509-parser", @@ -6292,13 +6292,13 @@ dependencies = [ [[package]] name = "solana-sys-tuner" -version = "1.14.5" +version = "1.14.6" dependencies = [ "clap 2.33.3", "libc", "log", "nix", - "solana-logger 1.14.5", + "solana-logger 1.14.6", "solana-version", "sysctl", "unix_socket2", @@ -6307,7 +6307,7 @@ dependencies = [ [[package]] name = "solana-test-validator" -version = "1.14.5" +version = "1.14.6" dependencies = [ "base64 0.13.0", "log", @@ -6318,20 +6318,20 @@ dependencies = [ "solana-core", "solana-gossip", "solana-ledger", - "solana-logger 1.14.5", + "solana-logger 1.14.6", "solana-net-utils", "solana-program-runtime", "solana-program-test", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.5", + "solana-sdk 1.14.6", "solana-streamer", "tokio", ] [[package]] name = "solana-tokens" -version = "1.14.5" +version = "1.14.6" dependencies = [ "bincode", "chrono", @@ -6347,9 +6347,9 @@ dependencies = [ "solana-clap-utils", "solana-cli-config", "solana-client", - "solana-logger 1.14.5", + "solana-logger 1.14.6", "solana-remote-wallet", - "solana-sdk 1.14.5", + "solana-sdk 1.14.6", "solana-streamer", "solana-test-validator", "solana-transaction-status", @@ -6362,7 +6362,7 @@ dependencies = [ [[package]] name = "solana-transaction-dos" -version = "1.14.5" +version = "1.14.6" dependencies = [ "bincode", "clap 2.33.3", @@ -6376,11 +6376,11 @@ dependencies = [ "solana-faucet", "solana-gossip", "solana-local-cluster", - "solana-logger 1.14.5", + "solana-logger 1.14.6", "solana-measure", "solana-net-utils", "solana-runtime", - "solana-sdk 1.14.5", + "solana-sdk 1.14.6", "solana-streamer", "solana-transaction-status", "solana-version", @@ -6388,7 +6388,7 @@ dependencies = [ [[package]] name = "solana-transaction-status" -version = "1.14.5" +version = "1.14.6" dependencies = [ "Inflector", "base64 0.13.0", @@ -6404,7 +6404,7 @@ dependencies = [ "solana-address-lookup-table-program", "solana-measure", "solana-metrics", - "solana-sdk 1.14.5", + "solana-sdk 1.14.6", "solana-vote-program", "spl-associated-token-account", "spl-memo", @@ -6415,7 +6415,7 @@ dependencies = [ [[package]] name = "solana-upload-perf" -version = "1.14.5" +version = "1.14.6" dependencies = [ "serde_json", "solana-metrics", @@ -6423,7 +6423,7 @@ dependencies = [ [[package]] name = "solana-validator" -version = "1.14.5" +version = "1.14.6" dependencies = [ "chrono", "clap 2.33.3", @@ -6454,14 +6454,14 @@ dependencies = [ "solana-genesis-utils", "solana-gossip", "solana-ledger", - "solana-logger 1.14.5", + "solana-logger 1.14.6", "solana-metrics", "solana-net-utils", "solana-perf", "solana-poh", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.5", + "solana-sdk 1.14.6", "solana-send-transaction-service", "solana-storage-bigtable", "solana-streamer", @@ -6474,21 +6474,21 @@ dependencies = [ [[package]] name = "solana-version" -version = "1.14.5" +version = "1.14.6" dependencies = [ "log", "rustc_version 0.4.0", "semver 1.0.10", "serde", "serde_derive", - "solana-frozen-abi 1.14.5", - "solana-frozen-abi-macro 1.14.5", - "solana-sdk 1.14.5", + "solana-frozen-abi 1.14.6", + "solana-frozen-abi-macro 1.14.6", + "solana-sdk 1.14.6", ] [[package]] name = "solana-vote-program" -version = "1.14.5" +version = "1.14.6" dependencies = [ "bincode", "itertools", @@ -6499,18 +6499,18 @@ dependencies = [ "rustc_version 0.4.0", "serde", "serde_derive", - "solana-frozen-abi 1.14.5", - "solana-frozen-abi-macro 1.14.5", - "solana-logger 1.14.5", + "solana-frozen-abi 1.14.6", + "solana-frozen-abi-macro 1.14.6", + "solana-logger 1.14.6", "solana-metrics", "solana-program-runtime", - "solana-sdk 1.14.5", + "solana-sdk 1.14.6", "thiserror", ] [[package]] name = "solana-watchtower" -version = "1.14.5" +version = "1.14.6" dependencies = [ "clap 2.33.3", "humantime", @@ -6519,24 +6519,24 @@ dependencies = [ "solana-cli-config", "solana-cli-output", "solana-client", - "solana-logger 1.14.5", + "solana-logger 1.14.6", "solana-metrics", "solana-notifier", - "solana-sdk 1.14.5", + "solana-sdk 1.14.6", "solana-version", ] [[package]] name = "solana-zk-token-proof-program" -version = "1.14.5" +version = "1.14.6" dependencies = [ "bytemuck", "getrandom 0.1.16", "num-derive", "num-traits", "solana-program-runtime", - "solana-sdk 1.14.5", - "solana-zk-token-sdk 1.14.5", + "solana-sdk 1.14.6", + "solana-zk-token-sdk 1.14.6", ] [[package]] @@ -6571,7 +6571,7 @@ dependencies = [ [[package]] name = "solana-zk-token-sdk" -version = "1.14.5" +version = "1.14.6" dependencies = [ "aes-gcm-siv", "arrayref", @@ -6591,8 +6591,8 @@ dependencies = [ "serde", "serde_json", "sha3 0.9.1", - "solana-program 1.14.5", - "solana-sdk 1.14.5", + "solana-program 1.14.6", + "solana-sdk 1.14.6", "subtle", "thiserror", "zeroize", diff --git a/account-decoder/Cargo.toml b/account-decoder/Cargo.toml index b3d7ab60588adf..e5c97e9d5e4560 100644 --- a/account-decoder/Cargo.toml +++ b/account-decoder/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-account-decoder" -version = "1.14.5" +version = "1.14.6" description = "Solana account decoder" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -19,10 +19,10 @@ lazy_static = "1.4.0" serde = "1.0.138" serde_derive = "1.0.103" serde_json = "1.0.81" -solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.5" } -solana-config-program = { path = "../programs/config", version = "=1.14.5" } -solana-sdk = { path = "../sdk", version = "=1.14.5" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.5" } +solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.6" } +solana-config-program = { path = "../programs/config", version = "=1.14.6" } +solana-sdk = { path = "../sdk", version = "=1.14.6" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.6" } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } spl-token-2022 = { version = "=0.4.2", features = ["no-entrypoint"] } thiserror = "1.0" diff --git a/accounts-bench/Cargo.toml b/accounts-bench/Cargo.toml index f00d53c4e77ed7..d6395090643178 100644 --- a/accounts-bench/Cargo.toml +++ b/accounts-bench/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-accounts-bench" -version = "1.14.5" +version = "1.14.6" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -12,11 +12,11 @@ publish = false clap = "2.33.1" log = "0.4.17" rayon = "1.5.3" -solana-logger = { path = "../logger", version = "=1.14.5" } -solana-measure = { path = "../measure", version = "=1.14.5" } -solana-runtime = { path = "../runtime", version = "=1.14.5" } -solana-sdk = { path = "../sdk", version = "=1.14.5" } -solana-version = { path = "../version", version = "=1.14.5" } +solana-logger = { path = "../logger", version = "=1.14.6" } +solana-measure = { path = "../measure", version = "=1.14.6" } +solana-runtime = { path = "../runtime", version = "=1.14.6" } +solana-sdk = { path = "../sdk", version = "=1.14.6" } +solana-version = { path = "../version", version = "=1.14.6" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/accounts-cluster-bench/Cargo.toml b/accounts-cluster-bench/Cargo.toml index b101cefcc0c06b..b26bbeb3f6fd39 100644 --- a/accounts-cluster-bench/Cargo.toml +++ b/accounts-cluster-bench/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-accounts-cluster-bench" -version = "1.14.5" +version = "1.14.6" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -13,25 +13,25 @@ clap = "2.33.1" log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.5" } -solana-clap-utils = { path = "../clap-utils", version = "=1.14.5" } -solana-client = { path = "../client", version = "=1.14.5" } -solana-faucet = { path = "../faucet", version = "=1.14.5" } -solana-gossip = { path = "../gossip", version = "=1.14.5" } -solana-logger = { path = "../logger", version = "=1.14.5" } -solana-measure = { path = "../measure", version = "=1.14.5" } -solana-net-utils = { path = "../net-utils", version = "=1.14.5" } -solana-runtime = { path = "../runtime", version = "=1.14.5" } -solana-sdk = { path = "../sdk", version = "=1.14.5" } -solana-streamer = { path = "../streamer", version = "=1.14.5" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.5" } -solana-version = { path = "../version", version = "=1.14.5" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.6" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.6" } +solana-client = { path = "../client", version = "=1.14.6" } +solana-faucet = { path = "../faucet", version = "=1.14.6" } +solana-gossip = { path = "../gossip", version = "=1.14.6" } +solana-logger = { path = "../logger", version = "=1.14.6" } +solana-measure = { path = "../measure", version = "=1.14.6" } +solana-net-utils = { path = "../net-utils", version = "=1.14.6" } +solana-runtime = { path = "../runtime", version = "=1.14.6" } +solana-sdk = { path = "../sdk", version = "=1.14.6" } +solana-streamer = { path = "../streamer", version = "=1.14.6" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.6" } +solana-version = { path = "../version", version = "=1.14.6" } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } [dev-dependencies] -solana-core = { path = "../core", version = "=1.14.5" } -solana-local-cluster = { path = "../local-cluster", version = "=1.14.5" } -solana-test-validator = { path = "../test-validator", version = "=1.14.5" } +solana-core = { path = "../core", version = "=1.14.6" } +solana-local-cluster = { path = "../local-cluster", version = "=1.14.6" } +solana-test-validator = { path = "../test-validator", version = "=1.14.6" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/banking-bench/Cargo.toml b/banking-bench/Cargo.toml index 387b15ba545dd9..2d1c3bc0ea1b86 100644 --- a/banking-bench/Cargo.toml +++ b/banking-bench/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-banking-bench" -version = "1.14.5" +version = "1.14.6" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,18 +14,18 @@ crossbeam-channel = "0.5" log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" -solana-client = { path = "../client", version = "=1.14.5" } -solana-core = { path = "../core", version = "=1.14.5" } -solana-gossip = { path = "../gossip", version = "=1.14.5" } -solana-ledger = { path = "../ledger", version = "=1.14.5" } -solana-logger = { path = "../logger", version = "=1.14.5" } -solana-measure = { path = "../measure", version = "=1.14.5" } -solana-perf = { path = "../perf", version = "=1.14.5" } -solana-poh = { path = "../poh", version = "=1.14.5" } -solana-runtime = { path = "../runtime", version = "=1.14.5" } -solana-sdk = { path = "../sdk", version = "=1.14.5" } -solana-streamer = { path = "../streamer", version = "=1.14.5" } -solana-version = { path = "../version", version = "=1.14.5" } +solana-client = { path = "../client", version = "=1.14.6" } +solana-core = { path = "../core", version = "=1.14.6" } +solana-gossip = { path = "../gossip", version = "=1.14.6" } +solana-ledger = { path = "../ledger", version = "=1.14.6" } +solana-logger = { path = "../logger", version = "=1.14.6" } +solana-measure = { path = "../measure", version = "=1.14.6" } +solana-perf = { path = "../perf", version = "=1.14.6" } +solana-poh = { path = "../poh", version = "=1.14.6" } +solana-runtime = { path = "../runtime", version = "=1.14.6" } +solana-sdk = { path = "../sdk", version = "=1.14.6" } +solana-streamer = { path = "../streamer", version = "=1.14.6" } +solana-version = { path = "../version", version = "=1.14.6" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/banks-client/Cargo.toml b/banks-client/Cargo.toml index c05c05fe759701..be4f11d6f45680 100644 --- a/banks-client/Cargo.toml +++ b/banks-client/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-banks-client" -version = "1.14.5" +version = "1.14.6" description = "Solana banks client" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,17 +12,17 @@ edition = "2021" [dependencies] borsh = "0.9.3" futures = "0.3" -solana-banks-interface = { path = "../banks-interface", version = "=1.14.5" } -solana-program = { path = "../sdk/program", version = "=1.14.5" } -solana-sdk = { path = "../sdk", version = "=1.14.5" } +solana-banks-interface = { path = "../banks-interface", version = "=1.14.6" } +solana-program = { path = "../sdk/program", version = "=1.14.6" } +solana-sdk = { path = "../sdk", version = "=1.14.6" } tarpc = { version = "0.29.0", features = ["full"] } thiserror = "1.0" tokio = { version = "~1.14.1", features = ["full"] } tokio-serde = { version = "0.8", features = ["bincode"] } [dev-dependencies] -solana-banks-server = { path = "../banks-server", version = "=1.14.5" } -solana-runtime = { path = "../runtime", version = "=1.14.5" } +solana-banks-server = { path = "../banks-server", version = "=1.14.6" } +solana-runtime = { path = "../runtime", version = "=1.14.6" } [lib] crate-type = ["lib"] diff --git a/banks-interface/Cargo.toml b/banks-interface/Cargo.toml index aa5b571e55f34c..b847576af5287f 100644 --- a/banks-interface/Cargo.toml +++ b/banks-interface/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-banks-interface" -version = "1.14.5" +version = "1.14.6" description = "Solana banks RPC interface" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -11,7 +11,7 @@ edition = "2021" [dependencies] serde = { version = "1.0.138", features = ["derive"] } -solana-sdk = { path = "../sdk", version = "=1.14.5" } +solana-sdk = { path = "../sdk", version = "=1.14.6" } tarpc = { version = "0.29.0", features = ["full"] } [lib] diff --git a/banks-server/Cargo.toml b/banks-server/Cargo.toml index b3c7f60c7c50ed..b97bae6e1e7b46 100644 --- a/banks-server/Cargo.toml +++ b/banks-server/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-banks-server" -version = "1.14.5" +version = "1.14.6" description = "Solana banks server" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,11 +13,11 @@ edition = "2021" bincode = "1.3.3" crossbeam-channel = "0.5" futures = "0.3" -solana-banks-interface = { path = "../banks-interface", version = "=1.14.5" } -solana-client = { path = "../client", version = "=1.14.5" } -solana-runtime = { path = "../runtime", version = "=1.14.5" } -solana-sdk = { path = "../sdk", version = "=1.14.5" } -solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.5" } +solana-banks-interface = { path = "../banks-interface", version = "=1.14.6" } +solana-client = { path = "../client", version = "=1.14.6" } +solana-runtime = { path = "../runtime", version = "=1.14.6" } +solana-sdk = { path = "../sdk", version = "=1.14.6" } +solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.6" } tarpc = { version = "0.29.0", features = ["full"] } tokio = { version = "1", features = ["full"] } tokio-serde = { version = "0.8", features = ["bincode"] } diff --git a/bench-streamer/Cargo.toml b/bench-streamer/Cargo.toml index dba8f0a190e4d3..91e40ac62a6970 100644 --- a/bench-streamer/Cargo.toml +++ b/bench-streamer/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-bench-streamer" -version = "1.14.5" +version = "1.14.6" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -11,9 +11,9 @@ publish = false [dependencies] clap = { version = "3.1.5", features = ["cargo"] } crossbeam-channel = "0.5" -solana-net-utils = { path = "../net-utils", version = "=1.14.5" } -solana-streamer = { path = "../streamer", version = "=1.14.5" } -solana-version = { path = "../version", version = "=1.14.5" } +solana-net-utils = { path = "../net-utils", version = "=1.14.6" } +solana-streamer = { path = "../streamer", version = "=1.14.6" } +solana-version = { path = "../version", version = "=1.14.6" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/bench-tps/Cargo.toml b/bench-tps/Cargo.toml index 6d1de30a1c7490..4fbfd8b13d9d1f 100644 --- a/bench-tps/Cargo.toml +++ b/bench-tps/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-bench-tps" -version = "1.14.5" +version = "1.14.6" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -15,28 +15,28 @@ log = "0.4.17" rayon = "1.5.3" serde_json = "1.0.81" serde_yaml = "0.8.26" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.5" } -solana-cli-config = { path = "../cli-config", version = "=1.14.5" } -solana-client = { path = "../client", version = "=1.14.5" } -solana-core = { path = "../core", version = "=1.14.5" } -solana-faucet = { path = "../faucet", version = "=1.14.5" } -solana-genesis = { path = "../genesis", version = "=1.14.5" } -solana-gossip = { path = "../gossip", version = "=1.14.5" } -solana-logger = { path = "../logger", version = "=1.14.5" } -solana-measure = { path = "../measure", version = "=1.14.5" } -solana-metrics = { path = "../metrics", version = "=1.14.5" } -solana-net-utils = { path = "../net-utils", version = "=1.14.5" } -solana-rpc = { path = "../rpc", version = "=1.14.5" } -solana-runtime = { path = "../runtime", version = "=1.14.5" } -solana-sdk = { path = "../sdk", version = "=1.14.5" } -solana-streamer = { path = "../streamer", version = "=1.14.5" } -solana-version = { path = "../version", version = "=1.14.5" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.6" } +solana-cli-config = { path = "../cli-config", version = "=1.14.6" } +solana-client = { path = "../client", version = "=1.14.6" } +solana-core = { path = "../core", version = "=1.14.6" } +solana-faucet = { path = "../faucet", version = "=1.14.6" } +solana-genesis = { path = "../genesis", version = "=1.14.6" } +solana-gossip = { path = "../gossip", version = "=1.14.6" } +solana-logger = { path = "../logger", version = "=1.14.6" } +solana-measure = { path = "../measure", version = "=1.14.6" } +solana-metrics = { path = "../metrics", version = "=1.14.6" } +solana-net-utils = { path = "../net-utils", version = "=1.14.6" } +solana-rpc = { path = "../rpc", version = "=1.14.6" } +solana-runtime = { path = "../runtime", version = "=1.14.6" } +solana-sdk = { path = "../sdk", version = "=1.14.6" } +solana-streamer = { path = "../streamer", version = "=1.14.6" } +solana-version = { path = "../version", version = "=1.14.6" } thiserror = "1.0" [dev-dependencies] serial_test = "0.8.0" -solana-local-cluster = { path = "../local-cluster", version = "=1.14.5" } -solana-test-validator = { path = "../test-validator", version = "=1.14.5" } +solana-local-cluster = { path = "../local-cluster", version = "=1.14.6" } +solana-test-validator = { path = "../test-validator", version = "=1.14.6" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/bloom/Cargo.toml b/bloom/Cargo.toml index 7148de970af05c..9423fbc62a52f6 100644 --- a/bloom/Cargo.toml +++ b/bloom/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bloom" -version = "1.14.5" +version = "1.14.6" description = "Solana bloom filter" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -17,9 +17,9 @@ rand = "0.7.0" rayon = "1.5.3" serde = { version = "1.0.138", features = ["rc"] } serde_derive = "1.0.103" -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.5" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.5" } -solana-sdk = { path = "../sdk", version = "=1.14.5" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.6" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.6" } +solana-sdk = { path = "../sdk", version = "=1.14.6" } [lib] crate-type = ["lib"] diff --git a/bucket_map/Cargo.toml b/bucket_map/Cargo.toml index f7c338331ae9e1..7167d58ea69369 100644 --- a/bucket_map/Cargo.toml +++ b/bucket_map/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bucket-map" -version = "1.14.5" +version = "1.14.6" description = "solana-bucket-map" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-bucket-map" @@ -15,14 +15,14 @@ log = { version = "0.4.17" } memmap2 = "0.5.3" modular-bitfield = "0.11.2" rand = "0.7.0" -solana-measure = { path = "../measure", version = "=1.14.5" } -solana-sdk = { path = "../sdk", version = "=1.14.5" } +solana-measure = { path = "../measure", version = "=1.14.6" } +solana-sdk = { path = "../sdk", version = "=1.14.6" } tempfile = "3.3.0" [dev-dependencies] fs_extra = "1.2.0" rayon = "1.5.3" -solana-logger = { path = "../logger", version = "=1.14.5" } +solana-logger = { path = "../logger", version = "=1.14.6" } [lib] crate-type = ["lib"] diff --git a/clap-utils/Cargo.toml b/clap-utils/Cargo.toml index 1ed2001abb7dd2..471114cd0e95ba 100644 --- a/clap-utils/Cargo.toml +++ b/clap-utils/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-clap-utils" -version = "1.14.5" +version = "1.14.6" description = "Solana utilities for the clap" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,9 +13,9 @@ edition = "2021" chrono = "0.4" clap = "2.33.0" rpassword = "6.0" -solana-perf = { path = "../perf", version = "=1.14.5" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.5", default-features = false } -solana-sdk = { path = "../sdk", version = "=1.14.5" } +solana-perf = { path = "../perf", version = "=1.14.6" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.6", default-features = false } +solana-sdk = { path = "../sdk", version = "=1.14.6" } thiserror = "1.0.31" tiny-bip39 = "0.8.2" uriparse = "0.6.4" diff --git a/clap-v3-utils/Cargo.toml b/clap-v3-utils/Cargo.toml index 3c849664033752..411a5edd5073c6 100644 --- a/clap-v3-utils/Cargo.toml +++ b/clap-v3-utils/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-clap-v3-utils" -version = "1.14.5" +version = "1.14.6" description = "Solana utilities for the clap v3" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,9 +13,9 @@ edition = "2021" chrono = "0.4" clap = { version = "3.1.5", features = ["cargo"] } rpassword = "6.0" -solana-perf = { path = "../perf", version = "=1.14.5" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.5", default-features = false } -solana-sdk = { path = "../sdk", version = "=1.14.5" } +solana-perf = { path = "../perf", version = "=1.14.6" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.6", default-features = false } +solana-sdk = { path = "../sdk", version = "=1.14.6" } thiserror = "1.0.31" tiny-bip39 = "0.8.2" uriparse = "0.6.4" diff --git a/cli-config/Cargo.toml b/cli-config/Cargo.toml index ecd4965f38459a..7171df99048a15 100644 --- a/cli-config/Cargo.toml +++ b/cli-config/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-cli-config" description = "Blockchain, Rebuilt for Scale" -version = "1.14.5" +version = "1.14.6" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -15,8 +15,8 @@ lazy_static = "1.4.0" serde = "1.0.138" serde_derive = "1.0.103" serde_yaml = "0.8.26" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.5" } -solana-sdk = { path = "../sdk", version = "=1.14.5" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.6" } +solana-sdk = { path = "../sdk", version = "=1.14.6" } url = "2.2.2" [dev-dependencies] diff --git a/cli-output/Cargo.toml b/cli-output/Cargo.toml index a37942d0d9fdb6..4f5b5f41360fc0 100644 --- a/cli-output/Cargo.toml +++ b/cli-output/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-cli-output" description = "Blockchain, Rebuilt for Scale" -version = "1.14.5" +version = "1.14.6" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -21,13 +21,13 @@ pretty-hex = "0.3.0" semver = "1.0.10" serde = "1.0.138" serde_json = "1.0.81" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.5" } -solana-clap-utils = { path = "../clap-utils", version = "=1.14.5" } -solana-cli-config = { path = "../cli-config", version = "=1.14.5" } -solana-client = { path = "../client", version = "=1.14.5" } -solana-sdk = { path = "../sdk", version = "=1.14.5" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.5" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.5" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.6" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.6" } +solana-cli-config = { path = "../cli-config", version = "=1.14.6" } +solana-client = { path = "../client", version = "=1.14.6" } +solana-sdk = { path = "../sdk", version = "=1.14.6" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.6" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.6" } spl-memo = { version = "=3.0.1", features = ["no-entrypoint"] } [dev-dependencies] diff --git a/cli/Cargo.toml b/cli/Cargo.toml index 68a69732be4bf0..5333ce9a6b50ce 100644 --- a/cli/Cargo.toml +++ b/cli/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-cli" description = "Blockchain, Rebuilt for Scale" -version = "1.14.5" +version = "1.14.6" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -27,29 +27,29 @@ semver = "1.0.10" serde = "1.0.138" serde_derive = "1.0.103" serde_json = "1.0.81" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.5" } -solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.5" } -solana-clap-utils = { path = "../clap-utils", version = "=1.14.5" } -solana-cli-config = { path = "../cli-config", version = "=1.14.5" } -solana-cli-output = { path = "../cli-output", version = "=1.14.5" } -solana-client = { path = "../client", version = "=1.14.5" } -solana-config-program = { path = "../programs/config", version = "=1.14.5" } -solana-faucet = { path = "../faucet", version = "=1.14.5" } -solana-logger = { path = "../logger", version = "=1.14.5" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.5" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.5" } -solana-sdk = { path = "../sdk", version = "=1.14.5" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.5" } -solana-version = { path = "../version", version = "=1.14.5" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.5" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.6" } +solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.6" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.6" } +solana-cli-config = { path = "../cli-config", version = "=1.14.6" } +solana-cli-output = { path = "../cli-output", version = "=1.14.6" } +solana-client = { path = "../client", version = "=1.14.6" } +solana-config-program = { path = "../programs/config", version = "=1.14.6" } +solana-faucet = { path = "../faucet", version = "=1.14.6" } +solana-logger = { path = "../logger", version = "=1.14.6" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.6" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.6" } +solana-sdk = { path = "../sdk", version = "=1.14.6" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.6" } +solana-version = { path = "../version", version = "=1.14.6" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.6" } solana_rbpf = "=0.2.31" spl-memo = { version = "=3.0.1", features = ["no-entrypoint"] } thiserror = "1.0.31" tiny-bip39 = "0.8.2" [dev-dependencies] -solana-streamer = { path = "../streamer", version = "=1.14.5" } -solana-test-validator = { path = "../test-validator", version = "=1.14.5" } +solana-streamer = { path = "../streamer", version = "=1.14.6" } +solana-test-validator = { path = "../test-validator", version = "=1.14.6" } tempfile = "3.3.0" [[bin]] diff --git a/client-test/Cargo.toml b/client-test/Cargo.toml index 1fc1d08e99574a..67022513c9a130 100644 --- a/client-test/Cargo.toml +++ b/client-test/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-client-test" -version = "1.14.5" +version = "1.14.6" description = "Solana RPC Test" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,25 +14,25 @@ publish = false futures-util = "0.3.21" serde_json = "1.0.81" serial_test = "0.8.0" -solana-client = { path = "../client", version = "=1.14.5" } -solana-ledger = { path = "../ledger", version = "=1.14.5" } -solana-measure = { path = "../measure", version = "=1.14.5" } -solana-merkle-tree = { path = "../merkle-tree", version = "=1.14.5" } -solana-metrics = { path = "../metrics", version = "=1.14.5" } -solana-perf = { path = "../perf", version = "=1.14.5" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.5" } -solana-rpc = { path = "../rpc", version = "=1.14.5" } -solana-runtime = { path = "../runtime", version = "=1.14.5" } -solana-sdk = { path = "../sdk", version = "=1.14.5" } -solana-streamer = { path = "../streamer", version = "=1.14.5" } -solana-test-validator = { path = "../test-validator", version = "=1.14.5" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.5" } -solana-version = { path = "../version", version = "=1.14.5" } +solana-client = { path = "../client", version = "=1.14.6" } +solana-ledger = { path = "../ledger", version = "=1.14.6" } +solana-measure = { path = "../measure", version = "=1.14.6" } +solana-merkle-tree = { path = "../merkle-tree", version = "=1.14.6" } +solana-metrics = { path = "../metrics", version = "=1.14.6" } +solana-perf = { path = "../perf", version = "=1.14.6" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.6" } +solana-rpc = { path = "../rpc", version = "=1.14.6" } +solana-runtime = { path = "../runtime", version = "=1.14.6" } +solana-sdk = { path = "../sdk", version = "=1.14.6" } +solana-streamer = { path = "../streamer", version = "=1.14.6" } +solana-test-validator = { path = "../test-validator", version = "=1.14.6" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.6" } +solana-version = { path = "../version", version = "=1.14.6" } systemstat = "0.1.11" tokio = { version = "~1.14.1", features = ["full"] } [dev-dependencies] -solana-logger = { path = "../logger", version = "=1.14.5" } +solana-logger = { path = "../logger", version = "=1.14.6" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/client/Cargo.toml b/client/Cargo.toml index 700d839f0ef83d..8da9ddb478f610 100644 --- a/client/Cargo.toml +++ b/client/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-client" -version = "1.14.5" +version = "1.14.6" description = "Solana Client" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -38,17 +38,17 @@ semver = "1.0.10" serde = "1.0.138" serde_derive = "1.0.103" serde_json = "1.0.81" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.5" } -solana-clap-utils = { path = "../clap-utils", version = "=1.14.5" } -solana-faucet = { path = "../faucet", version = "=1.14.5" } -solana-measure = { path = "../measure", version = "=1.14.5" } -solana-metrics = { path = "../metrics", version = "=1.14.5" } -solana-net-utils = { path = "../net-utils", version = "=1.14.5" } -solana-sdk = { path = "../sdk", version = "=1.14.5" } -solana-streamer = { path = "../streamer", version = "=1.14.5" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.5" } -solana-version = { path = "../version", version = "=1.14.5" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.5" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.6" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.6" } +solana-faucet = { path = "../faucet", version = "=1.14.6" } +solana-measure = { path = "../measure", version = "=1.14.6" } +solana-metrics = { path = "../metrics", version = "=1.14.6" } +solana-net-utils = { path = "../net-utils", version = "=1.14.6" } +solana-sdk = { path = "../sdk", version = "=1.14.6" } +solana-streamer = { path = "../streamer", version = "=1.14.6" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.6" } +solana-version = { path = "../version", version = "=1.14.6" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.6" } spl-token-2022 = { version = "=0.4.2", features = ["no-entrypoint"] } thiserror = "1.0" tokio = { version = "1", features = ["full"] } @@ -61,8 +61,8 @@ url = "2.2.2" anyhow = "1.0.58" assert_matches = "1.5.0" jsonrpc-http-server = "18.0.0" -solana-logger = { path = "../logger", version = "=1.14.5" } -solana-perf = { path = "../perf", version = "=1.14.5" } +solana-logger = { path = "../logger", version = "=1.14.6" } +solana-perf = { path = "../perf", version = "=1.14.6" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/core/Cargo.toml b/core/Cargo.toml index 65f88744a8f893..67b8f15e22fb9a 100644 --- a/core/Cargo.toml +++ b/core/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "solana-core" description = "Blockchain, Rebuilt for Scale" -version = "1.14.5" +version = "1.14.6" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-core" readme = "../README.md" @@ -35,30 +35,30 @@ rand_chacha = "0.2.2" rayon = "1.5.3" serde = "1.0.138" serde_derive = "1.0.103" -solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.5" } -solana-bloom = { path = "../bloom", version = "=1.14.5" } -solana-client = { path = "../client", version = "=1.14.5" } -solana-entry = { path = "../entry", version = "=1.14.5" } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.5" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.5" } -solana-geyser-plugin-manager = { path = "../geyser-plugin-manager", version = "=1.14.5" } -solana-gossip = { path = "../gossip", version = "=1.14.5" } -solana-ledger = { path = "../ledger", version = "=1.14.5" } -solana-measure = { path = "../measure", version = "=1.14.5" } -solana-metrics = { path = "../metrics", version = "=1.14.5" } -solana-net-utils = { path = "../net-utils", version = "=1.14.5" } -solana-perf = { path = "../perf", version = "=1.14.5" } -solana-poh = { path = "../poh", version = "=1.14.5" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.5" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.5" } -solana-rpc = { path = "../rpc", version = "=1.14.5" } -solana-runtime = { path = "../runtime", version = "=1.14.5" } -solana-sdk = { path = "../sdk", version = "=1.14.5" } -solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.5" } -solana-streamer = { path = "../streamer", version = "=1.14.5" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.5" } -solana-version = { path = "../version", version = "=1.14.5" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.5" } +solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.6" } +solana-bloom = { path = "../bloom", version = "=1.14.6" } +solana-client = { path = "../client", version = "=1.14.6" } +solana-entry = { path = "../entry", version = "=1.14.6" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.6" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.6" } +solana-geyser-plugin-manager = { path = "../geyser-plugin-manager", version = "=1.14.6" } +solana-gossip = { path = "../gossip", version = "=1.14.6" } +solana-ledger = { path = "../ledger", version = "=1.14.6" } +solana-measure = { path = "../measure", version = "=1.14.6" } +solana-metrics = { path = "../metrics", version = "=1.14.6" } +solana-net-utils = { path = "../net-utils", version = "=1.14.6" } +solana-perf = { path = "../perf", version = "=1.14.6" } +solana-poh = { path = "../poh", version = "=1.14.6" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.6" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.6" } +solana-rpc = { path = "../rpc", version = "=1.14.6" } +solana-runtime = { path = "../runtime", version = "=1.14.6" } +solana-sdk = { path = "../sdk", version = "=1.14.6" } +solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.6" } +solana-streamer = { path = "../streamer", version = "=1.14.6" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.6" } +solana-version = { path = "../version", version = "=1.14.6" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.6" } sys-info = "0.9.1" tempfile = "3.3.0" thiserror = "1.0" @@ -70,9 +70,9 @@ matches = "0.1.9" raptorq = "1.7.0" serde_json = "1.0.81" serial_test = "0.8.0" -solana-logger = { path = "../logger", version = "=1.14.5" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.5" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.5" } +solana-logger = { path = "../logger", version = "=1.14.6" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.6" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.6" } static_assertions = "1.1.0" systemstat = "0.1.11" test-case = "2.1.0" diff --git a/dos/Cargo.toml b/dos/Cargo.toml index c6c3e4a49a1938..d30b5cb24d9b33 100644 --- a/dos/Cargo.toml +++ b/dos/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-dos" -version = "1.14.5" +version = "1.14.6" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -17,23 +17,23 @@ itertools = "0.10.3" log = "0.4.17" rand = "0.7.0" serde = "1.0.138" -solana-bench-tps = { path = "../bench-tps", version = "=1.14.5" } -solana-client = { path = "../client", version = "=1.14.5" } -solana-core = { path = "../core", version = "=1.14.5" } -solana-faucet = { path = "../faucet", version = "=1.14.5" } -solana-gossip = { path = "../gossip", version = "=1.14.5" } -solana-logger = { path = "../logger", version = "=1.14.5" } -solana-measure = { path = "../measure", version = "=1.14.5" } -solana-net-utils = { path = "../net-utils", version = "=1.14.5" } -solana-perf = { path = "../perf", version = "=1.14.5" } -solana-rpc = { path = "../rpc", version = "=1.14.5" } -solana-sdk = { path = "../sdk", version = "=1.14.5" } -solana-streamer = { path = "../streamer", version = "=1.14.5" } -solana-version = { path = "../version", version = "=1.14.5" } +solana-bench-tps = { path = "../bench-tps", version = "=1.14.6" } +solana-client = { path = "../client", version = "=1.14.6" } +solana-core = { path = "../core", version = "=1.14.6" } +solana-faucet = { path = "../faucet", version = "=1.14.6" } +solana-gossip = { path = "../gossip", version = "=1.14.6" } +solana-logger = { path = "../logger", version = "=1.14.6" } +solana-measure = { path = "../measure", version = "=1.14.6" } +solana-net-utils = { path = "../net-utils", version = "=1.14.6" } +solana-perf = { path = "../perf", version = "=1.14.6" } +solana-rpc = { path = "../rpc", version = "=1.14.6" } +solana-sdk = { path = "../sdk", version = "=1.14.6" } +solana-streamer = { path = "../streamer", version = "=1.14.6" } +solana-version = { path = "../version", version = "=1.14.6" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] [dev-dependencies] serial_test = "0.8.0" -solana-local-cluster = { path = "../local-cluster", version = "=1.14.5" } +solana-local-cluster = { path = "../local-cluster", version = "=1.14.6" } diff --git a/download-utils/Cargo.toml b/download-utils/Cargo.toml index 6148d2b17c45ca..51d6633195620c 100644 --- a/download-utils/Cargo.toml +++ b/download-utils/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-download-utils" -version = "1.14.5" +version = "1.14.6" description = "Solana Download Utils" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,8 +14,8 @@ console = "0.15.0" indicatif = "0.16.2" log = "0.4.17" reqwest = { version = "0.11.11", default-features = false, features = ["blocking", "brotli", "deflate", "gzip", "rustls-tls", "json"] } -solana-runtime = { path = "../runtime", version = "=1.14.5" } -solana-sdk = { path = "../sdk", version = "=1.14.5" } +solana-runtime = { path = "../runtime", version = "=1.14.6" } +solana-sdk = { path = "../sdk", version = "=1.14.6" } [lib] crate-type = ["lib"] diff --git a/entry/Cargo.toml b/entry/Cargo.toml index 6ec6c17008804d..7169f7b3ffa7f3 100644 --- a/entry/Cargo.toml +++ b/entry/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-entry" -version = "1.14.5" +version = "1.14.6" description = "Solana Entry" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -19,16 +19,16 @@ log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" serde = "1.0.138" -solana-measure = { path = "../measure", version = "=1.14.5" } -solana-merkle-tree = { path = "../merkle-tree", version = "=1.14.5" } -solana-metrics = { path = "../metrics", version = "=1.14.5" } -solana-perf = { path = "../perf", version = "=1.14.5" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.5" } -solana-sdk = { path = "../sdk", version = "=1.14.5" } +solana-measure = { path = "../measure", version = "=1.14.6" } +solana-merkle-tree = { path = "../merkle-tree", version = "=1.14.6" } +solana-metrics = { path = "../metrics", version = "=1.14.6" } +solana-perf = { path = "../perf", version = "=1.14.6" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.6" } +solana-sdk = { path = "../sdk", version = "=1.14.6" } [dev-dependencies] matches = "0.1.9" -solana-logger = { path = "../logger", version = "=1.14.5" } +solana-logger = { path = "../logger", version = "=1.14.6" } [lib] crate-type = ["lib"] diff --git a/faucet/Cargo.toml b/faucet/Cargo.toml index 6931401beb89d7..840931d3f57616 100644 --- a/faucet/Cargo.toml +++ b/faucet/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-faucet" -version = "1.14.5" +version = "1.14.6" description = "Solana Faucet" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -17,12 +17,12 @@ crossbeam-channel = "0.5" log = "0.4.17" serde = "1.0.138" serde_derive = "1.0.103" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.5" } -solana-cli-config = { path = "../cli-config", version = "=1.14.5" } -solana-logger = { path = "../logger", version = "=1.14.5" } -solana-metrics = { path = "../metrics", version = "=1.14.5" } -solana-sdk = { path = "../sdk", version = "=1.14.5" } -solana-version = { path = "../version", version = "=1.14.5" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.6" } +solana-cli-config = { path = "../cli-config", version = "=1.14.6" } +solana-logger = { path = "../logger", version = "=1.14.6" } +solana-metrics = { path = "../metrics", version = "=1.14.6" } +solana-sdk = { path = "../sdk", version = "=1.14.6" } +solana-version = { path = "../version", version = "=1.14.6" } spl-memo = { version = "=3.0.1", features = ["no-entrypoint"] } thiserror = "1.0" tokio = { version = "1", features = ["full"] } diff --git a/frozen-abi/Cargo.toml b/frozen-abi/Cargo.toml index 70394f0cf1d18b..75d2ea232e5423 100644 --- a/frozen-abi/Cargo.toml +++ b/frozen-abi/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-frozen-abi" -version = "1.14.5" +version = "1.14.6" description = "Solana Frozen ABI" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -20,7 +20,7 @@ serde_bytes = "0.11" serde_derive = "1.0" serde_json = "1.0" sha2 = "0.10.2" -solana-frozen-abi-macro = { path = "macro", version = "=1.14.5" } +solana-frozen-abi-macro = { path = "macro", version = "=1.14.6" } thiserror = "1.0" [target.'cfg(not(target_os = "solana"))'.dependencies] @@ -43,7 +43,7 @@ rand_core = { version = "0.6.3", features = ["alloc", "getrandom", "std"] } subtle = { version = "2.4.1", features = ["default", "i128", "std"] } [target.'cfg(not(target_os = "solana"))'.dev-dependencies] -solana-logger = { path = "../logger", version = "=1.14.5" } +solana-logger = { path = "../logger", version = "=1.14.6" } [build-dependencies] rustc_version = "0.4" diff --git a/frozen-abi/macro/Cargo.toml b/frozen-abi/macro/Cargo.toml index db3378b48caa99..7b013c48c3e7e9 100644 --- a/frozen-abi/macro/Cargo.toml +++ b/frozen-abi/macro/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-frozen-abi-macro" -version = "1.14.5" +version = "1.14.6" description = "Solana Frozen ABI Macro" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/genesis-utils/Cargo.toml b/genesis-utils/Cargo.toml index a9c420cbd2fe05..7599e627f18e41 100644 --- a/genesis-utils/Cargo.toml +++ b/genesis-utils/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-genesis-utils" -version = "1.14.5" +version = "1.14.6" description = "Solana Genesis Utils" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,9 +10,9 @@ documentation = "https://docs.rs/solana-download-utils" edition = "2021" [dependencies] -solana-download-utils = { path = "../download-utils", version = "=1.14.5" } -solana-runtime = { path = "../runtime", version = "=1.14.5" } -solana-sdk = { path = "../sdk", version = "=1.14.5" } +solana-download-utils = { path = "../download-utils", version = "=1.14.6" } +solana-runtime = { path = "../runtime", version = "=1.14.6" } +solana-sdk = { path = "../sdk", version = "=1.14.6" } [lib] crate-type = ["lib"] diff --git a/genesis/Cargo.toml b/genesis/Cargo.toml index 9a326119a066e2..c5f2bd18ebf7bc 100644 --- a/genesis/Cargo.toml +++ b/genesis/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-genesis" description = "Blockchain, Rebuilt for Scale" -version = "1.14.5" +version = "1.14.6" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -15,16 +15,16 @@ clap = "2.33.1" serde = "1.0.138" serde_json = "1.0.81" serde_yaml = "0.8.26" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.5" } -solana-cli-config = { path = "../cli-config", version = "=1.14.5" } -solana-entry = { path = "../entry", version = "=1.14.5" } -solana-ledger = { path = "../ledger", version = "=1.14.5" } -solana-logger = { path = "../logger", version = "=1.14.5" } -solana-runtime = { path = "../runtime", version = "=1.14.5" } -solana-sdk = { path = "../sdk", version = "=1.14.5" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.5" } -solana-version = { path = "../version", version = "=1.14.5" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.5" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.6" } +solana-cli-config = { path = "../cli-config", version = "=1.14.6" } +solana-entry = { path = "../entry", version = "=1.14.6" } +solana-ledger = { path = "../ledger", version = "=1.14.6" } +solana-logger = { path = "../logger", version = "=1.14.6" } +solana-runtime = { path = "../runtime", version = "=1.14.6" } +solana-sdk = { path = "../sdk", version = "=1.14.6" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.6" } +solana-version = { path = "../version", version = "=1.14.6" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.6" } tempfile = "3.3.0" [[bin]] diff --git a/geyser-plugin-interface/Cargo.toml b/geyser-plugin-interface/Cargo.toml index 1e3c0d87e12636..174703009df3ad 100644 --- a/geyser-plugin-interface/Cargo.toml +++ b/geyser-plugin-interface/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-geyser-plugin-interface" description = "The Solana Geyser plugin interface." -version = "1.14.5" +version = "1.14.6" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -11,8 +11,8 @@ documentation = "https://docs.rs/solana-geyser-plugin-interface" [dependencies] log = "0.4.17" -solana-sdk = { path = "../sdk", version = "=1.14.5" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.5" } +solana-sdk = { path = "../sdk", version = "=1.14.6" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.6" } thiserror = "1.0.31" [package.metadata.docs.rs] diff --git a/geyser-plugin-manager/Cargo.toml b/geyser-plugin-manager/Cargo.toml index 19ebc5f08235d2..41b58468a1dac4 100644 --- a/geyser-plugin-manager/Cargo.toml +++ b/geyser-plugin-manager/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-geyser-plugin-manager" description = "The Solana Geyser plugin manager." -version = "1.14.5" +version = "1.14.6" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -16,13 +16,13 @@ json5 = "0.4.1" libloading = "0.7.3" log = "0.4.17" serde_json = "1.0.81" -solana-geyser-plugin-interface = { path = "../geyser-plugin-interface", version = "=1.14.5" } -solana-measure = { path = "../measure", version = "=1.14.5" } -solana-metrics = { path = "../metrics", version = "=1.14.5" } -solana-rpc = { path = "../rpc", version = "=1.14.5" } -solana-runtime = { path = "../runtime", version = "=1.14.5" } -solana-sdk = { path = "../sdk", version = "=1.14.5" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.5" } +solana-geyser-plugin-interface = { path = "../geyser-plugin-interface", version = "=1.14.6" } +solana-measure = { path = "../measure", version = "=1.14.6" } +solana-metrics = { path = "../metrics", version = "=1.14.6" } +solana-rpc = { path = "../rpc", version = "=1.14.6" } +solana-runtime = { path = "../runtime", version = "=1.14.6" } +solana-sdk = { path = "../sdk", version = "=1.14.6" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.6" } thiserror = "1.0.31" [package.metadata.docs.rs] diff --git a/gossip/Cargo.toml b/gossip/Cargo.toml index 92b56302576cfd..a8776b8a7f0566 100644 --- a/gossip/Cargo.toml +++ b/gossip/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-gossip" description = "Blockchain, Rebuilt for Scale" -version = "1.14.5" +version = "1.14.6" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -27,24 +27,24 @@ rayon = "1.5.3" serde = "1.0.138" serde_bytes = "0.11" serde_derive = "1.0.103" -solana-bloom = { path = "../bloom", version = "=1.14.5" } -solana-clap-utils = { path = "../clap-utils", version = "=1.14.5" } -solana-client = { path = "../client", version = "=1.14.5" } -solana-entry = { path = "../entry", version = "=1.14.5" } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.5" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.5" } -solana-ledger = { path = "../ledger", version = "=1.14.5" } -solana-logger = { path = "../logger", version = "=1.14.5" } -solana-measure = { path = "../measure", version = "=1.14.5" } -solana-metrics = { path = "../metrics", version = "=1.14.5" } -solana-net-utils = { path = "../net-utils", version = "=1.14.5" } -solana-perf = { path = "../perf", version = "=1.14.5" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.5" } -solana-runtime = { path = "../runtime", version = "=1.14.5" } -solana-sdk = { path = "../sdk", version = "=1.14.5" } -solana-streamer = { path = "../streamer", version = "=1.14.5" } -solana-version = { path = "../version", version = "=1.14.5" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.5" } +solana-bloom = { path = "../bloom", version = "=1.14.6" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.6" } +solana-client = { path = "../client", version = "=1.14.6" } +solana-entry = { path = "../entry", version = "=1.14.6" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.6" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.6" } +solana-ledger = { path = "../ledger", version = "=1.14.6" } +solana-logger = { path = "../logger", version = "=1.14.6" } +solana-measure = { path = "../measure", version = "=1.14.6" } +solana-metrics = { path = "../metrics", version = "=1.14.6" } +solana-net-utils = { path = "../net-utils", version = "=1.14.6" } +solana-perf = { path = "../perf", version = "=1.14.6" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.6" } +solana-runtime = { path = "../runtime", version = "=1.14.6" } +solana-sdk = { path = "../sdk", version = "=1.14.6" } +solana-streamer = { path = "../streamer", version = "=1.14.6" } +solana-version = { path = "../version", version = "=1.14.6" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.6" } thiserror = "1.0" [dev-dependencies] diff --git a/install/Cargo.toml b/install/Cargo.toml index 5370f72b4968d4..71e1d3bacb6a26 100644 --- a/install/Cargo.toml +++ b/install/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-install" description = "The solana cluster software installer" -version = "1.14.5" +version = "1.14.6" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -26,12 +26,12 @@ reqwest = { version = "0.11.11", default-features = false, features = ["blocking semver = "1.0.10" serde = { version = "1.0.138", features = ["derive"] } serde_yaml = "0.8.26" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.5" } -solana-client = { path = "../client", version = "=1.14.5" } -solana-config-program = { path = "../programs/config", version = "=1.14.5" } -solana-logger = { path = "../logger", version = "=1.14.5" } -solana-sdk = { path = "../sdk", version = "=1.14.5" } -solana-version = { path = "../version", version = "=1.14.5" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.6" } +solana-client = { path = "../client", version = "=1.14.6" } +solana-config-program = { path = "../programs/config", version = "=1.14.6" } +solana-logger = { path = "../logger", version = "=1.14.6" } +solana-sdk = { path = "../sdk", version = "=1.14.6" } +solana-version = { path = "../version", version = "=1.14.6" } tar = "0.4.38" tempfile = "3.3.0" url = "2.2.2" diff --git a/keygen/Cargo.toml b/keygen/Cargo.toml index 07cf0b56b28f91..5fc64cb082c368 100644 --- a/keygen/Cargo.toml +++ b/keygen/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-keygen" -version = "1.14.5" +version = "1.14.6" description = "Solana key generation utility" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,11 +14,11 @@ bs58 = "0.4.0" clap = { version = "3.1.5", features = ["cargo"] } dirs-next = "2.0.0" num_cpus = "1.13.1" -solana-clap-v3-utils = { path = "../clap-v3-utils", version = "=1.14.5" } -solana-cli-config = { path = "../cli-config", version = "=1.14.5" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.5" } -solana-sdk = { path = "../sdk", version = "=1.14.5" } -solana-version = { path = "../version", version = "=1.14.5" } +solana-clap-v3-utils = { path = "../clap-v3-utils", version = "=1.14.6" } +solana-cli-config = { path = "../cli-config", version = "=1.14.6" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.6" } +solana-sdk = { path = "../sdk", version = "=1.14.6" } +solana-version = { path = "../version", version = "=1.14.6" } tiny-bip39 = "0.8.2" [[bin]] diff --git a/ledger-tool/Cargo.toml b/ledger-tool/Cargo.toml index fff48a86afa374..ef078b941b7be8 100644 --- a/ledger-tool/Cargo.toml +++ b/ledger-tool/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-ledger-tool" description = "Blockchain, Rebuilt for Scale" -version = "1.14.5" +version = "1.14.6" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -22,20 +22,20 @@ log = { version = "0.4.17" } regex = "1" serde = { version = "1.0", features = ["derive"] } serde_json = "1.0.81" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.5" } -solana-cli-output = { path = "../cli-output", version = "=1.14.5" } -solana-core = { path = "../core", version = "=1.14.5" } -solana-entry = { path = "../entry", version = "=1.14.5" } -solana-ledger = { path = "../ledger", version = "=1.14.5" } -solana-logger = { path = "../logger", version = "=1.14.5" } -solana-measure = { path = "../measure", version = "=1.14.5" } -solana-runtime = { path = "../runtime", version = "=1.14.5" } -solana-sdk = { path = "../sdk", version = "=1.14.5" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.5" } -solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.5" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.5" } -solana-version = { path = "../version", version = "=1.14.5" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.5" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.6" } +solana-cli-output = { path = "../cli-output", version = "=1.14.6" } +solana-core = { path = "../core", version = "=1.14.6" } +solana-entry = { path = "../entry", version = "=1.14.6" } +solana-ledger = { path = "../ledger", version = "=1.14.6" } +solana-logger = { path = "../logger", version = "=1.14.6" } +solana-measure = { path = "../measure", version = "=1.14.6" } +solana-runtime = { path = "../runtime", version = "=1.14.6" } +solana-sdk = { path = "../sdk", version = "=1.14.6" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.6" } +solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.6" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.6" } +solana-version = { path = "../version", version = "=1.14.6" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.6" } tokio = { version = "1", features = ["full"] } [target.'cfg(not(target_env = "msvc"))'.dependencies] diff --git a/ledger/Cargo.toml b/ledger/Cargo.toml index 11576a102ff603..92010ac8e5dfdf 100644 --- a/ledger/Cargo.toml +++ b/ledger/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-ledger" -version = "1.14.5" +version = "1.14.6" description = "Solana ledger" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -35,23 +35,23 @@ reed-solomon-erasure = { version = "6.0.0", features = ["simd-accel"] } serde = "1.0.138" serde_bytes = "0.11.6" sha2 = "0.10.2" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.5" } -solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.5" } -solana-entry = { path = "../entry", version = "=1.14.5" } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.5" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.5" } -solana-measure = { path = "../measure", version = "=1.14.5" } -solana-metrics = { path = "../metrics", version = "=1.14.5" } -solana-perf = { path = "../perf", version = "=1.14.5" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.5" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.5" } -solana-runtime = { path = "../runtime", version = "=1.14.5" } -solana-sdk = { path = "../sdk", version = "=1.14.5" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.5" } -solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.5" } -solana-storage-proto = { path = "../storage-proto", version = "=1.14.5" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.5" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.5" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.6" } +solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.6" } +solana-entry = { path = "../entry", version = "=1.14.6" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.6" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.6" } +solana-measure = { path = "../measure", version = "=1.14.6" } +solana-metrics = { path = "../metrics", version = "=1.14.6" } +solana-perf = { path = "../perf", version = "=1.14.6" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.6" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.6" } +solana-runtime = { path = "../runtime", version = "=1.14.6" } +solana-sdk = { path = "../sdk", version = "=1.14.6" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.6" } +solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.6" } +solana-storage-proto = { path = "../storage-proto", version = "=1.14.6" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.6" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.6" } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } spl-token-2022 = { version = "=0.4.2", features = ["no-entrypoint"] } static_assertions = "1.1.0" @@ -71,8 +71,8 @@ features = ["lz4"] [dev-dependencies] bs58 = "0.4.0" matches = "0.1.9" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.5" } -solana-logger = { path = "../logger", version = "=1.14.5" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.6" } +solana-logger = { path = "../logger", version = "=1.14.6" } test-case = "2.1.0" [build-dependencies] diff --git a/local-cluster/Cargo.toml b/local-cluster/Cargo.toml index 57961130aaaf48..b860052367fad5 100644 --- a/local-cluster/Cargo.toml +++ b/local-cluster/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-local-cluster" description = "Blockchain, Rebuilt for Scale" -version = "1.14.5" +version = "1.14.6" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -16,25 +16,25 @@ itertools = "0.10.3" log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" -solana-client = { path = "../client", version = "=1.14.5" } -solana-config-program = { path = "../programs/config", version = "=1.14.5" } -solana-core = { path = "../core", version = "=1.14.5" } -solana-entry = { path = "../entry", version = "=1.14.5" } -solana-gossip = { path = "../gossip", version = "=1.14.5" } -solana-ledger = { path = "../ledger", version = "=1.14.5" } -solana-runtime = { path = "../runtime", version = "=1.14.5" } -solana-sdk = { path = "../sdk", version = "=1.14.5" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.5" } -solana-streamer = { path = "../streamer", version = "=1.14.5" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.5" } +solana-client = { path = "../client", version = "=1.14.6" } +solana-config-program = { path = "../programs/config", version = "=1.14.6" } +solana-core = { path = "../core", version = "=1.14.6" } +solana-entry = { path = "../entry", version = "=1.14.6" } +solana-gossip = { path = "../gossip", version = "=1.14.6" } +solana-ledger = { path = "../ledger", version = "=1.14.6" } +solana-runtime = { path = "../runtime", version = "=1.14.6" } +solana-sdk = { path = "../sdk", version = "=1.14.6" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.6" } +solana-streamer = { path = "../streamer", version = "=1.14.6" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.6" } tempfile = "3.3.0" [dev-dependencies] assert_matches = "1.5.0" gag = "1.0.0" serial_test = "0.8.0" -solana-download-utils = { path = "../download-utils", version = "=1.14.5" } -solana-logger = { path = "../logger", version = "=1.14.5" } +solana-download-utils = { path = "../download-utils", version = "=1.14.6" } +solana-logger = { path = "../logger", version = "=1.14.6" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/log-analyzer/Cargo.toml b/log-analyzer/Cargo.toml index 1a2547b6d7c8c4..b46b5f569bbc05 100644 --- a/log-analyzer/Cargo.toml +++ b/log-analyzer/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-log-analyzer" description = "The solana cluster network analysis tool" -version = "1.14.5" +version = "1.14.6" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,8 +14,8 @@ byte-unit = "4.0.14" clap = { version = "3.1.5", features = ["cargo"] } serde = "1.0.138" serde_json = "1.0.81" -solana-logger = { path = "../logger", version = "=1.14.5" } -solana-version = { path = "../version", version = "=1.14.5" } +solana-logger = { path = "../logger", version = "=1.14.6" } +solana-version = { path = "../version", version = "=1.14.6" } [[bin]] name = "solana-log-analyzer" diff --git a/logger/Cargo.toml b/logger/Cargo.toml index 5f9602d3afe429..6849a3cababa89 100644 --- a/logger/Cargo.toml +++ b/logger/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-logger" -version = "1.14.5" +version = "1.14.6" description = "Solana Logger" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/measure/Cargo.toml b/measure/Cargo.toml index 4c37c587bcc474..3b835e904dba0f 100644 --- a/measure/Cargo.toml +++ b/measure/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "solana-measure" description = "Blockchain, Rebuilt for Scale" -version = "1.14.5" +version = "1.14.6" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-measure" readme = "../README.md" @@ -12,7 +12,7 @@ edition = "2021" [dependencies] log = "0.4.17" -solana-sdk = { path = "../sdk", version = "=1.14.5" } +solana-sdk = { path = "../sdk", version = "=1.14.6" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/merkle-root-bench/Cargo.toml b/merkle-root-bench/Cargo.toml index 17be50b09fd980..669f9e4c36e499 100644 --- a/merkle-root-bench/Cargo.toml +++ b/merkle-root-bench/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-merkle-root-bench" -version = "1.14.5" +version = "1.14.6" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -11,11 +11,11 @@ publish = false [dependencies] clap = "2.33.1" log = "0.4.17" -solana-logger = { path = "../logger", version = "=1.14.5" } -solana-measure = { path = "../measure", version = "=1.14.5" } -solana-runtime = { path = "../runtime", version = "=1.14.5" } -solana-sdk = { path = "../sdk", version = "=1.14.5" } -solana-version = { path = "../version", version = "=1.14.5" } +solana-logger = { path = "../logger", version = "=1.14.6" } +solana-measure = { path = "../measure", version = "=1.14.6" } +solana-runtime = { path = "../runtime", version = "=1.14.6" } +solana-sdk = { path = "../sdk", version = "=1.14.6" } +solana-version = { path = "../version", version = "=1.14.6" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/merkle-tree/Cargo.toml b/merkle-tree/Cargo.toml index ea66fa28c845b1..e91dfbcf32efe8 100644 --- a/merkle-tree/Cargo.toml +++ b/merkle-tree/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-merkle-tree" -version = "1.14.5" +version = "1.14.6" description = "Solana Merkle Tree" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -11,7 +11,7 @@ edition = "2021" [dependencies] fast-math = "0.1" -solana-program = { path = "../sdk/program", version = "=1.14.5" } +solana-program = { path = "../sdk/program", version = "=1.14.6" } # This can go once the BPF toolchain target Rust 1.42.0+ [target.bpfel-unknown-unknown.dependencies] diff --git a/metrics/Cargo.toml b/metrics/Cargo.toml index 484f1f100ebd4e..af0d33eec5ceaa 100644 --- a/metrics/Cargo.toml +++ b/metrics/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-metrics" -version = "1.14.5" +version = "1.14.6" description = "Solana Metrics" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -15,7 +15,7 @@ gethostname = "0.2.3" lazy_static = "1.4.0" log = "0.4.17" reqwest = { version = "0.11.11", default-features = false, features = ["blocking", "brotli", "deflate", "gzip", "rustls-tls", "json"] } -solana-sdk = { path = "../sdk", version = "=1.14.5" } +solana-sdk = { path = "../sdk", version = "=1.14.6" } [dev-dependencies] env_logger = "0.9.0" diff --git a/net-shaper/Cargo.toml b/net-shaper/Cargo.toml index 1a908cbe177d8b..c406413039442d 100644 --- a/net-shaper/Cargo.toml +++ b/net-shaper/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-net-shaper" description = "The solana cluster network shaping tool" -version = "1.14.5" +version = "1.14.6" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,7 +14,7 @@ clap = { version = "3.1.5", features = ["cargo"] } rand = "0.7.0" serde = { version = "1.0.138", features = ["derive"] } serde_json = "1.0.81" -solana-logger = { path = "../logger", version = "=1.14.5" } +solana-logger = { path = "../logger", version = "=1.14.6" } [[bin]] name = "solana-net-shaper" diff --git a/net-utils/Cargo.toml b/net-utils/Cargo.toml index d71aca2adcfd3b..72a1f4c29de3fc 100644 --- a/net-utils/Cargo.toml +++ b/net-utils/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-net-utils" -version = "1.14.5" +version = "1.14.6" description = "Solana Network Utilities" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -19,9 +19,9 @@ rand = "0.7.0" serde = "1.0.138" serde_derive = "1.0.103" socket2 = "0.4.4" -solana-logger = { path = "../logger", version = "=1.14.5" } -solana-sdk = { path = "../sdk", version = "=1.14.5" } -solana-version = { path = "../version", version = "=1.14.5" } +solana-logger = { path = "../logger", version = "=1.14.6" } +solana-sdk = { path = "../sdk", version = "=1.14.6" } +solana-version = { path = "../version", version = "=1.14.6" } tokio = { version = "1", features = ["full"] } url = "2.2.2" diff --git a/notifier/Cargo.toml b/notifier/Cargo.toml index 1c63ec8c31caa8..7e3eb2b960f8b7 100644 --- a/notifier/Cargo.toml +++ b/notifier/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-notifier" -version = "1.14.5" +version = "1.14.6" description = "Solana Notifier" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/perf/Cargo.toml b/perf/Cargo.toml index e462069ea2abd8..0d94b40732d14b 100644 --- a/perf/Cargo.toml +++ b/perf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-perf" -version = "1.14.5" +version = "1.14.6" description = "Solana Performance APIs" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -22,10 +22,10 @@ log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" serde = "1.0.138" -solana-metrics = { path = "../metrics", version = "=1.14.5" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.5" } -solana-sdk = { path = "../sdk", version = "=1.14.5" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.5" } +solana-metrics = { path = "../metrics", version = "=1.14.6" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.6" } +solana-sdk = { path = "../sdk", version = "=1.14.6" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.6" } [target."cfg(target_os = \"linux\")".dependencies] caps = "0.5.3" @@ -37,7 +37,7 @@ name = "solana_perf" [dev-dependencies] matches = "0.1.9" -solana-logger = { path = "../logger", version = "=1.14.5" } +solana-logger = { path = "../logger", version = "=1.14.6" } [[bench]] name = "sigverify" diff --git a/poh-bench/Cargo.toml b/poh-bench/Cargo.toml index 811b9858f75917..f027125bcca54d 100644 --- a/poh-bench/Cargo.toml +++ b/poh-bench/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-poh-bench" -version = "1.14.5" +version = "1.14.6" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,12 +14,12 @@ clap = { version = "3.1.5", features = ["cargo"] } log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" -solana-entry = { path = "../entry", version = "=1.14.5" } -solana-logger = { path = "../logger", version = "=1.14.5" } -solana-measure = { path = "../measure", version = "=1.14.5" } -solana-perf = { path = "../perf", version = "=1.14.5" } -solana-sdk = { path = "../sdk", version = "=1.14.5" } -solana-version = { path = "../version", version = "=1.14.5" } +solana-entry = { path = "../entry", version = "=1.14.6" } +solana-logger = { path = "../logger", version = "=1.14.6" } +solana-measure = { path = "../measure", version = "=1.14.6" } +solana-perf = { path = "../perf", version = "=1.14.6" } +solana-sdk = { path = "../sdk", version = "=1.14.6" } +solana-version = { path = "../version", version = "=1.14.6" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/poh/Cargo.toml b/poh/Cargo.toml index d6fe30df881c5d..a99d5a8a5dbc7f 100644 --- a/poh/Cargo.toml +++ b/poh/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-poh" -version = "1.14.5" +version = "1.14.6" description = "Solana PoH" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,21 +13,21 @@ edition = "2021" core_affinity = "0.5.10" crossbeam-channel = "0.5" log = "0.4.17" -solana-entry = { path = "../entry", version = "=1.14.5" } -solana-ledger = { path = "../ledger", version = "=1.14.5" } -solana-measure = { path = "../measure", version = "=1.14.5" } -solana-metrics = { path = "../metrics", version = "=1.14.5" } -solana-runtime = { path = "../runtime", version = "=1.14.5" } -solana-sdk = { path = "../sdk", version = "=1.14.5" } -solana-sys-tuner = { path = "../sys-tuner", version = "=1.14.5" } +solana-entry = { path = "../entry", version = "=1.14.6" } +solana-ledger = { path = "../ledger", version = "=1.14.6" } +solana-measure = { path = "../measure", version = "=1.14.6" } +solana-metrics = { path = "../metrics", version = "=1.14.6" } +solana-runtime = { path = "../runtime", version = "=1.14.6" } +solana-sdk = { path = "../sdk", version = "=1.14.6" } +solana-sys-tuner = { path = "../sys-tuner", version = "=1.14.6" } thiserror = "1.0" [dev-dependencies] bincode = "1.3.3" matches = "0.1.9" rand = "0.7.0" -solana-logger = { path = "../logger", version = "=1.14.5" } -solana-perf = { path = "../perf", version = "=1.14.5" } +solana-logger = { path = "../logger", version = "=1.14.6" } +solana-perf = { path = "../perf", version = "=1.14.6" } [lib] crate-type = ["lib"] diff --git a/program-runtime/Cargo.toml b/program-runtime/Cargo.toml index 52a3c058d19938..48149183c2b183 100644 --- a/program-runtime/Cargo.toml +++ b/program-runtime/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-program-runtime" -version = "1.14.5" +version = "1.14.6" description = "Solana program runtime" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -20,16 +20,16 @@ log = "0.4.14" num-derive = { version = "0.3" } num-traits = { version = "0.2" } serde = { version = "1.0.129", features = ["derive", "rc"] } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.5" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.5" } -solana-measure = { path = "../measure", version = "=1.14.5" } -solana-metrics = { path = "../metrics", version = "=1.14.5" } -solana-sdk = { path = "../sdk", version = "=1.14.5" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.6" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.6" } +solana-measure = { path = "../measure", version = "=1.14.6" } +solana-metrics = { path = "../metrics", version = "=1.14.6" } +solana-sdk = { path = "../sdk", version = "=1.14.6" } thiserror = "1.0" enum-iterator = "0.8.1" [dev-dependencies] -solana-logger = { path = "../logger", version = "=1.14.5" } +solana-logger = { path = "../logger", version = "=1.14.6" } [lib] crate-type = ["lib"] diff --git a/program-test/Cargo.toml b/program-test/Cargo.toml index 0cb961b7ff2a9e..37af926467729f 100644 --- a/program-test/Cargo.toml +++ b/program-test/Cargo.toml @@ -5,7 +5,7 @@ edition = "2021" license = "Apache-2.0" name = "solana-program-test" repository = "https://github.com/solana-labs/solana" -version = "1.14.5" +version = "1.14.6" [dependencies] assert_matches = "1.5.0" @@ -15,13 +15,13 @@ bincode = "1.3.3" chrono-humanize = "0.2.1" log = "0.4.17" serde = "1.0.138" -solana-banks-client = { path = "../banks-client", version = "=1.14.5" } -solana-banks-server = { path = "../banks-server", version = "=1.14.5" } -solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.5" } -solana-logger = { path = "../logger", version = "=1.14.5" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.5" } -solana-runtime = { path = "../runtime", version = "=1.14.5" } -solana-sdk = { path = "../sdk", version = "=1.14.5" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.5" } +solana-banks-client = { path = "../banks-client", version = "=1.14.6" } +solana-banks-server = { path = "../banks-server", version = "=1.14.6" } +solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.6" } +solana-logger = { path = "../logger", version = "=1.14.6" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.6" } +solana-runtime = { path = "../runtime", version = "=1.14.6" } +solana-sdk = { path = "../sdk", version = "=1.14.6" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.6" } thiserror = "1.0" tokio = { version = "1", features = ["full"] } diff --git a/programs/address-lookup-table-tests/Cargo.toml b/programs/address-lookup-table-tests/Cargo.toml index 62ffe7c821a59c..f89310be3f68b2 100644 --- a/programs/address-lookup-table-tests/Cargo.toml +++ b/programs/address-lookup-table-tests/Cargo.toml @@ -3,7 +3,7 @@ [package] name = "solana-address-lookup-table-program-tests" -version = "1.14.5" +version = "1.14.6" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" @@ -14,9 +14,9 @@ publish = false [dev-dependencies] assert_matches = "1.5.0" bincode = "1.3.3" -solana-address-lookup-table-program = { path = "../address-lookup-table", version = "=1.14.5" } -solana-program-test = { path = "../../program-test", version = "=1.14.5" } -solana-sdk = { path = "../../sdk", version = "=1.14.5" } +solana-address-lookup-table-program = { path = "../address-lookup-table", version = "=1.14.6" } +solana-program-test = { path = "../../program-test", version = "=1.14.6" } +solana-sdk = { path = "../../sdk", version = "=1.14.6" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/address-lookup-table/Cargo.toml b/programs/address-lookup-table/Cargo.toml index 558d08726f2053..b3f3cef5ac3e33 100644 --- a/programs/address-lookup-table/Cargo.toml +++ b/programs/address-lookup-table/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-address-lookup-table-program" -version = "1.14.5" +version = "1.14.6" description = "Solana address lookup table program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -16,14 +16,14 @@ log = "0.4.17" num-derive = "0.3" num-traits = "0.2" serde = { version = "1.0.138", features = ["derive"] } -solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.5" } -solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.5" } -solana-program = { path = "../../sdk/program", version = "=1.14.5" } +solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.6" } +solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.6" } +solana-program = { path = "../../sdk/program", version = "=1.14.6" } thiserror = "1.0" [target.'cfg(not(target_os = "solana"))'.dependencies] -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.5" } -solana-sdk = { path = "../../sdk", version = "=1.14.5" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.6" } +solana-sdk = { path = "../../sdk", version = "=1.14.6" } [build-dependencies] rustc_version = "0.4" diff --git a/programs/bpf-loader-tests/Cargo.toml b/programs/bpf-loader-tests/Cargo.toml index 4097008d60d342..b22d51472c4a5a 100644 --- a/programs/bpf-loader-tests/Cargo.toml +++ b/programs/bpf-loader-tests/Cargo.toml @@ -3,7 +3,7 @@ [package] name = "solana-bpf-loader-program-tests" -version = "1.14.5" +version = "1.14.6" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" @@ -14,9 +14,9 @@ publish = false [dev-dependencies] assert_matches = "1.5.0" bincode = "1.3.3" -solana-bpf-loader-program = { path = "../bpf_loader", version = "=1.14.5" } -solana-program-test = { path = "../../program-test", version = "=1.14.5" } -solana-sdk = { path = "../../sdk", version = "=1.14.5" } +solana-bpf-loader-program = { path = "../bpf_loader", version = "=1.14.6" } +solana-program-test = { path = "../../program-test", version = "=1.14.6" } +solana-sdk = { path = "../../sdk", version = "=1.14.6" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/bpf/Cargo.lock b/programs/bpf/Cargo.lock index bba2e222421f53..5f937eab7ee172 100644 --- a/programs/bpf/Cargo.lock +++ b/programs/bpf/Cargo.lock @@ -4063,7 +4063,7 @@ dependencies = [ [[package]] name = "solana-account-decoder" -version = "1.14.5" +version = "1.14.6" dependencies = [ "Inflector", "base64 0.13.0", @@ -4076,7 +4076,7 @@ dependencies = [ "serde_json", "solana-address-lookup-table-program", "solana-config-program", - "solana-sdk 1.14.5", + "solana-sdk 1.14.6", "solana-vote-program", "spl-token", "spl-token-2022", @@ -4086,7 +4086,7 @@ dependencies = [ [[package]] name = "solana-address-lookup-table-program" -version = "1.14.5" +version = "1.14.6" dependencies = [ "bincode", "bytemuck", @@ -4095,23 +4095,23 @@ dependencies = [ "num-traits", "rustc_version", "serde", - "solana-frozen-abi 1.14.5", - "solana-frozen-abi-macro 1.14.5", - "solana-program 1.14.5", + "solana-frozen-abi 1.14.6", + "solana-frozen-abi-macro 1.14.6", + "solana-program 1.14.6", "solana-program-runtime", - "solana-sdk 1.14.5", + "solana-sdk 1.14.6", "thiserror", ] [[package]] name = "solana-banks-client" -version = "1.14.5" +version = "1.14.6" dependencies = [ "borsh", "futures 0.3.21", "solana-banks-interface", - "solana-program 1.14.5", - "solana-sdk 1.14.5", + "solana-program 1.14.6", + "solana-sdk 1.14.6", "tarpc", "thiserror", "tokio", @@ -4120,16 +4120,16 @@ dependencies = [ [[package]] name = "solana-banks-interface" -version = "1.14.5" +version = "1.14.6" dependencies = [ "serde", - "solana-sdk 1.14.5", + "solana-sdk 1.14.6", "tarpc", ] [[package]] name = "solana-banks-server" -version = "1.14.5" +version = "1.14.6" dependencies = [ "bincode", "crossbeam-channel", @@ -4137,7 +4137,7 @@ dependencies = [ "solana-banks-interface", "solana-client", "solana-runtime", - "solana-sdk 1.14.5", + "solana-sdk 1.14.6", "solana-send-transaction-service", "tarpc", "tokio", @@ -4147,7 +4147,7 @@ dependencies = [ [[package]] name = "solana-bloom" -version = "1.14.5" +version = "1.14.6" dependencies = [ "bv", "fnv", @@ -4157,14 +4157,14 @@ dependencies = [ "rustc_version", "serde", "serde_derive", - "solana-frozen-abi 1.14.5", - "solana-frozen-abi-macro 1.14.5", - "solana-sdk 1.14.5", + "solana-frozen-abi 1.14.6", + "solana-frozen-abi-macro 1.14.6", + "solana-sdk 1.14.6", ] [[package]] name = "solana-bpf-loader-program" -version = "1.14.5" +version = "1.14.6" dependencies = [ "bincode", "byteorder 1.4.3", @@ -4173,15 +4173,15 @@ dependencies = [ "solana-measure", "solana-metrics", "solana-program-runtime", - "solana-sdk 1.14.5", - "solana-zk-token-sdk 1.14.5", + "solana-sdk 1.14.6", + "solana-zk-token-sdk 1.14.6", "solana_rbpf", "thiserror", ] [[package]] name = "solana-bpf-programs" -version = "1.14.5" +version = "1.14.6" dependencies = [ "bincode", "byteorder 1.4.3", @@ -4197,11 +4197,11 @@ dependencies = [ "solana-bpf-rust-realloc-invoke", "solana-cli-output", "solana-ledger", - "solana-logger 1.14.5", + "solana-logger 1.14.6", "solana-measure", "solana-program-runtime", "solana-runtime", - "solana-sdk 1.14.5", + "solana-sdk 1.14.6", "solana-transaction-status", "solana_rbpf", "walkdir", @@ -4209,385 +4209,385 @@ dependencies = [ [[package]] name = "solana-bpf-rust-128bit" -version = "1.14.5" +version = "1.14.6" dependencies = [ "solana-bpf-rust-128bit-dep", - "solana-program 1.14.5", + "solana-program 1.14.6", ] [[package]] name = "solana-bpf-rust-128bit-dep" -version = "1.14.5" +version = "1.14.6" dependencies = [ - "solana-program 1.14.5", + "solana-program 1.14.6", ] [[package]] name = "solana-bpf-rust-alloc" -version = "1.14.5" +version = "1.14.6" dependencies = [ - "solana-program 1.14.5", + "solana-program 1.14.6", ] [[package]] name = "solana-bpf-rust-call-depth" -version = "1.14.5" +version = "1.14.6" dependencies = [ - "solana-program 1.14.5", + "solana-program 1.14.6", ] [[package]] name = "solana-bpf-rust-caller-access" -version = "1.14.5" +version = "1.14.6" dependencies = [ - "solana-program 1.14.5", + "solana-program 1.14.6", ] [[package]] name = "solana-bpf-rust-curve25519" -version = "1.14.5" +version = "1.14.6" dependencies = [ - "solana-program 1.14.5", - "solana-zk-token-sdk 1.14.5", + "solana-program 1.14.6", + "solana-zk-token-sdk 1.14.6", ] [[package]] name = "solana-bpf-rust-custom-heap" -version = "1.14.5" +version = "1.14.6" dependencies = [ - "solana-program 1.14.5", + "solana-program 1.14.6", ] [[package]] name = "solana-bpf-rust-dep-crate" -version = "1.14.5" +version = "1.14.6" dependencies = [ "byteorder 1.4.3", "solana-address-lookup-table-program", - "solana-program 1.14.5", + "solana-program 1.14.6", ] [[package]] name = "solana-bpf-rust-deprecated-loader" -version = "1.14.5" +version = "1.14.6" dependencies = [ - "solana-program 1.14.5", + "solana-program 1.14.6", ] [[package]] name = "solana-bpf-rust-dup-accounts" -version = "1.14.5" +version = "1.14.6" dependencies = [ - "solana-program 1.14.5", + "solana-program 1.14.6", ] [[package]] name = "solana-bpf-rust-error-handling" -version = "1.14.5" +version = "1.14.6" dependencies = [ "num-derive", "num-traits", - "solana-program 1.14.5", + "solana-program 1.14.6", "thiserror", ] [[package]] name = "solana-bpf-rust-external-spend" -version = "1.14.5" +version = "1.14.6" dependencies = [ - "solana-program 1.14.5", + "solana-program 1.14.6", ] [[package]] name = "solana-bpf-rust-finalize" -version = "1.14.5" +version = "1.14.6" dependencies = [ - "solana-program 1.14.5", + "solana-program 1.14.6", ] [[package]] name = "solana-bpf-rust-get-minimum-delegation" -version = "1.14.5" +version = "1.14.6" dependencies = [ - "solana-program 1.14.5", + "solana-program 1.14.6", ] [[package]] name = "solana-bpf-rust-inner_instruction_alignment_check" -version = "1.14.5" +version = "1.14.6" dependencies = [ - "solana-program 1.14.5", + "solana-program 1.14.6", ] [[package]] name = "solana-bpf-rust-instruction-introspection" -version = "1.14.5" +version = "1.14.6" dependencies = [ - "solana-program 1.14.5", + "solana-program 1.14.6", ] [[package]] name = "solana-bpf-rust-invoke" -version = "1.14.5" +version = "1.14.6" dependencies = [ "solana-bpf-rust-invoked", - "solana-program 1.14.5", + "solana-program 1.14.6", ] [[package]] name = "solana-bpf-rust-invoke-and-error" -version = "1.14.5" +version = "1.14.6" dependencies = [ - "solana-program 1.14.5", + "solana-program 1.14.6", ] [[package]] name = "solana-bpf-rust-invoke-and-ok" -version = "1.14.5" +version = "1.14.6" dependencies = [ - "solana-program 1.14.5", + "solana-program 1.14.6", ] [[package]] name = "solana-bpf-rust-invoke-and-return" -version = "1.14.5" +version = "1.14.6" dependencies = [ - "solana-program 1.14.5", + "solana-program 1.14.6", ] [[package]] name = "solana-bpf-rust-invoked" -version = "1.14.5" +version = "1.14.6" dependencies = [ - "solana-program 1.14.5", + "solana-program 1.14.6", ] [[package]] name = "solana-bpf-rust-iter" -version = "1.14.5" +version = "1.14.6" dependencies = [ - "solana-program 1.14.5", + "solana-program 1.14.6", ] [[package]] name = "solana-bpf-rust-log-data" -version = "1.14.5" +version = "1.14.6" dependencies = [ - "solana-program 1.14.5", + "solana-program 1.14.6", ] [[package]] name = "solana-bpf-rust-many-args" -version = "1.14.5" +version = "1.14.6" dependencies = [ "solana-bpf-rust-many-args-dep", - "solana-program 1.14.5", + "solana-program 1.14.6", ] [[package]] name = "solana-bpf-rust-many-args-dep" -version = "1.14.5" +version = "1.14.6" dependencies = [ - "solana-program 1.14.5", + "solana-program 1.14.6", ] [[package]] name = "solana-bpf-rust-mem" -version = "1.14.5" +version = "1.14.6" dependencies = [ - "solana-program 1.14.5", + "solana-program 1.14.6", "solana-program-runtime", "solana-program-test", - "solana-sdk 1.14.5", + "solana-sdk 1.14.6", ] [[package]] name = "solana-bpf-rust-membuiltins" -version = "1.14.5" +version = "1.14.6" dependencies = [ "solana-bpf-rust-mem", - "solana-program 1.14.5", + "solana-program 1.14.6", ] [[package]] name = "solana-bpf-rust-noop" -version = "1.14.5" +version = "1.14.6" dependencies = [ - "solana-program 1.14.5", + "solana-program 1.14.6", ] [[package]] name = "solana-bpf-rust-panic" -version = "1.14.5" +version = "1.14.6" dependencies = [ - "solana-program 1.14.5", + "solana-program 1.14.6", ] [[package]] name = "solana-bpf-rust-param-passing" -version = "1.14.5" +version = "1.14.6" dependencies = [ "solana-bpf-rust-param-passing-dep", - "solana-program 1.14.5", + "solana-program 1.14.6", ] [[package]] name = "solana-bpf-rust-param-passing-dep" -version = "1.14.5" +version = "1.14.6" dependencies = [ - "solana-program 1.14.5", + "solana-program 1.14.6", ] [[package]] name = "solana-bpf-rust-rand" -version = "1.14.5" +version = "1.14.6" dependencies = [ "getrandom 0.1.14", "rand 0.7.3", - "solana-program 1.14.5", + "solana-program 1.14.6", ] [[package]] name = "solana-bpf-rust-realloc" -version = "1.14.5" +version = "1.14.6" dependencies = [ - "solana-program 1.14.5", + "solana-program 1.14.6", ] [[package]] name = "solana-bpf-rust-realloc-invoke" -version = "1.14.5" +version = "1.14.6" dependencies = [ "solana-bpf-rust-realloc", - "solana-program 1.14.5", + "solana-program 1.14.6", ] [[package]] name = "solana-bpf-rust-ro-account_modify" -version = "1.14.5" +version = "1.14.6" dependencies = [ - "solana-program 1.14.5", + "solana-program 1.14.6", ] [[package]] name = "solana-bpf-rust-ro-modify" -version = "1.14.5" +version = "1.14.6" dependencies = [ - "solana-program 1.14.5", + "solana-program 1.14.6", ] [[package]] name = "solana-bpf-rust-sanity" -version = "1.14.5" +version = "1.14.6" dependencies = [ - "solana-program 1.14.5", + "solana-program 1.14.6", "solana-program-runtime", "solana-program-test", - "solana-sdk 1.14.5", + "solana-sdk 1.14.6", ] [[package]] name = "solana-bpf-rust-secp256k1-recover" -version = "1.14.5" +version = "1.14.6" dependencies = [ "libsecp256k1 0.7.0", - "solana-program 1.14.5", + "solana-program 1.14.6", ] [[package]] name = "solana-bpf-rust-sha" -version = "1.14.5" +version = "1.14.6" dependencies = [ "blake3", - "solana-program 1.14.5", + "solana-program 1.14.6", ] [[package]] name = "solana-bpf-rust-sibling-instructions" -version = "1.14.5" +version = "1.14.6" dependencies = [ - "solana-program 1.14.5", + "solana-program 1.14.6", ] [[package]] name = "solana-bpf-rust-sibling_inner-instructions" -version = "1.14.5" +version = "1.14.6" dependencies = [ - "solana-program 1.14.5", + "solana-program 1.14.6", ] [[package]] name = "solana-bpf-rust-simulation" -version = "1.14.5" +version = "1.14.6" dependencies = [ - "solana-logger 1.14.5", - "solana-program 1.14.5", + "solana-logger 1.14.6", + "solana-program 1.14.6", "solana-program-test", - "solana-sdk 1.14.5", + "solana-sdk 1.14.6", "solana-validator", ] [[package]] name = "solana-bpf-rust-spoof1" -version = "1.14.5" +version = "1.14.6" dependencies = [ - "solana-program 1.14.5", + "solana-program 1.14.6", ] [[package]] name = "solana-bpf-rust-spoof1-system" -version = "1.14.5" +version = "1.14.6" dependencies = [ - "solana-program 1.14.5", + "solana-program 1.14.6", ] [[package]] name = "solana-bpf-rust-sysvar" -version = "1.14.5" +version = "1.14.6" dependencies = [ - "solana-program 1.14.5", + "solana-program 1.14.6", "solana-program-runtime", "solana-program-test", - "solana-sdk 1.14.5", + "solana-sdk 1.14.6", ] [[package]] name = "solana-bpf-rust-upgradeable" -version = "1.14.5" +version = "1.14.6" dependencies = [ - "solana-program 1.14.5", + "solana-program 1.14.6", ] [[package]] name = "solana-bpf-rust-upgraded" -version = "1.14.5" +version = "1.14.6" dependencies = [ - "solana-program 1.14.5", + "solana-program 1.14.6", ] [[package]] name = "solana-bucket-map" -version = "1.14.5" +version = "1.14.6" dependencies = [ "log", "memmap2", "modular-bitfield", "rand 0.7.3", "solana-measure", - "solana-sdk 1.14.5", + "solana-sdk 1.14.6", "tempfile", ] [[package]] name = "solana-clap-utils" -version = "1.14.5" +version = "1.14.6" dependencies = [ "chrono", "clap 2.33.3", "rpassword", "solana-perf", "solana-remote-wallet", - "solana-sdk 1.14.5", + "solana-sdk 1.14.6", "thiserror", "tiny-bip39", "uriparse", @@ -4596,7 +4596,7 @@ dependencies = [ [[package]] name = "solana-cli-config" -version = "1.14.5" +version = "1.14.6" dependencies = [ "dirs-next", "lazy_static", @@ -4604,13 +4604,13 @@ dependencies = [ "serde_derive", "serde_yaml", "solana-clap-utils", - "solana-sdk 1.14.5", + "solana-sdk 1.14.6", "url 2.2.2", ] [[package]] name = "solana-cli-output" -version = "1.14.5" +version = "1.14.6" dependencies = [ "Inflector", "base64 0.13.0", @@ -4627,7 +4627,7 @@ dependencies = [ "solana-clap-utils", "solana-cli-config", "solana-client", - "solana-sdk 1.14.5", + "solana-sdk 1.14.6", "solana-transaction-status", "solana-vote-program", "spl-memo", @@ -4635,7 +4635,7 @@ dependencies = [ [[package]] name = "solana-client" -version = "1.14.5" +version = "1.14.6" dependencies = [ "async-mutex", "async-trait", @@ -4671,7 +4671,7 @@ dependencies = [ "solana-measure", "solana-metrics", "solana-net-utils", - "solana-sdk 1.14.5", + "solana-sdk 1.14.6", "solana-streamer", "solana-transaction-status", "solana-version", @@ -4687,27 +4687,27 @@ dependencies = [ [[package]] name = "solana-compute-budget-program" -version = "1.14.5" +version = "1.14.6" dependencies = [ "solana-program-runtime", - "solana-sdk 1.14.5", + "solana-sdk 1.14.6", ] [[package]] name = "solana-config-program" -version = "1.14.5" +version = "1.14.6" dependencies = [ "bincode", "chrono", "serde", "serde_derive", "solana-program-runtime", - "solana-sdk 1.14.5", + "solana-sdk 1.14.6", ] [[package]] name = "solana-core" -version = "1.14.5" +version = "1.14.6" dependencies = [ "ahash", "base64 0.13.0", @@ -4735,8 +4735,8 @@ dependencies = [ "solana-bloom", "solana-client", "solana-entry", - "solana-frozen-abi 1.14.5", - "solana-frozen-abi-macro 1.14.5", + "solana-frozen-abi 1.14.6", + "solana-frozen-abi-macro 1.14.6", "solana-geyser-plugin-manager", "solana-gossip", "solana-ledger", @@ -4749,7 +4749,7 @@ dependencies = [ "solana-rayon-threadlimit", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.5", + "solana-sdk 1.14.6", "solana-send-transaction-service", "solana-streamer", "solana-transaction-status", @@ -4765,19 +4765,19 @@ dependencies = [ [[package]] name = "solana-download-utils" -version = "1.14.5" +version = "1.14.6" dependencies = [ "console", "indicatif", "log", "reqwest", "solana-runtime", - "solana-sdk 1.14.5", + "solana-sdk 1.14.6", ] [[package]] name = "solana-entry" -version = "1.14.5" +version = "1.14.6" dependencies = [ "bincode", "crossbeam-channel", @@ -4793,12 +4793,12 @@ dependencies = [ "solana-metrics", "solana-perf", "solana-rayon-threadlimit", - "solana-sdk 1.14.5", + "solana-sdk 1.14.6", ] [[package]] name = "solana-faucet" -version = "1.14.5" +version = "1.14.6" dependencies = [ "bincode", "byteorder 1.4.3", @@ -4809,9 +4809,9 @@ dependencies = [ "serde_derive", "solana-clap-utils", "solana-cli-config", - "solana-logger 1.14.5", + "solana-logger 1.14.6", "solana-metrics", - "solana-sdk 1.14.5", + "solana-sdk 1.14.6", "solana-version", "spl-memo", "thiserror", @@ -4842,7 +4842,7 @@ dependencies = [ [[package]] name = "solana-frozen-abi" -version = "1.14.5" +version = "1.14.6" dependencies = [ "ahash", "blake3", @@ -4867,7 +4867,7 @@ dependencies = [ "serde_derive", "serde_json", "sha2 0.10.2", - "solana-frozen-abi-macro 1.14.5", + "solana-frozen-abi-macro 1.14.6", "subtle", "thiserror", ] @@ -4886,7 +4886,7 @@ dependencies = [ [[package]] name = "solana-frozen-abi-macro" -version = "1.14.5" +version = "1.14.6" dependencies = [ "proc-macro2 1.0.41", "quote 1.0.18", @@ -4896,26 +4896,26 @@ dependencies = [ [[package]] name = "solana-genesis-utils" -version = "1.14.5" +version = "1.14.6" dependencies = [ "solana-download-utils", "solana-runtime", - "solana-sdk 1.14.5", + "solana-sdk 1.14.6", ] [[package]] name = "solana-geyser-plugin-interface" -version = "1.14.5" +version = "1.14.6" dependencies = [ "log", - "solana-sdk 1.14.5", + "solana-sdk 1.14.6", "solana-transaction-status", "thiserror", ] [[package]] name = "solana-geyser-plugin-manager" -version = "1.14.5" +version = "1.14.6" dependencies = [ "bs58", "crossbeam-channel", @@ -4928,14 +4928,14 @@ dependencies = [ "solana-metrics", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.5", + "solana-sdk 1.14.6", "solana-transaction-status", "thiserror", ] [[package]] name = "solana-gossip" -version = "1.14.5" +version = "1.14.6" dependencies = [ "bincode", "bv", @@ -4959,17 +4959,17 @@ dependencies = [ "solana-clap-utils", "solana-client", "solana-entry", - "solana-frozen-abi 1.14.5", - "solana-frozen-abi-macro 1.14.5", + "solana-frozen-abi 1.14.6", + "solana-frozen-abi-macro 1.14.6", "solana-ledger", - "solana-logger 1.14.5", + "solana-logger 1.14.6", "solana-measure", "solana-metrics", "solana-net-utils", "solana-perf", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.14.5", + "solana-sdk 1.14.6", "solana-streamer", "solana-version", "solana-vote-program", @@ -4978,7 +4978,7 @@ dependencies = [ [[package]] name = "solana-ledger" -version = "1.14.5" +version = "1.14.6" dependencies = [ "assert_matches", "bincode", @@ -5010,15 +5010,15 @@ dependencies = [ "solana-account-decoder", "solana-bpf-loader-program", "solana-entry", - "solana-frozen-abi 1.14.5", - "solana-frozen-abi-macro 1.14.5", + "solana-frozen-abi 1.14.6", + "solana-frozen-abi-macro 1.14.6", "solana-measure", "solana-metrics", "solana-perf", "solana-program-runtime", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.14.5", + "solana-sdk 1.14.6", "solana-stake-program", "solana-storage-bigtable", "solana-storage-proto", @@ -5047,7 +5047,7 @@ dependencies = [ [[package]] name = "solana-logger" -version = "1.14.5" +version = "1.14.6" dependencies = [ "env_logger", "lazy_static", @@ -5056,36 +5056,36 @@ dependencies = [ [[package]] name = "solana-measure" -version = "1.14.5" +version = "1.14.6" dependencies = [ "log", - "solana-sdk 1.14.5", + "solana-sdk 1.14.6", ] [[package]] name = "solana-merkle-tree" -version = "1.14.5" +version = "1.14.6" dependencies = [ "fast-math", "matches", - "solana-program 1.14.5", + "solana-program 1.14.6", ] [[package]] name = "solana-metrics" -version = "1.14.5" +version = "1.14.6" dependencies = [ "crossbeam-channel", "gethostname", "lazy_static", "log", "reqwest", - "solana-sdk 1.14.5", + "solana-sdk 1.14.6", ] [[package]] name = "solana-net-utils" -version = "1.14.5" +version = "1.14.6" dependencies = [ "bincode", "clap 3.1.6", @@ -5096,8 +5096,8 @@ dependencies = [ "serde", "serde_derive", "socket2", - "solana-logger 1.14.5", - "solana-sdk 1.14.5", + "solana-logger 1.14.6", + "solana-sdk 1.14.6", "solana-version", "tokio", "url 2.2.2", @@ -5105,7 +5105,7 @@ dependencies = [ [[package]] name = "solana-perf" -version = "1.14.5" +version = "1.14.6" dependencies = [ "ahash", "bincode", @@ -5124,13 +5124,13 @@ dependencies = [ "serde", "solana-metrics", "solana-rayon-threadlimit", - "solana-sdk 1.14.5", + "solana-sdk 1.14.6", "solana-vote-program", ] [[package]] name = "solana-poh" -version = "1.14.5" +version = "1.14.6" dependencies = [ "core_affinity", "crossbeam-channel", @@ -5140,7 +5140,7 @@ dependencies = [ "solana-measure", "solana-metrics", "solana-runtime", - "solana-sdk 1.14.5", + "solana-sdk 1.14.6", "solana-sys-tuner", "thiserror", ] @@ -5189,7 +5189,7 @@ dependencies = [ [[package]] name = "solana-program" -version = "1.14.5" +version = "1.14.6" dependencies = [ "base64 0.13.0", "bincode", @@ -5225,9 +5225,9 @@ dependencies = [ "serde_json", "sha2 0.10.2", "sha3 0.10.1", - "solana-frozen-abi 1.14.5", - "solana-frozen-abi-macro 1.14.5", - "solana-sdk-macro 1.14.5", + "solana-frozen-abi 1.14.6", + "solana-frozen-abi-macro 1.14.6", + "solana-sdk-macro 1.14.6", "thiserror", "tiny-bip39", "wasm-bindgen", @@ -5236,7 +5236,7 @@ dependencies = [ [[package]] name = "solana-program-runtime" -version = "1.14.5" +version = "1.14.6" dependencies = [ "base64 0.13.0", "bincode", @@ -5250,17 +5250,17 @@ dependencies = [ "num-traits", "rustc_version", "serde", - "solana-frozen-abi 1.14.5", - "solana-frozen-abi-macro 1.14.5", + "solana-frozen-abi 1.14.6", + "solana-frozen-abi-macro 1.14.6", "solana-measure", "solana-metrics", - "solana-sdk 1.14.5", + "solana-sdk 1.14.6", "thiserror", ] [[package]] name = "solana-program-test" -version = "1.14.5" +version = "1.14.6" dependencies = [ "assert_matches", "async-trait", @@ -5272,10 +5272,10 @@ dependencies = [ "solana-banks-client", "solana-banks-server", "solana-bpf-loader-program", - "solana-logger 1.14.5", + "solana-logger 1.14.6", "solana-program-runtime", "solana-runtime", - "solana-sdk 1.14.5", + "solana-sdk 1.14.6", "solana-vote-program", "thiserror", "tokio", @@ -5283,7 +5283,7 @@ dependencies = [ [[package]] name = "solana-rayon-threadlimit" -version = "1.14.5" +version = "1.14.6" dependencies = [ "lazy_static", "num_cpus", @@ -5291,7 +5291,7 @@ dependencies = [ [[package]] name = "solana-remote-wallet" -version = "1.14.5" +version = "1.14.6" dependencies = [ "console", "dialoguer", @@ -5301,14 +5301,14 @@ dependencies = [ "parking_lot 0.12.1", "qstring", "semver", - "solana-sdk 1.14.5", + "solana-sdk 1.14.6", "thiserror", "uriparse", ] [[package]] name = "solana-rpc" -version = "1.14.5" +version = "1.14.6" dependencies = [ "base64 0.13.0", "bincode", @@ -5341,7 +5341,7 @@ dependencies = [ "solana-poh", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.14.5", + "solana-sdk 1.14.6", "solana-send-transaction-service", "solana-stake-program", "solana-storage-bigtable", @@ -5359,7 +5359,7 @@ dependencies = [ [[package]] name = "solana-runtime" -version = "1.14.5" +version = "1.14.6" dependencies = [ "arrayref", "bincode", @@ -5395,17 +5395,17 @@ dependencies = [ "solana-bucket-map", "solana-compute-budget-program", "solana-config-program", - "solana-frozen-abi 1.14.5", - "solana-frozen-abi-macro 1.14.5", + "solana-frozen-abi 1.14.6", + "solana-frozen-abi-macro 1.14.6", "solana-measure", "solana-metrics", "solana-program-runtime", "solana-rayon-threadlimit", - "solana-sdk 1.14.5", + "solana-sdk 1.14.6", "solana-stake-program", "solana-vote-program", "solana-zk-token-proof-program", - "solana-zk-token-sdk 1.14.5", + "solana-zk-token-sdk 1.14.6", "strum", "strum_macros", "symlink", @@ -5468,7 +5468,7 @@ dependencies = [ [[package]] name = "solana-sdk" -version = "1.14.5" +version = "1.14.6" dependencies = [ "assert_matches", "base64 0.13.0", @@ -5505,11 +5505,11 @@ dependencies = [ "serde_json", "sha2 0.10.2", "sha3 0.10.1", - "solana-frozen-abi 1.14.5", - "solana-frozen-abi-macro 1.14.5", - "solana-logger 1.14.5", - "solana-program 1.14.5", - "solana-sdk-macro 1.14.5", + "solana-frozen-abi 1.14.6", + "solana-frozen-abi-macro 1.14.6", + "solana-logger 1.14.6", + "solana-program 1.14.6", + "solana-sdk-macro 1.14.6", "thiserror", "uriparse", "wasm-bindgen", @@ -5530,7 +5530,7 @@ dependencies = [ [[package]] name = "solana-sdk-macro" -version = "1.14.5" +version = "1.14.6" dependencies = [ "bs58", "proc-macro2 1.0.41", @@ -5541,7 +5541,7 @@ dependencies = [ [[package]] name = "solana-send-transaction-service" -version = "1.14.5" +version = "1.14.6" dependencies = [ "crossbeam-channel", "log", @@ -5549,12 +5549,12 @@ dependencies = [ "solana-measure", "solana-metrics", "solana-runtime", - "solana-sdk 1.14.5", + "solana-sdk 1.14.6", ] [[package]] name = "solana-stake-program" -version = "1.14.5" +version = "1.14.6" dependencies = [ "bincode", "log", @@ -5564,18 +5564,18 @@ dependencies = [ "serde", "serde_derive", "solana-config-program", - "solana-frozen-abi 1.14.5", - "solana-frozen-abi-macro 1.14.5", + "solana-frozen-abi 1.14.6", + "solana-frozen-abi-macro 1.14.6", "solana-metrics", "solana-program-runtime", - "solana-sdk 1.14.5", + "solana-sdk 1.14.6", "solana-vote-program", "thiserror", ] [[package]] name = "solana-storage-bigtable" -version = "1.14.5" +version = "1.14.6" dependencies = [ "backoff", "bincode", @@ -5596,7 +5596,7 @@ dependencies = [ "serde_derive", "smpl_jwt", "solana-metrics", - "solana-sdk 1.14.5", + "solana-sdk 1.14.6", "solana-storage-proto", "solana-transaction-status", "thiserror", @@ -5607,7 +5607,7 @@ dependencies = [ [[package]] name = "solana-storage-proto" -version = "1.14.5" +version = "1.14.6" dependencies = [ "bincode", "bs58", @@ -5615,14 +5615,14 @@ dependencies = [ "protobuf-src", "serde", "solana-account-decoder", - "solana-sdk 1.14.5", + "solana-sdk 1.14.6", "solana-transaction-status", "tonic-build 0.8.0", ] [[package]] name = "solana-streamer" -version = "1.14.5" +version = "1.14.6" dependencies = [ "crossbeam-channel", "futures-util", @@ -5641,7 +5641,7 @@ dependencies = [ "rustls 0.20.6", "solana-metrics", "solana-perf", - "solana-sdk 1.14.5", + "solana-sdk 1.14.6", "thiserror", "tokio", "x509-parser", @@ -5649,13 +5649,13 @@ dependencies = [ [[package]] name = "solana-sys-tuner" -version = "1.14.5" +version = "1.14.6" dependencies = [ "clap 2.33.3", "libc", "log", "nix", - "solana-logger 1.14.5", + "solana-logger 1.14.6", "solana-version", "sysctl", "unix_socket2", @@ -5664,7 +5664,7 @@ dependencies = [ [[package]] name = "solana-test-validator" -version = "1.14.5" +version = "1.14.6" dependencies = [ "base64 0.13.0", "log", @@ -5675,20 +5675,20 @@ dependencies = [ "solana-core", "solana-gossip", "solana-ledger", - "solana-logger 1.14.5", + "solana-logger 1.14.6", "solana-net-utils", "solana-program-runtime", "solana-program-test", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.5", + "solana-sdk 1.14.6", "solana-streamer", "tokio", ] [[package]] name = "solana-transaction-status" -version = "1.14.5" +version = "1.14.6" dependencies = [ "Inflector", "base64 0.13.0", @@ -5704,7 +5704,7 @@ dependencies = [ "solana-address-lookup-table-program", "solana-measure", "solana-metrics", - "solana-sdk 1.14.5", + "solana-sdk 1.14.6", "solana-vote-program", "spl-associated-token-account", "spl-memo", @@ -5715,7 +5715,7 @@ dependencies = [ [[package]] name = "solana-validator" -version = "1.14.5" +version = "1.14.6" dependencies = [ "chrono", "clap 2.33.3", @@ -5746,14 +5746,14 @@ dependencies = [ "solana-genesis-utils", "solana-gossip", "solana-ledger", - "solana-logger 1.14.5", + "solana-logger 1.14.6", "solana-metrics", "solana-net-utils", "solana-perf", "solana-poh", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.5", + "solana-sdk 1.14.6", "solana-send-transaction-service", "solana-storage-bigtable", "solana-streamer", @@ -5766,21 +5766,21 @@ dependencies = [ [[package]] name = "solana-version" -version = "1.14.5" +version = "1.14.6" dependencies = [ "log", "rustc_version", "semver", "serde", "serde_derive", - "solana-frozen-abi 1.14.5", - "solana-frozen-abi-macro 1.14.5", - "solana-sdk 1.14.5", + "solana-frozen-abi 1.14.6", + "solana-frozen-abi-macro 1.14.6", + "solana-sdk 1.14.6", ] [[package]] name = "solana-vote-program" -version = "1.14.5" +version = "1.14.6" dependencies = [ "bincode", "log", @@ -5789,25 +5789,25 @@ dependencies = [ "rustc_version", "serde", "serde_derive", - "solana-frozen-abi 1.14.5", - "solana-frozen-abi-macro 1.14.5", + "solana-frozen-abi 1.14.6", + "solana-frozen-abi-macro 1.14.6", "solana-metrics", "solana-program-runtime", - "solana-sdk 1.14.5", + "solana-sdk 1.14.6", "thiserror", ] [[package]] name = "solana-zk-token-proof-program" -version = "1.14.5" +version = "1.14.6" dependencies = [ "bytemuck", "getrandom 0.1.14", "num-derive", "num-traits", "solana-program-runtime", - "solana-sdk 1.14.5", - "solana-zk-token-sdk 1.14.5", + "solana-sdk 1.14.6", + "solana-zk-token-sdk 1.14.6", ] [[package]] @@ -5842,7 +5842,7 @@ dependencies = [ [[package]] name = "solana-zk-token-sdk" -version = "1.14.5" +version = "1.14.6" dependencies = [ "aes-gcm-siv", "arrayref", @@ -5862,8 +5862,8 @@ dependencies = [ "serde", "serde_json", "sha3 0.9.1", - "solana-program 1.14.5", - "solana-sdk 1.14.5", + "solana-program 1.14.6", + "solana-sdk 1.14.6", "subtle", "thiserror", "zeroize", diff --git a/programs/bpf/Cargo.toml b/programs/bpf/Cargo.toml index 048b242e557e7f..d19ea44e1e8184 100644 --- a/programs/bpf/Cargo.toml +++ b/programs/bpf/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "solana-bpf-programs" description = "Blockchain, Rebuilt for Scale" -version = "1.14.5" +version = "1.14.6" documentation = "https://docs.rs/solana" homepage = "https://solana.com/" readme = "README.md" @@ -26,22 +26,22 @@ itertools = "0.10.1" log = "0.4.11" miow = "0.3.6" net2 = "0.2.37" -solana-account-decoder = { path = "../../account-decoder", version = "=1.14.5" } -solana-bpf-loader-program = { path = "../bpf_loader", version = "=1.14.5" } -solana-bpf-rust-invoke = { path = "rust/invoke", version = "=1.14.5" } -solana-bpf-rust-realloc = { path = "rust/realloc", version = "=1.14.5" } -solana-bpf-rust-realloc-invoke = { path = "rust/realloc_invoke", version = "=1.14.5" } -solana-cli-output = { path = "../../cli-output", version = "=1.14.5" } -solana-logger = { path = "../../logger", version = "=1.14.5" } -solana-measure = { path = "../../measure", version = "=1.14.5" } -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.5" } -solana-runtime = { path = "../../runtime", version = "=1.14.5" } -solana-sdk = { path = "../../sdk", version = "=1.14.5" } -solana-transaction-status = { path = "../../transaction-status", version = "=1.14.5" } +solana-account-decoder = { path = "../../account-decoder", version = "=1.14.6" } +solana-bpf-loader-program = { path = "../bpf_loader", version = "=1.14.6" } +solana-bpf-rust-invoke = { path = "rust/invoke", version = "=1.14.6" } +solana-bpf-rust-realloc = { path = "rust/realloc", version = "=1.14.6" } +solana-bpf-rust-realloc-invoke = { path = "rust/realloc_invoke", version = "=1.14.6" } +solana-cli-output = { path = "../../cli-output", version = "=1.14.6" } +solana-logger = { path = "../../logger", version = "=1.14.6" } +solana-measure = { path = "../../measure", version = "=1.14.6" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.6" } +solana-runtime = { path = "../../runtime", version = "=1.14.6" } +solana-sdk = { path = "../../sdk", version = "=1.14.6" } +solana-transaction-status = { path = "../../transaction-status", version = "=1.14.6" } solana_rbpf = "=0.2.31" [dev-dependencies] -solana-ledger = { path = "../../ledger", version = "=1.14.5" } +solana-ledger = { path = "../../ledger", version = "=1.14.6" } [[bench]] name = "bpf_loader" diff --git a/programs/bpf/rust/128bit/Cargo.toml b/programs/bpf/rust/128bit/Cargo.toml index d662f6a92edef2..7b0b9923959633 100644 --- a/programs/bpf/rust/128bit/Cargo.toml +++ b/programs/bpf/rust/128bit/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-128bit" -version = "1.14.5" +version = "1.14.6" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ documentation = "https://docs.rs/solana-bpf-rust-128bit" edition = "2021" [dependencies] -solana-bpf-rust-128bit-dep = { path = "../128bit_dep", version = "=1.14.5" } -solana-program = { path = "../../../../sdk/program", version = "=1.14.5" } +solana-bpf-rust-128bit-dep = { path = "../128bit_dep", version = "=1.14.6" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.6" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/128bit_dep/Cargo.toml b/programs/bpf/rust/128bit_dep/Cargo.toml index 4c63aea93156cb..66fd4cfa4c384e 100644 --- a/programs/bpf/rust/128bit_dep/Cargo.toml +++ b/programs/bpf/rust/128bit_dep/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-128bit-dep" -version = "1.14.5" +version = "1.14.6" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-128bit-dep" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.5" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.6" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/bpf/rust/alloc/Cargo.toml b/programs/bpf/rust/alloc/Cargo.toml index 314303e5093be2..dbac160b365292 100644 --- a/programs/bpf/rust/alloc/Cargo.toml +++ b/programs/bpf/rust/alloc/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-alloc" -version = "1.14.5" +version = "1.14.6" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-alloc" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.5" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.6" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/call_depth/Cargo.toml b/programs/bpf/rust/call_depth/Cargo.toml index 7d0a3f9700bac1..c8f6d32723ce67 100644 --- a/programs/bpf/rust/call_depth/Cargo.toml +++ b/programs/bpf/rust/call_depth/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-call-depth" -version = "1.14.5" +version = "1.14.6" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-call-depth" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.5" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.6" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/caller_access/Cargo.toml b/programs/bpf/rust/caller_access/Cargo.toml index 154e9d391f4542..94f315ecd96a5c 100644 --- a/programs/bpf/rust/caller_access/Cargo.toml +++ b/programs/bpf/rust/caller_access/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-caller-access" -version = "1.14.5" +version = "1.14.6" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-caller-access" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.5" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.6" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/curve25519/Cargo.toml b/programs/bpf/rust/curve25519/Cargo.toml index 687c0e52d895fb..ab858e352314cf 100644 --- a/programs/bpf/rust/curve25519/Cargo.toml +++ b/programs/bpf/rust/curve25519/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-curve25519" -version = "1.14.5" +version = "1.14.6" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ documentation = "https://docs.rs/solana-bpf-rust-zktoken_crypto" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.5" } -solana-zk-token-sdk = { path = "../../../../zk-token-sdk", version = "=1.14.5" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.6" } +solana-zk-token-sdk = { path = "../../../../zk-token-sdk", version = "=1.14.6" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/custom_heap/Cargo.toml b/programs/bpf/rust/custom_heap/Cargo.toml index b41f9e74bd7e70..900fb15e2879cd 100644 --- a/programs/bpf/rust/custom_heap/Cargo.toml +++ b/programs/bpf/rust/custom_heap/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-custom-heap" -version = "1.14.5" +version = "1.14.6" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-custom-heap" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.5" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.6" } [features] default = ["custom-heap"] diff --git a/programs/bpf/rust/dep_crate/Cargo.toml b/programs/bpf/rust/dep_crate/Cargo.toml index 55026642e9451f..9328bbad219e9d 100644 --- a/programs/bpf/rust/dep_crate/Cargo.toml +++ b/programs/bpf/rust/dep_crate/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-dep-crate" -version = "1.14.5" +version = "1.14.6" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,8 +12,8 @@ edition = "2021" [dependencies] byteorder = { version = "1", default-features = false } # list of crates which must be buildable for bpf programs -solana-address-lookup-table-program = { path = "../../../../programs/address-lookup-table", version = "=1.14.5" } -solana-program = { path = "../../../../sdk/program", version = "=1.14.5" } +solana-address-lookup-table-program = { path = "../../../../programs/address-lookup-table", version = "=1.14.6" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.6" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/deprecated_loader/Cargo.toml b/programs/bpf/rust/deprecated_loader/Cargo.toml index 9f9b205a0e1935..9faa1aa2fe7a0e 100644 --- a/programs/bpf/rust/deprecated_loader/Cargo.toml +++ b/programs/bpf/rust/deprecated_loader/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-deprecated-loader" -version = "1.14.5" +version = "1.14.6" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-deprecated-loader" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.5" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.6" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/dup_accounts/Cargo.toml b/programs/bpf/rust/dup_accounts/Cargo.toml index 1f6fd0e7983ca6..60cb96e61491a0 100644 --- a/programs/bpf/rust/dup_accounts/Cargo.toml +++ b/programs/bpf/rust/dup_accounts/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-dup-accounts" -version = "1.14.5" +version = "1.14.6" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-dup-accounts" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.5" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.6" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/error_handling/Cargo.toml b/programs/bpf/rust/error_handling/Cargo.toml index 4c11d7f1401cfe..ef60afdfeeb0b9 100644 --- a/programs/bpf/rust/error_handling/Cargo.toml +++ b/programs/bpf/rust/error_handling/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-error-handling" -version = "1.14.5" +version = "1.14.6" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,7 +12,7 @@ edition = "2021" [dependencies] num-derive = "0.3" num-traits = "0.2" -solana-program = { path = "../../../../sdk/program", version = "=1.14.5" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.6" } thiserror = "1.0" [lib] diff --git a/programs/bpf/rust/external_spend/Cargo.toml b/programs/bpf/rust/external_spend/Cargo.toml index cd296800e2f8dc..497b130e1f52a3 100644 --- a/programs/bpf/rust/external_spend/Cargo.toml +++ b/programs/bpf/rust/external_spend/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-external-spend" -version = "1.14.5" +version = "1.14.6" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-external-spend" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.5" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.6" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/finalize/Cargo.toml b/programs/bpf/rust/finalize/Cargo.toml index ac8a5966eabd47..26820764564b37 100644 --- a/programs/bpf/rust/finalize/Cargo.toml +++ b/programs/bpf/rust/finalize/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-finalize" -version = "1.14.5" +version = "1.14.6" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-finalize" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.5" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.6" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/get_minimum_delegation/Cargo.toml b/programs/bpf/rust/get_minimum_delegation/Cargo.toml index 32fa764ca5aa27..ecb79b1052565f 100644 --- a/programs/bpf/rust/get_minimum_delegation/Cargo.toml +++ b/programs/bpf/rust/get_minimum_delegation/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-get-minimum-delegation" -version = "1.14.5" +version = "1.14.6" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-get-minimum-delegation" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.5" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.6" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/inner_instruction_alignment_check/Cargo.toml b/programs/bpf/rust/inner_instruction_alignment_check/Cargo.toml index 8c99ff20c59761..53f5f479bd779b 100644 --- a/programs/bpf/rust/inner_instruction_alignment_check/Cargo.toml +++ b/programs/bpf/rust/inner_instruction_alignment_check/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-inner_instruction_alignment_check" -version = "1.14.5" +version = "1.14.6" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-inner_instruction_alignment_che edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.5" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.6" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/instruction_introspection/Cargo.toml b/programs/bpf/rust/instruction_introspection/Cargo.toml index 2d5de0593e72de..4b274e5c2bfbd5 100644 --- a/programs/bpf/rust/instruction_introspection/Cargo.toml +++ b/programs/bpf/rust/instruction_introspection/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-instruction-introspection" -version = "1.14.5" +version = "1.14.6" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-instruction-introspection" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.5" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.6" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/invoke/Cargo.toml b/programs/bpf/rust/invoke/Cargo.toml index 9104d3bb248f53..87baf75d02c695 100644 --- a/programs/bpf/rust/invoke/Cargo.toml +++ b/programs/bpf/rust/invoke/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-invoke" -version = "1.14.5" +version = "1.14.6" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -15,7 +15,7 @@ program = [] [dependencies] solana-bpf-rust-invoked = { path = "../invoked", default-features = false } -solana-program = { path = "../../../../sdk/program", version = "=1.14.5" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.6" } [lib] crate-type = ["lib", "cdylib"] diff --git a/programs/bpf/rust/invoke_and_error/Cargo.toml b/programs/bpf/rust/invoke_and_error/Cargo.toml index a094ef8f1a4230..eee5ca83de4e14 100644 --- a/programs/bpf/rust/invoke_and_error/Cargo.toml +++ b/programs/bpf/rust/invoke_and_error/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-invoke-and-error" -version = "1.14.5" +version = "1.14.6" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-invoke-and-error" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.5" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.6" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/invoke_and_ok/Cargo.toml b/programs/bpf/rust/invoke_and_ok/Cargo.toml index 4d2a74a0dcf68b..d231530a6ba4f3 100644 --- a/programs/bpf/rust/invoke_and_ok/Cargo.toml +++ b/programs/bpf/rust/invoke_and_ok/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-invoke-and-ok" -version = "1.14.5" +version = "1.14.6" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-invoke-and-ok" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.5" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.6" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/invoke_and_return/Cargo.toml b/programs/bpf/rust/invoke_and_return/Cargo.toml index 8047e30bd55052..665e1daefa6f88 100644 --- a/programs/bpf/rust/invoke_and_return/Cargo.toml +++ b/programs/bpf/rust/invoke_and_return/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-invoke-and-return" -version = "1.14.5" +version = "1.14.6" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-invoke-and-return" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.5" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.6" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/invoked/Cargo.toml b/programs/bpf/rust/invoked/Cargo.toml index b206e20d45a65a..f5efbcb30ff6b4 100644 --- a/programs/bpf/rust/invoked/Cargo.toml +++ b/programs/bpf/rust/invoked/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-invoked" -version = "1.14.5" +version = "1.14.6" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,7 +14,7 @@ default = ["program"] program = [] [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.5" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.6" } [lib] crate-type = ["lib", "cdylib"] diff --git a/programs/bpf/rust/iter/Cargo.toml b/programs/bpf/rust/iter/Cargo.toml index 2c5d106ab49f53..4659e04c9f9a64 100644 --- a/programs/bpf/rust/iter/Cargo.toml +++ b/programs/bpf/rust/iter/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-iter" -version = "1.14.5" +version = "1.14.6" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-iter" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.5" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.6" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/log_data/Cargo.toml b/programs/bpf/rust/log_data/Cargo.toml index c12938d512a870..576c5475cfaac1 100644 --- a/programs/bpf/rust/log_data/Cargo.toml +++ b/programs/bpf/rust/log_data/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-log-data" -version = "1.14.5" +version = "1.14.6" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-log-data" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.5" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.6" } [features] default = ["program"] diff --git a/programs/bpf/rust/many_args/Cargo.toml b/programs/bpf/rust/many_args/Cargo.toml index ea716f7d334f0a..c3ba3b50a78b2e 100644 --- a/programs/bpf/rust/many_args/Cargo.toml +++ b/programs/bpf/rust/many_args/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-many-args" -version = "1.14.5" +version = "1.14.6" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ documentation = "https://docs.rs/solana-bpf-rust-many-args" edition = "2021" [dependencies] -solana-bpf-rust-many-args-dep = { path = "../many_args_dep", version = "=1.14.5" } -solana-program = { path = "../../../../sdk/program", version = "=1.14.5" } +solana-bpf-rust-many-args-dep = { path = "../many_args_dep", version = "=1.14.6" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.6" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/many_args_dep/Cargo.toml b/programs/bpf/rust/many_args_dep/Cargo.toml index 43f2015f23d3e8..12fc5609c045ed 100644 --- a/programs/bpf/rust/many_args_dep/Cargo.toml +++ b/programs/bpf/rust/many_args_dep/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-many-args-dep" -version = "1.14.5" +version = "1.14.6" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-many-args-dep" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.5" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.6" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/bpf/rust/mem/Cargo.toml b/programs/bpf/rust/mem/Cargo.toml index e79db3c05bc372..8106b4e29e59be 100644 --- a/programs/bpf/rust/mem/Cargo.toml +++ b/programs/bpf/rust/mem/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-mem" -version = "1.14.5" +version = "1.14.6" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,12 +13,12 @@ edition = "2021" no-entrypoint = [] [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.5" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.6" } [dev-dependencies] -solana-program-runtime = { path = "../../../../program-runtime", version = "=1.14.5" } -solana-program-test = { path = "../../../../program-test", version = "=1.14.5" } -solana-sdk = { path = "../../../../sdk", version = "=1.14.5" } +solana-program-runtime = { path = "../../../../program-runtime", version = "=1.14.6" } +solana-program-test = { path = "../../../../program-test", version = "=1.14.6" } +solana-sdk = { path = "../../../../sdk", version = "=1.14.6" } [lib] crate-type = ["cdylib", "lib"] diff --git a/programs/bpf/rust/membuiltins/Cargo.toml b/programs/bpf/rust/membuiltins/Cargo.toml index 4e0ad7a8e10e38..7fcd1ecf775a12 100644 --- a/programs/bpf/rust/membuiltins/Cargo.toml +++ b/programs/bpf/rust/membuiltins/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-membuiltins" -version = "1.14.5" +version = "1.14.6" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ documentation = "https://docs.rs/solana-bpf-rust-mem" edition = "2021" [dependencies] -solana-bpf-rust-mem = { path = "../mem", version = "=1.14.5", features = [ "no-entrypoint" ] } -solana-program = { path = "../../../../sdk/program", version = "=1.14.5" } +solana-bpf-rust-mem = { path = "../mem", version = "=1.14.6", features = [ "no-entrypoint" ] } +solana-program = { path = "../../../../sdk/program", version = "=1.14.6" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/noop/Cargo.toml b/programs/bpf/rust/noop/Cargo.toml index d5d115eedcc127..b7be0dc3195d44 100644 --- a/programs/bpf/rust/noop/Cargo.toml +++ b/programs/bpf/rust/noop/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-noop" -version = "1.14.5" +version = "1.14.6" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-noop" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.5" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.6" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/panic/Cargo.toml b/programs/bpf/rust/panic/Cargo.toml index 8f6522c47e879a..c9b89a2a0bd06a 100644 --- a/programs/bpf/rust/panic/Cargo.toml +++ b/programs/bpf/rust/panic/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-panic" -version = "1.14.5" +version = "1.14.6" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-panic" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.5" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.6" } [features] default = ["custom-panic"] diff --git a/programs/bpf/rust/param_passing/Cargo.toml b/programs/bpf/rust/param_passing/Cargo.toml index 6d298587d022e6..71d7984141c0fd 100644 --- a/programs/bpf/rust/param_passing/Cargo.toml +++ b/programs/bpf/rust/param_passing/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-param-passing" -version = "1.14.5" +version = "1.14.6" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ documentation = "https://docs.rs/solana-bpf-rust-param-passing" edition = "2021" [dependencies] -solana-bpf-rust-param-passing-dep = { path = "../param_passing_dep", version = "=1.14.5" } -solana-program = { path = "../../../../sdk/program", version = "=1.14.5" } +solana-bpf-rust-param-passing-dep = { path = "../param_passing_dep", version = "=1.14.6" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.6" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/param_passing_dep/Cargo.toml b/programs/bpf/rust/param_passing_dep/Cargo.toml index 03a874604c1e0f..34d17fa4c84ddd 100644 --- a/programs/bpf/rust/param_passing_dep/Cargo.toml +++ b/programs/bpf/rust/param_passing_dep/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-param-passing-dep" -version = "1.14.5" +version = "1.14.6" description = "Solana BPF program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-param-passing-dep" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.5" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.6" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/bpf/rust/rand/Cargo.toml b/programs/bpf/rust/rand/Cargo.toml index 5b4f07bd08a10f..40d1846aff746b 100644 --- a/programs/bpf/rust/rand/Cargo.toml +++ b/programs/bpf/rust/rand/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-rand" -version = "1.14.5" +version = "1.14.6" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,7 +12,7 @@ edition = "2021" [dependencies] getrandom = { version = "0.1.14", features = ["dummy"] } rand = "0.7" -solana-program = { path = "../../../../sdk/program", version = "=1.14.5" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.6" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/realloc/Cargo.toml b/programs/bpf/rust/realloc/Cargo.toml index 2af10fad80093d..20c9b171e0edeb 100644 --- a/programs/bpf/rust/realloc/Cargo.toml +++ b/programs/bpf/rust/realloc/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-realloc" -version = "1.14.5" +version = "1.14.6" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,7 +14,7 @@ default = ["program"] program = [] [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.5" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.6" } [lib] crate-type = ["lib", "cdylib"] diff --git a/programs/bpf/rust/realloc_invoke/Cargo.toml b/programs/bpf/rust/realloc_invoke/Cargo.toml index 49471b3374d2a7..195733fd41c77c 100644 --- a/programs/bpf/rust/realloc_invoke/Cargo.toml +++ b/programs/bpf/rust/realloc_invoke/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-realloc-invoke" -version = "1.14.5" +version = "1.14.6" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,8 +14,8 @@ default = ["program"] program = [] [dependencies] -solana-bpf-rust-realloc = { path = "../realloc", version = "=1.14.5", default-features = false } -solana-program = { path = "../../../../sdk/program", version = "=1.14.5" } +solana-bpf-rust-realloc = { path = "../realloc", version = "=1.14.6", default-features = false } +solana-program = { path = "../../../../sdk/program", version = "=1.14.6" } [lib] crate-type = ["lib", "cdylib"] diff --git a/programs/bpf/rust/ro_account_modify/Cargo.toml b/programs/bpf/rust/ro_account_modify/Cargo.toml index 99ad090857a298..4e66cee8a35eff 100644 --- a/programs/bpf/rust/ro_account_modify/Cargo.toml +++ b/programs/bpf/rust/ro_account_modify/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-ro-account_modify" -version = "1.14.5" +version = "1.14.6" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-ro-modify" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.5" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.6" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/ro_modify/Cargo.toml b/programs/bpf/rust/ro_modify/Cargo.toml index 4184f0f287ef65..7c3bdc5e54130a 100644 --- a/programs/bpf/rust/ro_modify/Cargo.toml +++ b/programs/bpf/rust/ro_modify/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-ro-modify" -version = "1.14.5" +version = "1.14.6" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-ro-modify" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.5" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.6" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/sanity/Cargo.toml b/programs/bpf/rust/sanity/Cargo.toml index 619d70d26de90c..b1bdfa2c70d149 100644 --- a/programs/bpf/rust/sanity/Cargo.toml +++ b/programs/bpf/rust/sanity/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-sanity" -version = "1.14.5" +version = "1.14.6" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,12 +13,12 @@ edition = "2021" test-bpf = [] [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.5" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.6" } [dev-dependencies] -solana-program-runtime = { path = "../../../../program-runtime", version = "=1.14.5" } -solana-program-test = { path = "../../../../program-test", version = "=1.14.5" } -solana-sdk = { path = "../../../../sdk", version = "=1.14.5" } +solana-program-runtime = { path = "../../../../program-runtime", version = "=1.14.6" } +solana-program-test = { path = "../../../../program-test", version = "=1.14.6" } +solana-sdk = { path = "../../../../sdk", version = "=1.14.6" } [lib] crate-type = ["cdylib", "lib"] diff --git a/programs/bpf/rust/secp256k1_recover/Cargo.toml b/programs/bpf/rust/secp256k1_recover/Cargo.toml index a7b2d1d2be1d4d..4a9e8c6d2ff8e0 100644 --- a/programs/bpf/rust/secp256k1_recover/Cargo.toml +++ b/programs/bpf/rust/secp256k1_recover/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-secp256k1-recover" -version = "1.14.5" +version = "1.14.6" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -11,7 +11,7 @@ edition = "2021" [dependencies] libsecp256k1 = { version = "0.7.0", default-features = false } -solana-program = { path = "../../../../sdk/program", version = "=1.14.5" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.6" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/sha/Cargo.toml b/programs/bpf/rust/sha/Cargo.toml index a07658789681dc..4d6dafc6725b54 100644 --- a/programs/bpf/rust/sha/Cargo.toml +++ b/programs/bpf/rust/sha/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-sha" -version = "1.14.5" +version = "1.14.6" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -11,7 +11,7 @@ edition = "2021" [dependencies] blake3 = "1.0.0" -solana-program = { path = "../../../../sdk/program", version = "=1.14.5" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.6" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/sibling_inner_instruction/Cargo.toml b/programs/bpf/rust/sibling_inner_instruction/Cargo.toml index 018eba25c4ca4b..e4616c935e3595 100644 --- a/programs/bpf/rust/sibling_inner_instruction/Cargo.toml +++ b/programs/bpf/rust/sibling_inner_instruction/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-sibling_inner-instructions" -version = "1.14.5" +version = "1.14.6" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-log-data" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.5" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.6" } [features] default = ["program"] diff --git a/programs/bpf/rust/sibling_instruction/Cargo.toml b/programs/bpf/rust/sibling_instruction/Cargo.toml index e0f91cd838945d..0e69f4ecb6ee9f 100644 --- a/programs/bpf/rust/sibling_instruction/Cargo.toml +++ b/programs/bpf/rust/sibling_instruction/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-sibling-instructions" -version = "1.14.5" +version = "1.14.6" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-log-data" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.5" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.6" } [features] default = ["program"] diff --git a/programs/bpf/rust/simulation/Cargo.toml b/programs/bpf/rust/simulation/Cargo.toml index 4bacb29c33c992..dda138b794b378 100644 --- a/programs/bpf/rust/simulation/Cargo.toml +++ b/programs/bpf/rust/simulation/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-simulation" -version = "1.14.5" +version = "1.14.6" description = "Solana BPF Program Simulation Differences" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,13 +13,13 @@ edition = "2021" test-bpf = [] [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.5" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.6" } [dev-dependencies] -solana-logger = { path = "../../../../logger", version = "=1.14.5" } -solana-program-test = { path = "../../../../program-test", version = "=1.14.5" } -solana-sdk = { path = "../../../../sdk", version = "=1.14.5" } -solana-validator = { path = "../../../../validator", version = "=1.14.5" } +solana-logger = { path = "../../../../logger", version = "=1.14.6" } +solana-program-test = { path = "../../../../program-test", version = "=1.14.6" } +solana-sdk = { path = "../../../../sdk", version = "=1.14.6" } +solana-validator = { path = "../../../../validator", version = "=1.14.6" } [lib] crate-type = ["cdylib", "lib"] diff --git a/programs/bpf/rust/spoof1/Cargo.toml b/programs/bpf/rust/spoof1/Cargo.toml index d876015acfba28..34212049dafb95 100644 --- a/programs/bpf/rust/spoof1/Cargo.toml +++ b/programs/bpf/rust/spoof1/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-spoof1" -version = "1.14.5" +version = "1.14.6" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-spoof1" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.5" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.6" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/spoof1_system/Cargo.toml b/programs/bpf/rust/spoof1_system/Cargo.toml index f93e22e0cc8df3..8f94dd9b996209 100644 --- a/programs/bpf/rust/spoof1_system/Cargo.toml +++ b/programs/bpf/rust/spoof1_system/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-spoof1-system" -version = "1.14.5" +version = "1.14.6" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-spoof1-system" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.5" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.6" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/sysvar/Cargo.toml b/programs/bpf/rust/sysvar/Cargo.toml index afebb6620bc444..36c53bc38f6ed4 100644 --- a/programs/bpf/rust/sysvar/Cargo.toml +++ b/programs/bpf/rust/sysvar/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-sysvar" -version = "1.14.5" +version = "1.14.6" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,12 +10,12 @@ documentation = "https://docs.rs/solana-bpf-rust-sysvar" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.5" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.6" } [dev-dependencies] -solana-program-runtime = { path = "../../../../program-runtime", version = "=1.14.5" } -solana-program-test = { path = "../../../../program-test", version = "=1.14.5" } -solana-sdk = { path = "../../../../sdk", version = "=1.14.5" } +solana-program-runtime = { path = "../../../../program-runtime", version = "=1.14.6" } +solana-program-test = { path = "../../../../program-test", version = "=1.14.6" } +solana-sdk = { path = "../../../../sdk", version = "=1.14.6" } [lib] crate-type = ["cdylib", "lib"] diff --git a/programs/bpf/rust/upgradeable/Cargo.toml b/programs/bpf/rust/upgradeable/Cargo.toml index d91a75d67a73b5..16049338c47d0d 100644 --- a/programs/bpf/rust/upgradeable/Cargo.toml +++ b/programs/bpf/rust/upgradeable/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-upgradeable" -version = "1.14.5" +version = "1.14.6" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-upgradeable" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.5" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.6" } [lib] name = "solana_bpf_rust_upgradeable" diff --git a/programs/bpf/rust/upgraded/Cargo.toml b/programs/bpf/rust/upgraded/Cargo.toml index 9e31d79b95523c..d7a39bf0b5e410 100644 --- a/programs/bpf/rust/upgraded/Cargo.toml +++ b/programs/bpf/rust/upgraded/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-upgraded" -version = "1.14.5" +version = "1.14.6" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-upgraded" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.5" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.6" } [lib] name = "solana_bpf_rust_upgraded" diff --git a/programs/bpf_loader/Cargo.toml b/programs/bpf_loader/Cargo.toml index 49a42f1db188b6..196ae55b27ccba 100644 --- a/programs/bpf_loader/Cargo.toml +++ b/programs/bpf_loader/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-loader-program" -version = "1.14.5" +version = "1.14.6" description = "Solana BPF loader" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,17 +14,17 @@ bincode = "1.3.3" byteorder = "1.4.3" libsecp256k1 = "0.6.0" log = "0.4.17" -solana-measure = { path = "../../measure", version = "=1.14.5" } -solana-metrics = { path = "../../metrics", version = "=1.14.5" } -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.5" } -solana-sdk = { path = "../../sdk", version = "=1.14.5" } -solana-zk-token-sdk = { path = "../../zk-token-sdk", version = "=1.14.5" } +solana-measure = { path = "../../measure", version = "=1.14.6" } +solana-metrics = { path = "../../metrics", version = "=1.14.6" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.6" } +solana-sdk = { path = "../../sdk", version = "=1.14.6" } +solana-zk-token-sdk = { path = "../../zk-token-sdk", version = "=1.14.6" } solana_rbpf = "=0.2.31" thiserror = "1.0" [dev-dependencies] rand = "0.7.3" -solana-runtime = { path = "../../runtime", version = "=1.14.5" } +solana-runtime = { path = "../../runtime", version = "=1.14.6" } [lib] crate-type = ["lib"] diff --git a/programs/bpf_loader/gen-syscall-list/Cargo.toml b/programs/bpf_loader/gen-syscall-list/Cargo.toml index bfa394a335f6a2..7c199105e406e9 100644 --- a/programs/bpf_loader/gen-syscall-list/Cargo.toml +++ b/programs/bpf_loader/gen-syscall-list/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "gen-syscall-list" -version = "1.14.5" +version = "1.14.6" edition = "2021" license = "Apache-2.0" publish = false diff --git a/programs/compute-budget/Cargo.toml b/programs/compute-budget/Cargo.toml index 57e9d30dc18916..7af84d0b44764e 100644 --- a/programs/compute-budget/Cargo.toml +++ b/programs/compute-budget/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "solana-compute-budget-program" description = "Solana Compute Budget program" -version = "1.14.5" +version = "1.14.6" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-compute-budget-program" repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ license = "Apache-2.0" edition = "2021" [dependencies] -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.5" } -solana-sdk = { path = "../../sdk", version = "=1.14.5" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.6" } +solana-sdk = { path = "../../sdk", version = "=1.14.6" } [lib] crate-type = ["lib"] diff --git a/programs/config/Cargo.toml b/programs/config/Cargo.toml index a7b779faacf76e..06969cd24c257f 100644 --- a/programs/config/Cargo.toml +++ b/programs/config/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-config-program" -version = "1.14.5" +version = "1.14.6" description = "Solana Config program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,11 +14,11 @@ bincode = "1.3.3" chrono = { version = "0.4.11", features = ["serde"] } serde = "1.0.138" serde_derive = "1.0.103" -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.5" } -solana-sdk = { path = "../../sdk", version = "=1.14.5" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.6" } +solana-sdk = { path = "../../sdk", version = "=1.14.6" } [dev-dependencies] -solana-logger = { path = "../../logger", version = "=1.14.5" } +solana-logger = { path = "../../logger", version = "=1.14.6" } [lib] crate-type = ["lib"] diff --git a/programs/ed25519-tests/Cargo.toml b/programs/ed25519-tests/Cargo.toml index e9650006dcdb9d..6c502d9f319705 100644 --- a/programs/ed25519-tests/Cargo.toml +++ b/programs/ed25519-tests/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-ed25519-program-tests" -version = "1.14.5" +version = "1.14.6" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" @@ -12,8 +12,8 @@ publish = false assert_matches = "1.5.0" ed25519-dalek = "=1.0.1" rand = "0.7.0" -solana-program-test = { path = "../../program-test", version = "=1.14.5" } -solana-sdk = { path = "../../sdk", version = "=1.14.5" } +solana-program-test = { path = "../../program-test", version = "=1.14.6" } +solana-sdk = { path = "../../sdk", version = "=1.14.6" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/stake/Cargo.toml b/programs/stake/Cargo.toml index 6143c07c08f6fc..401c5e8c2a1e37 100644 --- a/programs/stake/Cargo.toml +++ b/programs/stake/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-stake-program" -version = "1.14.5" +version = "1.14.6" description = "Solana Stake program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -16,19 +16,19 @@ num-derive = "0.3" num-traits = "0.2" serde = "1.0.138" serde_derive = "1.0.103" -solana-config-program = { path = "../config", version = "=1.14.5" } -solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.5" } -solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.5" } -solana-metrics = { path = "../../metrics", version = "=1.14.5" } -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.5" } -solana-sdk = { path = "../../sdk", version = "=1.14.5" } -solana-vote-program = { path = "../vote", version = "=1.14.5" } +solana-config-program = { path = "../config", version = "=1.14.6" } +solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.6" } +solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.6" } +solana-metrics = { path = "../../metrics", version = "=1.14.6" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.6" } +solana-sdk = { path = "../../sdk", version = "=1.14.6" } +solana-vote-program = { path = "../vote", version = "=1.14.6" } thiserror = "1.0" [dev-dependencies] assert_matches = "1.5.0" proptest = "1.0" -solana-logger = { path = "../../logger", version = "=1.14.5" } +solana-logger = { path = "../../logger", version = "=1.14.6" } test-case = "2.1.0" [build-dependencies] diff --git a/programs/vote/Cargo.toml b/programs/vote/Cargo.toml index 2a9ba44ada04b6..205949cb69080c 100644 --- a/programs/vote/Cargo.toml +++ b/programs/vote/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-vote-program" -version = "1.14.5" +version = "1.14.6" description = "Solana Vote program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -16,17 +16,17 @@ num-derive = "0.3" num-traits = "0.2" serde = "1.0.138" serde_derive = "1.0.103" -solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.5" } -solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.5" } -solana-metrics = { path = "../../metrics", version = "=1.14.5" } -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.5" } -solana-sdk = { path = "../../sdk", version = "=1.14.5" } +solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.6" } +solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.6" } +solana-metrics = { path = "../../metrics", version = "=1.14.6" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.6" } +solana-sdk = { path = "../../sdk", version = "=1.14.6" } thiserror = "1.0" [dev-dependencies] itertools = "0.10.3" rand = "0.7.0" -solana-logger = { path = "../../logger", version = "=1.14.5" } +solana-logger = { path = "../../logger", version = "=1.14.6" } [build-dependencies] rustc_version = "0.4" diff --git a/programs/zk-token-proof/Cargo.toml b/programs/zk-token-proof/Cargo.toml index 5438a73bdbc015..3aecdf55e08745 100644 --- a/programs/zk-token-proof/Cargo.toml +++ b/programs/zk-token-proof/Cargo.toml @@ -3,7 +3,7 @@ name = "solana-zk-token-proof-program" description = "Solana Zk Token Proof Program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" -version = "1.14.5" +version = "1.14.6" license = "Apache-2.0" edition = "2021" @@ -12,6 +12,6 @@ bytemuck = { version = "1.11.0", features = ["derive"] } getrandom = { version = "0.1", features = ["dummy"] } num-derive = "0.3" num-traits = "0.2" -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.5" } -solana-sdk = { path = "../../sdk", version = "=1.14.5" } -solana-zk-token-sdk = { path = "../../zk-token-sdk", version = "=1.14.5" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.6" } +solana-sdk = { path = "../../sdk", version = "=1.14.6" } +solana-zk-token-sdk = { path = "../../zk-token-sdk", version = "=1.14.6" } diff --git a/rayon-threadlimit/Cargo.toml b/rayon-threadlimit/Cargo.toml index 7564ba15b3302d..aa354078f9c7ed 100644 --- a/rayon-threadlimit/Cargo.toml +++ b/rayon-threadlimit/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-rayon-threadlimit" -version = "1.14.5" +version = "1.14.6" description = "solana-rayon-threadlimit" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-rayon-threadlimit" diff --git a/rbpf-cli/Cargo.toml b/rbpf-cli/Cargo.toml index 0451e472ca12fa..9e5f62c8f9fbc1 100644 --- a/rbpf-cli/Cargo.toml +++ b/rbpf-cli/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "rbpf-cli" -version = "1.14.5" +version = "1.14.6" description = "CLI to test and analyze eBPF programs" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/rbpf" @@ -13,8 +13,8 @@ publish = false clap = { version = "3.1.5", features = ["cargo"] } serde = "1.0.138" serde_json = "1.0.81" -solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.5" } -solana-logger = { path = "../logger", version = "=1.14.5" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.5" } -solana-sdk = { path = "../sdk", version = "=1.14.5" } +solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.6" } +solana-logger = { path = "../logger", version = "=1.14.6" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.6" } +solana-sdk = { path = "../sdk", version = "=1.14.6" } solana_rbpf = "=0.2.31" diff --git a/remote-wallet/Cargo.toml b/remote-wallet/Cargo.toml index c12e720e7318b5..79757dd5631942 100644 --- a/remote-wallet/Cargo.toml +++ b/remote-wallet/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-remote-wallet" description = "Blockchain, Rebuilt for Scale" -version = "1.14.5" +version = "1.14.6" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -19,7 +19,7 @@ num-traits = { version = "0.2" } parking_lot = "0.12" qstring = "0.7.2" semver = "1.0" -solana-sdk = { path = "../sdk", version = "=1.14.5" } +solana-sdk = { path = "../sdk", version = "=1.14.6" } thiserror = "1.0" uriparse = "0.6.4" diff --git a/rpc-test/Cargo.toml b/rpc-test/Cargo.toml index 2e57f1d1551e00..97da79112fde0c 100644 --- a/rpc-test/Cargo.toml +++ b/rpc-test/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-rpc-test" -version = "1.14.5" +version = "1.14.6" description = "Solana RPC Test" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -19,17 +19,17 @@ log = "0.4.17" reqwest = { version = "0.11.11", default-features = false, features = ["blocking", "brotli", "deflate", "gzip", "rustls-tls", "json"] } serde = "1.0.138" serde_json = "1.0.81" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.5" } -solana-client = { path = "../client", version = "=1.14.5" } -solana-rpc = { path = "../rpc", version = "=1.14.5" } -solana-sdk = { path = "../sdk", version = "=1.14.5" } -solana-streamer = { path = "../streamer", version = "=1.14.5" } -solana-test-validator = { path = "../test-validator", version = "=1.14.5" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.5" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.6" } +solana-client = { path = "../client", version = "=1.14.6" } +solana-rpc = { path = "../rpc", version = "=1.14.6" } +solana-sdk = { path = "../sdk", version = "=1.14.6" } +solana-streamer = { path = "../streamer", version = "=1.14.6" } +solana-test-validator = { path = "../test-validator", version = "=1.14.6" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.6" } tokio = { version = "~1.14.1", features = ["full"] } [dev-dependencies] -solana-logger = { path = "../logger", version = "=1.14.5" } +solana-logger = { path = "../logger", version = "=1.14.6" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/rpc/Cargo.toml b/rpc/Cargo.toml index 75ff6eebd23dda..931b2b380fe54e 100644 --- a/rpc/Cargo.toml +++ b/rpc/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-rpc" -version = "1.14.5" +version = "1.14.6" description = "Solana RPC" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -29,26 +29,26 @@ serde = "1.0.138" serde_derive = "1.0.103" serde_json = "1.0.81" soketto = "0.7" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.5" } -solana-client = { path = "../client", version = "=1.14.5" } -solana-entry = { path = "../entry", version = "=1.14.5" } -solana-faucet = { path = "../faucet", version = "=1.14.5" } -solana-gossip = { path = "../gossip", version = "=1.14.5" } -solana-ledger = { path = "../ledger", version = "=1.14.5" } -solana-measure = { path = "../measure", version = "=1.14.5" } -solana-metrics = { path = "../metrics", version = "=1.14.5" } -solana-perf = { path = "../perf", version = "=1.14.5" } -solana-poh = { path = "../poh", version = "=1.14.5" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.5" } -solana-runtime = { path = "../runtime", version = "=1.14.5" } -solana-sdk = { path = "../sdk", version = "=1.14.5" } -solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.5" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.5" } -solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.5" } -solana-streamer = { path = "../streamer", version = "=1.14.5" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.5" } -solana-version = { path = "../version", version = "=1.14.5" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.5" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.6" } +solana-client = { path = "../client", version = "=1.14.6" } +solana-entry = { path = "../entry", version = "=1.14.6" } +solana-faucet = { path = "../faucet", version = "=1.14.6" } +solana-gossip = { path = "../gossip", version = "=1.14.6" } +solana-ledger = { path = "../ledger", version = "=1.14.6" } +solana-measure = { path = "../measure", version = "=1.14.6" } +solana-metrics = { path = "../metrics", version = "=1.14.6" } +solana-perf = { path = "../perf", version = "=1.14.6" } +solana-poh = { path = "../poh", version = "=1.14.6" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.6" } +solana-runtime = { path = "../runtime", version = "=1.14.6" } +solana-sdk = { path = "../sdk", version = "=1.14.6" } +solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.6" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.6" } +solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.6" } +solana-streamer = { path = "../streamer", version = "=1.14.6" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.6" } +solana-version = { path = "../version", version = "=1.14.6" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.6" } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } spl-token-2022 = { version = "=0.4.2", features = ["no-entrypoint"] } stream-cancel = "0.8.1" @@ -58,9 +58,9 @@ tokio-util = { version = "0.6", features = ["codec", "compat"] } [dev-dependencies] serial_test = "0.8.0" -solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.5" } -solana-net-utils = { path = "../net-utils", version = "=1.14.5" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.5" } +solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.6" } +solana-net-utils = { path = "../net-utils", version = "=1.14.6" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.6" } symlink = "0.1.0" [lib] diff --git a/runtime/Cargo.toml b/runtime/Cargo.toml index ffb2410fe39f75..3282e29ee9bff3 100644 --- a/runtime/Cargo.toml +++ b/runtime/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-runtime" -version = "1.14.5" +version = "1.14.6" description = "Solana runtime" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -39,21 +39,21 @@ rayon = "1.5.3" regex = "1.5.6" serde = { version = "1.0.138", features = ["rc"] } serde_derive = "1.0.103" -solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.5" } -solana-bucket-map = { path = "../bucket_map", version = "=1.14.5" } -solana-compute-budget-program = { path = "../programs/compute-budget", version = "=1.14.5" } -solana-config-program = { path = "../programs/config", version = "=1.14.5" } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.5" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.5" } -solana-measure = { path = "../measure", version = "=1.14.5" } -solana-metrics = { path = "../metrics", version = "=1.14.5" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.5" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.5" } -solana-sdk = { path = "../sdk", version = "=1.14.5" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.5" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.5" } -solana-zk-token-proof-program = { path = "../programs/zk-token-proof", version = "=1.14.5" } -solana-zk-token-sdk = { path = "../zk-token-sdk", version = "=1.14.5" } +solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.6" } +solana-bucket-map = { path = "../bucket_map", version = "=1.14.6" } +solana-compute-budget-program = { path = "../programs/compute-budget", version = "=1.14.6" } +solana-config-program = { path = "../programs/config", version = "=1.14.6" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.6" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.6" } +solana-measure = { path = "../measure", version = "=1.14.6" } +solana-metrics = { path = "../metrics", version = "=1.14.6" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.6" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.6" } +solana-sdk = { path = "../sdk", version = "=1.14.6" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.6" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.6" } +solana-zk-token-proof-program = { path = "../programs/zk-token-proof", version = "=1.14.6" } +solana-zk-token-sdk = { path = "../zk-token-sdk", version = "=1.14.6" } strum = { version = "0.24", features = ["derive"] } strum_macros = "0.24" symlink = "0.1.0" @@ -71,7 +71,7 @@ assert_matches = "1.5.0" ed25519-dalek = "=1.0.1" libsecp256k1 = "0.6.0" rand_chacha = "0.2.2" -solana-logger = { path = "../logger", version = "=1.14.5" } +solana-logger = { path = "../logger", version = "=1.14.6" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/runtime/store-tool/Cargo.toml b/runtime/store-tool/Cargo.toml index 2717ea1c5ed53b..dd2ab05c37cbdb 100644 --- a/runtime/store-tool/Cargo.toml +++ b/runtime/store-tool/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-store-tool" description = "Tool to inspect append vecs" -version = "1.14.5" +version = "1.14.6" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -12,9 +12,9 @@ publish = false [dependencies] clap = "2.33.1" log = { version = "0.4.17" } -solana-logger = { path = "../../logger", version = "=1.14.5" } -solana-runtime = { path = "..", version = "=1.14.5" } -solana-version = { path = "../../version", version = "=1.14.5" } +solana-logger = { path = "../../logger", version = "=1.14.6" } +solana-runtime = { path = "..", version = "=1.14.6" } +solana-version = { path = "../../version", version = "=1.14.6" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/sdk/Cargo.toml b/sdk/Cargo.toml index 130129b00f5841..e7dfbe988d7fc9 100644 --- a/sdk/Cargo.toml +++ b/sdk/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-sdk" -version = "1.14.5" +version = "1.14.6" description = "Solana SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -71,11 +71,11 @@ serde_derive = "1.0.103" serde_json = { version = "1.0.81", optional = true } sha2 = "0.10.2" sha3 = { version = "0.10.1", optional = true } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.5" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.5" } -solana-logger = { path = "../logger", version = "=1.14.5", optional = true } -solana-program = { path = "program", version = "=1.14.5" } -solana-sdk-macro = { path = "macro", version = "=1.14.5" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.6" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.6" } +solana-logger = { path = "../logger", version = "=1.14.6", optional = true } +solana-program = { path = "program", version = "=1.14.6" } +solana-sdk-macro = { path = "macro", version = "=1.14.6" } thiserror = "1.0" uriparse = "0.6.4" wasm-bindgen = "0.2" diff --git a/sdk/cargo-build-bpf/Cargo.toml b/sdk/cargo-build-bpf/Cargo.toml index d5603791e50975..bfcb519d61577e 100644 --- a/sdk/cargo-build-bpf/Cargo.toml +++ b/sdk/cargo-build-bpf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-cargo-build-bpf" -version = "1.14.5" +version = "1.14.6" description = "Compile a local package and all of its dependencies using the Solana SBF SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,7 +12,7 @@ publish = false [dependencies] cargo_metadata = "0.15.0" clap = { version = "3.1.5", features = ["cargo", "env"] } -solana-sdk = { path = "..", version = "=1.14.5" } +solana-sdk = { path = "..", version = "=1.14.6" } [features] program = [] diff --git a/sdk/cargo-build-sbf/Cargo.toml b/sdk/cargo-build-sbf/Cargo.toml index fa1fb8e93a21eb..08217b75870f7a 100644 --- a/sdk/cargo-build-sbf/Cargo.toml +++ b/sdk/cargo-build-sbf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-cargo-build-sbf" -version = "1.14.5" +version = "1.14.6" description = "Compile a local package and all of its dependencies using the Solana SBF SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -15,9 +15,9 @@ cargo_metadata = "0.15.0" clap = { version = "3.1.5", features = ["cargo", "env"] } log = { version = "0.4.14", features = ["std"] } regex = "1.5.6" -solana-download-utils = { path = "../../download-utils", version = "=1.14.5" } -solana-logger = { path = "../../logger", version = "=1.14.5" } -solana-sdk = { path = "..", version = "=1.14.5" } +solana-download-utils = { path = "../../download-utils", version = "=1.14.6" } +solana-logger = { path = "../../logger", version = "=1.14.6" } +solana-sdk = { path = "..", version = "=1.14.6" } tar = "0.4.38" [dev-dependencies] diff --git a/sdk/cargo-build-sbf/tests/crates/fail/Cargo.toml b/sdk/cargo-build-sbf/tests/crates/fail/Cargo.toml index 16b0d3c1f1a895..52a69e87418701 100644 --- a/sdk/cargo-build-sbf/tests/crates/fail/Cargo.toml +++ b/sdk/cargo-build-sbf/tests/crates/fail/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "fail" -version = "1.14.5" +version = "1.14.6" description = "Solana SBF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ edition = "2021" publish = false [dependencies] -solana-program = { path = "../../../../program", version = "=1.14.5" } +solana-program = { path = "../../../../program", version = "=1.14.6" } [lib] crate-type = ["cdylib"] diff --git a/sdk/cargo-build-sbf/tests/crates/noop/Cargo.toml b/sdk/cargo-build-sbf/tests/crates/noop/Cargo.toml index c2209674d5e399..557f4131e832f0 100644 --- a/sdk/cargo-build-sbf/tests/crates/noop/Cargo.toml +++ b/sdk/cargo-build-sbf/tests/crates/noop/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "noop" -version = "1.14.5" +version = "1.14.6" description = "Solana SBF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ edition = "2021" publish = false [dependencies] -solana-program = { path = "../../../../program", version = "=1.14.5" } +solana-program = { path = "../../../../program", version = "=1.14.6" } [lib] crate-type = ["cdylib"] diff --git a/sdk/cargo-test-bpf/Cargo.toml b/sdk/cargo-test-bpf/Cargo.toml index bd9b2e7c909170..49eed2da0b4a77 100644 --- a/sdk/cargo-test-bpf/Cargo.toml +++ b/sdk/cargo-test-bpf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-cargo-test-bpf" -version = "1.14.5" +version = "1.14.6" description = "Execute all unit and integration tests after building with the Solana SBF SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/sdk/cargo-test-sbf/Cargo.toml b/sdk/cargo-test-sbf/Cargo.toml index 04935e502d56d4..9fc74ce902e875 100644 --- a/sdk/cargo-test-sbf/Cargo.toml +++ b/sdk/cargo-test-sbf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-cargo-test-sbf" -version = "1.14.5" +version = "1.14.6" description = "Execute all unit and integration tests after building with the Solana SBF SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/sdk/gen-headers/Cargo.toml b/sdk/gen-headers/Cargo.toml index a9291a664dae8f..a916f8187a2dd5 100644 --- a/sdk/gen-headers/Cargo.toml +++ b/sdk/gen-headers/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "gen-headers" -version = "1.14.5" +version = "1.14.6" edition = "2021" license = "Apache-2.0" publish = false diff --git a/sdk/macro/Cargo.toml b/sdk/macro/Cargo.toml index 77394eb404e3c6..c5a8d712e3ec0e 100644 --- a/sdk/macro/Cargo.toml +++ b/sdk/macro/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-sdk-macro" -version = "1.14.5" +version = "1.14.6" description = "Solana SDK Macro" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/sdk/program/Cargo.toml b/sdk/program/Cargo.toml index 789614a0f84cd6..acb5821089d396 100644 --- a/sdk/program/Cargo.toml +++ b/sdk/program/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-program" -version = "1.14.5" +version = "1.14.6" description = "Solana Program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -31,9 +31,9 @@ serde_derive = "1.0" serde_json = "1.0" sha2 = "0.10.0" sha3 = "0.10.0" -solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.5" } -solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.5" } -solana-sdk-macro = { path = "../macro", version = "=1.14.5" } +solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.6" } +solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.6" } +solana-sdk-macro = { path = "../macro", version = "=1.14.6" } thiserror = "1.0" [target.'cfg(not(target_os = "solana"))'.dependencies] @@ -50,7 +50,7 @@ wasm-bindgen = "0.2" zeroize = { version = "1.3", default-features = true, features = ["zeroize_derive"] } [target.'cfg(not(target_os = "solana"))'.dev-dependencies] -solana-logger = { path = "../../logger", version = "=1.14.5" } +solana-logger = { path = "../../logger", version = "=1.14.6" } [target.'cfg(target_arch = "wasm32")'.dependencies] console_error_panic_hook = "0.1.7" diff --git a/send-transaction-service/Cargo.toml b/send-transaction-service/Cargo.toml index d54eb44e1476f4..8acc8220a278a3 100644 --- a/send-transaction-service/Cargo.toml +++ b/send-transaction-service/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-send-transaction-service" -version = "1.14.5" +version = "1.14.6" description = "Solana send transaction service" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,14 +12,14 @@ edition = "2021" [dependencies] crossbeam-channel = "0.5" log = "0.4.17" -solana-client = { path = "../client", version = "=1.14.5" } -solana-measure = { path = "../measure", version = "=1.14.5" } -solana-metrics = { path = "../metrics", version = "=1.14.5" } -solana-runtime = { path = "../runtime", version = "=1.14.5" } -solana-sdk = { path = "../sdk", version = "=1.14.5" } +solana-client = { path = "../client", version = "=1.14.6" } +solana-measure = { path = "../measure", version = "=1.14.6" } +solana-metrics = { path = "../metrics", version = "=1.14.6" } +solana-runtime = { path = "../runtime", version = "=1.14.6" } +solana-sdk = { path = "../sdk", version = "=1.14.6" } [dev-dependencies] -solana-logger = { path = "../logger", version = "=1.14.5" } +solana-logger = { path = "../logger", version = "=1.14.6" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/stake-accounts/Cargo.toml b/stake-accounts/Cargo.toml index 1649a24a4fe473..d0540a48c33cce 100644 --- a/stake-accounts/Cargo.toml +++ b/stake-accounts/Cargo.toml @@ -3,7 +3,7 @@ name = "solana-stake-accounts" description = "Blockchain, Rebuilt for Scale" authors = ["Solana Maintainers "] edition = "2021" -version = "1.14.5" +version = "1.14.6" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -11,15 +11,15 @@ documentation = "https://docs.rs/solana-stake-accounts" [dependencies] clap = "2.33.1" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.5" } -solana-cli-config = { path = "../cli-config", version = "=1.14.5" } -solana-client = { path = "../client", version = "=1.14.5" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.5" } -solana-sdk = { path = "../sdk", version = "=1.14.5" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.5" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.6" } +solana-cli-config = { path = "../cli-config", version = "=1.14.6" } +solana-client = { path = "../client", version = "=1.14.6" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.6" } +solana-sdk = { path = "../sdk", version = "=1.14.6" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.6" } [dev-dependencies] -solana-runtime = { path = "../runtime", version = "=1.14.5" } +solana-runtime = { path = "../runtime", version = "=1.14.6" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/storage-bigtable/Cargo.toml b/storage-bigtable/Cargo.toml index dbfcfa8c862d6f..fd9b1f049f487e 100644 --- a/storage-bigtable/Cargo.toml +++ b/storage-bigtable/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-storage-bigtable" -version = "1.14.5" +version = "1.14.6" description = "Solana Storage BigTable" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -27,10 +27,10 @@ prost-types = "0.11.0" serde = "1.0.138" serde_derive = "1.0.103" smpl_jwt = "0.7.1" -solana-metrics = { path = "../metrics", version = "=1.14.5" } -solana-sdk = { path = "../sdk", version = "=1.14.5" } -solana-storage-proto = { path = "../storage-proto", version = "=1.14.5" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.5" } +solana-metrics = { path = "../metrics", version = "=1.14.6" } +solana-sdk = { path = "../sdk", version = "=1.14.6" } +solana-storage-proto = { path = "../storage-proto", version = "=1.14.6" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.6" } thiserror = "1.0" tokio = "1" tonic = { version = "0.8.0", features = ["tls", "transport"] } diff --git a/storage-bigtable/build-proto/Cargo.lock b/storage-bigtable/build-proto/Cargo.lock index 53f019c26ccca8..6a089387799d5a 100644 --- a/storage-bigtable/build-proto/Cargo.lock +++ b/storage-bigtable/build-proto/Cargo.lock @@ -219,7 +219,7 @@ dependencies = [ [[package]] name = "proto" -version = "1.14.5" +version = "1.14.6" dependencies = [ "protobuf-src", "tonic-build", diff --git a/storage-bigtable/build-proto/Cargo.toml b/storage-bigtable/build-proto/Cargo.toml index 65b8a43a70f4bf..9cc8812760e421 100644 --- a/storage-bigtable/build-proto/Cargo.toml +++ b/storage-bigtable/build-proto/Cargo.toml @@ -7,7 +7,7 @@ license = "Apache-2.0" name = "proto" publish = false repository = "https://github.com/solana-labs/solana" -version = "1.14.5" +version = "1.14.6" [workspace] diff --git a/storage-proto/Cargo.toml b/storage-proto/Cargo.toml index 38e2d1962e8b18..d34be3644f5018 100644 --- a/storage-proto/Cargo.toml +++ b/storage-proto/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-storage-proto" -version = "1.14.5" +version = "1.14.6" description = "Solana Storage Protobuf Definitions" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,9 +14,9 @@ bincode = "1.3.3" bs58 = "0.4.0" prost = "0.11.0" serde = "1.0.138" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.5" } -solana-sdk = { path = "../sdk", version = "=1.14.5" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.5" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.6" } +solana-sdk = { path = "../sdk", version = "=1.14.6" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.6" } [dev-dependencies] enum-iterator = "0.8.1" diff --git a/streamer/Cargo.toml b/streamer/Cargo.toml index 3a72a8d2ac645b..2faf36bb0dd841 100644 --- a/streamer/Cargo.toml +++ b/streamer/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-streamer" -version = "1.14.5" +version = "1.14.6" description = "Solana Streamer" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -25,15 +25,15 @@ quinn = "0.8.3" rand = "0.7.0" rcgen = "0.9.2" rustls = { version = "0.20.6", features = ["dangerous_configuration"] } -solana-metrics = { path = "../metrics", version = "=1.14.5" } -solana-perf = { path = "../perf", version = "=1.14.5" } -solana-sdk = { path = "../sdk", version = "=1.14.5" } +solana-metrics = { path = "../metrics", version = "=1.14.6" } +solana-perf = { path = "../perf", version = "=1.14.6" } +solana-sdk = { path = "../sdk", version = "=1.14.6" } thiserror = "1.0" tokio = { version = "1", features = ["full"] } x509-parser = "0.14.0" [dev-dependencies] -solana-logger = { path = "../logger", version = "=1.14.5" } +solana-logger = { path = "../logger", version = "=1.14.6" } [lib] crate-type = ["lib"] diff --git a/sys-tuner/Cargo.toml b/sys-tuner/Cargo.toml index 077f1fb6ab2583..0aba1bc4cc9c62 100644 --- a/sys-tuner/Cargo.toml +++ b/sys-tuner/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-sys-tuner" description = "The solana cluster system tuner daemon" -version = "1.14.5" +version = "1.14.6" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,8 +14,8 @@ publish = true clap = "2.33.1" libc = "0.2.126" log = "0.4.17" -solana-logger = { path = "../logger", version = "=1.14.5" } -solana-version = { path = "../version", version = "=1.14.5" } +solana-logger = { path = "../logger", version = "=1.14.6" } +solana-version = { path = "../version", version = "=1.14.6" } [target."cfg(unix)".dependencies] unix_socket2 = "0.5.4" diff --git a/test-validator/Cargo.toml b/test-validator/Cargo.toml index 5cec1b13dceeaa..ed59dc0c59ffc8 100644 --- a/test-validator/Cargo.toml +++ b/test-validator/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "solana-test-validator" description = "Blockchain, Rebuilt for Scale" -version = "1.14.5" +version = "1.14.6" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-test-validator" readme = "../README.md" @@ -15,19 +15,19 @@ base64 = "0.13.0" log = "0.4.17" serde_derive = "1.0.103" serde_json = "1.0.81" -solana-cli-output = { path = "../cli-output", version = "=1.14.5" } -solana-client = { path = "../client", version = "=1.14.5" } -solana-core = { path = "../core", version = "=1.14.5" } -solana-gossip = { path = "../gossip", version = "=1.14.5" } -solana-ledger = { path = "../ledger", version = "=1.14.5" } -solana-logger = { path = "../logger", version = "=1.14.5" } -solana-net-utils = { path = "../net-utils", version = "=1.14.5" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.5" } -solana-program-test = { path = "../program-test", version = "=1.14.5" } -solana-rpc = { path = "../rpc", version = "=1.14.5" } -solana-runtime = { path = "../runtime", version = "=1.14.5" } -solana-sdk = { path = "../sdk", version = "=1.14.5" } -solana-streamer = { path = "../streamer", version = "=1.14.5" } +solana-cli-output = { path = "../cli-output", version = "=1.14.6" } +solana-client = { path = "../client", version = "=1.14.6" } +solana-core = { path = "../core", version = "=1.14.6" } +solana-gossip = { path = "../gossip", version = "=1.14.6" } +solana-ledger = { path = "../ledger", version = "=1.14.6" } +solana-logger = { path = "../logger", version = "=1.14.6" } +solana-net-utils = { path = "../net-utils", version = "=1.14.6" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.6" } +solana-program-test = { path = "../program-test", version = "=1.14.6" } +solana-rpc = { path = "../rpc", version = "=1.14.6" } +solana-runtime = { path = "../runtime", version = "=1.14.6" } +solana-sdk = { path = "../sdk", version = "=1.14.6" } +solana-streamer = { path = "../streamer", version = "=1.14.6" } tokio = { version = "1", features = ["full"] } [package.metadata.docs.rs] diff --git a/tokens/Cargo.toml b/tokens/Cargo.toml index a2486c19a468ee..dc696e4253a265 100644 --- a/tokens/Cargo.toml +++ b/tokens/Cargo.toml @@ -3,7 +3,7 @@ name = "solana-tokens" description = "Blockchain, Rebuilt for Scale" authors = ["Solana Maintainers "] edition = "2021" -version = "1.14.5" +version = "1.14.6" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -19,14 +19,14 @@ indexmap = "1.9.1" indicatif = "0.16.2" pickledb = "0.4.1" serde = { version = "1.0", features = ["derive"] } -solana-account-decoder = { path = "../account-decoder", version = "=1.14.5" } -solana-clap-utils = { path = "../clap-utils", version = "=1.14.5" } -solana-cli-config = { path = "../cli-config", version = "=1.14.5" } -solana-client = { path = "../client", version = "=1.14.5" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.5" } -solana-sdk = { path = "../sdk", version = "=1.14.5" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.5" } -solana-version = { path = "../version", version = "=1.14.5" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.6" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.6" } +solana-cli-config = { path = "../cli-config", version = "=1.14.6" } +solana-client = { path = "../client", version = "=1.14.6" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.6" } +solana-sdk = { path = "../sdk", version = "=1.14.6" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.6" } +solana-version = { path = "../version", version = "=1.14.6" } spl-associated-token-account = { version = "=1.1.1" } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } tempfile = "3.3.0" @@ -34,6 +34,6 @@ thiserror = "1.0" [dev-dependencies] bincode = "1.3.3" -solana-logger = { path = "../logger", version = "=1.14.5" } -solana-streamer = { path = "../streamer", version = "=1.14.5" } -solana-test-validator = { path = "../test-validator", version = "=1.14.5" } +solana-logger = { path = "../logger", version = "=1.14.6" } +solana-streamer = { path = "../streamer", version = "=1.14.6" } +solana-test-validator = { path = "../test-validator", version = "=1.14.6" } diff --git a/transaction-dos/Cargo.toml b/transaction-dos/Cargo.toml index 7c6f54e39f1dea..2d49298b7de72e 100644 --- a/transaction-dos/Cargo.toml +++ b/transaction-dos/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-transaction-dos" -version = "1.14.5" +version = "1.14.6" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,23 +14,23 @@ clap = "2.33.1" log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.5" } -solana-cli = { path = "../cli", version = "=1.14.5" } -solana-client = { path = "../client", version = "=1.14.5" } -solana-core = { path = "../core", version = "=1.14.5" } -solana-faucet = { path = "../faucet", version = "=1.14.5" } -solana-gossip = { path = "../gossip", version = "=1.14.5" } -solana-logger = { path = "../logger", version = "=1.14.5" } -solana-measure = { path = "../measure", version = "=1.14.5" } -solana-net-utils = { path = "../net-utils", version = "=1.14.5" } -solana-runtime = { path = "../runtime", version = "=1.14.5" } -solana-sdk = { path = "../sdk", version = "=1.14.5" } -solana-streamer = { path = "../streamer", version = "=1.14.5" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.5" } -solana-version = { path = "../version", version = "=1.14.5" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.6" } +solana-cli = { path = "../cli", version = "=1.14.6" } +solana-client = { path = "../client", version = "=1.14.6" } +solana-core = { path = "../core", version = "=1.14.6" } +solana-faucet = { path = "../faucet", version = "=1.14.6" } +solana-gossip = { path = "../gossip", version = "=1.14.6" } +solana-logger = { path = "../logger", version = "=1.14.6" } +solana-measure = { path = "../measure", version = "=1.14.6" } +solana-net-utils = { path = "../net-utils", version = "=1.14.6" } +solana-runtime = { path = "../runtime", version = "=1.14.6" } +solana-sdk = { path = "../sdk", version = "=1.14.6" } +solana-streamer = { path = "../streamer", version = "=1.14.6" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.6" } +solana-version = { path = "../version", version = "=1.14.6" } [dev-dependencies] -solana-local-cluster = { path = "../local-cluster", version = "=1.14.5" } +solana-local-cluster = { path = "../local-cluster", version = "=1.14.6" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/transaction-status/Cargo.toml b/transaction-status/Cargo.toml index 706664eb56947c..eca00e70f18cae 100644 --- a/transaction-status/Cargo.toml +++ b/transaction-status/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-transaction-status" -version = "1.14.5" +version = "1.14.6" description = "Solana transaction status types" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -20,12 +20,12 @@ log = "0.4.17" serde = "1.0.138" serde_derive = "1.0.103" serde_json = "1.0.81" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.5" } -solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.5" } -solana-measure = { path = "../measure", version = "=1.14.5" } -solana-metrics = { path = "../metrics", version = "=1.14.5" } -solana-sdk = { path = "../sdk", version = "=1.14.5" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.5" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.6" } +solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.6" } +solana-measure = { path = "../measure", version = "=1.14.6" } +solana-metrics = { path = "../metrics", version = "=1.14.6" } +solana-sdk = { path = "../sdk", version = "=1.14.6" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.6" } spl-associated-token-account = { version = "=1.1.1", features = ["no-entrypoint"] } spl-memo = { version = "=3.0.1", features = ["no-entrypoint"] } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } diff --git a/upload-perf/Cargo.toml b/upload-perf/Cargo.toml index ce109f14a8f8e6..9117b1c50a87f5 100644 --- a/upload-perf/Cargo.toml +++ b/upload-perf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-upload-perf" -version = "1.14.5" +version = "1.14.6" description = "Metrics Upload Utility" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -11,7 +11,7 @@ publish = false [dependencies] serde_json = "1.0.81" -solana-metrics = { path = "../metrics", version = "=1.14.5" } +solana-metrics = { path = "../metrics", version = "=1.14.6" } [[bin]] name = "solana-upload-perf" diff --git a/validator/Cargo.toml b/validator/Cargo.toml index 40a3b4e944b0b7..bb338a37eaba71 100644 --- a/validator/Cargo.toml +++ b/validator/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-validator" description = "Blockchain, Rebuilt for Scale" -version = "1.14.5" +version = "1.14.6" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -28,30 +28,30 @@ num_cpus = "1.13.1" rand = "0.7.0" serde = "1.0.138" serde_json = "1.0.81" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.5" } -solana-cli-config = { path = "../cli-config", version = "=1.14.5" } -solana-client = { path = "../client", version = "=1.14.5" } -solana-core = { path = "../core", version = "=1.14.5" } -solana-download-utils = { path = "../download-utils", version = "=1.14.5" } -solana-entry = { path = "../entry", version = "=1.14.5" } -solana-faucet = { path = "../faucet", version = "=1.14.5" } -solana-genesis-utils = { path = "../genesis-utils", version = "=1.14.5" } -solana-gossip = { path = "../gossip", version = "=1.14.5" } -solana-ledger = { path = "../ledger", version = "=1.14.5" } -solana-logger = { path = "../logger", version = "=1.14.5" } -solana-metrics = { path = "../metrics", version = "=1.14.5" } -solana-net-utils = { path = "../net-utils", version = "=1.14.5" } -solana-perf = { path = "../perf", version = "=1.14.5" } -solana-poh = { path = "../poh", version = "=1.14.5" } -solana-rpc = { path = "../rpc", version = "=1.14.5" } -solana-runtime = { path = "../runtime", version = "=1.14.5" } -solana-sdk = { path = "../sdk", version = "=1.14.5" } -solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.5" } -solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.5" } -solana-streamer = { path = "../streamer", version = "=1.14.5" } -solana-test-validator = { path = "../test-validator", version = "=1.14.5" } -solana-version = { path = "../version", version = "=1.14.5" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.5" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.6" } +solana-cli-config = { path = "../cli-config", version = "=1.14.6" } +solana-client = { path = "../client", version = "=1.14.6" } +solana-core = { path = "../core", version = "=1.14.6" } +solana-download-utils = { path = "../download-utils", version = "=1.14.6" } +solana-entry = { path = "../entry", version = "=1.14.6" } +solana-faucet = { path = "../faucet", version = "=1.14.6" } +solana-genesis-utils = { path = "../genesis-utils", version = "=1.14.6" } +solana-gossip = { path = "../gossip", version = "=1.14.6" } +solana-ledger = { path = "../ledger", version = "=1.14.6" } +solana-logger = { path = "../logger", version = "=1.14.6" } +solana-metrics = { path = "../metrics", version = "=1.14.6" } +solana-net-utils = { path = "../net-utils", version = "=1.14.6" } +solana-perf = { path = "../perf", version = "=1.14.6" } +solana-poh = { path = "../poh", version = "=1.14.6" } +solana-rpc = { path = "../rpc", version = "=1.14.6" } +solana-runtime = { path = "../runtime", version = "=1.14.6" } +solana-sdk = { path = "../sdk", version = "=1.14.6" } +solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.6" } +solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.6" } +solana-streamer = { path = "../streamer", version = "=1.14.6" } +solana-test-validator = { path = "../test-validator", version = "=1.14.6" } +solana-version = { path = "../version", version = "=1.14.6" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.6" } symlink = "0.1.0" [target.'cfg(not(target_env = "msvc"))'.dependencies] diff --git a/version/Cargo.toml b/version/Cargo.toml index 82ba623d3cf2aa..cca925b20ee15b 100644 --- a/version/Cargo.toml +++ b/version/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-version" -version = "1.14.5" +version = "1.14.6" description = "Solana Version" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,9 +14,9 @@ log = "0.4.17" semver = "1.0.10" serde = "1.0.138" serde_derive = "1.0.103" -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.5" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.5" } -solana-sdk = { path = "../sdk", version = "=1.14.5" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.6" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.6" } +solana-sdk = { path = "../sdk", version = "=1.14.6" } [lib] name = "solana_version" diff --git a/watchtower/Cargo.toml b/watchtower/Cargo.toml index ee4052fa19dd17..7ee4593cde4a63 100644 --- a/watchtower/Cargo.toml +++ b/watchtower/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-watchtower" description = "Blockchain, Rebuilt for Scale" -version = "1.14.5" +version = "1.14.6" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -13,15 +13,15 @@ documentation = "https://docs.rs/solana-watchtower" clap = "2.33.1" humantime = "2.0.1" log = "0.4.17" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.5" } -solana-cli-config = { path = "../cli-config", version = "=1.14.5" } -solana-cli-output = { path = "../cli-output", version = "=1.14.5" } -solana-client = { path = "../client", version = "=1.14.5" } -solana-logger = { path = "../logger", version = "=1.14.5" } -solana-metrics = { path = "../metrics", version = "=1.14.5" } -solana-notifier = { path = "../notifier", version = "=1.14.5" } -solana-sdk = { path = "../sdk", version = "=1.14.5" } -solana-version = { path = "../version", version = "=1.14.5" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.6" } +solana-cli-config = { path = "../cli-config", version = "=1.14.6" } +solana-cli-output = { path = "../cli-output", version = "=1.14.6" } +solana-client = { path = "../client", version = "=1.14.6" } +solana-logger = { path = "../logger", version = "=1.14.6" } +solana-metrics = { path = "../metrics", version = "=1.14.6" } +solana-notifier = { path = "../notifier", version = "=1.14.6" } +solana-sdk = { path = "../sdk", version = "=1.14.6" } +solana-version = { path = "../version", version = "=1.14.6" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/zk-token-sdk/Cargo.toml b/zk-token-sdk/Cargo.toml index 4d26f36d6688e8..0ff76db1aa45e2 100644 --- a/zk-token-sdk/Cargo.toml +++ b/zk-token-sdk/Cargo.toml @@ -3,7 +3,7 @@ name = "solana-zk-token-sdk" description = "Solana Zk Token SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" -version = "1.14.5" +version = "1.14.6" license = "Apache-2.0" edition = "2021" @@ -12,7 +12,7 @@ base64 = "0.13" bytemuck = { version = "1.11.0", features = ["derive"] } num-derive = "0.3" num-traits = "0.2" -solana-program = { path = "../sdk/program", version = "=1.14.5" } +solana-program = { path = "../sdk/program", version = "=1.14.6" } [target.'cfg(not(target_os = "solana"))'.dependencies] aes-gcm-siv = "0.10.3" @@ -29,7 +29,7 @@ rand = "0.7" serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" sha3 = "0.9" -solana-sdk = { path = "../sdk", version = "=1.14.5" } +solana-sdk = { path = "../sdk", version = "=1.14.6" } subtle = "2" thiserror = "1.0" zeroize = { version = "1.3", default-features = false, features = ["zeroize_derive"] } From 503d2385832496051f19ff3ee6665ef43c593674 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Wed, 5 Oct 2022 10:12:51 +0000 Subject: [PATCH 172/465] stats for staked/unstaked repair requests (backport #28215) (#28230) stats for staked/unstaked repair requests (#28215) (cherry picked from commit e3e888c0e0d24e61c9fb9a1a52e054e4fa57a11d) Co-authored-by: Jeff Biseda --- core/src/serve_repair.rs | 44 ++++++++++++++++++++++++++++++++++------ 1 file changed, 38 insertions(+), 6 deletions(-) diff --git a/core/src/serve_repair.rs b/core/src/serve_repair.rs index b9592c6df4f9e8..cf349a3b99f5b3 100644 --- a/core/src/serve_repair.rs +++ b/core/src/serve_repair.rs @@ -46,7 +46,7 @@ use { streamer::{PacketBatchReceiver, PacketBatchSender}, }, std::{ - collections::HashSet, + collections::{HashMap, HashSet}, net::{SocketAddr, UdpSocket}, sync::{ atomic::{AtomicBool, Ordering}, @@ -157,7 +157,10 @@ struct ServeRepairStats { dropped_requests_load_shed: usize, total_dropped_response_packets: usize, total_response_packets: usize, - total_response_bytes: usize, + total_response_bytes_staked: usize, + total_response_bytes_unstaked: usize, + handle_requests_staked: usize, + handle_requests_unstaked: usize, processed: usize, self_repair: usize, window_index: usize, @@ -475,6 +478,7 @@ impl ServeRepair { stats.total_requests += total_requests; let root_bank = self.bank_forks.read().unwrap().root_bank(); + let epoch_staked_nodes = root_bank.epoch_staked_nodes(root_bank.epoch()); for reqs in reqs_v { self.handle_packets( ping_cache, @@ -482,9 +486,9 @@ impl ServeRepair { blockstore, reqs, response_sender, - &root_bank, stats, data_budget, + &epoch_staked_nodes, ); } Ok(()) @@ -519,8 +523,24 @@ impl ServeRepair { stats.total_dropped_response_packets, i64 ), + ("handle_requests_staked", stats.handle_requests_staked, i64), + ( + "handle_requests_unstaked", + stats.handle_requests_unstaked, + i64 + ), + ("processed", stats.processed, i64), ("total_response_packets", stats.total_response_packets, i64), - ("total_response_bytes", stats.total_response_bytes, i64), + ( + "total_response_bytes_staked", + stats.total_response_bytes_staked, + i64 + ), + ( + "total_response_bytes_unstaked", + stats.total_response_bytes_unstaked, + i64 + ), ("self_repair", stats.self_repair, i64), ("window_index", stats.window_index, i64), ( @@ -670,9 +690,9 @@ impl ServeRepair { blockstore: &Blockstore, packet_batch: PacketBatch, response_sender: &PacketBatchSender, - _root_bank: &Bank, stats: &mut ServeRepairStats, data_budget: &DataBudget, + epoch_staked_nodes: &Option>>, ) { let identity_keypair = self.cluster_info.keypair().clone(); let my_id = identity_keypair.pubkey(); @@ -687,6 +707,15 @@ impl ServeRepair { } }; + let staked = epoch_staked_nodes + .as_ref() + .map(|nodes| nodes.contains_key(request.sender())) + .unwrap_or_default(); + match staked { + true => stats.handle_requests_staked += 1, + false => stats.handle_requests_unstaked += 1, + } + if request.sender() == &my_id { stats.self_repair += 1; continue; @@ -710,8 +739,11 @@ impl ServeRepair { let num_response_packets = rsp.len(); let num_response_bytes = rsp.iter().map(|p| p.meta.size).sum(); if data_budget.take(num_response_bytes) && response_sender.send(rsp).is_ok() { - stats.total_response_bytes += num_response_bytes; stats.total_response_packets += num_response_packets; + match staked { + true => stats.total_response_bytes_staked += num_response_bytes, + false => stats.total_response_bytes_unstaked += num_response_bytes, + } } else { stats.dropped_requests_outbound_bandwidth += packet_batch.len() - i; stats.total_dropped_response_packets += num_response_packets; From 11f1a5f662b9ccd5186fd2921d4b7ec09ff52ce1 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Wed, 5 Oct 2022 13:12:45 +0000 Subject: [PATCH 173/465] rolls out merkle shreds to ~5% of testnet (backport #28199) (#28226) rolls out merkle shreds to ~5% of testnet (#28199) (cherry picked from commit 9e7a0e7420a97f09fc57de7f6404c1ca8e599ee9) Co-authored-by: behzad nouri --- .../broadcast_stage/standard_broadcast_run.rs | 39 ++++++++++++++++--- ledger/src/shred/stats.rs | 12 ++++++ 2 files changed, 46 insertions(+), 5 deletions(-) diff --git a/core/src/broadcast_stage/standard_broadcast_run.rs b/core/src/broadcast_stage/standard_broadcast_run.rs index 37c6584069efc4..f58ab368e932c0 100644 --- a/core/src/broadcast_stage/standard_broadcast_run.rs +++ b/core/src/broadcast_stage/standard_broadcast_run.rs @@ -11,6 +11,7 @@ use { solana_entry::entry::Entry, solana_ledger::shred::{ProcessShredsStats, ReedSolomonCache, Shred, ShredFlags, Shredder}, solana_sdk::{ + genesis_config::ClusterType, signature::Keypair, timing::{duration_as_us, AtomicInterval}, }, @@ -60,6 +61,7 @@ impl StandardBroadcastRun { &mut self, keypair: &Keypair, max_ticks_in_slot: u8, + cluster_type: ClusterType, stats: &mut ProcessShredsStats, ) -> Vec { const SHRED_TICK_REFERENCE_MASK: u8 = ShredFlags::SHRED_TICK_REFERENCE_MASK.bits(); @@ -72,16 +74,22 @@ impl StandardBroadcastRun { let shredder = Shredder::new(state.slot, state.parent, reference_tick, self.shred_version) .unwrap(); + let merkle_variant = + should_use_merkle_variant(state.slot, cluster_type, self.shred_version); let (mut shreds, coding_shreds) = shredder.entries_to_shreds( keypair, &[], // entries true, // is_last_in_slot, state.next_shred_index, state.next_code_index, - false, // merkle_variant + merkle_variant, &self.reed_solomon_cache, stats, ); + if merkle_variant { + stats.num_merkle_data_shreds += shreds.len(); + stats.num_merkle_coding_shreds += coding_shreds.len(); + } self.report_and_reset_stats(true); self.unfinished_slot = None; shreds.extend(coding_shreds); @@ -97,6 +105,7 @@ impl StandardBroadcastRun { blockstore: &Blockstore, reference_tick: u8, is_slot_end: bool, + cluster_type: ClusterType, process_stats: &mut ProcessShredsStats, ) -> ( Vec, // data shreds @@ -122,16 +131,21 @@ impl StandardBroadcastRun { }; let shredder = Shredder::new(slot, parent_slot, reference_tick, self.shred_version).unwrap(); + let merkle_variant = should_use_merkle_variant(slot, cluster_type, self.shred_version); let (data_shreds, coding_shreds) = shredder.entries_to_shreds( keypair, entries, is_slot_end, next_shred_index, next_code_index, - false, // merkle_variant + merkle_variant, &self.reed_solomon_cache, process_stats, ); + if merkle_variant { + process_stats.num_merkle_data_shreds += data_shreds.len(); + process_stats.num_merkle_coding_shreds += coding_shreds.len(); + } let next_shred_index = match data_shreds.iter().map(Shred::index).max() { Some(index) => index + 1, None => next_shred_index, @@ -206,10 +220,15 @@ impl StandardBroadcastRun { let mut process_stats = ProcessShredsStats::default(); let mut to_shreds_time = Measure::start("broadcast_to_shreds"); + let cluster_type = bank.cluster_type(); // 1) Check if slot was interrupted - let prev_slot_shreds = - self.finish_prev_slot(keypair, bank.ticks_per_slot() as u8, &mut process_stats); + let prev_slot_shreds = self.finish_prev_slot( + keypair, + bank.ticks_per_slot() as u8, + cluster_type, + &mut process_stats, + ); // 2) Convert entries to shreds and coding shreds let is_last_in_slot = last_tick_height == bank.max_tick_height(); @@ -220,6 +239,7 @@ impl StandardBroadcastRun { blockstore, reference_tick as u8, is_last_in_slot, + cluster_type, &mut process_stats, ); // Insert the first data shred synchronously so that blockstore stores @@ -453,6 +473,10 @@ impl BroadcastRun for StandardBroadcastRun { } } +fn should_use_merkle_variant(slot: Slot, cluster_type: ClusterType, shred_version: u16) -> bool { + cluster_type == ClusterType::Testnet && shred_version == 24371 && (slot % 19 == 1) +} + #[cfg(test)] mod test { use { @@ -536,7 +560,12 @@ mod test { run.current_slot_and_parent = Some((4, 2)); // Slot 2 interrupted slot 1 - let shreds = run.finish_prev_slot(&keypair, 0, &mut ProcessShredsStats::default()); + let shreds = run.finish_prev_slot( + &keypair, + 0, + ClusterType::Devnet, + &mut ProcessShredsStats::default(), + ); let shred = shreds .get(0) .expect("Expected a shred that signals an interrupt"); diff --git a/ledger/src/shred/stats.rs b/ledger/src/shred/stats.rs index c48e4901bf6c90..ac6d8db77ed3b1 100644 --- a/ledger/src/shred/stats.rs +++ b/ledger/src/shred/stats.rs @@ -24,6 +24,8 @@ pub struct ProcessShredsStats { // If the blockstore already has shreds for the broadcast slot. pub num_extant_slots: u64, pub(crate) data_buffer_residual: usize, + pub num_merkle_data_shreds: usize, + pub num_merkle_coding_shreds: usize, } #[derive(Default, Debug, Eq, PartialEq)] @@ -66,6 +68,12 @@ impl ProcessShredsStats { ("receive_time", self.receive_elapsed, i64), ("num_data_shreds", num_data_shreds, i64), ("num_coding_shreds", num_coding_shreds, i64), + ("num_merkle_data_shreds", self.num_merkle_data_shreds, i64), + ( + "num_merkle_coding_shreds", + self.num_merkle_coding_shreds, + i64 + ), ("slot_broadcast_time", slot_broadcast_time, i64), ( "get_leader_schedule_time", @@ -140,6 +148,8 @@ impl AddAssign for ProcessShredsStats { num_data_shreds_hist, num_extant_slots, data_buffer_residual, + num_merkle_data_shreds, + num_merkle_coding_shreds, } = rhs; self.shredding_elapsed += shredding_elapsed; self.receive_elapsed += receive_elapsed; @@ -152,6 +162,8 @@ impl AddAssign for ProcessShredsStats { self.coalesce_elapsed += coalesce_elapsed; self.num_extant_slots += num_extant_slots; self.data_buffer_residual += data_buffer_residual; + self.num_merkle_data_shreds += num_merkle_data_shreds; + self.num_merkle_coding_shreds += num_merkle_coding_shreds; for (i, bucket) in self.num_data_shreds_hist.iter_mut().enumerate() { *bucket += num_data_shreds_hist[i]; } From c327064726a62407f3c39029b28082b9a61ec250 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Thu, 6 Oct 2022 14:04:47 +0000 Subject: [PATCH 174/465] cli: Add subcommands for address lookup tables (backport #27123) (#28255) * cli: Add subcommands for address lookup tables (#27123) * cli: Add subcommand for creating address lookup tables * cli: Add additional subcommands for address lookup tables * short commands (cherry picked from commit d8380e4d4abd6c639cf183f7b20989e1dadc0807) # Conflicts: # cli/Cargo.toml * fix conflicts Co-authored-by: Justin Starry --- Cargo.lock | 1 + cli-output/src/cli_output.rs | 69 +++ cli/Cargo.toml | 1 + cli/src/address_lookup_table.rs | 832 ++++++++++++++++++++++++++++++ cli/src/clap_app.rs | 5 +- cli/src/cli.rs | 14 +- cli/src/lib.rs | 1 + cli/tests/address_lookup_table.rs | 216 ++++++++ 8 files changed, 1135 insertions(+), 4 deletions(-) create mode 100644 cli/src/address_lookup_table.rs create mode 100644 cli/tests/address_lookup_table.rs diff --git a/Cargo.lock b/Cargo.lock index f5bb846cf7d0cd..86c7dcbbe9787b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4838,6 +4838,7 @@ dependencies = [ "serde_derive", "serde_json", "solana-account-decoder", + "solana-address-lookup-table-program", "solana-bpf-loader-program", "solana-clap-utils", "solana-cli-config", diff --git a/cli-output/src/cli_output.rs b/cli-output/src/cli_output.rs index f45c5713e4af29..645b7b66fbbb40 100644 --- a/cli-output/src/cli_output.rs +++ b/cli-output/src/cli_output.rs @@ -2111,6 +2111,75 @@ impl fmt::Display for CliUpgradeableBuffers { } } +#[derive(Serialize, Deserialize, Debug, PartialEq, Eq)] +#[serde(rename_all = "camelCase")] +pub struct CliAddressLookupTable { + pub lookup_table_address: String, + pub authority: Option, + pub deactivation_slot: u64, + pub last_extended_slot: u64, + pub addresses: Vec, +} +impl QuietDisplay for CliAddressLookupTable {} +impl VerboseDisplay for CliAddressLookupTable {} +impl fmt::Display for CliAddressLookupTable { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + writeln!(f)?; + writeln_name_value(f, "Lookup Table Address:", &self.lookup_table_address)?; + if let Some(authority) = &self.authority { + writeln_name_value(f, "Authority:", authority)?; + } else { + writeln_name_value(f, "Authority:", "None (frozen)")?; + } + if self.deactivation_slot == u64::MAX { + writeln_name_value(f, "Deactivation Slot:", "None (still active)")?; + } else { + writeln_name_value(f, "Deactivation Slot:", &self.deactivation_slot.to_string())?; + } + if self.last_extended_slot == 0 { + writeln_name_value(f, "Last Extended Slot:", "None (empty)")?; + } else { + writeln_name_value( + f, + "Last Extended Slot:", + &self.last_extended_slot.to_string(), + )?; + } + if self.addresses.is_empty() { + writeln_name_value(f, "Address Table Entries:", "None (empty)")?; + } else { + writeln!(f, "{}", style("Address Table Entries:".to_string()).bold())?; + writeln!(f)?; + writeln!( + f, + "{}", + style(format!(" {:<5} {}", "Index", "Address")).bold() + )?; + for (index, address) in self.addresses.iter().enumerate() { + writeln!(f, " {:<5} {}", index, address)?; + } + } + Ok(()) + } +} + +#[derive(Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +pub struct CliAddressLookupTableCreated { + pub lookup_table_address: String, + pub signature: String, +} +impl QuietDisplay for CliAddressLookupTableCreated {} +impl VerboseDisplay for CliAddressLookupTableCreated {} +impl fmt::Display for CliAddressLookupTableCreated { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + writeln!(f)?; + writeln_name_value(f, "Signature:", &self.signature)?; + writeln_name_value(f, "Lookup Table Address:", &self.lookup_table_address)?; + Ok(()) + } +} + #[derive(Debug, Default)] pub struct ReturnSignersConfig { pub dump_transaction_message: bool, diff --git a/cli/Cargo.toml b/cli/Cargo.toml index 5333ce9a6b50ce..9edc1947390393 100644 --- a/cli/Cargo.toml +++ b/cli/Cargo.toml @@ -28,6 +28,7 @@ serde = "1.0.138" serde_derive = "1.0.103" serde_json = "1.0.81" solana-account-decoder = { path = "../account-decoder", version = "=1.14.6" } +solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.6" } solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.6" } solana-clap-utils = { path = "../clap-utils", version = "=1.14.6" } solana-cli-config = { path = "../cli-config", version = "=1.14.6" } diff --git a/cli/src/address_lookup_table.rs b/cli/src/address_lookup_table.rs new file mode 100644 index 00000000000000..7f0fa9d3137897 --- /dev/null +++ b/cli/src/address_lookup_table.rs @@ -0,0 +1,832 @@ +use { + crate::cli::{CliCommand, CliCommandInfo, CliConfig, CliError, ProcessResult}, + clap::{App, AppSettings, Arg, ArgMatches, SubCommand}, + solana_address_lookup_table_program::{ + instruction::{ + close_lookup_table, create_lookup_table, deactivate_lookup_table, extend_lookup_table, + freeze_lookup_table, + }, + state::AddressLookupTable, + }, + solana_clap_utils::{self, input_parsers::*, input_validators::*, keypair::*}, + solana_cli_output::{CliAddressLookupTable, CliAddressLookupTableCreated, CliSignature}, + solana_client::{rpc_client::RpcClient, rpc_config::RpcSendTransactionConfig}, + solana_remote_wallet::remote_wallet::RemoteWalletManager, + solana_sdk::{ + account::from_account, clock::Clock, commitment_config::CommitmentConfig, message::Message, + pubkey::Pubkey, sysvar, transaction::Transaction, + }, + std::sync::Arc, +}; + +#[derive(Debug, PartialEq, Eq)] +pub enum AddressLookupTableCliCommand { + CreateLookupTable { + authority_signer_index: SignerIndex, + payer_signer_index: SignerIndex, + }, + FreezeLookupTable { + lookup_table_pubkey: Pubkey, + authority_signer_index: SignerIndex, + bypass_warning: bool, + }, + ExtendLookupTable { + lookup_table_pubkey: Pubkey, + authority_signer_index: SignerIndex, + payer_signer_index: SignerIndex, + new_addresses: Vec, + }, + DeactivateLookupTable { + lookup_table_pubkey: Pubkey, + authority_signer_index: SignerIndex, + bypass_warning: bool, + }, + CloseLookupTable { + lookup_table_pubkey: Pubkey, + authority_signer_index: SignerIndex, + recipient_pubkey: Pubkey, + }, + ShowLookupTable { + lookup_table_pubkey: Pubkey, + }, +} + +pub trait AddressLookupTableSubCommands { + fn address_lookup_table_subcommands(self) -> Self; +} + +impl AddressLookupTableSubCommands for App<'_, '_> { + fn address_lookup_table_subcommands(self) -> Self { + self.subcommand( + SubCommand::with_name("address-lookup-table") + .about("Address lookup table management") + .setting(AppSettings::SubcommandRequiredElseHelp) + .subcommand( + SubCommand::with_name("create") + .about("Create a lookup table") + .arg( + Arg::with_name("authority") + .long("authority") + .value_name("AUTHORITY_SIGNER") + .takes_value(true) + .validator(is_valid_signer) + .help("Lookup table authority [default: the default configured keypair]") + ) + .arg( + Arg::with_name("payer") + .long("payer") + .value_name("PAYER_SIGNER") + .takes_value(true) + .validator(is_valid_signer) + .help("Account that will pay rent fees for the created lookup table [default: the default configured keypair]") + ) + ) + .subcommand( + SubCommand::with_name("freeze") + .about("Permanently freezes a lookup table") + .arg( + Arg::with_name("lookup_table_address") + .index(1) + .value_name("LOOKUP_TABLE_ADDRESS") + .takes_value(true) + .required(true) + .validator(is_pubkey) + .help("Address of the lookup table") + ) + .arg( + Arg::with_name("authority") + .long("authority") + .value_name("AUTHORITY_SIGNER") + .takes_value(true) + .validator(is_valid_signer) + .help("Lookup table authority [default: the default configured keypair]") + ) + .arg( + Arg::with_name("bypass_warning") + .long("bypass-warning") + .takes_value(false) + .help("Bypass the permanent lookup table freeze warning"), + ), + ) + .subcommand( + SubCommand::with_name("extend") + .about("Append more addresses to a lookup table") + .arg( + Arg::with_name("lookup_table_address") + .index(1) + .value_name("LOOKUP_TABLE_ADDRESS") + .takes_value(true) + .required(true) + .validator(is_pubkey) + .help("Address of the lookup table") + ) + .arg( + Arg::with_name("authority") + .long("authority") + .value_name("AUTHORITY_SIGNER") + .takes_value(true) + .validator(is_valid_signer) + .help("Lookup table authority [default: the default configured keypair]") + ) + .arg( + Arg::with_name("payer") + .long("payer") + .value_name("PAYER_SIGNER") + .takes_value(true) + .validator(is_valid_signer) + .help("Account that will pay rent fees for the extended lookup table [default: the default configured keypair]") + ) + .arg( + Arg::with_name("addresses") + .long("addresses") + .value_name("ADDRESS_1,ADDRESS_2") + .takes_value(true) + .use_delimiter(true) + .required(true) + .validator(is_pubkey) + .help("Comma separated list of addresses to append") + ) + ) + .subcommand( + SubCommand::with_name("deactivate") + .about("Permanently deactivates a lookup table") + .arg( + Arg::with_name("lookup_table_address") + .index(1) + .value_name("LOOKUP_TABLE_ADDRESS") + .takes_value(true) + .required(true) + .help("Address of the lookup table") + ) + .arg( + Arg::with_name("authority") + .long("authority") + .value_name("AUTHORITY_SIGNER") + .takes_value(true) + .validator(is_valid_signer) + .help("Lookup table authority [default: the default configured keypair]") + ) + .arg( + Arg::with_name("bypass_warning") + .long("bypass-warning") + .takes_value(false) + .help("Bypass the permanent lookup table deactivation warning"), + ), + ) + .subcommand( + SubCommand::with_name("close") + .about("Permanently closes a lookup table") + .arg( + Arg::with_name("lookup_table_address") + .index(1) + .value_name("LOOKUP_TABLE_ADDRESS") + .takes_value(true) + .required(true) + .help("Address of the lookup table") + ) + .arg( + Arg::with_name("recipient") + .long("recipient") + .value_name("RECIPIENT_ADDRESS") + .takes_value(true) + .validator(is_pubkey) + .help("Address of the recipient account to deposit the closed account's lamports [default: the default configured keypair]") + ) + .arg( + Arg::with_name("authority") + .long("authority") + .value_name("AUTHORITY_SIGNER") + .takes_value(true) + .validator(is_valid_signer) + .help("Lookup table authority [default: the default configured keypair]") + ) + ) + .subcommand( + SubCommand::with_name("get") + .about("Display information about a lookup table") + .arg( + Arg::with_name("lookup_table_address") + .index(1) + .value_name("LOOKUP_TABLE_ADDRESS") + .takes_value(true) + .help("Address of the lookup table to show") + ) + ) + ) + } +} + +pub fn parse_address_lookup_table_subcommand( + matches: &ArgMatches<'_>, + default_signer: &DefaultSigner, + wallet_manager: &mut Option>, +) -> Result { + let (subcommand, sub_matches) = matches.subcommand(); + + let response = match (subcommand, sub_matches) { + ("create", Some(matches)) => { + let mut bulk_signers = vec![Some( + default_signer.signer_from_path(matches, wallet_manager)?, + )]; + + let authority_pubkey = if let Ok((authority_signer, Some(authority_pubkey))) = + signer_of(matches, "authority", wallet_manager) + { + bulk_signers.push(authority_signer); + Some(authority_pubkey) + } else { + Some( + default_signer + .signer_from_path(matches, wallet_manager)? + .pubkey(), + ) + }; + + let payer_pubkey = if let Ok((payer_signer, Some(payer_pubkey))) = + signer_of(matches, "payer", wallet_manager) + { + bulk_signers.push(payer_signer); + Some(payer_pubkey) + } else { + Some( + default_signer + .signer_from_path(matches, wallet_manager)? + .pubkey(), + ) + }; + + let signer_info = + default_signer.generate_unique_signers(bulk_signers, matches, wallet_manager)?; + + CliCommandInfo { + command: CliCommand::AddressLookupTable( + AddressLookupTableCliCommand::CreateLookupTable { + authority_signer_index: signer_info.index_of(authority_pubkey).unwrap(), + payer_signer_index: signer_info.index_of(payer_pubkey).unwrap(), + }, + ), + signers: signer_info.signers, + } + } + ("freeze", Some(matches)) => { + let lookup_table_pubkey = pubkey_of(matches, "lookup_table_address").unwrap(); + + let mut bulk_signers = vec![Some( + default_signer.signer_from_path(matches, wallet_manager)?, + )]; + + let authority_pubkey = if let Ok((authority_signer, Some(authority_pubkey))) = + signer_of(matches, "authority", wallet_manager) + { + bulk_signers.push(authority_signer); + Some(authority_pubkey) + } else { + Some( + default_signer + .signer_from_path(matches, wallet_manager)? + .pubkey(), + ) + }; + + let signer_info = + default_signer.generate_unique_signers(bulk_signers, matches, wallet_manager)?; + + CliCommandInfo { + command: CliCommand::AddressLookupTable( + AddressLookupTableCliCommand::FreezeLookupTable { + lookup_table_pubkey, + authority_signer_index: signer_info.index_of(authority_pubkey).unwrap(), + bypass_warning: matches.is_present("bypass_warning"), + }, + ), + signers: signer_info.signers, + } + } + ("extend", Some(matches)) => { + let lookup_table_pubkey = pubkey_of(matches, "lookup_table_address").unwrap(); + + let mut bulk_signers = vec![Some( + default_signer.signer_from_path(matches, wallet_manager)?, + )]; + + let authority_pubkey = if let Ok((authority_signer, Some(authority_pubkey))) = + signer_of(matches, "authority", wallet_manager) + { + bulk_signers.push(authority_signer); + Some(authority_pubkey) + } else { + Some( + default_signer + .signer_from_path(matches, wallet_manager)? + .pubkey(), + ) + }; + + let payer_pubkey = if let Ok((payer_signer, Some(payer_pubkey))) = + signer_of(matches, "payer", wallet_manager) + { + bulk_signers.push(payer_signer); + Some(payer_pubkey) + } else { + Some( + default_signer + .signer_from_path(matches, wallet_manager)? + .pubkey(), + ) + }; + + let new_addresses: Vec = values_of(matches, "addresses").unwrap(); + + let signer_info = + default_signer.generate_unique_signers(bulk_signers, matches, wallet_manager)?; + + CliCommandInfo { + command: CliCommand::AddressLookupTable( + AddressLookupTableCliCommand::ExtendLookupTable { + lookup_table_pubkey, + authority_signer_index: signer_info.index_of(authority_pubkey).unwrap(), + payer_signer_index: signer_info.index_of(payer_pubkey).unwrap(), + new_addresses, + }, + ), + signers: signer_info.signers, + } + } + ("deactivate", Some(matches)) => { + let lookup_table_pubkey = pubkey_of(matches, "lookup_table_address").unwrap(); + + let mut bulk_signers = vec![Some( + default_signer.signer_from_path(matches, wallet_manager)?, + )]; + + let authority_pubkey = if let Ok((authority_signer, Some(authority_pubkey))) = + signer_of(matches, "authority", wallet_manager) + { + bulk_signers.push(authority_signer); + Some(authority_pubkey) + } else { + Some( + default_signer + .signer_from_path(matches, wallet_manager)? + .pubkey(), + ) + }; + + let signer_info = + default_signer.generate_unique_signers(bulk_signers, matches, wallet_manager)?; + + CliCommandInfo { + command: CliCommand::AddressLookupTable( + AddressLookupTableCliCommand::DeactivateLookupTable { + lookup_table_pubkey, + authority_signer_index: signer_info.index_of(authority_pubkey).unwrap(), + bypass_warning: matches.is_present("bypass_warning"), + }, + ), + signers: signer_info.signers, + } + } + ("close", Some(matches)) => { + let lookup_table_pubkey = pubkey_of(matches, "lookup_table_address").unwrap(); + + let mut bulk_signers = vec![Some( + default_signer.signer_from_path(matches, wallet_manager)?, + )]; + + let authority_pubkey = if let Ok((authority_signer, Some(authority_pubkey))) = + signer_of(matches, "authority", wallet_manager) + { + bulk_signers.push(authority_signer); + Some(authority_pubkey) + } else { + Some( + default_signer + .signer_from_path(matches, wallet_manager)? + .pubkey(), + ) + }; + + let recipient_pubkey = if let Some(recipient_pubkey) = pubkey_of(matches, "recipient") { + recipient_pubkey + } else { + default_signer + .signer_from_path(matches, wallet_manager)? + .pubkey() + }; + + let signer_info = + default_signer.generate_unique_signers(bulk_signers, matches, wallet_manager)?; + + CliCommandInfo { + command: CliCommand::AddressLookupTable( + AddressLookupTableCliCommand::CloseLookupTable { + lookup_table_pubkey, + authority_signer_index: signer_info.index_of(authority_pubkey).unwrap(), + recipient_pubkey, + }, + ), + signers: signer_info.signers, + } + } + ("get", Some(matches)) => { + let lookup_table_pubkey = pubkey_of(matches, "lookup_table_address").unwrap(); + + CliCommandInfo { + command: CliCommand::AddressLookupTable( + AddressLookupTableCliCommand::ShowLookupTable { + lookup_table_pubkey, + }, + ), + signers: vec![], + } + } + _ => unreachable!(), + }; + Ok(response) +} + +pub fn process_address_lookup_table_subcommand( + rpc_client: Arc, + config: &CliConfig, + subcommand: &AddressLookupTableCliCommand, +) -> ProcessResult { + match subcommand { + AddressLookupTableCliCommand::CreateLookupTable { + authority_signer_index, + payer_signer_index, + } => process_create_lookup_table( + &rpc_client, + config, + *authority_signer_index, + *payer_signer_index, + ), + AddressLookupTableCliCommand::FreezeLookupTable { + lookup_table_pubkey, + authority_signer_index, + bypass_warning, + } => process_freeze_lookup_table( + &rpc_client, + config, + *lookup_table_pubkey, + *authority_signer_index, + *bypass_warning, + ), + AddressLookupTableCliCommand::ExtendLookupTable { + lookup_table_pubkey, + authority_signer_index, + payer_signer_index, + new_addresses, + } => process_extend_lookup_table( + &rpc_client, + config, + *lookup_table_pubkey, + *authority_signer_index, + *payer_signer_index, + new_addresses.to_vec(), + ), + AddressLookupTableCliCommand::DeactivateLookupTable { + lookup_table_pubkey, + authority_signer_index, + bypass_warning, + } => process_deactivate_lookup_table( + &rpc_client, + config, + *lookup_table_pubkey, + *authority_signer_index, + *bypass_warning, + ), + AddressLookupTableCliCommand::CloseLookupTable { + lookup_table_pubkey, + authority_signer_index, + recipient_pubkey, + } => process_close_lookup_table( + &rpc_client, + config, + *lookup_table_pubkey, + *authority_signer_index, + *recipient_pubkey, + ), + AddressLookupTableCliCommand::ShowLookupTable { + lookup_table_pubkey, + } => process_show_lookup_table(&rpc_client, config, *lookup_table_pubkey), + } +} + +fn process_create_lookup_table( + rpc_client: &RpcClient, + config: &CliConfig, + authority_signer_index: usize, + payer_signer_index: usize, +) -> ProcessResult { + let authority_signer = config.signers[authority_signer_index]; + let payer_signer = config.signers[payer_signer_index]; + + let get_clock_result = rpc_client + .get_account_with_commitment(&sysvar::clock::id(), CommitmentConfig::finalized())?; + let clock_account = get_clock_result.value.expect("Clock account doesn't exist"); + let clock: Clock = from_account(&clock_account).ok_or_else(|| { + CliError::RpcRequestError("Failed to deserialize clock sysvar".to_string()) + })?; + + let authority_address = authority_signer.pubkey(); + let payer_address = payer_signer.pubkey(); + let (create_lookup_table_ix, lookup_table_address) = + create_lookup_table(authority_address, payer_address, clock.slot); + + let blockhash = rpc_client.get_latest_blockhash()?; + let mut tx = Transaction::new_unsigned(Message::new( + &[create_lookup_table_ix], + Some(&config.signers[0].pubkey()), + )); + + tx.try_sign( + &[config.signers[0], authority_signer, payer_signer], + blockhash, + )?; + let result = rpc_client.send_and_confirm_transaction_with_spinner_and_config( + &tx, + config.commitment, + RpcSendTransactionConfig { + skip_preflight: false, + preflight_commitment: Some(config.commitment.commitment), + ..RpcSendTransactionConfig::default() + }, + ); + match result { + Err(err) => Err(format!("Create failed: {}", err).into()), + Ok(signature) => Ok(config + .output_format + .formatted_string(&CliAddressLookupTableCreated { + lookup_table_address: lookup_table_address.to_string(), + signature: signature.to_string(), + })), + } +} + +pub const FREEZE_LOOKUP_TABLE_WARNING: &str = "WARNING! \ +Once a lookup table is frozen, it can never be modified or unfrozen again. \ +To proceed with freezing, rerun the `freeze` command with the `--bypass-warning` flag"; + +fn process_freeze_lookup_table( + rpc_client: &RpcClient, + config: &CliConfig, + lookup_table_pubkey: Pubkey, + authority_signer_index: usize, + bypass_warning: bool, +) -> ProcessResult { + let authority_signer = config.signers[authority_signer_index]; + + let get_lookup_table_result = + rpc_client.get_account_with_commitment(&lookup_table_pubkey, config.commitment)?; + let lookup_table_account = get_lookup_table_result.value.ok_or_else(|| { + format!("Lookup table account {lookup_table_pubkey} not found, was it already closed?") + })?; + if !solana_address_lookup_table_program::check_id(&lookup_table_account.owner) { + return Err(format!( + "Lookup table account {lookup_table_pubkey} is not owned by the Address Lookup Table program", + ) + .into()); + } + + if !bypass_warning { + return Err(String::from(FREEZE_LOOKUP_TABLE_WARNING).into()); + } + + let authority_address = authority_signer.pubkey(); + let freeze_lookup_table_ix = freeze_lookup_table(lookup_table_pubkey, authority_address); + + let blockhash = rpc_client.get_latest_blockhash()?; + let mut tx = Transaction::new_unsigned(Message::new( + &[freeze_lookup_table_ix], + Some(&config.signers[0].pubkey()), + )); + + tx.try_sign(&[config.signers[0], authority_signer], blockhash)?; + let result = rpc_client.send_and_confirm_transaction_with_spinner_and_config( + &tx, + config.commitment, + RpcSendTransactionConfig { + skip_preflight: false, + preflight_commitment: Some(config.commitment.commitment), + ..RpcSendTransactionConfig::default() + }, + ); + match result { + Err(err) => Err(format!("Freeze failed: {}", err).into()), + Ok(signature) => Ok(config.output_format.formatted_string(&CliSignature { + signature: signature.to_string(), + })), + } +} + +fn process_extend_lookup_table( + rpc_client: &RpcClient, + config: &CliConfig, + lookup_table_pubkey: Pubkey, + authority_signer_index: usize, + payer_signer_index: usize, + new_addresses: Vec, +) -> ProcessResult { + let authority_signer = config.signers[authority_signer_index]; + let payer_signer = config.signers[payer_signer_index]; + + if new_addresses.is_empty() { + return Err("Lookup tables must be extended by at least one address".into()); + } + + let get_lookup_table_result = + rpc_client.get_account_with_commitment(&lookup_table_pubkey, config.commitment)?; + let lookup_table_account = get_lookup_table_result.value.ok_or_else(|| { + format!("Lookup table account {lookup_table_pubkey} not found, was it already closed?") + })?; + if !solana_address_lookup_table_program::check_id(&lookup_table_account.owner) { + return Err(format!( + "Lookup table account {lookup_table_pubkey} is not owned by the Address Lookup Table program", + ) + .into()); + } + + let authority_address = authority_signer.pubkey(); + let payer_address = payer_signer.pubkey(); + let extend_lookup_table_ix = extend_lookup_table( + lookup_table_pubkey, + authority_address, + Some(payer_address), + new_addresses, + ); + + let blockhash = rpc_client.get_latest_blockhash()?; + let mut tx = Transaction::new_unsigned(Message::new( + &[extend_lookup_table_ix], + Some(&config.signers[0].pubkey()), + )); + + tx.try_sign(&[config.signers[0], authority_signer], blockhash)?; + let result = rpc_client.send_and_confirm_transaction_with_spinner_and_config( + &tx, + config.commitment, + RpcSendTransactionConfig { + skip_preflight: false, + preflight_commitment: Some(config.commitment.commitment), + ..RpcSendTransactionConfig::default() + }, + ); + match result { + Err(err) => Err(format!("Extend failed: {}", err).into()), + Ok(signature) => Ok(config.output_format.formatted_string(&CliSignature { + signature: signature.to_string(), + })), + } +} + +pub const DEACTIVATE_LOOKUP_TABLE_WARNING: &str = "WARNING! \ +Once a lookup table is deactivated, it is no longer usable by transactions. +Deactivated lookup tables may only be closed and cannot be recreated at the same address. \ +To proceed with deactivation, rerun the `deactivate` command with the `--bypass-warning` flag"; + +fn process_deactivate_lookup_table( + rpc_client: &RpcClient, + config: &CliConfig, + lookup_table_pubkey: Pubkey, + authority_signer_index: usize, + bypass_warning: bool, +) -> ProcessResult { + let authority_signer = config.signers[authority_signer_index]; + + let get_lookup_table_result = + rpc_client.get_account_with_commitment(&lookup_table_pubkey, config.commitment)?; + let lookup_table_account = get_lookup_table_result.value.ok_or_else(|| { + format!("Lookup table account {lookup_table_pubkey} not found, was it already closed?") + })?; + if !solana_address_lookup_table_program::check_id(&lookup_table_account.owner) { + return Err(format!( + "Lookup table account {lookup_table_pubkey} is not owned by the Address Lookup Table program", + ) + .into()); + } + + if !bypass_warning { + return Err(String::from(DEACTIVATE_LOOKUP_TABLE_WARNING).into()); + } + + let authority_address = authority_signer.pubkey(); + let deactivate_lookup_table_ix = + deactivate_lookup_table(lookup_table_pubkey, authority_address); + + let blockhash = rpc_client.get_latest_blockhash()?; + let mut tx = Transaction::new_unsigned(Message::new( + &[deactivate_lookup_table_ix], + Some(&config.signers[0].pubkey()), + )); + + tx.try_sign(&[config.signers[0], authority_signer], blockhash)?; + let result = rpc_client.send_and_confirm_transaction_with_spinner_and_config( + &tx, + config.commitment, + RpcSendTransactionConfig { + skip_preflight: false, + preflight_commitment: Some(config.commitment.commitment), + ..RpcSendTransactionConfig::default() + }, + ); + match result { + Err(err) => Err(format!("Deactivate failed: {}", err).into()), + Ok(signature) => Ok(config.output_format.formatted_string(&CliSignature { + signature: signature.to_string(), + })), + } +} + +fn process_close_lookup_table( + rpc_client: &RpcClient, + config: &CliConfig, + lookup_table_pubkey: Pubkey, + authority_signer_index: usize, + recipient_pubkey: Pubkey, +) -> ProcessResult { + let authority_signer = config.signers[authority_signer_index]; + + let get_lookup_table_result = + rpc_client.get_account_with_commitment(&lookup_table_pubkey, config.commitment)?; + let lookup_table_account = get_lookup_table_result.value.ok_or_else(|| { + format!("Lookup table account {lookup_table_pubkey} not found, was it already closed?") + })?; + if !solana_address_lookup_table_program::check_id(&lookup_table_account.owner) { + return Err(format!( + "Lookup table account {lookup_table_pubkey} is not owned by the Address Lookup Table program", + ) + .into()); + } + + let lookup_table_account = AddressLookupTable::deserialize(&lookup_table_account.data)?; + if lookup_table_account.meta.deactivation_slot == u64::MAX { + return Err(format!( + "Lookup table account {lookup_table_pubkey} is not deactivated. Only deactivated lookup tables may be closed", + ) + .into()); + } + + let authority_address = authority_signer.pubkey(); + let close_lookup_table_ix = + close_lookup_table(lookup_table_pubkey, authority_address, recipient_pubkey); + + let blockhash = rpc_client.get_latest_blockhash()?; + let mut tx = Transaction::new_unsigned(Message::new( + &[close_lookup_table_ix], + Some(&config.signers[0].pubkey()), + )); + + tx.try_sign(&[config.signers[0], authority_signer], blockhash)?; + let result = rpc_client.send_and_confirm_transaction_with_spinner_and_config( + &tx, + config.commitment, + RpcSendTransactionConfig { + skip_preflight: false, + preflight_commitment: Some(config.commitment.commitment), + ..RpcSendTransactionConfig::default() + }, + ); + match result { + Err(err) => Err(format!("Close failed: {}", err).into()), + Ok(signature) => Ok(config.output_format.formatted_string(&CliSignature { + signature: signature.to_string(), + })), + } +} + +fn process_show_lookup_table( + rpc_client: &RpcClient, + config: &CliConfig, + lookup_table_pubkey: Pubkey, +) -> ProcessResult { + let get_lookup_table_result = + rpc_client.get_account_with_commitment(&lookup_table_pubkey, config.commitment)?; + let lookup_table_account = get_lookup_table_result.value.ok_or_else(|| { + format!("Lookup table account {lookup_table_pubkey} not found, was it already closed?") + })?; + if !solana_address_lookup_table_program::check_id(&lookup_table_account.owner) { + return Err(format!( + "Lookup table account {lookup_table_pubkey} is not owned by the Address Lookup Table program", + ) + .into()); + } + + let lookup_table_account = AddressLookupTable::deserialize(&lookup_table_account.data)?; + Ok(config + .output_format + .formatted_string(&CliAddressLookupTable { + lookup_table_address: lookup_table_pubkey.to_string(), + authority: lookup_table_account + .meta + .authority + .as_ref() + .map(ToString::to_string), + deactivation_slot: lookup_table_account.meta.deactivation_slot, + last_extended_slot: lookup_table_account.meta.last_extended_slot, + addresses: lookup_table_account + .addresses + .iter() + .map(ToString::to_string) + .collect(), + })) +} diff --git a/cli/src/clap_app.rs b/cli/src/clap_app.rs index 3d48ed37160f93..1760b5161783f2 100644 --- a/cli/src/clap_app.rs +++ b/cli/src/clap_app.rs @@ -1,7 +1,7 @@ use { crate::{ - cli::*, cluster_query::*, feature::*, inflation::*, nonce::*, program::*, stake::*, - validator_info::*, vote::*, wallet::*, + address_lookup_table::AddressLookupTableSubCommands, cli::*, cluster_query::*, feature::*, + inflation::*, nonce::*, program::*, stake::*, validator_info::*, vote::*, wallet::*, }, clap::{App, AppSettings, Arg, ArgGroup, SubCommand}, solana_clap_utils::{self, input_validators::*, keypair::*}, @@ -130,6 +130,7 @@ pub fn get_clap_app<'ab, 'v>(name: &str, about: &'ab str, version: &'v str) -> A .inflation_subcommands() .nonce_subcommands() .program_subcommands() + .address_lookup_table_subcommands() .stake_subcommands() .validator_info_subcommands() .vote_subcommands() diff --git a/cli/src/cli.rs b/cli/src/cli.rs index 2a2397efd3e170..d202a2a69f66c8 100644 --- a/cli/src/cli.rs +++ b/cli/src/cli.rs @@ -1,7 +1,7 @@ use { crate::{ - clap_app::*, cluster_query::*, feature::*, inflation::*, nonce::*, program::*, - spend_utils::*, stake::*, validator_info::*, vote::*, wallet::*, + address_lookup_table::*, clap_app::*, cluster_query::*, feature::*, inflation::*, nonce::*, + program::*, spend_utils::*, stake::*, validator_info::*, vote::*, wallet::*, }, clap::{crate_description, crate_name, value_t_or_exit, ArgMatches, Shell}, log::*, @@ -440,6 +440,8 @@ pub enum CliCommand { StakeMinimumDelegation { use_lamports_unit: bool, }, + // Address lookup table commands + AddressLookupTable(AddressLookupTableCliCommand), } #[derive(Debug, PartialEq)] @@ -687,6 +689,9 @@ pub fn parse_command( ("program", Some(matches)) => { parse_program_subcommand(matches, default_signer, wallet_manager) } + ("address-lookup-table", Some(matches)) => { + parse_address_lookup_table_subcommand(matches, default_signer, wallet_manager) + } ("wait-for-max-stake", Some(matches)) => { let max_stake_percent = value_t_or_exit!(matches, "max_percent", f32); Ok(CliCommandInfo { @@ -1627,6 +1632,11 @@ pub fn process_command(config: &CliConfig) -> ProcessResult { derived_address_program_id.as_ref(), compute_unit_price.as_ref(), ), + + // Address Lookup Table Commands + CliCommand::AddressLookupTable(subcommand) => { + process_address_lookup_table_subcommand(rpc_client, config, subcommand) + } } } diff --git a/cli/src/lib.rs b/cli/src/lib.rs index 85d90869ff41b3..c271990b58b7ce 100644 --- a/cli/src/lib.rs +++ b/cli/src/lib.rs @@ -23,6 +23,7 @@ extern crate const_format; extern crate serde_derive; +pub mod address_lookup_table; pub mod checks; pub mod clap_app; pub mod cli; diff --git a/cli/tests/address_lookup_table.rs b/cli/tests/address_lookup_table.rs new file mode 100644 index 00000000000000..5d370d48c4eafd --- /dev/null +++ b/cli/tests/address_lookup_table.rs @@ -0,0 +1,216 @@ +use { + solana_cli::{ + address_lookup_table::{ + AddressLookupTableCliCommand, DEACTIVATE_LOOKUP_TABLE_WARNING, + FREEZE_LOOKUP_TABLE_WARNING, + }, + cli::{process_command, CliCommand, CliConfig}, + }, + solana_cli_output::{CliAddressLookupTable, CliAddressLookupTableCreated, OutputFormat}, + solana_faucet::faucet::run_local_faucet, + solana_sdk::{ + native_token::LAMPORTS_PER_SOL, + pubkey::Pubkey, + signature::{Keypair, Signer}, + }, + solana_streamer::socket::SocketAddrSpace, + solana_test_validator::TestValidator, + std::str::FromStr, +}; + +#[test] +fn test_cli_create_extend_and_freeze_address_lookup_table() { + let mint_keypair = Keypair::new(); + let mint_pubkey = mint_keypair.pubkey(); + let faucet_addr = run_local_faucet(mint_keypair, None); + let test_validator = + TestValidator::with_no_fees(mint_pubkey, Some(faucet_addr), SocketAddrSpace::Unspecified); + + let mut config = CliConfig::recent_for_tests(); + let keypair = Keypair::new(); + config.json_rpc_url = test_validator.rpc_url(); + config.signers = vec![&keypair]; + config.output_format = OutputFormat::JsonCompact; + + // Airdrop SOL for transaction fees + config.command = CliCommand::Airdrop { + pubkey: None, + lamports: 10 * LAMPORTS_PER_SOL, + }; + process_command(&config).unwrap(); + + // Create lookup table + config.command = + CliCommand::AddressLookupTable(AddressLookupTableCliCommand::CreateLookupTable { + authority_signer_index: 0, + payer_signer_index: 0, + }); + let response: CliAddressLookupTableCreated = + serde_json::from_str(&process_command(&config).unwrap()).unwrap(); + let lookup_table_pubkey = Pubkey::from_str(&response.lookup_table_address).unwrap(); + + // Validate created lookup table + { + config.command = + CliCommand::AddressLookupTable(AddressLookupTableCliCommand::ShowLookupTable { + lookup_table_pubkey, + }); + let response: CliAddressLookupTable = + serde_json::from_str(&process_command(&config).unwrap()).unwrap(); + assert_eq!( + response, + CliAddressLookupTable { + lookup_table_address: lookup_table_pubkey.to_string(), + authority: Some(keypair.pubkey().to_string()), + deactivation_slot: u64::MAX, + last_extended_slot: 0, + addresses: vec![], + } + ); + } + + // Extend lookup table + let new_addresses: Vec = (0..5).map(|_| Pubkey::new_unique()).collect(); + config.command = + CliCommand::AddressLookupTable(AddressLookupTableCliCommand::ExtendLookupTable { + lookup_table_pubkey, + authority_signer_index: 0, + payer_signer_index: 0, + new_addresses: new_addresses.clone(), + }); + process_command(&config).unwrap(); + + // Validate extended lookup table + { + config.command = + CliCommand::AddressLookupTable(AddressLookupTableCliCommand::ShowLookupTable { + lookup_table_pubkey, + }); + let CliAddressLookupTable { + addresses, + last_extended_slot, + .. + } = serde_json::from_str(&process_command(&config).unwrap()).unwrap(); + assert_eq!( + addresses + .into_iter() + .map(|address| Pubkey::from_str(&address).unwrap()) + .collect::>(), + new_addresses + ); + assert!(last_extended_slot > 0); + } + + // Freeze lookup table w/o bypass + config.command = + CliCommand::AddressLookupTable(AddressLookupTableCliCommand::FreezeLookupTable { + lookup_table_pubkey, + authority_signer_index: 0, + bypass_warning: false, + }); + let process_err = process_command(&config).unwrap_err(); + assert_eq!(process_err.to_string(), FREEZE_LOOKUP_TABLE_WARNING); + + // Freeze lookup table w/ bypass + config.command = + CliCommand::AddressLookupTable(AddressLookupTableCliCommand::FreezeLookupTable { + lookup_table_pubkey, + authority_signer_index: 0, + bypass_warning: true, + }); + process_command(&config).unwrap(); + + // Validate frozen lookup table + { + config.command = + CliCommand::AddressLookupTable(AddressLookupTableCliCommand::ShowLookupTable { + lookup_table_pubkey, + }); + let CliAddressLookupTable { authority, .. } = + serde_json::from_str(&process_command(&config).unwrap()).unwrap(); + assert!(authority.is_none()); + } +} + +#[test] +fn test_cli_create_and_deactivate_address_lookup_table() { + let mint_keypair = Keypair::new(); + let mint_pubkey = mint_keypair.pubkey(); + let faucet_addr = run_local_faucet(mint_keypair, None); + let test_validator = + TestValidator::with_no_fees(mint_pubkey, Some(faucet_addr), SocketAddrSpace::Unspecified); + + let mut config = CliConfig::recent_for_tests(); + let keypair = Keypair::new(); + config.json_rpc_url = test_validator.rpc_url(); + config.signers = vec![&keypair]; + config.output_format = OutputFormat::JsonCompact; + + // Airdrop SOL for transaction fees + config.command = CliCommand::Airdrop { + pubkey: None, + lamports: 10 * LAMPORTS_PER_SOL, + }; + process_command(&config).unwrap(); + + // Create lookup table + config.command = + CliCommand::AddressLookupTable(AddressLookupTableCliCommand::CreateLookupTable { + authority_signer_index: 0, + payer_signer_index: 0, + }); + let response: CliAddressLookupTableCreated = + serde_json::from_str(&process_command(&config).unwrap()).unwrap(); + let lookup_table_pubkey = Pubkey::from_str(&response.lookup_table_address).unwrap(); + + // Validate created lookup table + { + config.command = + CliCommand::AddressLookupTable(AddressLookupTableCliCommand::ShowLookupTable { + lookup_table_pubkey, + }); + let response: CliAddressLookupTable = + serde_json::from_str(&process_command(&config).unwrap()).unwrap(); + assert_eq!( + response, + CliAddressLookupTable { + lookup_table_address: lookup_table_pubkey.to_string(), + authority: Some(keypair.pubkey().to_string()), + deactivation_slot: u64::MAX, + last_extended_slot: 0, + addresses: vec![], + } + ); + } + + // Deactivate lookup table w/o bypass + config.command = + CliCommand::AddressLookupTable(AddressLookupTableCliCommand::DeactivateLookupTable { + lookup_table_pubkey, + authority_signer_index: 0, + bypass_warning: false, + }); + let process_err = process_command(&config).unwrap_err(); + assert_eq!(process_err.to_string(), DEACTIVATE_LOOKUP_TABLE_WARNING); + + // Deactivate lookup table w/ bypass + config.command = + CliCommand::AddressLookupTable(AddressLookupTableCliCommand::DeactivateLookupTable { + lookup_table_pubkey, + authority_signer_index: 0, + bypass_warning: true, + }); + process_command(&config).unwrap(); + + // Validate deactivated lookup table + { + config.command = + CliCommand::AddressLookupTable(AddressLookupTableCliCommand::ShowLookupTable { + lookup_table_pubkey, + }); + let CliAddressLookupTable { + deactivation_slot, .. + } = serde_json::from_str(&process_command(&config).unwrap()).unwrap(); + assert_ne!(deactivation_slot, u64::MAX); + } +} From 555d38246c477ee2d75c4501c5b93eea72676288 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Thu, 6 Oct 2022 16:42:10 +0000 Subject: [PATCH 175/465] RPC: Improve unsupported transaction error message (backport #28249) (#28254) RPC: Improve unsupported transaction error message (#28249) (cherry picked from commit db37d6b2ec57e917e09977e7155c32bb3e697ebb) Co-authored-by: Justin Starry --- client/src/rpc_custom_error.rs | 7 ++++++- rpc/src/rpc.rs | 6 +++++- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/client/src/rpc_custom_error.rs b/client/src/rpc_custom_error.rs index 95ef60293cae18..f0fb19e21da228 100644 --- a/client/src/rpc_custom_error.rs +++ b/client/src/rpc_custom_error.rs @@ -195,7 +195,12 @@ impl From for Error { }, RpcCustomError::UnsupportedTransactionVersion(version) => Self { code: ErrorCode::ServerError(JSON_RPC_SERVER_ERROR_UNSUPPORTED_TRANSACTION_VERSION), - message: format!("Transaction version ({}) is not supported", version), + message: format!( + "Transaction version ({0}) is not supported by the requesting client. \ + Please try the request again with the following configuration parameter: \ + \"maxSupportedTransactionVersion\": {0}", + version + ), data: None, }, RpcCustomError::MinContextSlotNotReached { context_slot } => Self { diff --git a/rpc/src/rpc.rs b/rpc/src/rpc.rs index 21475a02982546..43d7078914f1e6 100644 --- a/rpc/src/rpc.rs +++ b/rpc/src/rpc.rs @@ -6689,7 +6689,11 @@ pub mod tests { let response = parse_failure_response(rpc.handle_request_sync(request)); let expected = ( JSON_RPC_SERVER_ERROR_UNSUPPORTED_TRANSACTION_VERSION, - String::from("Transaction version (0) is not supported"), + String::from( + "Transaction version (0) is not supported by the requesting client. \ + Please try the request again with the following configuration parameter: \ + \"maxSupportedTransactionVersion\": 0", + ), ); assert_eq!(response, expected); } From 6a9a27a8da5e65fdb17d3b818b6ba6ce36045efe Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Thu, 6 Oct 2022 18:14:35 +0000 Subject: [PATCH 176/465] Update restart guide to include the use of `solana-ledger-tool latest-optimistic-slots` (backport #28267) (#28272) Update restart guide to include the use of `solana-ledger-tool latest-optimistic-slots` (#28267) (cherry picked from commit eea1d3a08892d4065d824edd7ef27d4ab1bad44a) Co-authored-by: Michael Vines --- docs/src/running-validator/restart-cluster.md | 20 +++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/docs/src/running-validator/restart-cluster.md b/docs/src/running-validator/restart-cluster.md index 6d1fec88b792d9..2353709e85beee 100644 --- a/docs/src/running-validator/restart-cluster.md +++ b/docs/src/running-validator/restart-cluster.md @@ -1,14 +1,26 @@ ## Restarting a cluster -### Step 1. Identify the slot that the cluster will be restarted at +### Step 1. Identify the latest optimistically confirmed slot for the cluster -The highest optimistically confirmed slot is the best slot to start from, which -can be found by looking for +In Solana 1.14 or greater, run the following command to output the latest +optimistically confirmed slot your validator observed: +```bash +solana-ledger-tool -l ledger latest-optimistic-slots +``` + +In Solana 1.13 or less, the latest optimistically confirmed can be found by looking for the more recent occurence of [this](https://github.com/solana-labs/solana/blob/0264147d42d506fb888f5c4c021a998e231a3e74/core/src/optimistic_confirmation_verifier.rs#L71) -metrics datapoint. Otherwise use the last root. +metrics datapoint. Call this slot `SLOT_X` +Note that it's possible that some validators observed an optimistically +confirmed slot that's greater than others before the outage. Survey the other +validators on the cluster to ensure that a greater optimistically confirmed slot +does not exist before proceeding. If a greater slot value is found use it +instead. + + ### Step 2. Stop the validator(s) ### Step 3. Optionally install the new solana version From 8751a7f24ae08ce4e0f862b13b5e8bc6e91fbaf7 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Thu, 6 Oct 2022 18:17:58 +0000 Subject: [PATCH 177/465] uses references for MerkleBranch root and proof fields (backport #28243) (#28262) uses references for MerkleBranch root and proof fields (#28243) (cherry picked from commit a6512016a77080380694155ec128f049fc0b8c01) Co-authored-by: behzad nouri --- ledger/src/shred/merkle.rs | 180 +++++++++++++++++++------------------ 1 file changed, 94 insertions(+), 86 deletions(-) diff --git a/ledger/src/shred/merkle.rs b/ledger/src/shred/merkle.rs index f4e394be9a8edb..c1dc661f982c00 100644 --- a/ledger/src/shred/merkle.rs +++ b/ledger/src/shred/merkle.rs @@ -29,8 +29,7 @@ use { }, static_assertions::const_assert_eq, std::{ - io::{Cursor, Seek, SeekFrom, Write}, - iter::repeat_with, + io::{Cursor, Write}, ops::Range, time::Instant, }, @@ -58,7 +57,6 @@ type MerkleProofEntry = [u8; 20]; pub struct ShredData { common_header: ShredCommonHeader, data_header: DataShredHeader, - merkle_branch: MerkleBranch, payload: Vec, } @@ -69,7 +67,6 @@ pub struct ShredData { pub struct ShredCode { common_header: ShredCommonHeader, coding_header: CodingShredHeader, - merkle_branch: MerkleBranch, payload: Vec, } @@ -79,30 +76,23 @@ pub(super) enum Shred { ShredData(ShredData), } -#[derive(Clone, Debug, Eq, PartialEq)] -struct MerkleBranch { - root: MerkleRoot, - proof: Vec, +struct MerkleBranch<'a> { + root: &'a MerkleRoot, + proof: Vec<&'a MerkleProofEntry>, } impl Shred { dispatch!(fn common_header(&self) -> &ShredCommonHeader); dispatch!(fn erasure_shard_as_slice(&self) -> Result<&[u8], Error>); dispatch!(fn erasure_shard_index(&self) -> Result); + dispatch!(fn merkle_root(&self) -> Result<&MerkleRoot, Error>); dispatch!(fn merkle_tree_node(&self) -> Result); dispatch!(fn payload(&self) -> &Vec); dispatch!(fn sanitize(&self, verify_merkle_proof: bool) -> Result<(), Error>); - dispatch!(fn set_merkle_branch(&mut self, merkle_branch: MerkleBranch) -> Result<(), Error>); + dispatch!(fn set_merkle_branch(&mut self, merkle_branch: &MerkleBranch) -> Result<(), Error>); dispatch!(fn set_signature(&mut self, signature: Signature)); dispatch!(fn signed_message(&self) -> &[u8]); - fn merkle_root(&self) -> &MerkleRoot { - match self { - Self::ShredCode(shred) => &shred.merkle_branch.root, - Self::ShredData(shred) => &shred.merkle_branch.root, - } - } - #[must_use] fn verify(&self, pubkey: &Pubkey) -> bool { let message = self.signed_message(); @@ -163,6 +153,27 @@ impl ShredData { Some(offset..offset + SIZE_OF_MERKLE_ROOT) } + fn merkle_root(&self) -> Result<&MerkleRoot, Error> { + let proof_size = self.proof_size()?; + let offset = Self::SIZE_OF_HEADERS + Self::capacity(proof_size)?; + let root = self + .payload + .get(offset..offset + SIZE_OF_MERKLE_ROOT) + .ok_or(Error::InvalidPayloadSize(self.payload.len()))?; + Ok(<&MerkleRoot>::try_from(root).unwrap()) + } + + fn merkle_branch(&self) -> Result { + let proof_size = self.proof_size()?; + let offset = Self::SIZE_OF_HEADERS + Self::capacity(proof_size)?; + let size = SIZE_OF_MERKLE_ROOT + usize::from(proof_size) * SIZE_OF_MERKLE_PROOF_ENTRY; + MerkleBranch::try_from( + self.payload + .get(offset..offset + size) + .ok_or(Error::InvalidPayloadSize(self.payload.len()))?, + ) + } + fn merkle_tree_node(&self) -> Result { let chunk = self.erasure_shard_as_slice()?; Ok(hashv(&[MERKLE_HASH_PREFIX_LEAF, chunk])) @@ -171,7 +182,7 @@ impl ShredData { fn verify_merkle_proof(&self) -> Result { let node = self.merkle_tree_node()?; let index = self.erasure_shard_index()?; - Ok(verify_merkle_proof(index, node, &self.merkle_branch)) + Ok(verify_merkle_proof(index, node, &self.merkle_branch()?)) } fn from_recovered_shard(signature: &Signature, mut shard: Vec) -> Result { @@ -196,12 +207,11 @@ impl ShredData { Ok(Self { common_header, data_header, - merkle_branch: MerkleBranch::new_zeroed(proof_size), payload: shard, }) } - fn set_merkle_branch(&mut self, merkle_branch: MerkleBranch) -> Result<(), Error> { + fn set_merkle_branch(&mut self, merkle_branch: &MerkleBranch) -> Result<(), Error> { let proof_size = self.proof_size()?; if merkle_branch.proof.len() != usize::from(proof_size) { return Err(Error::InvalidMerkleProof); @@ -216,14 +226,13 @@ impl ShredData { for entry in &merkle_branch.proof { bincode::serialize_into(&mut cursor, entry)?; } - self.merkle_branch = merkle_branch; Ok(()) } fn sanitize(&self, verify_merkle_proof: bool) -> Result<(), Error> { match self.common_header.shred_variant { ShredVariant::MerkleData(proof_size) => { - if self.merkle_branch.proof.len() != usize::from(proof_size) { + if self.merkle_branch()?.proof.len() != usize::from(proof_size) { return Err(Error::InvalidProofSize(proof_size)); } } @@ -260,6 +269,27 @@ impl ShredCode { .ok_or(Error::InvalidProofSize(proof_size)) } + fn merkle_root(&self) -> Result<&MerkleRoot, Error> { + let proof_size = self.proof_size()?; + let offset = Self::SIZE_OF_HEADERS + Self::capacity(proof_size)?; + let root = self + .payload + .get(offset..offset + SIZE_OF_MERKLE_ROOT) + .ok_or(Error::InvalidPayloadSize(self.payload.len()))?; + Ok(<&MerkleRoot>::try_from(root).unwrap()) + } + + fn merkle_branch(&self) -> Result { + let proof_size = self.proof_size()?; + let offset = Self::SIZE_OF_HEADERS + Self::capacity(proof_size)?; + let size = SIZE_OF_MERKLE_ROOT + usize::from(proof_size) * SIZE_OF_MERKLE_PROOF_ENTRY; + MerkleBranch::try_from( + self.payload + .get(offset..offset + size) + .ok_or(Error::InvalidPayloadSize(self.payload.len()))?, + ) + } + fn merkle_tree_node(&self) -> Result { let proof_size = self.proof_size()?; let shard_size = Self::capacity(proof_size)?; @@ -273,7 +303,7 @@ impl ShredCode { fn verify_merkle_proof(&self) -> Result { let node = self.merkle_tree_node()?; let index = self.erasure_shard_index()?; - Ok(verify_merkle_proof(index, node, &self.merkle_branch)) + Ok(verify_merkle_proof(index, node, &self.merkle_branch()?)) } pub(super) fn get_signed_message_range(proof_size: u8) -> Option> { @@ -283,7 +313,7 @@ impl ShredCode { pub(super) fn erasure_mismatch(&self, other: &ShredCode) -> bool { shred_code::erasure_mismatch(self, other) - || self.merkle_branch.root != other.merkle_branch.root + || self.merkle_root().ok() != other.merkle_root().ok() || self.common_header.signature != other.common_header.signature } @@ -311,12 +341,11 @@ impl ShredCode { Ok(Self { common_header, coding_header, - merkle_branch: MerkleBranch::new_zeroed(proof_size), payload: shard, }) } - fn set_merkle_branch(&mut self, merkle_branch: MerkleBranch) -> Result<(), Error> { + fn set_merkle_branch(&mut self, merkle_branch: &MerkleBranch) -> Result<(), Error> { let proof_size = self.proof_size()?; if merkle_branch.proof.len() != usize::from(proof_size) { return Err(Error::InvalidMerkleProof); @@ -331,14 +360,13 @@ impl ShredCode { for entry in &merkle_branch.proof { bincode::serialize_into(&mut cursor, entry)?; } - self.merkle_branch = merkle_branch; Ok(()) } fn sanitize(&self, verify_merkle_proof: bool) -> Result<(), Error> { match self.common_header.shred_variant { ShredVariant::MerkleCode(proof_size) => { - if self.merkle_branch.proof.len() != usize::from(proof_size) { + if self.merkle_branch()?.proof.len() != usize::from(proof_size) { return Err(Error::InvalidProofSize(proof_size)); } } @@ -353,15 +381,6 @@ impl ShredCode { } } -impl MerkleBranch { - fn new_zeroed(proof_size: u8) -> Self { - Self { - root: MerkleRoot::default(), - proof: vec![MerkleProofEntry::default(); usize::from(proof_size)], - } - } -} - impl ShredTrait for ShredData { impl_shred_common!(); @@ -375,31 +394,20 @@ impl ShredTrait for ShredData { const SIZE_OF_HEADERS: usize = SIZE_OF_DATA_SHRED_HEADERS; fn from_payload(mut payload: Vec) -> Result { + // see: https://github.com/solana-labs/solana/pull/10109 if payload.len() < Self::SIZE_OF_PAYLOAD { return Err(Error::InvalidPayloadSize(payload.len())); } payload.truncate(Self::SIZE_OF_PAYLOAD); let mut cursor = Cursor::new(&payload[..]); let common_header: ShredCommonHeader = deserialize_from_with_limit(&mut cursor)?; - let proof_size = match common_header.shred_variant { - ShredVariant::MerkleData(proof_size) => proof_size, - _ => return Err(Error::InvalidShredVariant), - }; + if !matches!(common_header.shred_variant, ShredVariant::MerkleData(_)) { + return Err(Error::InvalidShredVariant); + } let data_header = deserialize_from_with_limit(&mut cursor)?; - // Skip data buffer. - let data_buffer_size = Self::capacity(proof_size)?; - let data_buffer_size = i64::try_from(data_buffer_size).unwrap(); - cursor.seek(SeekFrom::Current(data_buffer_size))?; - // Deserialize merkle branch. - let root = deserialize_from_with_limit(&mut cursor)?; - let proof = repeat_with(|| deserialize_from_with_limit(&mut cursor)) - .take(usize::from(proof_size)) - .collect::>()?; - let merkle_branch = MerkleBranch { root, proof }; let shred = Self { common_header, data_header, - merkle_branch, payload, }; shred.sanitize(/*verify_merkle_proof:*/ true)?; @@ -441,7 +449,7 @@ impl ShredTrait for ShredData { } fn signed_message(&self) -> &[u8] { - self.merkle_branch.root.as_ref() + self.merkle_root().map(AsRef::as_ref).unwrap_or_default() } } @@ -453,27 +461,18 @@ impl ShredTrait for ShredCode { fn from_payload(mut payload: Vec) -> Result { let mut cursor = Cursor::new(&payload[..]); let common_header: ShredCommonHeader = deserialize_from_with_limit(&mut cursor)?; - let proof_size = match common_header.shred_variant { - ShredVariant::MerkleCode(proof_size) => proof_size, - _ => return Err(Error::InvalidShredVariant), - }; + if !matches!(common_header.shred_variant, ShredVariant::MerkleCode(_)) { + return Err(Error::InvalidShredVariant); + } let coding_header = deserialize_from_with_limit(&mut cursor)?; - // Skip erasure code shard. - let shard_size = Self::capacity(proof_size)?; - let shard_size = i64::try_from(shard_size).unwrap(); - cursor.seek(SeekFrom::Current(shard_size))?; - // Deserialize merkle branch. - let root = deserialize_from_with_limit(&mut cursor)?; - let proof = repeat_with(|| deserialize_from_with_limit(&mut cursor)) - .take(usize::from(proof_size)) - .collect::>()?; - let merkle_branch = MerkleBranch { root, proof }; // see: https://github.com/solana-labs/solana/pull/10109 + if payload.len() < Self::SIZE_OF_PAYLOAD { + return Err(Error::InvalidPayloadSize(payload.len())); + } payload.truncate(Self::SIZE_OF_PAYLOAD); let shred = Self { common_header, coding_header, - merkle_branch, payload, }; shred.sanitize(/*verify_merkle_proof:*/ true)?; @@ -515,7 +514,7 @@ impl ShredTrait for ShredCode { } fn signed_message(&self) -> &[u8] { - self.merkle_branch.root.as_ref() + self.merkle_root().map(AsRef::as_ref).unwrap_or_default() } } @@ -549,6 +548,23 @@ impl ShredCodeTrait for ShredCode { } } +impl<'a> TryFrom<&'a [u8]> for MerkleBranch<'a> { + type Error = Error; + fn try_from(merkle_branch: &'a [u8]) -> Result { + if merkle_branch.len() < SIZE_OF_MERKLE_ROOT { + return Err(Error::InvalidMerkleProof); + } + let (root, proof) = merkle_branch.split_at(SIZE_OF_MERKLE_ROOT); + let root = <&MerkleRoot>::try_from(root).unwrap(); + let proof = proof + .chunks(SIZE_OF_MERKLE_PROOF_ENTRY) + .map(<&MerkleProofEntry>::try_from) + .collect::>() + .map_err(|_| Error::InvalidMerkleProof)?; + Ok(Self { root, proof }) + } +} + // Obtains parent's hash by joining two sibiling nodes in merkle tree. fn join_nodes, T: AsRef<[u8]>>(node: S, other: T) -> Hash { let node = &node.as_ref()[..SIZE_OF_MERKLE_PROOF_ENTRY]; @@ -594,11 +610,11 @@ fn make_merkle_branch( return None; } let mut offset = 0; - let mut proof = Vec::::new(); + let mut proof = Vec::<&MerkleProofEntry>::new(); while size > 1 { let node = tree.get(offset + (index ^ 1).min(size - 1))?; let entry = &node.as_ref()[..SIZE_OF_MERKLE_PROOF_ENTRY]; - proof.push(MerkleProofEntry::try_from(entry).unwrap()); + proof.push(<&MerkleProofEntry>::try_from(entry).unwrap()); offset += size; size = (size + 1) >> 1; index >>= 1; @@ -607,7 +623,7 @@ fn make_merkle_branch( return None; } let root = &tree.last()?.as_ref()[..SIZE_OF_MERKLE_ROOT]; - let root = MerkleRoot::try_from(root).unwrap(); + let root = <&MerkleRoot>::try_from(root).unwrap(); Some(MerkleBranch { root, proof }) } @@ -745,7 +761,7 @@ pub(super) fn recover( let merkle_root = MerkleRoot::try_from(merkle_root).unwrap(); for (index, (shred, mask)) in shreds.iter_mut().zip(&mask).enumerate() { if *mask { - if shred.merkle_root() != &merkle_root { + if shred.merkle_root()? != &merkle_root { return Err(Error::InvalidMerkleProof); } } else { @@ -754,7 +770,7 @@ pub(super) fn recover( if merkle_branch.proof.len() != usize::from(proof_size) { return Err(Error::InvalidMerkleProof); } - shred.set_merkle_branch(merkle_branch)?; + shred.set_merkle_branch(&merkle_branch)?; // Assert that shred payload is fully populated. debug_assert_eq!(shred, { let shred = shred.payload().clone(); @@ -803,7 +819,6 @@ pub(super) fn make_shreds_from_data( common_header: ShredCommonHeader, mut data_header: DataShredHeader, data: &[u8], - merkle_branch: MerkleBranch, ) -> ShredData { let size = ShredData::SIZE_OF_HEADERS + data.len(); let mut payload = vec![0u8; ShredData::SIZE_OF_PAYLOAD]; @@ -812,7 +827,6 @@ pub(super) fn make_shreds_from_data( ShredData { common_header, data_header, - merkle_branch, payload, } } @@ -847,7 +861,6 @@ pub(super) fn make_shreds_from_data( size: 0u16, } }; - let merkle_branch = MerkleBranch::new_zeroed(proof_size); // Split the data into erasure batches and initialize // data shreds from chunks of each batch. let mut shreds = Vec::::new(); @@ -855,7 +868,7 @@ pub(super) fn make_shreds_from_data( let (chunk, rest) = data.split_at(chunk_size); common_header.fec_set_index = common_header.index; for shred in chunk.chunks(data_buffer_size) { - let shred = new_shred_data(common_header, data_header, shred, merkle_branch.clone()); + let shred = new_shred_data(common_header, data_header, shred); shreds.push(shred); common_header.index += 1; } @@ -873,11 +886,10 @@ pub(super) fn make_shreds_from_data( .then(|| (proof_size, data_buffer_size)) }) .ok_or(Error::UnknownProofSize)?; - let merkle_branch = MerkleBranch::new_zeroed(proof_size); common_header.shred_variant = ShredVariant::MerkleData(proof_size); common_header.fec_set_index = common_header.index; for shred in data.chunks(data_buffer_size) { - let shred = new_shred_data(common_header, data_header, shred, merkle_branch.clone()); + let shred = new_shred_data(common_header, data_header, shred); shreds.push(shred); common_header.index += 1; } @@ -993,7 +1005,6 @@ fn make_erasure_batch( num_coding_shreds: num_coding_shreds as u16, position: 0, }; - let merkle_branch = MerkleBranch::new_zeroed(proof_size); for code in parity { let mut payload = vec![0u8; ShredCode::SIZE_OF_PAYLOAD]; let mut cursor = Cursor::new(&mut payload[..]); @@ -1003,7 +1014,6 @@ fn make_erasure_batch( let shred = ShredCode { common_header, coding_header, - merkle_branch: merkle_branch.clone(), payload, }; shreds.push(Shred::ShredCode(shred)); @@ -1028,7 +1038,7 @@ fn make_erasure_batch( let merkle_branch = make_merkle_branch(index, erasure_batch_size, &tree) .ok_or(Error::InvalidMerkleProof)?; debug_assert_eq!(merkle_branch.proof.len(), usize::from(proof_size)); - shred.set_merkle_branch(merkle_branch)?; + shred.set_merkle_branch(&merkle_branch)?; shred.set_signature(signature); debug_assert!(shred.verify(&keypair.pubkey())); debug_assert_matches!(shred.sanitize(/*verify_merkle_proof:*/ true), Ok(())); @@ -1128,7 +1138,7 @@ mod test { for index in 0..size { let branch = make_merkle_branch(index, size, &tree).unwrap(); let root = &tree.last().unwrap().as_ref()[..SIZE_OF_MERKLE_ROOT]; - assert_eq!(&branch.root, root); + assert_eq!(branch.root, root); assert!(verify_merkle_proof(index, nodes[index], &branch)); for i in (0..size).filter(|&i| i != index) { assert!(!verify_merkle_proof(i, nodes[i], &branch)); @@ -1207,7 +1217,6 @@ mod test { let shred = ShredData { common_header, data_header, - merkle_branch: MerkleBranch::new_zeroed(proof_size), payload, }; shreds.push(Shred::ShredData(shred)); @@ -1242,7 +1251,6 @@ mod test { let shred = ShredCode { common_header, coding_header, - merkle_branch: MerkleBranch::new_zeroed(proof_size), payload, }; shreds.push(Shred::ShredCode(shred)); @@ -1256,7 +1264,7 @@ mod test { for (index, shred) in shreds.iter_mut().enumerate() { let merkle_branch = make_merkle_branch(index, num_shreds, &tree).unwrap(); assert_eq!(merkle_branch.proof.len(), usize::from(proof_size)); - shred.set_merkle_branch(merkle_branch).unwrap(); + shred.set_merkle_branch(&merkle_branch).unwrap(); let signature = keypair.sign_message(shred.signed_message()); shred.set_signature(signature); assert!(shred.verify(&keypair.pubkey())); From 38f00ae62420678b684c802b12a77debd2ea6330 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Thu, 6 Oct 2022 19:48:56 +0000 Subject: [PATCH 178/465] Add metric to track number of slots processed in load_frozen_forks() (backport #28247) (#28268) Add metric to track number of slots processed in load_frozen_forks() (#28247) (cherry picked from commit 9e8f21ec264006493154d39b39fef2f30207fb89) Co-authored-by: steviez --- ledger/src/blockstore_processor.rs | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/ledger/src/blockstore_processor.rs b/ledger/src/blockstore_processor.rs index 2a42bac824f3c5..3af5475b0ba70c 100644 --- a/ledger/src/blockstore_processor.rs +++ b/ledger/src/blockstore_processor.rs @@ -815,11 +815,12 @@ pub fn process_blockstore_from_root( let mut timing = ExecuteTimings::default(); // Iterate and replay slots from blockstore starting from `start_slot` + let mut num_slots_processed = 0; if let Some(start_slot_meta) = blockstore .meta(start_slot) .unwrap_or_else(|_| panic!("Failed to get meta for slot {}", start_slot)) { - load_frozen_forks( + num_slots_processed = load_frozen_forks( bank_forks, start_slot, &start_slot_meta, @@ -854,6 +855,7 @@ pub fn process_blockstore_from_root( i64 ), ("slot", bank_forks.read().unwrap().root(), i64), + ("num_slots_processed", num_slots_processed, i64), ("forks", bank_forks.read().unwrap().banks().len(), i64), ); @@ -1352,11 +1354,14 @@ fn load_frozen_forks( cache_block_meta_sender: Option<&CacheBlockMetaSender>, timing: &mut ExecuteTimings, accounts_background_request_sender: &AbsRequestSender, -) -> result::Result<(), BlockstoreProcessorError> { +) -> result::Result { let recyclers = VerifyRecyclers::default(); let mut all_banks = HashMap::new(); let mut last_status_report = Instant::now(); let mut pending_slots = vec![]; + // The total number of slots processed + let mut total_slots_elapsed = 0; + // The number of slots processed between status report updates let mut slots_elapsed = 0; let mut txs = 0; let blockstore_max_root = blockstore.max_root(); @@ -1494,6 +1499,7 @@ fn load_frozen_forks( } slots_elapsed += 1; + total_slots_elapsed += 1; trace!( "Bank for {}slot {} is complete", @@ -1521,7 +1527,7 @@ fn load_frozen_forks( ); } - Ok(()) + Ok(total_slots_elapsed) } fn run_final_hash_calc(bank: &Bank, on_halt_store_hash_raw_data_for_debug: bool) { From 2acfc757d90b509d46cf413ef0ac56a5fc24c20b Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Thu, 6 Oct 2022 22:09:57 +0000 Subject: [PATCH 179/465] moves merkle proof size sanity check to Shred{Code,Data}::merkle_branch (backport #28266) (#28275) moves merkle proof size sanity check to Shred{Code,Data}::merkle_branch (#28266) (cherry picked from commit d9ef04772d21261b54a470fa817738c5c8ad09c3) Co-authored-by: behzad nouri --- ledger/src/shred/merkle.rs | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/ledger/src/shred/merkle.rs b/ledger/src/shred/merkle.rs index c1dc661f982c00..c7849b177c464c 100644 --- a/ledger/src/shred/merkle.rs +++ b/ledger/src/shred/merkle.rs @@ -167,11 +167,15 @@ impl ShredData { let proof_size = self.proof_size()?; let offset = Self::SIZE_OF_HEADERS + Self::capacity(proof_size)?; let size = SIZE_OF_MERKLE_ROOT + usize::from(proof_size) * SIZE_OF_MERKLE_PROOF_ENTRY; - MerkleBranch::try_from( + let merkle_branch = MerkleBranch::try_from( self.payload .get(offset..offset + size) .ok_or(Error::InvalidPayloadSize(self.payload.len()))?, - ) + )?; + if merkle_branch.proof.len() != usize::from(proof_size) { + return Err(Error::InvalidMerkleProof); + } + Ok(merkle_branch) } fn merkle_tree_node(&self) -> Result { @@ -230,13 +234,9 @@ impl ShredData { } fn sanitize(&self, verify_merkle_proof: bool) -> Result<(), Error> { - match self.common_header.shred_variant { - ShredVariant::MerkleData(proof_size) => { - if self.merkle_branch()?.proof.len() != usize::from(proof_size) { - return Err(Error::InvalidProofSize(proof_size)); - } - } - _ => return Err(Error::InvalidShredVariant), + let shred_variant = self.common_header.shred_variant; + if !matches!(shred_variant, ShredVariant::MerkleData(_)) { + return Err(Error::InvalidShredVariant); } if !verify_merkle_proof { debug_assert_matches!(self.verify_merkle_proof(), Ok(true)); @@ -283,11 +283,15 @@ impl ShredCode { let proof_size = self.proof_size()?; let offset = Self::SIZE_OF_HEADERS + Self::capacity(proof_size)?; let size = SIZE_OF_MERKLE_ROOT + usize::from(proof_size) * SIZE_OF_MERKLE_PROOF_ENTRY; - MerkleBranch::try_from( + let merkle_branch = MerkleBranch::try_from( self.payload .get(offset..offset + size) .ok_or(Error::InvalidPayloadSize(self.payload.len()))?, - ) + )?; + if merkle_branch.proof.len() != usize::from(proof_size) { + return Err(Error::InvalidMerkleProof); + } + Ok(merkle_branch) } fn merkle_tree_node(&self) -> Result { @@ -364,13 +368,9 @@ impl ShredCode { } fn sanitize(&self, verify_merkle_proof: bool) -> Result<(), Error> { - match self.common_header.shred_variant { - ShredVariant::MerkleCode(proof_size) => { - if self.merkle_branch()?.proof.len() != usize::from(proof_size) { - return Err(Error::InvalidProofSize(proof_size)); - } - } - _ => return Err(Error::InvalidShredVariant), + let shred_variant = self.common_header.shred_variant; + if !matches!(shred_variant, ShredVariant::MerkleCode(_)) { + return Err(Error::InvalidShredVariant); } if !verify_merkle_proof { debug_assert_matches!(self.verify_merkle_proof(), Ok(true)); From 2449e9113320afb97a18554f2298fc852d493a42 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Fri, 7 Oct 2022 09:09:41 +0000 Subject: [PATCH 180/465] docs: use devnet blocks and transactions as v0 transaction examples (backport #28288) (#28289) docs: use devnet blocks and transactions as v0 transaction examples (#28288) (cherry picked from commit c10c2f80d0624a8db4194bc097048472457ab1b1) Co-authored-by: Yihau Chen --- docs/src/integrations/exchange.md | 76 ++++++++++++++++--------------- 1 file changed, 39 insertions(+), 37 deletions(-) diff --git a/docs/src/integrations/exchange.md b/docs/src/integrations/exchange.md index 5dd71508387c56..faa5902315e243 100644 --- a/docs/src/integrations/exchange.md +++ b/docs/src/integrations/exchange.md @@ -252,12 +252,12 @@ that isn't necessary for tracking account balances. Set the "transactionDetails" parameter to speed up block fetching. ```bash -curl localhost:8899 -X POST -H 'Content-Type: application/json' -d '{ +curl https://api.devnet.solana.com -X POST -H 'Content-Type: application/json' -d '{ "jsonrpc": "2.0", "id": 1, "method": "getBlock", "params": [ - 148696677, + 166974442, { "encoding": "jsonParsed", "maxSupportedTransactionVersion": 0, @@ -271,26 +271,27 @@ curl localhost:8899 -X POST -H 'Content-Type: application/json' -d '{ { "jsonrpc": "2.0", "result": { - "blockHeight": 134239354, - "blockTime": 1662064341, - "blockhash": "AuPLyvFX2yA1aVFUqvFfyiB2Sxwu2McL8ALhwbU6w7er", - "parentSlot": 148696675, - "previousBlockhash": "AKu155zCvrgrPvcVBFyboAfY2GF33S3ZDkj2Pa8x19XM", + "blockHeight": 157201607, + "blockTime": 1665070281, + "blockhash": "HKhao674uvFc4wMK1Cm3UyuuGbKExdgPFjXQ5xtvsG3o", + "parentSlot": 166974441, + "previousBlockhash": "98CNLU4rsYa2HDUyp7PubU4DhwYJJhSX9v6pvE7SWsAo", "transactions": [ + ... (omit) { "meta": { "err": null, "fee": 5000, "postBalances": [ - 7161091286, - 2769675090, - 1 + 1110663066, + 1, + 1040000000 ], "postTokenBalances": [], "preBalances": [ - 8130576328, - 1800195048, - 1 + 1120668066, + 1, + 1030000000 ], "preTokenBalances": [], "status": { @@ -300,30 +301,31 @@ curl localhost:8899 -X POST -H 'Content-Type: application/json' -d '{ "transaction": { "accountKeys": [ { - "pubkey": "ogDsdvMKRRRMmsrT2hTPdkQBu1qY2z1jBDzgpi8HZri", + "pubkey": "9aE476sH92Vz7DMPyq5WLPkrKWivxeuTKEFKd2sZZcde", "signer": true, "source": "transaction", "writable": true }, { - "pubkey": "3M2b3tLji7rvscqrLAHMukYxDK2nB96Q9hwfV6QkdzBN", + "pubkey": "11111111111111111111111111111111", "signer": false, "source": "transaction", - "writable": true + "writable": false }, { - "pubkey": "11111111111111111111111111111111", + "pubkey": "G1wZ113tiUHdSpQEBcid8n1x8BAvcWZoZgxPKxgE5B7o", "signer": false, - "source": "transaction", - "writable": false + "source": "lookupTable", + "writable": true } ], "signatures": [ - "36Q383JMiqiobuPV9qBqy41xjMsVnQBm9rdZSdpbrLTGhSQDTGZJnocM4TQTVfUGfV2vEX9ZB3sex6wUBUWzjEvs" + "2CxNRsyRT7y88GBwvAB3hRg8wijMSZh3VNYXAdUesGSyvbRJbRR2q9G1KSEpQENmXHmmMLHiXumw4dp8CvzQMjrM" ] }, - "version": "legacy" - } + "version": 0 + }, + ... (omit) ] }, "id": 1 @@ -403,12 +405,12 @@ curl localhost:8899 -X POST -H "Content-Type: application/json" -d '{ [`getTransaction`](developing/clients/jsonrpc-api.md#gettransaction) request: ```bash -curl localhost:8899 -X POST -H 'Content-Type: application/json' -d '{ +curl https://api.devnet.solana.com -X POST -H 'Content-Type: application/json' -d '{ "jsonrpc":"2.0", "id":1, "method":"getTransaction", "params":[ - "4Cswku8E9sm8TVZ4kP4iHbwCQygMDx78SXSURBkJuJAaXCbL9eYM8RPS2BDooLd5ftML4JjQrohe4deJrFkVzPBa", + "2CxNRsyRT7y88GBwvAB3hRg8wijMSZh3VNYXAdUesGSyvbRJbRR2q9G1KSEpQENmXHmmMLHiXumw4dp8CvzQMjrM", { "encoding":"jsonParsed", "maxSupportedTransactionVersion":0 @@ -420,7 +422,7 @@ curl localhost:8899 -X POST -H 'Content-Type: application/json' -d '{ { "jsonrpc": "2.0", "result": { - "blockTime": 1660763773, + "blockTime": 1665070281, "meta": { "err": null, "fee": 5000, @@ -430,15 +432,15 @@ curl localhost:8899 -X POST -H 'Content-Type: application/json' -d '{ "Program 11111111111111111111111111111111 success" ], "postBalances": [ - 2078778739, + 1110663066, 1, - 26396753106 + 1040000000 ], "postTokenBalances": [], "preBalances": [ - 2078783740, + 1120668066, 1, - 26396753105 + 1030000000 ], "preTokenBalances": [], "rewards": [], @@ -446,7 +448,7 @@ curl localhost:8899 -X POST -H 'Content-Type: application/json' -d '{ "Ok": null } }, - "slot": 155713260, + "slot": 166974442, "transaction": { "message": { "accountKeys": [ @@ -463,7 +465,7 @@ curl localhost:8899 -X POST -H 'Content-Type: application/json' -d '{ "writable": false }, { - "pubkey": "2xNweLHLqrbx4zo1waDvgWJHgsUpPj8Y8icbAFeR4a8i", + "pubkey": "G1wZ113tiUHdSpQEBcid8n1x8BAvcWZoZgxPKxgE5B7o", "signer": false, "source": "lookupTable", "writable": true @@ -471,10 +473,10 @@ curl localhost:8899 -X POST -H 'Content-Type: application/json' -d '{ ], "addressTableLookups": [ { - "accountKey": "3LZbwptsCkv5R5uu1GNZKiX9SoC6egNG8NXg9zH5ZVM9", + "accountKey": "4syr5pBaboZy4cZyF6sys82uGD7jEvoAP2ZMaoich4fZ", "readonlyIndexes": [], "writableIndexes": [ - 1 + 3 ] } ], @@ -482,8 +484,8 @@ curl localhost:8899 -X POST -H 'Content-Type: application/json' -d '{ { "parsed": { "info": { - "destination": "2xNweLHLqrbx4zo1waDvgWJHgsUpPj8Y8icbAFeR4a8i", - "lamports": 1, + "destination": "G1wZ113tiUHdSpQEBcid8n1x8BAvcWZoZgxPKxgE5B7o", + "lamports": 10000000, "source": "9aE476sH92Vz7DMPyq5WLPkrKWivxeuTKEFKd2sZZcde" }, "type": "transfer" @@ -492,10 +494,10 @@ curl localhost:8899 -X POST -H 'Content-Type: application/json' -d '{ "programId": "11111111111111111111111111111111" } ], - "recentBlockhash": "9nLh3gmVhyjrh68UeV1rafyo8BFNyZtHSRUUjZYikveh" + "recentBlockhash": "BhhivDNgoy4L5tLtHb1s3TP19uUXqKiy4FfUR34d93eT" }, "signatures": [ - "4Cswku8E9sm8TVZ4kP4iHbwCQygMDx78SXSURBkJuJAaXCbL9eYM8RPS2BDooLd5ftML4JjQrohe4deJrFkVzPBa" + "2CxNRsyRT7y88GBwvAB3hRg8wijMSZh3VNYXAdUesGSyvbRJbRR2q9G1KSEpQENmXHmmMLHiXumw4dp8CvzQMjrM" ] }, "version": 0 From 07de91cf9838c83fea0cb2efc9a2a3904e13147d Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Fri, 7 Oct 2022 17:25:59 +0000 Subject: [PATCH 181/465] report additional transaction errors to metrics (backport #28285) (#28296) report additional transaction errors to metrics (#28285) (cherry picked from commit 03245736673d4736425e90c2302e24b626307289) Co-authored-by: Tao Zhu <82401714+taozhu-chicago@users.noreply.github.com> --- core/src/leader_slot_banking_stage_metrics.rs | 17 +++++++ runtime/src/bank.rs | 26 ++++++++-- runtime/src/transaction_error_metrics.rs | 47 +++++++++++++++++++ 3 files changed, 86 insertions(+), 4 deletions(-) diff --git a/core/src/leader_slot_banking_stage_metrics.rs b/core/src/leader_slot_banking_stage_metrics.rs index a189efde155b31..ed556991e1d560 100644 --- a/core/src/leader_slot_banking_stage_metrics.rs +++ b/core/src/leader_slot_banking_stage_metrics.rs @@ -109,6 +109,11 @@ struct LeaderSlotPacketCountMetrics { // `self.retrayble_errored_transaction_count`. account_lock_throttled_transactions_count: u64, + // total number of transactions that were excluded from the block because their write + // account locks exceed the limit. + // These transactions are not retried. + account_locks_limit_throttled_transactions_count: u64, + // total number of transactions that were excluded from the block because they were too expensive // according to the cost model. These transactions are added back to the buffered queue and are // already counted in `self.retrayble_errored_transaction_count`. @@ -207,6 +212,11 @@ impl LeaderSlotPacketCountMetrics { self.account_lock_throttled_transactions_count as i64, i64 ), + ( + "account_locks_limit_throttled_transactions_count", + self.account_locks_limit_throttled_transactions_count as i64, + i64 + ), ( "cost_model_throttled_transactions_count", self.cost_model_throttled_transactions_count as i64, @@ -459,6 +469,13 @@ impl LeaderSlotMetricsTracker { error_counters.account_in_use as u64 ); + saturating_add_assign!( + leader_slot_metrics + .packet_count_metrics + .account_locks_limit_throttled_transactions_count, + error_counters.too_many_account_locks as u64 + ); + saturating_add_assign!( leader_slot_metrics .packet_count_metrics diff --git a/runtime/src/bank.rs b/runtime/src/bank.rs index e2d048c2173120..03e7e916d7c435 100644 --- a/runtime/src/bank.rs +++ b/runtime/src/bank.rs @@ -4505,14 +4505,32 @@ impl Bank { .iter() .enumerate() .filter_map(|(index, res)| match res { + // following are retryable errors Err(TransactionError::AccountInUse) => { error_counters.account_in_use += 1; Some(index) } - Err(TransactionError::WouldExceedMaxBlockCostLimit) - | Err(TransactionError::WouldExceedMaxVoteCostLimit) - | Err(TransactionError::WouldExceedMaxAccountCostLimit) - | Err(TransactionError::WouldExceedAccountDataBlockLimit) => Some(index), + Err(TransactionError::WouldExceedMaxBlockCostLimit) => { + error_counters.would_exceed_max_block_cost_limit += 1; + Some(index) + } + Err(TransactionError::WouldExceedMaxVoteCostLimit) => { + error_counters.would_exceed_max_vote_cost_limit += 1; + Some(index) + } + Err(TransactionError::WouldExceedMaxAccountCostLimit) => { + error_counters.would_exceed_max_account_cost_limit += 1; + Some(index) + } + Err(TransactionError::WouldExceedAccountDataBlockLimit) => { + error_counters.would_exceed_account_data_block_limit += 1; + Some(index) + } + // following are non-retryable errors + Err(TransactionError::TooManyAccountLocks) => { + error_counters.too_many_account_locks += 1; + None + } Err(_) => None, Ok(_) => None, }) diff --git a/runtime/src/transaction_error_metrics.rs b/runtime/src/transaction_error_metrics.rs index deabd2cdc54f25..baa25a07364839 100644 --- a/runtime/src/transaction_error_metrics.rs +++ b/runtime/src/transaction_error_metrics.rs @@ -4,6 +4,7 @@ use solana_sdk::{clock::Slot, saturating_add_assign}; pub struct TransactionErrorMetrics { pub total: usize, pub account_in_use: usize, + pub too_many_account_locks: usize, pub account_loaded_twice: usize, pub account_not_found: usize, pub blockhash_not_found: usize, @@ -18,6 +19,10 @@ pub struct TransactionErrorMetrics { pub not_allowed_during_cluster_maintenance: usize, pub invalid_writable_account: usize, pub invalid_rent_paying_account: usize, + pub would_exceed_max_block_cost_limit: usize, + pub would_exceed_max_account_cost_limit: usize, + pub would_exceed_max_vote_cost_limit: usize, + pub would_exceed_account_data_block_limit: usize, } impl TransactionErrorMetrics { @@ -28,6 +33,7 @@ impl TransactionErrorMetrics { pub fn accumulate(&mut self, other: &TransactionErrorMetrics) { saturating_add_assign!(self.total, other.total); saturating_add_assign!(self.account_in_use, other.account_in_use); + saturating_add_assign!(self.too_many_account_locks, other.too_many_account_locks); saturating_add_assign!(self.account_loaded_twice, other.account_loaded_twice); saturating_add_assign!(self.account_not_found, other.account_not_found); saturating_add_assign!(self.blockhash_not_found, other.blockhash_not_found); @@ -54,6 +60,22 @@ impl TransactionErrorMetrics { self.invalid_rent_paying_account, other.invalid_rent_paying_account ); + saturating_add_assign!( + self.would_exceed_max_block_cost_limit, + other.would_exceed_max_block_cost_limit + ); + saturating_add_assign!( + self.would_exceed_max_account_cost_limit, + other.would_exceed_max_account_cost_limit + ); + saturating_add_assign!( + self.would_exceed_max_vote_cost_limit, + other.would_exceed_max_vote_cost_limit + ); + saturating_add_assign!( + self.would_exceed_account_data_block_limit, + other.would_exceed_account_data_block_limit + ); } pub fn report(&self, id: u32, slot: Slot) { @@ -63,6 +85,11 @@ impl TransactionErrorMetrics { ("slot", slot as i64, i64), ("total", self.total as i64, i64), ("account_in_use", self.account_in_use as i64, i64), + ( + "too_many_account_locks", + self.too_many_account_locks as i64, + i64 + ), ( "account_loaded_twice", self.account_loaded_twice as i64, @@ -105,6 +132,26 @@ impl TransactionErrorMetrics { self.invalid_rent_paying_account as i64, i64 ), + ( + "would_exceed_max_block_cost_limit", + self.would_exceed_max_block_cost_limit as i64, + i64 + ), + ( + "would_exceed_max_account_cost_limit", + self.would_exceed_max_account_cost_limit as i64, + i64 + ), + ( + "would_exceed_max_vote_cost_limit", + self.would_exceed_max_vote_cost_limit as i64, + i64 + ), + ( + "would_exceed_account_data_block_limit", + self.would_exceed_account_data_block_limit as i64, + i64 + ), ); } } From dc3198ca485fdc2cf34e61b57e101b58fe2bd940 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Fri, 7 Oct 2022 11:48:46 -0700 Subject: [PATCH 182/465] after replay at validator startup don't verify hash calc (backport #28222) (#28227) after replay at validator startup don't verify hash calc (#28222) (cherry picked from commit 7ae7a3ff0ea95746e29f5a597f3c12cd27bec633) Co-authored-by: Jeff Washington (jwash) --- ledger-tool/src/main.rs | 2 ++ ledger/src/blockstore_processor.rs | 7 ++++++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/ledger-tool/src/main.rs b/ledger-tool/src/main.rs index 6c7cdb3dbf6459..bc7b038ab07fe3 100644 --- a/ledger-tool/src/main.rs +++ b/ledger-tool/src/main.rs @@ -2484,6 +2484,8 @@ fn main() { poh_verify: !arg_matches.is_present("skip_poh_verify"), on_halt_store_hash_raw_data_for_debug: arg_matches .is_present("halt_at_slot_store_hash_raw_data"), + // ledger tool verify always runs the accounts hash calc at the end of processing the blockstore + run_final_accounts_hash_calc: true, halt_at_slot: value_t!(arg_matches, "halt_at_slot", Slot).ok(), debug_keys, accounts_db_caching_enabled: !arg_matches.is_present("no_accounts_db_caching"), diff --git a/ledger/src/blockstore_processor.rs b/ledger/src/blockstore_processor.rs index 3af5475b0ba70c..caf16edec4e0ee 100644 --- a/ledger/src/blockstore_processor.rs +++ b/ledger/src/blockstore_processor.rs @@ -708,6 +708,9 @@ pub struct ProcessOptions { pub shrink_ratio: AccountShrinkThreshold, pub runtime_config: RuntimeConfig, pub on_halt_store_hash_raw_data_for_debug: bool, + /// true if after processing the contents of the blockstore at startup, we should run an accounts hash calc + /// This is useful for debugging. + pub run_final_accounts_hash_calc: bool, } pub fn test_process_blockstore( @@ -1516,7 +1519,9 @@ fn load_frozen_forks( )?; if slot >= halt_at_slot { - run_final_hash_calc(&bank, on_halt_store_hash_raw_data_for_debug); + if opts.run_final_accounts_hash_calc { + run_final_hash_calc(&bank, on_halt_store_hash_raw_data_for_debug); + } break; } } From fec9f47f8d8e8fef5446e0b32278408a3a9ba57f Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Fri, 7 Oct 2022 11:50:52 -0700 Subject: [PATCH 183/465] run initial hash calc in background, using background threads (backport #28239) (#28246) run initial hash calc in background, using background threads (#28239) (cherry picked from commit 435d4aded9437ecd24f46b1de80ea66d21c47684) # Conflicts: # runtime/benches/accounts.rs # runtime/src/accounts.rs # runtime/src/accounts_db.rs # runtime/src/bank.rs manually merged Co-authored-by: jeff washington --- runtime/benches/accounts.rs | 1 + runtime/src/accounts.rs | 2 ++ runtime/src/accounts_db.rs | 27 +++++++++++++++++++-------- runtime/src/bank.rs | 4 ++++ 4 files changed, 26 insertions(+), 8 deletions(-) diff --git a/runtime/benches/accounts.rs b/runtime/benches/accounts.rs index 8fd7d00f959e9d..27f22de6634ae0 100644 --- a/runtime/benches/accounts.rs +++ b/runtime/benches/accounts.rs @@ -127,6 +127,7 @@ fn test_accounts_hash_bank_hash(bencher: &mut Bencher) { false, false, false, + false, )) }); } diff --git a/runtime/src/accounts.rs b/runtime/src/accounts.rs index b36e2825d4c457..cf900e58e8bfc0 100644 --- a/runtime/src/accounts.rs +++ b/runtime/src/accounts.rs @@ -846,6 +846,7 @@ impl Accounts { can_cached_slot_be_unflushed: bool, ignore_mismatch: bool, store_detailed_debug_info: bool, + use_bg_thread_pool: bool, ) -> bool { if let Err(err) = self.accounts_db.verify_bank_hash_and_lamports_new( slot, @@ -857,6 +858,7 @@ impl Accounts { can_cached_slot_be_unflushed, ignore_mismatch, store_detailed_debug_info, + use_bg_thread_pool, ) { warn!("verify_bank_hash failed: {:?}, slot: {}", err, slot); false diff --git a/runtime/src/accounts_db.rs b/runtime/src/accounts_db.rs index 4481fa3cfc7a0c..81dc75fb7f07ff 100644 --- a/runtime/src/accounts_db.rs +++ b/runtime/src/accounts_db.rs @@ -7085,6 +7085,7 @@ impl AccountsDb { epoch_schedule: &EpochSchedule, rent_collector: &RentCollector, can_cached_slot_be_unflushed: bool, + use_bg_thread_pool: bool, ) -> Result<(), BankHashVerificationError> { self.verify_bank_hash_and_lamports_new( slot, @@ -7096,6 +7097,7 @@ impl AccountsDb { can_cached_slot_be_unflushed, false, false, + use_bg_thread_pool, ) } @@ -7112,20 +7114,19 @@ impl AccountsDb { can_cached_slot_be_unflushed: bool, ignore_mismatch: bool, store_hash_raw_data_for_debug: bool, + use_bg_thread_pool: bool, ) -> Result<(), BankHashVerificationError> { use BankHashVerificationError::*; let use_index = false; let check_hash = false; // this will not be supported anymore - // interesting to consider this - let is_startup = true; let (calculated_hash, calculated_lamports) = self .calculate_accounts_hash_helper_with_verify( use_index, test_hash_calculation, slot, CalcAccountsHashConfig { - use_bg_thread_pool: !is_startup, + use_bg_thread_pool, check_hash, ancestors: Some(ancestors), use_write_cache: can_cached_slot_be_unflushed, @@ -11426,6 +11427,7 @@ pub mod tests { &EpochSchedule::default(), &RentCollector::default(), false, + false, ) .unwrap(); } @@ -11830,6 +11832,7 @@ pub mod tests { &EpochSchedule::default(), &RentCollector::default(), false, + false, ), Ok(_) ); @@ -11844,6 +11847,7 @@ pub mod tests { &EpochSchedule::default(), &RentCollector::default(), false, + false, ), Err(MissingBankHash) ); @@ -11867,6 +11871,7 @@ pub mod tests { &EpochSchedule::default(), &RentCollector::default(), false, + false, ), Err(MismatchedBankHash) ); @@ -11895,7 +11900,8 @@ pub mod tests { true, &EpochSchedule::default(), &RentCollector::default(), - false + false, + false, ), Ok(_) ); @@ -11917,13 +11923,14 @@ pub mod tests { true, &EpochSchedule::default(), &RentCollector::default(), - false + false, + false, ), Ok(_) ); assert_matches!( - db.verify_bank_hash_and_lamports(some_slot, &ancestors, 10, true, &EpochSchedule::default(), &RentCollector::default(), false), + db.verify_bank_hash_and_lamports(some_slot, &ancestors, 10, true, &EpochSchedule::default(), &RentCollector::default(), false, false), Err(MismatchedTotalLamports(expected, actual)) if expected == 2 && actual == 10 ); } @@ -11950,7 +11957,8 @@ pub mod tests { true, &EpochSchedule::default(), &RentCollector::default(), - false + false, + false, ), Ok(_) ); @@ -11994,7 +12002,8 @@ pub mod tests { true, &EpochSchedule::default(), &RentCollector::default(), - false + false, + false, ), Err(MismatchedBankHash) ); @@ -12614,6 +12623,7 @@ pub mod tests { &EpochSchedule::default(), &RentCollector::default(), false, + false, ) .unwrap(); @@ -12627,6 +12637,7 @@ pub mod tests { &EpochSchedule::default(), &RentCollector::default(), false, + false, ) .unwrap(); diff --git a/runtime/src/bank.rs b/runtime/src/bank.rs index 03e7e916d7c435..9f10e968c993de 100644 --- a/runtime/src/bank.rs +++ b/runtime/src/bank.rs @@ -6943,6 +6943,8 @@ impl Bank { config.can_cached_slot_be_unflushed, config.ignore_mismatch, config.store_hash_raw_data_for_debug, + // true to run using bg thread pool + true, ); accounts_ .accounts_db @@ -6964,6 +6966,8 @@ impl Bank { config.can_cached_slot_be_unflushed, config.ignore_mismatch, config.store_hash_raw_data_for_debug, + // fg is waiting for this to run, so we can use the fg thread pool + false, ); self.set_initial_accounts_hash_verification_completed(); result From 91bc5cc65f505cf2653fb7fdd9162979cc58486e Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Fri, 7 Oct 2022 20:17:18 +0000 Subject: [PATCH 184/465] add info for load race condition asserts (backport #28277) (#28298) add info for load race condition asserts (#28277) (cherry picked from commit a1fe8dd444c15e8e5b38a2fed4851a72aa4de43e) Co-authored-by: Jeff Washington (jwash) --- runtime/src/accounts_db.rs | 26 ++++++++++++++++++-------- 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/runtime/src/accounts_db.rs b/runtime/src/accounts_db.rs index 81dc75fb7f07ff..878c3c1ff69b42 100644 --- a/runtime/src/accounts_db.rs +++ b/runtime/src/accounts_db.rs @@ -4628,22 +4628,35 @@ impl AccountsDb { // Notice the subtle `?` at previous line, we bail out pretty early if missing. if new_slot == slot && new_storage_location.is_store_id_equal(&storage_location) { - // Considering that we're failed to get accessor above and further that + inc_new_counter_info!("retry_to_get_account_accessor-panic", 1); + let message = format!( + "Bad index entry detected ({}, {}, {:?}, {:?}, {:?}, {:?})", + pubkey, + slot, + storage_location, + load_hint, + new_storage_location, + self.accounts_index.get_account_read_entry(pubkey) + ); + // Considering that we've failed to get accessor above and further that // the index still returned the same (slot, store_id) tuple, offset must be same // too. - assert!(new_storage_location.is_offset_equal(&storage_location)); + assert!( + new_storage_location.is_offset_equal(&storage_location), + "{message}" + ); // If the entry was missing from the cache, that means it must have been flushed, // and the accounts index is always updated before cache flush, so store_id must // not indicate being cached at this point. - assert!(!new_storage_location.is_cached()); + assert!(!new_storage_location.is_cached(), "{message}"); // If this is not a cache entry, then this was a minor fork slot // that had its storage entries cleaned up by purge_slots() but hasn't been // cleaned yet. That means this must be rpc access and not replay/banking at the // very least. Note that purge shouldn't occur even for RPC as caller must hold all // of ancestor slots.. - assert_eq!(load_hint, LoadHint::Unspecified); + assert_eq!(load_hint, LoadHint::Unspecified, "{message}"); // Everything being assert!()-ed, let's panic!() here as it's an error condition // after all.... @@ -4653,10 +4666,7 @@ impl AccountsDb { // first of all. // For details, see the comment in AccountIndex::do_checked_scan_accounts(), // which is referring back here. - panic!( - "Bad index entry detected ({}, {}, {:?}, {:?})", - pubkey, slot, storage_location, load_hint - ); + panic!("{message}"); } else if fallback_to_slow_path { // the above bad-index-entry check must had been checked first to retain the same // behavior From 6b7cfba6504290875babcf18f1f5b5a4cb876191 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Mon, 10 Oct 2022 05:20:48 +0000 Subject: [PATCH 185/465] docs: fix exchanges integration (backport #28315) (#28316) docs: fix exchanges integration (#28315) * fix description * get blocks use devnet data (cherry picked from commit 4cbf59a5ddd31e4cbcd545e128b9e459cf56b036) Co-authored-by: Yihau Chen --- docs/src/integrations/exchange.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/src/integrations/exchange.md b/docs/src/integrations/exchange.md index faa5902315e243..7d4e741022da3f 100644 --- a/docs/src/integrations/exchange.md +++ b/docs/src/integrations/exchange.md @@ -222,15 +222,15 @@ Solana API node. passing the last block you have already processed as the start-slot parameter: ```bash -curl localhost:8899 -X POST -H "Content-Type: application/json" -d '{ +curl https://api.devnet.solana.com -X POST -H "Content-Type: application/json" -d '{ "jsonrpc": "2.0", "id": 1, "method": "getBlocks", - "params": [5] + "params": [160017005, 160017015] }' # Result -{"jsonrpc":"2.0","result":[5,6,8,9,11],"id":1} +{"jsonrpc":"2.0","result":[160017005,160017006,160017007,160017012,160017013,160017014,160017015],"id":1} ``` Not every slot produces a block, so there may be gaps in the sequence of integers. @@ -337,8 +337,8 @@ changes in every account without having to parse the entire transaction. They list the starting and ending balances of each account in [lamports](../terminology.md#lamport), indexed to the `accountKeys` list. For example, if the deposit address of interest is -`3M2b3tLji7rvscqrLAHMukYxDK2nB96Q9hwfV6QkdzBN`, this transaction represents a -transfer of 2769675090 - 1800195048 = 969,480,042 lamports = 0.969485042 SOL +`G1wZ113tiUHdSpQEBcid8n1x8BAvcWZoZgxPKxgE5B7o`, this transaction represents a +transfer of 1040000000 - 1030000000 = 10,000,000 lamports = 0.01 SOL If you need more information about the transaction type or other specifics, you can request the block from RPC in binary format, and parse it using either our From 1b81d50b9a5bef6af9f29fe5a2b81b6f9561ce1c Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Mon, 10 Oct 2022 20:13:42 +0000 Subject: [PATCH 186/465] RPC: Fix ATA create instruction parsing (backport #28314) (#28330) RPC: Fix ATA create instruction parsing (#28314) (cherry picked from commit cc390f176c636b07928a2b18e49f66890ad326f1) Co-authored-by: Justin Starry --- .../src/parse_associated_token.rs | 153 +++++++++--------- 1 file changed, 79 insertions(+), 74 deletions(-) diff --git a/transaction-status/src/parse_associated_token.rs b/transaction-status/src/parse_associated_token.rs index 1c2cd2c985ef7b..428d9b98e99b26 100644 --- a/transaction-status/src/parse_associated_token.rs +++ b/transaction-status/src/parse_associated_token.rs @@ -27,69 +27,56 @@ pub fn parse_associated_token( )); } } - if instruction.data.is_empty() { - check_num_associated_token_accounts(&instruction.accounts, 7)?; - Ok(ParsedInstructionEnum { - instruction_type: "create".to_string(), - info: json!({ - "source": account_keys[instruction.accounts[0] as usize].to_string(), - "account": account_keys[instruction.accounts[1] as usize].to_string(), - "wallet": account_keys[instruction.accounts[2] as usize].to_string(), - "mint": account_keys[instruction.accounts[3] as usize].to_string(), - "systemProgram": account_keys[instruction.accounts[4] as usize].to_string(), - "tokenProgram": account_keys[instruction.accounts[5] as usize].to_string(), - "rentSysvar": account_keys[instruction.accounts[6] as usize].to_string(), - }), - }) + let ata_instruction = if instruction.data.is_empty() { + AssociatedTokenAccountInstruction::Create } else { - let ata_instruction = AssociatedTokenAccountInstruction::try_from_slice(&instruction.data) - .map_err(|_| { - ParseInstructionError::InstructionNotParsable(ParsableProgram::SplToken) - })?; - match ata_instruction { - AssociatedTokenAccountInstruction::Create => { - check_num_associated_token_accounts(&instruction.accounts, 6)?; - Ok(ParsedInstructionEnum { - instruction_type: "create".to_string(), - info: json!({ - "source": account_keys[instruction.accounts[0] as usize].to_string(), - "account": account_keys[instruction.accounts[1] as usize].to_string(), - "wallet": account_keys[instruction.accounts[2] as usize].to_string(), - "mint": account_keys[instruction.accounts[3] as usize].to_string(), - "systemProgram": account_keys[instruction.accounts[4] as usize].to_string(), - "tokenProgram": account_keys[instruction.accounts[5] as usize].to_string(), - }), - }) - } - AssociatedTokenAccountInstruction::CreateIdempotent => { - check_num_associated_token_accounts(&instruction.accounts, 6)?; - Ok(ParsedInstructionEnum { - instruction_type: "createIdempotent".to_string(), - info: json!({ - "source": account_keys[instruction.accounts[0] as usize].to_string(), - "account": account_keys[instruction.accounts[1] as usize].to_string(), - "wallet": account_keys[instruction.accounts[2] as usize].to_string(), - "mint": account_keys[instruction.accounts[3] as usize].to_string(), - "systemProgram": account_keys[instruction.accounts[4] as usize].to_string(), - "tokenProgram": account_keys[instruction.accounts[5] as usize].to_string(), - }), - }) - } - AssociatedTokenAccountInstruction::RecoverNested => { - check_num_associated_token_accounts(&instruction.accounts, 7)?; - Ok(ParsedInstructionEnum { - instruction_type: "recoverNested".to_string(), - info: json!({ - "nestedSource": account_keys[instruction.accounts[0] as usize].to_string(), - "nestedMint": account_keys[instruction.accounts[1] as usize].to_string(), - "destination": account_keys[instruction.accounts[2] as usize].to_string(), - "nestedOwner": account_keys[instruction.accounts[3] as usize].to_string(), - "ownerMint": account_keys[instruction.accounts[4] as usize].to_string(), - "wallet": account_keys[instruction.accounts[5] as usize].to_string(), - "tokenProgram": account_keys[instruction.accounts[6] as usize].to_string(), - }), - }) - } + AssociatedTokenAccountInstruction::try_from_slice(&instruction.data) + .map_err(|_| ParseInstructionError::InstructionNotParsable(ParsableProgram::SplToken))? + }; + + match ata_instruction { + AssociatedTokenAccountInstruction::Create => { + check_num_associated_token_accounts(&instruction.accounts, 6)?; + Ok(ParsedInstructionEnum { + instruction_type: "create".to_string(), + info: json!({ + "source": account_keys[instruction.accounts[0] as usize].to_string(), + "account": account_keys[instruction.accounts[1] as usize].to_string(), + "wallet": account_keys[instruction.accounts[2] as usize].to_string(), + "mint": account_keys[instruction.accounts[3] as usize].to_string(), + "systemProgram": account_keys[instruction.accounts[4] as usize].to_string(), + "tokenProgram": account_keys[instruction.accounts[5] as usize].to_string(), + }), + }) + } + AssociatedTokenAccountInstruction::CreateIdempotent => { + check_num_associated_token_accounts(&instruction.accounts, 6)?; + Ok(ParsedInstructionEnum { + instruction_type: "createIdempotent".to_string(), + info: json!({ + "source": account_keys[instruction.accounts[0] as usize].to_string(), + "account": account_keys[instruction.accounts[1] as usize].to_string(), + "wallet": account_keys[instruction.accounts[2] as usize].to_string(), + "mint": account_keys[instruction.accounts[3] as usize].to_string(), + "systemProgram": account_keys[instruction.accounts[4] as usize].to_string(), + "tokenProgram": account_keys[instruction.accounts[5] as usize].to_string(), + }), + }) + } + AssociatedTokenAccountInstruction::RecoverNested => { + check_num_associated_token_accounts(&instruction.accounts, 7)?; + Ok(ParsedInstructionEnum { + instruction_type: "recoverNested".to_string(), + info: json!({ + "nestedSource": account_keys[instruction.accounts[0] as usize].to_string(), + "nestedMint": account_keys[instruction.accounts[1] as usize].to_string(), + "destination": account_keys[instruction.accounts[2] as usize].to_string(), + "nestedOwner": account_keys[instruction.accounts[3] as usize].to_string(), + "ownerMint": account_keys[instruction.accounts[4] as usize].to_string(), + "wallet": account_keys[instruction.accounts[5] as usize].to_string(), + "tokenProgram": account_keys[instruction.accounts[6] as usize].to_string(), + }), + }) } } } @@ -158,25 +145,43 @@ mod test { ); let message = Message::new(&[create_ix], None); let mut compiled_instruction = convert_compiled_instruction(&message.instructions[0]); + let expected_parsed_ix = ParsedInstructionEnum { + instruction_type: "create".to_string(), + info: json!({ + "source": funder.to_string(), + "account": associated_account_address.to_string(), + "wallet": wallet_address.to_string(), + "mint": mint.to_string(), + "systemProgram": solana_sdk::system_program::id().to_string(), + "tokenProgram": spl_token::id().to_string(), + }), + }; assert_eq!( parse_associated_token( &compiled_instruction, &AccountKeys::new(&convert_account_keys(&message), None) ) .unwrap(), - ParsedInstructionEnum { - instruction_type: "create".to_string(), - info: json!({ - "source": funder.to_string(), - "account": associated_account_address.to_string(), - "wallet": wallet_address.to_string(), - "mint": mint.to_string(), - "systemProgram": solana_sdk::system_program::id().to_string(), - "tokenProgram": spl_token::id().to_string(), - "rentSysvar": sysvar::rent::id().to_string(), - }) - } + expected_parsed_ix, ); + + // after popping rent account, parsing should still succeed + let rent_account_index = compiled_instruction + .accounts + .iter() + .position(|index| message.account_keys[*index as usize] == sysvar::rent::id()) + .unwrap(); + compiled_instruction.accounts.remove(rent_account_index); + assert_eq!( + parse_associated_token( + &compiled_instruction, + &AccountKeys::new(&convert_account_keys(&message), None) + ) + .unwrap(), + expected_parsed_ix, + ); + + // after popping another account, parsing should fail compiled_instruction.accounts.pop(); assert!(parse_associated_token( &compiled_instruction, From 32befa5a9f954077118adcfde2136ea4780a487f Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Mon, 10 Oct 2022 21:34:35 +0000 Subject: [PATCH 187/465] Fix blockstore_processor::load_frozen_forks() halt_at_slot behavior (backport #28317) (#28333) Fix blockstore_processor::load_frozen_forks() halt_at_slot behavior (#28317) load_frozen_forks() finds new slots to process by creating new Banks for the children of the current slot in process_next_slots(). Prior to this change, we would then immediately check if we had reached the halt_at_slot and correctly halt processing when appropriate. As such, it would be possible for Banks to be created for slots beyond the halt_at_slot. While a potential child slot that is past halt_at_slot wouldn't be replayed, the Bank being created still alters some universal state in AccountsDb. So, this change moves the halt_at_slot check before we create children Banks in process_next_slots(). (cherry picked from commit 2929c8f7a20b3d8d910cebaf5c3bebaab13af5db) Co-authored-by: steviez --- ledger/src/blockstore_processor.rs | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/ledger/src/blockstore_processor.rs b/ledger/src/blockstore_processor.rs index caf16edec4e0ee..a1ad215c4f41a3 100644 --- a/ledger/src/blockstore_processor.rs +++ b/ledger/src/blockstore_processor.rs @@ -1384,9 +1384,8 @@ fn load_frozen_forks( &mut pending_slots, )?; - let halt_at_slot = opts.halt_at_slot.unwrap_or(std::u64::MAX); let on_halt_store_hash_raw_data_for_debug = opts.on_halt_store_hash_raw_data_for_debug; - if bank_forks.read().unwrap().root() != halt_at_slot { + if Some(bank_forks.read().unwrap().root()) != opts.halt_at_slot { while !pending_slots.is_empty() { timing.details.per_program_timings.clear(); let (meta, bank, last_entry_hash) = pending_slots.pop().unwrap(); @@ -1510,6 +1509,17 @@ fn load_frozen_forks( slot, ); + let done_processing = opts + .halt_at_slot + .map(|halt_at_slot| slot >= halt_at_slot) + .unwrap_or(false); + if done_processing { + if opts.run_final_accounts_hash_calc { + run_final_hash_calc(&bank, on_halt_store_hash_raw_data_for_debug); + } + break; + } + process_next_slots( &bank, &meta, @@ -1517,13 +1527,6 @@ fn load_frozen_forks( leader_schedule_cache, &mut pending_slots, )?; - - if slot >= halt_at_slot { - if opts.run_final_accounts_hash_calc { - run_final_hash_calc(&bank, on_halt_store_hash_raw_data_for_debug); - } - break; - } } } else if on_halt_store_hash_raw_data_for_debug { run_final_hash_calc( From a5cc405b31e90f8c2daa7d6c39d7a86cfaf4e4b8 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Mon, 10 Oct 2022 23:12:41 +0000 Subject: [PATCH 188/465] Refactor - Move `executor_cache` to program-runtime crate (backport #28322) (#28323) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Refactor - Move `executor_cache` to program-runtime crate (#28322) * Moves CachedExecutors, related structs, consts and tests into the program-runtime crate. * Moves TransactionExecutor, related enum and type defs into executor_cache mod. (cherry picked from commit 2fc8e533a2585ce96cb6b3a1a85917ac09a81865) Co-authored-by: Alexander Meißner --- Cargo.lock | 1 + program-runtime/Cargo.toml | 1 + program-runtime/src/executor_cache.rs | 637 ++++++++++++++++++++++++++ program-runtime/src/invoke_context.rs | 74 +-- program-runtime/src/lib.rs | 1 + programs/bpf/Cargo.lock | 1 + programs/bpf_loader/src/lib.rs | 3 +- runtime/src/accounts.rs | 2 +- runtime/src/bank.rs | 534 +-------------------- runtime/src/message_processor.rs | 3 +- 10 files changed, 652 insertions(+), 605 deletions(-) create mode 100644 program-runtime/src/executor_cache.rs diff --git a/Cargo.lock b/Cargo.lock index 86c7dcbbe9787b..a368645ec90336 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -5821,6 +5821,7 @@ dependencies = [ "log", "num-derive", "num-traits", + "rand 0.7.3", "rustc_version 0.4.0", "serde", "solana-frozen-abi 1.14.6", diff --git a/program-runtime/Cargo.toml b/program-runtime/Cargo.toml index 48149183c2b183..8177de791a18c3 100644 --- a/program-runtime/Cargo.toml +++ b/program-runtime/Cargo.toml @@ -19,6 +19,7 @@ libloading = "0.7.0" log = "0.4.14" num-derive = { version = "0.3" } num-traits = { version = "0.2" } +rand = "0.7.0" serde = { version = "1.0.129", features = ["derive", "rc"] } solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.6" } solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.6" } diff --git a/program-runtime/src/executor_cache.rs b/program-runtime/src/executor_cache.rs new file mode 100644 index 00000000000000..fd459cb55c40bd --- /dev/null +++ b/program-runtime/src/executor_cache.rs @@ -0,0 +1,637 @@ +use { + crate::invoke_context::InvokeContext, + log::*, + rand::Rng, + solana_sdk::{ + instruction::InstructionError, pubkey::Pubkey, saturating_add_assign, slot_history::Slot, + stake_history::Epoch, + }, + std::{ + collections::HashMap, + fmt::Debug, + ops::Div, + sync::{ + atomic::{AtomicU64, Ordering::Relaxed}, + Arc, + }, + }, +}; + +/// Program executor +pub trait Executor: Debug + Send + Sync { + /// Execute the program + fn execute( + &self, + first_instruction_account: usize, + invoke_context: &mut InvokeContext, + ) -> Result<(), InstructionError>; +} + +pub type Executors = HashMap; + +#[repr(u8)] +#[derive(PartialEq, Debug)] +enum TransactionExecutorStatus { + /// Executor was already in the cache, no update needed + Cached, + /// Executor was missing from the cache, but not updated + Missing, + /// Executor is for an updated program + Updated, +} + +/// Tracks whether a given executor is "dirty" and needs to updated in the +/// executors cache +#[derive(Debug)] +pub struct TransactionExecutor { + pub(crate) executor: Arc, + status: TransactionExecutorStatus, +} + +impl TransactionExecutor { + /// Wraps an executor and tracks that it doesn't need to be updated in the + /// executors cache. + pub fn new_cached(executor: Arc) -> Self { + Self { + executor, + status: TransactionExecutorStatus::Cached, + } + } + + /// Wraps an executor and tracks that it needs to be updated in the + /// executors cache. + pub fn new_miss(executor: Arc) -> Self { + Self { + executor, + status: TransactionExecutorStatus::Missing, + } + } + + /// Wraps an executor and tracks that it needs to be updated in the + /// executors cache only if the transaction succeeded. + pub fn new_updated(executor: Arc) -> Self { + Self { + executor, + status: TransactionExecutorStatus::Updated, + } + } + + pub fn is_missing(&self) -> bool { + self.status == TransactionExecutorStatus::Missing + } + + pub fn is_updated(&self) -> bool { + self.status == TransactionExecutorStatus::Updated + } + + pub fn get(&self) -> Arc { + self.executor.clone() + } +} + +/// Capacity of `CachedExecutors` +pub const MAX_CACHED_EXECUTORS: usize = 256; + +/// An `Executor` and its statistics tracked in `CachedExecutors` +#[derive(Debug)] +pub struct CachedExecutorsEntry { + prev_epoch_count: u64, + epoch_count: AtomicU64, + executor: Arc, + pub hit_count: AtomicU64, +} + +impl Clone for CachedExecutorsEntry { + fn clone(&self) -> Self { + Self { + prev_epoch_count: self.prev_epoch_count, + epoch_count: AtomicU64::new(self.epoch_count.load(Relaxed)), + executor: self.executor.clone(), + hit_count: AtomicU64::new(self.hit_count.load(Relaxed)), + } + } +} + +/// LFU Cache of executors with single-epoch memory of usage counts +#[derive(Debug)] +pub struct CachedExecutors { + capacity: usize, + current_epoch: Epoch, + pub executors: HashMap, + pub stats: Stats, +} + +impl Default for CachedExecutors { + fn default() -> Self { + Self { + capacity: MAX_CACHED_EXECUTORS, + current_epoch: Epoch::default(), + executors: HashMap::default(), + stats: Stats::default(), + } + } +} + +#[cfg(RUSTC_WITH_SPECIALIZATION)] +impl solana_frozen_abi::abi_example::AbiExample for CachedExecutors { + fn example() -> Self { + // Delegate AbiExample impl to Default before going deep and stuck with + // not easily impl-able Arc due to rust's coherence issue + // This is safe because CachedExecutors isn't serializable by definition. + Self::default() + } +} + +impl CachedExecutors { + pub fn new(max_capacity: usize, current_epoch: Epoch) -> Self { + Self { + capacity: max_capacity, + current_epoch, + executors: HashMap::new(), + stats: Stats::default(), + } + } + + pub fn new_from_parent_bank_executors( + parent_bank_executors: &CachedExecutors, + current_epoch: Epoch, + ) -> Self { + let executors = if parent_bank_executors.current_epoch == current_epoch { + parent_bank_executors.executors.clone() + } else { + parent_bank_executors + .executors + .iter() + .map(|(&key, entry)| { + let entry = CachedExecutorsEntry { + prev_epoch_count: entry.epoch_count.load(Relaxed), + epoch_count: AtomicU64::default(), + executor: entry.executor.clone(), + hit_count: AtomicU64::new(entry.hit_count.load(Relaxed)), + }; + (key, entry) + }) + .collect() + }; + + Self { + capacity: parent_bank_executors.capacity, + current_epoch, + executors, + stats: Stats::default(), + } + } + + pub fn get(&self, pubkey: &Pubkey) -> Option> { + if let Some(entry) = self.executors.get(pubkey) { + self.stats.hits.fetch_add(1, Relaxed); + entry.epoch_count.fetch_add(1, Relaxed); + entry.hit_count.fetch_add(1, Relaxed); + Some(entry.executor.clone()) + } else { + self.stats.misses.fetch_add(1, Relaxed); + None + } + } + + pub fn put(&mut self, executors: &[(&Pubkey, Arc)]) { + let mut new_executors: Vec<_> = executors + .iter() + .filter_map(|(key, executor)| { + if let Some(mut entry) = self.remove(key) { + self.stats.replacements.fetch_add(1, Relaxed); + entry.executor = executor.clone(); + let _ = self.executors.insert(**key, entry); + None + } else { + self.stats.insertions.fetch_add(1, Relaxed); + Some((*key, executor)) + } + }) + .collect(); + + if !new_executors.is_empty() { + let mut counts = self + .executors + .iter() + .map(|(key, entry)| { + let count = entry + .prev_epoch_count + .saturating_add(entry.epoch_count.load(Relaxed)); + (key, count) + }) + .collect::>(); + counts.sort_unstable_by_key(|(_, count)| *count); + + let primer_counts = Self::get_primer_counts(counts.as_slice(), new_executors.len()); + + if self.executors.len() >= self.capacity { + let mut least_keys = counts + .iter() + .take(new_executors.len()) + .map(|least| *least.0) + .collect::>(); + for least_key in least_keys.drain(..) { + let _ = self.remove(&least_key); + self.stats + .evictions + .entry(least_key) + .and_modify(|c| saturating_add_assign!(*c, 1)) + .or_insert(1); + } + } + + for ((key, executor), primer_count) in new_executors.drain(..).zip(primer_counts) { + let entry = CachedExecutorsEntry { + prev_epoch_count: 0, + epoch_count: AtomicU64::new(primer_count), + executor: executor.clone(), + hit_count: AtomicU64::new(1), + }; + let _ = self.executors.insert(*key, entry); + } + } + } + + pub fn remove(&mut self, pubkey: &Pubkey) -> Option { + let maybe_entry = self.executors.remove(pubkey); + if let Some(entry) = maybe_entry.as_ref() { + if entry.hit_count.load(Relaxed) == 1 { + self.stats.one_hit_wonders.fetch_add(1, Relaxed); + } + } + maybe_entry + } + + pub fn clear(&mut self) { + *self = CachedExecutors::default(); + } + + pub fn get_primer_count_upper_bound_inclusive(counts: &[(&Pubkey, u64)]) -> u64 { + const PRIMER_COUNT_TARGET_PERCENTILE: u64 = 85; + #[allow(clippy::assertions_on_constants)] + { + assert!(PRIMER_COUNT_TARGET_PERCENTILE <= 100); + } + // Executor use-frequencies are assumed to fit a Pareto distribution. Choose an + // upper-bound for our primer count as the actual count at the target rank to avoid + // an upward bias + + let target_index = u64::try_from(counts.len().saturating_sub(1)) + .ok() + .and_then(|counts| { + let index = counts + .saturating_mul(PRIMER_COUNT_TARGET_PERCENTILE) + .div(100); // switch to u64::saturating_div once stable + usize::try_from(index).ok() + }) + .unwrap_or(0); + + counts + .get(target_index) + .map(|(_, count)| *count) + .unwrap_or(0) + } + + pub fn get_primer_counts(counts: &[(&Pubkey, u64)], num_counts: usize) -> Vec { + let max_primer_count = Self::get_primer_count_upper_bound_inclusive(counts); + let mut rng = rand::thread_rng(); + + (0..num_counts) + .map(|_| rng.gen_range(0, max_primer_count.saturating_add(1))) + .collect::>() + } +} + +/// Statistics of the entrie `CachedExecutors` +#[derive(Debug, Default)] +pub struct Stats { + pub hits: AtomicU64, + pub misses: AtomicU64, + pub evictions: HashMap, + pub insertions: AtomicU64, + pub replacements: AtomicU64, + pub one_hit_wonders: AtomicU64, +} + +impl Stats { + /// Logs the measurement values + pub fn submit(&self, slot: Slot) { + let hits = self.hits.load(Relaxed); + let misses = self.misses.load(Relaxed); + let insertions = self.insertions.load(Relaxed); + let replacements = self.replacements.load(Relaxed); + let one_hit_wonders = self.one_hit_wonders.load(Relaxed); + let evictions: u64 = self.evictions.values().sum(); + datapoint_info!( + "bank-executor-cache-stats", + ("slot", slot, i64), + ("hits", hits, i64), + ("misses", misses, i64), + ("evictions", evictions, i64), + ("insertions", insertions, i64), + ("replacements", replacements, i64), + ("one_hit_wonders", one_hit_wonders, i64), + ); + debug!( + "Executor Cache Stats -- Hits: {}, Misses: {}, Evictions: {}, Insertions: {}, Replacements: {}, One-Hit-Wonders: {}", + hits, misses, evictions, insertions, replacements, one_hit_wonders, + ); + if log_enabled!(log::Level::Trace) && !self.evictions.is_empty() { + let mut evictions = self.evictions.iter().collect::>(); + evictions.sort_by_key(|e| e.1); + let evictions = evictions + .into_iter() + .rev() + .map(|(program_id, evictions)| { + format!(" {:<44} {}", program_id.to_string(), evictions) + }) + .collect::>(); + let evictions = evictions.join("\n"); + trace!( + "Eviction Details:\n {:<44} {}\n{}", + "Program", + "Count", + evictions + ); + } + } +} + +#[allow(clippy::indexing_slicing)] +#[cfg(test)] +mod tests { + use { + super::*, crate::invoke_context::InvokeContext, solana_sdk::instruction::InstructionError, + }; + + #[derive(Debug)] + struct TestExecutor {} + impl Executor for TestExecutor { + fn execute( + &self, + _first_instruction_account: usize, + _invoke_context: &mut InvokeContext, + ) -> std::result::Result<(), InstructionError> { + Ok(()) + } + } + + #[test] + fn test_cached_executors() { + let key1 = solana_sdk::pubkey::new_rand(); + let key2 = solana_sdk::pubkey::new_rand(); + let key3 = solana_sdk::pubkey::new_rand(); + let key4 = solana_sdk::pubkey::new_rand(); + let executor: Arc = Arc::new(TestExecutor {}); + let mut cache = CachedExecutors::new(3, 0); + + cache.put(&[(&key1, executor.clone())]); + cache.put(&[(&key2, executor.clone())]); + cache.put(&[(&key3, executor.clone())]); + assert!(cache.get(&key1).is_some()); + assert!(cache.get(&key2).is_some()); + assert!(cache.get(&key3).is_some()); + + assert!(cache.get(&key1).is_some()); + assert!(cache.get(&key1).is_some()); + assert!(cache.get(&key2).is_some()); + cache.put(&[(&key4, executor.clone())]); + assert!(cache.get(&key4).is_some()); + let num_retained = [&key1, &key2, &key3] + .iter() + .filter_map(|key| cache.get(key)) + .count(); + assert_eq!(num_retained, 2); + + assert!(cache.get(&key4).is_some()); + assert!(cache.get(&key4).is_some()); + assert!(cache.get(&key4).is_some()); + cache.put(&[(&key3, executor.clone())]); + assert!(cache.get(&key3).is_some()); + let num_retained = [&key1, &key2, &key4] + .iter() + .filter_map(|key| cache.get(key)) + .count(); + assert_eq!(num_retained, 2); + } + + #[test] + fn test_cached_executor_eviction() { + let key1 = solana_sdk::pubkey::new_rand(); + let key2 = solana_sdk::pubkey::new_rand(); + let key3 = solana_sdk::pubkey::new_rand(); + let key4 = solana_sdk::pubkey::new_rand(); + let executor: Arc = Arc::new(TestExecutor {}); + let mut cache = CachedExecutors::new(3, 0); + assert!(cache.current_epoch == 0); + + cache.put(&[(&key1, executor.clone())]); + cache.put(&[(&key2, executor.clone())]); + cache.put(&[(&key3, executor.clone())]); + assert!(cache.get(&key1).is_some()); + assert!(cache.get(&key1).is_some()); + assert!(cache.get(&key1).is_some()); + + let mut cache = CachedExecutors::new_from_parent_bank_executors(&cache, 1); + assert!(cache.current_epoch == 1); + + assert!(cache.get(&key2).is_some()); + assert!(cache.get(&key2).is_some()); + assert!(cache.get(&key3).is_some()); + cache.put(&[(&key4, executor.clone())]); + + assert!(cache.get(&key4).is_some()); + let num_retained = [&key1, &key2, &key3] + .iter() + .filter_map(|key| cache.get(key)) + .count(); + assert_eq!(num_retained, 2); + + cache.put(&[(&key1, executor.clone())]); + cache.put(&[(&key3, executor.clone())]); + assert!(cache.get(&key1).is_some()); + assert!(cache.get(&key3).is_some()); + let num_retained = [&key2, &key4] + .iter() + .filter_map(|key| cache.get(key)) + .count(); + assert_eq!(num_retained, 1); + + cache = CachedExecutors::new_from_parent_bank_executors(&cache, 2); + assert!(cache.current_epoch == 2); + + cache.put(&[(&key3, executor.clone())]); + assert!(cache.get(&key3).is_some()); + } + + #[test] + fn test_cached_executors_evicts_smallest() { + let key1 = solana_sdk::pubkey::new_rand(); + let key2 = solana_sdk::pubkey::new_rand(); + let key3 = solana_sdk::pubkey::new_rand(); + let executor: Arc = Arc::new(TestExecutor {}); + let mut cache = CachedExecutors::new(2, 0); + + cache.put(&[(&key1, executor.clone())]); + for _ in 0..5 { + let _ = cache.get(&key1); + } + cache.put(&[(&key2, executor.clone())]); + // make key1's use-count for sure greater than key2's + let _ = cache.get(&key1); + + let mut entries = cache + .executors + .iter() + .map(|(k, v)| (*k, v.epoch_count.load(Relaxed))) + .collect::>(); + entries.sort_by_key(|(_, v)| *v); + assert!(entries[0].1 < entries[1].1); + + cache.put(&[(&key3, executor.clone())]); + assert!(cache.get(&entries[0].0).is_none()); + assert!(cache.get(&entries[1].0).is_some()); + } + + #[test] + fn test_cached_executors_one_hit_wonder_counter() { + let mut cache = CachedExecutors::new(1, 0); + + let one_hit_wonder = Pubkey::new_unique(); + let popular = Pubkey::new_unique(); + let executor: Arc = Arc::new(TestExecutor {}); + + // make sure we're starting from where we think we are + assert_eq!(cache.stats.one_hit_wonders.load(Relaxed), 0); + + // add our one-hit-wonder + cache.put(&[(&one_hit_wonder, executor.clone())]); + assert_eq!(cache.executors[&one_hit_wonder].hit_count.load(Relaxed), 1); + // displace the one-hit-wonder with "popular program" + cache.put(&[(&popular, executor.clone())]); + assert_eq!(cache.executors[&popular].hit_count.load(Relaxed), 1); + + // one-hit-wonder counter incremented + assert_eq!(cache.stats.one_hit_wonders.load(Relaxed), 1); + + // make "popular program" popular + cache.get(&popular).unwrap(); + assert_eq!(cache.executors[&popular].hit_count.load(Relaxed), 2); + + // evict "popular program" + cache.put(&[(&one_hit_wonder, executor.clone())]); + assert_eq!(cache.executors[&one_hit_wonder].hit_count.load(Relaxed), 1); + + // one-hit-wonder counter not incremented + assert_eq!(cache.stats.one_hit_wonders.load(Relaxed), 1); + } + + #[test] + fn test_executor_cache_get_primer_count_upper_bound_inclusive() { + let pubkey = Pubkey::default(); + let v = []; + assert_eq!( + CachedExecutors::get_primer_count_upper_bound_inclusive(&v), + 0 + ); + let v = [(&pubkey, 1)]; + assert_eq!( + CachedExecutors::get_primer_count_upper_bound_inclusive(&v), + 1 + ); + let v = (0u64..10).map(|i| (&pubkey, i)).collect::>(); + assert_eq!( + CachedExecutors::get_primer_count_upper_bound_inclusive(v.as_slice()), + 7 + ); + } + + #[test] + fn test_cached_executors_stats() { + #[derive(Debug, Default, PartialEq)] + struct ComparableStats { + hits: u64, + misses: u64, + evictions: HashMap, + insertions: u64, + replacements: u64, + one_hit_wonders: u64, + } + impl From<&Stats> for ComparableStats { + fn from(stats: &Stats) -> Self { + let Stats { + hits, + misses, + evictions, + insertions, + replacements, + one_hit_wonders, + } = stats; + ComparableStats { + hits: hits.load(Relaxed), + misses: misses.load(Relaxed), + evictions: evictions.clone(), + insertions: insertions.load(Relaxed), + replacements: replacements.load(Relaxed), + one_hit_wonders: one_hit_wonders.load(Relaxed), + } + } + } + + const CURRENT_EPOCH: Epoch = 0; + let mut cache = CachedExecutors::new(2, CURRENT_EPOCH); + let mut expected_stats = ComparableStats::default(); + + let program_id1 = Pubkey::new_unique(); + let program_id2 = Pubkey::new_unique(); + let executor: Arc = Arc::new(TestExecutor {}); + + // make sure we're starting from where we think we are + assert_eq!(ComparableStats::from(&cache.stats), expected_stats,); + + // insert some executors + cache.put(&[(&program_id1, executor.clone())]); + cache.put(&[(&program_id2, executor.clone())]); + expected_stats.insertions += 2; + assert_eq!(ComparableStats::from(&cache.stats), expected_stats); + + // replace a one-hit-wonder executor + cache.put(&[(&program_id1, executor.clone())]); + expected_stats.replacements += 1; + expected_stats.one_hit_wonders += 1; + assert_eq!(ComparableStats::from(&cache.stats), expected_stats); + + // hit some executors + cache.get(&program_id1); + cache.get(&program_id1); + cache.get(&program_id2); + expected_stats.hits += 3; + assert_eq!(ComparableStats::from(&cache.stats), expected_stats); + + // miss an executor + cache.get(&Pubkey::new_unique()); + expected_stats.misses += 1; + assert_eq!(ComparableStats::from(&cache.stats), expected_stats); + + // evict an executor + cache.put(&[(&Pubkey::new_unique(), executor.clone())]); + expected_stats.insertions += 1; + expected_stats.evictions.insert(program_id2, 1); + assert_eq!(ComparableStats::from(&cache.stats), expected_stats); + + // make sure stats are cleared in new_from_parent + assert_eq!( + ComparableStats::from( + &CachedExecutors::new_from_parent_bank_executors(&cache, CURRENT_EPOCH).stats + ), + ComparableStats::default() + ); + assert_eq!( + ComparableStats::from( + &CachedExecutors::new_from_parent_bank_executors(&cache, CURRENT_EPOCH + 1).stats + ), + ComparableStats::default() + ); + } +} diff --git a/program-runtime/src/invoke_context.rs b/program-runtime/src/invoke_context.rs index 52c860bb63dcc7..86c740585ba22a 100644 --- a/program-runtime/src/invoke_context.rs +++ b/program-runtime/src/invoke_context.rs @@ -4,6 +4,7 @@ use { crate::{ accounts_data_meter::AccountsDataMeter, compute_budget::ComputeBudget, + executor_cache::{Executor, Executors, TransactionExecutor}, ic_logger_msg, ic_msg, log_collector::LogCollector, pre_account::PreAccount, @@ -30,7 +31,6 @@ use { alloc::Layout, borrow::Cow, cell::RefCell, - collections::HashMap, fmt::{self, Debug}, rc::Rc, sync::Arc, @@ -60,78 +60,6 @@ impl std::fmt::Debug for BuiltinProgram { } } -/// Program executor -pub trait Executor: Debug + Send + Sync { - /// Execute the program - fn execute( - &self, - first_instruction_account: usize, - invoke_context: &mut InvokeContext, - ) -> Result<(), InstructionError>; -} - -pub type Executors = HashMap; - -#[repr(u8)] -#[derive(PartialEq, Debug)] -enum TransactionExecutorStatus { - /// Executor was already in the cache, no update needed - Cached, - /// Executor was missing from the cache, but not updated - Missing, - /// Executor is for an updated program - Updated, -} - -/// Tracks whether a given executor is "dirty" and needs to updated in the -/// executors cache -#[derive(Debug)] -pub struct TransactionExecutor { - executor: Arc, - status: TransactionExecutorStatus, -} - -impl TransactionExecutor { - /// Wraps an executor and tracks that it doesn't need to be updated in the - /// executors cache. - pub fn new_cached(executor: Arc) -> Self { - Self { - executor, - status: TransactionExecutorStatus::Cached, - } - } - - /// Wraps an executor and tracks that it needs to be updated in the - /// executors cache. - pub fn new_miss(executor: Arc) -> Self { - Self { - executor, - status: TransactionExecutorStatus::Missing, - } - } - - /// Wraps an executor and tracks that it needs to be updated in the - /// executors cache only if the transaction succeeded. - pub fn new_updated(executor: Arc) -> Self { - Self { - executor, - status: TransactionExecutorStatus::Updated, - } - } - - pub fn is_missing(&self) -> bool { - self.status == TransactionExecutorStatus::Missing - } - - pub fn is_updated(&self) -> bool { - self.status == TransactionExecutorStatus::Updated - } - - pub fn get(&self) -> Arc { - self.executor.clone() - } -} - /// Compute meter pub struct ComputeMeter { remaining: u64, diff --git a/program-runtime/src/lib.rs b/program-runtime/src/lib.rs index 2a9be8d8c4e3bd..88bfe95834a30e 100644 --- a/program-runtime/src/lib.rs +++ b/program-runtime/src/lib.rs @@ -11,6 +11,7 @@ extern crate solana_metrics; pub mod accounts_data_meter; pub mod compute_budget; +pub mod executor_cache; pub mod invoke_context; pub mod log_collector; pub mod pre_account; diff --git a/programs/bpf/Cargo.lock b/programs/bpf/Cargo.lock index 5f937eab7ee172..490df789b9f744 100644 --- a/programs/bpf/Cargo.lock +++ b/programs/bpf/Cargo.lock @@ -5248,6 +5248,7 @@ dependencies = [ "log", "num-derive", "num-traits", + "rand 0.7.3", "rustc_version", "serde", "solana-frozen-abi 1.14.6", diff --git a/programs/bpf_loader/src/lib.rs b/programs/bpf_loader/src/lib.rs index 2fac50964717e3..bcf7776cc2f6ac 100644 --- a/programs/bpf_loader/src/lib.rs +++ b/programs/bpf_loader/src/lib.rs @@ -20,8 +20,9 @@ use { log::{log_enabled, trace, Level::Trace}, solana_measure::measure::Measure, solana_program_runtime::{ + executor_cache::Executor, ic_logger_msg, ic_msg, - invoke_context::{ComputeMeter, Executor, InvokeContext}, + invoke_context::{ComputeMeter, InvokeContext}, log_collector::LogCollector, stable_log, sysvar_cache::get_sysvar_with_account_check, diff --git a/runtime/src/accounts.rs b/runtime/src/accounts.rs index cf900e58e8bfc0..68b9062923ce9f 100644 --- a/runtime/src/accounts.rs +++ b/runtime/src/accounts.rs @@ -1439,7 +1439,7 @@ mod tests { }, assert_matches::assert_matches, solana_address_lookup_table_program::state::LookupTableMeta, - solana_program_runtime::invoke_context::Executors, + solana_program_runtime::executor_cache::Executors, solana_sdk::{ account::{AccountSharedData, WritableAccount}, epoch_schedule::EpochSchedule, diff --git a/runtime/src/bank.rs b/runtime/src/bank.rs index 9f10e968c993de..56a7b318140715 100644 --- a/runtime/src/bank.rs +++ b/runtime/src/bank.rs @@ -76,7 +76,6 @@ use { dashmap::{DashMap, DashSet}, itertools::Itertools, log::*, - rand::Rng, rayon::{ iter::{IntoParallelIterator, IntoParallelRefIterator, ParallelIterator}, ThreadPool, ThreadPoolBuilder, @@ -86,9 +85,8 @@ use { solana_program_runtime::{ accounts_data_meter::MAX_ACCOUNTS_DATA_LEN, compute_budget::{self, ComputeBudget}, - invoke_context::{ - BuiltinProgram, Executor, Executors, ProcessInstructionWithContext, TransactionExecutor, - }, + executor_cache::{CachedExecutors, Executors, TransactionExecutor, MAX_CACHED_EXECUTORS}, + invoke_context::{BuiltinProgram, ProcessInstructionWithContext}, log_collector::LogCollector, sysvar_cache::SysvarCache, timings::{ExecuteTimingType, ExecuteTimings}, @@ -157,7 +155,7 @@ use { collections::{HashMap, HashSet}, convert::{TryFrom, TryInto}, fmt, mem, - ops::{Deref, Div, RangeInclusive}, + ops::{Deref, RangeInclusive}, path::PathBuf, rc::Rc, sync::{ @@ -314,272 +312,6 @@ pub struct SquashTiming { type EpochCount = u64; -mod executor_cache { - use {super::*, log}; - - #[derive(Debug, Default)] - pub struct Stats { - pub hits: AtomicU64, - pub misses: AtomicU64, - pub evictions: HashMap, - pub insertions: AtomicU64, - pub replacements: AtomicU64, - pub one_hit_wonders: AtomicU64, - } - - impl Stats { - pub fn submit(&self, slot: Slot) { - let hits = self.hits.load(Relaxed); - let misses = self.misses.load(Relaxed); - let insertions = self.insertions.load(Relaxed); - let replacements = self.replacements.load(Relaxed); - let one_hit_wonders = self.one_hit_wonders.load(Relaxed); - let evictions: u64 = self.evictions.values().sum(); - datapoint_info!( - "bank-executor-cache-stats", - ("slot", slot, i64), - ("hits", hits, i64), - ("misses", misses, i64), - ("evictions", evictions, i64), - ("insertions", insertions, i64), - ("replacements", replacements, i64), - ("one_hit_wonders", one_hit_wonders, i64), - ); - debug!( - "Executor Cache Stats -- Hits: {}, Misses: {}, Evictions: {}, Insertions: {}, Replacements: {}, One-Hit-Wonders: {}", - hits, misses, evictions, insertions, replacements, one_hit_wonders, - ); - if log_enabled!(log::Level::Trace) && !self.evictions.is_empty() { - let mut evictions = self.evictions.iter().collect::>(); - evictions.sort_by_key(|e| e.1); - let evictions = evictions - .into_iter() - .rev() - .map(|(program_id, evictions)| { - format!(" {:<44} {}", program_id.to_string(), evictions) - }) - .collect::>(); - let evictions = evictions.join("\n"); - trace!( - "Eviction Details:\n {:<44} {}\n{}", - "Program", - "Count", - evictions - ); - } - } - } -} - -const MAX_CACHED_EXECUTORS: usize = 256; -#[derive(Debug)] -struct CachedExecutorsEntry { - prev_epoch_count: u64, - epoch_count: AtomicU64, - executor: Arc, - hit_count: AtomicU64, -} - -impl Clone for CachedExecutorsEntry { - fn clone(&self) -> Self { - Self { - prev_epoch_count: self.prev_epoch_count, - epoch_count: AtomicU64::new(self.epoch_count.load(Relaxed)), - executor: self.executor.clone(), - hit_count: AtomicU64::new(self.hit_count.load(Relaxed)), - } - } -} - -/// LFU Cache of executors with single-epoch memory of usage counts -#[derive(Debug)] -struct CachedExecutors { - capacity: usize, - current_epoch: Epoch, - pub(self) executors: HashMap, - stats: executor_cache::Stats, -} - -impl Default for CachedExecutors { - fn default() -> Self { - Self { - capacity: MAX_CACHED_EXECUTORS, - current_epoch: Epoch::default(), - executors: HashMap::default(), - stats: executor_cache::Stats::default(), - } - } -} - -#[cfg(RUSTC_WITH_SPECIALIZATION)] -impl AbiExample for CachedExecutors { - fn example() -> Self { - // Delegate AbiExample impl to Default before going deep and stuck with - // not easily impl-able Arc due to rust's coherence issue - // This is safe because CachedExecutors isn't serializable by definition. - Self::default() - } -} - -impl CachedExecutors { - fn new(max_capacity: usize, current_epoch: Epoch) -> Self { - Self { - capacity: max_capacity, - current_epoch, - executors: HashMap::new(), - stats: executor_cache::Stats::default(), - } - } - - fn new_from_parent_bank_executors( - parent_bank_executors: &CachedExecutors, - current_epoch: Epoch, - ) -> Self { - let executors = if parent_bank_executors.current_epoch == current_epoch { - parent_bank_executors.executors.clone() - } else { - parent_bank_executors - .executors - .iter() - .map(|(&key, entry)| { - let entry = CachedExecutorsEntry { - prev_epoch_count: entry.epoch_count.load(Relaxed), - epoch_count: AtomicU64::default(), - executor: entry.executor.clone(), - hit_count: AtomicU64::new(entry.hit_count.load(Relaxed)), - }; - (key, entry) - }) - .collect() - }; - - Self { - capacity: parent_bank_executors.capacity, - current_epoch, - executors, - stats: executor_cache::Stats::default(), - } - } - - fn get(&self, pubkey: &Pubkey) -> Option> { - if let Some(entry) = self.executors.get(pubkey) { - self.stats.hits.fetch_add(1, Relaxed); - entry.epoch_count.fetch_add(1, Relaxed); - entry.hit_count.fetch_add(1, Relaxed); - Some(entry.executor.clone()) - } else { - self.stats.misses.fetch_add(1, Relaxed); - None - } - } - - fn put(&mut self, executors: &[(&Pubkey, Arc)]) { - let mut new_executors: Vec<_> = executors - .iter() - .filter_map(|(key, executor)| { - if let Some(mut entry) = self.remove(key) { - self.stats.replacements.fetch_add(1, Relaxed); - entry.executor = executor.clone(); - let _ = self.executors.insert(**key, entry); - None - } else { - self.stats.insertions.fetch_add(1, Relaxed); - Some((*key, executor)) - } - }) - .collect(); - - if !new_executors.is_empty() { - let mut counts = self - .executors - .iter() - .map(|(key, entry)| { - let count = entry.prev_epoch_count + entry.epoch_count.load(Relaxed); - (key, count) - }) - .collect::>(); - counts.sort_unstable_by_key(|(_, count)| *count); - - let primer_counts = Self::get_primer_counts(counts.as_slice(), new_executors.len()); - - if self.executors.len() >= self.capacity { - let mut least_keys = counts - .iter() - .take(new_executors.len()) - .map(|least| *least.0) - .collect::>(); - for least_key in least_keys.drain(..) { - let _ = self.remove(&least_key); - self.stats - .evictions - .entry(least_key) - .and_modify(|c| saturating_add_assign!(*c, 1)) - .or_insert(1); - } - } - - for ((key, executor), primer_count) in new_executors.drain(..).zip(primer_counts) { - let entry = CachedExecutorsEntry { - prev_epoch_count: 0, - epoch_count: AtomicU64::new(primer_count), - executor: executor.clone(), - hit_count: AtomicU64::new(1), - }; - let _ = self.executors.insert(*key, entry); - } - } - } - - fn remove(&mut self, pubkey: &Pubkey) -> Option { - let maybe_entry = self.executors.remove(pubkey); - if let Some(entry) = maybe_entry.as_ref() { - if entry.hit_count.load(Relaxed) == 1 { - self.stats.one_hit_wonders.fetch_add(1, Relaxed); - } - } - maybe_entry - } - - fn clear(&mut self) { - *self = CachedExecutors::default(); - } - - fn get_primer_count_upper_bound_inclusive(counts: &[(&Pubkey, u64)]) -> u64 { - const PRIMER_COUNT_TARGET_PERCENTILE: u64 = 85; - #[allow(clippy::assertions_on_constants)] - { - assert!(PRIMER_COUNT_TARGET_PERCENTILE <= 100); - } - // Executor use-frequencies are assumed to fit a Pareto distribution. Choose an - // upper-bound for our primer count as the actual count at the target rank to avoid - // an upward bias - - let target_index = u64::try_from(counts.len().saturating_sub(1)) - .ok() - .and_then(|counts| { - let index = counts - .saturating_mul(PRIMER_COUNT_TARGET_PERCENTILE) - .div(100); // switch to u64::saturating_div once stable - usize::try_from(index).ok() - }) - .unwrap_or(0); - - counts - .get(target_index) - .map(|(_, count)| *count) - .unwrap_or(0) - } - - fn get_primer_counts(counts: &[(&Pubkey, u64)], num_counts: usize) -> Vec { - let max_primer_count = Self::get_primer_count_upper_bound_inclusive(counts); - let mut rng = rand::thread_rng(); - - (0..num_counts) - .map(|_| rng.gen_range(0, max_primer_count.saturating_add(1))) - .collect::>() - } -} - #[derive(Debug)] pub struct BankRc { /// where all the Accounts are stored @@ -8077,8 +7809,10 @@ pub(crate) mod tests { status_cache::MAX_CACHE_ENTRIES, }, crossbeam_channel::{bounded, unbounded}, + rand::Rng, solana_program_runtime::{ compute_budget::MAX_COMPUTE_UNIT_LIMIT, + executor_cache::Executor, invoke_context::InvokeContext, prioritization_fee::{PrioritizationFeeDetails, PrioritizationFeeType}, }, @@ -15323,244 +15057,6 @@ pub(crate) mod tests { } } - #[test] - fn test_cached_executors() { - let key1 = solana_sdk::pubkey::new_rand(); - let key2 = solana_sdk::pubkey::new_rand(); - let key3 = solana_sdk::pubkey::new_rand(); - let key4 = solana_sdk::pubkey::new_rand(); - let executor: Arc = Arc::new(TestExecutor {}); - let mut cache = CachedExecutors::new(3, 0); - - cache.put(&[(&key1, executor.clone())]); - cache.put(&[(&key2, executor.clone())]); - cache.put(&[(&key3, executor.clone())]); - assert!(cache.get(&key1).is_some()); - assert!(cache.get(&key2).is_some()); - assert!(cache.get(&key3).is_some()); - - assert!(cache.get(&key1).is_some()); - assert!(cache.get(&key1).is_some()); - assert!(cache.get(&key2).is_some()); - cache.put(&[(&key4, executor.clone())]); - assert!(cache.get(&key4).is_some()); - let num_retained = [&key1, &key2, &key3] - .iter() - .filter_map(|key| cache.get(key)) - .count(); - assert_eq!(num_retained, 2); - - assert!(cache.get(&key4).is_some()); - assert!(cache.get(&key4).is_some()); - assert!(cache.get(&key4).is_some()); - cache.put(&[(&key3, executor.clone())]); - assert!(cache.get(&key3).is_some()); - let num_retained = [&key1, &key2, &key4] - .iter() - .filter_map(|key| cache.get(key)) - .count(); - assert_eq!(num_retained, 2); - } - - #[test] - fn test_cached_executor_eviction() { - let key1 = solana_sdk::pubkey::new_rand(); - let key2 = solana_sdk::pubkey::new_rand(); - let key3 = solana_sdk::pubkey::new_rand(); - let key4 = solana_sdk::pubkey::new_rand(); - let executor: Arc = Arc::new(TestExecutor {}); - let mut cache = CachedExecutors::new(3, 0); - assert!(cache.current_epoch == 0); - - cache.put(&[(&key1, executor.clone())]); - cache.put(&[(&key2, executor.clone())]); - cache.put(&[(&key3, executor.clone())]); - assert!(cache.get(&key1).is_some()); - assert!(cache.get(&key1).is_some()); - assert!(cache.get(&key1).is_some()); - - let mut cache = CachedExecutors::new_from_parent_bank_executors(&cache, 1); - assert!(cache.current_epoch == 1); - - assert!(cache.get(&key2).is_some()); - assert!(cache.get(&key2).is_some()); - assert!(cache.get(&key3).is_some()); - cache.put(&[(&key4, executor.clone())]); - - assert!(cache.get(&key4).is_some()); - let num_retained = [&key1, &key2, &key3] - .iter() - .filter_map(|key| cache.get(key)) - .count(); - assert_eq!(num_retained, 2); - - cache.put(&[(&key1, executor.clone())]); - cache.put(&[(&key3, executor.clone())]); - assert!(cache.get(&key1).is_some()); - assert!(cache.get(&key3).is_some()); - let num_retained = [&key2, &key4] - .iter() - .filter_map(|key| cache.get(key)) - .count(); - assert_eq!(num_retained, 1); - - cache = CachedExecutors::new_from_parent_bank_executors(&cache, 2); - assert!(cache.current_epoch == 2); - - cache.put(&[(&key3, executor.clone())]); - assert!(cache.get(&key3).is_some()); - } - - #[test] - fn test_cached_executors_evicts_smallest() { - let key1 = solana_sdk::pubkey::new_rand(); - let key2 = solana_sdk::pubkey::new_rand(); - let key3 = solana_sdk::pubkey::new_rand(); - let executor: Arc = Arc::new(TestExecutor {}); - let mut cache = CachedExecutors::new(2, 0); - - cache.put(&[(&key1, executor.clone())]); - for _ in 0..5 { - let _ = cache.get(&key1); - } - cache.put(&[(&key2, executor.clone())]); - // make key1's use-count for sure greater than key2's - let _ = cache.get(&key1); - - let mut entries = cache - .executors - .iter() - .map(|(k, v)| (*k, v.epoch_count.load(Relaxed))) - .collect::>(); - entries.sort_by_key(|(_, v)| *v); - assert!(entries[0].1 < entries[1].1); - - cache.put(&[(&key3, executor.clone())]); - assert!(cache.get(&entries[0].0).is_none()); - assert!(cache.get(&entries[1].0).is_some()); - } - - #[test] - fn test_cached_executors_one_hit_wonder_counter() { - let mut cache = CachedExecutors::new(1, 0); - - let one_hit_wonder = Pubkey::new_unique(); - let popular = Pubkey::new_unique(); - let executor: Arc = Arc::new(TestExecutor {}); - - // make sure we're starting from where we think we are - assert_eq!(cache.stats.one_hit_wonders.load(Relaxed), 0); - - // add our one-hit-wonder - cache.put(&[(&one_hit_wonder, executor.clone())]); - assert_eq!(cache.executors[&one_hit_wonder].hit_count.load(Relaxed), 1); - // displace the one-hit-wonder with "popular program" - cache.put(&[(&popular, executor.clone())]); - assert_eq!(cache.executors[&popular].hit_count.load(Relaxed), 1); - - // one-hit-wonder counter incremented - assert_eq!(cache.stats.one_hit_wonders.load(Relaxed), 1); - - // make "popular program" popular - cache.get(&popular).unwrap(); - assert_eq!(cache.executors[&popular].hit_count.load(Relaxed), 2); - - // evict "popular program" - cache.put(&[(&one_hit_wonder, executor.clone())]); - assert_eq!(cache.executors[&one_hit_wonder].hit_count.load(Relaxed), 1); - - // one-hit-wonder counter not incremented - assert_eq!(cache.stats.one_hit_wonders.load(Relaxed), 1); - } - - #[test] - fn test_cached_executors_stats() { - #[derive(Debug, Default, PartialEq)] - struct ComparableStats { - hits: u64, - misses: u64, - evictions: HashMap, - insertions: u64, - replacements: u64, - one_hit_wonders: u64, - } - impl From<&executor_cache::Stats> for ComparableStats { - fn from(stats: &executor_cache::Stats) -> Self { - let executor_cache::Stats { - hits, - misses, - evictions, - insertions, - replacements, - one_hit_wonders, - } = stats; - ComparableStats { - hits: hits.load(Relaxed), - misses: misses.load(Relaxed), - evictions: evictions.clone(), - insertions: insertions.load(Relaxed), - replacements: replacements.load(Relaxed), - one_hit_wonders: one_hit_wonders.load(Relaxed), - } - } - } - - const CURRENT_EPOCH: Epoch = 0; - let mut cache = CachedExecutors::new(2, CURRENT_EPOCH); - let mut expected_stats = ComparableStats::default(); - - let program_id1 = Pubkey::new_unique(); - let program_id2 = Pubkey::new_unique(); - let executor: Arc = Arc::new(TestExecutor {}); - - // make sure we're starting from where we think we are - assert_eq!(ComparableStats::from(&cache.stats), expected_stats,); - - // insert some executors - cache.put(&[(&program_id1, executor.clone())]); - cache.put(&[(&program_id2, executor.clone())]); - expected_stats.insertions += 2; - assert_eq!(ComparableStats::from(&cache.stats), expected_stats); - - // replace a one-hit-wonder executor - cache.put(&[(&program_id1, executor.clone())]); - expected_stats.replacements += 1; - expected_stats.one_hit_wonders += 1; - assert_eq!(ComparableStats::from(&cache.stats), expected_stats); - - // hit some executors - cache.get(&program_id1); - cache.get(&program_id1); - cache.get(&program_id2); - expected_stats.hits += 3; - assert_eq!(ComparableStats::from(&cache.stats), expected_stats); - - // miss an executor - cache.get(&Pubkey::new_unique()); - expected_stats.misses += 1; - assert_eq!(ComparableStats::from(&cache.stats), expected_stats); - - // evict an executor - cache.put(&[(&Pubkey::new_unique(), executor.clone())]); - expected_stats.insertions += 1; - expected_stats.evictions.insert(program_id2, 1); - assert_eq!(ComparableStats::from(&cache.stats), expected_stats); - - // make sure stats are cleared in new_from_parent - assert_eq!( - ComparableStats::from( - &CachedExecutors::new_from_parent_bank_executors(&cache, CURRENT_EPOCH).stats - ), - ComparableStats::default() - ); - assert_eq!( - ComparableStats::from( - &CachedExecutors::new_from_parent_bank_executors(&cache, CURRENT_EPOCH + 1).stats - ), - ComparableStats::default() - ); - } - #[test] fn test_bank_executor_cache() { solana_logger::setup(); @@ -18172,26 +17668,6 @@ pub(crate) mod tests { ); } - #[test] - fn test_executor_cache_get_primer_count_upper_bound_inclusive() { - let pubkey = Pubkey::default(); - let v = []; - assert_eq!( - CachedExecutors::get_primer_count_upper_bound_inclusive(&v), - 0 - ); - let v = [(&pubkey, 1)]; - assert_eq!( - CachedExecutors::get_primer_count_upper_bound_inclusive(&v), - 1 - ); - let v = (0u64..10).map(|i| (&pubkey, i)).collect::>(); - assert_eq!( - CachedExecutors::get_primer_count_upper_bound_inclusive(v.as_slice()), - 7 - ); - } - #[derive(Serialize, Deserialize)] enum MockTransferInstruction { Transfer(u64), diff --git a/runtime/src/message_processor.rs b/runtime/src/message_processor.rs index c1b06c141dbc98..01ed3273338756 100644 --- a/runtime/src/message_processor.rs +++ b/runtime/src/message_processor.rs @@ -3,7 +3,8 @@ use { solana_measure::measure::Measure, solana_program_runtime::{ compute_budget::ComputeBudget, - invoke_context::{BuiltinProgram, Executors, InvokeContext}, + executor_cache::Executors, + invoke_context::{BuiltinProgram, InvokeContext}, log_collector::LogCollector, sysvar_cache::SysvarCache, timings::{ExecuteDetailsTimings, ExecuteTimings}, From 04e0422b7f18e61480eb6cc01486ec23aac73646 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Tue, 11 Oct 2022 04:48:17 +0000 Subject: [PATCH 189/465] use signed repair request variants (backport #28283) (#28335) * use signed repair request variants (#28283) (cherry picked from commit 15050b14b99ad64e0fce3badf071adf376ea35aa) # Conflicts: # sdk/src/feature_set.rs * resolve merge conflicts Co-authored-by: Jeff Biseda --- core/src/ancestor_hashes_service.rs | 6 - core/src/repair_service.rs | 30 ++- core/src/serve_repair.rs | 271 ++++++---------------------- dos/src/main.rs | 6 +- sdk/src/feature_set.rs | 5 - 5 files changed, 73 insertions(+), 245 deletions(-) diff --git a/core/src/ancestor_hashes_service.rs b/core/src/ancestor_hashes_service.rs index 3f81d38e2a31b3..98972928cee7e5 100644 --- a/core/src/ancestor_hashes_service.rs +++ b/core/src/ancestor_hashes_service.rs @@ -643,7 +643,6 @@ impl AncestorHashesService { repair_stats, outstanding_requests, identity_keypair, - &root_bank, ) { request_throttle.push(timestamp()); repairable_dead_slot_pool.take(&slot).unwrap(); @@ -719,7 +718,6 @@ impl AncestorHashesService { repair_stats: &mut AncestorRepairRequestsStats, outstanding_requests: &RwLock, identity_keypair: &Keypair, - root_bank: &Bank, ) -> bool { let sampled_validators = serve_repair.repair_request_ancestor_hashes_sample_peers( duplicate_slot, @@ -738,7 +736,6 @@ impl AncestorHashesService { .add_request(AncestorHashesRepairType(duplicate_slot), timestamp()); let request_bytes = serve_repair.ancestor_repair_request_bytes( identity_keypair, - root_bank, pubkey, duplicate_slot, nonce, @@ -1164,7 +1161,6 @@ mod test { } = ManageAncestorHashesState::new(vote_simulator.bank_forks); let RepairInfo { - bank_forks, cluster_info: requester_cluster_info, cluster_slots, repair_validators, @@ -1181,7 +1177,6 @@ mod test { &mut repair_stats, &outstanding_requests, &requester_cluster_info.keypair(), - &bank_forks.read().unwrap().root_bank(), ); assert!(ancestor_hashes_request_statuses.is_empty()); @@ -1200,7 +1195,6 @@ mod test { &mut repair_stats, &outstanding_requests, &requester_cluster_info.keypair(), - &bank_forks.read().unwrap().root_bank(), ); assert_eq!(ancestor_hashes_request_statuses.len(), 1); diff --git a/core/src/repair_service.rs b/core/src/repair_service.rs index 6e5047e3cd114d..07c4d89967dc43 100644 --- a/core/src/repair_service.rs +++ b/core/src/repair_service.rs @@ -272,9 +272,6 @@ impl RepairService { let mut add_votes_elapsed; let root_bank = repair_info.bank_forks.read().unwrap().root_bank(); - let sign_repair_requests_feature_epoch = - ServeRepair::sign_repair_requests_activated_epoch(&root_bank); - let repairs = { let new_root = root_bank.slot(); @@ -331,16 +328,6 @@ impl RepairService { repairs .iter() .filter_map(|repair_request| { - let sign_repair_request = ServeRepair::should_sign_repair_request( - repair_request.slot(), - &root_bank, - sign_repair_requests_feature_epoch, - ); - let maybe_keypair = if sign_repair_request { - Some(identity_keypair) - } else { - None - }; let (to, req) = serve_repair .repair_request( &repair_info.cluster_slots, @@ -349,7 +336,7 @@ impl RepairService { &mut repair_stats, &repair_info.repair_validators, &mut outstanding_requests, - maybe_keypair, + identity_keypair, ) .ok()?; Some((req, to)) @@ -617,6 +604,7 @@ impl RepairService { repair_socket: &UdpSocket, repair_validators: &Option>, outstanding_requests: &RwLock, + identity_keypair: &Keypair, ) { duplicate_slot_repair_statuses.retain(|slot, status| { Self::update_duplicate_slot_repair_addr( @@ -641,6 +629,7 @@ impl RepairService { serve_repair, repair_stats, nonce, + identity_keypair, ) { info!( "repair req send_to {} ({}) error {:?}", @@ -667,13 +656,14 @@ impl RepairService { serve_repair: &ServeRepair, repair_stats: &mut RepairStats, nonce: Nonce, + identity_keypair: &Keypair, ) -> Result<()> { let req = serve_repair.map_repair_request( repair_type, repair_pubkey, repair_stats, nonce, - None, + identity_keypair, )?; repair_socket.send_to(&req, to)?; Ok(()) @@ -1091,10 +1081,9 @@ mod test { let blockstore_path = get_tmp_ledger_path!(); let blockstore = Blockstore::open(&blockstore_path).unwrap(); let cluster_slots = ClusterSlots::default(); - let serve_repair = ServeRepair::new( - Arc::new(new_test_cluster_info(Node::new_localhost().info)), - bank_forks, - ); + let cluster_info = Arc::new(new_test_cluster_info(Node::new_localhost().info)); + let identity_keypair = cluster_info.keypair().clone(); + let serve_repair = ServeRepair::new(cluster_info, bank_forks); let mut duplicate_slot_repair_statuses = HashMap::new(); let dead_slot = 9; let receive_socket = &UdpSocket::bind("0.0.0.0:0").unwrap(); @@ -1129,6 +1118,7 @@ mod test { &UdpSocket::bind("0.0.0.0:0").unwrap(), &None, &RwLock::new(OutstandingRequests::default()), + &identity_keypair, ); assert!(duplicate_slot_repair_statuses .get(&dead_slot) @@ -1154,6 +1144,7 @@ mod test { &UdpSocket::bind("0.0.0.0:0").unwrap(), &None, &RwLock::new(OutstandingRequests::default()), + &identity_keypair, ); assert_eq!(duplicate_slot_repair_statuses.len(), 1); assert!(duplicate_slot_repair_statuses.get(&dead_slot).is_some()); @@ -1172,6 +1163,7 @@ mod test { &UdpSocket::bind("0.0.0.0:0").unwrap(), &None, &RwLock::new(OutstandingRequests::default()), + &identity_keypair, ); assert!(duplicate_slot_repair_statuses.is_empty()); } diff --git a/core/src/serve_repair.rs b/core/src/serve_repair.rs index cf349a3b99f5b3..f90489e4c09ef2 100644 --- a/core/src/serve_repair.rs +++ b/core/src/serve_repair.rs @@ -29,16 +29,14 @@ use { data_budget::DataBudget, packet::{Packet, PacketBatch, PacketBatchRecycler}, }, - solana_runtime::{bank::Bank, bank_forks::BankForks}, + solana_runtime::bank_forks::BankForks, solana_sdk::{ clock::Slot, - feature_set::sign_repair_requests, hash::{Hash, HASH_BYTES}, packet::PACKET_DATA_SIZE, pubkey::{Pubkey, PUBKEY_BYTES}, signature::{Signable, Signature, Signer, SIGNATURE_BYTES}, signer::keypair::Keypair, - stake_history::Epoch, timing::{duration_as_ms, timestamp}, }, solana_streamer::{ @@ -317,10 +315,6 @@ impl ServeRepair { } } - fn my_info(&self) -> ContactInfo { - self.cluster_info.my_contact_info() - } - pub(crate) fn my_id(&self) -> Pubkey { self.cluster_info.id() } @@ -429,24 +423,6 @@ impl ServeRepair { } } - pub(crate) fn sign_repair_requests_activated_epoch(root_bank: &Bank) -> Option { - root_bank - .feature_set - .activated_slot(&sign_repair_requests::id()) - .map(|slot| root_bank.epoch_schedule().get_epoch(slot)) - } - - pub(crate) fn should_sign_repair_request( - slot: Slot, - root_bank: &Bank, - sign_repairs_epoch: Option, - ) -> bool { - match sign_repairs_epoch { - None => false, - Some(feature_epoch) => feature_epoch < root_bank.epoch_schedule().get_epoch(slot), - } - } - /// Process messages from the network fn run_listen( &self, @@ -755,38 +731,22 @@ impl ServeRepair { pub fn ancestor_repair_request_bytes( &self, keypair: &Keypair, - root_bank: &Bank, repair_peer_id: &Pubkey, request_slot: Slot, nonce: Nonce, ) -> Result> { - let sign_repairs_epoch = Self::sign_repair_requests_activated_epoch(root_bank); - let require_sig = - Self::should_sign_repair_request(request_slot, root_bank, sign_repairs_epoch); - - let (request_proto, maybe_keypair) = if require_sig { - let header = RepairRequestHeader { - signature: Signature::default(), - sender: self.my_id(), - recipient: *repair_peer_id, - timestamp: timestamp(), - nonce, - }; - ( - RepairProtocol::AncestorHashes { - header, - slot: request_slot, - }, - Some(keypair), - ) - } else { - ( - RepairProtocol::LegacyAncestorHashes(self.my_info(), request_slot, nonce), - None, - ) + let header = RepairRequestHeader { + signature: Signature::default(), + sender: self.my_id(), + recipient: *repair_peer_id, + timestamp: timestamp(), + nonce, }; - - Self::repair_proto_to_bytes(&request_proto, maybe_keypair) + let request = RepairProtocol::AncestorHashes { + header, + slot: request_slot, + }; + Self::repair_proto_to_bytes(&request, keypair) } pub(crate) fn repair_request( @@ -797,7 +757,7 @@ impl ServeRepair { repair_stats: &mut RepairStats, repair_validators: &Option>, outstanding_requests: &mut OutstandingShredRepairs, - identity_keypair: Option<&Keypair>, + identity_keypair: &Keypair, ) -> Result<(SocketAddr, Vec)> { // find a peer that appears to be accepting replication and has the desired slot, as indicated // by a valid tvu port location @@ -873,67 +833,41 @@ impl ServeRepair { repair_peer_id: &Pubkey, repair_stats: &mut RepairStats, nonce: Nonce, - identity_keypair: Option<&Keypair>, + identity_keypair: &Keypair, ) -> Result> { - let header = if identity_keypair.is_some() { - Some(RepairRequestHeader { - signature: Signature::default(), - sender: self.my_id(), - recipient: *repair_peer_id, - timestamp: timestamp(), - nonce, - }) - } else { - None + let header = RepairRequestHeader { + signature: Signature::default(), + sender: self.my_id(), + recipient: *repair_peer_id, + timestamp: timestamp(), + nonce, }; let request_proto = match repair_request { ShredRepairType::Shred(slot, shred_index) => { repair_stats .shred .update(repair_peer_id, *slot, *shred_index); - if let Some(header) = header { - RepairProtocol::WindowIndex { - header, - slot: *slot, - shred_index: *shred_index, - } - } else { - RepairProtocol::LegacyWindowIndexWithNonce( - self.my_info(), - *slot, - *shred_index, - nonce, - ) + RepairProtocol::WindowIndex { + header, + slot: *slot, + shred_index: *shred_index, } } ShredRepairType::HighestShred(slot, shred_index) => { repair_stats .highest_shred .update(repair_peer_id, *slot, *shred_index); - if let Some(header) = header { - RepairProtocol::HighestWindowIndex { - header, - slot: *slot, - shred_index: *shred_index, - } - } else { - RepairProtocol::LegacyHighestWindowIndexWithNonce( - self.my_info(), - *slot, - *shred_index, - nonce, - ) + RepairProtocol::HighestWindowIndex { + header, + slot: *slot, + shred_index: *shred_index, } } ShredRepairType::Orphan(slot) => { repair_stats.orphan.update(repair_peer_id, *slot, 0); - if let Some(header) = header { - RepairProtocol::Orphan { - header, - slot: *slot, - } - } else { - RepairProtocol::LegacyOrphanWithNonce(self.my_info(), *slot, nonce) + RepairProtocol::Orphan { + header, + slot: *slot, } } }; @@ -994,17 +928,12 @@ impl ServeRepair { } } - pub fn repair_proto_to_bytes( - request: &RepairProtocol, - keypair: Option<&Keypair>, - ) -> Result> { + pub fn repair_proto_to_bytes(request: &RepairProtocol, keypair: &Keypair) -> Result> { + debug_assert!(request.supports_signature()); let mut payload = serialize(&request)?; - if let Some(keypair) = keypair { - debug_assert!(request.supports_signature()); - let signable_data = [&payload[..4], &payload[4 + SIGNATURE_BYTES..]].concat(); - let signature = keypair.sign_message(&signable_data[..]); - payload[4..4 + SIGNATURE_BYTES].copy_from_slice(signature.as_ref()); - } + let signable_data = [&payload[..4], &payload[4 + SIGNATURE_BYTES..]].concat(); + let signature = keypair.sign_message(&signable_data[..]); + payload[4..4 + SIGNATURE_BYTES].copy_from_slice(signature.as_ref()); Ok(payload) } @@ -1233,7 +1162,7 @@ mod tests { &repair_peer_id, &mut RepairStats::default(), 456, - Some(&keypair), + &keypair, ) .unwrap(); @@ -1257,7 +1186,7 @@ mod tests { #[test] fn test_serialize_deserialize_ancestor_hashes_request() { - let slot = 50; + let slot: Slot = 50; let nonce = 70; let me = ContactInfo::new_localhost(&solana_sdk::pubkey::new_rand(), timestamp()); let cluster_info = Arc::new(new_test_cluster_info(me)); @@ -1268,11 +1197,10 @@ mod tests { let mut bank = Bank::new_for_tests(&genesis_config); bank.feature_set = Arc::new(FeatureSet::all_enabled()); let bank_forks = Arc::new(RwLock::new(BankForks::new(bank))); - let serve_repair = ServeRepair::new(cluster_info.clone(), bank_forks.clone()); + let serve_repair = ServeRepair::new(cluster_info, bank_forks); - let root_bank = bank_forks.read().unwrap().root_bank(); let request_bytes = serve_repair - .ancestor_repair_request_bytes(&keypair, &root_bank, &repair_peer_id, slot, nonce) + .ancestor_repair_request_bytes(&keypair, &repair_peer_id, slot, nonce) .unwrap(); let mut cursor = Cursor::new(&request_bytes[..]); let deserialized_request: RepairProtocol = @@ -1294,35 +1222,10 @@ mod tests { } else { panic!("unexpected request type {:?}", &deserialized_request); } - - let mut bank = Bank::new_for_tests(&genesis_config); - let mut feature_set = FeatureSet::all_enabled(); - feature_set.deactivate(&sign_repair_requests::id()); - bank.feature_set = Arc::new(feature_set); - let bank_forks = Arc::new(RwLock::new(BankForks::new(bank))); - let serve_repair = ServeRepair::new(cluster_info, bank_forks.clone()); - - let root_bank = bank_forks.read().unwrap().root_bank(); - let request_bytes = serve_repair - .ancestor_repair_request_bytes(&keypair, &root_bank, &repair_peer_id, slot, nonce) - .unwrap(); - let mut cursor = Cursor::new(&request_bytes[..]); - let deserialized_request: RepairProtocol = - deserialize_from_with_limit(&mut cursor).unwrap(); - assert_eq!(cursor.position(), request_bytes.len() as u64); - if let RepairProtocol::LegacyAncestorHashes(ci, deserialized_slot, deserialized_nonce) = - deserialized_request - { - assert_eq!(slot, deserialized_slot); - assert_eq!(nonce, deserialized_nonce); - assert_eq!(&serve_repair.my_id(), &ci.id); - } else { - panic!("unexpected request type {:?}", &deserialized_request); - } } #[test] - fn test_map_requests_signed_unsigned() { + fn test_map_requests_signed() { let GenesisConfigInfo { genesis_config, .. } = create_genesis_config(10_000); let bank = Bank::new_for_tests(&genesis_config); let bank_forks = Arc::new(RwLock::new(BankForks::new(bank))); @@ -1337,20 +1240,20 @@ mod tests { let nonce = 70; let request = ShredRepairType::Shred(slot, shred_index); - let rsp = serve_repair + let request_bytes = serve_repair .map_repair_request( &request, &repair_peer_id, &mut RepairStats::default(), nonce, - Some(&keypair), + &keypair, ) .unwrap(); - let mut cursor = Cursor::new(&rsp[..]); + let mut cursor = Cursor::new(&request_bytes[..]); let deserialized_request: RepairProtocol = deserialize_from_with_limit(&mut cursor).unwrap(); - assert_eq!(cursor.position(), rsp.len() as u64); + assert_eq!(cursor.position(), request_bytes.len() as u64); if let RepairProtocol::WindowIndex { header, slot: deserialized_slot, @@ -1362,7 +1265,7 @@ mod tests { assert_eq!(header.nonce, nonce); assert_eq!(&header.sender, &serve_repair.my_id()); assert_eq!(&header.recipient, &repair_peer_id); - let signed_data = [&rsp[..4], &rsp[4 + SIGNATURE_BYTES..]].concat(); + let signed_data = [&request_bytes[..4], &request_bytes[4 + SIGNATURE_BYTES..]].concat(); assert!(header .signature .verify(keypair.pubkey().as_ref(), &signed_data)); @@ -1370,50 +1273,21 @@ mod tests { panic!("unexpected request type {:?}", &deserialized_request); } - let rsp = serve_repair - .map_repair_request( - &request, - &repair_peer_id, - &mut RepairStats::default(), - nonce, - None, - ) - .unwrap(); - - let mut cursor = Cursor::new(&rsp[..]); - let deserialized_request: RepairProtocol = - deserialize_from_with_limit(&mut cursor).unwrap(); - assert_eq!(cursor.position(), rsp.len() as u64); - if let RepairProtocol::LegacyWindowIndexWithNonce( - ci, - deserialized_slot, - deserialized_shred_index, - deserialized_nonce, - ) = deserialized_request - { - assert_eq!(slot, deserialized_slot); - assert_eq!(shred_index, deserialized_shred_index); - assert_eq!(nonce, deserialized_nonce); - assert_eq!(&serve_repair.my_id(), &ci.id); - } else { - panic!("unexpected request type {:?}", &deserialized_request); - } - let request = ShredRepairType::HighestShred(slot, shred_index); - let rsp = serve_repair + let request_bytes = serve_repair .map_repair_request( &request, &repair_peer_id, &mut RepairStats::default(), nonce, - Some(&keypair), + &keypair, ) .unwrap(); - let mut cursor = Cursor::new(&rsp[..]); + let mut cursor = Cursor::new(&request_bytes[..]); let deserialized_request: RepairProtocol = deserialize_from_with_limit(&mut cursor).unwrap(); - assert_eq!(cursor.position(), rsp.len() as u64); + assert_eq!(cursor.position(), request_bytes.len() as u64); if let RepairProtocol::HighestWindowIndex { header, slot: deserialized_slot, @@ -1425,42 +1299,13 @@ mod tests { assert_eq!(header.nonce, nonce); assert_eq!(&header.sender, &serve_repair.my_id()); assert_eq!(&header.recipient, &repair_peer_id); - let signed_data = [&rsp[..4], &rsp[4 + SIGNATURE_BYTES..]].concat(); + let signed_data = [&request_bytes[..4], &request_bytes[4 + SIGNATURE_BYTES..]].concat(); assert!(header .signature .verify(keypair.pubkey().as_ref(), &signed_data)); } else { panic!("unexpected request type {:?}", &deserialized_request); } - - let rsp = serve_repair - .map_repair_request( - &request, - &repair_peer_id, - &mut RepairStats::default(), - nonce, - None, - ) - .unwrap(); - - let mut cursor = Cursor::new(&rsp[..]); - let deserialized_request: RepairProtocol = - deserialize_from_with_limit(&mut cursor).unwrap(); - assert_eq!(cursor.position(), rsp.len() as u64); - if let RepairProtocol::LegacyHighestWindowIndexWithNonce( - ci, - deserialized_slot, - deserialized_shred_index, - deserialized_nonce, - ) = deserialized_request - { - assert_eq!(slot, deserialized_slot); - assert_eq!(shred_index, deserialized_shred_index); - assert_eq!(nonce, deserialized_nonce); - assert_eq!(&serve_repair.my_id(), &ci.id); - } else { - panic!("unexpected request type {:?}", &deserialized_request); - } } #[test] @@ -1687,6 +1532,7 @@ mod tests { let me = ContactInfo::new_localhost(&solana_sdk::pubkey::new_rand(), timestamp()); let cluster_info = Arc::new(new_test_cluster_info(me)); let serve_repair = ServeRepair::new(cluster_info.clone(), bank_forks); + let identity_keypair = cluster_info.keypair().clone(); let mut outstanding_requests = OutstandingShredRepairs::default(); let rv = serve_repair.repair_request( &cluster_slots, @@ -1695,7 +1541,7 @@ mod tests { &mut RepairStats::default(), &None, &mut outstanding_requests, - None, + &identity_keypair, ); assert_matches!(rv, Err(Error::ClusterInfo(ClusterInfoError::NoPeers))); @@ -1724,7 +1570,7 @@ mod tests { &mut RepairStats::default(), &None, &mut outstanding_requests, - None, + &identity_keypair, ) .unwrap(); assert_eq!(nxt.serve_repair, serve_repair_addr); @@ -1759,7 +1605,7 @@ mod tests { &mut RepairStats::default(), &None, &mut outstanding_requests, - None, + &identity_keypair, ) .unwrap(); if rv.0 == serve_repair_addr { @@ -2015,6 +1861,7 @@ mod tests { ContactInfo::new_localhost(&solana_sdk::pubkey::new_rand(), timestamp()); cluster_info.insert_info(contact_info2.clone()); cluster_info.insert_info(contact_info3.clone()); + let identity_keypair = cluster_info.keypair().clone(); let serve_repair = ServeRepair::new(cluster_info, bank_forks); // If: @@ -2032,7 +1879,7 @@ mod tests { &mut RepairStats::default(), &known_validators, &mut OutstandingShredRepairs::default(), - None, + &identity_keypair, ) .is_err()); } @@ -2050,7 +1897,7 @@ mod tests { &mut RepairStats::default(), &known_validators, &mut OutstandingShredRepairs::default(), - None, + &identity_keypair, ) .is_ok()); @@ -2072,7 +1919,7 @@ mod tests { &mut RepairStats::default(), &None, &mut OutstandingShredRepairs::default(), - None, + &identity_keypair, ) .is_ok()); } diff --git a/dos/src/main.rs b/dos/src/main.rs index fa75fe90b79435..f86ca781d710e0 100644 --- a/dos/src/main.rs +++ b/dos/src/main.rs @@ -646,7 +646,7 @@ fn run_dos( slot, shred_index: 0, }; - ServeRepair::repair_proto_to_bytes(&req, Some(&keypair)).unwrap() + ServeRepair::repair_proto_to_bytes(&req, &keypair).unwrap() } DataType::RepairShred => { let slot = 100; @@ -657,14 +657,14 @@ fn run_dos( slot, shred_index: 0, }; - ServeRepair::repair_proto_to_bytes(&req, Some(&keypair)).unwrap() + ServeRepair::repair_proto_to_bytes(&req, &keypair).unwrap() } DataType::RepairOrphan => { let slot = 100; let keypair = Keypair::new(); let header = RepairRequestHeader::new(keypair.pubkey(), target_id, timestamp(), 0); let req = RepairProtocol::Orphan { header, slot }; - ServeRepair::repair_proto_to_bytes(&req, Some(&keypair)).unwrap() + ServeRepair::repair_proto_to_bytes(&req, &keypair).unwrap() } DataType::Random => { vec![0; params.data_size] diff --git a/sdk/src/feature_set.rs b/sdk/src/feature_set.rs index 1a81ec00c034e6..7cb1e119a2a8f8 100644 --- a/sdk/src/feature_set.rs +++ b/sdk/src/feature_set.rs @@ -484,10 +484,6 @@ pub mod compact_vote_state_updates { solana_sdk::declare_id!("86HpNqzutEZwLcPxS6EHDcMNYWk6ikhteg9un7Y2PBKE"); } -pub mod sign_repair_requests { - solana_sdk::declare_id!("sigrs6u1EWeHuoKFkY8RR7qcSsPmrAeBBPESyf5pnYe"); -} - pub mod concurrent_replay_of_forks { solana_sdk::declare_id!("9F2Dcu8xkBPKxiiy65XKPZYdCG3VZDpjDTuSmeYLozJe"); } @@ -623,7 +619,6 @@ lazy_static! { (loosen_cpi_size_restriction::id(), "loosen cpi size restrictions #26641"), (use_default_units_in_fee_calculation::id(), "use default units per instruction in fee calculation #26785"), (compact_vote_state_updates::id(), "Compact vote state updates to lower block size"), - (sign_repair_requests::id(), "sign repair requests #26834"), (concurrent_replay_of_forks::id(), "Allow slots from different forks to be replayed concurrently #26465"), (incremental_snapshot_only_incremental_hash_calculation::id(), "only hash accounts in incremental snapshot during incremental snapshot creation #26799"), (vote_state_update_root_fix::id(), "fix root in vote state updates #27361"), From 1a96e6f7945b9c08582ae583ec7126556588e981 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Thu, 13 Oct 2022 01:43:19 +0000 Subject: [PATCH 190/465] Add syscall curve group ops tests (backport #27937) (#28359) * Add syscall curve group ops tests (#27937) * resolve rebase conflict * fix logic when group ops fail * update bpf loader id (cherry picked from commit 751ec864da08346b93ea657d2be7261aa8f54c14) # Conflicts: # programs/bpf_loader/src/syscalls/mod.rs * resolve conflict Co-authored-by: samkim-crypto --- programs/bpf_loader/src/syscalls/mod.rs | 636 +++++++++++++++++++++++- 1 file changed, 630 insertions(+), 6 deletions(-) diff --git a/programs/bpf_loader/src/syscalls/mod.rs b/programs/bpf_loader/src/syscalls/mod.rs index 651b714396e86b..c5699240d838b0 100644 --- a/programs/bpf_loader/src/syscalls/mod.rs +++ b/programs/bpf_loader/src/syscalls/mod.rs @@ -1239,7 +1239,8 @@ declare_syscall!( ), result ) = result_point; - *result = Ok(0); + } else { + *result = Ok(1); } } SUB => { @@ -1274,7 +1275,8 @@ declare_syscall!( ), result ) = result_point; - *result = Ok(0); + } else { + *result = Ok(1); } } MUL => { @@ -1309,7 +1311,8 @@ declare_syscall!( ), result ) = result_point; - *result = Ok(0); + } else { + *result = Ok(1); } } _ => { @@ -1350,7 +1353,8 @@ declare_syscall!( ), result ) = result_point; - *result = Ok(0); + } else { + *result = Ok(1); } } SUB => { @@ -1387,7 +1391,8 @@ declare_syscall!( ), result ) = result_point; - *result = Ok(0); + } else { + *result = Ok(1); } } MUL => { @@ -1422,7 +1427,8 @@ declare_syscall!( ), result ) = result_point; - *result = Ok(0); + } else { + *result = Ok(1); } } _ => { @@ -2789,6 +2795,624 @@ mod tests { ); } + #[test] + fn test_syscall_edwards_curve_point_validation() { + use solana_zk_token_sdk::curve25519::curve_syscall_traits::CURVE25519_EDWARDS; + + let config = Config::default(); + prepare_mockup!( + invoke_context, + transaction_context, + program_id, + bpf_loader::id(), + ); + + let valid_bytes: [u8; 32] = [ + 201, 179, 241, 122, 180, 185, 239, 50, 183, 52, 221, 0, 153, 195, 43, 18, 22, 38, 187, + 206, 179, 192, 210, 58, 53, 45, 150, 98, 89, 17, 158, 11, + ]; + let valid_bytes_va = 0x100000000; + + let invalid_bytes: [u8; 32] = [ + 120, 140, 152, 233, 41, 227, 203, 27, 87, 115, 25, 251, 219, 5, 84, 148, 117, 38, 84, + 60, 87, 144, 161, 146, 42, 34, 91, 155, 158, 189, 121, 79, + ]; + let invalid_bytes_va = 0x200000000; + + let mut memory_mapping = MemoryMapping::new::( + vec![ + MemoryRegion::default(), + MemoryRegion { + host_addr: valid_bytes.as_ptr() as *const _ as u64, + vm_addr: valid_bytes_va, + len: 32, + vm_gap_shift: 63, + is_writable: false, + }, + MemoryRegion { + host_addr: invalid_bytes.as_ptr() as *const _ as u64, + vm_addr: invalid_bytes_va, + len: 32, + vm_gap_shift: 63, + is_writable: false, + }, + ], + &config, + ) + .unwrap(); + + invoke_context + .get_compute_meter() + .borrow_mut() + .mock_set_remaining( + (invoke_context + .get_compute_budget() + .curve25519_edwards_validate_point_cost) + * 2, + ); + let mut syscall = SyscallCurvePointValidation { + invoke_context: Rc::new(RefCell::new(&mut invoke_context)), + }; + + let mut result: Result> = Ok(0); + syscall.call( + CURVE25519_EDWARDS, + valid_bytes_va, + 0, + 0, + 0, + &mut memory_mapping, + &mut result, + ); + assert_eq!(0, result.unwrap()); + + let mut result: Result> = Ok(0); + syscall.call( + CURVE25519_EDWARDS, + invalid_bytes_va, + 0, + 0, + 0, + &mut memory_mapping, + &mut result, + ); + assert_eq!(1, result.unwrap()); + + let mut result: Result> = Ok(0); + syscall.call( + CURVE25519_EDWARDS, + valid_bytes_va, + 0, + 0, + 0, + &mut memory_mapping, + &mut result, + ); + assert_eq!( + Err(EbpfError::UserError(BpfError::SyscallError( + SyscallError::InstructionError(InstructionError::ComputationalBudgetExceeded) + ))), + result + ); + } + + #[test] + fn test_syscall_ristretto_curve_point_validation() { + use solana_zk_token_sdk::curve25519::curve_syscall_traits::CURVE25519_RISTRETTO; + + let config = Config::default(); + prepare_mockup!( + invoke_context, + transaction_context, + program_id, + bpf_loader::id(), + ); + + let valid_bytes: [u8; 32] = [ + 226, 242, 174, 10, 106, 188, 78, 113, 168, 132, 169, 97, 197, 0, 81, 95, 88, 227, 11, + 106, 165, 130, 221, 141, 182, 166, 89, 69, 224, 141, 45, 118, + ]; + let valid_bytes_va = 0x100000000; + + let invalid_bytes: [u8; 32] = [ + 120, 140, 152, 233, 41, 227, 203, 27, 87, 115, 25, 251, 219, 5, 84, 148, 117, 38, 84, + 60, 87, 144, 161, 146, 42, 34, 91, 155, 158, 189, 121, 79, + ]; + let invalid_bytes_va = 0x200000000; + + let mut memory_mapping = MemoryMapping::new::( + vec![ + MemoryRegion::default(), + MemoryRegion { + host_addr: valid_bytes.as_ptr() as *const _ as u64, + vm_addr: valid_bytes_va, + len: 32, + vm_gap_shift: 63, + is_writable: false, + }, + MemoryRegion { + host_addr: invalid_bytes.as_ptr() as *const _ as u64, + vm_addr: invalid_bytes_va, + len: 32, + vm_gap_shift: 63, + is_writable: false, + }, + ], + &config, + ) + .unwrap(); + + invoke_context + .get_compute_meter() + .borrow_mut() + .mock_set_remaining( + (invoke_context + .get_compute_budget() + .curve25519_ristretto_validate_point_cost) + * 2, + ); + let mut syscall = SyscallCurvePointValidation { + invoke_context: Rc::new(RefCell::new(&mut invoke_context)), + }; + + let mut result: Result> = Ok(0); + syscall.call( + CURVE25519_RISTRETTO, + valid_bytes_va, + 0, + 0, + 0, + &mut memory_mapping, + &mut result, + ); + assert_eq!(0, result.unwrap()); + + let mut result: Result> = Ok(0); + syscall.call( + CURVE25519_RISTRETTO, + invalid_bytes_va, + 0, + 0, + 0, + &mut memory_mapping, + &mut result, + ); + assert_eq!(1, result.unwrap()); + + let mut result: Result> = Ok(0); + syscall.call( + CURVE25519_RISTRETTO, + valid_bytes_va, + 0, + 0, + 0, + &mut memory_mapping, + &mut result, + ); + assert_eq!( + Err(EbpfError::UserError(BpfError::SyscallError( + SyscallError::InstructionError(InstructionError::ComputationalBudgetExceeded) + ))), + result + ); + } + + #[test] + fn test_syscall_edwards_curve_group_ops() { + use solana_zk_token_sdk::curve25519::curve_syscall_traits::{ + ADD, CURVE25519_EDWARDS, MUL, SUB, + }; + + let config = Config::default(); + prepare_mockup!( + invoke_context, + transaction_context, + program_id, + bpf_loader::id(), + ); + + let left_point: [u8; 32] = [ + 33, 124, 71, 170, 117, 69, 151, 247, 59, 12, 95, 125, 133, 166, 64, 5, 2, 27, 90, 27, + 200, 167, 59, 164, 52, 54, 52, 200, 29, 13, 34, 213, + ]; + let left_point_va = 0x100000000; + let right_point: [u8; 32] = [ + 70, 222, 137, 221, 253, 204, 71, 51, 78, 8, 124, 1, 67, 200, 102, 225, 122, 228, 111, + 183, 129, 14, 131, 210, 212, 95, 109, 246, 55, 10, 159, 91, + ]; + let right_point_va = 0x200000000; + let scalar: [u8; 32] = [ + 254, 198, 23, 138, 67, 243, 184, 110, 236, 115, 236, 205, 205, 215, 79, 114, 45, 250, + 78, 137, 3, 107, 136, 237, 49, 126, 117, 223, 37, 191, 88, 6, + ]; + let scalar_va = 0x300000000; + let invalid_point: [u8; 32] = [ + 120, 140, 152, 233, 41, 227, 203, 27, 87, 115, 25, 251, 219, 5, 84, 148, 117, 38, 84, + 60, 87, 144, 161, 146, 42, 34, 91, 155, 158, 189, 121, 79, + ]; + let invalid_point_va = 0x400000000; + let result_point: [u8; 32] = [0; 32]; + let result_point_va = 0x500000000; + + let mut memory_mapping = MemoryMapping::new::( + vec![ + MemoryRegion::default(), + MemoryRegion { + host_addr: left_point.as_ptr() as *const _ as u64, + vm_addr: left_point_va, + len: 32, + vm_gap_shift: 63, + is_writable: false, + }, + MemoryRegion { + host_addr: right_point.as_ptr() as *const _ as u64, + vm_addr: right_point_va, + len: 32, + vm_gap_shift: 63, + is_writable: false, + }, + MemoryRegion { + host_addr: scalar.as_ptr() as *const _ as u64, + vm_addr: scalar_va, + len: 32, + vm_gap_shift: 63, + is_writable: false, + }, + MemoryRegion { + host_addr: invalid_point.as_ptr() as *const _ as u64, + vm_addr: invalid_point_va, + len: 32, + vm_gap_shift: 63, + is_writable: false, + }, + MemoryRegion { + host_addr: result_point.as_ptr() as *const _ as u64, + vm_addr: result_point_va, + len: 32, + vm_gap_shift: 63, + is_writable: true, + }, + ], + &config, + ) + .unwrap(); + + invoke_context + .get_compute_meter() + .borrow_mut() + .mock_set_remaining( + (invoke_context + .get_compute_budget() + .curve25519_edwards_add_cost + + invoke_context + .get_compute_budget() + .curve25519_edwards_subtract_cost + + invoke_context + .get_compute_budget() + .curve25519_edwards_multiply_cost) + * 2, + ); + let mut syscall = SyscallCurveGroupOps { + invoke_context: Rc::new(RefCell::new(&mut invoke_context)), + }; + + let mut result: Result> = Ok(0); + syscall.call( + CURVE25519_EDWARDS, + ADD, + left_point_va, + right_point_va, + result_point_va, + &mut memory_mapping, + &mut result, + ); + + assert_eq!(0, result.unwrap()); + let expected_sum = [ + 7, 251, 187, 86, 186, 232, 57, 242, 193, 236, 49, 200, 90, 29, 254, 82, 46, 80, 83, 70, + 244, 153, 23, 156, 2, 138, 207, 51, 165, 38, 200, 85, + ]; + assert_eq!(expected_sum, result_point); + + let mut result: Result> = Ok(0); + syscall.call( + CURVE25519_EDWARDS, + ADD, + invalid_point_va, + right_point_va, + result_point_va, + &mut memory_mapping, + &mut result, + ); + assert_eq!(1, result.unwrap()); + + let mut result: Result> = Ok(0); + syscall.call( + CURVE25519_EDWARDS, + SUB, + left_point_va, + right_point_va, + result_point_va, + &mut memory_mapping, + &mut result, + ); + + assert_eq!(0, result.unwrap()); + let expected_difference = [ + 60, 87, 90, 68, 232, 25, 7, 172, 247, 120, 158, 104, 52, 127, 94, 244, 5, 79, 253, 15, + 48, 69, 82, 134, 155, 70, 188, 81, 108, 95, 212, 9, + ]; + assert_eq!(expected_difference, result_point); + + let mut result: Result> = Ok(0); + syscall.call( + CURVE25519_EDWARDS, + SUB, + invalid_point_va, + right_point_va, + result_point_va, + &mut memory_mapping, + &mut result, + ); + assert_eq!(1, result.unwrap()); + + let mut result: Result> = Ok(0); + syscall.call( + CURVE25519_EDWARDS, + MUL, + scalar_va, + right_point_va, + result_point_va, + &mut memory_mapping, + &mut result, + ); + + result.unwrap(); + let expected_product = [ + 64, 150, 40, 55, 80, 49, 217, 209, 105, 229, 181, 65, 241, 68, 2, 106, 220, 234, 211, + 71, 159, 76, 156, 114, 242, 68, 147, 31, 243, 211, 191, 124, + ]; + assert_eq!(expected_product, result_point); + + let mut result: Result> = Ok(0); + syscall.call( + CURVE25519_EDWARDS, + MUL, + scalar_va, + invalid_point_va, + result_point_va, + &mut memory_mapping, + &mut result, + ); + assert_eq!(1, result.unwrap()); + + let mut result: Result> = Ok(0); + syscall.call( + CURVE25519_EDWARDS, + MUL, + scalar_va, + invalid_point_va, + result_point_va, + &mut memory_mapping, + &mut result, + ); + assert_eq!( + Err(EbpfError::UserError(BpfError::SyscallError( + SyscallError::InstructionError(InstructionError::ComputationalBudgetExceeded) + ))), + result + ); + } + + #[test] + fn test_syscall_ristretto_curve_group_ops() { + use solana_zk_token_sdk::curve25519::curve_syscall_traits::{ + ADD, CURVE25519_RISTRETTO, MUL, SUB, + }; + + let config = Config::default(); + prepare_mockup!( + invoke_context, + transaction_context, + program_id, + bpf_loader::id(), + ); + + let left_point: [u8; 32] = [ + 208, 165, 125, 204, 2, 100, 218, 17, 170, 194, 23, 9, 102, 156, 134, 136, 217, 190, 98, + 34, 183, 194, 228, 153, 92, 11, 108, 103, 28, 57, 88, 15, + ]; + let left_point_va = 0x100000000; + let right_point: [u8; 32] = [ + 208, 241, 72, 163, 73, 53, 32, 174, 54, 194, 71, 8, 70, 181, 244, 199, 93, 147, 99, + 231, 162, 127, 25, 40, 39, 19, 140, 132, 112, 212, 145, 108, + ]; + let right_point_va = 0x200000000; + let scalar: [u8; 32] = [ + 254, 198, 23, 138, 67, 243, 184, 110, 236, 115, 236, 205, 205, 215, 79, 114, 45, 250, + 78, 137, 3, 107, 136, 237, 49, 126, 117, 223, 37, 191, 88, 6, + ]; + let scalar_va = 0x300000000; + let invalid_point: [u8; 32] = [ + 120, 140, 152, 233, 41, 227, 203, 27, 87, 115, 25, 251, 219, 5, 84, 148, 117, 38, 84, + 60, 87, 144, 161, 146, 42, 34, 91, 155, 158, 189, 121, 79, + ]; + let invalid_point_va = 0x400000000; + let result_point: [u8; 32] = [0; 32]; + let result_point_va = 0x500000000; + + let mut memory_mapping = MemoryMapping::new::( + vec![ + MemoryRegion::default(), + MemoryRegion { + host_addr: left_point.as_ptr() as *const _ as u64, + vm_addr: left_point_va, + len: 32, + vm_gap_shift: 63, + is_writable: false, + }, + MemoryRegion { + host_addr: right_point.as_ptr() as *const _ as u64, + vm_addr: right_point_va, + len: 32, + vm_gap_shift: 63, + is_writable: false, + }, + MemoryRegion { + host_addr: scalar.as_ptr() as *const _ as u64, + vm_addr: scalar_va, + len: 32, + vm_gap_shift: 63, + is_writable: false, + }, + MemoryRegion { + host_addr: invalid_point.as_ptr() as *const _ as u64, + vm_addr: invalid_point_va, + len: 32, + vm_gap_shift: 63, + is_writable: false, + }, + MemoryRegion { + host_addr: result_point.as_ptr() as *const _ as u64, + vm_addr: result_point_va, + len: 32, + vm_gap_shift: 63, + is_writable: true, + }, + ], + &config, + ) + .unwrap(); + + invoke_context + .get_compute_meter() + .borrow_mut() + .mock_set_remaining( + (invoke_context + .get_compute_budget() + .curve25519_ristretto_add_cost + + invoke_context + .get_compute_budget() + .curve25519_ristretto_subtract_cost + + invoke_context + .get_compute_budget() + .curve25519_ristretto_multiply_cost) + * 2, + ); + let mut syscall = SyscallCurveGroupOps { + invoke_context: Rc::new(RefCell::new(&mut invoke_context)), + }; + + let mut result: Result> = Ok(0); + syscall.call( + CURVE25519_RISTRETTO, + ADD, + left_point_va, + right_point_va, + result_point_va, + &mut memory_mapping, + &mut result, + ); + + assert_eq!(0, result.unwrap()); + let expected_sum = [ + 78, 173, 9, 241, 180, 224, 31, 107, 176, 210, 144, 240, 118, 73, 70, 191, 128, 119, + 141, 113, 125, 215, 161, 71, 49, 176, 87, 38, 180, 177, 39, 78, + ]; + assert_eq!(expected_sum, result_point); + + let mut result: Result> = Ok(0); + syscall.call( + CURVE25519_RISTRETTO, + ADD, + invalid_point_va, + right_point_va, + result_point_va, + &mut memory_mapping, + &mut result, + ); + assert_eq!(1, result.unwrap()); + + let mut result: Result> = Ok(0); + syscall.call( + CURVE25519_RISTRETTO, + SUB, + left_point_va, + right_point_va, + result_point_va, + &mut memory_mapping, + &mut result, + ); + + assert_eq!(0, result.unwrap()); + let expected_difference = [ + 150, 72, 222, 61, 148, 79, 96, 130, 151, 176, 29, 217, 231, 211, 0, 215, 76, 86, 212, + 146, 110, 128, 24, 151, 187, 144, 108, 233, 221, 208, 157, 52, + ]; + assert_eq!(expected_difference, result_point); + + let mut result: Result> = Ok(0); + syscall.call( + CURVE25519_RISTRETTO, + SUB, + invalid_point_va, + right_point_va, + result_point_va, + &mut memory_mapping, + &mut result, + ); + + assert_eq!(1, result.unwrap()); + + let mut result: Result> = Ok(0); + syscall.call( + CURVE25519_RISTRETTO, + MUL, + scalar_va, + right_point_va, + result_point_va, + &mut memory_mapping, + &mut result, + ); + + result.unwrap(); + let expected_product = [ + 4, 16, 46, 2, 53, 151, 201, 133, 117, 149, 232, 164, 119, 109, 136, 20, 153, 24, 124, + 21, 101, 124, 80, 19, 119, 100, 77, 108, 65, 187, 228, 5, + ]; + assert_eq!(expected_product, result_point); + + let mut result: Result> = Ok(0); + syscall.call( + CURVE25519_RISTRETTO, + MUL, + scalar_va, + invalid_point_va, + result_point_va, + &mut memory_mapping, + &mut result, + ); + + assert_eq!(1, result.unwrap()); + + let mut result: Result> = Ok(0); + syscall.call( + CURVE25519_RISTRETTO, + MUL, + scalar_va, + invalid_point_va, + result_point_va, + &mut memory_mapping, + &mut result, + ); + assert_eq!( + Err(EbpfError::UserError(BpfError::SyscallError( + SyscallError::InstructionError(InstructionError::ComputationalBudgetExceeded) + ))), + result + ); + } + fn create_filled_type(zero_init: bool) -> T { let mut val = T::default(); let p = &mut val as *mut _ as *mut u8; From 2519042e21f07ca7e830566fd32d6f3d84958630 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Thu, 13 Oct 2022 04:52:39 +0000 Subject: [PATCH 191/465] syscalls: update costs for curve25519 operations (backport #28152) (#28373) syscalls: update costs for curve25519 operations (#28152) update costs (cherry picked from commit fcd301eeedd9c83147c109a239feb5e41d66a62c) Co-authored-by: samkim-crypto --- program-runtime/src/compute_budget.rs | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/program-runtime/src/compute_budget.rs b/program-runtime/src/compute_budget.rs index 31432f387f2fc5..2880cc9d69162c 100644 --- a/program-runtime/src/compute_budget.rs +++ b/program-runtime/src/compute_budget.rs @@ -109,14 +109,14 @@ impl ComputeBudget { sysvar_base_cost: 100, secp256k1_recover_cost: 25_000, syscall_base_cost: 100, - curve25519_edwards_validate_point_cost: 5_000, // TODO: precisely determine curve25519 costs - curve25519_edwards_add_cost: 5_000, - curve25519_edwards_subtract_cost: 5_000, - curve25519_edwards_multiply_cost: 10_000, - curve25519_ristretto_validate_point_cost: 5_000, - curve25519_ristretto_add_cost: 5_000, - curve25519_ristretto_subtract_cost: 5_000, - curve25519_ristretto_multiply_cost: 10_000, + curve25519_edwards_validate_point_cost: 111, + curve25519_edwards_add_cost: 331, + curve25519_edwards_subtract_cost: 329, + curve25519_edwards_multiply_cost: 1_753, + curve25519_ristretto_validate_point_cost: 117, + curve25519_ristretto_add_cost: 367, + curve25519_ristretto_subtract_cost: 366, + curve25519_ristretto_multiply_cost: 1_804, heap_size: None, heap_cost: 8, mem_op_base_cost: 10, From cb36b56f1006d5344e838e84c0da0389c9fd445b Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Thu, 13 Oct 2022 18:27:31 +0000 Subject: [PATCH 192/465] Fix blockstore_processor::load_frozen_forks() halt_at_slot behavior II (backport #28367) (#28371) Fix blockstore_processor::load_frozen_forks() halt_at_slot behavior II (#28367) PR #28317 previously attempted to fix a case where blockstore processing would create children banks for slots past the halt_at_slot. However, the previous fix didn't handle the case where a slot could be strictly less than the halt_at_slot, but have children that were greater than the halt_at_slot. For example, this could happen if a child of slot S is S+n where n > 1. Thus, this change covers our processing logic to cover this second case as well. (cherry picked from commit b8acb1b350ef5cdccea36bdfef2fdedb296a1038) Co-authored-by: steviez --- ledger/src/blockstore_processor.rs | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/ledger/src/blockstore_processor.rs b/ledger/src/blockstore_processor.rs index a1ad215c4f41a3..a51612886c001c 100644 --- a/ledger/src/blockstore_processor.rs +++ b/ledger/src/blockstore_processor.rs @@ -1304,6 +1304,7 @@ fn process_next_slots( blockstore: &Blockstore, leader_schedule_cache: &LeaderScheduleCache, pending_slots: &mut Vec<(SlotMeta, Bank, Hash)>, + halt_at_slot: Option, ) -> result::Result<(), BlockstoreProcessorError> { if meta.next_slots.is_empty() { return Ok(()); @@ -1311,6 +1312,13 @@ fn process_next_slots( // This is a fork point if there are multiple children, create a new child bank for each fork for next_slot in &meta.next_slots { + let skip_next_slot = halt_at_slot + .map(|halt_at_slot| *next_slot > halt_at_slot) + .unwrap_or(false); + if skip_next_slot { + continue; + } + let next_meta = blockstore .meta(*next_slot) .map_err(|err| { @@ -1382,6 +1390,7 @@ fn load_frozen_forks( blockstore, leader_schedule_cache, &mut pending_slots, + opts.halt_at_slot, )?; let on_halt_store_hash_raw_data_for_debug = opts.on_halt_store_hash_raw_data_for_debug; @@ -1526,6 +1535,7 @@ fn load_frozen_forks( blockstore, leader_schedule_cache, &mut pending_slots, + opts.halt_at_slot, )?; } } else if on_halt_store_hash_raw_data_for_debug { From e7bae210ef21ac120c4f479b279d5d4b4466f40c Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Fri, 14 Oct 2022 09:54:37 +0000 Subject: [PATCH 193/465] chore: send slack notification when Github Action fails (backport #28310) (#28395) chore: send slack notification when Github Action fails (#28310) chore: send slack notification when github action fails (cherry picked from commit 9fe46bb0380996db407a75e9890380cc142c9ccd) Co-authored-by: Yihau Chen --- .github/workflows/client-targets.yml | 9 +++++++++ .github/workflows/docs.yml | 10 ++++++++++ .github/workflows/export-github-repo.yml | 9 +++++++++ .github/workflows/release-artifacts-auto.yml | 14 ++++++++++++++ 4 files changed, 42 insertions(+) diff --git a/.github/workflows/client-targets.yml b/.github/workflows/client-targets.yml index 1c574ea0d39911..c5c85324619e1e 100644 --- a/.github/workflows/client-targets.yml +++ b/.github/workflows/client-targets.yml @@ -71,3 +71,12 @@ jobs: with: command: build args: -p solana-client --target ${{ matrix.target }} + - name: Send Slack notifiaction + if: failure() + env: + SLACK_BOT_TOKEN: ${{ secrets.SLACK_NOTIFICATIONS_BOT_TOKEN }} + uses: voxmedia/github-action-slack-notify-build@v1 + with: + channel: ${{ secrets.SLACK_CHANNEL }} + status: FAILED + color: danger diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index 72d5e9c20b6922..a78c1e25440a7b 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -68,3 +68,13 @@ jobs: ./build.sh env: VERCEL_TOKEN: ${{ secrets.VERCEL_TOKEN }} + + - name: Send Slack notifiaction + if: failure() + env: + SLACK_BOT_TOKEN: ${{ secrets.SLACK_NOTIFICATIONS_BOT_TOKEN }} + uses: voxmedia/github-action-slack-notify-build@v1 + with: + channel: ${{ secrets.SLACK_CHANNEL }} + status: FAILED + color: danger diff --git a/.github/workflows/export-github-repo.yml b/.github/workflows/export-github-repo.yml index 00be594f80483c..3a14a21e868b47 100644 --- a/.github/workflows/export-github-repo.yml +++ b/.github/workflows/export-github-repo.yml @@ -25,3 +25,12 @@ jobs: chmod +x ./ci/export-github-repo.sh ./ci/export-github-repo.sh web3.js/ solana-web3.js shell: bash + - name: Send Slack notifiaction + if: failure() + env: + SLACK_BOT_TOKEN: ${{ secrets.SLACK_NOTIFICATIONS_BOT_TOKEN }} + uses: voxmedia/github-action-slack-notify-build@v1 + with: + channel: ${{ secrets.SLACK_CHANNEL }} + status: FAILED + color: danger diff --git a/.github/workflows/release-artifacts-auto.yml b/.github/workflows/release-artifacts-auto.yml index 900bec36d974bd..22249d88d69ba2 100644 --- a/.github/workflows/release-artifacts-auto.yml +++ b/.github/workflows/release-artifacts-auto.yml @@ -17,3 +17,17 @@ jobs: AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} AWS_S3_BUCKET: ${{ secrets.AWS_S3_BUCKET }} + + send-slack-notification: + runs-on: ubuntu-20.04 + needs: + - release-artifacts + if: failure() + steps: + - env: + SLACK_BOT_TOKEN: ${{ secrets.SLACK_NOTIFICATIONS_BOT_TOKEN }} + uses: voxmedia/github-action-slack-notify-build@v1 + with: + channel: ${{ secrets.SLACK_CHANNEL }} + status: FAILED + color: danger From 4c50bf8df71e84609ae5419637fd2f52de86fbc2 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Fri, 14 Oct 2022 13:04:51 +0000 Subject: [PATCH 194/465] [zk-token-sdk] add pubkey proof (backport #28392) (#28396) [zk-token-sdk] add pubkey proof (#28392) * add pubkey proof * add pubkey sigma proof * add docs for the sigma proof functions * add pod public key sigma proof * add public-key validity proof instruction * add public-key validity proof instruction * add VerifyPubkeyValidity instruction * cargo fmt (cherry picked from commit bc927097cecd059922126512187c0fc86af67e40) Co-authored-by: samkim-crypto --- programs/zk-token-proof/src/lib.rs | 4 + zk-token-sdk/src/errors.rs | 8 + zk-token-sdk/src/instruction/close_account.rs | 2 +- zk-token-sdk/src/instruction/mod.rs | 3 +- .../src/instruction/pubkey_validity.rs | 105 ++++++++++++ zk-token-sdk/src/instruction/withdraw.rs | 2 +- .../src/instruction/withdraw_withheld.rs | 2 +- zk-token-sdk/src/sigma_proofs/errors.rs | 18 +++ zk-token-sdk/src/sigma_proofs/mod.rs | 1 + zk-token-sdk/src/sigma_proofs/pubkey_proof.rs | 153 ++++++++++++++++++ .../src/sigma_proofs/zero_balance_proof.rs | 6 +- zk-token-sdk/src/transcript.rs | 7 + zk-token-sdk/src/zk_token_elgamal/convert.rs | 15 ++ zk-token-sdk/src/zk_token_elgamal/pod.rs | 5 + .../src/zk_token_proof_instruction.rs | 14 ++ 15 files changed, 340 insertions(+), 5 deletions(-) create mode 100644 zk-token-sdk/src/instruction/pubkey_validity.rs create mode 100644 zk-token-sdk/src/sigma_proofs/pubkey_proof.rs diff --git a/programs/zk-token-proof/src/lib.rs b/programs/zk-token-proof/src/lib.rs index 6c51ade1d836f1..77d40064435a96 100644 --- a/programs/zk-token-proof/src/lib.rs +++ b/programs/zk-token-proof/src/lib.rs @@ -67,5 +67,9 @@ pub fn process_instruction( ic_msg!(invoke_context, "VerifyTransferWithFee"); verify::(invoke_context) } + ProofInstruction::VerifyPubkeyValidity => { + ic_msg!(invoke_context, "VerifyPubkeyValidity"); + verify::(invoke_context) + } } } diff --git a/zk-token-sdk/src/errors.rs b/zk-token-sdk/src/errors.rs index bb25ee911537f1..2b41fc04a5ba47 100644 --- a/zk-token-sdk/src/errors.rs +++ b/zk-token-sdk/src/errors.rs @@ -32,6 +32,8 @@ pub enum ProofError { DiscreteLogThreads, #[error("discrete log batch size too large")] DiscreteLogBatchSize, + #[error("public-key sigma proof failed to verify")] + PubkeySigmaProof, } #[derive(Error, Clone, Debug, Eq, PartialEq)] @@ -68,3 +70,9 @@ impl From for ProofError { Self::ValidityProof } } + +impl From for ProofError { + fn from(_err: PubkeySigmaProofError) -> Self { + Self::PubkeySigmaProof + } +} diff --git a/zk-token-sdk/src/instruction/close_account.rs b/zk-token-sdk/src/instruction/close_account.rs index 4525f87901cd71..5874266f423257 100644 --- a/zk-token-sdk/src/instruction/close_account.rs +++ b/zk-token-sdk/src/instruction/close_account.rs @@ -32,7 +32,7 @@ pub struct CloseAccountData { pub ciphertext: pod::ElGamalCiphertext, // 64 bytes /// Proof that the source account available balance is zero - pub proof: CloseAccountProof, // 64 bytes + pub proof: CloseAccountProof, // 96 bytes } #[cfg(not(target_os = "solana"))] diff --git a/zk-token-sdk/src/instruction/mod.rs b/zk-token-sdk/src/instruction/mod.rs index 3b2cf53925a8f7..a91e076c4bc3bf 100644 --- a/zk-token-sdk/src/instruction/mod.rs +++ b/zk-token-sdk/src/instruction/mod.rs @@ -1,4 +1,5 @@ pub mod close_account; +pub mod pubkey_validity; pub mod transfer; pub mod transfer_with_fee; pub mod withdraw; @@ -17,7 +18,7 @@ use { subtle::ConstantTimeEq, }; pub use { - close_account::CloseAccountData, transfer::TransferData, + close_account::CloseAccountData, pubkey_validity::PubkeyValidityData, transfer::TransferData, transfer_with_fee::TransferWithFeeData, withdraw::WithdrawData, withdraw_withheld::WithdrawWithheldTokensData, }; diff --git a/zk-token-sdk/src/instruction/pubkey_validity.rs b/zk-token-sdk/src/instruction/pubkey_validity.rs new file mode 100644 index 00000000000000..3fc5a6288fb446 --- /dev/null +++ b/zk-token-sdk/src/instruction/pubkey_validity.rs @@ -0,0 +1,105 @@ +use { + crate::zk_token_elgamal::pod, + bytemuck::{Pod, Zeroable}, +}; +#[cfg(not(target_os = "solana"))] +use { + crate::{ + encryption::elgamal::{ElGamalKeypair, ElGamalPubkey}, + errors::ProofError, + instruction::Verifiable, + sigma_proofs::pubkey_proof::PubkeySigmaProof, + transcript::TranscriptProtocol, + }, + merlin::Transcript, + std::convert::TryInto, +}; + +/// This struct includes the cryptographic proof *and* the account data information needed to +/// verify the proof +/// +/// - The pre-instruction should call PubkeyValidityData::verify_proof(&self) +/// - The actual program should check that the public key in this struct is consistent with what is +/// stored in the confidential token account +#[derive(Clone, Copy, Pod, Zeroable)] +#[repr(C)] +pub struct PubkeyValidityData { + /// The public key to be proved + pub pubkey: pod::ElGamalPubkey, + + /// Proof that the public key is well-formed + pub proof: PubkeyValidityProof, // 64 bytes +} + +#[cfg(not(target_os = "solana"))] +impl PubkeyValidityData { + pub fn new(keypair: &ElGamalKeypair) -> Result { + let pod_pubkey = pod::ElGamalPubkey(keypair.public.to_bytes()); + + let mut transcript = PubkeyValidityProof::transcript_new(&pod_pubkey); + + let proof = PubkeyValidityProof::new(keypair, &mut transcript); + + Ok(PubkeyValidityData { + pubkey: pod_pubkey, + proof, + }) + } +} + +#[cfg(not(target_os = "solana"))] +impl Verifiable for PubkeyValidityData { + fn verify(&self) -> Result<(), ProofError> { + let mut transcript = PubkeyValidityProof::transcript_new(&self.pubkey); + let pubkey = self.pubkey.try_into()?; + self.proof.verify(&pubkey, &mut transcript) + } +} + +#[derive(Clone, Copy, Pod, Zeroable)] +#[repr(C)] +#[allow(non_snake_case)] +pub struct PubkeyValidityProof { + /// Associated public-key sigma proof + pub proof: pod::PubkeySigmaProof, +} + +#[allow(non_snake_case)] +#[cfg(not(target_os = "solana"))] +impl PubkeyValidityProof { + fn transcript_new(pubkey: &pod::ElGamalPubkey) -> Transcript { + let mut transcript = Transcript::new(b"PubkeyProof"); + transcript.append_pubkey(b"pubkey", pubkey); + transcript + } + + pub fn new(keypair: &ElGamalKeypair, transcript: &mut Transcript) -> Self { + let proof = PubkeySigmaProof::new(keypair, transcript); + Self { + proof: proof.into(), + } + } + + pub fn verify( + &self, + pubkey: &ElGamalPubkey, + transcript: &mut Transcript, + ) -> Result<(), ProofError> { + let proof: PubkeySigmaProof = self.proof.try_into()?; + proof.verify(pubkey, transcript)?; + Ok(()) + } +} + +#[cfg(test)] +mod test { + use super::*; + + #[test] + fn test_pubkey_validity_correctness() { + let keypair = ElGamalKeypair::new_rand(); + + let pubkey_validity_data = PubkeyValidityData::new(&keypair).unwrap(); + assert!(pubkey_validity_data.verify().is_ok()); + } +} diff --git a/zk-token-sdk/src/instruction/withdraw.rs b/zk-token-sdk/src/instruction/withdraw.rs index 9aa606e8ca4203..5b84fe840bc616 100644 --- a/zk-token-sdk/src/instruction/withdraw.rs +++ b/zk-token-sdk/src/instruction/withdraw.rs @@ -43,8 +43,8 @@ pub struct WithdrawData { pub proof: WithdrawProof, // 736 bytes } +#[cfg(not(target_os = "solana"))] impl WithdrawData { - #[cfg(not(target_os = "solana"))] pub fn new( amount: u64, keypair: &ElGamalKeypair, diff --git a/zk-token-sdk/src/instruction/withdraw_withheld.rs b/zk-token-sdk/src/instruction/withdraw_withheld.rs index ba137912959f2e..e0e5363b4a0792 100644 --- a/zk-token-sdk/src/instruction/withdraw_withheld.rs +++ b/zk-token-sdk/src/instruction/withdraw_withheld.rs @@ -39,8 +39,8 @@ pub struct WithdrawWithheldTokensData { pub proof: WithdrawWithheldTokensProof, } +#[cfg(not(target_os = "solana"))] impl WithdrawWithheldTokensData { - #[cfg(not(target_os = "solana"))] pub fn new( withdraw_withheld_authority_keypair: &ElGamalKeypair, destination_pubkey: &ElGamalPubkey, diff --git a/zk-token-sdk/src/sigma_proofs/errors.rs b/zk-token-sdk/src/sigma_proofs/errors.rs index 6a441b0f5928d4..b42d8c96bb4a94 100644 --- a/zk-token-sdk/src/sigma_proofs/errors.rs +++ b/zk-token-sdk/src/sigma_proofs/errors.rs @@ -72,3 +72,21 @@ impl From for FeeSigmaProofError { Self::Transcript } } + +#[derive(Error, Clone, Debug, Eq, PartialEq)] +pub enum PubkeySigmaProofError { + #[error("the required algebraic relation does not hold")] + AlgebraicRelation, + #[error("malformed proof")] + Format, + #[error("multiscalar multiplication failed")] + MultiscalarMul, + #[error("transcript failed to produce a challenge")] + Transcript, +} + +impl From for PubkeySigmaProofError { + fn from(_err: TranscriptError) -> Self { + Self::Transcript + } +} diff --git a/zk-token-sdk/src/sigma_proofs/mod.rs b/zk-token-sdk/src/sigma_proofs/mod.rs index 53f5c7a9f296b2..3b0918fdab6369 100644 --- a/zk-token-sdk/src/sigma_proofs/mod.rs +++ b/zk-token-sdk/src/sigma_proofs/mod.rs @@ -18,5 +18,6 @@ pub mod equality_proof; pub mod errors; pub mod fee_proof; +pub mod pubkey_proof; pub mod validity_proof; pub mod zero_balance_proof; diff --git a/zk-token-sdk/src/sigma_proofs/pubkey_proof.rs b/zk-token-sdk/src/sigma_proofs/pubkey_proof.rs new file mode 100644 index 00000000000000..7dd49ad6d91cfe --- /dev/null +++ b/zk-token-sdk/src/sigma_proofs/pubkey_proof.rs @@ -0,0 +1,153 @@ +//! The public-key (validity) proof system. +//! +//! A public-key proof is defined with respect to an ElGamal public key. The proof certifies that a +//! given public key is a valid ElGamal public key (i.e. the prover knows a corresponding secret +//! key). To generate the proof, a prover must prove the secret key for the public key. +//! +//! The protocol guarantees computational soundness (by the hardness of discrete log) and perfect +//! zero-knowledge in the random oracle model. + +#[cfg(not(target_os = "solana"))] +use { + crate::encryption::{ + elgamal::{ElGamalKeypair, ElGamalPubkey}, + pedersen::H, + }, + rand::rngs::OsRng, + zeroize::Zeroize, +}; +use { + crate::{sigma_proofs::errors::PubkeySigmaProofError, transcript::TranscriptProtocol}, + arrayref::{array_ref, array_refs}, + curve25519_dalek::{ + ristretto::{CompressedRistretto, RistrettoPoint}, + scalar::Scalar, + traits::{IsIdentity, VartimeMultiscalarMul}, + }, + merlin::Transcript, +}; + +/// Public-key proof. +/// +/// Contains all the elliptic curve and scalar components that make up the sigma protocol. +#[allow(non_snake_case)] +#[derive(Clone)] +pub struct PubkeySigmaProof { + Y: CompressedRistretto, + z: Scalar, +} + +#[allow(non_snake_case)] +#[cfg(not(target_os = "solana"))] +impl PubkeySigmaProof { + /// Public-key proof constructor. + /// + /// The function does *not* hash the public key and ciphertext into the transcript. For + /// security, the caller (the main protocol) should hash these public key components prior to + /// invoking this constructor. + /// + /// This function is randomized. It uses `OsRng` internally to generate random scalars. + /// + /// This function panics if the provided keypair is not valid (i.e. secret key is not + /// invertible). + /// + /// * `elgamal_keypair` = The ElGamal keypair that pertains to the ElGamal public key to be + /// proved + /// * `transcript` - The transcript that does the bookkeeping for the Fiat-Shamir heuristic + pub fn new(elgamal_keypair: &ElGamalKeypair, transcript: &mut Transcript) -> Self { + transcript.pubkey_proof_domain_sep(); + + // extract the relevant scalar and Ristretto points from the input + let s = elgamal_keypair.secret.get_scalar(); + + assert!(s != &Scalar::zero()); + let s_inv = s.invert(); + + // generate a random masking factor that also serves as a nonce + let mut y = Scalar::random(&mut OsRng); + let Y = (&y * &(*H)).compress(); + + // record masking factors in transcript and get challenges + transcript.append_point(b"Y", &Y); + let c = transcript.challenge_scalar(b"c"); + + // compute masked secret key + let z = &(&c * s_inv) + &y; + + y.zeroize(); + + Self { Y, z } + } + + /// Public-key proof verifier. + /// + /// * `elgamal_pubkey` - The ElGamal public key to be proved + /// * `transcript` - The transcript that does the bookkeeping for the Fiat-Shamir heuristic + pub fn verify( + self, + elgamal_pubkey: &ElGamalPubkey, + transcript: &mut Transcript, + ) -> Result<(), PubkeySigmaProofError> { + transcript.pubkey_proof_domain_sep(); + + // extract the relvant scalar and Ristretto points from the input + let P = elgamal_pubkey.get_point(); + + // include Y to transcript and extract challenge + transcript.validate_and_append_point(b"Y", &self.Y)?; + let c = transcript.challenge_scalar(b"c"); + + // check that the required algebraic condition holds + let Y = self.Y.decompress().ok_or(PubkeySigmaProofError::Format)?; + + let check = RistrettoPoint::vartime_multiscalar_mul( + vec![&self.z, &(-&c), &(-&Scalar::one())], + vec![&(*H), P, &Y], + ); + + if check.is_identity() { + Ok(()) + } else { + Err(PubkeySigmaProofError::AlgebraicRelation) + } + } + + pub fn to_bytes(&self) -> [u8; 64] { + let mut buf = [0_u8; 64]; + buf[..32].copy_from_slice(self.Y.as_bytes()); + buf[32..64].copy_from_slice(self.z.as_bytes()); + buf + } + + pub fn from_bytes(bytes: &[u8]) -> Result { + if bytes.len() != 64 { + return Err(PubkeySigmaProofError::Format); + } + + let bytes = array_ref![bytes, 0, 64]; + let (Y, z) = array_refs![bytes, 32, 32]; + + let Y = CompressedRistretto::from_slice(Y); + let z = Scalar::from_canonical_bytes(*z).ok_or(PubkeySigmaProofError::Format)?; + + Ok(PubkeySigmaProof { Y, z }) + } +} + +#[cfg(test)] +mod test { + use super::*; + + #[test] + fn test_pubkey_proof_correctness() { + let keypair = ElGamalKeypair::new_rand(); + + let mut prover_transcript = Transcript::new(b"test"); + let mut verifier_transcript = Transcript::new(b"test"); + + let proof = PubkeySigmaProof::new(&keypair, &mut prover_transcript); + assert!(proof + .verify(&keypair.public, &mut verifier_transcript) + .is_ok()); + } +} diff --git a/zk-token-sdk/src/sigma_proofs/zero_balance_proof.rs b/zk-token-sdk/src/sigma_proofs/zero_balance_proof.rs index 17c19582a0a11a..cf77cd0a875abb 100644 --- a/zk-token-sdk/src/sigma_proofs/zero_balance_proof.rs +++ b/zk-token-sdk/src/sigma_proofs/zero_balance_proof.rs @@ -61,6 +61,8 @@ impl ZeroBalanceProof { ciphertext: &ElGamalCiphertext, transcript: &mut Transcript, ) -> Self { + transcript.zero_balance_proof_domain_sep(); + // extract the relevant scalar and Ristretto points from the input let P = elgamal_keypair.public.get_point(); let s = elgamal_keypair.secret.get_scalar(); @@ -98,6 +100,8 @@ impl ZeroBalanceProof { ciphertext: &ElGamalCiphertext, transcript: &mut Transcript, ) -> Result<(), ZeroBalanceProofError> { + transcript.zero_balance_proof_domain_sep(); + // extract the relevant scalar and Ristretto points from the input let P = elgamal_pubkey.get_point(); let C = ciphertext.commitment.get_point(); @@ -112,7 +116,7 @@ impl ZeroBalanceProof { let w_negated = -&w; - // decompress R or return verification error + // decompress Y or return verification error let Y_P = self.Y_P.decompress().ok_or(ZeroBalanceProofError::Format)?; let Y_D = self.Y_D.decompress().ok_or(ZeroBalanceProofError::Format)?; diff --git a/zk-token-sdk/src/transcript.rs b/zk-token-sdk/src/transcript.rs index d0dfda9e42e373..c0ed1161666c9e 100644 --- a/zk-token-sdk/src/transcript.rs +++ b/zk-token-sdk/src/transcript.rs @@ -58,6 +58,9 @@ pub trait TranscriptProtocol { /// Append a domain separator for fee sigma proof. fn fee_sigma_proof_domain_sep(&mut self); + /// Append a domain separator for public-key proof. + fn pubkey_proof_domain_sep(&mut self); + /// Check that a point is not the identity, then append it to the /// transcript. Otherwise, return an error. fn validate_and_append_point( @@ -161,4 +164,8 @@ impl TranscriptProtocol for Transcript { fn fee_sigma_proof_domain_sep(&mut self) { self.append_message(b"dom-sep", b"fee-sigma-proof") } + + fn pubkey_proof_domain_sep(&mut self) { + self.append_message(b"dom-sep", b"pubkey-proof") + } } diff --git a/zk-token-sdk/src/zk_token_elgamal/convert.rs b/zk-token-sdk/src/zk_token_elgamal/convert.rs index 92e206359148b3..f9fc92eeb5548d 100644 --- a/zk-token-sdk/src/zk_token_elgamal/convert.rs +++ b/zk-token-sdk/src/zk_token_elgamal/convert.rs @@ -67,6 +67,7 @@ mod target_arch { equality_proof::{CtxtCommEqualityProof, CtxtCtxtEqualityProof}, errors::*, fee_proof::FeeSigmaProof, + pubkey_proof::PubkeySigmaProof, validity_proof::{AggregatedValidityProof, ValidityProof}, zero_balance_proof::ZeroBalanceProof, }, @@ -272,6 +273,20 @@ mod target_arch { } } + impl From for pod::PubkeySigmaProof { + fn from(proof: PubkeySigmaProof) -> Self { + Self(proof.to_bytes()) + } + } + + impl TryFrom for PubkeySigmaProof { + type Error = PubkeySigmaProofError; + + fn try_from(pod: pod::PubkeySigmaProof) -> Result { + Self::from_bytes(&pod.0) + } + } + impl TryFrom for pod::RangeProof64 { type Error = RangeProofError; diff --git a/zk-token-sdk/src/zk_token_elgamal/pod.rs b/zk-token-sdk/src/zk_token_elgamal/pod.rs index cf1f87d65b52cd..2658e3a1446357 100644 --- a/zk-token-sdk/src/zk_token_elgamal/pod.rs +++ b/zk-token-sdk/src/zk_token_elgamal/pod.rs @@ -146,6 +146,11 @@ unsafe impl Pod for ZeroBalanceProof {} #[repr(transparent)] pub struct FeeSigmaProof(pub [u8; 256]); +/// Serialization of public-key sigma proof +#[derive(Clone, Copy, Pod, Zeroable)] +#[repr(transparent)] +pub struct PubkeySigmaProof(pub [u8; 64]); + /// Serialization of range proofs for 64-bit numbers (for `Withdraw` instruction) #[derive(Clone, Copy)] #[repr(transparent)] diff --git a/zk-token-sdk/src/zk_token_proof_instruction.rs b/zk-token-sdk/src/zk_token_proof_instruction.rs index d983454eb1b0d5..867e0f783c901a 100644 --- a/zk-token-sdk/src/zk_token_proof_instruction.rs +++ b/zk-token-sdk/src/zk_token_proof_instruction.rs @@ -59,6 +59,16 @@ pub enum ProofInstruction { /// `TransferWithFeeData` /// VerifyTransferWithFee, + + /// Verify a `PubkeyValidityData` struct + /// + /// Accounts expected by this instruction: + /// None + /// + /// Data expected by this instruction: + /// `PubkeyValidityData` + /// + VerifyPubkeyValidity, } impl ProofInstruction { @@ -104,3 +114,7 @@ pub fn verify_transfer(proof_data: &TransferData) -> Instruction { pub fn verify_transfer_with_fee(proof_data: &TransferWithFeeData) -> Instruction { ProofInstruction::VerifyTransferWithFee.encode(proof_data) } + +pub fn verify_pubkey_validity(proof_data: &PubkeyValidityData) -> Instruction { + ProofInstruction::VerifyPubkeyValidity.encode(proof_data) +} From 37dad4b79f4d268e64e7b3001ad7f4d5285b50f0 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Sun, 16 Oct 2022 01:29:19 +0000 Subject: [PATCH 195/465] [zk-token-sdk] Restructure proof error types (backport #28407) (#28412) [zk-token-sdk] Restructure proof error types (#28407) * add pubkey sigma proof * cargo fmt * add EncryptionError * add encryption errors (cherry picked from commit 00b1d0930f9cd45260feff10a901a87d1314c6d1) Co-authored-by: samkim-crypto --- zk-token-sdk/src/encryption/discrete_log.rs | 10 +++++----- zk-token-sdk/src/encryption/errors.rs | 10 ++++++++++ zk-token-sdk/src/encryption/mod.rs | 1 + zk-token-sdk/src/errors.rs | 14 ++++---------- zk-token-sdk/src/zk_token_elgamal/convert.rs | 10 +++++----- 5 files changed, 25 insertions(+), 20 deletions(-) create mode 100644 zk-token-sdk/src/encryption/errors.rs diff --git a/zk-token-sdk/src/encryption/discrete_log.rs b/zk-token-sdk/src/encryption/discrete_log.rs index bc50576998f330..e152dfe8b35558 100644 --- a/zk-token-sdk/src/encryption/discrete_log.rs +++ b/zk-token-sdk/src/encryption/discrete_log.rs @@ -17,7 +17,7 @@ #![cfg(not(target_os = "solana"))] use { - crate::errors::ProofError, + crate::encryption::errors::EncryptionError, curve25519_dalek::{ constants::RISTRETTO_BASEPOINT_POINT as G, ristretto::RistrettoPoint, @@ -100,10 +100,10 @@ impl DiscreteLog { } /// Adjusts number of threads in a discrete log instance. - pub fn num_threads(&mut self, num_threads: usize) -> Result<(), ProofError> { + pub fn num_threads(&mut self, num_threads: usize) -> Result<(), EncryptionError> { // number of threads must be a positive power-of-two integer if num_threads == 0 || (num_threads & (num_threads - 1)) != 0 || num_threads > 65536 { - return Err(ProofError::DiscreteLogThreads); + return Err(EncryptionError::DiscreteLogThreads); } self.num_threads = num_threads; @@ -117,9 +117,9 @@ impl DiscreteLog { pub fn set_compression_batch_size( &mut self, compression_batch_size: usize, - ) -> Result<(), ProofError> { + ) -> Result<(), EncryptionError> { if compression_batch_size >= TWO16 as usize { - return Err(ProofError::DiscreteLogBatchSize); + return Err(EncryptionError::DiscreteLogBatchSize); } self.compression_batch_size = compression_batch_size; diff --git a/zk-token-sdk/src/encryption/errors.rs b/zk-token-sdk/src/encryption/errors.rs new file mode 100644 index 00000000000000..e076da08c5d012 --- /dev/null +++ b/zk-token-sdk/src/encryption/errors.rs @@ -0,0 +1,10 @@ +//! Errors related to the twisted ElGamal encryption scheme. +use thiserror::Error; + +#[derive(Error, Clone, Debug, Eq, PartialEq)] +pub enum EncryptionError { + #[error("discrete log number of threads not power-of-two")] + DiscreteLogThreads, + #[error("discrete log batch size too large")] + DiscreteLogBatchSize, +} diff --git a/zk-token-sdk/src/encryption/mod.rs b/zk-token-sdk/src/encryption/mod.rs index a90b88a5faaabf..0025ec735d301b 100644 --- a/zk-token-sdk/src/encryption/mod.rs +++ b/zk-token-sdk/src/encryption/mod.rs @@ -13,4 +13,5 @@ pub mod auth_encryption; pub mod discrete_log; pub mod elgamal; +pub mod errors; pub mod pedersen; diff --git a/zk-token-sdk/src/errors.rs b/zk-token-sdk/src/errors.rs index 2b41fc04a5ba47..76cc5a5ee56c75 100644 --- a/zk-token-sdk/src/errors.rs +++ b/zk-token-sdk/src/errors.rs @@ -22,18 +22,12 @@ pub enum ProofError { ZeroBalanceProof, #[error("validity proof failed to verify")] ValidityProof, - #[error( - "`zk_token_elgamal::pod::ElGamalCiphertext` contains invalid ElGamalCiphertext ciphertext" - )] - InconsistentCTData, - #[error("failed to decrypt ciphertext from transfer data")] - Decryption, - #[error("discrete log number of threads not power-of-two")] - DiscreteLogThreads, - #[error("discrete log batch size too large")] - DiscreteLogBatchSize, #[error("public-key sigma proof failed to verify")] PubkeySigmaProof, + #[error("failed to decrypt ciphertext")] + Decryption, + #[error("invalid ciphertext data")] + CiphertextDeserialization, } #[derive(Error, Clone, Debug, Eq, PartialEq)] diff --git a/zk-token-sdk/src/zk_token_elgamal/convert.rs b/zk-token-sdk/src/zk_token_elgamal/convert.rs index f9fc92eeb5548d..ccfdd25953fffc 100644 --- a/zk-token-sdk/src/zk_token_elgamal/convert.rs +++ b/zk-token-sdk/src/zk_token_elgamal/convert.rs @@ -98,7 +98,7 @@ mod target_arch { type Error = ProofError; fn try_from(ct: pod::ElGamalCiphertext) -> Result { - Self::from_bytes(&ct.0).ok_or(ProofError::InconsistentCTData) + Self::from_bytes(&ct.0).ok_or(ProofError::CiphertextDeserialization) } } @@ -112,7 +112,7 @@ mod target_arch { type Error = ProofError; fn try_from(pk: pod::ElGamalPubkey) -> Result { - Self::from_bytes(&pk.0).ok_or(ProofError::InconsistentCTData) + Self::from_bytes(&pk.0).ok_or(ProofError::CiphertextDeserialization) } } @@ -147,7 +147,7 @@ mod target_arch { type Error = ProofError; fn try_from(pod: pod::PedersenCommitment) -> Result { - Self::from_bytes(&pod.0).ok_or(ProofError::InconsistentCTData) + Self::from_bytes(&pod.0).ok_or(ProofError::CiphertextDeserialization) } } @@ -171,7 +171,7 @@ mod target_arch { type Error = ProofError; fn try_from(pod: pod::DecryptHandle) -> Result { - Self::from_bytes(&pod.0).ok_or(ProofError::InconsistentCTData) + Self::from_bytes(&pod.0).ok_or(ProofError::CiphertextDeserialization) } } @@ -185,7 +185,7 @@ mod target_arch { type Error = ProofError; fn try_from(ct: pod::AeCiphertext) -> Result { - Self::from_bytes(&ct.0).ok_or(ProofError::InconsistentCTData) + Self::from_bytes(&ct.0).ok_or(ProofError::CiphertextDeserialization) } } From 7fb421feb87c7493149c214c655020c1d2a3aa2c Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Sun, 16 Oct 2022 16:50:58 +0000 Subject: [PATCH 196/465] chore: stop uploading test data to buildkite (backport #28411) (#28419) chore: stop uploading test data to buildkite (#28411) stop uploading test data to buildkite (cherry picked from commit 54b42e6300a51383bf9365c7f2d2e06fdc61db32) Co-authored-by: Yihau Chen --- .buildkite/hooks/post-command | 3 --- 1 file changed, 3 deletions(-) diff --git a/.buildkite/hooks/post-command b/.buildkite/hooks/post-command index a5b86ec1c2f1c8..4af3bcdadf349a 100644 --- a/.buildkite/hooks/post-command +++ b/.buildkite/hooks/post-command @@ -24,9 +24,6 @@ else # prepare result file awk '/{ "type": .* }/' results.json > sanitized-results.json - # upload to buildkite - buildkite-test-collector < sanitized-results.json - # upload to datadog cargo2junit > results.xml < sanitized-results.json datadog-ci junit upload --service solana results.xml From 7323e46a2bda8e716c25f60aa53a37b76c6d5999 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Tue, 18 Oct 2022 07:13:43 +0000 Subject: [PATCH 197/465] ci: run all jobs when the pipeline generator script changes (backport #28439) (#28445) ci: run all jobs when the pipeline generator script changes (cherry picked from commit 5361b4bc8465f471d8b26464702627b13b2a24f8) Co-authored-by: Trent Nelson --- ci/buildkite-pipeline.sh | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/ci/buildkite-pipeline.sh b/ci/buildkite-pipeline.sh index 280a4714f4a89e..91dce29e0913c3 100755 --- a/ci/buildkite-pipeline.sh +++ b/ci/buildkite-pipeline.sh @@ -24,6 +24,12 @@ annotate() { fi } +# Assume everyting needs to be tested when this file or any Dockerfile changes +mandatory_affected_files=() +mandatory_affected_files+=(^ci/buildkite-pipeline.sh) +mandatory_affected_files+=(^ci/docker-rust/Dockerfile) +mandatory_affected_files+=(^ci/docker-rust-nightly/Dockerfile) + # Checks if a CI pull request affects one or more path patterns. Each # pattern argument is checked in series. If one of them found to be affected, # return immediately as such. @@ -42,8 +48,7 @@ affects() { # the worse (affected) return 0 fi - # Assume everyting needs to be tested when any Dockerfile changes - for pattern in ^ci/docker-rust/Dockerfile ^ci/docker-rust-nightly/Dockerfile "$@"; do + for pattern in "${mandatory_affected_files[@]}" "$@"; do if [[ ${pattern:0:1} = "!" ]]; then for file in "${affected_files[@]}"; do if [[ ! $file =~ ${pattern:1} ]]; then From 1bea70282a2dae0fd9cf3f8ed676bb9d7360fea2 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Tue, 18 Oct 2022 09:35:06 +0000 Subject: [PATCH 198/465] ci: move `stable-sbf` job to `solana` queue (backport #28437) (#28442) ci: move `stable-sbf` job to `solana` queue (cherry picked from commit 18e07852dfec30b9be8d0e8df3a17f35541c22ce) Co-authored-by: Trent Nelson --- ci/buildkite-pipeline.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ci/buildkite-pipeline.sh b/ci/buildkite-pipeline.sh index 91dce29e0913c3..524b0fe5bd74f6 100755 --- a/ci/buildkite-pipeline.sh +++ b/ci/buildkite-pipeline.sh @@ -187,7 +187,7 @@ all_test_steps() { timeout_in_minutes: 35 artifact_paths: "bpf-dumps.tar.bz2" agents: - queue: "gcp" + queue: "solana" EOF else annotate --style info \ From 23355189922757e41423df2df647717ab046cf2d Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Tue, 18 Oct 2022 20:58:37 +0000 Subject: [PATCH 199/465] enforces hash domain for ping-pong protocol (backport #28433) (#28453) enforces hash domain for ping-pong protocol (#28433) https://github.com/solana-labs/solana/pull/27193 added hash domain to ping-pong protocol. For backward compatibility responses both with and without domain were generated and accepted. Now that all clusters are upgraded, this commit enforces the hash domain by removing the response without the domain. (cherry picked from commit e283461d9901ccd3c845c21521aae7a3ff23695d) Co-authored-by: behzad nouri --- core/src/ancestor_hashes_service.rs | 13 ++++--------- core/src/serve_repair.rs | 15 +++++---------- gossip/src/cluster_info.rs | 30 ++++++++++++----------------- gossip/src/ping_pong.rs | 29 ++++------------------------ 4 files changed, 25 insertions(+), 62 deletions(-) diff --git a/core/src/ancestor_hashes_service.rs b/core/src/ancestor_hashes_service.rs index 98972928cee7e5..f8e3eb1dcb49c0 100644 --- a/core/src/ancestor_hashes_service.rs +++ b/core/src/ancestor_hashes_service.rs @@ -430,15 +430,10 @@ impl AncestorHashesService { return None; } stats.ping_count += 1; - // Respond both with and without domain so that the other node - // will accept the response regardless of its upgrade status. - // TODO: remove domain = false once cluster is upgraded. - for domain in [false, true] { - if let Ok(pong) = Pong::new(domain, &ping, keypair) { - let pong = RepairProtocol::Pong(pong); - if let Ok(pong_bytes) = serialize(&pong) { - let _ignore = ancestor_socket.send_to(&pong_bytes[..], from_addr); - } + if let Ok(pong) = Pong::new(&ping, keypair) { + let pong = RepairProtocol::Pong(pong); + if let Ok(pong_bytes) = serialize(&pong) { + let _ignore = ancestor_socket.send_to(&pong_bytes[..], from_addr); } } None diff --git a/core/src/serve_repair.rs b/core/src/serve_repair.rs index f90489e4c09ef2..a34ec4a3e81768 100644 --- a/core/src/serve_repair.rs +++ b/core/src/serve_repair.rs @@ -900,16 +900,11 @@ impl ServeRepair { } packet.meta.set_discard(true); stats.ping_count += 1; - // Respond both with and without domain so that the other node - // will accept the response regardless of its upgrade status. - // TODO: remove domain = false once cluster is upgraded. - for domain in [false, true] { - if let Ok(pong) = Pong::new(domain, &ping, keypair) { - let pong = RepairProtocol::Pong(pong); - if let Ok(pong_bytes) = serialize(&pong) { - let from_addr = packet.meta.socket_addr(); - pending_pongs.push((pong_bytes, from_addr)); - } + if let Ok(pong) = Pong::new(&ping, keypair) { + let pong = RepairProtocol::Pong(pong); + if let Ok(pong_bytes) = serialize(&pong) { + let from_addr = packet.meta.socket_addr(); + pending_pongs.push((pong_bytes, from_addr)); } } } diff --git a/gossip/src/cluster_info.rs b/gossip/src/cluster_info.rs index 466f75cfaf50e4..c8180b5864e872 100644 --- a/gossip/src/cluster_info.rs +++ b/gossip/src/cluster_info.rs @@ -2173,18 +2173,14 @@ impl ClusterInfo { I: IntoIterator, { let keypair = self.keypair(); - let mut pongs_and_dests = Vec::new(); - for (addr, ping) in pings { - // Respond both with and without domain so that the other node will - // accept the response regardless of its upgrade status. - // TODO: remove domain = false once cluster is upgraded. - for domain in [false, true] { - if let Ok(pong) = Pong::new(domain, &ping, &keypair) { - let pong = Protocol::PongMessage(pong); - pongs_and_dests.push((addr, pong)); - } - } - } + let pongs_and_dests: Vec<_> = pings + .into_iter() + .filter_map(|(addr, ping)| { + let pong = Pong::new(&ping, &keypair).ok()?; + let pong = Protocol::PongMessage(pong); + Some((addr, pong)) + }) + .collect(); if pongs_and_dests.is_empty() { None } else { @@ -3320,9 +3316,7 @@ RPC Enabled Nodes: 1"#; let pongs: Vec<(SocketAddr, Pong)> = pings .iter() .zip(&remote_nodes) - .map(|(ping, (keypair, socket))| { - (*socket, Pong::new(/*domain:*/ true, ping, keypair).unwrap()) - }) + .map(|(ping, (keypair, socket))| (*socket, Pong::new(ping, keypair).unwrap())) .collect(); let now = now + Duration::from_millis(1); cluster_info.handle_batch_pong_messages(pongs, now); @@ -3365,7 +3359,7 @@ RPC Enabled Nodes: 1"#; .collect(); let pongs: Vec<_> = pings .iter() - .map(|ping| Pong::new(/*domain:*/ false, ping, &this_node).unwrap()) + .map(|ping| Pong::new(ping, &this_node).unwrap()) .collect(); let recycler = PacketBatchRecycler::default(); let packets = cluster_info @@ -3377,9 +3371,9 @@ RPC Enabled Nodes: 1"#; &recycler, ) .unwrap(); - assert_eq!(remote_nodes.len() * 2, packets.len()); + assert_eq!(remote_nodes.len(), packets.len()); for (packet, (_, socket), pong) in izip!( - packets.into_iter().step_by(2), + packets.into_iter(), remote_nodes.into_iter(), pongs.into_iter() ) { diff --git a/gossip/src/ping_pong.rs b/gossip/src/ping_pong.rs index f6e47c6907eb0f..6c7399281e9913 100644 --- a/gossip/src/ping_pong.rs +++ b/gossip/src/ping_pong.rs @@ -104,17 +104,9 @@ impl Signable for Ping { } impl Pong { - pub fn new( - domain: bool, - ping: &Ping, - keypair: &Keypair, - ) -> Result { + pub fn new(ping: &Ping, keypair: &Keypair) -> Result { let token = serialize(&ping.token)?; - let hash = if domain { - hash::hashv(&[PING_PONG_HASH_PREFIX, &token]) - } else { - hash::hash(&token) - }; + let hash = hash::hashv(&[PING_PONG_HASH_PREFIX, &token]); let pong = Pong { from: keypair.pubkey(), hash, @@ -203,11 +195,6 @@ impl PingCache { _ => { let ping = pingf()?; let token = serialize(&ping.token).ok()?; - // For backward compatibility, for now responses both with and - // without domain are accepted. - // TODO: remove no domain case once cluster is upgraded. - let hash = hash::hash(&token); - self.pending_cache.put(hash, node); let hash = hash::hashv(&[PING_PONG_HASH_PREFIX, &token]); self.pending_cache.put(hash, node); self.pings.put(node, now); @@ -303,12 +290,7 @@ mod tests { assert!(ping.verify()); assert!(ping.sanitize().is_ok()); - let pong = Pong::new(/*domain:*/ false, &ping, &keypair).unwrap(); - assert!(pong.verify()); - assert!(pong.sanitize().is_ok()); - assert_eq!(hash::hash(&ping.token), pong.hash); - - let pong = Pong::new(/*domian:*/ true, &ping, &keypair).unwrap(); + let pong = Pong::new(&ping, &keypair).unwrap(); assert!(pong.verify()); assert!(pong.sanitize().is_ok()); assert_eq!( @@ -370,10 +352,7 @@ mod tests { assert!(ping.is_none()); } Some(ping) => { - let domain = rng.gen_ratio(1, 2); - let pong = Pong::new(domain, ping, keypair).unwrap(); - assert!(cache.add(&pong, *socket, now)); - let pong = Pong::new(!domain, ping, keypair).unwrap(); + let pong = Pong::new(ping, keypair).unwrap(); assert!(cache.add(&pong, *socket, now)); } } From 27b49644ac43f0ef3d2781e08857d9946fe0d752 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Wed, 19 Oct 2022 12:11:50 +0000 Subject: [PATCH 200/465] [zk-token-sdk] clean up pod ciphertext arithmetic operations (backport #28470) (#28471) [zk-token-sdk] clean up pod ciphertext arithmetic operations (#28470) * clean up pod ciphertext arithmetic operations * rename add_ciphertext to add (cherry picked from commit 491ec1e2757d90ee960c0ebd1abd51e4cd199918) Co-authored-by: samkim-crypto --- zk-token-sdk/src/zk_token_elgamal/ops.rs | 355 ++++++++--------------- 1 file changed, 121 insertions(+), 234 deletions(-) diff --git a/zk-token-sdk/src/zk_token_elgamal/ops.rs b/zk-token-sdk/src/zk_token_elgamal/ops.rs index cb5c1afe96d54e..1dc02985dca525 100644 --- a/zk-token-sdk/src/zk_token_elgamal/ops.rs +++ b/zk-token-sdk/src/zk_token_elgamal/ops.rs @@ -1,226 +1,130 @@ -pub use target_arch::*; - -#[cfg(not(target_os = "solana"))] -mod target_arch { - use { - crate::{encryption::elgamal::ElGamalCiphertext, zk_token_elgamal::pod}, - curve25519_dalek::{constants::RISTRETTO_BASEPOINT_COMPRESSED, scalar::Scalar}, - std::convert::TryInto, - }; - pub const TWO_32: u64 = 4294967296; - - // On input two scalars x0, x1 and two ciphertexts ct0, ct1, - // returns `Some(x0*ct0 + x1*ct1)` or `None` if the input was invalid - fn add_ciphertexts( - scalar_0: Scalar, - ct_0: &pod::ElGamalCiphertext, - scalar_1: Scalar, - ct_1: &pod::ElGamalCiphertext, - ) -> Option { - let ct_0: ElGamalCiphertext = (*ct_0).try_into().ok()?; - let ct_1: ElGamalCiphertext = (*ct_1).try_into().ok()?; - - let ct_sum = ct_0 * scalar_0 + ct_1 * scalar_1; - Some(pod::ElGamalCiphertext::from(ct_sum)) - } - - pub(crate) fn combine_lo_hi( - ct_lo: &pod::ElGamalCiphertext, - ct_hi: &pod::ElGamalCiphertext, - ) -> Option { - add_ciphertexts(Scalar::one(), ct_lo, Scalar::from(TWO_32), ct_hi) - } - - pub fn add( - ct_0: &pod::ElGamalCiphertext, - ct_1: &pod::ElGamalCiphertext, - ) -> Option { - add_ciphertexts(Scalar::one(), ct_0, Scalar::one(), ct_1) - } - - pub fn add_with_lo_hi( - ct_0: &pod::ElGamalCiphertext, - ct_1_lo: &pod::ElGamalCiphertext, - ct_1_hi: &pod::ElGamalCiphertext, - ) -> Option { - let ct_1 = combine_lo_hi(ct_1_lo, ct_1_hi)?; - add_ciphertexts(Scalar::one(), ct_0, Scalar::one(), &ct_1) - } - - pub fn subtract( - ct_0: &pod::ElGamalCiphertext, - ct_1: &pod::ElGamalCiphertext, - ) -> Option { - add_ciphertexts(Scalar::one(), ct_0, -Scalar::one(), ct_1) - } - - pub fn subtract_with_lo_hi( - ct_0: &pod::ElGamalCiphertext, - ct_1_lo: &pod::ElGamalCiphertext, - ct_1_hi: &pod::ElGamalCiphertext, - ) -> Option { - let ct_1 = combine_lo_hi(ct_1_lo, ct_1_hi)?; - add_ciphertexts(Scalar::one(), ct_0, -Scalar::one(), &ct_1) - } - - pub fn add_to(ct: &pod::ElGamalCiphertext, amount: u64) -> Option { - let mut amount_as_ct = [0_u8; 64]; - amount_as_ct[..32].copy_from_slice(RISTRETTO_BASEPOINT_COMPRESSED.as_bytes()); - add_ciphertexts( - Scalar::one(), - ct, - Scalar::from(amount), - &pod::ElGamalCiphertext(amount_as_ct), - ) - } - - pub fn subtract_from( - ct: &pod::ElGamalCiphertext, - amount: u64, - ) -> Option { - let mut amount_as_ct = [0_u8; 64]; - amount_as_ct[..32].copy_from_slice(RISTRETTO_BASEPOINT_COMPRESSED.as_bytes()); - add_ciphertexts( - Scalar::one(), - ct, - -Scalar::from(amount), - &pod::ElGamalCiphertext(amount_as_ct), - ) - } +use crate::{ + curve25519::{ + ristretto::{add_ristretto, multiply_ristretto, subtract_ristretto, PodRistrettoPoint}, + scalar::PodScalar, + }, + zk_token_elgamal::pod, +}; + +const SHIFT_BITS: usize = 16; + +const G: PodRistrettoPoint = PodRistrettoPoint([ + 226, 242, 174, 10, 106, 188, 78, 113, 168, 132, 169, 97, 197, 0, 81, 95, 88, 227, 11, 106, 165, + 130, 221, 141, 182, 166, 89, 69, 224, 141, 45, 118, +]); + +/// Add two ElGamal ciphertexts +pub fn add( + left_ciphertext: &pod::ElGamalCiphertext, + right_ciphertext: &pod::ElGamalCiphertext, +) -> Option { + let (left_commitment, left_handle): (pod::PedersenCommitment, pod::DecryptHandle) = + (*left_ciphertext).into(); + let (right_commitment, right_handle): (pod::PedersenCommitment, pod::DecryptHandle) = + (*right_ciphertext).into(); + + let result_commitment: pod::PedersenCommitment = + add_ristretto(&left_commitment.into(), &right_commitment.into())?.into(); + let result_handle: pod::DecryptHandle = + add_ristretto(&left_handle.into(), &right_handle.into())?.into(); + + Some((result_commitment, result_handle).into()) } -#[cfg(target_os = "solana")] -#[allow(unused_variables)] -mod target_arch { - use crate::{ - curve25519::{ - ristretto::{add_ristretto, multiply_ristretto, subtract_ristretto, PodRistrettoPoint}, - scalar::PodScalar, - }, - zk_token_elgamal::pod, - }; - - const SHIFT_BITS: usize = 16; - - const G: PodRistrettoPoint = PodRistrettoPoint([ - 226, 242, 174, 10, 106, 188, 78, 113, 168, 132, 169, 97, 197, 0, 81, 95, 88, 227, 11, 106, - 165, 130, 221, 141, 182, 166, 89, 69, 224, 141, 45, 118, - ]); - - pub fn add( - left_ciphertext: &pod::ElGamalCiphertext, - right_ciphertext: &pod::ElGamalCiphertext, - ) -> Option { - let (left_commitment, left_handle): (pod::PedersenCommitment, pod::DecryptHandle) = - (*left_ciphertext).into(); - let (right_commitment, right_handle): (pod::PedersenCommitment, pod::DecryptHandle) = - (*right_ciphertext).into(); - - let result_commitment: pod::PedersenCommitment = - add_ristretto(&left_commitment.into(), &right_commitment.into())?.into(); - let result_handle: pod::DecryptHandle = - add_ristretto(&left_handle.into(), &right_handle.into())?.into(); +/// Multiply an ElGamal ciphertext by a scalar +pub fn multiply( + scalar: &PodScalar, + ciphertext: &pod::ElGamalCiphertext, +) -> Option { + let (commitment, handle): (pod::PedersenCommitment, pod::DecryptHandle) = (*ciphertext).into(); - Some((result_commitment, result_handle).into()) - } - - pub fn add_with_lo_hi( - left_ciphertext: &pod::ElGamalCiphertext, - right_ciphertext_lo: &pod::ElGamalCiphertext, - right_ciphertext_hi: &pod::ElGamalCiphertext, - ) -> Option { - let shift_scalar = to_scalar(1_u64 << SHIFT_BITS); - let shifted_right_ciphertext_hi = scalar_ciphertext(&shift_scalar, &right_ciphertext_hi)?; - let combined_right_ciphertext = add(right_ciphertext_lo, &shifted_right_ciphertext_hi)?; - add(left_ciphertext, &combined_right_ciphertext) - } + let commitment_point: PodRistrettoPoint = commitment.into(); + let handle_point: PodRistrettoPoint = handle.into(); - pub fn subtract( - left_ciphertext: &pod::ElGamalCiphertext, - right_ciphertext: &pod::ElGamalCiphertext, - ) -> Option { - let (left_commitment, left_handle): (pod::PedersenCommitment, pod::DecryptHandle) = - (*left_ciphertext).into(); - let (right_commitment, right_handle): (pod::PedersenCommitment, pod::DecryptHandle) = - (*right_ciphertext).into(); - - let result_commitment: pod::PedersenCommitment = - subtract_ristretto(&left_commitment.into(), &right_commitment.into())?.into(); - let result_handle: pod::DecryptHandle = - subtract_ristretto(&left_handle.into(), &right_handle.into())?.into(); - - Some((result_commitment, result_handle).into()) - } + let result_commitment: pod::PedersenCommitment = + multiply_ristretto(scalar, &commitment_point)?.into(); + let result_handle: pod::DecryptHandle = multiply_ristretto(scalar, &handle_point)?.into(); - pub fn subtract_with_lo_hi( - left_ciphertext: &pod::ElGamalCiphertext, - right_ciphertext_lo: &pod::ElGamalCiphertext, - right_ciphertext_hi: &pod::ElGamalCiphertext, - ) -> Option { - let shift_scalar = to_scalar(1_u64 << SHIFT_BITS); - let shifted_right_ciphertext_hi = scalar_ciphertext(&shift_scalar, &right_ciphertext_hi)?; - let combined_right_ciphertext = add(right_ciphertext_lo, &shifted_right_ciphertext_hi)?; - subtract(left_ciphertext, &combined_right_ciphertext) - } - - pub fn add_to( - ciphertext: &pod::ElGamalCiphertext, - amount: u64, - ) -> Option { - let amount_scalar = to_scalar(amount); - let amount_point = multiply_ristretto(&amount_scalar, &G)?; + Some((result_commitment, result_handle).into()) +} - let (commitment, handle): (pod::PedersenCommitment, pod::DecryptHandle) = - (*ciphertext).into(); - let commitment_point: PodRistrettoPoint = commitment.into(); +/// Compute `left_ciphertext + (right_ciphertext_lo + 2^16 * right_ciphertext_hi)` +pub fn add_with_lo_hi( + left_ciphertext: &pod::ElGamalCiphertext, + right_ciphertext_lo: &pod::ElGamalCiphertext, + right_ciphertext_hi: &pod::ElGamalCiphertext, +) -> Option { + let shift_scalar = to_scalar(1_u64 << SHIFT_BITS); + let shifted_right_ciphertext_hi = multiply(&shift_scalar, right_ciphertext_hi)?; + let combined_right_ciphertext = add(right_ciphertext_lo, &shifted_right_ciphertext_hi)?; + add(left_ciphertext, &combined_right_ciphertext) +} - let result_commitment: pod::PedersenCommitment = - add_ristretto(&commitment_point, &amount_point)?.into(); - Some((result_commitment, handle).into()) - } +/// Subtract two ElGamal ciphertexts +pub fn subtract( + left_ciphertext: &pod::ElGamalCiphertext, + right_ciphertext: &pod::ElGamalCiphertext, +) -> Option { + let (left_commitment, left_handle): (pod::PedersenCommitment, pod::DecryptHandle) = + (*left_ciphertext).into(); + let (right_commitment, right_handle): (pod::PedersenCommitment, pod::DecryptHandle) = + (*right_ciphertext).into(); + + let result_commitment: pod::PedersenCommitment = + subtract_ristretto(&left_commitment.into(), &right_commitment.into())?.into(); + let result_handle: pod::DecryptHandle = + subtract_ristretto(&left_handle.into(), &right_handle.into())?.into(); + + Some((result_commitment, result_handle).into()) +} - pub fn subtract_from( - ciphertext: &pod::ElGamalCiphertext, - amount: u64, - ) -> Option { - let amount_scalar = to_scalar(amount); - let amount_point = multiply_ristretto(&amount_scalar, &G)?; +/// Compute `left_ciphertext - (right_ciphertext_lo + 2^16 * right_ciphertext_hi)` +pub fn subtract_with_lo_hi( + left_ciphertext: &pod::ElGamalCiphertext, + right_ciphertext_lo: &pod::ElGamalCiphertext, + right_ciphertext_hi: &pod::ElGamalCiphertext, +) -> Option { + let shift_scalar = to_scalar(1_u64 << SHIFT_BITS); + let shifted_right_ciphertext_hi = multiply(&shift_scalar, right_ciphertext_hi)?; + let combined_right_ciphertext = add(right_ciphertext_lo, &shifted_right_ciphertext_hi)?; + subtract(left_ciphertext, &combined_right_ciphertext) +} - let (commitment, handle): (pod::PedersenCommitment, pod::DecryptHandle) = - (*ciphertext).into(); - let commitment_point: PodRistrettoPoint = commitment.into(); +/// Add a constant amount to a ciphertext +pub fn add_to(ciphertext: &pod::ElGamalCiphertext, amount: u64) -> Option { + let amount_scalar = to_scalar(amount); + let amount_point = multiply_ristretto(&amount_scalar, &G)?; - let result_commitment: pod::PedersenCommitment = - subtract_ristretto(&commitment_point, &amount_point)?.into(); - Some((result_commitment, handle).into()) - } + let (commitment, handle): (pod::PedersenCommitment, pod::DecryptHandle) = (*ciphertext).into(); + let commitment_point: PodRistrettoPoint = commitment.into(); - fn to_scalar(amount: u64) -> PodScalar { - let mut bytes = [0u8; 32]; - bytes[..8].copy_from_slice(&amount.to_le_bytes()); - PodScalar(bytes) - } - - fn scalar_ciphertext( - scalar: &PodScalar, - ciphertext: &pod::ElGamalCiphertext, - ) -> Option { - let (commitment, handle): (pod::PedersenCommitment, pod::DecryptHandle) = - (*ciphertext).into(); + let result_commitment: pod::PedersenCommitment = + add_ristretto(&commitment_point, &amount_point)?.into(); + Some((result_commitment, handle).into()) +} - let commitment_point: PodRistrettoPoint = commitment.into(); - let handle_point: PodRistrettoPoint = handle.into(); +/// Subtract a constant amount to a ciphertext +pub fn subtract_from( + ciphertext: &pod::ElGamalCiphertext, + amount: u64, +) -> Option { + let amount_scalar = to_scalar(amount); + let amount_point = multiply_ristretto(&amount_scalar, &G)?; - let result_commitment: pod::PedersenCommitment = - multiply_ristretto(scalar, &commitment_point)?.into(); - let result_handle: pod::DecryptHandle = multiply_ristretto(scalar, &handle_point)?.into(); + let (commitment, handle): (pod::PedersenCommitment, pod::DecryptHandle) = (*ciphertext).into(); + let commitment_point: PodRistrettoPoint = commitment.into(); - Some((result_commitment, result_handle).into()) - } + let result_commitment: pod::PedersenCommitment = + subtract_ristretto(&commitment_point, &amount_point)?.into(); + Some((result_commitment, handle).into()) } -pub const OP_ADD: u64 = 0; -pub const OP_SUB: u64 = 1; +/// Convert a `u64` amount into a curve25519 scalar +fn to_scalar(amount: u64) -> PodScalar { + let mut bytes = [0u8; 32]; + bytes[..8].copy_from_slice(&amount.to_le_bytes()); + PodScalar(bytes) +} #[cfg(test)] mod tests { @@ -230,6 +134,7 @@ mod tests { elgamal::{ElGamalCiphertext, ElGamalKeypair}, pedersen::{Pedersen, PedersenOpening}, }, + instruction::split_u64, zk_token_elgamal::{ops, pod}, }, bytemuck::Zeroable, @@ -237,6 +142,8 @@ mod tests { std::convert::TryInto, }; + const TWO_16: u64 = 65536; + #[test] fn test_zero_ct() { let spendable_balance = pod::ElGamalCiphertext::zeroed(); @@ -290,19 +197,11 @@ mod tests { assert_eq!(expected, subtracted_ct); } - /// Split u64 number into two u32 numbers - fn split_u64_into_u32(amt: u64) -> (u32, u32) { - let lo = amt as u32; - let hi = (amt >> 32) as u32; - - (lo, hi) - } - #[test] fn test_transfer_arithmetic() { // transfer amount let transfer_amount: u64 = 55; - let (amount_lo, amount_hi) = split_u64_into_u32(transfer_amount); + let (amount_lo, amount_hi) = split_u64(transfer_amount, 16, 32).unwrap(); // generate public keys let source_pk = ElGamalKeypair::new_rand().public; @@ -335,38 +234,26 @@ mod tests { dest_pk.encrypt_with(77_u64, &dest_open).into(); // program arithmetic for the source account - - // 1. Combine commitments and handles let source_lo_ct: pod::ElGamalCiphertext = (comm_lo, handle_source_lo).into(); let source_hi_ct: pod::ElGamalCiphertext = (comm_hi, handle_source_hi).into(); - // 2. Combine lo and hi ciphertexts - let source_combined_ct = ops::combine_lo_hi(&source_lo_ct, &source_hi_ct).unwrap(); - - // 3. Subtract from available balance let final_source_spendable = - ops::subtract(&source_spendable_ct, &source_combined_ct).unwrap(); + ops::subtract_with_lo_hi(&source_spendable_ct, &source_lo_ct, &source_hi_ct).unwrap(); - // test let final_source_open = - source_open - (open_lo.clone() + open_hi.clone() * Scalar::from(ops::TWO_32)); + source_open - (open_lo.clone() + open_hi.clone() * Scalar::from(TWO_16)); let expected_source: pod::ElGamalCiphertext = source_pk.encrypt_with(22_u64, &final_source_open).into(); assert_eq!(expected_source, final_source_spendable); - // same for the destination account - - // 1. Combine commitments and handles + // program arithemtic for the destination account let dest_lo_ct: pod::ElGamalCiphertext = (comm_lo, handle_dest_lo).into(); let dest_hi_ct: pod::ElGamalCiphertext = (comm_hi, handle_dest_hi).into(); - // 2. Combine lo and hi ciphertexts - let dest_combined_ct = ops::combine_lo_hi(&dest_lo_ct, &dest_hi_ct).unwrap(); - - // 3. Add to pending balance - let final_dest_pending = ops::add(&dest_pending_ct, &dest_combined_ct).unwrap(); + let final_dest_pending = + ops::add_with_lo_hi(&dest_pending_ct, &dest_lo_ct, &dest_hi_ct).unwrap(); - let final_dest_open = dest_open + (open_lo + open_hi * Scalar::from(ops::TWO_32)); + let final_dest_open = dest_open + (open_lo + open_hi * Scalar::from(TWO_16)); let expected_dest_ct: pod::ElGamalCiphertext = dest_pk.encrypt_with(132_u64, &final_dest_open).into(); assert_eq!(expected_dest_ct, final_dest_pending); From ae66ea665b2a9c22b37f712beea72e93479726ac Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Wed, 19 Oct 2022 13:56:40 -0400 Subject: [PATCH 201/465] bootstrap: Require known validators to have all snapshot hashes (backport #28284) (#28477) * Requires known validators to have all snapshot hashes at bootstrap (#28284) (cherry picked from commit 1e79053dd134a3d852cf1062a0026b0556be5dd2) # Conflicts: # validator/src/bootstrap.rs * fix merge conflicts Co-authored-by: Brooks Prumo --- validator/src/bootstrap.rs | 110 ++++++++++++++++++++++++++++++++----- 1 file changed, 95 insertions(+), 15 deletions(-) diff --git a/validator/src/bootstrap.rs b/validator/src/bootstrap.rs index 9998b986c92360..45340f3a3f006d 100644 --- a/validator/src/bootstrap.rs +++ b/validator/src/bootstrap.rs @@ -41,6 +41,10 @@ use { }, }; +/// When downloading snapshots, wait at most this long for snapshot hashes from _all_ known +/// validators. Afterwards, wait for snapshot hashes from _any_ know validator. +const WAIT_FOR_ALL_KNOWN_VALIDATORS: Duration = Duration::from_secs(60); + #[derive(Debug)] pub struct RpcBootstrapConfig { pub no_genesis_fetch: bool, @@ -570,10 +574,20 @@ fn get_rpc_node( } } + let known_validators_to_wait_for = if newer_cluster_snapshot_timeout + .as_ref() + .map(|timer: &Instant| timer.elapsed() < WAIT_FOR_ALL_KNOWN_VALIDATORS) + .unwrap_or(true) + { + KnownValidatorsToWaitFor::All + } else { + KnownValidatorsToWaitFor::Any + }; let peer_snapshot_hashes = get_peer_snapshot_hashes( cluster_info, &rpc_peers, validator_config.known_validators.as_ref(), + known_validators_to_wait_for, bootstrap_config.incremental_snapshot_fetch, ); @@ -655,14 +669,16 @@ fn get_peer_snapshot_hashes( cluster_info: &ClusterInfo, rpc_peers: &[ContactInfo], known_validators: Option<&HashSet>, + known_validators_to_wait_for: KnownValidatorsToWaitFor, incremental_snapshot_fetch: bool, ) -> Vec { let mut peer_snapshot_hashes = get_eligible_peer_snapshot_hashes(cluster_info, rpc_peers, incremental_snapshot_fetch); - if known_validators.is_some() { + if let Some(known_validators) = known_validators { let known_snapshot_hashes = get_snapshot_hashes_from_known_validators( cluster_info, known_validators, + known_validators_to_wait_for, incremental_snapshot_fetch, ); retain_peer_snapshot_hashes_that_match_known_snapshot_hashes( @@ -692,7 +708,8 @@ type KnownSnapshotHashes = HashMap<(Slot, Hash), HashSet<(Slot, Hash)>>; /// This applies to both full and incremental snapshot hashes. fn get_snapshot_hashes_from_known_validators( cluster_info: &ClusterInfo, - known_validators: Option<&HashSet>, + known_validators: &HashSet, + known_validators_to_wait_for: KnownValidatorsToWaitFor, incremental_snapshot_fetch: bool, ) -> KnownSnapshotHashes { // Get the full snapshot hashes for a node from CRDS @@ -711,19 +728,82 @@ fn get_snapshot_hashes_from_known_validators( .map(|hashes| (hashes.base, hashes.hashes)) }; - known_validators - .map(|known_validators| { - build_known_snapshot_hashes( - known_validators, - get_full_snapshot_hashes_for_node, - get_incremental_snapshot_hashes_for_node, - incremental_snapshot_fetch, - ) - }) - .unwrap_or_else(|| { - trace!("No known validators, so no known snapshot hashes"); - KnownSnapshotHashes::new() - }) + if !do_known_validators_have_all_snapshot_hashes( + known_validators, + known_validators_to_wait_for, + get_full_snapshot_hashes_for_node, + get_incremental_snapshot_hashes_for_node, + incremental_snapshot_fetch, + ) { + debug!( + "Snapshot hashes have note been discovered from known validators. \ + This likely means the gossip tables are not fully populated. \ + We will sleep and retry..." + ); + return KnownSnapshotHashes::default(); + } + + build_known_snapshot_hashes( + known_validators, + get_full_snapshot_hashes_for_node, + get_incremental_snapshot_hashes_for_node, + incremental_snapshot_fetch, + ) +} + +/// Check if we can discover snapshot hashes for the known validators. +/// +/// This is a work-around to ensure the gossip tables are populated enough so that the bootstrap +/// process will download both full and incremental snapshots. If the incremental snapshot hashes +/// are not yet populated from gossip, then it is possible (and has been seen often) to only +/// discover full snapshots—and ones that are very old (up to 25,000 slots)—but *not* discover any +/// of their associated incremental snapshots. +/// +/// This function will return false if we do not yet have snapshot hashes from known validators; +/// and true otherwise. Either require snapshot hashes from *all* or *any* of the known validators +/// based on the `KnownValidatorsToWaitFor` parameter. +fn do_known_validators_have_all_snapshot_hashes<'a, F1, F2>( + known_validators: impl IntoIterator, + known_validators_to_wait_for: KnownValidatorsToWaitFor, + get_full_snapshot_hashes_for_node: F1, + get_incremental_snapshot_hashes_for_node: F2, + incremental_snapshot_fetch: bool, +) -> bool +where + F1: Fn(&'a Pubkey) -> Vec<(Slot, Hash)>, + F2: Fn(&'a Pubkey) -> Option<((Slot, Hash), Vec<(Slot, Hash)>)>, +{ + let node_has_full_snapshot_hashes = |node| !get_full_snapshot_hashes_for_node(node).is_empty(); + let node_has_incremental_snapshot_hashes = |node| { + get_incremental_snapshot_hashes_for_node(node) + .map(|(_, hashes)| !hashes.is_empty()) + .unwrap_or(false) + }; + + // Does this node have all the snapshot hashes? + // If incremental snapshots are disabled, only check for full snapshot hashes; otherwise check + // for both full and incremental snapshot hashes. + let node_has_all_snapshot_hashes = |node| { + node_has_full_snapshot_hashes(node) + && (!incremental_snapshot_fetch || node_has_incremental_snapshot_hashes(node)) + }; + + match known_validators_to_wait_for { + KnownValidatorsToWaitFor::All => known_validators + .into_iter() + .all(node_has_all_snapshot_hashes), + KnownValidatorsToWaitFor::Any => known_validators + .into_iter() + .any(node_has_all_snapshot_hashes), + } +} + +/// When waiting for snapshot hashes from the known validators, should we wait for *all* or *any* +/// of them? +#[derive(Debug, Copy, Clone, Eq, PartialEq)] +enum KnownValidatorsToWaitFor { + All, + Any, } /// Build the known snapshot hashes from a set of nodes. From baf866eee99acfd31e532cd02e85376fd0eaca2e Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Wed, 19 Oct 2022 21:44:14 +0000 Subject: [PATCH 202/465] Check for valid address in broadcast (backport #28432) (#28487) Check for valid address in broadcast (#28432) Check for valid address (cherry picked from commit 274d9ea6070e294b8a93e102c1dc7937b1416e8d) Co-authored-by: carllin --- core/src/broadcast_stage/broadcast_duplicates_run.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/broadcast_stage/broadcast_duplicates_run.rs b/core/src/broadcast_stage/broadcast_duplicates_run.rs index 0315a343b98739..c617ede200e459 100644 --- a/core/src/broadcast_stage/broadcast_duplicates_run.rs +++ b/core/src/broadcast_stage/broadcast_duplicates_run.rs @@ -305,7 +305,7 @@ impl BroadcastRun for BroadcastDuplicatesRun { .iter() .filter_map(|shred| { let node = cluster_nodes.get_broadcast_peer(&shred.id())?; - if ContactInfo::is_valid_address(&node.tvu, socket_addr_space) { + if !ContactInfo::is_valid_address(&node.tvu, socket_addr_space) { return None; } if self From 854bc2f492d16b5d6497153719098d9e22c05fc7 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Thu, 20 Oct 2022 03:17:23 +0000 Subject: [PATCH 203/465] Fixes typo in bootstrap log (backport #28483) (#28492) Fixes typo in bootstrap log (#28483) (cherry picked from commit 510cd933a15233b797022c42e7d21024948d9c86) Co-authored-by: Brooks Prumo --- validator/src/bootstrap.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/validator/src/bootstrap.rs b/validator/src/bootstrap.rs index 45340f3a3f006d..b315494ffd8331 100644 --- a/validator/src/bootstrap.rs +++ b/validator/src/bootstrap.rs @@ -736,7 +736,7 @@ fn get_snapshot_hashes_from_known_validators( incremental_snapshot_fetch, ) { debug!( - "Snapshot hashes have note been discovered from known validators. \ + "Snapshot hashes have not been discovered from known validators. \ This likely means the gossip tables are not fully populated. \ We will sleep and retry..." ); From 6fe4ce39ca21b79cd6baeb1992dfe6bf7b03082f Mon Sep 17 00:00:00 2001 From: Tyera Eulberg Date: Thu, 20 Oct 2022 19:43:26 -0600 Subject: [PATCH 204/465] v1.14: Fix RpcClient MemCmp filter version mapping (#28500) * Add VersionReq struct to handle multiple version checks * Use VersionReq to fix MemCmp filter breakage * Simplify if case --- client/src/lib.rs | 1 + client/src/rpc_filter.rs | 7 ++++++- client/src/version_req.rs | 20 ++++++++++++++++++++ 3 files changed, 27 insertions(+), 1 deletion(-) create mode 100644 client/src/version_req.rs diff --git a/client/src/lib.rs b/client/src/lib.rs index 2cef3aa9665f71..ccdd55941d8d24 100644 --- a/client/src/lib.rs +++ b/client/src/lib.rs @@ -29,6 +29,7 @@ pub mod tpu_client; pub mod tpu_connection; pub mod transaction_executor; pub mod udp_client; +pub mod version_req; pub mod mock_sender_for_cli { /// Magic `SIGNATURE` value used by `solana-cli` unit tests. diff --git a/client/src/rpc_filter.rs b/client/src/rpc_filter.rs index a428eb5ae7807f..ebccd067f9e7ee 100644 --- a/client/src/rpc_filter.rs +++ b/client/src/rpc_filter.rs @@ -1,5 +1,6 @@ #![allow(deprecated)] use { + crate::version_req::VersionReq, solana_sdk::account::{AccountSharedData, ReadableAccount}, spl_token_2022::{generic_token_account::GenericTokenAccount, state::Account}, std::borrow::Cow, @@ -263,7 +264,11 @@ pub(crate) fn maybe_map_filters( node_version: Option, filters: &mut [RpcFilterType], ) -> Result<(), String> { - if node_version.is_none() || node_version.unwrap() < semver::Version::new(1, 11, 2) { + let version_reqs = VersionReq::from_strs(&["<1.11.2", "~1.13"])?; + let needs_mapping = node_version + .map(|version| version_reqs.matches_any(&version)) + .unwrap_or(true); + if needs_mapping { for filter in filters.iter_mut() { if let RpcFilterType::Memcmp(memcmp) = filter { match &memcmp.bytes { diff --git a/client/src/version_req.rs b/client/src/version_req.rs new file mode 100644 index 00000000000000..515f85b359eed4 --- /dev/null +++ b/client/src/version_req.rs @@ -0,0 +1,20 @@ +pub(crate) struct VersionReq(Vec); + +impl VersionReq { + pub(crate) fn from_strs(versions: &[T]) -> Result + where + T: AsRef + std::fmt::Debug, + { + let mut version_reqs = vec![]; + for version in versions { + let version_req = semver::VersionReq::parse(version.as_ref()) + .map_err(|err| format!("Could not parse version {:?}: {:?}", version, err))?; + version_reqs.push(version_req); + } + Ok(Self(version_reqs)) + } + + pub(crate) fn matches_any(&self, version: &semver::Version) -> bool { + self.0.iter().any(|r| r.matches(version)) + } +} From 8167e15cb9b6477f05961006b4f9bf1738c73256 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Fri, 21 Oct 2022 06:01:56 +0000 Subject: [PATCH 205/465] ledger-tool: remove inefficient base58 encoding options (backport #28488) (#28495) ledger-tool: encode account data with base64 instead of slow base58 Co-authored-by: Trent Nelson --- Cargo.lock | 2 +- ledger-tool/Cargo.toml | 2 +- ledger-tool/src/main.rs | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index a368645ec90336..0f122254f0bbcb 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -5470,7 +5470,7 @@ name = "solana-ledger-tool" version = "1.14.6" dependencies = [ "assert_cmd", - "bs58", + "base64 0.13.0", "bytecount", "chrono", "clap 2.33.3", diff --git a/ledger-tool/Cargo.toml b/ledger-tool/Cargo.toml index ef078b941b7be8..a12084b13a0e45 100644 --- a/ledger-tool/Cargo.toml +++ b/ledger-tool/Cargo.toml @@ -10,7 +10,7 @@ homepage = "https://solana.com/" documentation = "https://docs.rs/solana-ledger-tool" [dependencies] -bs58 = "0.4.0" +base64 = "0.13.0" chrono = "0.4.11" clap = "2.33.1" crossbeam-channel = "0.5" diff --git a/ledger-tool/src/main.rs b/ledger-tool/src/main.rs index bc7b038ab07fe3..6577cdba8d95bd 100644 --- a/ledger-tool/src/main.rs +++ b/ledger-tool/src/main.rs @@ -374,7 +374,7 @@ fn output_account( println!(" rent_epoch: {}", account.rent_epoch()); println!(" data_len: {}", account.data().len()); if print_account_data { - println!(" data: '{}'", bs58::encode(account.data()).into_string()); + println!(" data: '{}'", base64::encode(account.data())); } } From 5571aca49f4465bab4a6768e282aeb3be767f64b Mon Sep 17 00:00:00 2001 From: "Jeff Washington (jwash)" Date: Fri, 21 Oct 2022 11:32:43 -0700 Subject: [PATCH 206/465] manual backport of #28422 (#28532) --- runtime/src/accounts_db.rs | 48 +- runtime/src/bank.rs | 18 +- runtime/src/expected_rent_collection.rs | 1308 ----------------------- runtime/src/lib.rs | 1 - 4 files changed, 3 insertions(+), 1372 deletions(-) delete mode 100644 runtime/src/expected_rent_collection.rs diff --git a/runtime/src/accounts_db.rs b/runtime/src/accounts_db.rs index 878c3c1ff69b42..ad28f3c308b7bd 100644 --- a/runtime/src/accounts_db.rs +++ b/runtime/src/accounts_db.rs @@ -45,7 +45,6 @@ use { bank::Rewrites, cache_hash_data::CacheHashData, contains::Contains, - expected_rent_collection::{ExpectedRentCollection, SlotInfoInEpoch}, pubkey_bins::PubkeyBinCalculator24, read_only_accounts_cache::ReadOnlyAccountsCache, rent_collector::RentCollector, @@ -1793,26 +1792,22 @@ trait AppendVecScan: Send + Sync + Clone { /// These would have been captured in a fn from within the scan function. /// Some of these are constant across all pubkeys, some are constant across a slot. /// Some could be unique per pubkey. -struct ScanState<'a, T: Fn(Slot) -> Option + Sync + Send + Clone> { +struct ScanState<'a> { /// slot we're currently scanning current_slot: Slot, /// accumulated results accum: BinnedHashData, - /// max slot (inclusive) that we're calculating accounts hash on - max_slot_info: SlotInfoInEpoch, bin_calculator: &'a PubkeyBinCalculator24, bin_range: &'a Range, config: &'a CalcAccountsHashConfig<'a>, mismatch_found: Arc, - stats: &'a crate::accounts_hash::HashStats, - find_unskipped_slot: &'a T, filler_account_suffix: Option<&'a Pubkey>, range: usize, sort_time: Arc, pubkey_to_bin_index: usize, } -impl<'a, T: Fn(Slot) -> Option + Sync + Send + Clone> AppendVecScan for ScanState<'a, T> { +impl<'a> AppendVecScan for ScanState<'a> { fn set_slot(&mut self, slot: Slot) { self.current_slot = slot; } @@ -1841,20 +1836,6 @@ impl<'a, T: Fn(Slot) -> Option + Sync + Send + Clone> AppendVecScan for Sc }; let loaded_hash = loaded_account.loaded_hash(); - let new_hash = ExpectedRentCollection::maybe_rehash_skipped_rewrite( - loaded_account, - &loaded_hash, - pubkey, - self.current_slot, - self.config.epoch_schedule, - self.config.rent_collector, - self.stats, - &self.max_slot_info, - self.find_unskipped_slot, - self.filler_account_suffix, - ); - let loaded_hash = new_hash.unwrap_or(loaded_hash); - let source_item = CalculateHashIntermediate::new(loaded_hash, balance, *pubkey); if self.config.check_hash @@ -6255,8 +6236,6 @@ impl AccountsDb { let total_lamports = Mutex::::new(0); let stats = HashStats::default(); - let max_slot_info = SlotInfoInEpoch::new(max_slot, config.epoch_schedule); - let get_hashes = || { keys.par_chunks(chunks) .map(|pubkeys| { @@ -6289,23 +6268,7 @@ impl AccountsDb { .get_loaded_account() .and_then( |loaded_account| { - let find_unskipped_slot = |slot: Slot| { - self.find_unskipped_slot(slot, config.ancestors) - }; let loaded_hash = loaded_account.loaded_hash(); - let new_hash = ExpectedRentCollection::maybe_rehash_skipped_rewrite( - &loaded_account, - &loaded_hash, - pubkey, - *slot, - config.epoch_schedule, - config.rent_collector, - &stats, - &max_slot_info, - find_unskipped_slot, - self.filler_account_suffix.as_ref(), - ); - let loaded_hash = new_hash.unwrap_or(loaded_hash); let balance = loaded_account.lamports(); if config.check_hash && !self.is_filler_account(pubkey) { // this will not be supported anymore let computed_hash = @@ -6890,22 +6853,15 @@ impl AccountsDb { let range = bin_range.end - bin_range.start; let sort_time = Arc::new(AtomicU64::new(0)); - let find_unskipped_slot = |slot: Slot| self.find_unskipped_slot(slot, config.ancestors); - - let max_slot_info = - SlotInfoInEpoch::new(storage.max_slot_inclusive(), config.epoch_schedule); let scanner = ScanState { current_slot: Slot::default(), accum: BinnedHashData::default(), bin_calculator: &bin_calculator, config, mismatch_found: mismatch_found.clone(), - max_slot_info, - find_unskipped_slot: &find_unskipped_slot, filler_account_suffix, range, bin_range, - stats, sort_time: sort_time.clone(), pubkey_to_bin_index: 0, }; diff --git a/runtime/src/bank.rs b/runtime/src/bank.rs index 56a7b318140715..23455f976a5000 100644 --- a/runtime/src/bank.rs +++ b/runtime/src/bank.rs @@ -54,7 +54,6 @@ use { builtins::{self, BuiltinAction, BuiltinFeatureTransition, Builtins}, cost_tracker::CostTracker, epoch_stakes::{EpochStakes, NodeVoteAccounts}, - expected_rent_collection::{ExpectedRentCollection, SlotInfoInEpoch}, inline_spl_associated_token_account, inline_spl_token, message_processor::MessageProcessor, rent_collector::{CollectedInfo, RentCollector}, @@ -6381,22 +6380,7 @@ impl Bank { ancestors: &Ancestors, pubkey: &Pubkey, ) -> Option<(AccountSharedData, Slot)> { - match self.rc.accounts.load_with_fixed_root(ancestors, pubkey) { - Some((mut account, storage_slot)) => { - ExpectedRentCollection::maybe_update_rent_epoch_on_load( - &mut account, - &SlotInfoInEpoch::new_small(storage_slot), - &SlotInfoInEpoch::new_small(self.slot()), - self.epoch_schedule(), - self.rent_collector(), - pubkey, - &self.rewrites_skipped_this_slot, - ); - - Some((account, storage_slot)) - } - None => None, - } + self.rc.accounts.load_with_fixed_root(ancestors, pubkey) } pub fn get_program_accounts( diff --git a/runtime/src/expected_rent_collection.rs b/runtime/src/expected_rent_collection.rs deleted file mode 100644 index 4e2c45b839bb84..00000000000000 --- a/runtime/src/expected_rent_collection.rs +++ /dev/null @@ -1,1308 +0,0 @@ -//! Logic for determining when rent should have been collected or a rewrite would have occurred for an account. -use { - crate::{ - accounts_db::AccountsDb, - accounts_hash::HashStats, - bank::{Bank, PartitionIndex, Rewrites}, - rent_collector::{RentCollector, RentResult}, - }, - solana_sdk::{ - account::{AccountSharedData, ReadableAccount, WritableAccount}, - clock::{Epoch, Slot}, - epoch_schedule::EpochSchedule, - hash::Hash, - pubkey::Pubkey, - }, - std::sync::atomic::Ordering, -}; - -#[derive(Debug, PartialEq, Eq)] -pub struct ExpectedRentCollection { - partition_from_pubkey: PartitionIndex, - epoch_of_max_storage_slot: Epoch, - partition_index_from_max_slot: PartitionIndex, - first_slot_in_max_epoch: Slot, - // these are the only 2 fields used by downstream calculations at the moment. - // the rest are here for debugging - expected_rent_collection_slot_max_epoch: Slot, - rent_epoch: Epoch, -} - -/* -A goal is to skip rewrites to improve performance. -Reasons this file exists: -A. When we encounter skipped-rewrite account data as part of a load, we may need to update rent_epoch. -B. When we encounter skipped-rewrite account data during accounts hash calc, the saved hash will be incorrect if we skipped a rewrite. - We need slot and rent_epoch to recalculate a new hash. - -cases of rent collection: - -setup assumptions: -pubkey = abc -slots_per_epoch = 432,000 -pubkey_partition_index of 'abc' = 80 - -So, rent will be collected or a rewrite is expected to occur: - each time a slot's pubkey_partition is == [footnote1] pubkey_partition_index within an epoch. [footnote2] - - If we skip rewrites, then pubkey's account data will not be rewritten when its rent collecion partition index occurs. - However, later we need to get a hash value for the most recent update to this account. - That leads us to the purpose of this file. - To calculate a hash for account data, we need to know: - 1. the slot the account was written in - 2. the rent_epoch field of the account, telling us which epoch is the next time we should evaluate rent on this account - If we did not perform a rewrite, then the account in the append vec it was last written in has: - 1. The wrong slot, since the append vec is not associated with the slot that the rewrite would have occurred. - 2. The wrong rent_epoch since the account was not rewritten with a newer rent_epoch [footnote3] - -Reason A for this file's existence: -When we encounter the skipped-rewrite account data as part of a load, we may need to update rent_epoch. -Many operations work like this: - 1. read account - 2. add lamports (ex: reward was paid) - 3. write account -If the account is written with the WRONG rent_epoch field, then we will store an 'incorrect' rent_epoch field and the hash will be incorrect. -So, at (1. read account), we must FIX the rent_epoch to be as it would be if the rewrite would have occurred. - -Reason B for this file's existence: -When we encounter the skipped-rewrite account data during accounts hash calc, the saved hash will be incorrect if we skipped a rewrite. -We must compute the correct rent_epoch and slot and recompute the hash that we would have gotten if we would have done the rewrite. - -Both reasons result in the need for the same answer. -Given -1. pubkey -2. pubkey's account data -3. the slot the data was loaded from (storage_slot) -4. the highest_root caller cares about - -We also need a RentCollector and EpochSchedule for the highest root the caller cares about. -With these: -1. can calculate partition_index of -1.a. highest_root (slot) -1.b. storage_slot - -We also need : -fn find_unskipped_slot(slot) -> root -which can return the lowest root >= slot - 1 (this is why 'historical_roots' is necessary) Also see [footnote1]. - -Given these inputs, we can determine the correct slot and rent_epoch where we SHOULD have found this account's data and also compute the hash that we SHOULD have stored at that slot. -Note that a slot could be (-432k..infinite) slots and (-1..infinite) epochs relative to the expected rent collection slot. -Examples: -1. -storage_slot: 1 -highest_root: 1 -since pubkey_partition_index is 80 and hasn't been reached, the current account's data is CORRECT -Every highest_root < 80 is this same result. - -2. -storage_slot: 1 -highest_root: 79 -since pubkey_partition_index is 80 and hasn't been reached, the current account's data is CORRECT - -3. -storage_slot: 1 (partition index = 1) -highest_root: 80 (partition index = 80) -since pubkey_partition_index is 80 and it HAS been reached, but the account data is from slot 1, then the account's data is INcorrect -the account's hash is incorrect and needs to be recalculated as of slot 80 -rent_epoch will be 0 -Every highest_root >= 80 and < 432k + 80 is this same result - -4. -storage_slot: 1 (partition index = 1) -find_unskipped_slot(80) returns 81 since slot 80 was SKIPPED -highest_root: 81 (partition index = 81) -since pubkey_partition_index is 80 and it HAS been reached, but the account data is from slot 1, then the account's data is INcorrect -the account's hash is incorrect and needs to be recalculated as of slot 81 (note 81 because 80 was skipped) -rent_epoch will be 0 -Every highest_root >= 80 and < 432k + 80 is this same result - -5. -storage_slot: 1 (partition index = 1) (epoch 0) -highest_root: 432k + 1 (partition index = 1) (epoch 1) -since pubkey_partition_index is 80 and it HAS been reached, but the account data is from slot 1, then the account's data is INcorrect -the account's hash is incorrect and needs to be recalculated as of slot 80 in epoch 0 -partition_index 80 has NOT been reached in epoch 1 -so, rent_epoch will be 0 -Every highest_root >= 80 and < 432k + 80 is this same result - -6. -storage_slot: 1 (partition index = 1) (epoch 0) -highest_root: 432k + 80 (partition index = 80) (epoch 1) -since pubkey_partition_index is 80 and it HAS been reached, but the account data is from slot 1, then the account's data is INcorrect -the account's hash is incorrect and needs to be recalculated as of slot 432k + 80 in epoch 1 -partition_index 80 HAS been reached in epoch 1 -so, rent_epoch will be 1 -Every highest_root >= 432k + 80 and < 432k * 2 + 80 is this same result - -7. -storage_slot: 1 (partition index = 1) (epoch 0) -find_unskipped_slot(432k + 80) returns 432k + 81 since slot 432k + 80 was SKIPPED -highest_root: 432k + 81 (partition index = 81) (epoch 1) -since pubkey_partition_index is 80 and it HAS been reached, but the account data is from slot 1, then the account's data is INcorrect -the account's hash is incorrect and needs to be recalculated as of slot 432k + 81 in epoch 1 (slot 432k + 80 was skipped) -partition_index 80 HAS been reached in epoch 1 -so, rent_epoch will be 1 -Every highest_root >= 432k + 81 and < 432k * 2 + 80 is this same result - -8. -storage_slot: 1 (partition index = 1) (epoch 0) -highest_root: 432k * 2 + 1 (partition index = 1) (epoch 2) -since pubkey_partition_index is 80 and it HAS been reached, but the account data is from slot 1, then the account's data is INcorrect -the account's hash is incorrect and needs to be recalculated as of slot 432k + 80 in epoch 1 -partition_index 80 has NOT been reached in epoch 2 -so, rent_epoch will 1 -Every highest_root >= 432k + 80 and < 432k * 2 + 80 is this same result - -9. -storage_slot: 1 (partition index = 1) (epoch 0) -highest_root: 432k * 2 + 80 (partition index = 80) (epoch 2) -since pubkey_partition_index is 80 and it HAS been reached, but the account data is from slot 1, then the account's data is INcorrect -the account's hash is incorrect and needs to be recalculated as of slot 432k * 2 + 80 in epoch 2 -partition_index 80 HAS been reached in epoch 2 -so, rent_epoch will be 2 -Every highest_root >= 432k * 2 + 80 and < 432k * 3 + 80 is this same result - -[footnote1:] - "each time a slot's pubkey_partition is == [footnote1] pubkey_partition_index within an epoch." - Due to skipped slots, this is not true. - In reality, it is: - the first slot where a slot's pubkey_partition >= pubkey_partition_index - 1. - So, simply, if the pubkey_partition for our rent is 80, then that slot occurs at these slot #s: - Slot:........... Epoch: - 0 + 80 for epoch 0 - 432,000 + 80 for epoch 1 - 432,000 * 2 + 80 for epoch 2 - ... - However, sometimes we skip slots. So, just considering epoch 0: - Normal, not skipping any slots: - slot 78 is a root - slot 79 is a root - slot 80 is a root (account is rewritten/rent collected here) - Scenario 1: - slot 78 is a root - slot 79 is skipped/not a root - slot 80 is a root (account is rewritten/rent collected here along with accounts from slot 79) - Scenario 2: - slot 78 is a root - slot 79 is skipped/not a root - slot 80 is skipped/not a root - slot 81 is a root (account is rewritten/rent collected here because of slot 80, along with accounts from slots 79 and 81) - This gets us to looking for: - the first slot where a slot's pubkey_partition >= pubkey_partition_index - 1. - -[footnote2:] - Describing partition_index within an epoch: - example: - slot=0 is epoch=0, partition_index=0 - slot=1 is epoch=0, partition_index=1 - slot=431,999 is epoch=0, partition_index=431,999 - slot=432,000 is epoch=1, partition_index=432,000 - This is NOT technically accurate because of first_normal_slot, but we'll ignore that. - EpochSchedule::get_epoch_and_slot_index(slot) calculates epoch and partition_index from slot. - -[footnote3:] - when we do a rewrite of account data, only this data changes: - 1. rent_epoch - 2. computed hash value (which is a function of (data, lamports, executable, owner, rent_epoch, pubkey) + slot - 3. into a new append vec that is associated with the slot# - -*/ - -/// specify a slot -/// and keep track of epoch info for that slot -/// The idea is that algorithms often iterate over a storage slot or over a max/bank slot. -/// The epoch info for that slot will be fixed for many pubkeys, so save the calculated results. -/// There are 2 slots required for rent collection algorithms. Some callers have storage slot fixed -/// while others have max/bank slot fixed. 'epoch_info' isn't always needed, so it is optionally -/// specified by caller and only used by callee if necessary. -#[derive(Default, Copy, Clone)] -pub struct SlotInfoInEpoch { - /// the slot - slot: Slot, - /// possible info about this slot - epoch_info: Option, -} - -/// epoch info for a slot -#[derive(Default, Copy, Clone)] -pub struct SlotInfoInEpochInner { - /// epoch of the slot - epoch: Epoch, - /// partition index of the slot within the epoch - partition_index: PartitionIndex, - /// number of slots in this epoch - slots_in_epoch: Slot, -} - -impl SlotInfoInEpoch { - /// create, populating epoch info - pub fn new(slot: Slot, epoch_schedule: &EpochSchedule) -> Self { - let mut result = Self::new_small(slot); - result.epoch_info = Some(result.get_epoch_info(epoch_schedule)); - result - } - /// create, without populating epoch info - pub fn new_small(slot: Slot) -> Self { - SlotInfoInEpoch { - slot, - ..SlotInfoInEpoch::default() - } - } - /// get epoch info by returning already calculated or by calculating it now - pub fn get_epoch_info(&self, epoch_schedule: &EpochSchedule) -> SlotInfoInEpochInner { - if let Some(inner) = &self.epoch_info { - *inner - } else { - let (epoch, partition_index) = epoch_schedule.get_epoch_and_slot_index(self.slot); - SlotInfoInEpochInner { - epoch, - partition_index, - slots_in_epoch: epoch_schedule.get_slots_in_epoch(epoch), - } - } - } -} - -impl ExpectedRentCollection { - /// 'account' is being loaded from 'storage_slot' in 'bank_slot' - /// adjusts 'account.rent_epoch' if we skipped the last rewrite on this account - pub(crate) fn maybe_update_rent_epoch_on_load( - account: &mut AccountSharedData, - storage_slot: &SlotInfoInEpoch, - bank_slot: &SlotInfoInEpoch, - epoch_schedule: &EpochSchedule, - rent_collector: &RentCollector, - pubkey: &Pubkey, - rewrites_skipped_this_slot: &Rewrites, - ) { - let result = Self::get_corrected_rent_epoch_on_load( - account, - storage_slot, - bank_slot, - epoch_schedule, - rent_collector, - pubkey, - rewrites_skipped_this_slot, - ); - if let Some(rent_epoch) = result { - account.set_rent_epoch(rent_epoch); - } - } - - /// 'account' is being loaded - /// we may need to adjust 'account.rent_epoch' if we skipped the last rewrite on this account - /// returns Some(rent_epoch) if an adjustment needs to be made - /// returns None if the account is up to date - fn get_corrected_rent_epoch_on_load( - account: &AccountSharedData, - storage_slot: &SlotInfoInEpoch, - bank_slot: &SlotInfoInEpoch, - epoch_schedule: &EpochSchedule, - rent_collector: &RentCollector, - pubkey: &Pubkey, - rewrites_skipped_this_slot: &Rewrites, - ) -> Option { - let next_epoch = match rent_collector.calculate_rent_result( - pubkey, account, None, // filler_account_suffix - // Skipping rewrites is not compatible with the below feature. - // We will not skip rewrites until the feature is activated. - false, // preserve_rent_epoch_for_rent_exempt_accounts - ) { - RentResult::LeaveAloneNoRent => return None, - RentResult::CollectRent { - new_rent_epoch, - rent_due: 0, - } => new_rent_epoch, - // Rent is due on this account in this epoch, - // so we did not skip a rewrite. - RentResult::CollectRent { .. } => return None, - }; - { - // grab epoch infno for bank slot and storage slot - let bank_info = bank_slot.get_epoch_info(epoch_schedule); - let (current_epoch, partition_from_current_slot) = - (bank_info.epoch, bank_info.partition_index); - let storage_info = storage_slot.get_epoch_info(epoch_schedule); - let (storage_epoch, storage_slot_partition) = - (storage_info.epoch, storage_info.partition_index); - let partition_from_pubkey = - Bank::partition_from_pubkey(pubkey, bank_info.slots_in_epoch); - let mut possibly_update = true; - if current_epoch == storage_epoch { - // storage is in same epoch as bank - if partition_from_pubkey > partition_from_current_slot { - // we haven't hit the slot's rent collection slot yet, and the storage was within this slot, so do not update - possibly_update = false; - } - } else if current_epoch == storage_epoch + 1 { - // storage is in the previous epoch - if storage_slot_partition >= partition_from_pubkey - && partition_from_pubkey > partition_from_current_slot - { - // we did a rewrite in last epoch and we have not yet hit the rent collection slot in THIS epoch - possibly_update = false; - } - } // if more than 1 epoch old, then we need to collect rent because we clearly skipped it. - - let rewrites_skipped_this_pubkey_this_slot = || { - rewrites_skipped_this_slot - .read() - .unwrap() - .contains_key(pubkey) - }; - let rent_epoch = account.rent_epoch(); - if possibly_update && rent_epoch == 0 && current_epoch > 1 { - if rewrites_skipped_this_pubkey_this_slot() { - return Some(next_epoch); - } else { - // we know we're done - return None; - } - } - - // if an account was written >= its rent collection slot within the last epoch worth of slots, then we don't want to update it here - if possibly_update && rent_epoch < current_epoch { - let new_rent_epoch = if partition_from_pubkey < partition_from_current_slot - || (partition_from_pubkey == partition_from_current_slot - && rewrites_skipped_this_pubkey_this_slot()) - { - // partition_from_pubkey < partition_from_current_slot: - // we already would have done a rewrite on this account IN this epoch - next_epoch - } else { - // should have done rewrite up to last epoch - // we have not passed THIS epoch's rewrite slot yet, so the correct 'rent_epoch' is previous - next_epoch.saturating_sub(1) - }; - if rent_epoch != new_rent_epoch { - // the point of this function: - // 'new_rent_epoch' is the correct rent_epoch that the account would have if we had done rewrites - return Some(new_rent_epoch); - } - } else if !possibly_update { - // This is a non-trivial lookup. Would be nice to skip this. - assert!(!rewrites_skipped_this_pubkey_this_slot(), "did not update rent_epoch: {}, new value for rent_epoch: {}, old: {}, current epoch: {}", pubkey, rent_epoch, next_epoch, current_epoch); - } - } - None - } - - #[allow(clippy::too_many_arguments)] - /// it is possible 0.. rewrites were skipped on this account - /// if so, return Some(correct hash as of 'storage_slot') - /// if 'loaded_hash' is CORRECT, return None - pub fn maybe_rehash_skipped_rewrite( - loaded_account: &impl ReadableAccount, - loaded_hash: &Hash, - pubkey: &Pubkey, - storage_slot: Slot, - epoch_schedule: &EpochSchedule, - rent_collector: &RentCollector, - stats: &HashStats, - max_slot_in_storages_inclusive: &SlotInfoInEpoch, - find_unskipped_slot: impl Fn(Slot) -> Option, - filler_account_suffix: Option<&Pubkey>, - ) -> Option { - use solana_measure::measure::Measure; - let mut m = Measure::start("rehash_calc_us"); - let expected = ExpectedRentCollection::new( - pubkey, - loaded_account, - storage_slot, - epoch_schedule, - rent_collector, - max_slot_in_storages_inclusive, - find_unskipped_slot, - filler_account_suffix, - ); - - m.stop(); - stats.rehash_calc_us.fetch_add(m.as_us(), Ordering::Relaxed); - let expected = match expected { - None => { - // use the previously calculated hash - return None; - } - Some(expected) => expected, - }; - let mut m = Measure::start("rehash_hash_us"); - let recalc_hash = AccountsDb::hash_account_with_rent_epoch( - expected.expected_rent_collection_slot_max_epoch, - loaded_account, - pubkey, - expected.rent_epoch, - ); - m.stop(); - stats.rehash_hash_us.fetch_add(m.as_us(), Ordering::Relaxed); - if &recalc_hash == loaded_hash { - // unnecessary calculation occurred - stats.rehash_unnecessary.fetch_add(1, Ordering::Relaxed); - return None; - } - stats.rehash_required.fetch_add(1, Ordering::Relaxed); - - // recomputed based on rent collection/rewrite slot - // Rent would have been collected AT 'expected_rent_collection_slot', so hash according to that slot. - // Note that a later storage (and slot) may contain this same pubkey. In that case, that newer hash will make this one irrelevant. - Some(recalc_hash) - } - - /// figure out whether the account stored at 'storage_slot' would have normally been rewritten at a slot that has already occurred: after 'storage_slot' but <= 'max_slot_in_storages_inclusive' - /// returns Some(...) if the account would have normally been rewritten - /// returns None if the account was updated wrt rent already or if it is known that there must exist a future rewrite of this account (for example, non-zero rent is due) - fn new( - pubkey: &Pubkey, - loaded_account: &impl ReadableAccount, - storage_slot: Slot, - epoch_schedule: &EpochSchedule, - rent_collector_max_epoch: &RentCollector, - max_slot_in_storages_inclusive: &SlotInfoInEpoch, - find_unskipped_slot: impl Fn(Slot) -> Option, - filler_account_suffix: Option<&Pubkey>, - ) -> Option { - let mut rent_collector = rent_collector_max_epoch; - let SlotInfoInEpochInner { - epoch: epoch_of_max_storage_slot, - partition_index: partition_index_from_max_slot, - slots_in_epoch: slots_per_epoch_max_epoch, - } = max_slot_in_storages_inclusive.get_epoch_info(epoch_schedule); - let mut partition_from_pubkey = - crate::bank::Bank::partition_from_pubkey(pubkey, slots_per_epoch_max_epoch); - // now, we have to find the root that is >= the slot where this pubkey's rent would have been collected - let first_slot_in_max_epoch = - max_slot_in_storages_inclusive.slot - partition_index_from_max_slot; - let mut expected_rent_collection_slot_max_epoch = - first_slot_in_max_epoch + partition_from_pubkey; - let calculated_from_index_expected_rent_collection_slot_max_epoch = - expected_rent_collection_slot_max_epoch; - if expected_rent_collection_slot_max_epoch <= max_slot_in_storages_inclusive.slot { - // may need to find a valid root - if let Some(find) = - find_unskipped_slot(calculated_from_index_expected_rent_collection_slot_max_epoch) - { - // found a root that is >= expected_rent_collection_slot. - expected_rent_collection_slot_max_epoch = find; - } - } - let mut use_previous_epoch_rent_collector = false; - if expected_rent_collection_slot_max_epoch > max_slot_in_storages_inclusive.slot { - // max slot has not hit the slot in the max epoch where we would have collected rent yet, so the most recent rent-collected rewrite slot for this pubkey would be in the previous epoch - let previous_epoch = epoch_of_max_storage_slot.saturating_sub(1); - let slots_per_epoch_previous_epoch = epoch_schedule.get_slots_in_epoch(previous_epoch); - expected_rent_collection_slot_max_epoch = - if slots_per_epoch_previous_epoch == slots_per_epoch_max_epoch { - // partition index remains the same - calculated_from_index_expected_rent_collection_slot_max_epoch - .saturating_sub(slots_per_epoch_max_epoch) - } else { - // the newer epoch has a different # of slots, so the partition index will be different in the prior epoch - partition_from_pubkey = crate::bank::Bank::partition_from_pubkey( - pubkey, - slots_per_epoch_previous_epoch, - ); - first_slot_in_max_epoch - .saturating_sub(slots_per_epoch_previous_epoch) - .saturating_add(partition_from_pubkey) - }; - // since we are looking a different root, we have to call this again - if let Some(find) = find_unskipped_slot(expected_rent_collection_slot_max_epoch) { - // found a root (because we have a storage) that is >= expected_rent_collection_slot. - expected_rent_collection_slot_max_epoch = find; - } - - // since we have not hit the slot in the rent collector's epoch yet, we need to collect rent according to the previous epoch's rent collector. - use_previous_epoch_rent_collector = true; - } - - // the slot we're dealing with is where we expected the rent to be collected for this pubkey, so use what is in this slot - // however, there are cases, such as adjusting the clock, where we store the account IN the same slot, but we do so BEFORE we collect rent. We later store the account AGAIN for rewrite/rent collection. - // So, if storage_slot == expected_rent_collection_slot..., then we MAY have collected rent or may not have. So, it has to be > - // rent_epoch=0 is a special case - if storage_slot > expected_rent_collection_slot_max_epoch - || loaded_account.rent_epoch() == 0 - { - // no need to update hash - return None; - } - - let rent_collector_previous; - if use_previous_epoch_rent_collector { - // keep in mind the storage slot could be 0..inf epochs in the past - // we want to swap the rent collector for one whose epoch is the previous epoch - let mut rent_collector_temp = rent_collector.clone(); - rent_collector_temp.epoch = rent_collector.epoch.saturating_sub(1); // previous epoch - rent_collector_previous = Some(rent_collector_temp); - rent_collector = rent_collector_previous.as_ref().unwrap(); - } - - // ask the rent collector what rent should be collected. - // Rent collector knows the current epoch. - let rent_result = rent_collector.calculate_rent_result( - pubkey, - loaded_account, - filler_account_suffix, - // Skipping rewrites is not compatible with the below feature. - // We will not skip rewrites until the feature is activated. - false, // preserve_rent_epoch_for_rent_exempt_accounts - ); - let current_rent_epoch = loaded_account.rent_epoch(); - let new_rent_epoch = match rent_result { - RentResult::CollectRent { - new_rent_epoch: next_epoch, - rent_due, - } => { - if next_epoch > current_rent_epoch && rent_due != 0 { - // this is an account that would have had rent collected since this storage slot, so just use the hash we have since there must be a newer version of this account already in a newer slot - // It would be a waste of time to recalcluate a hash. - return None; - } - std::cmp::max(next_epoch, current_rent_epoch) - } - RentResult::LeaveAloneNoRent => { - // rent_epoch is not updated for this condition - // But, a rewrite WOULD HAVE occured at the expected slot. - // So, fall through with same rent_epoch, but we will have already calculated 'expected_rent_collection_slot_max_epoch' - current_rent_epoch - } - }; - - if expected_rent_collection_slot_max_epoch == storage_slot - && new_rent_epoch == loaded_account.rent_epoch() - { - // no rewrite would have occurred - return None; - } - - Some(Self { - partition_from_pubkey, - epoch_of_max_storage_slot, - partition_index_from_max_slot, - first_slot_in_max_epoch, - expected_rent_collection_slot_max_epoch, - rent_epoch: new_rent_epoch, - }) - } -} - -#[cfg(test)] -pub mod tests { - use { - super::*, - solana_sdk::{ - account::{AccountSharedData, WritableAccount}, - genesis_config::GenesisConfig, - }, - }; - - #[test] - fn test_expected_rent_collection() { - solana_logger::setup(); - let pubkey = Pubkey::new(&[5; 32]); - let owner = solana_sdk::pubkey::new_rand(); - let mut account = AccountSharedData::new(1, 0, &owner); - let max_slot_in_storages_inclusive = 0; - let epoch_schedule = EpochSchedule::default(); - let first_normal_slot = epoch_schedule.first_normal_slot; - let storage_slot = first_normal_slot; - let epoch = epoch_schedule.get_epoch(storage_slot); - assert_eq!( - (epoch, 0), - epoch_schedule.get_epoch_and_slot_index(storage_slot) - ); - let genesis_config = GenesisConfig::default(); - let mut rent_collector = RentCollector::new( - epoch, - epoch_schedule, - genesis_config.slots_per_year(), - genesis_config.rent, - ); - rent_collector.rent.lamports_per_byte_year = 0; // temporarily disable rent - let find_unskipped_slot = Some; - // slot in current epoch - let result = ExpectedRentCollection::new( - &pubkey, - &account, - storage_slot, - &epoch_schedule, - &rent_collector, - &SlotInfoInEpoch::new(max_slot_in_storages_inclusive, &epoch_schedule), - find_unskipped_slot, - None, - ); - assert!(result.is_none()); - - let slots_per_epoch = 432_000; - assert_eq!( - slots_per_epoch, - epoch_schedule.get_slots_in_epoch(epoch_schedule.get_epoch(storage_slot)) - ); - let partition_index_max_inclusive = slots_per_epoch - 1; - account.set_rent_epoch(rent_collector.epoch); - // several epochs ahead of now - // first slot of new epoch is max slot EXclusive - // so last slot of prior epoch is max slot INclusive - let max_slot_in_storages_inclusive = slots_per_epoch * 3 + first_normal_slot - 1; - rent_collector.epoch = epoch_schedule.get_epoch(max_slot_in_storages_inclusive); - let partition_from_pubkey = 8470; // function of 432k slots and 'pubkey' above - let first_slot_in_max_epoch = 1388256; - let expected_rent_collection_slot_max_epoch = - first_slot_in_max_epoch + partition_from_pubkey; - let result = ExpectedRentCollection::new( - &pubkey, - &account, - storage_slot, - &epoch_schedule, - &rent_collector, - &SlotInfoInEpoch::new(max_slot_in_storages_inclusive, &epoch_schedule), - find_unskipped_slot, - None, - ); - assert_eq!( - result, - Some(ExpectedRentCollection { - partition_from_pubkey, - epoch_of_max_storage_slot: rent_collector.epoch, - partition_index_from_max_slot: partition_index_max_inclusive, - first_slot_in_max_epoch, - expected_rent_collection_slot_max_epoch, - rent_epoch: rent_collector.epoch, - }) - ); - - // LeaveAloneNoRent - for leave_alone in [true, false] { - account.set_executable(leave_alone); - let result = ExpectedRentCollection::new( - &pubkey, - &account, - expected_rent_collection_slot_max_epoch, - &epoch_schedule, - &rent_collector, - &SlotInfoInEpoch::new(max_slot_in_storages_inclusive, &epoch_schedule), - find_unskipped_slot, - None, - ); - assert_eq!( - result, - (!leave_alone).then(|| ExpectedRentCollection { - partition_from_pubkey, - epoch_of_max_storage_slot: rent_collector.epoch, - partition_index_from_max_slot: partition_index_max_inclusive, - first_slot_in_max_epoch, - expected_rent_collection_slot_max_epoch, - rent_epoch: rent_collector.epoch, - }), - "leave_alone: {}", - leave_alone - ); - } - - // storage_slot > expected_rent_collection_slot_max_epoch - // if greater, we return None - for greater in [false, true] { - let result = ExpectedRentCollection::new( - &pubkey, - &account, - expected_rent_collection_slot_max_epoch + u64::from(greater), - &epoch_schedule, - &rent_collector, - &SlotInfoInEpoch::new(max_slot_in_storages_inclusive, &epoch_schedule), - find_unskipped_slot, - None, - ); - assert_eq!( - result, - (!greater).then(|| ExpectedRentCollection { - partition_from_pubkey, - epoch_of_max_storage_slot: rent_collector.epoch, - partition_index_from_max_slot: partition_index_max_inclusive, - first_slot_in_max_epoch, - expected_rent_collection_slot_max_epoch, - rent_epoch: rent_collector.epoch, - }) - ); - } - - // test rewrite would have occurred in previous epoch from max_slot_in_storages_inclusive's epoch - // the change is in 'rent_epoch' returned in 'expected' - for previous_epoch in [false, true] { - let result = ExpectedRentCollection::new( - &pubkey, - &account, - expected_rent_collection_slot_max_epoch, - &epoch_schedule, - &rent_collector, - &SlotInfoInEpoch::new( - max_slot_in_storages_inclusive - + if previous_epoch { slots_per_epoch } else { 0 }, - &epoch_schedule, - ), - find_unskipped_slot, - None, - ); - let epoch_delta = u64::from(previous_epoch); - let slot_delta = epoch_delta * slots_per_epoch; - assert_eq!( - result, - Some(ExpectedRentCollection { - partition_from_pubkey, - epoch_of_max_storage_slot: rent_collector.epoch + epoch_delta, - partition_index_from_max_slot: partition_index_max_inclusive, - first_slot_in_max_epoch: first_slot_in_max_epoch + slot_delta, - expected_rent_collection_slot_max_epoch: expected_rent_collection_slot_max_epoch - + slot_delta, - rent_epoch: rent_collector.epoch, - }), - "previous_epoch: {}", - previous_epoch, - ); - } - - // if account's rent_epoch is already > our rent epoch, rent was collected already - // if greater, we return None - let original_rent_epoch = account.rent_epoch(); - for already_collected in [true, false] { - // to consider: maybe if we already collected rent_epoch IN this slot and slot matches what we need, then we should return None here - account.set_rent_epoch(original_rent_epoch + u64::from(already_collected)); - let result = ExpectedRentCollection::new( - &pubkey, - &account, - expected_rent_collection_slot_max_epoch, - &epoch_schedule, - &rent_collector, - &SlotInfoInEpoch::new(max_slot_in_storages_inclusive, &epoch_schedule), - find_unskipped_slot, - None, - ); - assert_eq!( - result, - Some(ExpectedRentCollection { - partition_from_pubkey, - epoch_of_max_storage_slot: rent_collector.epoch, - partition_index_from_max_slot: partition_index_max_inclusive, - first_slot_in_max_epoch, - expected_rent_collection_slot_max_epoch, - rent_epoch: std::cmp::max(rent_collector.epoch, account.rent_epoch()), - }), - "rent_collector.epoch: {}, already_collected: {}", - rent_collector.epoch, - already_collected - ); - } - account.set_rent_epoch(original_rent_epoch); - - let storage_slot = max_slot_in_storages_inclusive - slots_per_epoch; - // check partition from pubkey code - for end_partition_index in [0, 1, 2, 100, slots_per_epoch - 2, slots_per_epoch - 1] { - // generate a pubkey range - let range = crate::bank::Bank::pubkey_range_from_partition(( - // start_index: - end_partition_index.saturating_sub(1), // this can end up at start=0, end=0 (this is a desired test case) - // end_index: - end_partition_index, - epoch_schedule.get_slots_in_epoch(rent_collector.epoch), - )); - // use both start and end from INclusive range separately - for pubkey in [&range.start(), &range.end()] { - let result = ExpectedRentCollection::new( - pubkey, - &account, - storage_slot, - &epoch_schedule, - &rent_collector, - &SlotInfoInEpoch::new(max_slot_in_storages_inclusive, &epoch_schedule), - find_unskipped_slot, - None, - ); - assert_eq!( - result, - Some(ExpectedRentCollection { - partition_from_pubkey: end_partition_index, - epoch_of_max_storage_slot: rent_collector.epoch, - partition_index_from_max_slot: partition_index_max_inclusive, - first_slot_in_max_epoch, - expected_rent_collection_slot_max_epoch: first_slot_in_max_epoch + end_partition_index, - rent_epoch: rent_collector.epoch, - }), - "range: {:?}, pubkey: {:?}, end_partition_index: {}, max_slot_in_storages_inclusive: {}", - range, - pubkey, - end_partition_index, - max_slot_in_storages_inclusive, - ); - } - } - - // check max_slot_in_storages_inclusive related code - // so sweep through max_slot_in_storages_inclusive values within an epoch - let first_slot_in_max_epoch = first_normal_slot + slots_per_epoch; - rent_collector.epoch = epoch_schedule.get_epoch(first_slot_in_max_epoch); - // an epoch in the past so we always collect rent - let storage_slot = first_normal_slot; - for partition_index in [ - 0, - 1, - 2, - partition_from_pubkey - 1, - partition_from_pubkey, - partition_from_pubkey + 1, - 100, - slots_per_epoch - 2, - slots_per_epoch - 1, - ] { - // partition_index=0 means first slot of second normal epoch - // second normal epoch because we want to deal with accounts stored in the first normal epoch - // + 1 because of exclusive - let max_slot_in_storages_inclusive = first_slot_in_max_epoch + partition_index; - let result = ExpectedRentCollection::new( - &pubkey, - &account, - storage_slot, - &epoch_schedule, - &rent_collector, - &SlotInfoInEpoch::new(max_slot_in_storages_inclusive, &epoch_schedule), - find_unskipped_slot, - None, - ); - let partition_index_passed_pubkey = partition_from_pubkey <= partition_index; - let expected_rent_epoch = - rent_collector.epoch - u64::from(!partition_index_passed_pubkey); - let expected_rent_collection_slot_max_epoch = first_slot_in_max_epoch - + partition_from_pubkey - - if partition_index_passed_pubkey { - 0 - } else { - slots_per_epoch - }; - - assert_eq!( - result, - Some(ExpectedRentCollection { - partition_from_pubkey, - epoch_of_max_storage_slot: rent_collector.epoch, - partition_index_from_max_slot: partition_index, - first_slot_in_max_epoch, - expected_rent_collection_slot_max_epoch, - rent_epoch: expected_rent_epoch, - }), - "partition_index: {}, max_slot_in_storages_inclusive: {}, storage_slot: {}, first_normal_slot: {}", - partition_index, - max_slot_in_storages_inclusive, - storage_slot, - first_normal_slot, - ); - } - - // test account.rent_epoch = 0 - let first_slot_in_max_epoch = 1388256; - for account_rent_epoch in [0, epoch] { - account.set_rent_epoch(account_rent_epoch); - let result = ExpectedRentCollection::new( - &pubkey, - &account, - storage_slot, - &epoch_schedule, - &rent_collector, - &SlotInfoInEpoch::new(max_slot_in_storages_inclusive, &epoch_schedule), - find_unskipped_slot, - None, - ); - assert_eq!( - result, - (account_rent_epoch != 0).then(|| ExpectedRentCollection { - partition_from_pubkey, - epoch_of_max_storage_slot: rent_collector.epoch + 1, - partition_index_from_max_slot: partition_index_max_inclusive, - first_slot_in_max_epoch, - expected_rent_collection_slot_max_epoch, - rent_epoch: rent_collector.epoch, - }) - ); - } - - // test find_unskipped_slot - for find_unskipped_slot in [ - |_| None, - Some, // identity - |slot| Some(slot + 1), // increment - |_| Some(Slot::MAX), // max - ] { - let test_value = 10; - let find_result = find_unskipped_slot(test_value); - let increment = find_result.unwrap_or_default() == test_value + 1; - let result = ExpectedRentCollection::new( - &pubkey, - &account, - storage_slot, - &epoch_schedule, - &rent_collector, - &SlotInfoInEpoch::new(max_slot_in_storages_inclusive, &epoch_schedule), - find_unskipped_slot, - None, - ); - // the test case of max is hacky - let prior_epoch = (partition_from_pubkey > partition_index_max_inclusive) - || find_unskipped_slot(0) == Some(Slot::MAX); - assert_eq!( - result, - Some(ExpectedRentCollection { - partition_from_pubkey, - epoch_of_max_storage_slot: rent_collector.epoch + 1, - partition_index_from_max_slot: partition_index_max_inclusive, - first_slot_in_max_epoch, - expected_rent_collection_slot_max_epoch: if find_result.unwrap_or_default() - == Slot::MAX - { - Slot::MAX - } else if increment { - expected_rent_collection_slot_max_epoch + 1 - } else { - expected_rent_collection_slot_max_epoch - }, - rent_epoch: rent_collector.epoch - u64::from(prior_epoch), - }), - "find_unskipped_slot(0): {:?}, rent_collector.epoch: {}, prior_epoch: {}", - find_unskipped_slot(0), - rent_collector.epoch, - prior_epoch, - ); - } - } - - #[test] - fn test_simplified_rent_collection() { - solana_logger::setup(); - let pubkey = Pubkey::new(&[5; 32]); - let owner = solana_sdk::pubkey::new_rand(); - let mut account = AccountSharedData::new(1, 0, &owner); - let mut epoch_schedule = EpochSchedule { - first_normal_epoch: 0, - ..EpochSchedule::default() - }; - epoch_schedule.first_normal_slot = 0; - let first_normal_slot = epoch_schedule.first_normal_slot; - let slots_per_epoch = 432_000; - let partition_from_pubkey = 8470; // function of 432k slots and 'pubkey' above - // start in epoch=1 because of issues at rent_epoch=1 - let storage_slot = first_normal_slot + partition_from_pubkey + slots_per_epoch; - let epoch = epoch_schedule.get_epoch(storage_slot); - assert_eq!( - (epoch, partition_from_pubkey), - epoch_schedule.get_epoch_and_slot_index(storage_slot) - ); - let genesis_config = GenesisConfig::default(); - let mut rent_collector = RentCollector::new( - epoch, - epoch_schedule, - genesis_config.slots_per_year(), - genesis_config.rent, - ); - rent_collector.rent.lamports_per_byte_year = 0; // temporarily disable rent - - assert_eq!( - slots_per_epoch, - epoch_schedule.get_slots_in_epoch(epoch_schedule.get_epoch(storage_slot)) - ); - account.set_rent_epoch(1); // has to be not 0 - - /* - test this: - pubkey_partition_index: 8470 - storage_slot: 8470 - account.rent_epoch: 1 (has to be not 0) - - max_slot: 8469 + 432k * 1 - max_slot: 8470 + 432k * 1 - max_slot: 8471 + 432k * 1 - max_slot: 8472 + 432k * 1 - max_slot: 8469 + 432k * 2 - max_slot: 8470 + 432k * 2 - max_slot: 8471 + 432k * 2 - max_slot: 8472 + 432k * 2 - max_slot: 8469 + 432k * 3 - max_slot: 8470 + 432k * 3 - max_slot: 8471 + 432k * 3 - max_slot: 8472 + 432k * 3 - - one run without skipping slot 8470, once WITH skipping slot 8470 - */ - - for skipped_slot in [false, true] { - let find_unskipped_slot = if skipped_slot { - |slot| Some(slot + 1) - } else { - Some - }; - - // starting at epoch = 0 has issues because of rent_epoch=0 special casing - for epoch in 1..4 { - for partition_index_from_max_slot in - partition_from_pubkey - 1..=partition_from_pubkey + 2 - { - let max_slot_in_storages_inclusive = - slots_per_epoch * epoch + first_normal_slot + partition_index_from_max_slot; - if storage_slot > max_slot_in_storages_inclusive { - continue; // illegal combination - } - rent_collector.epoch = epoch_schedule.get_epoch(max_slot_in_storages_inclusive); - let first_slot_in_max_epoch = max_slot_in_storages_inclusive - - max_slot_in_storages_inclusive % slots_per_epoch; - let skip_offset = u64::from(skipped_slot); - let mut expected_rent_collection_slot_max_epoch = - first_slot_in_max_epoch + partition_from_pubkey + skip_offset; - let hit_this_epoch = - expected_rent_collection_slot_max_epoch <= max_slot_in_storages_inclusive; - if !hit_this_epoch { - expected_rent_collection_slot_max_epoch -= slots_per_epoch; - } - - assert_eq!( - (epoch, partition_index_from_max_slot), - epoch_schedule.get_epoch_and_slot_index(max_slot_in_storages_inclusive) - ); - assert_eq!( - (epoch, 0), - epoch_schedule.get_epoch_and_slot_index(first_slot_in_max_epoch) - ); - account.set_rent_epoch(1); - let result = ExpectedRentCollection::new( - &pubkey, - &account, - storage_slot, - &epoch_schedule, - &rent_collector, - &SlotInfoInEpoch::new(max_slot_in_storages_inclusive, &epoch_schedule), - find_unskipped_slot, - None, - ); - let some_expected = if epoch == 1 { - skipped_slot && partition_index_from_max_slot > partition_from_pubkey - } else if epoch == 2 { - partition_index_from_max_slot >= partition_from_pubkey - skip_offset - } else { - true - }; - assert_eq!( - result, - some_expected.then(|| ExpectedRentCollection { - partition_from_pubkey, - epoch_of_max_storage_slot: rent_collector.epoch, - partition_index_from_max_slot, - first_slot_in_max_epoch, - expected_rent_collection_slot_max_epoch, - rent_epoch: rent_collector.epoch - u64::from(!hit_this_epoch), - }), - "partition_index_from_max_slot: {}, epoch: {}, hit_this_epoch: {}, skipped_slot: {}", - partition_index_from_max_slot, - epoch, - hit_this_epoch, - skipped_slot, - ); - - // test RentResult::LeaveAloneNoRent - { - let result = ExpectedRentCollection::new( - &pubkey, - &account, - storage_slot, - &epoch_schedule, - &rent_collector, - &SlotInfoInEpoch::new(max_slot_in_storages_inclusive, &epoch_schedule), - find_unskipped_slot, - // treat this pubkey like a filler account so we get a 'LeaveAloneNoRent' result - Some(&pubkey), - ); - assert_eq!( - result, - some_expected.then(|| ExpectedRentCollection { - partition_from_pubkey, - epoch_of_max_storage_slot: rent_collector.epoch, - partition_index_from_max_slot, - first_slot_in_max_epoch, - expected_rent_collection_slot_max_epoch, - // this will not be adjusted for 'LeaveAloneNoRent' - rent_epoch: account.rent_epoch(), - }), - "partition_index_from_max_slot: {}, epoch: {}", - partition_index_from_max_slot, - epoch, - ); - } - - // test maybe_rehash_skipped_rewrite - let hash = AccountsDb::hash_account(storage_slot, &account, &pubkey); - let maybe_rehash = ExpectedRentCollection::maybe_rehash_skipped_rewrite( - &account, - &hash, - &pubkey, - storage_slot, - &epoch_schedule, - &rent_collector, - &HashStats::default(), - &SlotInfoInEpoch::new(max_slot_in_storages_inclusive, &epoch_schedule), - find_unskipped_slot, - None, - ); - assert_eq!( - maybe_rehash, - some_expected.then(|| { - AccountsDb::hash_account_with_rent_epoch( - result - .as_ref() - .unwrap() - .expected_rent_collection_slot_max_epoch, - &account, - &pubkey, - result.as_ref().unwrap().rent_epoch, - ) - }) - ); - } - } - } - } - - #[test] - fn test_get_corrected_rent_epoch_on_load() { - solana_logger::setup(); - let pubkey = Pubkey::new(&[5; 32]); - let owner = solana_sdk::pubkey::new_rand(); - let mut account = AccountSharedData::new(1, 0, &owner); - let mut epoch_schedule = EpochSchedule { - first_normal_epoch: 0, - ..EpochSchedule::default() - }; - epoch_schedule.first_normal_slot = 0; - let first_normal_slot = epoch_schedule.first_normal_slot; - let slots_per_epoch = 432_000; - let partition_from_pubkey = 8470; // function of 432k slots and 'pubkey' above - // start in epoch=1 because of issues at rent_epoch=1 - let storage_slot = first_normal_slot + partition_from_pubkey + slots_per_epoch; - let epoch = epoch_schedule.get_epoch(storage_slot); - assert_eq!( - (epoch, partition_from_pubkey), - epoch_schedule.get_epoch_and_slot_index(storage_slot) - ); - let genesis_config = GenesisConfig::default(); - let mut rent_collector = RentCollector::new( - epoch, - epoch_schedule, - genesis_config.slots_per_year(), - genesis_config.rent, - ); - rent_collector.rent.lamports_per_byte_year = 0; // temporarily disable rent - - assert_eq!( - slots_per_epoch, - epoch_schedule.get_slots_in_epoch(epoch_schedule.get_epoch(storage_slot)) - ); - account.set_rent_epoch(1); // has to be not 0 - - /* - test this: - pubkey_partition_index: 8470 - storage_slot: 8470 - account.rent_epoch: 1 (has to be not 0) - - max_slot: 8469 + 432k * 1 - max_slot: 8470 + 432k * 1 - max_slot: 8471 + 432k * 1 - max_slot: 8472 + 432k * 1 - max_slot: 8469 + 432k * 2 - max_slot: 8470 + 432k * 2 - max_slot: 8471 + 432k * 2 - max_slot: 8472 + 432k * 2 - max_slot: 8469 + 432k * 3 - max_slot: 8470 + 432k * 3 - max_slot: 8471 + 432k * 3 - max_slot: 8472 + 432k * 3 - - one run without skipping slot 8470, once WITH skipping slot 8470 - */ - - for new_small in [false, true] { - for rewrite_already in [false, true] { - // starting at epoch = 0 has issues because of rent_epoch=0 special casing - for epoch in 1..4 { - for partition_index_bank_slot in - partition_from_pubkey - 1..=partition_from_pubkey + 2 - { - let bank_slot = - slots_per_epoch * epoch + first_normal_slot + partition_index_bank_slot; - if storage_slot > bank_slot { - continue; // illegal combination - } - rent_collector.epoch = epoch_schedule.get_epoch(bank_slot); - let first_slot_in_max_epoch = bank_slot - bank_slot % slots_per_epoch; - - assert_eq!( - (epoch, partition_index_bank_slot), - epoch_schedule.get_epoch_and_slot_index(bank_slot) - ); - assert_eq!( - (epoch, 0), - epoch_schedule.get_epoch_and_slot_index(first_slot_in_max_epoch) - ); - account.set_rent_epoch(1); - let rewrites = Rewrites::default(); - if rewrite_already { - if partition_index_bank_slot != partition_from_pubkey { - // this is an invalid test occurrence. - // we wouldn't have inserted pubkey into 'rewrite_already' for this slot if the current partition index wasn't at the pubkey's partition idnex yet. - continue; - } - - rewrites.write().unwrap().insert(pubkey, Hash::default()); - } - let expected_new_rent_epoch = - if partition_index_bank_slot > partition_from_pubkey { - if epoch > account.rent_epoch() { - Some(rent_collector.epoch) - } else { - None - } - } else if partition_index_bank_slot == partition_from_pubkey - && rewrite_already - { - let expected_rent_epoch = rent_collector.epoch; - if expected_rent_epoch == account.rent_epoch() { - None - } else { - Some(expected_rent_epoch) - } - } else if partition_index_bank_slot <= partition_from_pubkey - && epoch > account.rent_epoch() - { - let expected_rent_epoch = rent_collector.epoch.saturating_sub(1); - if expected_rent_epoch == account.rent_epoch() { - None - } else { - Some(expected_rent_epoch) - } - } else { - None - }; - let get_slot_info = |slot| { - if new_small { - SlotInfoInEpoch::new_small(slot) - } else { - SlotInfoInEpoch::new(slot, &epoch_schedule) - } - }; - let new_rent_epoch = - ExpectedRentCollection::get_corrected_rent_epoch_on_load( - &account, - &get_slot_info(storage_slot), - &get_slot_info(bank_slot), - &epoch_schedule, - &rent_collector, - &pubkey, - &rewrites, - ); - assert_eq!(new_rent_epoch, expected_new_rent_epoch); - } - } - } - } - } -} diff --git a/runtime/src/lib.rs b/runtime/src/lib.rs index 16a3f78e6d8163..45d338bfe58127 100644 --- a/runtime/src/lib.rs +++ b/runtime/src/lib.rs @@ -36,7 +36,6 @@ pub mod cost_model; pub mod cost_tracker; pub mod epoch_stakes; pub mod execute_cost_table; -mod expected_rent_collection; pub mod genesis_utils; pub mod hardened_unpack; pub mod in_mem_accounts_index; From 143e4f796097e011e528b924727e26c4c47edd66 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Fri, 21 Oct 2022 21:12:11 +0000 Subject: [PATCH 207/465] Jason add cpuid metrics (backport #28114) (#28540) * Add cpuid calls and metric reporting; change cpu info sampling interval from 1s to 10s (cherry picked from commit d841286c2143220c6eb609aa5cb07aae36c94170) * Cargo fmt applied (cherry picked from commit c8584b0cdda6a4eb427c8014f668ca54a43a212d) * Fix a fmt problem, I think. Shows up in the git check, but not when I run here (cherry picked from commit 13b095b4abdaa3413a7571e014e072d2b19d7278) * Update naming, style after PR review comments (cherry picked from commit fac772ff90e23a170b4435074f81398caefd1ff7) * Convert magic numbers to named constants (cherry picked from commit 1e1455688d99865b0222ca660db512f683efd942) * Use num-enum crate to make everything typesafe (cherry picked from commit 3b2ab313deb699525352ba530198e32588092b27) * Updated cargo.lock (cherry picked from commit 8c42b07912f5b71ed09778147c0cebb845fc9234) * Minor refactoring and cleaning of cpuid code (cherry picked from commit c899ededfcf5d9a5f393d12e12f3fbe6ff070d80) Co-authored-by: Jason Davis --- Cargo.lock | 1 + core/Cargo.toml | 1 + core/src/system_monitor_service.rs | 128 +++++++++++++++++++++++++++++ programs/bpf/Cargo.lock | 1 + 4 files changed, 131 insertions(+) diff --git a/Cargo.lock b/Cargo.lock index 0f122254f0bbcb..ac40a484d678c4 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -5028,6 +5028,7 @@ dependencies = [ "lru", "matches", "min-max-heap", + "num_enum", "rand 0.7.3", "rand_chacha 0.2.2", "raptorq", diff --git a/core/Cargo.toml b/core/Cargo.toml index 67b8f15e22fb9a..5d8113fb4c380e 100644 --- a/core/Cargo.toml +++ b/core/Cargo.toml @@ -30,6 +30,7 @@ lazy_static = "1.4.0" log = "0.4.17" lru = "0.7.7" min-max-heap = "1.3.0" +num_enum = "0.5.7" rand = "0.7.0" rand_chacha = "0.2.2" rayon = "1.5.3" diff --git a/core/src/system_monitor_service.rs b/core/src/system_monitor_service.rs index dc6146ed1abc75..57f11f7dff5196 100644 --- a/core/src/system_monitor_service.rs +++ b/core/src/system_monitor_service.rs @@ -1,3 +1,9 @@ +#[cfg(target_arch = "x86")] +use core::arch::x86::{CpuidResult, __cpuid, __cpuid_count, __get_cpuid_max}; +#[cfg(target_arch = "x86_64")] +use core::arch::x86_64::{CpuidResult, __cpuid, __cpuid_count, __get_cpuid_max}; +#[cfg(any(target_arch = "x86", target_arch = "x86_64"))] +use num_enum::{IntoPrimitive, TryFromPrimitive}; #[cfg(target_os = "linux")] use std::{fs::File, io::BufReader}; use { @@ -99,6 +105,32 @@ struct CpuInfo { num_threads: u64, } +#[cfg(any(target_arch = "x86", target_arch = "x86_64"))] +#[derive(IntoPrimitive)] +#[repr(i64)] +enum CpuManufacturer { + Other, + Intel, + Amd, +} + +#[cfg(any(target_arch = "x86", target_arch = "x86_64"))] +#[derive(IntoPrimitive, TryFromPrimitive, PartialEq, PartialOrd)] +#[repr(u32)] +// The value passed into cpuid via eax, to control what the result means +enum CpuidParamValue { + Manufacturer = 0, + Processor = 1, + Cache = 2, + SerialNumber = 3, + Topology = 4, + Unsupported = 5, + ThermalAndPower = 6, + Extended = 7, +} +#[cfg(any(target_arch = "x86", target_arch = "x86_64"))] +const CPUID_PARAM_MAX_SUPPORTED_VALUE: u32 = 7; + #[derive(Default)] #[cfg_attr(not(target_os = "linux"), allow(dead_code))] // These stats are aggregated across all storage devices excluding internal loopbacks. @@ -690,6 +722,99 @@ impl SystemMonitorService { }) } + #[cfg(any(target_arch = "x86", target_arch = "x86_64"))] + fn report_cpuid_values() { + const CPUID_MANUFACTURER_EBX_INTEL: u32 = 0x756e6547; + const CPUID_MANUFACTURER_EDX_INTEL: u32 = 0x49656e69; + const CPUID_MANUFACTURER_ECX_INTEL: u32 = 0x6c65746e; + const CPUID_MANUFACTURER_EBX_AMD: u32 = 0x68747541; + const CPUID_MANUFACTURER_EDX_AMD: u32 = 0x69746e65; + const CPUID_MANUFACTURER_ECX_AMD: u32 = 0x444d4163; + + unsafe { + let cpuid_mfr = __cpuid(0); + let cpuid_empty = CpuidResult { + eax: 0, + ebx: 0, + ecx: 0, + edx: 0, + }; + + let max_leaf = match CpuidParamValue::try_from(std::cmp::min( + cpuid_mfr.eax, + CPUID_PARAM_MAX_SUPPORTED_VALUE, + )) { + Ok(val) => val, + Err(_err) => CpuidParamValue::Manufacturer, + }; + + let mfr_id = if cpuid_mfr.ebx == CPUID_MANUFACTURER_EBX_INTEL + && cpuid_mfr.edx == CPUID_MANUFACTURER_EDX_INTEL + && cpuid_mfr.ecx == CPUID_MANUFACTURER_ECX_INTEL + { + CpuManufacturer::Intel // GenuineIntel + } else if cpuid_mfr.ebx == CPUID_MANUFACTURER_EBX_AMD + && cpuid_mfr.edx == CPUID_MANUFACTURER_EDX_AMD + && cpuid_mfr.ecx == CPUID_MANUFACTURER_ECX_AMD + { + CpuManufacturer::Amd // AuthenticAMD + } else { + CpuManufacturer::Other // anything else + }; + + let cpuid_processor = if CpuidParamValue::Processor <= max_leaf { + __cpuid(CpuidParamValue::Processor.into()) + } else { + cpuid_empty + }; + let cpuid_cache = if CpuidParamValue::Cache <= max_leaf { + __cpuid(CpuidParamValue::Cache.into()) + } else { + cpuid_empty + }; + let cpuid_topology = if CpuidParamValue::Topology <= max_leaf { + __cpuid(CpuidParamValue::Topology.into()) + } else { + cpuid_empty + }; + let cpuid_extended_0 = if CpuidParamValue::Extended <= max_leaf { + __cpuid_count(CpuidParamValue::Extended.into(), 0) + } else { + cpuid_empty + }; + let cpuid_extended_1 = if CpuidParamValue::Extended <= max_leaf { + if 1 <= __get_cpuid_max(CpuidParamValue::Extended.into()).1 { + __cpuid_count(CpuidParamValue::Extended.into(), 1) + } else { + cpuid_empty + } + } else { + cpuid_empty + }; + + datapoint_info!( + "cpuid-values", + ("manufacturer_id", i64::from(mfr_id), i64), + ("cpuid_processor_eax", i64::from(cpuid_processor.eax), i64), + ("cpuid_processor_ebx", i64::from(cpuid_processor.ebx), i64), + ("cpuid_processor_ecx", i64::from(cpuid_processor.ecx), i64), + ("cpuid_processor_edx", i64::from(cpuid_processor.edx), i64), + ("cpuid_cache_eax", i64::from(cpuid_cache.eax), i64), + ("cpuid_cache_ebx", i64::from(cpuid_cache.ebx), i64), + ("cpuid_cache_ecx", i64::from(cpuid_cache.ecx), i64), + ("cpuid_cache_edx", i64::from(cpuid_cache.edx), i64), + ("cpuid_topology_eax", i64::from(cpuid_topology.eax), i64), + ("cpuid_topology_ebx", i64::from(cpuid_topology.ebx), i64), + ("cpuid_topology_ecx", i64::from(cpuid_topology.ecx), i64), + ("cpuid_topology_edx", i64::from(cpuid_topology.edx), i64), + ("cpuid_extended_0_ebx", i64::from(cpuid_extended_0.ebx), i64), + ("cpuid_extended_0_ecx", i64::from(cpuid_extended_0.ecx), i64), + ("cpuid_extended_0_edx", i64::from(cpuid_extended_0.edx), i64), + ("cpuid_extended_1_eax", i64::from(cpuid_extended_1.eax), i64), + ); + }; + } + fn report_cpu_stats() { if let Ok(info) = Self::cpu_info() { datapoint_info!( @@ -702,6 +827,9 @@ impl SystemMonitorService { ("total_num_threads", info.num_threads as i64, i64), ) } + + #[cfg(any(target_arch = "x86", target_arch = "x86_64"))] + Self::report_cpuid_values(); } #[cfg(target_os = "linux")] diff --git a/programs/bpf/Cargo.lock b/programs/bpf/Cargo.lock index 490df789b9f744..9ffd58c2fcb7f5 100644 --- a/programs/bpf/Cargo.lock +++ b/programs/bpf/Cargo.lock @@ -4725,6 +4725,7 @@ dependencies = [ "log", "lru", "min-max-heap", + "num_enum", "rand 0.7.3", "rand_chacha 0.2.2", "rayon", From 9e57fb576ca21cf5b1a565484f3c0317c2980ed1 Mon Sep 17 00:00:00 2001 From: "Jeff Washington (jwash)" Date: Fri, 21 Oct 2022 16:21:36 -0700 Subject: [PATCH 208/465] testnet fixup: only update rent_epoch on load until feature (#28543) * feature 28541 no-op * Revert "manual backport of #28422 (#28532)" This reverts commit 5571aca49f4465bab4a6768e282aeb3be767f64b. * only update rent_epoch on load until feature --- runtime/src/accounts_db.rs | 48 +- runtime/src/bank.rs | 29 +- runtime/src/expected_rent_collection.rs | 1308 +++++++++++++++++++++++ runtime/src/lib.rs | 1 + sdk/src/feature_set.rs | 5 + 5 files changed, 1388 insertions(+), 3 deletions(-) create mode 100644 runtime/src/expected_rent_collection.rs diff --git a/runtime/src/accounts_db.rs b/runtime/src/accounts_db.rs index ad28f3c308b7bd..878c3c1ff69b42 100644 --- a/runtime/src/accounts_db.rs +++ b/runtime/src/accounts_db.rs @@ -45,6 +45,7 @@ use { bank::Rewrites, cache_hash_data::CacheHashData, contains::Contains, + expected_rent_collection::{ExpectedRentCollection, SlotInfoInEpoch}, pubkey_bins::PubkeyBinCalculator24, read_only_accounts_cache::ReadOnlyAccountsCache, rent_collector::RentCollector, @@ -1792,22 +1793,26 @@ trait AppendVecScan: Send + Sync + Clone { /// These would have been captured in a fn from within the scan function. /// Some of these are constant across all pubkeys, some are constant across a slot. /// Some could be unique per pubkey. -struct ScanState<'a> { +struct ScanState<'a, T: Fn(Slot) -> Option + Sync + Send + Clone> { /// slot we're currently scanning current_slot: Slot, /// accumulated results accum: BinnedHashData, + /// max slot (inclusive) that we're calculating accounts hash on + max_slot_info: SlotInfoInEpoch, bin_calculator: &'a PubkeyBinCalculator24, bin_range: &'a Range, config: &'a CalcAccountsHashConfig<'a>, mismatch_found: Arc, + stats: &'a crate::accounts_hash::HashStats, + find_unskipped_slot: &'a T, filler_account_suffix: Option<&'a Pubkey>, range: usize, sort_time: Arc, pubkey_to_bin_index: usize, } -impl<'a> AppendVecScan for ScanState<'a> { +impl<'a, T: Fn(Slot) -> Option + Sync + Send + Clone> AppendVecScan for ScanState<'a, T> { fn set_slot(&mut self, slot: Slot) { self.current_slot = slot; } @@ -1836,6 +1841,20 @@ impl<'a> AppendVecScan for ScanState<'a> { }; let loaded_hash = loaded_account.loaded_hash(); + let new_hash = ExpectedRentCollection::maybe_rehash_skipped_rewrite( + loaded_account, + &loaded_hash, + pubkey, + self.current_slot, + self.config.epoch_schedule, + self.config.rent_collector, + self.stats, + &self.max_slot_info, + self.find_unskipped_slot, + self.filler_account_suffix, + ); + let loaded_hash = new_hash.unwrap_or(loaded_hash); + let source_item = CalculateHashIntermediate::new(loaded_hash, balance, *pubkey); if self.config.check_hash @@ -6236,6 +6255,8 @@ impl AccountsDb { let total_lamports = Mutex::::new(0); let stats = HashStats::default(); + let max_slot_info = SlotInfoInEpoch::new(max_slot, config.epoch_schedule); + let get_hashes = || { keys.par_chunks(chunks) .map(|pubkeys| { @@ -6268,7 +6289,23 @@ impl AccountsDb { .get_loaded_account() .and_then( |loaded_account| { + let find_unskipped_slot = |slot: Slot| { + self.find_unskipped_slot(slot, config.ancestors) + }; let loaded_hash = loaded_account.loaded_hash(); + let new_hash = ExpectedRentCollection::maybe_rehash_skipped_rewrite( + &loaded_account, + &loaded_hash, + pubkey, + *slot, + config.epoch_schedule, + config.rent_collector, + &stats, + &max_slot_info, + find_unskipped_slot, + self.filler_account_suffix.as_ref(), + ); + let loaded_hash = new_hash.unwrap_or(loaded_hash); let balance = loaded_account.lamports(); if config.check_hash && !self.is_filler_account(pubkey) { // this will not be supported anymore let computed_hash = @@ -6853,15 +6890,22 @@ impl AccountsDb { let range = bin_range.end - bin_range.start; let sort_time = Arc::new(AtomicU64::new(0)); + let find_unskipped_slot = |slot: Slot| self.find_unskipped_slot(slot, config.ancestors); + + let max_slot_info = + SlotInfoInEpoch::new(storage.max_slot_inclusive(), config.epoch_schedule); let scanner = ScanState { current_slot: Slot::default(), accum: BinnedHashData::default(), bin_calculator: &bin_calculator, config, mismatch_found: mismatch_found.clone(), + max_slot_info, + find_unskipped_slot: &find_unskipped_slot, filler_account_suffix, range, bin_range, + stats, sort_time: sort_time.clone(), pubkey_to_bin_index: 0, }; diff --git a/runtime/src/bank.rs b/runtime/src/bank.rs index 23455f976a5000..a44be3d1657057 100644 --- a/runtime/src/bank.rs +++ b/runtime/src/bank.rs @@ -54,6 +54,7 @@ use { builtins::{self, BuiltinAction, BuiltinFeatureTransition, Builtins}, cost_tracker::CostTracker, epoch_stakes::{EpochStakes, NodeVoteAccounts}, + expected_rent_collection::{ExpectedRentCollection, SlotInfoInEpoch}, inline_spl_associated_token_account, inline_spl_token, message_processor::MessageProcessor, rent_collector::{CollectedInfo, RentCollector}, @@ -6380,7 +6381,33 @@ impl Bank { ancestors: &Ancestors, pubkey: &Pubkey, ) -> Option<(AccountSharedData, Slot)> { - self.rc.accounts.load_with_fixed_root(ancestors, pubkey) + match self.rc.accounts.load_with_fixed_root(ancestors, pubkey) { + Some((mut account, storage_slot)) => { + if !self.feature_set.is_active( + &solana_sdk::feature_set::on_load_preserve_rent_epoch_for_rent_exempt_accounts::id(), + ) { + // this was a bug in 1.14+. This code should not have run once this feature was activated: + // preserve rent epoch for rent exempt accounts #26479 + // But, it did run. On mnb, this caused bank mismatches. + // On testnet, where ALL validators were running this code incorrectly, the rent_epoch was updated here. + // The network was happy, but the behavior was wrong. So, correctly removing this code disagreed with + // what the network agreed was 'correct'. So, we have to preserve the previous erroneous behavior on testnet + // until we can activate this feature to switch the network's understanding of 'correct'. + ExpectedRentCollection::maybe_update_rent_epoch_on_load( + &mut account, + &SlotInfoInEpoch::new_small(storage_slot), + &SlotInfoInEpoch::new_small(self.slot()), + self.epoch_schedule(), + self.rent_collector(), + pubkey, + &self.rewrites_skipped_this_slot, + ); + } + + Some((account, storage_slot)) + } + None => None, + } } pub fn get_program_accounts( diff --git a/runtime/src/expected_rent_collection.rs b/runtime/src/expected_rent_collection.rs new file mode 100644 index 00000000000000..4e2c45b839bb84 --- /dev/null +++ b/runtime/src/expected_rent_collection.rs @@ -0,0 +1,1308 @@ +//! Logic for determining when rent should have been collected or a rewrite would have occurred for an account. +use { + crate::{ + accounts_db::AccountsDb, + accounts_hash::HashStats, + bank::{Bank, PartitionIndex, Rewrites}, + rent_collector::{RentCollector, RentResult}, + }, + solana_sdk::{ + account::{AccountSharedData, ReadableAccount, WritableAccount}, + clock::{Epoch, Slot}, + epoch_schedule::EpochSchedule, + hash::Hash, + pubkey::Pubkey, + }, + std::sync::atomic::Ordering, +}; + +#[derive(Debug, PartialEq, Eq)] +pub struct ExpectedRentCollection { + partition_from_pubkey: PartitionIndex, + epoch_of_max_storage_slot: Epoch, + partition_index_from_max_slot: PartitionIndex, + first_slot_in_max_epoch: Slot, + // these are the only 2 fields used by downstream calculations at the moment. + // the rest are here for debugging + expected_rent_collection_slot_max_epoch: Slot, + rent_epoch: Epoch, +} + +/* +A goal is to skip rewrites to improve performance. +Reasons this file exists: +A. When we encounter skipped-rewrite account data as part of a load, we may need to update rent_epoch. +B. When we encounter skipped-rewrite account data during accounts hash calc, the saved hash will be incorrect if we skipped a rewrite. + We need slot and rent_epoch to recalculate a new hash. + +cases of rent collection: + +setup assumptions: +pubkey = abc +slots_per_epoch = 432,000 +pubkey_partition_index of 'abc' = 80 + +So, rent will be collected or a rewrite is expected to occur: + each time a slot's pubkey_partition is == [footnote1] pubkey_partition_index within an epoch. [footnote2] + + If we skip rewrites, then pubkey's account data will not be rewritten when its rent collecion partition index occurs. + However, later we need to get a hash value for the most recent update to this account. + That leads us to the purpose of this file. + To calculate a hash for account data, we need to know: + 1. the slot the account was written in + 2. the rent_epoch field of the account, telling us which epoch is the next time we should evaluate rent on this account + If we did not perform a rewrite, then the account in the append vec it was last written in has: + 1. The wrong slot, since the append vec is not associated with the slot that the rewrite would have occurred. + 2. The wrong rent_epoch since the account was not rewritten with a newer rent_epoch [footnote3] + +Reason A for this file's existence: +When we encounter the skipped-rewrite account data as part of a load, we may need to update rent_epoch. +Many operations work like this: + 1. read account + 2. add lamports (ex: reward was paid) + 3. write account +If the account is written with the WRONG rent_epoch field, then we will store an 'incorrect' rent_epoch field and the hash will be incorrect. +So, at (1. read account), we must FIX the rent_epoch to be as it would be if the rewrite would have occurred. + +Reason B for this file's existence: +When we encounter the skipped-rewrite account data during accounts hash calc, the saved hash will be incorrect if we skipped a rewrite. +We must compute the correct rent_epoch and slot and recompute the hash that we would have gotten if we would have done the rewrite. + +Both reasons result in the need for the same answer. +Given +1. pubkey +2. pubkey's account data +3. the slot the data was loaded from (storage_slot) +4. the highest_root caller cares about + +We also need a RentCollector and EpochSchedule for the highest root the caller cares about. +With these: +1. can calculate partition_index of +1.a. highest_root (slot) +1.b. storage_slot + +We also need : +fn find_unskipped_slot(slot) -> root +which can return the lowest root >= slot - 1 (this is why 'historical_roots' is necessary) Also see [footnote1]. + +Given these inputs, we can determine the correct slot and rent_epoch where we SHOULD have found this account's data and also compute the hash that we SHOULD have stored at that slot. +Note that a slot could be (-432k..infinite) slots and (-1..infinite) epochs relative to the expected rent collection slot. +Examples: +1. +storage_slot: 1 +highest_root: 1 +since pubkey_partition_index is 80 and hasn't been reached, the current account's data is CORRECT +Every highest_root < 80 is this same result. + +2. +storage_slot: 1 +highest_root: 79 +since pubkey_partition_index is 80 and hasn't been reached, the current account's data is CORRECT + +3. +storage_slot: 1 (partition index = 1) +highest_root: 80 (partition index = 80) +since pubkey_partition_index is 80 and it HAS been reached, but the account data is from slot 1, then the account's data is INcorrect +the account's hash is incorrect and needs to be recalculated as of slot 80 +rent_epoch will be 0 +Every highest_root >= 80 and < 432k + 80 is this same result + +4. +storage_slot: 1 (partition index = 1) +find_unskipped_slot(80) returns 81 since slot 80 was SKIPPED +highest_root: 81 (partition index = 81) +since pubkey_partition_index is 80 and it HAS been reached, but the account data is from slot 1, then the account's data is INcorrect +the account's hash is incorrect and needs to be recalculated as of slot 81 (note 81 because 80 was skipped) +rent_epoch will be 0 +Every highest_root >= 80 and < 432k + 80 is this same result + +5. +storage_slot: 1 (partition index = 1) (epoch 0) +highest_root: 432k + 1 (partition index = 1) (epoch 1) +since pubkey_partition_index is 80 and it HAS been reached, but the account data is from slot 1, then the account's data is INcorrect +the account's hash is incorrect and needs to be recalculated as of slot 80 in epoch 0 +partition_index 80 has NOT been reached in epoch 1 +so, rent_epoch will be 0 +Every highest_root >= 80 and < 432k + 80 is this same result + +6. +storage_slot: 1 (partition index = 1) (epoch 0) +highest_root: 432k + 80 (partition index = 80) (epoch 1) +since pubkey_partition_index is 80 and it HAS been reached, but the account data is from slot 1, then the account's data is INcorrect +the account's hash is incorrect and needs to be recalculated as of slot 432k + 80 in epoch 1 +partition_index 80 HAS been reached in epoch 1 +so, rent_epoch will be 1 +Every highest_root >= 432k + 80 and < 432k * 2 + 80 is this same result + +7. +storage_slot: 1 (partition index = 1) (epoch 0) +find_unskipped_slot(432k + 80) returns 432k + 81 since slot 432k + 80 was SKIPPED +highest_root: 432k + 81 (partition index = 81) (epoch 1) +since pubkey_partition_index is 80 and it HAS been reached, but the account data is from slot 1, then the account's data is INcorrect +the account's hash is incorrect and needs to be recalculated as of slot 432k + 81 in epoch 1 (slot 432k + 80 was skipped) +partition_index 80 HAS been reached in epoch 1 +so, rent_epoch will be 1 +Every highest_root >= 432k + 81 and < 432k * 2 + 80 is this same result + +8. +storage_slot: 1 (partition index = 1) (epoch 0) +highest_root: 432k * 2 + 1 (partition index = 1) (epoch 2) +since pubkey_partition_index is 80 and it HAS been reached, but the account data is from slot 1, then the account's data is INcorrect +the account's hash is incorrect and needs to be recalculated as of slot 432k + 80 in epoch 1 +partition_index 80 has NOT been reached in epoch 2 +so, rent_epoch will 1 +Every highest_root >= 432k + 80 and < 432k * 2 + 80 is this same result + +9. +storage_slot: 1 (partition index = 1) (epoch 0) +highest_root: 432k * 2 + 80 (partition index = 80) (epoch 2) +since pubkey_partition_index is 80 and it HAS been reached, but the account data is from slot 1, then the account's data is INcorrect +the account's hash is incorrect and needs to be recalculated as of slot 432k * 2 + 80 in epoch 2 +partition_index 80 HAS been reached in epoch 2 +so, rent_epoch will be 2 +Every highest_root >= 432k * 2 + 80 and < 432k * 3 + 80 is this same result + +[footnote1:] + "each time a slot's pubkey_partition is == [footnote1] pubkey_partition_index within an epoch." + Due to skipped slots, this is not true. + In reality, it is: + the first slot where a slot's pubkey_partition >= pubkey_partition_index - 1. + So, simply, if the pubkey_partition for our rent is 80, then that slot occurs at these slot #s: + Slot:........... Epoch: + 0 + 80 for epoch 0 + 432,000 + 80 for epoch 1 + 432,000 * 2 + 80 for epoch 2 + ... + However, sometimes we skip slots. So, just considering epoch 0: + Normal, not skipping any slots: + slot 78 is a root + slot 79 is a root + slot 80 is a root (account is rewritten/rent collected here) + Scenario 1: + slot 78 is a root + slot 79 is skipped/not a root + slot 80 is a root (account is rewritten/rent collected here along with accounts from slot 79) + Scenario 2: + slot 78 is a root + slot 79 is skipped/not a root + slot 80 is skipped/not a root + slot 81 is a root (account is rewritten/rent collected here because of slot 80, along with accounts from slots 79 and 81) + This gets us to looking for: + the first slot where a slot's pubkey_partition >= pubkey_partition_index - 1. + +[footnote2:] + Describing partition_index within an epoch: + example: + slot=0 is epoch=0, partition_index=0 + slot=1 is epoch=0, partition_index=1 + slot=431,999 is epoch=0, partition_index=431,999 + slot=432,000 is epoch=1, partition_index=432,000 + This is NOT technically accurate because of first_normal_slot, but we'll ignore that. + EpochSchedule::get_epoch_and_slot_index(slot) calculates epoch and partition_index from slot. + +[footnote3:] + when we do a rewrite of account data, only this data changes: + 1. rent_epoch + 2. computed hash value (which is a function of (data, lamports, executable, owner, rent_epoch, pubkey) + slot + 3. into a new append vec that is associated with the slot# + +*/ + +/// specify a slot +/// and keep track of epoch info for that slot +/// The idea is that algorithms often iterate over a storage slot or over a max/bank slot. +/// The epoch info for that slot will be fixed for many pubkeys, so save the calculated results. +/// There are 2 slots required for rent collection algorithms. Some callers have storage slot fixed +/// while others have max/bank slot fixed. 'epoch_info' isn't always needed, so it is optionally +/// specified by caller and only used by callee if necessary. +#[derive(Default, Copy, Clone)] +pub struct SlotInfoInEpoch { + /// the slot + slot: Slot, + /// possible info about this slot + epoch_info: Option, +} + +/// epoch info for a slot +#[derive(Default, Copy, Clone)] +pub struct SlotInfoInEpochInner { + /// epoch of the slot + epoch: Epoch, + /// partition index of the slot within the epoch + partition_index: PartitionIndex, + /// number of slots in this epoch + slots_in_epoch: Slot, +} + +impl SlotInfoInEpoch { + /// create, populating epoch info + pub fn new(slot: Slot, epoch_schedule: &EpochSchedule) -> Self { + let mut result = Self::new_small(slot); + result.epoch_info = Some(result.get_epoch_info(epoch_schedule)); + result + } + /// create, without populating epoch info + pub fn new_small(slot: Slot) -> Self { + SlotInfoInEpoch { + slot, + ..SlotInfoInEpoch::default() + } + } + /// get epoch info by returning already calculated or by calculating it now + pub fn get_epoch_info(&self, epoch_schedule: &EpochSchedule) -> SlotInfoInEpochInner { + if let Some(inner) = &self.epoch_info { + *inner + } else { + let (epoch, partition_index) = epoch_schedule.get_epoch_and_slot_index(self.slot); + SlotInfoInEpochInner { + epoch, + partition_index, + slots_in_epoch: epoch_schedule.get_slots_in_epoch(epoch), + } + } + } +} + +impl ExpectedRentCollection { + /// 'account' is being loaded from 'storage_slot' in 'bank_slot' + /// adjusts 'account.rent_epoch' if we skipped the last rewrite on this account + pub(crate) fn maybe_update_rent_epoch_on_load( + account: &mut AccountSharedData, + storage_slot: &SlotInfoInEpoch, + bank_slot: &SlotInfoInEpoch, + epoch_schedule: &EpochSchedule, + rent_collector: &RentCollector, + pubkey: &Pubkey, + rewrites_skipped_this_slot: &Rewrites, + ) { + let result = Self::get_corrected_rent_epoch_on_load( + account, + storage_slot, + bank_slot, + epoch_schedule, + rent_collector, + pubkey, + rewrites_skipped_this_slot, + ); + if let Some(rent_epoch) = result { + account.set_rent_epoch(rent_epoch); + } + } + + /// 'account' is being loaded + /// we may need to adjust 'account.rent_epoch' if we skipped the last rewrite on this account + /// returns Some(rent_epoch) if an adjustment needs to be made + /// returns None if the account is up to date + fn get_corrected_rent_epoch_on_load( + account: &AccountSharedData, + storage_slot: &SlotInfoInEpoch, + bank_slot: &SlotInfoInEpoch, + epoch_schedule: &EpochSchedule, + rent_collector: &RentCollector, + pubkey: &Pubkey, + rewrites_skipped_this_slot: &Rewrites, + ) -> Option { + let next_epoch = match rent_collector.calculate_rent_result( + pubkey, account, None, // filler_account_suffix + // Skipping rewrites is not compatible with the below feature. + // We will not skip rewrites until the feature is activated. + false, // preserve_rent_epoch_for_rent_exempt_accounts + ) { + RentResult::LeaveAloneNoRent => return None, + RentResult::CollectRent { + new_rent_epoch, + rent_due: 0, + } => new_rent_epoch, + // Rent is due on this account in this epoch, + // so we did not skip a rewrite. + RentResult::CollectRent { .. } => return None, + }; + { + // grab epoch infno for bank slot and storage slot + let bank_info = bank_slot.get_epoch_info(epoch_schedule); + let (current_epoch, partition_from_current_slot) = + (bank_info.epoch, bank_info.partition_index); + let storage_info = storage_slot.get_epoch_info(epoch_schedule); + let (storage_epoch, storage_slot_partition) = + (storage_info.epoch, storage_info.partition_index); + let partition_from_pubkey = + Bank::partition_from_pubkey(pubkey, bank_info.slots_in_epoch); + let mut possibly_update = true; + if current_epoch == storage_epoch { + // storage is in same epoch as bank + if partition_from_pubkey > partition_from_current_slot { + // we haven't hit the slot's rent collection slot yet, and the storage was within this slot, so do not update + possibly_update = false; + } + } else if current_epoch == storage_epoch + 1 { + // storage is in the previous epoch + if storage_slot_partition >= partition_from_pubkey + && partition_from_pubkey > partition_from_current_slot + { + // we did a rewrite in last epoch and we have not yet hit the rent collection slot in THIS epoch + possibly_update = false; + } + } // if more than 1 epoch old, then we need to collect rent because we clearly skipped it. + + let rewrites_skipped_this_pubkey_this_slot = || { + rewrites_skipped_this_slot + .read() + .unwrap() + .contains_key(pubkey) + }; + let rent_epoch = account.rent_epoch(); + if possibly_update && rent_epoch == 0 && current_epoch > 1 { + if rewrites_skipped_this_pubkey_this_slot() { + return Some(next_epoch); + } else { + // we know we're done + return None; + } + } + + // if an account was written >= its rent collection slot within the last epoch worth of slots, then we don't want to update it here + if possibly_update && rent_epoch < current_epoch { + let new_rent_epoch = if partition_from_pubkey < partition_from_current_slot + || (partition_from_pubkey == partition_from_current_slot + && rewrites_skipped_this_pubkey_this_slot()) + { + // partition_from_pubkey < partition_from_current_slot: + // we already would have done a rewrite on this account IN this epoch + next_epoch + } else { + // should have done rewrite up to last epoch + // we have not passed THIS epoch's rewrite slot yet, so the correct 'rent_epoch' is previous + next_epoch.saturating_sub(1) + }; + if rent_epoch != new_rent_epoch { + // the point of this function: + // 'new_rent_epoch' is the correct rent_epoch that the account would have if we had done rewrites + return Some(new_rent_epoch); + } + } else if !possibly_update { + // This is a non-trivial lookup. Would be nice to skip this. + assert!(!rewrites_skipped_this_pubkey_this_slot(), "did not update rent_epoch: {}, new value for rent_epoch: {}, old: {}, current epoch: {}", pubkey, rent_epoch, next_epoch, current_epoch); + } + } + None + } + + #[allow(clippy::too_many_arguments)] + /// it is possible 0.. rewrites were skipped on this account + /// if so, return Some(correct hash as of 'storage_slot') + /// if 'loaded_hash' is CORRECT, return None + pub fn maybe_rehash_skipped_rewrite( + loaded_account: &impl ReadableAccount, + loaded_hash: &Hash, + pubkey: &Pubkey, + storage_slot: Slot, + epoch_schedule: &EpochSchedule, + rent_collector: &RentCollector, + stats: &HashStats, + max_slot_in_storages_inclusive: &SlotInfoInEpoch, + find_unskipped_slot: impl Fn(Slot) -> Option, + filler_account_suffix: Option<&Pubkey>, + ) -> Option { + use solana_measure::measure::Measure; + let mut m = Measure::start("rehash_calc_us"); + let expected = ExpectedRentCollection::new( + pubkey, + loaded_account, + storage_slot, + epoch_schedule, + rent_collector, + max_slot_in_storages_inclusive, + find_unskipped_slot, + filler_account_suffix, + ); + + m.stop(); + stats.rehash_calc_us.fetch_add(m.as_us(), Ordering::Relaxed); + let expected = match expected { + None => { + // use the previously calculated hash + return None; + } + Some(expected) => expected, + }; + let mut m = Measure::start("rehash_hash_us"); + let recalc_hash = AccountsDb::hash_account_with_rent_epoch( + expected.expected_rent_collection_slot_max_epoch, + loaded_account, + pubkey, + expected.rent_epoch, + ); + m.stop(); + stats.rehash_hash_us.fetch_add(m.as_us(), Ordering::Relaxed); + if &recalc_hash == loaded_hash { + // unnecessary calculation occurred + stats.rehash_unnecessary.fetch_add(1, Ordering::Relaxed); + return None; + } + stats.rehash_required.fetch_add(1, Ordering::Relaxed); + + // recomputed based on rent collection/rewrite slot + // Rent would have been collected AT 'expected_rent_collection_slot', so hash according to that slot. + // Note that a later storage (and slot) may contain this same pubkey. In that case, that newer hash will make this one irrelevant. + Some(recalc_hash) + } + + /// figure out whether the account stored at 'storage_slot' would have normally been rewritten at a slot that has already occurred: after 'storage_slot' but <= 'max_slot_in_storages_inclusive' + /// returns Some(...) if the account would have normally been rewritten + /// returns None if the account was updated wrt rent already or if it is known that there must exist a future rewrite of this account (for example, non-zero rent is due) + fn new( + pubkey: &Pubkey, + loaded_account: &impl ReadableAccount, + storage_slot: Slot, + epoch_schedule: &EpochSchedule, + rent_collector_max_epoch: &RentCollector, + max_slot_in_storages_inclusive: &SlotInfoInEpoch, + find_unskipped_slot: impl Fn(Slot) -> Option, + filler_account_suffix: Option<&Pubkey>, + ) -> Option { + let mut rent_collector = rent_collector_max_epoch; + let SlotInfoInEpochInner { + epoch: epoch_of_max_storage_slot, + partition_index: partition_index_from_max_slot, + slots_in_epoch: slots_per_epoch_max_epoch, + } = max_slot_in_storages_inclusive.get_epoch_info(epoch_schedule); + let mut partition_from_pubkey = + crate::bank::Bank::partition_from_pubkey(pubkey, slots_per_epoch_max_epoch); + // now, we have to find the root that is >= the slot where this pubkey's rent would have been collected + let first_slot_in_max_epoch = + max_slot_in_storages_inclusive.slot - partition_index_from_max_slot; + let mut expected_rent_collection_slot_max_epoch = + first_slot_in_max_epoch + partition_from_pubkey; + let calculated_from_index_expected_rent_collection_slot_max_epoch = + expected_rent_collection_slot_max_epoch; + if expected_rent_collection_slot_max_epoch <= max_slot_in_storages_inclusive.slot { + // may need to find a valid root + if let Some(find) = + find_unskipped_slot(calculated_from_index_expected_rent_collection_slot_max_epoch) + { + // found a root that is >= expected_rent_collection_slot. + expected_rent_collection_slot_max_epoch = find; + } + } + let mut use_previous_epoch_rent_collector = false; + if expected_rent_collection_slot_max_epoch > max_slot_in_storages_inclusive.slot { + // max slot has not hit the slot in the max epoch where we would have collected rent yet, so the most recent rent-collected rewrite slot for this pubkey would be in the previous epoch + let previous_epoch = epoch_of_max_storage_slot.saturating_sub(1); + let slots_per_epoch_previous_epoch = epoch_schedule.get_slots_in_epoch(previous_epoch); + expected_rent_collection_slot_max_epoch = + if slots_per_epoch_previous_epoch == slots_per_epoch_max_epoch { + // partition index remains the same + calculated_from_index_expected_rent_collection_slot_max_epoch + .saturating_sub(slots_per_epoch_max_epoch) + } else { + // the newer epoch has a different # of slots, so the partition index will be different in the prior epoch + partition_from_pubkey = crate::bank::Bank::partition_from_pubkey( + pubkey, + slots_per_epoch_previous_epoch, + ); + first_slot_in_max_epoch + .saturating_sub(slots_per_epoch_previous_epoch) + .saturating_add(partition_from_pubkey) + }; + // since we are looking a different root, we have to call this again + if let Some(find) = find_unskipped_slot(expected_rent_collection_slot_max_epoch) { + // found a root (because we have a storage) that is >= expected_rent_collection_slot. + expected_rent_collection_slot_max_epoch = find; + } + + // since we have not hit the slot in the rent collector's epoch yet, we need to collect rent according to the previous epoch's rent collector. + use_previous_epoch_rent_collector = true; + } + + // the slot we're dealing with is where we expected the rent to be collected for this pubkey, so use what is in this slot + // however, there are cases, such as adjusting the clock, where we store the account IN the same slot, but we do so BEFORE we collect rent. We later store the account AGAIN for rewrite/rent collection. + // So, if storage_slot == expected_rent_collection_slot..., then we MAY have collected rent or may not have. So, it has to be > + // rent_epoch=0 is a special case + if storage_slot > expected_rent_collection_slot_max_epoch + || loaded_account.rent_epoch() == 0 + { + // no need to update hash + return None; + } + + let rent_collector_previous; + if use_previous_epoch_rent_collector { + // keep in mind the storage slot could be 0..inf epochs in the past + // we want to swap the rent collector for one whose epoch is the previous epoch + let mut rent_collector_temp = rent_collector.clone(); + rent_collector_temp.epoch = rent_collector.epoch.saturating_sub(1); // previous epoch + rent_collector_previous = Some(rent_collector_temp); + rent_collector = rent_collector_previous.as_ref().unwrap(); + } + + // ask the rent collector what rent should be collected. + // Rent collector knows the current epoch. + let rent_result = rent_collector.calculate_rent_result( + pubkey, + loaded_account, + filler_account_suffix, + // Skipping rewrites is not compatible with the below feature. + // We will not skip rewrites until the feature is activated. + false, // preserve_rent_epoch_for_rent_exempt_accounts + ); + let current_rent_epoch = loaded_account.rent_epoch(); + let new_rent_epoch = match rent_result { + RentResult::CollectRent { + new_rent_epoch: next_epoch, + rent_due, + } => { + if next_epoch > current_rent_epoch && rent_due != 0 { + // this is an account that would have had rent collected since this storage slot, so just use the hash we have since there must be a newer version of this account already in a newer slot + // It would be a waste of time to recalcluate a hash. + return None; + } + std::cmp::max(next_epoch, current_rent_epoch) + } + RentResult::LeaveAloneNoRent => { + // rent_epoch is not updated for this condition + // But, a rewrite WOULD HAVE occured at the expected slot. + // So, fall through with same rent_epoch, but we will have already calculated 'expected_rent_collection_slot_max_epoch' + current_rent_epoch + } + }; + + if expected_rent_collection_slot_max_epoch == storage_slot + && new_rent_epoch == loaded_account.rent_epoch() + { + // no rewrite would have occurred + return None; + } + + Some(Self { + partition_from_pubkey, + epoch_of_max_storage_slot, + partition_index_from_max_slot, + first_slot_in_max_epoch, + expected_rent_collection_slot_max_epoch, + rent_epoch: new_rent_epoch, + }) + } +} + +#[cfg(test)] +pub mod tests { + use { + super::*, + solana_sdk::{ + account::{AccountSharedData, WritableAccount}, + genesis_config::GenesisConfig, + }, + }; + + #[test] + fn test_expected_rent_collection() { + solana_logger::setup(); + let pubkey = Pubkey::new(&[5; 32]); + let owner = solana_sdk::pubkey::new_rand(); + let mut account = AccountSharedData::new(1, 0, &owner); + let max_slot_in_storages_inclusive = 0; + let epoch_schedule = EpochSchedule::default(); + let first_normal_slot = epoch_schedule.first_normal_slot; + let storage_slot = first_normal_slot; + let epoch = epoch_schedule.get_epoch(storage_slot); + assert_eq!( + (epoch, 0), + epoch_schedule.get_epoch_and_slot_index(storage_slot) + ); + let genesis_config = GenesisConfig::default(); + let mut rent_collector = RentCollector::new( + epoch, + epoch_schedule, + genesis_config.slots_per_year(), + genesis_config.rent, + ); + rent_collector.rent.lamports_per_byte_year = 0; // temporarily disable rent + let find_unskipped_slot = Some; + // slot in current epoch + let result = ExpectedRentCollection::new( + &pubkey, + &account, + storage_slot, + &epoch_schedule, + &rent_collector, + &SlotInfoInEpoch::new(max_slot_in_storages_inclusive, &epoch_schedule), + find_unskipped_slot, + None, + ); + assert!(result.is_none()); + + let slots_per_epoch = 432_000; + assert_eq!( + slots_per_epoch, + epoch_schedule.get_slots_in_epoch(epoch_schedule.get_epoch(storage_slot)) + ); + let partition_index_max_inclusive = slots_per_epoch - 1; + account.set_rent_epoch(rent_collector.epoch); + // several epochs ahead of now + // first slot of new epoch is max slot EXclusive + // so last slot of prior epoch is max slot INclusive + let max_slot_in_storages_inclusive = slots_per_epoch * 3 + first_normal_slot - 1; + rent_collector.epoch = epoch_schedule.get_epoch(max_slot_in_storages_inclusive); + let partition_from_pubkey = 8470; // function of 432k slots and 'pubkey' above + let first_slot_in_max_epoch = 1388256; + let expected_rent_collection_slot_max_epoch = + first_slot_in_max_epoch + partition_from_pubkey; + let result = ExpectedRentCollection::new( + &pubkey, + &account, + storage_slot, + &epoch_schedule, + &rent_collector, + &SlotInfoInEpoch::new(max_slot_in_storages_inclusive, &epoch_schedule), + find_unskipped_slot, + None, + ); + assert_eq!( + result, + Some(ExpectedRentCollection { + partition_from_pubkey, + epoch_of_max_storage_slot: rent_collector.epoch, + partition_index_from_max_slot: partition_index_max_inclusive, + first_slot_in_max_epoch, + expected_rent_collection_slot_max_epoch, + rent_epoch: rent_collector.epoch, + }) + ); + + // LeaveAloneNoRent + for leave_alone in [true, false] { + account.set_executable(leave_alone); + let result = ExpectedRentCollection::new( + &pubkey, + &account, + expected_rent_collection_slot_max_epoch, + &epoch_schedule, + &rent_collector, + &SlotInfoInEpoch::new(max_slot_in_storages_inclusive, &epoch_schedule), + find_unskipped_slot, + None, + ); + assert_eq!( + result, + (!leave_alone).then(|| ExpectedRentCollection { + partition_from_pubkey, + epoch_of_max_storage_slot: rent_collector.epoch, + partition_index_from_max_slot: partition_index_max_inclusive, + first_slot_in_max_epoch, + expected_rent_collection_slot_max_epoch, + rent_epoch: rent_collector.epoch, + }), + "leave_alone: {}", + leave_alone + ); + } + + // storage_slot > expected_rent_collection_slot_max_epoch + // if greater, we return None + for greater in [false, true] { + let result = ExpectedRentCollection::new( + &pubkey, + &account, + expected_rent_collection_slot_max_epoch + u64::from(greater), + &epoch_schedule, + &rent_collector, + &SlotInfoInEpoch::new(max_slot_in_storages_inclusive, &epoch_schedule), + find_unskipped_slot, + None, + ); + assert_eq!( + result, + (!greater).then(|| ExpectedRentCollection { + partition_from_pubkey, + epoch_of_max_storage_slot: rent_collector.epoch, + partition_index_from_max_slot: partition_index_max_inclusive, + first_slot_in_max_epoch, + expected_rent_collection_slot_max_epoch, + rent_epoch: rent_collector.epoch, + }) + ); + } + + // test rewrite would have occurred in previous epoch from max_slot_in_storages_inclusive's epoch + // the change is in 'rent_epoch' returned in 'expected' + for previous_epoch in [false, true] { + let result = ExpectedRentCollection::new( + &pubkey, + &account, + expected_rent_collection_slot_max_epoch, + &epoch_schedule, + &rent_collector, + &SlotInfoInEpoch::new( + max_slot_in_storages_inclusive + + if previous_epoch { slots_per_epoch } else { 0 }, + &epoch_schedule, + ), + find_unskipped_slot, + None, + ); + let epoch_delta = u64::from(previous_epoch); + let slot_delta = epoch_delta * slots_per_epoch; + assert_eq!( + result, + Some(ExpectedRentCollection { + partition_from_pubkey, + epoch_of_max_storage_slot: rent_collector.epoch + epoch_delta, + partition_index_from_max_slot: partition_index_max_inclusive, + first_slot_in_max_epoch: first_slot_in_max_epoch + slot_delta, + expected_rent_collection_slot_max_epoch: expected_rent_collection_slot_max_epoch + + slot_delta, + rent_epoch: rent_collector.epoch, + }), + "previous_epoch: {}", + previous_epoch, + ); + } + + // if account's rent_epoch is already > our rent epoch, rent was collected already + // if greater, we return None + let original_rent_epoch = account.rent_epoch(); + for already_collected in [true, false] { + // to consider: maybe if we already collected rent_epoch IN this slot and slot matches what we need, then we should return None here + account.set_rent_epoch(original_rent_epoch + u64::from(already_collected)); + let result = ExpectedRentCollection::new( + &pubkey, + &account, + expected_rent_collection_slot_max_epoch, + &epoch_schedule, + &rent_collector, + &SlotInfoInEpoch::new(max_slot_in_storages_inclusive, &epoch_schedule), + find_unskipped_slot, + None, + ); + assert_eq!( + result, + Some(ExpectedRentCollection { + partition_from_pubkey, + epoch_of_max_storage_slot: rent_collector.epoch, + partition_index_from_max_slot: partition_index_max_inclusive, + first_slot_in_max_epoch, + expected_rent_collection_slot_max_epoch, + rent_epoch: std::cmp::max(rent_collector.epoch, account.rent_epoch()), + }), + "rent_collector.epoch: {}, already_collected: {}", + rent_collector.epoch, + already_collected + ); + } + account.set_rent_epoch(original_rent_epoch); + + let storage_slot = max_slot_in_storages_inclusive - slots_per_epoch; + // check partition from pubkey code + for end_partition_index in [0, 1, 2, 100, slots_per_epoch - 2, slots_per_epoch - 1] { + // generate a pubkey range + let range = crate::bank::Bank::pubkey_range_from_partition(( + // start_index: + end_partition_index.saturating_sub(1), // this can end up at start=0, end=0 (this is a desired test case) + // end_index: + end_partition_index, + epoch_schedule.get_slots_in_epoch(rent_collector.epoch), + )); + // use both start and end from INclusive range separately + for pubkey in [&range.start(), &range.end()] { + let result = ExpectedRentCollection::new( + pubkey, + &account, + storage_slot, + &epoch_schedule, + &rent_collector, + &SlotInfoInEpoch::new(max_slot_in_storages_inclusive, &epoch_schedule), + find_unskipped_slot, + None, + ); + assert_eq!( + result, + Some(ExpectedRentCollection { + partition_from_pubkey: end_partition_index, + epoch_of_max_storage_slot: rent_collector.epoch, + partition_index_from_max_slot: partition_index_max_inclusive, + first_slot_in_max_epoch, + expected_rent_collection_slot_max_epoch: first_slot_in_max_epoch + end_partition_index, + rent_epoch: rent_collector.epoch, + }), + "range: {:?}, pubkey: {:?}, end_partition_index: {}, max_slot_in_storages_inclusive: {}", + range, + pubkey, + end_partition_index, + max_slot_in_storages_inclusive, + ); + } + } + + // check max_slot_in_storages_inclusive related code + // so sweep through max_slot_in_storages_inclusive values within an epoch + let first_slot_in_max_epoch = first_normal_slot + slots_per_epoch; + rent_collector.epoch = epoch_schedule.get_epoch(first_slot_in_max_epoch); + // an epoch in the past so we always collect rent + let storage_slot = first_normal_slot; + for partition_index in [ + 0, + 1, + 2, + partition_from_pubkey - 1, + partition_from_pubkey, + partition_from_pubkey + 1, + 100, + slots_per_epoch - 2, + slots_per_epoch - 1, + ] { + // partition_index=0 means first slot of second normal epoch + // second normal epoch because we want to deal with accounts stored in the first normal epoch + // + 1 because of exclusive + let max_slot_in_storages_inclusive = first_slot_in_max_epoch + partition_index; + let result = ExpectedRentCollection::new( + &pubkey, + &account, + storage_slot, + &epoch_schedule, + &rent_collector, + &SlotInfoInEpoch::new(max_slot_in_storages_inclusive, &epoch_schedule), + find_unskipped_slot, + None, + ); + let partition_index_passed_pubkey = partition_from_pubkey <= partition_index; + let expected_rent_epoch = + rent_collector.epoch - u64::from(!partition_index_passed_pubkey); + let expected_rent_collection_slot_max_epoch = first_slot_in_max_epoch + + partition_from_pubkey + - if partition_index_passed_pubkey { + 0 + } else { + slots_per_epoch + }; + + assert_eq!( + result, + Some(ExpectedRentCollection { + partition_from_pubkey, + epoch_of_max_storage_slot: rent_collector.epoch, + partition_index_from_max_slot: partition_index, + first_slot_in_max_epoch, + expected_rent_collection_slot_max_epoch, + rent_epoch: expected_rent_epoch, + }), + "partition_index: {}, max_slot_in_storages_inclusive: {}, storage_slot: {}, first_normal_slot: {}", + partition_index, + max_slot_in_storages_inclusive, + storage_slot, + first_normal_slot, + ); + } + + // test account.rent_epoch = 0 + let first_slot_in_max_epoch = 1388256; + for account_rent_epoch in [0, epoch] { + account.set_rent_epoch(account_rent_epoch); + let result = ExpectedRentCollection::new( + &pubkey, + &account, + storage_slot, + &epoch_schedule, + &rent_collector, + &SlotInfoInEpoch::new(max_slot_in_storages_inclusive, &epoch_schedule), + find_unskipped_slot, + None, + ); + assert_eq!( + result, + (account_rent_epoch != 0).then(|| ExpectedRentCollection { + partition_from_pubkey, + epoch_of_max_storage_slot: rent_collector.epoch + 1, + partition_index_from_max_slot: partition_index_max_inclusive, + first_slot_in_max_epoch, + expected_rent_collection_slot_max_epoch, + rent_epoch: rent_collector.epoch, + }) + ); + } + + // test find_unskipped_slot + for find_unskipped_slot in [ + |_| None, + Some, // identity + |slot| Some(slot + 1), // increment + |_| Some(Slot::MAX), // max + ] { + let test_value = 10; + let find_result = find_unskipped_slot(test_value); + let increment = find_result.unwrap_or_default() == test_value + 1; + let result = ExpectedRentCollection::new( + &pubkey, + &account, + storage_slot, + &epoch_schedule, + &rent_collector, + &SlotInfoInEpoch::new(max_slot_in_storages_inclusive, &epoch_schedule), + find_unskipped_slot, + None, + ); + // the test case of max is hacky + let prior_epoch = (partition_from_pubkey > partition_index_max_inclusive) + || find_unskipped_slot(0) == Some(Slot::MAX); + assert_eq!( + result, + Some(ExpectedRentCollection { + partition_from_pubkey, + epoch_of_max_storage_slot: rent_collector.epoch + 1, + partition_index_from_max_slot: partition_index_max_inclusive, + first_slot_in_max_epoch, + expected_rent_collection_slot_max_epoch: if find_result.unwrap_or_default() + == Slot::MAX + { + Slot::MAX + } else if increment { + expected_rent_collection_slot_max_epoch + 1 + } else { + expected_rent_collection_slot_max_epoch + }, + rent_epoch: rent_collector.epoch - u64::from(prior_epoch), + }), + "find_unskipped_slot(0): {:?}, rent_collector.epoch: {}, prior_epoch: {}", + find_unskipped_slot(0), + rent_collector.epoch, + prior_epoch, + ); + } + } + + #[test] + fn test_simplified_rent_collection() { + solana_logger::setup(); + let pubkey = Pubkey::new(&[5; 32]); + let owner = solana_sdk::pubkey::new_rand(); + let mut account = AccountSharedData::new(1, 0, &owner); + let mut epoch_schedule = EpochSchedule { + first_normal_epoch: 0, + ..EpochSchedule::default() + }; + epoch_schedule.first_normal_slot = 0; + let first_normal_slot = epoch_schedule.first_normal_slot; + let slots_per_epoch = 432_000; + let partition_from_pubkey = 8470; // function of 432k slots and 'pubkey' above + // start in epoch=1 because of issues at rent_epoch=1 + let storage_slot = first_normal_slot + partition_from_pubkey + slots_per_epoch; + let epoch = epoch_schedule.get_epoch(storage_slot); + assert_eq!( + (epoch, partition_from_pubkey), + epoch_schedule.get_epoch_and_slot_index(storage_slot) + ); + let genesis_config = GenesisConfig::default(); + let mut rent_collector = RentCollector::new( + epoch, + epoch_schedule, + genesis_config.slots_per_year(), + genesis_config.rent, + ); + rent_collector.rent.lamports_per_byte_year = 0; // temporarily disable rent + + assert_eq!( + slots_per_epoch, + epoch_schedule.get_slots_in_epoch(epoch_schedule.get_epoch(storage_slot)) + ); + account.set_rent_epoch(1); // has to be not 0 + + /* + test this: + pubkey_partition_index: 8470 + storage_slot: 8470 + account.rent_epoch: 1 (has to be not 0) + + max_slot: 8469 + 432k * 1 + max_slot: 8470 + 432k * 1 + max_slot: 8471 + 432k * 1 + max_slot: 8472 + 432k * 1 + max_slot: 8469 + 432k * 2 + max_slot: 8470 + 432k * 2 + max_slot: 8471 + 432k * 2 + max_slot: 8472 + 432k * 2 + max_slot: 8469 + 432k * 3 + max_slot: 8470 + 432k * 3 + max_slot: 8471 + 432k * 3 + max_slot: 8472 + 432k * 3 + + one run without skipping slot 8470, once WITH skipping slot 8470 + */ + + for skipped_slot in [false, true] { + let find_unskipped_slot = if skipped_slot { + |slot| Some(slot + 1) + } else { + Some + }; + + // starting at epoch = 0 has issues because of rent_epoch=0 special casing + for epoch in 1..4 { + for partition_index_from_max_slot in + partition_from_pubkey - 1..=partition_from_pubkey + 2 + { + let max_slot_in_storages_inclusive = + slots_per_epoch * epoch + first_normal_slot + partition_index_from_max_slot; + if storage_slot > max_slot_in_storages_inclusive { + continue; // illegal combination + } + rent_collector.epoch = epoch_schedule.get_epoch(max_slot_in_storages_inclusive); + let first_slot_in_max_epoch = max_slot_in_storages_inclusive + - max_slot_in_storages_inclusive % slots_per_epoch; + let skip_offset = u64::from(skipped_slot); + let mut expected_rent_collection_slot_max_epoch = + first_slot_in_max_epoch + partition_from_pubkey + skip_offset; + let hit_this_epoch = + expected_rent_collection_slot_max_epoch <= max_slot_in_storages_inclusive; + if !hit_this_epoch { + expected_rent_collection_slot_max_epoch -= slots_per_epoch; + } + + assert_eq!( + (epoch, partition_index_from_max_slot), + epoch_schedule.get_epoch_and_slot_index(max_slot_in_storages_inclusive) + ); + assert_eq!( + (epoch, 0), + epoch_schedule.get_epoch_and_slot_index(first_slot_in_max_epoch) + ); + account.set_rent_epoch(1); + let result = ExpectedRentCollection::new( + &pubkey, + &account, + storage_slot, + &epoch_schedule, + &rent_collector, + &SlotInfoInEpoch::new(max_slot_in_storages_inclusive, &epoch_schedule), + find_unskipped_slot, + None, + ); + let some_expected = if epoch == 1 { + skipped_slot && partition_index_from_max_slot > partition_from_pubkey + } else if epoch == 2 { + partition_index_from_max_slot >= partition_from_pubkey - skip_offset + } else { + true + }; + assert_eq!( + result, + some_expected.then(|| ExpectedRentCollection { + partition_from_pubkey, + epoch_of_max_storage_slot: rent_collector.epoch, + partition_index_from_max_slot, + first_slot_in_max_epoch, + expected_rent_collection_slot_max_epoch, + rent_epoch: rent_collector.epoch - u64::from(!hit_this_epoch), + }), + "partition_index_from_max_slot: {}, epoch: {}, hit_this_epoch: {}, skipped_slot: {}", + partition_index_from_max_slot, + epoch, + hit_this_epoch, + skipped_slot, + ); + + // test RentResult::LeaveAloneNoRent + { + let result = ExpectedRentCollection::new( + &pubkey, + &account, + storage_slot, + &epoch_schedule, + &rent_collector, + &SlotInfoInEpoch::new(max_slot_in_storages_inclusive, &epoch_schedule), + find_unskipped_slot, + // treat this pubkey like a filler account so we get a 'LeaveAloneNoRent' result + Some(&pubkey), + ); + assert_eq!( + result, + some_expected.then(|| ExpectedRentCollection { + partition_from_pubkey, + epoch_of_max_storage_slot: rent_collector.epoch, + partition_index_from_max_slot, + first_slot_in_max_epoch, + expected_rent_collection_slot_max_epoch, + // this will not be adjusted for 'LeaveAloneNoRent' + rent_epoch: account.rent_epoch(), + }), + "partition_index_from_max_slot: {}, epoch: {}", + partition_index_from_max_slot, + epoch, + ); + } + + // test maybe_rehash_skipped_rewrite + let hash = AccountsDb::hash_account(storage_slot, &account, &pubkey); + let maybe_rehash = ExpectedRentCollection::maybe_rehash_skipped_rewrite( + &account, + &hash, + &pubkey, + storage_slot, + &epoch_schedule, + &rent_collector, + &HashStats::default(), + &SlotInfoInEpoch::new(max_slot_in_storages_inclusive, &epoch_schedule), + find_unskipped_slot, + None, + ); + assert_eq!( + maybe_rehash, + some_expected.then(|| { + AccountsDb::hash_account_with_rent_epoch( + result + .as_ref() + .unwrap() + .expected_rent_collection_slot_max_epoch, + &account, + &pubkey, + result.as_ref().unwrap().rent_epoch, + ) + }) + ); + } + } + } + } + + #[test] + fn test_get_corrected_rent_epoch_on_load() { + solana_logger::setup(); + let pubkey = Pubkey::new(&[5; 32]); + let owner = solana_sdk::pubkey::new_rand(); + let mut account = AccountSharedData::new(1, 0, &owner); + let mut epoch_schedule = EpochSchedule { + first_normal_epoch: 0, + ..EpochSchedule::default() + }; + epoch_schedule.first_normal_slot = 0; + let first_normal_slot = epoch_schedule.first_normal_slot; + let slots_per_epoch = 432_000; + let partition_from_pubkey = 8470; // function of 432k slots and 'pubkey' above + // start in epoch=1 because of issues at rent_epoch=1 + let storage_slot = first_normal_slot + partition_from_pubkey + slots_per_epoch; + let epoch = epoch_schedule.get_epoch(storage_slot); + assert_eq!( + (epoch, partition_from_pubkey), + epoch_schedule.get_epoch_and_slot_index(storage_slot) + ); + let genesis_config = GenesisConfig::default(); + let mut rent_collector = RentCollector::new( + epoch, + epoch_schedule, + genesis_config.slots_per_year(), + genesis_config.rent, + ); + rent_collector.rent.lamports_per_byte_year = 0; // temporarily disable rent + + assert_eq!( + slots_per_epoch, + epoch_schedule.get_slots_in_epoch(epoch_schedule.get_epoch(storage_slot)) + ); + account.set_rent_epoch(1); // has to be not 0 + + /* + test this: + pubkey_partition_index: 8470 + storage_slot: 8470 + account.rent_epoch: 1 (has to be not 0) + + max_slot: 8469 + 432k * 1 + max_slot: 8470 + 432k * 1 + max_slot: 8471 + 432k * 1 + max_slot: 8472 + 432k * 1 + max_slot: 8469 + 432k * 2 + max_slot: 8470 + 432k * 2 + max_slot: 8471 + 432k * 2 + max_slot: 8472 + 432k * 2 + max_slot: 8469 + 432k * 3 + max_slot: 8470 + 432k * 3 + max_slot: 8471 + 432k * 3 + max_slot: 8472 + 432k * 3 + + one run without skipping slot 8470, once WITH skipping slot 8470 + */ + + for new_small in [false, true] { + for rewrite_already in [false, true] { + // starting at epoch = 0 has issues because of rent_epoch=0 special casing + for epoch in 1..4 { + for partition_index_bank_slot in + partition_from_pubkey - 1..=partition_from_pubkey + 2 + { + let bank_slot = + slots_per_epoch * epoch + first_normal_slot + partition_index_bank_slot; + if storage_slot > bank_slot { + continue; // illegal combination + } + rent_collector.epoch = epoch_schedule.get_epoch(bank_slot); + let first_slot_in_max_epoch = bank_slot - bank_slot % slots_per_epoch; + + assert_eq!( + (epoch, partition_index_bank_slot), + epoch_schedule.get_epoch_and_slot_index(bank_slot) + ); + assert_eq!( + (epoch, 0), + epoch_schedule.get_epoch_and_slot_index(first_slot_in_max_epoch) + ); + account.set_rent_epoch(1); + let rewrites = Rewrites::default(); + if rewrite_already { + if partition_index_bank_slot != partition_from_pubkey { + // this is an invalid test occurrence. + // we wouldn't have inserted pubkey into 'rewrite_already' for this slot if the current partition index wasn't at the pubkey's partition idnex yet. + continue; + } + + rewrites.write().unwrap().insert(pubkey, Hash::default()); + } + let expected_new_rent_epoch = + if partition_index_bank_slot > partition_from_pubkey { + if epoch > account.rent_epoch() { + Some(rent_collector.epoch) + } else { + None + } + } else if partition_index_bank_slot == partition_from_pubkey + && rewrite_already + { + let expected_rent_epoch = rent_collector.epoch; + if expected_rent_epoch == account.rent_epoch() { + None + } else { + Some(expected_rent_epoch) + } + } else if partition_index_bank_slot <= partition_from_pubkey + && epoch > account.rent_epoch() + { + let expected_rent_epoch = rent_collector.epoch.saturating_sub(1); + if expected_rent_epoch == account.rent_epoch() { + None + } else { + Some(expected_rent_epoch) + } + } else { + None + }; + let get_slot_info = |slot| { + if new_small { + SlotInfoInEpoch::new_small(slot) + } else { + SlotInfoInEpoch::new(slot, &epoch_schedule) + } + }; + let new_rent_epoch = + ExpectedRentCollection::get_corrected_rent_epoch_on_load( + &account, + &get_slot_info(storage_slot), + &get_slot_info(bank_slot), + &epoch_schedule, + &rent_collector, + &pubkey, + &rewrites, + ); + assert_eq!(new_rent_epoch, expected_new_rent_epoch); + } + } + } + } + } +} diff --git a/runtime/src/lib.rs b/runtime/src/lib.rs index 45d338bfe58127..16a3f78e6d8163 100644 --- a/runtime/src/lib.rs +++ b/runtime/src/lib.rs @@ -36,6 +36,7 @@ pub mod cost_model; pub mod cost_tracker; pub mod epoch_stakes; pub mod execute_cost_table; +mod expected_rent_collection; pub mod genesis_utils; pub mod hardened_unpack; pub mod in_mem_accounts_index; diff --git a/sdk/src/feature_set.rs b/sdk/src/feature_set.rs index 7cb1e119a2a8f8..d9f661027be11e 100644 --- a/sdk/src/feature_set.rs +++ b/sdk/src/feature_set.rs @@ -496,6 +496,10 @@ pub mod vote_state_update_root_fix { solana_sdk::declare_id!("G74BkWBzmsByZ1kxHy44H3wjwp5hp7JbrGRuDpco22tY"); } +pub mod on_load_preserve_rent_epoch_for_rent_exempt_accounts { + solana_sdk::declare_id!("CpkdQmspsaZZ8FVAouQTtTWZkc8eeQ7V3uj7dWz543rZ"); +} + pub mod return_none_for_zero_lamport_accounts { solana_sdk::declare_id!("7K5HFrS1WAq6ND7RQbShXZXbtAookyTfaDQPTJNuZpze"); } @@ -615,6 +619,7 @@ lazy_static! { (enable_bpf_loader_extend_program_ix::id(), "enable bpf upgradeable loader ExtendProgram instruction #25234"), (enable_early_verification_of_account_modifications::id(), "enable early verification of account modifications #25899"), (prevent_crediting_accounts_that_end_rent_paying::id(), "prevent crediting rent paying accounts #26606"), + (on_load_preserve_rent_epoch_for_rent_exempt_accounts::id(), "on bank load account, do not try to fix up rent_epoch #28541"), (cap_bpf_program_instruction_accounts::id(), "enforce max number of accounts per bpf program instruction #26628"), (loosen_cpi_size_restriction::id(), "loosen cpi size restrictions #26641"), (use_default_units_in_fee_calculation::id(), "use default units per instruction in fee calculation #26785"), From 4c1eadb9a21670d847e4cc96d9b46a308affd39d Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Mon, 24 Oct 2022 22:05:59 +0000 Subject: [PATCH 209/465] [docs] corrected use of confirmTransaction in examples (backport #28547) (#28569) [docs] corrected use of confirmTransaction in examples (#28547) fix: updated method calls (cherry picked from commit 2090ad0c2ec8356488789cc0f9879367652ddb38) Co-authored-by: Nick Frostbutter <75431177+nickfrosty@users.noreply.github.com> --- docs/src/developing/clients/javascript-api.md | 4 ++-- docs/src/developing/clients/javascript-reference.md | 13 +++++++------ docs/src/integrations/retrying-transactions.md | 2 +- 3 files changed, 10 insertions(+), 9 deletions(-) diff --git a/docs/src/developing/clients/javascript-api.md b/docs/src/developing/clients/javascript-api.md index 9fa1e06bd4a6ed..862905b39bc71d 100644 --- a/docs/src/developing/clients/javascript-api.md +++ b/docs/src/developing/clients/javascript-api.md @@ -184,7 +184,7 @@ let airdropSignature = await connection.requestAirdrop( web3.LAMPORTS_PER_SOL, ); -await connection.confirmTransaction(airdropSignature); +await connection.confirmTransaction({ signature: airdropSignature }); ``` First, we set up the account Keypair and connection so that we have an account to make allocate on the testnet. We also create a payer Keypair and airdrop some sol so we can pay for the allocate transaction. @@ -309,7 +309,7 @@ let airdropSignature = await connection.requestAirdrop( web3.LAMPORTS_PER_SOL, ); -await connection.confirmTransaction(airdropSignature); +await connection.confirmTransaction({ signature: airdropSignature }); let allocateTransaction = new web3.Transaction({ feePayer: payer.publicKey, diff --git a/docs/src/developing/clients/javascript-reference.md b/docs/src/developing/clients/javascript-reference.md index 60cde2d553b672..91b346bee64342 100644 --- a/docs/src/developing/clients/javascript-reference.md +++ b/docs/src/developing/clients/javascript-reference.md @@ -76,7 +76,7 @@ let airdropSignature = await connection.requestAirdrop( web3.LAMPORTS_PER_SOL, ); -await connection.confirmTransaction(airdropSignature); +await connection.confirmTransaction({ signature: airdropSignature }); let toAccount = web3.Keypair.generate(); @@ -253,7 +253,7 @@ let airdropSignature = await connection.requestAirdrop( web3.LAMPORTS_PER_SOL, ); -await connection.confirmTransaction(airdropSignature); +await connection.confirmTransaction({ signature: airdropSignature }); // Allocate Account Data let allocatedAccount = web3.Keypair.generate(); @@ -365,7 +365,8 @@ let airdropSignature = await connection.requestAirdrop( fromPublicKey.publicKey, web3.LAMPORTS_PER_SOL, ); -await connection.confirmTransaction(airdropSignature); + +await connection.confirmTransaction({ signature: airdropSignature }); // Sign Message with Ethereum Key let plaintext = Buffer.from("string address"); @@ -412,7 +413,7 @@ let airdropSignature = await connection.requestAirdrop( web3.LAMPORTS_PER_SOL, ); -await connection.confirmTransaction(airdropSignature); +await connection.confirmTransaction({ signature: airdropSignature }); let type = web3.SYSTEM_INSTRUCTION_LAYOUTS.Transfer; let data = Buffer.alloc(type.layout.span); @@ -532,7 +533,7 @@ let airdropSignature = await connection.requestAirdrop( web3.LAMPORTS_PER_SOL, ); -await connection.confirmTransaction(airdropSignature); +await connection.confirmTransaction({ signature: airdropSignature }); // Get Minimum amount for rent exemption let minimumAmount = await connection.getMinimumBalanceForRentExemption( @@ -681,7 +682,7 @@ let airdropSignature = await connection.requestAirdrop( fromPublicKey.publicKey, web3.LAMPORTS_PER_SOL, ); -await connection.confirmTransaction(airdropSignature); +await connection.confirmTransaction({ signature: airdropSignature }); // Create Account let stakeAccount = web3.Keypair.generate(); diff --git a/docs/src/integrations/retrying-transactions.md b/docs/src/integrations/retrying-transactions.md index f3bf9f4f770d8f..66c59c205cdaf4 100644 --- a/docs/src/integrations/retrying-transactions.md +++ b/docs/src/integrations/retrying-transactions.md @@ -255,7 +255,7 @@ const sleep = async (ms: number) => { LAMPORTS_PER_SOL, ); - await connection.confirmTransaction(airdropSignature); + await connection.confirmTransaction({ signature: airdropSignature }); const blockhashResponse = await connection.getLatestBlockhashAndContext(); const lastValidBlockHeight = blockhashResponse.context.slot + 150; From 2457c71e3ccf9c9c9c9e7a785a07b7aabe6651d7 Mon Sep 17 00:00:00 2001 From: behzad nouri Date: Thu, 20 Oct 2022 16:37:00 -0400 Subject: [PATCH 210/465] pings peers before sending push messages --- gossip/src/cluster_info.rs | 72 +++++++---- gossip/src/crds_gossip.rs | 21 +++- gossip/src/crds_gossip_push.rs | 214 +++++++++++++++++++++------------ gossip/tests/crds_gossip.rs | 33 +++-- 4 files changed, 228 insertions(+), 112 deletions(-) diff --git a/gossip/src/cluster_info.rs b/gossip/src/cluster_info.rs index c8180b5864e872..37dcdc58634896 100644 --- a/gossip/src/cluster_info.rs +++ b/gossip/src/cluster_info.rs @@ -427,7 +427,7 @@ impl ClusterInfo { socket_addr_space, }; me.insert_self(); - me.push_self(&HashMap::new(), None); + me.push_self(); me } @@ -466,11 +466,7 @@ impl ClusterInfo { &self.socket_addr_space } - fn push_self( - &self, - stakes: &HashMap, - gossip_validators: Option<&HashSet>, - ) { + fn push_self(&self) { let now = timestamp(); self.my_contact_info.write().unwrap().wallclock = now; let entries: Vec<_> = vec![ @@ -484,18 +480,45 @@ impl ClusterInfo { .lock() .unwrap() .extend(entries); - let ContactInfo { - id: self_pubkey, - shred_version, - .. - } = *self.my_contact_info.read().unwrap(); + } + + fn refresh_push_active_set( + &self, + recycler: &PacketBatchRecycler, + stakes: &HashMap, + gossip_validators: Option<&HashSet>, + sender: &PacketBatchSender, + ) { + let ContactInfo { shred_version, .. } = *self.my_contact_info.read().unwrap(); + let self_keypair: Arc = self.keypair().clone(); + let mut pings = Vec::new(); self.gossip.refresh_push_active_set( - &self_pubkey, + &self_keypair, shred_version, stakes, gossip_validators, + &self.ping_cache, + &mut pings, &self.socket_addr_space, ); + self.stats + .new_pull_requests_pings_count + .add_relaxed(pings.len() as u64); + let pings: Vec<_> = pings + .into_iter() + .map(|(addr, ping)| (addr, Protocol::PingMessage(ping))) + .collect(); + if !pings.is_empty() { + self.stats + .packets_sent_gossip_requests_count + .add_relaxed(pings.len() as u64); + let packet_batch = PacketBatch::new_unpinned_with_recycler_data_and_dests( + recycler.clone(), + "refresh_push_active_set", + &pings, + ); + let _ = sender.send(packet_batch); + } } // TODO kill insert_info, only used by tests @@ -645,7 +668,7 @@ impl ClusterInfo { CrdsData::Version(Version::new(self.id())), &self.keypair(), )); - self.push_self(&HashMap::new(), None); + self.push_self(); } pub fn lookup_contact_info(&self, id: &Pubkey, map: F) -> Option @@ -1691,7 +1714,7 @@ impl ClusterInfo { Builder::new() .name("solGossip".to_string()) .spawn(move || { - let mut last_push = timestamp(); + let mut last_push = 0; let mut last_contact_info_trace = timestamp(); let mut last_contact_info_save = timestamp(); let mut entrypoints_processed = false; @@ -1754,7 +1777,13 @@ impl ClusterInfo { //TODO: possibly tune this parameter //we saw a deadlock passing an self.read().unwrap().timeout into sleep if start - last_push > CRDS_GOSSIP_PULL_CRDS_TIMEOUT_MS / 2 { - self.push_self(&stakes, gossip_validators.as_ref()); + self.push_self(); + self.refresh_push_active_set( + &recycler, + &stakes, + gossip_validators.as_ref(), + &sender, + ); last_push = timestamp(); } let elapsed = timestamp() - start; @@ -3552,10 +3581,12 @@ RPC Enabled Nodes: 1"#; )); cluster_info.insert_info(spy); cluster_info.gossip.refresh_push_active_set( - &cluster_info.id(), + &cluster_info.keypair(), cluster_info.my_shred_version(), &HashMap::new(), // stakes None, // gossip validators + &cluster_info.ping_cache, + &mut Vec::new(), // pings &SocketAddrSpace::Unspecified, ); let reqs = cluster_info.generate_new_gossip_requests( @@ -3683,10 +3714,12 @@ RPC Enabled Nodes: 1"#; .mock_pong(peer.id, peer.gossip, Instant::now()); cluster_info.insert_info(peer); cluster_info.gossip.refresh_push_active_set( - &cluster_info.id(), + &cluster_info.keypair(), cluster_info.my_shred_version(), &HashMap::new(), // stakes None, // gossip validators + &cluster_info.ping_cache, + &mut Vec::new(), // pings &SocketAddrSpace::Unspecified, ); //check that all types of gossip messages are signed correctly @@ -3985,10 +4018,7 @@ RPC Enabled Nodes: 1"#; let mut node = cluster_info.my_contact_info.write().unwrap(); node.shred_version = 42; } - cluster_info.push_self( - &HashMap::default(), // stakes - None, // gossip validators - ); + cluster_info.push_self(); cluster_info.flush_push_queue(); // Should now include both epoch slots. let slots = cluster_info.get_epoch_slots(&mut Cursor::default()); diff --git a/gossip/src/crds_gossip.rs b/gossip/src/crds_gossip.rs index afb31c8de1fa59..12764159d7dc49 100644 --- a/gossip/src/crds_gossip.rs +++ b/gossip/src/crds_gossip.rs @@ -184,10 +184,12 @@ impl CrdsGossip { /// Refresh the push active set. pub fn refresh_push_active_set( &self, - self_pubkey: &Pubkey, + self_keypair: &Keypair, self_shred_version: u16, stakes: &HashMap, gossip_validators: Option<&HashSet>, + ping_cache: &Mutex, + pings: &mut Vec<(SocketAddr, Ping)>, socket_addr_space: &SocketAddrSpace, ) { let network_size = self.crds.read().unwrap().num_nodes(); @@ -195,10 +197,12 @@ impl CrdsGossip { &self.crds, stakes, gossip_validators, - self_pubkey, + self_keypair, self_shred_version, network_size, CRDS_GOSSIP_NUM_ACTIVE, + ping_cache, + pings, socket_addr_space, ) } @@ -378,7 +382,8 @@ mod test { #[test] fn test_prune_errors() { let crds_gossip = CrdsGossip::default(); - let id = Pubkey::new(&[0; 32]); + let keypair = Keypair::new(); + let id = keypair.pubkey(); let ci = ContactInfo::new_localhost(&Pubkey::new(&[1; 32]), 0); let prune_pubkey = Pubkey::new(&[2; 32]); crds_gossip @@ -391,11 +396,19 @@ mod test { GossipRoute::LocalMessage, ) .unwrap(); + let ping_cache = PingCache::new( + Duration::from_secs(20 * 60), // ttl + Duration::from_secs(20 * 60) / 64, // rate_limit_delay + 128, // capacity + ); + let ping_cache = Mutex::new(ping_cache); crds_gossip.refresh_push_active_set( - &id, + &keypair, 0, // shred version &HashMap::new(), // stakes None, // gossip validators + &ping_cache, + &mut Vec::new(), // pings &SocketAddrSpace::Unspecified, ); let now = timestamp(); diff --git a/gossip/src/crds_gossip_push.rs b/gossip/src/crds_gossip_push.rs index 76356ab215bd02..8285ab36bc40ba 100644 --- a/gossip/src/crds_gossip_push.rs +++ b/gossip/src/crds_gossip_push.rs @@ -13,12 +13,13 @@ use { crate::{ - cluster_info::CRDS_UNIQUE_PUBKEY_CAPACITY, + cluster_info::{Ping, CRDS_UNIQUE_PUBKEY_CAPACITY}, contact_info::ContactInfo, crds::{Crds, Cursor, GossipRoute}, crds_gossip::{get_stake, get_weight}, crds_gossip_error::CrdsGossipError, crds_value::CrdsValue, + ping_pong::PingCache, weighted_shuffle::WeightedShuffle, }, bincode::serialized_size, @@ -27,17 +28,24 @@ use { lru::LruCache, rand::{seq::SliceRandom, Rng}, solana_bloom::bloom::{AtomicBloom, Bloom}, - solana_sdk::{packet::PACKET_DATA_SIZE, pubkey::Pubkey, timing::timestamp}, + solana_sdk::{ + packet::PACKET_DATA_SIZE, + pubkey::Pubkey, + signature::{Keypair, Signer}, + timing::timestamp, + }, solana_streamer::socket::SocketAddrSpace, std::{ cmp, collections::{HashMap, HashSet}, iter::repeat, + net::SocketAddr, ops::{DerefMut, RangeBounds}, sync::{ atomic::{AtomicUsize, Ordering}, Mutex, RwLock, }, + time::Instant, }, }; @@ -334,15 +342,18 @@ impl CrdsGossipPush { /// # Arguments /// /// * ratio - active_set.len()/ratio is the number of actives to rotate + #[allow(clippy::too_many_arguments)] pub(crate) fn refresh_push_active_set( &self, crds: &RwLock, stakes: &HashMap, gossip_validators: Option<&HashSet>, - self_id: &Pubkey, + self_keypair: &Keypair, self_shred_version: u16, network_size: usize, ratio: usize, + ping_cache: &Mutex, + pings: &mut Vec<(SocketAddr, Ping)>, socket_addr_space: &SocketAddrSpace, ) { const BLOOM_FALSE_RATE: f64 = 0.1; @@ -353,17 +364,31 @@ impl CrdsGossipPush { const MIN_NUM_BLOOM_ITEMS: usize = CRDS_UNIQUE_PUBKEY_CAPACITY; let mut rng = rand::thread_rng(); let mut new_items = HashMap::new(); + // Gossip peers and respective sampling weights. + let peers = self.push_options( + crds, + &self_keypair.pubkey(), + self_shred_version, + stakes, + gossip_validators, + socket_addr_space, + ); + // Check for nodes which have responded to ping messages. let (weights, peers): (Vec<_>, Vec<_>) = { - self.push_options( - crds, - self_id, - self_shred_version, - stakes, - gossip_validators, - socket_addr_space, - ) - .into_iter() - .unzip() + let mut ping_cache = ping_cache.lock().unwrap(); + let mut pingf = move || Ping::new_rand(&mut rng, self_keypair).ok(); + let now = Instant::now(); + peers + .into_iter() + .filter_map(|(weight, peer)| { + let node = (peer.id, peer.gossip); + let (check, ping) = ping_cache.check(now, node, &mut pingf); + if let Some(ping) = ping { + pings.push((peer.gossip, ping)); + } + check.then(|| (weight, peer.id)) + }) + .unzip() }; if peers.is_empty() { return; @@ -406,7 +431,7 @@ impl CrdsGossipPush { stakes: &HashMap, gossip_validators: Option<&HashSet>, socket_addr_space: &SocketAddrSpace, - ) -> Vec<(/*weight:*/ u64, /*node:*/ Pubkey)> { + ) -> Vec<(/*weight:*/ u64, /*node:*/ ContactInfo)> { let now = timestamp(); let mut rng = rand::thread_rng(); let max_weight = u16::MAX as f32 - 1.0; @@ -443,7 +468,7 @@ impl CrdsGossipPush { let weight = get_weight(max_weight, since, stake); // Weights are bounded by max_weight defined above. // So this type-cast should be safe. - ((weight * 100.0) as u64, info.id) + ((weight * 100.0) as u64, info.clone()) }) .collect() } @@ -489,12 +514,21 @@ impl CrdsGossipPush { } #[cfg(test)] -mod test { +mod tests { use { super::*, crate::{contact_info::ContactInfo, crds_value::CrdsData}, + std::time::Duration, }; + fn new_ping_cache() -> PingCache { + PingCache::new( + Duration::from_secs(20 * 60), // ttl + Duration::from_secs(20 * 60) / 64, // rate_limit_delay + 128, // capacity + ) + } + #[test] fn test_prune() { let crds = RwLock::::default(); @@ -660,33 +694,39 @@ mod test { let now = timestamp(); let mut crds = Crds::default(); let push = CrdsGossipPush::default(); - let value1 = CrdsValue::new_unsigned(CrdsData::ContactInfo(ContactInfo::new_localhost( - &solana_sdk::pubkey::new_rand(), - 0, - ))); + let mut ping_cache = new_ping_cache(); + let value1 = ContactInfo::new_localhost(&solana_sdk::pubkey::new_rand(), 0); + ping_cache.mock_pong(value1.id, value1.gossip, Instant::now()); + let value1 = CrdsValue::new_unsigned(CrdsData::ContactInfo(value1)); assert_eq!( crds.insert(value1.clone(), now, GossipRoute::LocalMessage), Ok(()) ); + let keypair = Keypair::new(); let crds = RwLock::new(crds); + let ping_cache = Mutex::new(ping_cache); push.refresh_push_active_set( &crds, - &HashMap::new(), - None, - &Pubkey::default(), - 0, - 1, - 1, + &HashMap::new(), // stakes + None, // gossip_validators + &keypair, + 0, // self_shred_version + 1, // network_sizer + 1, // ratio + &ping_cache, + &mut Vec::new(), // pings &SocketAddrSpace::Unspecified, ); let active_set = push.active_set.read().unwrap(); assert!(active_set.get(&value1.label().pubkey()).is_some()); - let value2 = CrdsValue::new_unsigned(CrdsData::ContactInfo(ContactInfo::new_localhost( - &solana_sdk::pubkey::new_rand(), - 0, - ))); + let value2 = ContactInfo::new_localhost(&solana_sdk::pubkey::new_rand(), 0); + ping_cache + .lock() + .unwrap() + .mock_pong(value2.id, value2.gossip, Instant::now()); + let value2 = CrdsValue::new_unsigned(CrdsData::ContactInfo(value2)); assert!(active_set.get(&value2.label().pubkey()).is_none()); drop(active_set); assert_eq!( @@ -698,12 +738,14 @@ mod test { for _ in 0..30 { push.refresh_push_active_set( &crds, - &HashMap::new(), - None, - &Pubkey::default(), - 0, - 1, - 1, + &HashMap::new(), // stakes + None, // gossip_validators + &keypair, + 0, // self_shred_version + 1, // network_size + 1, // ratio + &ping_cache, + &mut Vec::new(), // pings &SocketAddrSpace::Unspecified, ); let active_set = push.active_set.read().unwrap(); @@ -716,9 +758,12 @@ mod test { assert!(active_set.get(&value2.label().pubkey()).is_some()); } for _ in 0..push.num_active { - let value2 = CrdsValue::new_unsigned(CrdsData::ContactInfo( - ContactInfo::new_localhost(&solana_sdk::pubkey::new_rand(), 0), - )); + let value2 = ContactInfo::new_localhost(&solana_sdk::pubkey::new_rand(), 0); + ping_cache + .lock() + .unwrap() + .mock_pong(value2.id, value2.gossip, Instant::now()); + let value2 = CrdsValue::new_unsigned(CrdsData::ContactInfo(value2)); assert_eq!( crds.write() .unwrap() @@ -726,14 +771,17 @@ mod test { Ok(()) ); } + push.refresh_push_active_set( &crds, - &HashMap::new(), - None, - &Pubkey::default(), - 0, - 1, - 1, + &HashMap::new(), // stakes + None, // gossip_validators + &keypair, + 0, // self_shred_version + 1, // network_size + 1, // ratio + &ping_cache, + &mut Vec::new(), // pings &SocketAddrSpace::Unspecified, ); assert_eq!(push.active_set.read().unwrap().len(), push.num_active); @@ -768,7 +816,7 @@ mod test { assert!(!options.is_empty()); options.sort_by(|(weight_l, _), (weight_r, _)| weight_r.partial_cmp(weight_l).unwrap()); // check that the highest stake holder is also the heaviest weighted. - assert_eq!(stakes[&options[0].1], 10_000_u64); + assert_eq!(stakes[&options[0].1.id], 10_000_u64); } #[test] @@ -826,7 +874,7 @@ mod test { &SocketAddrSpace::Unspecified, ) .iter() - .map(|(_, pk)| *pk) + .map(|(_, node)| node.id) .collect::>(); assert_eq!(options.len(), 1); assert!(!options.contains(&spy.pubkey())); @@ -906,7 +954,7 @@ mod test { ); assert_eq!(options.len(), 1); - assert_eq!(options[0].1, node_123.pubkey()); + assert_eq!(options[0].1.id, node_123.pubkey()); } #[test] @@ -914,23 +962,26 @@ mod test { let now = timestamp(); let mut crds = Crds::default(); let push = CrdsGossipPush::default(); - let peer = CrdsValue::new_unsigned(CrdsData::ContactInfo(ContactInfo::new_localhost( - &solana_sdk::pubkey::new_rand(), - 0, - ))); + let mut ping_cache = new_ping_cache(); + let peer = ContactInfo::new_localhost(&solana_sdk::pubkey::new_rand(), 0); + ping_cache.mock_pong(peer.id, peer.gossip, Instant::now()); + let peer = CrdsValue::new_unsigned(CrdsData::ContactInfo(peer)); assert_eq!( crds.insert(peer.clone(), now, GossipRoute::LocalMessage), Ok(()) ); let crds = RwLock::new(crds); + let ping_cache = Mutex::new(ping_cache); push.refresh_push_active_set( &crds, - &HashMap::new(), - None, - &Pubkey::default(), - 0, - 1, - 1, + &HashMap::new(), // stakes + None, // gossip_validtors + &Keypair::new(), + 0, // self_shred_version + 1, // network_size + 1, // ratio + &ping_cache, + &mut Vec::new(), // pings &SocketAddrSpace::Unspecified, ); @@ -954,11 +1005,13 @@ mod test { let mut rng = rand::thread_rng(); let mut crds = Crds::default(); let push = CrdsGossipPush::default(); + let mut ping_cache = new_ping_cache(); let peers: Vec<_> = vec![0, 0, now] .into_iter() .map(|wallclock| { let mut peer = ContactInfo::new_rand(&mut rng, /*pubkey=*/ None); peer.wallclock = wallclock; + ping_cache.mock_pong(peer.id, peer.gossip, Instant::now()); CrdsValue::new_unsigned(CrdsData::ContactInfo(peer)) }) .collect(); @@ -976,14 +1029,17 @@ mod test { push.process_push_message(&crds, &Pubkey::default(), vec![peers[2].clone()], now), [Ok(origin[2])], ); + let ping_cache = Mutex::new(ping_cache); push.refresh_push_active_set( &crds, - &HashMap::new(), - None, - &Pubkey::default(), - 0, - 1, - 1, + &HashMap::new(), // stakes + None, // gossip_validators + &Keypair::new(), + 0, // self_shred_version + 1, // network_size + 1, // ratio + &ping_cache, + &mut Vec::new(), &SocketAddrSpace::Unspecified, ); @@ -1011,14 +1067,17 @@ mod test { Ok(()) ); let crds = RwLock::new(crds); + let ping_cache = Mutex::new(new_ping_cache()); push.refresh_push_active_set( &crds, - &HashMap::new(), - None, - &Pubkey::default(), - 0, - 1, - 1, + &HashMap::new(), // stakes + None, // gossip_validators + &Keypair::new(), + 0, // self_shred_version + 1, // network_size + 1, // ratio + &ping_cache, + &mut Vec::new(), // pings &SocketAddrSpace::Unspecified, ); @@ -1049,14 +1108,17 @@ mod test { ))); assert_eq!(crds.insert(peer, 0, GossipRoute::LocalMessage), Ok(())); let crds = RwLock::new(crds); + let ping_cache = Mutex::new(new_ping_cache()); push.refresh_push_active_set( &crds, - &HashMap::new(), - None, - &Pubkey::default(), - 0, - 1, - 1, + &HashMap::new(), // stakes + None, // gossip_validators + &Keypair::new(), + 0, // self_shred_version + 1, // network_size + 1, // ratio + &ping_cache, + &mut Vec::new(), // pings &SocketAddrSpace::Unspecified, ); diff --git a/gossip/tests/crds_gossip.rs b/gossip/tests/crds_gossip.rs index b91d6475792856..0ac4a68e188b74 100644 --- a/gossip/tests/crds_gossip.rs +++ b/gossip/tests/crds_gossip.rs @@ -52,11 +52,7 @@ impl Node { gossip: Arc, stake: u64, ) -> Self { - let ping_cache = Arc::new(Mutex::new(PingCache::new( - Duration::from_secs(20 * 60), // ttl - Duration::from_secs(20 * 60) / 64, // delay - 2048, // capacity - ))); + let ping_cache = Arc::new(new_ping_cache()); Node { keypair, contact_info, @@ -268,12 +264,13 @@ fn network_simulator(thread_pool: &ThreadPool, network: &mut Network, max_conver // make sure there is someone in the active set let network_values: Vec = network.values().cloned().collect(); network_values.par_iter().for_each(|node| { - let node_pubkey = node.keypair.pubkey(); node.gossip.refresh_push_active_set( - &node_pubkey, + &node.keypair, 0, // shred version &HashMap::new(), // stakes None, // gossip validators + &node.ping_cache, + &mut Vec::new(), // pings &SocketAddrSpace::Unspecified, ); }); @@ -428,12 +425,13 @@ fn network_run_push( } if now % CRDS_GOSSIP_PUSH_MSG_TIMEOUT_MS == 0 && now > 0 { network_values.par_iter().for_each(|node| { - let node_pubkey = node.keypair.pubkey(); node.gossip.refresh_push_active_set( - &node_pubkey, + &node.keypair, 0, // shred version &HashMap::new(), // stakes None, // gossip validators + &node.ping_cache, + &mut Vec::new(), // pings &SocketAddrSpace::Unspecified, ); }); @@ -614,6 +612,15 @@ fn build_gossip_thread_pool() -> ThreadPool { .unwrap() } +fn new_ping_cache() -> Mutex { + let ping_cache = PingCache::new( + Duration::from_secs(20 * 60), // ttl + Duration::from_secs(20 * 60) / 64, // rate_limit_delay + 2048, // capacity + ); + Mutex::new(ping_cache) +} + #[test] #[serial] fn test_star_network_pull_50() { @@ -713,7 +720,8 @@ fn test_star_network_large_push() { #[test] fn test_prune_errors() { let crds_gossip = CrdsGossip::default(); - let id = Pubkey::new(&[0; 32]); + let keypair = Keypair::new(); + let id = keypair.pubkey(); let ci = ContactInfo::new_localhost(&Pubkey::new(&[1; 32]), 0); let prune_pubkey = Pubkey::new(&[2; 32]); crds_gossip @@ -726,11 +734,14 @@ fn test_prune_errors() { GossipRoute::LocalMessage, ) .unwrap(); + let ping_cache = new_ping_cache(); crds_gossip.refresh_push_active_set( - &id, + &keypair, 0, // shred version &HashMap::new(), // stakes None, // gossip validators + &ping_cache, + &mut Vec::new(), // pings &SocketAddrSpace::Unspecified, ); let now = timestamp(); From cfb2cbe1edb33faf3f8a5d9d053b531d0622f077 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Tue, 25 Oct 2022 08:10:10 +0000 Subject: [PATCH 211/465] chore: add spl-instruction-padding/program to downstream ci script (backport #28578) (#28579) chore: add spl-instruction-padding/program to downstream ci script (#28578) add spl-instruction-padding/program to ci script (cherry picked from commit d98eb97842de494444bd4155e33453c59b272a56) Co-authored-by: Yihau Chen --- scripts/build-downstream-projects.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/scripts/build-downstream-projects.sh b/scripts/build-downstream-projects.sh index 7c1fa5557c467e..5b1f862b6c40eb 100755 --- a/scripts/build-downstream-projects.sh +++ b/scripts/build-downstream-projects.sh @@ -41,6 +41,7 @@ spl() { ( # Mind the order! PROGRAMS=( + instruction-padding/program token/program token/program-2022 token/program-2022-test From be4242c5be89e13c920540703ebb30e2704906ea Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 25 Oct 2022 23:22:51 -0500 Subject: [PATCH 212/465] Bump Version to 1.14.7 (#28589) Co-authored-by: willhickey --- Cargo.lock | 484 ++++++++--------- account-decoder/Cargo.toml | 10 +- accounts-bench/Cargo.toml | 12 +- accounts-cluster-bench/Cargo.toml | 34 +- banking-bench/Cargo.toml | 26 +- banks-client/Cargo.toml | 12 +- banks-interface/Cargo.toml | 4 +- banks-server/Cargo.toml | 12 +- bench-streamer/Cargo.toml | 8 +- bench-tps/Cargo.toml | 38 +- bloom/Cargo.toml | 8 +- bucket_map/Cargo.toml | 8 +- clap-utils/Cargo.toml | 8 +- clap-v3-utils/Cargo.toml | 8 +- cli-config/Cargo.toml | 6 +- cli-output/Cargo.toml | 16 +- cli/Cargo.toml | 38 +- client-test/Cargo.toml | 32 +- client/Cargo.toml | 28 +- core/Cargo.toml | 56 +- dos/Cargo.toml | 30 +- download-utils/Cargo.toml | 6 +- entry/Cargo.toml | 16 +- faucet/Cargo.toml | 14 +- frozen-abi/Cargo.toml | 6 +- frozen-abi/macro/Cargo.toml | 2 +- genesis-utils/Cargo.toml | 8 +- genesis/Cargo.toml | 22 +- geyser-plugin-interface/Cargo.toml | 6 +- geyser-plugin-manager/Cargo.toml | 16 +- gossip/Cargo.toml | 38 +- install/Cargo.toml | 14 +- keygen/Cargo.toml | 12 +- ledger-tool/Cargo.toml | 30 +- ledger/Cargo.toml | 40 +- local-cluster/Cargo.toml | 28 +- log-analyzer/Cargo.toml | 6 +- logger/Cargo.toml | 2 +- measure/Cargo.toml | 4 +- merkle-root-bench/Cargo.toml | 12 +- merkle-tree/Cargo.toml | 4 +- metrics/Cargo.toml | 4 +- net-shaper/Cargo.toml | 4 +- net-utils/Cargo.toml | 8 +- notifier/Cargo.toml | 2 +- perf/Cargo.toml | 12 +- poh-bench/Cargo.toml | 14 +- poh/Cargo.toml | 20 +- program-runtime/Cargo.toml | 14 +- program-test/Cargo.toml | 18 +- .../address-lookup-table-tests/Cargo.toml | 8 +- programs/address-lookup-table/Cargo.toml | 12 +- programs/bpf-loader-tests/Cargo.toml | 8 +- programs/bpf/Cargo.lock | 490 +++++++++--------- programs/bpf/Cargo.toml | 28 +- programs/bpf/rust/128bit/Cargo.toml | 6 +- programs/bpf/rust/128bit_dep/Cargo.toml | 4 +- programs/bpf/rust/alloc/Cargo.toml | 4 +- programs/bpf/rust/call_depth/Cargo.toml | 4 +- programs/bpf/rust/caller_access/Cargo.toml | 4 +- programs/bpf/rust/curve25519/Cargo.toml | 6 +- programs/bpf/rust/custom_heap/Cargo.toml | 4 +- programs/bpf/rust/dep_crate/Cargo.toml | 6 +- .../bpf/rust/deprecated_loader/Cargo.toml | 4 +- programs/bpf/rust/dup_accounts/Cargo.toml | 4 +- programs/bpf/rust/error_handling/Cargo.toml | 4 +- programs/bpf/rust/external_spend/Cargo.toml | 4 +- programs/bpf/rust/finalize/Cargo.toml | 4 +- .../rust/get_minimum_delegation/Cargo.toml | 4 +- .../Cargo.toml | 4 +- .../rust/instruction_introspection/Cargo.toml | 4 +- programs/bpf/rust/invoke/Cargo.toml | 4 +- programs/bpf/rust/invoke_and_error/Cargo.toml | 4 +- programs/bpf/rust/invoke_and_ok/Cargo.toml | 4 +- .../bpf/rust/invoke_and_return/Cargo.toml | 4 +- programs/bpf/rust/invoked/Cargo.toml | 4 +- programs/bpf/rust/iter/Cargo.toml | 4 +- programs/bpf/rust/log_data/Cargo.toml | 4 +- programs/bpf/rust/many_args/Cargo.toml | 6 +- programs/bpf/rust/many_args_dep/Cargo.toml | 4 +- programs/bpf/rust/mem/Cargo.toml | 10 +- programs/bpf/rust/membuiltins/Cargo.toml | 6 +- programs/bpf/rust/noop/Cargo.toml | 4 +- programs/bpf/rust/panic/Cargo.toml | 4 +- programs/bpf/rust/param_passing/Cargo.toml | 6 +- .../bpf/rust/param_passing_dep/Cargo.toml | 4 +- programs/bpf/rust/rand/Cargo.toml | 4 +- programs/bpf/rust/realloc/Cargo.toml | 4 +- programs/bpf/rust/realloc_invoke/Cargo.toml | 6 +- .../bpf/rust/ro_account_modify/Cargo.toml | 4 +- programs/bpf/rust/ro_modify/Cargo.toml | 4 +- programs/bpf/rust/sanity/Cargo.toml | 10 +- .../bpf/rust/secp256k1_recover/Cargo.toml | 4 +- programs/bpf/rust/sha/Cargo.toml | 4 +- .../rust/sibling_inner_instruction/Cargo.toml | 4 +- .../bpf/rust/sibling_instruction/Cargo.toml | 4 +- programs/bpf/rust/simulation/Cargo.toml | 12 +- programs/bpf/rust/spoof1/Cargo.toml | 4 +- programs/bpf/rust/spoof1_system/Cargo.toml | 4 +- programs/bpf/rust/sysvar/Cargo.toml | 10 +- programs/bpf/rust/upgradeable/Cargo.toml | 4 +- programs/bpf/rust/upgraded/Cargo.toml | 4 +- programs/bpf_loader/Cargo.toml | 14 +- .../bpf_loader/gen-syscall-list/Cargo.toml | 2 +- programs/compute-budget/Cargo.toml | 6 +- programs/config/Cargo.toml | 8 +- programs/ed25519-tests/Cargo.toml | 6 +- programs/stake/Cargo.toml | 18 +- programs/vote/Cargo.toml | 14 +- programs/zk-token-proof/Cargo.toml | 8 +- rayon-threadlimit/Cargo.toml | 2 +- rbpf-cli/Cargo.toml | 10 +- remote-wallet/Cargo.toml | 4 +- rpc-test/Cargo.toml | 18 +- rpc/Cargo.toml | 48 +- runtime/Cargo.toml | 34 +- runtime/store-tool/Cargo.toml | 8 +- sdk/Cargo.toml | 12 +- sdk/cargo-build-bpf/Cargo.toml | 4 +- sdk/cargo-build-sbf/Cargo.toml | 8 +- .../tests/crates/fail/Cargo.toml | 4 +- .../tests/crates/noop/Cargo.toml | 4 +- sdk/cargo-test-bpf/Cargo.toml | 2 +- sdk/cargo-test-sbf/Cargo.toml | 2 +- sdk/gen-headers/Cargo.toml | 2 +- sdk/macro/Cargo.toml | 2 +- sdk/program/Cargo.toml | 10 +- send-transaction-service/Cargo.toml | 14 +- stake-accounts/Cargo.toml | 16 +- storage-bigtable/Cargo.toml | 10 +- storage-bigtable/build-proto/Cargo.lock | 2 +- storage-bigtable/build-proto/Cargo.toml | 2 +- storage-proto/Cargo.toml | 8 +- streamer/Cargo.toml | 10 +- sys-tuner/Cargo.toml | 6 +- test-validator/Cargo.toml | 28 +- tokens/Cargo.toml | 24 +- transaction-dos/Cargo.toml | 32 +- transaction-status/Cargo.toml | 14 +- upload-perf/Cargo.toml | 4 +- validator/Cargo.toml | 50 +- version/Cargo.toml | 8 +- watchtower/Cargo.toml | 20 +- zk-token-sdk/Cargo.toml | 6 +- 144 files changed, 1269 insertions(+), 1269 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index ac40a484d678c4..d80f387e4929c6 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1688,7 +1688,7 @@ dependencies = [ [[package]] name = "gen-headers" -version = "1.14.6" +version = "1.14.7" dependencies = [ "log", "regex", @@ -1696,7 +1696,7 @@ dependencies = [ [[package]] name = "gen-syscall-list" -version = "1.14.6" +version = "1.14.7" dependencies = [ "regex", ] @@ -3756,15 +3756,15 @@ dependencies = [ [[package]] name = "rbpf-cli" -version = "1.14.6" +version = "1.14.7" dependencies = [ "clap 3.1.8", "serde", "serde_json", "solana-bpf-loader-program", - "solana-logger 1.14.6", + "solana-logger 1.14.7", "solana-program-runtime", - "solana-sdk 1.14.6", + "solana-sdk 1.14.7", "solana_rbpf", ] @@ -4476,7 +4476,7 @@ dependencies = [ [[package]] name = "solana-account-decoder" -version = "1.14.6" +version = "1.14.7" dependencies = [ "Inflector", "base64 0.13.0", @@ -4489,7 +4489,7 @@ dependencies = [ "serde_json", "solana-address-lookup-table-program", "solana-config-program", - "solana-sdk 1.14.6", + "solana-sdk 1.14.7", "solana-vote-program", "spl-token", "spl-token-2022", @@ -4499,21 +4499,21 @@ dependencies = [ [[package]] name = "solana-accounts-bench" -version = "1.14.6" +version = "1.14.7" dependencies = [ "clap 2.33.3", "log", "rayon", - "solana-logger 1.14.6", + "solana-logger 1.14.7", "solana-measure", "solana-runtime", - "solana-sdk 1.14.6", + "solana-sdk 1.14.7", "solana-version", ] [[package]] name = "solana-accounts-cluster-bench" -version = "1.14.6" +version = "1.14.7" dependencies = [ "clap 2.33.3", "log", @@ -4526,11 +4526,11 @@ dependencies = [ "solana-faucet", "solana-gossip", "solana-local-cluster", - "solana-logger 1.14.6", + "solana-logger 1.14.7", "solana-measure", "solana-net-utils", "solana-runtime", - "solana-sdk 1.14.6", + "solana-sdk 1.14.7", "solana-streamer", "solana-test-validator", "solana-transaction-status", @@ -4540,7 +4540,7 @@ dependencies = [ [[package]] name = "solana-address-lookup-table-program" -version = "1.14.6" +version = "1.14.7" dependencies = [ "bincode", "bytemuck", @@ -4549,28 +4549,28 @@ dependencies = [ "num-traits", "rustc_version 0.4.0", "serde", - "solana-frozen-abi 1.14.6", - "solana-frozen-abi-macro 1.14.6", - "solana-program 1.14.6", + "solana-frozen-abi 1.14.7", + "solana-frozen-abi-macro 1.14.7", + "solana-program 1.14.7", "solana-program-runtime", - "solana-sdk 1.14.6", + "solana-sdk 1.14.7", "thiserror", ] [[package]] name = "solana-address-lookup-table-program-tests" -version = "1.14.6" +version = "1.14.7" dependencies = [ "assert_matches", "bincode", "solana-address-lookup-table-program", "solana-program-test", - "solana-sdk 1.14.6", + "solana-sdk 1.14.7", ] [[package]] name = "solana-banking-bench" -version = "1.14.6" +version = "1.14.7" dependencies = [ "clap 3.1.8", "crossbeam-channel", @@ -4581,27 +4581,27 @@ dependencies = [ "solana-core", "solana-gossip", "solana-ledger", - "solana-logger 1.14.6", + "solana-logger 1.14.7", "solana-measure", "solana-perf", "solana-poh", "solana-runtime", - "solana-sdk 1.14.6", + "solana-sdk 1.14.7", "solana-streamer", "solana-version", ] [[package]] name = "solana-banks-client" -version = "1.14.6" +version = "1.14.7" dependencies = [ "borsh", "futures 0.3.21", "solana-banks-interface", "solana-banks-server", - "solana-program 1.14.6", + "solana-program 1.14.7", "solana-runtime", - "solana-sdk 1.14.6", + "solana-sdk 1.14.7", "tarpc", "thiserror", "tokio", @@ -4610,16 +4610,16 @@ dependencies = [ [[package]] name = "solana-banks-interface" -version = "1.14.6" +version = "1.14.7" dependencies = [ "serde", - "solana-sdk 1.14.6", + "solana-sdk 1.14.7", "tarpc", ] [[package]] name = "solana-banks-server" -version = "1.14.6" +version = "1.14.7" dependencies = [ "bincode", "crossbeam-channel", @@ -4627,7 +4627,7 @@ dependencies = [ "solana-banks-interface", "solana-client", "solana-runtime", - "solana-sdk 1.14.6", + "solana-sdk 1.14.7", "solana-send-transaction-service", "tarpc", "tokio", @@ -4637,7 +4637,7 @@ dependencies = [ [[package]] name = "solana-bench-streamer" -version = "1.14.6" +version = "1.14.7" dependencies = [ "clap 3.1.8", "crossbeam-channel", @@ -4648,7 +4648,7 @@ dependencies = [ [[package]] name = "solana-bench-tps" -version = "1.14.6" +version = "1.14.7" dependencies = [ "clap 2.33.3", "crossbeam-channel", @@ -4665,13 +4665,13 @@ dependencies = [ "solana-genesis", "solana-gossip", "solana-local-cluster", - "solana-logger 1.14.6", + "solana-logger 1.14.7", "solana-measure", "solana-metrics", "solana-net-utils", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.6", + "solana-sdk 1.14.7", "solana-streamer", "solana-test-validator", "solana-version", @@ -4680,7 +4680,7 @@ dependencies = [ [[package]] name = "solana-bloom" -version = "1.14.6" +version = "1.14.7" dependencies = [ "bv", "fnv", @@ -4690,14 +4690,14 @@ dependencies = [ "rustc_version 0.4.0", "serde", "serde_derive", - "solana-frozen-abi 1.14.6", - "solana-frozen-abi-macro 1.14.6", - "solana-sdk 1.14.6", + "solana-frozen-abi 1.14.7", + "solana-frozen-abi-macro 1.14.7", + "solana-sdk 1.14.7", ] [[package]] name = "solana-bpf-loader-program" -version = "1.14.6" +version = "1.14.7" dependencies = [ "bincode", "byteorder", @@ -4708,26 +4708,26 @@ dependencies = [ "solana-metrics", "solana-program-runtime", "solana-runtime", - "solana-sdk 1.14.6", - "solana-zk-token-sdk 1.14.6", + "solana-sdk 1.14.7", + "solana-zk-token-sdk 1.14.7", "solana_rbpf", "thiserror", ] [[package]] name = "solana-bpf-loader-program-tests" -version = "1.14.6" +version = "1.14.7" dependencies = [ "assert_matches", "bincode", "solana-bpf-loader-program", "solana-program-test", - "solana-sdk 1.14.6", + "solana-sdk 1.14.7", ] [[package]] name = "solana-bucket-map" -version = "1.14.6" +version = "1.14.7" dependencies = [ "fs_extra", "log", @@ -4735,24 +4735,24 @@ dependencies = [ "modular-bitfield", "rand 0.7.3", "rayon", - "solana-logger 1.14.6", + "solana-logger 1.14.7", "solana-measure", - "solana-sdk 1.14.6", + "solana-sdk 1.14.7", "tempfile", ] [[package]] name = "solana-cargo-build-bpf" -version = "1.14.6" +version = "1.14.7" dependencies = [ "cargo_metadata", "clap 3.1.8", - "solana-sdk 1.14.6", + "solana-sdk 1.14.7", ] [[package]] name = "solana-cargo-build-sbf" -version = "1.14.6" +version = "1.14.7" dependencies = [ "bzip2", "cargo_metadata", @@ -4761,14 +4761,14 @@ dependencies = [ "regex", "serial_test", "solana-download-utils", - "solana-logger 1.14.6", - "solana-sdk 1.14.6", + "solana-logger 1.14.7", + "solana-sdk 1.14.7", "tar", ] [[package]] name = "solana-cargo-test-bpf" -version = "1.14.6" +version = "1.14.7" dependencies = [ "cargo_metadata", "clap 3.1.8", @@ -4776,7 +4776,7 @@ dependencies = [ [[package]] name = "solana-cargo-test-sbf" -version = "1.14.6" +version = "1.14.7" dependencies = [ "cargo_metadata", "clap 3.1.8", @@ -4784,14 +4784,14 @@ dependencies = [ [[package]] name = "solana-clap-utils" -version = "1.14.6" +version = "1.14.7" dependencies = [ "chrono", "clap 2.33.3", "rpassword", "solana-perf", "solana-remote-wallet", - "solana-sdk 1.14.6", + "solana-sdk 1.14.7", "tempfile", "thiserror", "tiny-bip39", @@ -4801,14 +4801,14 @@ dependencies = [ [[package]] name = "solana-clap-v3-utils" -version = "1.14.6" +version = "1.14.7" dependencies = [ "chrono", "clap 3.1.8", "rpassword", "solana-perf", "solana-remote-wallet", - "solana-sdk 1.14.6", + "solana-sdk 1.14.7", "tempfile", "thiserror", "tiny-bip39", @@ -4818,7 +4818,7 @@ dependencies = [ [[package]] name = "solana-cli" -version = "1.14.6" +version = "1.14.7" dependencies = [ "bincode", "bs58", @@ -4846,10 +4846,10 @@ dependencies = [ "solana-client", "solana-config-program", "solana-faucet", - "solana-logger 1.14.6", + "solana-logger 1.14.7", "solana-program-runtime", "solana-remote-wallet", - "solana-sdk 1.14.6", + "solana-sdk 1.14.7", "solana-streamer", "solana-test-validator", "solana-transaction-status", @@ -4864,7 +4864,7 @@ dependencies = [ [[package]] name = "solana-cli-config" -version = "1.14.6" +version = "1.14.7" dependencies = [ "anyhow", "dirs-next", @@ -4873,13 +4873,13 @@ dependencies = [ "serde_derive", "serde_yaml", "solana-clap-utils", - "solana-sdk 1.14.6", + "solana-sdk 1.14.7", "url 2.2.2", ] [[package]] name = "solana-cli-output" -version = "1.14.6" +version = "1.14.7" dependencies = [ "Inflector", "base64 0.13.0", @@ -4897,7 +4897,7 @@ dependencies = [ "solana-clap-utils", "solana-cli-config", "solana-client", - "solana-sdk 1.14.6", + "solana-sdk 1.14.7", "solana-transaction-status", "solana-vote-program", "spl-memo", @@ -4905,7 +4905,7 @@ dependencies = [ [[package]] name = "solana-client" -version = "1.14.6" +version = "1.14.7" dependencies = [ "anyhow", "assert_matches", @@ -4941,12 +4941,12 @@ dependencies = [ "solana-account-decoder", "solana-clap-utils", "solana-faucet", - "solana-logger 1.14.6", + "solana-logger 1.14.7", "solana-measure", "solana-metrics", "solana-net-utils", "solana-perf", - "solana-sdk 1.14.6", + "solana-sdk 1.14.7", "solana-streamer", "solana-transaction-status", "solana-version", @@ -4962,14 +4962,14 @@ dependencies = [ [[package]] name = "solana-client-test" -version = "1.14.6" +version = "1.14.7" dependencies = [ "futures-util", "serde_json", "serial_test", "solana-client", "solana-ledger", - "solana-logger 1.14.6", + "solana-logger 1.14.7", "solana-measure", "solana-merkle-tree", "solana-metrics", @@ -4977,7 +4977,7 @@ dependencies = [ "solana-rayon-threadlimit", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.6", + "solana-sdk 1.14.7", "solana-streamer", "solana-test-validator", "solana-transaction-status", @@ -4988,28 +4988,28 @@ dependencies = [ [[package]] name = "solana-compute-budget-program" -version = "1.14.6" +version = "1.14.7" dependencies = [ "solana-program-runtime", - "solana-sdk 1.14.6", + "solana-sdk 1.14.7", ] [[package]] name = "solana-config-program" -version = "1.14.6" +version = "1.14.7" dependencies = [ "bincode", "chrono", "serde", "serde_derive", - "solana-logger 1.14.6", + "solana-logger 1.14.7", "solana-program-runtime", - "solana-sdk 1.14.6", + "solana-sdk 1.14.7", ] [[package]] name = "solana-core" -version = "1.14.6" +version = "1.14.7" dependencies = [ "ahash", "base64 0.13.0", @@ -5042,12 +5042,12 @@ dependencies = [ "solana-bloom", "solana-client", "solana-entry", - "solana-frozen-abi 1.14.6", - "solana-frozen-abi-macro 1.14.6", + "solana-frozen-abi 1.14.7", + "solana-frozen-abi-macro 1.14.7", "solana-geyser-plugin-manager", "solana-gossip", "solana-ledger", - "solana-logger 1.14.6", + "solana-logger 1.14.7", "solana-measure", "solana-metrics", "solana-net-utils", @@ -5057,7 +5057,7 @@ dependencies = [ "solana-rayon-threadlimit", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.6", + "solana-sdk 1.14.7", "solana-send-transaction-service", "solana-stake-program", "solana-streamer", @@ -5077,7 +5077,7 @@ dependencies = [ [[package]] name = "solana-dos" -version = "1.14.6" +version = "1.14.7" dependencies = [ "bincode", "clap 3.1.8", @@ -5093,42 +5093,42 @@ dependencies = [ "solana-faucet", "solana-gossip", "solana-local-cluster", - "solana-logger 1.14.6", + "solana-logger 1.14.7", "solana-measure", "solana-net-utils", "solana-perf", "solana-rpc", - "solana-sdk 1.14.6", + "solana-sdk 1.14.7", "solana-streamer", "solana-version", ] [[package]] name = "solana-download-utils" -version = "1.14.6" +version = "1.14.7" dependencies = [ "console", "indicatif", "log", "reqwest", "solana-runtime", - "solana-sdk 1.14.6", + "solana-sdk 1.14.7", ] [[package]] name = "solana-ed25519-program-tests" -version = "1.14.6" +version = "1.14.7" dependencies = [ "assert_matches", "ed25519-dalek", "rand 0.7.3", "solana-program-test", - "solana-sdk 1.14.6", + "solana-sdk 1.14.7", ] [[package]] name = "solana-entry" -version = "1.14.6" +version = "1.14.7" dependencies = [ "bincode", "crossbeam-channel", @@ -5140,18 +5140,18 @@ dependencies = [ "rand 0.7.3", "rayon", "serde", - "solana-logger 1.14.6", + "solana-logger 1.14.7", "solana-measure", "solana-merkle-tree", "solana-metrics", "solana-perf", "solana-rayon-threadlimit", - "solana-sdk 1.14.6", + "solana-sdk 1.14.7", ] [[package]] name = "solana-faucet" -version = "1.14.6" +version = "1.14.7" dependencies = [ "bincode", "byteorder", @@ -5162,9 +5162,9 @@ dependencies = [ "serde_derive", "solana-clap-utils", "solana-cli-config", - "solana-logger 1.14.6", + "solana-logger 1.14.7", "solana-metrics", - "solana-sdk 1.14.6", + "solana-sdk 1.14.7", "solana-version", "spl-memo", "thiserror", @@ -5195,7 +5195,7 @@ dependencies = [ [[package]] name = "solana-frozen-abi" -version = "1.14.6" +version = "1.14.7" dependencies = [ "ahash", "blake3", @@ -5220,8 +5220,8 @@ dependencies = [ "serde_derive", "serde_json", "sha2 0.10.2", - "solana-frozen-abi-macro 1.14.6", - "solana-logger 1.14.6", + "solana-frozen-abi-macro 1.14.7", + "solana-logger 1.14.7", "subtle", "thiserror", ] @@ -5240,7 +5240,7 @@ dependencies = [ [[package]] name = "solana-frozen-abi-macro" -version = "1.14.6" +version = "1.14.7" dependencies = [ "proc-macro2 1.0.41", "quote 1.0.18", @@ -5250,7 +5250,7 @@ dependencies = [ [[package]] name = "solana-genesis" -version = "1.14.6" +version = "1.14.7" dependencies = [ "base64 0.13.0", "clap 2.33.3", @@ -5261,9 +5261,9 @@ dependencies = [ "solana-cli-config", "solana-entry", "solana-ledger", - "solana-logger 1.14.6", + "solana-logger 1.14.7", "solana-runtime", - "solana-sdk 1.14.6", + "solana-sdk 1.14.7", "solana-stake-program", "solana-version", "solana-vote-program", @@ -5272,26 +5272,26 @@ dependencies = [ [[package]] name = "solana-genesis-utils" -version = "1.14.6" +version = "1.14.7" dependencies = [ "solana-download-utils", "solana-runtime", - "solana-sdk 1.14.6", + "solana-sdk 1.14.7", ] [[package]] name = "solana-geyser-plugin-interface" -version = "1.14.6" +version = "1.14.7" dependencies = [ "log", - "solana-sdk 1.14.6", + "solana-sdk 1.14.7", "solana-transaction-status", "thiserror", ] [[package]] name = "solana-geyser-plugin-manager" -version = "1.14.6" +version = "1.14.7" dependencies = [ "bs58", "crossbeam-channel", @@ -5304,14 +5304,14 @@ dependencies = [ "solana-metrics", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.6", + "solana-sdk 1.14.7", "solana-transaction-status", "thiserror", ] [[package]] name = "solana-gossip" -version = "1.14.6" +version = "1.14.7" dependencies = [ "bincode", "bv", @@ -5338,17 +5338,17 @@ dependencies = [ "solana-clap-utils", "solana-client", "solana-entry", - "solana-frozen-abi 1.14.6", - "solana-frozen-abi-macro 1.14.6", + "solana-frozen-abi 1.14.7", + "solana-frozen-abi-macro 1.14.7", "solana-ledger", - "solana-logger 1.14.6", + "solana-logger 1.14.7", "solana-measure", "solana-metrics", "solana-net-utils", "solana-perf", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.14.6", + "solana-sdk 1.14.7", "solana-streamer", "solana-version", "solana-vote-program", @@ -5357,7 +5357,7 @@ dependencies = [ [[package]] name = "solana-install" -version = "1.14.6" +version = "1.14.7" dependencies = [ "atty", "bincode", @@ -5378,8 +5378,8 @@ dependencies = [ "solana-clap-utils", "solana-client", "solana-config-program", - "solana-logger 1.14.6", - "solana-sdk 1.14.6", + "solana-logger 1.14.7", + "solana-sdk 1.14.7", "solana-version", "tar", "tempfile", @@ -5390,7 +5390,7 @@ dependencies = [ [[package]] name = "solana-keygen" -version = "1.14.6" +version = "1.14.7" dependencies = [ "bs58", "clap 3.1.8", @@ -5399,14 +5399,14 @@ dependencies = [ "solana-clap-v3-utils", "solana-cli-config", "solana-remote-wallet", - "solana-sdk 1.14.6", + "solana-sdk 1.14.7", "solana-version", "tiny-bip39", ] [[package]] name = "solana-ledger" -version = "1.14.6" +version = "1.14.7" dependencies = [ "assert_matches", "bincode", @@ -5440,16 +5440,16 @@ dependencies = [ "solana-account-decoder", "solana-bpf-loader-program", "solana-entry", - "solana-frozen-abi 1.14.6", - "solana-frozen-abi-macro 1.14.6", - "solana-logger 1.14.6", + "solana-frozen-abi 1.14.7", + "solana-frozen-abi-macro 1.14.7", + "solana-logger 1.14.7", "solana-measure", "solana-metrics", "solana-perf", "solana-program-runtime", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.14.6", + "solana-sdk 1.14.7", "solana-stake-program", "solana-storage-bigtable", "solana-storage-proto", @@ -5468,7 +5468,7 @@ dependencies = [ [[package]] name = "solana-ledger-tool" -version = "1.14.6" +version = "1.14.7" dependencies = [ "assert_cmd", "base64 0.13.0", @@ -5490,10 +5490,10 @@ dependencies = [ "solana-core", "solana-entry", "solana-ledger", - "solana-logger 1.14.6", + "solana-logger 1.14.7", "solana-measure", "solana-runtime", - "solana-sdk 1.14.6", + "solana-sdk 1.14.7", "solana-stake-program", "solana-storage-bigtable", "solana-transaction-status", @@ -5505,7 +5505,7 @@ dependencies = [ [[package]] name = "solana-local-cluster" -version = "1.14.6" +version = "1.14.7" dependencies = [ "assert_matches", "crossbeam-channel", @@ -5523,9 +5523,9 @@ dependencies = [ "solana-entry", "solana-gossip", "solana-ledger", - "solana-logger 1.14.6", + "solana-logger 1.14.7", "solana-runtime", - "solana-sdk 1.14.6", + "solana-sdk 1.14.7", "solana-stake-program", "solana-streamer", "solana-vote-program", @@ -5534,13 +5534,13 @@ dependencies = [ [[package]] name = "solana-log-analyzer" -version = "1.14.6" +version = "1.14.7" dependencies = [ "byte-unit", "clap 3.1.8", "serde", "serde_json", - "solana-logger 1.14.6", + "solana-logger 1.14.7", "solana-version", ] @@ -5557,7 +5557,7 @@ dependencies = [ [[package]] name = "solana-logger" -version = "1.14.6" +version = "1.14.7" dependencies = [ "env_logger", "lazy_static", @@ -5566,38 +5566,38 @@ dependencies = [ [[package]] name = "solana-measure" -version = "1.14.6" +version = "1.14.7" dependencies = [ "log", - "solana-sdk 1.14.6", + "solana-sdk 1.14.7", ] [[package]] name = "solana-merkle-root-bench" -version = "1.14.6" +version = "1.14.7" dependencies = [ "clap 2.33.3", "log", - "solana-logger 1.14.6", + "solana-logger 1.14.7", "solana-measure", "solana-runtime", - "solana-sdk 1.14.6", + "solana-sdk 1.14.7", "solana-version", ] [[package]] name = "solana-merkle-tree" -version = "1.14.6" +version = "1.14.7" dependencies = [ "fast-math", "hex", "matches", - "solana-program 1.14.6", + "solana-program 1.14.7", ] [[package]] name = "solana-metrics" -version = "1.14.6" +version = "1.14.7" dependencies = [ "crossbeam-channel", "env_logger", @@ -5607,23 +5607,23 @@ dependencies = [ "rand 0.7.3", "reqwest", "serial_test", - "solana-sdk 1.14.6", + "solana-sdk 1.14.7", ] [[package]] name = "solana-net-shaper" -version = "1.14.6" +version = "1.14.7" dependencies = [ "clap 3.1.8", "rand 0.7.3", "serde", "serde_json", - "solana-logger 1.14.6", + "solana-logger 1.14.7", ] [[package]] name = "solana-net-utils" -version = "1.14.6" +version = "1.14.7" dependencies = [ "bincode", "clap 3.1.8", @@ -5634,8 +5634,8 @@ dependencies = [ "serde", "serde_derive", "socket2", - "solana-logger 1.14.6", - "solana-sdk 1.14.6", + "solana-logger 1.14.7", + "solana-sdk 1.14.7", "solana-version", "tokio", "url 2.2.2", @@ -5643,7 +5643,7 @@ dependencies = [ [[package]] name = "solana-notifier" -version = "1.14.6" +version = "1.14.7" dependencies = [ "log", "reqwest", @@ -5652,7 +5652,7 @@ dependencies = [ [[package]] name = "solana-perf" -version = "1.14.6" +version = "1.14.7" dependencies = [ "ahash", "bincode", @@ -5670,16 +5670,16 @@ dependencies = [ "rand 0.7.3", "rayon", "serde", - "solana-logger 1.14.6", + "solana-logger 1.14.7", "solana-metrics", "solana-rayon-threadlimit", - "solana-sdk 1.14.6", + "solana-sdk 1.14.7", "solana-vote-program", ] [[package]] name = "solana-poh" -version = "1.14.6" +version = "1.14.7" dependencies = [ "bincode", "core_affinity", @@ -5689,29 +5689,29 @@ dependencies = [ "rand 0.7.3", "solana-entry", "solana-ledger", - "solana-logger 1.14.6", + "solana-logger 1.14.7", "solana-measure", "solana-metrics", "solana-perf", "solana-runtime", - "solana-sdk 1.14.6", + "solana-sdk 1.14.7", "solana-sys-tuner", "thiserror", ] [[package]] name = "solana-poh-bench" -version = "1.14.6" +version = "1.14.7" dependencies = [ "clap 3.1.8", "log", "rand 0.7.3", "rayon", "solana-entry", - "solana-logger 1.14.6", + "solana-logger 1.14.7", "solana-measure", "solana-perf", - "solana-sdk 1.14.6", + "solana-sdk 1.14.7", "solana-version", ] @@ -5759,7 +5759,7 @@ dependencies = [ [[package]] name = "solana-program" -version = "1.14.6" +version = "1.14.7" dependencies = [ "anyhow", "assert_matches", @@ -5797,10 +5797,10 @@ dependencies = [ "serde_json", "sha2 0.10.2", "sha3 0.10.1", - "solana-frozen-abi 1.14.6", - "solana-frozen-abi-macro 1.14.6", - "solana-logger 1.14.6", - "solana-sdk-macro 1.14.6", + "solana-frozen-abi 1.14.7", + "solana-frozen-abi-macro 1.14.7", + "solana-logger 1.14.7", + "solana-sdk-macro 1.14.7", "static_assertions", "thiserror", "tiny-bip39", @@ -5810,7 +5810,7 @@ dependencies = [ [[package]] name = "solana-program-runtime" -version = "1.14.6" +version = "1.14.7" dependencies = [ "base64 0.13.0", "bincode", @@ -5825,18 +5825,18 @@ dependencies = [ "rand 0.7.3", "rustc_version 0.4.0", "serde", - "solana-frozen-abi 1.14.6", - "solana-frozen-abi-macro 1.14.6", - "solana-logger 1.14.6", + "solana-frozen-abi 1.14.7", + "solana-frozen-abi-macro 1.14.7", + "solana-logger 1.14.7", "solana-measure", "solana-metrics", - "solana-sdk 1.14.6", + "solana-sdk 1.14.7", "thiserror", ] [[package]] name = "solana-program-test" -version = "1.14.6" +version = "1.14.7" dependencies = [ "assert_matches", "async-trait", @@ -5848,10 +5848,10 @@ dependencies = [ "solana-banks-client", "solana-banks-server", "solana-bpf-loader-program", - "solana-logger 1.14.6", + "solana-logger 1.14.7", "solana-program-runtime", "solana-runtime", - "solana-sdk 1.14.6", + "solana-sdk 1.14.7", "solana-vote-program", "thiserror", "tokio", @@ -5859,7 +5859,7 @@ dependencies = [ [[package]] name = "solana-rayon-threadlimit" -version = "1.14.6" +version = "1.14.7" dependencies = [ "lazy_static", "num_cpus", @@ -5867,7 +5867,7 @@ dependencies = [ [[package]] name = "solana-remote-wallet" -version = "1.14.6" +version = "1.14.7" dependencies = [ "console", "dialoguer", @@ -5878,14 +5878,14 @@ dependencies = [ "parking_lot 0.12.1", "qstring", "semver 1.0.10", - "solana-sdk 1.14.6", + "solana-sdk 1.14.7", "thiserror", "uriparse", ] [[package]] name = "solana-rpc" -version = "1.14.6" +version = "1.14.7" dependencies = [ "base64 0.13.0", "bincode", @@ -5921,7 +5921,7 @@ dependencies = [ "solana-poh", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.14.6", + "solana-sdk 1.14.7", "solana-send-transaction-service", "solana-stake-program", "solana-storage-bigtable", @@ -5940,7 +5940,7 @@ dependencies = [ [[package]] name = "solana-rpc-test" -version = "1.14.6" +version = "1.14.7" dependencies = [ "bincode", "bs58", @@ -5952,9 +5952,9 @@ dependencies = [ "serde_json", "solana-account-decoder", "solana-client", - "solana-logger 1.14.6", + "solana-logger 1.14.7", "solana-rpc", - "solana-sdk 1.14.6", + "solana-sdk 1.14.7", "solana-streamer", "solana-test-validator", "solana-transaction-status", @@ -5963,7 +5963,7 @@ dependencies = [ [[package]] name = "solana-runtime" -version = "1.14.6" +version = "1.14.7" dependencies = [ "arrayref", "assert_matches", @@ -6003,18 +6003,18 @@ dependencies = [ "solana-bucket-map", "solana-compute-budget-program", "solana-config-program", - "solana-frozen-abi 1.14.6", - "solana-frozen-abi-macro 1.14.6", - "solana-logger 1.14.6", + "solana-frozen-abi 1.14.7", + "solana-frozen-abi-macro 1.14.7", + "solana-logger 1.14.7", "solana-measure", "solana-metrics", "solana-program-runtime", "solana-rayon-threadlimit", - "solana-sdk 1.14.6", + "solana-sdk 1.14.7", "solana-stake-program", "solana-vote-program", "solana-zk-token-proof-program", - "solana-zk-token-sdk 1.14.6", + "solana-zk-token-sdk 1.14.7", "strum", "strum_macros", "symlink", @@ -6077,7 +6077,7 @@ dependencies = [ [[package]] name = "solana-sdk" -version = "1.14.6" +version = "1.14.7" dependencies = [ "anyhow", "assert_matches", @@ -6117,11 +6117,11 @@ dependencies = [ "serde_json", "sha2 0.10.2", "sha3 0.10.1", - "solana-frozen-abi 1.14.6", - "solana-frozen-abi-macro 1.14.6", - "solana-logger 1.14.6", - "solana-program 1.14.6", - "solana-sdk-macro 1.14.6", + "solana-frozen-abi 1.14.7", + "solana-frozen-abi-macro 1.14.7", + "solana-logger 1.14.7", + "solana-program 1.14.7", + "solana-sdk-macro 1.14.7", "static_assertions", "thiserror", "tiny-bip39", @@ -6144,7 +6144,7 @@ dependencies = [ [[package]] name = "solana-sdk-macro" -version = "1.14.6" +version = "1.14.7" dependencies = [ "bs58", "proc-macro2 1.0.41", @@ -6155,21 +6155,21 @@ dependencies = [ [[package]] name = "solana-send-transaction-service" -version = "1.14.6" +version = "1.14.7" dependencies = [ "crossbeam-channel", "log", "solana-client", - "solana-logger 1.14.6", + "solana-logger 1.14.7", "solana-measure", "solana-metrics", "solana-runtime", - "solana-sdk 1.14.6", + "solana-sdk 1.14.7", ] [[package]] name = "solana-stake-accounts" -version = "1.14.6" +version = "1.14.7" dependencies = [ "clap 2.33.3", "solana-clap-utils", @@ -6177,13 +6177,13 @@ dependencies = [ "solana-client", "solana-remote-wallet", "solana-runtime", - "solana-sdk 1.14.6", + "solana-sdk 1.14.7", "solana-stake-program", ] [[package]] name = "solana-stake-program" -version = "1.14.6" +version = "1.14.7" dependencies = [ "assert_matches", "bincode", @@ -6195,12 +6195,12 @@ dependencies = [ "serde", "serde_derive", "solana-config-program", - "solana-frozen-abi 1.14.6", - "solana-frozen-abi-macro 1.14.6", - "solana-logger 1.14.6", + "solana-frozen-abi 1.14.7", + "solana-frozen-abi-macro 1.14.7", + "solana-logger 1.14.7", "solana-metrics", "solana-program-runtime", - "solana-sdk 1.14.6", + "solana-sdk 1.14.7", "solana-vote-program", "test-case", "thiserror", @@ -6208,7 +6208,7 @@ dependencies = [ [[package]] name = "solana-storage-bigtable" -version = "1.14.6" +version = "1.14.7" dependencies = [ "backoff", "bincode", @@ -6229,7 +6229,7 @@ dependencies = [ "serde_derive", "smpl_jwt", "solana-metrics", - "solana-sdk 1.14.6", + "solana-sdk 1.14.7", "solana-storage-proto", "solana-transaction-status", "thiserror", @@ -6240,7 +6240,7 @@ dependencies = [ [[package]] name = "solana-storage-proto" -version = "1.14.6" +version = "1.14.7" dependencies = [ "bincode", "bs58", @@ -6249,25 +6249,25 @@ dependencies = [ "protobuf-src", "serde", "solana-account-decoder", - "solana-sdk 1.14.6", + "solana-sdk 1.14.7", "solana-transaction-status", "tonic-build 0.8.0", ] [[package]] name = "solana-store-tool" -version = "1.14.6" +version = "1.14.7" dependencies = [ "clap 2.33.3", "log", - "solana-logger 1.14.6", + "solana-logger 1.14.7", "solana-runtime", "solana-version", ] [[package]] name = "solana-streamer" -version = "1.14.6" +version = "1.14.7" dependencies = [ "crossbeam-channel", "futures-util", @@ -6284,10 +6284,10 @@ dependencies = [ "rand 0.7.3", "rcgen", "rustls 0.20.6", - "solana-logger 1.14.6", + "solana-logger 1.14.7", "solana-metrics", "solana-perf", - "solana-sdk 1.14.6", + "solana-sdk 1.14.7", "thiserror", "tokio", "x509-parser", @@ -6295,13 +6295,13 @@ dependencies = [ [[package]] name = "solana-sys-tuner" -version = "1.14.6" +version = "1.14.7" dependencies = [ "clap 2.33.3", "libc", "log", "nix", - "solana-logger 1.14.6", + "solana-logger 1.14.7", "solana-version", "sysctl", "unix_socket2", @@ -6310,7 +6310,7 @@ dependencies = [ [[package]] name = "solana-test-validator" -version = "1.14.6" +version = "1.14.7" dependencies = [ "base64 0.13.0", "log", @@ -6321,20 +6321,20 @@ dependencies = [ "solana-core", "solana-gossip", "solana-ledger", - "solana-logger 1.14.6", + "solana-logger 1.14.7", "solana-net-utils", "solana-program-runtime", "solana-program-test", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.6", + "solana-sdk 1.14.7", "solana-streamer", "tokio", ] [[package]] name = "solana-tokens" -version = "1.14.6" +version = "1.14.7" dependencies = [ "bincode", "chrono", @@ -6350,9 +6350,9 @@ dependencies = [ "solana-clap-utils", "solana-cli-config", "solana-client", - "solana-logger 1.14.6", + "solana-logger 1.14.7", "solana-remote-wallet", - "solana-sdk 1.14.6", + "solana-sdk 1.14.7", "solana-streamer", "solana-test-validator", "solana-transaction-status", @@ -6365,7 +6365,7 @@ dependencies = [ [[package]] name = "solana-transaction-dos" -version = "1.14.6" +version = "1.14.7" dependencies = [ "bincode", "clap 2.33.3", @@ -6379,11 +6379,11 @@ dependencies = [ "solana-faucet", "solana-gossip", "solana-local-cluster", - "solana-logger 1.14.6", + "solana-logger 1.14.7", "solana-measure", "solana-net-utils", "solana-runtime", - "solana-sdk 1.14.6", + "solana-sdk 1.14.7", "solana-streamer", "solana-transaction-status", "solana-version", @@ -6391,7 +6391,7 @@ dependencies = [ [[package]] name = "solana-transaction-status" -version = "1.14.6" +version = "1.14.7" dependencies = [ "Inflector", "base64 0.13.0", @@ -6407,7 +6407,7 @@ dependencies = [ "solana-address-lookup-table-program", "solana-measure", "solana-metrics", - "solana-sdk 1.14.6", + "solana-sdk 1.14.7", "solana-vote-program", "spl-associated-token-account", "spl-memo", @@ -6418,7 +6418,7 @@ dependencies = [ [[package]] name = "solana-upload-perf" -version = "1.14.6" +version = "1.14.7" dependencies = [ "serde_json", "solana-metrics", @@ -6426,7 +6426,7 @@ dependencies = [ [[package]] name = "solana-validator" -version = "1.14.6" +version = "1.14.7" dependencies = [ "chrono", "clap 2.33.3", @@ -6457,14 +6457,14 @@ dependencies = [ "solana-genesis-utils", "solana-gossip", "solana-ledger", - "solana-logger 1.14.6", + "solana-logger 1.14.7", "solana-metrics", "solana-net-utils", "solana-perf", "solana-poh", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.6", + "solana-sdk 1.14.7", "solana-send-transaction-service", "solana-storage-bigtable", "solana-streamer", @@ -6477,21 +6477,21 @@ dependencies = [ [[package]] name = "solana-version" -version = "1.14.6" +version = "1.14.7" dependencies = [ "log", "rustc_version 0.4.0", "semver 1.0.10", "serde", "serde_derive", - "solana-frozen-abi 1.14.6", - "solana-frozen-abi-macro 1.14.6", - "solana-sdk 1.14.6", + "solana-frozen-abi 1.14.7", + "solana-frozen-abi-macro 1.14.7", + "solana-sdk 1.14.7", ] [[package]] name = "solana-vote-program" -version = "1.14.6" +version = "1.14.7" dependencies = [ "bincode", "itertools", @@ -6502,18 +6502,18 @@ dependencies = [ "rustc_version 0.4.0", "serde", "serde_derive", - "solana-frozen-abi 1.14.6", - "solana-frozen-abi-macro 1.14.6", - "solana-logger 1.14.6", + "solana-frozen-abi 1.14.7", + "solana-frozen-abi-macro 1.14.7", + "solana-logger 1.14.7", "solana-metrics", "solana-program-runtime", - "solana-sdk 1.14.6", + "solana-sdk 1.14.7", "thiserror", ] [[package]] name = "solana-watchtower" -version = "1.14.6" +version = "1.14.7" dependencies = [ "clap 2.33.3", "humantime", @@ -6522,24 +6522,24 @@ dependencies = [ "solana-cli-config", "solana-cli-output", "solana-client", - "solana-logger 1.14.6", + "solana-logger 1.14.7", "solana-metrics", "solana-notifier", - "solana-sdk 1.14.6", + "solana-sdk 1.14.7", "solana-version", ] [[package]] name = "solana-zk-token-proof-program" -version = "1.14.6" +version = "1.14.7" dependencies = [ "bytemuck", "getrandom 0.1.16", "num-derive", "num-traits", "solana-program-runtime", - "solana-sdk 1.14.6", - "solana-zk-token-sdk 1.14.6", + "solana-sdk 1.14.7", + "solana-zk-token-sdk 1.14.7", ] [[package]] @@ -6574,7 +6574,7 @@ dependencies = [ [[package]] name = "solana-zk-token-sdk" -version = "1.14.6" +version = "1.14.7" dependencies = [ "aes-gcm-siv", "arrayref", @@ -6594,8 +6594,8 @@ dependencies = [ "serde", "serde_json", "sha3 0.9.1", - "solana-program 1.14.6", - "solana-sdk 1.14.6", + "solana-program 1.14.7", + "solana-sdk 1.14.7", "subtle", "thiserror", "zeroize", diff --git a/account-decoder/Cargo.toml b/account-decoder/Cargo.toml index e5c97e9d5e4560..9220f6ba6b2c47 100644 --- a/account-decoder/Cargo.toml +++ b/account-decoder/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-account-decoder" -version = "1.14.6" +version = "1.14.7" description = "Solana account decoder" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -19,10 +19,10 @@ lazy_static = "1.4.0" serde = "1.0.138" serde_derive = "1.0.103" serde_json = "1.0.81" -solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.6" } -solana-config-program = { path = "../programs/config", version = "=1.14.6" } -solana-sdk = { path = "../sdk", version = "=1.14.6" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.6" } +solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.7" } +solana-config-program = { path = "../programs/config", version = "=1.14.7" } +solana-sdk = { path = "../sdk", version = "=1.14.7" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.7" } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } spl-token-2022 = { version = "=0.4.2", features = ["no-entrypoint"] } thiserror = "1.0" diff --git a/accounts-bench/Cargo.toml b/accounts-bench/Cargo.toml index d6395090643178..b84f5a829837c2 100644 --- a/accounts-bench/Cargo.toml +++ b/accounts-bench/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-accounts-bench" -version = "1.14.6" +version = "1.14.7" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -12,11 +12,11 @@ publish = false clap = "2.33.1" log = "0.4.17" rayon = "1.5.3" -solana-logger = { path = "../logger", version = "=1.14.6" } -solana-measure = { path = "../measure", version = "=1.14.6" } -solana-runtime = { path = "../runtime", version = "=1.14.6" } -solana-sdk = { path = "../sdk", version = "=1.14.6" } -solana-version = { path = "../version", version = "=1.14.6" } +solana-logger = { path = "../logger", version = "=1.14.7" } +solana-measure = { path = "../measure", version = "=1.14.7" } +solana-runtime = { path = "../runtime", version = "=1.14.7" } +solana-sdk = { path = "../sdk", version = "=1.14.7" } +solana-version = { path = "../version", version = "=1.14.7" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/accounts-cluster-bench/Cargo.toml b/accounts-cluster-bench/Cargo.toml index b26bbeb3f6fd39..4cae8414ea9bb8 100644 --- a/accounts-cluster-bench/Cargo.toml +++ b/accounts-cluster-bench/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-accounts-cluster-bench" -version = "1.14.6" +version = "1.14.7" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -13,25 +13,25 @@ clap = "2.33.1" log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.6" } -solana-clap-utils = { path = "../clap-utils", version = "=1.14.6" } -solana-client = { path = "../client", version = "=1.14.6" } -solana-faucet = { path = "../faucet", version = "=1.14.6" } -solana-gossip = { path = "../gossip", version = "=1.14.6" } -solana-logger = { path = "../logger", version = "=1.14.6" } -solana-measure = { path = "../measure", version = "=1.14.6" } -solana-net-utils = { path = "../net-utils", version = "=1.14.6" } -solana-runtime = { path = "../runtime", version = "=1.14.6" } -solana-sdk = { path = "../sdk", version = "=1.14.6" } -solana-streamer = { path = "../streamer", version = "=1.14.6" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.6" } -solana-version = { path = "../version", version = "=1.14.6" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.7" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.7" } +solana-client = { path = "../client", version = "=1.14.7" } +solana-faucet = { path = "../faucet", version = "=1.14.7" } +solana-gossip = { path = "../gossip", version = "=1.14.7" } +solana-logger = { path = "../logger", version = "=1.14.7" } +solana-measure = { path = "../measure", version = "=1.14.7" } +solana-net-utils = { path = "../net-utils", version = "=1.14.7" } +solana-runtime = { path = "../runtime", version = "=1.14.7" } +solana-sdk = { path = "../sdk", version = "=1.14.7" } +solana-streamer = { path = "../streamer", version = "=1.14.7" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.7" } +solana-version = { path = "../version", version = "=1.14.7" } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } [dev-dependencies] -solana-core = { path = "../core", version = "=1.14.6" } -solana-local-cluster = { path = "../local-cluster", version = "=1.14.6" } -solana-test-validator = { path = "../test-validator", version = "=1.14.6" } +solana-core = { path = "../core", version = "=1.14.7" } +solana-local-cluster = { path = "../local-cluster", version = "=1.14.7" } +solana-test-validator = { path = "../test-validator", version = "=1.14.7" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/banking-bench/Cargo.toml b/banking-bench/Cargo.toml index 2d1c3bc0ea1b86..27e69f201ea14f 100644 --- a/banking-bench/Cargo.toml +++ b/banking-bench/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-banking-bench" -version = "1.14.6" +version = "1.14.7" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,18 +14,18 @@ crossbeam-channel = "0.5" log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" -solana-client = { path = "../client", version = "=1.14.6" } -solana-core = { path = "../core", version = "=1.14.6" } -solana-gossip = { path = "../gossip", version = "=1.14.6" } -solana-ledger = { path = "../ledger", version = "=1.14.6" } -solana-logger = { path = "../logger", version = "=1.14.6" } -solana-measure = { path = "../measure", version = "=1.14.6" } -solana-perf = { path = "../perf", version = "=1.14.6" } -solana-poh = { path = "../poh", version = "=1.14.6" } -solana-runtime = { path = "../runtime", version = "=1.14.6" } -solana-sdk = { path = "../sdk", version = "=1.14.6" } -solana-streamer = { path = "../streamer", version = "=1.14.6" } -solana-version = { path = "../version", version = "=1.14.6" } +solana-client = { path = "../client", version = "=1.14.7" } +solana-core = { path = "../core", version = "=1.14.7" } +solana-gossip = { path = "../gossip", version = "=1.14.7" } +solana-ledger = { path = "../ledger", version = "=1.14.7" } +solana-logger = { path = "../logger", version = "=1.14.7" } +solana-measure = { path = "../measure", version = "=1.14.7" } +solana-perf = { path = "../perf", version = "=1.14.7" } +solana-poh = { path = "../poh", version = "=1.14.7" } +solana-runtime = { path = "../runtime", version = "=1.14.7" } +solana-sdk = { path = "../sdk", version = "=1.14.7" } +solana-streamer = { path = "../streamer", version = "=1.14.7" } +solana-version = { path = "../version", version = "=1.14.7" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/banks-client/Cargo.toml b/banks-client/Cargo.toml index be4f11d6f45680..f9d7b6ecedefb0 100644 --- a/banks-client/Cargo.toml +++ b/banks-client/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-banks-client" -version = "1.14.6" +version = "1.14.7" description = "Solana banks client" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,17 +12,17 @@ edition = "2021" [dependencies] borsh = "0.9.3" futures = "0.3" -solana-banks-interface = { path = "../banks-interface", version = "=1.14.6" } -solana-program = { path = "../sdk/program", version = "=1.14.6" } -solana-sdk = { path = "../sdk", version = "=1.14.6" } +solana-banks-interface = { path = "../banks-interface", version = "=1.14.7" } +solana-program = { path = "../sdk/program", version = "=1.14.7" } +solana-sdk = { path = "../sdk", version = "=1.14.7" } tarpc = { version = "0.29.0", features = ["full"] } thiserror = "1.0" tokio = { version = "~1.14.1", features = ["full"] } tokio-serde = { version = "0.8", features = ["bincode"] } [dev-dependencies] -solana-banks-server = { path = "../banks-server", version = "=1.14.6" } -solana-runtime = { path = "../runtime", version = "=1.14.6" } +solana-banks-server = { path = "../banks-server", version = "=1.14.7" } +solana-runtime = { path = "../runtime", version = "=1.14.7" } [lib] crate-type = ["lib"] diff --git a/banks-interface/Cargo.toml b/banks-interface/Cargo.toml index b847576af5287f..2d373068c735db 100644 --- a/banks-interface/Cargo.toml +++ b/banks-interface/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-banks-interface" -version = "1.14.6" +version = "1.14.7" description = "Solana banks RPC interface" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -11,7 +11,7 @@ edition = "2021" [dependencies] serde = { version = "1.0.138", features = ["derive"] } -solana-sdk = { path = "../sdk", version = "=1.14.6" } +solana-sdk = { path = "../sdk", version = "=1.14.7" } tarpc = { version = "0.29.0", features = ["full"] } [lib] diff --git a/banks-server/Cargo.toml b/banks-server/Cargo.toml index b97bae6e1e7b46..bb02649c15b449 100644 --- a/banks-server/Cargo.toml +++ b/banks-server/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-banks-server" -version = "1.14.6" +version = "1.14.7" description = "Solana banks server" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,11 +13,11 @@ edition = "2021" bincode = "1.3.3" crossbeam-channel = "0.5" futures = "0.3" -solana-banks-interface = { path = "../banks-interface", version = "=1.14.6" } -solana-client = { path = "../client", version = "=1.14.6" } -solana-runtime = { path = "../runtime", version = "=1.14.6" } -solana-sdk = { path = "../sdk", version = "=1.14.6" } -solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.6" } +solana-banks-interface = { path = "../banks-interface", version = "=1.14.7" } +solana-client = { path = "../client", version = "=1.14.7" } +solana-runtime = { path = "../runtime", version = "=1.14.7" } +solana-sdk = { path = "../sdk", version = "=1.14.7" } +solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.7" } tarpc = { version = "0.29.0", features = ["full"] } tokio = { version = "1", features = ["full"] } tokio-serde = { version = "0.8", features = ["bincode"] } diff --git a/bench-streamer/Cargo.toml b/bench-streamer/Cargo.toml index 91e40ac62a6970..77ea61ab09d2ae 100644 --- a/bench-streamer/Cargo.toml +++ b/bench-streamer/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-bench-streamer" -version = "1.14.6" +version = "1.14.7" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -11,9 +11,9 @@ publish = false [dependencies] clap = { version = "3.1.5", features = ["cargo"] } crossbeam-channel = "0.5" -solana-net-utils = { path = "../net-utils", version = "=1.14.6" } -solana-streamer = { path = "../streamer", version = "=1.14.6" } -solana-version = { path = "../version", version = "=1.14.6" } +solana-net-utils = { path = "../net-utils", version = "=1.14.7" } +solana-streamer = { path = "../streamer", version = "=1.14.7" } +solana-version = { path = "../version", version = "=1.14.7" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/bench-tps/Cargo.toml b/bench-tps/Cargo.toml index 4fbfd8b13d9d1f..e058e21afe6446 100644 --- a/bench-tps/Cargo.toml +++ b/bench-tps/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-bench-tps" -version = "1.14.6" +version = "1.14.7" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -15,28 +15,28 @@ log = "0.4.17" rayon = "1.5.3" serde_json = "1.0.81" serde_yaml = "0.8.26" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.6" } -solana-cli-config = { path = "../cli-config", version = "=1.14.6" } -solana-client = { path = "../client", version = "=1.14.6" } -solana-core = { path = "../core", version = "=1.14.6" } -solana-faucet = { path = "../faucet", version = "=1.14.6" } -solana-genesis = { path = "../genesis", version = "=1.14.6" } -solana-gossip = { path = "../gossip", version = "=1.14.6" } -solana-logger = { path = "../logger", version = "=1.14.6" } -solana-measure = { path = "../measure", version = "=1.14.6" } -solana-metrics = { path = "../metrics", version = "=1.14.6" } -solana-net-utils = { path = "../net-utils", version = "=1.14.6" } -solana-rpc = { path = "../rpc", version = "=1.14.6" } -solana-runtime = { path = "../runtime", version = "=1.14.6" } -solana-sdk = { path = "../sdk", version = "=1.14.6" } -solana-streamer = { path = "../streamer", version = "=1.14.6" } -solana-version = { path = "../version", version = "=1.14.6" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.7" } +solana-cli-config = { path = "../cli-config", version = "=1.14.7" } +solana-client = { path = "../client", version = "=1.14.7" } +solana-core = { path = "../core", version = "=1.14.7" } +solana-faucet = { path = "../faucet", version = "=1.14.7" } +solana-genesis = { path = "../genesis", version = "=1.14.7" } +solana-gossip = { path = "../gossip", version = "=1.14.7" } +solana-logger = { path = "../logger", version = "=1.14.7" } +solana-measure = { path = "../measure", version = "=1.14.7" } +solana-metrics = { path = "../metrics", version = "=1.14.7" } +solana-net-utils = { path = "../net-utils", version = "=1.14.7" } +solana-rpc = { path = "../rpc", version = "=1.14.7" } +solana-runtime = { path = "../runtime", version = "=1.14.7" } +solana-sdk = { path = "../sdk", version = "=1.14.7" } +solana-streamer = { path = "../streamer", version = "=1.14.7" } +solana-version = { path = "../version", version = "=1.14.7" } thiserror = "1.0" [dev-dependencies] serial_test = "0.8.0" -solana-local-cluster = { path = "../local-cluster", version = "=1.14.6" } -solana-test-validator = { path = "../test-validator", version = "=1.14.6" } +solana-local-cluster = { path = "../local-cluster", version = "=1.14.7" } +solana-test-validator = { path = "../test-validator", version = "=1.14.7" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/bloom/Cargo.toml b/bloom/Cargo.toml index 9423fbc62a52f6..7615a6e39d4fcd 100644 --- a/bloom/Cargo.toml +++ b/bloom/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bloom" -version = "1.14.6" +version = "1.14.7" description = "Solana bloom filter" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -17,9 +17,9 @@ rand = "0.7.0" rayon = "1.5.3" serde = { version = "1.0.138", features = ["rc"] } serde_derive = "1.0.103" -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.6" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.6" } -solana-sdk = { path = "../sdk", version = "=1.14.6" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.7" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.7" } +solana-sdk = { path = "../sdk", version = "=1.14.7" } [lib] crate-type = ["lib"] diff --git a/bucket_map/Cargo.toml b/bucket_map/Cargo.toml index 7167d58ea69369..7042c346f683b2 100644 --- a/bucket_map/Cargo.toml +++ b/bucket_map/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bucket-map" -version = "1.14.6" +version = "1.14.7" description = "solana-bucket-map" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-bucket-map" @@ -15,14 +15,14 @@ log = { version = "0.4.17" } memmap2 = "0.5.3" modular-bitfield = "0.11.2" rand = "0.7.0" -solana-measure = { path = "../measure", version = "=1.14.6" } -solana-sdk = { path = "../sdk", version = "=1.14.6" } +solana-measure = { path = "../measure", version = "=1.14.7" } +solana-sdk = { path = "../sdk", version = "=1.14.7" } tempfile = "3.3.0" [dev-dependencies] fs_extra = "1.2.0" rayon = "1.5.3" -solana-logger = { path = "../logger", version = "=1.14.6" } +solana-logger = { path = "../logger", version = "=1.14.7" } [lib] crate-type = ["lib"] diff --git a/clap-utils/Cargo.toml b/clap-utils/Cargo.toml index 471114cd0e95ba..d63c32cb68de9c 100644 --- a/clap-utils/Cargo.toml +++ b/clap-utils/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-clap-utils" -version = "1.14.6" +version = "1.14.7" description = "Solana utilities for the clap" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,9 +13,9 @@ edition = "2021" chrono = "0.4" clap = "2.33.0" rpassword = "6.0" -solana-perf = { path = "../perf", version = "=1.14.6" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.6", default-features = false } -solana-sdk = { path = "../sdk", version = "=1.14.6" } +solana-perf = { path = "../perf", version = "=1.14.7" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.7", default-features = false } +solana-sdk = { path = "../sdk", version = "=1.14.7" } thiserror = "1.0.31" tiny-bip39 = "0.8.2" uriparse = "0.6.4" diff --git a/clap-v3-utils/Cargo.toml b/clap-v3-utils/Cargo.toml index 411a5edd5073c6..7e9f33e2701800 100644 --- a/clap-v3-utils/Cargo.toml +++ b/clap-v3-utils/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-clap-v3-utils" -version = "1.14.6" +version = "1.14.7" description = "Solana utilities for the clap v3" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,9 +13,9 @@ edition = "2021" chrono = "0.4" clap = { version = "3.1.5", features = ["cargo"] } rpassword = "6.0" -solana-perf = { path = "../perf", version = "=1.14.6" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.6", default-features = false } -solana-sdk = { path = "../sdk", version = "=1.14.6" } +solana-perf = { path = "../perf", version = "=1.14.7" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.7", default-features = false } +solana-sdk = { path = "../sdk", version = "=1.14.7" } thiserror = "1.0.31" tiny-bip39 = "0.8.2" uriparse = "0.6.4" diff --git a/cli-config/Cargo.toml b/cli-config/Cargo.toml index 7171df99048a15..efd93ed1ef2284 100644 --- a/cli-config/Cargo.toml +++ b/cli-config/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-cli-config" description = "Blockchain, Rebuilt for Scale" -version = "1.14.6" +version = "1.14.7" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -15,8 +15,8 @@ lazy_static = "1.4.0" serde = "1.0.138" serde_derive = "1.0.103" serde_yaml = "0.8.26" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.6" } -solana-sdk = { path = "../sdk", version = "=1.14.6" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.7" } +solana-sdk = { path = "../sdk", version = "=1.14.7" } url = "2.2.2" [dev-dependencies] diff --git a/cli-output/Cargo.toml b/cli-output/Cargo.toml index 4f5b5f41360fc0..544b6fc2ab8319 100644 --- a/cli-output/Cargo.toml +++ b/cli-output/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-cli-output" description = "Blockchain, Rebuilt for Scale" -version = "1.14.6" +version = "1.14.7" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -21,13 +21,13 @@ pretty-hex = "0.3.0" semver = "1.0.10" serde = "1.0.138" serde_json = "1.0.81" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.6" } -solana-clap-utils = { path = "../clap-utils", version = "=1.14.6" } -solana-cli-config = { path = "../cli-config", version = "=1.14.6" } -solana-client = { path = "../client", version = "=1.14.6" } -solana-sdk = { path = "../sdk", version = "=1.14.6" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.6" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.6" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.7" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.7" } +solana-cli-config = { path = "../cli-config", version = "=1.14.7" } +solana-client = { path = "../client", version = "=1.14.7" } +solana-sdk = { path = "../sdk", version = "=1.14.7" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.7" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.7" } spl-memo = { version = "=3.0.1", features = ["no-entrypoint"] } [dev-dependencies] diff --git a/cli/Cargo.toml b/cli/Cargo.toml index 9edc1947390393..3c7015611504c0 100644 --- a/cli/Cargo.toml +++ b/cli/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-cli" description = "Blockchain, Rebuilt for Scale" -version = "1.14.6" +version = "1.14.7" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -27,30 +27,30 @@ semver = "1.0.10" serde = "1.0.138" serde_derive = "1.0.103" serde_json = "1.0.81" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.6" } -solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.6" } -solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.6" } -solana-clap-utils = { path = "../clap-utils", version = "=1.14.6" } -solana-cli-config = { path = "../cli-config", version = "=1.14.6" } -solana-cli-output = { path = "../cli-output", version = "=1.14.6" } -solana-client = { path = "../client", version = "=1.14.6" } -solana-config-program = { path = "../programs/config", version = "=1.14.6" } -solana-faucet = { path = "../faucet", version = "=1.14.6" } -solana-logger = { path = "../logger", version = "=1.14.6" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.6" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.6" } -solana-sdk = { path = "../sdk", version = "=1.14.6" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.6" } -solana-version = { path = "../version", version = "=1.14.6" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.6" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.7" } +solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.7" } +solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.7" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.7" } +solana-cli-config = { path = "../cli-config", version = "=1.14.7" } +solana-cli-output = { path = "../cli-output", version = "=1.14.7" } +solana-client = { path = "../client", version = "=1.14.7" } +solana-config-program = { path = "../programs/config", version = "=1.14.7" } +solana-faucet = { path = "../faucet", version = "=1.14.7" } +solana-logger = { path = "../logger", version = "=1.14.7" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.7" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.7" } +solana-sdk = { path = "../sdk", version = "=1.14.7" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.7" } +solana-version = { path = "../version", version = "=1.14.7" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.7" } solana_rbpf = "=0.2.31" spl-memo = { version = "=3.0.1", features = ["no-entrypoint"] } thiserror = "1.0.31" tiny-bip39 = "0.8.2" [dev-dependencies] -solana-streamer = { path = "../streamer", version = "=1.14.6" } -solana-test-validator = { path = "../test-validator", version = "=1.14.6" } +solana-streamer = { path = "../streamer", version = "=1.14.7" } +solana-test-validator = { path = "../test-validator", version = "=1.14.7" } tempfile = "3.3.0" [[bin]] diff --git a/client-test/Cargo.toml b/client-test/Cargo.toml index 67022513c9a130..2c9a7286e79aa3 100644 --- a/client-test/Cargo.toml +++ b/client-test/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-client-test" -version = "1.14.6" +version = "1.14.7" description = "Solana RPC Test" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,25 +14,25 @@ publish = false futures-util = "0.3.21" serde_json = "1.0.81" serial_test = "0.8.0" -solana-client = { path = "../client", version = "=1.14.6" } -solana-ledger = { path = "../ledger", version = "=1.14.6" } -solana-measure = { path = "../measure", version = "=1.14.6" } -solana-merkle-tree = { path = "../merkle-tree", version = "=1.14.6" } -solana-metrics = { path = "../metrics", version = "=1.14.6" } -solana-perf = { path = "../perf", version = "=1.14.6" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.6" } -solana-rpc = { path = "../rpc", version = "=1.14.6" } -solana-runtime = { path = "../runtime", version = "=1.14.6" } -solana-sdk = { path = "../sdk", version = "=1.14.6" } -solana-streamer = { path = "../streamer", version = "=1.14.6" } -solana-test-validator = { path = "../test-validator", version = "=1.14.6" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.6" } -solana-version = { path = "../version", version = "=1.14.6" } +solana-client = { path = "../client", version = "=1.14.7" } +solana-ledger = { path = "../ledger", version = "=1.14.7" } +solana-measure = { path = "../measure", version = "=1.14.7" } +solana-merkle-tree = { path = "../merkle-tree", version = "=1.14.7" } +solana-metrics = { path = "../metrics", version = "=1.14.7" } +solana-perf = { path = "../perf", version = "=1.14.7" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.7" } +solana-rpc = { path = "../rpc", version = "=1.14.7" } +solana-runtime = { path = "../runtime", version = "=1.14.7" } +solana-sdk = { path = "../sdk", version = "=1.14.7" } +solana-streamer = { path = "../streamer", version = "=1.14.7" } +solana-test-validator = { path = "../test-validator", version = "=1.14.7" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.7" } +solana-version = { path = "../version", version = "=1.14.7" } systemstat = "0.1.11" tokio = { version = "~1.14.1", features = ["full"] } [dev-dependencies] -solana-logger = { path = "../logger", version = "=1.14.6" } +solana-logger = { path = "../logger", version = "=1.14.7" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/client/Cargo.toml b/client/Cargo.toml index 8da9ddb478f610..2cae3af533868e 100644 --- a/client/Cargo.toml +++ b/client/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-client" -version = "1.14.6" +version = "1.14.7" description = "Solana Client" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -38,17 +38,17 @@ semver = "1.0.10" serde = "1.0.138" serde_derive = "1.0.103" serde_json = "1.0.81" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.6" } -solana-clap-utils = { path = "../clap-utils", version = "=1.14.6" } -solana-faucet = { path = "../faucet", version = "=1.14.6" } -solana-measure = { path = "../measure", version = "=1.14.6" } -solana-metrics = { path = "../metrics", version = "=1.14.6" } -solana-net-utils = { path = "../net-utils", version = "=1.14.6" } -solana-sdk = { path = "../sdk", version = "=1.14.6" } -solana-streamer = { path = "../streamer", version = "=1.14.6" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.6" } -solana-version = { path = "../version", version = "=1.14.6" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.6" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.7" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.7" } +solana-faucet = { path = "../faucet", version = "=1.14.7" } +solana-measure = { path = "../measure", version = "=1.14.7" } +solana-metrics = { path = "../metrics", version = "=1.14.7" } +solana-net-utils = { path = "../net-utils", version = "=1.14.7" } +solana-sdk = { path = "../sdk", version = "=1.14.7" } +solana-streamer = { path = "../streamer", version = "=1.14.7" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.7" } +solana-version = { path = "../version", version = "=1.14.7" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.7" } spl-token-2022 = { version = "=0.4.2", features = ["no-entrypoint"] } thiserror = "1.0" tokio = { version = "1", features = ["full"] } @@ -61,8 +61,8 @@ url = "2.2.2" anyhow = "1.0.58" assert_matches = "1.5.0" jsonrpc-http-server = "18.0.0" -solana-logger = { path = "../logger", version = "=1.14.6" } -solana-perf = { path = "../perf", version = "=1.14.6" } +solana-logger = { path = "../logger", version = "=1.14.7" } +solana-perf = { path = "../perf", version = "=1.14.7" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/core/Cargo.toml b/core/Cargo.toml index 5d8113fb4c380e..b353e6fa448d68 100644 --- a/core/Cargo.toml +++ b/core/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "solana-core" description = "Blockchain, Rebuilt for Scale" -version = "1.14.6" +version = "1.14.7" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-core" readme = "../README.md" @@ -36,30 +36,30 @@ rand_chacha = "0.2.2" rayon = "1.5.3" serde = "1.0.138" serde_derive = "1.0.103" -solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.6" } -solana-bloom = { path = "../bloom", version = "=1.14.6" } -solana-client = { path = "../client", version = "=1.14.6" } -solana-entry = { path = "../entry", version = "=1.14.6" } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.6" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.6" } -solana-geyser-plugin-manager = { path = "../geyser-plugin-manager", version = "=1.14.6" } -solana-gossip = { path = "../gossip", version = "=1.14.6" } -solana-ledger = { path = "../ledger", version = "=1.14.6" } -solana-measure = { path = "../measure", version = "=1.14.6" } -solana-metrics = { path = "../metrics", version = "=1.14.6" } -solana-net-utils = { path = "../net-utils", version = "=1.14.6" } -solana-perf = { path = "../perf", version = "=1.14.6" } -solana-poh = { path = "../poh", version = "=1.14.6" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.6" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.6" } -solana-rpc = { path = "../rpc", version = "=1.14.6" } -solana-runtime = { path = "../runtime", version = "=1.14.6" } -solana-sdk = { path = "../sdk", version = "=1.14.6" } -solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.6" } -solana-streamer = { path = "../streamer", version = "=1.14.6" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.6" } -solana-version = { path = "../version", version = "=1.14.6" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.6" } +solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.7" } +solana-bloom = { path = "../bloom", version = "=1.14.7" } +solana-client = { path = "../client", version = "=1.14.7" } +solana-entry = { path = "../entry", version = "=1.14.7" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.7" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.7" } +solana-geyser-plugin-manager = { path = "../geyser-plugin-manager", version = "=1.14.7" } +solana-gossip = { path = "../gossip", version = "=1.14.7" } +solana-ledger = { path = "../ledger", version = "=1.14.7" } +solana-measure = { path = "../measure", version = "=1.14.7" } +solana-metrics = { path = "../metrics", version = "=1.14.7" } +solana-net-utils = { path = "../net-utils", version = "=1.14.7" } +solana-perf = { path = "../perf", version = "=1.14.7" } +solana-poh = { path = "../poh", version = "=1.14.7" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.7" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.7" } +solana-rpc = { path = "../rpc", version = "=1.14.7" } +solana-runtime = { path = "../runtime", version = "=1.14.7" } +solana-sdk = { path = "../sdk", version = "=1.14.7" } +solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.7" } +solana-streamer = { path = "../streamer", version = "=1.14.7" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.7" } +solana-version = { path = "../version", version = "=1.14.7" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.7" } sys-info = "0.9.1" tempfile = "3.3.0" thiserror = "1.0" @@ -71,9 +71,9 @@ matches = "0.1.9" raptorq = "1.7.0" serde_json = "1.0.81" serial_test = "0.8.0" -solana-logger = { path = "../logger", version = "=1.14.6" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.6" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.6" } +solana-logger = { path = "../logger", version = "=1.14.7" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.7" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.7" } static_assertions = "1.1.0" systemstat = "0.1.11" test-case = "2.1.0" diff --git a/dos/Cargo.toml b/dos/Cargo.toml index d30b5cb24d9b33..92e53897079403 100644 --- a/dos/Cargo.toml +++ b/dos/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-dos" -version = "1.14.6" +version = "1.14.7" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -17,23 +17,23 @@ itertools = "0.10.3" log = "0.4.17" rand = "0.7.0" serde = "1.0.138" -solana-bench-tps = { path = "../bench-tps", version = "=1.14.6" } -solana-client = { path = "../client", version = "=1.14.6" } -solana-core = { path = "../core", version = "=1.14.6" } -solana-faucet = { path = "../faucet", version = "=1.14.6" } -solana-gossip = { path = "../gossip", version = "=1.14.6" } -solana-logger = { path = "../logger", version = "=1.14.6" } -solana-measure = { path = "../measure", version = "=1.14.6" } -solana-net-utils = { path = "../net-utils", version = "=1.14.6" } -solana-perf = { path = "../perf", version = "=1.14.6" } -solana-rpc = { path = "../rpc", version = "=1.14.6" } -solana-sdk = { path = "../sdk", version = "=1.14.6" } -solana-streamer = { path = "../streamer", version = "=1.14.6" } -solana-version = { path = "../version", version = "=1.14.6" } +solana-bench-tps = { path = "../bench-tps", version = "=1.14.7" } +solana-client = { path = "../client", version = "=1.14.7" } +solana-core = { path = "../core", version = "=1.14.7" } +solana-faucet = { path = "../faucet", version = "=1.14.7" } +solana-gossip = { path = "../gossip", version = "=1.14.7" } +solana-logger = { path = "../logger", version = "=1.14.7" } +solana-measure = { path = "../measure", version = "=1.14.7" } +solana-net-utils = { path = "../net-utils", version = "=1.14.7" } +solana-perf = { path = "../perf", version = "=1.14.7" } +solana-rpc = { path = "../rpc", version = "=1.14.7" } +solana-sdk = { path = "../sdk", version = "=1.14.7" } +solana-streamer = { path = "../streamer", version = "=1.14.7" } +solana-version = { path = "../version", version = "=1.14.7" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] [dev-dependencies] serial_test = "0.8.0" -solana-local-cluster = { path = "../local-cluster", version = "=1.14.6" } +solana-local-cluster = { path = "../local-cluster", version = "=1.14.7" } diff --git a/download-utils/Cargo.toml b/download-utils/Cargo.toml index 51d6633195620c..86c174b2376d5d 100644 --- a/download-utils/Cargo.toml +++ b/download-utils/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-download-utils" -version = "1.14.6" +version = "1.14.7" description = "Solana Download Utils" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,8 +14,8 @@ console = "0.15.0" indicatif = "0.16.2" log = "0.4.17" reqwest = { version = "0.11.11", default-features = false, features = ["blocking", "brotli", "deflate", "gzip", "rustls-tls", "json"] } -solana-runtime = { path = "../runtime", version = "=1.14.6" } -solana-sdk = { path = "../sdk", version = "=1.14.6" } +solana-runtime = { path = "../runtime", version = "=1.14.7" } +solana-sdk = { path = "../sdk", version = "=1.14.7" } [lib] crate-type = ["lib"] diff --git a/entry/Cargo.toml b/entry/Cargo.toml index 7169f7b3ffa7f3..137532d0add857 100644 --- a/entry/Cargo.toml +++ b/entry/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-entry" -version = "1.14.6" +version = "1.14.7" description = "Solana Entry" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -19,16 +19,16 @@ log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" serde = "1.0.138" -solana-measure = { path = "../measure", version = "=1.14.6" } -solana-merkle-tree = { path = "../merkle-tree", version = "=1.14.6" } -solana-metrics = { path = "../metrics", version = "=1.14.6" } -solana-perf = { path = "../perf", version = "=1.14.6" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.6" } -solana-sdk = { path = "../sdk", version = "=1.14.6" } +solana-measure = { path = "../measure", version = "=1.14.7" } +solana-merkle-tree = { path = "../merkle-tree", version = "=1.14.7" } +solana-metrics = { path = "../metrics", version = "=1.14.7" } +solana-perf = { path = "../perf", version = "=1.14.7" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.7" } +solana-sdk = { path = "../sdk", version = "=1.14.7" } [dev-dependencies] matches = "0.1.9" -solana-logger = { path = "../logger", version = "=1.14.6" } +solana-logger = { path = "../logger", version = "=1.14.7" } [lib] crate-type = ["lib"] diff --git a/faucet/Cargo.toml b/faucet/Cargo.toml index 840931d3f57616..dedef49481bf4c 100644 --- a/faucet/Cargo.toml +++ b/faucet/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-faucet" -version = "1.14.6" +version = "1.14.7" description = "Solana Faucet" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -17,12 +17,12 @@ crossbeam-channel = "0.5" log = "0.4.17" serde = "1.0.138" serde_derive = "1.0.103" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.6" } -solana-cli-config = { path = "../cli-config", version = "=1.14.6" } -solana-logger = { path = "../logger", version = "=1.14.6" } -solana-metrics = { path = "../metrics", version = "=1.14.6" } -solana-sdk = { path = "../sdk", version = "=1.14.6" } -solana-version = { path = "../version", version = "=1.14.6" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.7" } +solana-cli-config = { path = "../cli-config", version = "=1.14.7" } +solana-logger = { path = "../logger", version = "=1.14.7" } +solana-metrics = { path = "../metrics", version = "=1.14.7" } +solana-sdk = { path = "../sdk", version = "=1.14.7" } +solana-version = { path = "../version", version = "=1.14.7" } spl-memo = { version = "=3.0.1", features = ["no-entrypoint"] } thiserror = "1.0" tokio = { version = "1", features = ["full"] } diff --git a/frozen-abi/Cargo.toml b/frozen-abi/Cargo.toml index 75d2ea232e5423..828412a5774489 100644 --- a/frozen-abi/Cargo.toml +++ b/frozen-abi/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-frozen-abi" -version = "1.14.6" +version = "1.14.7" description = "Solana Frozen ABI" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -20,7 +20,7 @@ serde_bytes = "0.11" serde_derive = "1.0" serde_json = "1.0" sha2 = "0.10.2" -solana-frozen-abi-macro = { path = "macro", version = "=1.14.6" } +solana-frozen-abi-macro = { path = "macro", version = "=1.14.7" } thiserror = "1.0" [target.'cfg(not(target_os = "solana"))'.dependencies] @@ -43,7 +43,7 @@ rand_core = { version = "0.6.3", features = ["alloc", "getrandom", "std"] } subtle = { version = "2.4.1", features = ["default", "i128", "std"] } [target.'cfg(not(target_os = "solana"))'.dev-dependencies] -solana-logger = { path = "../logger", version = "=1.14.6" } +solana-logger = { path = "../logger", version = "=1.14.7" } [build-dependencies] rustc_version = "0.4" diff --git a/frozen-abi/macro/Cargo.toml b/frozen-abi/macro/Cargo.toml index 7b013c48c3e7e9..b7bae5d0e9a772 100644 --- a/frozen-abi/macro/Cargo.toml +++ b/frozen-abi/macro/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-frozen-abi-macro" -version = "1.14.6" +version = "1.14.7" description = "Solana Frozen ABI Macro" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/genesis-utils/Cargo.toml b/genesis-utils/Cargo.toml index 7599e627f18e41..569029cbc1131e 100644 --- a/genesis-utils/Cargo.toml +++ b/genesis-utils/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-genesis-utils" -version = "1.14.6" +version = "1.14.7" description = "Solana Genesis Utils" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,9 +10,9 @@ documentation = "https://docs.rs/solana-download-utils" edition = "2021" [dependencies] -solana-download-utils = { path = "../download-utils", version = "=1.14.6" } -solana-runtime = { path = "../runtime", version = "=1.14.6" } -solana-sdk = { path = "../sdk", version = "=1.14.6" } +solana-download-utils = { path = "../download-utils", version = "=1.14.7" } +solana-runtime = { path = "../runtime", version = "=1.14.7" } +solana-sdk = { path = "../sdk", version = "=1.14.7" } [lib] crate-type = ["lib"] diff --git a/genesis/Cargo.toml b/genesis/Cargo.toml index c5f2bd18ebf7bc..321cddc73c09d6 100644 --- a/genesis/Cargo.toml +++ b/genesis/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-genesis" description = "Blockchain, Rebuilt for Scale" -version = "1.14.6" +version = "1.14.7" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -15,16 +15,16 @@ clap = "2.33.1" serde = "1.0.138" serde_json = "1.0.81" serde_yaml = "0.8.26" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.6" } -solana-cli-config = { path = "../cli-config", version = "=1.14.6" } -solana-entry = { path = "../entry", version = "=1.14.6" } -solana-ledger = { path = "../ledger", version = "=1.14.6" } -solana-logger = { path = "../logger", version = "=1.14.6" } -solana-runtime = { path = "../runtime", version = "=1.14.6" } -solana-sdk = { path = "../sdk", version = "=1.14.6" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.6" } -solana-version = { path = "../version", version = "=1.14.6" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.6" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.7" } +solana-cli-config = { path = "../cli-config", version = "=1.14.7" } +solana-entry = { path = "../entry", version = "=1.14.7" } +solana-ledger = { path = "../ledger", version = "=1.14.7" } +solana-logger = { path = "../logger", version = "=1.14.7" } +solana-runtime = { path = "../runtime", version = "=1.14.7" } +solana-sdk = { path = "../sdk", version = "=1.14.7" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.7" } +solana-version = { path = "../version", version = "=1.14.7" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.7" } tempfile = "3.3.0" [[bin]] diff --git a/geyser-plugin-interface/Cargo.toml b/geyser-plugin-interface/Cargo.toml index 174703009df3ad..f51df386c1e9e9 100644 --- a/geyser-plugin-interface/Cargo.toml +++ b/geyser-plugin-interface/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-geyser-plugin-interface" description = "The Solana Geyser plugin interface." -version = "1.14.6" +version = "1.14.7" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -11,8 +11,8 @@ documentation = "https://docs.rs/solana-geyser-plugin-interface" [dependencies] log = "0.4.17" -solana-sdk = { path = "../sdk", version = "=1.14.6" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.6" } +solana-sdk = { path = "../sdk", version = "=1.14.7" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.7" } thiserror = "1.0.31" [package.metadata.docs.rs] diff --git a/geyser-plugin-manager/Cargo.toml b/geyser-plugin-manager/Cargo.toml index 41b58468a1dac4..d574c7a382aab2 100644 --- a/geyser-plugin-manager/Cargo.toml +++ b/geyser-plugin-manager/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-geyser-plugin-manager" description = "The Solana Geyser plugin manager." -version = "1.14.6" +version = "1.14.7" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -16,13 +16,13 @@ json5 = "0.4.1" libloading = "0.7.3" log = "0.4.17" serde_json = "1.0.81" -solana-geyser-plugin-interface = { path = "../geyser-plugin-interface", version = "=1.14.6" } -solana-measure = { path = "../measure", version = "=1.14.6" } -solana-metrics = { path = "../metrics", version = "=1.14.6" } -solana-rpc = { path = "../rpc", version = "=1.14.6" } -solana-runtime = { path = "../runtime", version = "=1.14.6" } -solana-sdk = { path = "../sdk", version = "=1.14.6" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.6" } +solana-geyser-plugin-interface = { path = "../geyser-plugin-interface", version = "=1.14.7" } +solana-measure = { path = "../measure", version = "=1.14.7" } +solana-metrics = { path = "../metrics", version = "=1.14.7" } +solana-rpc = { path = "../rpc", version = "=1.14.7" } +solana-runtime = { path = "../runtime", version = "=1.14.7" } +solana-sdk = { path = "../sdk", version = "=1.14.7" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.7" } thiserror = "1.0.31" [package.metadata.docs.rs] diff --git a/gossip/Cargo.toml b/gossip/Cargo.toml index a8776b8a7f0566..19b6fe7b83e3ed 100644 --- a/gossip/Cargo.toml +++ b/gossip/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-gossip" description = "Blockchain, Rebuilt for Scale" -version = "1.14.6" +version = "1.14.7" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -27,24 +27,24 @@ rayon = "1.5.3" serde = "1.0.138" serde_bytes = "0.11" serde_derive = "1.0.103" -solana-bloom = { path = "../bloom", version = "=1.14.6" } -solana-clap-utils = { path = "../clap-utils", version = "=1.14.6" } -solana-client = { path = "../client", version = "=1.14.6" } -solana-entry = { path = "../entry", version = "=1.14.6" } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.6" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.6" } -solana-ledger = { path = "../ledger", version = "=1.14.6" } -solana-logger = { path = "../logger", version = "=1.14.6" } -solana-measure = { path = "../measure", version = "=1.14.6" } -solana-metrics = { path = "../metrics", version = "=1.14.6" } -solana-net-utils = { path = "../net-utils", version = "=1.14.6" } -solana-perf = { path = "../perf", version = "=1.14.6" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.6" } -solana-runtime = { path = "../runtime", version = "=1.14.6" } -solana-sdk = { path = "../sdk", version = "=1.14.6" } -solana-streamer = { path = "../streamer", version = "=1.14.6" } -solana-version = { path = "../version", version = "=1.14.6" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.6" } +solana-bloom = { path = "../bloom", version = "=1.14.7" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.7" } +solana-client = { path = "../client", version = "=1.14.7" } +solana-entry = { path = "../entry", version = "=1.14.7" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.7" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.7" } +solana-ledger = { path = "../ledger", version = "=1.14.7" } +solana-logger = { path = "../logger", version = "=1.14.7" } +solana-measure = { path = "../measure", version = "=1.14.7" } +solana-metrics = { path = "../metrics", version = "=1.14.7" } +solana-net-utils = { path = "../net-utils", version = "=1.14.7" } +solana-perf = { path = "../perf", version = "=1.14.7" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.7" } +solana-runtime = { path = "../runtime", version = "=1.14.7" } +solana-sdk = { path = "../sdk", version = "=1.14.7" } +solana-streamer = { path = "../streamer", version = "=1.14.7" } +solana-version = { path = "../version", version = "=1.14.7" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.7" } thiserror = "1.0" [dev-dependencies] diff --git a/install/Cargo.toml b/install/Cargo.toml index 71e1d3bacb6a26..7d731aa56974f6 100644 --- a/install/Cargo.toml +++ b/install/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-install" description = "The solana cluster software installer" -version = "1.14.6" +version = "1.14.7" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -26,12 +26,12 @@ reqwest = { version = "0.11.11", default-features = false, features = ["blocking semver = "1.0.10" serde = { version = "1.0.138", features = ["derive"] } serde_yaml = "0.8.26" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.6" } -solana-client = { path = "../client", version = "=1.14.6" } -solana-config-program = { path = "../programs/config", version = "=1.14.6" } -solana-logger = { path = "../logger", version = "=1.14.6" } -solana-sdk = { path = "../sdk", version = "=1.14.6" } -solana-version = { path = "../version", version = "=1.14.6" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.7" } +solana-client = { path = "../client", version = "=1.14.7" } +solana-config-program = { path = "../programs/config", version = "=1.14.7" } +solana-logger = { path = "../logger", version = "=1.14.7" } +solana-sdk = { path = "../sdk", version = "=1.14.7" } +solana-version = { path = "../version", version = "=1.14.7" } tar = "0.4.38" tempfile = "3.3.0" url = "2.2.2" diff --git a/keygen/Cargo.toml b/keygen/Cargo.toml index 5fc64cb082c368..2f85d89f1a8ae4 100644 --- a/keygen/Cargo.toml +++ b/keygen/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-keygen" -version = "1.14.6" +version = "1.14.7" description = "Solana key generation utility" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,11 +14,11 @@ bs58 = "0.4.0" clap = { version = "3.1.5", features = ["cargo"] } dirs-next = "2.0.0" num_cpus = "1.13.1" -solana-clap-v3-utils = { path = "../clap-v3-utils", version = "=1.14.6" } -solana-cli-config = { path = "../cli-config", version = "=1.14.6" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.6" } -solana-sdk = { path = "../sdk", version = "=1.14.6" } -solana-version = { path = "../version", version = "=1.14.6" } +solana-clap-v3-utils = { path = "../clap-v3-utils", version = "=1.14.7" } +solana-cli-config = { path = "../cli-config", version = "=1.14.7" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.7" } +solana-sdk = { path = "../sdk", version = "=1.14.7" } +solana-version = { path = "../version", version = "=1.14.7" } tiny-bip39 = "0.8.2" [[bin]] diff --git a/ledger-tool/Cargo.toml b/ledger-tool/Cargo.toml index a12084b13a0e45..4b1ffc84001da3 100644 --- a/ledger-tool/Cargo.toml +++ b/ledger-tool/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-ledger-tool" description = "Blockchain, Rebuilt for Scale" -version = "1.14.6" +version = "1.14.7" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -22,20 +22,20 @@ log = { version = "0.4.17" } regex = "1" serde = { version = "1.0", features = ["derive"] } serde_json = "1.0.81" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.6" } -solana-cli-output = { path = "../cli-output", version = "=1.14.6" } -solana-core = { path = "../core", version = "=1.14.6" } -solana-entry = { path = "../entry", version = "=1.14.6" } -solana-ledger = { path = "../ledger", version = "=1.14.6" } -solana-logger = { path = "../logger", version = "=1.14.6" } -solana-measure = { path = "../measure", version = "=1.14.6" } -solana-runtime = { path = "../runtime", version = "=1.14.6" } -solana-sdk = { path = "../sdk", version = "=1.14.6" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.6" } -solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.6" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.6" } -solana-version = { path = "../version", version = "=1.14.6" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.6" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.7" } +solana-cli-output = { path = "../cli-output", version = "=1.14.7" } +solana-core = { path = "../core", version = "=1.14.7" } +solana-entry = { path = "../entry", version = "=1.14.7" } +solana-ledger = { path = "../ledger", version = "=1.14.7" } +solana-logger = { path = "../logger", version = "=1.14.7" } +solana-measure = { path = "../measure", version = "=1.14.7" } +solana-runtime = { path = "../runtime", version = "=1.14.7" } +solana-sdk = { path = "../sdk", version = "=1.14.7" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.7" } +solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.7" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.7" } +solana-version = { path = "../version", version = "=1.14.7" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.7" } tokio = { version = "1", features = ["full"] } [target.'cfg(not(target_env = "msvc"))'.dependencies] diff --git a/ledger/Cargo.toml b/ledger/Cargo.toml index 92010ac8e5dfdf..641e9715d85fa6 100644 --- a/ledger/Cargo.toml +++ b/ledger/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-ledger" -version = "1.14.6" +version = "1.14.7" description = "Solana ledger" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -35,23 +35,23 @@ reed-solomon-erasure = { version = "6.0.0", features = ["simd-accel"] } serde = "1.0.138" serde_bytes = "0.11.6" sha2 = "0.10.2" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.6" } -solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.6" } -solana-entry = { path = "../entry", version = "=1.14.6" } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.6" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.6" } -solana-measure = { path = "../measure", version = "=1.14.6" } -solana-metrics = { path = "../metrics", version = "=1.14.6" } -solana-perf = { path = "../perf", version = "=1.14.6" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.6" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.6" } -solana-runtime = { path = "../runtime", version = "=1.14.6" } -solana-sdk = { path = "../sdk", version = "=1.14.6" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.6" } -solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.6" } -solana-storage-proto = { path = "../storage-proto", version = "=1.14.6" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.6" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.6" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.7" } +solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.7" } +solana-entry = { path = "../entry", version = "=1.14.7" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.7" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.7" } +solana-measure = { path = "../measure", version = "=1.14.7" } +solana-metrics = { path = "../metrics", version = "=1.14.7" } +solana-perf = { path = "../perf", version = "=1.14.7" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.7" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.7" } +solana-runtime = { path = "../runtime", version = "=1.14.7" } +solana-sdk = { path = "../sdk", version = "=1.14.7" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.7" } +solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.7" } +solana-storage-proto = { path = "../storage-proto", version = "=1.14.7" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.7" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.7" } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } spl-token-2022 = { version = "=0.4.2", features = ["no-entrypoint"] } static_assertions = "1.1.0" @@ -71,8 +71,8 @@ features = ["lz4"] [dev-dependencies] bs58 = "0.4.0" matches = "0.1.9" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.6" } -solana-logger = { path = "../logger", version = "=1.14.6" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.7" } +solana-logger = { path = "../logger", version = "=1.14.7" } test-case = "2.1.0" [build-dependencies] diff --git a/local-cluster/Cargo.toml b/local-cluster/Cargo.toml index b860052367fad5..bdf6b3f0a0646c 100644 --- a/local-cluster/Cargo.toml +++ b/local-cluster/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-local-cluster" description = "Blockchain, Rebuilt for Scale" -version = "1.14.6" +version = "1.14.7" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -16,25 +16,25 @@ itertools = "0.10.3" log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" -solana-client = { path = "../client", version = "=1.14.6" } -solana-config-program = { path = "../programs/config", version = "=1.14.6" } -solana-core = { path = "../core", version = "=1.14.6" } -solana-entry = { path = "../entry", version = "=1.14.6" } -solana-gossip = { path = "../gossip", version = "=1.14.6" } -solana-ledger = { path = "../ledger", version = "=1.14.6" } -solana-runtime = { path = "../runtime", version = "=1.14.6" } -solana-sdk = { path = "../sdk", version = "=1.14.6" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.6" } -solana-streamer = { path = "../streamer", version = "=1.14.6" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.6" } +solana-client = { path = "../client", version = "=1.14.7" } +solana-config-program = { path = "../programs/config", version = "=1.14.7" } +solana-core = { path = "../core", version = "=1.14.7" } +solana-entry = { path = "../entry", version = "=1.14.7" } +solana-gossip = { path = "../gossip", version = "=1.14.7" } +solana-ledger = { path = "../ledger", version = "=1.14.7" } +solana-runtime = { path = "../runtime", version = "=1.14.7" } +solana-sdk = { path = "../sdk", version = "=1.14.7" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.7" } +solana-streamer = { path = "../streamer", version = "=1.14.7" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.7" } tempfile = "3.3.0" [dev-dependencies] assert_matches = "1.5.0" gag = "1.0.0" serial_test = "0.8.0" -solana-download-utils = { path = "../download-utils", version = "=1.14.6" } -solana-logger = { path = "../logger", version = "=1.14.6" } +solana-download-utils = { path = "../download-utils", version = "=1.14.7" } +solana-logger = { path = "../logger", version = "=1.14.7" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/log-analyzer/Cargo.toml b/log-analyzer/Cargo.toml index b46b5f569bbc05..2e2912f0cda207 100644 --- a/log-analyzer/Cargo.toml +++ b/log-analyzer/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-log-analyzer" description = "The solana cluster network analysis tool" -version = "1.14.6" +version = "1.14.7" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,8 +14,8 @@ byte-unit = "4.0.14" clap = { version = "3.1.5", features = ["cargo"] } serde = "1.0.138" serde_json = "1.0.81" -solana-logger = { path = "../logger", version = "=1.14.6" } -solana-version = { path = "../version", version = "=1.14.6" } +solana-logger = { path = "../logger", version = "=1.14.7" } +solana-version = { path = "../version", version = "=1.14.7" } [[bin]] name = "solana-log-analyzer" diff --git a/logger/Cargo.toml b/logger/Cargo.toml index 6849a3cababa89..bec748396bebc3 100644 --- a/logger/Cargo.toml +++ b/logger/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-logger" -version = "1.14.6" +version = "1.14.7" description = "Solana Logger" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/measure/Cargo.toml b/measure/Cargo.toml index 3b835e904dba0f..4325a91e079b31 100644 --- a/measure/Cargo.toml +++ b/measure/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "solana-measure" description = "Blockchain, Rebuilt for Scale" -version = "1.14.6" +version = "1.14.7" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-measure" readme = "../README.md" @@ -12,7 +12,7 @@ edition = "2021" [dependencies] log = "0.4.17" -solana-sdk = { path = "../sdk", version = "=1.14.6" } +solana-sdk = { path = "../sdk", version = "=1.14.7" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/merkle-root-bench/Cargo.toml b/merkle-root-bench/Cargo.toml index 669f9e4c36e499..0f06b8fc89ce38 100644 --- a/merkle-root-bench/Cargo.toml +++ b/merkle-root-bench/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-merkle-root-bench" -version = "1.14.6" +version = "1.14.7" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -11,11 +11,11 @@ publish = false [dependencies] clap = "2.33.1" log = "0.4.17" -solana-logger = { path = "../logger", version = "=1.14.6" } -solana-measure = { path = "../measure", version = "=1.14.6" } -solana-runtime = { path = "../runtime", version = "=1.14.6" } -solana-sdk = { path = "../sdk", version = "=1.14.6" } -solana-version = { path = "../version", version = "=1.14.6" } +solana-logger = { path = "../logger", version = "=1.14.7" } +solana-measure = { path = "../measure", version = "=1.14.7" } +solana-runtime = { path = "../runtime", version = "=1.14.7" } +solana-sdk = { path = "../sdk", version = "=1.14.7" } +solana-version = { path = "../version", version = "=1.14.7" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/merkle-tree/Cargo.toml b/merkle-tree/Cargo.toml index e91dfbcf32efe8..c3c0ba1d7e1d8c 100644 --- a/merkle-tree/Cargo.toml +++ b/merkle-tree/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-merkle-tree" -version = "1.14.6" +version = "1.14.7" description = "Solana Merkle Tree" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -11,7 +11,7 @@ edition = "2021" [dependencies] fast-math = "0.1" -solana-program = { path = "../sdk/program", version = "=1.14.6" } +solana-program = { path = "../sdk/program", version = "=1.14.7" } # This can go once the BPF toolchain target Rust 1.42.0+ [target.bpfel-unknown-unknown.dependencies] diff --git a/metrics/Cargo.toml b/metrics/Cargo.toml index af0d33eec5ceaa..598d5a90aee02b 100644 --- a/metrics/Cargo.toml +++ b/metrics/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-metrics" -version = "1.14.6" +version = "1.14.7" description = "Solana Metrics" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -15,7 +15,7 @@ gethostname = "0.2.3" lazy_static = "1.4.0" log = "0.4.17" reqwest = { version = "0.11.11", default-features = false, features = ["blocking", "brotli", "deflate", "gzip", "rustls-tls", "json"] } -solana-sdk = { path = "../sdk", version = "=1.14.6" } +solana-sdk = { path = "../sdk", version = "=1.14.7" } [dev-dependencies] env_logger = "0.9.0" diff --git a/net-shaper/Cargo.toml b/net-shaper/Cargo.toml index c406413039442d..83f9c156a8d641 100644 --- a/net-shaper/Cargo.toml +++ b/net-shaper/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-net-shaper" description = "The solana cluster network shaping tool" -version = "1.14.6" +version = "1.14.7" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,7 +14,7 @@ clap = { version = "3.1.5", features = ["cargo"] } rand = "0.7.0" serde = { version = "1.0.138", features = ["derive"] } serde_json = "1.0.81" -solana-logger = { path = "../logger", version = "=1.14.6" } +solana-logger = { path = "../logger", version = "=1.14.7" } [[bin]] name = "solana-net-shaper" diff --git a/net-utils/Cargo.toml b/net-utils/Cargo.toml index 72a1f4c29de3fc..7de76c7cbf88cf 100644 --- a/net-utils/Cargo.toml +++ b/net-utils/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-net-utils" -version = "1.14.6" +version = "1.14.7" description = "Solana Network Utilities" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -19,9 +19,9 @@ rand = "0.7.0" serde = "1.0.138" serde_derive = "1.0.103" socket2 = "0.4.4" -solana-logger = { path = "../logger", version = "=1.14.6" } -solana-sdk = { path = "../sdk", version = "=1.14.6" } -solana-version = { path = "../version", version = "=1.14.6" } +solana-logger = { path = "../logger", version = "=1.14.7" } +solana-sdk = { path = "../sdk", version = "=1.14.7" } +solana-version = { path = "../version", version = "=1.14.7" } tokio = { version = "1", features = ["full"] } url = "2.2.2" diff --git a/notifier/Cargo.toml b/notifier/Cargo.toml index 7e3eb2b960f8b7..88cd5020879906 100644 --- a/notifier/Cargo.toml +++ b/notifier/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-notifier" -version = "1.14.6" +version = "1.14.7" description = "Solana Notifier" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/perf/Cargo.toml b/perf/Cargo.toml index 0d94b40732d14b..08d185c29d18f5 100644 --- a/perf/Cargo.toml +++ b/perf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-perf" -version = "1.14.6" +version = "1.14.7" description = "Solana Performance APIs" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -22,10 +22,10 @@ log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" serde = "1.0.138" -solana-metrics = { path = "../metrics", version = "=1.14.6" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.6" } -solana-sdk = { path = "../sdk", version = "=1.14.6" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.6" } +solana-metrics = { path = "../metrics", version = "=1.14.7" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.7" } +solana-sdk = { path = "../sdk", version = "=1.14.7" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.7" } [target."cfg(target_os = \"linux\")".dependencies] caps = "0.5.3" @@ -37,7 +37,7 @@ name = "solana_perf" [dev-dependencies] matches = "0.1.9" -solana-logger = { path = "../logger", version = "=1.14.6" } +solana-logger = { path = "../logger", version = "=1.14.7" } [[bench]] name = "sigverify" diff --git a/poh-bench/Cargo.toml b/poh-bench/Cargo.toml index f027125bcca54d..e57853a892dcf4 100644 --- a/poh-bench/Cargo.toml +++ b/poh-bench/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-poh-bench" -version = "1.14.6" +version = "1.14.7" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,12 +14,12 @@ clap = { version = "3.1.5", features = ["cargo"] } log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" -solana-entry = { path = "../entry", version = "=1.14.6" } -solana-logger = { path = "../logger", version = "=1.14.6" } -solana-measure = { path = "../measure", version = "=1.14.6" } -solana-perf = { path = "../perf", version = "=1.14.6" } -solana-sdk = { path = "../sdk", version = "=1.14.6" } -solana-version = { path = "../version", version = "=1.14.6" } +solana-entry = { path = "../entry", version = "=1.14.7" } +solana-logger = { path = "../logger", version = "=1.14.7" } +solana-measure = { path = "../measure", version = "=1.14.7" } +solana-perf = { path = "../perf", version = "=1.14.7" } +solana-sdk = { path = "../sdk", version = "=1.14.7" } +solana-version = { path = "../version", version = "=1.14.7" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/poh/Cargo.toml b/poh/Cargo.toml index a99d5a8a5dbc7f..a4bc4974973ea5 100644 --- a/poh/Cargo.toml +++ b/poh/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-poh" -version = "1.14.6" +version = "1.14.7" description = "Solana PoH" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,21 +13,21 @@ edition = "2021" core_affinity = "0.5.10" crossbeam-channel = "0.5" log = "0.4.17" -solana-entry = { path = "../entry", version = "=1.14.6" } -solana-ledger = { path = "../ledger", version = "=1.14.6" } -solana-measure = { path = "../measure", version = "=1.14.6" } -solana-metrics = { path = "../metrics", version = "=1.14.6" } -solana-runtime = { path = "../runtime", version = "=1.14.6" } -solana-sdk = { path = "../sdk", version = "=1.14.6" } -solana-sys-tuner = { path = "../sys-tuner", version = "=1.14.6" } +solana-entry = { path = "../entry", version = "=1.14.7" } +solana-ledger = { path = "../ledger", version = "=1.14.7" } +solana-measure = { path = "../measure", version = "=1.14.7" } +solana-metrics = { path = "../metrics", version = "=1.14.7" } +solana-runtime = { path = "../runtime", version = "=1.14.7" } +solana-sdk = { path = "../sdk", version = "=1.14.7" } +solana-sys-tuner = { path = "../sys-tuner", version = "=1.14.7" } thiserror = "1.0" [dev-dependencies] bincode = "1.3.3" matches = "0.1.9" rand = "0.7.0" -solana-logger = { path = "../logger", version = "=1.14.6" } -solana-perf = { path = "../perf", version = "=1.14.6" } +solana-logger = { path = "../logger", version = "=1.14.7" } +solana-perf = { path = "../perf", version = "=1.14.7" } [lib] crate-type = ["lib"] diff --git a/program-runtime/Cargo.toml b/program-runtime/Cargo.toml index 8177de791a18c3..8f3c4387ef88c5 100644 --- a/program-runtime/Cargo.toml +++ b/program-runtime/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-program-runtime" -version = "1.14.6" +version = "1.14.7" description = "Solana program runtime" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -21,16 +21,16 @@ num-derive = { version = "0.3" } num-traits = { version = "0.2" } rand = "0.7.0" serde = { version = "1.0.129", features = ["derive", "rc"] } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.6" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.6" } -solana-measure = { path = "../measure", version = "=1.14.6" } -solana-metrics = { path = "../metrics", version = "=1.14.6" } -solana-sdk = { path = "../sdk", version = "=1.14.6" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.7" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.7" } +solana-measure = { path = "../measure", version = "=1.14.7" } +solana-metrics = { path = "../metrics", version = "=1.14.7" } +solana-sdk = { path = "../sdk", version = "=1.14.7" } thiserror = "1.0" enum-iterator = "0.8.1" [dev-dependencies] -solana-logger = { path = "../logger", version = "=1.14.6" } +solana-logger = { path = "../logger", version = "=1.14.7" } [lib] crate-type = ["lib"] diff --git a/program-test/Cargo.toml b/program-test/Cargo.toml index 37af926467729f..d970613d98aa81 100644 --- a/program-test/Cargo.toml +++ b/program-test/Cargo.toml @@ -5,7 +5,7 @@ edition = "2021" license = "Apache-2.0" name = "solana-program-test" repository = "https://github.com/solana-labs/solana" -version = "1.14.6" +version = "1.14.7" [dependencies] assert_matches = "1.5.0" @@ -15,13 +15,13 @@ bincode = "1.3.3" chrono-humanize = "0.2.1" log = "0.4.17" serde = "1.0.138" -solana-banks-client = { path = "../banks-client", version = "=1.14.6" } -solana-banks-server = { path = "../banks-server", version = "=1.14.6" } -solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.6" } -solana-logger = { path = "../logger", version = "=1.14.6" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.6" } -solana-runtime = { path = "../runtime", version = "=1.14.6" } -solana-sdk = { path = "../sdk", version = "=1.14.6" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.6" } +solana-banks-client = { path = "../banks-client", version = "=1.14.7" } +solana-banks-server = { path = "../banks-server", version = "=1.14.7" } +solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.7" } +solana-logger = { path = "../logger", version = "=1.14.7" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.7" } +solana-runtime = { path = "../runtime", version = "=1.14.7" } +solana-sdk = { path = "../sdk", version = "=1.14.7" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.7" } thiserror = "1.0" tokio = { version = "1", features = ["full"] } diff --git a/programs/address-lookup-table-tests/Cargo.toml b/programs/address-lookup-table-tests/Cargo.toml index f89310be3f68b2..e4b5686fc5aa5b 100644 --- a/programs/address-lookup-table-tests/Cargo.toml +++ b/programs/address-lookup-table-tests/Cargo.toml @@ -3,7 +3,7 @@ [package] name = "solana-address-lookup-table-program-tests" -version = "1.14.6" +version = "1.14.7" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" @@ -14,9 +14,9 @@ publish = false [dev-dependencies] assert_matches = "1.5.0" bincode = "1.3.3" -solana-address-lookup-table-program = { path = "../address-lookup-table", version = "=1.14.6" } -solana-program-test = { path = "../../program-test", version = "=1.14.6" } -solana-sdk = { path = "../../sdk", version = "=1.14.6" } +solana-address-lookup-table-program = { path = "../address-lookup-table", version = "=1.14.7" } +solana-program-test = { path = "../../program-test", version = "=1.14.7" } +solana-sdk = { path = "../../sdk", version = "=1.14.7" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/address-lookup-table/Cargo.toml b/programs/address-lookup-table/Cargo.toml index b3f3cef5ac3e33..47d0a32502d080 100644 --- a/programs/address-lookup-table/Cargo.toml +++ b/programs/address-lookup-table/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-address-lookup-table-program" -version = "1.14.6" +version = "1.14.7" description = "Solana address lookup table program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -16,14 +16,14 @@ log = "0.4.17" num-derive = "0.3" num-traits = "0.2" serde = { version = "1.0.138", features = ["derive"] } -solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.6" } -solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.6" } -solana-program = { path = "../../sdk/program", version = "=1.14.6" } +solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.7" } +solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.7" } +solana-program = { path = "../../sdk/program", version = "=1.14.7" } thiserror = "1.0" [target.'cfg(not(target_os = "solana"))'.dependencies] -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.6" } -solana-sdk = { path = "../../sdk", version = "=1.14.6" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.7" } +solana-sdk = { path = "../../sdk", version = "=1.14.7" } [build-dependencies] rustc_version = "0.4" diff --git a/programs/bpf-loader-tests/Cargo.toml b/programs/bpf-loader-tests/Cargo.toml index b22d51472c4a5a..b238caf34a9a93 100644 --- a/programs/bpf-loader-tests/Cargo.toml +++ b/programs/bpf-loader-tests/Cargo.toml @@ -3,7 +3,7 @@ [package] name = "solana-bpf-loader-program-tests" -version = "1.14.6" +version = "1.14.7" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" @@ -14,9 +14,9 @@ publish = false [dev-dependencies] assert_matches = "1.5.0" bincode = "1.3.3" -solana-bpf-loader-program = { path = "../bpf_loader", version = "=1.14.6" } -solana-program-test = { path = "../../program-test", version = "=1.14.6" } -solana-sdk = { path = "../../sdk", version = "=1.14.6" } +solana-bpf-loader-program = { path = "../bpf_loader", version = "=1.14.7" } +solana-program-test = { path = "../../program-test", version = "=1.14.7" } +solana-sdk = { path = "../../sdk", version = "=1.14.7" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/bpf/Cargo.lock b/programs/bpf/Cargo.lock index 9ffd58c2fcb7f5..b743f5523574b8 100644 --- a/programs/bpf/Cargo.lock +++ b/programs/bpf/Cargo.lock @@ -4063,7 +4063,7 @@ dependencies = [ [[package]] name = "solana-account-decoder" -version = "1.14.6" +version = "1.14.7" dependencies = [ "Inflector", "base64 0.13.0", @@ -4076,7 +4076,7 @@ dependencies = [ "serde_json", "solana-address-lookup-table-program", "solana-config-program", - "solana-sdk 1.14.6", + "solana-sdk 1.14.7", "solana-vote-program", "spl-token", "spl-token-2022", @@ -4086,7 +4086,7 @@ dependencies = [ [[package]] name = "solana-address-lookup-table-program" -version = "1.14.6" +version = "1.14.7" dependencies = [ "bincode", "bytemuck", @@ -4095,23 +4095,23 @@ dependencies = [ "num-traits", "rustc_version", "serde", - "solana-frozen-abi 1.14.6", - "solana-frozen-abi-macro 1.14.6", - "solana-program 1.14.6", + "solana-frozen-abi 1.14.7", + "solana-frozen-abi-macro 1.14.7", + "solana-program 1.14.7", "solana-program-runtime", - "solana-sdk 1.14.6", + "solana-sdk 1.14.7", "thiserror", ] [[package]] name = "solana-banks-client" -version = "1.14.6" +version = "1.14.7" dependencies = [ "borsh", "futures 0.3.21", "solana-banks-interface", - "solana-program 1.14.6", - "solana-sdk 1.14.6", + "solana-program 1.14.7", + "solana-sdk 1.14.7", "tarpc", "thiserror", "tokio", @@ -4120,16 +4120,16 @@ dependencies = [ [[package]] name = "solana-banks-interface" -version = "1.14.6" +version = "1.14.7" dependencies = [ "serde", - "solana-sdk 1.14.6", + "solana-sdk 1.14.7", "tarpc", ] [[package]] name = "solana-banks-server" -version = "1.14.6" +version = "1.14.7" dependencies = [ "bincode", "crossbeam-channel", @@ -4137,7 +4137,7 @@ dependencies = [ "solana-banks-interface", "solana-client", "solana-runtime", - "solana-sdk 1.14.6", + "solana-sdk 1.14.7", "solana-send-transaction-service", "tarpc", "tokio", @@ -4147,7 +4147,7 @@ dependencies = [ [[package]] name = "solana-bloom" -version = "1.14.6" +version = "1.14.7" dependencies = [ "bv", "fnv", @@ -4157,14 +4157,14 @@ dependencies = [ "rustc_version", "serde", "serde_derive", - "solana-frozen-abi 1.14.6", - "solana-frozen-abi-macro 1.14.6", - "solana-sdk 1.14.6", + "solana-frozen-abi 1.14.7", + "solana-frozen-abi-macro 1.14.7", + "solana-sdk 1.14.7", ] [[package]] name = "solana-bpf-loader-program" -version = "1.14.6" +version = "1.14.7" dependencies = [ "bincode", "byteorder 1.4.3", @@ -4173,15 +4173,15 @@ dependencies = [ "solana-measure", "solana-metrics", "solana-program-runtime", - "solana-sdk 1.14.6", - "solana-zk-token-sdk 1.14.6", + "solana-sdk 1.14.7", + "solana-zk-token-sdk 1.14.7", "solana_rbpf", "thiserror", ] [[package]] name = "solana-bpf-programs" -version = "1.14.6" +version = "1.14.7" dependencies = [ "bincode", "byteorder 1.4.3", @@ -4197,11 +4197,11 @@ dependencies = [ "solana-bpf-rust-realloc-invoke", "solana-cli-output", "solana-ledger", - "solana-logger 1.14.6", + "solana-logger 1.14.7", "solana-measure", "solana-program-runtime", "solana-runtime", - "solana-sdk 1.14.6", + "solana-sdk 1.14.7", "solana-transaction-status", "solana_rbpf", "walkdir", @@ -4209,385 +4209,385 @@ dependencies = [ [[package]] name = "solana-bpf-rust-128bit" -version = "1.14.6" +version = "1.14.7" dependencies = [ "solana-bpf-rust-128bit-dep", - "solana-program 1.14.6", + "solana-program 1.14.7", ] [[package]] name = "solana-bpf-rust-128bit-dep" -version = "1.14.6" +version = "1.14.7" dependencies = [ - "solana-program 1.14.6", + "solana-program 1.14.7", ] [[package]] name = "solana-bpf-rust-alloc" -version = "1.14.6" +version = "1.14.7" dependencies = [ - "solana-program 1.14.6", + "solana-program 1.14.7", ] [[package]] name = "solana-bpf-rust-call-depth" -version = "1.14.6" +version = "1.14.7" dependencies = [ - "solana-program 1.14.6", + "solana-program 1.14.7", ] [[package]] name = "solana-bpf-rust-caller-access" -version = "1.14.6" +version = "1.14.7" dependencies = [ - "solana-program 1.14.6", + "solana-program 1.14.7", ] [[package]] name = "solana-bpf-rust-curve25519" -version = "1.14.6" +version = "1.14.7" dependencies = [ - "solana-program 1.14.6", - "solana-zk-token-sdk 1.14.6", + "solana-program 1.14.7", + "solana-zk-token-sdk 1.14.7", ] [[package]] name = "solana-bpf-rust-custom-heap" -version = "1.14.6" +version = "1.14.7" dependencies = [ - "solana-program 1.14.6", + "solana-program 1.14.7", ] [[package]] name = "solana-bpf-rust-dep-crate" -version = "1.14.6" +version = "1.14.7" dependencies = [ "byteorder 1.4.3", "solana-address-lookup-table-program", - "solana-program 1.14.6", + "solana-program 1.14.7", ] [[package]] name = "solana-bpf-rust-deprecated-loader" -version = "1.14.6" +version = "1.14.7" dependencies = [ - "solana-program 1.14.6", + "solana-program 1.14.7", ] [[package]] name = "solana-bpf-rust-dup-accounts" -version = "1.14.6" +version = "1.14.7" dependencies = [ - "solana-program 1.14.6", + "solana-program 1.14.7", ] [[package]] name = "solana-bpf-rust-error-handling" -version = "1.14.6" +version = "1.14.7" dependencies = [ "num-derive", "num-traits", - "solana-program 1.14.6", + "solana-program 1.14.7", "thiserror", ] [[package]] name = "solana-bpf-rust-external-spend" -version = "1.14.6" +version = "1.14.7" dependencies = [ - "solana-program 1.14.6", + "solana-program 1.14.7", ] [[package]] name = "solana-bpf-rust-finalize" -version = "1.14.6" +version = "1.14.7" dependencies = [ - "solana-program 1.14.6", + "solana-program 1.14.7", ] [[package]] name = "solana-bpf-rust-get-minimum-delegation" -version = "1.14.6" +version = "1.14.7" dependencies = [ - "solana-program 1.14.6", + "solana-program 1.14.7", ] [[package]] name = "solana-bpf-rust-inner_instruction_alignment_check" -version = "1.14.6" +version = "1.14.7" dependencies = [ - "solana-program 1.14.6", + "solana-program 1.14.7", ] [[package]] name = "solana-bpf-rust-instruction-introspection" -version = "1.14.6" +version = "1.14.7" dependencies = [ - "solana-program 1.14.6", + "solana-program 1.14.7", ] [[package]] name = "solana-bpf-rust-invoke" -version = "1.14.6" +version = "1.14.7" dependencies = [ "solana-bpf-rust-invoked", - "solana-program 1.14.6", + "solana-program 1.14.7", ] [[package]] name = "solana-bpf-rust-invoke-and-error" -version = "1.14.6" +version = "1.14.7" dependencies = [ - "solana-program 1.14.6", + "solana-program 1.14.7", ] [[package]] name = "solana-bpf-rust-invoke-and-ok" -version = "1.14.6" +version = "1.14.7" dependencies = [ - "solana-program 1.14.6", + "solana-program 1.14.7", ] [[package]] name = "solana-bpf-rust-invoke-and-return" -version = "1.14.6" +version = "1.14.7" dependencies = [ - "solana-program 1.14.6", + "solana-program 1.14.7", ] [[package]] name = "solana-bpf-rust-invoked" -version = "1.14.6" +version = "1.14.7" dependencies = [ - "solana-program 1.14.6", + "solana-program 1.14.7", ] [[package]] name = "solana-bpf-rust-iter" -version = "1.14.6" +version = "1.14.7" dependencies = [ - "solana-program 1.14.6", + "solana-program 1.14.7", ] [[package]] name = "solana-bpf-rust-log-data" -version = "1.14.6" +version = "1.14.7" dependencies = [ - "solana-program 1.14.6", + "solana-program 1.14.7", ] [[package]] name = "solana-bpf-rust-many-args" -version = "1.14.6" +version = "1.14.7" dependencies = [ "solana-bpf-rust-many-args-dep", - "solana-program 1.14.6", + "solana-program 1.14.7", ] [[package]] name = "solana-bpf-rust-many-args-dep" -version = "1.14.6" +version = "1.14.7" dependencies = [ - "solana-program 1.14.6", + "solana-program 1.14.7", ] [[package]] name = "solana-bpf-rust-mem" -version = "1.14.6" +version = "1.14.7" dependencies = [ - "solana-program 1.14.6", + "solana-program 1.14.7", "solana-program-runtime", "solana-program-test", - "solana-sdk 1.14.6", + "solana-sdk 1.14.7", ] [[package]] name = "solana-bpf-rust-membuiltins" -version = "1.14.6" +version = "1.14.7" dependencies = [ "solana-bpf-rust-mem", - "solana-program 1.14.6", + "solana-program 1.14.7", ] [[package]] name = "solana-bpf-rust-noop" -version = "1.14.6" +version = "1.14.7" dependencies = [ - "solana-program 1.14.6", + "solana-program 1.14.7", ] [[package]] name = "solana-bpf-rust-panic" -version = "1.14.6" +version = "1.14.7" dependencies = [ - "solana-program 1.14.6", + "solana-program 1.14.7", ] [[package]] name = "solana-bpf-rust-param-passing" -version = "1.14.6" +version = "1.14.7" dependencies = [ "solana-bpf-rust-param-passing-dep", - "solana-program 1.14.6", + "solana-program 1.14.7", ] [[package]] name = "solana-bpf-rust-param-passing-dep" -version = "1.14.6" +version = "1.14.7" dependencies = [ - "solana-program 1.14.6", + "solana-program 1.14.7", ] [[package]] name = "solana-bpf-rust-rand" -version = "1.14.6" +version = "1.14.7" dependencies = [ "getrandom 0.1.14", "rand 0.7.3", - "solana-program 1.14.6", + "solana-program 1.14.7", ] [[package]] name = "solana-bpf-rust-realloc" -version = "1.14.6" +version = "1.14.7" dependencies = [ - "solana-program 1.14.6", + "solana-program 1.14.7", ] [[package]] name = "solana-bpf-rust-realloc-invoke" -version = "1.14.6" +version = "1.14.7" dependencies = [ "solana-bpf-rust-realloc", - "solana-program 1.14.6", + "solana-program 1.14.7", ] [[package]] name = "solana-bpf-rust-ro-account_modify" -version = "1.14.6" +version = "1.14.7" dependencies = [ - "solana-program 1.14.6", + "solana-program 1.14.7", ] [[package]] name = "solana-bpf-rust-ro-modify" -version = "1.14.6" +version = "1.14.7" dependencies = [ - "solana-program 1.14.6", + "solana-program 1.14.7", ] [[package]] name = "solana-bpf-rust-sanity" -version = "1.14.6" +version = "1.14.7" dependencies = [ - "solana-program 1.14.6", + "solana-program 1.14.7", "solana-program-runtime", "solana-program-test", - "solana-sdk 1.14.6", + "solana-sdk 1.14.7", ] [[package]] name = "solana-bpf-rust-secp256k1-recover" -version = "1.14.6" +version = "1.14.7" dependencies = [ "libsecp256k1 0.7.0", - "solana-program 1.14.6", + "solana-program 1.14.7", ] [[package]] name = "solana-bpf-rust-sha" -version = "1.14.6" +version = "1.14.7" dependencies = [ "blake3", - "solana-program 1.14.6", + "solana-program 1.14.7", ] [[package]] name = "solana-bpf-rust-sibling-instructions" -version = "1.14.6" +version = "1.14.7" dependencies = [ - "solana-program 1.14.6", + "solana-program 1.14.7", ] [[package]] name = "solana-bpf-rust-sibling_inner-instructions" -version = "1.14.6" +version = "1.14.7" dependencies = [ - "solana-program 1.14.6", + "solana-program 1.14.7", ] [[package]] name = "solana-bpf-rust-simulation" -version = "1.14.6" +version = "1.14.7" dependencies = [ - "solana-logger 1.14.6", - "solana-program 1.14.6", + "solana-logger 1.14.7", + "solana-program 1.14.7", "solana-program-test", - "solana-sdk 1.14.6", + "solana-sdk 1.14.7", "solana-validator", ] [[package]] name = "solana-bpf-rust-spoof1" -version = "1.14.6" +version = "1.14.7" dependencies = [ - "solana-program 1.14.6", + "solana-program 1.14.7", ] [[package]] name = "solana-bpf-rust-spoof1-system" -version = "1.14.6" +version = "1.14.7" dependencies = [ - "solana-program 1.14.6", + "solana-program 1.14.7", ] [[package]] name = "solana-bpf-rust-sysvar" -version = "1.14.6" +version = "1.14.7" dependencies = [ - "solana-program 1.14.6", + "solana-program 1.14.7", "solana-program-runtime", "solana-program-test", - "solana-sdk 1.14.6", + "solana-sdk 1.14.7", ] [[package]] name = "solana-bpf-rust-upgradeable" -version = "1.14.6" +version = "1.14.7" dependencies = [ - "solana-program 1.14.6", + "solana-program 1.14.7", ] [[package]] name = "solana-bpf-rust-upgraded" -version = "1.14.6" +version = "1.14.7" dependencies = [ - "solana-program 1.14.6", + "solana-program 1.14.7", ] [[package]] name = "solana-bucket-map" -version = "1.14.6" +version = "1.14.7" dependencies = [ "log", "memmap2", "modular-bitfield", "rand 0.7.3", "solana-measure", - "solana-sdk 1.14.6", + "solana-sdk 1.14.7", "tempfile", ] [[package]] name = "solana-clap-utils" -version = "1.14.6" +version = "1.14.7" dependencies = [ "chrono", "clap 2.33.3", "rpassword", "solana-perf", "solana-remote-wallet", - "solana-sdk 1.14.6", + "solana-sdk 1.14.7", "thiserror", "tiny-bip39", "uriparse", @@ -4596,7 +4596,7 @@ dependencies = [ [[package]] name = "solana-cli-config" -version = "1.14.6" +version = "1.14.7" dependencies = [ "dirs-next", "lazy_static", @@ -4604,13 +4604,13 @@ dependencies = [ "serde_derive", "serde_yaml", "solana-clap-utils", - "solana-sdk 1.14.6", + "solana-sdk 1.14.7", "url 2.2.2", ] [[package]] name = "solana-cli-output" -version = "1.14.6" +version = "1.14.7" dependencies = [ "Inflector", "base64 0.13.0", @@ -4627,7 +4627,7 @@ dependencies = [ "solana-clap-utils", "solana-cli-config", "solana-client", - "solana-sdk 1.14.6", + "solana-sdk 1.14.7", "solana-transaction-status", "solana-vote-program", "spl-memo", @@ -4635,7 +4635,7 @@ dependencies = [ [[package]] name = "solana-client" -version = "1.14.6" +version = "1.14.7" dependencies = [ "async-mutex", "async-trait", @@ -4671,7 +4671,7 @@ dependencies = [ "solana-measure", "solana-metrics", "solana-net-utils", - "solana-sdk 1.14.6", + "solana-sdk 1.14.7", "solana-streamer", "solana-transaction-status", "solana-version", @@ -4687,27 +4687,27 @@ dependencies = [ [[package]] name = "solana-compute-budget-program" -version = "1.14.6" +version = "1.14.7" dependencies = [ "solana-program-runtime", - "solana-sdk 1.14.6", + "solana-sdk 1.14.7", ] [[package]] name = "solana-config-program" -version = "1.14.6" +version = "1.14.7" dependencies = [ "bincode", "chrono", "serde", "serde_derive", "solana-program-runtime", - "solana-sdk 1.14.6", + "solana-sdk 1.14.7", ] [[package]] name = "solana-core" -version = "1.14.6" +version = "1.14.7" dependencies = [ "ahash", "base64 0.13.0", @@ -4736,8 +4736,8 @@ dependencies = [ "solana-bloom", "solana-client", "solana-entry", - "solana-frozen-abi 1.14.6", - "solana-frozen-abi-macro 1.14.6", + "solana-frozen-abi 1.14.7", + "solana-frozen-abi-macro 1.14.7", "solana-geyser-plugin-manager", "solana-gossip", "solana-ledger", @@ -4750,7 +4750,7 @@ dependencies = [ "solana-rayon-threadlimit", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.6", + "solana-sdk 1.14.7", "solana-send-transaction-service", "solana-streamer", "solana-transaction-status", @@ -4766,19 +4766,19 @@ dependencies = [ [[package]] name = "solana-download-utils" -version = "1.14.6" +version = "1.14.7" dependencies = [ "console", "indicatif", "log", "reqwest", "solana-runtime", - "solana-sdk 1.14.6", + "solana-sdk 1.14.7", ] [[package]] name = "solana-entry" -version = "1.14.6" +version = "1.14.7" dependencies = [ "bincode", "crossbeam-channel", @@ -4794,12 +4794,12 @@ dependencies = [ "solana-metrics", "solana-perf", "solana-rayon-threadlimit", - "solana-sdk 1.14.6", + "solana-sdk 1.14.7", ] [[package]] name = "solana-faucet" -version = "1.14.6" +version = "1.14.7" dependencies = [ "bincode", "byteorder 1.4.3", @@ -4810,9 +4810,9 @@ dependencies = [ "serde_derive", "solana-clap-utils", "solana-cli-config", - "solana-logger 1.14.6", + "solana-logger 1.14.7", "solana-metrics", - "solana-sdk 1.14.6", + "solana-sdk 1.14.7", "solana-version", "spl-memo", "thiserror", @@ -4843,7 +4843,7 @@ dependencies = [ [[package]] name = "solana-frozen-abi" -version = "1.14.6" +version = "1.14.7" dependencies = [ "ahash", "blake3", @@ -4868,7 +4868,7 @@ dependencies = [ "serde_derive", "serde_json", "sha2 0.10.2", - "solana-frozen-abi-macro 1.14.6", + "solana-frozen-abi-macro 1.14.7", "subtle", "thiserror", ] @@ -4887,7 +4887,7 @@ dependencies = [ [[package]] name = "solana-frozen-abi-macro" -version = "1.14.6" +version = "1.14.7" dependencies = [ "proc-macro2 1.0.41", "quote 1.0.18", @@ -4897,26 +4897,26 @@ dependencies = [ [[package]] name = "solana-genesis-utils" -version = "1.14.6" +version = "1.14.7" dependencies = [ "solana-download-utils", "solana-runtime", - "solana-sdk 1.14.6", + "solana-sdk 1.14.7", ] [[package]] name = "solana-geyser-plugin-interface" -version = "1.14.6" +version = "1.14.7" dependencies = [ "log", - "solana-sdk 1.14.6", + "solana-sdk 1.14.7", "solana-transaction-status", "thiserror", ] [[package]] name = "solana-geyser-plugin-manager" -version = "1.14.6" +version = "1.14.7" dependencies = [ "bs58", "crossbeam-channel", @@ -4929,14 +4929,14 @@ dependencies = [ "solana-metrics", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.6", + "solana-sdk 1.14.7", "solana-transaction-status", "thiserror", ] [[package]] name = "solana-gossip" -version = "1.14.6" +version = "1.14.7" dependencies = [ "bincode", "bv", @@ -4960,17 +4960,17 @@ dependencies = [ "solana-clap-utils", "solana-client", "solana-entry", - "solana-frozen-abi 1.14.6", - "solana-frozen-abi-macro 1.14.6", + "solana-frozen-abi 1.14.7", + "solana-frozen-abi-macro 1.14.7", "solana-ledger", - "solana-logger 1.14.6", + "solana-logger 1.14.7", "solana-measure", "solana-metrics", "solana-net-utils", "solana-perf", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.14.6", + "solana-sdk 1.14.7", "solana-streamer", "solana-version", "solana-vote-program", @@ -4979,7 +4979,7 @@ dependencies = [ [[package]] name = "solana-ledger" -version = "1.14.6" +version = "1.14.7" dependencies = [ "assert_matches", "bincode", @@ -5011,15 +5011,15 @@ dependencies = [ "solana-account-decoder", "solana-bpf-loader-program", "solana-entry", - "solana-frozen-abi 1.14.6", - "solana-frozen-abi-macro 1.14.6", + "solana-frozen-abi 1.14.7", + "solana-frozen-abi-macro 1.14.7", "solana-measure", "solana-metrics", "solana-perf", "solana-program-runtime", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.14.6", + "solana-sdk 1.14.7", "solana-stake-program", "solana-storage-bigtable", "solana-storage-proto", @@ -5048,7 +5048,7 @@ dependencies = [ [[package]] name = "solana-logger" -version = "1.14.6" +version = "1.14.7" dependencies = [ "env_logger", "lazy_static", @@ -5057,36 +5057,36 @@ dependencies = [ [[package]] name = "solana-measure" -version = "1.14.6" +version = "1.14.7" dependencies = [ "log", - "solana-sdk 1.14.6", + "solana-sdk 1.14.7", ] [[package]] name = "solana-merkle-tree" -version = "1.14.6" +version = "1.14.7" dependencies = [ "fast-math", "matches", - "solana-program 1.14.6", + "solana-program 1.14.7", ] [[package]] name = "solana-metrics" -version = "1.14.6" +version = "1.14.7" dependencies = [ "crossbeam-channel", "gethostname", "lazy_static", "log", "reqwest", - "solana-sdk 1.14.6", + "solana-sdk 1.14.7", ] [[package]] name = "solana-net-utils" -version = "1.14.6" +version = "1.14.7" dependencies = [ "bincode", "clap 3.1.6", @@ -5097,8 +5097,8 @@ dependencies = [ "serde", "serde_derive", "socket2", - "solana-logger 1.14.6", - "solana-sdk 1.14.6", + "solana-logger 1.14.7", + "solana-sdk 1.14.7", "solana-version", "tokio", "url 2.2.2", @@ -5106,7 +5106,7 @@ dependencies = [ [[package]] name = "solana-perf" -version = "1.14.6" +version = "1.14.7" dependencies = [ "ahash", "bincode", @@ -5125,13 +5125,13 @@ dependencies = [ "serde", "solana-metrics", "solana-rayon-threadlimit", - "solana-sdk 1.14.6", + "solana-sdk 1.14.7", "solana-vote-program", ] [[package]] name = "solana-poh" -version = "1.14.6" +version = "1.14.7" dependencies = [ "core_affinity", "crossbeam-channel", @@ -5141,7 +5141,7 @@ dependencies = [ "solana-measure", "solana-metrics", "solana-runtime", - "solana-sdk 1.14.6", + "solana-sdk 1.14.7", "solana-sys-tuner", "thiserror", ] @@ -5190,7 +5190,7 @@ dependencies = [ [[package]] name = "solana-program" -version = "1.14.6" +version = "1.14.7" dependencies = [ "base64 0.13.0", "bincode", @@ -5226,9 +5226,9 @@ dependencies = [ "serde_json", "sha2 0.10.2", "sha3 0.10.1", - "solana-frozen-abi 1.14.6", - "solana-frozen-abi-macro 1.14.6", - "solana-sdk-macro 1.14.6", + "solana-frozen-abi 1.14.7", + "solana-frozen-abi-macro 1.14.7", + "solana-sdk-macro 1.14.7", "thiserror", "tiny-bip39", "wasm-bindgen", @@ -5237,7 +5237,7 @@ dependencies = [ [[package]] name = "solana-program-runtime" -version = "1.14.6" +version = "1.14.7" dependencies = [ "base64 0.13.0", "bincode", @@ -5252,17 +5252,17 @@ dependencies = [ "rand 0.7.3", "rustc_version", "serde", - "solana-frozen-abi 1.14.6", - "solana-frozen-abi-macro 1.14.6", + "solana-frozen-abi 1.14.7", + "solana-frozen-abi-macro 1.14.7", "solana-measure", "solana-metrics", - "solana-sdk 1.14.6", + "solana-sdk 1.14.7", "thiserror", ] [[package]] name = "solana-program-test" -version = "1.14.6" +version = "1.14.7" dependencies = [ "assert_matches", "async-trait", @@ -5274,10 +5274,10 @@ dependencies = [ "solana-banks-client", "solana-banks-server", "solana-bpf-loader-program", - "solana-logger 1.14.6", + "solana-logger 1.14.7", "solana-program-runtime", "solana-runtime", - "solana-sdk 1.14.6", + "solana-sdk 1.14.7", "solana-vote-program", "thiserror", "tokio", @@ -5285,7 +5285,7 @@ dependencies = [ [[package]] name = "solana-rayon-threadlimit" -version = "1.14.6" +version = "1.14.7" dependencies = [ "lazy_static", "num_cpus", @@ -5293,7 +5293,7 @@ dependencies = [ [[package]] name = "solana-remote-wallet" -version = "1.14.6" +version = "1.14.7" dependencies = [ "console", "dialoguer", @@ -5303,14 +5303,14 @@ dependencies = [ "parking_lot 0.12.1", "qstring", "semver", - "solana-sdk 1.14.6", + "solana-sdk 1.14.7", "thiserror", "uriparse", ] [[package]] name = "solana-rpc" -version = "1.14.6" +version = "1.14.7" dependencies = [ "base64 0.13.0", "bincode", @@ -5343,7 +5343,7 @@ dependencies = [ "solana-poh", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.14.6", + "solana-sdk 1.14.7", "solana-send-transaction-service", "solana-stake-program", "solana-storage-bigtable", @@ -5361,7 +5361,7 @@ dependencies = [ [[package]] name = "solana-runtime" -version = "1.14.6" +version = "1.14.7" dependencies = [ "arrayref", "bincode", @@ -5397,17 +5397,17 @@ dependencies = [ "solana-bucket-map", "solana-compute-budget-program", "solana-config-program", - "solana-frozen-abi 1.14.6", - "solana-frozen-abi-macro 1.14.6", + "solana-frozen-abi 1.14.7", + "solana-frozen-abi-macro 1.14.7", "solana-measure", "solana-metrics", "solana-program-runtime", "solana-rayon-threadlimit", - "solana-sdk 1.14.6", + "solana-sdk 1.14.7", "solana-stake-program", "solana-vote-program", "solana-zk-token-proof-program", - "solana-zk-token-sdk 1.14.6", + "solana-zk-token-sdk 1.14.7", "strum", "strum_macros", "symlink", @@ -5470,7 +5470,7 @@ dependencies = [ [[package]] name = "solana-sdk" -version = "1.14.6" +version = "1.14.7" dependencies = [ "assert_matches", "base64 0.13.0", @@ -5507,11 +5507,11 @@ dependencies = [ "serde_json", "sha2 0.10.2", "sha3 0.10.1", - "solana-frozen-abi 1.14.6", - "solana-frozen-abi-macro 1.14.6", - "solana-logger 1.14.6", - "solana-program 1.14.6", - "solana-sdk-macro 1.14.6", + "solana-frozen-abi 1.14.7", + "solana-frozen-abi-macro 1.14.7", + "solana-logger 1.14.7", + "solana-program 1.14.7", + "solana-sdk-macro 1.14.7", "thiserror", "uriparse", "wasm-bindgen", @@ -5532,7 +5532,7 @@ dependencies = [ [[package]] name = "solana-sdk-macro" -version = "1.14.6" +version = "1.14.7" dependencies = [ "bs58", "proc-macro2 1.0.41", @@ -5543,7 +5543,7 @@ dependencies = [ [[package]] name = "solana-send-transaction-service" -version = "1.14.6" +version = "1.14.7" dependencies = [ "crossbeam-channel", "log", @@ -5551,12 +5551,12 @@ dependencies = [ "solana-measure", "solana-metrics", "solana-runtime", - "solana-sdk 1.14.6", + "solana-sdk 1.14.7", ] [[package]] name = "solana-stake-program" -version = "1.14.6" +version = "1.14.7" dependencies = [ "bincode", "log", @@ -5566,18 +5566,18 @@ dependencies = [ "serde", "serde_derive", "solana-config-program", - "solana-frozen-abi 1.14.6", - "solana-frozen-abi-macro 1.14.6", + "solana-frozen-abi 1.14.7", + "solana-frozen-abi-macro 1.14.7", "solana-metrics", "solana-program-runtime", - "solana-sdk 1.14.6", + "solana-sdk 1.14.7", "solana-vote-program", "thiserror", ] [[package]] name = "solana-storage-bigtable" -version = "1.14.6" +version = "1.14.7" dependencies = [ "backoff", "bincode", @@ -5598,7 +5598,7 @@ dependencies = [ "serde_derive", "smpl_jwt", "solana-metrics", - "solana-sdk 1.14.6", + "solana-sdk 1.14.7", "solana-storage-proto", "solana-transaction-status", "thiserror", @@ -5609,7 +5609,7 @@ dependencies = [ [[package]] name = "solana-storage-proto" -version = "1.14.6" +version = "1.14.7" dependencies = [ "bincode", "bs58", @@ -5617,14 +5617,14 @@ dependencies = [ "protobuf-src", "serde", "solana-account-decoder", - "solana-sdk 1.14.6", + "solana-sdk 1.14.7", "solana-transaction-status", "tonic-build 0.8.0", ] [[package]] name = "solana-streamer" -version = "1.14.6" +version = "1.14.7" dependencies = [ "crossbeam-channel", "futures-util", @@ -5643,7 +5643,7 @@ dependencies = [ "rustls 0.20.6", "solana-metrics", "solana-perf", - "solana-sdk 1.14.6", + "solana-sdk 1.14.7", "thiserror", "tokio", "x509-parser", @@ -5651,13 +5651,13 @@ dependencies = [ [[package]] name = "solana-sys-tuner" -version = "1.14.6" +version = "1.14.7" dependencies = [ "clap 2.33.3", "libc", "log", "nix", - "solana-logger 1.14.6", + "solana-logger 1.14.7", "solana-version", "sysctl", "unix_socket2", @@ -5666,7 +5666,7 @@ dependencies = [ [[package]] name = "solana-test-validator" -version = "1.14.6" +version = "1.14.7" dependencies = [ "base64 0.13.0", "log", @@ -5677,20 +5677,20 @@ dependencies = [ "solana-core", "solana-gossip", "solana-ledger", - "solana-logger 1.14.6", + "solana-logger 1.14.7", "solana-net-utils", "solana-program-runtime", "solana-program-test", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.6", + "solana-sdk 1.14.7", "solana-streamer", "tokio", ] [[package]] name = "solana-transaction-status" -version = "1.14.6" +version = "1.14.7" dependencies = [ "Inflector", "base64 0.13.0", @@ -5706,7 +5706,7 @@ dependencies = [ "solana-address-lookup-table-program", "solana-measure", "solana-metrics", - "solana-sdk 1.14.6", + "solana-sdk 1.14.7", "solana-vote-program", "spl-associated-token-account", "spl-memo", @@ -5717,7 +5717,7 @@ dependencies = [ [[package]] name = "solana-validator" -version = "1.14.6" +version = "1.14.7" dependencies = [ "chrono", "clap 2.33.3", @@ -5748,14 +5748,14 @@ dependencies = [ "solana-genesis-utils", "solana-gossip", "solana-ledger", - "solana-logger 1.14.6", + "solana-logger 1.14.7", "solana-metrics", "solana-net-utils", "solana-perf", "solana-poh", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.6", + "solana-sdk 1.14.7", "solana-send-transaction-service", "solana-storage-bigtable", "solana-streamer", @@ -5768,21 +5768,21 @@ dependencies = [ [[package]] name = "solana-version" -version = "1.14.6" +version = "1.14.7" dependencies = [ "log", "rustc_version", "semver", "serde", "serde_derive", - "solana-frozen-abi 1.14.6", - "solana-frozen-abi-macro 1.14.6", - "solana-sdk 1.14.6", + "solana-frozen-abi 1.14.7", + "solana-frozen-abi-macro 1.14.7", + "solana-sdk 1.14.7", ] [[package]] name = "solana-vote-program" -version = "1.14.6" +version = "1.14.7" dependencies = [ "bincode", "log", @@ -5791,25 +5791,25 @@ dependencies = [ "rustc_version", "serde", "serde_derive", - "solana-frozen-abi 1.14.6", - "solana-frozen-abi-macro 1.14.6", + "solana-frozen-abi 1.14.7", + "solana-frozen-abi-macro 1.14.7", "solana-metrics", "solana-program-runtime", - "solana-sdk 1.14.6", + "solana-sdk 1.14.7", "thiserror", ] [[package]] name = "solana-zk-token-proof-program" -version = "1.14.6" +version = "1.14.7" dependencies = [ "bytemuck", "getrandom 0.1.14", "num-derive", "num-traits", "solana-program-runtime", - "solana-sdk 1.14.6", - "solana-zk-token-sdk 1.14.6", + "solana-sdk 1.14.7", + "solana-zk-token-sdk 1.14.7", ] [[package]] @@ -5844,7 +5844,7 @@ dependencies = [ [[package]] name = "solana-zk-token-sdk" -version = "1.14.6" +version = "1.14.7" dependencies = [ "aes-gcm-siv", "arrayref", @@ -5864,8 +5864,8 @@ dependencies = [ "serde", "serde_json", "sha3 0.9.1", - "solana-program 1.14.6", - "solana-sdk 1.14.6", + "solana-program 1.14.7", + "solana-sdk 1.14.7", "subtle", "thiserror", "zeroize", diff --git a/programs/bpf/Cargo.toml b/programs/bpf/Cargo.toml index d19ea44e1e8184..497664b521d828 100644 --- a/programs/bpf/Cargo.toml +++ b/programs/bpf/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "solana-bpf-programs" description = "Blockchain, Rebuilt for Scale" -version = "1.14.6" +version = "1.14.7" documentation = "https://docs.rs/solana" homepage = "https://solana.com/" readme = "README.md" @@ -26,22 +26,22 @@ itertools = "0.10.1" log = "0.4.11" miow = "0.3.6" net2 = "0.2.37" -solana-account-decoder = { path = "../../account-decoder", version = "=1.14.6" } -solana-bpf-loader-program = { path = "../bpf_loader", version = "=1.14.6" } -solana-bpf-rust-invoke = { path = "rust/invoke", version = "=1.14.6" } -solana-bpf-rust-realloc = { path = "rust/realloc", version = "=1.14.6" } -solana-bpf-rust-realloc-invoke = { path = "rust/realloc_invoke", version = "=1.14.6" } -solana-cli-output = { path = "../../cli-output", version = "=1.14.6" } -solana-logger = { path = "../../logger", version = "=1.14.6" } -solana-measure = { path = "../../measure", version = "=1.14.6" } -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.6" } -solana-runtime = { path = "../../runtime", version = "=1.14.6" } -solana-sdk = { path = "../../sdk", version = "=1.14.6" } -solana-transaction-status = { path = "../../transaction-status", version = "=1.14.6" } +solana-account-decoder = { path = "../../account-decoder", version = "=1.14.7" } +solana-bpf-loader-program = { path = "../bpf_loader", version = "=1.14.7" } +solana-bpf-rust-invoke = { path = "rust/invoke", version = "=1.14.7" } +solana-bpf-rust-realloc = { path = "rust/realloc", version = "=1.14.7" } +solana-bpf-rust-realloc-invoke = { path = "rust/realloc_invoke", version = "=1.14.7" } +solana-cli-output = { path = "../../cli-output", version = "=1.14.7" } +solana-logger = { path = "../../logger", version = "=1.14.7" } +solana-measure = { path = "../../measure", version = "=1.14.7" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.7" } +solana-runtime = { path = "../../runtime", version = "=1.14.7" } +solana-sdk = { path = "../../sdk", version = "=1.14.7" } +solana-transaction-status = { path = "../../transaction-status", version = "=1.14.7" } solana_rbpf = "=0.2.31" [dev-dependencies] -solana-ledger = { path = "../../ledger", version = "=1.14.6" } +solana-ledger = { path = "../../ledger", version = "=1.14.7" } [[bench]] name = "bpf_loader" diff --git a/programs/bpf/rust/128bit/Cargo.toml b/programs/bpf/rust/128bit/Cargo.toml index 7b0b9923959633..03fbdf5ec31883 100644 --- a/programs/bpf/rust/128bit/Cargo.toml +++ b/programs/bpf/rust/128bit/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-128bit" -version = "1.14.6" +version = "1.14.7" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ documentation = "https://docs.rs/solana-bpf-rust-128bit" edition = "2021" [dependencies] -solana-bpf-rust-128bit-dep = { path = "../128bit_dep", version = "=1.14.6" } -solana-program = { path = "../../../../sdk/program", version = "=1.14.6" } +solana-bpf-rust-128bit-dep = { path = "../128bit_dep", version = "=1.14.7" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.7" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/128bit_dep/Cargo.toml b/programs/bpf/rust/128bit_dep/Cargo.toml index 66fd4cfa4c384e..2dd07bf529b3da 100644 --- a/programs/bpf/rust/128bit_dep/Cargo.toml +++ b/programs/bpf/rust/128bit_dep/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-128bit-dep" -version = "1.14.6" +version = "1.14.7" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-128bit-dep" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.6" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.7" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/bpf/rust/alloc/Cargo.toml b/programs/bpf/rust/alloc/Cargo.toml index dbac160b365292..b4f1aa74eaf2e3 100644 --- a/programs/bpf/rust/alloc/Cargo.toml +++ b/programs/bpf/rust/alloc/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-alloc" -version = "1.14.6" +version = "1.14.7" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-alloc" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.6" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.7" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/call_depth/Cargo.toml b/programs/bpf/rust/call_depth/Cargo.toml index c8f6d32723ce67..2e46e3190ae2c3 100644 --- a/programs/bpf/rust/call_depth/Cargo.toml +++ b/programs/bpf/rust/call_depth/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-call-depth" -version = "1.14.6" +version = "1.14.7" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-call-depth" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.6" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.7" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/caller_access/Cargo.toml b/programs/bpf/rust/caller_access/Cargo.toml index 94f315ecd96a5c..ee9e9ebdd21071 100644 --- a/programs/bpf/rust/caller_access/Cargo.toml +++ b/programs/bpf/rust/caller_access/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-caller-access" -version = "1.14.6" +version = "1.14.7" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-caller-access" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.6" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.7" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/curve25519/Cargo.toml b/programs/bpf/rust/curve25519/Cargo.toml index ab858e352314cf..d2bec324d9c159 100644 --- a/programs/bpf/rust/curve25519/Cargo.toml +++ b/programs/bpf/rust/curve25519/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-curve25519" -version = "1.14.6" +version = "1.14.7" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ documentation = "https://docs.rs/solana-bpf-rust-zktoken_crypto" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.6" } -solana-zk-token-sdk = { path = "../../../../zk-token-sdk", version = "=1.14.6" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.7" } +solana-zk-token-sdk = { path = "../../../../zk-token-sdk", version = "=1.14.7" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/custom_heap/Cargo.toml b/programs/bpf/rust/custom_heap/Cargo.toml index 900fb15e2879cd..8ecd9d6b5c9037 100644 --- a/programs/bpf/rust/custom_heap/Cargo.toml +++ b/programs/bpf/rust/custom_heap/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-custom-heap" -version = "1.14.6" +version = "1.14.7" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-custom-heap" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.6" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.7" } [features] default = ["custom-heap"] diff --git a/programs/bpf/rust/dep_crate/Cargo.toml b/programs/bpf/rust/dep_crate/Cargo.toml index 9328bbad219e9d..bb18bd40aeb25e 100644 --- a/programs/bpf/rust/dep_crate/Cargo.toml +++ b/programs/bpf/rust/dep_crate/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-dep-crate" -version = "1.14.6" +version = "1.14.7" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,8 +12,8 @@ edition = "2021" [dependencies] byteorder = { version = "1", default-features = false } # list of crates which must be buildable for bpf programs -solana-address-lookup-table-program = { path = "../../../../programs/address-lookup-table", version = "=1.14.6" } -solana-program = { path = "../../../../sdk/program", version = "=1.14.6" } +solana-address-lookup-table-program = { path = "../../../../programs/address-lookup-table", version = "=1.14.7" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.7" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/deprecated_loader/Cargo.toml b/programs/bpf/rust/deprecated_loader/Cargo.toml index 9faa1aa2fe7a0e..a2e20ee55c3aad 100644 --- a/programs/bpf/rust/deprecated_loader/Cargo.toml +++ b/programs/bpf/rust/deprecated_loader/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-deprecated-loader" -version = "1.14.6" +version = "1.14.7" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-deprecated-loader" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.6" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.7" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/dup_accounts/Cargo.toml b/programs/bpf/rust/dup_accounts/Cargo.toml index 60cb96e61491a0..64fbfe7935c80d 100644 --- a/programs/bpf/rust/dup_accounts/Cargo.toml +++ b/programs/bpf/rust/dup_accounts/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-dup-accounts" -version = "1.14.6" +version = "1.14.7" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-dup-accounts" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.6" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.7" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/error_handling/Cargo.toml b/programs/bpf/rust/error_handling/Cargo.toml index ef60afdfeeb0b9..71807d8a35cd78 100644 --- a/programs/bpf/rust/error_handling/Cargo.toml +++ b/programs/bpf/rust/error_handling/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-error-handling" -version = "1.14.6" +version = "1.14.7" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,7 +12,7 @@ edition = "2021" [dependencies] num-derive = "0.3" num-traits = "0.2" -solana-program = { path = "../../../../sdk/program", version = "=1.14.6" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.7" } thiserror = "1.0" [lib] diff --git a/programs/bpf/rust/external_spend/Cargo.toml b/programs/bpf/rust/external_spend/Cargo.toml index 497b130e1f52a3..de1267e144738b 100644 --- a/programs/bpf/rust/external_spend/Cargo.toml +++ b/programs/bpf/rust/external_spend/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-external-spend" -version = "1.14.6" +version = "1.14.7" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-external-spend" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.6" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.7" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/finalize/Cargo.toml b/programs/bpf/rust/finalize/Cargo.toml index 26820764564b37..3f288ad9fa2de2 100644 --- a/programs/bpf/rust/finalize/Cargo.toml +++ b/programs/bpf/rust/finalize/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-finalize" -version = "1.14.6" +version = "1.14.7" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-finalize" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.6" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.7" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/get_minimum_delegation/Cargo.toml b/programs/bpf/rust/get_minimum_delegation/Cargo.toml index ecb79b1052565f..c0a4b8767871bc 100644 --- a/programs/bpf/rust/get_minimum_delegation/Cargo.toml +++ b/programs/bpf/rust/get_minimum_delegation/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-get-minimum-delegation" -version = "1.14.6" +version = "1.14.7" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-get-minimum-delegation" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.6" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.7" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/inner_instruction_alignment_check/Cargo.toml b/programs/bpf/rust/inner_instruction_alignment_check/Cargo.toml index 53f5f479bd779b..e228b735691924 100644 --- a/programs/bpf/rust/inner_instruction_alignment_check/Cargo.toml +++ b/programs/bpf/rust/inner_instruction_alignment_check/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-inner_instruction_alignment_check" -version = "1.14.6" +version = "1.14.7" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-inner_instruction_alignment_che edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.6" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.7" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/instruction_introspection/Cargo.toml b/programs/bpf/rust/instruction_introspection/Cargo.toml index 4b274e5c2bfbd5..81cf32b381ad90 100644 --- a/programs/bpf/rust/instruction_introspection/Cargo.toml +++ b/programs/bpf/rust/instruction_introspection/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-instruction-introspection" -version = "1.14.6" +version = "1.14.7" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-instruction-introspection" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.6" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.7" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/invoke/Cargo.toml b/programs/bpf/rust/invoke/Cargo.toml index 87baf75d02c695..1613b64e18d029 100644 --- a/programs/bpf/rust/invoke/Cargo.toml +++ b/programs/bpf/rust/invoke/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-invoke" -version = "1.14.6" +version = "1.14.7" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -15,7 +15,7 @@ program = [] [dependencies] solana-bpf-rust-invoked = { path = "../invoked", default-features = false } -solana-program = { path = "../../../../sdk/program", version = "=1.14.6" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.7" } [lib] crate-type = ["lib", "cdylib"] diff --git a/programs/bpf/rust/invoke_and_error/Cargo.toml b/programs/bpf/rust/invoke_and_error/Cargo.toml index eee5ca83de4e14..32dab2c5dcd0f2 100644 --- a/programs/bpf/rust/invoke_and_error/Cargo.toml +++ b/programs/bpf/rust/invoke_and_error/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-invoke-and-error" -version = "1.14.6" +version = "1.14.7" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-invoke-and-error" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.6" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.7" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/invoke_and_ok/Cargo.toml b/programs/bpf/rust/invoke_and_ok/Cargo.toml index d231530a6ba4f3..eea68a4d1e4b13 100644 --- a/programs/bpf/rust/invoke_and_ok/Cargo.toml +++ b/programs/bpf/rust/invoke_and_ok/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-invoke-and-ok" -version = "1.14.6" +version = "1.14.7" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-invoke-and-ok" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.6" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.7" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/invoke_and_return/Cargo.toml b/programs/bpf/rust/invoke_and_return/Cargo.toml index 665e1daefa6f88..2c53107ec871d5 100644 --- a/programs/bpf/rust/invoke_and_return/Cargo.toml +++ b/programs/bpf/rust/invoke_and_return/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-invoke-and-return" -version = "1.14.6" +version = "1.14.7" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-invoke-and-return" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.6" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.7" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/invoked/Cargo.toml b/programs/bpf/rust/invoked/Cargo.toml index f5efbcb30ff6b4..339cbae98e8219 100644 --- a/programs/bpf/rust/invoked/Cargo.toml +++ b/programs/bpf/rust/invoked/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-invoked" -version = "1.14.6" +version = "1.14.7" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,7 +14,7 @@ default = ["program"] program = [] [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.6" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.7" } [lib] crate-type = ["lib", "cdylib"] diff --git a/programs/bpf/rust/iter/Cargo.toml b/programs/bpf/rust/iter/Cargo.toml index 4659e04c9f9a64..1fdbd137146e68 100644 --- a/programs/bpf/rust/iter/Cargo.toml +++ b/programs/bpf/rust/iter/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-iter" -version = "1.14.6" +version = "1.14.7" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-iter" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.6" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.7" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/log_data/Cargo.toml b/programs/bpf/rust/log_data/Cargo.toml index 576c5475cfaac1..6b8dca49129c1a 100644 --- a/programs/bpf/rust/log_data/Cargo.toml +++ b/programs/bpf/rust/log_data/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-log-data" -version = "1.14.6" +version = "1.14.7" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-log-data" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.6" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.7" } [features] default = ["program"] diff --git a/programs/bpf/rust/many_args/Cargo.toml b/programs/bpf/rust/many_args/Cargo.toml index c3ba3b50a78b2e..933dbdf99413f1 100644 --- a/programs/bpf/rust/many_args/Cargo.toml +++ b/programs/bpf/rust/many_args/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-many-args" -version = "1.14.6" +version = "1.14.7" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ documentation = "https://docs.rs/solana-bpf-rust-many-args" edition = "2021" [dependencies] -solana-bpf-rust-many-args-dep = { path = "../many_args_dep", version = "=1.14.6" } -solana-program = { path = "../../../../sdk/program", version = "=1.14.6" } +solana-bpf-rust-many-args-dep = { path = "../many_args_dep", version = "=1.14.7" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.7" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/many_args_dep/Cargo.toml b/programs/bpf/rust/many_args_dep/Cargo.toml index 12fc5609c045ed..4c689240826da9 100644 --- a/programs/bpf/rust/many_args_dep/Cargo.toml +++ b/programs/bpf/rust/many_args_dep/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-many-args-dep" -version = "1.14.6" +version = "1.14.7" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-many-args-dep" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.6" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.7" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/bpf/rust/mem/Cargo.toml b/programs/bpf/rust/mem/Cargo.toml index 8106b4e29e59be..884e3b1fe43ec0 100644 --- a/programs/bpf/rust/mem/Cargo.toml +++ b/programs/bpf/rust/mem/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-mem" -version = "1.14.6" +version = "1.14.7" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,12 +13,12 @@ edition = "2021" no-entrypoint = [] [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.6" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.7" } [dev-dependencies] -solana-program-runtime = { path = "../../../../program-runtime", version = "=1.14.6" } -solana-program-test = { path = "../../../../program-test", version = "=1.14.6" } -solana-sdk = { path = "../../../../sdk", version = "=1.14.6" } +solana-program-runtime = { path = "../../../../program-runtime", version = "=1.14.7" } +solana-program-test = { path = "../../../../program-test", version = "=1.14.7" } +solana-sdk = { path = "../../../../sdk", version = "=1.14.7" } [lib] crate-type = ["cdylib", "lib"] diff --git a/programs/bpf/rust/membuiltins/Cargo.toml b/programs/bpf/rust/membuiltins/Cargo.toml index 7fcd1ecf775a12..6a9f3b322c4a55 100644 --- a/programs/bpf/rust/membuiltins/Cargo.toml +++ b/programs/bpf/rust/membuiltins/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-membuiltins" -version = "1.14.6" +version = "1.14.7" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ documentation = "https://docs.rs/solana-bpf-rust-mem" edition = "2021" [dependencies] -solana-bpf-rust-mem = { path = "../mem", version = "=1.14.6", features = [ "no-entrypoint" ] } -solana-program = { path = "../../../../sdk/program", version = "=1.14.6" } +solana-bpf-rust-mem = { path = "../mem", version = "=1.14.7", features = [ "no-entrypoint" ] } +solana-program = { path = "../../../../sdk/program", version = "=1.14.7" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/noop/Cargo.toml b/programs/bpf/rust/noop/Cargo.toml index b7be0dc3195d44..1f00ecfc282d80 100644 --- a/programs/bpf/rust/noop/Cargo.toml +++ b/programs/bpf/rust/noop/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-noop" -version = "1.14.6" +version = "1.14.7" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-noop" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.6" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.7" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/panic/Cargo.toml b/programs/bpf/rust/panic/Cargo.toml index c9b89a2a0bd06a..d530a181da10f9 100644 --- a/programs/bpf/rust/panic/Cargo.toml +++ b/programs/bpf/rust/panic/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-panic" -version = "1.14.6" +version = "1.14.7" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-panic" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.6" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.7" } [features] default = ["custom-panic"] diff --git a/programs/bpf/rust/param_passing/Cargo.toml b/programs/bpf/rust/param_passing/Cargo.toml index 71d7984141c0fd..40df527820096f 100644 --- a/programs/bpf/rust/param_passing/Cargo.toml +++ b/programs/bpf/rust/param_passing/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-param-passing" -version = "1.14.6" +version = "1.14.7" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ documentation = "https://docs.rs/solana-bpf-rust-param-passing" edition = "2021" [dependencies] -solana-bpf-rust-param-passing-dep = { path = "../param_passing_dep", version = "=1.14.6" } -solana-program = { path = "../../../../sdk/program", version = "=1.14.6" } +solana-bpf-rust-param-passing-dep = { path = "../param_passing_dep", version = "=1.14.7" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.7" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/param_passing_dep/Cargo.toml b/programs/bpf/rust/param_passing_dep/Cargo.toml index 34d17fa4c84ddd..e3a48e71798166 100644 --- a/programs/bpf/rust/param_passing_dep/Cargo.toml +++ b/programs/bpf/rust/param_passing_dep/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-param-passing-dep" -version = "1.14.6" +version = "1.14.7" description = "Solana BPF program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-param-passing-dep" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.6" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.7" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/bpf/rust/rand/Cargo.toml b/programs/bpf/rust/rand/Cargo.toml index 40d1846aff746b..3acc5f3885753a 100644 --- a/programs/bpf/rust/rand/Cargo.toml +++ b/programs/bpf/rust/rand/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-rand" -version = "1.14.6" +version = "1.14.7" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,7 +12,7 @@ edition = "2021" [dependencies] getrandom = { version = "0.1.14", features = ["dummy"] } rand = "0.7" -solana-program = { path = "../../../../sdk/program", version = "=1.14.6" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.7" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/realloc/Cargo.toml b/programs/bpf/rust/realloc/Cargo.toml index 20c9b171e0edeb..7ef6423e040acf 100644 --- a/programs/bpf/rust/realloc/Cargo.toml +++ b/programs/bpf/rust/realloc/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-realloc" -version = "1.14.6" +version = "1.14.7" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,7 +14,7 @@ default = ["program"] program = [] [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.6" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.7" } [lib] crate-type = ["lib", "cdylib"] diff --git a/programs/bpf/rust/realloc_invoke/Cargo.toml b/programs/bpf/rust/realloc_invoke/Cargo.toml index 195733fd41c77c..369ddc04b6d316 100644 --- a/programs/bpf/rust/realloc_invoke/Cargo.toml +++ b/programs/bpf/rust/realloc_invoke/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-realloc-invoke" -version = "1.14.6" +version = "1.14.7" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,8 +14,8 @@ default = ["program"] program = [] [dependencies] -solana-bpf-rust-realloc = { path = "../realloc", version = "=1.14.6", default-features = false } -solana-program = { path = "../../../../sdk/program", version = "=1.14.6" } +solana-bpf-rust-realloc = { path = "../realloc", version = "=1.14.7", default-features = false } +solana-program = { path = "../../../../sdk/program", version = "=1.14.7" } [lib] crate-type = ["lib", "cdylib"] diff --git a/programs/bpf/rust/ro_account_modify/Cargo.toml b/programs/bpf/rust/ro_account_modify/Cargo.toml index 4e66cee8a35eff..7afba9db785946 100644 --- a/programs/bpf/rust/ro_account_modify/Cargo.toml +++ b/programs/bpf/rust/ro_account_modify/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-ro-account_modify" -version = "1.14.6" +version = "1.14.7" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-ro-modify" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.6" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.7" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/ro_modify/Cargo.toml b/programs/bpf/rust/ro_modify/Cargo.toml index 7c3bdc5e54130a..ea6a9793a3246f 100644 --- a/programs/bpf/rust/ro_modify/Cargo.toml +++ b/programs/bpf/rust/ro_modify/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-ro-modify" -version = "1.14.6" +version = "1.14.7" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-ro-modify" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.6" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.7" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/sanity/Cargo.toml b/programs/bpf/rust/sanity/Cargo.toml index b1bdfa2c70d149..28355425a52dfa 100644 --- a/programs/bpf/rust/sanity/Cargo.toml +++ b/programs/bpf/rust/sanity/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-sanity" -version = "1.14.6" +version = "1.14.7" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,12 +13,12 @@ edition = "2021" test-bpf = [] [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.6" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.7" } [dev-dependencies] -solana-program-runtime = { path = "../../../../program-runtime", version = "=1.14.6" } -solana-program-test = { path = "../../../../program-test", version = "=1.14.6" } -solana-sdk = { path = "../../../../sdk", version = "=1.14.6" } +solana-program-runtime = { path = "../../../../program-runtime", version = "=1.14.7" } +solana-program-test = { path = "../../../../program-test", version = "=1.14.7" } +solana-sdk = { path = "../../../../sdk", version = "=1.14.7" } [lib] crate-type = ["cdylib", "lib"] diff --git a/programs/bpf/rust/secp256k1_recover/Cargo.toml b/programs/bpf/rust/secp256k1_recover/Cargo.toml index 4a9e8c6d2ff8e0..632ad2b3a6b896 100644 --- a/programs/bpf/rust/secp256k1_recover/Cargo.toml +++ b/programs/bpf/rust/secp256k1_recover/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-secp256k1-recover" -version = "1.14.6" +version = "1.14.7" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -11,7 +11,7 @@ edition = "2021" [dependencies] libsecp256k1 = { version = "0.7.0", default-features = false } -solana-program = { path = "../../../../sdk/program", version = "=1.14.6" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.7" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/sha/Cargo.toml b/programs/bpf/rust/sha/Cargo.toml index 4d6dafc6725b54..1bf6d2a38b4b8d 100644 --- a/programs/bpf/rust/sha/Cargo.toml +++ b/programs/bpf/rust/sha/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-sha" -version = "1.14.6" +version = "1.14.7" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -11,7 +11,7 @@ edition = "2021" [dependencies] blake3 = "1.0.0" -solana-program = { path = "../../../../sdk/program", version = "=1.14.6" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.7" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/sibling_inner_instruction/Cargo.toml b/programs/bpf/rust/sibling_inner_instruction/Cargo.toml index e4616c935e3595..795ffc505ad0a6 100644 --- a/programs/bpf/rust/sibling_inner_instruction/Cargo.toml +++ b/programs/bpf/rust/sibling_inner_instruction/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-sibling_inner-instructions" -version = "1.14.6" +version = "1.14.7" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-log-data" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.6" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.7" } [features] default = ["program"] diff --git a/programs/bpf/rust/sibling_instruction/Cargo.toml b/programs/bpf/rust/sibling_instruction/Cargo.toml index 0e69f4ecb6ee9f..b0897c7622d9db 100644 --- a/programs/bpf/rust/sibling_instruction/Cargo.toml +++ b/programs/bpf/rust/sibling_instruction/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-sibling-instructions" -version = "1.14.6" +version = "1.14.7" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-log-data" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.6" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.7" } [features] default = ["program"] diff --git a/programs/bpf/rust/simulation/Cargo.toml b/programs/bpf/rust/simulation/Cargo.toml index dda138b794b378..6c2c63993b6977 100644 --- a/programs/bpf/rust/simulation/Cargo.toml +++ b/programs/bpf/rust/simulation/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-simulation" -version = "1.14.6" +version = "1.14.7" description = "Solana BPF Program Simulation Differences" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,13 +13,13 @@ edition = "2021" test-bpf = [] [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.6" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.7" } [dev-dependencies] -solana-logger = { path = "../../../../logger", version = "=1.14.6" } -solana-program-test = { path = "../../../../program-test", version = "=1.14.6" } -solana-sdk = { path = "../../../../sdk", version = "=1.14.6" } -solana-validator = { path = "../../../../validator", version = "=1.14.6" } +solana-logger = { path = "../../../../logger", version = "=1.14.7" } +solana-program-test = { path = "../../../../program-test", version = "=1.14.7" } +solana-sdk = { path = "../../../../sdk", version = "=1.14.7" } +solana-validator = { path = "../../../../validator", version = "=1.14.7" } [lib] crate-type = ["cdylib", "lib"] diff --git a/programs/bpf/rust/spoof1/Cargo.toml b/programs/bpf/rust/spoof1/Cargo.toml index 34212049dafb95..9ad8355d37b67d 100644 --- a/programs/bpf/rust/spoof1/Cargo.toml +++ b/programs/bpf/rust/spoof1/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-spoof1" -version = "1.14.6" +version = "1.14.7" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-spoof1" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.6" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.7" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/spoof1_system/Cargo.toml b/programs/bpf/rust/spoof1_system/Cargo.toml index 8f94dd9b996209..7b64598de9c1ee 100644 --- a/programs/bpf/rust/spoof1_system/Cargo.toml +++ b/programs/bpf/rust/spoof1_system/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-spoof1-system" -version = "1.14.6" +version = "1.14.7" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-spoof1-system" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.6" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.7" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/sysvar/Cargo.toml b/programs/bpf/rust/sysvar/Cargo.toml index 36c53bc38f6ed4..e55f5619e6d830 100644 --- a/programs/bpf/rust/sysvar/Cargo.toml +++ b/programs/bpf/rust/sysvar/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-sysvar" -version = "1.14.6" +version = "1.14.7" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,12 +10,12 @@ documentation = "https://docs.rs/solana-bpf-rust-sysvar" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.6" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.7" } [dev-dependencies] -solana-program-runtime = { path = "../../../../program-runtime", version = "=1.14.6" } -solana-program-test = { path = "../../../../program-test", version = "=1.14.6" } -solana-sdk = { path = "../../../../sdk", version = "=1.14.6" } +solana-program-runtime = { path = "../../../../program-runtime", version = "=1.14.7" } +solana-program-test = { path = "../../../../program-test", version = "=1.14.7" } +solana-sdk = { path = "../../../../sdk", version = "=1.14.7" } [lib] crate-type = ["cdylib", "lib"] diff --git a/programs/bpf/rust/upgradeable/Cargo.toml b/programs/bpf/rust/upgradeable/Cargo.toml index 16049338c47d0d..1e59efcbb04ef6 100644 --- a/programs/bpf/rust/upgradeable/Cargo.toml +++ b/programs/bpf/rust/upgradeable/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-upgradeable" -version = "1.14.6" +version = "1.14.7" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-upgradeable" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.6" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.7" } [lib] name = "solana_bpf_rust_upgradeable" diff --git a/programs/bpf/rust/upgraded/Cargo.toml b/programs/bpf/rust/upgraded/Cargo.toml index d7a39bf0b5e410..c275a7a32319b3 100644 --- a/programs/bpf/rust/upgraded/Cargo.toml +++ b/programs/bpf/rust/upgraded/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-upgraded" -version = "1.14.6" +version = "1.14.7" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-upgraded" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.6" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.7" } [lib] name = "solana_bpf_rust_upgraded" diff --git a/programs/bpf_loader/Cargo.toml b/programs/bpf_loader/Cargo.toml index 196ae55b27ccba..52be440435836f 100644 --- a/programs/bpf_loader/Cargo.toml +++ b/programs/bpf_loader/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-loader-program" -version = "1.14.6" +version = "1.14.7" description = "Solana BPF loader" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,17 +14,17 @@ bincode = "1.3.3" byteorder = "1.4.3" libsecp256k1 = "0.6.0" log = "0.4.17" -solana-measure = { path = "../../measure", version = "=1.14.6" } -solana-metrics = { path = "../../metrics", version = "=1.14.6" } -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.6" } -solana-sdk = { path = "../../sdk", version = "=1.14.6" } -solana-zk-token-sdk = { path = "../../zk-token-sdk", version = "=1.14.6" } +solana-measure = { path = "../../measure", version = "=1.14.7" } +solana-metrics = { path = "../../metrics", version = "=1.14.7" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.7" } +solana-sdk = { path = "../../sdk", version = "=1.14.7" } +solana-zk-token-sdk = { path = "../../zk-token-sdk", version = "=1.14.7" } solana_rbpf = "=0.2.31" thiserror = "1.0" [dev-dependencies] rand = "0.7.3" -solana-runtime = { path = "../../runtime", version = "=1.14.6" } +solana-runtime = { path = "../../runtime", version = "=1.14.7" } [lib] crate-type = ["lib"] diff --git a/programs/bpf_loader/gen-syscall-list/Cargo.toml b/programs/bpf_loader/gen-syscall-list/Cargo.toml index 7c199105e406e9..1dfd64d03447ce 100644 --- a/programs/bpf_loader/gen-syscall-list/Cargo.toml +++ b/programs/bpf_loader/gen-syscall-list/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "gen-syscall-list" -version = "1.14.6" +version = "1.14.7" edition = "2021" license = "Apache-2.0" publish = false diff --git a/programs/compute-budget/Cargo.toml b/programs/compute-budget/Cargo.toml index 7af84d0b44764e..3aee7c30b5e608 100644 --- a/programs/compute-budget/Cargo.toml +++ b/programs/compute-budget/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "solana-compute-budget-program" description = "Solana Compute Budget program" -version = "1.14.6" +version = "1.14.7" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-compute-budget-program" repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ license = "Apache-2.0" edition = "2021" [dependencies] -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.6" } -solana-sdk = { path = "../../sdk", version = "=1.14.6" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.7" } +solana-sdk = { path = "../../sdk", version = "=1.14.7" } [lib] crate-type = ["lib"] diff --git a/programs/config/Cargo.toml b/programs/config/Cargo.toml index 06969cd24c257f..62e95b28ec668f 100644 --- a/programs/config/Cargo.toml +++ b/programs/config/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-config-program" -version = "1.14.6" +version = "1.14.7" description = "Solana Config program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,11 +14,11 @@ bincode = "1.3.3" chrono = { version = "0.4.11", features = ["serde"] } serde = "1.0.138" serde_derive = "1.0.103" -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.6" } -solana-sdk = { path = "../../sdk", version = "=1.14.6" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.7" } +solana-sdk = { path = "../../sdk", version = "=1.14.7" } [dev-dependencies] -solana-logger = { path = "../../logger", version = "=1.14.6" } +solana-logger = { path = "../../logger", version = "=1.14.7" } [lib] crate-type = ["lib"] diff --git a/programs/ed25519-tests/Cargo.toml b/programs/ed25519-tests/Cargo.toml index 6c502d9f319705..a2808bfde62e6f 100644 --- a/programs/ed25519-tests/Cargo.toml +++ b/programs/ed25519-tests/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-ed25519-program-tests" -version = "1.14.6" +version = "1.14.7" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" @@ -12,8 +12,8 @@ publish = false assert_matches = "1.5.0" ed25519-dalek = "=1.0.1" rand = "0.7.0" -solana-program-test = { path = "../../program-test", version = "=1.14.6" } -solana-sdk = { path = "../../sdk", version = "=1.14.6" } +solana-program-test = { path = "../../program-test", version = "=1.14.7" } +solana-sdk = { path = "../../sdk", version = "=1.14.7" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/stake/Cargo.toml b/programs/stake/Cargo.toml index 401c5e8c2a1e37..0381eaca1333a0 100644 --- a/programs/stake/Cargo.toml +++ b/programs/stake/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-stake-program" -version = "1.14.6" +version = "1.14.7" description = "Solana Stake program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -16,19 +16,19 @@ num-derive = "0.3" num-traits = "0.2" serde = "1.0.138" serde_derive = "1.0.103" -solana-config-program = { path = "../config", version = "=1.14.6" } -solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.6" } -solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.6" } -solana-metrics = { path = "../../metrics", version = "=1.14.6" } -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.6" } -solana-sdk = { path = "../../sdk", version = "=1.14.6" } -solana-vote-program = { path = "../vote", version = "=1.14.6" } +solana-config-program = { path = "../config", version = "=1.14.7" } +solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.7" } +solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.7" } +solana-metrics = { path = "../../metrics", version = "=1.14.7" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.7" } +solana-sdk = { path = "../../sdk", version = "=1.14.7" } +solana-vote-program = { path = "../vote", version = "=1.14.7" } thiserror = "1.0" [dev-dependencies] assert_matches = "1.5.0" proptest = "1.0" -solana-logger = { path = "../../logger", version = "=1.14.6" } +solana-logger = { path = "../../logger", version = "=1.14.7" } test-case = "2.1.0" [build-dependencies] diff --git a/programs/vote/Cargo.toml b/programs/vote/Cargo.toml index 205949cb69080c..332cc40a9c4782 100644 --- a/programs/vote/Cargo.toml +++ b/programs/vote/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-vote-program" -version = "1.14.6" +version = "1.14.7" description = "Solana Vote program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -16,17 +16,17 @@ num-derive = "0.3" num-traits = "0.2" serde = "1.0.138" serde_derive = "1.0.103" -solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.6" } -solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.6" } -solana-metrics = { path = "../../metrics", version = "=1.14.6" } -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.6" } -solana-sdk = { path = "../../sdk", version = "=1.14.6" } +solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.7" } +solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.7" } +solana-metrics = { path = "../../metrics", version = "=1.14.7" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.7" } +solana-sdk = { path = "../../sdk", version = "=1.14.7" } thiserror = "1.0" [dev-dependencies] itertools = "0.10.3" rand = "0.7.0" -solana-logger = { path = "../../logger", version = "=1.14.6" } +solana-logger = { path = "../../logger", version = "=1.14.7" } [build-dependencies] rustc_version = "0.4" diff --git a/programs/zk-token-proof/Cargo.toml b/programs/zk-token-proof/Cargo.toml index 3aecdf55e08745..ca815fbc0e691a 100644 --- a/programs/zk-token-proof/Cargo.toml +++ b/programs/zk-token-proof/Cargo.toml @@ -3,7 +3,7 @@ name = "solana-zk-token-proof-program" description = "Solana Zk Token Proof Program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" -version = "1.14.6" +version = "1.14.7" license = "Apache-2.0" edition = "2021" @@ -12,6 +12,6 @@ bytemuck = { version = "1.11.0", features = ["derive"] } getrandom = { version = "0.1", features = ["dummy"] } num-derive = "0.3" num-traits = "0.2" -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.6" } -solana-sdk = { path = "../../sdk", version = "=1.14.6" } -solana-zk-token-sdk = { path = "../../zk-token-sdk", version = "=1.14.6" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.7" } +solana-sdk = { path = "../../sdk", version = "=1.14.7" } +solana-zk-token-sdk = { path = "../../zk-token-sdk", version = "=1.14.7" } diff --git a/rayon-threadlimit/Cargo.toml b/rayon-threadlimit/Cargo.toml index aa354078f9c7ed..b1d15e497621ec 100644 --- a/rayon-threadlimit/Cargo.toml +++ b/rayon-threadlimit/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-rayon-threadlimit" -version = "1.14.6" +version = "1.14.7" description = "solana-rayon-threadlimit" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-rayon-threadlimit" diff --git a/rbpf-cli/Cargo.toml b/rbpf-cli/Cargo.toml index 9e5f62c8f9fbc1..fb41b1eb52f4b8 100644 --- a/rbpf-cli/Cargo.toml +++ b/rbpf-cli/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "rbpf-cli" -version = "1.14.6" +version = "1.14.7" description = "CLI to test and analyze eBPF programs" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/rbpf" @@ -13,8 +13,8 @@ publish = false clap = { version = "3.1.5", features = ["cargo"] } serde = "1.0.138" serde_json = "1.0.81" -solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.6" } -solana-logger = { path = "../logger", version = "=1.14.6" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.6" } -solana-sdk = { path = "../sdk", version = "=1.14.6" } +solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.7" } +solana-logger = { path = "../logger", version = "=1.14.7" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.7" } +solana-sdk = { path = "../sdk", version = "=1.14.7" } solana_rbpf = "=0.2.31" diff --git a/remote-wallet/Cargo.toml b/remote-wallet/Cargo.toml index 79757dd5631942..327bc4df446fdc 100644 --- a/remote-wallet/Cargo.toml +++ b/remote-wallet/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-remote-wallet" description = "Blockchain, Rebuilt for Scale" -version = "1.14.6" +version = "1.14.7" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -19,7 +19,7 @@ num-traits = { version = "0.2" } parking_lot = "0.12" qstring = "0.7.2" semver = "1.0" -solana-sdk = { path = "../sdk", version = "=1.14.6" } +solana-sdk = { path = "../sdk", version = "=1.14.7" } thiserror = "1.0" uriparse = "0.6.4" diff --git a/rpc-test/Cargo.toml b/rpc-test/Cargo.toml index 97da79112fde0c..868d73babb2a67 100644 --- a/rpc-test/Cargo.toml +++ b/rpc-test/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-rpc-test" -version = "1.14.6" +version = "1.14.7" description = "Solana RPC Test" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -19,17 +19,17 @@ log = "0.4.17" reqwest = { version = "0.11.11", default-features = false, features = ["blocking", "brotli", "deflate", "gzip", "rustls-tls", "json"] } serde = "1.0.138" serde_json = "1.0.81" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.6" } -solana-client = { path = "../client", version = "=1.14.6" } -solana-rpc = { path = "../rpc", version = "=1.14.6" } -solana-sdk = { path = "../sdk", version = "=1.14.6" } -solana-streamer = { path = "../streamer", version = "=1.14.6" } -solana-test-validator = { path = "../test-validator", version = "=1.14.6" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.6" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.7" } +solana-client = { path = "../client", version = "=1.14.7" } +solana-rpc = { path = "../rpc", version = "=1.14.7" } +solana-sdk = { path = "../sdk", version = "=1.14.7" } +solana-streamer = { path = "../streamer", version = "=1.14.7" } +solana-test-validator = { path = "../test-validator", version = "=1.14.7" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.7" } tokio = { version = "~1.14.1", features = ["full"] } [dev-dependencies] -solana-logger = { path = "../logger", version = "=1.14.6" } +solana-logger = { path = "../logger", version = "=1.14.7" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/rpc/Cargo.toml b/rpc/Cargo.toml index 931b2b380fe54e..5709a527f4b3e6 100644 --- a/rpc/Cargo.toml +++ b/rpc/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-rpc" -version = "1.14.6" +version = "1.14.7" description = "Solana RPC" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -29,26 +29,26 @@ serde = "1.0.138" serde_derive = "1.0.103" serde_json = "1.0.81" soketto = "0.7" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.6" } -solana-client = { path = "../client", version = "=1.14.6" } -solana-entry = { path = "../entry", version = "=1.14.6" } -solana-faucet = { path = "../faucet", version = "=1.14.6" } -solana-gossip = { path = "../gossip", version = "=1.14.6" } -solana-ledger = { path = "../ledger", version = "=1.14.6" } -solana-measure = { path = "../measure", version = "=1.14.6" } -solana-metrics = { path = "../metrics", version = "=1.14.6" } -solana-perf = { path = "../perf", version = "=1.14.6" } -solana-poh = { path = "../poh", version = "=1.14.6" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.6" } -solana-runtime = { path = "../runtime", version = "=1.14.6" } -solana-sdk = { path = "../sdk", version = "=1.14.6" } -solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.6" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.6" } -solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.6" } -solana-streamer = { path = "../streamer", version = "=1.14.6" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.6" } -solana-version = { path = "../version", version = "=1.14.6" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.6" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.7" } +solana-client = { path = "../client", version = "=1.14.7" } +solana-entry = { path = "../entry", version = "=1.14.7" } +solana-faucet = { path = "../faucet", version = "=1.14.7" } +solana-gossip = { path = "../gossip", version = "=1.14.7" } +solana-ledger = { path = "../ledger", version = "=1.14.7" } +solana-measure = { path = "../measure", version = "=1.14.7" } +solana-metrics = { path = "../metrics", version = "=1.14.7" } +solana-perf = { path = "../perf", version = "=1.14.7" } +solana-poh = { path = "../poh", version = "=1.14.7" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.7" } +solana-runtime = { path = "../runtime", version = "=1.14.7" } +solana-sdk = { path = "../sdk", version = "=1.14.7" } +solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.7" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.7" } +solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.7" } +solana-streamer = { path = "../streamer", version = "=1.14.7" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.7" } +solana-version = { path = "../version", version = "=1.14.7" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.7" } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } spl-token-2022 = { version = "=0.4.2", features = ["no-entrypoint"] } stream-cancel = "0.8.1" @@ -58,9 +58,9 @@ tokio-util = { version = "0.6", features = ["codec", "compat"] } [dev-dependencies] serial_test = "0.8.0" -solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.6" } -solana-net-utils = { path = "../net-utils", version = "=1.14.6" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.6" } +solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.7" } +solana-net-utils = { path = "../net-utils", version = "=1.14.7" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.7" } symlink = "0.1.0" [lib] diff --git a/runtime/Cargo.toml b/runtime/Cargo.toml index 3282e29ee9bff3..630d3593eece6e 100644 --- a/runtime/Cargo.toml +++ b/runtime/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-runtime" -version = "1.14.6" +version = "1.14.7" description = "Solana runtime" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -39,21 +39,21 @@ rayon = "1.5.3" regex = "1.5.6" serde = { version = "1.0.138", features = ["rc"] } serde_derive = "1.0.103" -solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.6" } -solana-bucket-map = { path = "../bucket_map", version = "=1.14.6" } -solana-compute-budget-program = { path = "../programs/compute-budget", version = "=1.14.6" } -solana-config-program = { path = "../programs/config", version = "=1.14.6" } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.6" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.6" } -solana-measure = { path = "../measure", version = "=1.14.6" } -solana-metrics = { path = "../metrics", version = "=1.14.6" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.6" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.6" } -solana-sdk = { path = "../sdk", version = "=1.14.6" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.6" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.6" } -solana-zk-token-proof-program = { path = "../programs/zk-token-proof", version = "=1.14.6" } -solana-zk-token-sdk = { path = "../zk-token-sdk", version = "=1.14.6" } +solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.7" } +solana-bucket-map = { path = "../bucket_map", version = "=1.14.7" } +solana-compute-budget-program = { path = "../programs/compute-budget", version = "=1.14.7" } +solana-config-program = { path = "../programs/config", version = "=1.14.7" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.7" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.7" } +solana-measure = { path = "../measure", version = "=1.14.7" } +solana-metrics = { path = "../metrics", version = "=1.14.7" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.7" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.7" } +solana-sdk = { path = "../sdk", version = "=1.14.7" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.7" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.7" } +solana-zk-token-proof-program = { path = "../programs/zk-token-proof", version = "=1.14.7" } +solana-zk-token-sdk = { path = "../zk-token-sdk", version = "=1.14.7" } strum = { version = "0.24", features = ["derive"] } strum_macros = "0.24" symlink = "0.1.0" @@ -71,7 +71,7 @@ assert_matches = "1.5.0" ed25519-dalek = "=1.0.1" libsecp256k1 = "0.6.0" rand_chacha = "0.2.2" -solana-logger = { path = "../logger", version = "=1.14.6" } +solana-logger = { path = "../logger", version = "=1.14.7" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/runtime/store-tool/Cargo.toml b/runtime/store-tool/Cargo.toml index dd2ab05c37cbdb..dcc78e2a3a265b 100644 --- a/runtime/store-tool/Cargo.toml +++ b/runtime/store-tool/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-store-tool" description = "Tool to inspect append vecs" -version = "1.14.6" +version = "1.14.7" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -12,9 +12,9 @@ publish = false [dependencies] clap = "2.33.1" log = { version = "0.4.17" } -solana-logger = { path = "../../logger", version = "=1.14.6" } -solana-runtime = { path = "..", version = "=1.14.6" } -solana-version = { path = "../../version", version = "=1.14.6" } +solana-logger = { path = "../../logger", version = "=1.14.7" } +solana-runtime = { path = "..", version = "=1.14.7" } +solana-version = { path = "../../version", version = "=1.14.7" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/sdk/Cargo.toml b/sdk/Cargo.toml index e7dfbe988d7fc9..a3c28e358c696a 100644 --- a/sdk/Cargo.toml +++ b/sdk/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-sdk" -version = "1.14.6" +version = "1.14.7" description = "Solana SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -71,11 +71,11 @@ serde_derive = "1.0.103" serde_json = { version = "1.0.81", optional = true } sha2 = "0.10.2" sha3 = { version = "0.10.1", optional = true } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.6" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.6" } -solana-logger = { path = "../logger", version = "=1.14.6", optional = true } -solana-program = { path = "program", version = "=1.14.6" } -solana-sdk-macro = { path = "macro", version = "=1.14.6" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.7" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.7" } +solana-logger = { path = "../logger", version = "=1.14.7", optional = true } +solana-program = { path = "program", version = "=1.14.7" } +solana-sdk-macro = { path = "macro", version = "=1.14.7" } thiserror = "1.0" uriparse = "0.6.4" wasm-bindgen = "0.2" diff --git a/sdk/cargo-build-bpf/Cargo.toml b/sdk/cargo-build-bpf/Cargo.toml index bfcb519d61577e..aa55a4cae9a279 100644 --- a/sdk/cargo-build-bpf/Cargo.toml +++ b/sdk/cargo-build-bpf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-cargo-build-bpf" -version = "1.14.6" +version = "1.14.7" description = "Compile a local package and all of its dependencies using the Solana SBF SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,7 +12,7 @@ publish = false [dependencies] cargo_metadata = "0.15.0" clap = { version = "3.1.5", features = ["cargo", "env"] } -solana-sdk = { path = "..", version = "=1.14.6" } +solana-sdk = { path = "..", version = "=1.14.7" } [features] program = [] diff --git a/sdk/cargo-build-sbf/Cargo.toml b/sdk/cargo-build-sbf/Cargo.toml index 08217b75870f7a..c0e221558410c7 100644 --- a/sdk/cargo-build-sbf/Cargo.toml +++ b/sdk/cargo-build-sbf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-cargo-build-sbf" -version = "1.14.6" +version = "1.14.7" description = "Compile a local package and all of its dependencies using the Solana SBF SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -15,9 +15,9 @@ cargo_metadata = "0.15.0" clap = { version = "3.1.5", features = ["cargo", "env"] } log = { version = "0.4.14", features = ["std"] } regex = "1.5.6" -solana-download-utils = { path = "../../download-utils", version = "=1.14.6" } -solana-logger = { path = "../../logger", version = "=1.14.6" } -solana-sdk = { path = "..", version = "=1.14.6" } +solana-download-utils = { path = "../../download-utils", version = "=1.14.7" } +solana-logger = { path = "../../logger", version = "=1.14.7" } +solana-sdk = { path = "..", version = "=1.14.7" } tar = "0.4.38" [dev-dependencies] diff --git a/sdk/cargo-build-sbf/tests/crates/fail/Cargo.toml b/sdk/cargo-build-sbf/tests/crates/fail/Cargo.toml index 52a69e87418701..6406fe6bee9d0a 100644 --- a/sdk/cargo-build-sbf/tests/crates/fail/Cargo.toml +++ b/sdk/cargo-build-sbf/tests/crates/fail/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "fail" -version = "1.14.6" +version = "1.14.7" description = "Solana SBF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ edition = "2021" publish = false [dependencies] -solana-program = { path = "../../../../program", version = "=1.14.6" } +solana-program = { path = "../../../../program", version = "=1.14.7" } [lib] crate-type = ["cdylib"] diff --git a/sdk/cargo-build-sbf/tests/crates/noop/Cargo.toml b/sdk/cargo-build-sbf/tests/crates/noop/Cargo.toml index 557f4131e832f0..851bea040f1f3f 100644 --- a/sdk/cargo-build-sbf/tests/crates/noop/Cargo.toml +++ b/sdk/cargo-build-sbf/tests/crates/noop/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "noop" -version = "1.14.6" +version = "1.14.7" description = "Solana SBF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ edition = "2021" publish = false [dependencies] -solana-program = { path = "../../../../program", version = "=1.14.6" } +solana-program = { path = "../../../../program", version = "=1.14.7" } [lib] crate-type = ["cdylib"] diff --git a/sdk/cargo-test-bpf/Cargo.toml b/sdk/cargo-test-bpf/Cargo.toml index 49eed2da0b4a77..003f3c8bba0f7d 100644 --- a/sdk/cargo-test-bpf/Cargo.toml +++ b/sdk/cargo-test-bpf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-cargo-test-bpf" -version = "1.14.6" +version = "1.14.7" description = "Execute all unit and integration tests after building with the Solana SBF SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/sdk/cargo-test-sbf/Cargo.toml b/sdk/cargo-test-sbf/Cargo.toml index 9fc74ce902e875..e0b7a938cd77c4 100644 --- a/sdk/cargo-test-sbf/Cargo.toml +++ b/sdk/cargo-test-sbf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-cargo-test-sbf" -version = "1.14.6" +version = "1.14.7" description = "Execute all unit and integration tests after building with the Solana SBF SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/sdk/gen-headers/Cargo.toml b/sdk/gen-headers/Cargo.toml index a916f8187a2dd5..c1423ecfaec654 100644 --- a/sdk/gen-headers/Cargo.toml +++ b/sdk/gen-headers/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "gen-headers" -version = "1.14.6" +version = "1.14.7" edition = "2021" license = "Apache-2.0" publish = false diff --git a/sdk/macro/Cargo.toml b/sdk/macro/Cargo.toml index c5a8d712e3ec0e..39f49845254dcb 100644 --- a/sdk/macro/Cargo.toml +++ b/sdk/macro/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-sdk-macro" -version = "1.14.6" +version = "1.14.7" description = "Solana SDK Macro" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/sdk/program/Cargo.toml b/sdk/program/Cargo.toml index acb5821089d396..d62272eaf88669 100644 --- a/sdk/program/Cargo.toml +++ b/sdk/program/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-program" -version = "1.14.6" +version = "1.14.7" description = "Solana Program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -31,9 +31,9 @@ serde_derive = "1.0" serde_json = "1.0" sha2 = "0.10.0" sha3 = "0.10.0" -solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.6" } -solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.6" } -solana-sdk-macro = { path = "../macro", version = "=1.14.6" } +solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.7" } +solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.7" } +solana-sdk-macro = { path = "../macro", version = "=1.14.7" } thiserror = "1.0" [target.'cfg(not(target_os = "solana"))'.dependencies] @@ -50,7 +50,7 @@ wasm-bindgen = "0.2" zeroize = { version = "1.3", default-features = true, features = ["zeroize_derive"] } [target.'cfg(not(target_os = "solana"))'.dev-dependencies] -solana-logger = { path = "../../logger", version = "=1.14.6" } +solana-logger = { path = "../../logger", version = "=1.14.7" } [target.'cfg(target_arch = "wasm32")'.dependencies] console_error_panic_hook = "0.1.7" diff --git a/send-transaction-service/Cargo.toml b/send-transaction-service/Cargo.toml index 8acc8220a278a3..76b66099c10538 100644 --- a/send-transaction-service/Cargo.toml +++ b/send-transaction-service/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-send-transaction-service" -version = "1.14.6" +version = "1.14.7" description = "Solana send transaction service" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,14 +12,14 @@ edition = "2021" [dependencies] crossbeam-channel = "0.5" log = "0.4.17" -solana-client = { path = "../client", version = "=1.14.6" } -solana-measure = { path = "../measure", version = "=1.14.6" } -solana-metrics = { path = "../metrics", version = "=1.14.6" } -solana-runtime = { path = "../runtime", version = "=1.14.6" } -solana-sdk = { path = "../sdk", version = "=1.14.6" } +solana-client = { path = "../client", version = "=1.14.7" } +solana-measure = { path = "../measure", version = "=1.14.7" } +solana-metrics = { path = "../metrics", version = "=1.14.7" } +solana-runtime = { path = "../runtime", version = "=1.14.7" } +solana-sdk = { path = "../sdk", version = "=1.14.7" } [dev-dependencies] -solana-logger = { path = "../logger", version = "=1.14.6" } +solana-logger = { path = "../logger", version = "=1.14.7" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/stake-accounts/Cargo.toml b/stake-accounts/Cargo.toml index d0540a48c33cce..c80f07b372978f 100644 --- a/stake-accounts/Cargo.toml +++ b/stake-accounts/Cargo.toml @@ -3,7 +3,7 @@ name = "solana-stake-accounts" description = "Blockchain, Rebuilt for Scale" authors = ["Solana Maintainers "] edition = "2021" -version = "1.14.6" +version = "1.14.7" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -11,15 +11,15 @@ documentation = "https://docs.rs/solana-stake-accounts" [dependencies] clap = "2.33.1" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.6" } -solana-cli-config = { path = "../cli-config", version = "=1.14.6" } -solana-client = { path = "../client", version = "=1.14.6" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.6" } -solana-sdk = { path = "../sdk", version = "=1.14.6" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.6" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.7" } +solana-cli-config = { path = "../cli-config", version = "=1.14.7" } +solana-client = { path = "../client", version = "=1.14.7" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.7" } +solana-sdk = { path = "../sdk", version = "=1.14.7" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.7" } [dev-dependencies] -solana-runtime = { path = "../runtime", version = "=1.14.6" } +solana-runtime = { path = "../runtime", version = "=1.14.7" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/storage-bigtable/Cargo.toml b/storage-bigtable/Cargo.toml index fd9b1f049f487e..52ff4d807f58f6 100644 --- a/storage-bigtable/Cargo.toml +++ b/storage-bigtable/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-storage-bigtable" -version = "1.14.6" +version = "1.14.7" description = "Solana Storage BigTable" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -27,10 +27,10 @@ prost-types = "0.11.0" serde = "1.0.138" serde_derive = "1.0.103" smpl_jwt = "0.7.1" -solana-metrics = { path = "../metrics", version = "=1.14.6" } -solana-sdk = { path = "../sdk", version = "=1.14.6" } -solana-storage-proto = { path = "../storage-proto", version = "=1.14.6" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.6" } +solana-metrics = { path = "../metrics", version = "=1.14.7" } +solana-sdk = { path = "../sdk", version = "=1.14.7" } +solana-storage-proto = { path = "../storage-proto", version = "=1.14.7" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.7" } thiserror = "1.0" tokio = "1" tonic = { version = "0.8.0", features = ["tls", "transport"] } diff --git a/storage-bigtable/build-proto/Cargo.lock b/storage-bigtable/build-proto/Cargo.lock index 6a089387799d5a..a15e3d33d76249 100644 --- a/storage-bigtable/build-proto/Cargo.lock +++ b/storage-bigtable/build-proto/Cargo.lock @@ -219,7 +219,7 @@ dependencies = [ [[package]] name = "proto" -version = "1.14.6" +version = "1.14.7" dependencies = [ "protobuf-src", "tonic-build", diff --git a/storage-bigtable/build-proto/Cargo.toml b/storage-bigtable/build-proto/Cargo.toml index 9cc8812760e421..ac13557b429e6b 100644 --- a/storage-bigtable/build-proto/Cargo.toml +++ b/storage-bigtable/build-proto/Cargo.toml @@ -7,7 +7,7 @@ license = "Apache-2.0" name = "proto" publish = false repository = "https://github.com/solana-labs/solana" -version = "1.14.6" +version = "1.14.7" [workspace] diff --git a/storage-proto/Cargo.toml b/storage-proto/Cargo.toml index d34be3644f5018..4036867cb4bfff 100644 --- a/storage-proto/Cargo.toml +++ b/storage-proto/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-storage-proto" -version = "1.14.6" +version = "1.14.7" description = "Solana Storage Protobuf Definitions" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,9 +14,9 @@ bincode = "1.3.3" bs58 = "0.4.0" prost = "0.11.0" serde = "1.0.138" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.6" } -solana-sdk = { path = "../sdk", version = "=1.14.6" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.6" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.7" } +solana-sdk = { path = "../sdk", version = "=1.14.7" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.7" } [dev-dependencies] enum-iterator = "0.8.1" diff --git a/streamer/Cargo.toml b/streamer/Cargo.toml index 2faf36bb0dd841..7d1d6337184ea9 100644 --- a/streamer/Cargo.toml +++ b/streamer/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-streamer" -version = "1.14.6" +version = "1.14.7" description = "Solana Streamer" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -25,15 +25,15 @@ quinn = "0.8.3" rand = "0.7.0" rcgen = "0.9.2" rustls = { version = "0.20.6", features = ["dangerous_configuration"] } -solana-metrics = { path = "../metrics", version = "=1.14.6" } -solana-perf = { path = "../perf", version = "=1.14.6" } -solana-sdk = { path = "../sdk", version = "=1.14.6" } +solana-metrics = { path = "../metrics", version = "=1.14.7" } +solana-perf = { path = "../perf", version = "=1.14.7" } +solana-sdk = { path = "../sdk", version = "=1.14.7" } thiserror = "1.0" tokio = { version = "1", features = ["full"] } x509-parser = "0.14.0" [dev-dependencies] -solana-logger = { path = "../logger", version = "=1.14.6" } +solana-logger = { path = "../logger", version = "=1.14.7" } [lib] crate-type = ["lib"] diff --git a/sys-tuner/Cargo.toml b/sys-tuner/Cargo.toml index 0aba1bc4cc9c62..60e693904d30be 100644 --- a/sys-tuner/Cargo.toml +++ b/sys-tuner/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-sys-tuner" description = "The solana cluster system tuner daemon" -version = "1.14.6" +version = "1.14.7" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,8 +14,8 @@ publish = true clap = "2.33.1" libc = "0.2.126" log = "0.4.17" -solana-logger = { path = "../logger", version = "=1.14.6" } -solana-version = { path = "../version", version = "=1.14.6" } +solana-logger = { path = "../logger", version = "=1.14.7" } +solana-version = { path = "../version", version = "=1.14.7" } [target."cfg(unix)".dependencies] unix_socket2 = "0.5.4" diff --git a/test-validator/Cargo.toml b/test-validator/Cargo.toml index ed59dc0c59ffc8..2b4402548a8471 100644 --- a/test-validator/Cargo.toml +++ b/test-validator/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "solana-test-validator" description = "Blockchain, Rebuilt for Scale" -version = "1.14.6" +version = "1.14.7" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-test-validator" readme = "../README.md" @@ -15,19 +15,19 @@ base64 = "0.13.0" log = "0.4.17" serde_derive = "1.0.103" serde_json = "1.0.81" -solana-cli-output = { path = "../cli-output", version = "=1.14.6" } -solana-client = { path = "../client", version = "=1.14.6" } -solana-core = { path = "../core", version = "=1.14.6" } -solana-gossip = { path = "../gossip", version = "=1.14.6" } -solana-ledger = { path = "../ledger", version = "=1.14.6" } -solana-logger = { path = "../logger", version = "=1.14.6" } -solana-net-utils = { path = "../net-utils", version = "=1.14.6" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.6" } -solana-program-test = { path = "../program-test", version = "=1.14.6" } -solana-rpc = { path = "../rpc", version = "=1.14.6" } -solana-runtime = { path = "../runtime", version = "=1.14.6" } -solana-sdk = { path = "../sdk", version = "=1.14.6" } -solana-streamer = { path = "../streamer", version = "=1.14.6" } +solana-cli-output = { path = "../cli-output", version = "=1.14.7" } +solana-client = { path = "../client", version = "=1.14.7" } +solana-core = { path = "../core", version = "=1.14.7" } +solana-gossip = { path = "../gossip", version = "=1.14.7" } +solana-ledger = { path = "../ledger", version = "=1.14.7" } +solana-logger = { path = "../logger", version = "=1.14.7" } +solana-net-utils = { path = "../net-utils", version = "=1.14.7" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.7" } +solana-program-test = { path = "../program-test", version = "=1.14.7" } +solana-rpc = { path = "../rpc", version = "=1.14.7" } +solana-runtime = { path = "../runtime", version = "=1.14.7" } +solana-sdk = { path = "../sdk", version = "=1.14.7" } +solana-streamer = { path = "../streamer", version = "=1.14.7" } tokio = { version = "1", features = ["full"] } [package.metadata.docs.rs] diff --git a/tokens/Cargo.toml b/tokens/Cargo.toml index dc696e4253a265..04719d29fe3a35 100644 --- a/tokens/Cargo.toml +++ b/tokens/Cargo.toml @@ -3,7 +3,7 @@ name = "solana-tokens" description = "Blockchain, Rebuilt for Scale" authors = ["Solana Maintainers "] edition = "2021" -version = "1.14.6" +version = "1.14.7" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -19,14 +19,14 @@ indexmap = "1.9.1" indicatif = "0.16.2" pickledb = "0.4.1" serde = { version = "1.0", features = ["derive"] } -solana-account-decoder = { path = "../account-decoder", version = "=1.14.6" } -solana-clap-utils = { path = "../clap-utils", version = "=1.14.6" } -solana-cli-config = { path = "../cli-config", version = "=1.14.6" } -solana-client = { path = "../client", version = "=1.14.6" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.6" } -solana-sdk = { path = "../sdk", version = "=1.14.6" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.6" } -solana-version = { path = "../version", version = "=1.14.6" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.7" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.7" } +solana-cli-config = { path = "../cli-config", version = "=1.14.7" } +solana-client = { path = "../client", version = "=1.14.7" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.7" } +solana-sdk = { path = "../sdk", version = "=1.14.7" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.7" } +solana-version = { path = "../version", version = "=1.14.7" } spl-associated-token-account = { version = "=1.1.1" } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } tempfile = "3.3.0" @@ -34,6 +34,6 @@ thiserror = "1.0" [dev-dependencies] bincode = "1.3.3" -solana-logger = { path = "../logger", version = "=1.14.6" } -solana-streamer = { path = "../streamer", version = "=1.14.6" } -solana-test-validator = { path = "../test-validator", version = "=1.14.6" } +solana-logger = { path = "../logger", version = "=1.14.7" } +solana-streamer = { path = "../streamer", version = "=1.14.7" } +solana-test-validator = { path = "../test-validator", version = "=1.14.7" } diff --git a/transaction-dos/Cargo.toml b/transaction-dos/Cargo.toml index 2d49298b7de72e..2fb19aa7835b01 100644 --- a/transaction-dos/Cargo.toml +++ b/transaction-dos/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-transaction-dos" -version = "1.14.6" +version = "1.14.7" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,23 +14,23 @@ clap = "2.33.1" log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.6" } -solana-cli = { path = "../cli", version = "=1.14.6" } -solana-client = { path = "../client", version = "=1.14.6" } -solana-core = { path = "../core", version = "=1.14.6" } -solana-faucet = { path = "../faucet", version = "=1.14.6" } -solana-gossip = { path = "../gossip", version = "=1.14.6" } -solana-logger = { path = "../logger", version = "=1.14.6" } -solana-measure = { path = "../measure", version = "=1.14.6" } -solana-net-utils = { path = "../net-utils", version = "=1.14.6" } -solana-runtime = { path = "../runtime", version = "=1.14.6" } -solana-sdk = { path = "../sdk", version = "=1.14.6" } -solana-streamer = { path = "../streamer", version = "=1.14.6" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.6" } -solana-version = { path = "../version", version = "=1.14.6" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.7" } +solana-cli = { path = "../cli", version = "=1.14.7" } +solana-client = { path = "../client", version = "=1.14.7" } +solana-core = { path = "../core", version = "=1.14.7" } +solana-faucet = { path = "../faucet", version = "=1.14.7" } +solana-gossip = { path = "../gossip", version = "=1.14.7" } +solana-logger = { path = "../logger", version = "=1.14.7" } +solana-measure = { path = "../measure", version = "=1.14.7" } +solana-net-utils = { path = "../net-utils", version = "=1.14.7" } +solana-runtime = { path = "../runtime", version = "=1.14.7" } +solana-sdk = { path = "../sdk", version = "=1.14.7" } +solana-streamer = { path = "../streamer", version = "=1.14.7" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.7" } +solana-version = { path = "../version", version = "=1.14.7" } [dev-dependencies] -solana-local-cluster = { path = "../local-cluster", version = "=1.14.6" } +solana-local-cluster = { path = "../local-cluster", version = "=1.14.7" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/transaction-status/Cargo.toml b/transaction-status/Cargo.toml index eca00e70f18cae..b2491a5c764e87 100644 --- a/transaction-status/Cargo.toml +++ b/transaction-status/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-transaction-status" -version = "1.14.6" +version = "1.14.7" description = "Solana transaction status types" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -20,12 +20,12 @@ log = "0.4.17" serde = "1.0.138" serde_derive = "1.0.103" serde_json = "1.0.81" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.6" } -solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.6" } -solana-measure = { path = "../measure", version = "=1.14.6" } -solana-metrics = { path = "../metrics", version = "=1.14.6" } -solana-sdk = { path = "../sdk", version = "=1.14.6" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.6" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.7" } +solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.7" } +solana-measure = { path = "../measure", version = "=1.14.7" } +solana-metrics = { path = "../metrics", version = "=1.14.7" } +solana-sdk = { path = "../sdk", version = "=1.14.7" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.7" } spl-associated-token-account = { version = "=1.1.1", features = ["no-entrypoint"] } spl-memo = { version = "=3.0.1", features = ["no-entrypoint"] } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } diff --git a/upload-perf/Cargo.toml b/upload-perf/Cargo.toml index 9117b1c50a87f5..a0f72259c94546 100644 --- a/upload-perf/Cargo.toml +++ b/upload-perf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-upload-perf" -version = "1.14.6" +version = "1.14.7" description = "Metrics Upload Utility" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -11,7 +11,7 @@ publish = false [dependencies] serde_json = "1.0.81" -solana-metrics = { path = "../metrics", version = "=1.14.6" } +solana-metrics = { path = "../metrics", version = "=1.14.7" } [[bin]] name = "solana-upload-perf" diff --git a/validator/Cargo.toml b/validator/Cargo.toml index bb338a37eaba71..78c6f3302c2baa 100644 --- a/validator/Cargo.toml +++ b/validator/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-validator" description = "Blockchain, Rebuilt for Scale" -version = "1.14.6" +version = "1.14.7" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -28,30 +28,30 @@ num_cpus = "1.13.1" rand = "0.7.0" serde = "1.0.138" serde_json = "1.0.81" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.6" } -solana-cli-config = { path = "../cli-config", version = "=1.14.6" } -solana-client = { path = "../client", version = "=1.14.6" } -solana-core = { path = "../core", version = "=1.14.6" } -solana-download-utils = { path = "../download-utils", version = "=1.14.6" } -solana-entry = { path = "../entry", version = "=1.14.6" } -solana-faucet = { path = "../faucet", version = "=1.14.6" } -solana-genesis-utils = { path = "../genesis-utils", version = "=1.14.6" } -solana-gossip = { path = "../gossip", version = "=1.14.6" } -solana-ledger = { path = "../ledger", version = "=1.14.6" } -solana-logger = { path = "../logger", version = "=1.14.6" } -solana-metrics = { path = "../metrics", version = "=1.14.6" } -solana-net-utils = { path = "../net-utils", version = "=1.14.6" } -solana-perf = { path = "../perf", version = "=1.14.6" } -solana-poh = { path = "../poh", version = "=1.14.6" } -solana-rpc = { path = "../rpc", version = "=1.14.6" } -solana-runtime = { path = "../runtime", version = "=1.14.6" } -solana-sdk = { path = "../sdk", version = "=1.14.6" } -solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.6" } -solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.6" } -solana-streamer = { path = "../streamer", version = "=1.14.6" } -solana-test-validator = { path = "../test-validator", version = "=1.14.6" } -solana-version = { path = "../version", version = "=1.14.6" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.6" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.7" } +solana-cli-config = { path = "../cli-config", version = "=1.14.7" } +solana-client = { path = "../client", version = "=1.14.7" } +solana-core = { path = "../core", version = "=1.14.7" } +solana-download-utils = { path = "../download-utils", version = "=1.14.7" } +solana-entry = { path = "../entry", version = "=1.14.7" } +solana-faucet = { path = "../faucet", version = "=1.14.7" } +solana-genesis-utils = { path = "../genesis-utils", version = "=1.14.7" } +solana-gossip = { path = "../gossip", version = "=1.14.7" } +solana-ledger = { path = "../ledger", version = "=1.14.7" } +solana-logger = { path = "../logger", version = "=1.14.7" } +solana-metrics = { path = "../metrics", version = "=1.14.7" } +solana-net-utils = { path = "../net-utils", version = "=1.14.7" } +solana-perf = { path = "../perf", version = "=1.14.7" } +solana-poh = { path = "../poh", version = "=1.14.7" } +solana-rpc = { path = "../rpc", version = "=1.14.7" } +solana-runtime = { path = "../runtime", version = "=1.14.7" } +solana-sdk = { path = "../sdk", version = "=1.14.7" } +solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.7" } +solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.7" } +solana-streamer = { path = "../streamer", version = "=1.14.7" } +solana-test-validator = { path = "../test-validator", version = "=1.14.7" } +solana-version = { path = "../version", version = "=1.14.7" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.7" } symlink = "0.1.0" [target.'cfg(not(target_env = "msvc"))'.dependencies] diff --git a/version/Cargo.toml b/version/Cargo.toml index cca925b20ee15b..051d89d39427ed 100644 --- a/version/Cargo.toml +++ b/version/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-version" -version = "1.14.6" +version = "1.14.7" description = "Solana Version" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,9 +14,9 @@ log = "0.4.17" semver = "1.0.10" serde = "1.0.138" serde_derive = "1.0.103" -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.6" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.6" } -solana-sdk = { path = "../sdk", version = "=1.14.6" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.7" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.7" } +solana-sdk = { path = "../sdk", version = "=1.14.7" } [lib] name = "solana_version" diff --git a/watchtower/Cargo.toml b/watchtower/Cargo.toml index 7ee4593cde4a63..4eec52e40900b7 100644 --- a/watchtower/Cargo.toml +++ b/watchtower/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-watchtower" description = "Blockchain, Rebuilt for Scale" -version = "1.14.6" +version = "1.14.7" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -13,15 +13,15 @@ documentation = "https://docs.rs/solana-watchtower" clap = "2.33.1" humantime = "2.0.1" log = "0.4.17" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.6" } -solana-cli-config = { path = "../cli-config", version = "=1.14.6" } -solana-cli-output = { path = "../cli-output", version = "=1.14.6" } -solana-client = { path = "../client", version = "=1.14.6" } -solana-logger = { path = "../logger", version = "=1.14.6" } -solana-metrics = { path = "../metrics", version = "=1.14.6" } -solana-notifier = { path = "../notifier", version = "=1.14.6" } -solana-sdk = { path = "../sdk", version = "=1.14.6" } -solana-version = { path = "../version", version = "=1.14.6" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.7" } +solana-cli-config = { path = "../cli-config", version = "=1.14.7" } +solana-cli-output = { path = "../cli-output", version = "=1.14.7" } +solana-client = { path = "../client", version = "=1.14.7" } +solana-logger = { path = "../logger", version = "=1.14.7" } +solana-metrics = { path = "../metrics", version = "=1.14.7" } +solana-notifier = { path = "../notifier", version = "=1.14.7" } +solana-sdk = { path = "../sdk", version = "=1.14.7" } +solana-version = { path = "../version", version = "=1.14.7" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/zk-token-sdk/Cargo.toml b/zk-token-sdk/Cargo.toml index 0ff76db1aa45e2..04aab42b092679 100644 --- a/zk-token-sdk/Cargo.toml +++ b/zk-token-sdk/Cargo.toml @@ -3,7 +3,7 @@ name = "solana-zk-token-sdk" description = "Solana Zk Token SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" -version = "1.14.6" +version = "1.14.7" license = "Apache-2.0" edition = "2021" @@ -12,7 +12,7 @@ base64 = "0.13" bytemuck = { version = "1.11.0", features = ["derive"] } num-derive = "0.3" num-traits = "0.2" -solana-program = { path = "../sdk/program", version = "=1.14.6" } +solana-program = { path = "../sdk/program", version = "=1.14.7" } [target.'cfg(not(target_os = "solana"))'.dependencies] aes-gcm-siv = "0.10.3" @@ -29,7 +29,7 @@ rand = "0.7" serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" sha3 = "0.9" -solana-sdk = { path = "../sdk", version = "=1.14.6" } +solana-sdk = { path = "../sdk", version = "=1.14.7" } subtle = "2" thiserror = "1.0" zeroize = { version = "1.3", default-features = false, features = ["zeroize_derive"] } From 51fa8dde80ae6ef74302c9ecf7884887f0cf0ca0 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Wed, 26 Oct 2022 19:57:58 +0000 Subject: [PATCH 213/465] enable repair ping/pong cache (backport #28408) (#28597) enable repair ping/pong cache (#28408) (cherry picked from commit 0df4be06a0d3c8927f667e7a646496e353f99827) Co-authored-by: Jeff Biseda --- core/src/serve_repair.rs | 72 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 71 insertions(+), 1 deletion(-) diff --git a/core/src/serve_repair.rs b/core/src/serve_repair.rs index a34ec4a3e81768..32f479ced9055d 100644 --- a/core/src/serve_repair.rs +++ b/core/src/serve_repair.rs @@ -166,6 +166,8 @@ struct ServeRepairStats { orphan: usize, pong: usize, ancestor_hashes: usize, + ping_cache_check_failed: usize, + pings_sent: usize, err_time_skew: usize, err_malformed: usize, err_sig_verify: usize, @@ -531,6 +533,12 @@ impl ServeRepair { i64 ), ("pong", stats.pong, i64), + ( + "ping_cache_check_failed", + stats.ping_cache_check_failed, + i64 + ), + ("pings_sent", stats.pings_sent, i64), ("err_time_skew", stats.err_time_skew, i64), ("err_malformed", stats.err_malformed, i64), ("err_sig_verify", stats.err_sig_verify, i64), @@ -659,6 +667,43 @@ impl ServeRepair { true } + fn check_ping_cache( + ping_cache: &mut PingCache, + request: &RepairProtocol, + from_addr: &SocketAddr, + identity_keypair: &Keypair, + ) -> (bool, Option) { + let mut rng = rand::thread_rng(); + let mut pingf = move || Ping::new_rand(&mut rng, identity_keypair).ok(); + let (check, ping) = + ping_cache.check(Instant::now(), (*request.sender(), *from_addr), &mut pingf); + let ping_pkt = if let Some(ping) = ping { + match request { + RepairProtocol::LegacyWindowIndex(_, _, _) + | RepairProtocol::LegacyHighestWindowIndex(_, _, _) + | RepairProtocol::LegacyOrphan(_, _) + | RepairProtocol::LegacyWindowIndexWithNonce(_, _, _, _) + | RepairProtocol::LegacyHighestWindowIndexWithNonce(_, _, _, _) + | RepairProtocol::LegacyOrphanWithNonce(_, _, _) + | RepairProtocol::WindowIndex { .. } + | RepairProtocol::HighestWindowIndex { .. } + | RepairProtocol::Orphan { .. } => { + let ping = RepairResponse::Ping(ping); + Packet::from_data(Some(from_addr), ping).ok() + } + RepairProtocol::LegacyAncestorHashes(_, _, _) + | RepairProtocol::AncestorHashes { .. } => { + let ping = AncestorHashesResponse::Ping(ping); + Packet::from_data(Some(from_addr), ping).ok() + } + RepairProtocol::Pong(_) => None, + } + } else { + None + }; + (check, ping_pkt) + } + fn handle_packets( &self, ping_cache: &mut PingCache, @@ -672,6 +717,8 @@ impl ServeRepair { ) { let identity_keypair = self.cluster_info.keypair().clone(); let my_id = identity_keypair.pubkey(); + let socket_addr_space = *self.cluster_info.socket_addr_space(); + let mut pending_pings = Vec::default(); // iter over the packets for (i, packet) in packet_batch.iter().enumerate() { @@ -683,6 +730,12 @@ impl ServeRepair { } }; + let from_addr = packet.meta.socket_addr(); + if !ContactInfo::is_valid_address(&from_addr, &socket_addr_space) { + stats.err_malformed += 1; + continue; + } + let staked = epoch_staked_nodes .as_ref() .map(|nodes| nodes.contains_key(request.sender())) @@ -704,7 +757,18 @@ impl ServeRepair { stats.unsigned_requests += 1; } - let from_addr = packet.meta.socket_addr(); + if !matches!(&request, RepairProtocol::Pong(_)) { + let (check, ping_pkt) = + Self::check_ping_cache(ping_cache, &request, &from_addr, &identity_keypair); + if let Some(ping_pkt) = ping_pkt { + pending_pings.push(ping_pkt); + } + if !check { + // collect stats for ping/pong verification + stats.ping_cache_check_failed += 1; + } + } + stats.processed += 1; let rsp = match Self::handle_repair( recycler, &from_addr, blockstore, request, stats, ping_cache, @@ -726,6 +790,12 @@ impl ServeRepair { break; } } + + if !pending_pings.is_empty() { + stats.pings_sent += pending_pings.len(); + let batch = PacketBatch::new(pending_pings); + let _ignore = response_sender.send(batch); + } } pub fn ancestor_repair_request_bytes( From 50cf0c74899c82753c15073d3231b45676af4c7b Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Wed, 26 Oct 2022 20:49:46 +0000 Subject: [PATCH 214/465] Limit async tasks spawn to runtime for quic transaction send (backport #28452) (#28603) Limit the number async tasks spawned to the runtime to avoid congestions. Co-authored-by: Lijun Wang <83639177+lijunwangs@users.noreply.github.com> --- client/src/quic_client.rs | 79 ++++++++++++++++++++++++++++++++++++--- 1 file changed, 74 insertions(+), 5 deletions(-) diff --git a/client/src/quic_client.rs b/client/src/quic_client.rs index 71775b4a4b7ad4..f1236b56b16bfc 100644 --- a/client/src/quic_client.rs +++ b/client/src/quic_client.rs @@ -15,11 +15,59 @@ use { }, lazy_static::lazy_static, solana_sdk::transport::Result as TransportResult, - std::{net::SocketAddr, sync::Arc}, + std::{ + net::SocketAddr, + sync::{Arc, Condvar, Mutex, MutexGuard}, + }, tokio::runtime::Runtime, }; +const MAX_OUTSTANDING_TASK: u64 = 2000; + +/// A semaphore used for limiting the number of asynchronous tasks spawn to the +/// runtime. Before spawnning a task, use acquire. After the task is done (be it +/// succsess or failure), call release. +struct AsyncTaskSemaphore { + /// Keep the counter info about the usage + counter: Mutex, + /// Conditional variable for signaling when counter is decremented + cond_var: Condvar, + /// The maximum usage allowed by this semaphore. + permits: u64, +} + +impl AsyncTaskSemaphore { + fn new(permits: u64) -> Self { + Self { + counter: Mutex::new(0), + cond_var: Condvar::new(), + permits, + } + } + + /// When returned, the lock has been locked and usage count has been + /// incremented. When the returned MutexGuard is dropped the lock is dropped + /// without decrementing the usage count. + fn acquire(&self) -> MutexGuard { + let mut count = self.counter.lock().unwrap(); + *count += 1; + while *count > self.permits { + count = self.cond_var.wait(count).unwrap(); + } + count + } + + /// Acquire the lock and decrement the usage count + fn release(&self) { + let mut count = self.counter.lock().unwrap(); + *count -= 1; + self.cond_var.notify_one(); + } +} + lazy_static! { + static ref ASYNC_TASK_SEMAPHORE: AsyncTaskSemaphore = + AsyncTaskSemaphore::new(MAX_OUTSTANDING_TASK); static ref RUNTIME: Runtime = tokio::runtime::Builder::new_multi_thread() .enable_all() .build() @@ -55,6 +103,24 @@ impl QuicTpuConnection { } } +async fn send_wire_transaction_async( + connection: Arc, + wire_transaction: Vec, +) -> TransportResult<()> { + let result = connection.send_wire_transaction(wire_transaction).await; + ASYNC_TASK_SEMAPHORE.release(); + result +} + +async fn send_wire_transaction_batch_async( + connection: Arc, + buffers: Vec>, +) -> TransportResult<()> { + let result = connection.send_wire_transaction_batch(&buffers).await; + ASYNC_TASK_SEMAPHORE.release(); + result +} + impl TpuConnection for QuicTpuConnection { fn tpu_addr(&self) -> &SocketAddr { self.inner.tpu_addr() @@ -69,16 +135,19 @@ impl TpuConnection for QuicTpuConnection { } fn send_wire_transaction_async(&self, wire_transaction: Vec) -> TransportResult<()> { + let _lock = ASYNC_TASK_SEMAPHORE.acquire(); let inner = self.inner.clone(); - //drop and detach the task - let _ = RUNTIME.spawn(async move { inner.send_wire_transaction(wire_transaction).await }); + + let _ = RUNTIME + .spawn(async move { send_wire_transaction_async(inner, wire_transaction).await }); Ok(()) } fn send_wire_transaction_batch_async(&self, buffers: Vec>) -> TransportResult<()> { + let _lock = ASYNC_TASK_SEMAPHORE.acquire(); let inner = self.inner.clone(); - //drop and detach the task - let _ = RUNTIME.spawn(async move { inner.send_wire_transaction_batch(&buffers).await }); + let _ = + RUNTIME.spawn(async move { send_wire_transaction_batch_async(inner, buffers).await }); Ok(()) } } From faf1734bd49f68513c271bf8d1a435723a1389ef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexander=20Mei=C3=9Fner?= Date: Thu, 27 Oct 2022 19:12:38 +0200 Subject: [PATCH 215/465] Backport of #28599 to v1.14 (#28601) * Extends is_nonoverlapping() to be able to deal with two different lengths. * Uses is_nonoverlapping() for syscall output parameters. * Feature gates the new throws of SyscallError::CopyOverlapping. --- programs/bpf_loader/src/syscalls/mem_ops.rs | 4 +- programs/bpf_loader/src/syscalls/mod.rs | 86 ++++++++++++++++++--- sdk/program/src/program_stubs.rs | 34 ++++---- sdk/src/feature_set.rs | 5 ++ 4 files changed, 102 insertions(+), 27 deletions(-) diff --git a/programs/bpf_loader/src/syscalls/mem_ops.rs b/programs/bpf_loader/src/syscalls/mem_ops.rs index 2fb5cd064aad2d..1b18df3157c229 100644 --- a/programs/bpf_loader/src/syscalls/mem_ops.rs +++ b/programs/bpf_loader/src/syscalls/mem_ops.rs @@ -36,7 +36,7 @@ declare_syscall!( .feature_set .is_active(&check_physical_overlapping::id()); - if !is_nonoverlapping(src_addr, dst_addr, n) { + if !is_nonoverlapping(src_addr, n, dst_addr, n) { *result = Err(SyscallError::CopyOverlapping.into()); return; } @@ -64,7 +64,7 @@ declare_syscall!( ) .as_ptr(); if do_check_physical_overlapping - && !is_nonoverlapping(src_ptr as usize, dst_ptr as usize, n as usize) + && !is_nonoverlapping(src_ptr as usize, n as usize, dst_ptr as usize, n as usize) { unsafe { std::ptr::copy(src_ptr, dst_ptr, n as usize); diff --git a/programs/bpf_loader/src/syscalls/mod.rs b/programs/bpf_loader/src/syscalls/mod.rs index c5699240d838b0..1d8776eb444c8b 100644 --- a/programs/bpf_loader/src/syscalls/mod.rs +++ b/programs/bpf_loader/src/syscalls/mod.rs @@ -34,7 +34,7 @@ use { entrypoint::{BPF_ALIGN_OF_U128, MAX_PERMITTED_DATA_INCREASE, SUCCESS}, feature_set::{ self, blake3_syscall_enabled, check_physical_overlapping, check_slice_translation_size, - curve25519_syscall_enabled, disable_fees_sysvar, + check_syscall_outputs_do_not_overlap, curve25519_syscall_enabled, disable_fees_sysvar, enable_early_verification_of_account_modifications, libsecp256k1_0_5_upgrade_enabled, limit_secp256k1_recovery_id, prevent_calling_precompiles_as_programs, syscall_saturated_math, @@ -812,6 +812,18 @@ declare_syscall!( ), result ); + if !is_nonoverlapping( + bump_seed_ref as *const _ as usize, + std::mem::size_of_val(bump_seed_ref), + address.as_ptr() as usize, + std::mem::size_of::(), + ) && invoke_context + .feature_set + .is_active(&check_syscall_outputs_do_not_overlap::id()) + { + *result = Err(SyscallError::CopyOverlapping.into()); + return; + } *bump_seed_ref = bump_seed[0]; address.copy_from_slice(new_address.as_ref()); *result = Ok(0); @@ -1681,6 +1693,19 @@ declare_syscall!( result ); + if !is_nonoverlapping( + to_slice.as_ptr() as usize, + length as usize, + program_id_result as *const _ as usize, + std::mem::size_of::(), + ) && invoke_context + .feature_set + .is_active(&check_syscall_outputs_do_not_overlap::id()) + { + *result = Err(SyscallError::CopyOverlapping.into()); + return; + } + *program_id_result = *program_id; } @@ -1744,10 +1769,7 @@ declare_syscall!( }; if let Some(instruction_context) = instruction_context { - let ProcessedSiblingInstruction { - data_len, - accounts_len, - } = question_mark!( + let result_header = question_mark!( translate_type_mut::( memory_mapping, meta_addr, @@ -1756,8 +1778,8 @@ declare_syscall!( result ); - if *data_len == (instruction_context.get_instruction_data().len() as u64) - && *accounts_len + if result_header.data_len == (instruction_context.get_instruction_data().len() as u64) + && result_header.accounts_len == (instruction_context.get_number_of_instruction_accounts() as u64) { let program_id = question_mark!( @@ -1772,7 +1794,7 @@ declare_syscall!( translate_slice_mut::( memory_mapping, data_addr, - *data_len as u64, + result_header.data_len as u64, invoke_context.get_check_aligned(), invoke_context.get_check_size(), ), @@ -1782,13 +1804,54 @@ declare_syscall!( translate_slice_mut::( memory_mapping, accounts_addr, - *accounts_len as u64, + result_header.accounts_len as u64, invoke_context.get_check_aligned(), invoke_context.get_check_size(), ), result ); + if (!is_nonoverlapping( + result_header as *const _ as usize, + std::mem::size_of::(), + program_id as *const _ as usize, + std::mem::size_of::(), + ) || !is_nonoverlapping( + result_header as *const _ as usize, + std::mem::size_of::(), + accounts.as_ptr() as usize, + std::mem::size_of::() + .saturating_mul(result_header.accounts_len as usize), + ) || !is_nonoverlapping( + result_header as *const _ as usize, + std::mem::size_of::(), + data.as_ptr() as usize, + result_header.data_len as usize, + ) || !is_nonoverlapping( + program_id as *const _ as usize, + std::mem::size_of::(), + data.as_ptr() as usize, + result_header.data_len as usize, + ) || !is_nonoverlapping( + program_id as *const _ as usize, + std::mem::size_of::(), + accounts.as_ptr() as usize, + std::mem::size_of::() + .saturating_mul(result_header.accounts_len as usize), + ) || !is_nonoverlapping( + data.as_ptr() as usize, + result_header.data_len as usize, + accounts.as_ptr() as usize, + std::mem::size_of::() + .saturating_mul(result_header.accounts_len as usize), + )) && invoke_context + .feature_set + .is_active(&check_syscall_outputs_do_not_overlap::id()) + { + *result = Err(SyscallError::CopyOverlapping.into()); + return; + } + *program_id = *question_mark!( instruction_context .get_last_program_key(invoke_context.transaction_context) @@ -1816,8 +1879,9 @@ declare_syscall!( ); accounts.clone_from_slice(account_metas.as_slice()); } - *data_len = instruction_context.get_instruction_data().len() as u64; - *accounts_len = instruction_context.get_number_of_instruction_accounts() as u64; + result_header.data_len = instruction_context.get_instruction_data().len() as u64; + result_header.accounts_len = + instruction_context.get_number_of_instruction_accounts() as u64; *result = Ok(true as u64); return; } diff --git a/sdk/program/src/program_stubs.rs b/sdk/program/src/program_stubs.rs index a0265255849318..28eff37b688eea 100644 --- a/sdk/program/src/program_stubs.rs +++ b/sdk/program/src/program_stubs.rs @@ -54,7 +54,7 @@ pub trait SyscallStubs: Sync + Send { unsafe fn sol_memcpy(&self, dst: *mut u8, src: *const u8, n: usize) { // cannot be overlapping assert!( - is_nonoverlapping(src as usize, dst as usize, n), + is_nonoverlapping(src as usize, n, dst as usize, n), "memcpy does not support overlapping regions" ); std::ptr::copy_nonoverlapping(src, dst, n as usize); @@ -196,18 +196,20 @@ pub(crate) fn sol_get_stack_height() -> u64 { /// Check that two regions do not overlap. /// -/// Adapted from libcore, hidden to share with bpf_loader without being part of -/// the API surface. +/// Hidden to share with bpf_loader without being part of the API surface. #[doc(hidden)] -pub fn is_nonoverlapping(src: N, dst: N, count: N) -> bool +pub fn is_nonoverlapping(src: N, src_len: N, dst: N, dst_len: N) -> bool where N: Ord + std::ops::Sub, ::Output: Ord, { - let diff = if src > dst { src - dst } else { dst - src }; - // If the absolute distance between the ptrs is at least as big as the size of the buffer, + // If the absolute distance between the ptrs is at least as big as the size of the other, // they do not overlap. - diff >= count + if src > dst { + src - dst >= dst_len + } else { + dst - src >= src_len + } } #[cfg(test)] @@ -216,12 +218,16 @@ mod tests { #[test] fn test_is_nonoverlapping() { - assert!(is_nonoverlapping(10, 7, 3)); - assert!(!is_nonoverlapping(10, 8, 3)); - assert!(!is_nonoverlapping(10, 9, 3)); - assert!(!is_nonoverlapping(10, 10, 3)); - assert!(!is_nonoverlapping(10, 11, 3)); - assert!(!is_nonoverlapping(10, 12, 3)); - assert!(is_nonoverlapping(10, 13, 3)); + for dst in 0..8 { + assert!(is_nonoverlapping(10, 3, dst, 3)); + } + for dst in 8..13 { + assert!(!is_nonoverlapping(10, 3, dst, 3)); + } + for dst in 13..20 { + assert!(is_nonoverlapping(10, 3, dst, 3)); + } + assert!(is_nonoverlapping::(255, 3, 254, 1)); + assert!(!is_nonoverlapping::(255, 2, 254, 3)); } } diff --git a/sdk/src/feature_set.rs b/sdk/src/feature_set.rs index d9f661027be11e..a862bbebfe7245 100644 --- a/sdk/src/feature_set.rs +++ b/sdk/src/feature_set.rs @@ -508,6 +508,10 @@ pub mod increase_tx_account_lock_limit { solana_sdk::declare_id!("9LZdXeKGeBV6hRLdxS1rHbHoEUsKqesCC2ZAPTPKJAbK"); } +pub mod check_syscall_outputs_do_not_overlap { + solana_sdk::declare_id!("3uRVPBpyEJRo1emLCrq38eLRFGcu6uKSpUXqGvU8T7SZ"); +} + lazy_static! { /// Map of feature identifiers to user-visible description pub static ref FEATURE_NAMES: HashMap = [ @@ -629,6 +633,7 @@ lazy_static! { (vote_state_update_root_fix::id(), "fix root in vote state updates #27361"), (return_none_for_zero_lamport_accounts::id(), "return none for zero lamport accounts #27800"), (increase_tx_account_lock_limit::id(), "increase tx account lock limit to 128 #27241"), + (check_syscall_outputs_do_not_overlap::id(), "check syscall outputs do_not overlap #28600"), /*************** ADD NEW FEATURES HERE ***************/ ] .iter() From 58db36d55078a266d288432c4351bc3d21cc3172 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Thu, 27 Oct 2022 19:13:28 +0000 Subject: [PATCH 216/465] Add help text to genesis creation time assert (backport #28629) (#28631) Add help text to genesis creation time assert (#28629) If a validator starts with a snapshot from the wrong cluster, an assert will trigger complaining about the genesis_creation_time encoded in the snapshot differing from the genesis_creation_time embedded in genesis.bin. This could be a fairly easy mistake to make so add a help string to the assertion to point operators in the right direction. (cherry picked from commit 7b70aef33c3829dba05b6a462e4658647237a6fd) Co-authored-by: steviez --- runtime/src/bank.rs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/runtime/src/bank.rs b/runtime/src/bank.rs index a44be3d1657057..0247d509c99348 100644 --- a/runtime/src/bank.rs +++ b/runtime/src/bank.rs @@ -1959,6 +1959,11 @@ impl Bank { // Consider removing from serializable bank state // (BankFieldsToSerialize/BankFieldsToDeserialize) and initializing // from the passed in genesis_config instead (as new()/new_with_paths() already do) + assert_eq!( + bank.genesis_creation_time, genesis_config.creation_time, + "Bank snapshot genesis creation time does not match genesis.bin creation time.\ + The snapshot and genesis.bin might pertain to different clusters" + ); assert_eq!( bank.hashes_per_tick, genesis_config.poh_config.hashes_per_tick @@ -1969,7 +1974,6 @@ impl Bank { genesis_config.poh_config.target_tick_duration.as_nanos() * genesis_config.ticks_per_slot as u128 ); - assert_eq!(bank.genesis_creation_time, genesis_config.creation_time); assert_eq!(bank.max_tick_height, (bank.slot + 1) * bank.ticks_per_slot); assert_eq!( bank.slots_per_year, From d9b9e329358ad8e47928773bede242f6c0dfb36f Mon Sep 17 00:00:00 2001 From: apfitzge Date: Fri, 28 Oct 2022 16:37:43 -0500 Subject: [PATCH 217/465] Maintain original queue capacity for unprocessed packet buffer - Manual v1.14 Backport (#28663) Maintain original queue capacity for unprocessed packet buffer --- core/src/banking_stage.rs | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/core/src/banking_stage.rs b/core/src/banking_stage.rs index a748ea701cbfec..d22d8b0c5e9e92 100644 --- a/core/src/banking_stage.rs +++ b/core/src/banking_stage.rs @@ -65,7 +65,6 @@ use { collections::HashMap, env, net::{SocketAddr, UdpSocket}, - rc::Rc, sync::{ atomic::{AtomicU64, AtomicUsize, Ordering}, Arc, RwLock, @@ -665,14 +664,16 @@ impl BankingStage { let buffered_packets_len = buffered_packet_batches.len(); let mut proc_start = Measure::start("consume_buffered_process"); let mut reached_end_of_slot = false; + let original_capacity = buffered_packet_batches.capacity(); let mut retryable_packets = { - let capacity = buffered_packet_batches.capacity(); std::mem::replace( &mut buffered_packet_batches.packet_priority_queue, - MinMaxHeap::with_capacity(capacity), + MinMaxHeap::new(), ) }; - let retryable_packets: MinMaxHeap> = retryable_packets + + let mut new_retryable_packets = MinMaxHeap::with_capacity(original_capacity); + new_retryable_packets.extend(retryable_packets .drain_desc() .chunks(num_packets_to_process_per_iteration) .into_iter() @@ -781,10 +782,9 @@ impl BankingStage { packets_to_process } - }) - .collect(); + })); - buffered_packet_batches.packet_priority_queue = retryable_packets; + buffered_packet_batches.packet_priority_queue = new_retryable_packets; if reached_end_of_slot { slot_metrics_tracker @@ -804,7 +804,8 @@ impl BankingStage { (consumed_buffered_packets_count as f32) / (proc_start.as_s()) ); - // Assert unprocessed queue is still consistent + // Assert unprocessed queue is still consistent and maintains original capacity + assert_eq!(buffered_packet_batches.capacity(), original_capacity); assert_eq!( buffered_packet_batches.packet_priority_queue.len(), buffered_packet_batches.message_hash_to_transaction.len() From e57c1cc4a0ac6892659482aa6d76ca5f3d0a4e73 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Sat, 29 Oct 2022 16:11:26 +0000 Subject: [PATCH 218/465] chore: bump tj-actions/changed-files to v34 (backport #28674) (#28676) chore: bump tj-actions/changed-files to v34 (#28674) (cherry picked from commit 50d811653ac5ed37f59ee848c6ec19af11ce6a89) Co-authored-by: Yihau Chen --- .github/workflows/docs.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index a78c1e25440a7b..f0df4d208a0ab3 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -31,7 +31,7 @@ jobs: - name: Get specific changed files id: changed-files-specific - uses: tj-actions/changed-files@v29.0.7 + uses: tj-actions/changed-files@v34 with: files: | .github/workflows/docs.yml From 030eb5f2caadebeb5d656c1a0b2d2058ea4bd242 Mon Sep 17 00:00:00 2001 From: Andrew Fitzgerald Date: Mon, 24 Oct 2022 15:38:41 -0500 Subject: [PATCH 219/465] MultiIteratorScanner - improve banking stage performance with high contention --- core/benches/banking_stage.rs | 1 - core/src/banking_stage.rs | 519 +++++++++++++++++------------ core/src/lib.rs | 1 + core/src/multi_iterator_scanner.rs | 351 +++++++++++++++++++ 4 files changed, 649 insertions(+), 223 deletions(-) create mode 100644 core/src/multi_iterator_scanner.rs diff --git a/core/benches/banking_stage.rs b/core/benches/banking_stage.rs index fb506be8c5626f..9905172a6c7f4a 100644 --- a/core/benches/banking_stage.rs +++ b/core/benches/banking_stage.rs @@ -98,7 +98,6 @@ fn bench_consume_buffered(bencher: &mut Bencher) { &recorder, &QosService::new(Arc::new(RwLock::new(CostModel::default())), 1), &mut LeaderSlotMetricsTracker::new(0), - 10, None, ); }); diff --git a/core/src/banking_stage.rs b/core/src/banking_stage.rs index d22d8b0c5e9e92..0b7b4e21f8e170 100644 --- a/core/src/banking_stage.rs +++ b/core/src/banking_stage.rs @@ -1,6 +1,7 @@ //! The `banking_stage` processes Transaction messages. It is intended to be used //! to construct a software pipeline. The stage uses all available CPU cores and //! can do its processing in parallel with signature verification on the GPU. + use { crate::{ forward_packet_batches_by_accounts::ForwardPacketBatchesByAccounts, @@ -8,6 +9,7 @@ use { leader_slot_banking_stage_timing_metrics::{ LeaderExecuteAndCommitTimings, RecordTransactionsTimings, }, + multi_iterator_scanner::{MultiIteratorScanner, ProcessingDecision}, qos_service::QosService, sigverify::SigverifyTracerPacketStats, tracer_packet_stats::TracerPacketStats, @@ -62,9 +64,10 @@ use { solana_transaction_status::token_balances::TransactionTokenBalancesSet, std::{ cmp, - collections::HashMap, + collections::{HashMap, HashSet}, env, net::{SocketAddr, UdpSocket}, + rc::Rc, sync::{ atomic::{AtomicU64, AtomicUsize, Ordering}, Arc, RwLock, @@ -88,7 +91,6 @@ const MAX_NUM_TRANSACTIONS_PER_BATCH: usize = 64; const NUM_VOTE_PROCESSING_THREADS: u32 = 2; const MIN_THREADS_BANKING: u32 = 1; const MIN_TOTAL_THREADS: u32 = NUM_VOTE_PROCESSING_THREADS + MIN_THREADS_BANKING; -const UNPROCESSED_BUFFER_STEP_SIZE: usize = 128; const SLOT_BOUNDARY_CHECK_PERIOD: Duration = Duration::from_millis(10); pub type BankingPacketBatch = (Vec, Option); @@ -382,6 +384,16 @@ pub struct FilterForwardingResults { total_forwardable_tracer_packets: usize, } +/// Convenient wrapper for shared-state between banking stage processing and the +/// multi-iterator checking function. +struct ConsumeScannerPayload<'a> { + reached_end_of_slot: bool, + write_accounts: HashSet, + sanitized_transactions: Vec, + buffered_packet_batches: &'a mut UnprocessedPacketBatches, + slot_metrics_tracker: &'a mut LeaderSlotMetricsTracker, +} + impl BankingStage { /// Create the stage using `bank`. Exit when `verified_receiver` is dropped. #[allow(clippy::new_ret_no_self)] @@ -656,7 +668,6 @@ impl BankingStage { recorder: &TransactionRecorder, qos_service: &QosService, slot_metrics_tracker: &mut LeaderSlotMetricsTracker, - num_packets_to_process_per_iteration: usize, log_messages_bytes_limit: Option, ) { let mut rebuffered_packet_count = 0; @@ -672,117 +683,161 @@ impl BankingStage { ) }; - let mut new_retryable_packets = MinMaxHeap::with_capacity(original_capacity); - new_retryable_packets.extend(retryable_packets - .drain_desc() - .chunks(num_packets_to_process_per_iteration) - .into_iter() - .flat_map(|packets_to_process| { - let packets_to_process = packets_to_process.into_iter().collect_vec(); - // TODO: Right now we iterate through buffer and try the highest weighted transaction once - // but we should retry the highest weighted transactions more often. - let (bank_start, poh_recorder_lock_time) = measure!( - poh_recorder.read().unwrap().bank_start(), - "poh_recorder.read", - ); - slot_metrics_tracker.increment_consume_buffered_packets_poh_recorder_lock_us( - poh_recorder_lock_time.as_us(), + let (bank_start, poh_recorder_lock_time) = measure!( + poh_recorder.read().unwrap().bank_start(), + "poh_recorder.read", + ); + slot_metrics_tracker.increment_consume_buffered_packets_poh_recorder_lock_us( + poh_recorder_lock_time.as_us(), + ); + + let new_retryable_packets: MinMaxHeap<_> = if let Some(BankStart { + working_bank, + bank_creation_time, + }) = bank_start + { + // Collect all packets into a priority-ordered vector + // Use multi-iterator to iterate with non-conflicting batches + let all_packets_to_process = retryable_packets.drain_desc().collect_vec(); + let mut new_retryable_packets = MinMaxHeap::with_capacity(original_capacity); + const SCANNER_BATCH_SIZE: usize = 64; + + let scanner_payload = ConsumeScannerPayload { + reached_end_of_slot, + write_accounts: HashSet::new(), + sanitized_transactions: Vec::with_capacity(SCANNER_BATCH_SIZE), + buffered_packet_batches, + slot_metrics_tracker, + }; + + let should_process_packet = + |packet: &Rc, payload: &mut ConsumeScannerPayload| { + Self::consume_scan_should_process_packet( + &working_bank, + banking_stage_stats, + packet, + payload, + ) + }; + + let mut scanner = MultiIteratorScanner::new( + &all_packets_to_process, + SCANNER_BATCH_SIZE, + scanner_payload, + should_process_packet, + ); + + while let Some((packets_to_process, payload)) = scanner.iterate() { + if payload.reached_end_of_slot { + new_retryable_packets.extend(packets_to_process.iter().map(|p| (*p).clone())); + continue; + } + + let packets_to_process = packets_to_process + .iter() + .map(|p| (*p).clone()) + .collect_vec(); + assert_eq!( + packets_to_process.len(), + payload.sanitized_transactions.len() ); - let packets_to_process_len = packets_to_process.len(); - if let Some(BankStart { - working_bank, - bank_creation_time, - }) = bank_start - { - let (process_transactions_summary, process_packets_transactions_time) = - measure!( - Self::process_packets_transactions( - &working_bank, - &bank_creation_time, - recorder, - packets_to_process.iter().map(|p| &**p), - transaction_status_sender.clone(), - gossip_vote_sender, - banking_stage_stats, - qos_service, - slot_metrics_tracker, - log_messages_bytes_limit - ), - "process_packets_transactions", - ); - slot_metrics_tracker.increment_process_packets_transactions_us( + let (process_transactions_summary, process_packets_transactions_time) = + measure!(Self::process_packets_transactions( + &working_bank, + &bank_creation_time, + recorder, + &payload.sanitized_transactions, + transaction_status_sender.clone(), + gossip_vote_sender, + banking_stage_stats, + qos_service, + payload.slot_metrics_tracker, + log_messages_bytes_limit + )); + payload + .slot_metrics_tracker + .increment_process_packets_transactions_us( process_packets_transactions_time.as_us(), ); - let ProcessTransactionsSummary { - reached_max_poh_height, - retryable_transaction_indexes, - .. - } = process_transactions_summary; + // reset batch locks and transactions for next iterate call + payload.write_accounts.clear(); + payload.sanitized_transactions.clear(); - if reached_max_poh_height - || !Bank::should_bank_still_be_processing_txs( - &bank_creation_time, - max_tx_ingestion_ns, - ) - { - reached_end_of_slot = true; - } + let ProcessTransactionsSummary { + reached_max_poh_height, + retryable_transaction_indexes, + .. + } = process_transactions_summary; - // The difference between all transactions passed to execution and the ones that - // are retryable were the ones that were either: - // 1) Committed into the block - // 2) Dropped without being committed because they had some fatal error (too old, - // duplicate signature, etc.) - // - // Note: This assumes that every packet deserializes into one transaction! - consumed_buffered_packets_count += - packets_to_process_len.saturating_sub(retryable_transaction_indexes.len()); - - // Out of the buffered packets just retried, collect any still unprocessed - // transactions in this batch for forwarding - rebuffered_packet_count += retryable_transaction_indexes.len(); - if let Some(test_fn) = &test_fn { - test_fn(); - } + if reached_max_poh_height + || !Bank::should_bank_still_be_processing_txs( + &bank_creation_time, + max_tx_ingestion_ns, + ) + { + payload.reached_end_of_slot = true; + } - slot_metrics_tracker.increment_retryable_packets_count( - retryable_transaction_indexes.len() as u64, - ); + // The difference between all transactions passed to execution and the ones that + // are retryable were the ones that were either: + // 1) Committed into the block + // 2) Dropped without being committed because they had some fatal error (too old, + // duplicate signature, etc.) + // + // Note: This assumes that every packet deserializes into one transaction! + consumed_buffered_packets_count += packets_to_process + .len() + .saturating_sub(retryable_transaction_indexes.len()); + + // Out of the buffered packets just retried, collect any still unprocessed + // transactions in this batch for forwarding + rebuffered_packet_count += retryable_transaction_indexes.len(); + if let Some(test_fn) = &test_fn { + test_fn(); + } + + payload + .slot_metrics_tracker + .increment_retryable_packets_count(retryable_transaction_indexes.len() as u64); - let result = retryable_transaction_indexes + let batch_result = retryable_transaction_indexes + .iter() + .map(|i| packets_to_process[*i].clone()) + .collect_vec(); + + // Remove the non-retryable packets, packets that were either: + // 1) Successfully processed + // 2) Failed but not retryable + Self::filter_processed_packets( + retryable_transaction_indexes .iter() - .map(|i| packets_to_process[*i].clone()) - .collect_vec(); - - // Remove the non-retryable packets, packets that were either: - // 1) Successfully processed - // 2) Failed but not retryable - Self::filter_processed_packets( - retryable_transaction_indexes - .iter() - .chain(std::iter::once(&packets_to_process.len())), - |start, end| { - for processed_packet in &packets_to_process[start..end] { - buffered_packet_batches - .message_hash_to_transaction - .remove(processed_packet.message_hash()); - } - }, - ); + .chain(std::iter::once(&packets_to_process.len())), + |start, end| { + for processed_packet in &packets_to_process[start..end] { + payload + .buffered_packet_batches + .message_hash_to_transaction + .remove(processed_packet.message_hash()); + } + }, + ); + new_retryable_packets.extend(batch_result); + } - result - } else if reached_end_of_slot { - packets_to_process - } else { - // mark as end-of-slot to avoid aggressively lock poh for the remaining for - // packet batches in buffer - reached_end_of_slot = true; + let ConsumeScannerPayload { + reached_end_of_slot: new_reached_end_of_slot, + .. + } = scanner.finalize(); - packets_to_process - } - })); + reached_end_of_slot = new_reached_end_of_slot; + + new_retryable_packets + } else { + reached_end_of_slot = true; + retryable_packets + }; buffered_packet_batches.packet_priority_queue = new_retryable_packets; @@ -821,6 +876,91 @@ impl BankingStage { .fetch_add(consumed_buffered_packets_count, Ordering::Relaxed); } + /// Checks if a packet should be processed for the multi-iterator scanner + /// Returns true if the packet should be processed, false otherwise + #[allow(clippy::too_many_arguments)] + fn consume_scan_should_process_packet( + working_bank: &Bank, + banking_stage_stats: &BankingStageStats, + packet: &ImmutableDeserializedPacket, + payload: &mut ConsumeScannerPayload, + ) -> ProcessingDecision { + // If end of the slot, return should process (quick loop after reached end of slot) + if payload.reached_end_of_slot { + return ProcessingDecision::Now; + } + + // Before sanitization, let's quickly check the static keys (performance optimization) + let message = &packet.transaction().get_message().message; + let static_keys = message.static_account_keys(); + for key in static_keys.iter().enumerate().filter_map(|(idx, key)| { + if message.is_maybe_writable(idx) { + Some(key) + } else { + None + } + }) { + if payload.write_accounts.contains(key) { + return ProcessingDecision::Later; + } + } + + // Try to deserialize the packet + let (maybe_sanitized_transaction, sanitization_time) = measure!( + unprocessed_packet_batches::transaction_from_deserialized_packet( + packet, + &working_bank.feature_set, + working_bank.vote_only_bank(), + working_bank, + ) + ); + + let sanitization_time_us = sanitization_time.as_us(); + payload + .slot_metrics_tracker + .increment_transactions_from_packets_us(sanitization_time_us); + banking_stage_stats + .packet_conversion_elapsed + .fetch_add(sanitization_time_us, Ordering::Relaxed); + + if let Some(sanitized_transaction) = maybe_sanitized_transaction { + let message = sanitized_transaction.message(); + + let conflicts_with_batch = + message.account_keys().iter().enumerate().any(|(idx, key)| { + if message.is_writable(idx) { + payload.write_accounts.contains(key) + } else { + false + } + }); + + if conflicts_with_batch { + ProcessingDecision::Later + } else { + message + .account_keys() + .iter() + .enumerate() + .for_each(|(idx, key)| { + if message.is_writable(idx) { + payload.write_accounts.insert(*key); + } + }); + + payload.sanitized_transactions.push(sanitized_transaction); + ProcessingDecision::Now + } + } else { + // Remove the packet from map + payload + .buffered_packet_batches + .message_hash_to_transaction + .remove(packet.message_hash()); + ProcessingDecision::Never + } + } + fn consume_or_forward_packets( my_pubkey: &Pubkey, leader_pubkey: Option, @@ -931,7 +1071,6 @@ impl BankingStage { recorder, qos_service, slot_metrics_tracker, - UNPROCESSED_BUFFER_STEP_SIZE, log_messages_bytes_limit ), "consume_buffered_packets", @@ -1806,29 +1945,23 @@ impl BankingStage { mask } - // This function returns a vector containing index of all valid transactions. A valid - // transaction has result Ok() as the value - fn filter_valid_transaction_indexes( - valid_txs: &[TransactionCheckResult], - transaction_indexes: &[usize], - ) -> Vec { + /// This function returns a vector containing index of all valid transactions. A valid + /// transaction has result Ok() as the value + fn filter_valid_transaction_indexes(valid_txs: &[TransactionCheckResult]) -> Vec { valid_txs .iter() .enumerate() .filter_map(|(index, (x, _h))| if x.is_ok() { Some(index) } else { None }) - .map(|x| transaction_indexes[x]) .collect_vec() } /// This function filters pending packets that are still valid /// # Arguments /// * `transactions` - a batch of transactions deserialized from packets - /// * `transaction_to_packet_indexes` - maps each transaction to a packet index /// * `pending_indexes` - identifies which indexes in the `transactions` list are still pending fn filter_pending_packets_from_pending_txs( bank: &Arc, transactions: &[SanitizedTransaction], - transaction_to_packet_indexes: &[usize], pending_indexes: &[usize], ) -> Vec { let filter = @@ -1856,7 +1989,7 @@ impl BankingStage { &mut error_counters, ); - Self::filter_valid_transaction_indexes(&results, transaction_to_packet_indexes) + Self::filter_valid_transaction_indexes(&results) } fn filter_processed_packets<'a, F>( @@ -1883,7 +2016,7 @@ impl BankingStage { bank: &'a Arc, bank_creation_time: &Instant, poh: &'a TransactionRecorder, - deserialized_packets: impl Iterator, + sanitized_transactions: &[SanitizedTransaction], transaction_status_sender: Option, gossip_vote_sender: &'a ReplayVoteSender, banking_stage_stats: &'a BankingStageStats, @@ -1891,39 +2024,12 @@ impl BankingStage { slot_metrics_tracker: &'a mut LeaderSlotMetricsTracker, log_messages_bytes_limit: Option, ) -> ProcessTransactionsSummary { - // Convert packets to transactions - let ((transactions, transaction_to_packet_indexes), packet_conversion_time): ( - (Vec, Vec), - _, - ) = measure!( - deserialized_packets - .enumerate() - .filter_map(|(i, deserialized_packet)| { - unprocessed_packet_batches::transaction_from_deserialized_packet( - deserialized_packet, - &bank.feature_set, - bank.vote_only_bank(), - bank.as_ref(), - ) - .map(|transaction| (transaction, i)) - }) - .unzip(), - "packet_conversion", - ); - - let packet_conversion_us = packet_conversion_time.as_us(); - slot_metrics_tracker.increment_transactions_from_packets_us(packet_conversion_us); - banking_stage_stats - .packet_conversion_elapsed - .fetch_add(packet_conversion_us, Ordering::Relaxed); - inc_new_counter_info!("banking_stage-packet_conversion", 1); - // Process transactions let (mut process_transactions_summary, process_transactions_time) = measure!( Self::process_transactions( bank, bank_creation_time, - &transactions, + sanitized_transactions, poh, transaction_status_sender, gossip_vote_sender, @@ -1954,12 +2060,12 @@ impl BankingStage { let (filtered_retryable_transaction_indexes, filter_retryable_packets_time) = measure!( Self::filter_pending_packets_from_pending_txs( bank, - &transactions, - &transaction_to_packet_indexes, - retryable_transaction_indexes, + sanitized_transactions, + retryable_transaction_indexes ), - "filter_pending_packets_time", + "filter_retryable_packets_time" ); + let filter_retryable_packets_us = filter_retryable_packets_time.as_us(); slot_metrics_tracker .increment_filter_retryable_packets_us(filter_retryable_packets_us as u64); @@ -2234,7 +2340,6 @@ mod tests { solana_transaction_status::{TransactionStatusMeta, VersionedTransactionWithStatusMeta}, std::{ borrow::Cow, - collections::HashSet, path::Path, sync::atomic::{AtomicBool, Ordering}, thread::sleep, @@ -2710,33 +2815,27 @@ mod tests { #[test] fn test_bank_filter_valid_transaction_indexes() { assert_eq!( - BankingStage::filter_valid_transaction_indexes( - &[ - (Err(TransactionError::BlockhashNotFound), None), - (Err(TransactionError::BlockhashNotFound), None), - (Ok(()), None), - (Err(TransactionError::BlockhashNotFound), None), - (Ok(()), None), - (Ok(()), None), - ], - &[2, 4, 5, 9, 11, 13] - ), - [5, 11, 13] + BankingStage::filter_valid_transaction_indexes(&[ + (Err(TransactionError::BlockhashNotFound), None), + (Err(TransactionError::BlockhashNotFound), None), + (Ok(()), None), + (Err(TransactionError::BlockhashNotFound), None), + (Ok(()), None), + (Ok(()), None), + ]), + [2, 4, 5] ); assert_eq!( - BankingStage::filter_valid_transaction_indexes( - &[ - (Ok(()), None), - (Err(TransactionError::BlockhashNotFound), None), - (Err(TransactionError::BlockhashNotFound), None), - (Ok(()), None), - (Ok(()), None), - (Ok(()), None), - ], - &[1, 6, 7, 9, 31, 43] - ), - [1, 9, 31, 43] + BankingStage::filter_valid_transaction_indexes(&[ + (Ok(()), None), + (Err(TransactionError::BlockhashNotFound), None), + (Err(TransactionError::BlockhashNotFound), None), + (Ok(()), None), + (Ok(()), None), + (Ok(()), None), + ]), + [0, 3, 4, 5] ); } @@ -4000,36 +4099,27 @@ mod tests { &recorder, &QosService::new(Arc::new(RwLock::new(CostModel::default())), 1), &mut LeaderSlotMetricsTracker::new(0), - num_conflicting_transactions, None, ); assert_eq!(buffered_packet_batches.len(), num_conflicting_transactions); - // When the poh recorder has a bank, should process all non conflicting buffered packets. - // Processes one packet per iteration of the loop - let num_packets_to_process_per_iteration = num_conflicting_transactions; - for num_expected_unprocessed in (0..num_conflicting_transactions).rev() { - poh_recorder.write().unwrap().set_bank(&bank, false); - BankingStage::consume_buffered_packets( - &Pubkey::default(), - max_tx_processing_ns, - &poh_recorder, - &mut buffered_packet_batches, - None, - &gossip_vote_sender, - None::>, - &BankingStageStats::default(), - &recorder, - &QosService::new(Arc::new(RwLock::new(CostModel::default())), 1), - &mut LeaderSlotMetricsTracker::new(0), - num_packets_to_process_per_iteration, - None, - ); - if num_expected_unprocessed == 0 { - assert!(buffered_packet_batches.is_empty()) - } else { - assert_eq!(buffered_packet_batches.len(), num_expected_unprocessed); - } - } + // When the working bank in poh_recorder is Some, all packets should be processed. + // Multi-Iterator will process them 1-by-1 if all txs are conflicting. + poh_recorder.write().unwrap().set_bank(&bank, false); + BankingStage::consume_buffered_packets( + &Pubkey::default(), + max_tx_processing_ns, + &poh_recorder, + &mut buffered_packet_batches, + None, + &gossip_vote_sender, + None::>, + &BankingStageStats::default(), + &recorder, + &QosService::new(Arc::new(RwLock::new(CostModel::default())), 1), + &mut LeaderSlotMetricsTracker::new(0), + None, + ); + assert!(buffered_packet_batches.is_empty()); poh_recorder .read() .unwrap() @@ -4053,11 +4143,8 @@ mod tests { finished_packet_sender.send(()).unwrap(); continue_receiver.recv().unwrap(); }); - // When the poh recorder has a bank, it should process all non conflicting buffered packets. - // Because each conflicting transaction is in it's own `Packet` within a `PacketBatch`, then - // each iteration of this loop will process one element of the batch per iteration of the - // loop. - let interrupted_iteration = 1; + // When the poh recorder has a bank, it should process all buffered packets. + let num_conflicting_transactions = transactions.len(); poh_recorder.write().unwrap().set_bank(&bank, false); let poh_recorder_ = poh_recorder.clone(); let recorder = poh_recorder_.read().unwrap().recorder(); @@ -4073,16 +4160,11 @@ mod tests { ) .unwrap(); assert_eq!(deserialized_packets.len(), num_conflicting_transactions); - let num_packets_to_process_per_iteration = 1; let mut buffered_packet_batches: UnprocessedPacketBatches = UnprocessedPacketBatches::from_iter( - deserialized_packets.clone().into_iter(), + deserialized_packets.into_iter(), num_conflicting_transactions, ); - let all_packet_message_hashes: HashSet = buffered_packet_batches - .iter() - .map(|packet| *packet.immutable_section().message_hash()) - .collect(); BankingStage::consume_buffered_packets( &Pubkey::default(), std::u128::MAX, @@ -4095,26 +4177,19 @@ mod tests { &recorder, &QosService::new(Arc::new(RwLock::new(CostModel::default())), 1), &mut LeaderSlotMetricsTracker::new(0), - num_packets_to_process_per_iteration, None, ); - // Check everything is correct. All indexes after `interrupted_iteration` - // should still be unprocessed - assert_eq!( - buffered_packet_batches.len(), - deserialized_packets[interrupted_iteration + 1..].len() - ); - for packet in buffered_packet_batches.iter() { - assert!(all_packet_message_hashes - .contains(packet.immutable_section().message_hash())); - } + // Check everything is correct. All valid packets should be processed. + assert!(buffered_packet_batches.is_empty()); }) .unwrap(); - for i in 0..=interrupted_iteration { + // Should be calling `test_fn` for each non-conflicting batch. + // In this case each batch is of size 1. + for i in 0..num_conflicting_transactions { finished_packet_receiver.recv().unwrap(); - if i == interrupted_iteration { + if i == num_conflicting_transactions { poh_recorder .write() .unwrap() diff --git a/core/src/lib.rs b/core/src/lib.rs index 9be6ab5b9cc4ba..496a114500d1ae 100644 --- a/core/src/lib.rs +++ b/core/src/lib.rs @@ -35,6 +35,7 @@ pub mod leader_slot_banking_stage_metrics; pub mod leader_slot_banking_stage_timing_metrics; pub mod ledger_cleanup_service; pub mod ledger_metric_report_service; +pub mod multi_iterator_scanner; pub mod optimistic_confirmation_verifier; pub mod outstanding_requests; mod packet_hasher; diff --git a/core/src/multi_iterator_scanner.rs b/core/src/multi_iterator_scanner.rs new file mode 100644 index 00000000000000..d2d639293e3186 --- /dev/null +++ b/core/src/multi_iterator_scanner.rs @@ -0,0 +1,351 @@ +//! Provides an iterator interface that create non-conflicting batches of elements to process. +//! +//! The problem that this structure is targetting is as following: +//! We have a slice of transactions we want to process in batches where transactions +//! in the same batch do not conflict with each other. This allows us process them in +//! parallel. The original slice is ordered by priority, and it is often the case +//! that transactions with high-priority are conflicting with each other. This means +//! we cannot simply grab chunks of transactions. +//! The solution is to create a MultiIteratorScanner that will use multiple iterators, up +//! to the desired batch size, and create batches of transactions that do not conflict with +//! each other. The MultiIteratorScanner stores state for the current positions of each iterator, +//! as well as which transactions have already been handled. If a transaction is invalid it can +//! also be skipped without being considered for future batches. +//! + +/// Output from the element checker used in `MultiIteratorScanner::iterate`. +pub enum ProcessingDecision { + /// Should be processed by the scanner. + Now, + /// Should be skipped by the scanner on this pass - process later. + Later, + /// Should be skipped and marked as handled so we don't try processing it again. + Never, +} + +/// Iterates over a slice creating valid non-self-conflicting batches of elements to process, +/// elements between batches are not guaranteed to be non-conflicting. +/// Conflicting elements are guaranteed to be processed in the order they appear in the slice, +/// as long as the `should_process` function is appropriately marking resources as used. +/// It is also guaranteed that elements within the batch are in the order they appear in +/// the slice. The batch size is not guaranteed to be `max_iterators` - it can be smaller. +/// +/// # Example: +/// +/// Assume transactions with same letter conflict with each other. A typical priority ordered +/// buffer might look like: +/// +/// // [A, A, B, A, C, D, B, C, D] +/// +/// If we want to have batches of size 4, the MultiIteratorScanner will proceed as follows: +/// +/// // [A, A, B, A, C, D, B, C, D] +/// // ^ ^ ^ ^ +/// +/// // [A, A, B, A, C, D, B, C, D] +/// // ^ ^ ^ ^ +/// +/// // [A, A, B, A, C, D, B, C, D] +/// // ^ +/// The iterator will iterate with batches: +/// +/// // [[A, B, C, D], [A, B, C, D], [A]] +/// +pub struct MultiIteratorScanner<'a, T, U, F> +where + F: FnMut(&T, &mut U) -> ProcessingDecision, +{ + /// Maximum number of iterators to use. + max_iterators: usize, + /// Slice that we're iterating over + slice: &'a [T], + /// Payload - used to store shared mutable state between scanner and the processing function. + payload: U, + /// Function that checks if an element should be processed. This function is also responsible + /// for marking resources, such as locks, as used. + should_process: F, + /// Store whether an element has already been handled + already_handled: Vec, + /// Current indices inside `slice` for multiple iterators + current_positions: Vec, + /// Container to store items for iteration - Should only be used in `get_current_items()` + current_items: Vec<&'a T>, + /// Initialized + initialized: bool, +} + +impl<'a, T, U, F> MultiIteratorScanner<'a, T, U, F> +where + F: FnMut(&T, &mut U) -> ProcessingDecision, +{ + pub fn new(slice: &'a [T], max_iterators: usize, payload: U, should_process: F) -> Self { + assert!(max_iterators > 0); + Self { + max_iterators, + slice, + payload, + should_process, + already_handled: vec![false; slice.len()], + current_positions: Vec::with_capacity(max_iterators), + current_items: Vec::with_capacity(max_iterators), + initialized: false, + } + } + + /// Returns a slice of the item references at the current positions of the iterators + /// and a mutable reference to the payload. + /// + /// Returns None if the scanner is done iterating. + pub fn iterate(&mut self) -> Option<(&[&'a T], &mut U)> { + if !self.initialized { + self.initialized = true; + self.initialize_current_positions(); + } else { + self.advance_current_positions(); + } + self.get_current_items() + } + + /// Consume the iterator and return the payload. + pub fn finalize(self) -> U { + self.payload + } + + /// Initialize the `current_positions` vector for the first batch. + fn initialize_current_positions(&mut self) { + let mut last_index = 0; + for _iterator_index in 0..self.max_iterators { + match self.march_iterator(last_index) { + Some(index) => { + self.current_positions.push(index); + last_index = index.saturating_add(1); + } + None => break, + } + } + } + + /// March iterators forward to find the next batch of items. + fn advance_current_positions(&mut self) { + if let Some(first_position) = self.current_positions.first() { + let mut prev_position = *first_position; + for iterator_index in 0..self.current_positions.len() { + // If the previous iterator has passed this iterator, we should start + // at it's position + 1 to avoid duplicate re-traversal. + let start_index = (self.current_positions[iterator_index].saturating_add(1)) + .max(prev_position.saturating_add(1)); + match self.march_iterator(start_index) { + Some(index) => { + self.current_positions[iterator_index] = index; + prev_position = index; + } + None => { + // Drop current positions that go past the end of the slice + self.current_positions.truncate(iterator_index); + break; + } + } + } + } + } + + /// Get the current items from the slice using `self.current_positions`. + /// Returns `None` if there are no more items. + fn get_current_items(&mut self) -> Option<(&[&'a T], &mut U)> { + self.current_items.clear(); + for index in &self.current_positions { + self.current_items.push(&self.slice[*index]); + } + if self.current_items.is_empty() { + None + } else { + Some((&self.current_items, &mut self.payload)) + } + } + + /// Moves the iterator to its' next position. If we've reached the end of the slice, we return None + fn march_iterator(&mut self, starting_index: usize) -> Option { + let mut found = None; + for index in starting_index..self.slice.len() { + if !self.already_handled[index] { + match (self.should_process)(&self.slice[index], &mut self.payload) { + ProcessingDecision::Now => { + self.already_handled[index] = true; + found = Some(index); + break; + } + ProcessingDecision::Later => { + // Do nothing - iterator will try this element in a future batch + } + ProcessingDecision::Never => { + self.already_handled[index] = true; + } + } + } + } + + found + } +} + +#[cfg(test)] +mod tests { + use {super::MultiIteratorScanner, crate::multi_iterator_scanner::ProcessingDecision}; + + struct TestScannerPayload { + locks: Vec, + } + + fn test_scanner_locking_should_process( + item: &i32, + payload: &mut TestScannerPayload, + ) -> ProcessingDecision { + if payload.locks[*item as usize] { + ProcessingDecision::Later + } else { + payload.locks[*item as usize] = true; + ProcessingDecision::Now + } + } + + #[test] + fn test_multi_iterator_scanner_empty() { + let slice: Vec = vec![]; + let mut scanner = MultiIteratorScanner::new(&slice, 2, (), |_, _| ProcessingDecision::Now); + assert!(scanner.iterate().is_none()); + } + + #[test] + fn test_multi_iterator_scanner_iterate() { + let slice = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]; + let should_process = |_item: &i32, _payload: &mut ()| ProcessingDecision::Now; + + let mut scanner = MultiIteratorScanner::new(&slice, 2, (), should_process); + let mut actual_batches = vec![]; + while let Some((batch, _payload)) = scanner.iterate() { + actual_batches.push(batch.to_vec()); + } + + // Batch 1: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11] + // ^ ^ + // Batch 2: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11] + // ^ ^ + // Batch 3: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11] + // ^ ^ + // Batch 4: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11] + // ^ ^ + // Batch 5: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11] + // ^ ^ + // Batch 6: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11] + // ^ + let expected_batches = vec![ + vec![&1, &2], + vec![&3, &4], + vec![&5, &6], + vec![&7, &8], + vec![&9, &10], + vec![&11], + ]; + assert_eq!(actual_batches, expected_batches); + } + + #[test] + fn test_multi_iterator_scanner_iterate_with_gaps() { + let slice = [0, 0, 0, 1, 2, 3, 1]; + + let payload = TestScannerPayload { + locks: vec![false; 4], + }; + + let mut scanner = + MultiIteratorScanner::new(&slice, 2, payload, test_scanner_locking_should_process); + let mut actual_batches = vec![]; + while let Some((batch, payload)) = scanner.iterate() { + // free the resources + for item in batch { + payload.locks[**item as usize] = false; + } + + actual_batches.push(batch.to_vec()); + } + + // Batch 1: [0, 0, 0, 1, 2, 3, 4] + // ^ ^ + // Batch 2: [0, 0, 0, 1, 2, 3, 4] + // ^ ^ + // Batch 3: [0, 0, 0, 1, 2, 3, 4] + // ^ ^ + // Batch 4: [0, 0, 0, 1, 2, 3, 4] + // -----------^ (--- indicates where the 0th iterator marched from) + let expected_batches = vec![vec![&0, &1], vec![&0, &2], vec![&0, &3], vec![&1]]; + assert_eq!(actual_batches, expected_batches); + + let TestScannerPayload { locks } = scanner.finalize(); + assert_eq!(locks, vec![false; 4]); + } + + #[test] + fn test_multi_iterator_scanner_iterate_conflicts_not_at_front() { + let slice = [1, 2, 3, 0, 0, 0, 3, 2, 1]; + + let payload = TestScannerPayload { + locks: vec![false; 4], + }; + + let mut scanner = + MultiIteratorScanner::new(&slice, 2, payload, test_scanner_locking_should_process); + let mut actual_batches = vec![]; + while let Some((batch, payload)) = scanner.iterate() { + // free the resources + for item in batch { + payload.locks[**item as usize] = false; + } + + actual_batches.push(batch.to_vec()); + } + + // Batch 1: [1, 2, 3, 0, 0, 0, 3, 2, 1] + // ^ ^ + // Batch 2: [1, 2, 3, 0, 0, 0, 3, 2, 1] + // ^ ^ + // Batch 3: [1, 2, 3, 0, 0, 0, 3, 2, 1] + // ^ ^ + // Batch 4: [1, 2, 3, 0, 0, 0, 3, 2, 1] + // ^ ^ + // Batch 5: [1, 2, 3, 0, 0, 0, 3, 2, 1] + // ^ + let expected_batches = vec![ + vec![&1, &2], + vec![&3, &0], + vec![&0, &3], + vec![&0, &2], + vec![&1], + ]; + assert_eq!(actual_batches, expected_batches); + + let TestScannerPayload { locks } = scanner.finalize(); + assert_eq!(locks, vec![false; 4]); + } + + #[test] + fn test_multi_iterator_scanner_iterate_with_never_process() { + let slice = [0, 4, 1, 2]; + let should_process = |item: &i32, _payload: &mut ()| match item { + 4 => ProcessingDecision::Never, + _ => ProcessingDecision::Now, + }; + + let mut scanner = MultiIteratorScanner::new(&slice, 2, (), should_process); + let mut actual_batches = vec![]; + while let Some((batch, _payload)) = scanner.iterate() { + actual_batches.push(batch.to_vec()); + } + + // Batch 1: [0, 4, 1, 2] + // ^ ^ + // Batch 2: [0, 4, 1, 2] + // ^ + let expected_batches = vec![vec![&0, &1], vec![&2]]; + assert_eq!(actual_batches, expected_batches); + } +} From 9bfb85de3f34dff8849449dbc35943fa133b532b Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 31 Oct 2022 22:42:28 -0500 Subject: [PATCH 220/465] Bump Version to 1.14.8 (#28694) Co-authored-by: willhickey --- Cargo.lock | 484 ++++++++--------- account-decoder/Cargo.toml | 10 +- accounts-bench/Cargo.toml | 12 +- accounts-cluster-bench/Cargo.toml | 34 +- banking-bench/Cargo.toml | 26 +- banks-client/Cargo.toml | 12 +- banks-interface/Cargo.toml | 4 +- banks-server/Cargo.toml | 12 +- bench-streamer/Cargo.toml | 8 +- bench-tps/Cargo.toml | 38 +- bloom/Cargo.toml | 8 +- bucket_map/Cargo.toml | 8 +- clap-utils/Cargo.toml | 8 +- clap-v3-utils/Cargo.toml | 8 +- cli-config/Cargo.toml | 6 +- cli-output/Cargo.toml | 16 +- cli/Cargo.toml | 38 +- client-test/Cargo.toml | 32 +- client/Cargo.toml | 28 +- core/Cargo.toml | 56 +- dos/Cargo.toml | 30 +- download-utils/Cargo.toml | 6 +- entry/Cargo.toml | 16 +- faucet/Cargo.toml | 14 +- frozen-abi/Cargo.toml | 6 +- frozen-abi/macro/Cargo.toml | 2 +- genesis-utils/Cargo.toml | 8 +- genesis/Cargo.toml | 22 +- geyser-plugin-interface/Cargo.toml | 6 +- geyser-plugin-manager/Cargo.toml | 16 +- gossip/Cargo.toml | 38 +- install/Cargo.toml | 14 +- keygen/Cargo.toml | 12 +- ledger-tool/Cargo.toml | 30 +- ledger/Cargo.toml | 40 +- local-cluster/Cargo.toml | 28 +- log-analyzer/Cargo.toml | 6 +- logger/Cargo.toml | 2 +- measure/Cargo.toml | 4 +- merkle-root-bench/Cargo.toml | 12 +- merkle-tree/Cargo.toml | 4 +- metrics/Cargo.toml | 4 +- net-shaper/Cargo.toml | 4 +- net-utils/Cargo.toml | 8 +- notifier/Cargo.toml | 2 +- perf/Cargo.toml | 12 +- poh-bench/Cargo.toml | 14 +- poh/Cargo.toml | 20 +- program-runtime/Cargo.toml | 14 +- program-test/Cargo.toml | 18 +- .../address-lookup-table-tests/Cargo.toml | 8 +- programs/address-lookup-table/Cargo.toml | 12 +- programs/bpf-loader-tests/Cargo.toml | 8 +- programs/bpf/Cargo.lock | 490 +++++++++--------- programs/bpf/Cargo.toml | 28 +- programs/bpf/rust/128bit/Cargo.toml | 6 +- programs/bpf/rust/128bit_dep/Cargo.toml | 4 +- programs/bpf/rust/alloc/Cargo.toml | 4 +- programs/bpf/rust/call_depth/Cargo.toml | 4 +- programs/bpf/rust/caller_access/Cargo.toml | 4 +- programs/bpf/rust/curve25519/Cargo.toml | 6 +- programs/bpf/rust/custom_heap/Cargo.toml | 4 +- programs/bpf/rust/dep_crate/Cargo.toml | 6 +- .../bpf/rust/deprecated_loader/Cargo.toml | 4 +- programs/bpf/rust/dup_accounts/Cargo.toml | 4 +- programs/bpf/rust/error_handling/Cargo.toml | 4 +- programs/bpf/rust/external_spend/Cargo.toml | 4 +- programs/bpf/rust/finalize/Cargo.toml | 4 +- .../rust/get_minimum_delegation/Cargo.toml | 4 +- .../Cargo.toml | 4 +- .../rust/instruction_introspection/Cargo.toml | 4 +- programs/bpf/rust/invoke/Cargo.toml | 4 +- programs/bpf/rust/invoke_and_error/Cargo.toml | 4 +- programs/bpf/rust/invoke_and_ok/Cargo.toml | 4 +- .../bpf/rust/invoke_and_return/Cargo.toml | 4 +- programs/bpf/rust/invoked/Cargo.toml | 4 +- programs/bpf/rust/iter/Cargo.toml | 4 +- programs/bpf/rust/log_data/Cargo.toml | 4 +- programs/bpf/rust/many_args/Cargo.toml | 6 +- programs/bpf/rust/many_args_dep/Cargo.toml | 4 +- programs/bpf/rust/mem/Cargo.toml | 10 +- programs/bpf/rust/membuiltins/Cargo.toml | 6 +- programs/bpf/rust/noop/Cargo.toml | 4 +- programs/bpf/rust/panic/Cargo.toml | 4 +- programs/bpf/rust/param_passing/Cargo.toml | 6 +- .../bpf/rust/param_passing_dep/Cargo.toml | 4 +- programs/bpf/rust/rand/Cargo.toml | 4 +- programs/bpf/rust/realloc/Cargo.toml | 4 +- programs/bpf/rust/realloc_invoke/Cargo.toml | 6 +- .../bpf/rust/ro_account_modify/Cargo.toml | 4 +- programs/bpf/rust/ro_modify/Cargo.toml | 4 +- programs/bpf/rust/sanity/Cargo.toml | 10 +- .../bpf/rust/secp256k1_recover/Cargo.toml | 4 +- programs/bpf/rust/sha/Cargo.toml | 4 +- .../rust/sibling_inner_instruction/Cargo.toml | 4 +- .../bpf/rust/sibling_instruction/Cargo.toml | 4 +- programs/bpf/rust/simulation/Cargo.toml | 12 +- programs/bpf/rust/spoof1/Cargo.toml | 4 +- programs/bpf/rust/spoof1_system/Cargo.toml | 4 +- programs/bpf/rust/sysvar/Cargo.toml | 10 +- programs/bpf/rust/upgradeable/Cargo.toml | 4 +- programs/bpf/rust/upgraded/Cargo.toml | 4 +- programs/bpf_loader/Cargo.toml | 14 +- .../bpf_loader/gen-syscall-list/Cargo.toml | 2 +- programs/compute-budget/Cargo.toml | 6 +- programs/config/Cargo.toml | 8 +- programs/ed25519-tests/Cargo.toml | 6 +- programs/stake/Cargo.toml | 18 +- programs/vote/Cargo.toml | 14 +- programs/zk-token-proof/Cargo.toml | 8 +- rayon-threadlimit/Cargo.toml | 2 +- rbpf-cli/Cargo.toml | 10 +- remote-wallet/Cargo.toml | 4 +- rpc-test/Cargo.toml | 18 +- rpc/Cargo.toml | 48 +- runtime/Cargo.toml | 34 +- runtime/store-tool/Cargo.toml | 8 +- sdk/Cargo.toml | 12 +- sdk/cargo-build-bpf/Cargo.toml | 4 +- sdk/cargo-build-sbf/Cargo.toml | 8 +- .../tests/crates/fail/Cargo.toml | 4 +- .../tests/crates/noop/Cargo.toml | 4 +- sdk/cargo-test-bpf/Cargo.toml | 2 +- sdk/cargo-test-sbf/Cargo.toml | 2 +- sdk/gen-headers/Cargo.toml | 2 +- sdk/macro/Cargo.toml | 2 +- sdk/program/Cargo.toml | 10 +- send-transaction-service/Cargo.toml | 14 +- stake-accounts/Cargo.toml | 16 +- storage-bigtable/Cargo.toml | 10 +- storage-bigtable/build-proto/Cargo.lock | 2 +- storage-bigtable/build-proto/Cargo.toml | 2 +- storage-proto/Cargo.toml | 8 +- streamer/Cargo.toml | 10 +- sys-tuner/Cargo.toml | 6 +- test-validator/Cargo.toml | 28 +- tokens/Cargo.toml | 24 +- transaction-dos/Cargo.toml | 32 +- transaction-status/Cargo.toml | 14 +- upload-perf/Cargo.toml | 4 +- validator/Cargo.toml | 50 +- version/Cargo.toml | 8 +- watchtower/Cargo.toml | 20 +- zk-token-sdk/Cargo.toml | 6 +- 144 files changed, 1269 insertions(+), 1269 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index d80f387e4929c6..c790b7357dc9cf 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1688,7 +1688,7 @@ dependencies = [ [[package]] name = "gen-headers" -version = "1.14.7" +version = "1.14.8" dependencies = [ "log", "regex", @@ -1696,7 +1696,7 @@ dependencies = [ [[package]] name = "gen-syscall-list" -version = "1.14.7" +version = "1.14.8" dependencies = [ "regex", ] @@ -3756,15 +3756,15 @@ dependencies = [ [[package]] name = "rbpf-cli" -version = "1.14.7" +version = "1.14.8" dependencies = [ "clap 3.1.8", "serde", "serde_json", "solana-bpf-loader-program", - "solana-logger 1.14.7", + "solana-logger 1.14.8", "solana-program-runtime", - "solana-sdk 1.14.7", + "solana-sdk 1.14.8", "solana_rbpf", ] @@ -4476,7 +4476,7 @@ dependencies = [ [[package]] name = "solana-account-decoder" -version = "1.14.7" +version = "1.14.8" dependencies = [ "Inflector", "base64 0.13.0", @@ -4489,7 +4489,7 @@ dependencies = [ "serde_json", "solana-address-lookup-table-program", "solana-config-program", - "solana-sdk 1.14.7", + "solana-sdk 1.14.8", "solana-vote-program", "spl-token", "spl-token-2022", @@ -4499,21 +4499,21 @@ dependencies = [ [[package]] name = "solana-accounts-bench" -version = "1.14.7" +version = "1.14.8" dependencies = [ "clap 2.33.3", "log", "rayon", - "solana-logger 1.14.7", + "solana-logger 1.14.8", "solana-measure", "solana-runtime", - "solana-sdk 1.14.7", + "solana-sdk 1.14.8", "solana-version", ] [[package]] name = "solana-accounts-cluster-bench" -version = "1.14.7" +version = "1.14.8" dependencies = [ "clap 2.33.3", "log", @@ -4526,11 +4526,11 @@ dependencies = [ "solana-faucet", "solana-gossip", "solana-local-cluster", - "solana-logger 1.14.7", + "solana-logger 1.14.8", "solana-measure", "solana-net-utils", "solana-runtime", - "solana-sdk 1.14.7", + "solana-sdk 1.14.8", "solana-streamer", "solana-test-validator", "solana-transaction-status", @@ -4540,7 +4540,7 @@ dependencies = [ [[package]] name = "solana-address-lookup-table-program" -version = "1.14.7" +version = "1.14.8" dependencies = [ "bincode", "bytemuck", @@ -4549,28 +4549,28 @@ dependencies = [ "num-traits", "rustc_version 0.4.0", "serde", - "solana-frozen-abi 1.14.7", - "solana-frozen-abi-macro 1.14.7", - "solana-program 1.14.7", + "solana-frozen-abi 1.14.8", + "solana-frozen-abi-macro 1.14.8", + "solana-program 1.14.8", "solana-program-runtime", - "solana-sdk 1.14.7", + "solana-sdk 1.14.8", "thiserror", ] [[package]] name = "solana-address-lookup-table-program-tests" -version = "1.14.7" +version = "1.14.8" dependencies = [ "assert_matches", "bincode", "solana-address-lookup-table-program", "solana-program-test", - "solana-sdk 1.14.7", + "solana-sdk 1.14.8", ] [[package]] name = "solana-banking-bench" -version = "1.14.7" +version = "1.14.8" dependencies = [ "clap 3.1.8", "crossbeam-channel", @@ -4581,27 +4581,27 @@ dependencies = [ "solana-core", "solana-gossip", "solana-ledger", - "solana-logger 1.14.7", + "solana-logger 1.14.8", "solana-measure", "solana-perf", "solana-poh", "solana-runtime", - "solana-sdk 1.14.7", + "solana-sdk 1.14.8", "solana-streamer", "solana-version", ] [[package]] name = "solana-banks-client" -version = "1.14.7" +version = "1.14.8" dependencies = [ "borsh", "futures 0.3.21", "solana-banks-interface", "solana-banks-server", - "solana-program 1.14.7", + "solana-program 1.14.8", "solana-runtime", - "solana-sdk 1.14.7", + "solana-sdk 1.14.8", "tarpc", "thiserror", "tokio", @@ -4610,16 +4610,16 @@ dependencies = [ [[package]] name = "solana-banks-interface" -version = "1.14.7" +version = "1.14.8" dependencies = [ "serde", - "solana-sdk 1.14.7", + "solana-sdk 1.14.8", "tarpc", ] [[package]] name = "solana-banks-server" -version = "1.14.7" +version = "1.14.8" dependencies = [ "bincode", "crossbeam-channel", @@ -4627,7 +4627,7 @@ dependencies = [ "solana-banks-interface", "solana-client", "solana-runtime", - "solana-sdk 1.14.7", + "solana-sdk 1.14.8", "solana-send-transaction-service", "tarpc", "tokio", @@ -4637,7 +4637,7 @@ dependencies = [ [[package]] name = "solana-bench-streamer" -version = "1.14.7" +version = "1.14.8" dependencies = [ "clap 3.1.8", "crossbeam-channel", @@ -4648,7 +4648,7 @@ dependencies = [ [[package]] name = "solana-bench-tps" -version = "1.14.7" +version = "1.14.8" dependencies = [ "clap 2.33.3", "crossbeam-channel", @@ -4665,13 +4665,13 @@ dependencies = [ "solana-genesis", "solana-gossip", "solana-local-cluster", - "solana-logger 1.14.7", + "solana-logger 1.14.8", "solana-measure", "solana-metrics", "solana-net-utils", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.7", + "solana-sdk 1.14.8", "solana-streamer", "solana-test-validator", "solana-version", @@ -4680,7 +4680,7 @@ dependencies = [ [[package]] name = "solana-bloom" -version = "1.14.7" +version = "1.14.8" dependencies = [ "bv", "fnv", @@ -4690,14 +4690,14 @@ dependencies = [ "rustc_version 0.4.0", "serde", "serde_derive", - "solana-frozen-abi 1.14.7", - "solana-frozen-abi-macro 1.14.7", - "solana-sdk 1.14.7", + "solana-frozen-abi 1.14.8", + "solana-frozen-abi-macro 1.14.8", + "solana-sdk 1.14.8", ] [[package]] name = "solana-bpf-loader-program" -version = "1.14.7" +version = "1.14.8" dependencies = [ "bincode", "byteorder", @@ -4708,26 +4708,26 @@ dependencies = [ "solana-metrics", "solana-program-runtime", "solana-runtime", - "solana-sdk 1.14.7", - "solana-zk-token-sdk 1.14.7", + "solana-sdk 1.14.8", + "solana-zk-token-sdk 1.14.8", "solana_rbpf", "thiserror", ] [[package]] name = "solana-bpf-loader-program-tests" -version = "1.14.7" +version = "1.14.8" dependencies = [ "assert_matches", "bincode", "solana-bpf-loader-program", "solana-program-test", - "solana-sdk 1.14.7", + "solana-sdk 1.14.8", ] [[package]] name = "solana-bucket-map" -version = "1.14.7" +version = "1.14.8" dependencies = [ "fs_extra", "log", @@ -4735,24 +4735,24 @@ dependencies = [ "modular-bitfield", "rand 0.7.3", "rayon", - "solana-logger 1.14.7", + "solana-logger 1.14.8", "solana-measure", - "solana-sdk 1.14.7", + "solana-sdk 1.14.8", "tempfile", ] [[package]] name = "solana-cargo-build-bpf" -version = "1.14.7" +version = "1.14.8" dependencies = [ "cargo_metadata", "clap 3.1.8", - "solana-sdk 1.14.7", + "solana-sdk 1.14.8", ] [[package]] name = "solana-cargo-build-sbf" -version = "1.14.7" +version = "1.14.8" dependencies = [ "bzip2", "cargo_metadata", @@ -4761,14 +4761,14 @@ dependencies = [ "regex", "serial_test", "solana-download-utils", - "solana-logger 1.14.7", - "solana-sdk 1.14.7", + "solana-logger 1.14.8", + "solana-sdk 1.14.8", "tar", ] [[package]] name = "solana-cargo-test-bpf" -version = "1.14.7" +version = "1.14.8" dependencies = [ "cargo_metadata", "clap 3.1.8", @@ -4776,7 +4776,7 @@ dependencies = [ [[package]] name = "solana-cargo-test-sbf" -version = "1.14.7" +version = "1.14.8" dependencies = [ "cargo_metadata", "clap 3.1.8", @@ -4784,14 +4784,14 @@ dependencies = [ [[package]] name = "solana-clap-utils" -version = "1.14.7" +version = "1.14.8" dependencies = [ "chrono", "clap 2.33.3", "rpassword", "solana-perf", "solana-remote-wallet", - "solana-sdk 1.14.7", + "solana-sdk 1.14.8", "tempfile", "thiserror", "tiny-bip39", @@ -4801,14 +4801,14 @@ dependencies = [ [[package]] name = "solana-clap-v3-utils" -version = "1.14.7" +version = "1.14.8" dependencies = [ "chrono", "clap 3.1.8", "rpassword", "solana-perf", "solana-remote-wallet", - "solana-sdk 1.14.7", + "solana-sdk 1.14.8", "tempfile", "thiserror", "tiny-bip39", @@ -4818,7 +4818,7 @@ dependencies = [ [[package]] name = "solana-cli" -version = "1.14.7" +version = "1.14.8" dependencies = [ "bincode", "bs58", @@ -4846,10 +4846,10 @@ dependencies = [ "solana-client", "solana-config-program", "solana-faucet", - "solana-logger 1.14.7", + "solana-logger 1.14.8", "solana-program-runtime", "solana-remote-wallet", - "solana-sdk 1.14.7", + "solana-sdk 1.14.8", "solana-streamer", "solana-test-validator", "solana-transaction-status", @@ -4864,7 +4864,7 @@ dependencies = [ [[package]] name = "solana-cli-config" -version = "1.14.7" +version = "1.14.8" dependencies = [ "anyhow", "dirs-next", @@ -4873,13 +4873,13 @@ dependencies = [ "serde_derive", "serde_yaml", "solana-clap-utils", - "solana-sdk 1.14.7", + "solana-sdk 1.14.8", "url 2.2.2", ] [[package]] name = "solana-cli-output" -version = "1.14.7" +version = "1.14.8" dependencies = [ "Inflector", "base64 0.13.0", @@ -4897,7 +4897,7 @@ dependencies = [ "solana-clap-utils", "solana-cli-config", "solana-client", - "solana-sdk 1.14.7", + "solana-sdk 1.14.8", "solana-transaction-status", "solana-vote-program", "spl-memo", @@ -4905,7 +4905,7 @@ dependencies = [ [[package]] name = "solana-client" -version = "1.14.7" +version = "1.14.8" dependencies = [ "anyhow", "assert_matches", @@ -4941,12 +4941,12 @@ dependencies = [ "solana-account-decoder", "solana-clap-utils", "solana-faucet", - "solana-logger 1.14.7", + "solana-logger 1.14.8", "solana-measure", "solana-metrics", "solana-net-utils", "solana-perf", - "solana-sdk 1.14.7", + "solana-sdk 1.14.8", "solana-streamer", "solana-transaction-status", "solana-version", @@ -4962,14 +4962,14 @@ dependencies = [ [[package]] name = "solana-client-test" -version = "1.14.7" +version = "1.14.8" dependencies = [ "futures-util", "serde_json", "serial_test", "solana-client", "solana-ledger", - "solana-logger 1.14.7", + "solana-logger 1.14.8", "solana-measure", "solana-merkle-tree", "solana-metrics", @@ -4977,7 +4977,7 @@ dependencies = [ "solana-rayon-threadlimit", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.7", + "solana-sdk 1.14.8", "solana-streamer", "solana-test-validator", "solana-transaction-status", @@ -4988,28 +4988,28 @@ dependencies = [ [[package]] name = "solana-compute-budget-program" -version = "1.14.7" +version = "1.14.8" dependencies = [ "solana-program-runtime", - "solana-sdk 1.14.7", + "solana-sdk 1.14.8", ] [[package]] name = "solana-config-program" -version = "1.14.7" +version = "1.14.8" dependencies = [ "bincode", "chrono", "serde", "serde_derive", - "solana-logger 1.14.7", + "solana-logger 1.14.8", "solana-program-runtime", - "solana-sdk 1.14.7", + "solana-sdk 1.14.8", ] [[package]] name = "solana-core" -version = "1.14.7" +version = "1.14.8" dependencies = [ "ahash", "base64 0.13.0", @@ -5042,12 +5042,12 @@ dependencies = [ "solana-bloom", "solana-client", "solana-entry", - "solana-frozen-abi 1.14.7", - "solana-frozen-abi-macro 1.14.7", + "solana-frozen-abi 1.14.8", + "solana-frozen-abi-macro 1.14.8", "solana-geyser-plugin-manager", "solana-gossip", "solana-ledger", - "solana-logger 1.14.7", + "solana-logger 1.14.8", "solana-measure", "solana-metrics", "solana-net-utils", @@ -5057,7 +5057,7 @@ dependencies = [ "solana-rayon-threadlimit", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.7", + "solana-sdk 1.14.8", "solana-send-transaction-service", "solana-stake-program", "solana-streamer", @@ -5077,7 +5077,7 @@ dependencies = [ [[package]] name = "solana-dos" -version = "1.14.7" +version = "1.14.8" dependencies = [ "bincode", "clap 3.1.8", @@ -5093,42 +5093,42 @@ dependencies = [ "solana-faucet", "solana-gossip", "solana-local-cluster", - "solana-logger 1.14.7", + "solana-logger 1.14.8", "solana-measure", "solana-net-utils", "solana-perf", "solana-rpc", - "solana-sdk 1.14.7", + "solana-sdk 1.14.8", "solana-streamer", "solana-version", ] [[package]] name = "solana-download-utils" -version = "1.14.7" +version = "1.14.8" dependencies = [ "console", "indicatif", "log", "reqwest", "solana-runtime", - "solana-sdk 1.14.7", + "solana-sdk 1.14.8", ] [[package]] name = "solana-ed25519-program-tests" -version = "1.14.7" +version = "1.14.8" dependencies = [ "assert_matches", "ed25519-dalek", "rand 0.7.3", "solana-program-test", - "solana-sdk 1.14.7", + "solana-sdk 1.14.8", ] [[package]] name = "solana-entry" -version = "1.14.7" +version = "1.14.8" dependencies = [ "bincode", "crossbeam-channel", @@ -5140,18 +5140,18 @@ dependencies = [ "rand 0.7.3", "rayon", "serde", - "solana-logger 1.14.7", + "solana-logger 1.14.8", "solana-measure", "solana-merkle-tree", "solana-metrics", "solana-perf", "solana-rayon-threadlimit", - "solana-sdk 1.14.7", + "solana-sdk 1.14.8", ] [[package]] name = "solana-faucet" -version = "1.14.7" +version = "1.14.8" dependencies = [ "bincode", "byteorder", @@ -5162,9 +5162,9 @@ dependencies = [ "serde_derive", "solana-clap-utils", "solana-cli-config", - "solana-logger 1.14.7", + "solana-logger 1.14.8", "solana-metrics", - "solana-sdk 1.14.7", + "solana-sdk 1.14.8", "solana-version", "spl-memo", "thiserror", @@ -5195,7 +5195,7 @@ dependencies = [ [[package]] name = "solana-frozen-abi" -version = "1.14.7" +version = "1.14.8" dependencies = [ "ahash", "blake3", @@ -5220,8 +5220,8 @@ dependencies = [ "serde_derive", "serde_json", "sha2 0.10.2", - "solana-frozen-abi-macro 1.14.7", - "solana-logger 1.14.7", + "solana-frozen-abi-macro 1.14.8", + "solana-logger 1.14.8", "subtle", "thiserror", ] @@ -5240,7 +5240,7 @@ dependencies = [ [[package]] name = "solana-frozen-abi-macro" -version = "1.14.7" +version = "1.14.8" dependencies = [ "proc-macro2 1.0.41", "quote 1.0.18", @@ -5250,7 +5250,7 @@ dependencies = [ [[package]] name = "solana-genesis" -version = "1.14.7" +version = "1.14.8" dependencies = [ "base64 0.13.0", "clap 2.33.3", @@ -5261,9 +5261,9 @@ dependencies = [ "solana-cli-config", "solana-entry", "solana-ledger", - "solana-logger 1.14.7", + "solana-logger 1.14.8", "solana-runtime", - "solana-sdk 1.14.7", + "solana-sdk 1.14.8", "solana-stake-program", "solana-version", "solana-vote-program", @@ -5272,26 +5272,26 @@ dependencies = [ [[package]] name = "solana-genesis-utils" -version = "1.14.7" +version = "1.14.8" dependencies = [ "solana-download-utils", "solana-runtime", - "solana-sdk 1.14.7", + "solana-sdk 1.14.8", ] [[package]] name = "solana-geyser-plugin-interface" -version = "1.14.7" +version = "1.14.8" dependencies = [ "log", - "solana-sdk 1.14.7", + "solana-sdk 1.14.8", "solana-transaction-status", "thiserror", ] [[package]] name = "solana-geyser-plugin-manager" -version = "1.14.7" +version = "1.14.8" dependencies = [ "bs58", "crossbeam-channel", @@ -5304,14 +5304,14 @@ dependencies = [ "solana-metrics", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.7", + "solana-sdk 1.14.8", "solana-transaction-status", "thiserror", ] [[package]] name = "solana-gossip" -version = "1.14.7" +version = "1.14.8" dependencies = [ "bincode", "bv", @@ -5338,17 +5338,17 @@ dependencies = [ "solana-clap-utils", "solana-client", "solana-entry", - "solana-frozen-abi 1.14.7", - "solana-frozen-abi-macro 1.14.7", + "solana-frozen-abi 1.14.8", + "solana-frozen-abi-macro 1.14.8", "solana-ledger", - "solana-logger 1.14.7", + "solana-logger 1.14.8", "solana-measure", "solana-metrics", "solana-net-utils", "solana-perf", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.14.7", + "solana-sdk 1.14.8", "solana-streamer", "solana-version", "solana-vote-program", @@ -5357,7 +5357,7 @@ dependencies = [ [[package]] name = "solana-install" -version = "1.14.7" +version = "1.14.8" dependencies = [ "atty", "bincode", @@ -5378,8 +5378,8 @@ dependencies = [ "solana-clap-utils", "solana-client", "solana-config-program", - "solana-logger 1.14.7", - "solana-sdk 1.14.7", + "solana-logger 1.14.8", + "solana-sdk 1.14.8", "solana-version", "tar", "tempfile", @@ -5390,7 +5390,7 @@ dependencies = [ [[package]] name = "solana-keygen" -version = "1.14.7" +version = "1.14.8" dependencies = [ "bs58", "clap 3.1.8", @@ -5399,14 +5399,14 @@ dependencies = [ "solana-clap-v3-utils", "solana-cli-config", "solana-remote-wallet", - "solana-sdk 1.14.7", + "solana-sdk 1.14.8", "solana-version", "tiny-bip39", ] [[package]] name = "solana-ledger" -version = "1.14.7" +version = "1.14.8" dependencies = [ "assert_matches", "bincode", @@ -5440,16 +5440,16 @@ dependencies = [ "solana-account-decoder", "solana-bpf-loader-program", "solana-entry", - "solana-frozen-abi 1.14.7", - "solana-frozen-abi-macro 1.14.7", - "solana-logger 1.14.7", + "solana-frozen-abi 1.14.8", + "solana-frozen-abi-macro 1.14.8", + "solana-logger 1.14.8", "solana-measure", "solana-metrics", "solana-perf", "solana-program-runtime", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.14.7", + "solana-sdk 1.14.8", "solana-stake-program", "solana-storage-bigtable", "solana-storage-proto", @@ -5468,7 +5468,7 @@ dependencies = [ [[package]] name = "solana-ledger-tool" -version = "1.14.7" +version = "1.14.8" dependencies = [ "assert_cmd", "base64 0.13.0", @@ -5490,10 +5490,10 @@ dependencies = [ "solana-core", "solana-entry", "solana-ledger", - "solana-logger 1.14.7", + "solana-logger 1.14.8", "solana-measure", "solana-runtime", - "solana-sdk 1.14.7", + "solana-sdk 1.14.8", "solana-stake-program", "solana-storage-bigtable", "solana-transaction-status", @@ -5505,7 +5505,7 @@ dependencies = [ [[package]] name = "solana-local-cluster" -version = "1.14.7" +version = "1.14.8" dependencies = [ "assert_matches", "crossbeam-channel", @@ -5523,9 +5523,9 @@ dependencies = [ "solana-entry", "solana-gossip", "solana-ledger", - "solana-logger 1.14.7", + "solana-logger 1.14.8", "solana-runtime", - "solana-sdk 1.14.7", + "solana-sdk 1.14.8", "solana-stake-program", "solana-streamer", "solana-vote-program", @@ -5534,13 +5534,13 @@ dependencies = [ [[package]] name = "solana-log-analyzer" -version = "1.14.7" +version = "1.14.8" dependencies = [ "byte-unit", "clap 3.1.8", "serde", "serde_json", - "solana-logger 1.14.7", + "solana-logger 1.14.8", "solana-version", ] @@ -5557,7 +5557,7 @@ dependencies = [ [[package]] name = "solana-logger" -version = "1.14.7" +version = "1.14.8" dependencies = [ "env_logger", "lazy_static", @@ -5566,38 +5566,38 @@ dependencies = [ [[package]] name = "solana-measure" -version = "1.14.7" +version = "1.14.8" dependencies = [ "log", - "solana-sdk 1.14.7", + "solana-sdk 1.14.8", ] [[package]] name = "solana-merkle-root-bench" -version = "1.14.7" +version = "1.14.8" dependencies = [ "clap 2.33.3", "log", - "solana-logger 1.14.7", + "solana-logger 1.14.8", "solana-measure", "solana-runtime", - "solana-sdk 1.14.7", + "solana-sdk 1.14.8", "solana-version", ] [[package]] name = "solana-merkle-tree" -version = "1.14.7" +version = "1.14.8" dependencies = [ "fast-math", "hex", "matches", - "solana-program 1.14.7", + "solana-program 1.14.8", ] [[package]] name = "solana-metrics" -version = "1.14.7" +version = "1.14.8" dependencies = [ "crossbeam-channel", "env_logger", @@ -5607,23 +5607,23 @@ dependencies = [ "rand 0.7.3", "reqwest", "serial_test", - "solana-sdk 1.14.7", + "solana-sdk 1.14.8", ] [[package]] name = "solana-net-shaper" -version = "1.14.7" +version = "1.14.8" dependencies = [ "clap 3.1.8", "rand 0.7.3", "serde", "serde_json", - "solana-logger 1.14.7", + "solana-logger 1.14.8", ] [[package]] name = "solana-net-utils" -version = "1.14.7" +version = "1.14.8" dependencies = [ "bincode", "clap 3.1.8", @@ -5634,8 +5634,8 @@ dependencies = [ "serde", "serde_derive", "socket2", - "solana-logger 1.14.7", - "solana-sdk 1.14.7", + "solana-logger 1.14.8", + "solana-sdk 1.14.8", "solana-version", "tokio", "url 2.2.2", @@ -5643,7 +5643,7 @@ dependencies = [ [[package]] name = "solana-notifier" -version = "1.14.7" +version = "1.14.8" dependencies = [ "log", "reqwest", @@ -5652,7 +5652,7 @@ dependencies = [ [[package]] name = "solana-perf" -version = "1.14.7" +version = "1.14.8" dependencies = [ "ahash", "bincode", @@ -5670,16 +5670,16 @@ dependencies = [ "rand 0.7.3", "rayon", "serde", - "solana-logger 1.14.7", + "solana-logger 1.14.8", "solana-metrics", "solana-rayon-threadlimit", - "solana-sdk 1.14.7", + "solana-sdk 1.14.8", "solana-vote-program", ] [[package]] name = "solana-poh" -version = "1.14.7" +version = "1.14.8" dependencies = [ "bincode", "core_affinity", @@ -5689,29 +5689,29 @@ dependencies = [ "rand 0.7.3", "solana-entry", "solana-ledger", - "solana-logger 1.14.7", + "solana-logger 1.14.8", "solana-measure", "solana-metrics", "solana-perf", "solana-runtime", - "solana-sdk 1.14.7", + "solana-sdk 1.14.8", "solana-sys-tuner", "thiserror", ] [[package]] name = "solana-poh-bench" -version = "1.14.7" +version = "1.14.8" dependencies = [ "clap 3.1.8", "log", "rand 0.7.3", "rayon", "solana-entry", - "solana-logger 1.14.7", + "solana-logger 1.14.8", "solana-measure", "solana-perf", - "solana-sdk 1.14.7", + "solana-sdk 1.14.8", "solana-version", ] @@ -5759,7 +5759,7 @@ dependencies = [ [[package]] name = "solana-program" -version = "1.14.7" +version = "1.14.8" dependencies = [ "anyhow", "assert_matches", @@ -5797,10 +5797,10 @@ dependencies = [ "serde_json", "sha2 0.10.2", "sha3 0.10.1", - "solana-frozen-abi 1.14.7", - "solana-frozen-abi-macro 1.14.7", - "solana-logger 1.14.7", - "solana-sdk-macro 1.14.7", + "solana-frozen-abi 1.14.8", + "solana-frozen-abi-macro 1.14.8", + "solana-logger 1.14.8", + "solana-sdk-macro 1.14.8", "static_assertions", "thiserror", "tiny-bip39", @@ -5810,7 +5810,7 @@ dependencies = [ [[package]] name = "solana-program-runtime" -version = "1.14.7" +version = "1.14.8" dependencies = [ "base64 0.13.0", "bincode", @@ -5825,18 +5825,18 @@ dependencies = [ "rand 0.7.3", "rustc_version 0.4.0", "serde", - "solana-frozen-abi 1.14.7", - "solana-frozen-abi-macro 1.14.7", - "solana-logger 1.14.7", + "solana-frozen-abi 1.14.8", + "solana-frozen-abi-macro 1.14.8", + "solana-logger 1.14.8", "solana-measure", "solana-metrics", - "solana-sdk 1.14.7", + "solana-sdk 1.14.8", "thiserror", ] [[package]] name = "solana-program-test" -version = "1.14.7" +version = "1.14.8" dependencies = [ "assert_matches", "async-trait", @@ -5848,10 +5848,10 @@ dependencies = [ "solana-banks-client", "solana-banks-server", "solana-bpf-loader-program", - "solana-logger 1.14.7", + "solana-logger 1.14.8", "solana-program-runtime", "solana-runtime", - "solana-sdk 1.14.7", + "solana-sdk 1.14.8", "solana-vote-program", "thiserror", "tokio", @@ -5859,7 +5859,7 @@ dependencies = [ [[package]] name = "solana-rayon-threadlimit" -version = "1.14.7" +version = "1.14.8" dependencies = [ "lazy_static", "num_cpus", @@ -5867,7 +5867,7 @@ dependencies = [ [[package]] name = "solana-remote-wallet" -version = "1.14.7" +version = "1.14.8" dependencies = [ "console", "dialoguer", @@ -5878,14 +5878,14 @@ dependencies = [ "parking_lot 0.12.1", "qstring", "semver 1.0.10", - "solana-sdk 1.14.7", + "solana-sdk 1.14.8", "thiserror", "uriparse", ] [[package]] name = "solana-rpc" -version = "1.14.7" +version = "1.14.8" dependencies = [ "base64 0.13.0", "bincode", @@ -5921,7 +5921,7 @@ dependencies = [ "solana-poh", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.14.7", + "solana-sdk 1.14.8", "solana-send-transaction-service", "solana-stake-program", "solana-storage-bigtable", @@ -5940,7 +5940,7 @@ dependencies = [ [[package]] name = "solana-rpc-test" -version = "1.14.7" +version = "1.14.8" dependencies = [ "bincode", "bs58", @@ -5952,9 +5952,9 @@ dependencies = [ "serde_json", "solana-account-decoder", "solana-client", - "solana-logger 1.14.7", + "solana-logger 1.14.8", "solana-rpc", - "solana-sdk 1.14.7", + "solana-sdk 1.14.8", "solana-streamer", "solana-test-validator", "solana-transaction-status", @@ -5963,7 +5963,7 @@ dependencies = [ [[package]] name = "solana-runtime" -version = "1.14.7" +version = "1.14.8" dependencies = [ "arrayref", "assert_matches", @@ -6003,18 +6003,18 @@ dependencies = [ "solana-bucket-map", "solana-compute-budget-program", "solana-config-program", - "solana-frozen-abi 1.14.7", - "solana-frozen-abi-macro 1.14.7", - "solana-logger 1.14.7", + "solana-frozen-abi 1.14.8", + "solana-frozen-abi-macro 1.14.8", + "solana-logger 1.14.8", "solana-measure", "solana-metrics", "solana-program-runtime", "solana-rayon-threadlimit", - "solana-sdk 1.14.7", + "solana-sdk 1.14.8", "solana-stake-program", "solana-vote-program", "solana-zk-token-proof-program", - "solana-zk-token-sdk 1.14.7", + "solana-zk-token-sdk 1.14.8", "strum", "strum_macros", "symlink", @@ -6077,7 +6077,7 @@ dependencies = [ [[package]] name = "solana-sdk" -version = "1.14.7" +version = "1.14.8" dependencies = [ "anyhow", "assert_matches", @@ -6117,11 +6117,11 @@ dependencies = [ "serde_json", "sha2 0.10.2", "sha3 0.10.1", - "solana-frozen-abi 1.14.7", - "solana-frozen-abi-macro 1.14.7", - "solana-logger 1.14.7", - "solana-program 1.14.7", - "solana-sdk-macro 1.14.7", + "solana-frozen-abi 1.14.8", + "solana-frozen-abi-macro 1.14.8", + "solana-logger 1.14.8", + "solana-program 1.14.8", + "solana-sdk-macro 1.14.8", "static_assertions", "thiserror", "tiny-bip39", @@ -6144,7 +6144,7 @@ dependencies = [ [[package]] name = "solana-sdk-macro" -version = "1.14.7" +version = "1.14.8" dependencies = [ "bs58", "proc-macro2 1.0.41", @@ -6155,21 +6155,21 @@ dependencies = [ [[package]] name = "solana-send-transaction-service" -version = "1.14.7" +version = "1.14.8" dependencies = [ "crossbeam-channel", "log", "solana-client", - "solana-logger 1.14.7", + "solana-logger 1.14.8", "solana-measure", "solana-metrics", "solana-runtime", - "solana-sdk 1.14.7", + "solana-sdk 1.14.8", ] [[package]] name = "solana-stake-accounts" -version = "1.14.7" +version = "1.14.8" dependencies = [ "clap 2.33.3", "solana-clap-utils", @@ -6177,13 +6177,13 @@ dependencies = [ "solana-client", "solana-remote-wallet", "solana-runtime", - "solana-sdk 1.14.7", + "solana-sdk 1.14.8", "solana-stake-program", ] [[package]] name = "solana-stake-program" -version = "1.14.7" +version = "1.14.8" dependencies = [ "assert_matches", "bincode", @@ -6195,12 +6195,12 @@ dependencies = [ "serde", "serde_derive", "solana-config-program", - "solana-frozen-abi 1.14.7", - "solana-frozen-abi-macro 1.14.7", - "solana-logger 1.14.7", + "solana-frozen-abi 1.14.8", + "solana-frozen-abi-macro 1.14.8", + "solana-logger 1.14.8", "solana-metrics", "solana-program-runtime", - "solana-sdk 1.14.7", + "solana-sdk 1.14.8", "solana-vote-program", "test-case", "thiserror", @@ -6208,7 +6208,7 @@ dependencies = [ [[package]] name = "solana-storage-bigtable" -version = "1.14.7" +version = "1.14.8" dependencies = [ "backoff", "bincode", @@ -6229,7 +6229,7 @@ dependencies = [ "serde_derive", "smpl_jwt", "solana-metrics", - "solana-sdk 1.14.7", + "solana-sdk 1.14.8", "solana-storage-proto", "solana-transaction-status", "thiserror", @@ -6240,7 +6240,7 @@ dependencies = [ [[package]] name = "solana-storage-proto" -version = "1.14.7" +version = "1.14.8" dependencies = [ "bincode", "bs58", @@ -6249,25 +6249,25 @@ dependencies = [ "protobuf-src", "serde", "solana-account-decoder", - "solana-sdk 1.14.7", + "solana-sdk 1.14.8", "solana-transaction-status", "tonic-build 0.8.0", ] [[package]] name = "solana-store-tool" -version = "1.14.7" +version = "1.14.8" dependencies = [ "clap 2.33.3", "log", - "solana-logger 1.14.7", + "solana-logger 1.14.8", "solana-runtime", "solana-version", ] [[package]] name = "solana-streamer" -version = "1.14.7" +version = "1.14.8" dependencies = [ "crossbeam-channel", "futures-util", @@ -6284,10 +6284,10 @@ dependencies = [ "rand 0.7.3", "rcgen", "rustls 0.20.6", - "solana-logger 1.14.7", + "solana-logger 1.14.8", "solana-metrics", "solana-perf", - "solana-sdk 1.14.7", + "solana-sdk 1.14.8", "thiserror", "tokio", "x509-parser", @@ -6295,13 +6295,13 @@ dependencies = [ [[package]] name = "solana-sys-tuner" -version = "1.14.7" +version = "1.14.8" dependencies = [ "clap 2.33.3", "libc", "log", "nix", - "solana-logger 1.14.7", + "solana-logger 1.14.8", "solana-version", "sysctl", "unix_socket2", @@ -6310,7 +6310,7 @@ dependencies = [ [[package]] name = "solana-test-validator" -version = "1.14.7" +version = "1.14.8" dependencies = [ "base64 0.13.0", "log", @@ -6321,20 +6321,20 @@ dependencies = [ "solana-core", "solana-gossip", "solana-ledger", - "solana-logger 1.14.7", + "solana-logger 1.14.8", "solana-net-utils", "solana-program-runtime", "solana-program-test", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.7", + "solana-sdk 1.14.8", "solana-streamer", "tokio", ] [[package]] name = "solana-tokens" -version = "1.14.7" +version = "1.14.8" dependencies = [ "bincode", "chrono", @@ -6350,9 +6350,9 @@ dependencies = [ "solana-clap-utils", "solana-cli-config", "solana-client", - "solana-logger 1.14.7", + "solana-logger 1.14.8", "solana-remote-wallet", - "solana-sdk 1.14.7", + "solana-sdk 1.14.8", "solana-streamer", "solana-test-validator", "solana-transaction-status", @@ -6365,7 +6365,7 @@ dependencies = [ [[package]] name = "solana-transaction-dos" -version = "1.14.7" +version = "1.14.8" dependencies = [ "bincode", "clap 2.33.3", @@ -6379,11 +6379,11 @@ dependencies = [ "solana-faucet", "solana-gossip", "solana-local-cluster", - "solana-logger 1.14.7", + "solana-logger 1.14.8", "solana-measure", "solana-net-utils", "solana-runtime", - "solana-sdk 1.14.7", + "solana-sdk 1.14.8", "solana-streamer", "solana-transaction-status", "solana-version", @@ -6391,7 +6391,7 @@ dependencies = [ [[package]] name = "solana-transaction-status" -version = "1.14.7" +version = "1.14.8" dependencies = [ "Inflector", "base64 0.13.0", @@ -6407,7 +6407,7 @@ dependencies = [ "solana-address-lookup-table-program", "solana-measure", "solana-metrics", - "solana-sdk 1.14.7", + "solana-sdk 1.14.8", "solana-vote-program", "spl-associated-token-account", "spl-memo", @@ -6418,7 +6418,7 @@ dependencies = [ [[package]] name = "solana-upload-perf" -version = "1.14.7" +version = "1.14.8" dependencies = [ "serde_json", "solana-metrics", @@ -6426,7 +6426,7 @@ dependencies = [ [[package]] name = "solana-validator" -version = "1.14.7" +version = "1.14.8" dependencies = [ "chrono", "clap 2.33.3", @@ -6457,14 +6457,14 @@ dependencies = [ "solana-genesis-utils", "solana-gossip", "solana-ledger", - "solana-logger 1.14.7", + "solana-logger 1.14.8", "solana-metrics", "solana-net-utils", "solana-perf", "solana-poh", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.7", + "solana-sdk 1.14.8", "solana-send-transaction-service", "solana-storage-bigtable", "solana-streamer", @@ -6477,21 +6477,21 @@ dependencies = [ [[package]] name = "solana-version" -version = "1.14.7" +version = "1.14.8" dependencies = [ "log", "rustc_version 0.4.0", "semver 1.0.10", "serde", "serde_derive", - "solana-frozen-abi 1.14.7", - "solana-frozen-abi-macro 1.14.7", - "solana-sdk 1.14.7", + "solana-frozen-abi 1.14.8", + "solana-frozen-abi-macro 1.14.8", + "solana-sdk 1.14.8", ] [[package]] name = "solana-vote-program" -version = "1.14.7" +version = "1.14.8" dependencies = [ "bincode", "itertools", @@ -6502,18 +6502,18 @@ dependencies = [ "rustc_version 0.4.0", "serde", "serde_derive", - "solana-frozen-abi 1.14.7", - "solana-frozen-abi-macro 1.14.7", - "solana-logger 1.14.7", + "solana-frozen-abi 1.14.8", + "solana-frozen-abi-macro 1.14.8", + "solana-logger 1.14.8", "solana-metrics", "solana-program-runtime", - "solana-sdk 1.14.7", + "solana-sdk 1.14.8", "thiserror", ] [[package]] name = "solana-watchtower" -version = "1.14.7" +version = "1.14.8" dependencies = [ "clap 2.33.3", "humantime", @@ -6522,24 +6522,24 @@ dependencies = [ "solana-cli-config", "solana-cli-output", "solana-client", - "solana-logger 1.14.7", + "solana-logger 1.14.8", "solana-metrics", "solana-notifier", - "solana-sdk 1.14.7", + "solana-sdk 1.14.8", "solana-version", ] [[package]] name = "solana-zk-token-proof-program" -version = "1.14.7" +version = "1.14.8" dependencies = [ "bytemuck", "getrandom 0.1.16", "num-derive", "num-traits", "solana-program-runtime", - "solana-sdk 1.14.7", - "solana-zk-token-sdk 1.14.7", + "solana-sdk 1.14.8", + "solana-zk-token-sdk 1.14.8", ] [[package]] @@ -6574,7 +6574,7 @@ dependencies = [ [[package]] name = "solana-zk-token-sdk" -version = "1.14.7" +version = "1.14.8" dependencies = [ "aes-gcm-siv", "arrayref", @@ -6594,8 +6594,8 @@ dependencies = [ "serde", "serde_json", "sha3 0.9.1", - "solana-program 1.14.7", - "solana-sdk 1.14.7", + "solana-program 1.14.8", + "solana-sdk 1.14.8", "subtle", "thiserror", "zeroize", diff --git a/account-decoder/Cargo.toml b/account-decoder/Cargo.toml index 9220f6ba6b2c47..6a9b2476daa934 100644 --- a/account-decoder/Cargo.toml +++ b/account-decoder/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-account-decoder" -version = "1.14.7" +version = "1.14.8" description = "Solana account decoder" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -19,10 +19,10 @@ lazy_static = "1.4.0" serde = "1.0.138" serde_derive = "1.0.103" serde_json = "1.0.81" -solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.7" } -solana-config-program = { path = "../programs/config", version = "=1.14.7" } -solana-sdk = { path = "../sdk", version = "=1.14.7" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.7" } +solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.8" } +solana-config-program = { path = "../programs/config", version = "=1.14.8" } +solana-sdk = { path = "../sdk", version = "=1.14.8" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.8" } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } spl-token-2022 = { version = "=0.4.2", features = ["no-entrypoint"] } thiserror = "1.0" diff --git a/accounts-bench/Cargo.toml b/accounts-bench/Cargo.toml index b84f5a829837c2..92d9571be7dc03 100644 --- a/accounts-bench/Cargo.toml +++ b/accounts-bench/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-accounts-bench" -version = "1.14.7" +version = "1.14.8" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -12,11 +12,11 @@ publish = false clap = "2.33.1" log = "0.4.17" rayon = "1.5.3" -solana-logger = { path = "../logger", version = "=1.14.7" } -solana-measure = { path = "../measure", version = "=1.14.7" } -solana-runtime = { path = "../runtime", version = "=1.14.7" } -solana-sdk = { path = "../sdk", version = "=1.14.7" } -solana-version = { path = "../version", version = "=1.14.7" } +solana-logger = { path = "../logger", version = "=1.14.8" } +solana-measure = { path = "../measure", version = "=1.14.8" } +solana-runtime = { path = "../runtime", version = "=1.14.8" } +solana-sdk = { path = "../sdk", version = "=1.14.8" } +solana-version = { path = "../version", version = "=1.14.8" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/accounts-cluster-bench/Cargo.toml b/accounts-cluster-bench/Cargo.toml index 4cae8414ea9bb8..672f5ee8765001 100644 --- a/accounts-cluster-bench/Cargo.toml +++ b/accounts-cluster-bench/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-accounts-cluster-bench" -version = "1.14.7" +version = "1.14.8" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -13,25 +13,25 @@ clap = "2.33.1" log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.7" } -solana-clap-utils = { path = "../clap-utils", version = "=1.14.7" } -solana-client = { path = "../client", version = "=1.14.7" } -solana-faucet = { path = "../faucet", version = "=1.14.7" } -solana-gossip = { path = "../gossip", version = "=1.14.7" } -solana-logger = { path = "../logger", version = "=1.14.7" } -solana-measure = { path = "../measure", version = "=1.14.7" } -solana-net-utils = { path = "../net-utils", version = "=1.14.7" } -solana-runtime = { path = "../runtime", version = "=1.14.7" } -solana-sdk = { path = "../sdk", version = "=1.14.7" } -solana-streamer = { path = "../streamer", version = "=1.14.7" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.7" } -solana-version = { path = "../version", version = "=1.14.7" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.8" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.8" } +solana-client = { path = "../client", version = "=1.14.8" } +solana-faucet = { path = "../faucet", version = "=1.14.8" } +solana-gossip = { path = "../gossip", version = "=1.14.8" } +solana-logger = { path = "../logger", version = "=1.14.8" } +solana-measure = { path = "../measure", version = "=1.14.8" } +solana-net-utils = { path = "../net-utils", version = "=1.14.8" } +solana-runtime = { path = "../runtime", version = "=1.14.8" } +solana-sdk = { path = "../sdk", version = "=1.14.8" } +solana-streamer = { path = "../streamer", version = "=1.14.8" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.8" } +solana-version = { path = "../version", version = "=1.14.8" } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } [dev-dependencies] -solana-core = { path = "../core", version = "=1.14.7" } -solana-local-cluster = { path = "../local-cluster", version = "=1.14.7" } -solana-test-validator = { path = "../test-validator", version = "=1.14.7" } +solana-core = { path = "../core", version = "=1.14.8" } +solana-local-cluster = { path = "../local-cluster", version = "=1.14.8" } +solana-test-validator = { path = "../test-validator", version = "=1.14.8" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/banking-bench/Cargo.toml b/banking-bench/Cargo.toml index 27e69f201ea14f..91a0b71200f700 100644 --- a/banking-bench/Cargo.toml +++ b/banking-bench/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-banking-bench" -version = "1.14.7" +version = "1.14.8" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,18 +14,18 @@ crossbeam-channel = "0.5" log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" -solana-client = { path = "../client", version = "=1.14.7" } -solana-core = { path = "../core", version = "=1.14.7" } -solana-gossip = { path = "../gossip", version = "=1.14.7" } -solana-ledger = { path = "../ledger", version = "=1.14.7" } -solana-logger = { path = "../logger", version = "=1.14.7" } -solana-measure = { path = "../measure", version = "=1.14.7" } -solana-perf = { path = "../perf", version = "=1.14.7" } -solana-poh = { path = "../poh", version = "=1.14.7" } -solana-runtime = { path = "../runtime", version = "=1.14.7" } -solana-sdk = { path = "../sdk", version = "=1.14.7" } -solana-streamer = { path = "../streamer", version = "=1.14.7" } -solana-version = { path = "../version", version = "=1.14.7" } +solana-client = { path = "../client", version = "=1.14.8" } +solana-core = { path = "../core", version = "=1.14.8" } +solana-gossip = { path = "../gossip", version = "=1.14.8" } +solana-ledger = { path = "../ledger", version = "=1.14.8" } +solana-logger = { path = "../logger", version = "=1.14.8" } +solana-measure = { path = "../measure", version = "=1.14.8" } +solana-perf = { path = "../perf", version = "=1.14.8" } +solana-poh = { path = "../poh", version = "=1.14.8" } +solana-runtime = { path = "../runtime", version = "=1.14.8" } +solana-sdk = { path = "../sdk", version = "=1.14.8" } +solana-streamer = { path = "../streamer", version = "=1.14.8" } +solana-version = { path = "../version", version = "=1.14.8" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/banks-client/Cargo.toml b/banks-client/Cargo.toml index f9d7b6ecedefb0..6900c37ecbc1d7 100644 --- a/banks-client/Cargo.toml +++ b/banks-client/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-banks-client" -version = "1.14.7" +version = "1.14.8" description = "Solana banks client" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,17 +12,17 @@ edition = "2021" [dependencies] borsh = "0.9.3" futures = "0.3" -solana-banks-interface = { path = "../banks-interface", version = "=1.14.7" } -solana-program = { path = "../sdk/program", version = "=1.14.7" } -solana-sdk = { path = "../sdk", version = "=1.14.7" } +solana-banks-interface = { path = "../banks-interface", version = "=1.14.8" } +solana-program = { path = "../sdk/program", version = "=1.14.8" } +solana-sdk = { path = "../sdk", version = "=1.14.8" } tarpc = { version = "0.29.0", features = ["full"] } thiserror = "1.0" tokio = { version = "~1.14.1", features = ["full"] } tokio-serde = { version = "0.8", features = ["bincode"] } [dev-dependencies] -solana-banks-server = { path = "../banks-server", version = "=1.14.7" } -solana-runtime = { path = "../runtime", version = "=1.14.7" } +solana-banks-server = { path = "../banks-server", version = "=1.14.8" } +solana-runtime = { path = "../runtime", version = "=1.14.8" } [lib] crate-type = ["lib"] diff --git a/banks-interface/Cargo.toml b/banks-interface/Cargo.toml index 2d373068c735db..9a20f2c1e12d05 100644 --- a/banks-interface/Cargo.toml +++ b/banks-interface/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-banks-interface" -version = "1.14.7" +version = "1.14.8" description = "Solana banks RPC interface" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -11,7 +11,7 @@ edition = "2021" [dependencies] serde = { version = "1.0.138", features = ["derive"] } -solana-sdk = { path = "../sdk", version = "=1.14.7" } +solana-sdk = { path = "../sdk", version = "=1.14.8" } tarpc = { version = "0.29.0", features = ["full"] } [lib] diff --git a/banks-server/Cargo.toml b/banks-server/Cargo.toml index bb02649c15b449..1ca3b8c9a85b74 100644 --- a/banks-server/Cargo.toml +++ b/banks-server/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-banks-server" -version = "1.14.7" +version = "1.14.8" description = "Solana banks server" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,11 +13,11 @@ edition = "2021" bincode = "1.3.3" crossbeam-channel = "0.5" futures = "0.3" -solana-banks-interface = { path = "../banks-interface", version = "=1.14.7" } -solana-client = { path = "../client", version = "=1.14.7" } -solana-runtime = { path = "../runtime", version = "=1.14.7" } -solana-sdk = { path = "../sdk", version = "=1.14.7" } -solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.7" } +solana-banks-interface = { path = "../banks-interface", version = "=1.14.8" } +solana-client = { path = "../client", version = "=1.14.8" } +solana-runtime = { path = "../runtime", version = "=1.14.8" } +solana-sdk = { path = "../sdk", version = "=1.14.8" } +solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.8" } tarpc = { version = "0.29.0", features = ["full"] } tokio = { version = "1", features = ["full"] } tokio-serde = { version = "0.8", features = ["bincode"] } diff --git a/bench-streamer/Cargo.toml b/bench-streamer/Cargo.toml index 77ea61ab09d2ae..825af6f6e7c8a3 100644 --- a/bench-streamer/Cargo.toml +++ b/bench-streamer/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-bench-streamer" -version = "1.14.7" +version = "1.14.8" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -11,9 +11,9 @@ publish = false [dependencies] clap = { version = "3.1.5", features = ["cargo"] } crossbeam-channel = "0.5" -solana-net-utils = { path = "../net-utils", version = "=1.14.7" } -solana-streamer = { path = "../streamer", version = "=1.14.7" } -solana-version = { path = "../version", version = "=1.14.7" } +solana-net-utils = { path = "../net-utils", version = "=1.14.8" } +solana-streamer = { path = "../streamer", version = "=1.14.8" } +solana-version = { path = "../version", version = "=1.14.8" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/bench-tps/Cargo.toml b/bench-tps/Cargo.toml index e058e21afe6446..968b059ba7c93e 100644 --- a/bench-tps/Cargo.toml +++ b/bench-tps/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-bench-tps" -version = "1.14.7" +version = "1.14.8" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -15,28 +15,28 @@ log = "0.4.17" rayon = "1.5.3" serde_json = "1.0.81" serde_yaml = "0.8.26" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.7" } -solana-cli-config = { path = "../cli-config", version = "=1.14.7" } -solana-client = { path = "../client", version = "=1.14.7" } -solana-core = { path = "../core", version = "=1.14.7" } -solana-faucet = { path = "../faucet", version = "=1.14.7" } -solana-genesis = { path = "../genesis", version = "=1.14.7" } -solana-gossip = { path = "../gossip", version = "=1.14.7" } -solana-logger = { path = "../logger", version = "=1.14.7" } -solana-measure = { path = "../measure", version = "=1.14.7" } -solana-metrics = { path = "../metrics", version = "=1.14.7" } -solana-net-utils = { path = "../net-utils", version = "=1.14.7" } -solana-rpc = { path = "../rpc", version = "=1.14.7" } -solana-runtime = { path = "../runtime", version = "=1.14.7" } -solana-sdk = { path = "../sdk", version = "=1.14.7" } -solana-streamer = { path = "../streamer", version = "=1.14.7" } -solana-version = { path = "../version", version = "=1.14.7" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.8" } +solana-cli-config = { path = "../cli-config", version = "=1.14.8" } +solana-client = { path = "../client", version = "=1.14.8" } +solana-core = { path = "../core", version = "=1.14.8" } +solana-faucet = { path = "../faucet", version = "=1.14.8" } +solana-genesis = { path = "../genesis", version = "=1.14.8" } +solana-gossip = { path = "../gossip", version = "=1.14.8" } +solana-logger = { path = "../logger", version = "=1.14.8" } +solana-measure = { path = "../measure", version = "=1.14.8" } +solana-metrics = { path = "../metrics", version = "=1.14.8" } +solana-net-utils = { path = "../net-utils", version = "=1.14.8" } +solana-rpc = { path = "../rpc", version = "=1.14.8" } +solana-runtime = { path = "../runtime", version = "=1.14.8" } +solana-sdk = { path = "../sdk", version = "=1.14.8" } +solana-streamer = { path = "../streamer", version = "=1.14.8" } +solana-version = { path = "../version", version = "=1.14.8" } thiserror = "1.0" [dev-dependencies] serial_test = "0.8.0" -solana-local-cluster = { path = "../local-cluster", version = "=1.14.7" } -solana-test-validator = { path = "../test-validator", version = "=1.14.7" } +solana-local-cluster = { path = "../local-cluster", version = "=1.14.8" } +solana-test-validator = { path = "../test-validator", version = "=1.14.8" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/bloom/Cargo.toml b/bloom/Cargo.toml index 7615a6e39d4fcd..461604d312f27f 100644 --- a/bloom/Cargo.toml +++ b/bloom/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bloom" -version = "1.14.7" +version = "1.14.8" description = "Solana bloom filter" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -17,9 +17,9 @@ rand = "0.7.0" rayon = "1.5.3" serde = { version = "1.0.138", features = ["rc"] } serde_derive = "1.0.103" -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.7" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.7" } -solana-sdk = { path = "../sdk", version = "=1.14.7" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.8" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.8" } +solana-sdk = { path = "../sdk", version = "=1.14.8" } [lib] crate-type = ["lib"] diff --git a/bucket_map/Cargo.toml b/bucket_map/Cargo.toml index 7042c346f683b2..213c013e72e567 100644 --- a/bucket_map/Cargo.toml +++ b/bucket_map/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bucket-map" -version = "1.14.7" +version = "1.14.8" description = "solana-bucket-map" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-bucket-map" @@ -15,14 +15,14 @@ log = { version = "0.4.17" } memmap2 = "0.5.3" modular-bitfield = "0.11.2" rand = "0.7.0" -solana-measure = { path = "../measure", version = "=1.14.7" } -solana-sdk = { path = "../sdk", version = "=1.14.7" } +solana-measure = { path = "../measure", version = "=1.14.8" } +solana-sdk = { path = "../sdk", version = "=1.14.8" } tempfile = "3.3.0" [dev-dependencies] fs_extra = "1.2.0" rayon = "1.5.3" -solana-logger = { path = "../logger", version = "=1.14.7" } +solana-logger = { path = "../logger", version = "=1.14.8" } [lib] crate-type = ["lib"] diff --git a/clap-utils/Cargo.toml b/clap-utils/Cargo.toml index d63c32cb68de9c..7a32f36231938c 100644 --- a/clap-utils/Cargo.toml +++ b/clap-utils/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-clap-utils" -version = "1.14.7" +version = "1.14.8" description = "Solana utilities for the clap" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,9 +13,9 @@ edition = "2021" chrono = "0.4" clap = "2.33.0" rpassword = "6.0" -solana-perf = { path = "../perf", version = "=1.14.7" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.7", default-features = false } -solana-sdk = { path = "../sdk", version = "=1.14.7" } +solana-perf = { path = "../perf", version = "=1.14.8" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.8", default-features = false } +solana-sdk = { path = "../sdk", version = "=1.14.8" } thiserror = "1.0.31" tiny-bip39 = "0.8.2" uriparse = "0.6.4" diff --git a/clap-v3-utils/Cargo.toml b/clap-v3-utils/Cargo.toml index 7e9f33e2701800..9ab27d2aea7aa0 100644 --- a/clap-v3-utils/Cargo.toml +++ b/clap-v3-utils/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-clap-v3-utils" -version = "1.14.7" +version = "1.14.8" description = "Solana utilities for the clap v3" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,9 +13,9 @@ edition = "2021" chrono = "0.4" clap = { version = "3.1.5", features = ["cargo"] } rpassword = "6.0" -solana-perf = { path = "../perf", version = "=1.14.7" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.7", default-features = false } -solana-sdk = { path = "../sdk", version = "=1.14.7" } +solana-perf = { path = "../perf", version = "=1.14.8" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.8", default-features = false } +solana-sdk = { path = "../sdk", version = "=1.14.8" } thiserror = "1.0.31" tiny-bip39 = "0.8.2" uriparse = "0.6.4" diff --git a/cli-config/Cargo.toml b/cli-config/Cargo.toml index efd93ed1ef2284..8b64ffaad4b135 100644 --- a/cli-config/Cargo.toml +++ b/cli-config/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-cli-config" description = "Blockchain, Rebuilt for Scale" -version = "1.14.7" +version = "1.14.8" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -15,8 +15,8 @@ lazy_static = "1.4.0" serde = "1.0.138" serde_derive = "1.0.103" serde_yaml = "0.8.26" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.7" } -solana-sdk = { path = "../sdk", version = "=1.14.7" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.8" } +solana-sdk = { path = "../sdk", version = "=1.14.8" } url = "2.2.2" [dev-dependencies] diff --git a/cli-output/Cargo.toml b/cli-output/Cargo.toml index 544b6fc2ab8319..561b2ceadf4dfb 100644 --- a/cli-output/Cargo.toml +++ b/cli-output/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-cli-output" description = "Blockchain, Rebuilt for Scale" -version = "1.14.7" +version = "1.14.8" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -21,13 +21,13 @@ pretty-hex = "0.3.0" semver = "1.0.10" serde = "1.0.138" serde_json = "1.0.81" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.7" } -solana-clap-utils = { path = "../clap-utils", version = "=1.14.7" } -solana-cli-config = { path = "../cli-config", version = "=1.14.7" } -solana-client = { path = "../client", version = "=1.14.7" } -solana-sdk = { path = "../sdk", version = "=1.14.7" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.7" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.7" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.8" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.8" } +solana-cli-config = { path = "../cli-config", version = "=1.14.8" } +solana-client = { path = "../client", version = "=1.14.8" } +solana-sdk = { path = "../sdk", version = "=1.14.8" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.8" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.8" } spl-memo = { version = "=3.0.1", features = ["no-entrypoint"] } [dev-dependencies] diff --git a/cli/Cargo.toml b/cli/Cargo.toml index 3c7015611504c0..a57b318afc00fb 100644 --- a/cli/Cargo.toml +++ b/cli/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-cli" description = "Blockchain, Rebuilt for Scale" -version = "1.14.7" +version = "1.14.8" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -27,30 +27,30 @@ semver = "1.0.10" serde = "1.0.138" serde_derive = "1.0.103" serde_json = "1.0.81" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.7" } -solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.7" } -solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.7" } -solana-clap-utils = { path = "../clap-utils", version = "=1.14.7" } -solana-cli-config = { path = "../cli-config", version = "=1.14.7" } -solana-cli-output = { path = "../cli-output", version = "=1.14.7" } -solana-client = { path = "../client", version = "=1.14.7" } -solana-config-program = { path = "../programs/config", version = "=1.14.7" } -solana-faucet = { path = "../faucet", version = "=1.14.7" } -solana-logger = { path = "../logger", version = "=1.14.7" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.7" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.7" } -solana-sdk = { path = "../sdk", version = "=1.14.7" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.7" } -solana-version = { path = "../version", version = "=1.14.7" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.7" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.8" } +solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.8" } +solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.8" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.8" } +solana-cli-config = { path = "../cli-config", version = "=1.14.8" } +solana-cli-output = { path = "../cli-output", version = "=1.14.8" } +solana-client = { path = "../client", version = "=1.14.8" } +solana-config-program = { path = "../programs/config", version = "=1.14.8" } +solana-faucet = { path = "../faucet", version = "=1.14.8" } +solana-logger = { path = "../logger", version = "=1.14.8" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.8" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.8" } +solana-sdk = { path = "../sdk", version = "=1.14.8" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.8" } +solana-version = { path = "../version", version = "=1.14.8" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.8" } solana_rbpf = "=0.2.31" spl-memo = { version = "=3.0.1", features = ["no-entrypoint"] } thiserror = "1.0.31" tiny-bip39 = "0.8.2" [dev-dependencies] -solana-streamer = { path = "../streamer", version = "=1.14.7" } -solana-test-validator = { path = "../test-validator", version = "=1.14.7" } +solana-streamer = { path = "../streamer", version = "=1.14.8" } +solana-test-validator = { path = "../test-validator", version = "=1.14.8" } tempfile = "3.3.0" [[bin]] diff --git a/client-test/Cargo.toml b/client-test/Cargo.toml index 2c9a7286e79aa3..39e7c6c791ac14 100644 --- a/client-test/Cargo.toml +++ b/client-test/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-client-test" -version = "1.14.7" +version = "1.14.8" description = "Solana RPC Test" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,25 +14,25 @@ publish = false futures-util = "0.3.21" serde_json = "1.0.81" serial_test = "0.8.0" -solana-client = { path = "../client", version = "=1.14.7" } -solana-ledger = { path = "../ledger", version = "=1.14.7" } -solana-measure = { path = "../measure", version = "=1.14.7" } -solana-merkle-tree = { path = "../merkle-tree", version = "=1.14.7" } -solana-metrics = { path = "../metrics", version = "=1.14.7" } -solana-perf = { path = "../perf", version = "=1.14.7" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.7" } -solana-rpc = { path = "../rpc", version = "=1.14.7" } -solana-runtime = { path = "../runtime", version = "=1.14.7" } -solana-sdk = { path = "../sdk", version = "=1.14.7" } -solana-streamer = { path = "../streamer", version = "=1.14.7" } -solana-test-validator = { path = "../test-validator", version = "=1.14.7" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.7" } -solana-version = { path = "../version", version = "=1.14.7" } +solana-client = { path = "../client", version = "=1.14.8" } +solana-ledger = { path = "../ledger", version = "=1.14.8" } +solana-measure = { path = "../measure", version = "=1.14.8" } +solana-merkle-tree = { path = "../merkle-tree", version = "=1.14.8" } +solana-metrics = { path = "../metrics", version = "=1.14.8" } +solana-perf = { path = "../perf", version = "=1.14.8" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.8" } +solana-rpc = { path = "../rpc", version = "=1.14.8" } +solana-runtime = { path = "../runtime", version = "=1.14.8" } +solana-sdk = { path = "../sdk", version = "=1.14.8" } +solana-streamer = { path = "../streamer", version = "=1.14.8" } +solana-test-validator = { path = "../test-validator", version = "=1.14.8" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.8" } +solana-version = { path = "../version", version = "=1.14.8" } systemstat = "0.1.11" tokio = { version = "~1.14.1", features = ["full"] } [dev-dependencies] -solana-logger = { path = "../logger", version = "=1.14.7" } +solana-logger = { path = "../logger", version = "=1.14.8" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/client/Cargo.toml b/client/Cargo.toml index 2cae3af533868e..e356af85b03344 100644 --- a/client/Cargo.toml +++ b/client/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-client" -version = "1.14.7" +version = "1.14.8" description = "Solana Client" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -38,17 +38,17 @@ semver = "1.0.10" serde = "1.0.138" serde_derive = "1.0.103" serde_json = "1.0.81" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.7" } -solana-clap-utils = { path = "../clap-utils", version = "=1.14.7" } -solana-faucet = { path = "../faucet", version = "=1.14.7" } -solana-measure = { path = "../measure", version = "=1.14.7" } -solana-metrics = { path = "../metrics", version = "=1.14.7" } -solana-net-utils = { path = "../net-utils", version = "=1.14.7" } -solana-sdk = { path = "../sdk", version = "=1.14.7" } -solana-streamer = { path = "../streamer", version = "=1.14.7" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.7" } -solana-version = { path = "../version", version = "=1.14.7" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.7" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.8" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.8" } +solana-faucet = { path = "../faucet", version = "=1.14.8" } +solana-measure = { path = "../measure", version = "=1.14.8" } +solana-metrics = { path = "../metrics", version = "=1.14.8" } +solana-net-utils = { path = "../net-utils", version = "=1.14.8" } +solana-sdk = { path = "../sdk", version = "=1.14.8" } +solana-streamer = { path = "../streamer", version = "=1.14.8" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.8" } +solana-version = { path = "../version", version = "=1.14.8" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.8" } spl-token-2022 = { version = "=0.4.2", features = ["no-entrypoint"] } thiserror = "1.0" tokio = { version = "1", features = ["full"] } @@ -61,8 +61,8 @@ url = "2.2.2" anyhow = "1.0.58" assert_matches = "1.5.0" jsonrpc-http-server = "18.0.0" -solana-logger = { path = "../logger", version = "=1.14.7" } -solana-perf = { path = "../perf", version = "=1.14.7" } +solana-logger = { path = "../logger", version = "=1.14.8" } +solana-perf = { path = "../perf", version = "=1.14.8" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/core/Cargo.toml b/core/Cargo.toml index b353e6fa448d68..b2c13a45b959b3 100644 --- a/core/Cargo.toml +++ b/core/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "solana-core" description = "Blockchain, Rebuilt for Scale" -version = "1.14.7" +version = "1.14.8" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-core" readme = "../README.md" @@ -36,30 +36,30 @@ rand_chacha = "0.2.2" rayon = "1.5.3" serde = "1.0.138" serde_derive = "1.0.103" -solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.7" } -solana-bloom = { path = "../bloom", version = "=1.14.7" } -solana-client = { path = "../client", version = "=1.14.7" } -solana-entry = { path = "../entry", version = "=1.14.7" } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.7" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.7" } -solana-geyser-plugin-manager = { path = "../geyser-plugin-manager", version = "=1.14.7" } -solana-gossip = { path = "../gossip", version = "=1.14.7" } -solana-ledger = { path = "../ledger", version = "=1.14.7" } -solana-measure = { path = "../measure", version = "=1.14.7" } -solana-metrics = { path = "../metrics", version = "=1.14.7" } -solana-net-utils = { path = "../net-utils", version = "=1.14.7" } -solana-perf = { path = "../perf", version = "=1.14.7" } -solana-poh = { path = "../poh", version = "=1.14.7" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.7" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.7" } -solana-rpc = { path = "../rpc", version = "=1.14.7" } -solana-runtime = { path = "../runtime", version = "=1.14.7" } -solana-sdk = { path = "../sdk", version = "=1.14.7" } -solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.7" } -solana-streamer = { path = "../streamer", version = "=1.14.7" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.7" } -solana-version = { path = "../version", version = "=1.14.7" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.7" } +solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.8" } +solana-bloom = { path = "../bloom", version = "=1.14.8" } +solana-client = { path = "../client", version = "=1.14.8" } +solana-entry = { path = "../entry", version = "=1.14.8" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.8" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.8" } +solana-geyser-plugin-manager = { path = "../geyser-plugin-manager", version = "=1.14.8" } +solana-gossip = { path = "../gossip", version = "=1.14.8" } +solana-ledger = { path = "../ledger", version = "=1.14.8" } +solana-measure = { path = "../measure", version = "=1.14.8" } +solana-metrics = { path = "../metrics", version = "=1.14.8" } +solana-net-utils = { path = "../net-utils", version = "=1.14.8" } +solana-perf = { path = "../perf", version = "=1.14.8" } +solana-poh = { path = "../poh", version = "=1.14.8" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.8" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.8" } +solana-rpc = { path = "../rpc", version = "=1.14.8" } +solana-runtime = { path = "../runtime", version = "=1.14.8" } +solana-sdk = { path = "../sdk", version = "=1.14.8" } +solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.8" } +solana-streamer = { path = "../streamer", version = "=1.14.8" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.8" } +solana-version = { path = "../version", version = "=1.14.8" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.8" } sys-info = "0.9.1" tempfile = "3.3.0" thiserror = "1.0" @@ -71,9 +71,9 @@ matches = "0.1.9" raptorq = "1.7.0" serde_json = "1.0.81" serial_test = "0.8.0" -solana-logger = { path = "../logger", version = "=1.14.7" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.7" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.7" } +solana-logger = { path = "../logger", version = "=1.14.8" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.8" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.8" } static_assertions = "1.1.0" systemstat = "0.1.11" test-case = "2.1.0" diff --git a/dos/Cargo.toml b/dos/Cargo.toml index 92e53897079403..a17cb213668c93 100644 --- a/dos/Cargo.toml +++ b/dos/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-dos" -version = "1.14.7" +version = "1.14.8" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -17,23 +17,23 @@ itertools = "0.10.3" log = "0.4.17" rand = "0.7.0" serde = "1.0.138" -solana-bench-tps = { path = "../bench-tps", version = "=1.14.7" } -solana-client = { path = "../client", version = "=1.14.7" } -solana-core = { path = "../core", version = "=1.14.7" } -solana-faucet = { path = "../faucet", version = "=1.14.7" } -solana-gossip = { path = "../gossip", version = "=1.14.7" } -solana-logger = { path = "../logger", version = "=1.14.7" } -solana-measure = { path = "../measure", version = "=1.14.7" } -solana-net-utils = { path = "../net-utils", version = "=1.14.7" } -solana-perf = { path = "../perf", version = "=1.14.7" } -solana-rpc = { path = "../rpc", version = "=1.14.7" } -solana-sdk = { path = "../sdk", version = "=1.14.7" } -solana-streamer = { path = "../streamer", version = "=1.14.7" } -solana-version = { path = "../version", version = "=1.14.7" } +solana-bench-tps = { path = "../bench-tps", version = "=1.14.8" } +solana-client = { path = "../client", version = "=1.14.8" } +solana-core = { path = "../core", version = "=1.14.8" } +solana-faucet = { path = "../faucet", version = "=1.14.8" } +solana-gossip = { path = "../gossip", version = "=1.14.8" } +solana-logger = { path = "../logger", version = "=1.14.8" } +solana-measure = { path = "../measure", version = "=1.14.8" } +solana-net-utils = { path = "../net-utils", version = "=1.14.8" } +solana-perf = { path = "../perf", version = "=1.14.8" } +solana-rpc = { path = "../rpc", version = "=1.14.8" } +solana-sdk = { path = "../sdk", version = "=1.14.8" } +solana-streamer = { path = "../streamer", version = "=1.14.8" } +solana-version = { path = "../version", version = "=1.14.8" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] [dev-dependencies] serial_test = "0.8.0" -solana-local-cluster = { path = "../local-cluster", version = "=1.14.7" } +solana-local-cluster = { path = "../local-cluster", version = "=1.14.8" } diff --git a/download-utils/Cargo.toml b/download-utils/Cargo.toml index 86c174b2376d5d..75e06e7f04c6d8 100644 --- a/download-utils/Cargo.toml +++ b/download-utils/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-download-utils" -version = "1.14.7" +version = "1.14.8" description = "Solana Download Utils" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,8 +14,8 @@ console = "0.15.0" indicatif = "0.16.2" log = "0.4.17" reqwest = { version = "0.11.11", default-features = false, features = ["blocking", "brotli", "deflate", "gzip", "rustls-tls", "json"] } -solana-runtime = { path = "../runtime", version = "=1.14.7" } -solana-sdk = { path = "../sdk", version = "=1.14.7" } +solana-runtime = { path = "../runtime", version = "=1.14.8" } +solana-sdk = { path = "../sdk", version = "=1.14.8" } [lib] crate-type = ["lib"] diff --git a/entry/Cargo.toml b/entry/Cargo.toml index 137532d0add857..5c0c5eb4599207 100644 --- a/entry/Cargo.toml +++ b/entry/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-entry" -version = "1.14.7" +version = "1.14.8" description = "Solana Entry" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -19,16 +19,16 @@ log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" serde = "1.0.138" -solana-measure = { path = "../measure", version = "=1.14.7" } -solana-merkle-tree = { path = "../merkle-tree", version = "=1.14.7" } -solana-metrics = { path = "../metrics", version = "=1.14.7" } -solana-perf = { path = "../perf", version = "=1.14.7" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.7" } -solana-sdk = { path = "../sdk", version = "=1.14.7" } +solana-measure = { path = "../measure", version = "=1.14.8" } +solana-merkle-tree = { path = "../merkle-tree", version = "=1.14.8" } +solana-metrics = { path = "../metrics", version = "=1.14.8" } +solana-perf = { path = "../perf", version = "=1.14.8" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.8" } +solana-sdk = { path = "../sdk", version = "=1.14.8" } [dev-dependencies] matches = "0.1.9" -solana-logger = { path = "../logger", version = "=1.14.7" } +solana-logger = { path = "../logger", version = "=1.14.8" } [lib] crate-type = ["lib"] diff --git a/faucet/Cargo.toml b/faucet/Cargo.toml index dedef49481bf4c..988d00026839d7 100644 --- a/faucet/Cargo.toml +++ b/faucet/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-faucet" -version = "1.14.7" +version = "1.14.8" description = "Solana Faucet" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -17,12 +17,12 @@ crossbeam-channel = "0.5" log = "0.4.17" serde = "1.0.138" serde_derive = "1.0.103" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.7" } -solana-cli-config = { path = "../cli-config", version = "=1.14.7" } -solana-logger = { path = "../logger", version = "=1.14.7" } -solana-metrics = { path = "../metrics", version = "=1.14.7" } -solana-sdk = { path = "../sdk", version = "=1.14.7" } -solana-version = { path = "../version", version = "=1.14.7" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.8" } +solana-cli-config = { path = "../cli-config", version = "=1.14.8" } +solana-logger = { path = "../logger", version = "=1.14.8" } +solana-metrics = { path = "../metrics", version = "=1.14.8" } +solana-sdk = { path = "../sdk", version = "=1.14.8" } +solana-version = { path = "../version", version = "=1.14.8" } spl-memo = { version = "=3.0.1", features = ["no-entrypoint"] } thiserror = "1.0" tokio = { version = "1", features = ["full"] } diff --git a/frozen-abi/Cargo.toml b/frozen-abi/Cargo.toml index 828412a5774489..90d3a86413f870 100644 --- a/frozen-abi/Cargo.toml +++ b/frozen-abi/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-frozen-abi" -version = "1.14.7" +version = "1.14.8" description = "Solana Frozen ABI" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -20,7 +20,7 @@ serde_bytes = "0.11" serde_derive = "1.0" serde_json = "1.0" sha2 = "0.10.2" -solana-frozen-abi-macro = { path = "macro", version = "=1.14.7" } +solana-frozen-abi-macro = { path = "macro", version = "=1.14.8" } thiserror = "1.0" [target.'cfg(not(target_os = "solana"))'.dependencies] @@ -43,7 +43,7 @@ rand_core = { version = "0.6.3", features = ["alloc", "getrandom", "std"] } subtle = { version = "2.4.1", features = ["default", "i128", "std"] } [target.'cfg(not(target_os = "solana"))'.dev-dependencies] -solana-logger = { path = "../logger", version = "=1.14.7" } +solana-logger = { path = "../logger", version = "=1.14.8" } [build-dependencies] rustc_version = "0.4" diff --git a/frozen-abi/macro/Cargo.toml b/frozen-abi/macro/Cargo.toml index b7bae5d0e9a772..22362c339177e1 100644 --- a/frozen-abi/macro/Cargo.toml +++ b/frozen-abi/macro/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-frozen-abi-macro" -version = "1.14.7" +version = "1.14.8" description = "Solana Frozen ABI Macro" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/genesis-utils/Cargo.toml b/genesis-utils/Cargo.toml index 569029cbc1131e..52fe8b77439c49 100644 --- a/genesis-utils/Cargo.toml +++ b/genesis-utils/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-genesis-utils" -version = "1.14.7" +version = "1.14.8" description = "Solana Genesis Utils" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,9 +10,9 @@ documentation = "https://docs.rs/solana-download-utils" edition = "2021" [dependencies] -solana-download-utils = { path = "../download-utils", version = "=1.14.7" } -solana-runtime = { path = "../runtime", version = "=1.14.7" } -solana-sdk = { path = "../sdk", version = "=1.14.7" } +solana-download-utils = { path = "../download-utils", version = "=1.14.8" } +solana-runtime = { path = "../runtime", version = "=1.14.8" } +solana-sdk = { path = "../sdk", version = "=1.14.8" } [lib] crate-type = ["lib"] diff --git a/genesis/Cargo.toml b/genesis/Cargo.toml index 321cddc73c09d6..8984dcb7c07f37 100644 --- a/genesis/Cargo.toml +++ b/genesis/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-genesis" description = "Blockchain, Rebuilt for Scale" -version = "1.14.7" +version = "1.14.8" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -15,16 +15,16 @@ clap = "2.33.1" serde = "1.0.138" serde_json = "1.0.81" serde_yaml = "0.8.26" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.7" } -solana-cli-config = { path = "../cli-config", version = "=1.14.7" } -solana-entry = { path = "../entry", version = "=1.14.7" } -solana-ledger = { path = "../ledger", version = "=1.14.7" } -solana-logger = { path = "../logger", version = "=1.14.7" } -solana-runtime = { path = "../runtime", version = "=1.14.7" } -solana-sdk = { path = "../sdk", version = "=1.14.7" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.7" } -solana-version = { path = "../version", version = "=1.14.7" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.7" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.8" } +solana-cli-config = { path = "../cli-config", version = "=1.14.8" } +solana-entry = { path = "../entry", version = "=1.14.8" } +solana-ledger = { path = "../ledger", version = "=1.14.8" } +solana-logger = { path = "../logger", version = "=1.14.8" } +solana-runtime = { path = "../runtime", version = "=1.14.8" } +solana-sdk = { path = "../sdk", version = "=1.14.8" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.8" } +solana-version = { path = "../version", version = "=1.14.8" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.8" } tempfile = "3.3.0" [[bin]] diff --git a/geyser-plugin-interface/Cargo.toml b/geyser-plugin-interface/Cargo.toml index f51df386c1e9e9..2fb5e7902b4403 100644 --- a/geyser-plugin-interface/Cargo.toml +++ b/geyser-plugin-interface/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-geyser-plugin-interface" description = "The Solana Geyser plugin interface." -version = "1.14.7" +version = "1.14.8" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -11,8 +11,8 @@ documentation = "https://docs.rs/solana-geyser-plugin-interface" [dependencies] log = "0.4.17" -solana-sdk = { path = "../sdk", version = "=1.14.7" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.7" } +solana-sdk = { path = "../sdk", version = "=1.14.8" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.8" } thiserror = "1.0.31" [package.metadata.docs.rs] diff --git a/geyser-plugin-manager/Cargo.toml b/geyser-plugin-manager/Cargo.toml index d574c7a382aab2..3947fa94042f2a 100644 --- a/geyser-plugin-manager/Cargo.toml +++ b/geyser-plugin-manager/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-geyser-plugin-manager" description = "The Solana Geyser plugin manager." -version = "1.14.7" +version = "1.14.8" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -16,13 +16,13 @@ json5 = "0.4.1" libloading = "0.7.3" log = "0.4.17" serde_json = "1.0.81" -solana-geyser-plugin-interface = { path = "../geyser-plugin-interface", version = "=1.14.7" } -solana-measure = { path = "../measure", version = "=1.14.7" } -solana-metrics = { path = "../metrics", version = "=1.14.7" } -solana-rpc = { path = "../rpc", version = "=1.14.7" } -solana-runtime = { path = "../runtime", version = "=1.14.7" } -solana-sdk = { path = "../sdk", version = "=1.14.7" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.7" } +solana-geyser-plugin-interface = { path = "../geyser-plugin-interface", version = "=1.14.8" } +solana-measure = { path = "../measure", version = "=1.14.8" } +solana-metrics = { path = "../metrics", version = "=1.14.8" } +solana-rpc = { path = "../rpc", version = "=1.14.8" } +solana-runtime = { path = "../runtime", version = "=1.14.8" } +solana-sdk = { path = "../sdk", version = "=1.14.8" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.8" } thiserror = "1.0.31" [package.metadata.docs.rs] diff --git a/gossip/Cargo.toml b/gossip/Cargo.toml index 19b6fe7b83e3ed..7de58f542b72b4 100644 --- a/gossip/Cargo.toml +++ b/gossip/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-gossip" description = "Blockchain, Rebuilt for Scale" -version = "1.14.7" +version = "1.14.8" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -27,24 +27,24 @@ rayon = "1.5.3" serde = "1.0.138" serde_bytes = "0.11" serde_derive = "1.0.103" -solana-bloom = { path = "../bloom", version = "=1.14.7" } -solana-clap-utils = { path = "../clap-utils", version = "=1.14.7" } -solana-client = { path = "../client", version = "=1.14.7" } -solana-entry = { path = "../entry", version = "=1.14.7" } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.7" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.7" } -solana-ledger = { path = "../ledger", version = "=1.14.7" } -solana-logger = { path = "../logger", version = "=1.14.7" } -solana-measure = { path = "../measure", version = "=1.14.7" } -solana-metrics = { path = "../metrics", version = "=1.14.7" } -solana-net-utils = { path = "../net-utils", version = "=1.14.7" } -solana-perf = { path = "../perf", version = "=1.14.7" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.7" } -solana-runtime = { path = "../runtime", version = "=1.14.7" } -solana-sdk = { path = "../sdk", version = "=1.14.7" } -solana-streamer = { path = "../streamer", version = "=1.14.7" } -solana-version = { path = "../version", version = "=1.14.7" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.7" } +solana-bloom = { path = "../bloom", version = "=1.14.8" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.8" } +solana-client = { path = "../client", version = "=1.14.8" } +solana-entry = { path = "../entry", version = "=1.14.8" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.8" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.8" } +solana-ledger = { path = "../ledger", version = "=1.14.8" } +solana-logger = { path = "../logger", version = "=1.14.8" } +solana-measure = { path = "../measure", version = "=1.14.8" } +solana-metrics = { path = "../metrics", version = "=1.14.8" } +solana-net-utils = { path = "../net-utils", version = "=1.14.8" } +solana-perf = { path = "../perf", version = "=1.14.8" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.8" } +solana-runtime = { path = "../runtime", version = "=1.14.8" } +solana-sdk = { path = "../sdk", version = "=1.14.8" } +solana-streamer = { path = "../streamer", version = "=1.14.8" } +solana-version = { path = "../version", version = "=1.14.8" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.8" } thiserror = "1.0" [dev-dependencies] diff --git a/install/Cargo.toml b/install/Cargo.toml index 7d731aa56974f6..6c80b84d013c62 100644 --- a/install/Cargo.toml +++ b/install/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-install" description = "The solana cluster software installer" -version = "1.14.7" +version = "1.14.8" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -26,12 +26,12 @@ reqwest = { version = "0.11.11", default-features = false, features = ["blocking semver = "1.0.10" serde = { version = "1.0.138", features = ["derive"] } serde_yaml = "0.8.26" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.7" } -solana-client = { path = "../client", version = "=1.14.7" } -solana-config-program = { path = "../programs/config", version = "=1.14.7" } -solana-logger = { path = "../logger", version = "=1.14.7" } -solana-sdk = { path = "../sdk", version = "=1.14.7" } -solana-version = { path = "../version", version = "=1.14.7" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.8" } +solana-client = { path = "../client", version = "=1.14.8" } +solana-config-program = { path = "../programs/config", version = "=1.14.8" } +solana-logger = { path = "../logger", version = "=1.14.8" } +solana-sdk = { path = "../sdk", version = "=1.14.8" } +solana-version = { path = "../version", version = "=1.14.8" } tar = "0.4.38" tempfile = "3.3.0" url = "2.2.2" diff --git a/keygen/Cargo.toml b/keygen/Cargo.toml index 2f85d89f1a8ae4..1cfda94bc35f0b 100644 --- a/keygen/Cargo.toml +++ b/keygen/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-keygen" -version = "1.14.7" +version = "1.14.8" description = "Solana key generation utility" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,11 +14,11 @@ bs58 = "0.4.0" clap = { version = "3.1.5", features = ["cargo"] } dirs-next = "2.0.0" num_cpus = "1.13.1" -solana-clap-v3-utils = { path = "../clap-v3-utils", version = "=1.14.7" } -solana-cli-config = { path = "../cli-config", version = "=1.14.7" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.7" } -solana-sdk = { path = "../sdk", version = "=1.14.7" } -solana-version = { path = "../version", version = "=1.14.7" } +solana-clap-v3-utils = { path = "../clap-v3-utils", version = "=1.14.8" } +solana-cli-config = { path = "../cli-config", version = "=1.14.8" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.8" } +solana-sdk = { path = "../sdk", version = "=1.14.8" } +solana-version = { path = "../version", version = "=1.14.8" } tiny-bip39 = "0.8.2" [[bin]] diff --git a/ledger-tool/Cargo.toml b/ledger-tool/Cargo.toml index 4b1ffc84001da3..b4e6584aee7c83 100644 --- a/ledger-tool/Cargo.toml +++ b/ledger-tool/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-ledger-tool" description = "Blockchain, Rebuilt for Scale" -version = "1.14.7" +version = "1.14.8" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -22,20 +22,20 @@ log = { version = "0.4.17" } regex = "1" serde = { version = "1.0", features = ["derive"] } serde_json = "1.0.81" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.7" } -solana-cli-output = { path = "../cli-output", version = "=1.14.7" } -solana-core = { path = "../core", version = "=1.14.7" } -solana-entry = { path = "../entry", version = "=1.14.7" } -solana-ledger = { path = "../ledger", version = "=1.14.7" } -solana-logger = { path = "../logger", version = "=1.14.7" } -solana-measure = { path = "../measure", version = "=1.14.7" } -solana-runtime = { path = "../runtime", version = "=1.14.7" } -solana-sdk = { path = "../sdk", version = "=1.14.7" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.7" } -solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.7" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.7" } -solana-version = { path = "../version", version = "=1.14.7" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.7" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.8" } +solana-cli-output = { path = "../cli-output", version = "=1.14.8" } +solana-core = { path = "../core", version = "=1.14.8" } +solana-entry = { path = "../entry", version = "=1.14.8" } +solana-ledger = { path = "../ledger", version = "=1.14.8" } +solana-logger = { path = "../logger", version = "=1.14.8" } +solana-measure = { path = "../measure", version = "=1.14.8" } +solana-runtime = { path = "../runtime", version = "=1.14.8" } +solana-sdk = { path = "../sdk", version = "=1.14.8" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.8" } +solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.8" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.8" } +solana-version = { path = "../version", version = "=1.14.8" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.8" } tokio = { version = "1", features = ["full"] } [target.'cfg(not(target_env = "msvc"))'.dependencies] diff --git a/ledger/Cargo.toml b/ledger/Cargo.toml index 641e9715d85fa6..37c4c4f098a132 100644 --- a/ledger/Cargo.toml +++ b/ledger/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-ledger" -version = "1.14.7" +version = "1.14.8" description = "Solana ledger" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -35,23 +35,23 @@ reed-solomon-erasure = { version = "6.0.0", features = ["simd-accel"] } serde = "1.0.138" serde_bytes = "0.11.6" sha2 = "0.10.2" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.7" } -solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.7" } -solana-entry = { path = "../entry", version = "=1.14.7" } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.7" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.7" } -solana-measure = { path = "../measure", version = "=1.14.7" } -solana-metrics = { path = "../metrics", version = "=1.14.7" } -solana-perf = { path = "../perf", version = "=1.14.7" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.7" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.7" } -solana-runtime = { path = "../runtime", version = "=1.14.7" } -solana-sdk = { path = "../sdk", version = "=1.14.7" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.7" } -solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.7" } -solana-storage-proto = { path = "../storage-proto", version = "=1.14.7" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.7" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.7" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.8" } +solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.8" } +solana-entry = { path = "../entry", version = "=1.14.8" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.8" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.8" } +solana-measure = { path = "../measure", version = "=1.14.8" } +solana-metrics = { path = "../metrics", version = "=1.14.8" } +solana-perf = { path = "../perf", version = "=1.14.8" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.8" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.8" } +solana-runtime = { path = "../runtime", version = "=1.14.8" } +solana-sdk = { path = "../sdk", version = "=1.14.8" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.8" } +solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.8" } +solana-storage-proto = { path = "../storage-proto", version = "=1.14.8" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.8" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.8" } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } spl-token-2022 = { version = "=0.4.2", features = ["no-entrypoint"] } static_assertions = "1.1.0" @@ -71,8 +71,8 @@ features = ["lz4"] [dev-dependencies] bs58 = "0.4.0" matches = "0.1.9" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.7" } -solana-logger = { path = "../logger", version = "=1.14.7" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.8" } +solana-logger = { path = "../logger", version = "=1.14.8" } test-case = "2.1.0" [build-dependencies] diff --git a/local-cluster/Cargo.toml b/local-cluster/Cargo.toml index bdf6b3f0a0646c..16f7525929e3d5 100644 --- a/local-cluster/Cargo.toml +++ b/local-cluster/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-local-cluster" description = "Blockchain, Rebuilt for Scale" -version = "1.14.7" +version = "1.14.8" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -16,25 +16,25 @@ itertools = "0.10.3" log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" -solana-client = { path = "../client", version = "=1.14.7" } -solana-config-program = { path = "../programs/config", version = "=1.14.7" } -solana-core = { path = "../core", version = "=1.14.7" } -solana-entry = { path = "../entry", version = "=1.14.7" } -solana-gossip = { path = "../gossip", version = "=1.14.7" } -solana-ledger = { path = "../ledger", version = "=1.14.7" } -solana-runtime = { path = "../runtime", version = "=1.14.7" } -solana-sdk = { path = "../sdk", version = "=1.14.7" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.7" } -solana-streamer = { path = "../streamer", version = "=1.14.7" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.7" } +solana-client = { path = "../client", version = "=1.14.8" } +solana-config-program = { path = "../programs/config", version = "=1.14.8" } +solana-core = { path = "../core", version = "=1.14.8" } +solana-entry = { path = "../entry", version = "=1.14.8" } +solana-gossip = { path = "../gossip", version = "=1.14.8" } +solana-ledger = { path = "../ledger", version = "=1.14.8" } +solana-runtime = { path = "../runtime", version = "=1.14.8" } +solana-sdk = { path = "../sdk", version = "=1.14.8" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.8" } +solana-streamer = { path = "../streamer", version = "=1.14.8" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.8" } tempfile = "3.3.0" [dev-dependencies] assert_matches = "1.5.0" gag = "1.0.0" serial_test = "0.8.0" -solana-download-utils = { path = "../download-utils", version = "=1.14.7" } -solana-logger = { path = "../logger", version = "=1.14.7" } +solana-download-utils = { path = "../download-utils", version = "=1.14.8" } +solana-logger = { path = "../logger", version = "=1.14.8" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/log-analyzer/Cargo.toml b/log-analyzer/Cargo.toml index 2e2912f0cda207..f40a86cab667b2 100644 --- a/log-analyzer/Cargo.toml +++ b/log-analyzer/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-log-analyzer" description = "The solana cluster network analysis tool" -version = "1.14.7" +version = "1.14.8" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,8 +14,8 @@ byte-unit = "4.0.14" clap = { version = "3.1.5", features = ["cargo"] } serde = "1.0.138" serde_json = "1.0.81" -solana-logger = { path = "../logger", version = "=1.14.7" } -solana-version = { path = "../version", version = "=1.14.7" } +solana-logger = { path = "../logger", version = "=1.14.8" } +solana-version = { path = "../version", version = "=1.14.8" } [[bin]] name = "solana-log-analyzer" diff --git a/logger/Cargo.toml b/logger/Cargo.toml index bec748396bebc3..757aef9c7e560c 100644 --- a/logger/Cargo.toml +++ b/logger/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-logger" -version = "1.14.7" +version = "1.14.8" description = "Solana Logger" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/measure/Cargo.toml b/measure/Cargo.toml index 4325a91e079b31..d411f48eddaf30 100644 --- a/measure/Cargo.toml +++ b/measure/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "solana-measure" description = "Blockchain, Rebuilt for Scale" -version = "1.14.7" +version = "1.14.8" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-measure" readme = "../README.md" @@ -12,7 +12,7 @@ edition = "2021" [dependencies] log = "0.4.17" -solana-sdk = { path = "../sdk", version = "=1.14.7" } +solana-sdk = { path = "../sdk", version = "=1.14.8" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/merkle-root-bench/Cargo.toml b/merkle-root-bench/Cargo.toml index 0f06b8fc89ce38..a4983298abcec7 100644 --- a/merkle-root-bench/Cargo.toml +++ b/merkle-root-bench/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-merkle-root-bench" -version = "1.14.7" +version = "1.14.8" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -11,11 +11,11 @@ publish = false [dependencies] clap = "2.33.1" log = "0.4.17" -solana-logger = { path = "../logger", version = "=1.14.7" } -solana-measure = { path = "../measure", version = "=1.14.7" } -solana-runtime = { path = "../runtime", version = "=1.14.7" } -solana-sdk = { path = "../sdk", version = "=1.14.7" } -solana-version = { path = "../version", version = "=1.14.7" } +solana-logger = { path = "../logger", version = "=1.14.8" } +solana-measure = { path = "../measure", version = "=1.14.8" } +solana-runtime = { path = "../runtime", version = "=1.14.8" } +solana-sdk = { path = "../sdk", version = "=1.14.8" } +solana-version = { path = "../version", version = "=1.14.8" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/merkle-tree/Cargo.toml b/merkle-tree/Cargo.toml index c3c0ba1d7e1d8c..dcec2ceb1f6e19 100644 --- a/merkle-tree/Cargo.toml +++ b/merkle-tree/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-merkle-tree" -version = "1.14.7" +version = "1.14.8" description = "Solana Merkle Tree" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -11,7 +11,7 @@ edition = "2021" [dependencies] fast-math = "0.1" -solana-program = { path = "../sdk/program", version = "=1.14.7" } +solana-program = { path = "../sdk/program", version = "=1.14.8" } # This can go once the BPF toolchain target Rust 1.42.0+ [target.bpfel-unknown-unknown.dependencies] diff --git a/metrics/Cargo.toml b/metrics/Cargo.toml index 598d5a90aee02b..40f8215a9cd9c9 100644 --- a/metrics/Cargo.toml +++ b/metrics/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-metrics" -version = "1.14.7" +version = "1.14.8" description = "Solana Metrics" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -15,7 +15,7 @@ gethostname = "0.2.3" lazy_static = "1.4.0" log = "0.4.17" reqwest = { version = "0.11.11", default-features = false, features = ["blocking", "brotli", "deflate", "gzip", "rustls-tls", "json"] } -solana-sdk = { path = "../sdk", version = "=1.14.7" } +solana-sdk = { path = "../sdk", version = "=1.14.8" } [dev-dependencies] env_logger = "0.9.0" diff --git a/net-shaper/Cargo.toml b/net-shaper/Cargo.toml index 83f9c156a8d641..7098e59bcd40bb 100644 --- a/net-shaper/Cargo.toml +++ b/net-shaper/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-net-shaper" description = "The solana cluster network shaping tool" -version = "1.14.7" +version = "1.14.8" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,7 +14,7 @@ clap = { version = "3.1.5", features = ["cargo"] } rand = "0.7.0" serde = { version = "1.0.138", features = ["derive"] } serde_json = "1.0.81" -solana-logger = { path = "../logger", version = "=1.14.7" } +solana-logger = { path = "../logger", version = "=1.14.8" } [[bin]] name = "solana-net-shaper" diff --git a/net-utils/Cargo.toml b/net-utils/Cargo.toml index 7de76c7cbf88cf..a32e6304827dda 100644 --- a/net-utils/Cargo.toml +++ b/net-utils/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-net-utils" -version = "1.14.7" +version = "1.14.8" description = "Solana Network Utilities" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -19,9 +19,9 @@ rand = "0.7.0" serde = "1.0.138" serde_derive = "1.0.103" socket2 = "0.4.4" -solana-logger = { path = "../logger", version = "=1.14.7" } -solana-sdk = { path = "../sdk", version = "=1.14.7" } -solana-version = { path = "../version", version = "=1.14.7" } +solana-logger = { path = "../logger", version = "=1.14.8" } +solana-sdk = { path = "../sdk", version = "=1.14.8" } +solana-version = { path = "../version", version = "=1.14.8" } tokio = { version = "1", features = ["full"] } url = "2.2.2" diff --git a/notifier/Cargo.toml b/notifier/Cargo.toml index 88cd5020879906..2f05cf0525d466 100644 --- a/notifier/Cargo.toml +++ b/notifier/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-notifier" -version = "1.14.7" +version = "1.14.8" description = "Solana Notifier" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/perf/Cargo.toml b/perf/Cargo.toml index 08d185c29d18f5..df0e1723769fea 100644 --- a/perf/Cargo.toml +++ b/perf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-perf" -version = "1.14.7" +version = "1.14.8" description = "Solana Performance APIs" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -22,10 +22,10 @@ log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" serde = "1.0.138" -solana-metrics = { path = "../metrics", version = "=1.14.7" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.7" } -solana-sdk = { path = "../sdk", version = "=1.14.7" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.7" } +solana-metrics = { path = "../metrics", version = "=1.14.8" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.8" } +solana-sdk = { path = "../sdk", version = "=1.14.8" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.8" } [target."cfg(target_os = \"linux\")".dependencies] caps = "0.5.3" @@ -37,7 +37,7 @@ name = "solana_perf" [dev-dependencies] matches = "0.1.9" -solana-logger = { path = "../logger", version = "=1.14.7" } +solana-logger = { path = "../logger", version = "=1.14.8" } [[bench]] name = "sigverify" diff --git a/poh-bench/Cargo.toml b/poh-bench/Cargo.toml index e57853a892dcf4..7f772ce3254809 100644 --- a/poh-bench/Cargo.toml +++ b/poh-bench/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-poh-bench" -version = "1.14.7" +version = "1.14.8" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,12 +14,12 @@ clap = { version = "3.1.5", features = ["cargo"] } log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" -solana-entry = { path = "../entry", version = "=1.14.7" } -solana-logger = { path = "../logger", version = "=1.14.7" } -solana-measure = { path = "../measure", version = "=1.14.7" } -solana-perf = { path = "../perf", version = "=1.14.7" } -solana-sdk = { path = "../sdk", version = "=1.14.7" } -solana-version = { path = "../version", version = "=1.14.7" } +solana-entry = { path = "../entry", version = "=1.14.8" } +solana-logger = { path = "../logger", version = "=1.14.8" } +solana-measure = { path = "../measure", version = "=1.14.8" } +solana-perf = { path = "../perf", version = "=1.14.8" } +solana-sdk = { path = "../sdk", version = "=1.14.8" } +solana-version = { path = "../version", version = "=1.14.8" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/poh/Cargo.toml b/poh/Cargo.toml index a4bc4974973ea5..0037256217568c 100644 --- a/poh/Cargo.toml +++ b/poh/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-poh" -version = "1.14.7" +version = "1.14.8" description = "Solana PoH" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,21 +13,21 @@ edition = "2021" core_affinity = "0.5.10" crossbeam-channel = "0.5" log = "0.4.17" -solana-entry = { path = "../entry", version = "=1.14.7" } -solana-ledger = { path = "../ledger", version = "=1.14.7" } -solana-measure = { path = "../measure", version = "=1.14.7" } -solana-metrics = { path = "../metrics", version = "=1.14.7" } -solana-runtime = { path = "../runtime", version = "=1.14.7" } -solana-sdk = { path = "../sdk", version = "=1.14.7" } -solana-sys-tuner = { path = "../sys-tuner", version = "=1.14.7" } +solana-entry = { path = "../entry", version = "=1.14.8" } +solana-ledger = { path = "../ledger", version = "=1.14.8" } +solana-measure = { path = "../measure", version = "=1.14.8" } +solana-metrics = { path = "../metrics", version = "=1.14.8" } +solana-runtime = { path = "../runtime", version = "=1.14.8" } +solana-sdk = { path = "../sdk", version = "=1.14.8" } +solana-sys-tuner = { path = "../sys-tuner", version = "=1.14.8" } thiserror = "1.0" [dev-dependencies] bincode = "1.3.3" matches = "0.1.9" rand = "0.7.0" -solana-logger = { path = "../logger", version = "=1.14.7" } -solana-perf = { path = "../perf", version = "=1.14.7" } +solana-logger = { path = "../logger", version = "=1.14.8" } +solana-perf = { path = "../perf", version = "=1.14.8" } [lib] crate-type = ["lib"] diff --git a/program-runtime/Cargo.toml b/program-runtime/Cargo.toml index 8f3c4387ef88c5..79a62442f494fd 100644 --- a/program-runtime/Cargo.toml +++ b/program-runtime/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-program-runtime" -version = "1.14.7" +version = "1.14.8" description = "Solana program runtime" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -21,16 +21,16 @@ num-derive = { version = "0.3" } num-traits = { version = "0.2" } rand = "0.7.0" serde = { version = "1.0.129", features = ["derive", "rc"] } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.7" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.7" } -solana-measure = { path = "../measure", version = "=1.14.7" } -solana-metrics = { path = "../metrics", version = "=1.14.7" } -solana-sdk = { path = "../sdk", version = "=1.14.7" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.8" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.8" } +solana-measure = { path = "../measure", version = "=1.14.8" } +solana-metrics = { path = "../metrics", version = "=1.14.8" } +solana-sdk = { path = "../sdk", version = "=1.14.8" } thiserror = "1.0" enum-iterator = "0.8.1" [dev-dependencies] -solana-logger = { path = "../logger", version = "=1.14.7" } +solana-logger = { path = "../logger", version = "=1.14.8" } [lib] crate-type = ["lib"] diff --git a/program-test/Cargo.toml b/program-test/Cargo.toml index d970613d98aa81..f7a699c976ff8e 100644 --- a/program-test/Cargo.toml +++ b/program-test/Cargo.toml @@ -5,7 +5,7 @@ edition = "2021" license = "Apache-2.0" name = "solana-program-test" repository = "https://github.com/solana-labs/solana" -version = "1.14.7" +version = "1.14.8" [dependencies] assert_matches = "1.5.0" @@ -15,13 +15,13 @@ bincode = "1.3.3" chrono-humanize = "0.2.1" log = "0.4.17" serde = "1.0.138" -solana-banks-client = { path = "../banks-client", version = "=1.14.7" } -solana-banks-server = { path = "../banks-server", version = "=1.14.7" } -solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.7" } -solana-logger = { path = "../logger", version = "=1.14.7" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.7" } -solana-runtime = { path = "../runtime", version = "=1.14.7" } -solana-sdk = { path = "../sdk", version = "=1.14.7" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.7" } +solana-banks-client = { path = "../banks-client", version = "=1.14.8" } +solana-banks-server = { path = "../banks-server", version = "=1.14.8" } +solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.8" } +solana-logger = { path = "../logger", version = "=1.14.8" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.8" } +solana-runtime = { path = "../runtime", version = "=1.14.8" } +solana-sdk = { path = "../sdk", version = "=1.14.8" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.8" } thiserror = "1.0" tokio = { version = "1", features = ["full"] } diff --git a/programs/address-lookup-table-tests/Cargo.toml b/programs/address-lookup-table-tests/Cargo.toml index e4b5686fc5aa5b..28fef40b4c094e 100644 --- a/programs/address-lookup-table-tests/Cargo.toml +++ b/programs/address-lookup-table-tests/Cargo.toml @@ -3,7 +3,7 @@ [package] name = "solana-address-lookup-table-program-tests" -version = "1.14.7" +version = "1.14.8" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" @@ -14,9 +14,9 @@ publish = false [dev-dependencies] assert_matches = "1.5.0" bincode = "1.3.3" -solana-address-lookup-table-program = { path = "../address-lookup-table", version = "=1.14.7" } -solana-program-test = { path = "../../program-test", version = "=1.14.7" } -solana-sdk = { path = "../../sdk", version = "=1.14.7" } +solana-address-lookup-table-program = { path = "../address-lookup-table", version = "=1.14.8" } +solana-program-test = { path = "../../program-test", version = "=1.14.8" } +solana-sdk = { path = "../../sdk", version = "=1.14.8" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/address-lookup-table/Cargo.toml b/programs/address-lookup-table/Cargo.toml index 47d0a32502d080..bdea1077f30403 100644 --- a/programs/address-lookup-table/Cargo.toml +++ b/programs/address-lookup-table/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-address-lookup-table-program" -version = "1.14.7" +version = "1.14.8" description = "Solana address lookup table program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -16,14 +16,14 @@ log = "0.4.17" num-derive = "0.3" num-traits = "0.2" serde = { version = "1.0.138", features = ["derive"] } -solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.7" } -solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.7" } -solana-program = { path = "../../sdk/program", version = "=1.14.7" } +solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.8" } +solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.8" } +solana-program = { path = "../../sdk/program", version = "=1.14.8" } thiserror = "1.0" [target.'cfg(not(target_os = "solana"))'.dependencies] -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.7" } -solana-sdk = { path = "../../sdk", version = "=1.14.7" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.8" } +solana-sdk = { path = "../../sdk", version = "=1.14.8" } [build-dependencies] rustc_version = "0.4" diff --git a/programs/bpf-loader-tests/Cargo.toml b/programs/bpf-loader-tests/Cargo.toml index b238caf34a9a93..d24712cc40c4c2 100644 --- a/programs/bpf-loader-tests/Cargo.toml +++ b/programs/bpf-loader-tests/Cargo.toml @@ -3,7 +3,7 @@ [package] name = "solana-bpf-loader-program-tests" -version = "1.14.7" +version = "1.14.8" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" @@ -14,9 +14,9 @@ publish = false [dev-dependencies] assert_matches = "1.5.0" bincode = "1.3.3" -solana-bpf-loader-program = { path = "../bpf_loader", version = "=1.14.7" } -solana-program-test = { path = "../../program-test", version = "=1.14.7" } -solana-sdk = { path = "../../sdk", version = "=1.14.7" } +solana-bpf-loader-program = { path = "../bpf_loader", version = "=1.14.8" } +solana-program-test = { path = "../../program-test", version = "=1.14.8" } +solana-sdk = { path = "../../sdk", version = "=1.14.8" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/bpf/Cargo.lock b/programs/bpf/Cargo.lock index b743f5523574b8..bb90331d93c1c9 100644 --- a/programs/bpf/Cargo.lock +++ b/programs/bpf/Cargo.lock @@ -4063,7 +4063,7 @@ dependencies = [ [[package]] name = "solana-account-decoder" -version = "1.14.7" +version = "1.14.8" dependencies = [ "Inflector", "base64 0.13.0", @@ -4076,7 +4076,7 @@ dependencies = [ "serde_json", "solana-address-lookup-table-program", "solana-config-program", - "solana-sdk 1.14.7", + "solana-sdk 1.14.8", "solana-vote-program", "spl-token", "spl-token-2022", @@ -4086,7 +4086,7 @@ dependencies = [ [[package]] name = "solana-address-lookup-table-program" -version = "1.14.7" +version = "1.14.8" dependencies = [ "bincode", "bytemuck", @@ -4095,23 +4095,23 @@ dependencies = [ "num-traits", "rustc_version", "serde", - "solana-frozen-abi 1.14.7", - "solana-frozen-abi-macro 1.14.7", - "solana-program 1.14.7", + "solana-frozen-abi 1.14.8", + "solana-frozen-abi-macro 1.14.8", + "solana-program 1.14.8", "solana-program-runtime", - "solana-sdk 1.14.7", + "solana-sdk 1.14.8", "thiserror", ] [[package]] name = "solana-banks-client" -version = "1.14.7" +version = "1.14.8" dependencies = [ "borsh", "futures 0.3.21", "solana-banks-interface", - "solana-program 1.14.7", - "solana-sdk 1.14.7", + "solana-program 1.14.8", + "solana-sdk 1.14.8", "tarpc", "thiserror", "tokio", @@ -4120,16 +4120,16 @@ dependencies = [ [[package]] name = "solana-banks-interface" -version = "1.14.7" +version = "1.14.8" dependencies = [ "serde", - "solana-sdk 1.14.7", + "solana-sdk 1.14.8", "tarpc", ] [[package]] name = "solana-banks-server" -version = "1.14.7" +version = "1.14.8" dependencies = [ "bincode", "crossbeam-channel", @@ -4137,7 +4137,7 @@ dependencies = [ "solana-banks-interface", "solana-client", "solana-runtime", - "solana-sdk 1.14.7", + "solana-sdk 1.14.8", "solana-send-transaction-service", "tarpc", "tokio", @@ -4147,7 +4147,7 @@ dependencies = [ [[package]] name = "solana-bloom" -version = "1.14.7" +version = "1.14.8" dependencies = [ "bv", "fnv", @@ -4157,14 +4157,14 @@ dependencies = [ "rustc_version", "serde", "serde_derive", - "solana-frozen-abi 1.14.7", - "solana-frozen-abi-macro 1.14.7", - "solana-sdk 1.14.7", + "solana-frozen-abi 1.14.8", + "solana-frozen-abi-macro 1.14.8", + "solana-sdk 1.14.8", ] [[package]] name = "solana-bpf-loader-program" -version = "1.14.7" +version = "1.14.8" dependencies = [ "bincode", "byteorder 1.4.3", @@ -4173,15 +4173,15 @@ dependencies = [ "solana-measure", "solana-metrics", "solana-program-runtime", - "solana-sdk 1.14.7", - "solana-zk-token-sdk 1.14.7", + "solana-sdk 1.14.8", + "solana-zk-token-sdk 1.14.8", "solana_rbpf", "thiserror", ] [[package]] name = "solana-bpf-programs" -version = "1.14.7" +version = "1.14.8" dependencies = [ "bincode", "byteorder 1.4.3", @@ -4197,11 +4197,11 @@ dependencies = [ "solana-bpf-rust-realloc-invoke", "solana-cli-output", "solana-ledger", - "solana-logger 1.14.7", + "solana-logger 1.14.8", "solana-measure", "solana-program-runtime", "solana-runtime", - "solana-sdk 1.14.7", + "solana-sdk 1.14.8", "solana-transaction-status", "solana_rbpf", "walkdir", @@ -4209,385 +4209,385 @@ dependencies = [ [[package]] name = "solana-bpf-rust-128bit" -version = "1.14.7" +version = "1.14.8" dependencies = [ "solana-bpf-rust-128bit-dep", - "solana-program 1.14.7", + "solana-program 1.14.8", ] [[package]] name = "solana-bpf-rust-128bit-dep" -version = "1.14.7" +version = "1.14.8" dependencies = [ - "solana-program 1.14.7", + "solana-program 1.14.8", ] [[package]] name = "solana-bpf-rust-alloc" -version = "1.14.7" +version = "1.14.8" dependencies = [ - "solana-program 1.14.7", + "solana-program 1.14.8", ] [[package]] name = "solana-bpf-rust-call-depth" -version = "1.14.7" +version = "1.14.8" dependencies = [ - "solana-program 1.14.7", + "solana-program 1.14.8", ] [[package]] name = "solana-bpf-rust-caller-access" -version = "1.14.7" +version = "1.14.8" dependencies = [ - "solana-program 1.14.7", + "solana-program 1.14.8", ] [[package]] name = "solana-bpf-rust-curve25519" -version = "1.14.7" +version = "1.14.8" dependencies = [ - "solana-program 1.14.7", - "solana-zk-token-sdk 1.14.7", + "solana-program 1.14.8", + "solana-zk-token-sdk 1.14.8", ] [[package]] name = "solana-bpf-rust-custom-heap" -version = "1.14.7" +version = "1.14.8" dependencies = [ - "solana-program 1.14.7", + "solana-program 1.14.8", ] [[package]] name = "solana-bpf-rust-dep-crate" -version = "1.14.7" +version = "1.14.8" dependencies = [ "byteorder 1.4.3", "solana-address-lookup-table-program", - "solana-program 1.14.7", + "solana-program 1.14.8", ] [[package]] name = "solana-bpf-rust-deprecated-loader" -version = "1.14.7" +version = "1.14.8" dependencies = [ - "solana-program 1.14.7", + "solana-program 1.14.8", ] [[package]] name = "solana-bpf-rust-dup-accounts" -version = "1.14.7" +version = "1.14.8" dependencies = [ - "solana-program 1.14.7", + "solana-program 1.14.8", ] [[package]] name = "solana-bpf-rust-error-handling" -version = "1.14.7" +version = "1.14.8" dependencies = [ "num-derive", "num-traits", - "solana-program 1.14.7", + "solana-program 1.14.8", "thiserror", ] [[package]] name = "solana-bpf-rust-external-spend" -version = "1.14.7" +version = "1.14.8" dependencies = [ - "solana-program 1.14.7", + "solana-program 1.14.8", ] [[package]] name = "solana-bpf-rust-finalize" -version = "1.14.7" +version = "1.14.8" dependencies = [ - "solana-program 1.14.7", + "solana-program 1.14.8", ] [[package]] name = "solana-bpf-rust-get-minimum-delegation" -version = "1.14.7" +version = "1.14.8" dependencies = [ - "solana-program 1.14.7", + "solana-program 1.14.8", ] [[package]] name = "solana-bpf-rust-inner_instruction_alignment_check" -version = "1.14.7" +version = "1.14.8" dependencies = [ - "solana-program 1.14.7", + "solana-program 1.14.8", ] [[package]] name = "solana-bpf-rust-instruction-introspection" -version = "1.14.7" +version = "1.14.8" dependencies = [ - "solana-program 1.14.7", + "solana-program 1.14.8", ] [[package]] name = "solana-bpf-rust-invoke" -version = "1.14.7" +version = "1.14.8" dependencies = [ "solana-bpf-rust-invoked", - "solana-program 1.14.7", + "solana-program 1.14.8", ] [[package]] name = "solana-bpf-rust-invoke-and-error" -version = "1.14.7" +version = "1.14.8" dependencies = [ - "solana-program 1.14.7", + "solana-program 1.14.8", ] [[package]] name = "solana-bpf-rust-invoke-and-ok" -version = "1.14.7" +version = "1.14.8" dependencies = [ - "solana-program 1.14.7", + "solana-program 1.14.8", ] [[package]] name = "solana-bpf-rust-invoke-and-return" -version = "1.14.7" +version = "1.14.8" dependencies = [ - "solana-program 1.14.7", + "solana-program 1.14.8", ] [[package]] name = "solana-bpf-rust-invoked" -version = "1.14.7" +version = "1.14.8" dependencies = [ - "solana-program 1.14.7", + "solana-program 1.14.8", ] [[package]] name = "solana-bpf-rust-iter" -version = "1.14.7" +version = "1.14.8" dependencies = [ - "solana-program 1.14.7", + "solana-program 1.14.8", ] [[package]] name = "solana-bpf-rust-log-data" -version = "1.14.7" +version = "1.14.8" dependencies = [ - "solana-program 1.14.7", + "solana-program 1.14.8", ] [[package]] name = "solana-bpf-rust-many-args" -version = "1.14.7" +version = "1.14.8" dependencies = [ "solana-bpf-rust-many-args-dep", - "solana-program 1.14.7", + "solana-program 1.14.8", ] [[package]] name = "solana-bpf-rust-many-args-dep" -version = "1.14.7" +version = "1.14.8" dependencies = [ - "solana-program 1.14.7", + "solana-program 1.14.8", ] [[package]] name = "solana-bpf-rust-mem" -version = "1.14.7" +version = "1.14.8" dependencies = [ - "solana-program 1.14.7", + "solana-program 1.14.8", "solana-program-runtime", "solana-program-test", - "solana-sdk 1.14.7", + "solana-sdk 1.14.8", ] [[package]] name = "solana-bpf-rust-membuiltins" -version = "1.14.7" +version = "1.14.8" dependencies = [ "solana-bpf-rust-mem", - "solana-program 1.14.7", + "solana-program 1.14.8", ] [[package]] name = "solana-bpf-rust-noop" -version = "1.14.7" +version = "1.14.8" dependencies = [ - "solana-program 1.14.7", + "solana-program 1.14.8", ] [[package]] name = "solana-bpf-rust-panic" -version = "1.14.7" +version = "1.14.8" dependencies = [ - "solana-program 1.14.7", + "solana-program 1.14.8", ] [[package]] name = "solana-bpf-rust-param-passing" -version = "1.14.7" +version = "1.14.8" dependencies = [ "solana-bpf-rust-param-passing-dep", - "solana-program 1.14.7", + "solana-program 1.14.8", ] [[package]] name = "solana-bpf-rust-param-passing-dep" -version = "1.14.7" +version = "1.14.8" dependencies = [ - "solana-program 1.14.7", + "solana-program 1.14.8", ] [[package]] name = "solana-bpf-rust-rand" -version = "1.14.7" +version = "1.14.8" dependencies = [ "getrandom 0.1.14", "rand 0.7.3", - "solana-program 1.14.7", + "solana-program 1.14.8", ] [[package]] name = "solana-bpf-rust-realloc" -version = "1.14.7" +version = "1.14.8" dependencies = [ - "solana-program 1.14.7", + "solana-program 1.14.8", ] [[package]] name = "solana-bpf-rust-realloc-invoke" -version = "1.14.7" +version = "1.14.8" dependencies = [ "solana-bpf-rust-realloc", - "solana-program 1.14.7", + "solana-program 1.14.8", ] [[package]] name = "solana-bpf-rust-ro-account_modify" -version = "1.14.7" +version = "1.14.8" dependencies = [ - "solana-program 1.14.7", + "solana-program 1.14.8", ] [[package]] name = "solana-bpf-rust-ro-modify" -version = "1.14.7" +version = "1.14.8" dependencies = [ - "solana-program 1.14.7", + "solana-program 1.14.8", ] [[package]] name = "solana-bpf-rust-sanity" -version = "1.14.7" +version = "1.14.8" dependencies = [ - "solana-program 1.14.7", + "solana-program 1.14.8", "solana-program-runtime", "solana-program-test", - "solana-sdk 1.14.7", + "solana-sdk 1.14.8", ] [[package]] name = "solana-bpf-rust-secp256k1-recover" -version = "1.14.7" +version = "1.14.8" dependencies = [ "libsecp256k1 0.7.0", - "solana-program 1.14.7", + "solana-program 1.14.8", ] [[package]] name = "solana-bpf-rust-sha" -version = "1.14.7" +version = "1.14.8" dependencies = [ "blake3", - "solana-program 1.14.7", + "solana-program 1.14.8", ] [[package]] name = "solana-bpf-rust-sibling-instructions" -version = "1.14.7" +version = "1.14.8" dependencies = [ - "solana-program 1.14.7", + "solana-program 1.14.8", ] [[package]] name = "solana-bpf-rust-sibling_inner-instructions" -version = "1.14.7" +version = "1.14.8" dependencies = [ - "solana-program 1.14.7", + "solana-program 1.14.8", ] [[package]] name = "solana-bpf-rust-simulation" -version = "1.14.7" +version = "1.14.8" dependencies = [ - "solana-logger 1.14.7", - "solana-program 1.14.7", + "solana-logger 1.14.8", + "solana-program 1.14.8", "solana-program-test", - "solana-sdk 1.14.7", + "solana-sdk 1.14.8", "solana-validator", ] [[package]] name = "solana-bpf-rust-spoof1" -version = "1.14.7" +version = "1.14.8" dependencies = [ - "solana-program 1.14.7", + "solana-program 1.14.8", ] [[package]] name = "solana-bpf-rust-spoof1-system" -version = "1.14.7" +version = "1.14.8" dependencies = [ - "solana-program 1.14.7", + "solana-program 1.14.8", ] [[package]] name = "solana-bpf-rust-sysvar" -version = "1.14.7" +version = "1.14.8" dependencies = [ - "solana-program 1.14.7", + "solana-program 1.14.8", "solana-program-runtime", "solana-program-test", - "solana-sdk 1.14.7", + "solana-sdk 1.14.8", ] [[package]] name = "solana-bpf-rust-upgradeable" -version = "1.14.7" +version = "1.14.8" dependencies = [ - "solana-program 1.14.7", + "solana-program 1.14.8", ] [[package]] name = "solana-bpf-rust-upgraded" -version = "1.14.7" +version = "1.14.8" dependencies = [ - "solana-program 1.14.7", + "solana-program 1.14.8", ] [[package]] name = "solana-bucket-map" -version = "1.14.7" +version = "1.14.8" dependencies = [ "log", "memmap2", "modular-bitfield", "rand 0.7.3", "solana-measure", - "solana-sdk 1.14.7", + "solana-sdk 1.14.8", "tempfile", ] [[package]] name = "solana-clap-utils" -version = "1.14.7" +version = "1.14.8" dependencies = [ "chrono", "clap 2.33.3", "rpassword", "solana-perf", "solana-remote-wallet", - "solana-sdk 1.14.7", + "solana-sdk 1.14.8", "thiserror", "tiny-bip39", "uriparse", @@ -4596,7 +4596,7 @@ dependencies = [ [[package]] name = "solana-cli-config" -version = "1.14.7" +version = "1.14.8" dependencies = [ "dirs-next", "lazy_static", @@ -4604,13 +4604,13 @@ dependencies = [ "serde_derive", "serde_yaml", "solana-clap-utils", - "solana-sdk 1.14.7", + "solana-sdk 1.14.8", "url 2.2.2", ] [[package]] name = "solana-cli-output" -version = "1.14.7" +version = "1.14.8" dependencies = [ "Inflector", "base64 0.13.0", @@ -4627,7 +4627,7 @@ dependencies = [ "solana-clap-utils", "solana-cli-config", "solana-client", - "solana-sdk 1.14.7", + "solana-sdk 1.14.8", "solana-transaction-status", "solana-vote-program", "spl-memo", @@ -4635,7 +4635,7 @@ dependencies = [ [[package]] name = "solana-client" -version = "1.14.7" +version = "1.14.8" dependencies = [ "async-mutex", "async-trait", @@ -4671,7 +4671,7 @@ dependencies = [ "solana-measure", "solana-metrics", "solana-net-utils", - "solana-sdk 1.14.7", + "solana-sdk 1.14.8", "solana-streamer", "solana-transaction-status", "solana-version", @@ -4687,27 +4687,27 @@ dependencies = [ [[package]] name = "solana-compute-budget-program" -version = "1.14.7" +version = "1.14.8" dependencies = [ "solana-program-runtime", - "solana-sdk 1.14.7", + "solana-sdk 1.14.8", ] [[package]] name = "solana-config-program" -version = "1.14.7" +version = "1.14.8" dependencies = [ "bincode", "chrono", "serde", "serde_derive", "solana-program-runtime", - "solana-sdk 1.14.7", + "solana-sdk 1.14.8", ] [[package]] name = "solana-core" -version = "1.14.7" +version = "1.14.8" dependencies = [ "ahash", "base64 0.13.0", @@ -4736,8 +4736,8 @@ dependencies = [ "solana-bloom", "solana-client", "solana-entry", - "solana-frozen-abi 1.14.7", - "solana-frozen-abi-macro 1.14.7", + "solana-frozen-abi 1.14.8", + "solana-frozen-abi-macro 1.14.8", "solana-geyser-plugin-manager", "solana-gossip", "solana-ledger", @@ -4750,7 +4750,7 @@ dependencies = [ "solana-rayon-threadlimit", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.7", + "solana-sdk 1.14.8", "solana-send-transaction-service", "solana-streamer", "solana-transaction-status", @@ -4766,19 +4766,19 @@ dependencies = [ [[package]] name = "solana-download-utils" -version = "1.14.7" +version = "1.14.8" dependencies = [ "console", "indicatif", "log", "reqwest", "solana-runtime", - "solana-sdk 1.14.7", + "solana-sdk 1.14.8", ] [[package]] name = "solana-entry" -version = "1.14.7" +version = "1.14.8" dependencies = [ "bincode", "crossbeam-channel", @@ -4794,12 +4794,12 @@ dependencies = [ "solana-metrics", "solana-perf", "solana-rayon-threadlimit", - "solana-sdk 1.14.7", + "solana-sdk 1.14.8", ] [[package]] name = "solana-faucet" -version = "1.14.7" +version = "1.14.8" dependencies = [ "bincode", "byteorder 1.4.3", @@ -4810,9 +4810,9 @@ dependencies = [ "serde_derive", "solana-clap-utils", "solana-cli-config", - "solana-logger 1.14.7", + "solana-logger 1.14.8", "solana-metrics", - "solana-sdk 1.14.7", + "solana-sdk 1.14.8", "solana-version", "spl-memo", "thiserror", @@ -4843,7 +4843,7 @@ dependencies = [ [[package]] name = "solana-frozen-abi" -version = "1.14.7" +version = "1.14.8" dependencies = [ "ahash", "blake3", @@ -4868,7 +4868,7 @@ dependencies = [ "serde_derive", "serde_json", "sha2 0.10.2", - "solana-frozen-abi-macro 1.14.7", + "solana-frozen-abi-macro 1.14.8", "subtle", "thiserror", ] @@ -4887,7 +4887,7 @@ dependencies = [ [[package]] name = "solana-frozen-abi-macro" -version = "1.14.7" +version = "1.14.8" dependencies = [ "proc-macro2 1.0.41", "quote 1.0.18", @@ -4897,26 +4897,26 @@ dependencies = [ [[package]] name = "solana-genesis-utils" -version = "1.14.7" +version = "1.14.8" dependencies = [ "solana-download-utils", "solana-runtime", - "solana-sdk 1.14.7", + "solana-sdk 1.14.8", ] [[package]] name = "solana-geyser-plugin-interface" -version = "1.14.7" +version = "1.14.8" dependencies = [ "log", - "solana-sdk 1.14.7", + "solana-sdk 1.14.8", "solana-transaction-status", "thiserror", ] [[package]] name = "solana-geyser-plugin-manager" -version = "1.14.7" +version = "1.14.8" dependencies = [ "bs58", "crossbeam-channel", @@ -4929,14 +4929,14 @@ dependencies = [ "solana-metrics", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.7", + "solana-sdk 1.14.8", "solana-transaction-status", "thiserror", ] [[package]] name = "solana-gossip" -version = "1.14.7" +version = "1.14.8" dependencies = [ "bincode", "bv", @@ -4960,17 +4960,17 @@ dependencies = [ "solana-clap-utils", "solana-client", "solana-entry", - "solana-frozen-abi 1.14.7", - "solana-frozen-abi-macro 1.14.7", + "solana-frozen-abi 1.14.8", + "solana-frozen-abi-macro 1.14.8", "solana-ledger", - "solana-logger 1.14.7", + "solana-logger 1.14.8", "solana-measure", "solana-metrics", "solana-net-utils", "solana-perf", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.14.7", + "solana-sdk 1.14.8", "solana-streamer", "solana-version", "solana-vote-program", @@ -4979,7 +4979,7 @@ dependencies = [ [[package]] name = "solana-ledger" -version = "1.14.7" +version = "1.14.8" dependencies = [ "assert_matches", "bincode", @@ -5011,15 +5011,15 @@ dependencies = [ "solana-account-decoder", "solana-bpf-loader-program", "solana-entry", - "solana-frozen-abi 1.14.7", - "solana-frozen-abi-macro 1.14.7", + "solana-frozen-abi 1.14.8", + "solana-frozen-abi-macro 1.14.8", "solana-measure", "solana-metrics", "solana-perf", "solana-program-runtime", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.14.7", + "solana-sdk 1.14.8", "solana-stake-program", "solana-storage-bigtable", "solana-storage-proto", @@ -5048,7 +5048,7 @@ dependencies = [ [[package]] name = "solana-logger" -version = "1.14.7" +version = "1.14.8" dependencies = [ "env_logger", "lazy_static", @@ -5057,36 +5057,36 @@ dependencies = [ [[package]] name = "solana-measure" -version = "1.14.7" +version = "1.14.8" dependencies = [ "log", - "solana-sdk 1.14.7", + "solana-sdk 1.14.8", ] [[package]] name = "solana-merkle-tree" -version = "1.14.7" +version = "1.14.8" dependencies = [ "fast-math", "matches", - "solana-program 1.14.7", + "solana-program 1.14.8", ] [[package]] name = "solana-metrics" -version = "1.14.7" +version = "1.14.8" dependencies = [ "crossbeam-channel", "gethostname", "lazy_static", "log", "reqwest", - "solana-sdk 1.14.7", + "solana-sdk 1.14.8", ] [[package]] name = "solana-net-utils" -version = "1.14.7" +version = "1.14.8" dependencies = [ "bincode", "clap 3.1.6", @@ -5097,8 +5097,8 @@ dependencies = [ "serde", "serde_derive", "socket2", - "solana-logger 1.14.7", - "solana-sdk 1.14.7", + "solana-logger 1.14.8", + "solana-sdk 1.14.8", "solana-version", "tokio", "url 2.2.2", @@ -5106,7 +5106,7 @@ dependencies = [ [[package]] name = "solana-perf" -version = "1.14.7" +version = "1.14.8" dependencies = [ "ahash", "bincode", @@ -5125,13 +5125,13 @@ dependencies = [ "serde", "solana-metrics", "solana-rayon-threadlimit", - "solana-sdk 1.14.7", + "solana-sdk 1.14.8", "solana-vote-program", ] [[package]] name = "solana-poh" -version = "1.14.7" +version = "1.14.8" dependencies = [ "core_affinity", "crossbeam-channel", @@ -5141,7 +5141,7 @@ dependencies = [ "solana-measure", "solana-metrics", "solana-runtime", - "solana-sdk 1.14.7", + "solana-sdk 1.14.8", "solana-sys-tuner", "thiserror", ] @@ -5190,7 +5190,7 @@ dependencies = [ [[package]] name = "solana-program" -version = "1.14.7" +version = "1.14.8" dependencies = [ "base64 0.13.0", "bincode", @@ -5226,9 +5226,9 @@ dependencies = [ "serde_json", "sha2 0.10.2", "sha3 0.10.1", - "solana-frozen-abi 1.14.7", - "solana-frozen-abi-macro 1.14.7", - "solana-sdk-macro 1.14.7", + "solana-frozen-abi 1.14.8", + "solana-frozen-abi-macro 1.14.8", + "solana-sdk-macro 1.14.8", "thiserror", "tiny-bip39", "wasm-bindgen", @@ -5237,7 +5237,7 @@ dependencies = [ [[package]] name = "solana-program-runtime" -version = "1.14.7" +version = "1.14.8" dependencies = [ "base64 0.13.0", "bincode", @@ -5252,17 +5252,17 @@ dependencies = [ "rand 0.7.3", "rustc_version", "serde", - "solana-frozen-abi 1.14.7", - "solana-frozen-abi-macro 1.14.7", + "solana-frozen-abi 1.14.8", + "solana-frozen-abi-macro 1.14.8", "solana-measure", "solana-metrics", - "solana-sdk 1.14.7", + "solana-sdk 1.14.8", "thiserror", ] [[package]] name = "solana-program-test" -version = "1.14.7" +version = "1.14.8" dependencies = [ "assert_matches", "async-trait", @@ -5274,10 +5274,10 @@ dependencies = [ "solana-banks-client", "solana-banks-server", "solana-bpf-loader-program", - "solana-logger 1.14.7", + "solana-logger 1.14.8", "solana-program-runtime", "solana-runtime", - "solana-sdk 1.14.7", + "solana-sdk 1.14.8", "solana-vote-program", "thiserror", "tokio", @@ -5285,7 +5285,7 @@ dependencies = [ [[package]] name = "solana-rayon-threadlimit" -version = "1.14.7" +version = "1.14.8" dependencies = [ "lazy_static", "num_cpus", @@ -5293,7 +5293,7 @@ dependencies = [ [[package]] name = "solana-remote-wallet" -version = "1.14.7" +version = "1.14.8" dependencies = [ "console", "dialoguer", @@ -5303,14 +5303,14 @@ dependencies = [ "parking_lot 0.12.1", "qstring", "semver", - "solana-sdk 1.14.7", + "solana-sdk 1.14.8", "thiserror", "uriparse", ] [[package]] name = "solana-rpc" -version = "1.14.7" +version = "1.14.8" dependencies = [ "base64 0.13.0", "bincode", @@ -5343,7 +5343,7 @@ dependencies = [ "solana-poh", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.14.7", + "solana-sdk 1.14.8", "solana-send-transaction-service", "solana-stake-program", "solana-storage-bigtable", @@ -5361,7 +5361,7 @@ dependencies = [ [[package]] name = "solana-runtime" -version = "1.14.7" +version = "1.14.8" dependencies = [ "arrayref", "bincode", @@ -5397,17 +5397,17 @@ dependencies = [ "solana-bucket-map", "solana-compute-budget-program", "solana-config-program", - "solana-frozen-abi 1.14.7", - "solana-frozen-abi-macro 1.14.7", + "solana-frozen-abi 1.14.8", + "solana-frozen-abi-macro 1.14.8", "solana-measure", "solana-metrics", "solana-program-runtime", "solana-rayon-threadlimit", - "solana-sdk 1.14.7", + "solana-sdk 1.14.8", "solana-stake-program", "solana-vote-program", "solana-zk-token-proof-program", - "solana-zk-token-sdk 1.14.7", + "solana-zk-token-sdk 1.14.8", "strum", "strum_macros", "symlink", @@ -5470,7 +5470,7 @@ dependencies = [ [[package]] name = "solana-sdk" -version = "1.14.7" +version = "1.14.8" dependencies = [ "assert_matches", "base64 0.13.0", @@ -5507,11 +5507,11 @@ dependencies = [ "serde_json", "sha2 0.10.2", "sha3 0.10.1", - "solana-frozen-abi 1.14.7", - "solana-frozen-abi-macro 1.14.7", - "solana-logger 1.14.7", - "solana-program 1.14.7", - "solana-sdk-macro 1.14.7", + "solana-frozen-abi 1.14.8", + "solana-frozen-abi-macro 1.14.8", + "solana-logger 1.14.8", + "solana-program 1.14.8", + "solana-sdk-macro 1.14.8", "thiserror", "uriparse", "wasm-bindgen", @@ -5532,7 +5532,7 @@ dependencies = [ [[package]] name = "solana-sdk-macro" -version = "1.14.7" +version = "1.14.8" dependencies = [ "bs58", "proc-macro2 1.0.41", @@ -5543,7 +5543,7 @@ dependencies = [ [[package]] name = "solana-send-transaction-service" -version = "1.14.7" +version = "1.14.8" dependencies = [ "crossbeam-channel", "log", @@ -5551,12 +5551,12 @@ dependencies = [ "solana-measure", "solana-metrics", "solana-runtime", - "solana-sdk 1.14.7", + "solana-sdk 1.14.8", ] [[package]] name = "solana-stake-program" -version = "1.14.7" +version = "1.14.8" dependencies = [ "bincode", "log", @@ -5566,18 +5566,18 @@ dependencies = [ "serde", "serde_derive", "solana-config-program", - "solana-frozen-abi 1.14.7", - "solana-frozen-abi-macro 1.14.7", + "solana-frozen-abi 1.14.8", + "solana-frozen-abi-macro 1.14.8", "solana-metrics", "solana-program-runtime", - "solana-sdk 1.14.7", + "solana-sdk 1.14.8", "solana-vote-program", "thiserror", ] [[package]] name = "solana-storage-bigtable" -version = "1.14.7" +version = "1.14.8" dependencies = [ "backoff", "bincode", @@ -5598,7 +5598,7 @@ dependencies = [ "serde_derive", "smpl_jwt", "solana-metrics", - "solana-sdk 1.14.7", + "solana-sdk 1.14.8", "solana-storage-proto", "solana-transaction-status", "thiserror", @@ -5609,7 +5609,7 @@ dependencies = [ [[package]] name = "solana-storage-proto" -version = "1.14.7" +version = "1.14.8" dependencies = [ "bincode", "bs58", @@ -5617,14 +5617,14 @@ dependencies = [ "protobuf-src", "serde", "solana-account-decoder", - "solana-sdk 1.14.7", + "solana-sdk 1.14.8", "solana-transaction-status", "tonic-build 0.8.0", ] [[package]] name = "solana-streamer" -version = "1.14.7" +version = "1.14.8" dependencies = [ "crossbeam-channel", "futures-util", @@ -5643,7 +5643,7 @@ dependencies = [ "rustls 0.20.6", "solana-metrics", "solana-perf", - "solana-sdk 1.14.7", + "solana-sdk 1.14.8", "thiserror", "tokio", "x509-parser", @@ -5651,13 +5651,13 @@ dependencies = [ [[package]] name = "solana-sys-tuner" -version = "1.14.7" +version = "1.14.8" dependencies = [ "clap 2.33.3", "libc", "log", "nix", - "solana-logger 1.14.7", + "solana-logger 1.14.8", "solana-version", "sysctl", "unix_socket2", @@ -5666,7 +5666,7 @@ dependencies = [ [[package]] name = "solana-test-validator" -version = "1.14.7" +version = "1.14.8" dependencies = [ "base64 0.13.0", "log", @@ -5677,20 +5677,20 @@ dependencies = [ "solana-core", "solana-gossip", "solana-ledger", - "solana-logger 1.14.7", + "solana-logger 1.14.8", "solana-net-utils", "solana-program-runtime", "solana-program-test", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.7", + "solana-sdk 1.14.8", "solana-streamer", "tokio", ] [[package]] name = "solana-transaction-status" -version = "1.14.7" +version = "1.14.8" dependencies = [ "Inflector", "base64 0.13.0", @@ -5706,7 +5706,7 @@ dependencies = [ "solana-address-lookup-table-program", "solana-measure", "solana-metrics", - "solana-sdk 1.14.7", + "solana-sdk 1.14.8", "solana-vote-program", "spl-associated-token-account", "spl-memo", @@ -5717,7 +5717,7 @@ dependencies = [ [[package]] name = "solana-validator" -version = "1.14.7" +version = "1.14.8" dependencies = [ "chrono", "clap 2.33.3", @@ -5748,14 +5748,14 @@ dependencies = [ "solana-genesis-utils", "solana-gossip", "solana-ledger", - "solana-logger 1.14.7", + "solana-logger 1.14.8", "solana-metrics", "solana-net-utils", "solana-perf", "solana-poh", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.7", + "solana-sdk 1.14.8", "solana-send-transaction-service", "solana-storage-bigtable", "solana-streamer", @@ -5768,21 +5768,21 @@ dependencies = [ [[package]] name = "solana-version" -version = "1.14.7" +version = "1.14.8" dependencies = [ "log", "rustc_version", "semver", "serde", "serde_derive", - "solana-frozen-abi 1.14.7", - "solana-frozen-abi-macro 1.14.7", - "solana-sdk 1.14.7", + "solana-frozen-abi 1.14.8", + "solana-frozen-abi-macro 1.14.8", + "solana-sdk 1.14.8", ] [[package]] name = "solana-vote-program" -version = "1.14.7" +version = "1.14.8" dependencies = [ "bincode", "log", @@ -5791,25 +5791,25 @@ dependencies = [ "rustc_version", "serde", "serde_derive", - "solana-frozen-abi 1.14.7", - "solana-frozen-abi-macro 1.14.7", + "solana-frozen-abi 1.14.8", + "solana-frozen-abi-macro 1.14.8", "solana-metrics", "solana-program-runtime", - "solana-sdk 1.14.7", + "solana-sdk 1.14.8", "thiserror", ] [[package]] name = "solana-zk-token-proof-program" -version = "1.14.7" +version = "1.14.8" dependencies = [ "bytemuck", "getrandom 0.1.14", "num-derive", "num-traits", "solana-program-runtime", - "solana-sdk 1.14.7", - "solana-zk-token-sdk 1.14.7", + "solana-sdk 1.14.8", + "solana-zk-token-sdk 1.14.8", ] [[package]] @@ -5844,7 +5844,7 @@ dependencies = [ [[package]] name = "solana-zk-token-sdk" -version = "1.14.7" +version = "1.14.8" dependencies = [ "aes-gcm-siv", "arrayref", @@ -5864,8 +5864,8 @@ dependencies = [ "serde", "serde_json", "sha3 0.9.1", - "solana-program 1.14.7", - "solana-sdk 1.14.7", + "solana-program 1.14.8", + "solana-sdk 1.14.8", "subtle", "thiserror", "zeroize", diff --git a/programs/bpf/Cargo.toml b/programs/bpf/Cargo.toml index 497664b521d828..9837f76f687250 100644 --- a/programs/bpf/Cargo.toml +++ b/programs/bpf/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "solana-bpf-programs" description = "Blockchain, Rebuilt for Scale" -version = "1.14.7" +version = "1.14.8" documentation = "https://docs.rs/solana" homepage = "https://solana.com/" readme = "README.md" @@ -26,22 +26,22 @@ itertools = "0.10.1" log = "0.4.11" miow = "0.3.6" net2 = "0.2.37" -solana-account-decoder = { path = "../../account-decoder", version = "=1.14.7" } -solana-bpf-loader-program = { path = "../bpf_loader", version = "=1.14.7" } -solana-bpf-rust-invoke = { path = "rust/invoke", version = "=1.14.7" } -solana-bpf-rust-realloc = { path = "rust/realloc", version = "=1.14.7" } -solana-bpf-rust-realloc-invoke = { path = "rust/realloc_invoke", version = "=1.14.7" } -solana-cli-output = { path = "../../cli-output", version = "=1.14.7" } -solana-logger = { path = "../../logger", version = "=1.14.7" } -solana-measure = { path = "../../measure", version = "=1.14.7" } -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.7" } -solana-runtime = { path = "../../runtime", version = "=1.14.7" } -solana-sdk = { path = "../../sdk", version = "=1.14.7" } -solana-transaction-status = { path = "../../transaction-status", version = "=1.14.7" } +solana-account-decoder = { path = "../../account-decoder", version = "=1.14.8" } +solana-bpf-loader-program = { path = "../bpf_loader", version = "=1.14.8" } +solana-bpf-rust-invoke = { path = "rust/invoke", version = "=1.14.8" } +solana-bpf-rust-realloc = { path = "rust/realloc", version = "=1.14.8" } +solana-bpf-rust-realloc-invoke = { path = "rust/realloc_invoke", version = "=1.14.8" } +solana-cli-output = { path = "../../cli-output", version = "=1.14.8" } +solana-logger = { path = "../../logger", version = "=1.14.8" } +solana-measure = { path = "../../measure", version = "=1.14.8" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.8" } +solana-runtime = { path = "../../runtime", version = "=1.14.8" } +solana-sdk = { path = "../../sdk", version = "=1.14.8" } +solana-transaction-status = { path = "../../transaction-status", version = "=1.14.8" } solana_rbpf = "=0.2.31" [dev-dependencies] -solana-ledger = { path = "../../ledger", version = "=1.14.7" } +solana-ledger = { path = "../../ledger", version = "=1.14.8" } [[bench]] name = "bpf_loader" diff --git a/programs/bpf/rust/128bit/Cargo.toml b/programs/bpf/rust/128bit/Cargo.toml index 03fbdf5ec31883..01bcba96d81a2d 100644 --- a/programs/bpf/rust/128bit/Cargo.toml +++ b/programs/bpf/rust/128bit/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-128bit" -version = "1.14.7" +version = "1.14.8" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ documentation = "https://docs.rs/solana-bpf-rust-128bit" edition = "2021" [dependencies] -solana-bpf-rust-128bit-dep = { path = "../128bit_dep", version = "=1.14.7" } -solana-program = { path = "../../../../sdk/program", version = "=1.14.7" } +solana-bpf-rust-128bit-dep = { path = "../128bit_dep", version = "=1.14.8" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.8" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/128bit_dep/Cargo.toml b/programs/bpf/rust/128bit_dep/Cargo.toml index 2dd07bf529b3da..9ab7a0bfc101ad 100644 --- a/programs/bpf/rust/128bit_dep/Cargo.toml +++ b/programs/bpf/rust/128bit_dep/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-128bit-dep" -version = "1.14.7" +version = "1.14.8" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-128bit-dep" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.7" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.8" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/bpf/rust/alloc/Cargo.toml b/programs/bpf/rust/alloc/Cargo.toml index b4f1aa74eaf2e3..a673bd9e5af8c2 100644 --- a/programs/bpf/rust/alloc/Cargo.toml +++ b/programs/bpf/rust/alloc/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-alloc" -version = "1.14.7" +version = "1.14.8" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-alloc" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.7" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.8" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/call_depth/Cargo.toml b/programs/bpf/rust/call_depth/Cargo.toml index 2e46e3190ae2c3..fb11f0127cb2e0 100644 --- a/programs/bpf/rust/call_depth/Cargo.toml +++ b/programs/bpf/rust/call_depth/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-call-depth" -version = "1.14.7" +version = "1.14.8" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-call-depth" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.7" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.8" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/caller_access/Cargo.toml b/programs/bpf/rust/caller_access/Cargo.toml index ee9e9ebdd21071..6f514d33bd62ce 100644 --- a/programs/bpf/rust/caller_access/Cargo.toml +++ b/programs/bpf/rust/caller_access/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-caller-access" -version = "1.14.7" +version = "1.14.8" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-caller-access" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.7" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.8" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/curve25519/Cargo.toml b/programs/bpf/rust/curve25519/Cargo.toml index d2bec324d9c159..537c3c39111548 100644 --- a/programs/bpf/rust/curve25519/Cargo.toml +++ b/programs/bpf/rust/curve25519/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-curve25519" -version = "1.14.7" +version = "1.14.8" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ documentation = "https://docs.rs/solana-bpf-rust-zktoken_crypto" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.7" } -solana-zk-token-sdk = { path = "../../../../zk-token-sdk", version = "=1.14.7" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.8" } +solana-zk-token-sdk = { path = "../../../../zk-token-sdk", version = "=1.14.8" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/custom_heap/Cargo.toml b/programs/bpf/rust/custom_heap/Cargo.toml index 8ecd9d6b5c9037..c79eb18776c81a 100644 --- a/programs/bpf/rust/custom_heap/Cargo.toml +++ b/programs/bpf/rust/custom_heap/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-custom-heap" -version = "1.14.7" +version = "1.14.8" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-custom-heap" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.7" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.8" } [features] default = ["custom-heap"] diff --git a/programs/bpf/rust/dep_crate/Cargo.toml b/programs/bpf/rust/dep_crate/Cargo.toml index bb18bd40aeb25e..63b5e39f2c061f 100644 --- a/programs/bpf/rust/dep_crate/Cargo.toml +++ b/programs/bpf/rust/dep_crate/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-dep-crate" -version = "1.14.7" +version = "1.14.8" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,8 +12,8 @@ edition = "2021" [dependencies] byteorder = { version = "1", default-features = false } # list of crates which must be buildable for bpf programs -solana-address-lookup-table-program = { path = "../../../../programs/address-lookup-table", version = "=1.14.7" } -solana-program = { path = "../../../../sdk/program", version = "=1.14.7" } +solana-address-lookup-table-program = { path = "../../../../programs/address-lookup-table", version = "=1.14.8" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.8" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/deprecated_loader/Cargo.toml b/programs/bpf/rust/deprecated_loader/Cargo.toml index a2e20ee55c3aad..a46a4c96e3ef0b 100644 --- a/programs/bpf/rust/deprecated_loader/Cargo.toml +++ b/programs/bpf/rust/deprecated_loader/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-deprecated-loader" -version = "1.14.7" +version = "1.14.8" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-deprecated-loader" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.7" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.8" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/dup_accounts/Cargo.toml b/programs/bpf/rust/dup_accounts/Cargo.toml index 64fbfe7935c80d..fd9033378d9a12 100644 --- a/programs/bpf/rust/dup_accounts/Cargo.toml +++ b/programs/bpf/rust/dup_accounts/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-dup-accounts" -version = "1.14.7" +version = "1.14.8" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-dup-accounts" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.7" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.8" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/error_handling/Cargo.toml b/programs/bpf/rust/error_handling/Cargo.toml index 71807d8a35cd78..15e514cff049ab 100644 --- a/programs/bpf/rust/error_handling/Cargo.toml +++ b/programs/bpf/rust/error_handling/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-error-handling" -version = "1.14.7" +version = "1.14.8" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,7 +12,7 @@ edition = "2021" [dependencies] num-derive = "0.3" num-traits = "0.2" -solana-program = { path = "../../../../sdk/program", version = "=1.14.7" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.8" } thiserror = "1.0" [lib] diff --git a/programs/bpf/rust/external_spend/Cargo.toml b/programs/bpf/rust/external_spend/Cargo.toml index de1267e144738b..414c74fe1fcc68 100644 --- a/programs/bpf/rust/external_spend/Cargo.toml +++ b/programs/bpf/rust/external_spend/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-external-spend" -version = "1.14.7" +version = "1.14.8" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-external-spend" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.7" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.8" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/finalize/Cargo.toml b/programs/bpf/rust/finalize/Cargo.toml index 3f288ad9fa2de2..5dd4b8c61401fa 100644 --- a/programs/bpf/rust/finalize/Cargo.toml +++ b/programs/bpf/rust/finalize/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-finalize" -version = "1.14.7" +version = "1.14.8" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-finalize" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.7" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.8" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/get_minimum_delegation/Cargo.toml b/programs/bpf/rust/get_minimum_delegation/Cargo.toml index c0a4b8767871bc..2d71ca72f4b1d3 100644 --- a/programs/bpf/rust/get_minimum_delegation/Cargo.toml +++ b/programs/bpf/rust/get_minimum_delegation/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-get-minimum-delegation" -version = "1.14.7" +version = "1.14.8" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-get-minimum-delegation" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.7" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.8" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/inner_instruction_alignment_check/Cargo.toml b/programs/bpf/rust/inner_instruction_alignment_check/Cargo.toml index e228b735691924..ca45bb2f5cf513 100644 --- a/programs/bpf/rust/inner_instruction_alignment_check/Cargo.toml +++ b/programs/bpf/rust/inner_instruction_alignment_check/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-inner_instruction_alignment_check" -version = "1.14.7" +version = "1.14.8" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-inner_instruction_alignment_che edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.7" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.8" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/instruction_introspection/Cargo.toml b/programs/bpf/rust/instruction_introspection/Cargo.toml index 81cf32b381ad90..9ffe01371f8efe 100644 --- a/programs/bpf/rust/instruction_introspection/Cargo.toml +++ b/programs/bpf/rust/instruction_introspection/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-instruction-introspection" -version = "1.14.7" +version = "1.14.8" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-instruction-introspection" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.7" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.8" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/invoke/Cargo.toml b/programs/bpf/rust/invoke/Cargo.toml index 1613b64e18d029..4b605e4d61ad9e 100644 --- a/programs/bpf/rust/invoke/Cargo.toml +++ b/programs/bpf/rust/invoke/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-invoke" -version = "1.14.7" +version = "1.14.8" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -15,7 +15,7 @@ program = [] [dependencies] solana-bpf-rust-invoked = { path = "../invoked", default-features = false } -solana-program = { path = "../../../../sdk/program", version = "=1.14.7" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.8" } [lib] crate-type = ["lib", "cdylib"] diff --git a/programs/bpf/rust/invoke_and_error/Cargo.toml b/programs/bpf/rust/invoke_and_error/Cargo.toml index 32dab2c5dcd0f2..9b71aa987ce48b 100644 --- a/programs/bpf/rust/invoke_and_error/Cargo.toml +++ b/programs/bpf/rust/invoke_and_error/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-invoke-and-error" -version = "1.14.7" +version = "1.14.8" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-invoke-and-error" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.7" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.8" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/invoke_and_ok/Cargo.toml b/programs/bpf/rust/invoke_and_ok/Cargo.toml index eea68a4d1e4b13..1e1b751aa9dd7b 100644 --- a/programs/bpf/rust/invoke_and_ok/Cargo.toml +++ b/programs/bpf/rust/invoke_and_ok/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-invoke-and-ok" -version = "1.14.7" +version = "1.14.8" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-invoke-and-ok" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.7" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.8" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/invoke_and_return/Cargo.toml b/programs/bpf/rust/invoke_and_return/Cargo.toml index 2c53107ec871d5..3d8e2510abc86c 100644 --- a/programs/bpf/rust/invoke_and_return/Cargo.toml +++ b/programs/bpf/rust/invoke_and_return/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-invoke-and-return" -version = "1.14.7" +version = "1.14.8" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-invoke-and-return" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.7" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.8" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/invoked/Cargo.toml b/programs/bpf/rust/invoked/Cargo.toml index 339cbae98e8219..fb156014222e58 100644 --- a/programs/bpf/rust/invoked/Cargo.toml +++ b/programs/bpf/rust/invoked/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-invoked" -version = "1.14.7" +version = "1.14.8" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,7 +14,7 @@ default = ["program"] program = [] [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.7" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.8" } [lib] crate-type = ["lib", "cdylib"] diff --git a/programs/bpf/rust/iter/Cargo.toml b/programs/bpf/rust/iter/Cargo.toml index 1fdbd137146e68..90fac0ce9dd244 100644 --- a/programs/bpf/rust/iter/Cargo.toml +++ b/programs/bpf/rust/iter/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-iter" -version = "1.14.7" +version = "1.14.8" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-iter" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.7" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.8" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/log_data/Cargo.toml b/programs/bpf/rust/log_data/Cargo.toml index 6b8dca49129c1a..52f04bc5985e88 100644 --- a/programs/bpf/rust/log_data/Cargo.toml +++ b/programs/bpf/rust/log_data/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-log-data" -version = "1.14.7" +version = "1.14.8" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-log-data" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.7" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.8" } [features] default = ["program"] diff --git a/programs/bpf/rust/many_args/Cargo.toml b/programs/bpf/rust/many_args/Cargo.toml index 933dbdf99413f1..ea4f4ae7598519 100644 --- a/programs/bpf/rust/many_args/Cargo.toml +++ b/programs/bpf/rust/many_args/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-many-args" -version = "1.14.7" +version = "1.14.8" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ documentation = "https://docs.rs/solana-bpf-rust-many-args" edition = "2021" [dependencies] -solana-bpf-rust-many-args-dep = { path = "../many_args_dep", version = "=1.14.7" } -solana-program = { path = "../../../../sdk/program", version = "=1.14.7" } +solana-bpf-rust-many-args-dep = { path = "../many_args_dep", version = "=1.14.8" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.8" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/many_args_dep/Cargo.toml b/programs/bpf/rust/many_args_dep/Cargo.toml index 4c689240826da9..8d09f87035d597 100644 --- a/programs/bpf/rust/many_args_dep/Cargo.toml +++ b/programs/bpf/rust/many_args_dep/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-many-args-dep" -version = "1.14.7" +version = "1.14.8" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-many-args-dep" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.7" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.8" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/bpf/rust/mem/Cargo.toml b/programs/bpf/rust/mem/Cargo.toml index 884e3b1fe43ec0..2c4656a281da96 100644 --- a/programs/bpf/rust/mem/Cargo.toml +++ b/programs/bpf/rust/mem/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-mem" -version = "1.14.7" +version = "1.14.8" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,12 +13,12 @@ edition = "2021" no-entrypoint = [] [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.7" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.8" } [dev-dependencies] -solana-program-runtime = { path = "../../../../program-runtime", version = "=1.14.7" } -solana-program-test = { path = "../../../../program-test", version = "=1.14.7" } -solana-sdk = { path = "../../../../sdk", version = "=1.14.7" } +solana-program-runtime = { path = "../../../../program-runtime", version = "=1.14.8" } +solana-program-test = { path = "../../../../program-test", version = "=1.14.8" } +solana-sdk = { path = "../../../../sdk", version = "=1.14.8" } [lib] crate-type = ["cdylib", "lib"] diff --git a/programs/bpf/rust/membuiltins/Cargo.toml b/programs/bpf/rust/membuiltins/Cargo.toml index 6a9f3b322c4a55..d95a0e0b78d896 100644 --- a/programs/bpf/rust/membuiltins/Cargo.toml +++ b/programs/bpf/rust/membuiltins/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-membuiltins" -version = "1.14.7" +version = "1.14.8" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ documentation = "https://docs.rs/solana-bpf-rust-mem" edition = "2021" [dependencies] -solana-bpf-rust-mem = { path = "../mem", version = "=1.14.7", features = [ "no-entrypoint" ] } -solana-program = { path = "../../../../sdk/program", version = "=1.14.7" } +solana-bpf-rust-mem = { path = "../mem", version = "=1.14.8", features = [ "no-entrypoint" ] } +solana-program = { path = "../../../../sdk/program", version = "=1.14.8" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/noop/Cargo.toml b/programs/bpf/rust/noop/Cargo.toml index 1f00ecfc282d80..0f1fadfd60e5a6 100644 --- a/programs/bpf/rust/noop/Cargo.toml +++ b/programs/bpf/rust/noop/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-noop" -version = "1.14.7" +version = "1.14.8" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-noop" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.7" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.8" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/panic/Cargo.toml b/programs/bpf/rust/panic/Cargo.toml index d530a181da10f9..ff9a9f889067a4 100644 --- a/programs/bpf/rust/panic/Cargo.toml +++ b/programs/bpf/rust/panic/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-panic" -version = "1.14.7" +version = "1.14.8" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-panic" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.7" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.8" } [features] default = ["custom-panic"] diff --git a/programs/bpf/rust/param_passing/Cargo.toml b/programs/bpf/rust/param_passing/Cargo.toml index 40df527820096f..0851fde6ba6691 100644 --- a/programs/bpf/rust/param_passing/Cargo.toml +++ b/programs/bpf/rust/param_passing/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-param-passing" -version = "1.14.7" +version = "1.14.8" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ documentation = "https://docs.rs/solana-bpf-rust-param-passing" edition = "2021" [dependencies] -solana-bpf-rust-param-passing-dep = { path = "../param_passing_dep", version = "=1.14.7" } -solana-program = { path = "../../../../sdk/program", version = "=1.14.7" } +solana-bpf-rust-param-passing-dep = { path = "../param_passing_dep", version = "=1.14.8" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.8" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/param_passing_dep/Cargo.toml b/programs/bpf/rust/param_passing_dep/Cargo.toml index e3a48e71798166..c8f58c2236a961 100644 --- a/programs/bpf/rust/param_passing_dep/Cargo.toml +++ b/programs/bpf/rust/param_passing_dep/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-param-passing-dep" -version = "1.14.7" +version = "1.14.8" description = "Solana BPF program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-param-passing-dep" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.7" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.8" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/bpf/rust/rand/Cargo.toml b/programs/bpf/rust/rand/Cargo.toml index 3acc5f3885753a..1a0889b48d53ce 100644 --- a/programs/bpf/rust/rand/Cargo.toml +++ b/programs/bpf/rust/rand/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-rand" -version = "1.14.7" +version = "1.14.8" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,7 +12,7 @@ edition = "2021" [dependencies] getrandom = { version = "0.1.14", features = ["dummy"] } rand = "0.7" -solana-program = { path = "../../../../sdk/program", version = "=1.14.7" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.8" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/realloc/Cargo.toml b/programs/bpf/rust/realloc/Cargo.toml index 7ef6423e040acf..cffd43d0c4cb9d 100644 --- a/programs/bpf/rust/realloc/Cargo.toml +++ b/programs/bpf/rust/realloc/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-realloc" -version = "1.14.7" +version = "1.14.8" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,7 +14,7 @@ default = ["program"] program = [] [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.7" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.8" } [lib] crate-type = ["lib", "cdylib"] diff --git a/programs/bpf/rust/realloc_invoke/Cargo.toml b/programs/bpf/rust/realloc_invoke/Cargo.toml index 369ddc04b6d316..9180769b46f885 100644 --- a/programs/bpf/rust/realloc_invoke/Cargo.toml +++ b/programs/bpf/rust/realloc_invoke/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-realloc-invoke" -version = "1.14.7" +version = "1.14.8" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,8 +14,8 @@ default = ["program"] program = [] [dependencies] -solana-bpf-rust-realloc = { path = "../realloc", version = "=1.14.7", default-features = false } -solana-program = { path = "../../../../sdk/program", version = "=1.14.7" } +solana-bpf-rust-realloc = { path = "../realloc", version = "=1.14.8", default-features = false } +solana-program = { path = "../../../../sdk/program", version = "=1.14.8" } [lib] crate-type = ["lib", "cdylib"] diff --git a/programs/bpf/rust/ro_account_modify/Cargo.toml b/programs/bpf/rust/ro_account_modify/Cargo.toml index 7afba9db785946..63adf785f3cdc1 100644 --- a/programs/bpf/rust/ro_account_modify/Cargo.toml +++ b/programs/bpf/rust/ro_account_modify/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-ro-account_modify" -version = "1.14.7" +version = "1.14.8" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-ro-modify" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.7" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.8" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/ro_modify/Cargo.toml b/programs/bpf/rust/ro_modify/Cargo.toml index ea6a9793a3246f..8a6d9efb50d89a 100644 --- a/programs/bpf/rust/ro_modify/Cargo.toml +++ b/programs/bpf/rust/ro_modify/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-ro-modify" -version = "1.14.7" +version = "1.14.8" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-ro-modify" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.7" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.8" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/sanity/Cargo.toml b/programs/bpf/rust/sanity/Cargo.toml index 28355425a52dfa..1404629d3da6c6 100644 --- a/programs/bpf/rust/sanity/Cargo.toml +++ b/programs/bpf/rust/sanity/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-sanity" -version = "1.14.7" +version = "1.14.8" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,12 +13,12 @@ edition = "2021" test-bpf = [] [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.7" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.8" } [dev-dependencies] -solana-program-runtime = { path = "../../../../program-runtime", version = "=1.14.7" } -solana-program-test = { path = "../../../../program-test", version = "=1.14.7" } -solana-sdk = { path = "../../../../sdk", version = "=1.14.7" } +solana-program-runtime = { path = "../../../../program-runtime", version = "=1.14.8" } +solana-program-test = { path = "../../../../program-test", version = "=1.14.8" } +solana-sdk = { path = "../../../../sdk", version = "=1.14.8" } [lib] crate-type = ["cdylib", "lib"] diff --git a/programs/bpf/rust/secp256k1_recover/Cargo.toml b/programs/bpf/rust/secp256k1_recover/Cargo.toml index 632ad2b3a6b896..d91d9db32b6aea 100644 --- a/programs/bpf/rust/secp256k1_recover/Cargo.toml +++ b/programs/bpf/rust/secp256k1_recover/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-secp256k1-recover" -version = "1.14.7" +version = "1.14.8" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -11,7 +11,7 @@ edition = "2021" [dependencies] libsecp256k1 = { version = "0.7.0", default-features = false } -solana-program = { path = "../../../../sdk/program", version = "=1.14.7" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.8" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/sha/Cargo.toml b/programs/bpf/rust/sha/Cargo.toml index 1bf6d2a38b4b8d..c1b618bb2ed7ff 100644 --- a/programs/bpf/rust/sha/Cargo.toml +++ b/programs/bpf/rust/sha/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-sha" -version = "1.14.7" +version = "1.14.8" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -11,7 +11,7 @@ edition = "2021" [dependencies] blake3 = "1.0.0" -solana-program = { path = "../../../../sdk/program", version = "=1.14.7" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.8" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/sibling_inner_instruction/Cargo.toml b/programs/bpf/rust/sibling_inner_instruction/Cargo.toml index 795ffc505ad0a6..045c280743a97f 100644 --- a/programs/bpf/rust/sibling_inner_instruction/Cargo.toml +++ b/programs/bpf/rust/sibling_inner_instruction/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-sibling_inner-instructions" -version = "1.14.7" +version = "1.14.8" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-log-data" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.7" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.8" } [features] default = ["program"] diff --git a/programs/bpf/rust/sibling_instruction/Cargo.toml b/programs/bpf/rust/sibling_instruction/Cargo.toml index b0897c7622d9db..be69bb0b690ca1 100644 --- a/programs/bpf/rust/sibling_instruction/Cargo.toml +++ b/programs/bpf/rust/sibling_instruction/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-sibling-instructions" -version = "1.14.7" +version = "1.14.8" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-log-data" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.7" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.8" } [features] default = ["program"] diff --git a/programs/bpf/rust/simulation/Cargo.toml b/programs/bpf/rust/simulation/Cargo.toml index 6c2c63993b6977..78e251af35b5e9 100644 --- a/programs/bpf/rust/simulation/Cargo.toml +++ b/programs/bpf/rust/simulation/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-simulation" -version = "1.14.7" +version = "1.14.8" description = "Solana BPF Program Simulation Differences" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,13 +13,13 @@ edition = "2021" test-bpf = [] [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.7" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.8" } [dev-dependencies] -solana-logger = { path = "../../../../logger", version = "=1.14.7" } -solana-program-test = { path = "../../../../program-test", version = "=1.14.7" } -solana-sdk = { path = "../../../../sdk", version = "=1.14.7" } -solana-validator = { path = "../../../../validator", version = "=1.14.7" } +solana-logger = { path = "../../../../logger", version = "=1.14.8" } +solana-program-test = { path = "../../../../program-test", version = "=1.14.8" } +solana-sdk = { path = "../../../../sdk", version = "=1.14.8" } +solana-validator = { path = "../../../../validator", version = "=1.14.8" } [lib] crate-type = ["cdylib", "lib"] diff --git a/programs/bpf/rust/spoof1/Cargo.toml b/programs/bpf/rust/spoof1/Cargo.toml index 9ad8355d37b67d..f2152aebf75e1e 100644 --- a/programs/bpf/rust/spoof1/Cargo.toml +++ b/programs/bpf/rust/spoof1/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-spoof1" -version = "1.14.7" +version = "1.14.8" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-spoof1" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.7" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.8" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/spoof1_system/Cargo.toml b/programs/bpf/rust/spoof1_system/Cargo.toml index 7b64598de9c1ee..7e38508987445e 100644 --- a/programs/bpf/rust/spoof1_system/Cargo.toml +++ b/programs/bpf/rust/spoof1_system/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-spoof1-system" -version = "1.14.7" +version = "1.14.8" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-spoof1-system" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.7" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.8" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/sysvar/Cargo.toml b/programs/bpf/rust/sysvar/Cargo.toml index e55f5619e6d830..7fc888722561f3 100644 --- a/programs/bpf/rust/sysvar/Cargo.toml +++ b/programs/bpf/rust/sysvar/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-sysvar" -version = "1.14.7" +version = "1.14.8" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,12 +10,12 @@ documentation = "https://docs.rs/solana-bpf-rust-sysvar" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.7" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.8" } [dev-dependencies] -solana-program-runtime = { path = "../../../../program-runtime", version = "=1.14.7" } -solana-program-test = { path = "../../../../program-test", version = "=1.14.7" } -solana-sdk = { path = "../../../../sdk", version = "=1.14.7" } +solana-program-runtime = { path = "../../../../program-runtime", version = "=1.14.8" } +solana-program-test = { path = "../../../../program-test", version = "=1.14.8" } +solana-sdk = { path = "../../../../sdk", version = "=1.14.8" } [lib] crate-type = ["cdylib", "lib"] diff --git a/programs/bpf/rust/upgradeable/Cargo.toml b/programs/bpf/rust/upgradeable/Cargo.toml index 1e59efcbb04ef6..2b7538fcf2907a 100644 --- a/programs/bpf/rust/upgradeable/Cargo.toml +++ b/programs/bpf/rust/upgradeable/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-upgradeable" -version = "1.14.7" +version = "1.14.8" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-upgradeable" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.7" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.8" } [lib] name = "solana_bpf_rust_upgradeable" diff --git a/programs/bpf/rust/upgraded/Cargo.toml b/programs/bpf/rust/upgraded/Cargo.toml index c275a7a32319b3..db32c053cacdf2 100644 --- a/programs/bpf/rust/upgraded/Cargo.toml +++ b/programs/bpf/rust/upgraded/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-upgraded" -version = "1.14.7" +version = "1.14.8" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-upgraded" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.7" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.8" } [lib] name = "solana_bpf_rust_upgraded" diff --git a/programs/bpf_loader/Cargo.toml b/programs/bpf_loader/Cargo.toml index 52be440435836f..c6d925d9ef0e8b 100644 --- a/programs/bpf_loader/Cargo.toml +++ b/programs/bpf_loader/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-loader-program" -version = "1.14.7" +version = "1.14.8" description = "Solana BPF loader" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,17 +14,17 @@ bincode = "1.3.3" byteorder = "1.4.3" libsecp256k1 = "0.6.0" log = "0.4.17" -solana-measure = { path = "../../measure", version = "=1.14.7" } -solana-metrics = { path = "../../metrics", version = "=1.14.7" } -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.7" } -solana-sdk = { path = "../../sdk", version = "=1.14.7" } -solana-zk-token-sdk = { path = "../../zk-token-sdk", version = "=1.14.7" } +solana-measure = { path = "../../measure", version = "=1.14.8" } +solana-metrics = { path = "../../metrics", version = "=1.14.8" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.8" } +solana-sdk = { path = "../../sdk", version = "=1.14.8" } +solana-zk-token-sdk = { path = "../../zk-token-sdk", version = "=1.14.8" } solana_rbpf = "=0.2.31" thiserror = "1.0" [dev-dependencies] rand = "0.7.3" -solana-runtime = { path = "../../runtime", version = "=1.14.7" } +solana-runtime = { path = "../../runtime", version = "=1.14.8" } [lib] crate-type = ["lib"] diff --git a/programs/bpf_loader/gen-syscall-list/Cargo.toml b/programs/bpf_loader/gen-syscall-list/Cargo.toml index 1dfd64d03447ce..aa0aeb17e90e67 100644 --- a/programs/bpf_loader/gen-syscall-list/Cargo.toml +++ b/programs/bpf_loader/gen-syscall-list/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "gen-syscall-list" -version = "1.14.7" +version = "1.14.8" edition = "2021" license = "Apache-2.0" publish = false diff --git a/programs/compute-budget/Cargo.toml b/programs/compute-budget/Cargo.toml index 3aee7c30b5e608..f184adbadf7e45 100644 --- a/programs/compute-budget/Cargo.toml +++ b/programs/compute-budget/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "solana-compute-budget-program" description = "Solana Compute Budget program" -version = "1.14.7" +version = "1.14.8" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-compute-budget-program" repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ license = "Apache-2.0" edition = "2021" [dependencies] -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.7" } -solana-sdk = { path = "../../sdk", version = "=1.14.7" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.8" } +solana-sdk = { path = "../../sdk", version = "=1.14.8" } [lib] crate-type = ["lib"] diff --git a/programs/config/Cargo.toml b/programs/config/Cargo.toml index 62e95b28ec668f..799db6f807029c 100644 --- a/programs/config/Cargo.toml +++ b/programs/config/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-config-program" -version = "1.14.7" +version = "1.14.8" description = "Solana Config program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,11 +14,11 @@ bincode = "1.3.3" chrono = { version = "0.4.11", features = ["serde"] } serde = "1.0.138" serde_derive = "1.0.103" -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.7" } -solana-sdk = { path = "../../sdk", version = "=1.14.7" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.8" } +solana-sdk = { path = "../../sdk", version = "=1.14.8" } [dev-dependencies] -solana-logger = { path = "../../logger", version = "=1.14.7" } +solana-logger = { path = "../../logger", version = "=1.14.8" } [lib] crate-type = ["lib"] diff --git a/programs/ed25519-tests/Cargo.toml b/programs/ed25519-tests/Cargo.toml index a2808bfde62e6f..6fc316dfaddecf 100644 --- a/programs/ed25519-tests/Cargo.toml +++ b/programs/ed25519-tests/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-ed25519-program-tests" -version = "1.14.7" +version = "1.14.8" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" @@ -12,8 +12,8 @@ publish = false assert_matches = "1.5.0" ed25519-dalek = "=1.0.1" rand = "0.7.0" -solana-program-test = { path = "../../program-test", version = "=1.14.7" } -solana-sdk = { path = "../../sdk", version = "=1.14.7" } +solana-program-test = { path = "../../program-test", version = "=1.14.8" } +solana-sdk = { path = "../../sdk", version = "=1.14.8" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/stake/Cargo.toml b/programs/stake/Cargo.toml index 0381eaca1333a0..63361085c14f61 100644 --- a/programs/stake/Cargo.toml +++ b/programs/stake/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-stake-program" -version = "1.14.7" +version = "1.14.8" description = "Solana Stake program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -16,19 +16,19 @@ num-derive = "0.3" num-traits = "0.2" serde = "1.0.138" serde_derive = "1.0.103" -solana-config-program = { path = "../config", version = "=1.14.7" } -solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.7" } -solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.7" } -solana-metrics = { path = "../../metrics", version = "=1.14.7" } -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.7" } -solana-sdk = { path = "../../sdk", version = "=1.14.7" } -solana-vote-program = { path = "../vote", version = "=1.14.7" } +solana-config-program = { path = "../config", version = "=1.14.8" } +solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.8" } +solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.8" } +solana-metrics = { path = "../../metrics", version = "=1.14.8" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.8" } +solana-sdk = { path = "../../sdk", version = "=1.14.8" } +solana-vote-program = { path = "../vote", version = "=1.14.8" } thiserror = "1.0" [dev-dependencies] assert_matches = "1.5.0" proptest = "1.0" -solana-logger = { path = "../../logger", version = "=1.14.7" } +solana-logger = { path = "../../logger", version = "=1.14.8" } test-case = "2.1.0" [build-dependencies] diff --git a/programs/vote/Cargo.toml b/programs/vote/Cargo.toml index 332cc40a9c4782..0a38b8e19094ae 100644 --- a/programs/vote/Cargo.toml +++ b/programs/vote/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-vote-program" -version = "1.14.7" +version = "1.14.8" description = "Solana Vote program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -16,17 +16,17 @@ num-derive = "0.3" num-traits = "0.2" serde = "1.0.138" serde_derive = "1.0.103" -solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.7" } -solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.7" } -solana-metrics = { path = "../../metrics", version = "=1.14.7" } -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.7" } -solana-sdk = { path = "../../sdk", version = "=1.14.7" } +solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.8" } +solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.8" } +solana-metrics = { path = "../../metrics", version = "=1.14.8" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.8" } +solana-sdk = { path = "../../sdk", version = "=1.14.8" } thiserror = "1.0" [dev-dependencies] itertools = "0.10.3" rand = "0.7.0" -solana-logger = { path = "../../logger", version = "=1.14.7" } +solana-logger = { path = "../../logger", version = "=1.14.8" } [build-dependencies] rustc_version = "0.4" diff --git a/programs/zk-token-proof/Cargo.toml b/programs/zk-token-proof/Cargo.toml index ca815fbc0e691a..eb0144b7852bd6 100644 --- a/programs/zk-token-proof/Cargo.toml +++ b/programs/zk-token-proof/Cargo.toml @@ -3,7 +3,7 @@ name = "solana-zk-token-proof-program" description = "Solana Zk Token Proof Program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" -version = "1.14.7" +version = "1.14.8" license = "Apache-2.0" edition = "2021" @@ -12,6 +12,6 @@ bytemuck = { version = "1.11.0", features = ["derive"] } getrandom = { version = "0.1", features = ["dummy"] } num-derive = "0.3" num-traits = "0.2" -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.7" } -solana-sdk = { path = "../../sdk", version = "=1.14.7" } -solana-zk-token-sdk = { path = "../../zk-token-sdk", version = "=1.14.7" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.8" } +solana-sdk = { path = "../../sdk", version = "=1.14.8" } +solana-zk-token-sdk = { path = "../../zk-token-sdk", version = "=1.14.8" } diff --git a/rayon-threadlimit/Cargo.toml b/rayon-threadlimit/Cargo.toml index b1d15e497621ec..e57adebf1db1c2 100644 --- a/rayon-threadlimit/Cargo.toml +++ b/rayon-threadlimit/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-rayon-threadlimit" -version = "1.14.7" +version = "1.14.8" description = "solana-rayon-threadlimit" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-rayon-threadlimit" diff --git a/rbpf-cli/Cargo.toml b/rbpf-cli/Cargo.toml index fb41b1eb52f4b8..a9a7e2eb851fd1 100644 --- a/rbpf-cli/Cargo.toml +++ b/rbpf-cli/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "rbpf-cli" -version = "1.14.7" +version = "1.14.8" description = "CLI to test and analyze eBPF programs" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/rbpf" @@ -13,8 +13,8 @@ publish = false clap = { version = "3.1.5", features = ["cargo"] } serde = "1.0.138" serde_json = "1.0.81" -solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.7" } -solana-logger = { path = "../logger", version = "=1.14.7" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.7" } -solana-sdk = { path = "../sdk", version = "=1.14.7" } +solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.8" } +solana-logger = { path = "../logger", version = "=1.14.8" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.8" } +solana-sdk = { path = "../sdk", version = "=1.14.8" } solana_rbpf = "=0.2.31" diff --git a/remote-wallet/Cargo.toml b/remote-wallet/Cargo.toml index 327bc4df446fdc..c67ce5cdb41093 100644 --- a/remote-wallet/Cargo.toml +++ b/remote-wallet/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-remote-wallet" description = "Blockchain, Rebuilt for Scale" -version = "1.14.7" +version = "1.14.8" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -19,7 +19,7 @@ num-traits = { version = "0.2" } parking_lot = "0.12" qstring = "0.7.2" semver = "1.0" -solana-sdk = { path = "../sdk", version = "=1.14.7" } +solana-sdk = { path = "../sdk", version = "=1.14.8" } thiserror = "1.0" uriparse = "0.6.4" diff --git a/rpc-test/Cargo.toml b/rpc-test/Cargo.toml index 868d73babb2a67..154631cff54d0f 100644 --- a/rpc-test/Cargo.toml +++ b/rpc-test/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-rpc-test" -version = "1.14.7" +version = "1.14.8" description = "Solana RPC Test" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -19,17 +19,17 @@ log = "0.4.17" reqwest = { version = "0.11.11", default-features = false, features = ["blocking", "brotli", "deflate", "gzip", "rustls-tls", "json"] } serde = "1.0.138" serde_json = "1.0.81" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.7" } -solana-client = { path = "../client", version = "=1.14.7" } -solana-rpc = { path = "../rpc", version = "=1.14.7" } -solana-sdk = { path = "../sdk", version = "=1.14.7" } -solana-streamer = { path = "../streamer", version = "=1.14.7" } -solana-test-validator = { path = "../test-validator", version = "=1.14.7" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.7" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.8" } +solana-client = { path = "../client", version = "=1.14.8" } +solana-rpc = { path = "../rpc", version = "=1.14.8" } +solana-sdk = { path = "../sdk", version = "=1.14.8" } +solana-streamer = { path = "../streamer", version = "=1.14.8" } +solana-test-validator = { path = "../test-validator", version = "=1.14.8" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.8" } tokio = { version = "~1.14.1", features = ["full"] } [dev-dependencies] -solana-logger = { path = "../logger", version = "=1.14.7" } +solana-logger = { path = "../logger", version = "=1.14.8" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/rpc/Cargo.toml b/rpc/Cargo.toml index 5709a527f4b3e6..60c58378f09fce 100644 --- a/rpc/Cargo.toml +++ b/rpc/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-rpc" -version = "1.14.7" +version = "1.14.8" description = "Solana RPC" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -29,26 +29,26 @@ serde = "1.0.138" serde_derive = "1.0.103" serde_json = "1.0.81" soketto = "0.7" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.7" } -solana-client = { path = "../client", version = "=1.14.7" } -solana-entry = { path = "../entry", version = "=1.14.7" } -solana-faucet = { path = "../faucet", version = "=1.14.7" } -solana-gossip = { path = "../gossip", version = "=1.14.7" } -solana-ledger = { path = "../ledger", version = "=1.14.7" } -solana-measure = { path = "../measure", version = "=1.14.7" } -solana-metrics = { path = "../metrics", version = "=1.14.7" } -solana-perf = { path = "../perf", version = "=1.14.7" } -solana-poh = { path = "../poh", version = "=1.14.7" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.7" } -solana-runtime = { path = "../runtime", version = "=1.14.7" } -solana-sdk = { path = "../sdk", version = "=1.14.7" } -solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.7" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.7" } -solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.7" } -solana-streamer = { path = "../streamer", version = "=1.14.7" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.7" } -solana-version = { path = "../version", version = "=1.14.7" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.7" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.8" } +solana-client = { path = "../client", version = "=1.14.8" } +solana-entry = { path = "../entry", version = "=1.14.8" } +solana-faucet = { path = "../faucet", version = "=1.14.8" } +solana-gossip = { path = "../gossip", version = "=1.14.8" } +solana-ledger = { path = "../ledger", version = "=1.14.8" } +solana-measure = { path = "../measure", version = "=1.14.8" } +solana-metrics = { path = "../metrics", version = "=1.14.8" } +solana-perf = { path = "../perf", version = "=1.14.8" } +solana-poh = { path = "../poh", version = "=1.14.8" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.8" } +solana-runtime = { path = "../runtime", version = "=1.14.8" } +solana-sdk = { path = "../sdk", version = "=1.14.8" } +solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.8" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.8" } +solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.8" } +solana-streamer = { path = "../streamer", version = "=1.14.8" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.8" } +solana-version = { path = "../version", version = "=1.14.8" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.8" } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } spl-token-2022 = { version = "=0.4.2", features = ["no-entrypoint"] } stream-cancel = "0.8.1" @@ -58,9 +58,9 @@ tokio-util = { version = "0.6", features = ["codec", "compat"] } [dev-dependencies] serial_test = "0.8.0" -solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.7" } -solana-net-utils = { path = "../net-utils", version = "=1.14.7" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.7" } +solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.8" } +solana-net-utils = { path = "../net-utils", version = "=1.14.8" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.8" } symlink = "0.1.0" [lib] diff --git a/runtime/Cargo.toml b/runtime/Cargo.toml index 630d3593eece6e..7d642fddfc4234 100644 --- a/runtime/Cargo.toml +++ b/runtime/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-runtime" -version = "1.14.7" +version = "1.14.8" description = "Solana runtime" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -39,21 +39,21 @@ rayon = "1.5.3" regex = "1.5.6" serde = { version = "1.0.138", features = ["rc"] } serde_derive = "1.0.103" -solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.7" } -solana-bucket-map = { path = "../bucket_map", version = "=1.14.7" } -solana-compute-budget-program = { path = "../programs/compute-budget", version = "=1.14.7" } -solana-config-program = { path = "../programs/config", version = "=1.14.7" } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.7" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.7" } -solana-measure = { path = "../measure", version = "=1.14.7" } -solana-metrics = { path = "../metrics", version = "=1.14.7" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.7" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.7" } -solana-sdk = { path = "../sdk", version = "=1.14.7" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.7" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.7" } -solana-zk-token-proof-program = { path = "../programs/zk-token-proof", version = "=1.14.7" } -solana-zk-token-sdk = { path = "../zk-token-sdk", version = "=1.14.7" } +solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.8" } +solana-bucket-map = { path = "../bucket_map", version = "=1.14.8" } +solana-compute-budget-program = { path = "../programs/compute-budget", version = "=1.14.8" } +solana-config-program = { path = "../programs/config", version = "=1.14.8" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.8" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.8" } +solana-measure = { path = "../measure", version = "=1.14.8" } +solana-metrics = { path = "../metrics", version = "=1.14.8" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.8" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.8" } +solana-sdk = { path = "../sdk", version = "=1.14.8" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.8" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.8" } +solana-zk-token-proof-program = { path = "../programs/zk-token-proof", version = "=1.14.8" } +solana-zk-token-sdk = { path = "../zk-token-sdk", version = "=1.14.8" } strum = { version = "0.24", features = ["derive"] } strum_macros = "0.24" symlink = "0.1.0" @@ -71,7 +71,7 @@ assert_matches = "1.5.0" ed25519-dalek = "=1.0.1" libsecp256k1 = "0.6.0" rand_chacha = "0.2.2" -solana-logger = { path = "../logger", version = "=1.14.7" } +solana-logger = { path = "../logger", version = "=1.14.8" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/runtime/store-tool/Cargo.toml b/runtime/store-tool/Cargo.toml index dcc78e2a3a265b..29706258591144 100644 --- a/runtime/store-tool/Cargo.toml +++ b/runtime/store-tool/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-store-tool" description = "Tool to inspect append vecs" -version = "1.14.7" +version = "1.14.8" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -12,9 +12,9 @@ publish = false [dependencies] clap = "2.33.1" log = { version = "0.4.17" } -solana-logger = { path = "../../logger", version = "=1.14.7" } -solana-runtime = { path = "..", version = "=1.14.7" } -solana-version = { path = "../../version", version = "=1.14.7" } +solana-logger = { path = "../../logger", version = "=1.14.8" } +solana-runtime = { path = "..", version = "=1.14.8" } +solana-version = { path = "../../version", version = "=1.14.8" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/sdk/Cargo.toml b/sdk/Cargo.toml index a3c28e358c696a..53b66c85439940 100644 --- a/sdk/Cargo.toml +++ b/sdk/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-sdk" -version = "1.14.7" +version = "1.14.8" description = "Solana SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -71,11 +71,11 @@ serde_derive = "1.0.103" serde_json = { version = "1.0.81", optional = true } sha2 = "0.10.2" sha3 = { version = "0.10.1", optional = true } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.7" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.7" } -solana-logger = { path = "../logger", version = "=1.14.7", optional = true } -solana-program = { path = "program", version = "=1.14.7" } -solana-sdk-macro = { path = "macro", version = "=1.14.7" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.8" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.8" } +solana-logger = { path = "../logger", version = "=1.14.8", optional = true } +solana-program = { path = "program", version = "=1.14.8" } +solana-sdk-macro = { path = "macro", version = "=1.14.8" } thiserror = "1.0" uriparse = "0.6.4" wasm-bindgen = "0.2" diff --git a/sdk/cargo-build-bpf/Cargo.toml b/sdk/cargo-build-bpf/Cargo.toml index aa55a4cae9a279..75d38fb6099370 100644 --- a/sdk/cargo-build-bpf/Cargo.toml +++ b/sdk/cargo-build-bpf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-cargo-build-bpf" -version = "1.14.7" +version = "1.14.8" description = "Compile a local package and all of its dependencies using the Solana SBF SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,7 +12,7 @@ publish = false [dependencies] cargo_metadata = "0.15.0" clap = { version = "3.1.5", features = ["cargo", "env"] } -solana-sdk = { path = "..", version = "=1.14.7" } +solana-sdk = { path = "..", version = "=1.14.8" } [features] program = [] diff --git a/sdk/cargo-build-sbf/Cargo.toml b/sdk/cargo-build-sbf/Cargo.toml index c0e221558410c7..9c04a63deeb1b7 100644 --- a/sdk/cargo-build-sbf/Cargo.toml +++ b/sdk/cargo-build-sbf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-cargo-build-sbf" -version = "1.14.7" +version = "1.14.8" description = "Compile a local package and all of its dependencies using the Solana SBF SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -15,9 +15,9 @@ cargo_metadata = "0.15.0" clap = { version = "3.1.5", features = ["cargo", "env"] } log = { version = "0.4.14", features = ["std"] } regex = "1.5.6" -solana-download-utils = { path = "../../download-utils", version = "=1.14.7" } -solana-logger = { path = "../../logger", version = "=1.14.7" } -solana-sdk = { path = "..", version = "=1.14.7" } +solana-download-utils = { path = "../../download-utils", version = "=1.14.8" } +solana-logger = { path = "../../logger", version = "=1.14.8" } +solana-sdk = { path = "..", version = "=1.14.8" } tar = "0.4.38" [dev-dependencies] diff --git a/sdk/cargo-build-sbf/tests/crates/fail/Cargo.toml b/sdk/cargo-build-sbf/tests/crates/fail/Cargo.toml index 6406fe6bee9d0a..300e6e70326d23 100644 --- a/sdk/cargo-build-sbf/tests/crates/fail/Cargo.toml +++ b/sdk/cargo-build-sbf/tests/crates/fail/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "fail" -version = "1.14.7" +version = "1.14.8" description = "Solana SBF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ edition = "2021" publish = false [dependencies] -solana-program = { path = "../../../../program", version = "=1.14.7" } +solana-program = { path = "../../../../program", version = "=1.14.8" } [lib] crate-type = ["cdylib"] diff --git a/sdk/cargo-build-sbf/tests/crates/noop/Cargo.toml b/sdk/cargo-build-sbf/tests/crates/noop/Cargo.toml index 851bea040f1f3f..5efaf57d9fa080 100644 --- a/sdk/cargo-build-sbf/tests/crates/noop/Cargo.toml +++ b/sdk/cargo-build-sbf/tests/crates/noop/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "noop" -version = "1.14.7" +version = "1.14.8" description = "Solana SBF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ edition = "2021" publish = false [dependencies] -solana-program = { path = "../../../../program", version = "=1.14.7" } +solana-program = { path = "../../../../program", version = "=1.14.8" } [lib] crate-type = ["cdylib"] diff --git a/sdk/cargo-test-bpf/Cargo.toml b/sdk/cargo-test-bpf/Cargo.toml index 003f3c8bba0f7d..22da737b29832c 100644 --- a/sdk/cargo-test-bpf/Cargo.toml +++ b/sdk/cargo-test-bpf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-cargo-test-bpf" -version = "1.14.7" +version = "1.14.8" description = "Execute all unit and integration tests after building with the Solana SBF SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/sdk/cargo-test-sbf/Cargo.toml b/sdk/cargo-test-sbf/Cargo.toml index e0b7a938cd77c4..610d594ba5d4fb 100644 --- a/sdk/cargo-test-sbf/Cargo.toml +++ b/sdk/cargo-test-sbf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-cargo-test-sbf" -version = "1.14.7" +version = "1.14.8" description = "Execute all unit and integration tests after building with the Solana SBF SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/sdk/gen-headers/Cargo.toml b/sdk/gen-headers/Cargo.toml index c1423ecfaec654..26d44d8153b2a5 100644 --- a/sdk/gen-headers/Cargo.toml +++ b/sdk/gen-headers/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "gen-headers" -version = "1.14.7" +version = "1.14.8" edition = "2021" license = "Apache-2.0" publish = false diff --git a/sdk/macro/Cargo.toml b/sdk/macro/Cargo.toml index 39f49845254dcb..9e2cf88b053f51 100644 --- a/sdk/macro/Cargo.toml +++ b/sdk/macro/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-sdk-macro" -version = "1.14.7" +version = "1.14.8" description = "Solana SDK Macro" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/sdk/program/Cargo.toml b/sdk/program/Cargo.toml index d62272eaf88669..71326ddd80789c 100644 --- a/sdk/program/Cargo.toml +++ b/sdk/program/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-program" -version = "1.14.7" +version = "1.14.8" description = "Solana Program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -31,9 +31,9 @@ serde_derive = "1.0" serde_json = "1.0" sha2 = "0.10.0" sha3 = "0.10.0" -solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.7" } -solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.7" } -solana-sdk-macro = { path = "../macro", version = "=1.14.7" } +solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.8" } +solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.8" } +solana-sdk-macro = { path = "../macro", version = "=1.14.8" } thiserror = "1.0" [target.'cfg(not(target_os = "solana"))'.dependencies] @@ -50,7 +50,7 @@ wasm-bindgen = "0.2" zeroize = { version = "1.3", default-features = true, features = ["zeroize_derive"] } [target.'cfg(not(target_os = "solana"))'.dev-dependencies] -solana-logger = { path = "../../logger", version = "=1.14.7" } +solana-logger = { path = "../../logger", version = "=1.14.8" } [target.'cfg(target_arch = "wasm32")'.dependencies] console_error_panic_hook = "0.1.7" diff --git a/send-transaction-service/Cargo.toml b/send-transaction-service/Cargo.toml index 76b66099c10538..d551ecb8562a2a 100644 --- a/send-transaction-service/Cargo.toml +++ b/send-transaction-service/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-send-transaction-service" -version = "1.14.7" +version = "1.14.8" description = "Solana send transaction service" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,14 +12,14 @@ edition = "2021" [dependencies] crossbeam-channel = "0.5" log = "0.4.17" -solana-client = { path = "../client", version = "=1.14.7" } -solana-measure = { path = "../measure", version = "=1.14.7" } -solana-metrics = { path = "../metrics", version = "=1.14.7" } -solana-runtime = { path = "../runtime", version = "=1.14.7" } -solana-sdk = { path = "../sdk", version = "=1.14.7" } +solana-client = { path = "../client", version = "=1.14.8" } +solana-measure = { path = "../measure", version = "=1.14.8" } +solana-metrics = { path = "../metrics", version = "=1.14.8" } +solana-runtime = { path = "../runtime", version = "=1.14.8" } +solana-sdk = { path = "../sdk", version = "=1.14.8" } [dev-dependencies] -solana-logger = { path = "../logger", version = "=1.14.7" } +solana-logger = { path = "../logger", version = "=1.14.8" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/stake-accounts/Cargo.toml b/stake-accounts/Cargo.toml index c80f07b372978f..65a577af9ac8c3 100644 --- a/stake-accounts/Cargo.toml +++ b/stake-accounts/Cargo.toml @@ -3,7 +3,7 @@ name = "solana-stake-accounts" description = "Blockchain, Rebuilt for Scale" authors = ["Solana Maintainers "] edition = "2021" -version = "1.14.7" +version = "1.14.8" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -11,15 +11,15 @@ documentation = "https://docs.rs/solana-stake-accounts" [dependencies] clap = "2.33.1" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.7" } -solana-cli-config = { path = "../cli-config", version = "=1.14.7" } -solana-client = { path = "../client", version = "=1.14.7" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.7" } -solana-sdk = { path = "../sdk", version = "=1.14.7" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.7" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.8" } +solana-cli-config = { path = "../cli-config", version = "=1.14.8" } +solana-client = { path = "../client", version = "=1.14.8" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.8" } +solana-sdk = { path = "../sdk", version = "=1.14.8" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.8" } [dev-dependencies] -solana-runtime = { path = "../runtime", version = "=1.14.7" } +solana-runtime = { path = "../runtime", version = "=1.14.8" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/storage-bigtable/Cargo.toml b/storage-bigtable/Cargo.toml index 52ff4d807f58f6..9e73c90247e1df 100644 --- a/storage-bigtable/Cargo.toml +++ b/storage-bigtable/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-storage-bigtable" -version = "1.14.7" +version = "1.14.8" description = "Solana Storage BigTable" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -27,10 +27,10 @@ prost-types = "0.11.0" serde = "1.0.138" serde_derive = "1.0.103" smpl_jwt = "0.7.1" -solana-metrics = { path = "../metrics", version = "=1.14.7" } -solana-sdk = { path = "../sdk", version = "=1.14.7" } -solana-storage-proto = { path = "../storage-proto", version = "=1.14.7" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.7" } +solana-metrics = { path = "../metrics", version = "=1.14.8" } +solana-sdk = { path = "../sdk", version = "=1.14.8" } +solana-storage-proto = { path = "../storage-proto", version = "=1.14.8" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.8" } thiserror = "1.0" tokio = "1" tonic = { version = "0.8.0", features = ["tls", "transport"] } diff --git a/storage-bigtable/build-proto/Cargo.lock b/storage-bigtable/build-proto/Cargo.lock index a15e3d33d76249..3ae47d5158c675 100644 --- a/storage-bigtable/build-proto/Cargo.lock +++ b/storage-bigtable/build-proto/Cargo.lock @@ -219,7 +219,7 @@ dependencies = [ [[package]] name = "proto" -version = "1.14.7" +version = "1.14.8" dependencies = [ "protobuf-src", "tonic-build", diff --git a/storage-bigtable/build-proto/Cargo.toml b/storage-bigtable/build-proto/Cargo.toml index ac13557b429e6b..8627995232907a 100644 --- a/storage-bigtable/build-proto/Cargo.toml +++ b/storage-bigtable/build-proto/Cargo.toml @@ -7,7 +7,7 @@ license = "Apache-2.0" name = "proto" publish = false repository = "https://github.com/solana-labs/solana" -version = "1.14.7" +version = "1.14.8" [workspace] diff --git a/storage-proto/Cargo.toml b/storage-proto/Cargo.toml index 4036867cb4bfff..a7c0f4e7fc6773 100644 --- a/storage-proto/Cargo.toml +++ b/storage-proto/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-storage-proto" -version = "1.14.7" +version = "1.14.8" description = "Solana Storage Protobuf Definitions" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,9 +14,9 @@ bincode = "1.3.3" bs58 = "0.4.0" prost = "0.11.0" serde = "1.0.138" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.7" } -solana-sdk = { path = "../sdk", version = "=1.14.7" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.7" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.8" } +solana-sdk = { path = "../sdk", version = "=1.14.8" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.8" } [dev-dependencies] enum-iterator = "0.8.1" diff --git a/streamer/Cargo.toml b/streamer/Cargo.toml index 7d1d6337184ea9..c57ad5869b1aad 100644 --- a/streamer/Cargo.toml +++ b/streamer/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-streamer" -version = "1.14.7" +version = "1.14.8" description = "Solana Streamer" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -25,15 +25,15 @@ quinn = "0.8.3" rand = "0.7.0" rcgen = "0.9.2" rustls = { version = "0.20.6", features = ["dangerous_configuration"] } -solana-metrics = { path = "../metrics", version = "=1.14.7" } -solana-perf = { path = "../perf", version = "=1.14.7" } -solana-sdk = { path = "../sdk", version = "=1.14.7" } +solana-metrics = { path = "../metrics", version = "=1.14.8" } +solana-perf = { path = "../perf", version = "=1.14.8" } +solana-sdk = { path = "../sdk", version = "=1.14.8" } thiserror = "1.0" tokio = { version = "1", features = ["full"] } x509-parser = "0.14.0" [dev-dependencies] -solana-logger = { path = "../logger", version = "=1.14.7" } +solana-logger = { path = "../logger", version = "=1.14.8" } [lib] crate-type = ["lib"] diff --git a/sys-tuner/Cargo.toml b/sys-tuner/Cargo.toml index 60e693904d30be..6fe3cf872abcab 100644 --- a/sys-tuner/Cargo.toml +++ b/sys-tuner/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-sys-tuner" description = "The solana cluster system tuner daemon" -version = "1.14.7" +version = "1.14.8" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,8 +14,8 @@ publish = true clap = "2.33.1" libc = "0.2.126" log = "0.4.17" -solana-logger = { path = "../logger", version = "=1.14.7" } -solana-version = { path = "../version", version = "=1.14.7" } +solana-logger = { path = "../logger", version = "=1.14.8" } +solana-version = { path = "../version", version = "=1.14.8" } [target."cfg(unix)".dependencies] unix_socket2 = "0.5.4" diff --git a/test-validator/Cargo.toml b/test-validator/Cargo.toml index 2b4402548a8471..c92579239edc6e 100644 --- a/test-validator/Cargo.toml +++ b/test-validator/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "solana-test-validator" description = "Blockchain, Rebuilt for Scale" -version = "1.14.7" +version = "1.14.8" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-test-validator" readme = "../README.md" @@ -15,19 +15,19 @@ base64 = "0.13.0" log = "0.4.17" serde_derive = "1.0.103" serde_json = "1.0.81" -solana-cli-output = { path = "../cli-output", version = "=1.14.7" } -solana-client = { path = "../client", version = "=1.14.7" } -solana-core = { path = "../core", version = "=1.14.7" } -solana-gossip = { path = "../gossip", version = "=1.14.7" } -solana-ledger = { path = "../ledger", version = "=1.14.7" } -solana-logger = { path = "../logger", version = "=1.14.7" } -solana-net-utils = { path = "../net-utils", version = "=1.14.7" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.7" } -solana-program-test = { path = "../program-test", version = "=1.14.7" } -solana-rpc = { path = "../rpc", version = "=1.14.7" } -solana-runtime = { path = "../runtime", version = "=1.14.7" } -solana-sdk = { path = "../sdk", version = "=1.14.7" } -solana-streamer = { path = "../streamer", version = "=1.14.7" } +solana-cli-output = { path = "../cli-output", version = "=1.14.8" } +solana-client = { path = "../client", version = "=1.14.8" } +solana-core = { path = "../core", version = "=1.14.8" } +solana-gossip = { path = "../gossip", version = "=1.14.8" } +solana-ledger = { path = "../ledger", version = "=1.14.8" } +solana-logger = { path = "../logger", version = "=1.14.8" } +solana-net-utils = { path = "../net-utils", version = "=1.14.8" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.8" } +solana-program-test = { path = "../program-test", version = "=1.14.8" } +solana-rpc = { path = "../rpc", version = "=1.14.8" } +solana-runtime = { path = "../runtime", version = "=1.14.8" } +solana-sdk = { path = "../sdk", version = "=1.14.8" } +solana-streamer = { path = "../streamer", version = "=1.14.8" } tokio = { version = "1", features = ["full"] } [package.metadata.docs.rs] diff --git a/tokens/Cargo.toml b/tokens/Cargo.toml index 04719d29fe3a35..17a1220eac47f8 100644 --- a/tokens/Cargo.toml +++ b/tokens/Cargo.toml @@ -3,7 +3,7 @@ name = "solana-tokens" description = "Blockchain, Rebuilt for Scale" authors = ["Solana Maintainers "] edition = "2021" -version = "1.14.7" +version = "1.14.8" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -19,14 +19,14 @@ indexmap = "1.9.1" indicatif = "0.16.2" pickledb = "0.4.1" serde = { version = "1.0", features = ["derive"] } -solana-account-decoder = { path = "../account-decoder", version = "=1.14.7" } -solana-clap-utils = { path = "../clap-utils", version = "=1.14.7" } -solana-cli-config = { path = "../cli-config", version = "=1.14.7" } -solana-client = { path = "../client", version = "=1.14.7" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.7" } -solana-sdk = { path = "../sdk", version = "=1.14.7" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.7" } -solana-version = { path = "../version", version = "=1.14.7" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.8" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.8" } +solana-cli-config = { path = "../cli-config", version = "=1.14.8" } +solana-client = { path = "../client", version = "=1.14.8" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.8" } +solana-sdk = { path = "../sdk", version = "=1.14.8" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.8" } +solana-version = { path = "../version", version = "=1.14.8" } spl-associated-token-account = { version = "=1.1.1" } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } tempfile = "3.3.0" @@ -34,6 +34,6 @@ thiserror = "1.0" [dev-dependencies] bincode = "1.3.3" -solana-logger = { path = "../logger", version = "=1.14.7" } -solana-streamer = { path = "../streamer", version = "=1.14.7" } -solana-test-validator = { path = "../test-validator", version = "=1.14.7" } +solana-logger = { path = "../logger", version = "=1.14.8" } +solana-streamer = { path = "../streamer", version = "=1.14.8" } +solana-test-validator = { path = "../test-validator", version = "=1.14.8" } diff --git a/transaction-dos/Cargo.toml b/transaction-dos/Cargo.toml index 2fb19aa7835b01..296e7caeaffe58 100644 --- a/transaction-dos/Cargo.toml +++ b/transaction-dos/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-transaction-dos" -version = "1.14.7" +version = "1.14.8" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,23 +14,23 @@ clap = "2.33.1" log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.7" } -solana-cli = { path = "../cli", version = "=1.14.7" } -solana-client = { path = "../client", version = "=1.14.7" } -solana-core = { path = "../core", version = "=1.14.7" } -solana-faucet = { path = "../faucet", version = "=1.14.7" } -solana-gossip = { path = "../gossip", version = "=1.14.7" } -solana-logger = { path = "../logger", version = "=1.14.7" } -solana-measure = { path = "../measure", version = "=1.14.7" } -solana-net-utils = { path = "../net-utils", version = "=1.14.7" } -solana-runtime = { path = "../runtime", version = "=1.14.7" } -solana-sdk = { path = "../sdk", version = "=1.14.7" } -solana-streamer = { path = "../streamer", version = "=1.14.7" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.7" } -solana-version = { path = "../version", version = "=1.14.7" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.8" } +solana-cli = { path = "../cli", version = "=1.14.8" } +solana-client = { path = "../client", version = "=1.14.8" } +solana-core = { path = "../core", version = "=1.14.8" } +solana-faucet = { path = "../faucet", version = "=1.14.8" } +solana-gossip = { path = "../gossip", version = "=1.14.8" } +solana-logger = { path = "../logger", version = "=1.14.8" } +solana-measure = { path = "../measure", version = "=1.14.8" } +solana-net-utils = { path = "../net-utils", version = "=1.14.8" } +solana-runtime = { path = "../runtime", version = "=1.14.8" } +solana-sdk = { path = "../sdk", version = "=1.14.8" } +solana-streamer = { path = "../streamer", version = "=1.14.8" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.8" } +solana-version = { path = "../version", version = "=1.14.8" } [dev-dependencies] -solana-local-cluster = { path = "../local-cluster", version = "=1.14.7" } +solana-local-cluster = { path = "../local-cluster", version = "=1.14.8" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/transaction-status/Cargo.toml b/transaction-status/Cargo.toml index b2491a5c764e87..4900b4cae9585d 100644 --- a/transaction-status/Cargo.toml +++ b/transaction-status/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-transaction-status" -version = "1.14.7" +version = "1.14.8" description = "Solana transaction status types" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -20,12 +20,12 @@ log = "0.4.17" serde = "1.0.138" serde_derive = "1.0.103" serde_json = "1.0.81" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.7" } -solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.7" } -solana-measure = { path = "../measure", version = "=1.14.7" } -solana-metrics = { path = "../metrics", version = "=1.14.7" } -solana-sdk = { path = "../sdk", version = "=1.14.7" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.7" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.8" } +solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.8" } +solana-measure = { path = "../measure", version = "=1.14.8" } +solana-metrics = { path = "../metrics", version = "=1.14.8" } +solana-sdk = { path = "../sdk", version = "=1.14.8" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.8" } spl-associated-token-account = { version = "=1.1.1", features = ["no-entrypoint"] } spl-memo = { version = "=3.0.1", features = ["no-entrypoint"] } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } diff --git a/upload-perf/Cargo.toml b/upload-perf/Cargo.toml index a0f72259c94546..f4bae740e2f29c 100644 --- a/upload-perf/Cargo.toml +++ b/upload-perf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-upload-perf" -version = "1.14.7" +version = "1.14.8" description = "Metrics Upload Utility" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -11,7 +11,7 @@ publish = false [dependencies] serde_json = "1.0.81" -solana-metrics = { path = "../metrics", version = "=1.14.7" } +solana-metrics = { path = "../metrics", version = "=1.14.8" } [[bin]] name = "solana-upload-perf" diff --git a/validator/Cargo.toml b/validator/Cargo.toml index 78c6f3302c2baa..95f70891fb381d 100644 --- a/validator/Cargo.toml +++ b/validator/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-validator" description = "Blockchain, Rebuilt for Scale" -version = "1.14.7" +version = "1.14.8" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -28,30 +28,30 @@ num_cpus = "1.13.1" rand = "0.7.0" serde = "1.0.138" serde_json = "1.0.81" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.7" } -solana-cli-config = { path = "../cli-config", version = "=1.14.7" } -solana-client = { path = "../client", version = "=1.14.7" } -solana-core = { path = "../core", version = "=1.14.7" } -solana-download-utils = { path = "../download-utils", version = "=1.14.7" } -solana-entry = { path = "../entry", version = "=1.14.7" } -solana-faucet = { path = "../faucet", version = "=1.14.7" } -solana-genesis-utils = { path = "../genesis-utils", version = "=1.14.7" } -solana-gossip = { path = "../gossip", version = "=1.14.7" } -solana-ledger = { path = "../ledger", version = "=1.14.7" } -solana-logger = { path = "../logger", version = "=1.14.7" } -solana-metrics = { path = "../metrics", version = "=1.14.7" } -solana-net-utils = { path = "../net-utils", version = "=1.14.7" } -solana-perf = { path = "../perf", version = "=1.14.7" } -solana-poh = { path = "../poh", version = "=1.14.7" } -solana-rpc = { path = "../rpc", version = "=1.14.7" } -solana-runtime = { path = "../runtime", version = "=1.14.7" } -solana-sdk = { path = "../sdk", version = "=1.14.7" } -solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.7" } -solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.7" } -solana-streamer = { path = "../streamer", version = "=1.14.7" } -solana-test-validator = { path = "../test-validator", version = "=1.14.7" } -solana-version = { path = "../version", version = "=1.14.7" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.7" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.8" } +solana-cli-config = { path = "../cli-config", version = "=1.14.8" } +solana-client = { path = "../client", version = "=1.14.8" } +solana-core = { path = "../core", version = "=1.14.8" } +solana-download-utils = { path = "../download-utils", version = "=1.14.8" } +solana-entry = { path = "../entry", version = "=1.14.8" } +solana-faucet = { path = "../faucet", version = "=1.14.8" } +solana-genesis-utils = { path = "../genesis-utils", version = "=1.14.8" } +solana-gossip = { path = "../gossip", version = "=1.14.8" } +solana-ledger = { path = "../ledger", version = "=1.14.8" } +solana-logger = { path = "../logger", version = "=1.14.8" } +solana-metrics = { path = "../metrics", version = "=1.14.8" } +solana-net-utils = { path = "../net-utils", version = "=1.14.8" } +solana-perf = { path = "../perf", version = "=1.14.8" } +solana-poh = { path = "../poh", version = "=1.14.8" } +solana-rpc = { path = "../rpc", version = "=1.14.8" } +solana-runtime = { path = "../runtime", version = "=1.14.8" } +solana-sdk = { path = "../sdk", version = "=1.14.8" } +solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.8" } +solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.8" } +solana-streamer = { path = "../streamer", version = "=1.14.8" } +solana-test-validator = { path = "../test-validator", version = "=1.14.8" } +solana-version = { path = "../version", version = "=1.14.8" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.8" } symlink = "0.1.0" [target.'cfg(not(target_env = "msvc"))'.dependencies] diff --git a/version/Cargo.toml b/version/Cargo.toml index 051d89d39427ed..22d6b114a4a5ac 100644 --- a/version/Cargo.toml +++ b/version/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-version" -version = "1.14.7" +version = "1.14.8" description = "Solana Version" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,9 +14,9 @@ log = "0.4.17" semver = "1.0.10" serde = "1.0.138" serde_derive = "1.0.103" -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.7" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.7" } -solana-sdk = { path = "../sdk", version = "=1.14.7" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.8" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.8" } +solana-sdk = { path = "../sdk", version = "=1.14.8" } [lib] name = "solana_version" diff --git a/watchtower/Cargo.toml b/watchtower/Cargo.toml index 4eec52e40900b7..6b3bced7e8c960 100644 --- a/watchtower/Cargo.toml +++ b/watchtower/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-watchtower" description = "Blockchain, Rebuilt for Scale" -version = "1.14.7" +version = "1.14.8" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -13,15 +13,15 @@ documentation = "https://docs.rs/solana-watchtower" clap = "2.33.1" humantime = "2.0.1" log = "0.4.17" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.7" } -solana-cli-config = { path = "../cli-config", version = "=1.14.7" } -solana-cli-output = { path = "../cli-output", version = "=1.14.7" } -solana-client = { path = "../client", version = "=1.14.7" } -solana-logger = { path = "../logger", version = "=1.14.7" } -solana-metrics = { path = "../metrics", version = "=1.14.7" } -solana-notifier = { path = "../notifier", version = "=1.14.7" } -solana-sdk = { path = "../sdk", version = "=1.14.7" } -solana-version = { path = "../version", version = "=1.14.7" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.8" } +solana-cli-config = { path = "../cli-config", version = "=1.14.8" } +solana-cli-output = { path = "../cli-output", version = "=1.14.8" } +solana-client = { path = "../client", version = "=1.14.8" } +solana-logger = { path = "../logger", version = "=1.14.8" } +solana-metrics = { path = "../metrics", version = "=1.14.8" } +solana-notifier = { path = "../notifier", version = "=1.14.8" } +solana-sdk = { path = "../sdk", version = "=1.14.8" } +solana-version = { path = "../version", version = "=1.14.8" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/zk-token-sdk/Cargo.toml b/zk-token-sdk/Cargo.toml index 04aab42b092679..dabb0ccd3fa46d 100644 --- a/zk-token-sdk/Cargo.toml +++ b/zk-token-sdk/Cargo.toml @@ -3,7 +3,7 @@ name = "solana-zk-token-sdk" description = "Solana Zk Token SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" -version = "1.14.7" +version = "1.14.8" license = "Apache-2.0" edition = "2021" @@ -12,7 +12,7 @@ base64 = "0.13" bytemuck = { version = "1.11.0", features = ["derive"] } num-derive = "0.3" num-traits = "0.2" -solana-program = { path = "../sdk/program", version = "=1.14.7" } +solana-program = { path = "../sdk/program", version = "=1.14.8" } [target.'cfg(not(target_os = "solana"))'.dependencies] aes-gcm-siv = "0.10.3" @@ -29,7 +29,7 @@ rand = "0.7" serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" sha3 = "0.9" -solana-sdk = { path = "../sdk", version = "=1.14.7" } +solana-sdk = { path = "../sdk", version = "=1.14.8" } subtle = "2" thiserror = "1.0" zeroize = { version = "1.3", default-features = false, features = ["zeroize_derive"] } From 005fa785f35bf2ebf0d36f82867dbad8bd68cd8a Mon Sep 17 00:00:00 2001 From: "Jeff Washington (jwash)" Date: Tue, 1 Nov 2022 12:51:55 -0700 Subject: [PATCH 221/465] make feature 28541 a no-op (#28553) * Revert "testnet fixup: only update rent_epoch on load until feature (#28542)" This reverts commit 9e57fb576ca21cf5b1a565484f3c0317c2980ed1. * feature 28541 no-op (#28542) --- runtime/src/accounts_db.rs | 48 +- runtime/src/bank.rs | 29 +- runtime/src/expected_rent_collection.rs | 1308 ----------------------- runtime/src/lib.rs | 1 - sdk/src/feature_set.rs | 10 +- 5 files changed, 8 insertions(+), 1388 deletions(-) delete mode 100644 runtime/src/expected_rent_collection.rs diff --git a/runtime/src/accounts_db.rs b/runtime/src/accounts_db.rs index 878c3c1ff69b42..ad28f3c308b7bd 100644 --- a/runtime/src/accounts_db.rs +++ b/runtime/src/accounts_db.rs @@ -45,7 +45,6 @@ use { bank::Rewrites, cache_hash_data::CacheHashData, contains::Contains, - expected_rent_collection::{ExpectedRentCollection, SlotInfoInEpoch}, pubkey_bins::PubkeyBinCalculator24, read_only_accounts_cache::ReadOnlyAccountsCache, rent_collector::RentCollector, @@ -1793,26 +1792,22 @@ trait AppendVecScan: Send + Sync + Clone { /// These would have been captured in a fn from within the scan function. /// Some of these are constant across all pubkeys, some are constant across a slot. /// Some could be unique per pubkey. -struct ScanState<'a, T: Fn(Slot) -> Option + Sync + Send + Clone> { +struct ScanState<'a> { /// slot we're currently scanning current_slot: Slot, /// accumulated results accum: BinnedHashData, - /// max slot (inclusive) that we're calculating accounts hash on - max_slot_info: SlotInfoInEpoch, bin_calculator: &'a PubkeyBinCalculator24, bin_range: &'a Range, config: &'a CalcAccountsHashConfig<'a>, mismatch_found: Arc, - stats: &'a crate::accounts_hash::HashStats, - find_unskipped_slot: &'a T, filler_account_suffix: Option<&'a Pubkey>, range: usize, sort_time: Arc, pubkey_to_bin_index: usize, } -impl<'a, T: Fn(Slot) -> Option + Sync + Send + Clone> AppendVecScan for ScanState<'a, T> { +impl<'a> AppendVecScan for ScanState<'a> { fn set_slot(&mut self, slot: Slot) { self.current_slot = slot; } @@ -1841,20 +1836,6 @@ impl<'a, T: Fn(Slot) -> Option + Sync + Send + Clone> AppendVecScan for Sc }; let loaded_hash = loaded_account.loaded_hash(); - let new_hash = ExpectedRentCollection::maybe_rehash_skipped_rewrite( - loaded_account, - &loaded_hash, - pubkey, - self.current_slot, - self.config.epoch_schedule, - self.config.rent_collector, - self.stats, - &self.max_slot_info, - self.find_unskipped_slot, - self.filler_account_suffix, - ); - let loaded_hash = new_hash.unwrap_or(loaded_hash); - let source_item = CalculateHashIntermediate::new(loaded_hash, balance, *pubkey); if self.config.check_hash @@ -6255,8 +6236,6 @@ impl AccountsDb { let total_lamports = Mutex::::new(0); let stats = HashStats::default(); - let max_slot_info = SlotInfoInEpoch::new(max_slot, config.epoch_schedule); - let get_hashes = || { keys.par_chunks(chunks) .map(|pubkeys| { @@ -6289,23 +6268,7 @@ impl AccountsDb { .get_loaded_account() .and_then( |loaded_account| { - let find_unskipped_slot = |slot: Slot| { - self.find_unskipped_slot(slot, config.ancestors) - }; let loaded_hash = loaded_account.loaded_hash(); - let new_hash = ExpectedRentCollection::maybe_rehash_skipped_rewrite( - &loaded_account, - &loaded_hash, - pubkey, - *slot, - config.epoch_schedule, - config.rent_collector, - &stats, - &max_slot_info, - find_unskipped_slot, - self.filler_account_suffix.as_ref(), - ); - let loaded_hash = new_hash.unwrap_or(loaded_hash); let balance = loaded_account.lamports(); if config.check_hash && !self.is_filler_account(pubkey) { // this will not be supported anymore let computed_hash = @@ -6890,22 +6853,15 @@ impl AccountsDb { let range = bin_range.end - bin_range.start; let sort_time = Arc::new(AtomicU64::new(0)); - let find_unskipped_slot = |slot: Slot| self.find_unskipped_slot(slot, config.ancestors); - - let max_slot_info = - SlotInfoInEpoch::new(storage.max_slot_inclusive(), config.epoch_schedule); let scanner = ScanState { current_slot: Slot::default(), accum: BinnedHashData::default(), bin_calculator: &bin_calculator, config, mismatch_found: mismatch_found.clone(), - max_slot_info, - find_unskipped_slot: &find_unskipped_slot, filler_account_suffix, range, bin_range, - stats, sort_time: sort_time.clone(), pubkey_to_bin_index: 0, }; diff --git a/runtime/src/bank.rs b/runtime/src/bank.rs index 0247d509c99348..f1a63d1d0b2ba6 100644 --- a/runtime/src/bank.rs +++ b/runtime/src/bank.rs @@ -54,7 +54,6 @@ use { builtins::{self, BuiltinAction, BuiltinFeatureTransition, Builtins}, cost_tracker::CostTracker, epoch_stakes::{EpochStakes, NodeVoteAccounts}, - expected_rent_collection::{ExpectedRentCollection, SlotInfoInEpoch}, inline_spl_associated_token_account, inline_spl_token, message_processor::MessageProcessor, rent_collector::{CollectedInfo, RentCollector}, @@ -6385,33 +6384,7 @@ impl Bank { ancestors: &Ancestors, pubkey: &Pubkey, ) -> Option<(AccountSharedData, Slot)> { - match self.rc.accounts.load_with_fixed_root(ancestors, pubkey) { - Some((mut account, storage_slot)) => { - if !self.feature_set.is_active( - &solana_sdk::feature_set::on_load_preserve_rent_epoch_for_rent_exempt_accounts::id(), - ) { - // this was a bug in 1.14+. This code should not have run once this feature was activated: - // preserve rent epoch for rent exempt accounts #26479 - // But, it did run. On mnb, this caused bank mismatches. - // On testnet, where ALL validators were running this code incorrectly, the rent_epoch was updated here. - // The network was happy, but the behavior was wrong. So, correctly removing this code disagreed with - // what the network agreed was 'correct'. So, we have to preserve the previous erroneous behavior on testnet - // until we can activate this feature to switch the network's understanding of 'correct'. - ExpectedRentCollection::maybe_update_rent_epoch_on_load( - &mut account, - &SlotInfoInEpoch::new_small(storage_slot), - &SlotInfoInEpoch::new_small(self.slot()), - self.epoch_schedule(), - self.rent_collector(), - pubkey, - &self.rewrites_skipped_this_slot, - ); - } - - Some((account, storage_slot)) - } - None => None, - } + self.rc.accounts.load_with_fixed_root(ancestors, pubkey) } pub fn get_program_accounts( diff --git a/runtime/src/expected_rent_collection.rs b/runtime/src/expected_rent_collection.rs deleted file mode 100644 index 4e2c45b839bb84..00000000000000 --- a/runtime/src/expected_rent_collection.rs +++ /dev/null @@ -1,1308 +0,0 @@ -//! Logic for determining when rent should have been collected or a rewrite would have occurred for an account. -use { - crate::{ - accounts_db::AccountsDb, - accounts_hash::HashStats, - bank::{Bank, PartitionIndex, Rewrites}, - rent_collector::{RentCollector, RentResult}, - }, - solana_sdk::{ - account::{AccountSharedData, ReadableAccount, WritableAccount}, - clock::{Epoch, Slot}, - epoch_schedule::EpochSchedule, - hash::Hash, - pubkey::Pubkey, - }, - std::sync::atomic::Ordering, -}; - -#[derive(Debug, PartialEq, Eq)] -pub struct ExpectedRentCollection { - partition_from_pubkey: PartitionIndex, - epoch_of_max_storage_slot: Epoch, - partition_index_from_max_slot: PartitionIndex, - first_slot_in_max_epoch: Slot, - // these are the only 2 fields used by downstream calculations at the moment. - // the rest are here for debugging - expected_rent_collection_slot_max_epoch: Slot, - rent_epoch: Epoch, -} - -/* -A goal is to skip rewrites to improve performance. -Reasons this file exists: -A. When we encounter skipped-rewrite account data as part of a load, we may need to update rent_epoch. -B. When we encounter skipped-rewrite account data during accounts hash calc, the saved hash will be incorrect if we skipped a rewrite. - We need slot and rent_epoch to recalculate a new hash. - -cases of rent collection: - -setup assumptions: -pubkey = abc -slots_per_epoch = 432,000 -pubkey_partition_index of 'abc' = 80 - -So, rent will be collected or a rewrite is expected to occur: - each time a slot's pubkey_partition is == [footnote1] pubkey_partition_index within an epoch. [footnote2] - - If we skip rewrites, then pubkey's account data will not be rewritten when its rent collecion partition index occurs. - However, later we need to get a hash value for the most recent update to this account. - That leads us to the purpose of this file. - To calculate a hash for account data, we need to know: - 1. the slot the account was written in - 2. the rent_epoch field of the account, telling us which epoch is the next time we should evaluate rent on this account - If we did not perform a rewrite, then the account in the append vec it was last written in has: - 1. The wrong slot, since the append vec is not associated with the slot that the rewrite would have occurred. - 2. The wrong rent_epoch since the account was not rewritten with a newer rent_epoch [footnote3] - -Reason A for this file's existence: -When we encounter the skipped-rewrite account data as part of a load, we may need to update rent_epoch. -Many operations work like this: - 1. read account - 2. add lamports (ex: reward was paid) - 3. write account -If the account is written with the WRONG rent_epoch field, then we will store an 'incorrect' rent_epoch field and the hash will be incorrect. -So, at (1. read account), we must FIX the rent_epoch to be as it would be if the rewrite would have occurred. - -Reason B for this file's existence: -When we encounter the skipped-rewrite account data during accounts hash calc, the saved hash will be incorrect if we skipped a rewrite. -We must compute the correct rent_epoch and slot and recompute the hash that we would have gotten if we would have done the rewrite. - -Both reasons result in the need for the same answer. -Given -1. pubkey -2. pubkey's account data -3. the slot the data was loaded from (storage_slot) -4. the highest_root caller cares about - -We also need a RentCollector and EpochSchedule for the highest root the caller cares about. -With these: -1. can calculate partition_index of -1.a. highest_root (slot) -1.b. storage_slot - -We also need : -fn find_unskipped_slot(slot) -> root -which can return the lowest root >= slot - 1 (this is why 'historical_roots' is necessary) Also see [footnote1]. - -Given these inputs, we can determine the correct slot and rent_epoch where we SHOULD have found this account's data and also compute the hash that we SHOULD have stored at that slot. -Note that a slot could be (-432k..infinite) slots and (-1..infinite) epochs relative to the expected rent collection slot. -Examples: -1. -storage_slot: 1 -highest_root: 1 -since pubkey_partition_index is 80 and hasn't been reached, the current account's data is CORRECT -Every highest_root < 80 is this same result. - -2. -storage_slot: 1 -highest_root: 79 -since pubkey_partition_index is 80 and hasn't been reached, the current account's data is CORRECT - -3. -storage_slot: 1 (partition index = 1) -highest_root: 80 (partition index = 80) -since pubkey_partition_index is 80 and it HAS been reached, but the account data is from slot 1, then the account's data is INcorrect -the account's hash is incorrect and needs to be recalculated as of slot 80 -rent_epoch will be 0 -Every highest_root >= 80 and < 432k + 80 is this same result - -4. -storage_slot: 1 (partition index = 1) -find_unskipped_slot(80) returns 81 since slot 80 was SKIPPED -highest_root: 81 (partition index = 81) -since pubkey_partition_index is 80 and it HAS been reached, but the account data is from slot 1, then the account's data is INcorrect -the account's hash is incorrect and needs to be recalculated as of slot 81 (note 81 because 80 was skipped) -rent_epoch will be 0 -Every highest_root >= 80 and < 432k + 80 is this same result - -5. -storage_slot: 1 (partition index = 1) (epoch 0) -highest_root: 432k + 1 (partition index = 1) (epoch 1) -since pubkey_partition_index is 80 and it HAS been reached, but the account data is from slot 1, then the account's data is INcorrect -the account's hash is incorrect and needs to be recalculated as of slot 80 in epoch 0 -partition_index 80 has NOT been reached in epoch 1 -so, rent_epoch will be 0 -Every highest_root >= 80 and < 432k + 80 is this same result - -6. -storage_slot: 1 (partition index = 1) (epoch 0) -highest_root: 432k + 80 (partition index = 80) (epoch 1) -since pubkey_partition_index is 80 and it HAS been reached, but the account data is from slot 1, then the account's data is INcorrect -the account's hash is incorrect and needs to be recalculated as of slot 432k + 80 in epoch 1 -partition_index 80 HAS been reached in epoch 1 -so, rent_epoch will be 1 -Every highest_root >= 432k + 80 and < 432k * 2 + 80 is this same result - -7. -storage_slot: 1 (partition index = 1) (epoch 0) -find_unskipped_slot(432k + 80) returns 432k + 81 since slot 432k + 80 was SKIPPED -highest_root: 432k + 81 (partition index = 81) (epoch 1) -since pubkey_partition_index is 80 and it HAS been reached, but the account data is from slot 1, then the account's data is INcorrect -the account's hash is incorrect and needs to be recalculated as of slot 432k + 81 in epoch 1 (slot 432k + 80 was skipped) -partition_index 80 HAS been reached in epoch 1 -so, rent_epoch will be 1 -Every highest_root >= 432k + 81 and < 432k * 2 + 80 is this same result - -8. -storage_slot: 1 (partition index = 1) (epoch 0) -highest_root: 432k * 2 + 1 (partition index = 1) (epoch 2) -since pubkey_partition_index is 80 and it HAS been reached, but the account data is from slot 1, then the account's data is INcorrect -the account's hash is incorrect and needs to be recalculated as of slot 432k + 80 in epoch 1 -partition_index 80 has NOT been reached in epoch 2 -so, rent_epoch will 1 -Every highest_root >= 432k + 80 and < 432k * 2 + 80 is this same result - -9. -storage_slot: 1 (partition index = 1) (epoch 0) -highest_root: 432k * 2 + 80 (partition index = 80) (epoch 2) -since pubkey_partition_index is 80 and it HAS been reached, but the account data is from slot 1, then the account's data is INcorrect -the account's hash is incorrect and needs to be recalculated as of slot 432k * 2 + 80 in epoch 2 -partition_index 80 HAS been reached in epoch 2 -so, rent_epoch will be 2 -Every highest_root >= 432k * 2 + 80 and < 432k * 3 + 80 is this same result - -[footnote1:] - "each time a slot's pubkey_partition is == [footnote1] pubkey_partition_index within an epoch." - Due to skipped slots, this is not true. - In reality, it is: - the first slot where a slot's pubkey_partition >= pubkey_partition_index - 1. - So, simply, if the pubkey_partition for our rent is 80, then that slot occurs at these slot #s: - Slot:........... Epoch: - 0 + 80 for epoch 0 - 432,000 + 80 for epoch 1 - 432,000 * 2 + 80 for epoch 2 - ... - However, sometimes we skip slots. So, just considering epoch 0: - Normal, not skipping any slots: - slot 78 is a root - slot 79 is a root - slot 80 is a root (account is rewritten/rent collected here) - Scenario 1: - slot 78 is a root - slot 79 is skipped/not a root - slot 80 is a root (account is rewritten/rent collected here along with accounts from slot 79) - Scenario 2: - slot 78 is a root - slot 79 is skipped/not a root - slot 80 is skipped/not a root - slot 81 is a root (account is rewritten/rent collected here because of slot 80, along with accounts from slots 79 and 81) - This gets us to looking for: - the first slot where a slot's pubkey_partition >= pubkey_partition_index - 1. - -[footnote2:] - Describing partition_index within an epoch: - example: - slot=0 is epoch=0, partition_index=0 - slot=1 is epoch=0, partition_index=1 - slot=431,999 is epoch=0, partition_index=431,999 - slot=432,000 is epoch=1, partition_index=432,000 - This is NOT technically accurate because of first_normal_slot, but we'll ignore that. - EpochSchedule::get_epoch_and_slot_index(slot) calculates epoch and partition_index from slot. - -[footnote3:] - when we do a rewrite of account data, only this data changes: - 1. rent_epoch - 2. computed hash value (which is a function of (data, lamports, executable, owner, rent_epoch, pubkey) + slot - 3. into a new append vec that is associated with the slot# - -*/ - -/// specify a slot -/// and keep track of epoch info for that slot -/// The idea is that algorithms often iterate over a storage slot or over a max/bank slot. -/// The epoch info for that slot will be fixed for many pubkeys, so save the calculated results. -/// There are 2 slots required for rent collection algorithms. Some callers have storage slot fixed -/// while others have max/bank slot fixed. 'epoch_info' isn't always needed, so it is optionally -/// specified by caller and only used by callee if necessary. -#[derive(Default, Copy, Clone)] -pub struct SlotInfoInEpoch { - /// the slot - slot: Slot, - /// possible info about this slot - epoch_info: Option, -} - -/// epoch info for a slot -#[derive(Default, Copy, Clone)] -pub struct SlotInfoInEpochInner { - /// epoch of the slot - epoch: Epoch, - /// partition index of the slot within the epoch - partition_index: PartitionIndex, - /// number of slots in this epoch - slots_in_epoch: Slot, -} - -impl SlotInfoInEpoch { - /// create, populating epoch info - pub fn new(slot: Slot, epoch_schedule: &EpochSchedule) -> Self { - let mut result = Self::new_small(slot); - result.epoch_info = Some(result.get_epoch_info(epoch_schedule)); - result - } - /// create, without populating epoch info - pub fn new_small(slot: Slot) -> Self { - SlotInfoInEpoch { - slot, - ..SlotInfoInEpoch::default() - } - } - /// get epoch info by returning already calculated or by calculating it now - pub fn get_epoch_info(&self, epoch_schedule: &EpochSchedule) -> SlotInfoInEpochInner { - if let Some(inner) = &self.epoch_info { - *inner - } else { - let (epoch, partition_index) = epoch_schedule.get_epoch_and_slot_index(self.slot); - SlotInfoInEpochInner { - epoch, - partition_index, - slots_in_epoch: epoch_schedule.get_slots_in_epoch(epoch), - } - } - } -} - -impl ExpectedRentCollection { - /// 'account' is being loaded from 'storage_slot' in 'bank_slot' - /// adjusts 'account.rent_epoch' if we skipped the last rewrite on this account - pub(crate) fn maybe_update_rent_epoch_on_load( - account: &mut AccountSharedData, - storage_slot: &SlotInfoInEpoch, - bank_slot: &SlotInfoInEpoch, - epoch_schedule: &EpochSchedule, - rent_collector: &RentCollector, - pubkey: &Pubkey, - rewrites_skipped_this_slot: &Rewrites, - ) { - let result = Self::get_corrected_rent_epoch_on_load( - account, - storage_slot, - bank_slot, - epoch_schedule, - rent_collector, - pubkey, - rewrites_skipped_this_slot, - ); - if let Some(rent_epoch) = result { - account.set_rent_epoch(rent_epoch); - } - } - - /// 'account' is being loaded - /// we may need to adjust 'account.rent_epoch' if we skipped the last rewrite on this account - /// returns Some(rent_epoch) if an adjustment needs to be made - /// returns None if the account is up to date - fn get_corrected_rent_epoch_on_load( - account: &AccountSharedData, - storage_slot: &SlotInfoInEpoch, - bank_slot: &SlotInfoInEpoch, - epoch_schedule: &EpochSchedule, - rent_collector: &RentCollector, - pubkey: &Pubkey, - rewrites_skipped_this_slot: &Rewrites, - ) -> Option { - let next_epoch = match rent_collector.calculate_rent_result( - pubkey, account, None, // filler_account_suffix - // Skipping rewrites is not compatible with the below feature. - // We will not skip rewrites until the feature is activated. - false, // preserve_rent_epoch_for_rent_exempt_accounts - ) { - RentResult::LeaveAloneNoRent => return None, - RentResult::CollectRent { - new_rent_epoch, - rent_due: 0, - } => new_rent_epoch, - // Rent is due on this account in this epoch, - // so we did not skip a rewrite. - RentResult::CollectRent { .. } => return None, - }; - { - // grab epoch infno for bank slot and storage slot - let bank_info = bank_slot.get_epoch_info(epoch_schedule); - let (current_epoch, partition_from_current_slot) = - (bank_info.epoch, bank_info.partition_index); - let storage_info = storage_slot.get_epoch_info(epoch_schedule); - let (storage_epoch, storage_slot_partition) = - (storage_info.epoch, storage_info.partition_index); - let partition_from_pubkey = - Bank::partition_from_pubkey(pubkey, bank_info.slots_in_epoch); - let mut possibly_update = true; - if current_epoch == storage_epoch { - // storage is in same epoch as bank - if partition_from_pubkey > partition_from_current_slot { - // we haven't hit the slot's rent collection slot yet, and the storage was within this slot, so do not update - possibly_update = false; - } - } else if current_epoch == storage_epoch + 1 { - // storage is in the previous epoch - if storage_slot_partition >= partition_from_pubkey - && partition_from_pubkey > partition_from_current_slot - { - // we did a rewrite in last epoch and we have not yet hit the rent collection slot in THIS epoch - possibly_update = false; - } - } // if more than 1 epoch old, then we need to collect rent because we clearly skipped it. - - let rewrites_skipped_this_pubkey_this_slot = || { - rewrites_skipped_this_slot - .read() - .unwrap() - .contains_key(pubkey) - }; - let rent_epoch = account.rent_epoch(); - if possibly_update && rent_epoch == 0 && current_epoch > 1 { - if rewrites_skipped_this_pubkey_this_slot() { - return Some(next_epoch); - } else { - // we know we're done - return None; - } - } - - // if an account was written >= its rent collection slot within the last epoch worth of slots, then we don't want to update it here - if possibly_update && rent_epoch < current_epoch { - let new_rent_epoch = if partition_from_pubkey < partition_from_current_slot - || (partition_from_pubkey == partition_from_current_slot - && rewrites_skipped_this_pubkey_this_slot()) - { - // partition_from_pubkey < partition_from_current_slot: - // we already would have done a rewrite on this account IN this epoch - next_epoch - } else { - // should have done rewrite up to last epoch - // we have not passed THIS epoch's rewrite slot yet, so the correct 'rent_epoch' is previous - next_epoch.saturating_sub(1) - }; - if rent_epoch != new_rent_epoch { - // the point of this function: - // 'new_rent_epoch' is the correct rent_epoch that the account would have if we had done rewrites - return Some(new_rent_epoch); - } - } else if !possibly_update { - // This is a non-trivial lookup. Would be nice to skip this. - assert!(!rewrites_skipped_this_pubkey_this_slot(), "did not update rent_epoch: {}, new value for rent_epoch: {}, old: {}, current epoch: {}", pubkey, rent_epoch, next_epoch, current_epoch); - } - } - None - } - - #[allow(clippy::too_many_arguments)] - /// it is possible 0.. rewrites were skipped on this account - /// if so, return Some(correct hash as of 'storage_slot') - /// if 'loaded_hash' is CORRECT, return None - pub fn maybe_rehash_skipped_rewrite( - loaded_account: &impl ReadableAccount, - loaded_hash: &Hash, - pubkey: &Pubkey, - storage_slot: Slot, - epoch_schedule: &EpochSchedule, - rent_collector: &RentCollector, - stats: &HashStats, - max_slot_in_storages_inclusive: &SlotInfoInEpoch, - find_unskipped_slot: impl Fn(Slot) -> Option, - filler_account_suffix: Option<&Pubkey>, - ) -> Option { - use solana_measure::measure::Measure; - let mut m = Measure::start("rehash_calc_us"); - let expected = ExpectedRentCollection::new( - pubkey, - loaded_account, - storage_slot, - epoch_schedule, - rent_collector, - max_slot_in_storages_inclusive, - find_unskipped_slot, - filler_account_suffix, - ); - - m.stop(); - stats.rehash_calc_us.fetch_add(m.as_us(), Ordering::Relaxed); - let expected = match expected { - None => { - // use the previously calculated hash - return None; - } - Some(expected) => expected, - }; - let mut m = Measure::start("rehash_hash_us"); - let recalc_hash = AccountsDb::hash_account_with_rent_epoch( - expected.expected_rent_collection_slot_max_epoch, - loaded_account, - pubkey, - expected.rent_epoch, - ); - m.stop(); - stats.rehash_hash_us.fetch_add(m.as_us(), Ordering::Relaxed); - if &recalc_hash == loaded_hash { - // unnecessary calculation occurred - stats.rehash_unnecessary.fetch_add(1, Ordering::Relaxed); - return None; - } - stats.rehash_required.fetch_add(1, Ordering::Relaxed); - - // recomputed based on rent collection/rewrite slot - // Rent would have been collected AT 'expected_rent_collection_slot', so hash according to that slot. - // Note that a later storage (and slot) may contain this same pubkey. In that case, that newer hash will make this one irrelevant. - Some(recalc_hash) - } - - /// figure out whether the account stored at 'storage_slot' would have normally been rewritten at a slot that has already occurred: after 'storage_slot' but <= 'max_slot_in_storages_inclusive' - /// returns Some(...) if the account would have normally been rewritten - /// returns None if the account was updated wrt rent already or if it is known that there must exist a future rewrite of this account (for example, non-zero rent is due) - fn new( - pubkey: &Pubkey, - loaded_account: &impl ReadableAccount, - storage_slot: Slot, - epoch_schedule: &EpochSchedule, - rent_collector_max_epoch: &RentCollector, - max_slot_in_storages_inclusive: &SlotInfoInEpoch, - find_unskipped_slot: impl Fn(Slot) -> Option, - filler_account_suffix: Option<&Pubkey>, - ) -> Option { - let mut rent_collector = rent_collector_max_epoch; - let SlotInfoInEpochInner { - epoch: epoch_of_max_storage_slot, - partition_index: partition_index_from_max_slot, - slots_in_epoch: slots_per_epoch_max_epoch, - } = max_slot_in_storages_inclusive.get_epoch_info(epoch_schedule); - let mut partition_from_pubkey = - crate::bank::Bank::partition_from_pubkey(pubkey, slots_per_epoch_max_epoch); - // now, we have to find the root that is >= the slot where this pubkey's rent would have been collected - let first_slot_in_max_epoch = - max_slot_in_storages_inclusive.slot - partition_index_from_max_slot; - let mut expected_rent_collection_slot_max_epoch = - first_slot_in_max_epoch + partition_from_pubkey; - let calculated_from_index_expected_rent_collection_slot_max_epoch = - expected_rent_collection_slot_max_epoch; - if expected_rent_collection_slot_max_epoch <= max_slot_in_storages_inclusive.slot { - // may need to find a valid root - if let Some(find) = - find_unskipped_slot(calculated_from_index_expected_rent_collection_slot_max_epoch) - { - // found a root that is >= expected_rent_collection_slot. - expected_rent_collection_slot_max_epoch = find; - } - } - let mut use_previous_epoch_rent_collector = false; - if expected_rent_collection_slot_max_epoch > max_slot_in_storages_inclusive.slot { - // max slot has not hit the slot in the max epoch where we would have collected rent yet, so the most recent rent-collected rewrite slot for this pubkey would be in the previous epoch - let previous_epoch = epoch_of_max_storage_slot.saturating_sub(1); - let slots_per_epoch_previous_epoch = epoch_schedule.get_slots_in_epoch(previous_epoch); - expected_rent_collection_slot_max_epoch = - if slots_per_epoch_previous_epoch == slots_per_epoch_max_epoch { - // partition index remains the same - calculated_from_index_expected_rent_collection_slot_max_epoch - .saturating_sub(slots_per_epoch_max_epoch) - } else { - // the newer epoch has a different # of slots, so the partition index will be different in the prior epoch - partition_from_pubkey = crate::bank::Bank::partition_from_pubkey( - pubkey, - slots_per_epoch_previous_epoch, - ); - first_slot_in_max_epoch - .saturating_sub(slots_per_epoch_previous_epoch) - .saturating_add(partition_from_pubkey) - }; - // since we are looking a different root, we have to call this again - if let Some(find) = find_unskipped_slot(expected_rent_collection_slot_max_epoch) { - // found a root (because we have a storage) that is >= expected_rent_collection_slot. - expected_rent_collection_slot_max_epoch = find; - } - - // since we have not hit the slot in the rent collector's epoch yet, we need to collect rent according to the previous epoch's rent collector. - use_previous_epoch_rent_collector = true; - } - - // the slot we're dealing with is where we expected the rent to be collected for this pubkey, so use what is in this slot - // however, there are cases, such as adjusting the clock, where we store the account IN the same slot, but we do so BEFORE we collect rent. We later store the account AGAIN for rewrite/rent collection. - // So, if storage_slot == expected_rent_collection_slot..., then we MAY have collected rent or may not have. So, it has to be > - // rent_epoch=0 is a special case - if storage_slot > expected_rent_collection_slot_max_epoch - || loaded_account.rent_epoch() == 0 - { - // no need to update hash - return None; - } - - let rent_collector_previous; - if use_previous_epoch_rent_collector { - // keep in mind the storage slot could be 0..inf epochs in the past - // we want to swap the rent collector for one whose epoch is the previous epoch - let mut rent_collector_temp = rent_collector.clone(); - rent_collector_temp.epoch = rent_collector.epoch.saturating_sub(1); // previous epoch - rent_collector_previous = Some(rent_collector_temp); - rent_collector = rent_collector_previous.as_ref().unwrap(); - } - - // ask the rent collector what rent should be collected. - // Rent collector knows the current epoch. - let rent_result = rent_collector.calculate_rent_result( - pubkey, - loaded_account, - filler_account_suffix, - // Skipping rewrites is not compatible with the below feature. - // We will not skip rewrites until the feature is activated. - false, // preserve_rent_epoch_for_rent_exempt_accounts - ); - let current_rent_epoch = loaded_account.rent_epoch(); - let new_rent_epoch = match rent_result { - RentResult::CollectRent { - new_rent_epoch: next_epoch, - rent_due, - } => { - if next_epoch > current_rent_epoch && rent_due != 0 { - // this is an account that would have had rent collected since this storage slot, so just use the hash we have since there must be a newer version of this account already in a newer slot - // It would be a waste of time to recalcluate a hash. - return None; - } - std::cmp::max(next_epoch, current_rent_epoch) - } - RentResult::LeaveAloneNoRent => { - // rent_epoch is not updated for this condition - // But, a rewrite WOULD HAVE occured at the expected slot. - // So, fall through with same rent_epoch, but we will have already calculated 'expected_rent_collection_slot_max_epoch' - current_rent_epoch - } - }; - - if expected_rent_collection_slot_max_epoch == storage_slot - && new_rent_epoch == loaded_account.rent_epoch() - { - // no rewrite would have occurred - return None; - } - - Some(Self { - partition_from_pubkey, - epoch_of_max_storage_slot, - partition_index_from_max_slot, - first_slot_in_max_epoch, - expected_rent_collection_slot_max_epoch, - rent_epoch: new_rent_epoch, - }) - } -} - -#[cfg(test)] -pub mod tests { - use { - super::*, - solana_sdk::{ - account::{AccountSharedData, WritableAccount}, - genesis_config::GenesisConfig, - }, - }; - - #[test] - fn test_expected_rent_collection() { - solana_logger::setup(); - let pubkey = Pubkey::new(&[5; 32]); - let owner = solana_sdk::pubkey::new_rand(); - let mut account = AccountSharedData::new(1, 0, &owner); - let max_slot_in_storages_inclusive = 0; - let epoch_schedule = EpochSchedule::default(); - let first_normal_slot = epoch_schedule.first_normal_slot; - let storage_slot = first_normal_slot; - let epoch = epoch_schedule.get_epoch(storage_slot); - assert_eq!( - (epoch, 0), - epoch_schedule.get_epoch_and_slot_index(storage_slot) - ); - let genesis_config = GenesisConfig::default(); - let mut rent_collector = RentCollector::new( - epoch, - epoch_schedule, - genesis_config.slots_per_year(), - genesis_config.rent, - ); - rent_collector.rent.lamports_per_byte_year = 0; // temporarily disable rent - let find_unskipped_slot = Some; - // slot in current epoch - let result = ExpectedRentCollection::new( - &pubkey, - &account, - storage_slot, - &epoch_schedule, - &rent_collector, - &SlotInfoInEpoch::new(max_slot_in_storages_inclusive, &epoch_schedule), - find_unskipped_slot, - None, - ); - assert!(result.is_none()); - - let slots_per_epoch = 432_000; - assert_eq!( - slots_per_epoch, - epoch_schedule.get_slots_in_epoch(epoch_schedule.get_epoch(storage_slot)) - ); - let partition_index_max_inclusive = slots_per_epoch - 1; - account.set_rent_epoch(rent_collector.epoch); - // several epochs ahead of now - // first slot of new epoch is max slot EXclusive - // so last slot of prior epoch is max slot INclusive - let max_slot_in_storages_inclusive = slots_per_epoch * 3 + first_normal_slot - 1; - rent_collector.epoch = epoch_schedule.get_epoch(max_slot_in_storages_inclusive); - let partition_from_pubkey = 8470; // function of 432k slots and 'pubkey' above - let first_slot_in_max_epoch = 1388256; - let expected_rent_collection_slot_max_epoch = - first_slot_in_max_epoch + partition_from_pubkey; - let result = ExpectedRentCollection::new( - &pubkey, - &account, - storage_slot, - &epoch_schedule, - &rent_collector, - &SlotInfoInEpoch::new(max_slot_in_storages_inclusive, &epoch_schedule), - find_unskipped_slot, - None, - ); - assert_eq!( - result, - Some(ExpectedRentCollection { - partition_from_pubkey, - epoch_of_max_storage_slot: rent_collector.epoch, - partition_index_from_max_slot: partition_index_max_inclusive, - first_slot_in_max_epoch, - expected_rent_collection_slot_max_epoch, - rent_epoch: rent_collector.epoch, - }) - ); - - // LeaveAloneNoRent - for leave_alone in [true, false] { - account.set_executable(leave_alone); - let result = ExpectedRentCollection::new( - &pubkey, - &account, - expected_rent_collection_slot_max_epoch, - &epoch_schedule, - &rent_collector, - &SlotInfoInEpoch::new(max_slot_in_storages_inclusive, &epoch_schedule), - find_unskipped_slot, - None, - ); - assert_eq!( - result, - (!leave_alone).then(|| ExpectedRentCollection { - partition_from_pubkey, - epoch_of_max_storage_slot: rent_collector.epoch, - partition_index_from_max_slot: partition_index_max_inclusive, - first_slot_in_max_epoch, - expected_rent_collection_slot_max_epoch, - rent_epoch: rent_collector.epoch, - }), - "leave_alone: {}", - leave_alone - ); - } - - // storage_slot > expected_rent_collection_slot_max_epoch - // if greater, we return None - for greater in [false, true] { - let result = ExpectedRentCollection::new( - &pubkey, - &account, - expected_rent_collection_slot_max_epoch + u64::from(greater), - &epoch_schedule, - &rent_collector, - &SlotInfoInEpoch::new(max_slot_in_storages_inclusive, &epoch_schedule), - find_unskipped_slot, - None, - ); - assert_eq!( - result, - (!greater).then(|| ExpectedRentCollection { - partition_from_pubkey, - epoch_of_max_storage_slot: rent_collector.epoch, - partition_index_from_max_slot: partition_index_max_inclusive, - first_slot_in_max_epoch, - expected_rent_collection_slot_max_epoch, - rent_epoch: rent_collector.epoch, - }) - ); - } - - // test rewrite would have occurred in previous epoch from max_slot_in_storages_inclusive's epoch - // the change is in 'rent_epoch' returned in 'expected' - for previous_epoch in [false, true] { - let result = ExpectedRentCollection::new( - &pubkey, - &account, - expected_rent_collection_slot_max_epoch, - &epoch_schedule, - &rent_collector, - &SlotInfoInEpoch::new( - max_slot_in_storages_inclusive - + if previous_epoch { slots_per_epoch } else { 0 }, - &epoch_schedule, - ), - find_unskipped_slot, - None, - ); - let epoch_delta = u64::from(previous_epoch); - let slot_delta = epoch_delta * slots_per_epoch; - assert_eq!( - result, - Some(ExpectedRentCollection { - partition_from_pubkey, - epoch_of_max_storage_slot: rent_collector.epoch + epoch_delta, - partition_index_from_max_slot: partition_index_max_inclusive, - first_slot_in_max_epoch: first_slot_in_max_epoch + slot_delta, - expected_rent_collection_slot_max_epoch: expected_rent_collection_slot_max_epoch - + slot_delta, - rent_epoch: rent_collector.epoch, - }), - "previous_epoch: {}", - previous_epoch, - ); - } - - // if account's rent_epoch is already > our rent epoch, rent was collected already - // if greater, we return None - let original_rent_epoch = account.rent_epoch(); - for already_collected in [true, false] { - // to consider: maybe if we already collected rent_epoch IN this slot and slot matches what we need, then we should return None here - account.set_rent_epoch(original_rent_epoch + u64::from(already_collected)); - let result = ExpectedRentCollection::new( - &pubkey, - &account, - expected_rent_collection_slot_max_epoch, - &epoch_schedule, - &rent_collector, - &SlotInfoInEpoch::new(max_slot_in_storages_inclusive, &epoch_schedule), - find_unskipped_slot, - None, - ); - assert_eq!( - result, - Some(ExpectedRentCollection { - partition_from_pubkey, - epoch_of_max_storage_slot: rent_collector.epoch, - partition_index_from_max_slot: partition_index_max_inclusive, - first_slot_in_max_epoch, - expected_rent_collection_slot_max_epoch, - rent_epoch: std::cmp::max(rent_collector.epoch, account.rent_epoch()), - }), - "rent_collector.epoch: {}, already_collected: {}", - rent_collector.epoch, - already_collected - ); - } - account.set_rent_epoch(original_rent_epoch); - - let storage_slot = max_slot_in_storages_inclusive - slots_per_epoch; - // check partition from pubkey code - for end_partition_index in [0, 1, 2, 100, slots_per_epoch - 2, slots_per_epoch - 1] { - // generate a pubkey range - let range = crate::bank::Bank::pubkey_range_from_partition(( - // start_index: - end_partition_index.saturating_sub(1), // this can end up at start=0, end=0 (this is a desired test case) - // end_index: - end_partition_index, - epoch_schedule.get_slots_in_epoch(rent_collector.epoch), - )); - // use both start and end from INclusive range separately - for pubkey in [&range.start(), &range.end()] { - let result = ExpectedRentCollection::new( - pubkey, - &account, - storage_slot, - &epoch_schedule, - &rent_collector, - &SlotInfoInEpoch::new(max_slot_in_storages_inclusive, &epoch_schedule), - find_unskipped_slot, - None, - ); - assert_eq!( - result, - Some(ExpectedRentCollection { - partition_from_pubkey: end_partition_index, - epoch_of_max_storage_slot: rent_collector.epoch, - partition_index_from_max_slot: partition_index_max_inclusive, - first_slot_in_max_epoch, - expected_rent_collection_slot_max_epoch: first_slot_in_max_epoch + end_partition_index, - rent_epoch: rent_collector.epoch, - }), - "range: {:?}, pubkey: {:?}, end_partition_index: {}, max_slot_in_storages_inclusive: {}", - range, - pubkey, - end_partition_index, - max_slot_in_storages_inclusive, - ); - } - } - - // check max_slot_in_storages_inclusive related code - // so sweep through max_slot_in_storages_inclusive values within an epoch - let first_slot_in_max_epoch = first_normal_slot + slots_per_epoch; - rent_collector.epoch = epoch_schedule.get_epoch(first_slot_in_max_epoch); - // an epoch in the past so we always collect rent - let storage_slot = first_normal_slot; - for partition_index in [ - 0, - 1, - 2, - partition_from_pubkey - 1, - partition_from_pubkey, - partition_from_pubkey + 1, - 100, - slots_per_epoch - 2, - slots_per_epoch - 1, - ] { - // partition_index=0 means first slot of second normal epoch - // second normal epoch because we want to deal with accounts stored in the first normal epoch - // + 1 because of exclusive - let max_slot_in_storages_inclusive = first_slot_in_max_epoch + partition_index; - let result = ExpectedRentCollection::new( - &pubkey, - &account, - storage_slot, - &epoch_schedule, - &rent_collector, - &SlotInfoInEpoch::new(max_slot_in_storages_inclusive, &epoch_schedule), - find_unskipped_slot, - None, - ); - let partition_index_passed_pubkey = partition_from_pubkey <= partition_index; - let expected_rent_epoch = - rent_collector.epoch - u64::from(!partition_index_passed_pubkey); - let expected_rent_collection_slot_max_epoch = first_slot_in_max_epoch - + partition_from_pubkey - - if partition_index_passed_pubkey { - 0 - } else { - slots_per_epoch - }; - - assert_eq!( - result, - Some(ExpectedRentCollection { - partition_from_pubkey, - epoch_of_max_storage_slot: rent_collector.epoch, - partition_index_from_max_slot: partition_index, - first_slot_in_max_epoch, - expected_rent_collection_slot_max_epoch, - rent_epoch: expected_rent_epoch, - }), - "partition_index: {}, max_slot_in_storages_inclusive: {}, storage_slot: {}, first_normal_slot: {}", - partition_index, - max_slot_in_storages_inclusive, - storage_slot, - first_normal_slot, - ); - } - - // test account.rent_epoch = 0 - let first_slot_in_max_epoch = 1388256; - for account_rent_epoch in [0, epoch] { - account.set_rent_epoch(account_rent_epoch); - let result = ExpectedRentCollection::new( - &pubkey, - &account, - storage_slot, - &epoch_schedule, - &rent_collector, - &SlotInfoInEpoch::new(max_slot_in_storages_inclusive, &epoch_schedule), - find_unskipped_slot, - None, - ); - assert_eq!( - result, - (account_rent_epoch != 0).then(|| ExpectedRentCollection { - partition_from_pubkey, - epoch_of_max_storage_slot: rent_collector.epoch + 1, - partition_index_from_max_slot: partition_index_max_inclusive, - first_slot_in_max_epoch, - expected_rent_collection_slot_max_epoch, - rent_epoch: rent_collector.epoch, - }) - ); - } - - // test find_unskipped_slot - for find_unskipped_slot in [ - |_| None, - Some, // identity - |slot| Some(slot + 1), // increment - |_| Some(Slot::MAX), // max - ] { - let test_value = 10; - let find_result = find_unskipped_slot(test_value); - let increment = find_result.unwrap_or_default() == test_value + 1; - let result = ExpectedRentCollection::new( - &pubkey, - &account, - storage_slot, - &epoch_schedule, - &rent_collector, - &SlotInfoInEpoch::new(max_slot_in_storages_inclusive, &epoch_schedule), - find_unskipped_slot, - None, - ); - // the test case of max is hacky - let prior_epoch = (partition_from_pubkey > partition_index_max_inclusive) - || find_unskipped_slot(0) == Some(Slot::MAX); - assert_eq!( - result, - Some(ExpectedRentCollection { - partition_from_pubkey, - epoch_of_max_storage_slot: rent_collector.epoch + 1, - partition_index_from_max_slot: partition_index_max_inclusive, - first_slot_in_max_epoch, - expected_rent_collection_slot_max_epoch: if find_result.unwrap_or_default() - == Slot::MAX - { - Slot::MAX - } else if increment { - expected_rent_collection_slot_max_epoch + 1 - } else { - expected_rent_collection_slot_max_epoch - }, - rent_epoch: rent_collector.epoch - u64::from(prior_epoch), - }), - "find_unskipped_slot(0): {:?}, rent_collector.epoch: {}, prior_epoch: {}", - find_unskipped_slot(0), - rent_collector.epoch, - prior_epoch, - ); - } - } - - #[test] - fn test_simplified_rent_collection() { - solana_logger::setup(); - let pubkey = Pubkey::new(&[5; 32]); - let owner = solana_sdk::pubkey::new_rand(); - let mut account = AccountSharedData::new(1, 0, &owner); - let mut epoch_schedule = EpochSchedule { - first_normal_epoch: 0, - ..EpochSchedule::default() - }; - epoch_schedule.first_normal_slot = 0; - let first_normal_slot = epoch_schedule.first_normal_slot; - let slots_per_epoch = 432_000; - let partition_from_pubkey = 8470; // function of 432k slots and 'pubkey' above - // start in epoch=1 because of issues at rent_epoch=1 - let storage_slot = first_normal_slot + partition_from_pubkey + slots_per_epoch; - let epoch = epoch_schedule.get_epoch(storage_slot); - assert_eq!( - (epoch, partition_from_pubkey), - epoch_schedule.get_epoch_and_slot_index(storage_slot) - ); - let genesis_config = GenesisConfig::default(); - let mut rent_collector = RentCollector::new( - epoch, - epoch_schedule, - genesis_config.slots_per_year(), - genesis_config.rent, - ); - rent_collector.rent.lamports_per_byte_year = 0; // temporarily disable rent - - assert_eq!( - slots_per_epoch, - epoch_schedule.get_slots_in_epoch(epoch_schedule.get_epoch(storage_slot)) - ); - account.set_rent_epoch(1); // has to be not 0 - - /* - test this: - pubkey_partition_index: 8470 - storage_slot: 8470 - account.rent_epoch: 1 (has to be not 0) - - max_slot: 8469 + 432k * 1 - max_slot: 8470 + 432k * 1 - max_slot: 8471 + 432k * 1 - max_slot: 8472 + 432k * 1 - max_slot: 8469 + 432k * 2 - max_slot: 8470 + 432k * 2 - max_slot: 8471 + 432k * 2 - max_slot: 8472 + 432k * 2 - max_slot: 8469 + 432k * 3 - max_slot: 8470 + 432k * 3 - max_slot: 8471 + 432k * 3 - max_slot: 8472 + 432k * 3 - - one run without skipping slot 8470, once WITH skipping slot 8470 - */ - - for skipped_slot in [false, true] { - let find_unskipped_slot = if skipped_slot { - |slot| Some(slot + 1) - } else { - Some - }; - - // starting at epoch = 0 has issues because of rent_epoch=0 special casing - for epoch in 1..4 { - for partition_index_from_max_slot in - partition_from_pubkey - 1..=partition_from_pubkey + 2 - { - let max_slot_in_storages_inclusive = - slots_per_epoch * epoch + first_normal_slot + partition_index_from_max_slot; - if storage_slot > max_slot_in_storages_inclusive { - continue; // illegal combination - } - rent_collector.epoch = epoch_schedule.get_epoch(max_slot_in_storages_inclusive); - let first_slot_in_max_epoch = max_slot_in_storages_inclusive - - max_slot_in_storages_inclusive % slots_per_epoch; - let skip_offset = u64::from(skipped_slot); - let mut expected_rent_collection_slot_max_epoch = - first_slot_in_max_epoch + partition_from_pubkey + skip_offset; - let hit_this_epoch = - expected_rent_collection_slot_max_epoch <= max_slot_in_storages_inclusive; - if !hit_this_epoch { - expected_rent_collection_slot_max_epoch -= slots_per_epoch; - } - - assert_eq!( - (epoch, partition_index_from_max_slot), - epoch_schedule.get_epoch_and_slot_index(max_slot_in_storages_inclusive) - ); - assert_eq!( - (epoch, 0), - epoch_schedule.get_epoch_and_slot_index(first_slot_in_max_epoch) - ); - account.set_rent_epoch(1); - let result = ExpectedRentCollection::new( - &pubkey, - &account, - storage_slot, - &epoch_schedule, - &rent_collector, - &SlotInfoInEpoch::new(max_slot_in_storages_inclusive, &epoch_schedule), - find_unskipped_slot, - None, - ); - let some_expected = if epoch == 1 { - skipped_slot && partition_index_from_max_slot > partition_from_pubkey - } else if epoch == 2 { - partition_index_from_max_slot >= partition_from_pubkey - skip_offset - } else { - true - }; - assert_eq!( - result, - some_expected.then(|| ExpectedRentCollection { - partition_from_pubkey, - epoch_of_max_storage_slot: rent_collector.epoch, - partition_index_from_max_slot, - first_slot_in_max_epoch, - expected_rent_collection_slot_max_epoch, - rent_epoch: rent_collector.epoch - u64::from(!hit_this_epoch), - }), - "partition_index_from_max_slot: {}, epoch: {}, hit_this_epoch: {}, skipped_slot: {}", - partition_index_from_max_slot, - epoch, - hit_this_epoch, - skipped_slot, - ); - - // test RentResult::LeaveAloneNoRent - { - let result = ExpectedRentCollection::new( - &pubkey, - &account, - storage_slot, - &epoch_schedule, - &rent_collector, - &SlotInfoInEpoch::new(max_slot_in_storages_inclusive, &epoch_schedule), - find_unskipped_slot, - // treat this pubkey like a filler account so we get a 'LeaveAloneNoRent' result - Some(&pubkey), - ); - assert_eq!( - result, - some_expected.then(|| ExpectedRentCollection { - partition_from_pubkey, - epoch_of_max_storage_slot: rent_collector.epoch, - partition_index_from_max_slot, - first_slot_in_max_epoch, - expected_rent_collection_slot_max_epoch, - // this will not be adjusted for 'LeaveAloneNoRent' - rent_epoch: account.rent_epoch(), - }), - "partition_index_from_max_slot: {}, epoch: {}", - partition_index_from_max_slot, - epoch, - ); - } - - // test maybe_rehash_skipped_rewrite - let hash = AccountsDb::hash_account(storage_slot, &account, &pubkey); - let maybe_rehash = ExpectedRentCollection::maybe_rehash_skipped_rewrite( - &account, - &hash, - &pubkey, - storage_slot, - &epoch_schedule, - &rent_collector, - &HashStats::default(), - &SlotInfoInEpoch::new(max_slot_in_storages_inclusive, &epoch_schedule), - find_unskipped_slot, - None, - ); - assert_eq!( - maybe_rehash, - some_expected.then(|| { - AccountsDb::hash_account_with_rent_epoch( - result - .as_ref() - .unwrap() - .expected_rent_collection_slot_max_epoch, - &account, - &pubkey, - result.as_ref().unwrap().rent_epoch, - ) - }) - ); - } - } - } - } - - #[test] - fn test_get_corrected_rent_epoch_on_load() { - solana_logger::setup(); - let pubkey = Pubkey::new(&[5; 32]); - let owner = solana_sdk::pubkey::new_rand(); - let mut account = AccountSharedData::new(1, 0, &owner); - let mut epoch_schedule = EpochSchedule { - first_normal_epoch: 0, - ..EpochSchedule::default() - }; - epoch_schedule.first_normal_slot = 0; - let first_normal_slot = epoch_schedule.first_normal_slot; - let slots_per_epoch = 432_000; - let partition_from_pubkey = 8470; // function of 432k slots and 'pubkey' above - // start in epoch=1 because of issues at rent_epoch=1 - let storage_slot = first_normal_slot + partition_from_pubkey + slots_per_epoch; - let epoch = epoch_schedule.get_epoch(storage_slot); - assert_eq!( - (epoch, partition_from_pubkey), - epoch_schedule.get_epoch_and_slot_index(storage_slot) - ); - let genesis_config = GenesisConfig::default(); - let mut rent_collector = RentCollector::new( - epoch, - epoch_schedule, - genesis_config.slots_per_year(), - genesis_config.rent, - ); - rent_collector.rent.lamports_per_byte_year = 0; // temporarily disable rent - - assert_eq!( - slots_per_epoch, - epoch_schedule.get_slots_in_epoch(epoch_schedule.get_epoch(storage_slot)) - ); - account.set_rent_epoch(1); // has to be not 0 - - /* - test this: - pubkey_partition_index: 8470 - storage_slot: 8470 - account.rent_epoch: 1 (has to be not 0) - - max_slot: 8469 + 432k * 1 - max_slot: 8470 + 432k * 1 - max_slot: 8471 + 432k * 1 - max_slot: 8472 + 432k * 1 - max_slot: 8469 + 432k * 2 - max_slot: 8470 + 432k * 2 - max_slot: 8471 + 432k * 2 - max_slot: 8472 + 432k * 2 - max_slot: 8469 + 432k * 3 - max_slot: 8470 + 432k * 3 - max_slot: 8471 + 432k * 3 - max_slot: 8472 + 432k * 3 - - one run without skipping slot 8470, once WITH skipping slot 8470 - */ - - for new_small in [false, true] { - for rewrite_already in [false, true] { - // starting at epoch = 0 has issues because of rent_epoch=0 special casing - for epoch in 1..4 { - for partition_index_bank_slot in - partition_from_pubkey - 1..=partition_from_pubkey + 2 - { - let bank_slot = - slots_per_epoch * epoch + first_normal_slot + partition_index_bank_slot; - if storage_slot > bank_slot { - continue; // illegal combination - } - rent_collector.epoch = epoch_schedule.get_epoch(bank_slot); - let first_slot_in_max_epoch = bank_slot - bank_slot % slots_per_epoch; - - assert_eq!( - (epoch, partition_index_bank_slot), - epoch_schedule.get_epoch_and_slot_index(bank_slot) - ); - assert_eq!( - (epoch, 0), - epoch_schedule.get_epoch_and_slot_index(first_slot_in_max_epoch) - ); - account.set_rent_epoch(1); - let rewrites = Rewrites::default(); - if rewrite_already { - if partition_index_bank_slot != partition_from_pubkey { - // this is an invalid test occurrence. - // we wouldn't have inserted pubkey into 'rewrite_already' for this slot if the current partition index wasn't at the pubkey's partition idnex yet. - continue; - } - - rewrites.write().unwrap().insert(pubkey, Hash::default()); - } - let expected_new_rent_epoch = - if partition_index_bank_slot > partition_from_pubkey { - if epoch > account.rent_epoch() { - Some(rent_collector.epoch) - } else { - None - } - } else if partition_index_bank_slot == partition_from_pubkey - && rewrite_already - { - let expected_rent_epoch = rent_collector.epoch; - if expected_rent_epoch == account.rent_epoch() { - None - } else { - Some(expected_rent_epoch) - } - } else if partition_index_bank_slot <= partition_from_pubkey - && epoch > account.rent_epoch() - { - let expected_rent_epoch = rent_collector.epoch.saturating_sub(1); - if expected_rent_epoch == account.rent_epoch() { - None - } else { - Some(expected_rent_epoch) - } - } else { - None - }; - let get_slot_info = |slot| { - if new_small { - SlotInfoInEpoch::new_small(slot) - } else { - SlotInfoInEpoch::new(slot, &epoch_schedule) - } - }; - let new_rent_epoch = - ExpectedRentCollection::get_corrected_rent_epoch_on_load( - &account, - &get_slot_info(storage_slot), - &get_slot_info(bank_slot), - &epoch_schedule, - &rent_collector, - &pubkey, - &rewrites, - ); - assert_eq!(new_rent_epoch, expected_new_rent_epoch); - } - } - } - } - } -} diff --git a/runtime/src/lib.rs b/runtime/src/lib.rs index 16a3f78e6d8163..45d338bfe58127 100644 --- a/runtime/src/lib.rs +++ b/runtime/src/lib.rs @@ -36,7 +36,6 @@ pub mod cost_model; pub mod cost_tracker; pub mod epoch_stakes; pub mod execute_cost_table; -mod expected_rent_collection; pub mod genesis_utils; pub mod hardened_unpack; pub mod in_mem_accounts_index; diff --git a/sdk/src/feature_set.rs b/sdk/src/feature_set.rs index a862bbebfe7245..6d758da46ed9ff 100644 --- a/sdk/src/feature_set.rs +++ b/sdk/src/feature_set.rs @@ -496,14 +496,14 @@ pub mod vote_state_update_root_fix { solana_sdk::declare_id!("G74BkWBzmsByZ1kxHy44H3wjwp5hp7JbrGRuDpco22tY"); } -pub mod on_load_preserve_rent_epoch_for_rent_exempt_accounts { - solana_sdk::declare_id!("CpkdQmspsaZZ8FVAouQTtTWZkc8eeQ7V3uj7dWz543rZ"); -} - pub mod return_none_for_zero_lamport_accounts { solana_sdk::declare_id!("7K5HFrS1WAq6ND7RQbShXZXbtAookyTfaDQPTJNuZpze"); } +pub mod on_load_preserve_rent_epoch_for_rent_exempt_accounts { + solana_sdk::declare_id!("CpkdQmspsaZZ8FVAouQTtTWZkc8eeQ7V3uj7dWz543rZ"); +} + pub mod increase_tx_account_lock_limit { solana_sdk::declare_id!("9LZdXeKGeBV6hRLdxS1rHbHoEUsKqesCC2ZAPTPKJAbK"); } @@ -622,8 +622,8 @@ lazy_static! { (preserve_rent_epoch_for_rent_exempt_accounts::id(), "preserve rent epoch for rent exempt accounts #26479"), (enable_bpf_loader_extend_program_ix::id(), "enable bpf upgradeable loader ExtendProgram instruction #25234"), (enable_early_verification_of_account_modifications::id(), "enable early verification of account modifications #25899"), - (prevent_crediting_accounts_that_end_rent_paying::id(), "prevent crediting rent paying accounts #26606"), (on_load_preserve_rent_epoch_for_rent_exempt_accounts::id(), "on bank load account, do not try to fix up rent_epoch #28541"), + (prevent_crediting_accounts_that_end_rent_paying::id(), "prevent crediting rent paying accounts #26606"), (cap_bpf_program_instruction_accounts::id(), "enforce max number of accounts per bpf program instruction #26628"), (loosen_cpi_size_restriction::id(), "loosen cpi size restrictions #26641"), (use_default_units_in_fee_calculation::id(), "use default units per instruction in fee calculation #26785"), From 527e2d4f59c6429a4a959d279738c872b97e56b5 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Thu, 3 Nov 2022 02:35:47 +0000 Subject: [PATCH 222/465] Time out async sends to avoid slackers stuck in the queue for too long (backport #28545) (#28732) * Time out async sends to avoid slackers stuck in the queue for too long (#28545) * Time out async sends to avoid slackers stuck in the queue for too long * Fixed a clippy error * Added stats for timeout counts * Link with stats correctly (cherry picked from commit f10ef763dc60c94c5065bf509b3524da44158bcf) # Conflicts: # tpu-client/src/connection_cache_stats.rs * Fixed merge issue * fmt code Co-authored-by: Lijun Wang <83639177+lijunwangs@users.noreply.github.com> --- client/src/connection_cache.rs | 11 ++++++ client/src/nonblocking/quic_client.rs | 4 +++ client/src/quic_client.rs | 49 ++++++++++++++++++++++----- client/src/tpu_connection.rs | 1 + 4 files changed, 57 insertions(+), 8 deletions(-) diff --git a/client/src/connection_cache.rs b/client/src/connection_cache.rs index 502d0ede8719ba..4a716badfabf67 100644 --- a/client/src/connection_cache.rs +++ b/client/src/connection_cache.rs @@ -92,6 +92,10 @@ impl ConnectionCacheStats { client_stats.make_connection_ms.load(Ordering::Relaxed), Ordering::Relaxed, ); + self.total_client_stats.send_timeout.fetch_add( + client_stats.send_timeout.load(Ordering::Relaxed), + Ordering::Relaxed, + ); self.sent_packets .fetch_add(num_packets as u64, Ordering::Relaxed); self.total_batches.fetch_add(1, Ordering::Relaxed); @@ -224,6 +228,13 @@ impl ConnectionCacheStats { self.batch_failure.swap(0, Ordering::Relaxed), i64 ), + ( + "send_timeout", + self.total_client_stats + .send_timeout + .swap(0, Ordering::Relaxed), + i64 + ), ); } } diff --git a/client/src/nonblocking/quic_client.rs b/client/src/nonblocking/quic_client.rs index 97d4cfdb40844c..d2f1e5dd3d4f08 100644 --- a/client/src/nonblocking/quic_client.rs +++ b/client/src/nonblocking/quic_client.rs @@ -512,6 +512,10 @@ impl QuicTpuConnection { self.client.stats() } + pub fn connection_stats(&self) -> Arc { + self.connection_stats.clone() + } + pub fn new( endpoint: Arc, addr: SocketAddr, diff --git a/client/src/quic_client.rs b/client/src/quic_client.rs index f1236b56b16bfc..bcd7f03090ac07 100644 --- a/client/src/quic_client.rs +++ b/client/src/quic_client.rs @@ -11,18 +11,21 @@ use { }, tpu_connection::TpuConnection as NonblockingTpuConnection, }, - tpu_connection::TpuConnection, + tpu_connection::{ClientStats, TpuConnection}, }, lazy_static::lazy_static, - solana_sdk::transport::Result as TransportResult, + log::*, + solana_sdk::transport::{Result as TransportResult, TransportError}, std::{ net::SocketAddr, - sync::{Arc, Condvar, Mutex, MutexGuard}, + sync::{atomic::Ordering, Arc, Condvar, Mutex, MutexGuard}, + time::Duration, }, - tokio::runtime::Runtime, + tokio::{runtime::Runtime, time::timeout}, }; const MAX_OUTSTANDING_TASK: u64 = 2000; +const SEND_TRANSACTION_TIMEOUT_MS: u64 = 10000; /// A semaphore used for limiting the number of asynchronous tasks spawn to the /// runtime. Before spawnning a task, use acquire. After the task is done (be it @@ -107,18 +110,48 @@ async fn send_wire_transaction_async( connection: Arc, wire_transaction: Vec, ) -> TransportResult<()> { - let result = connection.send_wire_transaction(wire_transaction).await; + let result = timeout( + Duration::from_millis(SEND_TRANSACTION_TIMEOUT_MS), + connection.send_wire_transaction(wire_transaction), + ) + .await; ASYNC_TASK_SEMAPHORE.release(); - result + handle_send_result(result, connection) } async fn send_wire_transaction_batch_async( connection: Arc, buffers: Vec>, ) -> TransportResult<()> { - let result = connection.send_wire_transaction_batch(&buffers).await; + let time_out = SEND_TRANSACTION_TIMEOUT_MS * buffers.len() as u64; + + let result = timeout( + Duration::from_millis(time_out), + connection.send_wire_transaction_batch(&buffers), + ) + .await; ASYNC_TASK_SEMAPHORE.release(); - result + handle_send_result(result, connection) +} + +/// Check the send result and update stats if timedout. Returns the checked result. +fn handle_send_result( + result: Result, tokio::time::error::Elapsed>, + connection: Arc, +) -> Result<(), TransportError> { + match result { + Ok(result) => result, + Err(_err) => { + let client_stats = ClientStats::default(); + client_stats.send_timeout.fetch_add(1, Ordering::Relaxed); + let stats = connection.connection_stats(); + stats.add_client_stats(&client_stats, 0, false); + info!("Timedout sending transaction {:?}", connection.tpu_addr()); + Err(TransportError::Custom( + "Timedout sending transaction".to_string(), + )) + } + } } impl TpuConnection for QuicTpuConnection { diff --git a/client/src/tpu_connection.rs b/client/src/tpu_connection.rs index 9f02319379c942..0825c06987dd58 100644 --- a/client/src/tpu_connection.rs +++ b/client/src/tpu_connection.rs @@ -21,6 +21,7 @@ pub struct ClientStats { pub tx_data_blocked: MovingStat, pub tx_acks: MovingStat, pub make_connection_ms: AtomicU64, + pub send_timeout: AtomicU64, } #[enum_dispatch] From 8a6028dea1a828813bad0b4d9c93e0026d8d1d52 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Tue, 15 Nov 2022 02:10:11 +0000 Subject: [PATCH 223/465] bigtable: add timeout to token refresh (backport #28728) (#28808) bigtable: add timeout to token refresh (#28728) Co-authored-by: Kirill Fomichev (cherry picked from commit 55985701ba0491a8db4b1c570d888c0a23f09515) Co-authored-by: Brandon Roberts <106782975+brandon-j-roberts@users.noreply.github.com> --- storage-bigtable/src/access_token.rs | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/storage-bigtable/src/access_token.rs b/storage-bigtable/src/access_token.rs index 3c2d596cf07081..c6664ba887fa7d 100644 --- a/storage-bigtable/src/access_token.rs +++ b/storage-bigtable/src/access_token.rs @@ -16,6 +16,7 @@ use { }, time::Instant, }, + tokio::time, }; fn load_credentials(filepath: Option) -> Result { @@ -109,15 +110,22 @@ impl AccessToken { } info!("Refreshing token"); - let new_token = Self::get_token(&self.credentials, &self.scope).await; + match time::timeout( + time::Duration::from_secs(5), + Self::get_token(&self.credentials, &self.scope), + ) + .await { - let mut token_w = self.token.write().unwrap(); - match new_token { - Ok(new_token) => *token_w = new_token, - Err(err) => warn!("{}", err), + Ok(new_token) => match (new_token, self.token.write()) { + (Ok(new_token), Ok(mut token_w)) => *token_w = new_token, + (Ok(_new_token), Err(err)) => warn!("{}", err), + (Err(err), _) => warn!("{}", err), + }, + Err(_) => { + warn!("Token refresh timeout") } - self.refresh_active.store(false, Ordering::Relaxed); } + self.refresh_active.store(false, Ordering::Relaxed); } /// Return an access token suitable for use in an HTTP authorization header From 0442111157a44cc221a5f2ede411a0eb8c6ef867 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Wed, 16 Nov 2022 04:56:08 +0000 Subject: [PATCH 224/465] signed repair request test fixes/cleanup (backport #28691) (#28825) signed repair request test fixes/cleanup (#28691) (cherry picked from commit e10d9583529a366128f87a1bd8912c831d5e851f) Co-authored-by: Jeff Biseda --- core/src/ancestor_hashes_service.rs | 15 +++++--- core/src/serve_repair.rs | 55 +++++++++++++++++++++-------- 2 files changed, 51 insertions(+), 19 deletions(-) diff --git a/core/src/ancestor_hashes_service.rs b/core/src/ancestor_hashes_service.rs index f8e3eb1dcb49c0..a040e23cb4f7ee 100644 --- a/core/src/ancestor_hashes_service.rs +++ b/core/src/ancestor_hashes_service.rs @@ -775,7 +775,10 @@ mod test { }, solana_ledger::{blockstore::make_many_slot_entries, get_tmp_ledger_path}, solana_runtime::{accounts_background_service::AbsRequestSender, bank_forks::BankForks}, - solana_sdk::{hash::Hash, signature::Keypair}, + solana_sdk::{ + hash::Hash, + signature::{Keypair, Signer}, + }, solana_streamer::socket::SocketAddrSpace, std::collections::HashMap, trees::tr, @@ -959,10 +962,11 @@ mod test { fn new(slot_to_query: Slot) -> Self { assert!(slot_to_query >= MAX_ANCESTOR_RESPONSES as Slot); let vote_simulator = VoteSimulator::new(3); - let responder_node = Node::new_localhost(); + let keypair = Keypair::new(); + let responder_node = Node::new_localhost_with_pubkey(&keypair.pubkey()); let cluster_info = ClusterInfo::new( responder_node.info.clone(), - Arc::new(Keypair::new()), + Arc::new(keypair), SocketAddrSpace::Unspecified, ); let responder_serve_repair = @@ -1044,9 +1048,10 @@ mod test { let ancestor_hashes_request_statuses = Arc::new(DashMap::new()); let ancestor_hashes_request_socket = Arc::new(UdpSocket::bind("0.0.0.0:0").unwrap()); let epoch_schedule = *bank_forks.read().unwrap().root_bank().epoch_schedule(); + let keypair = Keypair::new(); let requester_cluster_info = Arc::new(ClusterInfo::new( - Node::new_localhost().info, - Arc::new(Keypair::new()), + Node::new_localhost_with_pubkey(&keypair.pubkey()).info, + Arc::new(keypair), SocketAddrSpace::Unspecified, )); let requester_serve_repair = diff --git a/core/src/serve_repair.rs b/core/src/serve_repair.rs index 32f479ced9055d..e519c308a15b64 100644 --- a/core/src/serve_repair.rs +++ b/core/src/serve_repair.rs @@ -1375,10 +1375,8 @@ mod tests { #[test] fn test_verify_signed_packet() { - let keypair = Keypair::new(); + let my_keypair = Keypair::new(); let other_keypair = Keypair::new(); - let my_id = Pubkey::new_unique(); - let other_id = Pubkey::new_unique(); fn sign_packet(packet: &mut Packet, keypair: &Keypair) { let signable_data = [ @@ -1392,16 +1390,21 @@ mod tests { // well formed packet let packet = { - let header = RepairRequestHeader::new(keypair.pubkey(), my_id, timestamp(), 678); + let header = RepairRequestHeader::new( + my_keypair.pubkey(), + other_keypair.pubkey(), + timestamp(), + 678, + ); let slot = 239847; let request = RepairProtocol::Orphan { header, slot }; let mut packet = Packet::from_data(None, &request).unwrap(); - sign_packet(&mut packet, &keypair); + sign_packet(&mut packet, &my_keypair); packet }; let request: RepairProtocol = packet.deserialize_slice(..).unwrap(); assert!(ServeRepair::verify_signed_packet( - &my_id, + &other_keypair.pubkey(), &packet, &request, &mut ServeRepairStats::default(), @@ -1409,17 +1412,25 @@ mod tests { // recipient mismatch let packet = { - let header = RepairRequestHeader::new(keypair.pubkey(), other_id, timestamp(), 678); + let header = RepairRequestHeader::new( + my_keypair.pubkey(), + other_keypair.pubkey(), + timestamp(), + 678, + ); let slot = 239847; let request = RepairProtocol::Orphan { header, slot }; let mut packet = Packet::from_data(None, &request).unwrap(); - sign_packet(&mut packet, &keypair); + sign_packet(&mut packet, &my_keypair); packet }; let request: RepairProtocol = packet.deserialize_slice(..).unwrap(); let mut stats = ServeRepairStats::default(); assert!(!ServeRepair::verify_signed_packet( - &my_id, &packet, &request, &mut stats, + &my_keypair.pubkey(), + &packet, + &request, + &mut stats, )); assert_eq!(stats.err_id_mismatch, 1); @@ -1427,23 +1438,36 @@ mod tests { let packet = { let time_diff_ms = u64::try_from(SIGNED_REPAIR_TIME_WINDOW.as_millis() * 2).unwrap(); let old_timestamp = timestamp().saturating_sub(time_diff_ms); - let header = RepairRequestHeader::new(keypair.pubkey(), my_id, old_timestamp, 678); + let header = RepairRequestHeader::new( + my_keypair.pubkey(), + other_keypair.pubkey(), + old_timestamp, + 678, + ); let slot = 239847; let request = RepairProtocol::Orphan { header, slot }; let mut packet = Packet::from_data(None, &request).unwrap(); - sign_packet(&mut packet, &keypair); + sign_packet(&mut packet, &my_keypair); packet }; let request: RepairProtocol = packet.deserialize_slice(..).unwrap(); let mut stats = ServeRepairStats::default(); assert!(!ServeRepair::verify_signed_packet( - &my_id, &packet, &request, &mut stats, + &other_keypair.pubkey(), + &packet, + &request, + &mut stats, )); assert_eq!(stats.err_time_skew, 1); // bad signature let packet = { - let header = RepairRequestHeader::new(keypair.pubkey(), my_id, timestamp(), 678); + let header = RepairRequestHeader::new( + my_keypair.pubkey(), + other_keypair.pubkey(), + timestamp(), + 678, + ); let slot = 239847; let request = RepairProtocol::Orphan { header, slot }; let mut packet = Packet::from_data(None, &request).unwrap(); @@ -1453,7 +1477,10 @@ mod tests { let request: RepairProtocol = packet.deserialize_slice(..).unwrap(); let mut stats = ServeRepairStats::default(); assert!(!ServeRepair::verify_signed_packet( - &my_id, &packet, &request, &mut stats, + &other_keypair.pubkey(), + &packet, + &request, + &mut stats, )); assert_eq!(stats.err_sig_verify, 1); } From ef5b801c063dabeb00b064900ad4fe87a3a7647c Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Thu, 17 Nov 2022 00:09:59 +0000 Subject: [PATCH 225/465] Fix client get_program_accounts_with_config calls with context (backport #28772) (#28847) * Fix client get_program_accounts_with_config calls with context (#28772) * Move OptionalContext to solana-rpc-client-api * Add helper function * Add failing test * Support OptionalContext in RpcClient::get_program_accounts_with_config (cherry picked from commit b18ef88c4035f5e8a3d1667dadf8202581897f83) # Conflicts: # rpc/src/rpc.rs * Fix conflicts Co-authored-by: Tyera Eulberg --- client/src/nonblocking/rpc_client.rs | 8 +-- client/src/rpc_client.rs | 79 ++++++++++++++++++++++++++++ client/src/rpc_response.rs | 19 +++++++ rpc/src/rpc.rs | 11 ---- 4 files changed, 103 insertions(+), 14 deletions(-) diff --git a/client/src/nonblocking/rpc_client.rs b/client/src/nonblocking/rpc_client.rs index a63289ee8a1504..e48b49db7b2c21 100644 --- a/client/src/nonblocking/rpc_client.rs +++ b/client/src/nonblocking/rpc_client.rs @@ -4518,12 +4518,14 @@ impl RpcClient { if let Some(filters) = config.filters { config.filters = Some(self.maybe_map_filters(filters).await?); } - let accounts: Vec = self - .send( + + let accounts = self + .send::>>( RpcRequest::GetProgramAccounts, json!([pubkey.to_string(), config]), ) - .await?; + .await? + .parse_value(); parse_keyed_accounts(accounts, RpcRequest::GetProgramAccounts) } diff --git a/client/src/rpc_client.rs b/client/src/rpc_client.rs index 53400fbce61777..4c1e805a9ea8b4 100644 --- a/client/src/rpc_client.rs +++ b/client/src/rpc_client.rs @@ -4431,4 +4431,83 @@ mod tests { assert_eq!(expected_minimum_delegation, actual_minimum_delegation); } } + + #[test] + fn test_get_program_accounts_with_config() { + let program_id = Pubkey::new_unique(); + let pubkey = Pubkey::new_unique(); + let account = Account { + lamports: 1_000_000, + data: vec![], + owner: program_id, + executable: false, + rent_epoch: 0, + }; + let keyed_account = RpcKeyedAccount { + pubkey: pubkey.to_string(), + account: UiAccount::encode(&pubkey, &account, UiAccountEncoding::Base64, None, None), + }; + let expected_result = vec![(pubkey, account)]; + // Test: without context + { + let mocks: Mocks = [( + RpcRequest::GetProgramAccounts, + serde_json::to_value(OptionalContext::NoContext(vec![keyed_account.clone()])) + .unwrap(), + )] + .into_iter() + .collect(); + let rpc_client = RpcClient::new_mock_with_mocks("mock_client".to_string(), mocks); + let result = rpc_client + .get_program_accounts_with_config( + &program_id, + RpcProgramAccountsConfig { + filters: None, + account_config: RpcAccountInfoConfig { + encoding: Some(UiAccountEncoding::Base64), + data_slice: None, + commitment: None, + min_context_slot: None, + }, + with_context: None, + }, + ) + .unwrap(); + assert_eq!(expected_result, result); + } + + // Test: with context + { + let mocks: Mocks = [( + RpcRequest::GetProgramAccounts, + serde_json::to_value(OptionalContext::Context(Response { + context: RpcResponseContext { + slot: 1, + api_version: None, + }, + value: vec![keyed_account], + })) + .unwrap(), + )] + .into_iter() + .collect(); + let rpc_client = RpcClient::new_mock_with_mocks("mock_client".to_string(), mocks); + let result = rpc_client + .get_program_accounts_with_config( + &program_id, + RpcProgramAccountsConfig { + filters: None, + account_config: RpcAccountInfoConfig { + encoding: Some(UiAccountEncoding::Base64), + data_slice: None, + commitment: None, + min_context_slot: None, + }, + with_context: Some(true), + }, + ) + .unwrap(); + assert_eq!(expected_result, result); + } + } } diff --git a/client/src/rpc_response.rs b/client/src/rpc_response.rs index f7158ff88ae04a..79a3429a478fb9 100644 --- a/client/src/rpc_response.rs +++ b/client/src/rpc_response.rs @@ -17,6 +17,25 @@ use { thiserror::Error, }; +/// Wrapper for rpc return types of methods that provide responses both with and without context. +/// Main purpose of this is to fix methods that lack context information in their return type, +/// without breaking backwards compatibility. +#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] +#[serde(untagged)] +pub enum OptionalContext { + Context(Response), + NoContext(T), +} + +impl OptionalContext { + pub fn parse_value(self) -> T { + match self { + Self::Context(response) => response.value, + Self::NoContext(value) => value, + } + } +} + pub type RpcResult = client_error::Result>; #[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] diff --git a/rpc/src/rpc.rs b/rpc/src/rpc.rs index 43d7078914f1e6..e3b2bf49208168 100644 --- a/rpc/src/rpc.rs +++ b/rpc/src/rpc.rs @@ -9,7 +9,6 @@ use { crossbeam_channel::{unbounded, Receiver, Sender}, jsonrpc_core::{futures::future, types::error, BoxFuture, Error, Metadata, Result}, jsonrpc_derive::rpc, - serde::{Deserialize, Serialize}, solana_account_decoder::{ parse_token::{is_known_spl_token_id, token_amount_to_ui_amount, UiTokenAmount}, UiAccount, UiAccountEncoding, UiDataSliceConfig, MAX_BASE58_BYTES, @@ -126,16 +125,6 @@ fn new_response(bank: &Bank, value: T) -> RpcResponse { } } -/// Wrapper for rpc return types of methods that provide responses both with and without context. -/// Main purpose of this is to fix methods that lack context information in their return type, -/// without breaking backwards compatibility. -#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] -#[serde(untagged)] -pub enum OptionalContext { - Context(RpcResponse), - NoContext(T), -} - fn is_finalized( block_commitment_cache: &BlockCommitmentCache, bank: &Bank, From 8ad913621ce61f5cb1409a0763297e809a0c8407 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Thu, 17 Nov 2022 07:00:45 +0000 Subject: [PATCH 226/465] Cap accounts data a transaction can load by its requested limit (backport #27840) (#28797) * Cap accounts data a transaction can load by its requested limit (#27840) - Add new compute-budget instruction to set transaction-wide accounts data size limit - Set default accounts data limit to 10MB, and max to 100MB, per transaction; - Add getters to make changing default and/or max values easier in the future with feature gates; - added error counter for transactions exceed data size limit (cherry picked from commit 81dc2e56ace6705a97ab64e5f360222f0160a3de) # Conflicts: # core/src/transaction_priority_details.rs # program-runtime/src/compute_budget.rs # programs/bpf/tests/programs.rs # runtime/src/accounts.rs # runtime/src/bank.rs # sdk/src/feature_set.rs * manual fix backport conflicts Co-authored-by: Tao Zhu <82401714+taozhu-chicago@users.noreply.github.com> Co-authored-by: Tao Zhu --- core/src/transaction_priority_details.rs | 9 +- .../developing/programming-model/runtime.md | 20 +- ledger/src/blockstore_processor.rs | 6 +- program-runtime/src/compute_budget.rs | 131 +++++++ programs/bpf-loader-tests/tests/common.rs | 4 +- .../tests/extend_program_ix.rs | 40 +- programs/bpf/tests/programs.rs | 168 +++++--- runtime/src/accounts.rs | 370 +++++++++++++++++- runtime/src/bank.rs | 223 ++++++++--- runtime/src/transaction_error_metrics.rs | 20 + sdk/src/compute_budget.rs | 7 + sdk/src/feature_set.rs | 5 + sdk/src/transaction/error.rs | 10 + storage-proto/proto/transaction_by_addr.proto | 2 + storage-proto/src/convert.rs | 8 + 15 files changed, 854 insertions(+), 169 deletions(-) diff --git a/core/src/transaction_priority_details.rs b/core/src/transaction_priority_details.rs index 7f816cad2a879a..fa7872e0e46eff 100644 --- a/core/src/transaction_priority_details.rs +++ b/core/src/transaction_priority_details.rs @@ -1,5 +1,5 @@ use { - solana_program_runtime::compute_budget::ComputeBudget, + solana_program_runtime::compute_budget::{self, ComputeBudget}, solana_sdk::{ instruction::CompiledInstruction, pubkey::Pubkey, @@ -23,8 +23,11 @@ pub trait GetTransactionPriorityDetails { let prioritization_fee_details = compute_budget .process_instructions( instructions, - true, // use default units per instruction - true, // don't reject txs that use set compute unit price ix + true, // use default units per instruction + true, // don't reject txs that use set compute unit price ix + false, //transaction priority doesn't care about accounts data size limit, + compute_budget::LoadedAccountsDataLimitType::V0, // transaction priority doesn't + // care about accounts data size limit. ) .ok()?; Some(TransactionPriorityDetails { diff --git a/docs/src/developing/programming-model/runtime.md b/docs/src/developing/programming-model/runtime.md index ac8284b723d92e..c33fec99cdab2e 100644 --- a/docs/src/developing/programming-model/runtime.md +++ b/docs/src/developing/programming-model/runtime.md @@ -54,8 +54,9 @@ to. As the transaction is processed compute units are consumed by its instruction's programs performing operations such as executing BPF instructions, calling syscalls, etc... When the transaction consumes its entire budget, or -exceeds a bound such as attempting a call stack that is too deep, the runtime -halts the transaction processing and returns an error. +exceeds a bound such as attempting a call stack that is too deep, or loaded +account data exceeds limit, the runtime halts the transaction processing and +returns an error. The following operations incur a compute cost: @@ -143,6 +144,21 @@ let instruction = ComputeBudgetInstruction::set_compute_unit_limit(300_000); let instruction = ComputeBudgetInstruction::set_compute_unit_price(1); ``` +### Accounts data size limit + +A transaction should request the maximum bytes of accounts data it is +allowed to load by including a `SetAccountsDataSizeLimit` instruction, requested +limit is capped by `get_max_loaded_accounts_data_limit()`. If no +`SetAccountsDataSizeLimit` is provided, the transaction is defaulted to +have limit of `get_default_loaded_accounts_data_limit()`. + +The `ComputeBudgetInstruction::set_accounts_data_size_limit` function can be used +to create this instruction: + +```rust +let instruction = ComputeBudgetInstruction::set_accounts_data_size_limit(100_000); +``` + ## New Features As Solana evolves, new features or patches may be introduced that changes the diff --git a/ledger/src/blockstore_processor.rs b/ledger/src/blockstore_processor.rs index a51612886c001c..fdfc2550f46b87 100644 --- a/ledger/src/blockstore_processor.rs +++ b/ledger/src/blockstore_processor.rs @@ -4674,6 +4674,7 @@ pub mod tests { use { super::*, serde::{Deserialize, Serialize}, + solana_sdk::compute_budget::ComputeBudgetInstruction, }; #[derive(Debug, Serialize, Deserialize)] @@ -4713,7 +4714,10 @@ pub mod tests { account_metas, ); Transaction::new_signed_with_payer( - &[instruction], + &[ + instruction, + ComputeBudgetInstruction::set_accounts_data_size_limit(u32::MAX), + ], Some(&payer.pubkey()), &[payer], recent_blockhash, diff --git a/program-runtime/src/compute_budget.rs b/program-runtime/src/compute_budget.rs index 2880cc9d69162c..b6216b2ec750a0 100644 --- a/program-runtime/src/compute_budget.rs +++ b/program-runtime/src/compute_budget.rs @@ -14,6 +14,33 @@ pub const DEFAULT_INSTRUCTION_COMPUTE_UNIT_LIMIT: u32 = 200_000; pub const MAX_COMPUTE_UNIT_LIMIT: u32 = 1_400_000; const MAX_HEAP_FRAME_BYTES: u32 = 256 * 1024; +/// To change `default` and/or `max` values for `accounts_data_size_limit` in the future, +/// add new enum type here, link to feature gate, and implement the enum in +/// `get_default_loaded_accounts_data_limit()` and/or `get_max_loaded_accounts_data_limit()`. +#[derive(Debug)] +pub enum LoadedAccountsDataLimitType { + V0, + // add future versions here +} + +/// Get default value of `ComputeBudget::accounts_data_size_limit` if not set specifically. It +/// sets to 10MB initially, may be changed with feature gate. +const DEFAULT_LOADED_ACCOUNTS_DATA_LIMIT: u32 = 10_000_000; +pub fn get_default_loaded_accounts_data_limit(limit_type: &LoadedAccountsDataLimitType) -> u32 { + match limit_type { + LoadedAccountsDataLimitType::V0 => DEFAULT_LOADED_ACCOUNTS_DATA_LIMIT, + } +} +/// Get max value of `ComputeBudget::accounts_data_size_limit`, it caps value user +/// sets via `ComputeBudgetInstruction::set_compute_unit_limit`. It is set to 100MB +/// initially, can be changed with feature gate. +const MAX_LOADED_ACCOUNTS_DATA_LIMIT: u32 = 100_000_000; +pub fn get_max_loaded_accounts_data_limit(limit_type: &LoadedAccountsDataLimitType) -> u32 { + match limit_type { + LoadedAccountsDataLimitType::V0 => MAX_LOADED_ACCOUNTS_DATA_LIMIT, + } +} + #[cfg(RUSTC_WITH_SPECIALIZATION)] impl ::solana_frozen_abi::abi_example::AbiExample for ComputeBudget { fn example() -> Self { @@ -28,6 +55,8 @@ pub struct ComputeBudget { /// allowed to consume. Compute units are consumed by program execution, /// resources they use, etc... pub compute_unit_limit: u64, + /// Maximum accounts data size, in bytes, that a transaction is allowed to load + pub accounts_data_size_limit: u64, /// Number of compute units consumed by a log_u64 call pub log_64_units: u64, /// Number of compute units consumed by a create_program_address call @@ -94,6 +123,7 @@ impl ComputeBudget { pub fn new(compute_unit_limit: u64) -> Self { ComputeBudget { compute_unit_limit, + accounts_data_size_limit: DEFAULT_LOADED_ACCOUNTS_DATA_LIMIT as u64, log_64_units: 100, create_program_address_units: 1500, invoke_units: 1000, @@ -128,11 +158,14 @@ impl ComputeBudget { instructions: impl Iterator, default_units_per_instruction: bool, support_set_compute_unit_price_ix: bool, + cap_transaction_accounts_data_size: bool, + loaded_accounts_data_limit_type: LoadedAccountsDataLimitType, ) -> Result { let mut num_non_compute_budget_instructions: usize = 0; let mut updated_compute_unit_limit = None; let mut requested_heap_size = None; let mut prioritization_fee = None; + let mut updated_accounts_data_size_limit = None; for (i, (program_id, instruction)) in instructions.enumerate() { if compute_budget::check_id(program_id) { @@ -178,6 +211,14 @@ impl ComputeBudget { prioritization_fee = Some(PrioritizationFeeType::ComputeUnitPrice(micro_lamports)); } + Ok(ComputeBudgetInstruction::SetAccountsDataSizeLimit(bytes)) + if cap_transaction_accounts_data_size => + { + if updated_accounts_data_size_limit.is_some() { + return Err(duplicate_instruction_error); + } + updated_accounts_data_size_limit = Some(bytes); + } _ => return Err(invalid_instruction_data_error), } } else if i < 3 { @@ -234,6 +275,14 @@ impl ComputeBudget { .unwrap_or(MAX_COMPUTE_UNIT_LIMIT) .min(MAX_COMPUTE_UNIT_LIMIT) as u64; + self.accounts_data_size_limit = updated_accounts_data_size_limit + .unwrap_or_else(|| { + get_default_loaded_accounts_data_limit(&loaded_accounts_data_limit_type) + }) + .min(get_max_loaded_accounts_data_limit( + &loaded_accounts_data_limit_type, + )) as u64; + Ok(prioritization_fee .map(|fee_type| PrioritizationFeeDetails::new(fee_type, self.compute_unit_limit)) .unwrap_or_default()) @@ -279,6 +328,8 @@ mod tests { tx.message().program_instructions_iter(), true, $type_change, + true, /*supports cap transaction accounts data size feature*/ + LoadedAccountsDataLimitType::V0, ); assert_eq!($expected_result, result); assert_eq!(compute_budget, $expected_budget); @@ -602,4 +653,84 @@ mod tests { ComputeBudget::default() ); } + + #[test] + fn test_process_accounts_data_size_limit_instruction() { + test!( + &[], + Ok(PrioritizationFeeDetails::default()), + ComputeBudget { + compute_unit_limit: 0, + ..ComputeBudget::default() + } + ); + test!( + &[ + ComputeBudgetInstruction::set_accounts_data_size_limit(1), + Instruction::new_with_bincode(Pubkey::new_unique(), &0_u8, vec![]), + ], + Ok(PrioritizationFeeDetails::default()), + ComputeBudget { + compute_unit_limit: DEFAULT_INSTRUCTION_COMPUTE_UNIT_LIMIT as u64, + accounts_data_size_limit: 1, + ..ComputeBudget::default() + } + ); + test!( + &[ + ComputeBudgetInstruction::set_accounts_data_size_limit( + get_max_loaded_accounts_data_limit(&LoadedAccountsDataLimitType::V0) + 1 + ), + Instruction::new_with_bincode(Pubkey::new_unique(), &0_u8, vec![]), + ], + Ok(PrioritizationFeeDetails::default()), + ComputeBudget { + compute_unit_limit: DEFAULT_INSTRUCTION_COMPUTE_UNIT_LIMIT as u64, + accounts_data_size_limit: get_max_loaded_accounts_data_limit( + &LoadedAccountsDataLimitType::V0 + ) as u64, + ..ComputeBudget::default() + } + ); + test!( + &[ + Instruction::new_with_bincode(Pubkey::new_unique(), &0_u8, vec![]), + ComputeBudgetInstruction::set_accounts_data_size_limit( + get_max_loaded_accounts_data_limit(&LoadedAccountsDataLimitType::V0) + ), + ], + Ok(PrioritizationFeeDetails::default()), + ComputeBudget { + compute_unit_limit: DEFAULT_INSTRUCTION_COMPUTE_UNIT_LIMIT as u64, + accounts_data_size_limit: get_max_loaded_accounts_data_limit( + &LoadedAccountsDataLimitType::V0 + ) as u64, + ..ComputeBudget::default() + } + ); + test!( + &[ + Instruction::new_with_bincode(Pubkey::new_unique(), &0_u8, vec![]), + Instruction::new_with_bincode(Pubkey::new_unique(), &0_u8, vec![]), + Instruction::new_with_bincode(Pubkey::new_unique(), &0_u8, vec![]), + ComputeBudgetInstruction::set_accounts_data_size_limit(1), + ], + Ok(PrioritizationFeeDetails::default()), + ComputeBudget { + compute_unit_limit: 3 * DEFAULT_INSTRUCTION_COMPUTE_UNIT_LIMIT as u64, + accounts_data_size_limit: 1, + ..ComputeBudget::default() + } + ); + + test!( + &[ + Instruction::new_with_bincode(Pubkey::new_unique(), &0_u8, vec![]), + ComputeBudgetInstruction::set_accounts_data_size_limit(1), + ComputeBudgetInstruction::set_accounts_data_size_limit(1), + ], + Err(TransactionError::DuplicateInstruction(2)), + ComputeBudget::default() + ); + } } diff --git a/programs/bpf-loader-tests/tests/common.rs b/programs/bpf-loader-tests/tests/common.rs index 5b735b829c3cb2..b2ecceea20c8eb 100644 --- a/programs/bpf-loader-tests/tests/common.rs +++ b/programs/bpf-loader-tests/tests/common.rs @@ -21,7 +21,7 @@ pub async fn setup_test_context() -> ProgramTestContext { pub async fn assert_ix_error( context: &mut ProgramTestContext, - ix: Instruction, + ixs: &[Instruction], additional_payer_keypair: Option<&Keypair>, expected_err: InstructionError, assertion_failed_msg: &str, @@ -36,7 +36,7 @@ pub async fn assert_ix_error( } let transaction = Transaction::new_signed_with_payer( - &[ix], + ixs, Some(&fee_payer.pubkey()), &signers, recent_blockhash, diff --git a/programs/bpf-loader-tests/tests/extend_program_ix.rs b/programs/bpf-loader-tests/tests/extend_program_ix.rs index 7c928446e54579..a7bb06e08ed583 100644 --- a/programs/bpf-loader-tests/tests/extend_program_ix.rs +++ b/programs/bpf-loader-tests/tests/extend_program_ix.rs @@ -6,6 +6,7 @@ use { account::{AccountSharedData, ReadableAccount}, account_utils::StateMut, bpf_loader_upgradeable::{extend_program, id, UpgradeableLoaderState}, + compute_budget::ComputeBudgetInstruction, instruction::InstructionError, pubkey::Pubkey, signature::{Keypair, Signer}, @@ -100,7 +101,7 @@ async fn test_extend_program_not_upgradeable() { let payer_address = context.payer.pubkey(); assert_ix_error( &mut context, - extend_program(&program_address, Some(&payer_address), 42), + &[extend_program(&program_address, Some(&payer_address), 42)], None, InstructionError::Immutable, "should fail because the program data account isn't upgradeable", @@ -137,7 +138,7 @@ async fn test_extend_program_by_zero_bytes() { let payer_address = context.payer.pubkey(); assert_ix_error( &mut context, - extend_program(&program_address, Some(&payer_address), 0), + &[extend_program(&program_address, Some(&payer_address), 0)], None, InstructionError::InvalidInstructionData, "should fail because the program data account must be extended by more than 0 bytes", @@ -174,7 +175,12 @@ async fn test_extend_program_past_max_size() { let payer_address = context.payer.pubkey(); assert_ix_error( &mut context, - extend_program(&program_address, Some(&payer_address), 1), + &[ + extend_program(&program_address, Some(&payer_address), 1), + // To request large transaction accounts data size to allow max sized test + // instruction being loaded and processed. + ComputeBudgetInstruction::set_accounts_data_size_limit(u32::MAX), + ], None, InstructionError::InvalidRealloc, "should fail because the program data account cannot be extended past the max data size", @@ -229,11 +235,11 @@ async fn test_extend_program_with_invalid_payer() { assert_ix_error( &mut context, - extend_program( + &[extend_program( &program_address, Some(&payer_with_insufficient_funds.pubkey()), 1024, - ), + )], Some(&payer_with_insufficient_funds), InstructionError::from(SystemError::ResultWithNegativeLamports), "should fail because the payer has insufficient funds to cover program data account rent", @@ -242,11 +248,11 @@ async fn test_extend_program_with_invalid_payer() { assert_ix_error( &mut context, - extend_program( + &[extend_program( &program_address, Some(&payer_with_invalid_owner.pubkey()), 1, - ), + )], Some(&payer_with_invalid_owner), InstructionError::ExternalAccountLamportSpend, "should fail because the payer is not a system account", @@ -271,7 +277,7 @@ async fn test_extend_program_with_invalid_payer() { assert_ix_error( &mut context, - ix, + &[ix], None, InstructionError::PrivilegeEscalation, "should fail because the payer did not sign", @@ -309,7 +315,7 @@ async fn test_extend_program_without_payer() { assert_ix_error( &mut context, - extend_program(&program_address, None, 1024), + &[extend_program(&program_address, None, 1024)], None, InstructionError::NotEnoughAccountKeys, "should fail because program data has insufficient funds to cover rent", @@ -393,7 +399,7 @@ async fn test_extend_program_with_invalid_system_program() { assert_ix_error( &mut context, - ix, + &[ix], None, InstructionError::MissingAccount, "should fail because the system program is missing", @@ -444,7 +450,7 @@ async fn test_extend_program_with_mismatch_program_data() { assert_ix_error( &mut context, - ix, + &[ix], None, InstructionError::InvalidArgument, "should fail because the program data account doesn't match the program", @@ -493,7 +499,7 @@ async fn test_extend_program_with_readonly_program_data() { assert_ix_error( &mut context, - ix, + &[ix], None, InstructionError::InvalidArgument, "should fail because the program data account is not writable", @@ -531,7 +537,7 @@ async fn test_extend_program_with_invalid_program_data_state() { assert_ix_error( &mut context, - extend_program(&program_address, Some(&payer_address), 1024), + &[extend_program(&program_address, Some(&payer_address), 1024)], None, InstructionError::InvalidAccountData, "should fail because the program data account state isn't valid", @@ -571,7 +577,7 @@ async fn test_extend_program_with_invalid_program_data_owner() { assert_ix_error( &mut context, - extend_program(&program_address, Some(&payer_address), 1024), + &[extend_program(&program_address, Some(&payer_address), 1024)], None, InstructionError::InvalidAccountOwner, "should fail because the program data account owner isn't valid", @@ -620,7 +626,7 @@ async fn test_extend_program_with_readonly_program() { assert_ix_error( &mut context, - ix, + &[ix], None, InstructionError::InvalidArgument, "should fail because the program account is not writable", @@ -666,7 +672,7 @@ async fn test_extend_program_with_invalid_program_owner() { assert_ix_error( &mut context, - extend_program(&program_address, Some(&payer_address), 1024), + &[extend_program(&program_address, Some(&payer_address), 1024)], None, InstructionError::InvalidAccountOwner, "should fail because the program account owner isn't valid", @@ -706,7 +712,7 @@ async fn test_extend_program_with_invalid_program_state() { assert_ix_error( &mut context, - extend_program(&program_address, Some(&payer_address), 1024), + &[extend_program(&program_address, Some(&payer_address), 1024)], None, InstructionError::InvalidAccountData, "should fail because the program account state isn't valid", diff --git a/programs/bpf/tests/programs.rs b/programs/bpf/tests/programs.rs index 186841d4f8cb38..4d109083772df6 100644 --- a/programs/bpf/tests/programs.rs +++ b/programs/bpf/tests/programs.rs @@ -20,7 +20,8 @@ use { solana_bpf_rust_realloc_invoke::instructions::*, solana_ledger::token_balances::collect_token_balances, solana_program_runtime::{ - compute_budget::ComputeBudget, invoke_context::with_mock_invoke_context, + compute_budget::{self, ComputeBudget}, + invoke_context::with_mock_invoke_context, timings::ExecuteTimings, }, solana_rbpf::{ @@ -2981,13 +2982,17 @@ fn test_program_bpf_realloc() { .send_and_confirm_message( signer, Message::new( - &[realloc_extend_and_fill( - &program_id, - &pubkey, - MAX_PERMITTED_DATA_INCREASE, - 1, - &mut bump, - )], + &[ + realloc_extend_and_fill( + &program_id, + &pubkey, + MAX_PERMITTED_DATA_INCREASE, + 1, + &mut bump, + ), + // Request max transaction accounts data size to allow large instruction + ComputeBudgetInstruction::set_accounts_data_size_limit(u32::MAX), + ], Some(&mint_pubkey), ), ) @@ -3005,12 +3010,16 @@ fn test_program_bpf_realloc() { .send_and_confirm_message( signer, Message::new( - &[realloc_extend( - &program_id, - &pubkey, - MAX_PERMITTED_DATA_INCREASE, - &mut bump - )], + &[ + realloc_extend( + &program_id, + &pubkey, + MAX_PERMITTED_DATA_INCREASE, + &mut bump + ), + // Request max transaction accounts data size to allow large instruction + ComputeBudgetInstruction::set_accounts_data_size_limit(u32::MAX), + ], Some(&mint_pubkey), ) ) @@ -3024,7 +3033,10 @@ fn test_program_bpf_realloc() { .send_and_confirm_message( signer, Message::new( - &[realloc(&program_id, &pubkey, 0, &mut bump)], + &[ + realloc(&program_id, &pubkey, 0, &mut bump), + ComputeBudgetInstruction::set_accounts_data_size_limit(u32::MAX), + ], Some(&mint_pubkey), ), ) @@ -3228,14 +3240,18 @@ fn test_program_bpf_realloc_invoke() { .send_and_confirm_message( signer, Message::new( - &[Instruction::new_with_bytes( - realloc_invoke_program_id, - &[INVOKE_REALLOC_MAX_PLUS_ONE], - vec![ - AccountMeta::new(pubkey, false), - AccountMeta::new_readonly(realloc_program_id, false), - ], - )], + &[ + Instruction::new_with_bytes( + realloc_invoke_program_id, + &[INVOKE_REALLOC_MAX_PLUS_ONE], + vec![ + AccountMeta::new(pubkey, false), + AccountMeta::new_readonly(realloc_program_id, false), + ], + ), + // Request max transaction accounts data size to allow large instruction + ComputeBudgetInstruction::set_accounts_data_size_limit(u32::MAX), + ], Some(&mint_pubkey), ) ) @@ -3250,14 +3266,18 @@ fn test_program_bpf_realloc_invoke() { .send_and_confirm_message( signer, Message::new( - &[Instruction::new_with_bytes( - realloc_invoke_program_id, - &[INVOKE_REALLOC_MAX_TWICE], - vec![ - AccountMeta::new(pubkey, false), - AccountMeta::new_readonly(realloc_program_id, false), - ], - )], + &[ + Instruction::new_with_bytes( + realloc_invoke_program_id, + &[INVOKE_REALLOC_MAX_TWICE], + vec![ + AccountMeta::new(pubkey, false), + AccountMeta::new_readonly(realloc_program_id, false), + ], + ), + // Request max transaction accounts data size to allow large instruction + ComputeBudgetInstruction::set_accounts_data_size_limit(u32::MAX), + ], Some(&mint_pubkey), ) ) @@ -3480,14 +3500,18 @@ fn test_program_bpf_realloc_invoke() { .send_and_confirm_message( signer, Message::new( - &[Instruction::new_with_bytes( - realloc_invoke_program_id, - &[INVOKE_REALLOC_MAX_INVOKE_MAX], - vec![ - AccountMeta::new(invoke_pubkey, false), - AccountMeta::new_readonly(realloc_program_id, false), - ], - )], + &[ + Instruction::new_with_bytes( + realloc_invoke_program_id, + &[INVOKE_REALLOC_MAX_INVOKE_MAX], + vec![ + AccountMeta::new(invoke_pubkey, false), + AccountMeta::new_readonly(realloc_program_id, false), + ], + ), + // Request max transaction accounts data size to allow large instruction + ComputeBudgetInstruction::set_accounts_data_size_limit(u32::MAX), + ], Some(&mint_pubkey), ) ) @@ -3549,15 +3573,19 @@ fn test_program_bpf_realloc_invoke() { .send_and_confirm_message( signer, Message::new( - &[Instruction::new_with_bytes( - realloc_invoke_program_id, - &[INVOKE_INVOKE_MAX_TWICE], - vec![ - AccountMeta::new(invoke_pubkey, false), - AccountMeta::new_readonly(realloc_invoke_program_id, false), - AccountMeta::new_readonly(realloc_program_id, false), - ], - )], + &[ + Instruction::new_with_bytes( + realloc_invoke_program_id, + &[INVOKE_INVOKE_MAX_TWICE], + vec![ + AccountMeta::new(invoke_pubkey, false), + AccountMeta::new_readonly(realloc_invoke_program_id, false), + AccountMeta::new_readonly(realloc_program_id, false), + ], + ), + // Request max transaction accounts data size to allow large instruction + ComputeBudgetInstruction::set_accounts_data_size_limit(u32::MAX), + ], Some(&mint_pubkey), ) ) @@ -3585,14 +3613,18 @@ fn test_program_bpf_realloc_invoke() { .send_and_confirm_message( signer, Message::new( - &[Instruction::new_with_bytes( - realloc_invoke_program_id, - &[INVOKE_REALLOC_EXTEND_MAX, 1, i as u8, (i / 255) as u8], - vec![ - AccountMeta::new(pubkey, false), - AccountMeta::new_readonly(realloc_program_id, false), - ], - )], + &[ + Instruction::new_with_bytes( + realloc_invoke_program_id, + &[INVOKE_REALLOC_EXTEND_MAX, 1, i as u8, (i / 255) as u8], + vec![ + AccountMeta::new(pubkey, false), + AccountMeta::new_readonly(realloc_program_id, false), + ], + ), + // Request max transaction accounts data size to allow large instruction + ComputeBudgetInstruction::set_accounts_data_size_limit(u32::MAX), + ], Some(&mint_pubkey), ), ) @@ -3610,14 +3642,18 @@ fn test_program_bpf_realloc_invoke() { .send_and_confirm_message( signer, Message::new( - &[Instruction::new_with_bytes( - realloc_invoke_program_id, - &[INVOKE_REALLOC_EXTEND_MAX, 2, 1, 1], - vec![ - AccountMeta::new(pubkey, false), - AccountMeta::new_readonly(realloc_program_id, false), - ], - )], + &[ + Instruction::new_with_bytes( + realloc_invoke_program_id, + &[INVOKE_REALLOC_EXTEND_MAX, 2, 1, 1], + vec![ + AccountMeta::new(pubkey, false), + AccountMeta::new_readonly(realloc_program_id, false), + ], + ), + // Request max transaction accounts data size to allow large instruction + ComputeBudgetInstruction::set_accounts_data_size_limit(u32::MAX), + ], Some(&mint_pubkey), ) ) @@ -3782,6 +3818,8 @@ fn test_program_fees() { &fee_structure, true, true, + false, + compute_budget::LoadedAccountsDataLimitType::V0, ); bank_client .send_and_confirm_message(&[&mint_keypair], message) @@ -3804,6 +3842,8 @@ fn test_program_fees() { &fee_structure, true, true, + false, + compute_budget::LoadedAccountsDataLimitType::V0, ); assert!(expected_normal_fee < expected_prioritized_fee); diff --git a/runtime/src/accounts.rs b/runtime/src/accounts.rs index 68b9062923ce9f..b9b3c20fda0103 100644 --- a/runtime/src/accounts.rs +++ b/runtime/src/accounts.rs @@ -29,14 +29,16 @@ use { log::*, rand::{thread_rng, Rng}, solana_address_lookup_table_program::{error::AddressLookupError, state::AddressLookupTable}, + solana_program_runtime::compute_budget::ComputeBudget, solana_sdk::{ account::{Account, AccountSharedData, ReadableAccount, WritableAccount}, account_utils::StateMut, bpf_loader_upgradeable::{self, UpgradeableLoaderState}, clock::{BankId, Slot, INITIAL_RENT_EPOCH}, feature_set::{ - self, add_set_compute_unit_price_ix, return_none_for_zero_lamport_accounts, - use_default_units_in_fee_calculation, FeatureSet, + self, add_set_compute_unit_price_ix, cap_transaction_accounts_data_size, + return_none_for_zero_lamport_accounts, use_default_units_in_fee_calculation, + FeatureSet, }, fee::FeeStructure, genesis_config::ClusterType, @@ -61,6 +63,7 @@ use { std::{ cmp::Reverse, collections::{hash_map, BinaryHeap, HashMap, HashSet}, + num::NonZeroUsize, ops::RangeBounds, path::PathBuf, sync::{ @@ -277,17 +280,31 @@ impl Accounts { let mut rent_debits = RentDebits::default(); let preserve_rent_epoch_for_rent_exempt_accounts = feature_set .is_active(&feature_set::preserve_rent_epoch_for_rent_exempt_accounts::id()); + let requested_loaded_accounts_data_size_limit = + if feature_set.is_active(&feature_set::cap_transaction_accounts_data_size::id()) { + let requested_loaded_accounts_data_size = + Self::get_requested_loaded_accounts_data_size_limit(tx, feature_set)?; + Some(requested_loaded_accounts_data_size) + } else { + None + }; + let mut accumulated_accounts_data_size: usize = 0; + for (i, key) in account_keys.iter().enumerate() { - let account = if !message.is_non_loader_key(i) { + let (account, loaded_programdata_account_size) = if !message.is_non_loader_key(i) { // Fill in an empty account for the program slots. - AccountSharedData::default() + (AccountSharedData::default(), 0) } else { #[allow(clippy::collapsible_else_if)] if solana_sdk::sysvar::instructions::check_id(key) { - Self::construct_instructions_account( - message, - feature_set - .is_active(&feature_set::instructions_sysvar_owned_by_sysvar::id()), + ( + Self::construct_instructions_account( + message, + feature_set.is_active( + &feature_set::instructions_sysvar_owned_by_sysvar::id(), + ), + ), + 0, ) } else { let (mut account, rent) = if let Some(account_override) = @@ -333,6 +350,7 @@ impl Accounts { validated_fee_payer = true; } + let mut loaded_programdata_account_size: usize = 0; if bpf_loader_upgradeable::check_id(account.owner()) { if message.is_writable(i) && !message.is_upgradeable_loader_present() { error_counters.invalid_writable_account += 1; @@ -352,6 +370,8 @@ impl Accounts { load_zero_lamports, ) { + loaded_programdata_account_size = + programdata_account.data().len(); account_deps .push((programdata_address, programdata_account)); } else { @@ -371,9 +391,19 @@ impl Accounts { tx_rent += rent; rent_debits.insert(key, rent, account.lamports()); - account + (account, loaded_programdata_account_size) } }; + Self::accumulate_and_check_loaded_account_data_size( + &mut accumulated_accounts_data_size, + account + .data() + .len() + .saturating_add(loaded_programdata_account_size), + requested_loaded_accounts_data_size_limit, + error_counters, + )?; + accounts.push((*key, account)); } debug_assert_eq!(accounts.len(), account_keys.len()); @@ -395,6 +425,8 @@ impl Accounts { instruction.program_id_index as usize, error_counters, load_zero_lamports, + &mut accumulated_accounts_data_size, + requested_loaded_accounts_data_size_limit, ) }) .collect::>>>()?; @@ -412,6 +444,22 @@ impl Accounts { } } + fn get_requested_loaded_accounts_data_size_limit( + tx: &SanitizedTransaction, + feature_set: &FeatureSet, + ) -> Result { + let mut compute_budget = ComputeBudget::default(); + let _prioritization_fee_details = compute_budget.process_instructions( + tx.message().program_instructions_iter(), + feature_set.is_active(&use_default_units_in_fee_calculation::id()), + feature_set.is_active(&add_set_compute_unit_price_ix::id()), + feature_set.is_active(&cap_transaction_accounts_data_size::id()), + Bank::get_loaded_accounts_data_limit_type(feature_set), + )?; + NonZeroUsize::new(compute_budget.accounts_data_size_limit as usize) + .ok_or(TransactionError::InvalidLoadedAccountsDataSizeLimit) + } + fn validate_fee_payer( payer_address: &Pubkey, payer_account: &mut AccountSharedData, @@ -467,15 +515,22 @@ impl Accounts { mut program_account_index: usize, error_counters: &mut TransactionErrorMetrics, load_zero_lamports: LoadZeroLamports, + accumulated_accounts_data_size: &mut usize, + requested_loaded_accounts_data_size_limit: Option, ) -> Result> { let mut account_indices = Vec::new(); - let mut program_id = match accounts.get(program_account_index) { - Some(program_account) => program_account.0, - None => { - error_counters.account_not_found += 1; - return Err(TransactionError::ProgramAccountNotFound); - } - }; + let (mut program_id, already_loaded_as_non_loader) = + match accounts.get(program_account_index) { + Some(program_account) => ( + program_account.0, + // program account is already loaded if it's not empty in `accounts` + program_account.1 != AccountSharedData::default(), + ), + None => { + error_counters.account_not_found += 1; + return Err(TransactionError::ProgramAccountNotFound); + } + }; let mut depth = 0; while !native_loader::check_id(&program_id) { if depth >= 5 { @@ -483,6 +538,7 @@ impl Accounts { return Err(TransactionError::CallChainTooDeep); } depth += 1; + let mut loaded_account_total_size: usize = 0; program_account_index = match self.accounts_db.load_with_fixed_root( ancestors, @@ -491,6 +547,13 @@ impl Accounts { ) { Some((program_account, _)) => { let account_index = accounts.len(); + // do not double count account size for program account on top of call chain + // that has already been loaded during load_transaction as non-loader account. + // Other accounts data size in the call chain are counted. + if !(depth == 1 && already_loaded_as_non_loader) { + loaded_account_total_size = + loaded_account_total_size.saturating_add(program_account.data().len()); + } accounts.push((program_id, program_account)); account_index } @@ -508,6 +571,7 @@ impl Accounts { // Add loader to chain let program_owner = *program.owner(); account_indices.insert(0, program_account_index); + if bpf_loader_upgradeable::check_id(&program_owner) { // The upgradeable loader requires the derived ProgramData account if let Ok(UpgradeableLoaderState::Program { @@ -521,6 +585,10 @@ impl Accounts { ) { Some((programdata_account, _)) => { let account_index = accounts.len(); + if !(depth == 1 && already_loaded_as_non_loader) { + loaded_account_total_size = loaded_account_total_size + .saturating_add(programdata_account.data().len()); + } accounts.push((programdata_address, programdata_account)); account_index } @@ -535,12 +603,43 @@ impl Accounts { return Err(TransactionError::InvalidProgramForExecution); } } + Self::accumulate_and_check_loaded_account_data_size( + accumulated_accounts_data_size, + loaded_account_total_size, + requested_loaded_accounts_data_size_limit, + error_counters, + )?; program_id = program_owner; } Ok(account_indices) } + /// Accumulate loaded account data size into `accumulated_accounts_data_size`. + /// Returns TransactionErr::MaxLoadedAccountsDataSizeExceeded if + /// `requested_loaded_accounts_data_size_limit` is specified and + /// `accumulated_accounts_data_size` exceeds it. + fn accumulate_and_check_loaded_account_data_size( + accumulated_loaded_accounts_data_size: &mut usize, + account_data_size: usize, + requested_loaded_accounts_data_size_limit: Option, + error_counters: &mut TransactionErrorMetrics, + ) -> Result<()> { + if let Some(requested_loaded_accounts_data_size) = requested_loaded_accounts_data_size_limit + { + *accumulated_loaded_accounts_data_size = + accumulated_loaded_accounts_data_size.saturating_add(account_data_size); + if *accumulated_loaded_accounts_data_size > requested_loaded_accounts_data_size.get() { + error_counters.max_loaded_accounts_data_size_exceeded += 1; + Err(TransactionError::MaxLoadedAccountsDataSizeExceeded) + } else { + Ok(()) + } + } else { + Ok(()) + } + } + #[allow(clippy::too_many_arguments)] pub fn load_accounts( &self, @@ -571,6 +670,8 @@ impl Accounts { fee_structure, feature_set.is_active(&add_set_compute_unit_price_ix::id()), feature_set.is_active(&use_default_units_in_fee_calculation::id()), + feature_set.is_active(&cap_transaction_accounts_data_size::id()), + Bank::get_loaded_accounts_data_limit_type(feature_set), ) } else { return (Err(TransactionError::BlockhashNotFound), None); @@ -1439,7 +1540,7 @@ mod tests { }, assert_matches::assert_matches, solana_address_lookup_table_program::state::LookupTableMeta, - solana_program_runtime::executor_cache::Executors, + solana_program_runtime::{compute_budget, executor_cache::Executors}, solana_sdk::{ account::{AccountSharedData, WritableAccount}, epoch_schedule::EpochSchedule, @@ -1697,6 +1798,8 @@ mod tests { &FeeStructure::default(), true, true, + true, + compute_budget::LoadedAccountsDataLimitType::V0, ); assert_eq!(fee, lamports_per_signature); @@ -2497,6 +2600,8 @@ mod tests { 0, &mut error_counters, LoadZeroLamports::SomeWithZeroLamportAccount, + &mut 0, + None, ), Err(TransactionError::ProgramAccountNotFound) ); @@ -3929,4 +4034,235 @@ mod tests { )); } } + + #[test] + fn test_accumulate_and_check_loaded_account_data_size() { + let mut error_counter = TransactionErrorMetrics::default(); + + // assert check is OK if data limit is not enabled + { + let mut accumulated_data_size: usize = 0; + let data_size = usize::MAX; + let requested_data_size_limit = None; + + assert!(Accounts::accumulate_and_check_loaded_account_data_size( + &mut accumulated_data_size, + data_size, + requested_data_size_limit, + &mut error_counter + ) + .is_ok()); + } + + // assert accounts are accumulated and check properly + { + let mut accumulated_data_size: usize = 0; + let data_size: usize = 123; + let requested_data_size_limit = NonZeroUsize::new(data_size); + + // OK + assert!(Accounts::accumulate_and_check_loaded_account_data_size( + &mut accumulated_data_size, + data_size, + requested_data_size_limit, + &mut error_counter + ) + .is_ok()); + assert_eq!(data_size, accumulated_data_size); + + // exceeds + let another_byte: usize = 1; + assert_eq!( + Accounts::accumulate_and_check_loaded_account_data_size( + &mut accumulated_data_size, + another_byte, + requested_data_size_limit, + &mut error_counter + ), + Err(TransactionError::MaxLoadedAccountsDataSizeExceeded) + ); + } + } + + #[test] + fn test_load_executable_accounts() { + solana_logger::setup(); + let accounts = Accounts::new_with_config_for_tests( + Vec::new(), + &ClusterType::Development, + AccountSecondaryIndexes::default(), + false, + AccountShrinkThreshold::default(), + ); + let mut error_counters = TransactionErrorMetrics::default(); + let ancestors = vec![(0, 0)].into_iter().collect(); + + let space: usize = 9; + let keypair = Keypair::new(); + let mut account = AccountSharedData::new(1, space, &native_loader::id()); + account.set_executable(true); + accounts.store_slow_uncached(0, &keypair.pubkey(), &account); + + let mut accumulated_accounts_data_size: usize = 0; + let mut expect_accumulated_accounts_data_size: usize; + + // test: program account has been loaded as non-loader, load_executable_accounts + // will not double count its data size + { + let mut loaded_accounts = vec![(keypair.pubkey(), account)]; + accumulated_accounts_data_size += space; + expect_accumulated_accounts_data_size = accumulated_accounts_data_size; + assert!(accounts + .load_executable_accounts( + &ancestors, + &mut loaded_accounts, + 0, + &mut error_counters, + LoadZeroLamports::SomeWithZeroLamportAccount, + &mut accumulated_accounts_data_size, + NonZeroUsize::new(expect_accumulated_accounts_data_size), + ) + .is_ok()); + assert_eq!( + expect_accumulated_accounts_data_size, + accumulated_accounts_data_size + ); + } + + // test: program account has not been loaded cause it's loader, load_executable_accounts + // will accumulate its data size + { + let mut loaded_accounts = vec![(keypair.pubkey(), AccountSharedData::default())]; + expect_accumulated_accounts_data_size = accumulated_accounts_data_size + space; + assert!(accounts + .load_executable_accounts( + &ancestors, + &mut loaded_accounts, + 0, + &mut error_counters, + LoadZeroLamports::SomeWithZeroLamportAccount, + &mut accumulated_accounts_data_size, + NonZeroUsize::new(expect_accumulated_accounts_data_size), + ) + .is_ok()); + assert_eq!( + expect_accumulated_accounts_data_size, + accumulated_accounts_data_size + ); + } + + // test: try to load one more account will accumulate additional `space` bytes, therefore + // exceed limit of `expect_accumulated_accounts_data_size` set above. + { + let mut loaded_accounts = vec![(keypair.pubkey(), AccountSharedData::default())]; + assert_eq!( + accounts.load_executable_accounts( + &ancestors, + &mut loaded_accounts, + 0, + &mut error_counters, + LoadZeroLamports::SomeWithZeroLamportAccount, + &mut accumulated_accounts_data_size, + NonZeroUsize::new(expect_accumulated_accounts_data_size), + ), + Err(TransactionError::MaxLoadedAccountsDataSizeExceeded) + ); + } + } + + #[test] + fn test_load_executable_accounts_with_upgradeable_program() { + solana_logger::setup(); + let accounts = Accounts::new_with_config_for_tests( + Vec::new(), + &ClusterType::Development, + AccountSecondaryIndexes::default(), + false, + AccountShrinkThreshold::default(), + ); + let mut error_counters = TransactionErrorMetrics::default(); + let ancestors = vec![(0, 0)].into_iter().collect(); + + // call chain: native_loader -> key0 -> upgradeable bpf loader -> program_key (that has programdata_key) + let programdata_key = Pubkey::new(&[3u8; 32]); + let program_data = UpgradeableLoaderState::ProgramData { + slot: 0, + upgrade_authority_address: None, + }; + let mut program_data_account = + AccountSharedData::new_data(1, &program_data, &Pubkey::default()).unwrap(); + let program_data_account_size = program_data_account.data().len(); + program_data_account.set_executable(true); + program_data_account.set_rent_epoch(0); + accounts.store_slow_uncached(0, &programdata_key, &program_data_account); + + let program_key = Pubkey::new(&[2u8; 32]); + let program = UpgradeableLoaderState::Program { + programdata_address: programdata_key, + }; + let mut program_account = + AccountSharedData::new_data(1, &program, &bpf_loader_upgradeable::id()).unwrap(); + let program_account_size = program_account.data().len(); + program_account.set_executable(true); + program_account.set_rent_epoch(0); + accounts.store_slow_uncached(0, &program_key, &program_account); + + let key0 = Pubkey::new(&[1u8; 32]); + let mut bpf_loader_account = AccountSharedData::new(1, 0, &key0); + bpf_loader_account.set_executable(true); + accounts.store_slow_uncached(0, &bpf_loader_upgradeable::id(), &bpf_loader_account); + + let space: usize = 9; + let mut account = AccountSharedData::new(1, space, &native_loader::id()); + account.set_executable(true); + accounts.store_slow_uncached(0, &key0, &account); + + // test: program_key account has been loaded as non-loader, load_executable_accounts + // will not double count its data size, but still accumulate data size from + // callchain + { + let expect_accumulated_accounts_data_size: usize = space; + let mut accumulated_accounts_data_size: usize = 0; + let mut loaded_accounts = vec![(program_key, program_account)]; + assert!(accounts + .load_executable_accounts( + &ancestors, + &mut loaded_accounts, + 0, + &mut error_counters, + LoadZeroLamports::SomeWithZeroLamportAccount, + &mut accumulated_accounts_data_size, + NonZeroUsize::new(expect_accumulated_accounts_data_size), + ) + .is_ok()); + assert_eq!( + expect_accumulated_accounts_data_size, + accumulated_accounts_data_size + ); + } + + // test: program account has not been loaded cause it's loader, load_executable_accounts + // will accumulate entire callchain data size. + { + let mut loaded_accounts = vec![(program_key, AccountSharedData::default())]; + let mut accumulated_accounts_data_size: usize = 0; + let expect_accumulated_accounts_data_size = + program_account_size + program_data_account_size + space; + assert!(accounts + .load_executable_accounts( + &ancestors, + &mut loaded_accounts, + 0, + &mut error_counters, + LoadZeroLamports::SomeWithZeroLamportAccount, + &mut accumulated_accounts_data_size, + NonZeroUsize::new(expect_accumulated_accounts_data_size), + ) + .is_ok()); + assert_eq!( + expect_accumulated_accounts_data_size, + accumulated_accounts_data_size + ); + } + } } diff --git a/runtime/src/bank.rs b/runtime/src/bank.rs index f1a63d1d0b2ba6..d090aeaef76bb2 100644 --- a/runtime/src/bank.rs +++ b/runtime/src/bank.rs @@ -106,8 +106,9 @@ use { epoch_schedule::EpochSchedule, feature, feature_set::{ - self, add_set_compute_unit_price_ix, default_units_per_instruction, - disable_fee_calculator, enable_early_verification_of_account_modifications, + self, add_set_compute_unit_price_ix, cap_transaction_accounts_data_size, + default_units_per_instruction, disable_fee_calculator, + enable_early_verification_of_account_modifications, use_default_units_in_fee_calculation, FeatureSet, }, fee::FeeStructure, @@ -282,7 +283,7 @@ impl RentDebits { } pub type BankStatusCache = StatusCache>; -#[frozen_abi(digest = "HEJXoycXvGT2pwMuKcUKzzbeemnqbfrUC4jHZx1ncaWv")] +#[frozen_abi(digest = "8g9MqWWWrMpuqVHGbR9mYDizn2b91o7Yu7WGgvfveSxh")] pub type BankSlotDelta = SlotDelta>; // Eager rent collection repeats in cyclic manner. @@ -3440,6 +3441,9 @@ impl Bank { .is_active(&add_set_compute_unit_price_ix::id()), self.feature_set .is_active(&use_default_units_in_fee_calculation::id()), + self.feature_set + .is_active(&cap_transaction_accounts_data_size::id()), + Self::get_loaded_accounts_data_limit_type(&self.feature_set), )) } @@ -3483,6 +3487,9 @@ impl Bank { .is_active(&add_set_compute_unit_price_ix::id()), self.feature_set .is_active(&use_default_units_in_fee_calculation::id()), + self.feature_set + .is_active(&cap_transaction_accounts_data_size::id()), + Self::get_loaded_accounts_data_limit_type(&self.feature_set), ) } @@ -4323,6 +4330,8 @@ impl Bank { tx.message().program_instructions_iter(), feature_set.is_active(&default_units_per_instruction::id()), feature_set.is_active(&add_set_compute_unit_price_ix::id()), + feature_set.is_active(&cap_transaction_accounts_data_size::id()), + Self::get_loaded_accounts_data_limit_type(&self.feature_set), ); compute_budget_process_transaction_time.stop(); saturating_add_assign!( @@ -4609,6 +4618,8 @@ impl Bank { fee_structure: &FeeStructure, support_set_compute_unit_price_ix: bool, use_default_units_per_instruction: bool, + cap_transaction_accounts_data_size: bool, + loaded_accounts_data_limit_type: compute_budget::LoadedAccountsDataLimitType, ) -> u64 { // Fee based on compute units and signatures const BASE_CONGESTION: f64 = 5_000.0; @@ -4625,6 +4636,8 @@ impl Bank { message.program_instructions_iter(), use_default_units_per_instruction, support_set_compute_unit_price_ix, + cap_transaction_accounts_data_size, + loaded_accounts_data_limit_type, ) .unwrap_or_default(); let prioritization_fee = prioritization_fee_details.get_fee(); @@ -4692,6 +4705,9 @@ impl Bank { .is_active(&add_set_compute_unit_price_ix::id()), self.feature_set .is_active(&use_default_units_in_fee_calculation::id()), + self.feature_set + .is_active(&cap_transaction_accounts_data_size::id()), + Self::get_loaded_accounts_data_limit_type(&self.feature_set), ); // In case of instruction error, even though no accounts @@ -7622,6 +7638,17 @@ impl Bank { total_accounts_stats } + + /// if the `default` and/or `max` value for ComputeBudget:::Accounts_data_size_limit changes, + /// the change needs to be gated by feature gate with corresponding new enum value. + /// should use this function to get correct loaded_accounts_data_limit_type based on + /// feature_set. + pub fn get_loaded_accounts_data_limit_type( + _feature_set: &FeatureSet, + ) -> compute_budget::LoadedAccountsDataLimitType { + compute_budget::LoadedAccountsDataLimitType::V0 + // In the future, use feature_set to determine correct LoadedAccountsDataLimitType here. + } } /// Compute how much an account has changed size. This function is useful when the data size delta @@ -10657,6 +10684,8 @@ pub(crate) mod tests { &FeeStructure::default(), true, true, + true, + compute_budget::LoadedAccountsDataLimitType::V0, ); let (expected_fee_collected, expected_fee_burned) = @@ -10839,6 +10868,8 @@ pub(crate) mod tests { &FeeStructure::default(), true, true, + true, + compute_budget::LoadedAccountsDataLimitType::V0, ); assert_eq!( bank.get_balance(&mint_keypair.pubkey()), @@ -10857,6 +10888,8 @@ pub(crate) mod tests { &FeeStructure::default(), true, true, + true, + compute_budget::LoadedAccountsDataLimitType::V0, ); assert_eq!( bank.get_balance(&mint_keypair.pubkey()), @@ -10973,6 +11006,8 @@ pub(crate) mod tests { &FeeStructure::default(), true, true, + true, + compute_budget::LoadedAccountsDataLimitType::V0, ) * 2 ) .0 @@ -17326,34 +17361,42 @@ pub(crate) mod tests { // Default: no fee. let message = SanitizedMessage::try_from(Message::new(&[], Some(&Pubkey::new_unique()))).unwrap(); - assert_eq!( - Bank::calculate_fee( - &message, - 0, - &FeeStructure { - lamports_per_signature: 0, - ..FeeStructure::default() - }, - true, - true, - ), - 0 - ); + for cap_transaction_accounts_data_size in &[true, false] { + assert_eq!( + Bank::calculate_fee( + &message, + 0, + &FeeStructure { + lamports_per_signature: 0, + ..FeeStructure::default() + }, + true, + true, + *cap_transaction_accounts_data_size, + compute_budget::LoadedAccountsDataLimitType::V0, + ), + 0 + ); + } // One signature, a fee. - assert_eq!( - Bank::calculate_fee( - &message, - 1, - &FeeStructure { - lamports_per_signature: 1, - ..FeeStructure::default() - }, - true, - true, - ), - 1 - ); + for cap_transaction_accounts_data_size in &[true, false] { + assert_eq!( + Bank::calculate_fee( + &message, + 1, + &FeeStructure { + lamports_per_signature: 1, + ..FeeStructure::default() + }, + true, + true, + *cap_transaction_accounts_data_size, + compute_budget::LoadedAccountsDataLimitType::V0, + ), + 1 + ); + } // Two signatures, double the fee. let key0 = Pubkey::new_unique(); @@ -17361,19 +17404,23 @@ pub(crate) mod tests { let ix0 = system_instruction::transfer(&key0, &key1, 1); let ix1 = system_instruction::transfer(&key1, &key0, 1); let message = SanitizedMessage::try_from(Message::new(&[ix0, ix1], Some(&key0))).unwrap(); - assert_eq!( - Bank::calculate_fee( - &message, - 2, - &FeeStructure { - lamports_per_signature: 2, - ..FeeStructure::default() - }, - true, - true, - ), - 4 - ); + for cap_transaction_accounts_data_size in &[true, false] { + assert_eq!( + Bank::calculate_fee( + &message, + 2, + &FeeStructure { + lamports_per_signature: 2, + ..FeeStructure::default() + }, + true, + true, + *cap_transaction_accounts_data_size, + compute_budget::LoadedAccountsDataLimitType::V0, + ), + 4 + ); + } } #[test] @@ -17389,10 +17436,20 @@ pub(crate) mod tests { let message = SanitizedMessage::try_from(Message::new(&[], Some(&Pubkey::new_unique()))).unwrap(); - assert_eq!( - Bank::calculate_fee(&message, 1, &fee_structure, true, true,), - max_fee + lamports_per_signature - ); + for cap_transaction_accounts_data_size in &[true, false] { + assert_eq!( + Bank::calculate_fee( + &message, + 1, + &fee_structure, + true, + true, + *cap_transaction_accounts_data_size, + compute_budget::LoadedAccountsDataLimitType::V0 + ), + max_fee + lamports_per_signature + ); + } // Three signatures, two instructions, no unit request @@ -17401,10 +17458,20 @@ pub(crate) mod tests { let message = SanitizedMessage::try_from(Message::new(&[ix0, ix1], Some(&Pubkey::new_unique()))) .unwrap(); - assert_eq!( - Bank::calculate_fee(&message, 1, &fee_structure, true, true,), - max_fee + 3 * lamports_per_signature - ); + for cap_transaction_accounts_data_size in &[true, false] { + assert_eq!( + Bank::calculate_fee( + &message, + 1, + &fee_structure, + true, + true, + *cap_transaction_accounts_data_size, + compute_budget::LoadedAccountsDataLimitType::V0 + ), + max_fee + 3 * lamports_per_signature + ); + } // Explicit fee schedule @@ -17435,11 +17502,21 @@ pub(crate) mod tests { Some(&Pubkey::new_unique()), )) .unwrap(); - let fee = Bank::calculate_fee(&message, 1, &fee_structure, true, true); - assert_eq!( - fee, - lamports_per_signature + prioritization_fee_details.get_fee() - ); + for cap_transaction_accounts_data_size in &[true, false] { + let fee = Bank::calculate_fee( + &message, + 1, + &fee_structure, + true, + true, + *cap_transaction_accounts_data_size, + compute_budget::LoadedAccountsDataLimitType::V0, + ); + assert_eq!( + fee, + lamports_per_signature + prioritization_fee_details.get_fee() + ); + } } } @@ -17473,10 +17550,20 @@ pub(crate) mod tests { Some(&key0), )) .unwrap(); - assert_eq!( - Bank::calculate_fee(&message, 1, &fee_structure, true, true,), - 2 - ); + for cap_transaction_accounts_data_size in &[true, false] { + assert_eq!( + Bank::calculate_fee( + &message, + 1, + &fee_structure, + true, + true, + *cap_transaction_accounts_data_size, + compute_budget::LoadedAccountsDataLimitType::V0 + ), + 2 + ); + } secp_instruction1.data = vec![0]; secp_instruction2.data = vec![10]; @@ -17485,10 +17572,20 @@ pub(crate) mod tests { Some(&key0), )) .unwrap(); - assert_eq!( - Bank::calculate_fee(&message, 1, &fee_structure, true, true,), - 11 - ); + for cap_transaction_accounts_data_size in &[true, false] { + assert_eq!( + Bank::calculate_fee( + &message, + 1, + &fee_structure, + true, + true, + *cap_transaction_accounts_data_size, + compute_budget::LoadedAccountsDataLimitType::V0 + ), + 11 + ); + } } #[test] diff --git a/runtime/src/transaction_error_metrics.rs b/runtime/src/transaction_error_metrics.rs index baa25a07364839..438112cdd5cfd7 100644 --- a/runtime/src/transaction_error_metrics.rs +++ b/runtime/src/transaction_error_metrics.rs @@ -23,6 +23,8 @@ pub struct TransactionErrorMetrics { pub would_exceed_max_account_cost_limit: usize, pub would_exceed_max_vote_cost_limit: usize, pub would_exceed_account_data_block_limit: usize, + pub max_loaded_accounts_data_size_exceeded: usize, + pub invalid_loaded_accounts_data_size_limit: usize, } impl TransactionErrorMetrics { @@ -76,6 +78,14 @@ impl TransactionErrorMetrics { self.would_exceed_account_data_block_limit, other.would_exceed_account_data_block_limit ); + saturating_add_assign!( + self.max_loaded_accounts_data_size_exceeded, + other.max_loaded_accounts_data_size_exceeded + ); + saturating_add_assign!( + self.invalid_loaded_accounts_data_size_limit, + other.invalid_loaded_accounts_data_size_limit + ); } pub fn report(&self, id: u32, slot: Slot) { @@ -152,6 +162,16 @@ impl TransactionErrorMetrics { self.would_exceed_account_data_block_limit as i64, i64 ), + ( + "max_loaded_accounts_data_size_exceeded", + self.max_loaded_accounts_data_size_exceeded as i64, + i64 + ), + ( + "invalid_loaded_accounts_data_size_limit", + self.invalid_loaded_accounts_data_size_limit as i64, + i64 + ), ); } } diff --git a/sdk/src/compute_budget.rs b/sdk/src/compute_budget.rs index 1509286bad0fd1..879e97c9f1c128 100644 --- a/sdk/src/compute_budget.rs +++ b/sdk/src/compute_budget.rs @@ -38,6 +38,8 @@ pub enum ComputeBudgetInstruction { /// Set a compute unit price in "micro-lamports" to pay a higher transaction /// fee for higher transaction prioritization. SetComputeUnitPrice(u64), + /// Set a specific transaction-wide account data size limit, in bytes, is allowed to allocate. + SetAccountsDataSizeLimit(u32), } impl ComputeBudgetInstruction { @@ -55,4 +57,9 @@ impl ComputeBudgetInstruction { pub fn set_compute_unit_price(micro_lamports: u64) -> Instruction { Instruction::new_with_borsh(id(), &Self::SetComputeUnitPrice(micro_lamports), vec![]) } + + /// Create a `ComputeBudgetInstruction::SetAccountsDataSizeLimit` `Instruction` + pub fn set_accounts_data_size_limit(bytes: u32) -> Instruction { + Instruction::new_with_borsh(id(), &Self::SetAccountsDataSizeLimit(bytes), vec![]) + } } diff --git a/sdk/src/feature_set.rs b/sdk/src/feature_set.rs index 6d758da46ed9ff..a5fec7df1054f5 100644 --- a/sdk/src/feature_set.rs +++ b/sdk/src/feature_set.rs @@ -512,6 +512,10 @@ pub mod check_syscall_outputs_do_not_overlap { solana_sdk::declare_id!("3uRVPBpyEJRo1emLCrq38eLRFGcu6uKSpUXqGvU8T7SZ"); } +pub mod cap_transaction_accounts_data_size { + solana_sdk::declare_id!("DdLwVYuvDz26JohmgSbA7mjpJFgX5zP2dkp8qsF2C33V"); +} + lazy_static! { /// Map of feature identifiers to user-visible description pub static ref FEATURE_NAMES: HashMap = [ @@ -634,6 +638,7 @@ lazy_static! { (return_none_for_zero_lamport_accounts::id(), "return none for zero lamport accounts #27800"), (increase_tx_account_lock_limit::id(), "increase tx account lock limit to 128 #27241"), (check_syscall_outputs_do_not_overlap::id(), "check syscall outputs do_not overlap #28600"), + (cap_transaction_accounts_data_size::id(), "cap transaction accounts data size up to its compute unit limits #27839"), /*************** ADD NEW FEATURES HERE ***************/ ] .iter() diff --git a/sdk/src/transaction/error.rs b/sdk/src/transaction/error.rs index 3f25fa5a62541a..81a4c50b53f3a6 100644 --- a/sdk/src/transaction/error.rs +++ b/sdk/src/transaction/error.rs @@ -149,6 +149,16 @@ pub enum TransactionError { "Transaction results in an account ({account_index}) without insufficient funds for rent" )] InsufficientFundsForRent { account_index: u8 }, + + /// Transaction exceeded max loaded accounts data size capped by requested compute units + #[error( + "Transaction exceeded max loaded accounts data size capped by requested compute units" + )] + MaxLoadedAccountsDataSizeExceeded, + + /// LoadedAccountsDataSizeLimit set for transaction must be greater than 0. + #[error("LoadedAccountsDataSizeLimit set for transaction must be greater than 0.")] + InvalidLoadedAccountsDataSizeLimit, } impl From for TransactionError { diff --git a/storage-proto/proto/transaction_by_addr.proto b/storage-proto/proto/transaction_by_addr.proto index 4c95b1829746a5..498ccbcf1c2e43 100644 --- a/storage-proto/proto/transaction_by_addr.proto +++ b/storage-proto/proto/transaction_by_addr.proto @@ -57,6 +57,8 @@ enum TransactionErrorType { WOULD_EXCEED_ACCOUNT_DATA_TOTAL_LIMIT = 29; DUPLICATE_INSTRUCTION = 30; INSUFFICIENT_FUNDS_FOR_RENT = 31; + MAX_LOADED_ACCOUNTS_DATA_SIZE_EXCEEDED = 32; + INVALID_LOADED_ACCOUNTS_DATA_SIZE_LIMIT = 33; } message InstructionError { diff --git a/storage-proto/src/convert.rs b/storage-proto/src/convert.rs index 6580095403cf4f..065360ac31d532 100644 --- a/storage-proto/src/convert.rs +++ b/storage-proto/src/convert.rs @@ -766,6 +766,8 @@ impl TryFrom for TransactionError { 27 => TransactionError::InvalidRentPayingAccount, 28 => TransactionError::WouldExceedMaxVoteCostLimit, 29 => TransactionError::WouldExceedAccountDataTotalLimit, + 32 => TransactionError::MaxLoadedAccountsDataSizeExceeded, + 33 => TransactionError::InvalidLoadedAccountsDataSizeLimit, _ => return Err("Invalid TransactionError"), }) } @@ -869,6 +871,12 @@ impl From for tx_by_addr::TransactionError { TransactionError::InsufficientFundsForRent { .. } => { tx_by_addr::TransactionErrorType::InsufficientFundsForRent } + TransactionError::MaxLoadedAccountsDataSizeExceeded => { + tx_by_addr::TransactionErrorType::MaxLoadedAccountsDataSizeExceeded + } + TransactionError::InvalidLoadedAccountsDataSizeLimit => { + tx_by_addr::TransactionErrorType::InvalidLoadedAccountsDataSizeLimit + } } as i32, instruction_error: match transaction_error { TransactionError::InstructionError(index, ref instruction_error) => { From ff6a09eab3a971e5a494701d3e3df0a9401dcce0 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Thu, 17 Nov 2022 19:07:48 +0000 Subject: [PATCH 227/465] Docs: Removed Serum RPC mention (backport #28854) (#28856) Docs: Removed Serum RPC mention (#28854) (cherry picked from commit 57798fae9c3e849598df0fef70f61200bd0463c4) Co-authored-by: Jacob Creech <82475023+jacobcreech@users.noreply.github.com> --- docs/src/cluster/rpc-endpoints.md | 1 - 1 file changed, 1 deletion(-) diff --git a/docs/src/cluster/rpc-endpoints.md b/docs/src/cluster/rpc-endpoints.md index 4b1c6f10b1723a..9ae28f7cd5c3b3 100644 --- a/docs/src/cluster/rpc-endpoints.md +++ b/docs/src/cluster/rpc-endpoints.md @@ -39,7 +39,6 @@ public RPC endpoints currently available and recommended for each public cluster #### Endpoints* - `https://api.mainnet-beta.solana.com` - Solana-hosted api node cluster, backed by a load balancer; rate-limited -- `https://solana-api.projectserum.com` - Project Serum-hosted api node #### Rate Limits From d7808faff841f7e02ad2a98fc792678bba16677c Mon Sep 17 00:00:00 2001 From: Tao Zhu <82401714+taozhu-chicago@users.noreply.github.com> Date: Thu, 17 Nov 2022 21:05:21 -0600 Subject: [PATCH 228/465] Revert "Cap accounts data a transaction can load by its requested limit (backport #27840)" (#28861) Revert "Cap accounts data a transaction can load by its requested limit (backport #27840) (#28797)" This reverts commit 8ad913621ce61f5cb1409a0763297e809a0c8407. --- core/src/transaction_priority_details.rs | 9 +- .../developing/programming-model/runtime.md | 20 +- ledger/src/blockstore_processor.rs | 6 +- program-runtime/src/compute_budget.rs | 131 ------- programs/bpf-loader-tests/tests/common.rs | 4 +- .../tests/extend_program_ix.rs | 40 +- programs/bpf/tests/programs.rs | 168 +++----- runtime/src/accounts.rs | 370 +----------------- runtime/src/bank.rs | 223 +++-------- runtime/src/transaction_error_metrics.rs | 20 - sdk/src/compute_budget.rs | 7 - sdk/src/feature_set.rs | 5 - sdk/src/transaction/error.rs | 10 - storage-proto/proto/transaction_by_addr.proto | 2 - storage-proto/src/convert.rs | 8 - 15 files changed, 169 insertions(+), 854 deletions(-) diff --git a/core/src/transaction_priority_details.rs b/core/src/transaction_priority_details.rs index fa7872e0e46eff..7f816cad2a879a 100644 --- a/core/src/transaction_priority_details.rs +++ b/core/src/transaction_priority_details.rs @@ -1,5 +1,5 @@ use { - solana_program_runtime::compute_budget::{self, ComputeBudget}, + solana_program_runtime::compute_budget::ComputeBudget, solana_sdk::{ instruction::CompiledInstruction, pubkey::Pubkey, @@ -23,11 +23,8 @@ pub trait GetTransactionPriorityDetails { let prioritization_fee_details = compute_budget .process_instructions( instructions, - true, // use default units per instruction - true, // don't reject txs that use set compute unit price ix - false, //transaction priority doesn't care about accounts data size limit, - compute_budget::LoadedAccountsDataLimitType::V0, // transaction priority doesn't - // care about accounts data size limit. + true, // use default units per instruction + true, // don't reject txs that use set compute unit price ix ) .ok()?; Some(TransactionPriorityDetails { diff --git a/docs/src/developing/programming-model/runtime.md b/docs/src/developing/programming-model/runtime.md index c33fec99cdab2e..ac8284b723d92e 100644 --- a/docs/src/developing/programming-model/runtime.md +++ b/docs/src/developing/programming-model/runtime.md @@ -54,9 +54,8 @@ to. As the transaction is processed compute units are consumed by its instruction's programs performing operations such as executing BPF instructions, calling syscalls, etc... When the transaction consumes its entire budget, or -exceeds a bound such as attempting a call stack that is too deep, or loaded -account data exceeds limit, the runtime halts the transaction processing and -returns an error. +exceeds a bound such as attempting a call stack that is too deep, the runtime +halts the transaction processing and returns an error. The following operations incur a compute cost: @@ -144,21 +143,6 @@ let instruction = ComputeBudgetInstruction::set_compute_unit_limit(300_000); let instruction = ComputeBudgetInstruction::set_compute_unit_price(1); ``` -### Accounts data size limit - -A transaction should request the maximum bytes of accounts data it is -allowed to load by including a `SetAccountsDataSizeLimit` instruction, requested -limit is capped by `get_max_loaded_accounts_data_limit()`. If no -`SetAccountsDataSizeLimit` is provided, the transaction is defaulted to -have limit of `get_default_loaded_accounts_data_limit()`. - -The `ComputeBudgetInstruction::set_accounts_data_size_limit` function can be used -to create this instruction: - -```rust -let instruction = ComputeBudgetInstruction::set_accounts_data_size_limit(100_000); -``` - ## New Features As Solana evolves, new features or patches may be introduced that changes the diff --git a/ledger/src/blockstore_processor.rs b/ledger/src/blockstore_processor.rs index fdfc2550f46b87..a51612886c001c 100644 --- a/ledger/src/blockstore_processor.rs +++ b/ledger/src/blockstore_processor.rs @@ -4674,7 +4674,6 @@ pub mod tests { use { super::*, serde::{Deserialize, Serialize}, - solana_sdk::compute_budget::ComputeBudgetInstruction, }; #[derive(Debug, Serialize, Deserialize)] @@ -4714,10 +4713,7 @@ pub mod tests { account_metas, ); Transaction::new_signed_with_payer( - &[ - instruction, - ComputeBudgetInstruction::set_accounts_data_size_limit(u32::MAX), - ], + &[instruction], Some(&payer.pubkey()), &[payer], recent_blockhash, diff --git a/program-runtime/src/compute_budget.rs b/program-runtime/src/compute_budget.rs index b6216b2ec750a0..2880cc9d69162c 100644 --- a/program-runtime/src/compute_budget.rs +++ b/program-runtime/src/compute_budget.rs @@ -14,33 +14,6 @@ pub const DEFAULT_INSTRUCTION_COMPUTE_UNIT_LIMIT: u32 = 200_000; pub const MAX_COMPUTE_UNIT_LIMIT: u32 = 1_400_000; const MAX_HEAP_FRAME_BYTES: u32 = 256 * 1024; -/// To change `default` and/or `max` values for `accounts_data_size_limit` in the future, -/// add new enum type here, link to feature gate, and implement the enum in -/// `get_default_loaded_accounts_data_limit()` and/or `get_max_loaded_accounts_data_limit()`. -#[derive(Debug)] -pub enum LoadedAccountsDataLimitType { - V0, - // add future versions here -} - -/// Get default value of `ComputeBudget::accounts_data_size_limit` if not set specifically. It -/// sets to 10MB initially, may be changed with feature gate. -const DEFAULT_LOADED_ACCOUNTS_DATA_LIMIT: u32 = 10_000_000; -pub fn get_default_loaded_accounts_data_limit(limit_type: &LoadedAccountsDataLimitType) -> u32 { - match limit_type { - LoadedAccountsDataLimitType::V0 => DEFAULT_LOADED_ACCOUNTS_DATA_LIMIT, - } -} -/// Get max value of `ComputeBudget::accounts_data_size_limit`, it caps value user -/// sets via `ComputeBudgetInstruction::set_compute_unit_limit`. It is set to 100MB -/// initially, can be changed with feature gate. -const MAX_LOADED_ACCOUNTS_DATA_LIMIT: u32 = 100_000_000; -pub fn get_max_loaded_accounts_data_limit(limit_type: &LoadedAccountsDataLimitType) -> u32 { - match limit_type { - LoadedAccountsDataLimitType::V0 => MAX_LOADED_ACCOUNTS_DATA_LIMIT, - } -} - #[cfg(RUSTC_WITH_SPECIALIZATION)] impl ::solana_frozen_abi::abi_example::AbiExample for ComputeBudget { fn example() -> Self { @@ -55,8 +28,6 @@ pub struct ComputeBudget { /// allowed to consume. Compute units are consumed by program execution, /// resources they use, etc... pub compute_unit_limit: u64, - /// Maximum accounts data size, in bytes, that a transaction is allowed to load - pub accounts_data_size_limit: u64, /// Number of compute units consumed by a log_u64 call pub log_64_units: u64, /// Number of compute units consumed by a create_program_address call @@ -123,7 +94,6 @@ impl ComputeBudget { pub fn new(compute_unit_limit: u64) -> Self { ComputeBudget { compute_unit_limit, - accounts_data_size_limit: DEFAULT_LOADED_ACCOUNTS_DATA_LIMIT as u64, log_64_units: 100, create_program_address_units: 1500, invoke_units: 1000, @@ -158,14 +128,11 @@ impl ComputeBudget { instructions: impl Iterator, default_units_per_instruction: bool, support_set_compute_unit_price_ix: bool, - cap_transaction_accounts_data_size: bool, - loaded_accounts_data_limit_type: LoadedAccountsDataLimitType, ) -> Result { let mut num_non_compute_budget_instructions: usize = 0; let mut updated_compute_unit_limit = None; let mut requested_heap_size = None; let mut prioritization_fee = None; - let mut updated_accounts_data_size_limit = None; for (i, (program_id, instruction)) in instructions.enumerate() { if compute_budget::check_id(program_id) { @@ -211,14 +178,6 @@ impl ComputeBudget { prioritization_fee = Some(PrioritizationFeeType::ComputeUnitPrice(micro_lamports)); } - Ok(ComputeBudgetInstruction::SetAccountsDataSizeLimit(bytes)) - if cap_transaction_accounts_data_size => - { - if updated_accounts_data_size_limit.is_some() { - return Err(duplicate_instruction_error); - } - updated_accounts_data_size_limit = Some(bytes); - } _ => return Err(invalid_instruction_data_error), } } else if i < 3 { @@ -275,14 +234,6 @@ impl ComputeBudget { .unwrap_or(MAX_COMPUTE_UNIT_LIMIT) .min(MAX_COMPUTE_UNIT_LIMIT) as u64; - self.accounts_data_size_limit = updated_accounts_data_size_limit - .unwrap_or_else(|| { - get_default_loaded_accounts_data_limit(&loaded_accounts_data_limit_type) - }) - .min(get_max_loaded_accounts_data_limit( - &loaded_accounts_data_limit_type, - )) as u64; - Ok(prioritization_fee .map(|fee_type| PrioritizationFeeDetails::new(fee_type, self.compute_unit_limit)) .unwrap_or_default()) @@ -328,8 +279,6 @@ mod tests { tx.message().program_instructions_iter(), true, $type_change, - true, /*supports cap transaction accounts data size feature*/ - LoadedAccountsDataLimitType::V0, ); assert_eq!($expected_result, result); assert_eq!(compute_budget, $expected_budget); @@ -653,84 +602,4 @@ mod tests { ComputeBudget::default() ); } - - #[test] - fn test_process_accounts_data_size_limit_instruction() { - test!( - &[], - Ok(PrioritizationFeeDetails::default()), - ComputeBudget { - compute_unit_limit: 0, - ..ComputeBudget::default() - } - ); - test!( - &[ - ComputeBudgetInstruction::set_accounts_data_size_limit(1), - Instruction::new_with_bincode(Pubkey::new_unique(), &0_u8, vec![]), - ], - Ok(PrioritizationFeeDetails::default()), - ComputeBudget { - compute_unit_limit: DEFAULT_INSTRUCTION_COMPUTE_UNIT_LIMIT as u64, - accounts_data_size_limit: 1, - ..ComputeBudget::default() - } - ); - test!( - &[ - ComputeBudgetInstruction::set_accounts_data_size_limit( - get_max_loaded_accounts_data_limit(&LoadedAccountsDataLimitType::V0) + 1 - ), - Instruction::new_with_bincode(Pubkey::new_unique(), &0_u8, vec![]), - ], - Ok(PrioritizationFeeDetails::default()), - ComputeBudget { - compute_unit_limit: DEFAULT_INSTRUCTION_COMPUTE_UNIT_LIMIT as u64, - accounts_data_size_limit: get_max_loaded_accounts_data_limit( - &LoadedAccountsDataLimitType::V0 - ) as u64, - ..ComputeBudget::default() - } - ); - test!( - &[ - Instruction::new_with_bincode(Pubkey::new_unique(), &0_u8, vec![]), - ComputeBudgetInstruction::set_accounts_data_size_limit( - get_max_loaded_accounts_data_limit(&LoadedAccountsDataLimitType::V0) - ), - ], - Ok(PrioritizationFeeDetails::default()), - ComputeBudget { - compute_unit_limit: DEFAULT_INSTRUCTION_COMPUTE_UNIT_LIMIT as u64, - accounts_data_size_limit: get_max_loaded_accounts_data_limit( - &LoadedAccountsDataLimitType::V0 - ) as u64, - ..ComputeBudget::default() - } - ); - test!( - &[ - Instruction::new_with_bincode(Pubkey::new_unique(), &0_u8, vec![]), - Instruction::new_with_bincode(Pubkey::new_unique(), &0_u8, vec![]), - Instruction::new_with_bincode(Pubkey::new_unique(), &0_u8, vec![]), - ComputeBudgetInstruction::set_accounts_data_size_limit(1), - ], - Ok(PrioritizationFeeDetails::default()), - ComputeBudget { - compute_unit_limit: 3 * DEFAULT_INSTRUCTION_COMPUTE_UNIT_LIMIT as u64, - accounts_data_size_limit: 1, - ..ComputeBudget::default() - } - ); - - test!( - &[ - Instruction::new_with_bincode(Pubkey::new_unique(), &0_u8, vec![]), - ComputeBudgetInstruction::set_accounts_data_size_limit(1), - ComputeBudgetInstruction::set_accounts_data_size_limit(1), - ], - Err(TransactionError::DuplicateInstruction(2)), - ComputeBudget::default() - ); - } } diff --git a/programs/bpf-loader-tests/tests/common.rs b/programs/bpf-loader-tests/tests/common.rs index b2ecceea20c8eb..5b735b829c3cb2 100644 --- a/programs/bpf-loader-tests/tests/common.rs +++ b/programs/bpf-loader-tests/tests/common.rs @@ -21,7 +21,7 @@ pub async fn setup_test_context() -> ProgramTestContext { pub async fn assert_ix_error( context: &mut ProgramTestContext, - ixs: &[Instruction], + ix: Instruction, additional_payer_keypair: Option<&Keypair>, expected_err: InstructionError, assertion_failed_msg: &str, @@ -36,7 +36,7 @@ pub async fn assert_ix_error( } let transaction = Transaction::new_signed_with_payer( - ixs, + &[ix], Some(&fee_payer.pubkey()), &signers, recent_blockhash, diff --git a/programs/bpf-loader-tests/tests/extend_program_ix.rs b/programs/bpf-loader-tests/tests/extend_program_ix.rs index a7bb06e08ed583..7c928446e54579 100644 --- a/programs/bpf-loader-tests/tests/extend_program_ix.rs +++ b/programs/bpf-loader-tests/tests/extend_program_ix.rs @@ -6,7 +6,6 @@ use { account::{AccountSharedData, ReadableAccount}, account_utils::StateMut, bpf_loader_upgradeable::{extend_program, id, UpgradeableLoaderState}, - compute_budget::ComputeBudgetInstruction, instruction::InstructionError, pubkey::Pubkey, signature::{Keypair, Signer}, @@ -101,7 +100,7 @@ async fn test_extend_program_not_upgradeable() { let payer_address = context.payer.pubkey(); assert_ix_error( &mut context, - &[extend_program(&program_address, Some(&payer_address), 42)], + extend_program(&program_address, Some(&payer_address), 42), None, InstructionError::Immutable, "should fail because the program data account isn't upgradeable", @@ -138,7 +137,7 @@ async fn test_extend_program_by_zero_bytes() { let payer_address = context.payer.pubkey(); assert_ix_error( &mut context, - &[extend_program(&program_address, Some(&payer_address), 0)], + extend_program(&program_address, Some(&payer_address), 0), None, InstructionError::InvalidInstructionData, "should fail because the program data account must be extended by more than 0 bytes", @@ -175,12 +174,7 @@ async fn test_extend_program_past_max_size() { let payer_address = context.payer.pubkey(); assert_ix_error( &mut context, - &[ - extend_program(&program_address, Some(&payer_address), 1), - // To request large transaction accounts data size to allow max sized test - // instruction being loaded and processed. - ComputeBudgetInstruction::set_accounts_data_size_limit(u32::MAX), - ], + extend_program(&program_address, Some(&payer_address), 1), None, InstructionError::InvalidRealloc, "should fail because the program data account cannot be extended past the max data size", @@ -235,11 +229,11 @@ async fn test_extend_program_with_invalid_payer() { assert_ix_error( &mut context, - &[extend_program( + extend_program( &program_address, Some(&payer_with_insufficient_funds.pubkey()), 1024, - )], + ), Some(&payer_with_insufficient_funds), InstructionError::from(SystemError::ResultWithNegativeLamports), "should fail because the payer has insufficient funds to cover program data account rent", @@ -248,11 +242,11 @@ async fn test_extend_program_with_invalid_payer() { assert_ix_error( &mut context, - &[extend_program( + extend_program( &program_address, Some(&payer_with_invalid_owner.pubkey()), 1, - )], + ), Some(&payer_with_invalid_owner), InstructionError::ExternalAccountLamportSpend, "should fail because the payer is not a system account", @@ -277,7 +271,7 @@ async fn test_extend_program_with_invalid_payer() { assert_ix_error( &mut context, - &[ix], + ix, None, InstructionError::PrivilegeEscalation, "should fail because the payer did not sign", @@ -315,7 +309,7 @@ async fn test_extend_program_without_payer() { assert_ix_error( &mut context, - &[extend_program(&program_address, None, 1024)], + extend_program(&program_address, None, 1024), None, InstructionError::NotEnoughAccountKeys, "should fail because program data has insufficient funds to cover rent", @@ -399,7 +393,7 @@ async fn test_extend_program_with_invalid_system_program() { assert_ix_error( &mut context, - &[ix], + ix, None, InstructionError::MissingAccount, "should fail because the system program is missing", @@ -450,7 +444,7 @@ async fn test_extend_program_with_mismatch_program_data() { assert_ix_error( &mut context, - &[ix], + ix, None, InstructionError::InvalidArgument, "should fail because the program data account doesn't match the program", @@ -499,7 +493,7 @@ async fn test_extend_program_with_readonly_program_data() { assert_ix_error( &mut context, - &[ix], + ix, None, InstructionError::InvalidArgument, "should fail because the program data account is not writable", @@ -537,7 +531,7 @@ async fn test_extend_program_with_invalid_program_data_state() { assert_ix_error( &mut context, - &[extend_program(&program_address, Some(&payer_address), 1024)], + extend_program(&program_address, Some(&payer_address), 1024), None, InstructionError::InvalidAccountData, "should fail because the program data account state isn't valid", @@ -577,7 +571,7 @@ async fn test_extend_program_with_invalid_program_data_owner() { assert_ix_error( &mut context, - &[extend_program(&program_address, Some(&payer_address), 1024)], + extend_program(&program_address, Some(&payer_address), 1024), None, InstructionError::InvalidAccountOwner, "should fail because the program data account owner isn't valid", @@ -626,7 +620,7 @@ async fn test_extend_program_with_readonly_program() { assert_ix_error( &mut context, - &[ix], + ix, None, InstructionError::InvalidArgument, "should fail because the program account is not writable", @@ -672,7 +666,7 @@ async fn test_extend_program_with_invalid_program_owner() { assert_ix_error( &mut context, - &[extend_program(&program_address, Some(&payer_address), 1024)], + extend_program(&program_address, Some(&payer_address), 1024), None, InstructionError::InvalidAccountOwner, "should fail because the program account owner isn't valid", @@ -712,7 +706,7 @@ async fn test_extend_program_with_invalid_program_state() { assert_ix_error( &mut context, - &[extend_program(&program_address, Some(&payer_address), 1024)], + extend_program(&program_address, Some(&payer_address), 1024), None, InstructionError::InvalidAccountData, "should fail because the program account state isn't valid", diff --git a/programs/bpf/tests/programs.rs b/programs/bpf/tests/programs.rs index 4d109083772df6..186841d4f8cb38 100644 --- a/programs/bpf/tests/programs.rs +++ b/programs/bpf/tests/programs.rs @@ -20,8 +20,7 @@ use { solana_bpf_rust_realloc_invoke::instructions::*, solana_ledger::token_balances::collect_token_balances, solana_program_runtime::{ - compute_budget::{self, ComputeBudget}, - invoke_context::with_mock_invoke_context, + compute_budget::ComputeBudget, invoke_context::with_mock_invoke_context, timings::ExecuteTimings, }, solana_rbpf::{ @@ -2982,17 +2981,13 @@ fn test_program_bpf_realloc() { .send_and_confirm_message( signer, Message::new( - &[ - realloc_extend_and_fill( - &program_id, - &pubkey, - MAX_PERMITTED_DATA_INCREASE, - 1, - &mut bump, - ), - // Request max transaction accounts data size to allow large instruction - ComputeBudgetInstruction::set_accounts_data_size_limit(u32::MAX), - ], + &[realloc_extend_and_fill( + &program_id, + &pubkey, + MAX_PERMITTED_DATA_INCREASE, + 1, + &mut bump, + )], Some(&mint_pubkey), ), ) @@ -3010,16 +3005,12 @@ fn test_program_bpf_realloc() { .send_and_confirm_message( signer, Message::new( - &[ - realloc_extend( - &program_id, - &pubkey, - MAX_PERMITTED_DATA_INCREASE, - &mut bump - ), - // Request max transaction accounts data size to allow large instruction - ComputeBudgetInstruction::set_accounts_data_size_limit(u32::MAX), - ], + &[realloc_extend( + &program_id, + &pubkey, + MAX_PERMITTED_DATA_INCREASE, + &mut bump + )], Some(&mint_pubkey), ) ) @@ -3033,10 +3024,7 @@ fn test_program_bpf_realloc() { .send_and_confirm_message( signer, Message::new( - &[ - realloc(&program_id, &pubkey, 0, &mut bump), - ComputeBudgetInstruction::set_accounts_data_size_limit(u32::MAX), - ], + &[realloc(&program_id, &pubkey, 0, &mut bump)], Some(&mint_pubkey), ), ) @@ -3240,18 +3228,14 @@ fn test_program_bpf_realloc_invoke() { .send_and_confirm_message( signer, Message::new( - &[ - Instruction::new_with_bytes( - realloc_invoke_program_id, - &[INVOKE_REALLOC_MAX_PLUS_ONE], - vec![ - AccountMeta::new(pubkey, false), - AccountMeta::new_readonly(realloc_program_id, false), - ], - ), - // Request max transaction accounts data size to allow large instruction - ComputeBudgetInstruction::set_accounts_data_size_limit(u32::MAX), - ], + &[Instruction::new_with_bytes( + realloc_invoke_program_id, + &[INVOKE_REALLOC_MAX_PLUS_ONE], + vec![ + AccountMeta::new(pubkey, false), + AccountMeta::new_readonly(realloc_program_id, false), + ], + )], Some(&mint_pubkey), ) ) @@ -3266,18 +3250,14 @@ fn test_program_bpf_realloc_invoke() { .send_and_confirm_message( signer, Message::new( - &[ - Instruction::new_with_bytes( - realloc_invoke_program_id, - &[INVOKE_REALLOC_MAX_TWICE], - vec![ - AccountMeta::new(pubkey, false), - AccountMeta::new_readonly(realloc_program_id, false), - ], - ), - // Request max transaction accounts data size to allow large instruction - ComputeBudgetInstruction::set_accounts_data_size_limit(u32::MAX), - ], + &[Instruction::new_with_bytes( + realloc_invoke_program_id, + &[INVOKE_REALLOC_MAX_TWICE], + vec![ + AccountMeta::new(pubkey, false), + AccountMeta::new_readonly(realloc_program_id, false), + ], + )], Some(&mint_pubkey), ) ) @@ -3500,18 +3480,14 @@ fn test_program_bpf_realloc_invoke() { .send_and_confirm_message( signer, Message::new( - &[ - Instruction::new_with_bytes( - realloc_invoke_program_id, - &[INVOKE_REALLOC_MAX_INVOKE_MAX], - vec![ - AccountMeta::new(invoke_pubkey, false), - AccountMeta::new_readonly(realloc_program_id, false), - ], - ), - // Request max transaction accounts data size to allow large instruction - ComputeBudgetInstruction::set_accounts_data_size_limit(u32::MAX), - ], + &[Instruction::new_with_bytes( + realloc_invoke_program_id, + &[INVOKE_REALLOC_MAX_INVOKE_MAX], + vec![ + AccountMeta::new(invoke_pubkey, false), + AccountMeta::new_readonly(realloc_program_id, false), + ], + )], Some(&mint_pubkey), ) ) @@ -3573,19 +3549,15 @@ fn test_program_bpf_realloc_invoke() { .send_and_confirm_message( signer, Message::new( - &[ - Instruction::new_with_bytes( - realloc_invoke_program_id, - &[INVOKE_INVOKE_MAX_TWICE], - vec![ - AccountMeta::new(invoke_pubkey, false), - AccountMeta::new_readonly(realloc_invoke_program_id, false), - AccountMeta::new_readonly(realloc_program_id, false), - ], - ), - // Request max transaction accounts data size to allow large instruction - ComputeBudgetInstruction::set_accounts_data_size_limit(u32::MAX), - ], + &[Instruction::new_with_bytes( + realloc_invoke_program_id, + &[INVOKE_INVOKE_MAX_TWICE], + vec![ + AccountMeta::new(invoke_pubkey, false), + AccountMeta::new_readonly(realloc_invoke_program_id, false), + AccountMeta::new_readonly(realloc_program_id, false), + ], + )], Some(&mint_pubkey), ) ) @@ -3613,18 +3585,14 @@ fn test_program_bpf_realloc_invoke() { .send_and_confirm_message( signer, Message::new( - &[ - Instruction::new_with_bytes( - realloc_invoke_program_id, - &[INVOKE_REALLOC_EXTEND_MAX, 1, i as u8, (i / 255) as u8], - vec![ - AccountMeta::new(pubkey, false), - AccountMeta::new_readonly(realloc_program_id, false), - ], - ), - // Request max transaction accounts data size to allow large instruction - ComputeBudgetInstruction::set_accounts_data_size_limit(u32::MAX), - ], + &[Instruction::new_with_bytes( + realloc_invoke_program_id, + &[INVOKE_REALLOC_EXTEND_MAX, 1, i as u8, (i / 255) as u8], + vec![ + AccountMeta::new(pubkey, false), + AccountMeta::new_readonly(realloc_program_id, false), + ], + )], Some(&mint_pubkey), ), ) @@ -3642,18 +3610,14 @@ fn test_program_bpf_realloc_invoke() { .send_and_confirm_message( signer, Message::new( - &[ - Instruction::new_with_bytes( - realloc_invoke_program_id, - &[INVOKE_REALLOC_EXTEND_MAX, 2, 1, 1], - vec![ - AccountMeta::new(pubkey, false), - AccountMeta::new_readonly(realloc_program_id, false), - ], - ), - // Request max transaction accounts data size to allow large instruction - ComputeBudgetInstruction::set_accounts_data_size_limit(u32::MAX), - ], + &[Instruction::new_with_bytes( + realloc_invoke_program_id, + &[INVOKE_REALLOC_EXTEND_MAX, 2, 1, 1], + vec![ + AccountMeta::new(pubkey, false), + AccountMeta::new_readonly(realloc_program_id, false), + ], + )], Some(&mint_pubkey), ) ) @@ -3818,8 +3782,6 @@ fn test_program_fees() { &fee_structure, true, true, - false, - compute_budget::LoadedAccountsDataLimitType::V0, ); bank_client .send_and_confirm_message(&[&mint_keypair], message) @@ -3842,8 +3804,6 @@ fn test_program_fees() { &fee_structure, true, true, - false, - compute_budget::LoadedAccountsDataLimitType::V0, ); assert!(expected_normal_fee < expected_prioritized_fee); diff --git a/runtime/src/accounts.rs b/runtime/src/accounts.rs index b9b3c20fda0103..68b9062923ce9f 100644 --- a/runtime/src/accounts.rs +++ b/runtime/src/accounts.rs @@ -29,16 +29,14 @@ use { log::*, rand::{thread_rng, Rng}, solana_address_lookup_table_program::{error::AddressLookupError, state::AddressLookupTable}, - solana_program_runtime::compute_budget::ComputeBudget, solana_sdk::{ account::{Account, AccountSharedData, ReadableAccount, WritableAccount}, account_utils::StateMut, bpf_loader_upgradeable::{self, UpgradeableLoaderState}, clock::{BankId, Slot, INITIAL_RENT_EPOCH}, feature_set::{ - self, add_set_compute_unit_price_ix, cap_transaction_accounts_data_size, - return_none_for_zero_lamport_accounts, use_default_units_in_fee_calculation, - FeatureSet, + self, add_set_compute_unit_price_ix, return_none_for_zero_lamport_accounts, + use_default_units_in_fee_calculation, FeatureSet, }, fee::FeeStructure, genesis_config::ClusterType, @@ -63,7 +61,6 @@ use { std::{ cmp::Reverse, collections::{hash_map, BinaryHeap, HashMap, HashSet}, - num::NonZeroUsize, ops::RangeBounds, path::PathBuf, sync::{ @@ -280,31 +277,17 @@ impl Accounts { let mut rent_debits = RentDebits::default(); let preserve_rent_epoch_for_rent_exempt_accounts = feature_set .is_active(&feature_set::preserve_rent_epoch_for_rent_exempt_accounts::id()); - let requested_loaded_accounts_data_size_limit = - if feature_set.is_active(&feature_set::cap_transaction_accounts_data_size::id()) { - let requested_loaded_accounts_data_size = - Self::get_requested_loaded_accounts_data_size_limit(tx, feature_set)?; - Some(requested_loaded_accounts_data_size) - } else { - None - }; - let mut accumulated_accounts_data_size: usize = 0; - for (i, key) in account_keys.iter().enumerate() { - let (account, loaded_programdata_account_size) = if !message.is_non_loader_key(i) { + let account = if !message.is_non_loader_key(i) { // Fill in an empty account for the program slots. - (AccountSharedData::default(), 0) + AccountSharedData::default() } else { #[allow(clippy::collapsible_else_if)] if solana_sdk::sysvar::instructions::check_id(key) { - ( - Self::construct_instructions_account( - message, - feature_set.is_active( - &feature_set::instructions_sysvar_owned_by_sysvar::id(), - ), - ), - 0, + Self::construct_instructions_account( + message, + feature_set + .is_active(&feature_set::instructions_sysvar_owned_by_sysvar::id()), ) } else { let (mut account, rent) = if let Some(account_override) = @@ -350,7 +333,6 @@ impl Accounts { validated_fee_payer = true; } - let mut loaded_programdata_account_size: usize = 0; if bpf_loader_upgradeable::check_id(account.owner()) { if message.is_writable(i) && !message.is_upgradeable_loader_present() { error_counters.invalid_writable_account += 1; @@ -370,8 +352,6 @@ impl Accounts { load_zero_lamports, ) { - loaded_programdata_account_size = - programdata_account.data().len(); account_deps .push((programdata_address, programdata_account)); } else { @@ -391,19 +371,9 @@ impl Accounts { tx_rent += rent; rent_debits.insert(key, rent, account.lamports()); - (account, loaded_programdata_account_size) + account } }; - Self::accumulate_and_check_loaded_account_data_size( - &mut accumulated_accounts_data_size, - account - .data() - .len() - .saturating_add(loaded_programdata_account_size), - requested_loaded_accounts_data_size_limit, - error_counters, - )?; - accounts.push((*key, account)); } debug_assert_eq!(accounts.len(), account_keys.len()); @@ -425,8 +395,6 @@ impl Accounts { instruction.program_id_index as usize, error_counters, load_zero_lamports, - &mut accumulated_accounts_data_size, - requested_loaded_accounts_data_size_limit, ) }) .collect::>>>()?; @@ -444,22 +412,6 @@ impl Accounts { } } - fn get_requested_loaded_accounts_data_size_limit( - tx: &SanitizedTransaction, - feature_set: &FeatureSet, - ) -> Result { - let mut compute_budget = ComputeBudget::default(); - let _prioritization_fee_details = compute_budget.process_instructions( - tx.message().program_instructions_iter(), - feature_set.is_active(&use_default_units_in_fee_calculation::id()), - feature_set.is_active(&add_set_compute_unit_price_ix::id()), - feature_set.is_active(&cap_transaction_accounts_data_size::id()), - Bank::get_loaded_accounts_data_limit_type(feature_set), - )?; - NonZeroUsize::new(compute_budget.accounts_data_size_limit as usize) - .ok_or(TransactionError::InvalidLoadedAccountsDataSizeLimit) - } - fn validate_fee_payer( payer_address: &Pubkey, payer_account: &mut AccountSharedData, @@ -515,22 +467,15 @@ impl Accounts { mut program_account_index: usize, error_counters: &mut TransactionErrorMetrics, load_zero_lamports: LoadZeroLamports, - accumulated_accounts_data_size: &mut usize, - requested_loaded_accounts_data_size_limit: Option, ) -> Result> { let mut account_indices = Vec::new(); - let (mut program_id, already_loaded_as_non_loader) = - match accounts.get(program_account_index) { - Some(program_account) => ( - program_account.0, - // program account is already loaded if it's not empty in `accounts` - program_account.1 != AccountSharedData::default(), - ), - None => { - error_counters.account_not_found += 1; - return Err(TransactionError::ProgramAccountNotFound); - } - }; + let mut program_id = match accounts.get(program_account_index) { + Some(program_account) => program_account.0, + None => { + error_counters.account_not_found += 1; + return Err(TransactionError::ProgramAccountNotFound); + } + }; let mut depth = 0; while !native_loader::check_id(&program_id) { if depth >= 5 { @@ -538,7 +483,6 @@ impl Accounts { return Err(TransactionError::CallChainTooDeep); } depth += 1; - let mut loaded_account_total_size: usize = 0; program_account_index = match self.accounts_db.load_with_fixed_root( ancestors, @@ -547,13 +491,6 @@ impl Accounts { ) { Some((program_account, _)) => { let account_index = accounts.len(); - // do not double count account size for program account on top of call chain - // that has already been loaded during load_transaction as non-loader account. - // Other accounts data size in the call chain are counted. - if !(depth == 1 && already_loaded_as_non_loader) { - loaded_account_total_size = - loaded_account_total_size.saturating_add(program_account.data().len()); - } accounts.push((program_id, program_account)); account_index } @@ -571,7 +508,6 @@ impl Accounts { // Add loader to chain let program_owner = *program.owner(); account_indices.insert(0, program_account_index); - if bpf_loader_upgradeable::check_id(&program_owner) { // The upgradeable loader requires the derived ProgramData account if let Ok(UpgradeableLoaderState::Program { @@ -585,10 +521,6 @@ impl Accounts { ) { Some((programdata_account, _)) => { let account_index = accounts.len(); - if !(depth == 1 && already_loaded_as_non_loader) { - loaded_account_total_size = loaded_account_total_size - .saturating_add(programdata_account.data().len()); - } accounts.push((programdata_address, programdata_account)); account_index } @@ -603,43 +535,12 @@ impl Accounts { return Err(TransactionError::InvalidProgramForExecution); } } - Self::accumulate_and_check_loaded_account_data_size( - accumulated_accounts_data_size, - loaded_account_total_size, - requested_loaded_accounts_data_size_limit, - error_counters, - )?; program_id = program_owner; } Ok(account_indices) } - /// Accumulate loaded account data size into `accumulated_accounts_data_size`. - /// Returns TransactionErr::MaxLoadedAccountsDataSizeExceeded if - /// `requested_loaded_accounts_data_size_limit` is specified and - /// `accumulated_accounts_data_size` exceeds it. - fn accumulate_and_check_loaded_account_data_size( - accumulated_loaded_accounts_data_size: &mut usize, - account_data_size: usize, - requested_loaded_accounts_data_size_limit: Option, - error_counters: &mut TransactionErrorMetrics, - ) -> Result<()> { - if let Some(requested_loaded_accounts_data_size) = requested_loaded_accounts_data_size_limit - { - *accumulated_loaded_accounts_data_size = - accumulated_loaded_accounts_data_size.saturating_add(account_data_size); - if *accumulated_loaded_accounts_data_size > requested_loaded_accounts_data_size.get() { - error_counters.max_loaded_accounts_data_size_exceeded += 1; - Err(TransactionError::MaxLoadedAccountsDataSizeExceeded) - } else { - Ok(()) - } - } else { - Ok(()) - } - } - #[allow(clippy::too_many_arguments)] pub fn load_accounts( &self, @@ -670,8 +571,6 @@ impl Accounts { fee_structure, feature_set.is_active(&add_set_compute_unit_price_ix::id()), feature_set.is_active(&use_default_units_in_fee_calculation::id()), - feature_set.is_active(&cap_transaction_accounts_data_size::id()), - Bank::get_loaded_accounts_data_limit_type(feature_set), ) } else { return (Err(TransactionError::BlockhashNotFound), None); @@ -1540,7 +1439,7 @@ mod tests { }, assert_matches::assert_matches, solana_address_lookup_table_program::state::LookupTableMeta, - solana_program_runtime::{compute_budget, executor_cache::Executors}, + solana_program_runtime::executor_cache::Executors, solana_sdk::{ account::{AccountSharedData, WritableAccount}, epoch_schedule::EpochSchedule, @@ -1798,8 +1697,6 @@ mod tests { &FeeStructure::default(), true, true, - true, - compute_budget::LoadedAccountsDataLimitType::V0, ); assert_eq!(fee, lamports_per_signature); @@ -2600,8 +2497,6 @@ mod tests { 0, &mut error_counters, LoadZeroLamports::SomeWithZeroLamportAccount, - &mut 0, - None, ), Err(TransactionError::ProgramAccountNotFound) ); @@ -4034,235 +3929,4 @@ mod tests { )); } } - - #[test] - fn test_accumulate_and_check_loaded_account_data_size() { - let mut error_counter = TransactionErrorMetrics::default(); - - // assert check is OK if data limit is not enabled - { - let mut accumulated_data_size: usize = 0; - let data_size = usize::MAX; - let requested_data_size_limit = None; - - assert!(Accounts::accumulate_and_check_loaded_account_data_size( - &mut accumulated_data_size, - data_size, - requested_data_size_limit, - &mut error_counter - ) - .is_ok()); - } - - // assert accounts are accumulated and check properly - { - let mut accumulated_data_size: usize = 0; - let data_size: usize = 123; - let requested_data_size_limit = NonZeroUsize::new(data_size); - - // OK - assert!(Accounts::accumulate_and_check_loaded_account_data_size( - &mut accumulated_data_size, - data_size, - requested_data_size_limit, - &mut error_counter - ) - .is_ok()); - assert_eq!(data_size, accumulated_data_size); - - // exceeds - let another_byte: usize = 1; - assert_eq!( - Accounts::accumulate_and_check_loaded_account_data_size( - &mut accumulated_data_size, - another_byte, - requested_data_size_limit, - &mut error_counter - ), - Err(TransactionError::MaxLoadedAccountsDataSizeExceeded) - ); - } - } - - #[test] - fn test_load_executable_accounts() { - solana_logger::setup(); - let accounts = Accounts::new_with_config_for_tests( - Vec::new(), - &ClusterType::Development, - AccountSecondaryIndexes::default(), - false, - AccountShrinkThreshold::default(), - ); - let mut error_counters = TransactionErrorMetrics::default(); - let ancestors = vec![(0, 0)].into_iter().collect(); - - let space: usize = 9; - let keypair = Keypair::new(); - let mut account = AccountSharedData::new(1, space, &native_loader::id()); - account.set_executable(true); - accounts.store_slow_uncached(0, &keypair.pubkey(), &account); - - let mut accumulated_accounts_data_size: usize = 0; - let mut expect_accumulated_accounts_data_size: usize; - - // test: program account has been loaded as non-loader, load_executable_accounts - // will not double count its data size - { - let mut loaded_accounts = vec![(keypair.pubkey(), account)]; - accumulated_accounts_data_size += space; - expect_accumulated_accounts_data_size = accumulated_accounts_data_size; - assert!(accounts - .load_executable_accounts( - &ancestors, - &mut loaded_accounts, - 0, - &mut error_counters, - LoadZeroLamports::SomeWithZeroLamportAccount, - &mut accumulated_accounts_data_size, - NonZeroUsize::new(expect_accumulated_accounts_data_size), - ) - .is_ok()); - assert_eq!( - expect_accumulated_accounts_data_size, - accumulated_accounts_data_size - ); - } - - // test: program account has not been loaded cause it's loader, load_executable_accounts - // will accumulate its data size - { - let mut loaded_accounts = vec![(keypair.pubkey(), AccountSharedData::default())]; - expect_accumulated_accounts_data_size = accumulated_accounts_data_size + space; - assert!(accounts - .load_executable_accounts( - &ancestors, - &mut loaded_accounts, - 0, - &mut error_counters, - LoadZeroLamports::SomeWithZeroLamportAccount, - &mut accumulated_accounts_data_size, - NonZeroUsize::new(expect_accumulated_accounts_data_size), - ) - .is_ok()); - assert_eq!( - expect_accumulated_accounts_data_size, - accumulated_accounts_data_size - ); - } - - // test: try to load one more account will accumulate additional `space` bytes, therefore - // exceed limit of `expect_accumulated_accounts_data_size` set above. - { - let mut loaded_accounts = vec![(keypair.pubkey(), AccountSharedData::default())]; - assert_eq!( - accounts.load_executable_accounts( - &ancestors, - &mut loaded_accounts, - 0, - &mut error_counters, - LoadZeroLamports::SomeWithZeroLamportAccount, - &mut accumulated_accounts_data_size, - NonZeroUsize::new(expect_accumulated_accounts_data_size), - ), - Err(TransactionError::MaxLoadedAccountsDataSizeExceeded) - ); - } - } - - #[test] - fn test_load_executable_accounts_with_upgradeable_program() { - solana_logger::setup(); - let accounts = Accounts::new_with_config_for_tests( - Vec::new(), - &ClusterType::Development, - AccountSecondaryIndexes::default(), - false, - AccountShrinkThreshold::default(), - ); - let mut error_counters = TransactionErrorMetrics::default(); - let ancestors = vec![(0, 0)].into_iter().collect(); - - // call chain: native_loader -> key0 -> upgradeable bpf loader -> program_key (that has programdata_key) - let programdata_key = Pubkey::new(&[3u8; 32]); - let program_data = UpgradeableLoaderState::ProgramData { - slot: 0, - upgrade_authority_address: None, - }; - let mut program_data_account = - AccountSharedData::new_data(1, &program_data, &Pubkey::default()).unwrap(); - let program_data_account_size = program_data_account.data().len(); - program_data_account.set_executable(true); - program_data_account.set_rent_epoch(0); - accounts.store_slow_uncached(0, &programdata_key, &program_data_account); - - let program_key = Pubkey::new(&[2u8; 32]); - let program = UpgradeableLoaderState::Program { - programdata_address: programdata_key, - }; - let mut program_account = - AccountSharedData::new_data(1, &program, &bpf_loader_upgradeable::id()).unwrap(); - let program_account_size = program_account.data().len(); - program_account.set_executable(true); - program_account.set_rent_epoch(0); - accounts.store_slow_uncached(0, &program_key, &program_account); - - let key0 = Pubkey::new(&[1u8; 32]); - let mut bpf_loader_account = AccountSharedData::new(1, 0, &key0); - bpf_loader_account.set_executable(true); - accounts.store_slow_uncached(0, &bpf_loader_upgradeable::id(), &bpf_loader_account); - - let space: usize = 9; - let mut account = AccountSharedData::new(1, space, &native_loader::id()); - account.set_executable(true); - accounts.store_slow_uncached(0, &key0, &account); - - // test: program_key account has been loaded as non-loader, load_executable_accounts - // will not double count its data size, but still accumulate data size from - // callchain - { - let expect_accumulated_accounts_data_size: usize = space; - let mut accumulated_accounts_data_size: usize = 0; - let mut loaded_accounts = vec![(program_key, program_account)]; - assert!(accounts - .load_executable_accounts( - &ancestors, - &mut loaded_accounts, - 0, - &mut error_counters, - LoadZeroLamports::SomeWithZeroLamportAccount, - &mut accumulated_accounts_data_size, - NonZeroUsize::new(expect_accumulated_accounts_data_size), - ) - .is_ok()); - assert_eq!( - expect_accumulated_accounts_data_size, - accumulated_accounts_data_size - ); - } - - // test: program account has not been loaded cause it's loader, load_executable_accounts - // will accumulate entire callchain data size. - { - let mut loaded_accounts = vec![(program_key, AccountSharedData::default())]; - let mut accumulated_accounts_data_size: usize = 0; - let expect_accumulated_accounts_data_size = - program_account_size + program_data_account_size + space; - assert!(accounts - .load_executable_accounts( - &ancestors, - &mut loaded_accounts, - 0, - &mut error_counters, - LoadZeroLamports::SomeWithZeroLamportAccount, - &mut accumulated_accounts_data_size, - NonZeroUsize::new(expect_accumulated_accounts_data_size), - ) - .is_ok()); - assert_eq!( - expect_accumulated_accounts_data_size, - accumulated_accounts_data_size - ); - } - } } diff --git a/runtime/src/bank.rs b/runtime/src/bank.rs index d090aeaef76bb2..f1a63d1d0b2ba6 100644 --- a/runtime/src/bank.rs +++ b/runtime/src/bank.rs @@ -106,9 +106,8 @@ use { epoch_schedule::EpochSchedule, feature, feature_set::{ - self, add_set_compute_unit_price_ix, cap_transaction_accounts_data_size, - default_units_per_instruction, disable_fee_calculator, - enable_early_verification_of_account_modifications, + self, add_set_compute_unit_price_ix, default_units_per_instruction, + disable_fee_calculator, enable_early_verification_of_account_modifications, use_default_units_in_fee_calculation, FeatureSet, }, fee::FeeStructure, @@ -283,7 +282,7 @@ impl RentDebits { } pub type BankStatusCache = StatusCache>; -#[frozen_abi(digest = "8g9MqWWWrMpuqVHGbR9mYDizn2b91o7Yu7WGgvfveSxh")] +#[frozen_abi(digest = "HEJXoycXvGT2pwMuKcUKzzbeemnqbfrUC4jHZx1ncaWv")] pub type BankSlotDelta = SlotDelta>; // Eager rent collection repeats in cyclic manner. @@ -3441,9 +3440,6 @@ impl Bank { .is_active(&add_set_compute_unit_price_ix::id()), self.feature_set .is_active(&use_default_units_in_fee_calculation::id()), - self.feature_set - .is_active(&cap_transaction_accounts_data_size::id()), - Self::get_loaded_accounts_data_limit_type(&self.feature_set), )) } @@ -3487,9 +3483,6 @@ impl Bank { .is_active(&add_set_compute_unit_price_ix::id()), self.feature_set .is_active(&use_default_units_in_fee_calculation::id()), - self.feature_set - .is_active(&cap_transaction_accounts_data_size::id()), - Self::get_loaded_accounts_data_limit_type(&self.feature_set), ) } @@ -4330,8 +4323,6 @@ impl Bank { tx.message().program_instructions_iter(), feature_set.is_active(&default_units_per_instruction::id()), feature_set.is_active(&add_set_compute_unit_price_ix::id()), - feature_set.is_active(&cap_transaction_accounts_data_size::id()), - Self::get_loaded_accounts_data_limit_type(&self.feature_set), ); compute_budget_process_transaction_time.stop(); saturating_add_assign!( @@ -4618,8 +4609,6 @@ impl Bank { fee_structure: &FeeStructure, support_set_compute_unit_price_ix: bool, use_default_units_per_instruction: bool, - cap_transaction_accounts_data_size: bool, - loaded_accounts_data_limit_type: compute_budget::LoadedAccountsDataLimitType, ) -> u64 { // Fee based on compute units and signatures const BASE_CONGESTION: f64 = 5_000.0; @@ -4636,8 +4625,6 @@ impl Bank { message.program_instructions_iter(), use_default_units_per_instruction, support_set_compute_unit_price_ix, - cap_transaction_accounts_data_size, - loaded_accounts_data_limit_type, ) .unwrap_or_default(); let prioritization_fee = prioritization_fee_details.get_fee(); @@ -4705,9 +4692,6 @@ impl Bank { .is_active(&add_set_compute_unit_price_ix::id()), self.feature_set .is_active(&use_default_units_in_fee_calculation::id()), - self.feature_set - .is_active(&cap_transaction_accounts_data_size::id()), - Self::get_loaded_accounts_data_limit_type(&self.feature_set), ); // In case of instruction error, even though no accounts @@ -7638,17 +7622,6 @@ impl Bank { total_accounts_stats } - - /// if the `default` and/or `max` value for ComputeBudget:::Accounts_data_size_limit changes, - /// the change needs to be gated by feature gate with corresponding new enum value. - /// should use this function to get correct loaded_accounts_data_limit_type based on - /// feature_set. - pub fn get_loaded_accounts_data_limit_type( - _feature_set: &FeatureSet, - ) -> compute_budget::LoadedAccountsDataLimitType { - compute_budget::LoadedAccountsDataLimitType::V0 - // In the future, use feature_set to determine correct LoadedAccountsDataLimitType here. - } } /// Compute how much an account has changed size. This function is useful when the data size delta @@ -10684,8 +10657,6 @@ pub(crate) mod tests { &FeeStructure::default(), true, true, - true, - compute_budget::LoadedAccountsDataLimitType::V0, ); let (expected_fee_collected, expected_fee_burned) = @@ -10868,8 +10839,6 @@ pub(crate) mod tests { &FeeStructure::default(), true, true, - true, - compute_budget::LoadedAccountsDataLimitType::V0, ); assert_eq!( bank.get_balance(&mint_keypair.pubkey()), @@ -10888,8 +10857,6 @@ pub(crate) mod tests { &FeeStructure::default(), true, true, - true, - compute_budget::LoadedAccountsDataLimitType::V0, ); assert_eq!( bank.get_balance(&mint_keypair.pubkey()), @@ -11006,8 +10973,6 @@ pub(crate) mod tests { &FeeStructure::default(), true, true, - true, - compute_budget::LoadedAccountsDataLimitType::V0, ) * 2 ) .0 @@ -17361,42 +17326,34 @@ pub(crate) mod tests { // Default: no fee. let message = SanitizedMessage::try_from(Message::new(&[], Some(&Pubkey::new_unique()))).unwrap(); - for cap_transaction_accounts_data_size in &[true, false] { - assert_eq!( - Bank::calculate_fee( - &message, - 0, - &FeeStructure { - lamports_per_signature: 0, - ..FeeStructure::default() - }, - true, - true, - *cap_transaction_accounts_data_size, - compute_budget::LoadedAccountsDataLimitType::V0, - ), - 0 - ); - } + assert_eq!( + Bank::calculate_fee( + &message, + 0, + &FeeStructure { + lamports_per_signature: 0, + ..FeeStructure::default() + }, + true, + true, + ), + 0 + ); // One signature, a fee. - for cap_transaction_accounts_data_size in &[true, false] { - assert_eq!( - Bank::calculate_fee( - &message, - 1, - &FeeStructure { - lamports_per_signature: 1, - ..FeeStructure::default() - }, - true, - true, - *cap_transaction_accounts_data_size, - compute_budget::LoadedAccountsDataLimitType::V0, - ), - 1 - ); - } + assert_eq!( + Bank::calculate_fee( + &message, + 1, + &FeeStructure { + lamports_per_signature: 1, + ..FeeStructure::default() + }, + true, + true, + ), + 1 + ); // Two signatures, double the fee. let key0 = Pubkey::new_unique(); @@ -17404,23 +17361,19 @@ pub(crate) mod tests { let ix0 = system_instruction::transfer(&key0, &key1, 1); let ix1 = system_instruction::transfer(&key1, &key0, 1); let message = SanitizedMessage::try_from(Message::new(&[ix0, ix1], Some(&key0))).unwrap(); - for cap_transaction_accounts_data_size in &[true, false] { - assert_eq!( - Bank::calculate_fee( - &message, - 2, - &FeeStructure { - lamports_per_signature: 2, - ..FeeStructure::default() - }, - true, - true, - *cap_transaction_accounts_data_size, - compute_budget::LoadedAccountsDataLimitType::V0, - ), - 4 - ); - } + assert_eq!( + Bank::calculate_fee( + &message, + 2, + &FeeStructure { + lamports_per_signature: 2, + ..FeeStructure::default() + }, + true, + true, + ), + 4 + ); } #[test] @@ -17436,20 +17389,10 @@ pub(crate) mod tests { let message = SanitizedMessage::try_from(Message::new(&[], Some(&Pubkey::new_unique()))).unwrap(); - for cap_transaction_accounts_data_size in &[true, false] { - assert_eq!( - Bank::calculate_fee( - &message, - 1, - &fee_structure, - true, - true, - *cap_transaction_accounts_data_size, - compute_budget::LoadedAccountsDataLimitType::V0 - ), - max_fee + lamports_per_signature - ); - } + assert_eq!( + Bank::calculate_fee(&message, 1, &fee_structure, true, true,), + max_fee + lamports_per_signature + ); // Three signatures, two instructions, no unit request @@ -17458,20 +17401,10 @@ pub(crate) mod tests { let message = SanitizedMessage::try_from(Message::new(&[ix0, ix1], Some(&Pubkey::new_unique()))) .unwrap(); - for cap_transaction_accounts_data_size in &[true, false] { - assert_eq!( - Bank::calculate_fee( - &message, - 1, - &fee_structure, - true, - true, - *cap_transaction_accounts_data_size, - compute_budget::LoadedAccountsDataLimitType::V0 - ), - max_fee + 3 * lamports_per_signature - ); - } + assert_eq!( + Bank::calculate_fee(&message, 1, &fee_structure, true, true,), + max_fee + 3 * lamports_per_signature + ); // Explicit fee schedule @@ -17502,21 +17435,11 @@ pub(crate) mod tests { Some(&Pubkey::new_unique()), )) .unwrap(); - for cap_transaction_accounts_data_size in &[true, false] { - let fee = Bank::calculate_fee( - &message, - 1, - &fee_structure, - true, - true, - *cap_transaction_accounts_data_size, - compute_budget::LoadedAccountsDataLimitType::V0, - ); - assert_eq!( - fee, - lamports_per_signature + prioritization_fee_details.get_fee() - ); - } + let fee = Bank::calculate_fee(&message, 1, &fee_structure, true, true); + assert_eq!( + fee, + lamports_per_signature + prioritization_fee_details.get_fee() + ); } } @@ -17550,20 +17473,10 @@ pub(crate) mod tests { Some(&key0), )) .unwrap(); - for cap_transaction_accounts_data_size in &[true, false] { - assert_eq!( - Bank::calculate_fee( - &message, - 1, - &fee_structure, - true, - true, - *cap_transaction_accounts_data_size, - compute_budget::LoadedAccountsDataLimitType::V0 - ), - 2 - ); - } + assert_eq!( + Bank::calculate_fee(&message, 1, &fee_structure, true, true,), + 2 + ); secp_instruction1.data = vec![0]; secp_instruction2.data = vec![10]; @@ -17572,20 +17485,10 @@ pub(crate) mod tests { Some(&key0), )) .unwrap(); - for cap_transaction_accounts_data_size in &[true, false] { - assert_eq!( - Bank::calculate_fee( - &message, - 1, - &fee_structure, - true, - true, - *cap_transaction_accounts_data_size, - compute_budget::LoadedAccountsDataLimitType::V0 - ), - 11 - ); - } + assert_eq!( + Bank::calculate_fee(&message, 1, &fee_structure, true, true,), + 11 + ); } #[test] diff --git a/runtime/src/transaction_error_metrics.rs b/runtime/src/transaction_error_metrics.rs index 438112cdd5cfd7..baa25a07364839 100644 --- a/runtime/src/transaction_error_metrics.rs +++ b/runtime/src/transaction_error_metrics.rs @@ -23,8 +23,6 @@ pub struct TransactionErrorMetrics { pub would_exceed_max_account_cost_limit: usize, pub would_exceed_max_vote_cost_limit: usize, pub would_exceed_account_data_block_limit: usize, - pub max_loaded_accounts_data_size_exceeded: usize, - pub invalid_loaded_accounts_data_size_limit: usize, } impl TransactionErrorMetrics { @@ -78,14 +76,6 @@ impl TransactionErrorMetrics { self.would_exceed_account_data_block_limit, other.would_exceed_account_data_block_limit ); - saturating_add_assign!( - self.max_loaded_accounts_data_size_exceeded, - other.max_loaded_accounts_data_size_exceeded - ); - saturating_add_assign!( - self.invalid_loaded_accounts_data_size_limit, - other.invalid_loaded_accounts_data_size_limit - ); } pub fn report(&self, id: u32, slot: Slot) { @@ -162,16 +152,6 @@ impl TransactionErrorMetrics { self.would_exceed_account_data_block_limit as i64, i64 ), - ( - "max_loaded_accounts_data_size_exceeded", - self.max_loaded_accounts_data_size_exceeded as i64, - i64 - ), - ( - "invalid_loaded_accounts_data_size_limit", - self.invalid_loaded_accounts_data_size_limit as i64, - i64 - ), ); } } diff --git a/sdk/src/compute_budget.rs b/sdk/src/compute_budget.rs index 879e97c9f1c128..1509286bad0fd1 100644 --- a/sdk/src/compute_budget.rs +++ b/sdk/src/compute_budget.rs @@ -38,8 +38,6 @@ pub enum ComputeBudgetInstruction { /// Set a compute unit price in "micro-lamports" to pay a higher transaction /// fee for higher transaction prioritization. SetComputeUnitPrice(u64), - /// Set a specific transaction-wide account data size limit, in bytes, is allowed to allocate. - SetAccountsDataSizeLimit(u32), } impl ComputeBudgetInstruction { @@ -57,9 +55,4 @@ impl ComputeBudgetInstruction { pub fn set_compute_unit_price(micro_lamports: u64) -> Instruction { Instruction::new_with_borsh(id(), &Self::SetComputeUnitPrice(micro_lamports), vec![]) } - - /// Create a `ComputeBudgetInstruction::SetAccountsDataSizeLimit` `Instruction` - pub fn set_accounts_data_size_limit(bytes: u32) -> Instruction { - Instruction::new_with_borsh(id(), &Self::SetAccountsDataSizeLimit(bytes), vec![]) - } } diff --git a/sdk/src/feature_set.rs b/sdk/src/feature_set.rs index a5fec7df1054f5..6d758da46ed9ff 100644 --- a/sdk/src/feature_set.rs +++ b/sdk/src/feature_set.rs @@ -512,10 +512,6 @@ pub mod check_syscall_outputs_do_not_overlap { solana_sdk::declare_id!("3uRVPBpyEJRo1emLCrq38eLRFGcu6uKSpUXqGvU8T7SZ"); } -pub mod cap_transaction_accounts_data_size { - solana_sdk::declare_id!("DdLwVYuvDz26JohmgSbA7mjpJFgX5zP2dkp8qsF2C33V"); -} - lazy_static! { /// Map of feature identifiers to user-visible description pub static ref FEATURE_NAMES: HashMap = [ @@ -638,7 +634,6 @@ lazy_static! { (return_none_for_zero_lamport_accounts::id(), "return none for zero lamport accounts #27800"), (increase_tx_account_lock_limit::id(), "increase tx account lock limit to 128 #27241"), (check_syscall_outputs_do_not_overlap::id(), "check syscall outputs do_not overlap #28600"), - (cap_transaction_accounts_data_size::id(), "cap transaction accounts data size up to its compute unit limits #27839"), /*************** ADD NEW FEATURES HERE ***************/ ] .iter() diff --git a/sdk/src/transaction/error.rs b/sdk/src/transaction/error.rs index 81a4c50b53f3a6..3f25fa5a62541a 100644 --- a/sdk/src/transaction/error.rs +++ b/sdk/src/transaction/error.rs @@ -149,16 +149,6 @@ pub enum TransactionError { "Transaction results in an account ({account_index}) without insufficient funds for rent" )] InsufficientFundsForRent { account_index: u8 }, - - /// Transaction exceeded max loaded accounts data size capped by requested compute units - #[error( - "Transaction exceeded max loaded accounts data size capped by requested compute units" - )] - MaxLoadedAccountsDataSizeExceeded, - - /// LoadedAccountsDataSizeLimit set for transaction must be greater than 0. - #[error("LoadedAccountsDataSizeLimit set for transaction must be greater than 0.")] - InvalidLoadedAccountsDataSizeLimit, } impl From for TransactionError { diff --git a/storage-proto/proto/transaction_by_addr.proto b/storage-proto/proto/transaction_by_addr.proto index 498ccbcf1c2e43..4c95b1829746a5 100644 --- a/storage-proto/proto/transaction_by_addr.proto +++ b/storage-proto/proto/transaction_by_addr.proto @@ -57,8 +57,6 @@ enum TransactionErrorType { WOULD_EXCEED_ACCOUNT_DATA_TOTAL_LIMIT = 29; DUPLICATE_INSTRUCTION = 30; INSUFFICIENT_FUNDS_FOR_RENT = 31; - MAX_LOADED_ACCOUNTS_DATA_SIZE_EXCEEDED = 32; - INVALID_LOADED_ACCOUNTS_DATA_SIZE_LIMIT = 33; } message InstructionError { diff --git a/storage-proto/src/convert.rs b/storage-proto/src/convert.rs index 065360ac31d532..6580095403cf4f 100644 --- a/storage-proto/src/convert.rs +++ b/storage-proto/src/convert.rs @@ -766,8 +766,6 @@ impl TryFrom for TransactionError { 27 => TransactionError::InvalidRentPayingAccount, 28 => TransactionError::WouldExceedMaxVoteCostLimit, 29 => TransactionError::WouldExceedAccountDataTotalLimit, - 32 => TransactionError::MaxLoadedAccountsDataSizeExceeded, - 33 => TransactionError::InvalidLoadedAccountsDataSizeLimit, _ => return Err("Invalid TransactionError"), }) } @@ -871,12 +869,6 @@ impl From for tx_by_addr::TransactionError { TransactionError::InsufficientFundsForRent { .. } => { tx_by_addr::TransactionErrorType::InsufficientFundsForRent } - TransactionError::MaxLoadedAccountsDataSizeExceeded => { - tx_by_addr::TransactionErrorType::MaxLoadedAccountsDataSizeExceeded - } - TransactionError::InvalidLoadedAccountsDataSizeLimit => { - tx_by_addr::TransactionErrorType::InvalidLoadedAccountsDataSizeLimit - } } as i32, instruction_error: match transaction_error { TransactionError::InstructionError(index, ref instruction_error) => { From 7221f916c9e5dcb4471edd8e4a081a19eb92ebd1 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Fri, 18 Nov 2022 04:41:10 +0000 Subject: [PATCH 229/465] ci: refactor docs pipeline (backport #28852) (#28869) * ci: refactor docs pipeline (#28852) * use git diff + grep to get affected files * combine check and combine steps * separate jobs * fix condition (cherry picked from commit cbf224ad5c626da115f2c1d6d0da5a4f41a6ec24) # Conflicts: # .github/workflows/docs.yml * fix conflicts Co-authored-by: Yihau Chen Co-authored-by: yihau --- .github/workflows/docs.yml | 85 ++++++++++++++++++++++++-------------- 1 file changed, 55 insertions(+), 30 deletions(-) diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index f0df4d208a0ab3..a124adcceb5218 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -13,7 +13,9 @@ on: - v[0-9]+.[0-9]+ jobs: - docs-build: + check: + outputs: + continue: ${{ steps.check.outputs.need_to_build }} runs-on: ubuntu-20.04 steps: - name: Checkout @@ -21,47 +23,64 @@ jobs: with: fetch-depth: 0 + - name: Get commit range (push) + if: ${{ github.event_name == 'push' }} + run: | + echo "COMMIT_RANGE=$GIHTUB_SHA" >> $GITHUB_ENV + + - name: Get commit range (pull_request) + if: ${{ github.event_name == 'pull_request' }} + run: | + echo "COMMIT_RANGE=${{ github.event.pull_request.base.sha }}..${{ github.event.pull_request.head.sha }}" >> $GITHUB_ENV + + - name: Get file status + run: | + set +e + git diff --name-only $COMMIT_RANGE | grep \ + -e '.github/workflows/docs.yml' \ + -e 'docs/**' + echo "FILE_CHANGED=$?" >> $GITHUB_ENV + - name: Check id: check + shell: bash run: | source ci/env.sh - echo "::set-output name=tag::$CI_TAG" eval "$(ci/channel-info.sh)" - echo "::set-output name=channel::$CHANNEL" + TAG=$CI_TAG - - name: Get specific changed files - id: changed-files-specific - uses: tj-actions/changed-files@v34 - with: - files: | - .github/workflows/docs.yml - docs/** + echo "TAG: $TAG" + echo "CHANNEL: $CHANNEL" + echo "FILE_CHANGED: $FILE_CHANGED" - - name: Pre Build - id: prebuild - run: | - echo "tag: ${{ steps.check.outputs.tag }}" - echo "channel: ${{ steps.check.outputs.channel }}" - echo "any changes: ${{ steps.changed-files-specific.outputs.any_changed }}" - echo "::set-output name=need_to_build::${{ - steps.check.outputs.tag != '' - || - ( - (steps.check.outputs.channel == 'edge' || steps.check.outputs.channel == 'beta') - && - steps.changed-files-specific.outputs.any_changed != '' - ) - }}" - shell: bash + echo need_to_build="$( + if [ "$TAG" != '' ] + then + echo 1 + elif [ $FILE_CHANGED = 0 ] && ( [ "$CHANNEL" = "beta" ] || [ "$CHANNEL" = "edge" ] ) + then + echo 1 + else + echo 0 + fi + )" >> $GITHUB_OUTPUT + + build_and_deploy: + needs: + - check + if: ${{ needs.check.outputs.continue == 1 }} + name: build & deploy + runs-on: ubuntu-20.04 + steps: + - name: Checkout + uses: actions/checkout@v3 - name: Setup Node - if: ${{ steps.prebuild.outputs.need_to_build == 'true' }} uses: actions/setup-node@v3 with: - node-version: 14 + node-version: 16 - name: Build - if: ${{ steps.prebuild.outputs.need_to_build == 'true' }} working-directory: docs run: | npm install @@ -69,8 +88,14 @@ jobs: env: VERCEL_TOKEN: ${{ secrets.VERCEL_TOKEN }} + notification: + if: failure() + runs-on: ubuntu-20.04 + needs: + - check + - build_and_deploy + steps: - name: Send Slack notifiaction - if: failure() env: SLACK_BOT_TOKEN: ${{ secrets.SLACK_NOTIFICATIONS_BOT_TOKEN }} uses: voxmedia/github-action-slack-notify-build@v1 From 82e936aa96a1523d3ccc4790ac73d1b1d794efd0 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Sat, 19 Nov 2022 03:53:32 +0000 Subject: [PATCH 230/465] Sort offline/wrong-shred nodes by stake weight while waiting for supermajority (backport #28872) (#28886) Sort offline/wrong-shred nodes by stake weight while waiting for supermajority (#28872) (cherry picked from commit c6927151efb27bb4042286bc1c4d579dd72c8633) Co-authored-by: Michael Vines --- core/src/validator.rs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/core/src/validator.rs b/core/src/validator.rs index c79993684490de..c6880e9ec706ab 100644 --- a/core/src/validator.rs +++ b/core/src/validator.rs @@ -2015,6 +2015,7 @@ fn get_stake_percent_in_gossip(bank: &Bank, cluster_info: &ClusterInfo, log: boo "{:.3}% of active stake has the wrong shred version in gossip", (wrong_shred_stake as f64 / total_activated_stake as f64) * 100., ); + wrong_shred_nodes.sort_by(|b, a| a.0.cmp(&b.0)); // sort by reverse stake weight for (stake, identity) in wrong_shred_nodes { info!( " {:.3}% - {}", @@ -2029,6 +2030,7 @@ fn get_stake_percent_in_gossip(bank: &Bank, cluster_info: &ClusterInfo, log: boo "{:.3}% of active stake is not visible in gossip", (offline_stake as f64 / total_activated_stake as f64) * 100. ); + offline_nodes.sort_by(|b, a| a.0.cmp(&b.0)); // sort by reverse stake weight for (stake, identity) in offline_nodes { info!( " {:.3}% - {}", From c9929a413a01e9cda97a12073e19b5592bd37626 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Mon, 21 Nov 2022 18:47:52 +0000 Subject: [PATCH 231/465] rolls out merkle shreds to ~20% of testnet (backport #28905) (#28907) rolls out merkle shreds to ~20% of testnet (#28905) (cherry picked from commit d43b00118949d381c4366d84a403cb575102ff6e) Co-authored-by: behzad nouri --- core/src/broadcast_stage/standard_broadcast_run.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/broadcast_stage/standard_broadcast_run.rs b/core/src/broadcast_stage/standard_broadcast_run.rs index f58ab368e932c0..b0addfb5ad1827 100644 --- a/core/src/broadcast_stage/standard_broadcast_run.rs +++ b/core/src/broadcast_stage/standard_broadcast_run.rs @@ -474,7 +474,7 @@ impl BroadcastRun for StandardBroadcastRun { } fn should_use_merkle_variant(slot: Slot, cluster_type: ClusterType, shred_version: u16) -> bool { - cluster_type == ClusterType::Testnet && shred_version == 24371 && (slot % 19 == 1) + cluster_type == ClusterType::Testnet && shred_version == 6995 && (slot % 19 < 4) } #[cfg(test)] From 81628d5c7b3bce594d8538436755d11816dd8ccc Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 22 Nov 2022 22:55:25 -0600 Subject: [PATCH 232/465] Bump Version to 1.14.9 (#28926) Co-authored-by: willhickey --- Cargo.lock | 484 ++++++++--------- account-decoder/Cargo.toml | 10 +- accounts-bench/Cargo.toml | 12 +- accounts-cluster-bench/Cargo.toml | 34 +- banking-bench/Cargo.toml | 26 +- banks-client/Cargo.toml | 12 +- banks-interface/Cargo.toml | 4 +- banks-server/Cargo.toml | 12 +- bench-streamer/Cargo.toml | 8 +- bench-tps/Cargo.toml | 38 +- bloom/Cargo.toml | 8 +- bucket_map/Cargo.toml | 8 +- clap-utils/Cargo.toml | 8 +- clap-v3-utils/Cargo.toml | 8 +- cli-config/Cargo.toml | 6 +- cli-output/Cargo.toml | 16 +- cli/Cargo.toml | 38 +- client-test/Cargo.toml | 32 +- client/Cargo.toml | 28 +- core/Cargo.toml | 56 +- dos/Cargo.toml | 30 +- download-utils/Cargo.toml | 6 +- entry/Cargo.toml | 16 +- faucet/Cargo.toml | 14 +- frozen-abi/Cargo.toml | 6 +- frozen-abi/macro/Cargo.toml | 2 +- genesis-utils/Cargo.toml | 8 +- genesis/Cargo.toml | 22 +- geyser-plugin-interface/Cargo.toml | 6 +- geyser-plugin-manager/Cargo.toml | 16 +- gossip/Cargo.toml | 38 +- install/Cargo.toml | 14 +- keygen/Cargo.toml | 12 +- ledger-tool/Cargo.toml | 30 +- ledger/Cargo.toml | 40 +- local-cluster/Cargo.toml | 28 +- log-analyzer/Cargo.toml | 6 +- logger/Cargo.toml | 2 +- measure/Cargo.toml | 4 +- merkle-root-bench/Cargo.toml | 12 +- merkle-tree/Cargo.toml | 4 +- metrics/Cargo.toml | 4 +- net-shaper/Cargo.toml | 4 +- net-utils/Cargo.toml | 8 +- notifier/Cargo.toml | 2 +- perf/Cargo.toml | 12 +- poh-bench/Cargo.toml | 14 +- poh/Cargo.toml | 20 +- program-runtime/Cargo.toml | 14 +- program-test/Cargo.toml | 18 +- .../address-lookup-table-tests/Cargo.toml | 8 +- programs/address-lookup-table/Cargo.toml | 12 +- programs/bpf-loader-tests/Cargo.toml | 8 +- programs/bpf/Cargo.lock | 490 +++++++++--------- programs/bpf/Cargo.toml | 28 +- programs/bpf/rust/128bit/Cargo.toml | 6 +- programs/bpf/rust/128bit_dep/Cargo.toml | 4 +- programs/bpf/rust/alloc/Cargo.toml | 4 +- programs/bpf/rust/call_depth/Cargo.toml | 4 +- programs/bpf/rust/caller_access/Cargo.toml | 4 +- programs/bpf/rust/curve25519/Cargo.toml | 6 +- programs/bpf/rust/custom_heap/Cargo.toml | 4 +- programs/bpf/rust/dep_crate/Cargo.toml | 6 +- .../bpf/rust/deprecated_loader/Cargo.toml | 4 +- programs/bpf/rust/dup_accounts/Cargo.toml | 4 +- programs/bpf/rust/error_handling/Cargo.toml | 4 +- programs/bpf/rust/external_spend/Cargo.toml | 4 +- programs/bpf/rust/finalize/Cargo.toml | 4 +- .../rust/get_minimum_delegation/Cargo.toml | 4 +- .../Cargo.toml | 4 +- .../rust/instruction_introspection/Cargo.toml | 4 +- programs/bpf/rust/invoke/Cargo.toml | 4 +- programs/bpf/rust/invoke_and_error/Cargo.toml | 4 +- programs/bpf/rust/invoke_and_ok/Cargo.toml | 4 +- .../bpf/rust/invoke_and_return/Cargo.toml | 4 +- programs/bpf/rust/invoked/Cargo.toml | 4 +- programs/bpf/rust/iter/Cargo.toml | 4 +- programs/bpf/rust/log_data/Cargo.toml | 4 +- programs/bpf/rust/many_args/Cargo.toml | 6 +- programs/bpf/rust/many_args_dep/Cargo.toml | 4 +- programs/bpf/rust/mem/Cargo.toml | 10 +- programs/bpf/rust/membuiltins/Cargo.toml | 6 +- programs/bpf/rust/noop/Cargo.toml | 4 +- programs/bpf/rust/panic/Cargo.toml | 4 +- programs/bpf/rust/param_passing/Cargo.toml | 6 +- .../bpf/rust/param_passing_dep/Cargo.toml | 4 +- programs/bpf/rust/rand/Cargo.toml | 4 +- programs/bpf/rust/realloc/Cargo.toml | 4 +- programs/bpf/rust/realloc_invoke/Cargo.toml | 6 +- .../bpf/rust/ro_account_modify/Cargo.toml | 4 +- programs/bpf/rust/ro_modify/Cargo.toml | 4 +- programs/bpf/rust/sanity/Cargo.toml | 10 +- .../bpf/rust/secp256k1_recover/Cargo.toml | 4 +- programs/bpf/rust/sha/Cargo.toml | 4 +- .../rust/sibling_inner_instruction/Cargo.toml | 4 +- .../bpf/rust/sibling_instruction/Cargo.toml | 4 +- programs/bpf/rust/simulation/Cargo.toml | 12 +- programs/bpf/rust/spoof1/Cargo.toml | 4 +- programs/bpf/rust/spoof1_system/Cargo.toml | 4 +- programs/bpf/rust/sysvar/Cargo.toml | 10 +- programs/bpf/rust/upgradeable/Cargo.toml | 4 +- programs/bpf/rust/upgraded/Cargo.toml | 4 +- programs/bpf_loader/Cargo.toml | 14 +- .../bpf_loader/gen-syscall-list/Cargo.toml | 2 +- programs/compute-budget/Cargo.toml | 6 +- programs/config/Cargo.toml | 8 +- programs/ed25519-tests/Cargo.toml | 6 +- programs/stake/Cargo.toml | 18 +- programs/vote/Cargo.toml | 14 +- programs/zk-token-proof/Cargo.toml | 8 +- rayon-threadlimit/Cargo.toml | 2 +- rbpf-cli/Cargo.toml | 10 +- remote-wallet/Cargo.toml | 4 +- rpc-test/Cargo.toml | 18 +- rpc/Cargo.toml | 48 +- runtime/Cargo.toml | 34 +- runtime/store-tool/Cargo.toml | 8 +- sdk/Cargo.toml | 12 +- sdk/cargo-build-bpf/Cargo.toml | 4 +- sdk/cargo-build-sbf/Cargo.toml | 8 +- .../tests/crates/fail/Cargo.toml | 4 +- .../tests/crates/noop/Cargo.toml | 4 +- sdk/cargo-test-bpf/Cargo.toml | 2 +- sdk/cargo-test-sbf/Cargo.toml | 2 +- sdk/gen-headers/Cargo.toml | 2 +- sdk/macro/Cargo.toml | 2 +- sdk/program/Cargo.toml | 10 +- send-transaction-service/Cargo.toml | 14 +- stake-accounts/Cargo.toml | 16 +- storage-bigtable/Cargo.toml | 10 +- storage-bigtable/build-proto/Cargo.lock | 2 +- storage-bigtable/build-proto/Cargo.toml | 2 +- storage-proto/Cargo.toml | 8 +- streamer/Cargo.toml | 10 +- sys-tuner/Cargo.toml | 6 +- test-validator/Cargo.toml | 28 +- tokens/Cargo.toml | 24 +- transaction-dos/Cargo.toml | 32 +- transaction-status/Cargo.toml | 14 +- upload-perf/Cargo.toml | 4 +- validator/Cargo.toml | 50 +- version/Cargo.toml | 8 +- watchtower/Cargo.toml | 20 +- zk-token-sdk/Cargo.toml | 6 +- 144 files changed, 1269 insertions(+), 1269 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index c790b7357dc9cf..4861ccc85261b6 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1688,7 +1688,7 @@ dependencies = [ [[package]] name = "gen-headers" -version = "1.14.8" +version = "1.14.9" dependencies = [ "log", "regex", @@ -1696,7 +1696,7 @@ dependencies = [ [[package]] name = "gen-syscall-list" -version = "1.14.8" +version = "1.14.9" dependencies = [ "regex", ] @@ -3756,15 +3756,15 @@ dependencies = [ [[package]] name = "rbpf-cli" -version = "1.14.8" +version = "1.14.9" dependencies = [ "clap 3.1.8", "serde", "serde_json", "solana-bpf-loader-program", - "solana-logger 1.14.8", + "solana-logger 1.14.9", "solana-program-runtime", - "solana-sdk 1.14.8", + "solana-sdk 1.14.9", "solana_rbpf", ] @@ -4476,7 +4476,7 @@ dependencies = [ [[package]] name = "solana-account-decoder" -version = "1.14.8" +version = "1.14.9" dependencies = [ "Inflector", "base64 0.13.0", @@ -4489,7 +4489,7 @@ dependencies = [ "serde_json", "solana-address-lookup-table-program", "solana-config-program", - "solana-sdk 1.14.8", + "solana-sdk 1.14.9", "solana-vote-program", "spl-token", "spl-token-2022", @@ -4499,21 +4499,21 @@ dependencies = [ [[package]] name = "solana-accounts-bench" -version = "1.14.8" +version = "1.14.9" dependencies = [ "clap 2.33.3", "log", "rayon", - "solana-logger 1.14.8", + "solana-logger 1.14.9", "solana-measure", "solana-runtime", - "solana-sdk 1.14.8", + "solana-sdk 1.14.9", "solana-version", ] [[package]] name = "solana-accounts-cluster-bench" -version = "1.14.8" +version = "1.14.9" dependencies = [ "clap 2.33.3", "log", @@ -4526,11 +4526,11 @@ dependencies = [ "solana-faucet", "solana-gossip", "solana-local-cluster", - "solana-logger 1.14.8", + "solana-logger 1.14.9", "solana-measure", "solana-net-utils", "solana-runtime", - "solana-sdk 1.14.8", + "solana-sdk 1.14.9", "solana-streamer", "solana-test-validator", "solana-transaction-status", @@ -4540,7 +4540,7 @@ dependencies = [ [[package]] name = "solana-address-lookup-table-program" -version = "1.14.8" +version = "1.14.9" dependencies = [ "bincode", "bytemuck", @@ -4549,28 +4549,28 @@ dependencies = [ "num-traits", "rustc_version 0.4.0", "serde", - "solana-frozen-abi 1.14.8", - "solana-frozen-abi-macro 1.14.8", - "solana-program 1.14.8", + "solana-frozen-abi 1.14.9", + "solana-frozen-abi-macro 1.14.9", + "solana-program 1.14.9", "solana-program-runtime", - "solana-sdk 1.14.8", + "solana-sdk 1.14.9", "thiserror", ] [[package]] name = "solana-address-lookup-table-program-tests" -version = "1.14.8" +version = "1.14.9" dependencies = [ "assert_matches", "bincode", "solana-address-lookup-table-program", "solana-program-test", - "solana-sdk 1.14.8", + "solana-sdk 1.14.9", ] [[package]] name = "solana-banking-bench" -version = "1.14.8" +version = "1.14.9" dependencies = [ "clap 3.1.8", "crossbeam-channel", @@ -4581,27 +4581,27 @@ dependencies = [ "solana-core", "solana-gossip", "solana-ledger", - "solana-logger 1.14.8", + "solana-logger 1.14.9", "solana-measure", "solana-perf", "solana-poh", "solana-runtime", - "solana-sdk 1.14.8", + "solana-sdk 1.14.9", "solana-streamer", "solana-version", ] [[package]] name = "solana-banks-client" -version = "1.14.8" +version = "1.14.9" dependencies = [ "borsh", "futures 0.3.21", "solana-banks-interface", "solana-banks-server", - "solana-program 1.14.8", + "solana-program 1.14.9", "solana-runtime", - "solana-sdk 1.14.8", + "solana-sdk 1.14.9", "tarpc", "thiserror", "tokio", @@ -4610,16 +4610,16 @@ dependencies = [ [[package]] name = "solana-banks-interface" -version = "1.14.8" +version = "1.14.9" dependencies = [ "serde", - "solana-sdk 1.14.8", + "solana-sdk 1.14.9", "tarpc", ] [[package]] name = "solana-banks-server" -version = "1.14.8" +version = "1.14.9" dependencies = [ "bincode", "crossbeam-channel", @@ -4627,7 +4627,7 @@ dependencies = [ "solana-banks-interface", "solana-client", "solana-runtime", - "solana-sdk 1.14.8", + "solana-sdk 1.14.9", "solana-send-transaction-service", "tarpc", "tokio", @@ -4637,7 +4637,7 @@ dependencies = [ [[package]] name = "solana-bench-streamer" -version = "1.14.8" +version = "1.14.9" dependencies = [ "clap 3.1.8", "crossbeam-channel", @@ -4648,7 +4648,7 @@ dependencies = [ [[package]] name = "solana-bench-tps" -version = "1.14.8" +version = "1.14.9" dependencies = [ "clap 2.33.3", "crossbeam-channel", @@ -4665,13 +4665,13 @@ dependencies = [ "solana-genesis", "solana-gossip", "solana-local-cluster", - "solana-logger 1.14.8", + "solana-logger 1.14.9", "solana-measure", "solana-metrics", "solana-net-utils", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.8", + "solana-sdk 1.14.9", "solana-streamer", "solana-test-validator", "solana-version", @@ -4680,7 +4680,7 @@ dependencies = [ [[package]] name = "solana-bloom" -version = "1.14.8" +version = "1.14.9" dependencies = [ "bv", "fnv", @@ -4690,14 +4690,14 @@ dependencies = [ "rustc_version 0.4.0", "serde", "serde_derive", - "solana-frozen-abi 1.14.8", - "solana-frozen-abi-macro 1.14.8", - "solana-sdk 1.14.8", + "solana-frozen-abi 1.14.9", + "solana-frozen-abi-macro 1.14.9", + "solana-sdk 1.14.9", ] [[package]] name = "solana-bpf-loader-program" -version = "1.14.8" +version = "1.14.9" dependencies = [ "bincode", "byteorder", @@ -4708,26 +4708,26 @@ dependencies = [ "solana-metrics", "solana-program-runtime", "solana-runtime", - "solana-sdk 1.14.8", - "solana-zk-token-sdk 1.14.8", + "solana-sdk 1.14.9", + "solana-zk-token-sdk 1.14.9", "solana_rbpf", "thiserror", ] [[package]] name = "solana-bpf-loader-program-tests" -version = "1.14.8" +version = "1.14.9" dependencies = [ "assert_matches", "bincode", "solana-bpf-loader-program", "solana-program-test", - "solana-sdk 1.14.8", + "solana-sdk 1.14.9", ] [[package]] name = "solana-bucket-map" -version = "1.14.8" +version = "1.14.9" dependencies = [ "fs_extra", "log", @@ -4735,24 +4735,24 @@ dependencies = [ "modular-bitfield", "rand 0.7.3", "rayon", - "solana-logger 1.14.8", + "solana-logger 1.14.9", "solana-measure", - "solana-sdk 1.14.8", + "solana-sdk 1.14.9", "tempfile", ] [[package]] name = "solana-cargo-build-bpf" -version = "1.14.8" +version = "1.14.9" dependencies = [ "cargo_metadata", "clap 3.1.8", - "solana-sdk 1.14.8", + "solana-sdk 1.14.9", ] [[package]] name = "solana-cargo-build-sbf" -version = "1.14.8" +version = "1.14.9" dependencies = [ "bzip2", "cargo_metadata", @@ -4761,14 +4761,14 @@ dependencies = [ "regex", "serial_test", "solana-download-utils", - "solana-logger 1.14.8", - "solana-sdk 1.14.8", + "solana-logger 1.14.9", + "solana-sdk 1.14.9", "tar", ] [[package]] name = "solana-cargo-test-bpf" -version = "1.14.8" +version = "1.14.9" dependencies = [ "cargo_metadata", "clap 3.1.8", @@ -4776,7 +4776,7 @@ dependencies = [ [[package]] name = "solana-cargo-test-sbf" -version = "1.14.8" +version = "1.14.9" dependencies = [ "cargo_metadata", "clap 3.1.8", @@ -4784,14 +4784,14 @@ dependencies = [ [[package]] name = "solana-clap-utils" -version = "1.14.8" +version = "1.14.9" dependencies = [ "chrono", "clap 2.33.3", "rpassword", "solana-perf", "solana-remote-wallet", - "solana-sdk 1.14.8", + "solana-sdk 1.14.9", "tempfile", "thiserror", "tiny-bip39", @@ -4801,14 +4801,14 @@ dependencies = [ [[package]] name = "solana-clap-v3-utils" -version = "1.14.8" +version = "1.14.9" dependencies = [ "chrono", "clap 3.1.8", "rpassword", "solana-perf", "solana-remote-wallet", - "solana-sdk 1.14.8", + "solana-sdk 1.14.9", "tempfile", "thiserror", "tiny-bip39", @@ -4818,7 +4818,7 @@ dependencies = [ [[package]] name = "solana-cli" -version = "1.14.8" +version = "1.14.9" dependencies = [ "bincode", "bs58", @@ -4846,10 +4846,10 @@ dependencies = [ "solana-client", "solana-config-program", "solana-faucet", - "solana-logger 1.14.8", + "solana-logger 1.14.9", "solana-program-runtime", "solana-remote-wallet", - "solana-sdk 1.14.8", + "solana-sdk 1.14.9", "solana-streamer", "solana-test-validator", "solana-transaction-status", @@ -4864,7 +4864,7 @@ dependencies = [ [[package]] name = "solana-cli-config" -version = "1.14.8" +version = "1.14.9" dependencies = [ "anyhow", "dirs-next", @@ -4873,13 +4873,13 @@ dependencies = [ "serde_derive", "serde_yaml", "solana-clap-utils", - "solana-sdk 1.14.8", + "solana-sdk 1.14.9", "url 2.2.2", ] [[package]] name = "solana-cli-output" -version = "1.14.8" +version = "1.14.9" dependencies = [ "Inflector", "base64 0.13.0", @@ -4897,7 +4897,7 @@ dependencies = [ "solana-clap-utils", "solana-cli-config", "solana-client", - "solana-sdk 1.14.8", + "solana-sdk 1.14.9", "solana-transaction-status", "solana-vote-program", "spl-memo", @@ -4905,7 +4905,7 @@ dependencies = [ [[package]] name = "solana-client" -version = "1.14.8" +version = "1.14.9" dependencies = [ "anyhow", "assert_matches", @@ -4941,12 +4941,12 @@ dependencies = [ "solana-account-decoder", "solana-clap-utils", "solana-faucet", - "solana-logger 1.14.8", + "solana-logger 1.14.9", "solana-measure", "solana-metrics", "solana-net-utils", "solana-perf", - "solana-sdk 1.14.8", + "solana-sdk 1.14.9", "solana-streamer", "solana-transaction-status", "solana-version", @@ -4962,14 +4962,14 @@ dependencies = [ [[package]] name = "solana-client-test" -version = "1.14.8" +version = "1.14.9" dependencies = [ "futures-util", "serde_json", "serial_test", "solana-client", "solana-ledger", - "solana-logger 1.14.8", + "solana-logger 1.14.9", "solana-measure", "solana-merkle-tree", "solana-metrics", @@ -4977,7 +4977,7 @@ dependencies = [ "solana-rayon-threadlimit", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.8", + "solana-sdk 1.14.9", "solana-streamer", "solana-test-validator", "solana-transaction-status", @@ -4988,28 +4988,28 @@ dependencies = [ [[package]] name = "solana-compute-budget-program" -version = "1.14.8" +version = "1.14.9" dependencies = [ "solana-program-runtime", - "solana-sdk 1.14.8", + "solana-sdk 1.14.9", ] [[package]] name = "solana-config-program" -version = "1.14.8" +version = "1.14.9" dependencies = [ "bincode", "chrono", "serde", "serde_derive", - "solana-logger 1.14.8", + "solana-logger 1.14.9", "solana-program-runtime", - "solana-sdk 1.14.8", + "solana-sdk 1.14.9", ] [[package]] name = "solana-core" -version = "1.14.8" +version = "1.14.9" dependencies = [ "ahash", "base64 0.13.0", @@ -5042,12 +5042,12 @@ dependencies = [ "solana-bloom", "solana-client", "solana-entry", - "solana-frozen-abi 1.14.8", - "solana-frozen-abi-macro 1.14.8", + "solana-frozen-abi 1.14.9", + "solana-frozen-abi-macro 1.14.9", "solana-geyser-plugin-manager", "solana-gossip", "solana-ledger", - "solana-logger 1.14.8", + "solana-logger 1.14.9", "solana-measure", "solana-metrics", "solana-net-utils", @@ -5057,7 +5057,7 @@ dependencies = [ "solana-rayon-threadlimit", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.8", + "solana-sdk 1.14.9", "solana-send-transaction-service", "solana-stake-program", "solana-streamer", @@ -5077,7 +5077,7 @@ dependencies = [ [[package]] name = "solana-dos" -version = "1.14.8" +version = "1.14.9" dependencies = [ "bincode", "clap 3.1.8", @@ -5093,42 +5093,42 @@ dependencies = [ "solana-faucet", "solana-gossip", "solana-local-cluster", - "solana-logger 1.14.8", + "solana-logger 1.14.9", "solana-measure", "solana-net-utils", "solana-perf", "solana-rpc", - "solana-sdk 1.14.8", + "solana-sdk 1.14.9", "solana-streamer", "solana-version", ] [[package]] name = "solana-download-utils" -version = "1.14.8" +version = "1.14.9" dependencies = [ "console", "indicatif", "log", "reqwest", "solana-runtime", - "solana-sdk 1.14.8", + "solana-sdk 1.14.9", ] [[package]] name = "solana-ed25519-program-tests" -version = "1.14.8" +version = "1.14.9" dependencies = [ "assert_matches", "ed25519-dalek", "rand 0.7.3", "solana-program-test", - "solana-sdk 1.14.8", + "solana-sdk 1.14.9", ] [[package]] name = "solana-entry" -version = "1.14.8" +version = "1.14.9" dependencies = [ "bincode", "crossbeam-channel", @@ -5140,18 +5140,18 @@ dependencies = [ "rand 0.7.3", "rayon", "serde", - "solana-logger 1.14.8", + "solana-logger 1.14.9", "solana-measure", "solana-merkle-tree", "solana-metrics", "solana-perf", "solana-rayon-threadlimit", - "solana-sdk 1.14.8", + "solana-sdk 1.14.9", ] [[package]] name = "solana-faucet" -version = "1.14.8" +version = "1.14.9" dependencies = [ "bincode", "byteorder", @@ -5162,9 +5162,9 @@ dependencies = [ "serde_derive", "solana-clap-utils", "solana-cli-config", - "solana-logger 1.14.8", + "solana-logger 1.14.9", "solana-metrics", - "solana-sdk 1.14.8", + "solana-sdk 1.14.9", "solana-version", "spl-memo", "thiserror", @@ -5195,7 +5195,7 @@ dependencies = [ [[package]] name = "solana-frozen-abi" -version = "1.14.8" +version = "1.14.9" dependencies = [ "ahash", "blake3", @@ -5220,8 +5220,8 @@ dependencies = [ "serde_derive", "serde_json", "sha2 0.10.2", - "solana-frozen-abi-macro 1.14.8", - "solana-logger 1.14.8", + "solana-frozen-abi-macro 1.14.9", + "solana-logger 1.14.9", "subtle", "thiserror", ] @@ -5240,7 +5240,7 @@ dependencies = [ [[package]] name = "solana-frozen-abi-macro" -version = "1.14.8" +version = "1.14.9" dependencies = [ "proc-macro2 1.0.41", "quote 1.0.18", @@ -5250,7 +5250,7 @@ dependencies = [ [[package]] name = "solana-genesis" -version = "1.14.8" +version = "1.14.9" dependencies = [ "base64 0.13.0", "clap 2.33.3", @@ -5261,9 +5261,9 @@ dependencies = [ "solana-cli-config", "solana-entry", "solana-ledger", - "solana-logger 1.14.8", + "solana-logger 1.14.9", "solana-runtime", - "solana-sdk 1.14.8", + "solana-sdk 1.14.9", "solana-stake-program", "solana-version", "solana-vote-program", @@ -5272,26 +5272,26 @@ dependencies = [ [[package]] name = "solana-genesis-utils" -version = "1.14.8" +version = "1.14.9" dependencies = [ "solana-download-utils", "solana-runtime", - "solana-sdk 1.14.8", + "solana-sdk 1.14.9", ] [[package]] name = "solana-geyser-plugin-interface" -version = "1.14.8" +version = "1.14.9" dependencies = [ "log", - "solana-sdk 1.14.8", + "solana-sdk 1.14.9", "solana-transaction-status", "thiserror", ] [[package]] name = "solana-geyser-plugin-manager" -version = "1.14.8" +version = "1.14.9" dependencies = [ "bs58", "crossbeam-channel", @@ -5304,14 +5304,14 @@ dependencies = [ "solana-metrics", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.8", + "solana-sdk 1.14.9", "solana-transaction-status", "thiserror", ] [[package]] name = "solana-gossip" -version = "1.14.8" +version = "1.14.9" dependencies = [ "bincode", "bv", @@ -5338,17 +5338,17 @@ dependencies = [ "solana-clap-utils", "solana-client", "solana-entry", - "solana-frozen-abi 1.14.8", - "solana-frozen-abi-macro 1.14.8", + "solana-frozen-abi 1.14.9", + "solana-frozen-abi-macro 1.14.9", "solana-ledger", - "solana-logger 1.14.8", + "solana-logger 1.14.9", "solana-measure", "solana-metrics", "solana-net-utils", "solana-perf", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.14.8", + "solana-sdk 1.14.9", "solana-streamer", "solana-version", "solana-vote-program", @@ -5357,7 +5357,7 @@ dependencies = [ [[package]] name = "solana-install" -version = "1.14.8" +version = "1.14.9" dependencies = [ "atty", "bincode", @@ -5378,8 +5378,8 @@ dependencies = [ "solana-clap-utils", "solana-client", "solana-config-program", - "solana-logger 1.14.8", - "solana-sdk 1.14.8", + "solana-logger 1.14.9", + "solana-sdk 1.14.9", "solana-version", "tar", "tempfile", @@ -5390,7 +5390,7 @@ dependencies = [ [[package]] name = "solana-keygen" -version = "1.14.8" +version = "1.14.9" dependencies = [ "bs58", "clap 3.1.8", @@ -5399,14 +5399,14 @@ dependencies = [ "solana-clap-v3-utils", "solana-cli-config", "solana-remote-wallet", - "solana-sdk 1.14.8", + "solana-sdk 1.14.9", "solana-version", "tiny-bip39", ] [[package]] name = "solana-ledger" -version = "1.14.8" +version = "1.14.9" dependencies = [ "assert_matches", "bincode", @@ -5440,16 +5440,16 @@ dependencies = [ "solana-account-decoder", "solana-bpf-loader-program", "solana-entry", - "solana-frozen-abi 1.14.8", - "solana-frozen-abi-macro 1.14.8", - "solana-logger 1.14.8", + "solana-frozen-abi 1.14.9", + "solana-frozen-abi-macro 1.14.9", + "solana-logger 1.14.9", "solana-measure", "solana-metrics", "solana-perf", "solana-program-runtime", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.14.8", + "solana-sdk 1.14.9", "solana-stake-program", "solana-storage-bigtable", "solana-storage-proto", @@ -5468,7 +5468,7 @@ dependencies = [ [[package]] name = "solana-ledger-tool" -version = "1.14.8" +version = "1.14.9" dependencies = [ "assert_cmd", "base64 0.13.0", @@ -5490,10 +5490,10 @@ dependencies = [ "solana-core", "solana-entry", "solana-ledger", - "solana-logger 1.14.8", + "solana-logger 1.14.9", "solana-measure", "solana-runtime", - "solana-sdk 1.14.8", + "solana-sdk 1.14.9", "solana-stake-program", "solana-storage-bigtable", "solana-transaction-status", @@ -5505,7 +5505,7 @@ dependencies = [ [[package]] name = "solana-local-cluster" -version = "1.14.8" +version = "1.14.9" dependencies = [ "assert_matches", "crossbeam-channel", @@ -5523,9 +5523,9 @@ dependencies = [ "solana-entry", "solana-gossip", "solana-ledger", - "solana-logger 1.14.8", + "solana-logger 1.14.9", "solana-runtime", - "solana-sdk 1.14.8", + "solana-sdk 1.14.9", "solana-stake-program", "solana-streamer", "solana-vote-program", @@ -5534,13 +5534,13 @@ dependencies = [ [[package]] name = "solana-log-analyzer" -version = "1.14.8" +version = "1.14.9" dependencies = [ "byte-unit", "clap 3.1.8", "serde", "serde_json", - "solana-logger 1.14.8", + "solana-logger 1.14.9", "solana-version", ] @@ -5557,7 +5557,7 @@ dependencies = [ [[package]] name = "solana-logger" -version = "1.14.8" +version = "1.14.9" dependencies = [ "env_logger", "lazy_static", @@ -5566,38 +5566,38 @@ dependencies = [ [[package]] name = "solana-measure" -version = "1.14.8" +version = "1.14.9" dependencies = [ "log", - "solana-sdk 1.14.8", + "solana-sdk 1.14.9", ] [[package]] name = "solana-merkle-root-bench" -version = "1.14.8" +version = "1.14.9" dependencies = [ "clap 2.33.3", "log", - "solana-logger 1.14.8", + "solana-logger 1.14.9", "solana-measure", "solana-runtime", - "solana-sdk 1.14.8", + "solana-sdk 1.14.9", "solana-version", ] [[package]] name = "solana-merkle-tree" -version = "1.14.8" +version = "1.14.9" dependencies = [ "fast-math", "hex", "matches", - "solana-program 1.14.8", + "solana-program 1.14.9", ] [[package]] name = "solana-metrics" -version = "1.14.8" +version = "1.14.9" dependencies = [ "crossbeam-channel", "env_logger", @@ -5607,23 +5607,23 @@ dependencies = [ "rand 0.7.3", "reqwest", "serial_test", - "solana-sdk 1.14.8", + "solana-sdk 1.14.9", ] [[package]] name = "solana-net-shaper" -version = "1.14.8" +version = "1.14.9" dependencies = [ "clap 3.1.8", "rand 0.7.3", "serde", "serde_json", - "solana-logger 1.14.8", + "solana-logger 1.14.9", ] [[package]] name = "solana-net-utils" -version = "1.14.8" +version = "1.14.9" dependencies = [ "bincode", "clap 3.1.8", @@ -5634,8 +5634,8 @@ dependencies = [ "serde", "serde_derive", "socket2", - "solana-logger 1.14.8", - "solana-sdk 1.14.8", + "solana-logger 1.14.9", + "solana-sdk 1.14.9", "solana-version", "tokio", "url 2.2.2", @@ -5643,7 +5643,7 @@ dependencies = [ [[package]] name = "solana-notifier" -version = "1.14.8" +version = "1.14.9" dependencies = [ "log", "reqwest", @@ -5652,7 +5652,7 @@ dependencies = [ [[package]] name = "solana-perf" -version = "1.14.8" +version = "1.14.9" dependencies = [ "ahash", "bincode", @@ -5670,16 +5670,16 @@ dependencies = [ "rand 0.7.3", "rayon", "serde", - "solana-logger 1.14.8", + "solana-logger 1.14.9", "solana-metrics", "solana-rayon-threadlimit", - "solana-sdk 1.14.8", + "solana-sdk 1.14.9", "solana-vote-program", ] [[package]] name = "solana-poh" -version = "1.14.8" +version = "1.14.9" dependencies = [ "bincode", "core_affinity", @@ -5689,29 +5689,29 @@ dependencies = [ "rand 0.7.3", "solana-entry", "solana-ledger", - "solana-logger 1.14.8", + "solana-logger 1.14.9", "solana-measure", "solana-metrics", "solana-perf", "solana-runtime", - "solana-sdk 1.14.8", + "solana-sdk 1.14.9", "solana-sys-tuner", "thiserror", ] [[package]] name = "solana-poh-bench" -version = "1.14.8" +version = "1.14.9" dependencies = [ "clap 3.1.8", "log", "rand 0.7.3", "rayon", "solana-entry", - "solana-logger 1.14.8", + "solana-logger 1.14.9", "solana-measure", "solana-perf", - "solana-sdk 1.14.8", + "solana-sdk 1.14.9", "solana-version", ] @@ -5759,7 +5759,7 @@ dependencies = [ [[package]] name = "solana-program" -version = "1.14.8" +version = "1.14.9" dependencies = [ "anyhow", "assert_matches", @@ -5797,10 +5797,10 @@ dependencies = [ "serde_json", "sha2 0.10.2", "sha3 0.10.1", - "solana-frozen-abi 1.14.8", - "solana-frozen-abi-macro 1.14.8", - "solana-logger 1.14.8", - "solana-sdk-macro 1.14.8", + "solana-frozen-abi 1.14.9", + "solana-frozen-abi-macro 1.14.9", + "solana-logger 1.14.9", + "solana-sdk-macro 1.14.9", "static_assertions", "thiserror", "tiny-bip39", @@ -5810,7 +5810,7 @@ dependencies = [ [[package]] name = "solana-program-runtime" -version = "1.14.8" +version = "1.14.9" dependencies = [ "base64 0.13.0", "bincode", @@ -5825,18 +5825,18 @@ dependencies = [ "rand 0.7.3", "rustc_version 0.4.0", "serde", - "solana-frozen-abi 1.14.8", - "solana-frozen-abi-macro 1.14.8", - "solana-logger 1.14.8", + "solana-frozen-abi 1.14.9", + "solana-frozen-abi-macro 1.14.9", + "solana-logger 1.14.9", "solana-measure", "solana-metrics", - "solana-sdk 1.14.8", + "solana-sdk 1.14.9", "thiserror", ] [[package]] name = "solana-program-test" -version = "1.14.8" +version = "1.14.9" dependencies = [ "assert_matches", "async-trait", @@ -5848,10 +5848,10 @@ dependencies = [ "solana-banks-client", "solana-banks-server", "solana-bpf-loader-program", - "solana-logger 1.14.8", + "solana-logger 1.14.9", "solana-program-runtime", "solana-runtime", - "solana-sdk 1.14.8", + "solana-sdk 1.14.9", "solana-vote-program", "thiserror", "tokio", @@ -5859,7 +5859,7 @@ dependencies = [ [[package]] name = "solana-rayon-threadlimit" -version = "1.14.8" +version = "1.14.9" dependencies = [ "lazy_static", "num_cpus", @@ -5867,7 +5867,7 @@ dependencies = [ [[package]] name = "solana-remote-wallet" -version = "1.14.8" +version = "1.14.9" dependencies = [ "console", "dialoguer", @@ -5878,14 +5878,14 @@ dependencies = [ "parking_lot 0.12.1", "qstring", "semver 1.0.10", - "solana-sdk 1.14.8", + "solana-sdk 1.14.9", "thiserror", "uriparse", ] [[package]] name = "solana-rpc" -version = "1.14.8" +version = "1.14.9" dependencies = [ "base64 0.13.0", "bincode", @@ -5921,7 +5921,7 @@ dependencies = [ "solana-poh", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.14.8", + "solana-sdk 1.14.9", "solana-send-transaction-service", "solana-stake-program", "solana-storage-bigtable", @@ -5940,7 +5940,7 @@ dependencies = [ [[package]] name = "solana-rpc-test" -version = "1.14.8" +version = "1.14.9" dependencies = [ "bincode", "bs58", @@ -5952,9 +5952,9 @@ dependencies = [ "serde_json", "solana-account-decoder", "solana-client", - "solana-logger 1.14.8", + "solana-logger 1.14.9", "solana-rpc", - "solana-sdk 1.14.8", + "solana-sdk 1.14.9", "solana-streamer", "solana-test-validator", "solana-transaction-status", @@ -5963,7 +5963,7 @@ dependencies = [ [[package]] name = "solana-runtime" -version = "1.14.8" +version = "1.14.9" dependencies = [ "arrayref", "assert_matches", @@ -6003,18 +6003,18 @@ dependencies = [ "solana-bucket-map", "solana-compute-budget-program", "solana-config-program", - "solana-frozen-abi 1.14.8", - "solana-frozen-abi-macro 1.14.8", - "solana-logger 1.14.8", + "solana-frozen-abi 1.14.9", + "solana-frozen-abi-macro 1.14.9", + "solana-logger 1.14.9", "solana-measure", "solana-metrics", "solana-program-runtime", "solana-rayon-threadlimit", - "solana-sdk 1.14.8", + "solana-sdk 1.14.9", "solana-stake-program", "solana-vote-program", "solana-zk-token-proof-program", - "solana-zk-token-sdk 1.14.8", + "solana-zk-token-sdk 1.14.9", "strum", "strum_macros", "symlink", @@ -6077,7 +6077,7 @@ dependencies = [ [[package]] name = "solana-sdk" -version = "1.14.8" +version = "1.14.9" dependencies = [ "anyhow", "assert_matches", @@ -6117,11 +6117,11 @@ dependencies = [ "serde_json", "sha2 0.10.2", "sha3 0.10.1", - "solana-frozen-abi 1.14.8", - "solana-frozen-abi-macro 1.14.8", - "solana-logger 1.14.8", - "solana-program 1.14.8", - "solana-sdk-macro 1.14.8", + "solana-frozen-abi 1.14.9", + "solana-frozen-abi-macro 1.14.9", + "solana-logger 1.14.9", + "solana-program 1.14.9", + "solana-sdk-macro 1.14.9", "static_assertions", "thiserror", "tiny-bip39", @@ -6144,7 +6144,7 @@ dependencies = [ [[package]] name = "solana-sdk-macro" -version = "1.14.8" +version = "1.14.9" dependencies = [ "bs58", "proc-macro2 1.0.41", @@ -6155,21 +6155,21 @@ dependencies = [ [[package]] name = "solana-send-transaction-service" -version = "1.14.8" +version = "1.14.9" dependencies = [ "crossbeam-channel", "log", "solana-client", - "solana-logger 1.14.8", + "solana-logger 1.14.9", "solana-measure", "solana-metrics", "solana-runtime", - "solana-sdk 1.14.8", + "solana-sdk 1.14.9", ] [[package]] name = "solana-stake-accounts" -version = "1.14.8" +version = "1.14.9" dependencies = [ "clap 2.33.3", "solana-clap-utils", @@ -6177,13 +6177,13 @@ dependencies = [ "solana-client", "solana-remote-wallet", "solana-runtime", - "solana-sdk 1.14.8", + "solana-sdk 1.14.9", "solana-stake-program", ] [[package]] name = "solana-stake-program" -version = "1.14.8" +version = "1.14.9" dependencies = [ "assert_matches", "bincode", @@ -6195,12 +6195,12 @@ dependencies = [ "serde", "serde_derive", "solana-config-program", - "solana-frozen-abi 1.14.8", - "solana-frozen-abi-macro 1.14.8", - "solana-logger 1.14.8", + "solana-frozen-abi 1.14.9", + "solana-frozen-abi-macro 1.14.9", + "solana-logger 1.14.9", "solana-metrics", "solana-program-runtime", - "solana-sdk 1.14.8", + "solana-sdk 1.14.9", "solana-vote-program", "test-case", "thiserror", @@ -6208,7 +6208,7 @@ dependencies = [ [[package]] name = "solana-storage-bigtable" -version = "1.14.8" +version = "1.14.9" dependencies = [ "backoff", "bincode", @@ -6229,7 +6229,7 @@ dependencies = [ "serde_derive", "smpl_jwt", "solana-metrics", - "solana-sdk 1.14.8", + "solana-sdk 1.14.9", "solana-storage-proto", "solana-transaction-status", "thiserror", @@ -6240,7 +6240,7 @@ dependencies = [ [[package]] name = "solana-storage-proto" -version = "1.14.8" +version = "1.14.9" dependencies = [ "bincode", "bs58", @@ -6249,25 +6249,25 @@ dependencies = [ "protobuf-src", "serde", "solana-account-decoder", - "solana-sdk 1.14.8", + "solana-sdk 1.14.9", "solana-transaction-status", "tonic-build 0.8.0", ] [[package]] name = "solana-store-tool" -version = "1.14.8" +version = "1.14.9" dependencies = [ "clap 2.33.3", "log", - "solana-logger 1.14.8", + "solana-logger 1.14.9", "solana-runtime", "solana-version", ] [[package]] name = "solana-streamer" -version = "1.14.8" +version = "1.14.9" dependencies = [ "crossbeam-channel", "futures-util", @@ -6284,10 +6284,10 @@ dependencies = [ "rand 0.7.3", "rcgen", "rustls 0.20.6", - "solana-logger 1.14.8", + "solana-logger 1.14.9", "solana-metrics", "solana-perf", - "solana-sdk 1.14.8", + "solana-sdk 1.14.9", "thiserror", "tokio", "x509-parser", @@ -6295,13 +6295,13 @@ dependencies = [ [[package]] name = "solana-sys-tuner" -version = "1.14.8" +version = "1.14.9" dependencies = [ "clap 2.33.3", "libc", "log", "nix", - "solana-logger 1.14.8", + "solana-logger 1.14.9", "solana-version", "sysctl", "unix_socket2", @@ -6310,7 +6310,7 @@ dependencies = [ [[package]] name = "solana-test-validator" -version = "1.14.8" +version = "1.14.9" dependencies = [ "base64 0.13.0", "log", @@ -6321,20 +6321,20 @@ dependencies = [ "solana-core", "solana-gossip", "solana-ledger", - "solana-logger 1.14.8", + "solana-logger 1.14.9", "solana-net-utils", "solana-program-runtime", "solana-program-test", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.8", + "solana-sdk 1.14.9", "solana-streamer", "tokio", ] [[package]] name = "solana-tokens" -version = "1.14.8" +version = "1.14.9" dependencies = [ "bincode", "chrono", @@ -6350,9 +6350,9 @@ dependencies = [ "solana-clap-utils", "solana-cli-config", "solana-client", - "solana-logger 1.14.8", + "solana-logger 1.14.9", "solana-remote-wallet", - "solana-sdk 1.14.8", + "solana-sdk 1.14.9", "solana-streamer", "solana-test-validator", "solana-transaction-status", @@ -6365,7 +6365,7 @@ dependencies = [ [[package]] name = "solana-transaction-dos" -version = "1.14.8" +version = "1.14.9" dependencies = [ "bincode", "clap 2.33.3", @@ -6379,11 +6379,11 @@ dependencies = [ "solana-faucet", "solana-gossip", "solana-local-cluster", - "solana-logger 1.14.8", + "solana-logger 1.14.9", "solana-measure", "solana-net-utils", "solana-runtime", - "solana-sdk 1.14.8", + "solana-sdk 1.14.9", "solana-streamer", "solana-transaction-status", "solana-version", @@ -6391,7 +6391,7 @@ dependencies = [ [[package]] name = "solana-transaction-status" -version = "1.14.8" +version = "1.14.9" dependencies = [ "Inflector", "base64 0.13.0", @@ -6407,7 +6407,7 @@ dependencies = [ "solana-address-lookup-table-program", "solana-measure", "solana-metrics", - "solana-sdk 1.14.8", + "solana-sdk 1.14.9", "solana-vote-program", "spl-associated-token-account", "spl-memo", @@ -6418,7 +6418,7 @@ dependencies = [ [[package]] name = "solana-upload-perf" -version = "1.14.8" +version = "1.14.9" dependencies = [ "serde_json", "solana-metrics", @@ -6426,7 +6426,7 @@ dependencies = [ [[package]] name = "solana-validator" -version = "1.14.8" +version = "1.14.9" dependencies = [ "chrono", "clap 2.33.3", @@ -6457,14 +6457,14 @@ dependencies = [ "solana-genesis-utils", "solana-gossip", "solana-ledger", - "solana-logger 1.14.8", + "solana-logger 1.14.9", "solana-metrics", "solana-net-utils", "solana-perf", "solana-poh", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.8", + "solana-sdk 1.14.9", "solana-send-transaction-service", "solana-storage-bigtable", "solana-streamer", @@ -6477,21 +6477,21 @@ dependencies = [ [[package]] name = "solana-version" -version = "1.14.8" +version = "1.14.9" dependencies = [ "log", "rustc_version 0.4.0", "semver 1.0.10", "serde", "serde_derive", - "solana-frozen-abi 1.14.8", - "solana-frozen-abi-macro 1.14.8", - "solana-sdk 1.14.8", + "solana-frozen-abi 1.14.9", + "solana-frozen-abi-macro 1.14.9", + "solana-sdk 1.14.9", ] [[package]] name = "solana-vote-program" -version = "1.14.8" +version = "1.14.9" dependencies = [ "bincode", "itertools", @@ -6502,18 +6502,18 @@ dependencies = [ "rustc_version 0.4.0", "serde", "serde_derive", - "solana-frozen-abi 1.14.8", - "solana-frozen-abi-macro 1.14.8", - "solana-logger 1.14.8", + "solana-frozen-abi 1.14.9", + "solana-frozen-abi-macro 1.14.9", + "solana-logger 1.14.9", "solana-metrics", "solana-program-runtime", - "solana-sdk 1.14.8", + "solana-sdk 1.14.9", "thiserror", ] [[package]] name = "solana-watchtower" -version = "1.14.8" +version = "1.14.9" dependencies = [ "clap 2.33.3", "humantime", @@ -6522,24 +6522,24 @@ dependencies = [ "solana-cli-config", "solana-cli-output", "solana-client", - "solana-logger 1.14.8", + "solana-logger 1.14.9", "solana-metrics", "solana-notifier", - "solana-sdk 1.14.8", + "solana-sdk 1.14.9", "solana-version", ] [[package]] name = "solana-zk-token-proof-program" -version = "1.14.8" +version = "1.14.9" dependencies = [ "bytemuck", "getrandom 0.1.16", "num-derive", "num-traits", "solana-program-runtime", - "solana-sdk 1.14.8", - "solana-zk-token-sdk 1.14.8", + "solana-sdk 1.14.9", + "solana-zk-token-sdk 1.14.9", ] [[package]] @@ -6574,7 +6574,7 @@ dependencies = [ [[package]] name = "solana-zk-token-sdk" -version = "1.14.8" +version = "1.14.9" dependencies = [ "aes-gcm-siv", "arrayref", @@ -6594,8 +6594,8 @@ dependencies = [ "serde", "serde_json", "sha3 0.9.1", - "solana-program 1.14.8", - "solana-sdk 1.14.8", + "solana-program 1.14.9", + "solana-sdk 1.14.9", "subtle", "thiserror", "zeroize", diff --git a/account-decoder/Cargo.toml b/account-decoder/Cargo.toml index 6a9b2476daa934..cb7cbe6c769123 100644 --- a/account-decoder/Cargo.toml +++ b/account-decoder/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-account-decoder" -version = "1.14.8" +version = "1.14.9" description = "Solana account decoder" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -19,10 +19,10 @@ lazy_static = "1.4.0" serde = "1.0.138" serde_derive = "1.0.103" serde_json = "1.0.81" -solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.8" } -solana-config-program = { path = "../programs/config", version = "=1.14.8" } -solana-sdk = { path = "../sdk", version = "=1.14.8" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.8" } +solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.9" } +solana-config-program = { path = "../programs/config", version = "=1.14.9" } +solana-sdk = { path = "../sdk", version = "=1.14.9" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.9" } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } spl-token-2022 = { version = "=0.4.2", features = ["no-entrypoint"] } thiserror = "1.0" diff --git a/accounts-bench/Cargo.toml b/accounts-bench/Cargo.toml index 92d9571be7dc03..7ecee8dee74035 100644 --- a/accounts-bench/Cargo.toml +++ b/accounts-bench/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-accounts-bench" -version = "1.14.8" +version = "1.14.9" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -12,11 +12,11 @@ publish = false clap = "2.33.1" log = "0.4.17" rayon = "1.5.3" -solana-logger = { path = "../logger", version = "=1.14.8" } -solana-measure = { path = "../measure", version = "=1.14.8" } -solana-runtime = { path = "../runtime", version = "=1.14.8" } -solana-sdk = { path = "../sdk", version = "=1.14.8" } -solana-version = { path = "../version", version = "=1.14.8" } +solana-logger = { path = "../logger", version = "=1.14.9" } +solana-measure = { path = "../measure", version = "=1.14.9" } +solana-runtime = { path = "../runtime", version = "=1.14.9" } +solana-sdk = { path = "../sdk", version = "=1.14.9" } +solana-version = { path = "../version", version = "=1.14.9" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/accounts-cluster-bench/Cargo.toml b/accounts-cluster-bench/Cargo.toml index 672f5ee8765001..8286d87d0f8916 100644 --- a/accounts-cluster-bench/Cargo.toml +++ b/accounts-cluster-bench/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-accounts-cluster-bench" -version = "1.14.8" +version = "1.14.9" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -13,25 +13,25 @@ clap = "2.33.1" log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.8" } -solana-clap-utils = { path = "../clap-utils", version = "=1.14.8" } -solana-client = { path = "../client", version = "=1.14.8" } -solana-faucet = { path = "../faucet", version = "=1.14.8" } -solana-gossip = { path = "../gossip", version = "=1.14.8" } -solana-logger = { path = "../logger", version = "=1.14.8" } -solana-measure = { path = "../measure", version = "=1.14.8" } -solana-net-utils = { path = "../net-utils", version = "=1.14.8" } -solana-runtime = { path = "../runtime", version = "=1.14.8" } -solana-sdk = { path = "../sdk", version = "=1.14.8" } -solana-streamer = { path = "../streamer", version = "=1.14.8" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.8" } -solana-version = { path = "../version", version = "=1.14.8" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.9" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.9" } +solana-client = { path = "../client", version = "=1.14.9" } +solana-faucet = { path = "../faucet", version = "=1.14.9" } +solana-gossip = { path = "../gossip", version = "=1.14.9" } +solana-logger = { path = "../logger", version = "=1.14.9" } +solana-measure = { path = "../measure", version = "=1.14.9" } +solana-net-utils = { path = "../net-utils", version = "=1.14.9" } +solana-runtime = { path = "../runtime", version = "=1.14.9" } +solana-sdk = { path = "../sdk", version = "=1.14.9" } +solana-streamer = { path = "../streamer", version = "=1.14.9" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.9" } +solana-version = { path = "../version", version = "=1.14.9" } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } [dev-dependencies] -solana-core = { path = "../core", version = "=1.14.8" } -solana-local-cluster = { path = "../local-cluster", version = "=1.14.8" } -solana-test-validator = { path = "../test-validator", version = "=1.14.8" } +solana-core = { path = "../core", version = "=1.14.9" } +solana-local-cluster = { path = "../local-cluster", version = "=1.14.9" } +solana-test-validator = { path = "../test-validator", version = "=1.14.9" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/banking-bench/Cargo.toml b/banking-bench/Cargo.toml index 91a0b71200f700..793d4ceda9136f 100644 --- a/banking-bench/Cargo.toml +++ b/banking-bench/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-banking-bench" -version = "1.14.8" +version = "1.14.9" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,18 +14,18 @@ crossbeam-channel = "0.5" log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" -solana-client = { path = "../client", version = "=1.14.8" } -solana-core = { path = "../core", version = "=1.14.8" } -solana-gossip = { path = "../gossip", version = "=1.14.8" } -solana-ledger = { path = "../ledger", version = "=1.14.8" } -solana-logger = { path = "../logger", version = "=1.14.8" } -solana-measure = { path = "../measure", version = "=1.14.8" } -solana-perf = { path = "../perf", version = "=1.14.8" } -solana-poh = { path = "../poh", version = "=1.14.8" } -solana-runtime = { path = "../runtime", version = "=1.14.8" } -solana-sdk = { path = "../sdk", version = "=1.14.8" } -solana-streamer = { path = "../streamer", version = "=1.14.8" } -solana-version = { path = "../version", version = "=1.14.8" } +solana-client = { path = "../client", version = "=1.14.9" } +solana-core = { path = "../core", version = "=1.14.9" } +solana-gossip = { path = "../gossip", version = "=1.14.9" } +solana-ledger = { path = "../ledger", version = "=1.14.9" } +solana-logger = { path = "../logger", version = "=1.14.9" } +solana-measure = { path = "../measure", version = "=1.14.9" } +solana-perf = { path = "../perf", version = "=1.14.9" } +solana-poh = { path = "../poh", version = "=1.14.9" } +solana-runtime = { path = "../runtime", version = "=1.14.9" } +solana-sdk = { path = "../sdk", version = "=1.14.9" } +solana-streamer = { path = "../streamer", version = "=1.14.9" } +solana-version = { path = "../version", version = "=1.14.9" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/banks-client/Cargo.toml b/banks-client/Cargo.toml index 6900c37ecbc1d7..29d80250e5b74e 100644 --- a/banks-client/Cargo.toml +++ b/banks-client/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-banks-client" -version = "1.14.8" +version = "1.14.9" description = "Solana banks client" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,17 +12,17 @@ edition = "2021" [dependencies] borsh = "0.9.3" futures = "0.3" -solana-banks-interface = { path = "../banks-interface", version = "=1.14.8" } -solana-program = { path = "../sdk/program", version = "=1.14.8" } -solana-sdk = { path = "../sdk", version = "=1.14.8" } +solana-banks-interface = { path = "../banks-interface", version = "=1.14.9" } +solana-program = { path = "../sdk/program", version = "=1.14.9" } +solana-sdk = { path = "../sdk", version = "=1.14.9" } tarpc = { version = "0.29.0", features = ["full"] } thiserror = "1.0" tokio = { version = "~1.14.1", features = ["full"] } tokio-serde = { version = "0.8", features = ["bincode"] } [dev-dependencies] -solana-banks-server = { path = "../banks-server", version = "=1.14.8" } -solana-runtime = { path = "../runtime", version = "=1.14.8" } +solana-banks-server = { path = "../banks-server", version = "=1.14.9" } +solana-runtime = { path = "../runtime", version = "=1.14.9" } [lib] crate-type = ["lib"] diff --git a/banks-interface/Cargo.toml b/banks-interface/Cargo.toml index 9a20f2c1e12d05..2005c59ea1fcb1 100644 --- a/banks-interface/Cargo.toml +++ b/banks-interface/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-banks-interface" -version = "1.14.8" +version = "1.14.9" description = "Solana banks RPC interface" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -11,7 +11,7 @@ edition = "2021" [dependencies] serde = { version = "1.0.138", features = ["derive"] } -solana-sdk = { path = "../sdk", version = "=1.14.8" } +solana-sdk = { path = "../sdk", version = "=1.14.9" } tarpc = { version = "0.29.0", features = ["full"] } [lib] diff --git a/banks-server/Cargo.toml b/banks-server/Cargo.toml index 1ca3b8c9a85b74..e3727525e1905b 100644 --- a/banks-server/Cargo.toml +++ b/banks-server/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-banks-server" -version = "1.14.8" +version = "1.14.9" description = "Solana banks server" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,11 +13,11 @@ edition = "2021" bincode = "1.3.3" crossbeam-channel = "0.5" futures = "0.3" -solana-banks-interface = { path = "../banks-interface", version = "=1.14.8" } -solana-client = { path = "../client", version = "=1.14.8" } -solana-runtime = { path = "../runtime", version = "=1.14.8" } -solana-sdk = { path = "../sdk", version = "=1.14.8" } -solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.8" } +solana-banks-interface = { path = "../banks-interface", version = "=1.14.9" } +solana-client = { path = "../client", version = "=1.14.9" } +solana-runtime = { path = "../runtime", version = "=1.14.9" } +solana-sdk = { path = "../sdk", version = "=1.14.9" } +solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.9" } tarpc = { version = "0.29.0", features = ["full"] } tokio = { version = "1", features = ["full"] } tokio-serde = { version = "0.8", features = ["bincode"] } diff --git a/bench-streamer/Cargo.toml b/bench-streamer/Cargo.toml index 825af6f6e7c8a3..394576e6670898 100644 --- a/bench-streamer/Cargo.toml +++ b/bench-streamer/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-bench-streamer" -version = "1.14.8" +version = "1.14.9" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -11,9 +11,9 @@ publish = false [dependencies] clap = { version = "3.1.5", features = ["cargo"] } crossbeam-channel = "0.5" -solana-net-utils = { path = "../net-utils", version = "=1.14.8" } -solana-streamer = { path = "../streamer", version = "=1.14.8" } -solana-version = { path = "../version", version = "=1.14.8" } +solana-net-utils = { path = "../net-utils", version = "=1.14.9" } +solana-streamer = { path = "../streamer", version = "=1.14.9" } +solana-version = { path = "../version", version = "=1.14.9" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/bench-tps/Cargo.toml b/bench-tps/Cargo.toml index 968b059ba7c93e..d6473f4f53c379 100644 --- a/bench-tps/Cargo.toml +++ b/bench-tps/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-bench-tps" -version = "1.14.8" +version = "1.14.9" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -15,28 +15,28 @@ log = "0.4.17" rayon = "1.5.3" serde_json = "1.0.81" serde_yaml = "0.8.26" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.8" } -solana-cli-config = { path = "../cli-config", version = "=1.14.8" } -solana-client = { path = "../client", version = "=1.14.8" } -solana-core = { path = "../core", version = "=1.14.8" } -solana-faucet = { path = "../faucet", version = "=1.14.8" } -solana-genesis = { path = "../genesis", version = "=1.14.8" } -solana-gossip = { path = "../gossip", version = "=1.14.8" } -solana-logger = { path = "../logger", version = "=1.14.8" } -solana-measure = { path = "../measure", version = "=1.14.8" } -solana-metrics = { path = "../metrics", version = "=1.14.8" } -solana-net-utils = { path = "../net-utils", version = "=1.14.8" } -solana-rpc = { path = "../rpc", version = "=1.14.8" } -solana-runtime = { path = "../runtime", version = "=1.14.8" } -solana-sdk = { path = "../sdk", version = "=1.14.8" } -solana-streamer = { path = "../streamer", version = "=1.14.8" } -solana-version = { path = "../version", version = "=1.14.8" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.9" } +solana-cli-config = { path = "../cli-config", version = "=1.14.9" } +solana-client = { path = "../client", version = "=1.14.9" } +solana-core = { path = "../core", version = "=1.14.9" } +solana-faucet = { path = "../faucet", version = "=1.14.9" } +solana-genesis = { path = "../genesis", version = "=1.14.9" } +solana-gossip = { path = "../gossip", version = "=1.14.9" } +solana-logger = { path = "../logger", version = "=1.14.9" } +solana-measure = { path = "../measure", version = "=1.14.9" } +solana-metrics = { path = "../metrics", version = "=1.14.9" } +solana-net-utils = { path = "../net-utils", version = "=1.14.9" } +solana-rpc = { path = "../rpc", version = "=1.14.9" } +solana-runtime = { path = "../runtime", version = "=1.14.9" } +solana-sdk = { path = "../sdk", version = "=1.14.9" } +solana-streamer = { path = "../streamer", version = "=1.14.9" } +solana-version = { path = "../version", version = "=1.14.9" } thiserror = "1.0" [dev-dependencies] serial_test = "0.8.0" -solana-local-cluster = { path = "../local-cluster", version = "=1.14.8" } -solana-test-validator = { path = "../test-validator", version = "=1.14.8" } +solana-local-cluster = { path = "../local-cluster", version = "=1.14.9" } +solana-test-validator = { path = "../test-validator", version = "=1.14.9" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/bloom/Cargo.toml b/bloom/Cargo.toml index 461604d312f27f..ae9a9da2f13cc4 100644 --- a/bloom/Cargo.toml +++ b/bloom/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bloom" -version = "1.14.8" +version = "1.14.9" description = "Solana bloom filter" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -17,9 +17,9 @@ rand = "0.7.0" rayon = "1.5.3" serde = { version = "1.0.138", features = ["rc"] } serde_derive = "1.0.103" -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.8" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.8" } -solana-sdk = { path = "../sdk", version = "=1.14.8" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.9" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.9" } +solana-sdk = { path = "../sdk", version = "=1.14.9" } [lib] crate-type = ["lib"] diff --git a/bucket_map/Cargo.toml b/bucket_map/Cargo.toml index 213c013e72e567..5c22791b259102 100644 --- a/bucket_map/Cargo.toml +++ b/bucket_map/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bucket-map" -version = "1.14.8" +version = "1.14.9" description = "solana-bucket-map" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-bucket-map" @@ -15,14 +15,14 @@ log = { version = "0.4.17" } memmap2 = "0.5.3" modular-bitfield = "0.11.2" rand = "0.7.0" -solana-measure = { path = "../measure", version = "=1.14.8" } -solana-sdk = { path = "../sdk", version = "=1.14.8" } +solana-measure = { path = "../measure", version = "=1.14.9" } +solana-sdk = { path = "../sdk", version = "=1.14.9" } tempfile = "3.3.0" [dev-dependencies] fs_extra = "1.2.0" rayon = "1.5.3" -solana-logger = { path = "../logger", version = "=1.14.8" } +solana-logger = { path = "../logger", version = "=1.14.9" } [lib] crate-type = ["lib"] diff --git a/clap-utils/Cargo.toml b/clap-utils/Cargo.toml index 7a32f36231938c..f039fe88d664bc 100644 --- a/clap-utils/Cargo.toml +++ b/clap-utils/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-clap-utils" -version = "1.14.8" +version = "1.14.9" description = "Solana utilities for the clap" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,9 +13,9 @@ edition = "2021" chrono = "0.4" clap = "2.33.0" rpassword = "6.0" -solana-perf = { path = "../perf", version = "=1.14.8" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.8", default-features = false } -solana-sdk = { path = "../sdk", version = "=1.14.8" } +solana-perf = { path = "../perf", version = "=1.14.9" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.9", default-features = false } +solana-sdk = { path = "../sdk", version = "=1.14.9" } thiserror = "1.0.31" tiny-bip39 = "0.8.2" uriparse = "0.6.4" diff --git a/clap-v3-utils/Cargo.toml b/clap-v3-utils/Cargo.toml index 9ab27d2aea7aa0..aa9be0a1dea736 100644 --- a/clap-v3-utils/Cargo.toml +++ b/clap-v3-utils/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-clap-v3-utils" -version = "1.14.8" +version = "1.14.9" description = "Solana utilities for the clap v3" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,9 +13,9 @@ edition = "2021" chrono = "0.4" clap = { version = "3.1.5", features = ["cargo"] } rpassword = "6.0" -solana-perf = { path = "../perf", version = "=1.14.8" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.8", default-features = false } -solana-sdk = { path = "../sdk", version = "=1.14.8" } +solana-perf = { path = "../perf", version = "=1.14.9" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.9", default-features = false } +solana-sdk = { path = "../sdk", version = "=1.14.9" } thiserror = "1.0.31" tiny-bip39 = "0.8.2" uriparse = "0.6.4" diff --git a/cli-config/Cargo.toml b/cli-config/Cargo.toml index 8b64ffaad4b135..653d8967c4c680 100644 --- a/cli-config/Cargo.toml +++ b/cli-config/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-cli-config" description = "Blockchain, Rebuilt for Scale" -version = "1.14.8" +version = "1.14.9" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -15,8 +15,8 @@ lazy_static = "1.4.0" serde = "1.0.138" serde_derive = "1.0.103" serde_yaml = "0.8.26" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.8" } -solana-sdk = { path = "../sdk", version = "=1.14.8" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.9" } +solana-sdk = { path = "../sdk", version = "=1.14.9" } url = "2.2.2" [dev-dependencies] diff --git a/cli-output/Cargo.toml b/cli-output/Cargo.toml index 561b2ceadf4dfb..32519d57770273 100644 --- a/cli-output/Cargo.toml +++ b/cli-output/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-cli-output" description = "Blockchain, Rebuilt for Scale" -version = "1.14.8" +version = "1.14.9" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -21,13 +21,13 @@ pretty-hex = "0.3.0" semver = "1.0.10" serde = "1.0.138" serde_json = "1.0.81" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.8" } -solana-clap-utils = { path = "../clap-utils", version = "=1.14.8" } -solana-cli-config = { path = "../cli-config", version = "=1.14.8" } -solana-client = { path = "../client", version = "=1.14.8" } -solana-sdk = { path = "../sdk", version = "=1.14.8" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.8" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.8" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.9" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.9" } +solana-cli-config = { path = "../cli-config", version = "=1.14.9" } +solana-client = { path = "../client", version = "=1.14.9" } +solana-sdk = { path = "../sdk", version = "=1.14.9" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.9" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.9" } spl-memo = { version = "=3.0.1", features = ["no-entrypoint"] } [dev-dependencies] diff --git a/cli/Cargo.toml b/cli/Cargo.toml index a57b318afc00fb..682ffc15603441 100644 --- a/cli/Cargo.toml +++ b/cli/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-cli" description = "Blockchain, Rebuilt for Scale" -version = "1.14.8" +version = "1.14.9" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -27,30 +27,30 @@ semver = "1.0.10" serde = "1.0.138" serde_derive = "1.0.103" serde_json = "1.0.81" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.8" } -solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.8" } -solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.8" } -solana-clap-utils = { path = "../clap-utils", version = "=1.14.8" } -solana-cli-config = { path = "../cli-config", version = "=1.14.8" } -solana-cli-output = { path = "../cli-output", version = "=1.14.8" } -solana-client = { path = "../client", version = "=1.14.8" } -solana-config-program = { path = "../programs/config", version = "=1.14.8" } -solana-faucet = { path = "../faucet", version = "=1.14.8" } -solana-logger = { path = "../logger", version = "=1.14.8" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.8" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.8" } -solana-sdk = { path = "../sdk", version = "=1.14.8" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.8" } -solana-version = { path = "../version", version = "=1.14.8" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.8" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.9" } +solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.9" } +solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.9" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.9" } +solana-cli-config = { path = "../cli-config", version = "=1.14.9" } +solana-cli-output = { path = "../cli-output", version = "=1.14.9" } +solana-client = { path = "../client", version = "=1.14.9" } +solana-config-program = { path = "../programs/config", version = "=1.14.9" } +solana-faucet = { path = "../faucet", version = "=1.14.9" } +solana-logger = { path = "../logger", version = "=1.14.9" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.9" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.9" } +solana-sdk = { path = "../sdk", version = "=1.14.9" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.9" } +solana-version = { path = "../version", version = "=1.14.9" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.9" } solana_rbpf = "=0.2.31" spl-memo = { version = "=3.0.1", features = ["no-entrypoint"] } thiserror = "1.0.31" tiny-bip39 = "0.8.2" [dev-dependencies] -solana-streamer = { path = "../streamer", version = "=1.14.8" } -solana-test-validator = { path = "../test-validator", version = "=1.14.8" } +solana-streamer = { path = "../streamer", version = "=1.14.9" } +solana-test-validator = { path = "../test-validator", version = "=1.14.9" } tempfile = "3.3.0" [[bin]] diff --git a/client-test/Cargo.toml b/client-test/Cargo.toml index 39e7c6c791ac14..04c44bc4be1446 100644 --- a/client-test/Cargo.toml +++ b/client-test/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-client-test" -version = "1.14.8" +version = "1.14.9" description = "Solana RPC Test" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,25 +14,25 @@ publish = false futures-util = "0.3.21" serde_json = "1.0.81" serial_test = "0.8.0" -solana-client = { path = "../client", version = "=1.14.8" } -solana-ledger = { path = "../ledger", version = "=1.14.8" } -solana-measure = { path = "../measure", version = "=1.14.8" } -solana-merkle-tree = { path = "../merkle-tree", version = "=1.14.8" } -solana-metrics = { path = "../metrics", version = "=1.14.8" } -solana-perf = { path = "../perf", version = "=1.14.8" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.8" } -solana-rpc = { path = "../rpc", version = "=1.14.8" } -solana-runtime = { path = "../runtime", version = "=1.14.8" } -solana-sdk = { path = "../sdk", version = "=1.14.8" } -solana-streamer = { path = "../streamer", version = "=1.14.8" } -solana-test-validator = { path = "../test-validator", version = "=1.14.8" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.8" } -solana-version = { path = "../version", version = "=1.14.8" } +solana-client = { path = "../client", version = "=1.14.9" } +solana-ledger = { path = "../ledger", version = "=1.14.9" } +solana-measure = { path = "../measure", version = "=1.14.9" } +solana-merkle-tree = { path = "../merkle-tree", version = "=1.14.9" } +solana-metrics = { path = "../metrics", version = "=1.14.9" } +solana-perf = { path = "../perf", version = "=1.14.9" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.9" } +solana-rpc = { path = "../rpc", version = "=1.14.9" } +solana-runtime = { path = "../runtime", version = "=1.14.9" } +solana-sdk = { path = "../sdk", version = "=1.14.9" } +solana-streamer = { path = "../streamer", version = "=1.14.9" } +solana-test-validator = { path = "../test-validator", version = "=1.14.9" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.9" } +solana-version = { path = "../version", version = "=1.14.9" } systemstat = "0.1.11" tokio = { version = "~1.14.1", features = ["full"] } [dev-dependencies] -solana-logger = { path = "../logger", version = "=1.14.8" } +solana-logger = { path = "../logger", version = "=1.14.9" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/client/Cargo.toml b/client/Cargo.toml index e356af85b03344..4af5f6a56a6021 100644 --- a/client/Cargo.toml +++ b/client/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-client" -version = "1.14.8" +version = "1.14.9" description = "Solana Client" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -38,17 +38,17 @@ semver = "1.0.10" serde = "1.0.138" serde_derive = "1.0.103" serde_json = "1.0.81" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.8" } -solana-clap-utils = { path = "../clap-utils", version = "=1.14.8" } -solana-faucet = { path = "../faucet", version = "=1.14.8" } -solana-measure = { path = "../measure", version = "=1.14.8" } -solana-metrics = { path = "../metrics", version = "=1.14.8" } -solana-net-utils = { path = "../net-utils", version = "=1.14.8" } -solana-sdk = { path = "../sdk", version = "=1.14.8" } -solana-streamer = { path = "../streamer", version = "=1.14.8" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.8" } -solana-version = { path = "../version", version = "=1.14.8" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.8" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.9" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.9" } +solana-faucet = { path = "../faucet", version = "=1.14.9" } +solana-measure = { path = "../measure", version = "=1.14.9" } +solana-metrics = { path = "../metrics", version = "=1.14.9" } +solana-net-utils = { path = "../net-utils", version = "=1.14.9" } +solana-sdk = { path = "../sdk", version = "=1.14.9" } +solana-streamer = { path = "../streamer", version = "=1.14.9" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.9" } +solana-version = { path = "../version", version = "=1.14.9" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.9" } spl-token-2022 = { version = "=0.4.2", features = ["no-entrypoint"] } thiserror = "1.0" tokio = { version = "1", features = ["full"] } @@ -61,8 +61,8 @@ url = "2.2.2" anyhow = "1.0.58" assert_matches = "1.5.0" jsonrpc-http-server = "18.0.0" -solana-logger = { path = "../logger", version = "=1.14.8" } -solana-perf = { path = "../perf", version = "=1.14.8" } +solana-logger = { path = "../logger", version = "=1.14.9" } +solana-perf = { path = "../perf", version = "=1.14.9" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/core/Cargo.toml b/core/Cargo.toml index b2c13a45b959b3..682cbf06b5258e 100644 --- a/core/Cargo.toml +++ b/core/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "solana-core" description = "Blockchain, Rebuilt for Scale" -version = "1.14.8" +version = "1.14.9" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-core" readme = "../README.md" @@ -36,30 +36,30 @@ rand_chacha = "0.2.2" rayon = "1.5.3" serde = "1.0.138" serde_derive = "1.0.103" -solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.8" } -solana-bloom = { path = "../bloom", version = "=1.14.8" } -solana-client = { path = "../client", version = "=1.14.8" } -solana-entry = { path = "../entry", version = "=1.14.8" } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.8" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.8" } -solana-geyser-plugin-manager = { path = "../geyser-plugin-manager", version = "=1.14.8" } -solana-gossip = { path = "../gossip", version = "=1.14.8" } -solana-ledger = { path = "../ledger", version = "=1.14.8" } -solana-measure = { path = "../measure", version = "=1.14.8" } -solana-metrics = { path = "../metrics", version = "=1.14.8" } -solana-net-utils = { path = "../net-utils", version = "=1.14.8" } -solana-perf = { path = "../perf", version = "=1.14.8" } -solana-poh = { path = "../poh", version = "=1.14.8" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.8" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.8" } -solana-rpc = { path = "../rpc", version = "=1.14.8" } -solana-runtime = { path = "../runtime", version = "=1.14.8" } -solana-sdk = { path = "../sdk", version = "=1.14.8" } -solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.8" } -solana-streamer = { path = "../streamer", version = "=1.14.8" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.8" } -solana-version = { path = "../version", version = "=1.14.8" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.8" } +solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.9" } +solana-bloom = { path = "../bloom", version = "=1.14.9" } +solana-client = { path = "../client", version = "=1.14.9" } +solana-entry = { path = "../entry", version = "=1.14.9" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.9" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.9" } +solana-geyser-plugin-manager = { path = "../geyser-plugin-manager", version = "=1.14.9" } +solana-gossip = { path = "../gossip", version = "=1.14.9" } +solana-ledger = { path = "../ledger", version = "=1.14.9" } +solana-measure = { path = "../measure", version = "=1.14.9" } +solana-metrics = { path = "../metrics", version = "=1.14.9" } +solana-net-utils = { path = "../net-utils", version = "=1.14.9" } +solana-perf = { path = "../perf", version = "=1.14.9" } +solana-poh = { path = "../poh", version = "=1.14.9" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.9" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.9" } +solana-rpc = { path = "../rpc", version = "=1.14.9" } +solana-runtime = { path = "../runtime", version = "=1.14.9" } +solana-sdk = { path = "../sdk", version = "=1.14.9" } +solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.9" } +solana-streamer = { path = "../streamer", version = "=1.14.9" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.9" } +solana-version = { path = "../version", version = "=1.14.9" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.9" } sys-info = "0.9.1" tempfile = "3.3.0" thiserror = "1.0" @@ -71,9 +71,9 @@ matches = "0.1.9" raptorq = "1.7.0" serde_json = "1.0.81" serial_test = "0.8.0" -solana-logger = { path = "../logger", version = "=1.14.8" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.8" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.8" } +solana-logger = { path = "../logger", version = "=1.14.9" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.9" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.9" } static_assertions = "1.1.0" systemstat = "0.1.11" test-case = "2.1.0" diff --git a/dos/Cargo.toml b/dos/Cargo.toml index a17cb213668c93..b95d99afc563ab 100644 --- a/dos/Cargo.toml +++ b/dos/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-dos" -version = "1.14.8" +version = "1.14.9" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -17,23 +17,23 @@ itertools = "0.10.3" log = "0.4.17" rand = "0.7.0" serde = "1.0.138" -solana-bench-tps = { path = "../bench-tps", version = "=1.14.8" } -solana-client = { path = "../client", version = "=1.14.8" } -solana-core = { path = "../core", version = "=1.14.8" } -solana-faucet = { path = "../faucet", version = "=1.14.8" } -solana-gossip = { path = "../gossip", version = "=1.14.8" } -solana-logger = { path = "../logger", version = "=1.14.8" } -solana-measure = { path = "../measure", version = "=1.14.8" } -solana-net-utils = { path = "../net-utils", version = "=1.14.8" } -solana-perf = { path = "../perf", version = "=1.14.8" } -solana-rpc = { path = "../rpc", version = "=1.14.8" } -solana-sdk = { path = "../sdk", version = "=1.14.8" } -solana-streamer = { path = "../streamer", version = "=1.14.8" } -solana-version = { path = "../version", version = "=1.14.8" } +solana-bench-tps = { path = "../bench-tps", version = "=1.14.9" } +solana-client = { path = "../client", version = "=1.14.9" } +solana-core = { path = "../core", version = "=1.14.9" } +solana-faucet = { path = "../faucet", version = "=1.14.9" } +solana-gossip = { path = "../gossip", version = "=1.14.9" } +solana-logger = { path = "../logger", version = "=1.14.9" } +solana-measure = { path = "../measure", version = "=1.14.9" } +solana-net-utils = { path = "../net-utils", version = "=1.14.9" } +solana-perf = { path = "../perf", version = "=1.14.9" } +solana-rpc = { path = "../rpc", version = "=1.14.9" } +solana-sdk = { path = "../sdk", version = "=1.14.9" } +solana-streamer = { path = "../streamer", version = "=1.14.9" } +solana-version = { path = "../version", version = "=1.14.9" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] [dev-dependencies] serial_test = "0.8.0" -solana-local-cluster = { path = "../local-cluster", version = "=1.14.8" } +solana-local-cluster = { path = "../local-cluster", version = "=1.14.9" } diff --git a/download-utils/Cargo.toml b/download-utils/Cargo.toml index 75e06e7f04c6d8..b81e7edcce9c59 100644 --- a/download-utils/Cargo.toml +++ b/download-utils/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-download-utils" -version = "1.14.8" +version = "1.14.9" description = "Solana Download Utils" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,8 +14,8 @@ console = "0.15.0" indicatif = "0.16.2" log = "0.4.17" reqwest = { version = "0.11.11", default-features = false, features = ["blocking", "brotli", "deflate", "gzip", "rustls-tls", "json"] } -solana-runtime = { path = "../runtime", version = "=1.14.8" } -solana-sdk = { path = "../sdk", version = "=1.14.8" } +solana-runtime = { path = "../runtime", version = "=1.14.9" } +solana-sdk = { path = "../sdk", version = "=1.14.9" } [lib] crate-type = ["lib"] diff --git a/entry/Cargo.toml b/entry/Cargo.toml index 5c0c5eb4599207..258543caff84f8 100644 --- a/entry/Cargo.toml +++ b/entry/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-entry" -version = "1.14.8" +version = "1.14.9" description = "Solana Entry" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -19,16 +19,16 @@ log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" serde = "1.0.138" -solana-measure = { path = "../measure", version = "=1.14.8" } -solana-merkle-tree = { path = "../merkle-tree", version = "=1.14.8" } -solana-metrics = { path = "../metrics", version = "=1.14.8" } -solana-perf = { path = "../perf", version = "=1.14.8" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.8" } -solana-sdk = { path = "../sdk", version = "=1.14.8" } +solana-measure = { path = "../measure", version = "=1.14.9" } +solana-merkle-tree = { path = "../merkle-tree", version = "=1.14.9" } +solana-metrics = { path = "../metrics", version = "=1.14.9" } +solana-perf = { path = "../perf", version = "=1.14.9" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.9" } +solana-sdk = { path = "../sdk", version = "=1.14.9" } [dev-dependencies] matches = "0.1.9" -solana-logger = { path = "../logger", version = "=1.14.8" } +solana-logger = { path = "../logger", version = "=1.14.9" } [lib] crate-type = ["lib"] diff --git a/faucet/Cargo.toml b/faucet/Cargo.toml index 988d00026839d7..207debbacb14cf 100644 --- a/faucet/Cargo.toml +++ b/faucet/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-faucet" -version = "1.14.8" +version = "1.14.9" description = "Solana Faucet" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -17,12 +17,12 @@ crossbeam-channel = "0.5" log = "0.4.17" serde = "1.0.138" serde_derive = "1.0.103" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.8" } -solana-cli-config = { path = "../cli-config", version = "=1.14.8" } -solana-logger = { path = "../logger", version = "=1.14.8" } -solana-metrics = { path = "../metrics", version = "=1.14.8" } -solana-sdk = { path = "../sdk", version = "=1.14.8" } -solana-version = { path = "../version", version = "=1.14.8" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.9" } +solana-cli-config = { path = "../cli-config", version = "=1.14.9" } +solana-logger = { path = "../logger", version = "=1.14.9" } +solana-metrics = { path = "../metrics", version = "=1.14.9" } +solana-sdk = { path = "../sdk", version = "=1.14.9" } +solana-version = { path = "../version", version = "=1.14.9" } spl-memo = { version = "=3.0.1", features = ["no-entrypoint"] } thiserror = "1.0" tokio = { version = "1", features = ["full"] } diff --git a/frozen-abi/Cargo.toml b/frozen-abi/Cargo.toml index 90d3a86413f870..c841fe4ce6d3c5 100644 --- a/frozen-abi/Cargo.toml +++ b/frozen-abi/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-frozen-abi" -version = "1.14.8" +version = "1.14.9" description = "Solana Frozen ABI" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -20,7 +20,7 @@ serde_bytes = "0.11" serde_derive = "1.0" serde_json = "1.0" sha2 = "0.10.2" -solana-frozen-abi-macro = { path = "macro", version = "=1.14.8" } +solana-frozen-abi-macro = { path = "macro", version = "=1.14.9" } thiserror = "1.0" [target.'cfg(not(target_os = "solana"))'.dependencies] @@ -43,7 +43,7 @@ rand_core = { version = "0.6.3", features = ["alloc", "getrandom", "std"] } subtle = { version = "2.4.1", features = ["default", "i128", "std"] } [target.'cfg(not(target_os = "solana"))'.dev-dependencies] -solana-logger = { path = "../logger", version = "=1.14.8" } +solana-logger = { path = "../logger", version = "=1.14.9" } [build-dependencies] rustc_version = "0.4" diff --git a/frozen-abi/macro/Cargo.toml b/frozen-abi/macro/Cargo.toml index 22362c339177e1..ba1e8fbc8fb20d 100644 --- a/frozen-abi/macro/Cargo.toml +++ b/frozen-abi/macro/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-frozen-abi-macro" -version = "1.14.8" +version = "1.14.9" description = "Solana Frozen ABI Macro" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/genesis-utils/Cargo.toml b/genesis-utils/Cargo.toml index 52fe8b77439c49..1e7b7f9c16bba7 100644 --- a/genesis-utils/Cargo.toml +++ b/genesis-utils/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-genesis-utils" -version = "1.14.8" +version = "1.14.9" description = "Solana Genesis Utils" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,9 +10,9 @@ documentation = "https://docs.rs/solana-download-utils" edition = "2021" [dependencies] -solana-download-utils = { path = "../download-utils", version = "=1.14.8" } -solana-runtime = { path = "../runtime", version = "=1.14.8" } -solana-sdk = { path = "../sdk", version = "=1.14.8" } +solana-download-utils = { path = "../download-utils", version = "=1.14.9" } +solana-runtime = { path = "../runtime", version = "=1.14.9" } +solana-sdk = { path = "../sdk", version = "=1.14.9" } [lib] crate-type = ["lib"] diff --git a/genesis/Cargo.toml b/genesis/Cargo.toml index 8984dcb7c07f37..a38dc8b8c5fe07 100644 --- a/genesis/Cargo.toml +++ b/genesis/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-genesis" description = "Blockchain, Rebuilt for Scale" -version = "1.14.8" +version = "1.14.9" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -15,16 +15,16 @@ clap = "2.33.1" serde = "1.0.138" serde_json = "1.0.81" serde_yaml = "0.8.26" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.8" } -solana-cli-config = { path = "../cli-config", version = "=1.14.8" } -solana-entry = { path = "../entry", version = "=1.14.8" } -solana-ledger = { path = "../ledger", version = "=1.14.8" } -solana-logger = { path = "../logger", version = "=1.14.8" } -solana-runtime = { path = "../runtime", version = "=1.14.8" } -solana-sdk = { path = "../sdk", version = "=1.14.8" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.8" } -solana-version = { path = "../version", version = "=1.14.8" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.8" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.9" } +solana-cli-config = { path = "../cli-config", version = "=1.14.9" } +solana-entry = { path = "../entry", version = "=1.14.9" } +solana-ledger = { path = "../ledger", version = "=1.14.9" } +solana-logger = { path = "../logger", version = "=1.14.9" } +solana-runtime = { path = "../runtime", version = "=1.14.9" } +solana-sdk = { path = "../sdk", version = "=1.14.9" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.9" } +solana-version = { path = "../version", version = "=1.14.9" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.9" } tempfile = "3.3.0" [[bin]] diff --git a/geyser-plugin-interface/Cargo.toml b/geyser-plugin-interface/Cargo.toml index 2fb5e7902b4403..085e867b428287 100644 --- a/geyser-plugin-interface/Cargo.toml +++ b/geyser-plugin-interface/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-geyser-plugin-interface" description = "The Solana Geyser plugin interface." -version = "1.14.8" +version = "1.14.9" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -11,8 +11,8 @@ documentation = "https://docs.rs/solana-geyser-plugin-interface" [dependencies] log = "0.4.17" -solana-sdk = { path = "../sdk", version = "=1.14.8" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.8" } +solana-sdk = { path = "../sdk", version = "=1.14.9" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.9" } thiserror = "1.0.31" [package.metadata.docs.rs] diff --git a/geyser-plugin-manager/Cargo.toml b/geyser-plugin-manager/Cargo.toml index 3947fa94042f2a..cc1f371b85fe60 100644 --- a/geyser-plugin-manager/Cargo.toml +++ b/geyser-plugin-manager/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-geyser-plugin-manager" description = "The Solana Geyser plugin manager." -version = "1.14.8" +version = "1.14.9" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -16,13 +16,13 @@ json5 = "0.4.1" libloading = "0.7.3" log = "0.4.17" serde_json = "1.0.81" -solana-geyser-plugin-interface = { path = "../geyser-plugin-interface", version = "=1.14.8" } -solana-measure = { path = "../measure", version = "=1.14.8" } -solana-metrics = { path = "../metrics", version = "=1.14.8" } -solana-rpc = { path = "../rpc", version = "=1.14.8" } -solana-runtime = { path = "../runtime", version = "=1.14.8" } -solana-sdk = { path = "../sdk", version = "=1.14.8" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.8" } +solana-geyser-plugin-interface = { path = "../geyser-plugin-interface", version = "=1.14.9" } +solana-measure = { path = "../measure", version = "=1.14.9" } +solana-metrics = { path = "../metrics", version = "=1.14.9" } +solana-rpc = { path = "../rpc", version = "=1.14.9" } +solana-runtime = { path = "../runtime", version = "=1.14.9" } +solana-sdk = { path = "../sdk", version = "=1.14.9" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.9" } thiserror = "1.0.31" [package.metadata.docs.rs] diff --git a/gossip/Cargo.toml b/gossip/Cargo.toml index 7de58f542b72b4..77c69ce6211650 100644 --- a/gossip/Cargo.toml +++ b/gossip/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-gossip" description = "Blockchain, Rebuilt for Scale" -version = "1.14.8" +version = "1.14.9" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -27,24 +27,24 @@ rayon = "1.5.3" serde = "1.0.138" serde_bytes = "0.11" serde_derive = "1.0.103" -solana-bloom = { path = "../bloom", version = "=1.14.8" } -solana-clap-utils = { path = "../clap-utils", version = "=1.14.8" } -solana-client = { path = "../client", version = "=1.14.8" } -solana-entry = { path = "../entry", version = "=1.14.8" } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.8" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.8" } -solana-ledger = { path = "../ledger", version = "=1.14.8" } -solana-logger = { path = "../logger", version = "=1.14.8" } -solana-measure = { path = "../measure", version = "=1.14.8" } -solana-metrics = { path = "../metrics", version = "=1.14.8" } -solana-net-utils = { path = "../net-utils", version = "=1.14.8" } -solana-perf = { path = "../perf", version = "=1.14.8" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.8" } -solana-runtime = { path = "../runtime", version = "=1.14.8" } -solana-sdk = { path = "../sdk", version = "=1.14.8" } -solana-streamer = { path = "../streamer", version = "=1.14.8" } -solana-version = { path = "../version", version = "=1.14.8" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.8" } +solana-bloom = { path = "../bloom", version = "=1.14.9" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.9" } +solana-client = { path = "../client", version = "=1.14.9" } +solana-entry = { path = "../entry", version = "=1.14.9" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.9" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.9" } +solana-ledger = { path = "../ledger", version = "=1.14.9" } +solana-logger = { path = "../logger", version = "=1.14.9" } +solana-measure = { path = "../measure", version = "=1.14.9" } +solana-metrics = { path = "../metrics", version = "=1.14.9" } +solana-net-utils = { path = "../net-utils", version = "=1.14.9" } +solana-perf = { path = "../perf", version = "=1.14.9" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.9" } +solana-runtime = { path = "../runtime", version = "=1.14.9" } +solana-sdk = { path = "../sdk", version = "=1.14.9" } +solana-streamer = { path = "../streamer", version = "=1.14.9" } +solana-version = { path = "../version", version = "=1.14.9" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.9" } thiserror = "1.0" [dev-dependencies] diff --git a/install/Cargo.toml b/install/Cargo.toml index 6c80b84d013c62..3ebd9f17657dd0 100644 --- a/install/Cargo.toml +++ b/install/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-install" description = "The solana cluster software installer" -version = "1.14.8" +version = "1.14.9" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -26,12 +26,12 @@ reqwest = { version = "0.11.11", default-features = false, features = ["blocking semver = "1.0.10" serde = { version = "1.0.138", features = ["derive"] } serde_yaml = "0.8.26" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.8" } -solana-client = { path = "../client", version = "=1.14.8" } -solana-config-program = { path = "../programs/config", version = "=1.14.8" } -solana-logger = { path = "../logger", version = "=1.14.8" } -solana-sdk = { path = "../sdk", version = "=1.14.8" } -solana-version = { path = "../version", version = "=1.14.8" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.9" } +solana-client = { path = "../client", version = "=1.14.9" } +solana-config-program = { path = "../programs/config", version = "=1.14.9" } +solana-logger = { path = "../logger", version = "=1.14.9" } +solana-sdk = { path = "../sdk", version = "=1.14.9" } +solana-version = { path = "../version", version = "=1.14.9" } tar = "0.4.38" tempfile = "3.3.0" url = "2.2.2" diff --git a/keygen/Cargo.toml b/keygen/Cargo.toml index 1cfda94bc35f0b..a81ea9352d4913 100644 --- a/keygen/Cargo.toml +++ b/keygen/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-keygen" -version = "1.14.8" +version = "1.14.9" description = "Solana key generation utility" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,11 +14,11 @@ bs58 = "0.4.0" clap = { version = "3.1.5", features = ["cargo"] } dirs-next = "2.0.0" num_cpus = "1.13.1" -solana-clap-v3-utils = { path = "../clap-v3-utils", version = "=1.14.8" } -solana-cli-config = { path = "../cli-config", version = "=1.14.8" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.8" } -solana-sdk = { path = "../sdk", version = "=1.14.8" } -solana-version = { path = "../version", version = "=1.14.8" } +solana-clap-v3-utils = { path = "../clap-v3-utils", version = "=1.14.9" } +solana-cli-config = { path = "../cli-config", version = "=1.14.9" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.9" } +solana-sdk = { path = "../sdk", version = "=1.14.9" } +solana-version = { path = "../version", version = "=1.14.9" } tiny-bip39 = "0.8.2" [[bin]] diff --git a/ledger-tool/Cargo.toml b/ledger-tool/Cargo.toml index b4e6584aee7c83..83fe22df20928e 100644 --- a/ledger-tool/Cargo.toml +++ b/ledger-tool/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-ledger-tool" description = "Blockchain, Rebuilt for Scale" -version = "1.14.8" +version = "1.14.9" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -22,20 +22,20 @@ log = { version = "0.4.17" } regex = "1" serde = { version = "1.0", features = ["derive"] } serde_json = "1.0.81" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.8" } -solana-cli-output = { path = "../cli-output", version = "=1.14.8" } -solana-core = { path = "../core", version = "=1.14.8" } -solana-entry = { path = "../entry", version = "=1.14.8" } -solana-ledger = { path = "../ledger", version = "=1.14.8" } -solana-logger = { path = "../logger", version = "=1.14.8" } -solana-measure = { path = "../measure", version = "=1.14.8" } -solana-runtime = { path = "../runtime", version = "=1.14.8" } -solana-sdk = { path = "../sdk", version = "=1.14.8" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.8" } -solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.8" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.8" } -solana-version = { path = "../version", version = "=1.14.8" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.8" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.9" } +solana-cli-output = { path = "../cli-output", version = "=1.14.9" } +solana-core = { path = "../core", version = "=1.14.9" } +solana-entry = { path = "../entry", version = "=1.14.9" } +solana-ledger = { path = "../ledger", version = "=1.14.9" } +solana-logger = { path = "../logger", version = "=1.14.9" } +solana-measure = { path = "../measure", version = "=1.14.9" } +solana-runtime = { path = "../runtime", version = "=1.14.9" } +solana-sdk = { path = "../sdk", version = "=1.14.9" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.9" } +solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.9" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.9" } +solana-version = { path = "../version", version = "=1.14.9" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.9" } tokio = { version = "1", features = ["full"] } [target.'cfg(not(target_env = "msvc"))'.dependencies] diff --git a/ledger/Cargo.toml b/ledger/Cargo.toml index 37c4c4f098a132..0c8116548be425 100644 --- a/ledger/Cargo.toml +++ b/ledger/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-ledger" -version = "1.14.8" +version = "1.14.9" description = "Solana ledger" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -35,23 +35,23 @@ reed-solomon-erasure = { version = "6.0.0", features = ["simd-accel"] } serde = "1.0.138" serde_bytes = "0.11.6" sha2 = "0.10.2" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.8" } -solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.8" } -solana-entry = { path = "../entry", version = "=1.14.8" } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.8" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.8" } -solana-measure = { path = "../measure", version = "=1.14.8" } -solana-metrics = { path = "../metrics", version = "=1.14.8" } -solana-perf = { path = "../perf", version = "=1.14.8" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.8" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.8" } -solana-runtime = { path = "../runtime", version = "=1.14.8" } -solana-sdk = { path = "../sdk", version = "=1.14.8" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.8" } -solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.8" } -solana-storage-proto = { path = "../storage-proto", version = "=1.14.8" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.8" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.8" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.9" } +solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.9" } +solana-entry = { path = "../entry", version = "=1.14.9" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.9" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.9" } +solana-measure = { path = "../measure", version = "=1.14.9" } +solana-metrics = { path = "../metrics", version = "=1.14.9" } +solana-perf = { path = "../perf", version = "=1.14.9" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.9" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.9" } +solana-runtime = { path = "../runtime", version = "=1.14.9" } +solana-sdk = { path = "../sdk", version = "=1.14.9" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.9" } +solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.9" } +solana-storage-proto = { path = "../storage-proto", version = "=1.14.9" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.9" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.9" } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } spl-token-2022 = { version = "=0.4.2", features = ["no-entrypoint"] } static_assertions = "1.1.0" @@ -71,8 +71,8 @@ features = ["lz4"] [dev-dependencies] bs58 = "0.4.0" matches = "0.1.9" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.8" } -solana-logger = { path = "../logger", version = "=1.14.8" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.9" } +solana-logger = { path = "../logger", version = "=1.14.9" } test-case = "2.1.0" [build-dependencies] diff --git a/local-cluster/Cargo.toml b/local-cluster/Cargo.toml index 16f7525929e3d5..5de718867d20a7 100644 --- a/local-cluster/Cargo.toml +++ b/local-cluster/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-local-cluster" description = "Blockchain, Rebuilt for Scale" -version = "1.14.8" +version = "1.14.9" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -16,25 +16,25 @@ itertools = "0.10.3" log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" -solana-client = { path = "../client", version = "=1.14.8" } -solana-config-program = { path = "../programs/config", version = "=1.14.8" } -solana-core = { path = "../core", version = "=1.14.8" } -solana-entry = { path = "../entry", version = "=1.14.8" } -solana-gossip = { path = "../gossip", version = "=1.14.8" } -solana-ledger = { path = "../ledger", version = "=1.14.8" } -solana-runtime = { path = "../runtime", version = "=1.14.8" } -solana-sdk = { path = "../sdk", version = "=1.14.8" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.8" } -solana-streamer = { path = "../streamer", version = "=1.14.8" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.8" } +solana-client = { path = "../client", version = "=1.14.9" } +solana-config-program = { path = "../programs/config", version = "=1.14.9" } +solana-core = { path = "../core", version = "=1.14.9" } +solana-entry = { path = "../entry", version = "=1.14.9" } +solana-gossip = { path = "../gossip", version = "=1.14.9" } +solana-ledger = { path = "../ledger", version = "=1.14.9" } +solana-runtime = { path = "../runtime", version = "=1.14.9" } +solana-sdk = { path = "../sdk", version = "=1.14.9" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.9" } +solana-streamer = { path = "../streamer", version = "=1.14.9" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.9" } tempfile = "3.3.0" [dev-dependencies] assert_matches = "1.5.0" gag = "1.0.0" serial_test = "0.8.0" -solana-download-utils = { path = "../download-utils", version = "=1.14.8" } -solana-logger = { path = "../logger", version = "=1.14.8" } +solana-download-utils = { path = "../download-utils", version = "=1.14.9" } +solana-logger = { path = "../logger", version = "=1.14.9" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/log-analyzer/Cargo.toml b/log-analyzer/Cargo.toml index f40a86cab667b2..f8cb822f4f6199 100644 --- a/log-analyzer/Cargo.toml +++ b/log-analyzer/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-log-analyzer" description = "The solana cluster network analysis tool" -version = "1.14.8" +version = "1.14.9" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,8 +14,8 @@ byte-unit = "4.0.14" clap = { version = "3.1.5", features = ["cargo"] } serde = "1.0.138" serde_json = "1.0.81" -solana-logger = { path = "../logger", version = "=1.14.8" } -solana-version = { path = "../version", version = "=1.14.8" } +solana-logger = { path = "../logger", version = "=1.14.9" } +solana-version = { path = "../version", version = "=1.14.9" } [[bin]] name = "solana-log-analyzer" diff --git a/logger/Cargo.toml b/logger/Cargo.toml index 757aef9c7e560c..69bcbc5797bd38 100644 --- a/logger/Cargo.toml +++ b/logger/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-logger" -version = "1.14.8" +version = "1.14.9" description = "Solana Logger" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/measure/Cargo.toml b/measure/Cargo.toml index d411f48eddaf30..24cd273510af89 100644 --- a/measure/Cargo.toml +++ b/measure/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "solana-measure" description = "Blockchain, Rebuilt for Scale" -version = "1.14.8" +version = "1.14.9" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-measure" readme = "../README.md" @@ -12,7 +12,7 @@ edition = "2021" [dependencies] log = "0.4.17" -solana-sdk = { path = "../sdk", version = "=1.14.8" } +solana-sdk = { path = "../sdk", version = "=1.14.9" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/merkle-root-bench/Cargo.toml b/merkle-root-bench/Cargo.toml index a4983298abcec7..150a5a046f9b8d 100644 --- a/merkle-root-bench/Cargo.toml +++ b/merkle-root-bench/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-merkle-root-bench" -version = "1.14.8" +version = "1.14.9" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -11,11 +11,11 @@ publish = false [dependencies] clap = "2.33.1" log = "0.4.17" -solana-logger = { path = "../logger", version = "=1.14.8" } -solana-measure = { path = "../measure", version = "=1.14.8" } -solana-runtime = { path = "../runtime", version = "=1.14.8" } -solana-sdk = { path = "../sdk", version = "=1.14.8" } -solana-version = { path = "../version", version = "=1.14.8" } +solana-logger = { path = "../logger", version = "=1.14.9" } +solana-measure = { path = "../measure", version = "=1.14.9" } +solana-runtime = { path = "../runtime", version = "=1.14.9" } +solana-sdk = { path = "../sdk", version = "=1.14.9" } +solana-version = { path = "../version", version = "=1.14.9" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/merkle-tree/Cargo.toml b/merkle-tree/Cargo.toml index dcec2ceb1f6e19..90a39a54f26acb 100644 --- a/merkle-tree/Cargo.toml +++ b/merkle-tree/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-merkle-tree" -version = "1.14.8" +version = "1.14.9" description = "Solana Merkle Tree" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -11,7 +11,7 @@ edition = "2021" [dependencies] fast-math = "0.1" -solana-program = { path = "../sdk/program", version = "=1.14.8" } +solana-program = { path = "../sdk/program", version = "=1.14.9" } # This can go once the BPF toolchain target Rust 1.42.0+ [target.bpfel-unknown-unknown.dependencies] diff --git a/metrics/Cargo.toml b/metrics/Cargo.toml index 40f8215a9cd9c9..4843e012a5176a 100644 --- a/metrics/Cargo.toml +++ b/metrics/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-metrics" -version = "1.14.8" +version = "1.14.9" description = "Solana Metrics" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -15,7 +15,7 @@ gethostname = "0.2.3" lazy_static = "1.4.0" log = "0.4.17" reqwest = { version = "0.11.11", default-features = false, features = ["blocking", "brotli", "deflate", "gzip", "rustls-tls", "json"] } -solana-sdk = { path = "../sdk", version = "=1.14.8" } +solana-sdk = { path = "../sdk", version = "=1.14.9" } [dev-dependencies] env_logger = "0.9.0" diff --git a/net-shaper/Cargo.toml b/net-shaper/Cargo.toml index 7098e59bcd40bb..9664c9e9afb2f4 100644 --- a/net-shaper/Cargo.toml +++ b/net-shaper/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-net-shaper" description = "The solana cluster network shaping tool" -version = "1.14.8" +version = "1.14.9" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,7 +14,7 @@ clap = { version = "3.1.5", features = ["cargo"] } rand = "0.7.0" serde = { version = "1.0.138", features = ["derive"] } serde_json = "1.0.81" -solana-logger = { path = "../logger", version = "=1.14.8" } +solana-logger = { path = "../logger", version = "=1.14.9" } [[bin]] name = "solana-net-shaper" diff --git a/net-utils/Cargo.toml b/net-utils/Cargo.toml index a32e6304827dda..26e056718c0e10 100644 --- a/net-utils/Cargo.toml +++ b/net-utils/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-net-utils" -version = "1.14.8" +version = "1.14.9" description = "Solana Network Utilities" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -19,9 +19,9 @@ rand = "0.7.0" serde = "1.0.138" serde_derive = "1.0.103" socket2 = "0.4.4" -solana-logger = { path = "../logger", version = "=1.14.8" } -solana-sdk = { path = "../sdk", version = "=1.14.8" } -solana-version = { path = "../version", version = "=1.14.8" } +solana-logger = { path = "../logger", version = "=1.14.9" } +solana-sdk = { path = "../sdk", version = "=1.14.9" } +solana-version = { path = "../version", version = "=1.14.9" } tokio = { version = "1", features = ["full"] } url = "2.2.2" diff --git a/notifier/Cargo.toml b/notifier/Cargo.toml index 2f05cf0525d466..6ef78314be0e7a 100644 --- a/notifier/Cargo.toml +++ b/notifier/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-notifier" -version = "1.14.8" +version = "1.14.9" description = "Solana Notifier" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/perf/Cargo.toml b/perf/Cargo.toml index df0e1723769fea..9d05c992508aab 100644 --- a/perf/Cargo.toml +++ b/perf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-perf" -version = "1.14.8" +version = "1.14.9" description = "Solana Performance APIs" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -22,10 +22,10 @@ log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" serde = "1.0.138" -solana-metrics = { path = "../metrics", version = "=1.14.8" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.8" } -solana-sdk = { path = "../sdk", version = "=1.14.8" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.8" } +solana-metrics = { path = "../metrics", version = "=1.14.9" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.9" } +solana-sdk = { path = "../sdk", version = "=1.14.9" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.9" } [target."cfg(target_os = \"linux\")".dependencies] caps = "0.5.3" @@ -37,7 +37,7 @@ name = "solana_perf" [dev-dependencies] matches = "0.1.9" -solana-logger = { path = "../logger", version = "=1.14.8" } +solana-logger = { path = "../logger", version = "=1.14.9" } [[bench]] name = "sigverify" diff --git a/poh-bench/Cargo.toml b/poh-bench/Cargo.toml index 7f772ce3254809..6c2bee90993508 100644 --- a/poh-bench/Cargo.toml +++ b/poh-bench/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-poh-bench" -version = "1.14.8" +version = "1.14.9" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,12 +14,12 @@ clap = { version = "3.1.5", features = ["cargo"] } log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" -solana-entry = { path = "../entry", version = "=1.14.8" } -solana-logger = { path = "../logger", version = "=1.14.8" } -solana-measure = { path = "../measure", version = "=1.14.8" } -solana-perf = { path = "../perf", version = "=1.14.8" } -solana-sdk = { path = "../sdk", version = "=1.14.8" } -solana-version = { path = "../version", version = "=1.14.8" } +solana-entry = { path = "../entry", version = "=1.14.9" } +solana-logger = { path = "../logger", version = "=1.14.9" } +solana-measure = { path = "../measure", version = "=1.14.9" } +solana-perf = { path = "../perf", version = "=1.14.9" } +solana-sdk = { path = "../sdk", version = "=1.14.9" } +solana-version = { path = "../version", version = "=1.14.9" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/poh/Cargo.toml b/poh/Cargo.toml index 0037256217568c..6ddc37ce16c39b 100644 --- a/poh/Cargo.toml +++ b/poh/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-poh" -version = "1.14.8" +version = "1.14.9" description = "Solana PoH" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,21 +13,21 @@ edition = "2021" core_affinity = "0.5.10" crossbeam-channel = "0.5" log = "0.4.17" -solana-entry = { path = "../entry", version = "=1.14.8" } -solana-ledger = { path = "../ledger", version = "=1.14.8" } -solana-measure = { path = "../measure", version = "=1.14.8" } -solana-metrics = { path = "../metrics", version = "=1.14.8" } -solana-runtime = { path = "../runtime", version = "=1.14.8" } -solana-sdk = { path = "../sdk", version = "=1.14.8" } -solana-sys-tuner = { path = "../sys-tuner", version = "=1.14.8" } +solana-entry = { path = "../entry", version = "=1.14.9" } +solana-ledger = { path = "../ledger", version = "=1.14.9" } +solana-measure = { path = "../measure", version = "=1.14.9" } +solana-metrics = { path = "../metrics", version = "=1.14.9" } +solana-runtime = { path = "../runtime", version = "=1.14.9" } +solana-sdk = { path = "../sdk", version = "=1.14.9" } +solana-sys-tuner = { path = "../sys-tuner", version = "=1.14.9" } thiserror = "1.0" [dev-dependencies] bincode = "1.3.3" matches = "0.1.9" rand = "0.7.0" -solana-logger = { path = "../logger", version = "=1.14.8" } -solana-perf = { path = "../perf", version = "=1.14.8" } +solana-logger = { path = "../logger", version = "=1.14.9" } +solana-perf = { path = "../perf", version = "=1.14.9" } [lib] crate-type = ["lib"] diff --git a/program-runtime/Cargo.toml b/program-runtime/Cargo.toml index 79a62442f494fd..b4e942e81bd14e 100644 --- a/program-runtime/Cargo.toml +++ b/program-runtime/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-program-runtime" -version = "1.14.8" +version = "1.14.9" description = "Solana program runtime" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -21,16 +21,16 @@ num-derive = { version = "0.3" } num-traits = { version = "0.2" } rand = "0.7.0" serde = { version = "1.0.129", features = ["derive", "rc"] } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.8" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.8" } -solana-measure = { path = "../measure", version = "=1.14.8" } -solana-metrics = { path = "../metrics", version = "=1.14.8" } -solana-sdk = { path = "../sdk", version = "=1.14.8" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.9" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.9" } +solana-measure = { path = "../measure", version = "=1.14.9" } +solana-metrics = { path = "../metrics", version = "=1.14.9" } +solana-sdk = { path = "../sdk", version = "=1.14.9" } thiserror = "1.0" enum-iterator = "0.8.1" [dev-dependencies] -solana-logger = { path = "../logger", version = "=1.14.8" } +solana-logger = { path = "../logger", version = "=1.14.9" } [lib] crate-type = ["lib"] diff --git a/program-test/Cargo.toml b/program-test/Cargo.toml index f7a699c976ff8e..67377face3fd23 100644 --- a/program-test/Cargo.toml +++ b/program-test/Cargo.toml @@ -5,7 +5,7 @@ edition = "2021" license = "Apache-2.0" name = "solana-program-test" repository = "https://github.com/solana-labs/solana" -version = "1.14.8" +version = "1.14.9" [dependencies] assert_matches = "1.5.0" @@ -15,13 +15,13 @@ bincode = "1.3.3" chrono-humanize = "0.2.1" log = "0.4.17" serde = "1.0.138" -solana-banks-client = { path = "../banks-client", version = "=1.14.8" } -solana-banks-server = { path = "../banks-server", version = "=1.14.8" } -solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.8" } -solana-logger = { path = "../logger", version = "=1.14.8" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.8" } -solana-runtime = { path = "../runtime", version = "=1.14.8" } -solana-sdk = { path = "../sdk", version = "=1.14.8" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.8" } +solana-banks-client = { path = "../banks-client", version = "=1.14.9" } +solana-banks-server = { path = "../banks-server", version = "=1.14.9" } +solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.9" } +solana-logger = { path = "../logger", version = "=1.14.9" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.9" } +solana-runtime = { path = "../runtime", version = "=1.14.9" } +solana-sdk = { path = "../sdk", version = "=1.14.9" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.9" } thiserror = "1.0" tokio = { version = "1", features = ["full"] } diff --git a/programs/address-lookup-table-tests/Cargo.toml b/programs/address-lookup-table-tests/Cargo.toml index 28fef40b4c094e..7e291e99ccd47c 100644 --- a/programs/address-lookup-table-tests/Cargo.toml +++ b/programs/address-lookup-table-tests/Cargo.toml @@ -3,7 +3,7 @@ [package] name = "solana-address-lookup-table-program-tests" -version = "1.14.8" +version = "1.14.9" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" @@ -14,9 +14,9 @@ publish = false [dev-dependencies] assert_matches = "1.5.0" bincode = "1.3.3" -solana-address-lookup-table-program = { path = "../address-lookup-table", version = "=1.14.8" } -solana-program-test = { path = "../../program-test", version = "=1.14.8" } -solana-sdk = { path = "../../sdk", version = "=1.14.8" } +solana-address-lookup-table-program = { path = "../address-lookup-table", version = "=1.14.9" } +solana-program-test = { path = "../../program-test", version = "=1.14.9" } +solana-sdk = { path = "../../sdk", version = "=1.14.9" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/address-lookup-table/Cargo.toml b/programs/address-lookup-table/Cargo.toml index bdea1077f30403..3173129a3cd72d 100644 --- a/programs/address-lookup-table/Cargo.toml +++ b/programs/address-lookup-table/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-address-lookup-table-program" -version = "1.14.8" +version = "1.14.9" description = "Solana address lookup table program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -16,14 +16,14 @@ log = "0.4.17" num-derive = "0.3" num-traits = "0.2" serde = { version = "1.0.138", features = ["derive"] } -solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.8" } -solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.8" } -solana-program = { path = "../../sdk/program", version = "=1.14.8" } +solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.9" } +solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.9" } +solana-program = { path = "../../sdk/program", version = "=1.14.9" } thiserror = "1.0" [target.'cfg(not(target_os = "solana"))'.dependencies] -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.8" } -solana-sdk = { path = "../../sdk", version = "=1.14.8" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.9" } +solana-sdk = { path = "../../sdk", version = "=1.14.9" } [build-dependencies] rustc_version = "0.4" diff --git a/programs/bpf-loader-tests/Cargo.toml b/programs/bpf-loader-tests/Cargo.toml index d24712cc40c4c2..f023ca9f833383 100644 --- a/programs/bpf-loader-tests/Cargo.toml +++ b/programs/bpf-loader-tests/Cargo.toml @@ -3,7 +3,7 @@ [package] name = "solana-bpf-loader-program-tests" -version = "1.14.8" +version = "1.14.9" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" @@ -14,9 +14,9 @@ publish = false [dev-dependencies] assert_matches = "1.5.0" bincode = "1.3.3" -solana-bpf-loader-program = { path = "../bpf_loader", version = "=1.14.8" } -solana-program-test = { path = "../../program-test", version = "=1.14.8" } -solana-sdk = { path = "../../sdk", version = "=1.14.8" } +solana-bpf-loader-program = { path = "../bpf_loader", version = "=1.14.9" } +solana-program-test = { path = "../../program-test", version = "=1.14.9" } +solana-sdk = { path = "../../sdk", version = "=1.14.9" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/bpf/Cargo.lock b/programs/bpf/Cargo.lock index bb90331d93c1c9..ffd5ab976c1feb 100644 --- a/programs/bpf/Cargo.lock +++ b/programs/bpf/Cargo.lock @@ -4063,7 +4063,7 @@ dependencies = [ [[package]] name = "solana-account-decoder" -version = "1.14.8" +version = "1.14.9" dependencies = [ "Inflector", "base64 0.13.0", @@ -4076,7 +4076,7 @@ dependencies = [ "serde_json", "solana-address-lookup-table-program", "solana-config-program", - "solana-sdk 1.14.8", + "solana-sdk 1.14.9", "solana-vote-program", "spl-token", "spl-token-2022", @@ -4086,7 +4086,7 @@ dependencies = [ [[package]] name = "solana-address-lookup-table-program" -version = "1.14.8" +version = "1.14.9" dependencies = [ "bincode", "bytemuck", @@ -4095,23 +4095,23 @@ dependencies = [ "num-traits", "rustc_version", "serde", - "solana-frozen-abi 1.14.8", - "solana-frozen-abi-macro 1.14.8", - "solana-program 1.14.8", + "solana-frozen-abi 1.14.9", + "solana-frozen-abi-macro 1.14.9", + "solana-program 1.14.9", "solana-program-runtime", - "solana-sdk 1.14.8", + "solana-sdk 1.14.9", "thiserror", ] [[package]] name = "solana-banks-client" -version = "1.14.8" +version = "1.14.9" dependencies = [ "borsh", "futures 0.3.21", "solana-banks-interface", - "solana-program 1.14.8", - "solana-sdk 1.14.8", + "solana-program 1.14.9", + "solana-sdk 1.14.9", "tarpc", "thiserror", "tokio", @@ -4120,16 +4120,16 @@ dependencies = [ [[package]] name = "solana-banks-interface" -version = "1.14.8" +version = "1.14.9" dependencies = [ "serde", - "solana-sdk 1.14.8", + "solana-sdk 1.14.9", "tarpc", ] [[package]] name = "solana-banks-server" -version = "1.14.8" +version = "1.14.9" dependencies = [ "bincode", "crossbeam-channel", @@ -4137,7 +4137,7 @@ dependencies = [ "solana-banks-interface", "solana-client", "solana-runtime", - "solana-sdk 1.14.8", + "solana-sdk 1.14.9", "solana-send-transaction-service", "tarpc", "tokio", @@ -4147,7 +4147,7 @@ dependencies = [ [[package]] name = "solana-bloom" -version = "1.14.8" +version = "1.14.9" dependencies = [ "bv", "fnv", @@ -4157,14 +4157,14 @@ dependencies = [ "rustc_version", "serde", "serde_derive", - "solana-frozen-abi 1.14.8", - "solana-frozen-abi-macro 1.14.8", - "solana-sdk 1.14.8", + "solana-frozen-abi 1.14.9", + "solana-frozen-abi-macro 1.14.9", + "solana-sdk 1.14.9", ] [[package]] name = "solana-bpf-loader-program" -version = "1.14.8" +version = "1.14.9" dependencies = [ "bincode", "byteorder 1.4.3", @@ -4173,15 +4173,15 @@ dependencies = [ "solana-measure", "solana-metrics", "solana-program-runtime", - "solana-sdk 1.14.8", - "solana-zk-token-sdk 1.14.8", + "solana-sdk 1.14.9", + "solana-zk-token-sdk 1.14.9", "solana_rbpf", "thiserror", ] [[package]] name = "solana-bpf-programs" -version = "1.14.8" +version = "1.14.9" dependencies = [ "bincode", "byteorder 1.4.3", @@ -4197,11 +4197,11 @@ dependencies = [ "solana-bpf-rust-realloc-invoke", "solana-cli-output", "solana-ledger", - "solana-logger 1.14.8", + "solana-logger 1.14.9", "solana-measure", "solana-program-runtime", "solana-runtime", - "solana-sdk 1.14.8", + "solana-sdk 1.14.9", "solana-transaction-status", "solana_rbpf", "walkdir", @@ -4209,385 +4209,385 @@ dependencies = [ [[package]] name = "solana-bpf-rust-128bit" -version = "1.14.8" +version = "1.14.9" dependencies = [ "solana-bpf-rust-128bit-dep", - "solana-program 1.14.8", + "solana-program 1.14.9", ] [[package]] name = "solana-bpf-rust-128bit-dep" -version = "1.14.8" +version = "1.14.9" dependencies = [ - "solana-program 1.14.8", + "solana-program 1.14.9", ] [[package]] name = "solana-bpf-rust-alloc" -version = "1.14.8" +version = "1.14.9" dependencies = [ - "solana-program 1.14.8", + "solana-program 1.14.9", ] [[package]] name = "solana-bpf-rust-call-depth" -version = "1.14.8" +version = "1.14.9" dependencies = [ - "solana-program 1.14.8", + "solana-program 1.14.9", ] [[package]] name = "solana-bpf-rust-caller-access" -version = "1.14.8" +version = "1.14.9" dependencies = [ - "solana-program 1.14.8", + "solana-program 1.14.9", ] [[package]] name = "solana-bpf-rust-curve25519" -version = "1.14.8" +version = "1.14.9" dependencies = [ - "solana-program 1.14.8", - "solana-zk-token-sdk 1.14.8", + "solana-program 1.14.9", + "solana-zk-token-sdk 1.14.9", ] [[package]] name = "solana-bpf-rust-custom-heap" -version = "1.14.8" +version = "1.14.9" dependencies = [ - "solana-program 1.14.8", + "solana-program 1.14.9", ] [[package]] name = "solana-bpf-rust-dep-crate" -version = "1.14.8" +version = "1.14.9" dependencies = [ "byteorder 1.4.3", "solana-address-lookup-table-program", - "solana-program 1.14.8", + "solana-program 1.14.9", ] [[package]] name = "solana-bpf-rust-deprecated-loader" -version = "1.14.8" +version = "1.14.9" dependencies = [ - "solana-program 1.14.8", + "solana-program 1.14.9", ] [[package]] name = "solana-bpf-rust-dup-accounts" -version = "1.14.8" +version = "1.14.9" dependencies = [ - "solana-program 1.14.8", + "solana-program 1.14.9", ] [[package]] name = "solana-bpf-rust-error-handling" -version = "1.14.8" +version = "1.14.9" dependencies = [ "num-derive", "num-traits", - "solana-program 1.14.8", + "solana-program 1.14.9", "thiserror", ] [[package]] name = "solana-bpf-rust-external-spend" -version = "1.14.8" +version = "1.14.9" dependencies = [ - "solana-program 1.14.8", + "solana-program 1.14.9", ] [[package]] name = "solana-bpf-rust-finalize" -version = "1.14.8" +version = "1.14.9" dependencies = [ - "solana-program 1.14.8", + "solana-program 1.14.9", ] [[package]] name = "solana-bpf-rust-get-minimum-delegation" -version = "1.14.8" +version = "1.14.9" dependencies = [ - "solana-program 1.14.8", + "solana-program 1.14.9", ] [[package]] name = "solana-bpf-rust-inner_instruction_alignment_check" -version = "1.14.8" +version = "1.14.9" dependencies = [ - "solana-program 1.14.8", + "solana-program 1.14.9", ] [[package]] name = "solana-bpf-rust-instruction-introspection" -version = "1.14.8" +version = "1.14.9" dependencies = [ - "solana-program 1.14.8", + "solana-program 1.14.9", ] [[package]] name = "solana-bpf-rust-invoke" -version = "1.14.8" +version = "1.14.9" dependencies = [ "solana-bpf-rust-invoked", - "solana-program 1.14.8", + "solana-program 1.14.9", ] [[package]] name = "solana-bpf-rust-invoke-and-error" -version = "1.14.8" +version = "1.14.9" dependencies = [ - "solana-program 1.14.8", + "solana-program 1.14.9", ] [[package]] name = "solana-bpf-rust-invoke-and-ok" -version = "1.14.8" +version = "1.14.9" dependencies = [ - "solana-program 1.14.8", + "solana-program 1.14.9", ] [[package]] name = "solana-bpf-rust-invoke-and-return" -version = "1.14.8" +version = "1.14.9" dependencies = [ - "solana-program 1.14.8", + "solana-program 1.14.9", ] [[package]] name = "solana-bpf-rust-invoked" -version = "1.14.8" +version = "1.14.9" dependencies = [ - "solana-program 1.14.8", + "solana-program 1.14.9", ] [[package]] name = "solana-bpf-rust-iter" -version = "1.14.8" +version = "1.14.9" dependencies = [ - "solana-program 1.14.8", + "solana-program 1.14.9", ] [[package]] name = "solana-bpf-rust-log-data" -version = "1.14.8" +version = "1.14.9" dependencies = [ - "solana-program 1.14.8", + "solana-program 1.14.9", ] [[package]] name = "solana-bpf-rust-many-args" -version = "1.14.8" +version = "1.14.9" dependencies = [ "solana-bpf-rust-many-args-dep", - "solana-program 1.14.8", + "solana-program 1.14.9", ] [[package]] name = "solana-bpf-rust-many-args-dep" -version = "1.14.8" +version = "1.14.9" dependencies = [ - "solana-program 1.14.8", + "solana-program 1.14.9", ] [[package]] name = "solana-bpf-rust-mem" -version = "1.14.8" +version = "1.14.9" dependencies = [ - "solana-program 1.14.8", + "solana-program 1.14.9", "solana-program-runtime", "solana-program-test", - "solana-sdk 1.14.8", + "solana-sdk 1.14.9", ] [[package]] name = "solana-bpf-rust-membuiltins" -version = "1.14.8" +version = "1.14.9" dependencies = [ "solana-bpf-rust-mem", - "solana-program 1.14.8", + "solana-program 1.14.9", ] [[package]] name = "solana-bpf-rust-noop" -version = "1.14.8" +version = "1.14.9" dependencies = [ - "solana-program 1.14.8", + "solana-program 1.14.9", ] [[package]] name = "solana-bpf-rust-panic" -version = "1.14.8" +version = "1.14.9" dependencies = [ - "solana-program 1.14.8", + "solana-program 1.14.9", ] [[package]] name = "solana-bpf-rust-param-passing" -version = "1.14.8" +version = "1.14.9" dependencies = [ "solana-bpf-rust-param-passing-dep", - "solana-program 1.14.8", + "solana-program 1.14.9", ] [[package]] name = "solana-bpf-rust-param-passing-dep" -version = "1.14.8" +version = "1.14.9" dependencies = [ - "solana-program 1.14.8", + "solana-program 1.14.9", ] [[package]] name = "solana-bpf-rust-rand" -version = "1.14.8" +version = "1.14.9" dependencies = [ "getrandom 0.1.14", "rand 0.7.3", - "solana-program 1.14.8", + "solana-program 1.14.9", ] [[package]] name = "solana-bpf-rust-realloc" -version = "1.14.8" +version = "1.14.9" dependencies = [ - "solana-program 1.14.8", + "solana-program 1.14.9", ] [[package]] name = "solana-bpf-rust-realloc-invoke" -version = "1.14.8" +version = "1.14.9" dependencies = [ "solana-bpf-rust-realloc", - "solana-program 1.14.8", + "solana-program 1.14.9", ] [[package]] name = "solana-bpf-rust-ro-account_modify" -version = "1.14.8" +version = "1.14.9" dependencies = [ - "solana-program 1.14.8", + "solana-program 1.14.9", ] [[package]] name = "solana-bpf-rust-ro-modify" -version = "1.14.8" +version = "1.14.9" dependencies = [ - "solana-program 1.14.8", + "solana-program 1.14.9", ] [[package]] name = "solana-bpf-rust-sanity" -version = "1.14.8" +version = "1.14.9" dependencies = [ - "solana-program 1.14.8", + "solana-program 1.14.9", "solana-program-runtime", "solana-program-test", - "solana-sdk 1.14.8", + "solana-sdk 1.14.9", ] [[package]] name = "solana-bpf-rust-secp256k1-recover" -version = "1.14.8" +version = "1.14.9" dependencies = [ "libsecp256k1 0.7.0", - "solana-program 1.14.8", + "solana-program 1.14.9", ] [[package]] name = "solana-bpf-rust-sha" -version = "1.14.8" +version = "1.14.9" dependencies = [ "blake3", - "solana-program 1.14.8", + "solana-program 1.14.9", ] [[package]] name = "solana-bpf-rust-sibling-instructions" -version = "1.14.8" +version = "1.14.9" dependencies = [ - "solana-program 1.14.8", + "solana-program 1.14.9", ] [[package]] name = "solana-bpf-rust-sibling_inner-instructions" -version = "1.14.8" +version = "1.14.9" dependencies = [ - "solana-program 1.14.8", + "solana-program 1.14.9", ] [[package]] name = "solana-bpf-rust-simulation" -version = "1.14.8" +version = "1.14.9" dependencies = [ - "solana-logger 1.14.8", - "solana-program 1.14.8", + "solana-logger 1.14.9", + "solana-program 1.14.9", "solana-program-test", - "solana-sdk 1.14.8", + "solana-sdk 1.14.9", "solana-validator", ] [[package]] name = "solana-bpf-rust-spoof1" -version = "1.14.8" +version = "1.14.9" dependencies = [ - "solana-program 1.14.8", + "solana-program 1.14.9", ] [[package]] name = "solana-bpf-rust-spoof1-system" -version = "1.14.8" +version = "1.14.9" dependencies = [ - "solana-program 1.14.8", + "solana-program 1.14.9", ] [[package]] name = "solana-bpf-rust-sysvar" -version = "1.14.8" +version = "1.14.9" dependencies = [ - "solana-program 1.14.8", + "solana-program 1.14.9", "solana-program-runtime", "solana-program-test", - "solana-sdk 1.14.8", + "solana-sdk 1.14.9", ] [[package]] name = "solana-bpf-rust-upgradeable" -version = "1.14.8" +version = "1.14.9" dependencies = [ - "solana-program 1.14.8", + "solana-program 1.14.9", ] [[package]] name = "solana-bpf-rust-upgraded" -version = "1.14.8" +version = "1.14.9" dependencies = [ - "solana-program 1.14.8", + "solana-program 1.14.9", ] [[package]] name = "solana-bucket-map" -version = "1.14.8" +version = "1.14.9" dependencies = [ "log", "memmap2", "modular-bitfield", "rand 0.7.3", "solana-measure", - "solana-sdk 1.14.8", + "solana-sdk 1.14.9", "tempfile", ] [[package]] name = "solana-clap-utils" -version = "1.14.8" +version = "1.14.9" dependencies = [ "chrono", "clap 2.33.3", "rpassword", "solana-perf", "solana-remote-wallet", - "solana-sdk 1.14.8", + "solana-sdk 1.14.9", "thiserror", "tiny-bip39", "uriparse", @@ -4596,7 +4596,7 @@ dependencies = [ [[package]] name = "solana-cli-config" -version = "1.14.8" +version = "1.14.9" dependencies = [ "dirs-next", "lazy_static", @@ -4604,13 +4604,13 @@ dependencies = [ "serde_derive", "serde_yaml", "solana-clap-utils", - "solana-sdk 1.14.8", + "solana-sdk 1.14.9", "url 2.2.2", ] [[package]] name = "solana-cli-output" -version = "1.14.8" +version = "1.14.9" dependencies = [ "Inflector", "base64 0.13.0", @@ -4627,7 +4627,7 @@ dependencies = [ "solana-clap-utils", "solana-cli-config", "solana-client", - "solana-sdk 1.14.8", + "solana-sdk 1.14.9", "solana-transaction-status", "solana-vote-program", "spl-memo", @@ -4635,7 +4635,7 @@ dependencies = [ [[package]] name = "solana-client" -version = "1.14.8" +version = "1.14.9" dependencies = [ "async-mutex", "async-trait", @@ -4671,7 +4671,7 @@ dependencies = [ "solana-measure", "solana-metrics", "solana-net-utils", - "solana-sdk 1.14.8", + "solana-sdk 1.14.9", "solana-streamer", "solana-transaction-status", "solana-version", @@ -4687,27 +4687,27 @@ dependencies = [ [[package]] name = "solana-compute-budget-program" -version = "1.14.8" +version = "1.14.9" dependencies = [ "solana-program-runtime", - "solana-sdk 1.14.8", + "solana-sdk 1.14.9", ] [[package]] name = "solana-config-program" -version = "1.14.8" +version = "1.14.9" dependencies = [ "bincode", "chrono", "serde", "serde_derive", "solana-program-runtime", - "solana-sdk 1.14.8", + "solana-sdk 1.14.9", ] [[package]] name = "solana-core" -version = "1.14.8" +version = "1.14.9" dependencies = [ "ahash", "base64 0.13.0", @@ -4736,8 +4736,8 @@ dependencies = [ "solana-bloom", "solana-client", "solana-entry", - "solana-frozen-abi 1.14.8", - "solana-frozen-abi-macro 1.14.8", + "solana-frozen-abi 1.14.9", + "solana-frozen-abi-macro 1.14.9", "solana-geyser-plugin-manager", "solana-gossip", "solana-ledger", @@ -4750,7 +4750,7 @@ dependencies = [ "solana-rayon-threadlimit", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.8", + "solana-sdk 1.14.9", "solana-send-transaction-service", "solana-streamer", "solana-transaction-status", @@ -4766,19 +4766,19 @@ dependencies = [ [[package]] name = "solana-download-utils" -version = "1.14.8" +version = "1.14.9" dependencies = [ "console", "indicatif", "log", "reqwest", "solana-runtime", - "solana-sdk 1.14.8", + "solana-sdk 1.14.9", ] [[package]] name = "solana-entry" -version = "1.14.8" +version = "1.14.9" dependencies = [ "bincode", "crossbeam-channel", @@ -4794,12 +4794,12 @@ dependencies = [ "solana-metrics", "solana-perf", "solana-rayon-threadlimit", - "solana-sdk 1.14.8", + "solana-sdk 1.14.9", ] [[package]] name = "solana-faucet" -version = "1.14.8" +version = "1.14.9" dependencies = [ "bincode", "byteorder 1.4.3", @@ -4810,9 +4810,9 @@ dependencies = [ "serde_derive", "solana-clap-utils", "solana-cli-config", - "solana-logger 1.14.8", + "solana-logger 1.14.9", "solana-metrics", - "solana-sdk 1.14.8", + "solana-sdk 1.14.9", "solana-version", "spl-memo", "thiserror", @@ -4843,7 +4843,7 @@ dependencies = [ [[package]] name = "solana-frozen-abi" -version = "1.14.8" +version = "1.14.9" dependencies = [ "ahash", "blake3", @@ -4868,7 +4868,7 @@ dependencies = [ "serde_derive", "serde_json", "sha2 0.10.2", - "solana-frozen-abi-macro 1.14.8", + "solana-frozen-abi-macro 1.14.9", "subtle", "thiserror", ] @@ -4887,7 +4887,7 @@ dependencies = [ [[package]] name = "solana-frozen-abi-macro" -version = "1.14.8" +version = "1.14.9" dependencies = [ "proc-macro2 1.0.41", "quote 1.0.18", @@ -4897,26 +4897,26 @@ dependencies = [ [[package]] name = "solana-genesis-utils" -version = "1.14.8" +version = "1.14.9" dependencies = [ "solana-download-utils", "solana-runtime", - "solana-sdk 1.14.8", + "solana-sdk 1.14.9", ] [[package]] name = "solana-geyser-plugin-interface" -version = "1.14.8" +version = "1.14.9" dependencies = [ "log", - "solana-sdk 1.14.8", + "solana-sdk 1.14.9", "solana-transaction-status", "thiserror", ] [[package]] name = "solana-geyser-plugin-manager" -version = "1.14.8" +version = "1.14.9" dependencies = [ "bs58", "crossbeam-channel", @@ -4929,14 +4929,14 @@ dependencies = [ "solana-metrics", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.8", + "solana-sdk 1.14.9", "solana-transaction-status", "thiserror", ] [[package]] name = "solana-gossip" -version = "1.14.8" +version = "1.14.9" dependencies = [ "bincode", "bv", @@ -4960,17 +4960,17 @@ dependencies = [ "solana-clap-utils", "solana-client", "solana-entry", - "solana-frozen-abi 1.14.8", - "solana-frozen-abi-macro 1.14.8", + "solana-frozen-abi 1.14.9", + "solana-frozen-abi-macro 1.14.9", "solana-ledger", - "solana-logger 1.14.8", + "solana-logger 1.14.9", "solana-measure", "solana-metrics", "solana-net-utils", "solana-perf", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.14.8", + "solana-sdk 1.14.9", "solana-streamer", "solana-version", "solana-vote-program", @@ -4979,7 +4979,7 @@ dependencies = [ [[package]] name = "solana-ledger" -version = "1.14.8" +version = "1.14.9" dependencies = [ "assert_matches", "bincode", @@ -5011,15 +5011,15 @@ dependencies = [ "solana-account-decoder", "solana-bpf-loader-program", "solana-entry", - "solana-frozen-abi 1.14.8", - "solana-frozen-abi-macro 1.14.8", + "solana-frozen-abi 1.14.9", + "solana-frozen-abi-macro 1.14.9", "solana-measure", "solana-metrics", "solana-perf", "solana-program-runtime", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.14.8", + "solana-sdk 1.14.9", "solana-stake-program", "solana-storage-bigtable", "solana-storage-proto", @@ -5048,7 +5048,7 @@ dependencies = [ [[package]] name = "solana-logger" -version = "1.14.8" +version = "1.14.9" dependencies = [ "env_logger", "lazy_static", @@ -5057,36 +5057,36 @@ dependencies = [ [[package]] name = "solana-measure" -version = "1.14.8" +version = "1.14.9" dependencies = [ "log", - "solana-sdk 1.14.8", + "solana-sdk 1.14.9", ] [[package]] name = "solana-merkle-tree" -version = "1.14.8" +version = "1.14.9" dependencies = [ "fast-math", "matches", - "solana-program 1.14.8", + "solana-program 1.14.9", ] [[package]] name = "solana-metrics" -version = "1.14.8" +version = "1.14.9" dependencies = [ "crossbeam-channel", "gethostname", "lazy_static", "log", "reqwest", - "solana-sdk 1.14.8", + "solana-sdk 1.14.9", ] [[package]] name = "solana-net-utils" -version = "1.14.8" +version = "1.14.9" dependencies = [ "bincode", "clap 3.1.6", @@ -5097,8 +5097,8 @@ dependencies = [ "serde", "serde_derive", "socket2", - "solana-logger 1.14.8", - "solana-sdk 1.14.8", + "solana-logger 1.14.9", + "solana-sdk 1.14.9", "solana-version", "tokio", "url 2.2.2", @@ -5106,7 +5106,7 @@ dependencies = [ [[package]] name = "solana-perf" -version = "1.14.8" +version = "1.14.9" dependencies = [ "ahash", "bincode", @@ -5125,13 +5125,13 @@ dependencies = [ "serde", "solana-metrics", "solana-rayon-threadlimit", - "solana-sdk 1.14.8", + "solana-sdk 1.14.9", "solana-vote-program", ] [[package]] name = "solana-poh" -version = "1.14.8" +version = "1.14.9" dependencies = [ "core_affinity", "crossbeam-channel", @@ -5141,7 +5141,7 @@ dependencies = [ "solana-measure", "solana-metrics", "solana-runtime", - "solana-sdk 1.14.8", + "solana-sdk 1.14.9", "solana-sys-tuner", "thiserror", ] @@ -5190,7 +5190,7 @@ dependencies = [ [[package]] name = "solana-program" -version = "1.14.8" +version = "1.14.9" dependencies = [ "base64 0.13.0", "bincode", @@ -5226,9 +5226,9 @@ dependencies = [ "serde_json", "sha2 0.10.2", "sha3 0.10.1", - "solana-frozen-abi 1.14.8", - "solana-frozen-abi-macro 1.14.8", - "solana-sdk-macro 1.14.8", + "solana-frozen-abi 1.14.9", + "solana-frozen-abi-macro 1.14.9", + "solana-sdk-macro 1.14.9", "thiserror", "tiny-bip39", "wasm-bindgen", @@ -5237,7 +5237,7 @@ dependencies = [ [[package]] name = "solana-program-runtime" -version = "1.14.8" +version = "1.14.9" dependencies = [ "base64 0.13.0", "bincode", @@ -5252,17 +5252,17 @@ dependencies = [ "rand 0.7.3", "rustc_version", "serde", - "solana-frozen-abi 1.14.8", - "solana-frozen-abi-macro 1.14.8", + "solana-frozen-abi 1.14.9", + "solana-frozen-abi-macro 1.14.9", "solana-measure", "solana-metrics", - "solana-sdk 1.14.8", + "solana-sdk 1.14.9", "thiserror", ] [[package]] name = "solana-program-test" -version = "1.14.8" +version = "1.14.9" dependencies = [ "assert_matches", "async-trait", @@ -5274,10 +5274,10 @@ dependencies = [ "solana-banks-client", "solana-banks-server", "solana-bpf-loader-program", - "solana-logger 1.14.8", + "solana-logger 1.14.9", "solana-program-runtime", "solana-runtime", - "solana-sdk 1.14.8", + "solana-sdk 1.14.9", "solana-vote-program", "thiserror", "tokio", @@ -5285,7 +5285,7 @@ dependencies = [ [[package]] name = "solana-rayon-threadlimit" -version = "1.14.8" +version = "1.14.9" dependencies = [ "lazy_static", "num_cpus", @@ -5293,7 +5293,7 @@ dependencies = [ [[package]] name = "solana-remote-wallet" -version = "1.14.8" +version = "1.14.9" dependencies = [ "console", "dialoguer", @@ -5303,14 +5303,14 @@ dependencies = [ "parking_lot 0.12.1", "qstring", "semver", - "solana-sdk 1.14.8", + "solana-sdk 1.14.9", "thiserror", "uriparse", ] [[package]] name = "solana-rpc" -version = "1.14.8" +version = "1.14.9" dependencies = [ "base64 0.13.0", "bincode", @@ -5343,7 +5343,7 @@ dependencies = [ "solana-poh", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.14.8", + "solana-sdk 1.14.9", "solana-send-transaction-service", "solana-stake-program", "solana-storage-bigtable", @@ -5361,7 +5361,7 @@ dependencies = [ [[package]] name = "solana-runtime" -version = "1.14.8" +version = "1.14.9" dependencies = [ "arrayref", "bincode", @@ -5397,17 +5397,17 @@ dependencies = [ "solana-bucket-map", "solana-compute-budget-program", "solana-config-program", - "solana-frozen-abi 1.14.8", - "solana-frozen-abi-macro 1.14.8", + "solana-frozen-abi 1.14.9", + "solana-frozen-abi-macro 1.14.9", "solana-measure", "solana-metrics", "solana-program-runtime", "solana-rayon-threadlimit", - "solana-sdk 1.14.8", + "solana-sdk 1.14.9", "solana-stake-program", "solana-vote-program", "solana-zk-token-proof-program", - "solana-zk-token-sdk 1.14.8", + "solana-zk-token-sdk 1.14.9", "strum", "strum_macros", "symlink", @@ -5470,7 +5470,7 @@ dependencies = [ [[package]] name = "solana-sdk" -version = "1.14.8" +version = "1.14.9" dependencies = [ "assert_matches", "base64 0.13.0", @@ -5507,11 +5507,11 @@ dependencies = [ "serde_json", "sha2 0.10.2", "sha3 0.10.1", - "solana-frozen-abi 1.14.8", - "solana-frozen-abi-macro 1.14.8", - "solana-logger 1.14.8", - "solana-program 1.14.8", - "solana-sdk-macro 1.14.8", + "solana-frozen-abi 1.14.9", + "solana-frozen-abi-macro 1.14.9", + "solana-logger 1.14.9", + "solana-program 1.14.9", + "solana-sdk-macro 1.14.9", "thiserror", "uriparse", "wasm-bindgen", @@ -5532,7 +5532,7 @@ dependencies = [ [[package]] name = "solana-sdk-macro" -version = "1.14.8" +version = "1.14.9" dependencies = [ "bs58", "proc-macro2 1.0.41", @@ -5543,7 +5543,7 @@ dependencies = [ [[package]] name = "solana-send-transaction-service" -version = "1.14.8" +version = "1.14.9" dependencies = [ "crossbeam-channel", "log", @@ -5551,12 +5551,12 @@ dependencies = [ "solana-measure", "solana-metrics", "solana-runtime", - "solana-sdk 1.14.8", + "solana-sdk 1.14.9", ] [[package]] name = "solana-stake-program" -version = "1.14.8" +version = "1.14.9" dependencies = [ "bincode", "log", @@ -5566,18 +5566,18 @@ dependencies = [ "serde", "serde_derive", "solana-config-program", - "solana-frozen-abi 1.14.8", - "solana-frozen-abi-macro 1.14.8", + "solana-frozen-abi 1.14.9", + "solana-frozen-abi-macro 1.14.9", "solana-metrics", "solana-program-runtime", - "solana-sdk 1.14.8", + "solana-sdk 1.14.9", "solana-vote-program", "thiserror", ] [[package]] name = "solana-storage-bigtable" -version = "1.14.8" +version = "1.14.9" dependencies = [ "backoff", "bincode", @@ -5598,7 +5598,7 @@ dependencies = [ "serde_derive", "smpl_jwt", "solana-metrics", - "solana-sdk 1.14.8", + "solana-sdk 1.14.9", "solana-storage-proto", "solana-transaction-status", "thiserror", @@ -5609,7 +5609,7 @@ dependencies = [ [[package]] name = "solana-storage-proto" -version = "1.14.8" +version = "1.14.9" dependencies = [ "bincode", "bs58", @@ -5617,14 +5617,14 @@ dependencies = [ "protobuf-src", "serde", "solana-account-decoder", - "solana-sdk 1.14.8", + "solana-sdk 1.14.9", "solana-transaction-status", "tonic-build 0.8.0", ] [[package]] name = "solana-streamer" -version = "1.14.8" +version = "1.14.9" dependencies = [ "crossbeam-channel", "futures-util", @@ -5643,7 +5643,7 @@ dependencies = [ "rustls 0.20.6", "solana-metrics", "solana-perf", - "solana-sdk 1.14.8", + "solana-sdk 1.14.9", "thiserror", "tokio", "x509-parser", @@ -5651,13 +5651,13 @@ dependencies = [ [[package]] name = "solana-sys-tuner" -version = "1.14.8" +version = "1.14.9" dependencies = [ "clap 2.33.3", "libc", "log", "nix", - "solana-logger 1.14.8", + "solana-logger 1.14.9", "solana-version", "sysctl", "unix_socket2", @@ -5666,7 +5666,7 @@ dependencies = [ [[package]] name = "solana-test-validator" -version = "1.14.8" +version = "1.14.9" dependencies = [ "base64 0.13.0", "log", @@ -5677,20 +5677,20 @@ dependencies = [ "solana-core", "solana-gossip", "solana-ledger", - "solana-logger 1.14.8", + "solana-logger 1.14.9", "solana-net-utils", "solana-program-runtime", "solana-program-test", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.8", + "solana-sdk 1.14.9", "solana-streamer", "tokio", ] [[package]] name = "solana-transaction-status" -version = "1.14.8" +version = "1.14.9" dependencies = [ "Inflector", "base64 0.13.0", @@ -5706,7 +5706,7 @@ dependencies = [ "solana-address-lookup-table-program", "solana-measure", "solana-metrics", - "solana-sdk 1.14.8", + "solana-sdk 1.14.9", "solana-vote-program", "spl-associated-token-account", "spl-memo", @@ -5717,7 +5717,7 @@ dependencies = [ [[package]] name = "solana-validator" -version = "1.14.8" +version = "1.14.9" dependencies = [ "chrono", "clap 2.33.3", @@ -5748,14 +5748,14 @@ dependencies = [ "solana-genesis-utils", "solana-gossip", "solana-ledger", - "solana-logger 1.14.8", + "solana-logger 1.14.9", "solana-metrics", "solana-net-utils", "solana-perf", "solana-poh", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.8", + "solana-sdk 1.14.9", "solana-send-transaction-service", "solana-storage-bigtable", "solana-streamer", @@ -5768,21 +5768,21 @@ dependencies = [ [[package]] name = "solana-version" -version = "1.14.8" +version = "1.14.9" dependencies = [ "log", "rustc_version", "semver", "serde", "serde_derive", - "solana-frozen-abi 1.14.8", - "solana-frozen-abi-macro 1.14.8", - "solana-sdk 1.14.8", + "solana-frozen-abi 1.14.9", + "solana-frozen-abi-macro 1.14.9", + "solana-sdk 1.14.9", ] [[package]] name = "solana-vote-program" -version = "1.14.8" +version = "1.14.9" dependencies = [ "bincode", "log", @@ -5791,25 +5791,25 @@ dependencies = [ "rustc_version", "serde", "serde_derive", - "solana-frozen-abi 1.14.8", - "solana-frozen-abi-macro 1.14.8", + "solana-frozen-abi 1.14.9", + "solana-frozen-abi-macro 1.14.9", "solana-metrics", "solana-program-runtime", - "solana-sdk 1.14.8", + "solana-sdk 1.14.9", "thiserror", ] [[package]] name = "solana-zk-token-proof-program" -version = "1.14.8" +version = "1.14.9" dependencies = [ "bytemuck", "getrandom 0.1.14", "num-derive", "num-traits", "solana-program-runtime", - "solana-sdk 1.14.8", - "solana-zk-token-sdk 1.14.8", + "solana-sdk 1.14.9", + "solana-zk-token-sdk 1.14.9", ] [[package]] @@ -5844,7 +5844,7 @@ dependencies = [ [[package]] name = "solana-zk-token-sdk" -version = "1.14.8" +version = "1.14.9" dependencies = [ "aes-gcm-siv", "arrayref", @@ -5864,8 +5864,8 @@ dependencies = [ "serde", "serde_json", "sha3 0.9.1", - "solana-program 1.14.8", - "solana-sdk 1.14.8", + "solana-program 1.14.9", + "solana-sdk 1.14.9", "subtle", "thiserror", "zeroize", diff --git a/programs/bpf/Cargo.toml b/programs/bpf/Cargo.toml index 9837f76f687250..4d71d6adbb5529 100644 --- a/programs/bpf/Cargo.toml +++ b/programs/bpf/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "solana-bpf-programs" description = "Blockchain, Rebuilt for Scale" -version = "1.14.8" +version = "1.14.9" documentation = "https://docs.rs/solana" homepage = "https://solana.com/" readme = "README.md" @@ -26,22 +26,22 @@ itertools = "0.10.1" log = "0.4.11" miow = "0.3.6" net2 = "0.2.37" -solana-account-decoder = { path = "../../account-decoder", version = "=1.14.8" } -solana-bpf-loader-program = { path = "../bpf_loader", version = "=1.14.8" } -solana-bpf-rust-invoke = { path = "rust/invoke", version = "=1.14.8" } -solana-bpf-rust-realloc = { path = "rust/realloc", version = "=1.14.8" } -solana-bpf-rust-realloc-invoke = { path = "rust/realloc_invoke", version = "=1.14.8" } -solana-cli-output = { path = "../../cli-output", version = "=1.14.8" } -solana-logger = { path = "../../logger", version = "=1.14.8" } -solana-measure = { path = "../../measure", version = "=1.14.8" } -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.8" } -solana-runtime = { path = "../../runtime", version = "=1.14.8" } -solana-sdk = { path = "../../sdk", version = "=1.14.8" } -solana-transaction-status = { path = "../../transaction-status", version = "=1.14.8" } +solana-account-decoder = { path = "../../account-decoder", version = "=1.14.9" } +solana-bpf-loader-program = { path = "../bpf_loader", version = "=1.14.9" } +solana-bpf-rust-invoke = { path = "rust/invoke", version = "=1.14.9" } +solana-bpf-rust-realloc = { path = "rust/realloc", version = "=1.14.9" } +solana-bpf-rust-realloc-invoke = { path = "rust/realloc_invoke", version = "=1.14.9" } +solana-cli-output = { path = "../../cli-output", version = "=1.14.9" } +solana-logger = { path = "../../logger", version = "=1.14.9" } +solana-measure = { path = "../../measure", version = "=1.14.9" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.9" } +solana-runtime = { path = "../../runtime", version = "=1.14.9" } +solana-sdk = { path = "../../sdk", version = "=1.14.9" } +solana-transaction-status = { path = "../../transaction-status", version = "=1.14.9" } solana_rbpf = "=0.2.31" [dev-dependencies] -solana-ledger = { path = "../../ledger", version = "=1.14.8" } +solana-ledger = { path = "../../ledger", version = "=1.14.9" } [[bench]] name = "bpf_loader" diff --git a/programs/bpf/rust/128bit/Cargo.toml b/programs/bpf/rust/128bit/Cargo.toml index 01bcba96d81a2d..d81f2feb7a7eb6 100644 --- a/programs/bpf/rust/128bit/Cargo.toml +++ b/programs/bpf/rust/128bit/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-128bit" -version = "1.14.8" +version = "1.14.9" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ documentation = "https://docs.rs/solana-bpf-rust-128bit" edition = "2021" [dependencies] -solana-bpf-rust-128bit-dep = { path = "../128bit_dep", version = "=1.14.8" } -solana-program = { path = "../../../../sdk/program", version = "=1.14.8" } +solana-bpf-rust-128bit-dep = { path = "../128bit_dep", version = "=1.14.9" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.9" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/128bit_dep/Cargo.toml b/programs/bpf/rust/128bit_dep/Cargo.toml index 9ab7a0bfc101ad..1cdb1044919512 100644 --- a/programs/bpf/rust/128bit_dep/Cargo.toml +++ b/programs/bpf/rust/128bit_dep/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-128bit-dep" -version = "1.14.8" +version = "1.14.9" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-128bit-dep" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.8" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.9" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/bpf/rust/alloc/Cargo.toml b/programs/bpf/rust/alloc/Cargo.toml index a673bd9e5af8c2..69604db1b1f77b 100644 --- a/programs/bpf/rust/alloc/Cargo.toml +++ b/programs/bpf/rust/alloc/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-alloc" -version = "1.14.8" +version = "1.14.9" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-alloc" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.8" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.9" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/call_depth/Cargo.toml b/programs/bpf/rust/call_depth/Cargo.toml index fb11f0127cb2e0..69755a0ae33d0a 100644 --- a/programs/bpf/rust/call_depth/Cargo.toml +++ b/programs/bpf/rust/call_depth/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-call-depth" -version = "1.14.8" +version = "1.14.9" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-call-depth" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.8" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.9" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/caller_access/Cargo.toml b/programs/bpf/rust/caller_access/Cargo.toml index 6f514d33bd62ce..f0d811089005ea 100644 --- a/programs/bpf/rust/caller_access/Cargo.toml +++ b/programs/bpf/rust/caller_access/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-caller-access" -version = "1.14.8" +version = "1.14.9" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-caller-access" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.8" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.9" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/curve25519/Cargo.toml b/programs/bpf/rust/curve25519/Cargo.toml index 537c3c39111548..2af24183736ba2 100644 --- a/programs/bpf/rust/curve25519/Cargo.toml +++ b/programs/bpf/rust/curve25519/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-curve25519" -version = "1.14.8" +version = "1.14.9" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ documentation = "https://docs.rs/solana-bpf-rust-zktoken_crypto" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.8" } -solana-zk-token-sdk = { path = "../../../../zk-token-sdk", version = "=1.14.8" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.9" } +solana-zk-token-sdk = { path = "../../../../zk-token-sdk", version = "=1.14.9" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/custom_heap/Cargo.toml b/programs/bpf/rust/custom_heap/Cargo.toml index c79eb18776c81a..2055a964573c13 100644 --- a/programs/bpf/rust/custom_heap/Cargo.toml +++ b/programs/bpf/rust/custom_heap/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-custom-heap" -version = "1.14.8" +version = "1.14.9" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-custom-heap" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.8" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.9" } [features] default = ["custom-heap"] diff --git a/programs/bpf/rust/dep_crate/Cargo.toml b/programs/bpf/rust/dep_crate/Cargo.toml index 63b5e39f2c061f..e60c717ccfb799 100644 --- a/programs/bpf/rust/dep_crate/Cargo.toml +++ b/programs/bpf/rust/dep_crate/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-dep-crate" -version = "1.14.8" +version = "1.14.9" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,8 +12,8 @@ edition = "2021" [dependencies] byteorder = { version = "1", default-features = false } # list of crates which must be buildable for bpf programs -solana-address-lookup-table-program = { path = "../../../../programs/address-lookup-table", version = "=1.14.8" } -solana-program = { path = "../../../../sdk/program", version = "=1.14.8" } +solana-address-lookup-table-program = { path = "../../../../programs/address-lookup-table", version = "=1.14.9" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.9" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/deprecated_loader/Cargo.toml b/programs/bpf/rust/deprecated_loader/Cargo.toml index a46a4c96e3ef0b..88cea66f6b4134 100644 --- a/programs/bpf/rust/deprecated_loader/Cargo.toml +++ b/programs/bpf/rust/deprecated_loader/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-deprecated-loader" -version = "1.14.8" +version = "1.14.9" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-deprecated-loader" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.8" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.9" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/dup_accounts/Cargo.toml b/programs/bpf/rust/dup_accounts/Cargo.toml index fd9033378d9a12..1598db95ec5ec1 100644 --- a/programs/bpf/rust/dup_accounts/Cargo.toml +++ b/programs/bpf/rust/dup_accounts/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-dup-accounts" -version = "1.14.8" +version = "1.14.9" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-dup-accounts" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.8" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.9" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/error_handling/Cargo.toml b/programs/bpf/rust/error_handling/Cargo.toml index 15e514cff049ab..7263c8a7e03563 100644 --- a/programs/bpf/rust/error_handling/Cargo.toml +++ b/programs/bpf/rust/error_handling/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-error-handling" -version = "1.14.8" +version = "1.14.9" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,7 +12,7 @@ edition = "2021" [dependencies] num-derive = "0.3" num-traits = "0.2" -solana-program = { path = "../../../../sdk/program", version = "=1.14.8" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.9" } thiserror = "1.0" [lib] diff --git a/programs/bpf/rust/external_spend/Cargo.toml b/programs/bpf/rust/external_spend/Cargo.toml index 414c74fe1fcc68..1c1b90b8fd0587 100644 --- a/programs/bpf/rust/external_spend/Cargo.toml +++ b/programs/bpf/rust/external_spend/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-external-spend" -version = "1.14.8" +version = "1.14.9" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-external-spend" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.8" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.9" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/finalize/Cargo.toml b/programs/bpf/rust/finalize/Cargo.toml index 5dd4b8c61401fa..8aceeef63a6aa1 100644 --- a/programs/bpf/rust/finalize/Cargo.toml +++ b/programs/bpf/rust/finalize/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-finalize" -version = "1.14.8" +version = "1.14.9" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-finalize" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.8" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.9" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/get_minimum_delegation/Cargo.toml b/programs/bpf/rust/get_minimum_delegation/Cargo.toml index 2d71ca72f4b1d3..3549204b2c34a9 100644 --- a/programs/bpf/rust/get_minimum_delegation/Cargo.toml +++ b/programs/bpf/rust/get_minimum_delegation/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-get-minimum-delegation" -version = "1.14.8" +version = "1.14.9" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-get-minimum-delegation" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.8" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.9" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/inner_instruction_alignment_check/Cargo.toml b/programs/bpf/rust/inner_instruction_alignment_check/Cargo.toml index ca45bb2f5cf513..446ba492d90bf3 100644 --- a/programs/bpf/rust/inner_instruction_alignment_check/Cargo.toml +++ b/programs/bpf/rust/inner_instruction_alignment_check/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-inner_instruction_alignment_check" -version = "1.14.8" +version = "1.14.9" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-inner_instruction_alignment_che edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.8" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.9" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/instruction_introspection/Cargo.toml b/programs/bpf/rust/instruction_introspection/Cargo.toml index 9ffe01371f8efe..255082ce85606d 100644 --- a/programs/bpf/rust/instruction_introspection/Cargo.toml +++ b/programs/bpf/rust/instruction_introspection/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-instruction-introspection" -version = "1.14.8" +version = "1.14.9" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-instruction-introspection" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.8" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.9" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/invoke/Cargo.toml b/programs/bpf/rust/invoke/Cargo.toml index 4b605e4d61ad9e..6fb7135af2c766 100644 --- a/programs/bpf/rust/invoke/Cargo.toml +++ b/programs/bpf/rust/invoke/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-invoke" -version = "1.14.8" +version = "1.14.9" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -15,7 +15,7 @@ program = [] [dependencies] solana-bpf-rust-invoked = { path = "../invoked", default-features = false } -solana-program = { path = "../../../../sdk/program", version = "=1.14.8" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.9" } [lib] crate-type = ["lib", "cdylib"] diff --git a/programs/bpf/rust/invoke_and_error/Cargo.toml b/programs/bpf/rust/invoke_and_error/Cargo.toml index 9b71aa987ce48b..16eb2ac99347b1 100644 --- a/programs/bpf/rust/invoke_and_error/Cargo.toml +++ b/programs/bpf/rust/invoke_and_error/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-invoke-and-error" -version = "1.14.8" +version = "1.14.9" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-invoke-and-error" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.8" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.9" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/invoke_and_ok/Cargo.toml b/programs/bpf/rust/invoke_and_ok/Cargo.toml index 1e1b751aa9dd7b..8da389d1ee8844 100644 --- a/programs/bpf/rust/invoke_and_ok/Cargo.toml +++ b/programs/bpf/rust/invoke_and_ok/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-invoke-and-ok" -version = "1.14.8" +version = "1.14.9" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-invoke-and-ok" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.8" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.9" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/invoke_and_return/Cargo.toml b/programs/bpf/rust/invoke_and_return/Cargo.toml index 3d8e2510abc86c..a682961780f159 100644 --- a/programs/bpf/rust/invoke_and_return/Cargo.toml +++ b/programs/bpf/rust/invoke_and_return/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-invoke-and-return" -version = "1.14.8" +version = "1.14.9" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-invoke-and-return" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.8" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.9" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/invoked/Cargo.toml b/programs/bpf/rust/invoked/Cargo.toml index fb156014222e58..363adbc803a074 100644 --- a/programs/bpf/rust/invoked/Cargo.toml +++ b/programs/bpf/rust/invoked/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-invoked" -version = "1.14.8" +version = "1.14.9" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,7 +14,7 @@ default = ["program"] program = [] [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.8" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.9" } [lib] crate-type = ["lib", "cdylib"] diff --git a/programs/bpf/rust/iter/Cargo.toml b/programs/bpf/rust/iter/Cargo.toml index 90fac0ce9dd244..1413c951cfcb42 100644 --- a/programs/bpf/rust/iter/Cargo.toml +++ b/programs/bpf/rust/iter/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-iter" -version = "1.14.8" +version = "1.14.9" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-iter" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.8" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.9" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/log_data/Cargo.toml b/programs/bpf/rust/log_data/Cargo.toml index 52f04bc5985e88..c623951c95747c 100644 --- a/programs/bpf/rust/log_data/Cargo.toml +++ b/programs/bpf/rust/log_data/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-log-data" -version = "1.14.8" +version = "1.14.9" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-log-data" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.8" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.9" } [features] default = ["program"] diff --git a/programs/bpf/rust/many_args/Cargo.toml b/programs/bpf/rust/many_args/Cargo.toml index ea4f4ae7598519..69a344c17dc9fe 100644 --- a/programs/bpf/rust/many_args/Cargo.toml +++ b/programs/bpf/rust/many_args/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-many-args" -version = "1.14.8" +version = "1.14.9" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ documentation = "https://docs.rs/solana-bpf-rust-many-args" edition = "2021" [dependencies] -solana-bpf-rust-many-args-dep = { path = "../many_args_dep", version = "=1.14.8" } -solana-program = { path = "../../../../sdk/program", version = "=1.14.8" } +solana-bpf-rust-many-args-dep = { path = "../many_args_dep", version = "=1.14.9" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.9" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/many_args_dep/Cargo.toml b/programs/bpf/rust/many_args_dep/Cargo.toml index 8d09f87035d597..9b4a976c83ecfc 100644 --- a/programs/bpf/rust/many_args_dep/Cargo.toml +++ b/programs/bpf/rust/many_args_dep/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-many-args-dep" -version = "1.14.8" +version = "1.14.9" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-many-args-dep" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.8" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.9" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/bpf/rust/mem/Cargo.toml b/programs/bpf/rust/mem/Cargo.toml index 2c4656a281da96..5b140b5474ca0a 100644 --- a/programs/bpf/rust/mem/Cargo.toml +++ b/programs/bpf/rust/mem/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-mem" -version = "1.14.8" +version = "1.14.9" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,12 +13,12 @@ edition = "2021" no-entrypoint = [] [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.8" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.9" } [dev-dependencies] -solana-program-runtime = { path = "../../../../program-runtime", version = "=1.14.8" } -solana-program-test = { path = "../../../../program-test", version = "=1.14.8" } -solana-sdk = { path = "../../../../sdk", version = "=1.14.8" } +solana-program-runtime = { path = "../../../../program-runtime", version = "=1.14.9" } +solana-program-test = { path = "../../../../program-test", version = "=1.14.9" } +solana-sdk = { path = "../../../../sdk", version = "=1.14.9" } [lib] crate-type = ["cdylib", "lib"] diff --git a/programs/bpf/rust/membuiltins/Cargo.toml b/programs/bpf/rust/membuiltins/Cargo.toml index d95a0e0b78d896..80d975f11d3730 100644 --- a/programs/bpf/rust/membuiltins/Cargo.toml +++ b/programs/bpf/rust/membuiltins/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-membuiltins" -version = "1.14.8" +version = "1.14.9" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ documentation = "https://docs.rs/solana-bpf-rust-mem" edition = "2021" [dependencies] -solana-bpf-rust-mem = { path = "../mem", version = "=1.14.8", features = [ "no-entrypoint" ] } -solana-program = { path = "../../../../sdk/program", version = "=1.14.8" } +solana-bpf-rust-mem = { path = "../mem", version = "=1.14.9", features = [ "no-entrypoint" ] } +solana-program = { path = "../../../../sdk/program", version = "=1.14.9" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/noop/Cargo.toml b/programs/bpf/rust/noop/Cargo.toml index 0f1fadfd60e5a6..d45830adb1ffb1 100644 --- a/programs/bpf/rust/noop/Cargo.toml +++ b/programs/bpf/rust/noop/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-noop" -version = "1.14.8" +version = "1.14.9" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-noop" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.8" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.9" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/panic/Cargo.toml b/programs/bpf/rust/panic/Cargo.toml index ff9a9f889067a4..cb1db6f2ba290c 100644 --- a/programs/bpf/rust/panic/Cargo.toml +++ b/programs/bpf/rust/panic/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-panic" -version = "1.14.8" +version = "1.14.9" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-panic" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.8" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.9" } [features] default = ["custom-panic"] diff --git a/programs/bpf/rust/param_passing/Cargo.toml b/programs/bpf/rust/param_passing/Cargo.toml index 0851fde6ba6691..12f9a5aceaf013 100644 --- a/programs/bpf/rust/param_passing/Cargo.toml +++ b/programs/bpf/rust/param_passing/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-param-passing" -version = "1.14.8" +version = "1.14.9" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ documentation = "https://docs.rs/solana-bpf-rust-param-passing" edition = "2021" [dependencies] -solana-bpf-rust-param-passing-dep = { path = "../param_passing_dep", version = "=1.14.8" } -solana-program = { path = "../../../../sdk/program", version = "=1.14.8" } +solana-bpf-rust-param-passing-dep = { path = "../param_passing_dep", version = "=1.14.9" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.9" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/param_passing_dep/Cargo.toml b/programs/bpf/rust/param_passing_dep/Cargo.toml index c8f58c2236a961..2984f3937167a2 100644 --- a/programs/bpf/rust/param_passing_dep/Cargo.toml +++ b/programs/bpf/rust/param_passing_dep/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-param-passing-dep" -version = "1.14.8" +version = "1.14.9" description = "Solana BPF program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-param-passing-dep" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.8" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.9" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/bpf/rust/rand/Cargo.toml b/programs/bpf/rust/rand/Cargo.toml index 1a0889b48d53ce..2273f8da4ba630 100644 --- a/programs/bpf/rust/rand/Cargo.toml +++ b/programs/bpf/rust/rand/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-rand" -version = "1.14.8" +version = "1.14.9" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,7 +12,7 @@ edition = "2021" [dependencies] getrandom = { version = "0.1.14", features = ["dummy"] } rand = "0.7" -solana-program = { path = "../../../../sdk/program", version = "=1.14.8" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.9" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/realloc/Cargo.toml b/programs/bpf/rust/realloc/Cargo.toml index cffd43d0c4cb9d..be65a95f5d1621 100644 --- a/programs/bpf/rust/realloc/Cargo.toml +++ b/programs/bpf/rust/realloc/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-realloc" -version = "1.14.8" +version = "1.14.9" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,7 +14,7 @@ default = ["program"] program = [] [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.8" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.9" } [lib] crate-type = ["lib", "cdylib"] diff --git a/programs/bpf/rust/realloc_invoke/Cargo.toml b/programs/bpf/rust/realloc_invoke/Cargo.toml index 9180769b46f885..2a872eb5d17c92 100644 --- a/programs/bpf/rust/realloc_invoke/Cargo.toml +++ b/programs/bpf/rust/realloc_invoke/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-realloc-invoke" -version = "1.14.8" +version = "1.14.9" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,8 +14,8 @@ default = ["program"] program = [] [dependencies] -solana-bpf-rust-realloc = { path = "../realloc", version = "=1.14.8", default-features = false } -solana-program = { path = "../../../../sdk/program", version = "=1.14.8" } +solana-bpf-rust-realloc = { path = "../realloc", version = "=1.14.9", default-features = false } +solana-program = { path = "../../../../sdk/program", version = "=1.14.9" } [lib] crate-type = ["lib", "cdylib"] diff --git a/programs/bpf/rust/ro_account_modify/Cargo.toml b/programs/bpf/rust/ro_account_modify/Cargo.toml index 63adf785f3cdc1..85b0ec8b50b994 100644 --- a/programs/bpf/rust/ro_account_modify/Cargo.toml +++ b/programs/bpf/rust/ro_account_modify/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-ro-account_modify" -version = "1.14.8" +version = "1.14.9" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-ro-modify" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.8" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.9" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/ro_modify/Cargo.toml b/programs/bpf/rust/ro_modify/Cargo.toml index 8a6d9efb50d89a..4e178b2b894742 100644 --- a/programs/bpf/rust/ro_modify/Cargo.toml +++ b/programs/bpf/rust/ro_modify/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-ro-modify" -version = "1.14.8" +version = "1.14.9" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-ro-modify" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.8" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.9" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/sanity/Cargo.toml b/programs/bpf/rust/sanity/Cargo.toml index 1404629d3da6c6..05e499bb3ab0f5 100644 --- a/programs/bpf/rust/sanity/Cargo.toml +++ b/programs/bpf/rust/sanity/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-sanity" -version = "1.14.8" +version = "1.14.9" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,12 +13,12 @@ edition = "2021" test-bpf = [] [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.8" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.9" } [dev-dependencies] -solana-program-runtime = { path = "../../../../program-runtime", version = "=1.14.8" } -solana-program-test = { path = "../../../../program-test", version = "=1.14.8" } -solana-sdk = { path = "../../../../sdk", version = "=1.14.8" } +solana-program-runtime = { path = "../../../../program-runtime", version = "=1.14.9" } +solana-program-test = { path = "../../../../program-test", version = "=1.14.9" } +solana-sdk = { path = "../../../../sdk", version = "=1.14.9" } [lib] crate-type = ["cdylib", "lib"] diff --git a/programs/bpf/rust/secp256k1_recover/Cargo.toml b/programs/bpf/rust/secp256k1_recover/Cargo.toml index d91d9db32b6aea..312f3da5a147b0 100644 --- a/programs/bpf/rust/secp256k1_recover/Cargo.toml +++ b/programs/bpf/rust/secp256k1_recover/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-secp256k1-recover" -version = "1.14.8" +version = "1.14.9" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -11,7 +11,7 @@ edition = "2021" [dependencies] libsecp256k1 = { version = "0.7.0", default-features = false } -solana-program = { path = "../../../../sdk/program", version = "=1.14.8" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.9" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/sha/Cargo.toml b/programs/bpf/rust/sha/Cargo.toml index c1b618bb2ed7ff..7909c943d72b3d 100644 --- a/programs/bpf/rust/sha/Cargo.toml +++ b/programs/bpf/rust/sha/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-sha" -version = "1.14.8" +version = "1.14.9" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -11,7 +11,7 @@ edition = "2021" [dependencies] blake3 = "1.0.0" -solana-program = { path = "../../../../sdk/program", version = "=1.14.8" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.9" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/sibling_inner_instruction/Cargo.toml b/programs/bpf/rust/sibling_inner_instruction/Cargo.toml index 045c280743a97f..82967916a19454 100644 --- a/programs/bpf/rust/sibling_inner_instruction/Cargo.toml +++ b/programs/bpf/rust/sibling_inner_instruction/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-sibling_inner-instructions" -version = "1.14.8" +version = "1.14.9" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-log-data" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.8" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.9" } [features] default = ["program"] diff --git a/programs/bpf/rust/sibling_instruction/Cargo.toml b/programs/bpf/rust/sibling_instruction/Cargo.toml index be69bb0b690ca1..b153872135ded2 100644 --- a/programs/bpf/rust/sibling_instruction/Cargo.toml +++ b/programs/bpf/rust/sibling_instruction/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-sibling-instructions" -version = "1.14.8" +version = "1.14.9" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-log-data" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.8" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.9" } [features] default = ["program"] diff --git a/programs/bpf/rust/simulation/Cargo.toml b/programs/bpf/rust/simulation/Cargo.toml index 78e251af35b5e9..bc164decb0816b 100644 --- a/programs/bpf/rust/simulation/Cargo.toml +++ b/programs/bpf/rust/simulation/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-simulation" -version = "1.14.8" +version = "1.14.9" description = "Solana BPF Program Simulation Differences" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,13 +13,13 @@ edition = "2021" test-bpf = [] [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.8" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.9" } [dev-dependencies] -solana-logger = { path = "../../../../logger", version = "=1.14.8" } -solana-program-test = { path = "../../../../program-test", version = "=1.14.8" } -solana-sdk = { path = "../../../../sdk", version = "=1.14.8" } -solana-validator = { path = "../../../../validator", version = "=1.14.8" } +solana-logger = { path = "../../../../logger", version = "=1.14.9" } +solana-program-test = { path = "../../../../program-test", version = "=1.14.9" } +solana-sdk = { path = "../../../../sdk", version = "=1.14.9" } +solana-validator = { path = "../../../../validator", version = "=1.14.9" } [lib] crate-type = ["cdylib", "lib"] diff --git a/programs/bpf/rust/spoof1/Cargo.toml b/programs/bpf/rust/spoof1/Cargo.toml index f2152aebf75e1e..f0babcb6437a13 100644 --- a/programs/bpf/rust/spoof1/Cargo.toml +++ b/programs/bpf/rust/spoof1/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-spoof1" -version = "1.14.8" +version = "1.14.9" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-spoof1" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.8" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.9" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/spoof1_system/Cargo.toml b/programs/bpf/rust/spoof1_system/Cargo.toml index 7e38508987445e..62232427a87ae1 100644 --- a/programs/bpf/rust/spoof1_system/Cargo.toml +++ b/programs/bpf/rust/spoof1_system/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-spoof1-system" -version = "1.14.8" +version = "1.14.9" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-spoof1-system" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.8" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.9" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/sysvar/Cargo.toml b/programs/bpf/rust/sysvar/Cargo.toml index 7fc888722561f3..5e9b379c58b81b 100644 --- a/programs/bpf/rust/sysvar/Cargo.toml +++ b/programs/bpf/rust/sysvar/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-sysvar" -version = "1.14.8" +version = "1.14.9" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,12 +10,12 @@ documentation = "https://docs.rs/solana-bpf-rust-sysvar" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.8" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.9" } [dev-dependencies] -solana-program-runtime = { path = "../../../../program-runtime", version = "=1.14.8" } -solana-program-test = { path = "../../../../program-test", version = "=1.14.8" } -solana-sdk = { path = "../../../../sdk", version = "=1.14.8" } +solana-program-runtime = { path = "../../../../program-runtime", version = "=1.14.9" } +solana-program-test = { path = "../../../../program-test", version = "=1.14.9" } +solana-sdk = { path = "../../../../sdk", version = "=1.14.9" } [lib] crate-type = ["cdylib", "lib"] diff --git a/programs/bpf/rust/upgradeable/Cargo.toml b/programs/bpf/rust/upgradeable/Cargo.toml index 2b7538fcf2907a..360457385e820b 100644 --- a/programs/bpf/rust/upgradeable/Cargo.toml +++ b/programs/bpf/rust/upgradeable/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-upgradeable" -version = "1.14.8" +version = "1.14.9" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-upgradeable" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.8" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.9" } [lib] name = "solana_bpf_rust_upgradeable" diff --git a/programs/bpf/rust/upgraded/Cargo.toml b/programs/bpf/rust/upgraded/Cargo.toml index db32c053cacdf2..4dea4c45a503ad 100644 --- a/programs/bpf/rust/upgraded/Cargo.toml +++ b/programs/bpf/rust/upgraded/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-upgraded" -version = "1.14.8" +version = "1.14.9" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-upgraded" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.8" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.9" } [lib] name = "solana_bpf_rust_upgraded" diff --git a/programs/bpf_loader/Cargo.toml b/programs/bpf_loader/Cargo.toml index c6d925d9ef0e8b..2f0756f6d2b306 100644 --- a/programs/bpf_loader/Cargo.toml +++ b/programs/bpf_loader/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-loader-program" -version = "1.14.8" +version = "1.14.9" description = "Solana BPF loader" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,17 +14,17 @@ bincode = "1.3.3" byteorder = "1.4.3" libsecp256k1 = "0.6.0" log = "0.4.17" -solana-measure = { path = "../../measure", version = "=1.14.8" } -solana-metrics = { path = "../../metrics", version = "=1.14.8" } -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.8" } -solana-sdk = { path = "../../sdk", version = "=1.14.8" } -solana-zk-token-sdk = { path = "../../zk-token-sdk", version = "=1.14.8" } +solana-measure = { path = "../../measure", version = "=1.14.9" } +solana-metrics = { path = "../../metrics", version = "=1.14.9" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.9" } +solana-sdk = { path = "../../sdk", version = "=1.14.9" } +solana-zk-token-sdk = { path = "../../zk-token-sdk", version = "=1.14.9" } solana_rbpf = "=0.2.31" thiserror = "1.0" [dev-dependencies] rand = "0.7.3" -solana-runtime = { path = "../../runtime", version = "=1.14.8" } +solana-runtime = { path = "../../runtime", version = "=1.14.9" } [lib] crate-type = ["lib"] diff --git a/programs/bpf_loader/gen-syscall-list/Cargo.toml b/programs/bpf_loader/gen-syscall-list/Cargo.toml index aa0aeb17e90e67..3027aa0198ac3b 100644 --- a/programs/bpf_loader/gen-syscall-list/Cargo.toml +++ b/programs/bpf_loader/gen-syscall-list/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "gen-syscall-list" -version = "1.14.8" +version = "1.14.9" edition = "2021" license = "Apache-2.0" publish = false diff --git a/programs/compute-budget/Cargo.toml b/programs/compute-budget/Cargo.toml index f184adbadf7e45..88ace43d1dce28 100644 --- a/programs/compute-budget/Cargo.toml +++ b/programs/compute-budget/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "solana-compute-budget-program" description = "Solana Compute Budget program" -version = "1.14.8" +version = "1.14.9" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-compute-budget-program" repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ license = "Apache-2.0" edition = "2021" [dependencies] -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.8" } -solana-sdk = { path = "../../sdk", version = "=1.14.8" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.9" } +solana-sdk = { path = "../../sdk", version = "=1.14.9" } [lib] crate-type = ["lib"] diff --git a/programs/config/Cargo.toml b/programs/config/Cargo.toml index 799db6f807029c..22527aeccebe47 100644 --- a/programs/config/Cargo.toml +++ b/programs/config/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-config-program" -version = "1.14.8" +version = "1.14.9" description = "Solana Config program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,11 +14,11 @@ bincode = "1.3.3" chrono = { version = "0.4.11", features = ["serde"] } serde = "1.0.138" serde_derive = "1.0.103" -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.8" } -solana-sdk = { path = "../../sdk", version = "=1.14.8" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.9" } +solana-sdk = { path = "../../sdk", version = "=1.14.9" } [dev-dependencies] -solana-logger = { path = "../../logger", version = "=1.14.8" } +solana-logger = { path = "../../logger", version = "=1.14.9" } [lib] crate-type = ["lib"] diff --git a/programs/ed25519-tests/Cargo.toml b/programs/ed25519-tests/Cargo.toml index 6fc316dfaddecf..be7199b38d7337 100644 --- a/programs/ed25519-tests/Cargo.toml +++ b/programs/ed25519-tests/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-ed25519-program-tests" -version = "1.14.8" +version = "1.14.9" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" @@ -12,8 +12,8 @@ publish = false assert_matches = "1.5.0" ed25519-dalek = "=1.0.1" rand = "0.7.0" -solana-program-test = { path = "../../program-test", version = "=1.14.8" } -solana-sdk = { path = "../../sdk", version = "=1.14.8" } +solana-program-test = { path = "../../program-test", version = "=1.14.9" } +solana-sdk = { path = "../../sdk", version = "=1.14.9" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/stake/Cargo.toml b/programs/stake/Cargo.toml index 63361085c14f61..dea777c7edecfc 100644 --- a/programs/stake/Cargo.toml +++ b/programs/stake/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-stake-program" -version = "1.14.8" +version = "1.14.9" description = "Solana Stake program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -16,19 +16,19 @@ num-derive = "0.3" num-traits = "0.2" serde = "1.0.138" serde_derive = "1.0.103" -solana-config-program = { path = "../config", version = "=1.14.8" } -solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.8" } -solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.8" } -solana-metrics = { path = "../../metrics", version = "=1.14.8" } -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.8" } -solana-sdk = { path = "../../sdk", version = "=1.14.8" } -solana-vote-program = { path = "../vote", version = "=1.14.8" } +solana-config-program = { path = "../config", version = "=1.14.9" } +solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.9" } +solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.9" } +solana-metrics = { path = "../../metrics", version = "=1.14.9" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.9" } +solana-sdk = { path = "../../sdk", version = "=1.14.9" } +solana-vote-program = { path = "../vote", version = "=1.14.9" } thiserror = "1.0" [dev-dependencies] assert_matches = "1.5.0" proptest = "1.0" -solana-logger = { path = "../../logger", version = "=1.14.8" } +solana-logger = { path = "../../logger", version = "=1.14.9" } test-case = "2.1.0" [build-dependencies] diff --git a/programs/vote/Cargo.toml b/programs/vote/Cargo.toml index 0a38b8e19094ae..fc6081d5bcb711 100644 --- a/programs/vote/Cargo.toml +++ b/programs/vote/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-vote-program" -version = "1.14.8" +version = "1.14.9" description = "Solana Vote program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -16,17 +16,17 @@ num-derive = "0.3" num-traits = "0.2" serde = "1.0.138" serde_derive = "1.0.103" -solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.8" } -solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.8" } -solana-metrics = { path = "../../metrics", version = "=1.14.8" } -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.8" } -solana-sdk = { path = "../../sdk", version = "=1.14.8" } +solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.9" } +solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.9" } +solana-metrics = { path = "../../metrics", version = "=1.14.9" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.9" } +solana-sdk = { path = "../../sdk", version = "=1.14.9" } thiserror = "1.0" [dev-dependencies] itertools = "0.10.3" rand = "0.7.0" -solana-logger = { path = "../../logger", version = "=1.14.8" } +solana-logger = { path = "../../logger", version = "=1.14.9" } [build-dependencies] rustc_version = "0.4" diff --git a/programs/zk-token-proof/Cargo.toml b/programs/zk-token-proof/Cargo.toml index eb0144b7852bd6..2db3a6faf27323 100644 --- a/programs/zk-token-proof/Cargo.toml +++ b/programs/zk-token-proof/Cargo.toml @@ -3,7 +3,7 @@ name = "solana-zk-token-proof-program" description = "Solana Zk Token Proof Program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" -version = "1.14.8" +version = "1.14.9" license = "Apache-2.0" edition = "2021" @@ -12,6 +12,6 @@ bytemuck = { version = "1.11.0", features = ["derive"] } getrandom = { version = "0.1", features = ["dummy"] } num-derive = "0.3" num-traits = "0.2" -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.8" } -solana-sdk = { path = "../../sdk", version = "=1.14.8" } -solana-zk-token-sdk = { path = "../../zk-token-sdk", version = "=1.14.8" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.9" } +solana-sdk = { path = "../../sdk", version = "=1.14.9" } +solana-zk-token-sdk = { path = "../../zk-token-sdk", version = "=1.14.9" } diff --git a/rayon-threadlimit/Cargo.toml b/rayon-threadlimit/Cargo.toml index e57adebf1db1c2..206740458bb767 100644 --- a/rayon-threadlimit/Cargo.toml +++ b/rayon-threadlimit/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-rayon-threadlimit" -version = "1.14.8" +version = "1.14.9" description = "solana-rayon-threadlimit" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-rayon-threadlimit" diff --git a/rbpf-cli/Cargo.toml b/rbpf-cli/Cargo.toml index a9a7e2eb851fd1..8c525001c1c580 100644 --- a/rbpf-cli/Cargo.toml +++ b/rbpf-cli/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "rbpf-cli" -version = "1.14.8" +version = "1.14.9" description = "CLI to test and analyze eBPF programs" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/rbpf" @@ -13,8 +13,8 @@ publish = false clap = { version = "3.1.5", features = ["cargo"] } serde = "1.0.138" serde_json = "1.0.81" -solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.8" } -solana-logger = { path = "../logger", version = "=1.14.8" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.8" } -solana-sdk = { path = "../sdk", version = "=1.14.8" } +solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.9" } +solana-logger = { path = "../logger", version = "=1.14.9" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.9" } +solana-sdk = { path = "../sdk", version = "=1.14.9" } solana_rbpf = "=0.2.31" diff --git a/remote-wallet/Cargo.toml b/remote-wallet/Cargo.toml index c67ce5cdb41093..47e9855235c0f9 100644 --- a/remote-wallet/Cargo.toml +++ b/remote-wallet/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-remote-wallet" description = "Blockchain, Rebuilt for Scale" -version = "1.14.8" +version = "1.14.9" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -19,7 +19,7 @@ num-traits = { version = "0.2" } parking_lot = "0.12" qstring = "0.7.2" semver = "1.0" -solana-sdk = { path = "../sdk", version = "=1.14.8" } +solana-sdk = { path = "../sdk", version = "=1.14.9" } thiserror = "1.0" uriparse = "0.6.4" diff --git a/rpc-test/Cargo.toml b/rpc-test/Cargo.toml index 154631cff54d0f..24b5fd7cc89c76 100644 --- a/rpc-test/Cargo.toml +++ b/rpc-test/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-rpc-test" -version = "1.14.8" +version = "1.14.9" description = "Solana RPC Test" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -19,17 +19,17 @@ log = "0.4.17" reqwest = { version = "0.11.11", default-features = false, features = ["blocking", "brotli", "deflate", "gzip", "rustls-tls", "json"] } serde = "1.0.138" serde_json = "1.0.81" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.8" } -solana-client = { path = "../client", version = "=1.14.8" } -solana-rpc = { path = "../rpc", version = "=1.14.8" } -solana-sdk = { path = "../sdk", version = "=1.14.8" } -solana-streamer = { path = "../streamer", version = "=1.14.8" } -solana-test-validator = { path = "../test-validator", version = "=1.14.8" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.8" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.9" } +solana-client = { path = "../client", version = "=1.14.9" } +solana-rpc = { path = "../rpc", version = "=1.14.9" } +solana-sdk = { path = "../sdk", version = "=1.14.9" } +solana-streamer = { path = "../streamer", version = "=1.14.9" } +solana-test-validator = { path = "../test-validator", version = "=1.14.9" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.9" } tokio = { version = "~1.14.1", features = ["full"] } [dev-dependencies] -solana-logger = { path = "../logger", version = "=1.14.8" } +solana-logger = { path = "../logger", version = "=1.14.9" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/rpc/Cargo.toml b/rpc/Cargo.toml index 60c58378f09fce..d40f07a38cb13f 100644 --- a/rpc/Cargo.toml +++ b/rpc/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-rpc" -version = "1.14.8" +version = "1.14.9" description = "Solana RPC" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -29,26 +29,26 @@ serde = "1.0.138" serde_derive = "1.0.103" serde_json = "1.0.81" soketto = "0.7" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.8" } -solana-client = { path = "../client", version = "=1.14.8" } -solana-entry = { path = "../entry", version = "=1.14.8" } -solana-faucet = { path = "../faucet", version = "=1.14.8" } -solana-gossip = { path = "../gossip", version = "=1.14.8" } -solana-ledger = { path = "../ledger", version = "=1.14.8" } -solana-measure = { path = "../measure", version = "=1.14.8" } -solana-metrics = { path = "../metrics", version = "=1.14.8" } -solana-perf = { path = "../perf", version = "=1.14.8" } -solana-poh = { path = "../poh", version = "=1.14.8" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.8" } -solana-runtime = { path = "../runtime", version = "=1.14.8" } -solana-sdk = { path = "../sdk", version = "=1.14.8" } -solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.8" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.8" } -solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.8" } -solana-streamer = { path = "../streamer", version = "=1.14.8" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.8" } -solana-version = { path = "../version", version = "=1.14.8" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.8" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.9" } +solana-client = { path = "../client", version = "=1.14.9" } +solana-entry = { path = "../entry", version = "=1.14.9" } +solana-faucet = { path = "../faucet", version = "=1.14.9" } +solana-gossip = { path = "../gossip", version = "=1.14.9" } +solana-ledger = { path = "../ledger", version = "=1.14.9" } +solana-measure = { path = "../measure", version = "=1.14.9" } +solana-metrics = { path = "../metrics", version = "=1.14.9" } +solana-perf = { path = "../perf", version = "=1.14.9" } +solana-poh = { path = "../poh", version = "=1.14.9" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.9" } +solana-runtime = { path = "../runtime", version = "=1.14.9" } +solana-sdk = { path = "../sdk", version = "=1.14.9" } +solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.9" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.9" } +solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.9" } +solana-streamer = { path = "../streamer", version = "=1.14.9" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.9" } +solana-version = { path = "../version", version = "=1.14.9" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.9" } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } spl-token-2022 = { version = "=0.4.2", features = ["no-entrypoint"] } stream-cancel = "0.8.1" @@ -58,9 +58,9 @@ tokio-util = { version = "0.6", features = ["codec", "compat"] } [dev-dependencies] serial_test = "0.8.0" -solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.8" } -solana-net-utils = { path = "../net-utils", version = "=1.14.8" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.8" } +solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.9" } +solana-net-utils = { path = "../net-utils", version = "=1.14.9" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.9" } symlink = "0.1.0" [lib] diff --git a/runtime/Cargo.toml b/runtime/Cargo.toml index 7d642fddfc4234..6504fb446a3292 100644 --- a/runtime/Cargo.toml +++ b/runtime/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-runtime" -version = "1.14.8" +version = "1.14.9" description = "Solana runtime" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -39,21 +39,21 @@ rayon = "1.5.3" regex = "1.5.6" serde = { version = "1.0.138", features = ["rc"] } serde_derive = "1.0.103" -solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.8" } -solana-bucket-map = { path = "../bucket_map", version = "=1.14.8" } -solana-compute-budget-program = { path = "../programs/compute-budget", version = "=1.14.8" } -solana-config-program = { path = "../programs/config", version = "=1.14.8" } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.8" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.8" } -solana-measure = { path = "../measure", version = "=1.14.8" } -solana-metrics = { path = "../metrics", version = "=1.14.8" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.8" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.8" } -solana-sdk = { path = "../sdk", version = "=1.14.8" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.8" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.8" } -solana-zk-token-proof-program = { path = "../programs/zk-token-proof", version = "=1.14.8" } -solana-zk-token-sdk = { path = "../zk-token-sdk", version = "=1.14.8" } +solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.9" } +solana-bucket-map = { path = "../bucket_map", version = "=1.14.9" } +solana-compute-budget-program = { path = "../programs/compute-budget", version = "=1.14.9" } +solana-config-program = { path = "../programs/config", version = "=1.14.9" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.9" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.9" } +solana-measure = { path = "../measure", version = "=1.14.9" } +solana-metrics = { path = "../metrics", version = "=1.14.9" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.9" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.9" } +solana-sdk = { path = "../sdk", version = "=1.14.9" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.9" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.9" } +solana-zk-token-proof-program = { path = "../programs/zk-token-proof", version = "=1.14.9" } +solana-zk-token-sdk = { path = "../zk-token-sdk", version = "=1.14.9" } strum = { version = "0.24", features = ["derive"] } strum_macros = "0.24" symlink = "0.1.0" @@ -71,7 +71,7 @@ assert_matches = "1.5.0" ed25519-dalek = "=1.0.1" libsecp256k1 = "0.6.0" rand_chacha = "0.2.2" -solana-logger = { path = "../logger", version = "=1.14.8" } +solana-logger = { path = "../logger", version = "=1.14.9" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/runtime/store-tool/Cargo.toml b/runtime/store-tool/Cargo.toml index 29706258591144..fae601194ac84b 100644 --- a/runtime/store-tool/Cargo.toml +++ b/runtime/store-tool/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-store-tool" description = "Tool to inspect append vecs" -version = "1.14.8" +version = "1.14.9" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -12,9 +12,9 @@ publish = false [dependencies] clap = "2.33.1" log = { version = "0.4.17" } -solana-logger = { path = "../../logger", version = "=1.14.8" } -solana-runtime = { path = "..", version = "=1.14.8" } -solana-version = { path = "../../version", version = "=1.14.8" } +solana-logger = { path = "../../logger", version = "=1.14.9" } +solana-runtime = { path = "..", version = "=1.14.9" } +solana-version = { path = "../../version", version = "=1.14.9" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/sdk/Cargo.toml b/sdk/Cargo.toml index 53b66c85439940..163ff173480877 100644 --- a/sdk/Cargo.toml +++ b/sdk/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-sdk" -version = "1.14.8" +version = "1.14.9" description = "Solana SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -71,11 +71,11 @@ serde_derive = "1.0.103" serde_json = { version = "1.0.81", optional = true } sha2 = "0.10.2" sha3 = { version = "0.10.1", optional = true } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.8" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.8" } -solana-logger = { path = "../logger", version = "=1.14.8", optional = true } -solana-program = { path = "program", version = "=1.14.8" } -solana-sdk-macro = { path = "macro", version = "=1.14.8" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.9" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.9" } +solana-logger = { path = "../logger", version = "=1.14.9", optional = true } +solana-program = { path = "program", version = "=1.14.9" } +solana-sdk-macro = { path = "macro", version = "=1.14.9" } thiserror = "1.0" uriparse = "0.6.4" wasm-bindgen = "0.2" diff --git a/sdk/cargo-build-bpf/Cargo.toml b/sdk/cargo-build-bpf/Cargo.toml index 75d38fb6099370..1054d41d5c64f6 100644 --- a/sdk/cargo-build-bpf/Cargo.toml +++ b/sdk/cargo-build-bpf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-cargo-build-bpf" -version = "1.14.8" +version = "1.14.9" description = "Compile a local package and all of its dependencies using the Solana SBF SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,7 +12,7 @@ publish = false [dependencies] cargo_metadata = "0.15.0" clap = { version = "3.1.5", features = ["cargo", "env"] } -solana-sdk = { path = "..", version = "=1.14.8" } +solana-sdk = { path = "..", version = "=1.14.9" } [features] program = [] diff --git a/sdk/cargo-build-sbf/Cargo.toml b/sdk/cargo-build-sbf/Cargo.toml index 9c04a63deeb1b7..2e7d9a2e083e82 100644 --- a/sdk/cargo-build-sbf/Cargo.toml +++ b/sdk/cargo-build-sbf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-cargo-build-sbf" -version = "1.14.8" +version = "1.14.9" description = "Compile a local package and all of its dependencies using the Solana SBF SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -15,9 +15,9 @@ cargo_metadata = "0.15.0" clap = { version = "3.1.5", features = ["cargo", "env"] } log = { version = "0.4.14", features = ["std"] } regex = "1.5.6" -solana-download-utils = { path = "../../download-utils", version = "=1.14.8" } -solana-logger = { path = "../../logger", version = "=1.14.8" } -solana-sdk = { path = "..", version = "=1.14.8" } +solana-download-utils = { path = "../../download-utils", version = "=1.14.9" } +solana-logger = { path = "../../logger", version = "=1.14.9" } +solana-sdk = { path = "..", version = "=1.14.9" } tar = "0.4.38" [dev-dependencies] diff --git a/sdk/cargo-build-sbf/tests/crates/fail/Cargo.toml b/sdk/cargo-build-sbf/tests/crates/fail/Cargo.toml index 300e6e70326d23..c06bc6b0a0afb4 100644 --- a/sdk/cargo-build-sbf/tests/crates/fail/Cargo.toml +++ b/sdk/cargo-build-sbf/tests/crates/fail/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "fail" -version = "1.14.8" +version = "1.14.9" description = "Solana SBF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ edition = "2021" publish = false [dependencies] -solana-program = { path = "../../../../program", version = "=1.14.8" } +solana-program = { path = "../../../../program", version = "=1.14.9" } [lib] crate-type = ["cdylib"] diff --git a/sdk/cargo-build-sbf/tests/crates/noop/Cargo.toml b/sdk/cargo-build-sbf/tests/crates/noop/Cargo.toml index 5efaf57d9fa080..4dead95f001a43 100644 --- a/sdk/cargo-build-sbf/tests/crates/noop/Cargo.toml +++ b/sdk/cargo-build-sbf/tests/crates/noop/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "noop" -version = "1.14.8" +version = "1.14.9" description = "Solana SBF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ edition = "2021" publish = false [dependencies] -solana-program = { path = "../../../../program", version = "=1.14.8" } +solana-program = { path = "../../../../program", version = "=1.14.9" } [lib] crate-type = ["cdylib"] diff --git a/sdk/cargo-test-bpf/Cargo.toml b/sdk/cargo-test-bpf/Cargo.toml index 22da737b29832c..71e323e3637b6b 100644 --- a/sdk/cargo-test-bpf/Cargo.toml +++ b/sdk/cargo-test-bpf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-cargo-test-bpf" -version = "1.14.8" +version = "1.14.9" description = "Execute all unit and integration tests after building with the Solana SBF SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/sdk/cargo-test-sbf/Cargo.toml b/sdk/cargo-test-sbf/Cargo.toml index 610d594ba5d4fb..0f6acbadd05687 100644 --- a/sdk/cargo-test-sbf/Cargo.toml +++ b/sdk/cargo-test-sbf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-cargo-test-sbf" -version = "1.14.8" +version = "1.14.9" description = "Execute all unit and integration tests after building with the Solana SBF SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/sdk/gen-headers/Cargo.toml b/sdk/gen-headers/Cargo.toml index 26d44d8153b2a5..d93fbbaee4cfcf 100644 --- a/sdk/gen-headers/Cargo.toml +++ b/sdk/gen-headers/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "gen-headers" -version = "1.14.8" +version = "1.14.9" edition = "2021" license = "Apache-2.0" publish = false diff --git a/sdk/macro/Cargo.toml b/sdk/macro/Cargo.toml index 9e2cf88b053f51..8797e13e1e23ae 100644 --- a/sdk/macro/Cargo.toml +++ b/sdk/macro/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-sdk-macro" -version = "1.14.8" +version = "1.14.9" description = "Solana SDK Macro" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/sdk/program/Cargo.toml b/sdk/program/Cargo.toml index 71326ddd80789c..f6056aa95720fb 100644 --- a/sdk/program/Cargo.toml +++ b/sdk/program/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-program" -version = "1.14.8" +version = "1.14.9" description = "Solana Program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -31,9 +31,9 @@ serde_derive = "1.0" serde_json = "1.0" sha2 = "0.10.0" sha3 = "0.10.0" -solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.8" } -solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.8" } -solana-sdk-macro = { path = "../macro", version = "=1.14.8" } +solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.9" } +solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.9" } +solana-sdk-macro = { path = "../macro", version = "=1.14.9" } thiserror = "1.0" [target.'cfg(not(target_os = "solana"))'.dependencies] @@ -50,7 +50,7 @@ wasm-bindgen = "0.2" zeroize = { version = "1.3", default-features = true, features = ["zeroize_derive"] } [target.'cfg(not(target_os = "solana"))'.dev-dependencies] -solana-logger = { path = "../../logger", version = "=1.14.8" } +solana-logger = { path = "../../logger", version = "=1.14.9" } [target.'cfg(target_arch = "wasm32")'.dependencies] console_error_panic_hook = "0.1.7" diff --git a/send-transaction-service/Cargo.toml b/send-transaction-service/Cargo.toml index d551ecb8562a2a..51d69faf8ad40e 100644 --- a/send-transaction-service/Cargo.toml +++ b/send-transaction-service/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-send-transaction-service" -version = "1.14.8" +version = "1.14.9" description = "Solana send transaction service" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,14 +12,14 @@ edition = "2021" [dependencies] crossbeam-channel = "0.5" log = "0.4.17" -solana-client = { path = "../client", version = "=1.14.8" } -solana-measure = { path = "../measure", version = "=1.14.8" } -solana-metrics = { path = "../metrics", version = "=1.14.8" } -solana-runtime = { path = "../runtime", version = "=1.14.8" } -solana-sdk = { path = "../sdk", version = "=1.14.8" } +solana-client = { path = "../client", version = "=1.14.9" } +solana-measure = { path = "../measure", version = "=1.14.9" } +solana-metrics = { path = "../metrics", version = "=1.14.9" } +solana-runtime = { path = "../runtime", version = "=1.14.9" } +solana-sdk = { path = "../sdk", version = "=1.14.9" } [dev-dependencies] -solana-logger = { path = "../logger", version = "=1.14.8" } +solana-logger = { path = "../logger", version = "=1.14.9" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/stake-accounts/Cargo.toml b/stake-accounts/Cargo.toml index 65a577af9ac8c3..f3164748259250 100644 --- a/stake-accounts/Cargo.toml +++ b/stake-accounts/Cargo.toml @@ -3,7 +3,7 @@ name = "solana-stake-accounts" description = "Blockchain, Rebuilt for Scale" authors = ["Solana Maintainers "] edition = "2021" -version = "1.14.8" +version = "1.14.9" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -11,15 +11,15 @@ documentation = "https://docs.rs/solana-stake-accounts" [dependencies] clap = "2.33.1" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.8" } -solana-cli-config = { path = "../cli-config", version = "=1.14.8" } -solana-client = { path = "../client", version = "=1.14.8" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.8" } -solana-sdk = { path = "../sdk", version = "=1.14.8" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.8" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.9" } +solana-cli-config = { path = "../cli-config", version = "=1.14.9" } +solana-client = { path = "../client", version = "=1.14.9" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.9" } +solana-sdk = { path = "../sdk", version = "=1.14.9" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.9" } [dev-dependencies] -solana-runtime = { path = "../runtime", version = "=1.14.8" } +solana-runtime = { path = "../runtime", version = "=1.14.9" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/storage-bigtable/Cargo.toml b/storage-bigtable/Cargo.toml index 9e73c90247e1df..5e649a32f2a203 100644 --- a/storage-bigtable/Cargo.toml +++ b/storage-bigtable/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-storage-bigtable" -version = "1.14.8" +version = "1.14.9" description = "Solana Storage BigTable" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -27,10 +27,10 @@ prost-types = "0.11.0" serde = "1.0.138" serde_derive = "1.0.103" smpl_jwt = "0.7.1" -solana-metrics = { path = "../metrics", version = "=1.14.8" } -solana-sdk = { path = "../sdk", version = "=1.14.8" } -solana-storage-proto = { path = "../storage-proto", version = "=1.14.8" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.8" } +solana-metrics = { path = "../metrics", version = "=1.14.9" } +solana-sdk = { path = "../sdk", version = "=1.14.9" } +solana-storage-proto = { path = "../storage-proto", version = "=1.14.9" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.9" } thiserror = "1.0" tokio = "1" tonic = { version = "0.8.0", features = ["tls", "transport"] } diff --git a/storage-bigtable/build-proto/Cargo.lock b/storage-bigtable/build-proto/Cargo.lock index 3ae47d5158c675..277c0262aa6ee9 100644 --- a/storage-bigtable/build-proto/Cargo.lock +++ b/storage-bigtable/build-proto/Cargo.lock @@ -219,7 +219,7 @@ dependencies = [ [[package]] name = "proto" -version = "1.14.8" +version = "1.14.9" dependencies = [ "protobuf-src", "tonic-build", diff --git a/storage-bigtable/build-proto/Cargo.toml b/storage-bigtable/build-proto/Cargo.toml index 8627995232907a..a9a4acd9121964 100644 --- a/storage-bigtable/build-proto/Cargo.toml +++ b/storage-bigtable/build-proto/Cargo.toml @@ -7,7 +7,7 @@ license = "Apache-2.0" name = "proto" publish = false repository = "https://github.com/solana-labs/solana" -version = "1.14.8" +version = "1.14.9" [workspace] diff --git a/storage-proto/Cargo.toml b/storage-proto/Cargo.toml index a7c0f4e7fc6773..ee2e168cf982e4 100644 --- a/storage-proto/Cargo.toml +++ b/storage-proto/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-storage-proto" -version = "1.14.8" +version = "1.14.9" description = "Solana Storage Protobuf Definitions" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,9 +14,9 @@ bincode = "1.3.3" bs58 = "0.4.0" prost = "0.11.0" serde = "1.0.138" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.8" } -solana-sdk = { path = "../sdk", version = "=1.14.8" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.8" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.9" } +solana-sdk = { path = "../sdk", version = "=1.14.9" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.9" } [dev-dependencies] enum-iterator = "0.8.1" diff --git a/streamer/Cargo.toml b/streamer/Cargo.toml index c57ad5869b1aad..a2f664ddcccbad 100644 --- a/streamer/Cargo.toml +++ b/streamer/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-streamer" -version = "1.14.8" +version = "1.14.9" description = "Solana Streamer" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -25,15 +25,15 @@ quinn = "0.8.3" rand = "0.7.0" rcgen = "0.9.2" rustls = { version = "0.20.6", features = ["dangerous_configuration"] } -solana-metrics = { path = "../metrics", version = "=1.14.8" } -solana-perf = { path = "../perf", version = "=1.14.8" } -solana-sdk = { path = "../sdk", version = "=1.14.8" } +solana-metrics = { path = "../metrics", version = "=1.14.9" } +solana-perf = { path = "../perf", version = "=1.14.9" } +solana-sdk = { path = "../sdk", version = "=1.14.9" } thiserror = "1.0" tokio = { version = "1", features = ["full"] } x509-parser = "0.14.0" [dev-dependencies] -solana-logger = { path = "../logger", version = "=1.14.8" } +solana-logger = { path = "../logger", version = "=1.14.9" } [lib] crate-type = ["lib"] diff --git a/sys-tuner/Cargo.toml b/sys-tuner/Cargo.toml index 6fe3cf872abcab..de6692a2804268 100644 --- a/sys-tuner/Cargo.toml +++ b/sys-tuner/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-sys-tuner" description = "The solana cluster system tuner daemon" -version = "1.14.8" +version = "1.14.9" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,8 +14,8 @@ publish = true clap = "2.33.1" libc = "0.2.126" log = "0.4.17" -solana-logger = { path = "../logger", version = "=1.14.8" } -solana-version = { path = "../version", version = "=1.14.8" } +solana-logger = { path = "../logger", version = "=1.14.9" } +solana-version = { path = "../version", version = "=1.14.9" } [target."cfg(unix)".dependencies] unix_socket2 = "0.5.4" diff --git a/test-validator/Cargo.toml b/test-validator/Cargo.toml index c92579239edc6e..f8268048307722 100644 --- a/test-validator/Cargo.toml +++ b/test-validator/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "solana-test-validator" description = "Blockchain, Rebuilt for Scale" -version = "1.14.8" +version = "1.14.9" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-test-validator" readme = "../README.md" @@ -15,19 +15,19 @@ base64 = "0.13.0" log = "0.4.17" serde_derive = "1.0.103" serde_json = "1.0.81" -solana-cli-output = { path = "../cli-output", version = "=1.14.8" } -solana-client = { path = "../client", version = "=1.14.8" } -solana-core = { path = "../core", version = "=1.14.8" } -solana-gossip = { path = "../gossip", version = "=1.14.8" } -solana-ledger = { path = "../ledger", version = "=1.14.8" } -solana-logger = { path = "../logger", version = "=1.14.8" } -solana-net-utils = { path = "../net-utils", version = "=1.14.8" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.8" } -solana-program-test = { path = "../program-test", version = "=1.14.8" } -solana-rpc = { path = "../rpc", version = "=1.14.8" } -solana-runtime = { path = "../runtime", version = "=1.14.8" } -solana-sdk = { path = "../sdk", version = "=1.14.8" } -solana-streamer = { path = "../streamer", version = "=1.14.8" } +solana-cli-output = { path = "../cli-output", version = "=1.14.9" } +solana-client = { path = "../client", version = "=1.14.9" } +solana-core = { path = "../core", version = "=1.14.9" } +solana-gossip = { path = "../gossip", version = "=1.14.9" } +solana-ledger = { path = "../ledger", version = "=1.14.9" } +solana-logger = { path = "../logger", version = "=1.14.9" } +solana-net-utils = { path = "../net-utils", version = "=1.14.9" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.9" } +solana-program-test = { path = "../program-test", version = "=1.14.9" } +solana-rpc = { path = "../rpc", version = "=1.14.9" } +solana-runtime = { path = "../runtime", version = "=1.14.9" } +solana-sdk = { path = "../sdk", version = "=1.14.9" } +solana-streamer = { path = "../streamer", version = "=1.14.9" } tokio = { version = "1", features = ["full"] } [package.metadata.docs.rs] diff --git a/tokens/Cargo.toml b/tokens/Cargo.toml index 17a1220eac47f8..cdee36895bf969 100644 --- a/tokens/Cargo.toml +++ b/tokens/Cargo.toml @@ -3,7 +3,7 @@ name = "solana-tokens" description = "Blockchain, Rebuilt for Scale" authors = ["Solana Maintainers "] edition = "2021" -version = "1.14.8" +version = "1.14.9" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -19,14 +19,14 @@ indexmap = "1.9.1" indicatif = "0.16.2" pickledb = "0.4.1" serde = { version = "1.0", features = ["derive"] } -solana-account-decoder = { path = "../account-decoder", version = "=1.14.8" } -solana-clap-utils = { path = "../clap-utils", version = "=1.14.8" } -solana-cli-config = { path = "../cli-config", version = "=1.14.8" } -solana-client = { path = "../client", version = "=1.14.8" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.8" } -solana-sdk = { path = "../sdk", version = "=1.14.8" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.8" } -solana-version = { path = "../version", version = "=1.14.8" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.9" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.9" } +solana-cli-config = { path = "../cli-config", version = "=1.14.9" } +solana-client = { path = "../client", version = "=1.14.9" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.9" } +solana-sdk = { path = "../sdk", version = "=1.14.9" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.9" } +solana-version = { path = "../version", version = "=1.14.9" } spl-associated-token-account = { version = "=1.1.1" } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } tempfile = "3.3.0" @@ -34,6 +34,6 @@ thiserror = "1.0" [dev-dependencies] bincode = "1.3.3" -solana-logger = { path = "../logger", version = "=1.14.8" } -solana-streamer = { path = "../streamer", version = "=1.14.8" } -solana-test-validator = { path = "../test-validator", version = "=1.14.8" } +solana-logger = { path = "../logger", version = "=1.14.9" } +solana-streamer = { path = "../streamer", version = "=1.14.9" } +solana-test-validator = { path = "../test-validator", version = "=1.14.9" } diff --git a/transaction-dos/Cargo.toml b/transaction-dos/Cargo.toml index 296e7caeaffe58..19f8a96650865e 100644 --- a/transaction-dos/Cargo.toml +++ b/transaction-dos/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-transaction-dos" -version = "1.14.8" +version = "1.14.9" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,23 +14,23 @@ clap = "2.33.1" log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.8" } -solana-cli = { path = "../cli", version = "=1.14.8" } -solana-client = { path = "../client", version = "=1.14.8" } -solana-core = { path = "../core", version = "=1.14.8" } -solana-faucet = { path = "../faucet", version = "=1.14.8" } -solana-gossip = { path = "../gossip", version = "=1.14.8" } -solana-logger = { path = "../logger", version = "=1.14.8" } -solana-measure = { path = "../measure", version = "=1.14.8" } -solana-net-utils = { path = "../net-utils", version = "=1.14.8" } -solana-runtime = { path = "../runtime", version = "=1.14.8" } -solana-sdk = { path = "../sdk", version = "=1.14.8" } -solana-streamer = { path = "../streamer", version = "=1.14.8" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.8" } -solana-version = { path = "../version", version = "=1.14.8" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.9" } +solana-cli = { path = "../cli", version = "=1.14.9" } +solana-client = { path = "../client", version = "=1.14.9" } +solana-core = { path = "../core", version = "=1.14.9" } +solana-faucet = { path = "../faucet", version = "=1.14.9" } +solana-gossip = { path = "../gossip", version = "=1.14.9" } +solana-logger = { path = "../logger", version = "=1.14.9" } +solana-measure = { path = "../measure", version = "=1.14.9" } +solana-net-utils = { path = "../net-utils", version = "=1.14.9" } +solana-runtime = { path = "../runtime", version = "=1.14.9" } +solana-sdk = { path = "../sdk", version = "=1.14.9" } +solana-streamer = { path = "../streamer", version = "=1.14.9" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.9" } +solana-version = { path = "../version", version = "=1.14.9" } [dev-dependencies] -solana-local-cluster = { path = "../local-cluster", version = "=1.14.8" } +solana-local-cluster = { path = "../local-cluster", version = "=1.14.9" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/transaction-status/Cargo.toml b/transaction-status/Cargo.toml index 4900b4cae9585d..fb6486e374bc2d 100644 --- a/transaction-status/Cargo.toml +++ b/transaction-status/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-transaction-status" -version = "1.14.8" +version = "1.14.9" description = "Solana transaction status types" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -20,12 +20,12 @@ log = "0.4.17" serde = "1.0.138" serde_derive = "1.0.103" serde_json = "1.0.81" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.8" } -solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.8" } -solana-measure = { path = "../measure", version = "=1.14.8" } -solana-metrics = { path = "../metrics", version = "=1.14.8" } -solana-sdk = { path = "../sdk", version = "=1.14.8" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.8" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.9" } +solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.9" } +solana-measure = { path = "../measure", version = "=1.14.9" } +solana-metrics = { path = "../metrics", version = "=1.14.9" } +solana-sdk = { path = "../sdk", version = "=1.14.9" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.9" } spl-associated-token-account = { version = "=1.1.1", features = ["no-entrypoint"] } spl-memo = { version = "=3.0.1", features = ["no-entrypoint"] } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } diff --git a/upload-perf/Cargo.toml b/upload-perf/Cargo.toml index f4bae740e2f29c..85fa71e1cfc18d 100644 --- a/upload-perf/Cargo.toml +++ b/upload-perf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-upload-perf" -version = "1.14.8" +version = "1.14.9" description = "Metrics Upload Utility" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -11,7 +11,7 @@ publish = false [dependencies] serde_json = "1.0.81" -solana-metrics = { path = "../metrics", version = "=1.14.8" } +solana-metrics = { path = "../metrics", version = "=1.14.9" } [[bin]] name = "solana-upload-perf" diff --git a/validator/Cargo.toml b/validator/Cargo.toml index 95f70891fb381d..da16f49a95c1f7 100644 --- a/validator/Cargo.toml +++ b/validator/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-validator" description = "Blockchain, Rebuilt for Scale" -version = "1.14.8" +version = "1.14.9" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -28,30 +28,30 @@ num_cpus = "1.13.1" rand = "0.7.0" serde = "1.0.138" serde_json = "1.0.81" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.8" } -solana-cli-config = { path = "../cli-config", version = "=1.14.8" } -solana-client = { path = "../client", version = "=1.14.8" } -solana-core = { path = "../core", version = "=1.14.8" } -solana-download-utils = { path = "../download-utils", version = "=1.14.8" } -solana-entry = { path = "../entry", version = "=1.14.8" } -solana-faucet = { path = "../faucet", version = "=1.14.8" } -solana-genesis-utils = { path = "../genesis-utils", version = "=1.14.8" } -solana-gossip = { path = "../gossip", version = "=1.14.8" } -solana-ledger = { path = "../ledger", version = "=1.14.8" } -solana-logger = { path = "../logger", version = "=1.14.8" } -solana-metrics = { path = "../metrics", version = "=1.14.8" } -solana-net-utils = { path = "../net-utils", version = "=1.14.8" } -solana-perf = { path = "../perf", version = "=1.14.8" } -solana-poh = { path = "../poh", version = "=1.14.8" } -solana-rpc = { path = "../rpc", version = "=1.14.8" } -solana-runtime = { path = "../runtime", version = "=1.14.8" } -solana-sdk = { path = "../sdk", version = "=1.14.8" } -solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.8" } -solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.8" } -solana-streamer = { path = "../streamer", version = "=1.14.8" } -solana-test-validator = { path = "../test-validator", version = "=1.14.8" } -solana-version = { path = "../version", version = "=1.14.8" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.8" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.9" } +solana-cli-config = { path = "../cli-config", version = "=1.14.9" } +solana-client = { path = "../client", version = "=1.14.9" } +solana-core = { path = "../core", version = "=1.14.9" } +solana-download-utils = { path = "../download-utils", version = "=1.14.9" } +solana-entry = { path = "../entry", version = "=1.14.9" } +solana-faucet = { path = "../faucet", version = "=1.14.9" } +solana-genesis-utils = { path = "../genesis-utils", version = "=1.14.9" } +solana-gossip = { path = "../gossip", version = "=1.14.9" } +solana-ledger = { path = "../ledger", version = "=1.14.9" } +solana-logger = { path = "../logger", version = "=1.14.9" } +solana-metrics = { path = "../metrics", version = "=1.14.9" } +solana-net-utils = { path = "../net-utils", version = "=1.14.9" } +solana-perf = { path = "../perf", version = "=1.14.9" } +solana-poh = { path = "../poh", version = "=1.14.9" } +solana-rpc = { path = "../rpc", version = "=1.14.9" } +solana-runtime = { path = "../runtime", version = "=1.14.9" } +solana-sdk = { path = "../sdk", version = "=1.14.9" } +solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.9" } +solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.9" } +solana-streamer = { path = "../streamer", version = "=1.14.9" } +solana-test-validator = { path = "../test-validator", version = "=1.14.9" } +solana-version = { path = "../version", version = "=1.14.9" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.9" } symlink = "0.1.0" [target.'cfg(not(target_env = "msvc"))'.dependencies] diff --git a/version/Cargo.toml b/version/Cargo.toml index 22d6b114a4a5ac..35c806cc289b10 100644 --- a/version/Cargo.toml +++ b/version/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-version" -version = "1.14.8" +version = "1.14.9" description = "Solana Version" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,9 +14,9 @@ log = "0.4.17" semver = "1.0.10" serde = "1.0.138" serde_derive = "1.0.103" -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.8" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.8" } -solana-sdk = { path = "../sdk", version = "=1.14.8" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.9" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.9" } +solana-sdk = { path = "../sdk", version = "=1.14.9" } [lib] name = "solana_version" diff --git a/watchtower/Cargo.toml b/watchtower/Cargo.toml index 6b3bced7e8c960..cde99a59572bf5 100644 --- a/watchtower/Cargo.toml +++ b/watchtower/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-watchtower" description = "Blockchain, Rebuilt for Scale" -version = "1.14.8" +version = "1.14.9" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -13,15 +13,15 @@ documentation = "https://docs.rs/solana-watchtower" clap = "2.33.1" humantime = "2.0.1" log = "0.4.17" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.8" } -solana-cli-config = { path = "../cli-config", version = "=1.14.8" } -solana-cli-output = { path = "../cli-output", version = "=1.14.8" } -solana-client = { path = "../client", version = "=1.14.8" } -solana-logger = { path = "../logger", version = "=1.14.8" } -solana-metrics = { path = "../metrics", version = "=1.14.8" } -solana-notifier = { path = "../notifier", version = "=1.14.8" } -solana-sdk = { path = "../sdk", version = "=1.14.8" } -solana-version = { path = "../version", version = "=1.14.8" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.9" } +solana-cli-config = { path = "../cli-config", version = "=1.14.9" } +solana-cli-output = { path = "../cli-output", version = "=1.14.9" } +solana-client = { path = "../client", version = "=1.14.9" } +solana-logger = { path = "../logger", version = "=1.14.9" } +solana-metrics = { path = "../metrics", version = "=1.14.9" } +solana-notifier = { path = "../notifier", version = "=1.14.9" } +solana-sdk = { path = "../sdk", version = "=1.14.9" } +solana-version = { path = "../version", version = "=1.14.9" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/zk-token-sdk/Cargo.toml b/zk-token-sdk/Cargo.toml index dabb0ccd3fa46d..1989d9953329a1 100644 --- a/zk-token-sdk/Cargo.toml +++ b/zk-token-sdk/Cargo.toml @@ -3,7 +3,7 @@ name = "solana-zk-token-sdk" description = "Solana Zk Token SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" -version = "1.14.8" +version = "1.14.9" license = "Apache-2.0" edition = "2021" @@ -12,7 +12,7 @@ base64 = "0.13" bytemuck = { version = "1.11.0", features = ["derive"] } num-derive = "0.3" num-traits = "0.2" -solana-program = { path = "../sdk/program", version = "=1.14.8" } +solana-program = { path = "../sdk/program", version = "=1.14.9" } [target.'cfg(not(target_os = "solana"))'.dependencies] aes-gcm-siv = "0.10.3" @@ -29,7 +29,7 @@ rand = "0.7" serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" sha3 = "0.9" -solana-sdk = { path = "../sdk", version = "=1.14.8" } +solana-sdk = { path = "../sdk", version = "=1.14.9" } subtle = "2" thiserror = "1.0" zeroize = { version = "1.3", default-features = false, features = ["zeroize_derive"] } From e39ad9762df672a463e9b24ba4490f72e5f530a7 Mon Sep 17 00:00:00 2001 From: hanako mumei <81144685+2501babe@users.noreply.github.com> Date: Tue, 22 Nov 2022 17:28:35 -0800 Subject: [PATCH 233/465] update to spl-token-2022 0.5.0 * support CpiGuard and PermanentDelegate extensions in transaction-status and account-decoder * update transaction-status and account-decoder to new ConfidentialTransfer interfaces --- Cargo.lock | 123 +++++++----- account-decoder/Cargo.toml | 2 +- account-decoder/src/parse_token.rs | 2 +- account-decoder/src/parse_token_extension.rs | 51 ++++- client/Cargo.toml | 2 +- ledger/Cargo.toml | 2 +- programs/bpf/Cargo.lock | 123 +++++++----- rpc/Cargo.toml | 2 +- transaction-status/Cargo.toml | 2 +- transaction-status/src/parse_token.rs | 28 ++- .../src/parse_token/extension/cpi_guard.rs | 176 ++++++++++++++++++ .../src/parse_token/extension/mod.rs | 2 + .../extension/permanent_delegate.rs | 54 ++++++ 13 files changed, 463 insertions(+), 106 deletions(-) create mode 100644 transaction-status/src/parse_token/extension/cpi_guard.rs create mode 100644 transaction-status/src/parse_token/extension/permanent_delegate.rs diff --git a/Cargo.lock b/Cargo.lock index 4861ccc85261b6..2eefae104551c1 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3082,15 +3082,6 @@ dependencies = [ "crypto-mac", ] -[[package]] -name = "pbkdf2" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "271779f35b581956db91a3e55737327a03aa051e90b1c47aeb189508533adfd7" -dependencies = [ - "digest 0.10.3", -] - [[package]] name = "pbkdf2" version = "0.11.0" @@ -4492,7 +4483,7 @@ dependencies = [ "solana-sdk 1.14.9", "solana-vote-program", "spl-token", - "spl-token-2022", + "spl-token-2022 0.5.0", "thiserror", "zstd", ] @@ -4951,7 +4942,7 @@ dependencies = [ "solana-transaction-status", "solana-version", "solana-vote-program", - "spl-token-2022", + "spl-token-2022 0.5.0", "thiserror", "tokio", "tokio-stream", @@ -5173,23 +5164,35 @@ dependencies = [ [[package]] name = "solana-frozen-abi" -version = "1.10.33" +version = "1.14.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49a5d3280421bb53fc12bdba1eaa505153fb4f99a06b5609dae22192652ead3b" +checksum = "341bba362c91aedad2ad9fc0c28c2e39aaa606e6b9c049e8fbcc9f60675163ff" dependencies = [ + "ahash", + "blake3", + "block-buffer 0.9.0", "bs58", "bv", + "byteorder", + "cc", + "either", "generic-array 0.14.5", + "getrandom 0.1.16", + "hashbrown 0.12.3", "im", "lazy_static", "log", "memmap2", + "once_cell", + "rand_core 0.6.3", "rustc_version 0.4.0", "serde", "serde_bytes", "serde_derive", + "serde_json", "sha2 0.10.2", - "solana-frozen-abi-macro 1.10.33", + "solana-frozen-abi-macro 1.14.8", + "subtle", "thiserror", ] @@ -5228,9 +5231,9 @@ dependencies = [ [[package]] name = "solana-frozen-abi-macro" -version = "1.10.33" +version = "1.14.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "635c60ac96b1347af272c625465068b908aff919d19f29b5795a44310310494d" +checksum = "b6fae474ab37e2ccc4dfd33edd36a05d7df02b8531fa9870cb244f9491b64fe3" dependencies = [ "proc-macro2 1.0.41", "quote 1.0.18", @@ -5456,7 +5459,7 @@ dependencies = [ "solana-transaction-status", "solana-vote-program", "spl-token", - "spl-token-2022", + "spl-token-2022 0.5.0", "static_assertions", "tempfile", "test-case", @@ -5546,9 +5549,9 @@ dependencies = [ [[package]] name = "solana-logger" -version = "1.10.33" +version = "1.14.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b12cb6e6f1f9c9876d356c928b8c2ac532f6715e7cd2a1b4343d747bee3eca73" +checksum = "1ec82f7dedfee58ff2ac102b20a033a195950e7355fb29f1713f46cee629ffda" dependencies = [ "env_logger", "lazy_static", @@ -5717,9 +5720,9 @@ dependencies = [ [[package]] name = "solana-program" -version = "1.10.33" +version = "1.14.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eeecf504cee2821b006871f70e7a1f54db15f914cedf259eaf5976fe606470f0" +checksum = "f480a0a440ea15d8436de1c9ac01501cb15979dae4a0a5fc8e33198949b38681" dependencies = [ "base64 0.13.0", "bincode", @@ -5730,31 +5733,38 @@ dependencies = [ "bs58", "bv", "bytemuck", + "cc", "console_error_panic_hook", "console_log", "curve25519-dalek", - "getrandom 0.1.16", + "getrandom 0.2.3", "itertools", "js-sys", "lazy_static", + "libc", "libsecp256k1", "log", + "memoffset", "num-derive", "num-traits", "parking_lot 0.12.1", "rand 0.7.3", + "rand_chacha 0.2.2", "rustc_version 0.4.0", "rustversion", "serde", "serde_bytes", "serde_derive", + "serde_json", "sha2 0.10.2", "sha3 0.10.1", - "solana-frozen-abi 1.10.33", - "solana-frozen-abi-macro 1.10.33", - "solana-sdk-macro 1.10.33", + "solana-frozen-abi 1.14.8", + "solana-frozen-abi-macro 1.14.8", + "solana-sdk-macro 1.14.8", "thiserror", + "tiny-bip39", "wasm-bindgen", + "zeroize", ] [[package]] @@ -5930,7 +5940,7 @@ dependencies = [ "solana-version", "solana-vote-program", "spl-token", - "spl-token-2022", + "spl-token-2022 0.5.0", "stream-cancel", "symlink", "thiserror", @@ -6026,9 +6036,9 @@ dependencies = [ [[package]] name = "solana-sdk" -version = "1.10.33" +version = "1.14.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "636f6c615aca6f75e22b6baceaf0ffed9d74367f9320b07ed57cd9b5ce2e4ff9" +checksum = "65641c3c87a81fbbf7663360a2d8d5e145280021c444220257f9975ff6cddc80" dependencies = [ "assert_matches", "base64 0.13.0", @@ -6053,7 +6063,7 @@ dependencies = [ "memmap2", "num-derive", "num-traits", - "pbkdf2 0.10.1", + "pbkdf2 0.11.0", "qstring", "rand 0.7.3", "rand_chacha 0.2.2", @@ -6065,11 +6075,11 @@ dependencies = [ "serde_json", "sha2 0.10.2", "sha3 0.10.1", - "solana-frozen-abi 1.10.33", - "solana-frozen-abi-macro 1.10.33", - "solana-logger 1.10.33", - "solana-program 1.10.33", - "solana-sdk-macro 1.10.33", + "solana-frozen-abi 1.14.8", + "solana-frozen-abi-macro 1.14.8", + "solana-logger 1.14.8", + "solana-program 1.14.8", + "solana-sdk-macro 1.14.8", "thiserror", "uriparse", "wasm-bindgen", @@ -6131,9 +6141,9 @@ dependencies = [ [[package]] name = "solana-sdk-macro" -version = "1.10.33" +version = "1.14.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b8bcac4394644f21dc013e932a7df9f536fcecef3e5df43fe362b4ec532ce30" +checksum = "768f16d1a7315fc66ba835eebf9e95a83365ac94222551bc5cdcc6a74cb4a137" dependencies = [ "bs58", "proc-macro2 1.0.41", @@ -6412,7 +6422,7 @@ dependencies = [ "spl-associated-token-account", "spl-memo", "spl-token", - "spl-token-2022", + "spl-token-2022 0.5.0", "thiserror", ] @@ -6544,9 +6554,9 @@ dependencies = [ [[package]] name = "solana-zk-token-sdk" -version = "1.10.33" +version = "1.14.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "410ee53a26ac91098c289c983863535d4fbb6604b229ae1159503f48fa4fc90f" +checksum = "ac5982ab9d8771b3d9bbef11ece78348c496a9f70a90a96225aee0a70bd13b9d" dependencies = [ "aes-gcm-siv", "arrayref", @@ -6557,6 +6567,7 @@ dependencies = [ "cipher 0.4.3", "curve25519-dalek", "getrandom 0.1.16", + "itertools", "lazy_static", "merlin", "num-derive", @@ -6565,8 +6576,8 @@ dependencies = [ "serde", "serde_json", "sha3 0.9.1", - "solana-program 1.10.33", - "solana-sdk 1.10.33", + "solana-program 1.14.8", + "solana-sdk 1.14.8", "subtle", "thiserror", "zeroize", @@ -6651,9 +6662,9 @@ dependencies = [ "borsh", "num-derive", "num-traits", - "solana-program 1.10.33", + "solana-program 1.14.8", "spl-token", - "spl-token-2022", + "spl-token-2022 0.4.2", "thiserror", ] @@ -6663,7 +6674,7 @@ version = "3.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bd0dc6f70db6bacea7ff25870b016a65ba1d1b6013536f08e4fd79a8f9005325" dependencies = [ - "solana-program 1.10.33", + "solana-program 1.14.8", ] [[package]] @@ -6677,7 +6688,7 @@ dependencies = [ "num-derive", "num-traits", "num_enum", - "solana-program 1.10.33", + "solana-program 1.14.8", "thiserror", ] @@ -6692,8 +6703,26 @@ dependencies = [ "num-derive", "num-traits", "num_enum", - "solana-program 1.10.33", - "solana-zk-token-sdk 1.10.33", + "solana-program 1.14.8", + "solana-zk-token-sdk 1.14.8", + "spl-memo", + "spl-token", + "thiserror", +] + +[[package]] +name = "spl-token-2022" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0edb869dbe159b018f17fb9bfa67118c30f232d7f54a73742bc96794dff77ed8" +dependencies = [ + "arrayref", + "bytemuck", + "num-derive", + "num-traits", + "num_enum", + "solana-program 1.14.8", + "solana-zk-token-sdk 1.14.8", "spl-memo", "spl-token", "thiserror", diff --git a/account-decoder/Cargo.toml b/account-decoder/Cargo.toml index cb7cbe6c769123..d6e286aaabc84c 100644 --- a/account-decoder/Cargo.toml +++ b/account-decoder/Cargo.toml @@ -24,7 +24,7 @@ solana-config-program = { path = "../programs/config", version = "=1.14.9" } solana-sdk = { path = "../sdk", version = "=1.14.9" } solana-vote-program = { path = "../programs/vote", version = "=1.14.9" } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } -spl-token-2022 = { version = "=0.4.2", features = ["no-entrypoint"] } +spl-token-2022 = { version = "=0.5.0", features = ["no-entrypoint"] } thiserror = "1.0" zstd = "0.11.2" diff --git a/account-decoder/src/parse_token.rs b/account-decoder/src/parse_token.rs index ab5eb7f95d37c1..b6b504e02fd6aa 100644 --- a/account-decoder/src/parse_token.rs +++ b/account-decoder/src/parse_token.rs @@ -6,7 +6,7 @@ use { }, solana_sdk::pubkey::Pubkey, spl_token_2022::{ - extension::StateWithExtensions, + extension::{BaseStateWithExtensions, StateWithExtensions}, generic_token_account::GenericTokenAccount, solana_program::{ program_option::COption, program_pack::Pack, pubkey::Pubkey as SplTokenPubkey, diff --git a/account-decoder/src/parse_token_extension.rs b/account-decoder/src/parse_token_extension.rs index 998250368b0f90..de04539ac9b700 100644 --- a/account-decoder/src/parse_token_extension.rs +++ b/account-decoder/src/parse_token_extension.rs @@ -2,7 +2,7 @@ use { crate::parse_token::UiAccountState, solana_sdk::clock::UnixTimestamp, spl_token_2022::{ - extension::{self, BaseState, ExtensionType, StateWithExtensions}, + extension::{self, BaseState, BaseStateWithExtensions, ExtensionType, StateWithExtensions}, solana_program::pubkey::Pubkey, }, }; @@ -21,6 +21,8 @@ pub enum UiExtension { MemoTransfer(UiMemoTransfer), NonTransferable, InterestBearingConfig(UiInterestBearingConfig), + CpiGuard(UiCpiGuard), + PermanentDelegate(UiPermanentDelegate), UnparseableExtension, } @@ -64,6 +66,14 @@ pub fn parse_extension( .get_extension::() .map(|&extension| UiExtension::InterestBearingConfig(extension.into())) .unwrap_or(UiExtension::UnparseableExtension), + ExtensionType::CpiGuard => account + .get_extension::() + .map(|&extension| UiExtension::CpiGuard(extension.into())) + .unwrap_or(UiExtension::UnparseableExtension), + ExtensionType::PermanentDelegate => account + .get_extension::() + .map(|&extension| UiExtension::PermanentDelegate(extension.into())) + .unwrap_or(UiExtension::UnparseableExtension), } } @@ -204,6 +214,35 @@ impl From for UiInteres } } +#[derive(Debug, Serialize, Deserialize, PartialEq, Eq)] +#[serde(rename_all = "camelCase")] +pub struct UiCpiGuard { + pub lock_cpi: bool, +} + +impl From for UiCpiGuard { + fn from(cpi_guard: extension::cpi_guard::CpiGuard) -> Self { + Self { + lock_cpi: cpi_guard.lock_cpi.into(), + } + } +} + +#[derive(Debug, Serialize, Deserialize, PartialEq, Eq)] +#[serde(rename_all = "camelCase")] +pub struct UiPermanentDelegate { + pub delegate: Option, +} + +impl From for UiPermanentDelegate { + fn from(permanent_delegate: extension::permanent_delegate::PermanentDelegate) -> Self { + let delegate: Option = permanent_delegate.delegate.into(); + Self { + delegate: delegate.map(|pubkey| pubkey.to_string()), + } + } +} + #[derive(Debug, Serialize, Deserialize, PartialEq, Eq)] #[serde(rename_all = "camelCase")] pub struct UiConfidentialTransferMint { @@ -245,7 +284,8 @@ pub struct UiConfidentialTransferAccount { pub pending_balance_hi: String, pub available_balance: String, pub decryptable_available_balance: String, - pub allow_balance_credits: bool, + pub allow_confidential_credits: bool, + pub allow_non_confidential_credits: bool, pub pending_balance_credit_counter: u64, pub maximum_pending_balance_credit_counter: u64, pub expected_pending_balance_credit_counter: u64, @@ -269,7 +309,12 @@ impl From "{}", confidential_transfer_account.decryptable_available_balance ), - allow_balance_credits: confidential_transfer_account.allow_balance_credits.into(), + allow_confidential_credits: confidential_transfer_account + .allow_confidential_credits + .into(), + allow_non_confidential_credits: confidential_transfer_account + .allow_non_confidential_credits + .into(), pending_balance_credit_counter: confidential_transfer_account .pending_balance_credit_counter .into(), diff --git a/client/Cargo.toml b/client/Cargo.toml index 4af5f6a56a6021..0968967c8c0210 100644 --- a/client/Cargo.toml +++ b/client/Cargo.toml @@ -49,7 +49,7 @@ solana-streamer = { path = "../streamer", version = "=1.14.9" } solana-transaction-status = { path = "../transaction-status", version = "=1.14.9" } solana-version = { path = "../version", version = "=1.14.9" } solana-vote-program = { path = "../programs/vote", version = "=1.14.9" } -spl-token-2022 = { version = "=0.4.2", features = ["no-entrypoint"] } +spl-token-2022 = { version = "=0.5.0", features = ["no-entrypoint"] } thiserror = "1.0" tokio = { version = "1", features = ["full"] } tokio-stream = "0.1.9" diff --git a/ledger/Cargo.toml b/ledger/Cargo.toml index 0c8116548be425..dc2d1cc8475120 100644 --- a/ledger/Cargo.toml +++ b/ledger/Cargo.toml @@ -53,7 +53,7 @@ solana-storage-proto = { path = "../storage-proto", version = "=1.14.9" } solana-transaction-status = { path = "../transaction-status", version = "=1.14.9" } solana-vote-program = { path = "../programs/vote", version = "=1.14.9" } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } -spl-token-2022 = { version = "=0.4.2", features = ["no-entrypoint"] } +spl-token-2022 = { version = "=0.5.0", features = ["no-entrypoint"] } static_assertions = "1.1.0" tempfile = "3.3.0" thiserror = "1.0" diff --git a/programs/bpf/Cargo.lock b/programs/bpf/Cargo.lock index ffd5ab976c1feb..52caba3dffa8a4 100644 --- a/programs/bpf/Cargo.lock +++ b/programs/bpf/Cargo.lock @@ -2885,15 +2885,6 @@ dependencies = [ "crypto-mac", ] -[[package]] -name = "pbkdf2" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "271779f35b581956db91a3e55737327a03aa051e90b1c47aeb189508533adfd7" -dependencies = [ - "digest 0.10.3", -] - [[package]] name = "pbkdf2" version = "0.11.0" @@ -4079,7 +4070,7 @@ dependencies = [ "solana-sdk 1.14.9", "solana-vote-program", "spl-token", - "spl-token-2022", + "spl-token-2022 0.5.0", "thiserror", "zstd", ] @@ -4676,7 +4667,7 @@ dependencies = [ "solana-transaction-status", "solana-version", "solana-vote-program", - "spl-token-2022", + "spl-token-2022 0.5.0", "thiserror", "tokio", "tokio-stream", @@ -4821,23 +4812,35 @@ dependencies = [ [[package]] name = "solana-frozen-abi" -version = "1.10.33" +version = "1.14.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49a5d3280421bb53fc12bdba1eaa505153fb4f99a06b5609dae22192652ead3b" +checksum = "341bba362c91aedad2ad9fc0c28c2e39aaa606e6b9c049e8fbcc9f60675163ff" dependencies = [ + "ahash", + "blake3", + "block-buffer 0.9.0", "bs58", "bv", + "byteorder 1.4.3", + "cc", + "either", "generic-array 0.14.5", + "getrandom 0.1.14", + "hashbrown 0.12.3", "im", "lazy_static", "log", "memmap2", + "once_cell", + "rand_core 0.6.3", "rustc_version", "serde", "serde_bytes", "serde_derive", + "serde_json", "sha2 0.10.2", - "solana-frozen-abi-macro 1.10.33", + "solana-frozen-abi-macro 1.14.8", + "subtle", "thiserror", ] @@ -4875,9 +4878,9 @@ dependencies = [ [[package]] name = "solana-frozen-abi-macro" -version = "1.10.33" +version = "1.14.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "635c60ac96b1347af272c625465068b908aff919d19f29b5795a44310310494d" +checksum = "b6fae474ab37e2ccc4dfd33edd36a05d7df02b8531fa9870cb244f9491b64fe3" dependencies = [ "proc-macro2 1.0.41", "quote 1.0.18", @@ -5026,7 +5029,7 @@ dependencies = [ "solana-transaction-status", "solana-vote-program", "spl-token", - "spl-token-2022", + "spl-token-2022 0.5.0", "static_assertions", "tempfile", "thiserror", @@ -5037,9 +5040,9 @@ dependencies = [ [[package]] name = "solana-logger" -version = "1.10.33" +version = "1.14.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b12cb6e6f1f9c9876d356c928b8c2ac532f6715e7cd2a1b4343d747bee3eca73" +checksum = "1ec82f7dedfee58ff2ac102b20a033a195950e7355fb29f1713f46cee629ffda" dependencies = [ "env_logger", "lazy_static", @@ -5148,9 +5151,9 @@ dependencies = [ [[package]] name = "solana-program" -version = "1.10.33" +version = "1.14.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eeecf504cee2821b006871f70e7a1f54db15f914cedf259eaf5976fe606470f0" +checksum = "f480a0a440ea15d8436de1c9ac01501cb15979dae4a0a5fc8e33198949b38681" dependencies = [ "base64 0.13.0", "bincode", @@ -5161,31 +5164,38 @@ dependencies = [ "bs58", "bv", "bytemuck", + "cc", "console_error_panic_hook", "console_log", "curve25519-dalek", - "getrandom 0.1.14", + "getrandom 0.2.4", "itertools", "js-sys", "lazy_static", + "libc", "libsecp256k1 0.6.0", "log", + "memoffset", "num-derive", "num-traits", "parking_lot 0.12.1", "rand 0.7.3", + "rand_chacha 0.2.2", "rustc_version", "rustversion", "serde", "serde_bytes", "serde_derive", + "serde_json", "sha2 0.10.2", "sha3 0.10.1", - "solana-frozen-abi 1.10.33", - "solana-frozen-abi-macro 1.10.33", - "solana-sdk-macro 1.10.33", + "solana-frozen-abi 1.14.8", + "solana-frozen-abi-macro 1.14.8", + "solana-sdk-macro 1.14.8", "thiserror", + "tiny-bip39", "wasm-bindgen", + "zeroize", ] [[package]] @@ -5352,7 +5362,7 @@ dependencies = [ "solana-version", "solana-vote-program", "spl-token", - "spl-token-2022", + "spl-token-2022 0.5.0", "stream-cancel", "thiserror", "tokio", @@ -5419,9 +5429,9 @@ dependencies = [ [[package]] name = "solana-sdk" -version = "1.10.33" +version = "1.14.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "636f6c615aca6f75e22b6baceaf0ffed9d74367f9320b07ed57cd9b5ce2e4ff9" +checksum = "65641c3c87a81fbbf7663360a2d8d5e145280021c444220257f9975ff6cddc80" dependencies = [ "assert_matches", "base64 0.13.0", @@ -5446,7 +5456,7 @@ dependencies = [ "memmap2", "num-derive", "num-traits", - "pbkdf2 0.10.1", + "pbkdf2 0.11.0", "qstring", "rand 0.7.3", "rand_chacha 0.2.2", @@ -5458,11 +5468,11 @@ dependencies = [ "serde_json", "sha2 0.10.2", "sha3 0.10.1", - "solana-frozen-abi 1.10.33", - "solana-frozen-abi-macro 1.10.33", - "solana-logger 1.10.33", - "solana-program 1.10.33", - "solana-sdk-macro 1.10.33", + "solana-frozen-abi 1.14.8", + "solana-frozen-abi-macro 1.14.8", + "solana-logger 1.14.8", + "solana-program 1.14.8", + "solana-sdk-macro 1.14.8", "thiserror", "uriparse", "wasm-bindgen", @@ -5519,9 +5529,9 @@ dependencies = [ [[package]] name = "solana-sdk-macro" -version = "1.10.33" +version = "1.14.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b8bcac4394644f21dc013e932a7df9f536fcecef3e5df43fe362b4ec532ce30" +checksum = "768f16d1a7315fc66ba835eebf9e95a83365ac94222551bc5cdcc6a74cb4a137" dependencies = [ "bs58", "proc-macro2 1.0.41", @@ -5711,7 +5721,7 @@ dependencies = [ "spl-associated-token-account", "spl-memo", "spl-token", - "spl-token-2022", + "spl-token-2022 0.5.0", "thiserror", ] @@ -5814,9 +5824,9 @@ dependencies = [ [[package]] name = "solana-zk-token-sdk" -version = "1.10.33" +version = "1.14.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "410ee53a26ac91098c289c983863535d4fbb6604b229ae1159503f48fa4fc90f" +checksum = "ac5982ab9d8771b3d9bbef11ece78348c496a9f70a90a96225aee0a70bd13b9d" dependencies = [ "aes-gcm-siv", "arrayref", @@ -5827,6 +5837,7 @@ dependencies = [ "cipher 0.4.3", "curve25519-dalek", "getrandom 0.1.14", + "itertools", "lazy_static", "merlin", "num-derive", @@ -5835,8 +5846,8 @@ dependencies = [ "serde", "serde_json", "sha3 0.9.1", - "solana-program 1.10.33", - "solana-sdk 1.10.33", + "solana-program 1.14.8", + "solana-sdk 1.14.8", "subtle", "thiserror", "zeroize", @@ -5921,9 +5932,9 @@ dependencies = [ "borsh", "num-derive", "num-traits", - "solana-program 1.10.33", + "solana-program 1.14.8", "spl-token", - "spl-token-2022", + "spl-token-2022 0.4.2", "thiserror", ] @@ -5933,7 +5944,7 @@ version = "3.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bd0dc6f70db6bacea7ff25870b016a65ba1d1b6013536f08e4fd79a8f9005325" dependencies = [ - "solana-program 1.10.33", + "solana-program 1.14.8", ] [[package]] @@ -5947,7 +5958,7 @@ dependencies = [ "num-derive", "num-traits", "num_enum", - "solana-program 1.10.33", + "solana-program 1.14.8", "thiserror", ] @@ -5962,8 +5973,26 @@ dependencies = [ "num-derive", "num-traits", "num_enum", - "solana-program 1.10.33", - "solana-zk-token-sdk 1.10.33", + "solana-program 1.14.8", + "solana-zk-token-sdk 1.14.8", + "spl-memo", + "spl-token", + "thiserror", +] + +[[package]] +name = "spl-token-2022" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0edb869dbe159b018f17fb9bfa67118c30f232d7f54a73742bc96794dff77ed8" +dependencies = [ + "arrayref", + "bytemuck", + "num-derive", + "num-traits", + "num_enum", + "solana-program 1.14.8", + "solana-zk-token-sdk 1.14.8", "spl-memo", "spl-token", "thiserror", diff --git a/rpc/Cargo.toml b/rpc/Cargo.toml index d40f07a38cb13f..3936757755ab4a 100644 --- a/rpc/Cargo.toml +++ b/rpc/Cargo.toml @@ -50,7 +50,7 @@ solana-transaction-status = { path = "../transaction-status", version = "=1.14.9 solana-version = { path = "../version", version = "=1.14.9" } solana-vote-program = { path = "../programs/vote", version = "=1.14.9" } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } -spl-token-2022 = { version = "=0.4.2", features = ["no-entrypoint"] } +spl-token-2022 = { version = "=0.5.0", features = ["no-entrypoint"] } stream-cancel = "0.8.1" thiserror = "1.0" tokio = { version = "~1.14.1", features = ["full"] } diff --git a/transaction-status/Cargo.toml b/transaction-status/Cargo.toml index fb6486e374bc2d..42ae973b576d98 100644 --- a/transaction-status/Cargo.toml +++ b/transaction-status/Cargo.toml @@ -29,7 +29,7 @@ solana-vote-program = { path = "../programs/vote", version = "=1.14.9" } spl-associated-token-account = { version = "=1.1.1", features = ["no-entrypoint"] } spl-memo = { version = "=3.0.1", features = ["no-entrypoint"] } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } -spl-token-2022 = { version = "=0.4.2", features = ["no-entrypoint"] } +spl-token-2022 = { version = "=0.5.0", features = ["no-entrypoint"] } thiserror = "1.0" [package.metadata.docs.rs] diff --git a/transaction-status/src/parse_token.rs b/transaction-status/src/parse_token.rs index 3c43cfbf426a28..4e8d35d6e28a67 100644 --- a/transaction-status/src/parse_token.rs +++ b/transaction-status/src/parse_token.rs @@ -3,8 +3,8 @@ use { check_num_accounts, ParsableProgram, ParseInstructionError, ParsedInstructionEnum, }, extension::{ - default_account_state::*, interest_bearing_mint::*, memo_transfer::*, - mint_close_authority::*, reallocate::*, transfer_fee::*, + cpi_guard::*, default_account_state::*, interest_bearing_mint::*, memo_transfer::*, + mint_close_authority::*, permanent_delegate::*, reallocate::*, transfer_fee::*, }, serde_json::{json, Map, Value}, solana_account_decoder::parse_token::{ @@ -228,7 +228,8 @@ pub fn parse_token( | AuthorityType::TransferFeeConfig | AuthorityType::WithheldWithdraw | AuthorityType::CloseMint - | AuthorityType::InterestRate => "mint", + | AuthorityType::InterestRate + | AuthorityType::PermanentDelegate => "mint", AuthorityType::AccountOwner | AuthorityType::CloseAccount => "account", }; let mut value = json!({ @@ -572,6 +573,21 @@ pub fn parse_token( account_keys, ) } + TokenInstruction::CpiGuardExtension => { + if instruction.data.len() < 2 { + return Err(ParseInstructionError::InstructionNotParsable( + ParsableProgram::SplToken, + )); + } + parse_cpi_guard_instruction(&instruction.data[1..], &instruction.accounts, account_keys) + } + TokenInstruction::InitializePermanentDelegate { delegate } => { + parse_initialize_permanent_delegate_instruction( + delegate, + &instruction.accounts, + account_keys, + ) + } } } @@ -586,6 +602,7 @@ pub enum UiAuthorityType { WithheldWithdraw, CloseMint, InterestRate, + PermanentDelegate, } impl From for UiAuthorityType { @@ -599,6 +616,7 @@ impl From for UiAuthorityType { AuthorityType::WithheldWithdraw => UiAuthorityType::WithheldWithdraw, AuthorityType::CloseMint => UiAuthorityType::CloseMint, AuthorityType::InterestRate => UiAuthorityType::InterestRate, + AuthorityType::PermanentDelegate => UiAuthorityType::PermanentDelegate, } } } @@ -617,6 +635,8 @@ pub enum UiExtensionType { MemoTransfer, NonTransferable, InterestBearingConfig, + CpiGuard, + PermanentDelegate, } impl From for UiExtensionType { @@ -635,6 +655,8 @@ impl From for UiExtensionType { ExtensionType::MemoTransfer => UiExtensionType::MemoTransfer, ExtensionType::NonTransferable => UiExtensionType::NonTransferable, ExtensionType::InterestBearingConfig => UiExtensionType::InterestBearingConfig, + ExtensionType::CpiGuard => UiExtensionType::CpiGuard, + ExtensionType::PermanentDelegate => UiExtensionType::PermanentDelegate, } } } diff --git a/transaction-status/src/parse_token/extension/cpi_guard.rs b/transaction-status/src/parse_token/extension/cpi_guard.rs new file mode 100644 index 00000000000000..8d198249f7477d --- /dev/null +++ b/transaction-status/src/parse_token/extension/cpi_guard.rs @@ -0,0 +1,176 @@ +use { + super::*, + spl_token_2022::{ + extension::cpi_guard::instruction::CpiGuardInstruction, + instruction::decode_instruction_type, + }, +}; + +pub(in crate::parse_token) fn parse_cpi_guard_instruction( + instruction_data: &[u8], + account_indexes: &[u8], + account_keys: &AccountKeys, +) -> Result { + check_num_token_accounts(account_indexes, 2)?; + let instruction_type_str = match decode_instruction_type(instruction_data) + .map_err(|_| ParseInstructionError::InstructionNotParsable(ParsableProgram::SplToken))? + { + CpiGuardInstruction::Enable => "enable", + CpiGuardInstruction::Disable => "disable", + }; + let mut value = json!({ + "account": account_keys[account_indexes[0] as usize].to_string(), + }); + let map = value.as_object_mut().unwrap(); + parse_signers( + map, + 1, + account_keys, + account_indexes, + "owner", + "multisigOwner", + ); + Ok(ParsedInstructionEnum { + instruction_type: format!("{}CpiGuard", instruction_type_str), + info: value, + }) +} + +#[cfg(test)] +mod test { + use { + super::*, + crate::parse_token::test::*, + solana_sdk::pubkey::Pubkey, + spl_token_2022::{ + extension::cpi_guard::instruction::{disable_cpi_guard, enable_cpi_guard}, + solana_program::message::Message, + }, + }; + + #[test] + fn test_parse_cpi_guard_instruction() { + let account_pubkey = Pubkey::new_unique(); + + // Enable, single owner + let owner_pubkey = Pubkey::new_unique(); + let enable_cpi_guard_ix = enable_cpi_guard( + &spl_token_2022::id(), + &convert_pubkey(account_pubkey), + &convert_pubkey(owner_pubkey), + &[], + ) + .unwrap(); + let message = Message::new(&[enable_cpi_guard_ix], None); + let compiled_instruction = convert_compiled_instruction(&message.instructions[0]); + assert_eq!( + parse_token( + &compiled_instruction, + &AccountKeys::new(&convert_account_keys(&message), None) + ) + .unwrap(), + ParsedInstructionEnum { + instruction_type: "enableCpiGuard".to_string(), + info: json!({ + "account": account_pubkey.to_string(), + "owner": owner_pubkey.to_string(), + }) + } + ); + + // Enable, multisig owner + let multisig_pubkey = Pubkey::new_unique(); + let multisig_signer0 = Pubkey::new_unique(); + let multisig_signer1 = Pubkey::new_unique(); + let enable_cpi_guard_ix = enable_cpi_guard( + &spl_token_2022::id(), + &convert_pubkey(account_pubkey), + &convert_pubkey(multisig_pubkey), + &[ + &convert_pubkey(multisig_signer0), + &convert_pubkey(multisig_signer1), + ], + ) + .unwrap(); + let message = Message::new(&[enable_cpi_guard_ix], None); + let compiled_instruction = convert_compiled_instruction(&message.instructions[0]); + assert_eq!( + parse_token( + &compiled_instruction, + &AccountKeys::new(&convert_account_keys(&message), None) + ) + .unwrap(), + ParsedInstructionEnum { + instruction_type: "enableCpiGuard".to_string(), + info: json!({ + "account": account_pubkey.to_string(), + "multisigOwner": multisig_pubkey.to_string(), + "signers": vec![ + multisig_signer0.to_string(), + multisig_signer1.to_string(), + ], + }) + } + ); + + // Disable, single owner + let enable_cpi_guard_ix = disable_cpi_guard( + &spl_token_2022::id(), + &convert_pubkey(account_pubkey), + &convert_pubkey(owner_pubkey), + &[], + ) + .unwrap(); + let message = Message::new(&[enable_cpi_guard_ix], None); + let compiled_instruction = convert_compiled_instruction(&message.instructions[0]); + assert_eq!( + parse_token( + &compiled_instruction, + &AccountKeys::new(&convert_account_keys(&message), None) + ) + .unwrap(), + ParsedInstructionEnum { + instruction_type: "disableCpiGuard".to_string(), + info: json!({ + "account": account_pubkey.to_string(), + "owner": owner_pubkey.to_string(), + }) + } + ); + + // Enable, multisig owner + let multisig_pubkey = Pubkey::new_unique(); + let multisig_signer0 = Pubkey::new_unique(); + let multisig_signer1 = Pubkey::new_unique(); + let enable_cpi_guard_ix = disable_cpi_guard( + &spl_token_2022::id(), + &convert_pubkey(account_pubkey), + &convert_pubkey(multisig_pubkey), + &[ + &convert_pubkey(multisig_signer0), + &convert_pubkey(multisig_signer1), + ], + ) + .unwrap(); + let message = Message::new(&[enable_cpi_guard_ix], None); + let compiled_instruction = convert_compiled_instruction(&message.instructions[0]); + assert_eq!( + parse_token( + &compiled_instruction, + &AccountKeys::new(&convert_account_keys(&message), None) + ) + .unwrap(), + ParsedInstructionEnum { + instruction_type: "disableCpiGuard".to_string(), + info: json!({ + "account": account_pubkey.to_string(), + "multisigOwner": multisig_pubkey.to_string(), + "signers": vec![ + multisig_signer0.to_string(), + multisig_signer1.to_string(), + ], + }) + } + ); + } +} diff --git a/transaction-status/src/parse_token/extension/mod.rs b/transaction-status/src/parse_token/extension/mod.rs index 3c84942651ab79..740bc61ed4efe6 100644 --- a/transaction-status/src/parse_token/extension/mod.rs +++ b/transaction-status/src/parse_token/extension/mod.rs @@ -1,8 +1,10 @@ use super::*; +pub(super) mod cpi_guard; pub(super) mod default_account_state; pub(super) mod interest_bearing_mint; pub(super) mod memo_transfer; pub(super) mod mint_close_authority; +pub(super) mod permanent_delegate; pub(super) mod reallocate; pub(super) mod transfer_fee; diff --git a/transaction-status/src/parse_token/extension/permanent_delegate.rs b/transaction-status/src/parse_token/extension/permanent_delegate.rs new file mode 100644 index 00000000000000..03b528e1af6bac --- /dev/null +++ b/transaction-status/src/parse_token/extension/permanent_delegate.rs @@ -0,0 +1,54 @@ +use {super::*, spl_token_2022::solana_program::pubkey::Pubkey}; + +pub(in crate::parse_token) fn parse_initialize_permanent_delegate_instruction( + delegate: Pubkey, + account_indexes: &[u8], + account_keys: &AccountKeys, +) -> Result { + check_num_token_accounts(account_indexes, 1)?; + Ok(ParsedInstructionEnum { + instruction_type: "initializePermanentDelegate".to_string(), + info: json!({ + "mint": account_keys[account_indexes[0] as usize].to_string(), + "delegate": delegate.to_string(), + }), + }) +} + +#[cfg(test)] +mod test { + use { + super::*, + crate::parse_token::test::*, + solana_sdk::pubkey::Pubkey, + spl_token_2022::{instruction::*, solana_program::message::Message}, + }; + + #[test] + fn test_parse_initialize_permanent_delegate_instruction() { + let mint_pubkey = Pubkey::new_unique(); + let delegate = Pubkey::new_unique(); + let permanent_delegate_ix = initialize_permanent_delegate( + &spl_token_2022::id(), + &convert_pubkey(mint_pubkey), + &convert_pubkey(delegate), + ) + .unwrap(); + let message = Message::new(&[permanent_delegate_ix], None); + let compiled_instruction = convert_compiled_instruction(&message.instructions[0]); + assert_eq!( + parse_token( + &compiled_instruction, + &AccountKeys::new(&convert_account_keys(&message), None) + ) + .unwrap(), + ParsedInstructionEnum { + instruction_type: "initializePermanentDelegate".to_string(), + info: json!({ + "mint": mint_pubkey.to_string(), + "delegate": delegate.to_string(), + }) + } + ); + } +} From 103d0695d76eb1ea4a62e185173917ab445f4bea Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Mon, 28 Nov 2022 21:12:04 +0000 Subject: [PATCH 234/465] dedups turbine retransmit peers by tvu socket addresses (backport #28944) (#28963) dedups turbine retransmit peers by tvu socket addresses (#28944) No need to send duplicate shreds if several nodes have the same tvu socket address because they are behind a relayer or whatever. (cherry picked from commit 7d99cddb9f3002de1ff32dfd6d68c7eb0632da7c) Co-authored-by: behzad nouri --- core/benches/cluster_nodes.rs | 2 +- core/src/cluster_nodes.rs | 88 ++++++++++++++++++++++++++--------- 2 files changed, 67 insertions(+), 23 deletions(-) diff --git a/core/benches/cluster_nodes.rs b/core/benches/cluster_nodes.rs index 2e359193885e26..e9f74bc9b947b4 100644 --- a/core/benches/cluster_nodes.rs +++ b/core/benches/cluster_nodes.rs @@ -49,7 +49,7 @@ fn get_retransmit_peers_deterministic( 0, 0, ); - let (_root_distance, _neighbors, _children) = cluster_nodes.get_retransmit_peers( + let _retransmit_peers = cluster_nodes.get_retransmit_peers( slot_leader, &shred.id(), root_bank, diff --git a/core/src/cluster_nodes.rs b/core/src/cluster_nodes.rs index 1e1283e81c0d0f..270c83990519a8 100644 --- a/core/src/cluster_nodes.rs +++ b/core/src/cluster_nodes.rs @@ -68,6 +68,16 @@ pub struct ClusterNodesCache { ttl: Duration, // Time to live. } +pub struct RetransmitPeers<'a> { + root_distance: usize, // distance from the root node + neighbors: Vec<&'a Node>, + children: Vec<&'a Node>, + // Maps from tvu/tvu_forwards addresses to the first node + // in the shuffle with the same address. + addrs: HashMap, // tvu addresses + frwds: HashMap, // tvu_forwards addresses +} + impl Node { #[inline] fn pubkey(&self) -> Pubkey { @@ -139,33 +149,48 @@ impl ClusterNodes { root_bank: &Bank, fanout: usize, ) -> (/*root_distance:*/ usize, Vec) { - let (root_distance, neighbors, children) = - self.get_retransmit_peers(slot_leader, shred, root_bank, fanout); + let RetransmitPeers { + root_distance, + neighbors, + children, + addrs, + frwds, + } = self.get_retransmit_peers(slot_leader, shred, root_bank, fanout); if neighbors.is_empty() { - let peers = children.into_iter().filter_map(Node::contact_info); - let addrs = peers.map(|peer| peer.tvu).collect(); - return (root_distance, addrs); + let peers = children + .into_iter() + .filter_map(Node::contact_info) + .filter(|node| addrs.get(&node.tvu) == Some(&node.id)) + .map(|node| node.tvu) + .collect(); + return (root_distance, peers); } // If the node is on the critical path (i.e. the first node in each // neighborhood), it should send the packet to tvu socket of its // children and also tvu_forward socket of its neighbors. Otherwise it // should only forward to tvu_forwards socket of its children. if neighbors[0].pubkey() != self.pubkey { - let addrs = children - .iter() - .filter_map(|node| Some(node.contact_info()?.tvu_forwards)); - return (root_distance, addrs.collect()); + let peers = children + .into_iter() + .filter_map(Node::contact_info) + .filter(|node| frwds.get(&node.tvu_forwards) == Some(&node.id)) + .map(|node| node.tvu_forwards); + return (root_distance, peers.collect()); } // First neighbor is this node itself, so skip it. - let addrs = neighbors[1..] + let peers = neighbors[1..] .iter() - .filter_map(|node| Some(node.contact_info()?.tvu_forwards)) + .filter_map(|node| node.contact_info()) + .filter(|node| frwds.get(&node.tvu_forwards) == Some(&node.id)) + .map(|node| node.tvu_forwards) .chain( children - .iter() - .filter_map(|node| Some(node.contact_info()?.tvu)), + .into_iter() + .filter_map(Node::contact_info) + .filter(|node| addrs.get(&node.tvu) == Some(&node.id)) + .map(|node| node.tvu), ); - (root_distance, addrs.collect()) + (root_distance, peers.collect()) } pub fn get_retransmit_peers( @@ -174,11 +199,7 @@ impl ClusterNodes { shred: &ShredId, root_bank: &Bank, fanout: usize, - ) -> ( - usize, // distance from the root node - Vec<&Node>, // neighbors - Vec<&Node>, // children - ) { + ) -> RetransmitPeers { let shred_seed = shred.seed(slot_leader); let mut weighted_shuffle = self.weighted_shuffle.clone(); // Exclude slot leader from list of nodes. @@ -187,16 +208,27 @@ impl ClusterNodes { } else if let Some(index) = self.index.get(slot_leader) { weighted_shuffle.remove_index(*index); }; + let mut addrs = HashMap::::with_capacity(self.nodes.len()); + let mut frwds = HashMap::::with_capacity(self.nodes.len()); let mut rng = ChaChaRng::from_seed(shred_seed); + let drop_redundant_turbine_path = drop_redundant_turbine_path(shred.slot(), root_bank); let nodes: Vec<_> = weighted_shuffle .shuffle(&mut rng) .map(|index| &self.nodes[index]) + .inspect(|node| { + if let Some(node) = node.contact_info() { + addrs.entry(node.tvu).or_insert(node.id); + if !drop_redundant_turbine_path { + frwds.entry(node.tvu_forwards).or_insert(node.id); + } + } + }) .collect(); let self_index = nodes .iter() .position(|node| node.pubkey() == self.pubkey) .unwrap(); - if drop_redundant_turbine_path(shred.slot(), root_bank) { + if drop_redundant_turbine_path { let root_distance = if self_index == 0 { 0 } else if self_index <= fanout { @@ -205,7 +237,13 @@ impl ClusterNodes { 2 }; let peers = get_retransmit_peers(fanout, self_index, &nodes); - return (root_distance, Vec::default(), peers.collect()); + return RetransmitPeers { + root_distance, + neighbors: Vec::default(), + children: peers.collect(), + addrs, + frwds, + }; } let root_distance = if self_index == 0 { 0 @@ -218,7 +256,13 @@ impl ClusterNodes { // Assert that the node itself is included in the set of neighbors, at // the right offset. debug_assert_eq!(neighbors[self_index % fanout].pubkey(), self.pubkey); - (root_distance, neighbors, children) + RetransmitPeers { + root_distance, + neighbors, + children, + addrs, + frwds, + } } } From af329cf4ee4a4dbc821486743a22274e65df0bbb Mon Sep 17 00:00:00 2001 From: "Jeff Washington (jwash)" Date: Mon, 28 Nov 2022 16:47:29 -0600 Subject: [PATCH 235/465] feature: on accounts hash calculation, do not try to rehash accounts (#28935) * add feature #28934 * feature: on accounts hash calculation, do not try to rehash accounts #28934 * Delete syscalls.txt * retain feature 28541 Co-authored-by: Brooks Prumo --- accounts-bench/src/main.rs | 4 +- core/src/accounts_hash_verifier.rs | 5 + runtime/benches/accounts.rs | 5 +- runtime/src/accounts.rs | 4 + runtime/src/accounts_background_service.rs | 1 + runtime/src/accounts_db.rs | 85 +- runtime/src/accounts_hash.rs | 2 + runtime/src/bank.rs | 12 + runtime/src/expected_rent_collection.rs | 1309 ++++++++++++++++++++ runtime/src/lib.rs | 1 + runtime/src/snapshot_package.rs | 4 + runtime/src/snapshot_utils.rs | 6 +- sdk/src/feature_set.rs | 5 + 13 files changed, 1435 insertions(+), 8 deletions(-) create mode 100644 runtime/src/expected_rent_collection.rs diff --git a/accounts-bench/src/main.rs b/accounts-bench/src/main.rs index 987915d8c9fe15..398e5a7735247c 100644 --- a/accounts-bench/src/main.rs +++ b/accounts-bench/src/main.rs @@ -10,7 +10,7 @@ use { test_utils::{create_test_accounts, update_accounts_bench}, Accounts, }, - accounts_db::AccountShrinkThreshold, + accounts_db::{AccountShrinkThreshold, TEST_DISABLE_REHASH_FOR_RENT_EPOCH}, accounts_index::AccountSecondaryIndexes, ancestors::Ancestors, rent_collector::RentCollector, @@ -125,6 +125,7 @@ fn main() { &ancestors, &EpochSchedule::default(), &RentCollector::default(), + TEST_DISABLE_REHASH_FOR_RENT_EPOCH, ); time.stop(); let mut time_store = Measure::start("hash using store"); @@ -138,6 +139,7 @@ fn main() { &EpochSchedule::default(), &RentCollector::default(), false, + TEST_DISABLE_REHASH_FOR_RENT_EPOCH, ); time_store.stop(); if results != results_store { diff --git a/core/src/accounts_hash_verifier.rs b/core/src/accounts_hash_verifier.rs index b8bc425c4a33d3..ac64de9141ae21 100644 --- a/core/src/accounts_hash_verifier.rs +++ b/core/src/accounts_hash_verifier.rs @@ -143,6 +143,7 @@ impl AccountsHashVerifier { rent_collector: &accounts_package.rent_collector, store_detailed_debug_info_on_failure: false, full_snapshot: None, + disable_rehash_for_rent_epoch: accounts_package.disable_rehash_for_rent_epoch, }, &sorted_storages, timings, @@ -166,6 +167,8 @@ impl AccountsHashVerifier { // now that we've failed, store off the failing contents that produced a bad capitalization store_detailed_debug_info_on_failure: true, full_snapshot: None, + disable_rehash_for_rent_epoch: accounts_package + .disable_rehash_for_rent_epoch, }, &sorted_storages, HashStats::default(), @@ -336,6 +339,7 @@ mod tests { super::*, solana_gossip::{cluster_info::make_accounts_hashes_message, contact_info::ContactInfo}, solana_runtime::{ + accounts_db::TEST_DISABLE_REHASH_FOR_RENT_EPOCH, rent_collector::RentCollector, snapshot_utils::{ArchiveFormat, SnapshotVersion}, }, @@ -429,6 +433,7 @@ mod tests { accounts: Arc::clone(&accounts), epoch_schedule: EpochSchedule::default(), rent_collector: RentCollector::default(), + disable_rehash_for_rent_epoch: TEST_DISABLE_REHASH_FOR_RENT_EPOCH, }; AccountsHashVerifier::process_accounts_package( diff --git a/runtime/benches/accounts.rs b/runtime/benches/accounts.rs index 27f22de6634ae0..9ae61486504618 100644 --- a/runtime/benches/accounts.rs +++ b/runtime/benches/accounts.rs @@ -9,7 +9,7 @@ use { rayon::iter::{IntoParallelRefIterator, ParallelIterator}, solana_runtime::{ accounts::{test_utils::create_test_accounts, AccountAddressFilter, Accounts}, - accounts_db::AccountShrinkThreshold, + accounts_db::{AccountShrinkThreshold, TEST_DISABLE_REHASH_FOR_RENT_EPOCH}, accounts_index::{AccountSecondaryIndexes, ScanConfig}, ancestors::Ancestors, bank::*, @@ -114,6 +114,7 @@ fn test_accounts_hash_bank_hash(bencher: &mut Bencher) { &ancestors, &EpochSchedule::default(), &RentCollector::default(), + TEST_DISABLE_REHASH_FOR_RENT_EPOCH, ); let test_hash_calculation = false; bencher.iter(|| { @@ -128,6 +129,7 @@ fn test_accounts_hash_bank_hash(bencher: &mut Bencher) { false, false, false, + TEST_DISABLE_REHASH_FOR_RENT_EPOCH, )) }); } @@ -151,6 +153,7 @@ fn test_update_accounts_hash(bencher: &mut Bencher) { &ancestors, &EpochSchedule::default(), &RentCollector::default(), + TEST_DISABLE_REHASH_FOR_RENT_EPOCH, ); }); } diff --git a/runtime/src/accounts.rs b/runtime/src/accounts.rs index 68b9062923ce9f..b9104414f46cbf 100644 --- a/runtime/src/accounts.rs +++ b/runtime/src/accounts.rs @@ -814,6 +814,7 @@ impl Accounts { debug_verify: bool, epoch_schedule: &EpochSchedule, rent_collector: &RentCollector, + disable_rehash_for_rent_epoch: bool, ) -> u64 { let use_index = false; let is_startup = true; @@ -828,6 +829,7 @@ impl Accounts { epoch_schedule, rent_collector, is_startup, + disable_rehash_for_rent_epoch, ) .1 } @@ -847,6 +849,7 @@ impl Accounts { ignore_mismatch: bool, store_detailed_debug_info: bool, use_bg_thread_pool: bool, + disable_rehash_for_rent_epoch: bool, ) -> bool { if let Err(err) = self.accounts_db.verify_bank_hash_and_lamports_new( slot, @@ -859,6 +862,7 @@ impl Accounts { ignore_mismatch, store_detailed_debug_info, use_bg_thread_pool, + disable_rehash_for_rent_epoch, ) { warn!("verify_bank_hash failed: {:?}, slot: {}", err, slot); false diff --git a/runtime/src/accounts_background_service.rs b/runtime/src/accounts_background_service.rs index 9ba12f742dafe0..185228d3679ba7 100644 --- a/runtime/src/accounts_background_service.rs +++ b/runtime/src/accounts_background_service.rs @@ -244,6 +244,7 @@ impl SnapshotRequestHandler { rent_collector: snapshot_root_bank.rent_collector(), store_detailed_debug_info_on_failure: false, full_snapshot: None, + disable_rehash_for_rent_epoch: snapshot_root_bank.feature_set.is_active(&solana_sdk::feature_set::disable_rehash_for_rent_epoch::id()), }, ).unwrap(); assert_eq!(previous_hash, this_hash); diff --git a/runtime/src/accounts_db.rs b/runtime/src/accounts_db.rs index ad28f3c308b7bd..c21590f78888da 100644 --- a/runtime/src/accounts_db.rs +++ b/runtime/src/accounts_db.rs @@ -45,6 +45,7 @@ use { bank::Rewrites, cache_hash_data::CacheHashData, contains::Contains, + expected_rent_collection::{ExpectedRentCollection, SlotInfoInEpoch}, pubkey_bins::PubkeyBinCalculator24, read_only_accounts_cache::ReadOnlyAccountsCache, rent_collector::RentCollector, @@ -113,6 +114,8 @@ pub const DEFAULT_NUM_DIRS: u32 = 4; pub const PUBKEY_BINS_FOR_CALCULATING_HASHES: usize = 65536; pub const NUM_SCAN_PASSES_DEFAULT: usize = 2; +pub const TEST_DISABLE_REHASH_FOR_RENT_EPOCH: bool = true; + // Without chunks, we end up with 1 output vec for each outer snapshot storage. // This results in too many vectors to be efficient. // Chunks when scanning storages to calculate hashes. @@ -1792,22 +1795,26 @@ trait AppendVecScan: Send + Sync + Clone { /// These would have been captured in a fn from within the scan function. /// Some of these are constant across all pubkeys, some are constant across a slot. /// Some could be unique per pubkey. -struct ScanState<'a> { +struct ScanState<'a, T: Fn(Slot) -> Option + Sync + Send + Clone> { /// slot we're currently scanning current_slot: Slot, /// accumulated results accum: BinnedHashData, + /// max slot (inclusive) that we're calculating accounts hash on + max_slot_info: SlotInfoInEpoch, bin_calculator: &'a PubkeyBinCalculator24, bin_range: &'a Range, config: &'a CalcAccountsHashConfig<'a>, mismatch_found: Arc, + stats: &'a crate::accounts_hash::HashStats, + find_unskipped_slot: &'a T, filler_account_suffix: Option<&'a Pubkey>, range: usize, sort_time: Arc, pubkey_to_bin_index: usize, } -impl<'a> AppendVecScan for ScanState<'a> { +impl<'a, T: Fn(Slot) -> Option + Sync + Send + Clone> AppendVecScan for ScanState<'a, T> { fn set_slot(&mut self, slot: Slot) { self.current_slot = slot; } @@ -1836,6 +1843,24 @@ impl<'a> AppendVecScan for ScanState<'a> { }; let loaded_hash = loaded_account.loaded_hash(); + let new_hash = (!self.config.disable_rehash_for_rent_epoch) + .then(|| { + ExpectedRentCollection::maybe_rehash_skipped_rewrite( + loaded_account, + &loaded_hash, + pubkey, + self.current_slot, + self.config.epoch_schedule, + self.config.rent_collector, + self.stats, + &self.max_slot_info, + self.find_unskipped_slot, + self.filler_account_suffix, + ) + }) + .flatten(); + let loaded_hash = new_hash.unwrap_or(loaded_hash); + let source_item = CalculateHashIntermediate::new(loaded_hash, balance, *pubkey); if self.config.check_hash @@ -6236,6 +6261,8 @@ impl AccountsDb { let total_lamports = Mutex::::new(0); let stats = HashStats::default(); + let max_slot_info = SlotInfoInEpoch::new(max_slot, config.epoch_schedule); + let get_hashes = || { keys.par_chunks(chunks) .map(|pubkeys| { @@ -6268,7 +6295,23 @@ impl AccountsDb { .get_loaded_account() .and_then( |loaded_account| { + let find_unskipped_slot = |slot: Slot| { + self.find_unskipped_slot(slot, config.ancestors) + }; let loaded_hash = loaded_account.loaded_hash(); + let new_hash = (!config.disable_rehash_for_rent_epoch).then(||ExpectedRentCollection::maybe_rehash_skipped_rewrite( + &loaded_account, + &loaded_hash, + pubkey, + *slot, + config.epoch_schedule, + config.rent_collector, + &stats, + &max_slot_info, + find_unskipped_slot, + self.filler_account_suffix.as_ref(), + )).flatten(); + let loaded_hash = new_hash.unwrap_or(loaded_hash); let balance = loaded_account.lamports(); if config.check_hash && !self.is_filler_account(pubkey) { // this will not be supported anymore let computed_hash = @@ -6353,6 +6396,7 @@ impl AccountsDb { ancestors: &Ancestors, epoch_schedule: &EpochSchedule, rent_collector: &RentCollector, + disable_rehash_for_rent_epoch: bool, ) -> (Hash, u64) { self.update_accounts_hash_with_index_option( true, @@ -6364,6 +6408,7 @@ impl AccountsDb { epoch_schedule, rent_collector, false, + disable_rehash_for_rent_epoch, ) } @@ -6379,6 +6424,7 @@ impl AccountsDb { &EpochSchedule::default(), &RentCollector::default(), false, + TEST_DISABLE_REHASH_FOR_RENT_EPOCH, ) } @@ -6803,6 +6849,7 @@ impl AccountsDb { epoch_schedule: &EpochSchedule, rent_collector: &RentCollector, is_startup: bool, + disable_rehash_for_rent_epoch: bool, ) -> (Hash, u64) { let check_hash = false; let (hash, total_lamports) = self @@ -6819,6 +6866,7 @@ impl AccountsDb { rent_collector, store_detailed_debug_info_on_failure: false, full_snapshot: None, + disable_rehash_for_rent_epoch, }, expected_capitalization, ) @@ -6853,15 +6901,22 @@ impl AccountsDb { let range = bin_range.end - bin_range.start; let sort_time = Arc::new(AtomicU64::new(0)); + let find_unskipped_slot = |slot: Slot| self.find_unskipped_slot(slot, config.ancestors); + + let max_slot_info = + SlotInfoInEpoch::new(storage.max_slot_inclusive(), config.epoch_schedule); let scanner = ScanState { current_slot: Slot::default(), accum: BinnedHashData::default(), bin_calculator: &bin_calculator, config, mismatch_found: mismatch_found.clone(), + max_slot_info, + find_unskipped_slot: &find_unskipped_slot, filler_account_suffix, range, bin_range, + stats, sort_time: sort_time.clone(), pubkey_to_bin_index: 0, }; @@ -7042,6 +7097,7 @@ impl AccountsDb { } /// Only called from startup or test code. + #[allow(clippy::too_many_arguments)] pub fn verify_bank_hash_and_lamports( &self, slot: Slot, @@ -7052,6 +7108,7 @@ impl AccountsDb { rent_collector: &RentCollector, can_cached_slot_be_unflushed: bool, use_bg_thread_pool: bool, + disable_rehash_for_rent_epoch: bool, ) -> Result<(), BankHashVerificationError> { self.verify_bank_hash_and_lamports_new( slot, @@ -7064,6 +7121,7 @@ impl AccountsDb { false, false, use_bg_thread_pool, + disable_rehash_for_rent_epoch, ) } @@ -7081,6 +7139,7 @@ impl AccountsDb { ignore_mismatch: bool, store_hash_raw_data_for_debug: bool, use_bg_thread_pool: bool, + disable_rehash_for_rent_epoch: bool, ) -> Result<(), BankHashVerificationError> { use BankHashVerificationError::*; @@ -7100,6 +7159,7 @@ impl AccountsDb { rent_collector, store_detailed_debug_info_on_failure: store_hash_raw_data_for_debug, full_snapshot: None, + disable_rehash_for_rent_epoch, }, None, )?; @@ -11083,13 +11143,15 @@ pub mod tests { latest_slot, &ancestors, &EpochSchedule::default(), - &RentCollector::default() + &RentCollector::default(), + TEST_DISABLE_REHASH_FOR_RENT_EPOCH, ), accounts.update_accounts_hash( latest_slot, &ancestors, &EpochSchedule::default(), - &RentCollector::default() + &RentCollector::default(), + TEST_DISABLE_REHASH_FOR_RENT_EPOCH, ) ); } @@ -11373,6 +11435,7 @@ pub mod tests { &Ancestors::default(), &EpochSchedule::default(), &RentCollector::default(), + TEST_DISABLE_REHASH_FOR_RENT_EPOCH, ); let accounts = f(accounts, current_slot); @@ -11394,6 +11457,7 @@ pub mod tests { &RentCollector::default(), false, false, + TEST_DISABLE_REHASH_FOR_RENT_EPOCH, ) .unwrap(); } @@ -11729,6 +11793,7 @@ pub mod tests { rent_collector: &RENT_COLLECTOR, store_detailed_debug_info_on_failure: false, full_snapshot: None, + disable_rehash_for_rent_epoch: TEST_DISABLE_REHASH_FOR_RENT_EPOCH, } } } @@ -11799,6 +11864,7 @@ pub mod tests { &RentCollector::default(), false, false, + TEST_DISABLE_REHASH_FOR_RENT_EPOCH, ), Ok(_) ); @@ -11814,6 +11880,7 @@ pub mod tests { &RentCollector::default(), false, false, + TEST_DISABLE_REHASH_FOR_RENT_EPOCH, ), Err(MissingBankHash) ); @@ -11838,6 +11905,7 @@ pub mod tests { &RentCollector::default(), false, false, + TEST_DISABLE_REHASH_FOR_RENT_EPOCH, ), Err(MismatchedBankHash) ); @@ -11868,6 +11936,7 @@ pub mod tests { &RentCollector::default(), false, false, + TEST_DISABLE_REHASH_FOR_RENT_EPOCH, ), Ok(_) ); @@ -11891,12 +11960,13 @@ pub mod tests { &RentCollector::default(), false, false, + TEST_DISABLE_REHASH_FOR_RENT_EPOCH, ), Ok(_) ); assert_matches!( - db.verify_bank_hash_and_lamports(some_slot, &ancestors, 10, true, &EpochSchedule::default(), &RentCollector::default(), false, false), + db.verify_bank_hash_and_lamports(some_slot, &ancestors, 10, true, &EpochSchedule::default(), &RentCollector::default(), false, false, TEST_DISABLE_REHASH_FOR_RENT_EPOCH), Err(MismatchedTotalLamports(expected, actual)) if expected == 2 && actual == 10 ); } @@ -11925,6 +11995,7 @@ pub mod tests { &RentCollector::default(), false, false, + TEST_DISABLE_REHASH_FOR_RENT_EPOCH, ), Ok(_) ); @@ -11970,6 +12041,7 @@ pub mod tests { &RentCollector::default(), false, false, + TEST_DISABLE_REHASH_FOR_RENT_EPOCH, ), Err(MismatchedBankHash) ); @@ -12579,6 +12651,7 @@ pub mod tests { &no_ancestors, &EpochSchedule::default(), &RentCollector::default(), + TEST_DISABLE_REHASH_FOR_RENT_EPOCH, ); accounts .verify_bank_hash_and_lamports( @@ -12590,6 +12663,7 @@ pub mod tests { &RentCollector::default(), false, false, + TEST_DISABLE_REHASH_FOR_RENT_EPOCH, ) .unwrap(); @@ -12604,6 +12678,7 @@ pub mod tests { &RentCollector::default(), false, false, + TEST_DISABLE_REHASH_FOR_RENT_EPOCH, ) .unwrap(); diff --git a/runtime/src/accounts_hash.rs b/runtime/src/accounts_hash.rs index 4aad51756f34bf..65b1cd263479ac 100644 --- a/runtime/src/accounts_hash.rs +++ b/runtime/src/accounts_hash.rs @@ -57,6 +57,8 @@ pub struct CalcAccountsHashConfig<'a> { pub store_detailed_debug_info_on_failure: bool, /// `Some` if this is an incremental snapshot which only hashes slots since the base full snapshot pub full_snapshot: Option, + /// temporarily here for feature activation #28934 + pub disable_rehash_for_rent_epoch: bool, } impl<'a> CalcAccountsHashConfig<'a> { diff --git a/runtime/src/bank.rs b/runtime/src/bank.rs index f1a63d1d0b2ba6..c5a6ed9f9eca6b 100644 --- a/runtime/src/bank.rs +++ b/runtime/src/bank.rs @@ -6640,6 +6640,9 @@ impl Bank { let cap = self.capitalization(); let epoch_schedule = self.epoch_schedule(); let rent_collector = self.rent_collector(); + let disable_rehash_for_rent_epoch = self + .feature_set + .is_active(&solana_sdk::feature_set::disable_rehash_for_rent_epoch::id()); if config.run_in_background { let ancestors = ancestors.clone(); let accounts = Arc::clone(accounts); @@ -6665,6 +6668,7 @@ impl Bank { config.store_hash_raw_data_for_debug, // true to run using bg thread pool true, + disable_rehash_for_rent_epoch, ); accounts_ .accounts_db @@ -6688,6 +6692,7 @@ impl Bank { config.store_hash_raw_data_for_debug, // fg is waiting for this to run, so we can use the fg thread pool false, + disable_rehash_for_rent_epoch, ); self.set_initial_accounts_hash_verification_completed(); result @@ -6790,6 +6795,8 @@ impl Bank { debug_verify, self.epoch_schedule(), &self.rent_collector, + self.feature_set + .is_active(&solana_sdk::feature_set::disable_rehash_for_rent_epoch::id()), ) } @@ -6853,6 +6860,8 @@ impl Bank { self.epoch_schedule(), &self.rent_collector, is_startup, + self.feature_set + .is_active(&solana_sdk::feature_set::disable_rehash_for_rent_epoch::id()), ); if total_lamports != self.capitalization() { datapoint_info!( @@ -6879,6 +6888,9 @@ impl Bank { self.epoch_schedule(), &self.rent_collector, is_startup, + self.feature_set.is_active( + &solana_sdk::feature_set::disable_rehash_for_rent_epoch::id(), + ), ); } diff --git a/runtime/src/expected_rent_collection.rs b/runtime/src/expected_rent_collection.rs new file mode 100644 index 00000000000000..3b4f095af2b345 --- /dev/null +++ b/runtime/src/expected_rent_collection.rs @@ -0,0 +1,1309 @@ +//! Logic for determining when rent should have been collected or a rewrite would have occurred for an account. +use { + crate::{ + accounts_db::AccountsDb, + accounts_hash::HashStats, + bank::{Bank, PartitionIndex, Rewrites}, + rent_collector::{RentCollector, RentResult}, + }, + solana_sdk::{ + account::{AccountSharedData, ReadableAccount, WritableAccount}, + clock::{Epoch, Slot}, + epoch_schedule::EpochSchedule, + hash::Hash, + pubkey::Pubkey, + }, + std::sync::atomic::Ordering, +}; + +#[derive(Debug, PartialEq, Eq)] +pub struct ExpectedRentCollection { + partition_from_pubkey: PartitionIndex, + epoch_of_max_storage_slot: Epoch, + partition_index_from_max_slot: PartitionIndex, + first_slot_in_max_epoch: Slot, + // these are the only 2 fields used by downstream calculations at the moment. + // the rest are here for debugging + expected_rent_collection_slot_max_epoch: Slot, + rent_epoch: Epoch, +} + +/* +A goal is to skip rewrites to improve performance. +Reasons this file exists: +A. When we encounter skipped-rewrite account data as part of a load, we may need to update rent_epoch. +B. When we encounter skipped-rewrite account data during accounts hash calc, the saved hash will be incorrect if we skipped a rewrite. + We need slot and rent_epoch to recalculate a new hash. + +cases of rent collection: + +setup assumptions: +pubkey = abc +slots_per_epoch = 432,000 +pubkey_partition_index of 'abc' = 80 + +So, rent will be collected or a rewrite is expected to occur: + each time a slot's pubkey_partition is == [footnote1] pubkey_partition_index within an epoch. [footnote2] + + If we skip rewrites, then pubkey's account data will not be rewritten when its rent collecion partition index occurs. + However, later we need to get a hash value for the most recent update to this account. + That leads us to the purpose of this file. + To calculate a hash for account data, we need to know: + 1. the slot the account was written in + 2. the rent_epoch field of the account, telling us which epoch is the next time we should evaluate rent on this account + If we did not perform a rewrite, then the account in the append vec it was last written in has: + 1. The wrong slot, since the append vec is not associated with the slot that the rewrite would have occurred. + 2. The wrong rent_epoch since the account was not rewritten with a newer rent_epoch [footnote3] + +Reason A for this file's existence: +When we encounter the skipped-rewrite account data as part of a load, we may need to update rent_epoch. +Many operations work like this: + 1. read account + 2. add lamports (ex: reward was paid) + 3. write account +If the account is written with the WRONG rent_epoch field, then we will store an 'incorrect' rent_epoch field and the hash will be incorrect. +So, at (1. read account), we must FIX the rent_epoch to be as it would be if the rewrite would have occurred. + +Reason B for this file's existence: +When we encounter the skipped-rewrite account data during accounts hash calc, the saved hash will be incorrect if we skipped a rewrite. +We must compute the correct rent_epoch and slot and recompute the hash that we would have gotten if we would have done the rewrite. + +Both reasons result in the need for the same answer. +Given +1. pubkey +2. pubkey's account data +3. the slot the data was loaded from (storage_slot) +4. the highest_root caller cares about + +We also need a RentCollector and EpochSchedule for the highest root the caller cares about. +With these: +1. can calculate partition_index of +1.a. highest_root (slot) +1.b. storage_slot + +We also need : +fn find_unskipped_slot(slot) -> root +which can return the lowest root >= slot - 1 (this is why 'historical_roots' is necessary) Also see [footnote1]. + +Given these inputs, we can determine the correct slot and rent_epoch where we SHOULD have found this account's data and also compute the hash that we SHOULD have stored at that slot. +Note that a slot could be (-432k..infinite) slots and (-1..infinite) epochs relative to the expected rent collection slot. +Examples: +1. +storage_slot: 1 +highest_root: 1 +since pubkey_partition_index is 80 and hasn't been reached, the current account's data is CORRECT +Every highest_root < 80 is this same result. + +2. +storage_slot: 1 +highest_root: 79 +since pubkey_partition_index is 80 and hasn't been reached, the current account's data is CORRECT + +3. +storage_slot: 1 (partition index = 1) +highest_root: 80 (partition index = 80) +since pubkey_partition_index is 80 and it HAS been reached, but the account data is from slot 1, then the account's data is INcorrect +the account's hash is incorrect and needs to be recalculated as of slot 80 +rent_epoch will be 0 +Every highest_root >= 80 and < 432k + 80 is this same result + +4. +storage_slot: 1 (partition index = 1) +find_unskipped_slot(80) returns 81 since slot 80 was SKIPPED +highest_root: 81 (partition index = 81) +since pubkey_partition_index is 80 and it HAS been reached, but the account data is from slot 1, then the account's data is INcorrect +the account's hash is incorrect and needs to be recalculated as of slot 81 (note 81 because 80 was skipped) +rent_epoch will be 0 +Every highest_root >= 80 and < 432k + 80 is this same result + +5. +storage_slot: 1 (partition index = 1) (epoch 0) +highest_root: 432k + 1 (partition index = 1) (epoch 1) +since pubkey_partition_index is 80 and it HAS been reached, but the account data is from slot 1, then the account's data is INcorrect +the account's hash is incorrect and needs to be recalculated as of slot 80 in epoch 0 +partition_index 80 has NOT been reached in epoch 1 +so, rent_epoch will be 0 +Every highest_root >= 80 and < 432k + 80 is this same result + +6. +storage_slot: 1 (partition index = 1) (epoch 0) +highest_root: 432k + 80 (partition index = 80) (epoch 1) +since pubkey_partition_index is 80 and it HAS been reached, but the account data is from slot 1, then the account's data is INcorrect +the account's hash is incorrect and needs to be recalculated as of slot 432k + 80 in epoch 1 +partition_index 80 HAS been reached in epoch 1 +so, rent_epoch will be 1 +Every highest_root >= 432k + 80 and < 432k * 2 + 80 is this same result + +7. +storage_slot: 1 (partition index = 1) (epoch 0) +find_unskipped_slot(432k + 80) returns 432k + 81 since slot 432k + 80 was SKIPPED +highest_root: 432k + 81 (partition index = 81) (epoch 1) +since pubkey_partition_index is 80 and it HAS been reached, but the account data is from slot 1, then the account's data is INcorrect +the account's hash is incorrect and needs to be recalculated as of slot 432k + 81 in epoch 1 (slot 432k + 80 was skipped) +partition_index 80 HAS been reached in epoch 1 +so, rent_epoch will be 1 +Every highest_root >= 432k + 81 and < 432k * 2 + 80 is this same result + +8. +storage_slot: 1 (partition index = 1) (epoch 0) +highest_root: 432k * 2 + 1 (partition index = 1) (epoch 2) +since pubkey_partition_index is 80 and it HAS been reached, but the account data is from slot 1, then the account's data is INcorrect +the account's hash is incorrect and needs to be recalculated as of slot 432k + 80 in epoch 1 +partition_index 80 has NOT been reached in epoch 2 +so, rent_epoch will 1 +Every highest_root >= 432k + 80 and < 432k * 2 + 80 is this same result + +9. +storage_slot: 1 (partition index = 1) (epoch 0) +highest_root: 432k * 2 + 80 (partition index = 80) (epoch 2) +since pubkey_partition_index is 80 and it HAS been reached, but the account data is from slot 1, then the account's data is INcorrect +the account's hash is incorrect and needs to be recalculated as of slot 432k * 2 + 80 in epoch 2 +partition_index 80 HAS been reached in epoch 2 +so, rent_epoch will be 2 +Every highest_root >= 432k * 2 + 80 and < 432k * 3 + 80 is this same result + +[footnote1:] + "each time a slot's pubkey_partition is == [footnote1] pubkey_partition_index within an epoch." + Due to skipped slots, this is not true. + In reality, it is: + the first slot where a slot's pubkey_partition >= pubkey_partition_index - 1. + So, simply, if the pubkey_partition for our rent is 80, then that slot occurs at these slot #s: + Slot:........... Epoch: + 0 + 80 for epoch 0 + 432,000 + 80 for epoch 1 + 432,000 * 2 + 80 for epoch 2 + ... + However, sometimes we skip slots. So, just considering epoch 0: + Normal, not skipping any slots: + slot 78 is a root + slot 79 is a root + slot 80 is a root (account is rewritten/rent collected here) + Scenario 1: + slot 78 is a root + slot 79 is skipped/not a root + slot 80 is a root (account is rewritten/rent collected here along with accounts from slot 79) + Scenario 2: + slot 78 is a root + slot 79 is skipped/not a root + slot 80 is skipped/not a root + slot 81 is a root (account is rewritten/rent collected here because of slot 80, along with accounts from slots 79 and 81) + This gets us to looking for: + the first slot where a slot's pubkey_partition >= pubkey_partition_index - 1. + +[footnote2:] + Describing partition_index within an epoch: + example: + slot=0 is epoch=0, partition_index=0 + slot=1 is epoch=0, partition_index=1 + slot=431,999 is epoch=0, partition_index=431,999 + slot=432,000 is epoch=1, partition_index=432,000 + This is NOT technically accurate because of first_normal_slot, but we'll ignore that. + EpochSchedule::get_epoch_and_slot_index(slot) calculates epoch and partition_index from slot. + +[footnote3:] + when we do a rewrite of account data, only this data changes: + 1. rent_epoch + 2. computed hash value (which is a function of (data, lamports, executable, owner, rent_epoch, pubkey) + slot + 3. into a new append vec that is associated with the slot# + +*/ + +/// specify a slot +/// and keep track of epoch info for that slot +/// The idea is that algorithms often iterate over a storage slot or over a max/bank slot. +/// The epoch info for that slot will be fixed for many pubkeys, so save the calculated results. +/// There are 2 slots required for rent collection algorithms. Some callers have storage slot fixed +/// while others have max/bank slot fixed. 'epoch_info' isn't always needed, so it is optionally +/// specified by caller and only used by callee if necessary. +#[derive(Default, Copy, Clone)] +pub struct SlotInfoInEpoch { + /// the slot + slot: Slot, + /// possible info about this slot + epoch_info: Option, +} + +/// epoch info for a slot +#[derive(Default, Copy, Clone)] +pub struct SlotInfoInEpochInner { + /// epoch of the slot + epoch: Epoch, + /// partition index of the slot within the epoch + partition_index: PartitionIndex, + /// number of slots in this epoch + slots_in_epoch: Slot, +} + +impl SlotInfoInEpoch { + /// create, populating epoch info + pub fn new(slot: Slot, epoch_schedule: &EpochSchedule) -> Self { + let mut result = Self::new_small(slot); + result.epoch_info = Some(result.get_epoch_info(epoch_schedule)); + result + } + /// create, without populating epoch info + pub fn new_small(slot: Slot) -> Self { + SlotInfoInEpoch { + slot, + ..SlotInfoInEpoch::default() + } + } + /// get epoch info by returning already calculated or by calculating it now + pub fn get_epoch_info(&self, epoch_schedule: &EpochSchedule) -> SlotInfoInEpochInner { + if let Some(inner) = &self.epoch_info { + *inner + } else { + let (epoch, partition_index) = epoch_schedule.get_epoch_and_slot_index(self.slot); + SlotInfoInEpochInner { + epoch, + partition_index, + slots_in_epoch: epoch_schedule.get_slots_in_epoch(epoch), + } + } + } +} + +impl ExpectedRentCollection { + /// 'account' is being loaded from 'storage_slot' in 'bank_slot' + /// adjusts 'account.rent_epoch' if we skipped the last rewrite on this account + #[allow(dead_code)] + pub(crate) fn maybe_update_rent_epoch_on_load( + account: &mut AccountSharedData, + storage_slot: &SlotInfoInEpoch, + bank_slot: &SlotInfoInEpoch, + epoch_schedule: &EpochSchedule, + rent_collector: &RentCollector, + pubkey: &Pubkey, + rewrites_skipped_this_slot: &Rewrites, + ) { + let result = Self::get_corrected_rent_epoch_on_load( + account, + storage_slot, + bank_slot, + epoch_schedule, + rent_collector, + pubkey, + rewrites_skipped_this_slot, + ); + if let Some(rent_epoch) = result { + account.set_rent_epoch(rent_epoch); + } + } + + /// 'account' is being loaded + /// we may need to adjust 'account.rent_epoch' if we skipped the last rewrite on this account + /// returns Some(rent_epoch) if an adjustment needs to be made + /// returns None if the account is up to date + fn get_corrected_rent_epoch_on_load( + account: &AccountSharedData, + storage_slot: &SlotInfoInEpoch, + bank_slot: &SlotInfoInEpoch, + epoch_schedule: &EpochSchedule, + rent_collector: &RentCollector, + pubkey: &Pubkey, + rewrites_skipped_this_slot: &Rewrites, + ) -> Option { + let next_epoch = match rent_collector.calculate_rent_result( + pubkey, account, None, // filler_account_suffix + // Skipping rewrites is not compatible with the below feature. + // We will not skip rewrites until the feature is activated. + false, // preserve_rent_epoch_for_rent_exempt_accounts + ) { + RentResult::LeaveAloneNoRent => return None, + RentResult::CollectRent { + new_rent_epoch, + rent_due: 0, + } => new_rent_epoch, + // Rent is due on this account in this epoch, + // so we did not skip a rewrite. + RentResult::CollectRent { .. } => return None, + }; + { + // grab epoch infno for bank slot and storage slot + let bank_info = bank_slot.get_epoch_info(epoch_schedule); + let (current_epoch, partition_from_current_slot) = + (bank_info.epoch, bank_info.partition_index); + let storage_info = storage_slot.get_epoch_info(epoch_schedule); + let (storage_epoch, storage_slot_partition) = + (storage_info.epoch, storage_info.partition_index); + let partition_from_pubkey = + Bank::partition_from_pubkey(pubkey, bank_info.slots_in_epoch); + let mut possibly_update = true; + if current_epoch == storage_epoch { + // storage is in same epoch as bank + if partition_from_pubkey > partition_from_current_slot { + // we haven't hit the slot's rent collection slot yet, and the storage was within this slot, so do not update + possibly_update = false; + } + } else if current_epoch == storage_epoch + 1 { + // storage is in the previous epoch + if storage_slot_partition >= partition_from_pubkey + && partition_from_pubkey > partition_from_current_slot + { + // we did a rewrite in last epoch and we have not yet hit the rent collection slot in THIS epoch + possibly_update = false; + } + } // if more than 1 epoch old, then we need to collect rent because we clearly skipped it. + + let rewrites_skipped_this_pubkey_this_slot = || { + rewrites_skipped_this_slot + .read() + .unwrap() + .contains_key(pubkey) + }; + let rent_epoch = account.rent_epoch(); + if possibly_update && rent_epoch == 0 && current_epoch > 1 { + if rewrites_skipped_this_pubkey_this_slot() { + return Some(next_epoch); + } else { + // we know we're done + return None; + } + } + + // if an account was written >= its rent collection slot within the last epoch worth of slots, then we don't want to update it here + if possibly_update && rent_epoch < current_epoch { + let new_rent_epoch = if partition_from_pubkey < partition_from_current_slot + || (partition_from_pubkey == partition_from_current_slot + && rewrites_skipped_this_pubkey_this_slot()) + { + // partition_from_pubkey < partition_from_current_slot: + // we already would have done a rewrite on this account IN this epoch + next_epoch + } else { + // should have done rewrite up to last epoch + // we have not passed THIS epoch's rewrite slot yet, so the correct 'rent_epoch' is previous + next_epoch.saturating_sub(1) + }; + if rent_epoch != new_rent_epoch { + // the point of this function: + // 'new_rent_epoch' is the correct rent_epoch that the account would have if we had done rewrites + return Some(new_rent_epoch); + } + } else if !possibly_update { + // This is a non-trivial lookup. Would be nice to skip this. + assert!(!rewrites_skipped_this_pubkey_this_slot(), "did not update rent_epoch: {}, new value for rent_epoch: {}, old: {}, current epoch: {}", pubkey, rent_epoch, next_epoch, current_epoch); + } + } + None + } + + #[allow(clippy::too_many_arguments)] + /// it is possible 0.. rewrites were skipped on this account + /// if so, return Some(correct hash as of 'storage_slot') + /// if 'loaded_hash' is CORRECT, return None + pub fn maybe_rehash_skipped_rewrite( + loaded_account: &impl ReadableAccount, + loaded_hash: &Hash, + pubkey: &Pubkey, + storage_slot: Slot, + epoch_schedule: &EpochSchedule, + rent_collector: &RentCollector, + stats: &HashStats, + max_slot_in_storages_inclusive: &SlotInfoInEpoch, + find_unskipped_slot: impl Fn(Slot) -> Option, + filler_account_suffix: Option<&Pubkey>, + ) -> Option { + use solana_measure::measure::Measure; + let mut m = Measure::start("rehash_calc_us"); + let expected = ExpectedRentCollection::new( + pubkey, + loaded_account, + storage_slot, + epoch_schedule, + rent_collector, + max_slot_in_storages_inclusive, + find_unskipped_slot, + filler_account_suffix, + ); + + m.stop(); + stats.rehash_calc_us.fetch_add(m.as_us(), Ordering::Relaxed); + let expected = match expected { + None => { + // use the previously calculated hash + return None; + } + Some(expected) => expected, + }; + let mut m = Measure::start("rehash_hash_us"); + let recalc_hash = AccountsDb::hash_account_with_rent_epoch( + expected.expected_rent_collection_slot_max_epoch, + loaded_account, + pubkey, + expected.rent_epoch, + ); + m.stop(); + stats.rehash_hash_us.fetch_add(m.as_us(), Ordering::Relaxed); + if &recalc_hash == loaded_hash { + // unnecessary calculation occurred + stats.rehash_unnecessary.fetch_add(1, Ordering::Relaxed); + return None; + } + stats.rehash_required.fetch_add(1, Ordering::Relaxed); + + // recomputed based on rent collection/rewrite slot + // Rent would have been collected AT 'expected_rent_collection_slot', so hash according to that slot. + // Note that a later storage (and slot) may contain this same pubkey. In that case, that newer hash will make this one irrelevant. + Some(recalc_hash) + } + + /// figure out whether the account stored at 'storage_slot' would have normally been rewritten at a slot that has already occurred: after 'storage_slot' but <= 'max_slot_in_storages_inclusive' + /// returns Some(...) if the account would have normally been rewritten + /// returns None if the account was updated wrt rent already or if it is known that there must exist a future rewrite of this account (for example, non-zero rent is due) + fn new( + pubkey: &Pubkey, + loaded_account: &impl ReadableAccount, + storage_slot: Slot, + epoch_schedule: &EpochSchedule, + rent_collector_max_epoch: &RentCollector, + max_slot_in_storages_inclusive: &SlotInfoInEpoch, + find_unskipped_slot: impl Fn(Slot) -> Option, + filler_account_suffix: Option<&Pubkey>, + ) -> Option { + let mut rent_collector = rent_collector_max_epoch; + let SlotInfoInEpochInner { + epoch: epoch_of_max_storage_slot, + partition_index: partition_index_from_max_slot, + slots_in_epoch: slots_per_epoch_max_epoch, + } = max_slot_in_storages_inclusive.get_epoch_info(epoch_schedule); + let mut partition_from_pubkey = + crate::bank::Bank::partition_from_pubkey(pubkey, slots_per_epoch_max_epoch); + // now, we have to find the root that is >= the slot where this pubkey's rent would have been collected + let first_slot_in_max_epoch = + max_slot_in_storages_inclusive.slot - partition_index_from_max_slot; + let mut expected_rent_collection_slot_max_epoch = + first_slot_in_max_epoch + partition_from_pubkey; + let calculated_from_index_expected_rent_collection_slot_max_epoch = + expected_rent_collection_slot_max_epoch; + if expected_rent_collection_slot_max_epoch <= max_slot_in_storages_inclusive.slot { + // may need to find a valid root + if let Some(find) = + find_unskipped_slot(calculated_from_index_expected_rent_collection_slot_max_epoch) + { + // found a root that is >= expected_rent_collection_slot. + expected_rent_collection_slot_max_epoch = find; + } + } + let mut use_previous_epoch_rent_collector = false; + if expected_rent_collection_slot_max_epoch > max_slot_in_storages_inclusive.slot { + // max slot has not hit the slot in the max epoch where we would have collected rent yet, so the most recent rent-collected rewrite slot for this pubkey would be in the previous epoch + let previous_epoch = epoch_of_max_storage_slot.saturating_sub(1); + let slots_per_epoch_previous_epoch = epoch_schedule.get_slots_in_epoch(previous_epoch); + expected_rent_collection_slot_max_epoch = + if slots_per_epoch_previous_epoch == slots_per_epoch_max_epoch { + // partition index remains the same + calculated_from_index_expected_rent_collection_slot_max_epoch + .saturating_sub(slots_per_epoch_max_epoch) + } else { + // the newer epoch has a different # of slots, so the partition index will be different in the prior epoch + partition_from_pubkey = crate::bank::Bank::partition_from_pubkey( + pubkey, + slots_per_epoch_previous_epoch, + ); + first_slot_in_max_epoch + .saturating_sub(slots_per_epoch_previous_epoch) + .saturating_add(partition_from_pubkey) + }; + // since we are looking a different root, we have to call this again + if let Some(find) = find_unskipped_slot(expected_rent_collection_slot_max_epoch) { + // found a root (because we have a storage) that is >= expected_rent_collection_slot. + expected_rent_collection_slot_max_epoch = find; + } + + // since we have not hit the slot in the rent collector's epoch yet, we need to collect rent according to the previous epoch's rent collector. + use_previous_epoch_rent_collector = true; + } + + // the slot we're dealing with is where we expected the rent to be collected for this pubkey, so use what is in this slot + // however, there are cases, such as adjusting the clock, where we store the account IN the same slot, but we do so BEFORE we collect rent. We later store the account AGAIN for rewrite/rent collection. + // So, if storage_slot == expected_rent_collection_slot..., then we MAY have collected rent or may not have. So, it has to be > + // rent_epoch=0 is a special case + if storage_slot > expected_rent_collection_slot_max_epoch + || loaded_account.rent_epoch() == 0 + { + // no need to update hash + return None; + } + + let rent_collector_previous; + if use_previous_epoch_rent_collector { + // keep in mind the storage slot could be 0..inf epochs in the past + // we want to swap the rent collector for one whose epoch is the previous epoch + let mut rent_collector_temp = rent_collector.clone(); + rent_collector_temp.epoch = rent_collector.epoch.saturating_sub(1); // previous epoch + rent_collector_previous = Some(rent_collector_temp); + rent_collector = rent_collector_previous.as_ref().unwrap(); + } + + // ask the rent collector what rent should be collected. + // Rent collector knows the current epoch. + let rent_result = rent_collector.calculate_rent_result( + pubkey, + loaded_account, + filler_account_suffix, + // Skipping rewrites is not compatible with the below feature. + // We will not skip rewrites until the feature is activated. + false, // preserve_rent_epoch_for_rent_exempt_accounts + ); + let current_rent_epoch = loaded_account.rent_epoch(); + let new_rent_epoch = match rent_result { + RentResult::CollectRent { + new_rent_epoch: next_epoch, + rent_due, + } => { + if next_epoch > current_rent_epoch && rent_due != 0 { + // this is an account that would have had rent collected since this storage slot, so just use the hash we have since there must be a newer version of this account already in a newer slot + // It would be a waste of time to recalcluate a hash. + return None; + } + std::cmp::max(next_epoch, current_rent_epoch) + } + RentResult::LeaveAloneNoRent => { + // rent_epoch is not updated for this condition + // But, a rewrite WOULD HAVE occured at the expected slot. + // So, fall through with same rent_epoch, but we will have already calculated 'expected_rent_collection_slot_max_epoch' + current_rent_epoch + } + }; + + if expected_rent_collection_slot_max_epoch == storage_slot + && new_rent_epoch == loaded_account.rent_epoch() + { + // no rewrite would have occurred + return None; + } + + Some(Self { + partition_from_pubkey, + epoch_of_max_storage_slot, + partition_index_from_max_slot, + first_slot_in_max_epoch, + expected_rent_collection_slot_max_epoch, + rent_epoch: new_rent_epoch, + }) + } +} + +#[cfg(test)] +pub mod tests { + use { + super::*, + solana_sdk::{ + account::{AccountSharedData, WritableAccount}, + genesis_config::GenesisConfig, + }, + }; + + #[test] + fn test_expected_rent_collection() { + solana_logger::setup(); + let pubkey = Pubkey::new(&[5; 32]); + let owner = solana_sdk::pubkey::new_rand(); + let mut account = AccountSharedData::new(1, 0, &owner); + let max_slot_in_storages_inclusive = 0; + let epoch_schedule = EpochSchedule::default(); + let first_normal_slot = epoch_schedule.first_normal_slot; + let storage_slot = first_normal_slot; + let epoch = epoch_schedule.get_epoch(storage_slot); + assert_eq!( + (epoch, 0), + epoch_schedule.get_epoch_and_slot_index(storage_slot) + ); + let genesis_config = GenesisConfig::default(); + let mut rent_collector = RentCollector::new( + epoch, + epoch_schedule, + genesis_config.slots_per_year(), + genesis_config.rent, + ); + rent_collector.rent.lamports_per_byte_year = 0; // temporarily disable rent + let find_unskipped_slot = Some; + // slot in current epoch + let result = ExpectedRentCollection::new( + &pubkey, + &account, + storage_slot, + &epoch_schedule, + &rent_collector, + &SlotInfoInEpoch::new(max_slot_in_storages_inclusive, &epoch_schedule), + find_unskipped_slot, + None, + ); + assert!(result.is_none()); + + let slots_per_epoch = 432_000; + assert_eq!( + slots_per_epoch, + epoch_schedule.get_slots_in_epoch(epoch_schedule.get_epoch(storage_slot)) + ); + let partition_index_max_inclusive = slots_per_epoch - 1; + account.set_rent_epoch(rent_collector.epoch); + // several epochs ahead of now + // first slot of new epoch is max slot EXclusive + // so last slot of prior epoch is max slot INclusive + let max_slot_in_storages_inclusive = slots_per_epoch * 3 + first_normal_slot - 1; + rent_collector.epoch = epoch_schedule.get_epoch(max_slot_in_storages_inclusive); + let partition_from_pubkey = 8470; // function of 432k slots and 'pubkey' above + let first_slot_in_max_epoch = 1388256; + let expected_rent_collection_slot_max_epoch = + first_slot_in_max_epoch + partition_from_pubkey; + let result = ExpectedRentCollection::new( + &pubkey, + &account, + storage_slot, + &epoch_schedule, + &rent_collector, + &SlotInfoInEpoch::new(max_slot_in_storages_inclusive, &epoch_schedule), + find_unskipped_slot, + None, + ); + assert_eq!( + result, + Some(ExpectedRentCollection { + partition_from_pubkey, + epoch_of_max_storage_slot: rent_collector.epoch, + partition_index_from_max_slot: partition_index_max_inclusive, + first_slot_in_max_epoch, + expected_rent_collection_slot_max_epoch, + rent_epoch: rent_collector.epoch, + }) + ); + + // LeaveAloneNoRent + for leave_alone in [true, false] { + account.set_executable(leave_alone); + let result = ExpectedRentCollection::new( + &pubkey, + &account, + expected_rent_collection_slot_max_epoch, + &epoch_schedule, + &rent_collector, + &SlotInfoInEpoch::new(max_slot_in_storages_inclusive, &epoch_schedule), + find_unskipped_slot, + None, + ); + assert_eq!( + result, + (!leave_alone).then(|| ExpectedRentCollection { + partition_from_pubkey, + epoch_of_max_storage_slot: rent_collector.epoch, + partition_index_from_max_slot: partition_index_max_inclusive, + first_slot_in_max_epoch, + expected_rent_collection_slot_max_epoch, + rent_epoch: rent_collector.epoch, + }), + "leave_alone: {}", + leave_alone + ); + } + + // storage_slot > expected_rent_collection_slot_max_epoch + // if greater, we return None + for greater in [false, true] { + let result = ExpectedRentCollection::new( + &pubkey, + &account, + expected_rent_collection_slot_max_epoch + u64::from(greater), + &epoch_schedule, + &rent_collector, + &SlotInfoInEpoch::new(max_slot_in_storages_inclusive, &epoch_schedule), + find_unskipped_slot, + None, + ); + assert_eq!( + result, + (!greater).then(|| ExpectedRentCollection { + partition_from_pubkey, + epoch_of_max_storage_slot: rent_collector.epoch, + partition_index_from_max_slot: partition_index_max_inclusive, + first_slot_in_max_epoch, + expected_rent_collection_slot_max_epoch, + rent_epoch: rent_collector.epoch, + }) + ); + } + + // test rewrite would have occurred in previous epoch from max_slot_in_storages_inclusive's epoch + // the change is in 'rent_epoch' returned in 'expected' + for previous_epoch in [false, true] { + let result = ExpectedRentCollection::new( + &pubkey, + &account, + expected_rent_collection_slot_max_epoch, + &epoch_schedule, + &rent_collector, + &SlotInfoInEpoch::new( + max_slot_in_storages_inclusive + + if previous_epoch { slots_per_epoch } else { 0 }, + &epoch_schedule, + ), + find_unskipped_slot, + None, + ); + let epoch_delta = u64::from(previous_epoch); + let slot_delta = epoch_delta * slots_per_epoch; + assert_eq!( + result, + Some(ExpectedRentCollection { + partition_from_pubkey, + epoch_of_max_storage_slot: rent_collector.epoch + epoch_delta, + partition_index_from_max_slot: partition_index_max_inclusive, + first_slot_in_max_epoch: first_slot_in_max_epoch + slot_delta, + expected_rent_collection_slot_max_epoch: expected_rent_collection_slot_max_epoch + + slot_delta, + rent_epoch: rent_collector.epoch, + }), + "previous_epoch: {}", + previous_epoch, + ); + } + + // if account's rent_epoch is already > our rent epoch, rent was collected already + // if greater, we return None + let original_rent_epoch = account.rent_epoch(); + for already_collected in [true, false] { + // to consider: maybe if we already collected rent_epoch IN this slot and slot matches what we need, then we should return None here + account.set_rent_epoch(original_rent_epoch + u64::from(already_collected)); + let result = ExpectedRentCollection::new( + &pubkey, + &account, + expected_rent_collection_slot_max_epoch, + &epoch_schedule, + &rent_collector, + &SlotInfoInEpoch::new(max_slot_in_storages_inclusive, &epoch_schedule), + find_unskipped_slot, + None, + ); + assert_eq!( + result, + Some(ExpectedRentCollection { + partition_from_pubkey, + epoch_of_max_storage_slot: rent_collector.epoch, + partition_index_from_max_slot: partition_index_max_inclusive, + first_slot_in_max_epoch, + expected_rent_collection_slot_max_epoch, + rent_epoch: std::cmp::max(rent_collector.epoch, account.rent_epoch()), + }), + "rent_collector.epoch: {}, already_collected: {}", + rent_collector.epoch, + already_collected + ); + } + account.set_rent_epoch(original_rent_epoch); + + let storage_slot = max_slot_in_storages_inclusive - slots_per_epoch; + // check partition from pubkey code + for end_partition_index in [0, 1, 2, 100, slots_per_epoch - 2, slots_per_epoch - 1] { + // generate a pubkey range + let range = crate::bank::Bank::pubkey_range_from_partition(( + // start_index: + end_partition_index.saturating_sub(1), // this can end up at start=0, end=0 (this is a desired test case) + // end_index: + end_partition_index, + epoch_schedule.get_slots_in_epoch(rent_collector.epoch), + )); + // use both start and end from INclusive range separately + for pubkey in [&range.start(), &range.end()] { + let result = ExpectedRentCollection::new( + pubkey, + &account, + storage_slot, + &epoch_schedule, + &rent_collector, + &SlotInfoInEpoch::new(max_slot_in_storages_inclusive, &epoch_schedule), + find_unskipped_slot, + None, + ); + assert_eq!( + result, + Some(ExpectedRentCollection { + partition_from_pubkey: end_partition_index, + epoch_of_max_storage_slot: rent_collector.epoch, + partition_index_from_max_slot: partition_index_max_inclusive, + first_slot_in_max_epoch, + expected_rent_collection_slot_max_epoch: first_slot_in_max_epoch + end_partition_index, + rent_epoch: rent_collector.epoch, + }), + "range: {:?}, pubkey: {:?}, end_partition_index: {}, max_slot_in_storages_inclusive: {}", + range, + pubkey, + end_partition_index, + max_slot_in_storages_inclusive, + ); + } + } + + // check max_slot_in_storages_inclusive related code + // so sweep through max_slot_in_storages_inclusive values within an epoch + let first_slot_in_max_epoch = first_normal_slot + slots_per_epoch; + rent_collector.epoch = epoch_schedule.get_epoch(first_slot_in_max_epoch); + // an epoch in the past so we always collect rent + let storage_slot = first_normal_slot; + for partition_index in [ + 0, + 1, + 2, + partition_from_pubkey - 1, + partition_from_pubkey, + partition_from_pubkey + 1, + 100, + slots_per_epoch - 2, + slots_per_epoch - 1, + ] { + // partition_index=0 means first slot of second normal epoch + // second normal epoch because we want to deal with accounts stored in the first normal epoch + // + 1 because of exclusive + let max_slot_in_storages_inclusive = first_slot_in_max_epoch + partition_index; + let result = ExpectedRentCollection::new( + &pubkey, + &account, + storage_slot, + &epoch_schedule, + &rent_collector, + &SlotInfoInEpoch::new(max_slot_in_storages_inclusive, &epoch_schedule), + find_unskipped_slot, + None, + ); + let partition_index_passed_pubkey = partition_from_pubkey <= partition_index; + let expected_rent_epoch = + rent_collector.epoch - u64::from(!partition_index_passed_pubkey); + let expected_rent_collection_slot_max_epoch = first_slot_in_max_epoch + + partition_from_pubkey + - if partition_index_passed_pubkey { + 0 + } else { + slots_per_epoch + }; + + assert_eq!( + result, + Some(ExpectedRentCollection { + partition_from_pubkey, + epoch_of_max_storage_slot: rent_collector.epoch, + partition_index_from_max_slot: partition_index, + first_slot_in_max_epoch, + expected_rent_collection_slot_max_epoch, + rent_epoch: expected_rent_epoch, + }), + "partition_index: {}, max_slot_in_storages_inclusive: {}, storage_slot: {}, first_normal_slot: {}", + partition_index, + max_slot_in_storages_inclusive, + storage_slot, + first_normal_slot, + ); + } + + // test account.rent_epoch = 0 + let first_slot_in_max_epoch = 1388256; + for account_rent_epoch in [0, epoch] { + account.set_rent_epoch(account_rent_epoch); + let result = ExpectedRentCollection::new( + &pubkey, + &account, + storage_slot, + &epoch_schedule, + &rent_collector, + &SlotInfoInEpoch::new(max_slot_in_storages_inclusive, &epoch_schedule), + find_unskipped_slot, + None, + ); + assert_eq!( + result, + (account_rent_epoch != 0).then(|| ExpectedRentCollection { + partition_from_pubkey, + epoch_of_max_storage_slot: rent_collector.epoch + 1, + partition_index_from_max_slot: partition_index_max_inclusive, + first_slot_in_max_epoch, + expected_rent_collection_slot_max_epoch, + rent_epoch: rent_collector.epoch, + }) + ); + } + + // test find_unskipped_slot + for find_unskipped_slot in [ + |_| None, + Some, // identity + |slot| Some(slot + 1), // increment + |_| Some(Slot::MAX), // max + ] { + let test_value = 10; + let find_result = find_unskipped_slot(test_value); + let increment = find_result.unwrap_or_default() == test_value + 1; + let result = ExpectedRentCollection::new( + &pubkey, + &account, + storage_slot, + &epoch_schedule, + &rent_collector, + &SlotInfoInEpoch::new(max_slot_in_storages_inclusive, &epoch_schedule), + find_unskipped_slot, + None, + ); + // the test case of max is hacky + let prior_epoch = (partition_from_pubkey > partition_index_max_inclusive) + || find_unskipped_slot(0) == Some(Slot::MAX); + assert_eq!( + result, + Some(ExpectedRentCollection { + partition_from_pubkey, + epoch_of_max_storage_slot: rent_collector.epoch + 1, + partition_index_from_max_slot: partition_index_max_inclusive, + first_slot_in_max_epoch, + expected_rent_collection_slot_max_epoch: if find_result.unwrap_or_default() + == Slot::MAX + { + Slot::MAX + } else if increment { + expected_rent_collection_slot_max_epoch + 1 + } else { + expected_rent_collection_slot_max_epoch + }, + rent_epoch: rent_collector.epoch - u64::from(prior_epoch), + }), + "find_unskipped_slot(0): {:?}, rent_collector.epoch: {}, prior_epoch: {}", + find_unskipped_slot(0), + rent_collector.epoch, + prior_epoch, + ); + } + } + + #[test] + fn test_simplified_rent_collection() { + solana_logger::setup(); + let pubkey = Pubkey::new(&[5; 32]); + let owner = solana_sdk::pubkey::new_rand(); + let mut account = AccountSharedData::new(1, 0, &owner); + let mut epoch_schedule = EpochSchedule { + first_normal_epoch: 0, + ..EpochSchedule::default() + }; + epoch_schedule.first_normal_slot = 0; + let first_normal_slot = epoch_schedule.first_normal_slot; + let slots_per_epoch = 432_000; + let partition_from_pubkey = 8470; // function of 432k slots and 'pubkey' above + // start in epoch=1 because of issues at rent_epoch=1 + let storage_slot = first_normal_slot + partition_from_pubkey + slots_per_epoch; + let epoch = epoch_schedule.get_epoch(storage_slot); + assert_eq!( + (epoch, partition_from_pubkey), + epoch_schedule.get_epoch_and_slot_index(storage_slot) + ); + let genesis_config = GenesisConfig::default(); + let mut rent_collector = RentCollector::new( + epoch, + epoch_schedule, + genesis_config.slots_per_year(), + genesis_config.rent, + ); + rent_collector.rent.lamports_per_byte_year = 0; // temporarily disable rent + + assert_eq!( + slots_per_epoch, + epoch_schedule.get_slots_in_epoch(epoch_schedule.get_epoch(storage_slot)) + ); + account.set_rent_epoch(1); // has to be not 0 + + /* + test this: + pubkey_partition_index: 8470 + storage_slot: 8470 + account.rent_epoch: 1 (has to be not 0) + + max_slot: 8469 + 432k * 1 + max_slot: 8470 + 432k * 1 + max_slot: 8471 + 432k * 1 + max_slot: 8472 + 432k * 1 + max_slot: 8469 + 432k * 2 + max_slot: 8470 + 432k * 2 + max_slot: 8471 + 432k * 2 + max_slot: 8472 + 432k * 2 + max_slot: 8469 + 432k * 3 + max_slot: 8470 + 432k * 3 + max_slot: 8471 + 432k * 3 + max_slot: 8472 + 432k * 3 + + one run without skipping slot 8470, once WITH skipping slot 8470 + */ + + for skipped_slot in [false, true] { + let find_unskipped_slot = if skipped_slot { + |slot| Some(slot + 1) + } else { + Some + }; + + // starting at epoch = 0 has issues because of rent_epoch=0 special casing + for epoch in 1..4 { + for partition_index_from_max_slot in + partition_from_pubkey - 1..=partition_from_pubkey + 2 + { + let max_slot_in_storages_inclusive = + slots_per_epoch * epoch + first_normal_slot + partition_index_from_max_slot; + if storage_slot > max_slot_in_storages_inclusive { + continue; // illegal combination + } + rent_collector.epoch = epoch_schedule.get_epoch(max_slot_in_storages_inclusive); + let first_slot_in_max_epoch = max_slot_in_storages_inclusive + - max_slot_in_storages_inclusive % slots_per_epoch; + let skip_offset = u64::from(skipped_slot); + let mut expected_rent_collection_slot_max_epoch = + first_slot_in_max_epoch + partition_from_pubkey + skip_offset; + let hit_this_epoch = + expected_rent_collection_slot_max_epoch <= max_slot_in_storages_inclusive; + if !hit_this_epoch { + expected_rent_collection_slot_max_epoch -= slots_per_epoch; + } + + assert_eq!( + (epoch, partition_index_from_max_slot), + epoch_schedule.get_epoch_and_slot_index(max_slot_in_storages_inclusive) + ); + assert_eq!( + (epoch, 0), + epoch_schedule.get_epoch_and_slot_index(first_slot_in_max_epoch) + ); + account.set_rent_epoch(1); + let result = ExpectedRentCollection::new( + &pubkey, + &account, + storage_slot, + &epoch_schedule, + &rent_collector, + &SlotInfoInEpoch::new(max_slot_in_storages_inclusive, &epoch_schedule), + find_unskipped_slot, + None, + ); + let some_expected = if epoch == 1 { + skipped_slot && partition_index_from_max_slot > partition_from_pubkey + } else if epoch == 2 { + partition_index_from_max_slot >= partition_from_pubkey - skip_offset + } else { + true + }; + assert_eq!( + result, + some_expected.then(|| ExpectedRentCollection { + partition_from_pubkey, + epoch_of_max_storage_slot: rent_collector.epoch, + partition_index_from_max_slot, + first_slot_in_max_epoch, + expected_rent_collection_slot_max_epoch, + rent_epoch: rent_collector.epoch - u64::from(!hit_this_epoch), + }), + "partition_index_from_max_slot: {}, epoch: {}, hit_this_epoch: {}, skipped_slot: {}", + partition_index_from_max_slot, + epoch, + hit_this_epoch, + skipped_slot, + ); + + // test RentResult::LeaveAloneNoRent + { + let result = ExpectedRentCollection::new( + &pubkey, + &account, + storage_slot, + &epoch_schedule, + &rent_collector, + &SlotInfoInEpoch::new(max_slot_in_storages_inclusive, &epoch_schedule), + find_unskipped_slot, + // treat this pubkey like a filler account so we get a 'LeaveAloneNoRent' result + Some(&pubkey), + ); + assert_eq!( + result, + some_expected.then(|| ExpectedRentCollection { + partition_from_pubkey, + epoch_of_max_storage_slot: rent_collector.epoch, + partition_index_from_max_slot, + first_slot_in_max_epoch, + expected_rent_collection_slot_max_epoch, + // this will not be adjusted for 'LeaveAloneNoRent' + rent_epoch: account.rent_epoch(), + }), + "partition_index_from_max_slot: {}, epoch: {}", + partition_index_from_max_slot, + epoch, + ); + } + + // test maybe_rehash_skipped_rewrite + let hash = AccountsDb::hash_account(storage_slot, &account, &pubkey); + let maybe_rehash = ExpectedRentCollection::maybe_rehash_skipped_rewrite( + &account, + &hash, + &pubkey, + storage_slot, + &epoch_schedule, + &rent_collector, + &HashStats::default(), + &SlotInfoInEpoch::new(max_slot_in_storages_inclusive, &epoch_schedule), + find_unskipped_slot, + None, + ); + assert_eq!( + maybe_rehash, + some_expected.then(|| { + AccountsDb::hash_account_with_rent_epoch( + result + .as_ref() + .unwrap() + .expected_rent_collection_slot_max_epoch, + &account, + &pubkey, + result.as_ref().unwrap().rent_epoch, + ) + }) + ); + } + } + } + } + + #[test] + fn test_get_corrected_rent_epoch_on_load() { + solana_logger::setup(); + let pubkey = Pubkey::new(&[5; 32]); + let owner = solana_sdk::pubkey::new_rand(); + let mut account = AccountSharedData::new(1, 0, &owner); + let mut epoch_schedule = EpochSchedule { + first_normal_epoch: 0, + ..EpochSchedule::default() + }; + epoch_schedule.first_normal_slot = 0; + let first_normal_slot = epoch_schedule.first_normal_slot; + let slots_per_epoch = 432_000; + let partition_from_pubkey = 8470; // function of 432k slots and 'pubkey' above + // start in epoch=1 because of issues at rent_epoch=1 + let storage_slot = first_normal_slot + partition_from_pubkey + slots_per_epoch; + let epoch = epoch_schedule.get_epoch(storage_slot); + assert_eq!( + (epoch, partition_from_pubkey), + epoch_schedule.get_epoch_and_slot_index(storage_slot) + ); + let genesis_config = GenesisConfig::default(); + let mut rent_collector = RentCollector::new( + epoch, + epoch_schedule, + genesis_config.slots_per_year(), + genesis_config.rent, + ); + rent_collector.rent.lamports_per_byte_year = 0; // temporarily disable rent + + assert_eq!( + slots_per_epoch, + epoch_schedule.get_slots_in_epoch(epoch_schedule.get_epoch(storage_slot)) + ); + account.set_rent_epoch(1); // has to be not 0 + + /* + test this: + pubkey_partition_index: 8470 + storage_slot: 8470 + account.rent_epoch: 1 (has to be not 0) + + max_slot: 8469 + 432k * 1 + max_slot: 8470 + 432k * 1 + max_slot: 8471 + 432k * 1 + max_slot: 8472 + 432k * 1 + max_slot: 8469 + 432k * 2 + max_slot: 8470 + 432k * 2 + max_slot: 8471 + 432k * 2 + max_slot: 8472 + 432k * 2 + max_slot: 8469 + 432k * 3 + max_slot: 8470 + 432k * 3 + max_slot: 8471 + 432k * 3 + max_slot: 8472 + 432k * 3 + + one run without skipping slot 8470, once WITH skipping slot 8470 + */ + + for new_small in [false, true] { + for rewrite_already in [false, true] { + // starting at epoch = 0 has issues because of rent_epoch=0 special casing + for epoch in 1..4 { + for partition_index_bank_slot in + partition_from_pubkey - 1..=partition_from_pubkey + 2 + { + let bank_slot = + slots_per_epoch * epoch + first_normal_slot + partition_index_bank_slot; + if storage_slot > bank_slot { + continue; // illegal combination + } + rent_collector.epoch = epoch_schedule.get_epoch(bank_slot); + let first_slot_in_max_epoch = bank_slot - bank_slot % slots_per_epoch; + + assert_eq!( + (epoch, partition_index_bank_slot), + epoch_schedule.get_epoch_and_slot_index(bank_slot) + ); + assert_eq!( + (epoch, 0), + epoch_schedule.get_epoch_and_slot_index(first_slot_in_max_epoch) + ); + account.set_rent_epoch(1); + let rewrites = Rewrites::default(); + if rewrite_already { + if partition_index_bank_slot != partition_from_pubkey { + // this is an invalid test occurrence. + // we wouldn't have inserted pubkey into 'rewrite_already' for this slot if the current partition index wasn't at the pubkey's partition idnex yet. + continue; + } + + rewrites.write().unwrap().insert(pubkey, Hash::default()); + } + let expected_new_rent_epoch = + if partition_index_bank_slot > partition_from_pubkey { + if epoch > account.rent_epoch() { + Some(rent_collector.epoch) + } else { + None + } + } else if partition_index_bank_slot == partition_from_pubkey + && rewrite_already + { + let expected_rent_epoch = rent_collector.epoch; + if expected_rent_epoch == account.rent_epoch() { + None + } else { + Some(expected_rent_epoch) + } + } else if partition_index_bank_slot <= partition_from_pubkey + && epoch > account.rent_epoch() + { + let expected_rent_epoch = rent_collector.epoch.saturating_sub(1); + if expected_rent_epoch == account.rent_epoch() { + None + } else { + Some(expected_rent_epoch) + } + } else { + None + }; + let get_slot_info = |slot| { + if new_small { + SlotInfoInEpoch::new_small(slot) + } else { + SlotInfoInEpoch::new(slot, &epoch_schedule) + } + }; + let new_rent_epoch = + ExpectedRentCollection::get_corrected_rent_epoch_on_load( + &account, + &get_slot_info(storage_slot), + &get_slot_info(bank_slot), + &epoch_schedule, + &rent_collector, + &pubkey, + &rewrites, + ); + assert_eq!(new_rent_epoch, expected_new_rent_epoch); + } + } + } + } + } +} diff --git a/runtime/src/lib.rs b/runtime/src/lib.rs index 45d338bfe58127..16a3f78e6d8163 100644 --- a/runtime/src/lib.rs +++ b/runtime/src/lib.rs @@ -36,6 +36,7 @@ pub mod cost_model; pub mod cost_tracker; pub mod epoch_stakes; pub mod execute_cost_table; +mod expected_rent_collection; pub mod genesis_utils; pub mod hardened_unpack; pub mod in_mem_accounts_index; diff --git a/runtime/src/snapshot_package.rs b/runtime/src/snapshot_package.rs index 8dec38f18a1345..8392e251765640 100644 --- a/runtime/src/snapshot_package.rs +++ b/runtime/src/snapshot_package.rs @@ -48,6 +48,7 @@ pub struct AccountsPackage { pub accounts: Arc, pub epoch_schedule: EpochSchedule, pub rent_collector: RentCollector, + pub disable_rehash_for_rent_epoch: bool, } impl AccountsPackage { @@ -118,6 +119,9 @@ impl AccountsPackage { accounts: bank.accounts(), epoch_schedule: *bank.epoch_schedule(), rent_collector: bank.rent_collector().clone(), + disable_rehash_for_rent_epoch: bank + .feature_set + .is_active(&solana_sdk::feature_set::disable_rehash_for_rent_epoch::id()), }) } } diff --git a/runtime/src/snapshot_utils.rs b/runtime/src/snapshot_utils.rs index e11f7a65d1ca86..e55386d3a0e1d0 100644 --- a/runtime/src/snapshot_utils.rs +++ b/runtime/src/snapshot_utils.rs @@ -2295,7 +2295,10 @@ fn can_submit_accounts_package( mod tests { use { super::*, - crate::{accounts_db::ACCOUNTS_DB_CONFIG_FOR_TESTING, status_cache::Status}, + crate::{ + accounts_db::{ACCOUNTS_DB_CONFIG_FOR_TESTING, TEST_DISABLE_REHASH_FOR_RENT_EPOCH}, + status_cache::Status, + }, assert_matches::assert_matches, bincode::{deserialize_from, serialize_into}, solana_sdk::{ @@ -3914,6 +3917,7 @@ mod tests { accounts: Arc::new(crate::accounts::Accounts::default_for_tests()), epoch_schedule: solana_sdk::epoch_schedule::EpochSchedule::default(), rent_collector: crate::rent_collector::RentCollector::default(), + disable_rehash_for_rent_epoch: TEST_DISABLE_REHASH_FOR_RENT_EPOCH, } } diff --git a/sdk/src/feature_set.rs b/sdk/src/feature_set.rs index 6d758da46ed9ff..dd4f86a7801956 100644 --- a/sdk/src/feature_set.rs +++ b/sdk/src/feature_set.rs @@ -500,6 +500,10 @@ pub mod return_none_for_zero_lamport_accounts { solana_sdk::declare_id!("7K5HFrS1WAq6ND7RQbShXZXbtAookyTfaDQPTJNuZpze"); } +pub mod disable_rehash_for_rent_epoch { + solana_sdk::declare_id!("DTVTkmw3JSofd8CJVJte8PXEbxNQ2yZijvVr3pe2APPj"); +} + pub mod on_load_preserve_rent_epoch_for_rent_exempt_accounts { solana_sdk::declare_id!("CpkdQmspsaZZ8FVAouQTtTWZkc8eeQ7V3uj7dWz543rZ"); } @@ -622,6 +626,7 @@ lazy_static! { (preserve_rent_epoch_for_rent_exempt_accounts::id(), "preserve rent epoch for rent exempt accounts #26479"), (enable_bpf_loader_extend_program_ix::id(), "enable bpf upgradeable loader ExtendProgram instruction #25234"), (enable_early_verification_of_account_modifications::id(), "enable early verification of account modifications #25899"), + (disable_rehash_for_rent_epoch::id(), "on accounts hash calculation, do not try to rehash accounts #28934"), (on_load_preserve_rent_epoch_for_rent_exempt_accounts::id(), "on bank load account, do not try to fix up rent_epoch #28541"), (prevent_crediting_accounts_that_end_rent_paying::id(), "prevent crediting rent paying accounts #26606"), (cap_bpf_program_instruction_accounts::id(), "enforce max number of accounts per bpf program instruction #26628"), From e0cff0deba868c6446a413277c8ff98edf130cc6 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 29 Nov 2022 11:57:42 -0600 Subject: [PATCH 236/465] Bump Version to 1.14.10 (#28966) Co-authored-by: willhickey --- Cargo.lock | 484 ++++++++--------- account-decoder/Cargo.toml | 10 +- accounts-bench/Cargo.toml | 12 +- accounts-cluster-bench/Cargo.toml | 34 +- banking-bench/Cargo.toml | 26 +- banks-client/Cargo.toml | 12 +- banks-interface/Cargo.toml | 4 +- banks-server/Cargo.toml | 12 +- bench-streamer/Cargo.toml | 8 +- bench-tps/Cargo.toml | 38 +- bloom/Cargo.toml | 8 +- bucket_map/Cargo.toml | 8 +- clap-utils/Cargo.toml | 8 +- clap-v3-utils/Cargo.toml | 8 +- cli-config/Cargo.toml | 6 +- cli-output/Cargo.toml | 16 +- cli/Cargo.toml | 38 +- client-test/Cargo.toml | 32 +- client/Cargo.toml | 28 +- core/Cargo.toml | 56 +- dos/Cargo.toml | 30 +- download-utils/Cargo.toml | 6 +- entry/Cargo.toml | 16 +- faucet/Cargo.toml | 14 +- frozen-abi/Cargo.toml | 6 +- frozen-abi/macro/Cargo.toml | 2 +- genesis-utils/Cargo.toml | 8 +- genesis/Cargo.toml | 22 +- geyser-plugin-interface/Cargo.toml | 6 +- geyser-plugin-manager/Cargo.toml | 16 +- gossip/Cargo.toml | 38 +- install/Cargo.toml | 14 +- keygen/Cargo.toml | 12 +- ledger-tool/Cargo.toml | 30 +- ledger/Cargo.toml | 40 +- local-cluster/Cargo.toml | 28 +- log-analyzer/Cargo.toml | 6 +- logger/Cargo.toml | 2 +- measure/Cargo.toml | 4 +- merkle-root-bench/Cargo.toml | 12 +- merkle-tree/Cargo.toml | 4 +- metrics/Cargo.toml | 4 +- net-shaper/Cargo.toml | 4 +- net-utils/Cargo.toml | 8 +- notifier/Cargo.toml | 2 +- perf/Cargo.toml | 12 +- poh-bench/Cargo.toml | 14 +- poh/Cargo.toml | 20 +- program-runtime/Cargo.toml | 14 +- program-test/Cargo.toml | 18 +- .../address-lookup-table-tests/Cargo.toml | 8 +- programs/address-lookup-table/Cargo.toml | 12 +- programs/bpf-loader-tests/Cargo.toml | 8 +- programs/bpf/Cargo.lock | 490 +++++++++--------- programs/bpf/Cargo.toml | 28 +- programs/bpf/rust/128bit/Cargo.toml | 6 +- programs/bpf/rust/128bit_dep/Cargo.toml | 4 +- programs/bpf/rust/alloc/Cargo.toml | 4 +- programs/bpf/rust/call_depth/Cargo.toml | 4 +- programs/bpf/rust/caller_access/Cargo.toml | 4 +- programs/bpf/rust/curve25519/Cargo.toml | 6 +- programs/bpf/rust/custom_heap/Cargo.toml | 4 +- programs/bpf/rust/dep_crate/Cargo.toml | 6 +- .../bpf/rust/deprecated_loader/Cargo.toml | 4 +- programs/bpf/rust/dup_accounts/Cargo.toml | 4 +- programs/bpf/rust/error_handling/Cargo.toml | 4 +- programs/bpf/rust/external_spend/Cargo.toml | 4 +- programs/bpf/rust/finalize/Cargo.toml | 4 +- .../rust/get_minimum_delegation/Cargo.toml | 4 +- .../Cargo.toml | 4 +- .../rust/instruction_introspection/Cargo.toml | 4 +- programs/bpf/rust/invoke/Cargo.toml | 4 +- programs/bpf/rust/invoke_and_error/Cargo.toml | 4 +- programs/bpf/rust/invoke_and_ok/Cargo.toml | 4 +- .../bpf/rust/invoke_and_return/Cargo.toml | 4 +- programs/bpf/rust/invoked/Cargo.toml | 4 +- programs/bpf/rust/iter/Cargo.toml | 4 +- programs/bpf/rust/log_data/Cargo.toml | 4 +- programs/bpf/rust/many_args/Cargo.toml | 6 +- programs/bpf/rust/many_args_dep/Cargo.toml | 4 +- programs/bpf/rust/mem/Cargo.toml | 10 +- programs/bpf/rust/membuiltins/Cargo.toml | 6 +- programs/bpf/rust/noop/Cargo.toml | 4 +- programs/bpf/rust/panic/Cargo.toml | 4 +- programs/bpf/rust/param_passing/Cargo.toml | 6 +- .../bpf/rust/param_passing_dep/Cargo.toml | 4 +- programs/bpf/rust/rand/Cargo.toml | 4 +- programs/bpf/rust/realloc/Cargo.toml | 4 +- programs/bpf/rust/realloc_invoke/Cargo.toml | 6 +- .../bpf/rust/ro_account_modify/Cargo.toml | 4 +- programs/bpf/rust/ro_modify/Cargo.toml | 4 +- programs/bpf/rust/sanity/Cargo.toml | 10 +- .../bpf/rust/secp256k1_recover/Cargo.toml | 4 +- programs/bpf/rust/sha/Cargo.toml | 4 +- .../rust/sibling_inner_instruction/Cargo.toml | 4 +- .../bpf/rust/sibling_instruction/Cargo.toml | 4 +- programs/bpf/rust/simulation/Cargo.toml | 12 +- programs/bpf/rust/spoof1/Cargo.toml | 4 +- programs/bpf/rust/spoof1_system/Cargo.toml | 4 +- programs/bpf/rust/sysvar/Cargo.toml | 10 +- programs/bpf/rust/upgradeable/Cargo.toml | 4 +- programs/bpf/rust/upgraded/Cargo.toml | 4 +- programs/bpf_loader/Cargo.toml | 14 +- .../bpf_loader/gen-syscall-list/Cargo.toml | 2 +- programs/compute-budget/Cargo.toml | 6 +- programs/config/Cargo.toml | 8 +- programs/ed25519-tests/Cargo.toml | 6 +- programs/stake/Cargo.toml | 18 +- programs/vote/Cargo.toml | 14 +- programs/zk-token-proof/Cargo.toml | 8 +- rayon-threadlimit/Cargo.toml | 2 +- rbpf-cli/Cargo.toml | 10 +- remote-wallet/Cargo.toml | 4 +- rpc-test/Cargo.toml | 18 +- rpc/Cargo.toml | 48 +- runtime/Cargo.toml | 34 +- runtime/store-tool/Cargo.toml | 8 +- sdk/Cargo.toml | 12 +- sdk/cargo-build-bpf/Cargo.toml | 4 +- sdk/cargo-build-sbf/Cargo.toml | 8 +- .../tests/crates/fail/Cargo.toml | 4 +- .../tests/crates/noop/Cargo.toml | 4 +- sdk/cargo-test-bpf/Cargo.toml | 2 +- sdk/cargo-test-sbf/Cargo.toml | 2 +- sdk/gen-headers/Cargo.toml | 2 +- sdk/macro/Cargo.toml | 2 +- sdk/program/Cargo.toml | 10 +- send-transaction-service/Cargo.toml | 14 +- stake-accounts/Cargo.toml | 16 +- storage-bigtable/Cargo.toml | 10 +- storage-bigtable/build-proto/Cargo.lock | 2 +- storage-bigtable/build-proto/Cargo.toml | 2 +- storage-proto/Cargo.toml | 8 +- streamer/Cargo.toml | 10 +- sys-tuner/Cargo.toml | 6 +- test-validator/Cargo.toml | 28 +- tokens/Cargo.toml | 24 +- transaction-dos/Cargo.toml | 32 +- transaction-status/Cargo.toml | 14 +- upload-perf/Cargo.toml | 4 +- validator/Cargo.toml | 50 +- version/Cargo.toml | 8 +- watchtower/Cargo.toml | 20 +- zk-token-sdk/Cargo.toml | 6 +- 144 files changed, 1269 insertions(+), 1269 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 2eefae104551c1..9cc76b078abb29 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1688,7 +1688,7 @@ dependencies = [ [[package]] name = "gen-headers" -version = "1.14.9" +version = "1.14.10" dependencies = [ "log", "regex", @@ -1696,7 +1696,7 @@ dependencies = [ [[package]] name = "gen-syscall-list" -version = "1.14.9" +version = "1.14.10" dependencies = [ "regex", ] @@ -3747,15 +3747,15 @@ dependencies = [ [[package]] name = "rbpf-cli" -version = "1.14.9" +version = "1.14.10" dependencies = [ "clap 3.1.8", "serde", "serde_json", "solana-bpf-loader-program", - "solana-logger 1.14.9", + "solana-logger 1.14.10", "solana-program-runtime", - "solana-sdk 1.14.9", + "solana-sdk 1.14.10", "solana_rbpf", ] @@ -4467,7 +4467,7 @@ dependencies = [ [[package]] name = "solana-account-decoder" -version = "1.14.9" +version = "1.14.10" dependencies = [ "Inflector", "base64 0.13.0", @@ -4480,7 +4480,7 @@ dependencies = [ "serde_json", "solana-address-lookup-table-program", "solana-config-program", - "solana-sdk 1.14.9", + "solana-sdk 1.14.10", "solana-vote-program", "spl-token", "spl-token-2022 0.5.0", @@ -4490,21 +4490,21 @@ dependencies = [ [[package]] name = "solana-accounts-bench" -version = "1.14.9" +version = "1.14.10" dependencies = [ "clap 2.33.3", "log", "rayon", - "solana-logger 1.14.9", + "solana-logger 1.14.10", "solana-measure", "solana-runtime", - "solana-sdk 1.14.9", + "solana-sdk 1.14.10", "solana-version", ] [[package]] name = "solana-accounts-cluster-bench" -version = "1.14.9" +version = "1.14.10" dependencies = [ "clap 2.33.3", "log", @@ -4517,11 +4517,11 @@ dependencies = [ "solana-faucet", "solana-gossip", "solana-local-cluster", - "solana-logger 1.14.9", + "solana-logger 1.14.10", "solana-measure", "solana-net-utils", "solana-runtime", - "solana-sdk 1.14.9", + "solana-sdk 1.14.10", "solana-streamer", "solana-test-validator", "solana-transaction-status", @@ -4531,7 +4531,7 @@ dependencies = [ [[package]] name = "solana-address-lookup-table-program" -version = "1.14.9" +version = "1.14.10" dependencies = [ "bincode", "bytemuck", @@ -4540,28 +4540,28 @@ dependencies = [ "num-traits", "rustc_version 0.4.0", "serde", - "solana-frozen-abi 1.14.9", - "solana-frozen-abi-macro 1.14.9", - "solana-program 1.14.9", + "solana-frozen-abi 1.14.10", + "solana-frozen-abi-macro 1.14.10", + "solana-program 1.14.10", "solana-program-runtime", - "solana-sdk 1.14.9", + "solana-sdk 1.14.10", "thiserror", ] [[package]] name = "solana-address-lookup-table-program-tests" -version = "1.14.9" +version = "1.14.10" dependencies = [ "assert_matches", "bincode", "solana-address-lookup-table-program", "solana-program-test", - "solana-sdk 1.14.9", + "solana-sdk 1.14.10", ] [[package]] name = "solana-banking-bench" -version = "1.14.9" +version = "1.14.10" dependencies = [ "clap 3.1.8", "crossbeam-channel", @@ -4572,27 +4572,27 @@ dependencies = [ "solana-core", "solana-gossip", "solana-ledger", - "solana-logger 1.14.9", + "solana-logger 1.14.10", "solana-measure", "solana-perf", "solana-poh", "solana-runtime", - "solana-sdk 1.14.9", + "solana-sdk 1.14.10", "solana-streamer", "solana-version", ] [[package]] name = "solana-banks-client" -version = "1.14.9" +version = "1.14.10" dependencies = [ "borsh", "futures 0.3.21", "solana-banks-interface", "solana-banks-server", - "solana-program 1.14.9", + "solana-program 1.14.10", "solana-runtime", - "solana-sdk 1.14.9", + "solana-sdk 1.14.10", "tarpc", "thiserror", "tokio", @@ -4601,16 +4601,16 @@ dependencies = [ [[package]] name = "solana-banks-interface" -version = "1.14.9" +version = "1.14.10" dependencies = [ "serde", - "solana-sdk 1.14.9", + "solana-sdk 1.14.10", "tarpc", ] [[package]] name = "solana-banks-server" -version = "1.14.9" +version = "1.14.10" dependencies = [ "bincode", "crossbeam-channel", @@ -4618,7 +4618,7 @@ dependencies = [ "solana-banks-interface", "solana-client", "solana-runtime", - "solana-sdk 1.14.9", + "solana-sdk 1.14.10", "solana-send-transaction-service", "tarpc", "tokio", @@ -4628,7 +4628,7 @@ dependencies = [ [[package]] name = "solana-bench-streamer" -version = "1.14.9" +version = "1.14.10" dependencies = [ "clap 3.1.8", "crossbeam-channel", @@ -4639,7 +4639,7 @@ dependencies = [ [[package]] name = "solana-bench-tps" -version = "1.14.9" +version = "1.14.10" dependencies = [ "clap 2.33.3", "crossbeam-channel", @@ -4656,13 +4656,13 @@ dependencies = [ "solana-genesis", "solana-gossip", "solana-local-cluster", - "solana-logger 1.14.9", + "solana-logger 1.14.10", "solana-measure", "solana-metrics", "solana-net-utils", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.9", + "solana-sdk 1.14.10", "solana-streamer", "solana-test-validator", "solana-version", @@ -4671,7 +4671,7 @@ dependencies = [ [[package]] name = "solana-bloom" -version = "1.14.9" +version = "1.14.10" dependencies = [ "bv", "fnv", @@ -4681,14 +4681,14 @@ dependencies = [ "rustc_version 0.4.0", "serde", "serde_derive", - "solana-frozen-abi 1.14.9", - "solana-frozen-abi-macro 1.14.9", - "solana-sdk 1.14.9", + "solana-frozen-abi 1.14.10", + "solana-frozen-abi-macro 1.14.10", + "solana-sdk 1.14.10", ] [[package]] name = "solana-bpf-loader-program" -version = "1.14.9" +version = "1.14.10" dependencies = [ "bincode", "byteorder", @@ -4699,26 +4699,26 @@ dependencies = [ "solana-metrics", "solana-program-runtime", "solana-runtime", - "solana-sdk 1.14.9", - "solana-zk-token-sdk 1.14.9", + "solana-sdk 1.14.10", + "solana-zk-token-sdk 1.14.10", "solana_rbpf", "thiserror", ] [[package]] name = "solana-bpf-loader-program-tests" -version = "1.14.9" +version = "1.14.10" dependencies = [ "assert_matches", "bincode", "solana-bpf-loader-program", "solana-program-test", - "solana-sdk 1.14.9", + "solana-sdk 1.14.10", ] [[package]] name = "solana-bucket-map" -version = "1.14.9" +version = "1.14.10" dependencies = [ "fs_extra", "log", @@ -4726,24 +4726,24 @@ dependencies = [ "modular-bitfield", "rand 0.7.3", "rayon", - "solana-logger 1.14.9", + "solana-logger 1.14.10", "solana-measure", - "solana-sdk 1.14.9", + "solana-sdk 1.14.10", "tempfile", ] [[package]] name = "solana-cargo-build-bpf" -version = "1.14.9" +version = "1.14.10" dependencies = [ "cargo_metadata", "clap 3.1.8", - "solana-sdk 1.14.9", + "solana-sdk 1.14.10", ] [[package]] name = "solana-cargo-build-sbf" -version = "1.14.9" +version = "1.14.10" dependencies = [ "bzip2", "cargo_metadata", @@ -4752,14 +4752,14 @@ dependencies = [ "regex", "serial_test", "solana-download-utils", - "solana-logger 1.14.9", - "solana-sdk 1.14.9", + "solana-logger 1.14.10", + "solana-sdk 1.14.10", "tar", ] [[package]] name = "solana-cargo-test-bpf" -version = "1.14.9" +version = "1.14.10" dependencies = [ "cargo_metadata", "clap 3.1.8", @@ -4767,7 +4767,7 @@ dependencies = [ [[package]] name = "solana-cargo-test-sbf" -version = "1.14.9" +version = "1.14.10" dependencies = [ "cargo_metadata", "clap 3.1.8", @@ -4775,14 +4775,14 @@ dependencies = [ [[package]] name = "solana-clap-utils" -version = "1.14.9" +version = "1.14.10" dependencies = [ "chrono", "clap 2.33.3", "rpassword", "solana-perf", "solana-remote-wallet", - "solana-sdk 1.14.9", + "solana-sdk 1.14.10", "tempfile", "thiserror", "tiny-bip39", @@ -4792,14 +4792,14 @@ dependencies = [ [[package]] name = "solana-clap-v3-utils" -version = "1.14.9" +version = "1.14.10" dependencies = [ "chrono", "clap 3.1.8", "rpassword", "solana-perf", "solana-remote-wallet", - "solana-sdk 1.14.9", + "solana-sdk 1.14.10", "tempfile", "thiserror", "tiny-bip39", @@ -4809,7 +4809,7 @@ dependencies = [ [[package]] name = "solana-cli" -version = "1.14.9" +version = "1.14.10" dependencies = [ "bincode", "bs58", @@ -4837,10 +4837,10 @@ dependencies = [ "solana-client", "solana-config-program", "solana-faucet", - "solana-logger 1.14.9", + "solana-logger 1.14.10", "solana-program-runtime", "solana-remote-wallet", - "solana-sdk 1.14.9", + "solana-sdk 1.14.10", "solana-streamer", "solana-test-validator", "solana-transaction-status", @@ -4855,7 +4855,7 @@ dependencies = [ [[package]] name = "solana-cli-config" -version = "1.14.9" +version = "1.14.10" dependencies = [ "anyhow", "dirs-next", @@ -4864,13 +4864,13 @@ dependencies = [ "serde_derive", "serde_yaml", "solana-clap-utils", - "solana-sdk 1.14.9", + "solana-sdk 1.14.10", "url 2.2.2", ] [[package]] name = "solana-cli-output" -version = "1.14.9" +version = "1.14.10" dependencies = [ "Inflector", "base64 0.13.0", @@ -4888,7 +4888,7 @@ dependencies = [ "solana-clap-utils", "solana-cli-config", "solana-client", - "solana-sdk 1.14.9", + "solana-sdk 1.14.10", "solana-transaction-status", "solana-vote-program", "spl-memo", @@ -4896,7 +4896,7 @@ dependencies = [ [[package]] name = "solana-client" -version = "1.14.9" +version = "1.14.10" dependencies = [ "anyhow", "assert_matches", @@ -4932,12 +4932,12 @@ dependencies = [ "solana-account-decoder", "solana-clap-utils", "solana-faucet", - "solana-logger 1.14.9", + "solana-logger 1.14.10", "solana-measure", "solana-metrics", "solana-net-utils", "solana-perf", - "solana-sdk 1.14.9", + "solana-sdk 1.14.10", "solana-streamer", "solana-transaction-status", "solana-version", @@ -4953,14 +4953,14 @@ dependencies = [ [[package]] name = "solana-client-test" -version = "1.14.9" +version = "1.14.10" dependencies = [ "futures-util", "serde_json", "serial_test", "solana-client", "solana-ledger", - "solana-logger 1.14.9", + "solana-logger 1.14.10", "solana-measure", "solana-merkle-tree", "solana-metrics", @@ -4968,7 +4968,7 @@ dependencies = [ "solana-rayon-threadlimit", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.9", + "solana-sdk 1.14.10", "solana-streamer", "solana-test-validator", "solana-transaction-status", @@ -4979,28 +4979,28 @@ dependencies = [ [[package]] name = "solana-compute-budget-program" -version = "1.14.9" +version = "1.14.10" dependencies = [ "solana-program-runtime", - "solana-sdk 1.14.9", + "solana-sdk 1.14.10", ] [[package]] name = "solana-config-program" -version = "1.14.9" +version = "1.14.10" dependencies = [ "bincode", "chrono", "serde", "serde_derive", - "solana-logger 1.14.9", + "solana-logger 1.14.10", "solana-program-runtime", - "solana-sdk 1.14.9", + "solana-sdk 1.14.10", ] [[package]] name = "solana-core" -version = "1.14.9" +version = "1.14.10" dependencies = [ "ahash", "base64 0.13.0", @@ -5033,12 +5033,12 @@ dependencies = [ "solana-bloom", "solana-client", "solana-entry", - "solana-frozen-abi 1.14.9", - "solana-frozen-abi-macro 1.14.9", + "solana-frozen-abi 1.14.10", + "solana-frozen-abi-macro 1.14.10", "solana-geyser-plugin-manager", "solana-gossip", "solana-ledger", - "solana-logger 1.14.9", + "solana-logger 1.14.10", "solana-measure", "solana-metrics", "solana-net-utils", @@ -5048,7 +5048,7 @@ dependencies = [ "solana-rayon-threadlimit", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.9", + "solana-sdk 1.14.10", "solana-send-transaction-service", "solana-stake-program", "solana-streamer", @@ -5068,7 +5068,7 @@ dependencies = [ [[package]] name = "solana-dos" -version = "1.14.9" +version = "1.14.10" dependencies = [ "bincode", "clap 3.1.8", @@ -5084,42 +5084,42 @@ dependencies = [ "solana-faucet", "solana-gossip", "solana-local-cluster", - "solana-logger 1.14.9", + "solana-logger 1.14.10", "solana-measure", "solana-net-utils", "solana-perf", "solana-rpc", - "solana-sdk 1.14.9", + "solana-sdk 1.14.10", "solana-streamer", "solana-version", ] [[package]] name = "solana-download-utils" -version = "1.14.9" +version = "1.14.10" dependencies = [ "console", "indicatif", "log", "reqwest", "solana-runtime", - "solana-sdk 1.14.9", + "solana-sdk 1.14.10", ] [[package]] name = "solana-ed25519-program-tests" -version = "1.14.9" +version = "1.14.10" dependencies = [ "assert_matches", "ed25519-dalek", "rand 0.7.3", "solana-program-test", - "solana-sdk 1.14.9", + "solana-sdk 1.14.10", ] [[package]] name = "solana-entry" -version = "1.14.9" +version = "1.14.10" dependencies = [ "bincode", "crossbeam-channel", @@ -5131,18 +5131,18 @@ dependencies = [ "rand 0.7.3", "rayon", "serde", - "solana-logger 1.14.9", + "solana-logger 1.14.10", "solana-measure", "solana-merkle-tree", "solana-metrics", "solana-perf", "solana-rayon-threadlimit", - "solana-sdk 1.14.9", + "solana-sdk 1.14.10", ] [[package]] name = "solana-faucet" -version = "1.14.9" +version = "1.14.10" dependencies = [ "bincode", "byteorder", @@ -5153,9 +5153,9 @@ dependencies = [ "serde_derive", "solana-clap-utils", "solana-cli-config", - "solana-logger 1.14.9", + "solana-logger 1.14.10", "solana-metrics", - "solana-sdk 1.14.9", + "solana-sdk 1.14.10", "solana-version", "spl-memo", "thiserror", @@ -5198,7 +5198,7 @@ dependencies = [ [[package]] name = "solana-frozen-abi" -version = "1.14.9" +version = "1.14.10" dependencies = [ "ahash", "blake3", @@ -5223,8 +5223,8 @@ dependencies = [ "serde_derive", "serde_json", "sha2 0.10.2", - "solana-frozen-abi-macro 1.14.9", - "solana-logger 1.14.9", + "solana-frozen-abi-macro 1.14.10", + "solana-logger 1.14.10", "subtle", "thiserror", ] @@ -5243,7 +5243,7 @@ dependencies = [ [[package]] name = "solana-frozen-abi-macro" -version = "1.14.9" +version = "1.14.10" dependencies = [ "proc-macro2 1.0.41", "quote 1.0.18", @@ -5253,7 +5253,7 @@ dependencies = [ [[package]] name = "solana-genesis" -version = "1.14.9" +version = "1.14.10" dependencies = [ "base64 0.13.0", "clap 2.33.3", @@ -5264,9 +5264,9 @@ dependencies = [ "solana-cli-config", "solana-entry", "solana-ledger", - "solana-logger 1.14.9", + "solana-logger 1.14.10", "solana-runtime", - "solana-sdk 1.14.9", + "solana-sdk 1.14.10", "solana-stake-program", "solana-version", "solana-vote-program", @@ -5275,26 +5275,26 @@ dependencies = [ [[package]] name = "solana-genesis-utils" -version = "1.14.9" +version = "1.14.10" dependencies = [ "solana-download-utils", "solana-runtime", - "solana-sdk 1.14.9", + "solana-sdk 1.14.10", ] [[package]] name = "solana-geyser-plugin-interface" -version = "1.14.9" +version = "1.14.10" dependencies = [ "log", - "solana-sdk 1.14.9", + "solana-sdk 1.14.10", "solana-transaction-status", "thiserror", ] [[package]] name = "solana-geyser-plugin-manager" -version = "1.14.9" +version = "1.14.10" dependencies = [ "bs58", "crossbeam-channel", @@ -5307,14 +5307,14 @@ dependencies = [ "solana-metrics", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.9", + "solana-sdk 1.14.10", "solana-transaction-status", "thiserror", ] [[package]] name = "solana-gossip" -version = "1.14.9" +version = "1.14.10" dependencies = [ "bincode", "bv", @@ -5341,17 +5341,17 @@ dependencies = [ "solana-clap-utils", "solana-client", "solana-entry", - "solana-frozen-abi 1.14.9", - "solana-frozen-abi-macro 1.14.9", + "solana-frozen-abi 1.14.10", + "solana-frozen-abi-macro 1.14.10", "solana-ledger", - "solana-logger 1.14.9", + "solana-logger 1.14.10", "solana-measure", "solana-metrics", "solana-net-utils", "solana-perf", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.14.9", + "solana-sdk 1.14.10", "solana-streamer", "solana-version", "solana-vote-program", @@ -5360,7 +5360,7 @@ dependencies = [ [[package]] name = "solana-install" -version = "1.14.9" +version = "1.14.10" dependencies = [ "atty", "bincode", @@ -5381,8 +5381,8 @@ dependencies = [ "solana-clap-utils", "solana-client", "solana-config-program", - "solana-logger 1.14.9", - "solana-sdk 1.14.9", + "solana-logger 1.14.10", + "solana-sdk 1.14.10", "solana-version", "tar", "tempfile", @@ -5393,7 +5393,7 @@ dependencies = [ [[package]] name = "solana-keygen" -version = "1.14.9" +version = "1.14.10" dependencies = [ "bs58", "clap 3.1.8", @@ -5402,14 +5402,14 @@ dependencies = [ "solana-clap-v3-utils", "solana-cli-config", "solana-remote-wallet", - "solana-sdk 1.14.9", + "solana-sdk 1.14.10", "solana-version", "tiny-bip39", ] [[package]] name = "solana-ledger" -version = "1.14.9" +version = "1.14.10" dependencies = [ "assert_matches", "bincode", @@ -5443,16 +5443,16 @@ dependencies = [ "solana-account-decoder", "solana-bpf-loader-program", "solana-entry", - "solana-frozen-abi 1.14.9", - "solana-frozen-abi-macro 1.14.9", - "solana-logger 1.14.9", + "solana-frozen-abi 1.14.10", + "solana-frozen-abi-macro 1.14.10", + "solana-logger 1.14.10", "solana-measure", "solana-metrics", "solana-perf", "solana-program-runtime", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.14.9", + "solana-sdk 1.14.10", "solana-stake-program", "solana-storage-bigtable", "solana-storage-proto", @@ -5471,7 +5471,7 @@ dependencies = [ [[package]] name = "solana-ledger-tool" -version = "1.14.9" +version = "1.14.10" dependencies = [ "assert_cmd", "base64 0.13.0", @@ -5493,10 +5493,10 @@ dependencies = [ "solana-core", "solana-entry", "solana-ledger", - "solana-logger 1.14.9", + "solana-logger 1.14.10", "solana-measure", "solana-runtime", - "solana-sdk 1.14.9", + "solana-sdk 1.14.10", "solana-stake-program", "solana-storage-bigtable", "solana-transaction-status", @@ -5508,7 +5508,7 @@ dependencies = [ [[package]] name = "solana-local-cluster" -version = "1.14.9" +version = "1.14.10" dependencies = [ "assert_matches", "crossbeam-channel", @@ -5526,9 +5526,9 @@ dependencies = [ "solana-entry", "solana-gossip", "solana-ledger", - "solana-logger 1.14.9", + "solana-logger 1.14.10", "solana-runtime", - "solana-sdk 1.14.9", + "solana-sdk 1.14.10", "solana-stake-program", "solana-streamer", "solana-vote-program", @@ -5537,13 +5537,13 @@ dependencies = [ [[package]] name = "solana-log-analyzer" -version = "1.14.9" +version = "1.14.10" dependencies = [ "byte-unit", "clap 3.1.8", "serde", "serde_json", - "solana-logger 1.14.9", + "solana-logger 1.14.10", "solana-version", ] @@ -5560,7 +5560,7 @@ dependencies = [ [[package]] name = "solana-logger" -version = "1.14.9" +version = "1.14.10" dependencies = [ "env_logger", "lazy_static", @@ -5569,38 +5569,38 @@ dependencies = [ [[package]] name = "solana-measure" -version = "1.14.9" +version = "1.14.10" dependencies = [ "log", - "solana-sdk 1.14.9", + "solana-sdk 1.14.10", ] [[package]] name = "solana-merkle-root-bench" -version = "1.14.9" +version = "1.14.10" dependencies = [ "clap 2.33.3", "log", - "solana-logger 1.14.9", + "solana-logger 1.14.10", "solana-measure", "solana-runtime", - "solana-sdk 1.14.9", + "solana-sdk 1.14.10", "solana-version", ] [[package]] name = "solana-merkle-tree" -version = "1.14.9" +version = "1.14.10" dependencies = [ "fast-math", "hex", "matches", - "solana-program 1.14.9", + "solana-program 1.14.10", ] [[package]] name = "solana-metrics" -version = "1.14.9" +version = "1.14.10" dependencies = [ "crossbeam-channel", "env_logger", @@ -5610,23 +5610,23 @@ dependencies = [ "rand 0.7.3", "reqwest", "serial_test", - "solana-sdk 1.14.9", + "solana-sdk 1.14.10", ] [[package]] name = "solana-net-shaper" -version = "1.14.9" +version = "1.14.10" dependencies = [ "clap 3.1.8", "rand 0.7.3", "serde", "serde_json", - "solana-logger 1.14.9", + "solana-logger 1.14.10", ] [[package]] name = "solana-net-utils" -version = "1.14.9" +version = "1.14.10" dependencies = [ "bincode", "clap 3.1.8", @@ -5637,8 +5637,8 @@ dependencies = [ "serde", "serde_derive", "socket2", - "solana-logger 1.14.9", - "solana-sdk 1.14.9", + "solana-logger 1.14.10", + "solana-sdk 1.14.10", "solana-version", "tokio", "url 2.2.2", @@ -5646,7 +5646,7 @@ dependencies = [ [[package]] name = "solana-notifier" -version = "1.14.9" +version = "1.14.10" dependencies = [ "log", "reqwest", @@ -5655,7 +5655,7 @@ dependencies = [ [[package]] name = "solana-perf" -version = "1.14.9" +version = "1.14.10" dependencies = [ "ahash", "bincode", @@ -5673,16 +5673,16 @@ dependencies = [ "rand 0.7.3", "rayon", "serde", - "solana-logger 1.14.9", + "solana-logger 1.14.10", "solana-metrics", "solana-rayon-threadlimit", - "solana-sdk 1.14.9", + "solana-sdk 1.14.10", "solana-vote-program", ] [[package]] name = "solana-poh" -version = "1.14.9" +version = "1.14.10" dependencies = [ "bincode", "core_affinity", @@ -5692,29 +5692,29 @@ dependencies = [ "rand 0.7.3", "solana-entry", "solana-ledger", - "solana-logger 1.14.9", + "solana-logger 1.14.10", "solana-measure", "solana-metrics", "solana-perf", "solana-runtime", - "solana-sdk 1.14.9", + "solana-sdk 1.14.10", "solana-sys-tuner", "thiserror", ] [[package]] name = "solana-poh-bench" -version = "1.14.9" +version = "1.14.10" dependencies = [ "clap 3.1.8", "log", "rand 0.7.3", "rayon", "solana-entry", - "solana-logger 1.14.9", + "solana-logger 1.14.10", "solana-measure", "solana-perf", - "solana-sdk 1.14.9", + "solana-sdk 1.14.10", "solana-version", ] @@ -5769,7 +5769,7 @@ dependencies = [ [[package]] name = "solana-program" -version = "1.14.9" +version = "1.14.10" dependencies = [ "anyhow", "assert_matches", @@ -5807,10 +5807,10 @@ dependencies = [ "serde_json", "sha2 0.10.2", "sha3 0.10.1", - "solana-frozen-abi 1.14.9", - "solana-frozen-abi-macro 1.14.9", - "solana-logger 1.14.9", - "solana-sdk-macro 1.14.9", + "solana-frozen-abi 1.14.10", + "solana-frozen-abi-macro 1.14.10", + "solana-logger 1.14.10", + "solana-sdk-macro 1.14.10", "static_assertions", "thiserror", "tiny-bip39", @@ -5820,7 +5820,7 @@ dependencies = [ [[package]] name = "solana-program-runtime" -version = "1.14.9" +version = "1.14.10" dependencies = [ "base64 0.13.0", "bincode", @@ -5835,18 +5835,18 @@ dependencies = [ "rand 0.7.3", "rustc_version 0.4.0", "serde", - "solana-frozen-abi 1.14.9", - "solana-frozen-abi-macro 1.14.9", - "solana-logger 1.14.9", + "solana-frozen-abi 1.14.10", + "solana-frozen-abi-macro 1.14.10", + "solana-logger 1.14.10", "solana-measure", "solana-metrics", - "solana-sdk 1.14.9", + "solana-sdk 1.14.10", "thiserror", ] [[package]] name = "solana-program-test" -version = "1.14.9" +version = "1.14.10" dependencies = [ "assert_matches", "async-trait", @@ -5858,10 +5858,10 @@ dependencies = [ "solana-banks-client", "solana-banks-server", "solana-bpf-loader-program", - "solana-logger 1.14.9", + "solana-logger 1.14.10", "solana-program-runtime", "solana-runtime", - "solana-sdk 1.14.9", + "solana-sdk 1.14.10", "solana-vote-program", "thiserror", "tokio", @@ -5869,7 +5869,7 @@ dependencies = [ [[package]] name = "solana-rayon-threadlimit" -version = "1.14.9" +version = "1.14.10" dependencies = [ "lazy_static", "num_cpus", @@ -5877,7 +5877,7 @@ dependencies = [ [[package]] name = "solana-remote-wallet" -version = "1.14.9" +version = "1.14.10" dependencies = [ "console", "dialoguer", @@ -5888,14 +5888,14 @@ dependencies = [ "parking_lot 0.12.1", "qstring", "semver 1.0.10", - "solana-sdk 1.14.9", + "solana-sdk 1.14.10", "thiserror", "uriparse", ] [[package]] name = "solana-rpc" -version = "1.14.9" +version = "1.14.10" dependencies = [ "base64 0.13.0", "bincode", @@ -5931,7 +5931,7 @@ dependencies = [ "solana-poh", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.14.9", + "solana-sdk 1.14.10", "solana-send-transaction-service", "solana-stake-program", "solana-storage-bigtable", @@ -5950,7 +5950,7 @@ dependencies = [ [[package]] name = "solana-rpc-test" -version = "1.14.9" +version = "1.14.10" dependencies = [ "bincode", "bs58", @@ -5962,9 +5962,9 @@ dependencies = [ "serde_json", "solana-account-decoder", "solana-client", - "solana-logger 1.14.9", + "solana-logger 1.14.10", "solana-rpc", - "solana-sdk 1.14.9", + "solana-sdk 1.14.10", "solana-streamer", "solana-test-validator", "solana-transaction-status", @@ -5973,7 +5973,7 @@ dependencies = [ [[package]] name = "solana-runtime" -version = "1.14.9" +version = "1.14.10" dependencies = [ "arrayref", "assert_matches", @@ -6013,18 +6013,18 @@ dependencies = [ "solana-bucket-map", "solana-compute-budget-program", "solana-config-program", - "solana-frozen-abi 1.14.9", - "solana-frozen-abi-macro 1.14.9", - "solana-logger 1.14.9", + "solana-frozen-abi 1.14.10", + "solana-frozen-abi-macro 1.14.10", + "solana-logger 1.14.10", "solana-measure", "solana-metrics", "solana-program-runtime", "solana-rayon-threadlimit", - "solana-sdk 1.14.9", + "solana-sdk 1.14.10", "solana-stake-program", "solana-vote-program", "solana-zk-token-proof-program", - "solana-zk-token-sdk 1.14.9", + "solana-zk-token-sdk 1.14.10", "strum", "strum_macros", "symlink", @@ -6087,7 +6087,7 @@ dependencies = [ [[package]] name = "solana-sdk" -version = "1.14.9" +version = "1.14.10" dependencies = [ "anyhow", "assert_matches", @@ -6127,11 +6127,11 @@ dependencies = [ "serde_json", "sha2 0.10.2", "sha3 0.10.1", - "solana-frozen-abi 1.14.9", - "solana-frozen-abi-macro 1.14.9", - "solana-logger 1.14.9", - "solana-program 1.14.9", - "solana-sdk-macro 1.14.9", + "solana-frozen-abi 1.14.10", + "solana-frozen-abi-macro 1.14.10", + "solana-logger 1.14.10", + "solana-program 1.14.10", + "solana-sdk-macro 1.14.10", "static_assertions", "thiserror", "tiny-bip39", @@ -6154,7 +6154,7 @@ dependencies = [ [[package]] name = "solana-sdk-macro" -version = "1.14.9" +version = "1.14.10" dependencies = [ "bs58", "proc-macro2 1.0.41", @@ -6165,21 +6165,21 @@ dependencies = [ [[package]] name = "solana-send-transaction-service" -version = "1.14.9" +version = "1.14.10" dependencies = [ "crossbeam-channel", "log", "solana-client", - "solana-logger 1.14.9", + "solana-logger 1.14.10", "solana-measure", "solana-metrics", "solana-runtime", - "solana-sdk 1.14.9", + "solana-sdk 1.14.10", ] [[package]] name = "solana-stake-accounts" -version = "1.14.9" +version = "1.14.10" dependencies = [ "clap 2.33.3", "solana-clap-utils", @@ -6187,13 +6187,13 @@ dependencies = [ "solana-client", "solana-remote-wallet", "solana-runtime", - "solana-sdk 1.14.9", + "solana-sdk 1.14.10", "solana-stake-program", ] [[package]] name = "solana-stake-program" -version = "1.14.9" +version = "1.14.10" dependencies = [ "assert_matches", "bincode", @@ -6205,12 +6205,12 @@ dependencies = [ "serde", "serde_derive", "solana-config-program", - "solana-frozen-abi 1.14.9", - "solana-frozen-abi-macro 1.14.9", - "solana-logger 1.14.9", + "solana-frozen-abi 1.14.10", + "solana-frozen-abi-macro 1.14.10", + "solana-logger 1.14.10", "solana-metrics", "solana-program-runtime", - "solana-sdk 1.14.9", + "solana-sdk 1.14.10", "solana-vote-program", "test-case", "thiserror", @@ -6218,7 +6218,7 @@ dependencies = [ [[package]] name = "solana-storage-bigtable" -version = "1.14.9" +version = "1.14.10" dependencies = [ "backoff", "bincode", @@ -6239,7 +6239,7 @@ dependencies = [ "serde_derive", "smpl_jwt", "solana-metrics", - "solana-sdk 1.14.9", + "solana-sdk 1.14.10", "solana-storage-proto", "solana-transaction-status", "thiserror", @@ -6250,7 +6250,7 @@ dependencies = [ [[package]] name = "solana-storage-proto" -version = "1.14.9" +version = "1.14.10" dependencies = [ "bincode", "bs58", @@ -6259,25 +6259,25 @@ dependencies = [ "protobuf-src", "serde", "solana-account-decoder", - "solana-sdk 1.14.9", + "solana-sdk 1.14.10", "solana-transaction-status", "tonic-build 0.8.0", ] [[package]] name = "solana-store-tool" -version = "1.14.9" +version = "1.14.10" dependencies = [ "clap 2.33.3", "log", - "solana-logger 1.14.9", + "solana-logger 1.14.10", "solana-runtime", "solana-version", ] [[package]] name = "solana-streamer" -version = "1.14.9" +version = "1.14.10" dependencies = [ "crossbeam-channel", "futures-util", @@ -6294,10 +6294,10 @@ dependencies = [ "rand 0.7.3", "rcgen", "rustls 0.20.6", - "solana-logger 1.14.9", + "solana-logger 1.14.10", "solana-metrics", "solana-perf", - "solana-sdk 1.14.9", + "solana-sdk 1.14.10", "thiserror", "tokio", "x509-parser", @@ -6305,13 +6305,13 @@ dependencies = [ [[package]] name = "solana-sys-tuner" -version = "1.14.9" +version = "1.14.10" dependencies = [ "clap 2.33.3", "libc", "log", "nix", - "solana-logger 1.14.9", + "solana-logger 1.14.10", "solana-version", "sysctl", "unix_socket2", @@ -6320,7 +6320,7 @@ dependencies = [ [[package]] name = "solana-test-validator" -version = "1.14.9" +version = "1.14.10" dependencies = [ "base64 0.13.0", "log", @@ -6331,20 +6331,20 @@ dependencies = [ "solana-core", "solana-gossip", "solana-ledger", - "solana-logger 1.14.9", + "solana-logger 1.14.10", "solana-net-utils", "solana-program-runtime", "solana-program-test", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.9", + "solana-sdk 1.14.10", "solana-streamer", "tokio", ] [[package]] name = "solana-tokens" -version = "1.14.9" +version = "1.14.10" dependencies = [ "bincode", "chrono", @@ -6360,9 +6360,9 @@ dependencies = [ "solana-clap-utils", "solana-cli-config", "solana-client", - "solana-logger 1.14.9", + "solana-logger 1.14.10", "solana-remote-wallet", - "solana-sdk 1.14.9", + "solana-sdk 1.14.10", "solana-streamer", "solana-test-validator", "solana-transaction-status", @@ -6375,7 +6375,7 @@ dependencies = [ [[package]] name = "solana-transaction-dos" -version = "1.14.9" +version = "1.14.10" dependencies = [ "bincode", "clap 2.33.3", @@ -6389,11 +6389,11 @@ dependencies = [ "solana-faucet", "solana-gossip", "solana-local-cluster", - "solana-logger 1.14.9", + "solana-logger 1.14.10", "solana-measure", "solana-net-utils", "solana-runtime", - "solana-sdk 1.14.9", + "solana-sdk 1.14.10", "solana-streamer", "solana-transaction-status", "solana-version", @@ -6401,7 +6401,7 @@ dependencies = [ [[package]] name = "solana-transaction-status" -version = "1.14.9" +version = "1.14.10" dependencies = [ "Inflector", "base64 0.13.0", @@ -6417,7 +6417,7 @@ dependencies = [ "solana-address-lookup-table-program", "solana-measure", "solana-metrics", - "solana-sdk 1.14.9", + "solana-sdk 1.14.10", "solana-vote-program", "spl-associated-token-account", "spl-memo", @@ -6428,7 +6428,7 @@ dependencies = [ [[package]] name = "solana-upload-perf" -version = "1.14.9" +version = "1.14.10" dependencies = [ "serde_json", "solana-metrics", @@ -6436,7 +6436,7 @@ dependencies = [ [[package]] name = "solana-validator" -version = "1.14.9" +version = "1.14.10" dependencies = [ "chrono", "clap 2.33.3", @@ -6467,14 +6467,14 @@ dependencies = [ "solana-genesis-utils", "solana-gossip", "solana-ledger", - "solana-logger 1.14.9", + "solana-logger 1.14.10", "solana-metrics", "solana-net-utils", "solana-perf", "solana-poh", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.9", + "solana-sdk 1.14.10", "solana-send-transaction-service", "solana-storage-bigtable", "solana-streamer", @@ -6487,21 +6487,21 @@ dependencies = [ [[package]] name = "solana-version" -version = "1.14.9" +version = "1.14.10" dependencies = [ "log", "rustc_version 0.4.0", "semver 1.0.10", "serde", "serde_derive", - "solana-frozen-abi 1.14.9", - "solana-frozen-abi-macro 1.14.9", - "solana-sdk 1.14.9", + "solana-frozen-abi 1.14.10", + "solana-frozen-abi-macro 1.14.10", + "solana-sdk 1.14.10", ] [[package]] name = "solana-vote-program" -version = "1.14.9" +version = "1.14.10" dependencies = [ "bincode", "itertools", @@ -6512,18 +6512,18 @@ dependencies = [ "rustc_version 0.4.0", "serde", "serde_derive", - "solana-frozen-abi 1.14.9", - "solana-frozen-abi-macro 1.14.9", - "solana-logger 1.14.9", + "solana-frozen-abi 1.14.10", + "solana-frozen-abi-macro 1.14.10", + "solana-logger 1.14.10", "solana-metrics", "solana-program-runtime", - "solana-sdk 1.14.9", + "solana-sdk 1.14.10", "thiserror", ] [[package]] name = "solana-watchtower" -version = "1.14.9" +version = "1.14.10" dependencies = [ "clap 2.33.3", "humantime", @@ -6532,24 +6532,24 @@ dependencies = [ "solana-cli-config", "solana-cli-output", "solana-client", - "solana-logger 1.14.9", + "solana-logger 1.14.10", "solana-metrics", "solana-notifier", - "solana-sdk 1.14.9", + "solana-sdk 1.14.10", "solana-version", ] [[package]] name = "solana-zk-token-proof-program" -version = "1.14.9" +version = "1.14.10" dependencies = [ "bytemuck", "getrandom 0.1.16", "num-derive", "num-traits", "solana-program-runtime", - "solana-sdk 1.14.9", - "solana-zk-token-sdk 1.14.9", + "solana-sdk 1.14.10", + "solana-zk-token-sdk 1.14.10", ] [[package]] @@ -6585,7 +6585,7 @@ dependencies = [ [[package]] name = "solana-zk-token-sdk" -version = "1.14.9" +version = "1.14.10" dependencies = [ "aes-gcm-siv", "arrayref", @@ -6605,8 +6605,8 @@ dependencies = [ "serde", "serde_json", "sha3 0.9.1", - "solana-program 1.14.9", - "solana-sdk 1.14.9", + "solana-program 1.14.10", + "solana-sdk 1.14.10", "subtle", "thiserror", "zeroize", diff --git a/account-decoder/Cargo.toml b/account-decoder/Cargo.toml index d6e286aaabc84c..b70017a9744c90 100644 --- a/account-decoder/Cargo.toml +++ b/account-decoder/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-account-decoder" -version = "1.14.9" +version = "1.14.10" description = "Solana account decoder" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -19,10 +19,10 @@ lazy_static = "1.4.0" serde = "1.0.138" serde_derive = "1.0.103" serde_json = "1.0.81" -solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.9" } -solana-config-program = { path = "../programs/config", version = "=1.14.9" } -solana-sdk = { path = "../sdk", version = "=1.14.9" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.9" } +solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.10" } +solana-config-program = { path = "../programs/config", version = "=1.14.10" } +solana-sdk = { path = "../sdk", version = "=1.14.10" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.10" } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } spl-token-2022 = { version = "=0.5.0", features = ["no-entrypoint"] } thiserror = "1.0" diff --git a/accounts-bench/Cargo.toml b/accounts-bench/Cargo.toml index 7ecee8dee74035..0847fac12e4941 100644 --- a/accounts-bench/Cargo.toml +++ b/accounts-bench/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-accounts-bench" -version = "1.14.9" +version = "1.14.10" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -12,11 +12,11 @@ publish = false clap = "2.33.1" log = "0.4.17" rayon = "1.5.3" -solana-logger = { path = "../logger", version = "=1.14.9" } -solana-measure = { path = "../measure", version = "=1.14.9" } -solana-runtime = { path = "../runtime", version = "=1.14.9" } -solana-sdk = { path = "../sdk", version = "=1.14.9" } -solana-version = { path = "../version", version = "=1.14.9" } +solana-logger = { path = "../logger", version = "=1.14.10" } +solana-measure = { path = "../measure", version = "=1.14.10" } +solana-runtime = { path = "../runtime", version = "=1.14.10" } +solana-sdk = { path = "../sdk", version = "=1.14.10" } +solana-version = { path = "../version", version = "=1.14.10" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/accounts-cluster-bench/Cargo.toml b/accounts-cluster-bench/Cargo.toml index 8286d87d0f8916..c61ce47fe5fc9a 100644 --- a/accounts-cluster-bench/Cargo.toml +++ b/accounts-cluster-bench/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-accounts-cluster-bench" -version = "1.14.9" +version = "1.14.10" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -13,25 +13,25 @@ clap = "2.33.1" log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.9" } -solana-clap-utils = { path = "../clap-utils", version = "=1.14.9" } -solana-client = { path = "../client", version = "=1.14.9" } -solana-faucet = { path = "../faucet", version = "=1.14.9" } -solana-gossip = { path = "../gossip", version = "=1.14.9" } -solana-logger = { path = "../logger", version = "=1.14.9" } -solana-measure = { path = "../measure", version = "=1.14.9" } -solana-net-utils = { path = "../net-utils", version = "=1.14.9" } -solana-runtime = { path = "../runtime", version = "=1.14.9" } -solana-sdk = { path = "../sdk", version = "=1.14.9" } -solana-streamer = { path = "../streamer", version = "=1.14.9" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.9" } -solana-version = { path = "../version", version = "=1.14.9" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.10" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.10" } +solana-client = { path = "../client", version = "=1.14.10" } +solana-faucet = { path = "../faucet", version = "=1.14.10" } +solana-gossip = { path = "../gossip", version = "=1.14.10" } +solana-logger = { path = "../logger", version = "=1.14.10" } +solana-measure = { path = "../measure", version = "=1.14.10" } +solana-net-utils = { path = "../net-utils", version = "=1.14.10" } +solana-runtime = { path = "../runtime", version = "=1.14.10" } +solana-sdk = { path = "../sdk", version = "=1.14.10" } +solana-streamer = { path = "../streamer", version = "=1.14.10" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.10" } +solana-version = { path = "../version", version = "=1.14.10" } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } [dev-dependencies] -solana-core = { path = "../core", version = "=1.14.9" } -solana-local-cluster = { path = "../local-cluster", version = "=1.14.9" } -solana-test-validator = { path = "../test-validator", version = "=1.14.9" } +solana-core = { path = "../core", version = "=1.14.10" } +solana-local-cluster = { path = "../local-cluster", version = "=1.14.10" } +solana-test-validator = { path = "../test-validator", version = "=1.14.10" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/banking-bench/Cargo.toml b/banking-bench/Cargo.toml index 793d4ceda9136f..9c16148a4509e8 100644 --- a/banking-bench/Cargo.toml +++ b/banking-bench/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-banking-bench" -version = "1.14.9" +version = "1.14.10" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,18 +14,18 @@ crossbeam-channel = "0.5" log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" -solana-client = { path = "../client", version = "=1.14.9" } -solana-core = { path = "../core", version = "=1.14.9" } -solana-gossip = { path = "../gossip", version = "=1.14.9" } -solana-ledger = { path = "../ledger", version = "=1.14.9" } -solana-logger = { path = "../logger", version = "=1.14.9" } -solana-measure = { path = "../measure", version = "=1.14.9" } -solana-perf = { path = "../perf", version = "=1.14.9" } -solana-poh = { path = "../poh", version = "=1.14.9" } -solana-runtime = { path = "../runtime", version = "=1.14.9" } -solana-sdk = { path = "../sdk", version = "=1.14.9" } -solana-streamer = { path = "../streamer", version = "=1.14.9" } -solana-version = { path = "../version", version = "=1.14.9" } +solana-client = { path = "../client", version = "=1.14.10" } +solana-core = { path = "../core", version = "=1.14.10" } +solana-gossip = { path = "../gossip", version = "=1.14.10" } +solana-ledger = { path = "../ledger", version = "=1.14.10" } +solana-logger = { path = "../logger", version = "=1.14.10" } +solana-measure = { path = "../measure", version = "=1.14.10" } +solana-perf = { path = "../perf", version = "=1.14.10" } +solana-poh = { path = "../poh", version = "=1.14.10" } +solana-runtime = { path = "../runtime", version = "=1.14.10" } +solana-sdk = { path = "../sdk", version = "=1.14.10" } +solana-streamer = { path = "../streamer", version = "=1.14.10" } +solana-version = { path = "../version", version = "=1.14.10" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/banks-client/Cargo.toml b/banks-client/Cargo.toml index 29d80250e5b74e..924328e386db06 100644 --- a/banks-client/Cargo.toml +++ b/banks-client/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-banks-client" -version = "1.14.9" +version = "1.14.10" description = "Solana banks client" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,17 +12,17 @@ edition = "2021" [dependencies] borsh = "0.9.3" futures = "0.3" -solana-banks-interface = { path = "../banks-interface", version = "=1.14.9" } -solana-program = { path = "../sdk/program", version = "=1.14.9" } -solana-sdk = { path = "../sdk", version = "=1.14.9" } +solana-banks-interface = { path = "../banks-interface", version = "=1.14.10" } +solana-program = { path = "../sdk/program", version = "=1.14.10" } +solana-sdk = { path = "../sdk", version = "=1.14.10" } tarpc = { version = "0.29.0", features = ["full"] } thiserror = "1.0" tokio = { version = "~1.14.1", features = ["full"] } tokio-serde = { version = "0.8", features = ["bincode"] } [dev-dependencies] -solana-banks-server = { path = "../banks-server", version = "=1.14.9" } -solana-runtime = { path = "../runtime", version = "=1.14.9" } +solana-banks-server = { path = "../banks-server", version = "=1.14.10" } +solana-runtime = { path = "../runtime", version = "=1.14.10" } [lib] crate-type = ["lib"] diff --git a/banks-interface/Cargo.toml b/banks-interface/Cargo.toml index 2005c59ea1fcb1..45655c0e71a983 100644 --- a/banks-interface/Cargo.toml +++ b/banks-interface/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-banks-interface" -version = "1.14.9" +version = "1.14.10" description = "Solana banks RPC interface" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -11,7 +11,7 @@ edition = "2021" [dependencies] serde = { version = "1.0.138", features = ["derive"] } -solana-sdk = { path = "../sdk", version = "=1.14.9" } +solana-sdk = { path = "../sdk", version = "=1.14.10" } tarpc = { version = "0.29.0", features = ["full"] } [lib] diff --git a/banks-server/Cargo.toml b/banks-server/Cargo.toml index e3727525e1905b..fc7b4df0ed1cb1 100644 --- a/banks-server/Cargo.toml +++ b/banks-server/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-banks-server" -version = "1.14.9" +version = "1.14.10" description = "Solana banks server" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,11 +13,11 @@ edition = "2021" bincode = "1.3.3" crossbeam-channel = "0.5" futures = "0.3" -solana-banks-interface = { path = "../banks-interface", version = "=1.14.9" } -solana-client = { path = "../client", version = "=1.14.9" } -solana-runtime = { path = "../runtime", version = "=1.14.9" } -solana-sdk = { path = "../sdk", version = "=1.14.9" } -solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.9" } +solana-banks-interface = { path = "../banks-interface", version = "=1.14.10" } +solana-client = { path = "../client", version = "=1.14.10" } +solana-runtime = { path = "../runtime", version = "=1.14.10" } +solana-sdk = { path = "../sdk", version = "=1.14.10" } +solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.10" } tarpc = { version = "0.29.0", features = ["full"] } tokio = { version = "1", features = ["full"] } tokio-serde = { version = "0.8", features = ["bincode"] } diff --git a/bench-streamer/Cargo.toml b/bench-streamer/Cargo.toml index 394576e6670898..cf858f30ce7e57 100644 --- a/bench-streamer/Cargo.toml +++ b/bench-streamer/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-bench-streamer" -version = "1.14.9" +version = "1.14.10" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -11,9 +11,9 @@ publish = false [dependencies] clap = { version = "3.1.5", features = ["cargo"] } crossbeam-channel = "0.5" -solana-net-utils = { path = "../net-utils", version = "=1.14.9" } -solana-streamer = { path = "../streamer", version = "=1.14.9" } -solana-version = { path = "../version", version = "=1.14.9" } +solana-net-utils = { path = "../net-utils", version = "=1.14.10" } +solana-streamer = { path = "../streamer", version = "=1.14.10" } +solana-version = { path = "../version", version = "=1.14.10" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/bench-tps/Cargo.toml b/bench-tps/Cargo.toml index d6473f4f53c379..7beec81610b796 100644 --- a/bench-tps/Cargo.toml +++ b/bench-tps/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-bench-tps" -version = "1.14.9" +version = "1.14.10" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -15,28 +15,28 @@ log = "0.4.17" rayon = "1.5.3" serde_json = "1.0.81" serde_yaml = "0.8.26" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.9" } -solana-cli-config = { path = "../cli-config", version = "=1.14.9" } -solana-client = { path = "../client", version = "=1.14.9" } -solana-core = { path = "../core", version = "=1.14.9" } -solana-faucet = { path = "../faucet", version = "=1.14.9" } -solana-genesis = { path = "../genesis", version = "=1.14.9" } -solana-gossip = { path = "../gossip", version = "=1.14.9" } -solana-logger = { path = "../logger", version = "=1.14.9" } -solana-measure = { path = "../measure", version = "=1.14.9" } -solana-metrics = { path = "../metrics", version = "=1.14.9" } -solana-net-utils = { path = "../net-utils", version = "=1.14.9" } -solana-rpc = { path = "../rpc", version = "=1.14.9" } -solana-runtime = { path = "../runtime", version = "=1.14.9" } -solana-sdk = { path = "../sdk", version = "=1.14.9" } -solana-streamer = { path = "../streamer", version = "=1.14.9" } -solana-version = { path = "../version", version = "=1.14.9" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.10" } +solana-cli-config = { path = "../cli-config", version = "=1.14.10" } +solana-client = { path = "../client", version = "=1.14.10" } +solana-core = { path = "../core", version = "=1.14.10" } +solana-faucet = { path = "../faucet", version = "=1.14.10" } +solana-genesis = { path = "../genesis", version = "=1.14.10" } +solana-gossip = { path = "../gossip", version = "=1.14.10" } +solana-logger = { path = "../logger", version = "=1.14.10" } +solana-measure = { path = "../measure", version = "=1.14.10" } +solana-metrics = { path = "../metrics", version = "=1.14.10" } +solana-net-utils = { path = "../net-utils", version = "=1.14.10" } +solana-rpc = { path = "../rpc", version = "=1.14.10" } +solana-runtime = { path = "../runtime", version = "=1.14.10" } +solana-sdk = { path = "../sdk", version = "=1.14.10" } +solana-streamer = { path = "../streamer", version = "=1.14.10" } +solana-version = { path = "../version", version = "=1.14.10" } thiserror = "1.0" [dev-dependencies] serial_test = "0.8.0" -solana-local-cluster = { path = "../local-cluster", version = "=1.14.9" } -solana-test-validator = { path = "../test-validator", version = "=1.14.9" } +solana-local-cluster = { path = "../local-cluster", version = "=1.14.10" } +solana-test-validator = { path = "../test-validator", version = "=1.14.10" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/bloom/Cargo.toml b/bloom/Cargo.toml index ae9a9da2f13cc4..406592dcb5c31f 100644 --- a/bloom/Cargo.toml +++ b/bloom/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bloom" -version = "1.14.9" +version = "1.14.10" description = "Solana bloom filter" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -17,9 +17,9 @@ rand = "0.7.0" rayon = "1.5.3" serde = { version = "1.0.138", features = ["rc"] } serde_derive = "1.0.103" -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.9" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.9" } -solana-sdk = { path = "../sdk", version = "=1.14.9" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.10" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.10" } +solana-sdk = { path = "../sdk", version = "=1.14.10" } [lib] crate-type = ["lib"] diff --git a/bucket_map/Cargo.toml b/bucket_map/Cargo.toml index 5c22791b259102..3978b9f3a9cfe0 100644 --- a/bucket_map/Cargo.toml +++ b/bucket_map/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bucket-map" -version = "1.14.9" +version = "1.14.10" description = "solana-bucket-map" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-bucket-map" @@ -15,14 +15,14 @@ log = { version = "0.4.17" } memmap2 = "0.5.3" modular-bitfield = "0.11.2" rand = "0.7.0" -solana-measure = { path = "../measure", version = "=1.14.9" } -solana-sdk = { path = "../sdk", version = "=1.14.9" } +solana-measure = { path = "../measure", version = "=1.14.10" } +solana-sdk = { path = "../sdk", version = "=1.14.10" } tempfile = "3.3.0" [dev-dependencies] fs_extra = "1.2.0" rayon = "1.5.3" -solana-logger = { path = "../logger", version = "=1.14.9" } +solana-logger = { path = "../logger", version = "=1.14.10" } [lib] crate-type = ["lib"] diff --git a/clap-utils/Cargo.toml b/clap-utils/Cargo.toml index f039fe88d664bc..59667a81892b6c 100644 --- a/clap-utils/Cargo.toml +++ b/clap-utils/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-clap-utils" -version = "1.14.9" +version = "1.14.10" description = "Solana utilities for the clap" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,9 +13,9 @@ edition = "2021" chrono = "0.4" clap = "2.33.0" rpassword = "6.0" -solana-perf = { path = "../perf", version = "=1.14.9" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.9", default-features = false } -solana-sdk = { path = "../sdk", version = "=1.14.9" } +solana-perf = { path = "../perf", version = "=1.14.10" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.10", default-features = false } +solana-sdk = { path = "../sdk", version = "=1.14.10" } thiserror = "1.0.31" tiny-bip39 = "0.8.2" uriparse = "0.6.4" diff --git a/clap-v3-utils/Cargo.toml b/clap-v3-utils/Cargo.toml index aa9be0a1dea736..3b7c42087fe01d 100644 --- a/clap-v3-utils/Cargo.toml +++ b/clap-v3-utils/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-clap-v3-utils" -version = "1.14.9" +version = "1.14.10" description = "Solana utilities for the clap v3" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,9 +13,9 @@ edition = "2021" chrono = "0.4" clap = { version = "3.1.5", features = ["cargo"] } rpassword = "6.0" -solana-perf = { path = "../perf", version = "=1.14.9" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.9", default-features = false } -solana-sdk = { path = "../sdk", version = "=1.14.9" } +solana-perf = { path = "../perf", version = "=1.14.10" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.10", default-features = false } +solana-sdk = { path = "../sdk", version = "=1.14.10" } thiserror = "1.0.31" tiny-bip39 = "0.8.2" uriparse = "0.6.4" diff --git a/cli-config/Cargo.toml b/cli-config/Cargo.toml index 653d8967c4c680..7dca9c4989bb6c 100644 --- a/cli-config/Cargo.toml +++ b/cli-config/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-cli-config" description = "Blockchain, Rebuilt for Scale" -version = "1.14.9" +version = "1.14.10" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -15,8 +15,8 @@ lazy_static = "1.4.0" serde = "1.0.138" serde_derive = "1.0.103" serde_yaml = "0.8.26" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.9" } -solana-sdk = { path = "../sdk", version = "=1.14.9" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.10" } +solana-sdk = { path = "../sdk", version = "=1.14.10" } url = "2.2.2" [dev-dependencies] diff --git a/cli-output/Cargo.toml b/cli-output/Cargo.toml index 32519d57770273..ac8fd6d5722de6 100644 --- a/cli-output/Cargo.toml +++ b/cli-output/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-cli-output" description = "Blockchain, Rebuilt for Scale" -version = "1.14.9" +version = "1.14.10" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -21,13 +21,13 @@ pretty-hex = "0.3.0" semver = "1.0.10" serde = "1.0.138" serde_json = "1.0.81" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.9" } -solana-clap-utils = { path = "../clap-utils", version = "=1.14.9" } -solana-cli-config = { path = "../cli-config", version = "=1.14.9" } -solana-client = { path = "../client", version = "=1.14.9" } -solana-sdk = { path = "../sdk", version = "=1.14.9" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.9" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.9" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.10" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.10" } +solana-cli-config = { path = "../cli-config", version = "=1.14.10" } +solana-client = { path = "../client", version = "=1.14.10" } +solana-sdk = { path = "../sdk", version = "=1.14.10" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.10" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.10" } spl-memo = { version = "=3.0.1", features = ["no-entrypoint"] } [dev-dependencies] diff --git a/cli/Cargo.toml b/cli/Cargo.toml index 682ffc15603441..f6f982492f3123 100644 --- a/cli/Cargo.toml +++ b/cli/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-cli" description = "Blockchain, Rebuilt for Scale" -version = "1.14.9" +version = "1.14.10" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -27,30 +27,30 @@ semver = "1.0.10" serde = "1.0.138" serde_derive = "1.0.103" serde_json = "1.0.81" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.9" } -solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.9" } -solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.9" } -solana-clap-utils = { path = "../clap-utils", version = "=1.14.9" } -solana-cli-config = { path = "../cli-config", version = "=1.14.9" } -solana-cli-output = { path = "../cli-output", version = "=1.14.9" } -solana-client = { path = "../client", version = "=1.14.9" } -solana-config-program = { path = "../programs/config", version = "=1.14.9" } -solana-faucet = { path = "../faucet", version = "=1.14.9" } -solana-logger = { path = "../logger", version = "=1.14.9" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.9" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.9" } -solana-sdk = { path = "../sdk", version = "=1.14.9" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.9" } -solana-version = { path = "../version", version = "=1.14.9" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.9" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.10" } +solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.10" } +solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.10" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.10" } +solana-cli-config = { path = "../cli-config", version = "=1.14.10" } +solana-cli-output = { path = "../cli-output", version = "=1.14.10" } +solana-client = { path = "../client", version = "=1.14.10" } +solana-config-program = { path = "../programs/config", version = "=1.14.10" } +solana-faucet = { path = "../faucet", version = "=1.14.10" } +solana-logger = { path = "../logger", version = "=1.14.10" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.10" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.10" } +solana-sdk = { path = "../sdk", version = "=1.14.10" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.10" } +solana-version = { path = "../version", version = "=1.14.10" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.10" } solana_rbpf = "=0.2.31" spl-memo = { version = "=3.0.1", features = ["no-entrypoint"] } thiserror = "1.0.31" tiny-bip39 = "0.8.2" [dev-dependencies] -solana-streamer = { path = "../streamer", version = "=1.14.9" } -solana-test-validator = { path = "../test-validator", version = "=1.14.9" } +solana-streamer = { path = "../streamer", version = "=1.14.10" } +solana-test-validator = { path = "../test-validator", version = "=1.14.10" } tempfile = "3.3.0" [[bin]] diff --git a/client-test/Cargo.toml b/client-test/Cargo.toml index 04c44bc4be1446..5c070465705713 100644 --- a/client-test/Cargo.toml +++ b/client-test/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-client-test" -version = "1.14.9" +version = "1.14.10" description = "Solana RPC Test" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,25 +14,25 @@ publish = false futures-util = "0.3.21" serde_json = "1.0.81" serial_test = "0.8.0" -solana-client = { path = "../client", version = "=1.14.9" } -solana-ledger = { path = "../ledger", version = "=1.14.9" } -solana-measure = { path = "../measure", version = "=1.14.9" } -solana-merkle-tree = { path = "../merkle-tree", version = "=1.14.9" } -solana-metrics = { path = "../metrics", version = "=1.14.9" } -solana-perf = { path = "../perf", version = "=1.14.9" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.9" } -solana-rpc = { path = "../rpc", version = "=1.14.9" } -solana-runtime = { path = "../runtime", version = "=1.14.9" } -solana-sdk = { path = "../sdk", version = "=1.14.9" } -solana-streamer = { path = "../streamer", version = "=1.14.9" } -solana-test-validator = { path = "../test-validator", version = "=1.14.9" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.9" } -solana-version = { path = "../version", version = "=1.14.9" } +solana-client = { path = "../client", version = "=1.14.10" } +solana-ledger = { path = "../ledger", version = "=1.14.10" } +solana-measure = { path = "../measure", version = "=1.14.10" } +solana-merkle-tree = { path = "../merkle-tree", version = "=1.14.10" } +solana-metrics = { path = "../metrics", version = "=1.14.10" } +solana-perf = { path = "../perf", version = "=1.14.10" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.10" } +solana-rpc = { path = "../rpc", version = "=1.14.10" } +solana-runtime = { path = "../runtime", version = "=1.14.10" } +solana-sdk = { path = "../sdk", version = "=1.14.10" } +solana-streamer = { path = "../streamer", version = "=1.14.10" } +solana-test-validator = { path = "../test-validator", version = "=1.14.10" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.10" } +solana-version = { path = "../version", version = "=1.14.10" } systemstat = "0.1.11" tokio = { version = "~1.14.1", features = ["full"] } [dev-dependencies] -solana-logger = { path = "../logger", version = "=1.14.9" } +solana-logger = { path = "../logger", version = "=1.14.10" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/client/Cargo.toml b/client/Cargo.toml index 0968967c8c0210..91f5304ac66067 100644 --- a/client/Cargo.toml +++ b/client/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-client" -version = "1.14.9" +version = "1.14.10" description = "Solana Client" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -38,17 +38,17 @@ semver = "1.0.10" serde = "1.0.138" serde_derive = "1.0.103" serde_json = "1.0.81" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.9" } -solana-clap-utils = { path = "../clap-utils", version = "=1.14.9" } -solana-faucet = { path = "../faucet", version = "=1.14.9" } -solana-measure = { path = "../measure", version = "=1.14.9" } -solana-metrics = { path = "../metrics", version = "=1.14.9" } -solana-net-utils = { path = "../net-utils", version = "=1.14.9" } -solana-sdk = { path = "../sdk", version = "=1.14.9" } -solana-streamer = { path = "../streamer", version = "=1.14.9" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.9" } -solana-version = { path = "../version", version = "=1.14.9" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.9" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.10" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.10" } +solana-faucet = { path = "../faucet", version = "=1.14.10" } +solana-measure = { path = "../measure", version = "=1.14.10" } +solana-metrics = { path = "../metrics", version = "=1.14.10" } +solana-net-utils = { path = "../net-utils", version = "=1.14.10" } +solana-sdk = { path = "../sdk", version = "=1.14.10" } +solana-streamer = { path = "../streamer", version = "=1.14.10" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.10" } +solana-version = { path = "../version", version = "=1.14.10" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.10" } spl-token-2022 = { version = "=0.5.0", features = ["no-entrypoint"] } thiserror = "1.0" tokio = { version = "1", features = ["full"] } @@ -61,8 +61,8 @@ url = "2.2.2" anyhow = "1.0.58" assert_matches = "1.5.0" jsonrpc-http-server = "18.0.0" -solana-logger = { path = "../logger", version = "=1.14.9" } -solana-perf = { path = "../perf", version = "=1.14.9" } +solana-logger = { path = "../logger", version = "=1.14.10" } +solana-perf = { path = "../perf", version = "=1.14.10" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/core/Cargo.toml b/core/Cargo.toml index 682cbf06b5258e..fb5ed88d40d538 100644 --- a/core/Cargo.toml +++ b/core/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "solana-core" description = "Blockchain, Rebuilt for Scale" -version = "1.14.9" +version = "1.14.10" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-core" readme = "../README.md" @@ -36,30 +36,30 @@ rand_chacha = "0.2.2" rayon = "1.5.3" serde = "1.0.138" serde_derive = "1.0.103" -solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.9" } -solana-bloom = { path = "../bloom", version = "=1.14.9" } -solana-client = { path = "../client", version = "=1.14.9" } -solana-entry = { path = "../entry", version = "=1.14.9" } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.9" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.9" } -solana-geyser-plugin-manager = { path = "../geyser-plugin-manager", version = "=1.14.9" } -solana-gossip = { path = "../gossip", version = "=1.14.9" } -solana-ledger = { path = "../ledger", version = "=1.14.9" } -solana-measure = { path = "../measure", version = "=1.14.9" } -solana-metrics = { path = "../metrics", version = "=1.14.9" } -solana-net-utils = { path = "../net-utils", version = "=1.14.9" } -solana-perf = { path = "../perf", version = "=1.14.9" } -solana-poh = { path = "../poh", version = "=1.14.9" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.9" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.9" } -solana-rpc = { path = "../rpc", version = "=1.14.9" } -solana-runtime = { path = "../runtime", version = "=1.14.9" } -solana-sdk = { path = "../sdk", version = "=1.14.9" } -solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.9" } -solana-streamer = { path = "../streamer", version = "=1.14.9" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.9" } -solana-version = { path = "../version", version = "=1.14.9" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.9" } +solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.10" } +solana-bloom = { path = "../bloom", version = "=1.14.10" } +solana-client = { path = "../client", version = "=1.14.10" } +solana-entry = { path = "../entry", version = "=1.14.10" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.10" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.10" } +solana-geyser-plugin-manager = { path = "../geyser-plugin-manager", version = "=1.14.10" } +solana-gossip = { path = "../gossip", version = "=1.14.10" } +solana-ledger = { path = "../ledger", version = "=1.14.10" } +solana-measure = { path = "../measure", version = "=1.14.10" } +solana-metrics = { path = "../metrics", version = "=1.14.10" } +solana-net-utils = { path = "../net-utils", version = "=1.14.10" } +solana-perf = { path = "../perf", version = "=1.14.10" } +solana-poh = { path = "../poh", version = "=1.14.10" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.10" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.10" } +solana-rpc = { path = "../rpc", version = "=1.14.10" } +solana-runtime = { path = "../runtime", version = "=1.14.10" } +solana-sdk = { path = "../sdk", version = "=1.14.10" } +solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.10" } +solana-streamer = { path = "../streamer", version = "=1.14.10" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.10" } +solana-version = { path = "../version", version = "=1.14.10" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.10" } sys-info = "0.9.1" tempfile = "3.3.0" thiserror = "1.0" @@ -71,9 +71,9 @@ matches = "0.1.9" raptorq = "1.7.0" serde_json = "1.0.81" serial_test = "0.8.0" -solana-logger = { path = "../logger", version = "=1.14.9" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.9" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.9" } +solana-logger = { path = "../logger", version = "=1.14.10" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.10" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.10" } static_assertions = "1.1.0" systemstat = "0.1.11" test-case = "2.1.0" diff --git a/dos/Cargo.toml b/dos/Cargo.toml index b95d99afc563ab..ab0e04b213ea30 100644 --- a/dos/Cargo.toml +++ b/dos/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-dos" -version = "1.14.9" +version = "1.14.10" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -17,23 +17,23 @@ itertools = "0.10.3" log = "0.4.17" rand = "0.7.0" serde = "1.0.138" -solana-bench-tps = { path = "../bench-tps", version = "=1.14.9" } -solana-client = { path = "../client", version = "=1.14.9" } -solana-core = { path = "../core", version = "=1.14.9" } -solana-faucet = { path = "../faucet", version = "=1.14.9" } -solana-gossip = { path = "../gossip", version = "=1.14.9" } -solana-logger = { path = "../logger", version = "=1.14.9" } -solana-measure = { path = "../measure", version = "=1.14.9" } -solana-net-utils = { path = "../net-utils", version = "=1.14.9" } -solana-perf = { path = "../perf", version = "=1.14.9" } -solana-rpc = { path = "../rpc", version = "=1.14.9" } -solana-sdk = { path = "../sdk", version = "=1.14.9" } -solana-streamer = { path = "../streamer", version = "=1.14.9" } -solana-version = { path = "../version", version = "=1.14.9" } +solana-bench-tps = { path = "../bench-tps", version = "=1.14.10" } +solana-client = { path = "../client", version = "=1.14.10" } +solana-core = { path = "../core", version = "=1.14.10" } +solana-faucet = { path = "../faucet", version = "=1.14.10" } +solana-gossip = { path = "../gossip", version = "=1.14.10" } +solana-logger = { path = "../logger", version = "=1.14.10" } +solana-measure = { path = "../measure", version = "=1.14.10" } +solana-net-utils = { path = "../net-utils", version = "=1.14.10" } +solana-perf = { path = "../perf", version = "=1.14.10" } +solana-rpc = { path = "../rpc", version = "=1.14.10" } +solana-sdk = { path = "../sdk", version = "=1.14.10" } +solana-streamer = { path = "../streamer", version = "=1.14.10" } +solana-version = { path = "../version", version = "=1.14.10" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] [dev-dependencies] serial_test = "0.8.0" -solana-local-cluster = { path = "../local-cluster", version = "=1.14.9" } +solana-local-cluster = { path = "../local-cluster", version = "=1.14.10" } diff --git a/download-utils/Cargo.toml b/download-utils/Cargo.toml index b81e7edcce9c59..75f83072a2da3d 100644 --- a/download-utils/Cargo.toml +++ b/download-utils/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-download-utils" -version = "1.14.9" +version = "1.14.10" description = "Solana Download Utils" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,8 +14,8 @@ console = "0.15.0" indicatif = "0.16.2" log = "0.4.17" reqwest = { version = "0.11.11", default-features = false, features = ["blocking", "brotli", "deflate", "gzip", "rustls-tls", "json"] } -solana-runtime = { path = "../runtime", version = "=1.14.9" } -solana-sdk = { path = "../sdk", version = "=1.14.9" } +solana-runtime = { path = "../runtime", version = "=1.14.10" } +solana-sdk = { path = "../sdk", version = "=1.14.10" } [lib] crate-type = ["lib"] diff --git a/entry/Cargo.toml b/entry/Cargo.toml index 258543caff84f8..1059262b2bffca 100644 --- a/entry/Cargo.toml +++ b/entry/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-entry" -version = "1.14.9" +version = "1.14.10" description = "Solana Entry" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -19,16 +19,16 @@ log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" serde = "1.0.138" -solana-measure = { path = "../measure", version = "=1.14.9" } -solana-merkle-tree = { path = "../merkle-tree", version = "=1.14.9" } -solana-metrics = { path = "../metrics", version = "=1.14.9" } -solana-perf = { path = "../perf", version = "=1.14.9" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.9" } -solana-sdk = { path = "../sdk", version = "=1.14.9" } +solana-measure = { path = "../measure", version = "=1.14.10" } +solana-merkle-tree = { path = "../merkle-tree", version = "=1.14.10" } +solana-metrics = { path = "../metrics", version = "=1.14.10" } +solana-perf = { path = "../perf", version = "=1.14.10" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.10" } +solana-sdk = { path = "../sdk", version = "=1.14.10" } [dev-dependencies] matches = "0.1.9" -solana-logger = { path = "../logger", version = "=1.14.9" } +solana-logger = { path = "../logger", version = "=1.14.10" } [lib] crate-type = ["lib"] diff --git a/faucet/Cargo.toml b/faucet/Cargo.toml index 207debbacb14cf..a43add7c724a28 100644 --- a/faucet/Cargo.toml +++ b/faucet/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-faucet" -version = "1.14.9" +version = "1.14.10" description = "Solana Faucet" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -17,12 +17,12 @@ crossbeam-channel = "0.5" log = "0.4.17" serde = "1.0.138" serde_derive = "1.0.103" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.9" } -solana-cli-config = { path = "../cli-config", version = "=1.14.9" } -solana-logger = { path = "../logger", version = "=1.14.9" } -solana-metrics = { path = "../metrics", version = "=1.14.9" } -solana-sdk = { path = "../sdk", version = "=1.14.9" } -solana-version = { path = "../version", version = "=1.14.9" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.10" } +solana-cli-config = { path = "../cli-config", version = "=1.14.10" } +solana-logger = { path = "../logger", version = "=1.14.10" } +solana-metrics = { path = "../metrics", version = "=1.14.10" } +solana-sdk = { path = "../sdk", version = "=1.14.10" } +solana-version = { path = "../version", version = "=1.14.10" } spl-memo = { version = "=3.0.1", features = ["no-entrypoint"] } thiserror = "1.0" tokio = { version = "1", features = ["full"] } diff --git a/frozen-abi/Cargo.toml b/frozen-abi/Cargo.toml index c841fe4ce6d3c5..eb33d536016163 100644 --- a/frozen-abi/Cargo.toml +++ b/frozen-abi/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-frozen-abi" -version = "1.14.9" +version = "1.14.10" description = "Solana Frozen ABI" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -20,7 +20,7 @@ serde_bytes = "0.11" serde_derive = "1.0" serde_json = "1.0" sha2 = "0.10.2" -solana-frozen-abi-macro = { path = "macro", version = "=1.14.9" } +solana-frozen-abi-macro = { path = "macro", version = "=1.14.10" } thiserror = "1.0" [target.'cfg(not(target_os = "solana"))'.dependencies] @@ -43,7 +43,7 @@ rand_core = { version = "0.6.3", features = ["alloc", "getrandom", "std"] } subtle = { version = "2.4.1", features = ["default", "i128", "std"] } [target.'cfg(not(target_os = "solana"))'.dev-dependencies] -solana-logger = { path = "../logger", version = "=1.14.9" } +solana-logger = { path = "../logger", version = "=1.14.10" } [build-dependencies] rustc_version = "0.4" diff --git a/frozen-abi/macro/Cargo.toml b/frozen-abi/macro/Cargo.toml index ba1e8fbc8fb20d..3d76d0c9200275 100644 --- a/frozen-abi/macro/Cargo.toml +++ b/frozen-abi/macro/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-frozen-abi-macro" -version = "1.14.9" +version = "1.14.10" description = "Solana Frozen ABI Macro" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/genesis-utils/Cargo.toml b/genesis-utils/Cargo.toml index 1e7b7f9c16bba7..44a4e04d948ebb 100644 --- a/genesis-utils/Cargo.toml +++ b/genesis-utils/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-genesis-utils" -version = "1.14.9" +version = "1.14.10" description = "Solana Genesis Utils" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,9 +10,9 @@ documentation = "https://docs.rs/solana-download-utils" edition = "2021" [dependencies] -solana-download-utils = { path = "../download-utils", version = "=1.14.9" } -solana-runtime = { path = "../runtime", version = "=1.14.9" } -solana-sdk = { path = "../sdk", version = "=1.14.9" } +solana-download-utils = { path = "../download-utils", version = "=1.14.10" } +solana-runtime = { path = "../runtime", version = "=1.14.10" } +solana-sdk = { path = "../sdk", version = "=1.14.10" } [lib] crate-type = ["lib"] diff --git a/genesis/Cargo.toml b/genesis/Cargo.toml index a38dc8b8c5fe07..b446b4430f1d79 100644 --- a/genesis/Cargo.toml +++ b/genesis/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-genesis" description = "Blockchain, Rebuilt for Scale" -version = "1.14.9" +version = "1.14.10" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -15,16 +15,16 @@ clap = "2.33.1" serde = "1.0.138" serde_json = "1.0.81" serde_yaml = "0.8.26" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.9" } -solana-cli-config = { path = "../cli-config", version = "=1.14.9" } -solana-entry = { path = "../entry", version = "=1.14.9" } -solana-ledger = { path = "../ledger", version = "=1.14.9" } -solana-logger = { path = "../logger", version = "=1.14.9" } -solana-runtime = { path = "../runtime", version = "=1.14.9" } -solana-sdk = { path = "../sdk", version = "=1.14.9" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.9" } -solana-version = { path = "../version", version = "=1.14.9" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.9" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.10" } +solana-cli-config = { path = "../cli-config", version = "=1.14.10" } +solana-entry = { path = "../entry", version = "=1.14.10" } +solana-ledger = { path = "../ledger", version = "=1.14.10" } +solana-logger = { path = "../logger", version = "=1.14.10" } +solana-runtime = { path = "../runtime", version = "=1.14.10" } +solana-sdk = { path = "../sdk", version = "=1.14.10" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.10" } +solana-version = { path = "../version", version = "=1.14.10" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.10" } tempfile = "3.3.0" [[bin]] diff --git a/geyser-plugin-interface/Cargo.toml b/geyser-plugin-interface/Cargo.toml index 085e867b428287..a1de3ba2bfe16c 100644 --- a/geyser-plugin-interface/Cargo.toml +++ b/geyser-plugin-interface/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-geyser-plugin-interface" description = "The Solana Geyser plugin interface." -version = "1.14.9" +version = "1.14.10" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -11,8 +11,8 @@ documentation = "https://docs.rs/solana-geyser-plugin-interface" [dependencies] log = "0.4.17" -solana-sdk = { path = "../sdk", version = "=1.14.9" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.9" } +solana-sdk = { path = "../sdk", version = "=1.14.10" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.10" } thiserror = "1.0.31" [package.metadata.docs.rs] diff --git a/geyser-plugin-manager/Cargo.toml b/geyser-plugin-manager/Cargo.toml index cc1f371b85fe60..75a4ed0766d527 100644 --- a/geyser-plugin-manager/Cargo.toml +++ b/geyser-plugin-manager/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-geyser-plugin-manager" description = "The Solana Geyser plugin manager." -version = "1.14.9" +version = "1.14.10" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -16,13 +16,13 @@ json5 = "0.4.1" libloading = "0.7.3" log = "0.4.17" serde_json = "1.0.81" -solana-geyser-plugin-interface = { path = "../geyser-plugin-interface", version = "=1.14.9" } -solana-measure = { path = "../measure", version = "=1.14.9" } -solana-metrics = { path = "../metrics", version = "=1.14.9" } -solana-rpc = { path = "../rpc", version = "=1.14.9" } -solana-runtime = { path = "../runtime", version = "=1.14.9" } -solana-sdk = { path = "../sdk", version = "=1.14.9" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.9" } +solana-geyser-plugin-interface = { path = "../geyser-plugin-interface", version = "=1.14.10" } +solana-measure = { path = "../measure", version = "=1.14.10" } +solana-metrics = { path = "../metrics", version = "=1.14.10" } +solana-rpc = { path = "../rpc", version = "=1.14.10" } +solana-runtime = { path = "../runtime", version = "=1.14.10" } +solana-sdk = { path = "../sdk", version = "=1.14.10" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.10" } thiserror = "1.0.31" [package.metadata.docs.rs] diff --git a/gossip/Cargo.toml b/gossip/Cargo.toml index 77c69ce6211650..3403d2546db31e 100644 --- a/gossip/Cargo.toml +++ b/gossip/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-gossip" description = "Blockchain, Rebuilt for Scale" -version = "1.14.9" +version = "1.14.10" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -27,24 +27,24 @@ rayon = "1.5.3" serde = "1.0.138" serde_bytes = "0.11" serde_derive = "1.0.103" -solana-bloom = { path = "../bloom", version = "=1.14.9" } -solana-clap-utils = { path = "../clap-utils", version = "=1.14.9" } -solana-client = { path = "../client", version = "=1.14.9" } -solana-entry = { path = "../entry", version = "=1.14.9" } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.9" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.9" } -solana-ledger = { path = "../ledger", version = "=1.14.9" } -solana-logger = { path = "../logger", version = "=1.14.9" } -solana-measure = { path = "../measure", version = "=1.14.9" } -solana-metrics = { path = "../metrics", version = "=1.14.9" } -solana-net-utils = { path = "../net-utils", version = "=1.14.9" } -solana-perf = { path = "../perf", version = "=1.14.9" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.9" } -solana-runtime = { path = "../runtime", version = "=1.14.9" } -solana-sdk = { path = "../sdk", version = "=1.14.9" } -solana-streamer = { path = "../streamer", version = "=1.14.9" } -solana-version = { path = "../version", version = "=1.14.9" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.9" } +solana-bloom = { path = "../bloom", version = "=1.14.10" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.10" } +solana-client = { path = "../client", version = "=1.14.10" } +solana-entry = { path = "../entry", version = "=1.14.10" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.10" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.10" } +solana-ledger = { path = "../ledger", version = "=1.14.10" } +solana-logger = { path = "../logger", version = "=1.14.10" } +solana-measure = { path = "../measure", version = "=1.14.10" } +solana-metrics = { path = "../metrics", version = "=1.14.10" } +solana-net-utils = { path = "../net-utils", version = "=1.14.10" } +solana-perf = { path = "../perf", version = "=1.14.10" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.10" } +solana-runtime = { path = "../runtime", version = "=1.14.10" } +solana-sdk = { path = "../sdk", version = "=1.14.10" } +solana-streamer = { path = "../streamer", version = "=1.14.10" } +solana-version = { path = "../version", version = "=1.14.10" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.10" } thiserror = "1.0" [dev-dependencies] diff --git a/install/Cargo.toml b/install/Cargo.toml index 3ebd9f17657dd0..bed48a5d6c914d 100644 --- a/install/Cargo.toml +++ b/install/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-install" description = "The solana cluster software installer" -version = "1.14.9" +version = "1.14.10" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -26,12 +26,12 @@ reqwest = { version = "0.11.11", default-features = false, features = ["blocking semver = "1.0.10" serde = { version = "1.0.138", features = ["derive"] } serde_yaml = "0.8.26" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.9" } -solana-client = { path = "../client", version = "=1.14.9" } -solana-config-program = { path = "../programs/config", version = "=1.14.9" } -solana-logger = { path = "../logger", version = "=1.14.9" } -solana-sdk = { path = "../sdk", version = "=1.14.9" } -solana-version = { path = "../version", version = "=1.14.9" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.10" } +solana-client = { path = "../client", version = "=1.14.10" } +solana-config-program = { path = "../programs/config", version = "=1.14.10" } +solana-logger = { path = "../logger", version = "=1.14.10" } +solana-sdk = { path = "../sdk", version = "=1.14.10" } +solana-version = { path = "../version", version = "=1.14.10" } tar = "0.4.38" tempfile = "3.3.0" url = "2.2.2" diff --git a/keygen/Cargo.toml b/keygen/Cargo.toml index a81ea9352d4913..723b4beeed228c 100644 --- a/keygen/Cargo.toml +++ b/keygen/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-keygen" -version = "1.14.9" +version = "1.14.10" description = "Solana key generation utility" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,11 +14,11 @@ bs58 = "0.4.0" clap = { version = "3.1.5", features = ["cargo"] } dirs-next = "2.0.0" num_cpus = "1.13.1" -solana-clap-v3-utils = { path = "../clap-v3-utils", version = "=1.14.9" } -solana-cli-config = { path = "../cli-config", version = "=1.14.9" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.9" } -solana-sdk = { path = "../sdk", version = "=1.14.9" } -solana-version = { path = "../version", version = "=1.14.9" } +solana-clap-v3-utils = { path = "../clap-v3-utils", version = "=1.14.10" } +solana-cli-config = { path = "../cli-config", version = "=1.14.10" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.10" } +solana-sdk = { path = "../sdk", version = "=1.14.10" } +solana-version = { path = "../version", version = "=1.14.10" } tiny-bip39 = "0.8.2" [[bin]] diff --git a/ledger-tool/Cargo.toml b/ledger-tool/Cargo.toml index 83fe22df20928e..623de1a6f02ffa 100644 --- a/ledger-tool/Cargo.toml +++ b/ledger-tool/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-ledger-tool" description = "Blockchain, Rebuilt for Scale" -version = "1.14.9" +version = "1.14.10" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -22,20 +22,20 @@ log = { version = "0.4.17" } regex = "1" serde = { version = "1.0", features = ["derive"] } serde_json = "1.0.81" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.9" } -solana-cli-output = { path = "../cli-output", version = "=1.14.9" } -solana-core = { path = "../core", version = "=1.14.9" } -solana-entry = { path = "../entry", version = "=1.14.9" } -solana-ledger = { path = "../ledger", version = "=1.14.9" } -solana-logger = { path = "../logger", version = "=1.14.9" } -solana-measure = { path = "../measure", version = "=1.14.9" } -solana-runtime = { path = "../runtime", version = "=1.14.9" } -solana-sdk = { path = "../sdk", version = "=1.14.9" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.9" } -solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.9" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.9" } -solana-version = { path = "../version", version = "=1.14.9" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.9" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.10" } +solana-cli-output = { path = "../cli-output", version = "=1.14.10" } +solana-core = { path = "../core", version = "=1.14.10" } +solana-entry = { path = "../entry", version = "=1.14.10" } +solana-ledger = { path = "../ledger", version = "=1.14.10" } +solana-logger = { path = "../logger", version = "=1.14.10" } +solana-measure = { path = "../measure", version = "=1.14.10" } +solana-runtime = { path = "../runtime", version = "=1.14.10" } +solana-sdk = { path = "../sdk", version = "=1.14.10" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.10" } +solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.10" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.10" } +solana-version = { path = "../version", version = "=1.14.10" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.10" } tokio = { version = "1", features = ["full"] } [target.'cfg(not(target_env = "msvc"))'.dependencies] diff --git a/ledger/Cargo.toml b/ledger/Cargo.toml index dc2d1cc8475120..b74b8e7d01acb3 100644 --- a/ledger/Cargo.toml +++ b/ledger/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-ledger" -version = "1.14.9" +version = "1.14.10" description = "Solana ledger" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -35,23 +35,23 @@ reed-solomon-erasure = { version = "6.0.0", features = ["simd-accel"] } serde = "1.0.138" serde_bytes = "0.11.6" sha2 = "0.10.2" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.9" } -solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.9" } -solana-entry = { path = "../entry", version = "=1.14.9" } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.9" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.9" } -solana-measure = { path = "../measure", version = "=1.14.9" } -solana-metrics = { path = "../metrics", version = "=1.14.9" } -solana-perf = { path = "../perf", version = "=1.14.9" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.9" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.9" } -solana-runtime = { path = "../runtime", version = "=1.14.9" } -solana-sdk = { path = "../sdk", version = "=1.14.9" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.9" } -solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.9" } -solana-storage-proto = { path = "../storage-proto", version = "=1.14.9" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.9" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.9" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.10" } +solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.10" } +solana-entry = { path = "../entry", version = "=1.14.10" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.10" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.10" } +solana-measure = { path = "../measure", version = "=1.14.10" } +solana-metrics = { path = "../metrics", version = "=1.14.10" } +solana-perf = { path = "../perf", version = "=1.14.10" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.10" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.10" } +solana-runtime = { path = "../runtime", version = "=1.14.10" } +solana-sdk = { path = "../sdk", version = "=1.14.10" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.10" } +solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.10" } +solana-storage-proto = { path = "../storage-proto", version = "=1.14.10" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.10" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.10" } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } spl-token-2022 = { version = "=0.5.0", features = ["no-entrypoint"] } static_assertions = "1.1.0" @@ -71,8 +71,8 @@ features = ["lz4"] [dev-dependencies] bs58 = "0.4.0" matches = "0.1.9" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.9" } -solana-logger = { path = "../logger", version = "=1.14.9" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.10" } +solana-logger = { path = "../logger", version = "=1.14.10" } test-case = "2.1.0" [build-dependencies] diff --git a/local-cluster/Cargo.toml b/local-cluster/Cargo.toml index 5de718867d20a7..3a0b7652634dab 100644 --- a/local-cluster/Cargo.toml +++ b/local-cluster/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-local-cluster" description = "Blockchain, Rebuilt for Scale" -version = "1.14.9" +version = "1.14.10" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -16,25 +16,25 @@ itertools = "0.10.3" log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" -solana-client = { path = "../client", version = "=1.14.9" } -solana-config-program = { path = "../programs/config", version = "=1.14.9" } -solana-core = { path = "../core", version = "=1.14.9" } -solana-entry = { path = "../entry", version = "=1.14.9" } -solana-gossip = { path = "../gossip", version = "=1.14.9" } -solana-ledger = { path = "../ledger", version = "=1.14.9" } -solana-runtime = { path = "../runtime", version = "=1.14.9" } -solana-sdk = { path = "../sdk", version = "=1.14.9" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.9" } -solana-streamer = { path = "../streamer", version = "=1.14.9" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.9" } +solana-client = { path = "../client", version = "=1.14.10" } +solana-config-program = { path = "../programs/config", version = "=1.14.10" } +solana-core = { path = "../core", version = "=1.14.10" } +solana-entry = { path = "../entry", version = "=1.14.10" } +solana-gossip = { path = "../gossip", version = "=1.14.10" } +solana-ledger = { path = "../ledger", version = "=1.14.10" } +solana-runtime = { path = "../runtime", version = "=1.14.10" } +solana-sdk = { path = "../sdk", version = "=1.14.10" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.10" } +solana-streamer = { path = "../streamer", version = "=1.14.10" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.10" } tempfile = "3.3.0" [dev-dependencies] assert_matches = "1.5.0" gag = "1.0.0" serial_test = "0.8.0" -solana-download-utils = { path = "../download-utils", version = "=1.14.9" } -solana-logger = { path = "../logger", version = "=1.14.9" } +solana-download-utils = { path = "../download-utils", version = "=1.14.10" } +solana-logger = { path = "../logger", version = "=1.14.10" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/log-analyzer/Cargo.toml b/log-analyzer/Cargo.toml index f8cb822f4f6199..bbe68f31c21f51 100644 --- a/log-analyzer/Cargo.toml +++ b/log-analyzer/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-log-analyzer" description = "The solana cluster network analysis tool" -version = "1.14.9" +version = "1.14.10" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,8 +14,8 @@ byte-unit = "4.0.14" clap = { version = "3.1.5", features = ["cargo"] } serde = "1.0.138" serde_json = "1.0.81" -solana-logger = { path = "../logger", version = "=1.14.9" } -solana-version = { path = "../version", version = "=1.14.9" } +solana-logger = { path = "../logger", version = "=1.14.10" } +solana-version = { path = "../version", version = "=1.14.10" } [[bin]] name = "solana-log-analyzer" diff --git a/logger/Cargo.toml b/logger/Cargo.toml index 69bcbc5797bd38..521cfe6302a736 100644 --- a/logger/Cargo.toml +++ b/logger/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-logger" -version = "1.14.9" +version = "1.14.10" description = "Solana Logger" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/measure/Cargo.toml b/measure/Cargo.toml index 24cd273510af89..247c7882190b4a 100644 --- a/measure/Cargo.toml +++ b/measure/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "solana-measure" description = "Blockchain, Rebuilt for Scale" -version = "1.14.9" +version = "1.14.10" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-measure" readme = "../README.md" @@ -12,7 +12,7 @@ edition = "2021" [dependencies] log = "0.4.17" -solana-sdk = { path = "../sdk", version = "=1.14.9" } +solana-sdk = { path = "../sdk", version = "=1.14.10" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/merkle-root-bench/Cargo.toml b/merkle-root-bench/Cargo.toml index 150a5a046f9b8d..e6c7e7eeb5adfe 100644 --- a/merkle-root-bench/Cargo.toml +++ b/merkle-root-bench/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-merkle-root-bench" -version = "1.14.9" +version = "1.14.10" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -11,11 +11,11 @@ publish = false [dependencies] clap = "2.33.1" log = "0.4.17" -solana-logger = { path = "../logger", version = "=1.14.9" } -solana-measure = { path = "../measure", version = "=1.14.9" } -solana-runtime = { path = "../runtime", version = "=1.14.9" } -solana-sdk = { path = "../sdk", version = "=1.14.9" } -solana-version = { path = "../version", version = "=1.14.9" } +solana-logger = { path = "../logger", version = "=1.14.10" } +solana-measure = { path = "../measure", version = "=1.14.10" } +solana-runtime = { path = "../runtime", version = "=1.14.10" } +solana-sdk = { path = "../sdk", version = "=1.14.10" } +solana-version = { path = "../version", version = "=1.14.10" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/merkle-tree/Cargo.toml b/merkle-tree/Cargo.toml index 90a39a54f26acb..1ee5b1cb3e0658 100644 --- a/merkle-tree/Cargo.toml +++ b/merkle-tree/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-merkle-tree" -version = "1.14.9" +version = "1.14.10" description = "Solana Merkle Tree" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -11,7 +11,7 @@ edition = "2021" [dependencies] fast-math = "0.1" -solana-program = { path = "../sdk/program", version = "=1.14.9" } +solana-program = { path = "../sdk/program", version = "=1.14.10" } # This can go once the BPF toolchain target Rust 1.42.0+ [target.bpfel-unknown-unknown.dependencies] diff --git a/metrics/Cargo.toml b/metrics/Cargo.toml index 4843e012a5176a..533204b88ca167 100644 --- a/metrics/Cargo.toml +++ b/metrics/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-metrics" -version = "1.14.9" +version = "1.14.10" description = "Solana Metrics" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -15,7 +15,7 @@ gethostname = "0.2.3" lazy_static = "1.4.0" log = "0.4.17" reqwest = { version = "0.11.11", default-features = false, features = ["blocking", "brotli", "deflate", "gzip", "rustls-tls", "json"] } -solana-sdk = { path = "../sdk", version = "=1.14.9" } +solana-sdk = { path = "../sdk", version = "=1.14.10" } [dev-dependencies] env_logger = "0.9.0" diff --git a/net-shaper/Cargo.toml b/net-shaper/Cargo.toml index 9664c9e9afb2f4..06d7b6be924ebc 100644 --- a/net-shaper/Cargo.toml +++ b/net-shaper/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-net-shaper" description = "The solana cluster network shaping tool" -version = "1.14.9" +version = "1.14.10" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,7 +14,7 @@ clap = { version = "3.1.5", features = ["cargo"] } rand = "0.7.0" serde = { version = "1.0.138", features = ["derive"] } serde_json = "1.0.81" -solana-logger = { path = "../logger", version = "=1.14.9" } +solana-logger = { path = "../logger", version = "=1.14.10" } [[bin]] name = "solana-net-shaper" diff --git a/net-utils/Cargo.toml b/net-utils/Cargo.toml index 26e056718c0e10..b187f0a78090c3 100644 --- a/net-utils/Cargo.toml +++ b/net-utils/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-net-utils" -version = "1.14.9" +version = "1.14.10" description = "Solana Network Utilities" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -19,9 +19,9 @@ rand = "0.7.0" serde = "1.0.138" serde_derive = "1.0.103" socket2 = "0.4.4" -solana-logger = { path = "../logger", version = "=1.14.9" } -solana-sdk = { path = "../sdk", version = "=1.14.9" } -solana-version = { path = "../version", version = "=1.14.9" } +solana-logger = { path = "../logger", version = "=1.14.10" } +solana-sdk = { path = "../sdk", version = "=1.14.10" } +solana-version = { path = "../version", version = "=1.14.10" } tokio = { version = "1", features = ["full"] } url = "2.2.2" diff --git a/notifier/Cargo.toml b/notifier/Cargo.toml index 6ef78314be0e7a..4a6c5127cfbd6d 100644 --- a/notifier/Cargo.toml +++ b/notifier/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-notifier" -version = "1.14.9" +version = "1.14.10" description = "Solana Notifier" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/perf/Cargo.toml b/perf/Cargo.toml index 9d05c992508aab..c61c3e75c06de7 100644 --- a/perf/Cargo.toml +++ b/perf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-perf" -version = "1.14.9" +version = "1.14.10" description = "Solana Performance APIs" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -22,10 +22,10 @@ log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" serde = "1.0.138" -solana-metrics = { path = "../metrics", version = "=1.14.9" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.9" } -solana-sdk = { path = "../sdk", version = "=1.14.9" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.9" } +solana-metrics = { path = "../metrics", version = "=1.14.10" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.10" } +solana-sdk = { path = "../sdk", version = "=1.14.10" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.10" } [target."cfg(target_os = \"linux\")".dependencies] caps = "0.5.3" @@ -37,7 +37,7 @@ name = "solana_perf" [dev-dependencies] matches = "0.1.9" -solana-logger = { path = "../logger", version = "=1.14.9" } +solana-logger = { path = "../logger", version = "=1.14.10" } [[bench]] name = "sigverify" diff --git a/poh-bench/Cargo.toml b/poh-bench/Cargo.toml index 6c2bee90993508..62333a230220b4 100644 --- a/poh-bench/Cargo.toml +++ b/poh-bench/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-poh-bench" -version = "1.14.9" +version = "1.14.10" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,12 +14,12 @@ clap = { version = "3.1.5", features = ["cargo"] } log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" -solana-entry = { path = "../entry", version = "=1.14.9" } -solana-logger = { path = "../logger", version = "=1.14.9" } -solana-measure = { path = "../measure", version = "=1.14.9" } -solana-perf = { path = "../perf", version = "=1.14.9" } -solana-sdk = { path = "../sdk", version = "=1.14.9" } -solana-version = { path = "../version", version = "=1.14.9" } +solana-entry = { path = "../entry", version = "=1.14.10" } +solana-logger = { path = "../logger", version = "=1.14.10" } +solana-measure = { path = "../measure", version = "=1.14.10" } +solana-perf = { path = "../perf", version = "=1.14.10" } +solana-sdk = { path = "../sdk", version = "=1.14.10" } +solana-version = { path = "../version", version = "=1.14.10" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/poh/Cargo.toml b/poh/Cargo.toml index 6ddc37ce16c39b..1ec749f3b727b5 100644 --- a/poh/Cargo.toml +++ b/poh/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-poh" -version = "1.14.9" +version = "1.14.10" description = "Solana PoH" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,21 +13,21 @@ edition = "2021" core_affinity = "0.5.10" crossbeam-channel = "0.5" log = "0.4.17" -solana-entry = { path = "../entry", version = "=1.14.9" } -solana-ledger = { path = "../ledger", version = "=1.14.9" } -solana-measure = { path = "../measure", version = "=1.14.9" } -solana-metrics = { path = "../metrics", version = "=1.14.9" } -solana-runtime = { path = "../runtime", version = "=1.14.9" } -solana-sdk = { path = "../sdk", version = "=1.14.9" } -solana-sys-tuner = { path = "../sys-tuner", version = "=1.14.9" } +solana-entry = { path = "../entry", version = "=1.14.10" } +solana-ledger = { path = "../ledger", version = "=1.14.10" } +solana-measure = { path = "../measure", version = "=1.14.10" } +solana-metrics = { path = "../metrics", version = "=1.14.10" } +solana-runtime = { path = "../runtime", version = "=1.14.10" } +solana-sdk = { path = "../sdk", version = "=1.14.10" } +solana-sys-tuner = { path = "../sys-tuner", version = "=1.14.10" } thiserror = "1.0" [dev-dependencies] bincode = "1.3.3" matches = "0.1.9" rand = "0.7.0" -solana-logger = { path = "../logger", version = "=1.14.9" } -solana-perf = { path = "../perf", version = "=1.14.9" } +solana-logger = { path = "../logger", version = "=1.14.10" } +solana-perf = { path = "../perf", version = "=1.14.10" } [lib] crate-type = ["lib"] diff --git a/program-runtime/Cargo.toml b/program-runtime/Cargo.toml index b4e942e81bd14e..362b31081561e8 100644 --- a/program-runtime/Cargo.toml +++ b/program-runtime/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-program-runtime" -version = "1.14.9" +version = "1.14.10" description = "Solana program runtime" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -21,16 +21,16 @@ num-derive = { version = "0.3" } num-traits = { version = "0.2" } rand = "0.7.0" serde = { version = "1.0.129", features = ["derive", "rc"] } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.9" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.9" } -solana-measure = { path = "../measure", version = "=1.14.9" } -solana-metrics = { path = "../metrics", version = "=1.14.9" } -solana-sdk = { path = "../sdk", version = "=1.14.9" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.10" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.10" } +solana-measure = { path = "../measure", version = "=1.14.10" } +solana-metrics = { path = "../metrics", version = "=1.14.10" } +solana-sdk = { path = "../sdk", version = "=1.14.10" } thiserror = "1.0" enum-iterator = "0.8.1" [dev-dependencies] -solana-logger = { path = "../logger", version = "=1.14.9" } +solana-logger = { path = "../logger", version = "=1.14.10" } [lib] crate-type = ["lib"] diff --git a/program-test/Cargo.toml b/program-test/Cargo.toml index 67377face3fd23..ade9cfe5a6e98d 100644 --- a/program-test/Cargo.toml +++ b/program-test/Cargo.toml @@ -5,7 +5,7 @@ edition = "2021" license = "Apache-2.0" name = "solana-program-test" repository = "https://github.com/solana-labs/solana" -version = "1.14.9" +version = "1.14.10" [dependencies] assert_matches = "1.5.0" @@ -15,13 +15,13 @@ bincode = "1.3.3" chrono-humanize = "0.2.1" log = "0.4.17" serde = "1.0.138" -solana-banks-client = { path = "../banks-client", version = "=1.14.9" } -solana-banks-server = { path = "../banks-server", version = "=1.14.9" } -solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.9" } -solana-logger = { path = "../logger", version = "=1.14.9" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.9" } -solana-runtime = { path = "../runtime", version = "=1.14.9" } -solana-sdk = { path = "../sdk", version = "=1.14.9" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.9" } +solana-banks-client = { path = "../banks-client", version = "=1.14.10" } +solana-banks-server = { path = "../banks-server", version = "=1.14.10" } +solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.10" } +solana-logger = { path = "../logger", version = "=1.14.10" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.10" } +solana-runtime = { path = "../runtime", version = "=1.14.10" } +solana-sdk = { path = "../sdk", version = "=1.14.10" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.10" } thiserror = "1.0" tokio = { version = "1", features = ["full"] } diff --git a/programs/address-lookup-table-tests/Cargo.toml b/programs/address-lookup-table-tests/Cargo.toml index 7e291e99ccd47c..ca2c34a333a365 100644 --- a/programs/address-lookup-table-tests/Cargo.toml +++ b/programs/address-lookup-table-tests/Cargo.toml @@ -3,7 +3,7 @@ [package] name = "solana-address-lookup-table-program-tests" -version = "1.14.9" +version = "1.14.10" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" @@ -14,9 +14,9 @@ publish = false [dev-dependencies] assert_matches = "1.5.0" bincode = "1.3.3" -solana-address-lookup-table-program = { path = "../address-lookup-table", version = "=1.14.9" } -solana-program-test = { path = "../../program-test", version = "=1.14.9" } -solana-sdk = { path = "../../sdk", version = "=1.14.9" } +solana-address-lookup-table-program = { path = "../address-lookup-table", version = "=1.14.10" } +solana-program-test = { path = "../../program-test", version = "=1.14.10" } +solana-sdk = { path = "../../sdk", version = "=1.14.10" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/address-lookup-table/Cargo.toml b/programs/address-lookup-table/Cargo.toml index 3173129a3cd72d..c1a1c0a00e58ec 100644 --- a/programs/address-lookup-table/Cargo.toml +++ b/programs/address-lookup-table/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-address-lookup-table-program" -version = "1.14.9" +version = "1.14.10" description = "Solana address lookup table program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -16,14 +16,14 @@ log = "0.4.17" num-derive = "0.3" num-traits = "0.2" serde = { version = "1.0.138", features = ["derive"] } -solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.9" } -solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.9" } -solana-program = { path = "../../sdk/program", version = "=1.14.9" } +solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.10" } +solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.10" } +solana-program = { path = "../../sdk/program", version = "=1.14.10" } thiserror = "1.0" [target.'cfg(not(target_os = "solana"))'.dependencies] -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.9" } -solana-sdk = { path = "../../sdk", version = "=1.14.9" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.10" } +solana-sdk = { path = "../../sdk", version = "=1.14.10" } [build-dependencies] rustc_version = "0.4" diff --git a/programs/bpf-loader-tests/Cargo.toml b/programs/bpf-loader-tests/Cargo.toml index f023ca9f833383..bb23c1e02a710f 100644 --- a/programs/bpf-loader-tests/Cargo.toml +++ b/programs/bpf-loader-tests/Cargo.toml @@ -3,7 +3,7 @@ [package] name = "solana-bpf-loader-program-tests" -version = "1.14.9" +version = "1.14.10" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" @@ -14,9 +14,9 @@ publish = false [dev-dependencies] assert_matches = "1.5.0" bincode = "1.3.3" -solana-bpf-loader-program = { path = "../bpf_loader", version = "=1.14.9" } -solana-program-test = { path = "../../program-test", version = "=1.14.9" } -solana-sdk = { path = "../../sdk", version = "=1.14.9" } +solana-bpf-loader-program = { path = "../bpf_loader", version = "=1.14.10" } +solana-program-test = { path = "../../program-test", version = "=1.14.10" } +solana-sdk = { path = "../../sdk", version = "=1.14.10" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/bpf/Cargo.lock b/programs/bpf/Cargo.lock index 52caba3dffa8a4..aa067f4104008c 100644 --- a/programs/bpf/Cargo.lock +++ b/programs/bpf/Cargo.lock @@ -4054,7 +4054,7 @@ dependencies = [ [[package]] name = "solana-account-decoder" -version = "1.14.9" +version = "1.14.10" dependencies = [ "Inflector", "base64 0.13.0", @@ -4067,7 +4067,7 @@ dependencies = [ "serde_json", "solana-address-lookup-table-program", "solana-config-program", - "solana-sdk 1.14.9", + "solana-sdk 1.14.10", "solana-vote-program", "spl-token", "spl-token-2022 0.5.0", @@ -4077,7 +4077,7 @@ dependencies = [ [[package]] name = "solana-address-lookup-table-program" -version = "1.14.9" +version = "1.14.10" dependencies = [ "bincode", "bytemuck", @@ -4086,23 +4086,23 @@ dependencies = [ "num-traits", "rustc_version", "serde", - "solana-frozen-abi 1.14.9", - "solana-frozen-abi-macro 1.14.9", - "solana-program 1.14.9", + "solana-frozen-abi 1.14.10", + "solana-frozen-abi-macro 1.14.10", + "solana-program 1.14.10", "solana-program-runtime", - "solana-sdk 1.14.9", + "solana-sdk 1.14.10", "thiserror", ] [[package]] name = "solana-banks-client" -version = "1.14.9" +version = "1.14.10" dependencies = [ "borsh", "futures 0.3.21", "solana-banks-interface", - "solana-program 1.14.9", - "solana-sdk 1.14.9", + "solana-program 1.14.10", + "solana-sdk 1.14.10", "tarpc", "thiserror", "tokio", @@ -4111,16 +4111,16 @@ dependencies = [ [[package]] name = "solana-banks-interface" -version = "1.14.9" +version = "1.14.10" dependencies = [ "serde", - "solana-sdk 1.14.9", + "solana-sdk 1.14.10", "tarpc", ] [[package]] name = "solana-banks-server" -version = "1.14.9" +version = "1.14.10" dependencies = [ "bincode", "crossbeam-channel", @@ -4128,7 +4128,7 @@ dependencies = [ "solana-banks-interface", "solana-client", "solana-runtime", - "solana-sdk 1.14.9", + "solana-sdk 1.14.10", "solana-send-transaction-service", "tarpc", "tokio", @@ -4138,7 +4138,7 @@ dependencies = [ [[package]] name = "solana-bloom" -version = "1.14.9" +version = "1.14.10" dependencies = [ "bv", "fnv", @@ -4148,14 +4148,14 @@ dependencies = [ "rustc_version", "serde", "serde_derive", - "solana-frozen-abi 1.14.9", - "solana-frozen-abi-macro 1.14.9", - "solana-sdk 1.14.9", + "solana-frozen-abi 1.14.10", + "solana-frozen-abi-macro 1.14.10", + "solana-sdk 1.14.10", ] [[package]] name = "solana-bpf-loader-program" -version = "1.14.9" +version = "1.14.10" dependencies = [ "bincode", "byteorder 1.4.3", @@ -4164,15 +4164,15 @@ dependencies = [ "solana-measure", "solana-metrics", "solana-program-runtime", - "solana-sdk 1.14.9", - "solana-zk-token-sdk 1.14.9", + "solana-sdk 1.14.10", + "solana-zk-token-sdk 1.14.10", "solana_rbpf", "thiserror", ] [[package]] name = "solana-bpf-programs" -version = "1.14.9" +version = "1.14.10" dependencies = [ "bincode", "byteorder 1.4.3", @@ -4188,11 +4188,11 @@ dependencies = [ "solana-bpf-rust-realloc-invoke", "solana-cli-output", "solana-ledger", - "solana-logger 1.14.9", + "solana-logger 1.14.10", "solana-measure", "solana-program-runtime", "solana-runtime", - "solana-sdk 1.14.9", + "solana-sdk 1.14.10", "solana-transaction-status", "solana_rbpf", "walkdir", @@ -4200,385 +4200,385 @@ dependencies = [ [[package]] name = "solana-bpf-rust-128bit" -version = "1.14.9" +version = "1.14.10" dependencies = [ "solana-bpf-rust-128bit-dep", - "solana-program 1.14.9", + "solana-program 1.14.10", ] [[package]] name = "solana-bpf-rust-128bit-dep" -version = "1.14.9" +version = "1.14.10" dependencies = [ - "solana-program 1.14.9", + "solana-program 1.14.10", ] [[package]] name = "solana-bpf-rust-alloc" -version = "1.14.9" +version = "1.14.10" dependencies = [ - "solana-program 1.14.9", + "solana-program 1.14.10", ] [[package]] name = "solana-bpf-rust-call-depth" -version = "1.14.9" +version = "1.14.10" dependencies = [ - "solana-program 1.14.9", + "solana-program 1.14.10", ] [[package]] name = "solana-bpf-rust-caller-access" -version = "1.14.9" +version = "1.14.10" dependencies = [ - "solana-program 1.14.9", + "solana-program 1.14.10", ] [[package]] name = "solana-bpf-rust-curve25519" -version = "1.14.9" +version = "1.14.10" dependencies = [ - "solana-program 1.14.9", - "solana-zk-token-sdk 1.14.9", + "solana-program 1.14.10", + "solana-zk-token-sdk 1.14.10", ] [[package]] name = "solana-bpf-rust-custom-heap" -version = "1.14.9" +version = "1.14.10" dependencies = [ - "solana-program 1.14.9", + "solana-program 1.14.10", ] [[package]] name = "solana-bpf-rust-dep-crate" -version = "1.14.9" +version = "1.14.10" dependencies = [ "byteorder 1.4.3", "solana-address-lookup-table-program", - "solana-program 1.14.9", + "solana-program 1.14.10", ] [[package]] name = "solana-bpf-rust-deprecated-loader" -version = "1.14.9" +version = "1.14.10" dependencies = [ - "solana-program 1.14.9", + "solana-program 1.14.10", ] [[package]] name = "solana-bpf-rust-dup-accounts" -version = "1.14.9" +version = "1.14.10" dependencies = [ - "solana-program 1.14.9", + "solana-program 1.14.10", ] [[package]] name = "solana-bpf-rust-error-handling" -version = "1.14.9" +version = "1.14.10" dependencies = [ "num-derive", "num-traits", - "solana-program 1.14.9", + "solana-program 1.14.10", "thiserror", ] [[package]] name = "solana-bpf-rust-external-spend" -version = "1.14.9" +version = "1.14.10" dependencies = [ - "solana-program 1.14.9", + "solana-program 1.14.10", ] [[package]] name = "solana-bpf-rust-finalize" -version = "1.14.9" +version = "1.14.10" dependencies = [ - "solana-program 1.14.9", + "solana-program 1.14.10", ] [[package]] name = "solana-bpf-rust-get-minimum-delegation" -version = "1.14.9" +version = "1.14.10" dependencies = [ - "solana-program 1.14.9", + "solana-program 1.14.10", ] [[package]] name = "solana-bpf-rust-inner_instruction_alignment_check" -version = "1.14.9" +version = "1.14.10" dependencies = [ - "solana-program 1.14.9", + "solana-program 1.14.10", ] [[package]] name = "solana-bpf-rust-instruction-introspection" -version = "1.14.9" +version = "1.14.10" dependencies = [ - "solana-program 1.14.9", + "solana-program 1.14.10", ] [[package]] name = "solana-bpf-rust-invoke" -version = "1.14.9" +version = "1.14.10" dependencies = [ "solana-bpf-rust-invoked", - "solana-program 1.14.9", + "solana-program 1.14.10", ] [[package]] name = "solana-bpf-rust-invoke-and-error" -version = "1.14.9" +version = "1.14.10" dependencies = [ - "solana-program 1.14.9", + "solana-program 1.14.10", ] [[package]] name = "solana-bpf-rust-invoke-and-ok" -version = "1.14.9" +version = "1.14.10" dependencies = [ - "solana-program 1.14.9", + "solana-program 1.14.10", ] [[package]] name = "solana-bpf-rust-invoke-and-return" -version = "1.14.9" +version = "1.14.10" dependencies = [ - "solana-program 1.14.9", + "solana-program 1.14.10", ] [[package]] name = "solana-bpf-rust-invoked" -version = "1.14.9" +version = "1.14.10" dependencies = [ - "solana-program 1.14.9", + "solana-program 1.14.10", ] [[package]] name = "solana-bpf-rust-iter" -version = "1.14.9" +version = "1.14.10" dependencies = [ - "solana-program 1.14.9", + "solana-program 1.14.10", ] [[package]] name = "solana-bpf-rust-log-data" -version = "1.14.9" +version = "1.14.10" dependencies = [ - "solana-program 1.14.9", + "solana-program 1.14.10", ] [[package]] name = "solana-bpf-rust-many-args" -version = "1.14.9" +version = "1.14.10" dependencies = [ "solana-bpf-rust-many-args-dep", - "solana-program 1.14.9", + "solana-program 1.14.10", ] [[package]] name = "solana-bpf-rust-many-args-dep" -version = "1.14.9" +version = "1.14.10" dependencies = [ - "solana-program 1.14.9", + "solana-program 1.14.10", ] [[package]] name = "solana-bpf-rust-mem" -version = "1.14.9" +version = "1.14.10" dependencies = [ - "solana-program 1.14.9", + "solana-program 1.14.10", "solana-program-runtime", "solana-program-test", - "solana-sdk 1.14.9", + "solana-sdk 1.14.10", ] [[package]] name = "solana-bpf-rust-membuiltins" -version = "1.14.9" +version = "1.14.10" dependencies = [ "solana-bpf-rust-mem", - "solana-program 1.14.9", + "solana-program 1.14.10", ] [[package]] name = "solana-bpf-rust-noop" -version = "1.14.9" +version = "1.14.10" dependencies = [ - "solana-program 1.14.9", + "solana-program 1.14.10", ] [[package]] name = "solana-bpf-rust-panic" -version = "1.14.9" +version = "1.14.10" dependencies = [ - "solana-program 1.14.9", + "solana-program 1.14.10", ] [[package]] name = "solana-bpf-rust-param-passing" -version = "1.14.9" +version = "1.14.10" dependencies = [ "solana-bpf-rust-param-passing-dep", - "solana-program 1.14.9", + "solana-program 1.14.10", ] [[package]] name = "solana-bpf-rust-param-passing-dep" -version = "1.14.9" +version = "1.14.10" dependencies = [ - "solana-program 1.14.9", + "solana-program 1.14.10", ] [[package]] name = "solana-bpf-rust-rand" -version = "1.14.9" +version = "1.14.10" dependencies = [ "getrandom 0.1.14", "rand 0.7.3", - "solana-program 1.14.9", + "solana-program 1.14.10", ] [[package]] name = "solana-bpf-rust-realloc" -version = "1.14.9" +version = "1.14.10" dependencies = [ - "solana-program 1.14.9", + "solana-program 1.14.10", ] [[package]] name = "solana-bpf-rust-realloc-invoke" -version = "1.14.9" +version = "1.14.10" dependencies = [ "solana-bpf-rust-realloc", - "solana-program 1.14.9", + "solana-program 1.14.10", ] [[package]] name = "solana-bpf-rust-ro-account_modify" -version = "1.14.9" +version = "1.14.10" dependencies = [ - "solana-program 1.14.9", + "solana-program 1.14.10", ] [[package]] name = "solana-bpf-rust-ro-modify" -version = "1.14.9" +version = "1.14.10" dependencies = [ - "solana-program 1.14.9", + "solana-program 1.14.10", ] [[package]] name = "solana-bpf-rust-sanity" -version = "1.14.9" +version = "1.14.10" dependencies = [ - "solana-program 1.14.9", + "solana-program 1.14.10", "solana-program-runtime", "solana-program-test", - "solana-sdk 1.14.9", + "solana-sdk 1.14.10", ] [[package]] name = "solana-bpf-rust-secp256k1-recover" -version = "1.14.9" +version = "1.14.10" dependencies = [ "libsecp256k1 0.7.0", - "solana-program 1.14.9", + "solana-program 1.14.10", ] [[package]] name = "solana-bpf-rust-sha" -version = "1.14.9" +version = "1.14.10" dependencies = [ "blake3", - "solana-program 1.14.9", + "solana-program 1.14.10", ] [[package]] name = "solana-bpf-rust-sibling-instructions" -version = "1.14.9" +version = "1.14.10" dependencies = [ - "solana-program 1.14.9", + "solana-program 1.14.10", ] [[package]] name = "solana-bpf-rust-sibling_inner-instructions" -version = "1.14.9" +version = "1.14.10" dependencies = [ - "solana-program 1.14.9", + "solana-program 1.14.10", ] [[package]] name = "solana-bpf-rust-simulation" -version = "1.14.9" +version = "1.14.10" dependencies = [ - "solana-logger 1.14.9", - "solana-program 1.14.9", + "solana-logger 1.14.10", + "solana-program 1.14.10", "solana-program-test", - "solana-sdk 1.14.9", + "solana-sdk 1.14.10", "solana-validator", ] [[package]] name = "solana-bpf-rust-spoof1" -version = "1.14.9" +version = "1.14.10" dependencies = [ - "solana-program 1.14.9", + "solana-program 1.14.10", ] [[package]] name = "solana-bpf-rust-spoof1-system" -version = "1.14.9" +version = "1.14.10" dependencies = [ - "solana-program 1.14.9", + "solana-program 1.14.10", ] [[package]] name = "solana-bpf-rust-sysvar" -version = "1.14.9" +version = "1.14.10" dependencies = [ - "solana-program 1.14.9", + "solana-program 1.14.10", "solana-program-runtime", "solana-program-test", - "solana-sdk 1.14.9", + "solana-sdk 1.14.10", ] [[package]] name = "solana-bpf-rust-upgradeable" -version = "1.14.9" +version = "1.14.10" dependencies = [ - "solana-program 1.14.9", + "solana-program 1.14.10", ] [[package]] name = "solana-bpf-rust-upgraded" -version = "1.14.9" +version = "1.14.10" dependencies = [ - "solana-program 1.14.9", + "solana-program 1.14.10", ] [[package]] name = "solana-bucket-map" -version = "1.14.9" +version = "1.14.10" dependencies = [ "log", "memmap2", "modular-bitfield", "rand 0.7.3", "solana-measure", - "solana-sdk 1.14.9", + "solana-sdk 1.14.10", "tempfile", ] [[package]] name = "solana-clap-utils" -version = "1.14.9" +version = "1.14.10" dependencies = [ "chrono", "clap 2.33.3", "rpassword", "solana-perf", "solana-remote-wallet", - "solana-sdk 1.14.9", + "solana-sdk 1.14.10", "thiserror", "tiny-bip39", "uriparse", @@ -4587,7 +4587,7 @@ dependencies = [ [[package]] name = "solana-cli-config" -version = "1.14.9" +version = "1.14.10" dependencies = [ "dirs-next", "lazy_static", @@ -4595,13 +4595,13 @@ dependencies = [ "serde_derive", "serde_yaml", "solana-clap-utils", - "solana-sdk 1.14.9", + "solana-sdk 1.14.10", "url 2.2.2", ] [[package]] name = "solana-cli-output" -version = "1.14.9" +version = "1.14.10" dependencies = [ "Inflector", "base64 0.13.0", @@ -4618,7 +4618,7 @@ dependencies = [ "solana-clap-utils", "solana-cli-config", "solana-client", - "solana-sdk 1.14.9", + "solana-sdk 1.14.10", "solana-transaction-status", "solana-vote-program", "spl-memo", @@ -4626,7 +4626,7 @@ dependencies = [ [[package]] name = "solana-client" -version = "1.14.9" +version = "1.14.10" dependencies = [ "async-mutex", "async-trait", @@ -4662,7 +4662,7 @@ dependencies = [ "solana-measure", "solana-metrics", "solana-net-utils", - "solana-sdk 1.14.9", + "solana-sdk 1.14.10", "solana-streamer", "solana-transaction-status", "solana-version", @@ -4678,27 +4678,27 @@ dependencies = [ [[package]] name = "solana-compute-budget-program" -version = "1.14.9" +version = "1.14.10" dependencies = [ "solana-program-runtime", - "solana-sdk 1.14.9", + "solana-sdk 1.14.10", ] [[package]] name = "solana-config-program" -version = "1.14.9" +version = "1.14.10" dependencies = [ "bincode", "chrono", "serde", "serde_derive", "solana-program-runtime", - "solana-sdk 1.14.9", + "solana-sdk 1.14.10", ] [[package]] name = "solana-core" -version = "1.14.9" +version = "1.14.10" dependencies = [ "ahash", "base64 0.13.0", @@ -4727,8 +4727,8 @@ dependencies = [ "solana-bloom", "solana-client", "solana-entry", - "solana-frozen-abi 1.14.9", - "solana-frozen-abi-macro 1.14.9", + "solana-frozen-abi 1.14.10", + "solana-frozen-abi-macro 1.14.10", "solana-geyser-plugin-manager", "solana-gossip", "solana-ledger", @@ -4741,7 +4741,7 @@ dependencies = [ "solana-rayon-threadlimit", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.9", + "solana-sdk 1.14.10", "solana-send-transaction-service", "solana-streamer", "solana-transaction-status", @@ -4757,19 +4757,19 @@ dependencies = [ [[package]] name = "solana-download-utils" -version = "1.14.9" +version = "1.14.10" dependencies = [ "console", "indicatif", "log", "reqwest", "solana-runtime", - "solana-sdk 1.14.9", + "solana-sdk 1.14.10", ] [[package]] name = "solana-entry" -version = "1.14.9" +version = "1.14.10" dependencies = [ "bincode", "crossbeam-channel", @@ -4785,12 +4785,12 @@ dependencies = [ "solana-metrics", "solana-perf", "solana-rayon-threadlimit", - "solana-sdk 1.14.9", + "solana-sdk 1.14.10", ] [[package]] name = "solana-faucet" -version = "1.14.9" +version = "1.14.10" dependencies = [ "bincode", "byteorder 1.4.3", @@ -4801,9 +4801,9 @@ dependencies = [ "serde_derive", "solana-clap-utils", "solana-cli-config", - "solana-logger 1.14.9", + "solana-logger 1.14.10", "solana-metrics", - "solana-sdk 1.14.9", + "solana-sdk 1.14.10", "solana-version", "spl-memo", "thiserror", @@ -4846,7 +4846,7 @@ dependencies = [ [[package]] name = "solana-frozen-abi" -version = "1.14.9" +version = "1.14.10" dependencies = [ "ahash", "blake3", @@ -4871,7 +4871,7 @@ dependencies = [ "serde_derive", "serde_json", "sha2 0.10.2", - "solana-frozen-abi-macro 1.14.9", + "solana-frozen-abi-macro 1.14.10", "subtle", "thiserror", ] @@ -4890,7 +4890,7 @@ dependencies = [ [[package]] name = "solana-frozen-abi-macro" -version = "1.14.9" +version = "1.14.10" dependencies = [ "proc-macro2 1.0.41", "quote 1.0.18", @@ -4900,26 +4900,26 @@ dependencies = [ [[package]] name = "solana-genesis-utils" -version = "1.14.9" +version = "1.14.10" dependencies = [ "solana-download-utils", "solana-runtime", - "solana-sdk 1.14.9", + "solana-sdk 1.14.10", ] [[package]] name = "solana-geyser-plugin-interface" -version = "1.14.9" +version = "1.14.10" dependencies = [ "log", - "solana-sdk 1.14.9", + "solana-sdk 1.14.10", "solana-transaction-status", "thiserror", ] [[package]] name = "solana-geyser-plugin-manager" -version = "1.14.9" +version = "1.14.10" dependencies = [ "bs58", "crossbeam-channel", @@ -4932,14 +4932,14 @@ dependencies = [ "solana-metrics", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.9", + "solana-sdk 1.14.10", "solana-transaction-status", "thiserror", ] [[package]] name = "solana-gossip" -version = "1.14.9" +version = "1.14.10" dependencies = [ "bincode", "bv", @@ -4963,17 +4963,17 @@ dependencies = [ "solana-clap-utils", "solana-client", "solana-entry", - "solana-frozen-abi 1.14.9", - "solana-frozen-abi-macro 1.14.9", + "solana-frozen-abi 1.14.10", + "solana-frozen-abi-macro 1.14.10", "solana-ledger", - "solana-logger 1.14.9", + "solana-logger 1.14.10", "solana-measure", "solana-metrics", "solana-net-utils", "solana-perf", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.14.9", + "solana-sdk 1.14.10", "solana-streamer", "solana-version", "solana-vote-program", @@ -4982,7 +4982,7 @@ dependencies = [ [[package]] name = "solana-ledger" -version = "1.14.9" +version = "1.14.10" dependencies = [ "assert_matches", "bincode", @@ -5014,15 +5014,15 @@ dependencies = [ "solana-account-decoder", "solana-bpf-loader-program", "solana-entry", - "solana-frozen-abi 1.14.9", - "solana-frozen-abi-macro 1.14.9", + "solana-frozen-abi 1.14.10", + "solana-frozen-abi-macro 1.14.10", "solana-measure", "solana-metrics", "solana-perf", "solana-program-runtime", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.14.9", + "solana-sdk 1.14.10", "solana-stake-program", "solana-storage-bigtable", "solana-storage-proto", @@ -5051,7 +5051,7 @@ dependencies = [ [[package]] name = "solana-logger" -version = "1.14.9" +version = "1.14.10" dependencies = [ "env_logger", "lazy_static", @@ -5060,36 +5060,36 @@ dependencies = [ [[package]] name = "solana-measure" -version = "1.14.9" +version = "1.14.10" dependencies = [ "log", - "solana-sdk 1.14.9", + "solana-sdk 1.14.10", ] [[package]] name = "solana-merkle-tree" -version = "1.14.9" +version = "1.14.10" dependencies = [ "fast-math", "matches", - "solana-program 1.14.9", + "solana-program 1.14.10", ] [[package]] name = "solana-metrics" -version = "1.14.9" +version = "1.14.10" dependencies = [ "crossbeam-channel", "gethostname", "lazy_static", "log", "reqwest", - "solana-sdk 1.14.9", + "solana-sdk 1.14.10", ] [[package]] name = "solana-net-utils" -version = "1.14.9" +version = "1.14.10" dependencies = [ "bincode", "clap 3.1.6", @@ -5100,8 +5100,8 @@ dependencies = [ "serde", "serde_derive", "socket2", - "solana-logger 1.14.9", - "solana-sdk 1.14.9", + "solana-logger 1.14.10", + "solana-sdk 1.14.10", "solana-version", "tokio", "url 2.2.2", @@ -5109,7 +5109,7 @@ dependencies = [ [[package]] name = "solana-perf" -version = "1.14.9" +version = "1.14.10" dependencies = [ "ahash", "bincode", @@ -5128,13 +5128,13 @@ dependencies = [ "serde", "solana-metrics", "solana-rayon-threadlimit", - "solana-sdk 1.14.9", + "solana-sdk 1.14.10", "solana-vote-program", ] [[package]] name = "solana-poh" -version = "1.14.9" +version = "1.14.10" dependencies = [ "core_affinity", "crossbeam-channel", @@ -5144,7 +5144,7 @@ dependencies = [ "solana-measure", "solana-metrics", "solana-runtime", - "solana-sdk 1.14.9", + "solana-sdk 1.14.10", "solana-sys-tuner", "thiserror", ] @@ -5200,7 +5200,7 @@ dependencies = [ [[package]] name = "solana-program" -version = "1.14.9" +version = "1.14.10" dependencies = [ "base64 0.13.0", "bincode", @@ -5236,9 +5236,9 @@ dependencies = [ "serde_json", "sha2 0.10.2", "sha3 0.10.1", - "solana-frozen-abi 1.14.9", - "solana-frozen-abi-macro 1.14.9", - "solana-sdk-macro 1.14.9", + "solana-frozen-abi 1.14.10", + "solana-frozen-abi-macro 1.14.10", + "solana-sdk-macro 1.14.10", "thiserror", "tiny-bip39", "wasm-bindgen", @@ -5247,7 +5247,7 @@ dependencies = [ [[package]] name = "solana-program-runtime" -version = "1.14.9" +version = "1.14.10" dependencies = [ "base64 0.13.0", "bincode", @@ -5262,17 +5262,17 @@ dependencies = [ "rand 0.7.3", "rustc_version", "serde", - "solana-frozen-abi 1.14.9", - "solana-frozen-abi-macro 1.14.9", + "solana-frozen-abi 1.14.10", + "solana-frozen-abi-macro 1.14.10", "solana-measure", "solana-metrics", - "solana-sdk 1.14.9", + "solana-sdk 1.14.10", "thiserror", ] [[package]] name = "solana-program-test" -version = "1.14.9" +version = "1.14.10" dependencies = [ "assert_matches", "async-trait", @@ -5284,10 +5284,10 @@ dependencies = [ "solana-banks-client", "solana-banks-server", "solana-bpf-loader-program", - "solana-logger 1.14.9", + "solana-logger 1.14.10", "solana-program-runtime", "solana-runtime", - "solana-sdk 1.14.9", + "solana-sdk 1.14.10", "solana-vote-program", "thiserror", "tokio", @@ -5295,7 +5295,7 @@ dependencies = [ [[package]] name = "solana-rayon-threadlimit" -version = "1.14.9" +version = "1.14.10" dependencies = [ "lazy_static", "num_cpus", @@ -5303,7 +5303,7 @@ dependencies = [ [[package]] name = "solana-remote-wallet" -version = "1.14.9" +version = "1.14.10" dependencies = [ "console", "dialoguer", @@ -5313,14 +5313,14 @@ dependencies = [ "parking_lot 0.12.1", "qstring", "semver", - "solana-sdk 1.14.9", + "solana-sdk 1.14.10", "thiserror", "uriparse", ] [[package]] name = "solana-rpc" -version = "1.14.9" +version = "1.14.10" dependencies = [ "base64 0.13.0", "bincode", @@ -5353,7 +5353,7 @@ dependencies = [ "solana-poh", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.14.9", + "solana-sdk 1.14.10", "solana-send-transaction-service", "solana-stake-program", "solana-storage-bigtable", @@ -5371,7 +5371,7 @@ dependencies = [ [[package]] name = "solana-runtime" -version = "1.14.9" +version = "1.14.10" dependencies = [ "arrayref", "bincode", @@ -5407,17 +5407,17 @@ dependencies = [ "solana-bucket-map", "solana-compute-budget-program", "solana-config-program", - "solana-frozen-abi 1.14.9", - "solana-frozen-abi-macro 1.14.9", + "solana-frozen-abi 1.14.10", + "solana-frozen-abi-macro 1.14.10", "solana-measure", "solana-metrics", "solana-program-runtime", "solana-rayon-threadlimit", - "solana-sdk 1.14.9", + "solana-sdk 1.14.10", "solana-stake-program", "solana-vote-program", "solana-zk-token-proof-program", - "solana-zk-token-sdk 1.14.9", + "solana-zk-token-sdk 1.14.10", "strum", "strum_macros", "symlink", @@ -5480,7 +5480,7 @@ dependencies = [ [[package]] name = "solana-sdk" -version = "1.14.9" +version = "1.14.10" dependencies = [ "assert_matches", "base64 0.13.0", @@ -5517,11 +5517,11 @@ dependencies = [ "serde_json", "sha2 0.10.2", "sha3 0.10.1", - "solana-frozen-abi 1.14.9", - "solana-frozen-abi-macro 1.14.9", - "solana-logger 1.14.9", - "solana-program 1.14.9", - "solana-sdk-macro 1.14.9", + "solana-frozen-abi 1.14.10", + "solana-frozen-abi-macro 1.14.10", + "solana-logger 1.14.10", + "solana-program 1.14.10", + "solana-sdk-macro 1.14.10", "thiserror", "uriparse", "wasm-bindgen", @@ -5542,7 +5542,7 @@ dependencies = [ [[package]] name = "solana-sdk-macro" -version = "1.14.9" +version = "1.14.10" dependencies = [ "bs58", "proc-macro2 1.0.41", @@ -5553,7 +5553,7 @@ dependencies = [ [[package]] name = "solana-send-transaction-service" -version = "1.14.9" +version = "1.14.10" dependencies = [ "crossbeam-channel", "log", @@ -5561,12 +5561,12 @@ dependencies = [ "solana-measure", "solana-metrics", "solana-runtime", - "solana-sdk 1.14.9", + "solana-sdk 1.14.10", ] [[package]] name = "solana-stake-program" -version = "1.14.9" +version = "1.14.10" dependencies = [ "bincode", "log", @@ -5576,18 +5576,18 @@ dependencies = [ "serde", "serde_derive", "solana-config-program", - "solana-frozen-abi 1.14.9", - "solana-frozen-abi-macro 1.14.9", + "solana-frozen-abi 1.14.10", + "solana-frozen-abi-macro 1.14.10", "solana-metrics", "solana-program-runtime", - "solana-sdk 1.14.9", + "solana-sdk 1.14.10", "solana-vote-program", "thiserror", ] [[package]] name = "solana-storage-bigtable" -version = "1.14.9" +version = "1.14.10" dependencies = [ "backoff", "bincode", @@ -5608,7 +5608,7 @@ dependencies = [ "serde_derive", "smpl_jwt", "solana-metrics", - "solana-sdk 1.14.9", + "solana-sdk 1.14.10", "solana-storage-proto", "solana-transaction-status", "thiserror", @@ -5619,7 +5619,7 @@ dependencies = [ [[package]] name = "solana-storage-proto" -version = "1.14.9" +version = "1.14.10" dependencies = [ "bincode", "bs58", @@ -5627,14 +5627,14 @@ dependencies = [ "protobuf-src", "serde", "solana-account-decoder", - "solana-sdk 1.14.9", + "solana-sdk 1.14.10", "solana-transaction-status", "tonic-build 0.8.0", ] [[package]] name = "solana-streamer" -version = "1.14.9" +version = "1.14.10" dependencies = [ "crossbeam-channel", "futures-util", @@ -5653,7 +5653,7 @@ dependencies = [ "rustls 0.20.6", "solana-metrics", "solana-perf", - "solana-sdk 1.14.9", + "solana-sdk 1.14.10", "thiserror", "tokio", "x509-parser", @@ -5661,13 +5661,13 @@ dependencies = [ [[package]] name = "solana-sys-tuner" -version = "1.14.9" +version = "1.14.10" dependencies = [ "clap 2.33.3", "libc", "log", "nix", - "solana-logger 1.14.9", + "solana-logger 1.14.10", "solana-version", "sysctl", "unix_socket2", @@ -5676,7 +5676,7 @@ dependencies = [ [[package]] name = "solana-test-validator" -version = "1.14.9" +version = "1.14.10" dependencies = [ "base64 0.13.0", "log", @@ -5687,20 +5687,20 @@ dependencies = [ "solana-core", "solana-gossip", "solana-ledger", - "solana-logger 1.14.9", + "solana-logger 1.14.10", "solana-net-utils", "solana-program-runtime", "solana-program-test", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.9", + "solana-sdk 1.14.10", "solana-streamer", "tokio", ] [[package]] name = "solana-transaction-status" -version = "1.14.9" +version = "1.14.10" dependencies = [ "Inflector", "base64 0.13.0", @@ -5716,7 +5716,7 @@ dependencies = [ "solana-address-lookup-table-program", "solana-measure", "solana-metrics", - "solana-sdk 1.14.9", + "solana-sdk 1.14.10", "solana-vote-program", "spl-associated-token-account", "spl-memo", @@ -5727,7 +5727,7 @@ dependencies = [ [[package]] name = "solana-validator" -version = "1.14.9" +version = "1.14.10" dependencies = [ "chrono", "clap 2.33.3", @@ -5758,14 +5758,14 @@ dependencies = [ "solana-genesis-utils", "solana-gossip", "solana-ledger", - "solana-logger 1.14.9", + "solana-logger 1.14.10", "solana-metrics", "solana-net-utils", "solana-perf", "solana-poh", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.9", + "solana-sdk 1.14.10", "solana-send-transaction-service", "solana-storage-bigtable", "solana-streamer", @@ -5778,21 +5778,21 @@ dependencies = [ [[package]] name = "solana-version" -version = "1.14.9" +version = "1.14.10" dependencies = [ "log", "rustc_version", "semver", "serde", "serde_derive", - "solana-frozen-abi 1.14.9", - "solana-frozen-abi-macro 1.14.9", - "solana-sdk 1.14.9", + "solana-frozen-abi 1.14.10", + "solana-frozen-abi-macro 1.14.10", + "solana-sdk 1.14.10", ] [[package]] name = "solana-vote-program" -version = "1.14.9" +version = "1.14.10" dependencies = [ "bincode", "log", @@ -5801,25 +5801,25 @@ dependencies = [ "rustc_version", "serde", "serde_derive", - "solana-frozen-abi 1.14.9", - "solana-frozen-abi-macro 1.14.9", + "solana-frozen-abi 1.14.10", + "solana-frozen-abi-macro 1.14.10", "solana-metrics", "solana-program-runtime", - "solana-sdk 1.14.9", + "solana-sdk 1.14.10", "thiserror", ] [[package]] name = "solana-zk-token-proof-program" -version = "1.14.9" +version = "1.14.10" dependencies = [ "bytemuck", "getrandom 0.1.14", "num-derive", "num-traits", "solana-program-runtime", - "solana-sdk 1.14.9", - "solana-zk-token-sdk 1.14.9", + "solana-sdk 1.14.10", + "solana-zk-token-sdk 1.14.10", ] [[package]] @@ -5855,7 +5855,7 @@ dependencies = [ [[package]] name = "solana-zk-token-sdk" -version = "1.14.9" +version = "1.14.10" dependencies = [ "aes-gcm-siv", "arrayref", @@ -5875,8 +5875,8 @@ dependencies = [ "serde", "serde_json", "sha3 0.9.1", - "solana-program 1.14.9", - "solana-sdk 1.14.9", + "solana-program 1.14.10", + "solana-sdk 1.14.10", "subtle", "thiserror", "zeroize", diff --git a/programs/bpf/Cargo.toml b/programs/bpf/Cargo.toml index 4d71d6adbb5529..7af6e12b6aece4 100644 --- a/programs/bpf/Cargo.toml +++ b/programs/bpf/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "solana-bpf-programs" description = "Blockchain, Rebuilt for Scale" -version = "1.14.9" +version = "1.14.10" documentation = "https://docs.rs/solana" homepage = "https://solana.com/" readme = "README.md" @@ -26,22 +26,22 @@ itertools = "0.10.1" log = "0.4.11" miow = "0.3.6" net2 = "0.2.37" -solana-account-decoder = { path = "../../account-decoder", version = "=1.14.9" } -solana-bpf-loader-program = { path = "../bpf_loader", version = "=1.14.9" } -solana-bpf-rust-invoke = { path = "rust/invoke", version = "=1.14.9" } -solana-bpf-rust-realloc = { path = "rust/realloc", version = "=1.14.9" } -solana-bpf-rust-realloc-invoke = { path = "rust/realloc_invoke", version = "=1.14.9" } -solana-cli-output = { path = "../../cli-output", version = "=1.14.9" } -solana-logger = { path = "../../logger", version = "=1.14.9" } -solana-measure = { path = "../../measure", version = "=1.14.9" } -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.9" } -solana-runtime = { path = "../../runtime", version = "=1.14.9" } -solana-sdk = { path = "../../sdk", version = "=1.14.9" } -solana-transaction-status = { path = "../../transaction-status", version = "=1.14.9" } +solana-account-decoder = { path = "../../account-decoder", version = "=1.14.10" } +solana-bpf-loader-program = { path = "../bpf_loader", version = "=1.14.10" } +solana-bpf-rust-invoke = { path = "rust/invoke", version = "=1.14.10" } +solana-bpf-rust-realloc = { path = "rust/realloc", version = "=1.14.10" } +solana-bpf-rust-realloc-invoke = { path = "rust/realloc_invoke", version = "=1.14.10" } +solana-cli-output = { path = "../../cli-output", version = "=1.14.10" } +solana-logger = { path = "../../logger", version = "=1.14.10" } +solana-measure = { path = "../../measure", version = "=1.14.10" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.10" } +solana-runtime = { path = "../../runtime", version = "=1.14.10" } +solana-sdk = { path = "../../sdk", version = "=1.14.10" } +solana-transaction-status = { path = "../../transaction-status", version = "=1.14.10" } solana_rbpf = "=0.2.31" [dev-dependencies] -solana-ledger = { path = "../../ledger", version = "=1.14.9" } +solana-ledger = { path = "../../ledger", version = "=1.14.10" } [[bench]] name = "bpf_loader" diff --git a/programs/bpf/rust/128bit/Cargo.toml b/programs/bpf/rust/128bit/Cargo.toml index d81f2feb7a7eb6..3aa0b89103ede3 100644 --- a/programs/bpf/rust/128bit/Cargo.toml +++ b/programs/bpf/rust/128bit/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-128bit" -version = "1.14.9" +version = "1.14.10" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ documentation = "https://docs.rs/solana-bpf-rust-128bit" edition = "2021" [dependencies] -solana-bpf-rust-128bit-dep = { path = "../128bit_dep", version = "=1.14.9" } -solana-program = { path = "../../../../sdk/program", version = "=1.14.9" } +solana-bpf-rust-128bit-dep = { path = "../128bit_dep", version = "=1.14.10" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.10" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/128bit_dep/Cargo.toml b/programs/bpf/rust/128bit_dep/Cargo.toml index 1cdb1044919512..59d7fad76e0ad6 100644 --- a/programs/bpf/rust/128bit_dep/Cargo.toml +++ b/programs/bpf/rust/128bit_dep/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-128bit-dep" -version = "1.14.9" +version = "1.14.10" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-128bit-dep" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.9" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.10" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/bpf/rust/alloc/Cargo.toml b/programs/bpf/rust/alloc/Cargo.toml index 69604db1b1f77b..acc055cf7890eb 100644 --- a/programs/bpf/rust/alloc/Cargo.toml +++ b/programs/bpf/rust/alloc/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-alloc" -version = "1.14.9" +version = "1.14.10" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-alloc" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.9" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.10" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/call_depth/Cargo.toml b/programs/bpf/rust/call_depth/Cargo.toml index 69755a0ae33d0a..e8a7b9086d69b7 100644 --- a/programs/bpf/rust/call_depth/Cargo.toml +++ b/programs/bpf/rust/call_depth/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-call-depth" -version = "1.14.9" +version = "1.14.10" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-call-depth" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.9" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.10" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/caller_access/Cargo.toml b/programs/bpf/rust/caller_access/Cargo.toml index f0d811089005ea..78bdd47c2f0109 100644 --- a/programs/bpf/rust/caller_access/Cargo.toml +++ b/programs/bpf/rust/caller_access/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-caller-access" -version = "1.14.9" +version = "1.14.10" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-caller-access" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.9" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.10" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/curve25519/Cargo.toml b/programs/bpf/rust/curve25519/Cargo.toml index 2af24183736ba2..38f6885c188758 100644 --- a/programs/bpf/rust/curve25519/Cargo.toml +++ b/programs/bpf/rust/curve25519/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-curve25519" -version = "1.14.9" +version = "1.14.10" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ documentation = "https://docs.rs/solana-bpf-rust-zktoken_crypto" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.9" } -solana-zk-token-sdk = { path = "../../../../zk-token-sdk", version = "=1.14.9" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.10" } +solana-zk-token-sdk = { path = "../../../../zk-token-sdk", version = "=1.14.10" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/custom_heap/Cargo.toml b/programs/bpf/rust/custom_heap/Cargo.toml index 2055a964573c13..90433f2897148e 100644 --- a/programs/bpf/rust/custom_heap/Cargo.toml +++ b/programs/bpf/rust/custom_heap/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-custom-heap" -version = "1.14.9" +version = "1.14.10" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-custom-heap" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.9" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.10" } [features] default = ["custom-heap"] diff --git a/programs/bpf/rust/dep_crate/Cargo.toml b/programs/bpf/rust/dep_crate/Cargo.toml index e60c717ccfb799..41413316fb5e1c 100644 --- a/programs/bpf/rust/dep_crate/Cargo.toml +++ b/programs/bpf/rust/dep_crate/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-dep-crate" -version = "1.14.9" +version = "1.14.10" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,8 +12,8 @@ edition = "2021" [dependencies] byteorder = { version = "1", default-features = false } # list of crates which must be buildable for bpf programs -solana-address-lookup-table-program = { path = "../../../../programs/address-lookup-table", version = "=1.14.9" } -solana-program = { path = "../../../../sdk/program", version = "=1.14.9" } +solana-address-lookup-table-program = { path = "../../../../programs/address-lookup-table", version = "=1.14.10" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.10" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/deprecated_loader/Cargo.toml b/programs/bpf/rust/deprecated_loader/Cargo.toml index 88cea66f6b4134..19d654a6779f63 100644 --- a/programs/bpf/rust/deprecated_loader/Cargo.toml +++ b/programs/bpf/rust/deprecated_loader/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-deprecated-loader" -version = "1.14.9" +version = "1.14.10" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-deprecated-loader" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.9" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.10" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/dup_accounts/Cargo.toml b/programs/bpf/rust/dup_accounts/Cargo.toml index 1598db95ec5ec1..a392836470a8a1 100644 --- a/programs/bpf/rust/dup_accounts/Cargo.toml +++ b/programs/bpf/rust/dup_accounts/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-dup-accounts" -version = "1.14.9" +version = "1.14.10" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-dup-accounts" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.9" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.10" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/error_handling/Cargo.toml b/programs/bpf/rust/error_handling/Cargo.toml index 7263c8a7e03563..10326e612fd359 100644 --- a/programs/bpf/rust/error_handling/Cargo.toml +++ b/programs/bpf/rust/error_handling/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-error-handling" -version = "1.14.9" +version = "1.14.10" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,7 +12,7 @@ edition = "2021" [dependencies] num-derive = "0.3" num-traits = "0.2" -solana-program = { path = "../../../../sdk/program", version = "=1.14.9" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.10" } thiserror = "1.0" [lib] diff --git a/programs/bpf/rust/external_spend/Cargo.toml b/programs/bpf/rust/external_spend/Cargo.toml index 1c1b90b8fd0587..679181ea5be35d 100644 --- a/programs/bpf/rust/external_spend/Cargo.toml +++ b/programs/bpf/rust/external_spend/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-external-spend" -version = "1.14.9" +version = "1.14.10" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-external-spend" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.9" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.10" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/finalize/Cargo.toml b/programs/bpf/rust/finalize/Cargo.toml index 8aceeef63a6aa1..8a29ddde33924d 100644 --- a/programs/bpf/rust/finalize/Cargo.toml +++ b/programs/bpf/rust/finalize/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-finalize" -version = "1.14.9" +version = "1.14.10" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-finalize" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.9" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.10" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/get_minimum_delegation/Cargo.toml b/programs/bpf/rust/get_minimum_delegation/Cargo.toml index 3549204b2c34a9..59cc4078ec5a1a 100644 --- a/programs/bpf/rust/get_minimum_delegation/Cargo.toml +++ b/programs/bpf/rust/get_minimum_delegation/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-get-minimum-delegation" -version = "1.14.9" +version = "1.14.10" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-get-minimum-delegation" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.9" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.10" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/inner_instruction_alignment_check/Cargo.toml b/programs/bpf/rust/inner_instruction_alignment_check/Cargo.toml index 446ba492d90bf3..c463ec7a56d3f1 100644 --- a/programs/bpf/rust/inner_instruction_alignment_check/Cargo.toml +++ b/programs/bpf/rust/inner_instruction_alignment_check/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-inner_instruction_alignment_check" -version = "1.14.9" +version = "1.14.10" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-inner_instruction_alignment_che edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.9" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.10" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/instruction_introspection/Cargo.toml b/programs/bpf/rust/instruction_introspection/Cargo.toml index 255082ce85606d..e704c43bf6397a 100644 --- a/programs/bpf/rust/instruction_introspection/Cargo.toml +++ b/programs/bpf/rust/instruction_introspection/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-instruction-introspection" -version = "1.14.9" +version = "1.14.10" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-instruction-introspection" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.9" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.10" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/invoke/Cargo.toml b/programs/bpf/rust/invoke/Cargo.toml index 6fb7135af2c766..596475357410d5 100644 --- a/programs/bpf/rust/invoke/Cargo.toml +++ b/programs/bpf/rust/invoke/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-invoke" -version = "1.14.9" +version = "1.14.10" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -15,7 +15,7 @@ program = [] [dependencies] solana-bpf-rust-invoked = { path = "../invoked", default-features = false } -solana-program = { path = "../../../../sdk/program", version = "=1.14.9" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.10" } [lib] crate-type = ["lib", "cdylib"] diff --git a/programs/bpf/rust/invoke_and_error/Cargo.toml b/programs/bpf/rust/invoke_and_error/Cargo.toml index 16eb2ac99347b1..fc08a1d93a22a8 100644 --- a/programs/bpf/rust/invoke_and_error/Cargo.toml +++ b/programs/bpf/rust/invoke_and_error/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-invoke-and-error" -version = "1.14.9" +version = "1.14.10" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-invoke-and-error" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.9" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.10" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/invoke_and_ok/Cargo.toml b/programs/bpf/rust/invoke_and_ok/Cargo.toml index 8da389d1ee8844..a941decc18b515 100644 --- a/programs/bpf/rust/invoke_and_ok/Cargo.toml +++ b/programs/bpf/rust/invoke_and_ok/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-invoke-and-ok" -version = "1.14.9" +version = "1.14.10" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-invoke-and-ok" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.9" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.10" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/invoke_and_return/Cargo.toml b/programs/bpf/rust/invoke_and_return/Cargo.toml index a682961780f159..adc50088b44339 100644 --- a/programs/bpf/rust/invoke_and_return/Cargo.toml +++ b/programs/bpf/rust/invoke_and_return/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-invoke-and-return" -version = "1.14.9" +version = "1.14.10" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-invoke-and-return" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.9" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.10" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/invoked/Cargo.toml b/programs/bpf/rust/invoked/Cargo.toml index 363adbc803a074..db53d298fe2903 100644 --- a/programs/bpf/rust/invoked/Cargo.toml +++ b/programs/bpf/rust/invoked/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-invoked" -version = "1.14.9" +version = "1.14.10" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,7 +14,7 @@ default = ["program"] program = [] [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.9" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.10" } [lib] crate-type = ["lib", "cdylib"] diff --git a/programs/bpf/rust/iter/Cargo.toml b/programs/bpf/rust/iter/Cargo.toml index 1413c951cfcb42..7895da85a891e3 100644 --- a/programs/bpf/rust/iter/Cargo.toml +++ b/programs/bpf/rust/iter/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-iter" -version = "1.14.9" +version = "1.14.10" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-iter" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.9" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.10" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/log_data/Cargo.toml b/programs/bpf/rust/log_data/Cargo.toml index c623951c95747c..c7073017441bed 100644 --- a/programs/bpf/rust/log_data/Cargo.toml +++ b/programs/bpf/rust/log_data/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-log-data" -version = "1.14.9" +version = "1.14.10" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-log-data" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.9" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.10" } [features] default = ["program"] diff --git a/programs/bpf/rust/many_args/Cargo.toml b/programs/bpf/rust/many_args/Cargo.toml index 69a344c17dc9fe..293c19eeb8b73e 100644 --- a/programs/bpf/rust/many_args/Cargo.toml +++ b/programs/bpf/rust/many_args/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-many-args" -version = "1.14.9" +version = "1.14.10" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ documentation = "https://docs.rs/solana-bpf-rust-many-args" edition = "2021" [dependencies] -solana-bpf-rust-many-args-dep = { path = "../many_args_dep", version = "=1.14.9" } -solana-program = { path = "../../../../sdk/program", version = "=1.14.9" } +solana-bpf-rust-many-args-dep = { path = "../many_args_dep", version = "=1.14.10" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.10" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/many_args_dep/Cargo.toml b/programs/bpf/rust/many_args_dep/Cargo.toml index 9b4a976c83ecfc..60edbf4ef60263 100644 --- a/programs/bpf/rust/many_args_dep/Cargo.toml +++ b/programs/bpf/rust/many_args_dep/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-many-args-dep" -version = "1.14.9" +version = "1.14.10" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-many-args-dep" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.9" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.10" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/bpf/rust/mem/Cargo.toml b/programs/bpf/rust/mem/Cargo.toml index 5b140b5474ca0a..eed1ead3272833 100644 --- a/programs/bpf/rust/mem/Cargo.toml +++ b/programs/bpf/rust/mem/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-mem" -version = "1.14.9" +version = "1.14.10" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,12 +13,12 @@ edition = "2021" no-entrypoint = [] [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.9" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.10" } [dev-dependencies] -solana-program-runtime = { path = "../../../../program-runtime", version = "=1.14.9" } -solana-program-test = { path = "../../../../program-test", version = "=1.14.9" } -solana-sdk = { path = "../../../../sdk", version = "=1.14.9" } +solana-program-runtime = { path = "../../../../program-runtime", version = "=1.14.10" } +solana-program-test = { path = "../../../../program-test", version = "=1.14.10" } +solana-sdk = { path = "../../../../sdk", version = "=1.14.10" } [lib] crate-type = ["cdylib", "lib"] diff --git a/programs/bpf/rust/membuiltins/Cargo.toml b/programs/bpf/rust/membuiltins/Cargo.toml index 80d975f11d3730..c9b469bd3be130 100644 --- a/programs/bpf/rust/membuiltins/Cargo.toml +++ b/programs/bpf/rust/membuiltins/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-membuiltins" -version = "1.14.9" +version = "1.14.10" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ documentation = "https://docs.rs/solana-bpf-rust-mem" edition = "2021" [dependencies] -solana-bpf-rust-mem = { path = "../mem", version = "=1.14.9", features = [ "no-entrypoint" ] } -solana-program = { path = "../../../../sdk/program", version = "=1.14.9" } +solana-bpf-rust-mem = { path = "../mem", version = "=1.14.10", features = [ "no-entrypoint" ] } +solana-program = { path = "../../../../sdk/program", version = "=1.14.10" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/noop/Cargo.toml b/programs/bpf/rust/noop/Cargo.toml index d45830adb1ffb1..cb0f8224b36415 100644 --- a/programs/bpf/rust/noop/Cargo.toml +++ b/programs/bpf/rust/noop/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-noop" -version = "1.14.9" +version = "1.14.10" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-noop" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.9" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.10" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/panic/Cargo.toml b/programs/bpf/rust/panic/Cargo.toml index cb1db6f2ba290c..6de10e4d83ad69 100644 --- a/programs/bpf/rust/panic/Cargo.toml +++ b/programs/bpf/rust/panic/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-panic" -version = "1.14.9" +version = "1.14.10" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-panic" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.9" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.10" } [features] default = ["custom-panic"] diff --git a/programs/bpf/rust/param_passing/Cargo.toml b/programs/bpf/rust/param_passing/Cargo.toml index 12f9a5aceaf013..4a252e155fe1db 100644 --- a/programs/bpf/rust/param_passing/Cargo.toml +++ b/programs/bpf/rust/param_passing/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-param-passing" -version = "1.14.9" +version = "1.14.10" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ documentation = "https://docs.rs/solana-bpf-rust-param-passing" edition = "2021" [dependencies] -solana-bpf-rust-param-passing-dep = { path = "../param_passing_dep", version = "=1.14.9" } -solana-program = { path = "../../../../sdk/program", version = "=1.14.9" } +solana-bpf-rust-param-passing-dep = { path = "../param_passing_dep", version = "=1.14.10" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.10" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/param_passing_dep/Cargo.toml b/programs/bpf/rust/param_passing_dep/Cargo.toml index 2984f3937167a2..7f8d109efa51f1 100644 --- a/programs/bpf/rust/param_passing_dep/Cargo.toml +++ b/programs/bpf/rust/param_passing_dep/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-param-passing-dep" -version = "1.14.9" +version = "1.14.10" description = "Solana BPF program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-param-passing-dep" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.9" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.10" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/bpf/rust/rand/Cargo.toml b/programs/bpf/rust/rand/Cargo.toml index 2273f8da4ba630..6be38a93429702 100644 --- a/programs/bpf/rust/rand/Cargo.toml +++ b/programs/bpf/rust/rand/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-rand" -version = "1.14.9" +version = "1.14.10" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,7 +12,7 @@ edition = "2021" [dependencies] getrandom = { version = "0.1.14", features = ["dummy"] } rand = "0.7" -solana-program = { path = "../../../../sdk/program", version = "=1.14.9" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.10" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/realloc/Cargo.toml b/programs/bpf/rust/realloc/Cargo.toml index be65a95f5d1621..1c9b4ce7083fd1 100644 --- a/programs/bpf/rust/realloc/Cargo.toml +++ b/programs/bpf/rust/realloc/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-realloc" -version = "1.14.9" +version = "1.14.10" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,7 +14,7 @@ default = ["program"] program = [] [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.9" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.10" } [lib] crate-type = ["lib", "cdylib"] diff --git a/programs/bpf/rust/realloc_invoke/Cargo.toml b/programs/bpf/rust/realloc_invoke/Cargo.toml index 2a872eb5d17c92..b4ecadc794b8f4 100644 --- a/programs/bpf/rust/realloc_invoke/Cargo.toml +++ b/programs/bpf/rust/realloc_invoke/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-realloc-invoke" -version = "1.14.9" +version = "1.14.10" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,8 +14,8 @@ default = ["program"] program = [] [dependencies] -solana-bpf-rust-realloc = { path = "../realloc", version = "=1.14.9", default-features = false } -solana-program = { path = "../../../../sdk/program", version = "=1.14.9" } +solana-bpf-rust-realloc = { path = "../realloc", version = "=1.14.10", default-features = false } +solana-program = { path = "../../../../sdk/program", version = "=1.14.10" } [lib] crate-type = ["lib", "cdylib"] diff --git a/programs/bpf/rust/ro_account_modify/Cargo.toml b/programs/bpf/rust/ro_account_modify/Cargo.toml index 85b0ec8b50b994..165d174095a67c 100644 --- a/programs/bpf/rust/ro_account_modify/Cargo.toml +++ b/programs/bpf/rust/ro_account_modify/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-ro-account_modify" -version = "1.14.9" +version = "1.14.10" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-ro-modify" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.9" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.10" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/ro_modify/Cargo.toml b/programs/bpf/rust/ro_modify/Cargo.toml index 4e178b2b894742..405f7610152aae 100644 --- a/programs/bpf/rust/ro_modify/Cargo.toml +++ b/programs/bpf/rust/ro_modify/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-ro-modify" -version = "1.14.9" +version = "1.14.10" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-ro-modify" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.9" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.10" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/sanity/Cargo.toml b/programs/bpf/rust/sanity/Cargo.toml index 05e499bb3ab0f5..27683d79384541 100644 --- a/programs/bpf/rust/sanity/Cargo.toml +++ b/programs/bpf/rust/sanity/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-sanity" -version = "1.14.9" +version = "1.14.10" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,12 +13,12 @@ edition = "2021" test-bpf = [] [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.9" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.10" } [dev-dependencies] -solana-program-runtime = { path = "../../../../program-runtime", version = "=1.14.9" } -solana-program-test = { path = "../../../../program-test", version = "=1.14.9" } -solana-sdk = { path = "../../../../sdk", version = "=1.14.9" } +solana-program-runtime = { path = "../../../../program-runtime", version = "=1.14.10" } +solana-program-test = { path = "../../../../program-test", version = "=1.14.10" } +solana-sdk = { path = "../../../../sdk", version = "=1.14.10" } [lib] crate-type = ["cdylib", "lib"] diff --git a/programs/bpf/rust/secp256k1_recover/Cargo.toml b/programs/bpf/rust/secp256k1_recover/Cargo.toml index 312f3da5a147b0..5d6657e518cae7 100644 --- a/programs/bpf/rust/secp256k1_recover/Cargo.toml +++ b/programs/bpf/rust/secp256k1_recover/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-secp256k1-recover" -version = "1.14.9" +version = "1.14.10" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -11,7 +11,7 @@ edition = "2021" [dependencies] libsecp256k1 = { version = "0.7.0", default-features = false } -solana-program = { path = "../../../../sdk/program", version = "=1.14.9" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.10" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/sha/Cargo.toml b/programs/bpf/rust/sha/Cargo.toml index 7909c943d72b3d..0931c564019a65 100644 --- a/programs/bpf/rust/sha/Cargo.toml +++ b/programs/bpf/rust/sha/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-sha" -version = "1.14.9" +version = "1.14.10" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -11,7 +11,7 @@ edition = "2021" [dependencies] blake3 = "1.0.0" -solana-program = { path = "../../../../sdk/program", version = "=1.14.9" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.10" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/sibling_inner_instruction/Cargo.toml b/programs/bpf/rust/sibling_inner_instruction/Cargo.toml index 82967916a19454..fcb52aece5d59f 100644 --- a/programs/bpf/rust/sibling_inner_instruction/Cargo.toml +++ b/programs/bpf/rust/sibling_inner_instruction/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-sibling_inner-instructions" -version = "1.14.9" +version = "1.14.10" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-log-data" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.9" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.10" } [features] default = ["program"] diff --git a/programs/bpf/rust/sibling_instruction/Cargo.toml b/programs/bpf/rust/sibling_instruction/Cargo.toml index b153872135ded2..039d145d6f09a2 100644 --- a/programs/bpf/rust/sibling_instruction/Cargo.toml +++ b/programs/bpf/rust/sibling_instruction/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-sibling-instructions" -version = "1.14.9" +version = "1.14.10" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-log-data" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.9" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.10" } [features] default = ["program"] diff --git a/programs/bpf/rust/simulation/Cargo.toml b/programs/bpf/rust/simulation/Cargo.toml index bc164decb0816b..ea58a1616354e5 100644 --- a/programs/bpf/rust/simulation/Cargo.toml +++ b/programs/bpf/rust/simulation/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-simulation" -version = "1.14.9" +version = "1.14.10" description = "Solana BPF Program Simulation Differences" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,13 +13,13 @@ edition = "2021" test-bpf = [] [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.9" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.10" } [dev-dependencies] -solana-logger = { path = "../../../../logger", version = "=1.14.9" } -solana-program-test = { path = "../../../../program-test", version = "=1.14.9" } -solana-sdk = { path = "../../../../sdk", version = "=1.14.9" } -solana-validator = { path = "../../../../validator", version = "=1.14.9" } +solana-logger = { path = "../../../../logger", version = "=1.14.10" } +solana-program-test = { path = "../../../../program-test", version = "=1.14.10" } +solana-sdk = { path = "../../../../sdk", version = "=1.14.10" } +solana-validator = { path = "../../../../validator", version = "=1.14.10" } [lib] crate-type = ["cdylib", "lib"] diff --git a/programs/bpf/rust/spoof1/Cargo.toml b/programs/bpf/rust/spoof1/Cargo.toml index f0babcb6437a13..5f286b9de03555 100644 --- a/programs/bpf/rust/spoof1/Cargo.toml +++ b/programs/bpf/rust/spoof1/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-spoof1" -version = "1.14.9" +version = "1.14.10" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-spoof1" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.9" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.10" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/spoof1_system/Cargo.toml b/programs/bpf/rust/spoof1_system/Cargo.toml index 62232427a87ae1..2680106c76c343 100644 --- a/programs/bpf/rust/spoof1_system/Cargo.toml +++ b/programs/bpf/rust/spoof1_system/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-spoof1-system" -version = "1.14.9" +version = "1.14.10" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-spoof1-system" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.9" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.10" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/sysvar/Cargo.toml b/programs/bpf/rust/sysvar/Cargo.toml index 5e9b379c58b81b..3465330103e554 100644 --- a/programs/bpf/rust/sysvar/Cargo.toml +++ b/programs/bpf/rust/sysvar/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-sysvar" -version = "1.14.9" +version = "1.14.10" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,12 +10,12 @@ documentation = "https://docs.rs/solana-bpf-rust-sysvar" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.9" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.10" } [dev-dependencies] -solana-program-runtime = { path = "../../../../program-runtime", version = "=1.14.9" } -solana-program-test = { path = "../../../../program-test", version = "=1.14.9" } -solana-sdk = { path = "../../../../sdk", version = "=1.14.9" } +solana-program-runtime = { path = "../../../../program-runtime", version = "=1.14.10" } +solana-program-test = { path = "../../../../program-test", version = "=1.14.10" } +solana-sdk = { path = "../../../../sdk", version = "=1.14.10" } [lib] crate-type = ["cdylib", "lib"] diff --git a/programs/bpf/rust/upgradeable/Cargo.toml b/programs/bpf/rust/upgradeable/Cargo.toml index 360457385e820b..1d35e2df56b0b6 100644 --- a/programs/bpf/rust/upgradeable/Cargo.toml +++ b/programs/bpf/rust/upgradeable/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-upgradeable" -version = "1.14.9" +version = "1.14.10" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-upgradeable" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.9" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.10" } [lib] name = "solana_bpf_rust_upgradeable" diff --git a/programs/bpf/rust/upgraded/Cargo.toml b/programs/bpf/rust/upgraded/Cargo.toml index 4dea4c45a503ad..a2b1c16895dd21 100644 --- a/programs/bpf/rust/upgraded/Cargo.toml +++ b/programs/bpf/rust/upgraded/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-upgraded" -version = "1.14.9" +version = "1.14.10" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-upgraded" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.9" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.10" } [lib] name = "solana_bpf_rust_upgraded" diff --git a/programs/bpf_loader/Cargo.toml b/programs/bpf_loader/Cargo.toml index 2f0756f6d2b306..5060435985b2b9 100644 --- a/programs/bpf_loader/Cargo.toml +++ b/programs/bpf_loader/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-loader-program" -version = "1.14.9" +version = "1.14.10" description = "Solana BPF loader" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,17 +14,17 @@ bincode = "1.3.3" byteorder = "1.4.3" libsecp256k1 = "0.6.0" log = "0.4.17" -solana-measure = { path = "../../measure", version = "=1.14.9" } -solana-metrics = { path = "../../metrics", version = "=1.14.9" } -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.9" } -solana-sdk = { path = "../../sdk", version = "=1.14.9" } -solana-zk-token-sdk = { path = "../../zk-token-sdk", version = "=1.14.9" } +solana-measure = { path = "../../measure", version = "=1.14.10" } +solana-metrics = { path = "../../metrics", version = "=1.14.10" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.10" } +solana-sdk = { path = "../../sdk", version = "=1.14.10" } +solana-zk-token-sdk = { path = "../../zk-token-sdk", version = "=1.14.10" } solana_rbpf = "=0.2.31" thiserror = "1.0" [dev-dependencies] rand = "0.7.3" -solana-runtime = { path = "../../runtime", version = "=1.14.9" } +solana-runtime = { path = "../../runtime", version = "=1.14.10" } [lib] crate-type = ["lib"] diff --git a/programs/bpf_loader/gen-syscall-list/Cargo.toml b/programs/bpf_loader/gen-syscall-list/Cargo.toml index 3027aa0198ac3b..fc36242c9b8cb2 100644 --- a/programs/bpf_loader/gen-syscall-list/Cargo.toml +++ b/programs/bpf_loader/gen-syscall-list/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "gen-syscall-list" -version = "1.14.9" +version = "1.14.10" edition = "2021" license = "Apache-2.0" publish = false diff --git a/programs/compute-budget/Cargo.toml b/programs/compute-budget/Cargo.toml index 88ace43d1dce28..7d76f8183122e1 100644 --- a/programs/compute-budget/Cargo.toml +++ b/programs/compute-budget/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "solana-compute-budget-program" description = "Solana Compute Budget program" -version = "1.14.9" +version = "1.14.10" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-compute-budget-program" repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ license = "Apache-2.0" edition = "2021" [dependencies] -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.9" } -solana-sdk = { path = "../../sdk", version = "=1.14.9" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.10" } +solana-sdk = { path = "../../sdk", version = "=1.14.10" } [lib] crate-type = ["lib"] diff --git a/programs/config/Cargo.toml b/programs/config/Cargo.toml index 22527aeccebe47..42c220ceed1b2a 100644 --- a/programs/config/Cargo.toml +++ b/programs/config/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-config-program" -version = "1.14.9" +version = "1.14.10" description = "Solana Config program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,11 +14,11 @@ bincode = "1.3.3" chrono = { version = "0.4.11", features = ["serde"] } serde = "1.0.138" serde_derive = "1.0.103" -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.9" } -solana-sdk = { path = "../../sdk", version = "=1.14.9" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.10" } +solana-sdk = { path = "../../sdk", version = "=1.14.10" } [dev-dependencies] -solana-logger = { path = "../../logger", version = "=1.14.9" } +solana-logger = { path = "../../logger", version = "=1.14.10" } [lib] crate-type = ["lib"] diff --git a/programs/ed25519-tests/Cargo.toml b/programs/ed25519-tests/Cargo.toml index be7199b38d7337..bfbb2e5657409b 100644 --- a/programs/ed25519-tests/Cargo.toml +++ b/programs/ed25519-tests/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-ed25519-program-tests" -version = "1.14.9" +version = "1.14.10" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" @@ -12,8 +12,8 @@ publish = false assert_matches = "1.5.0" ed25519-dalek = "=1.0.1" rand = "0.7.0" -solana-program-test = { path = "../../program-test", version = "=1.14.9" } -solana-sdk = { path = "../../sdk", version = "=1.14.9" } +solana-program-test = { path = "../../program-test", version = "=1.14.10" } +solana-sdk = { path = "../../sdk", version = "=1.14.10" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/stake/Cargo.toml b/programs/stake/Cargo.toml index dea777c7edecfc..ba4d27090f40cd 100644 --- a/programs/stake/Cargo.toml +++ b/programs/stake/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-stake-program" -version = "1.14.9" +version = "1.14.10" description = "Solana Stake program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -16,19 +16,19 @@ num-derive = "0.3" num-traits = "0.2" serde = "1.0.138" serde_derive = "1.0.103" -solana-config-program = { path = "../config", version = "=1.14.9" } -solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.9" } -solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.9" } -solana-metrics = { path = "../../metrics", version = "=1.14.9" } -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.9" } -solana-sdk = { path = "../../sdk", version = "=1.14.9" } -solana-vote-program = { path = "../vote", version = "=1.14.9" } +solana-config-program = { path = "../config", version = "=1.14.10" } +solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.10" } +solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.10" } +solana-metrics = { path = "../../metrics", version = "=1.14.10" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.10" } +solana-sdk = { path = "../../sdk", version = "=1.14.10" } +solana-vote-program = { path = "../vote", version = "=1.14.10" } thiserror = "1.0" [dev-dependencies] assert_matches = "1.5.0" proptest = "1.0" -solana-logger = { path = "../../logger", version = "=1.14.9" } +solana-logger = { path = "../../logger", version = "=1.14.10" } test-case = "2.1.0" [build-dependencies] diff --git a/programs/vote/Cargo.toml b/programs/vote/Cargo.toml index fc6081d5bcb711..8b786ef494a865 100644 --- a/programs/vote/Cargo.toml +++ b/programs/vote/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-vote-program" -version = "1.14.9" +version = "1.14.10" description = "Solana Vote program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -16,17 +16,17 @@ num-derive = "0.3" num-traits = "0.2" serde = "1.0.138" serde_derive = "1.0.103" -solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.9" } -solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.9" } -solana-metrics = { path = "../../metrics", version = "=1.14.9" } -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.9" } -solana-sdk = { path = "../../sdk", version = "=1.14.9" } +solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.10" } +solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.10" } +solana-metrics = { path = "../../metrics", version = "=1.14.10" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.10" } +solana-sdk = { path = "../../sdk", version = "=1.14.10" } thiserror = "1.0" [dev-dependencies] itertools = "0.10.3" rand = "0.7.0" -solana-logger = { path = "../../logger", version = "=1.14.9" } +solana-logger = { path = "../../logger", version = "=1.14.10" } [build-dependencies] rustc_version = "0.4" diff --git a/programs/zk-token-proof/Cargo.toml b/programs/zk-token-proof/Cargo.toml index 2db3a6faf27323..6a2ef683c06f9d 100644 --- a/programs/zk-token-proof/Cargo.toml +++ b/programs/zk-token-proof/Cargo.toml @@ -3,7 +3,7 @@ name = "solana-zk-token-proof-program" description = "Solana Zk Token Proof Program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" -version = "1.14.9" +version = "1.14.10" license = "Apache-2.0" edition = "2021" @@ -12,6 +12,6 @@ bytemuck = { version = "1.11.0", features = ["derive"] } getrandom = { version = "0.1", features = ["dummy"] } num-derive = "0.3" num-traits = "0.2" -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.9" } -solana-sdk = { path = "../../sdk", version = "=1.14.9" } -solana-zk-token-sdk = { path = "../../zk-token-sdk", version = "=1.14.9" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.10" } +solana-sdk = { path = "../../sdk", version = "=1.14.10" } +solana-zk-token-sdk = { path = "../../zk-token-sdk", version = "=1.14.10" } diff --git a/rayon-threadlimit/Cargo.toml b/rayon-threadlimit/Cargo.toml index 206740458bb767..2e77b1f265aa20 100644 --- a/rayon-threadlimit/Cargo.toml +++ b/rayon-threadlimit/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-rayon-threadlimit" -version = "1.14.9" +version = "1.14.10" description = "solana-rayon-threadlimit" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-rayon-threadlimit" diff --git a/rbpf-cli/Cargo.toml b/rbpf-cli/Cargo.toml index 8c525001c1c580..847248b7c5b6aa 100644 --- a/rbpf-cli/Cargo.toml +++ b/rbpf-cli/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "rbpf-cli" -version = "1.14.9" +version = "1.14.10" description = "CLI to test and analyze eBPF programs" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/rbpf" @@ -13,8 +13,8 @@ publish = false clap = { version = "3.1.5", features = ["cargo"] } serde = "1.0.138" serde_json = "1.0.81" -solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.9" } -solana-logger = { path = "../logger", version = "=1.14.9" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.9" } -solana-sdk = { path = "../sdk", version = "=1.14.9" } +solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.10" } +solana-logger = { path = "../logger", version = "=1.14.10" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.10" } +solana-sdk = { path = "../sdk", version = "=1.14.10" } solana_rbpf = "=0.2.31" diff --git a/remote-wallet/Cargo.toml b/remote-wallet/Cargo.toml index 47e9855235c0f9..6cfe448f41fbef 100644 --- a/remote-wallet/Cargo.toml +++ b/remote-wallet/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-remote-wallet" description = "Blockchain, Rebuilt for Scale" -version = "1.14.9" +version = "1.14.10" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -19,7 +19,7 @@ num-traits = { version = "0.2" } parking_lot = "0.12" qstring = "0.7.2" semver = "1.0" -solana-sdk = { path = "../sdk", version = "=1.14.9" } +solana-sdk = { path = "../sdk", version = "=1.14.10" } thiserror = "1.0" uriparse = "0.6.4" diff --git a/rpc-test/Cargo.toml b/rpc-test/Cargo.toml index 24b5fd7cc89c76..2c020ef7d7f1ce 100644 --- a/rpc-test/Cargo.toml +++ b/rpc-test/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-rpc-test" -version = "1.14.9" +version = "1.14.10" description = "Solana RPC Test" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -19,17 +19,17 @@ log = "0.4.17" reqwest = { version = "0.11.11", default-features = false, features = ["blocking", "brotli", "deflate", "gzip", "rustls-tls", "json"] } serde = "1.0.138" serde_json = "1.0.81" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.9" } -solana-client = { path = "../client", version = "=1.14.9" } -solana-rpc = { path = "../rpc", version = "=1.14.9" } -solana-sdk = { path = "../sdk", version = "=1.14.9" } -solana-streamer = { path = "../streamer", version = "=1.14.9" } -solana-test-validator = { path = "../test-validator", version = "=1.14.9" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.9" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.10" } +solana-client = { path = "../client", version = "=1.14.10" } +solana-rpc = { path = "../rpc", version = "=1.14.10" } +solana-sdk = { path = "../sdk", version = "=1.14.10" } +solana-streamer = { path = "../streamer", version = "=1.14.10" } +solana-test-validator = { path = "../test-validator", version = "=1.14.10" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.10" } tokio = { version = "~1.14.1", features = ["full"] } [dev-dependencies] -solana-logger = { path = "../logger", version = "=1.14.9" } +solana-logger = { path = "../logger", version = "=1.14.10" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/rpc/Cargo.toml b/rpc/Cargo.toml index 3936757755ab4a..d254089182931d 100644 --- a/rpc/Cargo.toml +++ b/rpc/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-rpc" -version = "1.14.9" +version = "1.14.10" description = "Solana RPC" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -29,26 +29,26 @@ serde = "1.0.138" serde_derive = "1.0.103" serde_json = "1.0.81" soketto = "0.7" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.9" } -solana-client = { path = "../client", version = "=1.14.9" } -solana-entry = { path = "../entry", version = "=1.14.9" } -solana-faucet = { path = "../faucet", version = "=1.14.9" } -solana-gossip = { path = "../gossip", version = "=1.14.9" } -solana-ledger = { path = "../ledger", version = "=1.14.9" } -solana-measure = { path = "../measure", version = "=1.14.9" } -solana-metrics = { path = "../metrics", version = "=1.14.9" } -solana-perf = { path = "../perf", version = "=1.14.9" } -solana-poh = { path = "../poh", version = "=1.14.9" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.9" } -solana-runtime = { path = "../runtime", version = "=1.14.9" } -solana-sdk = { path = "../sdk", version = "=1.14.9" } -solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.9" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.9" } -solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.9" } -solana-streamer = { path = "../streamer", version = "=1.14.9" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.9" } -solana-version = { path = "../version", version = "=1.14.9" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.9" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.10" } +solana-client = { path = "../client", version = "=1.14.10" } +solana-entry = { path = "../entry", version = "=1.14.10" } +solana-faucet = { path = "../faucet", version = "=1.14.10" } +solana-gossip = { path = "../gossip", version = "=1.14.10" } +solana-ledger = { path = "../ledger", version = "=1.14.10" } +solana-measure = { path = "../measure", version = "=1.14.10" } +solana-metrics = { path = "../metrics", version = "=1.14.10" } +solana-perf = { path = "../perf", version = "=1.14.10" } +solana-poh = { path = "../poh", version = "=1.14.10" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.10" } +solana-runtime = { path = "../runtime", version = "=1.14.10" } +solana-sdk = { path = "../sdk", version = "=1.14.10" } +solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.10" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.10" } +solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.10" } +solana-streamer = { path = "../streamer", version = "=1.14.10" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.10" } +solana-version = { path = "../version", version = "=1.14.10" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.10" } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } spl-token-2022 = { version = "=0.5.0", features = ["no-entrypoint"] } stream-cancel = "0.8.1" @@ -58,9 +58,9 @@ tokio-util = { version = "0.6", features = ["codec", "compat"] } [dev-dependencies] serial_test = "0.8.0" -solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.9" } -solana-net-utils = { path = "../net-utils", version = "=1.14.9" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.9" } +solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.10" } +solana-net-utils = { path = "../net-utils", version = "=1.14.10" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.10" } symlink = "0.1.0" [lib] diff --git a/runtime/Cargo.toml b/runtime/Cargo.toml index 6504fb446a3292..31ea5caa059a7b 100644 --- a/runtime/Cargo.toml +++ b/runtime/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-runtime" -version = "1.14.9" +version = "1.14.10" description = "Solana runtime" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -39,21 +39,21 @@ rayon = "1.5.3" regex = "1.5.6" serde = { version = "1.0.138", features = ["rc"] } serde_derive = "1.0.103" -solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.9" } -solana-bucket-map = { path = "../bucket_map", version = "=1.14.9" } -solana-compute-budget-program = { path = "../programs/compute-budget", version = "=1.14.9" } -solana-config-program = { path = "../programs/config", version = "=1.14.9" } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.9" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.9" } -solana-measure = { path = "../measure", version = "=1.14.9" } -solana-metrics = { path = "../metrics", version = "=1.14.9" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.9" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.9" } -solana-sdk = { path = "../sdk", version = "=1.14.9" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.9" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.9" } -solana-zk-token-proof-program = { path = "../programs/zk-token-proof", version = "=1.14.9" } -solana-zk-token-sdk = { path = "../zk-token-sdk", version = "=1.14.9" } +solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.10" } +solana-bucket-map = { path = "../bucket_map", version = "=1.14.10" } +solana-compute-budget-program = { path = "../programs/compute-budget", version = "=1.14.10" } +solana-config-program = { path = "../programs/config", version = "=1.14.10" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.10" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.10" } +solana-measure = { path = "../measure", version = "=1.14.10" } +solana-metrics = { path = "../metrics", version = "=1.14.10" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.10" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.10" } +solana-sdk = { path = "../sdk", version = "=1.14.10" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.10" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.10" } +solana-zk-token-proof-program = { path = "../programs/zk-token-proof", version = "=1.14.10" } +solana-zk-token-sdk = { path = "../zk-token-sdk", version = "=1.14.10" } strum = { version = "0.24", features = ["derive"] } strum_macros = "0.24" symlink = "0.1.0" @@ -71,7 +71,7 @@ assert_matches = "1.5.0" ed25519-dalek = "=1.0.1" libsecp256k1 = "0.6.0" rand_chacha = "0.2.2" -solana-logger = { path = "../logger", version = "=1.14.9" } +solana-logger = { path = "../logger", version = "=1.14.10" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/runtime/store-tool/Cargo.toml b/runtime/store-tool/Cargo.toml index fae601194ac84b..9b477b7a9ca5e0 100644 --- a/runtime/store-tool/Cargo.toml +++ b/runtime/store-tool/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-store-tool" description = "Tool to inspect append vecs" -version = "1.14.9" +version = "1.14.10" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -12,9 +12,9 @@ publish = false [dependencies] clap = "2.33.1" log = { version = "0.4.17" } -solana-logger = { path = "../../logger", version = "=1.14.9" } -solana-runtime = { path = "..", version = "=1.14.9" } -solana-version = { path = "../../version", version = "=1.14.9" } +solana-logger = { path = "../../logger", version = "=1.14.10" } +solana-runtime = { path = "..", version = "=1.14.10" } +solana-version = { path = "../../version", version = "=1.14.10" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/sdk/Cargo.toml b/sdk/Cargo.toml index 163ff173480877..c39a69b2a39461 100644 --- a/sdk/Cargo.toml +++ b/sdk/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-sdk" -version = "1.14.9" +version = "1.14.10" description = "Solana SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -71,11 +71,11 @@ serde_derive = "1.0.103" serde_json = { version = "1.0.81", optional = true } sha2 = "0.10.2" sha3 = { version = "0.10.1", optional = true } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.9" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.9" } -solana-logger = { path = "../logger", version = "=1.14.9", optional = true } -solana-program = { path = "program", version = "=1.14.9" } -solana-sdk-macro = { path = "macro", version = "=1.14.9" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.10" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.10" } +solana-logger = { path = "../logger", version = "=1.14.10", optional = true } +solana-program = { path = "program", version = "=1.14.10" } +solana-sdk-macro = { path = "macro", version = "=1.14.10" } thiserror = "1.0" uriparse = "0.6.4" wasm-bindgen = "0.2" diff --git a/sdk/cargo-build-bpf/Cargo.toml b/sdk/cargo-build-bpf/Cargo.toml index 1054d41d5c64f6..2d8386ba7857ad 100644 --- a/sdk/cargo-build-bpf/Cargo.toml +++ b/sdk/cargo-build-bpf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-cargo-build-bpf" -version = "1.14.9" +version = "1.14.10" description = "Compile a local package and all of its dependencies using the Solana SBF SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,7 +12,7 @@ publish = false [dependencies] cargo_metadata = "0.15.0" clap = { version = "3.1.5", features = ["cargo", "env"] } -solana-sdk = { path = "..", version = "=1.14.9" } +solana-sdk = { path = "..", version = "=1.14.10" } [features] program = [] diff --git a/sdk/cargo-build-sbf/Cargo.toml b/sdk/cargo-build-sbf/Cargo.toml index 2e7d9a2e083e82..780410ff4d6c6a 100644 --- a/sdk/cargo-build-sbf/Cargo.toml +++ b/sdk/cargo-build-sbf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-cargo-build-sbf" -version = "1.14.9" +version = "1.14.10" description = "Compile a local package and all of its dependencies using the Solana SBF SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -15,9 +15,9 @@ cargo_metadata = "0.15.0" clap = { version = "3.1.5", features = ["cargo", "env"] } log = { version = "0.4.14", features = ["std"] } regex = "1.5.6" -solana-download-utils = { path = "../../download-utils", version = "=1.14.9" } -solana-logger = { path = "../../logger", version = "=1.14.9" } -solana-sdk = { path = "..", version = "=1.14.9" } +solana-download-utils = { path = "../../download-utils", version = "=1.14.10" } +solana-logger = { path = "../../logger", version = "=1.14.10" } +solana-sdk = { path = "..", version = "=1.14.10" } tar = "0.4.38" [dev-dependencies] diff --git a/sdk/cargo-build-sbf/tests/crates/fail/Cargo.toml b/sdk/cargo-build-sbf/tests/crates/fail/Cargo.toml index c06bc6b0a0afb4..ade77309f374f1 100644 --- a/sdk/cargo-build-sbf/tests/crates/fail/Cargo.toml +++ b/sdk/cargo-build-sbf/tests/crates/fail/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "fail" -version = "1.14.9" +version = "1.14.10" description = "Solana SBF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ edition = "2021" publish = false [dependencies] -solana-program = { path = "../../../../program", version = "=1.14.9" } +solana-program = { path = "../../../../program", version = "=1.14.10" } [lib] crate-type = ["cdylib"] diff --git a/sdk/cargo-build-sbf/tests/crates/noop/Cargo.toml b/sdk/cargo-build-sbf/tests/crates/noop/Cargo.toml index 4dead95f001a43..963d3379932186 100644 --- a/sdk/cargo-build-sbf/tests/crates/noop/Cargo.toml +++ b/sdk/cargo-build-sbf/tests/crates/noop/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "noop" -version = "1.14.9" +version = "1.14.10" description = "Solana SBF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ edition = "2021" publish = false [dependencies] -solana-program = { path = "../../../../program", version = "=1.14.9" } +solana-program = { path = "../../../../program", version = "=1.14.10" } [lib] crate-type = ["cdylib"] diff --git a/sdk/cargo-test-bpf/Cargo.toml b/sdk/cargo-test-bpf/Cargo.toml index 71e323e3637b6b..3a17ec390d9626 100644 --- a/sdk/cargo-test-bpf/Cargo.toml +++ b/sdk/cargo-test-bpf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-cargo-test-bpf" -version = "1.14.9" +version = "1.14.10" description = "Execute all unit and integration tests after building with the Solana SBF SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/sdk/cargo-test-sbf/Cargo.toml b/sdk/cargo-test-sbf/Cargo.toml index 0f6acbadd05687..be741e6fdff32e 100644 --- a/sdk/cargo-test-sbf/Cargo.toml +++ b/sdk/cargo-test-sbf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-cargo-test-sbf" -version = "1.14.9" +version = "1.14.10" description = "Execute all unit and integration tests after building with the Solana SBF SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/sdk/gen-headers/Cargo.toml b/sdk/gen-headers/Cargo.toml index d93fbbaee4cfcf..f4856fe75f5feb 100644 --- a/sdk/gen-headers/Cargo.toml +++ b/sdk/gen-headers/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "gen-headers" -version = "1.14.9" +version = "1.14.10" edition = "2021" license = "Apache-2.0" publish = false diff --git a/sdk/macro/Cargo.toml b/sdk/macro/Cargo.toml index 8797e13e1e23ae..4164208288f27f 100644 --- a/sdk/macro/Cargo.toml +++ b/sdk/macro/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-sdk-macro" -version = "1.14.9" +version = "1.14.10" description = "Solana SDK Macro" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/sdk/program/Cargo.toml b/sdk/program/Cargo.toml index f6056aa95720fb..3fff44d688e784 100644 --- a/sdk/program/Cargo.toml +++ b/sdk/program/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-program" -version = "1.14.9" +version = "1.14.10" description = "Solana Program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -31,9 +31,9 @@ serde_derive = "1.0" serde_json = "1.0" sha2 = "0.10.0" sha3 = "0.10.0" -solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.9" } -solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.9" } -solana-sdk-macro = { path = "../macro", version = "=1.14.9" } +solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.10" } +solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.10" } +solana-sdk-macro = { path = "../macro", version = "=1.14.10" } thiserror = "1.0" [target.'cfg(not(target_os = "solana"))'.dependencies] @@ -50,7 +50,7 @@ wasm-bindgen = "0.2" zeroize = { version = "1.3", default-features = true, features = ["zeroize_derive"] } [target.'cfg(not(target_os = "solana"))'.dev-dependencies] -solana-logger = { path = "../../logger", version = "=1.14.9" } +solana-logger = { path = "../../logger", version = "=1.14.10" } [target.'cfg(target_arch = "wasm32")'.dependencies] console_error_panic_hook = "0.1.7" diff --git a/send-transaction-service/Cargo.toml b/send-transaction-service/Cargo.toml index 51d69faf8ad40e..f97f5ee8a2de8d 100644 --- a/send-transaction-service/Cargo.toml +++ b/send-transaction-service/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-send-transaction-service" -version = "1.14.9" +version = "1.14.10" description = "Solana send transaction service" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,14 +12,14 @@ edition = "2021" [dependencies] crossbeam-channel = "0.5" log = "0.4.17" -solana-client = { path = "../client", version = "=1.14.9" } -solana-measure = { path = "../measure", version = "=1.14.9" } -solana-metrics = { path = "../metrics", version = "=1.14.9" } -solana-runtime = { path = "../runtime", version = "=1.14.9" } -solana-sdk = { path = "../sdk", version = "=1.14.9" } +solana-client = { path = "../client", version = "=1.14.10" } +solana-measure = { path = "../measure", version = "=1.14.10" } +solana-metrics = { path = "../metrics", version = "=1.14.10" } +solana-runtime = { path = "../runtime", version = "=1.14.10" } +solana-sdk = { path = "../sdk", version = "=1.14.10" } [dev-dependencies] -solana-logger = { path = "../logger", version = "=1.14.9" } +solana-logger = { path = "../logger", version = "=1.14.10" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/stake-accounts/Cargo.toml b/stake-accounts/Cargo.toml index f3164748259250..6ed155d46b65d8 100644 --- a/stake-accounts/Cargo.toml +++ b/stake-accounts/Cargo.toml @@ -3,7 +3,7 @@ name = "solana-stake-accounts" description = "Blockchain, Rebuilt for Scale" authors = ["Solana Maintainers "] edition = "2021" -version = "1.14.9" +version = "1.14.10" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -11,15 +11,15 @@ documentation = "https://docs.rs/solana-stake-accounts" [dependencies] clap = "2.33.1" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.9" } -solana-cli-config = { path = "../cli-config", version = "=1.14.9" } -solana-client = { path = "../client", version = "=1.14.9" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.9" } -solana-sdk = { path = "../sdk", version = "=1.14.9" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.9" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.10" } +solana-cli-config = { path = "../cli-config", version = "=1.14.10" } +solana-client = { path = "../client", version = "=1.14.10" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.10" } +solana-sdk = { path = "../sdk", version = "=1.14.10" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.10" } [dev-dependencies] -solana-runtime = { path = "../runtime", version = "=1.14.9" } +solana-runtime = { path = "../runtime", version = "=1.14.10" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/storage-bigtable/Cargo.toml b/storage-bigtable/Cargo.toml index 5e649a32f2a203..9e2d3b9d3e6c4e 100644 --- a/storage-bigtable/Cargo.toml +++ b/storage-bigtable/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-storage-bigtable" -version = "1.14.9" +version = "1.14.10" description = "Solana Storage BigTable" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -27,10 +27,10 @@ prost-types = "0.11.0" serde = "1.0.138" serde_derive = "1.0.103" smpl_jwt = "0.7.1" -solana-metrics = { path = "../metrics", version = "=1.14.9" } -solana-sdk = { path = "../sdk", version = "=1.14.9" } -solana-storage-proto = { path = "../storage-proto", version = "=1.14.9" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.9" } +solana-metrics = { path = "../metrics", version = "=1.14.10" } +solana-sdk = { path = "../sdk", version = "=1.14.10" } +solana-storage-proto = { path = "../storage-proto", version = "=1.14.10" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.10" } thiserror = "1.0" tokio = "1" tonic = { version = "0.8.0", features = ["tls", "transport"] } diff --git a/storage-bigtable/build-proto/Cargo.lock b/storage-bigtable/build-proto/Cargo.lock index 277c0262aa6ee9..7f9dee27c1158e 100644 --- a/storage-bigtable/build-proto/Cargo.lock +++ b/storage-bigtable/build-proto/Cargo.lock @@ -219,7 +219,7 @@ dependencies = [ [[package]] name = "proto" -version = "1.14.9" +version = "1.14.10" dependencies = [ "protobuf-src", "tonic-build", diff --git a/storage-bigtable/build-proto/Cargo.toml b/storage-bigtable/build-proto/Cargo.toml index a9a4acd9121964..2cccb1c7d964b7 100644 --- a/storage-bigtable/build-proto/Cargo.toml +++ b/storage-bigtable/build-proto/Cargo.toml @@ -7,7 +7,7 @@ license = "Apache-2.0" name = "proto" publish = false repository = "https://github.com/solana-labs/solana" -version = "1.14.9" +version = "1.14.10" [workspace] diff --git a/storage-proto/Cargo.toml b/storage-proto/Cargo.toml index ee2e168cf982e4..16a3e0c43bf2ef 100644 --- a/storage-proto/Cargo.toml +++ b/storage-proto/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-storage-proto" -version = "1.14.9" +version = "1.14.10" description = "Solana Storage Protobuf Definitions" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,9 +14,9 @@ bincode = "1.3.3" bs58 = "0.4.0" prost = "0.11.0" serde = "1.0.138" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.9" } -solana-sdk = { path = "../sdk", version = "=1.14.9" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.9" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.10" } +solana-sdk = { path = "../sdk", version = "=1.14.10" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.10" } [dev-dependencies] enum-iterator = "0.8.1" diff --git a/streamer/Cargo.toml b/streamer/Cargo.toml index a2f664ddcccbad..0a462d9ebc9182 100644 --- a/streamer/Cargo.toml +++ b/streamer/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-streamer" -version = "1.14.9" +version = "1.14.10" description = "Solana Streamer" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -25,15 +25,15 @@ quinn = "0.8.3" rand = "0.7.0" rcgen = "0.9.2" rustls = { version = "0.20.6", features = ["dangerous_configuration"] } -solana-metrics = { path = "../metrics", version = "=1.14.9" } -solana-perf = { path = "../perf", version = "=1.14.9" } -solana-sdk = { path = "../sdk", version = "=1.14.9" } +solana-metrics = { path = "../metrics", version = "=1.14.10" } +solana-perf = { path = "../perf", version = "=1.14.10" } +solana-sdk = { path = "../sdk", version = "=1.14.10" } thiserror = "1.0" tokio = { version = "1", features = ["full"] } x509-parser = "0.14.0" [dev-dependencies] -solana-logger = { path = "../logger", version = "=1.14.9" } +solana-logger = { path = "../logger", version = "=1.14.10" } [lib] crate-type = ["lib"] diff --git a/sys-tuner/Cargo.toml b/sys-tuner/Cargo.toml index de6692a2804268..19f79bb693c8cb 100644 --- a/sys-tuner/Cargo.toml +++ b/sys-tuner/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-sys-tuner" description = "The solana cluster system tuner daemon" -version = "1.14.9" +version = "1.14.10" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,8 +14,8 @@ publish = true clap = "2.33.1" libc = "0.2.126" log = "0.4.17" -solana-logger = { path = "../logger", version = "=1.14.9" } -solana-version = { path = "../version", version = "=1.14.9" } +solana-logger = { path = "../logger", version = "=1.14.10" } +solana-version = { path = "../version", version = "=1.14.10" } [target."cfg(unix)".dependencies] unix_socket2 = "0.5.4" diff --git a/test-validator/Cargo.toml b/test-validator/Cargo.toml index f8268048307722..12e1fe3b2abb6a 100644 --- a/test-validator/Cargo.toml +++ b/test-validator/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "solana-test-validator" description = "Blockchain, Rebuilt for Scale" -version = "1.14.9" +version = "1.14.10" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-test-validator" readme = "../README.md" @@ -15,19 +15,19 @@ base64 = "0.13.0" log = "0.4.17" serde_derive = "1.0.103" serde_json = "1.0.81" -solana-cli-output = { path = "../cli-output", version = "=1.14.9" } -solana-client = { path = "../client", version = "=1.14.9" } -solana-core = { path = "../core", version = "=1.14.9" } -solana-gossip = { path = "../gossip", version = "=1.14.9" } -solana-ledger = { path = "../ledger", version = "=1.14.9" } -solana-logger = { path = "../logger", version = "=1.14.9" } -solana-net-utils = { path = "../net-utils", version = "=1.14.9" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.9" } -solana-program-test = { path = "../program-test", version = "=1.14.9" } -solana-rpc = { path = "../rpc", version = "=1.14.9" } -solana-runtime = { path = "../runtime", version = "=1.14.9" } -solana-sdk = { path = "../sdk", version = "=1.14.9" } -solana-streamer = { path = "../streamer", version = "=1.14.9" } +solana-cli-output = { path = "../cli-output", version = "=1.14.10" } +solana-client = { path = "../client", version = "=1.14.10" } +solana-core = { path = "../core", version = "=1.14.10" } +solana-gossip = { path = "../gossip", version = "=1.14.10" } +solana-ledger = { path = "../ledger", version = "=1.14.10" } +solana-logger = { path = "../logger", version = "=1.14.10" } +solana-net-utils = { path = "../net-utils", version = "=1.14.10" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.10" } +solana-program-test = { path = "../program-test", version = "=1.14.10" } +solana-rpc = { path = "../rpc", version = "=1.14.10" } +solana-runtime = { path = "../runtime", version = "=1.14.10" } +solana-sdk = { path = "../sdk", version = "=1.14.10" } +solana-streamer = { path = "../streamer", version = "=1.14.10" } tokio = { version = "1", features = ["full"] } [package.metadata.docs.rs] diff --git a/tokens/Cargo.toml b/tokens/Cargo.toml index cdee36895bf969..3988def6dfa7c6 100644 --- a/tokens/Cargo.toml +++ b/tokens/Cargo.toml @@ -3,7 +3,7 @@ name = "solana-tokens" description = "Blockchain, Rebuilt for Scale" authors = ["Solana Maintainers "] edition = "2021" -version = "1.14.9" +version = "1.14.10" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -19,14 +19,14 @@ indexmap = "1.9.1" indicatif = "0.16.2" pickledb = "0.4.1" serde = { version = "1.0", features = ["derive"] } -solana-account-decoder = { path = "../account-decoder", version = "=1.14.9" } -solana-clap-utils = { path = "../clap-utils", version = "=1.14.9" } -solana-cli-config = { path = "../cli-config", version = "=1.14.9" } -solana-client = { path = "../client", version = "=1.14.9" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.9" } -solana-sdk = { path = "../sdk", version = "=1.14.9" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.9" } -solana-version = { path = "../version", version = "=1.14.9" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.10" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.10" } +solana-cli-config = { path = "../cli-config", version = "=1.14.10" } +solana-client = { path = "../client", version = "=1.14.10" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.10" } +solana-sdk = { path = "../sdk", version = "=1.14.10" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.10" } +solana-version = { path = "../version", version = "=1.14.10" } spl-associated-token-account = { version = "=1.1.1" } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } tempfile = "3.3.0" @@ -34,6 +34,6 @@ thiserror = "1.0" [dev-dependencies] bincode = "1.3.3" -solana-logger = { path = "../logger", version = "=1.14.9" } -solana-streamer = { path = "../streamer", version = "=1.14.9" } -solana-test-validator = { path = "../test-validator", version = "=1.14.9" } +solana-logger = { path = "../logger", version = "=1.14.10" } +solana-streamer = { path = "../streamer", version = "=1.14.10" } +solana-test-validator = { path = "../test-validator", version = "=1.14.10" } diff --git a/transaction-dos/Cargo.toml b/transaction-dos/Cargo.toml index 19f8a96650865e..ab9552fc006c00 100644 --- a/transaction-dos/Cargo.toml +++ b/transaction-dos/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-transaction-dos" -version = "1.14.9" +version = "1.14.10" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,23 +14,23 @@ clap = "2.33.1" log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.9" } -solana-cli = { path = "../cli", version = "=1.14.9" } -solana-client = { path = "../client", version = "=1.14.9" } -solana-core = { path = "../core", version = "=1.14.9" } -solana-faucet = { path = "../faucet", version = "=1.14.9" } -solana-gossip = { path = "../gossip", version = "=1.14.9" } -solana-logger = { path = "../logger", version = "=1.14.9" } -solana-measure = { path = "../measure", version = "=1.14.9" } -solana-net-utils = { path = "../net-utils", version = "=1.14.9" } -solana-runtime = { path = "../runtime", version = "=1.14.9" } -solana-sdk = { path = "../sdk", version = "=1.14.9" } -solana-streamer = { path = "../streamer", version = "=1.14.9" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.9" } -solana-version = { path = "../version", version = "=1.14.9" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.10" } +solana-cli = { path = "../cli", version = "=1.14.10" } +solana-client = { path = "../client", version = "=1.14.10" } +solana-core = { path = "../core", version = "=1.14.10" } +solana-faucet = { path = "../faucet", version = "=1.14.10" } +solana-gossip = { path = "../gossip", version = "=1.14.10" } +solana-logger = { path = "../logger", version = "=1.14.10" } +solana-measure = { path = "../measure", version = "=1.14.10" } +solana-net-utils = { path = "../net-utils", version = "=1.14.10" } +solana-runtime = { path = "../runtime", version = "=1.14.10" } +solana-sdk = { path = "../sdk", version = "=1.14.10" } +solana-streamer = { path = "../streamer", version = "=1.14.10" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.10" } +solana-version = { path = "../version", version = "=1.14.10" } [dev-dependencies] -solana-local-cluster = { path = "../local-cluster", version = "=1.14.9" } +solana-local-cluster = { path = "../local-cluster", version = "=1.14.10" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/transaction-status/Cargo.toml b/transaction-status/Cargo.toml index 42ae973b576d98..dc6034242c319d 100644 --- a/transaction-status/Cargo.toml +++ b/transaction-status/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-transaction-status" -version = "1.14.9" +version = "1.14.10" description = "Solana transaction status types" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -20,12 +20,12 @@ log = "0.4.17" serde = "1.0.138" serde_derive = "1.0.103" serde_json = "1.0.81" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.9" } -solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.9" } -solana-measure = { path = "../measure", version = "=1.14.9" } -solana-metrics = { path = "../metrics", version = "=1.14.9" } -solana-sdk = { path = "../sdk", version = "=1.14.9" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.9" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.10" } +solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.10" } +solana-measure = { path = "../measure", version = "=1.14.10" } +solana-metrics = { path = "../metrics", version = "=1.14.10" } +solana-sdk = { path = "../sdk", version = "=1.14.10" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.10" } spl-associated-token-account = { version = "=1.1.1", features = ["no-entrypoint"] } spl-memo = { version = "=3.0.1", features = ["no-entrypoint"] } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } diff --git a/upload-perf/Cargo.toml b/upload-perf/Cargo.toml index 85fa71e1cfc18d..c98069d41ca691 100644 --- a/upload-perf/Cargo.toml +++ b/upload-perf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-upload-perf" -version = "1.14.9" +version = "1.14.10" description = "Metrics Upload Utility" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -11,7 +11,7 @@ publish = false [dependencies] serde_json = "1.0.81" -solana-metrics = { path = "../metrics", version = "=1.14.9" } +solana-metrics = { path = "../metrics", version = "=1.14.10" } [[bin]] name = "solana-upload-perf" diff --git a/validator/Cargo.toml b/validator/Cargo.toml index da16f49a95c1f7..8886a86855f640 100644 --- a/validator/Cargo.toml +++ b/validator/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-validator" description = "Blockchain, Rebuilt for Scale" -version = "1.14.9" +version = "1.14.10" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -28,30 +28,30 @@ num_cpus = "1.13.1" rand = "0.7.0" serde = "1.0.138" serde_json = "1.0.81" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.9" } -solana-cli-config = { path = "../cli-config", version = "=1.14.9" } -solana-client = { path = "../client", version = "=1.14.9" } -solana-core = { path = "../core", version = "=1.14.9" } -solana-download-utils = { path = "../download-utils", version = "=1.14.9" } -solana-entry = { path = "../entry", version = "=1.14.9" } -solana-faucet = { path = "../faucet", version = "=1.14.9" } -solana-genesis-utils = { path = "../genesis-utils", version = "=1.14.9" } -solana-gossip = { path = "../gossip", version = "=1.14.9" } -solana-ledger = { path = "../ledger", version = "=1.14.9" } -solana-logger = { path = "../logger", version = "=1.14.9" } -solana-metrics = { path = "../metrics", version = "=1.14.9" } -solana-net-utils = { path = "../net-utils", version = "=1.14.9" } -solana-perf = { path = "../perf", version = "=1.14.9" } -solana-poh = { path = "../poh", version = "=1.14.9" } -solana-rpc = { path = "../rpc", version = "=1.14.9" } -solana-runtime = { path = "../runtime", version = "=1.14.9" } -solana-sdk = { path = "../sdk", version = "=1.14.9" } -solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.9" } -solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.9" } -solana-streamer = { path = "../streamer", version = "=1.14.9" } -solana-test-validator = { path = "../test-validator", version = "=1.14.9" } -solana-version = { path = "../version", version = "=1.14.9" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.9" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.10" } +solana-cli-config = { path = "../cli-config", version = "=1.14.10" } +solana-client = { path = "../client", version = "=1.14.10" } +solana-core = { path = "../core", version = "=1.14.10" } +solana-download-utils = { path = "../download-utils", version = "=1.14.10" } +solana-entry = { path = "../entry", version = "=1.14.10" } +solana-faucet = { path = "../faucet", version = "=1.14.10" } +solana-genesis-utils = { path = "../genesis-utils", version = "=1.14.10" } +solana-gossip = { path = "../gossip", version = "=1.14.10" } +solana-ledger = { path = "../ledger", version = "=1.14.10" } +solana-logger = { path = "../logger", version = "=1.14.10" } +solana-metrics = { path = "../metrics", version = "=1.14.10" } +solana-net-utils = { path = "../net-utils", version = "=1.14.10" } +solana-perf = { path = "../perf", version = "=1.14.10" } +solana-poh = { path = "../poh", version = "=1.14.10" } +solana-rpc = { path = "../rpc", version = "=1.14.10" } +solana-runtime = { path = "../runtime", version = "=1.14.10" } +solana-sdk = { path = "../sdk", version = "=1.14.10" } +solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.10" } +solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.10" } +solana-streamer = { path = "../streamer", version = "=1.14.10" } +solana-test-validator = { path = "../test-validator", version = "=1.14.10" } +solana-version = { path = "../version", version = "=1.14.10" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.10" } symlink = "0.1.0" [target.'cfg(not(target_env = "msvc"))'.dependencies] diff --git a/version/Cargo.toml b/version/Cargo.toml index 35c806cc289b10..890e85c4166f82 100644 --- a/version/Cargo.toml +++ b/version/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-version" -version = "1.14.9" +version = "1.14.10" description = "Solana Version" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,9 +14,9 @@ log = "0.4.17" semver = "1.0.10" serde = "1.0.138" serde_derive = "1.0.103" -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.9" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.9" } -solana-sdk = { path = "../sdk", version = "=1.14.9" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.10" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.10" } +solana-sdk = { path = "../sdk", version = "=1.14.10" } [lib] name = "solana_version" diff --git a/watchtower/Cargo.toml b/watchtower/Cargo.toml index cde99a59572bf5..dce51d178b8ca3 100644 --- a/watchtower/Cargo.toml +++ b/watchtower/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-watchtower" description = "Blockchain, Rebuilt for Scale" -version = "1.14.9" +version = "1.14.10" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -13,15 +13,15 @@ documentation = "https://docs.rs/solana-watchtower" clap = "2.33.1" humantime = "2.0.1" log = "0.4.17" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.9" } -solana-cli-config = { path = "../cli-config", version = "=1.14.9" } -solana-cli-output = { path = "../cli-output", version = "=1.14.9" } -solana-client = { path = "../client", version = "=1.14.9" } -solana-logger = { path = "../logger", version = "=1.14.9" } -solana-metrics = { path = "../metrics", version = "=1.14.9" } -solana-notifier = { path = "../notifier", version = "=1.14.9" } -solana-sdk = { path = "../sdk", version = "=1.14.9" } -solana-version = { path = "../version", version = "=1.14.9" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.10" } +solana-cli-config = { path = "../cli-config", version = "=1.14.10" } +solana-cli-output = { path = "../cli-output", version = "=1.14.10" } +solana-client = { path = "../client", version = "=1.14.10" } +solana-logger = { path = "../logger", version = "=1.14.10" } +solana-metrics = { path = "../metrics", version = "=1.14.10" } +solana-notifier = { path = "../notifier", version = "=1.14.10" } +solana-sdk = { path = "../sdk", version = "=1.14.10" } +solana-version = { path = "../version", version = "=1.14.10" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/zk-token-sdk/Cargo.toml b/zk-token-sdk/Cargo.toml index 1989d9953329a1..a2fb3b0afa6ec2 100644 --- a/zk-token-sdk/Cargo.toml +++ b/zk-token-sdk/Cargo.toml @@ -3,7 +3,7 @@ name = "solana-zk-token-sdk" description = "Solana Zk Token SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" -version = "1.14.9" +version = "1.14.10" license = "Apache-2.0" edition = "2021" @@ -12,7 +12,7 @@ base64 = "0.13" bytemuck = { version = "1.11.0", features = ["derive"] } num-derive = "0.3" num-traits = "0.2" -solana-program = { path = "../sdk/program", version = "=1.14.9" } +solana-program = { path = "../sdk/program", version = "=1.14.10" } [target.'cfg(not(target_os = "solana"))'.dependencies] aes-gcm-siv = "0.10.3" @@ -29,7 +29,7 @@ rand = "0.7" serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" sha3 = "0.9" -solana-sdk = { path = "../sdk", version = "=1.14.9" } +solana-sdk = { path = "../sdk", version = "=1.14.10" } subtle = "2" thiserror = "1.0" zeroize = { version = "1.3", default-features = false, features = ["zeroize_derive"] } From 35e6de6caa29a986077963280f3ab0af2e26973e Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Wed, 30 Nov 2022 03:46:34 +0000 Subject: [PATCH 237/465] limit repairs to top staked requests in batch (backport #28673) (#28987) limit repairs to top staked requests in batch (#28673) (cherry picked from commit 17ee3349f819a560460a501cc3cc927c39146c61) Co-authored-by: Jeff Biseda --- core/src/serve_repair.rs | 145 +++++++++++++++++++++++---------------- 1 file changed, 86 insertions(+), 59 deletions(-) diff --git a/core/src/serve_repair.rs b/core/src/serve_repair.rs index e519c308a15b64..362463af4e52cb 100644 --- a/core/src/serve_repair.rs +++ b/core/src/serve_repair.rs @@ -32,6 +32,7 @@ use { solana_runtime::bank_forks::BankForks, solana_sdk::{ clock::Slot, + genesis_config::ClusterType, hash::{Hash, HASH_BYTES}, packet::PACKET_DATA_SIZE, pubkey::{Pubkey, PUBKEY_BYTES}, @@ -44,7 +45,8 @@ use { streamer::{PacketBatchReceiver, PacketBatchSender}, }, std::{ - collections::{HashMap, HashSet}, + cmp::Reverse, + collections::HashSet, net::{SocketAddr, UdpSocket}, sync::{ atomic::{AtomicBool, Ordering}, @@ -153,6 +155,7 @@ struct ServeRepairStats { unsigned_requests: usize, dropped_requests_outbound_bandwidth: usize, dropped_requests_load_shed: usize, + dropped_requests_low_stake: usize, total_dropped_response_packets: usize, total_response_packets: usize, total_response_bytes_staked: usize, @@ -168,6 +171,7 @@ struct ServeRepairStats { ancestor_hashes: usize, ping_cache_check_failed: usize, pings_sent: usize, + decode_time_us: u64, err_time_skew: usize, err_malformed: usize, err_sig_verify: usize, @@ -442,10 +446,22 @@ impl ServeRepair { const MAX_REQUESTS_PER_ITERATION: usize = 1024; let mut total_requests = reqs_v[0].len(); + let socket_addr_space = *self.cluster_info.socket_addr_space(); + let root_bank = self.bank_forks.read().unwrap().root_bank(); + let epoch_staked_nodes = root_bank.epoch_staked_nodes(root_bank.epoch()); + let identity_keypair = self.cluster_info.keypair().clone(); + let my_id = identity_keypair.pubkey(); + + let max_buffered_packets = if root_bank.cluster_type() == ClusterType::Testnet { + 2 * MAX_REQUESTS_PER_ITERATION + } else { + MAX_REQUESTS_PER_ITERATION + }; + let mut dropped_requests = 0; while let Ok(more) = requests_receiver.try_recv() { total_requests += more.len(); - if total_requests > MAX_REQUESTS_PER_ITERATION { + if total_requests > max_buffered_packets { dropped_requests += more.len(); } else { reqs_v.push(more); @@ -455,20 +471,64 @@ impl ServeRepair { stats.dropped_requests_load_shed += dropped_requests; stats.total_requests += total_requests; - let root_bank = self.bank_forks.read().unwrap().root_bank(); - let epoch_staked_nodes = root_bank.epoch_staked_nodes(root_bank.epoch()); - for reqs in reqs_v { - self.handle_packets( - ping_cache, - recycler, - blockstore, - reqs, - response_sender, - stats, - data_budget, - &epoch_staked_nodes, - ); + let decode_start = Instant::now(); + let mut decoded_reqs = Vec::default(); + for packet in reqs_v.iter().flatten() { + let request: RepairProtocol = match packet.deserialize_slice(..) { + Ok(request) => request, + Err(_) => { + stats.err_malformed += 1; + continue; + } + }; + + let from_addr = packet.meta.socket_addr(); + if !ContactInfo::is_valid_address(&from_addr, &socket_addr_space) { + stats.err_malformed += 1; + continue; + } + + if request.supports_signature() { + // collect stats for signature verification + Self::verify_signed_packet(&my_id, packet, &request, stats); + } else { + stats.unsigned_requests += 1; + } + + if request.sender() == &my_id { + stats.self_repair += 1; + continue; + } + + let stake = epoch_staked_nodes + .as_ref() + .and_then(|stakes| stakes.get(request.sender())) + .unwrap_or(&0); + if *stake == 0 { + stats.handle_requests_unstaked += 1; + } else { + stats.handle_requests_staked += 1; + } + decoded_reqs.push((request, from_addr, *stake)); } + stats.decode_time_us += decode_start.elapsed().as_micros() as u64; + + if decoded_reqs.len() > MAX_REQUESTS_PER_ITERATION { + stats.dropped_requests_low_stake += decoded_reqs.len() - MAX_REQUESTS_PER_ITERATION; + decoded_reqs.sort_unstable_by_key(|(_, _, stake)| Reverse(*stake)); + decoded_reqs.truncate(MAX_REQUESTS_PER_ITERATION); + } + + self.handle_packets( + ping_cache, + recycler, + blockstore, + decoded_reqs, + response_sender, + stats, + data_budget, + ); + Ok(()) } @@ -496,6 +556,11 @@ impl ServeRepair { stats.dropped_requests_load_shed, i64 ), + ( + "dropped_requests_low_stake", + stats.dropped_requests_low_stake, + i64 + ), ( "total_dropped_response_packets", stats.total_dropped_response_packets, @@ -539,6 +604,7 @@ impl ServeRepair { i64 ), ("pings_sent", stats.pings_sent, i64), + ("decode_time_us", stats.decode_time_us, i64), ("err_time_skew", stats.err_time_skew, i64), ("err_malformed", stats.err_malformed, i64), ("err_sig_verify", stats.err_sig_verify, i64), @@ -709,54 +775,16 @@ impl ServeRepair { ping_cache: &mut PingCache, recycler: &PacketBatchRecycler, blockstore: &Blockstore, - packet_batch: PacketBatch, + requests: Vec<(RepairProtocol, SocketAddr, /*stake*/ u64)>, response_sender: &PacketBatchSender, stats: &mut ServeRepairStats, data_budget: &DataBudget, - epoch_staked_nodes: &Option>>, ) { let identity_keypair = self.cluster_info.keypair().clone(); - let my_id = identity_keypair.pubkey(); - let socket_addr_space = *self.cluster_info.socket_addr_space(); let mut pending_pings = Vec::default(); - // iter over the packets - for (i, packet) in packet_batch.iter().enumerate() { - let request: RepairProtocol = match packet.deserialize_slice(..) { - Ok(request) => request, - Err(_) => { - stats.err_malformed += 1; - continue; - } - }; - - let from_addr = packet.meta.socket_addr(); - if !ContactInfo::is_valid_address(&from_addr, &socket_addr_space) { - stats.err_malformed += 1; - continue; - } - - let staked = epoch_staked_nodes - .as_ref() - .map(|nodes| nodes.contains_key(request.sender())) - .unwrap_or_default(); - match staked { - true => stats.handle_requests_staked += 1, - false => stats.handle_requests_unstaked += 1, - } - - if request.sender() == &my_id { - stats.self_repair += 1; - continue; - } - - if request.supports_signature() { - // collect stats for signature verification - Self::verify_signed_packet(&my_id, packet, &request, stats); - } else { - stats.unsigned_requests += 1; - } - + let requests_len = requests.len(); + for (i, (request, from_addr, stake)) in requests.into_iter().enumerate() { if !matches!(&request, RepairProtocol::Pong(_)) { let (check, ping_pkt) = Self::check_ping_cache(ping_cache, &request, &from_addr, &identity_keypair); @@ -768,7 +796,6 @@ impl ServeRepair { stats.ping_cache_check_failed += 1; } } - stats.processed += 1; let rsp = match Self::handle_repair( recycler, &from_addr, blockstore, request, stats, ping_cache, @@ -780,12 +807,12 @@ impl ServeRepair { let num_response_bytes = rsp.iter().map(|p| p.meta.size).sum(); if data_budget.take(num_response_bytes) && response_sender.send(rsp).is_ok() { stats.total_response_packets += num_response_packets; - match staked { + match stake > 0 { true => stats.total_response_bytes_staked += num_response_bytes, false => stats.total_response_bytes_unstaked += num_response_bytes, } } else { - stats.dropped_requests_outbound_bandwidth += packet_batch.len() - i; + stats.dropped_requests_outbound_bandwidth += requests_len - i; stats.total_dropped_response_packets += num_response_packets; break; } From 1455127ab073cf55e37ce14ca35ba7ad9756e576 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Wed, 30 Nov 2022 06:35:35 +0000 Subject: [PATCH 238/465] Bump spl-ata to v1.1.2 (backport #28979) (#28989) * Bump spl-ata to v1.1.2 (#28979) (cherry picked from commit 3d6eb1675301510407e15059d80eb7e31ca0a22c) # Conflicts: # Cargo.lock # programs/bpf/Cargo.lock # tokens/Cargo.toml # transaction-status/Cargo.toml * Fix conflicts Co-authored-by: Tyera --- Cargo.lock | 34 ++++++++-------------------------- fetch-spl.sh | 2 +- programs/bpf/Cargo.lock | 34 ++++++++-------------------------- tokens/Cargo.toml | 2 +- transaction-status/Cargo.toml | 2 +- 5 files changed, 19 insertions(+), 55 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 9cc76b078abb29..c6f7abc02227c5 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4483,7 +4483,7 @@ dependencies = [ "solana-sdk 1.14.10", "solana-vote-program", "spl-token", - "spl-token-2022 0.5.0", + "spl-token-2022", "thiserror", "zstd", ] @@ -4942,7 +4942,7 @@ dependencies = [ "solana-transaction-status", "solana-version", "solana-vote-program", - "spl-token-2022 0.5.0", + "spl-token-2022", "thiserror", "tokio", "tokio-stream", @@ -5459,7 +5459,7 @@ dependencies = [ "solana-transaction-status", "solana-vote-program", "spl-token", - "spl-token-2022 0.5.0", + "spl-token-2022", "static_assertions", "tempfile", "test-case", @@ -5940,7 +5940,7 @@ dependencies = [ "solana-version", "solana-vote-program", "spl-token", - "spl-token-2022 0.5.0", + "spl-token-2022", "stream-cancel", "symlink", "thiserror", @@ -6422,7 +6422,7 @@ dependencies = [ "spl-associated-token-account", "spl-memo", "spl-token", - "spl-token-2022 0.5.0", + "spl-token-2022", "thiserror", ] @@ -6654,9 +6654,9 @@ dependencies = [ [[package]] name = "spl-associated-token-account" -version = "1.1.1" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16a33ecc83137583902c3e13c02f34151c8b2f2b74120f9c2b3ff841953e083d" +checksum = "fbc000f0fdf1f12f99d77d398137c1751345b18c88258ce0f99b7872cf6c9bd6" dependencies = [ "assert_matches", "borsh", @@ -6664,7 +6664,7 @@ dependencies = [ "num-traits", "solana-program 1.14.8", "spl-token", - "spl-token-2022 0.4.2", + "spl-token-2022", "thiserror", ] @@ -6692,24 +6692,6 @@ dependencies = [ "thiserror", ] -[[package]] -name = "spl-token-2022" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0a97cbf60b91b610c846ccf8eecca96d92a24a19ffbf9fe06cd0c84e76ec45e" -dependencies = [ - "arrayref", - "bytemuck", - "num-derive", - "num-traits", - "num_enum", - "solana-program 1.14.8", - "solana-zk-token-sdk 1.14.8", - "spl-memo", - "spl-token", - "thiserror", -] - [[package]] name = "spl-token-2022" version = "0.5.0" diff --git a/fetch-spl.sh b/fetch-spl.sh index e608b26a658208..3882f536cd108c 100755 --- a/fetch-spl.sh +++ b/fetch-spl.sh @@ -41,7 +41,7 @@ fetch_program() { fetch_program token 3.5.0 TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA BPFLoader2111111111111111111111111111111111 fetch_program memo 1.0.0 Memo1UhkJRfHyvLMcVucJwxXeuD728EqVDDwQDxFMNo BPFLoader1111111111111111111111111111111111 fetch_program memo 3.0.0 MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr BPFLoader2111111111111111111111111111111111 -fetch_program associated-token-account 1.1.1 ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL BPFLoader2111111111111111111111111111111111 +fetch_program associated-token-account 1.1.2 ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL BPFLoader2111111111111111111111111111111111 fetch_program feature-proposal 1.0.0 Feat1YXHhH6t1juaWF74WLcfv4XoNocjXA6sPWHNgAse BPFLoader2111111111111111111111111111111111 echo "${genesis_args[@]}" > spl-genesis-args.sh diff --git a/programs/bpf/Cargo.lock b/programs/bpf/Cargo.lock index aa067f4104008c..518f0e5d0fe8dc 100644 --- a/programs/bpf/Cargo.lock +++ b/programs/bpf/Cargo.lock @@ -4070,7 +4070,7 @@ dependencies = [ "solana-sdk 1.14.10", "solana-vote-program", "spl-token", - "spl-token-2022 0.5.0", + "spl-token-2022", "thiserror", "zstd", ] @@ -4667,7 +4667,7 @@ dependencies = [ "solana-transaction-status", "solana-version", "solana-vote-program", - "spl-token-2022 0.5.0", + "spl-token-2022", "thiserror", "tokio", "tokio-stream", @@ -5029,7 +5029,7 @@ dependencies = [ "solana-transaction-status", "solana-vote-program", "spl-token", - "spl-token-2022 0.5.0", + "spl-token-2022", "static_assertions", "tempfile", "thiserror", @@ -5362,7 +5362,7 @@ dependencies = [ "solana-version", "solana-vote-program", "spl-token", - "spl-token-2022 0.5.0", + "spl-token-2022", "stream-cancel", "thiserror", "tokio", @@ -5721,7 +5721,7 @@ dependencies = [ "spl-associated-token-account", "spl-memo", "spl-token", - "spl-token-2022 0.5.0", + "spl-token-2022", "thiserror", ] @@ -5924,9 +5924,9 @@ dependencies = [ [[package]] name = "spl-associated-token-account" -version = "1.1.1" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16a33ecc83137583902c3e13c02f34151c8b2f2b74120f9c2b3ff841953e083d" +checksum = "fbc000f0fdf1f12f99d77d398137c1751345b18c88258ce0f99b7872cf6c9bd6" dependencies = [ "assert_matches", "borsh", @@ -5934,7 +5934,7 @@ dependencies = [ "num-traits", "solana-program 1.14.8", "spl-token", - "spl-token-2022 0.4.2", + "spl-token-2022", "thiserror", ] @@ -5962,24 +5962,6 @@ dependencies = [ "thiserror", ] -[[package]] -name = "spl-token-2022" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0a97cbf60b91b610c846ccf8eecca96d92a24a19ffbf9fe06cd0c84e76ec45e" -dependencies = [ - "arrayref", - "bytemuck", - "num-derive", - "num-traits", - "num_enum", - "solana-program 1.14.8", - "solana-zk-token-sdk 1.14.8", - "spl-memo", - "spl-token", - "thiserror", -] - [[package]] name = "spl-token-2022" version = "0.5.0" diff --git a/tokens/Cargo.toml b/tokens/Cargo.toml index 3988def6dfa7c6..e895174400a464 100644 --- a/tokens/Cargo.toml +++ b/tokens/Cargo.toml @@ -27,7 +27,7 @@ solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.10" } solana-sdk = { path = "../sdk", version = "=1.14.10" } solana-transaction-status = { path = "../transaction-status", version = "=1.14.10" } solana-version = { path = "../version", version = "=1.14.10" } -spl-associated-token-account = { version = "=1.1.1" } +spl-associated-token-account = { version = "=1.1.2" } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } tempfile = "3.3.0" thiserror = "1.0" diff --git a/transaction-status/Cargo.toml b/transaction-status/Cargo.toml index dc6034242c319d..c8cc3fcd47b90b 100644 --- a/transaction-status/Cargo.toml +++ b/transaction-status/Cargo.toml @@ -26,7 +26,7 @@ solana-measure = { path = "../measure", version = "=1.14.10" } solana-metrics = { path = "../metrics", version = "=1.14.10" } solana-sdk = { path = "../sdk", version = "=1.14.10" } solana-vote-program = { path = "../programs/vote", version = "=1.14.10" } -spl-associated-token-account = { version = "=1.1.1", features = ["no-entrypoint"] } +spl-associated-token-account = { version = "=1.1.2", features = ["no-entrypoint"] } spl-memo = { version = "=3.0.1", features = ["no-entrypoint"] } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } spl-token-2022 = { version = "=0.5.0", features = ["no-entrypoint"] } From 6c36344ddb9b55198535c41258ddaab1b8f35f52 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Thu, 1 Dec 2022 21:02:32 +0100 Subject: [PATCH 239/465] Adjusts docs about changing the data, size and balance of accounts. (backport #29007) (#29013) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Adjusts docs about changing the data, size and balance of accounts. (#29007) (cherry picked from commit 73e55a184b89c6023d2aad5ba1c3c9f61a918351) Co-authored-by: Alexander Meißner --- docs/src/developing/programming-model/accounts.md | 4 +++- docs/src/developing/programming-model/runtime.md | 12 +++++++++--- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/docs/src/developing/programming-model/accounts.md b/docs/src/developing/programming-model/accounts.md index 67aa96ad0105eb..9fda255643c105 100644 --- a/docs/src/developing/programming-model/accounts.md +++ b/docs/src/developing/programming-model/accounts.md @@ -58,7 +58,9 @@ possible to upload a totally new program to an existing program address. To create an account, a client generates a _keypair_ and registers its public key using the `SystemProgram::CreateAccount` instruction with a fixed storage size in bytes preallocated. -The current maximum size of an account's data is 10 megabytes. +The current maximum size of an account's data is 10 MiB, which can be changed +(increased or decreased) at a rate over all accounts of 20 MiB per transaction, +and the size can be increased by 10 KiB per account and per instruction. An account address can be any arbitrary 256 bit value, and there are mechanisms for advanced users to create derived addresses diff --git a/docs/src/developing/programming-model/runtime.md b/docs/src/developing/programming-model/runtime.md index ac8284b723d92e..5bb242f0ab219c 100644 --- a/docs/src/developing/programming-model/runtime.md +++ b/docs/src/developing/programming-model/runtime.md @@ -35,14 +35,20 @@ The policy is as follows: - And only if the data is zero-initialized or empty. - An account not assigned to the program cannot have its balance decrease. - The balance of read-only and executable accounts may not change. -- Only the system program can change the size of the data and only if the system - program owns the account. -- Only the owner may change account data. +- Only the owner may change account size and data. - And if the account is writable. - And if the account is not executable. - Executable is one-way (false->true) and only the account owner may set it. - No one can make modifications to the rent_epoch associated with this account. +## Balancing the balances + +Before and after each instruction, the sum of all account balances must stay the same. +E.g. if one account's balance is increased, another's must be decreased by the same ammount. +Because the runtime can not see changes to accounts which were not passed to it, +all accounts for which the balances were modified must be passed, +even if they are not needed in the called instruction. + ## Compute Budget To prevent abuse of computational resources, each transaction is allocated a From c7305490a22df5ce480f8a0dad652a36d9001fab Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Thu, 1 Dec 2022 21:00:44 +0000 Subject: [PATCH 240/465] Use estimated current slot in tpu client (backport #28997) (#29016) Use estimated current slot in tpu client (#28997) (cherry picked from commit 07d21d41144b47b68c8de27555dc48b11043f112) Co-authored-by: Pankaj Garg --- client/src/tpu_client.rs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/client/src/tpu_client.rs b/client/src/tpu_client.rs index f47c29e609c5aa..acb52ceed6a58c 100644 --- a/client/src/tpu_client.rs +++ b/client/src/tpu_client.rs @@ -408,11 +408,15 @@ impl LeaderTpuCache { // Get the TPU sockets for the current leader and upcoming leaders according to fanout size pub(crate) fn get_leader_sockets( &self, - current_slot: Slot, + estimated_current_slot: Slot, fanout_slots: u64, ) -> Vec { let mut leader_set = HashSet::new(); let mut leader_sockets = Vec::new(); + // `first_slot` might have been advanced since caller last read the `estimated_current_slot` + // value. Take the greater of the two values to ensure we are reading from the latest + // leader schedule. + let current_slot = std::cmp::max(estimated_current_slot, self.first_slot); for leader_slot in current_slot..current_slot + fanout_slots { if let Some(leader) = self.get_slot_leader(leader_slot) { if let Some(tpu_socket) = self.leader_tpu_map.get(leader) { From dcc39587e3dd7f53328b3223559f189676669857 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Thu, 1 Dec 2022 16:17:38 -0700 Subject: [PATCH 241/465] Update filter docs, v1.11 -> v1.14 (backport #29017) (#29028) Update filter docs, v1.11 -> v1.14 (#29017) v1.11 -> v1.14 (cherry picked from commit 28d8b072c99959d44b7cea8eeaf27120db0cb193) Co-authored-by: Tyera --- docs/src/developing/clients/jsonrpc-api.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/src/developing/clients/jsonrpc-api.md b/docs/src/developing/clients/jsonrpc-api.md index 5fa34416923f9e..852d7d618369d6 100644 --- a/docs/src/developing/clients/jsonrpc-api.md +++ b/docs/src/developing/clients/jsonrpc-api.md @@ -1949,7 +1949,7 @@ Returns all accounts owned by the provided program Pubkey - `offset: ` - offset into program account data to start comparison - `bytes: ` - data to match, as encoded string - `encoding: ` - encoding for filter `bytes` data, either "base58" or "base64". Data is limited in size to 128 or fewer decoded bytes. - **NEW: This field, and base64 support generally, is only available in solana-core v1.11.2 or newer. Please omit when querying nodes on earlier versions** + **NEW: This field, and base64 support generally, is only available in solana-core v1.14.0 or newer. Please omit when querying nodes on earlier versions** - `dataSize: ` - compares the program account data length with the provided data size From 2260239ea2e6cf6b1007e4e686b45bfad55610b0 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Thu, 1 Dec 2022 23:26:54 +0000 Subject: [PATCH 242/465] Change SlotMeta is_connected bool to bitflags (backport #29001) (#29021) * Change SlotMeta is_connected bool to bitflags (#29001) We currently use the is_connected field to be able to signal to ReplayStage that a slot has replayable updates. It was discovered that this functionality is effectively broken, and that is_connected is never true. In order to convey this information to ReplayStage more effectively, we need extra state information so this PR changes the existing bool to bitflags with two bits. From a compatibility standpoint, the is_connected bool was already occupying one byte in the serialized SlotMeta in blockstore. Thus, the change from a bool to bitflags still "fits" in that one byte allotment. In consideration of a case where a client may wish to downgrade software and use the same ledger, deserializing the bitflags into a bool could fail if the new bit is set. As such, this PR introduces the second bit field, but does not set it anywhere. Once clusters have mass adopted a software version with this PR, a subsequent change to actually set and use the new field can be introduced. (cherry picked from commit 01cd55a27a7dadd971ac3b2c789985add991d3be) # Conflicts: # ledger/src/blockstore.rs * Resolve auto-merge failures Co-authored-by: steviez --- ledger/src/blockstore.rs | 36 ++++----- ledger/src/blockstore_meta.rs | 133 +++++++++++++++++++++++++++++++++- 2 files changed, 148 insertions(+), 21 deletions(-) diff --git a/ledger/src/blockstore.rs b/ledger/src/blockstore.rs index be19c2a3cdf57b..63e494863b60a1 100644 --- a/ledger/src/blockstore.rs +++ b/ledger/src/blockstore.rs @@ -3733,13 +3733,13 @@ fn handle_chaining_for_slot( // connected to trunk of the ledger let should_propagate_is_connected = is_newly_completed_slot(&RefCell::borrow(meta), meta_backup) - && RefCell::borrow(meta).is_connected; + && RefCell::borrow(meta).is_connected(); if should_propagate_is_connected { // slot_function returns a boolean indicating whether to explore the children // of the input slot let slot_function = |slot: &mut SlotMeta| { - slot.is_connected = true; + slot.set_connected(); // We don't want to set the is_connected flag on the children of non-full // slots @@ -3819,7 +3819,9 @@ fn chain_new_slot_to_prev_slot( current_slot_meta: &mut SlotMeta, ) { prev_slot_meta.next_slots.push(current_slot); - current_slot_meta.is_connected = prev_slot_meta.is_connected && prev_slot_meta.is_full(); + if prev_slot_meta.is_connected() && prev_slot_meta.is_full() { + current_slot_meta.set_connected(); + } } fn is_newly_completed_slot(slot_meta: &SlotMeta, backup_slot_meta: &Option) -> bool { @@ -3833,7 +3835,7 @@ fn slot_has_updates(slot_meta: &SlotMeta, slot_meta_backup: &Option) - // from block 0, which is true iff: // 1) The block with index prev_block_index is itself part of the trunk of consecutive blocks // starting from block 0, - slot_meta.is_connected && + slot_meta.is_connected() && // AND either: // 1) The slot didn't exist in the database before, and now we have a consecutive // block for that slot @@ -4790,7 +4792,7 @@ pub mod tests { assert_eq!(meta.parent_slot, Some(0)); assert_eq!(meta.last_index, Some(num_shreds - 1)); assert!(meta.next_slots.is_empty()); - assert!(meta.is_connected); + assert!(meta.is_connected()); } #[test] @@ -5313,7 +5315,7 @@ pub mod tests { let s1 = blockstore.meta(1).unwrap().unwrap(); assert!(s1.next_slots.is_empty()); // Slot 1 is not trunk because slot 0 hasn't been inserted yet - assert!(!s1.is_connected); + assert!(!s1.is_connected()); assert_eq!(s1.parent_slot, Some(0)); assert_eq!(s1.last_index, Some(shreds_per_slot as u64 - 1)); @@ -5325,7 +5327,7 @@ pub mod tests { let s2 = blockstore.meta(2).unwrap().unwrap(); assert!(s2.next_slots.is_empty()); // Slot 2 is not trunk because slot 0 hasn't been inserted yet - assert!(!s2.is_connected); + assert!(!s2.is_connected()); assert_eq!(s2.parent_slot, Some(1)); assert_eq!(s2.last_index, Some(shreds_per_slot as u64 - 1)); @@ -5333,7 +5335,7 @@ pub mod tests { // but still isn't part of the trunk let s1 = blockstore.meta(1).unwrap().unwrap(); assert_eq!(s1.next_slots, vec![2]); - assert!(!s1.is_connected); + assert!(!s1.is_connected()); assert_eq!(s1.parent_slot, Some(0)); assert_eq!(s1.last_index, Some(shreds_per_slot as u64 - 1)); @@ -5352,7 +5354,7 @@ pub mod tests { assert_eq!(s.parent_slot, Some(i - 1)); } assert_eq!(s.last_index, Some(shreds_per_slot as u64 - 1)); - assert!(s.is_connected); + assert!(s.is_connected()); } } @@ -5411,9 +5413,9 @@ pub mod tests { } if i == 0 { - assert!(s.is_connected); + assert!(s.is_connected()); } else { - assert!(!s.is_connected); + assert!(!s.is_connected()); } } @@ -5438,7 +5440,7 @@ pub mod tests { assert_eq!(s.parent_slot, Some(i - 1)); } assert_eq!(s.last_index, Some(shreds_per_slot as u64 - 1)); - assert!(s.is_connected); + assert!(s.is_connected()); } } @@ -5490,9 +5492,9 @@ pub mod tests { // Other than slot 0, no slots should be part of the trunk if i != 0 { - assert!(!s.is_connected); + assert!(!s.is_connected()); } else { - assert!(s.is_connected); + assert!(s.is_connected()); } } @@ -5511,9 +5513,9 @@ pub mod tests { assert!(s.next_slots.is_empty()); } if i <= slot_index as u64 + 3 { - assert!(s.is_connected); + assert!(s.is_connected()); } else { - assert!(!s.is_connected); + assert!(!s.is_connected()); } if i == 0 { @@ -5593,7 +5595,7 @@ pub mod tests { let slot_meta = blockstore.meta(slot).unwrap().unwrap(); assert_eq!(slot_meta.consumed, entries_per_slot); assert_eq!(slot_meta.received, entries_per_slot); - assert!(slot_meta.is_connected); + assert!(slot_meta.is_connected()); let slot_parent = { if slot == 0 { 0 diff --git a/ledger/src/blockstore_meta.rs b/ledger/src/blockstore_meta.rs index 65101fe98348ba..b19b627c520d4d 100644 --- a/ledger/src/blockstore_meta.rs +++ b/ledger/src/blockstore_meta.rs @@ -1,5 +1,6 @@ use { crate::shred::{Shred, ShredType}, + bitflags::bitflags, serde::{Deserialize, Deserializer, Serialize, Serializer}, solana_sdk::{ clock::{Slot, UnixTimestamp}, @@ -11,6 +12,43 @@ use { }, }; +bitflags! { + #[derive(Deserialize, Serialize)] + /// Flags to indicate whether a slot is a descendant of a slot on the main fork + pub struct ConnectedFlags:u8 { + // A slot S should be considered to be connected if: + // 1) S is a rooted slot itself OR + // 2) S's parent is connected AND S is full (S's complete block present) + // + // 1) is a straightfoward case, roots are finalized blocks on the main fork + // so by definition, they are connected. All roots are connected, but not + // all connected slots are (or will become) roots. + // + // Based on the criteria stated in 2), S is connected iff it has a series + // of ancestors (that are each connected) that form a chain back to + // some root slot. + // + // A ledger that is updating with a cluster will have either begun at + // genesis or at at some snapshot slot. + // - Genesis is obviously a special case, and slot 0's parent is deemed + // to be connected in order to kick off the induction + // - Snapshots are taken at rooted slots, and as such, the snapshot slot + // should be marked as connected so that a connected chain can start + // + // CONNECTED is explicitly the first bit to ensure backwards compatibility + // with the boolean field that ConnectedFlags replaced in SlotMeta. + const CONNECTED = 0b0000_0001; + // PARENT_CONNECTED IS INTENTIIONALLY UNUSED FOR NOW + const PARENT_CONNECTED = 0b1000_0000; + } +} + +impl Default for ConnectedFlags { + fn default() -> Self { + ConnectedFlags::empty() + } +} + #[derive(Clone, Debug, Default, Deserialize, Serialize, Eq, PartialEq)] // The Meta column family pub struct SlotMeta { @@ -37,9 +75,8 @@ pub struct SlotMeta { // The list of slots, each of which contains a block that derives // from this one. pub next_slots: Vec, - // True if this slot is full (consumed == last_index + 1) and if every - // slot that is a parent of this slot is also connected. - pub is_connected: bool, + // Connected status flags of this slot + pub connected_flags: ConnectedFlags, // Shreds indices which are marked data complete. pub completed_data_indexes: BTreeSet, } @@ -214,6 +251,14 @@ impl SlotMeta { Some(self.consumed) == self.last_index.map(|ix| ix + 1) } + pub fn is_connected(&self) -> bool { + self.connected_flags.contains(ConnectedFlags::CONNECTED) + } + + pub fn set_connected(&mut self) { + self.connected_flags.set(ConnectedFlags::CONNECTED, true); + } + /// Dangerous. Currently only needed for a local-cluster test pub fn unset_parent(&mut self) { self.parent_slot = None; @@ -225,10 +270,17 @@ impl SlotMeta { } pub(crate) fn new(slot: Slot, parent_slot: Option) -> Self { + let connected_flags = if slot == 0 { + // Slot 0 is the start, mark it as having its' parent connected + // such that slot 0 becoming full will be updated as connected + ConnectedFlags::CONNECTED + } else { + ConnectedFlags::default() + }; SlotMeta { slot, parent_slot, - is_connected: slot == 0, + connected_flags, ..SlotMeta::default() } } @@ -426,6 +478,79 @@ mod test { } } + #[test] + fn test_connected_flags_compatibility() { + // Define a couple structs with bool and ConnectedFlags to illustrate + // that that ConnectedFlags can be deserialized into a bool if the + // PARENT_CONNECTED bit is NOT set + #[derive(Debug, Deserialize, PartialEq, Serialize)] + struct WithBool { + slot: Slot, + connected: bool, + } + #[derive(Debug, Deserialize, PartialEq, Serialize)] + struct WithFlags { + slot: Slot, + connected: ConnectedFlags, + } + + let slot = 3; + let mut with_bool = WithBool { + slot, + connected: false, + }; + let mut with_flags = WithFlags { + slot, + connected: ConnectedFlags::default(), + }; + + // Confirm that serialized byte arrays are same length + assert_eq!( + bincode::serialized_size(&with_bool).unwrap(), + bincode::serialized_size(&with_flags).unwrap() + ); + + // Confirm that connected=false equivalent to ConnectedFlags::default() + assert_eq!( + bincode::serialize(&with_bool).unwrap(), + bincode::serialize(&with_flags).unwrap() + ); + + // Set connected in WithBool and confirm inequality + with_bool.connected = true; + assert_ne!( + bincode::serialize(&with_bool).unwrap(), + bincode::serialize(&with_flags).unwrap() + ); + + // Set connected in WithFlags and confirm equality regained + with_flags.connected.set(ConnectedFlags::CONNECTED, true); + assert_eq!( + bincode::serialize(&with_bool).unwrap(), + bincode::serialize(&with_flags).unwrap() + ); + + // Dserializing WithBool into WithFlags succeeds + assert_eq!( + with_flags, + bincode::deserialize::(&bincode::serialize(&with_bool).unwrap()).unwrap() + ); + + // Deserializing WithFlags into WithBool succeeds + assert_eq!( + with_bool, + bincode::deserialize::(&bincode::serialize(&with_flags).unwrap()).unwrap() + ); + + // Deserializing WithFlags with extra bit set into WithBool fails + with_flags + .connected + .set(ConnectedFlags::PARENT_CONNECTED, true); + assert!( + bincode::deserialize::(&bincode::serialize(&with_flags).unwrap()).is_err() + ); + } + #[test] fn test_clear_unconfirmed_slot() { let mut slot_meta = SlotMeta::new_orphan(5); From a2badfd9747705ff5ac987112822a9076ebd0acd Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Fri, 2 Dec 2022 00:52:13 +0000 Subject: [PATCH 243/465] [zk-token-sdk] Update docs for encryption in zk-token-sdk (backport #28760) (#29024) [zk-token-sdk] Update docs for encryption in zk-token-sdk (#28760) clean up docs for encryption (cherry picked from commit 636baaf494bf9b34f4e1d16e720e4b341af60a0a) Co-authored-by: samkim-crypto --- .../src/encryption/auth_encryption.rs | 7 +- zk-token-sdk/src/encryption/discrete_log.rs | 6 +- zk-token-sdk/src/encryption/elgamal.rs | 90 ++++++++++--------- zk-token-sdk/src/encryption/pedersen.rs | 21 +++-- 4 files changed, 70 insertions(+), 54 deletions(-) diff --git a/zk-token-sdk/src/encryption/auth_encryption.rs b/zk-token-sdk/src/encryption/auth_encryption.rs index 86fa7376904878..50a72230453c64 100644 --- a/zk-token-sdk/src/encryption/auth_encryption.rs +++ b/zk-token-sdk/src/encryption/auth_encryption.rs @@ -1,3 +1,6 @@ +//! Authenticated encryption implementation. +//! +//! This module is a simple wrapper of the `Aes128GcmSiv` implementation. #[cfg(not(target_os = "solana"))] use { aes_gcm_siv::{ @@ -92,8 +95,8 @@ impl AeKey { } } -/// For the purpose of encrypting balances for ZK-Token accounts, the nonce and ciphertext sizes -/// should always be fixed. +/// For the purpose of encrypting balances for the spl token accounts, the nonce and ciphertext +/// sizes should always be fixed. pub type Nonce = [u8; 12]; pub type Ciphertext = [u8; 24]; diff --git a/zk-token-sdk/src/encryption/discrete_log.rs b/zk-token-sdk/src/encryption/discrete_log.rs index e152dfe8b35558..355273d573120f 100644 --- a/zk-token-sdk/src/encryption/discrete_log.rs +++ b/zk-token-sdk/src/encryption/discrete_log.rs @@ -127,7 +127,7 @@ impl DiscreteLog { } /// Solves the discrete log problem under the assumption that the solution - /// is a 32-bit number. + /// is a positive 32-bit number. pub fn decode_u32(self) -> Option { let mut starting_point = self.target; let handles = (0..self.num_threads) @@ -144,7 +144,6 @@ impl DiscreteLog { self.range_bound, self.compression_batch_size, ) - // Self::decode_range(ristretto_iterator, self.range_bound) }); starting_point -= G; @@ -174,6 +173,7 @@ impl DiscreteLog { .take(range_bound) .chunks(compression_batch_size) { + // batch compression currently errors if any point in the batch is the identity point let (batch_points, batch_indices): (Vec<_>, Vec<_>) = batch .filter(|(point, index)| { if point.is_identity() { @@ -199,7 +199,7 @@ impl DiscreteLog { } } -/// HashableRistretto iterator. +/// Hashable Ristretto iterator. /// /// Given an initial point X and a stepping point P, the iterator iterates through /// X + 0*P, X + 1*P, X + 2*P, X + 3*P, ... diff --git a/zk-token-sdk/src/encryption/elgamal.rs b/zk-token-sdk/src/encryption/elgamal.rs index 928844e3f1ac83..cb312faa4df94a 100644 --- a/zk-token-sdk/src/encryption/elgamal.rs +++ b/zk-token-sdk/src/encryption/elgamal.rs @@ -10,8 +10,8 @@ //! directly as a Pedersen commitment. Therefore, proof systems that are designed specifically for //! Pedersen commitments can be used on the twisted ElGamal ciphertexts. //! -//! As the messages are encrypted as scalar elements (a.k.a. in the "exponent"), the encryption -//! scheme requires solving discrete log to recover the original plaintext. +//! As the messages are encrypted as scalar elements (a.k.a. in the "exponent"), one must solve the +//! discrete log to recover the originally encrypted value. use { crate::encryption::{ @@ -57,7 +57,7 @@ impl ElGamal { #[cfg(not(target_os = "solana"))] #[allow(non_snake_case)] fn keygen() -> ElGamalKeypair { - // secret scalar should be zero with negligible probability + // secret scalar should be non-zero except with negligible probability let mut s = Scalar::random(&mut OsRng); let keypair = Self::keygen_with_scalar(&s); @@ -66,6 +66,8 @@ impl ElGamal { } /// Generates an ElGamal keypair from a scalar input that determines the ElGamal private key. + /// + /// This function panics if the input scalar is zero, which is not a valid key. #[cfg(not(target_os = "solana"))] #[allow(non_snake_case)] fn keygen_with_scalar(s: &Scalar) -> ElGamalKeypair { @@ -79,7 +81,7 @@ impl ElGamal { } } - /// On input an ElGamal public key and a mesage to be encrypted, the function returns a + /// On input an ElGamal public key and an amount to be encrypted, the function returns a /// corresponding ElGamal ciphertext. /// /// This function is randomized. It internally samples a scalar element using `OsRng`. @@ -91,8 +93,8 @@ impl ElGamal { ElGamalCiphertext { commitment, handle } } - /// On input a public key, message, and Pedersen opening, the function - /// returns the corresponding ElGamal ciphertext. + /// On input a public key, amount, and Pedersen opening, the function returns the corresponding + /// ElGamal ciphertext. #[cfg(not(target_os = "solana"))] fn encrypt_with>( amount: T, @@ -105,7 +107,7 @@ impl ElGamal { ElGamalCiphertext { commitment, handle } } - /// On input a message, the function returns a twisted ElGamal ciphertext where the associated + /// On input an amount, the function returns a twisted ElGamal ciphertext where the associated /// Pedersen opening is always zero. Since the opening is zero, any twisted ElGamal ciphertext /// of this form is a valid ciphertext under any ElGamal public key. #[cfg(not(target_os = "solana"))] @@ -116,10 +118,11 @@ impl ElGamal { ElGamalCiphertext { commitment, handle } } - /// On input a secret key and a ciphertext, the function returns the decrypted message. + /// On input a secret key and a ciphertext, the function returns the discrete log encoding of + /// original amount. /// /// The output of this function is of type `DiscreteLog`. To recover, the originally encrypted - /// message, use `DiscreteLog::decode`. + /// amount, use `DiscreteLog::decode`. #[cfg(not(target_os = "solana"))] fn decrypt(secret: &ElGamalSecretKey, ciphertext: &ElGamalCiphertext) -> DiscreteLog { DiscreteLog::new( @@ -128,8 +131,11 @@ impl ElGamal { ) } - /// On input a secret key and a ciphertext, the function returns the decrypted message - /// interpretted as type `u32`. + /// On input a secret key and a ciphertext, the function returns the decrypted amount + /// interpretted as a positive 32-bit number (but still of type `u64`). + /// + /// If the originally encrypted amount is not a positive 32-bit number, then the function + /// returns `None`. #[cfg(not(target_os = "solana"))] fn decrypt_u32(secret: &ElGamalSecretKey, ciphertext: &ElGamalCiphertext) -> Option { let discrete_log_instance = Self::decrypt(secret, ciphertext); @@ -149,32 +155,26 @@ pub struct ElGamalKeypair { } impl ElGamalKeypair { - /// Deterministically derives an ElGamal keypair from an Ed25519 signing key and a Solana address. + /// Deterministically derives an ElGamal keypair from an Ed25519 signing key and a Solana + /// address. + /// + /// This function exists for applications where a user may not wish to maintin a Solana + /// (Ed25519) keypair and an ElGamal keypair separately. A user may wish to solely maintain the + /// Solana keypair and then derive the ElGamal keypair on-the-fly whenever + /// encryption/decryption is needed. + /// + /// For the spl token-2022 confidential extension application, the ElGamal encryption public + /// key is specified in a token account address. A natural way to derive an ElGamal keypair is + /// then to define it from the hash of a Solana keypair and a Solana address. However, for + /// general hardware wallets, the signing key is not exposed in the API. Therefore, this + /// function uses a signer to sign a pre-specified message with respect to a Solana address. + /// The resulting signature is then hashed to derive an ElGamal keypair. #[cfg(not(target_os = "solana"))] #[allow(non_snake_case)] pub fn new(signer: &dyn Signer, address: &Pubkey) -> Result { - let message = Message::new( - &[Instruction::new_with_bytes( - *address, - b"ElGamalSecretKey", - vec![], - )], - Some(&signer.try_pubkey()?), - ); - let signature = signer.try_sign_message(&message.serialize())?; - - // Some `Signer` implementations return the default signature, which is not suitable for - // use as key material - if bool::from(signature.as_ref().ct_eq(Signature::default().as_ref())) { - return Err(SignerError::Custom("Rejecting default signature".into())); - } - - let mut scalar = Scalar::hash_from_bytes::(signature.as_ref()); - let keypair = ElGamal::keygen_with_scalar(&scalar); - - // TODO: zeroize signature? - scalar.zeroize(); - Ok(keypair) + let secret = ElGamalSecretKey::new(signer, address)?; + let public = ElGamalPubkey::new(&secret); + Ok(ElGamalKeypair { public, secret }) } /// Generates the public and secret keys for ElGamal encryption. @@ -328,6 +328,8 @@ pub struct ElGamalSecretKey(Scalar); impl ElGamalSecretKey { /// Deterministically derives an ElGamal keypair from an Ed25519 signing key and a Solana /// address. + /// + /// See `ElGamalKeypair::new` for more context on the key derivation. pub fn new(signer: &dyn Signer, address: &Pubkey) -> Result { let message = Message::new( &[Instruction::new_with_bytes( @@ -341,13 +343,13 @@ impl ElGamalSecretKey { // Some `Signer` implementations return the default signature, which is not suitable for // use as key material - if signature == Signature::default() { - Err(SignerError::Custom("Rejecting default signature".into())) - } else { - Ok(ElGamalSecretKey(Scalar::hash_from_bytes::( - signature.as_ref(), - ))) + if bool::from(signature.as_ref().ct_eq(Signature::default().as_ref())) { + return Err(SignerError::Custom("Rejecting default signatures".into())); } + + Ok(ElGamalSecretKey(Scalar::hash_from_bytes::( + signature.as_ref(), + ))) } /// Randomly samples an ElGamal secret key. @@ -454,12 +456,16 @@ impl ElGamalCiphertext { /// Decrypts the ciphertext using an ElGamal secret key. /// /// The output of this function is of type `DiscreteLog`. To recover, the originally encrypted - /// message, use `DiscreteLog::decode`. + /// amount, use `DiscreteLog::decode`. pub fn decrypt(&self, secret: &ElGamalSecretKey) -> DiscreteLog { ElGamal::decrypt(secret, self) } - /// Decrypts the ciphertext using an ElGamal secret key interpretting the message as type `u32`. + /// Decrypts the ciphertext using an ElGamal secret key assuming that the message is a positive + /// 32-bit number. + /// + /// If the originally encrypted amount is not a positive 32-bit number, then the function + /// returns `None`. pub fn decrypt_u32(&self, secret: &ElGamalSecretKey) -> Option { ElGamal::decrypt_u32(secret, self) } diff --git a/zk-token-sdk/src/encryption/pedersen.rs b/zk-token-sdk/src/encryption/pedersen.rs index bfa9d28018d770..6de1d4016a9933 100644 --- a/zk-token-sdk/src/encryption/pedersen.rs +++ b/zk-token-sdk/src/encryption/pedersen.rs @@ -28,21 +28,21 @@ lazy_static::lazy_static! { /// Algorithm handle for the Pedersen commitment scheme. pub struct Pedersen; impl Pedersen { - /// On input a message, the function returns a Pedersen commitment of the message and the - /// corresponding opening. + /// On input a message (numeric amount), the function returns a Pedersen commitment of the + /// message and the corresponding opening. /// /// This function is randomized. It internally samples a Pedersen opening using `OsRng`. #[cfg(not(target_os = "solana"))] #[allow(clippy::new_ret_no_self)] - pub fn new>(message: T) -> (PedersenCommitment, PedersenOpening) { + pub fn new>(amount: T) -> (PedersenCommitment, PedersenOpening) { let opening = PedersenOpening::new_rand(); - let commitment = Pedersen::with(message, &opening); + let commitment = Pedersen::with(amount, &opening); (commitment, opening) } - /// On input a message and a Pedersen opening, the function returns the corresponding Pedersen - /// commitment. + /// On input a message (numeric amount) and a Pedersen opening, the function returns the + /// corresponding Pedersen commitment. /// /// This function is deterministic. #[allow(non_snake_case)] @@ -53,7 +53,8 @@ impl Pedersen { PedersenCommitment(RistrettoPoint::multiscalar_mul(&[x, *r], &[*G, *H])) } - /// On input a message, the function returns a Pedersen commitment with zero as the opening. + /// On input a message (numeric amount), the function returns a Pedersen commitment with zero + /// as the opening. /// /// This function is deterministic. pub fn encode>(amount: T) -> PedersenCommitment { @@ -300,6 +301,9 @@ mod tests { let decoded = PedersenCommitment::from_bytes(&encoded).unwrap(); assert_eq!(comm, decoded); + + // incorrect length encoding + assert_eq!(PedersenCommitment::from_bytes(&[0; 33]), None); } #[test] @@ -310,6 +314,9 @@ mod tests { let decoded = PedersenOpening::from_bytes(&encoded).unwrap(); assert_eq!(open, decoded); + + // incorrect length encoding + assert_eq!(PedersenOpening::from_bytes(&[0; 33]), None); } #[test] From 87d939b3197ee210acd77575bdf3aa492151bd3c Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Fri, 2 Dec 2022 02:45:27 +0000 Subject: [PATCH 244/465] [zk-token-sdk] Fix ElGamal key derivation (backport #28792) (#29033) [zk-token-sdk] Fix ElGamal key derivation (#28792) * fix ElGamal key derivation * cargo fmt (cherry picked from commit c828031d9a6d3e58f13a086bbf80164936479fff) Co-authored-by: samkim-crypto --- zk-token-sdk/src/encryption/elgamal.rs | 15 +++++++-------- zk-token-sdk/src/sigma_proofs/pubkey_proof.rs | 17 ++++++++++++++++- 2 files changed, 23 insertions(+), 9 deletions(-) diff --git a/zk-token-sdk/src/encryption/elgamal.rs b/zk-token-sdk/src/encryption/elgamal.rs index cb312faa4df94a..8b84e24a46ae94 100644 --- a/zk-token-sdk/src/encryption/elgamal.rs +++ b/zk-token-sdk/src/encryption/elgamal.rs @@ -71,14 +71,10 @@ impl ElGamal { #[cfg(not(target_os = "solana"))] #[allow(non_snake_case)] fn keygen_with_scalar(s: &Scalar) -> ElGamalKeypair { - assert!(s != &Scalar::zero()); - - let P = s.invert() * &(*H); + let secret = ElGamalSecretKey(*s); + let public = ElGamalPubkey::new(&secret); - ElGamalKeypair { - public: ElGamalPubkey(P), - secret: ElGamalSecretKey(*s), - } + ElGamalKeypair { public, secret } } /// On input an ElGamal public key and an amount to be encrypted, the function returns a @@ -267,7 +263,10 @@ impl ElGamalPubkey { /// Derives the `ElGamalPubkey` that uniquely corresponds to an `ElGamalSecretKey`. #[allow(non_snake_case)] pub fn new(secret: &ElGamalSecretKey) -> Self { - ElGamalPubkey(&secret.0 * &(*H)) + let s = &secret.0; + assert!(s != &Scalar::zero()); + + ElGamalPubkey(s.invert() * &(*H)) } pub fn get_point(&self) -> &RistrettoPoint { diff --git a/zk-token-sdk/src/sigma_proofs/pubkey_proof.rs b/zk-token-sdk/src/sigma_proofs/pubkey_proof.rs index 7dd49ad6d91cfe..79378ff80556bc 100644 --- a/zk-token-sdk/src/sigma_proofs/pubkey_proof.rs +++ b/zk-token-sdk/src/sigma_proofs/pubkey_proof.rs @@ -136,15 +136,30 @@ impl PubkeySigmaProof { #[cfg(test)] mod test { - use super::*; + use { + super::*, + solana_sdk::{pubkey::Pubkey, signature::Keypair}, + }; #[test] fn test_pubkey_proof_correctness() { + // random ElGamal keypair let keypair = ElGamalKeypair::new_rand(); let mut prover_transcript = Transcript::new(b"test"); let mut verifier_transcript = Transcript::new(b"test"); + let proof = PubkeySigmaProof::new(&keypair, &mut prover_transcript); + assert!(proof + .verify(&keypair.public, &mut verifier_transcript) + .is_ok()); + + // derived ElGamal keypair + let keypair = ElGamalKeypair::new(&Keypair::new(), &Pubkey::default()).unwrap(); + + let mut prover_transcript = Transcript::new(b"test"); + let mut verifier_transcript = Transcript::new(b"test"); + let proof = PubkeySigmaProof::new(&keypair, &mut prover_transcript); assert!(proof .verify(&keypair.public, &mut verifier_transcript) From fd0f6ae028a3d3c72623d4bb6f0515b897c127e9 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Fri, 2 Dec 2022 04:37:59 +0000 Subject: [PATCH 245/465] [zk-token-sdk] use canonical decoding for scalars (backport #28870) (#29034) [zk-token-sdk] use canonical decoding for scalars (#28870) use canonical decoding for scalars (cherry picked from commit f1e7ffba0cf1a43a7d4e63cd224441753b61725d) Co-authored-by: samkim-crypto --- zk-token-sdk/src/curve25519/edwards.rs | 9 +++++++-- zk-token-sdk/src/curve25519/ristretto.rs | 9 +++++++-- zk-token-sdk/src/curve25519/scalar.rs | 10 ++++++---- zk-token-sdk/src/errors.rs | 2 ++ zk-token-sdk/src/zk_token_elgamal/convert.rs | 8 +++++--- 5 files changed, 27 insertions(+), 11 deletions(-) diff --git a/zk-token-sdk/src/curve25519/edwards.rs b/zk-token-sdk/src/curve25519/edwards.rs index 8cd7a4abd4c9e7..b78a1c9d6c7a93 100644 --- a/zk-token-sdk/src/curve25519/edwards.rs +++ b/zk-token-sdk/src/curve25519/edwards.rs @@ -101,7 +101,7 @@ mod target_arch { #[cfg(not(target_os = "solana"))] fn multiply(scalar: &PodScalar, point: &Self) -> Option { - let scalar: Scalar = scalar.into(); + let scalar: Scalar = scalar.try_into().ok()?; let point: EdwardsPoint = point.try_into().ok()?; let result = &scalar * &point; @@ -114,8 +114,13 @@ mod target_arch { type Point = Self; fn multiscalar_multiply(scalars: &[PodScalar], points: &[Self]) -> Option { + let scalars = scalars + .iter() + .map(|scalar| Scalar::try_from(scalar).ok()) + .collect::>>()?; + EdwardsPoint::optional_multiscalar_mul( - scalars.iter().map(Scalar::from), + scalars, points .iter() .map(|point| EdwardsPoint::try_from(point).ok()), diff --git a/zk-token-sdk/src/curve25519/ristretto.rs b/zk-token-sdk/src/curve25519/ristretto.rs index 612f9309bfbe6c..d0c03c42f7b943 100644 --- a/zk-token-sdk/src/curve25519/ristretto.rs +++ b/zk-token-sdk/src/curve25519/ristretto.rs @@ -101,7 +101,7 @@ mod target_arch { #[cfg(not(target_os = "solana"))] fn multiply(scalar: &PodScalar, point: &Self) -> Option { - let scalar: Scalar = scalar.into(); + let scalar: Scalar = scalar.try_into().ok()?; let point: RistrettoPoint = point.try_into().ok()?; let result = &scalar * &point; @@ -114,8 +114,13 @@ mod target_arch { type Point = Self; fn multiscalar_multiply(scalars: &[PodScalar], points: &[Self]) -> Option { + let scalars = scalars + .iter() + .map(|scalar| Scalar::try_from(scalar).ok()) + .collect::>>()?; + RistrettoPoint::optional_multiscalar_mul( - scalars.iter().map(Scalar::from), + scalars, points .iter() .map(|point| RistrettoPoint::try_from(point).ok()), diff --git a/zk-token-sdk/src/curve25519/scalar.rs b/zk-token-sdk/src/curve25519/scalar.rs index 103419863a9c2f..e154851902a043 100644 --- a/zk-token-sdk/src/curve25519/scalar.rs +++ b/zk-token-sdk/src/curve25519/scalar.rs @@ -6,7 +6,7 @@ pub struct PodScalar(pub [u8; 32]); #[cfg(not(target_os = "solana"))] mod target_arch { - use {super::*, curve25519_dalek::scalar::Scalar}; + use {super::*, crate::curve25519::errors::Curve25519Error, curve25519_dalek::scalar::Scalar}; impl From<&Scalar> for PodScalar { fn from(scalar: &Scalar) -> Self { @@ -14,9 +14,11 @@ mod target_arch { } } - impl From<&PodScalar> for Scalar { - fn from(pod: &PodScalar) -> Self { - Scalar::from_bits(pod.0) + impl TryFrom<&PodScalar> for Scalar { + type Error = Curve25519Error; + + fn try_from(pod: &PodScalar) -> Result { + Scalar::from_canonical_bytes(pod.0).ok_or(Curve25519Error::PodConversion) } } } diff --git a/zk-token-sdk/src/errors.rs b/zk-token-sdk/src/errors.rs index 76cc5a5ee56c75..5c9d11eb6ddb65 100644 --- a/zk-token-sdk/src/errors.rs +++ b/zk-token-sdk/src/errors.rs @@ -28,6 +28,8 @@ pub enum ProofError { Decryption, #[error("invalid ciphertext data")] CiphertextDeserialization, + #[error("invalid scalar data")] + ScalarDeserialization, } #[derive(Error, Clone, Debug, Eq, PartialEq)] diff --git a/zk-token-sdk/src/zk_token_elgamal/convert.rs b/zk-token-sdk/src/zk_token_elgamal/convert.rs index ccfdd25953fffc..108bc4acaed479 100644 --- a/zk-token-sdk/src/zk_token_elgamal/convert.rs +++ b/zk-token-sdk/src/zk_token_elgamal/convert.rs @@ -82,9 +82,11 @@ mod target_arch { } } - impl From for Scalar { - fn from(pod: PodScalar) -> Self { - Scalar::from_bits(pod.0) + impl TryFrom for Scalar { + type Error = ProofError; + + fn try_from(pod: PodScalar) -> Result { + Scalar::from_canonical_bytes(pod.0).ok_or(ProofError::CiphertextDeserialization) } } From bd63904590d01c6e310e5804074bbba09f3f5296 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Fri, 2 Dec 2022 07:12:02 +0000 Subject: [PATCH 246/465] [zk-token-sdk] divide fee encryption into two ciphertexts (backport #28472) (#29036) * [zk-token-sdk] divide fee encryption into two ciphertexts (#28472) * divide fee encryption into two ciphertexts * clippy * update range proof * add fee ciphertext decryption * clean up split_u64 function * remove unnecessary casting (cherry picked from commit 11efaf75a445debb30e6cc0c8d10c9ae0f2cc099) # Conflicts: # zk-token-sdk/src/instruction/transfer_with_fee.rs * resolve conflict marker Co-authored-by: samkim-crypto --- zk-token-sdk/src/errors.rs | 8 +- zk-token-sdk/src/instruction/mod.rs | 33 +- zk-token-sdk/src/instruction/transfer.rs | 75 ++- .../src/instruction/transfer_with_fee.rs | 490 ++++++++++-------- zk-token-sdk/src/zk_token_elgamal/ops.rs | 2 +- 5 files changed, 343 insertions(+), 265 deletions(-) diff --git a/zk-token-sdk/src/errors.rs b/zk-token-sdk/src/errors.rs index 5c9d11eb6ddb65..55e29fbec6b464 100644 --- a/zk-token-sdk/src/errors.rs +++ b/zk-token-sdk/src/errors.rs @@ -11,8 +11,6 @@ pub enum ProofError { #[error("proof generation failed")] Generation, #[error("proof failed to verify")] - Verification, - #[error("range proof failed to verify")] RangeProof, #[error("equality proof failed to verify")] EqualityProof, @@ -30,6 +28,12 @@ pub enum ProofError { CiphertextDeserialization, #[error("invalid scalar data")] ScalarDeserialization, + #[error("invalid public key data")] + PubkeyDeserialization, + #[error("ciphertext does not exist in proof data")] + MissingCiphertext, + #[error("transfer amount split failed")] + TransferSplit, } #[derive(Error, Clone, Debug, Eq, PartialEq)] diff --git a/zk-token-sdk/src/instruction/mod.rs b/zk-token-sdk/src/instruction/mod.rs index a91e076c4bc3bf..3d5e44a5e01ee9 100644 --- a/zk-token-sdk/src/instruction/mod.rs +++ b/zk-token-sdk/src/instruction/mod.rs @@ -15,7 +15,6 @@ use { errors::ProofError, }, curve25519_dalek::scalar::Scalar, - subtle::ConstantTimeEq, }; pub use { close_account::CloseAccountData, pubkey_validity::PubkeyValidityData, transfer::TransferData, @@ -32,30 +31,32 @@ pub trait Verifiable { #[derive(Debug, Copy, Clone)] pub enum Role { Source, - Dest, + Destination, Auditor, + WithdrawWithheldAuthority, } /// Takes in a 64-bit number `amount` and a bit length `bit_length`. It returns: /// - the `bit_length` low bits of `amount` interpretted as u64 /// - the (64 - `bit_length`) high bits of `amount` interpretted as u64 #[cfg(not(target_os = "solana"))] -pub fn split_u64( - amount: u64, - lo_bit_length: usize, - hi_bit_length: usize, -) -> Result<(u64, u64), ProofError> { - assert!(lo_bit_length <= 64); - assert!(hi_bit_length <= 64); - - if !bool::from((amount >> (lo_bit_length + hi_bit_length)).ct_eq(&0u64)) { - return Err(ProofError::TransferAmount); +pub fn split_u64(amount: u64, bit_length: usize) -> (u64, u64) { + if bit_length == 64 { + (amount, 0) + } else { + let lo = amount << (64 - bit_length) >> (64 - bit_length); + let hi = amount >> bit_length; + (lo, hi) } +} - let lo = amount << (64 - lo_bit_length) >> (64 - lo_bit_length); - let hi = amount >> lo_bit_length; - - Ok((lo, hi)) +#[cfg(not(target_os = "solana"))] +pub fn combine_lo_hi_u64(amount_lo: u64, amount_hi: u64, bit_length: usize) -> u64 { + if bit_length == 64 { + amount_lo + } else { + amount_lo + (amount_hi << bit_length) + } } #[cfg(not(target_os = "solana"))] diff --git a/zk-token-sdk/src/instruction/transfer.rs b/zk-token-sdk/src/instruction/transfer.rs index d56cad1280d5d5..9c45d567fb6230 100644 --- a/zk-token-sdk/src/instruction/transfer.rs +++ b/zk-token-sdk/src/instruction/transfer.rs @@ -68,11 +68,7 @@ impl TransferData { (destination_pubkey, auditor_pubkey): (&ElGamalPubkey, &ElGamalPubkey), ) -> Result { // split and encrypt transfer amount - let (amount_lo, amount_hi) = split_u64( - transfer_amount, - TRANSFER_AMOUNT_LO_BITS, - TRANSFER_AMOUNT_HI_BITS, - )?; + let (amount_lo, amount_hi) = split_u64(transfer_amount, TRANSFER_AMOUNT_LO_BITS); let (ciphertext_lo, opening_lo) = TransferAmountEncryption::new( amount_lo, @@ -151,15 +147,20 @@ impl TransferData { let ciphertext_lo: TransferAmountEncryption = self.ciphertext_lo.try_into()?; let handle_lo = match role { - Role::Source => ciphertext_lo.source_handle, - Role::Dest => ciphertext_lo.destination_handle, - Role::Auditor => ciphertext_lo.auditor_handle, + Role::Source => Some(ciphertext_lo.source_handle), + Role::Destination => Some(ciphertext_lo.destination_handle), + Role::Auditor => Some(ciphertext_lo.auditor_handle), + Role::WithdrawWithheldAuthority => None, }; - Ok(ElGamalCiphertext { - commitment: ciphertext_lo.commitment, - handle: handle_lo, - }) + if let Some(handle) = handle_lo { + Ok(ElGamalCiphertext { + commitment: ciphertext_lo.commitment, + handle, + }) + } else { + Err(ProofError::MissingCiphertext) + } } /// Extracts the lo ciphertexts associated with a transfer data @@ -167,15 +168,20 @@ impl TransferData { let ciphertext_hi: TransferAmountEncryption = self.ciphertext_hi.try_into()?; let handle_hi = match role { - Role::Source => ciphertext_hi.source_handle, - Role::Dest => ciphertext_hi.destination_handle, - Role::Auditor => ciphertext_hi.auditor_handle, + Role::Source => Some(ciphertext_hi.source_handle), + Role::Destination => Some(ciphertext_hi.destination_handle), + Role::Auditor => Some(ciphertext_hi.auditor_handle), + Role::WithdrawWithheldAuthority => None, }; - Ok(ElGamalCiphertext { - commitment: ciphertext_hi.commitment, - handle: handle_hi, - }) + if let Some(handle) = handle_hi { + Ok(ElGamalCiphertext { + commitment: ciphertext_hi.commitment, + handle, + }) + } else { + Err(ProofError::MissingCiphertext) + } } /// Decrypts transfer amount from transfer data @@ -453,11 +459,11 @@ impl TransferPubkeys { let (source_pubkey, destination_pubkey, auditor_pubkey) = array_refs![bytes, 32, 32, 32]; let source_pubkey = - ElGamalPubkey::from_bytes(source_pubkey).ok_or(ProofError::Verification)?; + ElGamalPubkey::from_bytes(source_pubkey).ok_or(ProofError::Decryption)?; let destination_pubkey = - ElGamalPubkey::from_bytes(destination_pubkey).ok_or(ProofError::Verification)?; + ElGamalPubkey::from_bytes(destination_pubkey).ok_or(ProofError::Decryption)?; let auditor_pubkey = - ElGamalPubkey::from_bytes(auditor_pubkey).ok_or(ProofError::Verification)?; + ElGamalPubkey::from_bytes(auditor_pubkey).ok_or(ProofError::Decryption)?; Ok(Self { source_pubkey, @@ -578,26 +584,7 @@ mod test { assert!(transfer_data.verify().is_ok()); - // Case 4: transfer amount too big - - // create source account spendable ciphertext - let spendable_balance: u64 = u64::max_value(); - let spendable_ciphertext = source_keypair.public.encrypt(spendable_balance); - - // transfer amount - let transfer_amount: u64 = 1u64 << (TRANSFER_AMOUNT_LO_BITS + TRANSFER_AMOUNT_HI_BITS); - - // create transfer data - let transfer_data = TransferData::new( - transfer_amount, - (spendable_balance, &spendable_ciphertext), - &source_keypair, - (&dest_pk, &auditor_pk), - ); - - assert!(transfer_data.is_err()); - - // Case 5: invalid destination or auditor pubkey + // Case 4: invalid destination or auditor pubkey let spendable_balance: u64 = 0; let spendable_ciphertext = source_keypair.public.encrypt(spendable_balance); @@ -671,7 +658,9 @@ mod test { ); assert_eq!( - transfer_data.decrypt_amount(Role::Dest, &dest_sk).unwrap(), + transfer_data + .decrypt_amount(Role::Destination, &dest_sk) + .unwrap(), 550000_u64, ); diff --git a/zk-token-sdk/src/instruction/transfer_with_fee.rs b/zk-token-sdk/src/instruction/transfer_with_fee.rs index 7442f4e3c7782b..7fbb603e2ec333 100644 --- a/zk-token-sdk/src/instruction/transfer_with_fee.rs +++ b/zk-token-sdk/src/instruction/transfer_with_fee.rs @@ -14,13 +14,12 @@ use { errors::ProofError, instruction::{ combine_lo_hi_ciphertexts, combine_lo_hi_commitments, combine_lo_hi_openings, - split_u64, transfer::TransferAmountEncryption, Role, Verifiable, + combine_lo_hi_u64, split_u64, transfer::TransferAmountEncryption, Role, Verifiable, }, range_proof::RangeProof, sigma_proofs::{ - equality_proof::CtxtCommEqualityProof, - fee_proof::FeeSigmaProof, - validity_proof::{AggregatedValidityProof, ValidityProof}, + equality_proof::CtxtCommEqualityProof, fee_proof::FeeSigmaProof, + validity_proof::AggregatedValidityProof, }, transcript::TranscriptProtocol, }, @@ -45,7 +44,11 @@ const TRANSFER_AMOUNT_LO_NEGATED_BITS: usize = 16; #[cfg(not(target_os = "solana"))] const TRANSFER_AMOUNT_HI_BITS: usize = 32; #[cfg(not(target_os = "solana"))] -const TRANSFER_DELTA_BITS: usize = 64; +const TRANSFER_DELTA_BITS: usize = 48; +#[cfg(not(target_os = "solana"))] +const FEE_AMOUNT_LO_BITS: usize = 16; +#[cfg(not(target_os = "solana"))] +const FEE_AMOUNT_HI_BITS: usize = 32; #[cfg(not(target_os = "solana"))] lazy_static::lazy_static! { @@ -58,10 +61,10 @@ lazy_static::lazy_static! { #[derive(Clone, Copy, Pod, Zeroable)] #[repr(C)] pub struct TransferWithFeeData { - /// Group encryption of the low 32 bites of the transfer amount + /// Group encryption of the low 16 bites of the transfer amount pub ciphertext_lo: pod::TransferAmountEncryption, - /// Group encryption of the high 32 bits of the transfer amount + /// Group encryption of the high 48 bits of the transfer amount pub ciphertext_hi: pod::TransferAmountEncryption, /// The public encryption keys associated with the transfer: source, dest, and auditor @@ -70,8 +73,11 @@ pub struct TransferWithFeeData { /// The final spendable ciphertext after the transfer, pub new_source_ciphertext: pod::ElGamalCiphertext, - // transfer fee encryption - pub fee_ciphertext: pod::FeeEncryption, + // transfer fee encryption of the low 16 bits of the transfer fee amount + pub fee_ciphertext_lo: pod::FeeEncryption, + + // transfer fee encryption of the hi 32 bits of the transfer fee amount + pub fee_ciphertext_hi: pod::FeeEncryption, // fee parameters pub fee_parameters: pod::FeeParameters, @@ -91,11 +97,7 @@ impl TransferWithFeeData { withdraw_withheld_authority_pubkey: &ElGamalPubkey, ) -> Result { // split and encrypt transfer amount - let (amount_lo, amount_hi) = split_u64( - transfer_amount, - TRANSFER_AMOUNT_LO_BITS, - TRANSFER_AMOUNT_HI_BITS, - )?; + let (amount_lo, amount_hi) = split_u64(transfer_amount, TRANSFER_AMOUNT_LO_BITS); let (ciphertext_lo, opening_lo) = TransferAmountEncryption::new( amount_lo, @@ -132,7 +134,9 @@ impl TransferWithFeeData { TRANSFER_AMOUNT_LO_BITS, ); - // calculate and encrypt fee + // calculate fee + // + // TODO: add comment on delta fee let (fee_amount, delta_fee) = calculate_fee(transfer_amount, fee_parameters.fee_rate_basis_points) .ok_or(ProofError::Generation)?; @@ -141,8 +145,17 @@ impl TransferWithFeeData { let fee_to_encrypt = u64::conditional_select(&fee_parameters.maximum_fee, &fee_amount, below_max); - let (fee_ciphertext, opening_fee) = FeeEncryption::new( - fee_to_encrypt, + // split and encrypt fee + let (fee_to_encrypt_lo, fee_to_encrypt_hi) = split_u64(fee_to_encrypt, FEE_AMOUNT_LO_BITS); + + let (fee_ciphertext_lo, opening_fee_lo) = FeeEncryption::new( + fee_to_encrypt_lo, + destination_pubkey, + withdraw_withheld_authority_pubkey, + ); + + let (fee_ciphertext_hi, opening_fee_hi) = FeeEncryption::new( + fee_to_encrypt_hi, destination_pubkey, withdraw_withheld_authority_pubkey, ); @@ -157,14 +170,16 @@ impl TransferWithFeeData { let pod_ciphertext_lo: pod::TransferAmountEncryption = ciphertext_lo.to_pod(); let pod_ciphertext_hi: pod::TransferAmountEncryption = ciphertext_hi.to_pod(); let pod_new_source_ciphertext: pod::ElGamalCiphertext = new_source_ciphertext.into(); - let pod_fee_ciphertext: pod::FeeEncryption = fee_ciphertext.to_pod(); + let pod_fee_ciphertext_lo: pod::FeeEncryption = fee_ciphertext_lo.to_pod(); + let pod_fee_ciphertext_hi: pod::FeeEncryption = fee_ciphertext_hi.to_pod(); let mut transcript = TransferWithFeeProof::transcript_new( &pod_transfer_with_fee_pubkeys, &pod_ciphertext_lo, &pod_ciphertext_hi, &pod_new_source_ciphertext, - &pod_fee_ciphertext, + &pod_fee_ciphertext_lo, + &pod_fee_ciphertext_hi, ); let proof = TransferWithFeeProof::new( @@ -173,7 +188,8 @@ impl TransferWithFeeData { source_keypair, (destination_pubkey, auditor_pubkey), (new_spendable_balance, &new_source_ciphertext), - (fee_to_encrypt, &fee_ciphertext, &opening_fee), + (fee_to_encrypt_lo, &fee_ciphertext_lo, &opening_fee_lo), + (fee_to_encrypt_hi, &fee_ciphertext_hi, &opening_fee_hi), delta_fee, withdraw_withheld_authority_pubkey, fee_parameters, @@ -185,7 +201,8 @@ impl TransferWithFeeData { ciphertext_hi: pod_ciphertext_hi, transfer_with_fee_pubkeys: pod_transfer_with_fee_pubkeys, new_source_ciphertext: pod_new_source_ciphertext, - fee_ciphertext: pod_fee_ciphertext, + fee_ciphertext_lo: pod_fee_ciphertext_lo, + fee_ciphertext_hi: pod_fee_ciphertext_hi, fee_parameters: fee_parameters.into(), proof, }) @@ -196,15 +213,20 @@ impl TransferWithFeeData { let ciphertext_lo: TransferAmountEncryption = self.ciphertext_lo.try_into()?; let handle_lo = match role { - Role::Source => ciphertext_lo.source_handle, - Role::Dest => ciphertext_lo.destination_handle, - Role::Auditor => ciphertext_lo.auditor_handle, + Role::Source => Some(ciphertext_lo.source_handle), + Role::Destination => Some(ciphertext_lo.destination_handle), + Role::Auditor => Some(ciphertext_lo.auditor_handle), + Role::WithdrawWithheldAuthority => None, }; - Ok(ElGamalCiphertext { - commitment: ciphertext_lo.commitment, - handle: handle_lo, - }) + if let Some(handle) = handle_lo { + Ok(ElGamalCiphertext { + commitment: ciphertext_lo.commitment, + handle, + }) + } else { + Err(ProofError::MissingCiphertext) + } } /// Extracts the lo ciphertexts associated with a transfer-with-fee data @@ -212,15 +234,66 @@ impl TransferWithFeeData { let ciphertext_hi: TransferAmountEncryption = self.ciphertext_hi.try_into()?; let handle_hi = match role { - Role::Source => ciphertext_hi.source_handle, - Role::Dest => ciphertext_hi.destination_handle, - Role::Auditor => ciphertext_hi.auditor_handle, + Role::Source => Some(ciphertext_hi.source_handle), + Role::Destination => Some(ciphertext_hi.destination_handle), + Role::Auditor => Some(ciphertext_hi.auditor_handle), + Role::WithdrawWithheldAuthority => None, }; - Ok(ElGamalCiphertext { - commitment: ciphertext_hi.commitment, - handle: handle_hi, - }) + if let Some(handle) = handle_hi { + Ok(ElGamalCiphertext { + commitment: ciphertext_hi.commitment, + handle, + }) + } else { + Err(ProofError::MissingCiphertext) + } + } + + /// Extracts the lo fee ciphertexts associated with a transfer_with_fee data + fn fee_ciphertext_lo(&self, role: Role) -> Result { + let fee_ciphertext_lo: FeeEncryption = self.fee_ciphertext_lo.try_into()?; + + let fee_handle_lo = match role { + Role::Source => None, + Role::Destination => Some(fee_ciphertext_lo.destination_handle), + Role::Auditor => None, + Role::WithdrawWithheldAuthority => { + Some(fee_ciphertext_lo.withdraw_withheld_authority_handle) + } + }; + + if let Some(handle) = fee_handle_lo { + Ok(ElGamalCiphertext { + commitment: fee_ciphertext_lo.commitment, + handle, + }) + } else { + Err(ProofError::MissingCiphertext) + } + } + + /// Extracts the hi fee ciphertexts associated with a transfer_with_fee data + fn fee_ciphertext_hi(&self, role: Role) -> Result { + let fee_ciphertext_hi: FeeEncryption = self.fee_ciphertext_hi.try_into()?; + + let fee_handle_hi = match role { + Role::Source => None, + Role::Destination => Some(fee_ciphertext_hi.destination_handle), + Role::Auditor => None, + Role::WithdrawWithheldAuthority => { + Some(fee_ciphertext_hi.withdraw_withheld_authority_handle) + } + }; + + if let Some(handle) = fee_handle_hi { + Ok(ElGamalCiphertext { + commitment: fee_ciphertext_hi.commitment, + handle, + }) + } else { + Err(ProofError::MissingCiphertext) + } } /// Decrypts transfer amount from transfer-with-fee data @@ -232,10 +305,26 @@ impl TransferWithFeeData { let amount_hi = ciphertext_hi.decrypt_u32(sk); if let (Some(amount_lo), Some(amount_hi)) = (amount_lo, amount_hi) { - let two_power = 1 << TRANSFER_AMOUNT_LO_BITS; - Ok(amount_lo + two_power * amount_hi) + let shifted_amount_hi = amount_hi << TRANSFER_AMOUNT_LO_BITS; + Ok(amount_lo + shifted_amount_hi) } else { - Err(ProofError::Verification) + Err(ProofError::Decryption) + } + } + + /// Decrypts transfer amount from transfer-with-fee data + pub fn decrypt_fee_amount(&self, role: Role, sk: &ElGamalSecretKey) -> Result { + let ciphertext_lo = self.fee_ciphertext_lo(role)?; + let ciphertext_hi = self.fee_ciphertext_hi(role)?; + + let fee_amount_lo = ciphertext_lo.decrypt_u32(sk); + let fee_amount_hi = ciphertext_hi.decrypt_u32(sk); + + if let (Some(fee_amount_lo), Some(fee_amount_hi)) = (fee_amount_lo, fee_amount_hi) { + let shifted_fee_amount_hi = fee_amount_hi << FEE_AMOUNT_LO_BITS; + Ok(fee_amount_lo + shifted_fee_amount_hi) + } else { + Err(ProofError::Decryption) } } } @@ -248,7 +337,8 @@ impl Verifiable for TransferWithFeeData { &self.ciphertext_lo, &self.ciphertext_hi, &self.new_source_ciphertext, - &self.fee_ciphertext, + &self.fee_ciphertext_lo, + &self.fee_ciphertext_hi, ); let ciphertext_lo = self.ciphertext_lo.try_into()?; @@ -256,7 +346,8 @@ impl Verifiable for TransferWithFeeData { let pubkeys_transfer_with_fee = self.transfer_with_fee_pubkeys.try_into()?; let new_source_ciphertext = self.new_source_ciphertext.try_into()?; - let fee_ciphertext = self.fee_ciphertext.try_into()?; + let fee_ciphertext_lo = self.fee_ciphertext_lo.try_into()?; + let fee_ciphertext_hi = self.fee_ciphertext_hi.try_into()?; let fee_parameters = self.fee_parameters.into(); self.proof.verify( @@ -264,7 +355,8 @@ impl Verifiable for TransferWithFeeData { &ciphertext_hi, &pubkeys_transfer_with_fee, &new_source_ciphertext, - &fee_ciphertext, + &fee_ciphertext_lo, + &fee_ciphertext_hi, fee_parameters, &mut transcript, ) @@ -280,7 +372,7 @@ pub struct TransferWithFeeProof { pub equality_proof: pod::CtxtCommEqualityProof, pub ciphertext_amount_validity_proof: pod::AggregatedValidityProof, pub fee_sigma_proof: pod::FeeSigmaProof, - pub fee_ciphertext_validity_proof: pod::ValidityProof, + pub fee_ciphertext_validity_proof: pod::AggregatedValidityProof, pub range_proof: pod::RangeProof256, } @@ -292,7 +384,8 @@ impl TransferWithFeeProof { ciphertext_lo: &pod::TransferAmountEncryption, ciphertext_hi: &pod::TransferAmountEncryption, new_source_ciphertext: &pod::ElGamalCiphertext, - fee_ciphertext: &pod::FeeEncryption, + fee_ciphertext_lo: &pod::FeeEncryption, + fee_ciphertext_hi: &pod::FeeEncryption, ) -> Transcript { let mut transcript = Transcript::new(b"FeeProof"); @@ -319,11 +412,18 @@ impl TransferWithFeeProof { transcript.append_ciphertext(b"ctxt-new-source", new_source_ciphertext); - transcript.append_commitment(b"comm-fee", &fee_ciphertext.commitment); - transcript.append_handle(b"fee-dest-handle", &fee_ciphertext.destination_handle); + transcript.append_commitment(b"comm-fee-lo", &fee_ciphertext_lo.commitment); + transcript.append_handle(b"handle-fee-lo-dest", &fee_ciphertext_lo.destination_handle); + transcript.append_handle( + b"handle-fee-lo-auditor", + &fee_ciphertext_lo.withdraw_withheld_authority_handle, + ); + + transcript.append_commitment(b"comm-fee-hi", &fee_ciphertext_hi.commitment); + transcript.append_handle(b"handle-fee-hi-dest", &fee_ciphertext_hi.destination_handle); transcript.append_handle( - b"handle-fee-auditor", - &fee_ciphertext.withdraw_withheld_authority_handle, + b"handle-fee-hi-auditor", + &fee_ciphertext_hi.withdraw_withheld_authority_handle, ); transcript @@ -337,8 +437,9 @@ impl TransferWithFeeProof { source_keypair: &ElGamalKeypair, (destination_pubkey, auditor_pubkey): (&ElGamalPubkey, &ElGamalPubkey), (source_new_balance, new_source_ciphertext): (u64, &ElGamalCiphertext), - - (fee_amount, fee_ciphertext, opening_fee): (u64, &FeeEncryption, &PedersenOpening), + // fee parameters + (fee_amount_lo, fee_ciphertext_lo, opening_fee_lo): (u64, &FeeEncryption, &PedersenOpening), + (fee_amount_hi, fee_ciphertext_hi, opening_fee_hi): (u64, &FeeEncryption, &PedersenOpening), delta_fee: u64, withdraw_withheld_authority_pubkey: &ElGamalPubkey, fee_parameters: FeeParameters, @@ -349,13 +450,9 @@ impl TransferWithFeeProof { // generate a Pedersen commitment for the remaining balance in source let (new_source_commitment, opening_source) = Pedersen::new(source_new_balance); - let (claimed_commitment, opening_claimed) = Pedersen::new(delta_fee); - let pod_new_source_commitment: pod::PedersenCommitment = new_source_commitment.into(); - let pod_claimed_commitment: pod::PedersenCommitment = claimed_commitment.into(); transcript.append_commitment(b"commitment-new-source", &pod_new_source_commitment); - transcript.append_commitment(b"commitment-claimed", &pod_claimed_commitment); // generate equality_proof let equality_proof = CtxtCommEqualityProof::new( @@ -374,88 +471,91 @@ impl TransferWithFeeProof { transcript, ); + // compute claimed delta commitment + let (claimed_commitment, opening_claimed) = Pedersen::new(delta_fee); + let pod_claimed_commitment: pod::PedersenCommitment = claimed_commitment.into(); + transcript.append_commitment(b"commitment-claimed", &pod_claimed_commitment); + + let combined_commitment = combine_lo_hi_commitments( + &ciphertext_lo.commitment, + &ciphertext_hi.commitment, + TRANSFER_AMOUNT_LO_BITS, + ); + let combined_opening = + combine_lo_hi_openings(opening_lo, opening_hi, TRANSFER_AMOUNT_LO_BITS); + + let combined_fee_amount = + combine_lo_hi_u64(fee_amount_lo, fee_amount_hi, TRANSFER_AMOUNT_LO_BITS); + let combined_fee_commitment = combine_lo_hi_commitments( + &fee_ciphertext_lo.commitment, + &fee_ciphertext_hi.commitment, + TRANSFER_AMOUNT_LO_BITS, + ); + let combined_fee_opening = + combine_lo_hi_openings(opening_fee_lo, opening_fee_hi, TRANSFER_AMOUNT_LO_BITS); + + // compute real delta commitment let (delta_commitment, opening_delta) = compute_delta_commitment_and_opening( - (&ciphertext_lo.commitment, opening_lo), - (&ciphertext_hi.commitment, opening_hi), - (&fee_ciphertext.commitment, opening_fee), + (&combined_commitment, &combined_opening), + (&combined_fee_commitment, &combined_fee_opening), fee_parameters.fee_rate_basis_points, ); + let pod_delta_commitment: pod::PedersenCommitment = delta_commitment.into(); + transcript.append_commitment(b"commitment-delta", &pod_delta_commitment); + // generate fee sigma proof let fee_sigma_proof = FeeSigmaProof::new( - (fee_amount, &fee_ciphertext.commitment, opening_fee), + ( + combined_fee_amount, + &combined_fee_commitment, + &combined_fee_opening, + ), (delta_fee, &delta_commitment, &opening_delta), (&claimed_commitment, &opening_claimed), fee_parameters.maximum_fee, transcript, ); - let fee_ciphertext_validity_proof = ValidityProof::new( + // generate ciphertext validity proof for fee ciphertexts + let fee_ciphertext_validity_proof = AggregatedValidityProof::new( (destination_pubkey, withdraw_withheld_authority_pubkey), - fee_amount, - opening_fee, + (fee_amount_lo, fee_amount_hi), + (opening_fee_lo, opening_fee_hi), transcript, ); // generate the range proof let opening_claimed_negated = &PedersenOpening::default() - &opening_claimed; - let range_proof = if TRANSFER_AMOUNT_LO_BITS == 32 { - RangeProof::new( - vec![ - source_new_balance, - transfer_amount_lo as u64, - transfer_amount_hi as u64, - delta_fee, - MAX_FEE_BASIS_POINTS - delta_fee, - ], - vec![ - TRANSFER_SOURCE_AMOUNT_BITS, - TRANSFER_AMOUNT_LO_BITS, - TRANSFER_AMOUNT_HI_BITS, - TRANSFER_DELTA_BITS, - TRANSFER_DELTA_BITS, - ], - vec![ - &opening_source, - opening_lo, - opening_hi, - &opening_claimed, - &opening_claimed_negated, - ], - transcript, - ) - } else { - let transfer_amount_lo_negated = - ((1 << TRANSFER_AMOUNT_LO_NEGATED_BITS) - 1) - transfer_amount_lo as u64; - let opening_lo_negated = &PedersenOpening::default() - opening_lo; - - RangeProof::new( - vec![ - source_new_balance, - transfer_amount_lo as u64, - transfer_amount_lo_negated, - transfer_amount_hi as u64, - delta_fee, - MAX_FEE_BASIS_POINTS - delta_fee, - ], - vec![ - TRANSFER_SOURCE_AMOUNT_BITS, - TRANSFER_AMOUNT_LO_BITS, - TRANSFER_AMOUNT_LO_NEGATED_BITS, - TRANSFER_AMOUNT_HI_BITS, - TRANSFER_DELTA_BITS, - TRANSFER_DELTA_BITS, - ], - vec![ - &opening_source, - opening_lo, - &opening_lo_negated, - opening_hi, - &opening_claimed, - &opening_claimed_negated, - ], - transcript, - ) - }; + let range_proof = RangeProof::new( + vec![ + source_new_balance, + transfer_amount_lo, + transfer_amount_hi, + delta_fee, + MAX_FEE_BASIS_POINTS - delta_fee, + fee_amount_lo, + fee_amount_hi, + ], + vec![ + TRANSFER_SOURCE_AMOUNT_BITS, // 64 + TRANSFER_AMOUNT_LO_BITS, // 16 + TRANSFER_AMOUNT_HI_BITS, // 32 + TRANSFER_DELTA_BITS, // 48 + TRANSFER_DELTA_BITS, // 48 + FEE_AMOUNT_LO_BITS, // 16 + FEE_AMOUNT_HI_BITS, // 32 + ], + vec![ + &opening_source, + opening_lo, + opening_hi, + &opening_claimed, + &opening_claimed_negated, + opening_fee_lo, + opening_fee_hi, + ], + transcript, + ); Self { new_source_commitment: pod_new_source_commitment, @@ -474,13 +574,13 @@ impl TransferWithFeeProof { ciphertext_hi: &TransferAmountEncryption, transfer_with_fee_pubkeys: &TransferWithFeePubkeys, new_spendable_ciphertext: &ElGamalCiphertext, - - fee_ciphertext: &FeeEncryption, + // fee parameters + fee_ciphertext_lo: &FeeEncryption, + fee_ciphertext_hi: &FeeEncryption, fee_parameters: FeeParameters, transcript: &mut Transcript, ) -> Result<(), ProofError> { transcript.append_commitment(b"commitment-new-source", &self.new_source_commitment); - transcript.append_commitment(b"commitment-claimed", &self.claimed_commitment); let new_source_commitment: PedersenCommitment = self.new_source_commitment.try_into()?; let claimed_commitment: PedersenCommitment = self.claimed_commitment.try_into()?; @@ -489,7 +589,7 @@ impl TransferWithFeeProof { let ciphertext_amount_validity_proof: AggregatedValidityProof = self.ciphertext_amount_validity_proof.try_into()?; let fee_sigma_proof: FeeSigmaProof = self.fee_sigma_proof.try_into()?; - let fee_ciphertext_validity_proof: ValidityProof = + let fee_ciphertext_validity_proof: AggregatedValidityProof = self.fee_ciphertext_validity_proof.try_into()?; let range_proof: RangeProof = self.range_proof.try_into()?; @@ -517,30 +617,51 @@ impl TransferWithFeeProof { )?; // verify fee sigma proof - let delta_commitment = compute_delta_commitment( + transcript.append_commitment(b"commitment-claimed", &self.claimed_commitment); + + let combined_commitment = combine_lo_hi_commitments( &ciphertext_lo.commitment, &ciphertext_hi.commitment, - &fee_ciphertext.commitment, + TRANSFER_AMOUNT_LO_BITS, + ); + let combined_fee_commitment = combine_lo_hi_commitments( + &fee_ciphertext_lo.commitment, + &fee_ciphertext_hi.commitment, + TRANSFER_AMOUNT_LO_BITS, + ); + + let delta_commitment = compute_delta_commitment( + &combined_commitment, + &combined_fee_commitment, fee_parameters.fee_rate_basis_points, ); + let pod_delta_commitment: pod::PedersenCommitment = delta_commitment.into(); + transcript.append_commitment(b"commitment-delta", &pod_delta_commitment); + + // verify fee sigma proof fee_sigma_proof.verify( - &fee_ciphertext.commitment, + &combined_fee_commitment, &delta_commitment, &claimed_commitment, fee_parameters.maximum_fee, transcript, )?; + // verify ciphertext validity proof for fee ciphertexts fee_ciphertext_validity_proof.verify( - &fee_ciphertext.commitment, ( &transfer_with_fee_pubkeys.destination_pubkey, &transfer_with_fee_pubkeys.withdraw_withheld_authority_pubkey, ), + (&fee_ciphertext_lo.commitment, &fee_ciphertext_hi.commitment), + ( + &fee_ciphertext_lo.destination_handle, + &fee_ciphertext_hi.destination_handle, + ), ( - &fee_ciphertext.destination_handle, - &fee_ciphertext.withdraw_withheld_authority_handle, + &fee_ciphertext_lo.withdraw_withheld_authority_handle, + &fee_ciphertext_hi.withdraw_withheld_authority_handle, ), transcript, )?; @@ -549,34 +670,27 @@ impl TransferWithFeeProof { let new_source_commitment = self.new_source_commitment.try_into()?; let claimed_commitment_negated = &(*COMMITMENT_MAX_FEE_BASIS_POINTS) - &claimed_commitment; - if TRANSFER_AMOUNT_LO_BITS == 32 { - range_proof.verify( - vec![ - &new_source_commitment, - &ciphertext_lo.commitment, - &ciphertext_hi.commitment, - &claimed_commitment, - &claimed_commitment_negated, - ], - vec![64, 32, 32, 64, 64], - transcript, - )?; - } else { - let commitment_lo_negated = &(*COMMITMENT_MAX) - &ciphertext_lo.commitment; - - range_proof.verify( - vec![ - &new_source_commitment, - &ciphertext_lo.commitment, - &commitment_lo_negated, - &ciphertext_hi.commitment, - &claimed_commitment, - &claimed_commitment_negated, - ], - vec![64, 16, 16, 32, 64, 64], - transcript, - )?; - } + range_proof.verify( + vec![ + &new_source_commitment, + &ciphertext_lo.commitment, + &ciphertext_hi.commitment, + &claimed_commitment, + &claimed_commitment_negated, + &fee_ciphertext_lo.commitment, + &fee_ciphertext_hi.commitment, + ], + vec![ + TRANSFER_SOURCE_AMOUNT_BITS, // 64 + TRANSFER_AMOUNT_LO_BITS, // 16 + TRANSFER_AMOUNT_HI_BITS, // 32 + TRANSFER_DELTA_BITS, // 48 + TRANSFER_DELTA_BITS, // 48 + FEE_AMOUNT_LO_BITS, // 16 + FEE_AMOUNT_HI_BITS, // 32 + ], + transcript, + )?; Ok(()) } @@ -610,14 +724,14 @@ impl TransferWithFeePubkeys { array_refs![bytes, 32, 32, 32, 32]; let source_pubkey = - ElGamalPubkey::from_bytes(source_pubkey).ok_or(ProofError::Verification)?; - let destination_pubkey = - ElGamalPubkey::from_bytes(destination_pubkey).ok_or(ProofError::Verification)?; + ElGamalPubkey::from_bytes(source_pubkey).ok_or(ProofError::PubkeyDeserialization)?; + let destination_pubkey = ElGamalPubkey::from_bytes(destination_pubkey) + .ok_or(ProofError::PubkeyDeserialization)?; let auditor_pubkey = - ElGamalPubkey::from_bytes(auditor_pubkey).ok_or(ProofError::Verification)?; + ElGamalPubkey::from_bytes(auditor_pubkey).ok_or(ProofError::PubkeyDeserialization)?; let withdraw_withheld_authority_pubkey = ElGamalPubkey::from_bytes(withdraw_withheld_authority_pubkey) - .ok_or(ProofError::Verification)?; + .ok_or(ProofError::PubkeyDeserialization)?; Ok(Self { source_pubkey, @@ -716,36 +830,28 @@ fn calculate_fee(transfer_amount: u64, fee_rate_basis_points: u16) -> Option<(u6 #[cfg(not(target_os = "solana"))] fn compute_delta_commitment_and_opening( - (commitment_lo, opening_lo): (&PedersenCommitment, &PedersenOpening), - (commitment_hi, opening_hi): (&PedersenCommitment, &PedersenOpening), - (fee_commitment, opening_fee): (&PedersenCommitment, &PedersenOpening), + (combined_commitment, combined_opening): (&PedersenCommitment, &PedersenOpening), + (combined_fee_commitment, combined_fee_opening): (&PedersenCommitment, &PedersenOpening), fee_rate_basis_points: u16, ) -> (PedersenCommitment, PedersenOpening) { let fee_rate_scalar = Scalar::from(fee_rate_basis_points); + let delta_commitment = combined_fee_commitment * Scalar::from(MAX_FEE_BASIS_POINTS) + - combined_commitment * &fee_rate_scalar; + let delta_opening = combined_fee_opening * Scalar::from(MAX_FEE_BASIS_POINTS) + - combined_opening * &fee_rate_scalar; - let delta_commitment = fee_commitment * Scalar::from(MAX_FEE_BASIS_POINTS) - - &(&combine_lo_hi_commitments(commitment_lo, commitment_hi, TRANSFER_AMOUNT_LO_BITS) - * &fee_rate_scalar); - - let opening_delta = opening_fee * Scalar::from(MAX_FEE_BASIS_POINTS) - - &(&combine_lo_hi_openings(opening_lo, opening_hi, TRANSFER_AMOUNT_LO_BITS) - * &fee_rate_scalar); - - (delta_commitment, opening_delta) + (delta_commitment, delta_opening) } #[cfg(not(target_os = "solana"))] fn compute_delta_commitment( - commitment_lo: &PedersenCommitment, - commitment_hi: &PedersenCommitment, - fee_commitment: &PedersenCommitment, + combined_commitment: &PedersenCommitment, + combined_fee_commitment: &PedersenCommitment, fee_rate_basis_points: u16, ) -> PedersenCommitment { let fee_rate_scalar = Scalar::from(fee_rate_basis_points); - - fee_commitment * Scalar::from(MAX_FEE_BASIS_POINTS) - - &(&combine_lo_hi_commitments(commitment_lo, commitment_hi, TRANSFER_AMOUNT_LO_BITS) - * &fee_rate_scalar) + combined_fee_commitment * Scalar::from(MAX_FEE_BASIS_POINTS) + - combined_commitment * &fee_rate_scalar } #[cfg(test)] @@ -829,29 +935,7 @@ mod test { assert!(fee_data.verify().is_ok()); - // Case 4: transfer amount too big - let spendable_balance: u64 = u64::max_value(); - let spendable_ciphertext = source_keypair.public.encrypt(spendable_balance); - - let transfer_amount: u64 = 1u64 << (TRANSFER_AMOUNT_LO_BITS + TRANSFER_AMOUNT_HI_BITS); - - let fee_parameters = FeeParameters { - fee_rate_basis_points: 400, - maximum_fee: 3, - }; - - let fee_data = TransferWithFeeData::new( - transfer_amount, - (spendable_balance, &spendable_ciphertext), - &source_keypair, - (&destination_pubkey, &auditor_pubkey), - fee_parameters, - &withdraw_withheld_authority_pubkey, - ); - - assert!(fee_data.is_err()); - - // Case 5: invalid destination, auditor, or withdraw authority pubkeys + // Case 4: invalid destination, auditor, or withdraw authority pubkeys let spendable_balance: u64 = 120; let spendable_ciphertext = source_keypair.public.encrypt(spendable_balance); diff --git a/zk-token-sdk/src/zk_token_elgamal/ops.rs b/zk-token-sdk/src/zk_token_elgamal/ops.rs index 1dc02985dca525..fff1152f99b59d 100644 --- a/zk-token-sdk/src/zk_token_elgamal/ops.rs +++ b/zk-token-sdk/src/zk_token_elgamal/ops.rs @@ -201,7 +201,7 @@ mod tests { fn test_transfer_arithmetic() { // transfer amount let transfer_amount: u64 = 55; - let (amount_lo, amount_hi) = split_u64(transfer_amount, 16, 32).unwrap(); + let (amount_lo, amount_hi) = split_u64(transfer_amount, 16); // generate public keys let source_pk = ElGamalKeypair::new_rand().public; From 9abc6207787ebc454cf0fbba071e9418b2bd5b0e Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Fri, 2 Dec 2022 09:06:18 +0000 Subject: [PATCH 247/465] [zk-token-sdk] reorganize errors (backport #29005) (#29037) [zk-token-sdk] reorganize errors (#29005) * reorganize error using DRY principle * rename error `Format` to `Deserialization` * Rename `EncryptionError` to `DiscreteLogError` * resolve errors from rebase * resolve clippy * change `ProofInstructionError` to `ProofError` (cherry picked from commit ae57a14ef637d64c10deb0a0c2d3021f6e89b041) Co-authored-by: samkim-crypto --- zk-token-sdk/src/encryption/discrete_log.rs | 10 +- zk-token-sdk/src/encryption/errors.rs | 2 +- zk-token-sdk/src/errors.rs | 78 ++++++++------ zk-token-sdk/src/instruction/transfer.rs | 8 +- zk-token-sdk/src/macros.rs | 10 ++ zk-token-sdk/src/range_proof/errors.rs | 30 ++---- zk-token-sdk/src/range_proof/inner_product.rs | 29 +++-- zk-token-sdk/src/range_proof/mod.rs | 17 +-- .../src/sigma_proofs/equality_proof.rs | 70 ++++++++---- zk-token-sdk/src/sigma_proofs/errors.rs | 100 ++++-------------- zk-token-sdk/src/sigma_proofs/fee_proof.rs | 33 +++--- zk-token-sdk/src/sigma_proofs/pubkey_proof.rs | 20 ++-- .../src/sigma_proofs/validity_proof.rs | 34 ++++-- .../src/sigma_proofs/zero_balance_proof.rs | 25 +++-- zk-token-sdk/src/zk_token_elgamal/convert.rs | 10 +- 15 files changed, 248 insertions(+), 228 deletions(-) diff --git a/zk-token-sdk/src/encryption/discrete_log.rs b/zk-token-sdk/src/encryption/discrete_log.rs index 355273d573120f..daf2edc379327f 100644 --- a/zk-token-sdk/src/encryption/discrete_log.rs +++ b/zk-token-sdk/src/encryption/discrete_log.rs @@ -17,7 +17,7 @@ #![cfg(not(target_os = "solana"))] use { - crate::encryption::errors::EncryptionError, + crate::encryption::errors::DiscreteLogError, curve25519_dalek::{ constants::RISTRETTO_BASEPOINT_POINT as G, ristretto::RistrettoPoint, @@ -100,10 +100,10 @@ impl DiscreteLog { } /// Adjusts number of threads in a discrete log instance. - pub fn num_threads(&mut self, num_threads: usize) -> Result<(), EncryptionError> { + pub fn num_threads(&mut self, num_threads: usize) -> Result<(), DiscreteLogError> { // number of threads must be a positive power-of-two integer if num_threads == 0 || (num_threads & (num_threads - 1)) != 0 || num_threads > 65536 { - return Err(EncryptionError::DiscreteLogThreads); + return Err(DiscreteLogError::DiscreteLogThreads); } self.num_threads = num_threads; @@ -117,9 +117,9 @@ impl DiscreteLog { pub fn set_compression_batch_size( &mut self, compression_batch_size: usize, - ) -> Result<(), EncryptionError> { + ) -> Result<(), DiscreteLogError> { if compression_batch_size >= TWO16 as usize { - return Err(EncryptionError::DiscreteLogBatchSize); + return Err(DiscreteLogError::DiscreteLogBatchSize); } self.compression_batch_size = compression_batch_size; diff --git a/zk-token-sdk/src/encryption/errors.rs b/zk-token-sdk/src/encryption/errors.rs index e076da08c5d012..d644787f5bd9ed 100644 --- a/zk-token-sdk/src/encryption/errors.rs +++ b/zk-token-sdk/src/encryption/errors.rs @@ -2,7 +2,7 @@ use thiserror::Error; #[derive(Error, Clone, Debug, Eq, PartialEq)] -pub enum EncryptionError { +pub enum DiscreteLogError { #[error("discrete log number of threads not power-of-two")] DiscreteLogThreads, #[error("discrete log batch size too large")] diff --git a/zk-token-sdk/src/errors.rs b/zk-token-sdk/src/errors.rs index 55e29fbec6b464..e9e36e43f73c18 100644 --- a/zk-token-sdk/src/errors.rs +++ b/zk-token-sdk/src/errors.rs @@ -10,30 +10,46 @@ pub enum ProofError { TransferAmount, #[error("proof generation failed")] Generation, - #[error("proof failed to verify")] - RangeProof, - #[error("equality proof failed to verify")] - EqualityProof, - #[error("fee proof failed to verify")] - FeeProof, - #[error("zero-balance proof failed to verify")] - ZeroBalanceProof, - #[error("validity proof failed to verify")] - ValidityProof, - #[error("public-key sigma proof failed to verify")] - PubkeySigmaProof, + #[error("proof verification failed")] + VerificationError(ProofType, ProofVerificationError), #[error("failed to decrypt ciphertext")] Decryption, #[error("invalid ciphertext data")] CiphertextDeserialization, - #[error("invalid scalar data")] - ScalarDeserialization, - #[error("invalid public key data")] + #[error("invalid pubkey data")] PubkeyDeserialization, - #[error("ciphertext does not exist in proof data")] + #[error("ciphertext does not exist in instruction data")] MissingCiphertext, - #[error("transfer amount split failed")] - TransferSplit, +} + +#[derive(Clone, Debug, Eq, PartialEq)] +pub enum ProofType { + EqualityProof, + ValidityProof, + ZeroBalanceProof, + FeeSigmaProof, + PubkeyValidityProof, + RangeProof, +} + +#[derive(Error, Clone, Debug, Eq, PartialEq)] +pub enum ProofVerificationError { + #[error("required algebraic relation does not hold")] + AlgebraicRelation, + #[error("malformed proof")] + Deserialization, + #[error("multiscalar multiplication failed")] + MultiscalarMul, + #[error("transcript failed to produce a challenge")] + Transcript(#[from] TranscriptError), + #[error( + "attempted to verify range proof with a non-power-of-two bit size or bit size is too big" + )] + InvalidBitSize, + #[error("insufficient generators for the proof")] + InvalidGeneratorsLength, + #[error("number of blinding factors do not match the number of values")] + WrongNumBlindingFactors, } #[derive(Error, Clone, Debug, Eq, PartialEq)] @@ -43,36 +59,36 @@ pub enum TranscriptError { } impl From for ProofError { - fn from(_err: RangeProofError) -> Self { - Self::RangeProof + fn from(err: RangeProofError) -> Self { + Self::VerificationError(ProofType::RangeProof, err.0) } } impl From for ProofError { - fn from(_err: EqualityProofError) -> Self { - Self::EqualityProof + fn from(err: EqualityProofError) -> Self { + Self::VerificationError(ProofType::EqualityProof, err.0) } } impl From for ProofError { - fn from(_err: FeeSigmaProofError) -> Self { - Self::FeeProof + fn from(err: FeeSigmaProofError) -> Self { + Self::VerificationError(ProofType::FeeSigmaProof, err.0) } } impl From for ProofError { - fn from(_err: ZeroBalanceProofError) -> Self { - Self::ZeroBalanceProof + fn from(err: ZeroBalanceProofError) -> Self { + Self::VerificationError(ProofType::ZeroBalanceProof, err.0) } } impl From for ProofError { - fn from(_err: ValidityProofError) -> Self { - Self::ValidityProof + fn from(err: ValidityProofError) -> Self { + Self::VerificationError(ProofType::ValidityProof, err.0) } } -impl From for ProofError { - fn from(_err: PubkeySigmaProofError) -> Self { - Self::PubkeySigmaProof +impl From for ProofError { + fn from(err: PubkeyValidityProofError) -> Self { + Self::VerificationError(ProofType::PubkeyValidityProof, err.0) } } diff --git a/zk-token-sdk/src/instruction/transfer.rs b/zk-token-sdk/src/instruction/transfer.rs index 9c45d567fb6230..bb55ed9d37d592 100644 --- a/zk-token-sdk/src/instruction/transfer.rs +++ b/zk-token-sdk/src/instruction/transfer.rs @@ -459,11 +459,11 @@ impl TransferPubkeys { let (source_pubkey, destination_pubkey, auditor_pubkey) = array_refs![bytes, 32, 32, 32]; let source_pubkey = - ElGamalPubkey::from_bytes(source_pubkey).ok_or(ProofError::Decryption)?; - let destination_pubkey = - ElGamalPubkey::from_bytes(destination_pubkey).ok_or(ProofError::Decryption)?; + ElGamalPubkey::from_bytes(source_pubkey).ok_or(ProofError::PubkeyDeserialization)?; + let destination_pubkey = ElGamalPubkey::from_bytes(destination_pubkey) + .ok_or(ProofError::PubkeyDeserialization)?; let auditor_pubkey = - ElGamalPubkey::from_bytes(auditor_pubkey).ok_or(ProofError::Decryption)?; + ElGamalPubkey::from_bytes(auditor_pubkey).ok_or(ProofError::PubkeyDeserialization)?; Ok(Self { source_pubkey, diff --git a/zk-token-sdk/src/macros.rs b/zk-token-sdk/src/macros.rs index 6351ba94224adb..cf7a3836e61d79 100644 --- a/zk-token-sdk/src/macros.rs +++ b/zk-token-sdk/src/macros.rs @@ -74,3 +74,13 @@ macro_rules! define_mul_variants { } }; } + +macro_rules! impl_from_transcript_error { + ($sigma_error_type:ty) => { + impl From for $sigma_error_type { + fn from(err: TranscriptError) -> Self { + ProofVerificationError::Transcript(err).into() + } + } + }; +} diff --git a/zk-token-sdk/src/range_proof/errors.rs b/zk-token-sdk/src/range_proof/errors.rs index b8766a2316a258..f832365fffc7ea 100644 --- a/zk-token-sdk/src/range_proof/errors.rs +++ b/zk-token-sdk/src/range_proof/errors.rs @@ -1,26 +1,10 @@ //! Errors related to proving and verifying range proofs. -use {crate::errors::TranscriptError, thiserror::Error}; +use { + crate::errors::{ProofVerificationError, TranscriptError}, + thiserror::Error, +}; #[derive(Error, Clone, Debug, Eq, PartialEq)] -pub enum RangeProofError { - #[error("the required algebraic relation does not hold")] - AlgebraicRelation, - #[error("malformed proof")] - Format, - #[error("attempted to create a proof with a non-power-of-two bitsize or bitsize too big")] - InvalidBitsize, - #[error("insufficient generators for the proof")] - InvalidGeneratorsLength, - #[error("multiscalar multiplication failed")] - MultiscalarMul, - #[error("transcript failed to produce a challenge")] - Transcript, - #[error("number of blinding factors do not match the number of values")] - WrongNumBlindingFactors, -} - -impl From for RangeProofError { - fn from(_err: TranscriptError) -> Self { - Self::Transcript - } -} +#[error("range proof verification failed: {0}")] +pub struct RangeProofError(#[from] pub(crate) ProofVerificationError); +impl_from_transcript_error!(RangeProofError); diff --git a/zk-token-sdk/src/range_proof/inner_product.rs b/zk-token-sdk/src/range_proof/inner_product.rs index 38af9d6edc260c..e61f077e4bd1fe 100644 --- a/zk-token-sdk/src/range_proof/inner_product.rs +++ b/zk-token-sdk/src/range_proof/inner_product.rs @@ -1,5 +1,6 @@ use { crate::{ + errors::ProofVerificationError, range_proof::{errors::RangeProofError, util}, transcript::TranscriptProtocol, }, @@ -208,10 +209,10 @@ impl InnerProductProof { if lg_n >= 32 { // 4 billion multiplications should be enough for anyone // and this check prevents overflow in 1<, _>>()?; let Rs = self .R_vec .iter() - .map(|p| p.decompress().ok_or(RangeProofError::Format)) + .map(|p| { + p.decompress() + .ok_or(ProofVerificationError::Deserialization) + }) .collect::, _>>()?; let expect_P = RistrettoPoint::vartime_multiscalar_mul( @@ -323,7 +330,7 @@ impl InnerProductProof { if expect_P == *P { Ok(()) } else { - Err(RangeProofError::AlgebraicRelation) + Err(ProofVerificationError::AlgebraicRelation.into()) } } @@ -360,18 +367,18 @@ impl InnerProductProof { pub fn from_bytes(slice: &[u8]) -> Result { let b = slice.len(); if b % 32 != 0 { - return Err(RangeProofError::Format); + return Err(ProofVerificationError::Deserialization.into()); } let num_elements = b / 32; if num_elements < 2 { - return Err(RangeProofError::Format); + return Err(ProofVerificationError::Deserialization.into()); } if (num_elements - 2) % 2 != 0 { - return Err(RangeProofError::Format); + return Err(ProofVerificationError::Deserialization.into()); } let lg_n = (num_elements - 2) / 2; if lg_n >= 32 { - return Err(RangeProofError::Format); + return Err(ProofVerificationError::Deserialization.into()); } let mut L_vec: Vec = Vec::with_capacity(lg_n); @@ -384,9 +391,9 @@ impl InnerProductProof { let pos = 2 * lg_n * 32; let a = Scalar::from_canonical_bytes(util::read32(&slice[pos..])) - .ok_or(RangeProofError::Format)?; + .ok_or(ProofVerificationError::Deserialization)?; let b = Scalar::from_canonical_bytes(util::read32(&slice[pos + 32..])) - .ok_or(RangeProofError::Format)?; + .ok_or(ProofVerificationError::Deserialization)?; Ok(InnerProductProof { L_vec, R_vec, a, b }) } diff --git a/zk-token-sdk/src/range_proof/mod.rs b/zk-token-sdk/src/range_proof/mod.rs index 2a19e8728e088e..f357bc88f7de0a 100644 --- a/zk-token-sdk/src/range_proof/mod.rs +++ b/zk-token-sdk/src/range_proof/mod.rs @@ -8,6 +8,7 @@ use { use { crate::{ encryption::pedersen::{G, H}, + errors::ProofVerificationError, range_proof::{ errors::RangeProofError, generators::BulletproofGens, inner_product::InnerProductProof, }, @@ -232,7 +233,7 @@ impl RangeProof { let bp_gens = BulletproofGens::new(nm); if !nm.is_power_of_two() { - return Err(RangeProofError::InvalidBitsize); + return Err(ProofVerificationError::InvalidBitSize.into()); } // append proof data to transcript and derive appropriate challenge scalars @@ -310,12 +311,12 @@ impl RangeProof { .chain(bp_gens.H(nm).map(|&x| Some(x))) .chain(comms.iter().map(|V| Some(*V.get_point()))), ) - .ok_or(RangeProofError::MultiscalarMul)?; + .ok_or(ProofVerificationError::MultiscalarMul)?; if mega_check.is_identity() { Ok(()) } else { - Err(RangeProofError::AlgebraicRelation) + Err(ProofVerificationError::AlgebraicRelation.into()) } } @@ -338,10 +339,10 @@ impl RangeProof { // changed. pub fn from_bytes(slice: &[u8]) -> Result { if slice.len() % 32 != 0 { - return Err(RangeProofError::Format); + return Err(ProofVerificationError::Deserialization.into()); } if slice.len() < 7 * 32 { - return Err(RangeProofError::Format); + return Err(ProofVerificationError::Deserialization.into()); } let A = CompressedRistretto(util::read32(&slice[0..])); @@ -350,11 +351,11 @@ impl RangeProof { let T_2 = CompressedRistretto(util::read32(&slice[3 * 32..])); let t_x = Scalar::from_canonical_bytes(util::read32(&slice[4 * 32..])) - .ok_or(RangeProofError::Format)?; + .ok_or(ProofVerificationError::Deserialization)?; let t_x_blinding = Scalar::from_canonical_bytes(util::read32(&slice[5 * 32..])) - .ok_or(RangeProofError::Format)?; + .ok_or(ProofVerificationError::Deserialization)?; let e_blinding = Scalar::from_canonical_bytes(util::read32(&slice[6 * 32..])) - .ok_or(RangeProofError::Format)?; + .ok_or(ProofVerificationError::Deserialization)?; let ipp_proof = InnerProductProof::from_bytes(&slice[7 * 32..])?; diff --git a/zk-token-sdk/src/sigma_proofs/equality_proof.rs b/zk-token-sdk/src/sigma_proofs/equality_proof.rs index 79df896cec2a79..02df193e3152f2 100644 --- a/zk-token-sdk/src/sigma_proofs/equality_proof.rs +++ b/zk-token-sdk/src/sigma_proofs/equality_proof.rs @@ -12,9 +12,12 @@ #[cfg(not(target_os = "solana"))] use { - crate::encryption::{ - elgamal::{ElGamalCiphertext, ElGamalKeypair, ElGamalPubkey}, - pedersen::{PedersenCommitment, PedersenOpening, G, H}, + crate::{ + encryption::{ + elgamal::{ElGamalCiphertext, ElGamalKeypair, ElGamalPubkey}, + pedersen::{PedersenCommitment, PedersenOpening, G, H}, + }, + errors::ProofVerificationError, }, curve25519_dalek::traits::MultiscalarMul, rand::rngs::OsRng, @@ -153,9 +156,18 @@ impl CtxtCommEqualityProof { let ww_negated = -&ww; // check that the required algebraic condition holds - let Y_0 = self.Y_0.decompress().ok_or(EqualityProofError::Format)?; - let Y_1 = self.Y_1.decompress().ok_or(EqualityProofError::Format)?; - let Y_2 = self.Y_2.decompress().ok_or(EqualityProofError::Format)?; + let Y_0 = self + .Y_0 + .decompress() + .ok_or(ProofVerificationError::Deserialization)?; + let Y_1 = self + .Y_1 + .decompress() + .ok_or(ProofVerificationError::Deserialization)?; + let Y_2 = self + .Y_2 + .decompress() + .ok_or(ProofVerificationError::Deserialization)?; let check = RistrettoPoint::vartime_multiscalar_mul( vec![ @@ -189,7 +201,7 @@ impl CtxtCommEqualityProof { if check.is_identity() { Ok(()) } else { - Err(EqualityProofError::AlgebraicRelation) + Err(ProofVerificationError::AlgebraicRelation.into()) } } @@ -206,7 +218,7 @@ impl CtxtCommEqualityProof { pub fn from_bytes(bytes: &[u8]) -> Result { if bytes.len() != 192 { - return Err(EqualityProofError::Format); + return Err(ProofVerificationError::Deserialization.into()); } let bytes = array_ref![bytes, 0, 192]; @@ -216,9 +228,12 @@ impl CtxtCommEqualityProof { let Y_1 = CompressedRistretto::from_slice(Y_1); let Y_2 = CompressedRistretto::from_slice(Y_2); - let z_s = Scalar::from_canonical_bytes(*z_s).ok_or(EqualityProofError::Format)?; - let z_x = Scalar::from_canonical_bytes(*z_x).ok_or(EqualityProofError::Format)?; - let z_r = Scalar::from_canonical_bytes(*z_r).ok_or(EqualityProofError::Format)?; + let z_s = + Scalar::from_canonical_bytes(*z_s).ok_or(ProofVerificationError::Deserialization)?; + let z_x = + Scalar::from_canonical_bytes(*z_x).ok_or(ProofVerificationError::Deserialization)?; + let z_r = + Scalar::from_canonical_bytes(*z_r).ok_or(ProofVerificationError::Deserialization)?; Ok(CtxtCommEqualityProof { Y_0, @@ -368,10 +383,22 @@ impl CtxtCtxtEqualityProof { let www_negated = -&www; // check that the required algebraic condition holds - let Y_0 = self.Y_0.decompress().ok_or(EqualityProofError::Format)?; - let Y_1 = self.Y_1.decompress().ok_or(EqualityProofError::Format)?; - let Y_2 = self.Y_2.decompress().ok_or(EqualityProofError::Format)?; - let Y_3 = self.Y_3.decompress().ok_or(EqualityProofError::Format)?; + let Y_0 = self + .Y_0 + .decompress() + .ok_or(ProofVerificationError::Deserialization)?; + let Y_1 = self + .Y_1 + .decompress() + .ok_or(ProofVerificationError::Deserialization)?; + let Y_2 = self + .Y_2 + .decompress() + .ok_or(ProofVerificationError::Deserialization)?; + let Y_3 = self + .Y_3 + .decompress() + .ok_or(ProofVerificationError::Deserialization)?; let check = RistrettoPoint::vartime_multiscalar_mul( vec![ @@ -411,7 +438,7 @@ impl CtxtCtxtEqualityProof { if check.is_identity() { Ok(()) } else { - Err(EqualityProofError::AlgebraicRelation) + Err(ProofVerificationError::AlgebraicRelation.into()) } } @@ -429,7 +456,7 @@ impl CtxtCtxtEqualityProof { pub fn from_bytes(bytes: &[u8]) -> Result { if bytes.len() != 224 { - return Err(EqualityProofError::Format); + return Err(ProofVerificationError::Deserialization.into()); } let bytes = array_ref![bytes, 0, 224]; @@ -440,9 +467,12 @@ impl CtxtCtxtEqualityProof { let Y_2 = CompressedRistretto::from_slice(Y_2); let Y_3 = CompressedRistretto::from_slice(Y_3); - let z_s = Scalar::from_canonical_bytes(*z_s).ok_or(EqualityProofError::Format)?; - let z_x = Scalar::from_canonical_bytes(*z_x).ok_or(EqualityProofError::Format)?; - let z_r = Scalar::from_canonical_bytes(*z_r).ok_or(EqualityProofError::Format)?; + let z_s = + Scalar::from_canonical_bytes(*z_s).ok_or(ProofVerificationError::Deserialization)?; + let z_x = + Scalar::from_canonical_bytes(*z_x).ok_or(ProofVerificationError::Deserialization)?; + let z_r = + Scalar::from_canonical_bytes(*z_r).ok_or(ProofVerificationError::Deserialization)?; Ok(CtxtCtxtEqualityProof { Y_0, diff --git a/zk-token-sdk/src/sigma_proofs/errors.rs b/zk-token-sdk/src/sigma_proofs/errors.rs index b42d8c96bb4a94..117d5c44d382ee 100644 --- a/zk-token-sdk/src/sigma_proofs/errors.rs +++ b/zk-token-sdk/src/sigma_proofs/errors.rs @@ -1,92 +1,30 @@ //! Errors related to proving and verifying sigma proofs. -use {crate::errors::TranscriptError, thiserror::Error}; +use { + crate::errors::{ProofVerificationError, TranscriptError}, + thiserror::Error, +}; #[derive(Error, Clone, Debug, Eq, PartialEq)] -pub enum EqualityProofError { - #[error("the required algebraic relation does not hold")] - AlgebraicRelation, - #[error("malformed proof")] - Format, - #[error("multiscalar multiplication failed")] - MultiscalarMul, - #[error("transcript failed to produce a challenge")] - Transcript, -} - -impl From for EqualityProofError { - fn from(_err: TranscriptError) -> Self { - Self::Transcript - } -} +#[error("equality proof verification failed: {0}")] +pub struct EqualityProofError(#[from] pub(crate) ProofVerificationError); +impl_from_transcript_error!(EqualityProofError); #[derive(Error, Clone, Debug, Eq, PartialEq)] -pub enum ValidityProofError { - #[error("the required algebraic relation does not hold")] - AlgebraicRelation, - #[error("malformed proof")] - Format, - #[error("multiscalar multiplication failed")] - MultiscalarMul, - #[error("transcript failed to produce a challenge")] - Transcript, -} - -impl From for ValidityProofError { - fn from(_err: TranscriptError) -> Self { - Self::Transcript - } -} +#[error("validity proof verification failed: {0}")] +pub struct ValidityProofError(#[from] pub(crate) ProofVerificationError); +impl_from_transcript_error!(ValidityProofError); #[derive(Error, Clone, Debug, Eq, PartialEq)] -pub enum ZeroBalanceProofError { - #[error("the required algebraic relation does not hold")] - AlgebraicRelation, - #[error("malformed proof")] - Format, - #[error("multiscalar multiplication failed")] - MultiscalarMul, - #[error("transcript failed to produce a challenge")] - Transcript, -} - -impl From for ZeroBalanceProofError { - fn from(_err: TranscriptError) -> Self { - Self::Transcript - } -} +#[error("zero-balance proof verification failed: {0}")] +pub struct ZeroBalanceProofError(#[from] pub(crate) ProofVerificationError); +impl_from_transcript_error!(ZeroBalanceProofError); #[derive(Error, Clone, Debug, Eq, PartialEq)] -pub enum FeeSigmaProofError { - #[error("the required algebraic relation does not hold")] - AlgebraicRelation, - #[error("malformed proof")] - Format, - #[error("multiscalar multiplication failed")] - MultiscalarMul, - #[error("transcript failed to produce a challenge")] - Transcript, -} - -impl From for FeeSigmaProofError { - fn from(_err: TranscriptError) -> Self { - Self::Transcript - } -} +#[error("fee sigma proof verification failed: {0}")] +pub struct FeeSigmaProofError(#[from] pub(crate) ProofVerificationError); +impl_from_transcript_error!(FeeSigmaProofError); #[derive(Error, Clone, Debug, Eq, PartialEq)] -pub enum PubkeySigmaProofError { - #[error("the required algebraic relation does not hold")] - AlgebraicRelation, - #[error("malformed proof")] - Format, - #[error("multiscalar multiplication failed")] - MultiscalarMul, - #[error("transcript failed to produce a challenge")] - Transcript, -} - -impl From for PubkeySigmaProofError { - fn from(_err: TranscriptError) -> Self { - Self::Transcript - } -} +#[error("public key validity proof verification failed: {0}")] +pub struct PubkeyValidityProofError(#[from] pub(crate) ProofVerificationError); +impl_from_transcript_error!(PubkeyValidityProofError); diff --git a/zk-token-sdk/src/sigma_proofs/fee_proof.rs b/zk-token-sdk/src/sigma_proofs/fee_proof.rs index ff70586bfd9c2d..6602a6c15eb174 100644 --- a/zk-token-sdk/src/sigma_proofs/fee_proof.rs +++ b/zk-token-sdk/src/sigma_proofs/fee_proof.rs @@ -8,7 +8,10 @@ use { rand::rngs::OsRng, }; use { - crate::{sigma_proofs::errors::FeeSigmaProofError, transcript::TranscriptProtocol}, + crate::{ + errors::ProofVerificationError, sigma_proofs::errors::FeeSigmaProofError, + transcript::TranscriptProtocol, + }, arrayref::{array_ref, array_refs}, curve25519_dalek::{ ristretto::{CompressedRistretto, RistrettoPoint}, @@ -284,19 +287,19 @@ impl FeeSigmaProof { .fee_max_proof .Y_max_proof .decompress() - .ok_or(FeeSigmaProofError::Format)?; + .ok_or(ProofVerificationError::Deserialization)?; let z_max = self.fee_max_proof.z_max_proof; let Y_delta_real = self .fee_equality_proof .Y_delta .decompress() - .ok_or(FeeSigmaProofError::Format)?; + .ok_or(ProofVerificationError::Deserialization)?; let Y_claimed = self .fee_equality_proof .Y_claimed .decompress() - .ok_or(FeeSigmaProofError::Format)?; + .ok_or(ProofVerificationError::Deserialization)?; let z_x = self.fee_equality_proof.z_x; let z_delta_real = self.fee_equality_proof.z_delta; let z_claimed = self.fee_equality_proof.z_claimed; @@ -342,7 +345,7 @@ impl FeeSigmaProof { if check.is_identity() { Ok(()) } else { - Err(FeeSigmaProofError::AlgebraicRelation) + Err(ProofVerificationError::AlgebraicRelation.into()) } } @@ -361,7 +364,7 @@ impl FeeSigmaProof { pub fn from_bytes(bytes: &[u8]) -> Result { if bytes.len() != 256 { - return Err(FeeSigmaProofError::Format); + return Err(ProofVerificationError::Deserialization.into()); } let bytes = array_ref![bytes, 0, 256]; @@ -369,17 +372,19 @@ impl FeeSigmaProof { array_refs![bytes, 32, 32, 32, 32, 32, 32, 32, 32]; let Y_max_proof = CompressedRistretto::from_slice(Y_max_proof); - let z_max_proof = - Scalar::from_canonical_bytes(*z_max_proof).ok_or(FeeSigmaProofError::Format)?; - let c_max_proof = - Scalar::from_canonical_bytes(*c_max_proof).ok_or(FeeSigmaProofError::Format)?; + let z_max_proof = Scalar::from_canonical_bytes(*z_max_proof) + .ok_or(ProofVerificationError::Deserialization)?; + let c_max_proof = Scalar::from_canonical_bytes(*c_max_proof) + .ok_or(ProofVerificationError::Deserialization)?; let Y_delta = CompressedRistretto::from_slice(Y_delta); let Y_claimed = CompressedRistretto::from_slice(Y_claimed); - let z_x = Scalar::from_canonical_bytes(*z_x).ok_or(FeeSigmaProofError::Format)?; - let z_delta = Scalar::from_canonical_bytes(*z_delta).ok_or(FeeSigmaProofError::Format)?; - let z_claimed = - Scalar::from_canonical_bytes(*z_claimed).ok_or(FeeSigmaProofError::Format)?; + let z_x = + Scalar::from_canonical_bytes(*z_x).ok_or(ProofVerificationError::Deserialization)?; + let z_delta = Scalar::from_canonical_bytes(*z_delta) + .ok_or(ProofVerificationError::Deserialization)?; + let z_claimed = Scalar::from_canonical_bytes(*z_claimed) + .ok_or(ProofVerificationError::Deserialization)?; Ok(Self { fee_max_proof: FeeMaxProof { diff --git a/zk-token-sdk/src/sigma_proofs/pubkey_proof.rs b/zk-token-sdk/src/sigma_proofs/pubkey_proof.rs index 79378ff80556bc..bd611fc8156b3a 100644 --- a/zk-token-sdk/src/sigma_proofs/pubkey_proof.rs +++ b/zk-token-sdk/src/sigma_proofs/pubkey_proof.rs @@ -17,7 +17,10 @@ use { zeroize::Zeroize, }; use { - crate::{sigma_proofs::errors::PubkeySigmaProofError, transcript::TranscriptProtocol}, + crate::{ + errors::ProofVerificationError, sigma_proofs::errors::PubkeyValidityProofError, + transcript::TranscriptProtocol, + }, arrayref::{array_ref, array_refs}, curve25519_dalek::{ ristretto::{CompressedRistretto, RistrettoPoint}, @@ -87,7 +90,7 @@ impl PubkeySigmaProof { self, elgamal_pubkey: &ElGamalPubkey, transcript: &mut Transcript, - ) -> Result<(), PubkeySigmaProofError> { + ) -> Result<(), PubkeyValidityProofError> { transcript.pubkey_proof_domain_sep(); // extract the relvant scalar and Ristretto points from the input @@ -98,7 +101,10 @@ impl PubkeySigmaProof { let c = transcript.challenge_scalar(b"c"); // check that the required algebraic condition holds - let Y = self.Y.decompress().ok_or(PubkeySigmaProofError::Format)?; + let Y = self + .Y + .decompress() + .ok_or(ProofVerificationError::Deserialization)?; let check = RistrettoPoint::vartime_multiscalar_mul( vec![&self.z, &(-&c), &(-&Scalar::one())], @@ -108,7 +114,7 @@ impl PubkeySigmaProof { if check.is_identity() { Ok(()) } else { - Err(PubkeySigmaProofError::AlgebraicRelation) + Err(ProofVerificationError::AlgebraicRelation.into()) } } @@ -119,16 +125,16 @@ impl PubkeySigmaProof { buf } - pub fn from_bytes(bytes: &[u8]) -> Result { + pub fn from_bytes(bytes: &[u8]) -> Result { if bytes.len() != 64 { - return Err(PubkeySigmaProofError::Format); + return Err(ProofVerificationError::Deserialization.into()); } let bytes = array_ref![bytes, 0, 64]; let (Y, z) = array_refs![bytes, 32, 32]; let Y = CompressedRistretto::from_slice(Y); - let z = Scalar::from_canonical_bytes(*z).ok_or(PubkeySigmaProofError::Format)?; + let z = Scalar::from_canonical_bytes(*z).ok_or(ProofVerificationError::Deserialization)?; Ok(PubkeySigmaProof { Y, z }) } diff --git a/zk-token-sdk/src/sigma_proofs/validity_proof.rs b/zk-token-sdk/src/sigma_proofs/validity_proof.rs index de45beaf0fccec..ee55d0c0236e9e 100644 --- a/zk-token-sdk/src/sigma_proofs/validity_proof.rs +++ b/zk-token-sdk/src/sigma_proofs/validity_proof.rs @@ -10,9 +10,12 @@ #[cfg(not(target_os = "solana"))] use { - crate::encryption::{ - elgamal::{DecryptHandle, ElGamalPubkey}, - pedersen::{PedersenCommitment, PedersenOpening, G, H}, + crate::{ + encryption::{ + elgamal::{DecryptHandle, ElGamalPubkey}, + pedersen::{PedersenCommitment, PedersenOpening, G, H}, + }, + errors::ProofVerificationError, }, curve25519_dalek::traits::MultiscalarMul, rand::rngs::OsRng, @@ -137,9 +140,18 @@ impl ValidityProof { let ww_negated = -&ww; // check the required algebraic conditions - let Y_0 = self.Y_0.decompress().ok_or(ValidityProofError::Format)?; - let Y_1 = self.Y_1.decompress().ok_or(ValidityProofError::Format)?; - let Y_2 = self.Y_2.decompress().ok_or(ValidityProofError::Format)?; + let Y_0 = self + .Y_0 + .decompress() + .ok_or(ProofVerificationError::Deserialization)?; + let Y_1 = self + .Y_1 + .decompress() + .ok_or(ProofVerificationError::Deserialization)?; + let Y_2 = self + .Y_2 + .decompress() + .ok_or(ProofVerificationError::Deserialization)?; let P_dest = destination_pubkey.get_point(); let P_auditor = auditor_pubkey.get_point(); @@ -178,7 +190,7 @@ impl ValidityProof { if check.is_identity() { Ok(()) } else { - Err(ValidityProofError::AlgebraicRelation) + Err(ProofVerificationError::AlgebraicRelation.into()) } } @@ -194,7 +206,7 @@ impl ValidityProof { pub fn from_bytes(bytes: &[u8]) -> Result { if bytes.len() != 160 { - return Err(ValidityProofError::Format); + return Err(ProofVerificationError::Deserialization.into()); } let bytes = array_ref![bytes, 0, 160]; @@ -204,8 +216,10 @@ impl ValidityProof { let Y_1 = CompressedRistretto::from_slice(Y_1); let Y_2 = CompressedRistretto::from_slice(Y_2); - let z_r = Scalar::from_canonical_bytes(*z_r).ok_or(ValidityProofError::Format)?; - let z_x = Scalar::from_canonical_bytes(*z_x).ok_or(ValidityProofError::Format)?; + let z_r = + Scalar::from_canonical_bytes(*z_r).ok_or(ProofVerificationError::Deserialization)?; + let z_x = + Scalar::from_canonical_bytes(*z_x).ok_or(ProofVerificationError::Deserialization)?; Ok(ValidityProof { Y_0, diff --git a/zk-token-sdk/src/sigma_proofs/zero_balance_proof.rs b/zk-token-sdk/src/sigma_proofs/zero_balance_proof.rs index cf77cd0a875abb..14afd2830eb430 100644 --- a/zk-token-sdk/src/sigma_proofs/zero_balance_proof.rs +++ b/zk-token-sdk/src/sigma_proofs/zero_balance_proof.rs @@ -9,9 +9,12 @@ #[cfg(not(target_os = "solana"))] use { - crate::encryption::{ - elgamal::{ElGamalCiphertext, ElGamalKeypair, ElGamalPubkey}, - pedersen::H, + crate::{ + encryption::{ + elgamal::{ElGamalCiphertext, ElGamalKeypair, ElGamalPubkey}, + pedersen::H, + }, + errors::ProofVerificationError, }, curve25519_dalek::traits::MultiscalarMul, rand::rngs::OsRng, @@ -117,8 +120,14 @@ impl ZeroBalanceProof { let w_negated = -&w; // decompress Y or return verification error - let Y_P = self.Y_P.decompress().ok_or(ZeroBalanceProofError::Format)?; - let Y_D = self.Y_D.decompress().ok_or(ZeroBalanceProofError::Format)?; + let Y_P = self + .Y_P + .decompress() + .ok_or(ProofVerificationError::Deserialization)?; + let Y_D = self + .Y_D + .decompress() + .ok_or(ProofVerificationError::Deserialization)?; // check the required algebraic relation let check = RistrettoPoint::multiscalar_mul( @@ -143,7 +152,7 @@ impl ZeroBalanceProof { if check.is_identity() { Ok(()) } else { - Err(ZeroBalanceProofError::AlgebraicRelation) + Err(ProofVerificationError::AlgebraicRelation.into()) } } @@ -157,7 +166,7 @@ impl ZeroBalanceProof { pub fn from_bytes(bytes: &[u8]) -> Result { if bytes.len() != 96 { - return Err(ZeroBalanceProofError::Format); + return Err(ProofVerificationError::Deserialization.into()); } let bytes = array_ref![bytes, 0, 96]; @@ -166,7 +175,7 @@ impl ZeroBalanceProof { let Y_P = CompressedRistretto::from_slice(Y_P); let Y_D = CompressedRistretto::from_slice(Y_D); - let z = Scalar::from_canonical_bytes(*z).ok_or(ZeroBalanceProofError::Format)?; + let z = Scalar::from_canonical_bytes(*z).ok_or(ProofVerificationError::Deserialization)?; Ok(ZeroBalanceProof { Y_P, Y_D, z }) } diff --git a/zk-token-sdk/src/zk_token_elgamal/convert.rs b/zk-token-sdk/src/zk_token_elgamal/convert.rs index 108bc4acaed479..a327b3f2dc44c4 100644 --- a/zk-token-sdk/src/zk_token_elgamal/convert.rs +++ b/zk-token-sdk/src/zk_token_elgamal/convert.rs @@ -57,7 +57,7 @@ mod target_arch { elgamal::{DecryptHandle, ElGamalCiphertext, ElGamalPubkey}, pedersen::PedersenCommitment, }, - errors::ProofError, + errors::{ProofError, ProofVerificationError}, instruction::{ transfer::{TransferAmountEncryption, TransferPubkeys}, transfer_with_fee::{FeeEncryption, FeeParameters, TransferWithFeePubkeys}, @@ -282,7 +282,7 @@ mod target_arch { } impl TryFrom for PubkeySigmaProof { - type Error = PubkeySigmaProofError; + type Error = PubkeyValidityProofError; fn try_from(pod: pod::PubkeySigmaProof) -> Result { Self::from_bytes(&pod.0) @@ -294,7 +294,7 @@ mod target_arch { fn try_from(proof: RangeProof) -> Result { if proof.ipp_proof.serialized_size() != 448 { - return Err(RangeProofError::Format); + return Err(ProofVerificationError::Deserialization.into()); } let mut buf = [0_u8; 672]; @@ -324,7 +324,7 @@ mod target_arch { fn try_from(proof: RangeProof) -> Result { if proof.ipp_proof.serialized_size() != 512 { - return Err(RangeProofError::Format); + return Err(ProofVerificationError::Deserialization.into()); } let mut buf = [0_u8; 736]; @@ -354,7 +354,7 @@ mod target_arch { fn try_from(proof: RangeProof) -> Result { if proof.ipp_proof.serialized_size() != 576 { - return Err(RangeProofError::Format); + return Err(ProofVerificationError::Deserialization.into()); } let mut buf = [0_u8; 800]; From 3a27560398351fe9b67d9c6c67dc63a085526b60 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Fri, 2 Dec 2022 18:27:35 +0000 Subject: [PATCH 248/465] Fix - Turns binary `&` into logical `&&` in `translate_slice_inner()`. (backport #29038) (#29039) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fix - Turns binary `&` into logical `&&` in `translate_slice_inner()`. (#29038) Turns binary & into logical && in translate_slice_inner(). (cherry picked from commit 0475c2f0af435fcfa57d78e5be134811d13efcc8) Co-authored-by: Alexander Meißner --- programs/bpf_loader/src/syscalls/mod.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/programs/bpf_loader/src/syscalls/mod.rs b/programs/bpf_loader/src/syscalls/mod.rs index 1d8776eb444c8b..0d76988aa43145 100644 --- a/programs/bpf_loader/src/syscalls/mod.rs +++ b/programs/bpf_loader/src/syscalls/mod.rs @@ -445,7 +445,7 @@ fn translate_slice_inner<'a, T>( } let total_size = len.saturating_mul(size_of::() as u64); - if check_size & isize::try_from(total_size).is_err() { + if check_size && isize::try_from(total_size).is_err() { return Err(SyscallError::InvalidLength.into()); } From df75b7b1ed0cbc04dd6fcbd5b53303ddc2c73ade Mon Sep 17 00:00:00 2001 From: "Jeff Washington (jwash)" Date: Fri, 2 Dec 2022 15:49:31 -0600 Subject: [PATCH 249/465] revert rehash due to rent_epoch change (#28943) Revert "feature: on accounts hash calculation, do not try to rehash accounts #28934" This reverts commit 7ff7691245b3e4663846a9258af0b67767ca75cd. --- accounts-bench/src/main.rs | 4 +- core/src/accounts_hash_verifier.rs | 5 - runtime/benches/accounts.rs | 5 +- runtime/src/accounts.rs | 4 - runtime/src/accounts_background_service.rs | 1 - runtime/src/accounts_db.rs | 85 +- runtime/src/accounts_hash.rs | 2 - runtime/src/bank.rs | 12 - runtime/src/expected_rent_collection.rs | 1309 -------------------- runtime/src/lib.rs | 1 - runtime/src/snapshot_package.rs | 4 - runtime/src/snapshot_utils.rs | 6 +- 12 files changed, 8 insertions(+), 1430 deletions(-) delete mode 100644 runtime/src/expected_rent_collection.rs diff --git a/accounts-bench/src/main.rs b/accounts-bench/src/main.rs index 398e5a7735247c..987915d8c9fe15 100644 --- a/accounts-bench/src/main.rs +++ b/accounts-bench/src/main.rs @@ -10,7 +10,7 @@ use { test_utils::{create_test_accounts, update_accounts_bench}, Accounts, }, - accounts_db::{AccountShrinkThreshold, TEST_DISABLE_REHASH_FOR_RENT_EPOCH}, + accounts_db::AccountShrinkThreshold, accounts_index::AccountSecondaryIndexes, ancestors::Ancestors, rent_collector::RentCollector, @@ -125,7 +125,6 @@ fn main() { &ancestors, &EpochSchedule::default(), &RentCollector::default(), - TEST_DISABLE_REHASH_FOR_RENT_EPOCH, ); time.stop(); let mut time_store = Measure::start("hash using store"); @@ -139,7 +138,6 @@ fn main() { &EpochSchedule::default(), &RentCollector::default(), false, - TEST_DISABLE_REHASH_FOR_RENT_EPOCH, ); time_store.stop(); if results != results_store { diff --git a/core/src/accounts_hash_verifier.rs b/core/src/accounts_hash_verifier.rs index ac64de9141ae21..b8bc425c4a33d3 100644 --- a/core/src/accounts_hash_verifier.rs +++ b/core/src/accounts_hash_verifier.rs @@ -143,7 +143,6 @@ impl AccountsHashVerifier { rent_collector: &accounts_package.rent_collector, store_detailed_debug_info_on_failure: false, full_snapshot: None, - disable_rehash_for_rent_epoch: accounts_package.disable_rehash_for_rent_epoch, }, &sorted_storages, timings, @@ -167,8 +166,6 @@ impl AccountsHashVerifier { // now that we've failed, store off the failing contents that produced a bad capitalization store_detailed_debug_info_on_failure: true, full_snapshot: None, - disable_rehash_for_rent_epoch: accounts_package - .disable_rehash_for_rent_epoch, }, &sorted_storages, HashStats::default(), @@ -339,7 +336,6 @@ mod tests { super::*, solana_gossip::{cluster_info::make_accounts_hashes_message, contact_info::ContactInfo}, solana_runtime::{ - accounts_db::TEST_DISABLE_REHASH_FOR_RENT_EPOCH, rent_collector::RentCollector, snapshot_utils::{ArchiveFormat, SnapshotVersion}, }, @@ -433,7 +429,6 @@ mod tests { accounts: Arc::clone(&accounts), epoch_schedule: EpochSchedule::default(), rent_collector: RentCollector::default(), - disable_rehash_for_rent_epoch: TEST_DISABLE_REHASH_FOR_RENT_EPOCH, }; AccountsHashVerifier::process_accounts_package( diff --git a/runtime/benches/accounts.rs b/runtime/benches/accounts.rs index 9ae61486504618..27f22de6634ae0 100644 --- a/runtime/benches/accounts.rs +++ b/runtime/benches/accounts.rs @@ -9,7 +9,7 @@ use { rayon::iter::{IntoParallelRefIterator, ParallelIterator}, solana_runtime::{ accounts::{test_utils::create_test_accounts, AccountAddressFilter, Accounts}, - accounts_db::{AccountShrinkThreshold, TEST_DISABLE_REHASH_FOR_RENT_EPOCH}, + accounts_db::AccountShrinkThreshold, accounts_index::{AccountSecondaryIndexes, ScanConfig}, ancestors::Ancestors, bank::*, @@ -114,7 +114,6 @@ fn test_accounts_hash_bank_hash(bencher: &mut Bencher) { &ancestors, &EpochSchedule::default(), &RentCollector::default(), - TEST_DISABLE_REHASH_FOR_RENT_EPOCH, ); let test_hash_calculation = false; bencher.iter(|| { @@ -129,7 +128,6 @@ fn test_accounts_hash_bank_hash(bencher: &mut Bencher) { false, false, false, - TEST_DISABLE_REHASH_FOR_RENT_EPOCH, )) }); } @@ -153,7 +151,6 @@ fn test_update_accounts_hash(bencher: &mut Bencher) { &ancestors, &EpochSchedule::default(), &RentCollector::default(), - TEST_DISABLE_REHASH_FOR_RENT_EPOCH, ); }); } diff --git a/runtime/src/accounts.rs b/runtime/src/accounts.rs index b9104414f46cbf..68b9062923ce9f 100644 --- a/runtime/src/accounts.rs +++ b/runtime/src/accounts.rs @@ -814,7 +814,6 @@ impl Accounts { debug_verify: bool, epoch_schedule: &EpochSchedule, rent_collector: &RentCollector, - disable_rehash_for_rent_epoch: bool, ) -> u64 { let use_index = false; let is_startup = true; @@ -829,7 +828,6 @@ impl Accounts { epoch_schedule, rent_collector, is_startup, - disable_rehash_for_rent_epoch, ) .1 } @@ -849,7 +847,6 @@ impl Accounts { ignore_mismatch: bool, store_detailed_debug_info: bool, use_bg_thread_pool: bool, - disable_rehash_for_rent_epoch: bool, ) -> bool { if let Err(err) = self.accounts_db.verify_bank_hash_and_lamports_new( slot, @@ -862,7 +859,6 @@ impl Accounts { ignore_mismatch, store_detailed_debug_info, use_bg_thread_pool, - disable_rehash_for_rent_epoch, ) { warn!("verify_bank_hash failed: {:?}, slot: {}", err, slot); false diff --git a/runtime/src/accounts_background_service.rs b/runtime/src/accounts_background_service.rs index 185228d3679ba7..9ba12f742dafe0 100644 --- a/runtime/src/accounts_background_service.rs +++ b/runtime/src/accounts_background_service.rs @@ -244,7 +244,6 @@ impl SnapshotRequestHandler { rent_collector: snapshot_root_bank.rent_collector(), store_detailed_debug_info_on_failure: false, full_snapshot: None, - disable_rehash_for_rent_epoch: snapshot_root_bank.feature_set.is_active(&solana_sdk::feature_set::disable_rehash_for_rent_epoch::id()), }, ).unwrap(); assert_eq!(previous_hash, this_hash); diff --git a/runtime/src/accounts_db.rs b/runtime/src/accounts_db.rs index c21590f78888da..ad28f3c308b7bd 100644 --- a/runtime/src/accounts_db.rs +++ b/runtime/src/accounts_db.rs @@ -45,7 +45,6 @@ use { bank::Rewrites, cache_hash_data::CacheHashData, contains::Contains, - expected_rent_collection::{ExpectedRentCollection, SlotInfoInEpoch}, pubkey_bins::PubkeyBinCalculator24, read_only_accounts_cache::ReadOnlyAccountsCache, rent_collector::RentCollector, @@ -114,8 +113,6 @@ pub const DEFAULT_NUM_DIRS: u32 = 4; pub const PUBKEY_BINS_FOR_CALCULATING_HASHES: usize = 65536; pub const NUM_SCAN_PASSES_DEFAULT: usize = 2; -pub const TEST_DISABLE_REHASH_FOR_RENT_EPOCH: bool = true; - // Without chunks, we end up with 1 output vec for each outer snapshot storage. // This results in too many vectors to be efficient. // Chunks when scanning storages to calculate hashes. @@ -1795,26 +1792,22 @@ trait AppendVecScan: Send + Sync + Clone { /// These would have been captured in a fn from within the scan function. /// Some of these are constant across all pubkeys, some are constant across a slot. /// Some could be unique per pubkey. -struct ScanState<'a, T: Fn(Slot) -> Option + Sync + Send + Clone> { +struct ScanState<'a> { /// slot we're currently scanning current_slot: Slot, /// accumulated results accum: BinnedHashData, - /// max slot (inclusive) that we're calculating accounts hash on - max_slot_info: SlotInfoInEpoch, bin_calculator: &'a PubkeyBinCalculator24, bin_range: &'a Range, config: &'a CalcAccountsHashConfig<'a>, mismatch_found: Arc, - stats: &'a crate::accounts_hash::HashStats, - find_unskipped_slot: &'a T, filler_account_suffix: Option<&'a Pubkey>, range: usize, sort_time: Arc, pubkey_to_bin_index: usize, } -impl<'a, T: Fn(Slot) -> Option + Sync + Send + Clone> AppendVecScan for ScanState<'a, T> { +impl<'a> AppendVecScan for ScanState<'a> { fn set_slot(&mut self, slot: Slot) { self.current_slot = slot; } @@ -1843,24 +1836,6 @@ impl<'a, T: Fn(Slot) -> Option + Sync + Send + Clone> AppendVecScan for Sc }; let loaded_hash = loaded_account.loaded_hash(); - let new_hash = (!self.config.disable_rehash_for_rent_epoch) - .then(|| { - ExpectedRentCollection::maybe_rehash_skipped_rewrite( - loaded_account, - &loaded_hash, - pubkey, - self.current_slot, - self.config.epoch_schedule, - self.config.rent_collector, - self.stats, - &self.max_slot_info, - self.find_unskipped_slot, - self.filler_account_suffix, - ) - }) - .flatten(); - let loaded_hash = new_hash.unwrap_or(loaded_hash); - let source_item = CalculateHashIntermediate::new(loaded_hash, balance, *pubkey); if self.config.check_hash @@ -6261,8 +6236,6 @@ impl AccountsDb { let total_lamports = Mutex::::new(0); let stats = HashStats::default(); - let max_slot_info = SlotInfoInEpoch::new(max_slot, config.epoch_schedule); - let get_hashes = || { keys.par_chunks(chunks) .map(|pubkeys| { @@ -6295,23 +6268,7 @@ impl AccountsDb { .get_loaded_account() .and_then( |loaded_account| { - let find_unskipped_slot = |slot: Slot| { - self.find_unskipped_slot(slot, config.ancestors) - }; let loaded_hash = loaded_account.loaded_hash(); - let new_hash = (!config.disable_rehash_for_rent_epoch).then(||ExpectedRentCollection::maybe_rehash_skipped_rewrite( - &loaded_account, - &loaded_hash, - pubkey, - *slot, - config.epoch_schedule, - config.rent_collector, - &stats, - &max_slot_info, - find_unskipped_slot, - self.filler_account_suffix.as_ref(), - )).flatten(); - let loaded_hash = new_hash.unwrap_or(loaded_hash); let balance = loaded_account.lamports(); if config.check_hash && !self.is_filler_account(pubkey) { // this will not be supported anymore let computed_hash = @@ -6396,7 +6353,6 @@ impl AccountsDb { ancestors: &Ancestors, epoch_schedule: &EpochSchedule, rent_collector: &RentCollector, - disable_rehash_for_rent_epoch: bool, ) -> (Hash, u64) { self.update_accounts_hash_with_index_option( true, @@ -6408,7 +6364,6 @@ impl AccountsDb { epoch_schedule, rent_collector, false, - disable_rehash_for_rent_epoch, ) } @@ -6424,7 +6379,6 @@ impl AccountsDb { &EpochSchedule::default(), &RentCollector::default(), false, - TEST_DISABLE_REHASH_FOR_RENT_EPOCH, ) } @@ -6849,7 +6803,6 @@ impl AccountsDb { epoch_schedule: &EpochSchedule, rent_collector: &RentCollector, is_startup: bool, - disable_rehash_for_rent_epoch: bool, ) -> (Hash, u64) { let check_hash = false; let (hash, total_lamports) = self @@ -6866,7 +6819,6 @@ impl AccountsDb { rent_collector, store_detailed_debug_info_on_failure: false, full_snapshot: None, - disable_rehash_for_rent_epoch, }, expected_capitalization, ) @@ -6901,22 +6853,15 @@ impl AccountsDb { let range = bin_range.end - bin_range.start; let sort_time = Arc::new(AtomicU64::new(0)); - let find_unskipped_slot = |slot: Slot| self.find_unskipped_slot(slot, config.ancestors); - - let max_slot_info = - SlotInfoInEpoch::new(storage.max_slot_inclusive(), config.epoch_schedule); let scanner = ScanState { current_slot: Slot::default(), accum: BinnedHashData::default(), bin_calculator: &bin_calculator, config, mismatch_found: mismatch_found.clone(), - max_slot_info, - find_unskipped_slot: &find_unskipped_slot, filler_account_suffix, range, bin_range, - stats, sort_time: sort_time.clone(), pubkey_to_bin_index: 0, }; @@ -7097,7 +7042,6 @@ impl AccountsDb { } /// Only called from startup or test code. - #[allow(clippy::too_many_arguments)] pub fn verify_bank_hash_and_lamports( &self, slot: Slot, @@ -7108,7 +7052,6 @@ impl AccountsDb { rent_collector: &RentCollector, can_cached_slot_be_unflushed: bool, use_bg_thread_pool: bool, - disable_rehash_for_rent_epoch: bool, ) -> Result<(), BankHashVerificationError> { self.verify_bank_hash_and_lamports_new( slot, @@ -7121,7 +7064,6 @@ impl AccountsDb { false, false, use_bg_thread_pool, - disable_rehash_for_rent_epoch, ) } @@ -7139,7 +7081,6 @@ impl AccountsDb { ignore_mismatch: bool, store_hash_raw_data_for_debug: bool, use_bg_thread_pool: bool, - disable_rehash_for_rent_epoch: bool, ) -> Result<(), BankHashVerificationError> { use BankHashVerificationError::*; @@ -7159,7 +7100,6 @@ impl AccountsDb { rent_collector, store_detailed_debug_info_on_failure: store_hash_raw_data_for_debug, full_snapshot: None, - disable_rehash_for_rent_epoch, }, None, )?; @@ -11143,15 +11083,13 @@ pub mod tests { latest_slot, &ancestors, &EpochSchedule::default(), - &RentCollector::default(), - TEST_DISABLE_REHASH_FOR_RENT_EPOCH, + &RentCollector::default() ), accounts.update_accounts_hash( latest_slot, &ancestors, &EpochSchedule::default(), - &RentCollector::default(), - TEST_DISABLE_REHASH_FOR_RENT_EPOCH, + &RentCollector::default() ) ); } @@ -11435,7 +11373,6 @@ pub mod tests { &Ancestors::default(), &EpochSchedule::default(), &RentCollector::default(), - TEST_DISABLE_REHASH_FOR_RENT_EPOCH, ); let accounts = f(accounts, current_slot); @@ -11457,7 +11394,6 @@ pub mod tests { &RentCollector::default(), false, false, - TEST_DISABLE_REHASH_FOR_RENT_EPOCH, ) .unwrap(); } @@ -11793,7 +11729,6 @@ pub mod tests { rent_collector: &RENT_COLLECTOR, store_detailed_debug_info_on_failure: false, full_snapshot: None, - disable_rehash_for_rent_epoch: TEST_DISABLE_REHASH_FOR_RENT_EPOCH, } } } @@ -11864,7 +11799,6 @@ pub mod tests { &RentCollector::default(), false, false, - TEST_DISABLE_REHASH_FOR_RENT_EPOCH, ), Ok(_) ); @@ -11880,7 +11814,6 @@ pub mod tests { &RentCollector::default(), false, false, - TEST_DISABLE_REHASH_FOR_RENT_EPOCH, ), Err(MissingBankHash) ); @@ -11905,7 +11838,6 @@ pub mod tests { &RentCollector::default(), false, false, - TEST_DISABLE_REHASH_FOR_RENT_EPOCH, ), Err(MismatchedBankHash) ); @@ -11936,7 +11868,6 @@ pub mod tests { &RentCollector::default(), false, false, - TEST_DISABLE_REHASH_FOR_RENT_EPOCH, ), Ok(_) ); @@ -11960,13 +11891,12 @@ pub mod tests { &RentCollector::default(), false, false, - TEST_DISABLE_REHASH_FOR_RENT_EPOCH, ), Ok(_) ); assert_matches!( - db.verify_bank_hash_and_lamports(some_slot, &ancestors, 10, true, &EpochSchedule::default(), &RentCollector::default(), false, false, TEST_DISABLE_REHASH_FOR_RENT_EPOCH), + db.verify_bank_hash_and_lamports(some_slot, &ancestors, 10, true, &EpochSchedule::default(), &RentCollector::default(), false, false), Err(MismatchedTotalLamports(expected, actual)) if expected == 2 && actual == 10 ); } @@ -11995,7 +11925,6 @@ pub mod tests { &RentCollector::default(), false, false, - TEST_DISABLE_REHASH_FOR_RENT_EPOCH, ), Ok(_) ); @@ -12041,7 +11970,6 @@ pub mod tests { &RentCollector::default(), false, false, - TEST_DISABLE_REHASH_FOR_RENT_EPOCH, ), Err(MismatchedBankHash) ); @@ -12651,7 +12579,6 @@ pub mod tests { &no_ancestors, &EpochSchedule::default(), &RentCollector::default(), - TEST_DISABLE_REHASH_FOR_RENT_EPOCH, ); accounts .verify_bank_hash_and_lamports( @@ -12663,7 +12590,6 @@ pub mod tests { &RentCollector::default(), false, false, - TEST_DISABLE_REHASH_FOR_RENT_EPOCH, ) .unwrap(); @@ -12678,7 +12604,6 @@ pub mod tests { &RentCollector::default(), false, false, - TEST_DISABLE_REHASH_FOR_RENT_EPOCH, ) .unwrap(); diff --git a/runtime/src/accounts_hash.rs b/runtime/src/accounts_hash.rs index 65b1cd263479ac..4aad51756f34bf 100644 --- a/runtime/src/accounts_hash.rs +++ b/runtime/src/accounts_hash.rs @@ -57,8 +57,6 @@ pub struct CalcAccountsHashConfig<'a> { pub store_detailed_debug_info_on_failure: bool, /// `Some` if this is an incremental snapshot which only hashes slots since the base full snapshot pub full_snapshot: Option, - /// temporarily here for feature activation #28934 - pub disable_rehash_for_rent_epoch: bool, } impl<'a> CalcAccountsHashConfig<'a> { diff --git a/runtime/src/bank.rs b/runtime/src/bank.rs index c5a6ed9f9eca6b..f1a63d1d0b2ba6 100644 --- a/runtime/src/bank.rs +++ b/runtime/src/bank.rs @@ -6640,9 +6640,6 @@ impl Bank { let cap = self.capitalization(); let epoch_schedule = self.epoch_schedule(); let rent_collector = self.rent_collector(); - let disable_rehash_for_rent_epoch = self - .feature_set - .is_active(&solana_sdk::feature_set::disable_rehash_for_rent_epoch::id()); if config.run_in_background { let ancestors = ancestors.clone(); let accounts = Arc::clone(accounts); @@ -6668,7 +6665,6 @@ impl Bank { config.store_hash_raw_data_for_debug, // true to run using bg thread pool true, - disable_rehash_for_rent_epoch, ); accounts_ .accounts_db @@ -6692,7 +6688,6 @@ impl Bank { config.store_hash_raw_data_for_debug, // fg is waiting for this to run, so we can use the fg thread pool false, - disable_rehash_for_rent_epoch, ); self.set_initial_accounts_hash_verification_completed(); result @@ -6795,8 +6790,6 @@ impl Bank { debug_verify, self.epoch_schedule(), &self.rent_collector, - self.feature_set - .is_active(&solana_sdk::feature_set::disable_rehash_for_rent_epoch::id()), ) } @@ -6860,8 +6853,6 @@ impl Bank { self.epoch_schedule(), &self.rent_collector, is_startup, - self.feature_set - .is_active(&solana_sdk::feature_set::disable_rehash_for_rent_epoch::id()), ); if total_lamports != self.capitalization() { datapoint_info!( @@ -6888,9 +6879,6 @@ impl Bank { self.epoch_schedule(), &self.rent_collector, is_startup, - self.feature_set.is_active( - &solana_sdk::feature_set::disable_rehash_for_rent_epoch::id(), - ), ); } diff --git a/runtime/src/expected_rent_collection.rs b/runtime/src/expected_rent_collection.rs deleted file mode 100644 index 3b4f095af2b345..00000000000000 --- a/runtime/src/expected_rent_collection.rs +++ /dev/null @@ -1,1309 +0,0 @@ -//! Logic for determining when rent should have been collected or a rewrite would have occurred for an account. -use { - crate::{ - accounts_db::AccountsDb, - accounts_hash::HashStats, - bank::{Bank, PartitionIndex, Rewrites}, - rent_collector::{RentCollector, RentResult}, - }, - solana_sdk::{ - account::{AccountSharedData, ReadableAccount, WritableAccount}, - clock::{Epoch, Slot}, - epoch_schedule::EpochSchedule, - hash::Hash, - pubkey::Pubkey, - }, - std::sync::atomic::Ordering, -}; - -#[derive(Debug, PartialEq, Eq)] -pub struct ExpectedRentCollection { - partition_from_pubkey: PartitionIndex, - epoch_of_max_storage_slot: Epoch, - partition_index_from_max_slot: PartitionIndex, - first_slot_in_max_epoch: Slot, - // these are the only 2 fields used by downstream calculations at the moment. - // the rest are here for debugging - expected_rent_collection_slot_max_epoch: Slot, - rent_epoch: Epoch, -} - -/* -A goal is to skip rewrites to improve performance. -Reasons this file exists: -A. When we encounter skipped-rewrite account data as part of a load, we may need to update rent_epoch. -B. When we encounter skipped-rewrite account data during accounts hash calc, the saved hash will be incorrect if we skipped a rewrite. - We need slot and rent_epoch to recalculate a new hash. - -cases of rent collection: - -setup assumptions: -pubkey = abc -slots_per_epoch = 432,000 -pubkey_partition_index of 'abc' = 80 - -So, rent will be collected or a rewrite is expected to occur: - each time a slot's pubkey_partition is == [footnote1] pubkey_partition_index within an epoch. [footnote2] - - If we skip rewrites, then pubkey's account data will not be rewritten when its rent collecion partition index occurs. - However, later we need to get a hash value for the most recent update to this account. - That leads us to the purpose of this file. - To calculate a hash for account data, we need to know: - 1. the slot the account was written in - 2. the rent_epoch field of the account, telling us which epoch is the next time we should evaluate rent on this account - If we did not perform a rewrite, then the account in the append vec it was last written in has: - 1. The wrong slot, since the append vec is not associated with the slot that the rewrite would have occurred. - 2. The wrong rent_epoch since the account was not rewritten with a newer rent_epoch [footnote3] - -Reason A for this file's existence: -When we encounter the skipped-rewrite account data as part of a load, we may need to update rent_epoch. -Many operations work like this: - 1. read account - 2. add lamports (ex: reward was paid) - 3. write account -If the account is written with the WRONG rent_epoch field, then we will store an 'incorrect' rent_epoch field and the hash will be incorrect. -So, at (1. read account), we must FIX the rent_epoch to be as it would be if the rewrite would have occurred. - -Reason B for this file's existence: -When we encounter the skipped-rewrite account data during accounts hash calc, the saved hash will be incorrect if we skipped a rewrite. -We must compute the correct rent_epoch and slot and recompute the hash that we would have gotten if we would have done the rewrite. - -Both reasons result in the need for the same answer. -Given -1. pubkey -2. pubkey's account data -3. the slot the data was loaded from (storage_slot) -4. the highest_root caller cares about - -We also need a RentCollector and EpochSchedule for the highest root the caller cares about. -With these: -1. can calculate partition_index of -1.a. highest_root (slot) -1.b. storage_slot - -We also need : -fn find_unskipped_slot(slot) -> root -which can return the lowest root >= slot - 1 (this is why 'historical_roots' is necessary) Also see [footnote1]. - -Given these inputs, we can determine the correct slot and rent_epoch where we SHOULD have found this account's data and also compute the hash that we SHOULD have stored at that slot. -Note that a slot could be (-432k..infinite) slots and (-1..infinite) epochs relative to the expected rent collection slot. -Examples: -1. -storage_slot: 1 -highest_root: 1 -since pubkey_partition_index is 80 and hasn't been reached, the current account's data is CORRECT -Every highest_root < 80 is this same result. - -2. -storage_slot: 1 -highest_root: 79 -since pubkey_partition_index is 80 and hasn't been reached, the current account's data is CORRECT - -3. -storage_slot: 1 (partition index = 1) -highest_root: 80 (partition index = 80) -since pubkey_partition_index is 80 and it HAS been reached, but the account data is from slot 1, then the account's data is INcorrect -the account's hash is incorrect and needs to be recalculated as of slot 80 -rent_epoch will be 0 -Every highest_root >= 80 and < 432k + 80 is this same result - -4. -storage_slot: 1 (partition index = 1) -find_unskipped_slot(80) returns 81 since slot 80 was SKIPPED -highest_root: 81 (partition index = 81) -since pubkey_partition_index is 80 and it HAS been reached, but the account data is from slot 1, then the account's data is INcorrect -the account's hash is incorrect and needs to be recalculated as of slot 81 (note 81 because 80 was skipped) -rent_epoch will be 0 -Every highest_root >= 80 and < 432k + 80 is this same result - -5. -storage_slot: 1 (partition index = 1) (epoch 0) -highest_root: 432k + 1 (partition index = 1) (epoch 1) -since pubkey_partition_index is 80 and it HAS been reached, but the account data is from slot 1, then the account's data is INcorrect -the account's hash is incorrect and needs to be recalculated as of slot 80 in epoch 0 -partition_index 80 has NOT been reached in epoch 1 -so, rent_epoch will be 0 -Every highest_root >= 80 and < 432k + 80 is this same result - -6. -storage_slot: 1 (partition index = 1) (epoch 0) -highest_root: 432k + 80 (partition index = 80) (epoch 1) -since pubkey_partition_index is 80 and it HAS been reached, but the account data is from slot 1, then the account's data is INcorrect -the account's hash is incorrect and needs to be recalculated as of slot 432k + 80 in epoch 1 -partition_index 80 HAS been reached in epoch 1 -so, rent_epoch will be 1 -Every highest_root >= 432k + 80 and < 432k * 2 + 80 is this same result - -7. -storage_slot: 1 (partition index = 1) (epoch 0) -find_unskipped_slot(432k + 80) returns 432k + 81 since slot 432k + 80 was SKIPPED -highest_root: 432k + 81 (partition index = 81) (epoch 1) -since pubkey_partition_index is 80 and it HAS been reached, but the account data is from slot 1, then the account's data is INcorrect -the account's hash is incorrect and needs to be recalculated as of slot 432k + 81 in epoch 1 (slot 432k + 80 was skipped) -partition_index 80 HAS been reached in epoch 1 -so, rent_epoch will be 1 -Every highest_root >= 432k + 81 and < 432k * 2 + 80 is this same result - -8. -storage_slot: 1 (partition index = 1) (epoch 0) -highest_root: 432k * 2 + 1 (partition index = 1) (epoch 2) -since pubkey_partition_index is 80 and it HAS been reached, but the account data is from slot 1, then the account's data is INcorrect -the account's hash is incorrect and needs to be recalculated as of slot 432k + 80 in epoch 1 -partition_index 80 has NOT been reached in epoch 2 -so, rent_epoch will 1 -Every highest_root >= 432k + 80 and < 432k * 2 + 80 is this same result - -9. -storage_slot: 1 (partition index = 1) (epoch 0) -highest_root: 432k * 2 + 80 (partition index = 80) (epoch 2) -since pubkey_partition_index is 80 and it HAS been reached, but the account data is from slot 1, then the account's data is INcorrect -the account's hash is incorrect and needs to be recalculated as of slot 432k * 2 + 80 in epoch 2 -partition_index 80 HAS been reached in epoch 2 -so, rent_epoch will be 2 -Every highest_root >= 432k * 2 + 80 and < 432k * 3 + 80 is this same result - -[footnote1:] - "each time a slot's pubkey_partition is == [footnote1] pubkey_partition_index within an epoch." - Due to skipped slots, this is not true. - In reality, it is: - the first slot where a slot's pubkey_partition >= pubkey_partition_index - 1. - So, simply, if the pubkey_partition for our rent is 80, then that slot occurs at these slot #s: - Slot:........... Epoch: - 0 + 80 for epoch 0 - 432,000 + 80 for epoch 1 - 432,000 * 2 + 80 for epoch 2 - ... - However, sometimes we skip slots. So, just considering epoch 0: - Normal, not skipping any slots: - slot 78 is a root - slot 79 is a root - slot 80 is a root (account is rewritten/rent collected here) - Scenario 1: - slot 78 is a root - slot 79 is skipped/not a root - slot 80 is a root (account is rewritten/rent collected here along with accounts from slot 79) - Scenario 2: - slot 78 is a root - slot 79 is skipped/not a root - slot 80 is skipped/not a root - slot 81 is a root (account is rewritten/rent collected here because of slot 80, along with accounts from slots 79 and 81) - This gets us to looking for: - the first slot where a slot's pubkey_partition >= pubkey_partition_index - 1. - -[footnote2:] - Describing partition_index within an epoch: - example: - slot=0 is epoch=0, partition_index=0 - slot=1 is epoch=0, partition_index=1 - slot=431,999 is epoch=0, partition_index=431,999 - slot=432,000 is epoch=1, partition_index=432,000 - This is NOT technically accurate because of first_normal_slot, but we'll ignore that. - EpochSchedule::get_epoch_and_slot_index(slot) calculates epoch and partition_index from slot. - -[footnote3:] - when we do a rewrite of account data, only this data changes: - 1. rent_epoch - 2. computed hash value (which is a function of (data, lamports, executable, owner, rent_epoch, pubkey) + slot - 3. into a new append vec that is associated with the slot# - -*/ - -/// specify a slot -/// and keep track of epoch info for that slot -/// The idea is that algorithms often iterate over a storage slot or over a max/bank slot. -/// The epoch info for that slot will be fixed for many pubkeys, so save the calculated results. -/// There are 2 slots required for rent collection algorithms. Some callers have storage slot fixed -/// while others have max/bank slot fixed. 'epoch_info' isn't always needed, so it is optionally -/// specified by caller and only used by callee if necessary. -#[derive(Default, Copy, Clone)] -pub struct SlotInfoInEpoch { - /// the slot - slot: Slot, - /// possible info about this slot - epoch_info: Option, -} - -/// epoch info for a slot -#[derive(Default, Copy, Clone)] -pub struct SlotInfoInEpochInner { - /// epoch of the slot - epoch: Epoch, - /// partition index of the slot within the epoch - partition_index: PartitionIndex, - /// number of slots in this epoch - slots_in_epoch: Slot, -} - -impl SlotInfoInEpoch { - /// create, populating epoch info - pub fn new(slot: Slot, epoch_schedule: &EpochSchedule) -> Self { - let mut result = Self::new_small(slot); - result.epoch_info = Some(result.get_epoch_info(epoch_schedule)); - result - } - /// create, without populating epoch info - pub fn new_small(slot: Slot) -> Self { - SlotInfoInEpoch { - slot, - ..SlotInfoInEpoch::default() - } - } - /// get epoch info by returning already calculated or by calculating it now - pub fn get_epoch_info(&self, epoch_schedule: &EpochSchedule) -> SlotInfoInEpochInner { - if let Some(inner) = &self.epoch_info { - *inner - } else { - let (epoch, partition_index) = epoch_schedule.get_epoch_and_slot_index(self.slot); - SlotInfoInEpochInner { - epoch, - partition_index, - slots_in_epoch: epoch_schedule.get_slots_in_epoch(epoch), - } - } - } -} - -impl ExpectedRentCollection { - /// 'account' is being loaded from 'storage_slot' in 'bank_slot' - /// adjusts 'account.rent_epoch' if we skipped the last rewrite on this account - #[allow(dead_code)] - pub(crate) fn maybe_update_rent_epoch_on_load( - account: &mut AccountSharedData, - storage_slot: &SlotInfoInEpoch, - bank_slot: &SlotInfoInEpoch, - epoch_schedule: &EpochSchedule, - rent_collector: &RentCollector, - pubkey: &Pubkey, - rewrites_skipped_this_slot: &Rewrites, - ) { - let result = Self::get_corrected_rent_epoch_on_load( - account, - storage_slot, - bank_slot, - epoch_schedule, - rent_collector, - pubkey, - rewrites_skipped_this_slot, - ); - if let Some(rent_epoch) = result { - account.set_rent_epoch(rent_epoch); - } - } - - /// 'account' is being loaded - /// we may need to adjust 'account.rent_epoch' if we skipped the last rewrite on this account - /// returns Some(rent_epoch) if an adjustment needs to be made - /// returns None if the account is up to date - fn get_corrected_rent_epoch_on_load( - account: &AccountSharedData, - storage_slot: &SlotInfoInEpoch, - bank_slot: &SlotInfoInEpoch, - epoch_schedule: &EpochSchedule, - rent_collector: &RentCollector, - pubkey: &Pubkey, - rewrites_skipped_this_slot: &Rewrites, - ) -> Option { - let next_epoch = match rent_collector.calculate_rent_result( - pubkey, account, None, // filler_account_suffix - // Skipping rewrites is not compatible with the below feature. - // We will not skip rewrites until the feature is activated. - false, // preserve_rent_epoch_for_rent_exempt_accounts - ) { - RentResult::LeaveAloneNoRent => return None, - RentResult::CollectRent { - new_rent_epoch, - rent_due: 0, - } => new_rent_epoch, - // Rent is due on this account in this epoch, - // so we did not skip a rewrite. - RentResult::CollectRent { .. } => return None, - }; - { - // grab epoch infno for bank slot and storage slot - let bank_info = bank_slot.get_epoch_info(epoch_schedule); - let (current_epoch, partition_from_current_slot) = - (bank_info.epoch, bank_info.partition_index); - let storage_info = storage_slot.get_epoch_info(epoch_schedule); - let (storage_epoch, storage_slot_partition) = - (storage_info.epoch, storage_info.partition_index); - let partition_from_pubkey = - Bank::partition_from_pubkey(pubkey, bank_info.slots_in_epoch); - let mut possibly_update = true; - if current_epoch == storage_epoch { - // storage is in same epoch as bank - if partition_from_pubkey > partition_from_current_slot { - // we haven't hit the slot's rent collection slot yet, and the storage was within this slot, so do not update - possibly_update = false; - } - } else if current_epoch == storage_epoch + 1 { - // storage is in the previous epoch - if storage_slot_partition >= partition_from_pubkey - && partition_from_pubkey > partition_from_current_slot - { - // we did a rewrite in last epoch and we have not yet hit the rent collection slot in THIS epoch - possibly_update = false; - } - } // if more than 1 epoch old, then we need to collect rent because we clearly skipped it. - - let rewrites_skipped_this_pubkey_this_slot = || { - rewrites_skipped_this_slot - .read() - .unwrap() - .contains_key(pubkey) - }; - let rent_epoch = account.rent_epoch(); - if possibly_update && rent_epoch == 0 && current_epoch > 1 { - if rewrites_skipped_this_pubkey_this_slot() { - return Some(next_epoch); - } else { - // we know we're done - return None; - } - } - - // if an account was written >= its rent collection slot within the last epoch worth of slots, then we don't want to update it here - if possibly_update && rent_epoch < current_epoch { - let new_rent_epoch = if partition_from_pubkey < partition_from_current_slot - || (partition_from_pubkey == partition_from_current_slot - && rewrites_skipped_this_pubkey_this_slot()) - { - // partition_from_pubkey < partition_from_current_slot: - // we already would have done a rewrite on this account IN this epoch - next_epoch - } else { - // should have done rewrite up to last epoch - // we have not passed THIS epoch's rewrite slot yet, so the correct 'rent_epoch' is previous - next_epoch.saturating_sub(1) - }; - if rent_epoch != new_rent_epoch { - // the point of this function: - // 'new_rent_epoch' is the correct rent_epoch that the account would have if we had done rewrites - return Some(new_rent_epoch); - } - } else if !possibly_update { - // This is a non-trivial lookup. Would be nice to skip this. - assert!(!rewrites_skipped_this_pubkey_this_slot(), "did not update rent_epoch: {}, new value for rent_epoch: {}, old: {}, current epoch: {}", pubkey, rent_epoch, next_epoch, current_epoch); - } - } - None - } - - #[allow(clippy::too_many_arguments)] - /// it is possible 0.. rewrites were skipped on this account - /// if so, return Some(correct hash as of 'storage_slot') - /// if 'loaded_hash' is CORRECT, return None - pub fn maybe_rehash_skipped_rewrite( - loaded_account: &impl ReadableAccount, - loaded_hash: &Hash, - pubkey: &Pubkey, - storage_slot: Slot, - epoch_schedule: &EpochSchedule, - rent_collector: &RentCollector, - stats: &HashStats, - max_slot_in_storages_inclusive: &SlotInfoInEpoch, - find_unskipped_slot: impl Fn(Slot) -> Option, - filler_account_suffix: Option<&Pubkey>, - ) -> Option { - use solana_measure::measure::Measure; - let mut m = Measure::start("rehash_calc_us"); - let expected = ExpectedRentCollection::new( - pubkey, - loaded_account, - storage_slot, - epoch_schedule, - rent_collector, - max_slot_in_storages_inclusive, - find_unskipped_slot, - filler_account_suffix, - ); - - m.stop(); - stats.rehash_calc_us.fetch_add(m.as_us(), Ordering::Relaxed); - let expected = match expected { - None => { - // use the previously calculated hash - return None; - } - Some(expected) => expected, - }; - let mut m = Measure::start("rehash_hash_us"); - let recalc_hash = AccountsDb::hash_account_with_rent_epoch( - expected.expected_rent_collection_slot_max_epoch, - loaded_account, - pubkey, - expected.rent_epoch, - ); - m.stop(); - stats.rehash_hash_us.fetch_add(m.as_us(), Ordering::Relaxed); - if &recalc_hash == loaded_hash { - // unnecessary calculation occurred - stats.rehash_unnecessary.fetch_add(1, Ordering::Relaxed); - return None; - } - stats.rehash_required.fetch_add(1, Ordering::Relaxed); - - // recomputed based on rent collection/rewrite slot - // Rent would have been collected AT 'expected_rent_collection_slot', so hash according to that slot. - // Note that a later storage (and slot) may contain this same pubkey. In that case, that newer hash will make this one irrelevant. - Some(recalc_hash) - } - - /// figure out whether the account stored at 'storage_slot' would have normally been rewritten at a slot that has already occurred: after 'storage_slot' but <= 'max_slot_in_storages_inclusive' - /// returns Some(...) if the account would have normally been rewritten - /// returns None if the account was updated wrt rent already or if it is known that there must exist a future rewrite of this account (for example, non-zero rent is due) - fn new( - pubkey: &Pubkey, - loaded_account: &impl ReadableAccount, - storage_slot: Slot, - epoch_schedule: &EpochSchedule, - rent_collector_max_epoch: &RentCollector, - max_slot_in_storages_inclusive: &SlotInfoInEpoch, - find_unskipped_slot: impl Fn(Slot) -> Option, - filler_account_suffix: Option<&Pubkey>, - ) -> Option { - let mut rent_collector = rent_collector_max_epoch; - let SlotInfoInEpochInner { - epoch: epoch_of_max_storage_slot, - partition_index: partition_index_from_max_slot, - slots_in_epoch: slots_per_epoch_max_epoch, - } = max_slot_in_storages_inclusive.get_epoch_info(epoch_schedule); - let mut partition_from_pubkey = - crate::bank::Bank::partition_from_pubkey(pubkey, slots_per_epoch_max_epoch); - // now, we have to find the root that is >= the slot where this pubkey's rent would have been collected - let first_slot_in_max_epoch = - max_slot_in_storages_inclusive.slot - partition_index_from_max_slot; - let mut expected_rent_collection_slot_max_epoch = - first_slot_in_max_epoch + partition_from_pubkey; - let calculated_from_index_expected_rent_collection_slot_max_epoch = - expected_rent_collection_slot_max_epoch; - if expected_rent_collection_slot_max_epoch <= max_slot_in_storages_inclusive.slot { - // may need to find a valid root - if let Some(find) = - find_unskipped_slot(calculated_from_index_expected_rent_collection_slot_max_epoch) - { - // found a root that is >= expected_rent_collection_slot. - expected_rent_collection_slot_max_epoch = find; - } - } - let mut use_previous_epoch_rent_collector = false; - if expected_rent_collection_slot_max_epoch > max_slot_in_storages_inclusive.slot { - // max slot has not hit the slot in the max epoch where we would have collected rent yet, so the most recent rent-collected rewrite slot for this pubkey would be in the previous epoch - let previous_epoch = epoch_of_max_storage_slot.saturating_sub(1); - let slots_per_epoch_previous_epoch = epoch_schedule.get_slots_in_epoch(previous_epoch); - expected_rent_collection_slot_max_epoch = - if slots_per_epoch_previous_epoch == slots_per_epoch_max_epoch { - // partition index remains the same - calculated_from_index_expected_rent_collection_slot_max_epoch - .saturating_sub(slots_per_epoch_max_epoch) - } else { - // the newer epoch has a different # of slots, so the partition index will be different in the prior epoch - partition_from_pubkey = crate::bank::Bank::partition_from_pubkey( - pubkey, - slots_per_epoch_previous_epoch, - ); - first_slot_in_max_epoch - .saturating_sub(slots_per_epoch_previous_epoch) - .saturating_add(partition_from_pubkey) - }; - // since we are looking a different root, we have to call this again - if let Some(find) = find_unskipped_slot(expected_rent_collection_slot_max_epoch) { - // found a root (because we have a storage) that is >= expected_rent_collection_slot. - expected_rent_collection_slot_max_epoch = find; - } - - // since we have not hit the slot in the rent collector's epoch yet, we need to collect rent according to the previous epoch's rent collector. - use_previous_epoch_rent_collector = true; - } - - // the slot we're dealing with is where we expected the rent to be collected for this pubkey, so use what is in this slot - // however, there are cases, such as adjusting the clock, where we store the account IN the same slot, but we do so BEFORE we collect rent. We later store the account AGAIN for rewrite/rent collection. - // So, if storage_slot == expected_rent_collection_slot..., then we MAY have collected rent or may not have. So, it has to be > - // rent_epoch=0 is a special case - if storage_slot > expected_rent_collection_slot_max_epoch - || loaded_account.rent_epoch() == 0 - { - // no need to update hash - return None; - } - - let rent_collector_previous; - if use_previous_epoch_rent_collector { - // keep in mind the storage slot could be 0..inf epochs in the past - // we want to swap the rent collector for one whose epoch is the previous epoch - let mut rent_collector_temp = rent_collector.clone(); - rent_collector_temp.epoch = rent_collector.epoch.saturating_sub(1); // previous epoch - rent_collector_previous = Some(rent_collector_temp); - rent_collector = rent_collector_previous.as_ref().unwrap(); - } - - // ask the rent collector what rent should be collected. - // Rent collector knows the current epoch. - let rent_result = rent_collector.calculate_rent_result( - pubkey, - loaded_account, - filler_account_suffix, - // Skipping rewrites is not compatible with the below feature. - // We will not skip rewrites until the feature is activated. - false, // preserve_rent_epoch_for_rent_exempt_accounts - ); - let current_rent_epoch = loaded_account.rent_epoch(); - let new_rent_epoch = match rent_result { - RentResult::CollectRent { - new_rent_epoch: next_epoch, - rent_due, - } => { - if next_epoch > current_rent_epoch && rent_due != 0 { - // this is an account that would have had rent collected since this storage slot, so just use the hash we have since there must be a newer version of this account already in a newer slot - // It would be a waste of time to recalcluate a hash. - return None; - } - std::cmp::max(next_epoch, current_rent_epoch) - } - RentResult::LeaveAloneNoRent => { - // rent_epoch is not updated for this condition - // But, a rewrite WOULD HAVE occured at the expected slot. - // So, fall through with same rent_epoch, but we will have already calculated 'expected_rent_collection_slot_max_epoch' - current_rent_epoch - } - }; - - if expected_rent_collection_slot_max_epoch == storage_slot - && new_rent_epoch == loaded_account.rent_epoch() - { - // no rewrite would have occurred - return None; - } - - Some(Self { - partition_from_pubkey, - epoch_of_max_storage_slot, - partition_index_from_max_slot, - first_slot_in_max_epoch, - expected_rent_collection_slot_max_epoch, - rent_epoch: new_rent_epoch, - }) - } -} - -#[cfg(test)] -pub mod tests { - use { - super::*, - solana_sdk::{ - account::{AccountSharedData, WritableAccount}, - genesis_config::GenesisConfig, - }, - }; - - #[test] - fn test_expected_rent_collection() { - solana_logger::setup(); - let pubkey = Pubkey::new(&[5; 32]); - let owner = solana_sdk::pubkey::new_rand(); - let mut account = AccountSharedData::new(1, 0, &owner); - let max_slot_in_storages_inclusive = 0; - let epoch_schedule = EpochSchedule::default(); - let first_normal_slot = epoch_schedule.first_normal_slot; - let storage_slot = first_normal_slot; - let epoch = epoch_schedule.get_epoch(storage_slot); - assert_eq!( - (epoch, 0), - epoch_schedule.get_epoch_and_slot_index(storage_slot) - ); - let genesis_config = GenesisConfig::default(); - let mut rent_collector = RentCollector::new( - epoch, - epoch_schedule, - genesis_config.slots_per_year(), - genesis_config.rent, - ); - rent_collector.rent.lamports_per_byte_year = 0; // temporarily disable rent - let find_unskipped_slot = Some; - // slot in current epoch - let result = ExpectedRentCollection::new( - &pubkey, - &account, - storage_slot, - &epoch_schedule, - &rent_collector, - &SlotInfoInEpoch::new(max_slot_in_storages_inclusive, &epoch_schedule), - find_unskipped_slot, - None, - ); - assert!(result.is_none()); - - let slots_per_epoch = 432_000; - assert_eq!( - slots_per_epoch, - epoch_schedule.get_slots_in_epoch(epoch_schedule.get_epoch(storage_slot)) - ); - let partition_index_max_inclusive = slots_per_epoch - 1; - account.set_rent_epoch(rent_collector.epoch); - // several epochs ahead of now - // first slot of new epoch is max slot EXclusive - // so last slot of prior epoch is max slot INclusive - let max_slot_in_storages_inclusive = slots_per_epoch * 3 + first_normal_slot - 1; - rent_collector.epoch = epoch_schedule.get_epoch(max_slot_in_storages_inclusive); - let partition_from_pubkey = 8470; // function of 432k slots and 'pubkey' above - let first_slot_in_max_epoch = 1388256; - let expected_rent_collection_slot_max_epoch = - first_slot_in_max_epoch + partition_from_pubkey; - let result = ExpectedRentCollection::new( - &pubkey, - &account, - storage_slot, - &epoch_schedule, - &rent_collector, - &SlotInfoInEpoch::new(max_slot_in_storages_inclusive, &epoch_schedule), - find_unskipped_slot, - None, - ); - assert_eq!( - result, - Some(ExpectedRentCollection { - partition_from_pubkey, - epoch_of_max_storage_slot: rent_collector.epoch, - partition_index_from_max_slot: partition_index_max_inclusive, - first_slot_in_max_epoch, - expected_rent_collection_slot_max_epoch, - rent_epoch: rent_collector.epoch, - }) - ); - - // LeaveAloneNoRent - for leave_alone in [true, false] { - account.set_executable(leave_alone); - let result = ExpectedRentCollection::new( - &pubkey, - &account, - expected_rent_collection_slot_max_epoch, - &epoch_schedule, - &rent_collector, - &SlotInfoInEpoch::new(max_slot_in_storages_inclusive, &epoch_schedule), - find_unskipped_slot, - None, - ); - assert_eq!( - result, - (!leave_alone).then(|| ExpectedRentCollection { - partition_from_pubkey, - epoch_of_max_storage_slot: rent_collector.epoch, - partition_index_from_max_slot: partition_index_max_inclusive, - first_slot_in_max_epoch, - expected_rent_collection_slot_max_epoch, - rent_epoch: rent_collector.epoch, - }), - "leave_alone: {}", - leave_alone - ); - } - - // storage_slot > expected_rent_collection_slot_max_epoch - // if greater, we return None - for greater in [false, true] { - let result = ExpectedRentCollection::new( - &pubkey, - &account, - expected_rent_collection_slot_max_epoch + u64::from(greater), - &epoch_schedule, - &rent_collector, - &SlotInfoInEpoch::new(max_slot_in_storages_inclusive, &epoch_schedule), - find_unskipped_slot, - None, - ); - assert_eq!( - result, - (!greater).then(|| ExpectedRentCollection { - partition_from_pubkey, - epoch_of_max_storage_slot: rent_collector.epoch, - partition_index_from_max_slot: partition_index_max_inclusive, - first_slot_in_max_epoch, - expected_rent_collection_slot_max_epoch, - rent_epoch: rent_collector.epoch, - }) - ); - } - - // test rewrite would have occurred in previous epoch from max_slot_in_storages_inclusive's epoch - // the change is in 'rent_epoch' returned in 'expected' - for previous_epoch in [false, true] { - let result = ExpectedRentCollection::new( - &pubkey, - &account, - expected_rent_collection_slot_max_epoch, - &epoch_schedule, - &rent_collector, - &SlotInfoInEpoch::new( - max_slot_in_storages_inclusive - + if previous_epoch { slots_per_epoch } else { 0 }, - &epoch_schedule, - ), - find_unskipped_slot, - None, - ); - let epoch_delta = u64::from(previous_epoch); - let slot_delta = epoch_delta * slots_per_epoch; - assert_eq!( - result, - Some(ExpectedRentCollection { - partition_from_pubkey, - epoch_of_max_storage_slot: rent_collector.epoch + epoch_delta, - partition_index_from_max_slot: partition_index_max_inclusive, - first_slot_in_max_epoch: first_slot_in_max_epoch + slot_delta, - expected_rent_collection_slot_max_epoch: expected_rent_collection_slot_max_epoch - + slot_delta, - rent_epoch: rent_collector.epoch, - }), - "previous_epoch: {}", - previous_epoch, - ); - } - - // if account's rent_epoch is already > our rent epoch, rent was collected already - // if greater, we return None - let original_rent_epoch = account.rent_epoch(); - for already_collected in [true, false] { - // to consider: maybe if we already collected rent_epoch IN this slot and slot matches what we need, then we should return None here - account.set_rent_epoch(original_rent_epoch + u64::from(already_collected)); - let result = ExpectedRentCollection::new( - &pubkey, - &account, - expected_rent_collection_slot_max_epoch, - &epoch_schedule, - &rent_collector, - &SlotInfoInEpoch::new(max_slot_in_storages_inclusive, &epoch_schedule), - find_unskipped_slot, - None, - ); - assert_eq!( - result, - Some(ExpectedRentCollection { - partition_from_pubkey, - epoch_of_max_storage_slot: rent_collector.epoch, - partition_index_from_max_slot: partition_index_max_inclusive, - first_slot_in_max_epoch, - expected_rent_collection_slot_max_epoch, - rent_epoch: std::cmp::max(rent_collector.epoch, account.rent_epoch()), - }), - "rent_collector.epoch: {}, already_collected: {}", - rent_collector.epoch, - already_collected - ); - } - account.set_rent_epoch(original_rent_epoch); - - let storage_slot = max_slot_in_storages_inclusive - slots_per_epoch; - // check partition from pubkey code - for end_partition_index in [0, 1, 2, 100, slots_per_epoch - 2, slots_per_epoch - 1] { - // generate a pubkey range - let range = crate::bank::Bank::pubkey_range_from_partition(( - // start_index: - end_partition_index.saturating_sub(1), // this can end up at start=0, end=0 (this is a desired test case) - // end_index: - end_partition_index, - epoch_schedule.get_slots_in_epoch(rent_collector.epoch), - )); - // use both start and end from INclusive range separately - for pubkey in [&range.start(), &range.end()] { - let result = ExpectedRentCollection::new( - pubkey, - &account, - storage_slot, - &epoch_schedule, - &rent_collector, - &SlotInfoInEpoch::new(max_slot_in_storages_inclusive, &epoch_schedule), - find_unskipped_slot, - None, - ); - assert_eq!( - result, - Some(ExpectedRentCollection { - partition_from_pubkey: end_partition_index, - epoch_of_max_storage_slot: rent_collector.epoch, - partition_index_from_max_slot: partition_index_max_inclusive, - first_slot_in_max_epoch, - expected_rent_collection_slot_max_epoch: first_slot_in_max_epoch + end_partition_index, - rent_epoch: rent_collector.epoch, - }), - "range: {:?}, pubkey: {:?}, end_partition_index: {}, max_slot_in_storages_inclusive: {}", - range, - pubkey, - end_partition_index, - max_slot_in_storages_inclusive, - ); - } - } - - // check max_slot_in_storages_inclusive related code - // so sweep through max_slot_in_storages_inclusive values within an epoch - let first_slot_in_max_epoch = first_normal_slot + slots_per_epoch; - rent_collector.epoch = epoch_schedule.get_epoch(first_slot_in_max_epoch); - // an epoch in the past so we always collect rent - let storage_slot = first_normal_slot; - for partition_index in [ - 0, - 1, - 2, - partition_from_pubkey - 1, - partition_from_pubkey, - partition_from_pubkey + 1, - 100, - slots_per_epoch - 2, - slots_per_epoch - 1, - ] { - // partition_index=0 means first slot of second normal epoch - // second normal epoch because we want to deal with accounts stored in the first normal epoch - // + 1 because of exclusive - let max_slot_in_storages_inclusive = first_slot_in_max_epoch + partition_index; - let result = ExpectedRentCollection::new( - &pubkey, - &account, - storage_slot, - &epoch_schedule, - &rent_collector, - &SlotInfoInEpoch::new(max_slot_in_storages_inclusive, &epoch_schedule), - find_unskipped_slot, - None, - ); - let partition_index_passed_pubkey = partition_from_pubkey <= partition_index; - let expected_rent_epoch = - rent_collector.epoch - u64::from(!partition_index_passed_pubkey); - let expected_rent_collection_slot_max_epoch = first_slot_in_max_epoch - + partition_from_pubkey - - if partition_index_passed_pubkey { - 0 - } else { - slots_per_epoch - }; - - assert_eq!( - result, - Some(ExpectedRentCollection { - partition_from_pubkey, - epoch_of_max_storage_slot: rent_collector.epoch, - partition_index_from_max_slot: partition_index, - first_slot_in_max_epoch, - expected_rent_collection_slot_max_epoch, - rent_epoch: expected_rent_epoch, - }), - "partition_index: {}, max_slot_in_storages_inclusive: {}, storage_slot: {}, first_normal_slot: {}", - partition_index, - max_slot_in_storages_inclusive, - storage_slot, - first_normal_slot, - ); - } - - // test account.rent_epoch = 0 - let first_slot_in_max_epoch = 1388256; - for account_rent_epoch in [0, epoch] { - account.set_rent_epoch(account_rent_epoch); - let result = ExpectedRentCollection::new( - &pubkey, - &account, - storage_slot, - &epoch_schedule, - &rent_collector, - &SlotInfoInEpoch::new(max_slot_in_storages_inclusive, &epoch_schedule), - find_unskipped_slot, - None, - ); - assert_eq!( - result, - (account_rent_epoch != 0).then(|| ExpectedRentCollection { - partition_from_pubkey, - epoch_of_max_storage_slot: rent_collector.epoch + 1, - partition_index_from_max_slot: partition_index_max_inclusive, - first_slot_in_max_epoch, - expected_rent_collection_slot_max_epoch, - rent_epoch: rent_collector.epoch, - }) - ); - } - - // test find_unskipped_slot - for find_unskipped_slot in [ - |_| None, - Some, // identity - |slot| Some(slot + 1), // increment - |_| Some(Slot::MAX), // max - ] { - let test_value = 10; - let find_result = find_unskipped_slot(test_value); - let increment = find_result.unwrap_or_default() == test_value + 1; - let result = ExpectedRentCollection::new( - &pubkey, - &account, - storage_slot, - &epoch_schedule, - &rent_collector, - &SlotInfoInEpoch::new(max_slot_in_storages_inclusive, &epoch_schedule), - find_unskipped_slot, - None, - ); - // the test case of max is hacky - let prior_epoch = (partition_from_pubkey > partition_index_max_inclusive) - || find_unskipped_slot(0) == Some(Slot::MAX); - assert_eq!( - result, - Some(ExpectedRentCollection { - partition_from_pubkey, - epoch_of_max_storage_slot: rent_collector.epoch + 1, - partition_index_from_max_slot: partition_index_max_inclusive, - first_slot_in_max_epoch, - expected_rent_collection_slot_max_epoch: if find_result.unwrap_or_default() - == Slot::MAX - { - Slot::MAX - } else if increment { - expected_rent_collection_slot_max_epoch + 1 - } else { - expected_rent_collection_slot_max_epoch - }, - rent_epoch: rent_collector.epoch - u64::from(prior_epoch), - }), - "find_unskipped_slot(0): {:?}, rent_collector.epoch: {}, prior_epoch: {}", - find_unskipped_slot(0), - rent_collector.epoch, - prior_epoch, - ); - } - } - - #[test] - fn test_simplified_rent_collection() { - solana_logger::setup(); - let pubkey = Pubkey::new(&[5; 32]); - let owner = solana_sdk::pubkey::new_rand(); - let mut account = AccountSharedData::new(1, 0, &owner); - let mut epoch_schedule = EpochSchedule { - first_normal_epoch: 0, - ..EpochSchedule::default() - }; - epoch_schedule.first_normal_slot = 0; - let first_normal_slot = epoch_schedule.first_normal_slot; - let slots_per_epoch = 432_000; - let partition_from_pubkey = 8470; // function of 432k slots and 'pubkey' above - // start in epoch=1 because of issues at rent_epoch=1 - let storage_slot = first_normal_slot + partition_from_pubkey + slots_per_epoch; - let epoch = epoch_schedule.get_epoch(storage_slot); - assert_eq!( - (epoch, partition_from_pubkey), - epoch_schedule.get_epoch_and_slot_index(storage_slot) - ); - let genesis_config = GenesisConfig::default(); - let mut rent_collector = RentCollector::new( - epoch, - epoch_schedule, - genesis_config.slots_per_year(), - genesis_config.rent, - ); - rent_collector.rent.lamports_per_byte_year = 0; // temporarily disable rent - - assert_eq!( - slots_per_epoch, - epoch_schedule.get_slots_in_epoch(epoch_schedule.get_epoch(storage_slot)) - ); - account.set_rent_epoch(1); // has to be not 0 - - /* - test this: - pubkey_partition_index: 8470 - storage_slot: 8470 - account.rent_epoch: 1 (has to be not 0) - - max_slot: 8469 + 432k * 1 - max_slot: 8470 + 432k * 1 - max_slot: 8471 + 432k * 1 - max_slot: 8472 + 432k * 1 - max_slot: 8469 + 432k * 2 - max_slot: 8470 + 432k * 2 - max_slot: 8471 + 432k * 2 - max_slot: 8472 + 432k * 2 - max_slot: 8469 + 432k * 3 - max_slot: 8470 + 432k * 3 - max_slot: 8471 + 432k * 3 - max_slot: 8472 + 432k * 3 - - one run without skipping slot 8470, once WITH skipping slot 8470 - */ - - for skipped_slot in [false, true] { - let find_unskipped_slot = if skipped_slot { - |slot| Some(slot + 1) - } else { - Some - }; - - // starting at epoch = 0 has issues because of rent_epoch=0 special casing - for epoch in 1..4 { - for partition_index_from_max_slot in - partition_from_pubkey - 1..=partition_from_pubkey + 2 - { - let max_slot_in_storages_inclusive = - slots_per_epoch * epoch + first_normal_slot + partition_index_from_max_slot; - if storage_slot > max_slot_in_storages_inclusive { - continue; // illegal combination - } - rent_collector.epoch = epoch_schedule.get_epoch(max_slot_in_storages_inclusive); - let first_slot_in_max_epoch = max_slot_in_storages_inclusive - - max_slot_in_storages_inclusive % slots_per_epoch; - let skip_offset = u64::from(skipped_slot); - let mut expected_rent_collection_slot_max_epoch = - first_slot_in_max_epoch + partition_from_pubkey + skip_offset; - let hit_this_epoch = - expected_rent_collection_slot_max_epoch <= max_slot_in_storages_inclusive; - if !hit_this_epoch { - expected_rent_collection_slot_max_epoch -= slots_per_epoch; - } - - assert_eq!( - (epoch, partition_index_from_max_slot), - epoch_schedule.get_epoch_and_slot_index(max_slot_in_storages_inclusive) - ); - assert_eq!( - (epoch, 0), - epoch_schedule.get_epoch_and_slot_index(first_slot_in_max_epoch) - ); - account.set_rent_epoch(1); - let result = ExpectedRentCollection::new( - &pubkey, - &account, - storage_slot, - &epoch_schedule, - &rent_collector, - &SlotInfoInEpoch::new(max_slot_in_storages_inclusive, &epoch_schedule), - find_unskipped_slot, - None, - ); - let some_expected = if epoch == 1 { - skipped_slot && partition_index_from_max_slot > partition_from_pubkey - } else if epoch == 2 { - partition_index_from_max_slot >= partition_from_pubkey - skip_offset - } else { - true - }; - assert_eq!( - result, - some_expected.then(|| ExpectedRentCollection { - partition_from_pubkey, - epoch_of_max_storage_slot: rent_collector.epoch, - partition_index_from_max_slot, - first_slot_in_max_epoch, - expected_rent_collection_slot_max_epoch, - rent_epoch: rent_collector.epoch - u64::from(!hit_this_epoch), - }), - "partition_index_from_max_slot: {}, epoch: {}, hit_this_epoch: {}, skipped_slot: {}", - partition_index_from_max_slot, - epoch, - hit_this_epoch, - skipped_slot, - ); - - // test RentResult::LeaveAloneNoRent - { - let result = ExpectedRentCollection::new( - &pubkey, - &account, - storage_slot, - &epoch_schedule, - &rent_collector, - &SlotInfoInEpoch::new(max_slot_in_storages_inclusive, &epoch_schedule), - find_unskipped_slot, - // treat this pubkey like a filler account so we get a 'LeaveAloneNoRent' result - Some(&pubkey), - ); - assert_eq!( - result, - some_expected.then(|| ExpectedRentCollection { - partition_from_pubkey, - epoch_of_max_storage_slot: rent_collector.epoch, - partition_index_from_max_slot, - first_slot_in_max_epoch, - expected_rent_collection_slot_max_epoch, - // this will not be adjusted for 'LeaveAloneNoRent' - rent_epoch: account.rent_epoch(), - }), - "partition_index_from_max_slot: {}, epoch: {}", - partition_index_from_max_slot, - epoch, - ); - } - - // test maybe_rehash_skipped_rewrite - let hash = AccountsDb::hash_account(storage_slot, &account, &pubkey); - let maybe_rehash = ExpectedRentCollection::maybe_rehash_skipped_rewrite( - &account, - &hash, - &pubkey, - storage_slot, - &epoch_schedule, - &rent_collector, - &HashStats::default(), - &SlotInfoInEpoch::new(max_slot_in_storages_inclusive, &epoch_schedule), - find_unskipped_slot, - None, - ); - assert_eq!( - maybe_rehash, - some_expected.then(|| { - AccountsDb::hash_account_with_rent_epoch( - result - .as_ref() - .unwrap() - .expected_rent_collection_slot_max_epoch, - &account, - &pubkey, - result.as_ref().unwrap().rent_epoch, - ) - }) - ); - } - } - } - } - - #[test] - fn test_get_corrected_rent_epoch_on_load() { - solana_logger::setup(); - let pubkey = Pubkey::new(&[5; 32]); - let owner = solana_sdk::pubkey::new_rand(); - let mut account = AccountSharedData::new(1, 0, &owner); - let mut epoch_schedule = EpochSchedule { - first_normal_epoch: 0, - ..EpochSchedule::default() - }; - epoch_schedule.first_normal_slot = 0; - let first_normal_slot = epoch_schedule.first_normal_slot; - let slots_per_epoch = 432_000; - let partition_from_pubkey = 8470; // function of 432k slots and 'pubkey' above - // start in epoch=1 because of issues at rent_epoch=1 - let storage_slot = first_normal_slot + partition_from_pubkey + slots_per_epoch; - let epoch = epoch_schedule.get_epoch(storage_slot); - assert_eq!( - (epoch, partition_from_pubkey), - epoch_schedule.get_epoch_and_slot_index(storage_slot) - ); - let genesis_config = GenesisConfig::default(); - let mut rent_collector = RentCollector::new( - epoch, - epoch_schedule, - genesis_config.slots_per_year(), - genesis_config.rent, - ); - rent_collector.rent.lamports_per_byte_year = 0; // temporarily disable rent - - assert_eq!( - slots_per_epoch, - epoch_schedule.get_slots_in_epoch(epoch_schedule.get_epoch(storage_slot)) - ); - account.set_rent_epoch(1); // has to be not 0 - - /* - test this: - pubkey_partition_index: 8470 - storage_slot: 8470 - account.rent_epoch: 1 (has to be not 0) - - max_slot: 8469 + 432k * 1 - max_slot: 8470 + 432k * 1 - max_slot: 8471 + 432k * 1 - max_slot: 8472 + 432k * 1 - max_slot: 8469 + 432k * 2 - max_slot: 8470 + 432k * 2 - max_slot: 8471 + 432k * 2 - max_slot: 8472 + 432k * 2 - max_slot: 8469 + 432k * 3 - max_slot: 8470 + 432k * 3 - max_slot: 8471 + 432k * 3 - max_slot: 8472 + 432k * 3 - - one run without skipping slot 8470, once WITH skipping slot 8470 - */ - - for new_small in [false, true] { - for rewrite_already in [false, true] { - // starting at epoch = 0 has issues because of rent_epoch=0 special casing - for epoch in 1..4 { - for partition_index_bank_slot in - partition_from_pubkey - 1..=partition_from_pubkey + 2 - { - let bank_slot = - slots_per_epoch * epoch + first_normal_slot + partition_index_bank_slot; - if storage_slot > bank_slot { - continue; // illegal combination - } - rent_collector.epoch = epoch_schedule.get_epoch(bank_slot); - let first_slot_in_max_epoch = bank_slot - bank_slot % slots_per_epoch; - - assert_eq!( - (epoch, partition_index_bank_slot), - epoch_schedule.get_epoch_and_slot_index(bank_slot) - ); - assert_eq!( - (epoch, 0), - epoch_schedule.get_epoch_and_slot_index(first_slot_in_max_epoch) - ); - account.set_rent_epoch(1); - let rewrites = Rewrites::default(); - if rewrite_already { - if partition_index_bank_slot != partition_from_pubkey { - // this is an invalid test occurrence. - // we wouldn't have inserted pubkey into 'rewrite_already' for this slot if the current partition index wasn't at the pubkey's partition idnex yet. - continue; - } - - rewrites.write().unwrap().insert(pubkey, Hash::default()); - } - let expected_new_rent_epoch = - if partition_index_bank_slot > partition_from_pubkey { - if epoch > account.rent_epoch() { - Some(rent_collector.epoch) - } else { - None - } - } else if partition_index_bank_slot == partition_from_pubkey - && rewrite_already - { - let expected_rent_epoch = rent_collector.epoch; - if expected_rent_epoch == account.rent_epoch() { - None - } else { - Some(expected_rent_epoch) - } - } else if partition_index_bank_slot <= partition_from_pubkey - && epoch > account.rent_epoch() - { - let expected_rent_epoch = rent_collector.epoch.saturating_sub(1); - if expected_rent_epoch == account.rent_epoch() { - None - } else { - Some(expected_rent_epoch) - } - } else { - None - }; - let get_slot_info = |slot| { - if new_small { - SlotInfoInEpoch::new_small(slot) - } else { - SlotInfoInEpoch::new(slot, &epoch_schedule) - } - }; - let new_rent_epoch = - ExpectedRentCollection::get_corrected_rent_epoch_on_load( - &account, - &get_slot_info(storage_slot), - &get_slot_info(bank_slot), - &epoch_schedule, - &rent_collector, - &pubkey, - &rewrites, - ); - assert_eq!(new_rent_epoch, expected_new_rent_epoch); - } - } - } - } - } -} diff --git a/runtime/src/lib.rs b/runtime/src/lib.rs index 16a3f78e6d8163..45d338bfe58127 100644 --- a/runtime/src/lib.rs +++ b/runtime/src/lib.rs @@ -36,7 +36,6 @@ pub mod cost_model; pub mod cost_tracker; pub mod epoch_stakes; pub mod execute_cost_table; -mod expected_rent_collection; pub mod genesis_utils; pub mod hardened_unpack; pub mod in_mem_accounts_index; diff --git a/runtime/src/snapshot_package.rs b/runtime/src/snapshot_package.rs index 8392e251765640..8dec38f18a1345 100644 --- a/runtime/src/snapshot_package.rs +++ b/runtime/src/snapshot_package.rs @@ -48,7 +48,6 @@ pub struct AccountsPackage { pub accounts: Arc, pub epoch_schedule: EpochSchedule, pub rent_collector: RentCollector, - pub disable_rehash_for_rent_epoch: bool, } impl AccountsPackage { @@ -119,9 +118,6 @@ impl AccountsPackage { accounts: bank.accounts(), epoch_schedule: *bank.epoch_schedule(), rent_collector: bank.rent_collector().clone(), - disable_rehash_for_rent_epoch: bank - .feature_set - .is_active(&solana_sdk::feature_set::disable_rehash_for_rent_epoch::id()), }) } } diff --git a/runtime/src/snapshot_utils.rs b/runtime/src/snapshot_utils.rs index e55386d3a0e1d0..e11f7a65d1ca86 100644 --- a/runtime/src/snapshot_utils.rs +++ b/runtime/src/snapshot_utils.rs @@ -2295,10 +2295,7 @@ fn can_submit_accounts_package( mod tests { use { super::*, - crate::{ - accounts_db::{ACCOUNTS_DB_CONFIG_FOR_TESTING, TEST_DISABLE_REHASH_FOR_RENT_EPOCH}, - status_cache::Status, - }, + crate::{accounts_db::ACCOUNTS_DB_CONFIG_FOR_TESTING, status_cache::Status}, assert_matches::assert_matches, bincode::{deserialize_from, serialize_into}, solana_sdk::{ @@ -3917,7 +3914,6 @@ mod tests { accounts: Arc::new(crate::accounts::Accounts::default_for_tests()), epoch_schedule: solana_sdk::epoch_schedule::EpochSchedule::default(), rent_collector: crate::rent_collector::RentCollector::default(), - disable_rehash_for_rent_epoch: TEST_DISABLE_REHASH_FOR_RENT_EPOCH, } } From df128573127c324cb5b53634a7e2d77427c6f2d8 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Sun, 4 Dec 2022 17:13:39 +0000 Subject: [PATCH 250/465] adds metrics for gossip push fanout (backport #29065) (#29067) adds metrics for gossip push fanout (#29065) (cherry picked from commit 718f433206c124da85a8aa2476c0753f351f9a28) Co-authored-by: behzad nouri --- gossip/src/cluster_info.rs | 10 ++++++++-- gossip/src/cluster_info_metrics.rs | 12 ++++++++++++ gossip/src/crds_gossip.rs | 6 +++++- gossip/src/crds_gossip_push.rs | 18 +++++++++++------- gossip/tests/crds_gossip.rs | 2 +- 5 files changed, 37 insertions(+), 11 deletions(-) diff --git a/gossip/src/cluster_info.rs b/gossip/src/cluster_info.rs index 37dcdc58634896..8b7c5111370529 100644 --- a/gossip/src/cluster_info.rs +++ b/gossip/src/cluster_info.rs @@ -1511,11 +1511,17 @@ impl ClusterInfo { } fn new_push_requests(&self, stakes: &HashMap) -> Vec<(SocketAddr, Protocol)> { let self_id = self.id(); - let mut push_messages = { + let (mut push_messages, num_entries, num_nodes) = { let _st = ScopedTimer::from(&self.stats.new_push_requests); self.gossip .new_push_messages(self.drain_push_queue(), timestamp()) }; + self.stats + .push_fanout_num_entries + .add_relaxed(num_entries as u64); + self.stats + .push_fanout_num_nodes + .add_relaxed(num_nodes as u64); if self.require_stake_for_gossip(stakes) { push_messages.retain(|_, data| { retain_staked(data, stakes); @@ -3723,7 +3729,7 @@ RPC Enabled Nodes: 1"#; &SocketAddrSpace::Unspecified, ); //check that all types of gossip messages are signed correctly - let push_messages = cluster_info + let (push_messages, _, _) = cluster_info .gossip .new_push_messages(cluster_info.drain_push_queue(), timestamp()); // there should be some pushes ready diff --git a/gossip/src/cluster_info_metrics.rs b/gossip/src/cluster_info_metrics.rs index 6d5a3586ce221c..ec869b5c181ca6 100644 --- a/gossip/src/cluster_info_metrics.rs +++ b/gossip/src/cluster_info_metrics.rs @@ -166,6 +166,8 @@ pub struct GossipStats { pub(crate) pull_requests_count: Counter, pub(crate) purge: Counter, pub(crate) purge_count: Counter, + pub(crate) push_fanout_num_entries: Counter, + pub(crate) push_fanout_num_nodes: Counter, pub(crate) push_message_count: Counter, pub(crate) push_message_pushes: Counter, pub(crate) push_message_value_count: Counter, @@ -443,6 +445,16 @@ pub(crate) fn submit_gossip_stats( i64 ), ("push_message_count", stats.push_message_count.clear(), i64), + ( + "push_fanout_num_entries", + stats.push_fanout_num_entries.clear(), + i64 + ), + ( + "push_fanout_num_nodes", + stats.push_fanout_num_nodes.clear(), + i64 + ), ( "push_message_pushes", stats.push_message_pushes.clear(), diff --git a/gossip/src/crds_gossip.rs b/gossip/src/crds_gossip.rs index 12764159d7dc49..fae3dc7295f8a9 100644 --- a/gossip/src/crds_gossip.rs +++ b/gossip/src/crds_gossip.rs @@ -86,7 +86,11 @@ impl CrdsGossip { &self, pending_push_messages: Vec, now: u64, - ) -> HashMap> { + ) -> ( + HashMap>, + usize, // number of values + usize, // number of push messages + ) { { let mut crds = self.crds.write().unwrap(); for entry in pending_push_messages { diff --git a/gossip/src/crds_gossip_push.rs b/gossip/src/crds_gossip_push.rs index 8285ab36bc40ba..034597f2cf1999 100644 --- a/gossip/src/crds_gossip_push.rs +++ b/gossip/src/crds_gossip_push.rs @@ -269,12 +269,16 @@ impl CrdsGossipPush { &self, crds: &RwLock, now: u64, - ) -> HashMap> { + ) -> ( + HashMap>, + usize, // number of values + usize, // number of push messages + ) { let active_set = self.active_set.read().unwrap(); let active_set_len = active_set.len(); let push_fanout = self.push_fanout.min(active_set_len); if push_fanout == 0 { - return HashMap::default(); + return (HashMap::default(), 0, 0); } let mut num_pushes = 0; let mut num_values = 0; @@ -318,7 +322,7 @@ impl CrdsGossipPush { for target_pubkey in push_messages.keys().copied() { last_pushed_to.put(target_pubkey, now); } - push_messages + (push_messages, num_values, num_pushes) } /// Add the `from` to the peer's filter of nodes. @@ -997,7 +1001,7 @@ mod tests { [Ok(origin)] ); assert_eq!(push.active_set.read().unwrap().len(), 1); - assert_eq!(push.new_push_messages(&crds, 0), expected); + assert_eq!(push.new_push_messages(&crds, 0).0, expected); } #[test] fn test_personalized_push_messages() { @@ -1051,7 +1055,7 @@ mod tests { .into_iter() .collect(); assert_eq!(push.active_set.read().unwrap().len(), 3); - assert_eq!(push.new_push_messages(&crds, now), expected); + assert_eq!(push.new_push_messages(&crds, now).0, expected); } #[test] fn test_process_prune() { @@ -1096,7 +1100,7 @@ mod tests { &peer.label().pubkey(), &[new_msg.label().pubkey()], ); - assert_eq!(push.new_push_messages(&crds, 0), expected); + assert_eq!(push.new_push_messages(&crds, 0).0, expected); } #[test] fn test_purge_old_pending_push_messages() { @@ -1131,7 +1135,7 @@ mod tests { push.process_push_message(&crds, &Pubkey::default(), vec![new_msg], 1), [Ok(origin)], ); - assert_eq!(push.new_push_messages(&crds, 0), expected); + assert_eq!(push.new_push_messages(&crds, 0).0, expected); } #[test] diff --git a/gossip/tests/crds_gossip.rs b/gossip/tests/crds_gossip.rs index 0ac4a68e188b74..0c0d4e8b4fc19b 100644 --- a/gossip/tests/crds_gossip.rs +++ b/gossip/tests/crds_gossip.rs @@ -347,7 +347,7 @@ fn network_run_push( Duration::from_millis(node.gossip.pull.crds_timeout), ); node.gossip.purge(&node_pubkey, thread_pool, now, &timeouts); - (node_pubkey, node.gossip.new_push_messages(vec![], now)) + (node_pubkey, node.gossip.new_push_messages(vec![], now).0) }) .collect(); let transfered: Vec<_> = requests From bcd7d1d74bed18002432f18e0434cdd8cd363be7 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sun, 4 Dec 2022 22:49:50 -0600 Subject: [PATCH 251/465] Bump Version to 1.14.11 (#29071) Co-authored-by: willhickey --- Cargo.lock | 484 ++++++++--------- account-decoder/Cargo.toml | 10 +- accounts-bench/Cargo.toml | 12 +- accounts-cluster-bench/Cargo.toml | 34 +- banking-bench/Cargo.toml | 26 +- banks-client/Cargo.toml | 12 +- banks-interface/Cargo.toml | 4 +- banks-server/Cargo.toml | 12 +- bench-streamer/Cargo.toml | 8 +- bench-tps/Cargo.toml | 38 +- bloom/Cargo.toml | 8 +- bucket_map/Cargo.toml | 8 +- clap-utils/Cargo.toml | 8 +- clap-v3-utils/Cargo.toml | 8 +- cli-config/Cargo.toml | 6 +- cli-output/Cargo.toml | 16 +- cli/Cargo.toml | 38 +- client-test/Cargo.toml | 32 +- client/Cargo.toml | 28 +- core/Cargo.toml | 56 +- dos/Cargo.toml | 30 +- download-utils/Cargo.toml | 6 +- entry/Cargo.toml | 16 +- faucet/Cargo.toml | 14 +- frozen-abi/Cargo.toml | 6 +- frozen-abi/macro/Cargo.toml | 2 +- genesis-utils/Cargo.toml | 8 +- genesis/Cargo.toml | 22 +- geyser-plugin-interface/Cargo.toml | 6 +- geyser-plugin-manager/Cargo.toml | 16 +- gossip/Cargo.toml | 38 +- install/Cargo.toml | 14 +- keygen/Cargo.toml | 12 +- ledger-tool/Cargo.toml | 30 +- ledger/Cargo.toml | 40 +- local-cluster/Cargo.toml | 28 +- log-analyzer/Cargo.toml | 6 +- logger/Cargo.toml | 2 +- measure/Cargo.toml | 4 +- merkle-root-bench/Cargo.toml | 12 +- merkle-tree/Cargo.toml | 4 +- metrics/Cargo.toml | 4 +- net-shaper/Cargo.toml | 4 +- net-utils/Cargo.toml | 8 +- notifier/Cargo.toml | 2 +- perf/Cargo.toml | 12 +- poh-bench/Cargo.toml | 14 +- poh/Cargo.toml | 20 +- program-runtime/Cargo.toml | 14 +- program-test/Cargo.toml | 18 +- .../address-lookup-table-tests/Cargo.toml | 8 +- programs/address-lookup-table/Cargo.toml | 12 +- programs/bpf-loader-tests/Cargo.toml | 8 +- programs/bpf/Cargo.lock | 490 +++++++++--------- programs/bpf/Cargo.toml | 28 +- programs/bpf/rust/128bit/Cargo.toml | 6 +- programs/bpf/rust/128bit_dep/Cargo.toml | 4 +- programs/bpf/rust/alloc/Cargo.toml | 4 +- programs/bpf/rust/call_depth/Cargo.toml | 4 +- programs/bpf/rust/caller_access/Cargo.toml | 4 +- programs/bpf/rust/curve25519/Cargo.toml | 6 +- programs/bpf/rust/custom_heap/Cargo.toml | 4 +- programs/bpf/rust/dep_crate/Cargo.toml | 6 +- .../bpf/rust/deprecated_loader/Cargo.toml | 4 +- programs/bpf/rust/dup_accounts/Cargo.toml | 4 +- programs/bpf/rust/error_handling/Cargo.toml | 4 +- programs/bpf/rust/external_spend/Cargo.toml | 4 +- programs/bpf/rust/finalize/Cargo.toml | 4 +- .../rust/get_minimum_delegation/Cargo.toml | 4 +- .../Cargo.toml | 4 +- .../rust/instruction_introspection/Cargo.toml | 4 +- programs/bpf/rust/invoke/Cargo.toml | 4 +- programs/bpf/rust/invoke_and_error/Cargo.toml | 4 +- programs/bpf/rust/invoke_and_ok/Cargo.toml | 4 +- .../bpf/rust/invoke_and_return/Cargo.toml | 4 +- programs/bpf/rust/invoked/Cargo.toml | 4 +- programs/bpf/rust/iter/Cargo.toml | 4 +- programs/bpf/rust/log_data/Cargo.toml | 4 +- programs/bpf/rust/many_args/Cargo.toml | 6 +- programs/bpf/rust/many_args_dep/Cargo.toml | 4 +- programs/bpf/rust/mem/Cargo.toml | 10 +- programs/bpf/rust/membuiltins/Cargo.toml | 6 +- programs/bpf/rust/noop/Cargo.toml | 4 +- programs/bpf/rust/panic/Cargo.toml | 4 +- programs/bpf/rust/param_passing/Cargo.toml | 6 +- .../bpf/rust/param_passing_dep/Cargo.toml | 4 +- programs/bpf/rust/rand/Cargo.toml | 4 +- programs/bpf/rust/realloc/Cargo.toml | 4 +- programs/bpf/rust/realloc_invoke/Cargo.toml | 6 +- .../bpf/rust/ro_account_modify/Cargo.toml | 4 +- programs/bpf/rust/ro_modify/Cargo.toml | 4 +- programs/bpf/rust/sanity/Cargo.toml | 10 +- .../bpf/rust/secp256k1_recover/Cargo.toml | 4 +- programs/bpf/rust/sha/Cargo.toml | 4 +- .../rust/sibling_inner_instruction/Cargo.toml | 4 +- .../bpf/rust/sibling_instruction/Cargo.toml | 4 +- programs/bpf/rust/simulation/Cargo.toml | 12 +- programs/bpf/rust/spoof1/Cargo.toml | 4 +- programs/bpf/rust/spoof1_system/Cargo.toml | 4 +- programs/bpf/rust/sysvar/Cargo.toml | 10 +- programs/bpf/rust/upgradeable/Cargo.toml | 4 +- programs/bpf/rust/upgraded/Cargo.toml | 4 +- programs/bpf_loader/Cargo.toml | 14 +- .../bpf_loader/gen-syscall-list/Cargo.toml | 2 +- programs/compute-budget/Cargo.toml | 6 +- programs/config/Cargo.toml | 8 +- programs/ed25519-tests/Cargo.toml | 6 +- programs/stake/Cargo.toml | 18 +- programs/vote/Cargo.toml | 14 +- programs/zk-token-proof/Cargo.toml | 8 +- rayon-threadlimit/Cargo.toml | 2 +- rbpf-cli/Cargo.toml | 10 +- remote-wallet/Cargo.toml | 4 +- rpc-test/Cargo.toml | 18 +- rpc/Cargo.toml | 48 +- runtime/Cargo.toml | 34 +- runtime/store-tool/Cargo.toml | 8 +- sdk/Cargo.toml | 12 +- sdk/cargo-build-bpf/Cargo.toml | 4 +- sdk/cargo-build-sbf/Cargo.toml | 8 +- .../tests/crates/fail/Cargo.toml | 4 +- .../tests/crates/noop/Cargo.toml | 4 +- sdk/cargo-test-bpf/Cargo.toml | 2 +- sdk/cargo-test-sbf/Cargo.toml | 2 +- sdk/gen-headers/Cargo.toml | 2 +- sdk/macro/Cargo.toml | 2 +- sdk/program/Cargo.toml | 10 +- send-transaction-service/Cargo.toml | 14 +- stake-accounts/Cargo.toml | 16 +- storage-bigtable/Cargo.toml | 10 +- storage-bigtable/build-proto/Cargo.lock | 2 +- storage-bigtable/build-proto/Cargo.toml | 2 +- storage-proto/Cargo.toml | 8 +- streamer/Cargo.toml | 10 +- sys-tuner/Cargo.toml | 6 +- test-validator/Cargo.toml | 28 +- tokens/Cargo.toml | 24 +- transaction-dos/Cargo.toml | 32 +- transaction-status/Cargo.toml | 14 +- upload-perf/Cargo.toml | 4 +- validator/Cargo.toml | 50 +- version/Cargo.toml | 8 +- watchtower/Cargo.toml | 20 +- zk-token-sdk/Cargo.toml | 6 +- 144 files changed, 1269 insertions(+), 1269 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index c6f7abc02227c5..0237c28cf82c49 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1688,7 +1688,7 @@ dependencies = [ [[package]] name = "gen-headers" -version = "1.14.10" +version = "1.14.11" dependencies = [ "log", "regex", @@ -1696,7 +1696,7 @@ dependencies = [ [[package]] name = "gen-syscall-list" -version = "1.14.10" +version = "1.14.11" dependencies = [ "regex", ] @@ -3747,15 +3747,15 @@ dependencies = [ [[package]] name = "rbpf-cli" -version = "1.14.10" +version = "1.14.11" dependencies = [ "clap 3.1.8", "serde", "serde_json", "solana-bpf-loader-program", - "solana-logger 1.14.10", + "solana-logger 1.14.11", "solana-program-runtime", - "solana-sdk 1.14.10", + "solana-sdk 1.14.11", "solana_rbpf", ] @@ -4467,7 +4467,7 @@ dependencies = [ [[package]] name = "solana-account-decoder" -version = "1.14.10" +version = "1.14.11" dependencies = [ "Inflector", "base64 0.13.0", @@ -4480,7 +4480,7 @@ dependencies = [ "serde_json", "solana-address-lookup-table-program", "solana-config-program", - "solana-sdk 1.14.10", + "solana-sdk 1.14.11", "solana-vote-program", "spl-token", "spl-token-2022", @@ -4490,21 +4490,21 @@ dependencies = [ [[package]] name = "solana-accounts-bench" -version = "1.14.10" +version = "1.14.11" dependencies = [ "clap 2.33.3", "log", "rayon", - "solana-logger 1.14.10", + "solana-logger 1.14.11", "solana-measure", "solana-runtime", - "solana-sdk 1.14.10", + "solana-sdk 1.14.11", "solana-version", ] [[package]] name = "solana-accounts-cluster-bench" -version = "1.14.10" +version = "1.14.11" dependencies = [ "clap 2.33.3", "log", @@ -4517,11 +4517,11 @@ dependencies = [ "solana-faucet", "solana-gossip", "solana-local-cluster", - "solana-logger 1.14.10", + "solana-logger 1.14.11", "solana-measure", "solana-net-utils", "solana-runtime", - "solana-sdk 1.14.10", + "solana-sdk 1.14.11", "solana-streamer", "solana-test-validator", "solana-transaction-status", @@ -4531,7 +4531,7 @@ dependencies = [ [[package]] name = "solana-address-lookup-table-program" -version = "1.14.10" +version = "1.14.11" dependencies = [ "bincode", "bytemuck", @@ -4540,28 +4540,28 @@ dependencies = [ "num-traits", "rustc_version 0.4.0", "serde", - "solana-frozen-abi 1.14.10", - "solana-frozen-abi-macro 1.14.10", - "solana-program 1.14.10", + "solana-frozen-abi 1.14.11", + "solana-frozen-abi-macro 1.14.11", + "solana-program 1.14.11", "solana-program-runtime", - "solana-sdk 1.14.10", + "solana-sdk 1.14.11", "thiserror", ] [[package]] name = "solana-address-lookup-table-program-tests" -version = "1.14.10" +version = "1.14.11" dependencies = [ "assert_matches", "bincode", "solana-address-lookup-table-program", "solana-program-test", - "solana-sdk 1.14.10", + "solana-sdk 1.14.11", ] [[package]] name = "solana-banking-bench" -version = "1.14.10" +version = "1.14.11" dependencies = [ "clap 3.1.8", "crossbeam-channel", @@ -4572,27 +4572,27 @@ dependencies = [ "solana-core", "solana-gossip", "solana-ledger", - "solana-logger 1.14.10", + "solana-logger 1.14.11", "solana-measure", "solana-perf", "solana-poh", "solana-runtime", - "solana-sdk 1.14.10", + "solana-sdk 1.14.11", "solana-streamer", "solana-version", ] [[package]] name = "solana-banks-client" -version = "1.14.10" +version = "1.14.11" dependencies = [ "borsh", "futures 0.3.21", "solana-banks-interface", "solana-banks-server", - "solana-program 1.14.10", + "solana-program 1.14.11", "solana-runtime", - "solana-sdk 1.14.10", + "solana-sdk 1.14.11", "tarpc", "thiserror", "tokio", @@ -4601,16 +4601,16 @@ dependencies = [ [[package]] name = "solana-banks-interface" -version = "1.14.10" +version = "1.14.11" dependencies = [ "serde", - "solana-sdk 1.14.10", + "solana-sdk 1.14.11", "tarpc", ] [[package]] name = "solana-banks-server" -version = "1.14.10" +version = "1.14.11" dependencies = [ "bincode", "crossbeam-channel", @@ -4618,7 +4618,7 @@ dependencies = [ "solana-banks-interface", "solana-client", "solana-runtime", - "solana-sdk 1.14.10", + "solana-sdk 1.14.11", "solana-send-transaction-service", "tarpc", "tokio", @@ -4628,7 +4628,7 @@ dependencies = [ [[package]] name = "solana-bench-streamer" -version = "1.14.10" +version = "1.14.11" dependencies = [ "clap 3.1.8", "crossbeam-channel", @@ -4639,7 +4639,7 @@ dependencies = [ [[package]] name = "solana-bench-tps" -version = "1.14.10" +version = "1.14.11" dependencies = [ "clap 2.33.3", "crossbeam-channel", @@ -4656,13 +4656,13 @@ dependencies = [ "solana-genesis", "solana-gossip", "solana-local-cluster", - "solana-logger 1.14.10", + "solana-logger 1.14.11", "solana-measure", "solana-metrics", "solana-net-utils", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.10", + "solana-sdk 1.14.11", "solana-streamer", "solana-test-validator", "solana-version", @@ -4671,7 +4671,7 @@ dependencies = [ [[package]] name = "solana-bloom" -version = "1.14.10" +version = "1.14.11" dependencies = [ "bv", "fnv", @@ -4681,14 +4681,14 @@ dependencies = [ "rustc_version 0.4.0", "serde", "serde_derive", - "solana-frozen-abi 1.14.10", - "solana-frozen-abi-macro 1.14.10", - "solana-sdk 1.14.10", + "solana-frozen-abi 1.14.11", + "solana-frozen-abi-macro 1.14.11", + "solana-sdk 1.14.11", ] [[package]] name = "solana-bpf-loader-program" -version = "1.14.10" +version = "1.14.11" dependencies = [ "bincode", "byteorder", @@ -4699,26 +4699,26 @@ dependencies = [ "solana-metrics", "solana-program-runtime", "solana-runtime", - "solana-sdk 1.14.10", - "solana-zk-token-sdk 1.14.10", + "solana-sdk 1.14.11", + "solana-zk-token-sdk 1.14.11", "solana_rbpf", "thiserror", ] [[package]] name = "solana-bpf-loader-program-tests" -version = "1.14.10" +version = "1.14.11" dependencies = [ "assert_matches", "bincode", "solana-bpf-loader-program", "solana-program-test", - "solana-sdk 1.14.10", + "solana-sdk 1.14.11", ] [[package]] name = "solana-bucket-map" -version = "1.14.10" +version = "1.14.11" dependencies = [ "fs_extra", "log", @@ -4726,24 +4726,24 @@ dependencies = [ "modular-bitfield", "rand 0.7.3", "rayon", - "solana-logger 1.14.10", + "solana-logger 1.14.11", "solana-measure", - "solana-sdk 1.14.10", + "solana-sdk 1.14.11", "tempfile", ] [[package]] name = "solana-cargo-build-bpf" -version = "1.14.10" +version = "1.14.11" dependencies = [ "cargo_metadata", "clap 3.1.8", - "solana-sdk 1.14.10", + "solana-sdk 1.14.11", ] [[package]] name = "solana-cargo-build-sbf" -version = "1.14.10" +version = "1.14.11" dependencies = [ "bzip2", "cargo_metadata", @@ -4752,14 +4752,14 @@ dependencies = [ "regex", "serial_test", "solana-download-utils", - "solana-logger 1.14.10", - "solana-sdk 1.14.10", + "solana-logger 1.14.11", + "solana-sdk 1.14.11", "tar", ] [[package]] name = "solana-cargo-test-bpf" -version = "1.14.10" +version = "1.14.11" dependencies = [ "cargo_metadata", "clap 3.1.8", @@ -4767,7 +4767,7 @@ dependencies = [ [[package]] name = "solana-cargo-test-sbf" -version = "1.14.10" +version = "1.14.11" dependencies = [ "cargo_metadata", "clap 3.1.8", @@ -4775,14 +4775,14 @@ dependencies = [ [[package]] name = "solana-clap-utils" -version = "1.14.10" +version = "1.14.11" dependencies = [ "chrono", "clap 2.33.3", "rpassword", "solana-perf", "solana-remote-wallet", - "solana-sdk 1.14.10", + "solana-sdk 1.14.11", "tempfile", "thiserror", "tiny-bip39", @@ -4792,14 +4792,14 @@ dependencies = [ [[package]] name = "solana-clap-v3-utils" -version = "1.14.10" +version = "1.14.11" dependencies = [ "chrono", "clap 3.1.8", "rpassword", "solana-perf", "solana-remote-wallet", - "solana-sdk 1.14.10", + "solana-sdk 1.14.11", "tempfile", "thiserror", "tiny-bip39", @@ -4809,7 +4809,7 @@ dependencies = [ [[package]] name = "solana-cli" -version = "1.14.10" +version = "1.14.11" dependencies = [ "bincode", "bs58", @@ -4837,10 +4837,10 @@ dependencies = [ "solana-client", "solana-config-program", "solana-faucet", - "solana-logger 1.14.10", + "solana-logger 1.14.11", "solana-program-runtime", "solana-remote-wallet", - "solana-sdk 1.14.10", + "solana-sdk 1.14.11", "solana-streamer", "solana-test-validator", "solana-transaction-status", @@ -4855,7 +4855,7 @@ dependencies = [ [[package]] name = "solana-cli-config" -version = "1.14.10" +version = "1.14.11" dependencies = [ "anyhow", "dirs-next", @@ -4864,13 +4864,13 @@ dependencies = [ "serde_derive", "serde_yaml", "solana-clap-utils", - "solana-sdk 1.14.10", + "solana-sdk 1.14.11", "url 2.2.2", ] [[package]] name = "solana-cli-output" -version = "1.14.10" +version = "1.14.11" dependencies = [ "Inflector", "base64 0.13.0", @@ -4888,7 +4888,7 @@ dependencies = [ "solana-clap-utils", "solana-cli-config", "solana-client", - "solana-sdk 1.14.10", + "solana-sdk 1.14.11", "solana-transaction-status", "solana-vote-program", "spl-memo", @@ -4896,7 +4896,7 @@ dependencies = [ [[package]] name = "solana-client" -version = "1.14.10" +version = "1.14.11" dependencies = [ "anyhow", "assert_matches", @@ -4932,12 +4932,12 @@ dependencies = [ "solana-account-decoder", "solana-clap-utils", "solana-faucet", - "solana-logger 1.14.10", + "solana-logger 1.14.11", "solana-measure", "solana-metrics", "solana-net-utils", "solana-perf", - "solana-sdk 1.14.10", + "solana-sdk 1.14.11", "solana-streamer", "solana-transaction-status", "solana-version", @@ -4953,14 +4953,14 @@ dependencies = [ [[package]] name = "solana-client-test" -version = "1.14.10" +version = "1.14.11" dependencies = [ "futures-util", "serde_json", "serial_test", "solana-client", "solana-ledger", - "solana-logger 1.14.10", + "solana-logger 1.14.11", "solana-measure", "solana-merkle-tree", "solana-metrics", @@ -4968,7 +4968,7 @@ dependencies = [ "solana-rayon-threadlimit", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.10", + "solana-sdk 1.14.11", "solana-streamer", "solana-test-validator", "solana-transaction-status", @@ -4979,28 +4979,28 @@ dependencies = [ [[package]] name = "solana-compute-budget-program" -version = "1.14.10" +version = "1.14.11" dependencies = [ "solana-program-runtime", - "solana-sdk 1.14.10", + "solana-sdk 1.14.11", ] [[package]] name = "solana-config-program" -version = "1.14.10" +version = "1.14.11" dependencies = [ "bincode", "chrono", "serde", "serde_derive", - "solana-logger 1.14.10", + "solana-logger 1.14.11", "solana-program-runtime", - "solana-sdk 1.14.10", + "solana-sdk 1.14.11", ] [[package]] name = "solana-core" -version = "1.14.10" +version = "1.14.11" dependencies = [ "ahash", "base64 0.13.0", @@ -5033,12 +5033,12 @@ dependencies = [ "solana-bloom", "solana-client", "solana-entry", - "solana-frozen-abi 1.14.10", - "solana-frozen-abi-macro 1.14.10", + "solana-frozen-abi 1.14.11", + "solana-frozen-abi-macro 1.14.11", "solana-geyser-plugin-manager", "solana-gossip", "solana-ledger", - "solana-logger 1.14.10", + "solana-logger 1.14.11", "solana-measure", "solana-metrics", "solana-net-utils", @@ -5048,7 +5048,7 @@ dependencies = [ "solana-rayon-threadlimit", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.10", + "solana-sdk 1.14.11", "solana-send-transaction-service", "solana-stake-program", "solana-streamer", @@ -5068,7 +5068,7 @@ dependencies = [ [[package]] name = "solana-dos" -version = "1.14.10" +version = "1.14.11" dependencies = [ "bincode", "clap 3.1.8", @@ -5084,42 +5084,42 @@ dependencies = [ "solana-faucet", "solana-gossip", "solana-local-cluster", - "solana-logger 1.14.10", + "solana-logger 1.14.11", "solana-measure", "solana-net-utils", "solana-perf", "solana-rpc", - "solana-sdk 1.14.10", + "solana-sdk 1.14.11", "solana-streamer", "solana-version", ] [[package]] name = "solana-download-utils" -version = "1.14.10" +version = "1.14.11" dependencies = [ "console", "indicatif", "log", "reqwest", "solana-runtime", - "solana-sdk 1.14.10", + "solana-sdk 1.14.11", ] [[package]] name = "solana-ed25519-program-tests" -version = "1.14.10" +version = "1.14.11" dependencies = [ "assert_matches", "ed25519-dalek", "rand 0.7.3", "solana-program-test", - "solana-sdk 1.14.10", + "solana-sdk 1.14.11", ] [[package]] name = "solana-entry" -version = "1.14.10" +version = "1.14.11" dependencies = [ "bincode", "crossbeam-channel", @@ -5131,18 +5131,18 @@ dependencies = [ "rand 0.7.3", "rayon", "serde", - "solana-logger 1.14.10", + "solana-logger 1.14.11", "solana-measure", "solana-merkle-tree", "solana-metrics", "solana-perf", "solana-rayon-threadlimit", - "solana-sdk 1.14.10", + "solana-sdk 1.14.11", ] [[package]] name = "solana-faucet" -version = "1.14.10" +version = "1.14.11" dependencies = [ "bincode", "byteorder", @@ -5153,9 +5153,9 @@ dependencies = [ "serde_derive", "solana-clap-utils", "solana-cli-config", - "solana-logger 1.14.10", + "solana-logger 1.14.11", "solana-metrics", - "solana-sdk 1.14.10", + "solana-sdk 1.14.11", "solana-version", "spl-memo", "thiserror", @@ -5198,7 +5198,7 @@ dependencies = [ [[package]] name = "solana-frozen-abi" -version = "1.14.10" +version = "1.14.11" dependencies = [ "ahash", "blake3", @@ -5223,8 +5223,8 @@ dependencies = [ "serde_derive", "serde_json", "sha2 0.10.2", - "solana-frozen-abi-macro 1.14.10", - "solana-logger 1.14.10", + "solana-frozen-abi-macro 1.14.11", + "solana-logger 1.14.11", "subtle", "thiserror", ] @@ -5243,7 +5243,7 @@ dependencies = [ [[package]] name = "solana-frozen-abi-macro" -version = "1.14.10" +version = "1.14.11" dependencies = [ "proc-macro2 1.0.41", "quote 1.0.18", @@ -5253,7 +5253,7 @@ dependencies = [ [[package]] name = "solana-genesis" -version = "1.14.10" +version = "1.14.11" dependencies = [ "base64 0.13.0", "clap 2.33.3", @@ -5264,9 +5264,9 @@ dependencies = [ "solana-cli-config", "solana-entry", "solana-ledger", - "solana-logger 1.14.10", + "solana-logger 1.14.11", "solana-runtime", - "solana-sdk 1.14.10", + "solana-sdk 1.14.11", "solana-stake-program", "solana-version", "solana-vote-program", @@ -5275,26 +5275,26 @@ dependencies = [ [[package]] name = "solana-genesis-utils" -version = "1.14.10" +version = "1.14.11" dependencies = [ "solana-download-utils", "solana-runtime", - "solana-sdk 1.14.10", + "solana-sdk 1.14.11", ] [[package]] name = "solana-geyser-plugin-interface" -version = "1.14.10" +version = "1.14.11" dependencies = [ "log", - "solana-sdk 1.14.10", + "solana-sdk 1.14.11", "solana-transaction-status", "thiserror", ] [[package]] name = "solana-geyser-plugin-manager" -version = "1.14.10" +version = "1.14.11" dependencies = [ "bs58", "crossbeam-channel", @@ -5307,14 +5307,14 @@ dependencies = [ "solana-metrics", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.10", + "solana-sdk 1.14.11", "solana-transaction-status", "thiserror", ] [[package]] name = "solana-gossip" -version = "1.14.10" +version = "1.14.11" dependencies = [ "bincode", "bv", @@ -5341,17 +5341,17 @@ dependencies = [ "solana-clap-utils", "solana-client", "solana-entry", - "solana-frozen-abi 1.14.10", - "solana-frozen-abi-macro 1.14.10", + "solana-frozen-abi 1.14.11", + "solana-frozen-abi-macro 1.14.11", "solana-ledger", - "solana-logger 1.14.10", + "solana-logger 1.14.11", "solana-measure", "solana-metrics", "solana-net-utils", "solana-perf", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.14.10", + "solana-sdk 1.14.11", "solana-streamer", "solana-version", "solana-vote-program", @@ -5360,7 +5360,7 @@ dependencies = [ [[package]] name = "solana-install" -version = "1.14.10" +version = "1.14.11" dependencies = [ "atty", "bincode", @@ -5381,8 +5381,8 @@ dependencies = [ "solana-clap-utils", "solana-client", "solana-config-program", - "solana-logger 1.14.10", - "solana-sdk 1.14.10", + "solana-logger 1.14.11", + "solana-sdk 1.14.11", "solana-version", "tar", "tempfile", @@ -5393,7 +5393,7 @@ dependencies = [ [[package]] name = "solana-keygen" -version = "1.14.10" +version = "1.14.11" dependencies = [ "bs58", "clap 3.1.8", @@ -5402,14 +5402,14 @@ dependencies = [ "solana-clap-v3-utils", "solana-cli-config", "solana-remote-wallet", - "solana-sdk 1.14.10", + "solana-sdk 1.14.11", "solana-version", "tiny-bip39", ] [[package]] name = "solana-ledger" -version = "1.14.10" +version = "1.14.11" dependencies = [ "assert_matches", "bincode", @@ -5443,16 +5443,16 @@ dependencies = [ "solana-account-decoder", "solana-bpf-loader-program", "solana-entry", - "solana-frozen-abi 1.14.10", - "solana-frozen-abi-macro 1.14.10", - "solana-logger 1.14.10", + "solana-frozen-abi 1.14.11", + "solana-frozen-abi-macro 1.14.11", + "solana-logger 1.14.11", "solana-measure", "solana-metrics", "solana-perf", "solana-program-runtime", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.14.10", + "solana-sdk 1.14.11", "solana-stake-program", "solana-storage-bigtable", "solana-storage-proto", @@ -5471,7 +5471,7 @@ dependencies = [ [[package]] name = "solana-ledger-tool" -version = "1.14.10" +version = "1.14.11" dependencies = [ "assert_cmd", "base64 0.13.0", @@ -5493,10 +5493,10 @@ dependencies = [ "solana-core", "solana-entry", "solana-ledger", - "solana-logger 1.14.10", + "solana-logger 1.14.11", "solana-measure", "solana-runtime", - "solana-sdk 1.14.10", + "solana-sdk 1.14.11", "solana-stake-program", "solana-storage-bigtable", "solana-transaction-status", @@ -5508,7 +5508,7 @@ dependencies = [ [[package]] name = "solana-local-cluster" -version = "1.14.10" +version = "1.14.11" dependencies = [ "assert_matches", "crossbeam-channel", @@ -5526,9 +5526,9 @@ dependencies = [ "solana-entry", "solana-gossip", "solana-ledger", - "solana-logger 1.14.10", + "solana-logger 1.14.11", "solana-runtime", - "solana-sdk 1.14.10", + "solana-sdk 1.14.11", "solana-stake-program", "solana-streamer", "solana-vote-program", @@ -5537,13 +5537,13 @@ dependencies = [ [[package]] name = "solana-log-analyzer" -version = "1.14.10" +version = "1.14.11" dependencies = [ "byte-unit", "clap 3.1.8", "serde", "serde_json", - "solana-logger 1.14.10", + "solana-logger 1.14.11", "solana-version", ] @@ -5560,7 +5560,7 @@ dependencies = [ [[package]] name = "solana-logger" -version = "1.14.10" +version = "1.14.11" dependencies = [ "env_logger", "lazy_static", @@ -5569,38 +5569,38 @@ dependencies = [ [[package]] name = "solana-measure" -version = "1.14.10" +version = "1.14.11" dependencies = [ "log", - "solana-sdk 1.14.10", + "solana-sdk 1.14.11", ] [[package]] name = "solana-merkle-root-bench" -version = "1.14.10" +version = "1.14.11" dependencies = [ "clap 2.33.3", "log", - "solana-logger 1.14.10", + "solana-logger 1.14.11", "solana-measure", "solana-runtime", - "solana-sdk 1.14.10", + "solana-sdk 1.14.11", "solana-version", ] [[package]] name = "solana-merkle-tree" -version = "1.14.10" +version = "1.14.11" dependencies = [ "fast-math", "hex", "matches", - "solana-program 1.14.10", + "solana-program 1.14.11", ] [[package]] name = "solana-metrics" -version = "1.14.10" +version = "1.14.11" dependencies = [ "crossbeam-channel", "env_logger", @@ -5610,23 +5610,23 @@ dependencies = [ "rand 0.7.3", "reqwest", "serial_test", - "solana-sdk 1.14.10", + "solana-sdk 1.14.11", ] [[package]] name = "solana-net-shaper" -version = "1.14.10" +version = "1.14.11" dependencies = [ "clap 3.1.8", "rand 0.7.3", "serde", "serde_json", - "solana-logger 1.14.10", + "solana-logger 1.14.11", ] [[package]] name = "solana-net-utils" -version = "1.14.10" +version = "1.14.11" dependencies = [ "bincode", "clap 3.1.8", @@ -5637,8 +5637,8 @@ dependencies = [ "serde", "serde_derive", "socket2", - "solana-logger 1.14.10", - "solana-sdk 1.14.10", + "solana-logger 1.14.11", + "solana-sdk 1.14.11", "solana-version", "tokio", "url 2.2.2", @@ -5646,7 +5646,7 @@ dependencies = [ [[package]] name = "solana-notifier" -version = "1.14.10" +version = "1.14.11" dependencies = [ "log", "reqwest", @@ -5655,7 +5655,7 @@ dependencies = [ [[package]] name = "solana-perf" -version = "1.14.10" +version = "1.14.11" dependencies = [ "ahash", "bincode", @@ -5673,16 +5673,16 @@ dependencies = [ "rand 0.7.3", "rayon", "serde", - "solana-logger 1.14.10", + "solana-logger 1.14.11", "solana-metrics", "solana-rayon-threadlimit", - "solana-sdk 1.14.10", + "solana-sdk 1.14.11", "solana-vote-program", ] [[package]] name = "solana-poh" -version = "1.14.10" +version = "1.14.11" dependencies = [ "bincode", "core_affinity", @@ -5692,29 +5692,29 @@ dependencies = [ "rand 0.7.3", "solana-entry", "solana-ledger", - "solana-logger 1.14.10", + "solana-logger 1.14.11", "solana-measure", "solana-metrics", "solana-perf", "solana-runtime", - "solana-sdk 1.14.10", + "solana-sdk 1.14.11", "solana-sys-tuner", "thiserror", ] [[package]] name = "solana-poh-bench" -version = "1.14.10" +version = "1.14.11" dependencies = [ "clap 3.1.8", "log", "rand 0.7.3", "rayon", "solana-entry", - "solana-logger 1.14.10", + "solana-logger 1.14.11", "solana-measure", "solana-perf", - "solana-sdk 1.14.10", + "solana-sdk 1.14.11", "solana-version", ] @@ -5769,7 +5769,7 @@ dependencies = [ [[package]] name = "solana-program" -version = "1.14.10" +version = "1.14.11" dependencies = [ "anyhow", "assert_matches", @@ -5807,10 +5807,10 @@ dependencies = [ "serde_json", "sha2 0.10.2", "sha3 0.10.1", - "solana-frozen-abi 1.14.10", - "solana-frozen-abi-macro 1.14.10", - "solana-logger 1.14.10", - "solana-sdk-macro 1.14.10", + "solana-frozen-abi 1.14.11", + "solana-frozen-abi-macro 1.14.11", + "solana-logger 1.14.11", + "solana-sdk-macro 1.14.11", "static_assertions", "thiserror", "tiny-bip39", @@ -5820,7 +5820,7 @@ dependencies = [ [[package]] name = "solana-program-runtime" -version = "1.14.10" +version = "1.14.11" dependencies = [ "base64 0.13.0", "bincode", @@ -5835,18 +5835,18 @@ dependencies = [ "rand 0.7.3", "rustc_version 0.4.0", "serde", - "solana-frozen-abi 1.14.10", - "solana-frozen-abi-macro 1.14.10", - "solana-logger 1.14.10", + "solana-frozen-abi 1.14.11", + "solana-frozen-abi-macro 1.14.11", + "solana-logger 1.14.11", "solana-measure", "solana-metrics", - "solana-sdk 1.14.10", + "solana-sdk 1.14.11", "thiserror", ] [[package]] name = "solana-program-test" -version = "1.14.10" +version = "1.14.11" dependencies = [ "assert_matches", "async-trait", @@ -5858,10 +5858,10 @@ dependencies = [ "solana-banks-client", "solana-banks-server", "solana-bpf-loader-program", - "solana-logger 1.14.10", + "solana-logger 1.14.11", "solana-program-runtime", "solana-runtime", - "solana-sdk 1.14.10", + "solana-sdk 1.14.11", "solana-vote-program", "thiserror", "tokio", @@ -5869,7 +5869,7 @@ dependencies = [ [[package]] name = "solana-rayon-threadlimit" -version = "1.14.10" +version = "1.14.11" dependencies = [ "lazy_static", "num_cpus", @@ -5877,7 +5877,7 @@ dependencies = [ [[package]] name = "solana-remote-wallet" -version = "1.14.10" +version = "1.14.11" dependencies = [ "console", "dialoguer", @@ -5888,14 +5888,14 @@ dependencies = [ "parking_lot 0.12.1", "qstring", "semver 1.0.10", - "solana-sdk 1.14.10", + "solana-sdk 1.14.11", "thiserror", "uriparse", ] [[package]] name = "solana-rpc" -version = "1.14.10" +version = "1.14.11" dependencies = [ "base64 0.13.0", "bincode", @@ -5931,7 +5931,7 @@ dependencies = [ "solana-poh", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.14.10", + "solana-sdk 1.14.11", "solana-send-transaction-service", "solana-stake-program", "solana-storage-bigtable", @@ -5950,7 +5950,7 @@ dependencies = [ [[package]] name = "solana-rpc-test" -version = "1.14.10" +version = "1.14.11" dependencies = [ "bincode", "bs58", @@ -5962,9 +5962,9 @@ dependencies = [ "serde_json", "solana-account-decoder", "solana-client", - "solana-logger 1.14.10", + "solana-logger 1.14.11", "solana-rpc", - "solana-sdk 1.14.10", + "solana-sdk 1.14.11", "solana-streamer", "solana-test-validator", "solana-transaction-status", @@ -5973,7 +5973,7 @@ dependencies = [ [[package]] name = "solana-runtime" -version = "1.14.10" +version = "1.14.11" dependencies = [ "arrayref", "assert_matches", @@ -6013,18 +6013,18 @@ dependencies = [ "solana-bucket-map", "solana-compute-budget-program", "solana-config-program", - "solana-frozen-abi 1.14.10", - "solana-frozen-abi-macro 1.14.10", - "solana-logger 1.14.10", + "solana-frozen-abi 1.14.11", + "solana-frozen-abi-macro 1.14.11", + "solana-logger 1.14.11", "solana-measure", "solana-metrics", "solana-program-runtime", "solana-rayon-threadlimit", - "solana-sdk 1.14.10", + "solana-sdk 1.14.11", "solana-stake-program", "solana-vote-program", "solana-zk-token-proof-program", - "solana-zk-token-sdk 1.14.10", + "solana-zk-token-sdk 1.14.11", "strum", "strum_macros", "symlink", @@ -6087,7 +6087,7 @@ dependencies = [ [[package]] name = "solana-sdk" -version = "1.14.10" +version = "1.14.11" dependencies = [ "anyhow", "assert_matches", @@ -6127,11 +6127,11 @@ dependencies = [ "serde_json", "sha2 0.10.2", "sha3 0.10.1", - "solana-frozen-abi 1.14.10", - "solana-frozen-abi-macro 1.14.10", - "solana-logger 1.14.10", - "solana-program 1.14.10", - "solana-sdk-macro 1.14.10", + "solana-frozen-abi 1.14.11", + "solana-frozen-abi-macro 1.14.11", + "solana-logger 1.14.11", + "solana-program 1.14.11", + "solana-sdk-macro 1.14.11", "static_assertions", "thiserror", "tiny-bip39", @@ -6154,7 +6154,7 @@ dependencies = [ [[package]] name = "solana-sdk-macro" -version = "1.14.10" +version = "1.14.11" dependencies = [ "bs58", "proc-macro2 1.0.41", @@ -6165,21 +6165,21 @@ dependencies = [ [[package]] name = "solana-send-transaction-service" -version = "1.14.10" +version = "1.14.11" dependencies = [ "crossbeam-channel", "log", "solana-client", - "solana-logger 1.14.10", + "solana-logger 1.14.11", "solana-measure", "solana-metrics", "solana-runtime", - "solana-sdk 1.14.10", + "solana-sdk 1.14.11", ] [[package]] name = "solana-stake-accounts" -version = "1.14.10" +version = "1.14.11" dependencies = [ "clap 2.33.3", "solana-clap-utils", @@ -6187,13 +6187,13 @@ dependencies = [ "solana-client", "solana-remote-wallet", "solana-runtime", - "solana-sdk 1.14.10", + "solana-sdk 1.14.11", "solana-stake-program", ] [[package]] name = "solana-stake-program" -version = "1.14.10" +version = "1.14.11" dependencies = [ "assert_matches", "bincode", @@ -6205,12 +6205,12 @@ dependencies = [ "serde", "serde_derive", "solana-config-program", - "solana-frozen-abi 1.14.10", - "solana-frozen-abi-macro 1.14.10", - "solana-logger 1.14.10", + "solana-frozen-abi 1.14.11", + "solana-frozen-abi-macro 1.14.11", + "solana-logger 1.14.11", "solana-metrics", "solana-program-runtime", - "solana-sdk 1.14.10", + "solana-sdk 1.14.11", "solana-vote-program", "test-case", "thiserror", @@ -6218,7 +6218,7 @@ dependencies = [ [[package]] name = "solana-storage-bigtable" -version = "1.14.10" +version = "1.14.11" dependencies = [ "backoff", "bincode", @@ -6239,7 +6239,7 @@ dependencies = [ "serde_derive", "smpl_jwt", "solana-metrics", - "solana-sdk 1.14.10", + "solana-sdk 1.14.11", "solana-storage-proto", "solana-transaction-status", "thiserror", @@ -6250,7 +6250,7 @@ dependencies = [ [[package]] name = "solana-storage-proto" -version = "1.14.10" +version = "1.14.11" dependencies = [ "bincode", "bs58", @@ -6259,25 +6259,25 @@ dependencies = [ "protobuf-src", "serde", "solana-account-decoder", - "solana-sdk 1.14.10", + "solana-sdk 1.14.11", "solana-transaction-status", "tonic-build 0.8.0", ] [[package]] name = "solana-store-tool" -version = "1.14.10" +version = "1.14.11" dependencies = [ "clap 2.33.3", "log", - "solana-logger 1.14.10", + "solana-logger 1.14.11", "solana-runtime", "solana-version", ] [[package]] name = "solana-streamer" -version = "1.14.10" +version = "1.14.11" dependencies = [ "crossbeam-channel", "futures-util", @@ -6294,10 +6294,10 @@ dependencies = [ "rand 0.7.3", "rcgen", "rustls 0.20.6", - "solana-logger 1.14.10", + "solana-logger 1.14.11", "solana-metrics", "solana-perf", - "solana-sdk 1.14.10", + "solana-sdk 1.14.11", "thiserror", "tokio", "x509-parser", @@ -6305,13 +6305,13 @@ dependencies = [ [[package]] name = "solana-sys-tuner" -version = "1.14.10" +version = "1.14.11" dependencies = [ "clap 2.33.3", "libc", "log", "nix", - "solana-logger 1.14.10", + "solana-logger 1.14.11", "solana-version", "sysctl", "unix_socket2", @@ -6320,7 +6320,7 @@ dependencies = [ [[package]] name = "solana-test-validator" -version = "1.14.10" +version = "1.14.11" dependencies = [ "base64 0.13.0", "log", @@ -6331,20 +6331,20 @@ dependencies = [ "solana-core", "solana-gossip", "solana-ledger", - "solana-logger 1.14.10", + "solana-logger 1.14.11", "solana-net-utils", "solana-program-runtime", "solana-program-test", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.10", + "solana-sdk 1.14.11", "solana-streamer", "tokio", ] [[package]] name = "solana-tokens" -version = "1.14.10" +version = "1.14.11" dependencies = [ "bincode", "chrono", @@ -6360,9 +6360,9 @@ dependencies = [ "solana-clap-utils", "solana-cli-config", "solana-client", - "solana-logger 1.14.10", + "solana-logger 1.14.11", "solana-remote-wallet", - "solana-sdk 1.14.10", + "solana-sdk 1.14.11", "solana-streamer", "solana-test-validator", "solana-transaction-status", @@ -6375,7 +6375,7 @@ dependencies = [ [[package]] name = "solana-transaction-dos" -version = "1.14.10" +version = "1.14.11" dependencies = [ "bincode", "clap 2.33.3", @@ -6389,11 +6389,11 @@ dependencies = [ "solana-faucet", "solana-gossip", "solana-local-cluster", - "solana-logger 1.14.10", + "solana-logger 1.14.11", "solana-measure", "solana-net-utils", "solana-runtime", - "solana-sdk 1.14.10", + "solana-sdk 1.14.11", "solana-streamer", "solana-transaction-status", "solana-version", @@ -6401,7 +6401,7 @@ dependencies = [ [[package]] name = "solana-transaction-status" -version = "1.14.10" +version = "1.14.11" dependencies = [ "Inflector", "base64 0.13.0", @@ -6417,7 +6417,7 @@ dependencies = [ "solana-address-lookup-table-program", "solana-measure", "solana-metrics", - "solana-sdk 1.14.10", + "solana-sdk 1.14.11", "solana-vote-program", "spl-associated-token-account", "spl-memo", @@ -6428,7 +6428,7 @@ dependencies = [ [[package]] name = "solana-upload-perf" -version = "1.14.10" +version = "1.14.11" dependencies = [ "serde_json", "solana-metrics", @@ -6436,7 +6436,7 @@ dependencies = [ [[package]] name = "solana-validator" -version = "1.14.10" +version = "1.14.11" dependencies = [ "chrono", "clap 2.33.3", @@ -6467,14 +6467,14 @@ dependencies = [ "solana-genesis-utils", "solana-gossip", "solana-ledger", - "solana-logger 1.14.10", + "solana-logger 1.14.11", "solana-metrics", "solana-net-utils", "solana-perf", "solana-poh", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.10", + "solana-sdk 1.14.11", "solana-send-transaction-service", "solana-storage-bigtable", "solana-streamer", @@ -6487,21 +6487,21 @@ dependencies = [ [[package]] name = "solana-version" -version = "1.14.10" +version = "1.14.11" dependencies = [ "log", "rustc_version 0.4.0", "semver 1.0.10", "serde", "serde_derive", - "solana-frozen-abi 1.14.10", - "solana-frozen-abi-macro 1.14.10", - "solana-sdk 1.14.10", + "solana-frozen-abi 1.14.11", + "solana-frozen-abi-macro 1.14.11", + "solana-sdk 1.14.11", ] [[package]] name = "solana-vote-program" -version = "1.14.10" +version = "1.14.11" dependencies = [ "bincode", "itertools", @@ -6512,18 +6512,18 @@ dependencies = [ "rustc_version 0.4.0", "serde", "serde_derive", - "solana-frozen-abi 1.14.10", - "solana-frozen-abi-macro 1.14.10", - "solana-logger 1.14.10", + "solana-frozen-abi 1.14.11", + "solana-frozen-abi-macro 1.14.11", + "solana-logger 1.14.11", "solana-metrics", "solana-program-runtime", - "solana-sdk 1.14.10", + "solana-sdk 1.14.11", "thiserror", ] [[package]] name = "solana-watchtower" -version = "1.14.10" +version = "1.14.11" dependencies = [ "clap 2.33.3", "humantime", @@ -6532,24 +6532,24 @@ dependencies = [ "solana-cli-config", "solana-cli-output", "solana-client", - "solana-logger 1.14.10", + "solana-logger 1.14.11", "solana-metrics", "solana-notifier", - "solana-sdk 1.14.10", + "solana-sdk 1.14.11", "solana-version", ] [[package]] name = "solana-zk-token-proof-program" -version = "1.14.10" +version = "1.14.11" dependencies = [ "bytemuck", "getrandom 0.1.16", "num-derive", "num-traits", "solana-program-runtime", - "solana-sdk 1.14.10", - "solana-zk-token-sdk 1.14.10", + "solana-sdk 1.14.11", + "solana-zk-token-sdk 1.14.11", ] [[package]] @@ -6585,7 +6585,7 @@ dependencies = [ [[package]] name = "solana-zk-token-sdk" -version = "1.14.10" +version = "1.14.11" dependencies = [ "aes-gcm-siv", "arrayref", @@ -6605,8 +6605,8 @@ dependencies = [ "serde", "serde_json", "sha3 0.9.1", - "solana-program 1.14.10", - "solana-sdk 1.14.10", + "solana-program 1.14.11", + "solana-sdk 1.14.11", "subtle", "thiserror", "zeroize", diff --git a/account-decoder/Cargo.toml b/account-decoder/Cargo.toml index b70017a9744c90..10c3d94cd17136 100644 --- a/account-decoder/Cargo.toml +++ b/account-decoder/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-account-decoder" -version = "1.14.10" +version = "1.14.11" description = "Solana account decoder" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -19,10 +19,10 @@ lazy_static = "1.4.0" serde = "1.0.138" serde_derive = "1.0.103" serde_json = "1.0.81" -solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.10" } -solana-config-program = { path = "../programs/config", version = "=1.14.10" } -solana-sdk = { path = "../sdk", version = "=1.14.10" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.10" } +solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.11" } +solana-config-program = { path = "../programs/config", version = "=1.14.11" } +solana-sdk = { path = "../sdk", version = "=1.14.11" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.11" } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } spl-token-2022 = { version = "=0.5.0", features = ["no-entrypoint"] } thiserror = "1.0" diff --git a/accounts-bench/Cargo.toml b/accounts-bench/Cargo.toml index 0847fac12e4941..bc6377aa2e55d6 100644 --- a/accounts-bench/Cargo.toml +++ b/accounts-bench/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-accounts-bench" -version = "1.14.10" +version = "1.14.11" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -12,11 +12,11 @@ publish = false clap = "2.33.1" log = "0.4.17" rayon = "1.5.3" -solana-logger = { path = "../logger", version = "=1.14.10" } -solana-measure = { path = "../measure", version = "=1.14.10" } -solana-runtime = { path = "../runtime", version = "=1.14.10" } -solana-sdk = { path = "../sdk", version = "=1.14.10" } -solana-version = { path = "../version", version = "=1.14.10" } +solana-logger = { path = "../logger", version = "=1.14.11" } +solana-measure = { path = "../measure", version = "=1.14.11" } +solana-runtime = { path = "../runtime", version = "=1.14.11" } +solana-sdk = { path = "../sdk", version = "=1.14.11" } +solana-version = { path = "../version", version = "=1.14.11" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/accounts-cluster-bench/Cargo.toml b/accounts-cluster-bench/Cargo.toml index c61ce47fe5fc9a..b2e68f69358a72 100644 --- a/accounts-cluster-bench/Cargo.toml +++ b/accounts-cluster-bench/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-accounts-cluster-bench" -version = "1.14.10" +version = "1.14.11" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -13,25 +13,25 @@ clap = "2.33.1" log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.10" } -solana-clap-utils = { path = "../clap-utils", version = "=1.14.10" } -solana-client = { path = "../client", version = "=1.14.10" } -solana-faucet = { path = "../faucet", version = "=1.14.10" } -solana-gossip = { path = "../gossip", version = "=1.14.10" } -solana-logger = { path = "../logger", version = "=1.14.10" } -solana-measure = { path = "../measure", version = "=1.14.10" } -solana-net-utils = { path = "../net-utils", version = "=1.14.10" } -solana-runtime = { path = "../runtime", version = "=1.14.10" } -solana-sdk = { path = "../sdk", version = "=1.14.10" } -solana-streamer = { path = "../streamer", version = "=1.14.10" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.10" } -solana-version = { path = "../version", version = "=1.14.10" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.11" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.11" } +solana-client = { path = "../client", version = "=1.14.11" } +solana-faucet = { path = "../faucet", version = "=1.14.11" } +solana-gossip = { path = "../gossip", version = "=1.14.11" } +solana-logger = { path = "../logger", version = "=1.14.11" } +solana-measure = { path = "../measure", version = "=1.14.11" } +solana-net-utils = { path = "../net-utils", version = "=1.14.11" } +solana-runtime = { path = "../runtime", version = "=1.14.11" } +solana-sdk = { path = "../sdk", version = "=1.14.11" } +solana-streamer = { path = "../streamer", version = "=1.14.11" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.11" } +solana-version = { path = "../version", version = "=1.14.11" } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } [dev-dependencies] -solana-core = { path = "../core", version = "=1.14.10" } -solana-local-cluster = { path = "../local-cluster", version = "=1.14.10" } -solana-test-validator = { path = "../test-validator", version = "=1.14.10" } +solana-core = { path = "../core", version = "=1.14.11" } +solana-local-cluster = { path = "../local-cluster", version = "=1.14.11" } +solana-test-validator = { path = "../test-validator", version = "=1.14.11" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/banking-bench/Cargo.toml b/banking-bench/Cargo.toml index 9c16148a4509e8..ebd8203af23a50 100644 --- a/banking-bench/Cargo.toml +++ b/banking-bench/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-banking-bench" -version = "1.14.10" +version = "1.14.11" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,18 +14,18 @@ crossbeam-channel = "0.5" log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" -solana-client = { path = "../client", version = "=1.14.10" } -solana-core = { path = "../core", version = "=1.14.10" } -solana-gossip = { path = "../gossip", version = "=1.14.10" } -solana-ledger = { path = "../ledger", version = "=1.14.10" } -solana-logger = { path = "../logger", version = "=1.14.10" } -solana-measure = { path = "../measure", version = "=1.14.10" } -solana-perf = { path = "../perf", version = "=1.14.10" } -solana-poh = { path = "../poh", version = "=1.14.10" } -solana-runtime = { path = "../runtime", version = "=1.14.10" } -solana-sdk = { path = "../sdk", version = "=1.14.10" } -solana-streamer = { path = "../streamer", version = "=1.14.10" } -solana-version = { path = "../version", version = "=1.14.10" } +solana-client = { path = "../client", version = "=1.14.11" } +solana-core = { path = "../core", version = "=1.14.11" } +solana-gossip = { path = "../gossip", version = "=1.14.11" } +solana-ledger = { path = "../ledger", version = "=1.14.11" } +solana-logger = { path = "../logger", version = "=1.14.11" } +solana-measure = { path = "../measure", version = "=1.14.11" } +solana-perf = { path = "../perf", version = "=1.14.11" } +solana-poh = { path = "../poh", version = "=1.14.11" } +solana-runtime = { path = "../runtime", version = "=1.14.11" } +solana-sdk = { path = "../sdk", version = "=1.14.11" } +solana-streamer = { path = "../streamer", version = "=1.14.11" } +solana-version = { path = "../version", version = "=1.14.11" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/banks-client/Cargo.toml b/banks-client/Cargo.toml index 924328e386db06..3d641907bb04d3 100644 --- a/banks-client/Cargo.toml +++ b/banks-client/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-banks-client" -version = "1.14.10" +version = "1.14.11" description = "Solana banks client" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,17 +12,17 @@ edition = "2021" [dependencies] borsh = "0.9.3" futures = "0.3" -solana-banks-interface = { path = "../banks-interface", version = "=1.14.10" } -solana-program = { path = "../sdk/program", version = "=1.14.10" } -solana-sdk = { path = "../sdk", version = "=1.14.10" } +solana-banks-interface = { path = "../banks-interface", version = "=1.14.11" } +solana-program = { path = "../sdk/program", version = "=1.14.11" } +solana-sdk = { path = "../sdk", version = "=1.14.11" } tarpc = { version = "0.29.0", features = ["full"] } thiserror = "1.0" tokio = { version = "~1.14.1", features = ["full"] } tokio-serde = { version = "0.8", features = ["bincode"] } [dev-dependencies] -solana-banks-server = { path = "../banks-server", version = "=1.14.10" } -solana-runtime = { path = "../runtime", version = "=1.14.10" } +solana-banks-server = { path = "../banks-server", version = "=1.14.11" } +solana-runtime = { path = "../runtime", version = "=1.14.11" } [lib] crate-type = ["lib"] diff --git a/banks-interface/Cargo.toml b/banks-interface/Cargo.toml index 45655c0e71a983..ee46828348fc48 100644 --- a/banks-interface/Cargo.toml +++ b/banks-interface/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-banks-interface" -version = "1.14.10" +version = "1.14.11" description = "Solana banks RPC interface" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -11,7 +11,7 @@ edition = "2021" [dependencies] serde = { version = "1.0.138", features = ["derive"] } -solana-sdk = { path = "../sdk", version = "=1.14.10" } +solana-sdk = { path = "../sdk", version = "=1.14.11" } tarpc = { version = "0.29.0", features = ["full"] } [lib] diff --git a/banks-server/Cargo.toml b/banks-server/Cargo.toml index fc7b4df0ed1cb1..92dc547b2681d3 100644 --- a/banks-server/Cargo.toml +++ b/banks-server/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-banks-server" -version = "1.14.10" +version = "1.14.11" description = "Solana banks server" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,11 +13,11 @@ edition = "2021" bincode = "1.3.3" crossbeam-channel = "0.5" futures = "0.3" -solana-banks-interface = { path = "../banks-interface", version = "=1.14.10" } -solana-client = { path = "../client", version = "=1.14.10" } -solana-runtime = { path = "../runtime", version = "=1.14.10" } -solana-sdk = { path = "../sdk", version = "=1.14.10" } -solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.10" } +solana-banks-interface = { path = "../banks-interface", version = "=1.14.11" } +solana-client = { path = "../client", version = "=1.14.11" } +solana-runtime = { path = "../runtime", version = "=1.14.11" } +solana-sdk = { path = "../sdk", version = "=1.14.11" } +solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.11" } tarpc = { version = "0.29.0", features = ["full"] } tokio = { version = "1", features = ["full"] } tokio-serde = { version = "0.8", features = ["bincode"] } diff --git a/bench-streamer/Cargo.toml b/bench-streamer/Cargo.toml index cf858f30ce7e57..1464aa5c207feb 100644 --- a/bench-streamer/Cargo.toml +++ b/bench-streamer/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-bench-streamer" -version = "1.14.10" +version = "1.14.11" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -11,9 +11,9 @@ publish = false [dependencies] clap = { version = "3.1.5", features = ["cargo"] } crossbeam-channel = "0.5" -solana-net-utils = { path = "../net-utils", version = "=1.14.10" } -solana-streamer = { path = "../streamer", version = "=1.14.10" } -solana-version = { path = "../version", version = "=1.14.10" } +solana-net-utils = { path = "../net-utils", version = "=1.14.11" } +solana-streamer = { path = "../streamer", version = "=1.14.11" } +solana-version = { path = "../version", version = "=1.14.11" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/bench-tps/Cargo.toml b/bench-tps/Cargo.toml index 7beec81610b796..e1abae3523a0a0 100644 --- a/bench-tps/Cargo.toml +++ b/bench-tps/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-bench-tps" -version = "1.14.10" +version = "1.14.11" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -15,28 +15,28 @@ log = "0.4.17" rayon = "1.5.3" serde_json = "1.0.81" serde_yaml = "0.8.26" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.10" } -solana-cli-config = { path = "../cli-config", version = "=1.14.10" } -solana-client = { path = "../client", version = "=1.14.10" } -solana-core = { path = "../core", version = "=1.14.10" } -solana-faucet = { path = "../faucet", version = "=1.14.10" } -solana-genesis = { path = "../genesis", version = "=1.14.10" } -solana-gossip = { path = "../gossip", version = "=1.14.10" } -solana-logger = { path = "../logger", version = "=1.14.10" } -solana-measure = { path = "../measure", version = "=1.14.10" } -solana-metrics = { path = "../metrics", version = "=1.14.10" } -solana-net-utils = { path = "../net-utils", version = "=1.14.10" } -solana-rpc = { path = "../rpc", version = "=1.14.10" } -solana-runtime = { path = "../runtime", version = "=1.14.10" } -solana-sdk = { path = "../sdk", version = "=1.14.10" } -solana-streamer = { path = "../streamer", version = "=1.14.10" } -solana-version = { path = "../version", version = "=1.14.10" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.11" } +solana-cli-config = { path = "../cli-config", version = "=1.14.11" } +solana-client = { path = "../client", version = "=1.14.11" } +solana-core = { path = "../core", version = "=1.14.11" } +solana-faucet = { path = "../faucet", version = "=1.14.11" } +solana-genesis = { path = "../genesis", version = "=1.14.11" } +solana-gossip = { path = "../gossip", version = "=1.14.11" } +solana-logger = { path = "../logger", version = "=1.14.11" } +solana-measure = { path = "../measure", version = "=1.14.11" } +solana-metrics = { path = "../metrics", version = "=1.14.11" } +solana-net-utils = { path = "../net-utils", version = "=1.14.11" } +solana-rpc = { path = "../rpc", version = "=1.14.11" } +solana-runtime = { path = "../runtime", version = "=1.14.11" } +solana-sdk = { path = "../sdk", version = "=1.14.11" } +solana-streamer = { path = "../streamer", version = "=1.14.11" } +solana-version = { path = "../version", version = "=1.14.11" } thiserror = "1.0" [dev-dependencies] serial_test = "0.8.0" -solana-local-cluster = { path = "../local-cluster", version = "=1.14.10" } -solana-test-validator = { path = "../test-validator", version = "=1.14.10" } +solana-local-cluster = { path = "../local-cluster", version = "=1.14.11" } +solana-test-validator = { path = "../test-validator", version = "=1.14.11" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/bloom/Cargo.toml b/bloom/Cargo.toml index 406592dcb5c31f..1a6dda70a19274 100644 --- a/bloom/Cargo.toml +++ b/bloom/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bloom" -version = "1.14.10" +version = "1.14.11" description = "Solana bloom filter" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -17,9 +17,9 @@ rand = "0.7.0" rayon = "1.5.3" serde = { version = "1.0.138", features = ["rc"] } serde_derive = "1.0.103" -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.10" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.10" } -solana-sdk = { path = "../sdk", version = "=1.14.10" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.11" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.11" } +solana-sdk = { path = "../sdk", version = "=1.14.11" } [lib] crate-type = ["lib"] diff --git a/bucket_map/Cargo.toml b/bucket_map/Cargo.toml index 3978b9f3a9cfe0..be8c541424cff9 100644 --- a/bucket_map/Cargo.toml +++ b/bucket_map/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bucket-map" -version = "1.14.10" +version = "1.14.11" description = "solana-bucket-map" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-bucket-map" @@ -15,14 +15,14 @@ log = { version = "0.4.17" } memmap2 = "0.5.3" modular-bitfield = "0.11.2" rand = "0.7.0" -solana-measure = { path = "../measure", version = "=1.14.10" } -solana-sdk = { path = "../sdk", version = "=1.14.10" } +solana-measure = { path = "../measure", version = "=1.14.11" } +solana-sdk = { path = "../sdk", version = "=1.14.11" } tempfile = "3.3.0" [dev-dependencies] fs_extra = "1.2.0" rayon = "1.5.3" -solana-logger = { path = "../logger", version = "=1.14.10" } +solana-logger = { path = "../logger", version = "=1.14.11" } [lib] crate-type = ["lib"] diff --git a/clap-utils/Cargo.toml b/clap-utils/Cargo.toml index 59667a81892b6c..7f197f0dd820c1 100644 --- a/clap-utils/Cargo.toml +++ b/clap-utils/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-clap-utils" -version = "1.14.10" +version = "1.14.11" description = "Solana utilities for the clap" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,9 +13,9 @@ edition = "2021" chrono = "0.4" clap = "2.33.0" rpassword = "6.0" -solana-perf = { path = "../perf", version = "=1.14.10" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.10", default-features = false } -solana-sdk = { path = "../sdk", version = "=1.14.10" } +solana-perf = { path = "../perf", version = "=1.14.11" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.11", default-features = false } +solana-sdk = { path = "../sdk", version = "=1.14.11" } thiserror = "1.0.31" tiny-bip39 = "0.8.2" uriparse = "0.6.4" diff --git a/clap-v3-utils/Cargo.toml b/clap-v3-utils/Cargo.toml index 3b7c42087fe01d..dd61b2a7b7fb77 100644 --- a/clap-v3-utils/Cargo.toml +++ b/clap-v3-utils/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-clap-v3-utils" -version = "1.14.10" +version = "1.14.11" description = "Solana utilities for the clap v3" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,9 +13,9 @@ edition = "2021" chrono = "0.4" clap = { version = "3.1.5", features = ["cargo"] } rpassword = "6.0" -solana-perf = { path = "../perf", version = "=1.14.10" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.10", default-features = false } -solana-sdk = { path = "../sdk", version = "=1.14.10" } +solana-perf = { path = "../perf", version = "=1.14.11" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.11", default-features = false } +solana-sdk = { path = "../sdk", version = "=1.14.11" } thiserror = "1.0.31" tiny-bip39 = "0.8.2" uriparse = "0.6.4" diff --git a/cli-config/Cargo.toml b/cli-config/Cargo.toml index 7dca9c4989bb6c..1ae053bb3b1e41 100644 --- a/cli-config/Cargo.toml +++ b/cli-config/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-cli-config" description = "Blockchain, Rebuilt for Scale" -version = "1.14.10" +version = "1.14.11" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -15,8 +15,8 @@ lazy_static = "1.4.0" serde = "1.0.138" serde_derive = "1.0.103" serde_yaml = "0.8.26" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.10" } -solana-sdk = { path = "../sdk", version = "=1.14.10" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.11" } +solana-sdk = { path = "../sdk", version = "=1.14.11" } url = "2.2.2" [dev-dependencies] diff --git a/cli-output/Cargo.toml b/cli-output/Cargo.toml index ac8fd6d5722de6..d72b9eef59d91c 100644 --- a/cli-output/Cargo.toml +++ b/cli-output/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-cli-output" description = "Blockchain, Rebuilt for Scale" -version = "1.14.10" +version = "1.14.11" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -21,13 +21,13 @@ pretty-hex = "0.3.0" semver = "1.0.10" serde = "1.0.138" serde_json = "1.0.81" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.10" } -solana-clap-utils = { path = "../clap-utils", version = "=1.14.10" } -solana-cli-config = { path = "../cli-config", version = "=1.14.10" } -solana-client = { path = "../client", version = "=1.14.10" } -solana-sdk = { path = "../sdk", version = "=1.14.10" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.10" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.10" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.11" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.11" } +solana-cli-config = { path = "../cli-config", version = "=1.14.11" } +solana-client = { path = "../client", version = "=1.14.11" } +solana-sdk = { path = "../sdk", version = "=1.14.11" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.11" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.11" } spl-memo = { version = "=3.0.1", features = ["no-entrypoint"] } [dev-dependencies] diff --git a/cli/Cargo.toml b/cli/Cargo.toml index f6f982492f3123..94246bc70e4da3 100644 --- a/cli/Cargo.toml +++ b/cli/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-cli" description = "Blockchain, Rebuilt for Scale" -version = "1.14.10" +version = "1.14.11" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -27,30 +27,30 @@ semver = "1.0.10" serde = "1.0.138" serde_derive = "1.0.103" serde_json = "1.0.81" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.10" } -solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.10" } -solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.10" } -solana-clap-utils = { path = "../clap-utils", version = "=1.14.10" } -solana-cli-config = { path = "../cli-config", version = "=1.14.10" } -solana-cli-output = { path = "../cli-output", version = "=1.14.10" } -solana-client = { path = "../client", version = "=1.14.10" } -solana-config-program = { path = "../programs/config", version = "=1.14.10" } -solana-faucet = { path = "../faucet", version = "=1.14.10" } -solana-logger = { path = "../logger", version = "=1.14.10" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.10" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.10" } -solana-sdk = { path = "../sdk", version = "=1.14.10" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.10" } -solana-version = { path = "../version", version = "=1.14.10" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.10" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.11" } +solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.11" } +solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.11" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.11" } +solana-cli-config = { path = "../cli-config", version = "=1.14.11" } +solana-cli-output = { path = "../cli-output", version = "=1.14.11" } +solana-client = { path = "../client", version = "=1.14.11" } +solana-config-program = { path = "../programs/config", version = "=1.14.11" } +solana-faucet = { path = "../faucet", version = "=1.14.11" } +solana-logger = { path = "../logger", version = "=1.14.11" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.11" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.11" } +solana-sdk = { path = "../sdk", version = "=1.14.11" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.11" } +solana-version = { path = "../version", version = "=1.14.11" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.11" } solana_rbpf = "=0.2.31" spl-memo = { version = "=3.0.1", features = ["no-entrypoint"] } thiserror = "1.0.31" tiny-bip39 = "0.8.2" [dev-dependencies] -solana-streamer = { path = "../streamer", version = "=1.14.10" } -solana-test-validator = { path = "../test-validator", version = "=1.14.10" } +solana-streamer = { path = "../streamer", version = "=1.14.11" } +solana-test-validator = { path = "../test-validator", version = "=1.14.11" } tempfile = "3.3.0" [[bin]] diff --git a/client-test/Cargo.toml b/client-test/Cargo.toml index 5c070465705713..e493f76d76887a 100644 --- a/client-test/Cargo.toml +++ b/client-test/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-client-test" -version = "1.14.10" +version = "1.14.11" description = "Solana RPC Test" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,25 +14,25 @@ publish = false futures-util = "0.3.21" serde_json = "1.0.81" serial_test = "0.8.0" -solana-client = { path = "../client", version = "=1.14.10" } -solana-ledger = { path = "../ledger", version = "=1.14.10" } -solana-measure = { path = "../measure", version = "=1.14.10" } -solana-merkle-tree = { path = "../merkle-tree", version = "=1.14.10" } -solana-metrics = { path = "../metrics", version = "=1.14.10" } -solana-perf = { path = "../perf", version = "=1.14.10" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.10" } -solana-rpc = { path = "../rpc", version = "=1.14.10" } -solana-runtime = { path = "../runtime", version = "=1.14.10" } -solana-sdk = { path = "../sdk", version = "=1.14.10" } -solana-streamer = { path = "../streamer", version = "=1.14.10" } -solana-test-validator = { path = "../test-validator", version = "=1.14.10" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.10" } -solana-version = { path = "../version", version = "=1.14.10" } +solana-client = { path = "../client", version = "=1.14.11" } +solana-ledger = { path = "../ledger", version = "=1.14.11" } +solana-measure = { path = "../measure", version = "=1.14.11" } +solana-merkle-tree = { path = "../merkle-tree", version = "=1.14.11" } +solana-metrics = { path = "../metrics", version = "=1.14.11" } +solana-perf = { path = "../perf", version = "=1.14.11" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.11" } +solana-rpc = { path = "../rpc", version = "=1.14.11" } +solana-runtime = { path = "../runtime", version = "=1.14.11" } +solana-sdk = { path = "../sdk", version = "=1.14.11" } +solana-streamer = { path = "../streamer", version = "=1.14.11" } +solana-test-validator = { path = "../test-validator", version = "=1.14.11" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.11" } +solana-version = { path = "../version", version = "=1.14.11" } systemstat = "0.1.11" tokio = { version = "~1.14.1", features = ["full"] } [dev-dependencies] -solana-logger = { path = "../logger", version = "=1.14.10" } +solana-logger = { path = "../logger", version = "=1.14.11" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/client/Cargo.toml b/client/Cargo.toml index 91f5304ac66067..e6d14664bbf976 100644 --- a/client/Cargo.toml +++ b/client/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-client" -version = "1.14.10" +version = "1.14.11" description = "Solana Client" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -38,17 +38,17 @@ semver = "1.0.10" serde = "1.0.138" serde_derive = "1.0.103" serde_json = "1.0.81" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.10" } -solana-clap-utils = { path = "../clap-utils", version = "=1.14.10" } -solana-faucet = { path = "../faucet", version = "=1.14.10" } -solana-measure = { path = "../measure", version = "=1.14.10" } -solana-metrics = { path = "../metrics", version = "=1.14.10" } -solana-net-utils = { path = "../net-utils", version = "=1.14.10" } -solana-sdk = { path = "../sdk", version = "=1.14.10" } -solana-streamer = { path = "../streamer", version = "=1.14.10" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.10" } -solana-version = { path = "../version", version = "=1.14.10" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.10" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.11" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.11" } +solana-faucet = { path = "../faucet", version = "=1.14.11" } +solana-measure = { path = "../measure", version = "=1.14.11" } +solana-metrics = { path = "../metrics", version = "=1.14.11" } +solana-net-utils = { path = "../net-utils", version = "=1.14.11" } +solana-sdk = { path = "../sdk", version = "=1.14.11" } +solana-streamer = { path = "../streamer", version = "=1.14.11" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.11" } +solana-version = { path = "../version", version = "=1.14.11" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.11" } spl-token-2022 = { version = "=0.5.0", features = ["no-entrypoint"] } thiserror = "1.0" tokio = { version = "1", features = ["full"] } @@ -61,8 +61,8 @@ url = "2.2.2" anyhow = "1.0.58" assert_matches = "1.5.0" jsonrpc-http-server = "18.0.0" -solana-logger = { path = "../logger", version = "=1.14.10" } -solana-perf = { path = "../perf", version = "=1.14.10" } +solana-logger = { path = "../logger", version = "=1.14.11" } +solana-perf = { path = "../perf", version = "=1.14.11" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/core/Cargo.toml b/core/Cargo.toml index fb5ed88d40d538..b80de1e2435e3e 100644 --- a/core/Cargo.toml +++ b/core/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "solana-core" description = "Blockchain, Rebuilt for Scale" -version = "1.14.10" +version = "1.14.11" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-core" readme = "../README.md" @@ -36,30 +36,30 @@ rand_chacha = "0.2.2" rayon = "1.5.3" serde = "1.0.138" serde_derive = "1.0.103" -solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.10" } -solana-bloom = { path = "../bloom", version = "=1.14.10" } -solana-client = { path = "../client", version = "=1.14.10" } -solana-entry = { path = "../entry", version = "=1.14.10" } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.10" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.10" } -solana-geyser-plugin-manager = { path = "../geyser-plugin-manager", version = "=1.14.10" } -solana-gossip = { path = "../gossip", version = "=1.14.10" } -solana-ledger = { path = "../ledger", version = "=1.14.10" } -solana-measure = { path = "../measure", version = "=1.14.10" } -solana-metrics = { path = "../metrics", version = "=1.14.10" } -solana-net-utils = { path = "../net-utils", version = "=1.14.10" } -solana-perf = { path = "../perf", version = "=1.14.10" } -solana-poh = { path = "../poh", version = "=1.14.10" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.10" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.10" } -solana-rpc = { path = "../rpc", version = "=1.14.10" } -solana-runtime = { path = "../runtime", version = "=1.14.10" } -solana-sdk = { path = "../sdk", version = "=1.14.10" } -solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.10" } -solana-streamer = { path = "../streamer", version = "=1.14.10" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.10" } -solana-version = { path = "../version", version = "=1.14.10" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.10" } +solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.11" } +solana-bloom = { path = "../bloom", version = "=1.14.11" } +solana-client = { path = "../client", version = "=1.14.11" } +solana-entry = { path = "../entry", version = "=1.14.11" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.11" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.11" } +solana-geyser-plugin-manager = { path = "../geyser-plugin-manager", version = "=1.14.11" } +solana-gossip = { path = "../gossip", version = "=1.14.11" } +solana-ledger = { path = "../ledger", version = "=1.14.11" } +solana-measure = { path = "../measure", version = "=1.14.11" } +solana-metrics = { path = "../metrics", version = "=1.14.11" } +solana-net-utils = { path = "../net-utils", version = "=1.14.11" } +solana-perf = { path = "../perf", version = "=1.14.11" } +solana-poh = { path = "../poh", version = "=1.14.11" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.11" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.11" } +solana-rpc = { path = "../rpc", version = "=1.14.11" } +solana-runtime = { path = "../runtime", version = "=1.14.11" } +solana-sdk = { path = "../sdk", version = "=1.14.11" } +solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.11" } +solana-streamer = { path = "../streamer", version = "=1.14.11" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.11" } +solana-version = { path = "../version", version = "=1.14.11" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.11" } sys-info = "0.9.1" tempfile = "3.3.0" thiserror = "1.0" @@ -71,9 +71,9 @@ matches = "0.1.9" raptorq = "1.7.0" serde_json = "1.0.81" serial_test = "0.8.0" -solana-logger = { path = "../logger", version = "=1.14.10" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.10" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.10" } +solana-logger = { path = "../logger", version = "=1.14.11" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.11" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.11" } static_assertions = "1.1.0" systemstat = "0.1.11" test-case = "2.1.0" diff --git a/dos/Cargo.toml b/dos/Cargo.toml index ab0e04b213ea30..09ddb1c2b3a6e0 100644 --- a/dos/Cargo.toml +++ b/dos/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-dos" -version = "1.14.10" +version = "1.14.11" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -17,23 +17,23 @@ itertools = "0.10.3" log = "0.4.17" rand = "0.7.0" serde = "1.0.138" -solana-bench-tps = { path = "../bench-tps", version = "=1.14.10" } -solana-client = { path = "../client", version = "=1.14.10" } -solana-core = { path = "../core", version = "=1.14.10" } -solana-faucet = { path = "../faucet", version = "=1.14.10" } -solana-gossip = { path = "../gossip", version = "=1.14.10" } -solana-logger = { path = "../logger", version = "=1.14.10" } -solana-measure = { path = "../measure", version = "=1.14.10" } -solana-net-utils = { path = "../net-utils", version = "=1.14.10" } -solana-perf = { path = "../perf", version = "=1.14.10" } -solana-rpc = { path = "../rpc", version = "=1.14.10" } -solana-sdk = { path = "../sdk", version = "=1.14.10" } -solana-streamer = { path = "../streamer", version = "=1.14.10" } -solana-version = { path = "../version", version = "=1.14.10" } +solana-bench-tps = { path = "../bench-tps", version = "=1.14.11" } +solana-client = { path = "../client", version = "=1.14.11" } +solana-core = { path = "../core", version = "=1.14.11" } +solana-faucet = { path = "../faucet", version = "=1.14.11" } +solana-gossip = { path = "../gossip", version = "=1.14.11" } +solana-logger = { path = "../logger", version = "=1.14.11" } +solana-measure = { path = "../measure", version = "=1.14.11" } +solana-net-utils = { path = "../net-utils", version = "=1.14.11" } +solana-perf = { path = "../perf", version = "=1.14.11" } +solana-rpc = { path = "../rpc", version = "=1.14.11" } +solana-sdk = { path = "../sdk", version = "=1.14.11" } +solana-streamer = { path = "../streamer", version = "=1.14.11" } +solana-version = { path = "../version", version = "=1.14.11" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] [dev-dependencies] serial_test = "0.8.0" -solana-local-cluster = { path = "../local-cluster", version = "=1.14.10" } +solana-local-cluster = { path = "../local-cluster", version = "=1.14.11" } diff --git a/download-utils/Cargo.toml b/download-utils/Cargo.toml index 75f83072a2da3d..adea9221588e8a 100644 --- a/download-utils/Cargo.toml +++ b/download-utils/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-download-utils" -version = "1.14.10" +version = "1.14.11" description = "Solana Download Utils" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,8 +14,8 @@ console = "0.15.0" indicatif = "0.16.2" log = "0.4.17" reqwest = { version = "0.11.11", default-features = false, features = ["blocking", "brotli", "deflate", "gzip", "rustls-tls", "json"] } -solana-runtime = { path = "../runtime", version = "=1.14.10" } -solana-sdk = { path = "../sdk", version = "=1.14.10" } +solana-runtime = { path = "../runtime", version = "=1.14.11" } +solana-sdk = { path = "../sdk", version = "=1.14.11" } [lib] crate-type = ["lib"] diff --git a/entry/Cargo.toml b/entry/Cargo.toml index 1059262b2bffca..3ef9ced33e64fc 100644 --- a/entry/Cargo.toml +++ b/entry/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-entry" -version = "1.14.10" +version = "1.14.11" description = "Solana Entry" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -19,16 +19,16 @@ log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" serde = "1.0.138" -solana-measure = { path = "../measure", version = "=1.14.10" } -solana-merkle-tree = { path = "../merkle-tree", version = "=1.14.10" } -solana-metrics = { path = "../metrics", version = "=1.14.10" } -solana-perf = { path = "../perf", version = "=1.14.10" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.10" } -solana-sdk = { path = "../sdk", version = "=1.14.10" } +solana-measure = { path = "../measure", version = "=1.14.11" } +solana-merkle-tree = { path = "../merkle-tree", version = "=1.14.11" } +solana-metrics = { path = "../metrics", version = "=1.14.11" } +solana-perf = { path = "../perf", version = "=1.14.11" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.11" } +solana-sdk = { path = "../sdk", version = "=1.14.11" } [dev-dependencies] matches = "0.1.9" -solana-logger = { path = "../logger", version = "=1.14.10" } +solana-logger = { path = "../logger", version = "=1.14.11" } [lib] crate-type = ["lib"] diff --git a/faucet/Cargo.toml b/faucet/Cargo.toml index a43add7c724a28..d6f6a1e00870c3 100644 --- a/faucet/Cargo.toml +++ b/faucet/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-faucet" -version = "1.14.10" +version = "1.14.11" description = "Solana Faucet" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -17,12 +17,12 @@ crossbeam-channel = "0.5" log = "0.4.17" serde = "1.0.138" serde_derive = "1.0.103" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.10" } -solana-cli-config = { path = "../cli-config", version = "=1.14.10" } -solana-logger = { path = "../logger", version = "=1.14.10" } -solana-metrics = { path = "../metrics", version = "=1.14.10" } -solana-sdk = { path = "../sdk", version = "=1.14.10" } -solana-version = { path = "../version", version = "=1.14.10" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.11" } +solana-cli-config = { path = "../cli-config", version = "=1.14.11" } +solana-logger = { path = "../logger", version = "=1.14.11" } +solana-metrics = { path = "../metrics", version = "=1.14.11" } +solana-sdk = { path = "../sdk", version = "=1.14.11" } +solana-version = { path = "../version", version = "=1.14.11" } spl-memo = { version = "=3.0.1", features = ["no-entrypoint"] } thiserror = "1.0" tokio = { version = "1", features = ["full"] } diff --git a/frozen-abi/Cargo.toml b/frozen-abi/Cargo.toml index eb33d536016163..1459e4de5fc256 100644 --- a/frozen-abi/Cargo.toml +++ b/frozen-abi/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-frozen-abi" -version = "1.14.10" +version = "1.14.11" description = "Solana Frozen ABI" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -20,7 +20,7 @@ serde_bytes = "0.11" serde_derive = "1.0" serde_json = "1.0" sha2 = "0.10.2" -solana-frozen-abi-macro = { path = "macro", version = "=1.14.10" } +solana-frozen-abi-macro = { path = "macro", version = "=1.14.11" } thiserror = "1.0" [target.'cfg(not(target_os = "solana"))'.dependencies] @@ -43,7 +43,7 @@ rand_core = { version = "0.6.3", features = ["alloc", "getrandom", "std"] } subtle = { version = "2.4.1", features = ["default", "i128", "std"] } [target.'cfg(not(target_os = "solana"))'.dev-dependencies] -solana-logger = { path = "../logger", version = "=1.14.10" } +solana-logger = { path = "../logger", version = "=1.14.11" } [build-dependencies] rustc_version = "0.4" diff --git a/frozen-abi/macro/Cargo.toml b/frozen-abi/macro/Cargo.toml index 3d76d0c9200275..cdfda8f1a33e13 100644 --- a/frozen-abi/macro/Cargo.toml +++ b/frozen-abi/macro/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-frozen-abi-macro" -version = "1.14.10" +version = "1.14.11" description = "Solana Frozen ABI Macro" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/genesis-utils/Cargo.toml b/genesis-utils/Cargo.toml index 44a4e04d948ebb..3032108a64ed78 100644 --- a/genesis-utils/Cargo.toml +++ b/genesis-utils/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-genesis-utils" -version = "1.14.10" +version = "1.14.11" description = "Solana Genesis Utils" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,9 +10,9 @@ documentation = "https://docs.rs/solana-download-utils" edition = "2021" [dependencies] -solana-download-utils = { path = "../download-utils", version = "=1.14.10" } -solana-runtime = { path = "../runtime", version = "=1.14.10" } -solana-sdk = { path = "../sdk", version = "=1.14.10" } +solana-download-utils = { path = "../download-utils", version = "=1.14.11" } +solana-runtime = { path = "../runtime", version = "=1.14.11" } +solana-sdk = { path = "../sdk", version = "=1.14.11" } [lib] crate-type = ["lib"] diff --git a/genesis/Cargo.toml b/genesis/Cargo.toml index b446b4430f1d79..96d4f5cc7fa7bf 100644 --- a/genesis/Cargo.toml +++ b/genesis/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-genesis" description = "Blockchain, Rebuilt for Scale" -version = "1.14.10" +version = "1.14.11" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -15,16 +15,16 @@ clap = "2.33.1" serde = "1.0.138" serde_json = "1.0.81" serde_yaml = "0.8.26" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.10" } -solana-cli-config = { path = "../cli-config", version = "=1.14.10" } -solana-entry = { path = "../entry", version = "=1.14.10" } -solana-ledger = { path = "../ledger", version = "=1.14.10" } -solana-logger = { path = "../logger", version = "=1.14.10" } -solana-runtime = { path = "../runtime", version = "=1.14.10" } -solana-sdk = { path = "../sdk", version = "=1.14.10" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.10" } -solana-version = { path = "../version", version = "=1.14.10" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.10" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.11" } +solana-cli-config = { path = "../cli-config", version = "=1.14.11" } +solana-entry = { path = "../entry", version = "=1.14.11" } +solana-ledger = { path = "../ledger", version = "=1.14.11" } +solana-logger = { path = "../logger", version = "=1.14.11" } +solana-runtime = { path = "../runtime", version = "=1.14.11" } +solana-sdk = { path = "../sdk", version = "=1.14.11" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.11" } +solana-version = { path = "../version", version = "=1.14.11" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.11" } tempfile = "3.3.0" [[bin]] diff --git a/geyser-plugin-interface/Cargo.toml b/geyser-plugin-interface/Cargo.toml index a1de3ba2bfe16c..d41d6a3b921af9 100644 --- a/geyser-plugin-interface/Cargo.toml +++ b/geyser-plugin-interface/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-geyser-plugin-interface" description = "The Solana Geyser plugin interface." -version = "1.14.10" +version = "1.14.11" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -11,8 +11,8 @@ documentation = "https://docs.rs/solana-geyser-plugin-interface" [dependencies] log = "0.4.17" -solana-sdk = { path = "../sdk", version = "=1.14.10" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.10" } +solana-sdk = { path = "../sdk", version = "=1.14.11" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.11" } thiserror = "1.0.31" [package.metadata.docs.rs] diff --git a/geyser-plugin-manager/Cargo.toml b/geyser-plugin-manager/Cargo.toml index 75a4ed0766d527..a2043f68fb9f6d 100644 --- a/geyser-plugin-manager/Cargo.toml +++ b/geyser-plugin-manager/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-geyser-plugin-manager" description = "The Solana Geyser plugin manager." -version = "1.14.10" +version = "1.14.11" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -16,13 +16,13 @@ json5 = "0.4.1" libloading = "0.7.3" log = "0.4.17" serde_json = "1.0.81" -solana-geyser-plugin-interface = { path = "../geyser-plugin-interface", version = "=1.14.10" } -solana-measure = { path = "../measure", version = "=1.14.10" } -solana-metrics = { path = "../metrics", version = "=1.14.10" } -solana-rpc = { path = "../rpc", version = "=1.14.10" } -solana-runtime = { path = "../runtime", version = "=1.14.10" } -solana-sdk = { path = "../sdk", version = "=1.14.10" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.10" } +solana-geyser-plugin-interface = { path = "../geyser-plugin-interface", version = "=1.14.11" } +solana-measure = { path = "../measure", version = "=1.14.11" } +solana-metrics = { path = "../metrics", version = "=1.14.11" } +solana-rpc = { path = "../rpc", version = "=1.14.11" } +solana-runtime = { path = "../runtime", version = "=1.14.11" } +solana-sdk = { path = "../sdk", version = "=1.14.11" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.11" } thiserror = "1.0.31" [package.metadata.docs.rs] diff --git a/gossip/Cargo.toml b/gossip/Cargo.toml index 3403d2546db31e..5cf071af6c582e 100644 --- a/gossip/Cargo.toml +++ b/gossip/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-gossip" description = "Blockchain, Rebuilt for Scale" -version = "1.14.10" +version = "1.14.11" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -27,24 +27,24 @@ rayon = "1.5.3" serde = "1.0.138" serde_bytes = "0.11" serde_derive = "1.0.103" -solana-bloom = { path = "../bloom", version = "=1.14.10" } -solana-clap-utils = { path = "../clap-utils", version = "=1.14.10" } -solana-client = { path = "../client", version = "=1.14.10" } -solana-entry = { path = "../entry", version = "=1.14.10" } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.10" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.10" } -solana-ledger = { path = "../ledger", version = "=1.14.10" } -solana-logger = { path = "../logger", version = "=1.14.10" } -solana-measure = { path = "../measure", version = "=1.14.10" } -solana-metrics = { path = "../metrics", version = "=1.14.10" } -solana-net-utils = { path = "../net-utils", version = "=1.14.10" } -solana-perf = { path = "../perf", version = "=1.14.10" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.10" } -solana-runtime = { path = "../runtime", version = "=1.14.10" } -solana-sdk = { path = "../sdk", version = "=1.14.10" } -solana-streamer = { path = "../streamer", version = "=1.14.10" } -solana-version = { path = "../version", version = "=1.14.10" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.10" } +solana-bloom = { path = "../bloom", version = "=1.14.11" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.11" } +solana-client = { path = "../client", version = "=1.14.11" } +solana-entry = { path = "../entry", version = "=1.14.11" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.11" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.11" } +solana-ledger = { path = "../ledger", version = "=1.14.11" } +solana-logger = { path = "../logger", version = "=1.14.11" } +solana-measure = { path = "../measure", version = "=1.14.11" } +solana-metrics = { path = "../metrics", version = "=1.14.11" } +solana-net-utils = { path = "../net-utils", version = "=1.14.11" } +solana-perf = { path = "../perf", version = "=1.14.11" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.11" } +solana-runtime = { path = "../runtime", version = "=1.14.11" } +solana-sdk = { path = "../sdk", version = "=1.14.11" } +solana-streamer = { path = "../streamer", version = "=1.14.11" } +solana-version = { path = "../version", version = "=1.14.11" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.11" } thiserror = "1.0" [dev-dependencies] diff --git a/install/Cargo.toml b/install/Cargo.toml index bed48a5d6c914d..1ac3eb8bd2140c 100644 --- a/install/Cargo.toml +++ b/install/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-install" description = "The solana cluster software installer" -version = "1.14.10" +version = "1.14.11" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -26,12 +26,12 @@ reqwest = { version = "0.11.11", default-features = false, features = ["blocking semver = "1.0.10" serde = { version = "1.0.138", features = ["derive"] } serde_yaml = "0.8.26" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.10" } -solana-client = { path = "../client", version = "=1.14.10" } -solana-config-program = { path = "../programs/config", version = "=1.14.10" } -solana-logger = { path = "../logger", version = "=1.14.10" } -solana-sdk = { path = "../sdk", version = "=1.14.10" } -solana-version = { path = "../version", version = "=1.14.10" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.11" } +solana-client = { path = "../client", version = "=1.14.11" } +solana-config-program = { path = "../programs/config", version = "=1.14.11" } +solana-logger = { path = "../logger", version = "=1.14.11" } +solana-sdk = { path = "../sdk", version = "=1.14.11" } +solana-version = { path = "../version", version = "=1.14.11" } tar = "0.4.38" tempfile = "3.3.0" url = "2.2.2" diff --git a/keygen/Cargo.toml b/keygen/Cargo.toml index 723b4beeed228c..169fa58b55a11b 100644 --- a/keygen/Cargo.toml +++ b/keygen/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-keygen" -version = "1.14.10" +version = "1.14.11" description = "Solana key generation utility" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,11 +14,11 @@ bs58 = "0.4.0" clap = { version = "3.1.5", features = ["cargo"] } dirs-next = "2.0.0" num_cpus = "1.13.1" -solana-clap-v3-utils = { path = "../clap-v3-utils", version = "=1.14.10" } -solana-cli-config = { path = "../cli-config", version = "=1.14.10" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.10" } -solana-sdk = { path = "../sdk", version = "=1.14.10" } -solana-version = { path = "../version", version = "=1.14.10" } +solana-clap-v3-utils = { path = "../clap-v3-utils", version = "=1.14.11" } +solana-cli-config = { path = "../cli-config", version = "=1.14.11" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.11" } +solana-sdk = { path = "../sdk", version = "=1.14.11" } +solana-version = { path = "../version", version = "=1.14.11" } tiny-bip39 = "0.8.2" [[bin]] diff --git a/ledger-tool/Cargo.toml b/ledger-tool/Cargo.toml index 623de1a6f02ffa..3b8818bf665eb9 100644 --- a/ledger-tool/Cargo.toml +++ b/ledger-tool/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-ledger-tool" description = "Blockchain, Rebuilt for Scale" -version = "1.14.10" +version = "1.14.11" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -22,20 +22,20 @@ log = { version = "0.4.17" } regex = "1" serde = { version = "1.0", features = ["derive"] } serde_json = "1.0.81" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.10" } -solana-cli-output = { path = "../cli-output", version = "=1.14.10" } -solana-core = { path = "../core", version = "=1.14.10" } -solana-entry = { path = "../entry", version = "=1.14.10" } -solana-ledger = { path = "../ledger", version = "=1.14.10" } -solana-logger = { path = "../logger", version = "=1.14.10" } -solana-measure = { path = "../measure", version = "=1.14.10" } -solana-runtime = { path = "../runtime", version = "=1.14.10" } -solana-sdk = { path = "../sdk", version = "=1.14.10" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.10" } -solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.10" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.10" } -solana-version = { path = "../version", version = "=1.14.10" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.10" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.11" } +solana-cli-output = { path = "../cli-output", version = "=1.14.11" } +solana-core = { path = "../core", version = "=1.14.11" } +solana-entry = { path = "../entry", version = "=1.14.11" } +solana-ledger = { path = "../ledger", version = "=1.14.11" } +solana-logger = { path = "../logger", version = "=1.14.11" } +solana-measure = { path = "../measure", version = "=1.14.11" } +solana-runtime = { path = "../runtime", version = "=1.14.11" } +solana-sdk = { path = "../sdk", version = "=1.14.11" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.11" } +solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.11" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.11" } +solana-version = { path = "../version", version = "=1.14.11" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.11" } tokio = { version = "1", features = ["full"] } [target.'cfg(not(target_env = "msvc"))'.dependencies] diff --git a/ledger/Cargo.toml b/ledger/Cargo.toml index b74b8e7d01acb3..f9537012f3642f 100644 --- a/ledger/Cargo.toml +++ b/ledger/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-ledger" -version = "1.14.10" +version = "1.14.11" description = "Solana ledger" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -35,23 +35,23 @@ reed-solomon-erasure = { version = "6.0.0", features = ["simd-accel"] } serde = "1.0.138" serde_bytes = "0.11.6" sha2 = "0.10.2" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.10" } -solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.10" } -solana-entry = { path = "../entry", version = "=1.14.10" } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.10" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.10" } -solana-measure = { path = "../measure", version = "=1.14.10" } -solana-metrics = { path = "../metrics", version = "=1.14.10" } -solana-perf = { path = "../perf", version = "=1.14.10" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.10" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.10" } -solana-runtime = { path = "../runtime", version = "=1.14.10" } -solana-sdk = { path = "../sdk", version = "=1.14.10" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.10" } -solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.10" } -solana-storage-proto = { path = "../storage-proto", version = "=1.14.10" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.10" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.10" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.11" } +solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.11" } +solana-entry = { path = "../entry", version = "=1.14.11" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.11" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.11" } +solana-measure = { path = "../measure", version = "=1.14.11" } +solana-metrics = { path = "../metrics", version = "=1.14.11" } +solana-perf = { path = "../perf", version = "=1.14.11" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.11" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.11" } +solana-runtime = { path = "../runtime", version = "=1.14.11" } +solana-sdk = { path = "../sdk", version = "=1.14.11" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.11" } +solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.11" } +solana-storage-proto = { path = "../storage-proto", version = "=1.14.11" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.11" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.11" } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } spl-token-2022 = { version = "=0.5.0", features = ["no-entrypoint"] } static_assertions = "1.1.0" @@ -71,8 +71,8 @@ features = ["lz4"] [dev-dependencies] bs58 = "0.4.0" matches = "0.1.9" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.10" } -solana-logger = { path = "../logger", version = "=1.14.10" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.11" } +solana-logger = { path = "../logger", version = "=1.14.11" } test-case = "2.1.0" [build-dependencies] diff --git a/local-cluster/Cargo.toml b/local-cluster/Cargo.toml index 3a0b7652634dab..18001f3e27cf26 100644 --- a/local-cluster/Cargo.toml +++ b/local-cluster/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-local-cluster" description = "Blockchain, Rebuilt for Scale" -version = "1.14.10" +version = "1.14.11" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -16,25 +16,25 @@ itertools = "0.10.3" log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" -solana-client = { path = "../client", version = "=1.14.10" } -solana-config-program = { path = "../programs/config", version = "=1.14.10" } -solana-core = { path = "../core", version = "=1.14.10" } -solana-entry = { path = "../entry", version = "=1.14.10" } -solana-gossip = { path = "../gossip", version = "=1.14.10" } -solana-ledger = { path = "../ledger", version = "=1.14.10" } -solana-runtime = { path = "../runtime", version = "=1.14.10" } -solana-sdk = { path = "../sdk", version = "=1.14.10" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.10" } -solana-streamer = { path = "../streamer", version = "=1.14.10" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.10" } +solana-client = { path = "../client", version = "=1.14.11" } +solana-config-program = { path = "../programs/config", version = "=1.14.11" } +solana-core = { path = "../core", version = "=1.14.11" } +solana-entry = { path = "../entry", version = "=1.14.11" } +solana-gossip = { path = "../gossip", version = "=1.14.11" } +solana-ledger = { path = "../ledger", version = "=1.14.11" } +solana-runtime = { path = "../runtime", version = "=1.14.11" } +solana-sdk = { path = "../sdk", version = "=1.14.11" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.11" } +solana-streamer = { path = "../streamer", version = "=1.14.11" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.11" } tempfile = "3.3.0" [dev-dependencies] assert_matches = "1.5.0" gag = "1.0.0" serial_test = "0.8.0" -solana-download-utils = { path = "../download-utils", version = "=1.14.10" } -solana-logger = { path = "../logger", version = "=1.14.10" } +solana-download-utils = { path = "../download-utils", version = "=1.14.11" } +solana-logger = { path = "../logger", version = "=1.14.11" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/log-analyzer/Cargo.toml b/log-analyzer/Cargo.toml index bbe68f31c21f51..2fb36e1cece327 100644 --- a/log-analyzer/Cargo.toml +++ b/log-analyzer/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-log-analyzer" description = "The solana cluster network analysis tool" -version = "1.14.10" +version = "1.14.11" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,8 +14,8 @@ byte-unit = "4.0.14" clap = { version = "3.1.5", features = ["cargo"] } serde = "1.0.138" serde_json = "1.0.81" -solana-logger = { path = "../logger", version = "=1.14.10" } -solana-version = { path = "../version", version = "=1.14.10" } +solana-logger = { path = "../logger", version = "=1.14.11" } +solana-version = { path = "../version", version = "=1.14.11" } [[bin]] name = "solana-log-analyzer" diff --git a/logger/Cargo.toml b/logger/Cargo.toml index 521cfe6302a736..82a01de1579cb2 100644 --- a/logger/Cargo.toml +++ b/logger/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-logger" -version = "1.14.10" +version = "1.14.11" description = "Solana Logger" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/measure/Cargo.toml b/measure/Cargo.toml index 247c7882190b4a..105510721482f1 100644 --- a/measure/Cargo.toml +++ b/measure/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "solana-measure" description = "Blockchain, Rebuilt for Scale" -version = "1.14.10" +version = "1.14.11" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-measure" readme = "../README.md" @@ -12,7 +12,7 @@ edition = "2021" [dependencies] log = "0.4.17" -solana-sdk = { path = "../sdk", version = "=1.14.10" } +solana-sdk = { path = "../sdk", version = "=1.14.11" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/merkle-root-bench/Cargo.toml b/merkle-root-bench/Cargo.toml index e6c7e7eeb5adfe..2f2014c6f485e1 100644 --- a/merkle-root-bench/Cargo.toml +++ b/merkle-root-bench/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-merkle-root-bench" -version = "1.14.10" +version = "1.14.11" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -11,11 +11,11 @@ publish = false [dependencies] clap = "2.33.1" log = "0.4.17" -solana-logger = { path = "../logger", version = "=1.14.10" } -solana-measure = { path = "../measure", version = "=1.14.10" } -solana-runtime = { path = "../runtime", version = "=1.14.10" } -solana-sdk = { path = "../sdk", version = "=1.14.10" } -solana-version = { path = "../version", version = "=1.14.10" } +solana-logger = { path = "../logger", version = "=1.14.11" } +solana-measure = { path = "../measure", version = "=1.14.11" } +solana-runtime = { path = "../runtime", version = "=1.14.11" } +solana-sdk = { path = "../sdk", version = "=1.14.11" } +solana-version = { path = "../version", version = "=1.14.11" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/merkle-tree/Cargo.toml b/merkle-tree/Cargo.toml index 1ee5b1cb3e0658..33f03ba2e96666 100644 --- a/merkle-tree/Cargo.toml +++ b/merkle-tree/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-merkle-tree" -version = "1.14.10" +version = "1.14.11" description = "Solana Merkle Tree" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -11,7 +11,7 @@ edition = "2021" [dependencies] fast-math = "0.1" -solana-program = { path = "../sdk/program", version = "=1.14.10" } +solana-program = { path = "../sdk/program", version = "=1.14.11" } # This can go once the BPF toolchain target Rust 1.42.0+ [target.bpfel-unknown-unknown.dependencies] diff --git a/metrics/Cargo.toml b/metrics/Cargo.toml index 533204b88ca167..8d93c6dfb5835d 100644 --- a/metrics/Cargo.toml +++ b/metrics/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-metrics" -version = "1.14.10" +version = "1.14.11" description = "Solana Metrics" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -15,7 +15,7 @@ gethostname = "0.2.3" lazy_static = "1.4.0" log = "0.4.17" reqwest = { version = "0.11.11", default-features = false, features = ["blocking", "brotli", "deflate", "gzip", "rustls-tls", "json"] } -solana-sdk = { path = "../sdk", version = "=1.14.10" } +solana-sdk = { path = "../sdk", version = "=1.14.11" } [dev-dependencies] env_logger = "0.9.0" diff --git a/net-shaper/Cargo.toml b/net-shaper/Cargo.toml index 06d7b6be924ebc..bed0f33416002c 100644 --- a/net-shaper/Cargo.toml +++ b/net-shaper/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-net-shaper" description = "The solana cluster network shaping tool" -version = "1.14.10" +version = "1.14.11" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,7 +14,7 @@ clap = { version = "3.1.5", features = ["cargo"] } rand = "0.7.0" serde = { version = "1.0.138", features = ["derive"] } serde_json = "1.0.81" -solana-logger = { path = "../logger", version = "=1.14.10" } +solana-logger = { path = "../logger", version = "=1.14.11" } [[bin]] name = "solana-net-shaper" diff --git a/net-utils/Cargo.toml b/net-utils/Cargo.toml index b187f0a78090c3..f2d2069a11ac28 100644 --- a/net-utils/Cargo.toml +++ b/net-utils/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-net-utils" -version = "1.14.10" +version = "1.14.11" description = "Solana Network Utilities" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -19,9 +19,9 @@ rand = "0.7.0" serde = "1.0.138" serde_derive = "1.0.103" socket2 = "0.4.4" -solana-logger = { path = "../logger", version = "=1.14.10" } -solana-sdk = { path = "../sdk", version = "=1.14.10" } -solana-version = { path = "../version", version = "=1.14.10" } +solana-logger = { path = "../logger", version = "=1.14.11" } +solana-sdk = { path = "../sdk", version = "=1.14.11" } +solana-version = { path = "../version", version = "=1.14.11" } tokio = { version = "1", features = ["full"] } url = "2.2.2" diff --git a/notifier/Cargo.toml b/notifier/Cargo.toml index 4a6c5127cfbd6d..d29c7089d26208 100644 --- a/notifier/Cargo.toml +++ b/notifier/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-notifier" -version = "1.14.10" +version = "1.14.11" description = "Solana Notifier" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/perf/Cargo.toml b/perf/Cargo.toml index c61c3e75c06de7..82cae36b3c5f9c 100644 --- a/perf/Cargo.toml +++ b/perf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-perf" -version = "1.14.10" +version = "1.14.11" description = "Solana Performance APIs" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -22,10 +22,10 @@ log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" serde = "1.0.138" -solana-metrics = { path = "../metrics", version = "=1.14.10" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.10" } -solana-sdk = { path = "../sdk", version = "=1.14.10" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.10" } +solana-metrics = { path = "../metrics", version = "=1.14.11" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.11" } +solana-sdk = { path = "../sdk", version = "=1.14.11" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.11" } [target."cfg(target_os = \"linux\")".dependencies] caps = "0.5.3" @@ -37,7 +37,7 @@ name = "solana_perf" [dev-dependencies] matches = "0.1.9" -solana-logger = { path = "../logger", version = "=1.14.10" } +solana-logger = { path = "../logger", version = "=1.14.11" } [[bench]] name = "sigverify" diff --git a/poh-bench/Cargo.toml b/poh-bench/Cargo.toml index 62333a230220b4..47a4ecfe3f07c7 100644 --- a/poh-bench/Cargo.toml +++ b/poh-bench/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-poh-bench" -version = "1.14.10" +version = "1.14.11" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,12 +14,12 @@ clap = { version = "3.1.5", features = ["cargo"] } log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" -solana-entry = { path = "../entry", version = "=1.14.10" } -solana-logger = { path = "../logger", version = "=1.14.10" } -solana-measure = { path = "../measure", version = "=1.14.10" } -solana-perf = { path = "../perf", version = "=1.14.10" } -solana-sdk = { path = "../sdk", version = "=1.14.10" } -solana-version = { path = "../version", version = "=1.14.10" } +solana-entry = { path = "../entry", version = "=1.14.11" } +solana-logger = { path = "../logger", version = "=1.14.11" } +solana-measure = { path = "../measure", version = "=1.14.11" } +solana-perf = { path = "../perf", version = "=1.14.11" } +solana-sdk = { path = "../sdk", version = "=1.14.11" } +solana-version = { path = "../version", version = "=1.14.11" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/poh/Cargo.toml b/poh/Cargo.toml index 1ec749f3b727b5..e5a2c3c6d31d95 100644 --- a/poh/Cargo.toml +++ b/poh/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-poh" -version = "1.14.10" +version = "1.14.11" description = "Solana PoH" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,21 +13,21 @@ edition = "2021" core_affinity = "0.5.10" crossbeam-channel = "0.5" log = "0.4.17" -solana-entry = { path = "../entry", version = "=1.14.10" } -solana-ledger = { path = "../ledger", version = "=1.14.10" } -solana-measure = { path = "../measure", version = "=1.14.10" } -solana-metrics = { path = "../metrics", version = "=1.14.10" } -solana-runtime = { path = "../runtime", version = "=1.14.10" } -solana-sdk = { path = "../sdk", version = "=1.14.10" } -solana-sys-tuner = { path = "../sys-tuner", version = "=1.14.10" } +solana-entry = { path = "../entry", version = "=1.14.11" } +solana-ledger = { path = "../ledger", version = "=1.14.11" } +solana-measure = { path = "../measure", version = "=1.14.11" } +solana-metrics = { path = "../metrics", version = "=1.14.11" } +solana-runtime = { path = "../runtime", version = "=1.14.11" } +solana-sdk = { path = "../sdk", version = "=1.14.11" } +solana-sys-tuner = { path = "../sys-tuner", version = "=1.14.11" } thiserror = "1.0" [dev-dependencies] bincode = "1.3.3" matches = "0.1.9" rand = "0.7.0" -solana-logger = { path = "../logger", version = "=1.14.10" } -solana-perf = { path = "../perf", version = "=1.14.10" } +solana-logger = { path = "../logger", version = "=1.14.11" } +solana-perf = { path = "../perf", version = "=1.14.11" } [lib] crate-type = ["lib"] diff --git a/program-runtime/Cargo.toml b/program-runtime/Cargo.toml index 362b31081561e8..31ad20cf6e3c0d 100644 --- a/program-runtime/Cargo.toml +++ b/program-runtime/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-program-runtime" -version = "1.14.10" +version = "1.14.11" description = "Solana program runtime" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -21,16 +21,16 @@ num-derive = { version = "0.3" } num-traits = { version = "0.2" } rand = "0.7.0" serde = { version = "1.0.129", features = ["derive", "rc"] } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.10" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.10" } -solana-measure = { path = "../measure", version = "=1.14.10" } -solana-metrics = { path = "../metrics", version = "=1.14.10" } -solana-sdk = { path = "../sdk", version = "=1.14.10" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.11" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.11" } +solana-measure = { path = "../measure", version = "=1.14.11" } +solana-metrics = { path = "../metrics", version = "=1.14.11" } +solana-sdk = { path = "../sdk", version = "=1.14.11" } thiserror = "1.0" enum-iterator = "0.8.1" [dev-dependencies] -solana-logger = { path = "../logger", version = "=1.14.10" } +solana-logger = { path = "../logger", version = "=1.14.11" } [lib] crate-type = ["lib"] diff --git a/program-test/Cargo.toml b/program-test/Cargo.toml index ade9cfe5a6e98d..f6d886372fa11a 100644 --- a/program-test/Cargo.toml +++ b/program-test/Cargo.toml @@ -5,7 +5,7 @@ edition = "2021" license = "Apache-2.0" name = "solana-program-test" repository = "https://github.com/solana-labs/solana" -version = "1.14.10" +version = "1.14.11" [dependencies] assert_matches = "1.5.0" @@ -15,13 +15,13 @@ bincode = "1.3.3" chrono-humanize = "0.2.1" log = "0.4.17" serde = "1.0.138" -solana-banks-client = { path = "../banks-client", version = "=1.14.10" } -solana-banks-server = { path = "../banks-server", version = "=1.14.10" } -solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.10" } -solana-logger = { path = "../logger", version = "=1.14.10" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.10" } -solana-runtime = { path = "../runtime", version = "=1.14.10" } -solana-sdk = { path = "../sdk", version = "=1.14.10" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.10" } +solana-banks-client = { path = "../banks-client", version = "=1.14.11" } +solana-banks-server = { path = "../banks-server", version = "=1.14.11" } +solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.11" } +solana-logger = { path = "../logger", version = "=1.14.11" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.11" } +solana-runtime = { path = "../runtime", version = "=1.14.11" } +solana-sdk = { path = "../sdk", version = "=1.14.11" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.11" } thiserror = "1.0" tokio = { version = "1", features = ["full"] } diff --git a/programs/address-lookup-table-tests/Cargo.toml b/programs/address-lookup-table-tests/Cargo.toml index ca2c34a333a365..3e37af19fbfd89 100644 --- a/programs/address-lookup-table-tests/Cargo.toml +++ b/programs/address-lookup-table-tests/Cargo.toml @@ -3,7 +3,7 @@ [package] name = "solana-address-lookup-table-program-tests" -version = "1.14.10" +version = "1.14.11" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" @@ -14,9 +14,9 @@ publish = false [dev-dependencies] assert_matches = "1.5.0" bincode = "1.3.3" -solana-address-lookup-table-program = { path = "../address-lookup-table", version = "=1.14.10" } -solana-program-test = { path = "../../program-test", version = "=1.14.10" } -solana-sdk = { path = "../../sdk", version = "=1.14.10" } +solana-address-lookup-table-program = { path = "../address-lookup-table", version = "=1.14.11" } +solana-program-test = { path = "../../program-test", version = "=1.14.11" } +solana-sdk = { path = "../../sdk", version = "=1.14.11" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/address-lookup-table/Cargo.toml b/programs/address-lookup-table/Cargo.toml index c1a1c0a00e58ec..e4531e034f2ae3 100644 --- a/programs/address-lookup-table/Cargo.toml +++ b/programs/address-lookup-table/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-address-lookup-table-program" -version = "1.14.10" +version = "1.14.11" description = "Solana address lookup table program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -16,14 +16,14 @@ log = "0.4.17" num-derive = "0.3" num-traits = "0.2" serde = { version = "1.0.138", features = ["derive"] } -solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.10" } -solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.10" } -solana-program = { path = "../../sdk/program", version = "=1.14.10" } +solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.11" } +solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.11" } +solana-program = { path = "../../sdk/program", version = "=1.14.11" } thiserror = "1.0" [target.'cfg(not(target_os = "solana"))'.dependencies] -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.10" } -solana-sdk = { path = "../../sdk", version = "=1.14.10" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.11" } +solana-sdk = { path = "../../sdk", version = "=1.14.11" } [build-dependencies] rustc_version = "0.4" diff --git a/programs/bpf-loader-tests/Cargo.toml b/programs/bpf-loader-tests/Cargo.toml index bb23c1e02a710f..23483b5f33324c 100644 --- a/programs/bpf-loader-tests/Cargo.toml +++ b/programs/bpf-loader-tests/Cargo.toml @@ -3,7 +3,7 @@ [package] name = "solana-bpf-loader-program-tests" -version = "1.14.10" +version = "1.14.11" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" @@ -14,9 +14,9 @@ publish = false [dev-dependencies] assert_matches = "1.5.0" bincode = "1.3.3" -solana-bpf-loader-program = { path = "../bpf_loader", version = "=1.14.10" } -solana-program-test = { path = "../../program-test", version = "=1.14.10" } -solana-sdk = { path = "../../sdk", version = "=1.14.10" } +solana-bpf-loader-program = { path = "../bpf_loader", version = "=1.14.11" } +solana-program-test = { path = "../../program-test", version = "=1.14.11" } +solana-sdk = { path = "../../sdk", version = "=1.14.11" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/bpf/Cargo.lock b/programs/bpf/Cargo.lock index 518f0e5d0fe8dc..7d696a68b207a6 100644 --- a/programs/bpf/Cargo.lock +++ b/programs/bpf/Cargo.lock @@ -4054,7 +4054,7 @@ dependencies = [ [[package]] name = "solana-account-decoder" -version = "1.14.10" +version = "1.14.11" dependencies = [ "Inflector", "base64 0.13.0", @@ -4067,7 +4067,7 @@ dependencies = [ "serde_json", "solana-address-lookup-table-program", "solana-config-program", - "solana-sdk 1.14.10", + "solana-sdk 1.14.11", "solana-vote-program", "spl-token", "spl-token-2022", @@ -4077,7 +4077,7 @@ dependencies = [ [[package]] name = "solana-address-lookup-table-program" -version = "1.14.10" +version = "1.14.11" dependencies = [ "bincode", "bytemuck", @@ -4086,23 +4086,23 @@ dependencies = [ "num-traits", "rustc_version", "serde", - "solana-frozen-abi 1.14.10", - "solana-frozen-abi-macro 1.14.10", - "solana-program 1.14.10", + "solana-frozen-abi 1.14.11", + "solana-frozen-abi-macro 1.14.11", + "solana-program 1.14.11", "solana-program-runtime", - "solana-sdk 1.14.10", + "solana-sdk 1.14.11", "thiserror", ] [[package]] name = "solana-banks-client" -version = "1.14.10" +version = "1.14.11" dependencies = [ "borsh", "futures 0.3.21", "solana-banks-interface", - "solana-program 1.14.10", - "solana-sdk 1.14.10", + "solana-program 1.14.11", + "solana-sdk 1.14.11", "tarpc", "thiserror", "tokio", @@ -4111,16 +4111,16 @@ dependencies = [ [[package]] name = "solana-banks-interface" -version = "1.14.10" +version = "1.14.11" dependencies = [ "serde", - "solana-sdk 1.14.10", + "solana-sdk 1.14.11", "tarpc", ] [[package]] name = "solana-banks-server" -version = "1.14.10" +version = "1.14.11" dependencies = [ "bincode", "crossbeam-channel", @@ -4128,7 +4128,7 @@ dependencies = [ "solana-banks-interface", "solana-client", "solana-runtime", - "solana-sdk 1.14.10", + "solana-sdk 1.14.11", "solana-send-transaction-service", "tarpc", "tokio", @@ -4138,7 +4138,7 @@ dependencies = [ [[package]] name = "solana-bloom" -version = "1.14.10" +version = "1.14.11" dependencies = [ "bv", "fnv", @@ -4148,14 +4148,14 @@ dependencies = [ "rustc_version", "serde", "serde_derive", - "solana-frozen-abi 1.14.10", - "solana-frozen-abi-macro 1.14.10", - "solana-sdk 1.14.10", + "solana-frozen-abi 1.14.11", + "solana-frozen-abi-macro 1.14.11", + "solana-sdk 1.14.11", ] [[package]] name = "solana-bpf-loader-program" -version = "1.14.10" +version = "1.14.11" dependencies = [ "bincode", "byteorder 1.4.3", @@ -4164,15 +4164,15 @@ dependencies = [ "solana-measure", "solana-metrics", "solana-program-runtime", - "solana-sdk 1.14.10", - "solana-zk-token-sdk 1.14.10", + "solana-sdk 1.14.11", + "solana-zk-token-sdk 1.14.11", "solana_rbpf", "thiserror", ] [[package]] name = "solana-bpf-programs" -version = "1.14.10" +version = "1.14.11" dependencies = [ "bincode", "byteorder 1.4.3", @@ -4188,11 +4188,11 @@ dependencies = [ "solana-bpf-rust-realloc-invoke", "solana-cli-output", "solana-ledger", - "solana-logger 1.14.10", + "solana-logger 1.14.11", "solana-measure", "solana-program-runtime", "solana-runtime", - "solana-sdk 1.14.10", + "solana-sdk 1.14.11", "solana-transaction-status", "solana_rbpf", "walkdir", @@ -4200,385 +4200,385 @@ dependencies = [ [[package]] name = "solana-bpf-rust-128bit" -version = "1.14.10" +version = "1.14.11" dependencies = [ "solana-bpf-rust-128bit-dep", - "solana-program 1.14.10", + "solana-program 1.14.11", ] [[package]] name = "solana-bpf-rust-128bit-dep" -version = "1.14.10" +version = "1.14.11" dependencies = [ - "solana-program 1.14.10", + "solana-program 1.14.11", ] [[package]] name = "solana-bpf-rust-alloc" -version = "1.14.10" +version = "1.14.11" dependencies = [ - "solana-program 1.14.10", + "solana-program 1.14.11", ] [[package]] name = "solana-bpf-rust-call-depth" -version = "1.14.10" +version = "1.14.11" dependencies = [ - "solana-program 1.14.10", + "solana-program 1.14.11", ] [[package]] name = "solana-bpf-rust-caller-access" -version = "1.14.10" +version = "1.14.11" dependencies = [ - "solana-program 1.14.10", + "solana-program 1.14.11", ] [[package]] name = "solana-bpf-rust-curve25519" -version = "1.14.10" +version = "1.14.11" dependencies = [ - "solana-program 1.14.10", - "solana-zk-token-sdk 1.14.10", + "solana-program 1.14.11", + "solana-zk-token-sdk 1.14.11", ] [[package]] name = "solana-bpf-rust-custom-heap" -version = "1.14.10" +version = "1.14.11" dependencies = [ - "solana-program 1.14.10", + "solana-program 1.14.11", ] [[package]] name = "solana-bpf-rust-dep-crate" -version = "1.14.10" +version = "1.14.11" dependencies = [ "byteorder 1.4.3", "solana-address-lookup-table-program", - "solana-program 1.14.10", + "solana-program 1.14.11", ] [[package]] name = "solana-bpf-rust-deprecated-loader" -version = "1.14.10" +version = "1.14.11" dependencies = [ - "solana-program 1.14.10", + "solana-program 1.14.11", ] [[package]] name = "solana-bpf-rust-dup-accounts" -version = "1.14.10" +version = "1.14.11" dependencies = [ - "solana-program 1.14.10", + "solana-program 1.14.11", ] [[package]] name = "solana-bpf-rust-error-handling" -version = "1.14.10" +version = "1.14.11" dependencies = [ "num-derive", "num-traits", - "solana-program 1.14.10", + "solana-program 1.14.11", "thiserror", ] [[package]] name = "solana-bpf-rust-external-spend" -version = "1.14.10" +version = "1.14.11" dependencies = [ - "solana-program 1.14.10", + "solana-program 1.14.11", ] [[package]] name = "solana-bpf-rust-finalize" -version = "1.14.10" +version = "1.14.11" dependencies = [ - "solana-program 1.14.10", + "solana-program 1.14.11", ] [[package]] name = "solana-bpf-rust-get-minimum-delegation" -version = "1.14.10" +version = "1.14.11" dependencies = [ - "solana-program 1.14.10", + "solana-program 1.14.11", ] [[package]] name = "solana-bpf-rust-inner_instruction_alignment_check" -version = "1.14.10" +version = "1.14.11" dependencies = [ - "solana-program 1.14.10", + "solana-program 1.14.11", ] [[package]] name = "solana-bpf-rust-instruction-introspection" -version = "1.14.10" +version = "1.14.11" dependencies = [ - "solana-program 1.14.10", + "solana-program 1.14.11", ] [[package]] name = "solana-bpf-rust-invoke" -version = "1.14.10" +version = "1.14.11" dependencies = [ "solana-bpf-rust-invoked", - "solana-program 1.14.10", + "solana-program 1.14.11", ] [[package]] name = "solana-bpf-rust-invoke-and-error" -version = "1.14.10" +version = "1.14.11" dependencies = [ - "solana-program 1.14.10", + "solana-program 1.14.11", ] [[package]] name = "solana-bpf-rust-invoke-and-ok" -version = "1.14.10" +version = "1.14.11" dependencies = [ - "solana-program 1.14.10", + "solana-program 1.14.11", ] [[package]] name = "solana-bpf-rust-invoke-and-return" -version = "1.14.10" +version = "1.14.11" dependencies = [ - "solana-program 1.14.10", + "solana-program 1.14.11", ] [[package]] name = "solana-bpf-rust-invoked" -version = "1.14.10" +version = "1.14.11" dependencies = [ - "solana-program 1.14.10", + "solana-program 1.14.11", ] [[package]] name = "solana-bpf-rust-iter" -version = "1.14.10" +version = "1.14.11" dependencies = [ - "solana-program 1.14.10", + "solana-program 1.14.11", ] [[package]] name = "solana-bpf-rust-log-data" -version = "1.14.10" +version = "1.14.11" dependencies = [ - "solana-program 1.14.10", + "solana-program 1.14.11", ] [[package]] name = "solana-bpf-rust-many-args" -version = "1.14.10" +version = "1.14.11" dependencies = [ "solana-bpf-rust-many-args-dep", - "solana-program 1.14.10", + "solana-program 1.14.11", ] [[package]] name = "solana-bpf-rust-many-args-dep" -version = "1.14.10" +version = "1.14.11" dependencies = [ - "solana-program 1.14.10", + "solana-program 1.14.11", ] [[package]] name = "solana-bpf-rust-mem" -version = "1.14.10" +version = "1.14.11" dependencies = [ - "solana-program 1.14.10", + "solana-program 1.14.11", "solana-program-runtime", "solana-program-test", - "solana-sdk 1.14.10", + "solana-sdk 1.14.11", ] [[package]] name = "solana-bpf-rust-membuiltins" -version = "1.14.10" +version = "1.14.11" dependencies = [ "solana-bpf-rust-mem", - "solana-program 1.14.10", + "solana-program 1.14.11", ] [[package]] name = "solana-bpf-rust-noop" -version = "1.14.10" +version = "1.14.11" dependencies = [ - "solana-program 1.14.10", + "solana-program 1.14.11", ] [[package]] name = "solana-bpf-rust-panic" -version = "1.14.10" +version = "1.14.11" dependencies = [ - "solana-program 1.14.10", + "solana-program 1.14.11", ] [[package]] name = "solana-bpf-rust-param-passing" -version = "1.14.10" +version = "1.14.11" dependencies = [ "solana-bpf-rust-param-passing-dep", - "solana-program 1.14.10", + "solana-program 1.14.11", ] [[package]] name = "solana-bpf-rust-param-passing-dep" -version = "1.14.10" +version = "1.14.11" dependencies = [ - "solana-program 1.14.10", + "solana-program 1.14.11", ] [[package]] name = "solana-bpf-rust-rand" -version = "1.14.10" +version = "1.14.11" dependencies = [ "getrandom 0.1.14", "rand 0.7.3", - "solana-program 1.14.10", + "solana-program 1.14.11", ] [[package]] name = "solana-bpf-rust-realloc" -version = "1.14.10" +version = "1.14.11" dependencies = [ - "solana-program 1.14.10", + "solana-program 1.14.11", ] [[package]] name = "solana-bpf-rust-realloc-invoke" -version = "1.14.10" +version = "1.14.11" dependencies = [ "solana-bpf-rust-realloc", - "solana-program 1.14.10", + "solana-program 1.14.11", ] [[package]] name = "solana-bpf-rust-ro-account_modify" -version = "1.14.10" +version = "1.14.11" dependencies = [ - "solana-program 1.14.10", + "solana-program 1.14.11", ] [[package]] name = "solana-bpf-rust-ro-modify" -version = "1.14.10" +version = "1.14.11" dependencies = [ - "solana-program 1.14.10", + "solana-program 1.14.11", ] [[package]] name = "solana-bpf-rust-sanity" -version = "1.14.10" +version = "1.14.11" dependencies = [ - "solana-program 1.14.10", + "solana-program 1.14.11", "solana-program-runtime", "solana-program-test", - "solana-sdk 1.14.10", + "solana-sdk 1.14.11", ] [[package]] name = "solana-bpf-rust-secp256k1-recover" -version = "1.14.10" +version = "1.14.11" dependencies = [ "libsecp256k1 0.7.0", - "solana-program 1.14.10", + "solana-program 1.14.11", ] [[package]] name = "solana-bpf-rust-sha" -version = "1.14.10" +version = "1.14.11" dependencies = [ "blake3", - "solana-program 1.14.10", + "solana-program 1.14.11", ] [[package]] name = "solana-bpf-rust-sibling-instructions" -version = "1.14.10" +version = "1.14.11" dependencies = [ - "solana-program 1.14.10", + "solana-program 1.14.11", ] [[package]] name = "solana-bpf-rust-sibling_inner-instructions" -version = "1.14.10" +version = "1.14.11" dependencies = [ - "solana-program 1.14.10", + "solana-program 1.14.11", ] [[package]] name = "solana-bpf-rust-simulation" -version = "1.14.10" +version = "1.14.11" dependencies = [ - "solana-logger 1.14.10", - "solana-program 1.14.10", + "solana-logger 1.14.11", + "solana-program 1.14.11", "solana-program-test", - "solana-sdk 1.14.10", + "solana-sdk 1.14.11", "solana-validator", ] [[package]] name = "solana-bpf-rust-spoof1" -version = "1.14.10" +version = "1.14.11" dependencies = [ - "solana-program 1.14.10", + "solana-program 1.14.11", ] [[package]] name = "solana-bpf-rust-spoof1-system" -version = "1.14.10" +version = "1.14.11" dependencies = [ - "solana-program 1.14.10", + "solana-program 1.14.11", ] [[package]] name = "solana-bpf-rust-sysvar" -version = "1.14.10" +version = "1.14.11" dependencies = [ - "solana-program 1.14.10", + "solana-program 1.14.11", "solana-program-runtime", "solana-program-test", - "solana-sdk 1.14.10", + "solana-sdk 1.14.11", ] [[package]] name = "solana-bpf-rust-upgradeable" -version = "1.14.10" +version = "1.14.11" dependencies = [ - "solana-program 1.14.10", + "solana-program 1.14.11", ] [[package]] name = "solana-bpf-rust-upgraded" -version = "1.14.10" +version = "1.14.11" dependencies = [ - "solana-program 1.14.10", + "solana-program 1.14.11", ] [[package]] name = "solana-bucket-map" -version = "1.14.10" +version = "1.14.11" dependencies = [ "log", "memmap2", "modular-bitfield", "rand 0.7.3", "solana-measure", - "solana-sdk 1.14.10", + "solana-sdk 1.14.11", "tempfile", ] [[package]] name = "solana-clap-utils" -version = "1.14.10" +version = "1.14.11" dependencies = [ "chrono", "clap 2.33.3", "rpassword", "solana-perf", "solana-remote-wallet", - "solana-sdk 1.14.10", + "solana-sdk 1.14.11", "thiserror", "tiny-bip39", "uriparse", @@ -4587,7 +4587,7 @@ dependencies = [ [[package]] name = "solana-cli-config" -version = "1.14.10" +version = "1.14.11" dependencies = [ "dirs-next", "lazy_static", @@ -4595,13 +4595,13 @@ dependencies = [ "serde_derive", "serde_yaml", "solana-clap-utils", - "solana-sdk 1.14.10", + "solana-sdk 1.14.11", "url 2.2.2", ] [[package]] name = "solana-cli-output" -version = "1.14.10" +version = "1.14.11" dependencies = [ "Inflector", "base64 0.13.0", @@ -4618,7 +4618,7 @@ dependencies = [ "solana-clap-utils", "solana-cli-config", "solana-client", - "solana-sdk 1.14.10", + "solana-sdk 1.14.11", "solana-transaction-status", "solana-vote-program", "spl-memo", @@ -4626,7 +4626,7 @@ dependencies = [ [[package]] name = "solana-client" -version = "1.14.10" +version = "1.14.11" dependencies = [ "async-mutex", "async-trait", @@ -4662,7 +4662,7 @@ dependencies = [ "solana-measure", "solana-metrics", "solana-net-utils", - "solana-sdk 1.14.10", + "solana-sdk 1.14.11", "solana-streamer", "solana-transaction-status", "solana-version", @@ -4678,27 +4678,27 @@ dependencies = [ [[package]] name = "solana-compute-budget-program" -version = "1.14.10" +version = "1.14.11" dependencies = [ "solana-program-runtime", - "solana-sdk 1.14.10", + "solana-sdk 1.14.11", ] [[package]] name = "solana-config-program" -version = "1.14.10" +version = "1.14.11" dependencies = [ "bincode", "chrono", "serde", "serde_derive", "solana-program-runtime", - "solana-sdk 1.14.10", + "solana-sdk 1.14.11", ] [[package]] name = "solana-core" -version = "1.14.10" +version = "1.14.11" dependencies = [ "ahash", "base64 0.13.0", @@ -4727,8 +4727,8 @@ dependencies = [ "solana-bloom", "solana-client", "solana-entry", - "solana-frozen-abi 1.14.10", - "solana-frozen-abi-macro 1.14.10", + "solana-frozen-abi 1.14.11", + "solana-frozen-abi-macro 1.14.11", "solana-geyser-plugin-manager", "solana-gossip", "solana-ledger", @@ -4741,7 +4741,7 @@ dependencies = [ "solana-rayon-threadlimit", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.10", + "solana-sdk 1.14.11", "solana-send-transaction-service", "solana-streamer", "solana-transaction-status", @@ -4757,19 +4757,19 @@ dependencies = [ [[package]] name = "solana-download-utils" -version = "1.14.10" +version = "1.14.11" dependencies = [ "console", "indicatif", "log", "reqwest", "solana-runtime", - "solana-sdk 1.14.10", + "solana-sdk 1.14.11", ] [[package]] name = "solana-entry" -version = "1.14.10" +version = "1.14.11" dependencies = [ "bincode", "crossbeam-channel", @@ -4785,12 +4785,12 @@ dependencies = [ "solana-metrics", "solana-perf", "solana-rayon-threadlimit", - "solana-sdk 1.14.10", + "solana-sdk 1.14.11", ] [[package]] name = "solana-faucet" -version = "1.14.10" +version = "1.14.11" dependencies = [ "bincode", "byteorder 1.4.3", @@ -4801,9 +4801,9 @@ dependencies = [ "serde_derive", "solana-clap-utils", "solana-cli-config", - "solana-logger 1.14.10", + "solana-logger 1.14.11", "solana-metrics", - "solana-sdk 1.14.10", + "solana-sdk 1.14.11", "solana-version", "spl-memo", "thiserror", @@ -4846,7 +4846,7 @@ dependencies = [ [[package]] name = "solana-frozen-abi" -version = "1.14.10" +version = "1.14.11" dependencies = [ "ahash", "blake3", @@ -4871,7 +4871,7 @@ dependencies = [ "serde_derive", "serde_json", "sha2 0.10.2", - "solana-frozen-abi-macro 1.14.10", + "solana-frozen-abi-macro 1.14.11", "subtle", "thiserror", ] @@ -4890,7 +4890,7 @@ dependencies = [ [[package]] name = "solana-frozen-abi-macro" -version = "1.14.10" +version = "1.14.11" dependencies = [ "proc-macro2 1.0.41", "quote 1.0.18", @@ -4900,26 +4900,26 @@ dependencies = [ [[package]] name = "solana-genesis-utils" -version = "1.14.10" +version = "1.14.11" dependencies = [ "solana-download-utils", "solana-runtime", - "solana-sdk 1.14.10", + "solana-sdk 1.14.11", ] [[package]] name = "solana-geyser-plugin-interface" -version = "1.14.10" +version = "1.14.11" dependencies = [ "log", - "solana-sdk 1.14.10", + "solana-sdk 1.14.11", "solana-transaction-status", "thiserror", ] [[package]] name = "solana-geyser-plugin-manager" -version = "1.14.10" +version = "1.14.11" dependencies = [ "bs58", "crossbeam-channel", @@ -4932,14 +4932,14 @@ dependencies = [ "solana-metrics", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.10", + "solana-sdk 1.14.11", "solana-transaction-status", "thiserror", ] [[package]] name = "solana-gossip" -version = "1.14.10" +version = "1.14.11" dependencies = [ "bincode", "bv", @@ -4963,17 +4963,17 @@ dependencies = [ "solana-clap-utils", "solana-client", "solana-entry", - "solana-frozen-abi 1.14.10", - "solana-frozen-abi-macro 1.14.10", + "solana-frozen-abi 1.14.11", + "solana-frozen-abi-macro 1.14.11", "solana-ledger", - "solana-logger 1.14.10", + "solana-logger 1.14.11", "solana-measure", "solana-metrics", "solana-net-utils", "solana-perf", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.14.10", + "solana-sdk 1.14.11", "solana-streamer", "solana-version", "solana-vote-program", @@ -4982,7 +4982,7 @@ dependencies = [ [[package]] name = "solana-ledger" -version = "1.14.10" +version = "1.14.11" dependencies = [ "assert_matches", "bincode", @@ -5014,15 +5014,15 @@ dependencies = [ "solana-account-decoder", "solana-bpf-loader-program", "solana-entry", - "solana-frozen-abi 1.14.10", - "solana-frozen-abi-macro 1.14.10", + "solana-frozen-abi 1.14.11", + "solana-frozen-abi-macro 1.14.11", "solana-measure", "solana-metrics", "solana-perf", "solana-program-runtime", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.14.10", + "solana-sdk 1.14.11", "solana-stake-program", "solana-storage-bigtable", "solana-storage-proto", @@ -5051,7 +5051,7 @@ dependencies = [ [[package]] name = "solana-logger" -version = "1.14.10" +version = "1.14.11" dependencies = [ "env_logger", "lazy_static", @@ -5060,36 +5060,36 @@ dependencies = [ [[package]] name = "solana-measure" -version = "1.14.10" +version = "1.14.11" dependencies = [ "log", - "solana-sdk 1.14.10", + "solana-sdk 1.14.11", ] [[package]] name = "solana-merkle-tree" -version = "1.14.10" +version = "1.14.11" dependencies = [ "fast-math", "matches", - "solana-program 1.14.10", + "solana-program 1.14.11", ] [[package]] name = "solana-metrics" -version = "1.14.10" +version = "1.14.11" dependencies = [ "crossbeam-channel", "gethostname", "lazy_static", "log", "reqwest", - "solana-sdk 1.14.10", + "solana-sdk 1.14.11", ] [[package]] name = "solana-net-utils" -version = "1.14.10" +version = "1.14.11" dependencies = [ "bincode", "clap 3.1.6", @@ -5100,8 +5100,8 @@ dependencies = [ "serde", "serde_derive", "socket2", - "solana-logger 1.14.10", - "solana-sdk 1.14.10", + "solana-logger 1.14.11", + "solana-sdk 1.14.11", "solana-version", "tokio", "url 2.2.2", @@ -5109,7 +5109,7 @@ dependencies = [ [[package]] name = "solana-perf" -version = "1.14.10" +version = "1.14.11" dependencies = [ "ahash", "bincode", @@ -5128,13 +5128,13 @@ dependencies = [ "serde", "solana-metrics", "solana-rayon-threadlimit", - "solana-sdk 1.14.10", + "solana-sdk 1.14.11", "solana-vote-program", ] [[package]] name = "solana-poh" -version = "1.14.10" +version = "1.14.11" dependencies = [ "core_affinity", "crossbeam-channel", @@ -5144,7 +5144,7 @@ dependencies = [ "solana-measure", "solana-metrics", "solana-runtime", - "solana-sdk 1.14.10", + "solana-sdk 1.14.11", "solana-sys-tuner", "thiserror", ] @@ -5200,7 +5200,7 @@ dependencies = [ [[package]] name = "solana-program" -version = "1.14.10" +version = "1.14.11" dependencies = [ "base64 0.13.0", "bincode", @@ -5236,9 +5236,9 @@ dependencies = [ "serde_json", "sha2 0.10.2", "sha3 0.10.1", - "solana-frozen-abi 1.14.10", - "solana-frozen-abi-macro 1.14.10", - "solana-sdk-macro 1.14.10", + "solana-frozen-abi 1.14.11", + "solana-frozen-abi-macro 1.14.11", + "solana-sdk-macro 1.14.11", "thiserror", "tiny-bip39", "wasm-bindgen", @@ -5247,7 +5247,7 @@ dependencies = [ [[package]] name = "solana-program-runtime" -version = "1.14.10" +version = "1.14.11" dependencies = [ "base64 0.13.0", "bincode", @@ -5262,17 +5262,17 @@ dependencies = [ "rand 0.7.3", "rustc_version", "serde", - "solana-frozen-abi 1.14.10", - "solana-frozen-abi-macro 1.14.10", + "solana-frozen-abi 1.14.11", + "solana-frozen-abi-macro 1.14.11", "solana-measure", "solana-metrics", - "solana-sdk 1.14.10", + "solana-sdk 1.14.11", "thiserror", ] [[package]] name = "solana-program-test" -version = "1.14.10" +version = "1.14.11" dependencies = [ "assert_matches", "async-trait", @@ -5284,10 +5284,10 @@ dependencies = [ "solana-banks-client", "solana-banks-server", "solana-bpf-loader-program", - "solana-logger 1.14.10", + "solana-logger 1.14.11", "solana-program-runtime", "solana-runtime", - "solana-sdk 1.14.10", + "solana-sdk 1.14.11", "solana-vote-program", "thiserror", "tokio", @@ -5295,7 +5295,7 @@ dependencies = [ [[package]] name = "solana-rayon-threadlimit" -version = "1.14.10" +version = "1.14.11" dependencies = [ "lazy_static", "num_cpus", @@ -5303,7 +5303,7 @@ dependencies = [ [[package]] name = "solana-remote-wallet" -version = "1.14.10" +version = "1.14.11" dependencies = [ "console", "dialoguer", @@ -5313,14 +5313,14 @@ dependencies = [ "parking_lot 0.12.1", "qstring", "semver", - "solana-sdk 1.14.10", + "solana-sdk 1.14.11", "thiserror", "uriparse", ] [[package]] name = "solana-rpc" -version = "1.14.10" +version = "1.14.11" dependencies = [ "base64 0.13.0", "bincode", @@ -5353,7 +5353,7 @@ dependencies = [ "solana-poh", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.14.10", + "solana-sdk 1.14.11", "solana-send-transaction-service", "solana-stake-program", "solana-storage-bigtable", @@ -5371,7 +5371,7 @@ dependencies = [ [[package]] name = "solana-runtime" -version = "1.14.10" +version = "1.14.11" dependencies = [ "arrayref", "bincode", @@ -5407,17 +5407,17 @@ dependencies = [ "solana-bucket-map", "solana-compute-budget-program", "solana-config-program", - "solana-frozen-abi 1.14.10", - "solana-frozen-abi-macro 1.14.10", + "solana-frozen-abi 1.14.11", + "solana-frozen-abi-macro 1.14.11", "solana-measure", "solana-metrics", "solana-program-runtime", "solana-rayon-threadlimit", - "solana-sdk 1.14.10", + "solana-sdk 1.14.11", "solana-stake-program", "solana-vote-program", "solana-zk-token-proof-program", - "solana-zk-token-sdk 1.14.10", + "solana-zk-token-sdk 1.14.11", "strum", "strum_macros", "symlink", @@ -5480,7 +5480,7 @@ dependencies = [ [[package]] name = "solana-sdk" -version = "1.14.10" +version = "1.14.11" dependencies = [ "assert_matches", "base64 0.13.0", @@ -5517,11 +5517,11 @@ dependencies = [ "serde_json", "sha2 0.10.2", "sha3 0.10.1", - "solana-frozen-abi 1.14.10", - "solana-frozen-abi-macro 1.14.10", - "solana-logger 1.14.10", - "solana-program 1.14.10", - "solana-sdk-macro 1.14.10", + "solana-frozen-abi 1.14.11", + "solana-frozen-abi-macro 1.14.11", + "solana-logger 1.14.11", + "solana-program 1.14.11", + "solana-sdk-macro 1.14.11", "thiserror", "uriparse", "wasm-bindgen", @@ -5542,7 +5542,7 @@ dependencies = [ [[package]] name = "solana-sdk-macro" -version = "1.14.10" +version = "1.14.11" dependencies = [ "bs58", "proc-macro2 1.0.41", @@ -5553,7 +5553,7 @@ dependencies = [ [[package]] name = "solana-send-transaction-service" -version = "1.14.10" +version = "1.14.11" dependencies = [ "crossbeam-channel", "log", @@ -5561,12 +5561,12 @@ dependencies = [ "solana-measure", "solana-metrics", "solana-runtime", - "solana-sdk 1.14.10", + "solana-sdk 1.14.11", ] [[package]] name = "solana-stake-program" -version = "1.14.10" +version = "1.14.11" dependencies = [ "bincode", "log", @@ -5576,18 +5576,18 @@ dependencies = [ "serde", "serde_derive", "solana-config-program", - "solana-frozen-abi 1.14.10", - "solana-frozen-abi-macro 1.14.10", + "solana-frozen-abi 1.14.11", + "solana-frozen-abi-macro 1.14.11", "solana-metrics", "solana-program-runtime", - "solana-sdk 1.14.10", + "solana-sdk 1.14.11", "solana-vote-program", "thiserror", ] [[package]] name = "solana-storage-bigtable" -version = "1.14.10" +version = "1.14.11" dependencies = [ "backoff", "bincode", @@ -5608,7 +5608,7 @@ dependencies = [ "serde_derive", "smpl_jwt", "solana-metrics", - "solana-sdk 1.14.10", + "solana-sdk 1.14.11", "solana-storage-proto", "solana-transaction-status", "thiserror", @@ -5619,7 +5619,7 @@ dependencies = [ [[package]] name = "solana-storage-proto" -version = "1.14.10" +version = "1.14.11" dependencies = [ "bincode", "bs58", @@ -5627,14 +5627,14 @@ dependencies = [ "protobuf-src", "serde", "solana-account-decoder", - "solana-sdk 1.14.10", + "solana-sdk 1.14.11", "solana-transaction-status", "tonic-build 0.8.0", ] [[package]] name = "solana-streamer" -version = "1.14.10" +version = "1.14.11" dependencies = [ "crossbeam-channel", "futures-util", @@ -5653,7 +5653,7 @@ dependencies = [ "rustls 0.20.6", "solana-metrics", "solana-perf", - "solana-sdk 1.14.10", + "solana-sdk 1.14.11", "thiserror", "tokio", "x509-parser", @@ -5661,13 +5661,13 @@ dependencies = [ [[package]] name = "solana-sys-tuner" -version = "1.14.10" +version = "1.14.11" dependencies = [ "clap 2.33.3", "libc", "log", "nix", - "solana-logger 1.14.10", + "solana-logger 1.14.11", "solana-version", "sysctl", "unix_socket2", @@ -5676,7 +5676,7 @@ dependencies = [ [[package]] name = "solana-test-validator" -version = "1.14.10" +version = "1.14.11" dependencies = [ "base64 0.13.0", "log", @@ -5687,20 +5687,20 @@ dependencies = [ "solana-core", "solana-gossip", "solana-ledger", - "solana-logger 1.14.10", + "solana-logger 1.14.11", "solana-net-utils", "solana-program-runtime", "solana-program-test", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.10", + "solana-sdk 1.14.11", "solana-streamer", "tokio", ] [[package]] name = "solana-transaction-status" -version = "1.14.10" +version = "1.14.11" dependencies = [ "Inflector", "base64 0.13.0", @@ -5716,7 +5716,7 @@ dependencies = [ "solana-address-lookup-table-program", "solana-measure", "solana-metrics", - "solana-sdk 1.14.10", + "solana-sdk 1.14.11", "solana-vote-program", "spl-associated-token-account", "spl-memo", @@ -5727,7 +5727,7 @@ dependencies = [ [[package]] name = "solana-validator" -version = "1.14.10" +version = "1.14.11" dependencies = [ "chrono", "clap 2.33.3", @@ -5758,14 +5758,14 @@ dependencies = [ "solana-genesis-utils", "solana-gossip", "solana-ledger", - "solana-logger 1.14.10", + "solana-logger 1.14.11", "solana-metrics", "solana-net-utils", "solana-perf", "solana-poh", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.10", + "solana-sdk 1.14.11", "solana-send-transaction-service", "solana-storage-bigtable", "solana-streamer", @@ -5778,21 +5778,21 @@ dependencies = [ [[package]] name = "solana-version" -version = "1.14.10" +version = "1.14.11" dependencies = [ "log", "rustc_version", "semver", "serde", "serde_derive", - "solana-frozen-abi 1.14.10", - "solana-frozen-abi-macro 1.14.10", - "solana-sdk 1.14.10", + "solana-frozen-abi 1.14.11", + "solana-frozen-abi-macro 1.14.11", + "solana-sdk 1.14.11", ] [[package]] name = "solana-vote-program" -version = "1.14.10" +version = "1.14.11" dependencies = [ "bincode", "log", @@ -5801,25 +5801,25 @@ dependencies = [ "rustc_version", "serde", "serde_derive", - "solana-frozen-abi 1.14.10", - "solana-frozen-abi-macro 1.14.10", + "solana-frozen-abi 1.14.11", + "solana-frozen-abi-macro 1.14.11", "solana-metrics", "solana-program-runtime", - "solana-sdk 1.14.10", + "solana-sdk 1.14.11", "thiserror", ] [[package]] name = "solana-zk-token-proof-program" -version = "1.14.10" +version = "1.14.11" dependencies = [ "bytemuck", "getrandom 0.1.14", "num-derive", "num-traits", "solana-program-runtime", - "solana-sdk 1.14.10", - "solana-zk-token-sdk 1.14.10", + "solana-sdk 1.14.11", + "solana-zk-token-sdk 1.14.11", ] [[package]] @@ -5855,7 +5855,7 @@ dependencies = [ [[package]] name = "solana-zk-token-sdk" -version = "1.14.10" +version = "1.14.11" dependencies = [ "aes-gcm-siv", "arrayref", @@ -5875,8 +5875,8 @@ dependencies = [ "serde", "serde_json", "sha3 0.9.1", - "solana-program 1.14.10", - "solana-sdk 1.14.10", + "solana-program 1.14.11", + "solana-sdk 1.14.11", "subtle", "thiserror", "zeroize", diff --git a/programs/bpf/Cargo.toml b/programs/bpf/Cargo.toml index 7af6e12b6aece4..f9c35e8a34b90e 100644 --- a/programs/bpf/Cargo.toml +++ b/programs/bpf/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "solana-bpf-programs" description = "Blockchain, Rebuilt for Scale" -version = "1.14.10" +version = "1.14.11" documentation = "https://docs.rs/solana" homepage = "https://solana.com/" readme = "README.md" @@ -26,22 +26,22 @@ itertools = "0.10.1" log = "0.4.11" miow = "0.3.6" net2 = "0.2.37" -solana-account-decoder = { path = "../../account-decoder", version = "=1.14.10" } -solana-bpf-loader-program = { path = "../bpf_loader", version = "=1.14.10" } -solana-bpf-rust-invoke = { path = "rust/invoke", version = "=1.14.10" } -solana-bpf-rust-realloc = { path = "rust/realloc", version = "=1.14.10" } -solana-bpf-rust-realloc-invoke = { path = "rust/realloc_invoke", version = "=1.14.10" } -solana-cli-output = { path = "../../cli-output", version = "=1.14.10" } -solana-logger = { path = "../../logger", version = "=1.14.10" } -solana-measure = { path = "../../measure", version = "=1.14.10" } -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.10" } -solana-runtime = { path = "../../runtime", version = "=1.14.10" } -solana-sdk = { path = "../../sdk", version = "=1.14.10" } -solana-transaction-status = { path = "../../transaction-status", version = "=1.14.10" } +solana-account-decoder = { path = "../../account-decoder", version = "=1.14.11" } +solana-bpf-loader-program = { path = "../bpf_loader", version = "=1.14.11" } +solana-bpf-rust-invoke = { path = "rust/invoke", version = "=1.14.11" } +solana-bpf-rust-realloc = { path = "rust/realloc", version = "=1.14.11" } +solana-bpf-rust-realloc-invoke = { path = "rust/realloc_invoke", version = "=1.14.11" } +solana-cli-output = { path = "../../cli-output", version = "=1.14.11" } +solana-logger = { path = "../../logger", version = "=1.14.11" } +solana-measure = { path = "../../measure", version = "=1.14.11" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.11" } +solana-runtime = { path = "../../runtime", version = "=1.14.11" } +solana-sdk = { path = "../../sdk", version = "=1.14.11" } +solana-transaction-status = { path = "../../transaction-status", version = "=1.14.11" } solana_rbpf = "=0.2.31" [dev-dependencies] -solana-ledger = { path = "../../ledger", version = "=1.14.10" } +solana-ledger = { path = "../../ledger", version = "=1.14.11" } [[bench]] name = "bpf_loader" diff --git a/programs/bpf/rust/128bit/Cargo.toml b/programs/bpf/rust/128bit/Cargo.toml index 3aa0b89103ede3..fd3f48ef0261cd 100644 --- a/programs/bpf/rust/128bit/Cargo.toml +++ b/programs/bpf/rust/128bit/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-128bit" -version = "1.14.10" +version = "1.14.11" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ documentation = "https://docs.rs/solana-bpf-rust-128bit" edition = "2021" [dependencies] -solana-bpf-rust-128bit-dep = { path = "../128bit_dep", version = "=1.14.10" } -solana-program = { path = "../../../../sdk/program", version = "=1.14.10" } +solana-bpf-rust-128bit-dep = { path = "../128bit_dep", version = "=1.14.11" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.11" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/128bit_dep/Cargo.toml b/programs/bpf/rust/128bit_dep/Cargo.toml index 59d7fad76e0ad6..7fcc935a4508a8 100644 --- a/programs/bpf/rust/128bit_dep/Cargo.toml +++ b/programs/bpf/rust/128bit_dep/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-128bit-dep" -version = "1.14.10" +version = "1.14.11" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-128bit-dep" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.10" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.11" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/bpf/rust/alloc/Cargo.toml b/programs/bpf/rust/alloc/Cargo.toml index acc055cf7890eb..7acfe60b404bd7 100644 --- a/programs/bpf/rust/alloc/Cargo.toml +++ b/programs/bpf/rust/alloc/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-alloc" -version = "1.14.10" +version = "1.14.11" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-alloc" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.10" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.11" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/call_depth/Cargo.toml b/programs/bpf/rust/call_depth/Cargo.toml index e8a7b9086d69b7..a2e3161d1b44ae 100644 --- a/programs/bpf/rust/call_depth/Cargo.toml +++ b/programs/bpf/rust/call_depth/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-call-depth" -version = "1.14.10" +version = "1.14.11" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-call-depth" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.10" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.11" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/caller_access/Cargo.toml b/programs/bpf/rust/caller_access/Cargo.toml index 78bdd47c2f0109..cef60efb303385 100644 --- a/programs/bpf/rust/caller_access/Cargo.toml +++ b/programs/bpf/rust/caller_access/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-caller-access" -version = "1.14.10" +version = "1.14.11" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-caller-access" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.10" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.11" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/curve25519/Cargo.toml b/programs/bpf/rust/curve25519/Cargo.toml index 38f6885c188758..4e4a6fc5d9edaa 100644 --- a/programs/bpf/rust/curve25519/Cargo.toml +++ b/programs/bpf/rust/curve25519/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-curve25519" -version = "1.14.10" +version = "1.14.11" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ documentation = "https://docs.rs/solana-bpf-rust-zktoken_crypto" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.10" } -solana-zk-token-sdk = { path = "../../../../zk-token-sdk", version = "=1.14.10" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.11" } +solana-zk-token-sdk = { path = "../../../../zk-token-sdk", version = "=1.14.11" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/custom_heap/Cargo.toml b/programs/bpf/rust/custom_heap/Cargo.toml index 90433f2897148e..e85e5e2c9827ce 100644 --- a/programs/bpf/rust/custom_heap/Cargo.toml +++ b/programs/bpf/rust/custom_heap/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-custom-heap" -version = "1.14.10" +version = "1.14.11" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-custom-heap" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.10" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.11" } [features] default = ["custom-heap"] diff --git a/programs/bpf/rust/dep_crate/Cargo.toml b/programs/bpf/rust/dep_crate/Cargo.toml index 41413316fb5e1c..2a16d2af0bfa85 100644 --- a/programs/bpf/rust/dep_crate/Cargo.toml +++ b/programs/bpf/rust/dep_crate/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-dep-crate" -version = "1.14.10" +version = "1.14.11" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,8 +12,8 @@ edition = "2021" [dependencies] byteorder = { version = "1", default-features = false } # list of crates which must be buildable for bpf programs -solana-address-lookup-table-program = { path = "../../../../programs/address-lookup-table", version = "=1.14.10" } -solana-program = { path = "../../../../sdk/program", version = "=1.14.10" } +solana-address-lookup-table-program = { path = "../../../../programs/address-lookup-table", version = "=1.14.11" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.11" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/deprecated_loader/Cargo.toml b/programs/bpf/rust/deprecated_loader/Cargo.toml index 19d654a6779f63..c08dd7d02c1aba 100644 --- a/programs/bpf/rust/deprecated_loader/Cargo.toml +++ b/programs/bpf/rust/deprecated_loader/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-deprecated-loader" -version = "1.14.10" +version = "1.14.11" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-deprecated-loader" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.10" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.11" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/dup_accounts/Cargo.toml b/programs/bpf/rust/dup_accounts/Cargo.toml index a392836470a8a1..6e6ea193a6b14b 100644 --- a/programs/bpf/rust/dup_accounts/Cargo.toml +++ b/programs/bpf/rust/dup_accounts/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-dup-accounts" -version = "1.14.10" +version = "1.14.11" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-dup-accounts" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.10" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.11" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/error_handling/Cargo.toml b/programs/bpf/rust/error_handling/Cargo.toml index 10326e612fd359..c841a333894082 100644 --- a/programs/bpf/rust/error_handling/Cargo.toml +++ b/programs/bpf/rust/error_handling/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-error-handling" -version = "1.14.10" +version = "1.14.11" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,7 +12,7 @@ edition = "2021" [dependencies] num-derive = "0.3" num-traits = "0.2" -solana-program = { path = "../../../../sdk/program", version = "=1.14.10" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.11" } thiserror = "1.0" [lib] diff --git a/programs/bpf/rust/external_spend/Cargo.toml b/programs/bpf/rust/external_spend/Cargo.toml index 679181ea5be35d..d446a3e384c105 100644 --- a/programs/bpf/rust/external_spend/Cargo.toml +++ b/programs/bpf/rust/external_spend/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-external-spend" -version = "1.14.10" +version = "1.14.11" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-external-spend" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.10" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.11" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/finalize/Cargo.toml b/programs/bpf/rust/finalize/Cargo.toml index 8a29ddde33924d..27ad802f3b5320 100644 --- a/programs/bpf/rust/finalize/Cargo.toml +++ b/programs/bpf/rust/finalize/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-finalize" -version = "1.14.10" +version = "1.14.11" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-finalize" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.10" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.11" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/get_minimum_delegation/Cargo.toml b/programs/bpf/rust/get_minimum_delegation/Cargo.toml index 59cc4078ec5a1a..8db9cabc5d0913 100644 --- a/programs/bpf/rust/get_minimum_delegation/Cargo.toml +++ b/programs/bpf/rust/get_minimum_delegation/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-get-minimum-delegation" -version = "1.14.10" +version = "1.14.11" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-get-minimum-delegation" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.10" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.11" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/inner_instruction_alignment_check/Cargo.toml b/programs/bpf/rust/inner_instruction_alignment_check/Cargo.toml index c463ec7a56d3f1..574753deeb334e 100644 --- a/programs/bpf/rust/inner_instruction_alignment_check/Cargo.toml +++ b/programs/bpf/rust/inner_instruction_alignment_check/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-inner_instruction_alignment_check" -version = "1.14.10" +version = "1.14.11" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-inner_instruction_alignment_che edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.10" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.11" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/instruction_introspection/Cargo.toml b/programs/bpf/rust/instruction_introspection/Cargo.toml index e704c43bf6397a..5537504c23ddb3 100644 --- a/programs/bpf/rust/instruction_introspection/Cargo.toml +++ b/programs/bpf/rust/instruction_introspection/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-instruction-introspection" -version = "1.14.10" +version = "1.14.11" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-instruction-introspection" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.10" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.11" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/invoke/Cargo.toml b/programs/bpf/rust/invoke/Cargo.toml index 596475357410d5..b7d30748894a51 100644 --- a/programs/bpf/rust/invoke/Cargo.toml +++ b/programs/bpf/rust/invoke/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-invoke" -version = "1.14.10" +version = "1.14.11" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -15,7 +15,7 @@ program = [] [dependencies] solana-bpf-rust-invoked = { path = "../invoked", default-features = false } -solana-program = { path = "../../../../sdk/program", version = "=1.14.10" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.11" } [lib] crate-type = ["lib", "cdylib"] diff --git a/programs/bpf/rust/invoke_and_error/Cargo.toml b/programs/bpf/rust/invoke_and_error/Cargo.toml index fc08a1d93a22a8..7529dac50a8e69 100644 --- a/programs/bpf/rust/invoke_and_error/Cargo.toml +++ b/programs/bpf/rust/invoke_and_error/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-invoke-and-error" -version = "1.14.10" +version = "1.14.11" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-invoke-and-error" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.10" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.11" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/invoke_and_ok/Cargo.toml b/programs/bpf/rust/invoke_and_ok/Cargo.toml index a941decc18b515..37b9090843264e 100644 --- a/programs/bpf/rust/invoke_and_ok/Cargo.toml +++ b/programs/bpf/rust/invoke_and_ok/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-invoke-and-ok" -version = "1.14.10" +version = "1.14.11" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-invoke-and-ok" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.10" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.11" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/invoke_and_return/Cargo.toml b/programs/bpf/rust/invoke_and_return/Cargo.toml index adc50088b44339..077f5c980c978d 100644 --- a/programs/bpf/rust/invoke_and_return/Cargo.toml +++ b/programs/bpf/rust/invoke_and_return/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-invoke-and-return" -version = "1.14.10" +version = "1.14.11" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-invoke-and-return" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.10" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.11" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/invoked/Cargo.toml b/programs/bpf/rust/invoked/Cargo.toml index db53d298fe2903..dcb6b391eb8b85 100644 --- a/programs/bpf/rust/invoked/Cargo.toml +++ b/programs/bpf/rust/invoked/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-invoked" -version = "1.14.10" +version = "1.14.11" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,7 +14,7 @@ default = ["program"] program = [] [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.10" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.11" } [lib] crate-type = ["lib", "cdylib"] diff --git a/programs/bpf/rust/iter/Cargo.toml b/programs/bpf/rust/iter/Cargo.toml index 7895da85a891e3..3ffd70d81b7edb 100644 --- a/programs/bpf/rust/iter/Cargo.toml +++ b/programs/bpf/rust/iter/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-iter" -version = "1.14.10" +version = "1.14.11" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-iter" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.10" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.11" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/log_data/Cargo.toml b/programs/bpf/rust/log_data/Cargo.toml index c7073017441bed..b8ddedde49b867 100644 --- a/programs/bpf/rust/log_data/Cargo.toml +++ b/programs/bpf/rust/log_data/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-log-data" -version = "1.14.10" +version = "1.14.11" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-log-data" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.10" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.11" } [features] default = ["program"] diff --git a/programs/bpf/rust/many_args/Cargo.toml b/programs/bpf/rust/many_args/Cargo.toml index 293c19eeb8b73e..8d992057fb29e8 100644 --- a/programs/bpf/rust/many_args/Cargo.toml +++ b/programs/bpf/rust/many_args/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-many-args" -version = "1.14.10" +version = "1.14.11" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ documentation = "https://docs.rs/solana-bpf-rust-many-args" edition = "2021" [dependencies] -solana-bpf-rust-many-args-dep = { path = "../many_args_dep", version = "=1.14.10" } -solana-program = { path = "../../../../sdk/program", version = "=1.14.10" } +solana-bpf-rust-many-args-dep = { path = "../many_args_dep", version = "=1.14.11" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.11" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/many_args_dep/Cargo.toml b/programs/bpf/rust/many_args_dep/Cargo.toml index 60edbf4ef60263..fbfb12101c58a9 100644 --- a/programs/bpf/rust/many_args_dep/Cargo.toml +++ b/programs/bpf/rust/many_args_dep/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-many-args-dep" -version = "1.14.10" +version = "1.14.11" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-many-args-dep" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.10" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.11" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/bpf/rust/mem/Cargo.toml b/programs/bpf/rust/mem/Cargo.toml index eed1ead3272833..3fadf007146fe0 100644 --- a/programs/bpf/rust/mem/Cargo.toml +++ b/programs/bpf/rust/mem/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-mem" -version = "1.14.10" +version = "1.14.11" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,12 +13,12 @@ edition = "2021" no-entrypoint = [] [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.10" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.11" } [dev-dependencies] -solana-program-runtime = { path = "../../../../program-runtime", version = "=1.14.10" } -solana-program-test = { path = "../../../../program-test", version = "=1.14.10" } -solana-sdk = { path = "../../../../sdk", version = "=1.14.10" } +solana-program-runtime = { path = "../../../../program-runtime", version = "=1.14.11" } +solana-program-test = { path = "../../../../program-test", version = "=1.14.11" } +solana-sdk = { path = "../../../../sdk", version = "=1.14.11" } [lib] crate-type = ["cdylib", "lib"] diff --git a/programs/bpf/rust/membuiltins/Cargo.toml b/programs/bpf/rust/membuiltins/Cargo.toml index c9b469bd3be130..e5fda1789364f0 100644 --- a/programs/bpf/rust/membuiltins/Cargo.toml +++ b/programs/bpf/rust/membuiltins/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-membuiltins" -version = "1.14.10" +version = "1.14.11" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ documentation = "https://docs.rs/solana-bpf-rust-mem" edition = "2021" [dependencies] -solana-bpf-rust-mem = { path = "../mem", version = "=1.14.10", features = [ "no-entrypoint" ] } -solana-program = { path = "../../../../sdk/program", version = "=1.14.10" } +solana-bpf-rust-mem = { path = "../mem", version = "=1.14.11", features = [ "no-entrypoint" ] } +solana-program = { path = "../../../../sdk/program", version = "=1.14.11" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/noop/Cargo.toml b/programs/bpf/rust/noop/Cargo.toml index cb0f8224b36415..bbf5f8a4d9cbef 100644 --- a/programs/bpf/rust/noop/Cargo.toml +++ b/programs/bpf/rust/noop/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-noop" -version = "1.14.10" +version = "1.14.11" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-noop" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.10" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.11" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/panic/Cargo.toml b/programs/bpf/rust/panic/Cargo.toml index 6de10e4d83ad69..93d5630a5c8f27 100644 --- a/programs/bpf/rust/panic/Cargo.toml +++ b/programs/bpf/rust/panic/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-panic" -version = "1.14.10" +version = "1.14.11" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-panic" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.10" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.11" } [features] default = ["custom-panic"] diff --git a/programs/bpf/rust/param_passing/Cargo.toml b/programs/bpf/rust/param_passing/Cargo.toml index 4a252e155fe1db..5f60fa9df46ea0 100644 --- a/programs/bpf/rust/param_passing/Cargo.toml +++ b/programs/bpf/rust/param_passing/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-param-passing" -version = "1.14.10" +version = "1.14.11" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ documentation = "https://docs.rs/solana-bpf-rust-param-passing" edition = "2021" [dependencies] -solana-bpf-rust-param-passing-dep = { path = "../param_passing_dep", version = "=1.14.10" } -solana-program = { path = "../../../../sdk/program", version = "=1.14.10" } +solana-bpf-rust-param-passing-dep = { path = "../param_passing_dep", version = "=1.14.11" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.11" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/param_passing_dep/Cargo.toml b/programs/bpf/rust/param_passing_dep/Cargo.toml index 7f8d109efa51f1..02d956785e1f95 100644 --- a/programs/bpf/rust/param_passing_dep/Cargo.toml +++ b/programs/bpf/rust/param_passing_dep/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-param-passing-dep" -version = "1.14.10" +version = "1.14.11" description = "Solana BPF program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-param-passing-dep" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.10" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.11" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/bpf/rust/rand/Cargo.toml b/programs/bpf/rust/rand/Cargo.toml index 6be38a93429702..6cdc2b47221840 100644 --- a/programs/bpf/rust/rand/Cargo.toml +++ b/programs/bpf/rust/rand/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-rand" -version = "1.14.10" +version = "1.14.11" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,7 +12,7 @@ edition = "2021" [dependencies] getrandom = { version = "0.1.14", features = ["dummy"] } rand = "0.7" -solana-program = { path = "../../../../sdk/program", version = "=1.14.10" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.11" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/realloc/Cargo.toml b/programs/bpf/rust/realloc/Cargo.toml index 1c9b4ce7083fd1..7879bab580b9db 100644 --- a/programs/bpf/rust/realloc/Cargo.toml +++ b/programs/bpf/rust/realloc/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-realloc" -version = "1.14.10" +version = "1.14.11" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,7 +14,7 @@ default = ["program"] program = [] [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.10" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.11" } [lib] crate-type = ["lib", "cdylib"] diff --git a/programs/bpf/rust/realloc_invoke/Cargo.toml b/programs/bpf/rust/realloc_invoke/Cargo.toml index b4ecadc794b8f4..f8b4e317492098 100644 --- a/programs/bpf/rust/realloc_invoke/Cargo.toml +++ b/programs/bpf/rust/realloc_invoke/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-realloc-invoke" -version = "1.14.10" +version = "1.14.11" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,8 +14,8 @@ default = ["program"] program = [] [dependencies] -solana-bpf-rust-realloc = { path = "../realloc", version = "=1.14.10", default-features = false } -solana-program = { path = "../../../../sdk/program", version = "=1.14.10" } +solana-bpf-rust-realloc = { path = "../realloc", version = "=1.14.11", default-features = false } +solana-program = { path = "../../../../sdk/program", version = "=1.14.11" } [lib] crate-type = ["lib", "cdylib"] diff --git a/programs/bpf/rust/ro_account_modify/Cargo.toml b/programs/bpf/rust/ro_account_modify/Cargo.toml index 165d174095a67c..86c1958f4d4a5d 100644 --- a/programs/bpf/rust/ro_account_modify/Cargo.toml +++ b/programs/bpf/rust/ro_account_modify/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-ro-account_modify" -version = "1.14.10" +version = "1.14.11" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-ro-modify" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.10" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.11" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/ro_modify/Cargo.toml b/programs/bpf/rust/ro_modify/Cargo.toml index 405f7610152aae..3c1e2ec598fe6a 100644 --- a/programs/bpf/rust/ro_modify/Cargo.toml +++ b/programs/bpf/rust/ro_modify/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-ro-modify" -version = "1.14.10" +version = "1.14.11" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-ro-modify" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.10" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.11" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/sanity/Cargo.toml b/programs/bpf/rust/sanity/Cargo.toml index 27683d79384541..e3b1c369c3461d 100644 --- a/programs/bpf/rust/sanity/Cargo.toml +++ b/programs/bpf/rust/sanity/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-sanity" -version = "1.14.10" +version = "1.14.11" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,12 +13,12 @@ edition = "2021" test-bpf = [] [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.10" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.11" } [dev-dependencies] -solana-program-runtime = { path = "../../../../program-runtime", version = "=1.14.10" } -solana-program-test = { path = "../../../../program-test", version = "=1.14.10" } -solana-sdk = { path = "../../../../sdk", version = "=1.14.10" } +solana-program-runtime = { path = "../../../../program-runtime", version = "=1.14.11" } +solana-program-test = { path = "../../../../program-test", version = "=1.14.11" } +solana-sdk = { path = "../../../../sdk", version = "=1.14.11" } [lib] crate-type = ["cdylib", "lib"] diff --git a/programs/bpf/rust/secp256k1_recover/Cargo.toml b/programs/bpf/rust/secp256k1_recover/Cargo.toml index 5d6657e518cae7..4019da2f30dfcd 100644 --- a/programs/bpf/rust/secp256k1_recover/Cargo.toml +++ b/programs/bpf/rust/secp256k1_recover/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-secp256k1-recover" -version = "1.14.10" +version = "1.14.11" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -11,7 +11,7 @@ edition = "2021" [dependencies] libsecp256k1 = { version = "0.7.0", default-features = false } -solana-program = { path = "../../../../sdk/program", version = "=1.14.10" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.11" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/sha/Cargo.toml b/programs/bpf/rust/sha/Cargo.toml index 0931c564019a65..50069fb372e807 100644 --- a/programs/bpf/rust/sha/Cargo.toml +++ b/programs/bpf/rust/sha/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-sha" -version = "1.14.10" +version = "1.14.11" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -11,7 +11,7 @@ edition = "2021" [dependencies] blake3 = "1.0.0" -solana-program = { path = "../../../../sdk/program", version = "=1.14.10" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.11" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/sibling_inner_instruction/Cargo.toml b/programs/bpf/rust/sibling_inner_instruction/Cargo.toml index fcb52aece5d59f..a2b2471392d90d 100644 --- a/programs/bpf/rust/sibling_inner_instruction/Cargo.toml +++ b/programs/bpf/rust/sibling_inner_instruction/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-sibling_inner-instructions" -version = "1.14.10" +version = "1.14.11" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-log-data" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.10" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.11" } [features] default = ["program"] diff --git a/programs/bpf/rust/sibling_instruction/Cargo.toml b/programs/bpf/rust/sibling_instruction/Cargo.toml index 039d145d6f09a2..f35a3fa09e517f 100644 --- a/programs/bpf/rust/sibling_instruction/Cargo.toml +++ b/programs/bpf/rust/sibling_instruction/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-sibling-instructions" -version = "1.14.10" +version = "1.14.11" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-log-data" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.10" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.11" } [features] default = ["program"] diff --git a/programs/bpf/rust/simulation/Cargo.toml b/programs/bpf/rust/simulation/Cargo.toml index ea58a1616354e5..33834a34ae61ef 100644 --- a/programs/bpf/rust/simulation/Cargo.toml +++ b/programs/bpf/rust/simulation/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-simulation" -version = "1.14.10" +version = "1.14.11" description = "Solana BPF Program Simulation Differences" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,13 +13,13 @@ edition = "2021" test-bpf = [] [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.10" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.11" } [dev-dependencies] -solana-logger = { path = "../../../../logger", version = "=1.14.10" } -solana-program-test = { path = "../../../../program-test", version = "=1.14.10" } -solana-sdk = { path = "../../../../sdk", version = "=1.14.10" } -solana-validator = { path = "../../../../validator", version = "=1.14.10" } +solana-logger = { path = "../../../../logger", version = "=1.14.11" } +solana-program-test = { path = "../../../../program-test", version = "=1.14.11" } +solana-sdk = { path = "../../../../sdk", version = "=1.14.11" } +solana-validator = { path = "../../../../validator", version = "=1.14.11" } [lib] crate-type = ["cdylib", "lib"] diff --git a/programs/bpf/rust/spoof1/Cargo.toml b/programs/bpf/rust/spoof1/Cargo.toml index 5f286b9de03555..dec17c514d52b3 100644 --- a/programs/bpf/rust/spoof1/Cargo.toml +++ b/programs/bpf/rust/spoof1/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-spoof1" -version = "1.14.10" +version = "1.14.11" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-spoof1" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.10" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.11" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/spoof1_system/Cargo.toml b/programs/bpf/rust/spoof1_system/Cargo.toml index 2680106c76c343..473d65618ac696 100644 --- a/programs/bpf/rust/spoof1_system/Cargo.toml +++ b/programs/bpf/rust/spoof1_system/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-spoof1-system" -version = "1.14.10" +version = "1.14.11" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-spoof1-system" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.10" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.11" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/sysvar/Cargo.toml b/programs/bpf/rust/sysvar/Cargo.toml index 3465330103e554..5f17ad80017f19 100644 --- a/programs/bpf/rust/sysvar/Cargo.toml +++ b/programs/bpf/rust/sysvar/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-sysvar" -version = "1.14.10" +version = "1.14.11" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,12 +10,12 @@ documentation = "https://docs.rs/solana-bpf-rust-sysvar" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.10" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.11" } [dev-dependencies] -solana-program-runtime = { path = "../../../../program-runtime", version = "=1.14.10" } -solana-program-test = { path = "../../../../program-test", version = "=1.14.10" } -solana-sdk = { path = "../../../../sdk", version = "=1.14.10" } +solana-program-runtime = { path = "../../../../program-runtime", version = "=1.14.11" } +solana-program-test = { path = "../../../../program-test", version = "=1.14.11" } +solana-sdk = { path = "../../../../sdk", version = "=1.14.11" } [lib] crate-type = ["cdylib", "lib"] diff --git a/programs/bpf/rust/upgradeable/Cargo.toml b/programs/bpf/rust/upgradeable/Cargo.toml index 1d35e2df56b0b6..dd5ffd49b04069 100644 --- a/programs/bpf/rust/upgradeable/Cargo.toml +++ b/programs/bpf/rust/upgradeable/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-upgradeable" -version = "1.14.10" +version = "1.14.11" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-upgradeable" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.10" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.11" } [lib] name = "solana_bpf_rust_upgradeable" diff --git a/programs/bpf/rust/upgraded/Cargo.toml b/programs/bpf/rust/upgraded/Cargo.toml index a2b1c16895dd21..9a9091a6222a02 100644 --- a/programs/bpf/rust/upgraded/Cargo.toml +++ b/programs/bpf/rust/upgraded/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-upgraded" -version = "1.14.10" +version = "1.14.11" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-upgraded" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.10" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.11" } [lib] name = "solana_bpf_rust_upgraded" diff --git a/programs/bpf_loader/Cargo.toml b/programs/bpf_loader/Cargo.toml index 5060435985b2b9..83cbe0be0d0f60 100644 --- a/programs/bpf_loader/Cargo.toml +++ b/programs/bpf_loader/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-loader-program" -version = "1.14.10" +version = "1.14.11" description = "Solana BPF loader" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,17 +14,17 @@ bincode = "1.3.3" byteorder = "1.4.3" libsecp256k1 = "0.6.0" log = "0.4.17" -solana-measure = { path = "../../measure", version = "=1.14.10" } -solana-metrics = { path = "../../metrics", version = "=1.14.10" } -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.10" } -solana-sdk = { path = "../../sdk", version = "=1.14.10" } -solana-zk-token-sdk = { path = "../../zk-token-sdk", version = "=1.14.10" } +solana-measure = { path = "../../measure", version = "=1.14.11" } +solana-metrics = { path = "../../metrics", version = "=1.14.11" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.11" } +solana-sdk = { path = "../../sdk", version = "=1.14.11" } +solana-zk-token-sdk = { path = "../../zk-token-sdk", version = "=1.14.11" } solana_rbpf = "=0.2.31" thiserror = "1.0" [dev-dependencies] rand = "0.7.3" -solana-runtime = { path = "../../runtime", version = "=1.14.10" } +solana-runtime = { path = "../../runtime", version = "=1.14.11" } [lib] crate-type = ["lib"] diff --git a/programs/bpf_loader/gen-syscall-list/Cargo.toml b/programs/bpf_loader/gen-syscall-list/Cargo.toml index fc36242c9b8cb2..5553d8eb314ec1 100644 --- a/programs/bpf_loader/gen-syscall-list/Cargo.toml +++ b/programs/bpf_loader/gen-syscall-list/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "gen-syscall-list" -version = "1.14.10" +version = "1.14.11" edition = "2021" license = "Apache-2.0" publish = false diff --git a/programs/compute-budget/Cargo.toml b/programs/compute-budget/Cargo.toml index 7d76f8183122e1..03c1bd01f6f51f 100644 --- a/programs/compute-budget/Cargo.toml +++ b/programs/compute-budget/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "solana-compute-budget-program" description = "Solana Compute Budget program" -version = "1.14.10" +version = "1.14.11" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-compute-budget-program" repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ license = "Apache-2.0" edition = "2021" [dependencies] -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.10" } -solana-sdk = { path = "../../sdk", version = "=1.14.10" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.11" } +solana-sdk = { path = "../../sdk", version = "=1.14.11" } [lib] crate-type = ["lib"] diff --git a/programs/config/Cargo.toml b/programs/config/Cargo.toml index 42c220ceed1b2a..e81b16ccca4af0 100644 --- a/programs/config/Cargo.toml +++ b/programs/config/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-config-program" -version = "1.14.10" +version = "1.14.11" description = "Solana Config program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,11 +14,11 @@ bincode = "1.3.3" chrono = { version = "0.4.11", features = ["serde"] } serde = "1.0.138" serde_derive = "1.0.103" -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.10" } -solana-sdk = { path = "../../sdk", version = "=1.14.10" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.11" } +solana-sdk = { path = "../../sdk", version = "=1.14.11" } [dev-dependencies] -solana-logger = { path = "../../logger", version = "=1.14.10" } +solana-logger = { path = "../../logger", version = "=1.14.11" } [lib] crate-type = ["lib"] diff --git a/programs/ed25519-tests/Cargo.toml b/programs/ed25519-tests/Cargo.toml index bfbb2e5657409b..2c78119bece562 100644 --- a/programs/ed25519-tests/Cargo.toml +++ b/programs/ed25519-tests/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-ed25519-program-tests" -version = "1.14.10" +version = "1.14.11" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" @@ -12,8 +12,8 @@ publish = false assert_matches = "1.5.0" ed25519-dalek = "=1.0.1" rand = "0.7.0" -solana-program-test = { path = "../../program-test", version = "=1.14.10" } -solana-sdk = { path = "../../sdk", version = "=1.14.10" } +solana-program-test = { path = "../../program-test", version = "=1.14.11" } +solana-sdk = { path = "../../sdk", version = "=1.14.11" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/stake/Cargo.toml b/programs/stake/Cargo.toml index ba4d27090f40cd..28fbbfc5de02f3 100644 --- a/programs/stake/Cargo.toml +++ b/programs/stake/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-stake-program" -version = "1.14.10" +version = "1.14.11" description = "Solana Stake program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -16,19 +16,19 @@ num-derive = "0.3" num-traits = "0.2" serde = "1.0.138" serde_derive = "1.0.103" -solana-config-program = { path = "../config", version = "=1.14.10" } -solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.10" } -solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.10" } -solana-metrics = { path = "../../metrics", version = "=1.14.10" } -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.10" } -solana-sdk = { path = "../../sdk", version = "=1.14.10" } -solana-vote-program = { path = "../vote", version = "=1.14.10" } +solana-config-program = { path = "../config", version = "=1.14.11" } +solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.11" } +solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.11" } +solana-metrics = { path = "../../metrics", version = "=1.14.11" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.11" } +solana-sdk = { path = "../../sdk", version = "=1.14.11" } +solana-vote-program = { path = "../vote", version = "=1.14.11" } thiserror = "1.0" [dev-dependencies] assert_matches = "1.5.0" proptest = "1.0" -solana-logger = { path = "../../logger", version = "=1.14.10" } +solana-logger = { path = "../../logger", version = "=1.14.11" } test-case = "2.1.0" [build-dependencies] diff --git a/programs/vote/Cargo.toml b/programs/vote/Cargo.toml index 8b786ef494a865..36ad9615249bca 100644 --- a/programs/vote/Cargo.toml +++ b/programs/vote/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-vote-program" -version = "1.14.10" +version = "1.14.11" description = "Solana Vote program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -16,17 +16,17 @@ num-derive = "0.3" num-traits = "0.2" serde = "1.0.138" serde_derive = "1.0.103" -solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.10" } -solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.10" } -solana-metrics = { path = "../../metrics", version = "=1.14.10" } -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.10" } -solana-sdk = { path = "../../sdk", version = "=1.14.10" } +solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.11" } +solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.11" } +solana-metrics = { path = "../../metrics", version = "=1.14.11" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.11" } +solana-sdk = { path = "../../sdk", version = "=1.14.11" } thiserror = "1.0" [dev-dependencies] itertools = "0.10.3" rand = "0.7.0" -solana-logger = { path = "../../logger", version = "=1.14.10" } +solana-logger = { path = "../../logger", version = "=1.14.11" } [build-dependencies] rustc_version = "0.4" diff --git a/programs/zk-token-proof/Cargo.toml b/programs/zk-token-proof/Cargo.toml index 6a2ef683c06f9d..fe64ecc2986c1f 100644 --- a/programs/zk-token-proof/Cargo.toml +++ b/programs/zk-token-proof/Cargo.toml @@ -3,7 +3,7 @@ name = "solana-zk-token-proof-program" description = "Solana Zk Token Proof Program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" -version = "1.14.10" +version = "1.14.11" license = "Apache-2.0" edition = "2021" @@ -12,6 +12,6 @@ bytemuck = { version = "1.11.0", features = ["derive"] } getrandom = { version = "0.1", features = ["dummy"] } num-derive = "0.3" num-traits = "0.2" -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.10" } -solana-sdk = { path = "../../sdk", version = "=1.14.10" } -solana-zk-token-sdk = { path = "../../zk-token-sdk", version = "=1.14.10" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.11" } +solana-sdk = { path = "../../sdk", version = "=1.14.11" } +solana-zk-token-sdk = { path = "../../zk-token-sdk", version = "=1.14.11" } diff --git a/rayon-threadlimit/Cargo.toml b/rayon-threadlimit/Cargo.toml index 2e77b1f265aa20..c9a1874c46fa1b 100644 --- a/rayon-threadlimit/Cargo.toml +++ b/rayon-threadlimit/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-rayon-threadlimit" -version = "1.14.10" +version = "1.14.11" description = "solana-rayon-threadlimit" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-rayon-threadlimit" diff --git a/rbpf-cli/Cargo.toml b/rbpf-cli/Cargo.toml index 847248b7c5b6aa..c9afcdfe4ac68b 100644 --- a/rbpf-cli/Cargo.toml +++ b/rbpf-cli/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "rbpf-cli" -version = "1.14.10" +version = "1.14.11" description = "CLI to test and analyze eBPF programs" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/rbpf" @@ -13,8 +13,8 @@ publish = false clap = { version = "3.1.5", features = ["cargo"] } serde = "1.0.138" serde_json = "1.0.81" -solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.10" } -solana-logger = { path = "../logger", version = "=1.14.10" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.10" } -solana-sdk = { path = "../sdk", version = "=1.14.10" } +solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.11" } +solana-logger = { path = "../logger", version = "=1.14.11" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.11" } +solana-sdk = { path = "../sdk", version = "=1.14.11" } solana_rbpf = "=0.2.31" diff --git a/remote-wallet/Cargo.toml b/remote-wallet/Cargo.toml index 6cfe448f41fbef..dacc79649c4faf 100644 --- a/remote-wallet/Cargo.toml +++ b/remote-wallet/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-remote-wallet" description = "Blockchain, Rebuilt for Scale" -version = "1.14.10" +version = "1.14.11" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -19,7 +19,7 @@ num-traits = { version = "0.2" } parking_lot = "0.12" qstring = "0.7.2" semver = "1.0" -solana-sdk = { path = "../sdk", version = "=1.14.10" } +solana-sdk = { path = "../sdk", version = "=1.14.11" } thiserror = "1.0" uriparse = "0.6.4" diff --git a/rpc-test/Cargo.toml b/rpc-test/Cargo.toml index 2c020ef7d7f1ce..7d1ceb4bf4b1f5 100644 --- a/rpc-test/Cargo.toml +++ b/rpc-test/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-rpc-test" -version = "1.14.10" +version = "1.14.11" description = "Solana RPC Test" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -19,17 +19,17 @@ log = "0.4.17" reqwest = { version = "0.11.11", default-features = false, features = ["blocking", "brotli", "deflate", "gzip", "rustls-tls", "json"] } serde = "1.0.138" serde_json = "1.0.81" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.10" } -solana-client = { path = "../client", version = "=1.14.10" } -solana-rpc = { path = "../rpc", version = "=1.14.10" } -solana-sdk = { path = "../sdk", version = "=1.14.10" } -solana-streamer = { path = "../streamer", version = "=1.14.10" } -solana-test-validator = { path = "../test-validator", version = "=1.14.10" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.10" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.11" } +solana-client = { path = "../client", version = "=1.14.11" } +solana-rpc = { path = "../rpc", version = "=1.14.11" } +solana-sdk = { path = "../sdk", version = "=1.14.11" } +solana-streamer = { path = "../streamer", version = "=1.14.11" } +solana-test-validator = { path = "../test-validator", version = "=1.14.11" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.11" } tokio = { version = "~1.14.1", features = ["full"] } [dev-dependencies] -solana-logger = { path = "../logger", version = "=1.14.10" } +solana-logger = { path = "../logger", version = "=1.14.11" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/rpc/Cargo.toml b/rpc/Cargo.toml index d254089182931d..ec3dc5cabf7b8c 100644 --- a/rpc/Cargo.toml +++ b/rpc/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-rpc" -version = "1.14.10" +version = "1.14.11" description = "Solana RPC" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -29,26 +29,26 @@ serde = "1.0.138" serde_derive = "1.0.103" serde_json = "1.0.81" soketto = "0.7" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.10" } -solana-client = { path = "../client", version = "=1.14.10" } -solana-entry = { path = "../entry", version = "=1.14.10" } -solana-faucet = { path = "../faucet", version = "=1.14.10" } -solana-gossip = { path = "../gossip", version = "=1.14.10" } -solana-ledger = { path = "../ledger", version = "=1.14.10" } -solana-measure = { path = "../measure", version = "=1.14.10" } -solana-metrics = { path = "../metrics", version = "=1.14.10" } -solana-perf = { path = "../perf", version = "=1.14.10" } -solana-poh = { path = "../poh", version = "=1.14.10" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.10" } -solana-runtime = { path = "../runtime", version = "=1.14.10" } -solana-sdk = { path = "../sdk", version = "=1.14.10" } -solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.10" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.10" } -solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.10" } -solana-streamer = { path = "../streamer", version = "=1.14.10" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.10" } -solana-version = { path = "../version", version = "=1.14.10" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.10" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.11" } +solana-client = { path = "../client", version = "=1.14.11" } +solana-entry = { path = "../entry", version = "=1.14.11" } +solana-faucet = { path = "../faucet", version = "=1.14.11" } +solana-gossip = { path = "../gossip", version = "=1.14.11" } +solana-ledger = { path = "../ledger", version = "=1.14.11" } +solana-measure = { path = "../measure", version = "=1.14.11" } +solana-metrics = { path = "../metrics", version = "=1.14.11" } +solana-perf = { path = "../perf", version = "=1.14.11" } +solana-poh = { path = "../poh", version = "=1.14.11" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.11" } +solana-runtime = { path = "../runtime", version = "=1.14.11" } +solana-sdk = { path = "../sdk", version = "=1.14.11" } +solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.11" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.11" } +solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.11" } +solana-streamer = { path = "../streamer", version = "=1.14.11" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.11" } +solana-version = { path = "../version", version = "=1.14.11" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.11" } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } spl-token-2022 = { version = "=0.5.0", features = ["no-entrypoint"] } stream-cancel = "0.8.1" @@ -58,9 +58,9 @@ tokio-util = { version = "0.6", features = ["codec", "compat"] } [dev-dependencies] serial_test = "0.8.0" -solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.10" } -solana-net-utils = { path = "../net-utils", version = "=1.14.10" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.10" } +solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.11" } +solana-net-utils = { path = "../net-utils", version = "=1.14.11" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.11" } symlink = "0.1.0" [lib] diff --git a/runtime/Cargo.toml b/runtime/Cargo.toml index 31ea5caa059a7b..2260b9004b0a73 100644 --- a/runtime/Cargo.toml +++ b/runtime/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-runtime" -version = "1.14.10" +version = "1.14.11" description = "Solana runtime" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -39,21 +39,21 @@ rayon = "1.5.3" regex = "1.5.6" serde = { version = "1.0.138", features = ["rc"] } serde_derive = "1.0.103" -solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.10" } -solana-bucket-map = { path = "../bucket_map", version = "=1.14.10" } -solana-compute-budget-program = { path = "../programs/compute-budget", version = "=1.14.10" } -solana-config-program = { path = "../programs/config", version = "=1.14.10" } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.10" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.10" } -solana-measure = { path = "../measure", version = "=1.14.10" } -solana-metrics = { path = "../metrics", version = "=1.14.10" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.10" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.10" } -solana-sdk = { path = "../sdk", version = "=1.14.10" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.10" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.10" } -solana-zk-token-proof-program = { path = "../programs/zk-token-proof", version = "=1.14.10" } -solana-zk-token-sdk = { path = "../zk-token-sdk", version = "=1.14.10" } +solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.11" } +solana-bucket-map = { path = "../bucket_map", version = "=1.14.11" } +solana-compute-budget-program = { path = "../programs/compute-budget", version = "=1.14.11" } +solana-config-program = { path = "../programs/config", version = "=1.14.11" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.11" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.11" } +solana-measure = { path = "../measure", version = "=1.14.11" } +solana-metrics = { path = "../metrics", version = "=1.14.11" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.11" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.11" } +solana-sdk = { path = "../sdk", version = "=1.14.11" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.11" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.11" } +solana-zk-token-proof-program = { path = "../programs/zk-token-proof", version = "=1.14.11" } +solana-zk-token-sdk = { path = "../zk-token-sdk", version = "=1.14.11" } strum = { version = "0.24", features = ["derive"] } strum_macros = "0.24" symlink = "0.1.0" @@ -71,7 +71,7 @@ assert_matches = "1.5.0" ed25519-dalek = "=1.0.1" libsecp256k1 = "0.6.0" rand_chacha = "0.2.2" -solana-logger = { path = "../logger", version = "=1.14.10" } +solana-logger = { path = "../logger", version = "=1.14.11" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/runtime/store-tool/Cargo.toml b/runtime/store-tool/Cargo.toml index 9b477b7a9ca5e0..af8dec54d593a1 100644 --- a/runtime/store-tool/Cargo.toml +++ b/runtime/store-tool/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-store-tool" description = "Tool to inspect append vecs" -version = "1.14.10" +version = "1.14.11" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -12,9 +12,9 @@ publish = false [dependencies] clap = "2.33.1" log = { version = "0.4.17" } -solana-logger = { path = "../../logger", version = "=1.14.10" } -solana-runtime = { path = "..", version = "=1.14.10" } -solana-version = { path = "../../version", version = "=1.14.10" } +solana-logger = { path = "../../logger", version = "=1.14.11" } +solana-runtime = { path = "..", version = "=1.14.11" } +solana-version = { path = "../../version", version = "=1.14.11" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/sdk/Cargo.toml b/sdk/Cargo.toml index c39a69b2a39461..c7b68681f00703 100644 --- a/sdk/Cargo.toml +++ b/sdk/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-sdk" -version = "1.14.10" +version = "1.14.11" description = "Solana SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -71,11 +71,11 @@ serde_derive = "1.0.103" serde_json = { version = "1.0.81", optional = true } sha2 = "0.10.2" sha3 = { version = "0.10.1", optional = true } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.10" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.10" } -solana-logger = { path = "../logger", version = "=1.14.10", optional = true } -solana-program = { path = "program", version = "=1.14.10" } -solana-sdk-macro = { path = "macro", version = "=1.14.10" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.11" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.11" } +solana-logger = { path = "../logger", version = "=1.14.11", optional = true } +solana-program = { path = "program", version = "=1.14.11" } +solana-sdk-macro = { path = "macro", version = "=1.14.11" } thiserror = "1.0" uriparse = "0.6.4" wasm-bindgen = "0.2" diff --git a/sdk/cargo-build-bpf/Cargo.toml b/sdk/cargo-build-bpf/Cargo.toml index 2d8386ba7857ad..ed38a5acaf9d3f 100644 --- a/sdk/cargo-build-bpf/Cargo.toml +++ b/sdk/cargo-build-bpf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-cargo-build-bpf" -version = "1.14.10" +version = "1.14.11" description = "Compile a local package and all of its dependencies using the Solana SBF SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,7 +12,7 @@ publish = false [dependencies] cargo_metadata = "0.15.0" clap = { version = "3.1.5", features = ["cargo", "env"] } -solana-sdk = { path = "..", version = "=1.14.10" } +solana-sdk = { path = "..", version = "=1.14.11" } [features] program = [] diff --git a/sdk/cargo-build-sbf/Cargo.toml b/sdk/cargo-build-sbf/Cargo.toml index 780410ff4d6c6a..4bf28b388fa488 100644 --- a/sdk/cargo-build-sbf/Cargo.toml +++ b/sdk/cargo-build-sbf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-cargo-build-sbf" -version = "1.14.10" +version = "1.14.11" description = "Compile a local package and all of its dependencies using the Solana SBF SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -15,9 +15,9 @@ cargo_metadata = "0.15.0" clap = { version = "3.1.5", features = ["cargo", "env"] } log = { version = "0.4.14", features = ["std"] } regex = "1.5.6" -solana-download-utils = { path = "../../download-utils", version = "=1.14.10" } -solana-logger = { path = "../../logger", version = "=1.14.10" } -solana-sdk = { path = "..", version = "=1.14.10" } +solana-download-utils = { path = "../../download-utils", version = "=1.14.11" } +solana-logger = { path = "../../logger", version = "=1.14.11" } +solana-sdk = { path = "..", version = "=1.14.11" } tar = "0.4.38" [dev-dependencies] diff --git a/sdk/cargo-build-sbf/tests/crates/fail/Cargo.toml b/sdk/cargo-build-sbf/tests/crates/fail/Cargo.toml index ade77309f374f1..a8afc03ab04db3 100644 --- a/sdk/cargo-build-sbf/tests/crates/fail/Cargo.toml +++ b/sdk/cargo-build-sbf/tests/crates/fail/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "fail" -version = "1.14.10" +version = "1.14.11" description = "Solana SBF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ edition = "2021" publish = false [dependencies] -solana-program = { path = "../../../../program", version = "=1.14.10" } +solana-program = { path = "../../../../program", version = "=1.14.11" } [lib] crate-type = ["cdylib"] diff --git a/sdk/cargo-build-sbf/tests/crates/noop/Cargo.toml b/sdk/cargo-build-sbf/tests/crates/noop/Cargo.toml index 963d3379932186..51d19b755d5a0a 100644 --- a/sdk/cargo-build-sbf/tests/crates/noop/Cargo.toml +++ b/sdk/cargo-build-sbf/tests/crates/noop/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "noop" -version = "1.14.10" +version = "1.14.11" description = "Solana SBF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ edition = "2021" publish = false [dependencies] -solana-program = { path = "../../../../program", version = "=1.14.10" } +solana-program = { path = "../../../../program", version = "=1.14.11" } [lib] crate-type = ["cdylib"] diff --git a/sdk/cargo-test-bpf/Cargo.toml b/sdk/cargo-test-bpf/Cargo.toml index 3a17ec390d9626..03638e3ca7bee0 100644 --- a/sdk/cargo-test-bpf/Cargo.toml +++ b/sdk/cargo-test-bpf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-cargo-test-bpf" -version = "1.14.10" +version = "1.14.11" description = "Execute all unit and integration tests after building with the Solana SBF SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/sdk/cargo-test-sbf/Cargo.toml b/sdk/cargo-test-sbf/Cargo.toml index be741e6fdff32e..197a2e04b7e3cc 100644 --- a/sdk/cargo-test-sbf/Cargo.toml +++ b/sdk/cargo-test-sbf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-cargo-test-sbf" -version = "1.14.10" +version = "1.14.11" description = "Execute all unit and integration tests after building with the Solana SBF SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/sdk/gen-headers/Cargo.toml b/sdk/gen-headers/Cargo.toml index f4856fe75f5feb..523f2a53395230 100644 --- a/sdk/gen-headers/Cargo.toml +++ b/sdk/gen-headers/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "gen-headers" -version = "1.14.10" +version = "1.14.11" edition = "2021" license = "Apache-2.0" publish = false diff --git a/sdk/macro/Cargo.toml b/sdk/macro/Cargo.toml index 4164208288f27f..3300fe8f529214 100644 --- a/sdk/macro/Cargo.toml +++ b/sdk/macro/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-sdk-macro" -version = "1.14.10" +version = "1.14.11" description = "Solana SDK Macro" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/sdk/program/Cargo.toml b/sdk/program/Cargo.toml index 3fff44d688e784..639f5034955179 100644 --- a/sdk/program/Cargo.toml +++ b/sdk/program/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-program" -version = "1.14.10" +version = "1.14.11" description = "Solana Program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -31,9 +31,9 @@ serde_derive = "1.0" serde_json = "1.0" sha2 = "0.10.0" sha3 = "0.10.0" -solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.10" } -solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.10" } -solana-sdk-macro = { path = "../macro", version = "=1.14.10" } +solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.11" } +solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.11" } +solana-sdk-macro = { path = "../macro", version = "=1.14.11" } thiserror = "1.0" [target.'cfg(not(target_os = "solana"))'.dependencies] @@ -50,7 +50,7 @@ wasm-bindgen = "0.2" zeroize = { version = "1.3", default-features = true, features = ["zeroize_derive"] } [target.'cfg(not(target_os = "solana"))'.dev-dependencies] -solana-logger = { path = "../../logger", version = "=1.14.10" } +solana-logger = { path = "../../logger", version = "=1.14.11" } [target.'cfg(target_arch = "wasm32")'.dependencies] console_error_panic_hook = "0.1.7" diff --git a/send-transaction-service/Cargo.toml b/send-transaction-service/Cargo.toml index f97f5ee8a2de8d..d707b5d10df963 100644 --- a/send-transaction-service/Cargo.toml +++ b/send-transaction-service/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-send-transaction-service" -version = "1.14.10" +version = "1.14.11" description = "Solana send transaction service" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,14 +12,14 @@ edition = "2021" [dependencies] crossbeam-channel = "0.5" log = "0.4.17" -solana-client = { path = "../client", version = "=1.14.10" } -solana-measure = { path = "../measure", version = "=1.14.10" } -solana-metrics = { path = "../metrics", version = "=1.14.10" } -solana-runtime = { path = "../runtime", version = "=1.14.10" } -solana-sdk = { path = "../sdk", version = "=1.14.10" } +solana-client = { path = "../client", version = "=1.14.11" } +solana-measure = { path = "../measure", version = "=1.14.11" } +solana-metrics = { path = "../metrics", version = "=1.14.11" } +solana-runtime = { path = "../runtime", version = "=1.14.11" } +solana-sdk = { path = "../sdk", version = "=1.14.11" } [dev-dependencies] -solana-logger = { path = "../logger", version = "=1.14.10" } +solana-logger = { path = "../logger", version = "=1.14.11" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/stake-accounts/Cargo.toml b/stake-accounts/Cargo.toml index 6ed155d46b65d8..7c70ea4448bc9e 100644 --- a/stake-accounts/Cargo.toml +++ b/stake-accounts/Cargo.toml @@ -3,7 +3,7 @@ name = "solana-stake-accounts" description = "Blockchain, Rebuilt for Scale" authors = ["Solana Maintainers "] edition = "2021" -version = "1.14.10" +version = "1.14.11" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -11,15 +11,15 @@ documentation = "https://docs.rs/solana-stake-accounts" [dependencies] clap = "2.33.1" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.10" } -solana-cli-config = { path = "../cli-config", version = "=1.14.10" } -solana-client = { path = "../client", version = "=1.14.10" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.10" } -solana-sdk = { path = "../sdk", version = "=1.14.10" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.10" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.11" } +solana-cli-config = { path = "../cli-config", version = "=1.14.11" } +solana-client = { path = "../client", version = "=1.14.11" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.11" } +solana-sdk = { path = "../sdk", version = "=1.14.11" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.11" } [dev-dependencies] -solana-runtime = { path = "../runtime", version = "=1.14.10" } +solana-runtime = { path = "../runtime", version = "=1.14.11" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/storage-bigtable/Cargo.toml b/storage-bigtable/Cargo.toml index 9e2d3b9d3e6c4e..cd758359f9661d 100644 --- a/storage-bigtable/Cargo.toml +++ b/storage-bigtable/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-storage-bigtable" -version = "1.14.10" +version = "1.14.11" description = "Solana Storage BigTable" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -27,10 +27,10 @@ prost-types = "0.11.0" serde = "1.0.138" serde_derive = "1.0.103" smpl_jwt = "0.7.1" -solana-metrics = { path = "../metrics", version = "=1.14.10" } -solana-sdk = { path = "../sdk", version = "=1.14.10" } -solana-storage-proto = { path = "../storage-proto", version = "=1.14.10" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.10" } +solana-metrics = { path = "../metrics", version = "=1.14.11" } +solana-sdk = { path = "../sdk", version = "=1.14.11" } +solana-storage-proto = { path = "../storage-proto", version = "=1.14.11" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.11" } thiserror = "1.0" tokio = "1" tonic = { version = "0.8.0", features = ["tls", "transport"] } diff --git a/storage-bigtable/build-proto/Cargo.lock b/storage-bigtable/build-proto/Cargo.lock index 7f9dee27c1158e..12706071112e77 100644 --- a/storage-bigtable/build-proto/Cargo.lock +++ b/storage-bigtable/build-proto/Cargo.lock @@ -219,7 +219,7 @@ dependencies = [ [[package]] name = "proto" -version = "1.14.10" +version = "1.14.11" dependencies = [ "protobuf-src", "tonic-build", diff --git a/storage-bigtable/build-proto/Cargo.toml b/storage-bigtable/build-proto/Cargo.toml index 2cccb1c7d964b7..79870e27dd7a69 100644 --- a/storage-bigtable/build-proto/Cargo.toml +++ b/storage-bigtable/build-proto/Cargo.toml @@ -7,7 +7,7 @@ license = "Apache-2.0" name = "proto" publish = false repository = "https://github.com/solana-labs/solana" -version = "1.14.10" +version = "1.14.11" [workspace] diff --git a/storage-proto/Cargo.toml b/storage-proto/Cargo.toml index 16a3e0c43bf2ef..d037da530920b7 100644 --- a/storage-proto/Cargo.toml +++ b/storage-proto/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-storage-proto" -version = "1.14.10" +version = "1.14.11" description = "Solana Storage Protobuf Definitions" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,9 +14,9 @@ bincode = "1.3.3" bs58 = "0.4.0" prost = "0.11.0" serde = "1.0.138" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.10" } -solana-sdk = { path = "../sdk", version = "=1.14.10" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.10" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.11" } +solana-sdk = { path = "../sdk", version = "=1.14.11" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.11" } [dev-dependencies] enum-iterator = "0.8.1" diff --git a/streamer/Cargo.toml b/streamer/Cargo.toml index 0a462d9ebc9182..754e3b3e1e5faf 100644 --- a/streamer/Cargo.toml +++ b/streamer/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-streamer" -version = "1.14.10" +version = "1.14.11" description = "Solana Streamer" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -25,15 +25,15 @@ quinn = "0.8.3" rand = "0.7.0" rcgen = "0.9.2" rustls = { version = "0.20.6", features = ["dangerous_configuration"] } -solana-metrics = { path = "../metrics", version = "=1.14.10" } -solana-perf = { path = "../perf", version = "=1.14.10" } -solana-sdk = { path = "../sdk", version = "=1.14.10" } +solana-metrics = { path = "../metrics", version = "=1.14.11" } +solana-perf = { path = "../perf", version = "=1.14.11" } +solana-sdk = { path = "../sdk", version = "=1.14.11" } thiserror = "1.0" tokio = { version = "1", features = ["full"] } x509-parser = "0.14.0" [dev-dependencies] -solana-logger = { path = "../logger", version = "=1.14.10" } +solana-logger = { path = "../logger", version = "=1.14.11" } [lib] crate-type = ["lib"] diff --git a/sys-tuner/Cargo.toml b/sys-tuner/Cargo.toml index 19f79bb693c8cb..5cc927e48860f4 100644 --- a/sys-tuner/Cargo.toml +++ b/sys-tuner/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-sys-tuner" description = "The solana cluster system tuner daemon" -version = "1.14.10" +version = "1.14.11" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,8 +14,8 @@ publish = true clap = "2.33.1" libc = "0.2.126" log = "0.4.17" -solana-logger = { path = "../logger", version = "=1.14.10" } -solana-version = { path = "../version", version = "=1.14.10" } +solana-logger = { path = "../logger", version = "=1.14.11" } +solana-version = { path = "../version", version = "=1.14.11" } [target."cfg(unix)".dependencies] unix_socket2 = "0.5.4" diff --git a/test-validator/Cargo.toml b/test-validator/Cargo.toml index 12e1fe3b2abb6a..78546c41997aef 100644 --- a/test-validator/Cargo.toml +++ b/test-validator/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "solana-test-validator" description = "Blockchain, Rebuilt for Scale" -version = "1.14.10" +version = "1.14.11" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-test-validator" readme = "../README.md" @@ -15,19 +15,19 @@ base64 = "0.13.0" log = "0.4.17" serde_derive = "1.0.103" serde_json = "1.0.81" -solana-cli-output = { path = "../cli-output", version = "=1.14.10" } -solana-client = { path = "../client", version = "=1.14.10" } -solana-core = { path = "../core", version = "=1.14.10" } -solana-gossip = { path = "../gossip", version = "=1.14.10" } -solana-ledger = { path = "../ledger", version = "=1.14.10" } -solana-logger = { path = "../logger", version = "=1.14.10" } -solana-net-utils = { path = "../net-utils", version = "=1.14.10" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.10" } -solana-program-test = { path = "../program-test", version = "=1.14.10" } -solana-rpc = { path = "../rpc", version = "=1.14.10" } -solana-runtime = { path = "../runtime", version = "=1.14.10" } -solana-sdk = { path = "../sdk", version = "=1.14.10" } -solana-streamer = { path = "../streamer", version = "=1.14.10" } +solana-cli-output = { path = "../cli-output", version = "=1.14.11" } +solana-client = { path = "../client", version = "=1.14.11" } +solana-core = { path = "../core", version = "=1.14.11" } +solana-gossip = { path = "../gossip", version = "=1.14.11" } +solana-ledger = { path = "../ledger", version = "=1.14.11" } +solana-logger = { path = "../logger", version = "=1.14.11" } +solana-net-utils = { path = "../net-utils", version = "=1.14.11" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.11" } +solana-program-test = { path = "../program-test", version = "=1.14.11" } +solana-rpc = { path = "../rpc", version = "=1.14.11" } +solana-runtime = { path = "../runtime", version = "=1.14.11" } +solana-sdk = { path = "../sdk", version = "=1.14.11" } +solana-streamer = { path = "../streamer", version = "=1.14.11" } tokio = { version = "1", features = ["full"] } [package.metadata.docs.rs] diff --git a/tokens/Cargo.toml b/tokens/Cargo.toml index e895174400a464..8e51dd42130f4a 100644 --- a/tokens/Cargo.toml +++ b/tokens/Cargo.toml @@ -3,7 +3,7 @@ name = "solana-tokens" description = "Blockchain, Rebuilt for Scale" authors = ["Solana Maintainers "] edition = "2021" -version = "1.14.10" +version = "1.14.11" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -19,14 +19,14 @@ indexmap = "1.9.1" indicatif = "0.16.2" pickledb = "0.4.1" serde = { version = "1.0", features = ["derive"] } -solana-account-decoder = { path = "../account-decoder", version = "=1.14.10" } -solana-clap-utils = { path = "../clap-utils", version = "=1.14.10" } -solana-cli-config = { path = "../cli-config", version = "=1.14.10" } -solana-client = { path = "../client", version = "=1.14.10" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.10" } -solana-sdk = { path = "../sdk", version = "=1.14.10" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.10" } -solana-version = { path = "../version", version = "=1.14.10" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.11" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.11" } +solana-cli-config = { path = "../cli-config", version = "=1.14.11" } +solana-client = { path = "../client", version = "=1.14.11" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.11" } +solana-sdk = { path = "../sdk", version = "=1.14.11" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.11" } +solana-version = { path = "../version", version = "=1.14.11" } spl-associated-token-account = { version = "=1.1.2" } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } tempfile = "3.3.0" @@ -34,6 +34,6 @@ thiserror = "1.0" [dev-dependencies] bincode = "1.3.3" -solana-logger = { path = "../logger", version = "=1.14.10" } -solana-streamer = { path = "../streamer", version = "=1.14.10" } -solana-test-validator = { path = "../test-validator", version = "=1.14.10" } +solana-logger = { path = "../logger", version = "=1.14.11" } +solana-streamer = { path = "../streamer", version = "=1.14.11" } +solana-test-validator = { path = "../test-validator", version = "=1.14.11" } diff --git a/transaction-dos/Cargo.toml b/transaction-dos/Cargo.toml index ab9552fc006c00..43866feafe7a9a 100644 --- a/transaction-dos/Cargo.toml +++ b/transaction-dos/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-transaction-dos" -version = "1.14.10" +version = "1.14.11" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,23 +14,23 @@ clap = "2.33.1" log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.10" } -solana-cli = { path = "../cli", version = "=1.14.10" } -solana-client = { path = "../client", version = "=1.14.10" } -solana-core = { path = "../core", version = "=1.14.10" } -solana-faucet = { path = "../faucet", version = "=1.14.10" } -solana-gossip = { path = "../gossip", version = "=1.14.10" } -solana-logger = { path = "../logger", version = "=1.14.10" } -solana-measure = { path = "../measure", version = "=1.14.10" } -solana-net-utils = { path = "../net-utils", version = "=1.14.10" } -solana-runtime = { path = "../runtime", version = "=1.14.10" } -solana-sdk = { path = "../sdk", version = "=1.14.10" } -solana-streamer = { path = "../streamer", version = "=1.14.10" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.10" } -solana-version = { path = "../version", version = "=1.14.10" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.11" } +solana-cli = { path = "../cli", version = "=1.14.11" } +solana-client = { path = "../client", version = "=1.14.11" } +solana-core = { path = "../core", version = "=1.14.11" } +solana-faucet = { path = "../faucet", version = "=1.14.11" } +solana-gossip = { path = "../gossip", version = "=1.14.11" } +solana-logger = { path = "../logger", version = "=1.14.11" } +solana-measure = { path = "../measure", version = "=1.14.11" } +solana-net-utils = { path = "../net-utils", version = "=1.14.11" } +solana-runtime = { path = "../runtime", version = "=1.14.11" } +solana-sdk = { path = "../sdk", version = "=1.14.11" } +solana-streamer = { path = "../streamer", version = "=1.14.11" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.11" } +solana-version = { path = "../version", version = "=1.14.11" } [dev-dependencies] -solana-local-cluster = { path = "../local-cluster", version = "=1.14.10" } +solana-local-cluster = { path = "../local-cluster", version = "=1.14.11" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/transaction-status/Cargo.toml b/transaction-status/Cargo.toml index c8cc3fcd47b90b..5cbb9c2d55118a 100644 --- a/transaction-status/Cargo.toml +++ b/transaction-status/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-transaction-status" -version = "1.14.10" +version = "1.14.11" description = "Solana transaction status types" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -20,12 +20,12 @@ log = "0.4.17" serde = "1.0.138" serde_derive = "1.0.103" serde_json = "1.0.81" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.10" } -solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.10" } -solana-measure = { path = "../measure", version = "=1.14.10" } -solana-metrics = { path = "../metrics", version = "=1.14.10" } -solana-sdk = { path = "../sdk", version = "=1.14.10" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.10" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.11" } +solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.11" } +solana-measure = { path = "../measure", version = "=1.14.11" } +solana-metrics = { path = "../metrics", version = "=1.14.11" } +solana-sdk = { path = "../sdk", version = "=1.14.11" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.11" } spl-associated-token-account = { version = "=1.1.2", features = ["no-entrypoint"] } spl-memo = { version = "=3.0.1", features = ["no-entrypoint"] } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } diff --git a/upload-perf/Cargo.toml b/upload-perf/Cargo.toml index c98069d41ca691..399415ce87479c 100644 --- a/upload-perf/Cargo.toml +++ b/upload-perf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-upload-perf" -version = "1.14.10" +version = "1.14.11" description = "Metrics Upload Utility" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -11,7 +11,7 @@ publish = false [dependencies] serde_json = "1.0.81" -solana-metrics = { path = "../metrics", version = "=1.14.10" } +solana-metrics = { path = "../metrics", version = "=1.14.11" } [[bin]] name = "solana-upload-perf" diff --git a/validator/Cargo.toml b/validator/Cargo.toml index 8886a86855f640..33cc7c88638494 100644 --- a/validator/Cargo.toml +++ b/validator/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-validator" description = "Blockchain, Rebuilt for Scale" -version = "1.14.10" +version = "1.14.11" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -28,30 +28,30 @@ num_cpus = "1.13.1" rand = "0.7.0" serde = "1.0.138" serde_json = "1.0.81" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.10" } -solana-cli-config = { path = "../cli-config", version = "=1.14.10" } -solana-client = { path = "../client", version = "=1.14.10" } -solana-core = { path = "../core", version = "=1.14.10" } -solana-download-utils = { path = "../download-utils", version = "=1.14.10" } -solana-entry = { path = "../entry", version = "=1.14.10" } -solana-faucet = { path = "../faucet", version = "=1.14.10" } -solana-genesis-utils = { path = "../genesis-utils", version = "=1.14.10" } -solana-gossip = { path = "../gossip", version = "=1.14.10" } -solana-ledger = { path = "../ledger", version = "=1.14.10" } -solana-logger = { path = "../logger", version = "=1.14.10" } -solana-metrics = { path = "../metrics", version = "=1.14.10" } -solana-net-utils = { path = "../net-utils", version = "=1.14.10" } -solana-perf = { path = "../perf", version = "=1.14.10" } -solana-poh = { path = "../poh", version = "=1.14.10" } -solana-rpc = { path = "../rpc", version = "=1.14.10" } -solana-runtime = { path = "../runtime", version = "=1.14.10" } -solana-sdk = { path = "../sdk", version = "=1.14.10" } -solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.10" } -solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.10" } -solana-streamer = { path = "../streamer", version = "=1.14.10" } -solana-test-validator = { path = "../test-validator", version = "=1.14.10" } -solana-version = { path = "../version", version = "=1.14.10" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.10" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.11" } +solana-cli-config = { path = "../cli-config", version = "=1.14.11" } +solana-client = { path = "../client", version = "=1.14.11" } +solana-core = { path = "../core", version = "=1.14.11" } +solana-download-utils = { path = "../download-utils", version = "=1.14.11" } +solana-entry = { path = "../entry", version = "=1.14.11" } +solana-faucet = { path = "../faucet", version = "=1.14.11" } +solana-genesis-utils = { path = "../genesis-utils", version = "=1.14.11" } +solana-gossip = { path = "../gossip", version = "=1.14.11" } +solana-ledger = { path = "../ledger", version = "=1.14.11" } +solana-logger = { path = "../logger", version = "=1.14.11" } +solana-metrics = { path = "../metrics", version = "=1.14.11" } +solana-net-utils = { path = "../net-utils", version = "=1.14.11" } +solana-perf = { path = "../perf", version = "=1.14.11" } +solana-poh = { path = "../poh", version = "=1.14.11" } +solana-rpc = { path = "../rpc", version = "=1.14.11" } +solana-runtime = { path = "../runtime", version = "=1.14.11" } +solana-sdk = { path = "../sdk", version = "=1.14.11" } +solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.11" } +solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.11" } +solana-streamer = { path = "../streamer", version = "=1.14.11" } +solana-test-validator = { path = "../test-validator", version = "=1.14.11" } +solana-version = { path = "../version", version = "=1.14.11" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.11" } symlink = "0.1.0" [target.'cfg(not(target_env = "msvc"))'.dependencies] diff --git a/version/Cargo.toml b/version/Cargo.toml index 890e85c4166f82..874db5a62f789b 100644 --- a/version/Cargo.toml +++ b/version/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-version" -version = "1.14.10" +version = "1.14.11" description = "Solana Version" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,9 +14,9 @@ log = "0.4.17" semver = "1.0.10" serde = "1.0.138" serde_derive = "1.0.103" -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.10" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.10" } -solana-sdk = { path = "../sdk", version = "=1.14.10" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.11" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.11" } +solana-sdk = { path = "../sdk", version = "=1.14.11" } [lib] name = "solana_version" diff --git a/watchtower/Cargo.toml b/watchtower/Cargo.toml index dce51d178b8ca3..06dddd967e7d9b 100644 --- a/watchtower/Cargo.toml +++ b/watchtower/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-watchtower" description = "Blockchain, Rebuilt for Scale" -version = "1.14.10" +version = "1.14.11" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -13,15 +13,15 @@ documentation = "https://docs.rs/solana-watchtower" clap = "2.33.1" humantime = "2.0.1" log = "0.4.17" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.10" } -solana-cli-config = { path = "../cli-config", version = "=1.14.10" } -solana-cli-output = { path = "../cli-output", version = "=1.14.10" } -solana-client = { path = "../client", version = "=1.14.10" } -solana-logger = { path = "../logger", version = "=1.14.10" } -solana-metrics = { path = "../metrics", version = "=1.14.10" } -solana-notifier = { path = "../notifier", version = "=1.14.10" } -solana-sdk = { path = "../sdk", version = "=1.14.10" } -solana-version = { path = "../version", version = "=1.14.10" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.11" } +solana-cli-config = { path = "../cli-config", version = "=1.14.11" } +solana-cli-output = { path = "../cli-output", version = "=1.14.11" } +solana-client = { path = "../client", version = "=1.14.11" } +solana-logger = { path = "../logger", version = "=1.14.11" } +solana-metrics = { path = "../metrics", version = "=1.14.11" } +solana-notifier = { path = "../notifier", version = "=1.14.11" } +solana-sdk = { path = "../sdk", version = "=1.14.11" } +solana-version = { path = "../version", version = "=1.14.11" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/zk-token-sdk/Cargo.toml b/zk-token-sdk/Cargo.toml index a2fb3b0afa6ec2..ced77297474e38 100644 --- a/zk-token-sdk/Cargo.toml +++ b/zk-token-sdk/Cargo.toml @@ -3,7 +3,7 @@ name = "solana-zk-token-sdk" description = "Solana Zk Token SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" -version = "1.14.10" +version = "1.14.11" license = "Apache-2.0" edition = "2021" @@ -12,7 +12,7 @@ base64 = "0.13" bytemuck = { version = "1.11.0", features = ["derive"] } num-derive = "0.3" num-traits = "0.2" -solana-program = { path = "../sdk/program", version = "=1.14.10" } +solana-program = { path = "../sdk/program", version = "=1.14.11" } [target.'cfg(not(target_os = "solana"))'.dependencies] aes-gcm-siv = "0.10.3" @@ -29,7 +29,7 @@ rand = "0.7" serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" sha3 = "0.9" -solana-sdk = { path = "../sdk", version = "=1.14.10" } +solana-sdk = { path = "../sdk", version = "=1.14.11" } subtle = "2" thiserror = "1.0" zeroize = { version = "1.3", default-features = false, features = ["zeroize_derive"] } From e5198ccd23050dcf83f5debc3ead70404dc83918 Mon Sep 17 00:00:00 2001 From: behzad nouri Date: Wed, 7 Dec 2022 14:00:43 +0000 Subject: [PATCH 252/465] patches rust code formatting in core/src/replay_stage.rs (backport #29123) (#29129) Backport of #29123 to avoid future merge conflicts. --- core/src/replay_stage.rs | 921 +++++++++++++++++++++------------------ 1 file changed, 486 insertions(+), 435 deletions(-) diff --git a/core/src/replay_stage.rs b/core/src/replay_stage.rs index 2e9247b364ab51..508a57157b4d16 100644 --- a/core/src/replay_stage.rs +++ b/core/src/replay_stage.rs @@ -433,511 +433,555 @@ impl ReplayStage { block_commitment_cache.clone(), rpc_subscriptions.clone(), ); - - #[allow(clippy::cognitive_complexity)] - let t_replay = Builder::new() - .name("solReplayStage".to_string()) - .spawn(move || { - let verify_recyclers = VerifyRecyclers::default(); - let _exit = Finalizer::new(exit.clone()); - let mut identity_keypair = cluster_info.keypair().clone(); - let mut my_pubkey = identity_keypair.pubkey(); - let ( - mut progress, - mut heaviest_subtree_fork_choice, - ) = Self::initialize_progress_and_fork_choice_with_locked_bank_forks( + let run_replay = move || { + let verify_recyclers = VerifyRecyclers::default(); + let _exit = Finalizer::new(exit.clone()); + let mut identity_keypair = cluster_info.keypair().clone(); + let mut my_pubkey = identity_keypair.pubkey(); + let (mut progress, mut heaviest_subtree_fork_choice) = + Self::initialize_progress_and_fork_choice_with_locked_bank_forks( &bank_forks, &my_pubkey, &vote_account, ); - let mut current_leader = None; - let mut last_reset = Hash::default(); - let mut partition_exists = false; - let mut skipped_slots_info = SkippedSlotsInfo::default(); - let mut replay_timing = ReplayTiming::default(); - let mut duplicate_slots_tracker = DuplicateSlotsTracker::default(); - let mut gossip_duplicate_confirmed_slots: GossipDuplicateConfirmedSlots = GossipDuplicateConfirmedSlots::default(); - let mut epoch_slots_frozen_slots: EpochSlotsFrozenSlots = EpochSlotsFrozenSlots::default(); - let mut duplicate_slots_to_repair = DuplicateSlotsToRepair::default(); - let mut unfrozen_gossip_verified_vote_hashes: UnfrozenGossipVerifiedVoteHashes = UnfrozenGossipVerifiedVoteHashes::default(); - let mut latest_validator_votes_for_frozen_banks: LatestValidatorVotesForFrozenBanks = LatestValidatorVotesForFrozenBanks::default(); - let mut voted_signatures = Vec::new(); - let mut has_new_vote_been_rooted = !wait_for_vote_to_start_leader; - let mut last_vote_refresh_time = LastVoteRefreshTime { - last_refresh_time: Instant::now(), - last_print_time: Instant::now(), - }; - let (working_bank, in_vote_only_mode) = { - let r_bank_forks = bank_forks.read().unwrap(); - (r_bank_forks.working_bank(), r_bank_forks.get_vote_only_mode_signal()) - }; + let mut current_leader = None; + let mut last_reset = Hash::default(); + let mut partition_exists = false; + let mut skipped_slots_info = SkippedSlotsInfo::default(); + let mut replay_timing = ReplayTiming::default(); + let mut duplicate_slots_tracker = DuplicateSlotsTracker::default(); + let mut gossip_duplicate_confirmed_slots: GossipDuplicateConfirmedSlots = + GossipDuplicateConfirmedSlots::default(); + let mut epoch_slots_frozen_slots: EpochSlotsFrozenSlots = + EpochSlotsFrozenSlots::default(); + let mut duplicate_slots_to_repair = DuplicateSlotsToRepair::default(); + let mut unfrozen_gossip_verified_vote_hashes: UnfrozenGossipVerifiedVoteHashes = + UnfrozenGossipVerifiedVoteHashes::default(); + let mut latest_validator_votes_for_frozen_banks: LatestValidatorVotesForFrozenBanks = + LatestValidatorVotesForFrozenBanks::default(); + let mut voted_signatures = Vec::new(); + let mut has_new_vote_been_rooted = !wait_for_vote_to_start_leader; + let mut last_vote_refresh_time = LastVoteRefreshTime { + last_refresh_time: Instant::now(), + last_print_time: Instant::now(), + }; + let (working_bank, in_vote_only_mode) = { + let r_bank_forks = bank_forks.read().unwrap(); + ( + r_bank_forks.working_bank(), + r_bank_forks.get_vote_only_mode_signal(), + ) + }; - Self::reset_poh_recorder( - &my_pubkey, + Self::reset_poh_recorder( + &my_pubkey, + &blockstore, + &working_bank, + &poh_recorder, + &leader_schedule_cache, + ); + + loop { + // Stop getting entries if we get exit signal + if exit.load(Ordering::Relaxed) { + break; + } + + let mut generate_new_bank_forks_time = + Measure::start("generate_new_bank_forks_time"); + Self::generate_new_bank_forks( &blockstore, - &working_bank, - &poh_recorder, + &bank_forks, &leader_schedule_cache, + &rpc_subscriptions, + &mut progress, + &mut replay_timing, ); + generate_new_bank_forks_time.stop(); - loop { - // Stop getting entries if we get exit signal - if exit.load(Ordering::Relaxed) { - break; - } + let mut tpu_has_bank = poh_recorder.read().unwrap().has_bank(); - let mut generate_new_bank_forks_time = - Measure::start("generate_new_bank_forks_time"); - Self::generate_new_bank_forks( - &blockstore, - &bank_forks, - &leader_schedule_cache, - &rpc_subscriptions, - &mut progress, - &mut replay_timing, - ); - generate_new_bank_forks_time.stop(); + let mut replay_active_banks_time = Measure::start("replay_active_banks_time"); + let mut ancestors = bank_forks.read().unwrap().ancestors(); + let mut descendants = bank_forks.read().unwrap().descendants(); + let did_complete_bank = Self::replay_active_banks( + &blockstore, + &bank_forks, + &my_pubkey, + &vote_account, + &mut progress, + transaction_status_sender.as_ref(), + cache_block_meta_sender.as_ref(), + &verify_recyclers, + &mut heaviest_subtree_fork_choice, + &replay_vote_sender, + &bank_notification_sender, + &rewards_recorder_sender, + &rpc_subscriptions, + &mut duplicate_slots_tracker, + &gossip_duplicate_confirmed_slots, + &mut epoch_slots_frozen_slots, + &mut unfrozen_gossip_verified_vote_hashes, + &mut latest_validator_votes_for_frozen_banks, + &cluster_slots_update_sender, + &cost_update_sender, + &mut duplicate_slots_to_repair, + &ancestor_hashes_replay_update_sender, + block_metadata_notifier.clone(), + &mut replay_timing, + log_messages_bytes_limit, + ); + replay_active_banks_time.stop(); - let mut tpu_has_bank = poh_recorder.read().unwrap().has_bank(); + let forks_root = bank_forks.read().unwrap().root(); + + // Reset any dead slots that have been frozen by a sufficient portion of + // the network. Signalled by repair_service. + let mut purge_dead_slots_time = Measure::start("purge_dead_slots"); + Self::process_epoch_slots_frozen_dead_slots( + &my_pubkey, + &blockstore, + &epoch_slots_frozen_receiver, + &mut duplicate_slots_tracker, + &gossip_duplicate_confirmed_slots, + &mut epoch_slots_frozen_slots, + &mut progress, + &mut heaviest_subtree_fork_choice, + &bank_forks, + &mut duplicate_slots_to_repair, + &ancestor_hashes_replay_update_sender, + ); + purge_dead_slots_time.stop(); + + // Check for any newly confirmed slots detected from gossip. + let mut process_gossip_duplicate_confirmed_slots_time = + Measure::start("process_gossip_duplicate_confirmed_slots"); + Self::process_gossip_duplicate_confirmed_slots( + &gossip_duplicate_confirmed_slots_receiver, + &blockstore, + &mut duplicate_slots_tracker, + &mut gossip_duplicate_confirmed_slots, + &mut epoch_slots_frozen_slots, + &bank_forks, + &mut progress, + &mut heaviest_subtree_fork_choice, + &mut duplicate_slots_to_repair, + &ancestor_hashes_replay_update_sender, + ); + process_gossip_duplicate_confirmed_slots_time.stop(); + + // Ingest any new verified votes from gossip. Important for fork choice + // and switching proofs because these may be votes that haven't yet been + // included in a block, so we may not have yet observed these votes just + // by replaying blocks. + let mut process_unfrozen_gossip_verified_vote_hashes_time = + Measure::start("process_gossip_verified_vote_hashes"); + Self::process_gossip_verified_vote_hashes( + &gossip_verified_vote_hash_receiver, + &mut unfrozen_gossip_verified_vote_hashes, + &heaviest_subtree_fork_choice, + &mut latest_validator_votes_for_frozen_banks, + ); + for _ in gossip_verified_vote_hash_receiver.try_iter() {} + process_unfrozen_gossip_verified_vote_hashes_time.stop(); - let mut replay_active_banks_time = Measure::start("replay_active_banks_time"); - let mut ancestors = bank_forks.read().unwrap().ancestors(); - let mut descendants = bank_forks.read().unwrap().descendants(); - let did_complete_bank = Self::replay_active_banks( + // Check to remove any duplicated slots from fork choice + let mut process_duplicate_slots_time = Measure::start("process_duplicate_slots"); + if !tpu_has_bank { + Self::process_duplicate_slots( &blockstore, - &bank_forks, - &my_pubkey, - &vote_account, - &mut progress, - transaction_status_sender.as_ref(), - cache_block_meta_sender.as_ref(), - &verify_recyclers, - &mut heaviest_subtree_fork_choice, - &replay_vote_sender, - &bank_notification_sender, - &rewards_recorder_sender, - &rpc_subscriptions, + &duplicate_slots_receiver, &mut duplicate_slots_tracker, &gossip_duplicate_confirmed_slots, &mut epoch_slots_frozen_slots, - &mut unfrozen_gossip_verified_vote_hashes, - &mut latest_validator_votes_for_frozen_banks, - &cluster_slots_update_sender, - &cost_update_sender, + &bank_forks, + &mut progress, + &mut heaviest_subtree_fork_choice, &mut duplicate_slots_to_repair, &ancestor_hashes_replay_update_sender, - block_metadata_notifier.clone(), - &mut replay_timing, - log_messages_bytes_limit ); - replay_active_banks_time.stop(); + } + process_duplicate_slots_time.stop(); - let forks_root = bank_forks.read().unwrap().root(); + let mut collect_frozen_banks_time = Measure::start("frozen_banks"); + let mut frozen_banks: Vec<_> = bank_forks + .read() + .unwrap() + .frozen_banks() + .into_iter() + .filter(|(slot, _)| *slot >= forks_root) + .map(|(_, bank)| bank) + .collect(); + collect_frozen_banks_time.stop(); - // Reset any dead slots that have been frozen by a sufficient portion of - // the network. Signalled by repair_service. - let mut purge_dead_slots_time = Measure::start("purge_dead_slots"); - Self::process_epoch_slots_frozen_dead_slots( - &my_pubkey, - &blockstore, - &epoch_slots_frozen_receiver, - &mut duplicate_slots_tracker, - &gossip_duplicate_confirmed_slots, - &mut epoch_slots_frozen_slots, - &mut progress, - &mut heaviest_subtree_fork_choice, + let mut compute_bank_stats_time = Measure::start("compute_bank_stats"); + let newly_computed_slot_stats = Self::compute_bank_stats( + &vote_account, + &ancestors, + &mut frozen_banks, + &mut tower, + &mut progress, + &vote_tracker, + &cluster_slots, + &bank_forks, + &mut heaviest_subtree_fork_choice, + &mut latest_validator_votes_for_frozen_banks, + ); + compute_bank_stats_time.stop(); + + let mut compute_slot_stats_time = Measure::start("compute_slot_stats_time"); + for slot in newly_computed_slot_stats { + let fork_stats = progress.get_fork_stats(slot).unwrap(); + let confirmed_forks = Self::confirm_forks( + &tower, + &fork_stats.voted_stakes, + fork_stats.total_stake, + &progress, &bank_forks, - &mut duplicate_slots_to_repair, - &ancestor_hashes_replay_update_sender ); - purge_dead_slots_time.stop(); - // Check for any newly confirmed slots detected from gossip. - let mut process_gossip_duplicate_confirmed_slots_time = Measure::start("process_gossip_duplicate_confirmed_slots"); - Self::process_gossip_duplicate_confirmed_slots( - &gossip_duplicate_confirmed_slots_receiver, + Self::mark_slots_confirmed( + &confirmed_forks, &blockstore, - &mut duplicate_slots_tracker, - &mut gossip_duplicate_confirmed_slots, - &mut epoch_slots_frozen_slots, &bank_forks, &mut progress, + &mut duplicate_slots_tracker, &mut heaviest_subtree_fork_choice, + &mut epoch_slots_frozen_slots, &mut duplicate_slots_to_repair, &ancestor_hashes_replay_update_sender, ); - process_gossip_duplicate_confirmed_slots_time.stop(); - + } + compute_slot_stats_time.stop(); - // Ingest any new verified votes from gossip. Important for fork choice - // and switching proofs because these may be votes that haven't yet been - // included in a block, so we may not have yet observed these votes just - // by replaying blocks. - let mut process_unfrozen_gossip_verified_vote_hashes_time = Measure::start("process_gossip_verified_vote_hashes"); - Self::process_gossip_verified_vote_hashes( - &gossip_verified_vote_hash_receiver, - &mut unfrozen_gossip_verified_vote_hashes, - &heaviest_subtree_fork_choice, - &mut latest_validator_votes_for_frozen_banks, + let mut select_forks_time = Measure::start("select_forks_time"); + let (heaviest_bank, heaviest_bank_on_same_voted_fork) = + heaviest_subtree_fork_choice.select_forks( + &frozen_banks, + &tower, + &progress, + &ancestors, + &bank_forks, ); - for _ in gossip_verified_vote_hash_receiver.try_iter() {} - process_unfrozen_gossip_verified_vote_hashes_time.stop(); + select_forks_time.stop(); - // Check to remove any duplicated slots from fork choice - let mut process_duplicate_slots_time = Measure::start("process_duplicate_slots"); - if !tpu_has_bank { - Self::process_duplicate_slots( - &blockstore, - &duplicate_slots_receiver, - &mut duplicate_slots_tracker, - &gossip_duplicate_confirmed_slots, - &mut epoch_slots_frozen_slots, - &bank_forks, - &mut progress, - &mut heaviest_subtree_fork_choice, - &mut duplicate_slots_to_repair, - &ancestor_hashes_replay_update_sender, + Self::check_for_vote_only_mode( + heaviest_bank.slot(), + forks_root, + &in_vote_only_mode, + &bank_forks, + ); + + if let Some(heaviest_bank_on_same_voted_fork) = + heaviest_bank_on_same_voted_fork.as_ref() + { + if let Some(my_latest_landed_vote) = + progress.my_latest_landed_vote(heaviest_bank_on_same_voted_fork.slot()) + { + Self::refresh_last_vote( + &mut tower, + heaviest_bank_on_same_voted_fork, + my_latest_landed_vote, + &vote_account, + &identity_keypair, + &authorized_voter_keypairs.read().unwrap(), + &mut voted_signatures, + has_new_vote_been_rooted, + &mut last_vote_refresh_time, + &voting_sender, + wait_to_vote_slot, ); } - process_duplicate_slots_time.stop(); - - let mut collect_frozen_banks_time = Measure::start("frozen_banks"); - let mut frozen_banks: Vec<_> = bank_forks - .read() - .unwrap() - .frozen_banks() - .into_iter() - .filter(|(slot, _)| *slot >= forks_root) - .map(|(_, bank)| bank) - .collect(); - collect_frozen_banks_time.stop(); - - let mut compute_bank_stats_time = Measure::start("compute_bank_stats"); - let newly_computed_slot_stats = Self::compute_bank_stats( - &vote_account, - &ancestors, - &mut frozen_banks, - &mut tower, - &mut progress, - &vote_tracker, - &cluster_slots, - &bank_forks, - &mut heaviest_subtree_fork_choice, - &mut latest_validator_votes_for_frozen_banks, + } + + let mut select_vote_and_reset_forks_time = + Measure::start("select_vote_and_reset_forks"); + let SelectVoteAndResetForkResult { + vote_bank, + reset_bank, + heaviest_fork_failures, + } = Self::select_vote_and_reset_forks( + &heaviest_bank, + heaviest_bank_on_same_voted_fork.as_ref(), + &ancestors, + &descendants, + &progress, + &mut tower, + &latest_validator_votes_for_frozen_banks, + &heaviest_subtree_fork_choice, + ); + select_vote_and_reset_forks_time.stop(); + + let mut heaviest_fork_failures_time = Measure::start("heaviest_fork_failures_time"); + if tower.is_recent(heaviest_bank.slot()) && !heaviest_fork_failures.is_empty() { + info!( + "Couldn't vote on heaviest fork: {:?}, heaviest_fork_failures: {:?}", + heaviest_bank.slot(), + heaviest_fork_failures ); - compute_bank_stats_time.stop(); - - let mut compute_slot_stats_time = Measure::start("compute_slot_stats_time"); - for slot in newly_computed_slot_stats { - let fork_stats = progress.get_fork_stats(slot).unwrap(); - let confirmed_forks = Self::confirm_forks( - &tower, - &fork_stats.voted_stakes, - fork_stats.total_stake, - &progress, - &bank_forks, - ); - Self::mark_slots_confirmed(&confirmed_forks, &blockstore, &bank_forks, &mut progress, &mut duplicate_slots_tracker, &mut heaviest_subtree_fork_choice, &mut epoch_slots_frozen_slots, &mut duplicate_slots_to_repair, &ancestor_hashes_replay_update_sender); - } - compute_slot_stats_time.stop(); - - let mut select_forks_time = Measure::start("select_forks_time"); - let (heaviest_bank, heaviest_bank_on_same_voted_fork) = heaviest_subtree_fork_choice - .select_forks(&frozen_banks, &tower, &progress, &ancestors, &bank_forks); - select_forks_time.stop(); - - Self::check_for_vote_only_mode(heaviest_bank.slot(), forks_root, &in_vote_only_mode, &bank_forks); - - if let Some(heaviest_bank_on_same_voted_fork) = heaviest_bank_on_same_voted_fork.as_ref() { - if let Some(my_latest_landed_vote) = progress.my_latest_landed_vote(heaviest_bank_on_same_voted_fork.slot()) { - Self::refresh_last_vote(&mut tower, - heaviest_bank_on_same_voted_fork, - my_latest_landed_vote, - &vote_account, - &identity_keypair, - &authorized_voter_keypairs.read().unwrap(), - &mut voted_signatures, - has_new_vote_been_rooted, &mut - last_vote_refresh_time, - &voting_sender, - wait_to_vote_slot, - ); + for r in heaviest_fork_failures { + if let HeaviestForkFailures::NoPropagatedConfirmation(slot) = r { + if let Some(latest_leader_slot) = + progress.get_latest_leader_slot_must_exist(slot) + { + progress.log_propagated_stats(latest_leader_slot, &bank_forks); + } } } + } + heaviest_fork_failures_time.stop(); + + let mut voting_time = Measure::start("voting_time"); + // Vote on a fork + if let Some((ref vote_bank, ref switch_fork_decision)) = vote_bank { + if let Some(votable_leader) = + leader_schedule_cache.slot_leader_at(vote_bank.slot(), Some(vote_bank)) + { + Self::log_leader_change( + &my_pubkey, + vote_bank.slot(), + &mut current_leader, + &votable_leader, + ); + } - let mut select_vote_and_reset_forks_time = - Measure::start("select_vote_and_reset_forks"); - let SelectVoteAndResetForkResult { + Self::handle_votable_bank( vote_bank, - reset_bank, - heaviest_fork_failures, - } = Self::select_vote_and_reset_forks( - &heaviest_bank, - heaviest_bank_on_same_voted_fork.as_ref(), - &ancestors, - &descendants, - &progress, + switch_fork_decision, + &bank_forks, &mut tower, - &latest_validator_votes_for_frozen_banks, - &heaviest_subtree_fork_choice, + &mut progress, + &vote_account, + &identity_keypair, + &authorized_voter_keypairs.read().unwrap(), + &blockstore, + &leader_schedule_cache, + &lockouts_sender, + &accounts_background_request_sender, + &latest_root_senders, + &rpc_subscriptions, + &block_commitment_cache, + &mut heaviest_subtree_fork_choice, + &bank_notification_sender, + &mut duplicate_slots_tracker, + &mut gossip_duplicate_confirmed_slots, + &mut unfrozen_gossip_verified_vote_hashes, + &mut voted_signatures, + &mut has_new_vote_been_rooted, + &mut replay_timing, + &voting_sender, + &mut epoch_slots_frozen_slots, + &drop_bank_sender, + wait_to_vote_slot, ); - select_vote_and_reset_forks_time.stop(); + }; + voting_time.stop(); - let mut heaviest_fork_failures_time = Measure::start("heaviest_fork_failures_time"); - if tower.is_recent(heaviest_bank.slot()) && !heaviest_fork_failures.is_empty() { + let mut reset_bank_time = Measure::start("reset_bank"); + // Reset onto a fork + if let Some(reset_bank) = reset_bank { + if last_reset != reset_bank.last_blockhash() { info!( - "Couldn't vote on heaviest fork: {:?}, heaviest_fork_failures: {:?}", - heaviest_bank.slot(), - heaviest_fork_failures + "vote bank: {:?} reset bank: {:?}", + vote_bank + .as_ref() + .map(|(b, switch_fork_decision)| (b.slot(), switch_fork_decision)), + reset_bank.slot(), + ); + let fork_progress = progress + .get(&reset_bank.slot()) + .expect("bank to reset to must exist in progress map"); + datapoint_info!( + "blocks_produced", + ("num_blocks_on_fork", fork_progress.num_blocks_on_fork, i64), + ( + "num_dropped_blocks_on_fork", + fork_progress.num_dropped_blocks_on_fork, + i64 + ), ); - for r in heaviest_fork_failures { - if let HeaviestForkFailures::NoPropagatedConfirmation(slot) = r { - if let Some(latest_leader_slot) = - progress.get_latest_leader_slot_must_exist(slot) - { - progress.log_propagated_stats(latest_leader_slot, &bank_forks); - } - } - } - } - heaviest_fork_failures_time.stop(); + if my_pubkey != cluster_info.id() { + identity_keypair = cluster_info.keypair().clone(); + let my_old_pubkey = my_pubkey; + my_pubkey = identity_keypair.pubkey(); + + // Load the new identity's tower + tower = Tower::restore(tower_storage.as_ref(), &my_pubkey) + .and_then(|restored_tower| { + let root_bank = bank_forks.read().unwrap().root_bank(); + let slot_history = root_bank.get_slot_history(); + restored_tower.adjust_lockouts_after_replay( + root_bank.slot(), + &slot_history, + ) + }) + .unwrap_or_else(|err| { + if err.is_file_missing() { + Tower::new_from_bankforks( + &bank_forks.read().unwrap(), + &my_pubkey, + &vote_account, + ) + } else { + error!("Failed to load tower for {}: {}", my_pubkey, err); + std::process::exit(1); + } + }); - let mut voting_time = Measure::start("voting_time"); - // Vote on a fork - if let Some((ref vote_bank, ref switch_fork_decision)) = vote_bank { - if let Some(votable_leader) = - leader_schedule_cache.slot_leader_at(vote_bank.slot(), Some(vote_bank)) - { - Self::log_leader_change( - &my_pubkey, - vote_bank.slot(), - &mut current_leader, - &votable_leader, - ); + // Ensure the validator can land votes with the new identity before + // becoming leader + has_new_vote_been_rooted = !wait_for_vote_to_start_leader; + warn!("Identity changed from {} to {}", my_old_pubkey, my_pubkey); } - Self::handle_votable_bank( - vote_bank, - switch_fork_decision, - &bank_forks, - &mut tower, - &mut progress, - &vote_account, - &identity_keypair, - &authorized_voter_keypairs.read().unwrap(), + Self::reset_poh_recorder( + &my_pubkey, &blockstore, + &reset_bank, + &poh_recorder, &leader_schedule_cache, - &lockouts_sender, - &accounts_background_request_sender, - &latest_root_senders, - &rpc_subscriptions, - &block_commitment_cache, - &mut heaviest_subtree_fork_choice, - &bank_notification_sender, - &mut duplicate_slots_tracker, - &mut gossip_duplicate_confirmed_slots, - &mut unfrozen_gossip_verified_vote_hashes, - &mut voted_signatures, - &mut has_new_vote_been_rooted, - &mut replay_timing, - &voting_sender, - &mut epoch_slots_frozen_slots, - &drop_bank_sender, - wait_to_vote_slot, ); - }; - voting_time.stop(); - - let mut reset_bank_time = Measure::start("reset_bank"); - // Reset onto a fork - if let Some(reset_bank) = reset_bank { - if last_reset != reset_bank.last_blockhash() { - info!( - "vote bank: {:?} reset bank: {:?}", - vote_bank.as_ref().map(|(b, switch_fork_decision)| ( - b.slot(), - switch_fork_decision - )), - reset_bank.slot(), - ); - let fork_progress = progress - .get(&reset_bank.slot()) - .expect("bank to reset to must exist in progress map"); - datapoint_info!( - "blocks_produced", - ("num_blocks_on_fork", fork_progress.num_blocks_on_fork, i64), - ( - "num_dropped_blocks_on_fork", - fork_progress.num_dropped_blocks_on_fork, - i64 - ), - ); - - if my_pubkey != cluster_info.id() { - identity_keypair = cluster_info.keypair().clone(); - let my_old_pubkey = my_pubkey; - my_pubkey = identity_keypair.pubkey(); - - // Load the new identity's tower - tower = Tower::restore(tower_storage.as_ref(), &my_pubkey) - .and_then(|restored_tower| { - let root_bank = bank_forks.read().unwrap().root_bank(); - let slot_history = root_bank.get_slot_history(); - restored_tower.adjust_lockouts_after_replay(root_bank.slot(), &slot_history) - }). - unwrap_or_else(|err| { - if err.is_file_missing() { - Tower::new_from_bankforks( - &bank_forks.read().unwrap(), - &my_pubkey, - &vote_account, - ) - } else { - error!("Failed to load tower for {}: {}", my_pubkey, err); - std::process::exit(1); - } - }); - - // Ensure the validator can land votes with the new identity before - // becoming leader - has_new_vote_been_rooted = !wait_for_vote_to_start_leader; - warn!("Identity changed from {} to {}", my_old_pubkey, my_pubkey); - } - - Self::reset_poh_recorder( - &my_pubkey, - &blockstore, - &reset_bank, - &poh_recorder, - &leader_schedule_cache, + last_reset = reset_bank.last_blockhash(); + tpu_has_bank = false; + + if let Some(last_voted_slot) = tower.last_voted_slot() { + // If the current heaviest bank is not a descendant of the last voted slot, + // there must be a partition + let partition_detected = Self::is_partition_detected( + &ancestors, + last_voted_slot, + heaviest_bank.slot(), ); - last_reset = reset_bank.last_blockhash(); - tpu_has_bank = false; - - if let Some(last_voted_slot) = tower.last_voted_slot() { - // If the current heaviest bank is not a descendant of the last voted slot, - // there must be a partition - let partition_detected = Self::is_partition_detected(&ancestors, last_voted_slot, heaviest_bank.slot()); - if !partition_exists && partition_detected - { - warn!( + if !partition_exists && partition_detected { + warn!( "PARTITION DETECTED waiting to join heaviest fork: {} last vote: {:?}, reset slot: {}", heaviest_bank.slot(), last_voted_slot, reset_bank.slot(), ); - inc_new_counter_info!("replay_stage-partition_detected", 1); - datapoint_info!( - "replay_stage-partition", - ("slot", reset_bank.slot() as i64, i64) - ); - partition_exists = true; - } else if partition_exists - && !partition_detected - { - warn!( + inc_new_counter_info!("replay_stage-partition_detected", 1); + datapoint_info!( + "replay_stage-partition", + ("slot", reset_bank.slot() as i64, i64) + ); + partition_exists = true; + } else if partition_exists && !partition_detected { + warn!( "PARTITION resolved heaviest fork: {} last vote: {:?}, reset slot: {}", heaviest_bank.slot(), last_voted_slot, reset_bank.slot() ); - partition_exists = false; - inc_new_counter_info!("replay_stage-partition_resolved", 1); - } + partition_exists = false; + inc_new_counter_info!("replay_stage-partition_resolved", 1); } } } - reset_bank_time.stop(); - - let mut start_leader_time = Measure::start("start_leader_time"); - let mut dump_then_repair_correct_slots_time = Measure::start("dump_then_repair_correct_slots_time"); - // Used for correctness check - let poh_bank = poh_recorder.read().unwrap().bank(); - // Dump any duplicate slots that have been confirmed by the network in - // anticipation of repairing the confirmed version of the slot. - // - // Has to be before `maybe_start_leader()`. Otherwise, `ancestors` and `descendants` - // will be outdated, and we cannot assume `poh_bank` will be in either of these maps. - Self::dump_then_repair_correct_slots(&mut duplicate_slots_to_repair, &mut ancestors, &mut descendants, &mut progress, &bank_forks, &blockstore, poh_bank.map(|bank| bank.slot())); - dump_then_repair_correct_slots_time.stop(); + } + reset_bank_time.stop(); + + let mut start_leader_time = Measure::start("start_leader_time"); + let mut dump_then_repair_correct_slots_time = + Measure::start("dump_then_repair_correct_slots_time"); + // Used for correctness check + let poh_bank = poh_recorder.read().unwrap().bank(); + // Dump any duplicate slots that have been confirmed by the network in + // anticipation of repairing the confirmed version of the slot. + // + // Has to be before `maybe_start_leader()`. Otherwise, `ancestors` and `descendants` + // will be outdated, and we cannot assume `poh_bank` will be in either of these maps. + Self::dump_then_repair_correct_slots( + &mut duplicate_slots_to_repair, + &mut ancestors, + &mut descendants, + &mut progress, + &bank_forks, + &blockstore, + poh_bank.map(|bank| bank.slot()), + ); + dump_then_repair_correct_slots_time.stop(); - let mut retransmit_not_propagated_time = Measure::start("retransmit_not_propagated_time"); - Self::retransmit_latest_unpropagated_leader_slot( + let mut retransmit_not_propagated_time = + Measure::start("retransmit_not_propagated_time"); + Self::retransmit_latest_unpropagated_leader_slot( + &poh_recorder, + &retransmit_slots_sender, + &mut progress, + ); + retransmit_not_propagated_time.stop(); + + // From this point on, its not safe to use ancestors/descendants since maybe_start_leader + // may add a bank that will not included in either of these maps. + drop(ancestors); + drop(descendants); + if !tpu_has_bank { + Self::maybe_start_leader( + &my_pubkey, + &bank_forks, &poh_recorder, - &retransmit_slots_sender, + &leader_schedule_cache, + &rpc_subscriptions, &mut progress, + &retransmit_slots_sender, + &mut skipped_slots_info, + has_new_vote_been_rooted, + transaction_status_sender.is_some(), ); - retransmit_not_propagated_time.stop(); - - // From this point on, its not safe to use ancestors/descendants since maybe_start_leader - // may add a bank that will not included in either of these maps. - drop(ancestors); - drop(descendants); - if !tpu_has_bank { - Self::maybe_start_leader( + + let poh_bank = poh_recorder.read().unwrap().bank(); + if let Some(bank) = poh_bank { + Self::log_leader_change( + &my_pubkey, + bank.slot(), + &mut current_leader, &my_pubkey, - &bank_forks, - &poh_recorder, - &leader_schedule_cache, - &rpc_subscriptions, - &mut progress, - &retransmit_slots_sender, - &mut skipped_slots_info, - has_new_vote_been_rooted, - transaction_status_sender.is_some(), ); - - let poh_bank = poh_recorder.read().unwrap().bank(); - if let Some(bank) = poh_bank { - Self::log_leader_change( - &my_pubkey, - bank.slot(), - &mut current_leader, - &my_pubkey, - ); - } } - start_leader_time.stop(); - - let mut wait_receive_time = Measure::start("wait_receive_time"); - if !did_complete_bank { - // only wait for the signal if we did not just process a bank; maybe there are more slots available - - let timer = Duration::from_millis(100); - let result = ledger_signal_receiver.recv_timeout(timer); - match result { - Err(RecvTimeoutError::Timeout) => (), - Err(_) => break, - Ok(_) => trace!("blockstore signal"), - }; - } - wait_receive_time.stop(); - - replay_timing.update( - collect_frozen_banks_time.as_us(), - compute_bank_stats_time.as_us(), - select_vote_and_reset_forks_time.as_us(), - start_leader_time.as_us(), - reset_bank_time.as_us(), - voting_time.as_us(), - select_forks_time.as_us(), - compute_slot_stats_time.as_us(), - generate_new_bank_forks_time.as_us(), - replay_active_banks_time.as_us(), - wait_receive_time.as_us(), - heaviest_fork_failures_time.as_us(), - u64::from(did_complete_bank), - process_gossip_duplicate_confirmed_slots_time.as_us(), - process_unfrozen_gossip_verified_vote_hashes_time.as_us(), - process_duplicate_slots_time.as_us(), - dump_then_repair_correct_slots_time.as_us(), - retransmit_not_propagated_time.as_us(), - ); } - }) + start_leader_time.stop(); + + let mut wait_receive_time = Measure::start("wait_receive_time"); + if !did_complete_bank { + // only wait for the signal if we did not just process a bank; maybe there are more slots available + + let timer = Duration::from_millis(100); + let result = ledger_signal_receiver.recv_timeout(timer); + match result { + Err(RecvTimeoutError::Timeout) => (), + Err(_) => break, + Ok(_) => trace!("blockstore signal"), + }; + } + wait_receive_time.stop(); + + replay_timing.update( + collect_frozen_banks_time.as_us(), + compute_bank_stats_time.as_us(), + select_vote_and_reset_forks_time.as_us(), + start_leader_time.as_us(), + reset_bank_time.as_us(), + voting_time.as_us(), + select_forks_time.as_us(), + compute_slot_stats_time.as_us(), + generate_new_bank_forks_time.as_us(), + replay_active_banks_time.as_us(), + wait_receive_time.as_us(), + heaviest_fork_failures_time.as_us(), + u64::from(did_complete_bank), + process_gossip_duplicate_confirmed_slots_time.as_us(), + process_unfrozen_gossip_verified_vote_hashes_time.as_us(), + process_duplicate_slots_time.as_us(), + dump_then_repair_correct_slots_time.as_us(), + retransmit_not_propagated_time.as_us(), + ); + } + }; + let t_replay = Builder::new() + .name("solReplayStage".to_string()) + .spawn(run_replay) .unwrap(); Self { @@ -2078,9 +2122,15 @@ impl ReplayStage { if my_latest_landed_vote >= last_voted_slot || heaviest_bank_on_same_fork .is_hash_valid_for_age(&tower.last_vote_tx_blockhash(), MAX_PROCESSING_AGE) - // In order to avoid voting on multiple forks all past MAX_PROCESSING_AGE that don't - // include the last voted blockhash - || last_vote_refresh_time.last_refresh_time.elapsed().as_millis() < MAX_VOTE_REFRESH_INTERVAL_MILLIS as u128 + || { + // In order to avoid voting on multiple forks all past MAX_PROCESSING_AGE that don't + // include the last voted blockhash + last_vote_refresh_time + .last_refresh_time + .elapsed() + .as_millis() + < MAX_VOTE_REFRESH_INTERVAL_MILLIS as u128 + } { return; } @@ -3130,13 +3180,14 @@ impl ReplayStage { // all its ancestor banks have also reached propagation // threshold as well (Validators can't have voted for a // descendant without also getting the ancestor block) - if leader_propagated_stats.is_propagated || + if leader_propagated_stats.is_propagated || { // If there's no new validators to record, and there's no // newly achieved threshold, then there's no further // information to propagate backwards to past leader blocks - (newly_voted_pubkeys.is_empty() && cluster_slot_pubkeys.is_empty() && - !did_newly_reach_threshold) - { + newly_voted_pubkeys.is_empty() + && cluster_slot_pubkeys.is_empty() + && !did_newly_reach_threshold + } { break; } From d8d0c0fc7cbb9a82c91672b88969a770bbbc74d0 Mon Sep 17 00:00:00 2001 From: bji Date: Thu, 20 Oct 2022 15:46:47 -0700 Subject: [PATCH 253/465] proposal: Added timely vote credits proposal. (#28162) Added timely vote credits proposal. (cherry picked from commit a2e1228c1f595a3c1fcd9ae09e430da12a6ac6b7) --- docs/src/proposals/timely-vote-credits.md | 190 ++++++++++++++++++++++ 1 file changed, 190 insertions(+) create mode 100644 docs/src/proposals/timely-vote-credits.md diff --git a/docs/src/proposals/timely-vote-credits.md b/docs/src/proposals/timely-vote-credits.md new file mode 100644 index 00000000000000..7875b815c6b11b --- /dev/null +++ b/docs/src/proposals/timely-vote-credits.md @@ -0,0 +1,190 @@ +--- +title: Timely Vote Credits +--- + +## Timely Vote Credits + +This design describes a modification to the method that is used to calculate +vote credits earned by validator votes. + +Vote credits are the accounting method used to determine what percentage of +inflation rewards a validator earns on behalf of its stakers. Currently, when +a slot that a validator has previously voted on is "rooted", it earns 1 vote +credit. A "rooted" slot is one which has received full committment by the +validator (i.e. has been finalized). + +One problem with this simple accounting method is that it awards one credit +regardless of how "old" the slot that was voted on at the time that it was +voted on. This means that a validator can delay its voting for many slots in +order to survey forks and wait to make votes that are less likely to be +expired, and without incurring any penalty for doing so. This is not just a +theoretical concern: there are known and documented instances of validators +using this technique to significantly delay their voting while earning more +credits as a result. + + +### Proposed Change + +The proposal is to award a variable number of vote credits per voted on slot, +with more credits being given for votes that have "less latency" than votes +that have "more latency". + +In this context, "latency" is the number of slots in between the slot that is +being voted on and the slot in which the vote has landed. Because a slot +cannot be voted on until after it has been completed, the minimum possible +latency is 1, which would occur when a validator voted as quickly as possible, +transmitting its vote on that slot in time for it to be included in the very +next slot. + +Credits awarded would become a function of this latency, with lower latencies +awarding more credits. This will discourage intentional "lagging", because +delaying a vote for any slots decreases the number of credits that vote will +earn, because it will necessarily land in a later slot if it is delayed, and +then earn a lower number of credits than it would have earned had it been +transmitted immediately and landed in an earlier slot. + +### Grace Period + +If landing a vote with 1 slot latency awarded more credit than landing that +same vote in 2 slots latency, then validators who could land votes +consistently wihthin 1 slot would have a credits earning advantage over those +who could not. Part of the latency when transmitting votes is unavoidable as +it's a function of geographical distance between the sender and receiver of +the vote. The Solana network is spread around the world but it is not evenly +distributed over the whole planet; there are some locations which are, on +average, more distant from the network than others are. + +It would likely be harmful to the network to encourage tight geographical +concentration - if, for example, the only way to achieve 1 slot latency was to +be within a specific country - then a very strict credit rewards schedule +would encourage all validators to move to the same country in order to +maximize their credit earnings. + +For this reason, the credits reward schedule should have a built-in "grace +period" that gives all validators a "reasonable" amount of time to land their +votes. This will reduce the credits earning disadvantage that comes from +being more distant from the network. A balance needs to be struck between the +strictest rewards schedule, which most strongly discourages intentional +lagging, and more lenient rewards schedules, which improves credit earnings +for distant validators who are not artificially lagging. + +Historical voting data has been analyzed over many epochs and the data +suggests that the smallest grace period that allows for very minimal impact on +well behaved distant validators is 3 slots, which means that all slots voted +on within 3 slots will award maximum vote credits to the voting validator. +This gives validators nearly 2 seconds to land their votes without penalty. +The maximum latency between two points on Earth is about 100 ms, so allowing a +full 1,500 ms to 2,000 ms latency without penalty should not have adverse +impact on distant validators. + +### Maximum Vote Credits + +Another factor to consider is what the maximum vote credits to award for a +vote should be. Assuming linear reduction in vote credits awarded (where 1 +slot of additional lag reduces earned vote credits by 1), the maximum vote +credits value determines how much "penalty" there is for each additional slot +of latency. For example, a value of 10 would mean that after the grace period +slots, every additional slot of latency would result in a 10% reduction in +vote credits earned as each subsequent slot earns 1 credit less out of a +maximum possible 10 credits. + +Again, historical voting data was analyzed over many epochs and the conclusion +drawn was that a maximum credits of 10 is the largest value that can be used +and still have a noticeable effect on known laggers. Values higher than that +result in such a small penalty for each slot of lagging that intentional +lagging is still too profitable. Lower values are even more punishing to +intentional lagging; but an attempt has been made to conservatively choose the +highest value that produces noticeable results. + +The selection of these values is partially documented here: + +https://www.shinobi-systems.com/timely_voting_proposal + +The above document is somewhat out of date with more recent analysis, which +occurred in this github issue: + +https://github.com/solana-labs/solana/issues/19002 + +To summarize the findings of these documents: analysis over many epochs showed +that almost all validators from all regions have an average vote latency of 1 +slot or less. The validators with higher average latency are either known +laggers, or are not representative of their region since many other validators +in the same region achieve low latency voting. With a maximum vote credit of +10, there is almost no change in vote credits earned relative to the highest vote +earner by the majority of validators, aside from a general uplift of about 0.4%. +Additionally, data centers were analyzed to ensure that there aren't regions of +the world that would be adversely affected, and none were found. + + +### Method of Implementation + +When a Vote or VoteStateUpdate instruction is received by a validator, it will +use the Clock sysvar to identify the slot in which that instruction has +landed. For any newly voted on slot within that Vote or VoteStateUpdate +transaction, the validator will record the vote latency of that slot as +(voted_in_slot - voted_on_slot). + +These vote latencies will be stored a new vector of u8 latency values appended +to the end of the VoteState. VoteState currently has ~200 bytes of free space +at the end that is unused, so this new vector of u8 values should easily fit +within this available space. Because VoteState is an ABI frozen structure, +utilizing the mechanisms for updating frozen ABI will be required, which will +complicate the change. Furthermore, because VoteState is embedded in the +Tower data structure and it is frozen ABI as well, updates to the frozen ABI +mechanisms for Tower will be needed also. These are almost entirely +mechanical changes though, that involve ensuring that older versions of these +data structures can be updated to the new version as they are read in, and the +new version written out when the data structure is next persisted. + +The credits to award for a rooted slot will be calculated using the latency +value stored in latency vector for the slot, and a formula that awards +latencies of 1 - 3 slots ten credits, with a 1 credit reduction for each vote +latency after 3. Rooted slots will always be awarded a minimum credit of 1 +(never 0) so that very old votes, possibly necessary in times of network +stress, are not discouraged. + +To summarize the above: latency is recorded in a new Vector at the end of +VoteState when a vote first lands, but the credits for that slot are not +awarded until the slot becomes rooted, at which point the latency that was +recorded is used to compute the credits to award for that newly rooted slot. + +When a Vote instruction is processed, the changes are fairly easy to implement +as Vote can only add new slots to the end of Lockouts and pop existing slots +off of the back (which become rooted), so the logic merely has to compute +rewards for the new roots, and new latencies for the newly added slots, both +of which can be processed in the fairly simple existing logic for Vote +processing. + +When a VoteStateUpdate instruction is processed: + +1. For each slot that was in the previous VoteState but are not in the new +VoteState because they have been rooted in the transition from the old +VoteState to the new VoteState, credits to award are calculated based on the +latency that was recorded for them and still available in the old VoteState. + +2. For each slot that was in both the previous VoteState and the new +VoteState, the latency that was previously recorded for that slot is copied +from the old VoteState to the new VoteState. + +3. For each slot that is in the new VoteState but wasn't in the old VoteState, +the latency value is calculated for this new slot according to what slot the +vote is for and what slot is in the Clock (i.e. the slot this VoteStateUpdate +tx landed in) and this latency is stored in VoteState for that slot. + +The code to handle this is more complex, because VoteStateUpdate may include +removal of slots that expired as performed by the voting validator, in +addition to slots that have been rooted and new slots added. However, the +assumptions that are needed to handle VoteStateUpdate with timely vote credits +are already guaranteed by existing VoteStateUpdate correctness checking code: + +The existing VoteStateUpdate processing code already ensures that (1) only +roots slots that could actually have been rooted in the transition from the +old VoteState to the new VoteState, so there is no danger of over-counting +credits (i.e. imagine that a 'cheating' validator "pretended" that slots were +rooted by dropping them off of the back of the new VoteState before they have +actually achieved 32 confirmations; the existing logic prevents this). + +The existing VoteStateUpdate processing code already ensures that (2) new +slots included in the new VoteState are only slots after slots that have +already been voted on in the old VoteState (i.e. can't inject new slots in the +middle of slots already voted on). From 38a48e189eac32132b37029bf9ac1ed3e03d3ed9 Mon Sep 17 00:00:00 2001 From: behzad nouri Date: Mon, 12 Dec 2022 03:14:58 +0000 Subject: [PATCH 254/465] fixes rust code formatting in core/src/consensus.rs (backport #29204) (#29205) --- core/src/consensus.rs | 523 ++++++++++++++++++++++-------------------- 1 file changed, 270 insertions(+), 253 deletions(-) diff --git a/core/src/consensus.rs b/core/src/consensus.rs index 5870e4cf5fb765..2fc7b1f93d51fb 100644 --- a/core/src/consensus.rs +++ b/core/src/consensus.rs @@ -654,285 +654,302 @@ impl Tower { latest_validator_votes_for_frozen_banks: &LatestValidatorVotesForFrozenBanks, heaviest_subtree_fork_choice: &HeaviestSubtreeForkChoice, ) -> SwitchForkDecision { - self.last_voted_slot_hash() - .map(|(last_voted_slot, last_voted_hash)| { - let root = self.root(); - let empty_ancestors = HashSet::default(); - let empty_ancestors_due_to_minor_unsynced_ledger = || { - // This condition (stale stray last vote) shouldn't occur under normal validator - // operation, indicating something unusual happened. - // This condition could be introduced by manual ledger mishandling, - // validator SEGV, OS/HW crash, or plain No Free Space FS error. - - // However, returning empty ancestors as a fallback here shouldn't result in - // slashing by itself (Note that we couldn't fully preclude any kind of slashing if - // the failure was OS or HW level). - - // Firstly, lockout is ensured elsewhere. - - // Also, there is no risk of optimistic conf. violation. Although empty ancestors - // could result in incorrect (= more than actual) locked_out_stake and - // false-positive SwitchProof later in this function, there should be no such a - // heavier fork candidate, first of all, if the last vote (or any of its - // unavailable ancestors) were already optimistically confirmed. - // The only exception is that other validator is already violating it... - if self.is_first_switch_check() && switch_slot < last_voted_slot { - // `switch < last` is needed not to warn! this message just because of using - // newer snapshots on validator restart - let message = format!( + let (last_voted_slot, last_voted_hash) = match self.last_voted_slot_hash() { + None => return SwitchForkDecision::SameFork, + Some(slot_hash) => slot_hash, + }; + let root = self.root(); + let empty_ancestors = HashSet::default(); + let empty_ancestors_due_to_minor_unsynced_ledger = || { + // This condition (stale stray last vote) shouldn't occur under normal validator + // operation, indicating something unusual happened. + // This condition could be introduced by manual ledger mishandling, + // validator SEGV, OS/HW crash, or plain No Free Space FS error. + + // However, returning empty ancestors as a fallback here shouldn't result in + // slashing by itself (Note that we couldn't fully preclude any kind of slashing if + // the failure was OS or HW level). + + // Firstly, lockout is ensured elsewhere. + + // Also, there is no risk of optimistic conf. violation. Although empty ancestors + // could result in incorrect (= more than actual) locked_out_stake and + // false-positive SwitchProof later in this function, there should be no such a + // heavier fork candidate, first of all, if the last vote (or any of its + // unavailable ancestors) were already optimistically confirmed. + // The only exception is that other validator is already violating it... + if self.is_first_switch_check() && switch_slot < last_voted_slot { + // `switch < last` is needed not to warn! this message just because of using + // newer snapshots on validator restart + let message = format!( "bank_forks doesn't have corresponding data for the stray restored \ last vote({}), meaning some inconsistency between saved tower and ledger.", last_voted_slot ); - warn!("{}", message); - datapoint_warn!("tower_warn", ("warn", message, String)); - } - &empty_ancestors - }; + warn!("{}", message); + datapoint_warn!("tower_warn", ("warn", message, String)); + } + &empty_ancestors + }; - let suspended_decision_due_to_major_unsynced_ledger = || { - // This peculiar corner handling is needed mainly for a tower which is newer than - // blockstore. (Yeah, we tolerate it for ease of maintaining validator by operators) - // This condition could be introduced by manual ledger mishandling, - // validator SEGV, OS/HW crash, or plain No Free Space FS error. - - // When we're in this clause, it basically means validator is badly running - // with a future tower while replaying past slots, especially problematic is - // last_voted_slot. - // So, don't re-vote on it by returning pseudo FailedSwitchThreshold, otherwise - // there would be slashing because of double vote on one of last_vote_ancestors. - // (Well, needless to say, re-creating the duplicate block must be handled properly - // at the banking stage: https://github.com/solana-labs/solana/issues/8232) - // - // To be specific, the replay stage is tricked into a false perception where - // last_vote_ancestors is AVAILABLE for descendant-of-`switch_slot`, stale, and - // stray slots (which should always be empty_ancestors). - // - // This is covered by test_future_tower_* in local_cluster - SwitchForkDecision::FailedSwitchThreshold(0, total_stake) - }; + let suspended_decision_due_to_major_unsynced_ledger = || { + // This peculiar corner handling is needed mainly for a tower which is newer than + // blockstore. (Yeah, we tolerate it for ease of maintaining validator by operators) + // This condition could be introduced by manual ledger mishandling, + // validator SEGV, OS/HW crash, or plain No Free Space FS error. + + // When we're in this clause, it basically means validator is badly running + // with a future tower while replaying past slots, especially problematic is + // last_voted_slot. + // So, don't re-vote on it by returning pseudo FailedSwitchThreshold, otherwise + // there would be slashing because of double vote on one of last_vote_ancestors. + // (Well, needless to say, re-creating the duplicate block must be handled properly + // at the banking stage: https://github.com/solana-labs/solana/issues/8232) + // + // To be specific, the replay stage is tricked into a false perception where + // last_vote_ancestors is AVAILABLE for descendant-of-`switch_slot`, stale, and + // stray slots (which should always be empty_ancestors). + // + // This is covered by test_future_tower_* in local_cluster + SwitchForkDecision::FailedSwitchThreshold(0, total_stake) + }; - let rollback_due_to_to_to_duplicate_ancestor = |latest_duplicate_ancestor| { - SwitchForkDecision::FailedSwitchDuplicateRollback(latest_duplicate_ancestor) - }; + let rollback_due_to_to_to_duplicate_ancestor = |latest_duplicate_ancestor| { + SwitchForkDecision::FailedSwitchDuplicateRollback(latest_duplicate_ancestor) + }; - // `heaviest_subtree_fork_choice` entries are not cleaned by duplicate block purging/rollback logic, - // so this is safe to check here. We return here if the last voted slot was rolled back/purged due to - // being a duplicate because `ancestors`/`descendants`/`progress` structurs may be missing this slot due - // to duplicate purging. This would cause many of the `unwrap()` checks below to fail. - // - // TODO: Handle if the last vote is on a dupe, and then we restart. The dupe won't be in - // heaviest_subtree_fork_choice, so `heaviest_subtree_fork_choice.latest_invalid_ancestor()` will return - // None, but the last vote will be persisted in tower. - let switch_hash = progress - .get_hash(switch_slot) - .expect("Slot we're trying to switch to must exist AND be frozen in progress map"); - if let Some(latest_duplicate_ancestor) = heaviest_subtree_fork_choice - .latest_invalid_ancestor(&(last_voted_slot, last_voted_hash)) - { - // We're rolling back because one of the ancestors of the last vote was a duplicate. In this - // case, it's acceptable if the switch candidate is one of ancestors of the previous vote, - // just fail the switch check because there's no point in voting on an ancestor. ReplayStage - // should then have a special case continue building an alternate fork from this ancestor, NOT - // the `last_voted_slot`. This is in contrast to usual SwitchFailure where ReplayStage continues to build blocks - // on latest vote. See `ReplayStage::select_vote_and_reset_forks()` for more details. - if heaviest_subtree_fork_choice.is_strict_ancestor( - &(switch_slot, switch_hash), - &(last_voted_slot, last_voted_hash), - ) { - return rollback_due_to_to_to_duplicate_ancestor(latest_duplicate_ancestor); - } else if progress - .get_hash(last_voted_slot) - .map(|current_slot_hash| current_slot_hash != last_voted_hash) - .unwrap_or(true) - { - // Our last vote slot was purged because it was on a duplicate fork, don't continue below - // where checks may panic. We allow a freebie vote here that may violate switching - // thresholds - // TODO: Properly handle this case - info!( - "Allowing switch vote on {:?} because last vote {:?} was rolled back", - (switch_slot, switch_hash), - (last_voted_slot, last_voted_hash) - ); - return SwitchForkDecision::SwitchProof(Hash::default()); - } - } + // `heaviest_subtree_fork_choice` entries are not cleaned by duplicate block purging/rollback logic, + // so this is safe to check here. We return here if the last voted slot was rolled back/purged due to + // being a duplicate because `ancestors`/`descendants`/`progress` structurs may be missing this slot due + // to duplicate purging. This would cause many of the `unwrap()` checks below to fail. + // + // TODO: Handle if the last vote is on a dupe, and then we restart. The dupe won't be in + // heaviest_subtree_fork_choice, so `heaviest_subtree_fork_choice.latest_invalid_ancestor()` will return + // None, but the last vote will be persisted in tower. + let switch_hash = progress + .get_hash(switch_slot) + .expect("Slot we're trying to switch to must exist AND be frozen in progress map"); + if let Some(latest_duplicate_ancestor) = heaviest_subtree_fork_choice + .latest_invalid_ancestor(&(last_voted_slot, last_voted_hash)) + { + // We're rolling back because one of the ancestors of the last vote was a duplicate. In this + // case, it's acceptable if the switch candidate is one of ancestors of the previous vote, + // just fail the switch check because there's no point in voting on an ancestor. ReplayStage + // should then have a special case continue building an alternate fork from this ancestor, NOT + // the `last_voted_slot`. This is in contrast to usual SwitchFailure where ReplayStage continues to build blocks + // on latest vote. See `ReplayStage::select_vote_and_reset_forks()` for more details. + if heaviest_subtree_fork_choice.is_strict_ancestor( + &(switch_slot, switch_hash), + &(last_voted_slot, last_voted_hash), + ) { + return rollback_due_to_to_to_duplicate_ancestor(latest_duplicate_ancestor); + } else if progress + .get_hash(last_voted_slot) + .map(|current_slot_hash| current_slot_hash != last_voted_hash) + .unwrap_or(true) + { + // Our last vote slot was purged because it was on a duplicate fork, don't continue below + // where checks may panic. We allow a freebie vote here that may violate switching + // thresholds + // TODO: Properly handle this case + info!( + "Allowing switch vote on {:?} because last vote {:?} was rolled back", + (switch_slot, switch_hash), + (last_voted_slot, last_voted_hash) + ); + return SwitchForkDecision::SwitchProof(Hash::default()); + } + } - let last_vote_ancestors = ancestors.get(&last_voted_slot).unwrap_or_else(|| { - if self.is_stray_last_vote() { - // Unless last vote is stray and stale, ancestors.get(last_voted_slot) must - // return Some(_), justifying to panic! here. - // Also, adjust_lockouts_after_replay() correctly makes last_voted_slot None, - // if all saved votes are ancestors of replayed_root_slot. So this code shouldn't be - // touched in that case as well. - // In other words, except being stray, all other slots have been voted on while - // this validator has been running, so we must be able to fetch ancestors for - // all of them. - empty_ancestors_due_to_minor_unsynced_ledger() - } else { - panic!("no ancestors found with slot: {}", last_voted_slot); - } - }); + let last_vote_ancestors = ancestors.get(&last_voted_slot).unwrap_or_else(|| { + if self.is_stray_last_vote() { + // Unless last vote is stray and stale, ancestors.get(last_voted_slot) must + // return Some(_), justifying to panic! here. + // Also, adjust_lockouts_after_replay() correctly makes last_voted_slot None, + // if all saved votes are ancestors of replayed_root_slot. So this code shouldn't be + // touched in that case as well. + // In other words, except being stray, all other slots have been voted on while + // this validator has been running, so we must be able to fetch ancestors for + // all of them. + empty_ancestors_due_to_minor_unsynced_ledger() + } else { + panic!("no ancestors found with slot: {}", last_voted_slot); + } + }); - let switch_slot_ancestors = ancestors.get(&switch_slot).unwrap(); + let switch_slot_ancestors = ancestors.get(&switch_slot).unwrap(); - if switch_slot == last_voted_slot || switch_slot_ancestors.contains(&last_voted_slot) { - // If the `switch_slot is a descendant of the last vote, - // no switching proof is necessary - return SwitchForkDecision::SameFork; - } + if switch_slot == last_voted_slot || switch_slot_ancestors.contains(&last_voted_slot) { + // If the `switch_slot is a descendant of the last vote, + // no switching proof is necessary + return SwitchForkDecision::SameFork; + } - if last_vote_ancestors.contains(&switch_slot) { - if self.is_stray_last_vote() { - return suspended_decision_due_to_major_unsynced_ledger(); - } else { - panic!( + if last_vote_ancestors.contains(&switch_slot) { + if self.is_stray_last_vote() { + return suspended_decision_due_to_major_unsynced_ledger(); + } else { + panic!( "Should never consider switching to ancestor ({}) of last vote: {}, ancestors({:?})", switch_slot, last_voted_slot, last_vote_ancestors, ); - } + } + } + + // By this point, we know the `switch_slot` is on a different fork + // (is neither an ancestor nor descendant of `last_vote`), so a + // switching proof is necessary + let switch_proof = Hash::default(); + let mut locked_out_stake = 0; + let mut locked_out_vote_accounts = HashSet::new(); + for (candidate_slot, descendants) in descendants.iter() { + // 1) Don't consider any banks that haven't been frozen yet + // because the needed stats are unavailable + // 2) Only consider lockouts at the latest `frozen` bank + // on each fork, as that bank will contain all the + // lockout intervals for ancestors on that fork as well. + // 3) Don't consider lockouts on the `last_vote` itself + // 4) Don't consider lockouts on any descendants of + // `last_vote` + // 5) Don't consider any banks before the root because + // all lockouts must be ancestors of `last_vote` + if !progress + .get_fork_stats(*candidate_slot) + .map(|stats| stats.computed) + .unwrap_or(false) + || { + // If any of the descendants have the `computed` flag set, then there must be a more + // recent frozen bank on this fork to use, so we can ignore this one. Otherwise, + // even if this bank has descendants, if they have not yet been frozen / stats computed, + // then use this bank as a representative for the fork. + descendants.iter().any(|d| { + progress + .get_fork_stats(*d) + .map(|stats| stats.computed) + .unwrap_or(false) + }) + } + || *candidate_slot == last_voted_slot + || { + // Ignore if the `candidate_slot` is a descendant of the `last_voted_slot`, since we do not + // want to count votes on the same fork. + Self::is_candidate_slot_descendant_of_last_vote( + *candidate_slot, + last_voted_slot, + ancestors, + ) + .expect("exists in descendants map, so must exist in ancestors map") } + || *candidate_slot <= root + { + continue; + } - // By this point, we know the `switch_slot` is on a different fork - // (is neither an ancestor nor descendant of `last_vote`), so a - // switching proof is necessary - let switch_proof = Hash::default(); - let mut locked_out_stake = 0; - let mut locked_out_vote_accounts = HashSet::new(); - for (candidate_slot, descendants) in descendants.iter() { - // 1) Don't consider any banks that haven't been frozen yet - // because the needed stats are unavailable - // 2) Only consider lockouts at the latest `frozen` bank - // on each fork, as that bank will contain all the - // lockout intervals for ancestors on that fork as well. - // 3) Don't consider lockouts on the `last_vote` itself - // 4) Don't consider lockouts on any descendants of - // `last_vote` - // 5) Don't consider any banks before the root because - // all lockouts must be ancestors of `last_vote` - if !progress.get_fork_stats(*candidate_slot).map(|stats| stats.computed).unwrap_or(false) - // If any of the descendants have the `computed` flag set, then there must be a more - // recent frozen bank on this fork to use, so we can ignore this one. Otherwise, - // even if this bank has descendants, if they have not yet been frozen / stats computed, - // then use this bank as a representative for the fork. - || descendants.iter().any(|d| progress.get_fork_stats(*d).map(|stats| stats.computed).unwrap_or(false)) - || *candidate_slot == last_voted_slot - // Ignore if the `candidate_slot` is a descendant of the `last_voted_slot`, since we do not - // want to count votes on the same fork. - || Self::is_candidate_slot_descendant_of_last_vote(*candidate_slot, last_voted_slot, ancestors).expect("exists in descendants map, so must exist in ancestors map") - || *candidate_slot <= root - { + // By the time we reach here, any ancestors of the `last_vote`, + // should have been filtered out, as they all have a descendant, + // namely the `last_vote` itself. + assert!(!last_vote_ancestors.contains(candidate_slot)); + + // Evaluate which vote accounts in the bank are locked out + // in the interval candidate_slot..last_vote, which means + // finding any lockout intervals in the `lockout_intervals` tree + // for this bank that contain `last_vote`. + let lockout_intervals = &progress + .get(candidate_slot) + .unwrap() + .fork_stats + .lockout_intervals; + // Find any locked out intervals for vote accounts in this bank with + // `lockout_interval_end` >= `last_vote`, which implies they are locked out at + // `last_vote` on another fork. + for (_lockout_interval_end, intervals_keyed_by_end) in + lockout_intervals.range((Included(last_voted_slot), Unbounded)) + { + for (lockout_interval_start, vote_account_pubkey) in intervals_keyed_by_end { + if locked_out_vote_accounts.contains(vote_account_pubkey) { continue; } - // By the time we reach here, any ancestors of the `last_vote`, - // should have been filtered out, as they all have a descendant, - // namely the `last_vote` itself. - assert!(!last_vote_ancestors.contains(candidate_slot)); - - // Evaluate which vote accounts in the bank are locked out - // in the interval candidate_slot..last_vote, which means - // finding any lockout intervals in the `lockout_intervals` tree - // for this bank that contain `last_vote`. - let lockout_intervals = &progress - .get(candidate_slot) - .unwrap() - .fork_stats - .lockout_intervals; - // Find any locked out intervals for vote accounts in this bank with - // `lockout_interval_end` >= `last_vote`, which implies they are locked out at - // `last_vote` on another fork. - for (_lockout_interval_end, intervals_keyed_by_end) in - lockout_intervals.range((Included(last_voted_slot), Unbounded)) - { - for (lockout_interval_start, vote_account_pubkey) in intervals_keyed_by_end { - if locked_out_vote_accounts.contains(vote_account_pubkey) { - continue; - } - - // Only count lockouts on slots that are: - // 1) Not ancestors of `last_vote`, meaning being on different fork - // 2) Not from before the current root as we can't determine if - // anything before the root was an ancestor of `last_vote` or not - if !last_vote_ancestors.contains(lockout_interval_start) - // Given a `lockout_interval_start` < root that appears in a - // bank for a `candidate_slot`, it must be that `lockout_interval_start` - // is an ancestor of the current root, because `candidate_slot` is a - // descendant of the current root - && *lockout_interval_start > root - { - let stake = epoch_vote_accounts - .get(vote_account_pubkey) - .map(|(stake, _)| *stake) - .unwrap_or(0); - locked_out_stake += stake; - if (locked_out_stake as f64 / total_stake as f64) - > SWITCH_FORK_THRESHOLD - { - return SwitchForkDecision::SwitchProof(switch_proof); - } - locked_out_vote_accounts.insert(vote_account_pubkey); - } - } - } + // Only count lockouts on slots that are: + // 1) Not ancestors of `last_vote`, meaning being on different fork + // 2) Not from before the current root as we can't determine if + // anything before the root was an ancestor of `last_vote` or not + if !last_vote_ancestors.contains(lockout_interval_start) && { + // Given a `lockout_interval_start` < root that appears in a + // bank for a `candidate_slot`, it must be that `lockout_interval_start` + // is an ancestor of the current root, because `candidate_slot` is a + // descendant of the current root + *lockout_interval_start > root + } { + let stake = epoch_vote_accounts + .get(vote_account_pubkey) + .map(|(stake, _)| *stake) + .unwrap_or(0); + locked_out_stake += stake; + if (locked_out_stake as f64 / total_stake as f64) > SWITCH_FORK_THRESHOLD { + return SwitchForkDecision::SwitchProof(switch_proof); + } + locked_out_vote_accounts.insert(vote_account_pubkey); + } } + } + } - // Check the latest votes for potentially gossip votes that haven't landed yet - for ( - vote_account_pubkey, - (candidate_latest_frozen_vote, _candidate_latest_frozen_vote_hash), - ) in latest_validator_votes_for_frozen_banks.max_gossip_frozen_votes() - { - if locked_out_vote_accounts.contains(&vote_account_pubkey) { - continue; - } + // Check the latest votes for potentially gossip votes that haven't landed yet + for ( + vote_account_pubkey, + (candidate_latest_frozen_vote, _candidate_latest_frozen_vote_hash), + ) in latest_validator_votes_for_frozen_banks.max_gossip_frozen_votes() + { + if locked_out_vote_accounts.contains(&vote_account_pubkey) { + continue; + } - if *candidate_latest_frozen_vote > last_voted_slot - && - // Because `candidate_latest_frozen_vote` is the last vote made by some validator - // in the cluster for a frozen bank `B` observed through gossip, we may have cleared - // that frozen bank `B` because we `set_root(root)` for a `root` on a different fork, - // like so: - // - // |----------X ------candidate_latest_frozen_vote (frozen) - // old root - // |----------new root ----last_voted_slot - // - // In most cases, because `last_voted_slot` must be a descendant of `root`, then - // if `candidate_latest_frozen_vote` is not found in the ancestors/descendants map (recall these - // directly reflect the state of BankForks), this implies that `B` was pruned from BankForks - // because it was on a different fork than `last_voted_slot`, and thus this vote for `candidate_latest_frozen_vote` - // should be safe to count towards the switching proof: - // - // However, there is also the possibility that `last_voted_slot` is a stray, in which - // case we cannot make this conclusion as we do not know the ancestors/descendants - // of strays. Hence we err on the side of caution here and ignore this vote. This - // is ok because validators voting on different unrooted forks should eventually vote - // on some descendant of the root, at which time they can be included in switching proofs. - !Self::is_candidate_slot_descendant_of_last_vote( - *candidate_latest_frozen_vote, last_voted_slot, ancestors) - .unwrap_or(true) - { - let stake = epoch_vote_accounts - .get(vote_account_pubkey) - .map(|(stake, _)| *stake) - .unwrap_or(0); - locked_out_stake += stake; - if (locked_out_stake as f64 / total_stake as f64) > SWITCH_FORK_THRESHOLD { - return SwitchForkDecision::SwitchProof(switch_proof); - } - locked_out_vote_accounts.insert(vote_account_pubkey); - } + if *candidate_latest_frozen_vote > last_voted_slot && { + // Because `candidate_latest_frozen_vote` is the last vote made by some validator + // in the cluster for a frozen bank `B` observed through gossip, we may have cleared + // that frozen bank `B` because we `set_root(root)` for a `root` on a different fork, + // like so: + // + // |----------X ------candidate_latest_frozen_vote (frozen) + // old root + // |----------new root ----last_voted_slot + // + // In most cases, because `last_voted_slot` must be a descendant of `root`, then + // if `candidate_latest_frozen_vote` is not found in the ancestors/descendants map (recall these + // directly reflect the state of BankForks), this implies that `B` was pruned from BankForks + // because it was on a different fork than `last_voted_slot`, and thus this vote for `candidate_latest_frozen_vote` + // should be safe to count towards the switching proof: + // + // However, there is also the possibility that `last_voted_slot` is a stray, in which + // case we cannot make this conclusion as we do not know the ancestors/descendants + // of strays. Hence we err on the side of caution here and ignore this vote. This + // is ok because validators voting on different unrooted forks should eventually vote + // on some descendant of the root, at which time they can be included in switching proofs. + !Self::is_candidate_slot_descendant_of_last_vote( + *candidate_latest_frozen_vote, + last_voted_slot, + ancestors, + ) + .unwrap_or(true) + } { + let stake = epoch_vote_accounts + .get(vote_account_pubkey) + .map(|(stake, _)| *stake) + .unwrap_or(0); + locked_out_stake += stake; + if (locked_out_stake as f64 / total_stake as f64) > SWITCH_FORK_THRESHOLD { + return SwitchForkDecision::SwitchProof(switch_proof); } + locked_out_vote_accounts.insert(vote_account_pubkey); + } + } - // We have not detected sufficient lockout past the last voted slot to generate - // a switching proof - SwitchForkDecision::FailedSwitchThreshold(locked_out_stake, total_stake) - }) - .unwrap_or(SwitchForkDecision::SameFork) + // We have not detected sufficient lockout past the last voted slot to generate + // a switching proof + SwitchForkDecision::FailedSwitchThreshold(locked_out_stake, total_stake) } #[allow(clippy::too_many_arguments)] From 2d14e32e0e5f9304eef1deb6a7b97bcbe03ae762 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Mon, 12 Dec 2022 01:08:19 -0800 Subject: [PATCH 255/465] apply [limit repairs to top staked... #28673] to non-MainnetBeta clusters (backport #29163) (#29206) apply [limit repairs to top staked... #28673] to non-MainnetBeta clusters (#29163) (cherry picked from commit 88a8f40bd2d14673721f03e84dfc80eceaa2017a) Co-authored-by: Jeff Biseda --- core/src/serve_repair.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/serve_repair.rs b/core/src/serve_repair.rs index 362463af4e52cb..a11f48dd1a4995 100644 --- a/core/src/serve_repair.rs +++ b/core/src/serve_repair.rs @@ -452,7 +452,7 @@ impl ServeRepair { let identity_keypair = self.cluster_info.keypair().clone(); let my_id = identity_keypair.pubkey(); - let max_buffered_packets = if root_bank.cluster_type() == ClusterType::Testnet { + let max_buffered_packets = if root_bank.cluster_type() != ClusterType::MainnetBeta { 2 * MAX_REQUESTS_PER_ITERATION } else { MAX_REQUESTS_PER_ITERATION From 990ffbf623472e707b769871392ea7dccce04232 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Mon, 12 Dec 2022 10:26:45 -0800 Subject: [PATCH 256/465] remove cli arg "--no-accounts-db-caching" (backport #28912) (#29209) * remove cli arg "--no-accounts-db-caching" (#28912) (cherry picked from commit f0ef316b19f8892523a883b760d5e180c8d44c6d) # Conflicts: # validator/src/cli.rs * fix merge errors Co-authored-by: Jeff Washington (jwash) --- ledger-tool/src/main.rs | 7 +------ validator/src/bin/solana-test-validator.rs | 7 +------ validator/src/main.rs | 8 +------- 3 files changed, 3 insertions(+), 19 deletions(-) diff --git a/ledger-tool/src/main.rs b/ledger-tool/src/main.rs index 6577cdba8d95bd..b3345f04a34f1e 100644 --- a/ledger-tool/src/main.rs +++ b/ledger-tool/src/main.rs @@ -1110,10 +1110,6 @@ fn main() { .long("no-bpf-jit") .takes_value(false) .help("Disable the just-in-time compiler and instead use the interpreter for BP"); - let no_accounts_db_caching_arg = Arg::with_name("no_accounts_db_caching") - .long("no-accounts-db-caching") - .takes_value(false) - .help("Disables accounts-db caching"); let accounts_index_bins = Arg::with_name("accounts_index_bins") .long("accounts-index-bins") .value_name("BINS") @@ -1552,7 +1548,6 @@ fn main() { .arg(&ancient_append_vecs) .arg(&halt_at_slot_store_hash_raw_data) .arg(&hard_forks_arg) - .arg(&no_accounts_db_caching_arg) .arg(&accounts_db_test_hash_calculation_arg) .arg(&no_os_memory_stats_reporting_arg) .arg(&no_bpf_jit_arg) @@ -2488,7 +2483,7 @@ fn main() { run_final_accounts_hash_calc: true, halt_at_slot: value_t!(arg_matches, "halt_at_slot", Slot).ok(), debug_keys, - accounts_db_caching_enabled: !arg_matches.is_present("no_accounts_db_caching"), + accounts_db_caching_enabled: true, limit_load_slot_count_from_snapshot: value_t!( arg_matches, "limit_load_slot_count_from_snapshot", diff --git a/validator/src/bin/solana-test-validator.rs b/validator/src/bin/solana-test-validator.rs index c37eff175ef00b..0bc0c3e7ae3487 100644 --- a/validator/src/bin/solana-test-validator.rs +++ b/validator/src/bin/solana-test-validator.rs @@ -389,11 +389,6 @@ fn main() { .multiple(true) .help("Specify the configuration file for the Geyser plugin."), ) - .arg( - Arg::with_name("no_accounts_db_caching") - .long("no-accounts-db-caching") - .help("Disables accounts caching"), - ) .arg( Arg::with_name("deactivate_feature") .long("deactivate-feature") @@ -685,7 +680,7 @@ fn main() { let mut genesis = TestValidatorGenesis::default(); genesis.max_ledger_shreds = value_of(&matches, "limit_ledger_size"); genesis.max_genesis_archive_unpacked_size = Some(u64::MAX); - genesis.accounts_db_caching_enabled = !matches.is_present("no_accounts_db_caching"); + genesis.accounts_db_caching_enabled = true; genesis.log_messages_bytes_limit = value_t!(matches, "log_messages_bytes_limit", usize).ok(); let tower_storage = Arc::new(FileTowerStorage::new(ledger_path.clone())); diff --git a/validator/src/main.rs b/validator/src/main.rs index 519b6a11e4e165..a17df8a680981f 100644 --- a/validator/src/main.rs +++ b/validator/src/main.rs @@ -1659,11 +1659,6 @@ pub fn main() { .value_name("KEY") .help("When account indexes are enabled, only include specific keys in the index. This overrides --account-index-exclude-key."), ) - .arg( - Arg::with_name("no_accounts_db_caching") - .long("no-accounts-db-caching") - .help("Disables accounts caching"), - ) .arg( Arg::with_name("accounts_db_skip_shrink") .long("accounts-db-skip-shrink") @@ -1779,7 +1774,6 @@ pub fn main() { // legacy nop argument Arg::with_name("accounts_db_caching_enabled") .long("accounts-db-caching-enabled") - .conflicts_with("no_accounts_db_caching") .hidden(true) ) .arg( @@ -2701,7 +2695,7 @@ pub fn main() { .unwrap_or(poh_service::DEFAULT_HASHES_PER_BATCH), process_ledger_before_services: matches.is_present("process_ledger_before_services"), account_indexes, - accounts_db_caching_enabled: !matches.is_present("no_accounts_db_caching"), + accounts_db_caching_enabled: true, accounts_db_test_hash_calculation: matches.is_present("accounts_db_test_hash_calculation"), accounts_db_config, accounts_db_skip_shrink: matches.is_present("accounts_db_skip_shrink"), From dfa887694e89bd38d4dbaab3d2a0e37717f33a70 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Tue, 13 Dec 2022 14:20:43 +0000 Subject: [PATCH 257/465] removes metric for process_push_success (backport #29211) (#29222) removes metric for process_push_success (#29211) This is already tracked in CrdsDataStats: https://github.com/solana-labs/solana/blob/5e799ad56/gossip/src/crds.rs#L96-L106 https://github.com/solana-labs/solana/blob/5e799ad56/gossip/src/cluster_info_metrics.rs#L652-L656 and is so duplicated. Removing the metric would simplify this code path for upcoming commits. (cherry picked from commit 8ea5dd8b28ac09c023d1e3ae835f67cb80a771ec) Co-authored-by: behzad nouri --- gossip/src/cluster_info.rs | 7 +------ gossip/src/cluster_info_metrics.rs | 6 ------ gossip/src/crds_gossip.rs | 20 +++++--------------- gossip/tests/crds_gossip.rs | 1 - 4 files changed, 6 insertions(+), 28 deletions(-) diff --git a/gossip/src/cluster_info.rs b/gossip/src/cluster_info.rs index 8b7c5111370529..a3d7909cfe6928 100644 --- a/gossip/src/cluster_info.rs +++ b/gossip/src/cluster_info.rs @@ -2269,12 +2269,7 @@ impl ClusterInfo { messages .into_iter() .flat_map(|(from, crds_values)| { - let (num_success, origins) = - self.gossip.process_push_message(&from, crds_values, now); - self.stats - .process_push_success - .add_relaxed(num_success as u64); - origins + self.gossip.process_push_message(&from, crds_values, now) }) .collect() }; diff --git a/gossip/src/cluster_info_metrics.rs b/gossip/src/cluster_info_metrics.rs index ec869b5c181ca6..7026ec41b6984b 100644 --- a/gossip/src/cluster_info_metrics.rs +++ b/gossip/src/cluster_info_metrics.rs @@ -156,7 +156,6 @@ pub struct GossipStats { pub(crate) process_pull_response_success: Counter, pub(crate) process_pull_response_timeout: Counter, pub(crate) process_push_message: Counter, - pub(crate) process_push_success: Counter, pub(crate) prune_message_count: Counter, pub(crate) prune_message_len: Counter, pub(crate) prune_message_timeout: Counter, @@ -235,11 +234,6 @@ pub(crate) fn submit_gossip_stats( ("repair_peers", stats.repair_peers.clear(), i64), ("new_push_requests", stats.new_push_requests.clear(), i64), ("new_push_requests2", stats.new_push_requests2.clear(), i64), - ( - "process_push_success", - stats.process_push_success.clear(), - i64 - ), ("purge", stats.purge.clear(), i64), ("purge_count", stats.purge_count.clear(), i64), ( diff --git a/gossip/src/crds_gossip.rs b/gossip/src/crds_gossip.rs index fae3dc7295f8a9..88cf5b930f6a1b 100644 --- a/gossip/src/crds_gossip.rs +++ b/gossip/src/crds_gossip.rs @@ -50,22 +50,12 @@ impl CrdsGossip { from: &Pubkey, values: Vec, now: u64, - ) -> (usize, HashSet) { - let results = self - .push - .process_push_message(&self.crds, from, values, now); - let mut success_count = 0; - let successfully_inserted_origin_set: HashSet = results + ) -> HashSet { + self.push + .process_push_message(&self.crds, from, values, now) .into_iter() - .filter_map(|result| { - if result.is_ok() { - success_count += 1; - } - Result::ok(result) - }) - .collect(); - - (success_count, successfully_inserted_origin_set) + .filter_map(Result::ok) + .collect() } /// Remove redundant paths in the network. diff --git a/gossip/tests/crds_gossip.rs b/gossip/tests/crds_gossip.rs index 0c0d4e8b4fc19b..6b952e3570368c 100644 --- a/gossip/tests/crds_gossip.rs +++ b/gossip/tests/crds_gossip.rs @@ -365,7 +365,6 @@ fn network_run_push( .unwrap() .gossip .process_push_message(&from, msgs.clone(), now) - .1 .into_iter() .collect(); let prunes_map = network From f864d4ba5c4c4c8a0adf56f47b46b9f30a5fe062 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Wed, 14 Dec 2022 18:07:20 -0500 Subject: [PATCH 258/465] docs: Wraps to 80 characters (backport #29259) (#29263) docs: Wraps to 80 characters (#29259) (cherry picked from commit 94b04935c8b30aa6a289bfe3c5b27eff933bb94b) Co-authored-by: Brooks Prumo --- docs/src/storage_rent_economics.md | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/docs/src/storage_rent_economics.md b/docs/src/storage_rent_economics.md index 8405c8906f3a29..87194a68868182 100644 --- a/docs/src/storage_rent_economics.md +++ b/docs/src/storage_rent_economics.md @@ -2,16 +2,30 @@ title: Storage Rent Economics --- -Each transaction that is submitted to the Solana ledger imposes costs. Transaction fees paid by the submitter, and collected by a validator, in theory, account for the acute, transactional, costs of validating and adding that data to the ledger. Unaccounted in this process is the mid-term storage of active ledger state, necessarily maintained by the rotating validator set. This type of storage imposes costs not only to validators but also to the broader network as active state grows so does data transmission and validation overhead. To account for these costs, we describe here our preliminary design and implementation of storage rent. +Each transaction that is submitted to the Solana ledger imposes costs. +Transaction fees paid by the submitter, and collected by a validator, in +theory, account for the acute, transactional, costs of validating and adding +that data to the ledger. Unaccounted in this process is the mid-term storage of +active ledger state, necessarily maintained by the rotating validator set. This +type of storage imposes costs not only to validators but also to the broader +network as active state grows so does data transmission and validation +overhead. To account for these costs, we describe here our preliminary design +and implementation of storage rent. Storage rent can be paid via one of two methods: Method 1: Set it and forget it -With this approach, accounts with two-years worth of rent deposits secured are exempt from network rent charges. By maintaining this minimum-balance, the broader network benefits from reduced liquidity and the account holder can rest assured that their `Account::data` will be retained for continual access/usage. +With this approach, accounts with two-years worth of rent deposits secured are +exempt from network rent charges. By maintaining this minimum-balance, the +broader network benefits from reduced liquidity and the account holder can rest +assured that their `Account::data` will be retained for continual access/usage. Method 2: Pay per byte -If an account has less than two-years worth of deposited rent the network charges rent on a per-epoch basis, in credit for the next epoch. This rent is deducted at a rate specified in genesis, in lamports per kilobyte-year. +If an account has less than two-years worth of deposited rent the network +charges rent on a per-epoch basis, in credit for the next epoch. This rent is +deducted at a rate specified in genesis, in lamports per kilobyte-year. -For information on the technical implementation details of this design, see the [Rent](implemented-proposals/rent.md) section. +For information on the technical implementation details of this design, see the +[Rent](implemented-proposals/rent.md) section. From a2f0e4b17d07b1c0a0fcd47a31dab7c0b541ac83 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Thu, 15 Dec 2022 20:44:37 +0000 Subject: [PATCH 259/465] ignores pubkey in Protocol::PruneMessage (backport #29280) (#29285) ignores pubkey in Protocol::PruneMessage (#29280) Protocol::PruneMessage(Pubkey, _) is the same as PruneData.pubkey and so is redundant and can be ignored: https://github.com/solana-labs/solana/blob/95d339300/gossip/src/cluster_info.rs#LL277-L279 https://github.com/solana-labs/solana/blob/95d339300/gossip/src/cluster_info.rs#L361-L367 (cherry picked from commit 78a04ed432ebecc501a1e6479bf1ceb6c34753ff) Co-authored-by: behzad nouri --- gossip/src/cluster_info.rs | 17 +++++++---------- gossip/src/crds_gossip.rs | 8 +++----- gossip/src/crds_gossip_push.rs | 7 ++++++- 3 files changed, 16 insertions(+), 16 deletions(-) diff --git a/gossip/src/cluster_info.rs b/gossip/src/cluster_info.rs index a3d7909cfe6928..4164a7f5a65e05 100644 --- a/gossip/src/cluster_info.rs +++ b/gossip/src/cluster_info.rs @@ -1803,7 +1803,7 @@ impl ClusterInfo { .unwrap() } - fn handle_batch_prune_messages(&self, messages: Vec<(Pubkey, PruneData)>) { + fn handle_batch_prune_messages(&self, messages: Vec) { let _st = ScopedTimer::from(&self.stats.handle_batch_prune_messages_time); if messages.is_empty() { return; @@ -1811,22 +1811,19 @@ impl ClusterInfo { self.stats .prune_message_count .add_relaxed(messages.len() as u64); - self.stats.prune_message_len.add_relaxed( - messages - .iter() - .map(|(_, data)| data.prunes.len() as u64) - .sum(), - ); + self.stats + .prune_message_len + .add_relaxed(messages.iter().map(|data| data.prunes.len() as u64).sum()); let mut prune_message_timeout = 0; let mut bad_prune_destination = 0; let self_pubkey = self.id(); { let _st = ScopedTimer::from(&self.stats.process_prune); let now = timestamp(); - for (from, data) in messages { + for data in messages { match self.gossip.process_prune_msg( &self_pubkey, - &from, + &data.pubkey, &data.destination, &data.prunes, data.wallclock, @@ -2432,7 +2429,7 @@ impl ClusterInfo { check_duplicate_instance(&data)?; push_messages.push((from, data)); } - Protocol::PruneMessage(from, data) => prune_messages.push((from, data)), + Protocol::PruneMessage(_from, data) => prune_messages.push(data), Protocol::PingMessage(ping) => ping_messages.push((from_addr, ping)), Protocol::PongMessage(pong) => pong_messages.push((from_addr, pong)), } diff --git a/gossip/src/crds_gossip.rs b/gossip/src/crds_gossip.rs index 88cf5b930f6a1b..15e21b9460ad83 100644 --- a/gossip/src/crds_gossip.rs +++ b/gossip/src/crds_gossip.rs @@ -163,11 +163,9 @@ impl CrdsGossip { wallclock: u64, now: u64, ) -> Result<(), CrdsGossipError> { - let expired = now > wallclock + self.push.prune_timeout; - if expired { - return Err(CrdsGossipError::PruneMessageTimeout); - } - if self_pubkey == destination { + if now > wallclock.saturating_add(self.push.prune_timeout) { + Err(CrdsGossipError::PruneMessageTimeout) + } else if self_pubkey == destination { self.push.process_prune_msg(self_pubkey, peer, origin); Ok(()) } else { diff --git a/gossip/src/crds_gossip_push.rs b/gossip/src/crds_gossip_push.rs index 034597f2cf1999..93113262ba18ef 100644 --- a/gossip/src/crds_gossip_push.rs +++ b/gossip/src/crds_gossip_push.rs @@ -326,7 +326,12 @@ impl CrdsGossipPush { } /// Add the `from` to the peer's filter of nodes. - pub fn process_prune_msg(&self, self_pubkey: &Pubkey, peer: &Pubkey, origins: &[Pubkey]) { + pub(crate) fn process_prune_msg( + &self, + self_pubkey: &Pubkey, + peer: &Pubkey, + origins: &[Pubkey], + ) { if let Some(filter) = self.active_set.read().unwrap().get(peer) { for origin in origins { if origin != self_pubkey { From 7363e4829ba60115c5f73333a7607f5b7ce82581 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Thu, 15 Dec 2022 22:05:42 +0000 Subject: [PATCH 260/465] rpc: fix possible panics in optimize_filters (backport #29146) (#29287) rpc: fix possible panics in optimize_filters (#29146) (cherry picked from commit ccd96e246b39a582ac6986900adea3cb72f48c26) Co-authored-by: Kirill Fomichev --- rpc/src/rpc.rs | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/rpc/src/rpc.rs b/rpc/src/rpc.rs index e3b2bf49208168..ea04301e4dbdee 100644 --- a/rpc/src/rpc.rs +++ b/rpc/src/rpc.rs @@ -2165,10 +2165,14 @@ fn optimize_filters(filters: &mut [RpcFilterType]) { match &compare.bytes { #[allow(deprecated)] Binary(bytes) | Base58(bytes) => { - compare.bytes = Bytes(bs58::decode(bytes).into_vec().unwrap()); + if let Ok(bytes) = bs58::decode(bytes).into_vec() { + compare.bytes = Bytes(bytes); + } } Base64(bytes) => { - compare.bytes = Bytes(base64::decode(bytes).unwrap()); + if let Ok(bytes) = base64::decode(bytes) { + compare.bytes = Bytes(bytes); + } } _ => {} } From 2d9aa7e7bc37a6fb65705748581694328837f32a Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Thu, 15 Dec 2022 22:35:26 +0000 Subject: [PATCH 261/465] locks crds table only once to process push messages (backport #29218) (#29281) * locks crds table only once to process push messages (#29218) Processing push messages is locking and unlocking crds table for each push message: https://github.com/solana-labs/solana/blob/536b879aa/gossip/src/cluster_info.rs#L2266-L2276 https://github.com/solana-labs/solana/blob/536b879aa/gossip/src/crds_gossip_push.rs#L215C9-L260 This commit instead locks the crds table once for all the received push messages. (cherry picked from commit a5c8c7c53670bdb24f569a4a4e1bc8057d9194fe) # Conflicts: # gossip/src/crds_gossip_push.rs * removes mergify merge conflicts Co-authored-by: behzad nouri --- gossip/src/cluster_info.rs | 7 +- gossip/src/crds_gossip.rs | 9 +-- gossip/src/crds_gossip_push.rs | 141 +++++++++++++++------------------ gossip/tests/crds_gossip.rs | 8 +- sdk/sbf/syscalls.txt | 0 5 files changed, 73 insertions(+), 92 deletions(-) create mode 100644 sdk/sbf/syscalls.txt diff --git a/gossip/src/cluster_info.rs b/gossip/src/cluster_info.rs index 4164a7f5a65e05..0b6b5cdc43322d 100644 --- a/gossip/src/cluster_info.rs +++ b/gossip/src/cluster_info.rs @@ -2263,12 +2263,7 @@ impl ClusterInfo { let origins: HashSet<_> = { let _st = ScopedTimer::from(&self.stats.process_push_message); let now = timestamp(); - messages - .into_iter() - .flat_map(|(from, crds_values)| { - self.gossip.process_push_message(&from, crds_values, now) - }) - .collect() + self.gossip.process_push_message(messages, now) }; // Generate prune messages. let self_pubkey = self.id(); diff --git a/gossip/src/crds_gossip.rs b/gossip/src/crds_gossip.rs index 15e21b9460ad83..af6c04ef8f6d75 100644 --- a/gossip/src/crds_gossip.rs +++ b/gossip/src/crds_gossip.rs @@ -47,15 +47,10 @@ impl CrdsGossip { /// Returns unique origins' pubkeys of upserted values. pub fn process_push_message( &self, - from: &Pubkey, - values: Vec, + messages: Vec<(/*from:*/ Pubkey, Vec)>, now: u64, ) -> HashSet { - self.push - .process_push_message(&self.crds, from, values, now) - .into_iter() - .filter_map(Result::ok) - .collect() + self.push.process_push_message(&self.crds, messages, now) } /// Remove redundant paths in the network. diff --git a/gossip/src/crds_gossip_push.rs b/gossip/src/crds_gossip_push.rs index 93113262ba18ef..9017c94e5fcad3 100644 --- a/gossip/src/crds_gossip_push.rs +++ b/gossip/src/crds_gossip_push.rs @@ -17,7 +17,6 @@ use { contact_info::ContactInfo, crds::{Crds, Cursor, GossipRoute}, crds_gossip::{get_stake, get_weight}, - crds_gossip_error::CrdsGossipError, crds_value::CrdsValue, ping_pong::PingCache, weighted_shuffle::WeightedShuffle, @@ -218,45 +217,37 @@ impl CrdsGossipPush { pub(crate) fn process_push_message( &self, crds: &RwLock, - from: &Pubkey, - values: Vec, + messages: Vec<(/*from:*/ Pubkey, Vec)>, now: u64, - ) -> Vec> { - self.num_total.fetch_add(values.len(), Ordering::Relaxed); - let values: Vec<_> = { - let wallclock_window = self.wallclock_window(now); - let mut received_cache = self.received_cache.lock().unwrap(); - values - .into_iter() - .map(|value| { - if !wallclock_window.contains(&value.wallclock()) { - return Err(CrdsGossipError::PushMessageTimeout); - } - let origin = value.pubkey(); - let peers = received_cache.entry(origin).or_default(); - peers - .entry(*from) - .and_modify(|(_pruned, timestamp)| *timestamp = now) - .or_insert((/*pruned:*/ false, now)); - Ok(value) - }) - .collect() - }; + ) -> HashSet { + let mut received_cache = self.received_cache.lock().unwrap(); let mut crds = crds.write().unwrap(); - values - .into_iter() - .map(|value| { - let value = value?; + let wallclock_window = self.wallclock_window(now); + let mut origins = HashSet::new(); + for (from, values) in messages { + self.num_total.fetch_add(values.len(), Ordering::Relaxed); + for value in values { + if !wallclock_window.contains(&value.wallclock()) { + continue; + } let origin = value.pubkey(); + received_cache + .entry(origin) + .or_default() + .entry(from) + .and_modify(|(_pruned, timestamp)| *timestamp = now) + .or_insert((/*pruned:*/ false, now)); match crds.insert(value, now, GossipRoute::PushMessage) { - Ok(()) => Ok(origin), + Ok(()) => { + origins.insert(origin); + } Err(_) => { self.num_old.fetch_add(1, Ordering::Relaxed); - Err(CrdsGossipError::PushMessageOldVersion) } } - }) - .collect() + } + } + origins } /// New push message to broadcast to peers. @@ -555,7 +546,7 @@ mod tests { let low_staked_peers = (0..10).map(|_| solana_sdk::pubkey::new_rand()); let mut low_staked_set = HashSet::new(); low_staked_peers.for_each(|p| { - push.process_push_message(&crds, &p, vec![value.clone()], 0); + push.process_push_message(&crds, vec![(p, vec![value.clone()])], 0); low_staked_set.insert(p); stakes.insert(p, 1); }); @@ -577,7 +568,7 @@ mod tests { let high_staked_peer = solana_sdk::pubkey::new_rand(); let high_stake = CrdsGossipPush::prune_stake_threshold(100, 100) + 10; stakes.insert(high_staked_peer, high_stake); - push.process_push_message(&crds, &high_staked_peer, vec![value], 0); + push.process_push_message(&crds, vec![(high_staked_peer, vec![value])], 0); let pruned = { let mut received_cache = push.received_cache.lock().unwrap(); @@ -611,16 +602,15 @@ mod tests { let label = value.label(); // push a new message assert_eq!( - push.process_push_message(&crds, &Pubkey::default(), vec![value.clone()], 0), - [Ok(label.pubkey())], + push.process_push_message(&crds, vec![(Pubkey::default(), vec![value.clone()])], 0), + [label.pubkey()].into_iter().collect(), ); assert_eq!(crds.read().unwrap().get::<&CrdsValue>(&label), Some(&value)); // push it again - assert_eq!( - push.process_push_message(&crds, &Pubkey::default(), vec![value], 0), - [Err(CrdsGossipError::PushMessageOldVersion)], - ); + assert!(push + .process_push_message(&crds, vec![(Pubkey::default(), vec![value])], 0) + .is_empty()); } #[test] fn test_process_push_old_version() { @@ -632,17 +622,16 @@ mod tests { // push a new message assert_eq!( - push.process_push_message(&crds, &Pubkey::default(), vec![value], 0), - [Ok(ci.id)], + push.process_push_message(&crds, vec![(Pubkey::default(), vec![value])], 0), + [ci.id].into_iter().collect() ); // push an old version ci.wallclock = 0; let value = CrdsValue::new_unsigned(CrdsData::ContactInfo(ci)); - assert_eq!( - push.process_push_message(&crds, &Pubkey::default(), vec![value], 0), - [Err(CrdsGossipError::PushMessageOldVersion)], - ); + assert!(push + .process_push_message(&crds, vec![(Pubkey::default(), vec![value])], 0) + .is_empty()); } #[test] fn test_process_push_timeout() { @@ -654,18 +643,16 @@ mod tests { // push a version to far in the future ci.wallclock = timeout + 1; let value = CrdsValue::new_unsigned(CrdsData::ContactInfo(ci.clone())); - assert_eq!( - push.process_push_message(&crds, &Pubkey::default(), vec![value], 0), - [Err(CrdsGossipError::PushMessageTimeout)], - ); + assert!(push + .process_push_message(&crds, vec![(Pubkey::default(), vec![value])], 0) + .is_empty()); // push a version to far in the past ci.wallclock = 0; let value = CrdsValue::new_unsigned(CrdsData::ContactInfo(ci)); - assert_eq!( - push.process_push_message(&crds, &Pubkey::default(), vec![value], timeout + 1), - [Err(CrdsGossipError::PushMessageTimeout)] - ); + assert!(push + .process_push_message(&crds, vec![(Pubkey::default(), vec![value])], timeout + 1) + .is_empty()); } #[test] fn test_process_push_update() { @@ -678,16 +665,16 @@ mod tests { // push a new message assert_eq!( - push.process_push_message(&crds, &Pubkey::default(), vec![value_old], 0), - [Ok(origin)], + push.process_push_message(&crds, vec![(Pubkey::default(), vec![value_old])], 0), + [origin].into_iter().collect() ); // push an old version ci.wallclock = 1; let value = CrdsValue::new_unsigned(CrdsData::ContactInfo(ci)); assert_eq!( - push.process_push_message(&crds, &Pubkey::default(), vec![value], 0), - [Ok(origin)], + push.process_push_message(&crds, vec![(Pubkey::default(), vec![value])], 0), + [origin].into_iter().collect() ); } #[test] @@ -1002,8 +989,8 @@ mod tests { expected.insert(peer.label().pubkey(), vec![new_msg.clone()]); let origin = new_msg.pubkey(); assert_eq!( - push.process_push_message(&crds, &Pubkey::default(), vec![new_msg], 0), - [Ok(origin)] + push.process_push_message(&crds, vec![(Pubkey::default(), vec![new_msg])], 0), + [origin].into_iter().collect() ); assert_eq!(push.active_set.read().unwrap().len(), 1); assert_eq!(push.new_push_messages(&crds, 0).0, expected); @@ -1035,8 +1022,12 @@ mod tests { ); let crds = RwLock::new(crds); assert_eq!( - push.process_push_message(&crds, &Pubkey::default(), vec![peers[2].clone()], now), - [Ok(origin[2])], + push.process_push_message( + &crds, + vec![(Pubkey::default(), vec![peers[2].clone()])], + now + ), + [origin[2]].into_iter().collect() ); let ping_cache = Mutex::new(ping_cache); push.refresh_push_active_set( @@ -1097,8 +1088,8 @@ mod tests { let expected = HashMap::new(); let origin = new_msg.pubkey(); assert_eq!( - push.process_push_message(&crds, &Pubkey::default(), vec![new_msg.clone()], 0), - [Ok(origin)], + push.process_push_message(&crds, vec![(Pubkey::default(), vec![new_msg.clone()])], 0), + [origin].into_iter().collect() ); push.process_prune_msg( &self_id, @@ -1137,8 +1128,8 @@ mod tests { let expected = HashMap::new(); let origin = new_msg.pubkey(); assert_eq!( - push.process_push_message(&crds, &Pubkey::default(), vec![new_msg], 1), - [Ok(origin)], + push.process_push_message(&crds, vec![(Pubkey::default(), vec![new_msg])], 1), + [origin].into_iter().collect() ); assert_eq!(push.new_push_messages(&crds, 0).0, expected); } @@ -1153,8 +1144,8 @@ mod tests { let label = value.label(); // push a new message assert_eq!( - push.process_push_message(&crds, &Pubkey::default(), vec![value.clone()], 0), - [Ok(label.pubkey())] + push.process_push_message(&crds, vec![(Pubkey::default(), vec![value.clone()])], 0), + [label.pubkey()].into_iter().collect() ); assert_eq!( crds.write().unwrap().get::<&CrdsValue>(&label), @@ -1162,18 +1153,16 @@ mod tests { ); // push it again - assert_eq!( - push.process_push_message(&crds, &Pubkey::default(), vec![value.clone()], 0), - [Err(CrdsGossipError::PushMessageOldVersion)], - ); + assert!(push + .process_push_message(&crds, vec![(Pubkey::default(), vec![value.clone()])], 0) + .is_empty()); // purge the old pushed push.purge_old_received_cache(1); // push it again - assert_eq!( - push.process_push_message(&crds, &Pubkey::default(), vec![value], 0), - [Err(CrdsGossipError::PushMessageOldVersion)], - ); + assert!(push + .process_push_message(&crds, vec![(Pubkey::default(), vec![value])], 0) + .is_empty()); } } diff --git a/gossip/tests/crds_gossip.rs b/gossip/tests/crds_gossip.rs index 6b952e3570368c..e37b44d868a895 100644 --- a/gossip/tests/crds_gossip.rs +++ b/gossip/tests/crds_gossip.rs @@ -290,8 +290,10 @@ fn network_simulator(thread_pool: &ThreadPool, network: &mut Network, max_conver }; m.wallclock = now; node.gossip.process_push_message( - &Pubkey::default(), - vec![CrdsValue::new_unsigned(CrdsData::ContactInfo(m))], + vec![( + Pubkey::default(), + vec![CrdsValue::new_unsigned(CrdsData::ContactInfo(m))], + )], now, ); }); @@ -364,7 +366,7 @@ fn network_run_push( .get(&to) .unwrap() .gossip - .process_push_message(&from, msgs.clone(), now) + .process_push_message(vec![(from, msgs.clone())], now) .into_iter() .collect(); let prunes_map = network diff --git a/sdk/sbf/syscalls.txt b/sdk/sbf/syscalls.txt new file mode 100644 index 00000000000000..e69de29bb2d1d6 From 6e697385847c48cb0048e1f45ea7bcff67ab5fd1 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Thu, 15 Dec 2022 22:52:37 +0000 Subject: [PATCH 262/465] sanitizes shreds recovered from erasure shards (backport #29286) (#29288) sanitizes shreds recovered from erasure shards (#29286) Instead of sanitizing shreds late in recover code: https://github.com/solana-labs/solana/blob/50ad0390f/ledger/src/shred/merkle.rs#L786 Shred{Code,Data}::from_recovered_shard should sanitize shreds before returning: https://github.com/solana-labs/solana/blob/50ad0390f/ledger/src/shred/merkle.rs#L192-L216 https://github.com/solana-labs/solana/blob/50ad0390f/ledger/src/shred/merkle.rs#L324-L350 (cherry picked from commit 73c42dde6eb976f97df17541bd66872a43fd33c1) Co-authored-by: behzad nouri --- ledger/src/shred/merkle.rs | 33 +++++++++++++++++---------------- 1 file changed, 17 insertions(+), 16 deletions(-) diff --git a/ledger/src/shred/merkle.rs b/ledger/src/shred/merkle.rs index c7849b177c464c..55add1f00daf87 100644 --- a/ledger/src/shred/merkle.rs +++ b/ledger/src/shred/merkle.rs @@ -208,11 +208,14 @@ impl ShredData { return Err(Error::InvalidShardSize(shard_size)); } let data_header = deserialize_from_with_limit(&mut cursor)?; - Ok(Self { + let shred = Self { common_header, data_header, payload: shard, - }) + }; + // Merkle proof is not erasure coded and is not yet available here. + shred.sanitize(/*verify_merkle_proof:*/ false)?; + Ok(shred) } fn set_merkle_branch(&mut self, merkle_branch: &MerkleBranch) -> Result<(), Error> { @@ -238,9 +241,7 @@ impl ShredData { if !matches!(shred_variant, ShredVariant::MerkleData(_)) { return Err(Error::InvalidShredVariant); } - if !verify_merkle_proof { - debug_assert_matches!(self.verify_merkle_proof(), Ok(true)); - } else if !self.verify_merkle_proof()? { + if verify_merkle_proof && !self.verify_merkle_proof()? { return Err(Error::InvalidMerkleProof); } shred_data::sanitize(self) @@ -342,11 +343,14 @@ impl ShredCode { let mut cursor = Cursor::new(&mut shard[..]); bincode::serialize_into(&mut cursor, &common_header)?; bincode::serialize_into(&mut cursor, &coding_header)?; - Ok(Self { + let shred = Self { common_header, coding_header, payload: shard, - }) + }; + // Merkle proof is not erasure coded and is not yet available here. + shred.sanitize(/*verify_merkle_proof:*/ false)?; + Ok(shred) } fn set_merkle_branch(&mut self, merkle_branch: &MerkleBranch) -> Result<(), Error> { @@ -372,9 +376,7 @@ impl ShredCode { if !matches!(shred_variant, ShredVariant::MerkleCode(_)) { return Err(Error::InvalidShredVariant); } - if !verify_merkle_proof { - debug_assert_matches!(self.verify_merkle_proof(), Ok(true)); - } else if !self.verify_merkle_proof()? { + if verify_merkle_proof && !self.verify_merkle_proof()? { return Err(Error::InvalidMerkleProof); } shred_code::sanitize(self) @@ -771,6 +773,8 @@ pub(super) fn recover( return Err(Error::InvalidMerkleProof); } shred.set_merkle_branch(&merkle_branch)?; + // Already sanitized in Shred{Code,Data}::from_recovered_shard. + debug_assert_matches!(shred.sanitize(/*verify_merkle_proof:*/ true), Ok(())); // Assert that shred payload is fully populated. debug_assert_eq!(shred, { let shred = shred.payload().clone(); @@ -778,15 +782,12 @@ pub(super) fn recover( }); } } - shreds + Ok(shreds .into_iter() .zip(mask) .filter(|(_, mask)| !mask) - .map(|(shred, _)| { - shred.sanitize(/*verify_merkle_proof:*/ false)?; - Ok(shred) - }) - .collect() + .map(|(shred, _)| shred) + .collect()) } // Maps number of (code + data) shreds to MerkleBranch.proof.len(). From d3a61c16b7b93fb5f9b4b8bd0a76caff09f90bbd Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Fri, 16 Dec 2022 21:00:58 +0000 Subject: [PATCH 263/465] patches shred::merkle::make_shreds_from_data when data is empty (backport #29295) (#29306) patches shred::merkle::make_shreds_from_data when data is empty (#29295) If data is empty, make_shreds_from_data will now return one data shred with empty data. This preserves invariants verified in tests regardless of data size. (cherry picked from commit 92ca725c6b6441660b905551818869674f8aa727) Co-authored-by: behzad nouri --- ledger/src/shred.rs | 3 ++- ledger/src/shred/merkle.rs | 27 ++++++++++++++++----------- ledger/src/sigverify_shreds.rs | 2 +- 3 files changed, 19 insertions(+), 13 deletions(-) diff --git a/ledger/src/shred.rs b/ledger/src/shred.rs index ad9a039611a7a7..ee97cbe02b8341 100644 --- a/ledger/src/shred.rs +++ b/ledger/src/shred.rs @@ -88,7 +88,8 @@ mod stats; mod traits; pub type Nonce = u32; -pub const SIZE_OF_NONCE: usize = 4; +const_assert_eq!(SIZE_OF_NONCE, 4); +pub const SIZE_OF_NONCE: usize = std::mem::size_of::(); /// The following constants are computed by hand, and hardcoded. /// `test_shred_constants` ensures that the values are correct. diff --git a/ledger/src/shred/merkle.rs b/ledger/src/shred/merkle.rs index 55add1f00daf87..e694fbb9c03d7e 100644 --- a/ledger/src/shred/merkle.rs +++ b/ledger/src/shred/merkle.rs @@ -16,7 +16,7 @@ use { shredder::{self, ReedSolomonCache}, }, assert_matches::debug_assert_matches, - itertools::Itertools, + itertools::{Either, Itertools}, rayon::{prelude::*, ThreadPool}, reed_solomon_erasure::Error::{InvalidIndex, TooFewParityShards, TooFewShards}, solana_perf::packet::deserialize_from_with_limit, @@ -875,13 +875,16 @@ pub(super) fn make_shreds_from_data( } data = rest; } - if !data.is_empty() { + // If shreds.is_empty() then the data argument was empty. In that case we + // want to generate one data shred with empty data. + if !data.is_empty() || shreds.is_empty() { // Find the Merkle proof_size and data_buffer_size // which can embed the remaining data. let (proof_size, data_buffer_size) = (1u8..32) .find_map(|proof_size| { let data_buffer_size = ShredData::capacity(proof_size).ok()?; let num_data_shreds = (data.len() + data_buffer_size - 1) / data_buffer_size; + let num_data_shreds = num_data_shreds.max(1); let erasure_batch_size = shredder::get_erasure_batch_size(num_data_shreds); (proof_size == get_proof_size(erasure_batch_size)) .then(|| (proof_size, data_buffer_size)) @@ -889,7 +892,13 @@ pub(super) fn make_shreds_from_data( .ok_or(Error::UnknownProofSize)?; common_header.shred_variant = ShredVariant::MerkleData(proof_size); common_header.fec_set_index = common_header.index; - for shred in data.chunks(data_buffer_size) { + let chunks = if data.is_empty() { + // Generate one data shred with empty data. + Either::Left(std::iter::once(data)) + } else { + Either::Right(data.chunks(data_buffer_size)) + }; + for shred in chunks { let shred = new_shred_data(common_header, data_header, shred); shreds.push(shred); common_header.index += 1; @@ -1274,12 +1283,8 @@ mod test { assert_eq!(shreds.iter().map(Shred::signature).dedup().count(), 1); for size in num_data_shreds..num_shreds { let mut shreds = shreds.clone(); - let mut removed_shreds = Vec::new(); - while shreds.len() > size { - let index = rng.gen_range(0, shreds.len()); - removed_shreds.push(shreds.swap_remove(index)); - } shreds.shuffle(rng); + let mut removed_shreds = shreds.split_off(size); // Should at least contain one coding shred. if shreds.iter().all(|shred| { matches!( @@ -1337,9 +1342,9 @@ mod test { #[test_case(46800)] fn test_make_shreds_from_data(data_size: usize) { let mut rng = rand::thread_rng(); - let data_size = data_size.saturating_sub(16).max(1); + let data_size = data_size.saturating_sub(16); let reed_solomon_cache = ReedSolomonCache::default(); - for data_size in (data_size..data_size + 32).step_by(3) { + for data_size in data_size..data_size + 32 { run_make_shreds_from_data(&mut rng, data_size, &reed_solomon_cache); } } @@ -1392,7 +1397,7 @@ mod test { Shred::ShredData(shred) => Some(shred), }) .collect(); - // Assert that the input data can be recovered from data sherds. + // Assert that the input data can be recovered from data shreds. assert_eq!( data, data_shreds diff --git a/ledger/src/sigverify_shreds.rs b/ledger/src/sigverify_shreds.rs index 653d331a76f036..68469e9ddd1a69 100644 --- a/ledger/src/sigverify_shreds.rs +++ b/ledger/src/sigverify_shreds.rs @@ -296,7 +296,7 @@ pub fn sign_shreds_cpu(keypair: &Keypair, batches: &mut [PacketBatch]) { .for_each(|p| sign_shred_cpu(keypair, p)); }); }); - inc_new_counter_debug!("ed25519_shred_verify_cpu", packet_count); + inc_new_counter_debug!("ed25519_shred_sign_cpu", packet_count); } pub fn sign_shreds_gpu_pinned_keypair(keypair: &Keypair, cache: &RecyclerCache) -> PinnedVec { From e21546c92faf5dfb8404571678a34c136b9b9562 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Sat, 17 Dec 2022 11:25:20 -0700 Subject: [PATCH 264/465] fix typo in runtime docs (backport #29314) (#29315) fix typo in runtime docs (#29314) (cherry picked from commit a0b655b72b65194a6e72d6ab004b18a6168559d7) Co-authored-by: gr8den --- docs/src/developing/programming-model/runtime.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/src/developing/programming-model/runtime.md b/docs/src/developing/programming-model/runtime.md index 5bb242f0ab219c..344cd674cb0360 100644 --- a/docs/src/developing/programming-model/runtime.md +++ b/docs/src/developing/programming-model/runtime.md @@ -44,7 +44,7 @@ The policy is as follows: ## Balancing the balances Before and after each instruction, the sum of all account balances must stay the same. -E.g. if one account's balance is increased, another's must be decreased by the same ammount. +E.g. if one account's balance is increased, another's must be decreased by the same amount. Because the runtime can not see changes to accounts which were not passed to it, all accounts for which the balances were modified must be passed, even if they are not needed in the called instruction. From 6198c1b670038be6a42ca7ce790139113eef66df Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Tue, 20 Dec 2022 20:40:05 +0000 Subject: [PATCH 265/465] rolls back merkle shreds on testnet (backport #29340) (#29344) rolls back merkle shreds on testnet (#29340) https://github.com/solana-labs/solana/pull/29339 adds hash domain to merkle shreds. In order to merge that change, need to temporarily disable merkle shreds on testnet. (cherry picked from commit 558292466bc2581ab3397e8b38d8cdaa72e985bb) Co-authored-by: behzad nouri --- core/src/broadcast_stage/standard_broadcast_run.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/src/broadcast_stage/standard_broadcast_run.rs b/core/src/broadcast_stage/standard_broadcast_run.rs index b0addfb5ad1827..3e75e237da1b3e 100644 --- a/core/src/broadcast_stage/standard_broadcast_run.rs +++ b/core/src/broadcast_stage/standard_broadcast_run.rs @@ -473,8 +473,8 @@ impl BroadcastRun for StandardBroadcastRun { } } -fn should_use_merkle_variant(slot: Slot, cluster_type: ClusterType, shred_version: u16) -> bool { - cluster_type == ClusterType::Testnet && shred_version == 6995 && (slot % 19 < 4) +fn should_use_merkle_variant(_slot: Slot, _cluster_type: ClusterType, _shred_version: u16) -> bool { + false } #[cfg(test)] From 61876755e5f6dc0598bac031e9fba21224f3abe1 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Tue, 20 Dec 2022 16:27:55 -0500 Subject: [PATCH 266/465] docs: Accounts must be rent exempt (backport #29256) (#29303) docs: Accounts must be rent exempt (#29256) (cherry picked from commit 426be3d82d5fbc049ca6324e5d32469f9645234c) Co-authored-by: Brooks Prumo --- docs/src/storage_rent_economics.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/docs/src/storage_rent_economics.md b/docs/src/storage_rent_economics.md index 87194a68868182..4b65b250e140a7 100644 --- a/docs/src/storage_rent_economics.md +++ b/docs/src/storage_rent_economics.md @@ -29,3 +29,11 @@ deducted at a rate specified in genesis, in lamports per kilobyte-year. For information on the technical implementation details of this design, see the [Rent](implemented-proposals/rent.md) section. + +**Note:** New accounts now **are required** to be initialized with enough +lamports to be rent exempt. Additionally, transactions that leave an account's +balance below the rent exempt minimum (and non-zero) will **fail**. This +essentially renders all accounts rent exempt. Rent-paying accounts that were +created before this requirement will continue paying rent until either (1) +their balance falls to zero, or (2) a transaction increases the account's +balance to be rent exempt. From a7ada76420de98324592e1a684009927cc19b24f Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 20 Dec 2022 16:30:04 -0600 Subject: [PATCH 267/465] Bump Version to 1.14.12 (#29348) Co-authored-by: willhickey --- Cargo.lock | 484 ++++++++--------- account-decoder/Cargo.toml | 10 +- accounts-bench/Cargo.toml | 12 +- accounts-cluster-bench/Cargo.toml | 34 +- banking-bench/Cargo.toml | 26 +- banks-client/Cargo.toml | 12 +- banks-interface/Cargo.toml | 4 +- banks-server/Cargo.toml | 12 +- bench-streamer/Cargo.toml | 8 +- bench-tps/Cargo.toml | 38 +- bloom/Cargo.toml | 8 +- bucket_map/Cargo.toml | 8 +- clap-utils/Cargo.toml | 8 +- clap-v3-utils/Cargo.toml | 8 +- cli-config/Cargo.toml | 6 +- cli-output/Cargo.toml | 16 +- cli/Cargo.toml | 38 +- client-test/Cargo.toml | 32 +- client/Cargo.toml | 28 +- core/Cargo.toml | 56 +- dos/Cargo.toml | 30 +- download-utils/Cargo.toml | 6 +- entry/Cargo.toml | 16 +- faucet/Cargo.toml | 14 +- frozen-abi/Cargo.toml | 6 +- frozen-abi/macro/Cargo.toml | 2 +- genesis-utils/Cargo.toml | 8 +- genesis/Cargo.toml | 22 +- geyser-plugin-interface/Cargo.toml | 6 +- geyser-plugin-manager/Cargo.toml | 16 +- gossip/Cargo.toml | 38 +- install/Cargo.toml | 14 +- keygen/Cargo.toml | 12 +- ledger-tool/Cargo.toml | 30 +- ledger/Cargo.toml | 40 +- local-cluster/Cargo.toml | 28 +- log-analyzer/Cargo.toml | 6 +- logger/Cargo.toml | 2 +- measure/Cargo.toml | 4 +- merkle-root-bench/Cargo.toml | 12 +- merkle-tree/Cargo.toml | 4 +- metrics/Cargo.toml | 4 +- net-shaper/Cargo.toml | 4 +- net-utils/Cargo.toml | 8 +- notifier/Cargo.toml | 2 +- perf/Cargo.toml | 12 +- poh-bench/Cargo.toml | 14 +- poh/Cargo.toml | 20 +- program-runtime/Cargo.toml | 14 +- program-test/Cargo.toml | 18 +- .../address-lookup-table-tests/Cargo.toml | 8 +- programs/address-lookup-table/Cargo.toml | 12 +- programs/bpf-loader-tests/Cargo.toml | 8 +- programs/bpf/Cargo.lock | 490 +++++++++--------- programs/bpf/Cargo.toml | 28 +- programs/bpf/rust/128bit/Cargo.toml | 6 +- programs/bpf/rust/128bit_dep/Cargo.toml | 4 +- programs/bpf/rust/alloc/Cargo.toml | 4 +- programs/bpf/rust/call_depth/Cargo.toml | 4 +- programs/bpf/rust/caller_access/Cargo.toml | 4 +- programs/bpf/rust/curve25519/Cargo.toml | 6 +- programs/bpf/rust/custom_heap/Cargo.toml | 4 +- programs/bpf/rust/dep_crate/Cargo.toml | 6 +- .../bpf/rust/deprecated_loader/Cargo.toml | 4 +- programs/bpf/rust/dup_accounts/Cargo.toml | 4 +- programs/bpf/rust/error_handling/Cargo.toml | 4 +- programs/bpf/rust/external_spend/Cargo.toml | 4 +- programs/bpf/rust/finalize/Cargo.toml | 4 +- .../rust/get_minimum_delegation/Cargo.toml | 4 +- .../Cargo.toml | 4 +- .../rust/instruction_introspection/Cargo.toml | 4 +- programs/bpf/rust/invoke/Cargo.toml | 4 +- programs/bpf/rust/invoke_and_error/Cargo.toml | 4 +- programs/bpf/rust/invoke_and_ok/Cargo.toml | 4 +- .../bpf/rust/invoke_and_return/Cargo.toml | 4 +- programs/bpf/rust/invoked/Cargo.toml | 4 +- programs/bpf/rust/iter/Cargo.toml | 4 +- programs/bpf/rust/log_data/Cargo.toml | 4 +- programs/bpf/rust/many_args/Cargo.toml | 6 +- programs/bpf/rust/many_args_dep/Cargo.toml | 4 +- programs/bpf/rust/mem/Cargo.toml | 10 +- programs/bpf/rust/membuiltins/Cargo.toml | 6 +- programs/bpf/rust/noop/Cargo.toml | 4 +- programs/bpf/rust/panic/Cargo.toml | 4 +- programs/bpf/rust/param_passing/Cargo.toml | 6 +- .../bpf/rust/param_passing_dep/Cargo.toml | 4 +- programs/bpf/rust/rand/Cargo.toml | 4 +- programs/bpf/rust/realloc/Cargo.toml | 4 +- programs/bpf/rust/realloc_invoke/Cargo.toml | 6 +- .../bpf/rust/ro_account_modify/Cargo.toml | 4 +- programs/bpf/rust/ro_modify/Cargo.toml | 4 +- programs/bpf/rust/sanity/Cargo.toml | 10 +- .../bpf/rust/secp256k1_recover/Cargo.toml | 4 +- programs/bpf/rust/sha/Cargo.toml | 4 +- .../rust/sibling_inner_instruction/Cargo.toml | 4 +- .../bpf/rust/sibling_instruction/Cargo.toml | 4 +- programs/bpf/rust/simulation/Cargo.toml | 12 +- programs/bpf/rust/spoof1/Cargo.toml | 4 +- programs/bpf/rust/spoof1_system/Cargo.toml | 4 +- programs/bpf/rust/sysvar/Cargo.toml | 10 +- programs/bpf/rust/upgradeable/Cargo.toml | 4 +- programs/bpf/rust/upgraded/Cargo.toml | 4 +- programs/bpf_loader/Cargo.toml | 14 +- .../bpf_loader/gen-syscall-list/Cargo.toml | 2 +- programs/compute-budget/Cargo.toml | 6 +- programs/config/Cargo.toml | 8 +- programs/ed25519-tests/Cargo.toml | 6 +- programs/stake/Cargo.toml | 18 +- programs/vote/Cargo.toml | 14 +- programs/zk-token-proof/Cargo.toml | 8 +- rayon-threadlimit/Cargo.toml | 2 +- rbpf-cli/Cargo.toml | 10 +- remote-wallet/Cargo.toml | 4 +- rpc-test/Cargo.toml | 18 +- rpc/Cargo.toml | 48 +- runtime/Cargo.toml | 34 +- runtime/store-tool/Cargo.toml | 8 +- sdk/Cargo.toml | 12 +- sdk/cargo-build-bpf/Cargo.toml | 4 +- sdk/cargo-build-sbf/Cargo.toml | 8 +- .../tests/crates/fail/Cargo.toml | 4 +- .../tests/crates/noop/Cargo.toml | 4 +- sdk/cargo-test-bpf/Cargo.toml | 2 +- sdk/cargo-test-sbf/Cargo.toml | 2 +- sdk/gen-headers/Cargo.toml | 2 +- sdk/macro/Cargo.toml | 2 +- sdk/program/Cargo.toml | 10 +- send-transaction-service/Cargo.toml | 14 +- stake-accounts/Cargo.toml | 16 +- storage-bigtable/Cargo.toml | 10 +- storage-bigtable/build-proto/Cargo.lock | 2 +- storage-bigtable/build-proto/Cargo.toml | 2 +- storage-proto/Cargo.toml | 8 +- streamer/Cargo.toml | 10 +- sys-tuner/Cargo.toml | 6 +- test-validator/Cargo.toml | 28 +- tokens/Cargo.toml | 24 +- transaction-dos/Cargo.toml | 32 +- transaction-status/Cargo.toml | 14 +- upload-perf/Cargo.toml | 4 +- validator/Cargo.toml | 50 +- version/Cargo.toml | 8 +- watchtower/Cargo.toml | 20 +- zk-token-sdk/Cargo.toml | 6 +- 144 files changed, 1269 insertions(+), 1269 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 0237c28cf82c49..d4b31ba716e31a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1688,7 +1688,7 @@ dependencies = [ [[package]] name = "gen-headers" -version = "1.14.11" +version = "1.14.12" dependencies = [ "log", "regex", @@ -1696,7 +1696,7 @@ dependencies = [ [[package]] name = "gen-syscall-list" -version = "1.14.11" +version = "1.14.12" dependencies = [ "regex", ] @@ -3747,15 +3747,15 @@ dependencies = [ [[package]] name = "rbpf-cli" -version = "1.14.11" +version = "1.14.12" dependencies = [ "clap 3.1.8", "serde", "serde_json", "solana-bpf-loader-program", - "solana-logger 1.14.11", + "solana-logger 1.14.12", "solana-program-runtime", - "solana-sdk 1.14.11", + "solana-sdk 1.14.12", "solana_rbpf", ] @@ -4467,7 +4467,7 @@ dependencies = [ [[package]] name = "solana-account-decoder" -version = "1.14.11" +version = "1.14.12" dependencies = [ "Inflector", "base64 0.13.0", @@ -4480,7 +4480,7 @@ dependencies = [ "serde_json", "solana-address-lookup-table-program", "solana-config-program", - "solana-sdk 1.14.11", + "solana-sdk 1.14.12", "solana-vote-program", "spl-token", "spl-token-2022", @@ -4490,21 +4490,21 @@ dependencies = [ [[package]] name = "solana-accounts-bench" -version = "1.14.11" +version = "1.14.12" dependencies = [ "clap 2.33.3", "log", "rayon", - "solana-logger 1.14.11", + "solana-logger 1.14.12", "solana-measure", "solana-runtime", - "solana-sdk 1.14.11", + "solana-sdk 1.14.12", "solana-version", ] [[package]] name = "solana-accounts-cluster-bench" -version = "1.14.11" +version = "1.14.12" dependencies = [ "clap 2.33.3", "log", @@ -4517,11 +4517,11 @@ dependencies = [ "solana-faucet", "solana-gossip", "solana-local-cluster", - "solana-logger 1.14.11", + "solana-logger 1.14.12", "solana-measure", "solana-net-utils", "solana-runtime", - "solana-sdk 1.14.11", + "solana-sdk 1.14.12", "solana-streamer", "solana-test-validator", "solana-transaction-status", @@ -4531,7 +4531,7 @@ dependencies = [ [[package]] name = "solana-address-lookup-table-program" -version = "1.14.11" +version = "1.14.12" dependencies = [ "bincode", "bytemuck", @@ -4540,28 +4540,28 @@ dependencies = [ "num-traits", "rustc_version 0.4.0", "serde", - "solana-frozen-abi 1.14.11", - "solana-frozen-abi-macro 1.14.11", - "solana-program 1.14.11", + "solana-frozen-abi 1.14.12", + "solana-frozen-abi-macro 1.14.12", + "solana-program 1.14.12", "solana-program-runtime", - "solana-sdk 1.14.11", + "solana-sdk 1.14.12", "thiserror", ] [[package]] name = "solana-address-lookup-table-program-tests" -version = "1.14.11" +version = "1.14.12" dependencies = [ "assert_matches", "bincode", "solana-address-lookup-table-program", "solana-program-test", - "solana-sdk 1.14.11", + "solana-sdk 1.14.12", ] [[package]] name = "solana-banking-bench" -version = "1.14.11" +version = "1.14.12" dependencies = [ "clap 3.1.8", "crossbeam-channel", @@ -4572,27 +4572,27 @@ dependencies = [ "solana-core", "solana-gossip", "solana-ledger", - "solana-logger 1.14.11", + "solana-logger 1.14.12", "solana-measure", "solana-perf", "solana-poh", "solana-runtime", - "solana-sdk 1.14.11", + "solana-sdk 1.14.12", "solana-streamer", "solana-version", ] [[package]] name = "solana-banks-client" -version = "1.14.11" +version = "1.14.12" dependencies = [ "borsh", "futures 0.3.21", "solana-banks-interface", "solana-banks-server", - "solana-program 1.14.11", + "solana-program 1.14.12", "solana-runtime", - "solana-sdk 1.14.11", + "solana-sdk 1.14.12", "tarpc", "thiserror", "tokio", @@ -4601,16 +4601,16 @@ dependencies = [ [[package]] name = "solana-banks-interface" -version = "1.14.11" +version = "1.14.12" dependencies = [ "serde", - "solana-sdk 1.14.11", + "solana-sdk 1.14.12", "tarpc", ] [[package]] name = "solana-banks-server" -version = "1.14.11" +version = "1.14.12" dependencies = [ "bincode", "crossbeam-channel", @@ -4618,7 +4618,7 @@ dependencies = [ "solana-banks-interface", "solana-client", "solana-runtime", - "solana-sdk 1.14.11", + "solana-sdk 1.14.12", "solana-send-transaction-service", "tarpc", "tokio", @@ -4628,7 +4628,7 @@ dependencies = [ [[package]] name = "solana-bench-streamer" -version = "1.14.11" +version = "1.14.12" dependencies = [ "clap 3.1.8", "crossbeam-channel", @@ -4639,7 +4639,7 @@ dependencies = [ [[package]] name = "solana-bench-tps" -version = "1.14.11" +version = "1.14.12" dependencies = [ "clap 2.33.3", "crossbeam-channel", @@ -4656,13 +4656,13 @@ dependencies = [ "solana-genesis", "solana-gossip", "solana-local-cluster", - "solana-logger 1.14.11", + "solana-logger 1.14.12", "solana-measure", "solana-metrics", "solana-net-utils", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.11", + "solana-sdk 1.14.12", "solana-streamer", "solana-test-validator", "solana-version", @@ -4671,7 +4671,7 @@ dependencies = [ [[package]] name = "solana-bloom" -version = "1.14.11" +version = "1.14.12" dependencies = [ "bv", "fnv", @@ -4681,14 +4681,14 @@ dependencies = [ "rustc_version 0.4.0", "serde", "serde_derive", - "solana-frozen-abi 1.14.11", - "solana-frozen-abi-macro 1.14.11", - "solana-sdk 1.14.11", + "solana-frozen-abi 1.14.12", + "solana-frozen-abi-macro 1.14.12", + "solana-sdk 1.14.12", ] [[package]] name = "solana-bpf-loader-program" -version = "1.14.11" +version = "1.14.12" dependencies = [ "bincode", "byteorder", @@ -4699,26 +4699,26 @@ dependencies = [ "solana-metrics", "solana-program-runtime", "solana-runtime", - "solana-sdk 1.14.11", - "solana-zk-token-sdk 1.14.11", + "solana-sdk 1.14.12", + "solana-zk-token-sdk 1.14.12", "solana_rbpf", "thiserror", ] [[package]] name = "solana-bpf-loader-program-tests" -version = "1.14.11" +version = "1.14.12" dependencies = [ "assert_matches", "bincode", "solana-bpf-loader-program", "solana-program-test", - "solana-sdk 1.14.11", + "solana-sdk 1.14.12", ] [[package]] name = "solana-bucket-map" -version = "1.14.11" +version = "1.14.12" dependencies = [ "fs_extra", "log", @@ -4726,24 +4726,24 @@ dependencies = [ "modular-bitfield", "rand 0.7.3", "rayon", - "solana-logger 1.14.11", + "solana-logger 1.14.12", "solana-measure", - "solana-sdk 1.14.11", + "solana-sdk 1.14.12", "tempfile", ] [[package]] name = "solana-cargo-build-bpf" -version = "1.14.11" +version = "1.14.12" dependencies = [ "cargo_metadata", "clap 3.1.8", - "solana-sdk 1.14.11", + "solana-sdk 1.14.12", ] [[package]] name = "solana-cargo-build-sbf" -version = "1.14.11" +version = "1.14.12" dependencies = [ "bzip2", "cargo_metadata", @@ -4752,14 +4752,14 @@ dependencies = [ "regex", "serial_test", "solana-download-utils", - "solana-logger 1.14.11", - "solana-sdk 1.14.11", + "solana-logger 1.14.12", + "solana-sdk 1.14.12", "tar", ] [[package]] name = "solana-cargo-test-bpf" -version = "1.14.11" +version = "1.14.12" dependencies = [ "cargo_metadata", "clap 3.1.8", @@ -4767,7 +4767,7 @@ dependencies = [ [[package]] name = "solana-cargo-test-sbf" -version = "1.14.11" +version = "1.14.12" dependencies = [ "cargo_metadata", "clap 3.1.8", @@ -4775,14 +4775,14 @@ dependencies = [ [[package]] name = "solana-clap-utils" -version = "1.14.11" +version = "1.14.12" dependencies = [ "chrono", "clap 2.33.3", "rpassword", "solana-perf", "solana-remote-wallet", - "solana-sdk 1.14.11", + "solana-sdk 1.14.12", "tempfile", "thiserror", "tiny-bip39", @@ -4792,14 +4792,14 @@ dependencies = [ [[package]] name = "solana-clap-v3-utils" -version = "1.14.11" +version = "1.14.12" dependencies = [ "chrono", "clap 3.1.8", "rpassword", "solana-perf", "solana-remote-wallet", - "solana-sdk 1.14.11", + "solana-sdk 1.14.12", "tempfile", "thiserror", "tiny-bip39", @@ -4809,7 +4809,7 @@ dependencies = [ [[package]] name = "solana-cli" -version = "1.14.11" +version = "1.14.12" dependencies = [ "bincode", "bs58", @@ -4837,10 +4837,10 @@ dependencies = [ "solana-client", "solana-config-program", "solana-faucet", - "solana-logger 1.14.11", + "solana-logger 1.14.12", "solana-program-runtime", "solana-remote-wallet", - "solana-sdk 1.14.11", + "solana-sdk 1.14.12", "solana-streamer", "solana-test-validator", "solana-transaction-status", @@ -4855,7 +4855,7 @@ dependencies = [ [[package]] name = "solana-cli-config" -version = "1.14.11" +version = "1.14.12" dependencies = [ "anyhow", "dirs-next", @@ -4864,13 +4864,13 @@ dependencies = [ "serde_derive", "serde_yaml", "solana-clap-utils", - "solana-sdk 1.14.11", + "solana-sdk 1.14.12", "url 2.2.2", ] [[package]] name = "solana-cli-output" -version = "1.14.11" +version = "1.14.12" dependencies = [ "Inflector", "base64 0.13.0", @@ -4888,7 +4888,7 @@ dependencies = [ "solana-clap-utils", "solana-cli-config", "solana-client", - "solana-sdk 1.14.11", + "solana-sdk 1.14.12", "solana-transaction-status", "solana-vote-program", "spl-memo", @@ -4896,7 +4896,7 @@ dependencies = [ [[package]] name = "solana-client" -version = "1.14.11" +version = "1.14.12" dependencies = [ "anyhow", "assert_matches", @@ -4932,12 +4932,12 @@ dependencies = [ "solana-account-decoder", "solana-clap-utils", "solana-faucet", - "solana-logger 1.14.11", + "solana-logger 1.14.12", "solana-measure", "solana-metrics", "solana-net-utils", "solana-perf", - "solana-sdk 1.14.11", + "solana-sdk 1.14.12", "solana-streamer", "solana-transaction-status", "solana-version", @@ -4953,14 +4953,14 @@ dependencies = [ [[package]] name = "solana-client-test" -version = "1.14.11" +version = "1.14.12" dependencies = [ "futures-util", "serde_json", "serial_test", "solana-client", "solana-ledger", - "solana-logger 1.14.11", + "solana-logger 1.14.12", "solana-measure", "solana-merkle-tree", "solana-metrics", @@ -4968,7 +4968,7 @@ dependencies = [ "solana-rayon-threadlimit", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.11", + "solana-sdk 1.14.12", "solana-streamer", "solana-test-validator", "solana-transaction-status", @@ -4979,28 +4979,28 @@ dependencies = [ [[package]] name = "solana-compute-budget-program" -version = "1.14.11" +version = "1.14.12" dependencies = [ "solana-program-runtime", - "solana-sdk 1.14.11", + "solana-sdk 1.14.12", ] [[package]] name = "solana-config-program" -version = "1.14.11" +version = "1.14.12" dependencies = [ "bincode", "chrono", "serde", "serde_derive", - "solana-logger 1.14.11", + "solana-logger 1.14.12", "solana-program-runtime", - "solana-sdk 1.14.11", + "solana-sdk 1.14.12", ] [[package]] name = "solana-core" -version = "1.14.11" +version = "1.14.12" dependencies = [ "ahash", "base64 0.13.0", @@ -5033,12 +5033,12 @@ dependencies = [ "solana-bloom", "solana-client", "solana-entry", - "solana-frozen-abi 1.14.11", - "solana-frozen-abi-macro 1.14.11", + "solana-frozen-abi 1.14.12", + "solana-frozen-abi-macro 1.14.12", "solana-geyser-plugin-manager", "solana-gossip", "solana-ledger", - "solana-logger 1.14.11", + "solana-logger 1.14.12", "solana-measure", "solana-metrics", "solana-net-utils", @@ -5048,7 +5048,7 @@ dependencies = [ "solana-rayon-threadlimit", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.11", + "solana-sdk 1.14.12", "solana-send-transaction-service", "solana-stake-program", "solana-streamer", @@ -5068,7 +5068,7 @@ dependencies = [ [[package]] name = "solana-dos" -version = "1.14.11" +version = "1.14.12" dependencies = [ "bincode", "clap 3.1.8", @@ -5084,42 +5084,42 @@ dependencies = [ "solana-faucet", "solana-gossip", "solana-local-cluster", - "solana-logger 1.14.11", + "solana-logger 1.14.12", "solana-measure", "solana-net-utils", "solana-perf", "solana-rpc", - "solana-sdk 1.14.11", + "solana-sdk 1.14.12", "solana-streamer", "solana-version", ] [[package]] name = "solana-download-utils" -version = "1.14.11" +version = "1.14.12" dependencies = [ "console", "indicatif", "log", "reqwest", "solana-runtime", - "solana-sdk 1.14.11", + "solana-sdk 1.14.12", ] [[package]] name = "solana-ed25519-program-tests" -version = "1.14.11" +version = "1.14.12" dependencies = [ "assert_matches", "ed25519-dalek", "rand 0.7.3", "solana-program-test", - "solana-sdk 1.14.11", + "solana-sdk 1.14.12", ] [[package]] name = "solana-entry" -version = "1.14.11" +version = "1.14.12" dependencies = [ "bincode", "crossbeam-channel", @@ -5131,18 +5131,18 @@ dependencies = [ "rand 0.7.3", "rayon", "serde", - "solana-logger 1.14.11", + "solana-logger 1.14.12", "solana-measure", "solana-merkle-tree", "solana-metrics", "solana-perf", "solana-rayon-threadlimit", - "solana-sdk 1.14.11", + "solana-sdk 1.14.12", ] [[package]] name = "solana-faucet" -version = "1.14.11" +version = "1.14.12" dependencies = [ "bincode", "byteorder", @@ -5153,9 +5153,9 @@ dependencies = [ "serde_derive", "solana-clap-utils", "solana-cli-config", - "solana-logger 1.14.11", + "solana-logger 1.14.12", "solana-metrics", - "solana-sdk 1.14.11", + "solana-sdk 1.14.12", "solana-version", "spl-memo", "thiserror", @@ -5198,7 +5198,7 @@ dependencies = [ [[package]] name = "solana-frozen-abi" -version = "1.14.11" +version = "1.14.12" dependencies = [ "ahash", "blake3", @@ -5223,8 +5223,8 @@ dependencies = [ "serde_derive", "serde_json", "sha2 0.10.2", - "solana-frozen-abi-macro 1.14.11", - "solana-logger 1.14.11", + "solana-frozen-abi-macro 1.14.12", + "solana-logger 1.14.12", "subtle", "thiserror", ] @@ -5243,7 +5243,7 @@ dependencies = [ [[package]] name = "solana-frozen-abi-macro" -version = "1.14.11" +version = "1.14.12" dependencies = [ "proc-macro2 1.0.41", "quote 1.0.18", @@ -5253,7 +5253,7 @@ dependencies = [ [[package]] name = "solana-genesis" -version = "1.14.11" +version = "1.14.12" dependencies = [ "base64 0.13.0", "clap 2.33.3", @@ -5264,9 +5264,9 @@ dependencies = [ "solana-cli-config", "solana-entry", "solana-ledger", - "solana-logger 1.14.11", + "solana-logger 1.14.12", "solana-runtime", - "solana-sdk 1.14.11", + "solana-sdk 1.14.12", "solana-stake-program", "solana-version", "solana-vote-program", @@ -5275,26 +5275,26 @@ dependencies = [ [[package]] name = "solana-genesis-utils" -version = "1.14.11" +version = "1.14.12" dependencies = [ "solana-download-utils", "solana-runtime", - "solana-sdk 1.14.11", + "solana-sdk 1.14.12", ] [[package]] name = "solana-geyser-plugin-interface" -version = "1.14.11" +version = "1.14.12" dependencies = [ "log", - "solana-sdk 1.14.11", + "solana-sdk 1.14.12", "solana-transaction-status", "thiserror", ] [[package]] name = "solana-geyser-plugin-manager" -version = "1.14.11" +version = "1.14.12" dependencies = [ "bs58", "crossbeam-channel", @@ -5307,14 +5307,14 @@ dependencies = [ "solana-metrics", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.11", + "solana-sdk 1.14.12", "solana-transaction-status", "thiserror", ] [[package]] name = "solana-gossip" -version = "1.14.11" +version = "1.14.12" dependencies = [ "bincode", "bv", @@ -5341,17 +5341,17 @@ dependencies = [ "solana-clap-utils", "solana-client", "solana-entry", - "solana-frozen-abi 1.14.11", - "solana-frozen-abi-macro 1.14.11", + "solana-frozen-abi 1.14.12", + "solana-frozen-abi-macro 1.14.12", "solana-ledger", - "solana-logger 1.14.11", + "solana-logger 1.14.12", "solana-measure", "solana-metrics", "solana-net-utils", "solana-perf", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.14.11", + "solana-sdk 1.14.12", "solana-streamer", "solana-version", "solana-vote-program", @@ -5360,7 +5360,7 @@ dependencies = [ [[package]] name = "solana-install" -version = "1.14.11" +version = "1.14.12" dependencies = [ "atty", "bincode", @@ -5381,8 +5381,8 @@ dependencies = [ "solana-clap-utils", "solana-client", "solana-config-program", - "solana-logger 1.14.11", - "solana-sdk 1.14.11", + "solana-logger 1.14.12", + "solana-sdk 1.14.12", "solana-version", "tar", "tempfile", @@ -5393,7 +5393,7 @@ dependencies = [ [[package]] name = "solana-keygen" -version = "1.14.11" +version = "1.14.12" dependencies = [ "bs58", "clap 3.1.8", @@ -5402,14 +5402,14 @@ dependencies = [ "solana-clap-v3-utils", "solana-cli-config", "solana-remote-wallet", - "solana-sdk 1.14.11", + "solana-sdk 1.14.12", "solana-version", "tiny-bip39", ] [[package]] name = "solana-ledger" -version = "1.14.11" +version = "1.14.12" dependencies = [ "assert_matches", "bincode", @@ -5443,16 +5443,16 @@ dependencies = [ "solana-account-decoder", "solana-bpf-loader-program", "solana-entry", - "solana-frozen-abi 1.14.11", - "solana-frozen-abi-macro 1.14.11", - "solana-logger 1.14.11", + "solana-frozen-abi 1.14.12", + "solana-frozen-abi-macro 1.14.12", + "solana-logger 1.14.12", "solana-measure", "solana-metrics", "solana-perf", "solana-program-runtime", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.14.11", + "solana-sdk 1.14.12", "solana-stake-program", "solana-storage-bigtable", "solana-storage-proto", @@ -5471,7 +5471,7 @@ dependencies = [ [[package]] name = "solana-ledger-tool" -version = "1.14.11" +version = "1.14.12" dependencies = [ "assert_cmd", "base64 0.13.0", @@ -5493,10 +5493,10 @@ dependencies = [ "solana-core", "solana-entry", "solana-ledger", - "solana-logger 1.14.11", + "solana-logger 1.14.12", "solana-measure", "solana-runtime", - "solana-sdk 1.14.11", + "solana-sdk 1.14.12", "solana-stake-program", "solana-storage-bigtable", "solana-transaction-status", @@ -5508,7 +5508,7 @@ dependencies = [ [[package]] name = "solana-local-cluster" -version = "1.14.11" +version = "1.14.12" dependencies = [ "assert_matches", "crossbeam-channel", @@ -5526,9 +5526,9 @@ dependencies = [ "solana-entry", "solana-gossip", "solana-ledger", - "solana-logger 1.14.11", + "solana-logger 1.14.12", "solana-runtime", - "solana-sdk 1.14.11", + "solana-sdk 1.14.12", "solana-stake-program", "solana-streamer", "solana-vote-program", @@ -5537,13 +5537,13 @@ dependencies = [ [[package]] name = "solana-log-analyzer" -version = "1.14.11" +version = "1.14.12" dependencies = [ "byte-unit", "clap 3.1.8", "serde", "serde_json", - "solana-logger 1.14.11", + "solana-logger 1.14.12", "solana-version", ] @@ -5560,7 +5560,7 @@ dependencies = [ [[package]] name = "solana-logger" -version = "1.14.11" +version = "1.14.12" dependencies = [ "env_logger", "lazy_static", @@ -5569,38 +5569,38 @@ dependencies = [ [[package]] name = "solana-measure" -version = "1.14.11" +version = "1.14.12" dependencies = [ "log", - "solana-sdk 1.14.11", + "solana-sdk 1.14.12", ] [[package]] name = "solana-merkle-root-bench" -version = "1.14.11" +version = "1.14.12" dependencies = [ "clap 2.33.3", "log", - "solana-logger 1.14.11", + "solana-logger 1.14.12", "solana-measure", "solana-runtime", - "solana-sdk 1.14.11", + "solana-sdk 1.14.12", "solana-version", ] [[package]] name = "solana-merkle-tree" -version = "1.14.11" +version = "1.14.12" dependencies = [ "fast-math", "hex", "matches", - "solana-program 1.14.11", + "solana-program 1.14.12", ] [[package]] name = "solana-metrics" -version = "1.14.11" +version = "1.14.12" dependencies = [ "crossbeam-channel", "env_logger", @@ -5610,23 +5610,23 @@ dependencies = [ "rand 0.7.3", "reqwest", "serial_test", - "solana-sdk 1.14.11", + "solana-sdk 1.14.12", ] [[package]] name = "solana-net-shaper" -version = "1.14.11" +version = "1.14.12" dependencies = [ "clap 3.1.8", "rand 0.7.3", "serde", "serde_json", - "solana-logger 1.14.11", + "solana-logger 1.14.12", ] [[package]] name = "solana-net-utils" -version = "1.14.11" +version = "1.14.12" dependencies = [ "bincode", "clap 3.1.8", @@ -5637,8 +5637,8 @@ dependencies = [ "serde", "serde_derive", "socket2", - "solana-logger 1.14.11", - "solana-sdk 1.14.11", + "solana-logger 1.14.12", + "solana-sdk 1.14.12", "solana-version", "tokio", "url 2.2.2", @@ -5646,7 +5646,7 @@ dependencies = [ [[package]] name = "solana-notifier" -version = "1.14.11" +version = "1.14.12" dependencies = [ "log", "reqwest", @@ -5655,7 +5655,7 @@ dependencies = [ [[package]] name = "solana-perf" -version = "1.14.11" +version = "1.14.12" dependencies = [ "ahash", "bincode", @@ -5673,16 +5673,16 @@ dependencies = [ "rand 0.7.3", "rayon", "serde", - "solana-logger 1.14.11", + "solana-logger 1.14.12", "solana-metrics", "solana-rayon-threadlimit", - "solana-sdk 1.14.11", + "solana-sdk 1.14.12", "solana-vote-program", ] [[package]] name = "solana-poh" -version = "1.14.11" +version = "1.14.12" dependencies = [ "bincode", "core_affinity", @@ -5692,29 +5692,29 @@ dependencies = [ "rand 0.7.3", "solana-entry", "solana-ledger", - "solana-logger 1.14.11", + "solana-logger 1.14.12", "solana-measure", "solana-metrics", "solana-perf", "solana-runtime", - "solana-sdk 1.14.11", + "solana-sdk 1.14.12", "solana-sys-tuner", "thiserror", ] [[package]] name = "solana-poh-bench" -version = "1.14.11" +version = "1.14.12" dependencies = [ "clap 3.1.8", "log", "rand 0.7.3", "rayon", "solana-entry", - "solana-logger 1.14.11", + "solana-logger 1.14.12", "solana-measure", "solana-perf", - "solana-sdk 1.14.11", + "solana-sdk 1.14.12", "solana-version", ] @@ -5769,7 +5769,7 @@ dependencies = [ [[package]] name = "solana-program" -version = "1.14.11" +version = "1.14.12" dependencies = [ "anyhow", "assert_matches", @@ -5807,10 +5807,10 @@ dependencies = [ "serde_json", "sha2 0.10.2", "sha3 0.10.1", - "solana-frozen-abi 1.14.11", - "solana-frozen-abi-macro 1.14.11", - "solana-logger 1.14.11", - "solana-sdk-macro 1.14.11", + "solana-frozen-abi 1.14.12", + "solana-frozen-abi-macro 1.14.12", + "solana-logger 1.14.12", + "solana-sdk-macro 1.14.12", "static_assertions", "thiserror", "tiny-bip39", @@ -5820,7 +5820,7 @@ dependencies = [ [[package]] name = "solana-program-runtime" -version = "1.14.11" +version = "1.14.12" dependencies = [ "base64 0.13.0", "bincode", @@ -5835,18 +5835,18 @@ dependencies = [ "rand 0.7.3", "rustc_version 0.4.0", "serde", - "solana-frozen-abi 1.14.11", - "solana-frozen-abi-macro 1.14.11", - "solana-logger 1.14.11", + "solana-frozen-abi 1.14.12", + "solana-frozen-abi-macro 1.14.12", + "solana-logger 1.14.12", "solana-measure", "solana-metrics", - "solana-sdk 1.14.11", + "solana-sdk 1.14.12", "thiserror", ] [[package]] name = "solana-program-test" -version = "1.14.11" +version = "1.14.12" dependencies = [ "assert_matches", "async-trait", @@ -5858,10 +5858,10 @@ dependencies = [ "solana-banks-client", "solana-banks-server", "solana-bpf-loader-program", - "solana-logger 1.14.11", + "solana-logger 1.14.12", "solana-program-runtime", "solana-runtime", - "solana-sdk 1.14.11", + "solana-sdk 1.14.12", "solana-vote-program", "thiserror", "tokio", @@ -5869,7 +5869,7 @@ dependencies = [ [[package]] name = "solana-rayon-threadlimit" -version = "1.14.11" +version = "1.14.12" dependencies = [ "lazy_static", "num_cpus", @@ -5877,7 +5877,7 @@ dependencies = [ [[package]] name = "solana-remote-wallet" -version = "1.14.11" +version = "1.14.12" dependencies = [ "console", "dialoguer", @@ -5888,14 +5888,14 @@ dependencies = [ "parking_lot 0.12.1", "qstring", "semver 1.0.10", - "solana-sdk 1.14.11", + "solana-sdk 1.14.12", "thiserror", "uriparse", ] [[package]] name = "solana-rpc" -version = "1.14.11" +version = "1.14.12" dependencies = [ "base64 0.13.0", "bincode", @@ -5931,7 +5931,7 @@ dependencies = [ "solana-poh", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.14.11", + "solana-sdk 1.14.12", "solana-send-transaction-service", "solana-stake-program", "solana-storage-bigtable", @@ -5950,7 +5950,7 @@ dependencies = [ [[package]] name = "solana-rpc-test" -version = "1.14.11" +version = "1.14.12" dependencies = [ "bincode", "bs58", @@ -5962,9 +5962,9 @@ dependencies = [ "serde_json", "solana-account-decoder", "solana-client", - "solana-logger 1.14.11", + "solana-logger 1.14.12", "solana-rpc", - "solana-sdk 1.14.11", + "solana-sdk 1.14.12", "solana-streamer", "solana-test-validator", "solana-transaction-status", @@ -5973,7 +5973,7 @@ dependencies = [ [[package]] name = "solana-runtime" -version = "1.14.11" +version = "1.14.12" dependencies = [ "arrayref", "assert_matches", @@ -6013,18 +6013,18 @@ dependencies = [ "solana-bucket-map", "solana-compute-budget-program", "solana-config-program", - "solana-frozen-abi 1.14.11", - "solana-frozen-abi-macro 1.14.11", - "solana-logger 1.14.11", + "solana-frozen-abi 1.14.12", + "solana-frozen-abi-macro 1.14.12", + "solana-logger 1.14.12", "solana-measure", "solana-metrics", "solana-program-runtime", "solana-rayon-threadlimit", - "solana-sdk 1.14.11", + "solana-sdk 1.14.12", "solana-stake-program", "solana-vote-program", "solana-zk-token-proof-program", - "solana-zk-token-sdk 1.14.11", + "solana-zk-token-sdk 1.14.12", "strum", "strum_macros", "symlink", @@ -6087,7 +6087,7 @@ dependencies = [ [[package]] name = "solana-sdk" -version = "1.14.11" +version = "1.14.12" dependencies = [ "anyhow", "assert_matches", @@ -6127,11 +6127,11 @@ dependencies = [ "serde_json", "sha2 0.10.2", "sha3 0.10.1", - "solana-frozen-abi 1.14.11", - "solana-frozen-abi-macro 1.14.11", - "solana-logger 1.14.11", - "solana-program 1.14.11", - "solana-sdk-macro 1.14.11", + "solana-frozen-abi 1.14.12", + "solana-frozen-abi-macro 1.14.12", + "solana-logger 1.14.12", + "solana-program 1.14.12", + "solana-sdk-macro 1.14.12", "static_assertions", "thiserror", "tiny-bip39", @@ -6154,7 +6154,7 @@ dependencies = [ [[package]] name = "solana-sdk-macro" -version = "1.14.11" +version = "1.14.12" dependencies = [ "bs58", "proc-macro2 1.0.41", @@ -6165,21 +6165,21 @@ dependencies = [ [[package]] name = "solana-send-transaction-service" -version = "1.14.11" +version = "1.14.12" dependencies = [ "crossbeam-channel", "log", "solana-client", - "solana-logger 1.14.11", + "solana-logger 1.14.12", "solana-measure", "solana-metrics", "solana-runtime", - "solana-sdk 1.14.11", + "solana-sdk 1.14.12", ] [[package]] name = "solana-stake-accounts" -version = "1.14.11" +version = "1.14.12" dependencies = [ "clap 2.33.3", "solana-clap-utils", @@ -6187,13 +6187,13 @@ dependencies = [ "solana-client", "solana-remote-wallet", "solana-runtime", - "solana-sdk 1.14.11", + "solana-sdk 1.14.12", "solana-stake-program", ] [[package]] name = "solana-stake-program" -version = "1.14.11" +version = "1.14.12" dependencies = [ "assert_matches", "bincode", @@ -6205,12 +6205,12 @@ dependencies = [ "serde", "serde_derive", "solana-config-program", - "solana-frozen-abi 1.14.11", - "solana-frozen-abi-macro 1.14.11", - "solana-logger 1.14.11", + "solana-frozen-abi 1.14.12", + "solana-frozen-abi-macro 1.14.12", + "solana-logger 1.14.12", "solana-metrics", "solana-program-runtime", - "solana-sdk 1.14.11", + "solana-sdk 1.14.12", "solana-vote-program", "test-case", "thiserror", @@ -6218,7 +6218,7 @@ dependencies = [ [[package]] name = "solana-storage-bigtable" -version = "1.14.11" +version = "1.14.12" dependencies = [ "backoff", "bincode", @@ -6239,7 +6239,7 @@ dependencies = [ "serde_derive", "smpl_jwt", "solana-metrics", - "solana-sdk 1.14.11", + "solana-sdk 1.14.12", "solana-storage-proto", "solana-transaction-status", "thiserror", @@ -6250,7 +6250,7 @@ dependencies = [ [[package]] name = "solana-storage-proto" -version = "1.14.11" +version = "1.14.12" dependencies = [ "bincode", "bs58", @@ -6259,25 +6259,25 @@ dependencies = [ "protobuf-src", "serde", "solana-account-decoder", - "solana-sdk 1.14.11", + "solana-sdk 1.14.12", "solana-transaction-status", "tonic-build 0.8.0", ] [[package]] name = "solana-store-tool" -version = "1.14.11" +version = "1.14.12" dependencies = [ "clap 2.33.3", "log", - "solana-logger 1.14.11", + "solana-logger 1.14.12", "solana-runtime", "solana-version", ] [[package]] name = "solana-streamer" -version = "1.14.11" +version = "1.14.12" dependencies = [ "crossbeam-channel", "futures-util", @@ -6294,10 +6294,10 @@ dependencies = [ "rand 0.7.3", "rcgen", "rustls 0.20.6", - "solana-logger 1.14.11", + "solana-logger 1.14.12", "solana-metrics", "solana-perf", - "solana-sdk 1.14.11", + "solana-sdk 1.14.12", "thiserror", "tokio", "x509-parser", @@ -6305,13 +6305,13 @@ dependencies = [ [[package]] name = "solana-sys-tuner" -version = "1.14.11" +version = "1.14.12" dependencies = [ "clap 2.33.3", "libc", "log", "nix", - "solana-logger 1.14.11", + "solana-logger 1.14.12", "solana-version", "sysctl", "unix_socket2", @@ -6320,7 +6320,7 @@ dependencies = [ [[package]] name = "solana-test-validator" -version = "1.14.11" +version = "1.14.12" dependencies = [ "base64 0.13.0", "log", @@ -6331,20 +6331,20 @@ dependencies = [ "solana-core", "solana-gossip", "solana-ledger", - "solana-logger 1.14.11", + "solana-logger 1.14.12", "solana-net-utils", "solana-program-runtime", "solana-program-test", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.11", + "solana-sdk 1.14.12", "solana-streamer", "tokio", ] [[package]] name = "solana-tokens" -version = "1.14.11" +version = "1.14.12" dependencies = [ "bincode", "chrono", @@ -6360,9 +6360,9 @@ dependencies = [ "solana-clap-utils", "solana-cli-config", "solana-client", - "solana-logger 1.14.11", + "solana-logger 1.14.12", "solana-remote-wallet", - "solana-sdk 1.14.11", + "solana-sdk 1.14.12", "solana-streamer", "solana-test-validator", "solana-transaction-status", @@ -6375,7 +6375,7 @@ dependencies = [ [[package]] name = "solana-transaction-dos" -version = "1.14.11" +version = "1.14.12" dependencies = [ "bincode", "clap 2.33.3", @@ -6389,11 +6389,11 @@ dependencies = [ "solana-faucet", "solana-gossip", "solana-local-cluster", - "solana-logger 1.14.11", + "solana-logger 1.14.12", "solana-measure", "solana-net-utils", "solana-runtime", - "solana-sdk 1.14.11", + "solana-sdk 1.14.12", "solana-streamer", "solana-transaction-status", "solana-version", @@ -6401,7 +6401,7 @@ dependencies = [ [[package]] name = "solana-transaction-status" -version = "1.14.11" +version = "1.14.12" dependencies = [ "Inflector", "base64 0.13.0", @@ -6417,7 +6417,7 @@ dependencies = [ "solana-address-lookup-table-program", "solana-measure", "solana-metrics", - "solana-sdk 1.14.11", + "solana-sdk 1.14.12", "solana-vote-program", "spl-associated-token-account", "spl-memo", @@ -6428,7 +6428,7 @@ dependencies = [ [[package]] name = "solana-upload-perf" -version = "1.14.11" +version = "1.14.12" dependencies = [ "serde_json", "solana-metrics", @@ -6436,7 +6436,7 @@ dependencies = [ [[package]] name = "solana-validator" -version = "1.14.11" +version = "1.14.12" dependencies = [ "chrono", "clap 2.33.3", @@ -6467,14 +6467,14 @@ dependencies = [ "solana-genesis-utils", "solana-gossip", "solana-ledger", - "solana-logger 1.14.11", + "solana-logger 1.14.12", "solana-metrics", "solana-net-utils", "solana-perf", "solana-poh", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.11", + "solana-sdk 1.14.12", "solana-send-transaction-service", "solana-storage-bigtable", "solana-streamer", @@ -6487,21 +6487,21 @@ dependencies = [ [[package]] name = "solana-version" -version = "1.14.11" +version = "1.14.12" dependencies = [ "log", "rustc_version 0.4.0", "semver 1.0.10", "serde", "serde_derive", - "solana-frozen-abi 1.14.11", - "solana-frozen-abi-macro 1.14.11", - "solana-sdk 1.14.11", + "solana-frozen-abi 1.14.12", + "solana-frozen-abi-macro 1.14.12", + "solana-sdk 1.14.12", ] [[package]] name = "solana-vote-program" -version = "1.14.11" +version = "1.14.12" dependencies = [ "bincode", "itertools", @@ -6512,18 +6512,18 @@ dependencies = [ "rustc_version 0.4.0", "serde", "serde_derive", - "solana-frozen-abi 1.14.11", - "solana-frozen-abi-macro 1.14.11", - "solana-logger 1.14.11", + "solana-frozen-abi 1.14.12", + "solana-frozen-abi-macro 1.14.12", + "solana-logger 1.14.12", "solana-metrics", "solana-program-runtime", - "solana-sdk 1.14.11", + "solana-sdk 1.14.12", "thiserror", ] [[package]] name = "solana-watchtower" -version = "1.14.11" +version = "1.14.12" dependencies = [ "clap 2.33.3", "humantime", @@ -6532,24 +6532,24 @@ dependencies = [ "solana-cli-config", "solana-cli-output", "solana-client", - "solana-logger 1.14.11", + "solana-logger 1.14.12", "solana-metrics", "solana-notifier", - "solana-sdk 1.14.11", + "solana-sdk 1.14.12", "solana-version", ] [[package]] name = "solana-zk-token-proof-program" -version = "1.14.11" +version = "1.14.12" dependencies = [ "bytemuck", "getrandom 0.1.16", "num-derive", "num-traits", "solana-program-runtime", - "solana-sdk 1.14.11", - "solana-zk-token-sdk 1.14.11", + "solana-sdk 1.14.12", + "solana-zk-token-sdk 1.14.12", ] [[package]] @@ -6585,7 +6585,7 @@ dependencies = [ [[package]] name = "solana-zk-token-sdk" -version = "1.14.11" +version = "1.14.12" dependencies = [ "aes-gcm-siv", "arrayref", @@ -6605,8 +6605,8 @@ dependencies = [ "serde", "serde_json", "sha3 0.9.1", - "solana-program 1.14.11", - "solana-sdk 1.14.11", + "solana-program 1.14.12", + "solana-sdk 1.14.12", "subtle", "thiserror", "zeroize", diff --git a/account-decoder/Cargo.toml b/account-decoder/Cargo.toml index 10c3d94cd17136..7dd7dc063d905d 100644 --- a/account-decoder/Cargo.toml +++ b/account-decoder/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-account-decoder" -version = "1.14.11" +version = "1.14.12" description = "Solana account decoder" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -19,10 +19,10 @@ lazy_static = "1.4.0" serde = "1.0.138" serde_derive = "1.0.103" serde_json = "1.0.81" -solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.11" } -solana-config-program = { path = "../programs/config", version = "=1.14.11" } -solana-sdk = { path = "../sdk", version = "=1.14.11" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.11" } +solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.12" } +solana-config-program = { path = "../programs/config", version = "=1.14.12" } +solana-sdk = { path = "../sdk", version = "=1.14.12" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.12" } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } spl-token-2022 = { version = "=0.5.0", features = ["no-entrypoint"] } thiserror = "1.0" diff --git a/accounts-bench/Cargo.toml b/accounts-bench/Cargo.toml index bc6377aa2e55d6..e424080f4e45b8 100644 --- a/accounts-bench/Cargo.toml +++ b/accounts-bench/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-accounts-bench" -version = "1.14.11" +version = "1.14.12" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -12,11 +12,11 @@ publish = false clap = "2.33.1" log = "0.4.17" rayon = "1.5.3" -solana-logger = { path = "../logger", version = "=1.14.11" } -solana-measure = { path = "../measure", version = "=1.14.11" } -solana-runtime = { path = "../runtime", version = "=1.14.11" } -solana-sdk = { path = "../sdk", version = "=1.14.11" } -solana-version = { path = "../version", version = "=1.14.11" } +solana-logger = { path = "../logger", version = "=1.14.12" } +solana-measure = { path = "../measure", version = "=1.14.12" } +solana-runtime = { path = "../runtime", version = "=1.14.12" } +solana-sdk = { path = "../sdk", version = "=1.14.12" } +solana-version = { path = "../version", version = "=1.14.12" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/accounts-cluster-bench/Cargo.toml b/accounts-cluster-bench/Cargo.toml index b2e68f69358a72..ccbc6724050d79 100644 --- a/accounts-cluster-bench/Cargo.toml +++ b/accounts-cluster-bench/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-accounts-cluster-bench" -version = "1.14.11" +version = "1.14.12" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -13,25 +13,25 @@ clap = "2.33.1" log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.11" } -solana-clap-utils = { path = "../clap-utils", version = "=1.14.11" } -solana-client = { path = "../client", version = "=1.14.11" } -solana-faucet = { path = "../faucet", version = "=1.14.11" } -solana-gossip = { path = "../gossip", version = "=1.14.11" } -solana-logger = { path = "../logger", version = "=1.14.11" } -solana-measure = { path = "../measure", version = "=1.14.11" } -solana-net-utils = { path = "../net-utils", version = "=1.14.11" } -solana-runtime = { path = "../runtime", version = "=1.14.11" } -solana-sdk = { path = "../sdk", version = "=1.14.11" } -solana-streamer = { path = "../streamer", version = "=1.14.11" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.11" } -solana-version = { path = "../version", version = "=1.14.11" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.12" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.12" } +solana-client = { path = "../client", version = "=1.14.12" } +solana-faucet = { path = "../faucet", version = "=1.14.12" } +solana-gossip = { path = "../gossip", version = "=1.14.12" } +solana-logger = { path = "../logger", version = "=1.14.12" } +solana-measure = { path = "../measure", version = "=1.14.12" } +solana-net-utils = { path = "../net-utils", version = "=1.14.12" } +solana-runtime = { path = "../runtime", version = "=1.14.12" } +solana-sdk = { path = "../sdk", version = "=1.14.12" } +solana-streamer = { path = "../streamer", version = "=1.14.12" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.12" } +solana-version = { path = "../version", version = "=1.14.12" } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } [dev-dependencies] -solana-core = { path = "../core", version = "=1.14.11" } -solana-local-cluster = { path = "../local-cluster", version = "=1.14.11" } -solana-test-validator = { path = "../test-validator", version = "=1.14.11" } +solana-core = { path = "../core", version = "=1.14.12" } +solana-local-cluster = { path = "../local-cluster", version = "=1.14.12" } +solana-test-validator = { path = "../test-validator", version = "=1.14.12" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/banking-bench/Cargo.toml b/banking-bench/Cargo.toml index ebd8203af23a50..aed4ba9465d626 100644 --- a/banking-bench/Cargo.toml +++ b/banking-bench/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-banking-bench" -version = "1.14.11" +version = "1.14.12" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,18 +14,18 @@ crossbeam-channel = "0.5" log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" -solana-client = { path = "../client", version = "=1.14.11" } -solana-core = { path = "../core", version = "=1.14.11" } -solana-gossip = { path = "../gossip", version = "=1.14.11" } -solana-ledger = { path = "../ledger", version = "=1.14.11" } -solana-logger = { path = "../logger", version = "=1.14.11" } -solana-measure = { path = "../measure", version = "=1.14.11" } -solana-perf = { path = "../perf", version = "=1.14.11" } -solana-poh = { path = "../poh", version = "=1.14.11" } -solana-runtime = { path = "../runtime", version = "=1.14.11" } -solana-sdk = { path = "../sdk", version = "=1.14.11" } -solana-streamer = { path = "../streamer", version = "=1.14.11" } -solana-version = { path = "../version", version = "=1.14.11" } +solana-client = { path = "../client", version = "=1.14.12" } +solana-core = { path = "../core", version = "=1.14.12" } +solana-gossip = { path = "../gossip", version = "=1.14.12" } +solana-ledger = { path = "../ledger", version = "=1.14.12" } +solana-logger = { path = "../logger", version = "=1.14.12" } +solana-measure = { path = "../measure", version = "=1.14.12" } +solana-perf = { path = "../perf", version = "=1.14.12" } +solana-poh = { path = "../poh", version = "=1.14.12" } +solana-runtime = { path = "../runtime", version = "=1.14.12" } +solana-sdk = { path = "../sdk", version = "=1.14.12" } +solana-streamer = { path = "../streamer", version = "=1.14.12" } +solana-version = { path = "../version", version = "=1.14.12" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/banks-client/Cargo.toml b/banks-client/Cargo.toml index 3d641907bb04d3..c96b5700889a76 100644 --- a/banks-client/Cargo.toml +++ b/banks-client/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-banks-client" -version = "1.14.11" +version = "1.14.12" description = "Solana banks client" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,17 +12,17 @@ edition = "2021" [dependencies] borsh = "0.9.3" futures = "0.3" -solana-banks-interface = { path = "../banks-interface", version = "=1.14.11" } -solana-program = { path = "../sdk/program", version = "=1.14.11" } -solana-sdk = { path = "../sdk", version = "=1.14.11" } +solana-banks-interface = { path = "../banks-interface", version = "=1.14.12" } +solana-program = { path = "../sdk/program", version = "=1.14.12" } +solana-sdk = { path = "../sdk", version = "=1.14.12" } tarpc = { version = "0.29.0", features = ["full"] } thiserror = "1.0" tokio = { version = "~1.14.1", features = ["full"] } tokio-serde = { version = "0.8", features = ["bincode"] } [dev-dependencies] -solana-banks-server = { path = "../banks-server", version = "=1.14.11" } -solana-runtime = { path = "../runtime", version = "=1.14.11" } +solana-banks-server = { path = "../banks-server", version = "=1.14.12" } +solana-runtime = { path = "../runtime", version = "=1.14.12" } [lib] crate-type = ["lib"] diff --git a/banks-interface/Cargo.toml b/banks-interface/Cargo.toml index ee46828348fc48..4c2d7e5ded190a 100644 --- a/banks-interface/Cargo.toml +++ b/banks-interface/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-banks-interface" -version = "1.14.11" +version = "1.14.12" description = "Solana banks RPC interface" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -11,7 +11,7 @@ edition = "2021" [dependencies] serde = { version = "1.0.138", features = ["derive"] } -solana-sdk = { path = "../sdk", version = "=1.14.11" } +solana-sdk = { path = "../sdk", version = "=1.14.12" } tarpc = { version = "0.29.0", features = ["full"] } [lib] diff --git a/banks-server/Cargo.toml b/banks-server/Cargo.toml index 92dc547b2681d3..6ebfcd220f63aa 100644 --- a/banks-server/Cargo.toml +++ b/banks-server/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-banks-server" -version = "1.14.11" +version = "1.14.12" description = "Solana banks server" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,11 +13,11 @@ edition = "2021" bincode = "1.3.3" crossbeam-channel = "0.5" futures = "0.3" -solana-banks-interface = { path = "../banks-interface", version = "=1.14.11" } -solana-client = { path = "../client", version = "=1.14.11" } -solana-runtime = { path = "../runtime", version = "=1.14.11" } -solana-sdk = { path = "../sdk", version = "=1.14.11" } -solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.11" } +solana-banks-interface = { path = "../banks-interface", version = "=1.14.12" } +solana-client = { path = "../client", version = "=1.14.12" } +solana-runtime = { path = "../runtime", version = "=1.14.12" } +solana-sdk = { path = "../sdk", version = "=1.14.12" } +solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.12" } tarpc = { version = "0.29.0", features = ["full"] } tokio = { version = "1", features = ["full"] } tokio-serde = { version = "0.8", features = ["bincode"] } diff --git a/bench-streamer/Cargo.toml b/bench-streamer/Cargo.toml index 1464aa5c207feb..5e0607c74dcfb0 100644 --- a/bench-streamer/Cargo.toml +++ b/bench-streamer/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-bench-streamer" -version = "1.14.11" +version = "1.14.12" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -11,9 +11,9 @@ publish = false [dependencies] clap = { version = "3.1.5", features = ["cargo"] } crossbeam-channel = "0.5" -solana-net-utils = { path = "../net-utils", version = "=1.14.11" } -solana-streamer = { path = "../streamer", version = "=1.14.11" } -solana-version = { path = "../version", version = "=1.14.11" } +solana-net-utils = { path = "../net-utils", version = "=1.14.12" } +solana-streamer = { path = "../streamer", version = "=1.14.12" } +solana-version = { path = "../version", version = "=1.14.12" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/bench-tps/Cargo.toml b/bench-tps/Cargo.toml index e1abae3523a0a0..51f8de055cca24 100644 --- a/bench-tps/Cargo.toml +++ b/bench-tps/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-bench-tps" -version = "1.14.11" +version = "1.14.12" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -15,28 +15,28 @@ log = "0.4.17" rayon = "1.5.3" serde_json = "1.0.81" serde_yaml = "0.8.26" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.11" } -solana-cli-config = { path = "../cli-config", version = "=1.14.11" } -solana-client = { path = "../client", version = "=1.14.11" } -solana-core = { path = "../core", version = "=1.14.11" } -solana-faucet = { path = "../faucet", version = "=1.14.11" } -solana-genesis = { path = "../genesis", version = "=1.14.11" } -solana-gossip = { path = "../gossip", version = "=1.14.11" } -solana-logger = { path = "../logger", version = "=1.14.11" } -solana-measure = { path = "../measure", version = "=1.14.11" } -solana-metrics = { path = "../metrics", version = "=1.14.11" } -solana-net-utils = { path = "../net-utils", version = "=1.14.11" } -solana-rpc = { path = "../rpc", version = "=1.14.11" } -solana-runtime = { path = "../runtime", version = "=1.14.11" } -solana-sdk = { path = "../sdk", version = "=1.14.11" } -solana-streamer = { path = "../streamer", version = "=1.14.11" } -solana-version = { path = "../version", version = "=1.14.11" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.12" } +solana-cli-config = { path = "../cli-config", version = "=1.14.12" } +solana-client = { path = "../client", version = "=1.14.12" } +solana-core = { path = "../core", version = "=1.14.12" } +solana-faucet = { path = "../faucet", version = "=1.14.12" } +solana-genesis = { path = "../genesis", version = "=1.14.12" } +solana-gossip = { path = "../gossip", version = "=1.14.12" } +solana-logger = { path = "../logger", version = "=1.14.12" } +solana-measure = { path = "../measure", version = "=1.14.12" } +solana-metrics = { path = "../metrics", version = "=1.14.12" } +solana-net-utils = { path = "../net-utils", version = "=1.14.12" } +solana-rpc = { path = "../rpc", version = "=1.14.12" } +solana-runtime = { path = "../runtime", version = "=1.14.12" } +solana-sdk = { path = "../sdk", version = "=1.14.12" } +solana-streamer = { path = "../streamer", version = "=1.14.12" } +solana-version = { path = "../version", version = "=1.14.12" } thiserror = "1.0" [dev-dependencies] serial_test = "0.8.0" -solana-local-cluster = { path = "../local-cluster", version = "=1.14.11" } -solana-test-validator = { path = "../test-validator", version = "=1.14.11" } +solana-local-cluster = { path = "../local-cluster", version = "=1.14.12" } +solana-test-validator = { path = "../test-validator", version = "=1.14.12" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/bloom/Cargo.toml b/bloom/Cargo.toml index 1a6dda70a19274..7d591eb9a67a6c 100644 --- a/bloom/Cargo.toml +++ b/bloom/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bloom" -version = "1.14.11" +version = "1.14.12" description = "Solana bloom filter" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -17,9 +17,9 @@ rand = "0.7.0" rayon = "1.5.3" serde = { version = "1.0.138", features = ["rc"] } serde_derive = "1.0.103" -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.11" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.11" } -solana-sdk = { path = "../sdk", version = "=1.14.11" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.12" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.12" } +solana-sdk = { path = "../sdk", version = "=1.14.12" } [lib] crate-type = ["lib"] diff --git a/bucket_map/Cargo.toml b/bucket_map/Cargo.toml index be8c541424cff9..71787980b770ef 100644 --- a/bucket_map/Cargo.toml +++ b/bucket_map/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bucket-map" -version = "1.14.11" +version = "1.14.12" description = "solana-bucket-map" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-bucket-map" @@ -15,14 +15,14 @@ log = { version = "0.4.17" } memmap2 = "0.5.3" modular-bitfield = "0.11.2" rand = "0.7.0" -solana-measure = { path = "../measure", version = "=1.14.11" } -solana-sdk = { path = "../sdk", version = "=1.14.11" } +solana-measure = { path = "../measure", version = "=1.14.12" } +solana-sdk = { path = "../sdk", version = "=1.14.12" } tempfile = "3.3.0" [dev-dependencies] fs_extra = "1.2.0" rayon = "1.5.3" -solana-logger = { path = "../logger", version = "=1.14.11" } +solana-logger = { path = "../logger", version = "=1.14.12" } [lib] crate-type = ["lib"] diff --git a/clap-utils/Cargo.toml b/clap-utils/Cargo.toml index 7f197f0dd820c1..90656c7b2875ac 100644 --- a/clap-utils/Cargo.toml +++ b/clap-utils/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-clap-utils" -version = "1.14.11" +version = "1.14.12" description = "Solana utilities for the clap" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,9 +13,9 @@ edition = "2021" chrono = "0.4" clap = "2.33.0" rpassword = "6.0" -solana-perf = { path = "../perf", version = "=1.14.11" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.11", default-features = false } -solana-sdk = { path = "../sdk", version = "=1.14.11" } +solana-perf = { path = "../perf", version = "=1.14.12" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.12", default-features = false } +solana-sdk = { path = "../sdk", version = "=1.14.12" } thiserror = "1.0.31" tiny-bip39 = "0.8.2" uriparse = "0.6.4" diff --git a/clap-v3-utils/Cargo.toml b/clap-v3-utils/Cargo.toml index dd61b2a7b7fb77..79bffbfaa89570 100644 --- a/clap-v3-utils/Cargo.toml +++ b/clap-v3-utils/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-clap-v3-utils" -version = "1.14.11" +version = "1.14.12" description = "Solana utilities for the clap v3" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,9 +13,9 @@ edition = "2021" chrono = "0.4" clap = { version = "3.1.5", features = ["cargo"] } rpassword = "6.0" -solana-perf = { path = "../perf", version = "=1.14.11" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.11", default-features = false } -solana-sdk = { path = "../sdk", version = "=1.14.11" } +solana-perf = { path = "../perf", version = "=1.14.12" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.12", default-features = false } +solana-sdk = { path = "../sdk", version = "=1.14.12" } thiserror = "1.0.31" tiny-bip39 = "0.8.2" uriparse = "0.6.4" diff --git a/cli-config/Cargo.toml b/cli-config/Cargo.toml index 1ae053bb3b1e41..b91424f8a3c6d1 100644 --- a/cli-config/Cargo.toml +++ b/cli-config/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-cli-config" description = "Blockchain, Rebuilt for Scale" -version = "1.14.11" +version = "1.14.12" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -15,8 +15,8 @@ lazy_static = "1.4.0" serde = "1.0.138" serde_derive = "1.0.103" serde_yaml = "0.8.26" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.11" } -solana-sdk = { path = "../sdk", version = "=1.14.11" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.12" } +solana-sdk = { path = "../sdk", version = "=1.14.12" } url = "2.2.2" [dev-dependencies] diff --git a/cli-output/Cargo.toml b/cli-output/Cargo.toml index d72b9eef59d91c..85aaf39aad4a4f 100644 --- a/cli-output/Cargo.toml +++ b/cli-output/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-cli-output" description = "Blockchain, Rebuilt for Scale" -version = "1.14.11" +version = "1.14.12" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -21,13 +21,13 @@ pretty-hex = "0.3.0" semver = "1.0.10" serde = "1.0.138" serde_json = "1.0.81" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.11" } -solana-clap-utils = { path = "../clap-utils", version = "=1.14.11" } -solana-cli-config = { path = "../cli-config", version = "=1.14.11" } -solana-client = { path = "../client", version = "=1.14.11" } -solana-sdk = { path = "../sdk", version = "=1.14.11" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.11" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.11" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.12" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.12" } +solana-cli-config = { path = "../cli-config", version = "=1.14.12" } +solana-client = { path = "../client", version = "=1.14.12" } +solana-sdk = { path = "../sdk", version = "=1.14.12" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.12" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.12" } spl-memo = { version = "=3.0.1", features = ["no-entrypoint"] } [dev-dependencies] diff --git a/cli/Cargo.toml b/cli/Cargo.toml index 94246bc70e4da3..93790e96866b66 100644 --- a/cli/Cargo.toml +++ b/cli/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-cli" description = "Blockchain, Rebuilt for Scale" -version = "1.14.11" +version = "1.14.12" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -27,30 +27,30 @@ semver = "1.0.10" serde = "1.0.138" serde_derive = "1.0.103" serde_json = "1.0.81" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.11" } -solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.11" } -solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.11" } -solana-clap-utils = { path = "../clap-utils", version = "=1.14.11" } -solana-cli-config = { path = "../cli-config", version = "=1.14.11" } -solana-cli-output = { path = "../cli-output", version = "=1.14.11" } -solana-client = { path = "../client", version = "=1.14.11" } -solana-config-program = { path = "../programs/config", version = "=1.14.11" } -solana-faucet = { path = "../faucet", version = "=1.14.11" } -solana-logger = { path = "../logger", version = "=1.14.11" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.11" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.11" } -solana-sdk = { path = "../sdk", version = "=1.14.11" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.11" } -solana-version = { path = "../version", version = "=1.14.11" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.11" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.12" } +solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.12" } +solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.12" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.12" } +solana-cli-config = { path = "../cli-config", version = "=1.14.12" } +solana-cli-output = { path = "../cli-output", version = "=1.14.12" } +solana-client = { path = "../client", version = "=1.14.12" } +solana-config-program = { path = "../programs/config", version = "=1.14.12" } +solana-faucet = { path = "../faucet", version = "=1.14.12" } +solana-logger = { path = "../logger", version = "=1.14.12" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.12" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.12" } +solana-sdk = { path = "../sdk", version = "=1.14.12" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.12" } +solana-version = { path = "../version", version = "=1.14.12" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.12" } solana_rbpf = "=0.2.31" spl-memo = { version = "=3.0.1", features = ["no-entrypoint"] } thiserror = "1.0.31" tiny-bip39 = "0.8.2" [dev-dependencies] -solana-streamer = { path = "../streamer", version = "=1.14.11" } -solana-test-validator = { path = "../test-validator", version = "=1.14.11" } +solana-streamer = { path = "../streamer", version = "=1.14.12" } +solana-test-validator = { path = "../test-validator", version = "=1.14.12" } tempfile = "3.3.0" [[bin]] diff --git a/client-test/Cargo.toml b/client-test/Cargo.toml index e493f76d76887a..08cb7c3cce607a 100644 --- a/client-test/Cargo.toml +++ b/client-test/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-client-test" -version = "1.14.11" +version = "1.14.12" description = "Solana RPC Test" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,25 +14,25 @@ publish = false futures-util = "0.3.21" serde_json = "1.0.81" serial_test = "0.8.0" -solana-client = { path = "../client", version = "=1.14.11" } -solana-ledger = { path = "../ledger", version = "=1.14.11" } -solana-measure = { path = "../measure", version = "=1.14.11" } -solana-merkle-tree = { path = "../merkle-tree", version = "=1.14.11" } -solana-metrics = { path = "../metrics", version = "=1.14.11" } -solana-perf = { path = "../perf", version = "=1.14.11" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.11" } -solana-rpc = { path = "../rpc", version = "=1.14.11" } -solana-runtime = { path = "../runtime", version = "=1.14.11" } -solana-sdk = { path = "../sdk", version = "=1.14.11" } -solana-streamer = { path = "../streamer", version = "=1.14.11" } -solana-test-validator = { path = "../test-validator", version = "=1.14.11" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.11" } -solana-version = { path = "../version", version = "=1.14.11" } +solana-client = { path = "../client", version = "=1.14.12" } +solana-ledger = { path = "../ledger", version = "=1.14.12" } +solana-measure = { path = "../measure", version = "=1.14.12" } +solana-merkle-tree = { path = "../merkle-tree", version = "=1.14.12" } +solana-metrics = { path = "../metrics", version = "=1.14.12" } +solana-perf = { path = "../perf", version = "=1.14.12" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.12" } +solana-rpc = { path = "../rpc", version = "=1.14.12" } +solana-runtime = { path = "../runtime", version = "=1.14.12" } +solana-sdk = { path = "../sdk", version = "=1.14.12" } +solana-streamer = { path = "../streamer", version = "=1.14.12" } +solana-test-validator = { path = "../test-validator", version = "=1.14.12" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.12" } +solana-version = { path = "../version", version = "=1.14.12" } systemstat = "0.1.11" tokio = { version = "~1.14.1", features = ["full"] } [dev-dependencies] -solana-logger = { path = "../logger", version = "=1.14.11" } +solana-logger = { path = "../logger", version = "=1.14.12" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/client/Cargo.toml b/client/Cargo.toml index e6d14664bbf976..7640d25468a930 100644 --- a/client/Cargo.toml +++ b/client/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-client" -version = "1.14.11" +version = "1.14.12" description = "Solana Client" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -38,17 +38,17 @@ semver = "1.0.10" serde = "1.0.138" serde_derive = "1.0.103" serde_json = "1.0.81" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.11" } -solana-clap-utils = { path = "../clap-utils", version = "=1.14.11" } -solana-faucet = { path = "../faucet", version = "=1.14.11" } -solana-measure = { path = "../measure", version = "=1.14.11" } -solana-metrics = { path = "../metrics", version = "=1.14.11" } -solana-net-utils = { path = "../net-utils", version = "=1.14.11" } -solana-sdk = { path = "../sdk", version = "=1.14.11" } -solana-streamer = { path = "../streamer", version = "=1.14.11" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.11" } -solana-version = { path = "../version", version = "=1.14.11" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.11" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.12" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.12" } +solana-faucet = { path = "../faucet", version = "=1.14.12" } +solana-measure = { path = "../measure", version = "=1.14.12" } +solana-metrics = { path = "../metrics", version = "=1.14.12" } +solana-net-utils = { path = "../net-utils", version = "=1.14.12" } +solana-sdk = { path = "../sdk", version = "=1.14.12" } +solana-streamer = { path = "../streamer", version = "=1.14.12" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.12" } +solana-version = { path = "../version", version = "=1.14.12" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.12" } spl-token-2022 = { version = "=0.5.0", features = ["no-entrypoint"] } thiserror = "1.0" tokio = { version = "1", features = ["full"] } @@ -61,8 +61,8 @@ url = "2.2.2" anyhow = "1.0.58" assert_matches = "1.5.0" jsonrpc-http-server = "18.0.0" -solana-logger = { path = "../logger", version = "=1.14.11" } -solana-perf = { path = "../perf", version = "=1.14.11" } +solana-logger = { path = "../logger", version = "=1.14.12" } +solana-perf = { path = "../perf", version = "=1.14.12" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/core/Cargo.toml b/core/Cargo.toml index b80de1e2435e3e..5ecc720199f3ed 100644 --- a/core/Cargo.toml +++ b/core/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "solana-core" description = "Blockchain, Rebuilt for Scale" -version = "1.14.11" +version = "1.14.12" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-core" readme = "../README.md" @@ -36,30 +36,30 @@ rand_chacha = "0.2.2" rayon = "1.5.3" serde = "1.0.138" serde_derive = "1.0.103" -solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.11" } -solana-bloom = { path = "../bloom", version = "=1.14.11" } -solana-client = { path = "../client", version = "=1.14.11" } -solana-entry = { path = "../entry", version = "=1.14.11" } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.11" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.11" } -solana-geyser-plugin-manager = { path = "../geyser-plugin-manager", version = "=1.14.11" } -solana-gossip = { path = "../gossip", version = "=1.14.11" } -solana-ledger = { path = "../ledger", version = "=1.14.11" } -solana-measure = { path = "../measure", version = "=1.14.11" } -solana-metrics = { path = "../metrics", version = "=1.14.11" } -solana-net-utils = { path = "../net-utils", version = "=1.14.11" } -solana-perf = { path = "../perf", version = "=1.14.11" } -solana-poh = { path = "../poh", version = "=1.14.11" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.11" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.11" } -solana-rpc = { path = "../rpc", version = "=1.14.11" } -solana-runtime = { path = "../runtime", version = "=1.14.11" } -solana-sdk = { path = "../sdk", version = "=1.14.11" } -solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.11" } -solana-streamer = { path = "../streamer", version = "=1.14.11" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.11" } -solana-version = { path = "../version", version = "=1.14.11" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.11" } +solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.12" } +solana-bloom = { path = "../bloom", version = "=1.14.12" } +solana-client = { path = "../client", version = "=1.14.12" } +solana-entry = { path = "../entry", version = "=1.14.12" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.12" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.12" } +solana-geyser-plugin-manager = { path = "../geyser-plugin-manager", version = "=1.14.12" } +solana-gossip = { path = "../gossip", version = "=1.14.12" } +solana-ledger = { path = "../ledger", version = "=1.14.12" } +solana-measure = { path = "../measure", version = "=1.14.12" } +solana-metrics = { path = "../metrics", version = "=1.14.12" } +solana-net-utils = { path = "../net-utils", version = "=1.14.12" } +solana-perf = { path = "../perf", version = "=1.14.12" } +solana-poh = { path = "../poh", version = "=1.14.12" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.12" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.12" } +solana-rpc = { path = "../rpc", version = "=1.14.12" } +solana-runtime = { path = "../runtime", version = "=1.14.12" } +solana-sdk = { path = "../sdk", version = "=1.14.12" } +solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.12" } +solana-streamer = { path = "../streamer", version = "=1.14.12" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.12" } +solana-version = { path = "../version", version = "=1.14.12" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.12" } sys-info = "0.9.1" tempfile = "3.3.0" thiserror = "1.0" @@ -71,9 +71,9 @@ matches = "0.1.9" raptorq = "1.7.0" serde_json = "1.0.81" serial_test = "0.8.0" -solana-logger = { path = "../logger", version = "=1.14.11" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.11" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.11" } +solana-logger = { path = "../logger", version = "=1.14.12" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.12" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.12" } static_assertions = "1.1.0" systemstat = "0.1.11" test-case = "2.1.0" diff --git a/dos/Cargo.toml b/dos/Cargo.toml index 09ddb1c2b3a6e0..2ab3f22f9dbe44 100644 --- a/dos/Cargo.toml +++ b/dos/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-dos" -version = "1.14.11" +version = "1.14.12" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -17,23 +17,23 @@ itertools = "0.10.3" log = "0.4.17" rand = "0.7.0" serde = "1.0.138" -solana-bench-tps = { path = "../bench-tps", version = "=1.14.11" } -solana-client = { path = "../client", version = "=1.14.11" } -solana-core = { path = "../core", version = "=1.14.11" } -solana-faucet = { path = "../faucet", version = "=1.14.11" } -solana-gossip = { path = "../gossip", version = "=1.14.11" } -solana-logger = { path = "../logger", version = "=1.14.11" } -solana-measure = { path = "../measure", version = "=1.14.11" } -solana-net-utils = { path = "../net-utils", version = "=1.14.11" } -solana-perf = { path = "../perf", version = "=1.14.11" } -solana-rpc = { path = "../rpc", version = "=1.14.11" } -solana-sdk = { path = "../sdk", version = "=1.14.11" } -solana-streamer = { path = "../streamer", version = "=1.14.11" } -solana-version = { path = "../version", version = "=1.14.11" } +solana-bench-tps = { path = "../bench-tps", version = "=1.14.12" } +solana-client = { path = "../client", version = "=1.14.12" } +solana-core = { path = "../core", version = "=1.14.12" } +solana-faucet = { path = "../faucet", version = "=1.14.12" } +solana-gossip = { path = "../gossip", version = "=1.14.12" } +solana-logger = { path = "../logger", version = "=1.14.12" } +solana-measure = { path = "../measure", version = "=1.14.12" } +solana-net-utils = { path = "../net-utils", version = "=1.14.12" } +solana-perf = { path = "../perf", version = "=1.14.12" } +solana-rpc = { path = "../rpc", version = "=1.14.12" } +solana-sdk = { path = "../sdk", version = "=1.14.12" } +solana-streamer = { path = "../streamer", version = "=1.14.12" } +solana-version = { path = "../version", version = "=1.14.12" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] [dev-dependencies] serial_test = "0.8.0" -solana-local-cluster = { path = "../local-cluster", version = "=1.14.11" } +solana-local-cluster = { path = "../local-cluster", version = "=1.14.12" } diff --git a/download-utils/Cargo.toml b/download-utils/Cargo.toml index adea9221588e8a..f193cda40ccd53 100644 --- a/download-utils/Cargo.toml +++ b/download-utils/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-download-utils" -version = "1.14.11" +version = "1.14.12" description = "Solana Download Utils" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,8 +14,8 @@ console = "0.15.0" indicatif = "0.16.2" log = "0.4.17" reqwest = { version = "0.11.11", default-features = false, features = ["blocking", "brotli", "deflate", "gzip", "rustls-tls", "json"] } -solana-runtime = { path = "../runtime", version = "=1.14.11" } -solana-sdk = { path = "../sdk", version = "=1.14.11" } +solana-runtime = { path = "../runtime", version = "=1.14.12" } +solana-sdk = { path = "../sdk", version = "=1.14.12" } [lib] crate-type = ["lib"] diff --git a/entry/Cargo.toml b/entry/Cargo.toml index 3ef9ced33e64fc..9ad3dc6da78aaa 100644 --- a/entry/Cargo.toml +++ b/entry/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-entry" -version = "1.14.11" +version = "1.14.12" description = "Solana Entry" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -19,16 +19,16 @@ log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" serde = "1.0.138" -solana-measure = { path = "../measure", version = "=1.14.11" } -solana-merkle-tree = { path = "../merkle-tree", version = "=1.14.11" } -solana-metrics = { path = "../metrics", version = "=1.14.11" } -solana-perf = { path = "../perf", version = "=1.14.11" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.11" } -solana-sdk = { path = "../sdk", version = "=1.14.11" } +solana-measure = { path = "../measure", version = "=1.14.12" } +solana-merkle-tree = { path = "../merkle-tree", version = "=1.14.12" } +solana-metrics = { path = "../metrics", version = "=1.14.12" } +solana-perf = { path = "../perf", version = "=1.14.12" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.12" } +solana-sdk = { path = "../sdk", version = "=1.14.12" } [dev-dependencies] matches = "0.1.9" -solana-logger = { path = "../logger", version = "=1.14.11" } +solana-logger = { path = "../logger", version = "=1.14.12" } [lib] crate-type = ["lib"] diff --git a/faucet/Cargo.toml b/faucet/Cargo.toml index d6f6a1e00870c3..900f5c02b62698 100644 --- a/faucet/Cargo.toml +++ b/faucet/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-faucet" -version = "1.14.11" +version = "1.14.12" description = "Solana Faucet" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -17,12 +17,12 @@ crossbeam-channel = "0.5" log = "0.4.17" serde = "1.0.138" serde_derive = "1.0.103" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.11" } -solana-cli-config = { path = "../cli-config", version = "=1.14.11" } -solana-logger = { path = "../logger", version = "=1.14.11" } -solana-metrics = { path = "../metrics", version = "=1.14.11" } -solana-sdk = { path = "../sdk", version = "=1.14.11" } -solana-version = { path = "../version", version = "=1.14.11" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.12" } +solana-cli-config = { path = "../cli-config", version = "=1.14.12" } +solana-logger = { path = "../logger", version = "=1.14.12" } +solana-metrics = { path = "../metrics", version = "=1.14.12" } +solana-sdk = { path = "../sdk", version = "=1.14.12" } +solana-version = { path = "../version", version = "=1.14.12" } spl-memo = { version = "=3.0.1", features = ["no-entrypoint"] } thiserror = "1.0" tokio = { version = "1", features = ["full"] } diff --git a/frozen-abi/Cargo.toml b/frozen-abi/Cargo.toml index 1459e4de5fc256..fcc7d89ae54a06 100644 --- a/frozen-abi/Cargo.toml +++ b/frozen-abi/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-frozen-abi" -version = "1.14.11" +version = "1.14.12" description = "Solana Frozen ABI" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -20,7 +20,7 @@ serde_bytes = "0.11" serde_derive = "1.0" serde_json = "1.0" sha2 = "0.10.2" -solana-frozen-abi-macro = { path = "macro", version = "=1.14.11" } +solana-frozen-abi-macro = { path = "macro", version = "=1.14.12" } thiserror = "1.0" [target.'cfg(not(target_os = "solana"))'.dependencies] @@ -43,7 +43,7 @@ rand_core = { version = "0.6.3", features = ["alloc", "getrandom", "std"] } subtle = { version = "2.4.1", features = ["default", "i128", "std"] } [target.'cfg(not(target_os = "solana"))'.dev-dependencies] -solana-logger = { path = "../logger", version = "=1.14.11" } +solana-logger = { path = "../logger", version = "=1.14.12" } [build-dependencies] rustc_version = "0.4" diff --git a/frozen-abi/macro/Cargo.toml b/frozen-abi/macro/Cargo.toml index cdfda8f1a33e13..704c63d45c810b 100644 --- a/frozen-abi/macro/Cargo.toml +++ b/frozen-abi/macro/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-frozen-abi-macro" -version = "1.14.11" +version = "1.14.12" description = "Solana Frozen ABI Macro" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/genesis-utils/Cargo.toml b/genesis-utils/Cargo.toml index 3032108a64ed78..95c4ffdb1e55a8 100644 --- a/genesis-utils/Cargo.toml +++ b/genesis-utils/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-genesis-utils" -version = "1.14.11" +version = "1.14.12" description = "Solana Genesis Utils" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,9 +10,9 @@ documentation = "https://docs.rs/solana-download-utils" edition = "2021" [dependencies] -solana-download-utils = { path = "../download-utils", version = "=1.14.11" } -solana-runtime = { path = "../runtime", version = "=1.14.11" } -solana-sdk = { path = "../sdk", version = "=1.14.11" } +solana-download-utils = { path = "../download-utils", version = "=1.14.12" } +solana-runtime = { path = "../runtime", version = "=1.14.12" } +solana-sdk = { path = "../sdk", version = "=1.14.12" } [lib] crate-type = ["lib"] diff --git a/genesis/Cargo.toml b/genesis/Cargo.toml index 96d4f5cc7fa7bf..0500bda7502cff 100644 --- a/genesis/Cargo.toml +++ b/genesis/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-genesis" description = "Blockchain, Rebuilt for Scale" -version = "1.14.11" +version = "1.14.12" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -15,16 +15,16 @@ clap = "2.33.1" serde = "1.0.138" serde_json = "1.0.81" serde_yaml = "0.8.26" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.11" } -solana-cli-config = { path = "../cli-config", version = "=1.14.11" } -solana-entry = { path = "../entry", version = "=1.14.11" } -solana-ledger = { path = "../ledger", version = "=1.14.11" } -solana-logger = { path = "../logger", version = "=1.14.11" } -solana-runtime = { path = "../runtime", version = "=1.14.11" } -solana-sdk = { path = "../sdk", version = "=1.14.11" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.11" } -solana-version = { path = "../version", version = "=1.14.11" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.11" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.12" } +solana-cli-config = { path = "../cli-config", version = "=1.14.12" } +solana-entry = { path = "../entry", version = "=1.14.12" } +solana-ledger = { path = "../ledger", version = "=1.14.12" } +solana-logger = { path = "../logger", version = "=1.14.12" } +solana-runtime = { path = "../runtime", version = "=1.14.12" } +solana-sdk = { path = "../sdk", version = "=1.14.12" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.12" } +solana-version = { path = "../version", version = "=1.14.12" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.12" } tempfile = "3.3.0" [[bin]] diff --git a/geyser-plugin-interface/Cargo.toml b/geyser-plugin-interface/Cargo.toml index d41d6a3b921af9..31cf050438cb10 100644 --- a/geyser-plugin-interface/Cargo.toml +++ b/geyser-plugin-interface/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-geyser-plugin-interface" description = "The Solana Geyser plugin interface." -version = "1.14.11" +version = "1.14.12" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -11,8 +11,8 @@ documentation = "https://docs.rs/solana-geyser-plugin-interface" [dependencies] log = "0.4.17" -solana-sdk = { path = "../sdk", version = "=1.14.11" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.11" } +solana-sdk = { path = "../sdk", version = "=1.14.12" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.12" } thiserror = "1.0.31" [package.metadata.docs.rs] diff --git a/geyser-plugin-manager/Cargo.toml b/geyser-plugin-manager/Cargo.toml index a2043f68fb9f6d..680c2787e0dd5f 100644 --- a/geyser-plugin-manager/Cargo.toml +++ b/geyser-plugin-manager/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-geyser-plugin-manager" description = "The Solana Geyser plugin manager." -version = "1.14.11" +version = "1.14.12" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -16,13 +16,13 @@ json5 = "0.4.1" libloading = "0.7.3" log = "0.4.17" serde_json = "1.0.81" -solana-geyser-plugin-interface = { path = "../geyser-plugin-interface", version = "=1.14.11" } -solana-measure = { path = "../measure", version = "=1.14.11" } -solana-metrics = { path = "../metrics", version = "=1.14.11" } -solana-rpc = { path = "../rpc", version = "=1.14.11" } -solana-runtime = { path = "../runtime", version = "=1.14.11" } -solana-sdk = { path = "../sdk", version = "=1.14.11" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.11" } +solana-geyser-plugin-interface = { path = "../geyser-plugin-interface", version = "=1.14.12" } +solana-measure = { path = "../measure", version = "=1.14.12" } +solana-metrics = { path = "../metrics", version = "=1.14.12" } +solana-rpc = { path = "../rpc", version = "=1.14.12" } +solana-runtime = { path = "../runtime", version = "=1.14.12" } +solana-sdk = { path = "../sdk", version = "=1.14.12" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.12" } thiserror = "1.0.31" [package.metadata.docs.rs] diff --git a/gossip/Cargo.toml b/gossip/Cargo.toml index 5cf071af6c582e..71d57309a4adac 100644 --- a/gossip/Cargo.toml +++ b/gossip/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-gossip" description = "Blockchain, Rebuilt for Scale" -version = "1.14.11" +version = "1.14.12" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -27,24 +27,24 @@ rayon = "1.5.3" serde = "1.0.138" serde_bytes = "0.11" serde_derive = "1.0.103" -solana-bloom = { path = "../bloom", version = "=1.14.11" } -solana-clap-utils = { path = "../clap-utils", version = "=1.14.11" } -solana-client = { path = "../client", version = "=1.14.11" } -solana-entry = { path = "../entry", version = "=1.14.11" } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.11" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.11" } -solana-ledger = { path = "../ledger", version = "=1.14.11" } -solana-logger = { path = "../logger", version = "=1.14.11" } -solana-measure = { path = "../measure", version = "=1.14.11" } -solana-metrics = { path = "../metrics", version = "=1.14.11" } -solana-net-utils = { path = "../net-utils", version = "=1.14.11" } -solana-perf = { path = "../perf", version = "=1.14.11" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.11" } -solana-runtime = { path = "../runtime", version = "=1.14.11" } -solana-sdk = { path = "../sdk", version = "=1.14.11" } -solana-streamer = { path = "../streamer", version = "=1.14.11" } -solana-version = { path = "../version", version = "=1.14.11" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.11" } +solana-bloom = { path = "../bloom", version = "=1.14.12" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.12" } +solana-client = { path = "../client", version = "=1.14.12" } +solana-entry = { path = "../entry", version = "=1.14.12" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.12" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.12" } +solana-ledger = { path = "../ledger", version = "=1.14.12" } +solana-logger = { path = "../logger", version = "=1.14.12" } +solana-measure = { path = "../measure", version = "=1.14.12" } +solana-metrics = { path = "../metrics", version = "=1.14.12" } +solana-net-utils = { path = "../net-utils", version = "=1.14.12" } +solana-perf = { path = "../perf", version = "=1.14.12" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.12" } +solana-runtime = { path = "../runtime", version = "=1.14.12" } +solana-sdk = { path = "../sdk", version = "=1.14.12" } +solana-streamer = { path = "../streamer", version = "=1.14.12" } +solana-version = { path = "../version", version = "=1.14.12" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.12" } thiserror = "1.0" [dev-dependencies] diff --git a/install/Cargo.toml b/install/Cargo.toml index 1ac3eb8bd2140c..e96b64eda8c004 100644 --- a/install/Cargo.toml +++ b/install/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-install" description = "The solana cluster software installer" -version = "1.14.11" +version = "1.14.12" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -26,12 +26,12 @@ reqwest = { version = "0.11.11", default-features = false, features = ["blocking semver = "1.0.10" serde = { version = "1.0.138", features = ["derive"] } serde_yaml = "0.8.26" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.11" } -solana-client = { path = "../client", version = "=1.14.11" } -solana-config-program = { path = "../programs/config", version = "=1.14.11" } -solana-logger = { path = "../logger", version = "=1.14.11" } -solana-sdk = { path = "../sdk", version = "=1.14.11" } -solana-version = { path = "../version", version = "=1.14.11" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.12" } +solana-client = { path = "../client", version = "=1.14.12" } +solana-config-program = { path = "../programs/config", version = "=1.14.12" } +solana-logger = { path = "../logger", version = "=1.14.12" } +solana-sdk = { path = "../sdk", version = "=1.14.12" } +solana-version = { path = "../version", version = "=1.14.12" } tar = "0.4.38" tempfile = "3.3.0" url = "2.2.2" diff --git a/keygen/Cargo.toml b/keygen/Cargo.toml index 169fa58b55a11b..740911a2c2b010 100644 --- a/keygen/Cargo.toml +++ b/keygen/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-keygen" -version = "1.14.11" +version = "1.14.12" description = "Solana key generation utility" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,11 +14,11 @@ bs58 = "0.4.0" clap = { version = "3.1.5", features = ["cargo"] } dirs-next = "2.0.0" num_cpus = "1.13.1" -solana-clap-v3-utils = { path = "../clap-v3-utils", version = "=1.14.11" } -solana-cli-config = { path = "../cli-config", version = "=1.14.11" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.11" } -solana-sdk = { path = "../sdk", version = "=1.14.11" } -solana-version = { path = "../version", version = "=1.14.11" } +solana-clap-v3-utils = { path = "../clap-v3-utils", version = "=1.14.12" } +solana-cli-config = { path = "../cli-config", version = "=1.14.12" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.12" } +solana-sdk = { path = "../sdk", version = "=1.14.12" } +solana-version = { path = "../version", version = "=1.14.12" } tiny-bip39 = "0.8.2" [[bin]] diff --git a/ledger-tool/Cargo.toml b/ledger-tool/Cargo.toml index 3b8818bf665eb9..dd8aa2bcbee581 100644 --- a/ledger-tool/Cargo.toml +++ b/ledger-tool/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-ledger-tool" description = "Blockchain, Rebuilt for Scale" -version = "1.14.11" +version = "1.14.12" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -22,20 +22,20 @@ log = { version = "0.4.17" } regex = "1" serde = { version = "1.0", features = ["derive"] } serde_json = "1.0.81" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.11" } -solana-cli-output = { path = "../cli-output", version = "=1.14.11" } -solana-core = { path = "../core", version = "=1.14.11" } -solana-entry = { path = "../entry", version = "=1.14.11" } -solana-ledger = { path = "../ledger", version = "=1.14.11" } -solana-logger = { path = "../logger", version = "=1.14.11" } -solana-measure = { path = "../measure", version = "=1.14.11" } -solana-runtime = { path = "../runtime", version = "=1.14.11" } -solana-sdk = { path = "../sdk", version = "=1.14.11" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.11" } -solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.11" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.11" } -solana-version = { path = "../version", version = "=1.14.11" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.11" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.12" } +solana-cli-output = { path = "../cli-output", version = "=1.14.12" } +solana-core = { path = "../core", version = "=1.14.12" } +solana-entry = { path = "../entry", version = "=1.14.12" } +solana-ledger = { path = "../ledger", version = "=1.14.12" } +solana-logger = { path = "../logger", version = "=1.14.12" } +solana-measure = { path = "../measure", version = "=1.14.12" } +solana-runtime = { path = "../runtime", version = "=1.14.12" } +solana-sdk = { path = "../sdk", version = "=1.14.12" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.12" } +solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.12" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.12" } +solana-version = { path = "../version", version = "=1.14.12" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.12" } tokio = { version = "1", features = ["full"] } [target.'cfg(not(target_env = "msvc"))'.dependencies] diff --git a/ledger/Cargo.toml b/ledger/Cargo.toml index f9537012f3642f..7b6c1e26eb81f9 100644 --- a/ledger/Cargo.toml +++ b/ledger/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-ledger" -version = "1.14.11" +version = "1.14.12" description = "Solana ledger" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -35,23 +35,23 @@ reed-solomon-erasure = { version = "6.0.0", features = ["simd-accel"] } serde = "1.0.138" serde_bytes = "0.11.6" sha2 = "0.10.2" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.11" } -solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.11" } -solana-entry = { path = "../entry", version = "=1.14.11" } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.11" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.11" } -solana-measure = { path = "../measure", version = "=1.14.11" } -solana-metrics = { path = "../metrics", version = "=1.14.11" } -solana-perf = { path = "../perf", version = "=1.14.11" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.11" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.11" } -solana-runtime = { path = "../runtime", version = "=1.14.11" } -solana-sdk = { path = "../sdk", version = "=1.14.11" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.11" } -solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.11" } -solana-storage-proto = { path = "../storage-proto", version = "=1.14.11" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.11" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.11" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.12" } +solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.12" } +solana-entry = { path = "../entry", version = "=1.14.12" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.12" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.12" } +solana-measure = { path = "../measure", version = "=1.14.12" } +solana-metrics = { path = "../metrics", version = "=1.14.12" } +solana-perf = { path = "../perf", version = "=1.14.12" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.12" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.12" } +solana-runtime = { path = "../runtime", version = "=1.14.12" } +solana-sdk = { path = "../sdk", version = "=1.14.12" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.12" } +solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.12" } +solana-storage-proto = { path = "../storage-proto", version = "=1.14.12" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.12" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.12" } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } spl-token-2022 = { version = "=0.5.0", features = ["no-entrypoint"] } static_assertions = "1.1.0" @@ -71,8 +71,8 @@ features = ["lz4"] [dev-dependencies] bs58 = "0.4.0" matches = "0.1.9" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.11" } -solana-logger = { path = "../logger", version = "=1.14.11" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.12" } +solana-logger = { path = "../logger", version = "=1.14.12" } test-case = "2.1.0" [build-dependencies] diff --git a/local-cluster/Cargo.toml b/local-cluster/Cargo.toml index 18001f3e27cf26..399bc9c0ccc1cf 100644 --- a/local-cluster/Cargo.toml +++ b/local-cluster/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-local-cluster" description = "Blockchain, Rebuilt for Scale" -version = "1.14.11" +version = "1.14.12" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -16,25 +16,25 @@ itertools = "0.10.3" log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" -solana-client = { path = "../client", version = "=1.14.11" } -solana-config-program = { path = "../programs/config", version = "=1.14.11" } -solana-core = { path = "../core", version = "=1.14.11" } -solana-entry = { path = "../entry", version = "=1.14.11" } -solana-gossip = { path = "../gossip", version = "=1.14.11" } -solana-ledger = { path = "../ledger", version = "=1.14.11" } -solana-runtime = { path = "../runtime", version = "=1.14.11" } -solana-sdk = { path = "../sdk", version = "=1.14.11" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.11" } -solana-streamer = { path = "../streamer", version = "=1.14.11" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.11" } +solana-client = { path = "../client", version = "=1.14.12" } +solana-config-program = { path = "../programs/config", version = "=1.14.12" } +solana-core = { path = "../core", version = "=1.14.12" } +solana-entry = { path = "../entry", version = "=1.14.12" } +solana-gossip = { path = "../gossip", version = "=1.14.12" } +solana-ledger = { path = "../ledger", version = "=1.14.12" } +solana-runtime = { path = "../runtime", version = "=1.14.12" } +solana-sdk = { path = "../sdk", version = "=1.14.12" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.12" } +solana-streamer = { path = "../streamer", version = "=1.14.12" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.12" } tempfile = "3.3.0" [dev-dependencies] assert_matches = "1.5.0" gag = "1.0.0" serial_test = "0.8.0" -solana-download-utils = { path = "../download-utils", version = "=1.14.11" } -solana-logger = { path = "../logger", version = "=1.14.11" } +solana-download-utils = { path = "../download-utils", version = "=1.14.12" } +solana-logger = { path = "../logger", version = "=1.14.12" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/log-analyzer/Cargo.toml b/log-analyzer/Cargo.toml index 2fb36e1cece327..c0bf265dba1c02 100644 --- a/log-analyzer/Cargo.toml +++ b/log-analyzer/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-log-analyzer" description = "The solana cluster network analysis tool" -version = "1.14.11" +version = "1.14.12" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,8 +14,8 @@ byte-unit = "4.0.14" clap = { version = "3.1.5", features = ["cargo"] } serde = "1.0.138" serde_json = "1.0.81" -solana-logger = { path = "../logger", version = "=1.14.11" } -solana-version = { path = "../version", version = "=1.14.11" } +solana-logger = { path = "../logger", version = "=1.14.12" } +solana-version = { path = "../version", version = "=1.14.12" } [[bin]] name = "solana-log-analyzer" diff --git a/logger/Cargo.toml b/logger/Cargo.toml index 82a01de1579cb2..8a9d89369af2f4 100644 --- a/logger/Cargo.toml +++ b/logger/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-logger" -version = "1.14.11" +version = "1.14.12" description = "Solana Logger" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/measure/Cargo.toml b/measure/Cargo.toml index 105510721482f1..8d626b5779e665 100644 --- a/measure/Cargo.toml +++ b/measure/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "solana-measure" description = "Blockchain, Rebuilt for Scale" -version = "1.14.11" +version = "1.14.12" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-measure" readme = "../README.md" @@ -12,7 +12,7 @@ edition = "2021" [dependencies] log = "0.4.17" -solana-sdk = { path = "../sdk", version = "=1.14.11" } +solana-sdk = { path = "../sdk", version = "=1.14.12" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/merkle-root-bench/Cargo.toml b/merkle-root-bench/Cargo.toml index 2f2014c6f485e1..895a3feefd3868 100644 --- a/merkle-root-bench/Cargo.toml +++ b/merkle-root-bench/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-merkle-root-bench" -version = "1.14.11" +version = "1.14.12" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -11,11 +11,11 @@ publish = false [dependencies] clap = "2.33.1" log = "0.4.17" -solana-logger = { path = "../logger", version = "=1.14.11" } -solana-measure = { path = "../measure", version = "=1.14.11" } -solana-runtime = { path = "../runtime", version = "=1.14.11" } -solana-sdk = { path = "../sdk", version = "=1.14.11" } -solana-version = { path = "../version", version = "=1.14.11" } +solana-logger = { path = "../logger", version = "=1.14.12" } +solana-measure = { path = "../measure", version = "=1.14.12" } +solana-runtime = { path = "../runtime", version = "=1.14.12" } +solana-sdk = { path = "../sdk", version = "=1.14.12" } +solana-version = { path = "../version", version = "=1.14.12" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/merkle-tree/Cargo.toml b/merkle-tree/Cargo.toml index 33f03ba2e96666..956b06f9819675 100644 --- a/merkle-tree/Cargo.toml +++ b/merkle-tree/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-merkle-tree" -version = "1.14.11" +version = "1.14.12" description = "Solana Merkle Tree" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -11,7 +11,7 @@ edition = "2021" [dependencies] fast-math = "0.1" -solana-program = { path = "../sdk/program", version = "=1.14.11" } +solana-program = { path = "../sdk/program", version = "=1.14.12" } # This can go once the BPF toolchain target Rust 1.42.0+ [target.bpfel-unknown-unknown.dependencies] diff --git a/metrics/Cargo.toml b/metrics/Cargo.toml index 8d93c6dfb5835d..83e0eca97129b2 100644 --- a/metrics/Cargo.toml +++ b/metrics/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-metrics" -version = "1.14.11" +version = "1.14.12" description = "Solana Metrics" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -15,7 +15,7 @@ gethostname = "0.2.3" lazy_static = "1.4.0" log = "0.4.17" reqwest = { version = "0.11.11", default-features = false, features = ["blocking", "brotli", "deflate", "gzip", "rustls-tls", "json"] } -solana-sdk = { path = "../sdk", version = "=1.14.11" } +solana-sdk = { path = "../sdk", version = "=1.14.12" } [dev-dependencies] env_logger = "0.9.0" diff --git a/net-shaper/Cargo.toml b/net-shaper/Cargo.toml index bed0f33416002c..989c4888e5a4f7 100644 --- a/net-shaper/Cargo.toml +++ b/net-shaper/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-net-shaper" description = "The solana cluster network shaping tool" -version = "1.14.11" +version = "1.14.12" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,7 +14,7 @@ clap = { version = "3.1.5", features = ["cargo"] } rand = "0.7.0" serde = { version = "1.0.138", features = ["derive"] } serde_json = "1.0.81" -solana-logger = { path = "../logger", version = "=1.14.11" } +solana-logger = { path = "../logger", version = "=1.14.12" } [[bin]] name = "solana-net-shaper" diff --git a/net-utils/Cargo.toml b/net-utils/Cargo.toml index f2d2069a11ac28..fa795f56be12a2 100644 --- a/net-utils/Cargo.toml +++ b/net-utils/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-net-utils" -version = "1.14.11" +version = "1.14.12" description = "Solana Network Utilities" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -19,9 +19,9 @@ rand = "0.7.0" serde = "1.0.138" serde_derive = "1.0.103" socket2 = "0.4.4" -solana-logger = { path = "../logger", version = "=1.14.11" } -solana-sdk = { path = "../sdk", version = "=1.14.11" } -solana-version = { path = "../version", version = "=1.14.11" } +solana-logger = { path = "../logger", version = "=1.14.12" } +solana-sdk = { path = "../sdk", version = "=1.14.12" } +solana-version = { path = "../version", version = "=1.14.12" } tokio = { version = "1", features = ["full"] } url = "2.2.2" diff --git a/notifier/Cargo.toml b/notifier/Cargo.toml index d29c7089d26208..aa4b448f3a6033 100644 --- a/notifier/Cargo.toml +++ b/notifier/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-notifier" -version = "1.14.11" +version = "1.14.12" description = "Solana Notifier" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/perf/Cargo.toml b/perf/Cargo.toml index 82cae36b3c5f9c..87cf8bfa9f534a 100644 --- a/perf/Cargo.toml +++ b/perf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-perf" -version = "1.14.11" +version = "1.14.12" description = "Solana Performance APIs" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -22,10 +22,10 @@ log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" serde = "1.0.138" -solana-metrics = { path = "../metrics", version = "=1.14.11" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.11" } -solana-sdk = { path = "../sdk", version = "=1.14.11" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.11" } +solana-metrics = { path = "../metrics", version = "=1.14.12" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.12" } +solana-sdk = { path = "../sdk", version = "=1.14.12" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.12" } [target."cfg(target_os = \"linux\")".dependencies] caps = "0.5.3" @@ -37,7 +37,7 @@ name = "solana_perf" [dev-dependencies] matches = "0.1.9" -solana-logger = { path = "../logger", version = "=1.14.11" } +solana-logger = { path = "../logger", version = "=1.14.12" } [[bench]] name = "sigverify" diff --git a/poh-bench/Cargo.toml b/poh-bench/Cargo.toml index 47a4ecfe3f07c7..5393ddd3724cee 100644 --- a/poh-bench/Cargo.toml +++ b/poh-bench/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-poh-bench" -version = "1.14.11" +version = "1.14.12" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,12 +14,12 @@ clap = { version = "3.1.5", features = ["cargo"] } log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" -solana-entry = { path = "../entry", version = "=1.14.11" } -solana-logger = { path = "../logger", version = "=1.14.11" } -solana-measure = { path = "../measure", version = "=1.14.11" } -solana-perf = { path = "../perf", version = "=1.14.11" } -solana-sdk = { path = "../sdk", version = "=1.14.11" } -solana-version = { path = "../version", version = "=1.14.11" } +solana-entry = { path = "../entry", version = "=1.14.12" } +solana-logger = { path = "../logger", version = "=1.14.12" } +solana-measure = { path = "../measure", version = "=1.14.12" } +solana-perf = { path = "../perf", version = "=1.14.12" } +solana-sdk = { path = "../sdk", version = "=1.14.12" } +solana-version = { path = "../version", version = "=1.14.12" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/poh/Cargo.toml b/poh/Cargo.toml index e5a2c3c6d31d95..5281a3d3b59480 100644 --- a/poh/Cargo.toml +++ b/poh/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-poh" -version = "1.14.11" +version = "1.14.12" description = "Solana PoH" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,21 +13,21 @@ edition = "2021" core_affinity = "0.5.10" crossbeam-channel = "0.5" log = "0.4.17" -solana-entry = { path = "../entry", version = "=1.14.11" } -solana-ledger = { path = "../ledger", version = "=1.14.11" } -solana-measure = { path = "../measure", version = "=1.14.11" } -solana-metrics = { path = "../metrics", version = "=1.14.11" } -solana-runtime = { path = "../runtime", version = "=1.14.11" } -solana-sdk = { path = "../sdk", version = "=1.14.11" } -solana-sys-tuner = { path = "../sys-tuner", version = "=1.14.11" } +solana-entry = { path = "../entry", version = "=1.14.12" } +solana-ledger = { path = "../ledger", version = "=1.14.12" } +solana-measure = { path = "../measure", version = "=1.14.12" } +solana-metrics = { path = "../metrics", version = "=1.14.12" } +solana-runtime = { path = "../runtime", version = "=1.14.12" } +solana-sdk = { path = "../sdk", version = "=1.14.12" } +solana-sys-tuner = { path = "../sys-tuner", version = "=1.14.12" } thiserror = "1.0" [dev-dependencies] bincode = "1.3.3" matches = "0.1.9" rand = "0.7.0" -solana-logger = { path = "../logger", version = "=1.14.11" } -solana-perf = { path = "../perf", version = "=1.14.11" } +solana-logger = { path = "../logger", version = "=1.14.12" } +solana-perf = { path = "../perf", version = "=1.14.12" } [lib] crate-type = ["lib"] diff --git a/program-runtime/Cargo.toml b/program-runtime/Cargo.toml index 31ad20cf6e3c0d..b5b34013771733 100644 --- a/program-runtime/Cargo.toml +++ b/program-runtime/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-program-runtime" -version = "1.14.11" +version = "1.14.12" description = "Solana program runtime" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -21,16 +21,16 @@ num-derive = { version = "0.3" } num-traits = { version = "0.2" } rand = "0.7.0" serde = { version = "1.0.129", features = ["derive", "rc"] } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.11" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.11" } -solana-measure = { path = "../measure", version = "=1.14.11" } -solana-metrics = { path = "../metrics", version = "=1.14.11" } -solana-sdk = { path = "../sdk", version = "=1.14.11" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.12" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.12" } +solana-measure = { path = "../measure", version = "=1.14.12" } +solana-metrics = { path = "../metrics", version = "=1.14.12" } +solana-sdk = { path = "../sdk", version = "=1.14.12" } thiserror = "1.0" enum-iterator = "0.8.1" [dev-dependencies] -solana-logger = { path = "../logger", version = "=1.14.11" } +solana-logger = { path = "../logger", version = "=1.14.12" } [lib] crate-type = ["lib"] diff --git a/program-test/Cargo.toml b/program-test/Cargo.toml index f6d886372fa11a..41179a0299bd78 100644 --- a/program-test/Cargo.toml +++ b/program-test/Cargo.toml @@ -5,7 +5,7 @@ edition = "2021" license = "Apache-2.0" name = "solana-program-test" repository = "https://github.com/solana-labs/solana" -version = "1.14.11" +version = "1.14.12" [dependencies] assert_matches = "1.5.0" @@ -15,13 +15,13 @@ bincode = "1.3.3" chrono-humanize = "0.2.1" log = "0.4.17" serde = "1.0.138" -solana-banks-client = { path = "../banks-client", version = "=1.14.11" } -solana-banks-server = { path = "../banks-server", version = "=1.14.11" } -solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.11" } -solana-logger = { path = "../logger", version = "=1.14.11" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.11" } -solana-runtime = { path = "../runtime", version = "=1.14.11" } -solana-sdk = { path = "../sdk", version = "=1.14.11" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.11" } +solana-banks-client = { path = "../banks-client", version = "=1.14.12" } +solana-banks-server = { path = "../banks-server", version = "=1.14.12" } +solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.12" } +solana-logger = { path = "../logger", version = "=1.14.12" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.12" } +solana-runtime = { path = "../runtime", version = "=1.14.12" } +solana-sdk = { path = "../sdk", version = "=1.14.12" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.12" } thiserror = "1.0" tokio = { version = "1", features = ["full"] } diff --git a/programs/address-lookup-table-tests/Cargo.toml b/programs/address-lookup-table-tests/Cargo.toml index 3e37af19fbfd89..e7c1a6f4df6d0c 100644 --- a/programs/address-lookup-table-tests/Cargo.toml +++ b/programs/address-lookup-table-tests/Cargo.toml @@ -3,7 +3,7 @@ [package] name = "solana-address-lookup-table-program-tests" -version = "1.14.11" +version = "1.14.12" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" @@ -14,9 +14,9 @@ publish = false [dev-dependencies] assert_matches = "1.5.0" bincode = "1.3.3" -solana-address-lookup-table-program = { path = "../address-lookup-table", version = "=1.14.11" } -solana-program-test = { path = "../../program-test", version = "=1.14.11" } -solana-sdk = { path = "../../sdk", version = "=1.14.11" } +solana-address-lookup-table-program = { path = "../address-lookup-table", version = "=1.14.12" } +solana-program-test = { path = "../../program-test", version = "=1.14.12" } +solana-sdk = { path = "../../sdk", version = "=1.14.12" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/address-lookup-table/Cargo.toml b/programs/address-lookup-table/Cargo.toml index e4531e034f2ae3..a4dd857a65a40b 100644 --- a/programs/address-lookup-table/Cargo.toml +++ b/programs/address-lookup-table/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-address-lookup-table-program" -version = "1.14.11" +version = "1.14.12" description = "Solana address lookup table program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -16,14 +16,14 @@ log = "0.4.17" num-derive = "0.3" num-traits = "0.2" serde = { version = "1.0.138", features = ["derive"] } -solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.11" } -solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.11" } -solana-program = { path = "../../sdk/program", version = "=1.14.11" } +solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.12" } +solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.12" } +solana-program = { path = "../../sdk/program", version = "=1.14.12" } thiserror = "1.0" [target.'cfg(not(target_os = "solana"))'.dependencies] -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.11" } -solana-sdk = { path = "../../sdk", version = "=1.14.11" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.12" } +solana-sdk = { path = "../../sdk", version = "=1.14.12" } [build-dependencies] rustc_version = "0.4" diff --git a/programs/bpf-loader-tests/Cargo.toml b/programs/bpf-loader-tests/Cargo.toml index 23483b5f33324c..e5d68eefa37c04 100644 --- a/programs/bpf-loader-tests/Cargo.toml +++ b/programs/bpf-loader-tests/Cargo.toml @@ -3,7 +3,7 @@ [package] name = "solana-bpf-loader-program-tests" -version = "1.14.11" +version = "1.14.12" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" @@ -14,9 +14,9 @@ publish = false [dev-dependencies] assert_matches = "1.5.0" bincode = "1.3.3" -solana-bpf-loader-program = { path = "../bpf_loader", version = "=1.14.11" } -solana-program-test = { path = "../../program-test", version = "=1.14.11" } -solana-sdk = { path = "../../sdk", version = "=1.14.11" } +solana-bpf-loader-program = { path = "../bpf_loader", version = "=1.14.12" } +solana-program-test = { path = "../../program-test", version = "=1.14.12" } +solana-sdk = { path = "../../sdk", version = "=1.14.12" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/bpf/Cargo.lock b/programs/bpf/Cargo.lock index 7d696a68b207a6..86e940f0497ed3 100644 --- a/programs/bpf/Cargo.lock +++ b/programs/bpf/Cargo.lock @@ -4054,7 +4054,7 @@ dependencies = [ [[package]] name = "solana-account-decoder" -version = "1.14.11" +version = "1.14.12" dependencies = [ "Inflector", "base64 0.13.0", @@ -4067,7 +4067,7 @@ dependencies = [ "serde_json", "solana-address-lookup-table-program", "solana-config-program", - "solana-sdk 1.14.11", + "solana-sdk 1.14.12", "solana-vote-program", "spl-token", "spl-token-2022", @@ -4077,7 +4077,7 @@ dependencies = [ [[package]] name = "solana-address-lookup-table-program" -version = "1.14.11" +version = "1.14.12" dependencies = [ "bincode", "bytemuck", @@ -4086,23 +4086,23 @@ dependencies = [ "num-traits", "rustc_version", "serde", - "solana-frozen-abi 1.14.11", - "solana-frozen-abi-macro 1.14.11", - "solana-program 1.14.11", + "solana-frozen-abi 1.14.12", + "solana-frozen-abi-macro 1.14.12", + "solana-program 1.14.12", "solana-program-runtime", - "solana-sdk 1.14.11", + "solana-sdk 1.14.12", "thiserror", ] [[package]] name = "solana-banks-client" -version = "1.14.11" +version = "1.14.12" dependencies = [ "borsh", "futures 0.3.21", "solana-banks-interface", - "solana-program 1.14.11", - "solana-sdk 1.14.11", + "solana-program 1.14.12", + "solana-sdk 1.14.12", "tarpc", "thiserror", "tokio", @@ -4111,16 +4111,16 @@ dependencies = [ [[package]] name = "solana-banks-interface" -version = "1.14.11" +version = "1.14.12" dependencies = [ "serde", - "solana-sdk 1.14.11", + "solana-sdk 1.14.12", "tarpc", ] [[package]] name = "solana-banks-server" -version = "1.14.11" +version = "1.14.12" dependencies = [ "bincode", "crossbeam-channel", @@ -4128,7 +4128,7 @@ dependencies = [ "solana-banks-interface", "solana-client", "solana-runtime", - "solana-sdk 1.14.11", + "solana-sdk 1.14.12", "solana-send-transaction-service", "tarpc", "tokio", @@ -4138,7 +4138,7 @@ dependencies = [ [[package]] name = "solana-bloom" -version = "1.14.11" +version = "1.14.12" dependencies = [ "bv", "fnv", @@ -4148,14 +4148,14 @@ dependencies = [ "rustc_version", "serde", "serde_derive", - "solana-frozen-abi 1.14.11", - "solana-frozen-abi-macro 1.14.11", - "solana-sdk 1.14.11", + "solana-frozen-abi 1.14.12", + "solana-frozen-abi-macro 1.14.12", + "solana-sdk 1.14.12", ] [[package]] name = "solana-bpf-loader-program" -version = "1.14.11" +version = "1.14.12" dependencies = [ "bincode", "byteorder 1.4.3", @@ -4164,15 +4164,15 @@ dependencies = [ "solana-measure", "solana-metrics", "solana-program-runtime", - "solana-sdk 1.14.11", - "solana-zk-token-sdk 1.14.11", + "solana-sdk 1.14.12", + "solana-zk-token-sdk 1.14.12", "solana_rbpf", "thiserror", ] [[package]] name = "solana-bpf-programs" -version = "1.14.11" +version = "1.14.12" dependencies = [ "bincode", "byteorder 1.4.3", @@ -4188,11 +4188,11 @@ dependencies = [ "solana-bpf-rust-realloc-invoke", "solana-cli-output", "solana-ledger", - "solana-logger 1.14.11", + "solana-logger 1.14.12", "solana-measure", "solana-program-runtime", "solana-runtime", - "solana-sdk 1.14.11", + "solana-sdk 1.14.12", "solana-transaction-status", "solana_rbpf", "walkdir", @@ -4200,385 +4200,385 @@ dependencies = [ [[package]] name = "solana-bpf-rust-128bit" -version = "1.14.11" +version = "1.14.12" dependencies = [ "solana-bpf-rust-128bit-dep", - "solana-program 1.14.11", + "solana-program 1.14.12", ] [[package]] name = "solana-bpf-rust-128bit-dep" -version = "1.14.11" +version = "1.14.12" dependencies = [ - "solana-program 1.14.11", + "solana-program 1.14.12", ] [[package]] name = "solana-bpf-rust-alloc" -version = "1.14.11" +version = "1.14.12" dependencies = [ - "solana-program 1.14.11", + "solana-program 1.14.12", ] [[package]] name = "solana-bpf-rust-call-depth" -version = "1.14.11" +version = "1.14.12" dependencies = [ - "solana-program 1.14.11", + "solana-program 1.14.12", ] [[package]] name = "solana-bpf-rust-caller-access" -version = "1.14.11" +version = "1.14.12" dependencies = [ - "solana-program 1.14.11", + "solana-program 1.14.12", ] [[package]] name = "solana-bpf-rust-curve25519" -version = "1.14.11" +version = "1.14.12" dependencies = [ - "solana-program 1.14.11", - "solana-zk-token-sdk 1.14.11", + "solana-program 1.14.12", + "solana-zk-token-sdk 1.14.12", ] [[package]] name = "solana-bpf-rust-custom-heap" -version = "1.14.11" +version = "1.14.12" dependencies = [ - "solana-program 1.14.11", + "solana-program 1.14.12", ] [[package]] name = "solana-bpf-rust-dep-crate" -version = "1.14.11" +version = "1.14.12" dependencies = [ "byteorder 1.4.3", "solana-address-lookup-table-program", - "solana-program 1.14.11", + "solana-program 1.14.12", ] [[package]] name = "solana-bpf-rust-deprecated-loader" -version = "1.14.11" +version = "1.14.12" dependencies = [ - "solana-program 1.14.11", + "solana-program 1.14.12", ] [[package]] name = "solana-bpf-rust-dup-accounts" -version = "1.14.11" +version = "1.14.12" dependencies = [ - "solana-program 1.14.11", + "solana-program 1.14.12", ] [[package]] name = "solana-bpf-rust-error-handling" -version = "1.14.11" +version = "1.14.12" dependencies = [ "num-derive", "num-traits", - "solana-program 1.14.11", + "solana-program 1.14.12", "thiserror", ] [[package]] name = "solana-bpf-rust-external-spend" -version = "1.14.11" +version = "1.14.12" dependencies = [ - "solana-program 1.14.11", + "solana-program 1.14.12", ] [[package]] name = "solana-bpf-rust-finalize" -version = "1.14.11" +version = "1.14.12" dependencies = [ - "solana-program 1.14.11", + "solana-program 1.14.12", ] [[package]] name = "solana-bpf-rust-get-minimum-delegation" -version = "1.14.11" +version = "1.14.12" dependencies = [ - "solana-program 1.14.11", + "solana-program 1.14.12", ] [[package]] name = "solana-bpf-rust-inner_instruction_alignment_check" -version = "1.14.11" +version = "1.14.12" dependencies = [ - "solana-program 1.14.11", + "solana-program 1.14.12", ] [[package]] name = "solana-bpf-rust-instruction-introspection" -version = "1.14.11" +version = "1.14.12" dependencies = [ - "solana-program 1.14.11", + "solana-program 1.14.12", ] [[package]] name = "solana-bpf-rust-invoke" -version = "1.14.11" +version = "1.14.12" dependencies = [ "solana-bpf-rust-invoked", - "solana-program 1.14.11", + "solana-program 1.14.12", ] [[package]] name = "solana-bpf-rust-invoke-and-error" -version = "1.14.11" +version = "1.14.12" dependencies = [ - "solana-program 1.14.11", + "solana-program 1.14.12", ] [[package]] name = "solana-bpf-rust-invoke-and-ok" -version = "1.14.11" +version = "1.14.12" dependencies = [ - "solana-program 1.14.11", + "solana-program 1.14.12", ] [[package]] name = "solana-bpf-rust-invoke-and-return" -version = "1.14.11" +version = "1.14.12" dependencies = [ - "solana-program 1.14.11", + "solana-program 1.14.12", ] [[package]] name = "solana-bpf-rust-invoked" -version = "1.14.11" +version = "1.14.12" dependencies = [ - "solana-program 1.14.11", + "solana-program 1.14.12", ] [[package]] name = "solana-bpf-rust-iter" -version = "1.14.11" +version = "1.14.12" dependencies = [ - "solana-program 1.14.11", + "solana-program 1.14.12", ] [[package]] name = "solana-bpf-rust-log-data" -version = "1.14.11" +version = "1.14.12" dependencies = [ - "solana-program 1.14.11", + "solana-program 1.14.12", ] [[package]] name = "solana-bpf-rust-many-args" -version = "1.14.11" +version = "1.14.12" dependencies = [ "solana-bpf-rust-many-args-dep", - "solana-program 1.14.11", + "solana-program 1.14.12", ] [[package]] name = "solana-bpf-rust-many-args-dep" -version = "1.14.11" +version = "1.14.12" dependencies = [ - "solana-program 1.14.11", + "solana-program 1.14.12", ] [[package]] name = "solana-bpf-rust-mem" -version = "1.14.11" +version = "1.14.12" dependencies = [ - "solana-program 1.14.11", + "solana-program 1.14.12", "solana-program-runtime", "solana-program-test", - "solana-sdk 1.14.11", + "solana-sdk 1.14.12", ] [[package]] name = "solana-bpf-rust-membuiltins" -version = "1.14.11" +version = "1.14.12" dependencies = [ "solana-bpf-rust-mem", - "solana-program 1.14.11", + "solana-program 1.14.12", ] [[package]] name = "solana-bpf-rust-noop" -version = "1.14.11" +version = "1.14.12" dependencies = [ - "solana-program 1.14.11", + "solana-program 1.14.12", ] [[package]] name = "solana-bpf-rust-panic" -version = "1.14.11" +version = "1.14.12" dependencies = [ - "solana-program 1.14.11", + "solana-program 1.14.12", ] [[package]] name = "solana-bpf-rust-param-passing" -version = "1.14.11" +version = "1.14.12" dependencies = [ "solana-bpf-rust-param-passing-dep", - "solana-program 1.14.11", + "solana-program 1.14.12", ] [[package]] name = "solana-bpf-rust-param-passing-dep" -version = "1.14.11" +version = "1.14.12" dependencies = [ - "solana-program 1.14.11", + "solana-program 1.14.12", ] [[package]] name = "solana-bpf-rust-rand" -version = "1.14.11" +version = "1.14.12" dependencies = [ "getrandom 0.1.14", "rand 0.7.3", - "solana-program 1.14.11", + "solana-program 1.14.12", ] [[package]] name = "solana-bpf-rust-realloc" -version = "1.14.11" +version = "1.14.12" dependencies = [ - "solana-program 1.14.11", + "solana-program 1.14.12", ] [[package]] name = "solana-bpf-rust-realloc-invoke" -version = "1.14.11" +version = "1.14.12" dependencies = [ "solana-bpf-rust-realloc", - "solana-program 1.14.11", + "solana-program 1.14.12", ] [[package]] name = "solana-bpf-rust-ro-account_modify" -version = "1.14.11" +version = "1.14.12" dependencies = [ - "solana-program 1.14.11", + "solana-program 1.14.12", ] [[package]] name = "solana-bpf-rust-ro-modify" -version = "1.14.11" +version = "1.14.12" dependencies = [ - "solana-program 1.14.11", + "solana-program 1.14.12", ] [[package]] name = "solana-bpf-rust-sanity" -version = "1.14.11" +version = "1.14.12" dependencies = [ - "solana-program 1.14.11", + "solana-program 1.14.12", "solana-program-runtime", "solana-program-test", - "solana-sdk 1.14.11", + "solana-sdk 1.14.12", ] [[package]] name = "solana-bpf-rust-secp256k1-recover" -version = "1.14.11" +version = "1.14.12" dependencies = [ "libsecp256k1 0.7.0", - "solana-program 1.14.11", + "solana-program 1.14.12", ] [[package]] name = "solana-bpf-rust-sha" -version = "1.14.11" +version = "1.14.12" dependencies = [ "blake3", - "solana-program 1.14.11", + "solana-program 1.14.12", ] [[package]] name = "solana-bpf-rust-sibling-instructions" -version = "1.14.11" +version = "1.14.12" dependencies = [ - "solana-program 1.14.11", + "solana-program 1.14.12", ] [[package]] name = "solana-bpf-rust-sibling_inner-instructions" -version = "1.14.11" +version = "1.14.12" dependencies = [ - "solana-program 1.14.11", + "solana-program 1.14.12", ] [[package]] name = "solana-bpf-rust-simulation" -version = "1.14.11" +version = "1.14.12" dependencies = [ - "solana-logger 1.14.11", - "solana-program 1.14.11", + "solana-logger 1.14.12", + "solana-program 1.14.12", "solana-program-test", - "solana-sdk 1.14.11", + "solana-sdk 1.14.12", "solana-validator", ] [[package]] name = "solana-bpf-rust-spoof1" -version = "1.14.11" +version = "1.14.12" dependencies = [ - "solana-program 1.14.11", + "solana-program 1.14.12", ] [[package]] name = "solana-bpf-rust-spoof1-system" -version = "1.14.11" +version = "1.14.12" dependencies = [ - "solana-program 1.14.11", + "solana-program 1.14.12", ] [[package]] name = "solana-bpf-rust-sysvar" -version = "1.14.11" +version = "1.14.12" dependencies = [ - "solana-program 1.14.11", + "solana-program 1.14.12", "solana-program-runtime", "solana-program-test", - "solana-sdk 1.14.11", + "solana-sdk 1.14.12", ] [[package]] name = "solana-bpf-rust-upgradeable" -version = "1.14.11" +version = "1.14.12" dependencies = [ - "solana-program 1.14.11", + "solana-program 1.14.12", ] [[package]] name = "solana-bpf-rust-upgraded" -version = "1.14.11" +version = "1.14.12" dependencies = [ - "solana-program 1.14.11", + "solana-program 1.14.12", ] [[package]] name = "solana-bucket-map" -version = "1.14.11" +version = "1.14.12" dependencies = [ "log", "memmap2", "modular-bitfield", "rand 0.7.3", "solana-measure", - "solana-sdk 1.14.11", + "solana-sdk 1.14.12", "tempfile", ] [[package]] name = "solana-clap-utils" -version = "1.14.11" +version = "1.14.12" dependencies = [ "chrono", "clap 2.33.3", "rpassword", "solana-perf", "solana-remote-wallet", - "solana-sdk 1.14.11", + "solana-sdk 1.14.12", "thiserror", "tiny-bip39", "uriparse", @@ -4587,7 +4587,7 @@ dependencies = [ [[package]] name = "solana-cli-config" -version = "1.14.11" +version = "1.14.12" dependencies = [ "dirs-next", "lazy_static", @@ -4595,13 +4595,13 @@ dependencies = [ "serde_derive", "serde_yaml", "solana-clap-utils", - "solana-sdk 1.14.11", + "solana-sdk 1.14.12", "url 2.2.2", ] [[package]] name = "solana-cli-output" -version = "1.14.11" +version = "1.14.12" dependencies = [ "Inflector", "base64 0.13.0", @@ -4618,7 +4618,7 @@ dependencies = [ "solana-clap-utils", "solana-cli-config", "solana-client", - "solana-sdk 1.14.11", + "solana-sdk 1.14.12", "solana-transaction-status", "solana-vote-program", "spl-memo", @@ -4626,7 +4626,7 @@ dependencies = [ [[package]] name = "solana-client" -version = "1.14.11" +version = "1.14.12" dependencies = [ "async-mutex", "async-trait", @@ -4662,7 +4662,7 @@ dependencies = [ "solana-measure", "solana-metrics", "solana-net-utils", - "solana-sdk 1.14.11", + "solana-sdk 1.14.12", "solana-streamer", "solana-transaction-status", "solana-version", @@ -4678,27 +4678,27 @@ dependencies = [ [[package]] name = "solana-compute-budget-program" -version = "1.14.11" +version = "1.14.12" dependencies = [ "solana-program-runtime", - "solana-sdk 1.14.11", + "solana-sdk 1.14.12", ] [[package]] name = "solana-config-program" -version = "1.14.11" +version = "1.14.12" dependencies = [ "bincode", "chrono", "serde", "serde_derive", "solana-program-runtime", - "solana-sdk 1.14.11", + "solana-sdk 1.14.12", ] [[package]] name = "solana-core" -version = "1.14.11" +version = "1.14.12" dependencies = [ "ahash", "base64 0.13.0", @@ -4727,8 +4727,8 @@ dependencies = [ "solana-bloom", "solana-client", "solana-entry", - "solana-frozen-abi 1.14.11", - "solana-frozen-abi-macro 1.14.11", + "solana-frozen-abi 1.14.12", + "solana-frozen-abi-macro 1.14.12", "solana-geyser-plugin-manager", "solana-gossip", "solana-ledger", @@ -4741,7 +4741,7 @@ dependencies = [ "solana-rayon-threadlimit", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.11", + "solana-sdk 1.14.12", "solana-send-transaction-service", "solana-streamer", "solana-transaction-status", @@ -4757,19 +4757,19 @@ dependencies = [ [[package]] name = "solana-download-utils" -version = "1.14.11" +version = "1.14.12" dependencies = [ "console", "indicatif", "log", "reqwest", "solana-runtime", - "solana-sdk 1.14.11", + "solana-sdk 1.14.12", ] [[package]] name = "solana-entry" -version = "1.14.11" +version = "1.14.12" dependencies = [ "bincode", "crossbeam-channel", @@ -4785,12 +4785,12 @@ dependencies = [ "solana-metrics", "solana-perf", "solana-rayon-threadlimit", - "solana-sdk 1.14.11", + "solana-sdk 1.14.12", ] [[package]] name = "solana-faucet" -version = "1.14.11" +version = "1.14.12" dependencies = [ "bincode", "byteorder 1.4.3", @@ -4801,9 +4801,9 @@ dependencies = [ "serde_derive", "solana-clap-utils", "solana-cli-config", - "solana-logger 1.14.11", + "solana-logger 1.14.12", "solana-metrics", - "solana-sdk 1.14.11", + "solana-sdk 1.14.12", "solana-version", "spl-memo", "thiserror", @@ -4846,7 +4846,7 @@ dependencies = [ [[package]] name = "solana-frozen-abi" -version = "1.14.11" +version = "1.14.12" dependencies = [ "ahash", "blake3", @@ -4871,7 +4871,7 @@ dependencies = [ "serde_derive", "serde_json", "sha2 0.10.2", - "solana-frozen-abi-macro 1.14.11", + "solana-frozen-abi-macro 1.14.12", "subtle", "thiserror", ] @@ -4890,7 +4890,7 @@ dependencies = [ [[package]] name = "solana-frozen-abi-macro" -version = "1.14.11" +version = "1.14.12" dependencies = [ "proc-macro2 1.0.41", "quote 1.0.18", @@ -4900,26 +4900,26 @@ dependencies = [ [[package]] name = "solana-genesis-utils" -version = "1.14.11" +version = "1.14.12" dependencies = [ "solana-download-utils", "solana-runtime", - "solana-sdk 1.14.11", + "solana-sdk 1.14.12", ] [[package]] name = "solana-geyser-plugin-interface" -version = "1.14.11" +version = "1.14.12" dependencies = [ "log", - "solana-sdk 1.14.11", + "solana-sdk 1.14.12", "solana-transaction-status", "thiserror", ] [[package]] name = "solana-geyser-plugin-manager" -version = "1.14.11" +version = "1.14.12" dependencies = [ "bs58", "crossbeam-channel", @@ -4932,14 +4932,14 @@ dependencies = [ "solana-metrics", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.11", + "solana-sdk 1.14.12", "solana-transaction-status", "thiserror", ] [[package]] name = "solana-gossip" -version = "1.14.11" +version = "1.14.12" dependencies = [ "bincode", "bv", @@ -4963,17 +4963,17 @@ dependencies = [ "solana-clap-utils", "solana-client", "solana-entry", - "solana-frozen-abi 1.14.11", - "solana-frozen-abi-macro 1.14.11", + "solana-frozen-abi 1.14.12", + "solana-frozen-abi-macro 1.14.12", "solana-ledger", - "solana-logger 1.14.11", + "solana-logger 1.14.12", "solana-measure", "solana-metrics", "solana-net-utils", "solana-perf", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.14.11", + "solana-sdk 1.14.12", "solana-streamer", "solana-version", "solana-vote-program", @@ -4982,7 +4982,7 @@ dependencies = [ [[package]] name = "solana-ledger" -version = "1.14.11" +version = "1.14.12" dependencies = [ "assert_matches", "bincode", @@ -5014,15 +5014,15 @@ dependencies = [ "solana-account-decoder", "solana-bpf-loader-program", "solana-entry", - "solana-frozen-abi 1.14.11", - "solana-frozen-abi-macro 1.14.11", + "solana-frozen-abi 1.14.12", + "solana-frozen-abi-macro 1.14.12", "solana-measure", "solana-metrics", "solana-perf", "solana-program-runtime", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.14.11", + "solana-sdk 1.14.12", "solana-stake-program", "solana-storage-bigtable", "solana-storage-proto", @@ -5051,7 +5051,7 @@ dependencies = [ [[package]] name = "solana-logger" -version = "1.14.11" +version = "1.14.12" dependencies = [ "env_logger", "lazy_static", @@ -5060,36 +5060,36 @@ dependencies = [ [[package]] name = "solana-measure" -version = "1.14.11" +version = "1.14.12" dependencies = [ "log", - "solana-sdk 1.14.11", + "solana-sdk 1.14.12", ] [[package]] name = "solana-merkle-tree" -version = "1.14.11" +version = "1.14.12" dependencies = [ "fast-math", "matches", - "solana-program 1.14.11", + "solana-program 1.14.12", ] [[package]] name = "solana-metrics" -version = "1.14.11" +version = "1.14.12" dependencies = [ "crossbeam-channel", "gethostname", "lazy_static", "log", "reqwest", - "solana-sdk 1.14.11", + "solana-sdk 1.14.12", ] [[package]] name = "solana-net-utils" -version = "1.14.11" +version = "1.14.12" dependencies = [ "bincode", "clap 3.1.6", @@ -5100,8 +5100,8 @@ dependencies = [ "serde", "serde_derive", "socket2", - "solana-logger 1.14.11", - "solana-sdk 1.14.11", + "solana-logger 1.14.12", + "solana-sdk 1.14.12", "solana-version", "tokio", "url 2.2.2", @@ -5109,7 +5109,7 @@ dependencies = [ [[package]] name = "solana-perf" -version = "1.14.11" +version = "1.14.12" dependencies = [ "ahash", "bincode", @@ -5128,13 +5128,13 @@ dependencies = [ "serde", "solana-metrics", "solana-rayon-threadlimit", - "solana-sdk 1.14.11", + "solana-sdk 1.14.12", "solana-vote-program", ] [[package]] name = "solana-poh" -version = "1.14.11" +version = "1.14.12" dependencies = [ "core_affinity", "crossbeam-channel", @@ -5144,7 +5144,7 @@ dependencies = [ "solana-measure", "solana-metrics", "solana-runtime", - "solana-sdk 1.14.11", + "solana-sdk 1.14.12", "solana-sys-tuner", "thiserror", ] @@ -5200,7 +5200,7 @@ dependencies = [ [[package]] name = "solana-program" -version = "1.14.11" +version = "1.14.12" dependencies = [ "base64 0.13.0", "bincode", @@ -5236,9 +5236,9 @@ dependencies = [ "serde_json", "sha2 0.10.2", "sha3 0.10.1", - "solana-frozen-abi 1.14.11", - "solana-frozen-abi-macro 1.14.11", - "solana-sdk-macro 1.14.11", + "solana-frozen-abi 1.14.12", + "solana-frozen-abi-macro 1.14.12", + "solana-sdk-macro 1.14.12", "thiserror", "tiny-bip39", "wasm-bindgen", @@ -5247,7 +5247,7 @@ dependencies = [ [[package]] name = "solana-program-runtime" -version = "1.14.11" +version = "1.14.12" dependencies = [ "base64 0.13.0", "bincode", @@ -5262,17 +5262,17 @@ dependencies = [ "rand 0.7.3", "rustc_version", "serde", - "solana-frozen-abi 1.14.11", - "solana-frozen-abi-macro 1.14.11", + "solana-frozen-abi 1.14.12", + "solana-frozen-abi-macro 1.14.12", "solana-measure", "solana-metrics", - "solana-sdk 1.14.11", + "solana-sdk 1.14.12", "thiserror", ] [[package]] name = "solana-program-test" -version = "1.14.11" +version = "1.14.12" dependencies = [ "assert_matches", "async-trait", @@ -5284,10 +5284,10 @@ dependencies = [ "solana-banks-client", "solana-banks-server", "solana-bpf-loader-program", - "solana-logger 1.14.11", + "solana-logger 1.14.12", "solana-program-runtime", "solana-runtime", - "solana-sdk 1.14.11", + "solana-sdk 1.14.12", "solana-vote-program", "thiserror", "tokio", @@ -5295,7 +5295,7 @@ dependencies = [ [[package]] name = "solana-rayon-threadlimit" -version = "1.14.11" +version = "1.14.12" dependencies = [ "lazy_static", "num_cpus", @@ -5303,7 +5303,7 @@ dependencies = [ [[package]] name = "solana-remote-wallet" -version = "1.14.11" +version = "1.14.12" dependencies = [ "console", "dialoguer", @@ -5313,14 +5313,14 @@ dependencies = [ "parking_lot 0.12.1", "qstring", "semver", - "solana-sdk 1.14.11", + "solana-sdk 1.14.12", "thiserror", "uriparse", ] [[package]] name = "solana-rpc" -version = "1.14.11" +version = "1.14.12" dependencies = [ "base64 0.13.0", "bincode", @@ -5353,7 +5353,7 @@ dependencies = [ "solana-poh", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.14.11", + "solana-sdk 1.14.12", "solana-send-transaction-service", "solana-stake-program", "solana-storage-bigtable", @@ -5371,7 +5371,7 @@ dependencies = [ [[package]] name = "solana-runtime" -version = "1.14.11" +version = "1.14.12" dependencies = [ "arrayref", "bincode", @@ -5407,17 +5407,17 @@ dependencies = [ "solana-bucket-map", "solana-compute-budget-program", "solana-config-program", - "solana-frozen-abi 1.14.11", - "solana-frozen-abi-macro 1.14.11", + "solana-frozen-abi 1.14.12", + "solana-frozen-abi-macro 1.14.12", "solana-measure", "solana-metrics", "solana-program-runtime", "solana-rayon-threadlimit", - "solana-sdk 1.14.11", + "solana-sdk 1.14.12", "solana-stake-program", "solana-vote-program", "solana-zk-token-proof-program", - "solana-zk-token-sdk 1.14.11", + "solana-zk-token-sdk 1.14.12", "strum", "strum_macros", "symlink", @@ -5480,7 +5480,7 @@ dependencies = [ [[package]] name = "solana-sdk" -version = "1.14.11" +version = "1.14.12" dependencies = [ "assert_matches", "base64 0.13.0", @@ -5517,11 +5517,11 @@ dependencies = [ "serde_json", "sha2 0.10.2", "sha3 0.10.1", - "solana-frozen-abi 1.14.11", - "solana-frozen-abi-macro 1.14.11", - "solana-logger 1.14.11", - "solana-program 1.14.11", - "solana-sdk-macro 1.14.11", + "solana-frozen-abi 1.14.12", + "solana-frozen-abi-macro 1.14.12", + "solana-logger 1.14.12", + "solana-program 1.14.12", + "solana-sdk-macro 1.14.12", "thiserror", "uriparse", "wasm-bindgen", @@ -5542,7 +5542,7 @@ dependencies = [ [[package]] name = "solana-sdk-macro" -version = "1.14.11" +version = "1.14.12" dependencies = [ "bs58", "proc-macro2 1.0.41", @@ -5553,7 +5553,7 @@ dependencies = [ [[package]] name = "solana-send-transaction-service" -version = "1.14.11" +version = "1.14.12" dependencies = [ "crossbeam-channel", "log", @@ -5561,12 +5561,12 @@ dependencies = [ "solana-measure", "solana-metrics", "solana-runtime", - "solana-sdk 1.14.11", + "solana-sdk 1.14.12", ] [[package]] name = "solana-stake-program" -version = "1.14.11" +version = "1.14.12" dependencies = [ "bincode", "log", @@ -5576,18 +5576,18 @@ dependencies = [ "serde", "serde_derive", "solana-config-program", - "solana-frozen-abi 1.14.11", - "solana-frozen-abi-macro 1.14.11", + "solana-frozen-abi 1.14.12", + "solana-frozen-abi-macro 1.14.12", "solana-metrics", "solana-program-runtime", - "solana-sdk 1.14.11", + "solana-sdk 1.14.12", "solana-vote-program", "thiserror", ] [[package]] name = "solana-storage-bigtable" -version = "1.14.11" +version = "1.14.12" dependencies = [ "backoff", "bincode", @@ -5608,7 +5608,7 @@ dependencies = [ "serde_derive", "smpl_jwt", "solana-metrics", - "solana-sdk 1.14.11", + "solana-sdk 1.14.12", "solana-storage-proto", "solana-transaction-status", "thiserror", @@ -5619,7 +5619,7 @@ dependencies = [ [[package]] name = "solana-storage-proto" -version = "1.14.11" +version = "1.14.12" dependencies = [ "bincode", "bs58", @@ -5627,14 +5627,14 @@ dependencies = [ "protobuf-src", "serde", "solana-account-decoder", - "solana-sdk 1.14.11", + "solana-sdk 1.14.12", "solana-transaction-status", "tonic-build 0.8.0", ] [[package]] name = "solana-streamer" -version = "1.14.11" +version = "1.14.12" dependencies = [ "crossbeam-channel", "futures-util", @@ -5653,7 +5653,7 @@ dependencies = [ "rustls 0.20.6", "solana-metrics", "solana-perf", - "solana-sdk 1.14.11", + "solana-sdk 1.14.12", "thiserror", "tokio", "x509-parser", @@ -5661,13 +5661,13 @@ dependencies = [ [[package]] name = "solana-sys-tuner" -version = "1.14.11" +version = "1.14.12" dependencies = [ "clap 2.33.3", "libc", "log", "nix", - "solana-logger 1.14.11", + "solana-logger 1.14.12", "solana-version", "sysctl", "unix_socket2", @@ -5676,7 +5676,7 @@ dependencies = [ [[package]] name = "solana-test-validator" -version = "1.14.11" +version = "1.14.12" dependencies = [ "base64 0.13.0", "log", @@ -5687,20 +5687,20 @@ dependencies = [ "solana-core", "solana-gossip", "solana-ledger", - "solana-logger 1.14.11", + "solana-logger 1.14.12", "solana-net-utils", "solana-program-runtime", "solana-program-test", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.11", + "solana-sdk 1.14.12", "solana-streamer", "tokio", ] [[package]] name = "solana-transaction-status" -version = "1.14.11" +version = "1.14.12" dependencies = [ "Inflector", "base64 0.13.0", @@ -5716,7 +5716,7 @@ dependencies = [ "solana-address-lookup-table-program", "solana-measure", "solana-metrics", - "solana-sdk 1.14.11", + "solana-sdk 1.14.12", "solana-vote-program", "spl-associated-token-account", "spl-memo", @@ -5727,7 +5727,7 @@ dependencies = [ [[package]] name = "solana-validator" -version = "1.14.11" +version = "1.14.12" dependencies = [ "chrono", "clap 2.33.3", @@ -5758,14 +5758,14 @@ dependencies = [ "solana-genesis-utils", "solana-gossip", "solana-ledger", - "solana-logger 1.14.11", + "solana-logger 1.14.12", "solana-metrics", "solana-net-utils", "solana-perf", "solana-poh", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.11", + "solana-sdk 1.14.12", "solana-send-transaction-service", "solana-storage-bigtable", "solana-streamer", @@ -5778,21 +5778,21 @@ dependencies = [ [[package]] name = "solana-version" -version = "1.14.11" +version = "1.14.12" dependencies = [ "log", "rustc_version", "semver", "serde", "serde_derive", - "solana-frozen-abi 1.14.11", - "solana-frozen-abi-macro 1.14.11", - "solana-sdk 1.14.11", + "solana-frozen-abi 1.14.12", + "solana-frozen-abi-macro 1.14.12", + "solana-sdk 1.14.12", ] [[package]] name = "solana-vote-program" -version = "1.14.11" +version = "1.14.12" dependencies = [ "bincode", "log", @@ -5801,25 +5801,25 @@ dependencies = [ "rustc_version", "serde", "serde_derive", - "solana-frozen-abi 1.14.11", - "solana-frozen-abi-macro 1.14.11", + "solana-frozen-abi 1.14.12", + "solana-frozen-abi-macro 1.14.12", "solana-metrics", "solana-program-runtime", - "solana-sdk 1.14.11", + "solana-sdk 1.14.12", "thiserror", ] [[package]] name = "solana-zk-token-proof-program" -version = "1.14.11" +version = "1.14.12" dependencies = [ "bytemuck", "getrandom 0.1.14", "num-derive", "num-traits", "solana-program-runtime", - "solana-sdk 1.14.11", - "solana-zk-token-sdk 1.14.11", + "solana-sdk 1.14.12", + "solana-zk-token-sdk 1.14.12", ] [[package]] @@ -5855,7 +5855,7 @@ dependencies = [ [[package]] name = "solana-zk-token-sdk" -version = "1.14.11" +version = "1.14.12" dependencies = [ "aes-gcm-siv", "arrayref", @@ -5875,8 +5875,8 @@ dependencies = [ "serde", "serde_json", "sha3 0.9.1", - "solana-program 1.14.11", - "solana-sdk 1.14.11", + "solana-program 1.14.12", + "solana-sdk 1.14.12", "subtle", "thiserror", "zeroize", diff --git a/programs/bpf/Cargo.toml b/programs/bpf/Cargo.toml index f9c35e8a34b90e..f59e5781da7553 100644 --- a/programs/bpf/Cargo.toml +++ b/programs/bpf/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "solana-bpf-programs" description = "Blockchain, Rebuilt for Scale" -version = "1.14.11" +version = "1.14.12" documentation = "https://docs.rs/solana" homepage = "https://solana.com/" readme = "README.md" @@ -26,22 +26,22 @@ itertools = "0.10.1" log = "0.4.11" miow = "0.3.6" net2 = "0.2.37" -solana-account-decoder = { path = "../../account-decoder", version = "=1.14.11" } -solana-bpf-loader-program = { path = "../bpf_loader", version = "=1.14.11" } -solana-bpf-rust-invoke = { path = "rust/invoke", version = "=1.14.11" } -solana-bpf-rust-realloc = { path = "rust/realloc", version = "=1.14.11" } -solana-bpf-rust-realloc-invoke = { path = "rust/realloc_invoke", version = "=1.14.11" } -solana-cli-output = { path = "../../cli-output", version = "=1.14.11" } -solana-logger = { path = "../../logger", version = "=1.14.11" } -solana-measure = { path = "../../measure", version = "=1.14.11" } -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.11" } -solana-runtime = { path = "../../runtime", version = "=1.14.11" } -solana-sdk = { path = "../../sdk", version = "=1.14.11" } -solana-transaction-status = { path = "../../transaction-status", version = "=1.14.11" } +solana-account-decoder = { path = "../../account-decoder", version = "=1.14.12" } +solana-bpf-loader-program = { path = "../bpf_loader", version = "=1.14.12" } +solana-bpf-rust-invoke = { path = "rust/invoke", version = "=1.14.12" } +solana-bpf-rust-realloc = { path = "rust/realloc", version = "=1.14.12" } +solana-bpf-rust-realloc-invoke = { path = "rust/realloc_invoke", version = "=1.14.12" } +solana-cli-output = { path = "../../cli-output", version = "=1.14.12" } +solana-logger = { path = "../../logger", version = "=1.14.12" } +solana-measure = { path = "../../measure", version = "=1.14.12" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.12" } +solana-runtime = { path = "../../runtime", version = "=1.14.12" } +solana-sdk = { path = "../../sdk", version = "=1.14.12" } +solana-transaction-status = { path = "../../transaction-status", version = "=1.14.12" } solana_rbpf = "=0.2.31" [dev-dependencies] -solana-ledger = { path = "../../ledger", version = "=1.14.11" } +solana-ledger = { path = "../../ledger", version = "=1.14.12" } [[bench]] name = "bpf_loader" diff --git a/programs/bpf/rust/128bit/Cargo.toml b/programs/bpf/rust/128bit/Cargo.toml index fd3f48ef0261cd..678c053ce0f28c 100644 --- a/programs/bpf/rust/128bit/Cargo.toml +++ b/programs/bpf/rust/128bit/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-128bit" -version = "1.14.11" +version = "1.14.12" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ documentation = "https://docs.rs/solana-bpf-rust-128bit" edition = "2021" [dependencies] -solana-bpf-rust-128bit-dep = { path = "../128bit_dep", version = "=1.14.11" } -solana-program = { path = "../../../../sdk/program", version = "=1.14.11" } +solana-bpf-rust-128bit-dep = { path = "../128bit_dep", version = "=1.14.12" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.12" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/128bit_dep/Cargo.toml b/programs/bpf/rust/128bit_dep/Cargo.toml index 7fcc935a4508a8..5a1bd776736b6e 100644 --- a/programs/bpf/rust/128bit_dep/Cargo.toml +++ b/programs/bpf/rust/128bit_dep/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-128bit-dep" -version = "1.14.11" +version = "1.14.12" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-128bit-dep" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.11" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.12" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/bpf/rust/alloc/Cargo.toml b/programs/bpf/rust/alloc/Cargo.toml index 7acfe60b404bd7..5d3c467f5917c4 100644 --- a/programs/bpf/rust/alloc/Cargo.toml +++ b/programs/bpf/rust/alloc/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-alloc" -version = "1.14.11" +version = "1.14.12" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-alloc" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.11" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.12" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/call_depth/Cargo.toml b/programs/bpf/rust/call_depth/Cargo.toml index a2e3161d1b44ae..4d8da936b8cb91 100644 --- a/programs/bpf/rust/call_depth/Cargo.toml +++ b/programs/bpf/rust/call_depth/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-call-depth" -version = "1.14.11" +version = "1.14.12" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-call-depth" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.11" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.12" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/caller_access/Cargo.toml b/programs/bpf/rust/caller_access/Cargo.toml index cef60efb303385..bc7a6f290cc668 100644 --- a/programs/bpf/rust/caller_access/Cargo.toml +++ b/programs/bpf/rust/caller_access/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-caller-access" -version = "1.14.11" +version = "1.14.12" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-caller-access" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.11" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.12" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/curve25519/Cargo.toml b/programs/bpf/rust/curve25519/Cargo.toml index 4e4a6fc5d9edaa..55a62c655d93ff 100644 --- a/programs/bpf/rust/curve25519/Cargo.toml +++ b/programs/bpf/rust/curve25519/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-curve25519" -version = "1.14.11" +version = "1.14.12" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ documentation = "https://docs.rs/solana-bpf-rust-zktoken_crypto" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.11" } -solana-zk-token-sdk = { path = "../../../../zk-token-sdk", version = "=1.14.11" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.12" } +solana-zk-token-sdk = { path = "../../../../zk-token-sdk", version = "=1.14.12" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/custom_heap/Cargo.toml b/programs/bpf/rust/custom_heap/Cargo.toml index e85e5e2c9827ce..37ab411ff1dea0 100644 --- a/programs/bpf/rust/custom_heap/Cargo.toml +++ b/programs/bpf/rust/custom_heap/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-custom-heap" -version = "1.14.11" +version = "1.14.12" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-custom-heap" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.11" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.12" } [features] default = ["custom-heap"] diff --git a/programs/bpf/rust/dep_crate/Cargo.toml b/programs/bpf/rust/dep_crate/Cargo.toml index 2a16d2af0bfa85..37c8a1ad7d8e76 100644 --- a/programs/bpf/rust/dep_crate/Cargo.toml +++ b/programs/bpf/rust/dep_crate/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-dep-crate" -version = "1.14.11" +version = "1.14.12" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,8 +12,8 @@ edition = "2021" [dependencies] byteorder = { version = "1", default-features = false } # list of crates which must be buildable for bpf programs -solana-address-lookup-table-program = { path = "../../../../programs/address-lookup-table", version = "=1.14.11" } -solana-program = { path = "../../../../sdk/program", version = "=1.14.11" } +solana-address-lookup-table-program = { path = "../../../../programs/address-lookup-table", version = "=1.14.12" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.12" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/deprecated_loader/Cargo.toml b/programs/bpf/rust/deprecated_loader/Cargo.toml index c08dd7d02c1aba..9f427a2cc5165c 100644 --- a/programs/bpf/rust/deprecated_loader/Cargo.toml +++ b/programs/bpf/rust/deprecated_loader/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-deprecated-loader" -version = "1.14.11" +version = "1.14.12" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-deprecated-loader" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.11" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.12" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/dup_accounts/Cargo.toml b/programs/bpf/rust/dup_accounts/Cargo.toml index 6e6ea193a6b14b..1f84a5e7ebc737 100644 --- a/programs/bpf/rust/dup_accounts/Cargo.toml +++ b/programs/bpf/rust/dup_accounts/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-dup-accounts" -version = "1.14.11" +version = "1.14.12" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-dup-accounts" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.11" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.12" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/error_handling/Cargo.toml b/programs/bpf/rust/error_handling/Cargo.toml index c841a333894082..f8d71ce852bddd 100644 --- a/programs/bpf/rust/error_handling/Cargo.toml +++ b/programs/bpf/rust/error_handling/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-error-handling" -version = "1.14.11" +version = "1.14.12" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,7 +12,7 @@ edition = "2021" [dependencies] num-derive = "0.3" num-traits = "0.2" -solana-program = { path = "../../../../sdk/program", version = "=1.14.11" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.12" } thiserror = "1.0" [lib] diff --git a/programs/bpf/rust/external_spend/Cargo.toml b/programs/bpf/rust/external_spend/Cargo.toml index d446a3e384c105..9220559b13237b 100644 --- a/programs/bpf/rust/external_spend/Cargo.toml +++ b/programs/bpf/rust/external_spend/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-external-spend" -version = "1.14.11" +version = "1.14.12" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-external-spend" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.11" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.12" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/finalize/Cargo.toml b/programs/bpf/rust/finalize/Cargo.toml index 27ad802f3b5320..10d22758f9cebc 100644 --- a/programs/bpf/rust/finalize/Cargo.toml +++ b/programs/bpf/rust/finalize/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-finalize" -version = "1.14.11" +version = "1.14.12" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-finalize" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.11" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.12" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/get_minimum_delegation/Cargo.toml b/programs/bpf/rust/get_minimum_delegation/Cargo.toml index 8db9cabc5d0913..a0cb2299ff1844 100644 --- a/programs/bpf/rust/get_minimum_delegation/Cargo.toml +++ b/programs/bpf/rust/get_minimum_delegation/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-get-minimum-delegation" -version = "1.14.11" +version = "1.14.12" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-get-minimum-delegation" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.11" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.12" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/inner_instruction_alignment_check/Cargo.toml b/programs/bpf/rust/inner_instruction_alignment_check/Cargo.toml index 574753deeb334e..c7acb81c140edf 100644 --- a/programs/bpf/rust/inner_instruction_alignment_check/Cargo.toml +++ b/programs/bpf/rust/inner_instruction_alignment_check/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-inner_instruction_alignment_check" -version = "1.14.11" +version = "1.14.12" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-inner_instruction_alignment_che edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.11" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.12" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/instruction_introspection/Cargo.toml b/programs/bpf/rust/instruction_introspection/Cargo.toml index 5537504c23ddb3..49bd458f1f8419 100644 --- a/programs/bpf/rust/instruction_introspection/Cargo.toml +++ b/programs/bpf/rust/instruction_introspection/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-instruction-introspection" -version = "1.14.11" +version = "1.14.12" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-instruction-introspection" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.11" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.12" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/invoke/Cargo.toml b/programs/bpf/rust/invoke/Cargo.toml index b7d30748894a51..51d1d0cc5b651f 100644 --- a/programs/bpf/rust/invoke/Cargo.toml +++ b/programs/bpf/rust/invoke/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-invoke" -version = "1.14.11" +version = "1.14.12" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -15,7 +15,7 @@ program = [] [dependencies] solana-bpf-rust-invoked = { path = "../invoked", default-features = false } -solana-program = { path = "../../../../sdk/program", version = "=1.14.11" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.12" } [lib] crate-type = ["lib", "cdylib"] diff --git a/programs/bpf/rust/invoke_and_error/Cargo.toml b/programs/bpf/rust/invoke_and_error/Cargo.toml index 7529dac50a8e69..3ebafa4c470840 100644 --- a/programs/bpf/rust/invoke_and_error/Cargo.toml +++ b/programs/bpf/rust/invoke_and_error/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-invoke-and-error" -version = "1.14.11" +version = "1.14.12" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-invoke-and-error" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.11" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.12" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/invoke_and_ok/Cargo.toml b/programs/bpf/rust/invoke_and_ok/Cargo.toml index 37b9090843264e..aa5b28c59c2817 100644 --- a/programs/bpf/rust/invoke_and_ok/Cargo.toml +++ b/programs/bpf/rust/invoke_and_ok/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-invoke-and-ok" -version = "1.14.11" +version = "1.14.12" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-invoke-and-ok" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.11" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.12" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/invoke_and_return/Cargo.toml b/programs/bpf/rust/invoke_and_return/Cargo.toml index 077f5c980c978d..dcab191111585f 100644 --- a/programs/bpf/rust/invoke_and_return/Cargo.toml +++ b/programs/bpf/rust/invoke_and_return/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-invoke-and-return" -version = "1.14.11" +version = "1.14.12" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-invoke-and-return" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.11" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.12" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/invoked/Cargo.toml b/programs/bpf/rust/invoked/Cargo.toml index dcb6b391eb8b85..9e4879d37ef9f2 100644 --- a/programs/bpf/rust/invoked/Cargo.toml +++ b/programs/bpf/rust/invoked/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-invoked" -version = "1.14.11" +version = "1.14.12" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,7 +14,7 @@ default = ["program"] program = [] [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.11" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.12" } [lib] crate-type = ["lib", "cdylib"] diff --git a/programs/bpf/rust/iter/Cargo.toml b/programs/bpf/rust/iter/Cargo.toml index 3ffd70d81b7edb..d03ac8207f01e3 100644 --- a/programs/bpf/rust/iter/Cargo.toml +++ b/programs/bpf/rust/iter/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-iter" -version = "1.14.11" +version = "1.14.12" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-iter" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.11" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.12" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/log_data/Cargo.toml b/programs/bpf/rust/log_data/Cargo.toml index b8ddedde49b867..b32ad86e2936e9 100644 --- a/programs/bpf/rust/log_data/Cargo.toml +++ b/programs/bpf/rust/log_data/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-log-data" -version = "1.14.11" +version = "1.14.12" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-log-data" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.11" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.12" } [features] default = ["program"] diff --git a/programs/bpf/rust/many_args/Cargo.toml b/programs/bpf/rust/many_args/Cargo.toml index 8d992057fb29e8..e42e4a3036cc0a 100644 --- a/programs/bpf/rust/many_args/Cargo.toml +++ b/programs/bpf/rust/many_args/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-many-args" -version = "1.14.11" +version = "1.14.12" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ documentation = "https://docs.rs/solana-bpf-rust-many-args" edition = "2021" [dependencies] -solana-bpf-rust-many-args-dep = { path = "../many_args_dep", version = "=1.14.11" } -solana-program = { path = "../../../../sdk/program", version = "=1.14.11" } +solana-bpf-rust-many-args-dep = { path = "../many_args_dep", version = "=1.14.12" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.12" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/many_args_dep/Cargo.toml b/programs/bpf/rust/many_args_dep/Cargo.toml index fbfb12101c58a9..ac82ad576d4195 100644 --- a/programs/bpf/rust/many_args_dep/Cargo.toml +++ b/programs/bpf/rust/many_args_dep/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-many-args-dep" -version = "1.14.11" +version = "1.14.12" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-many-args-dep" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.11" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.12" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/bpf/rust/mem/Cargo.toml b/programs/bpf/rust/mem/Cargo.toml index 3fadf007146fe0..50325552b89c33 100644 --- a/programs/bpf/rust/mem/Cargo.toml +++ b/programs/bpf/rust/mem/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-mem" -version = "1.14.11" +version = "1.14.12" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,12 +13,12 @@ edition = "2021" no-entrypoint = [] [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.11" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.12" } [dev-dependencies] -solana-program-runtime = { path = "../../../../program-runtime", version = "=1.14.11" } -solana-program-test = { path = "../../../../program-test", version = "=1.14.11" } -solana-sdk = { path = "../../../../sdk", version = "=1.14.11" } +solana-program-runtime = { path = "../../../../program-runtime", version = "=1.14.12" } +solana-program-test = { path = "../../../../program-test", version = "=1.14.12" } +solana-sdk = { path = "../../../../sdk", version = "=1.14.12" } [lib] crate-type = ["cdylib", "lib"] diff --git a/programs/bpf/rust/membuiltins/Cargo.toml b/programs/bpf/rust/membuiltins/Cargo.toml index e5fda1789364f0..da479459eba4c3 100644 --- a/programs/bpf/rust/membuiltins/Cargo.toml +++ b/programs/bpf/rust/membuiltins/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-membuiltins" -version = "1.14.11" +version = "1.14.12" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ documentation = "https://docs.rs/solana-bpf-rust-mem" edition = "2021" [dependencies] -solana-bpf-rust-mem = { path = "../mem", version = "=1.14.11", features = [ "no-entrypoint" ] } -solana-program = { path = "../../../../sdk/program", version = "=1.14.11" } +solana-bpf-rust-mem = { path = "../mem", version = "=1.14.12", features = [ "no-entrypoint" ] } +solana-program = { path = "../../../../sdk/program", version = "=1.14.12" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/noop/Cargo.toml b/programs/bpf/rust/noop/Cargo.toml index bbf5f8a4d9cbef..c2aaa64266d089 100644 --- a/programs/bpf/rust/noop/Cargo.toml +++ b/programs/bpf/rust/noop/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-noop" -version = "1.14.11" +version = "1.14.12" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-noop" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.11" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.12" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/panic/Cargo.toml b/programs/bpf/rust/panic/Cargo.toml index 93d5630a5c8f27..8db7840d84bdab 100644 --- a/programs/bpf/rust/panic/Cargo.toml +++ b/programs/bpf/rust/panic/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-panic" -version = "1.14.11" +version = "1.14.12" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-panic" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.11" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.12" } [features] default = ["custom-panic"] diff --git a/programs/bpf/rust/param_passing/Cargo.toml b/programs/bpf/rust/param_passing/Cargo.toml index 5f60fa9df46ea0..8cf87800f2e648 100644 --- a/programs/bpf/rust/param_passing/Cargo.toml +++ b/programs/bpf/rust/param_passing/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-param-passing" -version = "1.14.11" +version = "1.14.12" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ documentation = "https://docs.rs/solana-bpf-rust-param-passing" edition = "2021" [dependencies] -solana-bpf-rust-param-passing-dep = { path = "../param_passing_dep", version = "=1.14.11" } -solana-program = { path = "../../../../sdk/program", version = "=1.14.11" } +solana-bpf-rust-param-passing-dep = { path = "../param_passing_dep", version = "=1.14.12" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.12" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/param_passing_dep/Cargo.toml b/programs/bpf/rust/param_passing_dep/Cargo.toml index 02d956785e1f95..bd2afa03346395 100644 --- a/programs/bpf/rust/param_passing_dep/Cargo.toml +++ b/programs/bpf/rust/param_passing_dep/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-param-passing-dep" -version = "1.14.11" +version = "1.14.12" description = "Solana BPF program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-param-passing-dep" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.11" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.12" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/bpf/rust/rand/Cargo.toml b/programs/bpf/rust/rand/Cargo.toml index 6cdc2b47221840..51bab91590faf2 100644 --- a/programs/bpf/rust/rand/Cargo.toml +++ b/programs/bpf/rust/rand/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-rand" -version = "1.14.11" +version = "1.14.12" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,7 +12,7 @@ edition = "2021" [dependencies] getrandom = { version = "0.1.14", features = ["dummy"] } rand = "0.7" -solana-program = { path = "../../../../sdk/program", version = "=1.14.11" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.12" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/realloc/Cargo.toml b/programs/bpf/rust/realloc/Cargo.toml index 7879bab580b9db..2da7b82a22f4a7 100644 --- a/programs/bpf/rust/realloc/Cargo.toml +++ b/programs/bpf/rust/realloc/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-realloc" -version = "1.14.11" +version = "1.14.12" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,7 +14,7 @@ default = ["program"] program = [] [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.11" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.12" } [lib] crate-type = ["lib", "cdylib"] diff --git a/programs/bpf/rust/realloc_invoke/Cargo.toml b/programs/bpf/rust/realloc_invoke/Cargo.toml index f8b4e317492098..8d4dfe6b6120b7 100644 --- a/programs/bpf/rust/realloc_invoke/Cargo.toml +++ b/programs/bpf/rust/realloc_invoke/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-realloc-invoke" -version = "1.14.11" +version = "1.14.12" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,8 +14,8 @@ default = ["program"] program = [] [dependencies] -solana-bpf-rust-realloc = { path = "../realloc", version = "=1.14.11", default-features = false } -solana-program = { path = "../../../../sdk/program", version = "=1.14.11" } +solana-bpf-rust-realloc = { path = "../realloc", version = "=1.14.12", default-features = false } +solana-program = { path = "../../../../sdk/program", version = "=1.14.12" } [lib] crate-type = ["lib", "cdylib"] diff --git a/programs/bpf/rust/ro_account_modify/Cargo.toml b/programs/bpf/rust/ro_account_modify/Cargo.toml index 86c1958f4d4a5d..b59fdc0115a064 100644 --- a/programs/bpf/rust/ro_account_modify/Cargo.toml +++ b/programs/bpf/rust/ro_account_modify/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-ro-account_modify" -version = "1.14.11" +version = "1.14.12" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-ro-modify" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.11" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.12" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/ro_modify/Cargo.toml b/programs/bpf/rust/ro_modify/Cargo.toml index 3c1e2ec598fe6a..26dfc73268c6e9 100644 --- a/programs/bpf/rust/ro_modify/Cargo.toml +++ b/programs/bpf/rust/ro_modify/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-ro-modify" -version = "1.14.11" +version = "1.14.12" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-ro-modify" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.11" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.12" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/sanity/Cargo.toml b/programs/bpf/rust/sanity/Cargo.toml index e3b1c369c3461d..07fd557cb5ec2f 100644 --- a/programs/bpf/rust/sanity/Cargo.toml +++ b/programs/bpf/rust/sanity/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-sanity" -version = "1.14.11" +version = "1.14.12" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,12 +13,12 @@ edition = "2021" test-bpf = [] [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.11" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.12" } [dev-dependencies] -solana-program-runtime = { path = "../../../../program-runtime", version = "=1.14.11" } -solana-program-test = { path = "../../../../program-test", version = "=1.14.11" } -solana-sdk = { path = "../../../../sdk", version = "=1.14.11" } +solana-program-runtime = { path = "../../../../program-runtime", version = "=1.14.12" } +solana-program-test = { path = "../../../../program-test", version = "=1.14.12" } +solana-sdk = { path = "../../../../sdk", version = "=1.14.12" } [lib] crate-type = ["cdylib", "lib"] diff --git a/programs/bpf/rust/secp256k1_recover/Cargo.toml b/programs/bpf/rust/secp256k1_recover/Cargo.toml index 4019da2f30dfcd..603cce4f030d77 100644 --- a/programs/bpf/rust/secp256k1_recover/Cargo.toml +++ b/programs/bpf/rust/secp256k1_recover/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-secp256k1-recover" -version = "1.14.11" +version = "1.14.12" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -11,7 +11,7 @@ edition = "2021" [dependencies] libsecp256k1 = { version = "0.7.0", default-features = false } -solana-program = { path = "../../../../sdk/program", version = "=1.14.11" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.12" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/sha/Cargo.toml b/programs/bpf/rust/sha/Cargo.toml index 50069fb372e807..502950c342256c 100644 --- a/programs/bpf/rust/sha/Cargo.toml +++ b/programs/bpf/rust/sha/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-sha" -version = "1.14.11" +version = "1.14.12" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -11,7 +11,7 @@ edition = "2021" [dependencies] blake3 = "1.0.0" -solana-program = { path = "../../../../sdk/program", version = "=1.14.11" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.12" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/sibling_inner_instruction/Cargo.toml b/programs/bpf/rust/sibling_inner_instruction/Cargo.toml index a2b2471392d90d..48d77068289a02 100644 --- a/programs/bpf/rust/sibling_inner_instruction/Cargo.toml +++ b/programs/bpf/rust/sibling_inner_instruction/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-sibling_inner-instructions" -version = "1.14.11" +version = "1.14.12" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-log-data" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.11" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.12" } [features] default = ["program"] diff --git a/programs/bpf/rust/sibling_instruction/Cargo.toml b/programs/bpf/rust/sibling_instruction/Cargo.toml index f35a3fa09e517f..7f8ad24136e680 100644 --- a/programs/bpf/rust/sibling_instruction/Cargo.toml +++ b/programs/bpf/rust/sibling_instruction/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-sibling-instructions" -version = "1.14.11" +version = "1.14.12" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-log-data" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.11" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.12" } [features] default = ["program"] diff --git a/programs/bpf/rust/simulation/Cargo.toml b/programs/bpf/rust/simulation/Cargo.toml index 33834a34ae61ef..04470e23bd7d44 100644 --- a/programs/bpf/rust/simulation/Cargo.toml +++ b/programs/bpf/rust/simulation/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-simulation" -version = "1.14.11" +version = "1.14.12" description = "Solana BPF Program Simulation Differences" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,13 +13,13 @@ edition = "2021" test-bpf = [] [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.11" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.12" } [dev-dependencies] -solana-logger = { path = "../../../../logger", version = "=1.14.11" } -solana-program-test = { path = "../../../../program-test", version = "=1.14.11" } -solana-sdk = { path = "../../../../sdk", version = "=1.14.11" } -solana-validator = { path = "../../../../validator", version = "=1.14.11" } +solana-logger = { path = "../../../../logger", version = "=1.14.12" } +solana-program-test = { path = "../../../../program-test", version = "=1.14.12" } +solana-sdk = { path = "../../../../sdk", version = "=1.14.12" } +solana-validator = { path = "../../../../validator", version = "=1.14.12" } [lib] crate-type = ["cdylib", "lib"] diff --git a/programs/bpf/rust/spoof1/Cargo.toml b/programs/bpf/rust/spoof1/Cargo.toml index dec17c514d52b3..9335c584a32455 100644 --- a/programs/bpf/rust/spoof1/Cargo.toml +++ b/programs/bpf/rust/spoof1/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-spoof1" -version = "1.14.11" +version = "1.14.12" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-spoof1" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.11" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.12" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/spoof1_system/Cargo.toml b/programs/bpf/rust/spoof1_system/Cargo.toml index 473d65618ac696..bbea7d034baefa 100644 --- a/programs/bpf/rust/spoof1_system/Cargo.toml +++ b/programs/bpf/rust/spoof1_system/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-spoof1-system" -version = "1.14.11" +version = "1.14.12" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-spoof1-system" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.11" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.12" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/sysvar/Cargo.toml b/programs/bpf/rust/sysvar/Cargo.toml index 5f17ad80017f19..e28e2d43fa45a1 100644 --- a/programs/bpf/rust/sysvar/Cargo.toml +++ b/programs/bpf/rust/sysvar/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-sysvar" -version = "1.14.11" +version = "1.14.12" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,12 +10,12 @@ documentation = "https://docs.rs/solana-bpf-rust-sysvar" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.11" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.12" } [dev-dependencies] -solana-program-runtime = { path = "../../../../program-runtime", version = "=1.14.11" } -solana-program-test = { path = "../../../../program-test", version = "=1.14.11" } -solana-sdk = { path = "../../../../sdk", version = "=1.14.11" } +solana-program-runtime = { path = "../../../../program-runtime", version = "=1.14.12" } +solana-program-test = { path = "../../../../program-test", version = "=1.14.12" } +solana-sdk = { path = "../../../../sdk", version = "=1.14.12" } [lib] crate-type = ["cdylib", "lib"] diff --git a/programs/bpf/rust/upgradeable/Cargo.toml b/programs/bpf/rust/upgradeable/Cargo.toml index dd5ffd49b04069..f057705d7d728e 100644 --- a/programs/bpf/rust/upgradeable/Cargo.toml +++ b/programs/bpf/rust/upgradeable/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-upgradeable" -version = "1.14.11" +version = "1.14.12" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-upgradeable" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.11" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.12" } [lib] name = "solana_bpf_rust_upgradeable" diff --git a/programs/bpf/rust/upgraded/Cargo.toml b/programs/bpf/rust/upgraded/Cargo.toml index 9a9091a6222a02..64029c3a332712 100644 --- a/programs/bpf/rust/upgraded/Cargo.toml +++ b/programs/bpf/rust/upgraded/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-upgraded" -version = "1.14.11" +version = "1.14.12" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-upgraded" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.11" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.12" } [lib] name = "solana_bpf_rust_upgraded" diff --git a/programs/bpf_loader/Cargo.toml b/programs/bpf_loader/Cargo.toml index 83cbe0be0d0f60..6bc7d1bdde39a7 100644 --- a/programs/bpf_loader/Cargo.toml +++ b/programs/bpf_loader/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-loader-program" -version = "1.14.11" +version = "1.14.12" description = "Solana BPF loader" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,17 +14,17 @@ bincode = "1.3.3" byteorder = "1.4.3" libsecp256k1 = "0.6.0" log = "0.4.17" -solana-measure = { path = "../../measure", version = "=1.14.11" } -solana-metrics = { path = "../../metrics", version = "=1.14.11" } -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.11" } -solana-sdk = { path = "../../sdk", version = "=1.14.11" } -solana-zk-token-sdk = { path = "../../zk-token-sdk", version = "=1.14.11" } +solana-measure = { path = "../../measure", version = "=1.14.12" } +solana-metrics = { path = "../../metrics", version = "=1.14.12" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.12" } +solana-sdk = { path = "../../sdk", version = "=1.14.12" } +solana-zk-token-sdk = { path = "../../zk-token-sdk", version = "=1.14.12" } solana_rbpf = "=0.2.31" thiserror = "1.0" [dev-dependencies] rand = "0.7.3" -solana-runtime = { path = "../../runtime", version = "=1.14.11" } +solana-runtime = { path = "../../runtime", version = "=1.14.12" } [lib] crate-type = ["lib"] diff --git a/programs/bpf_loader/gen-syscall-list/Cargo.toml b/programs/bpf_loader/gen-syscall-list/Cargo.toml index 5553d8eb314ec1..ad4a420b053cb0 100644 --- a/programs/bpf_loader/gen-syscall-list/Cargo.toml +++ b/programs/bpf_loader/gen-syscall-list/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "gen-syscall-list" -version = "1.14.11" +version = "1.14.12" edition = "2021" license = "Apache-2.0" publish = false diff --git a/programs/compute-budget/Cargo.toml b/programs/compute-budget/Cargo.toml index 03c1bd01f6f51f..cf25d4662cd6b8 100644 --- a/programs/compute-budget/Cargo.toml +++ b/programs/compute-budget/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "solana-compute-budget-program" description = "Solana Compute Budget program" -version = "1.14.11" +version = "1.14.12" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-compute-budget-program" repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ license = "Apache-2.0" edition = "2021" [dependencies] -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.11" } -solana-sdk = { path = "../../sdk", version = "=1.14.11" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.12" } +solana-sdk = { path = "../../sdk", version = "=1.14.12" } [lib] crate-type = ["lib"] diff --git a/programs/config/Cargo.toml b/programs/config/Cargo.toml index e81b16ccca4af0..4028ac9c159cb1 100644 --- a/programs/config/Cargo.toml +++ b/programs/config/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-config-program" -version = "1.14.11" +version = "1.14.12" description = "Solana Config program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,11 +14,11 @@ bincode = "1.3.3" chrono = { version = "0.4.11", features = ["serde"] } serde = "1.0.138" serde_derive = "1.0.103" -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.11" } -solana-sdk = { path = "../../sdk", version = "=1.14.11" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.12" } +solana-sdk = { path = "../../sdk", version = "=1.14.12" } [dev-dependencies] -solana-logger = { path = "../../logger", version = "=1.14.11" } +solana-logger = { path = "../../logger", version = "=1.14.12" } [lib] crate-type = ["lib"] diff --git a/programs/ed25519-tests/Cargo.toml b/programs/ed25519-tests/Cargo.toml index 2c78119bece562..97395113cd3f21 100644 --- a/programs/ed25519-tests/Cargo.toml +++ b/programs/ed25519-tests/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-ed25519-program-tests" -version = "1.14.11" +version = "1.14.12" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" @@ -12,8 +12,8 @@ publish = false assert_matches = "1.5.0" ed25519-dalek = "=1.0.1" rand = "0.7.0" -solana-program-test = { path = "../../program-test", version = "=1.14.11" } -solana-sdk = { path = "../../sdk", version = "=1.14.11" } +solana-program-test = { path = "../../program-test", version = "=1.14.12" } +solana-sdk = { path = "../../sdk", version = "=1.14.12" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/stake/Cargo.toml b/programs/stake/Cargo.toml index 28fbbfc5de02f3..7a0d54cfa2734a 100644 --- a/programs/stake/Cargo.toml +++ b/programs/stake/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-stake-program" -version = "1.14.11" +version = "1.14.12" description = "Solana Stake program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -16,19 +16,19 @@ num-derive = "0.3" num-traits = "0.2" serde = "1.0.138" serde_derive = "1.0.103" -solana-config-program = { path = "../config", version = "=1.14.11" } -solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.11" } -solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.11" } -solana-metrics = { path = "../../metrics", version = "=1.14.11" } -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.11" } -solana-sdk = { path = "../../sdk", version = "=1.14.11" } -solana-vote-program = { path = "../vote", version = "=1.14.11" } +solana-config-program = { path = "../config", version = "=1.14.12" } +solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.12" } +solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.12" } +solana-metrics = { path = "../../metrics", version = "=1.14.12" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.12" } +solana-sdk = { path = "../../sdk", version = "=1.14.12" } +solana-vote-program = { path = "../vote", version = "=1.14.12" } thiserror = "1.0" [dev-dependencies] assert_matches = "1.5.0" proptest = "1.0" -solana-logger = { path = "../../logger", version = "=1.14.11" } +solana-logger = { path = "../../logger", version = "=1.14.12" } test-case = "2.1.0" [build-dependencies] diff --git a/programs/vote/Cargo.toml b/programs/vote/Cargo.toml index 36ad9615249bca..56dc6742e5e808 100644 --- a/programs/vote/Cargo.toml +++ b/programs/vote/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-vote-program" -version = "1.14.11" +version = "1.14.12" description = "Solana Vote program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -16,17 +16,17 @@ num-derive = "0.3" num-traits = "0.2" serde = "1.0.138" serde_derive = "1.0.103" -solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.11" } -solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.11" } -solana-metrics = { path = "../../metrics", version = "=1.14.11" } -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.11" } -solana-sdk = { path = "../../sdk", version = "=1.14.11" } +solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.12" } +solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.12" } +solana-metrics = { path = "../../metrics", version = "=1.14.12" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.12" } +solana-sdk = { path = "../../sdk", version = "=1.14.12" } thiserror = "1.0" [dev-dependencies] itertools = "0.10.3" rand = "0.7.0" -solana-logger = { path = "../../logger", version = "=1.14.11" } +solana-logger = { path = "../../logger", version = "=1.14.12" } [build-dependencies] rustc_version = "0.4" diff --git a/programs/zk-token-proof/Cargo.toml b/programs/zk-token-proof/Cargo.toml index fe64ecc2986c1f..86d95def2bebb6 100644 --- a/programs/zk-token-proof/Cargo.toml +++ b/programs/zk-token-proof/Cargo.toml @@ -3,7 +3,7 @@ name = "solana-zk-token-proof-program" description = "Solana Zk Token Proof Program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" -version = "1.14.11" +version = "1.14.12" license = "Apache-2.0" edition = "2021" @@ -12,6 +12,6 @@ bytemuck = { version = "1.11.0", features = ["derive"] } getrandom = { version = "0.1", features = ["dummy"] } num-derive = "0.3" num-traits = "0.2" -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.11" } -solana-sdk = { path = "../../sdk", version = "=1.14.11" } -solana-zk-token-sdk = { path = "../../zk-token-sdk", version = "=1.14.11" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.12" } +solana-sdk = { path = "../../sdk", version = "=1.14.12" } +solana-zk-token-sdk = { path = "../../zk-token-sdk", version = "=1.14.12" } diff --git a/rayon-threadlimit/Cargo.toml b/rayon-threadlimit/Cargo.toml index c9a1874c46fa1b..cb7517f1eb64c5 100644 --- a/rayon-threadlimit/Cargo.toml +++ b/rayon-threadlimit/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-rayon-threadlimit" -version = "1.14.11" +version = "1.14.12" description = "solana-rayon-threadlimit" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-rayon-threadlimit" diff --git a/rbpf-cli/Cargo.toml b/rbpf-cli/Cargo.toml index c9afcdfe4ac68b..1bdde544fa2439 100644 --- a/rbpf-cli/Cargo.toml +++ b/rbpf-cli/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "rbpf-cli" -version = "1.14.11" +version = "1.14.12" description = "CLI to test and analyze eBPF programs" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/rbpf" @@ -13,8 +13,8 @@ publish = false clap = { version = "3.1.5", features = ["cargo"] } serde = "1.0.138" serde_json = "1.0.81" -solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.11" } -solana-logger = { path = "../logger", version = "=1.14.11" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.11" } -solana-sdk = { path = "../sdk", version = "=1.14.11" } +solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.12" } +solana-logger = { path = "../logger", version = "=1.14.12" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.12" } +solana-sdk = { path = "../sdk", version = "=1.14.12" } solana_rbpf = "=0.2.31" diff --git a/remote-wallet/Cargo.toml b/remote-wallet/Cargo.toml index dacc79649c4faf..365a05d2da2597 100644 --- a/remote-wallet/Cargo.toml +++ b/remote-wallet/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-remote-wallet" description = "Blockchain, Rebuilt for Scale" -version = "1.14.11" +version = "1.14.12" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -19,7 +19,7 @@ num-traits = { version = "0.2" } parking_lot = "0.12" qstring = "0.7.2" semver = "1.0" -solana-sdk = { path = "../sdk", version = "=1.14.11" } +solana-sdk = { path = "../sdk", version = "=1.14.12" } thiserror = "1.0" uriparse = "0.6.4" diff --git a/rpc-test/Cargo.toml b/rpc-test/Cargo.toml index 7d1ceb4bf4b1f5..fda12f0bd91c61 100644 --- a/rpc-test/Cargo.toml +++ b/rpc-test/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-rpc-test" -version = "1.14.11" +version = "1.14.12" description = "Solana RPC Test" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -19,17 +19,17 @@ log = "0.4.17" reqwest = { version = "0.11.11", default-features = false, features = ["blocking", "brotli", "deflate", "gzip", "rustls-tls", "json"] } serde = "1.0.138" serde_json = "1.0.81" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.11" } -solana-client = { path = "../client", version = "=1.14.11" } -solana-rpc = { path = "../rpc", version = "=1.14.11" } -solana-sdk = { path = "../sdk", version = "=1.14.11" } -solana-streamer = { path = "../streamer", version = "=1.14.11" } -solana-test-validator = { path = "../test-validator", version = "=1.14.11" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.11" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.12" } +solana-client = { path = "../client", version = "=1.14.12" } +solana-rpc = { path = "../rpc", version = "=1.14.12" } +solana-sdk = { path = "../sdk", version = "=1.14.12" } +solana-streamer = { path = "../streamer", version = "=1.14.12" } +solana-test-validator = { path = "../test-validator", version = "=1.14.12" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.12" } tokio = { version = "~1.14.1", features = ["full"] } [dev-dependencies] -solana-logger = { path = "../logger", version = "=1.14.11" } +solana-logger = { path = "../logger", version = "=1.14.12" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/rpc/Cargo.toml b/rpc/Cargo.toml index ec3dc5cabf7b8c..76c46351ec043c 100644 --- a/rpc/Cargo.toml +++ b/rpc/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-rpc" -version = "1.14.11" +version = "1.14.12" description = "Solana RPC" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -29,26 +29,26 @@ serde = "1.0.138" serde_derive = "1.0.103" serde_json = "1.0.81" soketto = "0.7" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.11" } -solana-client = { path = "../client", version = "=1.14.11" } -solana-entry = { path = "../entry", version = "=1.14.11" } -solana-faucet = { path = "../faucet", version = "=1.14.11" } -solana-gossip = { path = "../gossip", version = "=1.14.11" } -solana-ledger = { path = "../ledger", version = "=1.14.11" } -solana-measure = { path = "../measure", version = "=1.14.11" } -solana-metrics = { path = "../metrics", version = "=1.14.11" } -solana-perf = { path = "../perf", version = "=1.14.11" } -solana-poh = { path = "../poh", version = "=1.14.11" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.11" } -solana-runtime = { path = "../runtime", version = "=1.14.11" } -solana-sdk = { path = "../sdk", version = "=1.14.11" } -solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.11" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.11" } -solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.11" } -solana-streamer = { path = "../streamer", version = "=1.14.11" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.11" } -solana-version = { path = "../version", version = "=1.14.11" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.11" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.12" } +solana-client = { path = "../client", version = "=1.14.12" } +solana-entry = { path = "../entry", version = "=1.14.12" } +solana-faucet = { path = "../faucet", version = "=1.14.12" } +solana-gossip = { path = "../gossip", version = "=1.14.12" } +solana-ledger = { path = "../ledger", version = "=1.14.12" } +solana-measure = { path = "../measure", version = "=1.14.12" } +solana-metrics = { path = "../metrics", version = "=1.14.12" } +solana-perf = { path = "../perf", version = "=1.14.12" } +solana-poh = { path = "../poh", version = "=1.14.12" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.12" } +solana-runtime = { path = "../runtime", version = "=1.14.12" } +solana-sdk = { path = "../sdk", version = "=1.14.12" } +solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.12" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.12" } +solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.12" } +solana-streamer = { path = "../streamer", version = "=1.14.12" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.12" } +solana-version = { path = "../version", version = "=1.14.12" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.12" } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } spl-token-2022 = { version = "=0.5.0", features = ["no-entrypoint"] } stream-cancel = "0.8.1" @@ -58,9 +58,9 @@ tokio-util = { version = "0.6", features = ["codec", "compat"] } [dev-dependencies] serial_test = "0.8.0" -solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.11" } -solana-net-utils = { path = "../net-utils", version = "=1.14.11" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.11" } +solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.12" } +solana-net-utils = { path = "../net-utils", version = "=1.14.12" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.12" } symlink = "0.1.0" [lib] diff --git a/runtime/Cargo.toml b/runtime/Cargo.toml index 2260b9004b0a73..318fa6d7733f39 100644 --- a/runtime/Cargo.toml +++ b/runtime/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-runtime" -version = "1.14.11" +version = "1.14.12" description = "Solana runtime" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -39,21 +39,21 @@ rayon = "1.5.3" regex = "1.5.6" serde = { version = "1.0.138", features = ["rc"] } serde_derive = "1.0.103" -solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.11" } -solana-bucket-map = { path = "../bucket_map", version = "=1.14.11" } -solana-compute-budget-program = { path = "../programs/compute-budget", version = "=1.14.11" } -solana-config-program = { path = "../programs/config", version = "=1.14.11" } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.11" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.11" } -solana-measure = { path = "../measure", version = "=1.14.11" } -solana-metrics = { path = "../metrics", version = "=1.14.11" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.11" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.11" } -solana-sdk = { path = "../sdk", version = "=1.14.11" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.11" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.11" } -solana-zk-token-proof-program = { path = "../programs/zk-token-proof", version = "=1.14.11" } -solana-zk-token-sdk = { path = "../zk-token-sdk", version = "=1.14.11" } +solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.12" } +solana-bucket-map = { path = "../bucket_map", version = "=1.14.12" } +solana-compute-budget-program = { path = "../programs/compute-budget", version = "=1.14.12" } +solana-config-program = { path = "../programs/config", version = "=1.14.12" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.12" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.12" } +solana-measure = { path = "../measure", version = "=1.14.12" } +solana-metrics = { path = "../metrics", version = "=1.14.12" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.12" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.12" } +solana-sdk = { path = "../sdk", version = "=1.14.12" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.12" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.12" } +solana-zk-token-proof-program = { path = "../programs/zk-token-proof", version = "=1.14.12" } +solana-zk-token-sdk = { path = "../zk-token-sdk", version = "=1.14.12" } strum = { version = "0.24", features = ["derive"] } strum_macros = "0.24" symlink = "0.1.0" @@ -71,7 +71,7 @@ assert_matches = "1.5.0" ed25519-dalek = "=1.0.1" libsecp256k1 = "0.6.0" rand_chacha = "0.2.2" -solana-logger = { path = "../logger", version = "=1.14.11" } +solana-logger = { path = "../logger", version = "=1.14.12" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/runtime/store-tool/Cargo.toml b/runtime/store-tool/Cargo.toml index af8dec54d593a1..21153fa54b9e39 100644 --- a/runtime/store-tool/Cargo.toml +++ b/runtime/store-tool/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-store-tool" description = "Tool to inspect append vecs" -version = "1.14.11" +version = "1.14.12" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -12,9 +12,9 @@ publish = false [dependencies] clap = "2.33.1" log = { version = "0.4.17" } -solana-logger = { path = "../../logger", version = "=1.14.11" } -solana-runtime = { path = "..", version = "=1.14.11" } -solana-version = { path = "../../version", version = "=1.14.11" } +solana-logger = { path = "../../logger", version = "=1.14.12" } +solana-runtime = { path = "..", version = "=1.14.12" } +solana-version = { path = "../../version", version = "=1.14.12" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/sdk/Cargo.toml b/sdk/Cargo.toml index c7b68681f00703..3a317095d6aff7 100644 --- a/sdk/Cargo.toml +++ b/sdk/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-sdk" -version = "1.14.11" +version = "1.14.12" description = "Solana SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -71,11 +71,11 @@ serde_derive = "1.0.103" serde_json = { version = "1.0.81", optional = true } sha2 = "0.10.2" sha3 = { version = "0.10.1", optional = true } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.11" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.11" } -solana-logger = { path = "../logger", version = "=1.14.11", optional = true } -solana-program = { path = "program", version = "=1.14.11" } -solana-sdk-macro = { path = "macro", version = "=1.14.11" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.12" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.12" } +solana-logger = { path = "../logger", version = "=1.14.12", optional = true } +solana-program = { path = "program", version = "=1.14.12" } +solana-sdk-macro = { path = "macro", version = "=1.14.12" } thiserror = "1.0" uriparse = "0.6.4" wasm-bindgen = "0.2" diff --git a/sdk/cargo-build-bpf/Cargo.toml b/sdk/cargo-build-bpf/Cargo.toml index ed38a5acaf9d3f..3449eec9918276 100644 --- a/sdk/cargo-build-bpf/Cargo.toml +++ b/sdk/cargo-build-bpf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-cargo-build-bpf" -version = "1.14.11" +version = "1.14.12" description = "Compile a local package and all of its dependencies using the Solana SBF SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,7 +12,7 @@ publish = false [dependencies] cargo_metadata = "0.15.0" clap = { version = "3.1.5", features = ["cargo", "env"] } -solana-sdk = { path = "..", version = "=1.14.11" } +solana-sdk = { path = "..", version = "=1.14.12" } [features] program = [] diff --git a/sdk/cargo-build-sbf/Cargo.toml b/sdk/cargo-build-sbf/Cargo.toml index 4bf28b388fa488..8ee0b782f462f0 100644 --- a/sdk/cargo-build-sbf/Cargo.toml +++ b/sdk/cargo-build-sbf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-cargo-build-sbf" -version = "1.14.11" +version = "1.14.12" description = "Compile a local package and all of its dependencies using the Solana SBF SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -15,9 +15,9 @@ cargo_metadata = "0.15.0" clap = { version = "3.1.5", features = ["cargo", "env"] } log = { version = "0.4.14", features = ["std"] } regex = "1.5.6" -solana-download-utils = { path = "../../download-utils", version = "=1.14.11" } -solana-logger = { path = "../../logger", version = "=1.14.11" } -solana-sdk = { path = "..", version = "=1.14.11" } +solana-download-utils = { path = "../../download-utils", version = "=1.14.12" } +solana-logger = { path = "../../logger", version = "=1.14.12" } +solana-sdk = { path = "..", version = "=1.14.12" } tar = "0.4.38" [dev-dependencies] diff --git a/sdk/cargo-build-sbf/tests/crates/fail/Cargo.toml b/sdk/cargo-build-sbf/tests/crates/fail/Cargo.toml index a8afc03ab04db3..4666af56268f5e 100644 --- a/sdk/cargo-build-sbf/tests/crates/fail/Cargo.toml +++ b/sdk/cargo-build-sbf/tests/crates/fail/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "fail" -version = "1.14.11" +version = "1.14.12" description = "Solana SBF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ edition = "2021" publish = false [dependencies] -solana-program = { path = "../../../../program", version = "=1.14.11" } +solana-program = { path = "../../../../program", version = "=1.14.12" } [lib] crate-type = ["cdylib"] diff --git a/sdk/cargo-build-sbf/tests/crates/noop/Cargo.toml b/sdk/cargo-build-sbf/tests/crates/noop/Cargo.toml index 51d19b755d5a0a..610d57f66b8bf4 100644 --- a/sdk/cargo-build-sbf/tests/crates/noop/Cargo.toml +++ b/sdk/cargo-build-sbf/tests/crates/noop/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "noop" -version = "1.14.11" +version = "1.14.12" description = "Solana SBF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ edition = "2021" publish = false [dependencies] -solana-program = { path = "../../../../program", version = "=1.14.11" } +solana-program = { path = "../../../../program", version = "=1.14.12" } [lib] crate-type = ["cdylib"] diff --git a/sdk/cargo-test-bpf/Cargo.toml b/sdk/cargo-test-bpf/Cargo.toml index 03638e3ca7bee0..aa2131d9cdbbfc 100644 --- a/sdk/cargo-test-bpf/Cargo.toml +++ b/sdk/cargo-test-bpf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-cargo-test-bpf" -version = "1.14.11" +version = "1.14.12" description = "Execute all unit and integration tests after building with the Solana SBF SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/sdk/cargo-test-sbf/Cargo.toml b/sdk/cargo-test-sbf/Cargo.toml index 197a2e04b7e3cc..3d1565a261fa39 100644 --- a/sdk/cargo-test-sbf/Cargo.toml +++ b/sdk/cargo-test-sbf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-cargo-test-sbf" -version = "1.14.11" +version = "1.14.12" description = "Execute all unit and integration tests after building with the Solana SBF SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/sdk/gen-headers/Cargo.toml b/sdk/gen-headers/Cargo.toml index 523f2a53395230..ba8b1237a901f7 100644 --- a/sdk/gen-headers/Cargo.toml +++ b/sdk/gen-headers/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "gen-headers" -version = "1.14.11" +version = "1.14.12" edition = "2021" license = "Apache-2.0" publish = false diff --git a/sdk/macro/Cargo.toml b/sdk/macro/Cargo.toml index 3300fe8f529214..e912471722ff03 100644 --- a/sdk/macro/Cargo.toml +++ b/sdk/macro/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-sdk-macro" -version = "1.14.11" +version = "1.14.12" description = "Solana SDK Macro" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/sdk/program/Cargo.toml b/sdk/program/Cargo.toml index 639f5034955179..ff5d3c4ba48551 100644 --- a/sdk/program/Cargo.toml +++ b/sdk/program/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-program" -version = "1.14.11" +version = "1.14.12" description = "Solana Program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -31,9 +31,9 @@ serde_derive = "1.0" serde_json = "1.0" sha2 = "0.10.0" sha3 = "0.10.0" -solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.11" } -solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.11" } -solana-sdk-macro = { path = "../macro", version = "=1.14.11" } +solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.12" } +solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.12" } +solana-sdk-macro = { path = "../macro", version = "=1.14.12" } thiserror = "1.0" [target.'cfg(not(target_os = "solana"))'.dependencies] @@ -50,7 +50,7 @@ wasm-bindgen = "0.2" zeroize = { version = "1.3", default-features = true, features = ["zeroize_derive"] } [target.'cfg(not(target_os = "solana"))'.dev-dependencies] -solana-logger = { path = "../../logger", version = "=1.14.11" } +solana-logger = { path = "../../logger", version = "=1.14.12" } [target.'cfg(target_arch = "wasm32")'.dependencies] console_error_panic_hook = "0.1.7" diff --git a/send-transaction-service/Cargo.toml b/send-transaction-service/Cargo.toml index d707b5d10df963..216007825492c9 100644 --- a/send-transaction-service/Cargo.toml +++ b/send-transaction-service/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-send-transaction-service" -version = "1.14.11" +version = "1.14.12" description = "Solana send transaction service" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,14 +12,14 @@ edition = "2021" [dependencies] crossbeam-channel = "0.5" log = "0.4.17" -solana-client = { path = "../client", version = "=1.14.11" } -solana-measure = { path = "../measure", version = "=1.14.11" } -solana-metrics = { path = "../metrics", version = "=1.14.11" } -solana-runtime = { path = "../runtime", version = "=1.14.11" } -solana-sdk = { path = "../sdk", version = "=1.14.11" } +solana-client = { path = "../client", version = "=1.14.12" } +solana-measure = { path = "../measure", version = "=1.14.12" } +solana-metrics = { path = "../metrics", version = "=1.14.12" } +solana-runtime = { path = "../runtime", version = "=1.14.12" } +solana-sdk = { path = "../sdk", version = "=1.14.12" } [dev-dependencies] -solana-logger = { path = "../logger", version = "=1.14.11" } +solana-logger = { path = "../logger", version = "=1.14.12" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/stake-accounts/Cargo.toml b/stake-accounts/Cargo.toml index 7c70ea4448bc9e..6931c2d54f8429 100644 --- a/stake-accounts/Cargo.toml +++ b/stake-accounts/Cargo.toml @@ -3,7 +3,7 @@ name = "solana-stake-accounts" description = "Blockchain, Rebuilt for Scale" authors = ["Solana Maintainers "] edition = "2021" -version = "1.14.11" +version = "1.14.12" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -11,15 +11,15 @@ documentation = "https://docs.rs/solana-stake-accounts" [dependencies] clap = "2.33.1" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.11" } -solana-cli-config = { path = "../cli-config", version = "=1.14.11" } -solana-client = { path = "../client", version = "=1.14.11" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.11" } -solana-sdk = { path = "../sdk", version = "=1.14.11" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.11" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.12" } +solana-cli-config = { path = "../cli-config", version = "=1.14.12" } +solana-client = { path = "../client", version = "=1.14.12" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.12" } +solana-sdk = { path = "../sdk", version = "=1.14.12" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.12" } [dev-dependencies] -solana-runtime = { path = "../runtime", version = "=1.14.11" } +solana-runtime = { path = "../runtime", version = "=1.14.12" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/storage-bigtable/Cargo.toml b/storage-bigtable/Cargo.toml index cd758359f9661d..11c7cbb296665f 100644 --- a/storage-bigtable/Cargo.toml +++ b/storage-bigtable/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-storage-bigtable" -version = "1.14.11" +version = "1.14.12" description = "Solana Storage BigTable" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -27,10 +27,10 @@ prost-types = "0.11.0" serde = "1.0.138" serde_derive = "1.0.103" smpl_jwt = "0.7.1" -solana-metrics = { path = "../metrics", version = "=1.14.11" } -solana-sdk = { path = "../sdk", version = "=1.14.11" } -solana-storage-proto = { path = "../storage-proto", version = "=1.14.11" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.11" } +solana-metrics = { path = "../metrics", version = "=1.14.12" } +solana-sdk = { path = "../sdk", version = "=1.14.12" } +solana-storage-proto = { path = "../storage-proto", version = "=1.14.12" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.12" } thiserror = "1.0" tokio = "1" tonic = { version = "0.8.0", features = ["tls", "transport"] } diff --git a/storage-bigtable/build-proto/Cargo.lock b/storage-bigtable/build-proto/Cargo.lock index 12706071112e77..ebfc26270b8c1c 100644 --- a/storage-bigtable/build-proto/Cargo.lock +++ b/storage-bigtable/build-proto/Cargo.lock @@ -219,7 +219,7 @@ dependencies = [ [[package]] name = "proto" -version = "1.14.11" +version = "1.14.12" dependencies = [ "protobuf-src", "tonic-build", diff --git a/storage-bigtable/build-proto/Cargo.toml b/storage-bigtable/build-proto/Cargo.toml index 79870e27dd7a69..e61719af6206cd 100644 --- a/storage-bigtable/build-proto/Cargo.toml +++ b/storage-bigtable/build-proto/Cargo.toml @@ -7,7 +7,7 @@ license = "Apache-2.0" name = "proto" publish = false repository = "https://github.com/solana-labs/solana" -version = "1.14.11" +version = "1.14.12" [workspace] diff --git a/storage-proto/Cargo.toml b/storage-proto/Cargo.toml index d037da530920b7..764a89d7a2bf70 100644 --- a/storage-proto/Cargo.toml +++ b/storage-proto/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-storage-proto" -version = "1.14.11" +version = "1.14.12" description = "Solana Storage Protobuf Definitions" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,9 +14,9 @@ bincode = "1.3.3" bs58 = "0.4.0" prost = "0.11.0" serde = "1.0.138" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.11" } -solana-sdk = { path = "../sdk", version = "=1.14.11" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.11" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.12" } +solana-sdk = { path = "../sdk", version = "=1.14.12" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.12" } [dev-dependencies] enum-iterator = "0.8.1" diff --git a/streamer/Cargo.toml b/streamer/Cargo.toml index 754e3b3e1e5faf..07ca7c20de987c 100644 --- a/streamer/Cargo.toml +++ b/streamer/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-streamer" -version = "1.14.11" +version = "1.14.12" description = "Solana Streamer" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -25,15 +25,15 @@ quinn = "0.8.3" rand = "0.7.0" rcgen = "0.9.2" rustls = { version = "0.20.6", features = ["dangerous_configuration"] } -solana-metrics = { path = "../metrics", version = "=1.14.11" } -solana-perf = { path = "../perf", version = "=1.14.11" } -solana-sdk = { path = "../sdk", version = "=1.14.11" } +solana-metrics = { path = "../metrics", version = "=1.14.12" } +solana-perf = { path = "../perf", version = "=1.14.12" } +solana-sdk = { path = "../sdk", version = "=1.14.12" } thiserror = "1.0" tokio = { version = "1", features = ["full"] } x509-parser = "0.14.0" [dev-dependencies] -solana-logger = { path = "../logger", version = "=1.14.11" } +solana-logger = { path = "../logger", version = "=1.14.12" } [lib] crate-type = ["lib"] diff --git a/sys-tuner/Cargo.toml b/sys-tuner/Cargo.toml index 5cc927e48860f4..83ea4c3b98321c 100644 --- a/sys-tuner/Cargo.toml +++ b/sys-tuner/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-sys-tuner" description = "The solana cluster system tuner daemon" -version = "1.14.11" +version = "1.14.12" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,8 +14,8 @@ publish = true clap = "2.33.1" libc = "0.2.126" log = "0.4.17" -solana-logger = { path = "../logger", version = "=1.14.11" } -solana-version = { path = "../version", version = "=1.14.11" } +solana-logger = { path = "../logger", version = "=1.14.12" } +solana-version = { path = "../version", version = "=1.14.12" } [target."cfg(unix)".dependencies] unix_socket2 = "0.5.4" diff --git a/test-validator/Cargo.toml b/test-validator/Cargo.toml index 78546c41997aef..f2df6ec18bfd03 100644 --- a/test-validator/Cargo.toml +++ b/test-validator/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "solana-test-validator" description = "Blockchain, Rebuilt for Scale" -version = "1.14.11" +version = "1.14.12" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-test-validator" readme = "../README.md" @@ -15,19 +15,19 @@ base64 = "0.13.0" log = "0.4.17" serde_derive = "1.0.103" serde_json = "1.0.81" -solana-cli-output = { path = "../cli-output", version = "=1.14.11" } -solana-client = { path = "../client", version = "=1.14.11" } -solana-core = { path = "../core", version = "=1.14.11" } -solana-gossip = { path = "../gossip", version = "=1.14.11" } -solana-ledger = { path = "../ledger", version = "=1.14.11" } -solana-logger = { path = "../logger", version = "=1.14.11" } -solana-net-utils = { path = "../net-utils", version = "=1.14.11" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.11" } -solana-program-test = { path = "../program-test", version = "=1.14.11" } -solana-rpc = { path = "../rpc", version = "=1.14.11" } -solana-runtime = { path = "../runtime", version = "=1.14.11" } -solana-sdk = { path = "../sdk", version = "=1.14.11" } -solana-streamer = { path = "../streamer", version = "=1.14.11" } +solana-cli-output = { path = "../cli-output", version = "=1.14.12" } +solana-client = { path = "../client", version = "=1.14.12" } +solana-core = { path = "../core", version = "=1.14.12" } +solana-gossip = { path = "../gossip", version = "=1.14.12" } +solana-ledger = { path = "../ledger", version = "=1.14.12" } +solana-logger = { path = "../logger", version = "=1.14.12" } +solana-net-utils = { path = "../net-utils", version = "=1.14.12" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.12" } +solana-program-test = { path = "../program-test", version = "=1.14.12" } +solana-rpc = { path = "../rpc", version = "=1.14.12" } +solana-runtime = { path = "../runtime", version = "=1.14.12" } +solana-sdk = { path = "../sdk", version = "=1.14.12" } +solana-streamer = { path = "../streamer", version = "=1.14.12" } tokio = { version = "1", features = ["full"] } [package.metadata.docs.rs] diff --git a/tokens/Cargo.toml b/tokens/Cargo.toml index 8e51dd42130f4a..e64f4315d13cfe 100644 --- a/tokens/Cargo.toml +++ b/tokens/Cargo.toml @@ -3,7 +3,7 @@ name = "solana-tokens" description = "Blockchain, Rebuilt for Scale" authors = ["Solana Maintainers "] edition = "2021" -version = "1.14.11" +version = "1.14.12" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -19,14 +19,14 @@ indexmap = "1.9.1" indicatif = "0.16.2" pickledb = "0.4.1" serde = { version = "1.0", features = ["derive"] } -solana-account-decoder = { path = "../account-decoder", version = "=1.14.11" } -solana-clap-utils = { path = "../clap-utils", version = "=1.14.11" } -solana-cli-config = { path = "../cli-config", version = "=1.14.11" } -solana-client = { path = "../client", version = "=1.14.11" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.11" } -solana-sdk = { path = "../sdk", version = "=1.14.11" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.11" } -solana-version = { path = "../version", version = "=1.14.11" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.12" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.12" } +solana-cli-config = { path = "../cli-config", version = "=1.14.12" } +solana-client = { path = "../client", version = "=1.14.12" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.12" } +solana-sdk = { path = "../sdk", version = "=1.14.12" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.12" } +solana-version = { path = "../version", version = "=1.14.12" } spl-associated-token-account = { version = "=1.1.2" } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } tempfile = "3.3.0" @@ -34,6 +34,6 @@ thiserror = "1.0" [dev-dependencies] bincode = "1.3.3" -solana-logger = { path = "../logger", version = "=1.14.11" } -solana-streamer = { path = "../streamer", version = "=1.14.11" } -solana-test-validator = { path = "../test-validator", version = "=1.14.11" } +solana-logger = { path = "../logger", version = "=1.14.12" } +solana-streamer = { path = "../streamer", version = "=1.14.12" } +solana-test-validator = { path = "../test-validator", version = "=1.14.12" } diff --git a/transaction-dos/Cargo.toml b/transaction-dos/Cargo.toml index 43866feafe7a9a..9b1b900118e45a 100644 --- a/transaction-dos/Cargo.toml +++ b/transaction-dos/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-transaction-dos" -version = "1.14.11" +version = "1.14.12" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,23 +14,23 @@ clap = "2.33.1" log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.11" } -solana-cli = { path = "../cli", version = "=1.14.11" } -solana-client = { path = "../client", version = "=1.14.11" } -solana-core = { path = "../core", version = "=1.14.11" } -solana-faucet = { path = "../faucet", version = "=1.14.11" } -solana-gossip = { path = "../gossip", version = "=1.14.11" } -solana-logger = { path = "../logger", version = "=1.14.11" } -solana-measure = { path = "../measure", version = "=1.14.11" } -solana-net-utils = { path = "../net-utils", version = "=1.14.11" } -solana-runtime = { path = "../runtime", version = "=1.14.11" } -solana-sdk = { path = "../sdk", version = "=1.14.11" } -solana-streamer = { path = "../streamer", version = "=1.14.11" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.11" } -solana-version = { path = "../version", version = "=1.14.11" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.12" } +solana-cli = { path = "../cli", version = "=1.14.12" } +solana-client = { path = "../client", version = "=1.14.12" } +solana-core = { path = "../core", version = "=1.14.12" } +solana-faucet = { path = "../faucet", version = "=1.14.12" } +solana-gossip = { path = "../gossip", version = "=1.14.12" } +solana-logger = { path = "../logger", version = "=1.14.12" } +solana-measure = { path = "../measure", version = "=1.14.12" } +solana-net-utils = { path = "../net-utils", version = "=1.14.12" } +solana-runtime = { path = "../runtime", version = "=1.14.12" } +solana-sdk = { path = "../sdk", version = "=1.14.12" } +solana-streamer = { path = "../streamer", version = "=1.14.12" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.12" } +solana-version = { path = "../version", version = "=1.14.12" } [dev-dependencies] -solana-local-cluster = { path = "../local-cluster", version = "=1.14.11" } +solana-local-cluster = { path = "../local-cluster", version = "=1.14.12" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/transaction-status/Cargo.toml b/transaction-status/Cargo.toml index 5cbb9c2d55118a..5696609a83b143 100644 --- a/transaction-status/Cargo.toml +++ b/transaction-status/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-transaction-status" -version = "1.14.11" +version = "1.14.12" description = "Solana transaction status types" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -20,12 +20,12 @@ log = "0.4.17" serde = "1.0.138" serde_derive = "1.0.103" serde_json = "1.0.81" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.11" } -solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.11" } -solana-measure = { path = "../measure", version = "=1.14.11" } -solana-metrics = { path = "../metrics", version = "=1.14.11" } -solana-sdk = { path = "../sdk", version = "=1.14.11" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.11" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.12" } +solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.12" } +solana-measure = { path = "../measure", version = "=1.14.12" } +solana-metrics = { path = "../metrics", version = "=1.14.12" } +solana-sdk = { path = "../sdk", version = "=1.14.12" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.12" } spl-associated-token-account = { version = "=1.1.2", features = ["no-entrypoint"] } spl-memo = { version = "=3.0.1", features = ["no-entrypoint"] } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } diff --git a/upload-perf/Cargo.toml b/upload-perf/Cargo.toml index 399415ce87479c..cbd533e99bbfaa 100644 --- a/upload-perf/Cargo.toml +++ b/upload-perf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-upload-perf" -version = "1.14.11" +version = "1.14.12" description = "Metrics Upload Utility" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -11,7 +11,7 @@ publish = false [dependencies] serde_json = "1.0.81" -solana-metrics = { path = "../metrics", version = "=1.14.11" } +solana-metrics = { path = "../metrics", version = "=1.14.12" } [[bin]] name = "solana-upload-perf" diff --git a/validator/Cargo.toml b/validator/Cargo.toml index 33cc7c88638494..0d0634fa6d4831 100644 --- a/validator/Cargo.toml +++ b/validator/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-validator" description = "Blockchain, Rebuilt for Scale" -version = "1.14.11" +version = "1.14.12" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -28,30 +28,30 @@ num_cpus = "1.13.1" rand = "0.7.0" serde = "1.0.138" serde_json = "1.0.81" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.11" } -solana-cli-config = { path = "../cli-config", version = "=1.14.11" } -solana-client = { path = "../client", version = "=1.14.11" } -solana-core = { path = "../core", version = "=1.14.11" } -solana-download-utils = { path = "../download-utils", version = "=1.14.11" } -solana-entry = { path = "../entry", version = "=1.14.11" } -solana-faucet = { path = "../faucet", version = "=1.14.11" } -solana-genesis-utils = { path = "../genesis-utils", version = "=1.14.11" } -solana-gossip = { path = "../gossip", version = "=1.14.11" } -solana-ledger = { path = "../ledger", version = "=1.14.11" } -solana-logger = { path = "../logger", version = "=1.14.11" } -solana-metrics = { path = "../metrics", version = "=1.14.11" } -solana-net-utils = { path = "../net-utils", version = "=1.14.11" } -solana-perf = { path = "../perf", version = "=1.14.11" } -solana-poh = { path = "../poh", version = "=1.14.11" } -solana-rpc = { path = "../rpc", version = "=1.14.11" } -solana-runtime = { path = "../runtime", version = "=1.14.11" } -solana-sdk = { path = "../sdk", version = "=1.14.11" } -solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.11" } -solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.11" } -solana-streamer = { path = "../streamer", version = "=1.14.11" } -solana-test-validator = { path = "../test-validator", version = "=1.14.11" } -solana-version = { path = "../version", version = "=1.14.11" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.11" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.12" } +solana-cli-config = { path = "../cli-config", version = "=1.14.12" } +solana-client = { path = "../client", version = "=1.14.12" } +solana-core = { path = "../core", version = "=1.14.12" } +solana-download-utils = { path = "../download-utils", version = "=1.14.12" } +solana-entry = { path = "../entry", version = "=1.14.12" } +solana-faucet = { path = "../faucet", version = "=1.14.12" } +solana-genesis-utils = { path = "../genesis-utils", version = "=1.14.12" } +solana-gossip = { path = "../gossip", version = "=1.14.12" } +solana-ledger = { path = "../ledger", version = "=1.14.12" } +solana-logger = { path = "../logger", version = "=1.14.12" } +solana-metrics = { path = "../metrics", version = "=1.14.12" } +solana-net-utils = { path = "../net-utils", version = "=1.14.12" } +solana-perf = { path = "../perf", version = "=1.14.12" } +solana-poh = { path = "../poh", version = "=1.14.12" } +solana-rpc = { path = "../rpc", version = "=1.14.12" } +solana-runtime = { path = "../runtime", version = "=1.14.12" } +solana-sdk = { path = "../sdk", version = "=1.14.12" } +solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.12" } +solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.12" } +solana-streamer = { path = "../streamer", version = "=1.14.12" } +solana-test-validator = { path = "../test-validator", version = "=1.14.12" } +solana-version = { path = "../version", version = "=1.14.12" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.12" } symlink = "0.1.0" [target.'cfg(not(target_env = "msvc"))'.dependencies] diff --git a/version/Cargo.toml b/version/Cargo.toml index 874db5a62f789b..04506bd1585aef 100644 --- a/version/Cargo.toml +++ b/version/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-version" -version = "1.14.11" +version = "1.14.12" description = "Solana Version" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,9 +14,9 @@ log = "0.4.17" semver = "1.0.10" serde = "1.0.138" serde_derive = "1.0.103" -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.11" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.11" } -solana-sdk = { path = "../sdk", version = "=1.14.11" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.12" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.12" } +solana-sdk = { path = "../sdk", version = "=1.14.12" } [lib] name = "solana_version" diff --git a/watchtower/Cargo.toml b/watchtower/Cargo.toml index 06dddd967e7d9b..2f5cef14f0bbe1 100644 --- a/watchtower/Cargo.toml +++ b/watchtower/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-watchtower" description = "Blockchain, Rebuilt for Scale" -version = "1.14.11" +version = "1.14.12" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -13,15 +13,15 @@ documentation = "https://docs.rs/solana-watchtower" clap = "2.33.1" humantime = "2.0.1" log = "0.4.17" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.11" } -solana-cli-config = { path = "../cli-config", version = "=1.14.11" } -solana-cli-output = { path = "../cli-output", version = "=1.14.11" } -solana-client = { path = "../client", version = "=1.14.11" } -solana-logger = { path = "../logger", version = "=1.14.11" } -solana-metrics = { path = "../metrics", version = "=1.14.11" } -solana-notifier = { path = "../notifier", version = "=1.14.11" } -solana-sdk = { path = "../sdk", version = "=1.14.11" } -solana-version = { path = "../version", version = "=1.14.11" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.12" } +solana-cli-config = { path = "../cli-config", version = "=1.14.12" } +solana-cli-output = { path = "../cli-output", version = "=1.14.12" } +solana-client = { path = "../client", version = "=1.14.12" } +solana-logger = { path = "../logger", version = "=1.14.12" } +solana-metrics = { path = "../metrics", version = "=1.14.12" } +solana-notifier = { path = "../notifier", version = "=1.14.12" } +solana-sdk = { path = "../sdk", version = "=1.14.12" } +solana-version = { path = "../version", version = "=1.14.12" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/zk-token-sdk/Cargo.toml b/zk-token-sdk/Cargo.toml index ced77297474e38..7a25efa4a4fb62 100644 --- a/zk-token-sdk/Cargo.toml +++ b/zk-token-sdk/Cargo.toml @@ -3,7 +3,7 @@ name = "solana-zk-token-sdk" description = "Solana Zk Token SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" -version = "1.14.11" +version = "1.14.12" license = "Apache-2.0" edition = "2021" @@ -12,7 +12,7 @@ base64 = "0.13" bytemuck = { version = "1.11.0", features = ["derive"] } num-derive = "0.3" num-traits = "0.2" -solana-program = { path = "../sdk/program", version = "=1.14.11" } +solana-program = { path = "../sdk/program", version = "=1.14.12" } [target.'cfg(not(target_os = "solana"))'.dependencies] aes-gcm-siv = "0.10.3" @@ -29,7 +29,7 @@ rand = "0.7" serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" sha3 = "0.9" -solana-sdk = { path = "../sdk", version = "=1.14.11" } +solana-sdk = { path = "../sdk", version = "=1.14.12" } subtle = "2" thiserror = "1.0" zeroize = { version = "1.3", default-features = false, features = ["zeroize_derive"] } From 9f1a9bbd099c7a7cd3c2f6ce06bc5d5f8485dc6b Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Fri, 23 Dec 2022 17:40:07 +0100 Subject: [PATCH 268/465] vote: Prevent commission update in the second half of epochs (backport #29362) (#29389) * vote: Prevent commission update in the second half of epochs (#29362) * vote: Prevent commission update in the second half of epochs * Address feedback * Fix tests * Make the feature enabled by single-contributor * Use a cooler pubkey (cherry picked from commit 968b15849444d8621c90f5713a049ba9a61d9b62) # Conflicts: # Cargo.lock # programs/vote/Cargo.toml # programs/vote/src/vote_processor.rs # programs/vote/src/vote_state/mod.rs # sdk/src/feature_set.rs * Fix merge conflict Co-authored-by: Jon Cinque Co-authored-by: Jon Cinque --- Cargo.lock | 1 + programs/vote/Cargo.toml | 1 + programs/vote/src/vote_error.rs | 3 ++ programs/vote/src/vote_processor.rs | 30 +++++++++++++- programs/vote/src/vote_state/mod.rs | 64 ++++++++++++++++++++++++++++- sdk/src/feature_set.rs | 5 +++ 6 files changed, 102 insertions(+), 2 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index d4b31ba716e31a..491a196edfad7e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -6518,6 +6518,7 @@ dependencies = [ "solana-metrics", "solana-program-runtime", "solana-sdk 1.14.12", + "test-case", "thiserror", ] diff --git a/programs/vote/Cargo.toml b/programs/vote/Cargo.toml index 56dc6742e5e808..96b0b6e52c691c 100644 --- a/programs/vote/Cargo.toml +++ b/programs/vote/Cargo.toml @@ -27,6 +27,7 @@ thiserror = "1.0" itertools = "0.10.3" rand = "0.7.0" solana-logger = { path = "../../logger", version = "=1.14.12" } +test-case = "2.1.0" [build-dependencies] rustc_version = "0.4" diff --git a/programs/vote/src/vote_error.rs b/programs/vote/src/vote_error.rs index b057b91db58721..2c60331273c51f 100644 --- a/programs/vote/src/vote_error.rs +++ b/programs/vote/src/vote_error.rs @@ -67,6 +67,9 @@ pub enum VoteError { #[error("Cannot close vote account unless it stopped voting at least one full epoch ago")] ActiveVoteAccountClose, + + #[error("Cannot update commission at this point in the epoch")] + CommissionUpdateTooLate, } impl DecodeError for VoteError { diff --git a/programs/vote/src/vote_processor.rs b/programs/vote/src/vote_processor.rs index 319bd68d610a93..2eb92d53c5b8bf 100644 --- a/programs/vote/src/vote_processor.rs +++ b/programs/vote/src/vote_processor.rs @@ -3,6 +3,7 @@ use { crate::{ id, + vote_error::VoteError, vote_instruction::VoteInstruction, vote_state::{self, VoteAuthorize}, }, @@ -136,6 +137,16 @@ pub fn process_instruction( vote_state::update_validator_identity(&mut me, node_pubkey, &signers) } VoteInstruction::UpdateCommission(commission) => { + if invoke_context.feature_set.is_active( + &feature_set::commission_updates_only_allowed_in_first_half_of_epoch::id(), + ) { + let sysvar_cache = invoke_context.get_sysvar_cache(); + let epoch_schedule = sysvar_cache.get_epoch_schedule()?; + let clock = sysvar_cache.get_clock()?; + if !vote_state::is_commission_update_allowed(clock.slot, &epoch_schedule) { + return Err(VoteError::CommissionUpdateTooLate.into()); + } + } vote_state::update_commission(&mut me, commission, &signers) } VoteInstruction::Vote(vote) | VoteInstruction::VoteSwitch(vote, _) => { @@ -277,7 +288,10 @@ mod tests { hash::Hash, instruction::{AccountMeta, Instruction}, pubkey::Pubkey, - sysvar::{self, clock::Clock, rent::Rent, slot_hashes::SlotHashes}, + sysvar::{ + self, clock::Clock, epoch_schedule::EpochSchedule, rent::Rent, + slot_hashes::SlotHashes, + }, }, std::{collections::HashSet, str::FromStr}, }; @@ -345,6 +359,7 @@ mod tests { .map(|meta| meta.pubkey) .collect(); pubkeys.insert(sysvar::clock::id()); + pubkeys.insert(sysvar::epoch_schedule::id()); pubkeys.insert(sysvar::rent::id()); pubkeys.insert(sysvar::slot_hashes::id()); let transaction_accounts: Vec<_> = pubkeys @@ -354,6 +369,10 @@ mod tests { *pubkey, if sysvar::clock::check_id(pubkey) { account::create_account_shared_data_for_test(&Clock::default()) + } else if sysvar::epoch_schedule::check_id(pubkey) { + account::create_account_shared_data_for_test( + &EpochSchedule::without_warmup(), + ) } else if sysvar::slot_hashes::check_id(pubkey) { account::create_account_shared_data_for_test(&SlotHashes::default()) } else if sysvar::rent::check_id(pubkey) { @@ -668,6 +687,15 @@ mod tests { let transaction_accounts = vec![ (vote_pubkey, vote_account), (authorized_withdrawer, AccountSharedData::default()), + // Add the sysvar accounts so they're in the cache for mock processing + ( + sysvar::clock::id(), + account::create_account_shared_data_for_test(&Clock::default()), + ), + ( + sysvar::epoch_schedule::id(), + account::create_account_shared_data_for_test(&EpochSchedule::without_warmup()), + ), ]; let mut instruction_accounts = vec![ AccountMeta { diff --git a/programs/vote/src/vote_state/mod.rs b/programs/vote/src/vote_state/mod.rs index 37b2ab2b3459ad..e36f4ac53be402 100644 --- a/programs/vote/src/vote_state/mod.rs +++ b/programs/vote/src/vote_state/mod.rs @@ -11,6 +11,7 @@ use { solana_sdk::{ account::{AccountSharedData, ReadableAccount, WritableAccount}, clock::{Epoch, Slot, UnixTimestamp}, + epoch_schedule::EpochSchedule, feature_set::{self, filter_votes_outside_slot_hashes, FeatureSet}, hash::Hash, instruction::InstructionError, @@ -1436,6 +1437,22 @@ pub fn update_commission( vote_account.set_state(&VoteStateVersions::new_current(vote_state)) } +/// Given the current slot and epoch schedule, determine if a commission change +/// is allowed +pub fn is_commission_update_allowed(slot: Slot, epoch_schedule: &EpochSchedule) -> bool { + // always allowed during warmup epochs + if let Some(relative_slot) = slot + .saturating_sub(epoch_schedule.first_normal_slot) + .checked_rem(epoch_schedule.slots_per_epoch) + { + // allowed up to the midpoint of the epoch + relative_slot.saturating_mul(2) <= epoch_schedule.slots_per_epoch + } else { + // no slots per epoch, just allow it, even though this should never happen + true + } +} + fn verify_authorized_signer( authorized: &Pubkey, signers: &HashSet, @@ -1653,8 +1670,12 @@ mod tests { crate::vote_state, itertools::Itertools, rand::Rng, - solana_sdk::{account::AccountSharedData, account_utils::StateMut, hash::hash}, + solana_sdk::{ + account::AccountSharedData, account_utils::StateMut, clock::DEFAULT_SLOTS_PER_EPOCH, + hash::hash, + }, std::cell::RefCell, + test_case::test_case, }; const MAX_RECENT_VOTES: usize = 16; @@ -4073,4 +4094,45 @@ mod tests { let bytes = bincode::serialize(&vote).unwrap(); assert_eq!(vote, bincode::deserialize(&bytes).unwrap()); } + + #[test_case(0, true; "first slot")] + #[test_case(DEFAULT_SLOTS_PER_EPOCH / 2, true; "halfway through epoch")] + #[test_case(DEFAULT_SLOTS_PER_EPOCH / 2 + 1, false; "halfway through epoch plus one")] + #[test_case(DEFAULT_SLOTS_PER_EPOCH - 1, false; "last slot in epoch")] + #[test_case(DEFAULT_SLOTS_PER_EPOCH, true; "first slot in second epoch")] + fn test_epoch_half_check(slot: Slot, expected_allowed: bool) { + let epoch_schedule = EpochSchedule::without_warmup(); + assert_eq!( + is_commission_update_allowed(slot, &epoch_schedule), + expected_allowed + ); + } + + #[test] + fn test_warmup_epoch_half_check_with_warmup() { + let epoch_schedule = EpochSchedule::default(); + let first_normal_slot = epoch_schedule.first_normal_slot; + // first slot works + assert!(is_commission_update_allowed(0, &epoch_schedule)); + // right before first normal slot works, since all warmup slots allow + // commission updates + assert!(is_commission_update_allowed( + first_normal_slot - 1, + &epoch_schedule + )); + } + + #[test_case(0, true; "first slot")] + #[test_case(DEFAULT_SLOTS_PER_EPOCH / 2, true; "halfway through epoch")] + #[test_case(DEFAULT_SLOTS_PER_EPOCH / 2 + 1, false; "halfway through epoch plus one")] + #[test_case(DEFAULT_SLOTS_PER_EPOCH - 1, false; "last slot in epoch")] + #[test_case(DEFAULT_SLOTS_PER_EPOCH, true; "first slot in second epoch")] + fn test_epoch_half_check_with_warmup(slot: Slot, expected_allowed: bool) { + let epoch_schedule = EpochSchedule::default(); + let first_normal_slot = epoch_schedule.first_normal_slot; + assert_eq!( + is_commission_update_allowed(first_normal_slot + slot, &epoch_schedule), + expected_allowed + ); + } } diff --git a/sdk/src/feature_set.rs b/sdk/src/feature_set.rs index dd4f86a7801956..bfdb5fda3d077e 100644 --- a/sdk/src/feature_set.rs +++ b/sdk/src/feature_set.rs @@ -516,6 +516,10 @@ pub mod check_syscall_outputs_do_not_overlap { solana_sdk::declare_id!("3uRVPBpyEJRo1emLCrq38eLRFGcu6uKSpUXqGvU8T7SZ"); } +pub mod commission_updates_only_allowed_in_first_half_of_epoch { + solana_sdk::declare_id!("noRuG2kzACwgaY7TVmLRnUNPLKNVQE1fb7X55YWBehp"); +} + lazy_static! { /// Map of feature identifiers to user-visible description pub static ref FEATURE_NAMES: HashMap = [ @@ -639,6 +643,7 @@ lazy_static! { (return_none_for_zero_lamport_accounts::id(), "return none for zero lamport accounts #27800"), (increase_tx_account_lock_limit::id(), "increase tx account lock limit to 128 #27241"), (check_syscall_outputs_do_not_overlap::id(), "check syscall outputs do_not overlap #28600"), + (commission_updates_only_allowed_in_first_half_of_epoch::id(), "validator commission updates are only allowed in the first half of an epoch #29362"), /*************** ADD NEW FEATURES HERE ***************/ ] .iter() From d151fbeb3970ed2a08eb7d0b065acca8921fb028 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Mon, 26 Dec 2022 17:06:51 +0000 Subject: [PATCH 269/465] experiments different turbine fanouts for propagating shreds (backport #29393) (#29420) * experiments different turbine fanouts for propagating shreds (#29393) The commit allocates 2% of slots to running experiments with different turbine fanouts based on the slot number. The experiment is feature gated with an additional feature to disable the experiment. (cherry picked from commit 456d06785d06e9ad6410a2c3f45584f9f7b83e5f) # Conflicts: # core/src/retransmit_stage.rs * removes mergify merge conflicts Co-authored-by: behzad nouri --- core/src/cluster_nodes.rs | 56 +++++++++++++++++++++++++++++++----- core/src/retransmit_stage.rs | 22 ++++++++------ sdk/src/feature_set.rs | 10 +++++++ 3 files changed, 72 insertions(+), 16 deletions(-) diff --git a/core/src/cluster_nodes.rs b/core/src/cluster_nodes.rs index 270c83990519a8..ec78c120891423 100644 --- a/core/src/cluster_nodes.rs +++ b/core/src/cluster_nodes.rs @@ -5,7 +5,7 @@ use { rand::{seq::SliceRandom, Rng, SeedableRng}, rand_chacha::ChaChaRng, solana_gossip::{ - cluster_info::{compute_retransmit_peers, ClusterInfo}, + cluster_info::{compute_retransmit_peers, ClusterInfo, DATA_PLANE_FANOUT}, contact_info::ContactInfo, crds::GossipRoute, crds_gossip_pull::CRDS_GOSSIP_PULL_CRDS_TIMEOUT_MS, @@ -35,6 +35,8 @@ use { }, }; +pub(crate) const MAX_NUM_TURBINE_HOPS: usize = 4; + #[allow(clippy::large_enum_variant)] enum NodeId { // TVU node obtained through gossip (staked or not). @@ -233,8 +235,10 @@ impl ClusterNodes { 0 } else if self_index <= fanout { 1 - } else { + } else if self_index <= fanout.saturating_add(1).saturating_mul(fanout) { 2 + } else { + 3 // If changed, update MAX_NUM_TURBINE_HOPS. }; let peers = get_retransmit_peers(fanout, self_index, &nodes); return RetransmitPeers { @@ -249,8 +253,10 @@ impl ClusterNodes { 0 } else if self_index < fanout { 1 - } else { + } else if self_index < fanout.saturating_add(1).saturating_mul(fanout) { 2 + } else { + 3 // If changed, update MAX_NUM_TURBINE_HOPS. }; let (neighbors, children) = compute_retransmit_peers(fanout, self_index, &nodes); // Assert that the node itself is included in the set of neighbors, at @@ -480,11 +486,47 @@ pub fn make_test_cluster( (nodes, stakes, cluster_info) } +pub(crate) fn get_data_plane_fanout(shred_slot: Slot, root_bank: &Bank) -> usize { + if enable_turbine_fanout_experiments(shred_slot, root_bank) { + // Allocate ~2% of slots to turbine fanout experiments. + match shred_slot % 359 { + 11 => 64, + 61 => 768, + 111 => 128, + 161 => 640, + 211 => 256, + 261 => 512, + 311 => 384, + _ => DATA_PLANE_FANOUT, + } + } else { + DATA_PLANE_FANOUT + } +} + fn drop_redundant_turbine_path(shred_slot: Slot, root_bank: &Bank) -> bool { - let feature_slot = root_bank - .feature_set - .activated_slot(&feature_set::drop_redundant_turbine_path::id()); - match feature_slot { + check_feature_activation( + &feature_set::drop_redundant_turbine_path::id(), + shred_slot, + root_bank, + ) +} + +fn enable_turbine_fanout_experiments(shred_slot: Slot, root_bank: &Bank) -> bool { + check_feature_activation( + &feature_set::enable_turbine_fanout_experiments::id(), + shred_slot, + root_bank, + ) && !check_feature_activation( + &feature_set::disable_turbine_fanout_experiments::id(), + shred_slot, + root_bank, + ) +} + +// Returns true if the feature is effective for the shred slot. +fn check_feature_activation(feature: &Pubkey, shred_slot: Slot, root_bank: &Bank) -> bool { + match root_bank.feature_set.activated_slot(feature) { None => false, Some(feature_slot) => { let epoch_schedule = root_bank.epoch_schedule(); diff --git a/core/src/retransmit_stage.rs b/core/src/retransmit_stage.rs index 2b05396b203175..ff8564f9f61ef9 100644 --- a/core/src/retransmit_stage.rs +++ b/core/src/retransmit_stage.rs @@ -3,7 +3,7 @@ use { crate::{ - cluster_nodes::{ClusterNodes, ClusterNodesCache}, + cluster_nodes::{self, ClusterNodes, ClusterNodesCache, MAX_NUM_TURBINE_HOPS}, packet_hasher::PacketHasher, }, crossbeam_channel::{Receiver, RecvTimeoutError}, @@ -11,10 +11,7 @@ use { lru::LruCache, rayon::{prelude::*, ThreadPool, ThreadPoolBuilder}, solana_client::rpc_response::SlotUpdate, - solana_gossip::{ - cluster_info::{ClusterInfo, DATA_PLANE_FANOUT}, - contact_info::ContactInfo, - }, + solana_gossip::{cluster_info::ClusterInfo, contact_info::ContactInfo}, solana_ledger::{ leader_schedule_cache::LeaderScheduleCache, shred::{self, ShredId}, @@ -56,8 +53,8 @@ struct RetransmitSlotStats { outset: u64, // 1st shred retransmit timestamp. // Number of shreds sent and received at different // distances from the turbine broadcast root. - num_shreds_received: [usize; 3], - num_shreds_sent: [usize; 3], + num_shreds_received: [usize; MAX_NUM_TURBINE_HOPS], + num_shreds_sent: [usize; MAX_NUM_TURBINE_HOPS], } struct RetransmitStats { @@ -300,8 +297,9 @@ fn retransmit_shred( stats: &RetransmitStats, ) -> (/*root_distance:*/ usize, /*num_nodes:*/ usize) { let mut compute_turbine_peers = Measure::start("turbine_start"); + let data_plane_fanout = cluster_nodes::get_data_plane_fanout(key.slot(), root_bank); let (root_distance, addrs) = - cluster_nodes.get_retransmit_addrs(slot_leader, key, root_bank, DATA_PLANE_FANOUT); + cluster_nodes.get_retransmit_addrs(slot_leader, key, root_bank, data_plane_fanout); let addrs: Vec<_> = addrs .into_iter() .filter(|addr| ContactInfo::is_valid_address(addr, socket_addr_space)) @@ -440,7 +438,7 @@ impl AddAssign for RetransmitSlotStats { } else { self.outset.min(outset) }; - for k in 0..3 { + for k in 0..MAX_NUM_TURBINE_HOPS { self.num_shreds_received[k] += num_shreds_received[k]; self.num_shreds_sent[k] += num_shreds_sent[k]; } @@ -554,9 +552,15 @@ impl RetransmitSlotStats { self.num_shreds_received[2], i64 ), + ( + "num_shreds_received_3rd_layer", + self.num_shreds_received[3], + i64 + ), ("num_shreds_sent_root", self.num_shreds_sent[0], i64), ("num_shreds_sent_1st_layer", self.num_shreds_sent[1], i64), ("num_shreds_sent_2nd_layer", self.num_shreds_sent[2], i64), + ("num_shreds_sent_3rd_layer", self.num_shreds_sent[3], i64), ); } } diff --git a/sdk/src/feature_set.rs b/sdk/src/feature_set.rs index bfdb5fda3d077e..6e7d2301af20bb 100644 --- a/sdk/src/feature_set.rs +++ b/sdk/src/feature_set.rs @@ -520,6 +520,14 @@ pub mod commission_updates_only_allowed_in_first_half_of_epoch { solana_sdk::declare_id!("noRuG2kzACwgaY7TVmLRnUNPLKNVQE1fb7X55YWBehp"); } +pub mod enable_turbine_fanout_experiments { + solana_sdk::declare_id!("D31EFnLgdiysi84Woo3of4JMu7VmasUS3Z7j9HYXCeLY"); +} + +pub mod disable_turbine_fanout_experiments { + solana_sdk::declare_id!("Gz1aLrbeQ4Q6PTSafCZcGWZXz91yVRi7ASFzFEr1U4sa"); +} + lazy_static! { /// Map of feature identifiers to user-visible description pub static ref FEATURE_NAMES: HashMap = [ @@ -644,6 +652,8 @@ lazy_static! { (increase_tx_account_lock_limit::id(), "increase tx account lock limit to 128 #27241"), (check_syscall_outputs_do_not_overlap::id(), "check syscall outputs do_not overlap #28600"), (commission_updates_only_allowed_in_first_half_of_epoch::id(), "validator commission updates are only allowed in the first half of an epoch #29362"), + (enable_turbine_fanout_experiments::id(), "enable turbine fanout experiments #29393"), + (disable_turbine_fanout_experiments::id(), "disable turbine fanout experiments #29393"), /*************** ADD NEW FEATURES HERE ***************/ ] .iter() From 491dcf32a4ed20f0f719a12ad4ec94bbee2c0d28 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Wed, 28 Dec 2022 19:57:47 +0000 Subject: [PATCH 270/465] expands test coverage for merkle/legacy shreds sigverify (backport #29424) (#29428) * expands test coverage for merkle/legacy shreds sigverify (#29424) (cherry picked from commit d172ab342f0fd937fc0efbfa774e8aa0b952e853) # Conflicts: # entry/src/entry.rs * removes mergify merge conflicts Co-authored-by: behzad nouri --- entry/src/entry.rs | 9 +- ledger/src/sigverify_shreds.rs | 226 +++++++++++++++++++++++++++++++-- perf/src/sigverify.rs | 16 +-- 3 files changed, 225 insertions(+), 26 deletions(-) diff --git a/entry/src/entry.rs b/entry/src/entry.rs index 225e93b17f6922..c732f19ab6fcb7 100644 --- a/entry/src/entry.rs +++ b/entry/src/entry.rs @@ -736,11 +736,10 @@ impl EntrySlice for [Entry] { recyclers: VerifyRecyclers, ) -> EntryVerificationState { let start = Instant::now(); - let api = perf_libs::api(); - if api.is_none() { - return self.verify_cpu(start_hash); - } - let api = api.unwrap(); + let api = match perf_libs::api() { + None => return self.verify_cpu(start_hash), + Some(api) => api, + }; inc_new_counter_info!("entry_verify-num_entries", self.len() as usize); let genesis = [Entry { diff --git a/ledger/src/sigverify_shreds.rs b/ledger/src/sigverify_shreds.rs index 68469e9ddd1a69..01c9624f008a6b 100644 --- a/ledger/src/sigverify_shreds.rs +++ b/ledger/src/sigverify_shreds.rs @@ -203,12 +203,10 @@ pub fn verify_shreds_gpu( slot_leaders: &HashMap, recycler_cache: &RecyclerCache, ) -> Vec> { - let api = perf_libs::api(); - if api.is_none() { - return verify_shreds_cpu(batches, slot_leaders); - } - let api = api.unwrap(); - + let api = match perf_libs::api() { + None => return verify_shreds_cpu(batches, slot_leaders), + Some(api) => api, + }; let mut elems = Vec::new(); let mut rvs = Vec::new(); let packet_count = count_packets_in_batches(batches); @@ -324,12 +322,14 @@ pub fn sign_shreds_gpu( ) { let sig_size = size_of::(); let pubkey_size = size_of::(); - let api = perf_libs::api(); let packet_count = count_packets_in_batches(batches); - if api.is_none() || packet_count < SIGN_SHRED_GPU_MIN || pinned_keypair.is_none() { + if packet_count < SIGN_SHRED_GPU_MIN || pinned_keypair.is_none() { return sign_shreds_cpu(keypair, batches); } - let api = api.unwrap(); + let api = match perf_libs::api() { + None => return sign_shreds_cpu(keypair, batches), + Some(api) => api, + }; let pinned_keypair = pinned_keypair.as_ref().unwrap(); let mut elems = Vec::new(); @@ -423,8 +423,21 @@ pub fn sign_shreds_gpu( mod tests { use { super::*, - crate::shred::{Shred, ShredFlags, LEGACY_SHRED_DATA_CAPACITY}, - solana_sdk::signature::{Keypair, Signer}, + crate::{ + shred::{ProcessShredsStats, Shred, ShredFlags, LEGACY_SHRED_DATA_CAPACITY}, + shredder::{ReedSolomonCache, Shredder}, + }, + matches::assert_matches, + rand::{seq::SliceRandom, Rng}, + solana_entry::entry::Entry, + solana_sdk::{ + hash, + hash::Hash, + signature::{Keypair, Signer, SIGNATURE_BYTES}, + system_transaction, + transaction::Transaction, + }, + std::iter::{once, repeat_with}, }; fn run_test_sigverify_shred_cpu(slot: Slot) { @@ -673,4 +686,195 @@ mod tests { fn test_sigverify_shreds_sign_cpu() { run_test_sigverify_shreds_sign_cpu(0xdead_c0de); } + + fn make_transaction(rng: &mut R) -> Transaction { + let block = rng.gen::<[u8; 32]>(); + let recent_blockhash = hash::hashv(&[&block]); + system_transaction::transfer( + &Keypair::new(), // from + &Pubkey::new_unique(), // to + rng.gen(), // lamports + recent_blockhash, + ) + } + + fn make_entry(rng: &mut R, prev_hash: &Hash) -> Entry { + let size = rng.gen_range(16, 32); + let txs = repeat_with(|| make_transaction(rng)).take(size).collect(); + Entry::new( + prev_hash, + rng.gen_range(1, 64), // num_hashes + txs, + ) + } + + // Minimally corrupts the packet so that the signature no longer verifies. + fn corrupt_packet(rng: &mut R, packet: &mut Packet, keypairs: &HashMap) { + let coin_flip: bool = rng.gen(); + if coin_flip { + // Corrupt one byte within the signature offsets. + let k = rng.gen_range(0, SIGNATURE_BYTES); + let buffer = packet.buffer_mut(); + buffer[k] = buffer[k].wrapping_add(1u8); + } else { + // Corrupt one byte within the signed message offsets. + let shred = shred::layout::get_shred(packet).unwrap(); + let offsets: Range = shred::layout::get_signed_message_range(shred).unwrap(); + let k = rng.gen_range(offsets.start, offsets.end); + let buffer = packet.buffer_mut(); + buffer[k] = buffer[k].wrapping_add(1u8); + } + // Assert that the signature no longer verifies. + let shred = shred::layout::get_shred(packet).unwrap(); + let slot = shred::layout::get_slot(shred).unwrap(); + let signature = shred::layout::get_signature(shred).unwrap(); + if coin_flip { + let pubkey = keypairs[&slot].pubkey(); + let offsets = shred::layout::get_signed_message_range(shred).unwrap(); + assert!(!signature.verify(pubkey.as_ref(), &shred[offsets])); + } else { + // Slot may have been corrupted and no longer mapping to a keypair. + let pubkey = keypairs.get(&slot).map(Keypair::pubkey).unwrap_or_default(); + let offsets = shred::layout::get_signed_message_range(shred).unwrap_or_default(); + assert!(!signature.verify(pubkey.as_ref(), &shred[offsets])); + }; + } + + #[test] + fn test_fuzz_sigverify_shreds() { + let mut rng = rand::thread_rng(); + let recycler_cache = RecyclerCache::default(); + let reed_solomon_cache = ReedSolomonCache::default(); + let entries: Vec<_> = { + let prev_hash = hash::hashv(&[&rng.gen::<[u8; 32]>()]); + let entry = make_entry(&mut rng, &prev_hash); + let num_entries = rng.gen_range(64, 128); + std::iter::successors(Some(entry), |entry| Some(make_entry(&mut rng, &entry.hash))) + .take(num_entries) + .collect() + }; + let mut keypairs = HashMap::::new(); + // Legacy shreds. + let (mut shreds, coding_shreds) = { + let slot = 169_367_809; + let parent_slot = slot - rng.gen::() as Slot; + keypairs.insert(slot, Keypair::new()); + Shredder::new( + slot, + parent_slot, + rng.gen_range(0, 0x3F), // reference_tick + rng.gen(), // version + ) + .unwrap() + .entries_to_shreds( + &keypairs[&slot], + &entries, + true, // is_last_in_slot + rng.gen_range(0, 671), // next_shred_index + rng.gen_range(0, 781), // next_code_index + false, // merkle_variant + &reed_solomon_cache, + &mut ProcessShredsStats::default(), + ) + }; + shreds.extend(coding_shreds); + // Merkle shreds. + let (data_shreds, coding_shreds) = { + let slot = 169_376_655; + let parent_slot = slot - rng.gen::() as Slot; + keypairs.insert(slot, Keypair::new()); + Shredder::new( + slot, + parent_slot, + rng.gen_range(0, 0x3F), // reference_tick + rng.gen(), // version + ) + .unwrap() + .entries_to_shreds( + &keypairs[&slot], + &entries, + true, // is_last_in_slot + rng.gen_range(0, 671), // next_shred_index + rng.gen_range(0, 781), // next_code_index + true, // merkle_variant + &reed_solomon_cache, + &mut ProcessShredsStats::default(), + ) + }; + shreds.extend(data_shreds); + shreds.extend(coding_shreds); + shreds.shuffle(&mut rng); + // Assert that all shreds verfiy and sanitize. + for shred in &shreds { + let pubkey = keypairs[&shred.slot()].pubkey(); + assert!(shred.verify(&pubkey)); + assert_matches!(shred.sanitize(), Ok(())); + } + // Verfiy using layout api. + for shred in &shreds { + let shred = shred.payload(); + let slot = shred::layout::get_slot(shred).unwrap(); + let signature = shred::layout::get_signature(shred).unwrap(); + let offsets = shred::layout::get_signed_message_range(shred).unwrap(); + let pubkey = keypairs[&slot].pubkey(); + assert!(signature.verify(pubkey.as_ref(), &shred[offsets])); + } + let num_shreds = shreds.len(); + let slot_leaders: HashMap = keypairs + .iter() + .map(|(&slot, keypair)| (slot, keypair.pubkey().to_bytes())) + .chain(once((Slot::MAX, Pubkey::default().to_bytes()))) + .collect(); + let mut packets = shreds.into_iter().map(|shred| { + let mut packet = Packet::default(); + shred.copy_to_packet(&mut packet); + packet + }); + let mut packets: Vec<_> = repeat_with(|| { + let size = rng.gen_range(0, 16); + let packets: Vec<_> = repeat_with(|| packets.next()) + .while_some() + .take(size) + .collect(); + if size != 0 && packets.is_empty() { + None + } else { + Some(PacketBatch::new(packets)) + } + }) + .while_some() + .collect(); + assert_eq!( + num_shreds, + packets.iter().map(PacketBatch::len).sum::() + ); + assert_eq!( + verify_shreds_gpu(&packets, &slot_leaders, &recycler_cache), + packets + .iter() + .map(PacketBatch::len) + .map(|size| vec![1u8; size]) + .collect::>() + ); + // Invalidate signatures for a random number of packets. + let out: Vec<_> = packets + .iter_mut() + .map(|packets| { + packets + .iter_mut() + .map(|packet| { + let coin_flip: bool = rng.gen(); + if !coin_flip { + corrupt_packet(&mut rng, packet, &keypairs); + } + u8::from(coin_flip) + }) + .collect::>() + }) + .collect(); + assert_eq!( + verify_shreds_gpu(&packets, &slot_leaders, &recycler_cache), + out + ); + } } diff --git a/perf/src/sigverify.rs b/perf/src/sigverify.rs index e2856e9423f796..4d7d144887c188 100644 --- a/perf/src/sigverify.rs +++ b/perf/src/sigverify.rs @@ -6,7 +6,7 @@ use { crate::{ cuda_runtime::PinnedVec, - packet::{Packet, PacketBatch, PacketFlags}, + packet::{Packet, PacketBatch, PacketFlags, PACKET_DATA_SIZE}, perf_libs, recycler::Recycler, }, @@ -730,14 +730,10 @@ pub fn ed25519_verify( reject_non_vote: bool, valid_packet_count: usize, ) { - let api = perf_libs::api(); - if api.is_none() { - return ed25519_verify_cpu(batches, reject_non_vote, valid_packet_count); - } - let api = api.unwrap(); - - use crate::packet::PACKET_DATA_SIZE; - + let api = match perf_libs::api() { + None => return ed25519_verify_cpu(batches, reject_non_vote, valid_packet_count), + Some(api) => api, + }; let total_packet_count = count_packets_in_batches(batches); // micro-benchmarks show GPU time for smallest batch around 15-20ms // and CPU speed for 64-128 sigverifies around 10-20ms. 64 is a nice @@ -809,7 +805,7 @@ mod tests { use { super::*, crate::{ - packet::{to_packet_batches, Packet, PacketBatch, PACKETS_PER_BATCH, PACKET_DATA_SIZE}, + packet::{to_packet_batches, Packet, PacketBatch, PACKETS_PER_BATCH}, sigverify::{self, PacketOffsets}, test_tx::{new_test_vote_tx, test_multisig_tx, test_tx}, }, From 5b8397b97f32548f3935877c18e8ba317889890a Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Thu, 29 Dec 2022 15:30:38 +0000 Subject: [PATCH 271/465] expands test coverage for sign_shreds_gpu (backport #29429) (#29430) expands test coverage for sign_shreds_gpu (#29429) (cherry picked from commit fba4a5706055814b68274778d73e72f104719b84) Co-authored-by: behzad nouri --- ledger/src/sigverify_shreds.rs | 92 +++++++++++++++++++++++++--------- 1 file changed, 69 insertions(+), 23 deletions(-) diff --git a/ledger/src/sigverify_shreds.rs b/ledger/src/sigverify_shreds.rs index 01c9624f008a6b..cb528bb8b1330e 100644 --- a/ledger/src/sigverify_shreds.rs +++ b/ledger/src/sigverify_shreds.rs @@ -740,16 +740,13 @@ mod tests { }; } - #[test] - fn test_fuzz_sigverify_shreds() { - let mut rng = rand::thread_rng(); - let recycler_cache = RecyclerCache::default(); + fn make_shreds(rng: &mut R) -> (Vec, HashMap) { let reed_solomon_cache = ReedSolomonCache::default(); let entries: Vec<_> = { let prev_hash = hash::hashv(&[&rng.gen::<[u8; 32]>()]); - let entry = make_entry(&mut rng, &prev_hash); + let entry = make_entry(rng, &prev_hash); let num_entries = rng.gen_range(64, 128); - std::iter::successors(Some(entry), |entry| Some(make_entry(&mut rng, &entry.hash))) + std::iter::successors(Some(entry), |entry| Some(make_entry(rng, &entry.hash))) .take(num_entries) .collect() }; @@ -757,7 +754,7 @@ mod tests { // Legacy shreds. let (mut shreds, coding_shreds) = { let slot = 169_367_809; - let parent_slot = slot - rng.gen::() as Slot; + let parent_slot = slot - rng.gen::().max(1) as Slot; keypairs.insert(slot, Keypair::new()); Shredder::new( slot, @@ -769,7 +766,7 @@ mod tests { .entries_to_shreds( &keypairs[&slot], &entries, - true, // is_last_in_slot + rng.gen(), // is_last_in_slot rng.gen_range(0, 671), // next_shred_index rng.gen_range(0, 781), // next_code_index false, // merkle_variant @@ -781,7 +778,7 @@ mod tests { // Merkle shreds. let (data_shreds, coding_shreds) = { let slot = 169_376_655; - let parent_slot = slot - rng.gen::() as Slot; + let parent_slot = slot - rng.gen::().max(1) as Slot; keypairs.insert(slot, Keypair::new()); Shredder::new( slot, @@ -793,7 +790,7 @@ mod tests { .entries_to_shreds( &keypairs[&slot], &entries, - true, // is_last_in_slot + rng.gen(), // is_last_in_slot rng.gen_range(0, 671), // next_shred_index rng.gen_range(0, 781), // next_code_index true, // merkle_variant @@ -803,7 +800,7 @@ mod tests { }; shreds.extend(data_shreds); shreds.extend(coding_shreds); - shreds.shuffle(&mut rng); + shreds.shuffle(rng); // Assert that all shreds verfiy and sanitize. for shred in &shreds { let pubkey = keypairs[&shred.slot()].pubkey(); @@ -819,18 +816,16 @@ mod tests { let pubkey = keypairs[&slot].pubkey(); assert!(signature.verify(pubkey.as_ref(), &shred[offsets])); } - let num_shreds = shreds.len(); - let slot_leaders: HashMap = keypairs - .iter() - .map(|(&slot, keypair)| (slot, keypair.pubkey().to_bytes())) - .chain(once((Slot::MAX, Pubkey::default().to_bytes()))) - .collect(); - let mut packets = shreds.into_iter().map(|shred| { + (shreds, keypairs) + } + + fn make_packets(rng: &mut R, shreds: &[Shred]) -> Vec { + let mut packets = shreds.iter().map(|shred| { let mut packet = Packet::default(); shred.copy_to_packet(&mut packet); packet }); - let mut packets: Vec<_> = repeat_with(|| { + let packets: Vec<_> = repeat_with(|| { let size = rng.gen_range(0, 16); let packets: Vec<_> = repeat_with(|| packets.next()) .while_some() @@ -845,11 +840,26 @@ mod tests { .while_some() .collect(); assert_eq!( - num_shreds, + shreds.len(), packets.iter().map(PacketBatch::len).sum::() ); + assert!(count_packets_in_batches(&packets) > SIGN_SHRED_GPU_MIN); + packets + } + + #[test] + fn test_verify_shreds_fuzz() { + let mut rng = rand::thread_rng(); + let recycler_cache = RecyclerCache::default(); + let (shreds, keypairs) = make_shreds(&mut rng); + let pubkeys: HashMap = keypairs + .iter() + .map(|(&slot, keypair)| (slot, keypair.pubkey().to_bytes())) + .chain(once((Slot::MAX, Pubkey::default().to_bytes()))) + .collect(); + let mut packets = make_packets(&mut rng, &shreds); assert_eq!( - verify_shreds_gpu(&packets, &slot_leaders, &recycler_cache), + verify_shreds_gpu(&packets, &pubkeys, &recycler_cache), packets .iter() .map(PacketBatch::len) @@ -872,9 +882,45 @@ mod tests { .collect::>() }) .collect(); + assert_eq!(verify_shreds_gpu(&packets, &pubkeys, &recycler_cache), out); + } + + #[test] + fn test_sign_shreds_gpu() { + let mut rng = rand::thread_rng(); + let recycler_cache = RecyclerCache::default(); + let (shreds, _) = make_shreds(&mut rng); + let keypair = Keypair::new(); + let pubkeys: HashMap = { + let pubkey = keypair.pubkey().to_bytes(); + shreds + .iter() + .map(Shred::slot) + .map(|slot| (slot, pubkey)) + .chain(once((Slot::MAX, Pubkey::default().to_bytes()))) + .collect() + }; + let mut packets = make_packets(&mut rng, &shreds); + // Assert that initially all signatrues are invalid. + assert_eq!( + verify_shreds_gpu(&packets, &pubkeys, &recycler_cache), + packets + .iter() + .map(PacketBatch::len) + .map(|size| vec![0u8; size]) + .collect::>() + ); + let pinned_keypair = sign_shreds_gpu_pinned_keypair(&keypair, &recycler_cache); + let pinned_keypair = Some(Arc::new(pinned_keypair)); + // Sign and verify shreds signatures. + sign_shreds_gpu(&keypair, &pinned_keypair, &mut packets, &recycler_cache); assert_eq!( - verify_shreds_gpu(&packets, &slot_leaders, &recycler_cache), - out + verify_shreds_gpu(&packets, &pubkeys, &recycler_cache), + packets + .iter() + .map(PacketBatch::len) + .map(|size| vec![1u8; size]) + .collect::>() ); } } From 3ce23b03a1cfdfd175a43de27e3f424a4c6337ed Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Sat, 31 Dec 2022 17:06:04 +0000 Subject: [PATCH 272/465] removes merkle root comparison in erasure_mismatch (backport #29447) (#29449) removes merkle root comparison in erasure_mismatch (#29447) Merkle shreds within the same erasure batch have the same merkle root. The root of the merkle tree is signed. So either the signatures match or one fails sigverify, and the comparison of merkle roots is redundant. (cherry picked from commit 70c901792eebe47069081955988835a358ba97d7) Co-authored-by: behzad nouri --- ledger/src/shred/merkle.rs | 6 ------ ledger/src/shred/shred_code.rs | 11 +++++++++-- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/ledger/src/shred/merkle.rs b/ledger/src/shred/merkle.rs index e694fbb9c03d7e..4ac4b7a6c67c7b 100644 --- a/ledger/src/shred/merkle.rs +++ b/ledger/src/shred/merkle.rs @@ -316,12 +316,6 @@ impl ShredCode { Some(offset..offset + SIZE_OF_MERKLE_ROOT) } - pub(super) fn erasure_mismatch(&self, other: &ShredCode) -> bool { - shred_code::erasure_mismatch(self, other) - || self.merkle_root().ok() != other.merkle_root().ok() - || self.common_header.signature != other.common_header.signature - } - fn from_recovered_shard( common_header: ShredCommonHeader, coding_header: CodingShredHeader, diff --git a/ledger/src/shred/shred_code.rs b/ledger/src/shred/shred_code.rs index 414e958cd0357b..0cafc6c4ada6bd 100644 --- a/ledger/src/shred/shred_code.rs +++ b/ledger/src/shred/shred_code.rs @@ -79,8 +79,15 @@ impl ShredCode { pub(super) fn erasure_mismatch(&self, other: &ShredCode) -> bool { match (self, other) { (Self::Legacy(shred), Self::Legacy(other)) => erasure_mismatch(shred, other), - (Self::Merkle(shred), Self::Merkle(other)) => shred.erasure_mismatch(other), - _ => true, + (Self::Legacy(_), Self::Merkle(_)) => true, + (Self::Merkle(_), Self::Legacy(_)) => true, + (Self::Merkle(shred), Self::Merkle(other)) => { + // Merkle shreds within the same erasure batch have the same + // merkle root. The root of the merkle tree is signed. So + // either the signatures match or one fails sigverify. + erasure_mismatch(shred, other) + || shred.common_header().signature != other.common_header().signature + } } } } From 69c15ab70efc24c88325f1ec50d594a291bbbfb9 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Tue, 3 Jan 2023 22:24:48 +0000 Subject: [PATCH 273/465] dedups gossip addresses, taking the one with highest weight (backport #29421) (#29493) * dedups gossip addresses, taking the one with highest weight (#29421) dedups gossip addresses, keeping only the one with the highest weight In order to avoid traffic congestion or sending duplicate packets, when sampling gossip nodes if several nodes have the same gossip address (because they are behind a relayer or whatever), they need to be deduplicated into one. (cherry picked from commit e5323166b3a14a5ede8057af231bc2d8649eae31) # Conflicts: # gossip/src/crds_gossip_pull.rs # gossip/src/crds_gossip_push.rs * removes mergify merge conflicts Co-authored-by: behzad nouri --- gossip/src/contact_info.rs | 4 +++- gossip/src/crds_gossip.rs | 17 +++++++++++++++++ gossip/src/crds_gossip_pull.rs | 13 ++++++++----- gossip/src/crds_gossip_push.rs | 22 ++++++++++++++-------- gossip/src/crds_value.rs | 15 +++++++++------ 5 files changed, 51 insertions(+), 20 deletions(-) diff --git a/gossip/src/contact_info.rs b/gossip/src/contact_info.rs index 1a5a33aa79d256..eb261607cd5970 100644 --- a/gossip/src/contact_info.rs +++ b/gossip/src/contact_info.rs @@ -112,7 +112,9 @@ impl ContactInfo { let delay = 10 * 60 * 1000; // 10 minutes let now = timestamp() - delay + rng.gen_range(0, 2 * delay); let pubkey = pubkey.unwrap_or_else(solana_sdk::pubkey::new_rand); - ContactInfo::new_localhost(&pubkey, now) + let mut node = ContactInfo::new_localhost(&pubkey, now); + node.gossip.set_port(rng.gen_range(1024, u16::MAX)); + node } #[cfg(test)] diff --git a/gossip/src/crds_gossip.rs b/gossip/src/crds_gossip.rs index af6c04ef8f6d75..4a2fcf8536fc43 100644 --- a/gossip/src/crds_gossip.rs +++ b/gossip/src/crds_gossip.rs @@ -17,6 +17,7 @@ use { duplicate_shred::{self, DuplicateShredIndex, LeaderScheduleFn, MAX_DUPLICATE_SHREDS}, ping_pong::PingCache, }, + itertools::Itertools, rayon::ThreadPool, solana_ledger::shred::Shred, solana_sdk::{ @@ -358,6 +359,22 @@ pub fn get_weight(max_weight: f32, time_since_last_selected: u32, stake: f32) -> 1.0_f32.max(weight.min(max_weight)) } +// Dedups gossip addresses, keeping only the one with the highest weight. +pub(crate) fn dedup_gossip_addresses( + nodes: I, +) -> HashMap +where + I: IntoIterator, +{ + nodes + .into_iter() + .into_grouping_map_by(|(_weight, node)| node.gossip) + .aggregate(|acc, _node_gossip, (weight, node)| match acc { + Some((ref w, _)) if w >= &weight => acc, + Some(_) | None => Some((weight, node)), + }) +} + #[cfg(test)] mod test { use { diff --git a/gossip/src/crds_gossip_pull.rs b/gossip/src/crds_gossip_pull.rs index b10ecf2f2de2ee..7be82fa23879ed 100644 --- a/gossip/src/crds_gossip_pull.rs +++ b/gossip/src/crds_gossip_pull.rs @@ -17,7 +17,7 @@ use { cluster_info_metrics::GossipStats, contact_info::ContactInfo, crds::{Crds, GossipRoute, VersionedCrdsValue}, - crds_gossip::{get_stake, get_weight}, + crds_gossip::{self, get_stake, get_weight}, crds_gossip_error::CrdsGossipError, crds_value::CrdsValue, ping_pong::PingCache, @@ -244,22 +244,25 @@ impl CrdsGossipPull { ); // Check for nodes which have responded to ping messages. let mut rng = rand::thread_rng(); - let (weights, peers): (Vec<_>, Vec<_>) = { + let peers: Vec<_> = { let mut ping_cache = ping_cache.lock().unwrap(); let mut pingf = move || Ping::new_rand(&mut rng, self_keypair).ok(); let now = Instant::now(); peers .into_iter() - .filter_map(|(weight, peer)| { + .filter(|(_weight, peer)| { let node = (peer.id, peer.gossip); let (check, ping) = ping_cache.check(now, node, &mut pingf); if let Some(ping) = ping { pings.push((peer.gossip, ping)); } - check.then(|| (weight, peer)) + check }) - .unzip() + .collect() }; + let (weights, peers): (Vec<_>, Vec<_>) = crds_gossip::dedup_gossip_addresses(peers) + .into_values() + .unzip(); if peers.is_empty() { return Err(CrdsGossipError::NoPeers); } diff --git a/gossip/src/crds_gossip_push.rs b/gossip/src/crds_gossip_push.rs index 9017c94e5fcad3..a5db5cbd1a6b22 100644 --- a/gossip/src/crds_gossip_push.rs +++ b/gossip/src/crds_gossip_push.rs @@ -16,7 +16,7 @@ use { cluster_info::{Ping, CRDS_UNIQUE_PUBKEY_CAPACITY}, contact_info::ContactInfo, crds::{Crds, Cursor, GossipRoute}, - crds_gossip::{get_stake, get_weight}, + crds_gossip::{self, get_stake, get_weight}, crds_value::CrdsValue, ping_pong::PingCache, weighted_shuffle::WeightedShuffle, @@ -374,22 +374,26 @@ impl CrdsGossipPush { socket_addr_space, ); // Check for nodes which have responded to ping messages. - let (weights, peers): (Vec<_>, Vec<_>) = { + let peers: Vec<_> = { let mut ping_cache = ping_cache.lock().unwrap(); let mut pingf = move || Ping::new_rand(&mut rng, self_keypair).ok(); let now = Instant::now(); peers .into_iter() - .filter_map(|(weight, peer)| { + .filter(|(_weight, peer)| { let node = (peer.id, peer.gossip); let (check, ping) = ping_cache.check(now, node, &mut pingf); if let Some(ping) = ping { pings.push((peer.gossip, ping)); } - check.then(|| (weight, peer.id)) + check }) - .unzip() + .collect() }; + let (weights, peers): (Vec<_>, Vec<_>) = crds_gossip::dedup_gossip_addresses(peers) + .into_values() + .map(|(weight, node)| (weight, node.id)) + .unzip(); if peers.is_empty() { return; } @@ -717,7 +721,8 @@ mod tests { let active_set = push.active_set.read().unwrap(); assert!(active_set.get(&value1.label().pubkey()).is_some()); - let value2 = ContactInfo::new_localhost(&solana_sdk::pubkey::new_rand(), 0); + let mut value2 = ContactInfo::new_localhost(&solana_sdk::pubkey::new_rand(), 0); + value2.gossip.set_port(1245); ping_cache .lock() .unwrap() @@ -753,8 +758,9 @@ mod tests { let active_set = push.active_set.read().unwrap(); assert!(active_set.get(&value2.label().pubkey()).is_some()); } - for _ in 0..push.num_active { - let value2 = ContactInfo::new_localhost(&solana_sdk::pubkey::new_rand(), 0); + for k in 0..push.num_active { + let mut value2 = ContactInfo::new_localhost(&solana_sdk::pubkey::new_rand(), 0); + value2.gossip.set_port(1246 + k as u16); ping_cache .lock() .unwrap() diff --git a/gossip/src/crds_value.rs b/gossip/src/crds_value.rs index cbee1542f92008..1e40a2954eb950 100644 --- a/gossip/src/crds_value.rs +++ b/gossip/src/crds_value.rs @@ -148,7 +148,8 @@ impl CrdsData { // the mainnet crds table. match kind { 0 => CrdsData::ContactInfo(ContactInfo::new_rand(rng, pubkey)), - 1 => CrdsData::LowestSlot(rng.gen(), LowestSlot::new_rand(rng, pubkey)), + // Index for LowestSlot is deprecated and should be zero. + 1 => CrdsData::LowestSlot(0, LowestSlot::new_rand(rng, pubkey)), 2 => CrdsData::SnapshotHashes(SnapshotHashes::new_rand(rng, pubkey)), 3 => CrdsData::AccountsHashes(SnapshotHashes::new_rand(rng, pubkey)), 4 => CrdsData::Version(Version::new_rand(rng, pubkey)), @@ -864,7 +865,7 @@ mod test { let index = rng.gen_range(0, keys.len()); CrdsValue::new_rand(&mut rng, Some(&keys[index])) }) - .take(2048) + .take(1 << 12) .collect(); let mut currents = HashMap::new(); for value in filter_current(&values) { @@ -888,10 +889,12 @@ mod test { } } assert_eq!(count, currents.len()); - // Currently CrdsData::new_rand is only implemented for 5 different - // kinds and excludes EpochSlots, and so the unique labels cannot be - // more than (5 + MAX_VOTES) times number of keys. - assert!(currents.len() <= keys.len() * (5 + MAX_VOTES as usize)); + // Currently CrdsData::new_rand is implemented for: + // AccountsHashes, ContactInfo, LowestSlot, SnapshotHashes, Version + // EpochSlots x MAX_EPOCH_SLOTS + // Vote x MAX_VOTES + let num_kinds = 5 + MAX_VOTES as usize + MAX_EPOCH_SLOTS as usize; + assert!(currents.len() <= keys.len() * num_kinds); } #[test] From 5e725a2e3e178c04fa2f492d75d9a444f98d8738 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Thu, 5 Jan 2023 11:54:19 -0800 Subject: [PATCH 274/465] solana-install: check for fixed releases directly (backport #29365) (#29520) solana-install: check for fixed releases directly (#29365) when initializing, if a specific release is requested, we only need to confirm it exists this can be done with the download url itself, rather than pulling the list of releases (cherry picked from commit 023509ff1ba01961f05398c71be89bb3a23aaaf4) Co-authored-by: hana <81144685+2501babe@users.noreply.github.com> --- install/src/command.rs | 119 ++++++++++++++++++++++++++--------------- 1 file changed, 76 insertions(+), 43 deletions(-) diff --git a/install/src/command.rs b/install/src/command.rs index c5d29f47108be8..df2034d2538340 100644 --- a/install/src/command.rs +++ b/install/src/command.rs @@ -851,6 +851,11 @@ pub struct GithubRelease { pub prerelease: bool, } +#[derive(Debug, Deserialize, Serialize)] +pub struct GithubError { + pub message: String, +} + #[derive(Debug, Deserialize, Serialize)] pub struct GithubReleases(Vec); @@ -864,14 +869,41 @@ fn semver_of(string: &str) -> Result { } fn check_for_newer_github_release( - version_filter: Option, + current_release_semver: &str, + semver_update_type: SemverUpdateType, prerelease_allowed: bool, -) -> reqwest::Result> { - let mut page = 1; - const PER_PAGE: usize = 100; +) -> Result, String> { let client = reqwest::blocking::Client::builder() .user_agent("solana-install") - .build()?; + .build() + .map_err(|err| err.to_string())?; + + // If we want a fixed version, we don't need to stress the API to check whether it exists + if semver_update_type == SemverUpdateType::Fixed { + let download_url = github_release_download_url(current_release_semver); + let response = client + .head(download_url.as_str()) + .send() + .map_err(|err| err.to_string())?; + + if response.status() == reqwest::StatusCode::OK { + return Ok(Some(current_release_semver.to_string())); + } + } + + let version_filter = semver::VersionReq::parse(&format!( + "{}{}", + match semver_update_type { + SemverUpdateType::Fixed => "=", + SemverUpdateType::Patch => "~", + SemverUpdateType::_Minor => "^", + }, + current_release_semver + )) + .ok(); + + let mut page = 1; + const PER_PAGE: usize = 100; let mut all_releases = vec![]; let mut releases = vec![]; @@ -884,39 +916,48 @@ fn check_for_newer_github_release( ], ) .unwrap(); - let request = client.get(url).build()?; - let response = client.execute(request)?; - - releases = response - .json::()? - .0 - .into_iter() - .filter_map( - |GithubRelease { - tag_name, - prerelease, - }| { - if let Ok(version) = semver_of(&tag_name) { - if (prerelease_allowed || !prerelease) - && version_filter - .as_ref() - .map_or(true, |version_filter| version_filter.matches(&version)) - { - return Some(version); + let request = client.get(url).build().map_err(|err| err.to_string())?; + let response = client.execute(request).map_err(|err| err.to_string())?; + + if response.status() == reqwest::StatusCode::OK { + releases = response + .json::() + .map_err(|err| err.to_string())? + .0 + .into_iter() + .filter_map( + |GithubRelease { + tag_name, + prerelease, + }| { + if let Ok(version) = semver_of(&tag_name) { + if (prerelease_allowed || !prerelease) + && version_filter + .as_ref() + .map_or(true, |version_filter| version_filter.matches(&version)) + { + return Some(version); + } } - } - None - }, - ) - .collect::>(); - all_releases.extend_from_slice(&releases); - page += 1; + None + }, + ) + .collect::>(); + all_releases.extend_from_slice(&releases); + page += 1; + } else { + return Err(response + .json::() + .map_err(|err| err.to_string())? + .message); + } } all_releases.sort(); Ok(all_releases.pop().map(|r| r.to_string())) } +#[derive(Debug, PartialEq, Eq)] pub enum SemverUpdateType { Fixed, Patch, @@ -945,19 +986,11 @@ pub fn init_or_update(config_file: &str, is_init: bool, check_only: bool) -> Res progress_bar.set_message(format!("{}Checking for updates...", LOOKING_GLASS)); let github_release = check_for_newer_github_release( - semver::VersionReq::parse(&format!( - "{}{}", - match semver_update_type { - SemverUpdateType::Fixed => "=", - SemverUpdateType::Patch => "~", - SemverUpdateType::_Minor => "^", - }, - current_release_semver - )) - .ok(), + current_release_semver, + semver_update_type, is_init, - ) - .map_err(|err| err.to_string())?; + )?; + progress_bar.finish_and_clear(); match github_release { From 081ceb094577b3c84350c8804765250c318595bb Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Thu, 5 Jan 2023 15:22:56 -0700 Subject: [PATCH 275/465] Add a SanitizedMessage type that caches writable accounts indexes (backport #27317) (#29538) * Add a SanitizedMessage type that caches writable accounts indexes (#27317) * Add a SanitizedMessage type that caches writable accounts indexes * Add is_writable_account_cache to both SanitizedMessage variants, cache is initialized in constructors (cherry picked from commit 5e71f339c94f4ab2b2f20a6e7f5fc42c0661952f) # Conflicts: # sdk/src/transaction/sanitized.rs * Fix conflicts Co-authored-by: Tao Zhu <82401714+taozhu-chicago@users.noreply.github.com> Co-authored-by: Tyera Eulberg --- rpc/src/transaction_status_service.rs | 4 +- runtime/src/message_processor.rs | 105 ++++++------ sdk/program/src/message/sanitized.rs | 157 +++++++++++++++--- sdk/program/src/message/versions/v0/loaded.rs | 83 +++++++-- sdk/src/transaction/sanitized.rs | 19 ++- 5 files changed, 276 insertions(+), 92 deletions(-) diff --git a/rpc/src/transaction_status_service.rs b/rpc/src/transaction_status_service.rs index 4d393a01262b67..d0a3fde0cb2ec0 100644 --- a/rpc/src/transaction_status_service.rs +++ b/rpc/src/transaction_status_service.rs @@ -228,7 +228,7 @@ pub(crate) mod tests { clock::Slot, hash::Hash, instruction::CompiledInstruction, - message::{Message, MessageHeader, SanitizedMessage}, + message::{LegacyMessage, Message, MessageHeader, SanitizedMessage}, nonce::{self, state::DurableNonce}, nonce_account, pubkey::Pubkey, @@ -372,7 +372,7 @@ pub(crate) mod tests { durable_nonce_fee: Some(DurableNonceFee::from( &NonceFull::from_partial( rollback_partial, - &SanitizedMessage::Legacy(message), + &SanitizedMessage::Legacy(LegacyMessage::new(message)), &[(pubkey, nonce_account)], &rent_debits, ) diff --git a/runtime/src/message_processor.rs b/runtime/src/message_processor.rs index 01ed3273338756..2077b441906dff 100644 --- a/runtime/src/message_processor.rs +++ b/runtime/src/message_processor.rs @@ -182,7 +182,7 @@ mod tests { solana_sdk::{ account::{AccountSharedData, ReadableAccount}, instruction::{AccountMeta, Instruction, InstructionError}, - message::{AccountKeys, Message}, + message::{AccountKeys, LegacyMessage, Message}, native_loader::{self, create_loadable_account_for_test}, pubkey::Pubkey, secp256k1_instruction::new_secp256k1_instruction, @@ -273,20 +273,21 @@ mod tests { AccountMeta::new_readonly(readonly_pubkey, false), ]; - let message = SanitizedMessage::Legacy(Message::new_with_compiled_instructions( - 1, - 0, - 2, - account_keys.clone(), - Hash::default(), - AccountKeys::new(&account_keys, None).compile_instructions(&[ - Instruction::new_with_bincode( - mock_system_program_id, - &MockSystemInstruction::Correct, - account_metas.clone(), - ), - ]), - )); + let message = + SanitizedMessage::Legacy(LegacyMessage::new(Message::new_with_compiled_instructions( + 1, + 0, + 2, + account_keys.clone(), + Hash::default(), + AccountKeys::new(&account_keys, None).compile_instructions(&[ + Instruction::new_with_bincode( + mock_system_program_id, + &MockSystemInstruction::Correct, + account_metas.clone(), + ), + ]), + ))); let sysvar_cache = SysvarCache::default(); let result = MessageProcessor::process_message( builtin_programs, @@ -323,20 +324,21 @@ mod tests { 0 ); - let message = SanitizedMessage::Legacy(Message::new_with_compiled_instructions( - 1, - 0, - 2, - account_keys.clone(), - Hash::default(), - AccountKeys::new(&account_keys, None).compile_instructions(&[ - Instruction::new_with_bincode( - mock_system_program_id, - &MockSystemInstruction::TransferLamports { lamports: 50 }, - account_metas.clone(), - ), - ]), - )); + let message = + SanitizedMessage::Legacy(LegacyMessage::new(Message::new_with_compiled_instructions( + 1, + 0, + 2, + account_keys.clone(), + Hash::default(), + AccountKeys::new(&account_keys, None).compile_instructions(&[ + Instruction::new_with_bincode( + mock_system_program_id, + &MockSystemInstruction::TransferLamports { lamports: 50 }, + account_metas.clone(), + ), + ]), + ))); let result = MessageProcessor::process_message( builtin_programs, &message, @@ -362,20 +364,21 @@ mod tests { )) ); - let message = SanitizedMessage::Legacy(Message::new_with_compiled_instructions( - 1, - 0, - 2, - account_keys.clone(), - Hash::default(), - AccountKeys::new(&account_keys, None).compile_instructions(&[ - Instruction::new_with_bincode( - mock_system_program_id, - &MockSystemInstruction::ChangeData { data: 50 }, - account_metas, - ), - ]), - )); + let message = + SanitizedMessage::Legacy(LegacyMessage::new(Message::new_with_compiled_instructions( + 1, + 0, + 2, + account_keys.clone(), + Hash::default(), + AccountKeys::new(&account_keys, None).compile_instructions(&[ + Instruction::new_with_bincode( + mock_system_program_id, + &MockSystemInstruction::ChangeData { data: 50 }, + account_metas, + ), + ]), + ))); let result = MessageProcessor::process_message( builtin_programs, &message, @@ -504,14 +507,14 @@ mod tests { ]; // Try to borrow mut the same account - let message = SanitizedMessage::Legacy(Message::new( + let message = SanitizedMessage::Legacy(LegacyMessage::new(Message::new( &[Instruction::new_with_bincode( mock_program_id, &MockSystemInstruction::BorrowFail, account_metas.clone(), )], Some(transaction_context.get_key_of_account_at_index(0).unwrap()), - )); + ))); let sysvar_cache = SysvarCache::default(); let result = MessageProcessor::process_message( builtin_programs, @@ -539,14 +542,14 @@ mod tests { ); // Try to borrow mut the same account in a safe way - let message = SanitizedMessage::Legacy(Message::new( + let message = SanitizedMessage::Legacy(LegacyMessage::new(Message::new( &[Instruction::new_with_bincode( mock_program_id, &MockSystemInstruction::MultiBorrowMut, account_metas.clone(), )], Some(transaction_context.get_key_of_account_at_index(0).unwrap()), - )); + ))); let result = MessageProcessor::process_message( builtin_programs, &message, @@ -567,7 +570,7 @@ mod tests { assert!(result.is_ok()); // Do work on the same transaction account but at different instruction accounts - let message = SanitizedMessage::Legacy(Message::new( + let message = SanitizedMessage::Legacy(LegacyMessage::new(Message::new( &[Instruction::new_with_bincode( mock_program_id, &MockSystemInstruction::DoWork { @@ -577,7 +580,7 @@ mod tests { account_metas, )], Some(transaction_context.get_key_of_account_at_index(0).unwrap()), - )); + ))); let result = MessageProcessor::process_message( builtin_programs, &message, @@ -647,7 +650,7 @@ mod tests { let mut transaction_context = TransactionContext::new(accounts, Some(Rent::default()), 1, 2); - let message = SanitizedMessage::Legacy(Message::new( + let message = SanitizedMessage::Legacy(LegacyMessage::new(Message::new( &[ new_secp256k1_instruction( &libsecp256k1::SecretKey::random(&mut rand::thread_rng()), @@ -656,7 +659,7 @@ mod tests { Instruction::new_with_bytes(mock_program_id, &[], vec![]), ], None, - )); + ))); let sysvar_cache = SysvarCache::default(); let result = MessageProcessor::process_message( builtin_programs, diff --git a/sdk/program/src/message/sanitized.rs b/sdk/program/src/message/sanitized.rs index b5ac09f45f0cc6..a71164193c6954 100644 --- a/sdk/program/src/message/sanitized.rs +++ b/sdk/program/src/message/sanitized.rs @@ -3,7 +3,7 @@ use { hash::Hash, instruction::CompiledInstruction, message::{ - legacy::Message as LegacyMessage, + legacy, v0::{self, LoadedAddresses}, AccountKeys, AddressLoader, AddressLoaderError, MessageHeader, SanitizedVersionedMessage, VersionedMessage, @@ -15,15 +15,61 @@ use { solana_program::{system_instruction::SystemInstruction, system_program}, sysvar::instructions::{BorrowedAccountMeta, BorrowedInstruction}, }, - std::convert::TryFrom, + std::{borrow::Cow, convert::TryFrom}, thiserror::Error, }; +#[derive(Debug, Clone)] +pub struct LegacyMessage<'a> { + /// Legacy message + pub message: Cow<'a, legacy::Message>, + /// List of boolean with same length as account_keys(), each boolean value indicates if + /// corresponding account key is writable or not. + pub is_writable_account_cache: Vec, +} + +impl<'a> LegacyMessage<'a> { + pub fn new(message: legacy::Message) -> Self { + let is_writable_account_cache = message + .account_keys + .iter() + .enumerate() + .map(|(i, _key)| message.is_writable(i)) + .collect::>(); + Self { + message: Cow::Owned(message), + is_writable_account_cache, + } + } + + pub fn has_duplicates(&self) -> bool { + self.message.has_duplicates() + } + + pub fn is_key_called_as_program(&self, key_index: usize) -> bool { + self.message.is_key_called_as_program(key_index) + } + + /// Inspect all message keys for the bpf upgradeable loader + pub fn is_upgradeable_loader_present(&self) -> bool { + self.message.is_upgradeable_loader_present() + } + + /// Returns the full list of account keys. + pub fn account_keys(&self) -> AccountKeys { + AccountKeys::new(&self.message.account_keys, None) + } + + pub fn is_writable(&self, index: usize) -> bool { + *self.is_writable_account_cache.get(index).unwrap_or(&false) + } +} + /// Sanitized message of a transaction. #[derive(Debug, Clone)] pub enum SanitizedMessage { /// Sanitized legacy message - Legacy(LegacyMessage), + Legacy(LegacyMessage<'static>), /// Sanitized version #0 message with dynamically loaded addresses V0(v0::LoadedMessage<'static>), } @@ -50,11 +96,11 @@ impl From for SanitizeMessageError { } } -impl TryFrom for SanitizedMessage { +impl TryFrom for SanitizedMessage { type Error = SanitizeMessageError; - fn try_from(message: LegacyMessage) -> Result { + fn try_from(message: legacy::Message) -> Result { message.sanitize()?; - Ok(Self::Legacy(message)) + Ok(Self::Legacy(LegacyMessage::new(message))) } } @@ -67,7 +113,9 @@ impl SanitizedMessage { address_loader: impl AddressLoader, ) -> Result { Ok(match sanitized_msg.message { - VersionedMessage::Legacy(message) => SanitizedMessage::Legacy(message), + VersionedMessage::Legacy(message) => { + SanitizedMessage::Legacy(LegacyMessage::new(message)) + } VersionedMessage::V0(message) => { let loaded_addresses = address_loader.load_addresses(&message.address_table_lookups)?; @@ -88,15 +136,15 @@ impl SanitizedMessage { /// readonly accounts pub fn header(&self) -> &MessageHeader { match self { - Self::Legacy(message) => &message.header, + Self::Legacy(legacy_message) => &legacy_message.message.header, Self::V0(loaded_msg) => &loaded_msg.message.header, } } /// Returns a legacy message if this sanitized message wraps one - pub fn legacy_message(&self) -> Option<&LegacyMessage> { - if let Self::Legacy(message) = &self { - Some(message) + pub fn legacy_message(&self) -> Option<&legacy::Message> { + if let Self::Legacy(legacy_message) = &self { + Some(&legacy_message.message) } else { None } @@ -112,7 +160,7 @@ impl SanitizedMessage { /// The hash of a recent block, used for timing out a transaction pub fn recent_blockhash(&self) -> &Hash { match self { - Self::Legacy(message) => &message.recent_blockhash, + Self::Legacy(legacy_message) => &legacy_message.message.recent_blockhash, Self::V0(loaded_msg) => &loaded_msg.message.recent_blockhash, } } @@ -121,7 +169,7 @@ impl SanitizedMessage { /// one atomic transaction if all succeed. pub fn instructions(&self) -> &[CompiledInstruction] { match self { - Self::Legacy(message) => &message.instructions, + Self::Legacy(legacy_message) => &legacy_message.message.instructions, Self::V0(loaded_msg) => &loaded_msg.message.instructions, } } @@ -144,7 +192,7 @@ impl SanitizedMessage { /// Returns the list of account keys that are loaded for this message. pub fn account_keys(&self) -> AccountKeys { match self { - Self::Legacy(message) => AccountKeys::new(&message.account_keys, None), + Self::Legacy(message) => message.account_keys(), Self::V0(message) => message.account_keys(), } } @@ -295,9 +343,9 @@ mod tests { #[test] fn test_try_from_message() { - let legacy_message_with_no_signers = LegacyMessage { + let legacy_message_with_no_signers = legacy::Message { account_keys: vec![Pubkey::new_unique()], - ..LegacyMessage::default() + ..legacy::Message::default() }; assert_eq!( @@ -316,7 +364,7 @@ mod tests { CompiledInstruction::new(2, &(), vec![0, 1]), ]; - let message = SanitizedMessage::try_from(LegacyMessage::new_with_compiled_instructions( + let message = SanitizedMessage::try_from(legacy::Message::new_with_compiled_instructions( 1, 0, 2, @@ -340,14 +388,14 @@ mod tests { let key4 = Pubkey::new_unique(); let key5 = Pubkey::new_unique(); - let legacy_message = SanitizedMessage::try_from(LegacyMessage { + let legacy_message = SanitizedMessage::try_from(legacy::Message { header: MessageHeader { num_required_signatures: 2, num_readonly_signed_accounts: 1, num_readonly_unsigned_accounts: 1, }, account_keys: vec![key0, key1, key2, key3], - ..LegacyMessage::default() + ..legacy::Message::default() }) .unwrap(); @@ -384,7 +432,7 @@ mod tests { CompiledInstruction::new(3, &(), vec![0, 0]), ]; - let message = SanitizedMessage::try_from(LegacyMessage::new_with_compiled_instructions( + let message = SanitizedMessage::try_from(legacy::Message::new_with_compiled_instructions( 2, 1, 2, @@ -411,4 +459,73 @@ mod tests { HashSet::default() ); } + + #[test] + fn test_is_writable_account_cache() { + let key0 = Pubkey::new_unique(); + let key1 = Pubkey::new_unique(); + let key2 = Pubkey::new_unique(); + let key3 = Pubkey::new_unique(); + let key4 = Pubkey::new_unique(); + let key5 = Pubkey::new_unique(); + + let legacy_message = SanitizedMessage::try_from(legacy::Message { + header: MessageHeader { + num_required_signatures: 2, + num_readonly_signed_accounts: 1, + num_readonly_unsigned_accounts: 1, + }, + account_keys: vec![key0, key1, key2, key3], + ..legacy::Message::default() + }) + .unwrap(); + match legacy_message { + SanitizedMessage::Legacy(message) => { + assert_eq!( + message.is_writable_account_cache.len(), + message.account_keys().len() + ); + assert!(message.is_writable_account_cache.get(0).unwrap()); + assert!(!message.is_writable_account_cache.get(1).unwrap()); + assert!(message.is_writable_account_cache.get(2).unwrap()); + assert!(!message.is_writable_account_cache.get(3).unwrap()); + } + _ => { + panic!("Expect to be SanitizedMessage::LegacyMessage") + } + } + + let v0_message = SanitizedMessage::V0(v0::LoadedMessage::new( + v0::Message { + header: MessageHeader { + num_required_signatures: 2, + num_readonly_signed_accounts: 1, + num_readonly_unsigned_accounts: 1, + }, + account_keys: vec![key0, key1, key2, key3], + ..v0::Message::default() + }, + LoadedAddresses { + writable: vec![key4], + readonly: vec![key5], + }, + )); + match v0_message { + SanitizedMessage::V0(message) => { + assert_eq!( + message.is_writable_account_cache.len(), + message.account_keys().len() + ); + assert!(message.is_writable_account_cache.get(0).unwrap()); + assert!(!message.is_writable_account_cache.get(1).unwrap()); + assert!(message.is_writable_account_cache.get(2).unwrap()); + assert!(!message.is_writable_account_cache.get(3).unwrap()); + assert!(message.is_writable_account_cache.get(4).unwrap()); + assert!(!message.is_writable_account_cache.get(5).unwrap()); + } + _ => { + panic!("Expect to be SanitizedMessage::V0") + } + } + } } diff --git a/sdk/program/src/message/versions/v0/loaded.rs b/sdk/program/src/message/versions/v0/loaded.rs index c1a7adb260be43..dc3a12f661b4d0 100644 --- a/sdk/program/src/message/versions/v0/loaded.rs +++ b/sdk/program/src/message/versions/v0/loaded.rs @@ -14,6 +14,9 @@ pub struct LoadedMessage<'a> { pub message: Cow<'a, v0::Message>, /// Addresses loaded with on-chain address lookup tables pub loaded_addresses: Cow<'a, LoadedAddresses>, + /// List of boolean with same length as account_keys(), each boolean value indicates if + /// corresponding account key is writable or not. + pub is_writable_account_cache: Vec, } /// Collection of addresses loaded from on-chain lookup tables, split @@ -53,17 +56,36 @@ impl LoadedAddresses { impl<'a> LoadedMessage<'a> { pub fn new(message: v0::Message, loaded_addresses: LoadedAddresses) -> Self { - Self { + let mut loaded_message = Self { message: Cow::Owned(message), loaded_addresses: Cow::Owned(loaded_addresses), - } + is_writable_account_cache: Vec::default(), + }; + loaded_message.set_is_writable_account_cache(); + loaded_message } pub fn new_borrowed(message: &'a v0::Message, loaded_addresses: &'a LoadedAddresses) -> Self { - Self { + let mut loaded_message = Self { message: Cow::Borrowed(message), loaded_addresses: Cow::Borrowed(loaded_addresses), - } + is_writable_account_cache: Vec::default(), + }; + loaded_message.set_is_writable_account_cache(); + loaded_message + } + + fn set_is_writable_account_cache(&mut self) { + let is_writable_account_cache = self + .account_keys() + .iter() + .enumerate() + .map(|(i, _key)| self.is_writable_internal(i)) + .collect::>(); + let _ = std::mem::replace( + &mut self.is_writable_account_cache, + is_writable_account_cache, + ); } /// Returns the full list of static and dynamic account keys that are loaded for this message. @@ -105,7 +127,7 @@ impl<'a> LoadedMessage<'a> { } /// Returns true if the account at the specified index was loaded as writable - pub fn is_writable(&self, key_index: usize) -> bool { + fn is_writable_internal(&self, key_index: usize) -> bool { if self.is_writable_index(key_index) { if let Some(key) = self.account_keys().get(key_index) { return !(is_builtin_key_or_sysvar(key) || self.demote_program_id(key_index)); @@ -114,6 +136,13 @@ impl<'a> LoadedMessage<'a> { false } + pub fn is_writable(&self, key_index: usize) -> bool { + *self + .is_writable_account_cache + .get(key_index) + .unwrap_or(&false) + } + pub fn is_signer(&self, i: usize) -> bool { i < self.message.header.num_required_signatures as usize } @@ -227,15 +256,45 @@ mod tests { #[test] fn test_is_writable() { - let mut message = check_test_loaded_message().0; + solana_logger::setup(); + let create_message_with_keys = |keys: Vec| { + LoadedMessage::new( + v0::Message { + header: MessageHeader { + num_required_signatures: 1, + num_readonly_signed_accounts: 0, + num_readonly_unsigned_accounts: 1, + }, + account_keys: keys[..2].to_vec(), + ..v0::Message::default() + }, + LoadedAddresses { + writable: keys[2..=2].to_vec(), + readonly: keys[3..].to_vec(), + }, + ) + }; - message.message.to_mut().account_keys[0] = sysvar::clock::id(); - assert!(message.is_writable_index(0)); - assert!(!message.is_writable(0)); + let key0 = Pubkey::new_unique(); + let key1 = Pubkey::new_unique(); + let key2 = Pubkey::new_unique(); + { + let message = create_message_with_keys(vec![sysvar::clock::id(), key0, key1, key2]); + assert!(message.is_writable_index(0)); + assert!(!message.is_writable(0)); + } - message.message.to_mut().account_keys[0] = system_program::id(); - assert!(message.is_writable_index(0)); - assert!(!message.is_writable(0)); + { + let message = create_message_with_keys(vec![system_program::id(), key0, key1, key2]); + assert!(message.is_writable_index(0)); + assert!(!message.is_writable(0)); + } + + { + let message = create_message_with_keys(vec![key0, key1, system_program::id(), key2]); + assert!(message.is_writable_index(2)); + assert!(!message.is_writable(2)); + } } #[test] diff --git a/sdk/src/transaction/sanitized.rs b/sdk/src/transaction/sanitized.rs index 69fcaee812d8c9..c416c00b0de6ec 100644 --- a/sdk/src/transaction/sanitized.rs +++ b/sdk/src/transaction/sanitized.rs @@ -6,8 +6,9 @@ use { crate::{ hash::Hash, message::{ + legacy, v0::{self, LoadedAddresses}, - SanitizedMessage, VersionedMessage, + LegacyMessage, SanitizedMessage, VersionedMessage, }, precompiles::verify_if_precompile, pubkey::Pubkey, @@ -69,7 +70,9 @@ impl SanitizedTransaction { let signatures = tx.signatures; let SanitizedVersionedMessage { message } = tx.message; let message = match message { - VersionedMessage::Legacy(message) => SanitizedMessage::Legacy(message), + VersionedMessage::Legacy(message) => { + SanitizedMessage::Legacy(LegacyMessage::new(message)) + } VersionedMessage::V0(message) => { let loaded_addresses = address_loader.load_addresses(&message.address_table_lookups)?; @@ -104,7 +107,9 @@ impl SanitizedTransaction { let signatures = tx.signatures; let message = match tx.message { - VersionedMessage::Legacy(message) => SanitizedMessage::Legacy(message), + VersionedMessage::Legacy(message) => { + SanitizedMessage::Legacy(LegacyMessage::new(message)) + } VersionedMessage::V0(message) => { let loaded_addresses = address_loader.load_addresses(&message.address_table_lookups)?; @@ -131,7 +136,7 @@ impl SanitizedTransaction { Ok(Self { message_hash: tx.message.hash(), - message: SanitizedMessage::Legacy(tx.message), + message: SanitizedMessage::Legacy(LegacyMessage::new(tx.message)), is_simple_vote_tx: false, signatures: tx.signatures, }) @@ -182,9 +187,9 @@ impl SanitizedTransaction { signatures, message: VersionedMessage::V0(v0::Message::clone(&sanitized_msg.message)), }, - SanitizedMessage::Legacy(message) => VersionedTransaction { + SanitizedMessage::Legacy(legacy_message) => VersionedTransaction { signatures, - message: VersionedMessage::Legacy(message.clone()), + message: VersionedMessage::Legacy(legacy::Message::clone(&legacy_message.message)), }, } } @@ -242,7 +247,7 @@ impl SanitizedTransaction { /// Return the serialized message data to sign. fn message_data(&self) -> Vec { match &self.message { - SanitizedMessage::Legacy(message) => message.serialize(), + SanitizedMessage::Legacy(legacy_message) => legacy_message.message.serialize(), SanitizedMessage::V0(loaded_msg) => loaded_msg.message.serialize(), } } From d035af1340f0ebbab62691a35126208347cde7e5 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Thu, 5 Jan 2023 23:29:20 -0800 Subject: [PATCH 276/465] require repair request signature, ping/pong for Testnet, Development clusters (backport #29351) (#29529) * require repair request signature, ping/pong for Testnet, Development clusters (#29351) (cherry picked from commit 832302485e61cc0f359b91f6c8f0c383caaf6629) # Conflicts: # core/src/serve_repair.rs * resolve merge conflicts Co-authored-by: Jeff Biseda --- core/src/ancestor_hashes_service.rs | 76 ++++++++++++++++++++++++++++- core/src/serve_repair.rs | 29 +++++++---- 2 files changed, 94 insertions(+), 11 deletions(-) diff --git a/core/src/ancestor_hashes_service.rs b/core/src/ancestor_hashes_service.rs index a040e23cb4f7ee..48e1c07dd1478e 100644 --- a/core/src/ancestor_hashes_service.rs +++ b/core/src/ancestor_hashes_service.rs @@ -773,7 +773,7 @@ mod test { cluster_info::{ClusterInfo, Node}, contact_info::ContactInfo, }, - solana_ledger::{blockstore::make_many_slot_entries, get_tmp_ledger_path}, + solana_ledger::{blockstore::make_many_slot_entries, get_tmp_ledger_path, shred::Nonce}, solana_runtime::{accounts_background_service::AbsRequestSender, bank_forks::BankForks}, solana_sdk::{ hash::Hash, @@ -1132,6 +1132,26 @@ mod test { replay_blockstore_components } + fn send_ancestor_repair_request( + requester_serve_repair: &ServeRepair, + requester_cluster_info: &ClusterInfo, + responder_info: &ContactInfo, + ancestor_hashes_request_socket: &UdpSocket, + dead_slot: Slot, + nonce: Nonce, + ) { + let request_bytes = requester_serve_repair.ancestor_repair_request_bytes( + &requester_cluster_info.keypair(), + &responder_info.id, + dead_slot, + nonce, + ); + if let Ok(request_bytes) = request_bytes { + let _ = + ancestor_hashes_request_socket.send_to(&request_bytes, responder_info.serve_repair); + } + } + #[test] fn test_ancestor_hashes_service_initiate_ancestor_hashes_requests_for_duplicate_slot() { let dead_slot = MAX_ANCESTOR_RESPONSES as Slot; @@ -1180,6 +1200,33 @@ mod test { ); assert!(ancestor_hashes_request_statuses.is_empty()); + // Send a request to generate a ping + send_ancestor_repair_request( + &requester_serve_repair, + &requester_cluster_info, + responder_info, + &ancestor_hashes_request_socket, + dead_slot, + /*nonce*/ 123, + ); + // Should have received valid response + let mut response_packet = response_receiver + .recv_timeout(Duration::from_millis(10_000)) + .unwrap(); + let packet = &mut response_packet[0]; + packet.meta.set_socket_addr(&responder_info.serve_repair); + let decision = AncestorHashesService::verify_and_process_ancestor_response( + packet, + &ancestor_hashes_request_statuses, + &mut AncestorHashesResponsesStats::default(), + &outstanding_requests, + &requester_blockstore, + &requester_cluster_info.keypair(), + &ancestor_hashes_request_socket, + ); + // should have processed a ping packet + assert_eq!(decision, None); + // Add the responder to the eligible list for requests let responder_id = responder_info.id; cluster_slots.insert_node_id(dead_slot, responder_id); @@ -1529,6 +1576,33 @@ mod test { cluster_slots.insert_node_id(dead_slot, responder_id); requester_cluster_info.insert_info(responder_info.clone()); + // Send a request to generate a ping + send_ancestor_repair_request( + &requester_serve_repair, + requester_cluster_info, + responder_info, + &ancestor_hashes_request_socket, + dead_slot, + /*nonce*/ 123, + ); + // Should have received valid response + let mut response_packet = response_receiver + .recv_timeout(Duration::from_millis(10_000)) + .unwrap(); + let packet = &mut response_packet[0]; + packet.meta.set_socket_addr(&responder_info.serve_repair); + let decision = AncestorHashesService::verify_and_process_ancestor_response( + packet, + &ancestor_hashes_request_statuses, + &mut AncestorHashesResponsesStats::default(), + &outstanding_requests, + &requester_blockstore, + &requester_cluster_info.keypair(), + &ancestor_hashes_request_socket, + ); + // Should have processed a ping packet + assert_eq!(decision, None); + // Simulate getting duplicate confirmed dead slot ancestor_hashes_replay_update_sender .send(AncestorHashesReplayUpdate::DeadDuplicateConfirmed( diff --git a/core/src/serve_repair.rs b/core/src/serve_repair.rs index a11f48dd1a4995..7acd9f0d0f4b8e 100644 --- a/core/src/serve_repair.rs +++ b/core/src/serve_repair.rs @@ -152,7 +152,6 @@ impl RequestResponse for AncestorHashesRepairType { #[derive(Default)] struct ServeRepairStats { total_requests: usize, - unsigned_requests: usize, dropped_requests_outbound_bandwidth: usize, dropped_requests_load_shed: usize, dropped_requests_low_stake: usize, @@ -451,8 +450,9 @@ impl ServeRepair { let epoch_staked_nodes = root_bank.epoch_staked_nodes(root_bank.epoch()); let identity_keypair = self.cluster_info.keypair().clone(); let my_id = identity_keypair.pubkey(); + let cluster_type = root_bank.cluster_type(); - let max_buffered_packets = if root_bank.cluster_type() != ClusterType::MainnetBeta { + let max_buffered_packets = if cluster_type != ClusterType::MainnetBeta { 2 * MAX_REQUESTS_PER_ITERATION } else { MAX_REQUESTS_PER_ITERATION @@ -488,11 +488,16 @@ impl ServeRepair { continue; } - if request.supports_signature() { - // collect stats for signature verification - Self::verify_signed_packet(&my_id, packet, &request, stats); - } else { - stats.unsigned_requests += 1; + match cluster_type { + ClusterType::Testnet | ClusterType::Development => { + if !Self::verify_signed_packet(&my_id, packet, &request, stats) { + continue; + } + } + ClusterType::MainnetBeta | ClusterType::Devnet => { + // collect stats for signature verification + let _ = Self::verify_signed_packet(&my_id, packet, &request, stats); + } } if request.sender() == &my_id { @@ -527,6 +532,7 @@ impl ServeRepair { response_sender, stats, data_budget, + cluster_type, ); Ok(()) @@ -545,7 +551,6 @@ impl ServeRepair { datapoint_info!( "serve_repair-requests_received", ("total_requests", stats.total_requests, i64), - ("unsigned_requests", stats.unsigned_requests, i64), ( "dropped_requests_outbound_bandwidth", stats.dropped_requests_outbound_bandwidth, @@ -669,6 +674,7 @@ impl ServeRepair { .unwrap() } + #[must_use] fn verify_signed_packet( my_id: &Pubkey, packet: &Packet, @@ -683,7 +689,6 @@ impl ServeRepair { | RepairProtocol::LegacyHighestWindowIndexWithNonce(_, _, _, _) | RepairProtocol::LegacyOrphanWithNonce(_, _, _) | RepairProtocol::LegacyAncestorHashes(_, _, _) => { - debug_assert!(false); // expecting only signed request types stats.err_unsigned += 1; return false; } @@ -779,6 +784,7 @@ impl ServeRepair { response_sender: &PacketBatchSender, stats: &mut ServeRepairStats, data_budget: &DataBudget, + cluster_type: ClusterType, ) { let identity_keypair = self.cluster_info.keypair().clone(); let mut pending_pings = Vec::default(); @@ -792,8 +798,11 @@ impl ServeRepair { pending_pings.push(ping_pkt); } if !check { - // collect stats for ping/pong verification stats.ping_cache_check_failed += 1; + match cluster_type { + ClusterType::Testnet | ClusterType::Development => continue, + ClusterType::MainnetBeta | ClusterType::Devnet => (), + } } } stats.processed += 1; From b76b9da5648d6ebf5c479b9f1477019cca722f51 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Fri, 6 Jan 2023 12:50:18 -0600 Subject: [PATCH 277/465] Update CI pipeline to only run `checks` step on version bump PRs (backport #29243) (#29540) Update CI pipeline to only run `checks` step on version bump PRs (#29243) * Add logic to buildkite pipeline so version bump PRs don't run the full CI (cherry picked from commit 0581fc2def0f8177ae633cbc2692394c44368d48) Co-authored-by: Will Hickey --- ci/buildkite-pipeline.sh | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/ci/buildkite-pipeline.sh b/ci/buildkite-pipeline.sh index 524b0fe5bd74f6..a8f7d3fdcf191b 100755 --- a/ci/buildkite-pipeline.sh +++ b/ci/buildkite-pipeline.sh @@ -302,6 +302,29 @@ pull_or_push_steps() { wait_step fi + # Version bump PRs are an edge case that can skip most of the CI steps + if affects .toml$ && affects .lock$ && ! affects_other_than .toml$ .lock$; then + optional_old_version_number=$(git diff "$BUILDKITE_PULL_REQUEST_BASE_BRANCH"..HEAD validator/Cargo.toml | \ + grep -e "^-version" | sed 's/-version = "\(.*\)"/\1/') + echo "optional_old_version_number: ->$optional_old_version_number<-" + new_version_number=$(grep -e "^version = " validator/Cargo.toml | sed 's/version = "\(.*\)"/\1/') + echo "new_version_number: ->$new_version_number<-" + + # Every line in a version bump diff will match one of these patterns. Since we're using grep -v the output is the + # lines that don't match. Any diff that produces output here is not a version bump. + # | cat is a no-op. If this pull request is a version bump then grep will output no lines and have an exit code of 1. + # Piping the output to cat prevents that non-zero exit code from exiting this script + diff_other_than_version_bump=$(git diff "$BUILDKITE_PULL_REQUEST_BASE_BRANCH"..HEAD | \ + grep -vE "^ |^@@ |^--- |^\+\+\+ |^index |^diff |^-( \")?solana.*$optional_old_version_number|^\+( \")?solana.*$new_version_number|^-version|^\+version"|cat) + echo "diff_other_than_version_bump: ->$diff_other_than_version_bump<-" + + if [ -z "$diff_other_than_version_bump" ]; then + echo "Diff only contains version bump." + command_step checks ". ci/rust-version.sh; ci/docker-run.sh \$\$rust_nightly_docker_image ci/test-checks.sh" 20 + exit 0 + fi + fi + # Run the full test suite by default, skipping only if modifications are local # to some particular areas of the tree if affects_other_than ^.buildkite ^.mergify .md$ ^docs/ ^web3.js/ ^explorer/ ^.gitbook; then From 6c664212abd949997c3275e8d842d0054c35fd03 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Fri, 6 Jan 2023 19:23:56 -0700 Subject: [PATCH 278/465] collect min prioritization fees when replaying sanitized transactions (backport #26709) (#29539) * collect min prioritization fees when replaying sanitized transactions (#26709) * Collect blocks' minimum prioritization fees when replaying sanitized transactions * Limits block min-fee metrics reporting to top 10 writable accounts * Add service thread to asynchronously update and finalize prioritization fee cache * Add bench test for prioritization_fee_cache Co-authored-by: Tyera Eulberg (cherry picked from commit 8bb039d08d3a90eef0b51c9ca9ed0ad3f020eaa2) # Conflicts: # core/src/immutable_deserialized_packet.rs # core/src/replay_stage.rs # core/src/tvu.rs # core/src/unprocessed_packet_batches.rs # core/src/validator.rs * Fix conflicts * Don't use api from the future * fix a flacky test (#27572) Co-authored-by: Tao Zhu <82401714+taozhu-chicago@users.noreply.github.com> Co-authored-by: Tyera Eulberg --- Cargo.lock | 1 + .../src/forward_packet_batches_by_accounts.rs | 6 +- core/src/immutable_deserialized_packet.rs | 137 +++ core/src/lib.rs | 1 - core/src/replay_stage.rs | 19 + core/src/tvu.rs | 6 +- core/src/unprocessed_packet_batches.rs | 6 +- core/src/validator.rs | 6 + ledger/src/blockstore_processor.rs | 17 + programs/bpf/Cargo.lock | 1 + runtime/Cargo.toml | 4 + runtime/benches/prioritization_fee_cache.rs | 113 +++ runtime/src/lib.rs | 3 + runtime/src/prioritization_fee.rs | 328 +++++++ runtime/src/prioritization_fee_cache.rs | 811 ++++++++++++++++++ .../src/transaction_priority_details.rs | 0 16 files changed, 1450 insertions(+), 9 deletions(-) create mode 100644 core/src/immutable_deserialized_packet.rs create mode 100644 runtime/benches/prioritization_fee_cache.rs create mode 100644 runtime/src/prioritization_fee.rs create mode 100644 runtime/src/prioritization_fee_cache.rs rename {core => runtime}/src/transaction_priority_details.rs (100%) diff --git a/Cargo.lock b/Cargo.lock index 491a196edfad7e..d739aaf72bf3ff 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -5995,6 +5995,7 @@ dependencies = [ "lazy_static", "libsecp256k1", "log", + "lru", "lz4", "memmap2", "num-derive", diff --git a/core/src/forward_packet_batches_by_accounts.rs b/core/src/forward_packet_batches_by_accounts.rs index 14fcfe486fa8d6..caeda3fae2bfb1 100644 --- a/core/src/forward_packet_batches_by_accounts.rs +++ b/core/src/forward_packet_batches_by_accounts.rs @@ -187,14 +187,12 @@ impl ForwardPacketBatchesByAccounts { mod tests { use { super::*, - crate::{ - transaction_priority_details::TransactionPriorityDetails, - unprocessed_packet_batches::DeserializedPacket, - }, + crate::unprocessed_packet_batches::DeserializedPacket, solana_runtime::{ bank::Bank, bank_forks::BankForks, genesis_utils::{create_genesis_config, GenesisConfigInfo}, + transaction_priority_details::TransactionPriorityDetails, }, solana_sdk::{hash::Hash, signature::Keypair, system_transaction}, std::sync::RwLock, diff --git a/core/src/immutable_deserialized_packet.rs b/core/src/immutable_deserialized_packet.rs new file mode 100644 index 00000000000000..0a12fcad44e17d --- /dev/null +++ b/core/src/immutable_deserialized_packet.rs @@ -0,0 +1,137 @@ +use { + solana_perf::packet::Packet, + solana_runtime::transaction_priority_details::{ + GetTransactionPriorityDetails, TransactionPriorityDetails, + }, + solana_sdk::{ + hash::Hash, + message::Message, + sanitize::SanitizeError, + short_vec::decode_shortu16_len, + signature::Signature, + transaction::{SanitizedVersionedTransaction, VersionedTransaction}, + }, + std::{cmp::Ordering, mem::size_of}, + thiserror::Error, +}; + +#[derive(Debug, Error)] +pub enum DeserializedPacketError { + #[error("ShortVec Failed to Deserialize")] + // short_vec::decode_shortu16_len() currently returns () on error + ShortVecError(()), + #[error("Deserialization Error: {0}")] + DeserializationError(#[from] bincode::Error), + #[error("overflowed on signature size {0}")] + SignatureOverflowed(usize), + #[error("packet failed sanitization {0}")] + SanitizeError(#[from] SanitizeError), + #[error("transaction failed prioritization")] + PrioritizationFailure, +} + +#[derive(Debug, PartialEq, Eq)] +pub struct ImmutableDeserializedPacket { + original_packet: Packet, + transaction: SanitizedVersionedTransaction, + message_hash: Hash, + is_simple_vote: bool, + priority_details: TransactionPriorityDetails, +} + +impl ImmutableDeserializedPacket { + pub fn new( + packet: Packet, + priority_details: Option, + ) -> Result { + let versioned_transaction: VersionedTransaction = packet.deserialize_slice(..)?; + let sanitized_transaction = SanitizedVersionedTransaction::try_from(versioned_transaction)?; + let message_bytes = packet_message(&packet)?; + let message_hash = Message::hash_raw_message(message_bytes); + let is_simple_vote = packet.meta.is_simple_vote_tx(); + + // drop transaction if prioritization fails. + let priority_details = priority_details + .or_else(|| sanitized_transaction.get_transaction_priority_details()) + .ok_or(DeserializedPacketError::PrioritizationFailure)?; + + Ok(Self { + original_packet: packet, + transaction: sanitized_transaction, + message_hash, + is_simple_vote, + priority_details, + }) + } + + pub fn original_packet(&self) -> &Packet { + &self.original_packet + } + + pub fn transaction(&self) -> &SanitizedVersionedTransaction { + &self.transaction + } + + pub fn message_hash(&self) -> &Hash { + &self.message_hash + } + + pub fn is_simple_vote(&self) -> bool { + self.is_simple_vote + } + + pub fn priority(&self) -> u64 { + self.priority_details.priority + } + + pub fn compute_unit_limit(&self) -> u64 { + self.priority_details.compute_unit_limit + } +} + +impl PartialOrd for ImmutableDeserializedPacket { + fn partial_cmp(&self, other: &Self) -> Option { + Some(self.cmp(other)) + } +} + +impl Ord for ImmutableDeserializedPacket { + fn cmp(&self, other: &Self) -> Ordering { + self.priority().cmp(&other.priority()) + } +} + +/// Read the transaction message from packet data +fn packet_message(packet: &Packet) -> Result<&[u8], DeserializedPacketError> { + let (sig_len, sig_size) = packet + .data(..) + .and_then(|bytes| decode_shortu16_len(bytes).ok()) + .ok_or(DeserializedPacketError::ShortVecError(()))?; + sig_len + .checked_mul(size_of::()) + .and_then(|v| v.checked_add(sig_size)) + .and_then(|msg_start| packet.data(msg_start..)) + .ok_or(DeserializedPacketError::SignatureOverflowed(sig_size)) +} + +#[cfg(test)] +mod tests { + use { + super::*, + solana_sdk::{signature::Keypair, system_transaction}, + }; + + #[test] + fn simple_deserialized_packet() { + let tx = system_transaction::transfer( + &Keypair::new(), + &solana_sdk::pubkey::new_rand(), + 1, + Hash::new_unique(), + ); + let packet = Packet::from_data(None, &tx).unwrap(); + let deserialized_packet = ImmutableDeserializedPacket::new(packet, None); + + assert!(matches!(deserialized_packet, Ok(_))); + } +} diff --git a/core/src/lib.rs b/core/src/lib.rs index 496a114500d1ae..33efb883df8281 100644 --- a/core/src/lib.rs +++ b/core/src/lib.rs @@ -69,7 +69,6 @@ mod tower1_7_14; pub mod tower_storage; pub mod tpu; pub mod tracer_packet_stats; -pub mod transaction_priority_details; pub mod tree_diff; pub mod tvu; pub mod unfrozen_gossip_verified_vote_hashes; diff --git a/core/src/replay_stage.rs b/core/src/replay_stage.rs index 508a57157b4d16..ba9158e1249194 100644 --- a/core/src/replay_stage.rs +++ b/core/src/replay_stage.rs @@ -57,6 +57,7 @@ use { bank::{Bank, NewBankOptions}, bank_forks::{BankForks, MAX_ROOT_DISTANCE_FOR_VOTE_ONLY}, commitment::BlockCommitmentCache, + prioritization_fee_cache::PrioritizationFeeCache, vote_sender_types::ReplayVoteSender, }, solana_sdk::{ @@ -397,6 +398,7 @@ impl ReplayStage { drop_bank_sender: Sender>>, block_metadata_notifier: Option, log_messages_bytes_limit: Option, + prioritization_fee_cache: Arc, ) -> Self { let mut tower = if let Some(process_blockstore) = maybe_process_blockstore { let tower = process_blockstore.process_to_create_tower(); @@ -530,6 +532,7 @@ impl ReplayStage { block_metadata_notifier.clone(), &mut replay_timing, log_messages_bytes_limit, + &prioritization_fee_cache, ); replay_active_banks_time.stop(); @@ -1757,6 +1760,7 @@ impl ReplayStage { replay_vote_sender: &ReplayVoteSender, verify_recyclers: &VerifyRecyclers, log_messages_bytes_limit: Option, + prioritization_fee_cache: &PrioritizationFeeCache, ) -> result::Result { let mut w_replay_stats = replay_stats.write().unwrap(); let mut w_replay_progress = replay_progress.write().unwrap(); @@ -1776,6 +1780,7 @@ impl ReplayStage { verify_recyclers, false, log_messages_bytes_limit, + prioritization_fee_cache, )?; let tx_count_after = w_replay_progress.num_txs; let tx_count = tx_count_after - tx_count_before; @@ -2278,6 +2283,7 @@ impl ReplayStage { replay_timing: &mut ReplayTiming, log_messages_bytes_limit: Option, active_bank_slots: &[Slot], + prioritization_fee_cache: &PrioritizationFeeCache, ) -> Vec { // Make mutable shared structures thread safe. let progress = RwLock::new(progress); @@ -2353,6 +2359,7 @@ impl ReplayStage { &replay_vote_sender.clone(), &verify_recyclers.clone(), log_messages_bytes_limit, + prioritization_fee_cache, ); replay_blockstore_time.stop(); replay_result.replay_result = Some(blockstore_result); @@ -2383,6 +2390,7 @@ impl ReplayStage { replay_timing: &mut ReplayTiming, log_messages_bytes_limit: Option, bank_slot: Slot, + prioritization_fee_cache: &PrioritizationFeeCache, ) -> ReplaySlotFromBlockstore { let mut replay_result = ReplaySlotFromBlockstore { is_slot_dead: false, @@ -2432,6 +2440,7 @@ impl ReplayStage { &replay_vote_sender.clone(), &verify_recyclers.clone(), log_messages_bytes_limit, + prioritization_fee_cache, ); replay_blockstore_time.stop(); replay_result.replay_result = Some(blockstore_result); @@ -2463,6 +2472,7 @@ impl ReplayStage { ancestor_hashes_replay_update_sender: &AncestorHashesReplayUpdateSender, block_metadata_notifier: Option, replay_result_vec: &[ReplaySlotFromBlockstore], + prioritization_fee_cache: &PrioritizationFeeCache, ) -> bool { // TODO: See if processing of blockstore replay results and bank completion can be made thread safe. let mut did_complete_bank = false; @@ -2535,6 +2545,9 @@ impl ReplayStage { warn!("cost_update_sender failed sending bank stats: {:?}", err) }); + // finalize block's minimum prioritization fee cache for this bank + prioritization_fee_cache.finalize_priority_fee(bank.slot()); + assert_ne!(bank.hash(), Hash::default()); // Needs to be updated before `check_slot_agrees_with_cluster()` so that // any updates in `check_slot_agrees_with_cluster()` on fork choice take @@ -2652,6 +2665,7 @@ impl ReplayStage { block_metadata_notifier: Option, replay_timing: &mut ReplayTiming, log_messages_bytes_limit: Option, + prioritization_fee_cache: &PrioritizationFeeCache, ) -> bool { let active_bank_slots = bank_forks.read().unwrap().active_bank_slots(); let num_active_banks = active_bank_slots.len(); @@ -2681,6 +2695,7 @@ impl ReplayStage { replay_timing, log_messages_bytes_limit, &active_bank_slots, + prioritization_fee_cache, ) } else { active_bank_slots @@ -2698,6 +2713,7 @@ impl ReplayStage { replay_timing, log_messages_bytes_limit, *bank_slot, + prioritization_fee_cache, ) }) .collect() @@ -2715,6 +2731,7 @@ impl ReplayStage { replay_timing, log_messages_bytes_limit, active_bank_slots[0], + prioritization_fee_cache, )] }; @@ -2739,6 +2756,7 @@ impl ReplayStage { ancestor_hashes_replay_update_sender, block_metadata_notifier, &replay_result_vec, + prioritization_fee_cache, ) } else { false @@ -4278,6 +4296,7 @@ pub(crate) mod tests { &replay_vote_sender, &VerifyRecyclers::default(), None, + &PrioritizationFeeCache::new(0u64), ); let max_complete_transaction_status_slot = Arc::new(AtomicU64::default()); let rpc_subscriptions = Arc::new(RpcSubscriptions::new_for_tests( diff --git a/core/src/tvu.rs b/core/src/tvu.rs index 990b943f7478f0..4ec82901447b99 100644 --- a/core/src/tvu.rs +++ b/core/src/tvu.rs @@ -43,7 +43,7 @@ use { solana_runtime::{ accounts_background_service::AbsRequestSender, bank_forks::BankForks, commitment::BlockCommitmentCache, cost_model::CostModel, - vote_sender_types::ReplayVoteSender, + prioritization_fee_cache::PrioritizationFeeCache, vote_sender_types::ReplayVoteSender, }, solana_sdk::{clock::Slot, pubkey::Pubkey, signature::Keypair}, std::{ @@ -129,6 +129,7 @@ impl Tvu { accounts_background_request_sender: AbsRequestSender, log_messages_bytes_limit: Option, connection_cache: &Arc, + prioritization_fee_cache: &Arc, ) -> Self { let TvuSockets { repair: repair_socket, @@ -288,6 +289,7 @@ impl Tvu { drop_bank_sender, block_metadata_notifier, log_messages_bytes_limit, + prioritization_fee_cache.clone(), ); let ledger_cleanup_service = tvu_config.max_ledger_shreds.map(|max_ledger_shreds| { @@ -401,6 +403,7 @@ pub mod tests { let (_, gossip_confirmed_slots_receiver) = unbounded(); let bank_forks = Arc::new(RwLock::new(bank_forks)); let max_complete_transaction_status_slot = Arc::new(AtomicU64::default()); + let _ignored_prioritization_fee_cache = Arc::new(PrioritizationFeeCache::new(0u64)); let tvu = Tvu::new( &vote_keypair.pubkey(), Arc::new(RwLock::new(vec![Arc::new(vote_keypair)])), @@ -450,6 +453,7 @@ pub mod tests { AbsRequestSender::default(), None, &Arc::new(ConnectionCache::default()), + &_ignored_prioritization_fee_cache, ); exit.store(true, Ordering::Relaxed); tvu.join().unwrap(); diff --git a/core/src/unprocessed_packet_batches.rs b/core/src/unprocessed_packet_batches.rs index 1973b8f9dc91ba..c732a9e2052380 100644 --- a/core/src/unprocessed_packet_batches.rs +++ b/core/src/unprocessed_packet_batches.rs @@ -1,9 +1,9 @@ use { - crate::transaction_priority_details::{ - GetTransactionPriorityDetails, TransactionPriorityDetails, - }, min_max_heap::MinMaxHeap, solana_perf::packet::{Packet, PacketBatch}, + solana_runtime::transaction_priority_details::{ + GetTransactionPriorityDetails, TransactionPriorityDetails, + }, solana_sdk::{ feature_set, hash::Hash, diff --git a/core/src/validator.rs b/core/src/validator.rs index c6880e9ec706ab..818e835d435ac9 100644 --- a/core/src/validator.rs +++ b/core/src/validator.rs @@ -79,6 +79,7 @@ use { commitment::BlockCommitmentCache, cost_model::CostModel, hardened_unpack::{open_genesis_config, MAX_GENESIS_ARCHIVE_UNPACKED_SIZE}, + prioritization_fee_cache::PrioritizationFeeCache, runtime_config::RuntimeConfig, snapshot_archive_info::SnapshotArchiveInfoGetter, snapshot_config::SnapshotConfig, @@ -793,6 +794,10 @@ impl Validator { false => Arc::new(ConnectionCache::with_udp(tpu_connection_pool_size)), }; + // block min prioritization fee cache should be readable by RPC, and writable by validator + // (for now, by replay stage) + let prioritization_fee_cache = Arc::new(PrioritizationFeeCache::default()); + let rpc_override_health_check = Arc::new(AtomicBool::new(false)); let ( json_rpc_service, @@ -1015,6 +1020,7 @@ impl Validator { accounts_background_request_sender, config.runtime_config.log_messages_bytes_limit, &connection_cache, + &prioritization_fee_cache, ); let tpu = Tpu::new( diff --git a/ledger/src/blockstore_processor.rs b/ledger/src/blockstore_processor.rs index a51612886c001c..0fbf49c7b487bb 100644 --- a/ledger/src/blockstore_processor.rs +++ b/ledger/src/blockstore_processor.rs @@ -31,6 +31,7 @@ use { block_cost_limits::*, commitment::VOTE_THRESHOLD_SIZE, cost_model::CostModel, + prioritization_fee_cache::PrioritizationFeeCache, runtime_config::RuntimeConfig, transaction_batch::TransactionBatch, vote_account::VoteAccountsHashMap, @@ -515,6 +516,7 @@ pub fn process_entries_for_tests( }) .collect(); + let _ignored_prioritization_fee_cache = PrioritizationFeeCache::new(0u64); let result = process_entries_with_callback( bank, &mut replay_entries, @@ -525,6 +527,7 @@ pub fn process_entries_for_tests( &mut confirmation_timing, Arc::new(RwLock::new(BlockCostCapacityMeter::default())), None, + &_ignored_prioritization_fee_cache, ); debug!("process_entries: {:?}", confirmation_timing); @@ -543,6 +546,7 @@ fn process_entries_with_callback( confirmation_timing: &mut ConfirmationTiming, cost_capacity_meter: Arc>, log_messages_bytes_limit: Option, + prioritization_fee_cache: &PrioritizationFeeCache, ) -> Result<()> { // accumulator for entries that can be processed in parallel let mut batches = vec![]; @@ -605,6 +609,9 @@ fn process_entries_with_callback( batch, transaction_indexes, }); + // entry is scheduled to be processed, transactions in it can be used to + // update prioritization fee cache asynchronously. + prioritization_fee_cache.update(bank.clone(), transactions.iter()); // done with this entry break; } @@ -940,6 +947,8 @@ fn confirm_full_slot( ) -> result::Result<(), BlockstoreProcessorError> { let mut confirmation_timing = ConfirmationTiming::default(); let skip_verification = !opts.poh_verify; + let _ignored_prioritization_fee_cache = PrioritizationFeeCache::new(0u64); + confirm_slot( blockstore, bank, @@ -952,6 +961,7 @@ fn confirm_full_slot( recyclers, opts.allow_dead_slots, opts.runtime_config.log_messages_bytes_limit, + &_ignored_prioritization_fee_cache, )?; timing.accumulate(&confirmation_timing.execute_timings); @@ -1078,6 +1088,7 @@ pub fn confirm_slot( recyclers: &VerifyRecyclers, allow_dead_slots: bool, log_messages_bytes_limit: Option, + prioritization_fee_cache: &PrioritizationFeeCache, ) -> result::Result<(), BlockstoreProcessorError> { let slot = bank.slot(); @@ -1106,6 +1117,7 @@ pub fn confirm_slot( entry_callback, recyclers, log_messages_bytes_limit, + prioritization_fee_cache, ) } @@ -1121,6 +1133,7 @@ fn confirm_slot_entries( entry_callback: Option<&ProcessCallback>, recyclers: &VerifyRecyclers, log_messages_bytes_limit: Option, + prioritization_fee_cache: &PrioritizationFeeCache, ) -> result::Result<(), BlockstoreProcessorError> { let slot = bank.slot(); let (entries, num_shreds, slot_full) = slot_entries_load_result; @@ -1222,6 +1235,7 @@ fn confirm_slot_entries( timing, cost_capacity_meter, log_messages_bytes_limit, + prioritization_fee_cache, ) .map_err(BlockstoreProcessorError::from); replay_elapsed.stop(); @@ -4131,6 +4145,7 @@ pub mod tests { None, &VerifyRecyclers::default(), None, + &PrioritizationFeeCache::new(0u64), ) } @@ -4274,6 +4289,7 @@ pub mod tests { None, &VerifyRecyclers::default(), None, + &PrioritizationFeeCache::new(0u64), ) .unwrap(); assert_eq!(progress.num_txs, 2); @@ -4319,6 +4335,7 @@ pub mod tests { None, &VerifyRecyclers::default(), None, + &PrioritizationFeeCache::new(0u64), ) .unwrap(); assert_eq!(progress.num_txs, 5); diff --git a/programs/bpf/Cargo.lock b/programs/bpf/Cargo.lock index 86e940f0497ed3..815decab2bf6bb 100644 --- a/programs/bpf/Cargo.lock +++ b/programs/bpf/Cargo.lock @@ -5390,6 +5390,7 @@ dependencies = [ "itertools", "lazy_static", "log", + "lru", "lz4", "memmap2", "num-derive", diff --git a/runtime/Cargo.toml b/runtime/Cargo.toml index 318fa6d7733f39..0437f0e99ec108 100644 --- a/runtime/Cargo.toml +++ b/runtime/Cargo.toml @@ -27,6 +27,7 @@ index_list = "0.2.7" itertools = "0.10.3" lazy_static = "1.4.0" log = "0.4.17" +lru = "0.7.7" lz4 = "1.24.0" memmap2 = "0.5.3" num-derive = { version = "0.3" } @@ -78,3 +79,6 @@ targets = ["x86_64-unknown-linux-gnu"] [build-dependencies] rustc_version = "0.4" + +[[bench]] +name = "prioritization_fee_cache" diff --git a/runtime/benches/prioritization_fee_cache.rs b/runtime/benches/prioritization_fee_cache.rs new file mode 100644 index 00000000000000..e04e783b99d43e --- /dev/null +++ b/runtime/benches/prioritization_fee_cache.rs @@ -0,0 +1,113 @@ +#![feature(test)] +extern crate test; + +use { + rand::{thread_rng, Rng}, + solana_runtime::{ + bank::Bank, + bank_forks::BankForks, + genesis_utils::{create_genesis_config, GenesisConfigInfo}, + prioritization_fee_cache::*, + }, + solana_sdk::{ + compute_budget::ComputeBudgetInstruction, + message::Message, + pubkey::Pubkey, + system_instruction, + transaction::{SanitizedTransaction, Transaction}, + }, + std::sync::Arc, + test::Bencher, +}; +const TRANSFER_TRANSACTION_COMPUTE_UNIT: u32 = 200; + +fn build_sanitized_transaction( + compute_unit_price: u64, + signer_account: &Pubkey, + write_account: &Pubkey, +) -> SanitizedTransaction { + let transfer_lamports = 1; + let transaction = Transaction::new_unsigned(Message::new( + &[ + system_instruction::transfer(signer_account, write_account, transfer_lamports), + ComputeBudgetInstruction::set_compute_unit_limit(TRANSFER_TRANSACTION_COMPUTE_UNIT), + ComputeBudgetInstruction::set_compute_unit_price(compute_unit_price), + ], + Some(signer_account), + )); + + SanitizedTransaction::try_from_legacy_transaction(transaction).unwrap() +} + +#[bench] +#[ignore] +fn bench_process_transactions_single_slot(bencher: &mut Bencher) { + let prioritization_fee_cache = PrioritizationFeeCache::default(); + + let bank = Arc::new(Bank::default_for_tests()); + + // build test transactions + let transactions: Vec<_> = (0..5000) + .map(|n| { + let compute_unit_price = n % 7; + build_sanitized_transaction( + compute_unit_price, + &Pubkey::new_unique(), + &Pubkey::new_unique(), + ) + }) + .collect(); + + bencher.iter(|| { + prioritization_fee_cache.update(bank.clone(), transactions.iter()); + }); +} + +fn process_transactions_multiple_slots(banks: &[Arc], num_slots: usize, num_threads: usize) { + let prioritization_fee_cache = Arc::new(PrioritizationFeeCache::default()); + + let pool = rayon::ThreadPoolBuilder::new() + .num_threads(num_threads) + .build() + .unwrap(); + + // each threads updates a slot a batch of 50 transactions, for 100 times + for _ in 0..100 { + pool.install(|| { + let transactions: Vec<_> = (0..50) + .map(|n| { + let compute_unit_price = n % 7; + build_sanitized_transaction( + compute_unit_price, + &Pubkey::new_unique(), + &Pubkey::new_unique(), + ) + }) + .collect(); + + let index = thread_rng().gen_range(0, num_slots); + + prioritization_fee_cache.update(banks[index].clone(), transactions.iter()); + }) + } +} + +#[bench] +#[ignore] +fn bench_process_transactions_multiple_slots(bencher: &mut Bencher) { + const NUM_SLOTS: usize = 5; + const NUM_THREADS: usize = 3; + + let GenesisConfigInfo { genesis_config, .. } = create_genesis_config(10_000); + let bank0 = Bank::new_for_benches(&genesis_config); + let bank_forks = BankForks::new(bank0); + let bank = bank_forks.working_bank(); + let collector = solana_sdk::pubkey::new_rand(); + let banks = (1..=NUM_SLOTS) + .map(|n| Arc::new(Bank::new_from_parent(&bank, &collector, n as u64))) + .collect::>(); + + bencher.iter(|| { + process_transactions_multiple_slots(&banks, NUM_SLOTS, NUM_THREADS); + }); +} diff --git a/runtime/src/lib.rs b/runtime/src/lib.rs index 45d338bfe58127..30a7aea527dc15 100644 --- a/runtime/src/lib.rs +++ b/runtime/src/lib.rs @@ -46,6 +46,8 @@ pub mod loader_utils; pub mod message_processor; pub mod non_circulating_supply; mod nonce_keyed_account; +pub mod prioritization_fee; +pub mod prioritization_fee_cache; mod pubkey_bins; mod read_only_accounts_cache; pub mod rent_collector; @@ -72,6 +74,7 @@ mod storable_accounts; mod system_instruction_processor; pub mod transaction_batch; pub mod transaction_error_metrics; +pub mod transaction_priority_details; mod verify_accounts_hash_in_background; pub mod vote_account; pub mod vote_parser; diff --git a/runtime/src/prioritization_fee.rs b/runtime/src/prioritization_fee.rs new file mode 100644 index 00000000000000..bd847dd4224163 --- /dev/null +++ b/runtime/src/prioritization_fee.rs @@ -0,0 +1,328 @@ +use { + solana_measure::measure, + solana_sdk::{clock::Slot, pubkey::Pubkey, saturating_add_assign}, + std::collections::HashMap, +}; + +#[derive(Debug, Default)] +struct PrioritizationFeeMetrics { + // Count of writable accounts in slot + total_writable_accounts_count: u64, + + // Count of writeable accounts with a minimum prioritization fee higher than the minimum transaction + // fee for this slot. + relevant_writable_accounts_count: u64, + + // Total prioritization fees included in this slot. + total_prioritization_fee: u64, + + // Accumulated time spent on tracking prioritization fee for each slot. + total_update_elapsed_us: u64, +} + +impl PrioritizationFeeMetrics { + fn accumulate_total_prioritization_fee(&mut self, val: u64) { + saturating_add_assign!(self.total_prioritization_fee, val); + } + + fn accumulate_total_update_elapsed_us(&mut self, val: u64) { + saturating_add_assign!(self.total_update_elapsed_us, val); + } + + fn report(&self, slot: Slot) { + datapoint_info!( + "block_prioritization_fee", + ("slot", slot as i64, i64), + ( + "total_writable_accounts_count", + self.total_writable_accounts_count as i64, + i64 + ), + ( + "relevant_writable_accounts_count", + self.relevant_writable_accounts_count as i64, + i64 + ), + ( + "total_prioritization_fee", + self.total_prioritization_fee as i64, + i64 + ), + ( + "total_update_elapsed_us", + self.total_update_elapsed_us as i64, + i64 + ), + ); + } +} + +pub enum PrioritizationFeeError { + // Not able to get account locks from sanitized transaction, which is required to update block + // minimum fees. + FailGetTransactionAccountLocks, + + // Not able to read priority details, including compute-unit price, from transaction. + // Compute-unit price is required to update block minimum fees. + FailGetTransactionPriorityDetails, + + // Block is already finalized, trying to finalize it again is usually unexpected + BlockIsAlreadyFinalized, +} + +/// Block minimum prioritization fee stats, includes the minimum prioritization fee for a transaction in this +/// block; and the minimum fee for each writable account in all transactions in this block. The only relevant +/// write account minimum fees are those greater than the block minimum transaction fee, because the minimum fee needed to land +/// a transaction is determined by Max( min_transaction_fee, min_writable_account_fees(key), ...) +#[derive(Debug)] +pub struct PrioritizationFee { + // The minimum prioritization fee of transactions that landed in this block. + min_transaction_fee: u64, + + // The minimum prioritization fee of each writable account in transactions in this block. + min_writable_account_fees: HashMap, + + // Default to `false`, set to `true` when a block is completed, therefore the minimum fees recorded + // are finalized, and can be made available for use (e.g., RPC query) + is_finalized: bool, + + // slot prioritization fee metrics + metrics: PrioritizationFeeMetrics, +} + +impl Default for PrioritizationFee { + fn default() -> Self { + PrioritizationFee { + min_transaction_fee: u64::MAX, + min_writable_account_fees: HashMap::new(), + is_finalized: false, + metrics: PrioritizationFeeMetrics::default(), + } + } +} + +impl PrioritizationFee { + /// Update self for minimum transaction fee in the block and minimum fee for each writable account. + pub fn update( + &mut self, + transaction_fee: u64, + writable_accounts: &[Pubkey], + ) -> Result<(), PrioritizationFeeError> { + let (_, update_time) = measure!( + { + if transaction_fee < self.min_transaction_fee { + self.min_transaction_fee = transaction_fee; + } + + for write_account in writable_accounts.iter() { + self.min_writable_account_fees + .entry(*write_account) + .and_modify(|write_lock_fee| { + *write_lock_fee = std::cmp::min(*write_lock_fee, transaction_fee) + }) + .or_insert(transaction_fee); + } + + self.metrics + .accumulate_total_prioritization_fee(transaction_fee); + }, + "update_time", + ); + + self.metrics + .accumulate_total_update_elapsed_us(update_time.as_us()); + Ok(()) + } + + /// Accounts that have minimum fees lesser or equal to the minimum fee in the block are redundant, they are + /// removed to reduce memory footprint when mark_block_completed() is called. + fn prune_irrelevant_writable_accounts(&mut self) { + self.metrics.total_writable_accounts_count = self.get_writable_accounts_count() as u64; + self.min_writable_account_fees + .retain(|_, account_fee| account_fee > &mut self.min_transaction_fee); + self.metrics.relevant_writable_accounts_count = self.get_writable_accounts_count() as u64; + } + + pub fn mark_block_completed(&mut self) -> Result<(), PrioritizationFeeError> { + if self.is_finalized { + return Err(PrioritizationFeeError::BlockIsAlreadyFinalized); + } + self.prune_irrelevant_writable_accounts(); + self.is_finalized = true; + Ok(()) + } + + pub fn get_min_transaction_fee(&self) -> Option { + if self.min_transaction_fee != u64::MAX { + Some(self.min_transaction_fee) + } else { + None + } + } + + pub fn get_writable_account_fee(&self, key: &Pubkey) -> Option { + self.min_writable_account_fees.get(key).copied() + } + + pub fn get_writable_account_fees(&self) -> impl Iterator { + self.min_writable_account_fees.iter() + } + + pub fn get_writable_accounts_count(&self) -> usize { + self.min_writable_account_fees.len() + } + + pub fn is_finalized(&self) -> bool { + self.is_finalized + } + + pub fn report_metrics(&self, slot: Slot) { + self.metrics.report(slot); + + // report this slot's min_transaction_fee and top 10 min_writable_account_fees + let min_transaction_fee = self.get_min_transaction_fee().unwrap_or(0); + let mut accounts_fees: Vec<_> = self.get_writable_account_fees().collect(); + accounts_fees.sort_by(|lh, rh| rh.1.cmp(lh.1)); + datapoint_info!( + "block_min_prioritization_fee", + ("slot", slot as i64, i64), + ("entity", "block", String), + ("min_prioritization_fee", min_transaction_fee as i64, i64), + ); + for (account_key, fee) in accounts_fees.iter().take(10) { + datapoint_info!( + "block_min_prioritization_fee", + ("slot", slot as i64, i64), + ("entity", account_key.to_string(), String), + ("min_prioritization_fee", **fee as i64, i64), + ); + } + } +} + +#[cfg(test)] +mod tests { + use {super::*, solana_sdk::pubkey::Pubkey}; + + #[test] + fn test_update_prioritization_fee() { + solana_logger::setup(); + let write_account_a = Pubkey::new_unique(); + let write_account_b = Pubkey::new_unique(); + let write_account_c = Pubkey::new_unique(); + + let mut prioritization_fee = PrioritizationFee::default(); + assert!(prioritization_fee.get_min_transaction_fee().is_none()); + + // Assert for 1st transaction + // [fee, write_accounts...] --> [block, account_a, account_b, account_c] + // ----------------------------------------------------------------------- + // [5, a, b ] --> [5, 5, 5, nil ] + { + assert!(prioritization_fee + .update(5, &[write_account_a, write_account_b]) + .is_ok()); + assert_eq!(5, prioritization_fee.get_min_transaction_fee().unwrap()); + assert_eq!( + 5, + prioritization_fee + .get_writable_account_fee(&write_account_a) + .unwrap() + ); + assert_eq!( + 5, + prioritization_fee + .get_writable_account_fee(&write_account_b) + .unwrap() + ); + assert!(prioritization_fee + .get_writable_account_fee(&write_account_c) + .is_none()); + } + + // Assert for second transaction: + // [fee, write_accounts...] --> [block, account_a, account_b, account_c] + // ----------------------------------------------------------------------- + // [9, b, c ] --> [5, 5, 5, 9 ] + { + assert!(prioritization_fee + .update(9, &[write_account_b, write_account_c]) + .is_ok()); + assert_eq!(5, prioritization_fee.get_min_transaction_fee().unwrap()); + assert_eq!( + 5, + prioritization_fee + .get_writable_account_fee(&write_account_a) + .unwrap() + ); + assert_eq!( + 5, + prioritization_fee + .get_writable_account_fee(&write_account_b) + .unwrap() + ); + assert_eq!( + 9, + prioritization_fee + .get_writable_account_fee(&write_account_c) + .unwrap() + ); + } + + // Assert for third transaction: + // [fee, write_accounts...] --> [block, account_a, account_b, account_c] + // ----------------------------------------------------------------------- + // [2, a, c ] --> [2, 2, 5, 2 ] + { + assert!(prioritization_fee + .update(2, &[write_account_a, write_account_c]) + .is_ok()); + assert_eq!(2, prioritization_fee.get_min_transaction_fee().unwrap()); + assert_eq!( + 2, + prioritization_fee + .get_writable_account_fee(&write_account_a) + .unwrap() + ); + assert_eq!( + 5, + prioritization_fee + .get_writable_account_fee(&write_account_b) + .unwrap() + ); + assert_eq!( + 2, + prioritization_fee + .get_writable_account_fee(&write_account_c) + .unwrap() + ); + } + + // assert after prune, account a and c should be removed from cache to save space + { + prioritization_fee.prune_irrelevant_writable_accounts(); + assert_eq!(1, prioritization_fee.min_writable_account_fees.len()); + assert_eq!(2, prioritization_fee.get_min_transaction_fee().unwrap()); + assert!(prioritization_fee + .get_writable_account_fee(&write_account_a) + .is_none()); + assert_eq!( + 5, + prioritization_fee + .get_writable_account_fee(&write_account_b) + .unwrap() + ); + assert!(prioritization_fee + .get_writable_account_fee(&write_account_c) + .is_none()); + } + } + + #[test] + fn test_mark_block_completed() { + let mut prioritization_fee = PrioritizationFee::default(); + + assert!(prioritization_fee.mark_block_completed().is_ok()); + assert!(prioritization_fee.mark_block_completed().is_err()); + } +} diff --git a/runtime/src/prioritization_fee_cache.rs b/runtime/src/prioritization_fee_cache.rs new file mode 100644 index 00000000000000..1399544af81dff --- /dev/null +++ b/runtime/src/prioritization_fee_cache.rs @@ -0,0 +1,811 @@ +use { + crate::{ + bank::Bank, prioritization_fee::*, + transaction_priority_details::GetTransactionPriorityDetails, + }, + crossbeam_channel::{unbounded, Receiver, Sender}, + log::*, + lru::LruCache, + solana_measure::measure, + solana_sdk::{ + clock::Slot, pubkey::Pubkey, saturating_add_assign, transaction::SanitizedTransaction, + }, + std::{ + sync::{ + atomic::{AtomicU64, Ordering}, + Arc, Mutex, RwLock, + }, + thread::{Builder, JoinHandle}, + }, +}; + +/// The maximum number of blocks to keep in `PrioritizationFeeCache`, ie. +/// the amount of history generally desired to estimate the prioritization fee needed to +/// land a transaction in the current block. +const MAX_NUM_RECENT_BLOCKS: u64 = 150; + +#[derive(Debug, Default)] +struct PrioritizationFeeCacheMetrics { + // Count of transactions that successfully updated each slot's prioritization fee cache. + successful_transaction_update_count: AtomicU64, + + // Accumulated time spent on tracking prioritization fee for each slot. + total_update_elapsed_us: AtomicU64, + + // Accumulated time spent on acquiring cache write lock. + total_cache_lock_elapsed_us: AtomicU64, + + // Accumulated time spent on acquiring each block entry's lock.. + total_entry_lock_elapsed_us: AtomicU64, + + // Accumulated time spent on updating block prioritization fees. + total_entry_update_elapsed_us: AtomicU64, + + // Accumulated time spent on finalizing block prioritization fees. + total_block_finalize_elapsed_us: AtomicU64, +} + +impl PrioritizationFeeCacheMetrics { + fn accumulate_successful_transaction_update_count(&self, val: u64) { + self.successful_transaction_update_count + .fetch_add(val, Ordering::Relaxed); + } + + fn accumulate_total_update_elapsed_us(&self, val: u64) { + self.total_update_elapsed_us + .fetch_add(val, Ordering::Relaxed); + } + + fn accumulate_total_cache_lock_elapsed_us(&self, val: u64) { + self.total_cache_lock_elapsed_us + .fetch_add(val, Ordering::Relaxed); + } + + fn accumulate_total_entry_lock_elapsed_us(&self, val: u64) { + self.total_entry_lock_elapsed_us + .fetch_add(val, Ordering::Relaxed); + } + + fn accumulate_total_entry_update_elapsed_us(&self, val: u64) { + self.total_entry_update_elapsed_us + .fetch_add(val, Ordering::Relaxed); + } + + fn accumulate_total_block_finalize_elapsed_us(&self, val: u64) { + self.total_block_finalize_elapsed_us + .fetch_add(val, Ordering::Relaxed); + } + + fn report(&self, slot: Slot) { + datapoint_info!( + "block_prioritization_fee_counters", + ("slot", slot as i64, i64), + ( + "successful_transaction_update_count", + self.successful_transaction_update_count + .swap(0, Ordering::Relaxed) as i64, + i64 + ), + ( + "total_update_elapsed_us", + self.total_update_elapsed_us.swap(0, Ordering::Relaxed) as i64, + i64 + ), + ( + "total_cache_lock_elapsed_us", + self.total_cache_lock_elapsed_us.swap(0, Ordering::Relaxed) as i64, + i64 + ), + ( + "total_entry_lock_elapsed_us", + self.total_entry_lock_elapsed_us.swap(0, Ordering::Relaxed) as i64, + i64 + ), + ( + "total_entry_update_elapsed_us", + self.total_entry_update_elapsed_us + .swap(0, Ordering::Relaxed) as i64, + i64 + ), + ( + "total_block_finalize_elapsed_us", + self.total_block_finalize_elapsed_us + .swap(0, Ordering::Relaxed) as i64, + i64 + ), + ); + } +} + +enum CacheServiceUpdate { + TransactionUpdate { + slot: Slot, + transaction_fee: u64, + writable_accounts: Arc>, + }, + BankFrozen { + slot: Slot, + }, + Exit, +} + +/// Stores up to MAX_NUM_RECENT_BLOCKS recent block's prioritization fee, +/// A separate internal thread `service_thread` handles additional tasks when a bank is frozen, +/// and collecting stats and reporting metrics. +pub struct PrioritizationFeeCache { + cache: Arc>>>>, + service_thread: Option>, + sender: Sender, + metrics: Arc, +} + +impl Default for PrioritizationFeeCache { + fn default() -> Self { + Self::new(MAX_NUM_RECENT_BLOCKS) + } +} + +impl Drop for PrioritizationFeeCache { + fn drop(&mut self) { + let _ = self.sender.send(CacheServiceUpdate::Exit); + self.service_thread + .take() + .unwrap() + .join() + .expect("Prioritization fee cache servicing thread failed to join"); + } +} + +impl PrioritizationFeeCache { + pub fn new(capacity: u64) -> Self { + let metrics = Arc::new(PrioritizationFeeCacheMetrics::default()); + let (sender, receiver) = unbounded(); + let cache = Arc::new(RwLock::new(LruCache::new(capacity as usize))); + + let cache_clone = cache.clone(); + let metrics_clone = metrics.clone(); + let service_thread = Some( + Builder::new() + .name("prioritization-fee-cache-servicing-thread".to_string()) + .spawn(move || { + Self::service_loop(cache_clone, receiver, metrics_clone); + }) + .unwrap(), + ); + + PrioritizationFeeCache { + cache, + service_thread, + sender, + metrics, + } + } + + /// Get prioritization fee entry, create new entry if necessary + fn get_prioritization_fee( + cache: Arc>>>>, + slot: &Slot, + ) -> Arc> { + let mut cache = cache.write().unwrap(); + match cache.get(slot) { + Some(entry) => Arc::clone(entry), + None => { + let entry = Arc::new(Mutex::new(PrioritizationFee::default())); + cache.put(*slot, Arc::clone(&entry)); + entry + } + } + } + + /// Update with a list of transactions' tx_priority_details and tx_account_locks; Only + /// transactions have both valid priority_detail and account_locks will be used to update + /// fee_cache asynchronously. + pub fn update<'a>(&self, bank: Arc, txs: impl Iterator) { + let mut successful_transaction_update_count: u64 = 0; + let (_, send_updates_time) = measure!( + { + for sanitized_transaction in txs { + let priority_details = sanitized_transaction.get_transaction_priority_details(); + let account_locks = sanitized_transaction + .get_account_locks(bank.get_transaction_account_lock_limit()); + + if priority_details.is_none() || account_locks.is_err() { + continue; + } + + let writable_accounts = Arc::new( + account_locks + .unwrap() + .writable + .iter() + .map(|key| **key) + .collect::>(), + ); + + self.sender + .send(CacheServiceUpdate::TransactionUpdate { + slot: bank.slot(), + transaction_fee: priority_details.unwrap().priority, + writable_accounts, + }) + .unwrap_or_else(|err| { + warn!( + "prioritization fee cache transaction updates failed: {:?}", + err + ); + }); + saturating_add_assign!(successful_transaction_update_count, 1) + } + }, + "send_updates", + ); + + self.metrics + .accumulate_total_update_elapsed_us(send_updates_time.as_us()); + self.metrics + .accumulate_successful_transaction_update_count(successful_transaction_update_count); + } + + /// Finalize prioritization fee when it's bank is completely replayed from blockstore, + /// by pruning irrelevant accounts to save space, and marking its availability for queries. + pub fn finalize_priority_fee(&self, slot: Slot) { + self.sender + .send(CacheServiceUpdate::BankFrozen { slot }) + .unwrap_or_else(|err| { + warn!( + "prioritization fee cache signalling bank frozen failed: {:?}", + err + ) + }); + } + + /// Internal function is invoked by worker thread to update slot's minimum prioritization fee, + /// Cache lock contends here. + fn update_cache( + cache: Arc>>>>, + slot: &Slot, + transaction_fee: u64, + writable_accounts: Arc>, + metrics: Arc, + ) { + let (block_prioritization_fee, cache_lock_time) = + measure!(Self::get_prioritization_fee(cache, slot), "cache_lock_time"); + + let (mut block_prioritization_fee, entry_lock_time) = + measure!(block_prioritization_fee.lock().unwrap(), "entry_lock_time"); + + let (_, entry_update_time) = measure!( + block_prioritization_fee.update(transaction_fee, &writable_accounts), + "entry_update_time" + ); + metrics.accumulate_total_cache_lock_elapsed_us(cache_lock_time.as_us()); + metrics.accumulate_total_entry_lock_elapsed_us(entry_lock_time.as_us()); + metrics.accumulate_total_entry_update_elapsed_us(entry_update_time.as_us()); + } + + fn finalize_slot( + cache: Arc>>>>, + slot: &Slot, + metrics: Arc, + ) { + let (block_prioritization_fee, cache_lock_time) = + measure!(Self::get_prioritization_fee(cache, slot), "cache_lock_time"); + + let (mut block_prioritization_fee, entry_lock_time) = + measure!(block_prioritization_fee.lock().unwrap(), "entry_lock_time"); + + // prune cache by evicting write account entry from prioritization fee if its fee is less + // or equal to block's minimum transaction fee, because they are irrelevant in calculating + // block minimum fee. + let (_, slot_finalize_time) = measure!( + block_prioritization_fee.mark_block_completed(), + "slot_finalize_time" + ); + block_prioritization_fee.report_metrics(*slot); + metrics.accumulate_total_cache_lock_elapsed_us(cache_lock_time.as_us()); + metrics.accumulate_total_entry_lock_elapsed_us(entry_lock_time.as_us()); + metrics.accumulate_total_block_finalize_elapsed_us(slot_finalize_time.as_us()); + } + + fn service_loop( + cache: Arc>>>>, + receiver: Receiver, + metrics: Arc, + ) { + for update in receiver.iter() { + match update { + CacheServiceUpdate::TransactionUpdate { + slot, + transaction_fee, + writable_accounts, + } => Self::update_cache( + cache.clone(), + &slot, + transaction_fee, + writable_accounts, + metrics.clone(), + ), + CacheServiceUpdate::BankFrozen { slot } => { + Self::finalize_slot(cache.clone(), &slot, metrics.clone()); + + metrics.report(slot); + } + CacheServiceUpdate::Exit => { + break; + } + } + } + } + + /// Returns number of blocks that have finalized minimum fees collection + pub fn available_block_count(&self) -> usize { + self.cache + .read() + .unwrap() + .iter() + .filter(|(_slot, prioritization_fee)| prioritization_fee.lock().unwrap().is_finalized()) + .count() + } + + /// Query block minimum fees from finalized blocks in cache, + /// Returns a vector of fee; call site can use it to produce + /// average, or top 5% etc. + pub fn get_prioritization_fees(&self) -> Vec { + self.cache + .read() + .unwrap() + .iter() + .filter_map(|(_slot, prioritization_fee)| { + let prioritization_fee_read = prioritization_fee.lock().unwrap(); + prioritization_fee_read + .is_finalized() + .then(|| prioritization_fee_read.get_min_transaction_fee()) + }) + .flatten() + .collect() + } + + /// Query given account minimum fees from finalized blocks in cache, + /// Returns a vector of fee; call site can use it to produce + /// average, or top 5% etc. + pub fn get_account_prioritization_fees(&self, account_key: &Pubkey) -> Vec { + self.cache + .read() + .unwrap() + .iter() + .filter_map(|(_slot, prioritization_fee)| { + let prioritization_fee_read = prioritization_fee.lock().unwrap(); + prioritization_fee_read + .is_finalized() + .then(|| prioritization_fee_read.get_writable_account_fee(account_key)) + }) + .flatten() + .collect() + } +} + +#[cfg(test)] +mod tests { + use { + super::*, + crate::{ + bank::Bank, + bank_forks::BankForks, + genesis_utils::{create_genesis_config, GenesisConfigInfo}, + }, + solana_sdk::{ + compute_budget::ComputeBudgetInstruction, + message::Message, + pubkey::Pubkey, + system_instruction, + transaction::{SanitizedTransaction, Transaction}, + }, + }; + + fn build_sanitized_transaction_for_test( + compute_unit_price: u64, + signer_account: &Pubkey, + write_account: &Pubkey, + ) -> SanitizedTransaction { + let transaction = Transaction::new_unsigned(Message::new( + &[ + system_instruction::transfer(signer_account, write_account, 1), + ComputeBudgetInstruction::set_compute_unit_price(compute_unit_price), + ], + Some(signer_account), + )); + + SanitizedTransaction::try_from_legacy_transaction(transaction).unwrap() + } + + // update fee cache is asynchronous, this test helper blocks until update is completed. + fn sync_update<'a>( + prioritization_fee_cache: &mut PrioritizationFeeCache, + bank: Arc, + txs: impl Iterator, + ) { + prioritization_fee_cache.update(bank.clone(), txs); + + let block_fee = PrioritizationFeeCache::get_prioritization_fee( + prioritization_fee_cache.cache.clone(), + &bank.slot(), + ); + + // wait till update is done + while block_fee + .lock() + .unwrap() + .get_min_transaction_fee() + .is_none() + { + std::thread::sleep(std::time::Duration::from_millis(100)); + } + } + + // finalization is asynchronous, this test helper blocks until finalization is completed. + fn sync_finalize_priority_fee_for_test( + prioritization_fee_cache: &mut PrioritizationFeeCache, + slot: Slot, + ) { + prioritization_fee_cache.finalize_priority_fee(slot); + let fee = PrioritizationFeeCache::get_prioritization_fee( + prioritization_fee_cache.cache.clone(), + &slot, + ); + + // wait till finalization is done + while !fee.lock().unwrap().is_finalized() { + std::thread::sleep(std::time::Duration::from_millis(100)); + } + } + + #[test] + fn test_prioritization_fee_cache_update() { + solana_logger::setup(); + let write_account_a = Pubkey::new_unique(); + let write_account_b = Pubkey::new_unique(); + let write_account_c = Pubkey::new_unique(); + + // Set up test with 3 transactions, in format of [fee, write-accounts...], + // Shall expect fee cache is updated in following sequence: + // transaction block minimum prioritization fee cache + // [fee, write_accounts...] --> [block, account_a, account_b, account_c] + // ----------------------------------------------------------------------- + // [5, a, b ] --> [5, 5, 5, nil ] + // [9, b, c ] --> [5, 5, 5, 9 ] + // [2, a, c ] --> [2, 2, 5, 2 ] + // + let txs = vec![ + build_sanitized_transaction_for_test(5, &write_account_a, &write_account_b), + build_sanitized_transaction_for_test(9, &write_account_b, &write_account_c), + build_sanitized_transaction_for_test(2, &write_account_a, &write_account_c), + ]; + + let bank = Arc::new(Bank::default_for_tests()); + let slot = bank.slot(); + + let mut prioritization_fee_cache = PrioritizationFeeCache::default(); + sync_update(&mut prioritization_fee_cache, bank, txs.iter()); + + // assert block minimum fee and account a, b, c fee accordingly + { + let fee = PrioritizationFeeCache::get_prioritization_fee( + prioritization_fee_cache.cache.clone(), + &slot, + ); + let fee = fee.lock().unwrap(); + assert_eq!(2, fee.get_min_transaction_fee().unwrap()); + assert_eq!(2, fee.get_writable_account_fee(&write_account_a).unwrap()); + assert_eq!(5, fee.get_writable_account_fee(&write_account_b).unwrap()); + assert_eq!(2, fee.get_writable_account_fee(&write_account_c).unwrap()); + // assert unknown account d fee + assert!(fee + .get_writable_account_fee(&Pubkey::new_unique()) + .is_none()); + } + + // assert after prune, account a and c should be removed from cache to save space + { + sync_finalize_priority_fee_for_test(&mut prioritization_fee_cache, slot); + let fee = PrioritizationFeeCache::get_prioritization_fee( + prioritization_fee_cache.cache.clone(), + &slot, + ); + let fee = fee.lock().unwrap(); + assert_eq!(2, fee.get_min_transaction_fee().unwrap()); + assert!(fee.get_writable_account_fee(&write_account_a).is_none()); + assert_eq!(5, fee.get_writable_account_fee(&write_account_b).unwrap()); + assert!(fee.get_writable_account_fee(&write_account_c).is_none()); + } + } + + #[test] + fn test_available_block_count() { + let prioritization_fee_cache = PrioritizationFeeCache::default(); + + assert!(PrioritizationFeeCache::get_prioritization_fee( + prioritization_fee_cache.cache.clone(), + &1 + ) + .lock() + .unwrap() + .mark_block_completed() + .is_ok()); + assert!(PrioritizationFeeCache::get_prioritization_fee( + prioritization_fee_cache.cache.clone(), + &2 + ) + .lock() + .unwrap() + .mark_block_completed() + .is_ok()); + // add slot 3 entry to cache, but not finalize it + PrioritizationFeeCache::get_prioritization_fee(prioritization_fee_cache.cache.clone(), &3); + + // assert available block count should be 2 finalized blocks + assert_eq!(2, prioritization_fee_cache.available_block_count()); + } + + fn assert_vec_eq(expected: &mut Vec, actual: &mut Vec) { + expected.sort_unstable(); + actual.sort_unstable(); + assert_eq!(expected, actual); + } + + #[test] + fn test_get_prioritization_fees() { + solana_logger::setup(); + let write_account_a = Pubkey::new_unique(); + let write_account_b = Pubkey::new_unique(); + let write_account_c = Pubkey::new_unique(); + + let GenesisConfigInfo { genesis_config, .. } = create_genesis_config(10_000); + let bank0 = Bank::new_for_benches(&genesis_config); + let bank_forks = BankForks::new(bank0); + let bank = bank_forks.working_bank(); + let collector = solana_sdk::pubkey::new_rand(); + let bank1 = Arc::new(Bank::new_from_parent(&bank, &collector, 1)); + let bank2 = Arc::new(Bank::new_from_parent(&bank, &collector, 2)); + let bank3 = Arc::new(Bank::new_from_parent(&bank, &collector, 3)); + + let mut prioritization_fee_cache = PrioritizationFeeCache::default(); + + // Assert no minimum fee from empty cache + assert!(prioritization_fee_cache + .get_prioritization_fees() + .is_empty()); + + // Assert after add one transaction for slot 1 + { + let txs = vec![build_sanitized_transaction_for_test( + 5, + &write_account_a, + &write_account_b, + )]; + sync_update(&mut prioritization_fee_cache, bank1.clone(), txs.iter()); + assert_eq!( + 5, + PrioritizationFeeCache::get_prioritization_fee( + prioritization_fee_cache.cache.clone(), + &bank1.slot() + ) + .lock() + .unwrap() + .get_min_transaction_fee() + .unwrap() + ); + // before block is marked as completed + assert!(prioritization_fee_cache + .get_prioritization_fees() + .is_empty()); + // after block is completed + sync_finalize_priority_fee_for_test(&mut prioritization_fee_cache, bank1.slot()); + assert_eq!(vec![5], prioritization_fee_cache.get_prioritization_fees()); + } + + // Assert after add one transaction for slot 2 + { + let txs = vec![build_sanitized_transaction_for_test( + 9, + &write_account_b, + &write_account_c, + )]; + sync_update(&mut prioritization_fee_cache, bank2.clone(), txs.iter()); + assert_eq!( + 9, + PrioritizationFeeCache::get_prioritization_fee( + prioritization_fee_cache.cache.clone(), + &bank2.slot() + ) + .lock() + .unwrap() + .get_min_transaction_fee() + .unwrap() + ); + // before block is marked as completed + assert_eq!(vec![5], prioritization_fee_cache.get_prioritization_fees()); + // after block is completed + sync_finalize_priority_fee_for_test(&mut prioritization_fee_cache, bank2.slot()); + assert_vec_eq( + &mut vec![5, 9], + &mut prioritization_fee_cache.get_prioritization_fees(), + ); + } + + // Assert after add one transaction for slot 3 + { + let txs = vec![build_sanitized_transaction_for_test( + 2, + &write_account_a, + &write_account_c, + )]; + sync_update(&mut prioritization_fee_cache, bank3.clone(), txs.iter()); + assert_eq!( + 2, + PrioritizationFeeCache::get_prioritization_fee( + prioritization_fee_cache.cache.clone(), + &bank3.slot() + ) + .lock() + .unwrap() + .get_min_transaction_fee() + .unwrap() + ); + // before block is marked as completed + assert_vec_eq( + &mut vec![5, 9], + &mut prioritization_fee_cache.get_prioritization_fees(), + ); + // after block is completed + sync_finalize_priority_fee_for_test(&mut prioritization_fee_cache, bank3.slot()); + assert_vec_eq( + &mut vec![5, 9, 2], + &mut prioritization_fee_cache.get_prioritization_fees(), + ); + } + } + + #[test] + fn test_get_account_prioritization_fees() { + solana_logger::setup(); + let write_account_a = Pubkey::new_unique(); + let write_account_b = Pubkey::new_unique(); + let write_account_c = Pubkey::new_unique(); + let GenesisConfigInfo { genesis_config, .. } = create_genesis_config(10_000); + let bank0 = Bank::new_for_benches(&genesis_config); + let bank_forks = BankForks::new(bank0); + let bank = bank_forks.working_bank(); + let collector = solana_sdk::pubkey::new_rand(); + let bank1 = Arc::new(Bank::new_from_parent(&bank, &collector, 1)); + let bank2 = Arc::new(Bank::new_from_parent(&bank, &collector, 2)); + let bank3 = Arc::new(Bank::new_from_parent(&bank, &collector, 3)); + + let mut prioritization_fee_cache = PrioritizationFeeCache::default(); + + // Assert no minimum fee from empty cache + assert!(prioritization_fee_cache + .get_account_prioritization_fees(&write_account_a) + .is_empty()); + assert!(prioritization_fee_cache + .get_account_prioritization_fees(&write_account_b) + .is_empty()); + assert!(prioritization_fee_cache + .get_account_prioritization_fees(&write_account_c) + .is_empty()); + + // Assert after add one transaction for slot 1 + { + let txs = vec![ + build_sanitized_transaction_for_test(5, &write_account_a, &write_account_b), + build_sanitized_transaction_for_test( + 0, + &Pubkey::new_unique(), + &Pubkey::new_unique(), + ), + ]; + prioritization_fee_cache.update(bank1.clone(), txs.iter()); + // before block is marked as completed + assert!(prioritization_fee_cache + .get_account_prioritization_fees(&write_account_a) + .is_empty()); + assert!(prioritization_fee_cache + .get_account_prioritization_fees(&write_account_b) + .is_empty()); + assert!(prioritization_fee_cache + .get_account_prioritization_fees(&write_account_c) + .is_empty()); + // after block is completed + sync_finalize_priority_fee_for_test(&mut prioritization_fee_cache, bank1.slot()); + assert_eq!( + vec![5], + prioritization_fee_cache.get_account_prioritization_fees(&write_account_a) + ); + assert_eq!( + vec![5], + prioritization_fee_cache.get_account_prioritization_fees(&write_account_b) + ); + assert!(prioritization_fee_cache + .get_account_prioritization_fees(&write_account_c) + .is_empty()); + } + + // Assert after add one transaction for slot 2 + { + let txs = vec![ + build_sanitized_transaction_for_test(9, &write_account_b, &write_account_c), + build_sanitized_transaction_for_test( + 0, + &Pubkey::new_unique(), + &Pubkey::new_unique(), + ), + ]; + prioritization_fee_cache.update(bank2.clone(), txs.iter()); + // before block is marked as completed + assert_eq!( + vec![5], + prioritization_fee_cache.get_account_prioritization_fees(&write_account_a) + ); + assert_eq!( + vec![5], + prioritization_fee_cache.get_account_prioritization_fees(&write_account_b) + ); + assert!(prioritization_fee_cache + .get_account_prioritization_fees(&write_account_c) + .is_empty()); + // after block is completed + sync_finalize_priority_fee_for_test(&mut prioritization_fee_cache, bank2.slot()); + assert_eq!( + vec![5], + prioritization_fee_cache.get_account_prioritization_fees(&write_account_a) + ); + assert_vec_eq( + &mut vec![5, 9], + &mut prioritization_fee_cache.get_account_prioritization_fees(&write_account_b), + ); + assert_eq!( + vec![9], + prioritization_fee_cache.get_account_prioritization_fees(&write_account_c) + ); + } + + // Assert after add one transaction for slot 3 + { + let txs = vec![ + build_sanitized_transaction_for_test(2, &write_account_a, &write_account_c), + build_sanitized_transaction_for_test( + 0, + &Pubkey::new_unique(), + &Pubkey::new_unique(), + ), + ]; + prioritization_fee_cache.update(bank3.clone(), txs.iter()); + // before block is marked as completed + assert_eq!( + vec![5], + prioritization_fee_cache.get_account_prioritization_fees(&write_account_a) + ); + assert_vec_eq( + &mut vec![5, 9], + &mut prioritization_fee_cache.get_account_prioritization_fees(&write_account_b), + ); + assert_eq!( + vec![9], + prioritization_fee_cache.get_account_prioritization_fees(&write_account_c) + ); + // after block is completed + sync_finalize_priority_fee_for_test(&mut prioritization_fee_cache, bank3.slot()); + assert_vec_eq( + &mut vec![5, 2], + &mut prioritization_fee_cache.get_account_prioritization_fees(&write_account_a), + ); + assert_vec_eq( + &mut vec![5, 9], + &mut prioritization_fee_cache.get_account_prioritization_fees(&write_account_b), + ); + assert_vec_eq( + &mut vec![9, 2], + &mut prioritization_fee_cache.get_account_prioritization_fees(&write_account_c), + ); + } + } +} diff --git a/core/src/transaction_priority_details.rs b/runtime/src/transaction_priority_details.rs similarity index 100% rename from core/src/transaction_priority_details.rs rename to runtime/src/transaction_priority_details.rs From fa7055e9488c992d38f72e4da5ffaaae0c9812bd Mon Sep 17 00:00:00 2001 From: Tyera Date: Fri, 6 Jan 2023 22:48:26 -0700 Subject: [PATCH 279/465] Add getRecentPrioritizationFees RPC endpoint (backport #27278) (#29562) * Add getRecentPrioritizationFees RPC endpoint (#27278) * Plumb priority_fee_cache into rpc * Add PrioritizationFeeCache api * Add getRecentPrioritizationFees rpc endpoint * Use MAX_TX_ACCOUNT_LOCKS to limit input keys * Remove unused cache apis * Map fee data by slot, and make rpc account inputs optional * Add priority_fee_cache to rpc test framework, and add test * Add endpoint to jsonrpc docs * Update docs/src/developing/clients/jsonrpc-api.md * Update docs/src/developing/clients/jsonrpc-api.md * Fix conflicts --- client/src/rpc_response.rs | 6 + core/src/validator.rs | 1 + docs/src/developing/clients/jsonrpc-api.md | 60 ++++ rpc/src/rpc.rs | 264 ++++++++++++--- rpc/src/rpc_service.rs | 4 + runtime/src/prioritization_fee_cache.rs | 375 ++++++++++----------- 6 files changed, 473 insertions(+), 237 deletions(-) diff --git a/client/src/rpc_response.rs b/client/src/rpc_response.rs index 79a3429a478fb9..dbbf810ea14161 100644 --- a/client/src/rpc_response.rs +++ b/client/src/rpc_response.rs @@ -541,3 +541,9 @@ pub struct RpcSnapshotSlotInfo { pub full: Slot, pub incremental: Option, } + +#[derive(Serialize, Deserialize, Clone, Copy, Debug, PartialEq, Eq)] +pub struct RpcPrioritizationFee { + pub slot: Slot, + pub prioritization_fee: u64, +} diff --git a/core/src/validator.rs b/core/src/validator.rs index 818e835d435ac9..9d06c9d61577e4 100644 --- a/core/src/validator.rs +++ b/core/src/validator.rs @@ -845,6 +845,7 @@ impl Validator { leader_schedule_cache.clone(), connection_cache.clone(), max_complete_transaction_status_slot, + prioritization_fee_cache.clone(), )), if !config.rpc_config.full_api { None diff --git a/docs/src/developing/clients/jsonrpc-api.md b/docs/src/developing/clients/jsonrpc-api.md index 852d7d618369d6..ae0f4e1daf4d37 100644 --- a/docs/src/developing/clients/jsonrpc-api.md +++ b/docs/src/developing/clients/jsonrpc-api.md @@ -48,6 +48,7 @@ gives a convenient interface for the RPC methods. - [getMultipleAccounts](jsonrpc-api.md#getmultipleaccounts) - [getProgramAccounts](jsonrpc-api.md#getprogramaccounts) - [getRecentPerformanceSamples](jsonrpc-api.md#getrecentperformancesamples) +- [getRecentPrioritizationFees](jsonrpc-api.md#getrecentprioritizationfees) - [getSignaturesForAddress](jsonrpc-api.md#getsignaturesforaddress) - [getSignatureStatuses](jsonrpc-api.md#getsignaturestatuses) - [getSlot](jsonrpc-api.md#getslot) @@ -2114,6 +2115,65 @@ Result: } ``` +### getRecentPrioritizationFees + +Returns a list of minimum prioritization fees from recent blocks. Currently, a +node's prioritization-fee cache stores data from up to 150 blocks. + +#### Parameters: + +- `` - (optional) An array of account address strings. If this parameter is provided, the response will reflect the minimum prioritization fee to land a transaction locking all of the provided accounts as writable. + +#### Results: + +An array of: + +- `RpcPrioritizationFee` + - `slot: ` - Slot in which minimum fee was observed + - `prioritizationFee: ` - Minimum fee paid for a successfully landed transaction + +#### Example: + +Request: + +```bash +// Request +curl http://localhost:8899 -X POST -H "Content-Type: application/json" -d ' + {"jsonrpc":"2.0", "id":1, "method":"getRecentPrioritizationFees", "params": [["CxELquR1gPP8wHe33gZ4QxqGB3sZ9RSwsJ2KshVewkFY"]]} +' +``` + +Result: + +```json +{ + "jsonrpc": "2.0", + "result": [ + { + "slot": 348125, + "prioritizationFee": 0, + }, + { + "slot": 348126, + "prioritizationFee": 1000, + }, + { + "slot": 348127, + "prioritizationFee": 500, + }, + { + "slot": 348128, + "prioritizationFee": 0, + }, + { + "slot": 348129, + "prioritizationFee": 1234, + } + ], + "id": 1 +} +``` + ### getSignaturesForAddress Returns signatures for confirmed transactions that include the given address in diff --git a/rpc/src/rpc.rs b/rpc/src/rpc.rs index ea04301e4dbdee..cafe347f884c35 100644 --- a/rpc/src/rpc.rs +++ b/rpc/src/rpc.rs @@ -49,6 +49,7 @@ use { inline_spl_token::{SPL_TOKEN_ACCOUNT_MINT_OFFSET, SPL_TOKEN_ACCOUNT_OWNER_OFFSET}, inline_spl_token_2022::{self, ACCOUNTTYPE_ACCOUNT}, non_circulating_supply::calculate_non_circulating_supply, + prioritization_fee_cache::PrioritizationFeeCache, snapshot_config::SnapshotConfig, snapshot_utils, }, @@ -72,7 +73,7 @@ use { sysvar::stake_history, transaction::{ self, AddressLoader, MessageHash, SanitizedTransaction, TransactionError, - VersionedTransaction, + VersionedTransaction, MAX_TX_ACCOUNT_LOCKS, }, }, solana_send_transaction_service::{ @@ -200,6 +201,7 @@ pub struct JsonRpcRequestProcessor { max_slots: Arc, leader_schedule_cache: Arc, max_complete_transaction_status_slot: Arc, + prioritization_fee_cache: Arc, } impl Metadata for JsonRpcRequestProcessor {} @@ -305,6 +307,7 @@ impl JsonRpcRequestProcessor { max_slots: Arc, leader_schedule_cache: Arc, max_complete_transaction_status_slot: Arc, + prioritization_fee_cache: Arc, ) -> (Self, Receiver) { let (sender, receiver) = unbounded(); ( @@ -325,6 +328,7 @@ impl JsonRpcRequestProcessor { max_slots, leader_schedule_cache, max_complete_transaction_status_slot, + prioritization_fee_cache, }, receiver, ) @@ -389,6 +393,7 @@ impl JsonRpcRequestProcessor { max_slots: Arc::new(MaxSlots::default()), leader_schedule_cache: Arc::new(LeaderScheduleCache::new_from_bank(bank)), max_complete_transaction_status_slot: Arc::new(AtomicU64::default()), + prioritization_fee_cache: Arc::new(PrioritizationFeeCache::default()), } } @@ -2156,6 +2161,21 @@ impl JsonRpcRequestProcessor { solana_stake_program::get_minimum_delegation(&bank.feature_set); Ok(new_response(&bank, stake_minimum_delegation)) } + + fn get_recent_prioritization_fees( + &self, + pubkeys: Vec, + ) -> Result> { + Ok(self + .prioritization_fee_cache + .get_prioritization_fees(&pubkeys) + .into_iter() + .map(|(slot, prioritization_fee)| RpcPrioritizationFee { + slot, + prioritization_fee, + }) + .collect()) + } } fn optimize_filters(filters: &mut [RpcFilterType]) { @@ -3402,6 +3422,13 @@ pub mod rpc_full { meta: Self::Metadata, config: Option, ) -> Result>; + + #[rpc(meta, name = "getRecentPrioritizationFees")] + fn get_recent_prioritization_fees( + &self, + meta: Self::Metadata, + pubkey_strs: Option>, + ) -> Result>; } pub struct FullImpl; @@ -3989,6 +4016,29 @@ pub mod rpc_full { debug!("get_stake_minimum_delegation rpc request received"); meta.get_stake_minimum_delegation(config.unwrap_or_default()) } + + fn get_recent_prioritization_fees( + &self, + meta: Self::Metadata, + pubkey_strs: Option>, + ) -> Result> { + let pubkey_strs = pubkey_strs.unwrap_or_default(); + debug!( + "get_recent_prioritization_fees rpc request received: {:?} pubkeys", + pubkey_strs.len() + ); + if pubkey_strs.len() > MAX_TX_ACCOUNT_LOCKS { + return Err(Error::invalid_params(format!( + "Too many inputs provided; max {}", + MAX_TX_ACCOUNT_LOCKS + ))); + } + let pubkeys = pubkey_strs + .into_iter() + .map(|pubkey_str| verify_pubkey(&pubkey_str)) + .collect::>>()?; + meta.get_recent_prioritization_fees(pubkeys) + } } } @@ -4597,6 +4647,7 @@ pub mod tests { solana_sdk::{ account::{Account, WritableAccount}, clock::MAX_RECENT_BLOCKHASHES, + compute_budget::ComputeBudgetInstruction, fee_calculator::{FeeRateGovernor, DEFAULT_BURN_PERCENT}, hash::{hash, Hash}, instruction::InstructionError, @@ -4733,6 +4784,7 @@ pub mod tests { max_slots.clone(), Arc::new(LeaderScheduleCache::new_from_bank(&bank)), max_complete_transaction_status_slot.clone(), + Arc::new(PrioritizationFeeCache::default()), ) .0; @@ -4949,6 +5001,20 @@ pub mod tests { bank.store_account(vote_pubkey, &vote_account); } + fn update_prioritization_fee_cache(&self, transactions: Vec) { + let bank = self.working_bank(); + let prioritization_fee_cache = &self.meta.prioritization_fee_cache; + let transactions: Vec<_> = transactions + .into_iter() + .map(|tx| SanitizedTransaction::try_from_legacy_transaction(tx).unwrap()) + .collect(); + prioritization_fee_cache.update(bank, transactions.iter()); + } + + fn get_prioritization_fee_cache(&self) -> &PrioritizationFeeCache { + &self.meta.prioritization_fee_cache + } + fn working_bank(&self) -> Arc { self.bank_forks.read().unwrap().working_bank() } @@ -6311,6 +6377,7 @@ pub mod tests { Arc::new(MaxSlots::default()), Arc::new(LeaderScheduleCache::default()), Arc::new(AtomicU64::default()), + Arc::new(PrioritizationFeeCache::default()), ); let connection_cache = Arc::new(ConnectionCache::default()); SendTransactionService::new::( @@ -6581,6 +6648,7 @@ pub mod tests { Arc::new(MaxSlots::default()), Arc::new(LeaderScheduleCache::default()), Arc::new(AtomicU64::default()), + Arc::new(PrioritizationFeeCache::default()), ); let connection_cache = Arc::new(ConnectionCache::default()); SendTransactionService::new::( @@ -8212,6 +8280,7 @@ pub mod tests { Arc::new(MaxSlots::default()), Arc::new(LeaderScheduleCache::default()), Arc::new(AtomicU64::default()), + Arc::new(PrioritizationFeeCache::default()), ); let mut io = MetaIoHandler::default(); @@ -8421,50 +8490,165 @@ pub mod tests { } #[test] - fn test_get_fee_for_message() { + fn test_rpc_get_recent_prioritization_fees() { + fn wait_for_cache_blocks(cache: &PrioritizationFeeCache, num_blocks: usize) { + while cache.available_block_count() < num_blocks { + std::thread::sleep(std::time::Duration::from_millis(100)); + } + } + + fn assert_fee_vec_eq( + expected: &mut Vec, + actual: &mut Vec, + ) { + expected.sort_by(|a, b| a.slot.partial_cmp(&b.slot).unwrap()); + actual.sort_by(|a, b| a.slot.partial_cmp(&b.slot).unwrap()); + assert_eq!(expected, actual); + } + let rpc = RpcHandler::start(); - let bank = rpc.working_bank(); - // Slot hashes is necessary for processing versioned txs. - bank.set_sysvar_for_tests(&SlotHashes::default()); - // Correct blockhash is needed because fees are specific to blockhashes - let recent_blockhash = bank.last_blockhash(); + assert_eq!( + rpc.get_prioritization_fee_cache().available_block_count(), + 0 + ); + let slot0 = rpc.working_bank().slot(); + let account0 = Pubkey::new_unique(); + let account1 = Pubkey::new_unique(); + let account2 = Pubkey::new_unique(); + let price0 = 42; + let transactions = vec![ + Transaction::new_unsigned(Message::new( + &[ + system_instruction::transfer(&account0, &account1, 1), + ComputeBudgetInstruction::set_compute_unit_price(price0), + ], + Some(&account0), + )), + Transaction::new_unsigned(Message::new( + &[system_instruction::transfer(&account0, &account2, 1)], + Some(&account0), + )), + ]; + rpc.update_prioritization_fee_cache(transactions); + let cache = rpc.get_prioritization_fee_cache(); + cache.finalize_priority_fee(slot0); + wait_for_cache_blocks(cache, 1); - { - let legacy_msg = VersionedMessage::Legacy(Message { - header: MessageHeader { - num_required_signatures: 1, - ..MessageHeader::default() - }, - recent_blockhash, - account_keys: vec![Pubkey::new_unique()], - ..Message::default() - }); + let request = create_test_request("getRecentPrioritizationFees", None); + let mut response: Vec = + parse_success_result(rpc.handle_request_sync(request)); + assert_fee_vec_eq( + &mut response, + &mut vec![RpcPrioritizationFee { + slot: slot0, + prioritization_fee: 0, + }], + ); - let request = create_test_request( - "getFeeForMessage", - Some(json!([base64::encode(&serialize(&legacy_msg).unwrap())])), - ); - let response: RpcResponse = parse_success_result(rpc.handle_request_sync(request)); - assert_eq!(response.value, TEST_SIGNATURE_FEE); - } + let request = create_test_request( + "getRecentPrioritizationFees", + Some(json!([[account1.to_string()]])), + ); + let mut response: Vec = + parse_success_result(rpc.handle_request_sync(request)); + assert_fee_vec_eq( + &mut response, + &mut vec![RpcPrioritizationFee { + slot: slot0, + prioritization_fee: price0, + }], + ); - { - let v0_msg = VersionedMessage::V0(v0::Message { - header: MessageHeader { - num_required_signatures: 1, - ..MessageHeader::default() + let request = create_test_request( + "getRecentPrioritizationFees", + Some(json!([[account2.to_string()]])), + ); + let mut response: Vec = + parse_success_result(rpc.handle_request_sync(request)); + assert_fee_vec_eq( + &mut response, + &mut vec![RpcPrioritizationFee { + slot: slot0, + prioritization_fee: 0, + }], + ); + + rpc.advance_bank_to_confirmed_slot(1); + let slot1 = rpc.working_bank().slot(); + let price1 = 11; + let transactions = vec![ + Transaction::new_unsigned(Message::new( + &[ + system_instruction::transfer(&account0, &account2, 1), + ComputeBudgetInstruction::set_compute_unit_price(price1), + ], + Some(&account0), + )), + Transaction::new_unsigned(Message::new( + &[system_instruction::transfer(&account0, &account1, 1)], + Some(&account0), + )), + ]; + rpc.update_prioritization_fee_cache(transactions); + let cache = rpc.get_prioritization_fee_cache(); + cache.finalize_priority_fee(slot1); + wait_for_cache_blocks(cache, 2); + + let request = create_test_request("getRecentPrioritizationFees", None); + let mut response: Vec = + parse_success_result(rpc.handle_request_sync(request)); + assert_fee_vec_eq( + &mut response, + &mut vec![ + RpcPrioritizationFee { + slot: slot0, + prioritization_fee: 0, }, - recent_blockhash, - account_keys: vec![Pubkey::new_unique()], - ..v0::Message::default() - }); + RpcPrioritizationFee { + slot: slot1, + prioritization_fee: 0, + }, + ], + ); - let request = create_test_request( - "getFeeForMessage", - Some(json!([base64::encode(&serialize(&v0_msg).unwrap())])), - ); - let response: RpcResponse = parse_success_result(rpc.handle_request_sync(request)); - assert_eq!(response.value, TEST_SIGNATURE_FEE); - } + let request = create_test_request( + "getRecentPrioritizationFees", + Some(json!([[account1.to_string()]])), + ); + let mut response: Vec = + parse_success_result(rpc.handle_request_sync(request)); + assert_fee_vec_eq( + &mut response, + &mut vec![ + RpcPrioritizationFee { + slot: slot0, + prioritization_fee: price0, + }, + RpcPrioritizationFee { + slot: slot1, + prioritization_fee: 0, + }, + ], + ); + + let request = create_test_request( + "getRecentPrioritizationFees", + Some(json!([[account2.to_string()]])), + ); + let mut response: Vec = + parse_success_result(rpc.handle_request_sync(request)); + assert_fee_vec_eq( + &mut response, + &mut vec![ + RpcPrioritizationFee { + slot: slot0, + prioritization_fee: 0, + }, + RpcPrioritizationFee { + slot: slot1, + prioritization_fee: price1, + }, + ], + ); } } diff --git a/rpc/src/rpc_service.rs b/rpc/src/rpc_service.rs index 61380e73d2ec38..a1acec205e2302 100644 --- a/rpc/src/rpc_service.rs +++ b/rpc/src/rpc_service.rs @@ -30,6 +30,7 @@ use { solana_poh::poh_recorder::PohRecorder, solana_runtime::{ bank_forks::BankForks, commitment::BlockCommitmentCache, + prioritization_fee_cache::PrioritizationFeeCache, snapshot_archive_info::SnapshotArchiveInfoGetter, snapshot_config::SnapshotConfig, snapshot_utils, }, @@ -355,6 +356,7 @@ impl JsonRpcService { leader_schedule_cache: Arc, connection_cache: Arc, current_transaction_status_slot: Arc, + prioritization_fee_cache: Arc, ) -> Self { info!("rpc bound to {:?}", rpc_addr); info!("rpc configuration: {:?}", config); @@ -460,6 +462,7 @@ impl JsonRpcService { max_slots, leader_schedule_cache, current_transaction_status_slot, + prioritization_fee_cache, ); let leader_info = @@ -641,6 +644,7 @@ mod tests { Arc::new(LeaderScheduleCache::default()), connection_cache, Arc::new(AtomicU64::default()), + Arc::new(PrioritizationFeeCache::default()), ); let thread = rpc_service.thread_hdl.thread(); assert_eq!(thread.name().unwrap(), "solJsonRpcSvc"); diff --git a/runtime/src/prioritization_fee_cache.rs b/runtime/src/prioritization_fee_cache.rs index 1399544af81dff..944f35e19519a9 100644 --- a/runtime/src/prioritization_fee_cache.rs +++ b/runtime/src/prioritization_fee_cache.rs @@ -11,6 +11,7 @@ use { clock::Slot, pubkey::Pubkey, saturating_add_assign, transaction::SanitizedTransaction, }, std::{ + collections::HashMap, sync::{ atomic::{AtomicU64, Ordering}, Arc, Mutex, RwLock, @@ -347,37 +348,26 @@ impl PrioritizationFeeCache { .count() } - /// Query block minimum fees from finalized blocks in cache, - /// Returns a vector of fee; call site can use it to produce - /// average, or top 5% etc. - pub fn get_prioritization_fees(&self) -> Vec { + pub fn get_prioritization_fees(&self, account_keys: &[Pubkey]) -> HashMap { self.cache .read() .unwrap() .iter() - .filter_map(|(_slot, prioritization_fee)| { + .filter_map(|(slot, prioritization_fee)| { let prioritization_fee_read = prioritization_fee.lock().unwrap(); - prioritization_fee_read - .is_finalized() - .then(|| prioritization_fee_read.get_min_transaction_fee()) - }) - .flatten() - .collect() - } - - /// Query given account minimum fees from finalized blocks in cache, - /// Returns a vector of fee; call site can use it to produce - /// average, or top 5% etc. - pub fn get_account_prioritization_fees(&self, account_key: &Pubkey) -> Vec { - self.cache - .read() - .unwrap() - .iter() - .filter_map(|(_slot, prioritization_fee)| { - let prioritization_fee_read = prioritization_fee.lock().unwrap(); - prioritization_fee_read - .is_finalized() - .then(|| prioritization_fee_read.get_writable_account_fee(account_key)) + prioritization_fee_read.is_finalized().then(|| { + let mut fee = prioritization_fee_read + .get_min_transaction_fee() + .unwrap_or_default(); + for account_key in account_keys { + if let Some(account_fee) = + prioritization_fee_read.get_writable_account_fee(account_key) + { + fee = std::cmp::max(fee, account_fee); + } + } + Some((*slot, fee)) + }) }) .flatten() .collect() @@ -546,10 +536,8 @@ mod tests { assert_eq!(2, prioritization_fee_cache.available_block_count()); } - fn assert_vec_eq(expected: &mut Vec, actual: &mut Vec) { - expected.sort_unstable(); - actual.sort_unstable(); - assert_eq!(expected, actual); + fn hashmap_of(vec: Vec<(Slot, u64)>) -> HashMap { + vec.into_iter().collect() } #[test] @@ -572,239 +560,232 @@ mod tests { // Assert no minimum fee from empty cache assert!(prioritization_fee_cache - .get_prioritization_fees() + .get_prioritization_fees(&[]) + .is_empty()); + assert!(prioritization_fee_cache + .get_prioritization_fees(&[write_account_a]) + .is_empty()); + assert!(prioritization_fee_cache + .get_prioritization_fees(&[write_account_b]) .is_empty()); - - // Assert after add one transaction for slot 1 - { - let txs = vec![build_sanitized_transaction_for_test( - 5, - &write_account_a, - &write_account_b, - )]; - sync_update(&mut prioritization_fee_cache, bank1.clone(), txs.iter()); - assert_eq!( - 5, - PrioritizationFeeCache::get_prioritization_fee( - prioritization_fee_cache.cache.clone(), - &bank1.slot() - ) - .lock() - .unwrap() - .get_min_transaction_fee() - .unwrap() - ); - // before block is marked as completed - assert!(prioritization_fee_cache - .get_prioritization_fees() - .is_empty()); - // after block is completed - sync_finalize_priority_fee_for_test(&mut prioritization_fee_cache, bank1.slot()); - assert_eq!(vec![5], prioritization_fee_cache.get_prioritization_fees()); - } - - // Assert after add one transaction for slot 2 - { - let txs = vec![build_sanitized_transaction_for_test( - 9, - &write_account_b, - &write_account_c, - )]; - sync_update(&mut prioritization_fee_cache, bank2.clone(), txs.iter()); - assert_eq!( - 9, - PrioritizationFeeCache::get_prioritization_fee( - prioritization_fee_cache.cache.clone(), - &bank2.slot() - ) - .lock() - .unwrap() - .get_min_transaction_fee() - .unwrap() - ); - // before block is marked as completed - assert_eq!(vec![5], prioritization_fee_cache.get_prioritization_fees()); - // after block is completed - sync_finalize_priority_fee_for_test(&mut prioritization_fee_cache, bank2.slot()); - assert_vec_eq( - &mut vec![5, 9], - &mut prioritization_fee_cache.get_prioritization_fees(), - ); - } - - // Assert after add one transaction for slot 3 - { - let txs = vec![build_sanitized_transaction_for_test( - 2, - &write_account_a, - &write_account_c, - )]; - sync_update(&mut prioritization_fee_cache, bank3.clone(), txs.iter()); - assert_eq!( - 2, - PrioritizationFeeCache::get_prioritization_fee( - prioritization_fee_cache.cache.clone(), - &bank3.slot() - ) - .lock() - .unwrap() - .get_min_transaction_fee() - .unwrap() - ); - // before block is marked as completed - assert_vec_eq( - &mut vec![5, 9], - &mut prioritization_fee_cache.get_prioritization_fees(), - ); - // after block is completed - sync_finalize_priority_fee_for_test(&mut prioritization_fee_cache, bank3.slot()); - assert_vec_eq( - &mut vec![5, 9, 2], - &mut prioritization_fee_cache.get_prioritization_fees(), - ); - } - } - - #[test] - fn test_get_account_prioritization_fees() { - solana_logger::setup(); - let write_account_a = Pubkey::new_unique(); - let write_account_b = Pubkey::new_unique(); - let write_account_c = Pubkey::new_unique(); - let GenesisConfigInfo { genesis_config, .. } = create_genesis_config(10_000); - let bank0 = Bank::new_for_benches(&genesis_config); - let bank_forks = BankForks::new(bank0); - let bank = bank_forks.working_bank(); - let collector = solana_sdk::pubkey::new_rand(); - let bank1 = Arc::new(Bank::new_from_parent(&bank, &collector, 1)); - let bank2 = Arc::new(Bank::new_from_parent(&bank, &collector, 2)); - let bank3 = Arc::new(Bank::new_from_parent(&bank, &collector, 3)); - - let mut prioritization_fee_cache = PrioritizationFeeCache::default(); - - // Assert no minimum fee from empty cache assert!(prioritization_fee_cache - .get_account_prioritization_fees(&write_account_a) + .get_prioritization_fees(&[write_account_c]) .is_empty()); assert!(prioritization_fee_cache - .get_account_prioritization_fees(&write_account_b) + .get_prioritization_fees(&[write_account_a, write_account_b]) .is_empty()); assert!(prioritization_fee_cache - .get_account_prioritization_fees(&write_account_c) + .get_prioritization_fees(&[write_account_a, write_account_b, write_account_c]) .is_empty()); // Assert after add one transaction for slot 1 { let txs = vec![ - build_sanitized_transaction_for_test(5, &write_account_a, &write_account_b), + build_sanitized_transaction_for_test(2, &write_account_a, &write_account_b), build_sanitized_transaction_for_test( - 0, + 1, &Pubkey::new_unique(), &Pubkey::new_unique(), ), ]; - prioritization_fee_cache.update(bank1.clone(), txs.iter()); + sync_update(&mut prioritization_fee_cache, bank1, txs.iter()); // before block is marked as completed assert!(prioritization_fee_cache - .get_account_prioritization_fees(&write_account_a) + .get_prioritization_fees(&[]) .is_empty()); assert!(prioritization_fee_cache - .get_account_prioritization_fees(&write_account_b) + .get_prioritization_fees(&[write_account_a]) .is_empty()); assert!(prioritization_fee_cache - .get_account_prioritization_fees(&write_account_c) + .get_prioritization_fees(&[write_account_b]) + .is_empty()); + assert!(prioritization_fee_cache + .get_prioritization_fees(&[write_account_c]) + .is_empty()); + assert!(prioritization_fee_cache + .get_prioritization_fees(&[write_account_a, write_account_b]) + .is_empty()); + assert!(prioritization_fee_cache + .get_prioritization_fees(&[write_account_a, write_account_b, write_account_c]) .is_empty()); // after block is completed - sync_finalize_priority_fee_for_test(&mut prioritization_fee_cache, bank1.slot()); + sync_finalize_priority_fee_for_test(&mut prioritization_fee_cache, 1); assert_eq!( - vec![5], - prioritization_fee_cache.get_account_prioritization_fees(&write_account_a) + hashmap_of(vec![(1, 1)]), + prioritization_fee_cache.get_prioritization_fees(&[]) ); assert_eq!( - vec![5], - prioritization_fee_cache.get_account_prioritization_fees(&write_account_b) + hashmap_of(vec![(1, 2)]), + prioritization_fee_cache.get_prioritization_fees(&[write_account_a]) + ); + assert_eq!( + hashmap_of(vec![(1, 2)]), + prioritization_fee_cache.get_prioritization_fees(&[write_account_b]) + ); + assert_eq!( + hashmap_of(vec![(1, 1)]), + prioritization_fee_cache.get_prioritization_fees(&[write_account_c]) + ); + assert_eq!( + hashmap_of(vec![(1, 2)]), + prioritization_fee_cache + .get_prioritization_fees(&[write_account_a, write_account_b]) + ); + assert_eq!( + hashmap_of(vec![(1, 2)]), + prioritization_fee_cache.get_prioritization_fees(&[ + write_account_a, + write_account_b, + write_account_c + ]) ); - assert!(prioritization_fee_cache - .get_account_prioritization_fees(&write_account_c) - .is_empty()); } // Assert after add one transaction for slot 2 { let txs = vec![ - build_sanitized_transaction_for_test(9, &write_account_b, &write_account_c), + build_sanitized_transaction_for_test(4, &write_account_b, &write_account_c), build_sanitized_transaction_for_test( - 0, + 3, &Pubkey::new_unique(), &Pubkey::new_unique(), ), ]; - prioritization_fee_cache.update(bank2.clone(), txs.iter()); + sync_update(&mut prioritization_fee_cache, bank2, txs.iter()); // before block is marked as completed assert_eq!( - vec![5], - prioritization_fee_cache.get_account_prioritization_fees(&write_account_a) + hashmap_of(vec![(1, 1)]), + prioritization_fee_cache.get_prioritization_fees(&[]) ); assert_eq!( - vec![5], - prioritization_fee_cache.get_account_prioritization_fees(&write_account_b) + hashmap_of(vec![(1, 2)]), + prioritization_fee_cache.get_prioritization_fees(&[write_account_a]) + ); + assert_eq!( + hashmap_of(vec![(1, 2)]), + prioritization_fee_cache.get_prioritization_fees(&[write_account_b]) + ); + assert_eq!( + hashmap_of(vec![(1, 1)]), + prioritization_fee_cache.get_prioritization_fees(&[write_account_c]) + ); + assert_eq!( + hashmap_of(vec![(1, 2)]), + prioritization_fee_cache + .get_prioritization_fees(&[write_account_a, write_account_b]) + ); + assert_eq!( + hashmap_of(vec![(1, 2)]), + prioritization_fee_cache.get_prioritization_fees(&[ + write_account_a, + write_account_b, + write_account_c + ]) ); - assert!(prioritization_fee_cache - .get_account_prioritization_fees(&write_account_c) - .is_empty()); // after block is completed - sync_finalize_priority_fee_for_test(&mut prioritization_fee_cache, bank2.slot()); + sync_finalize_priority_fee_for_test(&mut prioritization_fee_cache, 2); assert_eq!( - vec![5], - prioritization_fee_cache.get_account_prioritization_fees(&write_account_a) + hashmap_of(vec![(2, 3), (1, 1)]), + prioritization_fee_cache.get_prioritization_fees(&[]), ); - assert_vec_eq( - &mut vec![5, 9], - &mut prioritization_fee_cache.get_account_prioritization_fees(&write_account_b), + assert_eq!( + hashmap_of(vec![(2, 3), (1, 2)]), + prioritization_fee_cache.get_prioritization_fees(&[write_account_a]), + ); + assert_eq!( + hashmap_of(vec![(2, 4), (1, 2)]), + prioritization_fee_cache.get_prioritization_fees(&[write_account_b]), ); assert_eq!( - vec![9], - prioritization_fee_cache.get_account_prioritization_fees(&write_account_c) + hashmap_of(vec![(2, 4), (1, 1)]), + prioritization_fee_cache.get_prioritization_fees(&[write_account_c]), + ); + assert_eq!( + hashmap_of(vec![(2, 4), (1, 2)]), + prioritization_fee_cache + .get_prioritization_fees(&[write_account_a, write_account_b]), + ); + assert_eq!( + hashmap_of(vec![(2, 4), (1, 2)]), + prioritization_fee_cache.get_prioritization_fees(&[ + write_account_a, + write_account_b, + write_account_c, + ]), ); } // Assert after add one transaction for slot 3 { let txs = vec![ - build_sanitized_transaction_for_test(2, &write_account_a, &write_account_c), + build_sanitized_transaction_for_test(6, &write_account_a, &write_account_c), build_sanitized_transaction_for_test( - 0, + 5, &Pubkey::new_unique(), &Pubkey::new_unique(), ), ]; - prioritization_fee_cache.update(bank3.clone(), txs.iter()); + sync_update(&mut prioritization_fee_cache, bank3, txs.iter()); // before block is marked as completed assert_eq!( - vec![5], - prioritization_fee_cache.get_account_prioritization_fees(&write_account_a) + hashmap_of(vec![(2, 3), (1, 1)]), + prioritization_fee_cache.get_prioritization_fees(&[]), ); - assert_vec_eq( - &mut vec![5, 9], - &mut prioritization_fee_cache.get_account_prioritization_fees(&write_account_b), + assert_eq!( + hashmap_of(vec![(2, 3), (1, 2)]), + prioritization_fee_cache.get_prioritization_fees(&[write_account_a]), ); assert_eq!( - vec![9], - prioritization_fee_cache.get_account_prioritization_fees(&write_account_c) + hashmap_of(vec![(2, 4), (1, 2)]), + prioritization_fee_cache.get_prioritization_fees(&[write_account_b]), + ); + assert_eq!( + hashmap_of(vec![(2, 4), (1, 1)]), + prioritization_fee_cache.get_prioritization_fees(&[write_account_c]), + ); + assert_eq!( + hashmap_of(vec![(2, 4), (1, 2)]), + prioritization_fee_cache + .get_prioritization_fees(&[write_account_a, write_account_b]), + ); + assert_eq!( + hashmap_of(vec![(2, 4), (1, 2)]), + prioritization_fee_cache.get_prioritization_fees(&[ + write_account_a, + write_account_b, + write_account_c, + ]), ); // after block is completed - sync_finalize_priority_fee_for_test(&mut prioritization_fee_cache, bank3.slot()); - assert_vec_eq( - &mut vec![5, 2], - &mut prioritization_fee_cache.get_account_prioritization_fees(&write_account_a), - ); - assert_vec_eq( - &mut vec![5, 9], - &mut prioritization_fee_cache.get_account_prioritization_fees(&write_account_b), - ); - assert_vec_eq( - &mut vec![9, 2], - &mut prioritization_fee_cache.get_account_prioritization_fees(&write_account_c), + sync_finalize_priority_fee_for_test(&mut prioritization_fee_cache, 3); + assert_eq!( + hashmap_of(vec![(3, 5), (2, 3), (1, 1)]), + prioritization_fee_cache.get_prioritization_fees(&[]), + ); + assert_eq!( + hashmap_of(vec![(3, 6), (2, 3), (1, 2)]), + prioritization_fee_cache.get_prioritization_fees(&[write_account_a]), + ); + assert_eq!( + hashmap_of(vec![(3, 5), (2, 4), (1, 2)]), + prioritization_fee_cache.get_prioritization_fees(&[write_account_b]), + ); + assert_eq!( + hashmap_of(vec![(3, 6), (2, 4), (1, 1)]), + prioritization_fee_cache.get_prioritization_fees(&[write_account_c]), + ); + assert_eq!( + hashmap_of(vec![(3, 6), (2, 4), (1, 2)]), + prioritization_fee_cache + .get_prioritization_fees(&[write_account_a, write_account_b]), + ); + assert_eq!( + hashmap_of(vec![(3, 6), (2, 4), (1, 2)]), + prioritization_fee_cache.get_prioritization_fees(&[ + write_account_a, + write_account_b, + write_account_c, + ]), ); } } From b8f2a9d865dae7659238992b40a56f2c9b55cf32 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Sat, 7 Jan 2023 09:53:40 +0000 Subject: [PATCH 280/465] Add rust client support for getRecentPrioritizationFees (backport #29558) (#29564) * Add rust client support for getRecentPrioritizationFees (#29558) (cherry picked from commit e0d2a40d85fad759f5f312244fc82c5ae8c009f6) * Fix conflict * Fix doctests Co-authored-by: Tyera --- client/src/mock_sender.rs | 8 +++-- client/src/nonblocking/rpc_client.rs | 45 ++++++++++++++++++++++++++++ client/src/rpc_client.rs | 37 +++++++++++++++++++++++ client/src/rpc_request.rs | 2 ++ 4 files changed, 90 insertions(+), 2 deletions(-) diff --git a/client/src/mock_sender.rs b/client/src/mock_sender.rs index d94cf0c53451b0..057dbed5c84c38 100644 --- a/client/src/mock_sender.rs +++ b/client/src/mock_sender.rs @@ -9,8 +9,8 @@ use { Response, RpcAccountBalance, RpcBlockProduction, RpcBlockProductionRange, RpcBlockhash, RpcConfirmedTransactionStatusWithSignature, RpcContactInfo, RpcFees, RpcIdentity, RpcInflationGovernor, RpcInflationRate, RpcInflationReward, RpcKeyedAccount, - RpcPerfSample, RpcResponseContext, RpcSimulateTransactionResult, RpcSnapshotSlotInfo, - RpcStakeActivation, RpcSupply, RpcVersionInfo, RpcVoteAccountInfo, + RpcPerfSample, RpcPrioritizationFee, RpcResponseContext, RpcSimulateTransactionResult, + RpcSnapshotSlotInfo, RpcStakeActivation, RpcSupply, RpcVersionInfo, RpcVoteAccountInfo, RpcVoteAccountStatus, StakeActivationState, }, rpc_sender::*, @@ -418,6 +418,10 @@ impl RpcSender for MockSender { num_slots: 123, sample_period_secs: 60, }])?, + "getRecentPrioritizationFees" => serde_json::to_value(vec![RpcPrioritizationFee { + slot: 123_456_789, + prioritization_fee: 10_000, + }])?, "getIdentity" => serde_json::to_value(RpcIdentity { identity: PUBKEY.to_string(), })?, diff --git a/client/src/nonblocking/rpc_client.rs b/client/src/nonblocking/rpc_client.rs index e48b49db7b2c21..e47908016fd157 100644 --- a/client/src/nonblocking/rpc_client.rs +++ b/client/src/nonblocking/rpc_client.rs @@ -3603,6 +3603,51 @@ impl RpcClient { .await } + /// Returns a list of minimum prioritization fees from recent blocks. + /// Takes an optional vector of addresses; if any addresses are provided, the response will + /// reflect the minimum prioritization fee to land a transaction locking all of the provided + /// accounts as writable. + /// + /// Currently, a node's prioritization-fee cache stores data from up to 150 blocks. + /// + /// # RPC Reference + /// + /// This method corresponds directly to the [`getRecentPrioritizationFees`] RPC method. + /// + /// [`getRecentPrioritizationFees`]: https://docs.solana.com/developing/clients/jsonrpc-api#getrecentprioritizationfees + /// + /// # Examples + /// + /// ``` + /// # use solana_client::{ + /// # client_error::ClientError, + /// # nonblocking::rpc_client::RpcClient, + /// # }; + /// # use solana_sdk::signature::{Keypair, Signer}; + /// # futures::executor::block_on(async { + /// # let rpc_client = RpcClient::new_mock("succeeds".to_string()); + /// # let alice = Keypair::new(); + /// # let bob = Keypair::new(); + /// let addresses = vec![alice.pubkey(), bob.pubkey()]; + /// let prioritization_fees = rpc_client.get_recent_prioritization_fees( + /// &addresses, + /// ).await?; + /// # Ok::<(), ClientError>(()) + /// # })?; + /// # Ok::<(), ClientError>(()) + /// ``` + pub async fn get_recent_prioritization_fees( + &self, + addresses: &[Pubkey], + ) -> ClientResult> { + let addresses: Vec<_> = addresses + .iter() + .map(|address| address.to_string()) + .collect(); + self.send(RpcRequest::GetRecentPrioritizationFees, json!([addresses])) + .await + } + /// Returns the identity pubkey for the current node. /// /// # RPC Reference diff --git a/client/src/rpc_client.rs b/client/src/rpc_client.rs index 4c1e805a9ea8b4..bac070ce6fcd3d 100644 --- a/client/src/rpc_client.rs +++ b/client/src/rpc_client.rs @@ -3023,6 +3023,43 @@ impl RpcClient { self.invoke(self.rpc_client.get_recent_performance_samples(limit)) } + /// Returns a list of minimum prioritization fees from recent blocks. + /// Takes an optional vector of addresses; if any addresses are provided, the response will + /// reflect the minimum prioritization fee to land a transaction locking all of the provided + /// accounts as writable. + /// + /// Currently, a node's prioritization-fee cache stores data from up to 150 blocks. + /// + /// # RPC Reference + /// + /// This method corresponds directly to the [`getRecentPrioritizationFees`] RPC method. + /// + /// [`getRecentPrioritizationFees`]: https://docs.solana.com/developing/clients/jsonrpc-api#getrecentprioritizationfees + /// + /// # Examples + /// + /// ``` + /// # use solana_client::{ + /// # client_error::ClientError, + /// # rpc_client::RpcClient, + /// # }; + /// # use solana_sdk::signature::{Keypair, Signer}; + /// # let rpc_client = RpcClient::new_mock("succeeds".to_string()); + /// # let alice = Keypair::new(); + /// # let bob = Keypair::new(); + /// let addresses = vec![alice.pubkey(), bob.pubkey()]; + /// let prioritization_fees = rpc_client.get_recent_prioritization_fees( + /// &addresses, + /// )?; + /// # Ok::<(), ClientError>(()) + /// ``` + pub fn get_recent_prioritization_fees( + &self, + addresses: &[Pubkey], + ) -> ClientResult> { + self.invoke(self.rpc_client.get_recent_prioritization_fees(addresses)) + } + /// Returns the identity pubkey for the current node. /// /// # RPC Reference diff --git a/client/src/rpc_request.rs b/client/src/rpc_request.rs index d3f0ceb1c0ad54..42cd79686b76d3 100644 --- a/client/src/rpc_request.rs +++ b/client/src/rpc_request.rs @@ -79,6 +79,7 @@ pub enum RpcRequest { )] GetRecentBlockhash, GetRecentPerformanceSamples, + GetRecentPrioritizationFees, GetHighestSnapshotSlot, #[deprecated( since = "1.9.0", @@ -157,6 +158,7 @@ impl fmt::Display for RpcRequest { RpcRequest::GetProgramAccounts => "getProgramAccounts", RpcRequest::GetRecentBlockhash => "getRecentBlockhash", RpcRequest::GetRecentPerformanceSamples => "getRecentPerformanceSamples", + RpcRequest::GetRecentPrioritizationFees => "getRecentPrioritizationFees", RpcRequest::GetHighestSnapshotSlot => "getHighestSnapshotSlot", RpcRequest::GetSnapshotSlot => "getSnapshotSlot", RpcRequest::GetSignaturesForAddress => "getSignaturesForAddress", From 207f62445d91f4e84fad53590b20b999f579459f Mon Sep 17 00:00:00 2001 From: Will Hickey Date: Mon, 9 Jan 2023 15:14:49 -0600 Subject: [PATCH 281/465] Add exception for RUSTSEC-2023-0001 (#29587) Add exception for RUSTSEC-2023-0001. This Tokio issue only affects windows. --- ci/do-audit.sh | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/ci/do-audit.sh b/ci/do-audit.sh index 395218e27d6d2e..28d5348cbdd409 100755 --- a/ci/do-audit.sh +++ b/ci/do-audit.sh @@ -29,5 +29,9 @@ cargo_audit_ignores=( # https://github.com/chronotope/chrono/issues/499 --ignore RUSTSEC-2020-0159 + # tokio: vulnerability affecting named pipes on Windows + # + # Not worth upgrading tokio version on a stable branch + --ignore RUSTSEC-2023-0001 ) scripts/cargo-for-all-lock-files.sh stable audit "${cargo_audit_ignores[@]}" From 979792ba1489ada3fdb5f4ab2bfee5203b33dc5a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexander=20Mei=C3=9Fner?= Date: Tue, 10 Jan 2023 11:04:00 +0100 Subject: [PATCH 282/465] Fix - #26737 (#29593) * Revert "Removes `serialized_len_ptr` from `CallerAccount`. (#26737)" 36cfa78fa01f04c9a5d66605d25ce0d4af35d8d9 * Adds feature gate. Co-authored-by: steviez --- programs/bpf_loader/src/syscalls/cpi.rs | 60 +++++++++++++++++++++---- sdk/src/feature_set.rs | 5 +++ 2 files changed, 56 insertions(+), 9 deletions(-) diff --git a/programs/bpf_loader/src/syscalls/cpi.rs b/programs/bpf_loader/src/syscalls/cpi.rs index 96eaf810341d97..bf65d47d0402d3 100644 --- a/programs/bpf_loader/src/syscalls/cpi.rs +++ b/programs/bpf_loader/src/syscalls/cpi.rs @@ -13,6 +13,7 @@ struct CallerAccount<'a> { data: &'a mut [u8], vm_data_addr: u64, ref_to_len_in_vm: &'a mut u64, + serialized_len_ptr: *mut u64, executable: bool, rent_epoch: u64, } @@ -173,7 +174,7 @@ impl<'a, 'b> SyscallInvokeSigned<'a, 'b> for SyscallInvokeSignedRust<'a, 'b> { invoke_context.get_check_aligned(), )?; - let (data, vm_data_addr, ref_to_len_in_vm) = { + let (data, vm_data_addr, ref_to_len_in_vm, serialized_len_ptr) = { // Double translate data out of RefCell let data = *translate_type::<&[u8]>( memory_mapping, @@ -194,6 +195,20 @@ impl<'a, 'b> SyscallInvokeSigned<'a, 'b> for SyscallInvokeSignedRust<'a, 'b> { 8, )? as *mut u64; let ref_to_len_in_vm = unsafe { &mut *translated }; + let serialized_len_ptr = if invoke_context + .feature_set + .is_active(&feature_set::move_serialized_len_ptr_in_cpi::id()) + { + std::ptr::null_mut() + } else { + let ref_of_len_in_input_buffer = + (data.as_ptr() as *const _ as u64).saturating_sub(8); + translate_type_mut::( + memory_mapping, + ref_of_len_in_input_buffer, + invoke_context.get_check_aligned(), + )? + }; let vm_data_addr = data.as_ptr() as u64; ( translate_slice_mut::( @@ -205,6 +220,7 @@ impl<'a, 'b> SyscallInvokeSigned<'a, 'b> for SyscallInvokeSignedRust<'a, 'b> { )?, vm_data_addr, ref_to_len_in_vm, + serialized_len_ptr, ) }; @@ -215,6 +231,7 @@ impl<'a, 'b> SyscallInvokeSigned<'a, 'b> for SyscallInvokeSignedRust<'a, 'b> { data, vm_data_addr, ref_to_len_in_vm, + serialized_len_ptr, executable: account_info.executable, rent_epoch: account_info.rent_epoch, }) @@ -524,6 +541,21 @@ impl<'a, 'b> SyscallInvokeSigned<'a, 'b> for SyscallInvokeSignedC<'a, 'b> { )?; let ref_to_len_in_vm = unsafe { &mut *(addr as *mut u64) }; + let ref_of_len_in_input_buffer = + (account_info.data_addr as *mut u8 as u64).saturating_sub(8); + let serialized_len_ptr = if invoke_context + .feature_set + .is_active(&feature_set::move_serialized_len_ptr_in_cpi::id()) + { + std::ptr::null_mut() + } else { + translate_type_mut::( + memory_mapping, + ref_of_len_in_input_buffer, + invoke_context.get_check_aligned(), + )? + }; + Ok(CallerAccount { lamports, owner, @@ -531,6 +563,7 @@ impl<'a, 'b> SyscallInvokeSigned<'a, 'b> for SyscallInvokeSignedC<'a, 'b> { data, vm_data_addr, ref_to_len_in_vm, + serialized_len_ptr, executable: account_info.executable, rent_epoch: account_info.rent_epoch, }) @@ -967,14 +1000,23 @@ fn call<'a, 'b: 'a>( invoke_context.get_check_size(), )?; *caller_account.ref_to_len_in_vm = new_len as u64; - let serialized_len_ptr = translate_type_mut::( - memory_mapping, - caller_account - .vm_data_addr - .saturating_sub(std::mem::size_of::() as u64), - invoke_context.get_check_aligned(), - )?; - *serialized_len_ptr = new_len as u64; + if invoke_context + .feature_set + .is_active(&feature_set::move_serialized_len_ptr_in_cpi::id()) + { + let serialized_len_ptr = translate_type_mut::( + memory_mapping, + caller_account + .vm_data_addr + .saturating_sub(std::mem::size_of::() as u64), + invoke_context.get_check_aligned(), + )?; + *serialized_len_ptr = new_len as u64; + } else { + unsafe { + *caller_account.serialized_len_ptr = new_len as u64; + } + } } let to_slice = &mut caller_account.data; let from_slice = callee_account diff --git a/sdk/src/feature_set.rs b/sdk/src/feature_set.rs index 6e7d2301af20bb..8214cc5e762c3e 100644 --- a/sdk/src/feature_set.rs +++ b/sdk/src/feature_set.rs @@ -528,6 +528,10 @@ pub mod disable_turbine_fanout_experiments { solana_sdk::declare_id!("Gz1aLrbeQ4Q6PTSafCZcGWZXz91yVRi7ASFzFEr1U4sa"); } +pub mod move_serialized_len_ptr_in_cpi { + solana_sdk::declare_id!("74CoWuBmt3rUVUrCb2JiSTvh6nXyBWUsK4SaMj3CtE3T"); +} + lazy_static! { /// Map of feature identifiers to user-visible description pub static ref FEATURE_NAMES: HashMap = [ @@ -654,6 +658,7 @@ lazy_static! { (commission_updates_only_allowed_in_first_half_of_epoch::id(), "validator commission updates are only allowed in the first half of an epoch #29362"), (enable_turbine_fanout_experiments::id(), "enable turbine fanout experiments #29393"), (disable_turbine_fanout_experiments::id(), "disable turbine fanout experiments #29393"), + (move_serialized_len_ptr_in_cpi::id(), "cpi ignore serialized_len_ptr #29592"), /*************** ADD NEW FEATURES HERE ***************/ ] .iter() From 61a13fc6dc8632be275f081411b427492dfa7700 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 10 Jan 2023 10:17:29 -0600 Subject: [PATCH 283/465] Bump Version to 1.14.13 (#29617) Co-authored-by: willhickey --- Cargo.lock | 484 ++++++++--------- account-decoder/Cargo.toml | 10 +- accounts-bench/Cargo.toml | 12 +- accounts-cluster-bench/Cargo.toml | 34 +- banking-bench/Cargo.toml | 26 +- banks-client/Cargo.toml | 12 +- banks-interface/Cargo.toml | 4 +- banks-server/Cargo.toml | 12 +- bench-streamer/Cargo.toml | 8 +- bench-tps/Cargo.toml | 38 +- bloom/Cargo.toml | 8 +- bucket_map/Cargo.toml | 8 +- clap-utils/Cargo.toml | 8 +- clap-v3-utils/Cargo.toml | 8 +- cli-config/Cargo.toml | 6 +- cli-output/Cargo.toml | 16 +- cli/Cargo.toml | 38 +- client-test/Cargo.toml | 32 +- client/Cargo.toml | 28 +- core/Cargo.toml | 56 +- dos/Cargo.toml | 30 +- download-utils/Cargo.toml | 6 +- entry/Cargo.toml | 16 +- faucet/Cargo.toml | 14 +- frozen-abi/Cargo.toml | 6 +- frozen-abi/macro/Cargo.toml | 2 +- genesis-utils/Cargo.toml | 8 +- genesis/Cargo.toml | 22 +- geyser-plugin-interface/Cargo.toml | 6 +- geyser-plugin-manager/Cargo.toml | 16 +- gossip/Cargo.toml | 38 +- install/Cargo.toml | 14 +- keygen/Cargo.toml | 12 +- ledger-tool/Cargo.toml | 30 +- ledger/Cargo.toml | 40 +- local-cluster/Cargo.toml | 28 +- log-analyzer/Cargo.toml | 6 +- logger/Cargo.toml | 2 +- measure/Cargo.toml | 4 +- merkle-root-bench/Cargo.toml | 12 +- merkle-tree/Cargo.toml | 4 +- metrics/Cargo.toml | 4 +- net-shaper/Cargo.toml | 4 +- net-utils/Cargo.toml | 8 +- notifier/Cargo.toml | 2 +- perf/Cargo.toml | 12 +- poh-bench/Cargo.toml | 14 +- poh/Cargo.toml | 20 +- program-runtime/Cargo.toml | 14 +- program-test/Cargo.toml | 18 +- .../address-lookup-table-tests/Cargo.toml | 8 +- programs/address-lookup-table/Cargo.toml | 12 +- programs/bpf-loader-tests/Cargo.toml | 8 +- programs/bpf/Cargo.lock | 490 +++++++++--------- programs/bpf/Cargo.toml | 28 +- programs/bpf/rust/128bit/Cargo.toml | 6 +- programs/bpf/rust/128bit_dep/Cargo.toml | 4 +- programs/bpf/rust/alloc/Cargo.toml | 4 +- programs/bpf/rust/call_depth/Cargo.toml | 4 +- programs/bpf/rust/caller_access/Cargo.toml | 4 +- programs/bpf/rust/curve25519/Cargo.toml | 6 +- programs/bpf/rust/custom_heap/Cargo.toml | 4 +- programs/bpf/rust/dep_crate/Cargo.toml | 6 +- .../bpf/rust/deprecated_loader/Cargo.toml | 4 +- programs/bpf/rust/dup_accounts/Cargo.toml | 4 +- programs/bpf/rust/error_handling/Cargo.toml | 4 +- programs/bpf/rust/external_spend/Cargo.toml | 4 +- programs/bpf/rust/finalize/Cargo.toml | 4 +- .../rust/get_minimum_delegation/Cargo.toml | 4 +- .../Cargo.toml | 4 +- .../rust/instruction_introspection/Cargo.toml | 4 +- programs/bpf/rust/invoke/Cargo.toml | 4 +- programs/bpf/rust/invoke_and_error/Cargo.toml | 4 +- programs/bpf/rust/invoke_and_ok/Cargo.toml | 4 +- .../bpf/rust/invoke_and_return/Cargo.toml | 4 +- programs/bpf/rust/invoked/Cargo.toml | 4 +- programs/bpf/rust/iter/Cargo.toml | 4 +- programs/bpf/rust/log_data/Cargo.toml | 4 +- programs/bpf/rust/many_args/Cargo.toml | 6 +- programs/bpf/rust/many_args_dep/Cargo.toml | 4 +- programs/bpf/rust/mem/Cargo.toml | 10 +- programs/bpf/rust/membuiltins/Cargo.toml | 6 +- programs/bpf/rust/noop/Cargo.toml | 4 +- programs/bpf/rust/panic/Cargo.toml | 4 +- programs/bpf/rust/param_passing/Cargo.toml | 6 +- .../bpf/rust/param_passing_dep/Cargo.toml | 4 +- programs/bpf/rust/rand/Cargo.toml | 4 +- programs/bpf/rust/realloc/Cargo.toml | 4 +- programs/bpf/rust/realloc_invoke/Cargo.toml | 6 +- .../bpf/rust/ro_account_modify/Cargo.toml | 4 +- programs/bpf/rust/ro_modify/Cargo.toml | 4 +- programs/bpf/rust/sanity/Cargo.toml | 10 +- .../bpf/rust/secp256k1_recover/Cargo.toml | 4 +- programs/bpf/rust/sha/Cargo.toml | 4 +- .../rust/sibling_inner_instruction/Cargo.toml | 4 +- .../bpf/rust/sibling_instruction/Cargo.toml | 4 +- programs/bpf/rust/simulation/Cargo.toml | 12 +- programs/bpf/rust/spoof1/Cargo.toml | 4 +- programs/bpf/rust/spoof1_system/Cargo.toml | 4 +- programs/bpf/rust/sysvar/Cargo.toml | 10 +- programs/bpf/rust/upgradeable/Cargo.toml | 4 +- programs/bpf/rust/upgraded/Cargo.toml | 4 +- programs/bpf_loader/Cargo.toml | 14 +- .../bpf_loader/gen-syscall-list/Cargo.toml | 2 +- programs/compute-budget/Cargo.toml | 6 +- programs/config/Cargo.toml | 8 +- programs/ed25519-tests/Cargo.toml | 6 +- programs/stake/Cargo.toml | 18 +- programs/vote/Cargo.toml | 14 +- programs/zk-token-proof/Cargo.toml | 8 +- rayon-threadlimit/Cargo.toml | 2 +- rbpf-cli/Cargo.toml | 10 +- remote-wallet/Cargo.toml | 4 +- rpc-test/Cargo.toml | 18 +- rpc/Cargo.toml | 48 +- runtime/Cargo.toml | 34 +- runtime/store-tool/Cargo.toml | 8 +- sdk/Cargo.toml | 12 +- sdk/cargo-build-bpf/Cargo.toml | 4 +- sdk/cargo-build-sbf/Cargo.toml | 8 +- .../tests/crates/fail/Cargo.toml | 4 +- .../tests/crates/noop/Cargo.toml | 4 +- sdk/cargo-test-bpf/Cargo.toml | 2 +- sdk/cargo-test-sbf/Cargo.toml | 2 +- sdk/gen-headers/Cargo.toml | 2 +- sdk/macro/Cargo.toml | 2 +- sdk/program/Cargo.toml | 10 +- send-transaction-service/Cargo.toml | 14 +- stake-accounts/Cargo.toml | 16 +- storage-bigtable/Cargo.toml | 10 +- storage-bigtable/build-proto/Cargo.lock | 2 +- storage-bigtable/build-proto/Cargo.toml | 2 +- storage-proto/Cargo.toml | 8 +- streamer/Cargo.toml | 10 +- sys-tuner/Cargo.toml | 6 +- test-validator/Cargo.toml | 28 +- tokens/Cargo.toml | 24 +- transaction-dos/Cargo.toml | 32 +- transaction-status/Cargo.toml | 14 +- upload-perf/Cargo.toml | 4 +- validator/Cargo.toml | 50 +- version/Cargo.toml | 8 +- watchtower/Cargo.toml | 20 +- zk-token-sdk/Cargo.toml | 6 +- 144 files changed, 1269 insertions(+), 1269 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index d739aaf72bf3ff..d65521bf1726b4 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1688,7 +1688,7 @@ dependencies = [ [[package]] name = "gen-headers" -version = "1.14.12" +version = "1.14.13" dependencies = [ "log", "regex", @@ -1696,7 +1696,7 @@ dependencies = [ [[package]] name = "gen-syscall-list" -version = "1.14.12" +version = "1.14.13" dependencies = [ "regex", ] @@ -3747,15 +3747,15 @@ dependencies = [ [[package]] name = "rbpf-cli" -version = "1.14.12" +version = "1.14.13" dependencies = [ "clap 3.1.8", "serde", "serde_json", "solana-bpf-loader-program", - "solana-logger 1.14.12", + "solana-logger 1.14.13", "solana-program-runtime", - "solana-sdk 1.14.12", + "solana-sdk 1.14.13", "solana_rbpf", ] @@ -4467,7 +4467,7 @@ dependencies = [ [[package]] name = "solana-account-decoder" -version = "1.14.12" +version = "1.14.13" dependencies = [ "Inflector", "base64 0.13.0", @@ -4480,7 +4480,7 @@ dependencies = [ "serde_json", "solana-address-lookup-table-program", "solana-config-program", - "solana-sdk 1.14.12", + "solana-sdk 1.14.13", "solana-vote-program", "spl-token", "spl-token-2022", @@ -4490,21 +4490,21 @@ dependencies = [ [[package]] name = "solana-accounts-bench" -version = "1.14.12" +version = "1.14.13" dependencies = [ "clap 2.33.3", "log", "rayon", - "solana-logger 1.14.12", + "solana-logger 1.14.13", "solana-measure", "solana-runtime", - "solana-sdk 1.14.12", + "solana-sdk 1.14.13", "solana-version", ] [[package]] name = "solana-accounts-cluster-bench" -version = "1.14.12" +version = "1.14.13" dependencies = [ "clap 2.33.3", "log", @@ -4517,11 +4517,11 @@ dependencies = [ "solana-faucet", "solana-gossip", "solana-local-cluster", - "solana-logger 1.14.12", + "solana-logger 1.14.13", "solana-measure", "solana-net-utils", "solana-runtime", - "solana-sdk 1.14.12", + "solana-sdk 1.14.13", "solana-streamer", "solana-test-validator", "solana-transaction-status", @@ -4531,7 +4531,7 @@ dependencies = [ [[package]] name = "solana-address-lookup-table-program" -version = "1.14.12" +version = "1.14.13" dependencies = [ "bincode", "bytemuck", @@ -4540,28 +4540,28 @@ dependencies = [ "num-traits", "rustc_version 0.4.0", "serde", - "solana-frozen-abi 1.14.12", - "solana-frozen-abi-macro 1.14.12", - "solana-program 1.14.12", + "solana-frozen-abi 1.14.13", + "solana-frozen-abi-macro 1.14.13", + "solana-program 1.14.13", "solana-program-runtime", - "solana-sdk 1.14.12", + "solana-sdk 1.14.13", "thiserror", ] [[package]] name = "solana-address-lookup-table-program-tests" -version = "1.14.12" +version = "1.14.13" dependencies = [ "assert_matches", "bincode", "solana-address-lookup-table-program", "solana-program-test", - "solana-sdk 1.14.12", + "solana-sdk 1.14.13", ] [[package]] name = "solana-banking-bench" -version = "1.14.12" +version = "1.14.13" dependencies = [ "clap 3.1.8", "crossbeam-channel", @@ -4572,27 +4572,27 @@ dependencies = [ "solana-core", "solana-gossip", "solana-ledger", - "solana-logger 1.14.12", + "solana-logger 1.14.13", "solana-measure", "solana-perf", "solana-poh", "solana-runtime", - "solana-sdk 1.14.12", + "solana-sdk 1.14.13", "solana-streamer", "solana-version", ] [[package]] name = "solana-banks-client" -version = "1.14.12" +version = "1.14.13" dependencies = [ "borsh", "futures 0.3.21", "solana-banks-interface", "solana-banks-server", - "solana-program 1.14.12", + "solana-program 1.14.13", "solana-runtime", - "solana-sdk 1.14.12", + "solana-sdk 1.14.13", "tarpc", "thiserror", "tokio", @@ -4601,16 +4601,16 @@ dependencies = [ [[package]] name = "solana-banks-interface" -version = "1.14.12" +version = "1.14.13" dependencies = [ "serde", - "solana-sdk 1.14.12", + "solana-sdk 1.14.13", "tarpc", ] [[package]] name = "solana-banks-server" -version = "1.14.12" +version = "1.14.13" dependencies = [ "bincode", "crossbeam-channel", @@ -4618,7 +4618,7 @@ dependencies = [ "solana-banks-interface", "solana-client", "solana-runtime", - "solana-sdk 1.14.12", + "solana-sdk 1.14.13", "solana-send-transaction-service", "tarpc", "tokio", @@ -4628,7 +4628,7 @@ dependencies = [ [[package]] name = "solana-bench-streamer" -version = "1.14.12" +version = "1.14.13" dependencies = [ "clap 3.1.8", "crossbeam-channel", @@ -4639,7 +4639,7 @@ dependencies = [ [[package]] name = "solana-bench-tps" -version = "1.14.12" +version = "1.14.13" dependencies = [ "clap 2.33.3", "crossbeam-channel", @@ -4656,13 +4656,13 @@ dependencies = [ "solana-genesis", "solana-gossip", "solana-local-cluster", - "solana-logger 1.14.12", + "solana-logger 1.14.13", "solana-measure", "solana-metrics", "solana-net-utils", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.12", + "solana-sdk 1.14.13", "solana-streamer", "solana-test-validator", "solana-version", @@ -4671,7 +4671,7 @@ dependencies = [ [[package]] name = "solana-bloom" -version = "1.14.12" +version = "1.14.13" dependencies = [ "bv", "fnv", @@ -4681,14 +4681,14 @@ dependencies = [ "rustc_version 0.4.0", "serde", "serde_derive", - "solana-frozen-abi 1.14.12", - "solana-frozen-abi-macro 1.14.12", - "solana-sdk 1.14.12", + "solana-frozen-abi 1.14.13", + "solana-frozen-abi-macro 1.14.13", + "solana-sdk 1.14.13", ] [[package]] name = "solana-bpf-loader-program" -version = "1.14.12" +version = "1.14.13" dependencies = [ "bincode", "byteorder", @@ -4699,26 +4699,26 @@ dependencies = [ "solana-metrics", "solana-program-runtime", "solana-runtime", - "solana-sdk 1.14.12", - "solana-zk-token-sdk 1.14.12", + "solana-sdk 1.14.13", + "solana-zk-token-sdk 1.14.13", "solana_rbpf", "thiserror", ] [[package]] name = "solana-bpf-loader-program-tests" -version = "1.14.12" +version = "1.14.13" dependencies = [ "assert_matches", "bincode", "solana-bpf-loader-program", "solana-program-test", - "solana-sdk 1.14.12", + "solana-sdk 1.14.13", ] [[package]] name = "solana-bucket-map" -version = "1.14.12" +version = "1.14.13" dependencies = [ "fs_extra", "log", @@ -4726,24 +4726,24 @@ dependencies = [ "modular-bitfield", "rand 0.7.3", "rayon", - "solana-logger 1.14.12", + "solana-logger 1.14.13", "solana-measure", - "solana-sdk 1.14.12", + "solana-sdk 1.14.13", "tempfile", ] [[package]] name = "solana-cargo-build-bpf" -version = "1.14.12" +version = "1.14.13" dependencies = [ "cargo_metadata", "clap 3.1.8", - "solana-sdk 1.14.12", + "solana-sdk 1.14.13", ] [[package]] name = "solana-cargo-build-sbf" -version = "1.14.12" +version = "1.14.13" dependencies = [ "bzip2", "cargo_metadata", @@ -4752,14 +4752,14 @@ dependencies = [ "regex", "serial_test", "solana-download-utils", - "solana-logger 1.14.12", - "solana-sdk 1.14.12", + "solana-logger 1.14.13", + "solana-sdk 1.14.13", "tar", ] [[package]] name = "solana-cargo-test-bpf" -version = "1.14.12" +version = "1.14.13" dependencies = [ "cargo_metadata", "clap 3.1.8", @@ -4767,7 +4767,7 @@ dependencies = [ [[package]] name = "solana-cargo-test-sbf" -version = "1.14.12" +version = "1.14.13" dependencies = [ "cargo_metadata", "clap 3.1.8", @@ -4775,14 +4775,14 @@ dependencies = [ [[package]] name = "solana-clap-utils" -version = "1.14.12" +version = "1.14.13" dependencies = [ "chrono", "clap 2.33.3", "rpassword", "solana-perf", "solana-remote-wallet", - "solana-sdk 1.14.12", + "solana-sdk 1.14.13", "tempfile", "thiserror", "tiny-bip39", @@ -4792,14 +4792,14 @@ dependencies = [ [[package]] name = "solana-clap-v3-utils" -version = "1.14.12" +version = "1.14.13" dependencies = [ "chrono", "clap 3.1.8", "rpassword", "solana-perf", "solana-remote-wallet", - "solana-sdk 1.14.12", + "solana-sdk 1.14.13", "tempfile", "thiserror", "tiny-bip39", @@ -4809,7 +4809,7 @@ dependencies = [ [[package]] name = "solana-cli" -version = "1.14.12" +version = "1.14.13" dependencies = [ "bincode", "bs58", @@ -4837,10 +4837,10 @@ dependencies = [ "solana-client", "solana-config-program", "solana-faucet", - "solana-logger 1.14.12", + "solana-logger 1.14.13", "solana-program-runtime", "solana-remote-wallet", - "solana-sdk 1.14.12", + "solana-sdk 1.14.13", "solana-streamer", "solana-test-validator", "solana-transaction-status", @@ -4855,7 +4855,7 @@ dependencies = [ [[package]] name = "solana-cli-config" -version = "1.14.12" +version = "1.14.13" dependencies = [ "anyhow", "dirs-next", @@ -4864,13 +4864,13 @@ dependencies = [ "serde_derive", "serde_yaml", "solana-clap-utils", - "solana-sdk 1.14.12", + "solana-sdk 1.14.13", "url 2.2.2", ] [[package]] name = "solana-cli-output" -version = "1.14.12" +version = "1.14.13" dependencies = [ "Inflector", "base64 0.13.0", @@ -4888,7 +4888,7 @@ dependencies = [ "solana-clap-utils", "solana-cli-config", "solana-client", - "solana-sdk 1.14.12", + "solana-sdk 1.14.13", "solana-transaction-status", "solana-vote-program", "spl-memo", @@ -4896,7 +4896,7 @@ dependencies = [ [[package]] name = "solana-client" -version = "1.14.12" +version = "1.14.13" dependencies = [ "anyhow", "assert_matches", @@ -4932,12 +4932,12 @@ dependencies = [ "solana-account-decoder", "solana-clap-utils", "solana-faucet", - "solana-logger 1.14.12", + "solana-logger 1.14.13", "solana-measure", "solana-metrics", "solana-net-utils", "solana-perf", - "solana-sdk 1.14.12", + "solana-sdk 1.14.13", "solana-streamer", "solana-transaction-status", "solana-version", @@ -4953,14 +4953,14 @@ dependencies = [ [[package]] name = "solana-client-test" -version = "1.14.12" +version = "1.14.13" dependencies = [ "futures-util", "serde_json", "serial_test", "solana-client", "solana-ledger", - "solana-logger 1.14.12", + "solana-logger 1.14.13", "solana-measure", "solana-merkle-tree", "solana-metrics", @@ -4968,7 +4968,7 @@ dependencies = [ "solana-rayon-threadlimit", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.12", + "solana-sdk 1.14.13", "solana-streamer", "solana-test-validator", "solana-transaction-status", @@ -4979,28 +4979,28 @@ dependencies = [ [[package]] name = "solana-compute-budget-program" -version = "1.14.12" +version = "1.14.13" dependencies = [ "solana-program-runtime", - "solana-sdk 1.14.12", + "solana-sdk 1.14.13", ] [[package]] name = "solana-config-program" -version = "1.14.12" +version = "1.14.13" dependencies = [ "bincode", "chrono", "serde", "serde_derive", - "solana-logger 1.14.12", + "solana-logger 1.14.13", "solana-program-runtime", - "solana-sdk 1.14.12", + "solana-sdk 1.14.13", ] [[package]] name = "solana-core" -version = "1.14.12" +version = "1.14.13" dependencies = [ "ahash", "base64 0.13.0", @@ -5033,12 +5033,12 @@ dependencies = [ "solana-bloom", "solana-client", "solana-entry", - "solana-frozen-abi 1.14.12", - "solana-frozen-abi-macro 1.14.12", + "solana-frozen-abi 1.14.13", + "solana-frozen-abi-macro 1.14.13", "solana-geyser-plugin-manager", "solana-gossip", "solana-ledger", - "solana-logger 1.14.12", + "solana-logger 1.14.13", "solana-measure", "solana-metrics", "solana-net-utils", @@ -5048,7 +5048,7 @@ dependencies = [ "solana-rayon-threadlimit", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.12", + "solana-sdk 1.14.13", "solana-send-transaction-service", "solana-stake-program", "solana-streamer", @@ -5068,7 +5068,7 @@ dependencies = [ [[package]] name = "solana-dos" -version = "1.14.12" +version = "1.14.13" dependencies = [ "bincode", "clap 3.1.8", @@ -5084,42 +5084,42 @@ dependencies = [ "solana-faucet", "solana-gossip", "solana-local-cluster", - "solana-logger 1.14.12", + "solana-logger 1.14.13", "solana-measure", "solana-net-utils", "solana-perf", "solana-rpc", - "solana-sdk 1.14.12", + "solana-sdk 1.14.13", "solana-streamer", "solana-version", ] [[package]] name = "solana-download-utils" -version = "1.14.12" +version = "1.14.13" dependencies = [ "console", "indicatif", "log", "reqwest", "solana-runtime", - "solana-sdk 1.14.12", + "solana-sdk 1.14.13", ] [[package]] name = "solana-ed25519-program-tests" -version = "1.14.12" +version = "1.14.13" dependencies = [ "assert_matches", "ed25519-dalek", "rand 0.7.3", "solana-program-test", - "solana-sdk 1.14.12", + "solana-sdk 1.14.13", ] [[package]] name = "solana-entry" -version = "1.14.12" +version = "1.14.13" dependencies = [ "bincode", "crossbeam-channel", @@ -5131,18 +5131,18 @@ dependencies = [ "rand 0.7.3", "rayon", "serde", - "solana-logger 1.14.12", + "solana-logger 1.14.13", "solana-measure", "solana-merkle-tree", "solana-metrics", "solana-perf", "solana-rayon-threadlimit", - "solana-sdk 1.14.12", + "solana-sdk 1.14.13", ] [[package]] name = "solana-faucet" -version = "1.14.12" +version = "1.14.13" dependencies = [ "bincode", "byteorder", @@ -5153,9 +5153,9 @@ dependencies = [ "serde_derive", "solana-clap-utils", "solana-cli-config", - "solana-logger 1.14.12", + "solana-logger 1.14.13", "solana-metrics", - "solana-sdk 1.14.12", + "solana-sdk 1.14.13", "solana-version", "spl-memo", "thiserror", @@ -5198,7 +5198,7 @@ dependencies = [ [[package]] name = "solana-frozen-abi" -version = "1.14.12" +version = "1.14.13" dependencies = [ "ahash", "blake3", @@ -5223,8 +5223,8 @@ dependencies = [ "serde_derive", "serde_json", "sha2 0.10.2", - "solana-frozen-abi-macro 1.14.12", - "solana-logger 1.14.12", + "solana-frozen-abi-macro 1.14.13", + "solana-logger 1.14.13", "subtle", "thiserror", ] @@ -5243,7 +5243,7 @@ dependencies = [ [[package]] name = "solana-frozen-abi-macro" -version = "1.14.12" +version = "1.14.13" dependencies = [ "proc-macro2 1.0.41", "quote 1.0.18", @@ -5253,7 +5253,7 @@ dependencies = [ [[package]] name = "solana-genesis" -version = "1.14.12" +version = "1.14.13" dependencies = [ "base64 0.13.0", "clap 2.33.3", @@ -5264,9 +5264,9 @@ dependencies = [ "solana-cli-config", "solana-entry", "solana-ledger", - "solana-logger 1.14.12", + "solana-logger 1.14.13", "solana-runtime", - "solana-sdk 1.14.12", + "solana-sdk 1.14.13", "solana-stake-program", "solana-version", "solana-vote-program", @@ -5275,26 +5275,26 @@ dependencies = [ [[package]] name = "solana-genesis-utils" -version = "1.14.12" +version = "1.14.13" dependencies = [ "solana-download-utils", "solana-runtime", - "solana-sdk 1.14.12", + "solana-sdk 1.14.13", ] [[package]] name = "solana-geyser-plugin-interface" -version = "1.14.12" +version = "1.14.13" dependencies = [ "log", - "solana-sdk 1.14.12", + "solana-sdk 1.14.13", "solana-transaction-status", "thiserror", ] [[package]] name = "solana-geyser-plugin-manager" -version = "1.14.12" +version = "1.14.13" dependencies = [ "bs58", "crossbeam-channel", @@ -5307,14 +5307,14 @@ dependencies = [ "solana-metrics", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.12", + "solana-sdk 1.14.13", "solana-transaction-status", "thiserror", ] [[package]] name = "solana-gossip" -version = "1.14.12" +version = "1.14.13" dependencies = [ "bincode", "bv", @@ -5341,17 +5341,17 @@ dependencies = [ "solana-clap-utils", "solana-client", "solana-entry", - "solana-frozen-abi 1.14.12", - "solana-frozen-abi-macro 1.14.12", + "solana-frozen-abi 1.14.13", + "solana-frozen-abi-macro 1.14.13", "solana-ledger", - "solana-logger 1.14.12", + "solana-logger 1.14.13", "solana-measure", "solana-metrics", "solana-net-utils", "solana-perf", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.14.12", + "solana-sdk 1.14.13", "solana-streamer", "solana-version", "solana-vote-program", @@ -5360,7 +5360,7 @@ dependencies = [ [[package]] name = "solana-install" -version = "1.14.12" +version = "1.14.13" dependencies = [ "atty", "bincode", @@ -5381,8 +5381,8 @@ dependencies = [ "solana-clap-utils", "solana-client", "solana-config-program", - "solana-logger 1.14.12", - "solana-sdk 1.14.12", + "solana-logger 1.14.13", + "solana-sdk 1.14.13", "solana-version", "tar", "tempfile", @@ -5393,7 +5393,7 @@ dependencies = [ [[package]] name = "solana-keygen" -version = "1.14.12" +version = "1.14.13" dependencies = [ "bs58", "clap 3.1.8", @@ -5402,14 +5402,14 @@ dependencies = [ "solana-clap-v3-utils", "solana-cli-config", "solana-remote-wallet", - "solana-sdk 1.14.12", + "solana-sdk 1.14.13", "solana-version", "tiny-bip39", ] [[package]] name = "solana-ledger" -version = "1.14.12" +version = "1.14.13" dependencies = [ "assert_matches", "bincode", @@ -5443,16 +5443,16 @@ dependencies = [ "solana-account-decoder", "solana-bpf-loader-program", "solana-entry", - "solana-frozen-abi 1.14.12", - "solana-frozen-abi-macro 1.14.12", - "solana-logger 1.14.12", + "solana-frozen-abi 1.14.13", + "solana-frozen-abi-macro 1.14.13", + "solana-logger 1.14.13", "solana-measure", "solana-metrics", "solana-perf", "solana-program-runtime", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.14.12", + "solana-sdk 1.14.13", "solana-stake-program", "solana-storage-bigtable", "solana-storage-proto", @@ -5471,7 +5471,7 @@ dependencies = [ [[package]] name = "solana-ledger-tool" -version = "1.14.12" +version = "1.14.13" dependencies = [ "assert_cmd", "base64 0.13.0", @@ -5493,10 +5493,10 @@ dependencies = [ "solana-core", "solana-entry", "solana-ledger", - "solana-logger 1.14.12", + "solana-logger 1.14.13", "solana-measure", "solana-runtime", - "solana-sdk 1.14.12", + "solana-sdk 1.14.13", "solana-stake-program", "solana-storage-bigtable", "solana-transaction-status", @@ -5508,7 +5508,7 @@ dependencies = [ [[package]] name = "solana-local-cluster" -version = "1.14.12" +version = "1.14.13" dependencies = [ "assert_matches", "crossbeam-channel", @@ -5526,9 +5526,9 @@ dependencies = [ "solana-entry", "solana-gossip", "solana-ledger", - "solana-logger 1.14.12", + "solana-logger 1.14.13", "solana-runtime", - "solana-sdk 1.14.12", + "solana-sdk 1.14.13", "solana-stake-program", "solana-streamer", "solana-vote-program", @@ -5537,13 +5537,13 @@ dependencies = [ [[package]] name = "solana-log-analyzer" -version = "1.14.12" +version = "1.14.13" dependencies = [ "byte-unit", "clap 3.1.8", "serde", "serde_json", - "solana-logger 1.14.12", + "solana-logger 1.14.13", "solana-version", ] @@ -5560,7 +5560,7 @@ dependencies = [ [[package]] name = "solana-logger" -version = "1.14.12" +version = "1.14.13" dependencies = [ "env_logger", "lazy_static", @@ -5569,38 +5569,38 @@ dependencies = [ [[package]] name = "solana-measure" -version = "1.14.12" +version = "1.14.13" dependencies = [ "log", - "solana-sdk 1.14.12", + "solana-sdk 1.14.13", ] [[package]] name = "solana-merkle-root-bench" -version = "1.14.12" +version = "1.14.13" dependencies = [ "clap 2.33.3", "log", - "solana-logger 1.14.12", + "solana-logger 1.14.13", "solana-measure", "solana-runtime", - "solana-sdk 1.14.12", + "solana-sdk 1.14.13", "solana-version", ] [[package]] name = "solana-merkle-tree" -version = "1.14.12" +version = "1.14.13" dependencies = [ "fast-math", "hex", "matches", - "solana-program 1.14.12", + "solana-program 1.14.13", ] [[package]] name = "solana-metrics" -version = "1.14.12" +version = "1.14.13" dependencies = [ "crossbeam-channel", "env_logger", @@ -5610,23 +5610,23 @@ dependencies = [ "rand 0.7.3", "reqwest", "serial_test", - "solana-sdk 1.14.12", + "solana-sdk 1.14.13", ] [[package]] name = "solana-net-shaper" -version = "1.14.12" +version = "1.14.13" dependencies = [ "clap 3.1.8", "rand 0.7.3", "serde", "serde_json", - "solana-logger 1.14.12", + "solana-logger 1.14.13", ] [[package]] name = "solana-net-utils" -version = "1.14.12" +version = "1.14.13" dependencies = [ "bincode", "clap 3.1.8", @@ -5637,8 +5637,8 @@ dependencies = [ "serde", "serde_derive", "socket2", - "solana-logger 1.14.12", - "solana-sdk 1.14.12", + "solana-logger 1.14.13", + "solana-sdk 1.14.13", "solana-version", "tokio", "url 2.2.2", @@ -5646,7 +5646,7 @@ dependencies = [ [[package]] name = "solana-notifier" -version = "1.14.12" +version = "1.14.13" dependencies = [ "log", "reqwest", @@ -5655,7 +5655,7 @@ dependencies = [ [[package]] name = "solana-perf" -version = "1.14.12" +version = "1.14.13" dependencies = [ "ahash", "bincode", @@ -5673,16 +5673,16 @@ dependencies = [ "rand 0.7.3", "rayon", "serde", - "solana-logger 1.14.12", + "solana-logger 1.14.13", "solana-metrics", "solana-rayon-threadlimit", - "solana-sdk 1.14.12", + "solana-sdk 1.14.13", "solana-vote-program", ] [[package]] name = "solana-poh" -version = "1.14.12" +version = "1.14.13" dependencies = [ "bincode", "core_affinity", @@ -5692,29 +5692,29 @@ dependencies = [ "rand 0.7.3", "solana-entry", "solana-ledger", - "solana-logger 1.14.12", + "solana-logger 1.14.13", "solana-measure", "solana-metrics", "solana-perf", "solana-runtime", - "solana-sdk 1.14.12", + "solana-sdk 1.14.13", "solana-sys-tuner", "thiserror", ] [[package]] name = "solana-poh-bench" -version = "1.14.12" +version = "1.14.13" dependencies = [ "clap 3.1.8", "log", "rand 0.7.3", "rayon", "solana-entry", - "solana-logger 1.14.12", + "solana-logger 1.14.13", "solana-measure", "solana-perf", - "solana-sdk 1.14.12", + "solana-sdk 1.14.13", "solana-version", ] @@ -5769,7 +5769,7 @@ dependencies = [ [[package]] name = "solana-program" -version = "1.14.12" +version = "1.14.13" dependencies = [ "anyhow", "assert_matches", @@ -5807,10 +5807,10 @@ dependencies = [ "serde_json", "sha2 0.10.2", "sha3 0.10.1", - "solana-frozen-abi 1.14.12", - "solana-frozen-abi-macro 1.14.12", - "solana-logger 1.14.12", - "solana-sdk-macro 1.14.12", + "solana-frozen-abi 1.14.13", + "solana-frozen-abi-macro 1.14.13", + "solana-logger 1.14.13", + "solana-sdk-macro 1.14.13", "static_assertions", "thiserror", "tiny-bip39", @@ -5820,7 +5820,7 @@ dependencies = [ [[package]] name = "solana-program-runtime" -version = "1.14.12" +version = "1.14.13" dependencies = [ "base64 0.13.0", "bincode", @@ -5835,18 +5835,18 @@ dependencies = [ "rand 0.7.3", "rustc_version 0.4.0", "serde", - "solana-frozen-abi 1.14.12", - "solana-frozen-abi-macro 1.14.12", - "solana-logger 1.14.12", + "solana-frozen-abi 1.14.13", + "solana-frozen-abi-macro 1.14.13", + "solana-logger 1.14.13", "solana-measure", "solana-metrics", - "solana-sdk 1.14.12", + "solana-sdk 1.14.13", "thiserror", ] [[package]] name = "solana-program-test" -version = "1.14.12" +version = "1.14.13" dependencies = [ "assert_matches", "async-trait", @@ -5858,10 +5858,10 @@ dependencies = [ "solana-banks-client", "solana-banks-server", "solana-bpf-loader-program", - "solana-logger 1.14.12", + "solana-logger 1.14.13", "solana-program-runtime", "solana-runtime", - "solana-sdk 1.14.12", + "solana-sdk 1.14.13", "solana-vote-program", "thiserror", "tokio", @@ -5869,7 +5869,7 @@ dependencies = [ [[package]] name = "solana-rayon-threadlimit" -version = "1.14.12" +version = "1.14.13" dependencies = [ "lazy_static", "num_cpus", @@ -5877,7 +5877,7 @@ dependencies = [ [[package]] name = "solana-remote-wallet" -version = "1.14.12" +version = "1.14.13" dependencies = [ "console", "dialoguer", @@ -5888,14 +5888,14 @@ dependencies = [ "parking_lot 0.12.1", "qstring", "semver 1.0.10", - "solana-sdk 1.14.12", + "solana-sdk 1.14.13", "thiserror", "uriparse", ] [[package]] name = "solana-rpc" -version = "1.14.12" +version = "1.14.13" dependencies = [ "base64 0.13.0", "bincode", @@ -5931,7 +5931,7 @@ dependencies = [ "solana-poh", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.14.12", + "solana-sdk 1.14.13", "solana-send-transaction-service", "solana-stake-program", "solana-storage-bigtable", @@ -5950,7 +5950,7 @@ dependencies = [ [[package]] name = "solana-rpc-test" -version = "1.14.12" +version = "1.14.13" dependencies = [ "bincode", "bs58", @@ -5962,9 +5962,9 @@ dependencies = [ "serde_json", "solana-account-decoder", "solana-client", - "solana-logger 1.14.12", + "solana-logger 1.14.13", "solana-rpc", - "solana-sdk 1.14.12", + "solana-sdk 1.14.13", "solana-streamer", "solana-test-validator", "solana-transaction-status", @@ -5973,7 +5973,7 @@ dependencies = [ [[package]] name = "solana-runtime" -version = "1.14.12" +version = "1.14.13" dependencies = [ "arrayref", "assert_matches", @@ -6014,18 +6014,18 @@ dependencies = [ "solana-bucket-map", "solana-compute-budget-program", "solana-config-program", - "solana-frozen-abi 1.14.12", - "solana-frozen-abi-macro 1.14.12", - "solana-logger 1.14.12", + "solana-frozen-abi 1.14.13", + "solana-frozen-abi-macro 1.14.13", + "solana-logger 1.14.13", "solana-measure", "solana-metrics", "solana-program-runtime", "solana-rayon-threadlimit", - "solana-sdk 1.14.12", + "solana-sdk 1.14.13", "solana-stake-program", "solana-vote-program", "solana-zk-token-proof-program", - "solana-zk-token-sdk 1.14.12", + "solana-zk-token-sdk 1.14.13", "strum", "strum_macros", "symlink", @@ -6088,7 +6088,7 @@ dependencies = [ [[package]] name = "solana-sdk" -version = "1.14.12" +version = "1.14.13" dependencies = [ "anyhow", "assert_matches", @@ -6128,11 +6128,11 @@ dependencies = [ "serde_json", "sha2 0.10.2", "sha3 0.10.1", - "solana-frozen-abi 1.14.12", - "solana-frozen-abi-macro 1.14.12", - "solana-logger 1.14.12", - "solana-program 1.14.12", - "solana-sdk-macro 1.14.12", + "solana-frozen-abi 1.14.13", + "solana-frozen-abi-macro 1.14.13", + "solana-logger 1.14.13", + "solana-program 1.14.13", + "solana-sdk-macro 1.14.13", "static_assertions", "thiserror", "tiny-bip39", @@ -6155,7 +6155,7 @@ dependencies = [ [[package]] name = "solana-sdk-macro" -version = "1.14.12" +version = "1.14.13" dependencies = [ "bs58", "proc-macro2 1.0.41", @@ -6166,21 +6166,21 @@ dependencies = [ [[package]] name = "solana-send-transaction-service" -version = "1.14.12" +version = "1.14.13" dependencies = [ "crossbeam-channel", "log", "solana-client", - "solana-logger 1.14.12", + "solana-logger 1.14.13", "solana-measure", "solana-metrics", "solana-runtime", - "solana-sdk 1.14.12", + "solana-sdk 1.14.13", ] [[package]] name = "solana-stake-accounts" -version = "1.14.12" +version = "1.14.13" dependencies = [ "clap 2.33.3", "solana-clap-utils", @@ -6188,13 +6188,13 @@ dependencies = [ "solana-client", "solana-remote-wallet", "solana-runtime", - "solana-sdk 1.14.12", + "solana-sdk 1.14.13", "solana-stake-program", ] [[package]] name = "solana-stake-program" -version = "1.14.12" +version = "1.14.13" dependencies = [ "assert_matches", "bincode", @@ -6206,12 +6206,12 @@ dependencies = [ "serde", "serde_derive", "solana-config-program", - "solana-frozen-abi 1.14.12", - "solana-frozen-abi-macro 1.14.12", - "solana-logger 1.14.12", + "solana-frozen-abi 1.14.13", + "solana-frozen-abi-macro 1.14.13", + "solana-logger 1.14.13", "solana-metrics", "solana-program-runtime", - "solana-sdk 1.14.12", + "solana-sdk 1.14.13", "solana-vote-program", "test-case", "thiserror", @@ -6219,7 +6219,7 @@ dependencies = [ [[package]] name = "solana-storage-bigtable" -version = "1.14.12" +version = "1.14.13" dependencies = [ "backoff", "bincode", @@ -6240,7 +6240,7 @@ dependencies = [ "serde_derive", "smpl_jwt", "solana-metrics", - "solana-sdk 1.14.12", + "solana-sdk 1.14.13", "solana-storage-proto", "solana-transaction-status", "thiserror", @@ -6251,7 +6251,7 @@ dependencies = [ [[package]] name = "solana-storage-proto" -version = "1.14.12" +version = "1.14.13" dependencies = [ "bincode", "bs58", @@ -6260,25 +6260,25 @@ dependencies = [ "protobuf-src", "serde", "solana-account-decoder", - "solana-sdk 1.14.12", + "solana-sdk 1.14.13", "solana-transaction-status", "tonic-build 0.8.0", ] [[package]] name = "solana-store-tool" -version = "1.14.12" +version = "1.14.13" dependencies = [ "clap 2.33.3", "log", - "solana-logger 1.14.12", + "solana-logger 1.14.13", "solana-runtime", "solana-version", ] [[package]] name = "solana-streamer" -version = "1.14.12" +version = "1.14.13" dependencies = [ "crossbeam-channel", "futures-util", @@ -6295,10 +6295,10 @@ dependencies = [ "rand 0.7.3", "rcgen", "rustls 0.20.6", - "solana-logger 1.14.12", + "solana-logger 1.14.13", "solana-metrics", "solana-perf", - "solana-sdk 1.14.12", + "solana-sdk 1.14.13", "thiserror", "tokio", "x509-parser", @@ -6306,13 +6306,13 @@ dependencies = [ [[package]] name = "solana-sys-tuner" -version = "1.14.12" +version = "1.14.13" dependencies = [ "clap 2.33.3", "libc", "log", "nix", - "solana-logger 1.14.12", + "solana-logger 1.14.13", "solana-version", "sysctl", "unix_socket2", @@ -6321,7 +6321,7 @@ dependencies = [ [[package]] name = "solana-test-validator" -version = "1.14.12" +version = "1.14.13" dependencies = [ "base64 0.13.0", "log", @@ -6332,20 +6332,20 @@ dependencies = [ "solana-core", "solana-gossip", "solana-ledger", - "solana-logger 1.14.12", + "solana-logger 1.14.13", "solana-net-utils", "solana-program-runtime", "solana-program-test", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.12", + "solana-sdk 1.14.13", "solana-streamer", "tokio", ] [[package]] name = "solana-tokens" -version = "1.14.12" +version = "1.14.13" dependencies = [ "bincode", "chrono", @@ -6361,9 +6361,9 @@ dependencies = [ "solana-clap-utils", "solana-cli-config", "solana-client", - "solana-logger 1.14.12", + "solana-logger 1.14.13", "solana-remote-wallet", - "solana-sdk 1.14.12", + "solana-sdk 1.14.13", "solana-streamer", "solana-test-validator", "solana-transaction-status", @@ -6376,7 +6376,7 @@ dependencies = [ [[package]] name = "solana-transaction-dos" -version = "1.14.12" +version = "1.14.13" dependencies = [ "bincode", "clap 2.33.3", @@ -6390,11 +6390,11 @@ dependencies = [ "solana-faucet", "solana-gossip", "solana-local-cluster", - "solana-logger 1.14.12", + "solana-logger 1.14.13", "solana-measure", "solana-net-utils", "solana-runtime", - "solana-sdk 1.14.12", + "solana-sdk 1.14.13", "solana-streamer", "solana-transaction-status", "solana-version", @@ -6402,7 +6402,7 @@ dependencies = [ [[package]] name = "solana-transaction-status" -version = "1.14.12" +version = "1.14.13" dependencies = [ "Inflector", "base64 0.13.0", @@ -6418,7 +6418,7 @@ dependencies = [ "solana-address-lookup-table-program", "solana-measure", "solana-metrics", - "solana-sdk 1.14.12", + "solana-sdk 1.14.13", "solana-vote-program", "spl-associated-token-account", "spl-memo", @@ -6429,7 +6429,7 @@ dependencies = [ [[package]] name = "solana-upload-perf" -version = "1.14.12" +version = "1.14.13" dependencies = [ "serde_json", "solana-metrics", @@ -6437,7 +6437,7 @@ dependencies = [ [[package]] name = "solana-validator" -version = "1.14.12" +version = "1.14.13" dependencies = [ "chrono", "clap 2.33.3", @@ -6468,14 +6468,14 @@ dependencies = [ "solana-genesis-utils", "solana-gossip", "solana-ledger", - "solana-logger 1.14.12", + "solana-logger 1.14.13", "solana-metrics", "solana-net-utils", "solana-perf", "solana-poh", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.12", + "solana-sdk 1.14.13", "solana-send-transaction-service", "solana-storage-bigtable", "solana-streamer", @@ -6488,21 +6488,21 @@ dependencies = [ [[package]] name = "solana-version" -version = "1.14.12" +version = "1.14.13" dependencies = [ "log", "rustc_version 0.4.0", "semver 1.0.10", "serde", "serde_derive", - "solana-frozen-abi 1.14.12", - "solana-frozen-abi-macro 1.14.12", - "solana-sdk 1.14.12", + "solana-frozen-abi 1.14.13", + "solana-frozen-abi-macro 1.14.13", + "solana-sdk 1.14.13", ] [[package]] name = "solana-vote-program" -version = "1.14.12" +version = "1.14.13" dependencies = [ "bincode", "itertools", @@ -6513,19 +6513,19 @@ dependencies = [ "rustc_version 0.4.0", "serde", "serde_derive", - "solana-frozen-abi 1.14.12", - "solana-frozen-abi-macro 1.14.12", - "solana-logger 1.14.12", + "solana-frozen-abi 1.14.13", + "solana-frozen-abi-macro 1.14.13", + "solana-logger 1.14.13", "solana-metrics", "solana-program-runtime", - "solana-sdk 1.14.12", + "solana-sdk 1.14.13", "test-case", "thiserror", ] [[package]] name = "solana-watchtower" -version = "1.14.12" +version = "1.14.13" dependencies = [ "clap 2.33.3", "humantime", @@ -6534,24 +6534,24 @@ dependencies = [ "solana-cli-config", "solana-cli-output", "solana-client", - "solana-logger 1.14.12", + "solana-logger 1.14.13", "solana-metrics", "solana-notifier", - "solana-sdk 1.14.12", + "solana-sdk 1.14.13", "solana-version", ] [[package]] name = "solana-zk-token-proof-program" -version = "1.14.12" +version = "1.14.13" dependencies = [ "bytemuck", "getrandom 0.1.16", "num-derive", "num-traits", "solana-program-runtime", - "solana-sdk 1.14.12", - "solana-zk-token-sdk 1.14.12", + "solana-sdk 1.14.13", + "solana-zk-token-sdk 1.14.13", ] [[package]] @@ -6587,7 +6587,7 @@ dependencies = [ [[package]] name = "solana-zk-token-sdk" -version = "1.14.12" +version = "1.14.13" dependencies = [ "aes-gcm-siv", "arrayref", @@ -6607,8 +6607,8 @@ dependencies = [ "serde", "serde_json", "sha3 0.9.1", - "solana-program 1.14.12", - "solana-sdk 1.14.12", + "solana-program 1.14.13", + "solana-sdk 1.14.13", "subtle", "thiserror", "zeroize", diff --git a/account-decoder/Cargo.toml b/account-decoder/Cargo.toml index 7dd7dc063d905d..ebb0d0e7aa26b0 100644 --- a/account-decoder/Cargo.toml +++ b/account-decoder/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-account-decoder" -version = "1.14.12" +version = "1.14.13" description = "Solana account decoder" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -19,10 +19,10 @@ lazy_static = "1.4.0" serde = "1.0.138" serde_derive = "1.0.103" serde_json = "1.0.81" -solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.12" } -solana-config-program = { path = "../programs/config", version = "=1.14.12" } -solana-sdk = { path = "../sdk", version = "=1.14.12" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.12" } +solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.13" } +solana-config-program = { path = "../programs/config", version = "=1.14.13" } +solana-sdk = { path = "../sdk", version = "=1.14.13" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.13" } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } spl-token-2022 = { version = "=0.5.0", features = ["no-entrypoint"] } thiserror = "1.0" diff --git a/accounts-bench/Cargo.toml b/accounts-bench/Cargo.toml index e424080f4e45b8..a6e56ae865ada6 100644 --- a/accounts-bench/Cargo.toml +++ b/accounts-bench/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-accounts-bench" -version = "1.14.12" +version = "1.14.13" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -12,11 +12,11 @@ publish = false clap = "2.33.1" log = "0.4.17" rayon = "1.5.3" -solana-logger = { path = "../logger", version = "=1.14.12" } -solana-measure = { path = "../measure", version = "=1.14.12" } -solana-runtime = { path = "../runtime", version = "=1.14.12" } -solana-sdk = { path = "../sdk", version = "=1.14.12" } -solana-version = { path = "../version", version = "=1.14.12" } +solana-logger = { path = "../logger", version = "=1.14.13" } +solana-measure = { path = "../measure", version = "=1.14.13" } +solana-runtime = { path = "../runtime", version = "=1.14.13" } +solana-sdk = { path = "../sdk", version = "=1.14.13" } +solana-version = { path = "../version", version = "=1.14.13" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/accounts-cluster-bench/Cargo.toml b/accounts-cluster-bench/Cargo.toml index ccbc6724050d79..6bb2856324e4b7 100644 --- a/accounts-cluster-bench/Cargo.toml +++ b/accounts-cluster-bench/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-accounts-cluster-bench" -version = "1.14.12" +version = "1.14.13" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -13,25 +13,25 @@ clap = "2.33.1" log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.12" } -solana-clap-utils = { path = "../clap-utils", version = "=1.14.12" } -solana-client = { path = "../client", version = "=1.14.12" } -solana-faucet = { path = "../faucet", version = "=1.14.12" } -solana-gossip = { path = "../gossip", version = "=1.14.12" } -solana-logger = { path = "../logger", version = "=1.14.12" } -solana-measure = { path = "../measure", version = "=1.14.12" } -solana-net-utils = { path = "../net-utils", version = "=1.14.12" } -solana-runtime = { path = "../runtime", version = "=1.14.12" } -solana-sdk = { path = "../sdk", version = "=1.14.12" } -solana-streamer = { path = "../streamer", version = "=1.14.12" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.12" } -solana-version = { path = "../version", version = "=1.14.12" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.13" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.13" } +solana-client = { path = "../client", version = "=1.14.13" } +solana-faucet = { path = "../faucet", version = "=1.14.13" } +solana-gossip = { path = "../gossip", version = "=1.14.13" } +solana-logger = { path = "../logger", version = "=1.14.13" } +solana-measure = { path = "../measure", version = "=1.14.13" } +solana-net-utils = { path = "../net-utils", version = "=1.14.13" } +solana-runtime = { path = "../runtime", version = "=1.14.13" } +solana-sdk = { path = "../sdk", version = "=1.14.13" } +solana-streamer = { path = "../streamer", version = "=1.14.13" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.13" } +solana-version = { path = "../version", version = "=1.14.13" } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } [dev-dependencies] -solana-core = { path = "../core", version = "=1.14.12" } -solana-local-cluster = { path = "../local-cluster", version = "=1.14.12" } -solana-test-validator = { path = "../test-validator", version = "=1.14.12" } +solana-core = { path = "../core", version = "=1.14.13" } +solana-local-cluster = { path = "../local-cluster", version = "=1.14.13" } +solana-test-validator = { path = "../test-validator", version = "=1.14.13" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/banking-bench/Cargo.toml b/banking-bench/Cargo.toml index aed4ba9465d626..8dfb3317a013fa 100644 --- a/banking-bench/Cargo.toml +++ b/banking-bench/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-banking-bench" -version = "1.14.12" +version = "1.14.13" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,18 +14,18 @@ crossbeam-channel = "0.5" log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" -solana-client = { path = "../client", version = "=1.14.12" } -solana-core = { path = "../core", version = "=1.14.12" } -solana-gossip = { path = "../gossip", version = "=1.14.12" } -solana-ledger = { path = "../ledger", version = "=1.14.12" } -solana-logger = { path = "../logger", version = "=1.14.12" } -solana-measure = { path = "../measure", version = "=1.14.12" } -solana-perf = { path = "../perf", version = "=1.14.12" } -solana-poh = { path = "../poh", version = "=1.14.12" } -solana-runtime = { path = "../runtime", version = "=1.14.12" } -solana-sdk = { path = "../sdk", version = "=1.14.12" } -solana-streamer = { path = "../streamer", version = "=1.14.12" } -solana-version = { path = "../version", version = "=1.14.12" } +solana-client = { path = "../client", version = "=1.14.13" } +solana-core = { path = "../core", version = "=1.14.13" } +solana-gossip = { path = "../gossip", version = "=1.14.13" } +solana-ledger = { path = "../ledger", version = "=1.14.13" } +solana-logger = { path = "../logger", version = "=1.14.13" } +solana-measure = { path = "../measure", version = "=1.14.13" } +solana-perf = { path = "../perf", version = "=1.14.13" } +solana-poh = { path = "../poh", version = "=1.14.13" } +solana-runtime = { path = "../runtime", version = "=1.14.13" } +solana-sdk = { path = "../sdk", version = "=1.14.13" } +solana-streamer = { path = "../streamer", version = "=1.14.13" } +solana-version = { path = "../version", version = "=1.14.13" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/banks-client/Cargo.toml b/banks-client/Cargo.toml index c96b5700889a76..9246095214d67e 100644 --- a/banks-client/Cargo.toml +++ b/banks-client/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-banks-client" -version = "1.14.12" +version = "1.14.13" description = "Solana banks client" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,17 +12,17 @@ edition = "2021" [dependencies] borsh = "0.9.3" futures = "0.3" -solana-banks-interface = { path = "../banks-interface", version = "=1.14.12" } -solana-program = { path = "../sdk/program", version = "=1.14.12" } -solana-sdk = { path = "../sdk", version = "=1.14.12" } +solana-banks-interface = { path = "../banks-interface", version = "=1.14.13" } +solana-program = { path = "../sdk/program", version = "=1.14.13" } +solana-sdk = { path = "../sdk", version = "=1.14.13" } tarpc = { version = "0.29.0", features = ["full"] } thiserror = "1.0" tokio = { version = "~1.14.1", features = ["full"] } tokio-serde = { version = "0.8", features = ["bincode"] } [dev-dependencies] -solana-banks-server = { path = "../banks-server", version = "=1.14.12" } -solana-runtime = { path = "../runtime", version = "=1.14.12" } +solana-banks-server = { path = "../banks-server", version = "=1.14.13" } +solana-runtime = { path = "../runtime", version = "=1.14.13" } [lib] crate-type = ["lib"] diff --git a/banks-interface/Cargo.toml b/banks-interface/Cargo.toml index 4c2d7e5ded190a..261a913b30e82f 100644 --- a/banks-interface/Cargo.toml +++ b/banks-interface/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-banks-interface" -version = "1.14.12" +version = "1.14.13" description = "Solana banks RPC interface" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -11,7 +11,7 @@ edition = "2021" [dependencies] serde = { version = "1.0.138", features = ["derive"] } -solana-sdk = { path = "../sdk", version = "=1.14.12" } +solana-sdk = { path = "../sdk", version = "=1.14.13" } tarpc = { version = "0.29.0", features = ["full"] } [lib] diff --git a/banks-server/Cargo.toml b/banks-server/Cargo.toml index 6ebfcd220f63aa..88834e145cdc9f 100644 --- a/banks-server/Cargo.toml +++ b/banks-server/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-banks-server" -version = "1.14.12" +version = "1.14.13" description = "Solana banks server" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,11 +13,11 @@ edition = "2021" bincode = "1.3.3" crossbeam-channel = "0.5" futures = "0.3" -solana-banks-interface = { path = "../banks-interface", version = "=1.14.12" } -solana-client = { path = "../client", version = "=1.14.12" } -solana-runtime = { path = "../runtime", version = "=1.14.12" } -solana-sdk = { path = "../sdk", version = "=1.14.12" } -solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.12" } +solana-banks-interface = { path = "../banks-interface", version = "=1.14.13" } +solana-client = { path = "../client", version = "=1.14.13" } +solana-runtime = { path = "../runtime", version = "=1.14.13" } +solana-sdk = { path = "../sdk", version = "=1.14.13" } +solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.13" } tarpc = { version = "0.29.0", features = ["full"] } tokio = { version = "1", features = ["full"] } tokio-serde = { version = "0.8", features = ["bincode"] } diff --git a/bench-streamer/Cargo.toml b/bench-streamer/Cargo.toml index 5e0607c74dcfb0..e56052d8bced05 100644 --- a/bench-streamer/Cargo.toml +++ b/bench-streamer/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-bench-streamer" -version = "1.14.12" +version = "1.14.13" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -11,9 +11,9 @@ publish = false [dependencies] clap = { version = "3.1.5", features = ["cargo"] } crossbeam-channel = "0.5" -solana-net-utils = { path = "../net-utils", version = "=1.14.12" } -solana-streamer = { path = "../streamer", version = "=1.14.12" } -solana-version = { path = "../version", version = "=1.14.12" } +solana-net-utils = { path = "../net-utils", version = "=1.14.13" } +solana-streamer = { path = "../streamer", version = "=1.14.13" } +solana-version = { path = "../version", version = "=1.14.13" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/bench-tps/Cargo.toml b/bench-tps/Cargo.toml index 51f8de055cca24..5d1c1b5825b656 100644 --- a/bench-tps/Cargo.toml +++ b/bench-tps/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-bench-tps" -version = "1.14.12" +version = "1.14.13" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -15,28 +15,28 @@ log = "0.4.17" rayon = "1.5.3" serde_json = "1.0.81" serde_yaml = "0.8.26" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.12" } -solana-cli-config = { path = "../cli-config", version = "=1.14.12" } -solana-client = { path = "../client", version = "=1.14.12" } -solana-core = { path = "../core", version = "=1.14.12" } -solana-faucet = { path = "../faucet", version = "=1.14.12" } -solana-genesis = { path = "../genesis", version = "=1.14.12" } -solana-gossip = { path = "../gossip", version = "=1.14.12" } -solana-logger = { path = "../logger", version = "=1.14.12" } -solana-measure = { path = "../measure", version = "=1.14.12" } -solana-metrics = { path = "../metrics", version = "=1.14.12" } -solana-net-utils = { path = "../net-utils", version = "=1.14.12" } -solana-rpc = { path = "../rpc", version = "=1.14.12" } -solana-runtime = { path = "../runtime", version = "=1.14.12" } -solana-sdk = { path = "../sdk", version = "=1.14.12" } -solana-streamer = { path = "../streamer", version = "=1.14.12" } -solana-version = { path = "../version", version = "=1.14.12" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.13" } +solana-cli-config = { path = "../cli-config", version = "=1.14.13" } +solana-client = { path = "../client", version = "=1.14.13" } +solana-core = { path = "../core", version = "=1.14.13" } +solana-faucet = { path = "../faucet", version = "=1.14.13" } +solana-genesis = { path = "../genesis", version = "=1.14.13" } +solana-gossip = { path = "../gossip", version = "=1.14.13" } +solana-logger = { path = "../logger", version = "=1.14.13" } +solana-measure = { path = "../measure", version = "=1.14.13" } +solana-metrics = { path = "../metrics", version = "=1.14.13" } +solana-net-utils = { path = "../net-utils", version = "=1.14.13" } +solana-rpc = { path = "../rpc", version = "=1.14.13" } +solana-runtime = { path = "../runtime", version = "=1.14.13" } +solana-sdk = { path = "../sdk", version = "=1.14.13" } +solana-streamer = { path = "../streamer", version = "=1.14.13" } +solana-version = { path = "../version", version = "=1.14.13" } thiserror = "1.0" [dev-dependencies] serial_test = "0.8.0" -solana-local-cluster = { path = "../local-cluster", version = "=1.14.12" } -solana-test-validator = { path = "../test-validator", version = "=1.14.12" } +solana-local-cluster = { path = "../local-cluster", version = "=1.14.13" } +solana-test-validator = { path = "../test-validator", version = "=1.14.13" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/bloom/Cargo.toml b/bloom/Cargo.toml index 7d591eb9a67a6c..039df6618f6539 100644 --- a/bloom/Cargo.toml +++ b/bloom/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bloom" -version = "1.14.12" +version = "1.14.13" description = "Solana bloom filter" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -17,9 +17,9 @@ rand = "0.7.0" rayon = "1.5.3" serde = { version = "1.0.138", features = ["rc"] } serde_derive = "1.0.103" -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.12" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.12" } -solana-sdk = { path = "../sdk", version = "=1.14.12" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.13" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.13" } +solana-sdk = { path = "../sdk", version = "=1.14.13" } [lib] crate-type = ["lib"] diff --git a/bucket_map/Cargo.toml b/bucket_map/Cargo.toml index 71787980b770ef..7bc51b483b6464 100644 --- a/bucket_map/Cargo.toml +++ b/bucket_map/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bucket-map" -version = "1.14.12" +version = "1.14.13" description = "solana-bucket-map" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-bucket-map" @@ -15,14 +15,14 @@ log = { version = "0.4.17" } memmap2 = "0.5.3" modular-bitfield = "0.11.2" rand = "0.7.0" -solana-measure = { path = "../measure", version = "=1.14.12" } -solana-sdk = { path = "../sdk", version = "=1.14.12" } +solana-measure = { path = "../measure", version = "=1.14.13" } +solana-sdk = { path = "../sdk", version = "=1.14.13" } tempfile = "3.3.0" [dev-dependencies] fs_extra = "1.2.0" rayon = "1.5.3" -solana-logger = { path = "../logger", version = "=1.14.12" } +solana-logger = { path = "../logger", version = "=1.14.13" } [lib] crate-type = ["lib"] diff --git a/clap-utils/Cargo.toml b/clap-utils/Cargo.toml index 90656c7b2875ac..35dfccc6fa2b85 100644 --- a/clap-utils/Cargo.toml +++ b/clap-utils/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-clap-utils" -version = "1.14.12" +version = "1.14.13" description = "Solana utilities for the clap" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,9 +13,9 @@ edition = "2021" chrono = "0.4" clap = "2.33.0" rpassword = "6.0" -solana-perf = { path = "../perf", version = "=1.14.12" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.12", default-features = false } -solana-sdk = { path = "../sdk", version = "=1.14.12" } +solana-perf = { path = "../perf", version = "=1.14.13" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.13", default-features = false } +solana-sdk = { path = "../sdk", version = "=1.14.13" } thiserror = "1.0.31" tiny-bip39 = "0.8.2" uriparse = "0.6.4" diff --git a/clap-v3-utils/Cargo.toml b/clap-v3-utils/Cargo.toml index 79bffbfaa89570..843429e48976fb 100644 --- a/clap-v3-utils/Cargo.toml +++ b/clap-v3-utils/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-clap-v3-utils" -version = "1.14.12" +version = "1.14.13" description = "Solana utilities for the clap v3" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,9 +13,9 @@ edition = "2021" chrono = "0.4" clap = { version = "3.1.5", features = ["cargo"] } rpassword = "6.0" -solana-perf = { path = "../perf", version = "=1.14.12" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.12", default-features = false } -solana-sdk = { path = "../sdk", version = "=1.14.12" } +solana-perf = { path = "../perf", version = "=1.14.13" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.13", default-features = false } +solana-sdk = { path = "../sdk", version = "=1.14.13" } thiserror = "1.0.31" tiny-bip39 = "0.8.2" uriparse = "0.6.4" diff --git a/cli-config/Cargo.toml b/cli-config/Cargo.toml index b91424f8a3c6d1..a60ed0f893b5ff 100644 --- a/cli-config/Cargo.toml +++ b/cli-config/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-cli-config" description = "Blockchain, Rebuilt for Scale" -version = "1.14.12" +version = "1.14.13" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -15,8 +15,8 @@ lazy_static = "1.4.0" serde = "1.0.138" serde_derive = "1.0.103" serde_yaml = "0.8.26" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.12" } -solana-sdk = { path = "../sdk", version = "=1.14.12" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.13" } +solana-sdk = { path = "../sdk", version = "=1.14.13" } url = "2.2.2" [dev-dependencies] diff --git a/cli-output/Cargo.toml b/cli-output/Cargo.toml index 85aaf39aad4a4f..e70caf43615477 100644 --- a/cli-output/Cargo.toml +++ b/cli-output/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-cli-output" description = "Blockchain, Rebuilt for Scale" -version = "1.14.12" +version = "1.14.13" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -21,13 +21,13 @@ pretty-hex = "0.3.0" semver = "1.0.10" serde = "1.0.138" serde_json = "1.0.81" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.12" } -solana-clap-utils = { path = "../clap-utils", version = "=1.14.12" } -solana-cli-config = { path = "../cli-config", version = "=1.14.12" } -solana-client = { path = "../client", version = "=1.14.12" } -solana-sdk = { path = "../sdk", version = "=1.14.12" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.12" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.12" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.13" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.13" } +solana-cli-config = { path = "../cli-config", version = "=1.14.13" } +solana-client = { path = "../client", version = "=1.14.13" } +solana-sdk = { path = "../sdk", version = "=1.14.13" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.13" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.13" } spl-memo = { version = "=3.0.1", features = ["no-entrypoint"] } [dev-dependencies] diff --git a/cli/Cargo.toml b/cli/Cargo.toml index 93790e96866b66..bfd39d7c4be083 100644 --- a/cli/Cargo.toml +++ b/cli/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-cli" description = "Blockchain, Rebuilt for Scale" -version = "1.14.12" +version = "1.14.13" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -27,30 +27,30 @@ semver = "1.0.10" serde = "1.0.138" serde_derive = "1.0.103" serde_json = "1.0.81" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.12" } -solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.12" } -solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.12" } -solana-clap-utils = { path = "../clap-utils", version = "=1.14.12" } -solana-cli-config = { path = "../cli-config", version = "=1.14.12" } -solana-cli-output = { path = "../cli-output", version = "=1.14.12" } -solana-client = { path = "../client", version = "=1.14.12" } -solana-config-program = { path = "../programs/config", version = "=1.14.12" } -solana-faucet = { path = "../faucet", version = "=1.14.12" } -solana-logger = { path = "../logger", version = "=1.14.12" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.12" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.12" } -solana-sdk = { path = "../sdk", version = "=1.14.12" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.12" } -solana-version = { path = "../version", version = "=1.14.12" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.12" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.13" } +solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.13" } +solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.13" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.13" } +solana-cli-config = { path = "../cli-config", version = "=1.14.13" } +solana-cli-output = { path = "../cli-output", version = "=1.14.13" } +solana-client = { path = "../client", version = "=1.14.13" } +solana-config-program = { path = "../programs/config", version = "=1.14.13" } +solana-faucet = { path = "../faucet", version = "=1.14.13" } +solana-logger = { path = "../logger", version = "=1.14.13" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.13" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.13" } +solana-sdk = { path = "../sdk", version = "=1.14.13" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.13" } +solana-version = { path = "../version", version = "=1.14.13" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.13" } solana_rbpf = "=0.2.31" spl-memo = { version = "=3.0.1", features = ["no-entrypoint"] } thiserror = "1.0.31" tiny-bip39 = "0.8.2" [dev-dependencies] -solana-streamer = { path = "../streamer", version = "=1.14.12" } -solana-test-validator = { path = "../test-validator", version = "=1.14.12" } +solana-streamer = { path = "../streamer", version = "=1.14.13" } +solana-test-validator = { path = "../test-validator", version = "=1.14.13" } tempfile = "3.3.0" [[bin]] diff --git a/client-test/Cargo.toml b/client-test/Cargo.toml index 08cb7c3cce607a..590e38cedacb21 100644 --- a/client-test/Cargo.toml +++ b/client-test/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-client-test" -version = "1.14.12" +version = "1.14.13" description = "Solana RPC Test" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,25 +14,25 @@ publish = false futures-util = "0.3.21" serde_json = "1.0.81" serial_test = "0.8.0" -solana-client = { path = "../client", version = "=1.14.12" } -solana-ledger = { path = "../ledger", version = "=1.14.12" } -solana-measure = { path = "../measure", version = "=1.14.12" } -solana-merkle-tree = { path = "../merkle-tree", version = "=1.14.12" } -solana-metrics = { path = "../metrics", version = "=1.14.12" } -solana-perf = { path = "../perf", version = "=1.14.12" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.12" } -solana-rpc = { path = "../rpc", version = "=1.14.12" } -solana-runtime = { path = "../runtime", version = "=1.14.12" } -solana-sdk = { path = "../sdk", version = "=1.14.12" } -solana-streamer = { path = "../streamer", version = "=1.14.12" } -solana-test-validator = { path = "../test-validator", version = "=1.14.12" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.12" } -solana-version = { path = "../version", version = "=1.14.12" } +solana-client = { path = "../client", version = "=1.14.13" } +solana-ledger = { path = "../ledger", version = "=1.14.13" } +solana-measure = { path = "../measure", version = "=1.14.13" } +solana-merkle-tree = { path = "../merkle-tree", version = "=1.14.13" } +solana-metrics = { path = "../metrics", version = "=1.14.13" } +solana-perf = { path = "../perf", version = "=1.14.13" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.13" } +solana-rpc = { path = "../rpc", version = "=1.14.13" } +solana-runtime = { path = "../runtime", version = "=1.14.13" } +solana-sdk = { path = "../sdk", version = "=1.14.13" } +solana-streamer = { path = "../streamer", version = "=1.14.13" } +solana-test-validator = { path = "../test-validator", version = "=1.14.13" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.13" } +solana-version = { path = "../version", version = "=1.14.13" } systemstat = "0.1.11" tokio = { version = "~1.14.1", features = ["full"] } [dev-dependencies] -solana-logger = { path = "../logger", version = "=1.14.12" } +solana-logger = { path = "../logger", version = "=1.14.13" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/client/Cargo.toml b/client/Cargo.toml index 7640d25468a930..54e776b79d9b11 100644 --- a/client/Cargo.toml +++ b/client/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-client" -version = "1.14.12" +version = "1.14.13" description = "Solana Client" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -38,17 +38,17 @@ semver = "1.0.10" serde = "1.0.138" serde_derive = "1.0.103" serde_json = "1.0.81" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.12" } -solana-clap-utils = { path = "../clap-utils", version = "=1.14.12" } -solana-faucet = { path = "../faucet", version = "=1.14.12" } -solana-measure = { path = "../measure", version = "=1.14.12" } -solana-metrics = { path = "../metrics", version = "=1.14.12" } -solana-net-utils = { path = "../net-utils", version = "=1.14.12" } -solana-sdk = { path = "../sdk", version = "=1.14.12" } -solana-streamer = { path = "../streamer", version = "=1.14.12" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.12" } -solana-version = { path = "../version", version = "=1.14.12" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.12" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.13" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.13" } +solana-faucet = { path = "../faucet", version = "=1.14.13" } +solana-measure = { path = "../measure", version = "=1.14.13" } +solana-metrics = { path = "../metrics", version = "=1.14.13" } +solana-net-utils = { path = "../net-utils", version = "=1.14.13" } +solana-sdk = { path = "../sdk", version = "=1.14.13" } +solana-streamer = { path = "../streamer", version = "=1.14.13" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.13" } +solana-version = { path = "../version", version = "=1.14.13" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.13" } spl-token-2022 = { version = "=0.5.0", features = ["no-entrypoint"] } thiserror = "1.0" tokio = { version = "1", features = ["full"] } @@ -61,8 +61,8 @@ url = "2.2.2" anyhow = "1.0.58" assert_matches = "1.5.0" jsonrpc-http-server = "18.0.0" -solana-logger = { path = "../logger", version = "=1.14.12" } -solana-perf = { path = "../perf", version = "=1.14.12" } +solana-logger = { path = "../logger", version = "=1.14.13" } +solana-perf = { path = "../perf", version = "=1.14.13" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/core/Cargo.toml b/core/Cargo.toml index 5ecc720199f3ed..66e8270c8dde1e 100644 --- a/core/Cargo.toml +++ b/core/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "solana-core" description = "Blockchain, Rebuilt for Scale" -version = "1.14.12" +version = "1.14.13" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-core" readme = "../README.md" @@ -36,30 +36,30 @@ rand_chacha = "0.2.2" rayon = "1.5.3" serde = "1.0.138" serde_derive = "1.0.103" -solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.12" } -solana-bloom = { path = "../bloom", version = "=1.14.12" } -solana-client = { path = "../client", version = "=1.14.12" } -solana-entry = { path = "../entry", version = "=1.14.12" } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.12" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.12" } -solana-geyser-plugin-manager = { path = "../geyser-plugin-manager", version = "=1.14.12" } -solana-gossip = { path = "../gossip", version = "=1.14.12" } -solana-ledger = { path = "../ledger", version = "=1.14.12" } -solana-measure = { path = "../measure", version = "=1.14.12" } -solana-metrics = { path = "../metrics", version = "=1.14.12" } -solana-net-utils = { path = "../net-utils", version = "=1.14.12" } -solana-perf = { path = "../perf", version = "=1.14.12" } -solana-poh = { path = "../poh", version = "=1.14.12" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.12" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.12" } -solana-rpc = { path = "../rpc", version = "=1.14.12" } -solana-runtime = { path = "../runtime", version = "=1.14.12" } -solana-sdk = { path = "../sdk", version = "=1.14.12" } -solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.12" } -solana-streamer = { path = "../streamer", version = "=1.14.12" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.12" } -solana-version = { path = "../version", version = "=1.14.12" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.12" } +solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.13" } +solana-bloom = { path = "../bloom", version = "=1.14.13" } +solana-client = { path = "../client", version = "=1.14.13" } +solana-entry = { path = "../entry", version = "=1.14.13" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.13" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.13" } +solana-geyser-plugin-manager = { path = "../geyser-plugin-manager", version = "=1.14.13" } +solana-gossip = { path = "../gossip", version = "=1.14.13" } +solana-ledger = { path = "../ledger", version = "=1.14.13" } +solana-measure = { path = "../measure", version = "=1.14.13" } +solana-metrics = { path = "../metrics", version = "=1.14.13" } +solana-net-utils = { path = "../net-utils", version = "=1.14.13" } +solana-perf = { path = "../perf", version = "=1.14.13" } +solana-poh = { path = "../poh", version = "=1.14.13" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.13" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.13" } +solana-rpc = { path = "../rpc", version = "=1.14.13" } +solana-runtime = { path = "../runtime", version = "=1.14.13" } +solana-sdk = { path = "../sdk", version = "=1.14.13" } +solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.13" } +solana-streamer = { path = "../streamer", version = "=1.14.13" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.13" } +solana-version = { path = "../version", version = "=1.14.13" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.13" } sys-info = "0.9.1" tempfile = "3.3.0" thiserror = "1.0" @@ -71,9 +71,9 @@ matches = "0.1.9" raptorq = "1.7.0" serde_json = "1.0.81" serial_test = "0.8.0" -solana-logger = { path = "../logger", version = "=1.14.12" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.12" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.12" } +solana-logger = { path = "../logger", version = "=1.14.13" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.13" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.13" } static_assertions = "1.1.0" systemstat = "0.1.11" test-case = "2.1.0" diff --git a/dos/Cargo.toml b/dos/Cargo.toml index 2ab3f22f9dbe44..e2a25c022ae729 100644 --- a/dos/Cargo.toml +++ b/dos/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-dos" -version = "1.14.12" +version = "1.14.13" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -17,23 +17,23 @@ itertools = "0.10.3" log = "0.4.17" rand = "0.7.0" serde = "1.0.138" -solana-bench-tps = { path = "../bench-tps", version = "=1.14.12" } -solana-client = { path = "../client", version = "=1.14.12" } -solana-core = { path = "../core", version = "=1.14.12" } -solana-faucet = { path = "../faucet", version = "=1.14.12" } -solana-gossip = { path = "../gossip", version = "=1.14.12" } -solana-logger = { path = "../logger", version = "=1.14.12" } -solana-measure = { path = "../measure", version = "=1.14.12" } -solana-net-utils = { path = "../net-utils", version = "=1.14.12" } -solana-perf = { path = "../perf", version = "=1.14.12" } -solana-rpc = { path = "../rpc", version = "=1.14.12" } -solana-sdk = { path = "../sdk", version = "=1.14.12" } -solana-streamer = { path = "../streamer", version = "=1.14.12" } -solana-version = { path = "../version", version = "=1.14.12" } +solana-bench-tps = { path = "../bench-tps", version = "=1.14.13" } +solana-client = { path = "../client", version = "=1.14.13" } +solana-core = { path = "../core", version = "=1.14.13" } +solana-faucet = { path = "../faucet", version = "=1.14.13" } +solana-gossip = { path = "../gossip", version = "=1.14.13" } +solana-logger = { path = "../logger", version = "=1.14.13" } +solana-measure = { path = "../measure", version = "=1.14.13" } +solana-net-utils = { path = "../net-utils", version = "=1.14.13" } +solana-perf = { path = "../perf", version = "=1.14.13" } +solana-rpc = { path = "../rpc", version = "=1.14.13" } +solana-sdk = { path = "../sdk", version = "=1.14.13" } +solana-streamer = { path = "../streamer", version = "=1.14.13" } +solana-version = { path = "../version", version = "=1.14.13" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] [dev-dependencies] serial_test = "0.8.0" -solana-local-cluster = { path = "../local-cluster", version = "=1.14.12" } +solana-local-cluster = { path = "../local-cluster", version = "=1.14.13" } diff --git a/download-utils/Cargo.toml b/download-utils/Cargo.toml index f193cda40ccd53..ade2c234e0c8b5 100644 --- a/download-utils/Cargo.toml +++ b/download-utils/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-download-utils" -version = "1.14.12" +version = "1.14.13" description = "Solana Download Utils" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,8 +14,8 @@ console = "0.15.0" indicatif = "0.16.2" log = "0.4.17" reqwest = { version = "0.11.11", default-features = false, features = ["blocking", "brotli", "deflate", "gzip", "rustls-tls", "json"] } -solana-runtime = { path = "../runtime", version = "=1.14.12" } -solana-sdk = { path = "../sdk", version = "=1.14.12" } +solana-runtime = { path = "../runtime", version = "=1.14.13" } +solana-sdk = { path = "../sdk", version = "=1.14.13" } [lib] crate-type = ["lib"] diff --git a/entry/Cargo.toml b/entry/Cargo.toml index 9ad3dc6da78aaa..2f93251d2408a7 100644 --- a/entry/Cargo.toml +++ b/entry/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-entry" -version = "1.14.12" +version = "1.14.13" description = "Solana Entry" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -19,16 +19,16 @@ log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" serde = "1.0.138" -solana-measure = { path = "../measure", version = "=1.14.12" } -solana-merkle-tree = { path = "../merkle-tree", version = "=1.14.12" } -solana-metrics = { path = "../metrics", version = "=1.14.12" } -solana-perf = { path = "../perf", version = "=1.14.12" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.12" } -solana-sdk = { path = "../sdk", version = "=1.14.12" } +solana-measure = { path = "../measure", version = "=1.14.13" } +solana-merkle-tree = { path = "../merkle-tree", version = "=1.14.13" } +solana-metrics = { path = "../metrics", version = "=1.14.13" } +solana-perf = { path = "../perf", version = "=1.14.13" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.13" } +solana-sdk = { path = "../sdk", version = "=1.14.13" } [dev-dependencies] matches = "0.1.9" -solana-logger = { path = "../logger", version = "=1.14.12" } +solana-logger = { path = "../logger", version = "=1.14.13" } [lib] crate-type = ["lib"] diff --git a/faucet/Cargo.toml b/faucet/Cargo.toml index 900f5c02b62698..a3c8ee6937e5ed 100644 --- a/faucet/Cargo.toml +++ b/faucet/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-faucet" -version = "1.14.12" +version = "1.14.13" description = "Solana Faucet" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -17,12 +17,12 @@ crossbeam-channel = "0.5" log = "0.4.17" serde = "1.0.138" serde_derive = "1.0.103" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.12" } -solana-cli-config = { path = "../cli-config", version = "=1.14.12" } -solana-logger = { path = "../logger", version = "=1.14.12" } -solana-metrics = { path = "../metrics", version = "=1.14.12" } -solana-sdk = { path = "../sdk", version = "=1.14.12" } -solana-version = { path = "../version", version = "=1.14.12" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.13" } +solana-cli-config = { path = "../cli-config", version = "=1.14.13" } +solana-logger = { path = "../logger", version = "=1.14.13" } +solana-metrics = { path = "../metrics", version = "=1.14.13" } +solana-sdk = { path = "../sdk", version = "=1.14.13" } +solana-version = { path = "../version", version = "=1.14.13" } spl-memo = { version = "=3.0.1", features = ["no-entrypoint"] } thiserror = "1.0" tokio = { version = "1", features = ["full"] } diff --git a/frozen-abi/Cargo.toml b/frozen-abi/Cargo.toml index fcc7d89ae54a06..538ec7b7340350 100644 --- a/frozen-abi/Cargo.toml +++ b/frozen-abi/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-frozen-abi" -version = "1.14.12" +version = "1.14.13" description = "Solana Frozen ABI" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -20,7 +20,7 @@ serde_bytes = "0.11" serde_derive = "1.0" serde_json = "1.0" sha2 = "0.10.2" -solana-frozen-abi-macro = { path = "macro", version = "=1.14.12" } +solana-frozen-abi-macro = { path = "macro", version = "=1.14.13" } thiserror = "1.0" [target.'cfg(not(target_os = "solana"))'.dependencies] @@ -43,7 +43,7 @@ rand_core = { version = "0.6.3", features = ["alloc", "getrandom", "std"] } subtle = { version = "2.4.1", features = ["default", "i128", "std"] } [target.'cfg(not(target_os = "solana"))'.dev-dependencies] -solana-logger = { path = "../logger", version = "=1.14.12" } +solana-logger = { path = "../logger", version = "=1.14.13" } [build-dependencies] rustc_version = "0.4" diff --git a/frozen-abi/macro/Cargo.toml b/frozen-abi/macro/Cargo.toml index 704c63d45c810b..88c048dcf81ba0 100644 --- a/frozen-abi/macro/Cargo.toml +++ b/frozen-abi/macro/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-frozen-abi-macro" -version = "1.14.12" +version = "1.14.13" description = "Solana Frozen ABI Macro" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/genesis-utils/Cargo.toml b/genesis-utils/Cargo.toml index 95c4ffdb1e55a8..40f194ada72c04 100644 --- a/genesis-utils/Cargo.toml +++ b/genesis-utils/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-genesis-utils" -version = "1.14.12" +version = "1.14.13" description = "Solana Genesis Utils" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,9 +10,9 @@ documentation = "https://docs.rs/solana-download-utils" edition = "2021" [dependencies] -solana-download-utils = { path = "../download-utils", version = "=1.14.12" } -solana-runtime = { path = "../runtime", version = "=1.14.12" } -solana-sdk = { path = "../sdk", version = "=1.14.12" } +solana-download-utils = { path = "../download-utils", version = "=1.14.13" } +solana-runtime = { path = "../runtime", version = "=1.14.13" } +solana-sdk = { path = "../sdk", version = "=1.14.13" } [lib] crate-type = ["lib"] diff --git a/genesis/Cargo.toml b/genesis/Cargo.toml index 0500bda7502cff..93fb158bfbdd0e 100644 --- a/genesis/Cargo.toml +++ b/genesis/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-genesis" description = "Blockchain, Rebuilt for Scale" -version = "1.14.12" +version = "1.14.13" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -15,16 +15,16 @@ clap = "2.33.1" serde = "1.0.138" serde_json = "1.0.81" serde_yaml = "0.8.26" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.12" } -solana-cli-config = { path = "../cli-config", version = "=1.14.12" } -solana-entry = { path = "../entry", version = "=1.14.12" } -solana-ledger = { path = "../ledger", version = "=1.14.12" } -solana-logger = { path = "../logger", version = "=1.14.12" } -solana-runtime = { path = "../runtime", version = "=1.14.12" } -solana-sdk = { path = "../sdk", version = "=1.14.12" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.12" } -solana-version = { path = "../version", version = "=1.14.12" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.12" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.13" } +solana-cli-config = { path = "../cli-config", version = "=1.14.13" } +solana-entry = { path = "../entry", version = "=1.14.13" } +solana-ledger = { path = "../ledger", version = "=1.14.13" } +solana-logger = { path = "../logger", version = "=1.14.13" } +solana-runtime = { path = "../runtime", version = "=1.14.13" } +solana-sdk = { path = "../sdk", version = "=1.14.13" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.13" } +solana-version = { path = "../version", version = "=1.14.13" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.13" } tempfile = "3.3.0" [[bin]] diff --git a/geyser-plugin-interface/Cargo.toml b/geyser-plugin-interface/Cargo.toml index 31cf050438cb10..b7f2231f9a645b 100644 --- a/geyser-plugin-interface/Cargo.toml +++ b/geyser-plugin-interface/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-geyser-plugin-interface" description = "The Solana Geyser plugin interface." -version = "1.14.12" +version = "1.14.13" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -11,8 +11,8 @@ documentation = "https://docs.rs/solana-geyser-plugin-interface" [dependencies] log = "0.4.17" -solana-sdk = { path = "../sdk", version = "=1.14.12" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.12" } +solana-sdk = { path = "../sdk", version = "=1.14.13" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.13" } thiserror = "1.0.31" [package.metadata.docs.rs] diff --git a/geyser-plugin-manager/Cargo.toml b/geyser-plugin-manager/Cargo.toml index 680c2787e0dd5f..d451ed9b10791e 100644 --- a/geyser-plugin-manager/Cargo.toml +++ b/geyser-plugin-manager/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-geyser-plugin-manager" description = "The Solana Geyser plugin manager." -version = "1.14.12" +version = "1.14.13" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -16,13 +16,13 @@ json5 = "0.4.1" libloading = "0.7.3" log = "0.4.17" serde_json = "1.0.81" -solana-geyser-plugin-interface = { path = "../geyser-plugin-interface", version = "=1.14.12" } -solana-measure = { path = "../measure", version = "=1.14.12" } -solana-metrics = { path = "../metrics", version = "=1.14.12" } -solana-rpc = { path = "../rpc", version = "=1.14.12" } -solana-runtime = { path = "../runtime", version = "=1.14.12" } -solana-sdk = { path = "../sdk", version = "=1.14.12" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.12" } +solana-geyser-plugin-interface = { path = "../geyser-plugin-interface", version = "=1.14.13" } +solana-measure = { path = "../measure", version = "=1.14.13" } +solana-metrics = { path = "../metrics", version = "=1.14.13" } +solana-rpc = { path = "../rpc", version = "=1.14.13" } +solana-runtime = { path = "../runtime", version = "=1.14.13" } +solana-sdk = { path = "../sdk", version = "=1.14.13" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.13" } thiserror = "1.0.31" [package.metadata.docs.rs] diff --git a/gossip/Cargo.toml b/gossip/Cargo.toml index 71d57309a4adac..dc637e8105f1fa 100644 --- a/gossip/Cargo.toml +++ b/gossip/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-gossip" description = "Blockchain, Rebuilt for Scale" -version = "1.14.12" +version = "1.14.13" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -27,24 +27,24 @@ rayon = "1.5.3" serde = "1.0.138" serde_bytes = "0.11" serde_derive = "1.0.103" -solana-bloom = { path = "../bloom", version = "=1.14.12" } -solana-clap-utils = { path = "../clap-utils", version = "=1.14.12" } -solana-client = { path = "../client", version = "=1.14.12" } -solana-entry = { path = "../entry", version = "=1.14.12" } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.12" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.12" } -solana-ledger = { path = "../ledger", version = "=1.14.12" } -solana-logger = { path = "../logger", version = "=1.14.12" } -solana-measure = { path = "../measure", version = "=1.14.12" } -solana-metrics = { path = "../metrics", version = "=1.14.12" } -solana-net-utils = { path = "../net-utils", version = "=1.14.12" } -solana-perf = { path = "../perf", version = "=1.14.12" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.12" } -solana-runtime = { path = "../runtime", version = "=1.14.12" } -solana-sdk = { path = "../sdk", version = "=1.14.12" } -solana-streamer = { path = "../streamer", version = "=1.14.12" } -solana-version = { path = "../version", version = "=1.14.12" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.12" } +solana-bloom = { path = "../bloom", version = "=1.14.13" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.13" } +solana-client = { path = "../client", version = "=1.14.13" } +solana-entry = { path = "../entry", version = "=1.14.13" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.13" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.13" } +solana-ledger = { path = "../ledger", version = "=1.14.13" } +solana-logger = { path = "../logger", version = "=1.14.13" } +solana-measure = { path = "../measure", version = "=1.14.13" } +solana-metrics = { path = "../metrics", version = "=1.14.13" } +solana-net-utils = { path = "../net-utils", version = "=1.14.13" } +solana-perf = { path = "../perf", version = "=1.14.13" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.13" } +solana-runtime = { path = "../runtime", version = "=1.14.13" } +solana-sdk = { path = "../sdk", version = "=1.14.13" } +solana-streamer = { path = "../streamer", version = "=1.14.13" } +solana-version = { path = "../version", version = "=1.14.13" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.13" } thiserror = "1.0" [dev-dependencies] diff --git a/install/Cargo.toml b/install/Cargo.toml index e96b64eda8c004..08b0d346fe20bf 100644 --- a/install/Cargo.toml +++ b/install/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-install" description = "The solana cluster software installer" -version = "1.14.12" +version = "1.14.13" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -26,12 +26,12 @@ reqwest = { version = "0.11.11", default-features = false, features = ["blocking semver = "1.0.10" serde = { version = "1.0.138", features = ["derive"] } serde_yaml = "0.8.26" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.12" } -solana-client = { path = "../client", version = "=1.14.12" } -solana-config-program = { path = "../programs/config", version = "=1.14.12" } -solana-logger = { path = "../logger", version = "=1.14.12" } -solana-sdk = { path = "../sdk", version = "=1.14.12" } -solana-version = { path = "../version", version = "=1.14.12" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.13" } +solana-client = { path = "../client", version = "=1.14.13" } +solana-config-program = { path = "../programs/config", version = "=1.14.13" } +solana-logger = { path = "../logger", version = "=1.14.13" } +solana-sdk = { path = "../sdk", version = "=1.14.13" } +solana-version = { path = "../version", version = "=1.14.13" } tar = "0.4.38" tempfile = "3.3.0" url = "2.2.2" diff --git a/keygen/Cargo.toml b/keygen/Cargo.toml index 740911a2c2b010..e3171832a4717c 100644 --- a/keygen/Cargo.toml +++ b/keygen/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-keygen" -version = "1.14.12" +version = "1.14.13" description = "Solana key generation utility" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,11 +14,11 @@ bs58 = "0.4.0" clap = { version = "3.1.5", features = ["cargo"] } dirs-next = "2.0.0" num_cpus = "1.13.1" -solana-clap-v3-utils = { path = "../clap-v3-utils", version = "=1.14.12" } -solana-cli-config = { path = "../cli-config", version = "=1.14.12" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.12" } -solana-sdk = { path = "../sdk", version = "=1.14.12" } -solana-version = { path = "../version", version = "=1.14.12" } +solana-clap-v3-utils = { path = "../clap-v3-utils", version = "=1.14.13" } +solana-cli-config = { path = "../cli-config", version = "=1.14.13" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.13" } +solana-sdk = { path = "../sdk", version = "=1.14.13" } +solana-version = { path = "../version", version = "=1.14.13" } tiny-bip39 = "0.8.2" [[bin]] diff --git a/ledger-tool/Cargo.toml b/ledger-tool/Cargo.toml index dd8aa2bcbee581..fe541ff3c9d657 100644 --- a/ledger-tool/Cargo.toml +++ b/ledger-tool/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-ledger-tool" description = "Blockchain, Rebuilt for Scale" -version = "1.14.12" +version = "1.14.13" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -22,20 +22,20 @@ log = { version = "0.4.17" } regex = "1" serde = { version = "1.0", features = ["derive"] } serde_json = "1.0.81" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.12" } -solana-cli-output = { path = "../cli-output", version = "=1.14.12" } -solana-core = { path = "../core", version = "=1.14.12" } -solana-entry = { path = "../entry", version = "=1.14.12" } -solana-ledger = { path = "../ledger", version = "=1.14.12" } -solana-logger = { path = "../logger", version = "=1.14.12" } -solana-measure = { path = "../measure", version = "=1.14.12" } -solana-runtime = { path = "../runtime", version = "=1.14.12" } -solana-sdk = { path = "../sdk", version = "=1.14.12" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.12" } -solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.12" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.12" } -solana-version = { path = "../version", version = "=1.14.12" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.12" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.13" } +solana-cli-output = { path = "../cli-output", version = "=1.14.13" } +solana-core = { path = "../core", version = "=1.14.13" } +solana-entry = { path = "../entry", version = "=1.14.13" } +solana-ledger = { path = "../ledger", version = "=1.14.13" } +solana-logger = { path = "../logger", version = "=1.14.13" } +solana-measure = { path = "../measure", version = "=1.14.13" } +solana-runtime = { path = "../runtime", version = "=1.14.13" } +solana-sdk = { path = "../sdk", version = "=1.14.13" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.13" } +solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.13" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.13" } +solana-version = { path = "../version", version = "=1.14.13" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.13" } tokio = { version = "1", features = ["full"] } [target.'cfg(not(target_env = "msvc"))'.dependencies] diff --git a/ledger/Cargo.toml b/ledger/Cargo.toml index 7b6c1e26eb81f9..272cf796c28470 100644 --- a/ledger/Cargo.toml +++ b/ledger/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-ledger" -version = "1.14.12" +version = "1.14.13" description = "Solana ledger" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -35,23 +35,23 @@ reed-solomon-erasure = { version = "6.0.0", features = ["simd-accel"] } serde = "1.0.138" serde_bytes = "0.11.6" sha2 = "0.10.2" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.12" } -solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.12" } -solana-entry = { path = "../entry", version = "=1.14.12" } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.12" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.12" } -solana-measure = { path = "../measure", version = "=1.14.12" } -solana-metrics = { path = "../metrics", version = "=1.14.12" } -solana-perf = { path = "../perf", version = "=1.14.12" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.12" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.12" } -solana-runtime = { path = "../runtime", version = "=1.14.12" } -solana-sdk = { path = "../sdk", version = "=1.14.12" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.12" } -solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.12" } -solana-storage-proto = { path = "../storage-proto", version = "=1.14.12" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.12" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.12" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.13" } +solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.13" } +solana-entry = { path = "../entry", version = "=1.14.13" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.13" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.13" } +solana-measure = { path = "../measure", version = "=1.14.13" } +solana-metrics = { path = "../metrics", version = "=1.14.13" } +solana-perf = { path = "../perf", version = "=1.14.13" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.13" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.13" } +solana-runtime = { path = "../runtime", version = "=1.14.13" } +solana-sdk = { path = "../sdk", version = "=1.14.13" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.13" } +solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.13" } +solana-storage-proto = { path = "../storage-proto", version = "=1.14.13" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.13" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.13" } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } spl-token-2022 = { version = "=0.5.0", features = ["no-entrypoint"] } static_assertions = "1.1.0" @@ -71,8 +71,8 @@ features = ["lz4"] [dev-dependencies] bs58 = "0.4.0" matches = "0.1.9" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.12" } -solana-logger = { path = "../logger", version = "=1.14.12" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.13" } +solana-logger = { path = "../logger", version = "=1.14.13" } test-case = "2.1.0" [build-dependencies] diff --git a/local-cluster/Cargo.toml b/local-cluster/Cargo.toml index 399bc9c0ccc1cf..fecec4c4aee5ab 100644 --- a/local-cluster/Cargo.toml +++ b/local-cluster/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-local-cluster" description = "Blockchain, Rebuilt for Scale" -version = "1.14.12" +version = "1.14.13" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -16,25 +16,25 @@ itertools = "0.10.3" log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" -solana-client = { path = "../client", version = "=1.14.12" } -solana-config-program = { path = "../programs/config", version = "=1.14.12" } -solana-core = { path = "../core", version = "=1.14.12" } -solana-entry = { path = "../entry", version = "=1.14.12" } -solana-gossip = { path = "../gossip", version = "=1.14.12" } -solana-ledger = { path = "../ledger", version = "=1.14.12" } -solana-runtime = { path = "../runtime", version = "=1.14.12" } -solana-sdk = { path = "../sdk", version = "=1.14.12" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.12" } -solana-streamer = { path = "../streamer", version = "=1.14.12" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.12" } +solana-client = { path = "../client", version = "=1.14.13" } +solana-config-program = { path = "../programs/config", version = "=1.14.13" } +solana-core = { path = "../core", version = "=1.14.13" } +solana-entry = { path = "../entry", version = "=1.14.13" } +solana-gossip = { path = "../gossip", version = "=1.14.13" } +solana-ledger = { path = "../ledger", version = "=1.14.13" } +solana-runtime = { path = "../runtime", version = "=1.14.13" } +solana-sdk = { path = "../sdk", version = "=1.14.13" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.13" } +solana-streamer = { path = "../streamer", version = "=1.14.13" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.13" } tempfile = "3.3.0" [dev-dependencies] assert_matches = "1.5.0" gag = "1.0.0" serial_test = "0.8.0" -solana-download-utils = { path = "../download-utils", version = "=1.14.12" } -solana-logger = { path = "../logger", version = "=1.14.12" } +solana-download-utils = { path = "../download-utils", version = "=1.14.13" } +solana-logger = { path = "../logger", version = "=1.14.13" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/log-analyzer/Cargo.toml b/log-analyzer/Cargo.toml index c0bf265dba1c02..358f287af3f0f0 100644 --- a/log-analyzer/Cargo.toml +++ b/log-analyzer/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-log-analyzer" description = "The solana cluster network analysis tool" -version = "1.14.12" +version = "1.14.13" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,8 +14,8 @@ byte-unit = "4.0.14" clap = { version = "3.1.5", features = ["cargo"] } serde = "1.0.138" serde_json = "1.0.81" -solana-logger = { path = "../logger", version = "=1.14.12" } -solana-version = { path = "../version", version = "=1.14.12" } +solana-logger = { path = "../logger", version = "=1.14.13" } +solana-version = { path = "../version", version = "=1.14.13" } [[bin]] name = "solana-log-analyzer" diff --git a/logger/Cargo.toml b/logger/Cargo.toml index 8a9d89369af2f4..d7bd2203f9ff6f 100644 --- a/logger/Cargo.toml +++ b/logger/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-logger" -version = "1.14.12" +version = "1.14.13" description = "Solana Logger" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/measure/Cargo.toml b/measure/Cargo.toml index 8d626b5779e665..7d3d16984407af 100644 --- a/measure/Cargo.toml +++ b/measure/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "solana-measure" description = "Blockchain, Rebuilt for Scale" -version = "1.14.12" +version = "1.14.13" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-measure" readme = "../README.md" @@ -12,7 +12,7 @@ edition = "2021" [dependencies] log = "0.4.17" -solana-sdk = { path = "../sdk", version = "=1.14.12" } +solana-sdk = { path = "../sdk", version = "=1.14.13" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/merkle-root-bench/Cargo.toml b/merkle-root-bench/Cargo.toml index 895a3feefd3868..ed46c89a6511a5 100644 --- a/merkle-root-bench/Cargo.toml +++ b/merkle-root-bench/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-merkle-root-bench" -version = "1.14.12" +version = "1.14.13" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -11,11 +11,11 @@ publish = false [dependencies] clap = "2.33.1" log = "0.4.17" -solana-logger = { path = "../logger", version = "=1.14.12" } -solana-measure = { path = "../measure", version = "=1.14.12" } -solana-runtime = { path = "../runtime", version = "=1.14.12" } -solana-sdk = { path = "../sdk", version = "=1.14.12" } -solana-version = { path = "../version", version = "=1.14.12" } +solana-logger = { path = "../logger", version = "=1.14.13" } +solana-measure = { path = "../measure", version = "=1.14.13" } +solana-runtime = { path = "../runtime", version = "=1.14.13" } +solana-sdk = { path = "../sdk", version = "=1.14.13" } +solana-version = { path = "../version", version = "=1.14.13" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/merkle-tree/Cargo.toml b/merkle-tree/Cargo.toml index 956b06f9819675..7d74ebce4154ed 100644 --- a/merkle-tree/Cargo.toml +++ b/merkle-tree/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-merkle-tree" -version = "1.14.12" +version = "1.14.13" description = "Solana Merkle Tree" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -11,7 +11,7 @@ edition = "2021" [dependencies] fast-math = "0.1" -solana-program = { path = "../sdk/program", version = "=1.14.12" } +solana-program = { path = "../sdk/program", version = "=1.14.13" } # This can go once the BPF toolchain target Rust 1.42.0+ [target.bpfel-unknown-unknown.dependencies] diff --git a/metrics/Cargo.toml b/metrics/Cargo.toml index 83e0eca97129b2..83115a7f7cbb39 100644 --- a/metrics/Cargo.toml +++ b/metrics/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-metrics" -version = "1.14.12" +version = "1.14.13" description = "Solana Metrics" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -15,7 +15,7 @@ gethostname = "0.2.3" lazy_static = "1.4.0" log = "0.4.17" reqwest = { version = "0.11.11", default-features = false, features = ["blocking", "brotli", "deflate", "gzip", "rustls-tls", "json"] } -solana-sdk = { path = "../sdk", version = "=1.14.12" } +solana-sdk = { path = "../sdk", version = "=1.14.13" } [dev-dependencies] env_logger = "0.9.0" diff --git a/net-shaper/Cargo.toml b/net-shaper/Cargo.toml index 989c4888e5a4f7..af49a4bd130b40 100644 --- a/net-shaper/Cargo.toml +++ b/net-shaper/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-net-shaper" description = "The solana cluster network shaping tool" -version = "1.14.12" +version = "1.14.13" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,7 +14,7 @@ clap = { version = "3.1.5", features = ["cargo"] } rand = "0.7.0" serde = { version = "1.0.138", features = ["derive"] } serde_json = "1.0.81" -solana-logger = { path = "../logger", version = "=1.14.12" } +solana-logger = { path = "../logger", version = "=1.14.13" } [[bin]] name = "solana-net-shaper" diff --git a/net-utils/Cargo.toml b/net-utils/Cargo.toml index fa795f56be12a2..1a4292a0c7602d 100644 --- a/net-utils/Cargo.toml +++ b/net-utils/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-net-utils" -version = "1.14.12" +version = "1.14.13" description = "Solana Network Utilities" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -19,9 +19,9 @@ rand = "0.7.0" serde = "1.0.138" serde_derive = "1.0.103" socket2 = "0.4.4" -solana-logger = { path = "../logger", version = "=1.14.12" } -solana-sdk = { path = "../sdk", version = "=1.14.12" } -solana-version = { path = "../version", version = "=1.14.12" } +solana-logger = { path = "../logger", version = "=1.14.13" } +solana-sdk = { path = "../sdk", version = "=1.14.13" } +solana-version = { path = "../version", version = "=1.14.13" } tokio = { version = "1", features = ["full"] } url = "2.2.2" diff --git a/notifier/Cargo.toml b/notifier/Cargo.toml index aa4b448f3a6033..6bd438928849e9 100644 --- a/notifier/Cargo.toml +++ b/notifier/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-notifier" -version = "1.14.12" +version = "1.14.13" description = "Solana Notifier" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/perf/Cargo.toml b/perf/Cargo.toml index 87cf8bfa9f534a..35f89075cc1630 100644 --- a/perf/Cargo.toml +++ b/perf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-perf" -version = "1.14.12" +version = "1.14.13" description = "Solana Performance APIs" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -22,10 +22,10 @@ log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" serde = "1.0.138" -solana-metrics = { path = "../metrics", version = "=1.14.12" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.12" } -solana-sdk = { path = "../sdk", version = "=1.14.12" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.12" } +solana-metrics = { path = "../metrics", version = "=1.14.13" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.13" } +solana-sdk = { path = "../sdk", version = "=1.14.13" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.13" } [target."cfg(target_os = \"linux\")".dependencies] caps = "0.5.3" @@ -37,7 +37,7 @@ name = "solana_perf" [dev-dependencies] matches = "0.1.9" -solana-logger = { path = "../logger", version = "=1.14.12" } +solana-logger = { path = "../logger", version = "=1.14.13" } [[bench]] name = "sigverify" diff --git a/poh-bench/Cargo.toml b/poh-bench/Cargo.toml index 5393ddd3724cee..c6d779ed388801 100644 --- a/poh-bench/Cargo.toml +++ b/poh-bench/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-poh-bench" -version = "1.14.12" +version = "1.14.13" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,12 +14,12 @@ clap = { version = "3.1.5", features = ["cargo"] } log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" -solana-entry = { path = "../entry", version = "=1.14.12" } -solana-logger = { path = "../logger", version = "=1.14.12" } -solana-measure = { path = "../measure", version = "=1.14.12" } -solana-perf = { path = "../perf", version = "=1.14.12" } -solana-sdk = { path = "../sdk", version = "=1.14.12" } -solana-version = { path = "../version", version = "=1.14.12" } +solana-entry = { path = "../entry", version = "=1.14.13" } +solana-logger = { path = "../logger", version = "=1.14.13" } +solana-measure = { path = "../measure", version = "=1.14.13" } +solana-perf = { path = "../perf", version = "=1.14.13" } +solana-sdk = { path = "../sdk", version = "=1.14.13" } +solana-version = { path = "../version", version = "=1.14.13" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/poh/Cargo.toml b/poh/Cargo.toml index 5281a3d3b59480..12890d104c2e2b 100644 --- a/poh/Cargo.toml +++ b/poh/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-poh" -version = "1.14.12" +version = "1.14.13" description = "Solana PoH" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,21 +13,21 @@ edition = "2021" core_affinity = "0.5.10" crossbeam-channel = "0.5" log = "0.4.17" -solana-entry = { path = "../entry", version = "=1.14.12" } -solana-ledger = { path = "../ledger", version = "=1.14.12" } -solana-measure = { path = "../measure", version = "=1.14.12" } -solana-metrics = { path = "../metrics", version = "=1.14.12" } -solana-runtime = { path = "../runtime", version = "=1.14.12" } -solana-sdk = { path = "../sdk", version = "=1.14.12" } -solana-sys-tuner = { path = "../sys-tuner", version = "=1.14.12" } +solana-entry = { path = "../entry", version = "=1.14.13" } +solana-ledger = { path = "../ledger", version = "=1.14.13" } +solana-measure = { path = "../measure", version = "=1.14.13" } +solana-metrics = { path = "../metrics", version = "=1.14.13" } +solana-runtime = { path = "../runtime", version = "=1.14.13" } +solana-sdk = { path = "../sdk", version = "=1.14.13" } +solana-sys-tuner = { path = "../sys-tuner", version = "=1.14.13" } thiserror = "1.0" [dev-dependencies] bincode = "1.3.3" matches = "0.1.9" rand = "0.7.0" -solana-logger = { path = "../logger", version = "=1.14.12" } -solana-perf = { path = "../perf", version = "=1.14.12" } +solana-logger = { path = "../logger", version = "=1.14.13" } +solana-perf = { path = "../perf", version = "=1.14.13" } [lib] crate-type = ["lib"] diff --git a/program-runtime/Cargo.toml b/program-runtime/Cargo.toml index b5b34013771733..76e61455482278 100644 --- a/program-runtime/Cargo.toml +++ b/program-runtime/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-program-runtime" -version = "1.14.12" +version = "1.14.13" description = "Solana program runtime" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -21,16 +21,16 @@ num-derive = { version = "0.3" } num-traits = { version = "0.2" } rand = "0.7.0" serde = { version = "1.0.129", features = ["derive", "rc"] } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.12" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.12" } -solana-measure = { path = "../measure", version = "=1.14.12" } -solana-metrics = { path = "../metrics", version = "=1.14.12" } -solana-sdk = { path = "../sdk", version = "=1.14.12" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.13" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.13" } +solana-measure = { path = "../measure", version = "=1.14.13" } +solana-metrics = { path = "../metrics", version = "=1.14.13" } +solana-sdk = { path = "../sdk", version = "=1.14.13" } thiserror = "1.0" enum-iterator = "0.8.1" [dev-dependencies] -solana-logger = { path = "../logger", version = "=1.14.12" } +solana-logger = { path = "../logger", version = "=1.14.13" } [lib] crate-type = ["lib"] diff --git a/program-test/Cargo.toml b/program-test/Cargo.toml index 41179a0299bd78..90c170b9d5057f 100644 --- a/program-test/Cargo.toml +++ b/program-test/Cargo.toml @@ -5,7 +5,7 @@ edition = "2021" license = "Apache-2.0" name = "solana-program-test" repository = "https://github.com/solana-labs/solana" -version = "1.14.12" +version = "1.14.13" [dependencies] assert_matches = "1.5.0" @@ -15,13 +15,13 @@ bincode = "1.3.3" chrono-humanize = "0.2.1" log = "0.4.17" serde = "1.0.138" -solana-banks-client = { path = "../banks-client", version = "=1.14.12" } -solana-banks-server = { path = "../banks-server", version = "=1.14.12" } -solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.12" } -solana-logger = { path = "../logger", version = "=1.14.12" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.12" } -solana-runtime = { path = "../runtime", version = "=1.14.12" } -solana-sdk = { path = "../sdk", version = "=1.14.12" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.12" } +solana-banks-client = { path = "../banks-client", version = "=1.14.13" } +solana-banks-server = { path = "../banks-server", version = "=1.14.13" } +solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.13" } +solana-logger = { path = "../logger", version = "=1.14.13" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.13" } +solana-runtime = { path = "../runtime", version = "=1.14.13" } +solana-sdk = { path = "../sdk", version = "=1.14.13" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.13" } thiserror = "1.0" tokio = { version = "1", features = ["full"] } diff --git a/programs/address-lookup-table-tests/Cargo.toml b/programs/address-lookup-table-tests/Cargo.toml index e7c1a6f4df6d0c..e832f8ef300e4a 100644 --- a/programs/address-lookup-table-tests/Cargo.toml +++ b/programs/address-lookup-table-tests/Cargo.toml @@ -3,7 +3,7 @@ [package] name = "solana-address-lookup-table-program-tests" -version = "1.14.12" +version = "1.14.13" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" @@ -14,9 +14,9 @@ publish = false [dev-dependencies] assert_matches = "1.5.0" bincode = "1.3.3" -solana-address-lookup-table-program = { path = "../address-lookup-table", version = "=1.14.12" } -solana-program-test = { path = "../../program-test", version = "=1.14.12" } -solana-sdk = { path = "../../sdk", version = "=1.14.12" } +solana-address-lookup-table-program = { path = "../address-lookup-table", version = "=1.14.13" } +solana-program-test = { path = "../../program-test", version = "=1.14.13" } +solana-sdk = { path = "../../sdk", version = "=1.14.13" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/address-lookup-table/Cargo.toml b/programs/address-lookup-table/Cargo.toml index a4dd857a65a40b..59a4a9c4c55477 100644 --- a/programs/address-lookup-table/Cargo.toml +++ b/programs/address-lookup-table/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-address-lookup-table-program" -version = "1.14.12" +version = "1.14.13" description = "Solana address lookup table program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -16,14 +16,14 @@ log = "0.4.17" num-derive = "0.3" num-traits = "0.2" serde = { version = "1.0.138", features = ["derive"] } -solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.12" } -solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.12" } -solana-program = { path = "../../sdk/program", version = "=1.14.12" } +solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.13" } +solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.13" } +solana-program = { path = "../../sdk/program", version = "=1.14.13" } thiserror = "1.0" [target.'cfg(not(target_os = "solana"))'.dependencies] -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.12" } -solana-sdk = { path = "../../sdk", version = "=1.14.12" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.13" } +solana-sdk = { path = "../../sdk", version = "=1.14.13" } [build-dependencies] rustc_version = "0.4" diff --git a/programs/bpf-loader-tests/Cargo.toml b/programs/bpf-loader-tests/Cargo.toml index e5d68eefa37c04..35f0688d9b4ea5 100644 --- a/programs/bpf-loader-tests/Cargo.toml +++ b/programs/bpf-loader-tests/Cargo.toml @@ -3,7 +3,7 @@ [package] name = "solana-bpf-loader-program-tests" -version = "1.14.12" +version = "1.14.13" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" @@ -14,9 +14,9 @@ publish = false [dev-dependencies] assert_matches = "1.5.0" bincode = "1.3.3" -solana-bpf-loader-program = { path = "../bpf_loader", version = "=1.14.12" } -solana-program-test = { path = "../../program-test", version = "=1.14.12" } -solana-sdk = { path = "../../sdk", version = "=1.14.12" } +solana-bpf-loader-program = { path = "../bpf_loader", version = "=1.14.13" } +solana-program-test = { path = "../../program-test", version = "=1.14.13" } +solana-sdk = { path = "../../sdk", version = "=1.14.13" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/bpf/Cargo.lock b/programs/bpf/Cargo.lock index 815decab2bf6bb..af120631aaf9d3 100644 --- a/programs/bpf/Cargo.lock +++ b/programs/bpf/Cargo.lock @@ -4054,7 +4054,7 @@ dependencies = [ [[package]] name = "solana-account-decoder" -version = "1.14.12" +version = "1.14.13" dependencies = [ "Inflector", "base64 0.13.0", @@ -4067,7 +4067,7 @@ dependencies = [ "serde_json", "solana-address-lookup-table-program", "solana-config-program", - "solana-sdk 1.14.12", + "solana-sdk 1.14.13", "solana-vote-program", "spl-token", "spl-token-2022", @@ -4077,7 +4077,7 @@ dependencies = [ [[package]] name = "solana-address-lookup-table-program" -version = "1.14.12" +version = "1.14.13" dependencies = [ "bincode", "bytemuck", @@ -4086,23 +4086,23 @@ dependencies = [ "num-traits", "rustc_version", "serde", - "solana-frozen-abi 1.14.12", - "solana-frozen-abi-macro 1.14.12", - "solana-program 1.14.12", + "solana-frozen-abi 1.14.13", + "solana-frozen-abi-macro 1.14.13", + "solana-program 1.14.13", "solana-program-runtime", - "solana-sdk 1.14.12", + "solana-sdk 1.14.13", "thiserror", ] [[package]] name = "solana-banks-client" -version = "1.14.12" +version = "1.14.13" dependencies = [ "borsh", "futures 0.3.21", "solana-banks-interface", - "solana-program 1.14.12", - "solana-sdk 1.14.12", + "solana-program 1.14.13", + "solana-sdk 1.14.13", "tarpc", "thiserror", "tokio", @@ -4111,16 +4111,16 @@ dependencies = [ [[package]] name = "solana-banks-interface" -version = "1.14.12" +version = "1.14.13" dependencies = [ "serde", - "solana-sdk 1.14.12", + "solana-sdk 1.14.13", "tarpc", ] [[package]] name = "solana-banks-server" -version = "1.14.12" +version = "1.14.13" dependencies = [ "bincode", "crossbeam-channel", @@ -4128,7 +4128,7 @@ dependencies = [ "solana-banks-interface", "solana-client", "solana-runtime", - "solana-sdk 1.14.12", + "solana-sdk 1.14.13", "solana-send-transaction-service", "tarpc", "tokio", @@ -4138,7 +4138,7 @@ dependencies = [ [[package]] name = "solana-bloom" -version = "1.14.12" +version = "1.14.13" dependencies = [ "bv", "fnv", @@ -4148,14 +4148,14 @@ dependencies = [ "rustc_version", "serde", "serde_derive", - "solana-frozen-abi 1.14.12", - "solana-frozen-abi-macro 1.14.12", - "solana-sdk 1.14.12", + "solana-frozen-abi 1.14.13", + "solana-frozen-abi-macro 1.14.13", + "solana-sdk 1.14.13", ] [[package]] name = "solana-bpf-loader-program" -version = "1.14.12" +version = "1.14.13" dependencies = [ "bincode", "byteorder 1.4.3", @@ -4164,15 +4164,15 @@ dependencies = [ "solana-measure", "solana-metrics", "solana-program-runtime", - "solana-sdk 1.14.12", - "solana-zk-token-sdk 1.14.12", + "solana-sdk 1.14.13", + "solana-zk-token-sdk 1.14.13", "solana_rbpf", "thiserror", ] [[package]] name = "solana-bpf-programs" -version = "1.14.12" +version = "1.14.13" dependencies = [ "bincode", "byteorder 1.4.3", @@ -4188,11 +4188,11 @@ dependencies = [ "solana-bpf-rust-realloc-invoke", "solana-cli-output", "solana-ledger", - "solana-logger 1.14.12", + "solana-logger 1.14.13", "solana-measure", "solana-program-runtime", "solana-runtime", - "solana-sdk 1.14.12", + "solana-sdk 1.14.13", "solana-transaction-status", "solana_rbpf", "walkdir", @@ -4200,385 +4200,385 @@ dependencies = [ [[package]] name = "solana-bpf-rust-128bit" -version = "1.14.12" +version = "1.14.13" dependencies = [ "solana-bpf-rust-128bit-dep", - "solana-program 1.14.12", + "solana-program 1.14.13", ] [[package]] name = "solana-bpf-rust-128bit-dep" -version = "1.14.12" +version = "1.14.13" dependencies = [ - "solana-program 1.14.12", + "solana-program 1.14.13", ] [[package]] name = "solana-bpf-rust-alloc" -version = "1.14.12" +version = "1.14.13" dependencies = [ - "solana-program 1.14.12", + "solana-program 1.14.13", ] [[package]] name = "solana-bpf-rust-call-depth" -version = "1.14.12" +version = "1.14.13" dependencies = [ - "solana-program 1.14.12", + "solana-program 1.14.13", ] [[package]] name = "solana-bpf-rust-caller-access" -version = "1.14.12" +version = "1.14.13" dependencies = [ - "solana-program 1.14.12", + "solana-program 1.14.13", ] [[package]] name = "solana-bpf-rust-curve25519" -version = "1.14.12" +version = "1.14.13" dependencies = [ - "solana-program 1.14.12", - "solana-zk-token-sdk 1.14.12", + "solana-program 1.14.13", + "solana-zk-token-sdk 1.14.13", ] [[package]] name = "solana-bpf-rust-custom-heap" -version = "1.14.12" +version = "1.14.13" dependencies = [ - "solana-program 1.14.12", + "solana-program 1.14.13", ] [[package]] name = "solana-bpf-rust-dep-crate" -version = "1.14.12" +version = "1.14.13" dependencies = [ "byteorder 1.4.3", "solana-address-lookup-table-program", - "solana-program 1.14.12", + "solana-program 1.14.13", ] [[package]] name = "solana-bpf-rust-deprecated-loader" -version = "1.14.12" +version = "1.14.13" dependencies = [ - "solana-program 1.14.12", + "solana-program 1.14.13", ] [[package]] name = "solana-bpf-rust-dup-accounts" -version = "1.14.12" +version = "1.14.13" dependencies = [ - "solana-program 1.14.12", + "solana-program 1.14.13", ] [[package]] name = "solana-bpf-rust-error-handling" -version = "1.14.12" +version = "1.14.13" dependencies = [ "num-derive", "num-traits", - "solana-program 1.14.12", + "solana-program 1.14.13", "thiserror", ] [[package]] name = "solana-bpf-rust-external-spend" -version = "1.14.12" +version = "1.14.13" dependencies = [ - "solana-program 1.14.12", + "solana-program 1.14.13", ] [[package]] name = "solana-bpf-rust-finalize" -version = "1.14.12" +version = "1.14.13" dependencies = [ - "solana-program 1.14.12", + "solana-program 1.14.13", ] [[package]] name = "solana-bpf-rust-get-minimum-delegation" -version = "1.14.12" +version = "1.14.13" dependencies = [ - "solana-program 1.14.12", + "solana-program 1.14.13", ] [[package]] name = "solana-bpf-rust-inner_instruction_alignment_check" -version = "1.14.12" +version = "1.14.13" dependencies = [ - "solana-program 1.14.12", + "solana-program 1.14.13", ] [[package]] name = "solana-bpf-rust-instruction-introspection" -version = "1.14.12" +version = "1.14.13" dependencies = [ - "solana-program 1.14.12", + "solana-program 1.14.13", ] [[package]] name = "solana-bpf-rust-invoke" -version = "1.14.12" +version = "1.14.13" dependencies = [ "solana-bpf-rust-invoked", - "solana-program 1.14.12", + "solana-program 1.14.13", ] [[package]] name = "solana-bpf-rust-invoke-and-error" -version = "1.14.12" +version = "1.14.13" dependencies = [ - "solana-program 1.14.12", + "solana-program 1.14.13", ] [[package]] name = "solana-bpf-rust-invoke-and-ok" -version = "1.14.12" +version = "1.14.13" dependencies = [ - "solana-program 1.14.12", + "solana-program 1.14.13", ] [[package]] name = "solana-bpf-rust-invoke-and-return" -version = "1.14.12" +version = "1.14.13" dependencies = [ - "solana-program 1.14.12", + "solana-program 1.14.13", ] [[package]] name = "solana-bpf-rust-invoked" -version = "1.14.12" +version = "1.14.13" dependencies = [ - "solana-program 1.14.12", + "solana-program 1.14.13", ] [[package]] name = "solana-bpf-rust-iter" -version = "1.14.12" +version = "1.14.13" dependencies = [ - "solana-program 1.14.12", + "solana-program 1.14.13", ] [[package]] name = "solana-bpf-rust-log-data" -version = "1.14.12" +version = "1.14.13" dependencies = [ - "solana-program 1.14.12", + "solana-program 1.14.13", ] [[package]] name = "solana-bpf-rust-many-args" -version = "1.14.12" +version = "1.14.13" dependencies = [ "solana-bpf-rust-many-args-dep", - "solana-program 1.14.12", + "solana-program 1.14.13", ] [[package]] name = "solana-bpf-rust-many-args-dep" -version = "1.14.12" +version = "1.14.13" dependencies = [ - "solana-program 1.14.12", + "solana-program 1.14.13", ] [[package]] name = "solana-bpf-rust-mem" -version = "1.14.12" +version = "1.14.13" dependencies = [ - "solana-program 1.14.12", + "solana-program 1.14.13", "solana-program-runtime", "solana-program-test", - "solana-sdk 1.14.12", + "solana-sdk 1.14.13", ] [[package]] name = "solana-bpf-rust-membuiltins" -version = "1.14.12" +version = "1.14.13" dependencies = [ "solana-bpf-rust-mem", - "solana-program 1.14.12", + "solana-program 1.14.13", ] [[package]] name = "solana-bpf-rust-noop" -version = "1.14.12" +version = "1.14.13" dependencies = [ - "solana-program 1.14.12", + "solana-program 1.14.13", ] [[package]] name = "solana-bpf-rust-panic" -version = "1.14.12" +version = "1.14.13" dependencies = [ - "solana-program 1.14.12", + "solana-program 1.14.13", ] [[package]] name = "solana-bpf-rust-param-passing" -version = "1.14.12" +version = "1.14.13" dependencies = [ "solana-bpf-rust-param-passing-dep", - "solana-program 1.14.12", + "solana-program 1.14.13", ] [[package]] name = "solana-bpf-rust-param-passing-dep" -version = "1.14.12" +version = "1.14.13" dependencies = [ - "solana-program 1.14.12", + "solana-program 1.14.13", ] [[package]] name = "solana-bpf-rust-rand" -version = "1.14.12" +version = "1.14.13" dependencies = [ "getrandom 0.1.14", "rand 0.7.3", - "solana-program 1.14.12", + "solana-program 1.14.13", ] [[package]] name = "solana-bpf-rust-realloc" -version = "1.14.12" +version = "1.14.13" dependencies = [ - "solana-program 1.14.12", + "solana-program 1.14.13", ] [[package]] name = "solana-bpf-rust-realloc-invoke" -version = "1.14.12" +version = "1.14.13" dependencies = [ "solana-bpf-rust-realloc", - "solana-program 1.14.12", + "solana-program 1.14.13", ] [[package]] name = "solana-bpf-rust-ro-account_modify" -version = "1.14.12" +version = "1.14.13" dependencies = [ - "solana-program 1.14.12", + "solana-program 1.14.13", ] [[package]] name = "solana-bpf-rust-ro-modify" -version = "1.14.12" +version = "1.14.13" dependencies = [ - "solana-program 1.14.12", + "solana-program 1.14.13", ] [[package]] name = "solana-bpf-rust-sanity" -version = "1.14.12" +version = "1.14.13" dependencies = [ - "solana-program 1.14.12", + "solana-program 1.14.13", "solana-program-runtime", "solana-program-test", - "solana-sdk 1.14.12", + "solana-sdk 1.14.13", ] [[package]] name = "solana-bpf-rust-secp256k1-recover" -version = "1.14.12" +version = "1.14.13" dependencies = [ "libsecp256k1 0.7.0", - "solana-program 1.14.12", + "solana-program 1.14.13", ] [[package]] name = "solana-bpf-rust-sha" -version = "1.14.12" +version = "1.14.13" dependencies = [ "blake3", - "solana-program 1.14.12", + "solana-program 1.14.13", ] [[package]] name = "solana-bpf-rust-sibling-instructions" -version = "1.14.12" +version = "1.14.13" dependencies = [ - "solana-program 1.14.12", + "solana-program 1.14.13", ] [[package]] name = "solana-bpf-rust-sibling_inner-instructions" -version = "1.14.12" +version = "1.14.13" dependencies = [ - "solana-program 1.14.12", + "solana-program 1.14.13", ] [[package]] name = "solana-bpf-rust-simulation" -version = "1.14.12" +version = "1.14.13" dependencies = [ - "solana-logger 1.14.12", - "solana-program 1.14.12", + "solana-logger 1.14.13", + "solana-program 1.14.13", "solana-program-test", - "solana-sdk 1.14.12", + "solana-sdk 1.14.13", "solana-validator", ] [[package]] name = "solana-bpf-rust-spoof1" -version = "1.14.12" +version = "1.14.13" dependencies = [ - "solana-program 1.14.12", + "solana-program 1.14.13", ] [[package]] name = "solana-bpf-rust-spoof1-system" -version = "1.14.12" +version = "1.14.13" dependencies = [ - "solana-program 1.14.12", + "solana-program 1.14.13", ] [[package]] name = "solana-bpf-rust-sysvar" -version = "1.14.12" +version = "1.14.13" dependencies = [ - "solana-program 1.14.12", + "solana-program 1.14.13", "solana-program-runtime", "solana-program-test", - "solana-sdk 1.14.12", + "solana-sdk 1.14.13", ] [[package]] name = "solana-bpf-rust-upgradeable" -version = "1.14.12" +version = "1.14.13" dependencies = [ - "solana-program 1.14.12", + "solana-program 1.14.13", ] [[package]] name = "solana-bpf-rust-upgraded" -version = "1.14.12" +version = "1.14.13" dependencies = [ - "solana-program 1.14.12", + "solana-program 1.14.13", ] [[package]] name = "solana-bucket-map" -version = "1.14.12" +version = "1.14.13" dependencies = [ "log", "memmap2", "modular-bitfield", "rand 0.7.3", "solana-measure", - "solana-sdk 1.14.12", + "solana-sdk 1.14.13", "tempfile", ] [[package]] name = "solana-clap-utils" -version = "1.14.12" +version = "1.14.13" dependencies = [ "chrono", "clap 2.33.3", "rpassword", "solana-perf", "solana-remote-wallet", - "solana-sdk 1.14.12", + "solana-sdk 1.14.13", "thiserror", "tiny-bip39", "uriparse", @@ -4587,7 +4587,7 @@ dependencies = [ [[package]] name = "solana-cli-config" -version = "1.14.12" +version = "1.14.13" dependencies = [ "dirs-next", "lazy_static", @@ -4595,13 +4595,13 @@ dependencies = [ "serde_derive", "serde_yaml", "solana-clap-utils", - "solana-sdk 1.14.12", + "solana-sdk 1.14.13", "url 2.2.2", ] [[package]] name = "solana-cli-output" -version = "1.14.12" +version = "1.14.13" dependencies = [ "Inflector", "base64 0.13.0", @@ -4618,7 +4618,7 @@ dependencies = [ "solana-clap-utils", "solana-cli-config", "solana-client", - "solana-sdk 1.14.12", + "solana-sdk 1.14.13", "solana-transaction-status", "solana-vote-program", "spl-memo", @@ -4626,7 +4626,7 @@ dependencies = [ [[package]] name = "solana-client" -version = "1.14.12" +version = "1.14.13" dependencies = [ "async-mutex", "async-trait", @@ -4662,7 +4662,7 @@ dependencies = [ "solana-measure", "solana-metrics", "solana-net-utils", - "solana-sdk 1.14.12", + "solana-sdk 1.14.13", "solana-streamer", "solana-transaction-status", "solana-version", @@ -4678,27 +4678,27 @@ dependencies = [ [[package]] name = "solana-compute-budget-program" -version = "1.14.12" +version = "1.14.13" dependencies = [ "solana-program-runtime", - "solana-sdk 1.14.12", + "solana-sdk 1.14.13", ] [[package]] name = "solana-config-program" -version = "1.14.12" +version = "1.14.13" dependencies = [ "bincode", "chrono", "serde", "serde_derive", "solana-program-runtime", - "solana-sdk 1.14.12", + "solana-sdk 1.14.13", ] [[package]] name = "solana-core" -version = "1.14.12" +version = "1.14.13" dependencies = [ "ahash", "base64 0.13.0", @@ -4727,8 +4727,8 @@ dependencies = [ "solana-bloom", "solana-client", "solana-entry", - "solana-frozen-abi 1.14.12", - "solana-frozen-abi-macro 1.14.12", + "solana-frozen-abi 1.14.13", + "solana-frozen-abi-macro 1.14.13", "solana-geyser-plugin-manager", "solana-gossip", "solana-ledger", @@ -4741,7 +4741,7 @@ dependencies = [ "solana-rayon-threadlimit", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.12", + "solana-sdk 1.14.13", "solana-send-transaction-service", "solana-streamer", "solana-transaction-status", @@ -4757,19 +4757,19 @@ dependencies = [ [[package]] name = "solana-download-utils" -version = "1.14.12" +version = "1.14.13" dependencies = [ "console", "indicatif", "log", "reqwest", "solana-runtime", - "solana-sdk 1.14.12", + "solana-sdk 1.14.13", ] [[package]] name = "solana-entry" -version = "1.14.12" +version = "1.14.13" dependencies = [ "bincode", "crossbeam-channel", @@ -4785,12 +4785,12 @@ dependencies = [ "solana-metrics", "solana-perf", "solana-rayon-threadlimit", - "solana-sdk 1.14.12", + "solana-sdk 1.14.13", ] [[package]] name = "solana-faucet" -version = "1.14.12" +version = "1.14.13" dependencies = [ "bincode", "byteorder 1.4.3", @@ -4801,9 +4801,9 @@ dependencies = [ "serde_derive", "solana-clap-utils", "solana-cli-config", - "solana-logger 1.14.12", + "solana-logger 1.14.13", "solana-metrics", - "solana-sdk 1.14.12", + "solana-sdk 1.14.13", "solana-version", "spl-memo", "thiserror", @@ -4846,7 +4846,7 @@ dependencies = [ [[package]] name = "solana-frozen-abi" -version = "1.14.12" +version = "1.14.13" dependencies = [ "ahash", "blake3", @@ -4871,7 +4871,7 @@ dependencies = [ "serde_derive", "serde_json", "sha2 0.10.2", - "solana-frozen-abi-macro 1.14.12", + "solana-frozen-abi-macro 1.14.13", "subtle", "thiserror", ] @@ -4890,7 +4890,7 @@ dependencies = [ [[package]] name = "solana-frozen-abi-macro" -version = "1.14.12" +version = "1.14.13" dependencies = [ "proc-macro2 1.0.41", "quote 1.0.18", @@ -4900,26 +4900,26 @@ dependencies = [ [[package]] name = "solana-genesis-utils" -version = "1.14.12" +version = "1.14.13" dependencies = [ "solana-download-utils", "solana-runtime", - "solana-sdk 1.14.12", + "solana-sdk 1.14.13", ] [[package]] name = "solana-geyser-plugin-interface" -version = "1.14.12" +version = "1.14.13" dependencies = [ "log", - "solana-sdk 1.14.12", + "solana-sdk 1.14.13", "solana-transaction-status", "thiserror", ] [[package]] name = "solana-geyser-plugin-manager" -version = "1.14.12" +version = "1.14.13" dependencies = [ "bs58", "crossbeam-channel", @@ -4932,14 +4932,14 @@ dependencies = [ "solana-metrics", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.12", + "solana-sdk 1.14.13", "solana-transaction-status", "thiserror", ] [[package]] name = "solana-gossip" -version = "1.14.12" +version = "1.14.13" dependencies = [ "bincode", "bv", @@ -4963,17 +4963,17 @@ dependencies = [ "solana-clap-utils", "solana-client", "solana-entry", - "solana-frozen-abi 1.14.12", - "solana-frozen-abi-macro 1.14.12", + "solana-frozen-abi 1.14.13", + "solana-frozen-abi-macro 1.14.13", "solana-ledger", - "solana-logger 1.14.12", + "solana-logger 1.14.13", "solana-measure", "solana-metrics", "solana-net-utils", "solana-perf", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.14.12", + "solana-sdk 1.14.13", "solana-streamer", "solana-version", "solana-vote-program", @@ -4982,7 +4982,7 @@ dependencies = [ [[package]] name = "solana-ledger" -version = "1.14.12" +version = "1.14.13" dependencies = [ "assert_matches", "bincode", @@ -5014,15 +5014,15 @@ dependencies = [ "solana-account-decoder", "solana-bpf-loader-program", "solana-entry", - "solana-frozen-abi 1.14.12", - "solana-frozen-abi-macro 1.14.12", + "solana-frozen-abi 1.14.13", + "solana-frozen-abi-macro 1.14.13", "solana-measure", "solana-metrics", "solana-perf", "solana-program-runtime", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.14.12", + "solana-sdk 1.14.13", "solana-stake-program", "solana-storage-bigtable", "solana-storage-proto", @@ -5051,7 +5051,7 @@ dependencies = [ [[package]] name = "solana-logger" -version = "1.14.12" +version = "1.14.13" dependencies = [ "env_logger", "lazy_static", @@ -5060,36 +5060,36 @@ dependencies = [ [[package]] name = "solana-measure" -version = "1.14.12" +version = "1.14.13" dependencies = [ "log", - "solana-sdk 1.14.12", + "solana-sdk 1.14.13", ] [[package]] name = "solana-merkle-tree" -version = "1.14.12" +version = "1.14.13" dependencies = [ "fast-math", "matches", - "solana-program 1.14.12", + "solana-program 1.14.13", ] [[package]] name = "solana-metrics" -version = "1.14.12" +version = "1.14.13" dependencies = [ "crossbeam-channel", "gethostname", "lazy_static", "log", "reqwest", - "solana-sdk 1.14.12", + "solana-sdk 1.14.13", ] [[package]] name = "solana-net-utils" -version = "1.14.12" +version = "1.14.13" dependencies = [ "bincode", "clap 3.1.6", @@ -5100,8 +5100,8 @@ dependencies = [ "serde", "serde_derive", "socket2", - "solana-logger 1.14.12", - "solana-sdk 1.14.12", + "solana-logger 1.14.13", + "solana-sdk 1.14.13", "solana-version", "tokio", "url 2.2.2", @@ -5109,7 +5109,7 @@ dependencies = [ [[package]] name = "solana-perf" -version = "1.14.12" +version = "1.14.13" dependencies = [ "ahash", "bincode", @@ -5128,13 +5128,13 @@ dependencies = [ "serde", "solana-metrics", "solana-rayon-threadlimit", - "solana-sdk 1.14.12", + "solana-sdk 1.14.13", "solana-vote-program", ] [[package]] name = "solana-poh" -version = "1.14.12" +version = "1.14.13" dependencies = [ "core_affinity", "crossbeam-channel", @@ -5144,7 +5144,7 @@ dependencies = [ "solana-measure", "solana-metrics", "solana-runtime", - "solana-sdk 1.14.12", + "solana-sdk 1.14.13", "solana-sys-tuner", "thiserror", ] @@ -5200,7 +5200,7 @@ dependencies = [ [[package]] name = "solana-program" -version = "1.14.12" +version = "1.14.13" dependencies = [ "base64 0.13.0", "bincode", @@ -5236,9 +5236,9 @@ dependencies = [ "serde_json", "sha2 0.10.2", "sha3 0.10.1", - "solana-frozen-abi 1.14.12", - "solana-frozen-abi-macro 1.14.12", - "solana-sdk-macro 1.14.12", + "solana-frozen-abi 1.14.13", + "solana-frozen-abi-macro 1.14.13", + "solana-sdk-macro 1.14.13", "thiserror", "tiny-bip39", "wasm-bindgen", @@ -5247,7 +5247,7 @@ dependencies = [ [[package]] name = "solana-program-runtime" -version = "1.14.12" +version = "1.14.13" dependencies = [ "base64 0.13.0", "bincode", @@ -5262,17 +5262,17 @@ dependencies = [ "rand 0.7.3", "rustc_version", "serde", - "solana-frozen-abi 1.14.12", - "solana-frozen-abi-macro 1.14.12", + "solana-frozen-abi 1.14.13", + "solana-frozen-abi-macro 1.14.13", "solana-measure", "solana-metrics", - "solana-sdk 1.14.12", + "solana-sdk 1.14.13", "thiserror", ] [[package]] name = "solana-program-test" -version = "1.14.12" +version = "1.14.13" dependencies = [ "assert_matches", "async-trait", @@ -5284,10 +5284,10 @@ dependencies = [ "solana-banks-client", "solana-banks-server", "solana-bpf-loader-program", - "solana-logger 1.14.12", + "solana-logger 1.14.13", "solana-program-runtime", "solana-runtime", - "solana-sdk 1.14.12", + "solana-sdk 1.14.13", "solana-vote-program", "thiserror", "tokio", @@ -5295,7 +5295,7 @@ dependencies = [ [[package]] name = "solana-rayon-threadlimit" -version = "1.14.12" +version = "1.14.13" dependencies = [ "lazy_static", "num_cpus", @@ -5303,7 +5303,7 @@ dependencies = [ [[package]] name = "solana-remote-wallet" -version = "1.14.12" +version = "1.14.13" dependencies = [ "console", "dialoguer", @@ -5313,14 +5313,14 @@ dependencies = [ "parking_lot 0.12.1", "qstring", "semver", - "solana-sdk 1.14.12", + "solana-sdk 1.14.13", "thiserror", "uriparse", ] [[package]] name = "solana-rpc" -version = "1.14.12" +version = "1.14.13" dependencies = [ "base64 0.13.0", "bincode", @@ -5353,7 +5353,7 @@ dependencies = [ "solana-poh", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.14.12", + "solana-sdk 1.14.13", "solana-send-transaction-service", "solana-stake-program", "solana-storage-bigtable", @@ -5371,7 +5371,7 @@ dependencies = [ [[package]] name = "solana-runtime" -version = "1.14.12" +version = "1.14.13" dependencies = [ "arrayref", "bincode", @@ -5408,17 +5408,17 @@ dependencies = [ "solana-bucket-map", "solana-compute-budget-program", "solana-config-program", - "solana-frozen-abi 1.14.12", - "solana-frozen-abi-macro 1.14.12", + "solana-frozen-abi 1.14.13", + "solana-frozen-abi-macro 1.14.13", "solana-measure", "solana-metrics", "solana-program-runtime", "solana-rayon-threadlimit", - "solana-sdk 1.14.12", + "solana-sdk 1.14.13", "solana-stake-program", "solana-vote-program", "solana-zk-token-proof-program", - "solana-zk-token-sdk 1.14.12", + "solana-zk-token-sdk 1.14.13", "strum", "strum_macros", "symlink", @@ -5481,7 +5481,7 @@ dependencies = [ [[package]] name = "solana-sdk" -version = "1.14.12" +version = "1.14.13" dependencies = [ "assert_matches", "base64 0.13.0", @@ -5518,11 +5518,11 @@ dependencies = [ "serde_json", "sha2 0.10.2", "sha3 0.10.1", - "solana-frozen-abi 1.14.12", - "solana-frozen-abi-macro 1.14.12", - "solana-logger 1.14.12", - "solana-program 1.14.12", - "solana-sdk-macro 1.14.12", + "solana-frozen-abi 1.14.13", + "solana-frozen-abi-macro 1.14.13", + "solana-logger 1.14.13", + "solana-program 1.14.13", + "solana-sdk-macro 1.14.13", "thiserror", "uriparse", "wasm-bindgen", @@ -5543,7 +5543,7 @@ dependencies = [ [[package]] name = "solana-sdk-macro" -version = "1.14.12" +version = "1.14.13" dependencies = [ "bs58", "proc-macro2 1.0.41", @@ -5554,7 +5554,7 @@ dependencies = [ [[package]] name = "solana-send-transaction-service" -version = "1.14.12" +version = "1.14.13" dependencies = [ "crossbeam-channel", "log", @@ -5562,12 +5562,12 @@ dependencies = [ "solana-measure", "solana-metrics", "solana-runtime", - "solana-sdk 1.14.12", + "solana-sdk 1.14.13", ] [[package]] name = "solana-stake-program" -version = "1.14.12" +version = "1.14.13" dependencies = [ "bincode", "log", @@ -5577,18 +5577,18 @@ dependencies = [ "serde", "serde_derive", "solana-config-program", - "solana-frozen-abi 1.14.12", - "solana-frozen-abi-macro 1.14.12", + "solana-frozen-abi 1.14.13", + "solana-frozen-abi-macro 1.14.13", "solana-metrics", "solana-program-runtime", - "solana-sdk 1.14.12", + "solana-sdk 1.14.13", "solana-vote-program", "thiserror", ] [[package]] name = "solana-storage-bigtable" -version = "1.14.12" +version = "1.14.13" dependencies = [ "backoff", "bincode", @@ -5609,7 +5609,7 @@ dependencies = [ "serde_derive", "smpl_jwt", "solana-metrics", - "solana-sdk 1.14.12", + "solana-sdk 1.14.13", "solana-storage-proto", "solana-transaction-status", "thiserror", @@ -5620,7 +5620,7 @@ dependencies = [ [[package]] name = "solana-storage-proto" -version = "1.14.12" +version = "1.14.13" dependencies = [ "bincode", "bs58", @@ -5628,14 +5628,14 @@ dependencies = [ "protobuf-src", "serde", "solana-account-decoder", - "solana-sdk 1.14.12", + "solana-sdk 1.14.13", "solana-transaction-status", "tonic-build 0.8.0", ] [[package]] name = "solana-streamer" -version = "1.14.12" +version = "1.14.13" dependencies = [ "crossbeam-channel", "futures-util", @@ -5654,7 +5654,7 @@ dependencies = [ "rustls 0.20.6", "solana-metrics", "solana-perf", - "solana-sdk 1.14.12", + "solana-sdk 1.14.13", "thiserror", "tokio", "x509-parser", @@ -5662,13 +5662,13 @@ dependencies = [ [[package]] name = "solana-sys-tuner" -version = "1.14.12" +version = "1.14.13" dependencies = [ "clap 2.33.3", "libc", "log", "nix", - "solana-logger 1.14.12", + "solana-logger 1.14.13", "solana-version", "sysctl", "unix_socket2", @@ -5677,7 +5677,7 @@ dependencies = [ [[package]] name = "solana-test-validator" -version = "1.14.12" +version = "1.14.13" dependencies = [ "base64 0.13.0", "log", @@ -5688,20 +5688,20 @@ dependencies = [ "solana-core", "solana-gossip", "solana-ledger", - "solana-logger 1.14.12", + "solana-logger 1.14.13", "solana-net-utils", "solana-program-runtime", "solana-program-test", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.12", + "solana-sdk 1.14.13", "solana-streamer", "tokio", ] [[package]] name = "solana-transaction-status" -version = "1.14.12" +version = "1.14.13" dependencies = [ "Inflector", "base64 0.13.0", @@ -5717,7 +5717,7 @@ dependencies = [ "solana-address-lookup-table-program", "solana-measure", "solana-metrics", - "solana-sdk 1.14.12", + "solana-sdk 1.14.13", "solana-vote-program", "spl-associated-token-account", "spl-memo", @@ -5728,7 +5728,7 @@ dependencies = [ [[package]] name = "solana-validator" -version = "1.14.12" +version = "1.14.13" dependencies = [ "chrono", "clap 2.33.3", @@ -5759,14 +5759,14 @@ dependencies = [ "solana-genesis-utils", "solana-gossip", "solana-ledger", - "solana-logger 1.14.12", + "solana-logger 1.14.13", "solana-metrics", "solana-net-utils", "solana-perf", "solana-poh", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.12", + "solana-sdk 1.14.13", "solana-send-transaction-service", "solana-storage-bigtable", "solana-streamer", @@ -5779,21 +5779,21 @@ dependencies = [ [[package]] name = "solana-version" -version = "1.14.12" +version = "1.14.13" dependencies = [ "log", "rustc_version", "semver", "serde", "serde_derive", - "solana-frozen-abi 1.14.12", - "solana-frozen-abi-macro 1.14.12", - "solana-sdk 1.14.12", + "solana-frozen-abi 1.14.13", + "solana-frozen-abi-macro 1.14.13", + "solana-sdk 1.14.13", ] [[package]] name = "solana-vote-program" -version = "1.14.12" +version = "1.14.13" dependencies = [ "bincode", "log", @@ -5802,25 +5802,25 @@ dependencies = [ "rustc_version", "serde", "serde_derive", - "solana-frozen-abi 1.14.12", - "solana-frozen-abi-macro 1.14.12", + "solana-frozen-abi 1.14.13", + "solana-frozen-abi-macro 1.14.13", "solana-metrics", "solana-program-runtime", - "solana-sdk 1.14.12", + "solana-sdk 1.14.13", "thiserror", ] [[package]] name = "solana-zk-token-proof-program" -version = "1.14.12" +version = "1.14.13" dependencies = [ "bytemuck", "getrandom 0.1.14", "num-derive", "num-traits", "solana-program-runtime", - "solana-sdk 1.14.12", - "solana-zk-token-sdk 1.14.12", + "solana-sdk 1.14.13", + "solana-zk-token-sdk 1.14.13", ] [[package]] @@ -5856,7 +5856,7 @@ dependencies = [ [[package]] name = "solana-zk-token-sdk" -version = "1.14.12" +version = "1.14.13" dependencies = [ "aes-gcm-siv", "arrayref", @@ -5876,8 +5876,8 @@ dependencies = [ "serde", "serde_json", "sha3 0.9.1", - "solana-program 1.14.12", - "solana-sdk 1.14.12", + "solana-program 1.14.13", + "solana-sdk 1.14.13", "subtle", "thiserror", "zeroize", diff --git a/programs/bpf/Cargo.toml b/programs/bpf/Cargo.toml index f59e5781da7553..7b971fd4277ecc 100644 --- a/programs/bpf/Cargo.toml +++ b/programs/bpf/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "solana-bpf-programs" description = "Blockchain, Rebuilt for Scale" -version = "1.14.12" +version = "1.14.13" documentation = "https://docs.rs/solana" homepage = "https://solana.com/" readme = "README.md" @@ -26,22 +26,22 @@ itertools = "0.10.1" log = "0.4.11" miow = "0.3.6" net2 = "0.2.37" -solana-account-decoder = { path = "../../account-decoder", version = "=1.14.12" } -solana-bpf-loader-program = { path = "../bpf_loader", version = "=1.14.12" } -solana-bpf-rust-invoke = { path = "rust/invoke", version = "=1.14.12" } -solana-bpf-rust-realloc = { path = "rust/realloc", version = "=1.14.12" } -solana-bpf-rust-realloc-invoke = { path = "rust/realloc_invoke", version = "=1.14.12" } -solana-cli-output = { path = "../../cli-output", version = "=1.14.12" } -solana-logger = { path = "../../logger", version = "=1.14.12" } -solana-measure = { path = "../../measure", version = "=1.14.12" } -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.12" } -solana-runtime = { path = "../../runtime", version = "=1.14.12" } -solana-sdk = { path = "../../sdk", version = "=1.14.12" } -solana-transaction-status = { path = "../../transaction-status", version = "=1.14.12" } +solana-account-decoder = { path = "../../account-decoder", version = "=1.14.13" } +solana-bpf-loader-program = { path = "../bpf_loader", version = "=1.14.13" } +solana-bpf-rust-invoke = { path = "rust/invoke", version = "=1.14.13" } +solana-bpf-rust-realloc = { path = "rust/realloc", version = "=1.14.13" } +solana-bpf-rust-realloc-invoke = { path = "rust/realloc_invoke", version = "=1.14.13" } +solana-cli-output = { path = "../../cli-output", version = "=1.14.13" } +solana-logger = { path = "../../logger", version = "=1.14.13" } +solana-measure = { path = "../../measure", version = "=1.14.13" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.13" } +solana-runtime = { path = "../../runtime", version = "=1.14.13" } +solana-sdk = { path = "../../sdk", version = "=1.14.13" } +solana-transaction-status = { path = "../../transaction-status", version = "=1.14.13" } solana_rbpf = "=0.2.31" [dev-dependencies] -solana-ledger = { path = "../../ledger", version = "=1.14.12" } +solana-ledger = { path = "../../ledger", version = "=1.14.13" } [[bench]] name = "bpf_loader" diff --git a/programs/bpf/rust/128bit/Cargo.toml b/programs/bpf/rust/128bit/Cargo.toml index 678c053ce0f28c..9f07a8fed6c409 100644 --- a/programs/bpf/rust/128bit/Cargo.toml +++ b/programs/bpf/rust/128bit/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-128bit" -version = "1.14.12" +version = "1.14.13" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ documentation = "https://docs.rs/solana-bpf-rust-128bit" edition = "2021" [dependencies] -solana-bpf-rust-128bit-dep = { path = "../128bit_dep", version = "=1.14.12" } -solana-program = { path = "../../../../sdk/program", version = "=1.14.12" } +solana-bpf-rust-128bit-dep = { path = "../128bit_dep", version = "=1.14.13" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.13" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/128bit_dep/Cargo.toml b/programs/bpf/rust/128bit_dep/Cargo.toml index 5a1bd776736b6e..2ca2505a0bec84 100644 --- a/programs/bpf/rust/128bit_dep/Cargo.toml +++ b/programs/bpf/rust/128bit_dep/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-128bit-dep" -version = "1.14.12" +version = "1.14.13" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-128bit-dep" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.12" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.13" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/bpf/rust/alloc/Cargo.toml b/programs/bpf/rust/alloc/Cargo.toml index 5d3c467f5917c4..6982836d66f0b0 100644 --- a/programs/bpf/rust/alloc/Cargo.toml +++ b/programs/bpf/rust/alloc/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-alloc" -version = "1.14.12" +version = "1.14.13" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-alloc" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.12" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.13" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/call_depth/Cargo.toml b/programs/bpf/rust/call_depth/Cargo.toml index 4d8da936b8cb91..bf8b75f9bd42b9 100644 --- a/programs/bpf/rust/call_depth/Cargo.toml +++ b/programs/bpf/rust/call_depth/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-call-depth" -version = "1.14.12" +version = "1.14.13" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-call-depth" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.12" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.13" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/caller_access/Cargo.toml b/programs/bpf/rust/caller_access/Cargo.toml index bc7a6f290cc668..c14737cf9479d8 100644 --- a/programs/bpf/rust/caller_access/Cargo.toml +++ b/programs/bpf/rust/caller_access/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-caller-access" -version = "1.14.12" +version = "1.14.13" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-caller-access" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.12" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.13" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/curve25519/Cargo.toml b/programs/bpf/rust/curve25519/Cargo.toml index 55a62c655d93ff..78533eaef7093e 100644 --- a/programs/bpf/rust/curve25519/Cargo.toml +++ b/programs/bpf/rust/curve25519/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-curve25519" -version = "1.14.12" +version = "1.14.13" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ documentation = "https://docs.rs/solana-bpf-rust-zktoken_crypto" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.12" } -solana-zk-token-sdk = { path = "../../../../zk-token-sdk", version = "=1.14.12" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.13" } +solana-zk-token-sdk = { path = "../../../../zk-token-sdk", version = "=1.14.13" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/custom_heap/Cargo.toml b/programs/bpf/rust/custom_heap/Cargo.toml index 37ab411ff1dea0..189f61b5e45ba7 100644 --- a/programs/bpf/rust/custom_heap/Cargo.toml +++ b/programs/bpf/rust/custom_heap/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-custom-heap" -version = "1.14.12" +version = "1.14.13" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-custom-heap" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.12" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.13" } [features] default = ["custom-heap"] diff --git a/programs/bpf/rust/dep_crate/Cargo.toml b/programs/bpf/rust/dep_crate/Cargo.toml index 37c8a1ad7d8e76..e005096f9cda08 100644 --- a/programs/bpf/rust/dep_crate/Cargo.toml +++ b/programs/bpf/rust/dep_crate/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-dep-crate" -version = "1.14.12" +version = "1.14.13" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,8 +12,8 @@ edition = "2021" [dependencies] byteorder = { version = "1", default-features = false } # list of crates which must be buildable for bpf programs -solana-address-lookup-table-program = { path = "../../../../programs/address-lookup-table", version = "=1.14.12" } -solana-program = { path = "../../../../sdk/program", version = "=1.14.12" } +solana-address-lookup-table-program = { path = "../../../../programs/address-lookup-table", version = "=1.14.13" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.13" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/deprecated_loader/Cargo.toml b/programs/bpf/rust/deprecated_loader/Cargo.toml index 9f427a2cc5165c..077f50339c8626 100644 --- a/programs/bpf/rust/deprecated_loader/Cargo.toml +++ b/programs/bpf/rust/deprecated_loader/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-deprecated-loader" -version = "1.14.12" +version = "1.14.13" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-deprecated-loader" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.12" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.13" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/dup_accounts/Cargo.toml b/programs/bpf/rust/dup_accounts/Cargo.toml index 1f84a5e7ebc737..c8c37a70fcf800 100644 --- a/programs/bpf/rust/dup_accounts/Cargo.toml +++ b/programs/bpf/rust/dup_accounts/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-dup-accounts" -version = "1.14.12" +version = "1.14.13" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-dup-accounts" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.12" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.13" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/error_handling/Cargo.toml b/programs/bpf/rust/error_handling/Cargo.toml index f8d71ce852bddd..03e1ba71bb6b0a 100644 --- a/programs/bpf/rust/error_handling/Cargo.toml +++ b/programs/bpf/rust/error_handling/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-error-handling" -version = "1.14.12" +version = "1.14.13" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,7 +12,7 @@ edition = "2021" [dependencies] num-derive = "0.3" num-traits = "0.2" -solana-program = { path = "../../../../sdk/program", version = "=1.14.12" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.13" } thiserror = "1.0" [lib] diff --git a/programs/bpf/rust/external_spend/Cargo.toml b/programs/bpf/rust/external_spend/Cargo.toml index 9220559b13237b..86b9435eb33de9 100644 --- a/programs/bpf/rust/external_spend/Cargo.toml +++ b/programs/bpf/rust/external_spend/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-external-spend" -version = "1.14.12" +version = "1.14.13" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-external-spend" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.12" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.13" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/finalize/Cargo.toml b/programs/bpf/rust/finalize/Cargo.toml index 10d22758f9cebc..989867f1a3fb78 100644 --- a/programs/bpf/rust/finalize/Cargo.toml +++ b/programs/bpf/rust/finalize/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-finalize" -version = "1.14.12" +version = "1.14.13" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-finalize" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.12" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.13" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/get_minimum_delegation/Cargo.toml b/programs/bpf/rust/get_minimum_delegation/Cargo.toml index a0cb2299ff1844..f19b5e209fb493 100644 --- a/programs/bpf/rust/get_minimum_delegation/Cargo.toml +++ b/programs/bpf/rust/get_minimum_delegation/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-get-minimum-delegation" -version = "1.14.12" +version = "1.14.13" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-get-minimum-delegation" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.12" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.13" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/inner_instruction_alignment_check/Cargo.toml b/programs/bpf/rust/inner_instruction_alignment_check/Cargo.toml index c7acb81c140edf..bba4f2dfae3970 100644 --- a/programs/bpf/rust/inner_instruction_alignment_check/Cargo.toml +++ b/programs/bpf/rust/inner_instruction_alignment_check/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-inner_instruction_alignment_check" -version = "1.14.12" +version = "1.14.13" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-inner_instruction_alignment_che edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.12" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.13" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/instruction_introspection/Cargo.toml b/programs/bpf/rust/instruction_introspection/Cargo.toml index 49bd458f1f8419..0a62290527d252 100644 --- a/programs/bpf/rust/instruction_introspection/Cargo.toml +++ b/programs/bpf/rust/instruction_introspection/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-instruction-introspection" -version = "1.14.12" +version = "1.14.13" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-instruction-introspection" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.12" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.13" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/invoke/Cargo.toml b/programs/bpf/rust/invoke/Cargo.toml index 51d1d0cc5b651f..d6dccafef8f779 100644 --- a/programs/bpf/rust/invoke/Cargo.toml +++ b/programs/bpf/rust/invoke/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-invoke" -version = "1.14.12" +version = "1.14.13" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -15,7 +15,7 @@ program = [] [dependencies] solana-bpf-rust-invoked = { path = "../invoked", default-features = false } -solana-program = { path = "../../../../sdk/program", version = "=1.14.12" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.13" } [lib] crate-type = ["lib", "cdylib"] diff --git a/programs/bpf/rust/invoke_and_error/Cargo.toml b/programs/bpf/rust/invoke_and_error/Cargo.toml index 3ebafa4c470840..121a6d60a8e590 100644 --- a/programs/bpf/rust/invoke_and_error/Cargo.toml +++ b/programs/bpf/rust/invoke_and_error/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-invoke-and-error" -version = "1.14.12" +version = "1.14.13" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-invoke-and-error" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.12" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.13" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/invoke_and_ok/Cargo.toml b/programs/bpf/rust/invoke_and_ok/Cargo.toml index aa5b28c59c2817..04197c7690ccfb 100644 --- a/programs/bpf/rust/invoke_and_ok/Cargo.toml +++ b/programs/bpf/rust/invoke_and_ok/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-invoke-and-ok" -version = "1.14.12" +version = "1.14.13" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-invoke-and-ok" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.12" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.13" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/invoke_and_return/Cargo.toml b/programs/bpf/rust/invoke_and_return/Cargo.toml index dcab191111585f..4d3920ce7131f2 100644 --- a/programs/bpf/rust/invoke_and_return/Cargo.toml +++ b/programs/bpf/rust/invoke_and_return/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-invoke-and-return" -version = "1.14.12" +version = "1.14.13" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-invoke-and-return" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.12" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.13" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/invoked/Cargo.toml b/programs/bpf/rust/invoked/Cargo.toml index 9e4879d37ef9f2..7efdeba4b674ac 100644 --- a/programs/bpf/rust/invoked/Cargo.toml +++ b/programs/bpf/rust/invoked/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-invoked" -version = "1.14.12" +version = "1.14.13" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,7 +14,7 @@ default = ["program"] program = [] [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.12" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.13" } [lib] crate-type = ["lib", "cdylib"] diff --git a/programs/bpf/rust/iter/Cargo.toml b/programs/bpf/rust/iter/Cargo.toml index d03ac8207f01e3..ce3b5dbd2a83df 100644 --- a/programs/bpf/rust/iter/Cargo.toml +++ b/programs/bpf/rust/iter/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-iter" -version = "1.14.12" +version = "1.14.13" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-iter" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.12" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.13" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/log_data/Cargo.toml b/programs/bpf/rust/log_data/Cargo.toml index b32ad86e2936e9..a7c61a506065db 100644 --- a/programs/bpf/rust/log_data/Cargo.toml +++ b/programs/bpf/rust/log_data/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-log-data" -version = "1.14.12" +version = "1.14.13" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-log-data" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.12" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.13" } [features] default = ["program"] diff --git a/programs/bpf/rust/many_args/Cargo.toml b/programs/bpf/rust/many_args/Cargo.toml index e42e4a3036cc0a..1dab5786029146 100644 --- a/programs/bpf/rust/many_args/Cargo.toml +++ b/programs/bpf/rust/many_args/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-many-args" -version = "1.14.12" +version = "1.14.13" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ documentation = "https://docs.rs/solana-bpf-rust-many-args" edition = "2021" [dependencies] -solana-bpf-rust-many-args-dep = { path = "../many_args_dep", version = "=1.14.12" } -solana-program = { path = "../../../../sdk/program", version = "=1.14.12" } +solana-bpf-rust-many-args-dep = { path = "../many_args_dep", version = "=1.14.13" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.13" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/many_args_dep/Cargo.toml b/programs/bpf/rust/many_args_dep/Cargo.toml index ac82ad576d4195..0aad89417f83f5 100644 --- a/programs/bpf/rust/many_args_dep/Cargo.toml +++ b/programs/bpf/rust/many_args_dep/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-many-args-dep" -version = "1.14.12" +version = "1.14.13" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-many-args-dep" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.12" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.13" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/bpf/rust/mem/Cargo.toml b/programs/bpf/rust/mem/Cargo.toml index 50325552b89c33..89df4610ded386 100644 --- a/programs/bpf/rust/mem/Cargo.toml +++ b/programs/bpf/rust/mem/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-mem" -version = "1.14.12" +version = "1.14.13" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,12 +13,12 @@ edition = "2021" no-entrypoint = [] [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.12" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.13" } [dev-dependencies] -solana-program-runtime = { path = "../../../../program-runtime", version = "=1.14.12" } -solana-program-test = { path = "../../../../program-test", version = "=1.14.12" } -solana-sdk = { path = "../../../../sdk", version = "=1.14.12" } +solana-program-runtime = { path = "../../../../program-runtime", version = "=1.14.13" } +solana-program-test = { path = "../../../../program-test", version = "=1.14.13" } +solana-sdk = { path = "../../../../sdk", version = "=1.14.13" } [lib] crate-type = ["cdylib", "lib"] diff --git a/programs/bpf/rust/membuiltins/Cargo.toml b/programs/bpf/rust/membuiltins/Cargo.toml index da479459eba4c3..88dce8f89e8b00 100644 --- a/programs/bpf/rust/membuiltins/Cargo.toml +++ b/programs/bpf/rust/membuiltins/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-membuiltins" -version = "1.14.12" +version = "1.14.13" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ documentation = "https://docs.rs/solana-bpf-rust-mem" edition = "2021" [dependencies] -solana-bpf-rust-mem = { path = "../mem", version = "=1.14.12", features = [ "no-entrypoint" ] } -solana-program = { path = "../../../../sdk/program", version = "=1.14.12" } +solana-bpf-rust-mem = { path = "../mem", version = "=1.14.13", features = [ "no-entrypoint" ] } +solana-program = { path = "../../../../sdk/program", version = "=1.14.13" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/noop/Cargo.toml b/programs/bpf/rust/noop/Cargo.toml index c2aaa64266d089..f57dc559b859c7 100644 --- a/programs/bpf/rust/noop/Cargo.toml +++ b/programs/bpf/rust/noop/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-noop" -version = "1.14.12" +version = "1.14.13" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-noop" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.12" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.13" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/panic/Cargo.toml b/programs/bpf/rust/panic/Cargo.toml index 8db7840d84bdab..865f39e2f07e7d 100644 --- a/programs/bpf/rust/panic/Cargo.toml +++ b/programs/bpf/rust/panic/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-panic" -version = "1.14.12" +version = "1.14.13" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-panic" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.12" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.13" } [features] default = ["custom-panic"] diff --git a/programs/bpf/rust/param_passing/Cargo.toml b/programs/bpf/rust/param_passing/Cargo.toml index 8cf87800f2e648..27ebf02e9110bc 100644 --- a/programs/bpf/rust/param_passing/Cargo.toml +++ b/programs/bpf/rust/param_passing/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-param-passing" -version = "1.14.12" +version = "1.14.13" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ documentation = "https://docs.rs/solana-bpf-rust-param-passing" edition = "2021" [dependencies] -solana-bpf-rust-param-passing-dep = { path = "../param_passing_dep", version = "=1.14.12" } -solana-program = { path = "../../../../sdk/program", version = "=1.14.12" } +solana-bpf-rust-param-passing-dep = { path = "../param_passing_dep", version = "=1.14.13" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.13" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/param_passing_dep/Cargo.toml b/programs/bpf/rust/param_passing_dep/Cargo.toml index bd2afa03346395..467111b3638862 100644 --- a/programs/bpf/rust/param_passing_dep/Cargo.toml +++ b/programs/bpf/rust/param_passing_dep/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-param-passing-dep" -version = "1.14.12" +version = "1.14.13" description = "Solana BPF program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-param-passing-dep" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.12" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.13" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/bpf/rust/rand/Cargo.toml b/programs/bpf/rust/rand/Cargo.toml index 51bab91590faf2..e41fb7a7bf70f4 100644 --- a/programs/bpf/rust/rand/Cargo.toml +++ b/programs/bpf/rust/rand/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-rand" -version = "1.14.12" +version = "1.14.13" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,7 +12,7 @@ edition = "2021" [dependencies] getrandom = { version = "0.1.14", features = ["dummy"] } rand = "0.7" -solana-program = { path = "../../../../sdk/program", version = "=1.14.12" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.13" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/realloc/Cargo.toml b/programs/bpf/rust/realloc/Cargo.toml index 2da7b82a22f4a7..438876eb558f70 100644 --- a/programs/bpf/rust/realloc/Cargo.toml +++ b/programs/bpf/rust/realloc/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-realloc" -version = "1.14.12" +version = "1.14.13" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,7 +14,7 @@ default = ["program"] program = [] [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.12" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.13" } [lib] crate-type = ["lib", "cdylib"] diff --git a/programs/bpf/rust/realloc_invoke/Cargo.toml b/programs/bpf/rust/realloc_invoke/Cargo.toml index 8d4dfe6b6120b7..3ca0b565d2c6a3 100644 --- a/programs/bpf/rust/realloc_invoke/Cargo.toml +++ b/programs/bpf/rust/realloc_invoke/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-realloc-invoke" -version = "1.14.12" +version = "1.14.13" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,8 +14,8 @@ default = ["program"] program = [] [dependencies] -solana-bpf-rust-realloc = { path = "../realloc", version = "=1.14.12", default-features = false } -solana-program = { path = "../../../../sdk/program", version = "=1.14.12" } +solana-bpf-rust-realloc = { path = "../realloc", version = "=1.14.13", default-features = false } +solana-program = { path = "../../../../sdk/program", version = "=1.14.13" } [lib] crate-type = ["lib", "cdylib"] diff --git a/programs/bpf/rust/ro_account_modify/Cargo.toml b/programs/bpf/rust/ro_account_modify/Cargo.toml index b59fdc0115a064..bc152dec6c6d90 100644 --- a/programs/bpf/rust/ro_account_modify/Cargo.toml +++ b/programs/bpf/rust/ro_account_modify/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-ro-account_modify" -version = "1.14.12" +version = "1.14.13" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-ro-modify" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.12" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.13" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/ro_modify/Cargo.toml b/programs/bpf/rust/ro_modify/Cargo.toml index 26dfc73268c6e9..256dfbfc59e1a4 100644 --- a/programs/bpf/rust/ro_modify/Cargo.toml +++ b/programs/bpf/rust/ro_modify/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-ro-modify" -version = "1.14.12" +version = "1.14.13" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-ro-modify" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.12" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.13" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/sanity/Cargo.toml b/programs/bpf/rust/sanity/Cargo.toml index 07fd557cb5ec2f..cbaeda89bc5f73 100644 --- a/programs/bpf/rust/sanity/Cargo.toml +++ b/programs/bpf/rust/sanity/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-sanity" -version = "1.14.12" +version = "1.14.13" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,12 +13,12 @@ edition = "2021" test-bpf = [] [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.12" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.13" } [dev-dependencies] -solana-program-runtime = { path = "../../../../program-runtime", version = "=1.14.12" } -solana-program-test = { path = "../../../../program-test", version = "=1.14.12" } -solana-sdk = { path = "../../../../sdk", version = "=1.14.12" } +solana-program-runtime = { path = "../../../../program-runtime", version = "=1.14.13" } +solana-program-test = { path = "../../../../program-test", version = "=1.14.13" } +solana-sdk = { path = "../../../../sdk", version = "=1.14.13" } [lib] crate-type = ["cdylib", "lib"] diff --git a/programs/bpf/rust/secp256k1_recover/Cargo.toml b/programs/bpf/rust/secp256k1_recover/Cargo.toml index 603cce4f030d77..e30d2c95abc03a 100644 --- a/programs/bpf/rust/secp256k1_recover/Cargo.toml +++ b/programs/bpf/rust/secp256k1_recover/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-secp256k1-recover" -version = "1.14.12" +version = "1.14.13" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -11,7 +11,7 @@ edition = "2021" [dependencies] libsecp256k1 = { version = "0.7.0", default-features = false } -solana-program = { path = "../../../../sdk/program", version = "=1.14.12" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.13" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/sha/Cargo.toml b/programs/bpf/rust/sha/Cargo.toml index 502950c342256c..b3be0b6d99927b 100644 --- a/programs/bpf/rust/sha/Cargo.toml +++ b/programs/bpf/rust/sha/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-sha" -version = "1.14.12" +version = "1.14.13" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -11,7 +11,7 @@ edition = "2021" [dependencies] blake3 = "1.0.0" -solana-program = { path = "../../../../sdk/program", version = "=1.14.12" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.13" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/sibling_inner_instruction/Cargo.toml b/programs/bpf/rust/sibling_inner_instruction/Cargo.toml index 48d77068289a02..4a7e9805359778 100644 --- a/programs/bpf/rust/sibling_inner_instruction/Cargo.toml +++ b/programs/bpf/rust/sibling_inner_instruction/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-sibling_inner-instructions" -version = "1.14.12" +version = "1.14.13" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-log-data" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.12" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.13" } [features] default = ["program"] diff --git a/programs/bpf/rust/sibling_instruction/Cargo.toml b/programs/bpf/rust/sibling_instruction/Cargo.toml index 7f8ad24136e680..01f5e39609a231 100644 --- a/programs/bpf/rust/sibling_instruction/Cargo.toml +++ b/programs/bpf/rust/sibling_instruction/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-sibling-instructions" -version = "1.14.12" +version = "1.14.13" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-log-data" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.12" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.13" } [features] default = ["program"] diff --git a/programs/bpf/rust/simulation/Cargo.toml b/programs/bpf/rust/simulation/Cargo.toml index 04470e23bd7d44..653ddf7303b55f 100644 --- a/programs/bpf/rust/simulation/Cargo.toml +++ b/programs/bpf/rust/simulation/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-simulation" -version = "1.14.12" +version = "1.14.13" description = "Solana BPF Program Simulation Differences" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,13 +13,13 @@ edition = "2021" test-bpf = [] [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.12" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.13" } [dev-dependencies] -solana-logger = { path = "../../../../logger", version = "=1.14.12" } -solana-program-test = { path = "../../../../program-test", version = "=1.14.12" } -solana-sdk = { path = "../../../../sdk", version = "=1.14.12" } -solana-validator = { path = "../../../../validator", version = "=1.14.12" } +solana-logger = { path = "../../../../logger", version = "=1.14.13" } +solana-program-test = { path = "../../../../program-test", version = "=1.14.13" } +solana-sdk = { path = "../../../../sdk", version = "=1.14.13" } +solana-validator = { path = "../../../../validator", version = "=1.14.13" } [lib] crate-type = ["cdylib", "lib"] diff --git a/programs/bpf/rust/spoof1/Cargo.toml b/programs/bpf/rust/spoof1/Cargo.toml index 9335c584a32455..c1473910f706c4 100644 --- a/programs/bpf/rust/spoof1/Cargo.toml +++ b/programs/bpf/rust/spoof1/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-spoof1" -version = "1.14.12" +version = "1.14.13" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-spoof1" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.12" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.13" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/spoof1_system/Cargo.toml b/programs/bpf/rust/spoof1_system/Cargo.toml index bbea7d034baefa..08c9dcc3735a44 100644 --- a/programs/bpf/rust/spoof1_system/Cargo.toml +++ b/programs/bpf/rust/spoof1_system/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-spoof1-system" -version = "1.14.12" +version = "1.14.13" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-spoof1-system" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.12" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.13" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/sysvar/Cargo.toml b/programs/bpf/rust/sysvar/Cargo.toml index e28e2d43fa45a1..077923f0b4cbde 100644 --- a/programs/bpf/rust/sysvar/Cargo.toml +++ b/programs/bpf/rust/sysvar/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-sysvar" -version = "1.14.12" +version = "1.14.13" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,12 +10,12 @@ documentation = "https://docs.rs/solana-bpf-rust-sysvar" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.12" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.13" } [dev-dependencies] -solana-program-runtime = { path = "../../../../program-runtime", version = "=1.14.12" } -solana-program-test = { path = "../../../../program-test", version = "=1.14.12" } -solana-sdk = { path = "../../../../sdk", version = "=1.14.12" } +solana-program-runtime = { path = "../../../../program-runtime", version = "=1.14.13" } +solana-program-test = { path = "../../../../program-test", version = "=1.14.13" } +solana-sdk = { path = "../../../../sdk", version = "=1.14.13" } [lib] crate-type = ["cdylib", "lib"] diff --git a/programs/bpf/rust/upgradeable/Cargo.toml b/programs/bpf/rust/upgradeable/Cargo.toml index f057705d7d728e..f0700b8c1e2e75 100644 --- a/programs/bpf/rust/upgradeable/Cargo.toml +++ b/programs/bpf/rust/upgradeable/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-upgradeable" -version = "1.14.12" +version = "1.14.13" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-upgradeable" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.12" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.13" } [lib] name = "solana_bpf_rust_upgradeable" diff --git a/programs/bpf/rust/upgraded/Cargo.toml b/programs/bpf/rust/upgraded/Cargo.toml index 64029c3a332712..a18a3d5e496899 100644 --- a/programs/bpf/rust/upgraded/Cargo.toml +++ b/programs/bpf/rust/upgraded/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-upgraded" -version = "1.14.12" +version = "1.14.13" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-upgraded" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.12" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.13" } [lib] name = "solana_bpf_rust_upgraded" diff --git a/programs/bpf_loader/Cargo.toml b/programs/bpf_loader/Cargo.toml index 6bc7d1bdde39a7..78a5c461092273 100644 --- a/programs/bpf_loader/Cargo.toml +++ b/programs/bpf_loader/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-loader-program" -version = "1.14.12" +version = "1.14.13" description = "Solana BPF loader" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,17 +14,17 @@ bincode = "1.3.3" byteorder = "1.4.3" libsecp256k1 = "0.6.0" log = "0.4.17" -solana-measure = { path = "../../measure", version = "=1.14.12" } -solana-metrics = { path = "../../metrics", version = "=1.14.12" } -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.12" } -solana-sdk = { path = "../../sdk", version = "=1.14.12" } -solana-zk-token-sdk = { path = "../../zk-token-sdk", version = "=1.14.12" } +solana-measure = { path = "../../measure", version = "=1.14.13" } +solana-metrics = { path = "../../metrics", version = "=1.14.13" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.13" } +solana-sdk = { path = "../../sdk", version = "=1.14.13" } +solana-zk-token-sdk = { path = "../../zk-token-sdk", version = "=1.14.13" } solana_rbpf = "=0.2.31" thiserror = "1.0" [dev-dependencies] rand = "0.7.3" -solana-runtime = { path = "../../runtime", version = "=1.14.12" } +solana-runtime = { path = "../../runtime", version = "=1.14.13" } [lib] crate-type = ["lib"] diff --git a/programs/bpf_loader/gen-syscall-list/Cargo.toml b/programs/bpf_loader/gen-syscall-list/Cargo.toml index ad4a420b053cb0..a834c6ed66f87c 100644 --- a/programs/bpf_loader/gen-syscall-list/Cargo.toml +++ b/programs/bpf_loader/gen-syscall-list/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "gen-syscall-list" -version = "1.14.12" +version = "1.14.13" edition = "2021" license = "Apache-2.0" publish = false diff --git a/programs/compute-budget/Cargo.toml b/programs/compute-budget/Cargo.toml index cf25d4662cd6b8..dd3ee15902d58d 100644 --- a/programs/compute-budget/Cargo.toml +++ b/programs/compute-budget/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "solana-compute-budget-program" description = "Solana Compute Budget program" -version = "1.14.12" +version = "1.14.13" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-compute-budget-program" repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ license = "Apache-2.0" edition = "2021" [dependencies] -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.12" } -solana-sdk = { path = "../../sdk", version = "=1.14.12" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.13" } +solana-sdk = { path = "../../sdk", version = "=1.14.13" } [lib] crate-type = ["lib"] diff --git a/programs/config/Cargo.toml b/programs/config/Cargo.toml index 4028ac9c159cb1..b7f38c60289102 100644 --- a/programs/config/Cargo.toml +++ b/programs/config/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-config-program" -version = "1.14.12" +version = "1.14.13" description = "Solana Config program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,11 +14,11 @@ bincode = "1.3.3" chrono = { version = "0.4.11", features = ["serde"] } serde = "1.0.138" serde_derive = "1.0.103" -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.12" } -solana-sdk = { path = "../../sdk", version = "=1.14.12" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.13" } +solana-sdk = { path = "../../sdk", version = "=1.14.13" } [dev-dependencies] -solana-logger = { path = "../../logger", version = "=1.14.12" } +solana-logger = { path = "../../logger", version = "=1.14.13" } [lib] crate-type = ["lib"] diff --git a/programs/ed25519-tests/Cargo.toml b/programs/ed25519-tests/Cargo.toml index 97395113cd3f21..ea3be15ba40bb7 100644 --- a/programs/ed25519-tests/Cargo.toml +++ b/programs/ed25519-tests/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-ed25519-program-tests" -version = "1.14.12" +version = "1.14.13" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" @@ -12,8 +12,8 @@ publish = false assert_matches = "1.5.0" ed25519-dalek = "=1.0.1" rand = "0.7.0" -solana-program-test = { path = "../../program-test", version = "=1.14.12" } -solana-sdk = { path = "../../sdk", version = "=1.14.12" } +solana-program-test = { path = "../../program-test", version = "=1.14.13" } +solana-sdk = { path = "../../sdk", version = "=1.14.13" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/stake/Cargo.toml b/programs/stake/Cargo.toml index 7a0d54cfa2734a..e041d3afa126ba 100644 --- a/programs/stake/Cargo.toml +++ b/programs/stake/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-stake-program" -version = "1.14.12" +version = "1.14.13" description = "Solana Stake program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -16,19 +16,19 @@ num-derive = "0.3" num-traits = "0.2" serde = "1.0.138" serde_derive = "1.0.103" -solana-config-program = { path = "../config", version = "=1.14.12" } -solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.12" } -solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.12" } -solana-metrics = { path = "../../metrics", version = "=1.14.12" } -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.12" } -solana-sdk = { path = "../../sdk", version = "=1.14.12" } -solana-vote-program = { path = "../vote", version = "=1.14.12" } +solana-config-program = { path = "../config", version = "=1.14.13" } +solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.13" } +solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.13" } +solana-metrics = { path = "../../metrics", version = "=1.14.13" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.13" } +solana-sdk = { path = "../../sdk", version = "=1.14.13" } +solana-vote-program = { path = "../vote", version = "=1.14.13" } thiserror = "1.0" [dev-dependencies] assert_matches = "1.5.0" proptest = "1.0" -solana-logger = { path = "../../logger", version = "=1.14.12" } +solana-logger = { path = "../../logger", version = "=1.14.13" } test-case = "2.1.0" [build-dependencies] diff --git a/programs/vote/Cargo.toml b/programs/vote/Cargo.toml index 96b0b6e52c691c..68a30c2dc40885 100644 --- a/programs/vote/Cargo.toml +++ b/programs/vote/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-vote-program" -version = "1.14.12" +version = "1.14.13" description = "Solana Vote program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -16,17 +16,17 @@ num-derive = "0.3" num-traits = "0.2" serde = "1.0.138" serde_derive = "1.0.103" -solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.12" } -solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.12" } -solana-metrics = { path = "../../metrics", version = "=1.14.12" } -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.12" } -solana-sdk = { path = "../../sdk", version = "=1.14.12" } +solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.13" } +solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.13" } +solana-metrics = { path = "../../metrics", version = "=1.14.13" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.13" } +solana-sdk = { path = "../../sdk", version = "=1.14.13" } thiserror = "1.0" [dev-dependencies] itertools = "0.10.3" rand = "0.7.0" -solana-logger = { path = "../../logger", version = "=1.14.12" } +solana-logger = { path = "../../logger", version = "=1.14.13" } test-case = "2.1.0" [build-dependencies] diff --git a/programs/zk-token-proof/Cargo.toml b/programs/zk-token-proof/Cargo.toml index 86d95def2bebb6..a94014d7b655a9 100644 --- a/programs/zk-token-proof/Cargo.toml +++ b/programs/zk-token-proof/Cargo.toml @@ -3,7 +3,7 @@ name = "solana-zk-token-proof-program" description = "Solana Zk Token Proof Program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" -version = "1.14.12" +version = "1.14.13" license = "Apache-2.0" edition = "2021" @@ -12,6 +12,6 @@ bytemuck = { version = "1.11.0", features = ["derive"] } getrandom = { version = "0.1", features = ["dummy"] } num-derive = "0.3" num-traits = "0.2" -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.12" } -solana-sdk = { path = "../../sdk", version = "=1.14.12" } -solana-zk-token-sdk = { path = "../../zk-token-sdk", version = "=1.14.12" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.13" } +solana-sdk = { path = "../../sdk", version = "=1.14.13" } +solana-zk-token-sdk = { path = "../../zk-token-sdk", version = "=1.14.13" } diff --git a/rayon-threadlimit/Cargo.toml b/rayon-threadlimit/Cargo.toml index cb7517f1eb64c5..608ed8e6040658 100644 --- a/rayon-threadlimit/Cargo.toml +++ b/rayon-threadlimit/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-rayon-threadlimit" -version = "1.14.12" +version = "1.14.13" description = "solana-rayon-threadlimit" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-rayon-threadlimit" diff --git a/rbpf-cli/Cargo.toml b/rbpf-cli/Cargo.toml index 1bdde544fa2439..5ed7e2ea433c62 100644 --- a/rbpf-cli/Cargo.toml +++ b/rbpf-cli/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "rbpf-cli" -version = "1.14.12" +version = "1.14.13" description = "CLI to test and analyze eBPF programs" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/rbpf" @@ -13,8 +13,8 @@ publish = false clap = { version = "3.1.5", features = ["cargo"] } serde = "1.0.138" serde_json = "1.0.81" -solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.12" } -solana-logger = { path = "../logger", version = "=1.14.12" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.12" } -solana-sdk = { path = "../sdk", version = "=1.14.12" } +solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.13" } +solana-logger = { path = "../logger", version = "=1.14.13" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.13" } +solana-sdk = { path = "../sdk", version = "=1.14.13" } solana_rbpf = "=0.2.31" diff --git a/remote-wallet/Cargo.toml b/remote-wallet/Cargo.toml index 365a05d2da2597..ca44b45568bd8b 100644 --- a/remote-wallet/Cargo.toml +++ b/remote-wallet/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-remote-wallet" description = "Blockchain, Rebuilt for Scale" -version = "1.14.12" +version = "1.14.13" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -19,7 +19,7 @@ num-traits = { version = "0.2" } parking_lot = "0.12" qstring = "0.7.2" semver = "1.0" -solana-sdk = { path = "../sdk", version = "=1.14.12" } +solana-sdk = { path = "../sdk", version = "=1.14.13" } thiserror = "1.0" uriparse = "0.6.4" diff --git a/rpc-test/Cargo.toml b/rpc-test/Cargo.toml index fda12f0bd91c61..250917c6972880 100644 --- a/rpc-test/Cargo.toml +++ b/rpc-test/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-rpc-test" -version = "1.14.12" +version = "1.14.13" description = "Solana RPC Test" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -19,17 +19,17 @@ log = "0.4.17" reqwest = { version = "0.11.11", default-features = false, features = ["blocking", "brotli", "deflate", "gzip", "rustls-tls", "json"] } serde = "1.0.138" serde_json = "1.0.81" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.12" } -solana-client = { path = "../client", version = "=1.14.12" } -solana-rpc = { path = "../rpc", version = "=1.14.12" } -solana-sdk = { path = "../sdk", version = "=1.14.12" } -solana-streamer = { path = "../streamer", version = "=1.14.12" } -solana-test-validator = { path = "../test-validator", version = "=1.14.12" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.12" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.13" } +solana-client = { path = "../client", version = "=1.14.13" } +solana-rpc = { path = "../rpc", version = "=1.14.13" } +solana-sdk = { path = "../sdk", version = "=1.14.13" } +solana-streamer = { path = "../streamer", version = "=1.14.13" } +solana-test-validator = { path = "../test-validator", version = "=1.14.13" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.13" } tokio = { version = "~1.14.1", features = ["full"] } [dev-dependencies] -solana-logger = { path = "../logger", version = "=1.14.12" } +solana-logger = { path = "../logger", version = "=1.14.13" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/rpc/Cargo.toml b/rpc/Cargo.toml index 76c46351ec043c..4e2741a7de6a31 100644 --- a/rpc/Cargo.toml +++ b/rpc/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-rpc" -version = "1.14.12" +version = "1.14.13" description = "Solana RPC" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -29,26 +29,26 @@ serde = "1.0.138" serde_derive = "1.0.103" serde_json = "1.0.81" soketto = "0.7" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.12" } -solana-client = { path = "../client", version = "=1.14.12" } -solana-entry = { path = "../entry", version = "=1.14.12" } -solana-faucet = { path = "../faucet", version = "=1.14.12" } -solana-gossip = { path = "../gossip", version = "=1.14.12" } -solana-ledger = { path = "../ledger", version = "=1.14.12" } -solana-measure = { path = "../measure", version = "=1.14.12" } -solana-metrics = { path = "../metrics", version = "=1.14.12" } -solana-perf = { path = "../perf", version = "=1.14.12" } -solana-poh = { path = "../poh", version = "=1.14.12" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.12" } -solana-runtime = { path = "../runtime", version = "=1.14.12" } -solana-sdk = { path = "../sdk", version = "=1.14.12" } -solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.12" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.12" } -solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.12" } -solana-streamer = { path = "../streamer", version = "=1.14.12" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.12" } -solana-version = { path = "../version", version = "=1.14.12" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.12" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.13" } +solana-client = { path = "../client", version = "=1.14.13" } +solana-entry = { path = "../entry", version = "=1.14.13" } +solana-faucet = { path = "../faucet", version = "=1.14.13" } +solana-gossip = { path = "../gossip", version = "=1.14.13" } +solana-ledger = { path = "../ledger", version = "=1.14.13" } +solana-measure = { path = "../measure", version = "=1.14.13" } +solana-metrics = { path = "../metrics", version = "=1.14.13" } +solana-perf = { path = "../perf", version = "=1.14.13" } +solana-poh = { path = "../poh", version = "=1.14.13" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.13" } +solana-runtime = { path = "../runtime", version = "=1.14.13" } +solana-sdk = { path = "../sdk", version = "=1.14.13" } +solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.13" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.13" } +solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.13" } +solana-streamer = { path = "../streamer", version = "=1.14.13" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.13" } +solana-version = { path = "../version", version = "=1.14.13" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.13" } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } spl-token-2022 = { version = "=0.5.0", features = ["no-entrypoint"] } stream-cancel = "0.8.1" @@ -58,9 +58,9 @@ tokio-util = { version = "0.6", features = ["codec", "compat"] } [dev-dependencies] serial_test = "0.8.0" -solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.12" } -solana-net-utils = { path = "../net-utils", version = "=1.14.12" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.12" } +solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.13" } +solana-net-utils = { path = "../net-utils", version = "=1.14.13" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.13" } symlink = "0.1.0" [lib] diff --git a/runtime/Cargo.toml b/runtime/Cargo.toml index 0437f0e99ec108..1eecf5a4a08089 100644 --- a/runtime/Cargo.toml +++ b/runtime/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-runtime" -version = "1.14.12" +version = "1.14.13" description = "Solana runtime" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -40,21 +40,21 @@ rayon = "1.5.3" regex = "1.5.6" serde = { version = "1.0.138", features = ["rc"] } serde_derive = "1.0.103" -solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.12" } -solana-bucket-map = { path = "../bucket_map", version = "=1.14.12" } -solana-compute-budget-program = { path = "../programs/compute-budget", version = "=1.14.12" } -solana-config-program = { path = "../programs/config", version = "=1.14.12" } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.12" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.12" } -solana-measure = { path = "../measure", version = "=1.14.12" } -solana-metrics = { path = "../metrics", version = "=1.14.12" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.12" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.12" } -solana-sdk = { path = "../sdk", version = "=1.14.12" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.12" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.12" } -solana-zk-token-proof-program = { path = "../programs/zk-token-proof", version = "=1.14.12" } -solana-zk-token-sdk = { path = "../zk-token-sdk", version = "=1.14.12" } +solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.13" } +solana-bucket-map = { path = "../bucket_map", version = "=1.14.13" } +solana-compute-budget-program = { path = "../programs/compute-budget", version = "=1.14.13" } +solana-config-program = { path = "../programs/config", version = "=1.14.13" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.13" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.13" } +solana-measure = { path = "../measure", version = "=1.14.13" } +solana-metrics = { path = "../metrics", version = "=1.14.13" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.13" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.13" } +solana-sdk = { path = "../sdk", version = "=1.14.13" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.13" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.13" } +solana-zk-token-proof-program = { path = "../programs/zk-token-proof", version = "=1.14.13" } +solana-zk-token-sdk = { path = "../zk-token-sdk", version = "=1.14.13" } strum = { version = "0.24", features = ["derive"] } strum_macros = "0.24" symlink = "0.1.0" @@ -72,7 +72,7 @@ assert_matches = "1.5.0" ed25519-dalek = "=1.0.1" libsecp256k1 = "0.6.0" rand_chacha = "0.2.2" -solana-logger = { path = "../logger", version = "=1.14.12" } +solana-logger = { path = "../logger", version = "=1.14.13" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/runtime/store-tool/Cargo.toml b/runtime/store-tool/Cargo.toml index 21153fa54b9e39..90a7bbc9edd487 100644 --- a/runtime/store-tool/Cargo.toml +++ b/runtime/store-tool/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-store-tool" description = "Tool to inspect append vecs" -version = "1.14.12" +version = "1.14.13" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -12,9 +12,9 @@ publish = false [dependencies] clap = "2.33.1" log = { version = "0.4.17" } -solana-logger = { path = "../../logger", version = "=1.14.12" } -solana-runtime = { path = "..", version = "=1.14.12" } -solana-version = { path = "../../version", version = "=1.14.12" } +solana-logger = { path = "../../logger", version = "=1.14.13" } +solana-runtime = { path = "..", version = "=1.14.13" } +solana-version = { path = "../../version", version = "=1.14.13" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/sdk/Cargo.toml b/sdk/Cargo.toml index 3a317095d6aff7..811b1aeab9ab7d 100644 --- a/sdk/Cargo.toml +++ b/sdk/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-sdk" -version = "1.14.12" +version = "1.14.13" description = "Solana SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -71,11 +71,11 @@ serde_derive = "1.0.103" serde_json = { version = "1.0.81", optional = true } sha2 = "0.10.2" sha3 = { version = "0.10.1", optional = true } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.12" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.12" } -solana-logger = { path = "../logger", version = "=1.14.12", optional = true } -solana-program = { path = "program", version = "=1.14.12" } -solana-sdk-macro = { path = "macro", version = "=1.14.12" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.13" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.13" } +solana-logger = { path = "../logger", version = "=1.14.13", optional = true } +solana-program = { path = "program", version = "=1.14.13" } +solana-sdk-macro = { path = "macro", version = "=1.14.13" } thiserror = "1.0" uriparse = "0.6.4" wasm-bindgen = "0.2" diff --git a/sdk/cargo-build-bpf/Cargo.toml b/sdk/cargo-build-bpf/Cargo.toml index 3449eec9918276..bc892464c02ab2 100644 --- a/sdk/cargo-build-bpf/Cargo.toml +++ b/sdk/cargo-build-bpf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-cargo-build-bpf" -version = "1.14.12" +version = "1.14.13" description = "Compile a local package and all of its dependencies using the Solana SBF SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,7 +12,7 @@ publish = false [dependencies] cargo_metadata = "0.15.0" clap = { version = "3.1.5", features = ["cargo", "env"] } -solana-sdk = { path = "..", version = "=1.14.12" } +solana-sdk = { path = "..", version = "=1.14.13" } [features] program = [] diff --git a/sdk/cargo-build-sbf/Cargo.toml b/sdk/cargo-build-sbf/Cargo.toml index 8ee0b782f462f0..7dd60417c6f08e 100644 --- a/sdk/cargo-build-sbf/Cargo.toml +++ b/sdk/cargo-build-sbf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-cargo-build-sbf" -version = "1.14.12" +version = "1.14.13" description = "Compile a local package and all of its dependencies using the Solana SBF SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -15,9 +15,9 @@ cargo_metadata = "0.15.0" clap = { version = "3.1.5", features = ["cargo", "env"] } log = { version = "0.4.14", features = ["std"] } regex = "1.5.6" -solana-download-utils = { path = "../../download-utils", version = "=1.14.12" } -solana-logger = { path = "../../logger", version = "=1.14.12" } -solana-sdk = { path = "..", version = "=1.14.12" } +solana-download-utils = { path = "../../download-utils", version = "=1.14.13" } +solana-logger = { path = "../../logger", version = "=1.14.13" } +solana-sdk = { path = "..", version = "=1.14.13" } tar = "0.4.38" [dev-dependencies] diff --git a/sdk/cargo-build-sbf/tests/crates/fail/Cargo.toml b/sdk/cargo-build-sbf/tests/crates/fail/Cargo.toml index 4666af56268f5e..d0261bf887c3de 100644 --- a/sdk/cargo-build-sbf/tests/crates/fail/Cargo.toml +++ b/sdk/cargo-build-sbf/tests/crates/fail/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "fail" -version = "1.14.12" +version = "1.14.13" description = "Solana SBF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ edition = "2021" publish = false [dependencies] -solana-program = { path = "../../../../program", version = "=1.14.12" } +solana-program = { path = "../../../../program", version = "=1.14.13" } [lib] crate-type = ["cdylib"] diff --git a/sdk/cargo-build-sbf/tests/crates/noop/Cargo.toml b/sdk/cargo-build-sbf/tests/crates/noop/Cargo.toml index 610d57f66b8bf4..6d21657d36f332 100644 --- a/sdk/cargo-build-sbf/tests/crates/noop/Cargo.toml +++ b/sdk/cargo-build-sbf/tests/crates/noop/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "noop" -version = "1.14.12" +version = "1.14.13" description = "Solana SBF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ edition = "2021" publish = false [dependencies] -solana-program = { path = "../../../../program", version = "=1.14.12" } +solana-program = { path = "../../../../program", version = "=1.14.13" } [lib] crate-type = ["cdylib"] diff --git a/sdk/cargo-test-bpf/Cargo.toml b/sdk/cargo-test-bpf/Cargo.toml index aa2131d9cdbbfc..6a40728362cc40 100644 --- a/sdk/cargo-test-bpf/Cargo.toml +++ b/sdk/cargo-test-bpf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-cargo-test-bpf" -version = "1.14.12" +version = "1.14.13" description = "Execute all unit and integration tests after building with the Solana SBF SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/sdk/cargo-test-sbf/Cargo.toml b/sdk/cargo-test-sbf/Cargo.toml index 3d1565a261fa39..d1cbc62f9d7613 100644 --- a/sdk/cargo-test-sbf/Cargo.toml +++ b/sdk/cargo-test-sbf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-cargo-test-sbf" -version = "1.14.12" +version = "1.14.13" description = "Execute all unit and integration tests after building with the Solana SBF SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/sdk/gen-headers/Cargo.toml b/sdk/gen-headers/Cargo.toml index ba8b1237a901f7..cadbd5ef626c6f 100644 --- a/sdk/gen-headers/Cargo.toml +++ b/sdk/gen-headers/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "gen-headers" -version = "1.14.12" +version = "1.14.13" edition = "2021" license = "Apache-2.0" publish = false diff --git a/sdk/macro/Cargo.toml b/sdk/macro/Cargo.toml index e912471722ff03..826e451846946f 100644 --- a/sdk/macro/Cargo.toml +++ b/sdk/macro/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-sdk-macro" -version = "1.14.12" +version = "1.14.13" description = "Solana SDK Macro" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/sdk/program/Cargo.toml b/sdk/program/Cargo.toml index ff5d3c4ba48551..4343e9281ff479 100644 --- a/sdk/program/Cargo.toml +++ b/sdk/program/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-program" -version = "1.14.12" +version = "1.14.13" description = "Solana Program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -31,9 +31,9 @@ serde_derive = "1.0" serde_json = "1.0" sha2 = "0.10.0" sha3 = "0.10.0" -solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.12" } -solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.12" } -solana-sdk-macro = { path = "../macro", version = "=1.14.12" } +solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.13" } +solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.13" } +solana-sdk-macro = { path = "../macro", version = "=1.14.13" } thiserror = "1.0" [target.'cfg(not(target_os = "solana"))'.dependencies] @@ -50,7 +50,7 @@ wasm-bindgen = "0.2" zeroize = { version = "1.3", default-features = true, features = ["zeroize_derive"] } [target.'cfg(not(target_os = "solana"))'.dev-dependencies] -solana-logger = { path = "../../logger", version = "=1.14.12" } +solana-logger = { path = "../../logger", version = "=1.14.13" } [target.'cfg(target_arch = "wasm32")'.dependencies] console_error_panic_hook = "0.1.7" diff --git a/send-transaction-service/Cargo.toml b/send-transaction-service/Cargo.toml index 216007825492c9..662dadad845175 100644 --- a/send-transaction-service/Cargo.toml +++ b/send-transaction-service/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-send-transaction-service" -version = "1.14.12" +version = "1.14.13" description = "Solana send transaction service" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,14 +12,14 @@ edition = "2021" [dependencies] crossbeam-channel = "0.5" log = "0.4.17" -solana-client = { path = "../client", version = "=1.14.12" } -solana-measure = { path = "../measure", version = "=1.14.12" } -solana-metrics = { path = "../metrics", version = "=1.14.12" } -solana-runtime = { path = "../runtime", version = "=1.14.12" } -solana-sdk = { path = "../sdk", version = "=1.14.12" } +solana-client = { path = "../client", version = "=1.14.13" } +solana-measure = { path = "../measure", version = "=1.14.13" } +solana-metrics = { path = "../metrics", version = "=1.14.13" } +solana-runtime = { path = "../runtime", version = "=1.14.13" } +solana-sdk = { path = "../sdk", version = "=1.14.13" } [dev-dependencies] -solana-logger = { path = "../logger", version = "=1.14.12" } +solana-logger = { path = "../logger", version = "=1.14.13" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/stake-accounts/Cargo.toml b/stake-accounts/Cargo.toml index 6931c2d54f8429..e25935c1449ad1 100644 --- a/stake-accounts/Cargo.toml +++ b/stake-accounts/Cargo.toml @@ -3,7 +3,7 @@ name = "solana-stake-accounts" description = "Blockchain, Rebuilt for Scale" authors = ["Solana Maintainers "] edition = "2021" -version = "1.14.12" +version = "1.14.13" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -11,15 +11,15 @@ documentation = "https://docs.rs/solana-stake-accounts" [dependencies] clap = "2.33.1" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.12" } -solana-cli-config = { path = "../cli-config", version = "=1.14.12" } -solana-client = { path = "../client", version = "=1.14.12" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.12" } -solana-sdk = { path = "../sdk", version = "=1.14.12" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.12" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.13" } +solana-cli-config = { path = "../cli-config", version = "=1.14.13" } +solana-client = { path = "../client", version = "=1.14.13" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.13" } +solana-sdk = { path = "../sdk", version = "=1.14.13" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.13" } [dev-dependencies] -solana-runtime = { path = "../runtime", version = "=1.14.12" } +solana-runtime = { path = "../runtime", version = "=1.14.13" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/storage-bigtable/Cargo.toml b/storage-bigtable/Cargo.toml index 11c7cbb296665f..14608514e898c6 100644 --- a/storage-bigtable/Cargo.toml +++ b/storage-bigtable/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-storage-bigtable" -version = "1.14.12" +version = "1.14.13" description = "Solana Storage BigTable" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -27,10 +27,10 @@ prost-types = "0.11.0" serde = "1.0.138" serde_derive = "1.0.103" smpl_jwt = "0.7.1" -solana-metrics = { path = "../metrics", version = "=1.14.12" } -solana-sdk = { path = "../sdk", version = "=1.14.12" } -solana-storage-proto = { path = "../storage-proto", version = "=1.14.12" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.12" } +solana-metrics = { path = "../metrics", version = "=1.14.13" } +solana-sdk = { path = "../sdk", version = "=1.14.13" } +solana-storage-proto = { path = "../storage-proto", version = "=1.14.13" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.13" } thiserror = "1.0" tokio = "1" tonic = { version = "0.8.0", features = ["tls", "transport"] } diff --git a/storage-bigtable/build-proto/Cargo.lock b/storage-bigtable/build-proto/Cargo.lock index ebfc26270b8c1c..8d67036593631d 100644 --- a/storage-bigtable/build-proto/Cargo.lock +++ b/storage-bigtable/build-proto/Cargo.lock @@ -219,7 +219,7 @@ dependencies = [ [[package]] name = "proto" -version = "1.14.12" +version = "1.14.13" dependencies = [ "protobuf-src", "tonic-build", diff --git a/storage-bigtable/build-proto/Cargo.toml b/storage-bigtable/build-proto/Cargo.toml index e61719af6206cd..acdd964dbcf7d9 100644 --- a/storage-bigtable/build-proto/Cargo.toml +++ b/storage-bigtable/build-proto/Cargo.toml @@ -7,7 +7,7 @@ license = "Apache-2.0" name = "proto" publish = false repository = "https://github.com/solana-labs/solana" -version = "1.14.12" +version = "1.14.13" [workspace] diff --git a/storage-proto/Cargo.toml b/storage-proto/Cargo.toml index 764a89d7a2bf70..e589501a45cadf 100644 --- a/storage-proto/Cargo.toml +++ b/storage-proto/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-storage-proto" -version = "1.14.12" +version = "1.14.13" description = "Solana Storage Protobuf Definitions" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,9 +14,9 @@ bincode = "1.3.3" bs58 = "0.4.0" prost = "0.11.0" serde = "1.0.138" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.12" } -solana-sdk = { path = "../sdk", version = "=1.14.12" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.12" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.13" } +solana-sdk = { path = "../sdk", version = "=1.14.13" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.13" } [dev-dependencies] enum-iterator = "0.8.1" diff --git a/streamer/Cargo.toml b/streamer/Cargo.toml index 07ca7c20de987c..158db723705676 100644 --- a/streamer/Cargo.toml +++ b/streamer/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-streamer" -version = "1.14.12" +version = "1.14.13" description = "Solana Streamer" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -25,15 +25,15 @@ quinn = "0.8.3" rand = "0.7.0" rcgen = "0.9.2" rustls = { version = "0.20.6", features = ["dangerous_configuration"] } -solana-metrics = { path = "../metrics", version = "=1.14.12" } -solana-perf = { path = "../perf", version = "=1.14.12" } -solana-sdk = { path = "../sdk", version = "=1.14.12" } +solana-metrics = { path = "../metrics", version = "=1.14.13" } +solana-perf = { path = "../perf", version = "=1.14.13" } +solana-sdk = { path = "../sdk", version = "=1.14.13" } thiserror = "1.0" tokio = { version = "1", features = ["full"] } x509-parser = "0.14.0" [dev-dependencies] -solana-logger = { path = "../logger", version = "=1.14.12" } +solana-logger = { path = "../logger", version = "=1.14.13" } [lib] crate-type = ["lib"] diff --git a/sys-tuner/Cargo.toml b/sys-tuner/Cargo.toml index 83ea4c3b98321c..080f7aa5da8882 100644 --- a/sys-tuner/Cargo.toml +++ b/sys-tuner/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-sys-tuner" description = "The solana cluster system tuner daemon" -version = "1.14.12" +version = "1.14.13" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,8 +14,8 @@ publish = true clap = "2.33.1" libc = "0.2.126" log = "0.4.17" -solana-logger = { path = "../logger", version = "=1.14.12" } -solana-version = { path = "../version", version = "=1.14.12" } +solana-logger = { path = "../logger", version = "=1.14.13" } +solana-version = { path = "../version", version = "=1.14.13" } [target."cfg(unix)".dependencies] unix_socket2 = "0.5.4" diff --git a/test-validator/Cargo.toml b/test-validator/Cargo.toml index f2df6ec18bfd03..66ba9031d0542c 100644 --- a/test-validator/Cargo.toml +++ b/test-validator/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "solana-test-validator" description = "Blockchain, Rebuilt for Scale" -version = "1.14.12" +version = "1.14.13" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-test-validator" readme = "../README.md" @@ -15,19 +15,19 @@ base64 = "0.13.0" log = "0.4.17" serde_derive = "1.0.103" serde_json = "1.0.81" -solana-cli-output = { path = "../cli-output", version = "=1.14.12" } -solana-client = { path = "../client", version = "=1.14.12" } -solana-core = { path = "../core", version = "=1.14.12" } -solana-gossip = { path = "../gossip", version = "=1.14.12" } -solana-ledger = { path = "../ledger", version = "=1.14.12" } -solana-logger = { path = "../logger", version = "=1.14.12" } -solana-net-utils = { path = "../net-utils", version = "=1.14.12" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.12" } -solana-program-test = { path = "../program-test", version = "=1.14.12" } -solana-rpc = { path = "../rpc", version = "=1.14.12" } -solana-runtime = { path = "../runtime", version = "=1.14.12" } -solana-sdk = { path = "../sdk", version = "=1.14.12" } -solana-streamer = { path = "../streamer", version = "=1.14.12" } +solana-cli-output = { path = "../cli-output", version = "=1.14.13" } +solana-client = { path = "../client", version = "=1.14.13" } +solana-core = { path = "../core", version = "=1.14.13" } +solana-gossip = { path = "../gossip", version = "=1.14.13" } +solana-ledger = { path = "../ledger", version = "=1.14.13" } +solana-logger = { path = "../logger", version = "=1.14.13" } +solana-net-utils = { path = "../net-utils", version = "=1.14.13" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.13" } +solana-program-test = { path = "../program-test", version = "=1.14.13" } +solana-rpc = { path = "../rpc", version = "=1.14.13" } +solana-runtime = { path = "../runtime", version = "=1.14.13" } +solana-sdk = { path = "../sdk", version = "=1.14.13" } +solana-streamer = { path = "../streamer", version = "=1.14.13" } tokio = { version = "1", features = ["full"] } [package.metadata.docs.rs] diff --git a/tokens/Cargo.toml b/tokens/Cargo.toml index e64f4315d13cfe..afae4999967b5a 100644 --- a/tokens/Cargo.toml +++ b/tokens/Cargo.toml @@ -3,7 +3,7 @@ name = "solana-tokens" description = "Blockchain, Rebuilt for Scale" authors = ["Solana Maintainers "] edition = "2021" -version = "1.14.12" +version = "1.14.13" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -19,14 +19,14 @@ indexmap = "1.9.1" indicatif = "0.16.2" pickledb = "0.4.1" serde = { version = "1.0", features = ["derive"] } -solana-account-decoder = { path = "../account-decoder", version = "=1.14.12" } -solana-clap-utils = { path = "../clap-utils", version = "=1.14.12" } -solana-cli-config = { path = "../cli-config", version = "=1.14.12" } -solana-client = { path = "../client", version = "=1.14.12" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.12" } -solana-sdk = { path = "../sdk", version = "=1.14.12" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.12" } -solana-version = { path = "../version", version = "=1.14.12" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.13" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.13" } +solana-cli-config = { path = "../cli-config", version = "=1.14.13" } +solana-client = { path = "../client", version = "=1.14.13" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.13" } +solana-sdk = { path = "../sdk", version = "=1.14.13" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.13" } +solana-version = { path = "../version", version = "=1.14.13" } spl-associated-token-account = { version = "=1.1.2" } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } tempfile = "3.3.0" @@ -34,6 +34,6 @@ thiserror = "1.0" [dev-dependencies] bincode = "1.3.3" -solana-logger = { path = "../logger", version = "=1.14.12" } -solana-streamer = { path = "../streamer", version = "=1.14.12" } -solana-test-validator = { path = "../test-validator", version = "=1.14.12" } +solana-logger = { path = "../logger", version = "=1.14.13" } +solana-streamer = { path = "../streamer", version = "=1.14.13" } +solana-test-validator = { path = "../test-validator", version = "=1.14.13" } diff --git a/transaction-dos/Cargo.toml b/transaction-dos/Cargo.toml index 9b1b900118e45a..25c89ec4725830 100644 --- a/transaction-dos/Cargo.toml +++ b/transaction-dos/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-transaction-dos" -version = "1.14.12" +version = "1.14.13" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,23 +14,23 @@ clap = "2.33.1" log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.12" } -solana-cli = { path = "../cli", version = "=1.14.12" } -solana-client = { path = "../client", version = "=1.14.12" } -solana-core = { path = "../core", version = "=1.14.12" } -solana-faucet = { path = "../faucet", version = "=1.14.12" } -solana-gossip = { path = "../gossip", version = "=1.14.12" } -solana-logger = { path = "../logger", version = "=1.14.12" } -solana-measure = { path = "../measure", version = "=1.14.12" } -solana-net-utils = { path = "../net-utils", version = "=1.14.12" } -solana-runtime = { path = "../runtime", version = "=1.14.12" } -solana-sdk = { path = "../sdk", version = "=1.14.12" } -solana-streamer = { path = "../streamer", version = "=1.14.12" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.12" } -solana-version = { path = "../version", version = "=1.14.12" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.13" } +solana-cli = { path = "../cli", version = "=1.14.13" } +solana-client = { path = "../client", version = "=1.14.13" } +solana-core = { path = "../core", version = "=1.14.13" } +solana-faucet = { path = "../faucet", version = "=1.14.13" } +solana-gossip = { path = "../gossip", version = "=1.14.13" } +solana-logger = { path = "../logger", version = "=1.14.13" } +solana-measure = { path = "../measure", version = "=1.14.13" } +solana-net-utils = { path = "../net-utils", version = "=1.14.13" } +solana-runtime = { path = "../runtime", version = "=1.14.13" } +solana-sdk = { path = "../sdk", version = "=1.14.13" } +solana-streamer = { path = "../streamer", version = "=1.14.13" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.13" } +solana-version = { path = "../version", version = "=1.14.13" } [dev-dependencies] -solana-local-cluster = { path = "../local-cluster", version = "=1.14.12" } +solana-local-cluster = { path = "../local-cluster", version = "=1.14.13" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/transaction-status/Cargo.toml b/transaction-status/Cargo.toml index 5696609a83b143..63e45872390d48 100644 --- a/transaction-status/Cargo.toml +++ b/transaction-status/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-transaction-status" -version = "1.14.12" +version = "1.14.13" description = "Solana transaction status types" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -20,12 +20,12 @@ log = "0.4.17" serde = "1.0.138" serde_derive = "1.0.103" serde_json = "1.0.81" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.12" } -solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.12" } -solana-measure = { path = "../measure", version = "=1.14.12" } -solana-metrics = { path = "../metrics", version = "=1.14.12" } -solana-sdk = { path = "../sdk", version = "=1.14.12" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.12" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.13" } +solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.13" } +solana-measure = { path = "../measure", version = "=1.14.13" } +solana-metrics = { path = "../metrics", version = "=1.14.13" } +solana-sdk = { path = "../sdk", version = "=1.14.13" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.13" } spl-associated-token-account = { version = "=1.1.2", features = ["no-entrypoint"] } spl-memo = { version = "=3.0.1", features = ["no-entrypoint"] } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } diff --git a/upload-perf/Cargo.toml b/upload-perf/Cargo.toml index cbd533e99bbfaa..92bc64dcbdd1c1 100644 --- a/upload-perf/Cargo.toml +++ b/upload-perf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-upload-perf" -version = "1.14.12" +version = "1.14.13" description = "Metrics Upload Utility" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -11,7 +11,7 @@ publish = false [dependencies] serde_json = "1.0.81" -solana-metrics = { path = "../metrics", version = "=1.14.12" } +solana-metrics = { path = "../metrics", version = "=1.14.13" } [[bin]] name = "solana-upload-perf" diff --git a/validator/Cargo.toml b/validator/Cargo.toml index 0d0634fa6d4831..98ef02eee4ce71 100644 --- a/validator/Cargo.toml +++ b/validator/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-validator" description = "Blockchain, Rebuilt for Scale" -version = "1.14.12" +version = "1.14.13" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -28,30 +28,30 @@ num_cpus = "1.13.1" rand = "0.7.0" serde = "1.0.138" serde_json = "1.0.81" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.12" } -solana-cli-config = { path = "../cli-config", version = "=1.14.12" } -solana-client = { path = "../client", version = "=1.14.12" } -solana-core = { path = "../core", version = "=1.14.12" } -solana-download-utils = { path = "../download-utils", version = "=1.14.12" } -solana-entry = { path = "../entry", version = "=1.14.12" } -solana-faucet = { path = "../faucet", version = "=1.14.12" } -solana-genesis-utils = { path = "../genesis-utils", version = "=1.14.12" } -solana-gossip = { path = "../gossip", version = "=1.14.12" } -solana-ledger = { path = "../ledger", version = "=1.14.12" } -solana-logger = { path = "../logger", version = "=1.14.12" } -solana-metrics = { path = "../metrics", version = "=1.14.12" } -solana-net-utils = { path = "../net-utils", version = "=1.14.12" } -solana-perf = { path = "../perf", version = "=1.14.12" } -solana-poh = { path = "../poh", version = "=1.14.12" } -solana-rpc = { path = "../rpc", version = "=1.14.12" } -solana-runtime = { path = "../runtime", version = "=1.14.12" } -solana-sdk = { path = "../sdk", version = "=1.14.12" } -solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.12" } -solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.12" } -solana-streamer = { path = "../streamer", version = "=1.14.12" } -solana-test-validator = { path = "../test-validator", version = "=1.14.12" } -solana-version = { path = "../version", version = "=1.14.12" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.12" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.13" } +solana-cli-config = { path = "../cli-config", version = "=1.14.13" } +solana-client = { path = "../client", version = "=1.14.13" } +solana-core = { path = "../core", version = "=1.14.13" } +solana-download-utils = { path = "../download-utils", version = "=1.14.13" } +solana-entry = { path = "../entry", version = "=1.14.13" } +solana-faucet = { path = "../faucet", version = "=1.14.13" } +solana-genesis-utils = { path = "../genesis-utils", version = "=1.14.13" } +solana-gossip = { path = "../gossip", version = "=1.14.13" } +solana-ledger = { path = "../ledger", version = "=1.14.13" } +solana-logger = { path = "../logger", version = "=1.14.13" } +solana-metrics = { path = "../metrics", version = "=1.14.13" } +solana-net-utils = { path = "../net-utils", version = "=1.14.13" } +solana-perf = { path = "../perf", version = "=1.14.13" } +solana-poh = { path = "../poh", version = "=1.14.13" } +solana-rpc = { path = "../rpc", version = "=1.14.13" } +solana-runtime = { path = "../runtime", version = "=1.14.13" } +solana-sdk = { path = "../sdk", version = "=1.14.13" } +solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.13" } +solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.13" } +solana-streamer = { path = "../streamer", version = "=1.14.13" } +solana-test-validator = { path = "../test-validator", version = "=1.14.13" } +solana-version = { path = "../version", version = "=1.14.13" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.13" } symlink = "0.1.0" [target.'cfg(not(target_env = "msvc"))'.dependencies] diff --git a/version/Cargo.toml b/version/Cargo.toml index 04506bd1585aef..7ae7cf5599f478 100644 --- a/version/Cargo.toml +++ b/version/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-version" -version = "1.14.12" +version = "1.14.13" description = "Solana Version" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,9 +14,9 @@ log = "0.4.17" semver = "1.0.10" serde = "1.0.138" serde_derive = "1.0.103" -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.12" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.12" } -solana-sdk = { path = "../sdk", version = "=1.14.12" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.13" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.13" } +solana-sdk = { path = "../sdk", version = "=1.14.13" } [lib] name = "solana_version" diff --git a/watchtower/Cargo.toml b/watchtower/Cargo.toml index 2f5cef14f0bbe1..a91a201f017ff3 100644 --- a/watchtower/Cargo.toml +++ b/watchtower/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-watchtower" description = "Blockchain, Rebuilt for Scale" -version = "1.14.12" +version = "1.14.13" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -13,15 +13,15 @@ documentation = "https://docs.rs/solana-watchtower" clap = "2.33.1" humantime = "2.0.1" log = "0.4.17" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.12" } -solana-cli-config = { path = "../cli-config", version = "=1.14.12" } -solana-cli-output = { path = "../cli-output", version = "=1.14.12" } -solana-client = { path = "../client", version = "=1.14.12" } -solana-logger = { path = "../logger", version = "=1.14.12" } -solana-metrics = { path = "../metrics", version = "=1.14.12" } -solana-notifier = { path = "../notifier", version = "=1.14.12" } -solana-sdk = { path = "../sdk", version = "=1.14.12" } -solana-version = { path = "../version", version = "=1.14.12" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.13" } +solana-cli-config = { path = "../cli-config", version = "=1.14.13" } +solana-cli-output = { path = "../cli-output", version = "=1.14.13" } +solana-client = { path = "../client", version = "=1.14.13" } +solana-logger = { path = "../logger", version = "=1.14.13" } +solana-metrics = { path = "../metrics", version = "=1.14.13" } +solana-notifier = { path = "../notifier", version = "=1.14.13" } +solana-sdk = { path = "../sdk", version = "=1.14.13" } +solana-version = { path = "../version", version = "=1.14.13" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/zk-token-sdk/Cargo.toml b/zk-token-sdk/Cargo.toml index 7a25efa4a4fb62..a608341a38aac3 100644 --- a/zk-token-sdk/Cargo.toml +++ b/zk-token-sdk/Cargo.toml @@ -3,7 +3,7 @@ name = "solana-zk-token-sdk" description = "Solana Zk Token SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" -version = "1.14.12" +version = "1.14.13" license = "Apache-2.0" edition = "2021" @@ -12,7 +12,7 @@ base64 = "0.13" bytemuck = { version = "1.11.0", features = ["derive"] } num-derive = "0.3" num-traits = "0.2" -solana-program = { path = "../sdk/program", version = "=1.14.12" } +solana-program = { path = "../sdk/program", version = "=1.14.13" } [target.'cfg(not(target_os = "solana"))'.dependencies] aes-gcm-siv = "0.10.3" @@ -29,7 +29,7 @@ rand = "0.7" serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" sha3 = "0.9" -solana-sdk = { path = "../sdk", version = "=1.14.12" } +solana-sdk = { path = "../sdk", version = "=1.14.13" } subtle = "2" thiserror = "1.0" zeroize = { version = "1.3", default-features = false, features = ["zeroize_derive"] } From fab87b725578bd51cd4515a01cf4e9dd2c3b726c Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Wed, 11 Jan 2023 15:06:43 -0600 Subject: [PATCH 284/465] Feature: filter stake by min delegation for rewards (backport #29618) (#29648) * Feature: filter stake by min delegation for rewards (#29618) filter stake by min delegation for rewards (cherry picked from commit d693167dfb2b6c380cb6db7746dd8cbedce26f25) # Conflicts: # Cargo.lock * fix merge conflicts * downgrade solana-stake-program version Co-authored-by: HaoranYi --- Cargo.lock | 1 + program-test/Cargo.toml | 3 + program-test/tests/warp.rs | 121 ++++++++++++++++++++++++++++++++++++- runtime/src/bank.rs | 43 +++++++++++-- sdk/src/feature_set.rs | 5 ++ 5 files changed, 167 insertions(+), 6 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index d65521bf1726b4..500f45d7a056ef 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -5862,6 +5862,7 @@ dependencies = [ "solana-program-runtime", "solana-runtime", "solana-sdk 1.14.13", + "solana-stake-program", "solana-vote-program", "thiserror", "tokio", diff --git a/program-test/Cargo.toml b/program-test/Cargo.toml index 90c170b9d5057f..36f232fad08932 100644 --- a/program-test/Cargo.toml +++ b/program-test/Cargo.toml @@ -25,3 +25,6 @@ solana-sdk = { path = "../sdk", version = "=1.14.13" } solana-vote-program = { path = "../programs/vote", version = "=1.14.13" } thiserror = "1.0" tokio = { version = "1", features = ["full"] } + +[dev-dependencies] +solana-stake-program = { path = "../programs/stake", version = "=1.14.13" } diff --git a/program-test/tests/warp.rs b/program-test/tests/warp.rs index 6e29fa3ad79aeb..aab7101c6acede 100644 --- a/program-test/tests/warp.rs +++ b/program-test/tests/warp.rs @@ -1,11 +1,13 @@ #![allow(clippy::integer_arithmetic)] use { bincode::deserialize, + log::debug, solana_banks_client::BanksClient, solana_program_test::{ processor, ProgramTest, ProgramTestBanksClientExt, ProgramTestContext, ProgramTestError, }, solana_sdk::{ + account::Account, account_info::{next_account_info, AccountInfo}, clock::Clock, entrypoint::ProgramResult, @@ -26,9 +28,10 @@ use { }, transaction::{Transaction, TransactionError}, }, + solana_stake_program::stake_state, solana_vote_program::{ vote_instruction, - vote_state::{VoteInit, VoteState}, + vote_state::{self, VoteInit, VoteState}, }, std::convert::TryInto, }; @@ -276,6 +279,122 @@ async fn stake_rewards_from_warp() { ); } +#[tokio::test] +async fn stake_rewards_filter_bench_100() { + stake_rewards_filter_bench_core(100).await; +} + +async fn stake_rewards_filter_bench_core(num_stake_accounts: u64) { + // Initialize and start the test network + let mut program_test = ProgramTest::default(); + + // create vote account + let vote_address = Pubkey::new_unique(); + let node_address = Pubkey::new_unique(); + + let vote_account = vote_state::create_account(&vote_address, &node_address, 0, 1_000_000_000); + program_test.add_account(vote_address, vote_account.clone().into()); + + // create stake accounts with 0.9 sol to test min-stake filtering + const TEST_FILTER_STAKE: u64 = 900_000_000; // 0.9 sol + let mut to_filter = vec![]; + for i in 0..num_stake_accounts { + let stake_pubkey = Pubkey::new_unique(); + let stake_account = Account::from(stake_state::create_account( + &stake_pubkey, + &vote_address, + &vote_account, + &Rent::default(), + TEST_FILTER_STAKE, + )); + program_test.add_account(stake_pubkey, stake_account); + to_filter.push(stake_pubkey); + if i % 100 == 0 { + debug!("create stake account {} {}", i, stake_pubkey); + } + } + + let mut context = program_test.start_with_context().await; + + let stake_lamports = 2_000_000_000_000; + + let user_keypair = Keypair::new(); + let stake_address = + setup_stake(&mut context, &user_keypair, &vote_address, stake_lamports).await; + + let account = context + .banks_client + .get_account(stake_address) + .await + .expect("account exists") + .unwrap(); + assert_eq!(account.lamports, stake_lamports); + + // warp one epoch forward for normal inflation, no rewards collected + let first_normal_slot = context.genesis_config().epoch_schedule.first_normal_slot; + context.warp_to_slot(first_normal_slot).unwrap(); + let account = context + .banks_client + .get_account(stake_address) + .await + .expect("account exists") + .unwrap(); + assert_eq!(account.lamports, stake_lamports); + + context.increment_vote_account_credits(&vote_address, 100); + + // go forward and see that rewards have been distributed + let slots_per_epoch = context.genesis_config().epoch_schedule.slots_per_epoch; + context + .warp_to_slot(first_normal_slot + slots_per_epoch) + .unwrap(); + + let account = context + .banks_client + .get_account(stake_address) + .await + .expect("account exists") + .unwrap(); + assert!(account.lamports > stake_lamports); + + // check that filtered stake accounts are excluded from receiving epoch rewards + for stake_address in to_filter { + let account = context + .banks_client + .get_account(stake_address) + .await + .expect("account exists") + .unwrap(); + assert_eq!(account.lamports, TEST_FILTER_STAKE); + } + + // check that stake is fully active + let stake_history_account = context + .banks_client + .get_account(stake_history::id()) + .await + .expect("account exists") + .unwrap(); + + let clock_account = context + .banks_client + .get_account(clock::id()) + .await + .expect("account exists") + .unwrap(); + + let stake_state: StakeState = deserialize(&account.data).unwrap(); + let stake_history: StakeHistory = deserialize(&stake_history_account.data).unwrap(); + let clock: Clock = deserialize(&clock_account.data).unwrap(); + let stake = stake_state.stake().unwrap(); + assert_eq!( + stake + .delegation + .stake_activating_and_deactivating(clock.epoch, Some(&stake_history)), + StakeActivationStatus::with_effective(stake.delegation.stake), + ); +} + async fn check_credits_observed( banks_client: &mut BanksClient, stake_address: Pubkey, diff --git a/runtime/src/bank.rs b/runtime/src/bank.rs index f1a63d1d0b2ba6..2b1a7899a9ce62 100644 --- a/runtime/src/bank.rs +++ b/runtime/src/bank.rs @@ -121,7 +121,7 @@ use { lamports::LamportsError, message::{AccountKeys, SanitizedMessage}, native_loader, - native_token::sol_to_lamports, + native_token::{sol_to_lamports, LAMPORTS_PER_SOL}, nonce::{self, state::DurableNonce, NONCED_TX_MARKER_IX_INDEX}, nonce_account, packet::PACKET_DATA_SIZE, @@ -2520,7 +2520,7 @@ impl Bank { let invalid_cached_vote_accounts = AtomicUsize::default(); let invalid_cached_stake_accounts_rent_epoch = AtomicUsize::default(); - let stake_delegations: Vec<_> = stakes.stake_delegations().iter().collect(); + let stake_delegations = self.filter_stake_delegations(&stakes); thread_pool.install(|| { stake_delegations .into_par_iter() @@ -2660,6 +2660,39 @@ impl Bank { } } + fn filter_stake_delegations<'a>( + &self, + stakes: &'a Stakes>, + ) -> Vec<(&'a Pubkey, &'a StakeAccount)> { + if self + .feature_set + .is_active(&feature_set::stake_minimum_delegation_for_rewards::id()) + { + let num_stake_delegations = stakes.stake_delegations().len(); + let min_stake_delegation = + solana_stake_program::get_minimum_delegation(&self.feature_set) + .max(LAMPORTS_PER_SOL); + + let (stake_delegations, filter_timer) = measure!(stakes + .stake_delegations() + .iter() + .filter(|(_stake_pubkey, cached_stake_account)| { + cached_stake_account.delegation().stake >= min_stake_delegation + }) + .collect::>()); + + datapoint_info!( + "stake_account_filter_time", + ("filter_time_us", filter_timer.as_us(), i64), + ("num_stake_delegations_before", num_stake_delegations, i64), + ("num_stake_delegations_after", stake_delegations.len(), i64) + ); + stake_delegations + } else { + stakes.stake_delegations().iter().collect() + } + } + fn load_vote_and_stake_accounts( &self, thread_pool: &ThreadPool, @@ -2669,7 +2702,8 @@ impl Bank { F: Fn(&RewardCalculationEvent) + Send + Sync, { let stakes = self.stakes_cache.stakes(); - let stake_delegations: Vec<_> = stakes.stake_delegations().iter().collect(); + let stake_delegations = self.filter_stake_delegations(&stakes); + // Obtain all unique voter pubkeys from stake delegations. fn merge(mut acc: HashSet, other: HashSet) -> HashSet { if acc.len() < other.len() { @@ -7816,7 +7850,6 @@ pub(crate) mod tests { hash, instruction::{AccountMeta, CompiledInstruction, Instruction, InstructionError}, message::{Message, MessageHeader}, - native_token::LAMPORTS_PER_SOL, nonce, poh_config::PohConfig, program::MAX_RETURN_DATA, @@ -16389,7 +16422,7 @@ pub(crate) mod tests { let GenesisConfigInfo { genesis_config, .. } = create_genesis_config_with_vote_accounts( 1_000_000_000, &validator_keypairs, - vec![10_000; 2], + vec![LAMPORTS_PER_SOL; 2], ); let bank = Arc::new(Bank::new_for_tests(&genesis_config)); let vote_and_stake_accounts = diff --git a/sdk/src/feature_set.rs b/sdk/src/feature_set.rs index 8214cc5e762c3e..d4aed98fc0873e 100644 --- a/sdk/src/feature_set.rs +++ b/sdk/src/feature_set.rs @@ -400,6 +400,10 @@ pub mod stake_raise_minimum_delegation_to_1_sol { solana_sdk::declare_id!("4xmyBuR2VCXzy9H6qYpH9ckfgnTuMDQFPFBfTs4eBCY1"); } +pub mod stake_minimum_delegation_for_rewards { + solana_sdk::declare_id!("ELjxSXwNsyXGfAh8TqX8ih22xeT8huF6UngQirbLKYKH"); +} + pub mod add_set_compute_unit_price_ix { solana_sdk::declare_id!("98std1NSHqXi9WYvFShfVepRdCoq1qvsp8fsR2XZtG8g"); } @@ -625,6 +629,7 @@ lazy_static! { (stake_allow_zero_undelegated_amount::id(), "Allow zero-lamport undelegated amount for initialized stakes #24670"), (require_static_program_ids_in_transaction::id(), "require static program ids in versioned transactions"), (stake_raise_minimum_delegation_to_1_sol::id(), "Raise minimum stake delegation to 1.0 SOL #24357"), + (stake_minimum_delegation_for_rewards::id(), "stakes must be at least the minimum delegation to earn rewards"), (add_set_compute_unit_price_ix::id(), "add compute budget ix for setting a compute unit price"), (disable_deploy_of_alloc_free_syscall::id(), "disable new deployments of deprecated sol_alloc_free_ syscall"), (include_account_index_in_rent_error::id(), "include account index in rent tx error #25190"), From 7903d946cc3cd127b7206285b8ff50f163d58c4f Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Thu, 12 Jan 2023 13:29:56 -0800 Subject: [PATCH 285/465] Restrict QUIC to use single self signed client cert (backport #29681) (#29684) Restrict QUIC to use single self signed client cert (#29681) (cherry picked from commit 1d0a28c66a31277e1d4cfa4312f5411bae912c3c) Co-authored-by: Pankaj Garg --- streamer/src/tls_certificates.rs | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/streamer/src/tls_certificates.rs b/streamer/src/tls_certificates.rs index 27d3365c885ed4..9e6bf35bc71caa 100644 --- a/streamer/src/tls_certificates.rs +++ b/streamer/src/tls_certificates.rs @@ -57,7 +57,8 @@ pub fn new_self_signed_tls_certificate_chain( } pub fn get_pubkey_from_tls_certificate(certificates: &[rustls::Certificate]) -> Option { - certificates.first().and_then(|der_cert| { + if certificates.len() == 1 { + let der_cert = &certificates[0]; X509Certificate::from_der(der_cert.as_ref()) .ok() .and_then(|(_, cert)| { @@ -66,7 +67,9 @@ pub fn get_pubkey_from_tls_certificate(certificates: &[rustls::Certificate]) -> _ => None, }) }) - }) + } else { + None + } } #[cfg(test)] From cf50d220db3b307077da2d95b9787873bea48c9c Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Thu, 12 Jan 2023 19:13:22 -0600 Subject: [PATCH 286/465] remove dated cost checking feature (backport #29598) (#29657) * remove dated cost checking feature (#29598) (cherry picked from commit 3d63f93bb0346886d0062576f3382bf0e0bc9572) Co-authored-by: Tao Zhu <82401714+taozhu-chicago@users.noreply.github.com> Co-authored-by: Tao Zhu --- ledger/src/blockstore_processor.rs | 102 ++--------------------------- sdk/src/feature_set.rs | 5 -- 2 files changed, 4 insertions(+), 103 deletions(-) diff --git a/ledger/src/blockstore_processor.rs b/ledger/src/blockstore_processor.rs index 0fbf49c7b487bb..633016c294d63d 100644 --- a/ledger/src/blockstore_processor.rs +++ b/ledger/src/blockstore_processor.rs @@ -63,35 +63,6 @@ use { thiserror::Error, }; -// it tracks the block cost available capacity - number of compute-units allowed -// by max block cost limit. -#[derive(Debug)] -pub struct BlockCostCapacityMeter { - pub capacity: u64, - pub accumulated_cost: u64, -} - -impl Default for BlockCostCapacityMeter { - fn default() -> Self { - BlockCostCapacityMeter::new(MAX_BLOCK_UNITS) - } -} - -impl BlockCostCapacityMeter { - pub fn new(capacity_limit: u64) -> Self { - Self { - capacity: capacity_limit, - accumulated_cost: 0_u64, - } - } - - // return the remaining capacity - pub fn accumulate(&mut self, cost: u64) -> u64 { - self.accumulated_cost += cost; - self.capacity.saturating_sub(self.accumulated_cost) - } -} - struct TransactionBatchWithIndexes<'a, 'b> { pub batch: TransactionBatch<'a, 'b>, pub transaction_indexes: Vec, @@ -152,27 +123,12 @@ fn get_first_error( first_err } -fn aggregate_total_execution_units(execute_timings: &ExecuteTimings) -> u64 { - let mut execute_cost_units: u64 = 0; - for (program_id, timing) in &execute_timings.details.per_program_timings { - if timing.count < 1 { - continue; - } - execute_cost_units = - execute_cost_units.saturating_add(timing.accumulated_units / timing.count as u64); - trace!("aggregated execution cost of {:?} {:?}", program_id, timing); - } - execute_cost_units -} - fn execute_batch( batch: &TransactionBatchWithIndexes, bank: &Arc, transaction_status_sender: Option<&TransactionStatusSender>, replay_vote_sender: Option<&ReplayVoteSender>, timings: &mut ExecuteTimings, - cost_capacity_meter: Arc>, - tx_cost: u64, log_messages_bytes_limit: Option, ) -> Result<()> { let TransactionBatchWithIndexes { @@ -189,8 +145,6 @@ fn execute_batch( vec![] }; - let pre_process_units: u64 = aggregate_total_execution_units(timings); - let (tx_results, balances) = batch.bank().load_execute_and_commit_transactions( batch, MAX_PROCESSING_AGE, @@ -202,30 +156,6 @@ fn execute_batch( log_messages_bytes_limit, ); - if bank - .feature_set - .is_active(&feature_set::gate_large_block::id()) - { - let execution_cost_units = aggregate_total_execution_units(timings) - pre_process_units; - let remaining_block_cost_cap = cost_capacity_meter - .write() - .unwrap() - .accumulate(execution_cost_units + tx_cost); - - debug!( - "bank {} executed a batch, number of transactions {}, total execute cu {}, total additional cu {}, remaining block cost cap {}", - bank.slot(), - batch.sanitized_transactions().len(), - execution_cost_units, - tx_cost, - remaining_block_cost_cap, - ); - - if remaining_block_cost_cap == 0_u64 { - return Err(TransactionError::WouldExceedMaxBlockCostLimit); - } - } - bank_utils::find_and_send_votes( batch.sanitized_transactions(), &tx_results, @@ -280,8 +210,6 @@ fn execute_batches_internal( entry_callback: Option<&ProcessCallback>, transaction_status_sender: Option<&TransactionStatusSender>, replay_vote_sender: Option<&ReplayVoteSender>, - cost_capacity_meter: Arc>, - tx_costs: &[u64], log_messages_bytes_limit: Option, ) -> Result { inc_new_counter_debug!("bank-par_execute_entries-count", batches.len()); @@ -292,23 +220,18 @@ fn execute_batches_internal( let results: Vec> = PAR_THREAD_POOL.install(|| { batches .into_par_iter() - .enumerate() - .map(|(index, transaction_batch_with_indexes)| { - let transaction_count = transaction_batch_with_indexes - .batch - .sanitized_transactions() - .len() as u64; + .map(|transaction_batch| { + let transaction_count = + transaction_batch.batch.sanitized_transactions().len() as u64; let mut timings = ExecuteTimings::default(); let (result, execute_batches_time): (Result<()>, Measure) = measure!( { let result = execute_batch( - transaction_batch_with_indexes, + transaction_batch, bank, transaction_status_sender, replay_vote_sender, &mut timings, - cost_capacity_meter.clone(), - tx_costs[index], log_messages_bytes_limit, ); if let Some(entry_callback) = entry_callback { @@ -383,7 +306,6 @@ fn execute_batches( transaction_status_sender: Option<&TransactionStatusSender>, replay_vote_sender: Option<&ReplayVoteSender>, confirmation_timing: &mut ConfirmationTiming, - cost_capacity_meter: Arc>, cost_model: &CostModel, log_messages_bytes_limit: Option, ) -> Result<()> { @@ -423,7 +345,6 @@ fn execute_batches( let target_batch_count = get_thread_count() as u64; let mut tx_batches: Vec = vec![]; - let mut tx_batch_costs: Vec = vec![]; let rebatched_txs = if total_cost > target_batch_count.saturating_mul(minimal_tx_cost) { let target_batch_cost = total_cost / target_batch_count; let mut batch_cost: u64 = 0; @@ -447,18 +368,12 @@ fn execute_batches( ); slice_start = next_index; tx_batches.push(tx_batch); - tx_batch_costs.push(batch_cost_without_bpf); batch_cost = 0; batch_cost_without_bpf = 0; } }); &tx_batches[..] } else { - match batches.len() { - // Ensure that the total cost attributed to this batch is essentially correct - 0 => tx_batch_costs = Vec::new(), - n => tx_batch_costs = vec![total_cost_without_bpf / (n as u64); n], - } batches }; @@ -468,8 +383,6 @@ fn execute_batches( entry_callback, transaction_status_sender, replay_vote_sender, - cost_capacity_meter, - &tx_batch_costs, log_messages_bytes_limit, )?; @@ -525,7 +438,6 @@ pub fn process_entries_for_tests( transaction_status_sender, replay_vote_sender, &mut confirmation_timing, - Arc::new(RwLock::new(BlockCostCapacityMeter::default())), None, &_ignored_prioritization_fee_cache, ); @@ -544,7 +456,6 @@ fn process_entries_with_callback( transaction_status_sender: Option<&TransactionStatusSender>, replay_vote_sender: Option<&ReplayVoteSender>, confirmation_timing: &mut ConfirmationTiming, - cost_capacity_meter: Arc>, log_messages_bytes_limit: Option, prioritization_fee_cache: &PrioritizationFeeCache, ) -> Result<()> { @@ -573,7 +484,6 @@ fn process_entries_with_callback( transaction_status_sender, replay_vote_sender, confirmation_timing, - cost_capacity_meter.clone(), &cost_model, log_messages_bytes_limit, )?; @@ -642,7 +552,6 @@ fn process_entries_with_callback( transaction_status_sender, replay_vote_sender, confirmation_timing, - cost_capacity_meter.clone(), &cost_model, log_messages_bytes_limit, )?; @@ -659,7 +568,6 @@ fn process_entries_with_callback( transaction_status_sender, replay_vote_sender, confirmation_timing, - cost_capacity_meter, &cost_model, log_messages_bytes_limit, )?; @@ -1214,7 +1122,6 @@ fn confirm_slot_entries( assert!(entries.is_some()); let mut replay_elapsed = Measure::start("replay_elapsed"); - let cost_capacity_meter = Arc::new(RwLock::new(BlockCostCapacityMeter::default())); let mut replay_entries: Vec<_> = entries .unwrap() .into_iter() @@ -1233,7 +1140,6 @@ fn confirm_slot_entries( transaction_status_sender, replay_vote_sender, timing, - cost_capacity_meter, log_messages_bytes_limit, prioritization_fee_cache, ) diff --git a/sdk/src/feature_set.rs b/sdk/src/feature_set.rs index d4aed98fc0873e..b9ba7ee736a0f9 100644 --- a/sdk/src/feature_set.rs +++ b/sdk/src/feature_set.rs @@ -137,10 +137,6 @@ pub mod stake_merge_with_unmatched_credits_observed { solana_sdk::declare_id!("meRgp4ArRPhD3KtCY9c5yAf2med7mBLsjKTPeVUHqBL"); } -pub mod gate_large_block { - solana_sdk::declare_id!("2ry7ygxiYURULZCrypHhveanvP5tzZ4toRwVp89oCNSj"); -} - pub mod zk_token_sdk_enabled { solana_sdk::declare_id!("zk1snxsc6Fh3wsGNbbHAJNHiJoYgF29mMnTSusGx5EJ"); } @@ -565,7 +561,6 @@ lazy_static! { (merge_nonce_error_into_system_error::id(), "merge NonceError into SystemError"), (disable_fees_sysvar::id(), "disable fees sysvar"), (stake_merge_with_unmatched_credits_observed::id(), "allow merging active stakes with unmatched credits_observed #18985"), - (gate_large_block::id(), "validator checks block cost against max limit in realtime, reject if exceeds."), (zk_token_sdk_enabled::id(), "enable Zk Token proof program and syscalls"), (curve25519_syscall_enabled::id(), "enable curve25519 syscalls"), (versioned_tx_message_enabled::id(), "enable versioned transaction message processing"), From f2e8261b5999347574e96ad75f9e1b1c9b85270f Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Fri, 13 Jan 2023 13:34:54 -0700 Subject: [PATCH 287/465] Update getRecentPrioritizationFees json-rpc docs (backport #29666) (#29671) Update getRecentPrioritizationFees json-rpc docs (#29666) * Update getRecentPrioritizationFees json-rpc docs * Address review feedback * Remove minimum (cherry picked from commit 451fbfee2e3ce0d3579ef8e78dad2f77f3654fea) Co-authored-by: Tyera --- docs/src/developing/clients/jsonrpc-api.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/src/developing/clients/jsonrpc-api.md b/docs/src/developing/clients/jsonrpc-api.md index ae0f4e1daf4d37..c946628a45ff6a 100644 --- a/docs/src/developing/clients/jsonrpc-api.md +++ b/docs/src/developing/clients/jsonrpc-api.md @@ -2117,20 +2117,20 @@ Result: ### getRecentPrioritizationFees -Returns a list of minimum prioritization fees from recent blocks. Currently, a +Returns a list of prioritization fees from recent blocks. Currently, a node's prioritization-fee cache stores data from up to 150 blocks. #### Parameters: -- `` - (optional) An array of account address strings. If this parameter is provided, the response will reflect the minimum prioritization fee to land a transaction locking all of the provided accounts as writable. +- `` - (optional) An array of account address strings (up to a maximum of 128 addresses). If this parameter is provided, the response will reflect a fee to land a transaction locking all of the provided accounts as writable. #### Results: An array of: - `RpcPrioritizationFee` - - `slot: ` - Slot in which minimum fee was observed - - `prioritizationFee: ` - Minimum fee paid for a successfully landed transaction + - `slot: ` - Slot in which fee was observed + - `prioritizationFee: ` - a fee paid by at least one successfully landed transaction, specified in increments of 0.000001 lamports #### Example: From c576535f5ac5ece3190bebee7c231dda9c4065f2 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Fri, 13 Jan 2023 16:14:49 -0700 Subject: [PATCH 288/465] getRecentPrioritizationFees docs: make clear that fee is per compute-unit (backport #29702) (#29703) getRecentPrioritizationFees docs: make clear that fee is per compute-unit (#29702) Make clear that fee is per compute-unit (cherry picked from commit 05594c69968da9997edcbbee76256ba21c8d793d) Co-authored-by: Tyera --- docs/src/developing/clients/jsonrpc-api.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/src/developing/clients/jsonrpc-api.md b/docs/src/developing/clients/jsonrpc-api.md index c946628a45ff6a..a729ee70cf3064 100644 --- a/docs/src/developing/clients/jsonrpc-api.md +++ b/docs/src/developing/clients/jsonrpc-api.md @@ -2130,7 +2130,7 @@ An array of: - `RpcPrioritizationFee` - `slot: ` - Slot in which fee was observed - - `prioritizationFee: ` - a fee paid by at least one successfully landed transaction, specified in increments of 0.000001 lamports + - `prioritizationFee: ` - the per-compute-unit fee paid by at least one successfully landed transaction, specified in increments of 0.000001 lamports #### Example: From bcf6bf1a10922e0d3c8441db0606b84ff53227b2 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Sun, 15 Jan 2023 17:40:25 +0000 Subject: [PATCH 289/465] adds metrics for num merkle shreds on the receiving end (backport #29710) (#29717) adds metrics for num merkle shreds on the receiving end (#29710) (cherry picked from commit 5b5a3ebce85ce27c4a015ffe2a067407ec9df13a) Co-authored-by: behzad nouri --- core/src/shred_fetch_stage.rs | 3 +-- ledger/src/shred.rs | 15 ++++++++++++--- ledger/src/shred/stats.rs | 4 ++++ 3 files changed, 17 insertions(+), 5 deletions(-) diff --git a/core/src/shred_fetch_stage.rs b/core/src/shred_fetch_stage.rs index cde36c8389b2cc..6d32bdaa03839c 100644 --- a/core/src/shred_fetch_stage.rs +++ b/core/src/shred_fetch_stage.rs @@ -19,7 +19,6 @@ use { }; const DEFAULT_LRU_SIZE: usize = 10_000; -type ShredsReceived = LruCache; pub(crate) struct ShredFetchStage { thread_hdls: Vec>, @@ -229,7 +228,7 @@ fn should_discard_packet( max_slot: Slot, // Max slot to ingest shreds for. shred_version: u16, packet_hasher: &PacketHasher, - shreds_received: &mut ShredsReceived, + shreds_received: &mut LruCache, stats: &mut ShredFetchStats, ) -> bool { if should_discard_shred(packet, root, max_slot, shred_version, stats) { diff --git a/ledger/src/shred.rs b/ledger/src/shred.rs index ee97cbe02b8341..2f0d87dd59fd3c 100644 --- a/ledger/src/shred.rs +++ b/ledger/src/shred.rs @@ -808,8 +808,8 @@ pub fn should_discard_shred( } } } - let shred_type = match layout::get_shred_type(shred) { - Ok(shred_type) => shred_type, + let shred_variant = match layout::get_shred_variant(shred) { + Ok(shred_variant) => shred_variant, Err(_) => { stats.bad_shred_type += 1; return true; @@ -835,7 +835,7 @@ pub fn should_discard_shred( return true; } }; - match shred_type { + match ShredType::from(shred_variant) { ShredType::Code => { if index >= shred_code::MAX_CODE_SHREDS_PER_SLOT as u32 { stats.index_out_of_bounds += 1; @@ -871,6 +871,15 @@ pub fn should_discard_shred( } } } + match shred_variant { + ShredVariant::LegacyCode | ShredVariant::LegacyData => (), + ShredVariant::MerkleCode(_) => { + stats.num_shreds_merkle_code = stats.num_shreds_merkle_code.saturating_add(1); + } + ShredVariant::MerkleData(_) => { + stats.num_shreds_merkle_data = stats.num_shreds_merkle_data.saturating_add(1); + } + } false } diff --git a/ledger/src/shred/stats.rs b/ledger/src/shred/stats.rs index ac6d8db77ed3b1..0087ba6061bad8 100644 --- a/ledger/src/shred/stats.rs +++ b/ledger/src/shred/stats.rs @@ -32,6 +32,8 @@ pub struct ProcessShredsStats { pub struct ShredFetchStats { pub index_overrun: usize, pub shred_count: usize, + pub(crate) num_shreds_merkle_code: usize, + pub(crate) num_shreds_merkle_data: usize, pub ping_count: usize, pub ping_err_verify_count: usize, pub(crate) index_bad_deserialize: usize, @@ -115,6 +117,8 @@ impl ShredFetchStats { name, ("index_overrun", self.index_overrun, i64), ("shred_count", self.shred_count, i64), + ("num_shreds_merkle_code", self.num_shreds_merkle_code, i64), + ("num_shreds_merkle_data", self.num_shreds_merkle_data, i64), ("ping_count", self.ping_count, i64), ("ping_err_verify_count", self.ping_err_verify_count, i64), ("slot_bad_deserialize", self.slot_bad_deserialize, i64), From f88daecc61b485d6e18644f55b2a010465c11d5c Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Sun, 15 Jan 2023 19:43:46 +0000 Subject: [PATCH 290/465] adds feature to (temporarily) drop merkle shreds from testnet (backport #29711) (#29718) adds feature to (temporarily) drop merkle shreds from testnet (#29711) (cherry picked from commit 80a39bd6a5bf465d9d4e745e488fa567c3f8da37) Co-authored-by: behzad nouri --- core/src/cluster_nodes.rs | 7 ++++- core/src/shred_fetch_stage.rs | 53 +++++++++++++++++++++++++++++++---- ledger/src/shred.rs | 18 ++++++++++++ sdk/src/feature_set.rs | 10 +++++++ 4 files changed, 82 insertions(+), 6 deletions(-) diff --git a/core/src/cluster_nodes.rs b/core/src/cluster_nodes.rs index ec78c120891423..0cb61a3a272216 100644 --- a/core/src/cluster_nodes.rs +++ b/core/src/cluster_nodes.rs @@ -525,7 +525,12 @@ fn enable_turbine_fanout_experiments(shred_slot: Slot, root_bank: &Bank) -> bool } // Returns true if the feature is effective for the shred slot. -fn check_feature_activation(feature: &Pubkey, shred_slot: Slot, root_bank: &Bank) -> bool { +#[must_use] +pub(crate) fn check_feature_activation( + feature: &Pubkey, + shred_slot: Slot, + root_bank: &Bank, +) -> bool { match root_bank.feature_set.activated_slot(feature) { None => false, Some(feature_slot) => { diff --git a/core/src/shred_fetch_stage.rs b/core/src/shred_fetch_stage.rs index 6d32bdaa03839c..ee0e4b6e28042f 100644 --- a/core/src/shred_fetch_stage.rs +++ b/core/src/shred_fetch_stage.rs @@ -1,14 +1,21 @@ //! The `shred_fetch_stage` pulls shreds from UDP sockets and sends it to a channel. use { - crate::{packet_hasher::PacketHasher, serve_repair::ServeRepair}, + crate::{ + cluster_nodes::check_feature_activation, packet_hasher::PacketHasher, + serve_repair::ServeRepair, + }, crossbeam_channel::{unbounded, Sender}, lru::LruCache, solana_gossip::cluster_info::ClusterInfo, solana_ledger::shred::{should_discard_shred, ShredFetchStats}, solana_perf::packet::{Packet, PacketBatch, PacketBatchRecycler, PacketFlags}, - solana_runtime::bank_forks::BankForks, - solana_sdk::clock::{Slot, DEFAULT_MS_PER_SLOT}, + solana_runtime::{bank::Bank, bank_forks::BankForks}, + solana_sdk::{ + clock::{Slot, DEFAULT_MS_PER_SLOT}, + feature_set, + genesis_config::ClusterType, + }, solana_streamer::streamer::{self, PacketBatchReceiver, StreamerReceiveStats}, std::{ net::UdpSocket, @@ -43,6 +50,7 @@ impl ShredFetchStage { .map(|(_, cluster_info)| cluster_info.keypair().clone()); // In the case of bank_forks=None, setup to accept any slot range + let mut root_bank = bank_forks.read().unwrap().root_bank(); let mut last_root = 0; let mut last_slot = std::u64::MAX; let mut slots_per_epoch = 0; @@ -60,7 +68,7 @@ impl ShredFetchStage { last_root = bank_forks_r.root(); let working_bank = bank_forks_r.working_bank(); last_slot = working_bank.slot(); - let root_bank = bank_forks_r.root_bank(); + root_bank = bank_forks_r.root_bank(); slots_per_epoch = root_bank.get_slots_in_epoch(root_bank.epoch()); } keypair = repair_context @@ -84,6 +92,8 @@ impl ShredFetchStage { // Limit shreds to 2 epochs away. let max_slot = last_slot + 2 * slots_per_epoch; + let should_drop_merkle_shreds = + |shred_slot| should_drop_merkle_shreds(shred_slot, &root_bank); for packet in packet_batch.iter_mut() { if should_discard_packet( packet, @@ -92,6 +102,7 @@ impl ShredFetchStage { shred_version, &packet_hasher, &mut shreds_received, + should_drop_merkle_shreds, &mut stats, ) { packet.meta.set_discard(true); @@ -229,9 +240,17 @@ fn should_discard_packet( shred_version: u16, packet_hasher: &PacketHasher, shreds_received: &mut LruCache, + should_drop_merkle_shreds: impl Fn(Slot) -> bool, stats: &mut ShredFetchStats, ) -> bool { - if should_discard_shred(packet, root, max_slot, shred_version, stats) { + if should_discard_shred( + packet, + root, + max_slot, + shred_version, + should_drop_merkle_shreds, + stats, + ) { return true; } let hash = packet_hasher.hash_packet(packet); @@ -244,6 +263,21 @@ fn should_discard_packet( } } +#[must_use] +fn should_drop_merkle_shreds(shred_slot: Slot, root_bank: &Bank) -> bool { + root_bank.cluster_type() == ClusterType::Testnet + && check_feature_activation( + &feature_set::drop_merkle_shreds::id(), + shred_slot, + root_bank, + ) + && !check_feature_activation( + &feature_set::keep_merkle_shreds::id(), + shred_slot, + root_bank, + ) +} + #[cfg(test)] mod tests { use { @@ -288,6 +322,7 @@ mod tests { shred_version, &hasher, &mut shreds_received, + |_| false, // should_drop_merkle_shreds &mut stats, )); let coding = solana_ledger::shred::Shredder::generate_coding_shreds( @@ -303,6 +338,7 @@ mod tests { shred_version, &hasher, &mut shreds_received, + |_| false, // should_drop_merkle_shreds &mut stats, )); } @@ -329,6 +365,7 @@ mod tests { shred_version, &hasher, &mut shreds_received, + |_| false, // should_drop_merkle_shreds &mut stats, )); assert_eq!(stats.index_overrun, 1); @@ -352,6 +389,7 @@ mod tests { shred_version, &hasher, &mut shreds_received, + |_| false, // should_drop_merkle_shreds &mut stats, )); assert_eq!(stats.slot_out_of_range, 1); @@ -363,6 +401,7 @@ mod tests { 345, // shred_version &hasher, &mut shreds_received, + |_| false, // should_drop_merkle_shreds &mut stats, )); assert_eq!(stats.shred_version_mismatch, 1); @@ -375,6 +414,7 @@ mod tests { shred_version, &hasher, &mut shreds_received, + |_| false, // should_drop_merkle_shreds &mut stats, )); @@ -386,6 +426,7 @@ mod tests { shred_version, &hasher, &mut shreds_received, + |_| false, // should_drop_merkle_shreds &mut stats, )); assert_eq!(stats.duplicate_shred, 1); @@ -410,6 +451,7 @@ mod tests { shred_version, &hasher, &mut shreds_received, + |_| false, // should_drop_merkle_shreds &mut stats, )); @@ -423,6 +465,7 @@ mod tests { shred_version, &hasher, &mut shreds_received, + |_| false, // should_drop_merkle_shreds &mut stats, )); } diff --git a/ledger/src/shred.rs b/ledger/src/shred.rs index 2f0d87dd59fd3c..b88e6a9b83bb75 100644 --- a/ledger/src/shred.rs +++ b/ledger/src/shred.rs @@ -786,6 +786,7 @@ pub fn should_discard_shred( root: Slot, max_slot: Slot, shred_version: u16, + should_drop_merkle_shreds: impl Fn(Slot) -> bool, stats: &mut ShredFetchStats, ) -> bool { debug_assert!(root < max_slot); @@ -874,9 +875,15 @@ pub fn should_discard_shred( match shred_variant { ShredVariant::LegacyCode | ShredVariant::LegacyData => (), ShredVariant::MerkleCode(_) => { + if should_drop_merkle_shreds(slot) { + return true; + } stats.num_shreds_merkle_code = stats.num_shreds_merkle_code.saturating_add(1); } ShredVariant::MerkleData(_) => { + if should_drop_merkle_shreds(slot) { + return true; + } stats.num_shreds_merkle_data = stats.num_shreds_merkle_data.saturating_add(1); } } @@ -1072,6 +1079,7 @@ mod tests { root, max_slot, shred_version, + |_| false, // should_drop_merkle_shreds &mut stats )); assert_eq!(stats, ShredFetchStats::default()); @@ -1082,6 +1090,7 @@ mod tests { root, max_slot, shred_version, + |_| false, // should_drop_merkle_shreds &mut stats )); assert_eq!(stats.index_overrun, 1); @@ -1092,6 +1101,7 @@ mod tests { root, max_slot, shred_version, + |_| false, // should_drop_merkle_shreds &mut stats )); assert_eq!(stats.index_overrun, 2); @@ -1102,6 +1112,7 @@ mod tests { root, max_slot, shred_version, + |_| false, // should_drop_merkle_shreds &mut stats )); assert_eq!(stats.index_overrun, 3); @@ -1112,6 +1123,7 @@ mod tests { root, max_slot, shred_version, + |_| false, // should_drop_merkle_shreds &mut stats )); assert_eq!(stats.index_overrun, 4); @@ -1122,6 +1134,7 @@ mod tests { root, max_slot, shred_version, + |_| false, // should_drop_merkle_shreds &mut stats )); assert_eq!(stats.bad_parent_offset, 1); @@ -1142,6 +1155,7 @@ mod tests { root, max_slot, shred_version, + |_| false, // should_drop_merkle_shreds &mut stats )); @@ -1161,6 +1175,7 @@ mod tests { root, max_slot, shred_version, + |_| false, // should_drop_merkle_shreds &mut stats )); assert_eq!(1, stats.index_out_of_bounds); @@ -1181,6 +1196,7 @@ mod tests { root, max_slot, shred_version, + |_| false, // should_drop_merkle_shreds &mut stats )); packet.buffer_mut()[OFFSET_OF_SHRED_VARIANT] = u8::MAX; @@ -1190,6 +1206,7 @@ mod tests { root, max_slot, shred_version, + |_| false, // should_drop_merkle_shreds &mut stats )); assert_eq!(1, stats.bad_shred_type); @@ -1201,6 +1218,7 @@ mod tests { root, max_slot, shred_version, + |_| false, // should_drop_merkle_shreds &mut stats )); assert_eq!(1, stats.bad_shred_type); diff --git a/sdk/src/feature_set.rs b/sdk/src/feature_set.rs index b9ba7ee736a0f9..53a7207c3c279e 100644 --- a/sdk/src/feature_set.rs +++ b/sdk/src/feature_set.rs @@ -528,6 +528,14 @@ pub mod disable_turbine_fanout_experiments { solana_sdk::declare_id!("Gz1aLrbeQ4Q6PTSafCZcGWZXz91yVRi7ASFzFEr1U4sa"); } +pub mod drop_merkle_shreds { + solana_sdk::declare_id!("84zy5N23Q9vTZuLc9h1HWUtyM9yCFV2SCmyP9W9C3yHZ"); +} + +pub mod keep_merkle_shreds { + solana_sdk::declare_id!("HyNQzc7TMNmRhpVHXqDGjpsHzeQie82mDQXSF9hj7nAH"); +} + pub mod move_serialized_len_ptr_in_cpi { solana_sdk::declare_id!("74CoWuBmt3rUVUrCb2JiSTvh6nXyBWUsK4SaMj3CtE3T"); } @@ -658,6 +666,8 @@ lazy_static! { (commission_updates_only_allowed_in_first_half_of_epoch::id(), "validator commission updates are only allowed in the first half of an epoch #29362"), (enable_turbine_fanout_experiments::id(), "enable turbine fanout experiments #29393"), (disable_turbine_fanout_experiments::id(), "disable turbine fanout experiments #29393"), + (drop_merkle_shreds::id(), "drop merkle shreds #29711"), + (keep_merkle_shreds::id(), "keep merkle shreds #29711"), (move_serialized_len_ptr_in_cpi::id(), "cpi ignore serialized_len_ptr #29592"), /*************** ADD NEW FEATURES HERE ***************/ ] From ea04a60712f75594cc0e7c4a77c83151a54aa0a9 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Wed, 18 Jan 2023 18:07:46 -0500 Subject: [PATCH 291/465] Revert "Do not exclude failed simple vote transactions from consensus" (backport #29745) (#29764) Revert "Do not exclude failed simple vote transactions from consensus" (#29745) This reverts commit b4237f3f2cbdacc06ca9b81f54e6b096cc3b4110. (cherry picked from commit 1753a0e3af35cc4b2c7b45378eb15d1354b8592d) Co-authored-by: carllin --- ledger/src/blockstore_processor.rs | 16 ++++++++-------- runtime/src/bank_utils.rs | 4 ++-- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/ledger/src/blockstore_processor.rs b/ledger/src/blockstore_processor.rs index 633016c294d63d..b5eb84567c098d 100644 --- a/ledger/src/blockstore_processor.rs +++ b/ledger/src/blockstore_processor.rs @@ -3707,13 +3707,15 @@ pub mod tests { // Create an transaction that references the new blockhash, should still // be able to find the blockhash if we process transactions all in the same // batch - let mut expected_signatures = BTreeSet::new(); + let mut expected_successful_voter_pubkeys = BTreeSet::new(); let vote_txs: Vec<_> = validator_keypairs .iter() .enumerate() .map(|(i, validator_keypairs)| { - let vote_tx = if i % 3 == 0 { + if i % 3 == 0 { // These votes are correct + expected_successful_voter_pubkeys + .insert(validator_keypairs.vote_keypair.pubkey()); vote_transaction::new_vote_transaction( vec![0], bank0.hash(), @@ -3745,20 +3747,18 @@ pub mod tests { &validator_keypairs.vote_keypair, None, ) - }; - expected_signatures.insert(vote_tx.signatures[0]); - vote_tx + } }) .collect(); let entry = next_entry(&bank_1_blockhash, 1, vote_txs); let (replay_vote_sender, replay_vote_receiver) = crossbeam_channel::unbounded(); let _ = process_entries_for_tests(&bank1, vec![entry], true, None, Some(&replay_vote_sender)); - let signatures: BTreeSet<_> = replay_vote_receiver + let successes: BTreeSet = replay_vote_receiver .try_iter() - .map(|(.., signature)| signature) + .map(|(vote_pubkey, ..)| vote_pubkey) .collect(); - assert_eq!(signatures, expected_signatures); + assert_eq!(successes, expected_successful_voter_pubkeys); } fn make_slot_with_vote_tx( diff --git a/runtime/src/bank_utils.rs b/runtime/src/bank_utils.rs index 80246f75047875..ba9d20d2e6166c 100644 --- a/runtime/src/bank_utils.rs +++ b/runtime/src/bank_utils.rs @@ -43,8 +43,8 @@ pub fn find_and_send_votes( sanitized_txs .iter() .zip(execution_results.iter()) - .for_each(|(tx, _result)| { - if tx.is_simple_vote_transaction() { + .for_each(|(tx, result)| { + if tx.is_simple_vote_transaction() && result.was_executed_successfully() { if let Some(parsed_vote) = vote_parser::parse_sanitized_vote_transaction(tx) { if parsed_vote.1.last_voted_slot().is_some() { let _ = vote_sender.send(parsed_vote); From cd6ba30cb0f990079a3d22e62d4f7f315ede4ce4 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Wed, 18 Jan 2023 16:15:50 -0700 Subject: [PATCH 292/465] quic-server: demote and annotate noisy, ambiguous log message (backport #29704) (#29706) quic-server: demote and annotate noisy, ambiguous log message (#29704) (cherry picked from commit f96af7929d27513bd1919e4d32db3a5dbc7176a0) Co-authored-by: Trent Nelson --- streamer/src/nonblocking/quic.rs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/streamer/src/nonblocking/quic.rs b/streamer/src/nonblocking/quic.rs index 5f866d30e029ba..3423e8f1a51eb2 100644 --- a/streamer/src/nonblocking/quic.rs +++ b/streamer/src/nonblocking/quic.rs @@ -120,6 +120,8 @@ pub async fn run_server( stats.clone(), )); sleep(Duration::from_micros(WAIT_BETWEEN_NEW_CONNECTIONS_US)).await; + } else { + debug!("accept(): Timed out waiting for connection"); } } } From d757488333a9fe0078cf1e1266caf29748c634fb Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Wed, 18 Jan 2023 19:40:17 -0600 Subject: [PATCH 293/465] docs: update Docusaurus to v2.2 (backport #29563) (#29748) * docs: update Docusaurus to v2.2 (#29563) * build: update docusaurus * fix: algolia keys * fix: frontmatter keywords array * build: clsx version * fix: card layout and pages * fix: invalid internal link (cherry picked from commit 1345e895077c1deac8ffeff322d06cb2c17cc532) # Conflicts: # docs/package-lock.json # docs/package.json # docs/src/developing/intro/transaction_fees.md * update package files Co-authored-by: Nick Frostbutter <75431177+nickfrosty@users.noreply.github.com> Co-authored-by: yihau --- docs/.gitignore | 3 + docs/docusaurus.config.js | 8 +- docs/layouts/CardLayout.js | 9 +- docs/package-lock.json | 22474 +++++++--------- docs/package.json | 8 +- docs/src/cluster/commitments.md | 8 +- docs/src/developing/intro/programs.md | 1 - docs/src/developing/intro/rent.md | 1 - docs/src/developing/intro/transaction_fees.md | 95 + docs/src/developing/lookup-tables.md | 1 - docs/src/developing/versioned-transactions.md | 1 - docs/src/getstarted/hello-world.md | 17 +- docs/src/getstarted/local.md | 11 +- docs/src/getstarted/rust.md | 11 +- docs/src/pages/developers.js | 4 +- docs/src/pages/getstarted.jsx | 4 +- docs/src/terminology.md | 9 +- docs/src/transaction_fees.md | 10 +- docs/yarn.lock | 9308 +++---- 19 files changed, 13437 insertions(+), 18546 deletions(-) create mode 100644 docs/src/developing/intro/transaction_fees.md diff --git a/docs/.gitignore b/docs/.gitignore index c9a1663eb851ab..3ecae797dfa8b9 100644 --- a/docs/.gitignore +++ b/docs/.gitignore @@ -12,6 +12,9 @@ /static/img/*.png vercel.json +# use npm and package-lock.json +yarn.lock + # Misc .DS_Store .env diff --git a/docs/docusaurus.config.js b/docs/docusaurus.config.js index 088f7ca7bdffff..dcc67e75bb9845 100644 --- a/docs/docusaurus.config.js +++ b/docs/docusaurus.config.js @@ -45,6 +45,9 @@ module.exports = { }, }, themeConfig: { + prism: { + additionalLanguages: ["rust"], + }, navbar: { logo: { alt: "Solana Logo", @@ -89,7 +92,6 @@ module.exports = { { href: "https://spl.solana.com", label: "Solana Program Library »", - position: "left", }, ], }, @@ -115,7 +117,8 @@ module.exports = { }, algolia: { // This API key is "search-only" and safe to be published - apiKey: "d58e0d68c875346d52645d68b13f3ac0", + apiKey: "011e01358301f5023b02da5db6af7f4d", + appId: "FQ12ISJR4B", indexName: "solana", contextualSearch: true, }, @@ -199,6 +202,7 @@ module.exports = { { docs: { path: "src", + breadcrumbs: false, routeBasePath: "/", sidebarPath: require.resolve("./sidebars.js"), remarkPlugins: [math], diff --git a/docs/layouts/CardLayout.js b/docs/layouts/CardLayout.js index 85f8e72750114b..71083e905a1477 100644 --- a/docs/layouts/CardLayout.js +++ b/docs/layouts/CardLayout.js @@ -1,7 +1,8 @@ import React from "react"; import Layout from "@theme/Layout"; import DocSidebar from "@theme/DocSidebar"; -import ThemeClassNames from "@docusaurus/theme-classic/lib/theme/DocPage/styles.module.css"; +import SidebarStyles from "@docusaurus/theme-classic/lib/theme/DocPage/Layout/Sidebar/styles.module.css"; +import DocPageStyles from "@docusaurus/theme-classic/lib/theme/DocPage/Layout/styles.module.css"; import sidebar from "../sidebars"; function CardLayout({ @@ -20,14 +21,14 @@ function CardLayout({ // return the page layout, ready to go return ( -
    +
    {sidebarItems?.length > 0 && ( -
    ); diff --git a/docs/package-lock.json b/docs/package-lock.json index 9afffa7f9216b2..d9fb5bc1120564 100644 --- a/docs/package-lock.json +++ b/docs/package-lock.json @@ -9,11 +9,11 @@ "version": "0.0.0", "dependencies": { "@crowdin/cli": "^3.6.1", - "@docusaurus/core": "^2.0.0-beta.0", - "@docusaurus/preset-classic": "^2.0.0-beta.0", - "@docusaurus/theme-search-algolia": "^2.0.0-beta.0", + "@docusaurus/core": "^2.2.0", + "@docusaurus/preset-classic": "^2.2.0", + "@docusaurus/theme-search-algolia": "^2.2.0", "babel-eslint": "^10.1.0", - "clsx": "^1.1.1", + "clsx": "^1.2.1", "eslint": "^7.3.1", "eslint-plugin-react": "^7.20.0", "postcss": "^8.2.13", @@ -26,178 +26,201 @@ } }, "node_modules/@algolia/autocomplete-core": { - "version": "1.0.0-alpha.44", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-core/-/autocomplete-core-1.0.0-alpha.44.tgz", - "integrity": "sha512-2iMXthldMIDXtlbg9omRKLgg1bLo2ZzINAEqwhNjUeyj1ceEyL1ck6FY0VnJpf2LsjmNthHCz2BuFk+nYUeDNA==", + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-core/-/autocomplete-core-1.7.1.tgz", + "integrity": "sha512-eiZw+fxMzNQn01S8dA/hcCpoWCOCwcIIEUtHHdzN5TGB3IpzLbuhqFeTfh2OUhhgkE8Uo17+wH+QJ/wYyQmmzg==", "dependencies": { - "@algolia/autocomplete-shared": "1.0.0-alpha.44" + "@algolia/autocomplete-shared": "1.7.1" } }, "node_modules/@algolia/autocomplete-preset-algolia": { - "version": "1.0.0-alpha.44", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.0.0-alpha.44.tgz", - "integrity": "sha512-DCHwo5ovzg9k2ejUolGNTLFnIA7GpsrkbNJTy1sFbMnYfBmeK8egZPZnEl7lBTr27OaZu7IkWpTepLVSztZyng==", + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.7.1.tgz", + "integrity": "sha512-pJwmIxeJCymU1M6cGujnaIYcY3QPOVYZOXhFkWVM7IxKzy272BwCvMFMyc5NpG/QmiObBxjo7myd060OeTNJXg==", "dependencies": { - "@algolia/autocomplete-shared": "1.0.0-alpha.44" + "@algolia/autocomplete-shared": "1.7.1" }, "peerDependencies": { - "@algolia/client-search": "^4.5.1", - "algoliasearch": "^4.5.1" + "@algolia/client-search": "^4.9.1", + "algoliasearch": "^4.9.1" } }, "node_modules/@algolia/autocomplete-shared": { - "version": "1.0.0-alpha.44", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-shared/-/autocomplete-shared-1.0.0-alpha.44.tgz", - "integrity": "sha512-2oQZPERYV+yNx/yoVWYjZZdOqsitJ5dfxXJjL18yczOXH6ujnsq+DTczSrX+RjzjQdVeJ1UAG053EJQF/FOiMg==" + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-shared/-/autocomplete-shared-1.7.1.tgz", + "integrity": "sha512-eTmGVqY3GeyBTT8IWiB2K5EuURAqhnumfktAEoHxfDY2o7vg2rSnO16ZtIG0fMgt3py28Vwgq42/bVEuaQV7pg==" }, "node_modules/@algolia/cache-browser-local-storage": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.9.1.tgz", - "integrity": "sha512-bAUU9vKCy45uTTlzJw0LYu1IjoZsmzL6lgjaVFaW1crhX/4P+JD5ReQv3n/wpiXSFaHq1WEO3WyH2g3ymzeipQ==", + "version": "4.14.2", + "resolved": "https://registry.npmjs.org/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.14.2.tgz", + "integrity": "sha512-FRweBkK/ywO+GKYfAWbrepewQsPTIEirhi1BdykX9mxvBPtGNKccYAxvGdDCumU1jL4r3cayio4psfzKMejBlA==", "dependencies": { - "@algolia/cache-common": "4.9.1" + "@algolia/cache-common": "4.14.2" } }, "node_modules/@algolia/cache-common": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/@algolia/cache-common/-/cache-common-4.9.1.tgz", - "integrity": "sha512-tcvw4mOfFy44V4ZxDEy9wNGr6vFROZKRpXKTEBgdw/WBn6mX51H1ar4RWtceDEcDU4H5fIv5tsY3ip2hU+fTPg==" + "version": "4.14.2", + "resolved": "https://registry.npmjs.org/@algolia/cache-common/-/cache-common-4.14.2.tgz", + "integrity": "sha512-SbvAlG9VqNanCErr44q6lEKD2qoK4XtFNx9Qn8FK26ePCI8I9yU7pYB+eM/cZdS9SzQCRJBbHUumVr4bsQ4uxg==" }, "node_modules/@algolia/cache-in-memory": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/@algolia/cache-in-memory/-/cache-in-memory-4.9.1.tgz", - "integrity": "sha512-IEJrHonvdymW2CnRfJtsTVWyfAH05xPEFkGXGCw00+6JNCj8Dln3TeaRLiaaY1srlyGedkemekQm1/Xb46CGOQ==", + "version": "4.14.2", + "resolved": "https://registry.npmjs.org/@algolia/cache-in-memory/-/cache-in-memory-4.14.2.tgz", + "integrity": "sha512-HrOukWoop9XB/VFojPv1R5SVXowgI56T9pmezd/djh2JnVN/vXswhXV51RKy4nCpqxyHt/aGFSq2qkDvj6KiuQ==", "dependencies": { - "@algolia/cache-common": "4.9.1" + "@algolia/cache-common": "4.14.2" } }, "node_modules/@algolia/client-account": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/@algolia/client-account/-/client-account-4.9.1.tgz", - "integrity": "sha512-Shpjeuwb7i2LR5QuWREb6UbEQLGB+Pl/J5+wPgILJDP/uWp7jpl0ase9mYNQGKj7TjztpSpQCPZ3dSHPnzZPfw==", + "version": "4.14.2", + "resolved": "https://registry.npmjs.org/@algolia/client-account/-/client-account-4.14.2.tgz", + "integrity": "sha512-WHtriQqGyibbb/Rx71YY43T0cXqyelEU0lB2QMBRXvD2X0iyeGl4qMxocgEIcbHyK7uqE7hKgjT8aBrHqhgc1w==", "dependencies": { - "@algolia/client-common": "4.9.1", - "@algolia/client-search": "4.9.1", - "@algolia/transporter": "4.9.1" + "@algolia/client-common": "4.14.2", + "@algolia/client-search": "4.14.2", + "@algolia/transporter": "4.14.2" } }, "node_modules/@algolia/client-analytics": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-4.9.1.tgz", - "integrity": "sha512-/g6OkOSIA+A0t/tjvbL6iG/zV4El4LPFgv/tcAYHTH27BmlNtnEXw+iFpGjeUlQoPily9WVB3QNLMJkaNwL3HA==", + "version": "4.14.2", + "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-4.14.2.tgz", + "integrity": "sha512-yBvBv2mw+HX5a+aeR0dkvUbFZsiC4FKSnfqk9rrfX+QrlNOKEhCG0tJzjiOggRW4EcNqRmaTULIYvIzQVL2KYQ==", "dependencies": { - "@algolia/client-common": "4.9.1", - "@algolia/client-search": "4.9.1", - "@algolia/requester-common": "4.9.1", - "@algolia/transporter": "4.9.1" + "@algolia/client-common": "4.14.2", + "@algolia/client-search": "4.14.2", + "@algolia/requester-common": "4.14.2", + "@algolia/transporter": "4.14.2" } }, "node_modules/@algolia/client-common": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-4.9.1.tgz", - "integrity": "sha512-UziRTZ8km3qwoVPIyEre8TV6V+MX7UtbfVqPmSafZ0xu41UUZ+sL56YoKjOXkbKuybeIC9prXMGy/ID5bXkTqg==", + "version": "4.14.2", + "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-4.14.2.tgz", + "integrity": "sha512-43o4fslNLcktgtDMVaT5XwlzsDPzlqvqesRi4MjQz2x4/Sxm7zYg5LRYFol1BIhG6EwxKvSUq8HcC/KxJu3J0Q==", "dependencies": { - "@algolia/requester-common": "4.9.1", - "@algolia/transporter": "4.9.1" + "@algolia/requester-common": "4.14.2", + "@algolia/transporter": "4.14.2" } }, - "node_modules/@algolia/client-recommendation": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/@algolia/client-recommendation/-/client-recommendation-4.9.1.tgz", - "integrity": "sha512-Drtvvm1PNIOpYf4HFlkPFstFQ3IsN+TRmxur2F7y6Faplb5ybISa8ithu1tmlTdyTf3A78hQUQjgJet6qD2XZw==", + "node_modules/@algolia/client-personalization": { + "version": "4.14.2", + "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-4.14.2.tgz", + "integrity": "sha512-ACCoLi0cL8CBZ1W/2juehSltrw2iqsQBnfiu/Rbl9W2yE6o2ZUb97+sqN/jBqYNQBS+o0ekTMKNkQjHHAcEXNw==", "dependencies": { - "@algolia/client-common": "4.9.1", - "@algolia/requester-common": "4.9.1", - "@algolia/transporter": "4.9.1" + "@algolia/client-common": "4.14.2", + "@algolia/requester-common": "4.14.2", + "@algolia/transporter": "4.14.2" } }, "node_modules/@algolia/client-search": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-4.9.1.tgz", - "integrity": "sha512-r9Cw2r8kJr45iYncFDht6EshARghU265wuY8Q8oHrpFHjAziEYdsUOdNmQKbsSH5J3gLjDPx1EI5DzVd6ivn3w==", + "version": "4.14.2", + "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-4.14.2.tgz", + "integrity": "sha512-L5zScdOmcZ6NGiVbLKTvP02UbxZ0njd5Vq9nJAmPFtjffUSOGEp11BmD2oMJ5QvARgx2XbX4KzTTNS5ECYIMWw==", "dependencies": { - "@algolia/client-common": "4.9.1", - "@algolia/requester-common": "4.9.1", - "@algolia/transporter": "4.9.1" + "@algolia/client-common": "4.14.2", + "@algolia/requester-common": "4.14.2", + "@algolia/transporter": "4.14.2" } }, + "node_modules/@algolia/events": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@algolia/events/-/events-4.0.1.tgz", + "integrity": "sha512-FQzvOCgoFXAbf5Y6mYozw2aj5KCJoA3m4heImceldzPSMbdyS4atVjJzXKMsfX3wnZTFYwkkt8/z8UesLHlSBQ==" + }, "node_modules/@algolia/logger-common": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/@algolia/logger-common/-/logger-common-4.9.1.tgz", - "integrity": "sha512-9mPrbFlFyPT7or/7PXTiJjyOewWB9QRkZKVXkt5zHAUiUzGxmmdpJIGpPv3YQnDur8lXrXaRI0MHXUuIDMY1ng==" + "version": "4.14.2", + "resolved": "https://registry.npmjs.org/@algolia/logger-common/-/logger-common-4.14.2.tgz", + "integrity": "sha512-/JGlYvdV++IcMHBnVFsqEisTiOeEr6cUJtpjz8zc0A9c31JrtLm318Njc72p14Pnkw3A/5lHHh+QxpJ6WFTmsA==" }, "node_modules/@algolia/logger-console": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/@algolia/logger-console/-/logger-console-4.9.1.tgz", - "integrity": "sha512-74VUwjtFjFpjZpi3QoHIPv0kcr3vWUSHX/Vs8PJW3lPsD4CgyhFenQbG9v+ZnyH0JrJwiYTtzfmrVh7IMWZGrQ==", + "version": "4.14.2", + "resolved": "https://registry.npmjs.org/@algolia/logger-console/-/logger-console-4.14.2.tgz", + "integrity": "sha512-8S2PlpdshbkwlLCSAB5f8c91xyc84VM9Ar9EdfE9UmX+NrKNYnWR1maXXVDQQoto07G1Ol/tYFnFVhUZq0xV/g==", "dependencies": { - "@algolia/logger-common": "4.9.1" + "@algolia/logger-common": "4.14.2" } }, "node_modules/@algolia/requester-browser-xhr": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.9.1.tgz", - "integrity": "sha512-zc46tk5o0ikOAz3uYiRAMxC2iVKAMFKT7nNZnLB5IzT0uqAh7pz/+D/UvIxP4bKmsllpBSnPcpfQF+OI4Ag/BA==", + "version": "4.14.2", + "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.14.2.tgz", + "integrity": "sha512-CEh//xYz/WfxHFh7pcMjQNWgpl4wFB85lUMRyVwaDPibNzQRVcV33YS+63fShFWc2+42YEipFGH2iPzlpszmDw==", "dependencies": { - "@algolia/requester-common": "4.9.1" + "@algolia/requester-common": "4.14.2" } }, "node_modules/@algolia/requester-common": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/@algolia/requester-common/-/requester-common-4.9.1.tgz", - "integrity": "sha512-9hPgXnlCSbqJqF69M5x5WN3h51Dc+mk/iWNeJSVxExHGvCDfBBZd0v6S15i8q2a9cD1I2RnhMpbnX5BmGtabVA==" + "version": "4.14.2", + "resolved": "https://registry.npmjs.org/@algolia/requester-common/-/requester-common-4.14.2.tgz", + "integrity": "sha512-73YQsBOKa5fvVV3My7iZHu1sUqmjjfs9TteFWwPwDmnad7T0VTCopttcsM3OjLxZFtBnX61Xxl2T2gmG2O4ehg==" }, "node_modules/@algolia/requester-node-http": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-4.9.1.tgz", - "integrity": "sha512-vYNVbSCuyrCSCjHBQJk+tLZtWCjvvDf5tSbRJjyJYMqpnXuIuP7gZm24iHil4NPYBhbBj5NU2ZDAhc/gTn75Ag==", + "version": "4.14.2", + "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-4.14.2.tgz", + "integrity": "sha512-oDbb02kd1o5GTEld4pETlPZLY0e+gOSWjWMJHWTgDXbv9rm/o2cF7japO6Vj1ENnrqWvLBmW1OzV9g6FUFhFXg==", "dependencies": { - "@algolia/requester-common": "4.9.1" + "@algolia/requester-common": "4.14.2" } }, "node_modules/@algolia/transporter": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/@algolia/transporter/-/transporter-4.9.1.tgz", - "integrity": "sha512-AbjFfGzX+cAuj7Qyc536OxIQzjFOA5FU2ANGStx8LBH+AKXScwfkx67C05riuaRR5adSCLMSEbVvUscH0nF+6A==", + "version": "4.14.2", + "resolved": "https://registry.npmjs.org/@algolia/transporter/-/transporter-4.14.2.tgz", + "integrity": "sha512-t89dfQb2T9MFQHidjHcfhh6iGMNwvuKUvojAj+JsrHAGbuSy7yE4BylhLX6R0Q1xYRoC4Vvv+O5qIw/LdnQfsQ==", + "dependencies": { + "@algolia/cache-common": "4.14.2", + "@algolia/logger-common": "4.14.2", + "@algolia/requester-common": "4.14.2" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", + "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", "dependencies": { - "@algolia/cache-common": "4.9.1", - "@algolia/logger-common": "4.9.1", - "@algolia/requester-common": "4.9.1" + "@jridgewell/gen-mapping": "^0.1.0", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" } }, "node_modules/@babel/code-frame": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", - "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", + "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", "dependencies": { - "@babel/highlight": "^7.12.13" + "@babel/highlight": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/compat-data": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.14.0.tgz", - "integrity": "sha512-vu9V3uMM/1o5Hl5OekMUowo3FqXLJSw+s+66nt0fSWVWTtmosdzn45JHOB3cPtZoe6CTBDzvSw0RdOY85Q37+Q==" + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.19.4.tgz", + "integrity": "sha512-CHIGpJcUQ5lU9KrPHTjBMhVwQG6CQjxfg36fGXl3qk/Gik1WwWachaXFuo0uCWJT/mStOKtcbFJCaVLihC1CMw==", + "engines": { + "node": ">=6.9.0" + } }, "node_modules/@babel/core": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.14.2.tgz", - "integrity": "sha512-OgC1mON+l4U4B4wiohJlQNUU3H73mpTyYY3j/c8U9dr9UagGGSm+WFpzjy/YLdoyjiG++c1kIDgxCo/mLwQJeQ==", - "dependencies": { - "@babel/code-frame": "^7.12.13", - "@babel/generator": "^7.14.2", - "@babel/helper-compilation-targets": "^7.13.16", - "@babel/helper-module-transforms": "^7.14.2", - "@babel/helpers": "^7.14.0", - "@babel/parser": "^7.14.2", - "@babel/template": "^7.12.13", - "@babel/traverse": "^7.14.2", - "@babel/types": "^7.14.2", + "version": "7.19.6", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.19.6.tgz", + "integrity": "sha512-D2Ue4KHpc6Ys2+AxpIx1BZ8+UegLLLE2p3KJEuJRKmokHOtl49jQ5ny1773KsGLZs8MQvBidAF6yWUJxRqtKtg==", + "dependencies": { + "@ampproject/remapping": "^2.1.0", + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.19.6", + "@babel/helper-compilation-targets": "^7.19.3", + "@babel/helper-module-transforms": "^7.19.6", + "@babel/helpers": "^7.19.4", + "@babel/parser": "^7.19.6", + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.19.6", + "@babel/types": "^7.19.4", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", - "json5": "^2.1.2", - "semver": "^6.3.0", - "source-map": "^0.5.0" + "json5": "^2.2.1", + "semver": "^6.3.0" }, "engines": { "node": ">=6.9.0" @@ -216,42 +239,67 @@ } }, "node_modules/@babel/generator": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.2.tgz", - "integrity": "sha512-OnADYbKrffDVai5qcpkMxQ7caomHOoEwjkouqnN2QhydAjowFAZcsdecFIRUBdb+ZcruwYE4ythYmF1UBZU5xQ==", + "version": "7.19.6", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.19.6.tgz", + "integrity": "sha512-oHGRUQeoX1QrKeJIKVe0hwjGqNnVYsM5Nep5zo0uE0m42sLH+Fsd2pStJ5sRM1bNyTUUoz0pe2lTeMJrb/taTA==", "dependencies": { - "@babel/types": "^7.14.2", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" + "@babel/types": "^7.19.4", + "@jridgewell/gen-mapping": "^0.3.2", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/generator/node_modules/@jridgewell/gen-mapping": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", + "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" } }, "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.12.13.tgz", - "integrity": "sha512-7YXfX5wQ5aYM/BOlbSccHDbuXXFPxeoUmfWtz8le2yTkTZc+BxsiEnENFoi2SlmA8ewDkG2LgIMIVzzn2h8kfw==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz", + "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==", "dependencies": { - "@babel/types": "^7.12.13" + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.12.13.tgz", - "integrity": "sha512-CZOv9tGphhDRlVjVkAgm8Nhklm9RzSmWpX2my+t7Ua/KT616pEzXsQCjinzvkRvHWJ9itO4f296efroX23XCMA==", + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.18.9.tgz", + "integrity": "sha512-yFQ0YCHoIqarl8BCRwBL8ulYUaZpz3bNsA7oFepAzee+8/+ImtADXNOmO5vJvsPff3qi+hvpkY/NYBTrBQgdNw==", "dependencies": { - "@babel/helper-explode-assignable-expression": "^7.12.13", - "@babel/types": "^7.12.13" + "@babel/helper-explode-assignable-expression": "^7.18.6", + "@babel/types": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.13.16", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.13.16.tgz", - "integrity": "sha512-3gmkYIrpqsLlieFwjkGgLaSHmhnvlAYzZLlYVjlW+QwI+1zE17kGxuJGmIqDQdYp56XdmGeD+Bswx0UTyG18xA==", + "version": "7.19.3", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.19.3.tgz", + "integrity": "sha512-65ESqLGyGmLvgR0mst5AdW1FkNlj9rQsCKduzEoEPhBCDFGXvz2jW6bXFG6i0/MrV2s7hhXjjb2yAzcPuQlLwg==", "dependencies": { - "@babel/compat-data": "^7.13.15", - "@babel/helper-validator-option": "^7.12.17", - "browserslist": "^4.14.5", + "@babel/compat-data": "^7.19.3", + "@babel/helper-validator-option": "^7.18.6", + "browserslist": "^4.21.3", "semver": "^6.3.0" }, + "engines": { + "node": ">=6.9.0" + }, "peerDependencies": { "@babel/core": "^7.0.0" } @@ -265,42 +313,47 @@ } }, "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.14.2.tgz", - "integrity": "sha512-6YctwVsmlkchxfGUogvVrrhzyD3grFJyluj5JgDlQrwfMLJSt5tdAzFZfPf4H2Xoi5YLcQ6BxfJlaOBHuctyIw==", + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.19.0.tgz", + "integrity": "sha512-NRz8DwF4jT3UfrmUoZjd0Uph9HQnP30t7Ash+weACcyNkiYTywpIjDBgReJMKgr+n86sn2nPVVmJ28Dm053Kqw==", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.12.13", - "@babel/helper-function-name": "^7.14.2", - "@babel/helper-member-expression-to-functions": "^7.13.12", - "@babel/helper-optimise-call-expression": "^7.12.13", - "@babel/helper-replace-supers": "^7.13.12", - "@babel/helper-split-export-declaration": "^7.12.13" + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.19.0", + "@babel/helper-member-expression-to-functions": "^7.18.9", + "@babel/helper-optimise-call-expression": "^7.18.6", + "@babel/helper-replace-supers": "^7.18.9", + "@babel/helper-split-export-declaration": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.12.17", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.12.17.tgz", - "integrity": "sha512-p2VGmBu9oefLZ2nQpgnEnG0ZlRPvL8gAGvPUMQwUdaE8k49rOMuZpOwdQoy5qJf6K8jL3bcAMhVUlHAjIgJHUg==", + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.19.0.tgz", + "integrity": "sha512-htnV+mHX32DF81amCDrwIDr8nrp1PTm+3wfBN9/v8QJOLEioOCOG7qNyq0nHeFiWbT3Eb7gsPwEmV64UCQ1jzw==", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.12.13", - "regexpu-core": "^4.7.1" + "@babel/helper-annotate-as-pure": "^7.18.6", + "regexpu-core": "^5.1.0" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.2.0.tgz", - "integrity": "sha512-JT8tHuFjKBo8NnaUbblz7mIu1nnvUDiHVjXXkulZULyidvo/7P6TY7+YqpV37IfF+KUFxmlK04elKtGKXaiVgw==", + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.3.tgz", + "integrity": "sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==", "dependencies": { - "@babel/helper-compilation-targets": "^7.13.0", - "@babel/helper-module-imports": "^7.12.13", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/traverse": "^7.13.0", + "@babel/helper-compilation-targets": "^7.17.7", + "@babel/helper-plugin-utils": "^7.16.7", "debug": "^4.1.1", "lodash.debounce": "^4.0.8", "resolve": "^1.14.2", @@ -318,169 +371,234 @@ "semver": "bin/semver.js" } }, - "node_modules/@babel/helper-explode-assignable-expression": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.13.0.tgz", - "integrity": "sha512-qS0peLTDP8kOisG1blKbaoBg/o9OSa1qoumMjTK5pM+KDTtpxpsiubnCGP34vK8BXGcb2M9eigwgvoJryrzwWA==", - "dependencies": { - "@babel/types": "^7.13.0" + "node_modules/@babel/helper-environment-visitor": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", + "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==", + "engines": { + "node": ">=6.9.0" } }, - "node_modules/@babel/helper-function-name": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.2.tgz", - "integrity": "sha512-NYZlkZRydxw+YT56IlhIcS8PAhb+FEUiOzuhFTfqDyPmzAhRge6ua0dQYT/Uh0t/EDHq05/i+e5M2d4XvjgarQ==", + "node_modules/@babel/helper-explode-assignable-expression": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.18.6.tgz", + "integrity": "sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg==", "dependencies": { - "@babel/helper-get-function-arity": "^7.12.13", - "@babel/template": "^7.12.13", - "@babel/types": "^7.14.2" + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" } }, - "node_modules/@babel/helper-get-function-arity": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz", - "integrity": "sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg==", + "node_modules/@babel/helper-function-name": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz", + "integrity": "sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==", "dependencies": { - "@babel/types": "^7.12.13" + "@babel/template": "^7.18.10", + "@babel/types": "^7.19.0" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/helper-hoist-variables": { - "version": "7.13.16", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.13.16.tgz", - "integrity": "sha512-1eMtTrXtrwscjcAeO4BVK+vvkxaLJSPFz1w1KLawz6HLNi9bPFGBNwwDyVfiu1Tv/vRRFYfoGaKhmAQPGPn5Wg==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", + "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", "dependencies": { - "@babel/traverse": "^7.13.15", - "@babel/types": "^7.13.16" + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.13.12.tgz", - "integrity": "sha512-48ql1CLL59aKbU94Y88Xgb2VFy7a95ykGRbJJaaVv+LX5U8wFpLfiGXJJGUozsmA1oEh/o5Bp60Voq7ACyA/Sw==", + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.18.9.tgz", + "integrity": "sha512-RxifAh2ZoVU67PyKIO4AMi1wTenGfMR/O/ae0CCRqwgBAt5v7xjdtRw7UoSbsreKrQn5t7r89eruK/9JjYHuDg==", "dependencies": { - "@babel/types": "^7.13.12" + "@babel/types": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-imports": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.13.12.tgz", - "integrity": "sha512-4cVvR2/1B693IuOvSI20xqqa/+bl7lqAMR59R4iu39R9aOX8/JoYY1sFaNvUMyMBGnHdwvJgUrzNLoUZxXypxA==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", + "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", "dependencies": { - "@babel/types": "^7.13.12" + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.14.2.tgz", - "integrity": "sha512-OznJUda/soKXv0XhpvzGWDnml4Qnwp16GN+D/kZIdLsWoHj05kyu8Rm5kXmMef+rVJZ0+4pSGLkeixdqNUATDA==", + "version": "7.19.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.19.6.tgz", + "integrity": "sha512-fCmcfQo/KYr/VXXDIyd3CBGZ6AFhPFy1TfSEJ+PilGVlQT6jcbqtHAM4C1EciRqMza7/TpOUZliuSH+U6HAhJw==", "dependencies": { - "@babel/helper-module-imports": "^7.13.12", - "@babel/helper-replace-supers": "^7.13.12", - "@babel/helper-simple-access": "^7.13.12", - "@babel/helper-split-export-declaration": "^7.12.13", - "@babel/helper-validator-identifier": "^7.14.0", - "@babel/template": "^7.12.13", - "@babel/traverse": "^7.14.2", - "@babel/types": "^7.14.2" + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-simple-access": "^7.19.4", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/helper-validator-identifier": "^7.19.1", + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.19.6", + "@babel/types": "^7.19.4" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.13.tgz", - "integrity": "sha512-BdWQhoVJkp6nVjB7nkFWcn43dkprYauqtk++Py2eaf/GRDFm5BxRqEIZCiHlZUGAVmtwKcsVL1dC68WmzeFmiA==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz", + "integrity": "sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==", "dependencies": { - "@babel/types": "^7.12.13" + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", - "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==" + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", + "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==", + "engines": { + "node": ">=6.9.0" + } }, "node_modules/@babel/helper-remap-async-to-generator": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.13.0.tgz", - "integrity": "sha512-pUQpFBE9JvC9lrQbpX0TmeNIy5s7GnZjna2lhhcHC7DzgBs6fWn722Y5cfwgrtrqc7NAJwMvOa0mKhq6XaE4jg==", + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.9.tgz", + "integrity": "sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA==", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.12.13", - "@babel/helper-wrap-function": "^7.13.0", - "@babel/types": "^7.13.0" + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-wrap-function": "^7.18.9", + "@babel/types": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, "node_modules/@babel/helper-replace-supers": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.13.12.tgz", - "integrity": "sha512-Gz1eiX+4yDO8mT+heB94aLVNCL+rbuT2xy4YfyNqu8F+OI6vMvJK891qGBTqL9Uc8wxEvRW92Id6G7sDen3fFw==", + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.19.1.tgz", + "integrity": "sha512-T7ahH7wV0Hfs46SFh5Jz3s0B6+o8g3c+7TMxu7xKfmHikg7EAZ3I2Qk9LFhjxXq8sL7UkP5JflezNwoZa8WvWw==", "dependencies": { - "@babel/helper-member-expression-to-functions": "^7.13.12", - "@babel/helper-optimise-call-expression": "^7.12.13", - "@babel/traverse": "^7.13.0", - "@babel/types": "^7.13.12" + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-member-expression-to-functions": "^7.18.9", + "@babel/helper-optimise-call-expression": "^7.18.6", + "@babel/traverse": "^7.19.1", + "@babel/types": "^7.19.0" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/helper-simple-access": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.13.12.tgz", - "integrity": "sha512-7FEjbrx5SL9cWvXioDbnlYTppcZGuCY6ow3/D5vMggb2Ywgu4dMrpTJX0JdQAIcRRUElOIxF3yEooa9gUb9ZbA==", + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.19.4.tgz", + "integrity": "sha512-f9Xq6WqBFqaDfbCzn2w85hwklswz5qsKlh7f08w4Y9yhJHpnNC0QemtSkK5YyOY8kPGvyiwdzZksGUhnGdaUIg==", "dependencies": { - "@babel/types": "^7.13.12" + "@babel/types": "^7.19.4" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.12.1.tgz", - "integrity": "sha512-Mf5AUuhG1/OCChOJ/HcADmvcHM42WJockombn8ATJG3OnyiSxBK/Mm5x78BQWvmtXZKHgbjdGL2kin/HOLlZGA==", + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.18.9.tgz", + "integrity": "sha512-imytd2gHi3cJPsybLRbmFrF7u5BIEuI2cNheyKi3/iOBC63kNn3q8Crn2xVuESli0aM4KYsyEqKyS7lFL8YVtw==", "dependencies": { - "@babel/types": "^7.12.1" + "@babel/types": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/helper-split-export-declaration": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz", - "integrity": "sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", + "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", "dependencies": { - "@babel/types": "^7.12.13" + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz", + "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==", + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.0.tgz", - "integrity": "sha512-V3ts7zMSu5lfiwWDVWzRDGIN+lnCEUdaXgtVHJgLb1rGaA6jMrtB9EmE7L18foXJIE8Un/A/h6NJfGQp/e1J4A==" + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", + "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", + "engines": { + "node": ">=6.9.0" + } }, "node_modules/@babel/helper-validator-option": { - "version": "7.12.17", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.12.17.tgz", - "integrity": "sha512-TopkMDmLzq8ngChwRlyjR6raKD6gMSae4JdYDB8bByKreQgG0RBTuKe9LRxW3wFtUnjxOPRKBDwEH6Mg5KeDfw==" + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", + "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==", + "engines": { + "node": ">=6.9.0" + } }, "node_modules/@babel/helper-wrap-function": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.13.0.tgz", - "integrity": "sha512-1UX9F7K3BS42fI6qd2A4BjKzgGjToscyZTdp1DjknHLCIvpgne6918io+aL5LXFcER/8QWiwpoY902pVEqgTXA==", + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.19.0.tgz", + "integrity": "sha512-txX8aN8CZyYGTwcLhlk87KRqncAzhh5TpQamZUa0/u3an36NtDpUP6bQgBCBcLeBs09R/OwQu3OjK0k/HwfNDg==", "dependencies": { - "@babel/helper-function-name": "^7.12.13", - "@babel/template": "^7.12.13", - "@babel/traverse": "^7.13.0", - "@babel/types": "^7.13.0" + "@babel/helper-function-name": "^7.19.0", + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.19.0", + "@babel/types": "^7.19.0" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/helpers": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.14.0.tgz", - "integrity": "sha512-+ufuXprtQ1D1iZTO/K9+EBRn+qPWMJjZSw/S0KlFrxCw4tkrzv9grgpDHkY9MeQTjTY8i2sp7Jep8DfU6tN9Mg==", + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.19.4.tgz", + "integrity": "sha512-G+z3aOx2nfDHwX/kyVii5fJq+bgscg89/dJNWpYeKeBv3v9xX8EIabmx1k6u9LS04H7nROFVRVK+e3k0VHp+sw==", "dependencies": { - "@babel/template": "^7.12.13", - "@babel/traverse": "^7.14.0", - "@babel/types": "^7.14.0" + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.19.4", + "@babel/types": "^7.19.4" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/highlight": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.0.tgz", - "integrity": "sha512-YSCOwxvTYEIMSGaBQb5kDDsCopDdiUGsqpatp3fOlI4+2HQSkTmEVWnVuySdAC5EWCqSWWTv0ib63RjR7dTBdg==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", + "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", "dependencies": { - "@babel/helper-validator-identifier": "^7.14.0", + "@babel/helper-validator-identifier": "^7.18.6", "chalk": "^2.0.0", "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/highlight/node_modules/ansi-styles": { @@ -518,12 +636,12 @@ "node_modules/@babel/highlight/node_modules/color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" }, "node_modules/@babel/highlight/node_modules/escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "engines": { "node": ">=0.8.0" } @@ -531,7 +649,7 @@ "node_modules/@babel/highlight/node_modules/has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "engines": { "node": ">=4" } @@ -548,9 +666,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.2.tgz", - "integrity": "sha512-IoVDIHpsgE/fu7eXBeRWt8zLbDrSvD7H1gpomOkPpBoEN8KCruCqSDdqo8dddwQQrui30KSvQBaMUOJiuFu6QQ==", + "version": "7.19.6", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.19.6.tgz", + "integrity": "sha512-h1IUp81s2JYJ3mRkdxJgs4UvmSsRvDrx5ICSJbPvtWYv5i1nTBGcBpnog+89rAFMwvvru6E5NUHdBe01UeSzYA==", "bin": { "parser": "bin/babel-parser.js" }, @@ -558,201 +676,262 @@ "node": ">=6.0.0" } }, + "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6.tgz", + "integrity": "sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.13.12.tgz", - "integrity": "sha512-d0u3zWKcoZf379fOeJdr1a5WPDny4aOFZ6hlfKivgK0LY7ZxNfoaHL2fWwdGtHyVvra38FC+HVYkO+byfSA8AQ==", + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.18.9.tgz", + "integrity": "sha512-AHrP9jadvH7qlOj6PINbgSuphjQUAK7AOT7DPjBo9EHoLhQTnnK5u45e1Hd4DbSQEO9nqPWtQ89r+XEOWFScKg==", "dependencies": { - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1", - "@babel/plugin-proposal-optional-chaining": "^7.13.12" + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9", + "@babel/plugin-proposal-optional-chaining": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.13.0" } }, "node_modules/@babel/plugin-proposal-async-generator-functions": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.14.2.tgz", - "integrity": "sha512-b1AM4F6fwck4N8ItZ/AtC4FP/cqZqmKRQ4FaTDutwSYyjuhtvsGEMLK4N/ztV/ImP40BjIDyMgBQAeAMsQYVFQ==", + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.19.1.tgz", + "integrity": "sha512-0yu8vNATgLy4ivqMNBIwb1HebCelqN7YX8SL3FDXORv/RqT0zEEWUCH4GH44JsSrvCu6GqnAdR5EBFAPeNBB4Q==", "dependencies": { - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-remap-async-to-generator": "^7.13.0", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-plugin-utils": "^7.19.0", + "@babel/helper-remap-async-to-generator": "^7.18.9", "@babel/plugin-syntax-async-generators": "^7.8.4" }, + "engines": { + "node": ">=6.9.0" + }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-proposal-class-properties": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.13.0.tgz", - "integrity": "sha512-KnTDjFNC1g+45ka0myZNvSBFLhNCLN+GeGYLDEA8Oq7MZ6yMgfLoIRh86GRT0FjtJhZw8JyUskP9uvj5pHM9Zg==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", + "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.13.0", - "@babel/helper-plugin-utils": "^7.13.0" + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-proposal-class-static-block": { - "version": "7.13.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.13.11.tgz", - "integrity": "sha512-fJTdFI4bfnMjvxJyNuaf8i9mVcZ0UhetaGEUHaHV9KEnibLugJkZAtXikR8KcYj+NYmI4DZMS8yQAyg+hvfSqg==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.18.6.tgz", + "integrity": "sha512-+I3oIiNxrCpup3Gi8n5IGMwj0gOCAjcJUSQEcotNnCCPMEnixawOQ+KeJPlgfjzx+FKQ1QSyZOWe7wmoJp7vhw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/plugin-syntax-class-static-block": "^7.12.13" + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-class-static-block": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.12.0" } }, "node_modules/@babel/plugin-proposal-dynamic-import": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.14.2.tgz", - "integrity": "sha512-oxVQZIWFh91vuNEMKltqNsKLFWkOIyJc95k2Gv9lWVyDfPUQGSSlbDEgWuJUU1afGE9WwlzpucMZ3yDRHIItkA==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz", + "integrity": "sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-plugin-utils": "^7.18.6", "@babel/plugin-syntax-dynamic-import": "^7.8.3" }, + "engines": { + "node": ">=6.9.0" + }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-proposal-export-namespace-from": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.14.2.tgz", - "integrity": "sha512-sRxW3z3Zp3pFfLAgVEvzTFutTXax837oOatUIvSG9o5gRj9mKwm3br1Se5f4QalTQs9x4AzlA/HrCWbQIHASUQ==", + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz", + "integrity": "sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-plugin-utils": "^7.18.9", "@babel/plugin-syntax-export-namespace-from": "^7.8.3" }, + "engines": { + "node": ">=6.9.0" + }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-proposal-json-strings": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.14.2.tgz", - "integrity": "sha512-w2DtsfXBBJddJacXMBhElGEYqCZQqN99Se1qeYn8DVLB33owlrlLftIbMzn5nz1OITfDVknXF433tBrLEAOEjA==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz", + "integrity": "sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-plugin-utils": "^7.18.6", "@babel/plugin-syntax-json-strings": "^7.8.3" }, + "engines": { + "node": ">=6.9.0" + }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-proposal-logical-assignment-operators": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.14.2.tgz", - "integrity": "sha512-1JAZtUrqYyGsS7IDmFeaem+/LJqujfLZ2weLR9ugB0ufUPjzf8cguyVT1g5im7f7RXxuLq1xUxEzvm68uYRtGg==", + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.18.9.tgz", + "integrity": "sha512-128YbMpjCrP35IOExw2Fq+x55LMP42DzhOhX2aNNIdI9avSWl2PI0yuBWarr3RYpZBSPtabfadkH2yeRiMD61Q==", "dependencies": { - "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-plugin-utils": "^7.18.9", "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" }, + "engines": { + "node": ">=6.9.0" + }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.14.2.tgz", - "integrity": "sha512-ebR0zU9OvI2N4qiAC38KIAK75KItpIPTpAtd2r4OZmMFeKbKJpUFLYP2EuDut82+BmYi8sz42B+TfTptJ9iG5Q==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz", + "integrity": "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-plugin-utils": "^7.18.6", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" }, + "engines": { + "node": ">=6.9.0" + }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-proposal-numeric-separator": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.14.2.tgz", - "integrity": "sha512-DcTQY9syxu9BpU3Uo94fjCB3LN9/hgPS8oUL7KrSW3bA2ePrKZZPJcc5y0hoJAM9dft3pGfErtEUvxXQcfLxUg==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz", + "integrity": "sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==", "dependencies": { - "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-plugin-utils": "^7.18.6", "@babel/plugin-syntax-numeric-separator": "^7.10.4" }, + "engines": { + "node": ">=6.9.0" + }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-proposal-object-rest-spread": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.14.2.tgz", - "integrity": "sha512-hBIQFxwZi8GIp934+nj5uV31mqclC1aYDhctDu5khTi9PCCUOczyy0b34W0oE9U/eJXiqQaKyVsmjeagOaSlbw==", + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.19.4.tgz", + "integrity": "sha512-wHmj6LDxVDnL+3WhXteUBaoM1aVILZODAUjg11kHqG4cOlfgMQGxw6aCgvrXrmaJR3Bn14oZhImyCPZzRpC93Q==", "dependencies": { - "@babel/compat-data": "^7.14.0", - "@babel/helper-compilation-targets": "^7.13.16", - "@babel/helper-plugin-utils": "^7.13.0", + "@babel/compat-data": "^7.19.4", + "@babel/helper-compilation-targets": "^7.19.3", + "@babel/helper-plugin-utils": "^7.19.0", "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.14.2" + "@babel/plugin-transform-parameters": "^7.18.8" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-proposal-optional-catch-binding": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.14.2.tgz", - "integrity": "sha512-XtkJsmJtBaUbOxZsNk0Fvrv8eiqgneug0A6aqLFZ4TSkar2L5dSXWcnUKHgmjJt49pyB/6ZHvkr3dPgl9MOWRQ==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz", + "integrity": "sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-plugin-utils": "^7.18.6", "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" }, + "engines": { + "node": ">=6.9.0" + }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-proposal-optional-chaining": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.14.2.tgz", - "integrity": "sha512-qQByMRPwMZJainfig10BoaDldx/+VDtNcrA7qdNaEOAj6VXud+gfrkA8j4CRAU5HjnWREXqIpSpH30qZX1xivA==", + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.18.9.tgz", + "integrity": "sha512-v5nwt4IqBXihxGsW2QmCWMDS3B3bzGIk/EQVZz2ei7f3NJl8NzAJVvUmpDW5q1CRNY+Beb/k58UAH1Km1N411w==", "dependencies": { - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1", + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9", "@babel/plugin-syntax-optional-chaining": "^7.8.3" }, + "engines": { + "node": ">=6.9.0" + }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-proposal-private-methods": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.13.0.tgz", - "integrity": "sha512-MXyyKQd9inhx1kDYPkFRVOBXQ20ES8Pto3T7UZ92xj2mY0EVD8oAVzeyYuVfy/mxAdTSIayOvg+aVzcHV2bn6Q==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz", + "integrity": "sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.13.0", - "@babel/helper-plugin-utils": "^7.13.0" + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-proposal-private-property-in-object": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.14.0.tgz", - "integrity": "sha512-59ANdmEwwRUkLjB7CRtwJxxwtjESw+X2IePItA+RGQh+oy5RmpCh/EvVVvh5XQc3yxsm5gtv0+i9oBZhaDNVTg==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.18.6.tgz", + "integrity": "sha512-9Rysx7FOctvT5ouj5JODjAFAkgGoudQuLPamZb0v1TGLpapdNaftzifU8NTWQm0IRjqoYypdrSmyWgkocDQ8Dw==", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.12.13", - "@babel/helper-create-class-features-plugin": "^7.14.0", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/plugin-syntax-private-property-in-object": "^7.14.0" + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-proposal-unicode-property-regex": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.12.13.tgz", - "integrity": "sha512-XyJmZidNfofEkqFV5VC/bLabGmO5QzenPO/YOfGuEbgU+2sSwMmio3YLb4WtBgcmmdwZHyVyv8on77IUjQ5Gvg==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz", + "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.12.13", - "@babel/helper-plugin-utils": "^7.12.13" + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" }, "engines": { "node": ">=4" @@ -784,11 +963,14 @@ } }, "node_modules/@babel/plugin-syntax-class-static-block": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.12.13.tgz", - "integrity": "sha512-ZmKQ0ZXR0nYpHZIIuj9zE7oIqCx2hw9TKi+lIo73NNrMPAZGHfS92/VRV0ZmPj6H2ffBgyFHXvJ5NYsNeEaP2A==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" @@ -816,6 +998,20 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-syntax-import-assertions": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.18.6.tgz", + "integrity": "sha512-/DU3RXad9+bZwrgWJQKbr39gYbJpLJHezqEzRzi/BHRlJ9zsQb4CK2CA/5apllXNomwA1qHwzvHl+AdEmC5krQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "node_modules/@babel/plugin-syntax-json-strings": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", @@ -828,11 +1024,14 @@ } }, "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.13.tgz", - "integrity": "sha512-d4HM23Q1K7oq/SLNmG6mRt85l2csmQ0cHRaxRXjKW0YFdEXqlZ5kzFQKH5Uc3rDJECgu+yCRgPkG04Mm98R/1g==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz", + "integrity": "sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==", "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" @@ -905,431 +1104,511 @@ } }, "node_modules/@babel/plugin-syntax-private-property-in-object": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.0.tgz", - "integrity": "sha512-bda3xF8wGl5/5btF794utNOL0Jw+9jE5C1sLZcoK7c4uonE/y3iQiyG+KbkF3WBV/paX58VCpjhxLPkdj5Fe4w==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", "dependencies": { - "@babel/helper-plugin-utils": "^7.13.0" + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-syntax-top-level-await": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.13.tgz", - "integrity": "sha512-A81F9pDwyS7yM//KwbCSDqy3Uj4NMIurtplxphWxoYtNPov7cJsDkAFNNyVlIZ3jwGycVsurZ+LtOA8gZ376iQ==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.12.13.tgz", - "integrity": "sha512-cHP3u1JiUiG2LFDKbXnwVad81GvfyIOmCD6HIEId6ojrY0Drfy2q1jw7BwN7dE84+kTnBjLkXoL3IEy/3JPu2w==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.18.6.tgz", + "integrity": "sha512-mAWAuq4rvOepWCBid55JuRNvpTNf2UGVgoz4JV0fXEKolsVZDzsa4NqCef758WZJj/GDu0gVGItjKFiClTAmZA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-arrow-functions": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.13.0.tgz", - "integrity": "sha512-96lgJagobeVmazXFaDrbmCLQxBysKu7U6Do3mLsx27gf5Dk85ezysrs2BZUpXD703U/Su1xTBDxxar2oa4jAGg==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.18.6.tgz", + "integrity": "sha512-9S9X9RUefzrsHZmKMbDXxweEH+YlE8JJEuat9FdvW9Qh1cw7W64jELCtWNkPBPX5En45uy28KGvA/AySqUh8CQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.13.0" + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.13.0.tgz", - "integrity": "sha512-3j6E004Dx0K3eGmhxVJxwwI89CTJrce7lg3UrtFuDAVQ/2+SJ/h/aSFOeE6/n0WB1GsOffsJp6MnPQNQ8nmwhg==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.18.6.tgz", + "integrity": "sha512-ARE5wZLKnTgPW7/1ftQmSi1CmkqqHo2DNmtztFhvgtOWSDfq0Cq9/9L+KnZNYSNrydBekhW3rwShduf59RoXag==", "dependencies": { - "@babel/helper-module-imports": "^7.12.13", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-remap-async-to-generator": "^7.13.0" + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-remap-async-to-generator": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-block-scoped-functions": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.12.13.tgz", - "integrity": "sha512-zNyFqbc3kI/fVpqwfqkg6RvBgFpC4J18aKKMmv7KdQ/1GgREapSJAykLMVNwfRGO3BtHj3YQZl8kxCXPcVMVeg==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz", + "integrity": "sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.14.2.tgz", - "integrity": "sha512-neZZcP19NugZZqNwMTH+KoBjx5WyvESPSIOQb4JHpfd+zPfqcH65RMu5xJju5+6q/Y2VzYrleQTr+b6METyyxg==", + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.19.4.tgz", + "integrity": "sha512-934S2VLLlt2hRJwPf4MczaOr4hYF0z+VKPwqTNxyKX7NthTiPfhuKFWQZHXRM0vh/wo/VyXB3s4bZUNA08l+tQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.13.0" + "@babel/helper-plugin-utils": "^7.19.0" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-classes": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.14.2.tgz", - "integrity": "sha512-7oafAVcucHquA/VZCsXv/gmuiHeYd64UJyyTYU+MPfNu0KeNlxw06IeENBO8bJjXVbolu+j1MM5aKQtH1OMCNg==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.12.13", - "@babel/helper-function-name": "^7.14.2", - "@babel/helper-optimise-call-expression": "^7.12.13", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-replace-supers": "^7.13.12", - "@babel/helper-split-export-declaration": "^7.12.13", + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.19.0.tgz", + "integrity": "sha512-YfeEE9kCjqTS9IitkgfJuxjcEtLUHMqa8yUJ6zdz8vR7hKuo6mOy2C05P0F1tdMmDCeuyidKnlrw/iTppHcr2A==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-compilation-targets": "^7.19.0", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.19.0", + "@babel/helper-optimise-call-expression": "^7.18.6", + "@babel/helper-plugin-utils": "^7.19.0", + "@babel/helper-replace-supers": "^7.18.9", + "@babel/helper-split-export-declaration": "^7.18.6", "globals": "^11.1.0" }, + "engines": { + "node": ">=6.9.0" + }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-computed-properties": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.13.0.tgz", - "integrity": "sha512-RRqTYTeZkZAz8WbieLTvKUEUxZlUTdmL5KGMyZj7FnMfLNKV4+r5549aORG/mgojRmFlQMJDUupwAMiF2Q7OUg==", + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.18.9.tgz", + "integrity": "sha512-+i0ZU1bCDymKakLxn5srGHrsAPRELC2WIbzwjLhHW9SIE1cPYkLCL0NlnXMZaM1vhfgA2+M7hySk42VBvrkBRw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.13.0" + "@babel/helper-plugin-utils": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.13.17", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.13.17.tgz", - "integrity": "sha512-UAUqiLv+uRLO+xuBKKMEpC+t7YRNVRqBsWWq1yKXbBZBje/t3IXCiSinZhjn/DC3qzBfICeYd2EFGEbHsh5RLA==", + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.19.4.tgz", + "integrity": "sha512-t0j0Hgidqf0aM86dF8U+vXYReUgJnlv4bZLsyoPnwZNrGY+7/38o8YjaELrvHeVfTZao15kjR0PVv0nju2iduA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.13.0" + "@babel/helper-plugin-utils": "^7.19.0" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-dotall-regex": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.12.13.tgz", - "integrity": "sha512-foDrozE65ZFdUC2OfgeOCrEPTxdB3yjqxpXh8CH+ipd9CHd4s/iq81kcUpyH8ACGNEPdFqbtzfgzbT/ZGlbDeQ==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.18.6.tgz", + "integrity": "sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg==", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.12.13", - "@babel/helper-plugin-utils": "^7.12.13" + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-duplicate-keys": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.12.13.tgz", - "integrity": "sha512-NfADJiiHdhLBW3pulJlJI2NB0t4cci4WTZ8FtdIuNc2+8pslXdPtRRAEWqUY+m9kNOk2eRYbTAOipAxlrOcwwQ==", + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.9.tgz", + "integrity": "sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" + "@babel/helper-plugin-utils": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.12.13.tgz", - "integrity": "sha512-fbUelkM1apvqez/yYx1/oICVnGo2KM5s63mhGylrmXUxK/IAXSIf87QIxVfZldWf4QsOafY6vV3bX8aMHSvNrA==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz", + "integrity": "sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==", "dependencies": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.12.13", - "@babel/helper-plugin-utils": "^7.12.13" + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-for-of": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.13.0.tgz", - "integrity": "sha512-IHKT00mwUVYE0zzbkDgNRP6SRzvfGCYsOxIRz8KsiaaHCcT9BWIkO+H9QRJseHBLOGBZkHUdHiqj6r0POsdytg==", + "version": "7.18.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.8.tgz", + "integrity": "sha512-yEfTRnjuskWYo0k1mHUqrVWaZwrdq8AYbfrpqULOJOaucGSp4mNMVps+YtA8byoevxS/urwU75vyhQIxcCgiBQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.13.0" + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-function-name": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.12.13.tgz", - "integrity": "sha512-6K7gZycG0cmIwwF7uMK/ZqeCikCGVBdyP2J5SKNCXO5EOHcqi+z7Jwf8AmyDNcBgxET8DrEtCt/mPKPyAzXyqQ==", + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.9.tgz", + "integrity": "sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ==", "dependencies": { - "@babel/helper-function-name": "^7.12.13", - "@babel/helper-plugin-utils": "^7.12.13" + "@babel/helper-compilation-targets": "^7.18.9", + "@babel/helper-function-name": "^7.18.9", + "@babel/helper-plugin-utils": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-literals": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.12.13.tgz", - "integrity": "sha512-FW+WPjSR7hiUxMcKqyNjP05tQ2kmBCdpEpZHY1ARm96tGQCCBvXKnpjILtDplUnJ/eHZ0lALLM+d2lMFSpYJrQ==", + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.9.tgz", + "integrity": "sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==", "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" + "@babel/helper-plugin-utils": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-member-expression-literals": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.12.13.tgz", - "integrity": "sha512-kxLkOsg8yir4YeEPHLuO2tXP9R/gTjpuTOjshqSpELUN3ZAg2jfDnKUvzzJxObun38sw3wm4Uu69sX/zA7iRvg==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.18.6.tgz", + "integrity": "sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.14.2.tgz", - "integrity": "sha512-hPC6XBswt8P3G2D1tSV2HzdKvkqOpmbyoy+g73JG0qlF/qx2y3KaMmXb1fLrpmWGLZYA0ojCvaHdzFWjlmV+Pw==", + "version": "7.19.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.19.6.tgz", + "integrity": "sha512-uG3od2mXvAtIFQIh0xrpLH6r5fpSQN04gIVovl+ODLdUMANokxQLZnPBHcjmv3GxRjnqwLuHvppjjcelqUFZvg==", "dependencies": { - "@babel/helper-module-transforms": "^7.14.2", - "@babel/helper-plugin-utils": "^7.13.0", - "babel-plugin-dynamic-import-node": "^2.3.3" + "@babel/helper-module-transforms": "^7.19.6", + "@babel/helper-plugin-utils": "^7.19.0" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-modules-amd/node_modules/babel-plugin-dynamic-import-node": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", - "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", - "dependencies": { - "object.assign": "^4.1.0" - } - }, "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.14.0.tgz", - "integrity": "sha512-EX4QePlsTaRZQmw9BsoPeyh5OCtRGIhwfLquhxGp5e32w+dyL8htOcDwamlitmNFK6xBZYlygjdye9dbd9rUlQ==", + "version": "7.19.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.19.6.tgz", + "integrity": "sha512-8PIa1ym4XRTKuSsOUXqDG0YaOlEuTVvHMe5JCfgBMOtHvJKw/4NGovEGN33viISshG/rZNVrACiBmPQLvWN8xQ==", "dependencies": { - "@babel/helper-module-transforms": "^7.14.0", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-simple-access": "^7.13.12", - "babel-plugin-dynamic-import-node": "^2.3.3" + "@babel/helper-module-transforms": "^7.19.6", + "@babel/helper-plugin-utils": "^7.19.0", + "@babel/helper-simple-access": "^7.19.4" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-modules-commonjs/node_modules/babel-plugin-dynamic-import-node": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", - "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", - "dependencies": { - "object.assign": "^4.1.0" - } - }, "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.13.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.13.8.tgz", - "integrity": "sha512-hwqctPYjhM6cWvVIlOIe27jCIBgHCsdH2xCJVAYQm7V5yTMoilbVMi9f6wKg0rpQAOn6ZG4AOyvCqFF/hUh6+A==", + "version": "7.19.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.19.6.tgz", + "integrity": "sha512-fqGLBepcc3kErfR9R3DnVpURmckXP7gj7bAlrTQyBxrigFqszZCkFkcoxzCp2v32XmwXLvbw+8Yq9/b+QqksjQ==", "dependencies": { - "@babel/helper-hoist-variables": "^7.13.0", - "@babel/helper-module-transforms": "^7.13.0", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-validator-identifier": "^7.12.11", - "babel-plugin-dynamic-import-node": "^2.3.3" + "@babel/helper-hoist-variables": "^7.18.6", + "@babel/helper-module-transforms": "^7.19.6", + "@babel/helper-plugin-utils": "^7.19.0", + "@babel/helper-validator-identifier": "^7.19.1" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-modules-systemjs/node_modules/babel-plugin-dynamic-import-node": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", - "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", - "dependencies": { - "object.assign": "^4.1.0" - } - }, "node_modules/@babel/plugin-transform-modules-umd": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.14.0.tgz", - "integrity": "sha512-nPZdnWtXXeY7I87UZr9VlsWme3Y0cfFFE41Wbxz4bbaexAjNMInXPFUpRRUJ8NoMm0Cw+zxbqjdPmLhcjfazMw==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.6.tgz", + "integrity": "sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ==", "dependencies": { - "@babel/helper-module-transforms": "^7.14.0", - "@babel/helper-plugin-utils": "^7.13.0" + "@babel/helper-module-transforms": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.12.13.tgz", - "integrity": "sha512-Xsm8P2hr5hAxyYblrfACXpQKdQbx4m2df9/ZZSQ8MAhsadw06+jW7s9zsSw6he+mJZXRlVMyEnVktJo4zjk1WA==", + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.19.1.tgz", + "integrity": "sha512-oWk9l9WItWBQYS4FgXD4Uyy5kq898lvkXpXQxoJEY1RnvPk4R/Dvu2ebXU9q8lP+rlMwUQTFf2Ok6d78ODa0kw==", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.12.13" + "@babel/helper-create-regexp-features-plugin": "^7.19.0", + "@babel/helper-plugin-utils": "^7.19.0" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "node_modules/@babel/plugin-transform-new-target": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.12.13.tgz", - "integrity": "sha512-/KY2hbLxrG5GTQ9zzZSc3xWiOy379pIETEhbtzwZcw9rvuaVV4Fqy7BYGYOWZnaoXIQYbbJ0ziXLa/sKcGCYEQ==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.6.tgz", + "integrity": "sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-object-super": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.12.13.tgz", - "integrity": "sha512-JzYIcj3XtYspZDV8j9ulnoMPZZnF/Cj0LUxPOjR89BdBVx+zYJI9MdMIlUZjbXDX+6YVeS6I3e8op+qQ3BYBoQ==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz", + "integrity": "sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13", - "@babel/helper-replace-supers": "^7.12.13" + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-replace-supers": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-parameters": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.14.2.tgz", - "integrity": "sha512-NxoVmA3APNCC1JdMXkdYXuQS+EMdqy0vIwyDHeKHiJKRxmp1qGSdb0JLEIoPRhkx6H/8Qi3RJ3uqOCYw8giy9A==", + "version": "7.18.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.18.8.tgz", + "integrity": "sha512-ivfbE3X2Ss+Fj8nnXvKJS6sjRG4gzwPMsP+taZC+ZzEGjAYlvENixmt1sZ5Ca6tWls+BlKSGKPJ6OOXvXCbkFg==", "dependencies": { - "@babel/helper-plugin-utils": "^7.13.0" + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-property-literals": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.12.13.tgz", - "integrity": "sha512-nqVigwVan+lR+g8Fj8Exl0UQX2kymtjcWfMOYM1vTYEKujeyv2SkMgazf2qNcK7l4SDiKyTA/nHCPqL4e2zo1A==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz", + "integrity": "sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==", "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-react-constant-elements": { - "version": "7.13.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.13.13.tgz", - "integrity": "sha512-SNJU53VM/SjQL0bZhyU+f4kJQz7bQQajnrZRSaU21hruG/NWY41AEM9AWXeXX90pYr/C2yAmTgI6yW3LlLrAUQ==", + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.20.2.tgz", + "integrity": "sha512-KS/G8YI8uwMGKErLFOHS/ekhqdHhpEloxs43NecQHVgo2QuQSyJhGIY1fL8UGl9wy5ItVwwoUL4YxVqsplGq2g==", "dependencies": { - "@babel/helper-plugin-utils": "^7.13.0" + "@babel/helper-plugin-utils": "^7.20.2" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-react-display-name": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.14.2.tgz", - "integrity": "sha512-zCubvP+jjahpnFJvPaHPiGVfuVUjXHhFvJKQdNnsmSsiU9kR/rCZ41jHc++tERD2zV+p7Hr6is+t5b6iWTCqSw==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.18.6.tgz", + "integrity": "sha512-TV4sQ+T013n61uMoygyMRm+xf04Bd5oqFpv2jAEQwSZ8NwQA7zeRPg1LMVg2PWi3zWBz+CLKD+v5bcpZ/BS0aA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.13.0" + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-react-jsx": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.13.12.tgz", - "integrity": "sha512-jcEI2UqIcpCqB5U5DRxIl0tQEProI2gcu+g8VTIqxLO5Iidojb4d77q+fwGseCvd8af/lJ9masp4QWzBXFE2xA==", + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.19.0.tgz", + "integrity": "sha512-UVEvX3tXie3Szm3emi1+G63jyw1w5IcMY0FSKM+CRnKRI5Mr1YbCNgsSTwoTwKphQEG9P+QqmuRFneJPZuHNhg==", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.12.13", - "@babel/helper-module-imports": "^7.13.12", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/plugin-syntax-jsx": "^7.12.13", - "@babel/types": "^7.13.12" + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-plugin-utils": "^7.19.0", + "@babel/plugin-syntax-jsx": "^7.18.6", + "@babel/types": "^7.19.0" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-react-jsx-development": { - "version": "7.12.17", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.12.17.tgz", - "integrity": "sha512-BPjYV86SVuOaudFhsJR1zjgxxOhJDt6JHNoD48DxWEIxUCAMjV1ys6DYw4SDYZh0b1QsS2vfIA9t/ZsQGsDOUQ==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.18.6.tgz", + "integrity": "sha512-SA6HEjwYFKF7WDjWcMcMGUimmw/nhNRDWxr+KaLSCrkD/LMDBvWRmHAYgE1HDeF8KUuI8OAu+RT6EOtKxSW2qA==", "dependencies": { - "@babel/plugin-transform-react-jsx": "^7.12.17" + "@babel/plugin-transform-react-jsx": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-react-pure-annotations": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.12.1.tgz", - "integrity": "sha512-RqeaHiwZtphSIUZ5I85PEH19LOSzxfuEazoY7/pWASCAIBuATQzpSVD+eT6MebeeZT2F4eSL0u4vw6n4Nm0Mjg==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.18.6.tgz", + "integrity": "sha512-I8VfEPg9r2TRDdvnHgPepTKvuRomzA8+u+nhY7qSI1fR2hRNebasZEETLyM5mAUr0Ku56OkXJ0I7NHJnO6cJiQ==", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.13.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.13.15.tgz", - "integrity": "sha512-Bk9cOLSz8DiurcMETZ8E2YtIVJbFCPGW28DJWUakmyVWtQSm6Wsf0p4B4BfEr/eL2Nkhe/CICiUiMOCi1TPhuQ==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.18.6.tgz", + "integrity": "sha512-poqRI2+qiSdeldcz4wTSTXBRryoq3Gc70ye7m7UD5Ww0nE29IXqMl6r7Nd15WBgRd74vloEMlShtH6CKxVzfmQ==", "dependencies": { - "regenerator-transform": "^0.14.2" + "@babel/helper-plugin-utils": "^7.18.6", + "regenerator-transform": "^0.15.0" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-reserved-words": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.12.13.tgz", - "integrity": "sha512-xhUPzDXxZN1QfiOy/I5tyye+TRz6lA7z6xaT4CLOjPRMVg1ldRf0LHw0TDBpYL4vG78556WuHdyO9oi5UmzZBg==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.18.6.tgz", + "integrity": "sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-runtime": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.14.2.tgz", - "integrity": "sha512-LyA2AiPkaYzI7G5e2YI4NCasTfFe7mZvlupNprDOB7CdNUHb2DQC4uV6oeZ0396gOcicUzUCh0MShL6wiUgk+Q==", - "dependencies": { - "@babel/helper-module-imports": "^7.13.12", - "@babel/helper-plugin-utils": "^7.13.0", - "babel-plugin-polyfill-corejs2": "^0.2.0", - "babel-plugin-polyfill-corejs3": "^0.2.0", - "babel-plugin-polyfill-regenerator": "^0.2.0", + "version": "7.19.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.19.6.tgz", + "integrity": "sha512-PRH37lz4JU156lYFW1p8OxE5i7d6Sl/zV58ooyr+q1J1lnQPyg5tIiXlIwNVhJaY4W3TmOtdc8jqdXQcB1v5Yw==", + "dependencies": { + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-plugin-utils": "^7.19.0", + "babel-plugin-polyfill-corejs2": "^0.3.3", + "babel-plugin-polyfill-corejs3": "^0.6.0", + "babel-plugin-polyfill-regenerator": "^0.4.1", "semver": "^6.3.0" }, + "engines": { + "node": ">=6.9.0" + }, "peerDependencies": { "@babel/core": "^7.0.0-0" } @@ -1343,127 +1622,153 @@ } }, "node_modules/@babel/plugin-transform-shorthand-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.12.13.tgz", - "integrity": "sha512-xpL49pqPnLtf0tVluuqvzWIgLEhuPpZzvs2yabUHSKRNlN7ScYU7aMlmavOeyXJZKgZKQRBlh8rHbKiJDraTSw==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz", + "integrity": "sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-spread": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.13.0.tgz", - "integrity": "sha512-V6vkiXijjzYeFmQTr3dBxPtZYLPcUfY34DebOU27jIl2M/Y8Egm52Hw82CSjjPqd54GTlJs5x+CR7HeNr24ckg==", + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.19.0.tgz", + "integrity": "sha512-RsuMk7j6n+r752EtzyScnWkQyuJdli6LdO5Klv8Yx0OfPVTcQkIUfS8clx5e9yHXzlnhOZF3CbQ8C2uP5j074w==", "dependencies": { - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1" + "@babel/helper-plugin-utils": "^7.19.0", + "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-sticky-regex": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.12.13.tgz", - "integrity": "sha512-Jc3JSaaWT8+fr7GRvQP02fKDsYk4K/lYwWq38r/UGfaxo89ajud321NH28KRQ7xy1Ybc0VUE5Pz8psjNNDUglg==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.18.6.tgz", + "integrity": "sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==", "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-template-literals": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.13.0.tgz", - "integrity": "sha512-d67umW6nlfmr1iehCcBv69eSUSySk1EsIS8aTDX4Xo9qajAh6mYtcl4kJrBkGXuxZPEgVr7RVfAvNW6YQkd4Mw==", + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.9.tgz", + "integrity": "sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.13.0" + "@babel/helper-plugin-utils": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.12.13.tgz", - "integrity": "sha512-eKv/LmUJpMnu4npgfvs3LiHhJua5fo/CysENxa45YCQXZwKnGCQKAg87bvoqSW1fFT+HA32l03Qxsm8ouTY3ZQ==", + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.9.tgz", + "integrity": "sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" + "@babel/helper-plugin-utils": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-typescript": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.13.0.tgz", - "integrity": "sha512-elQEwluzaU8R8dbVuW2Q2Y8Nznf7hnjM7+DSCd14Lo5fF63C9qNLbwZYbmZrtV9/ySpSUpkRpQXvJb6xyu4hCQ==", + "version": "7.19.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.19.3.tgz", + "integrity": "sha512-z6fnuK9ve9u/0X0rRvI9MY0xg+DOUaABDYOe+/SQTxtlptaBB/V9JIUxJn6xp3lMBeb9qe8xSFmHU35oZDXD+w==", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.13.0", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/plugin-syntax-typescript": "^7.12.13" + "@babel/helper-create-class-features-plugin": "^7.19.0", + "@babel/helper-plugin-utils": "^7.19.0", + "@babel/plugin-syntax-typescript": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-unicode-escapes": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.12.13.tgz", - "integrity": "sha512-0bHEkdwJ/sN/ikBHfSmOXPypN/beiGqjo+o4/5K+vxEFNPRPdImhviPakMKG4x96l85emoa0Z6cDflsdBusZbw==", + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.18.10.tgz", + "integrity": "sha512-kKAdAI+YzPgGY/ftStBFXTI1LZFju38rYThnfMykS+IXy8BVx+res7s2fxf1l8I35DV2T97ezo6+SGrXz6B3iQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" + "@babel/helper-plugin-utils": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-unicode-regex": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.12.13.tgz", - "integrity": "sha512-mDRzSNY7/zopwisPZ5kM9XKCfhchqIYwAKRERtEnhYscZB79VRekuRSoYbN0+KVe3y8+q1h6A4svXtP7N+UoCA==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz", + "integrity": "sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.12.13", - "@babel/helper-plugin-utils": "^7.12.13" + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/preset-env": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.14.2.tgz", - "integrity": "sha512-7dD7lVT8GMrE73v4lvDEb85cgcQhdES91BSD7jS/xjC6QY8PnRhux35ac+GCpbiRhp8crexBvZZqnaL6VrY8TQ==", - "dependencies": { - "@babel/compat-data": "^7.14.0", - "@babel/helper-compilation-targets": "^7.13.16", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-validator-option": "^7.12.17", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.13.12", - "@babel/plugin-proposal-async-generator-functions": "^7.14.2", - "@babel/plugin-proposal-class-properties": "^7.13.0", - "@babel/plugin-proposal-class-static-block": "^7.13.11", - "@babel/plugin-proposal-dynamic-import": "^7.14.2", - "@babel/plugin-proposal-export-namespace-from": "^7.14.2", - "@babel/plugin-proposal-json-strings": "^7.14.2", - "@babel/plugin-proposal-logical-assignment-operators": "^7.14.2", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.14.2", - "@babel/plugin-proposal-numeric-separator": "^7.14.2", - "@babel/plugin-proposal-object-rest-spread": "^7.14.2", - "@babel/plugin-proposal-optional-catch-binding": "^7.14.2", - "@babel/plugin-proposal-optional-chaining": "^7.14.2", - "@babel/plugin-proposal-private-methods": "^7.13.0", - "@babel/plugin-proposal-private-property-in-object": "^7.14.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.12.13", + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.19.4.tgz", + "integrity": "sha512-5QVOTXUdqTCjQuh2GGtdd7YEhoRXBMVGROAtsBeLGIbIz3obCBIfRMT1I3ZKkMgNzwkyCkftDXSSkHxnfVf4qg==", + "dependencies": { + "@babel/compat-data": "^7.19.4", + "@babel/helper-compilation-targets": "^7.19.3", + "@babel/helper-plugin-utils": "^7.19.0", + "@babel/helper-validator-option": "^7.18.6", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.18.6", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.18.9", + "@babel/plugin-proposal-async-generator-functions": "^7.19.1", + "@babel/plugin-proposal-class-properties": "^7.18.6", + "@babel/plugin-proposal-class-static-block": "^7.18.6", + "@babel/plugin-proposal-dynamic-import": "^7.18.6", + "@babel/plugin-proposal-export-namespace-from": "^7.18.9", + "@babel/plugin-proposal-json-strings": "^7.18.6", + "@babel/plugin-proposal-logical-assignment-operators": "^7.18.9", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.6", + "@babel/plugin-proposal-numeric-separator": "^7.18.6", + "@babel/plugin-proposal-object-rest-spread": "^7.19.4", + "@babel/plugin-proposal-optional-catch-binding": "^7.18.6", + "@babel/plugin-proposal-optional-chaining": "^7.18.9", + "@babel/plugin-proposal-private-methods": "^7.18.6", + "@babel/plugin-proposal-private-property-in-object": "^7.18.6", + "@babel/plugin-proposal-unicode-property-regex": "^7.18.6", "@babel/plugin-syntax-async-generators": "^7.8.4", "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-syntax-class-static-block": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", "@babel/plugin-syntax-dynamic-import": "^7.8.3", "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-import-assertions": "^7.18.6", "@babel/plugin-syntax-json-strings": "^7.8.3", "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", @@ -1471,48 +1776,51 @@ "@babel/plugin-syntax-object-rest-spread": "^7.8.3", "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-private-property-in-object": "^7.14.0", - "@babel/plugin-syntax-top-level-await": "^7.12.13", - "@babel/plugin-transform-arrow-functions": "^7.13.0", - "@babel/plugin-transform-async-to-generator": "^7.13.0", - "@babel/plugin-transform-block-scoped-functions": "^7.12.13", - "@babel/plugin-transform-block-scoping": "^7.14.2", - "@babel/plugin-transform-classes": "^7.14.2", - "@babel/plugin-transform-computed-properties": "^7.13.0", - "@babel/plugin-transform-destructuring": "^7.13.17", - "@babel/plugin-transform-dotall-regex": "^7.12.13", - "@babel/plugin-transform-duplicate-keys": "^7.12.13", - "@babel/plugin-transform-exponentiation-operator": "^7.12.13", - "@babel/plugin-transform-for-of": "^7.13.0", - "@babel/plugin-transform-function-name": "^7.12.13", - "@babel/plugin-transform-literals": "^7.12.13", - "@babel/plugin-transform-member-expression-literals": "^7.12.13", - "@babel/plugin-transform-modules-amd": "^7.14.2", - "@babel/plugin-transform-modules-commonjs": "^7.14.0", - "@babel/plugin-transform-modules-systemjs": "^7.13.8", - "@babel/plugin-transform-modules-umd": "^7.14.0", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.12.13", - "@babel/plugin-transform-new-target": "^7.12.13", - "@babel/plugin-transform-object-super": "^7.12.13", - "@babel/plugin-transform-parameters": "^7.14.2", - "@babel/plugin-transform-property-literals": "^7.12.13", - "@babel/plugin-transform-regenerator": "^7.13.15", - "@babel/plugin-transform-reserved-words": "^7.12.13", - "@babel/plugin-transform-shorthand-properties": "^7.12.13", - "@babel/plugin-transform-spread": "^7.13.0", - "@babel/plugin-transform-sticky-regex": "^7.12.13", - "@babel/plugin-transform-template-literals": "^7.13.0", - "@babel/plugin-transform-typeof-symbol": "^7.12.13", - "@babel/plugin-transform-unicode-escapes": "^7.12.13", - "@babel/plugin-transform-unicode-regex": "^7.12.13", - "@babel/preset-modules": "^0.1.4", - "@babel/types": "^7.14.2", - "babel-plugin-polyfill-corejs2": "^0.2.0", - "babel-plugin-polyfill-corejs3": "^0.2.0", - "babel-plugin-polyfill-regenerator": "^0.2.0", - "core-js-compat": "^3.9.0", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5", + "@babel/plugin-transform-arrow-functions": "^7.18.6", + "@babel/plugin-transform-async-to-generator": "^7.18.6", + "@babel/plugin-transform-block-scoped-functions": "^7.18.6", + "@babel/plugin-transform-block-scoping": "^7.19.4", + "@babel/plugin-transform-classes": "^7.19.0", + "@babel/plugin-transform-computed-properties": "^7.18.9", + "@babel/plugin-transform-destructuring": "^7.19.4", + "@babel/plugin-transform-dotall-regex": "^7.18.6", + "@babel/plugin-transform-duplicate-keys": "^7.18.9", + "@babel/plugin-transform-exponentiation-operator": "^7.18.6", + "@babel/plugin-transform-for-of": "^7.18.8", + "@babel/plugin-transform-function-name": "^7.18.9", + "@babel/plugin-transform-literals": "^7.18.9", + "@babel/plugin-transform-member-expression-literals": "^7.18.6", + "@babel/plugin-transform-modules-amd": "^7.18.6", + "@babel/plugin-transform-modules-commonjs": "^7.18.6", + "@babel/plugin-transform-modules-systemjs": "^7.19.0", + "@babel/plugin-transform-modules-umd": "^7.18.6", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.19.1", + "@babel/plugin-transform-new-target": "^7.18.6", + "@babel/plugin-transform-object-super": "^7.18.6", + "@babel/plugin-transform-parameters": "^7.18.8", + "@babel/plugin-transform-property-literals": "^7.18.6", + "@babel/plugin-transform-regenerator": "^7.18.6", + "@babel/plugin-transform-reserved-words": "^7.18.6", + "@babel/plugin-transform-shorthand-properties": "^7.18.6", + "@babel/plugin-transform-spread": "^7.19.0", + "@babel/plugin-transform-sticky-regex": "^7.18.6", + "@babel/plugin-transform-template-literals": "^7.18.9", + "@babel/plugin-transform-typeof-symbol": "^7.18.9", + "@babel/plugin-transform-unicode-escapes": "^7.18.10", + "@babel/plugin-transform-unicode-regex": "^7.18.6", + "@babel/preset-modules": "^0.1.5", + "@babel/types": "^7.19.4", + "babel-plugin-polyfill-corejs2": "^0.3.3", + "babel-plugin-polyfill-corejs3": "^0.6.0", + "babel-plugin-polyfill-regenerator": "^0.4.1", + "core-js-compat": "^3.25.1", "semver": "^6.3.0" }, + "engines": { + "node": ">=6.9.0" + }, "peerDependencies": { "@babel/core": "^7.0.0-0" } @@ -1526,9 +1834,9 @@ } }, "node_modules/@babel/preset-modules": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.4.tgz", - "integrity": "sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg==", + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", + "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", "dependencies": { "@babel/helper-plugin-utils": "^7.0.0", "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", @@ -1541,90 +1849,124 @@ } }, "node_modules/@babel/preset-react": { - "version": "7.13.13", - "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.13.13.tgz", - "integrity": "sha512-gx+tDLIE06sRjKJkVtpZ/t3mzCDOnPG+ggHZG9lffUbX8+wC739x20YQc9V35Do6ZAxaUc/HhVHIiOzz5MvDmA==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.18.6.tgz", + "integrity": "sha512-zXr6atUmyYdiWRVLOZahakYmOBHtWc2WGCkP8PYTgZi0iJXDY2CN180TdrIW4OGOAdLc7TifzDIvtx6izaRIzg==", "dependencies": { - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-validator-option": "^7.12.17", - "@babel/plugin-transform-react-display-name": "^7.12.13", - "@babel/plugin-transform-react-jsx": "^7.13.12", - "@babel/plugin-transform-react-jsx-development": "^7.12.17", - "@babel/plugin-transform-react-pure-annotations": "^7.12.1" + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-validator-option": "^7.18.6", + "@babel/plugin-transform-react-display-name": "^7.18.6", + "@babel/plugin-transform-react-jsx": "^7.18.6", + "@babel/plugin-transform-react-jsx-development": "^7.18.6", + "@babel/plugin-transform-react-pure-annotations": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/preset-typescript": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.13.0.tgz", - "integrity": "sha512-LXJwxrHy0N3f6gIJlYbLta1D9BDtHpQeqwzM0LIfjDlr6UE/D5Mc7W4iDiQzaE+ks0sTjT26ArcHWnJVt0QiHw==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.18.6.tgz", + "integrity": "sha512-s9ik86kXBAnD760aybBucdpnLsAt0jK1xqJn2juOn9lkOvSHV60os5hxoVJsPzMQxvnUJFAlkont2DvvaYEBtQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-validator-option": "^7.12.17", - "@babel/plugin-transform-typescript": "^7.13.0" + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-validator-option": "^7.18.6", + "@babel/plugin-transform-typescript": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/runtime": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.14.0.tgz", - "integrity": "sha512-JELkvo/DlpNdJ7dlyw/eY7E0suy5i5GQH+Vlxaq1nsNJ+H7f4Vtv3jMeCEgRhZZQFXTjldYfQgv2qmM6M1v5wA==", + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.19.4.tgz", + "integrity": "sha512-EXpLCrk55f+cYqmHsSR+yD/0gAIMxxA9QK9lnQWzhMCvt+YmoBN7Zx94s++Kv0+unHk39vxNO8t+CMA2WSS3wA==", "dependencies": { "regenerator-runtime": "^0.13.4" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/runtime-corejs3": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.14.0.tgz", - "integrity": "sha512-0R0HTZWHLk6G8jIk0FtoX+AatCtKnswS98VhXwGImFc759PJRp4Tru0PQYZofyijTFUr+gT8Mu7sgXVJLQ0ceg==", + "version": "7.19.6", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.19.6.tgz", + "integrity": "sha512-oWNn1ZlGde7b4i/3tnixpH9qI0bOAACiUs+KEES4UUCnsPjVWFlWdLV/iwJuPC2qp3EowbAqsm+0XqNwnwYhxA==", "dependencies": { - "core-js-pure": "^3.0.0", + "core-js-pure": "^3.25.1", "regenerator-runtime": "^0.13.4" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/template": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.13.tgz", - "integrity": "sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA==", + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz", + "integrity": "sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==", "dependencies": { - "@babel/code-frame": "^7.12.13", - "@babel/parser": "^7.12.13", - "@babel/types": "^7.12.13" + "@babel/code-frame": "^7.18.6", + "@babel/parser": "^7.18.10", + "@babel/types": "^7.18.10" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.2.tgz", - "integrity": "sha512-TsdRgvBFHMyHOOzcP9S6QU0QQtjxlRpEYOy3mcCO5RgmC305ki42aSAmfZEMSSYBla2oZ9BMqYlncBaKmD/7iA==", - "dependencies": { - "@babel/code-frame": "^7.12.13", - "@babel/generator": "^7.14.2", - "@babel/helper-function-name": "^7.14.2", - "@babel/helper-split-export-declaration": "^7.12.13", - "@babel/parser": "^7.14.2", - "@babel/types": "^7.14.2", + "version": "7.19.6", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.19.6.tgz", + "integrity": "sha512-6l5HrUCzFM04mfbG09AagtYyR2P0B71B1wN7PfSPiksDPz2k5H9CBC1tcZpz2M8OxbKTPccByoOJ22rUKbpmQQ==", + "dependencies": { + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.19.6", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.19.0", + "@babel/helper-hoist-variables": "^7.18.6", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/parser": "^7.19.6", + "@babel/types": "^7.19.4", "debug": "^4.1.0", "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/types": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.2.tgz", - "integrity": "sha512-SdjAG/3DikRHpUOjxZgnkbR11xUlyDMUFJdvnIgZEE16mqmY0BINMmc4//JMJglEmn6i7sq6p+mGrFWyZ98EEw==", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.20.7.tgz", + "integrity": "sha512-69OnhBxSSgK0OzTJai4kyPDiKTIe3j+ctaHdIGVbRahTLAT7L3R9oeXHC2aVSuGYt3cVnoAMDmOCgJ2yaiLMvg==", "dependencies": { - "@babel/helper-validator-identifier": "^7.14.0", + "@babel/helper-string-parser": "^7.19.4", + "@babel/helper-validator-identifier": "^7.19.1", "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@colors/colors": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", + "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", + "optional": true, + "engines": { + "node": ">=0.1.90" } }, "node_modules/@crowdin/cli": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/@crowdin/cli/-/cli-3.6.1.tgz", - "integrity": "sha512-RUKFrPCX3R1MJPyRpBSqWFwmjbDlVWLHtXAzx2FPeyjnyMXrXLPJ8YEl4t8YU+96q/0t46qTdmMLeQmYyDEvGQ==", + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/@crowdin/cli/-/cli-3.9.0.tgz", + "integrity": "sha512-4wQjqJZmU/mg3VYfRL6IYXw/pPAL9vdfW3QVSBovYA+bYaEt43ZuGsSrqeBGOhLehasWwRqklXWsl96gxQlLdw==", "dependencies": { + "njre": "^0.2.0", "shelljs": "^0.8.4" }, "bin": { @@ -1632,130 +1974,195 @@ } }, "node_modules/@docsearch/css": { - "version": "3.0.0-alpha.36", - "resolved": "https://registry.npmjs.org/@docsearch/css/-/css-3.0.0-alpha.36.tgz", - "integrity": "sha512-zSN2SXuZPDqQaSFzYa1kOwToukqzhLHG7c66iO+/PlmWb6/RZ5cjTkG6VCJynlohRWea7AqZKWS/ptm8kM2Dmg==" + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/@docsearch/css/-/css-3.2.2.tgz", + "integrity": "sha512-VB0Evx4ikS1ZlW1YVUw+vI9b3H/UXMCo4W/ZWy+n56Sho4KOqyCHcINVays91TJt7HTV/CKO3FCbm2VJg5Wipw==" }, "node_modules/@docsearch/react": { - "version": "3.0.0-alpha.36", - "resolved": "https://registry.npmjs.org/@docsearch/react/-/react-3.0.0-alpha.36.tgz", - "integrity": "sha512-synYZDHalvMzesFiy7kK+uoz4oTdWSTbe2cU+iiUjwFMyQ+WWjWwGVnvcvk+cjj9pRCVaZo5y5WpqNXq1j8k9Q==", + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/@docsearch/react/-/react-3.2.2.tgz", + "integrity": "sha512-1Hn2SNQUFVPrzqvaj+vxXZfsfn3rnW8CoyGAJ1LqXMY9py8GbxK8VfmJ5Z6z4LwG9849tGru/N6dp0cQO6r9Ag==", "dependencies": { - "@algolia/autocomplete-core": "1.0.0-alpha.44", - "@algolia/autocomplete-preset-algolia": "1.0.0-alpha.44", - "@docsearch/css": "3.0.0-alpha.36", + "@algolia/autocomplete-core": "1.7.1", + "@algolia/autocomplete-preset-algolia": "1.7.1", + "@docsearch/css": "3.2.2", "algoliasearch": "^4.0.0" }, "peerDependencies": { - "@types/react": ">= 16.8.0 < 18.0.0", - "react": ">= 16.8.0 < 18.0.0", - "react-dom": ">= 16.8.0 < 18.0.0" + "@types/react": ">= 16.8.0 < 19.0.0", + "react": ">= 16.8.0 < 19.0.0", + "react-dom": ">= 16.8.0 < 19.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "react": { + "optional": true + }, + "react-dom": { + "optional": true + } } }, "node_modules/@docusaurus/core": { - "version": "2.0.0-beta.0", - "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-2.0.0-beta.0.tgz", - "integrity": "sha512-xWwpuEwFRKJmZvNGOpr/dyRDnx/psckLPsozQTg2hu3u81Wqu9gigWgYK/C2fPlEjxMcVw0/2WH+zwpbyWmF2Q==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-2.2.0.tgz", + "integrity": "sha512-Vd6XOluKQqzG12fEs9prJgDtyn6DPok9vmUWDR2E6/nV5Fl9SVkhEQOBxwObjk3kQh7OY7vguFaLh0jqdApWsA==", "dependencies": { - "@babel/core": "^7.12.16", - "@babel/generator": "^7.12.15", + "@babel/core": "^7.18.6", + "@babel/generator": "^7.18.7", "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-transform-runtime": "^7.12.15", - "@babel/preset-env": "^7.12.16", - "@babel/preset-react": "^7.12.13", - "@babel/preset-typescript": "^7.12.16", - "@babel/runtime": "^7.12.5", - "@babel/runtime-corejs3": "^7.12.13", - "@babel/traverse": "^7.12.13", - "@docusaurus/cssnano-preset": "2.0.0-beta.0", - "@docusaurus/react-loadable": "5.5.0", - "@docusaurus/types": "2.0.0-beta.0", - "@docusaurus/utils": "2.0.0-beta.0", - "@docusaurus/utils-validation": "2.0.0-beta.0", - "@endiliey/static-site-generator-webpack-plugin": "^4.0.0", - "@svgr/webpack": "^5.5.0", - "autoprefixer": "^10.2.5", - "babel-loader": "^8.2.2", - "babel-plugin-dynamic-import-node": "2.3.0", - "boxen": "^5.0.0", - "chalk": "^4.1.0", - "chokidar": "^3.5.1", - "clean-css": "^5.1.1", + "@babel/plugin-transform-runtime": "^7.18.6", + "@babel/preset-env": "^7.18.6", + "@babel/preset-react": "^7.18.6", + "@babel/preset-typescript": "^7.18.6", + "@babel/runtime": "^7.18.6", + "@babel/runtime-corejs3": "^7.18.6", + "@babel/traverse": "^7.18.8", + "@docusaurus/cssnano-preset": "2.2.0", + "@docusaurus/logger": "2.2.0", + "@docusaurus/mdx-loader": "2.2.0", + "@docusaurus/react-loadable": "5.5.2", + "@docusaurus/utils": "2.2.0", + "@docusaurus/utils-common": "2.2.0", + "@docusaurus/utils-validation": "2.2.0", + "@slorber/static-site-generator-webpack-plugin": "^4.0.7", + "@svgr/webpack": "^6.2.1", + "autoprefixer": "^10.4.7", + "babel-loader": "^8.2.5", + "babel-plugin-dynamic-import-node": "^2.3.3", + "boxen": "^6.2.1", + "chalk": "^4.1.2", + "chokidar": "^3.5.3", + "clean-css": "^5.3.0", + "cli-table3": "^0.6.2", + "combine-promises": "^1.1.0", "commander": "^5.1.0", - "copy-webpack-plugin": "^8.1.0", - "core-js": "^3.9.1", - "css-loader": "^5.1.1", - "css-minimizer-webpack-plugin": "^2.0.0", - "cssnano": "^5.0.1", - "del": "^6.0.0", + "copy-webpack-plugin": "^11.0.0", + "core-js": "^3.23.3", + "css-loader": "^6.7.1", + "css-minimizer-webpack-plugin": "^4.0.0", + "cssnano": "^5.1.12", + "del": "^6.1.1", "detect-port": "^1.3.0", - "eta": "^1.12.1", - "express": "^4.17.1", + "escape-html": "^1.0.3", + "eta": "^1.12.3", "file-loader": "^6.2.0", - "fs-extra": "^9.1.0", - "github-slugger": "^1.3.0", - "globby": "^11.0.2", - "html-minifier-terser": "^5.1.1", - "html-tags": "^3.1.0", - "html-webpack-plugin": "^5.2.0", + "fs-extra": "^10.1.0", + "html-minifier-terser": "^6.1.0", + "html-tags": "^3.2.0", + "html-webpack-plugin": "^5.5.0", "import-fresh": "^3.3.0", - "is-root": "^2.1.0", "leven": "^3.1.0", - "lodash": "^4.17.20", - "mini-css-extract-plugin": "^1.4.0", - "module-alias": "^2.2.2", - "nprogress": "^0.2.0", - "postcss": "^8.2.10", - "postcss-loader": "^5.2.0", - "prompts": "^2.4.0", - "react-dev-utils": "^11.0.1", - "react-error-overlay": "^6.0.9", - "react-helmet": "^6.1.0", - "react-loadable": "^5.5.0", + "lodash": "^4.17.21", + "mini-css-extract-plugin": "^2.6.1", + "postcss": "^8.4.14", + "postcss-loader": "^7.0.0", + "prompts": "^2.4.2", + "react-dev-utils": "^12.0.1", + "react-helmet-async": "^1.3.0", + "react-loadable": "npm:@docusaurus/react-loadable@5.5.2", "react-loadable-ssr-addon-v5-slorber": "^1.0.1", - "react-router": "^5.2.0", + "react-router": "^5.3.3", "react-router-config": "^5.1.1", - "react-router-dom": "^5.2.0", - "resolve-pathname": "^3.0.0", - "rtl-detect": "^1.0.2", - "semver": "^7.3.4", + "react-router-dom": "^5.3.3", + "rtl-detect": "^1.0.4", + "semver": "^7.3.7", "serve-handler": "^6.1.3", - "shelljs": "^0.8.4", - "std-env": "^2.2.1", - "strip-ansi": "^6.0.0", - "terser-webpack-plugin": "^5.1.1", - "tslib": "^2.1.0", + "shelljs": "^0.8.5", + "terser-webpack-plugin": "^5.3.3", + "tslib": "^2.4.0", "update-notifier": "^5.1.0", "url-loader": "^4.1.1", - "wait-on": "^5.2.1", - "webpack": "^5.28.0", - "webpack-bundle-analyzer": "^4.4.0", - "webpack-dev-server": "^3.11.2", - "webpack-merge": "^5.7.3", - "webpackbar": "^5.0.0-3" + "wait-on": "^6.0.1", + "webpack": "^5.73.0", + "webpack-bundle-analyzer": "^4.5.0", + "webpack-dev-server": "^4.9.3", + "webpack-merge": "^5.8.0", + "webpackbar": "^5.0.2" }, "bin": { - "docusaurus": "bin/docusaurus.js" + "docusaurus": "bin/docusaurus.mjs" }, "engines": { - "node": ">=12.13.0" + "node": ">=16.14" }, "peerDependencies": { "react": "^16.8.4 || ^17.0.0", "react-dom": "^16.8.4 || ^17.0.0" } }, + "node_modules/@docusaurus/core/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@docusaurus/core/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@docusaurus/core/node_modules/boxen": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-6.2.1.tgz", + "integrity": "sha512-H4PEsJXfFI/Pt8sjDWbHlQPx4zL/bvSQjcilJmaulGt5mLDorHOHpmdXAJcBcmru7PhYSp/cDMWRko4ZUMFkSw==", + "dependencies": { + "ansi-align": "^3.0.1", + "camelcase": "^6.2.0", + "chalk": "^4.1.2", + "cli-boxes": "^3.0.0", + "string-width": "^5.0.1", + "type-fest": "^2.5.0", + "widest-line": "^4.0.1", + "wrap-ansi": "^8.0.1" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@docusaurus/core/node_modules/cli-boxes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-3.0.0.tgz", + "integrity": "sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@docusaurus/core/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" + }, "node_modules/@docusaurus/core/node_modules/postcss-loader": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-5.3.0.tgz", - "integrity": "sha512-/+Z1RAmssdiSLgIZwnJHwBMnlABPgF7giYzTN2NOfr9D21IJZ4mQC1R2miwp80zno9M4zMD/umGI8cR+2EL5zw==", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-7.0.2.tgz", + "integrity": "sha512-fUJzV/QH7NXUAqV8dWJ9Lg4aTkDCezpTS5HgJ2DvqznexTbSTxgi/dTECvTZ15BwKTtk8G/bqI/QTu2HPd3ZCg==", "dependencies": { "cosmiconfig": "^7.0.0", - "klona": "^2.0.4", - "semver": "^7.3.4" + "klona": "^2.0.5", + "semver": "^7.3.8" }, "engines": { - "node": ">= 10.13.0" + "node": ">= 14.15.0" }, "funding": { "type": "opencollective", @@ -1766,153 +2173,272 @@ "webpack": "^5.0.0" } }, - "node_modules/@docusaurus/cssnano-preset": { - "version": "2.0.0-beta.0", - "resolved": "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-2.0.0-beta.0.tgz", - "integrity": "sha512-gqQHeQCDHZDd5NaiKZwDiyg75sBCqDyAsvmFukkDAty8xE7u9IhzbOQKvCAtwseuvzu2BNN41gnJ8bz7vZzQiw==", + "node_modules/@docusaurus/core/node_modules/react-loadable": { + "name": "@docusaurus/react-loadable", + "version": "5.5.2", + "resolved": "https://registry.npmjs.org/@docusaurus/react-loadable/-/react-loadable-5.5.2.tgz", + "integrity": "sha512-A3dYjdBGuy0IGT+wyLIGIKLRE+sAk1iNk0f1HjNDysO7u8lhL4N3VEm+FAubmJbAztn94F7MxBTPmnixbiyFdQ==", "dependencies": { - "cssnano-preset-advanced": "^5.0.0", - "postcss": "^8.2.10", - "postcss-sort-media-queries": "^3.8.9" + "@types/react": "*", + "prop-types": "^15.6.2" + }, + "peerDependencies": { + "react": "*" } }, - "node_modules/@docusaurus/mdx-loader": { - "version": "2.0.0-beta.0", - "resolved": "https://registry.npmjs.org/@docusaurus/mdx-loader/-/mdx-loader-2.0.0-beta.0.tgz", - "integrity": "sha512-oQLS2ZeUnqw79CV37glglZpaYgFfA5Az5lT83m5tJfMUZjoK4ehG1XWBeUzWy8QQNI452yAID8jz8jihEQeCcw==", - "dependencies": { - "@babel/parser": "^7.12.16", - "@babel/traverse": "^7.12.13", - "@docusaurus/core": "2.0.0-beta.0", - "@docusaurus/utils": "2.0.0-beta.0", - "@mdx-js/mdx": "^1.6.21", - "@mdx-js/react": "^1.6.21", - "escape-html": "^1.0.3", - "file-loader": "^6.2.0", - "fs-extra": "^9.1.0", - "github-slugger": "^1.3.0", - "gray-matter": "^4.0.2", - "mdast-util-to-string": "^2.0.0", - "remark-emoji": "^2.1.0", - "stringify-object": "^3.3.0", - "unist-util-visit": "^2.0.2", - "url-loader": "^4.1.1", - "webpack": "^5.28.0" + "node_modules/@docusaurus/core/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" }, "engines": { - "node": ">=12.13.0" + "node": ">=12" }, - "peerDependencies": { - "react": "^16.8.4 || ^17.0.0", - "react-dom": "^16.8.4 || ^17.0.0" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@docusaurus/plugin-content-blog": { - "version": "2.0.0-beta.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-blog/-/plugin-content-blog-2.0.0-beta.0.tgz", - "integrity": "sha512-lz63i5k/23RJ3Rk/2fIsYAoD8Wua3b5b0AbH2JoOhQu1iAIQiV8m91Z3XALBSzA3nBtAOIweNI7yzWL+JFSTvw==", - "dependencies": { - "@docusaurus/core": "2.0.0-beta.0", - "@docusaurus/mdx-loader": "2.0.0-beta.0", - "@docusaurus/types": "2.0.0-beta.0", - "@docusaurus/utils": "2.0.0-beta.0", - "@docusaurus/utils-validation": "2.0.0-beta.0", - "chalk": "^4.1.0", - "feed": "^4.2.2", - "fs-extra": "^9.1.0", - "globby": "^11.0.2", - "loader-utils": "^2.0.0", - "lodash": "^4.17.20", - "reading-time": "^1.3.0", - "remark-admonitions": "^1.2.1", - "tslib": "^2.1.0", - "webpack": "^5.28.0" + "node_modules/@docusaurus/core/node_modules/strip-ansi": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", + "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", + "dependencies": { + "ansi-regex": "^6.0.1" }, "engines": { - "node": ">=12.13.0" + "node": ">=12" }, - "peerDependencies": { - "react": "^16.8.4 || ^17.0.0", - "react-dom": "^16.8.4 || ^17.0.0" + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, - "node_modules/@docusaurus/plugin-content-docs": { - "version": "2.0.0-beta.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-docs/-/plugin-content-docs-2.0.0-beta.0.tgz", - "integrity": "sha512-WdDQUh2rRCbfJswVc0vY9EaAspxgziqpVEZja8+BmQR/TZh7HuLplT6GJbiFbE4RvwM3+PwG/jHMPglYDK60kw==", - "dependencies": { - "@docusaurus/core": "2.0.0-beta.0", - "@docusaurus/mdx-loader": "2.0.0-beta.0", - "@docusaurus/types": "2.0.0-beta.0", - "@docusaurus/utils": "2.0.0-beta.0", - "@docusaurus/utils-validation": "2.0.0-beta.0", - "chalk": "^4.1.0", - "combine-promises": "^1.1.0", - "execa": "^5.0.0", - "fs-extra": "^9.1.0", - "globby": "^11.0.2", - "import-fresh": "^3.2.2", - "js-yaml": "^4.0.0", - "loader-utils": "^1.2.3", - "lodash": "^4.17.20", - "remark-admonitions": "^1.2.1", - "shelljs": "^0.8.4", - "tslib": "^2.1.0", - "utility-types": "^3.10.0", - "webpack": "^5.28.0" + "node_modules/@docusaurus/core/node_modules/type-fest": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", + "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@docusaurus/core/node_modules/widest-line": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-4.0.1.tgz", + "integrity": "sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig==", + "dependencies": { + "string-width": "^5.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@docusaurus/core/node_modules/wrap-ansi": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.0.1.tgz", + "integrity": "sha512-QFF+ufAqhoYHvoHdajT/Po7KoXVBPXS2bgjIam5isfWJPfIOnQZ50JtUiVvCv/sjgacf3yRrt2ZKUZ/V4itN4g==", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/@docusaurus/cssnano-preset": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-2.2.0.tgz", + "integrity": "sha512-mAAwCo4n66TMWBH1kXnHVZsakW9VAXJzTO4yZukuL3ro4F+JtkMwKfh42EG75K/J/YIFQG5I/Bzy0UH/hFxaTg==", + "dependencies": { + "cssnano-preset-advanced": "^5.3.8", + "postcss": "^8.4.14", + "postcss-sort-media-queries": "^4.2.1", + "tslib": "^2.4.0" + }, + "engines": { + "node": ">=16.14" + } + }, + "node_modules/@docusaurus/logger": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@docusaurus/logger/-/logger-2.2.0.tgz", + "integrity": "sha512-DF3j1cA5y2nNsu/vk8AG7xwpZu6f5MKkPPMaaIbgXLnWGfm6+wkOeW7kNrxnM95YOhKUkJUophX69nGUnLsm0A==", + "dependencies": { + "chalk": "^4.1.2", + "tslib": "^2.4.0" + }, + "engines": { + "node": ">=16.14" + } + }, + "node_modules/@docusaurus/mdx-loader": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@docusaurus/mdx-loader/-/mdx-loader-2.2.0.tgz", + "integrity": "sha512-X2bzo3T0jW0VhUU+XdQofcEeozXOTmKQMvc8tUnWRdTnCvj4XEcBVdC3g+/jftceluiwSTNRAX4VBOJdNt18jA==", + "dependencies": { + "@babel/parser": "^7.18.8", + "@babel/traverse": "^7.18.8", + "@docusaurus/logger": "2.2.0", + "@docusaurus/utils": "2.2.0", + "@mdx-js/mdx": "^1.6.22", + "escape-html": "^1.0.3", + "file-loader": "^6.2.0", + "fs-extra": "^10.1.0", + "image-size": "^1.0.1", + "mdast-util-to-string": "^2.0.0", + "remark-emoji": "^2.2.0", + "stringify-object": "^3.3.0", + "tslib": "^2.4.0", + "unified": "^9.2.2", + "unist-util-visit": "^2.0.3", + "url-loader": "^4.1.1", + "webpack": "^5.73.0" }, "engines": { - "node": ">=12.13.0" + "node": ">=16.14" }, "peerDependencies": { "react": "^16.8.4 || ^17.0.0", "react-dom": "^16.8.4 || ^17.0.0" } }, - "node_modules/@docusaurus/plugin-content-docs/node_modules/json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "node_modules/@docusaurus/mdx-loader/node_modules/unified": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.2.tgz", + "integrity": "sha512-Sg7j110mtefBD+qunSLO1lqOEKdrwBFBrR6Qd8f4uwkhWNlbkaqwHse6e7QvD3AP/MNoJdEDLaf8OxYyoWgorQ==", "dependencies": { - "minimist": "^1.2.0" + "bail": "^1.0.0", + "extend": "^3.0.0", + "is-buffer": "^2.0.0", + "is-plain-obj": "^2.0.0", + "trough": "^1.0.0", + "vfile": "^4.0.0" }, - "bin": { - "json5": "lib/cli.js" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/@docusaurus/plugin-content-docs/node_modules/loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "node_modules/@docusaurus/module-type-aliases": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@docusaurus/module-type-aliases/-/module-type-aliases-2.2.0.tgz", + "integrity": "sha512-wDGW4IHKoOr9YuJgy7uYuKWrDrSpsUSDHLZnWQYM9fN7D5EpSmYHjFruUpKWVyxLpD/Wh0rW8hYZwdjJIQUQCQ==", + "dependencies": { + "@docusaurus/react-loadable": "5.5.2", + "@docusaurus/types": "2.2.0", + "@types/history": "^4.7.11", + "@types/react": "*", + "@types/react-router-config": "*", + "@types/react-router-dom": "*", + "react-helmet-async": "*", + "react-loadable": "npm:@docusaurus/react-loadable@5.5.2" + }, + "peerDependencies": { + "react": "*", + "react-dom": "*" + } + }, + "node_modules/@docusaurus/module-type-aliases/node_modules/react-loadable": { + "name": "@docusaurus/react-loadable", + "version": "5.5.2", + "resolved": "https://registry.npmjs.org/@docusaurus/react-loadable/-/react-loadable-5.5.2.tgz", + "integrity": "sha512-A3dYjdBGuy0IGT+wyLIGIKLRE+sAk1iNk0f1HjNDysO7u8lhL4N3VEm+FAubmJbAztn94F7MxBTPmnixbiyFdQ==", "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" + "@types/react": "*", + "prop-types": "^15.6.2" + }, + "peerDependencies": { + "react": "*" + } + }, + "node_modules/@docusaurus/plugin-content-blog": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-blog/-/plugin-content-blog-2.2.0.tgz", + "integrity": "sha512-0mWBinEh0a5J2+8ZJXJXbrCk1tSTNf7Nm4tYAl5h2/xx+PvH/Bnu0V+7mMljYm/1QlDYALNIIaT/JcoZQFUN3w==", + "dependencies": { + "@docusaurus/core": "2.2.0", + "@docusaurus/logger": "2.2.0", + "@docusaurus/mdx-loader": "2.2.0", + "@docusaurus/types": "2.2.0", + "@docusaurus/utils": "2.2.0", + "@docusaurus/utils-common": "2.2.0", + "@docusaurus/utils-validation": "2.2.0", + "cheerio": "^1.0.0-rc.12", + "feed": "^4.2.2", + "fs-extra": "^10.1.0", + "lodash": "^4.17.21", + "reading-time": "^1.5.0", + "tslib": "^2.4.0", + "unist-util-visit": "^2.0.3", + "utility-types": "^3.10.0", + "webpack": "^5.73.0" }, "engines": { - "node": ">=4.0.0" + "node": ">=16.14" + }, + "peerDependencies": { + "react": "^16.8.4 || ^17.0.0", + "react-dom": "^16.8.4 || ^17.0.0" + } + }, + "node_modules/@docusaurus/plugin-content-docs": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-docs/-/plugin-content-docs-2.2.0.tgz", + "integrity": "sha512-BOazBR0XjzsHE+2K1wpNxz5QZmrJgmm3+0Re0EVPYFGW8qndCWGNtXW/0lGKhecVPML8yyFeAmnUCIs7xM2wPw==", + "dependencies": { + "@docusaurus/core": "2.2.0", + "@docusaurus/logger": "2.2.0", + "@docusaurus/mdx-loader": "2.2.0", + "@docusaurus/module-type-aliases": "2.2.0", + "@docusaurus/types": "2.2.0", + "@docusaurus/utils": "2.2.0", + "@docusaurus/utils-validation": "2.2.0", + "@types/react-router-config": "^5.0.6", + "combine-promises": "^1.1.0", + "fs-extra": "^10.1.0", + "import-fresh": "^3.3.0", + "js-yaml": "^4.1.0", + "lodash": "^4.17.21", + "tslib": "^2.4.0", + "utility-types": "^3.10.0", + "webpack": "^5.73.0" + }, + "engines": { + "node": ">=16.14" + }, + "peerDependencies": { + "react": "^16.8.4 || ^17.0.0", + "react-dom": "^16.8.4 || ^17.0.0" } }, "node_modules/@docusaurus/plugin-content-pages": { - "version": "2.0.0-beta.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-pages/-/plugin-content-pages-2.0.0-beta.0.tgz", - "integrity": "sha512-mk5LVVSvn+HJPKBaAs/Pceq/hTGxF2LVBvJEquuQz0NMAW3QdBWaYRRpOrL9CO8v+ygn5RuLslXsyZBsDNuhww==", - "dependencies": { - "@docusaurus/core": "2.0.0-beta.0", - "@docusaurus/mdx-loader": "2.0.0-beta.0", - "@docusaurus/types": "2.0.0-beta.0", - "@docusaurus/utils": "2.0.0-beta.0", - "@docusaurus/utils-validation": "2.0.0-beta.0", - "globby": "^11.0.2", - "lodash": "^4.17.20", - "minimatch": "^3.0.4", - "remark-admonitions": "^1.2.1", - "slash": "^3.0.0", - "tslib": "^2.1.0", - "webpack": "^5.28.0" + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-pages/-/plugin-content-pages-2.2.0.tgz", + "integrity": "sha512-+OTK3FQHk5WMvdelz8v19PbEbx+CNT6VSpx7nVOvMNs5yJCKvmqBJBQ2ZSxROxhVDYn+CZOlmyrC56NSXzHf6g==", + "dependencies": { + "@docusaurus/core": "2.2.0", + "@docusaurus/mdx-loader": "2.2.0", + "@docusaurus/types": "2.2.0", + "@docusaurus/utils": "2.2.0", + "@docusaurus/utils-validation": "2.2.0", + "fs-extra": "^10.1.0", + "tslib": "^2.4.0", + "webpack": "^5.73.0" }, "engines": { - "node": ">=12.13.0" + "node": ">=16.14" }, "peerDependencies": { "react": "^16.8.4 || ^17.0.0", @@ -1920,18 +2446,19 @@ } }, "node_modules/@docusaurus/plugin-debug": { - "version": "2.0.0-beta.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-debug/-/plugin-debug-2.0.0-beta.0.tgz", - "integrity": "sha512-m75sZdF8Yccxfih3qfdQg9DucMTrYBnmeTA8GNmdVaK701Ip8t50d1pDJchtu0FSEh6vzVB9C6D2YD5YgVFp8A==", - "dependencies": { - "@docusaurus/core": "2.0.0-beta.0", - "@docusaurus/types": "2.0.0-beta.0", - "@docusaurus/utils": "2.0.0-beta.0", - "react-json-view": "^1.21.1", - "tslib": "^2.1.0" + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-debug/-/plugin-debug-2.2.0.tgz", + "integrity": "sha512-p9vOep8+7OVl6r/NREEYxf4HMAjV8JMYJ7Bos5fCFO0Wyi9AZEo0sCTliRd7R8+dlJXZEgcngSdxAUo/Q+CJow==", + "dependencies": { + "@docusaurus/core": "2.2.0", + "@docusaurus/types": "2.2.0", + "@docusaurus/utils": "2.2.0", + "fs-extra": "^10.1.0", + "react-json-view": "^1.21.3", + "tslib": "^2.4.0" }, "engines": { - "node": ">=12.13.0" + "node": ">=16.14" }, "peerDependencies": { "react": "^16.8.4 || ^17.0.0", @@ -1939,14 +2466,17 @@ } }, "node_modules/@docusaurus/plugin-google-analytics": { - "version": "2.0.0-beta.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-2.0.0-beta.0.tgz", - "integrity": "sha512-7lHrg1L+adc8VbiaLexa15i4fdq4MRPUTLMxRPAWz+QskhisW89Ryi2/gDmfMNqLblX84Qg2RASa+2gqO4wepw==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-2.2.0.tgz", + "integrity": "sha512-+eZVVxVeEnV5nVQJdey9ZsfyEVMls6VyWTIj8SmX0k5EbqGvnIfET+J2pYEuKQnDIHxy+syRMoRM6AHXdHYGIg==", "dependencies": { - "@docusaurus/core": "2.0.0-beta.0" + "@docusaurus/core": "2.2.0", + "@docusaurus/types": "2.2.0", + "@docusaurus/utils-validation": "2.2.0", + "tslib": "^2.4.0" }, "engines": { - "node": ">=12.13.0" + "node": ">=16.14" }, "peerDependencies": { "react": "^16.8.4 || ^17.0.0", @@ -1954,14 +2484,17 @@ } }, "node_modules/@docusaurus/plugin-google-gtag": { - "version": "2.0.0-beta.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-2.0.0-beta.0.tgz", - "integrity": "sha512-V7zaYbhAMv0jexm5H/5sAnoM1GHibcn9QQk5UWC++x1kE0KRuLDZHV+9OyvW5wr0wWFajod/b88SpUpSMF5u+g==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-2.2.0.tgz", + "integrity": "sha512-6SOgczP/dYdkqUMGTRqgxAS1eTp6MnJDAQMy8VCF1QKbWZmlkx4agHDexihqmYyCujTYHqDAhm1hV26EET54NQ==", "dependencies": { - "@docusaurus/core": "2.0.0-beta.0" + "@docusaurus/core": "2.2.0", + "@docusaurus/types": "2.2.0", + "@docusaurus/utils-validation": "2.2.0", + "tslib": "^2.4.0" }, "engines": { - "node": ">=12.13.0" + "node": ">=16.14" }, "peerDependencies": { "react": "^16.8.4 || ^17.0.0", @@ -1969,20 +2502,22 @@ } }, "node_modules/@docusaurus/plugin-sitemap": { - "version": "2.0.0-beta.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-sitemap/-/plugin-sitemap-2.0.0-beta.0.tgz", - "integrity": "sha512-dvmk8Sr+6pBkiKDb7Rjdp0GeFDWPUlayoJWK3fN3g0Fno6uxFfYhNZyXJ+ObyCA7HoW5rzeBMiO+uAja19JXTg==", - "dependencies": { - "@docusaurus/core": "2.0.0-beta.0", - "@docusaurus/types": "2.0.0-beta.0", - "@docusaurus/utils": "2.0.0-beta.0", - "@docusaurus/utils-validation": "2.0.0-beta.0", - "fs-extra": "^9.1.0", - "sitemap": "^6.3.6", - "tslib": "^2.1.0" + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-sitemap/-/plugin-sitemap-2.2.0.tgz", + "integrity": "sha512-0jAmyRDN/aI265CbWZNZuQpFqiZuo+5otk2MylU9iVrz/4J7gSc+ZJ9cy4EHrEsW7PV8s1w18hIEsmcA1YgkKg==", + "dependencies": { + "@docusaurus/core": "2.2.0", + "@docusaurus/logger": "2.2.0", + "@docusaurus/types": "2.2.0", + "@docusaurus/utils": "2.2.0", + "@docusaurus/utils-common": "2.2.0", + "@docusaurus/utils-validation": "2.2.0", + "fs-extra": "^10.1.0", + "sitemap": "^7.1.1", + "tslib": "^2.4.0" }, "engines": { - "node": ">=12.13.0" + "node": ">=16.14" }, "peerDependencies": { "react": "^16.8.4 || ^17.0.0", @@ -1990,23 +2525,25 @@ } }, "node_modules/@docusaurus/preset-classic": { - "version": "2.0.0-beta.0", - "resolved": "https://registry.npmjs.org/@docusaurus/preset-classic/-/preset-classic-2.0.0-beta.0.tgz", - "integrity": "sha512-cFpR0UaAeUt5qVx1bpidhlar6tiRNITIQlxP4bOVsjbxVTZhZ/cNuIz7C+2zFPCuKIflGXdTIQOrucPmd7z51Q==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@docusaurus/preset-classic/-/preset-classic-2.2.0.tgz", + "integrity": "sha512-yKIWPGNx7BT8v2wjFIWvYrS+nvN04W+UameSFf8lEiJk6pss0kL6SG2MRvyULiI3BDxH+tj6qe02ncpSPGwumg==", "dependencies": { - "@docusaurus/core": "2.0.0-beta.0", - "@docusaurus/plugin-content-blog": "2.0.0-beta.0", - "@docusaurus/plugin-content-docs": "2.0.0-beta.0", - "@docusaurus/plugin-content-pages": "2.0.0-beta.0", - "@docusaurus/plugin-debug": "2.0.0-beta.0", - "@docusaurus/plugin-google-analytics": "2.0.0-beta.0", - "@docusaurus/plugin-google-gtag": "2.0.0-beta.0", - "@docusaurus/plugin-sitemap": "2.0.0-beta.0", - "@docusaurus/theme-classic": "2.0.0-beta.0", - "@docusaurus/theme-search-algolia": "2.0.0-beta.0" + "@docusaurus/core": "2.2.0", + "@docusaurus/plugin-content-blog": "2.2.0", + "@docusaurus/plugin-content-docs": "2.2.0", + "@docusaurus/plugin-content-pages": "2.2.0", + "@docusaurus/plugin-debug": "2.2.0", + "@docusaurus/plugin-google-analytics": "2.2.0", + "@docusaurus/plugin-google-gtag": "2.2.0", + "@docusaurus/plugin-sitemap": "2.2.0", + "@docusaurus/theme-classic": "2.2.0", + "@docusaurus/theme-common": "2.2.0", + "@docusaurus/theme-search-algolia": "2.2.0", + "@docusaurus/types": "2.2.0" }, "engines": { - "node": ">=12.13.0" + "node": ">=16.14" }, "peerDependencies": { "react": "^16.8.4 || ^17.0.0", @@ -2014,10 +2551,11 @@ } }, "node_modules/@docusaurus/react-loadable": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@docusaurus/react-loadable/-/react-loadable-5.5.0.tgz", - "integrity": "sha512-Ld/kwUE6yATIOTLq3JCsWiTa/drisajwKqBQ2Rw6IcT+sFsKfYek8F2jSH8f68AT73xX97UehduZeCSlnuCBIg==", + "version": "5.5.2", + "resolved": "https://registry.npmjs.org/@docusaurus/react-loadable/-/react-loadable-5.5.2.tgz", + "integrity": "sha512-A3dYjdBGuy0IGT+wyLIGIKLRE+sAk1iNk0f1HjNDysO7u8lhL4N3VEm+FAubmJbAztn94F7MxBTPmnixbiyFdQ==", "dependencies": { + "@types/react": "*", "prop-types": "^15.6.2" }, "peerDependencies": { @@ -2025,37 +2563,38 @@ } }, "node_modules/@docusaurus/theme-classic": { - "version": "2.0.0-beta.0", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-classic/-/theme-classic-2.0.0-beta.0.tgz", - "integrity": "sha512-cBNtwAyg3be7Gk41FazMtgyibAcfuYaGHhGHIDRsXfc/qp3RhbiGiei7tyh200QT0NgKZxiVQy/r4d0mtjC++Q==", - "dependencies": { - "@docusaurus/core": "2.0.0-beta.0", - "@docusaurus/plugin-content-blog": "2.0.0-beta.0", - "@docusaurus/plugin-content-docs": "2.0.0-beta.0", - "@docusaurus/plugin-content-pages": "2.0.0-beta.0", - "@docusaurus/theme-common": "2.0.0-beta.0", - "@docusaurus/types": "2.0.0-beta.0", - "@docusaurus/utils": "2.0.0-beta.0", - "@docusaurus/utils-validation": "2.0.0-beta.0", - "@mdx-js/mdx": "^1.6.21", - "@mdx-js/react": "^1.6.21", - "chalk": "^4.1.0", - "clsx": "^1.1.1", - "copy-text-to-clipboard": "^3.0.0", - "fs-extra": "^9.1.0", - "globby": "^11.0.2", - "infima": "0.2.0-alpha.23", - "lodash": "^4.17.20", - "parse-numeric-range": "^1.2.0", - "postcss": "^8.2.10", - "prism-react-renderer": "^1.1.1", - "prismjs": "^1.23.0", - "prop-types": "^15.7.2", - "react-router-dom": "^5.2.0", - "rtlcss": "^3.1.2" + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-classic/-/theme-classic-2.2.0.tgz", + "integrity": "sha512-kjbg/qJPwZ6H1CU/i9d4l/LcFgnuzeiGgMQlt6yPqKo0SOJIBMPuz7Rnu3r/WWbZFPi//o8acclacOzmXdUUEg==", + "dependencies": { + "@docusaurus/core": "2.2.0", + "@docusaurus/mdx-loader": "2.2.0", + "@docusaurus/module-type-aliases": "2.2.0", + "@docusaurus/plugin-content-blog": "2.2.0", + "@docusaurus/plugin-content-docs": "2.2.0", + "@docusaurus/plugin-content-pages": "2.2.0", + "@docusaurus/theme-common": "2.2.0", + "@docusaurus/theme-translations": "2.2.0", + "@docusaurus/types": "2.2.0", + "@docusaurus/utils": "2.2.0", + "@docusaurus/utils-common": "2.2.0", + "@docusaurus/utils-validation": "2.2.0", + "@mdx-js/react": "^1.6.22", + "clsx": "^1.2.1", + "copy-text-to-clipboard": "^3.0.1", + "infima": "0.2.0-alpha.42", + "lodash": "^4.17.21", + "nprogress": "^0.2.0", + "postcss": "^8.4.14", + "prism-react-renderer": "^1.3.5", + "prismjs": "^1.28.0", + "react-router-dom": "^5.3.3", + "rtlcss": "^3.5.0", + "tslib": "^2.4.0", + "utility-types": "^3.10.0" }, "engines": { - "node": ">=12.13.0" + "node": ">=16.14" }, "peerDependencies": { "react": "^16.8.4 || ^17.0.0", @@ -2063,116 +2602,170 @@ } }, "node_modules/@docusaurus/theme-common": { - "version": "2.0.0-beta.0", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-common/-/theme-common-2.0.0-beta.0.tgz", - "integrity": "sha512-2rcVmQpvbdAgnzTWuM7Bfpu+2TQm928bhlvxn226jQy7IYz8ySRlIode63HhCtpx03hpdMCkrK6HxhfEcvHjQg==", - "dependencies": { - "@docusaurus/core": "2.0.0-beta.0", - "@docusaurus/plugin-content-blog": "2.0.0-beta.0", - "@docusaurus/plugin-content-docs": "2.0.0-beta.0", - "@docusaurus/plugin-content-pages": "2.0.0-beta.0", - "@docusaurus/types": "2.0.0-beta.0", - "tslib": "^2.1.0" - }, - "engines": { - "node": ">=12.13.0" + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-common/-/theme-common-2.2.0.tgz", + "integrity": "sha512-R8BnDjYoN90DCL75gP7qYQfSjyitXuP9TdzgsKDmSFPNyrdE3twtPNa2dIN+h+p/pr+PagfxwWbd6dn722A1Dw==", + "dependencies": { + "@docusaurus/mdx-loader": "2.2.0", + "@docusaurus/module-type-aliases": "2.2.0", + "@docusaurus/plugin-content-blog": "2.2.0", + "@docusaurus/plugin-content-docs": "2.2.0", + "@docusaurus/plugin-content-pages": "2.2.0", + "@docusaurus/utils": "2.2.0", + "@types/history": "^4.7.11", + "@types/react": "*", + "@types/react-router-config": "*", + "clsx": "^1.2.1", + "parse-numeric-range": "^1.3.0", + "prism-react-renderer": "^1.3.5", + "tslib": "^2.4.0", + "utility-types": "^3.10.0" + }, + "engines": { + "node": ">=16.14" }, "peerDependencies": { - "prism-react-renderer": "^1.1.1", "react": "^16.8.4 || ^17.0.0", "react-dom": "^16.8.4 || ^17.0.0" } }, "node_modules/@docusaurus/theme-search-algolia": { - "version": "2.0.0-beta.0", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-search-algolia/-/theme-search-algolia-2.0.0-beta.0.tgz", - "integrity": "sha512-/GhgAm4yuwqTXWTsWnqpFYxpjTv+t45Wk8q/LmTVINa+A7b6jkMkch2lygagIt69/ufDm2Uw6eYhgrmF4DJqfQ==", - "dependencies": { - "@docsearch/react": "^3.0.0-alpha.33", - "@docusaurus/core": "2.0.0-beta.0", - "@docusaurus/theme-common": "2.0.0-beta.0", - "@docusaurus/utils": "2.0.0-beta.0", - "@docusaurus/utils-validation": "2.0.0-beta.0", - "algoliasearch": "^4.8.4", - "algoliasearch-helper": "^3.3.4", - "clsx": "^1.1.1", - "eta": "^1.12.1", - "lodash": "^4.17.20" + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-search-algolia/-/theme-search-algolia-2.2.0.tgz", + "integrity": "sha512-2h38B0tqlxgR2FZ9LpAkGrpDWVdXZ7vltfmTdX+4RsDs3A7khiNsmZB+x/x6sA4+G2V2CvrsPMlsYBy5X+cY1w==", + "dependencies": { + "@docsearch/react": "^3.1.1", + "@docusaurus/core": "2.2.0", + "@docusaurus/logger": "2.2.0", + "@docusaurus/plugin-content-docs": "2.2.0", + "@docusaurus/theme-common": "2.2.0", + "@docusaurus/theme-translations": "2.2.0", + "@docusaurus/utils": "2.2.0", + "@docusaurus/utils-validation": "2.2.0", + "algoliasearch": "^4.13.1", + "algoliasearch-helper": "^3.10.0", + "clsx": "^1.2.1", + "eta": "^1.12.3", + "fs-extra": "^10.1.0", + "lodash": "^4.17.21", + "tslib": "^2.4.0", + "utility-types": "^3.10.0" }, "engines": { - "node": ">=12.13.0" + "node": ">=16.14" }, "peerDependencies": { "react": "^16.8.4 || ^17.0.0", "react-dom": "^16.8.4 || ^17.0.0" } }, + "node_modules/@docusaurus/theme-translations": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-translations/-/theme-translations-2.2.0.tgz", + "integrity": "sha512-3T140AG11OjJrtKlY4pMZ5BzbGRDjNs2co5hJ6uYJG1bVWlhcaFGqkaZ5lCgKflaNHD7UHBHU9Ec5f69jTdd6w==", + "dependencies": { + "fs-extra": "^10.1.0", + "tslib": "^2.4.0" + }, + "engines": { + "node": ">=16.14" + } + }, "node_modules/@docusaurus/types": { - "version": "2.0.0-beta.0", - "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-2.0.0-beta.0.tgz", - "integrity": "sha512-z9PI+GbtYwqTXnkX4/a/A6psDX2p8N2uWlN2f4ifrm8WY4WhR9yiTOh0uo0pIqqaUQQvkEq3o5hOXuXLECEs+w==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-2.2.0.tgz", + "integrity": "sha512-b6xxyoexfbRNRI8gjblzVOnLr4peCJhGbYGPpJ3LFqpi5nsFfoK4mmDLvWdeah0B7gmJeXabN7nQkFoqeSdmOw==", "dependencies": { + "@types/history": "^4.7.11", + "@types/react": "*", "commander": "^5.1.0", - "joi": "^17.4.0", - "querystring": "0.2.0", - "webpack": "^5.28.0", - "webpack-merge": "^5.7.3" + "joi": "^17.6.0", + "react-helmet-async": "^1.3.0", + "utility-types": "^3.10.0", + "webpack": "^5.73.0", + "webpack-merge": "^5.8.0" + }, + "peerDependencies": { + "react": "^16.8.4 || ^17.0.0", + "react-dom": "^16.8.4 || ^17.0.0" } }, "node_modules/@docusaurus/utils": { - "version": "2.0.0-beta.0", - "resolved": "https://registry.npmjs.org/@docusaurus/utils/-/utils-2.0.0-beta.0.tgz", - "integrity": "sha512-bvrT1EQu0maavr0Hb/lke9jmpzgVL/9tn5VQtbyahf472eJFY0bQDExllDrHK+l784SUvucqX0iaQeg0q6ySUw==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@docusaurus/utils/-/utils-2.2.0.tgz", + "integrity": "sha512-oNk3cjvx7Tt1Lgh/aeZAmFpGV2pDr5nHKrBVx6hTkzGhrnMuQqLt6UPlQjdYQ3QHXwyF/ZtZMO1D5Pfi0lu7SA==", "dependencies": { - "@docusaurus/types": "2.0.0-beta.0", - "@types/github-slugger": "^1.3.0", - "chalk": "^4.1.0", - "escape-string-regexp": "^4.0.0", - "fs-extra": "^9.1.0", - "gray-matter": "^4.0.2", - "lodash": "^4.17.20", + "@docusaurus/logger": "2.2.0", + "@svgr/webpack": "^6.2.1", + "file-loader": "^6.2.0", + "fs-extra": "^10.1.0", + "github-slugger": "^1.4.0", + "globby": "^11.1.0", + "gray-matter": "^4.0.3", + "js-yaml": "^4.1.0", + "lodash": "^4.17.21", + "micromatch": "^4.0.5", "resolve-pathname": "^3.0.0", - "tslib": "^2.1.0" + "shelljs": "^0.8.5", + "tslib": "^2.4.0", + "url-loader": "^4.1.1", + "webpack": "^5.73.0" }, "engines": { - "node": ">=12.13.0" + "node": ">=16.14" + }, + "peerDependencies": { + "@docusaurus/types": "*" + }, + "peerDependenciesMeta": { + "@docusaurus/types": { + "optional": true + } } }, - "node_modules/@docusaurus/utils-validation": { - "version": "2.0.0-beta.0", - "resolved": "https://registry.npmjs.org/@docusaurus/utils-validation/-/utils-validation-2.0.0-beta.0.tgz", - "integrity": "sha512-ELl/FVJ6xBz35TisZ1NmJhjbiVXDeU++K531PEFPCPmwnQPh7S6hZXdPnR71/Kc3BmuN9X2ZkwGOqNKVfys2Bg==", + "node_modules/@docusaurus/utils-common": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@docusaurus/utils-common/-/utils-common-2.2.0.tgz", + "integrity": "sha512-qebnerHp+cyovdUseDQyYFvMW1n1nv61zGe5JJfoNQUnjKuApch3IVsz+/lZ9a38pId8kqehC1Ao2bW/s0ntDA==", "dependencies": { - "@docusaurus/utils": "2.0.0-beta.0", - "chalk": "^4.1.0", - "joi": "^17.4.0", - "tslib": "^2.1.0" + "tslib": "^2.4.0" }, "engines": { - "node": ">=12.13.0" + "node": ">=16.14" + }, + "peerDependencies": { + "@docusaurus/types": "*" + }, + "peerDependenciesMeta": { + "@docusaurus/types": { + "optional": true + } } }, - "node_modules/@endiliey/static-site-generator-webpack-plugin": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@endiliey/static-site-generator-webpack-plugin/-/static-site-generator-webpack-plugin-4.0.0.tgz", - "integrity": "sha512-3MBqYCs30qk1OBRC697NqhGouYbs71D1B8hrk/AFJC6GwF2QaJOQZtA1JYAaGSe650sZ8r5ppRTtCRXepDWlng==", + "node_modules/@docusaurus/utils-validation": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@docusaurus/utils-validation/-/utils-validation-2.2.0.tgz", + "integrity": "sha512-I1hcsG3yoCkasOL5qQAYAfnmVoLei7apugT6m4crQjmDGxq+UkiRrq55UqmDDyZlac/6ax/JC0p+usZ6W4nVyg==", "dependencies": { - "bluebird": "^3.7.1", - "cheerio": "^0.22.0", - "eval": "^0.1.4", - "url": "^0.11.0", - "webpack-sources": "^1.4.3" + "@docusaurus/logger": "2.2.0", + "@docusaurus/utils": "2.2.0", + "joi": "^17.6.0", + "js-yaml": "^4.1.0", + "tslib": "^2.4.0" + }, + "engines": { + "node": ">=16.14" } }, "node_modules/@eslint/eslintrc": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.1.tgz", - "integrity": "sha512-5v7TDE9plVhvxQeWLXDTvFvJBdH6pEsdnl2g/dAptmuFEPedQ4Erq5rsDsX+mvAM610IhNaO2W5V1dOOnDKxkQ==", + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", + "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==", "dependencies": { "ajv": "^6.12.4", "debug": "^4.1.1", "espree": "^7.3.0", - "globals": "^12.1.0", + "globals": "^13.9.0", "ignore": "^4.0.6", "import-fresh": "^3.2.1", "js-yaml": "^3.13.1", @@ -2192,11 +2785,11 @@ } }, "node_modules/@eslint/eslintrc/node_modules/globals": { - "version": "12.4.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", - "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", + "version": "13.17.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz", + "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==", "dependencies": { - "type-fest": "^0.8.1" + "type-fest": "^0.20.2" }, "engines": { "node": ">=8" @@ -2217,27 +2810,133 @@ "js-yaml": "bin/js-yaml.js" } }, - "node_modules/@eslint/eslintrc/node_modules/type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "engines": { - "node": ">=8" - } - }, "node_modules/@hapi/hoek": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.2.0.tgz", - "integrity": "sha512-sqKVVVOe5ivCaXDWivIJYVSaEgdQK9ul7a4Kity5Iw7u9+wBAPbX1RMSnLLmp7O4Vzj0WOWwMAJsTL00xwaNug==" + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz", + "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==" }, "node_modules/@hapi/topo": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.0.0.tgz", - "integrity": "sha512-tFJlT47db0kMqVm3H4nQYgn6Pwg10GTZHb1pwmSiv1K4ks6drQOtfEF5ZnPjkvC+y4/bUPHK+bc87QvLcL+WMw==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz", + "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==", "dependencies": { "@hapi/hoek": "^9.0.0" } }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz", + "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==", + "dependencies": { + "@humanwhocodes/object-schema": "^1.2.0", + "debug": "^4.1.1", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==" + }, + "node_modules/@jest/schemas": { + "version": "29.0.0", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.0.0.tgz", + "integrity": "sha512-3Ab5HgYIIAnS0HjqJHQYZS+zXc4tUmTmBH3z83ajI6afXp8X3ZtdLX+nXx+I7LNkJD7uN9LAVhgnjDgZa2z0kA==", + "dependencies": { + "@sinclair/typebox": "^0.24.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/types": { + "version": "29.3.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.3.1.tgz", + "integrity": "sha512-d0S0jmmTpjnhCmNpApgX3jrUZgZ22ivKJRvL2lli5hpCRoNnp1f85r2/wpKfXuYu8E7Jjh1hGfhPyup1NM5AmA==", + "dependencies": { + "@jest/schemas": "^29.0.0", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", + "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", + "dependencies": { + "@jridgewell/set-array": "^1.0.0", + "@jridgewell/sourcemap-codec": "^1.4.10" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz", + "integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "node_modules/@jridgewell/source-map/node_modules/@jridgewell/gen-mapping": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", + "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.17", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz", + "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==", + "dependencies": { + "@jridgewell/resolve-uri": "3.1.0", + "@jridgewell/sourcemap-codec": "1.4.14" + } + }, + "node_modules/@leichtgewicht/ip-codec": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz", + "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==" + }, "node_modules/@mdx-js/mdx": { "version": "1.6.22", "resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-1.6.22.tgz", @@ -2317,6 +3016,14 @@ "semver": "bin/semver" } }, + "node_modules/@mdx-js/mdx/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/@mdx-js/react": { "version": "1.6.22", "resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-1.6.22.tgz", @@ -2339,11 +3046,11 @@ } }, "node_modules/@nodelib/fs.scandir": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.4.tgz", - "integrity": "sha512-33g3pMJk3bg5nXbL/+CY6I2eJDzZAni49PfJnL5fghPTggPvBd/pFNSgJsdAgWptuFu7qq/ERvOYFlhvsLTCKA==", + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "dependencies": { - "@nodelib/fs.stat": "2.0.4", + "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" }, "engines": { @@ -2351,19 +3058,19 @@ } }, "node_modules/@nodelib/fs.stat": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.4.tgz", - "integrity": "sha512-IYlHJA0clt2+Vg7bccq+TzRdJvv19c2INqBSsoOLp1je7xjtr7J26+WXR72MCdvU9q1qTzIWDfhMf+DRvQJK4Q==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", "engines": { "node": ">= 8" } }, "node_modules/@nodelib/fs.walk": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.6.tgz", - "integrity": "sha512-8Broas6vTtW4GIXTAHDoE32hnN2M5ykgCpWGbuXHQ15vEMqr23pB76e/GZcYsZCHALv50ktd24qhEyKr6wBtow==", + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "dependencies": { - "@nodelib/fs.scandir": "2.1.4", + "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" }, "engines": { @@ -2371,14 +3078,14 @@ } }, "node_modules/@polka/url": { - "version": "1.0.0-next.12", - "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.12.tgz", - "integrity": "sha512-6RglhutqrGFMO1MNUXp95RBuYIuc8wTnMAV5MUhLmjTOy78ncwOw7RgeQ/HeymkKXRhZd0s2DNrM1rL7unk3MQ==" + "version": "1.0.0-next.21", + "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.21.tgz", + "integrity": "sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==" }, "node_modules/@sideway/address": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.2.tgz", - "integrity": "sha512-idTz8ibqWFrPU8kMirL0CoPH/A29XOzzAzpyN3zQ4kAWnzmNfFmRaoMNN6VI8ske5M73HZyhIaW4OuSFIdM4oA==", + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.4.tgz", + "integrity": "sha512-7vwq+rOHVWjyXxVlR76Agnvhy8I9rpzjosTESvmhNeXOXdZZB15Fl+TI9x1SiHZH5Jv2wTGduSxFDIaq0m3DUw==", "dependencies": { "@hapi/hoek": "^9.0.0" } @@ -2393,6 +3100,11 @@ "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==" }, + "node_modules/@sinclair/typebox": { + "version": "0.24.51", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.51.tgz", + "integrity": "sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA==" + }, "node_modules/@sindresorhus/is": { "version": "0.14.0", "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", @@ -2401,115 +3113,160 @@ "node": ">=6" } }, - "node_modules/@svgr/babel-plugin-add-jsx-attribute": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-5.4.0.tgz", - "integrity": "sha512-ZFf2gs/8/6B8PnSofI0inYXr2SDNTDScPXhN7k5EqD4aZ3gi6u+rbmZHVB8IM3wDyx8ntKACZbtXSm7oZGRqVg==", + "node_modules/@slorber/static-site-generator-webpack-plugin": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/@slorber/static-site-generator-webpack-plugin/-/static-site-generator-webpack-plugin-4.0.7.tgz", + "integrity": "sha512-Ug7x6z5lwrz0WqdnNFOMYrDQNTPAprvHLSh6+/fmml3qUiz6l5eq+2MzLKWtn/q5K5NpSiFsZTP/fck/3vjSxA==", + "dependencies": { + "eval": "^0.1.8", + "p-map": "^4.0.0", + "webpack-sources": "^3.2.2" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@slorber/static-site-generator-webpack-plugin/node_modules/webpack-sources": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/@svgr/babel-plugin-add-jsx-attribute": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-6.5.1.tgz", + "integrity": "sha512-9PYGcXrAxitycIjRmZB+Q0JaN07GZIWaTBIGQzfaZv+qr1n8X1XUEJ5rZ/vx6OVD9RRYlrNnXWExQXcmZeD/BQ==", "engines": { "node": ">=10" }, "funding": { "type": "github", "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@svgr/babel-plugin-remove-jsx-attribute": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-5.4.0.tgz", - "integrity": "sha512-yaS4o2PgUtwLFGTKbsiAy6D0o3ugcUhWK0Z45umJ66EPWunAz9fuFw2gJuje6wqQvQWOTJvIahUwndOXb7QCPg==", + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-6.5.0.tgz", + "integrity": "sha512-8zYdkym7qNyfXpWvu4yq46k41pyNM9SOstoWhKlm+IfdCE1DdnRKeMUPsWIEO/DEkaWxJ8T9esNdG3QwQ93jBA==", "engines": { "node": ">=10" }, "funding": { "type": "github", "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@svgr/babel-plugin-remove-jsx-empty-expression": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-5.0.1.tgz", - "integrity": "sha512-LA72+88A11ND/yFIMzyuLRSMJ+tRKeYKeQ+mR3DcAZ5I4h5CPWN9AHyUzJbWSYp/u2u0xhmgOe0+E41+GjEueA==", + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-6.5.0.tgz", + "integrity": "sha512-NFdxMq3xA42Kb1UbzCVxplUc0iqSyM9X8kopImvFnB+uSDdzIHOdbs1op8ofAvVRtbg4oZiyRl3fTYeKcOe9Iw==", "engines": { "node": ">=10" }, "funding": { "type": "github", "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@svgr/babel-plugin-replace-jsx-attribute-value": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-5.0.1.tgz", - "integrity": "sha512-PoiE6ZD2Eiy5mK+fjHqwGOS+IXX0wq/YDtNyIgOrc6ejFnxN4b13pRpiIPbtPwHEc+NT2KCjteAcq33/F1Y9KQ==", + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-6.5.1.tgz", + "integrity": "sha512-8DPaVVE3fd5JKuIC29dqyMB54sA6mfgki2H2+swh+zNJoynC8pMPzOkidqHOSc6Wj032fhl8Z0TVn1GiPpAiJg==", "engines": { "node": ">=10" }, "funding": { "type": "github", "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@svgr/babel-plugin-svg-dynamic-title": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-5.4.0.tgz", - "integrity": "sha512-zSOZH8PdZOpuG1ZVx/cLVePB2ibo3WPpqo7gFIjLV9a0QsuQAzJiwwqmuEdTaW2pegyBE17Uu15mOgOcgabQZg==", + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-6.5.1.tgz", + "integrity": "sha512-FwOEi0Il72iAzlkaHrlemVurgSQRDFbk0OC8dSvD5fSBPHltNh7JtLsxmZUhjYBZo2PpcU/RJvvi6Q0l7O7ogw==", "engines": { "node": ">=10" }, "funding": { "type": "github", "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@svgr/babel-plugin-svg-em-dimensions": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-5.4.0.tgz", - "integrity": "sha512-cPzDbDA5oT/sPXDCUYoVXEmm3VIoAWAPT6mSPTJNbQaBNUuEKVKyGH93oDY4e42PYHRW67N5alJx/eEol20abw==", + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-6.5.1.tgz", + "integrity": "sha512-gWGsiwjb4tw+ITOJ86ndY/DZZ6cuXMNE/SjcDRg+HLuCmwpcjOktwRF9WgAiycTqJD/QXqL2f8IzE2Rzh7aVXA==", "engines": { "node": ">=10" }, "funding": { "type": "github", "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@svgr/babel-plugin-transform-react-native-svg": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-5.4.0.tgz", - "integrity": "sha512-3eYP/SaopZ41GHwXma7Rmxcv9uRslRDTY1estspeB1w1ueZWd/tPlMfEOoccYpEMZU3jD4OU7YitnXcF5hLW2Q==", + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-6.5.1.tgz", + "integrity": "sha512-2jT3nTayyYP7kI6aGutkyfJ7UMGtuguD72OjeGLwVNyfPRBD8zQthlvL+fAbAKk5n9ZNcvFkp/b1lZ7VsYqVJg==", "engines": { "node": ">=10" }, "funding": { "type": "github", "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@svgr/babel-plugin-transform-svg-component": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-5.5.0.tgz", - "integrity": "sha512-q4jSH1UUvbrsOtlo/tKcgSeiCHRSBdXoIoqX1pgcKK/aU3JD27wmMKwGtpB8qRYUYoyXvfGxUVKchLuR5pB3rQ==", + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-6.5.1.tgz", + "integrity": "sha512-a1p6LF5Jt33O3rZoVRBqdxL350oge54iZWHNI6LJB5tQ7EelvD/Mb1mfBiZNAan0dt4i3VArkFRjA4iObuNykQ==", "engines": { - "node": ">=10" + "node": ">=12" }, "funding": { "type": "github", "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@svgr/babel-preset": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-5.5.0.tgz", - "integrity": "sha512-4FiXBjvQ+z2j7yASeGPEi8VD/5rrGQk4Xrq3EdJmoZgz/tpqChpo5hgXDvmEauwtvOc52q8ghhZK4Oy7qph4ig==", + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-6.5.1.tgz", + "integrity": "sha512-6127fvO/FF2oi5EzSQOAjo1LE3OtNVh11R+/8FXa+mHx1ptAaS4cknIjnUA7e6j6fwGGJ17NzaTJFUwOV2zwCw==", "dependencies": { - "@svgr/babel-plugin-add-jsx-attribute": "^5.4.0", - "@svgr/babel-plugin-remove-jsx-attribute": "^5.4.0", - "@svgr/babel-plugin-remove-jsx-empty-expression": "^5.0.1", - "@svgr/babel-plugin-replace-jsx-attribute-value": "^5.0.1", - "@svgr/babel-plugin-svg-dynamic-title": "^5.4.0", - "@svgr/babel-plugin-svg-em-dimensions": "^5.4.0", - "@svgr/babel-plugin-transform-react-native-svg": "^5.4.0", - "@svgr/babel-plugin-transform-svg-component": "^5.5.0" + "@svgr/babel-plugin-add-jsx-attribute": "^6.5.1", + "@svgr/babel-plugin-remove-jsx-attribute": "*", + "@svgr/babel-plugin-remove-jsx-empty-expression": "*", + "@svgr/babel-plugin-replace-jsx-attribute-value": "^6.5.1", + "@svgr/babel-plugin-svg-dynamic-title": "^6.5.1", + "@svgr/babel-plugin-svg-em-dimensions": "^6.5.1", + "@svgr/babel-plugin-transform-react-native-svg": "^6.5.1", + "@svgr/babel-plugin-transform-svg-component": "^6.5.1" }, "engines": { "node": ">=10" @@ -2517,16 +3274,21 @@ "funding": { "type": "github", "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@svgr/core": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/core/-/core-5.5.0.tgz", - "integrity": "sha512-q52VOcsJPvV3jO1wkPtzTuKlvX7Y3xIcWRpCMtBF3MrteZJtBfQw/+u0B1BHy5ColpQc1/YVTrPEtSYIMNZlrQ==", + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/core/-/core-6.5.1.tgz", + "integrity": "sha512-/xdLSWxK5QkqG524ONSjvg3V/FkNyCv538OIBdQqPNaAta3AsXj/Bd2FbvR87yMbXO2hFSWiAe/Q6IkVPDw+mw==", "dependencies": { - "@svgr/plugin-jsx": "^5.5.0", + "@babel/core": "^7.19.6", + "@svgr/babel-preset": "^6.5.1", + "@svgr/plugin-jsx": "^6.5.1", "camelcase": "^6.2.0", - "cosmiconfig": "^7.0.0" + "cosmiconfig": "^7.0.1" }, "engines": { "node": ">=10" @@ -2537,11 +3299,12 @@ } }, "node_modules/@svgr/hast-util-to-babel-ast": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-5.5.0.tgz", - "integrity": "sha512-cAaR/CAiZRB8GP32N+1jocovUtvlj0+e65TB50/6Lcime+EA49m/8l+P2ko+XPJ4dw3xaPS3jOL4F2X4KWxoeQ==", + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-6.5.1.tgz", + "integrity": "sha512-1hnUxxjd83EAxbL4a0JDJoD3Dao3hmjvyvyEV8PzWmLK3B9m9NPlW7GKjFyoWE8nM7HnXzPcmmSyOW8yOddSXw==", "dependencies": { - "@babel/types": "^7.12.6" + "@babel/types": "^7.20.0", + "entities": "^4.4.0" }, "engines": { "node": ">=10" @@ -2552,14 +3315,14 @@ } }, "node_modules/@svgr/plugin-jsx": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-5.5.0.tgz", - "integrity": "sha512-V/wVh33j12hGh05IDg8GpIUXbjAPnTdPTKuP4VNLggnwaHMPNQNae2pRnyTAILWCQdz5GyMqtO488g7CKM8CBA==", + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-6.5.1.tgz", + "integrity": "sha512-+UdQxI3jgtSjCykNSlEMuy1jSRQlGC7pqBCPvkG/2dATdWo082zHTTK3uhnAju2/6XpE6B5mZ3z4Z8Ns01S8Gw==", "dependencies": { - "@babel/core": "^7.12.3", - "@svgr/babel-preset": "^5.5.0", - "@svgr/hast-util-to-babel-ast": "^5.5.0", - "svg-parser": "^2.0.2" + "@babel/core": "^7.19.6", + "@svgr/babel-preset": "^6.5.1", + "@svgr/hast-util-to-babel-ast": "^6.5.1", + "svg-parser": "^2.0.4" }, "engines": { "node": ">=10" @@ -2567,16 +3330,19 @@ "funding": { "type": "github", "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@svgr/core": "^6.0.0" } }, "node_modules/@svgr/plugin-svgo": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-5.5.0.tgz", - "integrity": "sha512-r5swKk46GuQl4RrVejVwpeeJaydoxkdwkM1mBKOgJLBUJPGaLci6ylg/IjhrRsREKDkr4kbMWdgOtbXEh0fyLQ==", + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-6.5.1.tgz", + "integrity": "sha512-omvZKf8ixP9z6GWgwbtmP9qQMPX4ODXi+wzbVZgomNFsUIlHA1sf4fThdwTWSsZGgvGAG6yE+b/F5gWUkcZ/iQ==", "dependencies": { - "cosmiconfig": "^7.0.0", + "cosmiconfig": "^7.0.1", "deepmerge": "^4.2.2", - "svgo": "^1.2.2" + "svgo": "^2.8.0" }, "engines": { "node": ">=10" @@ -2584,21 +3350,24 @@ "funding": { "type": "github", "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@svgr/core": "*" } }, "node_modules/@svgr/webpack": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/webpack/-/webpack-5.5.0.tgz", - "integrity": "sha512-DOBOK255wfQxguUta2INKkzPj6AIS6iafZYiYmHn6W3pHlycSRRlvWKCfLDG10fXfLWqE3DJHgRUOyJYmARa7g==", + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/webpack/-/webpack-6.5.1.tgz", + "integrity": "sha512-cQ/AsnBkXPkEK8cLbv4Dm7JGXq2XrumKnL1dRpJD9rIO2fTIlJI9a1uCciYG1F2aUsox/hJQyNGbt3soDxSRkA==", "dependencies": { - "@babel/core": "^7.12.3", - "@babel/plugin-transform-react-constant-elements": "^7.12.1", - "@babel/preset-env": "^7.12.1", - "@babel/preset-react": "^7.12.5", - "@svgr/core": "^5.5.0", - "@svgr/plugin-jsx": "^5.5.0", - "@svgr/plugin-svgo": "^5.5.0", - "loader-utils": "^2.0.0" + "@babel/core": "^7.19.6", + "@babel/plugin-transform-react-constant-elements": "^7.18.12", + "@babel/preset-env": "^7.19.4", + "@babel/preset-react": "^7.18.6", + "@babel/preset-typescript": "^7.18.6", + "@svgr/core": "^6.5.1", + "@svgr/plugin-jsx": "^6.5.1", + "@svgr/plugin-svgo": "^6.5.1" }, "engines": { "node": ">=10" @@ -2620,90 +3389,165 @@ } }, "node_modules/@trysound/sax": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.1.1.tgz", - "integrity": "sha512-Z6DoceYb/1xSg5+e+ZlPZ9v0N16ZvZ+wYMraFue4HYrE4ttONKtsvruIRf6t9TBR0YvSOfi1hUU0fJfBLCDYow==", + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", + "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", "engines": { "node": ">=10.13.0" } }, + "node_modules/@types/body-parser": { + "version": "1.19.2", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", + "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", + "dependencies": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "node_modules/@types/bonjour": { + "version": "3.5.10", + "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.10.tgz", + "integrity": "sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/connect": { + "version": "3.4.35", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", + "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/connect-history-api-fallback": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.3.5.tgz", + "integrity": "sha512-h8QJa8xSb1WD4fpKBDcATDNGXghFj6/3GRWG6dhmRcu0RX1Ubasur2Uvx5aeEwlf0MwblEC2bMzzMQntxnw/Cw==", + "dependencies": { + "@types/express-serve-static-core": "*", + "@types/node": "*" + } + }, "node_modules/@types/eslint": { - "version": "7.2.10", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-7.2.10.tgz", - "integrity": "sha512-kUEPnMKrqbtpCq/KTaGFFKAcz6Ethm2EjCoKIDaCmfRBWLbFuTcOJfTlorwbnboXBzahqWLgUp1BQeKHiJzPUQ==", + "version": "8.4.7", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.7.tgz", + "integrity": "sha512-ehM7cCt2RSFs42mb+lcmhFT9ouIlV92PuaeRGn8N8c98oMjG4Z5pJHA9b1QiCcuqnbPSHcyfiD3mlhqMaHsQIw==", "dependencies": { "@types/estree": "*", "@types/json-schema": "*" } }, "node_modules/@types/eslint-scope": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.0.tgz", - "integrity": "sha512-O/ql2+rrCUe2W2rs7wMR+GqPRcgB6UiqN5RhrR5xruFlY7l9YLMn0ZkDzjoHLeiFkR8MCQZVudUuuvQ2BLC9Qw==", + "version": "3.7.4", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz", + "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==", "dependencies": { "@types/eslint": "*", "@types/estree": "*" } }, "node_modules/@types/estree": { - "version": "0.0.47", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.47.tgz", - "integrity": "sha512-c5ciR06jK8u9BstrmJyO97m+klJrrhCf9u3rLu3DEAJBirxRqSCvDQoYKmxuYwQI5SZChAWu+tq9oVlGRuzPAg==" + "version": "0.0.51", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", + "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==" }, - "node_modules/@types/github-slugger": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@types/github-slugger/-/github-slugger-1.3.0.tgz", - "integrity": "sha512-J/rMZa7RqiH/rT29TEVZO4nBoDP9XJOjnbbIofg7GQKs4JIduEO3WLpte+6WeUz/TcrXKlY+bM7FYrp8yFB+3g==" + "node_modules/@types/express": { + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.15.tgz", + "integrity": "sha512-Yv0k4bXGOH+8a+7bELd2PqHQsuiANB+A8a4gnQrkRWzrkKlb6KHaVvyXhqs04sVW/OWlbPyYxRgYlIXLfrufMQ==", + "dependencies": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.31", + "@types/qs": "*", + "@types/serve-static": "*" + } }, - "node_modules/@types/glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-SEYeGAIQIQX8NN6LDKprLjbrd5dARM5EXsd8GI/A5l0apYI1fGMWgPHSe4ZKL4eozlAyI+doUE9XbYS4xCkQ1w==", + "node_modules/@types/express-serve-static-core": { + "version": "4.17.32", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.32.tgz", + "integrity": "sha512-aI5h/VOkxOF2Z1saPy0Zsxs5avets/iaiAJYznQFm5By/pamU31xWKL//epiF4OfUA2qTOc9PV6tCUjhO8wlZA==", "dependencies": { - "@types/minimatch": "*", - "@types/node": "*" + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*" } }, "node_modules/@types/hast": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@types/hast/-/hast-2.3.1.tgz", - "integrity": "sha512-viwwrB+6xGzw+G1eWpF9geV3fnsDgXqHG+cqgiHrvQfDUW5hzhCyV7Sy3UJxhfRFBsgky2SSW33qi/YrIkjX5Q==", + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/@types/hast/-/hast-2.3.4.tgz", + "integrity": "sha512-wLEm0QvaoawEDoTRwzTXp4b4jpwiJDvR5KMnFnVodm3scufTlBOWRD6N1OBf9TZMhjlNsSfcO5V+7AF4+Vy+9g==", "dependencies": { "@types/unist": "*" } }, + "node_modules/@types/history": { + "version": "4.7.11", + "resolved": "https://registry.npmjs.org/@types/history/-/history-4.7.11.tgz", + "integrity": "sha512-qjDJRrmvBMiTx+jyLxvLfJU7UznFuokDv4f3WRuriHKERccVpFU+8XMQUAbDzoiJCsmexxRExQeMwwCdamSKDA==" + }, "node_modules/@types/html-minifier-terser": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz", - "integrity": "sha512-giAlZwstKbmvMk1OO7WXSj4OZ0keXAcl2TQq4LWHiiPH2ByaH7WeUzng+Qej8UPxxv+8lRTuouo0iaNDBuzIBA==" + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", + "integrity": "sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==" + }, + "node_modules/@types/http-proxy": { + "version": "1.17.9", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.9.tgz", + "integrity": "sha512-QsbSjA/fSk7xB+UXlCT3wHBy5ai9wOcNDWwZAtud+jXhwOM3l+EYZh8Lng4+/6n8uar0J7xILzqftJdJ/Wdfkw==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", + "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==" + }, + "node_modules/@types/istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", + "dependencies": { + "@types/istanbul-lib-coverage": "*" + } + }, + "node_modules/@types/istanbul-reports": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", + "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "dependencies": { + "@types/istanbul-lib-report": "*" + } }, "node_modules/@types/json-schema": { - "version": "7.0.7", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.7.tgz", - "integrity": "sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA==" + "version": "7.0.11", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", + "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==" }, "node_modules/@types/katex": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@types/katex/-/katex-0.11.0.tgz", - "integrity": "sha512-27BfE8zASRLYfSBNMk5/+KIjr2CBBrH0i5lhsO04fca4TGirIIMay73v3zNkzqmsaeIa/Mi5kejWDcxPLAmkvA==" + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/@types/katex/-/katex-0.11.1.tgz", + "integrity": "sha512-DUlIj2nk0YnJdlWgsFuVKcX27MLW0KbKmGVoUHmFr+74FYYNUDAaj9ZqTADvsbE8rfxuVmSFc7KczYn5Y09ozg==" }, "node_modules/@types/mdast": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.3.tgz", - "integrity": "sha512-SXPBMnFVQg1s00dlMCc/jCdvPqdE4mXaMMCeRlxLDmTAEoegHT53xKtkDnzDTOcmMHUfcjyf36/YYZ6SxRdnsw==", + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.10.tgz", + "integrity": "sha512-W864tg/Osz1+9f4lrGTZpCSO5/z4608eUp19tbozkq2HJK6i3z1kT0H9tlADXuYIb1YYOBByU4Jsqkk75q48qA==", "dependencies": { "@types/unist": "*" } }, - "node_modules/@types/minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-1z8k4wzFnNjVK/tlxvrWuK5WMt6mydWWP7+zvH5eFep4oj+UkrfiJTRtjCeBXNpwaA/FYqqtb4/QS4ianFpIRA==" + "node_modules/@types/mime": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-3.0.1.tgz", + "integrity": "sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA==" }, "node_modules/@types/node": { - "version": "15.0.3", - "resolved": "https://registry.npmjs.org/@types/node/-/node-15.0.3.tgz", - "integrity": "sha512-/WbxFeBU+0F79z9RdEOXH4CsDga+ibi5M8uEYr91u3CkT/pdWcV8MCook+4wDPnZBexRdwWS+PiVZ2xJviAzcQ==" + "version": "18.11.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.3.tgz", + "integrity": "sha512-fNjDQzzOsZeKZu5NATgXUPsaFaTxeRgFXoosrHivTl8RGeV733OLawXsGfEk9a8/tySyZUyiZ6E8LcjPFZ2y1A==" }, "node_modules/@types/parse-json": { "version": "4.0.0", @@ -2716,174 +3560,256 @@ "integrity": "sha512-kUNnecmtkunAoQ3CnjmMkzNU/gtxG8guhi+Fk2U/kOpIKjIMKnXGp4IJCgQJrXSgMsWYimYG4TGjz/UzbGEBTw==" }, "node_modules/@types/prop-types": { - "version": "15.7.3", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.3.tgz", - "integrity": "sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw==", - "peer": true + "version": "15.7.5", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", + "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==" }, - "node_modules/@types/q": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.4.tgz", - "integrity": "sha512-1HcDas8SEj4z1Wc696tH56G8OlRaH/sqZOynNNB+HF0WOeXPaxTtbYzJY2oEfiUxjSKjhCKr+MvR7dCHcEelug==" + "node_modules/@types/qs": { + "version": "6.9.7", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", + "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==" + }, + "node_modules/@types/range-parser": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", + "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==" }, "node_modules/@types/react": { - "version": "17.0.5", - "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.5.tgz", - "integrity": "sha512-bj4biDB9ZJmGAYTWSKJly6bMr4BLUiBrx9ujiJEoP9XIDY9CTaPGxE5QWN/1WjpPLzYF7/jRNnV2nNxNe970sw==", - "peer": true, + "version": "18.0.26", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.26.tgz", + "integrity": "sha512-hCR3PJQsAIXyxhTNSiDFY//LhnMZWpNNr5etoCqx/iUfGc5gXWtQR2Phl908jVR6uPXacojQWTg4qRpkxTuGug==", "dependencies": { "@types/prop-types": "*", "@types/scheduler": "*", "csstype": "^3.0.2" } }, + "node_modules/@types/react-router": { + "version": "5.1.20", + "resolved": "https://registry.npmjs.org/@types/react-router/-/react-router-5.1.20.tgz", + "integrity": "sha512-jGjmu/ZqS7FjSH6owMcD5qpq19+1RS9DeVRqfl1FeBMxTDQAGwlMWOcs52NDoXaNKyG3d1cYQFMs9rCrb88o9Q==", + "dependencies": { + "@types/history": "^4.7.11", + "@types/react": "*" + } + }, + "node_modules/@types/react-router-config": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/@types/react-router-config/-/react-router-config-5.0.6.tgz", + "integrity": "sha512-db1mx37a1EJDf1XeX8jJN7R3PZABmJQXR8r28yUjVMFSjkmnQo6X6pOEEmNl+Tp2gYQOGPdYbFIipBtdElZ3Yg==", + "dependencies": { + "@types/history": "^4.7.11", + "@types/react": "*", + "@types/react-router": "*" + } + }, + "node_modules/@types/react-router-dom": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/@types/react-router-dom/-/react-router-dom-5.3.3.tgz", + "integrity": "sha512-kpqnYK4wcdm5UaWI3fLcELopqLrHgLqNsdpHauzlQktfkHL3npOSwtj1Uz9oKBAzs7lFtVkV8j83voAz2D8fhw==", + "dependencies": { + "@types/history": "^4.7.11", + "@types/react": "*", + "@types/react-router": "*" + } + }, + "node_modules/@types/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==" + }, "node_modules/@types/sax": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@types/sax/-/sax-1.2.1.tgz", - "integrity": "sha512-dqYdvN7Sbw8QT/0Ci5rhjE4/iCMJEM0Y9rHpCu+gGXD9Lwbz28t6HI2yegsB6BoV1sShRMU6lAmAcgRjmFy7LA==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@types/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-pSAff4IAxJjfAXUG6tFkO7dsSbTmf8CtUpfhhZ5VhkRpC4628tJhh3+V6H1E+/Gs9piSzYKT5yzHO5M4GG9jkw==", "dependencies": { "@types/node": "*" } }, "node_modules/@types/scheduler": { - "version": "0.16.1", - "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.1.tgz", - "integrity": "sha512-EaCxbanVeyxDRTQBkdLb3Bvl/HK7PBK6UJjsSixB0iHKoWxE5uu2Q/DgtpOhPIojN0Zl1whvOd7PoHs2P0s5eA==", - "peer": true + "version": "0.16.2", + "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", + "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==" + }, + "node_modules/@types/serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg==", + "dependencies": { + "@types/express": "*" + } + }, + "node_modules/@types/serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-z5xyF6uh8CbjAu9760KDKsH2FcDxZ2tFCsA4HIMWE6IkiYMXfVoa+4f9KX+FN0ZLsaMw1WNG2ETLA6N+/YA+cg==", + "dependencies": { + "@types/mime": "*", + "@types/node": "*" + } + }, + "node_modules/@types/sockjs": { + "version": "0.3.33", + "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.33.tgz", + "integrity": "sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw==", + "dependencies": { + "@types/node": "*" + } }, "node_modules/@types/unist": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.3.tgz", - "integrity": "sha512-FvUupuM3rlRsRtCN+fDudtmytGO6iHJuuRKS1Ss0pG5z8oX0diNEw94UEL7hgDbpN94rgaK5R7sWm6RrSkZuAQ==" + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.6.tgz", + "integrity": "sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ==" + }, + "node_modules/@types/ws": { + "version": "8.5.4", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.4.tgz", + "integrity": "sha512-zdQDHKUgcX/zBc4GrwsE/7dVdAD8JR4EuiAXiiUhhfyIJXXb2+PrGshFyeXWQPMmmZ2XxgaqclgpIC7eTXc1mg==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/yargs": { + "version": "17.0.19", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.19.tgz", + "integrity": "sha512-cAx3qamwaYX9R0fzOIZAlFpo4A+1uBVCxqpKz9D26uTF4srRXaGTTsikQmaotCtNdbhzyUH7ft6p9ktz9s6UNQ==", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@types/yargs-parser": { + "version": "21.0.0", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", + "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==" }, "node_modules/@webassemblyjs/ast": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.0.tgz", - "integrity": "sha512-kX2W49LWsbthrmIRMbQZuQDhGtjyqXfEmmHyEi4XWnSZtPmxY0+3anPIzsnRb45VH/J55zlOfWvZuY47aJZTJg==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", + "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", "dependencies": { - "@webassemblyjs/helper-numbers": "1.11.0", - "@webassemblyjs/helper-wasm-bytecode": "1.11.0" + "@webassemblyjs/helper-numbers": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1" } }, "node_modules/@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.0.tgz", - "integrity": "sha512-Q/aVYs/VnPDVYvsCBL/gSgwmfjeCb4LW8+TMrO3cSzJImgv8lxxEPM2JA5jMrivE7LSz3V+PFqtMbls3m1exDA==" + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", + "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==" }, "node_modules/@webassemblyjs/helper-api-error": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.0.tgz", - "integrity": "sha512-baT/va95eXiXb2QflSx95QGT5ClzWpGaa8L7JnJbgzoYeaA27FCvuBXU758l+KXWRndEmUXjP0Q5fibhavIn8w==" + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", + "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==" }, "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.0.tgz", - "integrity": "sha512-u9HPBEl4DS+vA8qLQdEQ6N/eJQ7gT7aNvMIo8AAWvAl/xMrcOSiI2M0MAnMCy3jIFke7bEee/JwdX1nUpCtdyA==" + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", + "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==" }, "node_modules/@webassemblyjs/helper-numbers": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.0.tgz", - "integrity": "sha512-DhRQKelIj01s5IgdsOJMKLppI+4zpmcMQ3XboFPLwCpSNH6Hqo1ritgHgD0nqHeSYqofA6aBN/NmXuGjM1jEfQ==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", + "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", "dependencies": { - "@webassemblyjs/floating-point-hex-parser": "1.11.0", - "@webassemblyjs/helper-api-error": "1.11.0", + "@webassemblyjs/floating-point-hex-parser": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", "@xtuc/long": "4.2.2" } }, "node_modules/@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.0.tgz", - "integrity": "sha512-MbmhvxXExm542tWREgSFnOVo07fDpsBJg3sIl6fSp9xuu75eGz5lz31q7wTLffwL3Za7XNRCMZy210+tnsUSEA==" + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", + "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==" }, "node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.0.tgz", - "integrity": "sha512-3Eb88hcbfY/FCukrg6i3EH8H2UsD7x8Vy47iVJrP967A9JGqgBVL9aH71SETPx1JrGsOUVLo0c7vMCN22ytJew==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", + "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", "dependencies": { - "@webassemblyjs/ast": "1.11.0", - "@webassemblyjs/helper-buffer": "1.11.0", - "@webassemblyjs/helper-wasm-bytecode": "1.11.0", - "@webassemblyjs/wasm-gen": "1.11.0" + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1" } }, "node_modules/@webassemblyjs/ieee754": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.0.tgz", - "integrity": "sha512-KXzOqpcYQwAfeQ6WbF6HXo+0udBNmw0iXDmEK5sFlmQdmND+tr773Ti8/5T/M6Tl/413ArSJErATd8In3B+WBA==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", + "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", "dependencies": { "@xtuc/ieee754": "^1.2.0" } }, "node_modules/@webassemblyjs/leb128": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.0.tgz", - "integrity": "sha512-aqbsHa1mSQAbeeNcl38un6qVY++hh8OpCOzxhixSYgbRfNWcxJNJQwe2rezK9XEcssJbbWIkblaJRwGMS9zp+g==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", + "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", "dependencies": { "@xtuc/long": "4.2.2" } }, "node_modules/@webassemblyjs/utf8": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.0.tgz", - "integrity": "sha512-A/lclGxH6SpSLSyFowMzO/+aDEPU4hvEiooCMXQPcQFPPJaYcPQNKGOCLUySJsYJ4trbpr+Fs08n4jelkVTGVw==" + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", + "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==" }, "node_modules/@webassemblyjs/wasm-edit": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.0.tgz", - "integrity": "sha512-JHQ0damXy0G6J9ucyKVXO2j08JVJ2ntkdJlq1UTiUrIgfGMmA7Ik5VdC/L8hBK46kVJgujkBIoMtT8yVr+yVOQ==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", + "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", "dependencies": { - "@webassemblyjs/ast": "1.11.0", - "@webassemblyjs/helper-buffer": "1.11.0", - "@webassemblyjs/helper-wasm-bytecode": "1.11.0", - "@webassemblyjs/helper-wasm-section": "1.11.0", - "@webassemblyjs/wasm-gen": "1.11.0", - "@webassemblyjs/wasm-opt": "1.11.0", - "@webassemblyjs/wasm-parser": "1.11.0", - "@webassemblyjs/wast-printer": "1.11.0" + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/helper-wasm-section": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-opt": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "@webassemblyjs/wast-printer": "1.11.1" } }, "node_modules/@webassemblyjs/wasm-gen": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.0.tgz", - "integrity": "sha512-BEUv1aj0WptCZ9kIS30th5ILASUnAPEvE3tVMTrItnZRT9tXCLW2LEXT8ezLw59rqPP9klh9LPmpU+WmRQmCPQ==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", + "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", "dependencies": { - "@webassemblyjs/ast": "1.11.0", - "@webassemblyjs/helper-wasm-bytecode": "1.11.0", - "@webassemblyjs/ieee754": "1.11.0", - "@webassemblyjs/leb128": "1.11.0", - "@webassemblyjs/utf8": "1.11.0" + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" } }, "node_modules/@webassemblyjs/wasm-opt": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.0.tgz", - "integrity": "sha512-tHUSP5F4ywyh3hZ0+fDQuWxKx3mJiPeFufg+9gwTpYp324mPCQgnuVKwzLTZVqj0duRDovnPaZqDwoyhIO8kYg==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", + "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", "dependencies": { - "@webassemblyjs/ast": "1.11.0", - "@webassemblyjs/helper-buffer": "1.11.0", - "@webassemblyjs/wasm-gen": "1.11.0", - "@webassemblyjs/wasm-parser": "1.11.0" + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1" } }, "node_modules/@webassemblyjs/wasm-parser": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.0.tgz", - "integrity": "sha512-6L285Sgu9gphrcpDXINvm0M9BskznnzJTE7gYkjDbxET28shDqp27wpruyx3C2S/dvEwiigBwLA1cz7lNUi0kw==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", + "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", "dependencies": { - "@webassemblyjs/ast": "1.11.0", - "@webassemblyjs/helper-api-error": "1.11.0", - "@webassemblyjs/helper-wasm-bytecode": "1.11.0", - "@webassemblyjs/ieee754": "1.11.0", - "@webassemblyjs/leb128": "1.11.0", - "@webassemblyjs/utf8": "1.11.0" + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" } }, "node_modules/@webassemblyjs/wast-printer": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.0.tgz", - "integrity": "sha512-Fg5OX46pRdTgB7rKIUojkh9vXaVN6sGYCnEiJN1GYkb0RPwShZXp6KTDqmoMdQPKhcroOXh3fEzmkWmCYaKYhQ==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", + "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", "dependencies": { - "@webassemblyjs/ast": "1.11.0", + "@webassemblyjs/ast": "1.11.1", "@xtuc/long": "4.2.2" } }, @@ -2898,12 +3824,12 @@ "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==" }, "node_modules/accepts": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", - "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", "dependencies": { - "mime-types": "~2.1.24", - "negotiator": "0.6.2" + "mime-types": "~2.1.34", + "negotiator": "0.6.3" }, "engines": { "node": ">= 0.6" @@ -2921,27 +3847,27 @@ } }, "node_modules/acorn-jsx": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz", - "integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==", + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, "node_modules/acorn-walk": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.1.0.tgz", - "integrity": "sha512-mjmzmv12YIG/G8JQdQuz2MUDShEJ6teYpT5bmWA4q7iwoGen8xtt3twF3OvzIUl+Q06aWIjvnwQUKvQ6TtMRjg==", + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", "engines": { "node": ">=0.4.0" } }, "node_modules/address": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/address/-/address-1.1.2.tgz", - "integrity": "sha512-aT6camzM4xEA54YVJYSqxz1kv4IHnQZRtThJJHhUMRExaU5spC7jX5ugSwTaTgJliIgs4VhZOk7htClvQ/LmRA==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/address/-/address-1.2.1.tgz", + "integrity": "sha512-B+6bi5D34+fDYENiH5qOlA0cV2rAGKuWZ9LeyUUehbXy8e0VS9e498yO0Jeeh+iM+6KbfudHTFjXw2MmJD4QRA==", "engines": { - "node": ">= 0.12.0" + "node": ">= 10.0.0" } }, "node_modules/aggregate-error": { @@ -2971,14 +3897,42 @@ "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/ajv-errors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz", - "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==", + "node_modules/ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "dependencies": { + "ajv": "^8.0.0" + }, "peerDependencies": { - "ajv": ">=5.0.0" + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/ajv-formats/node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, + "node_modules/ajv-formats/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + }, "node_modules/ajv-keywords": { "version": "3.5.2", "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", @@ -2988,132 +3942,57 @@ } }, "node_modules/algoliasearch": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-4.9.1.tgz", - "integrity": "sha512-EeJUYXzBEhZSsL6tXc3hseLBCtlNLa1MZ4mlMK6EeX38yRjY5vgnFcNNml6uUhlOjvheKxgkKRpPWkxgL8Cqkg==", - "dependencies": { - "@algolia/cache-browser-local-storage": "4.9.1", - "@algolia/cache-common": "4.9.1", - "@algolia/cache-in-memory": "4.9.1", - "@algolia/client-account": "4.9.1", - "@algolia/client-analytics": "4.9.1", - "@algolia/client-common": "4.9.1", - "@algolia/client-recommendation": "4.9.1", - "@algolia/client-search": "4.9.1", - "@algolia/logger-common": "4.9.1", - "@algolia/logger-console": "4.9.1", - "@algolia/requester-browser-xhr": "4.9.1", - "@algolia/requester-common": "4.9.1", - "@algolia/requester-node-http": "4.9.1", - "@algolia/transporter": "4.9.1" + "version": "4.14.2", + "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-4.14.2.tgz", + "integrity": "sha512-ngbEQonGEmf8dyEh5f+uOIihv4176dgbuOZspiuhmTTBRBuzWu3KCGHre6uHj5YyuC7pNvQGzB6ZNJyZi0z+Sg==", + "dependencies": { + "@algolia/cache-browser-local-storage": "4.14.2", + "@algolia/cache-common": "4.14.2", + "@algolia/cache-in-memory": "4.14.2", + "@algolia/client-account": "4.14.2", + "@algolia/client-analytics": "4.14.2", + "@algolia/client-common": "4.14.2", + "@algolia/client-personalization": "4.14.2", + "@algolia/client-search": "4.14.2", + "@algolia/logger-common": "4.14.2", + "@algolia/logger-console": "4.14.2", + "@algolia/requester-browser-xhr": "4.14.2", + "@algolia/requester-common": "4.14.2", + "@algolia/requester-node-http": "4.14.2", + "@algolia/transporter": "4.14.2" } }, "node_modules/algoliasearch-helper": { - "version": "3.4.4", - "resolved": "https://registry.npmjs.org/algoliasearch-helper/-/algoliasearch-helper-3.4.4.tgz", - "integrity": "sha512-OjyVLjykaYKCMxxRMZNiwLp8CS310E0qAeIY2NaublcmLAh8/SL19+zYHp7XCLtMem2ZXwl3ywMiA32O9jszuw==", + "version": "3.11.1", + "resolved": "https://registry.npmjs.org/algoliasearch-helper/-/algoliasearch-helper-3.11.1.tgz", + "integrity": "sha512-mvsPN3eK4E0bZG0/WlWJjeqe/bUD2KOEVOl0GyL/TGXn6wcpZU8NOuztGHCUKXkyg5gq6YzUakVTmnmSSO5Yiw==", "dependencies": { - "events": "^1.1.1" + "@algolia/events": "^4.0.1" }, "peerDependencies": { - "algoliasearch": ">= 3.1 < 5" + "algoliasearch": ">= 3.1 < 6" } }, - "node_modules/alphanum-sort": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz", - "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=" - }, "node_modules/ansi-align": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.0.tgz", - "integrity": "sha512-ZpClVKqXN3RGBmKibdfWzqCY4lnjEuoNzU5T0oEFpfd/z5qJHVarukridD4juLO2FXMiwUQxr9WqQtaYa8XRYw==", - "dependencies": { - "string-width": "^3.0.0" - } - }, - "node_modules/ansi-align/node_modules/ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "engines": { - "node": ">=6" - } - }, - "node_modules/ansi-align/node_modules/emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" - }, - "node_modules/ansi-align/node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "engines": { - "node": ">=4" - } - }, - "node_modules/ansi-align/node_modules/string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dependencies": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/ansi-align/node_modules/strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", + "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", "dependencies": { - "ansi-regex": "^4.1.0" - }, - "engines": { - "node": ">=6" + "string-width": "^4.1.0" } }, "node_modules/ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", + "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", "engines": { "node": ">=6" } }, - "node_modules/ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dependencies": { - "type-fest": "^0.21.3" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-escapes/node_modules/type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-html": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz", - "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=", + "node_modules/ansi-html-community": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", + "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", "engines": [ "node >= 0.8.0" ], @@ -3122,9 +4001,9 @@ } }, "node_modules/ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "engines": { "node": ">=8" } @@ -3156,54 +4035,30 @@ } }, "node_modules/arg": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.0.tgz", - "integrity": "sha512-4P8Zm2H+BRS+c/xX1LrHw0qKpEhdlZjLCgWy+d78T9vqa2Z2SiD2wMrYuWIAFy5IZUD7nnNXroRttz+0RzlrzQ==" + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==" }, "node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" }, - "node_modules/arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" + "node_modules/array-flatten": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", + "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==" }, "node_modules/array-includes": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.3.tgz", - "integrity": "sha512-gcem1KlBU7c9rB+Rq8/3PPKsK2kjqeEBa3bD5kkQo4nYlOHQCJqIJFqBXDEfwaRuYTT4E+FxA9xez7Gf/e3Q7A==", + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.5.tgz", + "integrity": "sha512-iSDYZMMyTPkiFasVqfuAQnWAYcvO/SeBSCGKePoEthjp4LEMTe4uLc7b025o4jAZpHhihh8xPo99TNWUWWkGDQ==", "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5", "get-intrinsic": "^1.1.1", - "is-string": "^1.0.5" + "is-string": "^1.0.7" }, "engines": { "node": ">= 0.4" @@ -3220,31 +4075,15 @@ "node": ">=8" } }, - "node_modules/array-uniq": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/array.prototype.flatmap": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.2.4.tgz", - "integrity": "sha512-r9Z0zYoxqHz60vvQbWEdXIEtCwHF0yxaWfno9qzXeNHvfyl3BZqygmGzb84dsubyaXLH4husF+NFgMSdpZhk2Q==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.0.tgz", + "integrity": "sha512-PZC9/8TKAIxcWKdyeb77EzULHPrIX/tIZebLJUQOMR1OwYosT8yggdfWScfTBCDj5utONvOuPQQumYsU2ULbkg==", "dependencies": { - "call-bind": "^1.0.0", + "call-bind": "^1.0.2", "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.1", - "function-bind": "^1.1.1" + "es-abstract": "^1.19.2", + "es-shim-unscopables": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -3256,15 +4095,7 @@ "node_modules/asap": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=" - }, - "node_modules/assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", - "engines": { - "node": ">=0.10.0" - } + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==" }, "node_modules/astral-regex": { "version": "2.0.0", @@ -3274,24 +4105,6 @@ "node": ">=8" } }, - "node_modules/async": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", - "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", - "dependencies": { - "lodash": "^4.17.14" - } - }, - "node_modules/async-each": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", - "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==" - }, - "node_modules/async-limiter": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", - "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==" - }, "node_modules/at-least-node": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", @@ -3300,28 +4113,27 @@ "node": ">= 4.0.0" } }, - "node_modules/atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", - "bin": { - "atob": "bin/atob.js" - }, - "engines": { - "node": ">= 4.5.0" - } - }, "node_modules/autoprefixer": { - "version": "10.2.5", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.2.5.tgz", - "integrity": "sha512-7H4AJZXvSsn62SqZyJCP+1AWwOuoYpUfK6ot9vm0e87XD6mT8lDywc9D9OTJPMULyGcvmIxzTAMeG2Cc+YX+fA==", - "dependencies": { - "browserslist": "^4.16.3", - "caniuse-lite": "^1.0.30001196", - "colorette": "^1.2.2", - "fraction.js": "^4.0.13", + "version": "10.4.12", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.12.tgz", + "integrity": "sha512-WrCGV9/b97Pa+jtwf5UGaRjgQIg7OK3D06GnoYoZNcG1Xb8Gt3EfuKjlhh9i/VtT16g6PYjZ69jdJ2g8FxSC4Q==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + } + ], + "dependencies": { + "browserslist": "^4.21.4", + "caniuse-lite": "^1.0.30001407", + "fraction.js": "^4.2.0", "normalize-range": "^0.1.2", - "postcss-value-parser": "^4.1.0" + "picocolors": "^1.0.0", + "postcss-value-parser": "^4.2.0" }, "bin": { "autoprefixer": "bin/autoprefixer" @@ -3329,20 +4141,16 @@ "engines": { "node": "^10 || ^12 || >=14" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, "peerDependencies": { "postcss": "^8.1.0" } }, "node_modules/axios": { - "version": "0.21.1", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.1.tgz", - "integrity": "sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA==", + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.25.0.tgz", + "integrity": "sha512-cD8FOb0tRH3uuEe6+evtAbgJtfxr7ly3fQjYcMcuPlgkwVS9xboaVIpcDV+cYQe+yGykgwZCs1pzjntcGa6l5g==", "dependencies": { - "follow-redirects": "^1.10.0" + "follow-redirects": "^1.14.7" } }, "node_modules/babel-eslint": { @@ -3366,12 +4174,12 @@ } }, "node_modules/babel-loader": { - "version": "8.2.2", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.2.tgz", - "integrity": "sha512-JvTd0/D889PQBtUXJ2PXaKU/pjZDMtHA9V2ecm+eNRmmBCMR09a+fmpGTNwnJtFmFl5Ei7Vy47LjBb+L0wQ99g==", + "version": "8.2.5", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.5.tgz", + "integrity": "sha512-OSiFfH89LrEMiWd4pLNqGz4CwJDtbs2ZVc+iGu2HrkRfPxId9F2anQj38IxWpmRfsUY0aBZYi1EFcd3mhtRMLQ==", "dependencies": { "find-cache-dir": "^3.3.1", - "loader-utils": "^1.4.0", + "loader-utils": "^2.0.0", "make-dir": "^3.1.0", "schema-utils": "^2.6.5" }, @@ -3383,30 +4191,6 @@ "webpack": ">=2" } }, - "node_modules/babel-loader/node_modules/json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dependencies": { - "minimist": "^1.2.0" - }, - "bin": { - "json5": "lib/cli.js" - } - }, - "node_modules/babel-loader/node_modules/loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - }, - "engines": { - "node": ">=4.0.0" - } - }, "node_modules/babel-plugin-apply-mdx-type-prop": { "version": "1.6.22", "resolved": "https://registry.npmjs.org/babel-plugin-apply-mdx-type-prop/-/babel-plugin-apply-mdx-type-prop-1.6.22.tgz", @@ -3429,9 +4213,9 @@ "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" }, "node_modules/babel-plugin-dynamic-import-node": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.0.tgz", - "integrity": "sha512-o6qFkpeQEBxcqt0XYlWzAVxNCSCZdUgcR8IRlhD/8DylxjjO4foPcvTW0GGKa/cVt3rvxZ7o5ippJ+/0nvLhlQ==", + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", + "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", "dependencies": { "object.assign": "^4.1.0" } @@ -3454,12 +4238,12 @@ "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" }, "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.2.0.tgz", - "integrity": "sha512-9bNwiR0dS881c5SHnzCmmGlMkJLl0OUZvxrxHo9w/iNoRuqaPjqlvBf4HrovXtQs/au5yKkpcdgfT1cC5PAZwg==", + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz", + "integrity": "sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==", "dependencies": { - "@babel/compat-data": "^7.13.11", - "@babel/helper-define-polyfill-provider": "^0.2.0", + "@babel/compat-data": "^7.17.7", + "@babel/helper-define-polyfill-provider": "^0.3.3", "semver": "^6.1.1" }, "peerDependencies": { @@ -3475,23 +4259,23 @@ } }, "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.2.0.tgz", - "integrity": "sha512-zZyi7p3BCUyzNxLx8KV61zTINkkV65zVkDAFNZmrTCRVhjo1jAS+YLvDJ9Jgd/w2tsAviCwFHReYfxO3Iql8Yg==", + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.6.0.tgz", + "integrity": "sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==", "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.2.0", - "core-js-compat": "^3.9.1" + "@babel/helper-define-polyfill-provider": "^0.3.3", + "core-js-compat": "^3.25.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.2.0.tgz", - "integrity": "sha512-J7vKbCuD2Xi/eEHxquHN14bXAW9CXtecwuLrOIDJtcZzTaPzV1VdEfoUf9AzcRBMolKUQKM9/GVojeh0hFiqMg==", + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.1.tgz", + "integrity": "sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==", "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.2.0" + "@babel/helper-define-polyfill-provider": "^0.3.3" }, "peerDependencies": { "@babel/core": "^7.0.0-0" @@ -3511,43 +4295,15 @@ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, - "node_modules/base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", - "dependencies": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/base/node_modules/define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dependencies": { - "is-descriptor": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/base16": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/base16/-/base16-1.0.0.tgz", - "integrity": "sha1-4pf2DX7BAUp6lxo568ipjAtoHnA=" + "integrity": "sha512-pNdYkNPiJUnEhnfXV56+sQy8+AaPcG3POZAUnwr4EeqCUZFz4u2PePbo3e5Gj4ziYPCWGUZT9RHisvJKnwFuBQ==" }, "node_modules/batch": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", - "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=" + "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==" }, "node_modules/big.js": { "version": "5.2.2", @@ -3565,36 +4321,33 @@ "node": ">=8" } }, - "node_modules/bindings": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", - "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", - "optional": true, - "dependencies": { - "file-uri-to-path": "1.0.0" - } - }, - "node_modules/bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" - }, "node_modules/body-parser": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", - "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", + "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", "dependencies": { - "bytes": "3.1.0", + "bytes": "3.1.2", "content-type": "~1.0.4", "debug": "2.6.9", - "depd": "~1.1.2", - "http-errors": "1.7.2", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", "iconv-lite": "0.4.24", - "on-finished": "~2.3.0", - "qs": "6.7.0", - "raw-body": "2.4.0", - "type-is": "~1.6.17" + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/body-parser/node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", "engines": { "node": ">= 0.8" } @@ -3610,41 +4363,34 @@ "node_modules/body-parser/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, - "node_modules/bonjour": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz", - "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=", + "node_modules/bonjour-service": { + "version": "1.0.14", + "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.0.14.tgz", + "integrity": "sha512-HIMbgLnk1Vqvs6B4Wq5ep7mxvj9sGz5d1JJyDNSGNIdA/w2MCz6GTjWTdjqOJV1bEPj+6IkxDvWNFKEBxNt4kQ==", "dependencies": { - "array-flatten": "^2.1.0", - "deep-equal": "^1.0.1", + "array-flatten": "^2.1.2", "dns-equal": "^1.0.0", - "dns-txt": "^2.0.2", - "multicast-dns": "^6.0.1", - "multicast-dns-service-types": "^1.1.0" + "fast-deep-equal": "^3.1.3", + "multicast-dns": "^7.2.5" } }, - "node_modules/bonjour/node_modules/array-flatten": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", - "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==" - }, "node_modules/boolbase": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=" + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==" }, "node_modules/boxen": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.0.1.tgz", - "integrity": "sha512-49VBlw+PrWEF51aCmy7QIteYPIFZxSpvqBdP/2itCPPlJ49kj9zg/XPRFrdkne2W+CfwXUls8exMvu1RysZpKA==", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", + "integrity": "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==", "dependencies": { "ansi-align": "^3.0.0", "camelcase": "^6.2.0", "chalk": "^4.1.0", "cli-boxes": "^2.2.1", - "string-width": "^4.2.0", + "string-width": "^4.2.2", "type-fest": "^0.20.2", "widest-line": "^3.1.0", "wrap-ansi": "^7.0.0" @@ -3677,64 +4423,53 @@ } }, "node_modules/browserslist": { - "version": "4.16.6", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz", - "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==", + "version": "4.21.4", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz", + "integrity": "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + } + ], "dependencies": { - "caniuse-lite": "^1.0.30001219", - "colorette": "^1.2.2", - "electron-to-chromium": "^1.3.723", - "escalade": "^3.1.1", - "node-releases": "^1.1.71" + "caniuse-lite": "^1.0.30001400", + "electron-to-chromium": "^1.4.251", + "node-releases": "^2.0.6", + "update-browserslist-db": "^1.0.9" }, "bin": { "browserslist": "cli.js" }, "engines": { "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" } }, - "node_modules/buffer-from": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" + "node_modules/buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", + "engines": { + "node": "*" + } }, - "node_modules/buffer-indexof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz", - "integrity": "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==" + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" }, "node_modules/bytes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", - "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", "engines": { "node": ">= 0.8" } }, - "node_modules/cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", - "dependencies": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/cacheable-request": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", @@ -3774,6 +4509,14 @@ "node": ">=8" } }, + "node_modules/cacheable-request/node_modules/normalize-url": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", + "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==", + "engines": { + "node": ">=8" + } + }, "node_modules/call-bind": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", @@ -3804,9 +4547,9 @@ } }, "node_modules/camelcase": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", - "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", "engines": { "node": ">=10" }, @@ -3834,9 +4577,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001341", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001341.tgz", - "integrity": "sha512-2SodVrFFtvGENGCv0ChVJIDQ0KPaS1cg7/qtfMaICgeMolDdo/Z2OD32F0Aq9yl6F4YFwGPBS5AaPqNYiW4PoA==", + "version": "1.0.30001422", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001422.tgz", + "integrity": "sha512-hSesn02u1QacQHhaxl/kNMZwqVG35Sz/8DgvmgedxSH8z9UUpcDYSPYgsj3x5dQNRcNp6BwpSfQfVzYUTm+fog==", "funding": [ { "type": "opencollective", @@ -3858,9 +4601,9 @@ } }, "node_modules/chalk": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", - "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -3900,51 +4643,83 @@ } }, "node_modules/cheerio": { - "version": "0.22.0", - "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-0.22.0.tgz", - "integrity": "sha1-qbqoYKP5tZWmuBsahocxIe06Jp4=", - "dependencies": { - "css-select": "~1.2.0", - "dom-serializer": "~0.1.0", - "entities": "~1.1.1", - "htmlparser2": "^3.9.1", - "lodash.assignin": "^4.0.9", - "lodash.bind": "^4.1.4", - "lodash.defaults": "^4.0.1", - "lodash.filter": "^4.4.0", - "lodash.flatten": "^4.2.0", - "lodash.foreach": "^4.3.0", - "lodash.map": "^4.4.0", - "lodash.merge": "^4.4.0", - "lodash.pick": "^4.2.1", - "lodash.reduce": "^4.4.0", - "lodash.reject": "^4.4.0", - "lodash.some": "^4.4.0" + "version": "1.0.0-rc.12", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.12.tgz", + "integrity": "sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==", + "dependencies": { + "cheerio-select": "^2.1.0", + "dom-serializer": "^2.0.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1", + "htmlparser2": "^8.0.1", + "parse5": "^7.0.0", + "parse5-htmlparser2-tree-adapter": "^7.0.0" }, "engines": { - "node": ">= 0.6" + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/cheeriojs/cheerio?sponsor=1" + } + }, + "node_modules/cheerio-select": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz", + "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==", + "dependencies": { + "boolbase": "^1.0.0", + "css-select": "^5.1.0", + "css-what": "^6.1.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/cheerio/node_modules/parse5": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", + "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", + "dependencies": { + "entities": "^4.4.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" } }, "node_modules/chokidar": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz", - "integrity": "sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==", + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], "dependencies": { - "anymatch": "~3.1.1", + "anymatch": "~3.1.2", "braces": "~3.0.2", - "glob-parent": "~5.1.0", + "glob-parent": "~5.1.2", "is-binary-path": "~2.1.0", "is-glob": "~4.0.1", "normalize-path": "~3.0.0", - "readdirp": "~3.5.0" + "readdirp": "~3.6.0" }, "engines": { "node": ">= 8.10.0" }, "optionalDependencies": { - "fsevents": "~2.3.1" + "fsevents": "~2.3.2" } }, + "node_modules/chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" + }, "node_modules/chrome-trace-event": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", @@ -3954,109 +4729,23 @@ } }, "node_modules/ci-info": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.1.1.tgz", - "integrity": "sha512-kdRWLBIJwdsYJWYJFtAFFYxybguqeF91qpZaggjG5Nf8QKdizFG2hjqvaTXbxFIcYbSaD74KpAXv6BSm17DHEQ==" - }, - "node_modules/class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", - "dependencies": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/is-accessor-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" - }, - "node_modules/class-utils/node_modules/is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/is-data-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.7.1.tgz", + "integrity": "sha512-4jYS4MOAaCIStSRwiuxc4B8MYhIe676yO1sYGzARnjXkWpmzZMMYxY6zu8WYWDhSuth5zhrQ1rhNSibyyvv4/w==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, "node_modules/clean-css": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.1.2.tgz", - "integrity": "sha512-QcaGg9OuMo+0Ds933yLOY+gHPWbxhxqF0HDexmToPf8pczvmvZGYzd+QqWp9/mkucAOKViI+dSFOqoZIvXbeBw==", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.1.tgz", + "integrity": "sha512-lCr8OHhiWCTw4v8POJovCoh4T7I9U11yVsPjMWWnnMmp9ZowCxyad1Pathle/9HjaDp+fdQKjO9fQydE6RHTZg==", "dependencies": { "source-map": "~0.6.0" }, @@ -4064,14 +4753,6 @@ "node": ">= 10.0" } }, - "node_modules/clean-css/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/clean-stack": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", @@ -4091,107 +4772,18 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/clipboard": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/clipboard/-/clipboard-2.0.8.tgz", - "integrity": "sha512-Y6WO0unAIQp5bLmk1zdThRhgJt/x3ks6f30s3oE3H1mgIEU33XyQjEf8gsf6DxC7NPX8Y1SsNWjUjL/ywLnnbQ==", - "optional": true, + "node_modules/cli-table3": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.3.tgz", + "integrity": "sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==", "dependencies": { - "good-listener": "^1.2.2", - "select": "^1.1.2", - "tiny-emitter": "^2.0.0" - } - }, - "node_modules/cliui": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", - "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", - "dependencies": { - "string-width": "^3.1.0", - "strip-ansi": "^5.2.0", - "wrap-ansi": "^5.1.0" - } - }, - "node_modules/cliui/node_modules/ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "engines": { - "node": ">=6" - } - }, - "node_modules/cliui/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/cliui/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/cliui/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" - }, - "node_modules/cliui/node_modules/emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" - }, - "node_modules/cliui/node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "engines": { - "node": ">=4" - } - }, - "node_modules/cliui/node_modules/string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dependencies": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/cliui/node_modules/strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dependencies": { - "ansi-regex": "^4.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/cliui/node_modules/wrap-ansi": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", - "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", - "dependencies": { - "ansi-styles": "^3.2.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0" - }, - "engines": { - "node": ">=6" + "string-width": "^4.2.0" + }, + "engines": { + "node": "10.* || >= 12.*" + }, + "optionalDependencies": { + "@colors/colors": "1.5.0" } }, "node_modules/clone-deep": { @@ -4208,98 +4800,24 @@ } }, "node_modules/clone-response": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", - "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz", + "integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==", "dependencies": { "mimic-response": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/clsx": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.1.1.tgz", - "integrity": "sha512-6/bPho624p3S2pMyvP5kKBPXnI3ufHLObBFCfgx+LkeR5lg2XYy2hqZqUf45ypD8COn2bhgGJSUE+l5dhNBieA==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz", + "integrity": "sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==", "engines": { "node": ">=6" } }, - "node_modules/coa": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz", - "integrity": "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==", - "dependencies": { - "@types/q": "^1.5.1", - "chalk": "^2.4.1", - "q": "^1.1.2" - }, - "engines": { - "node": ">= 4.0" - } - }, - "node_modules/coa/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/coa/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/coa/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/coa/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" - }, - "node_modules/coa/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/coa/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "engines": { - "node": ">=4" - } - }, - "node_modules/coa/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/collapse-white-space": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-1.0.6.tgz", @@ -4309,27 +4827,6 @@ "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", - "dependencies": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/color": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/color/-/color-3.1.3.tgz", - "integrity": "sha512-xgXAcTHa2HeFCGLE9Xs/R82hujGtu9Jd9x4NW3T34+OMs7VoPsjwzRczKHvTAHeJwWFwX5j15+MgAppE8ztObQ==", - "dependencies": { - "color-convert": "^1.9.1", - "color-string": "^1.5.4" - } - }, "node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", @@ -4346,32 +4843,15 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, - "node_modules/color-string": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.5.tgz", - "integrity": "sha512-jgIoum0OfQfq9Whcfc2z/VhCNcmQjWbey6qBX0vqt7YICflUmBCh9E9CiQD5GSJ+Uehixm3NUwHVhqUAWRivZg==", - "dependencies": { - "color-name": "^1.0.0", - "simple-swizzle": "^0.2.2" - } - }, - "node_modules/color/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/color/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + "node_modules/colord": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", + "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==" }, "node_modules/colorette": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz", - "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==" + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz", + "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==" }, "node_modules/combine-promises": { "version": "1.1.0", @@ -4390,6 +4870,14 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/command-exists-promise": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/command-exists-promise/-/command-exists-promise-2.0.2.tgz", + "integrity": "sha512-T6PB6vdFrwnHXg/I0kivM3DqaCGZLjjYSOe0a5WgFKcz1sOnmOeIjnhQPXVXX3QjVbLyTJ85lJkX6lUpukTzaA==", + "engines": { + "node": ">=6" + } + }, "node_modules/commander": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", @@ -4401,12 +4889,7 @@ "node_modules/commondir": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=" - }, - "node_modules/component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==" }, "node_modules/compressible": { "version": "2.0.18", @@ -4436,14 +4919,6 @@ "node": ">= 0.8.0" } }, - "node_modules/compression/node_modules/bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", - "engines": { - "node": ">= 0.8" - } - }, "node_modules/compression/node_modules/debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", @@ -4455,12 +4930,17 @@ "node_modules/compression/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/compression/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" }, "node_modules/configstore": { "version": "5.0.1", @@ -4479,9 +4959,9 @@ } }, "node_modules/connect-history-api-fallback": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", - "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", + "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", "engines": { "node": ">=0.8" } @@ -4492,11 +4972,11 @@ "integrity": "sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==" }, "node_modules/content-disposition": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", - "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", "dependencies": { - "safe-buffer": "5.1.2" + "safe-buffer": "5.2.1" }, "engines": { "node": ">= 0.6" @@ -4511,17 +4991,14 @@ } }, "node_modules/convert-source-map": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", - "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", - "dependencies": { - "safe-buffer": "~5.1.1" - } + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" }, "node_modules/cookie": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", - "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==", + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", "engines": { "node": ">= 0.6" } @@ -4529,15 +5006,7 @@ "node_modules/cookie-signature": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" - }, - "node_modules/copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", - "engines": { - "node": ">=0.10.0" - } + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" }, "node_modules/copy-text-to-clipboard": { "version": "3.0.1", @@ -4551,20 +5020,19 @@ } }, "node_modules/copy-webpack-plugin": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-8.1.1.tgz", - "integrity": "sha512-rYM2uzRxrLRpcyPqGceRBDpxxUV8vcDqIKxAUKfcnFpcrPxT5+XvhTxv7XLjo5AvEJFPdAE3zCogG2JVahqgSQ==", + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-11.0.0.tgz", + "integrity": "sha512-fX2MWpamkW0hZxMEg0+mYnA40LTosOSa5TqZ9GYIBzyJa9C3QUaMPSE2xAi/buNr8u89SfD9wHSQVBzrRa/SOQ==", "dependencies": { - "fast-glob": "^3.2.5", - "glob-parent": "^5.1.1", - "globby": "^11.0.3", + "fast-glob": "^3.2.11", + "glob-parent": "^6.0.1", + "globby": "^13.1.1", "normalize-path": "^3.0.0", - "p-limit": "^3.1.0", - "schema-utils": "^3.0.0", - "serialize-javascript": "^5.0.1" + "schema-utils": "^4.0.0", + "serialize-javascript": "^6.0.0" }, "engines": { - "node": ">= 10.13.0" + "node": ">= 14.15.0" }, "funding": { "type": "opencollective", @@ -4574,27 +5042,107 @@ "webpack": "^5.1.0" } }, + "node_modules/copy-webpack-plugin/node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/copy-webpack-plugin/node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/copy-webpack-plugin/node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/copy-webpack-plugin/node_modules/globby": { + "version": "13.1.3", + "resolved": "https://registry.npmjs.org/globby/-/globby-13.1.3.tgz", + "integrity": "sha512-8krCNHXvlCgHDpegPzleMq07yMYTO2sXKASmZmquEYWEmCx6J5UTRbp5RwMJkTJGtcQ44YpiUYUiN0b9mzy8Bw==", + "dependencies": { + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.11", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/copy-webpack-plugin/node_modules/ignore": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "engines": { + "node": ">= 4" + } + }, + "node_modules/copy-webpack-plugin/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + }, "node_modules/copy-webpack-plugin/node_modules/schema-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", - "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", + "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", "dependencies": { - "@types/json-schema": "^7.0.6", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" + "@types/json-schema": "^7.0.9", + "ajv": "^8.8.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.0.0" }, "engines": { - "node": ">= 10.13.0" + "node": ">= 12.13.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/webpack" } }, + "node_modules/copy-webpack-plugin/node_modules/slash": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", + "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/core-js": { - "version": "3.12.1", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.12.1.tgz", - "integrity": "sha512-Ne9DKPHTObRuB09Dru5AjwKjY4cJHVGu+y5f7coGn1E9Grkc3p2iBwE9AI/nJzsE29mQF7oq+mhYYRqOMFN1Bw==", + "version": "3.25.5", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.25.5.tgz", + "integrity": "sha512-nbm6eZSjm+ZuBQxCUPQKQCoUEfFOXjUZ8dTTyikyKaWrTYmAVbykQfwsKE5dBK88u3QCkCrzsx/PPlKfhsvgpw==", "hasInstallScript": true, "funding": { "type": "opencollective", @@ -4602,30 +5150,21 @@ } }, "node_modules/core-js-compat": { - "version": "3.12.1", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.12.1.tgz", - "integrity": "sha512-i6h5qODpw6EsHAoIdQhKoZdWn+dGBF3dSS8m5tif36RlWvW3A6+yu2S16QHUo3CrkzrnEskMAt9f8FxmY9fhWQ==", + "version": "3.25.5", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.25.5.tgz", + "integrity": "sha512-ovcyhs2DEBUIE0MGEKHP4olCUW/XYte3Vroyxuh38rD1wAO4dHohsovUC4eAOuzFxE6b+RXvBU3UZ9o0YhUTkA==", "dependencies": { - "browserslist": "^4.16.6", - "semver": "7.0.0" + "browserslist": "^4.21.4" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/core-js" } }, - "node_modules/core-js-compat/node_modules/semver": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", - "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", - "bin": { - "semver": "bin/semver.js" - } - }, "node_modules/core-js-pure": { - "version": "3.12.1", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.12.1.tgz", - "integrity": "sha512-1cch+qads4JnDSWsvc7d6nzlKAippwjUlf6vykkTLW53VSV+NkE6muGBToAjEA8pG90cSfcud3JgVmW2ds5TaQ==", + "version": "3.25.5", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.25.5.tgz", + "integrity": "sha512-oml3M22pHM+igfWHDfdLVq2ShWmjM2V4L+dQEBs0DWVIqEm9WHCwGAlZ6BmyBQGy5sFrJmcx+856D9lVKyGWYg==", "hasInstallScript": true, "funding": { "type": "opencollective", @@ -4633,14 +5172,14 @@ } }, "node_modules/core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" }, "node_modules/cosmiconfig": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.0.tgz", - "integrity": "sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz", + "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==", "dependencies": { "@types/parse-json": "^4.0.0", "import-fresh": "^3.2.1", @@ -4681,88 +5220,56 @@ "node": ">=8" } }, - "node_modules/css-color-names": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-1.0.1.tgz", - "integrity": "sha512-/loXYOch1qU1biStIFsHH8SxTmOseh1IJqFvy8IujXOm1h+QjUdDhkzOrR5HG8K8mlxREj0yfi8ewCHx0eMxzA==", - "engines": { - "node": "*" - } - }, "node_modules/css-declaration-sorter": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.0.0.tgz", - "integrity": "sha512-S0TE4E0ha5+tBHdLWPc5n+S8E4dFBS5xScPvgHkLNZwWvX4ISoFGhGeerLC9uS1cKA/sC+K2wHq6qEbcagT/fg==", - "dependencies": { - "timsort": "^0.3.0" - }, + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.3.1.tgz", + "integrity": "sha512-fBffmak0bPAnyqc/HO8C3n2sHrp9wcqQz6ES9koRF2/mLOVAx9zIQ3Y7R29sYCteTPqMCwns4WYQoCX91Xl3+w==", "engines": { - "node": ">= 10" + "node": "^10 || ^12 || >=14" }, "peerDependencies": { "postcss": "^8.0.9" } }, "node_modules/css-loader": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-5.2.4.tgz", - "integrity": "sha512-OFYGyINCKkdQsTrSYxzGSFnGS4gNjcXkKkQgWxK138jgnPt+lepxdjSZNc8sHAl5vP3DhsJUxufWIjOwI8PMMw==", + "version": "6.7.3", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.7.3.tgz", + "integrity": "sha512-qhOH1KlBMnZP8FzRO6YCH9UHXQhVMcEGLyNdb7Hv2cpcmJbW0YrddO+tG1ab5nT41KpHIYGsbeHqxB9xPu1pKQ==", "dependencies": { - "camelcase": "^6.2.0", "icss-utils": "^5.1.0", - "loader-utils": "^2.0.0", - "postcss": "^8.2.10", + "postcss": "^8.4.19", "postcss-modules-extract-imports": "^3.0.0", "postcss-modules-local-by-default": "^4.0.0", "postcss-modules-scope": "^3.0.0", "postcss-modules-values": "^4.0.0", - "postcss-value-parser": "^4.1.0", - "schema-utils": "^3.0.0", - "semver": "^7.3.5" + "postcss-value-parser": "^4.2.0", + "semver": "^7.3.8" }, "engines": { - "node": ">= 10.13.0" + "node": ">= 12.13.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/webpack" }, "peerDependencies": { - "webpack": "^4.27.0 || ^5.0.0" - } - }, - "node_modules/css-loader/node_modules/schema-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", - "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", - "dependencies": { - "@types/json-schema": "^7.0.6", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" + "webpack": "^5.0.0" } }, "node_modules/css-minimizer-webpack-plugin": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-2.0.0.tgz", - "integrity": "sha512-cG/uc94727tx5pBNtb1Sd7gvUPzwmcQi1lkpfqTpdkuNq75hJCw7bIVsCNijLm4dhDcr1atvuysl2rZqOG8Txw==", - "dependencies": { - "cssnano": "^5.0.0", - "jest-worker": "^26.3.0", - "p-limit": "^3.0.2", - "postcss": "^8.2.9", - "schema-utils": "^3.0.0", - "serialize-javascript": "^5.0.1", + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-4.2.2.tgz", + "integrity": "sha512-s3Of/4jKfw1Hj9CxEO1E5oXhQAxlayuHO2y/ML+C6I9sQ7FdzfEV6QgMLN3vI+qFsjJGIAFLKtQK7t8BOXAIyA==", + "dependencies": { + "cssnano": "^5.1.8", + "jest-worker": "^29.1.2", + "postcss": "^8.4.17", + "schema-utils": "^4.0.0", + "serialize-javascript": "^6.0.0", "source-map": "^0.6.1" }, "engines": { - "node": ">= 10.13.0" + "node": ">= 14.15.0" }, "funding": { "type": "opencollective", @@ -4772,81 +5279,111 @@ "webpack": "^5.0.0" }, "peerDependenciesMeta": { + "@parcel/css": { + "optional": true + }, + "@swc/css": { + "optional": true + }, "clean-css": { "optional": true }, "csso": { "optional": true + }, + "esbuild": { + "optional": true + }, + "lightningcss": { + "optional": true } } }, + "node_modules/css-minimizer-webpack-plugin/node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/css-minimizer-webpack-plugin/node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/css-minimizer-webpack-plugin/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + }, "node_modules/css-minimizer-webpack-plugin/node_modules/schema-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", - "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", + "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", "dependencies": { - "@types/json-schema": "^7.0.6", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" + "@types/json-schema": "^7.0.9", + "ajv": "^8.8.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.0.0" }, "engines": { - "node": ">= 10.13.0" + "node": ">= 12.13.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/webpack" } }, - "node_modules/css-minimizer-webpack-plugin/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/css-select": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", - "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", + "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", "dependencies": { - "boolbase": "~1.0.0", - "css-what": "2.1", - "domutils": "1.5.1", - "nth-check": "~1.0.1" + "boolbase": "^1.0.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" } }, - "node_modules/css-select-base-adapter": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz", - "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==" - }, "node_modules/css-tree": { - "version": "1.0.0-alpha.37", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz", - "integrity": "sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", + "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", "dependencies": { - "mdn-data": "2.0.4", + "mdn-data": "2.0.14", "source-map": "^0.6.1" }, "engines": { "node": ">=8.0.0" } }, - "node_modules/css-tree/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/css-what": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz", - "integrity": "sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", "engines": { - "node": "*" + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" } }, "node_modules/cssesc": { @@ -4861,13 +5398,13 @@ } }, "node_modules/cssnano": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.0.2.tgz", - "integrity": "sha512-8JK3EnPsjQsULme9/e5M2hF564f/480hwsdcHvQ7ZtAIMfQ1O3SCfs+b8Mjf5KJxhYApyRshR2QSovEJi2K72Q==", + "version": "5.1.13", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.1.13.tgz", + "integrity": "sha512-S2SL2ekdEz6w6a2epXn4CmMKU4K3KpcyXLKfAYc9UQQqJRkD/2eLUG0vJ3Db/9OvO5GuAdgXw3pFbR6abqghDQ==", "dependencies": { - "cosmiconfig": "^7.0.0", - "cssnano-preset-default": "^5.0.1", - "is-resolvable": "^1.1.0" + "cssnano-preset-default": "^5.2.12", + "lilconfig": "^2.0.3", + "yaml": "^1.10.2" }, "engines": { "node": "^10 || ^12 || >=14.0" @@ -4877,79 +5414,79 @@ "url": "https://opencollective.com/cssnano" }, "peerDependencies": { - "postcss": "^8.2.1" + "postcss": "^8.2.15" } }, "node_modules/cssnano-preset-advanced": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/cssnano-preset-advanced/-/cssnano-preset-advanced-5.0.1.tgz", - "integrity": "sha512-g+LB6GcihLXcBEdDh+mzk1qX9jgtBkVpzAg1OlgrH6C+qKIQYRHwAPyaoXy95Ci83sYYXlwJ0OrqLYTIUEBLZQ==", + "version": "5.3.9", + "resolved": "https://registry.npmjs.org/cssnano-preset-advanced/-/cssnano-preset-advanced-5.3.9.tgz", + "integrity": "sha512-njnh4pp1xCsibJcEHnWZb4EEzni0ePMqPuPNyuWT4Z+YeXmsgqNuTPIljXFEXhxGsWs9183JkXgHxc1TcsahIg==", "dependencies": { - "autoprefixer": "^10.0.2", - "cssnano-preset-default": "^5.0.1", - "postcss-discard-unused": "^5.0.0", - "postcss-merge-idents": "^5.0.0", - "postcss-reduce-idents": "^5.0.0", - "postcss-zindex": "^5.0.0" + "autoprefixer": "^10.4.12", + "cssnano-preset-default": "^5.2.13", + "postcss-discard-unused": "^5.1.0", + "postcss-merge-idents": "^5.1.1", + "postcss-reduce-idents": "^5.2.0", + "postcss-zindex": "^5.1.0" }, "engines": { "node": "^10 || ^12 || >=14.0" }, "peerDependencies": { - "postcss": "^8.2.1" + "postcss": "^8.2.15" } }, "node_modules/cssnano-preset-default": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.0.1.tgz", - "integrity": "sha512-cfmfThYODGqhpQKDq9H0MTAqkMvZ3dGbOUTBKw0xWZiIycMqHid22LsJXJl4r1qX4qzDeKxcSyQ/Xb5Mu3Z//Q==", - "dependencies": { - "css-declaration-sorter": "6.0.0", - "cssnano-utils": "^2.0.0", - "postcss-calc": "^8.0.0", - "postcss-colormin": "^5.0.0", - "postcss-convert-values": "^5.0.0", - "postcss-discard-comments": "^5.0.0", - "postcss-discard-duplicates": "^5.0.0", - "postcss-discard-empty": "^5.0.0", - "postcss-discard-overridden": "^5.0.0", - "postcss-merge-longhand": "^5.0.1", - "postcss-merge-rules": "^5.0.0", - "postcss-minify-font-values": "^5.0.0", - "postcss-minify-gradients": "^5.0.0", - "postcss-minify-params": "^5.0.0", - "postcss-minify-selectors": "^5.0.0", - "postcss-normalize-charset": "^5.0.0", - "postcss-normalize-display-values": "^5.0.0", - "postcss-normalize-positions": "^5.0.0", - "postcss-normalize-repeat-style": "^5.0.0", - "postcss-normalize-string": "^5.0.0", - "postcss-normalize-timing-functions": "^5.0.0", - "postcss-normalize-unicode": "^5.0.0", - "postcss-normalize-url": "^5.0.0", - "postcss-normalize-whitespace": "^5.0.0", - "postcss-ordered-values": "^5.0.0", - "postcss-reduce-initial": "^5.0.0", - "postcss-reduce-transforms": "^5.0.0", - "postcss-svgo": "^5.0.0", - "postcss-unique-selectors": "^5.0.0" + "version": "5.2.13", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.2.13.tgz", + "integrity": "sha512-PX7sQ4Pb+UtOWuz8A1d+Rbi+WimBIxJTRyBdgGp1J75VU0r/HFQeLnMYgHiCAp6AR4rqrc7Y4R+1Rjk3KJz6DQ==", + "dependencies": { + "css-declaration-sorter": "^6.3.1", + "cssnano-utils": "^3.1.0", + "postcss-calc": "^8.2.3", + "postcss-colormin": "^5.3.0", + "postcss-convert-values": "^5.1.3", + "postcss-discard-comments": "^5.1.2", + "postcss-discard-duplicates": "^5.1.0", + "postcss-discard-empty": "^5.1.1", + "postcss-discard-overridden": "^5.1.0", + "postcss-merge-longhand": "^5.1.7", + "postcss-merge-rules": "^5.1.3", + "postcss-minify-font-values": "^5.1.0", + "postcss-minify-gradients": "^5.1.1", + "postcss-minify-params": "^5.1.4", + "postcss-minify-selectors": "^5.2.1", + "postcss-normalize-charset": "^5.1.0", + "postcss-normalize-display-values": "^5.1.0", + "postcss-normalize-positions": "^5.1.1", + "postcss-normalize-repeat-style": "^5.1.1", + "postcss-normalize-string": "^5.1.0", + "postcss-normalize-timing-functions": "^5.1.0", + "postcss-normalize-unicode": "^5.1.1", + "postcss-normalize-url": "^5.1.0", + "postcss-normalize-whitespace": "^5.1.1", + "postcss-ordered-values": "^5.1.3", + "postcss-reduce-initial": "^5.1.1", + "postcss-reduce-transforms": "^5.1.0", + "postcss-svgo": "^5.1.0", + "postcss-unique-selectors": "^5.1.1" }, "engines": { "node": "^10 || ^12 || >=14.0" }, "peerDependencies": { - "postcss": "^8.2.1" + "postcss": "^8.2.15" } }, "node_modules/cssnano-utils": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-2.0.0.tgz", - "integrity": "sha512-xvxmTszdrvSyTACdPe8VU5J6p4sm3egpgw54dILvNqt5eBUv6TFjACLhSxtRuEsxYrgy8uDy269YjScO5aKbGA==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-3.1.0.tgz", + "integrity": "sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==", "engines": { "node": "^10 || ^12 || >=14.0" }, "peerDependencies": { - "postcss": "^8.2.1" + "postcss": "^8.2.15" } }, "node_modules/csso": { @@ -4963,41 +5500,15 @@ "node": ">=8.0.0" } }, - "node_modules/csso/node_modules/css-tree": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", - "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", - "dependencies": { - "mdn-data": "2.0.14", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/csso/node_modules/mdn-data": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", - "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==" - }, - "node_modules/csso/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/csstype": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.8.tgz", - "integrity": "sha512-jXKhWqXPmlUeoQnF/EhTtTl4C9SnrxSH/jZUih3jmO6lBKr99rP3/+FmrMj4EFpOXzMtXHAZkd3x0E6h6Fgflw==", - "peer": true + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz", + "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==" }, "node_modules/debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dependencies": { "ms": "2.1.2" }, @@ -5010,26 +5521,10 @@ } } }, - "node_modules/decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", - "engines": { - "node": ">=0.10" - } - }, "node_modules/decompress-response": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", - "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", + "integrity": "sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==", "dependencies": { "mimic-response": "^1.0.0" }, @@ -5037,22 +5532,6 @@ "node": ">=4" } }, - "node_modules/deep-equal": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", - "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", - "dependencies": { - "is-arguments": "^1.0.4", - "is-date-object": "^1.0.1", - "is-regex": "^1.0.4", - "object-is": "^1.0.1", - "object-keys": "^1.1.1", - "regexp.prototype.flags": "^1.2.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/deep-extend": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", @@ -5062,9 +5541,9 @@ } }, "node_modules/deep-is": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=" + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" }, "node_modules/deepmerge": { "version": "4.2.2", @@ -5075,123 +5554,14 @@ } }, "node_modules/default-gateway": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-4.2.0.tgz", - "integrity": "sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA==", - "dependencies": { - "execa": "^1.0.0", - "ip-regex": "^2.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/default-gateway/node_modules/cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dependencies": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - }, - "engines": { - "node": ">=4.8" - } - }, - "node_modules/default-gateway/node_modules/execa": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", - "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", - "dependencies": { - "cross-spawn": "^6.0.0", - "get-stream": "^4.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/default-gateway/node_modules/get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/default-gateway/node_modules/is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/default-gateway/node_modules/npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", - "dependencies": { - "path-key": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/default-gateway/node_modules/path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", - "engines": { - "node": ">=4" - } - }, - "node_modules/default-gateway/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/default-gateway/node_modules/shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", + "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", "dependencies": { - "shebang-regex": "^1.0.0" + "execa": "^5.0.0" }, "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/default-gateway/node_modules/shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/default-gateway/node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" + "node": ">= 10" } }, "node_modules/defer-to-connect": { @@ -5199,33 +5569,33 @@ "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==" }, - "node_modules/define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", - "dependencies": { - "object-keys": "^1.0.12" - }, + "node_modules/define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", "engines": { - "node": ">= 0.4" + "node": ">=8" } }, - "node_modules/define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "node_modules/define-properties": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", + "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", "dependencies": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/del": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/del/-/del-6.0.0.tgz", - "integrity": "sha512-1shh9DQ23L16oXSZKB2JxpL7iMy2E0S9d517ptA1P8iw0alkPtQcrKH7ru31rYtKwF499HkTu+DRzq3TCKDFRQ==", + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/del/-/del-6.1.1.tgz", + "integrity": "sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg==", "dependencies": { "globby": "^11.0.1", "graceful-fs": "^4.2.4", @@ -5243,24 +5613,22 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/delegate": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/delegate/-/delegate-3.2.0.tgz", - "integrity": "sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw==", - "optional": true - }, "node_modules/depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", "engines": { - "node": ">= 0.6" + "node": ">= 0.8" } }, "node_modules/destroy": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } }, "node_modules/detab": { "version": "2.0.4", @@ -5275,24 +5643,21 @@ } }, "node_modules/detect-node": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.0.5.tgz", - "integrity": "sha512-qi86tE6hRcFHy8jI1m2VG+LaPUR1LhqDa5G8tVjuUXmOrpuAgqsA1pN0+ldgr3aKUH+QLI9hCY/OcRYisERejw==" + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==" }, "node_modules/detect-port": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/detect-port/-/detect-port-1.3.0.tgz", - "integrity": "sha512-E+B1gzkl2gqxt1IhUzwjrxBKRqx1UzC3WLONHinn8S3T6lwV/agVCyitiFOsGJ/eYuEUBvD71MZHy3Pv1G9doQ==", + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/detect-port/-/detect-port-1.5.1.tgz", + "integrity": "sha512-aBzdj76lueB6uUst5iAs7+0H/oOjqI5D16XUWxlWMIMROhcM0rfsNVk93zTngq1dDNpoXRr++Sus7ETAExppAQ==", "dependencies": { "address": "^1.0.1", - "debug": "^2.6.0" + "debug": "4" }, "bin": { - "detect": "bin/detect-port", - "detect-port": "bin/detect-port" - }, - "engines": { - "node": ">= 4.2.1" + "detect": "bin/detect-port.js", + "detect-port": "bin/detect-port.js" } }, "node_modules/detect-port-alt": { @@ -5322,20 +5687,7 @@ "node_modules/detect-port-alt/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "node_modules/detect-port/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/detect-port/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, "node_modules/dir-glob": { "version": "3.0.1", @@ -5351,23 +5703,17 @@ "node_modules/dns-equal": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", - "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=" + "integrity": "sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==" }, "node_modules/dns-packet": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.4.tgz", - "integrity": "sha512-BQ6F4vycLXBvdrJZ6S3gZewt6rcrks9KBgM9vrhW+knGRqc8uEdT7fuCwloc7nny5xNoMJ17HGH0R/6fpo8ECA==", - "dependencies": { - "ip": "^1.1.0", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/dns-txt": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz", - "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=", + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.4.0.tgz", + "integrity": "sha512-EgqGeaBB8hLiHLZtp/IbaDQTL8pZ0+IvwzSHA6d7VyMDM+B9hgddEMa9xjK5oYnw0ci0JQ6g2XCD7/f6cafU6g==", "dependencies": { - "buffer-indexof": "^1.0.0" + "@leichtgewicht/ip-codec": "^2.0.1" + }, + "engines": { + "node": ">=6" } }, "node_modules/doctrine": { @@ -5390,34 +5736,54 @@ } }, "node_modules/dom-serializer": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.1.tgz", - "integrity": "sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", "dependencies": { - "domelementtype": "^1.3.0", - "entities": "^1.1.1" + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" } }, "node_modules/domelementtype": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", - "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==" + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ] }, "node_modules/domhandler": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", - "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", "dependencies": { - "domelementtype": "1" + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" } }, "node_modules/domutils": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", - "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.0.1.tgz", + "integrity": "sha512-z08c1l761iKhDFtfXO04C7kTdPBLi41zwOZl00WS8b5eiaebNpY00HKbztwBq+e3vyqWNwWF3mP9YLUeqIrF+Q==", "dependencies": { - "dom-serializer": "0", - "domelementtype": "1" + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.1" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" } }, "node_modules/dot-case": { @@ -5454,24 +5820,29 @@ "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==" }, "node_modules/duplexer3": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", - "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=" + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.5.tgz", + "integrity": "sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA==" + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" }, "node_modules/ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" }, "node_modules/electron-to-chromium": { - "version": "1.3.727", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.727.tgz", - "integrity": "sha512-Mfz4FIB4FSvEwBpDfdipRIrwd6uo8gUDoRDF4QEYb4h4tSuI3ov594OrjU6on042UlFHouIJpClDODGkPcBSbg==" + "version": "1.4.284", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz", + "integrity": "sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==" }, "node_modules/emoji-regex": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-6.1.1.tgz", - "integrity": "sha1-xs0OwbBkLio8Z6ETfvxeeW2k+I4=" + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, "node_modules/emojis-list": { "version": "3.0.0", @@ -5493,7 +5864,7 @@ "node_modules/encodeurl": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", "engines": { "node": ">= 0.8" } @@ -5507,9 +5878,9 @@ } }, "node_modules/enhanced-resolve": { - "version": "5.8.2", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.8.2.tgz", - "integrity": "sha512-F27oB3WuHDzvR2DOGNTaYy0D5o0cnrv8TeI482VM4kYgQd/FT9lUQwuNsJ0oOHtBUq7eiW5ytqzp7nBFknL+GA==", + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.10.0.tgz", + "integrity": "sha512-T0yTFjdpldGY8PmuXXR0PyQ1ufZpEGiHVrp7zHKB7jdR4qlmZHhONVM5AQOAWXuF/w3dnHbEQVrNptJgt7F+cQ==", "dependencies": { "graceful-fs": "^4.2.4", "tapable": "^2.2.0" @@ -5530,19 +5901,14 @@ } }, "node_modules/entities": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", - "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==" - }, - "node_modules/errno": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", - "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", - "dependencies": { - "prr": "~1.0.1" + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.4.0.tgz", + "integrity": "sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA==", + "engines": { + "node": ">=0.12" }, - "bin": { - "errno": "cli.js" + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" } }, "node_modules/error-ex": { @@ -5554,26 +5920,34 @@ } }, "node_modules/es-abstract": { - "version": "1.18.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0.tgz", - "integrity": "sha512-LJzK7MrQa8TS0ja2w3YNLzUgJCGPdPOV1yVvezjNnS89D+VR08+Szt2mz3YB2Dck/+w5tfIq/RoUAFqJJGM2yw==", + "version": "1.20.4", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.4.tgz", + "integrity": "sha512-0UtvRN79eMe2L+UNEF1BwRe364sj/DXhQ/k5FmivgoSdpM90b8Jc0mDzKMGo7QS0BVbOP/bTwBKNnDc9rNzaPA==", "dependencies": { "call-bind": "^1.0.2", "es-to-primitive": "^1.2.1", "function-bind": "^1.1.1", - "get-intrinsic": "^1.1.1", + "function.prototype.name": "^1.1.5", + "get-intrinsic": "^1.1.3", + "get-symbol-description": "^1.0.0", "has": "^1.0.3", - "has-symbols": "^1.0.2", - "is-callable": "^1.2.3", - "is-negative-zero": "^2.0.1", - "is-regex": "^1.1.2", - "is-string": "^1.0.5", - "object-inspect": "^1.9.0", + "has-property-descriptors": "^1.0.0", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.3", + "is-callable": "^1.2.7", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.2", "object-keys": "^1.1.1", - "object.assign": "^4.1.2", - "string.prototype.trimend": "^1.0.4", - "string.prototype.trimstart": "^1.0.4", - "unbox-primitive": "^1.0.0" + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.4.3", + "safe-regex-test": "^1.0.0", + "string.prototype.trimend": "^1.0.5", + "string.prototype.trimstart": "^1.0.5", + "unbox-primitive": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -5583,9 +5957,17 @@ } }, "node_modules/es-module-lexer": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.4.1.tgz", - "integrity": "sha512-ooYciCUtfw6/d2w56UVeqHPcoCFAiJdz5XOkYpv/Txl1HMUozpXjz/2RIQgqwKdXNDPSF1W7mJCFse3G+HDyAA==" + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", + "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==" + }, + "node_modules/es-shim-unscopables": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", + "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", + "dependencies": { + "has": "^1.0.3" + } }, "node_modules/es-to-primitive": { "version": "1.2.1", @@ -5622,7 +6004,7 @@ "node_modules/escape-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" }, "node_modules/escape-string-regexp": { "version": "4.0.0", @@ -5636,27 +6018,30 @@ } }, "node_modules/eslint": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.26.0.tgz", - "integrity": "sha512-4R1ieRf52/izcZE7AlLy56uIHHDLT74Yzz2Iv2l6kDaYvEu9x+wMB5dZArVL8SYGXSYV2YAg70FcW5Y5nGGNIg==", + "version": "7.32.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz", + "integrity": "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==", "dependencies": { "@babel/code-frame": "7.12.11", - "@eslint/eslintrc": "^0.4.1", + "@eslint/eslintrc": "^0.4.3", + "@humanwhocodes/config-array": "^0.5.0", "ajv": "^6.10.0", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", "debug": "^4.0.1", "doctrine": "^3.0.0", "enquirer": "^2.3.5", + "escape-string-regexp": "^4.0.0", "eslint-scope": "^5.1.1", "eslint-utils": "^2.1.0", "eslint-visitor-keys": "^2.0.0", "espree": "^7.3.1", "esquery": "^1.4.0", "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", "file-entry-cache": "^6.0.1", "functional-red-black-tree": "^1.0.1", - "glob-parent": "^5.0.0", + "glob-parent": "^5.1.2", "globals": "^13.6.0", "ignore": "^4.0.6", "import-fresh": "^3.0.0", @@ -5665,7 +6050,7 @@ "js-yaml": "^3.13.1", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1", - "lodash": "^4.17.21", + "lodash.merge": "^4.6.2", "minimatch": "^3.0.4", "natural-compare": "^1.4.0", "optionator": "^0.9.1", @@ -5674,7 +6059,7 @@ "semver": "^7.2.1", "strip-ansi": "^6.0.0", "strip-json-comments": "^3.1.0", - "table": "^6.0.4", + "table": "^6.0.9", "text-table": "^0.2.0", "v8-compile-cache": "^2.0.3" }, @@ -5689,28 +6074,30 @@ } }, "node_modules/eslint-plugin-react": { - "version": "7.23.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.23.2.tgz", - "integrity": "sha512-AfjgFQB+nYszudkxRkTFu0UR1zEQig0ArVMPloKhxwlwkzaw/fBiH0QWcBBhZONlXqQC51+nfqFrkn4EzHcGBw==", + "version": "7.31.10", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.31.10.tgz", + "integrity": "sha512-e4N/nc6AAlg4UKW/mXeYWd3R++qUano5/o+t+wnWxIf+bLsOaH3a4q74kX3nDjYym3VBN4HyO9nEn1GcAqgQOA==", "dependencies": { - "array-includes": "^3.1.3", - "array.prototype.flatmap": "^1.2.4", + "array-includes": "^3.1.5", + "array.prototype.flatmap": "^1.3.0", "doctrine": "^2.1.0", - "has": "^1.0.3", + "estraverse": "^5.3.0", "jsx-ast-utils": "^2.4.1 || ^3.0.0", - "minimatch": "^3.0.4", - "object.entries": "^1.1.3", - "object.fromentries": "^2.0.4", - "object.values": "^1.1.3", - "prop-types": "^15.7.2", + "minimatch": "^3.1.2", + "object.entries": "^1.1.5", + "object.fromentries": "^2.0.5", + "object.hasown": "^1.1.1", + "object.values": "^1.1.5", + "prop-types": "^15.8.1", "resolve": "^2.0.0-next.3", - "string.prototype.matchall": "^4.0.4" + "semver": "^6.3.0", + "string.prototype.matchall": "^4.0.7" }, "engines": { "node": ">=4" }, "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7" + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" } }, "node_modules/eslint-plugin-react/node_modules/doctrine": { @@ -5725,17 +6112,29 @@ } }, "node_modules/eslint-plugin-react/node_modules/resolve": { - "version": "2.0.0-next.3", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.3.tgz", - "integrity": "sha512-W8LucSynKUIDu9ylraa7ueVZ7hc0uAgJBxVsQSKOXOyle8a93qXhcz+XAXZ8bIq2d6i4Ehddn6Evt+0/UwKk6Q==", + "version": "2.0.0-next.4", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.4.tgz", + "integrity": "sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==", "dependencies": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/eslint-plugin-react/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/eslint-scope": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", @@ -5748,6 +6147,14 @@ "node": ">=8.0.0" } }, + "node_modules/eslint-scope/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "engines": { + "node": ">=4.0" + } + }, "node_modules/eslint-utils": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", @@ -5795,9 +6202,9 @@ } }, "node_modules/eslint/node_modules/globals": { - "version": "13.8.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.8.0.tgz", - "integrity": "sha512-rHtdA6+PDBIjeEvA91rpqzEvk/k3/i7EeNQiryiWuJH0Hw9cpyJMAt2jtbAwUaRdhD+573X4vWw6IcjKPasi9Q==", + "version": "13.17.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz", + "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==", "dependencies": { "type-fest": "^0.20.2" }, @@ -5856,14 +6263,6 @@ "node": ">=0.10" } }, - "node_modules/esquery/node_modules/estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", - "engines": { - "node": ">=4.0" - } - }, "node_modules/esrecurse": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", @@ -5875,18 +6274,10 @@ "node": ">=4.0" } }, - "node_modules/esrecurse/node_modules/estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", - "engines": { - "node": ">=4.0" - } - }, "node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "engines": { "node": ">=4.0" } @@ -5900,9 +6291,9 @@ } }, "node_modules/eta": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/eta/-/eta-1.12.1.tgz", - "integrity": "sha512-H8npoci2J/7XiPnVcCVulBSPsTNGvGaINyMjQDU8AFqp9LGsEYS88g2CiU+d01Sg44WtX7o4nb8wUJ9vnI+tiA==", + "version": "1.12.3", + "resolved": "https://registry.npmjs.org/eta/-/eta-1.12.3.tgz", + "integrity": "sha512-qHixwbDLtekO/d51Yr4glcaUJCIjGVJyTzuqV4GPlgZo1YpgOKG+avQynErZIYrfM6JIJdtiG2Kox8tbb+DoGg==", "engines": { "node": ">=6.0.0" }, @@ -5913,16 +6304,17 @@ "node_modules/etag": { "version": "1.8.1", "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", "engines": { "node": ">= 0.6" } }, "node_modules/eval": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/eval/-/eval-0.1.6.tgz", - "integrity": "sha512-o0XUw+5OGkXw4pJZzQoXUk+H87DHuC+7ZE//oSrRGtatTmr12oTnLfg6QOq9DyTt0c/p4TwzgmkKrBzWTSizyQ==", + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/eval/-/eval-0.1.8.tgz", + "integrity": "sha512-EzV94NYKoO09GLXGjXj9JIlXijVck4ONSr5wiCWDvhsvj5jxSrzTmRU/9C1DyB6uToszLs8aifA6NQ7lEQdvFw==", "dependencies": { + "@types/node": "*", "require-like": ">= 0.1.1" }, "engines": { @@ -5935,28 +6327,17 @@ "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" }, "node_modules/events": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", - "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=", - "engines": { - "node": ">=0.4.x" - } - }, - "node_modules/eventsource": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-1.1.0.tgz", - "integrity": "sha512-VSJjT5oCNrFvCS6igjzPAt5hBzQ2qPBFIbJ03zLI9SE0mxwZpMw6BfJrbFHm1a141AavMEB8JHmBhWAd66PfCg==", - "dependencies": { - "original": "^1.0.0" - }, + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", "engines": { - "node": ">=0.12.0" + "node": ">=0.8.x" } }, "node_modules/execa": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.0.0.tgz", - "integrity": "sha512-ov6w/2LCiuyO4RLYGdpFGjkcs0wMTgGE8PrkTHikeUy5iJekXyPIKUjifk5CsE0pt7sMCrMZ3YNqoCj6idQOnQ==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", "dependencies": { "cross-spawn": "^7.0.3", "get-stream": "^6.0.0", @@ -5975,149 +6356,39 @@ "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "node_modules/expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "dependencies": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/expand-brackets/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/is-accessor-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" - }, - "node_modules/expand-brackets/node_modules/is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/is-data-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, "node_modules/express": { - "version": "4.17.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", - "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", + "version": "4.18.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", + "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", "dependencies": { - "accepts": "~1.3.7", + "accepts": "~1.3.8", "array-flatten": "1.1.1", - "body-parser": "1.19.0", - "content-disposition": "0.5.3", + "body-parser": "1.20.1", + "content-disposition": "0.5.4", "content-type": "~1.0.4", - "cookie": "0.4.0", + "cookie": "0.5.0", "cookie-signature": "1.0.6", "debug": "2.6.9", - "depd": "~1.1.2", + "depd": "2.0.0", "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "etag": "~1.8.1", - "finalhandler": "~1.1.2", + "finalhandler": "1.2.0", "fresh": "0.5.2", + "http-errors": "2.0.0", "merge-descriptors": "1.0.1", "methods": "~1.1.2", - "on-finished": "~2.3.0", + "on-finished": "2.4.1", "parseurl": "~1.3.3", "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.5", - "qs": "6.7.0", + "proxy-addr": "~2.0.7", + "qs": "6.11.0", "range-parser": "~1.2.1", - "safe-buffer": "5.1.2", - "send": "0.17.1", - "serve-static": "1.14.1", - "setprototypeof": "1.1.1", - "statuses": "~1.5.0", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", "type-is": "~1.6.18", "utils-merge": "1.0.1", "vary": "~1.1.2" @@ -6126,6 +6397,11 @@ "node": ">= 0.10.0" } }, + "node_modules/express/node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" + }, "node_modules/express/node_modules/debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", @@ -6137,7 +6413,7 @@ "node_modules/express/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, "node_modules/extend": { "version": "3.0.2", @@ -6147,7 +6423,7 @@ "node_modules/extend-shallow": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", "dependencies": { "is-extendable": "^0.1.0" }, @@ -6155,54 +6431,24 @@ "node": ">=0.10.0" } }, - "node_modules/extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dependencies": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dependencies": { - "is-descriptor": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" }, "node_modules/fast-glob": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.5.tgz", - "integrity": "sha512-2DtFcgT68wiTTiwZ2hNdJfcHNke9XOfnwmBRWXhmeKM8rF0TGwmC/Qto3S7RoZKp5cilZbxzO5iTNTQsJ+EeDg==", + "version": "3.2.12", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", + "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.0", + "glob-parent": "^5.1.2", "merge2": "^1.3.0", - "micromatch": "^4.0.2", - "picomatch": "^2.2.1" + "micromatch": "^4.0.4" }, "engines": { - "node": ">=8" + "node": ">=8.6.0" } }, "node_modules/fast-json-stable-stringify": { @@ -6213,28 +6459,28 @@ "node_modules/fast-levenshtein": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==" }, "node_modules/fast-url-parser": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/fast-url-parser/-/fast-url-parser-1.1.3.tgz", - "integrity": "sha1-9K8+qfNNiicc9YrSs3WfQx8LMY0=", + "integrity": "sha512-5jOCVXADYNuRkKFzNJ0dCCewsZiYo0dz8QNYljkOpFC6r2U4OBmKtvm/Tsuh4w1YYdDqDb31a8TVhBJ2OJKdqQ==", "dependencies": { "punycode": "^1.3.2" } }, "node_modules/fastq": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.11.0.tgz", - "integrity": "sha512-7Eczs8gIPDrVzT+EksYBcupqMyxSHXXrHOLRRxU2/DicV8789MRBRR8+Hc2uWzUupOs4YS4JzBmBxjjCVBxD/g==", + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", + "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", "dependencies": { "reusify": "^1.0.4" } }, "node_modules/faye-websocket": { - "version": "0.11.3", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.3.tgz", - "integrity": "sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA==", + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", + "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", "dependencies": { "websocket-driver": ">=0.5.1" }, @@ -6251,17 +6497,17 @@ } }, "node_modules/fbjs": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-3.0.0.tgz", - "integrity": "sha512-dJd4PiDOFuhe7vk4F80Mba83Vr2QuK86FoxtgPmzBqEJahncp+13YCmfoa53KHCo6OnlXLG7eeMWPfB5CrpVKg==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-3.0.4.tgz", + "integrity": "sha512-ucV0tDODnGV3JCnnkmoszb5lf4bNpzjv80K41wd4k798Etq+UYD0y0TIfalLjZoKgjive6/adkRnszwapiDgBQ==", "dependencies": { - "cross-fetch": "^3.0.4", + "cross-fetch": "^3.1.5", "fbjs-css-vars": "^1.0.0", "loose-envify": "^1.0.0", "object-assign": "^4.1.0", "promise": "^7.1.1", "setimmediate": "^1.0.5", - "ua-parser-js": "^0.7.18" + "ua-parser-js": "^0.7.30" } }, "node_modules/fbjs-css-vars": { @@ -6269,6 +6515,14 @@ "resolved": "https://registry.npmjs.org/fbjs-css-vars/-/fbjs-css-vars-1.0.2.tgz", "integrity": "sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ==" }, + "node_modules/fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", + "dependencies": { + "pend": "~1.2.0" + } + }, "node_modules/feed": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/feed/-/feed-4.2.2.tgz", @@ -6280,28 +6534,6 @@ "node": ">=0.4.0" } }, - "node_modules/figures": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", - "dependencies": { - "escape-string-regexp": "^1.0.5" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/figures/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "engines": { - "node": ">=0.8.0" - } - }, "node_modules/file-entry-cache": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", @@ -6333,11 +6565,11 @@ } }, "node_modules/file-loader/node_modules/schema-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", - "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", "dependencies": { - "@types/json-schema": "^7.0.6", + "@types/json-schema": "^7.0.8", "ajv": "^6.12.5", "ajv-keywords": "^3.5.2" }, @@ -6349,16 +6581,10 @@ "url": "https://opencollective.com/webpack" } }, - "node_modules/file-uri-to-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", - "optional": true - }, "node_modules/filesize": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/filesize/-/filesize-6.1.0.tgz", - "integrity": "sha512-LpCHtPQ3sFx67z+uh2HnSyWSLLu5Jxo21795uRDuar/EOuYWXib5EmPaGIBuSnRqH2IODiKA2k5re/K9OnN/Yg==", + "version": "8.0.7", + "resolved": "https://registry.npmjs.org/filesize/-/filesize-8.0.7.tgz", + "integrity": "sha512-pjmC+bkIF8XI7fWaH8KxHcZL3DPybs1roSKP4rKDvy20tAWwIObE4+JIseG2byfGKhud5ZnM4YSGKBz7Sh0ndQ==", "engines": { "node": ">= 0.4.0" } @@ -6375,16 +6601,16 @@ } }, "node_modules/finalhandler": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", - "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", "dependencies": { "debug": "2.6.9", "encodeurl": "~1.0.2", "escape-html": "~1.0.3", - "on-finished": "~2.3.0", + "on-finished": "2.4.1", "parseurl": "~1.3.3", - "statuses": "~1.5.0", + "statuses": "2.0.1", "unpipe": "~1.0.0" }, "engines": { @@ -6402,12 +6628,12 @@ "node_modules/finalhandler/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, "node_modules/find-cache-dir": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz", - "integrity": "sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==", + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", "dependencies": { "commondir": "^1.0.1", "make-dir": "^3.0.2", @@ -6445,26 +6671,26 @@ } }, "node_modules/flatted": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.1.1.tgz", - "integrity": "sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA==" + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", + "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==" }, "node_modules/flux": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/flux/-/flux-4.0.1.tgz", - "integrity": "sha512-emk4RCvJ8RzNP2lNpphKnG7r18q8elDYNAPx7xn+bDeOIo9FFfxEfIQ2y6YbQNmnsGD3nH1noxtLE64Puz1bRQ==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/flux/-/flux-4.0.3.tgz", + "integrity": "sha512-yKAbrp7JhZhj6uiT1FTuVMlIAT1J4jqEyBpFApi1kxpGZCvacMVc/t1pMQyotqHhAgvoE3bNvAykhCo2CLjnYw==", "dependencies": { "fbemitter": "^3.0.0", - "fbjs": "^3.0.0" + "fbjs": "^3.0.1" }, "peerDependencies": { "react": "^15.0.2 || ^16.0.0 || ^17.0.0" } }, "node_modules/follow-redirects": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.1.tgz", - "integrity": "sha512-HWqDgT7ZEkqRzBvc2s64vSZ/hfOceEol3ac/7tKwzuvEyWx3/4UegXh5oBOIotkGsObyk3xznnSRVADBgWSQVg==", + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", + "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", "funding": [ { "type": "individual", @@ -6480,209 +6706,88 @@ } } }, - "node_modules/for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/fork-ts-checker-webpack-plugin": { - "version": "4.1.6", - "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-4.1.6.tgz", - "integrity": "sha512-DUxuQaKoqfNne8iikd14SAkh5uw4+8vNifp6gmA73yYNS6ywLIWSLD/n/mBzHQRpW3J7rbATEakmiA8JvkTyZw==", + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.2.tgz", + "integrity": "sha512-m5cUmF30xkZ7h4tWUgTAcEaKmUW7tfyUyTqNNOz7OxWJ0v1VWKTcOvH8FWHUwSjlW/356Ijc9vi3XfcPstpQKA==", "dependencies": { - "@babel/code-frame": "^7.5.5", - "chalk": "^2.4.1", - "micromatch": "^3.1.10", + "@babel/code-frame": "^7.8.3", + "@types/json-schema": "^7.0.5", + "chalk": "^4.1.0", + "chokidar": "^3.4.2", + "cosmiconfig": "^6.0.0", + "deepmerge": "^4.2.2", + "fs-extra": "^9.0.0", + "glob": "^7.1.6", + "memfs": "^3.1.2", "minimatch": "^3.0.4", - "semver": "^5.6.0", - "tapable": "^1.0.0", - "worker-rpc": "^0.1.0" + "schema-utils": "2.7.0", + "semver": "^7.3.2", + "tapable": "^1.0.0" }, "engines": { - "node": ">=6.11.5", + "node": ">=10", "yarn": ">=1.0.0" + }, + "peerDependencies": { + "eslint": ">= 6", + "typescript": ">= 2.7", + "vue-template-compiler": "*", + "webpack": ">= 4" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + }, + "vue-template-compiler": { + "optional": true + } } }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dependencies": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dependencies": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "engines": { - "node": ">=4" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/is-number/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "node_modules/fork-ts-checker-webpack-plugin/node_modules/cosmiconfig": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", + "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==", "dependencies": { - "is-buffer": "^1.1.5" + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.1.0", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.7.2" }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "node_modules/fork-ts-checker-webpack-plugin/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=10" } }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/micromatch/node_modules/extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "node_modules/fork-ts-checker-webpack-plugin/node_modules/schema-utils": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz", + "integrity": "sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==", "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" + "@types/json-schema": "^7.0.4", + "ajv": "^6.12.2", + "ajv-keywords": "^3.4.1" }, "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dependencies": { - "has-flag": "^3.0.0" + "node": ">= 8.9.0" }, - "engines": { - "node": ">=4" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, "node_modules/fork-ts-checker-webpack-plugin/node_modules/tapable": { @@ -6693,71 +6798,64 @@ "node": ">=6" } }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "dependencies": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/forwarded": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", - "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=", + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", "engines": { "node": ">= 0.6" } }, "node_modules/fraction.js": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.1.0.tgz", - "integrity": "sha512-o9lSKpK0TDqDwTL24Hxqi6I99s942l6TYkfl6WvGWgLOIFz/YonSGKfiSeMadoiNvTfqnfOa9mjb5SGVbBK9/w==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz", + "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==", "engines": { "node": "*" - } - }, - "node_modules/fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", - "dependencies": { - "map-cache": "^0.2.2" }, - "engines": { - "node": ">=0.10.0" + "funding": { + "type": "patreon", + "url": "https://www.patreon.com/infusion" } }, "node_modules/fresh": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", "engines": { "node": ">= 0.6" } }, "node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", "dependencies": { - "at-least-node": "^1.0.0", "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^2.0.0" }, "engines": { - "node": ">=10" + "node": ">=12" + } + }, + "node_modules/fs-minipass": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz", + "integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==", + "dependencies": { + "minipass": "^2.6.0" } }, + "node_modules/fs-monkey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.3.tgz", + "integrity": "sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q==" + }, "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" }, "node_modules/fsevents": { "version": "2.3.2", @@ -6777,10 +6875,35 @@ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" }, + "node_modules/function.prototype.name": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", + "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.0", + "functions-have-names": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/functional-red-black-tree": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=" + "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==" + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/gensync": { "version": "1.0.0-beta.2", @@ -6790,22 +6913,14 @@ "node": ">=6.9.0" } }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, "node_modules/get-intrinsic": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", - "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz", + "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==", "dependencies": { "function-bind": "^1.1.1", "has": "^1.0.3", - "has-symbols": "^1.0.1" + "has-symbols": "^1.0.3" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -6827,31 +6942,35 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", + "node_modules/get-symbol-description": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/github-slugger": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-1.3.0.tgz", - "integrity": "sha512-gwJScWVNhFYSRDvURk/8yhcFBee6aFjye2a7Lhb2bUyRulpIoek9p0I9Kt7PT67d/nUlZbFu8L9RLiA0woQN8Q==", - "dependencies": { - "emoji-regex": ">=6.0.0 <=6.1.1" - } + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-1.4.0.tgz", + "integrity": "sha512-w0dzqw/nt51xMVmlaV1+JRzN+oCa1KfcgGEWhxUG16wbdA+Xnt/yoFO8Z8x/V82ZcZ0wy6ln9QDup5avbhiDhQ==" }, "node_modules/glob": { - "version": "7.1.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", - "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", - "minimatch": "^3.0.4", + "minimatch": "^3.1.1", "once": "^1.3.0", "path-is-absolute": "^1.0.0" }, @@ -6944,15 +7063,15 @@ } }, "node_modules/globby": { - "version": "11.0.3", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.3.tgz", - "integrity": "sha512-ffdmosjA807y7+lA1NM0jELARVmYul/715xiILEjo3hBLPTcirgQNnXECn5g3mtR8TOLCVbkfua1Hpen25/Xcg==", + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", "dependencies": { "array-union": "^2.1.0", "dir-glob": "^3.0.1", - "fast-glob": "^3.1.1", - "ignore": "^5.1.4", - "merge2": "^1.3.0", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", "slash": "^3.0.0" }, "engines": { @@ -6963,22 +7082,13 @@ } }, "node_modules/globby/node_modules/ignore": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", - "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", "engines": { "node": ">= 4" } }, - "node_modules/good-listener": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/good-listener/-/good-listener-1.2.2.tgz", - "integrity": "sha1-1TswzfkxPf+33JoNR3CWqm0UXFA=", - "optional": true, - "dependencies": { - "delegate": "^3.1.2" - } - }, "node_modules/got": { "version": "9.6.0", "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", @@ -7012,9 +7122,9 @@ } }, "node_modules/graceful-fs": { - "version": "4.2.6", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", - "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==" + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" }, "node_modules/gray-matter": { "version": "4.0.3", @@ -7051,15 +7161,17 @@ } }, "node_modules/gzip-size": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-5.1.1.tgz", - "integrity": "sha512-FNHi6mmoHvs1mxZAds4PpdCS6QG8B4C1krxJsMutgxl5t3+GlRTzzI3NEkifXx2pVsOvJdOGSmIgDhQ55FwdPA==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz", + "integrity": "sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==", "dependencies": { - "duplexer": "^0.1.1", - "pify": "^4.0.1" + "duplexer": "^0.1.2" }, "engines": { - "node": ">=6" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/handle-thing": { @@ -7079,9 +7191,9 @@ } }, "node_modules/has-bigints": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", - "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -7094,78 +7206,40 @@ "node": ">=8" } }, - "node_modules/has-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", - "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-value": { + "node_modules/has-property-descriptors": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", + "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", "dependencies": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" + "get-intrinsic": "^1.1.1" }, - "engines": { - "node": ">=0.10.0" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", - "dependencies": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-values/node_modules/is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" - }, - "node_modules/has-values/node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dependencies": { - "kind-of": "^3.0.2" + "node": ">= 0.4" }, - "engines": { - "node": ">=0.10.0" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/has-values/node_modules/is-number/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "node_modules/has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", "dependencies": { - "is-buffer": "^1.1.5" + "has-symbols": "^1.0.2" }, "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-values/node_modules/kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "dependencies": { - "is-buffer": "^1.1.5" + "node": ">= 0.4" }, - "engines": { - "node": ">=0.10.0" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/has-yarn": { @@ -7304,11 +7378,6 @@ "he": "bin/he" } }, - "node_modules/hex-color-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/hex-color-regex/-/hex-color-regex-1.1.0.tgz", - "integrity": "sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==" - }, "node_modules/history": { "version": "4.10.1", "resolved": "https://registry.npmjs.org/history/-/history-4.10.1.tgz", @@ -7333,7 +7402,7 @@ "node_modules/hpack.js": { "version": "2.1.6", "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", - "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=", + "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", "dependencies": { "inherits": "^2.0.1", "obuf": "^1.0.0", @@ -7355,6 +7424,11 @@ "util-deprecate": "~1.0.1" } }, + "node_modules/hpack.js/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, "node_modules/hpack.js/node_modules/string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", @@ -7363,74 +7437,48 @@ "safe-buffer": "~5.1.0" } }, - "node_modules/hsl-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/hsl-regex/-/hsl-regex-1.0.0.tgz", - "integrity": "sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4=" - }, - "node_modules/hsla-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/hsla-regex/-/hsla-regex-1.0.0.tgz", - "integrity": "sha1-wc56MWjIxmFAM6S194d/OyJfnDg=" - }, "node_modules/html-entities": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.4.0.tgz", - "integrity": "sha512-8nxjcBcd8wovbeKx7h3wTji4e6+rhaVuPNpMqwWgnHh+N9ToqsCs6XztWRBPQ+UtzsoMAdKZtUENoVzU/EMtZA==" + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.3.tgz", + "integrity": "sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA==" }, "node_modules/html-minifier-terser": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz", - "integrity": "sha512-ZPr5MNObqnV/T9akshPKbVgyOqLmy+Bxo7juKCfTfnjNniTAMdy4hz21YQqoofMBJD2kdREaqPPdThoR78Tgxg==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", + "integrity": "sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==", "dependencies": { - "camel-case": "^4.1.1", - "clean-css": "^4.2.3", - "commander": "^4.1.1", + "camel-case": "^4.1.2", + "clean-css": "^5.2.2", + "commander": "^8.3.0", "he": "^1.2.0", - "param-case": "^3.0.3", + "param-case": "^3.0.4", "relateurl": "^0.2.7", - "terser": "^4.6.3" + "terser": "^5.10.0" }, "bin": { "html-minifier-terser": "cli.js" }, "engines": { - "node": ">=6" - } - }, - "node_modules/html-minifier-terser/node_modules/clean-css": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.3.tgz", - "integrity": "sha512-VcMWDN54ZN/DS+g58HYL5/n4Zrqe8vHJpGA8KdgUXFU4fuP/aHNw8eld9SyEIyabIMJX/0RaY/fplOo5hYLSFA==", - "dependencies": { - "source-map": "~0.6.0" - }, - "engines": { - "node": ">= 4.0" + "node": ">=12" } }, "node_modules/html-minifier-terser/node_modules/commander": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", - "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", - "engines": { - "node": ">= 6" - } - }, - "node_modules/html-minifier-terser/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", "engines": { - "node": ">=0.10.0" + "node": ">= 12" } }, "node_modules/html-tags": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.1.0.tgz", - "integrity": "sha512-1qYz89hW3lFDEazhjW0yVAV87lw8lVkrJocr72XmBkMKsoSVJCQx3W8BXsC7hO2qAt8BoVjYjtAcZ9perqGnNg==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.2.0.tgz", + "integrity": "sha512-vy7ClnArOZwCnqZgvv+ddgHgJiAFXe3Ge9ML5/mBctVJoUoYPCdxVucOywjDARn6CVoh3dRSFdPHy2sX80L0Wg==", "engines": { "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/html-void-elements": { @@ -7443,14 +7491,14 @@ } }, "node_modules/html-webpack-plugin": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.3.1.tgz", - "integrity": "sha512-rZsVvPXUYFyME0cuGkyOHfx9hmkFa4pWfxY/mdY38PsBEaVNsRoA+Id+8z6DBDgyv3zaw6XQszdF8HLwfQvcdQ==", + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.5.0.tgz", + "integrity": "sha512-sy88PC2cRTVxvETRgUHFrL4No3UxvcH8G1NepGhqaTT+GXN2kTamqasot0inS5hXeg1cMbFDt27zzo9p35lZVw==", "dependencies": { - "@types/html-minifier-terser": "^5.0.0", - "html-minifier-terser": "^5.0.1", - "lodash": "^4.17.20", - "pretty-error": "^2.1.1", + "@types/html-minifier-terser": "^6.0.0", + "html-minifier-terser": "^6.0.2", + "lodash": "^4.17.21", + "pretty-error": "^4.0.0", "tapable": "^2.0.0" }, "engines": { @@ -7465,16 +7513,21 @@ } }, "node_modules/htmlparser2": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", - "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", - "dependencies": { - "domelementtype": "^1.3.1", - "domhandler": "^2.3.0", - "domutils": "^1.5.1", - "entities": "^1.1.1", - "inherits": "^2.0.1", - "readable-stream": "^3.1.1" + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.1.tgz", + "integrity": "sha512-4lVbmc1diZC7GUJQtRQ5yBAeUCL1exyMwmForWkRLnwyzWBFxN633SALPMGYaWZvKe9j1pRZJpauvmxENSp/EA==", + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "entities": "^4.3.0" } }, "node_modules/http-cache-semantics": { @@ -7485,32 +7538,27 @@ "node_modules/http-deceiver": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", - "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=" + "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==" }, "node_modules/http-errors": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", - "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", "dependencies": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.1", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.0" + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" }, "engines": { - "node": ">= 0.6" + "node": ">= 0.8" } }, - "node_modules/http-errors/node_modules/inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" - }, "node_modules/http-parser-js": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.3.tgz", - "integrity": "sha512-t7hjvef/5HEK7RWTdUzVUhl8zkEu+LlaE0IYzdMuvbSDipxBRpOn4Uhw8ZyECEa808iVT8XCjzo6xmYt4CiLZg==" + "version": "0.5.8", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", + "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==" }, "node_modules/http-proxy": { "version": "1.18.1", @@ -7526,136 +7574,37 @@ } }, "node_modules/http-proxy-middleware": { - "version": "0.19.1", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz", - "integrity": "sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q==", - "dependencies": { - "http-proxy": "^1.17.0", - "is-glob": "^4.0.0", - "lodash": "^4.17.11", - "micromatch": "^3.1.10" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/http-proxy-middleware/node_modules/braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz", + "integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==", "dependencies": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" + "@types/http-proxy": "^1.17.8", + "http-proxy": "^1.18.1", + "is-glob": "^4.0.1", + "is-plain-obj": "^3.0.0", + "micromatch": "^4.0.2" }, "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/http-proxy-middleware/node_modules/fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dependencies": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" + "node": ">=12.0.0" }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/http-proxy-middleware/node_modules/is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" - }, - "node_modules/http-proxy-middleware/node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dependencies": { - "is-plain-object": "^2.0.4" + "peerDependencies": { + "@types/express": "^4.17.13" }, - "engines": { - "node": ">=0.10.0" + "peerDependenciesMeta": { + "@types/express": { + "optional": true + } } }, - "node_modules/http-proxy-middleware/node_modules/is-number": { + "node_modules/http-proxy-middleware/node_modules/is-plain-obj": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/http-proxy-middleware/node_modules/is-number/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/http-proxy-middleware/node_modules/micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/http-proxy-middleware/node_modules/micromatch/node_modules/extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", + "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/http-proxy-middleware/node_modules/to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "dependencies": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" + "node": ">=10" }, - "engines": { - "node": ">=0.10.0" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/human-signals": { @@ -7696,10 +7645,24 @@ "node": ">= 4" } }, + "node_modules/image-size": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-1.0.2.tgz", + "integrity": "sha512-xfOoWjceHntRb3qFCrh5ZFORYH8XCdYpASltMhZ/Q0KZiOwjdE/Yl2QCiWdwD+lygV5bMCvauzgu5PxBX/Yerg==", + "dependencies": { + "queue": "6.0.2" + }, + "bin": { + "image-size": "bin/image-size.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, "node_modules/immer": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/immer/-/immer-8.0.1.tgz", - "integrity": "sha512-aqXhGP7//Gui2+UrEtvxZxSquQVXTpZ7KDxfCcKAF3Vysvw0CViVaW9RZ1j1xlIYqaaaipBoqdqeibkc18PNvA==", + "version": "9.0.17", + "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.17.tgz", + "integrity": "sha512-+hBruaLSQvkPfxRiTLK/mi4vLH+/VQS6z2KJahdoxlleFOI8ARqzOF17uy12eFDlqWmPoygwc5evgwcp+dlHhg==", "funding": { "type": "opencollective", "url": "https://opencollective.com/immer" @@ -7723,97 +7686,15 @@ "node_modules/import-lazy": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", - "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=", - "engines": { - "node": ">=4" - } - }, - "node_modules/import-local": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz", - "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==", - "dependencies": { - "pkg-dir": "^3.0.0", - "resolve-cwd": "^2.0.0" - }, - "bin": { - "import-local-fixture": "fixtures/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/import-local/node_modules/find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dependencies": { - "locate-path": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/import-local/node_modules/locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dependencies": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/import-local/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/import-local/node_modules/p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dependencies": { - "p-limit": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/import-local/node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "integrity": "sha512-m7ZEHgtw69qOGw+jwxXkHlrlIPdTGkyh66zXZ1ajZbxkDBNjSY/LGbmjc7h0s2ELsUDTAhFr55TrPSSqJGPG0A==", "engines": { "node": ">=4" } }, - "node_modules/import-local/node_modules/pkg-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", - "dependencies": { - "find-up": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", "engines": { "node": ">=0.8.19" } @@ -7826,15 +7707,10 @@ "node": ">=8" } }, - "node_modules/indexes-of": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", - "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=" - }, "node_modules/infima": { - "version": "0.2.0-alpha.23", - "resolved": "https://registry.npmjs.org/infima/-/infima-0.2.0-alpha.23.tgz", - "integrity": "sha512-V0RTjB1otjpH3E2asbydx3gz7ovdSJsuV7r9JTdBggqRilnelTJUcXxLawBQQKsjQi5qPcRTjxnlaV8xyyKhhw==", + "version": "0.2.0-alpha.42", + "resolved": "https://registry.npmjs.org/infima/-/infima-0.2.0-alpha.42.tgz", + "integrity": "sha512-ift8OXNbQQwtbIt6z16KnSWP7uJ/SysSMFI4F87MNRTicypfl4Pv3E2OGVv6N3nSZFJvA8imYulCBS64iyHYww==", "engines": { "node": ">=12" } @@ -7842,7 +7718,7 @@ "node_modules/inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", "dependencies": { "once": "^1.3.0", "wrappy": "1" @@ -7863,18 +7739,6 @@ "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.1.1.tgz", "integrity": "sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==" }, - "node_modules/internal-ip": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-4.3.0.tgz", - "integrity": "sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg==", - "dependencies": { - "default-gateway": "^4.2.0", - "ipaddr.js": "^1.9.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/internal-slot": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", @@ -7896,44 +7760,20 @@ "node": ">= 0.10" } }, - "node_modules/ip": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", - "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=" - }, - "node_modules/ip-regex": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz", - "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=", - "engines": { - "node": ">=4" + "node_modules/invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "dependencies": { + "loose-envify": "^1.0.0" } }, "node_modules/ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/is-absolute-url": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.3.tgz", - "integrity": "sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dependencies": { - "kind-of": "^6.0.0" - }, + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.0.1.tgz", + "integrity": "sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng==", "engines": { - "node": ">=0.10.0" + "node": ">= 10" } }, "node_modules/is-alphabetical": { @@ -7958,29 +7798,18 @@ "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/is-arguments": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.0.tgz", - "integrity": "sha512-1Ij4lOMPl/xB5kBDn7I+b2ttPMKa8szhEIrXDuXQD/oe3HJLTLhqhgGspwgyGd6MOywBUqVvYicF72lkgDnIHg==", - "dependencies": { - "call-bind": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" }, "node_modules/is-bigint": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.2.tgz", - "integrity": "sha512-0JV5+SOCQkIdzjBK9buARcV804Ddu7A0Qet6sHi3FimE9ne6m4BGQZfRn+NZiXbBk4F4XmHfDZIipLj9pX8dSA==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dependencies": { + "has-bigints": "^1.0.1" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -7997,11 +7826,12 @@ } }, "node_modules/is-boolean-object": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.1.tgz", - "integrity": "sha512-bXdQWkECBUIAcCkeH1unwJLIpZYaa5VvuygSyS/c2lf719mTKZDU5UdDRlpd01UjADgmW8RfqaP+mRaVPdr/Ng==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", "dependencies": { - "call-bind": "^1.0.2" + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -8033,9 +7863,9 @@ } }, "node_modules/is-callable": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz", - "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==", + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", "engines": { "node": ">= 0.4" }, @@ -8059,31 +7889,10 @@ "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==" }, - "node_modules/is-color-stop": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-color-stop/-/is-color-stop-1.1.0.tgz", - "integrity": "sha1-z/9HGu5N1cnhWFmPvhKWe1za00U=", - "dependencies": { - "css-color-names": "^0.0.4", - "hex-color-regex": "^1.1.0", - "hsl-regex": "^1.0.0", - "hsla-regex": "^1.0.0", - "rgb-regex": "^1.0.1", - "rgba-regex": "^1.0.0" - } - }, - "node_modules/is-color-stop/node_modules/css-color-names": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz", - "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=", - "engines": { - "node": "*" - } - }, "node_modules/is-core-module": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.4.0.tgz", - "integrity": "sha512-6A2fkfq1rfeQZjxrZJGerpLCTHRNEBiSgnu0+obeJpEPZRUooHgsizvzv0ZjJwOz3iWIHdJtVWJ/tmPr3D21/A==", + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", + "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", "dependencies": { "has": "^1.0.3" }, @@ -8091,21 +7900,13 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "node_modules/is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", "dependencies": { - "kind-of": "^6.0.0" + "has-tostringtag": "^1.0.0" }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-date-object": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.4.tgz", - "integrity": "sha512-/b4ZVsG7Z5XVtIxs/h9W8nvfLgSAyKYdtGWQLbqy6jA1icmgjf8WCoTKgeS4wy5tYaPePouzFMANbnj94c2Z+A==", "engines": { "node": ">= 0.4" }, @@ -8122,19 +7923,6 @@ "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/is-docker": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", @@ -8152,7 +7940,7 @@ "node_modules/is-extendable": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", "engines": { "node": ">=0.10.0" } @@ -8160,7 +7948,7 @@ "node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", "engines": { "node": ">=0.10.0" } @@ -8174,9 +7962,9 @@ } }, "node_modules/is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dependencies": { "is-extglob": "^2.1.1" }, @@ -8209,9 +7997,9 @@ } }, "node_modules/is-negative-zero": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", - "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", "engines": { "node": ">= 0.4" }, @@ -8239,9 +8027,12 @@ } }, "node_modules/is-number-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.5.tgz", - "integrity": "sha512-RU0lI/n95pMoUKu9v1BZP5MBcZuNSVJkMkAG2dJqC4z2GlkGUNeH68SuHuBKBD/XFe+LHZ+f9BKkLET60Niedw==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, "engines": { "node": ">= 0.4" }, @@ -8252,7 +8043,7 @@ "node_modules/is-obj": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", - "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", + "integrity": "sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==", "engines": { "node": ">=0.10.0" } @@ -8265,28 +8056,6 @@ "node": ">=6" } }, - "node_modules/is-path-in-cwd": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz", - "integrity": "sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ==", - "dependencies": { - "is-path-inside": "^2.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/is-path-in-cwd/node_modules/is-path-inside": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-2.1.0.tgz", - "integrity": "sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==", - "dependencies": { - "path-is-inside": "^1.0.2" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/is-path-inside": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", @@ -8315,12 +8084,12 @@ } }, "node_modules/is-regex": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.3.tgz", - "integrity": "sha512-qSVXFz28HM7y+IWX6vLCsexdlvzT1PJNFSBuaQLQ5o0IEw8UDYW6/2+eCMVyIsbM8CNLX2a/QWmSpyxYEHY7CQ==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", "dependencies": { "call-bind": "^1.0.2", - "has-symbols": "^1.0.2" + "has-tostringtag": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -8332,16 +8101,11 @@ "node_modules/is-regexp": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", - "integrity": "sha1-/S2INUXEa6xaYz57mgnof6LLUGk=", + "integrity": "sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==", "engines": { "node": ">=0.10.0" } }, - "node_modules/is-resolvable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", - "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==" - }, "node_modules/is-root": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-root/-/is-root-2.1.0.tgz", @@ -8350,18 +8114,35 @@ "node": ">=6" } }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", + "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", - "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", "engines": { "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/is-string": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.6.tgz", - "integrity": "sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, "engines": { "node": ">= 0.4" }, @@ -8386,7 +8167,18 @@ "node_modules/is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" + }, + "node_modules/is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/is-whitespace-character": { "version": "1.0.4", @@ -8397,14 +8189,6 @@ "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/is-word-character": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-word-character/-/is-word-character-1.0.4.tgz", @@ -8433,42 +8217,73 @@ "node_modules/isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" }, "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" }, "node_modules/isobject": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", "engines": { "node": ">=0.10.0" } }, + "node_modules/jest-util": { + "version": "29.3.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.3.1.tgz", + "integrity": "sha512-7YOVZaiX7RJLv76ZfHt4nbNEzzTRiMW/IiOG7ZOKmTXmoGBxUDefgMAxQubu6WPVqP5zSzAdZG0FfLcC7HOIFQ==", + "dependencies": { + "@jest/types": "^29.3.1", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, "node_modules/jest-worker": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", - "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", + "version": "29.3.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.3.1.tgz", + "integrity": "sha512-lY4AnnmsEWeiXirAIA0c9SDPbuCBq8IYuDVL8PMm0MZ2PEs2yPvRA/J64QBXuZp7CYKrDM/rmNrc9/i3KJQncw==", "dependencies": { "@types/node": "*", + "jest-util": "^29.3.1", "merge-stream": "^2.0.0", - "supports-color": "^7.0.0" + "supports-color": "^8.0.0" }, "engines": { - "node": ">= 10.13.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" } }, "node_modules/joi": { - "version": "17.4.0", - "resolved": "https://registry.npmjs.org/joi/-/joi-17.4.0.tgz", - "integrity": "sha512-F4WiW2xaV6wc1jxete70Rw4V/VuMd6IN+a5ilZsxG4uYtUXWu2kq9W5P2dz30e7Gmw8RCbY/u/uk+dMPma9tAg==", + "version": "17.6.3", + "resolved": "https://registry.npmjs.org/joi/-/joi-17.6.3.tgz", + "integrity": "sha512-YlQsIaS9MHYekzf1Qe11LjTkNzx9qhYluK3172z38RxYoAUf82XMX1p1DG1H4Wtk2ED/vPdSn9OggqtDu+aTow==", "dependencies": { "@hapi/hoek": "^9.0.0", "@hapi/topo": "^5.0.0", - "@sideway/address": "^4.1.0", + "@sideway/address": "^4.1.3", "@sideway/formula": "^3.0.0", "@sideway/pinpoint": "^2.0.0" } @@ -8503,12 +8318,7 @@ "node_modules/json-buffer": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", - "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=" - }, - "node_modules/json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==" + "integrity": "sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ==" }, "node_modules/json-parse-even-better-errors": { "version": "2.3.1", @@ -8523,20 +8333,12 @@ "node_modules/json-stable-stringify-without-jsonify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=" - }, - "node_modules/json3": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.3.tgz", - "integrity": "sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA==" + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==" }, "node_modules/json5": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", - "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", - "dependencies": { - "minimist": "^1.2.5" - }, + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", + "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", "bin": { "json5": "lib/cli.js" }, @@ -8556,12 +8358,12 @@ } }, "node_modules/jsx-ast-utils": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.2.0.tgz", - "integrity": "sha512-EIsmt3O3ljsU6sot/J4E1zDRxfBNrhjyf/OKjlydwgEimQuznlM4Wv7U+ueONJMyEn1WRE0K8dhi3dVAXYT24Q==", + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.3.tgz", + "integrity": "sha512-fYQHZTZ8jSfmWZ0iyzfwiU4WDX4HpHbMCZ3gPlWYiCl3BoeOTsqKBqnTVfH2rYT7eP5c3sVbeSPHnnJOaTrWiw==", "dependencies": { - "array-includes": "^3.1.2", - "object.assign": "^4.1.2" + "array-includes": "^3.1.5", + "object.assign": "^4.1.3" }, "engines": { "node": ">=4.0" @@ -8591,11 +8393,6 @@ "json-buffer": "3.0.0" } }, - "node_modules/killable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/killable/-/killable-1.0.1.tgz", - "integrity": "sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg==" - }, "node_modules/kind-of": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", @@ -8613,9 +8410,9 @@ } }, "node_modules/klona": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.4.tgz", - "integrity": "sha512-ZRbnvdg/NxqzC7L9Uyqzf4psi1OM4Cuc+sJAkQPjO6XkQIJTNbfK2Rsmbw8fx1p2mkZdp2FZYo2+LwXYY/uwIA==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.5.tgz", + "integrity": "sha512-pJiBpiXMbt7dkzXe8Ghj/u4FfXOOa98fPW+bihOJ4SjnoijweJrNThJfd3ifXpXhREjpoF2mZVH1GfS9LV3kHQ==", "engines": { "node": ">= 8" } @@ -8651,23 +8448,31 @@ "node": ">= 0.8.0" } }, + "node_modules/lilconfig": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.6.tgz", + "integrity": "sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg==", + "engines": { + "node": ">=10" + } + }, "node_modules/lines-and-columns": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", - "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=" + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" }, "node_modules/loader-runner": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.2.0.tgz", - "integrity": "sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", "engines": { "node": ">=6.11.5" } }, "node_modules/loader-utils": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", - "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.2.tgz", + "integrity": "sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A==", "dependencies": { "big.js": "^5.2.2", "emojis-list": "^3.0.0", @@ -8693,117 +8498,40 @@ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, - "node_modules/lodash.assignin": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.assignin/-/lodash.assignin-4.2.0.tgz", - "integrity": "sha1-uo31+4QesKPoBEIysOJjqNxqKKI=" - }, - "node_modules/lodash.bind": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/lodash.bind/-/lodash.bind-4.2.1.tgz", - "integrity": "sha1-euMBfpOWIqwxt9fX3LGzTbFpDTU=" - }, - "node_modules/lodash.clonedeep": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", - "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=" - }, "node_modules/lodash.curry": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/lodash.curry/-/lodash.curry-4.1.1.tgz", - "integrity": "sha1-JI42By7ekGUB11lmIAqG2riyMXA=" + "integrity": "sha512-/u14pXGviLaweY5JI0IUzgzF2J6Ne8INyzAZjImcryjgkZ+ebruBxy2/JaOOkTqScddcYtakjhSaeemV8lR0tA==" }, "node_modules/lodash.debounce": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=" - }, - "node_modules/lodash.defaults": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", - "integrity": "sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=" - }, - "node_modules/lodash.filter": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.filter/-/lodash.filter-4.6.0.tgz", - "integrity": "sha1-ZosdSYFgOuHMWm+nYBQ+SAtMSs4=" - }, - "node_modules/lodash.flatten": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", - "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=" + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==" }, "node_modules/lodash.flow": { "version": "3.5.0", "resolved": "https://registry.npmjs.org/lodash.flow/-/lodash.flow-3.5.0.tgz", - "integrity": "sha1-h79AKSuM+D5OjOGjrkIJ4gBxZ1o=" - }, - "node_modules/lodash.foreach": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.foreach/-/lodash.foreach-4.5.0.tgz", - "integrity": "sha1-Gmo16s5AEoDH8G3d7DUWWrJ+PlM=" - }, - "node_modules/lodash.map": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.map/-/lodash.map-4.6.0.tgz", - "integrity": "sha1-dx7Hg540c9nEzeKLGTlMNWL09tM=" + "integrity": "sha512-ff3BX/tSioo+XojX4MOsOMhJw0nZoUEF011LX8g8d3gvjVbxd89cCio4BCXronjxcTUIJUoqKEUA+n4CqvvRPw==" }, "node_modules/lodash.memoize": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=" + "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==" }, "node_modules/lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" }, - "node_modules/lodash.pick": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.pick/-/lodash.pick-4.4.0.tgz", - "integrity": "sha1-UvBWEP/53tQiYRRB7R/BI6AwAbM=" - }, - "node_modules/lodash.reduce": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.reduce/-/lodash.reduce-4.6.0.tgz", - "integrity": "sha1-8atrg5KZrUj3hKu/R2WW8DuRTTs=" - }, - "node_modules/lodash.reject": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.reject/-/lodash.reject-4.6.0.tgz", - "integrity": "sha1-gNZJLcFHCGS79YNTO2UfQqn1JBU=" - }, - "node_modules/lodash.some": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.some/-/lodash.some-4.6.0.tgz", - "integrity": "sha1-G7nzFO9ri63tE7VJFpsqlF62jk0=" - }, - "node_modules/lodash.toarray": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.toarray/-/lodash.toarray-4.4.0.tgz", - "integrity": "sha1-JMS/zWsvuji/0FlNsRedjptlZWE=" - }, "node_modules/lodash.truncate": { "version": "4.4.2", "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", - "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=" + "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==" }, "node_modules/lodash.uniq": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", - "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=" - }, - "node_modules/loglevel": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.7.1.tgz", - "integrity": "sha512-Hesni4s5UkWkwCGJMQGAh71PaLUmKFM60dHvq0zi/vDhhrzuk+4GgNbTXJ12YYQJn6ZKBDNIjYcuQGKudvqrIw==", - "engines": { - "node": ">= 0.6.0" - }, - "funding": { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/loglevel" - } + "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==" }, "node_modules/loose-envify": { "version": "1.4.0", @@ -8865,25 +8593,6 @@ "semver": "bin/semver.js" } }, - "node_modules/map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", - "dependencies": { - "object-visit": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/markdown-escapes": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/markdown-escapes/-/markdown-escapes-1.0.4.tgz", @@ -8946,58 +8655,38 @@ } }, "node_modules/mdn-data": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", - "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==" + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", + "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==" }, "node_modules/mdurl": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", - "integrity": "sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4=" + "integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==" }, "node_modules/media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", "engines": { "node": ">= 0.6" } }, - "node_modules/memory-fs": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", - "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", - "dependencies": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" - } - }, - "node_modules/memory-fs/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/memory-fs/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "node_modules/memfs": { + "version": "3.4.12", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.4.12.tgz", + "integrity": "sha512-BcjuQn6vfqP+k100e0E9m61Hyqa//Brp+I3f0OBmN0ATHlFA8vx3Lt8z57R3u2bPqe3WGDBC+nF72fTH7isyEw==", "dependencies": { - "safe-buffer": "~5.1.0" + "fs-monkey": "^1.0.3" + }, + "engines": { + "node": ">= 4.0.0" } }, "node_modules/merge-descriptors": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" }, "node_modules/merge-stream": { "version": "2.0.0", @@ -9015,23 +8704,18 @@ "node_modules/methods": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", "engines": { "node": ">= 0.6" } }, - "node_modules/microevent.ts": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/microevent.ts/-/microevent.ts-0.1.1.tgz", - "integrity": "sha512-jo1OfR4TaEwd5HOrt5+tAZ9mqT4jmpNAusXtyfNzqVm9uiSYFZlKM1wYL4oU7azZW/PxQW53wM0S6OR1JHNa2g==" - }, "node_modules/micromatch": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", - "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", "dependencies": { - "braces": "^3.0.1", - "picomatch": "^2.2.3" + "braces": "^3.0.2", + "picomatch": "^2.3.1" }, "engines": { "node": ">=8.6" @@ -9049,19 +8733,19 @@ } }, "node_modules/mime-db": { - "version": "1.47.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.47.0.tgz", - "integrity": "sha512-QBmA/G2y+IfeS4oktet3qRZ+P5kPhCKRXxXnQEudYqUaEioAU1/Lq2us3D/t1Jfo4hE9REQPrbB7K5sOczJVIw==", + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", "engines": { "node": ">= 0.6" } }, "node_modules/mime-types": { - "version": "2.1.30", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.30.tgz", - "integrity": "sha512-crmjA4bLtR8m9qLpHvgxSChT+XoSlZi8J4n/aIdn3z92e/U47Z0V/yl+Wh9W046GgFVAmoNR/fmdbZYcSSIUeg==", + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", "dependencies": { - "mime-db": "1.47.0" + "mime-db": "1.52.0" }, "engines": { "node": ">= 0.6" @@ -9083,50 +8767,67 @@ "node": ">=4" } }, - "node_modules/mini-create-react-context": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/mini-create-react-context/-/mini-create-react-context-0.4.1.tgz", - "integrity": "sha512-YWCYEmd5CQeHGSAKrYvXgmzzkrvssZcuuQDDeqkT+PziKGMgE+0MCCtcKbROzocGBG1meBLl2FotlRwf4gAzbQ==", - "dependencies": { - "@babel/runtime": "^7.12.1", - "tiny-warning": "^1.0.3" - }, - "peerDependencies": { - "prop-types": "^15.0.0", - "react": "^0.14.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" - } - }, "node_modules/mini-css-extract-plugin": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-1.6.0.tgz", - "integrity": "sha512-nPFKI7NSy6uONUo9yn2hIfb9vyYvkFu95qki0e21DQ9uaqNKDP15DGpK0KnV6wDroWxPHtExrdEwx/yDQ8nVRw==", + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.7.2.tgz", + "integrity": "sha512-EdlUizq13o0Pd+uCp+WO/JpkLvHRVGt97RqfeGhXqAcorYo1ypJSpkV+WDT0vY/kmh/p7wRdJNJtuyK540PXDw==", "dependencies": { - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0", - "webpack-sources": "^1.1.0" + "schema-utils": "^4.0.0" }, "engines": { - "node": ">= 10.13.0" + "node": ">= 12.13.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/webpack" }, "peerDependencies": { - "webpack": "^4.4.0 || ^5.0.0" + "webpack": "^5.0.0" + } + }, + "node_modules/mini-css-extract-plugin/node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/mini-css-extract-plugin/node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" } }, + "node_modules/mini-css-extract-plugin/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + }, "node_modules/mini-css-extract-plugin/node_modules/schema-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", - "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", + "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", "dependencies": { - "@types/json-schema": "^7.0.6", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" + "@types/json-schema": "^7.0.9", + "ajv": "^8.8.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.0.0" }, "engines": { - "node": ">= 10.13.0" + "node": ">= 12.13.0" }, "funding": { "type": "opencollective", @@ -9139,9 +8840,9 @@ "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" }, "node_modules/minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -9150,81 +8851,75 @@ } }, "node_modules/minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", + "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "node_modules/mixin-deep": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", - "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", + "node_modules/minipass": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz", + "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", "dependencies": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" } }, - "node_modules/mixin-deep/node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "node_modules/minipass/node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" + }, + "node_modules/minizlib": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz", + "integrity": "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==", "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" + "minipass": "^2.9.0" } }, "node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dependencies": { + "minimist": "^1.2.6" + }, "bin": { "mkdirp": "bin/cmd.js" - }, + } + }, + "node_modules/mrmime": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-1.0.1.tgz", + "integrity": "sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==", "engines": { "node": ">=10" } }, - "node_modules/module-alias": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/module-alias/-/module-alias-2.2.2.tgz", - "integrity": "sha512-A/78XjoX2EmNvppVWEhM2oGk3x4lLxnkEA4jTbaK97QKSDjkIoOsKQlfylt/d3kKKi596Qy3NP5XrXJ6fZIC9Q==" - }, "node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "node_modules/multicast-dns": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz", - "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==", + "version": "7.2.5", + "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", + "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", "dependencies": { - "dns-packet": "^1.3.1", + "dns-packet": "^5.2.2", "thunky": "^1.0.2" }, "bin": { "multicast-dns": "cli.js" } }, - "node_modules/multicast-dns-service-types": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz", - "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=" - }, - "node_modules/nan": { - "version": "2.14.2", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.2.tgz", - "integrity": "sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ==", - "optional": true - }, "node_modules/nanoid": { - "version": "3.1.23", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.23.tgz", - "integrity": "sha512-FiB0kzdP0FFVGDKlRLEQ1BgDzU87dy5NnzjeW9YZNt+/c3+q82EQDUwniSAUxp/F0gFNI1ZhKU1FqYsMuqZVnw==", + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", + "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", "bin": { "nanoid": "bin/nanoid.cjs" }, @@ -9232,59 +8927,15 @@ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, - "node_modules/nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/nanomatch/node_modules/extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/nanomatch/node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=" + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==" }, "node_modules/negotiator": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", - "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", "engines": { "node": ">= 0.6" } @@ -9294,10 +8945,19 @@ "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" }, - "node_modules/nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" + "node_modules/njre": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/njre/-/njre-0.2.0.tgz", + "integrity": "sha512-+Wq8R6VmjK+jI8a9NdzfU6Vh50r3tjsdvl5KJE1OyHeH8I/nx5Ptm12qpO3qNUbstXuZfBDgDL0qQZw9JyjhMw==", + "dependencies": { + "command-exists-promise": "^2.0.2", + "node-fetch": "^2.5.0", + "tar": "^4.4.8", + "yauzl": "^2.10.0" + }, + "engines": { + "node": ">=8" + } }, "node_modules/no-case": { "version": "3.0.4", @@ -9309,11 +8969,11 @@ } }, "node_modules/node-emoji": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.10.0.tgz", - "integrity": "sha512-Yt3384If5H6BYGVHiHwTL+99OzJKHhgp82S8/dktEK73T26BazdgZ4JZh92xSVtGNJvz9UbXdNAc5hcrXV42vw==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.11.0.tgz", + "integrity": "sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==", "dependencies": { - "lodash.toarray": "^4.4.0" + "lodash": "^4.17.21" } }, "node_modules/node-fetch": { @@ -9336,17 +8996,17 @@ } }, "node_modules/node-forge": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz", - "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", + "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", "engines": { - "node": ">= 6.0.0" + "node": ">= 6.13.0" } }, "node_modules/node-releases": { - "version": "1.1.72", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.72.tgz", - "integrity": "sha512-LLUo+PpH3dU6XizX3iVoubUNheF/owjXCZZ5yACDxNnPtgFuludV1ZL3ayK1kVep42Rmm0+R9/Y60NQbZ2bifw==" + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", + "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==" }, "node_modules/normalize-path": { "version": "3.0.0", @@ -9359,17 +9019,20 @@ "node_modules/normalize-range": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", "engines": { "node": ">=0.10.0" } }, "node_modules/normalize-url": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", - "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/npm-run-path": { @@ -9386,126 +9049,31 @@ "node_modules/nprogress": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/nprogress/-/nprogress-0.2.0.tgz", - "integrity": "sha1-y480xTIT2JVyP8urkH6UIq28r7E=" + "integrity": "sha512-I19aIingLgR1fmhftnbWWO3dXc0hSxqHQHQb3H8m+K3TnEn/iSeTZZOyvKXWqQESMwuUVnatlCnZdLBZZt2VSA==" }, "node_modules/nth-check": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", - "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", "dependencies": { - "boolbase": "~1.0.0" + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" } }, "node_modules/object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", - "dependencies": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" - }, - "node_modules/object-copy/node_modules/is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/is-descriptor/node_modules/kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dependencies": { - "is-buffer": "^1.1.5" - }, + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", "engines": { "node": ">=0.10.0" } }, "node_modules/object-inspect": { - "version": "1.10.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.10.3.tgz", - "integrity": "sha512-e5mCJlSH7poANfC8z8S9s9S2IN5/4Zb3aZ33f5s8YqoazCFzNLloLU8r5VCG+G7WoqLvAAZoVMcy3tp/3X0Plw==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-is": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", - "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - }, - "engines": { - "node": ">= 0.4" - }, + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", + "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -9518,25 +9086,14 @@ "node": ">= 0.4" } }, - "node_modules/object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", - "dependencies": { - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/object.assign": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", + "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "has-symbols": "^1.0.3", "object-keys": "^1.1.1" }, "engines": { @@ -9547,28 +9104,26 @@ } }, "node_modules/object.entries": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.3.tgz", - "integrity": "sha512-ym7h7OZebNS96hn5IJeyUmaWhaSM4SVtAPPfNLQEI2MYWCO2egsITb9nab2+i/Pwibx+R0mtn+ltKJXRSeTMGg==", + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.5.tgz", + "integrity": "sha512-TyxmjUoZggd4OrrU1W66FMDG6CuqJxsFvymeyXI51+vQLN67zYfZseptRge703kKQdo4uccgAKebXFcRCzk4+g==", "dependencies": { - "call-bind": "^1.0.0", + "call-bind": "^1.0.2", "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.1", - "has": "^1.0.3" + "es-abstract": "^1.19.1" }, "engines": { "node": ">= 0.4" } }, "node_modules/object.fromentries": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.4.tgz", - "integrity": "sha512-EsFBshs5RUUpQEY1D4q/m59kMfz4YJvxuNCJcv/jWwOJr34EaVnG11ZrZa0UHB3wnzV1wx8m58T4hQL8IuNXlQ==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.5.tgz", + "integrity": "sha512-CAyG5mWQRRiBU57Re4FKoTBjXfDoNwdFVH2Y1tS9PqCsfUTymAohOkEMSG3aRNKmv4lV3O7p1et7c187q6bynw==", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2", - "has": "^1.0.3" + "es-abstract": "^1.19.1" }, "engines": { "node": ">= 0.4" @@ -9577,42 +9132,26 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/object.getownpropertydescriptors": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.2.tgz", - "integrity": "sha512-WtxeKSzfBjlzL+F9b7M7hewDzMwy+C8NRssHd1YrNlzHzIDrXcXiNOMrezdAEM4UXixgV+vvnyBeN7Rygl2ttQ==", + "node_modules/object.hasown": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.1.tgz", + "integrity": "sha512-LYLe4tivNQzq4JdaWW6WO3HMZZJWzkkH8fnI6EebWl0VZth2wL2Lovm74ep2/gZzlaTdV62JZHEqHQ2yVn8Q/A==", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2" - }, - "engines": { - "node": ">= 0.8" + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/object.values": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.3.tgz", - "integrity": "sha512-nkF6PfDB9alkOUxpf1HNm/QlkeW3SReqL5WXeBLpEJJnlPSvRaDQpW3gQTksTN3fgJX4hL42RzKyOin6ff3tyw==", + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.5.tgz", + "integrity": "sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2", - "has": "^1.0.3" + "es-abstract": "^1.19.1" }, "engines": { "node": ">= 0.4" @@ -9627,9 +9166,9 @@ "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==" }, "node_modules/on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", "dependencies": { "ee-first": "1.1.1" }, @@ -9648,7 +9187,7 @@ "node_modules/once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", "dependencies": { "wrappy": "1" } @@ -9668,15 +9207,16 @@ } }, "node_modules/open": { - "version": "7.4.2", - "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", - "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz", + "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==", "dependencies": { - "is-docker": "^2.0.0", - "is-wsl": "^2.1.1" + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" }, "engines": { - "node": ">=8" + "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -9690,25 +9230,6 @@ "opener": "bin/opener-bin.js" } }, - "node_modules/opn": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/opn/-/opn-5.5.0.tgz", - "integrity": "sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==", - "dependencies": { - "is-wsl": "^1.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/opn/node_modules/is-wsl": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", - "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", - "engines": { - "node": ">=4" - } - }, "node_modules/optionator": { "version": "0.9.1", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", @@ -9725,14 +9246,6 @@ "node": ">= 0.8.0" } }, - "node_modules/original": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/original/-/original-1.0.2.tgz", - "integrity": "sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg==", - "dependencies": { - "url-parse": "^1.4.3" - } - }, "node_modules/p-cancelable": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", @@ -9741,23 +9254,15 @@ "node": ">=6" } }, - "node_modules/p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", - "engines": { - "node": ">=4" - } - }, "node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dependencies": { - "yocto-queue": "^0.1.0" + "p-try": "^2.0.0" }, "engines": { - "node": ">=10" + "node": ">=6" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -9774,20 +9279,6 @@ "node": ">=8" } }, - "node_modules/p-locate/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/p-map": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", @@ -9803,14 +9294,15 @@ } }, "node_modules/p-retry": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-3.0.1.tgz", - "integrity": "sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w==", + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", + "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", "dependencies": { - "retry": "^0.12.0" + "@types/retry": "0.12.0", + "retry": "^0.13.1" }, "engines": { - "node": ">=6" + "node": ">=8" } }, "node_modules/p-try": { @@ -9898,15 +9390,38 @@ } }, "node_modules/parse-numeric-range": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/parse-numeric-range/-/parse-numeric-range-1.2.0.tgz", - "integrity": "sha512-1q2tXpAOplPxcl8vrIGPWz1dJxxfmdRkCFcpxxMBerDnGuuHalOWF/xj9L8Nn5XoTUoB/6F0CeQBp2fMgkOYFg==" + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/parse-numeric-range/-/parse-numeric-range-1.3.0.tgz", + "integrity": "sha512-twN+njEipszzlMJd4ONUYgSfZPDxgHhT9Ahed5uTigpQn90FggW4SA/AIPq/6a149fTbE9qBEcSwE3FAEp6wQQ==" }, "node_modules/parse5": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" }, + "node_modules/parse5-htmlparser2-tree-adapter": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz", + "integrity": "sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==", + "dependencies": { + "domhandler": "^5.0.2", + "parse5": "^7.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5-htmlparser2-tree-adapter/node_modules/parse5": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", + "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", + "dependencies": { + "entities": "^4.4.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, "node_modules/parseurl": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", @@ -9924,19 +9439,6 @@ "tslib": "^2.0.3" } }, - "node_modules/pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-dirname": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", - "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=" - }, "node_modules/path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", @@ -9948,7 +9450,7 @@ "node_modules/path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", "engines": { "node": ">=0.10.0" } @@ -9956,7 +9458,7 @@ "node_modules/path-is-inside": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=" + "integrity": "sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==" }, "node_modules/path-key": { "version": "3.1.1", @@ -9974,7 +9476,7 @@ "node_modules/path-to-regexp": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" }, "node_modules/path-type": { "version": "4.0.0", @@ -9984,10 +9486,20 @@ "node": ">=8" } }, + "node_modules/pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==" + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + }, "node_modules/picomatch": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.3.tgz", - "integrity": "sha512-KpELjfwcCDUb9PeigTs2mBJzXUPzAuP2oPcA989He8Rte0+YUAjw1JVedDhuTKPkHjSYzMN3npC9luThGYEKdg==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "engines": { "node": ">=8.6" }, @@ -9995,33 +9507,6 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "engines": { - "node": ">=6" - } - }, - "node_modules/pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", - "dependencies": { - "pinkie": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/pkg-dir": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", @@ -10067,20 +9552,6 @@ "node": ">=6" } }, - "node_modules/pkg-up/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/pkg-up/node_modules/p-locate": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", @@ -10095,166 +9566,134 @@ "node_modules/pkg-up/node_modules/path-exists": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", "engines": { "node": ">=4" } }, - "node_modules/portfinder": { - "version": "1.0.28", - "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz", - "integrity": "sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA==", + "node_modules/postcss": { + "version": "8.4.21", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.21.tgz", + "integrity": "sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + } + ], "dependencies": { - "async": "^2.6.2", - "debug": "^3.1.1", - "mkdirp": "^0.5.5" + "nanoid": "^3.3.4", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" }, "engines": { - "node": ">= 0.12.0" + "node": "^10 || ^12 || >=14" } }, - "node_modules/portfinder/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "node_modules/postcss-calc": { + "version": "8.2.4", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.2.4.tgz", + "integrity": "sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==", "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/portfinder/node_modules/mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "dependencies": { - "minimist": "^1.2.5" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss": { - "version": "8.2.15", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.2.15.tgz", - "integrity": "sha512-2zO3b26eJD/8rb106Qu2o7Qgg52ND5HPjcyQiK2B98O388h43A448LCslC0dI2P97wCAQRJsFvwTRcXxTKds+Q==", - "dependencies": { - "colorette": "^1.2.2", - "nanoid": "^3.1.23", - "source-map": "^0.6.1" - }, - "engines": { - "node": "^10 || ^12 || >=14" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/postcss-calc": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.0.0.tgz", - "integrity": "sha512-5NglwDrcbiy8XXfPM11F3HeC6hoT9W7GUH/Zi5U/p7u3Irv4rHhdDcIZwG0llHXV4ftsBjpfWMXAnXNl4lnt8g==", - "dependencies": { - "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^4.0.2" + "postcss-selector-parser": "^6.0.9", + "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.2.2" } }, "node_modules/postcss-colormin": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.0.0.tgz", - "integrity": "sha512-Yt84+5V6CgS/AhK7d7MA58vG8dSZ7+ytlRtWLaQhag3HXOncTfmYpuUOX4cDoXjvLfw1sHRCHMiBjYhc35CymQ==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.3.0.tgz", + "integrity": "sha512-WdDO4gOFG2Z8n4P8TWBpshnL3JpmNmJwdnfP2gbk2qBA8PWwOYcmjmI/t3CmMeL72a7Hkd+x/Mg9O2/0rD54Pg==", "dependencies": { - "browserslist": "^4.16.0", - "color": "^3.1.1", - "postcss-value-parser": "^4.1.0" + "browserslist": "^4.16.6", + "caniuse-api": "^3.0.0", + "colord": "^2.9.1", + "postcss-value-parser": "^4.2.0" }, "engines": { "node": "^10 || ^12 || >=14.0" }, "peerDependencies": { - "postcss": "^8.2.1" + "postcss": "^8.2.15" } }, "node_modules/postcss-convert-values": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.0.0.tgz", - "integrity": "sha512-V5kmYm4xoBAjNs+eHY/6XzXJkkGeg4kwNf2ocfqhLb1WBPEa4oaSmoi1fnVO7Dkblqvus9h+AenDvhCKUCK7uQ==", + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.1.3.tgz", + "integrity": "sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA==", "dependencies": { - "postcss-value-parser": "^4.1.0" + "browserslist": "^4.21.4", + "postcss-value-parser": "^4.2.0" }, "engines": { "node": "^10 || ^12 || >=14.0" }, "peerDependencies": { - "postcss": "^8.2.1" + "postcss": "^8.2.15" } }, "node_modules/postcss-discard-comments": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.0.0.tgz", - "integrity": "sha512-Umig6Gxs8m20RihiXY6QkePd6mp4FxkA1Dg+f/Kd6uw0gEMfKRjDeQOyFkLibexbJJGHpE3lrN/Q0R9SMrUMbQ==", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.1.2.tgz", + "integrity": "sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==", "engines": { "node": "^10 || ^12 || >=14.0" }, "peerDependencies": { - "postcss": "^8.2.1" + "postcss": "^8.2.15" } }, "node_modules/postcss-discard-duplicates": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.0.0.tgz", - "integrity": "sha512-vEJJ+Y3pFUnO1FyCBA6PSisGjHtnphL3V6GsNvkASq/VkP3OX5/No5RYXXLxHa2QegStNzg6HYrYdo71uR4caQ==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz", + "integrity": "sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==", "engines": { "node": "^10 || ^12 || >=14.0" }, "peerDependencies": { - "postcss": "^8.2.1" + "postcss": "^8.2.15" } }, "node_modules/postcss-discard-empty": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.0.0.tgz", - "integrity": "sha512-+wigy099Y1xZxG36WG5L1f2zeH1oicntkJEW4TDIqKKDO2g9XVB3OhoiHTu08rDEjLnbcab4rw0BAccwi2VjiQ==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz", + "integrity": "sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==", "engines": { "node": "^10 || ^12 || >=14.0" }, "peerDependencies": { - "postcss": "^8.2.1" + "postcss": "^8.2.15" } }, "node_modules/postcss-discard-overridden": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.0.0.tgz", - "integrity": "sha512-hybnScTaZM2iEA6kzVQ6Spozy7kVdLw+lGw8hftLlBEzt93uzXoltkYp9u0tI8xbfhxDLTOOzHsHQCkYdmzRUg==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz", + "integrity": "sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==", "engines": { "node": "^10 || ^12 || >=14.0" }, "peerDependencies": { - "postcss": "^8.2.1" + "postcss": "^8.2.15" } }, "node_modules/postcss-discard-unused": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-discard-unused/-/postcss-discard-unused-5.0.0.tgz", - "integrity": "sha512-C+bchjnGRoGlSQjACMts/FlpY3LMDEUS5+9rHKxvl/NFUY/5OYWjkA1AEUo9HDWnFB44CFgcm6khLMSIbrjVEQ==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-discard-unused/-/postcss-discard-unused-5.1.0.tgz", + "integrity": "sha512-KwLWymI9hbwXmJa0dkrzpRbSJEh0vVUd7r8t0yOGPcfKzyJJxFM8kLyC5Ev9avji6nY95pOp1W6HqIrfT+0VGw==", "dependencies": { - "postcss-selector-parser": "^6.0.4" + "postcss-selector-parser": "^6.0.5" }, "engines": { "node": "^10 || ^12 || >=14.0" }, "peerDependencies": { - "postcss": "^8.2.1" + "postcss": "^8.2.15" } }, "node_modules/postcss-loader": { @@ -10281,11 +9720,11 @@ } }, "node_modules/postcss-loader/node_modules/schema-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", - "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", "dependencies": { - "@types/json-schema": "^7.0.6", + "@types/json-schema": "^7.0.8", "ajv": "^6.12.5", "ajv-keywords": "^3.5.2" }, @@ -10298,128 +9737,110 @@ } }, "node_modules/postcss-merge-idents": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-merge-idents/-/postcss-merge-idents-5.0.0.tgz", - "integrity": "sha512-s8wwhAB/SJDPkcVxj31s2SGzgrO66ktUYjWh6j4qwY67Mzxx3/TkK+m/+v6tU/xyW4TmGd4yuyTXsHaaLC0jLg==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-merge-idents/-/postcss-merge-idents-5.1.1.tgz", + "integrity": "sha512-pCijL1TREiCoog5nQp7wUe+TUonA2tC2sQ54UGeMmryK3UFGIYKqDyjnqd6RcuI4znFn9hWSLNN8xKE/vWcUQw==", "dependencies": { - "cssnano-utils": "^2.0.0", - "postcss-value-parser": "^4.1.0" + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" }, "engines": { "node": "^10 || ^12 || >=14.0" }, "peerDependencies": { - "postcss": "^8.2.1" + "postcss": "^8.2.15" } }, "node_modules/postcss-merge-longhand": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.0.1.tgz", - "integrity": "sha512-H1RO8le5deFGumQzuhJjuL0bIXPRysa+w7xtk5KrHe38oiaSS9ksPXDo24+IOS3SETPhip0J5+1uCOW+ALs3Yw==", + "version": "5.1.7", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.1.7.tgz", + "integrity": "sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ==", "dependencies": { - "css-color-names": "^1.0.1", - "postcss-value-parser": "^4.1.0", - "stylehacks": "^5.0.0" + "postcss-value-parser": "^4.2.0", + "stylehacks": "^5.1.1" }, "engines": { "node": "^10 || ^12 || >=14.0" }, "peerDependencies": { - "postcss": "^8.2.1" + "postcss": "^8.2.15" } }, "node_modules/postcss-merge-rules": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.0.0.tgz", - "integrity": "sha512-TfsXbKjNYCGfUPEXGIGPySnMiJbdS+3gcVeV8gwmJP4RajyKZHW8E0FYDL1WmggTj3hi+m+WUCAvqRpX2ut4Kg==", + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.1.3.tgz", + "integrity": "sha512-LbLd7uFC00vpOuMvyZop8+vvhnfRGpp2S+IMQKeuOZZapPRY4SMq5ErjQeHbHsjCUgJkRNrlU+LmxsKIqPKQlA==", "dependencies": { - "browserslist": "^4.16.0", + "browserslist": "^4.21.4", "caniuse-api": "^3.0.0", - "cssnano-utils": "^2.0.0", - "postcss-selector-parser": "^6.0.4", - "vendors": "^1.0.3" + "cssnano-utils": "^3.1.0", + "postcss-selector-parser": "^6.0.5" }, "engines": { "node": "^10 || ^12 || >=14.0" }, "peerDependencies": { - "postcss": "^8.2.1" + "postcss": "^8.2.15" } }, "node_modules/postcss-minify-font-values": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.0.0.tgz", - "integrity": "sha512-zi2JhFaMOcIaNxhndX5uhsqSY1rexKDp23wV8EOmC9XERqzLbHsoRye3aYF716Zm+hkcR4loqKDt8LZlmihwAg==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.1.0.tgz", + "integrity": "sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA==", "dependencies": { - "postcss-value-parser": "^4.1.0" + "postcss-value-parser": "^4.2.0" }, "engines": { "node": "^10 || ^12 || >=14.0" }, "peerDependencies": { - "postcss": "^8.2.1" + "postcss": "^8.2.15" } }, "node_modules/postcss-minify-gradients": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.0.0.tgz", - "integrity": "sha512-/jPtNgs6JySMwgsE5dPOq8a2xEopWTW3RyqoB9fLqxgR+mDUNLSi7joKd+N1z7FXWgVkc4l/dEBMXHgNAaUbvg==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.1.1.tgz", + "integrity": "sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw==", "dependencies": { - "cssnano-utils": "^2.0.0", - "is-color-stop": "^1.1.0", - "postcss-value-parser": "^4.1.0" + "colord": "^2.9.1", + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" }, "engines": { "node": "^10 || ^12 || >=14.0" }, "peerDependencies": { - "postcss": "^8.2.1" + "postcss": "^8.2.15" } }, "node_modules/postcss-minify-params": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.0.0.tgz", - "integrity": "sha512-KvZYIxTPBVKjdd+XgObq9A+Sfv8lMkXTpbZTsjhr42XbfWIeLaTItMlygsDWfjArEc3muUfDaUFgNSeDiJ5jug==", + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.1.4.tgz", + "integrity": "sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw==", "dependencies": { - "alphanum-sort": "^1.0.2", - "browserslist": "^4.16.0", - "cssnano-utils": "^2.0.0", - "postcss-value-parser": "^4.1.0", - "uniqs": "^2.0.0" + "browserslist": "^4.21.4", + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" }, "engines": { "node": "^10 || ^12 || >=14.0" }, "peerDependencies": { - "postcss": "^8.2.1" + "postcss": "^8.2.15" } }, "node_modules/postcss-minify-selectors": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.0.0.tgz", - "integrity": "sha512-cEM0O0eWwFIvmo6nfB0lH0vO/XFwgqIvymODbfPXZ1gTA3i76FKnb7TGUrEpiTxaXH6tgYQ6DcTHwRiRS+YQLQ==", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.2.1.tgz", + "integrity": "sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg==", "dependencies": { - "alphanum-sort": "^1.0.2", - "postcss-selector-parser": "^3.1.2" + "postcss-selector-parser": "^6.0.5" }, "engines": { "node": "^10 || ^12 || >=14.0" }, "peerDependencies": { - "postcss": "^8.2.1" - } - }, - "node_modules/postcss-minify-selectors/node_modules/postcss-selector-parser": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", - "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", - "dependencies": { - "dot-prop": "^5.2.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - }, - "engines": { - "node": ">=8" + "postcss": "^8.2.15" } }, "node_modules/postcss-modules-extract-imports": { @@ -10478,197 +9899,192 @@ } }, "node_modules/postcss-normalize-charset": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.0.0.tgz", - "integrity": "sha512-pqsCkgo9KmQP0ew6DqSA+uP9YN6EfsW20pQ3JU5JoQge09Z6Too4qU0TNDsTNWuEaP8SWsMp+19l15210MsDZQ==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz", + "integrity": "sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==", "engines": { "node": "^10 || ^12 || >=14.0" }, "peerDependencies": { - "postcss": "^8.2.1" + "postcss": "^8.2.15" } }, "node_modules/postcss-normalize-display-values": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.0.0.tgz", - "integrity": "sha512-t4f2d//gH1f7Ns0Jq3eNdnWuPT7TeLuISZ6RQx4j8gpl5XrhkdshdNcOnlrEK48YU6Tcb6jqK7dorME3N4oOGA==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.1.0.tgz", + "integrity": "sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA==", "dependencies": { - "cssnano-utils": "^2.0.0", - "postcss-value-parser": "^4.1.0" + "postcss-value-parser": "^4.2.0" }, "engines": { "node": "^10 || ^12 || >=14.0" }, "peerDependencies": { - "postcss": "^8.2.1" + "postcss": "^8.2.15" } }, "node_modules/postcss-normalize-positions": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.0.0.tgz", - "integrity": "sha512-0o6/qU5ky74X/eWYj/tv4iiKCm3YqJnrhmVADpIMNXxzFZywsSQxl8F7cKs8jQEtF3VrJBgcDHTexZy1zgDoYg==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.1.1.tgz", + "integrity": "sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg==", "dependencies": { - "postcss-value-parser": "^4.1.0" + "postcss-value-parser": "^4.2.0" }, "engines": { "node": "^10 || ^12 || >=14.0" }, "peerDependencies": { - "postcss": "^8.2.1" + "postcss": "^8.2.15" } }, "node_modules/postcss-normalize-repeat-style": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.0.0.tgz", - "integrity": "sha512-KRT14JbrXKcFMYuc4q7lh8lvv8u22wLyMrq+UpHKLtbx2H/LOjvWXYdoDxmNrrrJzomAWL+ViEXr48/IhSUJnQ==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.1.tgz", + "integrity": "sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g==", "dependencies": { - "cssnano-utils": "^2.0.0", - "postcss-value-parser": "^4.1.0" + "postcss-value-parser": "^4.2.0" }, "engines": { "node": "^10 || ^12 || >=14.0" }, "peerDependencies": { - "postcss": "^8.2.1" + "postcss": "^8.2.15" } }, "node_modules/postcss-normalize-string": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.0.0.tgz", - "integrity": "sha512-wSO4pf7GNcDZpmelREWYADF1+XZWrAcbFLQCOqoE92ZwYgaP/RLumkUTaamEzdT2YKRZAH8eLLKGWotU/7FNPw==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.1.0.tgz", + "integrity": "sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w==", "dependencies": { - "postcss-value-parser": "^4.1.0" + "postcss-value-parser": "^4.2.0" }, "engines": { "node": "^10 || ^12 || >=14.0" }, "peerDependencies": { - "postcss": "^8.2.1" + "postcss": "^8.2.15" } }, "node_modules/postcss-normalize-timing-functions": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.0.0.tgz", - "integrity": "sha512-TwPaDX+wl9wO3MUm23lzGmOzGCGKnpk+rSDgzB2INpakD5dgWR3L6bJq1P1LQYzBAvz8fRIj2NWdnZdV4EV98Q==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.1.0.tgz", + "integrity": "sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg==", "dependencies": { - "cssnano-utils": "^2.0.0", - "postcss-value-parser": "^4.1.0" + "postcss-value-parser": "^4.2.0" }, "engines": { "node": "^10 || ^12 || >=14.0" }, "peerDependencies": { - "postcss": "^8.2.1" + "postcss": "^8.2.15" } }, "node_modules/postcss-normalize-unicode": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.0.0.tgz", - "integrity": "sha512-2CpVoz/67rXU5s9tsPZDxG1YGS9OFHwoY9gsLAzrURrCxTAb0H7Vp87/62LvVPgRWTa5ZmvgmqTp2rL8tlm72A==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.1.tgz", + "integrity": "sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA==", "dependencies": { - "browserslist": "^4.16.0", - "postcss-value-parser": "^4.1.0" + "browserslist": "^4.21.4", + "postcss-value-parser": "^4.2.0" }, "engines": { "node": "^10 || ^12 || >=14.0" }, "peerDependencies": { - "postcss": "^8.2.1" + "postcss": "^8.2.15" } }, "node_modules/postcss-normalize-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.0.0.tgz", - "integrity": "sha512-ICDaGFBqLgA3dlrCIRuhblLl80D13YtgEV9NJPTYJtgR72vu61KgxAHv+z/lKMs1EbwfSQa3ALjOFLSmXiE34A==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.1.0.tgz", + "integrity": "sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew==", "dependencies": { - "is-absolute-url": "^3.0.3", - "normalize-url": "^4.5.0", - "postcss-value-parser": "^4.1.0" + "normalize-url": "^6.0.1", + "postcss-value-parser": "^4.2.0" }, "engines": { "node": "^10 || ^12 || >=14.0" }, "peerDependencies": { - "postcss": "^8.2.1" + "postcss": "^8.2.15" } }, "node_modules/postcss-normalize-whitespace": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.0.0.tgz", - "integrity": "sha512-KRnxQvQAVkJfaeXSz7JlnD9nBN9sFZF9lrk9452Q2uRoqrRSkinqifF8Iex7wZGei2DZVG/qpmDFDmRvbNAOGA==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.1.1.tgz", + "integrity": "sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA==", "dependencies": { - "postcss-value-parser": "^4.1.0" + "postcss-value-parser": "^4.2.0" }, "engines": { "node": "^10 || ^12 || >=14.0" }, "peerDependencies": { - "postcss": "^8.2.1" + "postcss": "^8.2.15" } }, "node_modules/postcss-ordered-values": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.0.0.tgz", - "integrity": "sha512-dPr+SRObiHueCIc4IUaG0aOGQmYkuNu50wQvdXTGKy+rzi2mjmPsbeDsheLk5WPb9Zyf2tp8E+I+h40cnivm6g==", + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.1.3.tgz", + "integrity": "sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ==", "dependencies": { - "cssnano-utils": "^2.0.0", - "postcss-value-parser": "^4.1.0" + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" }, "engines": { "node": "^10 || ^12 || >=14.0" }, "peerDependencies": { - "postcss": "^8.2.1" + "postcss": "^8.2.15" } }, "node_modules/postcss-reduce-idents": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-reduce-idents/-/postcss-reduce-idents-5.0.0.tgz", - "integrity": "sha512-wDth7wkXAZ91i7GNe+/PJKyC9NOR2n04U0t5nnqlvlkKhMhnRn/8NJLYQRa7ZZHPGOZcOfvugrhblioTTg2X8A==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/postcss-reduce-idents/-/postcss-reduce-idents-5.2.0.tgz", + "integrity": "sha512-BTrLjICoSB6gxbc58D5mdBK8OhXRDqud/zodYfdSi52qvDHdMwk+9kB9xsM8yJThH/sZU5A6QVSmMmaN001gIg==", "dependencies": { - "postcss-value-parser": "^4.1.0" + "postcss-value-parser": "^4.2.0" }, "engines": { "node": "^10 || ^12 || >=14.0" }, "peerDependencies": { - "postcss": "^8.2.1" + "postcss": "^8.2.15" } }, "node_modules/postcss-reduce-initial": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.0.0.tgz", - "integrity": "sha512-wR6pXUaFbSMG1oCKx8pKVA+rnSXCHlca5jMrlmkmif+uig0HNUTV9oGN5kjKsM3mATQAldv2PF9Tbl2vqLFjnA==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.1.1.tgz", + "integrity": "sha512-//jeDqWcHPuXGZLoolFrUXBDyuEGbr9S2rMo19bkTIjBQ4PqkaO+oI8wua5BOUxpfi97i3PCoInsiFIEBfkm9w==", "dependencies": { - "browserslist": "^4.16.0", + "browserslist": "^4.21.4", "caniuse-api": "^3.0.0" }, "engines": { "node": "^10 || ^12 || >=14.0" }, "peerDependencies": { - "postcss": "^8.2.1" + "postcss": "^8.2.15" } }, "node_modules/postcss-reduce-transforms": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.0.0.tgz", - "integrity": "sha512-iHdGODW4YzM3WjVecBhPQt6fpJC4lGQZxJKjkBNHpp2b8dzmvj0ogKThqya+IRodQEFzjfXgYeESkf172FH5Lw==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.1.0.tgz", + "integrity": "sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ==", "dependencies": { - "cssnano-utils": "^2.0.0", - "postcss-value-parser": "^4.1.0" + "postcss-value-parser": "^4.2.0" }, "engines": { "node": "^10 || ^12 || >=14.0" }, "peerDependencies": { - "postcss": "^8.2.1" + "postcss": "^8.2.15" } }, "node_modules/postcss-selector-parser": { - "version": "6.0.6", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.6.tgz", - "integrity": "sha512-9LXrvaaX3+mcv5xkg5kFwqSzSH1JIObIx51PrndZwlmznwXRfxMddDvo9gve3gVR8ZTKgoFDdWkbRFmEhT4PMg==", + "version": "6.0.10", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz", + "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==", "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" @@ -10678,225 +10094,62 @@ } }, "node_modules/postcss-sort-media-queries": { - "version": "3.9.10", - "resolved": "https://registry.npmjs.org/postcss-sort-media-queries/-/postcss-sort-media-queries-3.9.10.tgz", - "integrity": "sha512-pyCWbMrpQq4WjcYFrcVAvxS/+iHnXK5pxa1SAm1s9U4HZjGYU4gkCHwbHbzJ2ZFiiRYpRNRp85QuFvg6ZyKHxw==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/postcss-sort-media-queries/-/postcss-sort-media-queries-4.3.0.tgz", + "integrity": "sha512-jAl8gJM2DvuIJiI9sL1CuiHtKM4s5aEIomkU8G3LFvbP+p8i7Sz8VV63uieTgoewGqKbi+hxBTiOKJlB35upCg==", "dependencies": { - "sort-css-media-queries": "1.5.4" + "sort-css-media-queries": "2.1.0" }, "engines": { "node": ">=10.0.0" }, "peerDependencies": { - "postcss": "^8.2.13" + "postcss": "^8.4.16" } }, "node_modules/postcss-svgo": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.0.0.tgz", - "integrity": "sha512-M3/VS4sFI1Yp9g0bPL+xzzCNz5iLdRUztoFaugMit5a8sMfkVzzhwqbsOlD8IFFymCdJDmXmh31waYHWw1K4BA==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.1.0.tgz", + "integrity": "sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA==", "dependencies": { - "postcss-value-parser": "^4.1.0", - "svgo": "^2.3.0" + "postcss-value-parser": "^4.2.0", + "svgo": "^2.7.0" }, "engines": { "node": "^10 || ^12 || >=14.0" }, "peerDependencies": { - "postcss": "^8.2.1" - } - }, - "node_modules/postcss-svgo/node_modules/commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "engines": { - "node": ">= 10" - } - }, - "node_modules/postcss-svgo/node_modules/css-select": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-3.1.2.tgz", - "integrity": "sha512-qmss1EihSuBNWNNhHjxzxSfJoFBM/lERB/Q4EnsJQQC62R2evJDW481091oAdOr9uh46/0n4nrg0It5cAnj1RA==", - "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^4.0.0", - "domhandler": "^4.0.0", - "domutils": "^2.4.3", - "nth-check": "^2.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/postcss-svgo/node_modules/css-tree": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", - "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", - "dependencies": { - "mdn-data": "2.0.14", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/postcss-svgo/node_modules/css-what": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-4.0.0.tgz", - "integrity": "sha512-teijzG7kwYfNVsUh2H/YN62xW3KK9YhXEgSlbxMlcyjPNvdKJqFx5lrwlJgoFP1ZHlB89iGDlo/JyshKeRhv5A==", - "engines": { - "node": ">= 6" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/postcss-svgo/node_modules/dom-serializer": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.1.tgz", - "integrity": "sha512-Pv2ZluG5ife96udGgEDovOOOA5UELkltfJpnIExPrAk1LTvecolUGn6lIaoLh86d83GiB86CjzciMd9BuRB71Q==", - "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^4.0.0", - "entities": "^2.0.0" - }, - "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" - } - }, - "node_modules/postcss-svgo/node_modules/domelementtype": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", - "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ] - }, - "node_modules/postcss-svgo/node_modules/domhandler": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.0.tgz", - "integrity": "sha512-zk7sgt970kzPks2Bf+dwT/PLzghLnsivb9CcxkvR8Mzr66Olr0Ofd8neSbglHJHaHa2MadfoSdNlKYAaafmWfA==", - "dependencies": { - "domelementtype": "^2.2.0" - }, - "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" - } - }, - "node_modules/postcss-svgo/node_modules/domutils": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.6.0.tgz", - "integrity": "sha512-y0BezHuy4MDYxh6OvolXYsH+1EMGmFbwv5FKW7ovwMG6zTPWqNPq3WF9ayZssFq+UlKdffGLbOEaghNdaOm1WA==", - "dependencies": { - "dom-serializer": "^1.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0" - }, - "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" - } - }, - "node_modules/postcss-svgo/node_modules/entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/postcss-svgo/node_modules/mdn-data": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", - "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==" - }, - "node_modules/postcss-svgo/node_modules/nth-check": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.0.tgz", - "integrity": "sha512-i4sc/Kj8htBrAiH1viZ0TgU8Y5XqCaV/FziYK6TBczxmeKm3AEFWqqF3195yKudrarqy7Zu80Ra5dobFjn9X/Q==", - "dependencies": { - "boolbase": "^1.0.0" - }, - "funding": { - "url": "https://github.com/fb55/nth-check?sponsor=1" - } - }, - "node_modules/postcss-svgo/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss-svgo/node_modules/svgo": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.3.0.tgz", - "integrity": "sha512-fz4IKjNO6HDPgIQxu4IxwtubtbSfGEAJUq/IXyTPIkGhWck/faiiwfkvsB8LnBkKLvSoyNNIY6d13lZprJMc9Q==", - "dependencies": { - "@trysound/sax": "0.1.1", - "chalk": "^4.1.0", - "commander": "^7.1.0", - "css-select": "^3.1.2", - "css-tree": "^1.1.2", - "csso": "^4.2.0", - "stable": "^0.1.8" - }, - "bin": { - "svgo": "bin/svgo" - }, - "engines": { - "node": ">=10.13.0" + "postcss": "^8.2.15" } }, "node_modules/postcss-unique-selectors": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.0.0.tgz", - "integrity": "sha512-o9l4pF8SRn7aCMTmzb/kNv/kjV7wPZpZ8Nlb1Gq8v/Qvw969K1wanz1RVA0ehHzWe9+wHXaC2DvZlak/gdMJ5w==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.1.1.tgz", + "integrity": "sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA==", "dependencies": { - "alphanum-sort": "^1.0.2", - "postcss-selector-parser": "^6.0.2", - "uniqs": "^2.0.0" + "postcss-selector-parser": "^6.0.5" }, "engines": { "node": "^10 || ^12 || >=14.0" }, "peerDependencies": { - "postcss": "^8.2.1" + "postcss": "^8.2.15" } }, "node_modules/postcss-value-parser": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", - "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==" + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" }, "node_modules/postcss-zindex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-zindex/-/postcss-zindex-5.0.0.tgz", - "integrity": "sha512-thJp90qNZedxzfljsAnu7V35L/Zue/nVvWzPDLKZuqHmwDuy1vd3xkFVYfEa8WZZQaetvHtsi3uwjVD3UJAVeg==", - "dependencies": { - "has": "^1.0.3", - "uniqs": "^2.0.0" - }, + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-zindex/-/postcss-zindex-5.1.0.tgz", + "integrity": "sha512-fgFMf0OtVSBR1va1JNHYgMxYk73yhn/qb4uQDq1DLGYolz8gHCyr/sesEuGUaYs58E3ZJRcpoGuPVoB7Meiq9A==", "engines": { "node": "^10 || ^12 || >=14.0" }, "peerDependencies": { - "postcss": "^8.2.1" - } - }, - "node_modules/postcss/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "engines": { - "node": ">=0.10.0" + "postcss": "^8.2.15" } }, "node_modules/prelude-ls": { @@ -10910,29 +10163,32 @@ "node_modules/prepend-http": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", - "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", + "integrity": "sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA==", "engines": { "node": ">=4" } }, "node_modules/prettier": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.3.0.tgz", - "integrity": "sha512-kXtO4s0Lz/DW/IJ9QdWhAf7/NmPWQXkFr/r/WkR3vyI+0v8amTDxiaQSLzs8NBlytfLWX/7uQUMIW677yLKl4w==", + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz", + "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==", "bin": { "prettier": "bin-prettier.js" }, "engines": { "node": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" } }, "node_modules/pretty-error": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-2.1.2.tgz", - "integrity": "sha512-EY5oDzmsX5wvuynAByrmY0P0hcp+QpnAKbJng2A2MPjVKXCxrDSUkzghVJ4ZGPIv+JC4gX8fPUWscC0RtjsWGw==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz", + "integrity": "sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==", "dependencies": { "lodash": "^4.17.20", - "renderkid": "^2.0.4" + "renderkid": "^3.0.0" } }, "node_modules/pretty-time": { @@ -10944,19 +10200,19 @@ } }, "node_modules/prism-react-renderer": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/prism-react-renderer/-/prism-react-renderer-1.2.0.tgz", - "integrity": "sha512-GHqzxLYImx1iKN1jJURcuRoA/0ygCcNhfGw1IT8nPIMzarmKQ3Nc+JcG0gi8JXQzuh0C5ShE4npMIoqNin40hg==", + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/prism-react-renderer/-/prism-react-renderer-1.3.5.tgz", + "integrity": "sha512-IJ+MSwBWKG+SM3b2SUfdrhC+gu01QkV2KmRQgREThBfSQRoufqRfxfHUxpG1WcaFjP+kojcFyO9Qqtpgt3qLCg==", "peerDependencies": { "react": ">=0.14.9" } }, "node_modules/prismjs": { - "version": "1.23.0", - "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.23.0.tgz", - "integrity": "sha512-c29LVsqOaLbBHuIbsTxaKENh1N2EQBOHaWv7gkHN4dgRbxSREqDnDbtFJYdpPauS4YCplMSNCABQ6Eeor69bAA==", - "optionalDependencies": { - "clipboard": "^2.0.0" + "version": "1.29.0", + "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.29.0.tgz", + "integrity": "sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==", + "engines": { + "node": ">=6" } }, "node_modules/process-nextick-args": { @@ -10981,9 +10237,9 @@ } }, "node_modules/prompts": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.1.tgz", - "integrity": "sha512-EQyfIuO2hPDsX1L/blblV+H7I0knhgAd82cVneCwcdND9B8AuCDuRcBH6yIcG4dFzlOUqbazQqwGjx5xmsNLuQ==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", "dependencies": { "kleur": "^3.0.3", "sisteransi": "^1.0.5" @@ -10993,13 +10249,13 @@ } }, "node_modules/prop-types": { - "version": "15.7.2", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz", - "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==", + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", "dependencies": { "loose-envify": "^1.4.0", "object-assign": "^4.1.1", - "react-is": "^16.8.1" + "react-is": "^16.13.1" } }, "node_modules/property-information": { @@ -11015,25 +10271,28 @@ } }, "node_modules/proxy-addr": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz", - "integrity": "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==", + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", "dependencies": { - "forwarded": "~0.1.2", + "forwarded": "0.2.0", "ipaddr.js": "1.9.1" }, "engines": { "node": ">= 0.10" } }, - "node_modules/prr": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", - "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=" - }, - "node_modules/pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "node_modules/proxy-addr/node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", "dependencies": { "end-of-stream": "^1.1.0", @@ -11043,7 +10302,7 @@ "node_modules/punycode": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" + "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==" }, "node_modules/pupa": { "version": "2.1.1", @@ -11059,38 +10318,30 @@ "node_modules/pure-color": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/pure-color/-/pure-color-1.3.0.tgz", - "integrity": "sha1-H+Bk+wrIUfDeYTIKi/eWg2Qi8z4=" - }, - "node_modules/q": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", - "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", - "engines": { - "node": ">=0.6.0", - "teleport": ">=0.2.0" - } + "integrity": "sha512-QFADYnsVoBMw1srW7OVKEYjG+MbIa49s54w1MA1EDY6r2r/sTcKKYqRX1f4GYvnXP7eN/Pe9HFcX+hwzmrXRHA==" }, "node_modules/qs": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", - "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "dependencies": { + "side-channel": "^1.0.4" + }, "engines": { "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/querystring": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", - "engines": { - "node": ">=0.4.x" + "node_modules/queue": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/queue/-/queue-6.0.2.tgz", + "integrity": "sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==", + "dependencies": { + "inherits": "~2.0.3" } }, - "node_modules/querystringify": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", - "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==" - }, "node_modules/queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", @@ -11127,12 +10378,12 @@ } }, "node_modules/raw-body": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", - "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", "dependencies": { - "bytes": "3.1.0", - "http-errors": "1.7.2", + "bytes": "3.1.2", + "http-errors": "2.0.0", "iconv-lite": "0.4.24", "unpipe": "1.0.0" }, @@ -11140,6 +10391,14 @@ "node": ">= 0.8" } }, + "node_modules/raw-body/node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/rc": { "version": "1.2.8", "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", @@ -11157,7 +10416,7 @@ "node_modules/rc/node_modules/strip-json-comments": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", "engines": { "node": ">=0.10.0" } @@ -11178,7 +10437,7 @@ "node_modules/react-base16-styling": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/react-base16-styling/-/react-base16-styling-0.6.0.tgz", - "integrity": "sha1-7yFW1mz0E5aVyKFniGy2nqZgeSw=", + "integrity": "sha512-yvh/7CArceR/jNATXOKDlvTnPKPmGZz7zsenQ3jUwLzHkNUR0CvY3yGYJbWJ/nnxsL8Sgmt5cO3/SILVuPO6TQ==", "dependencies": { "base16": "^1.0.0", "lodash.curry": "^4.0.1", @@ -11187,132 +10446,68 @@ } }, "node_modules/react-dev-utils": { - "version": "11.0.4", - "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-11.0.4.tgz", - "integrity": "sha512-dx0LvIGHcOPtKbeiSUM4jqpBl3TcY7CDjZdfOIcKeznE7BWr9dg0iPG90G5yfVQ+p/rGNMXdbfStvzQZEVEi4A==", - "dependencies": { - "@babel/code-frame": "7.10.4", - "address": "1.1.2", - "browserslist": "4.14.2", - "chalk": "2.4.2", - "cross-spawn": "7.0.3", - "detect-port-alt": "1.1.6", - "escape-string-regexp": "2.0.0", - "filesize": "6.1.0", - "find-up": "4.1.0", - "fork-ts-checker-webpack-plugin": "4.1.6", - "global-modules": "2.0.0", - "globby": "11.0.1", - "gzip-size": "5.1.1", - "immer": "8.0.1", - "is-root": "2.1.0", - "loader-utils": "2.0.0", - "open": "^7.0.2", - "pkg-up": "3.1.0", - "prompts": "2.4.0", - "react-error-overlay": "^6.0.9", - "recursive-readdir": "2.2.2", - "shell-quote": "1.7.2", - "strip-ansi": "6.0.0", - "text-table": "0.2.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/react-dev-utils/node_modules/@babel/code-frame": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", - "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", - "dependencies": { - "@babel/highlight": "^7.10.4" - } - }, - "node_modules/react-dev-utils/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dependencies": { - "color-convert": "^1.9.0" + "version": "12.0.1", + "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-12.0.1.tgz", + "integrity": "sha512-84Ivxmr17KjUupyqzFode6xKhjwuEJDROWKJy/BthkL7Wn6NJ8h4WE6k/exAv6ImS+0oZLRRW5j/aINMHyeGeQ==", + "dependencies": { + "@babel/code-frame": "^7.16.0", + "address": "^1.1.2", + "browserslist": "^4.18.1", + "chalk": "^4.1.2", + "cross-spawn": "^7.0.3", + "detect-port-alt": "^1.1.6", + "escape-string-regexp": "^4.0.0", + "filesize": "^8.0.6", + "find-up": "^5.0.0", + "fork-ts-checker-webpack-plugin": "^6.5.0", + "global-modules": "^2.0.0", + "globby": "^11.0.4", + "gzip-size": "^6.0.0", + "immer": "^9.0.7", + "is-root": "^2.1.0", + "loader-utils": "^3.2.0", + "open": "^8.4.0", + "pkg-up": "^3.1.0", + "prompts": "^2.4.2", + "react-error-overlay": "^6.0.11", + "recursive-readdir": "^2.2.2", + "shell-quote": "^1.7.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" }, "engines": { - "node": ">=4" + "node": ">=14" } }, - "node_modules/react-dev-utils/node_modules/browserslist": { - "version": "4.14.2", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.14.2.tgz", - "integrity": "sha512-HI4lPveGKUR0x2StIz+2FXfDk9SfVMrxn6PLh1JeGUwcuoDkdKZebWiyLRJ68iIPDpMI4JLVDf7S7XzslgWOhw==", + "node_modules/react-dev-utils/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dependencies": { - "caniuse-lite": "^1.0.30001125", - "electron-to-chromium": "^1.3.564", - "escalade": "^3.0.2", - "node-releases": "^1.1.61" - }, - "bin": { - "browserslist": "cli.js" + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" }, "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + "node": ">=10" }, "funding": { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - } - }, - "node_modules/react-dev-utils/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/react-dev-utils/node_modules/chalk/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/react-dev-utils/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dependencies": { - "color-name": "1.1.3" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/react-dev-utils/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" - }, - "node_modules/react-dev-utils/node_modules/escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "node_modules/react-dev-utils/node_modules/loader-utils": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.2.1.tgz", + "integrity": "sha512-ZvFw1KWS3GVyYBYb7qkmRM/WwL2TQQBxgCK62rlvm4WpVQ23Nb4tYjApUlfjrEGvOs7KHEsmyUn75OHZrJMWPw==", "engines": { - "node": ">=8" + "node": ">= 12.13.0" } }, - "node_modules/react-dev-utils/node_modules/globby": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.1.tgz", - "integrity": "sha512-iH9RmgwCmUJHi2z5o2l3eTtGBtXek1OYlHrbcxOYugyHLmAsZrPj43OtHThd62Buh/Vv6VyCBD2bdyWcGNQqoQ==", + "node_modules/react-dev-utils/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.1.1", - "ignore": "^5.1.4", - "merge2": "^1.3.0", - "slash": "^3.0.0" + "p-locate": "^5.0.0" }, "engines": { "node": ">=10" @@ -11321,43 +10516,32 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/react-dev-utils/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "engines": { - "node": ">=4" - } - }, - "node_modules/react-dev-utils/node_modules/ignore": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", - "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", - "engines": { - "node": ">= 4" - } - }, - "node_modules/react-dev-utils/node_modules/prompts": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.0.tgz", - "integrity": "sha512-awZAKrk3vN6CroQukBL+R9051a4R3zCZBlJm/HBfrSZ8iTpYix3VX1vU4mveiLpiwmOJT4wokTF9m6HUk4KqWQ==", + "node_modules/react-dev-utils/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dependencies": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" + "yocto-queue": "^0.1.0" }, "engines": { - "node": ">= 6" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/react-dev-utils/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "node_modules/react-dev-utils/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dependencies": { - "has-flag": "^3.0.0" + "p-limit": "^3.0.2" }, "engines": { - "node": ">=4" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/react-dom": { @@ -11375,27 +10559,29 @@ } }, "node_modules/react-error-overlay": { - "version": "6.0.9", - "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.9.tgz", - "integrity": "sha512-nQTTcUu+ATDbrSD1BZHr5kgSD4oF8OFjxun8uAaL8RwPBacGBNPf/yAuVVdx17N8XNzRDMrZ9XcKZHCjPW+9ew==" + "version": "6.0.11", + "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.11.tgz", + "integrity": "sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg==" }, "node_modules/react-fast-compare": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-3.2.0.tgz", "integrity": "sha512-rtGImPZ0YyLrscKI9xTpV8psd6I8VAtjKCzQDlzyDvqJA8XOW78TXYQwNRNd8g8JZnDu8q9Fu/1v4HPAVwVdHA==" }, - "node_modules/react-helmet": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/react-helmet/-/react-helmet-6.1.0.tgz", - "integrity": "sha512-4uMzEY9nlDlgxr61NL3XbKRy1hEkXmKNXhjbAIOVw5vcFrsdYbH2FEwcNyWvWinl103nXgzYNlns9ca+8kFiWw==", + "node_modules/react-helmet-async": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/react-helmet-async/-/react-helmet-async-1.3.0.tgz", + "integrity": "sha512-9jZ57/dAn9t3q6hneQS0wukqC2ENOBgMNVEhb/ZG9ZSxUetzVIw4iAmEU38IaVg3QGYauQPhSeUTuIUtFglWpg==", "dependencies": { - "object-assign": "^4.1.1", + "@babel/runtime": "^7.12.5", + "invariant": "^2.2.4", "prop-types": "^15.7.2", - "react-fast-compare": "^3.1.1", - "react-side-effect": "^2.1.0" + "react-fast-compare": "^3.2.0", + "shallowequal": "^1.1.0" }, "peerDependencies": { - "react": ">=16.3.0" + "react": "^16.6.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.6.0 || ^17.0.0 || ^18.0.0" } }, "node_modules/react-is": { @@ -11427,6 +10613,7 @@ "version": "5.5.0", "resolved": "https://registry.npmjs.org/react-loadable/-/react-loadable-5.5.0.tgz", "integrity": "sha512-C8Aui0ZpMd4KokxRdVAm2bQtI03k2RMRNzOB+IipV3yxFTSVICv7WoUr5L9ALB5BmKO1iHgZtWM8EvYG83otdg==", + "peer": true, "dependencies": { "prop-types": "^15.5.0" }, @@ -11450,15 +10637,14 @@ } }, "node_modules/react-router": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-5.2.0.tgz", - "integrity": "sha512-smz1DUuFHRKdcJC0jobGo8cVbhO3x50tCL4icacOlcwDOEQPq4TMqwx3sY1TP+DvtTgz4nm3thuo7A+BK2U0Dw==", + "version": "5.3.4", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-5.3.4.tgz", + "integrity": "sha512-Ys9K+ppnJah3QuaRiLxk+jDWOR1MekYQrlytiXxC1RyfbdsZkS5pvKAzCCr031xHixZwpnsYNT5xysdFHQaYsA==", "dependencies": { - "@babel/runtime": "^7.1.2", + "@babel/runtime": "^7.12.13", "history": "^4.9.0", "hoist-non-react-statics": "^3.1.0", "loose-envify": "^1.3.1", - "mini-create-react-context": "^0.4.0", "path-to-regexp": "^1.7.0", "prop-types": "^15.6.2", "react-is": "^16.6.0", @@ -11482,15 +10668,15 @@ } }, "node_modules/react-router-dom": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-5.2.0.tgz", - "integrity": "sha512-gxAmfylo2QUjcwxI63RhQ5G85Qqt4voZpUXSEqCwykV0baaOTQDR1f0PmY8AELqIyVc0NEZUj0Gov5lNGcXgsA==", + "version": "5.3.4", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-5.3.4.tgz", + "integrity": "sha512-m4EqFMHv/Ih4kpcBCONHbkT68KoAeHN4p3lAGoNryfHi0dMy0kCzEZakiKRsvg5wHZ/JLrLW8o8KomWiz/qbYQ==", "dependencies": { - "@babel/runtime": "^7.1.2", + "@babel/runtime": "^7.12.13", "history": "^4.9.0", "loose-envify": "^1.3.1", "prop-types": "^15.6.2", - "react-router": "5.2.0", + "react-router": "5.3.4", "tiny-invariant": "^1.0.2", "tiny-warning": "^1.0.0" }, @@ -11501,7 +10687,7 @@ "node_modules/react-router/node_modules/isarray": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" + "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==" }, "node_modules/react-router/node_modules/path-to-regexp": { "version": "1.8.0", @@ -11511,28 +10697,20 @@ "isarray": "0.0.1" } }, - "node_modules/react-side-effect": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/react-side-effect/-/react-side-effect-2.1.1.tgz", - "integrity": "sha512-2FoTQzRNTncBVtnzxFOk2mCpcfxQpenBMbk5kSVBg5UcPqV9fRbgY2zhb7GTWWOlpFmAxhClBDlIq8Rsubz1yQ==", - "peerDependencies": { - "react": "^16.3.0 || ^17.0.0" - } - }, "node_modules/react-textarea-autosize": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/react-textarea-autosize/-/react-textarea-autosize-8.3.2.tgz", - "integrity": "sha512-JrMWVgQSaExQByP3ggI1eA8zF4mF0+ddVuX7acUeK2V7bmrpjVOY72vmLz2IXFJSAXoY3D80nEzrn0GWajWK3Q==", + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/react-textarea-autosize/-/react-textarea-autosize-8.4.0.tgz", + "integrity": "sha512-YrTFaEHLgJsi8sJVYHBzYn+mkP3prGkmP2DKb/tm0t7CLJY5t1Rxix8070LAKb0wby7bl/lf2EeHkuMihMZMwQ==", "dependencies": { "@babel/runtime": "^7.10.2", - "use-composed-ref": "^1.0.0", - "use-latest": "^1.0.0" + "use-composed-ref": "^1.3.0", + "use-latest": "^1.2.1" }, "engines": { "node": ">=10" }, "peerDependencies": { - "react": "^16.8.0 || ^17.0.0" + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" } }, "node_modules/readable-stream": { @@ -11549,9 +10727,9 @@ } }, "node_modules/readdirp": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", - "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "dependencies": { "picomatch": "^2.2.1" }, @@ -11560,14 +10738,14 @@ } }, "node_modules/reading-time": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/reading-time/-/reading-time-1.3.0.tgz", - "integrity": "sha512-RJ8J5O6UvrclfZpcPSPuKusrdRfoY7uXXoYOOdeswZNtSkQaewT3919yz6RyloDBR+iwcUyz5zGOUjhgvfuv3g==" + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/reading-time/-/reading-time-1.5.0.tgz", + "integrity": "sha512-onYyVhBNr4CmAxFsKS7bz+uTLRakypIe4R+5A824vBSkQy/hB3fZepoVEf8OVAxzLvK+H/jm9TzpI3ETSm64Kg==" }, "node_modules/rechoir": { "version": "0.6.2", "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", + "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==", "dependencies": { "resolve": "^1.1.6" }, @@ -11576,14 +10754,14 @@ } }, "node_modules/recursive-readdir": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.2.tgz", - "integrity": "sha512-nRCcW9Sj7NuZwa2XvH9co8NPeXUBhZP7CRKJtU+cS6PW9FpCIFoI5ib0NT1ZrbNuPoRy0ylyCaUL8Gih4LSyFg==", + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.3.tgz", + "integrity": "sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA==", "dependencies": { - "minimatch": "3.0.4" + "minimatch": "^3.0.5" }, "engines": { - "node": ">=0.10.0" + "node": ">=6.0.0" } }, "node_modules/regenerate": { @@ -11592,71 +10770,37 @@ "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==" }, "node_modules/regenerate-unicode-properties": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz", - "integrity": "sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA==", + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz", + "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==", "dependencies": { - "regenerate": "^1.4.0" + "regenerate": "^1.4.2" }, "engines": { "node": ">=4" } }, "node_modules/regenerator-runtime": { - "version": "0.13.7", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", - "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==" + "version": "0.13.10", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.10.tgz", + "integrity": "sha512-KepLsg4dU12hryUO7bp/axHAKvwGOCV0sGloQtpagJ12ai+ojVDqkeGSiRX1zlq+kjIMZ1t7gpze+26QqtdGqw==" }, "node_modules/regenerator-transform": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz", - "integrity": "sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==", + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.0.tgz", + "integrity": "sha512-LsrGtPmbYg19bcPHwdtmXwbW+TqNvtY4riE3P83foeHRroMbH6/2ddFBfab3t7kbzc7v7p4wbkIecHImqt0QNg==", "dependencies": { "@babel/runtime": "^7.8.4" } }, - "node_modules/regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", - "dependencies": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/regex-not/node_modules/extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/regex-not/node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/regexp.prototype.flags": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz", - "integrity": "sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA==", + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", + "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3" + "define-properties": "^1.1.3", + "functions-have-names": "^1.2.2" }, "engines": { "node": ">= 0.4" @@ -11666,9 +10810,9 @@ } }, "node_modules/regexpp": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz", - "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", "engines": { "node": ">=8" }, @@ -11677,27 +10821,27 @@ } }, "node_modules/regexpu-core": { - "version": "4.7.1", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.1.tgz", - "integrity": "sha512-ywH2VUraA44DZQuRKzARmw6S66mr48pQVva4LBeRhcOltJ6hExvWly5ZjFLYo67xbIxb6W1q4bAGtgfEl20zfQ==", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.2.1.tgz", + "integrity": "sha512-HrnlNtpvqP1Xkb28tMhBUO2EbyUHdQlsnlAhzWcwHy8WJR53UWr7/MAvqrsQKMbV4qdpv03oTMG8iIhfsPFktQ==", "dependencies": { - "regenerate": "^1.4.0", - "regenerate-unicode-properties": "^8.2.0", - "regjsgen": "^0.5.1", - "regjsparser": "^0.6.4", - "unicode-match-property-ecmascript": "^1.0.4", - "unicode-match-property-value-ecmascript": "^1.2.0" + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.1.0", + "regjsgen": "^0.7.1", + "regjsparser": "^0.9.1", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.0.0" }, "engines": { "node": ">=4" } }, "node_modules/registry-auth-token": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.1.tgz", - "integrity": "sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw==", + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.2.tgz", + "integrity": "sha512-PC5ZysNb42zpFME6D/XlIgtNGdTl8bBOCw90xQLVMpzuuubJKYDWFAEuUNc+Cn8Z8724tg2SDhDRrkVEsqfDMg==", "dependencies": { - "rc": "^1.2.8" + "rc": "1.2.8" }, "engines": { "node": ">=6.0.0" @@ -11715,14 +10859,14 @@ } }, "node_modules/regjsgen": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.2.tgz", - "integrity": "sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==" + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.7.1.tgz", + "integrity": "sha512-RAt+8H2ZEzHeYWxZ3H2z6tF18zyyOnlcdaafLrm21Bguj7uZy6ULibiAFdXEtKQY4Sy7wDTwDiOazasMLc4KPA==" }, "node_modules/regjsparser": { - "version": "0.6.9", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.9.tgz", - "integrity": "sha512-ZqbNRz1SNjLAiYuwY0zoXW8Ne675IX5q+YHioAGbCw4X96Mjl2+dcX9B2ciaeyYjViDAfvIjFpQjJgLttTEERQ==", + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", + "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", "dependencies": { "jsesc": "~0.5.0" }, @@ -11733,7 +10877,7 @@ "node_modules/regjsparser/node_modules/jsesc": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", + "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", "bin": { "jsesc": "bin/jsesc" } @@ -11771,87 +10915,11 @@ "node_modules/relateurl": { "version": "0.2.7", "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", - "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=", + "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==", "engines": { "node": ">= 0.10" } }, - "node_modules/remark-admonitions": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/remark-admonitions/-/remark-admonitions-1.2.1.tgz", - "integrity": "sha512-Ji6p68VDvD+H1oS95Fdx9Ar5WA2wcDA4kwrrhVU7fGctC6+d3uiMICu7w7/2Xld+lnU7/gi+432+rRbup5S8ow==", - "dependencies": { - "rehype-parse": "^6.0.2", - "unified": "^8.4.2", - "unist-util-visit": "^2.0.1" - } - }, - "node_modules/remark-admonitions/node_modules/hast-util-from-parse5": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-5.0.3.tgz", - "integrity": "sha512-gOc8UB99F6eWVWFtM9jUikjN7QkWxB3nY0df5Z0Zq1/Nkwl5V4hAAsl0tmwlgWl/1shlTF8DnNYLO8X6wRV9pA==", - "dependencies": { - "ccount": "^1.0.3", - "hastscript": "^5.0.0", - "property-information": "^5.0.0", - "web-namespaces": "^1.1.2", - "xtend": "^4.0.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-admonitions/node_modules/hastscript": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-5.1.2.tgz", - "integrity": "sha512-WlztFuK+Lrvi3EggsqOkQ52rKbxkXL3RwB6t5lwoa8QLMemoWfBuL43eDrwOamJyR7uKQKdmKYaBH1NZBiIRrQ==", - "dependencies": { - "comma-separated-tokens": "^1.0.0", - "hast-util-parse-selector": "^2.0.0", - "property-information": "^5.0.0", - "space-separated-tokens": "^1.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-admonitions/node_modules/parse5": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz", - "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==" - }, - "node_modules/remark-admonitions/node_modules/rehype-parse": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/rehype-parse/-/rehype-parse-6.0.2.tgz", - "integrity": "sha512-0S3CpvpTAgGmnz8kiCyFLGuW5yA4OQhyNTm/nwPopZ7+PI11WnGl1TTWTGv/2hPEe/g2jRLlhVVSsoDH8waRug==", - "dependencies": { - "hast-util-from-parse5": "^5.0.0", - "parse5": "^5.0.0", - "xtend": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-admonitions/node_modules/unified": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/unified/-/unified-8.4.2.tgz", - "integrity": "sha512-JCrmN13jI4+h9UAyKEoGcDZV+i1E7BLFuG7OsaDvTXI5P0qhHX+vZO/kOhz9jn8HGENDKbwSeB0nVOg4gVStGA==", - "dependencies": { - "bail": "^1.0.0", - "extend": "^3.0.0", - "is-plain-obj": "^2.0.0", - "trough": "^1.0.0", - "vfile": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, "node_modules/remark-emoji": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/remark-emoji/-/remark-emoji-2.2.0.tgz", @@ -11966,6 +11034,14 @@ "semver": "bin/semver" } }, + "node_modules/remark-mdx/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/remark-parse": { "version": "8.0.3", "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-8.0.3.tgz", @@ -12005,97 +11081,107 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=" - }, "node_modules/renderkid": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.5.tgz", - "integrity": "sha512-ccqoLg+HLOHq1vdfYNm4TBeaCDIi1FLt3wGojTDSvdewUv65oTmI3cnT2E4hRjl1gzKZIPK+KZrXzlUYKnR+vQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-3.0.0.tgz", + "integrity": "sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==", "dependencies": { - "css-select": "^2.0.2", - "dom-converter": "^0.2", - "htmlparser2": "^3.10.1", - "lodash": "^4.17.20", - "strip-ansi": "^3.0.0" - } - }, - "node_modules/renderkid/node_modules/ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "engines": { - "node": ">=0.10.0" + "css-select": "^4.1.3", + "dom-converter": "^0.2.0", + "htmlparser2": "^6.1.0", + "lodash": "^4.17.21", + "strip-ansi": "^6.0.1" } }, "node_modules/renderkid/node_modules/css-select": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz", - "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", + "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", "dependencies": { "boolbase": "^1.0.0", - "css-what": "^3.2.1", - "domutils": "^1.7.0", - "nth-check": "^1.0.2" - } - }, - "node_modules/renderkid/node_modules/css-what": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.4.2.tgz", - "integrity": "sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==", - "engines": { - "node": ">= 6" + "css-what": "^6.0.1", + "domhandler": "^4.3.1", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" }, "funding": { "url": "https://github.com/sponsors/fb55" } }, - "node_modules/renderkid/node_modules/domutils": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", - "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", + "node_modules/renderkid/node_modules/dom-serializer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", "dependencies": { - "dom-serializer": "0", - "domelementtype": "1" + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" } }, - "node_modules/renderkid/node_modules/strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "node_modules/renderkid/node_modules/domhandler": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", "dependencies": { - "ansi-regex": "^2.0.0" + "domelementtype": "^2.2.0" }, "engines": { - "node": ">=0.10.0" + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" } }, - "node_modules/repeat-element": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", - "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==", - "engines": { - "node": ">=0.10.0" + "node_modules/renderkid/node_modules/domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "dependencies": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/renderkid/node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/renderkid/node_modules/htmlparser2": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", + "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0", + "domutils": "^2.5.2", + "entities": "^2.0.0" } }, "node_modules/repeat-string": { "version": "1.6.1", "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", "engines": { "node": ">=0.10" } }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/require-from-string": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", @@ -12107,52 +11193,32 @@ "node_modules/require-like": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/require-like/-/require-like-0.1.2.tgz", - "integrity": "sha1-rW8wwTvs15cBDEaK+ndcDAprR/o=", + "integrity": "sha512-oyrU88skkMtDdauHDuKVrgR+zuItqr6/c//FXzvmxRGMexSDc6hNvJInGW3LL46n+8b50RykrvwSUIIQH2LQ5A==", "engines": { "node": "*" } }, - "node_modules/require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" - }, "node_modules/requires-port": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=" + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==" }, "node_modules/resolve": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", - "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", "dependencies": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/resolve-cwd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz", - "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", - "dependencies": { - "resolve-from": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/resolve-cwd/node_modules/resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", - "engines": { - "node": ">=4" - } - }, "node_modules/resolve-from": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", @@ -12166,32 +11232,18 @@ "resolved": "https://registry.npmjs.org/resolve-pathname/-/resolve-pathname-3.0.0.tgz", "integrity": "sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng==" }, - "node_modules/resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", - "deprecated": "https://github.com/lydell/resolve-url#deprecated" - }, "node_modules/responselike": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", - "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", + "integrity": "sha512-/Fpe5guzJk1gPqdJLJR5u7eG/gNY4nImjbRDaVWVMRhne55TCmj2i9Q+54PBRfatRC8v/rIiv9BN0pMd9OV5EQ==", "dependencies": { "lowercase-keys": "^1.0.0" } }, - "node_modules/ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", - "engines": { - "node": ">=0.12" - } - }, "node_modules/retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", - "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=", + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", "engines": { "node": ">= 4" } @@ -12205,16 +11257,6 @@ "node": ">=0.10.0" } }, - "node_modules/rgb-regex": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/rgb-regex/-/rgb-regex-1.0.1.tgz", - "integrity": "sha1-wODWiC3w4jviVKR16O3UGRX+rrE=" - }, - "node_modules/rgba-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/rgba-regex/-/rgba-regex-1.0.0.tgz", - "integrity": "sha1-QzdOLiyglosO8VI0YLfXMP8i7rM=" - }, "node_modules/rimraf": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", @@ -12230,26 +11272,22 @@ } }, "node_modules/rtl-detect": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/rtl-detect/-/rtl-detect-1.0.3.tgz", - "integrity": "sha512-2sMcZO60tL9YDEFe24gqddg3hJ+xSmJFN8IExcQUxeHxQzydQrN6GHPL+yAWgzItXSI7es53hcZC9pJneuZDKA==" + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/rtl-detect/-/rtl-detect-1.0.4.tgz", + "integrity": "sha512-EBR4I2VDSSYr7PkBmFy04uhycIpDKp+21p/jARYXlCSjQksTBQcJ0HFUPOO79EPPH5JS6VAhiIQbycf0O3JAxQ==" }, "node_modules/rtlcss": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/rtlcss/-/rtlcss-3.1.2.tgz", - "integrity": "sha512-b04YSX37siupPOWUEguEBReWX2w4QT89C0PI9g2JzZycbq7zrgPmTr1DA1pizSWpKRFdCjjnrx/SSvU4fOHmGg==", + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/rtlcss/-/rtlcss-3.5.0.tgz", + "integrity": "sha512-wzgMaMFHQTnyi9YOwsx9LjOxYXJPzS8sYnFaKm6R5ysvTkwzHiB0vxnbHwchHQT65PTdBjDG21/kQBWI7q9O7A==", "dependencies": { - "chalk": "^4.1.0", "find-up": "^5.0.0", - "mkdirp": "^1.0.4", - "postcss": "^8.2.4", + "picocolors": "^1.0.0", + "postcss": "^8.3.11", "strip-json-comments": "^3.1.1" }, "bin": { "rtlcss": "bin/rtlcss.js" - }, - "peerDependencies": { - "postcss": "^8.2.4" } }, "node_modules/rtlcss/node_modules/find-up": { @@ -12281,6 +11319,20 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/rtlcss/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/rtlcss/node_modules/p-locate": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", @@ -12318,32 +11370,43 @@ } }, "node_modules/rxjs": { - "version": "6.6.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", - "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.0.tgz", + "integrity": "sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg==", "dependencies": { - "tslib": "^1.9.0" - }, - "engines": { - "npm": ">=2.0.0" + "tslib": "^2.1.0" } }, - "node_modules/rxjs/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - }, "node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] }, - "node_modules/safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "node_modules/safe-regex-test": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", + "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", "dependencies": { - "ret": "~0.1.10" + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "is-regex": "^1.1.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/safer-buffer": { @@ -12394,29 +11457,26 @@ "node": ">=4" } }, - "node_modules/select": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/select/-/select-1.1.2.tgz", - "integrity": "sha1-DnNQrN7ICxEIUoeG7B1EGNEbOW0=", - "optional": true - }, "node_modules/select-hose": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", - "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=" + "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==" }, "node_modules/selfsigned": { - "version": "1.10.11", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.11.tgz", - "integrity": "sha512-aVmbPOfViZqOZPgRBT0+3u4yZFHpmnIghLMlAcb5/xhp5ZtB/RVnKhz5vl2M32CLXAqR4kha9zfhNg0Lf/sxKA==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.1.1.tgz", + "integrity": "sha512-GSL3aowiF7wa/WtSFwnUrludWFoNhftq8bUkH9pkzjpN2XSPOAYEgg6e0sS9s0rZwgJzJiQRPU18A6clnoW5wQ==", "dependencies": { - "node-forge": "^0.10.0" + "node-forge": "^1" + }, + "engines": { + "node": ">=10" } }, "node_modules/semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", "dependencies": { "lru-cache": "^6.0.0" }, @@ -12447,23 +11507,23 @@ } }, "node_modules/send": { - "version": "0.17.1", - "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", - "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", "dependencies": { "debug": "2.6.9", - "depd": "~1.1.2", - "destroy": "~1.0.4", + "depd": "2.0.0", + "destroy": "1.2.0", "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "etag": "~1.8.1", "fresh": "0.5.2", - "http-errors": "~1.7.2", + "http-errors": "2.0.0", "mime": "1.6.0", - "ms": "2.1.1", - "on-finished": "~2.3.0", + "ms": "2.1.3", + "on-finished": "2.4.1", "range-parser": "~1.2.1", - "statuses": "~1.5.0" + "statuses": "2.0.1" }, "engines": { "node": ">= 0.8.0" @@ -12480,17 +11540,17 @@ "node_modules/send/node_modules/debug/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, "node_modules/send/node_modules/ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" }, "node_modules/serialize-javascript": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz", - "integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", + "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", "dependencies": { "randombytes": "^2.1.0" } @@ -12510,18 +11570,10 @@ "range-parser": "1.2.0" } }, - "node_modules/serve-handler/node_modules/bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", - "engines": { - "node": ">= 0.8" - } - }, "node_modules/serve-handler/node_modules/content-disposition": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", - "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=", + "integrity": "sha512-kRGRZw3bLlFISDBgwTSA1TMBFN6J6GWDeubmDE3AF+3+yXL8hTWv8r5rkLbqYXY4RjPk/EzHnClI3zQf1cFmHA==", "engines": { "node": ">= 0.6" } @@ -12545,6 +11597,17 @@ "node": ">= 0.6" } }, + "node_modules/serve-handler/node_modules/minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, "node_modules/serve-handler/node_modules/path-to-regexp": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-2.2.1.tgz", @@ -12553,7 +11616,7 @@ "node_modules/serve-handler/node_modules/range-parser": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", - "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=", + "integrity": "sha512-kA5WQoNVo4t9lNx2kQNFCxKeBl5IbbSNBl1M/tLkw9WCn+hxNBAW5Qh8gdhs63CJnhjJ2zQWFoqPJP2sK1AV5A==", "engines": { "node": ">= 0.6" } @@ -12561,7 +11624,7 @@ "node_modules/serve-index": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", + "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", "dependencies": { "accepts": "~1.3.4", "batch": "0.6.1", @@ -12583,10 +11646,18 @@ "ms": "2.0.0" } }, + "node_modules/serve-index/node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "engines": { + "node": ">= 0.6" + } + }, "node_modules/serve-index/node_modules/http-errors": { "version": "1.6.3", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", "dependencies": { "depd": "~1.1.2", "inherits": "2.0.3", @@ -12600,60 +11671,49 @@ "node_modules/serve-index/node_modules/inherits": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==" }, "node_modules/serve-index/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, "node_modules/serve-index/node_modules/setprototypeof": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" }, + "node_modules/serve-index/node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", + "engines": { + "node": ">= 0.6" + } + }, "node_modules/serve-static": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", - "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", "dependencies": { "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "parseurl": "~1.3.3", - "send": "0.17.1" + "send": "0.18.0" }, "engines": { "node": ">= 0.8.0" } }, - "node_modules/set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" - }, - "node_modules/set-value": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", - "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", - "dependencies": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/setimmediate": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==" }, "node_modules/setprototypeof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", - "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" }, "node_modules/shallow-clone": { "version": "3.0.1", @@ -12666,6 +11726,11 @@ "node": ">=8" } }, + "node_modules/shallowequal": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz", + "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==" + }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -12686,14 +11751,17 @@ } }, "node_modules/shell-quote": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.2.tgz", - "integrity": "sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg==" + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.4.tgz", + "integrity": "sha512-8o/QEhSSRb1a5i7TFR0iM4G16Z0vYB2OQVs4G3aAFXjn3T6yEx8AZxy1PgDF7I00LZHYA3WxaSYIf5e5sAX8Rw==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/shelljs": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.4.tgz", - "integrity": "sha512-7gk3UZ9kOfPLIAbslLzyWeGiEqx9e3rxwZM0KE6EL8GlGwjym9Mrlx5/p33bWTu9YG6vcS4MBxYZDHYr5lr8BQ==", + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", + "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", "dependencies": { "glob": "^7.0.0", "interpret": "^1.0.0", @@ -12720,58 +11788,34 @@ } }, "node_modules/signal-exit": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", - "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==" - }, - "node_modules/simple-swizzle": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", - "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", - "dependencies": { - "is-arrayish": "^0.3.1" - } - }, - "node_modules/simple-swizzle/node_modules/is-arrayish": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", - "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" }, "node_modules/sirv": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/sirv/-/sirv-1.0.11.tgz", - "integrity": "sha512-SR36i3/LSWja7AJNRBz4fF/Xjpn7lQFI30tZ434dIy+bitLYSP+ZEenHg36i23V2SGEz+kqjksg0uOGZ5LPiqg==", + "version": "1.0.19", + "resolved": "https://registry.npmjs.org/sirv/-/sirv-1.0.19.tgz", + "integrity": "sha512-JuLThK3TnZG1TAKDwNIqNq6QA2afLOCcm+iE8D1Kj3GA40pSPsxQjjJl0J8X3tsR7T+CP1GavpzLwYkgVLWrZQ==", "dependencies": { - "@polka/url": "^1.0.0-next.9", - "mime": "^2.3.1", + "@polka/url": "^1.0.0-next.20", + "mrmime": "^1.0.0", "totalist": "^1.0.0" }, "engines": { "node": ">= 10" } }, - "node_modules/sirv/node_modules/mime": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz", - "integrity": "sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4.0.0" - } - }, "node_modules/sisteransi": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==" }, "node_modules/sitemap": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/sitemap/-/sitemap-6.4.0.tgz", - "integrity": "sha512-DoPKNc2/apQZTUnfiOONWctwq7s6dZVspxAZe2VPMNtoqNq7HgXRvlRnbIpKjf+8+piQdWncwcy+YhhTGY5USQ==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/sitemap/-/sitemap-7.1.1.tgz", + "integrity": "sha512-mK3aFtjz4VdJN0igpIJrinf3EO8U8mxOPsTBzSsy06UtjZQJ3YY3o3Xa7zSc5nMqcMrRwlChHZ18Kxg0caiPBg==", "dependencies": { - "@types/node": "^14.14.28", + "@types/node": "^17.0.5", "@types/sax": "^1.2.1", "arg": "^5.0.0", "sax": "^1.2.4" @@ -12780,14 +11824,14 @@ "sitemap": "dist/cli.js" }, "engines": { - "node": ">=10.3.0", + "node": ">=12.0.0", "npm": ">=5.6.0" } }, "node_modules/sitemap/node_modules/@types/node": { - "version": "14.14.45", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.45.tgz", - "integrity": "sha512-DssMqTV9UnnoxDWu959sDLZzfvqCF0qDNRjaWeYSui9xkFe61kKo4l1TWNTQONpuXEm+gLMRvdlzvNHBamzmEw==" + "version": "17.0.45", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.45.tgz", + "integrity": "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==" }, "node_modules/slash": { "version": "3.0.0", @@ -12813,262 +11857,56 @@ "url": "https://github.com/chalk/slice-ansi?sponsor=1" } }, - "node_modules/snapdragon": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "node_modules/sockjs": { + "version": "0.3.24", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", + "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", "dependencies": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" - }, - "engines": { - "node": ">=0.10.0" + "faye-websocket": "^0.11.3", + "uuid": "^8.3.2", + "websocket-driver": "^0.7.4" } }, - "node_modules/snapdragon-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", - "dependencies": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" - }, + "node_modules/sort-css-media-queries": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/sort-css-media-queries/-/sort-css-media-queries-2.1.0.tgz", + "integrity": "sha512-IeWvo8NkNiY2vVYdPa27MCQiR0MN0M80johAYFVxWWXQ44KU84WNxjslwBHmc/7ZL2ccwkM7/e6S5aiKZXm7jA==", "engines": { - "node": ">=0.10.0" + "node": ">= 6.3.0" } }, - "node_modules/snapdragon-node/node_modules/define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dependencies": { - "is-descriptor": "^1.0.0" - }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "engines": { "node": ">=0.10.0" } }, - "node_modules/snapdragon-util": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", - "dependencies": { - "kind-of": "^3.2.0" - }, + "node_modules/source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", "engines": { "node": ">=0.10.0" } }, - "node_modules/snapdragon-util/node_modules/is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" - }, - "node_modules/snapdragon-util/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" } }, - "node_modules/snapdragon/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/snapdragon/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/is-accessor-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" - }, - "node_modules/snapdragon/node_modules/is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/is-data-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "node_modules/sockjs": { - "version": "0.3.21", - "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.21.tgz", - "integrity": "sha512-DhbPFGpxjc6Z3I+uX07Id5ZO2XwYsWOrYjaSeieES78cq+JaJvVe5q/m1uvjIQhXinhIeCFRH6JgXe+mvVMyXw==", - "dependencies": { - "faye-websocket": "^0.11.3", - "uuid": "^3.4.0", - "websocket-driver": "^0.7.4" - } - }, - "node_modules/sockjs-client": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.5.1.tgz", - "integrity": "sha512-VnVAb663fosipI/m6pqRXakEOw7nvd7TUgdr3PlR/8V2I95QIdwT8L4nMxhyU8SmDBHYXU1TOElaKOmKLfYzeQ==", - "dependencies": { - "debug": "^3.2.6", - "eventsource": "^1.0.7", - "faye-websocket": "^0.11.3", - "inherits": "^2.0.4", - "json3": "^3.3.3", - "url-parse": "^1.5.1" - } - }, - "node_modules/sockjs-client/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/sort-css-media-queries": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/sort-css-media-queries/-/sort-css-media-queries-1.5.4.tgz", - "integrity": "sha512-YP5W/h4Sid/YP7Lp87ejJ5jP13/Mtqt2vx33XyhO+IAugKlufRPbOrPlIiEUuxmpNBSBd3EeeQpFhdu3RfI2Ag==", - "engines": { - "node": ">= 6.3.0" - } - }, - "node_modules/source-list-map": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", - "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==" - }, - "node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-resolve": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", - "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", - "dependencies": { - "atob": "^2.1.2", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" - } - }, - "node_modules/source-map-support": { - "version": "0.5.19", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", - "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/source-map-support/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-url": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", - "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==" - }, - "node_modules/space-separated-tokens": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz", - "integrity": "sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "node_modules/space-separated-tokens": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz", + "integrity": "sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, "node_modules/spdy": { @@ -13099,49 +11937,16 @@ "wbuf": "^1.7.3" } }, - "node_modules/split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", - "dependencies": { - "extend-shallow": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/split-string/node_modules/extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/split-string/node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" }, "node_modules/stable": { "version": "0.1.8", "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", - "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==" + "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", + "deprecated": "Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility" }, "node_modules/state-toggle": { "version": "1.0.3", @@ -13152,113 +11957,12 @@ "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", - "dependencies": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/is-accessor-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" - }, - "node_modules/static-extend/node_modules/is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/is-data-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", "engines": { - "node": ">= 0.6" - } - }, - "node_modules/std-env": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/std-env/-/std-env-2.3.0.tgz", - "integrity": "sha512-4qT5B45+Kjef2Z6pE0BkskzsH0GO7GrND0wGlTM1ioUe3v0dGYx9ZJH0Aro/YyA8fqQ5EyIKDRjZojJYMFTflw==", - "dependencies": { - "ci-info": "^3.0.0" + "node": ">= 0.8" } }, "node_modules/string_decoder": { @@ -13269,54 +11973,31 @@ "safe-buffer": "~5.2.0" } }, - "node_modules/string_decoder/node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, "node_modules/string-width": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", - "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" + "strip-ansi": "^6.0.1" }, "engines": { "node": ">=8" } }, - "node_modules/string-width/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, "node_modules/string.prototype.matchall": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.4.tgz", - "integrity": "sha512-pknFIWVachNcyqRfaQSeu/FUfpvJTe4uskUSZ9Wc1RijsPuzbZ8TyYT8WCNnntCjUEqQ3vUHMAfVj2+wLAisPQ==", + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.7.tgz", + "integrity": "sha512-f48okCX7JiwVi1NXCVWcFnZgADDC/n2vePlQ/KUCNqCikLLilQvwjMO8+BHVKvgzH0JB0J9LEPgxOGT02RoETg==", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2", - "has-symbols": "^1.0.1", + "es-abstract": "^1.19.1", + "get-intrinsic": "^1.1.1", + "has-symbols": "^1.0.3", "internal-slot": "^1.0.3", - "regexp.prototype.flags": "^1.3.1", + "regexp.prototype.flags": "^1.4.1", "side-channel": "^1.0.4" }, "funding": { @@ -13324,24 +12005,26 @@ } }, "node_modules/string.prototype.trimend": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", - "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz", + "integrity": "sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==", "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3" + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/string.prototype.trimstart": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", - "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz", + "integrity": "sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==", "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3" + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -13361,11 +12044,11 @@ } }, "node_modules/strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dependencies": { - "ansi-regex": "^5.0.0" + "ansi-regex": "^5.0.1" }, "engines": { "node": ">=8" @@ -13374,15 +12057,7 @@ "node_modules/strip-bom-string": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz", - "integrity": "sha1-5SEekiQ2n7uB1jOi8ABE3IztrZI=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/strip-eof": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", + "integrity": "sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==", "engines": { "node": ">=0.10.0" } @@ -13415,18 +12090,18 @@ } }, "node_modules/stylehacks": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.0.0.tgz", - "integrity": "sha512-QOWm6XivDLb+fqffTZP8jrmPmPITVChl2KCY2R05nsCWwLi3VGhCdVc3IVGNwd1zzTt1jPd67zIKjpQfxzQZeA==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.1.1.tgz", + "integrity": "sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw==", "dependencies": { - "browserslist": "^4.16.0", + "browserslist": "^4.21.4", "postcss-selector-parser": "^6.0.4" }, "engines": { "node": "^10 || ^12 || >=14.0" }, "peerDependencies": { - "postcss": "^8.2.1" + "postcss": "^8.2.15" } }, "node_modules/supports-color": { @@ -13440,183 +12115,132 @@ "node": ">=8" } }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/svg-parser": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/svg-parser/-/svg-parser-2.0.4.tgz", "integrity": "sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==" }, "node_modules/svgo": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz", - "integrity": "sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==", - "dependencies": { - "chalk": "^2.4.1", - "coa": "^2.0.2", - "css-select": "^2.0.0", - "css-select-base-adapter": "^0.1.1", - "css-tree": "1.0.0-alpha.37", - "csso": "^4.0.2", - "js-yaml": "^3.13.1", - "mkdirp": "~0.5.1", - "object.values": "^1.1.0", - "sax": "~1.2.4", - "stable": "^0.1.8", - "unquote": "~1.1.1", - "util.promisify": "~1.0.0" + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz", + "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==", + "dependencies": { + "@trysound/sax": "0.2.0", + "commander": "^7.2.0", + "css-select": "^4.1.3", + "css-tree": "^1.1.3", + "csso": "^4.2.0", + "picocolors": "^1.0.0", + "stable": "^0.1.8" }, "bin": { "svgo": "bin/svgo" }, "engines": { - "node": ">=4.0.0" + "node": ">=10.13.0" } }, - "node_modules/svgo/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dependencies": { - "color-convert": "^1.9.0" - }, + "node_modules/svgo/node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", "engines": { - "node": ">=4" + "node": ">= 10" } }, - "node_modules/svgo/node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/svgo/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/svgo/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/svgo/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" - }, "node_modules/svgo/node_modules/css-select": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz", - "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", + "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", "dependencies": { "boolbase": "^1.0.0", - "css-what": "^3.2.1", - "domutils": "^1.7.0", - "nth-check": "^1.0.2" - } - }, - "node_modules/svgo/node_modules/css-what": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.4.2.tgz", - "integrity": "sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==", - "engines": { - "node": ">= 6" + "css-what": "^6.0.1", + "domhandler": "^4.3.1", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" }, "funding": { "url": "https://github.com/sponsors/fb55" } }, - "node_modules/svgo/node_modules/domutils": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", - "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", + "node_modules/svgo/node_modules/dom-serializer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", "dependencies": { - "dom-serializer": "0", - "domelementtype": "1" - } - }, - "node_modules/svgo/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/svgo/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "engines": { - "node": ">=4" + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" } }, - "node_modules/svgo/node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "node_modules/svgo/node_modules/domhandler": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" + "domelementtype": "^2.2.0" }, - "bin": { - "js-yaml": "bin/js-yaml.js" + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" } }, - "node_modules/svgo/node_modules/mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "node_modules/svgo/node_modules/domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", "dependencies": { - "minimist": "^1.2.5" + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" }, - "bin": { - "mkdirp": "bin/cmd.js" + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" } }, - "node_modules/svgo/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" + "node_modules/svgo/node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" } }, "node_modules/table": { - "version": "6.7.1", - "resolved": "https://registry.npmjs.org/table/-/table-6.7.1.tgz", - "integrity": "sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg==", + "version": "6.8.0", + "resolved": "https://registry.npmjs.org/table/-/table-6.8.0.tgz", + "integrity": "sha512-s/fitrbVeEyHKFa7mFdkuQMWlH1Wgw/yEXMt5xACT4ZpzWFluehAxRtUUQKPuWhaLAWhFcVx6w3oC8VKaUfPGA==", "dependencies": { "ajv": "^8.0.1", - "lodash.clonedeep": "^4.5.0", "lodash.truncate": "^4.4.2", "slice-ansi": "^4.0.0", - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0" + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" }, "engines": { "node": ">=10.0.0" } }, "node_modules/table/node_modules/ajv": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.3.0.tgz", - "integrity": "sha512-RYE7B5An83d7eWnDR8kbdaIFqmKCNsP16ay1hDbJEU+sa0e3H9SebskCt0Uufem6cfAVu7Col6ubcn/W+Sm8/Q==", + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", + "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", "dependencies": { "fast-deep-equal": "^3.1.1", "json-schema-traverse": "^1.0.0", @@ -13634,40 +12258,62 @@ "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" }, "node_modules/tapable": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.0.tgz", - "integrity": "sha512-FBk4IesMV1rBxX2tfiK8RAmogtWn53puLOQlvO8XuwlgxcYbP4mVPS9Ph4aeamSyyVjOl24aYWAuc8U5kCVwMw==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", "engines": { "node": ">=6" } }, + "node_modules/tar": { + "version": "4.4.19", + "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.19.tgz", + "integrity": "sha512-a20gEsvHnWe0ygBY8JbxoM4w3SJdhc7ZAuxkLqh+nvNQN2IOt0B5lLgM490X5Hl8FF0dl0tOf2ewFYAlIFgzVA==", + "dependencies": { + "chownr": "^1.1.4", + "fs-minipass": "^1.2.7", + "minipass": "^2.9.0", + "minizlib": "^1.3.3", + "mkdirp": "^0.5.5", + "safe-buffer": "^5.2.1", + "yallist": "^3.1.1" + }, + "engines": { + "node": ">=4.5" + } + }, + "node_modules/tar/node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" + }, "node_modules/terser": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.0.tgz", - "integrity": "sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==", + "version": "5.16.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.16.1.tgz", + "integrity": "sha512-xvQfyfA1ayT0qdK47zskQgRZeWLoOQ8JQ6mIgRGVNwZKdQMU+5FkCBjmv4QjcrTzyZquRw2FVtlJSRUmMKQslw==", "dependencies": { + "@jridgewell/source-map": "^0.3.2", + "acorn": "^8.5.0", "commander": "^2.20.0", - "source-map": "~0.6.1", - "source-map-support": "~0.5.12" + "source-map-support": "~0.5.20" }, "bin": { "terser": "bin/terser" }, "engines": { - "node": ">=6.0.0" + "node": ">=10" } }, "node_modules/terser-webpack-plugin": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.1.2.tgz", - "integrity": "sha512-6QhDaAiVHIQr5Ab3XUWZyDmrIPCHMiqJVljMF91YKyqwKkL5QHnYMkrMBy96v9Z7ev1hGhSEw1HQZc2p/s5Z8Q==", + "version": "5.3.6", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.6.tgz", + "integrity": "sha512-kfLFk+PoLUQIbLmB1+PZDMRSZS99Mp+/MHqDNmMA6tOItzRt+Npe3E+fsMs5mfcM0wCtrrdU387UnV+vnSffXQ==", "dependencies": { - "jest-worker": "^26.6.2", - "p-limit": "^3.1.0", - "schema-utils": "^3.0.0", - "serialize-javascript": "^5.0.1", - "source-map": "^0.6.1", - "terser": "^5.7.0" + "@jridgewell/trace-mapping": "^0.3.14", + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.0", + "terser": "^5.14.1" }, "engines": { "node": ">= 10.13.0" @@ -13678,19 +12324,38 @@ }, "peerDependencies": { "webpack": "^5.1.0" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "uglify-js": { + "optional": true + } } }, - "node_modules/terser-webpack-plugin/node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + "node_modules/terser-webpack-plugin/node_modules/jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } }, "node_modules/terser-webpack-plugin/node_modules/schema-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", - "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", "dependencies": { - "@types/json-schema": "^7.0.6", + "@types/json-schema": "^7.0.8", "ajv": "^6.12.5", "ajv-keywords": "^3.5.2" }, @@ -13702,36 +12367,29 @@ "url": "https://opencollective.com/webpack" } }, - "node_modules/terser-webpack-plugin/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/terser-webpack-plugin/node_modules/terser": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.7.0.tgz", - "integrity": "sha512-HP5/9hp2UaZt5fYkuhNBR8YyRcT8juw8+uFbAme53iN9hblvKnLUTKkmwJG6ocWpIKf8UK4DoeWG4ty0J6S6/g==", + "node_modules/terser-webpack-plugin/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dependencies": { - "commander": "^2.20.0", - "source-map": "~0.7.2", - "source-map-support": "~0.5.19" - }, - "bin": { - "terser": "bin/terser" + "has-flag": "^4.0.0" }, "engines": { "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "node_modules/terser-webpack-plugin/node_modules/terser/node_modules/source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "node_modules/terser/node_modules/acorn": { + "version": "8.8.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz", + "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==", + "bin": { + "acorn": "bin/acorn" + }, "engines": { - "node": ">= 8" + "node": ">=0.4.0" } }, "node_modules/terser/node_modules/commander": { @@ -13739,39 +12397,20 @@ "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" }, - "node_modules/terser/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=" + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==" }, "node_modules/thunky": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==" }, - "node_modules/timsort": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz", - "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=" - }, - "node_modules/tiny-emitter": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.1.0.tgz", - "integrity": "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==", - "optional": true - }, "node_modules/tiny-invariant": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.1.0.tgz", - "integrity": "sha512-ytxQvrb1cPc9WBEI/HSeYYoGD0kWnGEOR8RY6KomWLBVhqz0RgTwVO9dLrGz7dC+nN9llyI7OKAgRq8Vq4ZBSw==" + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.1.tgz", + "integrity": "sha512-AD5ih2NlSssTCwsMznbvwMZpJ1cbhkGd2uueNxzv2jDlEeZdU04JQfRnggJQ8DrcVBGjAsCKwFBbDlVNtEMlzw==" }, "node_modules/tiny-warning": { "version": "1.0.3", @@ -13781,38 +12420,11 @@ "node_modules/to-fast-properties": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", "engines": { "node": ">=4" } }, - "node_modules/to-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-object-path/node_modules/is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" - }, - "node_modules/to-object-path/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/to-readable-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", @@ -13821,20 +12433,6 @@ "node": ">=6" } }, - "node_modules/to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", - "dependencies": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -13846,33 +12444,10 @@ "node": ">=8.0" } }, - "node_modules/to-regex/node_modules/extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-regex/node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/toidentifier": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", - "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", "engines": { "node": ">=0.6" } @@ -13888,12 +12463,12 @@ "node_modules/tr46": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=" + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" }, "node_modules/trim": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/trim/-/trim-0.0.1.tgz", - "integrity": "sha1-WFhUf2spB1fulczMZm+1AITEYN0=" + "integrity": "sha512-YzQV+TZg4AxpKxaTHK3c3D+kRDCGVEE7LemdlQZoQXn0iennk10RsIoY6ikzAqJTc9Xjl9C1/waHom/J86ziAQ==" }, "node_modules/trim-trailing-lines": { "version": "1.1.4", @@ -13913,15 +12488,10 @@ "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/ts-essentials": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/ts-essentials/-/ts-essentials-2.0.12.tgz", - "integrity": "sha512-3IVX4nI6B5cc31/GFFE+i8ey/N2eA0CZDbo6n0yrz0zDX8ZJ8djmU1p+XRz7G3is0F3bB3pu2pAroFdAWQKU3w==" - }, "node_modules/tslib": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.2.0.tgz", - "integrity": "sha512-gS9GVHRU+RGn5KQM2rllAlR3dU6m7AcpJKdtH8gFvQiC4Otgk98XnmMU+nZenHt/+VhnBPWwgrJsyrdcw6i23w==" + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", + "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==" }, "node_modules/type-check": { "version": "0.4.0", @@ -13965,10 +12535,23 @@ "is-typedarray": "^1.0.0" } }, + "node_modules/typescript": { + "version": "4.9.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.4.tgz", + "integrity": "sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg==", + "peer": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, "node_modules/ua-parser-js": { - "version": "0.7.28", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.28.tgz", - "integrity": "sha512-6Gurc1n//gjp9eQNXjD9O3M/sMwVtN5S8Lv9bvOYBfKfDNiIIhqiyi01vMBO45u4zkDE420w/e0se7Vs+sIg+g==", + "version": "0.7.32", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.32.tgz", + "integrity": "sha512-f9BESNVhzlhEFf2CHMSj40NWOjYPl1YKYbrvIr/hFTDEmLq7SRbWvm7FcdcpCYT95zrOhC7gZSxjdnnTpBcwVw==", "funding": [ { "type": "opencollective", @@ -13984,13 +12567,13 @@ } }, "node_modules/unbox-primitive": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", - "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", "dependencies": { - "function-bind": "^1.1.1", - "has-bigints": "^1.0.1", - "has-symbols": "^1.0.2", + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", "which-boxed-primitive": "^1.0.2" }, "funding": { @@ -14011,37 +12594,37 @@ } }, "node_modules/unicode-canonical-property-names-ecmascript": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", - "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", + "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", "engines": { "node": ">=4" } }, "node_modules/unicode-match-property-ecmascript": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz", - "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", "dependencies": { - "unicode-canonical-property-names-ecmascript": "^1.0.4", - "unicode-property-aliases-ecmascript": "^1.0.4" + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" }, "engines": { "node": ">=4" } }, "node_modules/unicode-match-property-value-ecmascript": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz", - "integrity": "sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz", + "integrity": "sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw==", "engines": { "node": ">=4" } }, "node_modules/unicode-property-aliases-ecmascript": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz", - "integrity": "sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", + "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", "engines": { "node": ">=4" } @@ -14063,30 +12646,6 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/union-value": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", - "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", - "dependencies": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^2.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/uniq": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", - "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=" - }, - "node_modules/uniqs": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz", - "integrity": "sha1-/+3ks2slKQaW5uFl1KWe25mOawI=" - }, "node_modules/unique-string": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", @@ -14220,73 +12779,40 @@ "node_modules/unpipe": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", "engines": { "node": ">= 0.8" } }, - "node_modules/unquote": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz", - "integrity": "sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ=" - }, - "node_modules/unset-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "node_modules/update-browserslist-db": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", + "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + } + ], "dependencies": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" + "escalade": "^3.1.1", + "picocolors": "^1.0.0" }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unset-value/node_modules/has-value": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", - "dependencies": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" + "bin": { + "browserslist-lint": "cli.js" }, - "engines": { - "node": ">=0.10.0" + "peerDependencies": { + "browserslist": ">= 4.21.0" } }, - "node_modules/unset-value/node_modules/has-value/node_modules/isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dependencies": { - "isarray": "1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unset-value/node_modules/has-values": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/upath": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", - "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", - "engines": { - "node": ">=4", - "yarn": "*" - } - }, - "node_modules/update-notifier": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-5.1.0.tgz", - "integrity": "sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw==", + "node_modules/update-notifier": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-5.1.0.tgz", + "integrity": "sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw==", "dependencies": { "boxen": "^5.0.0", "chalk": "^4.1.0", @@ -14326,21 +12852,6 @@ "node": ">=6" } }, - "node_modules/urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", - "deprecated": "Please see https://github.com/lydell/urix#deprecated" - }, - "node_modules/url": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", - "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", - "dependencies": { - "punycode": "1.3.2", - "querystring": "0.2.0" - } - }, "node_modules/url-loader": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-4.1.1.tgz", @@ -14368,11 +12879,11 @@ } }, "node_modules/url-loader/node_modules/schema-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", - "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", "dependencies": { - "@types/json-schema": "^7.0.6", + "@types/json-schema": "^7.0.8", "ajv": "^6.12.5", "ajv-keywords": "^3.5.2" }, @@ -14384,19 +12895,10 @@ "url": "https://opencollective.com/webpack" } }, - "node_modules/url-parse": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.1.tgz", - "integrity": "sha512-HOfCOUJt7iSYzEx/UqgtwKRMC6EU91NFhsCHMv9oM03VJcVo2Qrp8T8kI9D7amFf1cu+/3CEhgb3rF9zL7k85Q==", - "dependencies": { - "querystringify": "^2.1.1", - "requires-port": "^1.0.0" - } - }, "node_modules/url-parse-lax": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", - "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", + "integrity": "sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ==", "dependencies": { "prepend-http": "^2.0.0" }, @@ -14404,36 +12906,20 @@ "node": ">=4" } }, - "node_modules/url/node_modules/punycode": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=" - }, - "node_modules/use": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/use-composed-ref": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/use-composed-ref/-/use-composed-ref-1.1.0.tgz", - "integrity": "sha512-my1lNHGWsSDAhhVAT4MKs6IjBUtG6ZG11uUqexPH9PptiIZDQOzaF4f5tEbJ2+7qvNbtXNBbU3SfmN+fXlWDhg==", - "dependencies": { - "ts-essentials": "^2.0.3" - }, + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/use-composed-ref/-/use-composed-ref-1.3.0.tgz", + "integrity": "sha512-GLMG0Jc/jiKov/3Ulid1wbv3r54K9HlMW29IWcDFPEqFkSO2nS0MuefWgMJpeHQ9YJeXDL3ZUF+P3jdXlZX/cQ==", "peerDependencies": { - "react": "^16.8.0 || ^17.0.0" + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" } }, "node_modules/use-isomorphic-layout-effect": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.1.1.tgz", - "integrity": "sha512-L7Evj8FGcwo/wpbv/qvSfrkHFtOpCzvM5yl2KVyDJoylVuSvzphiiasmjgQPttIGBAy2WKiBNR98q8w7PiNgKQ==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.1.2.tgz", + "integrity": "sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA==", "peerDependencies": { - "react": "^16.8.0 || ^17.0.0" + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" }, "peerDependenciesMeta": { "@types/react": { @@ -14442,14 +12928,14 @@ } }, "node_modules/use-latest": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/use-latest/-/use-latest-1.2.0.tgz", - "integrity": "sha512-d2TEuG6nSLKQLAfW3By8mKr8HurOlTkul0sOpxbClIv4SQ4iOd7BYr7VIzdbktUCnv7dua/60xzd8igMU6jmyw==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/use-latest/-/use-latest-1.2.1.tgz", + "integrity": "sha512-xA+AVm/Wlg3e2P/JiItTziwS7FK92LWrDB0p+hgXloIMuVCeJJ8v6f0eeHyPZaJrM+usM1FkFfbNCrJGs8A/zw==", "dependencies": { - "use-isomorphic-layout-effect": "^1.0.0" + "use-isomorphic-layout-effect": "^1.1.1" }, "peerDependencies": { - "react": "^16.8.0 || ^17.0.0" + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" }, "peerDependenciesMeta": { "@types/react": { @@ -14460,26 +12946,12 @@ "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" - }, - "node_modules/util.promisify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.1.tgz", - "integrity": "sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==", - "dependencies": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.2", - "has-symbols": "^1.0.1", - "object.getownpropertydescriptors": "^2.1.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" }, "node_modules/utila": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", - "integrity": "sha1-ihagXURWV6Oupe7MWxKk+lN5dyw=" + "integrity": "sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==" }, "node_modules/utility-types": { "version": "3.10.0", @@ -14492,17 +12964,17 @@ "node_modules/utils-merge": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", "engines": { "node": ">= 0.4.0" } }, "node_modules/uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", "bin": { - "uuid": "bin/uuid" + "uuid": "dist/bin/uuid" } }, "node_modules/v8-compile-cache": { @@ -14518,20 +12990,11 @@ "node_modules/vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", "engines": { "node": ">= 0.8" } }, - "node_modules/vendors": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.4.tgz", - "integrity": "sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, "node_modules/vfile": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.1.tgz", @@ -14570,27 +13033,27 @@ } }, "node_modules/wait-on": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/wait-on/-/wait-on-5.3.0.tgz", - "integrity": "sha512-DwrHrnTK+/0QFaB9a8Ol5Lna3k7WvUR4jzSKmz0YaPBpuN2sACyiPVKVfj6ejnjcajAcvn3wlbTyMIn9AZouOg==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/wait-on/-/wait-on-6.0.1.tgz", + "integrity": "sha512-zht+KASY3usTY5u2LgaNqn/Cd8MukxLGjdcZxT2ns5QzDmTFc4XoWBgC+C/na+sMRZTuVygQoMYwdcVjHnYIVw==", "dependencies": { - "axios": "^0.21.1", - "joi": "^17.3.0", + "axios": "^0.25.0", + "joi": "^17.6.0", "lodash": "^4.17.21", "minimist": "^1.2.5", - "rxjs": "^6.6.3" + "rxjs": "^7.5.4" }, "bin": { "wait-on": "bin/wait-on" }, "engines": { - "node": ">=8.9.0" + "node": ">=10.0.0" } }, "node_modules/watchpack": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.1.1.tgz", - "integrity": "sha512-Oo7LXCmc1eE1AjyuSBmtC3+Wy4HcV8PxWh2kP6fOl8yTlNS7r0K9l1ao2lrrUza7V39Y3D/BbJgY8VeSlc5JKw==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", + "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", "dependencies": { "glob-to-regexp": "^0.4.1", "graceful-fs": "^4.1.2" @@ -14619,36 +13082,37 @@ "node_modules/webidl-conversions": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=" + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" }, "node_modules/webpack": { - "version": "5.37.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.37.0.tgz", - "integrity": "sha512-yvdhgcI6QkQkDe1hINBAJ1UNevqNGTVaCkD2SSJcB8rcrNNl922RI8i2DXUAuNfANoxwsiXXEA4ZPZI9q2oGLA==", - "dependencies": { - "@types/eslint-scope": "^3.7.0", - "@types/estree": "^0.0.47", - "@webassemblyjs/ast": "1.11.0", - "@webassemblyjs/wasm-edit": "1.11.0", - "@webassemblyjs/wasm-parser": "1.11.0", - "acorn": "^8.2.1", + "version": "5.74.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.74.0.tgz", + "integrity": "sha512-A2InDwnhhGN4LYctJj6M1JEaGL7Luj6LOmyBHjcI8529cm5p6VXiTIW2sn6ffvEAKmveLzvu4jrihwXtPojlAA==", + "dependencies": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^0.0.51", + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/wasm-edit": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "acorn": "^8.7.1", + "acorn-import-assertions": "^1.7.6", "browserslist": "^4.14.5", "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.8.0", - "es-module-lexer": "^0.4.0", - "eslint-scope": "^5.1.1", + "enhanced-resolve": "^5.10.0", + "es-module-lexer": "^0.9.0", + "eslint-scope": "5.1.1", "events": "^3.2.0", "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.4", - "json-parse-better-errors": "^1.0.2", + "graceful-fs": "^4.2.9", + "json-parse-even-better-errors": "^2.3.1", "loader-runner": "^4.2.0", "mime-types": "^2.1.27", "neo-async": "^2.6.2", - "schema-utils": "^3.0.0", + "schema-utils": "^3.1.0", "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.1.1", - "watchpack": "^2.0.0", - "webpack-sources": "^2.1.1" + "terser-webpack-plugin": "^5.1.3", + "watchpack": "^2.4.0", + "webpack-sources": "^3.2.3" }, "bin": { "webpack": "bin/webpack.js" @@ -14667,14 +13131,14 @@ } }, "node_modules/webpack-bundle-analyzer": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.4.1.tgz", - "integrity": "sha512-j5m7WgytCkiVBoOGavzNokBOqxe6Mma13X1asfVYtKWM3wxBiRRu1u1iG0Iol5+qp9WgyhkMmBAcvjEfJ2bdDw==", + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.6.1.tgz", + "integrity": "sha512-oKz9Oz9j3rUciLNfpGFjOb49/jEpXNmWdVH8Ls//zNcnLlQdTGXQQMsBbb/gR7Zl8WNLxVCq+0Hqbx3zv6twBw==", "dependencies": { "acorn": "^8.0.4", "acorn-walk": "^8.0.0", "chalk": "^4.1.0", - "commander": "^6.2.0", + "commander": "^7.2.0", "gzip-size": "^6.0.0", "lodash": "^4.17.20", "opener": "^1.5.2", @@ -14689,9 +13153,9 @@ } }, "node_modules/webpack-bundle-analyzer/node_modules/acorn": { - "version": "8.2.4", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.2.4.tgz", - "integrity": "sha512-Ibt84YwBDDA890eDiDCEqcbwvHlBvzzDkU2cGBBDDI1QWT12jTiXIOn2CIw5KK4i6N5Z2HUxwYjzriDyqaqqZg==", + "version": "8.8.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz", + "integrity": "sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==", "bin": { "acorn": "bin/acorn" }, @@ -14700,535 +13164,211 @@ } }, "node_modules/webpack-bundle-analyzer/node_modules/commander": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", - "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", - "engines": { - "node": ">= 6" - } - }, - "node_modules/webpack-bundle-analyzer/node_modules/gzip-size": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz", - "integrity": "sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==", - "dependencies": { - "duplexer": "^0.1.2" - }, + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 10" } }, "node_modules/webpack-dev-middleware": { - "version": "3.7.3", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.7.3.tgz", - "integrity": "sha512-djelc/zGiz9nZj/U7PTBi2ViorGJXEWo/3ltkPbDyxCXhhEXkW0ce99falaok4TPj+AsxLiXJR0EBOb0zh9fKQ==", + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz", + "integrity": "sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA==", "dependencies": { - "memory-fs": "^0.4.1", - "mime": "^2.4.4", - "mkdirp": "^0.5.1", + "colorette": "^2.0.10", + "memfs": "^3.4.3", + "mime-types": "^2.1.31", "range-parser": "^1.2.1", - "webpack-log": "^2.0.0" + "schema-utils": "^4.0.0" }, "engines": { - "node": ">= 6" + "node": ">= 12.13.0" }, - "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" - } - }, - "node_modules/webpack-dev-middleware/node_modules/mime": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz", - "integrity": "sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/webpack-dev-middleware/node_modules/mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "dependencies": { - "minimist": "^1.2.5" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/webpack-dev-server": { - "version": "3.11.2", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.11.2.tgz", - "integrity": "sha512-A80BkuHRQfCiNtGBS1EMf2ChTUs0x+B3wGDFmOeT4rmJOHhHTCH2naNxIHhmkr0/UillP4U3yeIyv1pNp+QDLQ==", - "dependencies": { - "ansi-html": "0.0.7", - "bonjour": "^3.5.0", - "chokidar": "^2.1.8", - "compression": "^1.7.4", - "connect-history-api-fallback": "^1.6.0", - "debug": "^4.1.1", - "del": "^4.1.1", - "express": "^4.17.1", - "html-entities": "^1.3.1", - "http-proxy-middleware": "0.19.1", - "import-local": "^2.0.0", - "internal-ip": "^4.3.0", - "ip": "^1.1.5", - "is-absolute-url": "^3.0.3", - "killable": "^1.0.1", - "loglevel": "^1.6.8", - "opn": "^5.5.0", - "p-retry": "^3.0.1", - "portfinder": "^1.0.26", - "schema-utils": "^1.0.0", - "selfsigned": "^1.10.8", - "semver": "^6.3.0", - "serve-index": "^1.9.1", - "sockjs": "^0.3.21", - "sockjs-client": "^1.5.0", - "spdy": "^4.0.2", - "strip-ansi": "^3.0.1", - "supports-color": "^6.1.0", - "url": "^0.11.0", - "webpack-dev-middleware": "^3.7.2", - "webpack-log": "^2.0.0", - "ws": "^6.2.1", - "yargs": "^13.3.2" - }, - "bin": { - "webpack-dev-server": "bin/webpack-dev-server.js" - }, - "engines": { - "node": ">= 6.11.5" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" }, "peerDependencies": { "webpack": "^4.0.0 || ^5.0.0" - }, - "peerDependenciesMeta": { - "webpack-cli": { - "optional": true - } } }, - "node_modules/webpack-dev-server/node_modules/ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack-dev-server/node_modules/anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "node_modules/webpack-dev-middleware/node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", "dependencies": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - } - }, - "node_modules/webpack-dev-server/node_modules/anymatch/node_modules/normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dependencies": { - "remove-trailing-separator": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack-dev-server/node_modules/array-union": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", - "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", - "dependencies": { - "array-uniq": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack-dev-server/node_modules/binary-extensions": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", - "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack-dev-server/node_modules/braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dependencies": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" }, - "engines": { - "node": ">=0.10.0" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/webpack-dev-server/node_modules/chokidar": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", - "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", - "deprecated": "Chokidar 2 will break on node v14+. Upgrade to chokidar 3 with 15x less dependencies.", + "node_modules/webpack-dev-middleware/node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", "dependencies": { - "anymatch": "^2.0.0", - "async-each": "^1.0.1", - "braces": "^2.3.2", - "glob-parent": "^3.1.0", - "inherits": "^2.0.3", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "normalize-path": "^3.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.2.1", - "upath": "^1.1.1" + "fast-deep-equal": "^3.1.3" }, - "optionalDependencies": { - "fsevents": "^1.2.7" + "peerDependencies": { + "ajv": "^8.8.2" } }, - "node_modules/webpack-dev-server/node_modules/del": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/del/-/del-4.1.1.tgz", - "integrity": "sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==", - "dependencies": { - "@types/glob": "^7.1.1", - "globby": "^6.1.0", - "is-path-cwd": "^2.0.0", - "is-path-in-cwd": "^2.0.0", - "p-map": "^2.0.0", - "pify": "^4.0.1", - "rimraf": "^2.6.3" - }, - "engines": { - "node": ">=6" - } + "node_modules/webpack-dev-middleware/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" }, - "node_modules/webpack-dev-server/node_modules/fill-range": { + "node_modules/webpack-dev-middleware/node_modules/schema-utils": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dependencies": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack-dev-server/node_modules/fsevents": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", - "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", - "deprecated": "fsevents 1 will break on node v14+ and could be using insecure binaries. Upgrade to fsevents 2.", - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "dependencies": { - "bindings": "^1.5.0", - "nan": "^2.12.1" - }, - "engines": { - "node": ">= 4.0" - } - }, - "node_modules/webpack-dev-server/node_modules/glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", - "dependencies": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - } - }, - "node_modules/webpack-dev-server/node_modules/glob-parent/node_modules/is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dependencies": { - "is-extglob": "^2.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack-dev-server/node_modules/globby": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", - "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", - "dependencies": { - "array-union": "^1.0.1", - "glob": "^7.0.3", - "object-assign": "^4.0.1", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack-dev-server/node_modules/globby/node_modules/pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack-dev-server/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "engines": { - "node": ">=4" - } - }, - "node_modules/webpack-dev-server/node_modules/is-binary-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", - "dependencies": { - "binary-extensions": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack-dev-server/node_modules/is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" - }, - "node_modules/webpack-dev-server/node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack-dev-server/node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack-dev-server/node_modules/is-number/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack-dev-server/node_modules/micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack-dev-server/node_modules/micromatch/node_modules/extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack-dev-server/node_modules/p-map": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", - "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", - "engines": { - "node": ">=6" - } - }, - "node_modules/webpack-dev-server/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/webpack-dev-server/node_modules/readdirp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", - "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", + "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", "dependencies": { - "graceful-fs": "^4.1.11", - "micromatch": "^3.1.10", - "readable-stream": "^2.0.2" + "@types/json-schema": "^7.0.9", + "ajv": "^8.8.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.0.0" }, "engines": { - "node": ">=0.10" - } - }, - "node_modules/webpack-dev-server/node_modules/rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dependencies": { - "glob": "^7.1.3" + "node": ">= 12.13.0" }, - "bin": { - "rimraf": "bin.js" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, - "node_modules/webpack-dev-server/node_modules/schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", - "dependencies": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" + "node_modules/webpack-dev-server": { + "version": "4.11.1", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.11.1.tgz", + "integrity": "sha512-lILVz9tAUy1zGFwieuaQtYiadImb5M3d+H+L1zDYalYoDl0cksAB1UNyuE5MMWJrG6zR1tXkCP2fitl7yoUJiw==", + "dependencies": { + "@types/bonjour": "^3.5.9", + "@types/connect-history-api-fallback": "^1.3.5", + "@types/express": "^4.17.13", + "@types/serve-index": "^1.9.1", + "@types/serve-static": "^1.13.10", + "@types/sockjs": "^0.3.33", + "@types/ws": "^8.5.1", + "ansi-html-community": "^0.0.8", + "bonjour-service": "^1.0.11", + "chokidar": "^3.5.3", + "colorette": "^2.0.10", + "compression": "^1.7.4", + "connect-history-api-fallback": "^2.0.0", + "default-gateway": "^6.0.3", + "express": "^4.17.3", + "graceful-fs": "^4.2.6", + "html-entities": "^2.3.2", + "http-proxy-middleware": "^2.0.3", + "ipaddr.js": "^2.0.1", + "open": "^8.0.9", + "p-retry": "^4.5.0", + "rimraf": "^3.0.2", + "schema-utils": "^4.0.0", + "selfsigned": "^2.1.1", + "serve-index": "^1.9.1", + "sockjs": "^0.3.24", + "spdy": "^4.0.2", + "webpack-dev-middleware": "^5.3.1", + "ws": "^8.4.2" }, - "engines": { - "node": ">= 4" - } - }, - "node_modules/webpack-dev-server/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/webpack-dev-server/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/webpack-dev-server/node_modules/strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dependencies": { - "ansi-regex": "^2.0.0" + "webpack-dev-server": "bin/webpack-dev-server.js" }, "engines": { - "node": ">=0.10.0" + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.37.0 || ^5.0.0" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } } }, - "node_modules/webpack-dev-server/node_modules/supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "node_modules/webpack-dev-server/node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", "dependencies": { - "has-flag": "^3.0.0" + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" }, - "engines": { - "node": ">=6" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/webpack-dev-server/node_modules/to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "node_modules/webpack-dev-server/node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", "dependencies": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" + "fast-deep-equal": "^3.1.3" }, - "engines": { - "node": ">=0.10.0" + "peerDependencies": { + "ajv": "^8.8.2" } }, - "node_modules/webpack-dev-server/node_modules/ws": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz", - "integrity": "sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==", - "dependencies": { - "async-limiter": "~1.0.0" - } + "node_modules/webpack-dev-server/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" }, - "node_modules/webpack-log": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/webpack-log/-/webpack-log-2.0.0.tgz", - "integrity": "sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==", + "node_modules/webpack-dev-server/node_modules/schema-utils": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", + "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", "dependencies": { - "ansi-colors": "^3.0.0", - "uuid": "^3.3.2" + "@types/json-schema": "^7.0.9", + "ajv": "^8.8.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.0.0" }, "engines": { - "node": ">= 6" + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, - "node_modules/webpack-log/node_modules/ansi-colors": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz", - "integrity": "sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==", + "node_modules/webpack-dev-server/node_modules/ws": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz", + "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==", "engines": { - "node": ">=6" + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } } }, "node_modules/webpack-merge": { - "version": "5.7.3", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.7.3.tgz", - "integrity": "sha512-6/JUQv0ELQ1igjGDzHkXbVDRxkfA57Zw7PfiupdLFJYrgFqY5ZP8xxbpp2lU3EPwYx89ht5Z/aDkD40hFCm5AA==", + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.8.0.tgz", + "integrity": "sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q==", "dependencies": { "clone-deep": "^4.0.1", "wildcard": "^2.0.0" @@ -15237,27 +13377,10 @@ "node": ">=10.0.0" } }, - "node_modules/webpack-sources": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", - "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", - "dependencies": { - "source-list-map": "^2.0.0", - "source-map": "~0.6.1" - } - }, - "node_modules/webpack-sources/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/webpack/node_modules/acorn": { - "version": "8.2.4", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.2.4.tgz", - "integrity": "sha512-Ibt84YwBDDA890eDiDCEqcbwvHlBvzzDkU2cGBBDDI1QWT12jTiXIOn2CIw5KK4i6N5Z2HUxwYjzriDyqaqqZg==", + "version": "8.8.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz", + "integrity": "sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==", "bin": { "acorn": "bin/acorn" }, @@ -15265,20 +13388,20 @@ "node": ">=0.4.0" } }, - "node_modules/webpack/node_modules/events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "engines": { - "node": ">=0.8.x" + "node_modules/webpack/node_modules/acorn-import-assertions": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", + "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", + "peerDependencies": { + "acorn": "^8" } }, "node_modules/webpack/node_modules/schema-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", - "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", "dependencies": { - "@types/json-schema": "^7.0.6", + "@types/json-schema": "^7.0.8", "ajv": "^6.12.5", "ajv-keywords": "^3.5.2" }, @@ -15290,47 +13413,36 @@ "url": "https://opencollective.com/webpack" } }, - "node_modules/webpack/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/webpack/node_modules/webpack-sources": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-2.2.0.tgz", - "integrity": "sha512-bQsA24JLwcnWGArOKUxYKhX3Mz/nK1Xf6hxullKERyktjNMC4x8koOeaDNTA2fEJ09BdWLbM/iTW0ithREUP0w==", - "dependencies": { - "source-list-map": "^2.0.1", - "source-map": "^0.6.1" - }, + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", "engines": { "node": ">=10.13.0" } }, "node_modules/webpackbar": { - "version": "5.0.0-3", - "resolved": "https://registry.npmjs.org/webpackbar/-/webpackbar-5.0.0-3.tgz", - "integrity": "sha512-viW6KCYjMb0NPoDrw2jAmLXU2dEOhRrtku28KmOfeE1vxbfwCYuTbTaMhnkrCZLFAFyY9Q49Z/jzYO80Dw5b8g==", + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/webpackbar/-/webpackbar-5.0.2.tgz", + "integrity": "sha512-BmFJo7veBDgQzfWXl/wwYXr/VFus0614qZ8i9znqcl9fnEdiVkdbi0TedLQ6xAK92HZHDJ0QmyQ0fmuZPAgCYQ==", "dependencies": { - "ansi-escapes": "^4.3.1", "chalk": "^4.1.0", - "consola": "^2.15.0", - "figures": "^3.2.0", + "consola": "^2.15.3", "pretty-time": "^1.1.0", - "std-env": "^2.2.1", - "text-table": "^0.2.0", - "wrap-ansi": "^7.0.0" + "std-env": "^3.0.1" }, "engines": { - "node": ">=10" + "node": ">=12" }, "peerDependencies": { "webpack": "3 || 4 || 5" } }, + "node_modules/webpackbar/node_modules/std-env": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.3.0.tgz", + "integrity": "sha512-cNNS+VYsXIs5gI6gJipO4qZ8YYT274JHvNnQ1/R/x8Q8mdP0qj0zoMchRXmBNPqp/0eOEhX+3g7g6Fgb7meLIQ==" + }, "node_modules/websocket-driver": { "version": "0.7.4", "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", @@ -15355,7 +13467,7 @@ "node_modules/whatwg-url": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", "dependencies": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" @@ -15390,11 +13502,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" - }, "node_modules/widest-line": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", @@ -15419,14 +13526,6 @@ "node": ">=0.10.0" } }, - "node_modules/worker-rpc": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/worker-rpc/-/worker-rpc-0.1.1.tgz", - "integrity": "sha512-P1WjMrUB3qgJNI9jfmpZ/htmBEjFh//6l/5y8SD9hg1Ef5zTTVVoRjTrTEzPrNBQvmhMxkoTsjOXN10GWU7aCg==", - "dependencies": { - "microevent.ts": "~0.1.1" - } - }, "node_modules/wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", @@ -15446,7 +13545,7 @@ "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" }, "node_modules/write-file-atomic": { "version": "3.0.3", @@ -15460,9 +13559,9 @@ } }, "node_modules/ws": { - "version": "7.4.5", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.5.tgz", - "integrity": "sha512-xzyu3hFvomRfXKH8vOFMU3OguG6oOvhXMo3xsGy3xWExqaM2dxBbVxuD99O7m3ZUFMvvscsZDqxfgMaRr/Nr1g==", + "version": "7.5.9", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", + "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", "engines": { "node": ">=8.3.0" }, @@ -15506,11 +13605,6 @@ "node": ">=0.4" } }, - "node_modules/y18n": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==" - }, "node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", @@ -15524,139 +13618,13 @@ "node": ">= 6" } }, - "node_modules/yargs": { - "version": "13.3.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", - "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", - "dependencies": { - "cliui": "^5.0.0", - "find-up": "^3.0.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^3.0.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^13.1.2" - } - }, - "node_modules/yargs-parser": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", - "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", - "dependencies": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - }, - "node_modules/yargs-parser/node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "engines": { - "node": ">=6" - } - }, - "node_modules/yargs/node_modules/ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "engines": { - "node": ">=6" - } - }, - "node_modules/yargs/node_modules/emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" - }, - "node_modules/yargs/node_modules/find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dependencies": { - "locate-path": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/yargs/node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "engines": { - "node": ">=4" - } - }, - "node_modules/yargs/node_modules/locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dependencies": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/yargs/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/yargs/node_modules/p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dependencies": { - "p-limit": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/yargs/node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "engines": { - "node": ">=4" - } - }, - "node_modules/yargs/node_modules/string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dependencies": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/yargs/node_modules/strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "node_modules/yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", "dependencies": { - "ansi-regex": "^4.1.0" - }, - "engines": { - "node": ">=6" + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" } }, "node_modules/yocto-queue": { @@ -15682,174 +13650,188 @@ }, "dependencies": { "@algolia/autocomplete-core": { - "version": "1.0.0-alpha.44", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-core/-/autocomplete-core-1.0.0-alpha.44.tgz", - "integrity": "sha512-2iMXthldMIDXtlbg9omRKLgg1bLo2ZzINAEqwhNjUeyj1ceEyL1ck6FY0VnJpf2LsjmNthHCz2BuFk+nYUeDNA==", + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-core/-/autocomplete-core-1.7.1.tgz", + "integrity": "sha512-eiZw+fxMzNQn01S8dA/hcCpoWCOCwcIIEUtHHdzN5TGB3IpzLbuhqFeTfh2OUhhgkE8Uo17+wH+QJ/wYyQmmzg==", "requires": { - "@algolia/autocomplete-shared": "1.0.0-alpha.44" + "@algolia/autocomplete-shared": "1.7.1" } }, "@algolia/autocomplete-preset-algolia": { - "version": "1.0.0-alpha.44", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.0.0-alpha.44.tgz", - "integrity": "sha512-DCHwo5ovzg9k2ejUolGNTLFnIA7GpsrkbNJTy1sFbMnYfBmeK8egZPZnEl7lBTr27OaZu7IkWpTepLVSztZyng==", + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.7.1.tgz", + "integrity": "sha512-pJwmIxeJCymU1M6cGujnaIYcY3QPOVYZOXhFkWVM7IxKzy272BwCvMFMyc5NpG/QmiObBxjo7myd060OeTNJXg==", "requires": { - "@algolia/autocomplete-shared": "1.0.0-alpha.44" + "@algolia/autocomplete-shared": "1.7.1" } }, "@algolia/autocomplete-shared": { - "version": "1.0.0-alpha.44", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-shared/-/autocomplete-shared-1.0.0-alpha.44.tgz", - "integrity": "sha512-2oQZPERYV+yNx/yoVWYjZZdOqsitJ5dfxXJjL18yczOXH6ujnsq+DTczSrX+RjzjQdVeJ1UAG053EJQF/FOiMg==" + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-shared/-/autocomplete-shared-1.7.1.tgz", + "integrity": "sha512-eTmGVqY3GeyBTT8IWiB2K5EuURAqhnumfktAEoHxfDY2o7vg2rSnO16ZtIG0fMgt3py28Vwgq42/bVEuaQV7pg==" }, "@algolia/cache-browser-local-storage": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.9.1.tgz", - "integrity": "sha512-bAUU9vKCy45uTTlzJw0LYu1IjoZsmzL6lgjaVFaW1crhX/4P+JD5ReQv3n/wpiXSFaHq1WEO3WyH2g3ymzeipQ==", + "version": "4.14.2", + "resolved": "https://registry.npmjs.org/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.14.2.tgz", + "integrity": "sha512-FRweBkK/ywO+GKYfAWbrepewQsPTIEirhi1BdykX9mxvBPtGNKccYAxvGdDCumU1jL4r3cayio4psfzKMejBlA==", "requires": { - "@algolia/cache-common": "4.9.1" + "@algolia/cache-common": "4.14.2" } }, "@algolia/cache-common": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/@algolia/cache-common/-/cache-common-4.9.1.tgz", - "integrity": "sha512-tcvw4mOfFy44V4ZxDEy9wNGr6vFROZKRpXKTEBgdw/WBn6mX51H1ar4RWtceDEcDU4H5fIv5tsY3ip2hU+fTPg==" + "version": "4.14.2", + "resolved": "https://registry.npmjs.org/@algolia/cache-common/-/cache-common-4.14.2.tgz", + "integrity": "sha512-SbvAlG9VqNanCErr44q6lEKD2qoK4XtFNx9Qn8FK26ePCI8I9yU7pYB+eM/cZdS9SzQCRJBbHUumVr4bsQ4uxg==" }, "@algolia/cache-in-memory": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/@algolia/cache-in-memory/-/cache-in-memory-4.9.1.tgz", - "integrity": "sha512-IEJrHonvdymW2CnRfJtsTVWyfAH05xPEFkGXGCw00+6JNCj8Dln3TeaRLiaaY1srlyGedkemekQm1/Xb46CGOQ==", + "version": "4.14.2", + "resolved": "https://registry.npmjs.org/@algolia/cache-in-memory/-/cache-in-memory-4.14.2.tgz", + "integrity": "sha512-HrOukWoop9XB/VFojPv1R5SVXowgI56T9pmezd/djh2JnVN/vXswhXV51RKy4nCpqxyHt/aGFSq2qkDvj6KiuQ==", "requires": { - "@algolia/cache-common": "4.9.1" + "@algolia/cache-common": "4.14.2" } }, "@algolia/client-account": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/@algolia/client-account/-/client-account-4.9.1.tgz", - "integrity": "sha512-Shpjeuwb7i2LR5QuWREb6UbEQLGB+Pl/J5+wPgILJDP/uWp7jpl0ase9mYNQGKj7TjztpSpQCPZ3dSHPnzZPfw==", + "version": "4.14.2", + "resolved": "https://registry.npmjs.org/@algolia/client-account/-/client-account-4.14.2.tgz", + "integrity": "sha512-WHtriQqGyibbb/Rx71YY43T0cXqyelEU0lB2QMBRXvD2X0iyeGl4qMxocgEIcbHyK7uqE7hKgjT8aBrHqhgc1w==", "requires": { - "@algolia/client-common": "4.9.1", - "@algolia/client-search": "4.9.1", - "@algolia/transporter": "4.9.1" + "@algolia/client-common": "4.14.2", + "@algolia/client-search": "4.14.2", + "@algolia/transporter": "4.14.2" } }, "@algolia/client-analytics": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-4.9.1.tgz", - "integrity": "sha512-/g6OkOSIA+A0t/tjvbL6iG/zV4El4LPFgv/tcAYHTH27BmlNtnEXw+iFpGjeUlQoPily9WVB3QNLMJkaNwL3HA==", + "version": "4.14.2", + "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-4.14.2.tgz", + "integrity": "sha512-yBvBv2mw+HX5a+aeR0dkvUbFZsiC4FKSnfqk9rrfX+QrlNOKEhCG0tJzjiOggRW4EcNqRmaTULIYvIzQVL2KYQ==", "requires": { - "@algolia/client-common": "4.9.1", - "@algolia/client-search": "4.9.1", - "@algolia/requester-common": "4.9.1", - "@algolia/transporter": "4.9.1" + "@algolia/client-common": "4.14.2", + "@algolia/client-search": "4.14.2", + "@algolia/requester-common": "4.14.2", + "@algolia/transporter": "4.14.2" } }, "@algolia/client-common": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-4.9.1.tgz", - "integrity": "sha512-UziRTZ8km3qwoVPIyEre8TV6V+MX7UtbfVqPmSafZ0xu41UUZ+sL56YoKjOXkbKuybeIC9prXMGy/ID5bXkTqg==", + "version": "4.14.2", + "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-4.14.2.tgz", + "integrity": "sha512-43o4fslNLcktgtDMVaT5XwlzsDPzlqvqesRi4MjQz2x4/Sxm7zYg5LRYFol1BIhG6EwxKvSUq8HcC/KxJu3J0Q==", "requires": { - "@algolia/requester-common": "4.9.1", - "@algolia/transporter": "4.9.1" + "@algolia/requester-common": "4.14.2", + "@algolia/transporter": "4.14.2" } }, - "@algolia/client-recommendation": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/@algolia/client-recommendation/-/client-recommendation-4.9.1.tgz", - "integrity": "sha512-Drtvvm1PNIOpYf4HFlkPFstFQ3IsN+TRmxur2F7y6Faplb5ybISa8ithu1tmlTdyTf3A78hQUQjgJet6qD2XZw==", + "@algolia/client-personalization": { + "version": "4.14.2", + "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-4.14.2.tgz", + "integrity": "sha512-ACCoLi0cL8CBZ1W/2juehSltrw2iqsQBnfiu/Rbl9W2yE6o2ZUb97+sqN/jBqYNQBS+o0ekTMKNkQjHHAcEXNw==", "requires": { - "@algolia/client-common": "4.9.1", - "@algolia/requester-common": "4.9.1", - "@algolia/transporter": "4.9.1" + "@algolia/client-common": "4.14.2", + "@algolia/requester-common": "4.14.2", + "@algolia/transporter": "4.14.2" } }, "@algolia/client-search": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-4.9.1.tgz", - "integrity": "sha512-r9Cw2r8kJr45iYncFDht6EshARghU265wuY8Q8oHrpFHjAziEYdsUOdNmQKbsSH5J3gLjDPx1EI5DzVd6ivn3w==", + "version": "4.14.2", + "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-4.14.2.tgz", + "integrity": "sha512-L5zScdOmcZ6NGiVbLKTvP02UbxZ0njd5Vq9nJAmPFtjffUSOGEp11BmD2oMJ5QvARgx2XbX4KzTTNS5ECYIMWw==", "requires": { - "@algolia/client-common": "4.9.1", - "@algolia/requester-common": "4.9.1", - "@algolia/transporter": "4.9.1" + "@algolia/client-common": "4.14.2", + "@algolia/requester-common": "4.14.2", + "@algolia/transporter": "4.14.2" } }, + "@algolia/events": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@algolia/events/-/events-4.0.1.tgz", + "integrity": "sha512-FQzvOCgoFXAbf5Y6mYozw2aj5KCJoA3m4heImceldzPSMbdyS4atVjJzXKMsfX3wnZTFYwkkt8/z8UesLHlSBQ==" + }, "@algolia/logger-common": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/@algolia/logger-common/-/logger-common-4.9.1.tgz", - "integrity": "sha512-9mPrbFlFyPT7or/7PXTiJjyOewWB9QRkZKVXkt5zHAUiUzGxmmdpJIGpPv3YQnDur8lXrXaRI0MHXUuIDMY1ng==" + "version": "4.14.2", + "resolved": "https://registry.npmjs.org/@algolia/logger-common/-/logger-common-4.14.2.tgz", + "integrity": "sha512-/JGlYvdV++IcMHBnVFsqEisTiOeEr6cUJtpjz8zc0A9c31JrtLm318Njc72p14Pnkw3A/5lHHh+QxpJ6WFTmsA==" }, "@algolia/logger-console": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/@algolia/logger-console/-/logger-console-4.9.1.tgz", - "integrity": "sha512-74VUwjtFjFpjZpi3QoHIPv0kcr3vWUSHX/Vs8PJW3lPsD4CgyhFenQbG9v+ZnyH0JrJwiYTtzfmrVh7IMWZGrQ==", + "version": "4.14.2", + "resolved": "https://registry.npmjs.org/@algolia/logger-console/-/logger-console-4.14.2.tgz", + "integrity": "sha512-8S2PlpdshbkwlLCSAB5f8c91xyc84VM9Ar9EdfE9UmX+NrKNYnWR1maXXVDQQoto07G1Ol/tYFnFVhUZq0xV/g==", "requires": { - "@algolia/logger-common": "4.9.1" + "@algolia/logger-common": "4.14.2" } }, "@algolia/requester-browser-xhr": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.9.1.tgz", - "integrity": "sha512-zc46tk5o0ikOAz3uYiRAMxC2iVKAMFKT7nNZnLB5IzT0uqAh7pz/+D/UvIxP4bKmsllpBSnPcpfQF+OI4Ag/BA==", + "version": "4.14.2", + "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.14.2.tgz", + "integrity": "sha512-CEh//xYz/WfxHFh7pcMjQNWgpl4wFB85lUMRyVwaDPibNzQRVcV33YS+63fShFWc2+42YEipFGH2iPzlpszmDw==", "requires": { - "@algolia/requester-common": "4.9.1" + "@algolia/requester-common": "4.14.2" } }, "@algolia/requester-common": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/@algolia/requester-common/-/requester-common-4.9.1.tgz", - "integrity": "sha512-9hPgXnlCSbqJqF69M5x5WN3h51Dc+mk/iWNeJSVxExHGvCDfBBZd0v6S15i8q2a9cD1I2RnhMpbnX5BmGtabVA==" + "version": "4.14.2", + "resolved": "https://registry.npmjs.org/@algolia/requester-common/-/requester-common-4.14.2.tgz", + "integrity": "sha512-73YQsBOKa5fvVV3My7iZHu1sUqmjjfs9TteFWwPwDmnad7T0VTCopttcsM3OjLxZFtBnX61Xxl2T2gmG2O4ehg==" }, "@algolia/requester-node-http": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-4.9.1.tgz", - "integrity": "sha512-vYNVbSCuyrCSCjHBQJk+tLZtWCjvvDf5tSbRJjyJYMqpnXuIuP7gZm24iHil4NPYBhbBj5NU2ZDAhc/gTn75Ag==", + "version": "4.14.2", + "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-4.14.2.tgz", + "integrity": "sha512-oDbb02kd1o5GTEld4pETlPZLY0e+gOSWjWMJHWTgDXbv9rm/o2cF7japO6Vj1ENnrqWvLBmW1OzV9g6FUFhFXg==", "requires": { - "@algolia/requester-common": "4.9.1" + "@algolia/requester-common": "4.14.2" } }, "@algolia/transporter": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/@algolia/transporter/-/transporter-4.9.1.tgz", - "integrity": "sha512-AbjFfGzX+cAuj7Qyc536OxIQzjFOA5FU2ANGStx8LBH+AKXScwfkx67C05riuaRR5adSCLMSEbVvUscH0nF+6A==", + "version": "4.14.2", + "resolved": "https://registry.npmjs.org/@algolia/transporter/-/transporter-4.14.2.tgz", + "integrity": "sha512-t89dfQb2T9MFQHidjHcfhh6iGMNwvuKUvojAj+JsrHAGbuSy7yE4BylhLX6R0Q1xYRoC4Vvv+O5qIw/LdnQfsQ==", + "requires": { + "@algolia/cache-common": "4.14.2", + "@algolia/logger-common": "4.14.2", + "@algolia/requester-common": "4.14.2" + } + }, + "@ampproject/remapping": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", + "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", "requires": { - "@algolia/cache-common": "4.9.1", - "@algolia/logger-common": "4.9.1", - "@algolia/requester-common": "4.9.1" + "@jridgewell/gen-mapping": "^0.1.0", + "@jridgewell/trace-mapping": "^0.3.9" } }, "@babel/code-frame": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", - "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", + "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", "requires": { - "@babel/highlight": "^7.12.13" + "@babel/highlight": "^7.18.6" } }, "@babel/compat-data": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.14.0.tgz", - "integrity": "sha512-vu9V3uMM/1o5Hl5OekMUowo3FqXLJSw+s+66nt0fSWVWTtmosdzn45JHOB3cPtZoe6CTBDzvSw0RdOY85Q37+Q==" + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.19.4.tgz", + "integrity": "sha512-CHIGpJcUQ5lU9KrPHTjBMhVwQG6CQjxfg36fGXl3qk/Gik1WwWachaXFuo0uCWJT/mStOKtcbFJCaVLihC1CMw==" }, "@babel/core": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.14.2.tgz", - "integrity": "sha512-OgC1mON+l4U4B4wiohJlQNUU3H73mpTyYY3j/c8U9dr9UagGGSm+WFpzjy/YLdoyjiG++c1kIDgxCo/mLwQJeQ==", - "requires": { - "@babel/code-frame": "^7.12.13", - "@babel/generator": "^7.14.2", - "@babel/helper-compilation-targets": "^7.13.16", - "@babel/helper-module-transforms": "^7.14.2", - "@babel/helpers": "^7.14.0", - "@babel/parser": "^7.14.2", - "@babel/template": "^7.12.13", - "@babel/traverse": "^7.14.2", - "@babel/types": "^7.14.2", + "version": "7.19.6", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.19.6.tgz", + "integrity": "sha512-D2Ue4KHpc6Ys2+AxpIx1BZ8+UegLLLE2p3KJEuJRKmokHOtl49jQ5ny1773KsGLZs8MQvBidAF6yWUJxRqtKtg==", + "requires": { + "@ampproject/remapping": "^2.1.0", + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.19.6", + "@babel/helper-compilation-targets": "^7.19.3", + "@babel/helper-module-transforms": "^7.19.6", + "@babel/helpers": "^7.19.4", + "@babel/parser": "^7.19.6", + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.19.6", + "@babel/types": "^7.19.4", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", - "json5": "^2.1.2", - "semver": "^6.3.0", - "source-map": "^0.5.0" + "json5": "^2.2.1", + "semver": "^6.3.0" }, "dependencies": { "semver": { @@ -15860,40 +13842,52 @@ } }, "@babel/generator": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.2.tgz", - "integrity": "sha512-OnADYbKrffDVai5qcpkMxQ7caomHOoEwjkouqnN2QhydAjowFAZcsdecFIRUBdb+ZcruwYE4ythYmF1UBZU5xQ==", + "version": "7.19.6", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.19.6.tgz", + "integrity": "sha512-oHGRUQeoX1QrKeJIKVe0hwjGqNnVYsM5Nep5zo0uE0m42sLH+Fsd2pStJ5sRM1bNyTUUoz0pe2lTeMJrb/taTA==", "requires": { - "@babel/types": "^7.14.2", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" + "@babel/types": "^7.19.4", + "@jridgewell/gen-mapping": "^0.3.2", + "jsesc": "^2.5.1" + }, + "dependencies": { + "@jridgewell/gen-mapping": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", + "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", + "requires": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + } + } } }, "@babel/helper-annotate-as-pure": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.12.13.tgz", - "integrity": "sha512-7YXfX5wQ5aYM/BOlbSccHDbuXXFPxeoUmfWtz8le2yTkTZc+BxsiEnENFoi2SlmA8ewDkG2LgIMIVzzn2h8kfw==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz", + "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==", "requires": { - "@babel/types": "^7.12.13" + "@babel/types": "^7.18.6" } }, "@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.12.13.tgz", - "integrity": "sha512-CZOv9tGphhDRlVjVkAgm8Nhklm9RzSmWpX2my+t7Ua/KT616pEzXsQCjinzvkRvHWJ9itO4f296efroX23XCMA==", + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.18.9.tgz", + "integrity": "sha512-yFQ0YCHoIqarl8BCRwBL8ulYUaZpz3bNsA7oFepAzee+8/+ImtADXNOmO5vJvsPff3qi+hvpkY/NYBTrBQgdNw==", "requires": { - "@babel/helper-explode-assignable-expression": "^7.12.13", - "@babel/types": "^7.12.13" + "@babel/helper-explode-assignable-expression": "^7.18.6", + "@babel/types": "^7.18.9" } }, "@babel/helper-compilation-targets": { - "version": "7.13.16", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.13.16.tgz", - "integrity": "sha512-3gmkYIrpqsLlieFwjkGgLaSHmhnvlAYzZLlYVjlW+QwI+1zE17kGxuJGmIqDQdYp56XdmGeD+Bswx0UTyG18xA==", + "version": "7.19.3", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.19.3.tgz", + "integrity": "sha512-65ESqLGyGmLvgR0mst5AdW1FkNlj9rQsCKduzEoEPhBCDFGXvz2jW6bXFG6i0/MrV2s7hhXjjb2yAzcPuQlLwg==", "requires": { - "@babel/compat-data": "^7.13.15", - "@babel/helper-validator-option": "^7.12.17", - "browserslist": "^4.14.5", + "@babel/compat-data": "^7.19.3", + "@babel/helper-validator-option": "^7.18.6", + "browserslist": "^4.21.3", "semver": "^6.3.0" }, "dependencies": { @@ -15905,36 +13899,35 @@ } }, "@babel/helper-create-class-features-plugin": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.14.2.tgz", - "integrity": "sha512-6YctwVsmlkchxfGUogvVrrhzyD3grFJyluj5JgDlQrwfMLJSt5tdAzFZfPf4H2Xoi5YLcQ6BxfJlaOBHuctyIw==", + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.19.0.tgz", + "integrity": "sha512-NRz8DwF4jT3UfrmUoZjd0Uph9HQnP30t7Ash+weACcyNkiYTywpIjDBgReJMKgr+n86sn2nPVVmJ28Dm053Kqw==", "requires": { - "@babel/helper-annotate-as-pure": "^7.12.13", - "@babel/helper-function-name": "^7.14.2", - "@babel/helper-member-expression-to-functions": "^7.13.12", - "@babel/helper-optimise-call-expression": "^7.12.13", - "@babel/helper-replace-supers": "^7.13.12", - "@babel/helper-split-export-declaration": "^7.12.13" + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.19.0", + "@babel/helper-member-expression-to-functions": "^7.18.9", + "@babel/helper-optimise-call-expression": "^7.18.6", + "@babel/helper-replace-supers": "^7.18.9", + "@babel/helper-split-export-declaration": "^7.18.6" } }, "@babel/helper-create-regexp-features-plugin": { - "version": "7.12.17", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.12.17.tgz", - "integrity": "sha512-p2VGmBu9oefLZ2nQpgnEnG0ZlRPvL8gAGvPUMQwUdaE8k49rOMuZpOwdQoy5qJf6K8jL3bcAMhVUlHAjIgJHUg==", + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.19.0.tgz", + "integrity": "sha512-htnV+mHX32DF81amCDrwIDr8nrp1PTm+3wfBN9/v8QJOLEioOCOG7qNyq0nHeFiWbT3Eb7gsPwEmV64UCQ1jzw==", "requires": { - "@babel/helper-annotate-as-pure": "^7.12.13", - "regexpu-core": "^4.7.1" + "@babel/helper-annotate-as-pure": "^7.18.6", + "regexpu-core": "^5.1.0" } }, "@babel/helper-define-polyfill-provider": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.2.0.tgz", - "integrity": "sha512-JT8tHuFjKBo8NnaUbblz7mIu1nnvUDiHVjXXkulZULyidvo/7P6TY7+YqpV37IfF+KUFxmlK04elKtGKXaiVgw==", + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.3.tgz", + "integrity": "sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==", "requires": { - "@babel/helper-compilation-targets": "^7.13.0", - "@babel/helper-module-imports": "^7.12.13", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/traverse": "^7.13.0", + "@babel/helper-compilation-targets": "^7.17.7", + "@babel/helper-plugin-utils": "^7.16.7", "debug": "^4.1.1", "lodash.debounce": "^4.0.8", "resolve": "^1.14.2", @@ -15948,167 +13941,169 @@ } } }, + "@babel/helper-environment-visitor": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", + "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==" + }, "@babel/helper-explode-assignable-expression": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.13.0.tgz", - "integrity": "sha512-qS0peLTDP8kOisG1blKbaoBg/o9OSa1qoumMjTK5pM+KDTtpxpsiubnCGP34vK8BXGcb2M9eigwgvoJryrzwWA==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.18.6.tgz", + "integrity": "sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg==", "requires": { - "@babel/types": "^7.13.0" + "@babel/types": "^7.18.6" } }, "@babel/helper-function-name": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.2.tgz", - "integrity": "sha512-NYZlkZRydxw+YT56IlhIcS8PAhb+FEUiOzuhFTfqDyPmzAhRge6ua0dQYT/Uh0t/EDHq05/i+e5M2d4XvjgarQ==", - "requires": { - "@babel/helper-get-function-arity": "^7.12.13", - "@babel/template": "^7.12.13", - "@babel/types": "^7.14.2" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz", - "integrity": "sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg==", + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz", + "integrity": "sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==", "requires": { - "@babel/types": "^7.12.13" + "@babel/template": "^7.18.10", + "@babel/types": "^7.19.0" } }, "@babel/helper-hoist-variables": { - "version": "7.13.16", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.13.16.tgz", - "integrity": "sha512-1eMtTrXtrwscjcAeO4BVK+vvkxaLJSPFz1w1KLawz6HLNi9bPFGBNwwDyVfiu1Tv/vRRFYfoGaKhmAQPGPn5Wg==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", + "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", "requires": { - "@babel/traverse": "^7.13.15", - "@babel/types": "^7.13.16" + "@babel/types": "^7.18.6" } }, "@babel/helper-member-expression-to-functions": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.13.12.tgz", - "integrity": "sha512-48ql1CLL59aKbU94Y88Xgb2VFy7a95ykGRbJJaaVv+LX5U8wFpLfiGXJJGUozsmA1oEh/o5Bp60Voq7ACyA/Sw==", + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.18.9.tgz", + "integrity": "sha512-RxifAh2ZoVU67PyKIO4AMi1wTenGfMR/O/ae0CCRqwgBAt5v7xjdtRw7UoSbsreKrQn5t7r89eruK/9JjYHuDg==", "requires": { - "@babel/types": "^7.13.12" + "@babel/types": "^7.18.9" } }, "@babel/helper-module-imports": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.13.12.tgz", - "integrity": "sha512-4cVvR2/1B693IuOvSI20xqqa/+bl7lqAMR59R4iu39R9aOX8/JoYY1sFaNvUMyMBGnHdwvJgUrzNLoUZxXypxA==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", + "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", "requires": { - "@babel/types": "^7.13.12" + "@babel/types": "^7.18.6" } }, "@babel/helper-module-transforms": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.14.2.tgz", - "integrity": "sha512-OznJUda/soKXv0XhpvzGWDnml4Qnwp16GN+D/kZIdLsWoHj05kyu8Rm5kXmMef+rVJZ0+4pSGLkeixdqNUATDA==", + "version": "7.19.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.19.6.tgz", + "integrity": "sha512-fCmcfQo/KYr/VXXDIyd3CBGZ6AFhPFy1TfSEJ+PilGVlQT6jcbqtHAM4C1EciRqMza7/TpOUZliuSH+U6HAhJw==", "requires": { - "@babel/helper-module-imports": "^7.13.12", - "@babel/helper-replace-supers": "^7.13.12", - "@babel/helper-simple-access": "^7.13.12", - "@babel/helper-split-export-declaration": "^7.12.13", - "@babel/helper-validator-identifier": "^7.14.0", - "@babel/template": "^7.12.13", - "@babel/traverse": "^7.14.2", - "@babel/types": "^7.14.2" + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-simple-access": "^7.19.4", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/helper-validator-identifier": "^7.19.1", + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.19.6", + "@babel/types": "^7.19.4" } }, "@babel/helper-optimise-call-expression": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.13.tgz", - "integrity": "sha512-BdWQhoVJkp6nVjB7nkFWcn43dkprYauqtk++Py2eaf/GRDFm5BxRqEIZCiHlZUGAVmtwKcsVL1dC68WmzeFmiA==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz", + "integrity": "sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==", "requires": { - "@babel/types": "^7.12.13" + "@babel/types": "^7.18.6" } }, "@babel/helper-plugin-utils": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", - "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==" + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", + "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==" }, "@babel/helper-remap-async-to-generator": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.13.0.tgz", - "integrity": "sha512-pUQpFBE9JvC9lrQbpX0TmeNIy5s7GnZjna2lhhcHC7DzgBs6fWn722Y5cfwgrtrqc7NAJwMvOa0mKhq6XaE4jg==", + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.9.tgz", + "integrity": "sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA==", "requires": { - "@babel/helper-annotate-as-pure": "^7.12.13", - "@babel/helper-wrap-function": "^7.13.0", - "@babel/types": "^7.13.0" + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-wrap-function": "^7.18.9", + "@babel/types": "^7.18.9" } }, "@babel/helper-replace-supers": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.13.12.tgz", - "integrity": "sha512-Gz1eiX+4yDO8mT+heB94aLVNCL+rbuT2xy4YfyNqu8F+OI6vMvJK891qGBTqL9Uc8wxEvRW92Id6G7sDen3fFw==", + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.19.1.tgz", + "integrity": "sha512-T7ahH7wV0Hfs46SFh5Jz3s0B6+o8g3c+7TMxu7xKfmHikg7EAZ3I2Qk9LFhjxXq8sL7UkP5JflezNwoZa8WvWw==", "requires": { - "@babel/helper-member-expression-to-functions": "^7.13.12", - "@babel/helper-optimise-call-expression": "^7.12.13", - "@babel/traverse": "^7.13.0", - "@babel/types": "^7.13.12" + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-member-expression-to-functions": "^7.18.9", + "@babel/helper-optimise-call-expression": "^7.18.6", + "@babel/traverse": "^7.19.1", + "@babel/types": "^7.19.0" } }, "@babel/helper-simple-access": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.13.12.tgz", - "integrity": "sha512-7FEjbrx5SL9cWvXioDbnlYTppcZGuCY6ow3/D5vMggb2Ywgu4dMrpTJX0JdQAIcRRUElOIxF3yEooa9gUb9ZbA==", + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.19.4.tgz", + "integrity": "sha512-f9Xq6WqBFqaDfbCzn2w85hwklswz5qsKlh7f08w4Y9yhJHpnNC0QemtSkK5YyOY8kPGvyiwdzZksGUhnGdaUIg==", "requires": { - "@babel/types": "^7.13.12" + "@babel/types": "^7.19.4" } }, "@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.12.1.tgz", - "integrity": "sha512-Mf5AUuhG1/OCChOJ/HcADmvcHM42WJockombn8ATJG3OnyiSxBK/Mm5x78BQWvmtXZKHgbjdGL2kin/HOLlZGA==", + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.18.9.tgz", + "integrity": "sha512-imytd2gHi3cJPsybLRbmFrF7u5BIEuI2cNheyKi3/iOBC63kNn3q8Crn2xVuESli0aM4KYsyEqKyS7lFL8YVtw==", "requires": { - "@babel/types": "^7.12.1" + "@babel/types": "^7.18.9" } }, "@babel/helper-split-export-declaration": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz", - "integrity": "sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", + "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", "requires": { - "@babel/types": "^7.12.13" + "@babel/types": "^7.18.6" } }, + "@babel/helper-string-parser": { + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz", + "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==" + }, "@babel/helper-validator-identifier": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.0.tgz", - "integrity": "sha512-V3ts7zMSu5lfiwWDVWzRDGIN+lnCEUdaXgtVHJgLb1rGaA6jMrtB9EmE7L18foXJIE8Un/A/h6NJfGQp/e1J4A==" + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", + "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==" }, "@babel/helper-validator-option": { - "version": "7.12.17", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.12.17.tgz", - "integrity": "sha512-TopkMDmLzq8ngChwRlyjR6raKD6gMSae4JdYDB8bByKreQgG0RBTuKe9LRxW3wFtUnjxOPRKBDwEH6Mg5KeDfw==" + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", + "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==" }, "@babel/helper-wrap-function": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.13.0.tgz", - "integrity": "sha512-1UX9F7K3BS42fI6qd2A4BjKzgGjToscyZTdp1DjknHLCIvpgne6918io+aL5LXFcER/8QWiwpoY902pVEqgTXA==", + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.19.0.tgz", + "integrity": "sha512-txX8aN8CZyYGTwcLhlk87KRqncAzhh5TpQamZUa0/u3an36NtDpUP6bQgBCBcLeBs09R/OwQu3OjK0k/HwfNDg==", "requires": { - "@babel/helper-function-name": "^7.12.13", - "@babel/template": "^7.12.13", - "@babel/traverse": "^7.13.0", - "@babel/types": "^7.13.0" + "@babel/helper-function-name": "^7.19.0", + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.19.0", + "@babel/types": "^7.19.0" } }, "@babel/helpers": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.14.0.tgz", - "integrity": "sha512-+ufuXprtQ1D1iZTO/K9+EBRn+qPWMJjZSw/S0KlFrxCw4tkrzv9grgpDHkY9MeQTjTY8i2sp7Jep8DfU6tN9Mg==", + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.19.4.tgz", + "integrity": "sha512-G+z3aOx2nfDHwX/kyVii5fJq+bgscg89/dJNWpYeKeBv3v9xX8EIabmx1k6u9LS04H7nROFVRVK+e3k0VHp+sw==", "requires": { - "@babel/template": "^7.12.13", - "@babel/traverse": "^7.14.0", - "@babel/types": "^7.14.0" + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.19.4", + "@babel/types": "^7.19.4" } }, "@babel/highlight": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.0.tgz", - "integrity": "sha512-YSCOwxvTYEIMSGaBQb5kDDsCopDdiUGsqpatp3fOlI4+2HQSkTmEVWnVuySdAC5EWCqSWWTv0ib63RjR7dTBdg==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", + "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", "requires": { - "@babel/helper-validator-identifier": "^7.14.0", + "@babel/helper-validator-identifier": "^7.18.6", "chalk": "^2.0.0", "js-tokens": "^4.0.0" }, @@ -16142,17 +14137,17 @@ "color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" }, "escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" }, "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" }, "supports-color": { "version": "5.5.0", @@ -16165,160 +14160,170 @@ } }, "@babel/parser": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.2.tgz", - "integrity": "sha512-IoVDIHpsgE/fu7eXBeRWt8zLbDrSvD7H1gpomOkPpBoEN8KCruCqSDdqo8dddwQQrui30KSvQBaMUOJiuFu6QQ==" + "version": "7.19.6", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.19.6.tgz", + "integrity": "sha512-h1IUp81s2JYJ3mRkdxJgs4UvmSsRvDrx5ICSJbPvtWYv5i1nTBGcBpnog+89rAFMwvvru6E5NUHdBe01UeSzYA==" + }, + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6.tgz", + "integrity": "sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } }, "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.13.12.tgz", - "integrity": "sha512-d0u3zWKcoZf379fOeJdr1a5WPDny4aOFZ6hlfKivgK0LY7ZxNfoaHL2fWwdGtHyVvra38FC+HVYkO+byfSA8AQ==", + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.18.9.tgz", + "integrity": "sha512-AHrP9jadvH7qlOj6PINbgSuphjQUAK7AOT7DPjBo9EHoLhQTnnK5u45e1Hd4DbSQEO9nqPWtQ89r+XEOWFScKg==", "requires": { - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1", - "@babel/plugin-proposal-optional-chaining": "^7.13.12" + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9", + "@babel/plugin-proposal-optional-chaining": "^7.18.9" } }, "@babel/plugin-proposal-async-generator-functions": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.14.2.tgz", - "integrity": "sha512-b1AM4F6fwck4N8ItZ/AtC4FP/cqZqmKRQ4FaTDutwSYyjuhtvsGEMLK4N/ztV/ImP40BjIDyMgBQAeAMsQYVFQ==", + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.19.1.tgz", + "integrity": "sha512-0yu8vNATgLy4ivqMNBIwb1HebCelqN7YX8SL3FDXORv/RqT0zEEWUCH4GH44JsSrvCu6GqnAdR5EBFAPeNBB4Q==", "requires": { - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-remap-async-to-generator": "^7.13.0", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-plugin-utils": "^7.19.0", + "@babel/helper-remap-async-to-generator": "^7.18.9", "@babel/plugin-syntax-async-generators": "^7.8.4" } }, "@babel/plugin-proposal-class-properties": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.13.0.tgz", - "integrity": "sha512-KnTDjFNC1g+45ka0myZNvSBFLhNCLN+GeGYLDEA8Oq7MZ6yMgfLoIRh86GRT0FjtJhZw8JyUskP9uvj5pHM9Zg==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", + "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==", "requires": { - "@babel/helper-create-class-features-plugin": "^7.13.0", - "@babel/helper-plugin-utils": "^7.13.0" + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" } }, "@babel/plugin-proposal-class-static-block": { - "version": "7.13.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.13.11.tgz", - "integrity": "sha512-fJTdFI4bfnMjvxJyNuaf8i9mVcZ0UhetaGEUHaHV9KEnibLugJkZAtXikR8KcYj+NYmI4DZMS8yQAyg+hvfSqg==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.18.6.tgz", + "integrity": "sha512-+I3oIiNxrCpup3Gi8n5IGMwj0gOCAjcJUSQEcotNnCCPMEnixawOQ+KeJPlgfjzx+FKQ1QSyZOWe7wmoJp7vhw==", "requires": { - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/plugin-syntax-class-static-block": "^7.12.13" + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-class-static-block": "^7.14.5" } }, "@babel/plugin-proposal-dynamic-import": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.14.2.tgz", - "integrity": "sha512-oxVQZIWFh91vuNEMKltqNsKLFWkOIyJc95k2Gv9lWVyDfPUQGSSlbDEgWuJUU1afGE9WwlzpucMZ3yDRHIItkA==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz", + "integrity": "sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==", "requires": { - "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-plugin-utils": "^7.18.6", "@babel/plugin-syntax-dynamic-import": "^7.8.3" } }, "@babel/plugin-proposal-export-namespace-from": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.14.2.tgz", - "integrity": "sha512-sRxW3z3Zp3pFfLAgVEvzTFutTXax837oOatUIvSG9o5gRj9mKwm3br1Se5f4QalTQs9x4AzlA/HrCWbQIHASUQ==", + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz", + "integrity": "sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==", "requires": { - "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-plugin-utils": "^7.18.9", "@babel/plugin-syntax-export-namespace-from": "^7.8.3" } }, "@babel/plugin-proposal-json-strings": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.14.2.tgz", - "integrity": "sha512-w2DtsfXBBJddJacXMBhElGEYqCZQqN99Se1qeYn8DVLB33owlrlLftIbMzn5nz1OITfDVknXF433tBrLEAOEjA==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz", + "integrity": "sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==", "requires": { - "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-plugin-utils": "^7.18.6", "@babel/plugin-syntax-json-strings": "^7.8.3" } }, "@babel/plugin-proposal-logical-assignment-operators": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.14.2.tgz", - "integrity": "sha512-1JAZtUrqYyGsS7IDmFeaem+/LJqujfLZ2weLR9ugB0ufUPjzf8cguyVT1g5im7f7RXxuLq1xUxEzvm68uYRtGg==", + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.18.9.tgz", + "integrity": "sha512-128YbMpjCrP35IOExw2Fq+x55LMP42DzhOhX2aNNIdI9avSWl2PI0yuBWarr3RYpZBSPtabfadkH2yeRiMD61Q==", "requires": { - "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-plugin-utils": "^7.18.9", "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" } }, "@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.14.2.tgz", - "integrity": "sha512-ebR0zU9OvI2N4qiAC38KIAK75KItpIPTpAtd2r4OZmMFeKbKJpUFLYP2EuDut82+BmYi8sz42B+TfTptJ9iG5Q==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz", + "integrity": "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==", "requires": { - "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-plugin-utils": "^7.18.6", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" } }, "@babel/plugin-proposal-numeric-separator": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.14.2.tgz", - "integrity": "sha512-DcTQY9syxu9BpU3Uo94fjCB3LN9/hgPS8oUL7KrSW3bA2ePrKZZPJcc5y0hoJAM9dft3pGfErtEUvxXQcfLxUg==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz", + "integrity": "sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==", "requires": { - "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-plugin-utils": "^7.18.6", "@babel/plugin-syntax-numeric-separator": "^7.10.4" } }, "@babel/plugin-proposal-object-rest-spread": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.14.2.tgz", - "integrity": "sha512-hBIQFxwZi8GIp934+nj5uV31mqclC1aYDhctDu5khTi9PCCUOczyy0b34W0oE9U/eJXiqQaKyVsmjeagOaSlbw==", + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.19.4.tgz", + "integrity": "sha512-wHmj6LDxVDnL+3WhXteUBaoM1aVILZODAUjg11kHqG4cOlfgMQGxw6aCgvrXrmaJR3Bn14oZhImyCPZzRpC93Q==", "requires": { - "@babel/compat-data": "^7.14.0", - "@babel/helper-compilation-targets": "^7.13.16", - "@babel/helper-plugin-utils": "^7.13.0", + "@babel/compat-data": "^7.19.4", + "@babel/helper-compilation-targets": "^7.19.3", + "@babel/helper-plugin-utils": "^7.19.0", "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.14.2" + "@babel/plugin-transform-parameters": "^7.18.8" } }, "@babel/plugin-proposal-optional-catch-binding": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.14.2.tgz", - "integrity": "sha512-XtkJsmJtBaUbOxZsNk0Fvrv8eiqgneug0A6aqLFZ4TSkar2L5dSXWcnUKHgmjJt49pyB/6ZHvkr3dPgl9MOWRQ==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz", + "integrity": "sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==", "requires": { - "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-plugin-utils": "^7.18.6", "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" } }, "@babel/plugin-proposal-optional-chaining": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.14.2.tgz", - "integrity": "sha512-qQByMRPwMZJainfig10BoaDldx/+VDtNcrA7qdNaEOAj6VXud+gfrkA8j4CRAU5HjnWREXqIpSpH30qZX1xivA==", + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.18.9.tgz", + "integrity": "sha512-v5nwt4IqBXihxGsW2QmCWMDS3B3bzGIk/EQVZz2ei7f3NJl8NzAJVvUmpDW5q1CRNY+Beb/k58UAH1Km1N411w==", "requires": { - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1", + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9", "@babel/plugin-syntax-optional-chaining": "^7.8.3" } }, "@babel/plugin-proposal-private-methods": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.13.0.tgz", - "integrity": "sha512-MXyyKQd9inhx1kDYPkFRVOBXQ20ES8Pto3T7UZ92xj2mY0EVD8oAVzeyYuVfy/mxAdTSIayOvg+aVzcHV2bn6Q==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz", + "integrity": "sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==", "requires": { - "@babel/helper-create-class-features-plugin": "^7.13.0", - "@babel/helper-plugin-utils": "^7.13.0" + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" } }, "@babel/plugin-proposal-private-property-in-object": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.14.0.tgz", - "integrity": "sha512-59ANdmEwwRUkLjB7CRtwJxxwtjESw+X2IePItA+RGQh+oy5RmpCh/EvVVvh5XQc3yxsm5gtv0+i9oBZhaDNVTg==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.18.6.tgz", + "integrity": "sha512-9Rysx7FOctvT5ouj5JODjAFAkgGoudQuLPamZb0v1TGLpapdNaftzifU8NTWQm0IRjqoYypdrSmyWgkocDQ8Dw==", "requires": { - "@babel/helper-annotate-as-pure": "^7.12.13", - "@babel/helper-create-class-features-plugin": "^7.14.0", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/plugin-syntax-private-property-in-object": "^7.14.0" + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" } }, "@babel/plugin-proposal-unicode-property-regex": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.12.13.tgz", - "integrity": "sha512-XyJmZidNfofEkqFV5VC/bLabGmO5QzenPO/YOfGuEbgU+2sSwMmio3YLb4WtBgcmmdwZHyVyv8on77IUjQ5Gvg==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz", + "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==", "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.12.13", - "@babel/helper-plugin-utils": "^7.12.13" + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" } }, "@babel/plugin-syntax-async-generators": { @@ -16338,11 +14343,11 @@ } }, "@babel/plugin-syntax-class-static-block": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.12.13.tgz", - "integrity": "sha512-ZmKQ0ZXR0nYpHZIIuj9zE7oIqCx2hw9TKi+lIo73NNrMPAZGHfS92/VRV0ZmPj6H2ffBgyFHXvJ5NYsNeEaP2A==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", "requires": { - "@babel/helper-plugin-utils": "^7.12.13" + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-syntax-dynamic-import": { @@ -16361,6 +14366,14 @@ "@babel/helper-plugin-utils": "^7.8.3" } }, + "@babel/plugin-syntax-import-assertions": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.18.6.tgz", + "integrity": "sha512-/DU3RXad9+bZwrgWJQKbr39gYbJpLJHezqEzRzi/BHRlJ9zsQb4CK2CA/5apllXNomwA1qHwzvHl+AdEmC5krQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, "@babel/plugin-syntax-json-strings": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", @@ -16370,11 +14383,11 @@ } }, "@babel/plugin-syntax-jsx": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.13.tgz", - "integrity": "sha512-d4HM23Q1K7oq/SLNmG6mRt85l2csmQ0cHRaxRXjKW0YFdEXqlZ5kzFQKH5Uc3rDJECgu+yCRgPkG04Mm98R/1g==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz", + "integrity": "sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==", "requires": { - "@babel/helper-plugin-utils": "^7.12.13" + "@babel/helper-plugin-utils": "^7.18.6" } }, "@babel/plugin-syntax-logical-assignment-operators": { @@ -16426,336 +14439,308 @@ } }, "@babel/plugin-syntax-private-property-in-object": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.0.tgz", - "integrity": "sha512-bda3xF8wGl5/5btF794utNOL0Jw+9jE5C1sLZcoK7c4uonE/y3iQiyG+KbkF3WBV/paX58VCpjhxLPkdj5Fe4w==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", "requires": { - "@babel/helper-plugin-utils": "^7.13.0" + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-syntax-top-level-await": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.13.tgz", - "integrity": "sha512-A81F9pDwyS7yM//KwbCSDqy3Uj4NMIurtplxphWxoYtNPov7cJsDkAFNNyVlIZ3jwGycVsurZ+LtOA8gZ376iQ==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", "requires": { - "@babel/helper-plugin-utils": "^7.12.13" + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-syntax-typescript": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.12.13.tgz", - "integrity": "sha512-cHP3u1JiUiG2LFDKbXnwVad81GvfyIOmCD6HIEId6ojrY0Drfy2q1jw7BwN7dE84+kTnBjLkXoL3IEy/3JPu2w==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.18.6.tgz", + "integrity": "sha512-mAWAuq4rvOepWCBid55JuRNvpTNf2UGVgoz4JV0fXEKolsVZDzsa4NqCef758WZJj/GDu0gVGItjKFiClTAmZA==", "requires": { - "@babel/helper-plugin-utils": "^7.12.13" + "@babel/helper-plugin-utils": "^7.18.6" } }, "@babel/plugin-transform-arrow-functions": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.13.0.tgz", - "integrity": "sha512-96lgJagobeVmazXFaDrbmCLQxBysKu7U6Do3mLsx27gf5Dk85ezysrs2BZUpXD703U/Su1xTBDxxar2oa4jAGg==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.18.6.tgz", + "integrity": "sha512-9S9X9RUefzrsHZmKMbDXxweEH+YlE8JJEuat9FdvW9Qh1cw7W64jELCtWNkPBPX5En45uy28KGvA/AySqUh8CQ==", "requires": { - "@babel/helper-plugin-utils": "^7.13.0" + "@babel/helper-plugin-utils": "^7.18.6" } }, "@babel/plugin-transform-async-to-generator": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.13.0.tgz", - "integrity": "sha512-3j6E004Dx0K3eGmhxVJxwwI89CTJrce7lg3UrtFuDAVQ/2+SJ/h/aSFOeE6/n0WB1GsOffsJp6MnPQNQ8nmwhg==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.18.6.tgz", + "integrity": "sha512-ARE5wZLKnTgPW7/1ftQmSi1CmkqqHo2DNmtztFhvgtOWSDfq0Cq9/9L+KnZNYSNrydBekhW3rwShduf59RoXag==", "requires": { - "@babel/helper-module-imports": "^7.12.13", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-remap-async-to-generator": "^7.13.0" + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-remap-async-to-generator": "^7.18.6" } }, "@babel/plugin-transform-block-scoped-functions": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.12.13.tgz", - "integrity": "sha512-zNyFqbc3kI/fVpqwfqkg6RvBgFpC4J18aKKMmv7KdQ/1GgREapSJAykLMVNwfRGO3BtHj3YQZl8kxCXPcVMVeg==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz", + "integrity": "sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==", "requires": { - "@babel/helper-plugin-utils": "^7.12.13" + "@babel/helper-plugin-utils": "^7.18.6" } }, "@babel/plugin-transform-block-scoping": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.14.2.tgz", - "integrity": "sha512-neZZcP19NugZZqNwMTH+KoBjx5WyvESPSIOQb4JHpfd+zPfqcH65RMu5xJju5+6q/Y2VzYrleQTr+b6METyyxg==", + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.19.4.tgz", + "integrity": "sha512-934S2VLLlt2hRJwPf4MczaOr4hYF0z+VKPwqTNxyKX7NthTiPfhuKFWQZHXRM0vh/wo/VyXB3s4bZUNA08l+tQ==", "requires": { - "@babel/helper-plugin-utils": "^7.13.0" + "@babel/helper-plugin-utils": "^7.19.0" } }, "@babel/plugin-transform-classes": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.14.2.tgz", - "integrity": "sha512-7oafAVcucHquA/VZCsXv/gmuiHeYd64UJyyTYU+MPfNu0KeNlxw06IeENBO8bJjXVbolu+j1MM5aKQtH1OMCNg==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.12.13", - "@babel/helper-function-name": "^7.14.2", - "@babel/helper-optimise-call-expression": "^7.12.13", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-replace-supers": "^7.13.12", - "@babel/helper-split-export-declaration": "^7.12.13", + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.19.0.tgz", + "integrity": "sha512-YfeEE9kCjqTS9IitkgfJuxjcEtLUHMqa8yUJ6zdz8vR7hKuo6mOy2C05P0F1tdMmDCeuyidKnlrw/iTppHcr2A==", + "requires": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-compilation-targets": "^7.19.0", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.19.0", + "@babel/helper-optimise-call-expression": "^7.18.6", + "@babel/helper-plugin-utils": "^7.19.0", + "@babel/helper-replace-supers": "^7.18.9", + "@babel/helper-split-export-declaration": "^7.18.6", "globals": "^11.1.0" } }, "@babel/plugin-transform-computed-properties": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.13.0.tgz", - "integrity": "sha512-RRqTYTeZkZAz8WbieLTvKUEUxZlUTdmL5KGMyZj7FnMfLNKV4+r5549aORG/mgojRmFlQMJDUupwAMiF2Q7OUg==", + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.18.9.tgz", + "integrity": "sha512-+i0ZU1bCDymKakLxn5srGHrsAPRELC2WIbzwjLhHW9SIE1cPYkLCL0NlnXMZaM1vhfgA2+M7hySk42VBvrkBRw==", "requires": { - "@babel/helper-plugin-utils": "^7.13.0" + "@babel/helper-plugin-utils": "^7.18.9" } }, "@babel/plugin-transform-destructuring": { - "version": "7.13.17", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.13.17.tgz", - "integrity": "sha512-UAUqiLv+uRLO+xuBKKMEpC+t7YRNVRqBsWWq1yKXbBZBje/t3IXCiSinZhjn/DC3qzBfICeYd2EFGEbHsh5RLA==", + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.19.4.tgz", + "integrity": "sha512-t0j0Hgidqf0aM86dF8U+vXYReUgJnlv4bZLsyoPnwZNrGY+7/38o8YjaELrvHeVfTZao15kjR0PVv0nju2iduA==", "requires": { - "@babel/helper-plugin-utils": "^7.13.0" + "@babel/helper-plugin-utils": "^7.19.0" } }, "@babel/plugin-transform-dotall-regex": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.12.13.tgz", - "integrity": "sha512-foDrozE65ZFdUC2OfgeOCrEPTxdB3yjqxpXh8CH+ipd9CHd4s/iq81kcUpyH8ACGNEPdFqbtzfgzbT/ZGlbDeQ==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.18.6.tgz", + "integrity": "sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg==", "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.12.13", - "@babel/helper-plugin-utils": "^7.12.13" + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" } }, "@babel/plugin-transform-duplicate-keys": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.12.13.tgz", - "integrity": "sha512-NfADJiiHdhLBW3pulJlJI2NB0t4cci4WTZ8FtdIuNc2+8pslXdPtRRAEWqUY+m9kNOk2eRYbTAOipAxlrOcwwQ==", + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.9.tgz", + "integrity": "sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw==", "requires": { - "@babel/helper-plugin-utils": "^7.12.13" + "@babel/helper-plugin-utils": "^7.18.9" } }, "@babel/plugin-transform-exponentiation-operator": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.12.13.tgz", - "integrity": "sha512-fbUelkM1apvqez/yYx1/oICVnGo2KM5s63mhGylrmXUxK/IAXSIf87QIxVfZldWf4QsOafY6vV3bX8aMHSvNrA==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz", + "integrity": "sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==", "requires": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.12.13", - "@babel/helper-plugin-utils": "^7.12.13" + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" } }, "@babel/plugin-transform-for-of": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.13.0.tgz", - "integrity": "sha512-IHKT00mwUVYE0zzbkDgNRP6SRzvfGCYsOxIRz8KsiaaHCcT9BWIkO+H9QRJseHBLOGBZkHUdHiqj6r0POsdytg==", + "version": "7.18.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.8.tgz", + "integrity": "sha512-yEfTRnjuskWYo0k1mHUqrVWaZwrdq8AYbfrpqULOJOaucGSp4mNMVps+YtA8byoevxS/urwU75vyhQIxcCgiBQ==", "requires": { - "@babel/helper-plugin-utils": "^7.13.0" + "@babel/helper-plugin-utils": "^7.18.6" } }, "@babel/plugin-transform-function-name": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.12.13.tgz", - "integrity": "sha512-6K7gZycG0cmIwwF7uMK/ZqeCikCGVBdyP2J5SKNCXO5EOHcqi+z7Jwf8AmyDNcBgxET8DrEtCt/mPKPyAzXyqQ==", + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.9.tgz", + "integrity": "sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ==", "requires": { - "@babel/helper-function-name": "^7.12.13", - "@babel/helper-plugin-utils": "^7.12.13" + "@babel/helper-compilation-targets": "^7.18.9", + "@babel/helper-function-name": "^7.18.9", + "@babel/helper-plugin-utils": "^7.18.9" } }, "@babel/plugin-transform-literals": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.12.13.tgz", - "integrity": "sha512-FW+WPjSR7hiUxMcKqyNjP05tQ2kmBCdpEpZHY1ARm96tGQCCBvXKnpjILtDplUnJ/eHZ0lALLM+d2lMFSpYJrQ==", + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.9.tgz", + "integrity": "sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==", "requires": { - "@babel/helper-plugin-utils": "^7.12.13" + "@babel/helper-plugin-utils": "^7.18.9" } }, "@babel/plugin-transform-member-expression-literals": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.12.13.tgz", - "integrity": "sha512-kxLkOsg8yir4YeEPHLuO2tXP9R/gTjpuTOjshqSpELUN3ZAg2jfDnKUvzzJxObun38sw3wm4Uu69sX/zA7iRvg==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.18.6.tgz", + "integrity": "sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==", "requires": { - "@babel/helper-plugin-utils": "^7.12.13" + "@babel/helper-plugin-utils": "^7.18.6" } }, "@babel/plugin-transform-modules-amd": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.14.2.tgz", - "integrity": "sha512-hPC6XBswt8P3G2D1tSV2HzdKvkqOpmbyoy+g73JG0qlF/qx2y3KaMmXb1fLrpmWGLZYA0ojCvaHdzFWjlmV+Pw==", + "version": "7.19.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.19.6.tgz", + "integrity": "sha512-uG3od2mXvAtIFQIh0xrpLH6r5fpSQN04gIVovl+ODLdUMANokxQLZnPBHcjmv3GxRjnqwLuHvppjjcelqUFZvg==", "requires": { - "@babel/helper-module-transforms": "^7.14.2", - "@babel/helper-plugin-utils": "^7.13.0", - "babel-plugin-dynamic-import-node": "^2.3.3" - }, - "dependencies": { - "babel-plugin-dynamic-import-node": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", - "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", - "requires": { - "object.assign": "^4.1.0" - } - } + "@babel/helper-module-transforms": "^7.19.6", + "@babel/helper-plugin-utils": "^7.19.0" } }, "@babel/plugin-transform-modules-commonjs": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.14.0.tgz", - "integrity": "sha512-EX4QePlsTaRZQmw9BsoPeyh5OCtRGIhwfLquhxGp5e32w+dyL8htOcDwamlitmNFK6xBZYlygjdye9dbd9rUlQ==", + "version": "7.19.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.19.6.tgz", + "integrity": "sha512-8PIa1ym4XRTKuSsOUXqDG0YaOlEuTVvHMe5JCfgBMOtHvJKw/4NGovEGN33viISshG/rZNVrACiBmPQLvWN8xQ==", "requires": { - "@babel/helper-module-transforms": "^7.14.0", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-simple-access": "^7.13.12", - "babel-plugin-dynamic-import-node": "^2.3.3" - }, - "dependencies": { - "babel-plugin-dynamic-import-node": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", - "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", - "requires": { - "object.assign": "^4.1.0" - } - } + "@babel/helper-module-transforms": "^7.19.6", + "@babel/helper-plugin-utils": "^7.19.0", + "@babel/helper-simple-access": "^7.19.4" } }, "@babel/plugin-transform-modules-systemjs": { - "version": "7.13.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.13.8.tgz", - "integrity": "sha512-hwqctPYjhM6cWvVIlOIe27jCIBgHCsdH2xCJVAYQm7V5yTMoilbVMi9f6wKg0rpQAOn6ZG4AOyvCqFF/hUh6+A==", + "version": "7.19.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.19.6.tgz", + "integrity": "sha512-fqGLBepcc3kErfR9R3DnVpURmckXP7gj7bAlrTQyBxrigFqszZCkFkcoxzCp2v32XmwXLvbw+8Yq9/b+QqksjQ==", "requires": { - "@babel/helper-hoist-variables": "^7.13.0", - "@babel/helper-module-transforms": "^7.13.0", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-validator-identifier": "^7.12.11", - "babel-plugin-dynamic-import-node": "^2.3.3" - }, - "dependencies": { - "babel-plugin-dynamic-import-node": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", - "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", - "requires": { - "object.assign": "^4.1.0" - } - } + "@babel/helper-hoist-variables": "^7.18.6", + "@babel/helper-module-transforms": "^7.19.6", + "@babel/helper-plugin-utils": "^7.19.0", + "@babel/helper-validator-identifier": "^7.19.1" } }, "@babel/plugin-transform-modules-umd": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.14.0.tgz", - "integrity": "sha512-nPZdnWtXXeY7I87UZr9VlsWme3Y0cfFFE41Wbxz4bbaexAjNMInXPFUpRRUJ8NoMm0Cw+zxbqjdPmLhcjfazMw==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.6.tgz", + "integrity": "sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ==", "requires": { - "@babel/helper-module-transforms": "^7.14.0", - "@babel/helper-plugin-utils": "^7.13.0" + "@babel/helper-module-transforms": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" } }, "@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.12.13.tgz", - "integrity": "sha512-Xsm8P2hr5hAxyYblrfACXpQKdQbx4m2df9/ZZSQ8MAhsadw06+jW7s9zsSw6he+mJZXRlVMyEnVktJo4zjk1WA==", + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.19.1.tgz", + "integrity": "sha512-oWk9l9WItWBQYS4FgXD4Uyy5kq898lvkXpXQxoJEY1RnvPk4R/Dvu2ebXU9q8lP+rlMwUQTFf2Ok6d78ODa0kw==", "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.12.13" + "@babel/helper-create-regexp-features-plugin": "^7.19.0", + "@babel/helper-plugin-utils": "^7.19.0" } }, "@babel/plugin-transform-new-target": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.12.13.tgz", - "integrity": "sha512-/KY2hbLxrG5GTQ9zzZSc3xWiOy379pIETEhbtzwZcw9rvuaVV4Fqy7BYGYOWZnaoXIQYbbJ0ziXLa/sKcGCYEQ==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.6.tgz", + "integrity": "sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw==", "requires": { - "@babel/helper-plugin-utils": "^7.12.13" + "@babel/helper-plugin-utils": "^7.18.6" } }, "@babel/plugin-transform-object-super": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.12.13.tgz", - "integrity": "sha512-JzYIcj3XtYspZDV8j9ulnoMPZZnF/Cj0LUxPOjR89BdBVx+zYJI9MdMIlUZjbXDX+6YVeS6I3e8op+qQ3BYBoQ==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz", + "integrity": "sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==", "requires": { - "@babel/helper-plugin-utils": "^7.12.13", - "@babel/helper-replace-supers": "^7.12.13" + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-replace-supers": "^7.18.6" } }, "@babel/plugin-transform-parameters": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.14.2.tgz", - "integrity": "sha512-NxoVmA3APNCC1JdMXkdYXuQS+EMdqy0vIwyDHeKHiJKRxmp1qGSdb0JLEIoPRhkx6H/8Qi3RJ3uqOCYw8giy9A==", + "version": "7.18.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.18.8.tgz", + "integrity": "sha512-ivfbE3X2Ss+Fj8nnXvKJS6sjRG4gzwPMsP+taZC+ZzEGjAYlvENixmt1sZ5Ca6tWls+BlKSGKPJ6OOXvXCbkFg==", "requires": { - "@babel/helper-plugin-utils": "^7.13.0" + "@babel/helper-plugin-utils": "^7.18.6" } }, "@babel/plugin-transform-property-literals": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.12.13.tgz", - "integrity": "sha512-nqVigwVan+lR+g8Fj8Exl0UQX2kymtjcWfMOYM1vTYEKujeyv2SkMgazf2qNcK7l4SDiKyTA/nHCPqL4e2zo1A==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz", + "integrity": "sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==", "requires": { - "@babel/helper-plugin-utils": "^7.12.13" + "@babel/helper-plugin-utils": "^7.18.6" } }, "@babel/plugin-transform-react-constant-elements": { - "version": "7.13.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.13.13.tgz", - "integrity": "sha512-SNJU53VM/SjQL0bZhyU+f4kJQz7bQQajnrZRSaU21hruG/NWY41AEM9AWXeXX90pYr/C2yAmTgI6yW3LlLrAUQ==", + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.20.2.tgz", + "integrity": "sha512-KS/G8YI8uwMGKErLFOHS/ekhqdHhpEloxs43NecQHVgo2QuQSyJhGIY1fL8UGl9wy5ItVwwoUL4YxVqsplGq2g==", "requires": { - "@babel/helper-plugin-utils": "^7.13.0" + "@babel/helper-plugin-utils": "^7.20.2" } }, "@babel/plugin-transform-react-display-name": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.14.2.tgz", - "integrity": "sha512-zCubvP+jjahpnFJvPaHPiGVfuVUjXHhFvJKQdNnsmSsiU9kR/rCZ41jHc++tERD2zV+p7Hr6is+t5b6iWTCqSw==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.18.6.tgz", + "integrity": "sha512-TV4sQ+T013n61uMoygyMRm+xf04Bd5oqFpv2jAEQwSZ8NwQA7zeRPg1LMVg2PWi3zWBz+CLKD+v5bcpZ/BS0aA==", "requires": { - "@babel/helper-plugin-utils": "^7.13.0" + "@babel/helper-plugin-utils": "^7.18.6" } }, "@babel/plugin-transform-react-jsx": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.13.12.tgz", - "integrity": "sha512-jcEI2UqIcpCqB5U5DRxIl0tQEProI2gcu+g8VTIqxLO5Iidojb4d77q+fwGseCvd8af/lJ9masp4QWzBXFE2xA==", + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.19.0.tgz", + "integrity": "sha512-UVEvX3tXie3Szm3emi1+G63jyw1w5IcMY0FSKM+CRnKRI5Mr1YbCNgsSTwoTwKphQEG9P+QqmuRFneJPZuHNhg==", "requires": { - "@babel/helper-annotate-as-pure": "^7.12.13", - "@babel/helper-module-imports": "^7.13.12", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/plugin-syntax-jsx": "^7.12.13", - "@babel/types": "^7.13.12" + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-plugin-utils": "^7.19.0", + "@babel/plugin-syntax-jsx": "^7.18.6", + "@babel/types": "^7.19.0" } }, "@babel/plugin-transform-react-jsx-development": { - "version": "7.12.17", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.12.17.tgz", - "integrity": "sha512-BPjYV86SVuOaudFhsJR1zjgxxOhJDt6JHNoD48DxWEIxUCAMjV1ys6DYw4SDYZh0b1QsS2vfIA9t/ZsQGsDOUQ==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.18.6.tgz", + "integrity": "sha512-SA6HEjwYFKF7WDjWcMcMGUimmw/nhNRDWxr+KaLSCrkD/LMDBvWRmHAYgE1HDeF8KUuI8OAu+RT6EOtKxSW2qA==", "requires": { - "@babel/plugin-transform-react-jsx": "^7.12.17" + "@babel/plugin-transform-react-jsx": "^7.18.6" } }, "@babel/plugin-transform-react-pure-annotations": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.12.1.tgz", - "integrity": "sha512-RqeaHiwZtphSIUZ5I85PEH19LOSzxfuEazoY7/pWASCAIBuATQzpSVD+eT6MebeeZT2F4eSL0u4vw6n4Nm0Mjg==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.18.6.tgz", + "integrity": "sha512-I8VfEPg9r2TRDdvnHgPepTKvuRomzA8+u+nhY7qSI1fR2hRNebasZEETLyM5mAUr0Ku56OkXJ0I7NHJnO6cJiQ==", "requires": { - "@babel/helper-annotate-as-pure": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" } }, "@babel/plugin-transform-regenerator": { - "version": "7.13.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.13.15.tgz", - "integrity": "sha512-Bk9cOLSz8DiurcMETZ8E2YtIVJbFCPGW28DJWUakmyVWtQSm6Wsf0p4B4BfEr/eL2Nkhe/CICiUiMOCi1TPhuQ==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.18.6.tgz", + "integrity": "sha512-poqRI2+qiSdeldcz4wTSTXBRryoq3Gc70ye7m7UD5Ww0nE29IXqMl6r7Nd15WBgRd74vloEMlShtH6CKxVzfmQ==", "requires": { - "regenerator-transform": "^0.14.2" + "@babel/helper-plugin-utils": "^7.18.6", + "regenerator-transform": "^0.15.0" } }, "@babel/plugin-transform-reserved-words": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.12.13.tgz", - "integrity": "sha512-xhUPzDXxZN1QfiOy/I5tyye+TRz6lA7z6xaT4CLOjPRMVg1ldRf0LHw0TDBpYL4vG78556WuHdyO9oi5UmzZBg==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.18.6.tgz", + "integrity": "sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA==", "requires": { - "@babel/helper-plugin-utils": "^7.12.13" + "@babel/helper-plugin-utils": "^7.18.6" } }, "@babel/plugin-transform-runtime": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.14.2.tgz", - "integrity": "sha512-LyA2AiPkaYzI7G5e2YI4NCasTfFe7mZvlupNprDOB7CdNUHb2DQC4uV6oeZ0396gOcicUzUCh0MShL6wiUgk+Q==", - "requires": { - "@babel/helper-module-imports": "^7.13.12", - "@babel/helper-plugin-utils": "^7.13.0", - "babel-plugin-polyfill-corejs2": "^0.2.0", - "babel-plugin-polyfill-corejs3": "^0.2.0", - "babel-plugin-polyfill-regenerator": "^0.2.0", + "version": "7.19.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.19.6.tgz", + "integrity": "sha512-PRH37lz4JU156lYFW1p8OxE5i7d6Sl/zV58ooyr+q1J1lnQPyg5tIiXlIwNVhJaY4W3TmOtdc8jqdXQcB1v5Yw==", + "requires": { + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-plugin-utils": "^7.19.0", + "babel-plugin-polyfill-corejs2": "^0.3.3", + "babel-plugin-polyfill-corejs3": "^0.6.0", + "babel-plugin-polyfill-regenerator": "^0.4.1", "semver": "^6.3.0" }, "dependencies": { @@ -16767,103 +14752,105 @@ } }, "@babel/plugin-transform-shorthand-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.12.13.tgz", - "integrity": "sha512-xpL49pqPnLtf0tVluuqvzWIgLEhuPpZzvs2yabUHSKRNlN7ScYU7aMlmavOeyXJZKgZKQRBlh8rHbKiJDraTSw==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz", + "integrity": "sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==", "requires": { - "@babel/helper-plugin-utils": "^7.12.13" + "@babel/helper-plugin-utils": "^7.18.6" } }, "@babel/plugin-transform-spread": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.13.0.tgz", - "integrity": "sha512-V6vkiXijjzYeFmQTr3dBxPtZYLPcUfY34DebOU27jIl2M/Y8Egm52Hw82CSjjPqd54GTlJs5x+CR7HeNr24ckg==", + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.19.0.tgz", + "integrity": "sha512-RsuMk7j6n+r752EtzyScnWkQyuJdli6LdO5Klv8Yx0OfPVTcQkIUfS8clx5e9yHXzlnhOZF3CbQ8C2uP5j074w==", "requires": { - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1" + "@babel/helper-plugin-utils": "^7.19.0", + "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9" } }, "@babel/plugin-transform-sticky-regex": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.12.13.tgz", - "integrity": "sha512-Jc3JSaaWT8+fr7GRvQP02fKDsYk4K/lYwWq38r/UGfaxo89ajud321NH28KRQ7xy1Ybc0VUE5Pz8psjNNDUglg==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.18.6.tgz", + "integrity": "sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==", "requires": { - "@babel/helper-plugin-utils": "^7.12.13" + "@babel/helper-plugin-utils": "^7.18.6" } }, "@babel/plugin-transform-template-literals": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.13.0.tgz", - "integrity": "sha512-d67umW6nlfmr1iehCcBv69eSUSySk1EsIS8aTDX4Xo9qajAh6mYtcl4kJrBkGXuxZPEgVr7RVfAvNW6YQkd4Mw==", + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.9.tgz", + "integrity": "sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==", "requires": { - "@babel/helper-plugin-utils": "^7.13.0" + "@babel/helper-plugin-utils": "^7.18.9" } }, "@babel/plugin-transform-typeof-symbol": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.12.13.tgz", - "integrity": "sha512-eKv/LmUJpMnu4npgfvs3LiHhJua5fo/CysENxa45YCQXZwKnGCQKAg87bvoqSW1fFT+HA32l03Qxsm8ouTY3ZQ==", + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.9.tgz", + "integrity": "sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw==", "requires": { - "@babel/helper-plugin-utils": "^7.12.13" + "@babel/helper-plugin-utils": "^7.18.9" } }, "@babel/plugin-transform-typescript": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.13.0.tgz", - "integrity": "sha512-elQEwluzaU8R8dbVuW2Q2Y8Nznf7hnjM7+DSCd14Lo5fF63C9qNLbwZYbmZrtV9/ySpSUpkRpQXvJb6xyu4hCQ==", + "version": "7.19.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.19.3.tgz", + "integrity": "sha512-z6fnuK9ve9u/0X0rRvI9MY0xg+DOUaABDYOe+/SQTxtlptaBB/V9JIUxJn6xp3lMBeb9qe8xSFmHU35oZDXD+w==", "requires": { - "@babel/helper-create-class-features-plugin": "^7.13.0", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/plugin-syntax-typescript": "^7.12.13" + "@babel/helper-create-class-features-plugin": "^7.19.0", + "@babel/helper-plugin-utils": "^7.19.0", + "@babel/plugin-syntax-typescript": "^7.18.6" } }, "@babel/plugin-transform-unicode-escapes": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.12.13.tgz", - "integrity": "sha512-0bHEkdwJ/sN/ikBHfSmOXPypN/beiGqjo+o4/5K+vxEFNPRPdImhviPakMKG4x96l85emoa0Z6cDflsdBusZbw==", + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.18.10.tgz", + "integrity": "sha512-kKAdAI+YzPgGY/ftStBFXTI1LZFju38rYThnfMykS+IXy8BVx+res7s2fxf1l8I35DV2T97ezo6+SGrXz6B3iQ==", "requires": { - "@babel/helper-plugin-utils": "^7.12.13" + "@babel/helper-plugin-utils": "^7.18.9" } }, "@babel/plugin-transform-unicode-regex": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.12.13.tgz", - "integrity": "sha512-mDRzSNY7/zopwisPZ5kM9XKCfhchqIYwAKRERtEnhYscZB79VRekuRSoYbN0+KVe3y8+q1h6A4svXtP7N+UoCA==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz", + "integrity": "sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==", "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.12.13", - "@babel/helper-plugin-utils": "^7.12.13" + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" } }, "@babel/preset-env": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.14.2.tgz", - "integrity": "sha512-7dD7lVT8GMrE73v4lvDEb85cgcQhdES91BSD7jS/xjC6QY8PnRhux35ac+GCpbiRhp8crexBvZZqnaL6VrY8TQ==", - "requires": { - "@babel/compat-data": "^7.14.0", - "@babel/helper-compilation-targets": "^7.13.16", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-validator-option": "^7.12.17", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.13.12", - "@babel/plugin-proposal-async-generator-functions": "^7.14.2", - "@babel/plugin-proposal-class-properties": "^7.13.0", - "@babel/plugin-proposal-class-static-block": "^7.13.11", - "@babel/plugin-proposal-dynamic-import": "^7.14.2", - "@babel/plugin-proposal-export-namespace-from": "^7.14.2", - "@babel/plugin-proposal-json-strings": "^7.14.2", - "@babel/plugin-proposal-logical-assignment-operators": "^7.14.2", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.14.2", - "@babel/plugin-proposal-numeric-separator": "^7.14.2", - "@babel/plugin-proposal-object-rest-spread": "^7.14.2", - "@babel/plugin-proposal-optional-catch-binding": "^7.14.2", - "@babel/plugin-proposal-optional-chaining": "^7.14.2", - "@babel/plugin-proposal-private-methods": "^7.13.0", - "@babel/plugin-proposal-private-property-in-object": "^7.14.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.12.13", + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.19.4.tgz", + "integrity": "sha512-5QVOTXUdqTCjQuh2GGtdd7YEhoRXBMVGROAtsBeLGIbIz3obCBIfRMT1I3ZKkMgNzwkyCkftDXSSkHxnfVf4qg==", + "requires": { + "@babel/compat-data": "^7.19.4", + "@babel/helper-compilation-targets": "^7.19.3", + "@babel/helper-plugin-utils": "^7.19.0", + "@babel/helper-validator-option": "^7.18.6", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.18.6", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.18.9", + "@babel/plugin-proposal-async-generator-functions": "^7.19.1", + "@babel/plugin-proposal-class-properties": "^7.18.6", + "@babel/plugin-proposal-class-static-block": "^7.18.6", + "@babel/plugin-proposal-dynamic-import": "^7.18.6", + "@babel/plugin-proposal-export-namespace-from": "^7.18.9", + "@babel/plugin-proposal-json-strings": "^7.18.6", + "@babel/plugin-proposal-logical-assignment-operators": "^7.18.9", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.6", + "@babel/plugin-proposal-numeric-separator": "^7.18.6", + "@babel/plugin-proposal-object-rest-spread": "^7.19.4", + "@babel/plugin-proposal-optional-catch-binding": "^7.18.6", + "@babel/plugin-proposal-optional-chaining": "^7.18.9", + "@babel/plugin-proposal-private-methods": "^7.18.6", + "@babel/plugin-proposal-private-property-in-object": "^7.18.6", + "@babel/plugin-proposal-unicode-property-regex": "^7.18.6", "@babel/plugin-syntax-async-generators": "^7.8.4", "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-syntax-class-static-block": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", "@babel/plugin-syntax-dynamic-import": "^7.8.3", "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-import-assertions": "^7.18.6", "@babel/plugin-syntax-json-strings": "^7.8.3", "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", @@ -16871,46 +14858,46 @@ "@babel/plugin-syntax-object-rest-spread": "^7.8.3", "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-private-property-in-object": "^7.14.0", - "@babel/plugin-syntax-top-level-await": "^7.12.13", - "@babel/plugin-transform-arrow-functions": "^7.13.0", - "@babel/plugin-transform-async-to-generator": "^7.13.0", - "@babel/plugin-transform-block-scoped-functions": "^7.12.13", - "@babel/plugin-transform-block-scoping": "^7.14.2", - "@babel/plugin-transform-classes": "^7.14.2", - "@babel/plugin-transform-computed-properties": "^7.13.0", - "@babel/plugin-transform-destructuring": "^7.13.17", - "@babel/plugin-transform-dotall-regex": "^7.12.13", - "@babel/plugin-transform-duplicate-keys": "^7.12.13", - "@babel/plugin-transform-exponentiation-operator": "^7.12.13", - "@babel/plugin-transform-for-of": "^7.13.0", - "@babel/plugin-transform-function-name": "^7.12.13", - "@babel/plugin-transform-literals": "^7.12.13", - "@babel/plugin-transform-member-expression-literals": "^7.12.13", - "@babel/plugin-transform-modules-amd": "^7.14.2", - "@babel/plugin-transform-modules-commonjs": "^7.14.0", - "@babel/plugin-transform-modules-systemjs": "^7.13.8", - "@babel/plugin-transform-modules-umd": "^7.14.0", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.12.13", - "@babel/plugin-transform-new-target": "^7.12.13", - "@babel/plugin-transform-object-super": "^7.12.13", - "@babel/plugin-transform-parameters": "^7.14.2", - "@babel/plugin-transform-property-literals": "^7.12.13", - "@babel/plugin-transform-regenerator": "^7.13.15", - "@babel/plugin-transform-reserved-words": "^7.12.13", - "@babel/plugin-transform-shorthand-properties": "^7.12.13", - "@babel/plugin-transform-spread": "^7.13.0", - "@babel/plugin-transform-sticky-regex": "^7.12.13", - "@babel/plugin-transform-template-literals": "^7.13.0", - "@babel/plugin-transform-typeof-symbol": "^7.12.13", - "@babel/plugin-transform-unicode-escapes": "^7.12.13", - "@babel/plugin-transform-unicode-regex": "^7.12.13", - "@babel/preset-modules": "^0.1.4", - "@babel/types": "^7.14.2", - "babel-plugin-polyfill-corejs2": "^0.2.0", - "babel-plugin-polyfill-corejs3": "^0.2.0", - "babel-plugin-polyfill-regenerator": "^0.2.0", - "core-js-compat": "^3.9.0", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5", + "@babel/plugin-transform-arrow-functions": "^7.18.6", + "@babel/plugin-transform-async-to-generator": "^7.18.6", + "@babel/plugin-transform-block-scoped-functions": "^7.18.6", + "@babel/plugin-transform-block-scoping": "^7.19.4", + "@babel/plugin-transform-classes": "^7.19.0", + "@babel/plugin-transform-computed-properties": "^7.18.9", + "@babel/plugin-transform-destructuring": "^7.19.4", + "@babel/plugin-transform-dotall-regex": "^7.18.6", + "@babel/plugin-transform-duplicate-keys": "^7.18.9", + "@babel/plugin-transform-exponentiation-operator": "^7.18.6", + "@babel/plugin-transform-for-of": "^7.18.8", + "@babel/plugin-transform-function-name": "^7.18.9", + "@babel/plugin-transform-literals": "^7.18.9", + "@babel/plugin-transform-member-expression-literals": "^7.18.6", + "@babel/plugin-transform-modules-amd": "^7.18.6", + "@babel/plugin-transform-modules-commonjs": "^7.18.6", + "@babel/plugin-transform-modules-systemjs": "^7.19.0", + "@babel/plugin-transform-modules-umd": "^7.18.6", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.19.1", + "@babel/plugin-transform-new-target": "^7.18.6", + "@babel/plugin-transform-object-super": "^7.18.6", + "@babel/plugin-transform-parameters": "^7.18.8", + "@babel/plugin-transform-property-literals": "^7.18.6", + "@babel/plugin-transform-regenerator": "^7.18.6", + "@babel/plugin-transform-reserved-words": "^7.18.6", + "@babel/plugin-transform-shorthand-properties": "^7.18.6", + "@babel/plugin-transform-spread": "^7.19.0", + "@babel/plugin-transform-sticky-regex": "^7.18.6", + "@babel/plugin-transform-template-literals": "^7.18.9", + "@babel/plugin-transform-typeof-symbol": "^7.18.9", + "@babel/plugin-transform-unicode-escapes": "^7.18.10", + "@babel/plugin-transform-unicode-regex": "^7.18.6", + "@babel/preset-modules": "^0.1.5", + "@babel/types": "^7.19.4", + "babel-plugin-polyfill-corejs2": "^0.3.3", + "babel-plugin-polyfill-corejs3": "^0.6.0", + "babel-plugin-polyfill-regenerator": "^0.4.1", + "core-js-compat": "^3.25.1", "semver": "^6.3.0" }, "dependencies": { @@ -16922,9 +14909,9 @@ } }, "@babel/preset-modules": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.4.tgz", - "integrity": "sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg==", + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", + "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", "requires": { "@babel/helper-plugin-utils": "^7.0.0", "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", @@ -16934,559 +14921,806 @@ } }, "@babel/preset-react": { - "version": "7.13.13", - "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.13.13.tgz", - "integrity": "sha512-gx+tDLIE06sRjKJkVtpZ/t3mzCDOnPG+ggHZG9lffUbX8+wC739x20YQc9V35Do6ZAxaUc/HhVHIiOzz5MvDmA==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.18.6.tgz", + "integrity": "sha512-zXr6atUmyYdiWRVLOZahakYmOBHtWc2WGCkP8PYTgZi0iJXDY2CN180TdrIW4OGOAdLc7TifzDIvtx6izaRIzg==", "requires": { - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-validator-option": "^7.12.17", - "@babel/plugin-transform-react-display-name": "^7.12.13", - "@babel/plugin-transform-react-jsx": "^7.13.12", - "@babel/plugin-transform-react-jsx-development": "^7.12.17", - "@babel/plugin-transform-react-pure-annotations": "^7.12.1" + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-validator-option": "^7.18.6", + "@babel/plugin-transform-react-display-name": "^7.18.6", + "@babel/plugin-transform-react-jsx": "^7.18.6", + "@babel/plugin-transform-react-jsx-development": "^7.18.6", + "@babel/plugin-transform-react-pure-annotations": "^7.18.6" } }, "@babel/preset-typescript": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.13.0.tgz", - "integrity": "sha512-LXJwxrHy0N3f6gIJlYbLta1D9BDtHpQeqwzM0LIfjDlr6UE/D5Mc7W4iDiQzaE+ks0sTjT26ArcHWnJVt0QiHw==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.18.6.tgz", + "integrity": "sha512-s9ik86kXBAnD760aybBucdpnLsAt0jK1xqJn2juOn9lkOvSHV60os5hxoVJsPzMQxvnUJFAlkont2DvvaYEBtQ==", "requires": { - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-validator-option": "^7.12.17", - "@babel/plugin-transform-typescript": "^7.13.0" + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-validator-option": "^7.18.6", + "@babel/plugin-transform-typescript": "^7.18.6" } }, "@babel/runtime": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.14.0.tgz", - "integrity": "sha512-JELkvo/DlpNdJ7dlyw/eY7E0suy5i5GQH+Vlxaq1nsNJ+H7f4Vtv3jMeCEgRhZZQFXTjldYfQgv2qmM6M1v5wA==", + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.19.4.tgz", + "integrity": "sha512-EXpLCrk55f+cYqmHsSR+yD/0gAIMxxA9QK9lnQWzhMCvt+YmoBN7Zx94s++Kv0+unHk39vxNO8t+CMA2WSS3wA==", "requires": { "regenerator-runtime": "^0.13.4" } }, "@babel/runtime-corejs3": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.14.0.tgz", - "integrity": "sha512-0R0HTZWHLk6G8jIk0FtoX+AatCtKnswS98VhXwGImFc759PJRp4Tru0PQYZofyijTFUr+gT8Mu7sgXVJLQ0ceg==", + "version": "7.19.6", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.19.6.tgz", + "integrity": "sha512-oWNn1ZlGde7b4i/3tnixpH9qI0bOAACiUs+KEES4UUCnsPjVWFlWdLV/iwJuPC2qp3EowbAqsm+0XqNwnwYhxA==", "requires": { - "core-js-pure": "^3.0.0", + "core-js-pure": "^3.25.1", "regenerator-runtime": "^0.13.4" } }, "@babel/template": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.13.tgz", - "integrity": "sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA==", + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz", + "integrity": "sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==", "requires": { - "@babel/code-frame": "^7.12.13", - "@babel/parser": "^7.12.13", - "@babel/types": "^7.12.13" + "@babel/code-frame": "^7.18.6", + "@babel/parser": "^7.18.10", + "@babel/types": "^7.18.10" } }, "@babel/traverse": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.2.tgz", - "integrity": "sha512-TsdRgvBFHMyHOOzcP9S6QU0QQtjxlRpEYOy3mcCO5RgmC305ki42aSAmfZEMSSYBla2oZ9BMqYlncBaKmD/7iA==", - "requires": { - "@babel/code-frame": "^7.12.13", - "@babel/generator": "^7.14.2", - "@babel/helper-function-name": "^7.14.2", - "@babel/helper-split-export-declaration": "^7.12.13", - "@babel/parser": "^7.14.2", - "@babel/types": "^7.14.2", + "version": "7.19.6", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.19.6.tgz", + "integrity": "sha512-6l5HrUCzFM04mfbG09AagtYyR2P0B71B1wN7PfSPiksDPz2k5H9CBC1tcZpz2M8OxbKTPccByoOJ22rUKbpmQQ==", + "requires": { + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.19.6", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.19.0", + "@babel/helper-hoist-variables": "^7.18.6", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/parser": "^7.19.6", + "@babel/types": "^7.19.4", "debug": "^4.1.0", "globals": "^11.1.0" } }, "@babel/types": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.2.tgz", - "integrity": "sha512-SdjAG/3DikRHpUOjxZgnkbR11xUlyDMUFJdvnIgZEE16mqmY0BINMmc4//JMJglEmn6i7sq6p+mGrFWyZ98EEw==", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.20.7.tgz", + "integrity": "sha512-69OnhBxSSgK0OzTJai4kyPDiKTIe3j+ctaHdIGVbRahTLAT7L3R9oeXHC2aVSuGYt3cVnoAMDmOCgJ2yaiLMvg==", "requires": { - "@babel/helper-validator-identifier": "^7.14.0", + "@babel/helper-string-parser": "^7.19.4", + "@babel/helper-validator-identifier": "^7.19.1", "to-fast-properties": "^2.0.0" } }, + "@colors/colors": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", + "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", + "optional": true + }, "@crowdin/cli": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/@crowdin/cli/-/cli-3.6.1.tgz", - "integrity": "sha512-RUKFrPCX3R1MJPyRpBSqWFwmjbDlVWLHtXAzx2FPeyjnyMXrXLPJ8YEl4t8YU+96q/0t46qTdmMLeQmYyDEvGQ==", + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/@crowdin/cli/-/cli-3.9.0.tgz", + "integrity": "sha512-4wQjqJZmU/mg3VYfRL6IYXw/pPAL9vdfW3QVSBovYA+bYaEt43ZuGsSrqeBGOhLehasWwRqklXWsl96gxQlLdw==", "requires": { + "njre": "^0.2.0", "shelljs": "^0.8.4" } }, "@docsearch/css": { - "version": "3.0.0-alpha.36", - "resolved": "https://registry.npmjs.org/@docsearch/css/-/css-3.0.0-alpha.36.tgz", - "integrity": "sha512-zSN2SXuZPDqQaSFzYa1kOwToukqzhLHG7c66iO+/PlmWb6/RZ5cjTkG6VCJynlohRWea7AqZKWS/ptm8kM2Dmg==" + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/@docsearch/css/-/css-3.2.2.tgz", + "integrity": "sha512-VB0Evx4ikS1ZlW1YVUw+vI9b3H/UXMCo4W/ZWy+n56Sho4KOqyCHcINVays91TJt7HTV/CKO3FCbm2VJg5Wipw==" }, "@docsearch/react": { - "version": "3.0.0-alpha.36", - "resolved": "https://registry.npmjs.org/@docsearch/react/-/react-3.0.0-alpha.36.tgz", - "integrity": "sha512-synYZDHalvMzesFiy7kK+uoz4oTdWSTbe2cU+iiUjwFMyQ+WWjWwGVnvcvk+cjj9pRCVaZo5y5WpqNXq1j8k9Q==", + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/@docsearch/react/-/react-3.2.2.tgz", + "integrity": "sha512-1Hn2SNQUFVPrzqvaj+vxXZfsfn3rnW8CoyGAJ1LqXMY9py8GbxK8VfmJ5Z6z4LwG9849tGru/N6dp0cQO6r9Ag==", "requires": { - "@algolia/autocomplete-core": "1.0.0-alpha.44", - "@algolia/autocomplete-preset-algolia": "1.0.0-alpha.44", - "@docsearch/css": "3.0.0-alpha.36", + "@algolia/autocomplete-core": "1.7.1", + "@algolia/autocomplete-preset-algolia": "1.7.1", + "@docsearch/css": "3.2.2", "algoliasearch": "^4.0.0" } }, "@docusaurus/core": { - "version": "2.0.0-beta.0", - "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-2.0.0-beta.0.tgz", - "integrity": "sha512-xWwpuEwFRKJmZvNGOpr/dyRDnx/psckLPsozQTg2hu3u81Wqu9gigWgYK/C2fPlEjxMcVw0/2WH+zwpbyWmF2Q==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-2.2.0.tgz", + "integrity": "sha512-Vd6XOluKQqzG12fEs9prJgDtyn6DPok9vmUWDR2E6/nV5Fl9SVkhEQOBxwObjk3kQh7OY7vguFaLh0jqdApWsA==", "requires": { - "@babel/core": "^7.12.16", - "@babel/generator": "^7.12.15", + "@babel/core": "^7.18.6", + "@babel/generator": "^7.18.7", "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-transform-runtime": "^7.12.15", - "@babel/preset-env": "^7.12.16", - "@babel/preset-react": "^7.12.13", - "@babel/preset-typescript": "^7.12.16", - "@babel/runtime": "^7.12.5", - "@babel/runtime-corejs3": "^7.12.13", - "@babel/traverse": "^7.12.13", - "@docusaurus/cssnano-preset": "2.0.0-beta.0", - "@docusaurus/react-loadable": "5.5.0", - "@docusaurus/types": "2.0.0-beta.0", - "@docusaurus/utils": "2.0.0-beta.0", - "@docusaurus/utils-validation": "2.0.0-beta.0", - "@endiliey/static-site-generator-webpack-plugin": "^4.0.0", - "@svgr/webpack": "^5.5.0", - "autoprefixer": "^10.2.5", - "babel-loader": "^8.2.2", - "babel-plugin-dynamic-import-node": "2.3.0", - "boxen": "^5.0.0", - "chalk": "^4.1.0", - "chokidar": "^3.5.1", - "clean-css": "^5.1.1", + "@babel/plugin-transform-runtime": "^7.18.6", + "@babel/preset-env": "^7.18.6", + "@babel/preset-react": "^7.18.6", + "@babel/preset-typescript": "^7.18.6", + "@babel/runtime": "^7.18.6", + "@babel/runtime-corejs3": "^7.18.6", + "@babel/traverse": "^7.18.8", + "@docusaurus/cssnano-preset": "2.2.0", + "@docusaurus/logger": "2.2.0", + "@docusaurus/mdx-loader": "2.2.0", + "@docusaurus/react-loadable": "5.5.2", + "@docusaurus/utils": "2.2.0", + "@docusaurus/utils-common": "2.2.0", + "@docusaurus/utils-validation": "2.2.0", + "@slorber/static-site-generator-webpack-plugin": "^4.0.7", + "@svgr/webpack": "^6.2.1", + "autoprefixer": "^10.4.7", + "babel-loader": "^8.2.5", + "babel-plugin-dynamic-import-node": "^2.3.3", + "boxen": "^6.2.1", + "chalk": "^4.1.2", + "chokidar": "^3.5.3", + "clean-css": "^5.3.0", + "cli-table3": "^0.6.2", + "combine-promises": "^1.1.0", "commander": "^5.1.0", - "copy-webpack-plugin": "^8.1.0", - "core-js": "^3.9.1", - "css-loader": "^5.1.1", - "css-minimizer-webpack-plugin": "^2.0.0", - "cssnano": "^5.0.1", - "del": "^6.0.0", + "copy-webpack-plugin": "^11.0.0", + "core-js": "^3.23.3", + "css-loader": "^6.7.1", + "css-minimizer-webpack-plugin": "^4.0.0", + "cssnano": "^5.1.12", + "del": "^6.1.1", "detect-port": "^1.3.0", - "eta": "^1.12.1", - "express": "^4.17.1", + "escape-html": "^1.0.3", + "eta": "^1.12.3", "file-loader": "^6.2.0", - "fs-extra": "^9.1.0", - "github-slugger": "^1.3.0", - "globby": "^11.0.2", - "html-minifier-terser": "^5.1.1", - "html-tags": "^3.1.0", - "html-webpack-plugin": "^5.2.0", + "fs-extra": "^10.1.0", + "html-minifier-terser": "^6.1.0", + "html-tags": "^3.2.0", + "html-webpack-plugin": "^5.5.0", "import-fresh": "^3.3.0", - "is-root": "^2.1.0", "leven": "^3.1.0", - "lodash": "^4.17.20", - "mini-css-extract-plugin": "^1.4.0", - "module-alias": "^2.2.2", - "nprogress": "^0.2.0", - "postcss": "^8.2.10", - "postcss-loader": "^5.2.0", - "prompts": "^2.4.0", - "react-dev-utils": "^11.0.1", - "react-error-overlay": "^6.0.9", - "react-helmet": "^6.1.0", - "react-loadable": "^5.5.0", + "lodash": "^4.17.21", + "mini-css-extract-plugin": "^2.6.1", + "postcss": "^8.4.14", + "postcss-loader": "^7.0.0", + "prompts": "^2.4.2", + "react-dev-utils": "^12.0.1", + "react-helmet-async": "^1.3.0", + "react-loadable": "npm:@docusaurus/react-loadable@5.5.2", "react-loadable-ssr-addon-v5-slorber": "^1.0.1", - "react-router": "^5.2.0", + "react-router": "^5.3.3", "react-router-config": "^5.1.1", - "react-router-dom": "^5.2.0", - "resolve-pathname": "^3.0.0", - "rtl-detect": "^1.0.2", - "semver": "^7.3.4", + "react-router-dom": "^5.3.3", + "rtl-detect": "^1.0.4", + "semver": "^7.3.7", "serve-handler": "^6.1.3", - "shelljs": "^0.8.4", - "std-env": "^2.2.1", - "strip-ansi": "^6.0.0", - "terser-webpack-plugin": "^5.1.1", - "tslib": "^2.1.0", + "shelljs": "^0.8.5", + "terser-webpack-plugin": "^5.3.3", + "tslib": "^2.4.0", "update-notifier": "^5.1.0", "url-loader": "^4.1.1", - "wait-on": "^5.2.1", - "webpack": "^5.28.0", - "webpack-bundle-analyzer": "^4.4.0", - "webpack-dev-server": "^3.11.2", - "webpack-merge": "^5.7.3", - "webpackbar": "^5.0.0-3" + "wait-on": "^6.0.1", + "webpack": "^5.73.0", + "webpack-bundle-analyzer": "^4.5.0", + "webpack-dev-server": "^4.9.3", + "webpack-merge": "^5.8.0", + "webpackbar": "^5.0.2" }, "dependencies": { + "ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==" + }, + "ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==" + }, + "boxen": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-6.2.1.tgz", + "integrity": "sha512-H4PEsJXfFI/Pt8sjDWbHlQPx4zL/bvSQjcilJmaulGt5mLDorHOHpmdXAJcBcmru7PhYSp/cDMWRko4ZUMFkSw==", + "requires": { + "ansi-align": "^3.0.1", + "camelcase": "^6.2.0", + "chalk": "^4.1.2", + "cli-boxes": "^3.0.0", + "string-width": "^5.0.1", + "type-fest": "^2.5.0", + "widest-line": "^4.0.1", + "wrap-ansi": "^8.0.1" + } + }, + "cli-boxes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-3.0.0.tgz", + "integrity": "sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==" + }, + "emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" + }, "postcss-loader": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-5.3.0.tgz", - "integrity": "sha512-/+Z1RAmssdiSLgIZwnJHwBMnlABPgF7giYzTN2NOfr9D21IJZ4mQC1R2miwp80zno9M4zMD/umGI8cR+2EL5zw==", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-7.0.2.tgz", + "integrity": "sha512-fUJzV/QH7NXUAqV8dWJ9Lg4aTkDCezpTS5HgJ2DvqznexTbSTxgi/dTECvTZ15BwKTtk8G/bqI/QTu2HPd3ZCg==", "requires": { "cosmiconfig": "^7.0.0", - "klona": "^2.0.4", - "semver": "^7.3.4" + "klona": "^2.0.5", + "semver": "^7.3.8" + } + }, + "react-loadable": { + "version": "npm:@docusaurus/react-loadable@5.5.2", + "resolved": "https://registry.npmjs.org/@docusaurus/react-loadable/-/react-loadable-5.5.2.tgz", + "integrity": "sha512-A3dYjdBGuy0IGT+wyLIGIKLRE+sAk1iNk0f1HjNDysO7u8lhL4N3VEm+FAubmJbAztn94F7MxBTPmnixbiyFdQ==", + "requires": { + "@types/react": "*", + "prop-types": "^15.6.2" + } + }, + "string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "requires": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + } + }, + "strip-ansi": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", + "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", + "requires": { + "ansi-regex": "^6.0.1" + } + }, + "type-fest": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", + "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==" + }, + "widest-line": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-4.0.1.tgz", + "integrity": "sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig==", + "requires": { + "string-width": "^5.0.1" + } + }, + "wrap-ansi": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.0.1.tgz", + "integrity": "sha512-QFF+ufAqhoYHvoHdajT/Po7KoXVBPXS2bgjIam5isfWJPfIOnQZ50JtUiVvCv/sjgacf3yRrt2ZKUZ/V4itN4g==", + "requires": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" } } } }, "@docusaurus/cssnano-preset": { - "version": "2.0.0-beta.0", - "resolved": "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-2.0.0-beta.0.tgz", - "integrity": "sha512-gqQHeQCDHZDd5NaiKZwDiyg75sBCqDyAsvmFukkDAty8xE7u9IhzbOQKvCAtwseuvzu2BNN41gnJ8bz7vZzQiw==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-2.2.0.tgz", + "integrity": "sha512-mAAwCo4n66TMWBH1kXnHVZsakW9VAXJzTO4yZukuL3ro4F+JtkMwKfh42EG75K/J/YIFQG5I/Bzy0UH/hFxaTg==", + "requires": { + "cssnano-preset-advanced": "^5.3.8", + "postcss": "^8.4.14", + "postcss-sort-media-queries": "^4.2.1", + "tslib": "^2.4.0" + } + }, + "@docusaurus/logger": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@docusaurus/logger/-/logger-2.2.0.tgz", + "integrity": "sha512-DF3j1cA5y2nNsu/vk8AG7xwpZu6f5MKkPPMaaIbgXLnWGfm6+wkOeW7kNrxnM95YOhKUkJUophX69nGUnLsm0A==", "requires": { - "cssnano-preset-advanced": "^5.0.0", - "postcss": "^8.2.10", - "postcss-sort-media-queries": "^3.8.9" + "chalk": "^4.1.2", + "tslib": "^2.4.0" } }, "@docusaurus/mdx-loader": { - "version": "2.0.0-beta.0", - "resolved": "https://registry.npmjs.org/@docusaurus/mdx-loader/-/mdx-loader-2.0.0-beta.0.tgz", - "integrity": "sha512-oQLS2ZeUnqw79CV37glglZpaYgFfA5Az5lT83m5tJfMUZjoK4ehG1XWBeUzWy8QQNI452yAID8jz8jihEQeCcw==", - "requires": { - "@babel/parser": "^7.12.16", - "@babel/traverse": "^7.12.13", - "@docusaurus/core": "2.0.0-beta.0", - "@docusaurus/utils": "2.0.0-beta.0", - "@mdx-js/mdx": "^1.6.21", - "@mdx-js/react": "^1.6.21", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@docusaurus/mdx-loader/-/mdx-loader-2.2.0.tgz", + "integrity": "sha512-X2bzo3T0jW0VhUU+XdQofcEeozXOTmKQMvc8tUnWRdTnCvj4XEcBVdC3g+/jftceluiwSTNRAX4VBOJdNt18jA==", + "requires": { + "@babel/parser": "^7.18.8", + "@babel/traverse": "^7.18.8", + "@docusaurus/logger": "2.2.0", + "@docusaurus/utils": "2.2.0", + "@mdx-js/mdx": "^1.6.22", "escape-html": "^1.0.3", "file-loader": "^6.2.0", - "fs-extra": "^9.1.0", - "github-slugger": "^1.3.0", - "gray-matter": "^4.0.2", + "fs-extra": "^10.1.0", + "image-size": "^1.0.1", "mdast-util-to-string": "^2.0.0", - "remark-emoji": "^2.1.0", + "remark-emoji": "^2.2.0", "stringify-object": "^3.3.0", - "unist-util-visit": "^2.0.2", + "tslib": "^2.4.0", + "unified": "^9.2.2", + "unist-util-visit": "^2.0.3", "url-loader": "^4.1.1", - "webpack": "^5.28.0" + "webpack": "^5.73.0" + }, + "dependencies": { + "unified": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.2.tgz", + "integrity": "sha512-Sg7j110mtefBD+qunSLO1lqOEKdrwBFBrR6Qd8f4uwkhWNlbkaqwHse6e7QvD3AP/MNoJdEDLaf8OxYyoWgorQ==", + "requires": { + "bail": "^1.0.0", + "extend": "^3.0.0", + "is-buffer": "^2.0.0", + "is-plain-obj": "^2.0.0", + "trough": "^1.0.0", + "vfile": "^4.0.0" + } + } + } + }, + "@docusaurus/module-type-aliases": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@docusaurus/module-type-aliases/-/module-type-aliases-2.2.0.tgz", + "integrity": "sha512-wDGW4IHKoOr9YuJgy7uYuKWrDrSpsUSDHLZnWQYM9fN7D5EpSmYHjFruUpKWVyxLpD/Wh0rW8hYZwdjJIQUQCQ==", + "requires": { + "@docusaurus/react-loadable": "5.5.2", + "@docusaurus/types": "2.2.0", + "@types/history": "^4.7.11", + "@types/react": "*", + "@types/react-router-config": "*", + "@types/react-router-dom": "*", + "react-helmet-async": "*", + "react-loadable": "npm:@docusaurus/react-loadable@5.5.2" + }, + "dependencies": { + "react-loadable": { + "version": "npm:@docusaurus/react-loadable@5.5.2", + "resolved": "https://registry.npmjs.org/@docusaurus/react-loadable/-/react-loadable-5.5.2.tgz", + "integrity": "sha512-A3dYjdBGuy0IGT+wyLIGIKLRE+sAk1iNk0f1HjNDysO7u8lhL4N3VEm+FAubmJbAztn94F7MxBTPmnixbiyFdQ==", + "requires": { + "@types/react": "*", + "prop-types": "^15.6.2" + } + } } }, "@docusaurus/plugin-content-blog": { - "version": "2.0.0-beta.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-blog/-/plugin-content-blog-2.0.0-beta.0.tgz", - "integrity": "sha512-lz63i5k/23RJ3Rk/2fIsYAoD8Wua3b5b0AbH2JoOhQu1iAIQiV8m91Z3XALBSzA3nBtAOIweNI7yzWL+JFSTvw==", - "requires": { - "@docusaurus/core": "2.0.0-beta.0", - "@docusaurus/mdx-loader": "2.0.0-beta.0", - "@docusaurus/types": "2.0.0-beta.0", - "@docusaurus/utils": "2.0.0-beta.0", - "@docusaurus/utils-validation": "2.0.0-beta.0", - "chalk": "^4.1.0", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-blog/-/plugin-content-blog-2.2.0.tgz", + "integrity": "sha512-0mWBinEh0a5J2+8ZJXJXbrCk1tSTNf7Nm4tYAl5h2/xx+PvH/Bnu0V+7mMljYm/1QlDYALNIIaT/JcoZQFUN3w==", + "requires": { + "@docusaurus/core": "2.2.0", + "@docusaurus/logger": "2.2.0", + "@docusaurus/mdx-loader": "2.2.0", + "@docusaurus/types": "2.2.0", + "@docusaurus/utils": "2.2.0", + "@docusaurus/utils-common": "2.2.0", + "@docusaurus/utils-validation": "2.2.0", + "cheerio": "^1.0.0-rc.12", "feed": "^4.2.2", - "fs-extra": "^9.1.0", - "globby": "^11.0.2", - "loader-utils": "^2.0.0", - "lodash": "^4.17.20", - "reading-time": "^1.3.0", - "remark-admonitions": "^1.2.1", - "tslib": "^2.1.0", - "webpack": "^5.28.0" + "fs-extra": "^10.1.0", + "lodash": "^4.17.21", + "reading-time": "^1.5.0", + "tslib": "^2.4.0", + "unist-util-visit": "^2.0.3", + "utility-types": "^3.10.0", + "webpack": "^5.73.0" } }, "@docusaurus/plugin-content-docs": { - "version": "2.0.0-beta.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-docs/-/plugin-content-docs-2.0.0-beta.0.tgz", - "integrity": "sha512-WdDQUh2rRCbfJswVc0vY9EaAspxgziqpVEZja8+BmQR/TZh7HuLplT6GJbiFbE4RvwM3+PwG/jHMPglYDK60kw==", - "requires": { - "@docusaurus/core": "2.0.0-beta.0", - "@docusaurus/mdx-loader": "2.0.0-beta.0", - "@docusaurus/types": "2.0.0-beta.0", - "@docusaurus/utils": "2.0.0-beta.0", - "@docusaurus/utils-validation": "2.0.0-beta.0", - "chalk": "^4.1.0", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-docs/-/plugin-content-docs-2.2.0.tgz", + "integrity": "sha512-BOazBR0XjzsHE+2K1wpNxz5QZmrJgmm3+0Re0EVPYFGW8qndCWGNtXW/0lGKhecVPML8yyFeAmnUCIs7xM2wPw==", + "requires": { + "@docusaurus/core": "2.2.0", + "@docusaurus/logger": "2.2.0", + "@docusaurus/mdx-loader": "2.2.0", + "@docusaurus/module-type-aliases": "2.2.0", + "@docusaurus/types": "2.2.0", + "@docusaurus/utils": "2.2.0", + "@docusaurus/utils-validation": "2.2.0", + "@types/react-router-config": "^5.0.6", "combine-promises": "^1.1.0", - "execa": "^5.0.0", - "fs-extra": "^9.1.0", - "globby": "^11.0.2", - "import-fresh": "^3.2.2", - "js-yaml": "^4.0.0", - "loader-utils": "^1.2.3", - "lodash": "^4.17.20", - "remark-admonitions": "^1.2.1", - "shelljs": "^0.8.4", - "tslib": "^2.1.0", + "fs-extra": "^10.1.0", + "import-fresh": "^3.3.0", + "js-yaml": "^4.1.0", + "lodash": "^4.17.21", + "tslib": "^2.4.0", "utility-types": "^3.10.0", - "webpack": "^5.28.0" - }, - "dependencies": { - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "requires": { - "minimist": "^1.2.0" - } - }, - "loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - } - } + "webpack": "^5.73.0" } }, "@docusaurus/plugin-content-pages": { - "version": "2.0.0-beta.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-pages/-/plugin-content-pages-2.0.0-beta.0.tgz", - "integrity": "sha512-mk5LVVSvn+HJPKBaAs/Pceq/hTGxF2LVBvJEquuQz0NMAW3QdBWaYRRpOrL9CO8v+ygn5RuLslXsyZBsDNuhww==", - "requires": { - "@docusaurus/core": "2.0.0-beta.0", - "@docusaurus/mdx-loader": "2.0.0-beta.0", - "@docusaurus/types": "2.0.0-beta.0", - "@docusaurus/utils": "2.0.0-beta.0", - "@docusaurus/utils-validation": "2.0.0-beta.0", - "globby": "^11.0.2", - "lodash": "^4.17.20", - "minimatch": "^3.0.4", - "remark-admonitions": "^1.2.1", - "slash": "^3.0.0", - "tslib": "^2.1.0", - "webpack": "^5.28.0" + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-pages/-/plugin-content-pages-2.2.0.tgz", + "integrity": "sha512-+OTK3FQHk5WMvdelz8v19PbEbx+CNT6VSpx7nVOvMNs5yJCKvmqBJBQ2ZSxROxhVDYn+CZOlmyrC56NSXzHf6g==", + "requires": { + "@docusaurus/core": "2.2.0", + "@docusaurus/mdx-loader": "2.2.0", + "@docusaurus/types": "2.2.0", + "@docusaurus/utils": "2.2.0", + "@docusaurus/utils-validation": "2.2.0", + "fs-extra": "^10.1.0", + "tslib": "^2.4.0", + "webpack": "^5.73.0" } }, "@docusaurus/plugin-debug": { - "version": "2.0.0-beta.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-debug/-/plugin-debug-2.0.0-beta.0.tgz", - "integrity": "sha512-m75sZdF8Yccxfih3qfdQg9DucMTrYBnmeTA8GNmdVaK701Ip8t50d1pDJchtu0FSEh6vzVB9C6D2YD5YgVFp8A==", - "requires": { - "@docusaurus/core": "2.0.0-beta.0", - "@docusaurus/types": "2.0.0-beta.0", - "@docusaurus/utils": "2.0.0-beta.0", - "react-json-view": "^1.21.1", - "tslib": "^2.1.0" + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-debug/-/plugin-debug-2.2.0.tgz", + "integrity": "sha512-p9vOep8+7OVl6r/NREEYxf4HMAjV8JMYJ7Bos5fCFO0Wyi9AZEo0sCTliRd7R8+dlJXZEgcngSdxAUo/Q+CJow==", + "requires": { + "@docusaurus/core": "2.2.0", + "@docusaurus/types": "2.2.0", + "@docusaurus/utils": "2.2.0", + "fs-extra": "^10.1.0", + "react-json-view": "^1.21.3", + "tslib": "^2.4.0" } }, "@docusaurus/plugin-google-analytics": { - "version": "2.0.0-beta.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-2.0.0-beta.0.tgz", - "integrity": "sha512-7lHrg1L+adc8VbiaLexa15i4fdq4MRPUTLMxRPAWz+QskhisW89Ryi2/gDmfMNqLblX84Qg2RASa+2gqO4wepw==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-2.2.0.tgz", + "integrity": "sha512-+eZVVxVeEnV5nVQJdey9ZsfyEVMls6VyWTIj8SmX0k5EbqGvnIfET+J2pYEuKQnDIHxy+syRMoRM6AHXdHYGIg==", "requires": { - "@docusaurus/core": "2.0.0-beta.0" + "@docusaurus/core": "2.2.0", + "@docusaurus/types": "2.2.0", + "@docusaurus/utils-validation": "2.2.0", + "tslib": "^2.4.0" } }, "@docusaurus/plugin-google-gtag": { - "version": "2.0.0-beta.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-2.0.0-beta.0.tgz", - "integrity": "sha512-V7zaYbhAMv0jexm5H/5sAnoM1GHibcn9QQk5UWC++x1kE0KRuLDZHV+9OyvW5wr0wWFajod/b88SpUpSMF5u+g==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-2.2.0.tgz", + "integrity": "sha512-6SOgczP/dYdkqUMGTRqgxAS1eTp6MnJDAQMy8VCF1QKbWZmlkx4agHDexihqmYyCujTYHqDAhm1hV26EET54NQ==", "requires": { - "@docusaurus/core": "2.0.0-beta.0" + "@docusaurus/core": "2.2.0", + "@docusaurus/types": "2.2.0", + "@docusaurus/utils-validation": "2.2.0", + "tslib": "^2.4.0" } }, "@docusaurus/plugin-sitemap": { - "version": "2.0.0-beta.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-sitemap/-/plugin-sitemap-2.0.0-beta.0.tgz", - "integrity": "sha512-dvmk8Sr+6pBkiKDb7Rjdp0GeFDWPUlayoJWK3fN3g0Fno6uxFfYhNZyXJ+ObyCA7HoW5rzeBMiO+uAja19JXTg==", - "requires": { - "@docusaurus/core": "2.0.0-beta.0", - "@docusaurus/types": "2.0.0-beta.0", - "@docusaurus/utils": "2.0.0-beta.0", - "@docusaurus/utils-validation": "2.0.0-beta.0", - "fs-extra": "^9.1.0", - "sitemap": "^6.3.6", - "tslib": "^2.1.0" + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-sitemap/-/plugin-sitemap-2.2.0.tgz", + "integrity": "sha512-0jAmyRDN/aI265CbWZNZuQpFqiZuo+5otk2MylU9iVrz/4J7gSc+ZJ9cy4EHrEsW7PV8s1w18hIEsmcA1YgkKg==", + "requires": { + "@docusaurus/core": "2.2.0", + "@docusaurus/logger": "2.2.0", + "@docusaurus/types": "2.2.0", + "@docusaurus/utils": "2.2.0", + "@docusaurus/utils-common": "2.2.0", + "@docusaurus/utils-validation": "2.2.0", + "fs-extra": "^10.1.0", + "sitemap": "^7.1.1", + "tslib": "^2.4.0" } }, "@docusaurus/preset-classic": { - "version": "2.0.0-beta.0", - "resolved": "https://registry.npmjs.org/@docusaurus/preset-classic/-/preset-classic-2.0.0-beta.0.tgz", - "integrity": "sha512-cFpR0UaAeUt5qVx1bpidhlar6tiRNITIQlxP4bOVsjbxVTZhZ/cNuIz7C+2zFPCuKIflGXdTIQOrucPmd7z51Q==", - "requires": { - "@docusaurus/core": "2.0.0-beta.0", - "@docusaurus/plugin-content-blog": "2.0.0-beta.0", - "@docusaurus/plugin-content-docs": "2.0.0-beta.0", - "@docusaurus/plugin-content-pages": "2.0.0-beta.0", - "@docusaurus/plugin-debug": "2.0.0-beta.0", - "@docusaurus/plugin-google-analytics": "2.0.0-beta.0", - "@docusaurus/plugin-google-gtag": "2.0.0-beta.0", - "@docusaurus/plugin-sitemap": "2.0.0-beta.0", - "@docusaurus/theme-classic": "2.0.0-beta.0", - "@docusaurus/theme-search-algolia": "2.0.0-beta.0" + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@docusaurus/preset-classic/-/preset-classic-2.2.0.tgz", + "integrity": "sha512-yKIWPGNx7BT8v2wjFIWvYrS+nvN04W+UameSFf8lEiJk6pss0kL6SG2MRvyULiI3BDxH+tj6qe02ncpSPGwumg==", + "requires": { + "@docusaurus/core": "2.2.0", + "@docusaurus/plugin-content-blog": "2.2.0", + "@docusaurus/plugin-content-docs": "2.2.0", + "@docusaurus/plugin-content-pages": "2.2.0", + "@docusaurus/plugin-debug": "2.2.0", + "@docusaurus/plugin-google-analytics": "2.2.0", + "@docusaurus/plugin-google-gtag": "2.2.0", + "@docusaurus/plugin-sitemap": "2.2.0", + "@docusaurus/theme-classic": "2.2.0", + "@docusaurus/theme-common": "2.2.0", + "@docusaurus/theme-search-algolia": "2.2.0", + "@docusaurus/types": "2.2.0" } }, "@docusaurus/react-loadable": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@docusaurus/react-loadable/-/react-loadable-5.5.0.tgz", - "integrity": "sha512-Ld/kwUE6yATIOTLq3JCsWiTa/drisajwKqBQ2Rw6IcT+sFsKfYek8F2jSH8f68AT73xX97UehduZeCSlnuCBIg==", + "version": "5.5.2", + "resolved": "https://registry.npmjs.org/@docusaurus/react-loadable/-/react-loadable-5.5.2.tgz", + "integrity": "sha512-A3dYjdBGuy0IGT+wyLIGIKLRE+sAk1iNk0f1HjNDysO7u8lhL4N3VEm+FAubmJbAztn94F7MxBTPmnixbiyFdQ==", "requires": { + "@types/react": "*", "prop-types": "^15.6.2" } }, "@docusaurus/theme-classic": { - "version": "2.0.0-beta.0", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-classic/-/theme-classic-2.0.0-beta.0.tgz", - "integrity": "sha512-cBNtwAyg3be7Gk41FazMtgyibAcfuYaGHhGHIDRsXfc/qp3RhbiGiei7tyh200QT0NgKZxiVQy/r4d0mtjC++Q==", - "requires": { - "@docusaurus/core": "2.0.0-beta.0", - "@docusaurus/plugin-content-blog": "2.0.0-beta.0", - "@docusaurus/plugin-content-docs": "2.0.0-beta.0", - "@docusaurus/plugin-content-pages": "2.0.0-beta.0", - "@docusaurus/theme-common": "2.0.0-beta.0", - "@docusaurus/types": "2.0.0-beta.0", - "@docusaurus/utils": "2.0.0-beta.0", - "@docusaurus/utils-validation": "2.0.0-beta.0", - "@mdx-js/mdx": "^1.6.21", - "@mdx-js/react": "^1.6.21", - "chalk": "^4.1.0", - "clsx": "^1.1.1", - "copy-text-to-clipboard": "^3.0.0", - "fs-extra": "^9.1.0", - "globby": "^11.0.2", - "infima": "0.2.0-alpha.23", - "lodash": "^4.17.20", - "parse-numeric-range": "^1.2.0", - "postcss": "^8.2.10", - "prism-react-renderer": "^1.1.1", - "prismjs": "^1.23.0", - "prop-types": "^15.7.2", - "react-router-dom": "^5.2.0", - "rtlcss": "^3.1.2" + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-classic/-/theme-classic-2.2.0.tgz", + "integrity": "sha512-kjbg/qJPwZ6H1CU/i9d4l/LcFgnuzeiGgMQlt6yPqKo0SOJIBMPuz7Rnu3r/WWbZFPi//o8acclacOzmXdUUEg==", + "requires": { + "@docusaurus/core": "2.2.0", + "@docusaurus/mdx-loader": "2.2.0", + "@docusaurus/module-type-aliases": "2.2.0", + "@docusaurus/plugin-content-blog": "2.2.0", + "@docusaurus/plugin-content-docs": "2.2.0", + "@docusaurus/plugin-content-pages": "2.2.0", + "@docusaurus/theme-common": "2.2.0", + "@docusaurus/theme-translations": "2.2.0", + "@docusaurus/types": "2.2.0", + "@docusaurus/utils": "2.2.0", + "@docusaurus/utils-common": "2.2.0", + "@docusaurus/utils-validation": "2.2.0", + "@mdx-js/react": "^1.6.22", + "clsx": "^1.2.1", + "copy-text-to-clipboard": "^3.0.1", + "infima": "0.2.0-alpha.42", + "lodash": "^4.17.21", + "nprogress": "^0.2.0", + "postcss": "^8.4.14", + "prism-react-renderer": "^1.3.5", + "prismjs": "^1.28.0", + "react-router-dom": "^5.3.3", + "rtlcss": "^3.5.0", + "tslib": "^2.4.0", + "utility-types": "^3.10.0" } }, "@docusaurus/theme-common": { - "version": "2.0.0-beta.0", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-common/-/theme-common-2.0.0-beta.0.tgz", - "integrity": "sha512-2rcVmQpvbdAgnzTWuM7Bfpu+2TQm928bhlvxn226jQy7IYz8ySRlIode63HhCtpx03hpdMCkrK6HxhfEcvHjQg==", - "requires": { - "@docusaurus/core": "2.0.0-beta.0", - "@docusaurus/plugin-content-blog": "2.0.0-beta.0", - "@docusaurus/plugin-content-docs": "2.0.0-beta.0", - "@docusaurus/plugin-content-pages": "2.0.0-beta.0", - "@docusaurus/types": "2.0.0-beta.0", - "tslib": "^2.1.0" + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-common/-/theme-common-2.2.0.tgz", + "integrity": "sha512-R8BnDjYoN90DCL75gP7qYQfSjyitXuP9TdzgsKDmSFPNyrdE3twtPNa2dIN+h+p/pr+PagfxwWbd6dn722A1Dw==", + "requires": { + "@docusaurus/mdx-loader": "2.2.0", + "@docusaurus/module-type-aliases": "2.2.0", + "@docusaurus/plugin-content-blog": "2.2.0", + "@docusaurus/plugin-content-docs": "2.2.0", + "@docusaurus/plugin-content-pages": "2.2.0", + "@docusaurus/utils": "2.2.0", + "@types/history": "^4.7.11", + "@types/react": "*", + "@types/react-router-config": "*", + "clsx": "^1.2.1", + "parse-numeric-range": "^1.3.0", + "prism-react-renderer": "^1.3.5", + "tslib": "^2.4.0", + "utility-types": "^3.10.0" } }, "@docusaurus/theme-search-algolia": { - "version": "2.0.0-beta.0", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-search-algolia/-/theme-search-algolia-2.0.0-beta.0.tgz", - "integrity": "sha512-/GhgAm4yuwqTXWTsWnqpFYxpjTv+t45Wk8q/LmTVINa+A7b6jkMkch2lygagIt69/ufDm2Uw6eYhgrmF4DJqfQ==", - "requires": { - "@docsearch/react": "^3.0.0-alpha.33", - "@docusaurus/core": "2.0.0-beta.0", - "@docusaurus/theme-common": "2.0.0-beta.0", - "@docusaurus/utils": "2.0.0-beta.0", - "@docusaurus/utils-validation": "2.0.0-beta.0", - "algoliasearch": "^4.8.4", - "algoliasearch-helper": "^3.3.4", - "clsx": "^1.1.1", - "eta": "^1.12.1", - "lodash": "^4.17.20" + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-search-algolia/-/theme-search-algolia-2.2.0.tgz", + "integrity": "sha512-2h38B0tqlxgR2FZ9LpAkGrpDWVdXZ7vltfmTdX+4RsDs3A7khiNsmZB+x/x6sA4+G2V2CvrsPMlsYBy5X+cY1w==", + "requires": { + "@docsearch/react": "^3.1.1", + "@docusaurus/core": "2.2.0", + "@docusaurus/logger": "2.2.0", + "@docusaurus/plugin-content-docs": "2.2.0", + "@docusaurus/theme-common": "2.2.0", + "@docusaurus/theme-translations": "2.2.0", + "@docusaurus/utils": "2.2.0", + "@docusaurus/utils-validation": "2.2.0", + "algoliasearch": "^4.13.1", + "algoliasearch-helper": "^3.10.0", + "clsx": "^1.2.1", + "eta": "^1.12.3", + "fs-extra": "^10.1.0", + "lodash": "^4.17.21", + "tslib": "^2.4.0", + "utility-types": "^3.10.0" + } + }, + "@docusaurus/theme-translations": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-translations/-/theme-translations-2.2.0.tgz", + "integrity": "sha512-3T140AG11OjJrtKlY4pMZ5BzbGRDjNs2co5hJ6uYJG1bVWlhcaFGqkaZ5lCgKflaNHD7UHBHU9Ec5f69jTdd6w==", + "requires": { + "fs-extra": "^10.1.0", + "tslib": "^2.4.0" } }, "@docusaurus/types": { - "version": "2.0.0-beta.0", - "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-2.0.0-beta.0.tgz", - "integrity": "sha512-z9PI+GbtYwqTXnkX4/a/A6psDX2p8N2uWlN2f4ifrm8WY4WhR9yiTOh0uo0pIqqaUQQvkEq3o5hOXuXLECEs+w==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-2.2.0.tgz", + "integrity": "sha512-b6xxyoexfbRNRI8gjblzVOnLr4peCJhGbYGPpJ3LFqpi5nsFfoK4mmDLvWdeah0B7gmJeXabN7nQkFoqeSdmOw==", "requires": { + "@types/history": "^4.7.11", + "@types/react": "*", "commander": "^5.1.0", - "joi": "^17.4.0", - "querystring": "0.2.0", - "webpack": "^5.28.0", - "webpack-merge": "^5.7.3" + "joi": "^17.6.0", + "react-helmet-async": "^1.3.0", + "utility-types": "^3.10.0", + "webpack": "^5.73.0", + "webpack-merge": "^5.8.0" } }, "@docusaurus/utils": { - "version": "2.0.0-beta.0", - "resolved": "https://registry.npmjs.org/@docusaurus/utils/-/utils-2.0.0-beta.0.tgz", - "integrity": "sha512-bvrT1EQu0maavr0Hb/lke9jmpzgVL/9tn5VQtbyahf472eJFY0bQDExllDrHK+l784SUvucqX0iaQeg0q6ySUw==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@docusaurus/utils/-/utils-2.2.0.tgz", + "integrity": "sha512-oNk3cjvx7Tt1Lgh/aeZAmFpGV2pDr5nHKrBVx6hTkzGhrnMuQqLt6UPlQjdYQ3QHXwyF/ZtZMO1D5Pfi0lu7SA==", "requires": { - "@docusaurus/types": "2.0.0-beta.0", - "@types/github-slugger": "^1.3.0", - "chalk": "^4.1.0", - "escape-string-regexp": "^4.0.0", - "fs-extra": "^9.1.0", - "gray-matter": "^4.0.2", - "lodash": "^4.17.20", + "@docusaurus/logger": "2.2.0", + "@svgr/webpack": "^6.2.1", + "file-loader": "^6.2.0", + "fs-extra": "^10.1.0", + "github-slugger": "^1.4.0", + "globby": "^11.1.0", + "gray-matter": "^4.0.3", + "js-yaml": "^4.1.0", + "lodash": "^4.17.21", + "micromatch": "^4.0.5", "resolve-pathname": "^3.0.0", - "tslib": "^2.1.0" + "shelljs": "^0.8.5", + "tslib": "^2.4.0", + "url-loader": "^4.1.1", + "webpack": "^5.73.0" } }, - "@docusaurus/utils-validation": { - "version": "2.0.0-beta.0", - "resolved": "https://registry.npmjs.org/@docusaurus/utils-validation/-/utils-validation-2.0.0-beta.0.tgz", - "integrity": "sha512-ELl/FVJ6xBz35TisZ1NmJhjbiVXDeU++K531PEFPCPmwnQPh7S6hZXdPnR71/Kc3BmuN9X2ZkwGOqNKVfys2Bg==", + "@docusaurus/utils-common": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@docusaurus/utils-common/-/utils-common-2.2.0.tgz", + "integrity": "sha512-qebnerHp+cyovdUseDQyYFvMW1n1nv61zGe5JJfoNQUnjKuApch3IVsz+/lZ9a38pId8kqehC1Ao2bW/s0ntDA==", "requires": { - "@docusaurus/utils": "2.0.0-beta.0", - "chalk": "^4.1.0", - "joi": "^17.4.0", - "tslib": "^2.1.0" + "tslib": "^2.4.0" } }, - "@endiliey/static-site-generator-webpack-plugin": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@endiliey/static-site-generator-webpack-plugin/-/static-site-generator-webpack-plugin-4.0.0.tgz", - "integrity": "sha512-3MBqYCs30qk1OBRC697NqhGouYbs71D1B8hrk/AFJC6GwF2QaJOQZtA1JYAaGSe650sZ8r5ppRTtCRXepDWlng==", + "@docusaurus/utils-validation": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@docusaurus/utils-validation/-/utils-validation-2.2.0.tgz", + "integrity": "sha512-I1hcsG3yoCkasOL5qQAYAfnmVoLei7apugT6m4crQjmDGxq+UkiRrq55UqmDDyZlac/6ax/JC0p+usZ6W4nVyg==", "requires": { - "bluebird": "^3.7.1", - "cheerio": "^0.22.0", - "eval": "^0.1.4", - "url": "^0.11.0", - "webpack-sources": "^1.4.3" + "@docusaurus/logger": "2.2.0", + "@docusaurus/utils": "2.2.0", + "joi": "^17.6.0", + "js-yaml": "^4.1.0", + "tslib": "^2.4.0" } }, "@eslint/eslintrc": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.1.tgz", - "integrity": "sha512-5v7TDE9plVhvxQeWLXDTvFvJBdH6pEsdnl2g/dAptmuFEPedQ4Erq5rsDsX+mvAM610IhNaO2W5V1dOOnDKxkQ==", + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", + "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==", + "requires": { + "ajv": "^6.12.4", + "debug": "^4.1.1", + "espree": "^7.3.0", + "globals": "^13.9.0", + "ignore": "^4.0.6", + "import-fresh": "^3.2.1", + "js-yaml": "^3.13.1", + "minimatch": "^3.0.4", + "strip-json-comments": "^3.1.1" + }, + "dependencies": { + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "globals": { + "version": "13.17.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz", + "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==", + "requires": { + "type-fest": "^0.20.2" + } + }, + "js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + } + } + }, + "@hapi/hoek": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz", + "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==" + }, + "@hapi/topo": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz", + "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==", + "requires": { + "@hapi/hoek": "^9.0.0" + } + }, + "@humanwhocodes/config-array": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz", + "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==", + "requires": { + "@humanwhocodes/object-schema": "^1.2.0", + "debug": "^4.1.1", + "minimatch": "^3.0.4" + } + }, + "@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==" + }, + "@jest/schemas": { + "version": "29.0.0", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.0.0.tgz", + "integrity": "sha512-3Ab5HgYIIAnS0HjqJHQYZS+zXc4tUmTmBH3z83ajI6afXp8X3ZtdLX+nXx+I7LNkJD7uN9LAVhgnjDgZa2z0kA==", + "requires": { + "@sinclair/typebox": "^0.24.1" + } + }, + "@jest/types": { + "version": "29.3.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.3.1.tgz", + "integrity": "sha512-d0S0jmmTpjnhCmNpApgX3jrUZgZ22ivKJRvL2lli5hpCRoNnp1f85r2/wpKfXuYu8E7Jjh1hGfhPyup1NM5AmA==", + "requires": { + "@jest/schemas": "^29.0.0", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + } + }, + "@jridgewell/gen-mapping": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", + "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", + "requires": { + "@jridgewell/set-array": "^1.0.0", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "@jridgewell/resolve-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==" + }, + "@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==" + }, + "@jridgewell/source-map": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz", + "integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==", "requires": { - "ajv": "^6.12.4", - "debug": "^4.1.1", - "espree": "^7.3.0", - "globals": "^12.1.0", - "ignore": "^4.0.6", - "import-fresh": "^3.2.1", - "js-yaml": "^3.13.1", - "minimatch": "^3.0.4", - "strip-json-comments": "^3.1.1" + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" }, "dependencies": { - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "globals": { - "version": "12.4.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", - "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", - "requires": { - "type-fest": "^0.8.1" - } - }, - "js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "@jridgewell/gen-mapping": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", + "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" } - }, - "type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==" } } }, - "@hapi/hoek": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.2.0.tgz", - "integrity": "sha512-sqKVVVOe5ivCaXDWivIJYVSaEgdQK9ul7a4Kity5Iw7u9+wBAPbX1RMSnLLmp7O4Vzj0WOWwMAJsTL00xwaNug==" + "@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" }, - "@hapi/topo": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.0.0.tgz", - "integrity": "sha512-tFJlT47db0kMqVm3H4nQYgn6Pwg10GTZHb1pwmSiv1K4ks6drQOtfEF5ZnPjkvC+y4/bUPHK+bc87QvLcL+WMw==", + "@jridgewell/trace-mapping": { + "version": "0.3.17", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz", + "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==", "requires": { - "@hapi/hoek": "^9.0.0" + "@jridgewell/resolve-uri": "3.1.0", + "@jridgewell/sourcemap-codec": "1.4.14" } }, + "@leichtgewicht/ip-codec": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz", + "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==" + }, "@mdx-js/mdx": { "version": "1.6.22", "resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-1.6.22.tgz", @@ -17548,6 +15782,11 @@ "version": "5.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==" } } }, @@ -17563,37 +15802,37 @@ "integrity": "sha512-H1rQc1ZOHANWBvPcW+JpGwr+juXSxM8Q8YCkm3GhZd8REu1fHR3z99CErO1p9pkcfcxZnMdIZdIsXkOHY0NilA==" }, "@nodelib/fs.scandir": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.4.tgz", - "integrity": "sha512-33g3pMJk3bg5nXbL/+CY6I2eJDzZAni49PfJnL5fghPTggPvBd/pFNSgJsdAgWptuFu7qq/ERvOYFlhvsLTCKA==", + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "requires": { - "@nodelib/fs.stat": "2.0.4", + "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" } }, "@nodelib/fs.stat": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.4.tgz", - "integrity": "sha512-IYlHJA0clt2+Vg7bccq+TzRdJvv19c2INqBSsoOLp1je7xjtr7J26+WXR72MCdvU9q1qTzIWDfhMf+DRvQJK4Q==" + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==" }, "@nodelib/fs.walk": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.6.tgz", - "integrity": "sha512-8Broas6vTtW4GIXTAHDoE32hnN2M5ykgCpWGbuXHQ15vEMqr23pB76e/GZcYsZCHALv50ktd24qhEyKr6wBtow==", + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "requires": { - "@nodelib/fs.scandir": "2.1.4", + "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" } }, "@polka/url": { - "version": "1.0.0-next.12", - "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.12.tgz", - "integrity": "sha512-6RglhutqrGFMO1MNUXp95RBuYIuc8wTnMAV5MUhLmjTOy78ncwOw7RgeQ/HeymkKXRhZd0s2DNrM1rL7unk3MQ==" + "version": "1.0.0-next.21", + "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.21.tgz", + "integrity": "sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==" }, "@sideway/address": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.2.tgz", - "integrity": "sha512-idTz8ibqWFrPU8kMirL0CoPH/A29XOzzAzpyN3zQ4kAWnzmNfFmRaoMNN6VI8ske5M73HZyhIaW4OuSFIdM4oA==", + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.4.tgz", + "integrity": "sha512-7vwq+rOHVWjyXxVlR76Agnvhy8I9rpzjosTESvmhNeXOXdZZB15Fl+TI9x1SiHZH5Jv2wTGduSxFDIaq0m3DUw==", "requires": { "@hapi/hoek": "^9.0.0" } @@ -17608,118 +15847,151 @@ "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==" }, + "@sinclair/typebox": { + "version": "0.24.51", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.51.tgz", + "integrity": "sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA==" + }, "@sindresorhus/is": { "version": "0.14.0", "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==" }, + "@slorber/static-site-generator-webpack-plugin": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/@slorber/static-site-generator-webpack-plugin/-/static-site-generator-webpack-plugin-4.0.7.tgz", + "integrity": "sha512-Ug7x6z5lwrz0WqdnNFOMYrDQNTPAprvHLSh6+/fmml3qUiz6l5eq+2MzLKWtn/q5K5NpSiFsZTP/fck/3vjSxA==", + "requires": { + "eval": "^0.1.8", + "p-map": "^4.0.0", + "webpack-sources": "^3.2.2" + }, + "dependencies": { + "webpack-sources": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==" + } + } + }, "@svgr/babel-plugin-add-jsx-attribute": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-5.4.0.tgz", - "integrity": "sha512-ZFf2gs/8/6B8PnSofI0inYXr2SDNTDScPXhN7k5EqD4aZ3gi6u+rbmZHVB8IM3wDyx8ntKACZbtXSm7oZGRqVg==" + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-6.5.1.tgz", + "integrity": "sha512-9PYGcXrAxitycIjRmZB+Q0JaN07GZIWaTBIGQzfaZv+qr1n8X1XUEJ5rZ/vx6OVD9RRYlrNnXWExQXcmZeD/BQ==", + "requires": {} }, "@svgr/babel-plugin-remove-jsx-attribute": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-5.4.0.tgz", - "integrity": "sha512-yaS4o2PgUtwLFGTKbsiAy6D0o3ugcUhWK0Z45umJ66EPWunAz9fuFw2gJuje6wqQvQWOTJvIahUwndOXb7QCPg==" + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-6.5.0.tgz", + "integrity": "sha512-8zYdkym7qNyfXpWvu4yq46k41pyNM9SOstoWhKlm+IfdCE1DdnRKeMUPsWIEO/DEkaWxJ8T9esNdG3QwQ93jBA==", + "requires": {} }, "@svgr/babel-plugin-remove-jsx-empty-expression": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-5.0.1.tgz", - "integrity": "sha512-LA72+88A11ND/yFIMzyuLRSMJ+tRKeYKeQ+mR3DcAZ5I4h5CPWN9AHyUzJbWSYp/u2u0xhmgOe0+E41+GjEueA==" + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-6.5.0.tgz", + "integrity": "sha512-NFdxMq3xA42Kb1UbzCVxplUc0iqSyM9X8kopImvFnB+uSDdzIHOdbs1op8ofAvVRtbg4oZiyRl3fTYeKcOe9Iw==", + "requires": {} }, "@svgr/babel-plugin-replace-jsx-attribute-value": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-5.0.1.tgz", - "integrity": "sha512-PoiE6ZD2Eiy5mK+fjHqwGOS+IXX0wq/YDtNyIgOrc6ejFnxN4b13pRpiIPbtPwHEc+NT2KCjteAcq33/F1Y9KQ==" + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-6.5.1.tgz", + "integrity": "sha512-8DPaVVE3fd5JKuIC29dqyMB54sA6mfgki2H2+swh+zNJoynC8pMPzOkidqHOSc6Wj032fhl8Z0TVn1GiPpAiJg==", + "requires": {} }, "@svgr/babel-plugin-svg-dynamic-title": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-5.4.0.tgz", - "integrity": "sha512-zSOZH8PdZOpuG1ZVx/cLVePB2ibo3WPpqo7gFIjLV9a0QsuQAzJiwwqmuEdTaW2pegyBE17Uu15mOgOcgabQZg==" + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-6.5.1.tgz", + "integrity": "sha512-FwOEi0Il72iAzlkaHrlemVurgSQRDFbk0OC8dSvD5fSBPHltNh7JtLsxmZUhjYBZo2PpcU/RJvvi6Q0l7O7ogw==", + "requires": {} }, "@svgr/babel-plugin-svg-em-dimensions": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-5.4.0.tgz", - "integrity": "sha512-cPzDbDA5oT/sPXDCUYoVXEmm3VIoAWAPT6mSPTJNbQaBNUuEKVKyGH93oDY4e42PYHRW67N5alJx/eEol20abw==" + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-6.5.1.tgz", + "integrity": "sha512-gWGsiwjb4tw+ITOJ86ndY/DZZ6cuXMNE/SjcDRg+HLuCmwpcjOktwRF9WgAiycTqJD/QXqL2f8IzE2Rzh7aVXA==", + "requires": {} }, "@svgr/babel-plugin-transform-react-native-svg": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-5.4.0.tgz", - "integrity": "sha512-3eYP/SaopZ41GHwXma7Rmxcv9uRslRDTY1estspeB1w1ueZWd/tPlMfEOoccYpEMZU3jD4OU7YitnXcF5hLW2Q==" + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-6.5.1.tgz", + "integrity": "sha512-2jT3nTayyYP7kI6aGutkyfJ7UMGtuguD72OjeGLwVNyfPRBD8zQthlvL+fAbAKk5n9ZNcvFkp/b1lZ7VsYqVJg==", + "requires": {} }, "@svgr/babel-plugin-transform-svg-component": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-5.5.0.tgz", - "integrity": "sha512-q4jSH1UUvbrsOtlo/tKcgSeiCHRSBdXoIoqX1pgcKK/aU3JD27wmMKwGtpB8qRYUYoyXvfGxUVKchLuR5pB3rQ==" + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-6.5.1.tgz", + "integrity": "sha512-a1p6LF5Jt33O3rZoVRBqdxL350oge54iZWHNI6LJB5tQ7EelvD/Mb1mfBiZNAan0dt4i3VArkFRjA4iObuNykQ==", + "requires": {} }, "@svgr/babel-preset": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-5.5.0.tgz", - "integrity": "sha512-4FiXBjvQ+z2j7yASeGPEi8VD/5rrGQk4Xrq3EdJmoZgz/tpqChpo5hgXDvmEauwtvOc52q8ghhZK4Oy7qph4ig==", + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-6.5.1.tgz", + "integrity": "sha512-6127fvO/FF2oi5EzSQOAjo1LE3OtNVh11R+/8FXa+mHx1ptAaS4cknIjnUA7e6j6fwGGJ17NzaTJFUwOV2zwCw==", "requires": { - "@svgr/babel-plugin-add-jsx-attribute": "^5.4.0", - "@svgr/babel-plugin-remove-jsx-attribute": "^5.4.0", - "@svgr/babel-plugin-remove-jsx-empty-expression": "^5.0.1", - "@svgr/babel-plugin-replace-jsx-attribute-value": "^5.0.1", - "@svgr/babel-plugin-svg-dynamic-title": "^5.4.0", - "@svgr/babel-plugin-svg-em-dimensions": "^5.4.0", - "@svgr/babel-plugin-transform-react-native-svg": "^5.4.0", - "@svgr/babel-plugin-transform-svg-component": "^5.5.0" + "@svgr/babel-plugin-add-jsx-attribute": "^6.5.1", + "@svgr/babel-plugin-remove-jsx-attribute": "*", + "@svgr/babel-plugin-remove-jsx-empty-expression": "*", + "@svgr/babel-plugin-replace-jsx-attribute-value": "^6.5.1", + "@svgr/babel-plugin-svg-dynamic-title": "^6.5.1", + "@svgr/babel-plugin-svg-em-dimensions": "^6.5.1", + "@svgr/babel-plugin-transform-react-native-svg": "^6.5.1", + "@svgr/babel-plugin-transform-svg-component": "^6.5.1" } }, "@svgr/core": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/core/-/core-5.5.0.tgz", - "integrity": "sha512-q52VOcsJPvV3jO1wkPtzTuKlvX7Y3xIcWRpCMtBF3MrteZJtBfQw/+u0B1BHy5ColpQc1/YVTrPEtSYIMNZlrQ==", + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/core/-/core-6.5.1.tgz", + "integrity": "sha512-/xdLSWxK5QkqG524ONSjvg3V/FkNyCv538OIBdQqPNaAta3AsXj/Bd2FbvR87yMbXO2hFSWiAe/Q6IkVPDw+mw==", "requires": { - "@svgr/plugin-jsx": "^5.5.0", + "@babel/core": "^7.19.6", + "@svgr/babel-preset": "^6.5.1", + "@svgr/plugin-jsx": "^6.5.1", "camelcase": "^6.2.0", - "cosmiconfig": "^7.0.0" + "cosmiconfig": "^7.0.1" } }, "@svgr/hast-util-to-babel-ast": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-5.5.0.tgz", - "integrity": "sha512-cAaR/CAiZRB8GP32N+1jocovUtvlj0+e65TB50/6Lcime+EA49m/8l+P2ko+XPJ4dw3xaPS3jOL4F2X4KWxoeQ==", + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-6.5.1.tgz", + "integrity": "sha512-1hnUxxjd83EAxbL4a0JDJoD3Dao3hmjvyvyEV8PzWmLK3B9m9NPlW7GKjFyoWE8nM7HnXzPcmmSyOW8yOddSXw==", "requires": { - "@babel/types": "^7.12.6" + "@babel/types": "^7.20.0", + "entities": "^4.4.0" } }, "@svgr/plugin-jsx": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-5.5.0.tgz", - "integrity": "sha512-V/wVh33j12hGh05IDg8GpIUXbjAPnTdPTKuP4VNLggnwaHMPNQNae2pRnyTAILWCQdz5GyMqtO488g7CKM8CBA==", + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-6.5.1.tgz", + "integrity": "sha512-+UdQxI3jgtSjCykNSlEMuy1jSRQlGC7pqBCPvkG/2dATdWo082zHTTK3uhnAju2/6XpE6B5mZ3z4Z8Ns01S8Gw==", "requires": { - "@babel/core": "^7.12.3", - "@svgr/babel-preset": "^5.5.0", - "@svgr/hast-util-to-babel-ast": "^5.5.0", - "svg-parser": "^2.0.2" + "@babel/core": "^7.19.6", + "@svgr/babel-preset": "^6.5.1", + "@svgr/hast-util-to-babel-ast": "^6.5.1", + "svg-parser": "^2.0.4" } }, "@svgr/plugin-svgo": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-5.5.0.tgz", - "integrity": "sha512-r5swKk46GuQl4RrVejVwpeeJaydoxkdwkM1mBKOgJLBUJPGaLci6ylg/IjhrRsREKDkr4kbMWdgOtbXEh0fyLQ==", + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-6.5.1.tgz", + "integrity": "sha512-omvZKf8ixP9z6GWgwbtmP9qQMPX4ODXi+wzbVZgomNFsUIlHA1sf4fThdwTWSsZGgvGAG6yE+b/F5gWUkcZ/iQ==", "requires": { - "cosmiconfig": "^7.0.0", + "cosmiconfig": "^7.0.1", "deepmerge": "^4.2.2", - "svgo": "^1.2.2" + "svgo": "^2.8.0" } }, "@svgr/webpack": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/webpack/-/webpack-5.5.0.tgz", - "integrity": "sha512-DOBOK255wfQxguUta2INKkzPj6AIS6iafZYiYmHn6W3pHlycSRRlvWKCfLDG10fXfLWqE3DJHgRUOyJYmARa7g==", + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/webpack/-/webpack-6.5.1.tgz", + "integrity": "sha512-cQ/AsnBkXPkEK8cLbv4Dm7JGXq2XrumKnL1dRpJD9rIO2fTIlJI9a1uCciYG1F2aUsox/hJQyNGbt3soDxSRkA==", "requires": { - "@babel/core": "^7.12.3", - "@babel/plugin-transform-react-constant-elements": "^7.12.1", - "@babel/preset-env": "^7.12.1", - "@babel/preset-react": "^7.12.5", - "@svgr/core": "^5.5.0", - "@svgr/plugin-jsx": "^5.5.0", - "@svgr/plugin-svgo": "^5.5.0", - "loader-utils": "^2.0.0" + "@babel/core": "^7.19.6", + "@babel/plugin-transform-react-constant-elements": "^7.18.12", + "@babel/preset-env": "^7.19.4", + "@babel/preset-react": "^7.18.6", + "@babel/preset-typescript": "^7.18.6", + "@svgr/core": "^6.5.1", + "@svgr/plugin-jsx": "^6.5.1", + "@svgr/plugin-svgo": "^6.5.1" } }, "@szmarczak/http-timer": { @@ -17731,87 +16003,162 @@ } }, "@trysound/sax": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.1.1.tgz", - "integrity": "sha512-Z6DoceYb/1xSg5+e+ZlPZ9v0N16ZvZ+wYMraFue4HYrE4ttONKtsvruIRf6t9TBR0YvSOfi1hUU0fJfBLCDYow==" + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", + "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==" + }, + "@types/body-parser": { + "version": "1.19.2", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", + "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", + "requires": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "@types/bonjour": { + "version": "3.5.10", + "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.10.tgz", + "integrity": "sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw==", + "requires": { + "@types/node": "*" + } + }, + "@types/connect": { + "version": "3.4.35", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", + "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", + "requires": { + "@types/node": "*" + } + }, + "@types/connect-history-api-fallback": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.3.5.tgz", + "integrity": "sha512-h8QJa8xSb1WD4fpKBDcATDNGXghFj6/3GRWG6dhmRcu0RX1Ubasur2Uvx5aeEwlf0MwblEC2bMzzMQntxnw/Cw==", + "requires": { + "@types/express-serve-static-core": "*", + "@types/node": "*" + } }, "@types/eslint": { - "version": "7.2.10", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-7.2.10.tgz", - "integrity": "sha512-kUEPnMKrqbtpCq/KTaGFFKAcz6Ethm2EjCoKIDaCmfRBWLbFuTcOJfTlorwbnboXBzahqWLgUp1BQeKHiJzPUQ==", + "version": "8.4.7", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.7.tgz", + "integrity": "sha512-ehM7cCt2RSFs42mb+lcmhFT9ouIlV92PuaeRGn8N8c98oMjG4Z5pJHA9b1QiCcuqnbPSHcyfiD3mlhqMaHsQIw==", "requires": { "@types/estree": "*", "@types/json-schema": "*" } }, "@types/eslint-scope": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.0.tgz", - "integrity": "sha512-O/ql2+rrCUe2W2rs7wMR+GqPRcgB6UiqN5RhrR5xruFlY7l9YLMn0ZkDzjoHLeiFkR8MCQZVudUuuvQ2BLC9Qw==", + "version": "3.7.4", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz", + "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==", "requires": { "@types/eslint": "*", "@types/estree": "*" } }, "@types/estree": { - "version": "0.0.47", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.47.tgz", - "integrity": "sha512-c5ciR06jK8u9BstrmJyO97m+klJrrhCf9u3rLu3DEAJBirxRqSCvDQoYKmxuYwQI5SZChAWu+tq9oVlGRuzPAg==" + "version": "0.0.51", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", + "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==" }, - "@types/github-slugger": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@types/github-slugger/-/github-slugger-1.3.0.tgz", - "integrity": "sha512-J/rMZa7RqiH/rT29TEVZO4nBoDP9XJOjnbbIofg7GQKs4JIduEO3WLpte+6WeUz/TcrXKlY+bM7FYrp8yFB+3g==" + "@types/express": { + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.15.tgz", + "integrity": "sha512-Yv0k4bXGOH+8a+7bELd2PqHQsuiANB+A8a4gnQrkRWzrkKlb6KHaVvyXhqs04sVW/OWlbPyYxRgYlIXLfrufMQ==", + "requires": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.31", + "@types/qs": "*", + "@types/serve-static": "*" + } }, - "@types/glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-SEYeGAIQIQX8NN6LDKprLjbrd5dARM5EXsd8GI/A5l0apYI1fGMWgPHSe4ZKL4eozlAyI+doUE9XbYS4xCkQ1w==", + "@types/express-serve-static-core": { + "version": "4.17.32", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.32.tgz", + "integrity": "sha512-aI5h/VOkxOF2Z1saPy0Zsxs5avets/iaiAJYznQFm5By/pamU31xWKL//epiF4OfUA2qTOc9PV6tCUjhO8wlZA==", "requires": { - "@types/minimatch": "*", - "@types/node": "*" + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*" } }, "@types/hast": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@types/hast/-/hast-2.3.1.tgz", - "integrity": "sha512-viwwrB+6xGzw+G1eWpF9geV3fnsDgXqHG+cqgiHrvQfDUW5hzhCyV7Sy3UJxhfRFBsgky2SSW33qi/YrIkjX5Q==", + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/@types/hast/-/hast-2.3.4.tgz", + "integrity": "sha512-wLEm0QvaoawEDoTRwzTXp4b4jpwiJDvR5KMnFnVodm3scufTlBOWRD6N1OBf9TZMhjlNsSfcO5V+7AF4+Vy+9g==", "requires": { "@types/unist": "*" } }, + "@types/history": { + "version": "4.7.11", + "resolved": "https://registry.npmjs.org/@types/history/-/history-4.7.11.tgz", + "integrity": "sha512-qjDJRrmvBMiTx+jyLxvLfJU7UznFuokDv4f3WRuriHKERccVpFU+8XMQUAbDzoiJCsmexxRExQeMwwCdamSKDA==" + }, "@types/html-minifier-terser": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz", - "integrity": "sha512-giAlZwstKbmvMk1OO7WXSj4OZ0keXAcl2TQq4LWHiiPH2ByaH7WeUzng+Qej8UPxxv+8lRTuouo0iaNDBuzIBA==" + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", + "integrity": "sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==" + }, + "@types/http-proxy": { + "version": "1.17.9", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.9.tgz", + "integrity": "sha512-QsbSjA/fSk7xB+UXlCT3wHBy5ai9wOcNDWwZAtud+jXhwOM3l+EYZh8Lng4+/6n8uar0J7xILzqftJdJ/Wdfkw==", + "requires": { + "@types/node": "*" + } + }, + "@types/istanbul-lib-coverage": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", + "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==" + }, + "@types/istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", + "requires": { + "@types/istanbul-lib-coverage": "*" + } + }, + "@types/istanbul-reports": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", + "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "requires": { + "@types/istanbul-lib-report": "*" + } }, "@types/json-schema": { - "version": "7.0.7", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.7.tgz", - "integrity": "sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA==" + "version": "7.0.11", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", + "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==" }, "@types/katex": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@types/katex/-/katex-0.11.0.tgz", - "integrity": "sha512-27BfE8zASRLYfSBNMk5/+KIjr2CBBrH0i5lhsO04fca4TGirIIMay73v3zNkzqmsaeIa/Mi5kejWDcxPLAmkvA==" + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/@types/katex/-/katex-0.11.1.tgz", + "integrity": "sha512-DUlIj2nk0YnJdlWgsFuVKcX27MLW0KbKmGVoUHmFr+74FYYNUDAaj9ZqTADvsbE8rfxuVmSFc7KczYn5Y09ozg==" }, "@types/mdast": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.3.tgz", - "integrity": "sha512-SXPBMnFVQg1s00dlMCc/jCdvPqdE4mXaMMCeRlxLDmTAEoegHT53xKtkDnzDTOcmMHUfcjyf36/YYZ6SxRdnsw==", + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.10.tgz", + "integrity": "sha512-W864tg/Osz1+9f4lrGTZpCSO5/z4608eUp19tbozkq2HJK6i3z1kT0H9tlADXuYIb1YYOBByU4Jsqkk75q48qA==", "requires": { "@types/unist": "*" } }, - "@types/minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-1z8k4wzFnNjVK/tlxvrWuK5WMt6mydWWP7+zvH5eFep4oj+UkrfiJTRtjCeBXNpwaA/FYqqtb4/QS4ianFpIRA==" + "@types/mime": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-3.0.1.tgz", + "integrity": "sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA==" }, "@types/node": { - "version": "15.0.3", - "resolved": "https://registry.npmjs.org/@types/node/-/node-15.0.3.tgz", - "integrity": "sha512-/WbxFeBU+0F79z9RdEOXH4CsDga+ibi5M8uEYr91u3CkT/pdWcV8MCook+4wDPnZBexRdwWS+PiVZ2xJviAzcQ==" + "version": "18.11.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.3.tgz", + "integrity": "sha512-fNjDQzzOsZeKZu5NATgXUPsaFaTxeRgFXoosrHivTl8RGeV733OLawXsGfEk9a8/tySyZUyiZ6E8LcjPFZ2y1A==" }, "@types/parse-json": { "version": "4.0.0", @@ -17824,174 +16171,256 @@ "integrity": "sha512-kUNnecmtkunAoQ3CnjmMkzNU/gtxG8guhi+Fk2U/kOpIKjIMKnXGp4IJCgQJrXSgMsWYimYG4TGjz/UzbGEBTw==" }, "@types/prop-types": { - "version": "15.7.3", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.3.tgz", - "integrity": "sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw==", - "peer": true + "version": "15.7.5", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", + "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==" }, - "@types/q": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.4.tgz", - "integrity": "sha512-1HcDas8SEj4z1Wc696tH56G8OlRaH/sqZOynNNB+HF0WOeXPaxTtbYzJY2oEfiUxjSKjhCKr+MvR7dCHcEelug==" + "@types/qs": { + "version": "6.9.7", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", + "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==" + }, + "@types/range-parser": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", + "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==" }, "@types/react": { - "version": "17.0.5", - "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.5.tgz", - "integrity": "sha512-bj4biDB9ZJmGAYTWSKJly6bMr4BLUiBrx9ujiJEoP9XIDY9CTaPGxE5QWN/1WjpPLzYF7/jRNnV2nNxNe970sw==", - "peer": true, + "version": "18.0.26", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.26.tgz", + "integrity": "sha512-hCR3PJQsAIXyxhTNSiDFY//LhnMZWpNNr5etoCqx/iUfGc5gXWtQR2Phl908jVR6uPXacojQWTg4qRpkxTuGug==", "requires": { "@types/prop-types": "*", "@types/scheduler": "*", "csstype": "^3.0.2" } }, + "@types/react-router": { + "version": "5.1.20", + "resolved": "https://registry.npmjs.org/@types/react-router/-/react-router-5.1.20.tgz", + "integrity": "sha512-jGjmu/ZqS7FjSH6owMcD5qpq19+1RS9DeVRqfl1FeBMxTDQAGwlMWOcs52NDoXaNKyG3d1cYQFMs9rCrb88o9Q==", + "requires": { + "@types/history": "^4.7.11", + "@types/react": "*" + } + }, + "@types/react-router-config": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/@types/react-router-config/-/react-router-config-5.0.6.tgz", + "integrity": "sha512-db1mx37a1EJDf1XeX8jJN7R3PZABmJQXR8r28yUjVMFSjkmnQo6X6pOEEmNl+Tp2gYQOGPdYbFIipBtdElZ3Yg==", + "requires": { + "@types/history": "^4.7.11", + "@types/react": "*", + "@types/react-router": "*" + } + }, + "@types/react-router-dom": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/@types/react-router-dom/-/react-router-dom-5.3.3.tgz", + "integrity": "sha512-kpqnYK4wcdm5UaWI3fLcELopqLrHgLqNsdpHauzlQktfkHL3npOSwtj1Uz9oKBAzs7lFtVkV8j83voAz2D8fhw==", + "requires": { + "@types/history": "^4.7.11", + "@types/react": "*", + "@types/react-router": "*" + } + }, + "@types/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==" + }, "@types/sax": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@types/sax/-/sax-1.2.1.tgz", - "integrity": "sha512-dqYdvN7Sbw8QT/0Ci5rhjE4/iCMJEM0Y9rHpCu+gGXD9Lwbz28t6HI2yegsB6BoV1sShRMU6lAmAcgRjmFy7LA==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@types/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-pSAff4IAxJjfAXUG6tFkO7dsSbTmf8CtUpfhhZ5VhkRpC4628tJhh3+V6H1E+/Gs9piSzYKT5yzHO5M4GG9jkw==", "requires": { "@types/node": "*" } }, "@types/scheduler": { - "version": "0.16.1", - "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.1.tgz", - "integrity": "sha512-EaCxbanVeyxDRTQBkdLb3Bvl/HK7PBK6UJjsSixB0iHKoWxE5uu2Q/DgtpOhPIojN0Zl1whvOd7PoHs2P0s5eA==", - "peer": true + "version": "0.16.2", + "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", + "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==" + }, + "@types/serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg==", + "requires": { + "@types/express": "*" + } + }, + "@types/serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-z5xyF6uh8CbjAu9760KDKsH2FcDxZ2tFCsA4HIMWE6IkiYMXfVoa+4f9KX+FN0ZLsaMw1WNG2ETLA6N+/YA+cg==", + "requires": { + "@types/mime": "*", + "@types/node": "*" + } + }, + "@types/sockjs": { + "version": "0.3.33", + "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.33.tgz", + "integrity": "sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw==", + "requires": { + "@types/node": "*" + } }, "@types/unist": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.3.tgz", - "integrity": "sha512-FvUupuM3rlRsRtCN+fDudtmytGO6iHJuuRKS1Ss0pG5z8oX0diNEw94UEL7hgDbpN94rgaK5R7sWm6RrSkZuAQ==" + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.6.tgz", + "integrity": "sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ==" + }, + "@types/ws": { + "version": "8.5.4", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.4.tgz", + "integrity": "sha512-zdQDHKUgcX/zBc4GrwsE/7dVdAD8JR4EuiAXiiUhhfyIJXXb2+PrGshFyeXWQPMmmZ2XxgaqclgpIC7eTXc1mg==", + "requires": { + "@types/node": "*" + } + }, + "@types/yargs": { + "version": "17.0.19", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.19.tgz", + "integrity": "sha512-cAx3qamwaYX9R0fzOIZAlFpo4A+1uBVCxqpKz9D26uTF4srRXaGTTsikQmaotCtNdbhzyUH7ft6p9ktz9s6UNQ==", + "requires": { + "@types/yargs-parser": "*" + } + }, + "@types/yargs-parser": { + "version": "21.0.0", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", + "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==" }, "@webassemblyjs/ast": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.0.tgz", - "integrity": "sha512-kX2W49LWsbthrmIRMbQZuQDhGtjyqXfEmmHyEi4XWnSZtPmxY0+3anPIzsnRb45VH/J55zlOfWvZuY47aJZTJg==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", + "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", "requires": { - "@webassemblyjs/helper-numbers": "1.11.0", - "@webassemblyjs/helper-wasm-bytecode": "1.11.0" + "@webassemblyjs/helper-numbers": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1" } }, "@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.0.tgz", - "integrity": "sha512-Q/aVYs/VnPDVYvsCBL/gSgwmfjeCb4LW8+TMrO3cSzJImgv8lxxEPM2JA5jMrivE7LSz3V+PFqtMbls3m1exDA==" + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", + "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==" }, "@webassemblyjs/helper-api-error": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.0.tgz", - "integrity": "sha512-baT/va95eXiXb2QflSx95QGT5ClzWpGaa8L7JnJbgzoYeaA27FCvuBXU758l+KXWRndEmUXjP0Q5fibhavIn8w==" + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", + "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==" }, "@webassemblyjs/helper-buffer": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.0.tgz", - "integrity": "sha512-u9HPBEl4DS+vA8qLQdEQ6N/eJQ7gT7aNvMIo8AAWvAl/xMrcOSiI2M0MAnMCy3jIFke7bEee/JwdX1nUpCtdyA==" + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", + "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==" }, "@webassemblyjs/helper-numbers": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.0.tgz", - "integrity": "sha512-DhRQKelIj01s5IgdsOJMKLppI+4zpmcMQ3XboFPLwCpSNH6Hqo1ritgHgD0nqHeSYqofA6aBN/NmXuGjM1jEfQ==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", + "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", "requires": { - "@webassemblyjs/floating-point-hex-parser": "1.11.0", - "@webassemblyjs/helper-api-error": "1.11.0", + "@webassemblyjs/floating-point-hex-parser": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", "@xtuc/long": "4.2.2" } }, "@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.0.tgz", - "integrity": "sha512-MbmhvxXExm542tWREgSFnOVo07fDpsBJg3sIl6fSp9xuu75eGz5lz31q7wTLffwL3Za7XNRCMZy210+tnsUSEA==" + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", + "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==" }, "@webassemblyjs/helper-wasm-section": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.0.tgz", - "integrity": "sha512-3Eb88hcbfY/FCukrg6i3EH8H2UsD7x8Vy47iVJrP967A9JGqgBVL9aH71SETPx1JrGsOUVLo0c7vMCN22ytJew==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", + "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", "requires": { - "@webassemblyjs/ast": "1.11.0", - "@webassemblyjs/helper-buffer": "1.11.0", - "@webassemblyjs/helper-wasm-bytecode": "1.11.0", - "@webassemblyjs/wasm-gen": "1.11.0" + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1" } }, "@webassemblyjs/ieee754": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.0.tgz", - "integrity": "sha512-KXzOqpcYQwAfeQ6WbF6HXo+0udBNmw0iXDmEK5sFlmQdmND+tr773Ti8/5T/M6Tl/413ArSJErATd8In3B+WBA==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", + "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", "requires": { "@xtuc/ieee754": "^1.2.0" } }, "@webassemblyjs/leb128": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.0.tgz", - "integrity": "sha512-aqbsHa1mSQAbeeNcl38un6qVY++hh8OpCOzxhixSYgbRfNWcxJNJQwe2rezK9XEcssJbbWIkblaJRwGMS9zp+g==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", + "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", "requires": { "@xtuc/long": "4.2.2" } }, "@webassemblyjs/utf8": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.0.tgz", - "integrity": "sha512-A/lclGxH6SpSLSyFowMzO/+aDEPU4hvEiooCMXQPcQFPPJaYcPQNKGOCLUySJsYJ4trbpr+Fs08n4jelkVTGVw==" + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", + "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==" }, "@webassemblyjs/wasm-edit": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.0.tgz", - "integrity": "sha512-JHQ0damXy0G6J9ucyKVXO2j08JVJ2ntkdJlq1UTiUrIgfGMmA7Ik5VdC/L8hBK46kVJgujkBIoMtT8yVr+yVOQ==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", + "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", "requires": { - "@webassemblyjs/ast": "1.11.0", - "@webassemblyjs/helper-buffer": "1.11.0", - "@webassemblyjs/helper-wasm-bytecode": "1.11.0", - "@webassemblyjs/helper-wasm-section": "1.11.0", - "@webassemblyjs/wasm-gen": "1.11.0", - "@webassemblyjs/wasm-opt": "1.11.0", - "@webassemblyjs/wasm-parser": "1.11.0", - "@webassemblyjs/wast-printer": "1.11.0" + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/helper-wasm-section": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-opt": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "@webassemblyjs/wast-printer": "1.11.1" } }, "@webassemblyjs/wasm-gen": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.0.tgz", - "integrity": "sha512-BEUv1aj0WptCZ9kIS30th5ILASUnAPEvE3tVMTrItnZRT9tXCLW2LEXT8ezLw59rqPP9klh9LPmpU+WmRQmCPQ==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", + "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", "requires": { - "@webassemblyjs/ast": "1.11.0", - "@webassemblyjs/helper-wasm-bytecode": "1.11.0", - "@webassemblyjs/ieee754": "1.11.0", - "@webassemblyjs/leb128": "1.11.0", - "@webassemblyjs/utf8": "1.11.0" + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" } }, "@webassemblyjs/wasm-opt": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.0.tgz", - "integrity": "sha512-tHUSP5F4ywyh3hZ0+fDQuWxKx3mJiPeFufg+9gwTpYp324mPCQgnuVKwzLTZVqj0duRDovnPaZqDwoyhIO8kYg==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", + "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", "requires": { - "@webassemblyjs/ast": "1.11.0", - "@webassemblyjs/helper-buffer": "1.11.0", - "@webassemblyjs/wasm-gen": "1.11.0", - "@webassemblyjs/wasm-parser": "1.11.0" + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1" } }, "@webassemblyjs/wasm-parser": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.0.tgz", - "integrity": "sha512-6L285Sgu9gphrcpDXINvm0M9BskznnzJTE7gYkjDbxET28shDqp27wpruyx3C2S/dvEwiigBwLA1cz7lNUi0kw==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", + "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", "requires": { - "@webassemblyjs/ast": "1.11.0", - "@webassemblyjs/helper-api-error": "1.11.0", - "@webassemblyjs/helper-wasm-bytecode": "1.11.0", - "@webassemblyjs/ieee754": "1.11.0", - "@webassemblyjs/leb128": "1.11.0", - "@webassemblyjs/utf8": "1.11.0" + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" } }, "@webassemblyjs/wast-printer": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.0.tgz", - "integrity": "sha512-Fg5OX46pRdTgB7rKIUojkh9vXaVN6sGYCnEiJN1GYkb0RPwShZXp6KTDqmoMdQPKhcroOXh3fEzmkWmCYaKYhQ==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", + "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", "requires": { - "@webassemblyjs/ast": "1.11.0", + "@webassemblyjs/ast": "1.11.1", "@xtuc/long": "4.2.2" } }, @@ -18006,12 +16435,12 @@ "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==" }, "accepts": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", - "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", "requires": { - "mime-types": "~2.1.24", - "negotiator": "0.6.2" + "mime-types": "~2.1.34", + "negotiator": "0.6.3" } }, "acorn": { @@ -18020,20 +16449,20 @@ "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==" }, "acorn-jsx": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz", - "integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==", + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", "requires": {} }, "acorn-walk": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.1.0.tgz", - "integrity": "sha512-mjmzmv12YIG/G8JQdQuz2MUDShEJ6teYpT5bmWA4q7iwoGen8xtt3twF3OvzIUl+Q06aWIjvnwQUKvQ6TtMRjg==" + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==" }, "address": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/address/-/address-1.1.2.tgz", - "integrity": "sha512-aT6camzM4xEA54YVJYSqxz1kv4IHnQZRtThJJHhUMRExaU5spC7jX5ugSwTaTgJliIgs4VhZOk7htClvQ/LmRA==" + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/address/-/address-1.2.1.tgz", + "integrity": "sha512-B+6bi5D34+fDYENiH5qOlA0cV2rAGKuWZ9LeyUUehbXy8e0VS9e498yO0Jeeh+iM+6KbfudHTFjXw2MmJD4QRA==" }, "aggregate-error": { "version": "3.1.0", @@ -18055,11 +16484,31 @@ "uri-js": "^4.2.2" } }, - "ajv-errors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz", - "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==", - "requires": {} + "ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "requires": { + "ajv": "^8.0.0" + }, + "dependencies": { + "ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + } + } }, "ajv-keywords": { "version": "3.5.2", @@ -18068,111 +16517,56 @@ "requires": {} }, "algoliasearch": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-4.9.1.tgz", - "integrity": "sha512-EeJUYXzBEhZSsL6tXc3hseLBCtlNLa1MZ4mlMK6EeX38yRjY5vgnFcNNml6uUhlOjvheKxgkKRpPWkxgL8Cqkg==", - "requires": { - "@algolia/cache-browser-local-storage": "4.9.1", - "@algolia/cache-common": "4.9.1", - "@algolia/cache-in-memory": "4.9.1", - "@algolia/client-account": "4.9.1", - "@algolia/client-analytics": "4.9.1", - "@algolia/client-common": "4.9.1", - "@algolia/client-recommendation": "4.9.1", - "@algolia/client-search": "4.9.1", - "@algolia/logger-common": "4.9.1", - "@algolia/logger-console": "4.9.1", - "@algolia/requester-browser-xhr": "4.9.1", - "@algolia/requester-common": "4.9.1", - "@algolia/requester-node-http": "4.9.1", - "@algolia/transporter": "4.9.1" + "version": "4.14.2", + "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-4.14.2.tgz", + "integrity": "sha512-ngbEQonGEmf8dyEh5f+uOIihv4176dgbuOZspiuhmTTBRBuzWu3KCGHre6uHj5YyuC7pNvQGzB6ZNJyZi0z+Sg==", + "requires": { + "@algolia/cache-browser-local-storage": "4.14.2", + "@algolia/cache-common": "4.14.2", + "@algolia/cache-in-memory": "4.14.2", + "@algolia/client-account": "4.14.2", + "@algolia/client-analytics": "4.14.2", + "@algolia/client-common": "4.14.2", + "@algolia/client-personalization": "4.14.2", + "@algolia/client-search": "4.14.2", + "@algolia/logger-common": "4.14.2", + "@algolia/logger-console": "4.14.2", + "@algolia/requester-browser-xhr": "4.14.2", + "@algolia/requester-common": "4.14.2", + "@algolia/requester-node-http": "4.14.2", + "@algolia/transporter": "4.14.2" } }, "algoliasearch-helper": { - "version": "3.4.4", - "resolved": "https://registry.npmjs.org/algoliasearch-helper/-/algoliasearch-helper-3.4.4.tgz", - "integrity": "sha512-OjyVLjykaYKCMxxRMZNiwLp8CS310E0qAeIY2NaublcmLAh8/SL19+zYHp7XCLtMem2ZXwl3ywMiA32O9jszuw==", + "version": "3.11.1", + "resolved": "https://registry.npmjs.org/algoliasearch-helper/-/algoliasearch-helper-3.11.1.tgz", + "integrity": "sha512-mvsPN3eK4E0bZG0/WlWJjeqe/bUD2KOEVOl0GyL/TGXn6wcpZU8NOuztGHCUKXkyg5gq6YzUakVTmnmSSO5Yiw==", "requires": { - "events": "^1.1.1" + "@algolia/events": "^4.0.1" } }, - "alphanum-sort": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz", - "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=" - }, "ansi-align": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.0.tgz", - "integrity": "sha512-ZpClVKqXN3RGBmKibdfWzqCY4lnjEuoNzU5T0oEFpfd/z5qJHVarukridD4juLO2FXMiwUQxr9WqQtaYa8XRYw==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", + "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", "requires": { - "string-width": "^3.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" - }, - "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "requires": { - "ansi-regex": "^4.1.0" - } - } + "string-width": "^4.1.0" } }, "ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==" - }, - "ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "requires": { - "type-fest": "^0.21.3" - }, - "dependencies": { - "type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==" - } - } + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", + "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==" }, - "ansi-html": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz", - "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=" + "ansi-html-community": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", + "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==" }, "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" }, "ansi-styles": { "version": "4.3.0", @@ -18192,45 +16586,30 @@ } }, "arg": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.0.tgz", - "integrity": "sha512-4P8Zm2H+BRS+c/xX1LrHw0qKpEhdlZjLCgWy+d78T9vqa2Z2SiD2wMrYuWIAFy5IZUD7nnNXroRttz+0RzlrzQ==" + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==" }, "argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" }, - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=" - }, - "arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==" - }, - "arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=" - }, "array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", + "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==" }, "array-includes": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.3.tgz", - "integrity": "sha512-gcem1KlBU7c9rB+Rq8/3PPKsK2kjqeEBa3bD5kkQo4nYlOHQCJqIJFqBXDEfwaRuYTT4E+FxA9xez7Gf/e3Q7A==", + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.5.tgz", + "integrity": "sha512-iSDYZMMyTPkiFasVqfuAQnWAYcvO/SeBSCGKePoEthjp4LEMTe4uLc7b025o4jAZpHhihh8xPo99TNWUWWkGDQ==", "requires": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5", "get-intrinsic": "^1.1.1", - "is-string": "^1.0.5" + "is-string": "^1.0.7" } }, "array-union": { @@ -18238,89 +16617,51 @@ "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==" }, - "array-uniq": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=" - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=" - }, "array.prototype.flatmap": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.2.4.tgz", - "integrity": "sha512-r9Z0zYoxqHz60vvQbWEdXIEtCwHF0yxaWfno9qzXeNHvfyl3BZqygmGzb84dsubyaXLH4husF+NFgMSdpZhk2Q==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.0.tgz", + "integrity": "sha512-PZC9/8TKAIxcWKdyeb77EzULHPrIX/tIZebLJUQOMR1OwYosT8yggdfWScfTBCDj5utONvOuPQQumYsU2ULbkg==", "requires": { - "call-bind": "^1.0.0", + "call-bind": "^1.0.2", "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.1", - "function-bind": "^1.1.1" + "es-abstract": "^1.19.2", + "es-shim-unscopables": "^1.0.0" } }, "asap": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=" - }, - "assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=" + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==" }, "astral-regex": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==" }, - "async": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", - "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", - "requires": { - "lodash": "^4.17.14" - } - }, - "async-each": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", - "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==" - }, - "async-limiter": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", - "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==" - }, "at-least-node": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==" }, - "atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==" - }, "autoprefixer": { - "version": "10.2.5", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.2.5.tgz", - "integrity": "sha512-7H4AJZXvSsn62SqZyJCP+1AWwOuoYpUfK6ot9vm0e87XD6mT8lDywc9D9OTJPMULyGcvmIxzTAMeG2Cc+YX+fA==", - "requires": { - "browserslist": "^4.16.3", - "caniuse-lite": "^1.0.30001196", - "colorette": "^1.2.2", - "fraction.js": "^4.0.13", + "version": "10.4.12", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.12.tgz", + "integrity": "sha512-WrCGV9/b97Pa+jtwf5UGaRjgQIg7OK3D06GnoYoZNcG1Xb8Gt3EfuKjlhh9i/VtT16g6PYjZ69jdJ2g8FxSC4Q==", + "requires": { + "browserslist": "^4.21.4", + "caniuse-lite": "^1.0.30001407", + "fraction.js": "^4.2.0", "normalize-range": "^0.1.2", - "postcss-value-parser": "^4.1.0" + "picocolors": "^1.0.0", + "postcss-value-parser": "^4.2.0" } }, "axios": { - "version": "0.21.1", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.1.tgz", - "integrity": "sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA==", + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.25.0.tgz", + "integrity": "sha512-cD8FOb0tRH3uuEe6+evtAbgJtfxr7ly3fQjYcMcuPlgkwVS9xboaVIpcDV+cYQe+yGykgwZCs1pzjntcGa6l5g==", "requires": { - "follow-redirects": "^1.10.0" + "follow-redirects": "^1.14.7" } }, "babel-eslint": { @@ -18337,34 +16678,14 @@ } }, "babel-loader": { - "version": "8.2.2", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.2.tgz", - "integrity": "sha512-JvTd0/D889PQBtUXJ2PXaKU/pjZDMtHA9V2ecm+eNRmmBCMR09a+fmpGTNwnJtFmFl5Ei7Vy47LjBb+L0wQ99g==", + "version": "8.2.5", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.5.tgz", + "integrity": "sha512-OSiFfH89LrEMiWd4pLNqGz4CwJDtbs2ZVc+iGu2HrkRfPxId9F2anQj38IxWpmRfsUY0aBZYi1EFcd3mhtRMLQ==", "requires": { "find-cache-dir": "^3.3.1", - "loader-utils": "^1.4.0", + "loader-utils": "^2.0.0", "make-dir": "^3.1.0", "schema-utils": "^2.6.5" - }, - "dependencies": { - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "requires": { - "minimist": "^1.2.0" - } - }, - "loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - } - } } }, "babel-plugin-apply-mdx-type-prop": { @@ -18384,9 +16705,9 @@ } }, "babel-plugin-dynamic-import-node": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.0.tgz", - "integrity": "sha512-o6qFkpeQEBxcqt0XYlWzAVxNCSCZdUgcR8IRlhD/8DylxjjO4foPcvTW0GGKa/cVt3rvxZ7o5ippJ+/0nvLhlQ==", + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", + "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", "requires": { "object.assign": "^4.1.0" } @@ -18407,12 +16728,12 @@ } }, "babel-plugin-polyfill-corejs2": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.2.0.tgz", - "integrity": "sha512-9bNwiR0dS881c5SHnzCmmGlMkJLl0OUZvxrxHo9w/iNoRuqaPjqlvBf4HrovXtQs/au5yKkpcdgfT1cC5PAZwg==", + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz", + "integrity": "sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==", "requires": { - "@babel/compat-data": "^7.13.11", - "@babel/helper-define-polyfill-provider": "^0.2.0", + "@babel/compat-data": "^7.17.7", + "@babel/helper-define-polyfill-provider": "^0.3.3", "semver": "^6.1.1" }, "dependencies": { @@ -18424,20 +16745,20 @@ } }, "babel-plugin-polyfill-corejs3": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.2.0.tgz", - "integrity": "sha512-zZyi7p3BCUyzNxLx8KV61zTINkkV65zVkDAFNZmrTCRVhjo1jAS+YLvDJ9Jgd/w2tsAviCwFHReYfxO3Iql8Yg==", + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.6.0.tgz", + "integrity": "sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==", "requires": { - "@babel/helper-define-polyfill-provider": "^0.2.0", - "core-js-compat": "^3.9.1" + "@babel/helper-define-polyfill-provider": "^0.3.3", + "core-js-compat": "^3.25.1" } }, "babel-plugin-polyfill-regenerator": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.2.0.tgz", - "integrity": "sha512-J7vKbCuD2Xi/eEHxquHN14bXAW9CXtecwuLrOIDJtcZzTaPzV1VdEfoUf9AzcRBMolKUQKM9/GVojeh0hFiqMg==", + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.1.tgz", + "integrity": "sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==", "requires": { - "@babel/helper-define-polyfill-provider": "^0.2.0" + "@babel/helper-define-polyfill-provider": "^0.3.3" } }, "bail": { @@ -18450,39 +16771,15 @@ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, - "base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", - "requires": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "requires": { - "is-descriptor": "^1.0.0" - } - } - } - }, "base16": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/base16/-/base16-1.0.0.tgz", - "integrity": "sha1-4pf2DX7BAUp6lxo568ipjAtoHnA=" + "integrity": "sha512-pNdYkNPiJUnEhnfXV56+sQy8+AaPcG3POZAUnwr4EeqCUZFz4u2PePbo3e5Gj4ziYPCWGUZT9RHisvJKnwFuBQ==" }, "batch": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", - "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=" + "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==" }, "big.js": { "version": "5.2.2", @@ -18494,37 +16791,30 @@ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==" }, - "bindings": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", - "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", - "optional": true, - "requires": { - "file-uri-to-path": "1.0.0" - } - }, - "bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" - }, "body-parser": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", - "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", + "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", "requires": { - "bytes": "3.1.0", + "bytes": "3.1.2", "content-type": "~1.0.4", "debug": "2.6.9", - "depd": "~1.1.2", - "http-errors": "1.7.2", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", "iconv-lite": "0.4.24", - "on-finished": "~2.3.0", - "qs": "6.7.0", - "raw-body": "2.4.0", - "type-is": "~1.6.17" + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" }, "dependencies": { + "bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==" + }, "debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", @@ -18536,45 +16826,36 @@ "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" } } }, - "bonjour": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz", - "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=", + "bonjour-service": { + "version": "1.0.14", + "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.0.14.tgz", + "integrity": "sha512-HIMbgLnk1Vqvs6B4Wq5ep7mxvj9sGz5d1JJyDNSGNIdA/w2MCz6GTjWTdjqOJV1bEPj+6IkxDvWNFKEBxNt4kQ==", "requires": { - "array-flatten": "^2.1.0", - "deep-equal": "^1.0.1", + "array-flatten": "^2.1.2", "dns-equal": "^1.0.0", - "dns-txt": "^2.0.2", - "multicast-dns": "^6.0.1", - "multicast-dns-service-types": "^1.1.0" - }, - "dependencies": { - "array-flatten": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", - "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==" - } + "fast-deep-equal": "^3.1.3", + "multicast-dns": "^7.2.5" } }, "boolbase": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=" + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==" }, "boxen": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.0.1.tgz", - "integrity": "sha512-49VBlw+PrWEF51aCmy7QIteYPIFZxSpvqBdP/2itCPPlJ49kj9zg/XPRFrdkne2W+CfwXUls8exMvu1RysZpKA==", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", + "integrity": "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==", "requires": { "ansi-align": "^3.0.0", "camelcase": "^6.2.0", "chalk": "^4.1.0", "cli-boxes": "^2.2.1", - "string-width": "^4.2.0", + "string-width": "^4.2.2", "type-fest": "^0.20.2", "widest-line": "^3.1.0", "wrap-ansi": "^7.0.0" @@ -18598,47 +16879,30 @@ } }, "browserslist": { - "version": "4.16.6", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz", - "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==", + "version": "4.21.4", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz", + "integrity": "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==", "requires": { - "caniuse-lite": "^1.0.30001219", - "colorette": "^1.2.2", - "electron-to-chromium": "^1.3.723", - "escalade": "^3.1.1", - "node-releases": "^1.1.71" + "caniuse-lite": "^1.0.30001400", + "electron-to-chromium": "^1.4.251", + "node-releases": "^2.0.6", + "update-browserslist-db": "^1.0.9" } }, - "buffer-from": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" + "buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==" }, - "buffer-indexof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz", - "integrity": "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==" + "buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" }, "bytes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", - "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" - }, - "cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", - "requires": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" - } + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==" }, "cacheable-request": { "version": "6.1.0", @@ -18666,6 +16930,11 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==" + }, + "normalize-url": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", + "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==" } } }, @@ -18693,9 +16962,9 @@ } }, "camelcase": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", - "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==" + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==" }, "camelcase-css": { "version": "2.0.1", @@ -18714,9 +16983,9 @@ } }, "caniuse-lite": { - "version": "1.0.30001341", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001341.tgz", - "integrity": "sha512-2SodVrFFtvGENGCv0ChVJIDQ0KPaS1cg7/qtfMaICgeMolDdo/Z2OD32F0Aq9yl6F4YFwGPBS5AaPqNYiW4PoA==" + "version": "1.0.30001422", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001422.tgz", + "integrity": "sha512-hSesn02u1QacQHhaxl/kNMZwqVG35Sz/8DgvmgedxSH8z9UUpcDYSPYgsj3x5dQNRcNp6BwpSfQfVzYUTm+fog==" }, "ccount": { "version": "1.1.0", @@ -18724,9 +16993,9 @@ "integrity": "sha512-vlNK021QdI7PNeiUh/lKkC/mNHHfV0m/Ad5JoI0TYtlBnJAslM/JIkm/tGC88bkLIwO6OQ5uV6ztS6kVAtCDlg==" }, "chalk": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", - "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -18748,143 +17017,78 @@ "integrity": "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==" }, "cheerio": { - "version": "0.22.0", - "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-0.22.0.tgz", - "integrity": "sha1-qbqoYKP5tZWmuBsahocxIe06Jp4=", - "requires": { - "css-select": "~1.2.0", - "dom-serializer": "~0.1.0", - "entities": "~1.1.1", - "htmlparser2": "^3.9.1", - "lodash.assignin": "^4.0.9", - "lodash.bind": "^4.1.4", - "lodash.defaults": "^4.0.1", - "lodash.filter": "^4.4.0", - "lodash.flatten": "^4.2.0", - "lodash.foreach": "^4.3.0", - "lodash.map": "^4.4.0", - "lodash.merge": "^4.4.0", - "lodash.pick": "^4.2.1", - "lodash.reduce": "^4.4.0", - "lodash.reject": "^4.4.0", - "lodash.some": "^4.4.0" + "version": "1.0.0-rc.12", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.12.tgz", + "integrity": "sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==", + "requires": { + "cheerio-select": "^2.1.0", + "dom-serializer": "^2.0.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1", + "htmlparser2": "^8.0.1", + "parse5": "^7.0.0", + "parse5-htmlparser2-tree-adapter": "^7.0.0" + }, + "dependencies": { + "parse5": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", + "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", + "requires": { + "entities": "^4.4.0" + } + } + } + }, + "cheerio-select": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz", + "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==", + "requires": { + "boolbase": "^1.0.0", + "css-select": "^5.1.0", + "css-what": "^6.1.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1" } }, "chokidar": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz", - "integrity": "sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==", + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", "requires": { - "anymatch": "~3.1.1", + "anymatch": "~3.1.2", "braces": "~3.0.2", - "fsevents": "~2.3.1", - "glob-parent": "~5.1.0", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", "is-binary-path": "~2.1.0", "is-glob": "~4.0.1", "normalize-path": "~3.0.0", - "readdirp": "~3.5.0" + "readdirp": "~3.6.0" } }, + "chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" + }, "chrome-trace-event": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==" }, "ci-info": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.1.1.tgz", - "integrity": "sha512-kdRWLBIJwdsYJWYJFtAFFYxybguqeF91qpZaggjG5Nf8QKdizFG2hjqvaTXbxFIcYbSaD74KpAXv6BSm17DHEQ==" - }, - "class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", - "requires": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - } - }, - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" - } - } + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.7.1.tgz", + "integrity": "sha512-4jYS4MOAaCIStSRwiuxc4B8MYhIe676yO1sYGzARnjXkWpmzZMMYxY6zu8WYWDhSuth5zhrQ1rhNSibyyvv4/w==" }, "clean-css": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.1.2.tgz", - "integrity": "sha512-QcaGg9OuMo+0Ds933yLOY+gHPWbxhxqF0HDexmToPf8pczvmvZGYzd+QqWp9/mkucAOKViI+dSFOqoZIvXbeBw==", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.1.tgz", + "integrity": "sha512-lCr8OHhiWCTw4v8POJovCoh4T7I9U11yVsPjMWWnnMmp9ZowCxyad1Pathle/9HjaDp+fdQKjO9fQydE6RHTZg==", "requires": { "source-map": "~0.6.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - } } }, "clean-stack": { @@ -18892,220 +17096,48 @@ "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==" }, - "cli-boxes": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", - "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==" - }, - "clipboard": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/clipboard/-/clipboard-2.0.8.tgz", - "integrity": "sha512-Y6WO0unAIQp5bLmk1zdThRhgJt/x3ks6f30s3oE3H1mgIEU33XyQjEf8gsf6DxC7NPX8Y1SsNWjUjL/ywLnnbQ==", - "optional": true, - "requires": { - "good-listener": "^1.2.2", - "select": "^1.1.2", - "tiny-emitter": "^2.0.0" - } - }, - "cliui": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", - "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", - "requires": { - "string-width": "^3.1.0", - "strip-ansi": "^5.2.0", - "wrap-ansi": "^5.1.0" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" - }, - "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "requires": { - "ansi-regex": "^4.1.0" - } - }, - "wrap-ansi": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", - "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", - "requires": { - "ansi-styles": "^3.2.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0" - } - } - } - }, - "clone-deep": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", - "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", - "requires": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" - } - }, - "clone-response": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", - "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", - "requires": { - "mimic-response": "^1.0.0" - } - }, - "clsx": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.1.1.tgz", - "integrity": "sha512-6/bPho624p3S2pMyvP5kKBPXnI3ufHLObBFCfgx+LkeR5lg2XYy2hqZqUf45ypD8COn2bhgGJSUE+l5dhNBieA==" - }, - "coa": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz", - "integrity": "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==", - "requires": { - "@types/q": "^1.5.1", - "chalk": "^2.4.1", - "q": "^1.1.2" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } + "cli-boxes": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", + "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==" }, - "collapse-white-space": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-1.0.6.tgz", - "integrity": "sha512-jEovNnrhMuqyCcjfEJA56v0Xq8SkIoPKDyaHahwo3POf4qcSXqMYuwNcOTzp74vTsR9Tn08z4MxWqAhcekogkQ==" + "cli-table3": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.3.tgz", + "integrity": "sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==", + "requires": { + "@colors/colors": "1.5.0", + "string-width": "^4.2.0" + } }, - "collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", "requires": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" } }, - "color": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/color/-/color-3.1.3.tgz", - "integrity": "sha512-xgXAcTHa2HeFCGLE9Xs/R82hujGtu9Jd9x4NW3T34+OMs7VoPsjwzRczKHvTAHeJwWFwX5j15+MgAppE8ztObQ==", + "clone-response": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz", + "integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==", "requires": { - "color-convert": "^1.9.1", - "color-string": "^1.5.4" - }, - "dependencies": { - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" - } + "mimic-response": "^1.0.0" } }, + "clsx": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz", + "integrity": "sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==" + }, + "collapse-white-space": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-1.0.6.tgz", + "integrity": "sha512-jEovNnrhMuqyCcjfEJA56v0Xq8SkIoPKDyaHahwo3POf4qcSXqMYuwNcOTzp74vTsR9Tn08z4MxWqAhcekogkQ==" + }, "color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", @@ -19119,19 +17151,15 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, - "color-string": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.5.tgz", - "integrity": "sha512-jgIoum0OfQfq9Whcfc2z/VhCNcmQjWbey6qBX0vqt7YICflUmBCh9E9CiQD5GSJ+Uehixm3NUwHVhqUAWRivZg==", - "requires": { - "color-name": "^1.0.0", - "simple-swizzle": "^0.2.2" - } + "colord": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", + "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==" }, "colorette": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz", - "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==" + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz", + "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==" }, "combine-promises": { "version": "1.1.0", @@ -19143,6 +17171,11 @@ "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz", "integrity": "sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw==" }, + "command-exists-promise": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/command-exists-promise/-/command-exists-promise-2.0.2.tgz", + "integrity": "sha512-T6PB6vdFrwnHXg/I0kivM3DqaCGZLjjYSOe0a5WgFKcz1sOnmOeIjnhQPXVXX3QjVbLyTJ85lJkX6lUpukTzaA==" + }, "commander": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", @@ -19151,12 +17184,7 @@ "commondir": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=" - }, - "component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==" }, "compressible": { "version": "2.0.18", @@ -19180,11 +17208,6 @@ "vary": "~1.1.2" }, "dependencies": { - "bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" - }, "debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", @@ -19196,14 +17219,19 @@ "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" } } }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" }, "configstore": { "version": "5.0.1", @@ -19219,9 +17247,9 @@ } }, "connect-history-api-fallback": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", - "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", + "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==" }, "consola": { "version": "2.15.3", @@ -19229,11 +17257,11 @@ "integrity": "sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==" }, "content-disposition": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", - "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", "requires": { - "safe-buffer": "5.1.2" + "safe-buffer": "5.2.1" } }, "content-type": { @@ -19242,27 +17270,19 @@ "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" }, "convert-source-map": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", - "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", - "requires": { - "safe-buffer": "~5.1.1" - } + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" }, "cookie": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", - "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==" + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==" }, "cookie-signature": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" - }, - "copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=" + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" }, "copy-text-to-clipboard": { "version": "3.0.1", @@ -19270,66 +17290,112 @@ "integrity": "sha512-rvVsHrpFcL4F2P8ihsoLdFHmd404+CMg71S756oRSeQgqk51U3kicGdnvfkrxva0xXH92SjGS62B0XIJsbh+9Q==" }, "copy-webpack-plugin": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-8.1.1.tgz", - "integrity": "sha512-rYM2uzRxrLRpcyPqGceRBDpxxUV8vcDqIKxAUKfcnFpcrPxT5+XvhTxv7XLjo5AvEJFPdAE3zCogG2JVahqgSQ==", + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-11.0.0.tgz", + "integrity": "sha512-fX2MWpamkW0hZxMEg0+mYnA40LTosOSa5TqZ9GYIBzyJa9C3QUaMPSE2xAi/buNr8u89SfD9wHSQVBzrRa/SOQ==", "requires": { - "fast-glob": "^3.2.5", - "glob-parent": "^5.1.1", - "globby": "^11.0.3", + "fast-glob": "^3.2.11", + "glob-parent": "^6.0.1", + "globby": "^13.1.1", "normalize-path": "^3.0.0", - "p-limit": "^3.1.0", - "schema-utils": "^3.0.0", - "serialize-javascript": "^5.0.1" + "schema-utils": "^4.0.0", + "serialize-javascript": "^6.0.0" }, "dependencies": { + "ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "requires": { + "fast-deep-equal": "^3.1.3" + } + }, + "glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "requires": { + "is-glob": "^4.0.3" + } + }, + "globby": { + "version": "13.1.3", + "resolved": "https://registry.npmjs.org/globby/-/globby-13.1.3.tgz", + "integrity": "sha512-8krCNHXvlCgHDpegPzleMq07yMYTO2sXKASmZmquEYWEmCx6J5UTRbp5RwMJkTJGtcQ44YpiUYUiN0b9mzy8Bw==", + "requires": { + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.11", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^4.0.0" + } + }, + "ignore": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==" + }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + }, "schema-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", - "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", + "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", "requires": { - "@types/json-schema": "^7.0.6", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" + "@types/json-schema": "^7.0.9", + "ajv": "^8.8.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.0.0" } + }, + "slash": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", + "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==" } } }, "core-js": { - "version": "3.12.1", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.12.1.tgz", - "integrity": "sha512-Ne9DKPHTObRuB09Dru5AjwKjY4cJHVGu+y5f7coGn1E9Grkc3p2iBwE9AI/nJzsE29mQF7oq+mhYYRqOMFN1Bw==" + "version": "3.25.5", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.25.5.tgz", + "integrity": "sha512-nbm6eZSjm+ZuBQxCUPQKQCoUEfFOXjUZ8dTTyikyKaWrTYmAVbykQfwsKE5dBK88u3QCkCrzsx/PPlKfhsvgpw==" }, "core-js-compat": { - "version": "3.12.1", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.12.1.tgz", - "integrity": "sha512-i6h5qODpw6EsHAoIdQhKoZdWn+dGBF3dSS8m5tif36RlWvW3A6+yu2S16QHUo3CrkzrnEskMAt9f8FxmY9fhWQ==", + "version": "3.25.5", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.25.5.tgz", + "integrity": "sha512-ovcyhs2DEBUIE0MGEKHP4olCUW/XYte3Vroyxuh38rD1wAO4dHohsovUC4eAOuzFxE6b+RXvBU3UZ9o0YhUTkA==", "requires": { - "browserslist": "^4.16.6", - "semver": "7.0.0" - }, - "dependencies": { - "semver": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", - "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==" - } + "browserslist": "^4.21.4" } }, "core-js-pure": { - "version": "3.12.1", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.12.1.tgz", - "integrity": "sha512-1cch+qads4JnDSWsvc7d6nzlKAippwjUlf6vykkTLW53VSV+NkE6muGBToAjEA8pG90cSfcud3JgVmW2ds5TaQ==" + "version": "3.25.5", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.25.5.tgz", + "integrity": "sha512-oml3M22pHM+igfWHDfdLVq2ShWmjM2V4L+dQEBs0DWVIqEm9WHCwGAlZ6BmyBQGy5sFrJmcx+856D9lVKyGWYg==" }, "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" }, "cosmiconfig": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.0.tgz", - "integrity": "sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz", + "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==", "requires": { "@types/parse-json": "^4.0.0", "import-fresh": "^3.2.1", @@ -19361,116 +17427,102 @@ "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==" }, - "css-color-names": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-1.0.1.tgz", - "integrity": "sha512-/loXYOch1qU1biStIFsHH8SxTmOseh1IJqFvy8IujXOm1h+QjUdDhkzOrR5HG8K8mlxREj0yfi8ewCHx0eMxzA==" - }, "css-declaration-sorter": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.0.0.tgz", - "integrity": "sha512-S0TE4E0ha5+tBHdLWPc5n+S8E4dFBS5xScPvgHkLNZwWvX4ISoFGhGeerLC9uS1cKA/sC+K2wHq6qEbcagT/fg==", - "requires": { - "timsort": "^0.3.0" - } + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.3.1.tgz", + "integrity": "sha512-fBffmak0bPAnyqc/HO8C3n2sHrp9wcqQz6ES9koRF2/mLOVAx9zIQ3Y7R29sYCteTPqMCwns4WYQoCX91Xl3+w==", + "requires": {} }, "css-loader": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-5.2.4.tgz", - "integrity": "sha512-OFYGyINCKkdQsTrSYxzGSFnGS4gNjcXkKkQgWxK138jgnPt+lepxdjSZNc8sHAl5vP3DhsJUxufWIjOwI8PMMw==", + "version": "6.7.3", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.7.3.tgz", + "integrity": "sha512-qhOH1KlBMnZP8FzRO6YCH9UHXQhVMcEGLyNdb7Hv2cpcmJbW0YrddO+tG1ab5nT41KpHIYGsbeHqxB9xPu1pKQ==", "requires": { - "camelcase": "^6.2.0", "icss-utils": "^5.1.0", - "loader-utils": "^2.0.0", - "postcss": "^8.2.10", + "postcss": "^8.4.19", "postcss-modules-extract-imports": "^3.0.0", "postcss-modules-local-by-default": "^4.0.0", "postcss-modules-scope": "^3.0.0", "postcss-modules-values": "^4.0.0", - "postcss-value-parser": "^4.1.0", - "schema-utils": "^3.0.0", - "semver": "^7.3.5" - }, - "dependencies": { - "schema-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", - "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", - "requires": { - "@types/json-schema": "^7.0.6", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - } - } + "postcss-value-parser": "^4.2.0", + "semver": "^7.3.8" } }, "css-minimizer-webpack-plugin": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-2.0.0.tgz", - "integrity": "sha512-cG/uc94727tx5pBNtb1Sd7gvUPzwmcQi1lkpfqTpdkuNq75hJCw7bIVsCNijLm4dhDcr1atvuysl2rZqOG8Txw==", - "requires": { - "cssnano": "^5.0.0", - "jest-worker": "^26.3.0", - "p-limit": "^3.0.2", - "postcss": "^8.2.9", - "schema-utils": "^3.0.0", - "serialize-javascript": "^5.0.1", + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-4.2.2.tgz", + "integrity": "sha512-s3Of/4jKfw1Hj9CxEO1E5oXhQAxlayuHO2y/ML+C6I9sQ7FdzfEV6QgMLN3vI+qFsjJGIAFLKtQK7t8BOXAIyA==", + "requires": { + "cssnano": "^5.1.8", + "jest-worker": "^29.1.2", + "postcss": "^8.4.17", + "schema-utils": "^4.0.0", + "serialize-javascript": "^6.0.0", "source-map": "^0.6.1" }, "dependencies": { - "schema-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", - "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", "requires": { - "@types/json-schema": "^7.0.6", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" } }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + "ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "requires": { + "fast-deep-equal": "^3.1.3" + } + }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + }, + "schema-utils": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", + "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", + "requires": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.8.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.0.0" + } } } }, "css-select": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", - "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", + "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", "requires": { - "boolbase": "~1.0.0", - "css-what": "2.1", - "domutils": "1.5.1", - "nth-check": "~1.0.1" + "boolbase": "^1.0.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" } }, - "css-select-base-adapter": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz", - "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==" - }, "css-tree": { - "version": "1.0.0-alpha.37", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz", - "integrity": "sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", + "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", "requires": { - "mdn-data": "2.0.4", + "mdn-data": "2.0.14", "source-map": "^0.6.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - } } }, "css-what": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz", - "integrity": "sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==" + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==" }, "cssesc": { "version": "3.0.0", @@ -19478,68 +17530,68 @@ "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==" }, "cssnano": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.0.2.tgz", - "integrity": "sha512-8JK3EnPsjQsULme9/e5M2hF564f/480hwsdcHvQ7ZtAIMfQ1O3SCfs+b8Mjf5KJxhYApyRshR2QSovEJi2K72Q==", + "version": "5.1.13", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.1.13.tgz", + "integrity": "sha512-S2SL2ekdEz6w6a2epXn4CmMKU4K3KpcyXLKfAYc9UQQqJRkD/2eLUG0vJ3Db/9OvO5GuAdgXw3pFbR6abqghDQ==", "requires": { - "cosmiconfig": "^7.0.0", - "cssnano-preset-default": "^5.0.1", - "is-resolvable": "^1.1.0" + "cssnano-preset-default": "^5.2.12", + "lilconfig": "^2.0.3", + "yaml": "^1.10.2" } }, "cssnano-preset-advanced": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/cssnano-preset-advanced/-/cssnano-preset-advanced-5.0.1.tgz", - "integrity": "sha512-g+LB6GcihLXcBEdDh+mzk1qX9jgtBkVpzAg1OlgrH6C+qKIQYRHwAPyaoXy95Ci83sYYXlwJ0OrqLYTIUEBLZQ==", + "version": "5.3.9", + "resolved": "https://registry.npmjs.org/cssnano-preset-advanced/-/cssnano-preset-advanced-5.3.9.tgz", + "integrity": "sha512-njnh4pp1xCsibJcEHnWZb4EEzni0ePMqPuPNyuWT4Z+YeXmsgqNuTPIljXFEXhxGsWs9183JkXgHxc1TcsahIg==", "requires": { - "autoprefixer": "^10.0.2", - "cssnano-preset-default": "^5.0.1", - "postcss-discard-unused": "^5.0.0", - "postcss-merge-idents": "^5.0.0", - "postcss-reduce-idents": "^5.0.0", - "postcss-zindex": "^5.0.0" + "autoprefixer": "^10.4.12", + "cssnano-preset-default": "^5.2.13", + "postcss-discard-unused": "^5.1.0", + "postcss-merge-idents": "^5.1.1", + "postcss-reduce-idents": "^5.2.0", + "postcss-zindex": "^5.1.0" } }, "cssnano-preset-default": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.0.1.tgz", - "integrity": "sha512-cfmfThYODGqhpQKDq9H0MTAqkMvZ3dGbOUTBKw0xWZiIycMqHid22LsJXJl4r1qX4qzDeKxcSyQ/Xb5Mu3Z//Q==", - "requires": { - "css-declaration-sorter": "6.0.0", - "cssnano-utils": "^2.0.0", - "postcss-calc": "^8.0.0", - "postcss-colormin": "^5.0.0", - "postcss-convert-values": "^5.0.0", - "postcss-discard-comments": "^5.0.0", - "postcss-discard-duplicates": "^5.0.0", - "postcss-discard-empty": "^5.0.0", - "postcss-discard-overridden": "^5.0.0", - "postcss-merge-longhand": "^5.0.1", - "postcss-merge-rules": "^5.0.0", - "postcss-minify-font-values": "^5.0.0", - "postcss-minify-gradients": "^5.0.0", - "postcss-minify-params": "^5.0.0", - "postcss-minify-selectors": "^5.0.0", - "postcss-normalize-charset": "^5.0.0", - "postcss-normalize-display-values": "^5.0.0", - "postcss-normalize-positions": "^5.0.0", - "postcss-normalize-repeat-style": "^5.0.0", - "postcss-normalize-string": "^5.0.0", - "postcss-normalize-timing-functions": "^5.0.0", - "postcss-normalize-unicode": "^5.0.0", - "postcss-normalize-url": "^5.0.0", - "postcss-normalize-whitespace": "^5.0.0", - "postcss-ordered-values": "^5.0.0", - "postcss-reduce-initial": "^5.0.0", - "postcss-reduce-transforms": "^5.0.0", - "postcss-svgo": "^5.0.0", - "postcss-unique-selectors": "^5.0.0" + "version": "5.2.13", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.2.13.tgz", + "integrity": "sha512-PX7sQ4Pb+UtOWuz8A1d+Rbi+WimBIxJTRyBdgGp1J75VU0r/HFQeLnMYgHiCAp6AR4rqrc7Y4R+1Rjk3KJz6DQ==", + "requires": { + "css-declaration-sorter": "^6.3.1", + "cssnano-utils": "^3.1.0", + "postcss-calc": "^8.2.3", + "postcss-colormin": "^5.3.0", + "postcss-convert-values": "^5.1.3", + "postcss-discard-comments": "^5.1.2", + "postcss-discard-duplicates": "^5.1.0", + "postcss-discard-empty": "^5.1.1", + "postcss-discard-overridden": "^5.1.0", + "postcss-merge-longhand": "^5.1.7", + "postcss-merge-rules": "^5.1.3", + "postcss-minify-font-values": "^5.1.0", + "postcss-minify-gradients": "^5.1.1", + "postcss-minify-params": "^5.1.4", + "postcss-minify-selectors": "^5.2.1", + "postcss-normalize-charset": "^5.1.0", + "postcss-normalize-display-values": "^5.1.0", + "postcss-normalize-positions": "^5.1.1", + "postcss-normalize-repeat-style": "^5.1.1", + "postcss-normalize-string": "^5.1.0", + "postcss-normalize-timing-functions": "^5.1.0", + "postcss-normalize-unicode": "^5.1.1", + "postcss-normalize-url": "^5.1.0", + "postcss-normalize-whitespace": "^5.1.1", + "postcss-ordered-values": "^5.1.3", + "postcss-reduce-initial": "^5.1.1", + "postcss-reduce-transforms": "^5.1.0", + "postcss-svgo": "^5.1.0", + "postcss-unique-selectors": "^5.1.1" } }, "cssnano-utils": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-2.0.0.tgz", - "integrity": "sha512-xvxmTszdrvSyTACdPe8VU5J6p4sm3egpgw54dILvNqt5eBUv6TFjACLhSxtRuEsxYrgy8uDy269YjScO5aKbGA==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-3.1.0.tgz", + "integrity": "sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==", "requires": {} }, "csso": { @@ -19548,83 +17600,38 @@ "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", "requires": { "css-tree": "^1.1.2" - }, - "dependencies": { - "css-tree": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", - "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", - "requires": { - "mdn-data": "2.0.14", - "source-map": "^0.6.1" - } - }, - "mdn-data": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", - "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==" - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - } } }, "csstype": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.8.tgz", - "integrity": "sha512-jXKhWqXPmlUeoQnF/EhTtTl4C9SnrxSH/jZUih3jmO6lBKr99rP3/+FmrMj4EFpOXzMtXHAZkd3x0E6h6Fgflw==", - "peer": true + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz", + "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==" }, "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "requires": { "ms": "2.1.2" } }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" - }, - "decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=" - }, "decompress-response": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", - "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", + "integrity": "sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==", "requires": { "mimic-response": "^1.0.0" } }, - "deep-equal": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", - "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", - "requires": { - "is-arguments": "^1.0.4", - "is-date-object": "^1.0.1", - "is-regex": "^1.0.4", - "object-is": "^1.0.1", - "object-keys": "^1.1.1", - "regexp.prototype.flags": "^1.2.0" - } - }, "deep-extend": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" }, "deep-is": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=" + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" }, "deepmerge": { "version": "4.2.2", @@ -19632,92 +17639,11 @@ "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==" }, "default-gateway": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-4.2.0.tgz", - "integrity": "sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA==", + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", + "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", "requires": { - "execa": "^1.0.0", - "ip-regex": "^2.1.0" - }, - "dependencies": { - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "execa": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", - "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", - "requires": { - "cross-spawn": "^6.0.0", - "get-stream": "^4.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - } - }, - "get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "requires": { - "pump": "^3.0.0" - } - }, - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" - }, - "npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", - "requires": { - "path-key": "^2.0.0" - } - }, - "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=" - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - }, - "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", - "requires": { - "shebang-regex": "^1.0.0" - } - }, - "shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=" - }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "requires": { - "isexe": "^2.0.0" - } - } + "execa": "^5.0.0" } }, "defer-to-connect": { @@ -19725,27 +17651,24 @@ "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==" }, - "define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", - "requires": { - "object-keys": "^1.0.12" - } + "define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==" }, - "define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "define-properties": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", + "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", "requires": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" } }, "del": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/del/-/del-6.0.0.tgz", - "integrity": "sha512-1shh9DQ23L16oXSZKB2JxpL7iMy2E0S9d517ptA1P8iw0alkPtQcrKH7ru31rYtKwF499HkTu+DRzq3TCKDFRQ==", + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/del/-/del-6.1.1.tgz", + "integrity": "sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg==", "requires": { "globby": "^11.0.1", "graceful-fs": "^4.2.4", @@ -19757,21 +17680,15 @@ "slash": "^3.0.0" } }, - "delegate": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/delegate/-/delegate-3.2.0.tgz", - "integrity": "sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw==", - "optional": true - }, "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" }, "destroy": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==" }, "detab": { "version": "2.0.4", @@ -19782,32 +17699,17 @@ } }, "detect-node": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.0.5.tgz", - "integrity": "sha512-qi86tE6hRcFHy8jI1m2VG+LaPUR1LhqDa5G8tVjuUXmOrpuAgqsA1pN0+ldgr3aKUH+QLI9hCY/OcRYisERejw==" + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==" }, "detect-port": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/detect-port/-/detect-port-1.3.0.tgz", - "integrity": "sha512-E+B1gzkl2gqxt1IhUzwjrxBKRqx1UzC3WLONHinn8S3T6lwV/agVCyitiFOsGJ/eYuEUBvD71MZHy3Pv1G9doQ==", + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/detect-port/-/detect-port-1.5.1.tgz", + "integrity": "sha512-aBzdj76lueB6uUst5iAs7+0H/oOjqI5D16XUWxlWMIMROhcM0rfsNVk93zTngq1dDNpoXRr++Sus7ETAExppAQ==", "requires": { "address": "^1.0.1", - "debug": "^2.6.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - } + "debug": "4" } }, "detect-port-alt": { @@ -19830,7 +17732,7 @@ "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" } } }, @@ -19845,23 +17747,14 @@ "dns-equal": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", - "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=" + "integrity": "sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==" }, "dns-packet": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.4.tgz", - "integrity": "sha512-BQ6F4vycLXBvdrJZ6S3gZewt6rcrks9KBgM9vrhW+knGRqc8uEdT7fuCwloc7nny5xNoMJ17HGH0R/6fpo8ECA==", - "requires": { - "ip": "^1.1.0", - "safe-buffer": "^5.0.1" - } - }, - "dns-txt": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz", - "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=", + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.4.0.tgz", + "integrity": "sha512-EgqGeaBB8hLiHLZtp/IbaDQTL8pZ0+IvwzSHA6d7VyMDM+B9hgddEMa9xjK5oYnw0ci0JQ6g2XCD7/f6cafU6g==", "requires": { - "buffer-indexof": "^1.0.0" + "@leichtgewicht/ip-codec": "^2.0.1" } }, "doctrine": { @@ -19881,34 +17774,36 @@ } }, "dom-serializer": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.1.tgz", - "integrity": "sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", "requires": { - "domelementtype": "^1.3.0", - "entities": "^1.1.1" + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" } }, "domelementtype": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", - "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==" + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==" }, "domhandler": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", - "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", "requires": { - "domelementtype": "1" + "domelementtype": "^2.3.0" } }, "domutils": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", - "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.0.1.tgz", + "integrity": "sha512-z08c1l761iKhDFtfXO04C7kTdPBLi41zwOZl00WS8b5eiaebNpY00HKbztwBq+e3vyqWNwWF3mP9YLUeqIrF+Q==", "requires": { - "dom-serializer": "0", - "domelementtype": "1" + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.1" } }, "dot-case": { @@ -19941,24 +17836,29 @@ "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==" }, "duplexer3": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", - "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=" + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.5.tgz", + "integrity": "sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA==" + }, + "eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" }, "ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" }, "electron-to-chromium": { - "version": "1.3.727", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.727.tgz", - "integrity": "sha512-Mfz4FIB4FSvEwBpDfdipRIrwd6uo8gUDoRDF4QEYb4h4tSuI3ov594OrjU6on042UlFHouIJpClDODGkPcBSbg==" + "version": "1.4.284", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz", + "integrity": "sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==" }, "emoji-regex": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-6.1.1.tgz", - "integrity": "sha1-xs0OwbBkLio8Z6ETfvxeeW2k+I4=" + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, "emojis-list": { "version": "3.0.0", @@ -19973,7 +17873,7 @@ "encodeurl": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==" }, "end-of-stream": { "version": "1.4.4", @@ -19984,9 +17884,9 @@ } }, "enhanced-resolve": { - "version": "5.8.2", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.8.2.tgz", - "integrity": "sha512-F27oB3WuHDzvR2DOGNTaYy0D5o0cnrv8TeI482VM4kYgQd/FT9lUQwuNsJ0oOHtBUq7eiW5ytqzp7nBFknL+GA==", + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.10.0.tgz", + "integrity": "sha512-T0yTFjdpldGY8PmuXXR0PyQ1ufZpEGiHVrp7zHKB7jdR4qlmZHhONVM5AQOAWXuF/w3dnHbEQVrNptJgt7F+cQ==", "requires": { "graceful-fs": "^4.2.4", "tapable": "^2.2.0" @@ -20001,17 +17901,9 @@ } }, "entities": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", - "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==" - }, - "errno": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", - "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", - "requires": { - "prr": "~1.0.1" - } + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.4.0.tgz", + "integrity": "sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA==" }, "error-ex": { "version": "1.3.2", @@ -20022,32 +17914,48 @@ } }, "es-abstract": { - "version": "1.18.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0.tgz", - "integrity": "sha512-LJzK7MrQa8TS0ja2w3YNLzUgJCGPdPOV1yVvezjNnS89D+VR08+Szt2mz3YB2Dck/+w5tfIq/RoUAFqJJGM2yw==", + "version": "1.20.4", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.4.tgz", + "integrity": "sha512-0UtvRN79eMe2L+UNEF1BwRe364sj/DXhQ/k5FmivgoSdpM90b8Jc0mDzKMGo7QS0BVbOP/bTwBKNnDc9rNzaPA==", "requires": { "call-bind": "^1.0.2", "es-to-primitive": "^1.2.1", "function-bind": "^1.1.1", - "get-intrinsic": "^1.1.1", + "function.prototype.name": "^1.1.5", + "get-intrinsic": "^1.1.3", + "get-symbol-description": "^1.0.0", "has": "^1.0.3", - "has-symbols": "^1.0.2", - "is-callable": "^1.2.3", - "is-negative-zero": "^2.0.1", - "is-regex": "^1.1.2", - "is-string": "^1.0.5", - "object-inspect": "^1.9.0", + "has-property-descriptors": "^1.0.0", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.3", + "is-callable": "^1.2.7", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.2", "object-keys": "^1.1.1", - "object.assign": "^4.1.2", - "string.prototype.trimend": "^1.0.4", - "string.prototype.trimstart": "^1.0.4", - "unbox-primitive": "^1.0.0" + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.4.3", + "safe-regex-test": "^1.0.0", + "string.prototype.trimend": "^1.0.5", + "string.prototype.trimstart": "^1.0.5", + "unbox-primitive": "^1.0.2" } }, "es-module-lexer": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.4.1.tgz", - "integrity": "sha512-ooYciCUtfw6/d2w56UVeqHPcoCFAiJdz5XOkYpv/Txl1HMUozpXjz/2RIQgqwKdXNDPSF1W7mJCFse3G+HDyAA==" + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", + "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==" + }, + "es-shim-unscopables": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", + "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", + "requires": { + "has": "^1.0.3" + } }, "es-to-primitive": { "version": "1.2.1", @@ -20072,7 +17980,7 @@ "escape-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" }, "escape-string-regexp": { "version": "4.0.0", @@ -20080,27 +17988,30 @@ "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==" }, "eslint": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.26.0.tgz", - "integrity": "sha512-4R1ieRf52/izcZE7AlLy56uIHHDLT74Yzz2Iv2l6kDaYvEu9x+wMB5dZArVL8SYGXSYV2YAg70FcW5Y5nGGNIg==", + "version": "7.32.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz", + "integrity": "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==", "requires": { "@babel/code-frame": "7.12.11", - "@eslint/eslintrc": "^0.4.1", + "@eslint/eslintrc": "^0.4.3", + "@humanwhocodes/config-array": "^0.5.0", "ajv": "^6.10.0", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", "debug": "^4.0.1", "doctrine": "^3.0.0", "enquirer": "^2.3.5", + "escape-string-regexp": "^4.0.0", "eslint-scope": "^5.1.1", "eslint-utils": "^2.1.0", "eslint-visitor-keys": "^2.0.0", "espree": "^7.3.1", "esquery": "^1.4.0", "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", "file-entry-cache": "^6.0.1", "functional-red-black-tree": "^1.0.1", - "glob-parent": "^5.0.0", + "glob-parent": "^5.1.2", "globals": "^13.6.0", "ignore": "^4.0.6", "import-fresh": "^3.0.0", @@ -20109,7 +18020,7 @@ "js-yaml": "^3.13.1", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1", - "lodash": "^4.17.21", + "lodash.merge": "^4.6.2", "minimatch": "^3.0.4", "natural-compare": "^1.4.0", "optionator": "^0.9.1", @@ -20118,7 +18029,7 @@ "semver": "^7.2.1", "strip-ansi": "^6.0.0", "strip-json-comments": "^3.1.0", - "table": "^6.0.4", + "table": "^6.0.9", "text-table": "^0.2.0", "v8-compile-cache": "^2.0.3" }, @@ -20145,9 +18056,9 @@ "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==" }, "globals": { - "version": "13.8.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.8.0.tgz", - "integrity": "sha512-rHtdA6+PDBIjeEvA91rpqzEvk/k3/i7EeNQiryiWuJH0Hw9cpyJMAt2jtbAwUaRdhD+573X4vWw6IcjKPasi9Q==", + "version": "13.17.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz", + "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==", "requires": { "type-fest": "^0.20.2" } @@ -20164,22 +18075,24 @@ } }, "eslint-plugin-react": { - "version": "7.23.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.23.2.tgz", - "integrity": "sha512-AfjgFQB+nYszudkxRkTFu0UR1zEQig0ArVMPloKhxwlwkzaw/fBiH0QWcBBhZONlXqQC51+nfqFrkn4EzHcGBw==", + "version": "7.31.10", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.31.10.tgz", + "integrity": "sha512-e4N/nc6AAlg4UKW/mXeYWd3R++qUano5/o+t+wnWxIf+bLsOaH3a4q74kX3nDjYym3VBN4HyO9nEn1GcAqgQOA==", "requires": { - "array-includes": "^3.1.3", - "array.prototype.flatmap": "^1.2.4", + "array-includes": "^3.1.5", + "array.prototype.flatmap": "^1.3.0", "doctrine": "^2.1.0", - "has": "^1.0.3", + "estraverse": "^5.3.0", "jsx-ast-utils": "^2.4.1 || ^3.0.0", - "minimatch": "^3.0.4", - "object.entries": "^1.1.3", - "object.fromentries": "^2.0.4", - "object.values": "^1.1.3", - "prop-types": "^15.7.2", + "minimatch": "^3.1.2", + "object.entries": "^1.1.5", + "object.fromentries": "^2.0.5", + "object.hasown": "^1.1.1", + "object.values": "^1.1.5", + "prop-types": "^15.8.1", "resolve": "^2.0.0-next.3", - "string.prototype.matchall": "^4.0.4" + "semver": "^6.3.0", + "string.prototype.matchall": "^4.0.7" }, "dependencies": { "doctrine": { @@ -20191,13 +18104,19 @@ } }, "resolve": { - "version": "2.0.0-next.3", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.3.tgz", - "integrity": "sha512-W8LucSynKUIDu9ylraa7ueVZ7hc0uAgJBxVsQSKOXOyle8a93qXhcz+XAXZ8bIq2d6i4Ehddn6Evt+0/UwKk6Q==", + "version": "2.0.0-next.4", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.4.tgz", + "integrity": "sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==", "requires": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" } } }, @@ -20208,6 +18127,13 @@ "requires": { "esrecurse": "^4.3.0", "estraverse": "^4.1.1" + }, + "dependencies": { + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" + } } }, "eslint-utils": { @@ -20244,13 +18170,6 @@ "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", "requires": { "estraverse": "^5.1.0" - }, - "dependencies": { - "estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==" - } } }, "esrecurse": { @@ -20259,19 +18178,12 @@ "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "requires": { "estraverse": "^5.2.0" - }, - "dependencies": { - "estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==" - } } }, "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==" }, "esutils": { "version": "2.0.3", @@ -20279,20 +18191,21 @@ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" }, "eta": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/eta/-/eta-1.12.1.tgz", - "integrity": "sha512-H8npoci2J/7XiPnVcCVulBSPsTNGvGaINyMjQDU8AFqp9LGsEYS88g2CiU+d01Sg44WtX7o4nb8wUJ9vnI+tiA==" + "version": "1.12.3", + "resolved": "https://registry.npmjs.org/eta/-/eta-1.12.3.tgz", + "integrity": "sha512-qHixwbDLtekO/d51Yr4glcaUJCIjGVJyTzuqV4GPlgZo1YpgOKG+avQynErZIYrfM6JIJdtiG2Kox8tbb+DoGg==" }, "etag": { "version": "1.8.1", "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==" }, "eval": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/eval/-/eval-0.1.6.tgz", - "integrity": "sha512-o0XUw+5OGkXw4pJZzQoXUk+H87DHuC+7ZE//oSrRGtatTmr12oTnLfg6QOq9DyTt0c/p4TwzgmkKrBzWTSizyQ==", + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/eval/-/eval-0.1.8.tgz", + "integrity": "sha512-EzV94NYKoO09GLXGjXj9JIlXijVck4ONSr5wiCWDvhsvj5jxSrzTmRU/9C1DyB6uToszLs8aifA6NQ7lEQdvFw==", "requires": { + "@types/node": "*", "require-like": ">= 0.1.1" } }, @@ -20302,22 +18215,14 @@ "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" }, "events": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", - "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=" - }, - "eventsource": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-1.1.0.tgz", - "integrity": "sha512-VSJjT5oCNrFvCS6igjzPAt5hBzQ2qPBFIbJ03zLI9SE0mxwZpMw6BfJrbFHm1a141AavMEB8JHmBhWAd66PfCg==", - "requires": { - "original": "^1.0.0" - } + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==" }, "execa": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.0.0.tgz", - "integrity": "sha512-ov6w/2LCiuyO4RLYGdpFGjkcs0wMTgGE8PrkTHikeUy5iJekXyPIKUjifk5CsE0pt7sMCrMZ3YNqoCj6idQOnQ==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", "requires": { "cross-spawn": "^7.0.3", "get-stream": "^6.0.0", @@ -20330,136 +18235,49 @@ "strip-final-newline": "^2.0.0" } }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "requires": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - } - }, - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - } - } - }, "express": { - "version": "4.17.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", - "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", + "version": "4.18.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", + "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", "requires": { - "accepts": "~1.3.7", + "accepts": "~1.3.8", "array-flatten": "1.1.1", - "body-parser": "1.19.0", - "content-disposition": "0.5.3", + "body-parser": "1.20.1", + "content-disposition": "0.5.4", "content-type": "~1.0.4", - "cookie": "0.4.0", + "cookie": "0.5.0", "cookie-signature": "1.0.6", "debug": "2.6.9", - "depd": "~1.1.2", + "depd": "2.0.0", "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "etag": "~1.8.1", - "finalhandler": "~1.1.2", + "finalhandler": "1.2.0", "fresh": "0.5.2", + "http-errors": "2.0.0", "merge-descriptors": "1.0.1", "methods": "~1.1.2", - "on-finished": "~2.3.0", + "on-finished": "2.4.1", "parseurl": "~1.3.3", "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.5", - "qs": "6.7.0", + "proxy-addr": "~2.0.7", + "qs": "6.11.0", "range-parser": "~1.2.1", - "safe-buffer": "5.1.2", - "send": "0.17.1", - "serve-static": "1.14.1", - "setprototypeof": "1.1.1", - "statuses": "~1.5.0", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", "type-is": "~1.6.18", "utils-merge": "1.0.1", "vary": "~1.1.2" }, "dependencies": { + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" + }, "debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", @@ -20471,7 +18289,7 @@ "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" } } }, @@ -20483,52 +18301,26 @@ "extend-shallow": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", "requires": { "is-extendable": "^0.1.0" } }, - "extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "requires": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "requires": { - "is-descriptor": "^1.0.0" - } - } - } - }, "fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" }, "fast-glob": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.5.tgz", - "integrity": "sha512-2DtFcgT68wiTTiwZ2hNdJfcHNke9XOfnwmBRWXhmeKM8rF0TGwmC/Qto3S7RoZKp5cilZbxzO5iTNTQsJ+EeDg==", + "version": "3.2.12", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", + "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", "requires": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.0", + "glob-parent": "^5.1.2", "merge2": "^1.3.0", - "micromatch": "^4.0.2", - "picomatch": "^2.2.1" + "micromatch": "^4.0.4" } }, "fast-json-stable-stringify": { @@ -20539,28 +18331,28 @@ "fast-levenshtein": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==" }, "fast-url-parser": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/fast-url-parser/-/fast-url-parser-1.1.3.tgz", - "integrity": "sha1-9K8+qfNNiicc9YrSs3WfQx8LMY0=", + "integrity": "sha512-5jOCVXADYNuRkKFzNJ0dCCewsZiYo0dz8QNYljkOpFC6r2U4OBmKtvm/Tsuh4w1YYdDqDb31a8TVhBJ2OJKdqQ==", "requires": { "punycode": "^1.3.2" } }, "fastq": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.11.0.tgz", - "integrity": "sha512-7Eczs8gIPDrVzT+EksYBcupqMyxSHXXrHOLRRxU2/DicV8789MRBRR8+Hc2uWzUupOs4YS4JzBmBxjjCVBxD/g==", + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", + "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", "requires": { "reusify": "^1.0.4" } }, "faye-websocket": { - "version": "0.11.3", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.3.tgz", - "integrity": "sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA==", + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", + "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", "requires": { "websocket-driver": ">=0.5.1" } @@ -20574,17 +18366,17 @@ } }, "fbjs": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-3.0.0.tgz", - "integrity": "sha512-dJd4PiDOFuhe7vk4F80Mba83Vr2QuK86FoxtgPmzBqEJahncp+13YCmfoa53KHCo6OnlXLG7eeMWPfB5CrpVKg==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-3.0.4.tgz", + "integrity": "sha512-ucV0tDODnGV3JCnnkmoszb5lf4bNpzjv80K41wd4k798Etq+UYD0y0TIfalLjZoKgjive6/adkRnszwapiDgBQ==", "requires": { - "cross-fetch": "^3.0.4", + "cross-fetch": "^3.1.5", "fbjs-css-vars": "^1.0.0", "loose-envify": "^1.0.0", "object-assign": "^4.1.0", "promise": "^7.1.1", "setimmediate": "^1.0.5", - "ua-parser-js": "^0.7.18" + "ua-parser-js": "^0.7.30" } }, "fbjs-css-vars": { @@ -20592,6 +18384,14 @@ "resolved": "https://registry.npmjs.org/fbjs-css-vars/-/fbjs-css-vars-1.0.2.tgz", "integrity": "sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ==" }, + "fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", + "requires": { + "pend": "~1.2.0" + } + }, "feed": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/feed/-/feed-4.2.2.tgz", @@ -20600,21 +18400,6 @@ "xml-js": "^1.6.11" } }, - "figures": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", - "requires": { - "escape-string-regexp": "^1.0.5" - }, - "dependencies": { - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" - } - } - }, "file-entry-cache": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", @@ -20633,27 +18418,21 @@ }, "dependencies": { "schema-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", - "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", "requires": { - "@types/json-schema": "^7.0.6", + "@types/json-schema": "^7.0.8", "ajv": "^6.12.5", "ajv-keywords": "^3.5.2" } } } }, - "file-uri-to-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", - "optional": true - }, "filesize": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/filesize/-/filesize-6.1.0.tgz", - "integrity": "sha512-LpCHtPQ3sFx67z+uh2HnSyWSLLu5Jxo21795uRDuar/EOuYWXib5EmPaGIBuSnRqH2IODiKA2k5re/K9OnN/Yg==" + "version": "8.0.7", + "resolved": "https://registry.npmjs.org/filesize/-/filesize-8.0.7.tgz", + "integrity": "sha512-pjmC+bkIF8XI7fWaH8KxHcZL3DPybs1roSKP4rKDvy20tAWwIObE4+JIseG2byfGKhud5ZnM4YSGKBz7Sh0ndQ==" }, "fill-range": { "version": "7.0.1", @@ -20664,16 +18443,16 @@ } }, "finalhandler": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", - "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", "requires": { "debug": "2.6.9", "encodeurl": "~1.0.2", "escape-html": "~1.0.3", - "on-finished": "~2.3.0", + "on-finished": "2.4.1", "parseurl": "~1.3.3", - "statuses": "~1.5.0", + "statuses": "2.0.1", "unpipe": "~1.0.0" }, "dependencies": { @@ -20688,14 +18467,14 @@ "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" } } }, "find-cache-dir": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz", - "integrity": "sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==", + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", "requires": { "commondir": "^1.0.1", "make-dir": "^3.0.2", @@ -20716,246 +18495,131 @@ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", "requires": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" - } - }, - "flatted": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.1.1.tgz", - "integrity": "sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA==" - }, - "flux": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/flux/-/flux-4.0.1.tgz", - "integrity": "sha512-emk4RCvJ8RzNP2lNpphKnG7r18q8elDYNAPx7xn+bDeOIo9FFfxEfIQ2y6YbQNmnsGD3nH1noxtLE64Puz1bRQ==", - "requires": { - "fbemitter": "^3.0.0", - "fbjs": "^3.0.0" - } - }, - "follow-redirects": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.1.tgz", - "integrity": "sha512-HWqDgT7ZEkqRzBvc2s64vSZ/hfOceEol3ac/7tKwzuvEyWx3/4UegXh5oBOIotkGsObyk3xznnSRVADBgWSQVg==" - }, - "for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=" - }, - "fork-ts-checker-webpack-plugin": { - "version": "4.1.6", - "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-4.1.6.tgz", - "integrity": "sha512-DUxuQaKoqfNne8iikd14SAkh5uw4+8vNifp6gmA73yYNS6ywLIWSLD/n/mBzHQRpW3J7rbATEakmiA8JvkTyZw==", - "requires": { - "@babel/code-frame": "^7.5.5", - "chalk": "^2.4.1", - "micromatch": "^3.1.10", - "minimatch": "^3.0.4", - "semver": "^5.6.0", - "tapable": "^1.0.0", - "worker-rpc": "^0.1.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" - }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" - }, - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "requires": { - "is-plain-object": "^2.0.4" - } - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + } + }, + "flatted": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", + "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==" + }, + "flux": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/flux/-/flux-4.0.3.tgz", + "integrity": "sha512-yKAbrp7JhZhj6uiT1FTuVMlIAT1J4jqEyBpFApi1kxpGZCvacMVc/t1pMQyotqHhAgvoE3bNvAykhCo2CLjnYw==", + "requires": { + "fbemitter": "^3.0.0", + "fbjs": "^3.0.1" + } + }, + "follow-redirects": { + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", + "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==" + }, + "fork-ts-checker-webpack-plugin": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.2.tgz", + "integrity": "sha512-m5cUmF30xkZ7h4tWUgTAcEaKmUW7tfyUyTqNNOz7OxWJ0v1VWKTcOvH8FWHUwSjlW/356Ijc9vi3XfcPstpQKA==", + "requires": { + "@babel/code-frame": "^7.8.3", + "@types/json-schema": "^7.0.5", + "chalk": "^4.1.0", + "chokidar": "^3.4.2", + "cosmiconfig": "^6.0.0", + "deepmerge": "^4.2.2", + "fs-extra": "^9.0.0", + "glob": "^7.1.6", + "memfs": "^3.1.2", + "minimatch": "^3.0.4", + "schema-utils": "2.7.0", + "semver": "^7.3.2", + "tapable": "^1.0.0" + }, + "dependencies": { + "cosmiconfig": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", + "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==", "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.1.0", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.7.2" } }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - }, - "dependencies": { - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - } - } + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" } }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "schema-utils": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz", + "integrity": "sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==", "requires": { - "has-flag": "^3.0.0" + "@types/json-schema": "^7.0.4", + "ajv": "^6.12.2", + "ajv-keywords": "^3.4.1" } }, "tapable": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==" - }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - } } } }, "forwarded": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", - "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==" }, "fraction.js": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.1.0.tgz", - "integrity": "sha512-o9lSKpK0TDqDwTL24Hxqi6I99s942l6TYkfl6WvGWgLOIFz/YonSGKfiSeMadoiNvTfqnfOa9mjb5SGVbBK9/w==" - }, - "fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", - "requires": { - "map-cache": "^0.2.2" - } + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz", + "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==" }, "fresh": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==" }, "fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", "requires": { - "at-least-node": "^1.0.0", "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^2.0.0" } }, + "fs-minipass": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz", + "integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==", + "requires": { + "minipass": "^2.6.0" + } + }, + "fs-monkey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.3.tgz", + "integrity": "sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q==" + }, "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" }, "fsevents": { "version": "2.3.2", @@ -20968,29 +18632,40 @@ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" }, + "function.prototype.name": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", + "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.0", + "functions-have-names": "^1.2.2" + } + }, "functional-red-black-tree": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=" + "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==" + }, + "functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==" }, "gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==" }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" - }, "get-intrinsic": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", - "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz", + "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==", "requires": { "function-bind": "^1.1.1", "has": "^1.0.3", - "has-symbols": "^1.0.1" + "has-symbols": "^1.0.3" } }, "get-own-enumerable-property-symbols": { @@ -21003,28 +18678,29 @@ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==" }, - "get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=" - }, - "github-slugger": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-1.3.0.tgz", - "integrity": "sha512-gwJScWVNhFYSRDvURk/8yhcFBee6aFjye2a7Lhb2bUyRulpIoek9p0I9Kt7PT67d/nUlZbFu8L9RLiA0woQN8Q==", + "get-symbol-description": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", "requires": { - "emoji-regex": ">=6.0.0 <=6.1.1" + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" } }, + "github-slugger": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-1.4.0.tgz", + "integrity": "sha512-w0dzqw/nt51xMVmlaV1+JRzN+oCa1KfcgGEWhxUG16wbdA+Xnt/yoFO8Z8x/V82ZcZ0wy6ln9QDup5avbhiDhQ==" + }, "glob": { - "version": "7.1.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", - "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", - "minimatch": "^3.0.4", + "minimatch": "^3.1.1", "once": "^1.3.0", "path-is-absolute": "^1.0.0" } @@ -21091,34 +18767,25 @@ "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==" }, "globby": { - "version": "11.0.3", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.3.tgz", - "integrity": "sha512-ffdmosjA807y7+lA1NM0jELARVmYul/715xiILEjo3hBLPTcirgQNnXECn5g3mtR8TOLCVbkfua1Hpen25/Xcg==", + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", "requires": { "array-union": "^2.1.0", "dir-glob": "^3.0.1", - "fast-glob": "^3.1.1", - "ignore": "^5.1.4", - "merge2": "^1.3.0", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", "slash": "^3.0.0" }, "dependencies": { "ignore": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", - "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==" + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==" } } }, - "good-listener": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/good-listener/-/good-listener-1.2.2.tgz", - "integrity": "sha1-1TswzfkxPf+33JoNR3CWqm0UXFA=", - "optional": true, - "requires": { - "delegate": "^3.1.2" - } - }, "got": { "version": "9.6.0", "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", @@ -21148,9 +18815,9 @@ } }, "graceful-fs": { - "version": "4.2.6", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", - "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==" + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" }, "gray-matter": { "version": "4.0.3", @@ -21183,12 +18850,11 @@ } }, "gzip-size": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-5.1.1.tgz", - "integrity": "sha512-FNHi6mmoHvs1mxZAds4PpdCS6QG8B4C1krxJsMutgxl5t3+GlRTzzI3NEkifXx2pVsOvJdOGSmIgDhQ55FwdPA==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz", + "integrity": "sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==", "requires": { - "duplexer": "^0.1.1", - "pify": "^4.0.1" + "duplexer": "^0.1.2" } }, "handle-thing": { @@ -21205,70 +18871,34 @@ } }, "has-bigints": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", - "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==" + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==" }, "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" }, - "has-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", - "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==" - }, - "has-value": { + "has-property-descriptors": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", + "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", "requires": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" + "get-intrinsic": "^1.1.1" } }, - "has-values": { + "has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" + }, + "has-tostringtag": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", "requires": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "dependencies": { - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "requires": { - "is-buffer": "^1.1.5" - } - } + "has-symbols": "^1.0.2" } }, "has-yarn": { @@ -21369,11 +18999,6 @@ "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==" }, - "hex-color-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/hex-color-regex/-/hex-color-regex-1.1.0.tgz", - "integrity": "sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==" - }, "history": { "version": "4.10.1", "resolved": "https://registry.npmjs.org/history/-/history-4.10.1.tgz", @@ -21398,7 +19023,7 @@ "hpack.js": { "version": "2.1.6", "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", - "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=", + "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", "requires": { "inherits": "^2.0.1", "obuf": "^1.0.0", @@ -21420,6 +19045,11 @@ "util-deprecate": "~1.0.1" } }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, "string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", @@ -21430,59 +19060,36 @@ } } }, - "hsl-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/hsl-regex/-/hsl-regex-1.0.0.tgz", - "integrity": "sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4=" - }, - "hsla-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/hsla-regex/-/hsla-regex-1.0.0.tgz", - "integrity": "sha1-wc56MWjIxmFAM6S194d/OyJfnDg=" - }, "html-entities": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.4.0.tgz", - "integrity": "sha512-8nxjcBcd8wovbeKx7h3wTji4e6+rhaVuPNpMqwWgnHh+N9ToqsCs6XztWRBPQ+UtzsoMAdKZtUENoVzU/EMtZA==" + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.3.tgz", + "integrity": "sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA==" }, "html-minifier-terser": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz", - "integrity": "sha512-ZPr5MNObqnV/T9akshPKbVgyOqLmy+Bxo7juKCfTfnjNniTAMdy4hz21YQqoofMBJD2kdREaqPPdThoR78Tgxg==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", + "integrity": "sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==", "requires": { - "camel-case": "^4.1.1", - "clean-css": "^4.2.3", - "commander": "^4.1.1", + "camel-case": "^4.1.2", + "clean-css": "^5.2.2", + "commander": "^8.3.0", "he": "^1.2.0", - "param-case": "^3.0.3", + "param-case": "^3.0.4", "relateurl": "^0.2.7", - "terser": "^4.6.3" + "terser": "^5.10.0" }, "dependencies": { - "clean-css": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.3.tgz", - "integrity": "sha512-VcMWDN54ZN/DS+g58HYL5/n4Zrqe8vHJpGA8KdgUXFU4fuP/aHNw8eld9SyEIyabIMJX/0RaY/fplOo5hYLSFA==", - "requires": { - "source-map": "~0.6.0" - } - }, "commander": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", - "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==" - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==" } } }, "html-tags": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.1.0.tgz", - "integrity": "sha512-1qYz89hW3lFDEazhjW0yVAV87lw8lVkrJocr72XmBkMKsoSVJCQx3W8BXsC7hO2qAt8BoVjYjtAcZ9perqGnNg==" + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.2.0.tgz", + "integrity": "sha512-vy7ClnArOZwCnqZgvv+ddgHgJiAFXe3Ge9ML5/mBctVJoUoYPCdxVucOywjDARn6CVoh3dRSFdPHy2sX80L0Wg==" }, "html-void-elements": { "version": "1.0.5", @@ -21490,28 +19097,26 @@ "integrity": "sha512-uE/TxKuyNIcx44cIWnjr/rfIATDH7ZaOMmstu0CwhFG1Dunhlp4OC6/NMbhiwoq5BpW0ubi303qnEk/PZj614w==" }, "html-webpack-plugin": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.3.1.tgz", - "integrity": "sha512-rZsVvPXUYFyME0cuGkyOHfx9hmkFa4pWfxY/mdY38PsBEaVNsRoA+Id+8z6DBDgyv3zaw6XQszdF8HLwfQvcdQ==", + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.5.0.tgz", + "integrity": "sha512-sy88PC2cRTVxvETRgUHFrL4No3UxvcH8G1NepGhqaTT+GXN2kTamqasot0inS5hXeg1cMbFDt27zzo9p35lZVw==", "requires": { - "@types/html-minifier-terser": "^5.0.0", - "html-minifier-terser": "^5.0.1", - "lodash": "^4.17.20", - "pretty-error": "^2.1.1", + "@types/html-minifier-terser": "^6.0.0", + "html-minifier-terser": "^6.0.2", + "lodash": "^4.17.21", + "pretty-error": "^4.0.0", "tapable": "^2.0.0" } }, "htmlparser2": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", - "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", - "requires": { - "domelementtype": "^1.3.1", - "domhandler": "^2.3.0", - "domutils": "^1.5.1", - "entities": "^1.1.1", - "inherits": "^2.0.1", - "readable-stream": "^3.1.1" + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.1.tgz", + "integrity": "sha512-4lVbmc1diZC7GUJQtRQ5yBAeUCL1exyMwmForWkRLnwyzWBFxN633SALPMGYaWZvKe9j1pRZJpauvmxENSp/EA==", + "requires": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "entities": "^4.3.0" } }, "http-cache-semantics": { @@ -21522,31 +19127,24 @@ "http-deceiver": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", - "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=" + "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==" }, "http-errors": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", - "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", "requires": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.1", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.0" - }, - "dependencies": { - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" - } + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" } }, "http-parser-js": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.3.tgz", - "integrity": "sha512-t7hjvef/5HEK7RWTdUzVUhl8zkEu+LlaE0IYzdMuvbSDipxBRpOn4Uhw8ZyECEa808iVT8XCjzo6xmYt4CiLZg==" + "version": "0.5.8", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", + "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==" }, "http-proxy": { "version": "1.18.1", @@ -21559,114 +19157,21 @@ } }, "http-proxy-middleware": { - "version": "0.19.1", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz", - "integrity": "sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz", + "integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==", "requires": { - "http-proxy": "^1.17.0", - "is-glob": "^4.0.0", - "lodash": "^4.17.11", - "micromatch": "^3.1.10" + "@types/http-proxy": "^1.17.8", + "http-proxy": "^1.18.1", + "is-glob": "^4.0.1", + "is-plain-obj": "^3.0.0", + "micromatch": "^4.0.2" }, "dependencies": { - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - } - }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" - }, - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "requires": { - "is-plain-object": "^2.0.4" - } - }, - "is-number": { + "is-plain-obj": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - }, - "dependencies": { - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - } - } - } - }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - } + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", + "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==" } } }, @@ -21683,117 +19188,63 @@ "safer-buffer": ">= 2.1.2 < 3" } }, - "icss-utils": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", - "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", - "requires": {} - }, - "ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==" - }, - "immer": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/immer/-/immer-8.0.1.tgz", - "integrity": "sha512-aqXhGP7//Gui2+UrEtvxZxSquQVXTpZ7KDxfCcKAF3Vysvw0CViVaW9RZ1j1xlIYqaaaipBoqdqeibkc18PNvA==" - }, - "import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - } - }, - "import-lazy": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", - "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=" - }, - "import-local": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz", - "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==", - "requires": { - "pkg-dir": "^3.0.0", - "resolve-cwd": "^2.0.0" - }, - "dependencies": { - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "requires": { - "locate-path": "^3.0.0" - } - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "requires": { - "p-limit": "^2.0.0" - } - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" - }, - "pkg-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", - "requires": { - "find-up": "^3.0.0" - } - } + "icss-utils": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", + "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", + "requires": {} + }, + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==" + }, + "image-size": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-1.0.2.tgz", + "integrity": "sha512-xfOoWjceHntRb3qFCrh5ZFORYH8XCdYpASltMhZ/Q0KZiOwjdE/Yl2QCiWdwD+lygV5bMCvauzgu5PxBX/Yerg==", + "requires": { + "queue": "6.0.2" + } + }, + "immer": { + "version": "9.0.17", + "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.17.tgz", + "integrity": "sha512-+hBruaLSQvkPfxRiTLK/mi4vLH+/VQS6z2KJahdoxlleFOI8ARqzOF17uy12eFDlqWmPoygwc5evgwcp+dlHhg==" + }, + "import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" } }, + "import-lazy": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", + "integrity": "sha512-m7ZEHgtw69qOGw+jwxXkHlrlIPdTGkyh66zXZ1ajZbxkDBNjSY/LGbmjc7h0s2ELsUDTAhFr55TrPSSqJGPG0A==" + }, "imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=" + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==" }, "indent-string": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==" }, - "indexes-of": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", - "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=" - }, "infima": { - "version": "0.2.0-alpha.23", - "resolved": "https://registry.npmjs.org/infima/-/infima-0.2.0-alpha.23.tgz", - "integrity": "sha512-V0RTjB1otjpH3E2asbydx3gz7ovdSJsuV7r9JTdBggqRilnelTJUcXxLawBQQKsjQi5qPcRTjxnlaV8xyyKhhw==" + "version": "0.2.0-alpha.42", + "resolved": "https://registry.npmjs.org/infima/-/infima-0.2.0-alpha.42.tgz", + "integrity": "sha512-ift8OXNbQQwtbIt6z16KnSWP7uJ/SysSMFI4F87MNRTicypfl4Pv3E2OGVv6N3nSZFJvA8imYulCBS64iyHYww==" }, "inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", "requires": { "once": "^1.3.0", "wrappy": "1" @@ -21814,15 +19265,6 @@ "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.1.1.tgz", "integrity": "sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==" }, - "internal-ip": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-4.3.0.tgz", - "integrity": "sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg==", - "requires": { - "default-gateway": "^4.2.0", - "ipaddr.js": "^1.9.0" - } - }, "internal-slot": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", @@ -21838,34 +19280,19 @@ "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==" }, - "ip": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", - "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=" - }, - "ip-regex": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz", - "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=" - }, - "ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" - }, - "is-absolute-url": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.3.tgz", - "integrity": "sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==" - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", "requires": { - "kind-of": "^6.0.0" + "loose-envify": "^1.0.0" } }, + "ipaddr.js": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.0.1.tgz", + "integrity": "sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng==" + }, "is-alphabetical": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz", @@ -21880,23 +19307,18 @@ "is-decimal": "^1.0.0" } }, - "is-arguments": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.0.tgz", - "integrity": "sha512-1Ij4lOMPl/xB5kBDn7I+b2ttPMKa8szhEIrXDuXQD/oe3HJLTLhqhgGspwgyGd6MOywBUqVvYicF72lkgDnIHg==", - "requires": { - "call-bind": "^1.0.0" - } - }, "is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" }, "is-bigint": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.2.tgz", - "integrity": "sha512-0JV5+SOCQkIdzjBK9buARcV804Ddu7A0Qet6sHi3FimE9ne6m4BGQZfRn+NZiXbBk4F4XmHfDZIipLj9pX8dSA==" + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "requires": { + "has-bigints": "^1.0.1" + } }, "is-binary-path": { "version": "2.1.0", @@ -21907,11 +19329,12 @@ } }, "is-boolean-object": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.1.tgz", - "integrity": "sha512-bXdQWkECBUIAcCkeH1unwJLIpZYaa5VvuygSyS/c2lf719mTKZDU5UdDRlpd01UjADgmW8RfqaP+mRaVPdr/Ng==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", "requires": { - "call-bind": "^1.0.2" + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" } }, "is-buffer": { @@ -21920,9 +19343,9 @@ "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==" }, "is-callable": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz", - "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==" + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==" }, "is-ci": { "version": "2.0.0", @@ -21939,62 +19362,27 @@ } } }, - "is-color-stop": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-color-stop/-/is-color-stop-1.1.0.tgz", - "integrity": "sha1-z/9HGu5N1cnhWFmPvhKWe1za00U=", - "requires": { - "css-color-names": "^0.0.4", - "hex-color-regex": "^1.1.0", - "hsl-regex": "^1.0.0", - "hsla-regex": "^1.0.0", - "rgb-regex": "^1.0.1", - "rgba-regex": "^1.0.0" - }, - "dependencies": { - "css-color-names": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz", - "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=" - } - } - }, "is-core-module": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.4.0.tgz", - "integrity": "sha512-6A2fkfq1rfeQZjxrZJGerpLCTHRNEBiSgnu0+obeJpEPZRUooHgsizvzv0ZjJwOz3iWIHdJtVWJ/tmPr3D21/A==", + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", + "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", "requires": { "has": "^1.0.3" } }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", "requires": { - "kind-of": "^6.0.0" + "has-tostringtag": "^1.0.0" } }, - "is-date-object": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.4.tgz", - "integrity": "sha512-/b4ZVsG7Z5XVtIxs/h9W8nvfLgSAyKYdtGWQLbqy6jA1icmgjf8WCoTKgeS4wy5tYaPePouzFMANbnj94c2Z+A==" - }, "is-decimal": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz", "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==" }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, "is-docker": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", @@ -22003,12 +19391,12 @@ "is-extendable": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==" }, "is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==" }, "is-fullwidth-code-point": { "version": "3.0.0", @@ -22016,9 +19404,9 @@ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" }, "is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "requires": { "is-extglob": "^2.1.1" } @@ -22038,9 +19426,9 @@ } }, "is-negative-zero": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", - "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==" + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==" }, "is-npm": { "version": "5.0.0", @@ -22053,38 +19441,23 @@ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" }, "is-number-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.5.tgz", - "integrity": "sha512-RU0lI/n95pMoUKu9v1BZP5MBcZuNSVJkMkAG2dJqC4z2GlkGUNeH68SuHuBKBD/XFe+LHZ+f9BKkLET60Niedw==" + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "requires": { + "has-tostringtag": "^1.0.0" + } }, "is-obj": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", - "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=" + "integrity": "sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==" }, "is-path-cwd": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==" }, - "is-path-in-cwd": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz", - "integrity": "sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ==", - "requires": { - "is-path-inside": "^2.1.0" - }, - "dependencies": { - "is-path-inside": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-2.1.0.tgz", - "integrity": "sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==", - "requires": { - "path-is-inside": "^1.0.2" - } - } - } - }, "is-path-inside": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", @@ -22104,38 +19477,44 @@ } }, "is-regex": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.3.tgz", - "integrity": "sha512-qSVXFz28HM7y+IWX6vLCsexdlvzT1PJNFSBuaQLQ5o0IEw8UDYW6/2+eCMVyIsbM8CNLX2a/QWmSpyxYEHY7CQ==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", "requires": { "call-bind": "^1.0.2", - "has-symbols": "^1.0.2" + "has-tostringtag": "^1.0.0" } }, "is-regexp": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", - "integrity": "sha1-/S2INUXEa6xaYz57mgnof6LLUGk=" - }, - "is-resolvable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", - "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==" + "integrity": "sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==" }, "is-root": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-root/-/is-root-2.1.0.tgz", "integrity": "sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg==" }, + "is-shared-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", + "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "requires": { + "call-bind": "^1.0.2" + } + }, "is-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", - "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==" + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==" }, "is-string": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.6.tgz", - "integrity": "sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w==" + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "requires": { + "has-tostringtag": "^1.0.0" + } }, "is-symbol": { "version": "1.0.4", @@ -22148,18 +19527,21 @@ "is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" + }, + "is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "requires": { + "call-bind": "^1.0.2" + } }, "is-whitespace-character": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-whitespace-character/-/is-whitespace-character-1.0.4.tgz", "integrity": "sha512-SDweEzfIZM0SJV0EUga669UTKlmL0Pq8Lno0QDQsPnvECB3IM2aP0gdx5TrU0A01MAPfViaZiI2V1QMZLaKK5w==" }, - "is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==" - }, "is-word-character": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-word-character/-/is-word-character-1.0.4.tgz", @@ -22181,36 +19563,60 @@ "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" }, "isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" }, "isobject": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==" + }, + "jest-util": { + "version": "29.3.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.3.1.tgz", + "integrity": "sha512-7YOVZaiX7RJLv76ZfHt4nbNEzzTRiMW/IiOG7ZOKmTXmoGBxUDefgMAxQubu6WPVqP5zSzAdZG0FfLcC7HOIFQ==", + "requires": { + "@jest/types": "^29.3.1", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + } }, "jest-worker": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", - "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", + "version": "29.3.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.3.1.tgz", + "integrity": "sha512-lY4AnnmsEWeiXirAIA0c9SDPbuCBq8IYuDVL8PMm0MZ2PEs2yPvRA/J64QBXuZp7CYKrDM/rmNrc9/i3KJQncw==", "requires": { "@types/node": "*", + "jest-util": "^29.3.1", "merge-stream": "^2.0.0", - "supports-color": "^7.0.0" + "supports-color": "^8.0.0" + }, + "dependencies": { + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "requires": { + "has-flag": "^4.0.0" + } + } } }, "joi": { - "version": "17.4.0", - "resolved": "https://registry.npmjs.org/joi/-/joi-17.4.0.tgz", - "integrity": "sha512-F4WiW2xaV6wc1jxete70Rw4V/VuMd6IN+a5ilZsxG4uYtUXWu2kq9W5P2dz30e7Gmw8RCbY/u/uk+dMPma9tAg==", + "version": "17.6.3", + "resolved": "https://registry.npmjs.org/joi/-/joi-17.6.3.tgz", + "integrity": "sha512-YlQsIaS9MHYekzf1Qe11LjTkNzx9qhYluK3172z38RxYoAUf82XMX1p1DG1H4Wtk2ED/vPdSn9OggqtDu+aTow==", "requires": { "@hapi/hoek": "^9.0.0", "@hapi/topo": "^5.0.0", - "@sideway/address": "^4.1.0", + "@sideway/address": "^4.1.3", "@sideway/formula": "^3.0.0", "@sideway/pinpoint": "^2.0.0" } @@ -22236,12 +19642,7 @@ "json-buffer": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", - "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=" - }, - "json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==" + "integrity": "sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ==" }, "json-parse-even-better-errors": { "version": "2.3.1", @@ -22256,20 +19657,12 @@ "json-stable-stringify-without-jsonify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=" - }, - "json3": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.3.tgz", - "integrity": "sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA==" + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==" }, "json5": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", - "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", - "requires": { - "minimist": "^1.2.5" - } + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", + "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==" }, "jsonfile": { "version": "6.1.0", @@ -22281,12 +19674,12 @@ } }, "jsx-ast-utils": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.2.0.tgz", - "integrity": "sha512-EIsmt3O3ljsU6sot/J4E1zDRxfBNrhjyf/OKjlydwgEimQuznlM4Wv7U+ueONJMyEn1WRE0K8dhi3dVAXYT24Q==", + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.3.tgz", + "integrity": "sha512-fYQHZTZ8jSfmWZ0iyzfwiU4WDX4HpHbMCZ3gPlWYiCl3BoeOTsqKBqnTVfH2rYT7eP5c3sVbeSPHnnJOaTrWiw==", "requires": { - "array-includes": "^3.1.2", - "object.assign": "^4.1.2" + "array-includes": "^3.1.5", + "object.assign": "^4.1.3" } }, "katex": { @@ -22312,11 +19705,6 @@ "json-buffer": "3.0.0" } }, - "killable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/killable/-/killable-1.0.1.tgz", - "integrity": "sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg==" - }, "kind-of": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", @@ -22328,9 +19716,9 @@ "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==" }, "klona": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.4.tgz", - "integrity": "sha512-ZRbnvdg/NxqzC7L9Uyqzf4psi1OM4Cuc+sJAkQPjO6XkQIJTNbfK2Rsmbw8fx1p2mkZdp2FZYo2+LwXYY/uwIA==" + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.5.tgz", + "integrity": "sha512-pJiBpiXMbt7dkzXe8Ghj/u4FfXOOa98fPW+bihOJ4SjnoijweJrNThJfd3ifXpXhREjpoF2mZVH1GfS9LV3kHQ==" }, "latest-version": { "version": "5.1.0", @@ -22354,20 +19742,25 @@ "type-check": "~0.4.0" } }, + "lilconfig": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.6.tgz", + "integrity": "sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg==" + }, "lines-and-columns": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", - "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=" + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" }, "loader-runner": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.2.0.tgz", - "integrity": "sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw==" + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==" }, "loader-utils": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", - "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.2.tgz", + "integrity": "sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A==", "requires": { "big.js": "^5.2.2", "emojis-list": "^3.0.0", @@ -22387,110 +19780,40 @@ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, - "lodash.assignin": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.assignin/-/lodash.assignin-4.2.0.tgz", - "integrity": "sha1-uo31+4QesKPoBEIysOJjqNxqKKI=" - }, - "lodash.bind": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/lodash.bind/-/lodash.bind-4.2.1.tgz", - "integrity": "sha1-euMBfpOWIqwxt9fX3LGzTbFpDTU=" - }, - "lodash.clonedeep": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", - "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=" - }, "lodash.curry": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/lodash.curry/-/lodash.curry-4.1.1.tgz", - "integrity": "sha1-JI42By7ekGUB11lmIAqG2riyMXA=" + "integrity": "sha512-/u14pXGviLaweY5JI0IUzgzF2J6Ne8INyzAZjImcryjgkZ+ebruBxy2/JaOOkTqScddcYtakjhSaeemV8lR0tA==" }, "lodash.debounce": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=" - }, - "lodash.defaults": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", - "integrity": "sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=" - }, - "lodash.filter": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.filter/-/lodash.filter-4.6.0.tgz", - "integrity": "sha1-ZosdSYFgOuHMWm+nYBQ+SAtMSs4=" - }, - "lodash.flatten": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", - "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=" + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==" }, "lodash.flow": { "version": "3.5.0", "resolved": "https://registry.npmjs.org/lodash.flow/-/lodash.flow-3.5.0.tgz", - "integrity": "sha1-h79AKSuM+D5OjOGjrkIJ4gBxZ1o=" - }, - "lodash.foreach": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.foreach/-/lodash.foreach-4.5.0.tgz", - "integrity": "sha1-Gmo16s5AEoDH8G3d7DUWWrJ+PlM=" - }, - "lodash.map": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.map/-/lodash.map-4.6.0.tgz", - "integrity": "sha1-dx7Hg540c9nEzeKLGTlMNWL09tM=" + "integrity": "sha512-ff3BX/tSioo+XojX4MOsOMhJw0nZoUEF011LX8g8d3gvjVbxd89cCio4BCXronjxcTUIJUoqKEUA+n4CqvvRPw==" }, "lodash.memoize": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=" + "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==" }, "lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" }, - "lodash.pick": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.pick/-/lodash.pick-4.4.0.tgz", - "integrity": "sha1-UvBWEP/53tQiYRRB7R/BI6AwAbM=" - }, - "lodash.reduce": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.reduce/-/lodash.reduce-4.6.0.tgz", - "integrity": "sha1-8atrg5KZrUj3hKu/R2WW8DuRTTs=" - }, - "lodash.reject": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.reject/-/lodash.reject-4.6.0.tgz", - "integrity": "sha1-gNZJLcFHCGS79YNTO2UfQqn1JBU=" - }, - "lodash.some": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.some/-/lodash.some-4.6.0.tgz", - "integrity": "sha1-G7nzFO9ri63tE7VJFpsqlF62jk0=" - }, - "lodash.toarray": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.toarray/-/lodash.toarray-4.4.0.tgz", - "integrity": "sha1-JMS/zWsvuji/0FlNsRedjptlZWE=" - }, "lodash.truncate": { "version": "4.4.2", "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", - "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=" + "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==" }, "lodash.uniq": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", - "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=" - }, - "loglevel": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.7.1.tgz", - "integrity": "sha512-Hesni4s5UkWkwCGJMQGAh71PaLUmKFM60dHvq0zi/vDhhrzuk+4GgNbTXJ12YYQJn6ZKBDNIjYcuQGKudvqrIw==" + "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==" }, "loose-envify": { "version": "1.4.0", @@ -22536,19 +19859,6 @@ } } }, - "map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=" - }, - "map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", - "requires": { - "object-visit": "^1.0.0" - } - }, "markdown-escapes": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/markdown-escapes/-/markdown-escapes-1.0.4.tgz", @@ -22591,57 +19901,32 @@ "integrity": "sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w==" }, "mdn-data": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", - "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==" + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", + "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==" }, "mdurl": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", - "integrity": "sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4=" + "integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==" }, "media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==" }, - "memory-fs": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", - "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", + "memfs": { + "version": "3.4.12", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.4.12.tgz", + "integrity": "sha512-BcjuQn6vfqP+k100e0E9m61Hyqa//Brp+I3f0OBmN0ATHlFA8vx3Lt8z57R3u2bPqe3WGDBC+nF72fTH7isyEw==", "requires": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - } - } + "fs-monkey": "^1.0.3" } }, "merge-descriptors": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" }, "merge-stream": { "version": "2.0.0", @@ -22656,20 +19941,15 @@ "methods": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" - }, - "microevent.ts": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/microevent.ts/-/microevent.ts-0.1.1.tgz", - "integrity": "sha512-jo1OfR4TaEwd5HOrt5+tAZ9mqT4jmpNAusXtyfNzqVm9uiSYFZlKM1wYL4oU7azZW/PxQW53wM0S6OR1JHNa2g==" + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==" }, "micromatch": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", - "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", "requires": { - "braces": "^3.0.1", - "picomatch": "^2.2.3" + "braces": "^3.0.2", + "picomatch": "^2.3.1" } }, "mime": { @@ -22678,16 +19958,16 @@ "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" }, "mime-db": { - "version": "1.47.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.47.0.tgz", - "integrity": "sha512-QBmA/G2y+IfeS4oktet3qRZ+P5kPhCKRXxXnQEudYqUaEioAU1/Lq2us3D/t1Jfo4hE9REQPrbB7K5sOczJVIw==" + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" }, "mime-types": { - "version": "2.1.30", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.30.tgz", - "integrity": "sha512-crmjA4bLtR8m9qLpHvgxSChT+XoSlZi8J4n/aIdn3z92e/U47Z0V/yl+Wh9W046GgFVAmoNR/fmdbZYcSSIUeg==", + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", "requires": { - "mime-db": "1.47.0" + "mime-db": "1.52.0" } }, "mimic-fn": { @@ -22700,33 +19980,47 @@ "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==" }, - "mini-create-react-context": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/mini-create-react-context/-/mini-create-react-context-0.4.1.tgz", - "integrity": "sha512-YWCYEmd5CQeHGSAKrYvXgmzzkrvssZcuuQDDeqkT+PziKGMgE+0MCCtcKbROzocGBG1meBLl2FotlRwf4gAzbQ==", - "requires": { - "@babel/runtime": "^7.12.1", - "tiny-warning": "^1.0.3" - } - }, "mini-css-extract-plugin": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-1.6.0.tgz", - "integrity": "sha512-nPFKI7NSy6uONUo9yn2hIfb9vyYvkFu95qki0e21DQ9uaqNKDP15DGpK0KnV6wDroWxPHtExrdEwx/yDQ8nVRw==", + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.7.2.tgz", + "integrity": "sha512-EdlUizq13o0Pd+uCp+WO/JpkLvHRVGt97RqfeGhXqAcorYo1ypJSpkV+WDT0vY/kmh/p7wRdJNJtuyK540PXDw==", "requires": { - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0", - "webpack-sources": "^1.1.0" + "schema-utils": "^4.0.0" }, "dependencies": { + "ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "requires": { + "fast-deep-equal": "^3.1.3" + } + }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + }, "schema-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", - "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", + "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", "requires": { - "@types/json-schema": "^7.0.6", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" + "@types/json-schema": "^7.0.9", + "ajv": "^8.8.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.0.0" } } } @@ -22737,46 +20031,54 @@ "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" }, "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "requires": { "brace-expansion": "^1.1.7" } }, "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", + "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==" }, - "mixin-deep": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", - "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", + "minipass": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz", + "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", "requires": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" }, "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "requires": { - "is-plain-object": "^2.0.4" - } + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" } } }, + "minizlib": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz", + "integrity": "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==", + "requires": { + "minipass": "^2.9.0" + } + }, "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "requires": { + "minimist": "^1.2.6" + } }, - "module-alias": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/module-alias/-/module-alias-2.2.2.tgz", - "integrity": "sha512-A/78XjoX2EmNvppVWEhM2oGk3x4lLxnkEA4jTbaK97QKSDjkIoOsKQlfylt/d3kKKi596Qy3NP5XrXJ6fZIC9Q==" + "mrmime": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-1.0.1.tgz", + "integrity": "sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==" }, "ms": { "version": "2.1.2", @@ -22784,86 +20086,44 @@ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "multicast-dns": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz", - "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==", + "version": "7.2.5", + "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", + "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", "requires": { - "dns-packet": "^1.3.1", + "dns-packet": "^5.2.2", "thunky": "^1.0.2" } }, - "multicast-dns-service-types": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz", - "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=" - }, - "nan": { - "version": "2.14.2", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.2.tgz", - "integrity": "sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ==", - "optional": true - }, "nanoid": { - "version": "3.1.23", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.23.tgz", - "integrity": "sha512-FiB0kzdP0FFVGDKlRLEQ1BgDzU87dy5NnzjeW9YZNt+/c3+q82EQDUwniSAUxp/F0gFNI1ZhKU1FqYsMuqZVnw==" - }, - "nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - } - }, - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "requires": { - "is-plain-object": "^2.0.4" - } - } - } + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", + "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==" }, "natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=" + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==" }, "negotiator": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", - "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==" }, "neo-async": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" }, - "nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" + "njre": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/njre/-/njre-0.2.0.tgz", + "integrity": "sha512-+Wq8R6VmjK+jI8a9NdzfU6Vh50r3tjsdvl5KJE1OyHeH8I/nx5Ptm12qpO3qNUbstXuZfBDgDL0qQZw9JyjhMw==", + "requires": { + "command-exists-promise": "^2.0.2", + "node-fetch": "^2.5.0", + "tar": "^4.4.8", + "yauzl": "^2.10.0" + } }, "no-case": { "version": "3.0.4", @@ -22875,11 +20135,11 @@ } }, "node-emoji": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.10.0.tgz", - "integrity": "sha512-Yt3384If5H6BYGVHiHwTL+99OzJKHhgp82S8/dktEK73T26BazdgZ4JZh92xSVtGNJvz9UbXdNAc5hcrXV42vw==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.11.0.tgz", + "integrity": "sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==", "requires": { - "lodash.toarray": "^4.4.0" + "lodash": "^4.17.21" } }, "node-fetch": { @@ -22891,14 +20151,14 @@ } }, "node-forge": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz", - "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==" + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", + "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==" }, "node-releases": { - "version": "1.1.72", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.72.tgz", - "integrity": "sha512-LLUo+PpH3dU6XizX3iVoubUNheF/owjXCZZ5yACDxNnPtgFuludV1ZL3ayK1kVep42Rmm0+R9/Y60NQbZ2bifw==" + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", + "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==" }, "normalize-path": { "version": "3.0.0", @@ -22908,12 +20168,12 @@ "normalize-range": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=" + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==" }, "normalize-url": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", - "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==" + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==" }, "npm-run-path": { "version": "4.0.1", @@ -22926,174 +20186,79 @@ "nprogress": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/nprogress/-/nprogress-0.2.0.tgz", - "integrity": "sha1-y480xTIT2JVyP8urkH6UIq28r7E=" + "integrity": "sha512-I19aIingLgR1fmhftnbWWO3dXc0hSxqHQHQb3H8m+K3TnEn/iSeTZZOyvKXWqQESMwuUVnatlCnZdLBZZt2VSA==" }, "nth-check": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", - "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", "requires": { - "boolbase": "~1.0.0" + "boolbase": "^1.0.0" } }, "object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" - }, - "object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", - "requires": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "requires": { - "kind-of": "^3.0.2" - } - }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "requires": { - "kind-of": "^3.0.2" - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" - } - } - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==" }, "object-inspect": { - "version": "1.10.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.10.3.tgz", - "integrity": "sha512-e5mCJlSH7poANfC8z8S9s9S2IN5/4Zb3aZ33f5s8YqoazCFzNLloLU8r5VCG+G7WoqLvAAZoVMcy3tp/3X0Plw==" - }, - "object-is": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", - "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - } + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", + "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==" }, "object-keys": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" }, - "object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", - "requires": { - "isobject": "^3.0.0" - } - }, "object.assign": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", + "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "has-symbols": "^1.0.3", "object-keys": "^1.1.1" } }, "object.entries": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.3.tgz", - "integrity": "sha512-ym7h7OZebNS96hn5IJeyUmaWhaSM4SVtAPPfNLQEI2MYWCO2egsITb9nab2+i/Pwibx+R0mtn+ltKJXRSeTMGg==", - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.1", - "has": "^1.0.3" - } - }, - "object.fromentries": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.4.tgz", - "integrity": "sha512-EsFBshs5RUUpQEY1D4q/m59kMfz4YJvxuNCJcv/jWwOJr34EaVnG11ZrZa0UHB3wnzV1wx8m58T4hQL8IuNXlQ==", + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.5.tgz", + "integrity": "sha512-TyxmjUoZggd4OrrU1W66FMDG6CuqJxsFvymeyXI51+vQLN67zYfZseptRge703kKQdo4uccgAKebXFcRCzk4+g==", "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2", - "has": "^1.0.3" + "es-abstract": "^1.19.1" } }, - "object.getownpropertydescriptors": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.2.tgz", - "integrity": "sha512-WtxeKSzfBjlzL+F9b7M7hewDzMwy+C8NRssHd1YrNlzHzIDrXcXiNOMrezdAEM4UXixgV+vvnyBeN7Rygl2ttQ==", + "object.fromentries": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.5.tgz", + "integrity": "sha512-CAyG5mWQRRiBU57Re4FKoTBjXfDoNwdFVH2Y1tS9PqCsfUTymAohOkEMSG3aRNKmv4lV3O7p1et7c187q6bynw==", "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2" + "es-abstract": "^1.19.1" } }, - "object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "object.hasown": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.1.tgz", + "integrity": "sha512-LYLe4tivNQzq4JdaWW6WO3HMZZJWzkkH8fnI6EebWl0VZth2wL2Lovm74ep2/gZzlaTdV62JZHEqHQ2yVn8Q/A==", "requires": { - "isobject": "^3.0.1" + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5" } }, "object.values": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.3.tgz", - "integrity": "sha512-nkF6PfDB9alkOUxpf1HNm/QlkeW3SReqL5WXeBLpEJJnlPSvRaDQpW3gQTksTN3fgJX4hL42RzKyOin6ff3tyw==", + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.5.tgz", + "integrity": "sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==", "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2", - "has": "^1.0.3" + "es-abstract": "^1.19.1" } }, "obuf": { @@ -23102,9 +20267,9 @@ "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==" }, "on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", "requires": { "ee-first": "1.1.1" } @@ -23117,7 +20282,7 @@ "once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", "requires": { "wrappy": "1" } @@ -23131,12 +20296,13 @@ } }, "open": { - "version": "7.4.2", - "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", - "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz", + "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==", "requires": { - "is-docker": "^2.0.0", - "is-wsl": "^2.1.1" + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" } }, "opener": { @@ -23144,21 +20310,6 @@ "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==" }, - "opn": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/opn/-/opn-5.5.0.tgz", - "integrity": "sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==", - "requires": { - "is-wsl": "^1.1.0" - }, - "dependencies": { - "is-wsl": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", - "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=" - } - } - }, "optionator": { "version": "0.9.1", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", @@ -23172,30 +20323,17 @@ "word-wrap": "^1.2.3" } }, - "original": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/original/-/original-1.0.2.tgz", - "integrity": "sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg==", - "requires": { - "url-parse": "^1.4.3" - } - }, "p-cancelable": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==" }, - "p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=" - }, "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "requires": { - "yocto-queue": "^0.1.0" + "p-try": "^2.0.0" } }, "p-locate": { @@ -23204,16 +20342,6 @@ "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "requires": { "p-limit": "^2.2.0" - }, - "dependencies": { - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "requires": { - "p-try": "^2.0.0" - } - } } }, "p-map": { @@ -23225,11 +20353,12 @@ } }, "p-retry": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-3.0.1.tgz", - "integrity": "sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w==", + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", + "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", "requires": { - "retry": "^0.12.0" + "@types/retry": "0.12.0", + "retry": "^0.13.1" } }, "p-try": { @@ -23297,15 +20426,34 @@ } }, "parse-numeric-range": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/parse-numeric-range/-/parse-numeric-range-1.2.0.tgz", - "integrity": "sha512-1q2tXpAOplPxcl8vrIGPWz1dJxxfmdRkCFcpxxMBerDnGuuHalOWF/xj9L8Nn5XoTUoB/6F0CeQBp2fMgkOYFg==" + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/parse-numeric-range/-/parse-numeric-range-1.3.0.tgz", + "integrity": "sha512-twN+njEipszzlMJd4ONUYgSfZPDxgHhT9Ahed5uTigpQn90FggW4SA/AIPq/6a149fTbE9qBEcSwE3FAEp6wQQ==" }, "parse5": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" }, + "parse5-htmlparser2-tree-adapter": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz", + "integrity": "sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==", + "requires": { + "domhandler": "^5.0.2", + "parse5": "^7.0.0" + }, + "dependencies": { + "parse5": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", + "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", + "requires": { + "entities": "^4.4.0" + } + } + } + }, "parseurl": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", @@ -23320,16 +20468,6 @@ "tslib": "^2.0.3" } }, - "pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=" - }, - "path-dirname": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", - "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=" - }, "path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", @@ -23338,12 +20476,12 @@ "path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==" }, "path-is-inside": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=" + "integrity": "sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==" }, "path-key": { "version": "3.1.1", @@ -23358,35 +20496,27 @@ "path-to-regexp": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" }, "path-type": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" }, - "picomatch": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.3.tgz", - "integrity": "sha512-KpELjfwcCDUb9PeigTs2mBJzXUPzAuP2oPcA989He8Rte0+YUAjw1JVedDhuTKPkHjSYzMN3npC9luThGYEKdg==" - }, - "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==" + "pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==" }, - "pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=" + "picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" }, - "pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", - "requires": { - "pinkie": "^2.0.0" - } + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" }, "pkg-dir": { "version": "4.2.0", @@ -23421,14 +20551,6 @@ "path-exists": "^3.0.0" } }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "requires": { - "p-try": "^2.0.0" - } - }, "p-locate": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", @@ -23440,117 +20562,79 @@ "path-exists": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" - } - } - }, - "portfinder": { - "version": "1.0.28", - "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz", - "integrity": "sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA==", - "requires": { - "async": "^2.6.2", - "debug": "^3.1.1", - "mkdirp": "^0.5.5" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "requires": { - "ms": "^2.1.1" - } - }, - "mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "requires": { - "minimist": "^1.2.5" - } + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==" } } }, - "posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=" - }, "postcss": { - "version": "8.2.15", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.2.15.tgz", - "integrity": "sha512-2zO3b26eJD/8rb106Qu2o7Qgg52ND5HPjcyQiK2B98O388h43A448LCslC0dI2P97wCAQRJsFvwTRcXxTKds+Q==", + "version": "8.4.21", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.21.tgz", + "integrity": "sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg==", "requires": { - "colorette": "^1.2.2", - "nanoid": "^3.1.23", - "source-map": "^0.6.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - } + "nanoid": "^3.3.4", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" } }, "postcss-calc": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.0.0.tgz", - "integrity": "sha512-5NglwDrcbiy8XXfPM11F3HeC6hoT9W7GUH/Zi5U/p7u3Irv4rHhdDcIZwG0llHXV4ftsBjpfWMXAnXNl4lnt8g==", + "version": "8.2.4", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.2.4.tgz", + "integrity": "sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==", "requires": { - "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^4.0.2" + "postcss-selector-parser": "^6.0.9", + "postcss-value-parser": "^4.2.0" } }, "postcss-colormin": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.0.0.tgz", - "integrity": "sha512-Yt84+5V6CgS/AhK7d7MA58vG8dSZ7+ytlRtWLaQhag3HXOncTfmYpuUOX4cDoXjvLfw1sHRCHMiBjYhc35CymQ==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.3.0.tgz", + "integrity": "sha512-WdDO4gOFG2Z8n4P8TWBpshnL3JpmNmJwdnfP2gbk2qBA8PWwOYcmjmI/t3CmMeL72a7Hkd+x/Mg9O2/0rD54Pg==", "requires": { - "browserslist": "^4.16.0", - "color": "^3.1.1", - "postcss-value-parser": "^4.1.0" + "browserslist": "^4.16.6", + "caniuse-api": "^3.0.0", + "colord": "^2.9.1", + "postcss-value-parser": "^4.2.0" } }, "postcss-convert-values": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.0.0.tgz", - "integrity": "sha512-V5kmYm4xoBAjNs+eHY/6XzXJkkGeg4kwNf2ocfqhLb1WBPEa4oaSmoi1fnVO7Dkblqvus9h+AenDvhCKUCK7uQ==", + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.1.3.tgz", + "integrity": "sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA==", "requires": { - "postcss-value-parser": "^4.1.0" + "browserslist": "^4.21.4", + "postcss-value-parser": "^4.2.0" } }, "postcss-discard-comments": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.0.0.tgz", - "integrity": "sha512-Umig6Gxs8m20RihiXY6QkePd6mp4FxkA1Dg+f/Kd6uw0gEMfKRjDeQOyFkLibexbJJGHpE3lrN/Q0R9SMrUMbQ==", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.1.2.tgz", + "integrity": "sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==", "requires": {} }, "postcss-discard-duplicates": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.0.0.tgz", - "integrity": "sha512-vEJJ+Y3pFUnO1FyCBA6PSisGjHtnphL3V6GsNvkASq/VkP3OX5/No5RYXXLxHa2QegStNzg6HYrYdo71uR4caQ==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz", + "integrity": "sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==", "requires": {} }, "postcss-discard-empty": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.0.0.tgz", - "integrity": "sha512-+wigy099Y1xZxG36WG5L1f2zeH1oicntkJEW4TDIqKKDO2g9XVB3OhoiHTu08rDEjLnbcab4rw0BAccwi2VjiQ==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz", + "integrity": "sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==", "requires": {} }, "postcss-discard-overridden": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.0.0.tgz", - "integrity": "sha512-hybnScTaZM2iEA6kzVQ6Spozy7kVdLw+lGw8hftLlBEzt93uzXoltkYp9u0tI8xbfhxDLTOOzHsHQCkYdmzRUg==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz", + "integrity": "sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==", "requires": {} }, "postcss-discard-unused": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-discard-unused/-/postcss-discard-unused-5.0.0.tgz", - "integrity": "sha512-C+bchjnGRoGlSQjACMts/FlpY3LMDEUS5+9rHKxvl/NFUY/5OYWjkA1AEUo9HDWnFB44CFgcm6khLMSIbrjVEQ==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-discard-unused/-/postcss-discard-unused-5.1.0.tgz", + "integrity": "sha512-KwLWymI9hbwXmJa0dkrzpRbSJEh0vVUd7r8t0yOGPcfKzyJJxFM8kLyC5Ev9avji6nY95pOp1W6HqIrfT+0VGw==", "requires": { - "postcss-selector-parser": "^6.0.4" + "postcss-selector-parser": "^6.0.5" } }, "postcss-loader": { @@ -23566,11 +20650,11 @@ }, "dependencies": { "schema-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", - "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", "requires": { - "@types/json-schema": "^7.0.6", + "@types/json-schema": "^7.0.8", "ajv": "^6.12.5", "ajv-keywords": "^3.5.2" } @@ -23578,85 +20662,68 @@ } }, "postcss-merge-idents": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-merge-idents/-/postcss-merge-idents-5.0.0.tgz", - "integrity": "sha512-s8wwhAB/SJDPkcVxj31s2SGzgrO66ktUYjWh6j4qwY67Mzxx3/TkK+m/+v6tU/xyW4TmGd4yuyTXsHaaLC0jLg==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-merge-idents/-/postcss-merge-idents-5.1.1.tgz", + "integrity": "sha512-pCijL1TREiCoog5nQp7wUe+TUonA2tC2sQ54UGeMmryK3UFGIYKqDyjnqd6RcuI4znFn9hWSLNN8xKE/vWcUQw==", "requires": { - "cssnano-utils": "^2.0.0", - "postcss-value-parser": "^4.1.0" + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" } }, "postcss-merge-longhand": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.0.1.tgz", - "integrity": "sha512-H1RO8le5deFGumQzuhJjuL0bIXPRysa+w7xtk5KrHe38oiaSS9ksPXDo24+IOS3SETPhip0J5+1uCOW+ALs3Yw==", + "version": "5.1.7", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.1.7.tgz", + "integrity": "sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ==", "requires": { - "css-color-names": "^1.0.1", - "postcss-value-parser": "^4.1.0", - "stylehacks": "^5.0.0" + "postcss-value-parser": "^4.2.0", + "stylehacks": "^5.1.1" } }, "postcss-merge-rules": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.0.0.tgz", - "integrity": "sha512-TfsXbKjNYCGfUPEXGIGPySnMiJbdS+3gcVeV8gwmJP4RajyKZHW8E0FYDL1WmggTj3hi+m+WUCAvqRpX2ut4Kg==", + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.1.3.tgz", + "integrity": "sha512-LbLd7uFC00vpOuMvyZop8+vvhnfRGpp2S+IMQKeuOZZapPRY4SMq5ErjQeHbHsjCUgJkRNrlU+LmxsKIqPKQlA==", "requires": { - "browserslist": "^4.16.0", + "browserslist": "^4.21.4", "caniuse-api": "^3.0.0", - "cssnano-utils": "^2.0.0", - "postcss-selector-parser": "^6.0.4", - "vendors": "^1.0.3" + "cssnano-utils": "^3.1.0", + "postcss-selector-parser": "^6.0.5" } }, "postcss-minify-font-values": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.0.0.tgz", - "integrity": "sha512-zi2JhFaMOcIaNxhndX5uhsqSY1rexKDp23wV8EOmC9XERqzLbHsoRye3aYF716Zm+hkcR4loqKDt8LZlmihwAg==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.1.0.tgz", + "integrity": "sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA==", "requires": { - "postcss-value-parser": "^4.1.0" + "postcss-value-parser": "^4.2.0" } }, "postcss-minify-gradients": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.0.0.tgz", - "integrity": "sha512-/jPtNgs6JySMwgsE5dPOq8a2xEopWTW3RyqoB9fLqxgR+mDUNLSi7joKd+N1z7FXWgVkc4l/dEBMXHgNAaUbvg==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.1.1.tgz", + "integrity": "sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw==", "requires": { - "cssnano-utils": "^2.0.0", - "is-color-stop": "^1.1.0", - "postcss-value-parser": "^4.1.0" + "colord": "^2.9.1", + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" } }, "postcss-minify-params": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.0.0.tgz", - "integrity": "sha512-KvZYIxTPBVKjdd+XgObq9A+Sfv8lMkXTpbZTsjhr42XbfWIeLaTItMlygsDWfjArEc3muUfDaUFgNSeDiJ5jug==", + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.1.4.tgz", + "integrity": "sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw==", "requires": { - "alphanum-sort": "^1.0.2", - "browserslist": "^4.16.0", - "cssnano-utils": "^2.0.0", - "postcss-value-parser": "^4.1.0", - "uniqs": "^2.0.0" + "browserslist": "^4.21.4", + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" } }, "postcss-minify-selectors": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.0.0.tgz", - "integrity": "sha512-cEM0O0eWwFIvmo6nfB0lH0vO/XFwgqIvymODbfPXZ1gTA3i76FKnb7TGUrEpiTxaXH6tgYQ6DcTHwRiRS+YQLQ==", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.2.1.tgz", + "integrity": "sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg==", "requires": { - "alphanum-sort": "^1.0.2", - "postcss-selector-parser": "^3.1.2" - }, - "dependencies": { - "postcss-selector-parser": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", - "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", - "requires": { - "dot-prop": "^5.2.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - } - } + "postcss-selector-parser": "^6.0.5" } }, "postcss-modules-extract-imports": { @@ -23692,268 +20759,155 @@ } }, "postcss-normalize-charset": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.0.0.tgz", - "integrity": "sha512-pqsCkgo9KmQP0ew6DqSA+uP9YN6EfsW20pQ3JU5JoQge09Z6Too4qU0TNDsTNWuEaP8SWsMp+19l15210MsDZQ==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz", + "integrity": "sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==", "requires": {} }, "postcss-normalize-display-values": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.0.0.tgz", - "integrity": "sha512-t4f2d//gH1f7Ns0Jq3eNdnWuPT7TeLuISZ6RQx4j8gpl5XrhkdshdNcOnlrEK48YU6Tcb6jqK7dorME3N4oOGA==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.1.0.tgz", + "integrity": "sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA==", "requires": { - "cssnano-utils": "^2.0.0", - "postcss-value-parser": "^4.1.0" + "postcss-value-parser": "^4.2.0" } }, "postcss-normalize-positions": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.0.0.tgz", - "integrity": "sha512-0o6/qU5ky74X/eWYj/tv4iiKCm3YqJnrhmVADpIMNXxzFZywsSQxl8F7cKs8jQEtF3VrJBgcDHTexZy1zgDoYg==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.1.1.tgz", + "integrity": "sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg==", "requires": { - "postcss-value-parser": "^4.1.0" + "postcss-value-parser": "^4.2.0" } }, "postcss-normalize-repeat-style": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.0.0.tgz", - "integrity": "sha512-KRT14JbrXKcFMYuc4q7lh8lvv8u22wLyMrq+UpHKLtbx2H/LOjvWXYdoDxmNrrrJzomAWL+ViEXr48/IhSUJnQ==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.1.tgz", + "integrity": "sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g==", "requires": { - "cssnano-utils": "^2.0.0", - "postcss-value-parser": "^4.1.0" + "postcss-value-parser": "^4.2.0" } }, "postcss-normalize-string": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.0.0.tgz", - "integrity": "sha512-wSO4pf7GNcDZpmelREWYADF1+XZWrAcbFLQCOqoE92ZwYgaP/RLumkUTaamEzdT2YKRZAH8eLLKGWotU/7FNPw==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.1.0.tgz", + "integrity": "sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w==", "requires": { - "postcss-value-parser": "^4.1.0" + "postcss-value-parser": "^4.2.0" } }, "postcss-normalize-timing-functions": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.0.0.tgz", - "integrity": "sha512-TwPaDX+wl9wO3MUm23lzGmOzGCGKnpk+rSDgzB2INpakD5dgWR3L6bJq1P1LQYzBAvz8fRIj2NWdnZdV4EV98Q==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.1.0.tgz", + "integrity": "sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg==", "requires": { - "cssnano-utils": "^2.0.0", - "postcss-value-parser": "^4.1.0" + "postcss-value-parser": "^4.2.0" } }, "postcss-normalize-unicode": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.0.0.tgz", - "integrity": "sha512-2CpVoz/67rXU5s9tsPZDxG1YGS9OFHwoY9gsLAzrURrCxTAb0H7Vp87/62LvVPgRWTa5ZmvgmqTp2rL8tlm72A==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.1.tgz", + "integrity": "sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA==", "requires": { - "browserslist": "^4.16.0", - "postcss-value-parser": "^4.1.0" + "browserslist": "^4.21.4", + "postcss-value-parser": "^4.2.0" } }, "postcss-normalize-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.0.0.tgz", - "integrity": "sha512-ICDaGFBqLgA3dlrCIRuhblLl80D13YtgEV9NJPTYJtgR72vu61KgxAHv+z/lKMs1EbwfSQa3ALjOFLSmXiE34A==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.1.0.tgz", + "integrity": "sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew==", "requires": { - "is-absolute-url": "^3.0.3", - "normalize-url": "^4.5.0", - "postcss-value-parser": "^4.1.0" + "normalize-url": "^6.0.1", + "postcss-value-parser": "^4.2.0" } }, "postcss-normalize-whitespace": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.0.0.tgz", - "integrity": "sha512-KRnxQvQAVkJfaeXSz7JlnD9nBN9sFZF9lrk9452Q2uRoqrRSkinqifF8Iex7wZGei2DZVG/qpmDFDmRvbNAOGA==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.1.1.tgz", + "integrity": "sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA==", "requires": { - "postcss-value-parser": "^4.1.0" + "postcss-value-parser": "^4.2.0" } }, "postcss-ordered-values": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.0.0.tgz", - "integrity": "sha512-dPr+SRObiHueCIc4IUaG0aOGQmYkuNu50wQvdXTGKy+rzi2mjmPsbeDsheLk5WPb9Zyf2tp8E+I+h40cnivm6g==", + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.1.3.tgz", + "integrity": "sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ==", "requires": { - "cssnano-utils": "^2.0.0", - "postcss-value-parser": "^4.1.0" + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" } }, "postcss-reduce-idents": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-reduce-idents/-/postcss-reduce-idents-5.0.0.tgz", - "integrity": "sha512-wDth7wkXAZ91i7GNe+/PJKyC9NOR2n04U0t5nnqlvlkKhMhnRn/8NJLYQRa7ZZHPGOZcOfvugrhblioTTg2X8A==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/postcss-reduce-idents/-/postcss-reduce-idents-5.2.0.tgz", + "integrity": "sha512-BTrLjICoSB6gxbc58D5mdBK8OhXRDqud/zodYfdSi52qvDHdMwk+9kB9xsM8yJThH/sZU5A6QVSmMmaN001gIg==", "requires": { - "postcss-value-parser": "^4.1.0" + "postcss-value-parser": "^4.2.0" } }, "postcss-reduce-initial": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.0.0.tgz", - "integrity": "sha512-wR6pXUaFbSMG1oCKx8pKVA+rnSXCHlca5jMrlmkmif+uig0HNUTV9oGN5kjKsM3mATQAldv2PF9Tbl2vqLFjnA==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.1.1.tgz", + "integrity": "sha512-//jeDqWcHPuXGZLoolFrUXBDyuEGbr9S2rMo19bkTIjBQ4PqkaO+oI8wua5BOUxpfi97i3PCoInsiFIEBfkm9w==", "requires": { - "browserslist": "^4.16.0", + "browserslist": "^4.21.4", "caniuse-api": "^3.0.0" } }, "postcss-reduce-transforms": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.0.0.tgz", - "integrity": "sha512-iHdGODW4YzM3WjVecBhPQt6fpJC4lGQZxJKjkBNHpp2b8dzmvj0ogKThqya+IRodQEFzjfXgYeESkf172FH5Lw==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.1.0.tgz", + "integrity": "sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ==", "requires": { - "cssnano-utils": "^2.0.0", - "postcss-value-parser": "^4.1.0" + "postcss-value-parser": "^4.2.0" } }, "postcss-selector-parser": { - "version": "6.0.6", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.6.tgz", - "integrity": "sha512-9LXrvaaX3+mcv5xkg5kFwqSzSH1JIObIx51PrndZwlmznwXRfxMddDvo9gve3gVR8ZTKgoFDdWkbRFmEhT4PMg==", + "version": "6.0.10", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz", + "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==", "requires": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" } }, "postcss-sort-media-queries": { - "version": "3.9.10", - "resolved": "https://registry.npmjs.org/postcss-sort-media-queries/-/postcss-sort-media-queries-3.9.10.tgz", - "integrity": "sha512-pyCWbMrpQq4WjcYFrcVAvxS/+iHnXK5pxa1SAm1s9U4HZjGYU4gkCHwbHbzJ2ZFiiRYpRNRp85QuFvg6ZyKHxw==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/postcss-sort-media-queries/-/postcss-sort-media-queries-4.3.0.tgz", + "integrity": "sha512-jAl8gJM2DvuIJiI9sL1CuiHtKM4s5aEIomkU8G3LFvbP+p8i7Sz8VV63uieTgoewGqKbi+hxBTiOKJlB35upCg==", "requires": { - "sort-css-media-queries": "1.5.4" + "sort-css-media-queries": "2.1.0" } }, "postcss-svgo": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.0.0.tgz", - "integrity": "sha512-M3/VS4sFI1Yp9g0bPL+xzzCNz5iLdRUztoFaugMit5a8sMfkVzzhwqbsOlD8IFFymCdJDmXmh31waYHWw1K4BA==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.1.0.tgz", + "integrity": "sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA==", "requires": { - "postcss-value-parser": "^4.1.0", - "svgo": "^2.3.0" - }, - "dependencies": { - "commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==" - }, - "css-select": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-3.1.2.tgz", - "integrity": "sha512-qmss1EihSuBNWNNhHjxzxSfJoFBM/lERB/Q4EnsJQQC62R2evJDW481091oAdOr9uh46/0n4nrg0It5cAnj1RA==", - "requires": { - "boolbase": "^1.0.0", - "css-what": "^4.0.0", - "domhandler": "^4.0.0", - "domutils": "^2.4.3", - "nth-check": "^2.0.0" - } - }, - "css-tree": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", - "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", - "requires": { - "mdn-data": "2.0.14", - "source-map": "^0.6.1" - } - }, - "css-what": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-4.0.0.tgz", - "integrity": "sha512-teijzG7kwYfNVsUh2H/YN62xW3KK9YhXEgSlbxMlcyjPNvdKJqFx5lrwlJgoFP1ZHlB89iGDlo/JyshKeRhv5A==" - }, - "dom-serializer": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.1.tgz", - "integrity": "sha512-Pv2ZluG5ife96udGgEDovOOOA5UELkltfJpnIExPrAk1LTvecolUGn6lIaoLh86d83GiB86CjzciMd9BuRB71Q==", - "requires": { - "domelementtype": "^2.0.1", - "domhandler": "^4.0.0", - "entities": "^2.0.0" - } - }, - "domelementtype": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", - "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==" - }, - "domhandler": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.0.tgz", - "integrity": "sha512-zk7sgt970kzPks2Bf+dwT/PLzghLnsivb9CcxkvR8Mzr66Olr0Ofd8neSbglHJHaHa2MadfoSdNlKYAaafmWfA==", - "requires": { - "domelementtype": "^2.2.0" - } - }, - "domutils": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.6.0.tgz", - "integrity": "sha512-y0BezHuy4MDYxh6OvolXYsH+1EMGmFbwv5FKW7ovwMG6zTPWqNPq3WF9ayZssFq+UlKdffGLbOEaghNdaOm1WA==", - "requires": { - "dom-serializer": "^1.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0" - } - }, - "entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==" - }, - "mdn-data": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", - "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==" - }, - "nth-check": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.0.tgz", - "integrity": "sha512-i4sc/Kj8htBrAiH1viZ0TgU8Y5XqCaV/FziYK6TBczxmeKm3AEFWqqF3195yKudrarqy7Zu80Ra5dobFjn9X/Q==", - "requires": { - "boolbase": "^1.0.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "svgo": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.3.0.tgz", - "integrity": "sha512-fz4IKjNO6HDPgIQxu4IxwtubtbSfGEAJUq/IXyTPIkGhWck/faiiwfkvsB8LnBkKLvSoyNNIY6d13lZprJMc9Q==", - "requires": { - "@trysound/sax": "0.1.1", - "chalk": "^4.1.0", - "commander": "^7.1.0", - "css-select": "^3.1.2", - "css-tree": "^1.1.2", - "csso": "^4.2.0", - "stable": "^0.1.8" - } - } + "postcss-value-parser": "^4.2.0", + "svgo": "^2.7.0" } }, "postcss-unique-selectors": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.0.0.tgz", - "integrity": "sha512-o9l4pF8SRn7aCMTmzb/kNv/kjV7wPZpZ8Nlb1Gq8v/Qvw969K1wanz1RVA0ehHzWe9+wHXaC2DvZlak/gdMJ5w==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.1.1.tgz", + "integrity": "sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA==", "requires": { - "alphanum-sort": "^1.0.2", - "postcss-selector-parser": "^6.0.2", - "uniqs": "^2.0.0" + "postcss-selector-parser": "^6.0.5" } }, "postcss-value-parser": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", - "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==" + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" }, "postcss-zindex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-zindex/-/postcss-zindex-5.0.0.tgz", - "integrity": "sha512-thJp90qNZedxzfljsAnu7V35L/Zue/nVvWzPDLKZuqHmwDuy1vd3xkFVYfEa8WZZQaetvHtsi3uwjVD3UJAVeg==", - "requires": { - "has": "^1.0.3", - "uniqs": "^2.0.0" - } + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-zindex/-/postcss-zindex-5.1.0.tgz", + "integrity": "sha512-fgFMf0OtVSBR1va1JNHYgMxYk73yhn/qb4uQDq1DLGYolz8gHCyr/sesEuGUaYs58E3ZJRcpoGuPVoB7Meiq9A==", + "requires": {} }, "prelude-ls": { "version": "1.2.1", @@ -23963,20 +20917,20 @@ "prepend-http": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", - "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=" + "integrity": "sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA==" }, "prettier": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.3.0.tgz", - "integrity": "sha512-kXtO4s0Lz/DW/IJ9QdWhAf7/NmPWQXkFr/r/WkR3vyI+0v8amTDxiaQSLzs8NBlytfLWX/7uQUMIW677yLKl4w==" + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz", + "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==" }, "pretty-error": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-2.1.2.tgz", - "integrity": "sha512-EY5oDzmsX5wvuynAByrmY0P0hcp+QpnAKbJng2A2MPjVKXCxrDSUkzghVJ4ZGPIv+JC4gX8fPUWscC0RtjsWGw==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz", + "integrity": "sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==", "requires": { "lodash": "^4.17.20", - "renderkid": "^2.0.4" + "renderkid": "^3.0.0" } }, "pretty-time": { @@ -23985,18 +20939,15 @@ "integrity": "sha512-28iF6xPQrP8Oa6uxE6a1biz+lWeTOAPKggvjB8HAs6nVMKZwf5bG++632Dx614hIWgUPkgivRfG+a8uAXGTIbA==" }, "prism-react-renderer": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/prism-react-renderer/-/prism-react-renderer-1.2.0.tgz", - "integrity": "sha512-GHqzxLYImx1iKN1jJURcuRoA/0ygCcNhfGw1IT8nPIMzarmKQ3Nc+JcG0gi8JXQzuh0C5ShE4npMIoqNin40hg==", + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/prism-react-renderer/-/prism-react-renderer-1.3.5.tgz", + "integrity": "sha512-IJ+MSwBWKG+SM3b2SUfdrhC+gu01QkV2KmRQgREThBfSQRoufqRfxfHUxpG1WcaFjP+kojcFyO9Qqtpgt3qLCg==", "requires": {} }, "prismjs": { - "version": "1.23.0", - "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.23.0.tgz", - "integrity": "sha512-c29LVsqOaLbBHuIbsTxaKENh1N2EQBOHaWv7gkHN4dgRbxSREqDnDbtFJYdpPauS4YCplMSNCABQ6Eeor69bAA==", - "requires": { - "clipboard": "^2.0.0" - } + "version": "1.29.0", + "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.29.0.tgz", + "integrity": "sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==" }, "process-nextick-args": { "version": "2.0.1", @@ -24017,22 +20968,22 @@ } }, "prompts": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.1.tgz", - "integrity": "sha512-EQyfIuO2hPDsX1L/blblV+H7I0knhgAd82cVneCwcdND9B8AuCDuRcBH6yIcG4dFzlOUqbazQqwGjx5xmsNLuQ==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", "requires": { "kleur": "^3.0.3", "sisteransi": "^1.0.5" } }, "prop-types": { - "version": "15.7.2", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz", - "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==", + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", "requires": { "loose-envify": "^1.4.0", "object-assign": "^4.1.1", - "react-is": "^16.8.1" + "react-is": "^16.13.1" } }, "property-information": { @@ -24044,19 +20995,21 @@ } }, "proxy-addr": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz", - "integrity": "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==", + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", "requires": { - "forwarded": "~0.1.2", + "forwarded": "0.2.0", "ipaddr.js": "1.9.1" + }, + "dependencies": { + "ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" + } } }, - "prr": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", - "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=" - }, "pump": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", @@ -24069,7 +21022,7 @@ "punycode": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" + "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==" }, "pupa": { "version": "2.1.1", @@ -24082,27 +21035,23 @@ "pure-color": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/pure-color/-/pure-color-1.3.0.tgz", - "integrity": "sha1-H+Bk+wrIUfDeYTIKi/eWg2Qi8z4=" - }, - "q": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", - "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=" + "integrity": "sha512-QFADYnsVoBMw1srW7OVKEYjG+MbIa49s54w1MA1EDY6r2r/sTcKKYqRX1f4GYvnXP7eN/Pe9HFcX+hwzmrXRHA==" }, "qs": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", - "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==" - }, - "querystring": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=" + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "requires": { + "side-channel": "^1.0.4" + } }, - "querystringify": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", - "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==" + "queue": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/queue/-/queue-6.0.2.tgz", + "integrity": "sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==", + "requires": { + "inherits": "~2.0.3" + } }, "queue-microtask": { "version": "1.2.3", @@ -24123,14 +21072,21 @@ "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" }, "raw-body": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", - "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", "requires": { - "bytes": "3.1.0", - "http-errors": "1.7.2", + "bytes": "3.1.2", + "http-errors": "2.0.0", "iconv-lite": "0.4.24", "unpipe": "1.0.0" + }, + "dependencies": { + "bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==" + } } }, "rc": { @@ -24147,7 +21103,7 @@ "strip-json-comments": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==" } } }, @@ -24164,7 +21120,7 @@ "react-base16-styling": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/react-base16-styling/-/react-base16-styling-0.6.0.tgz", - "integrity": "sha1-7yFW1mz0E5aVyKFniGy2nqZgeSw=", + "integrity": "sha512-yvh/7CArceR/jNATXOKDlvTnPKPmGZz7zsenQ3jUwLzHkNUR0CvY3yGYJbWJ/nnxsL8Sgmt5cO3/SILVuPO6TQ==", "requires": { "base16": "^1.0.0", "lodash.curry": "^4.0.1", @@ -24173,136 +21129,72 @@ } }, "react-dev-utils": { - "version": "11.0.4", - "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-11.0.4.tgz", - "integrity": "sha512-dx0LvIGHcOPtKbeiSUM4jqpBl3TcY7CDjZdfOIcKeznE7BWr9dg0iPG90G5yfVQ+p/rGNMXdbfStvzQZEVEi4A==", - "requires": { - "@babel/code-frame": "7.10.4", - "address": "1.1.2", - "browserslist": "4.14.2", - "chalk": "2.4.2", - "cross-spawn": "7.0.3", - "detect-port-alt": "1.1.6", - "escape-string-regexp": "2.0.0", - "filesize": "6.1.0", - "find-up": "4.1.0", - "fork-ts-checker-webpack-plugin": "4.1.6", - "global-modules": "2.0.0", - "globby": "11.0.1", - "gzip-size": "5.1.1", - "immer": "8.0.1", - "is-root": "2.1.0", - "loader-utils": "2.0.0", - "open": "^7.0.2", - "pkg-up": "3.1.0", - "prompts": "2.4.0", - "react-error-overlay": "^6.0.9", - "recursive-readdir": "2.2.2", - "shell-quote": "1.7.2", - "strip-ansi": "6.0.0", - "text-table": "0.2.0" + "version": "12.0.1", + "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-12.0.1.tgz", + "integrity": "sha512-84Ivxmr17KjUupyqzFode6xKhjwuEJDROWKJy/BthkL7Wn6NJ8h4WE6k/exAv6ImS+0oZLRRW5j/aINMHyeGeQ==", + "requires": { + "@babel/code-frame": "^7.16.0", + "address": "^1.1.2", + "browserslist": "^4.18.1", + "chalk": "^4.1.2", + "cross-spawn": "^7.0.3", + "detect-port-alt": "^1.1.6", + "escape-string-regexp": "^4.0.0", + "filesize": "^8.0.6", + "find-up": "^5.0.0", + "fork-ts-checker-webpack-plugin": "^6.5.0", + "global-modules": "^2.0.0", + "globby": "^11.0.4", + "gzip-size": "^6.0.0", + "immer": "^9.0.7", + "is-root": "^2.1.0", + "loader-utils": "^3.2.0", + "open": "^8.4.0", + "pkg-up": "^3.1.0", + "prompts": "^2.4.2", + "react-error-overlay": "^6.0.11", + "recursive-readdir": "^2.2.2", + "shell-quote": "^1.7.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" }, "dependencies": { - "@babel/code-frame": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", - "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", + "find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "requires": { - "@babel/highlight": "^7.10.4" + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" } }, - "ansi-styles": { + "loader-utils": { "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "browserslist": { - "version": "4.14.2", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.14.2.tgz", - "integrity": "sha512-HI4lPveGKUR0x2StIz+2FXfDk9SfVMrxn6PLh1JeGUwcuoDkdKZebWiyLRJ68iIPDpMI4JLVDf7S7XzslgWOhw==", - "requires": { - "caniuse-lite": "^1.0.30001125", - "electron-to-chromium": "^1.3.564", - "escalade": "^3.0.2", - "node-releases": "^1.1.61" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" - } - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" - }, - "escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==" + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.2.1.tgz", + "integrity": "sha512-ZvFw1KWS3GVyYBYb7qkmRM/WwL2TQQBxgCK62rlvm4WpVQ23Nb4tYjApUlfjrEGvOs7KHEsmyUn75OHZrJMWPw==" }, - "globby": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.1.tgz", - "integrity": "sha512-iH9RmgwCmUJHi2z5o2l3eTtGBtXek1OYlHrbcxOYugyHLmAsZrPj43OtHThd62Buh/Vv6VyCBD2bdyWcGNQqoQ==", + "locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "requires": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.1.1", - "ignore": "^5.1.4", - "merge2": "^1.3.0", - "slash": "^3.0.0" + "p-locate": "^5.0.0" } }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" - }, - "ignore": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", - "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==" - }, - "prompts": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.0.tgz", - "integrity": "sha512-awZAKrk3vN6CroQukBL+R9051a4R3zCZBlJm/HBfrSZ8iTpYix3VX1vU4mveiLpiwmOJT4wokTF9m6HUk4KqWQ==", + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "requires": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" + "yocto-queue": "^0.1.0" } }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "requires": { - "has-flag": "^3.0.0" + "p-limit": "^3.0.2" } } } @@ -24319,24 +21211,25 @@ } }, "react-error-overlay": { - "version": "6.0.9", - "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.9.tgz", - "integrity": "sha512-nQTTcUu+ATDbrSD1BZHr5kgSD4oF8OFjxun8uAaL8RwPBacGBNPf/yAuVVdx17N8XNzRDMrZ9XcKZHCjPW+9ew==" + "version": "6.0.11", + "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.11.tgz", + "integrity": "sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg==" }, "react-fast-compare": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-3.2.0.tgz", "integrity": "sha512-rtGImPZ0YyLrscKI9xTpV8psd6I8VAtjKCzQDlzyDvqJA8XOW78TXYQwNRNd8g8JZnDu8q9Fu/1v4HPAVwVdHA==" }, - "react-helmet": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/react-helmet/-/react-helmet-6.1.0.tgz", - "integrity": "sha512-4uMzEY9nlDlgxr61NL3XbKRy1hEkXmKNXhjbAIOVw5vcFrsdYbH2FEwcNyWvWinl103nXgzYNlns9ca+8kFiWw==", + "react-helmet-async": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/react-helmet-async/-/react-helmet-async-1.3.0.tgz", + "integrity": "sha512-9jZ57/dAn9t3q6hneQS0wukqC2ENOBgMNVEhb/ZG9ZSxUetzVIw4iAmEU38IaVg3QGYauQPhSeUTuIUtFglWpg==", "requires": { - "object-assign": "^4.1.1", + "@babel/runtime": "^7.12.5", + "invariant": "^2.2.4", "prop-types": "^15.7.2", - "react-fast-compare": "^3.1.1", - "react-side-effect": "^2.1.0" + "react-fast-compare": "^3.2.0", + "shallowequal": "^1.1.0" } }, "react-is": { @@ -24364,6 +21257,7 @@ "version": "5.5.0", "resolved": "https://registry.npmjs.org/react-loadable/-/react-loadable-5.5.0.tgz", "integrity": "sha512-C8Aui0ZpMd4KokxRdVAm2bQtI03k2RMRNzOB+IipV3yxFTSVICv7WoUr5L9ALB5BmKO1iHgZtWM8EvYG83otdg==", + "peer": true, "requires": { "prop-types": "^15.5.0" } @@ -24377,15 +21271,14 @@ } }, "react-router": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-5.2.0.tgz", - "integrity": "sha512-smz1DUuFHRKdcJC0jobGo8cVbhO3x50tCL4icacOlcwDOEQPq4TMqwx3sY1TP+DvtTgz4nm3thuo7A+BK2U0Dw==", + "version": "5.3.4", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-5.3.4.tgz", + "integrity": "sha512-Ys9K+ppnJah3QuaRiLxk+jDWOR1MekYQrlytiXxC1RyfbdsZkS5pvKAzCCr031xHixZwpnsYNT5xysdFHQaYsA==", "requires": { - "@babel/runtime": "^7.1.2", + "@babel/runtime": "^7.12.13", "history": "^4.9.0", "hoist-non-react-statics": "^3.1.0", "loose-envify": "^1.3.1", - "mini-create-react-context": "^0.4.0", "path-to-regexp": "^1.7.0", "prop-types": "^15.6.2", "react-is": "^16.6.0", @@ -24396,7 +21289,7 @@ "isarray": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" + "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==" }, "path-to-regexp": { "version": "1.8.0", @@ -24417,33 +21310,27 @@ } }, "react-router-dom": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-5.2.0.tgz", - "integrity": "sha512-gxAmfylo2QUjcwxI63RhQ5G85Qqt4voZpUXSEqCwykV0baaOTQDR1f0PmY8AELqIyVc0NEZUj0Gov5lNGcXgsA==", + "version": "5.3.4", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-5.3.4.tgz", + "integrity": "sha512-m4EqFMHv/Ih4kpcBCONHbkT68KoAeHN4p3lAGoNryfHi0dMy0kCzEZakiKRsvg5wHZ/JLrLW8o8KomWiz/qbYQ==", "requires": { - "@babel/runtime": "^7.1.2", + "@babel/runtime": "^7.12.13", "history": "^4.9.0", "loose-envify": "^1.3.1", "prop-types": "^15.6.2", - "react-router": "5.2.0", + "react-router": "5.3.4", "tiny-invariant": "^1.0.2", "tiny-warning": "^1.0.0" } }, - "react-side-effect": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/react-side-effect/-/react-side-effect-2.1.1.tgz", - "integrity": "sha512-2FoTQzRNTncBVtnzxFOk2mCpcfxQpenBMbk5kSVBg5UcPqV9fRbgY2zhb7GTWWOlpFmAxhClBDlIq8Rsubz1yQ==", - "requires": {} - }, "react-textarea-autosize": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/react-textarea-autosize/-/react-textarea-autosize-8.3.2.tgz", - "integrity": "sha512-JrMWVgQSaExQByP3ggI1eA8zF4mF0+ddVuX7acUeK2V7bmrpjVOY72vmLz2IXFJSAXoY3D80nEzrn0GWajWK3Q==", + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/react-textarea-autosize/-/react-textarea-autosize-8.4.0.tgz", + "integrity": "sha512-YrTFaEHLgJsi8sJVYHBzYn+mkP3prGkmP2DKb/tm0t7CLJY5t1Rxix8070LAKb0wby7bl/lf2EeHkuMihMZMwQ==", "requires": { "@babel/runtime": "^7.10.2", - "use-composed-ref": "^1.0.0", - "use-latest": "^1.0.0" + "use-composed-ref": "^1.3.0", + "use-latest": "^1.2.1" } }, "readable-stream": { @@ -24457,32 +21344,32 @@ } }, "readdirp": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", - "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "requires": { "picomatch": "^2.2.1" } }, "reading-time": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/reading-time/-/reading-time-1.3.0.tgz", - "integrity": "sha512-RJ8J5O6UvrclfZpcPSPuKusrdRfoY7uXXoYOOdeswZNtSkQaewT3919yz6RyloDBR+iwcUyz5zGOUjhgvfuv3g==" + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/reading-time/-/reading-time-1.5.0.tgz", + "integrity": "sha512-onYyVhBNr4CmAxFsKS7bz+uTLRakypIe4R+5A824vBSkQy/hB3fZepoVEf8OVAxzLvK+H/jm9TzpI3ETSm64Kg==" }, "rechoir": { "version": "0.6.2", "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", + "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==", "requires": { "resolve": "^1.1.6" } }, "recursive-readdir": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.2.tgz", - "integrity": "sha512-nRCcW9Sj7NuZwa2XvH9co8NPeXUBhZP7CRKJtU+cS6PW9FpCIFoI5ib0NT1ZrbNuPoRy0ylyCaUL8Gih4LSyFg==", + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.3.tgz", + "integrity": "sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA==", "requires": { - "minimatch": "3.0.4" + "minimatch": "^3.0.5" } }, "regenerate": { @@ -24491,87 +21378,60 @@ "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==" }, "regenerate-unicode-properties": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz", - "integrity": "sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA==", + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz", + "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==", "requires": { - "regenerate": "^1.4.0" + "regenerate": "^1.4.2" } }, "regenerator-runtime": { - "version": "0.13.7", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", - "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==" + "version": "0.13.10", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.10.tgz", + "integrity": "sha512-KepLsg4dU12hryUO7bp/axHAKvwGOCV0sGloQtpagJ12ai+ojVDqkeGSiRX1zlq+kjIMZ1t7gpze+26QqtdGqw==" }, "regenerator-transform": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz", - "integrity": "sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==", + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.0.tgz", + "integrity": "sha512-LsrGtPmbYg19bcPHwdtmXwbW+TqNvtY4riE3P83foeHRroMbH6/2ddFBfab3t7kbzc7v7p4wbkIecHImqt0QNg==", "requires": { "@babel/runtime": "^7.8.4" } }, - "regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", - "requires": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - } - }, - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, "regexp.prototype.flags": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz", - "integrity": "sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA==", + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", + "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", "requires": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3" + "define-properties": "^1.1.3", + "functions-have-names": "^1.2.2" } }, "regexpp": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz", - "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==" + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==" }, "regexpu-core": { - "version": "4.7.1", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.1.tgz", - "integrity": "sha512-ywH2VUraA44DZQuRKzARmw6S66mr48pQVva4LBeRhcOltJ6hExvWly5ZjFLYo67xbIxb6W1q4bAGtgfEl20zfQ==", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.2.1.tgz", + "integrity": "sha512-HrnlNtpvqP1Xkb28tMhBUO2EbyUHdQlsnlAhzWcwHy8WJR53UWr7/MAvqrsQKMbV4qdpv03oTMG8iIhfsPFktQ==", "requires": { - "regenerate": "^1.4.0", - "regenerate-unicode-properties": "^8.2.0", - "regjsgen": "^0.5.1", - "regjsparser": "^0.6.4", - "unicode-match-property-ecmascript": "^1.0.4", - "unicode-match-property-value-ecmascript": "^1.2.0" + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.1.0", + "regjsgen": "^0.7.1", + "regjsparser": "^0.9.1", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.0.0" } }, "registry-auth-token": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.1.tgz", - "integrity": "sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw==", + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.2.tgz", + "integrity": "sha512-PC5ZysNb42zpFME6D/XlIgtNGdTl8bBOCw90xQLVMpzuuubJKYDWFAEuUNc+Cn8Z8724tg2SDhDRrkVEsqfDMg==", "requires": { - "rc": "^1.2.8" + "rc": "1.2.8" } }, "registry-url": { @@ -24583,14 +21443,14 @@ } }, "regjsgen": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.2.tgz", - "integrity": "sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==" + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.7.1.tgz", + "integrity": "sha512-RAt+8H2ZEzHeYWxZ3H2z6tF18zyyOnlcdaafLrm21Bguj7uZy6ULibiAFdXEtKQY4Sy7wDTwDiOazasMLc4KPA==" }, "regjsparser": { - "version": "0.6.9", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.9.tgz", - "integrity": "sha512-ZqbNRz1SNjLAiYuwY0zoXW8Ne675IX5q+YHioAGbCw4X96Mjl2+dcX9B2ciaeyYjViDAfvIjFpQjJgLttTEERQ==", + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", + "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", "requires": { "jsesc": "~0.5.0" }, @@ -24598,7 +21458,7 @@ "jsesc": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=" + "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==" } } }, @@ -24618,79 +21478,17 @@ "rehype-parse": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/rehype-parse/-/rehype-parse-7.0.1.tgz", - "integrity": "sha512-fOiR9a9xH+Le19i4fGzIEowAbwG7idy2Jzs4mOrFWBSJ0sNUgy0ev871dwWnbOo371SjgjG4pwzrbgSVrKxecw==", - "requires": { - "hast-util-from-parse5": "^6.0.0", - "parse5": "^6.0.0" - } - }, - "relateurl": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", - "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=" - }, - "remark-admonitions": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/remark-admonitions/-/remark-admonitions-1.2.1.tgz", - "integrity": "sha512-Ji6p68VDvD+H1oS95Fdx9Ar5WA2wcDA4kwrrhVU7fGctC6+d3uiMICu7w7/2Xld+lnU7/gi+432+rRbup5S8ow==", - "requires": { - "rehype-parse": "^6.0.2", - "unified": "^8.4.2", - "unist-util-visit": "^2.0.1" - }, - "dependencies": { - "hast-util-from-parse5": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-5.0.3.tgz", - "integrity": "sha512-gOc8UB99F6eWVWFtM9jUikjN7QkWxB3nY0df5Z0Zq1/Nkwl5V4hAAsl0tmwlgWl/1shlTF8DnNYLO8X6wRV9pA==", - "requires": { - "ccount": "^1.0.3", - "hastscript": "^5.0.0", - "property-information": "^5.0.0", - "web-namespaces": "^1.1.2", - "xtend": "^4.0.1" - } - }, - "hastscript": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-5.1.2.tgz", - "integrity": "sha512-WlztFuK+Lrvi3EggsqOkQ52rKbxkXL3RwB6t5lwoa8QLMemoWfBuL43eDrwOamJyR7uKQKdmKYaBH1NZBiIRrQ==", - "requires": { - "comma-separated-tokens": "^1.0.0", - "hast-util-parse-selector": "^2.0.0", - "property-information": "^5.0.0", - "space-separated-tokens": "^1.0.0" - } - }, - "parse5": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz", - "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==" - }, - "rehype-parse": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/rehype-parse/-/rehype-parse-6.0.2.tgz", - "integrity": "sha512-0S3CpvpTAgGmnz8kiCyFLGuW5yA4OQhyNTm/nwPopZ7+PI11WnGl1TTWTGv/2hPEe/g2jRLlhVVSsoDH8waRug==", - "requires": { - "hast-util-from-parse5": "^5.0.0", - "parse5": "^5.0.0", - "xtend": "^4.0.0" - } - }, - "unified": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/unified/-/unified-8.4.2.tgz", - "integrity": "sha512-JCrmN13jI4+h9UAyKEoGcDZV+i1E7BLFuG7OsaDvTXI5P0qhHX+vZO/kOhz9jn8HGENDKbwSeB0nVOg4gVStGA==", - "requires": { - "bail": "^1.0.0", - "extend": "^3.0.0", - "is-plain-obj": "^2.0.0", - "trough": "^1.0.0", - "vfile": "^4.0.0" - } - } + "integrity": "sha512-fOiR9a9xH+Le19i4fGzIEowAbwG7idy2Jzs4mOrFWBSJ0sNUgy0ev871dwWnbOo371SjgjG4pwzrbgSVrKxecw==", + "requires": { + "hast-util-from-parse5": "^6.0.0", + "parse5": "^6.0.0" } }, + "relateurl": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", + "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==" + }, "remark-emoji": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/remark-emoji/-/remark-emoji-2.2.0.tgz", @@ -24776,6 +21574,11 @@ "version": "5.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==" } } }, @@ -24810,77 +21613,80 @@ "mdast-squeeze-paragraphs": "^4.0.0" } }, - "remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=" - }, "renderkid": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.5.tgz", - "integrity": "sha512-ccqoLg+HLOHq1vdfYNm4TBeaCDIi1FLt3wGojTDSvdewUv65oTmI3cnT2E4hRjl1gzKZIPK+KZrXzlUYKnR+vQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-3.0.0.tgz", + "integrity": "sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==", "requires": { - "css-select": "^2.0.2", - "dom-converter": "^0.2", - "htmlparser2": "^3.10.1", - "lodash": "^4.17.20", - "strip-ansi": "^3.0.0" + "css-select": "^4.1.3", + "dom-converter": "^0.2.0", + "htmlparser2": "^6.1.0", + "lodash": "^4.17.21", + "strip-ansi": "^6.0.1" }, "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" - }, "css-select": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz", - "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", + "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", "requires": { "boolbase": "^1.0.0", - "css-what": "^3.2.1", - "domutils": "^1.7.0", - "nth-check": "^1.0.2" + "css-what": "^6.0.1", + "domhandler": "^4.3.1", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" + } + }, + "dom-serializer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" } }, - "css-what": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.4.2.tgz", - "integrity": "sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==" + "domhandler": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "requires": { + "domelementtype": "^2.2.0" + } }, "domutils": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", - "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", "requires": { - "dom-serializer": "0", - "domelementtype": "1" + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" } }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==" + }, + "htmlparser2": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", + "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", "requires": { - "ansi-regex": "^2.0.0" + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0", + "domutils": "^2.5.2", + "entities": "^2.0.0" } } } }, - "repeat-element": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", - "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==" - }, "repeat-string": { "version": "1.6.1", "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" + "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==" }, "require-from-string": { "version": "2.0.2", @@ -24890,40 +21696,21 @@ "require-like": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/require-like/-/require-like-0.1.2.tgz", - "integrity": "sha1-rW8wwTvs15cBDEaK+ndcDAprR/o=" - }, - "require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" + "integrity": "sha512-oyrU88skkMtDdauHDuKVrgR+zuItqr6/c//FXzvmxRGMexSDc6hNvJInGW3LL46n+8b50RykrvwSUIIQH2LQ5A==" }, "requires-port": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=" + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==" }, "resolve": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", - "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", - "requires": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" - } - }, - "resolve-cwd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz", - "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", "requires": { - "resolve-from": "^3.0.0" - }, - "dependencies": { - "resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=" - } + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" } }, "resolve-from": { @@ -24936,44 +21723,24 @@ "resolved": "https://registry.npmjs.org/resolve-pathname/-/resolve-pathname-3.0.0.tgz", "integrity": "sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng==" }, - "resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=" - }, "responselike": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", - "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", + "integrity": "sha512-/Fpe5guzJk1gPqdJLJR5u7eG/gNY4nImjbRDaVWVMRhne55TCmj2i9Q+54PBRfatRC8v/rIiv9BN0pMd9OV5EQ==", "requires": { "lowercase-keys": "^1.0.0" } }, - "ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==" - }, "retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", - "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=" + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==" }, "reusify": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==" }, - "rgb-regex": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/rgb-regex/-/rgb-regex-1.0.1.tgz", - "integrity": "sha1-wODWiC3w4jviVKR16O3UGRX+rrE=" - }, - "rgba-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/rgba-regex/-/rgba-regex-1.0.0.tgz", - "integrity": "sha1-QzdOLiyglosO8VI0YLfXMP8i7rM=" - }, "rimraf": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", @@ -24983,19 +21750,18 @@ } }, "rtl-detect": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/rtl-detect/-/rtl-detect-1.0.3.tgz", - "integrity": "sha512-2sMcZO60tL9YDEFe24gqddg3hJ+xSmJFN8IExcQUxeHxQzydQrN6GHPL+yAWgzItXSI7es53hcZC9pJneuZDKA==" + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/rtl-detect/-/rtl-detect-1.0.4.tgz", + "integrity": "sha512-EBR4I2VDSSYr7PkBmFy04uhycIpDKp+21p/jARYXlCSjQksTBQcJ0HFUPOO79EPPH5JS6VAhiIQbycf0O3JAxQ==" }, "rtlcss": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/rtlcss/-/rtlcss-3.1.2.tgz", - "integrity": "sha512-b04YSX37siupPOWUEguEBReWX2w4QT89C0PI9g2JzZycbq7zrgPmTr1DA1pizSWpKRFdCjjnrx/SSvU4fOHmGg==", + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/rtlcss/-/rtlcss-3.5.0.tgz", + "integrity": "sha512-wzgMaMFHQTnyi9YOwsx9LjOxYXJPzS8sYnFaKm6R5ysvTkwzHiB0vxnbHwchHQT65PTdBjDG21/kQBWI7q9O7A==", "requires": { - "chalk": "^4.1.0", "find-up": "^5.0.0", - "mkdirp": "^1.0.4", - "postcss": "^8.2.4", + "picocolors": "^1.0.0", + "postcss": "^8.3.11", "strip-json-comments": "^3.1.1" }, "dependencies": { @@ -25016,6 +21782,14 @@ "p-locate": "^5.0.0" } }, + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "requires": { + "yocto-queue": "^0.1.0" + } + }, "p-locate": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", @@ -25035,31 +21809,26 @@ } }, "rxjs": { - "version": "6.6.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", - "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.0.tgz", + "integrity": "sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg==", "requires": { - "tslib": "^1.9.0" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - } + "tslib": "^2.1.0" } }, "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" }, - "safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "safe-regex-test": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", + "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", "requires": { - "ret": "~0.1.10" + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "is-regex": "^1.1.4" } }, "safer-buffer": { @@ -25100,29 +21869,23 @@ "kind-of": "^6.0.0" } }, - "select": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/select/-/select-1.1.2.tgz", - "integrity": "sha1-DnNQrN7ICxEIUoeG7B1EGNEbOW0=", - "optional": true - }, "select-hose": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", - "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=" + "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==" }, "selfsigned": { - "version": "1.10.11", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.11.tgz", - "integrity": "sha512-aVmbPOfViZqOZPgRBT0+3u4yZFHpmnIghLMlAcb5/xhp5ZtB/RVnKhz5vl2M32CLXAqR4kha9zfhNg0Lf/sxKA==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.1.1.tgz", + "integrity": "sha512-GSL3aowiF7wa/WtSFwnUrludWFoNhftq8bUkH9pkzjpN2XSPOAYEgg6e0sS9s0rZwgJzJiQRPU18A6clnoW5wQ==", "requires": { - "node-forge": "^0.10.0" + "node-forge": "^1" } }, "semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", "requires": { "lru-cache": "^6.0.0" } @@ -25143,23 +21906,23 @@ } }, "send": { - "version": "0.17.1", - "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", - "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", "requires": { "debug": "2.6.9", - "depd": "~1.1.2", - "destroy": "~1.0.4", + "depd": "2.0.0", + "destroy": "1.2.0", "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "etag": "~1.8.1", "fresh": "0.5.2", - "http-errors": "~1.7.2", + "http-errors": "2.0.0", "mime": "1.6.0", - "ms": "2.1.1", - "on-finished": "~2.3.0", + "ms": "2.1.3", + "on-finished": "2.4.1", "range-parser": "~1.2.1", - "statuses": "~1.5.0" + "statuses": "2.0.1" }, "dependencies": { "debug": { @@ -25173,21 +21936,21 @@ "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" } } }, "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" } } }, "serialize-javascript": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz", - "integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", + "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", "requires": { "randombytes": "^2.1.0" } @@ -25207,15 +21970,10 @@ "range-parser": "1.2.0" }, "dependencies": { - "bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" - }, "content-disposition": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", - "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=" + "integrity": "sha512-kRGRZw3bLlFISDBgwTSA1TMBFN6J6GWDeubmDE3AF+3+yXL8hTWv8r5rkLbqYXY4RjPk/EzHnClI3zQf1cFmHA==" }, "mime-db": { "version": "1.33.0", @@ -25230,6 +21988,14 @@ "mime-db": "~1.33.0" } }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "requires": { + "brace-expansion": "^1.1.7" + } + }, "path-to-regexp": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-2.2.1.tgz", @@ -25238,14 +22004,14 @@ "range-parser": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", - "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=" + "integrity": "sha512-kA5WQoNVo4t9lNx2kQNFCxKeBl5IbbSNBl1M/tLkw9WCn+hxNBAW5Qh8gdhs63CJnhjJ2zQWFoqPJP2sK1AV5A==" } } }, "serve-index": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", + "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", "requires": { "accepts": "~1.3.4", "batch": "0.6.1", @@ -25264,10 +22030,15 @@ "ms": "2.0.0" } }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==" + }, "http-errors": { "version": "1.6.3", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", "requires": { "depd": "~1.1.2", "inherits": "2.0.3", @@ -25278,56 +22049,45 @@ "inherits": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==" }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, "setprototypeof": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==" } } }, "serve-static": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", - "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", "requires": { "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "parseurl": "~1.3.3", - "send": "0.17.1" - } - }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" - }, - "set-value": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", - "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", - "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" + "send": "0.18.0" } }, "setimmediate": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==" }, "setprototypeof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", - "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" }, "shallow-clone": { "version": "3.0.1", @@ -25337,6 +22097,11 @@ "kind-of": "^6.0.2" } }, + "shallowequal": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz", + "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==" + }, "shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -25351,14 +22116,14 @@ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" }, "shell-quote": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.2.tgz", - "integrity": "sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg==" + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.4.tgz", + "integrity": "sha512-8o/QEhSSRb1a5i7TFR0iM4G16Z0vYB2OQVs4G3aAFXjn3T6yEx8AZxy1PgDF7I00LZHYA3WxaSYIf5e5sAX8Rw==" }, "shelljs": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.4.tgz", - "integrity": "sha512-7gk3UZ9kOfPLIAbslLzyWeGiEqx9e3rxwZM0KE6EL8GlGwjym9Mrlx5/p33bWTu9YG6vcS4MBxYZDHYr5lr8BQ==", + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", + "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", "requires": { "glob": "^7.0.0", "interpret": "^1.0.0", @@ -25376,40 +22141,18 @@ } }, "signal-exit": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", - "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==" - }, - "simple-swizzle": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", - "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", - "requires": { - "is-arrayish": "^0.3.1" - }, - "dependencies": { - "is-arrayish": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", - "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" - } - } + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" }, "sirv": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/sirv/-/sirv-1.0.11.tgz", - "integrity": "sha512-SR36i3/LSWja7AJNRBz4fF/Xjpn7lQFI30tZ434dIy+bitLYSP+ZEenHg36i23V2SGEz+kqjksg0uOGZ5LPiqg==", + "version": "1.0.19", + "resolved": "https://registry.npmjs.org/sirv/-/sirv-1.0.19.tgz", + "integrity": "sha512-JuLThK3TnZG1TAKDwNIqNq6QA2afLOCcm+iE8D1Kj3GA40pSPsxQjjJl0J8X3tsR7T+CP1GavpzLwYkgVLWrZQ==", "requires": { - "@polka/url": "^1.0.0-next.9", - "mime": "^2.3.1", + "@polka/url": "^1.0.0-next.20", + "mrmime": "^1.0.0", "totalist": "^1.0.0" - }, - "dependencies": { - "mime": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz", - "integrity": "sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==" - } } }, "sisteransi": { @@ -25418,20 +22161,20 @@ "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==" }, "sitemap": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/sitemap/-/sitemap-6.4.0.tgz", - "integrity": "sha512-DoPKNc2/apQZTUnfiOONWctwq7s6dZVspxAZe2VPMNtoqNq7HgXRvlRnbIpKjf+8+piQdWncwcy+YhhTGY5USQ==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/sitemap/-/sitemap-7.1.1.tgz", + "integrity": "sha512-mK3aFtjz4VdJN0igpIJrinf3EO8U8mxOPsTBzSsy06UtjZQJ3YY3o3Xa7zSc5nMqcMrRwlChHZ18Kxg0caiPBg==", "requires": { - "@types/node": "^14.14.28", + "@types/node": "^17.0.5", "@types/sax": "^1.2.1", "arg": "^5.0.0", "sax": "^1.2.4" }, "dependencies": { "@types/node": { - "version": "14.14.45", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.45.tgz", - "integrity": "sha512-DssMqTV9UnnoxDWu959sDLZzfvqCF0qDNRjaWeYSui9xkFe61kKo4l1TWNTQONpuXEm+gLMRvdlzvNHBamzmEw==" + "version": "17.0.45", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.45.tgz", + "integrity": "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==" } } }, @@ -25450,224 +22193,40 @@ "is-fullwidth-code-point": "^3.0.0" } }, - "snapdragon": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", - "requires": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - } - }, - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - } - } - }, - "snapdragon-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", - "requires": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "requires": { - "is-descriptor": "^1.0.0" - } - } - } - }, - "snapdragon-util": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", - "requires": { - "kind-of": "^3.2.0" - }, - "dependencies": { - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, "sockjs": { - "version": "0.3.21", - "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.21.tgz", - "integrity": "sha512-DhbPFGpxjc6Z3I+uX07Id5ZO2XwYsWOrYjaSeieES78cq+JaJvVe5q/m1uvjIQhXinhIeCFRH6JgXe+mvVMyXw==", + "version": "0.3.24", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", + "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", "requires": { "faye-websocket": "^0.11.3", - "uuid": "^3.4.0", + "uuid": "^8.3.2", "websocket-driver": "^0.7.4" } }, - "sockjs-client": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.5.1.tgz", - "integrity": "sha512-VnVAb663fosipI/m6pqRXakEOw7nvd7TUgdr3PlR/8V2I95QIdwT8L4nMxhyU8SmDBHYXU1TOElaKOmKLfYzeQ==", - "requires": { - "debug": "^3.2.6", - "eventsource": "^1.0.7", - "faye-websocket": "^0.11.3", - "inherits": "^2.0.4", - "json3": "^3.3.3", - "url-parse": "^1.5.1" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "requires": { - "ms": "^2.1.1" - } - } - } - }, "sort-css-media-queries": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/sort-css-media-queries/-/sort-css-media-queries-1.5.4.tgz", - "integrity": "sha512-YP5W/h4Sid/YP7Lp87ejJ5jP13/Mtqt2vx33XyhO+IAugKlufRPbOrPlIiEUuxmpNBSBd3EeeQpFhdu3RfI2Ag==" - }, - "source-list-map": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", - "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==" + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/sort-css-media-queries/-/sort-css-media-queries-2.1.0.tgz", + "integrity": "sha512-IeWvo8NkNiY2vVYdPa27MCQiR0MN0M80johAYFVxWWXQ44KU84WNxjslwBHmc/7ZL2ccwkM7/e6S5aiKZXm7jA==" }, "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" }, - "source-map-resolve": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", - "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", - "requires": { - "atob": "^2.1.2", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" - } + "source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==" }, "source-map-support": { - "version": "0.5.19", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", - "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", "requires": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - } } }, - "source-map-url": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", - "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==" - }, "space-separated-tokens": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz", @@ -25698,135 +22257,25 @@ "wbuf": "^1.7.3" } }, - "split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", - "requires": { - "extend-shallow": "^3.0.0" - }, - "dependencies": { - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - } - }, - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, "sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" }, "stable": { "version": "0.1.8", "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==" }, - "state-toggle": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/state-toggle/-/state-toggle-1.0.3.tgz", - "integrity": "sha512-d/5Z4/2iiCnHw6Xzghyhb+GcmF89bxwgXG60wjIiZaxnymbyOmI8Hk4VqHXiVVp6u2ysaskFfXg3ekCj4WNftQ==" - }, - "static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", - "requires": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - } - }, - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" - } - } - }, - "statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" + "state-toggle": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/state-toggle/-/state-toggle-1.0.3.tgz", + "integrity": "sha512-d/5Z4/2iiCnHw6Xzghyhb+GcmF89bxwgXG60wjIiZaxnymbyOmI8Hk4VqHXiVVp6u2ysaskFfXg3ekCj4WNftQ==" }, - "std-env": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/std-env/-/std-env-2.3.0.tgz", - "integrity": "sha512-4qT5B45+Kjef2Z6pE0BkskzsH0GO7GrND0wGlTM1ioUe3v0dGYx9ZJH0Aro/YyA8fqQ5EyIKDRjZojJYMFTflw==", - "requires": { - "ci-info": "^3.0.0" - } + "statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" }, "string_decoder": { "version": "1.3.0", @@ -25834,62 +22283,51 @@ "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", "requires": { "safe-buffer": "~5.2.0" - }, - "dependencies": { - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" - } } }, "string-width": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", - "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "requires": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "dependencies": { - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - } + "strip-ansi": "^6.0.1" } }, "string.prototype.matchall": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.4.tgz", - "integrity": "sha512-pknFIWVachNcyqRfaQSeu/FUfpvJTe4uskUSZ9Wc1RijsPuzbZ8TyYT8WCNnntCjUEqQ3vUHMAfVj2+wLAisPQ==", + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.7.tgz", + "integrity": "sha512-f48okCX7JiwVi1NXCVWcFnZgADDC/n2vePlQ/KUCNqCikLLilQvwjMO8+BHVKvgzH0JB0J9LEPgxOGT02RoETg==", "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2", - "has-symbols": "^1.0.1", + "es-abstract": "^1.19.1", + "get-intrinsic": "^1.1.1", + "has-symbols": "^1.0.3", "internal-slot": "^1.0.3", - "regexp.prototype.flags": "^1.3.1", + "regexp.prototype.flags": "^1.4.1", "side-channel": "^1.0.4" } }, "string.prototype.trimend": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", - "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz", + "integrity": "sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==", "requires": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3" + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5" } }, "string.prototype.trimstart": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", - "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz", + "integrity": "sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==", "requires": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3" + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5" } }, "stringify-object": { @@ -25903,22 +22341,17 @@ } }, "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "requires": { - "ansi-regex": "^5.0.0" + "ansi-regex": "^5.0.1" } }, "strip-bom-string": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz", - "integrity": "sha1-5SEekiQ2n7uB1jOi8ABE3IztrZI=" - }, - "strip-eof": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=" + "integrity": "sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==" }, "strip-final-newline": { "version": "2.0.0", @@ -25939,11 +22372,11 @@ } }, "stylehacks": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.0.0.tgz", - "integrity": "sha512-QOWm6XivDLb+fqffTZP8jrmPmPITVChl2KCY2R05nsCWwLi3VGhCdVc3IVGNwd1zzTt1jPd67zIKjpQfxzQZeA==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.1.1.tgz", + "integrity": "sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw==", "requires": { - "browserslist": "^4.16.0", + "browserslist": "^4.21.4", "postcss-selector-parser": "^6.0.4" } }, @@ -25955,149 +22388,98 @@ "has-flag": "^4.0.0" } }, + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==" + }, "svg-parser": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/svg-parser/-/svg-parser-2.0.4.tgz", "integrity": "sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==" }, "svgo": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz", - "integrity": "sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==", - "requires": { - "chalk": "^2.4.1", - "coa": "^2.0.2", - "css-select": "^2.0.0", - "css-select-base-adapter": "^0.1.1", - "css-tree": "1.0.0-alpha.37", - "csso": "^4.0.2", - "js-yaml": "^3.13.1", - "mkdirp": "~0.5.1", - "object.values": "^1.1.0", - "sax": "~1.2.4", - "stable": "^0.1.8", - "unquote": "~1.1.1", - "util.promisify": "~1.0.0" + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz", + "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==", + "requires": { + "@trysound/sax": "0.2.0", + "commander": "^7.2.0", + "css-select": "^4.1.3", + "css-tree": "^1.1.3", + "csso": "^4.2.0", + "picocolors": "^1.0.0", + "stable": "^0.1.8" }, "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + "commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==" }, "css-select": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz", - "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", + "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", "requires": { "boolbase": "^1.0.0", - "css-what": "^3.2.1", - "domutils": "^1.7.0", - "nth-check": "^1.0.2" + "css-what": "^6.0.1", + "domhandler": "^4.3.1", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" } }, - "css-what": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.4.2.tgz", - "integrity": "sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==" - }, - "domutils": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", - "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", + "dom-serializer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", "requires": { - "dom-serializer": "0", - "domelementtype": "1" + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" } }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" - }, - "js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "domhandler": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" + "domelementtype": "^2.2.0" } }, - "mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", "requires": { - "minimist": "^1.2.5" + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" } }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } + "entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==" } } }, "table": { - "version": "6.7.1", - "resolved": "https://registry.npmjs.org/table/-/table-6.7.1.tgz", - "integrity": "sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg==", + "version": "6.8.0", + "resolved": "https://registry.npmjs.org/table/-/table-6.8.0.tgz", + "integrity": "sha512-s/fitrbVeEyHKFa7mFdkuQMWlH1Wgw/yEXMt5xACT4ZpzWFluehAxRtUUQKPuWhaLAWhFcVx6w3oC8VKaUfPGA==", "requires": { "ajv": "^8.0.1", - "lodash.clonedeep": "^4.5.0", "lodash.truncate": "^4.4.2", "slice-ansi": "^4.0.0", - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0" + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" }, "dependencies": { "ajv": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.3.0.tgz", - "integrity": "sha512-RYE7B5An83d7eWnDR8kbdaIFqmKCNsP16ay1hDbJEU+sa0e3H9SebskCt0Uufem6cfAVu7Col6ubcn/W+Sm8/Q==", + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", + "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", "requires": { "fast-deep-equal": "^3.1.1", "json-schema-traverse": "^1.0.0", @@ -26113,80 +22495,92 @@ } }, "tapable": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.0.tgz", - "integrity": "sha512-FBk4IesMV1rBxX2tfiK8RAmogtWn53puLOQlvO8XuwlgxcYbP4mVPS9Ph4aeamSyyVjOl24aYWAuc8U5kCVwMw==" + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==" + }, + "tar": { + "version": "4.4.19", + "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.19.tgz", + "integrity": "sha512-a20gEsvHnWe0ygBY8JbxoM4w3SJdhc7ZAuxkLqh+nvNQN2IOt0B5lLgM490X5Hl8FF0dl0tOf2ewFYAlIFgzVA==", + "requires": { + "chownr": "^1.1.4", + "fs-minipass": "^1.2.7", + "minipass": "^2.9.0", + "minizlib": "^1.3.3", + "mkdirp": "^0.5.5", + "safe-buffer": "^5.2.1", + "yallist": "^3.1.1" + }, + "dependencies": { + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" + } + } }, "terser": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.0.tgz", - "integrity": "sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==", + "version": "5.16.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.16.1.tgz", + "integrity": "sha512-xvQfyfA1ayT0qdK47zskQgRZeWLoOQ8JQ6mIgRGVNwZKdQMU+5FkCBjmv4QjcrTzyZquRw2FVtlJSRUmMKQslw==", "requires": { + "@jridgewell/source-map": "^0.3.2", + "acorn": "^8.5.0", "commander": "^2.20.0", - "source-map": "~0.6.1", - "source-map-support": "~0.5.12" + "source-map-support": "~0.5.20" }, "dependencies": { + "acorn": { + "version": "8.8.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz", + "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==" + }, "commander": { "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" } } }, "terser-webpack-plugin": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.1.2.tgz", - "integrity": "sha512-6QhDaAiVHIQr5Ab3XUWZyDmrIPCHMiqJVljMF91YKyqwKkL5QHnYMkrMBy96v9Z7ev1hGhSEw1HQZc2p/s5Z8Q==", + "version": "5.3.6", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.6.tgz", + "integrity": "sha512-kfLFk+PoLUQIbLmB1+PZDMRSZS99Mp+/MHqDNmMA6tOItzRt+Npe3E+fsMs5mfcM0wCtrrdU387UnV+vnSffXQ==", "requires": { - "jest-worker": "^26.6.2", - "p-limit": "^3.1.0", - "schema-utils": "^3.0.0", - "serialize-javascript": "^5.0.1", - "source-map": "^0.6.1", - "terser": "^5.7.0" + "@jridgewell/trace-mapping": "^0.3.14", + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.0", + "terser": "^5.14.1" }, "dependencies": { - "commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + "jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "requires": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + } }, "schema-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", - "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", "requires": { - "@types/json-schema": "^7.0.6", + "@types/json-schema": "^7.0.8", "ajv": "^6.12.5", "ajv-keywords": "^3.5.2" } }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "terser": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.7.0.tgz", - "integrity": "sha512-HP5/9hp2UaZt5fYkuhNBR8YyRcT8juw8+uFbAme53iN9hblvKnLUTKkmwJG6ocWpIKf8UK4DoeWG4ty0J6S6/g==", + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "requires": { - "commander": "^2.20.0", - "source-map": "~0.7.2", - "source-map-support": "~0.5.19" - }, - "dependencies": { - "source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==" - } + "has-flag": "^4.0.0" } } } @@ -26194,28 +22588,17 @@ "text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=" + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==" }, "thunky": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==" }, - "timsort": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz", - "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=" - }, - "tiny-emitter": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.1.0.tgz", - "integrity": "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==", - "optional": true - }, "tiny-invariant": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.1.0.tgz", - "integrity": "sha512-ytxQvrb1cPc9WBEI/HSeYYoGD0kWnGEOR8RY6KomWLBVhqz0RgTwVO9dLrGz7dC+nN9llyI7OKAgRq8Vq4ZBSw==" + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.1.tgz", + "integrity": "sha512-AD5ih2NlSssTCwsMznbvwMZpJ1cbhkGd2uueNxzv2jDlEeZdU04JQfRnggJQ8DrcVBGjAsCKwFBbDlVNtEMlzw==" }, "tiny-warning": { "version": "1.0.3", @@ -26225,66 +22608,13 @@ "to-fast-properties": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=" - }, - "to-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==" }, "to-readable-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==" }, - "to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", - "requires": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - } - }, - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, "to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -26294,9 +22624,9 @@ } }, "toidentifier": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", - "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" }, "totalist": { "version": "1.1.0", @@ -26306,12 +22636,12 @@ "tr46": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=" + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" }, "trim": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/trim/-/trim-0.0.1.tgz", - "integrity": "sha1-WFhUf2spB1fulczMZm+1AITEYN0=" + "integrity": "sha512-YzQV+TZg4AxpKxaTHK3c3D+kRDCGVEE7LemdlQZoQXn0iennk10RsIoY6ikzAqJTc9Xjl9C1/waHom/J86ziAQ==" }, "trim-trailing-lines": { "version": "1.1.4", @@ -26323,15 +22653,10 @@ "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.5.tgz", "integrity": "sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==" }, - "ts-essentials": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/ts-essentials/-/ts-essentials-2.0.12.tgz", - "integrity": "sha512-3IVX4nI6B5cc31/GFFE+i8ey/N2eA0CZDbo6n0yrz0zDX8ZJ8djmU1p+XRz7G3is0F3bB3pu2pAroFdAWQKU3w==" - }, "tslib": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.2.0.tgz", - "integrity": "sha512-gS9GVHRU+RGn5KQM2rllAlR3dU6m7AcpJKdtH8gFvQiC4Otgk98XnmMU+nZenHt/+VhnBPWwgrJsyrdcw6i23w==" + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", + "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==" }, "type-check": { "version": "0.4.0", @@ -26363,19 +22688,25 @@ "is-typedarray": "^1.0.0" } }, + "typescript": { + "version": "4.9.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.4.tgz", + "integrity": "sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg==", + "peer": true + }, "ua-parser-js": { - "version": "0.7.28", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.28.tgz", - "integrity": "sha512-6Gurc1n//gjp9eQNXjD9O3M/sMwVtN5S8Lv9bvOYBfKfDNiIIhqiyi01vMBO45u4zkDE420w/e0se7Vs+sIg+g==" + "version": "0.7.32", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.32.tgz", + "integrity": "sha512-f9BESNVhzlhEFf2CHMSj40NWOjYPl1YKYbrvIr/hFTDEmLq7SRbWvm7FcdcpCYT95zrOhC7gZSxjdnnTpBcwVw==" }, "unbox-primitive": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", - "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", "requires": { - "function-bind": "^1.1.1", - "has-bigints": "^1.0.1", - "has-symbols": "^1.0.2", + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", "which-boxed-primitive": "^1.0.2" } }, @@ -26389,28 +22720,28 @@ } }, "unicode-canonical-property-names-ecmascript": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", - "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", + "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==" }, "unicode-match-property-ecmascript": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz", - "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", "requires": { - "unicode-canonical-property-names-ecmascript": "^1.0.4", - "unicode-property-aliases-ecmascript": "^1.0.4" + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" } }, "unicode-match-property-value-ecmascript": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz", - "integrity": "sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ==" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz", + "integrity": "sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw==" }, "unicode-property-aliases-ecmascript": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz", - "integrity": "sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==" + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", + "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==" }, "unified": { "version": "9.2.0", @@ -26425,27 +22756,6 @@ "vfile": "^4.0.0" } }, - "union-value": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", - "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", - "requires": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^2.0.1" - } - }, - "uniq": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", - "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=" - }, - "uniqs": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz", - "integrity": "sha1-/+3ks2slKQaW5uFl1KWe25mOawI=" - }, "unique-string": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", @@ -26533,54 +22843,17 @@ "unpipe": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==" }, - "unquote": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz", - "integrity": "sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ=" - }, - "unset-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "update-browserslist-db": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", + "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==", "requires": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - }, - "dependencies": { - "has-value": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", - "requires": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "dependencies": { - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "requires": { - "isarray": "1.0.0" - } - } - } - }, - "has-values": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=" - } + "escalade": "^3.1.1", + "picocolors": "^1.0.0" } }, - "upath": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", - "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==" - }, "update-notifier": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-5.1.0.tgz", @@ -26617,27 +22890,6 @@ } } }, - "urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=" - }, - "url": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", - "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", - "requires": { - "punycode": "1.3.2", - "querystring": "0.2.0" - }, - "dependencies": { - "punycode": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=" - } - } - }, "url-loader": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-4.1.1.tgz", @@ -26649,81 +22901,54 @@ }, "dependencies": { "schema-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", - "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", "requires": { - "@types/json-schema": "^7.0.6", + "@types/json-schema": "^7.0.8", "ajv": "^6.12.5", "ajv-keywords": "^3.5.2" } } } }, - "url-parse": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.1.tgz", - "integrity": "sha512-HOfCOUJt7iSYzEx/UqgtwKRMC6EU91NFhsCHMv9oM03VJcVo2Qrp8T8kI9D7amFf1cu+/3CEhgb3rF9zL7k85Q==", - "requires": { - "querystringify": "^2.1.1", - "requires-port": "^1.0.0" - } - }, "url-parse-lax": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", - "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", + "integrity": "sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ==", "requires": { "prepend-http": "^2.0.0" } }, - "use": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==" - }, "use-composed-ref": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/use-composed-ref/-/use-composed-ref-1.1.0.tgz", - "integrity": "sha512-my1lNHGWsSDAhhVAT4MKs6IjBUtG6ZG11uUqexPH9PptiIZDQOzaF4f5tEbJ2+7qvNbtXNBbU3SfmN+fXlWDhg==", - "requires": { - "ts-essentials": "^2.0.3" - } + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/use-composed-ref/-/use-composed-ref-1.3.0.tgz", + "integrity": "sha512-GLMG0Jc/jiKov/3Ulid1wbv3r54K9HlMW29IWcDFPEqFkSO2nS0MuefWgMJpeHQ9YJeXDL3ZUF+P3jdXlZX/cQ==", + "requires": {} }, "use-isomorphic-layout-effect": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.1.1.tgz", - "integrity": "sha512-L7Evj8FGcwo/wpbv/qvSfrkHFtOpCzvM5yl2KVyDJoylVuSvzphiiasmjgQPttIGBAy2WKiBNR98q8w7PiNgKQ==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.1.2.tgz", + "integrity": "sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA==", "requires": {} }, "use-latest": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/use-latest/-/use-latest-1.2.0.tgz", - "integrity": "sha512-d2TEuG6nSLKQLAfW3By8mKr8HurOlTkul0sOpxbClIv4SQ4iOd7BYr7VIzdbktUCnv7dua/60xzd8igMU6jmyw==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/use-latest/-/use-latest-1.2.1.tgz", + "integrity": "sha512-xA+AVm/Wlg3e2P/JiItTziwS7FK92LWrDB0p+hgXloIMuVCeJJ8v6f0eeHyPZaJrM+usM1FkFfbNCrJGs8A/zw==", "requires": { - "use-isomorphic-layout-effect": "^1.0.0" + "use-isomorphic-layout-effect": "^1.1.1" } }, "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" - }, - "util.promisify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.1.tgz", - "integrity": "sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==", - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.2", - "has-symbols": "^1.0.1", - "object.getownpropertydescriptors": "^2.1.0" - } + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" }, "utila": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", - "integrity": "sha1-ihagXURWV6Oupe7MWxKk+lN5dyw=" + "integrity": "sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==" }, "utility-types": { "version": "3.10.0", @@ -26733,12 +22958,12 @@ "utils-merge": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==" }, "uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" }, "v8-compile-cache": { "version": "2.3.0", @@ -26753,12 +22978,7 @@ "vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" - }, - "vendors": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.4.tgz", - "integrity": "sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w==" + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==" }, "vfile": { "version": "4.2.1", @@ -26786,21 +23006,21 @@ } }, "wait-on": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/wait-on/-/wait-on-5.3.0.tgz", - "integrity": "sha512-DwrHrnTK+/0QFaB9a8Ol5Lna3k7WvUR4jzSKmz0YaPBpuN2sACyiPVKVfj6ejnjcajAcvn3wlbTyMIn9AZouOg==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/wait-on/-/wait-on-6.0.1.tgz", + "integrity": "sha512-zht+KASY3usTY5u2LgaNqn/Cd8MukxLGjdcZxT2ns5QzDmTFc4XoWBgC+C/na+sMRZTuVygQoMYwdcVjHnYIVw==", "requires": { - "axios": "^0.21.1", - "joi": "^17.3.0", + "axios": "^0.25.0", + "joi": "^17.6.0", "lodash": "^4.17.21", "minimist": "^1.2.5", - "rxjs": "^6.6.3" + "rxjs": "^7.5.4" } }, "watchpack": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.1.1.tgz", - "integrity": "sha512-Oo7LXCmc1eE1AjyuSBmtC3+Wy4HcV8PxWh2kP6fOl8yTlNS7r0K9l1ao2lrrUza7V39Y3D/BbJgY8VeSlc5JKw==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", + "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", "requires": { "glob-to-regexp": "^0.4.1", "graceful-fs": "^4.1.2" @@ -26822,83 +23042,76 @@ "webidl-conversions": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=" + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" }, "webpack": { - "version": "5.37.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.37.0.tgz", - "integrity": "sha512-yvdhgcI6QkQkDe1hINBAJ1UNevqNGTVaCkD2SSJcB8rcrNNl922RI8i2DXUAuNfANoxwsiXXEA4ZPZI9q2oGLA==", - "requires": { - "@types/eslint-scope": "^3.7.0", - "@types/estree": "^0.0.47", - "@webassemblyjs/ast": "1.11.0", - "@webassemblyjs/wasm-edit": "1.11.0", - "@webassemblyjs/wasm-parser": "1.11.0", - "acorn": "^8.2.1", + "version": "5.74.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.74.0.tgz", + "integrity": "sha512-A2InDwnhhGN4LYctJj6M1JEaGL7Luj6LOmyBHjcI8529cm5p6VXiTIW2sn6ffvEAKmveLzvu4jrihwXtPojlAA==", + "requires": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^0.0.51", + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/wasm-edit": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "acorn": "^8.7.1", + "acorn-import-assertions": "^1.7.6", "browserslist": "^4.14.5", "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.8.0", - "es-module-lexer": "^0.4.0", - "eslint-scope": "^5.1.1", + "enhanced-resolve": "^5.10.0", + "es-module-lexer": "^0.9.0", + "eslint-scope": "5.1.1", "events": "^3.2.0", "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.4", - "json-parse-better-errors": "^1.0.2", + "graceful-fs": "^4.2.9", + "json-parse-even-better-errors": "^2.3.1", "loader-runner": "^4.2.0", "mime-types": "^2.1.27", "neo-async": "^2.6.2", - "schema-utils": "^3.0.0", + "schema-utils": "^3.1.0", "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.1.1", - "watchpack": "^2.0.0", - "webpack-sources": "^2.1.1" + "terser-webpack-plugin": "^5.1.3", + "watchpack": "^2.4.0", + "webpack-sources": "^3.2.3" }, "dependencies": { "acorn": { - "version": "8.2.4", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.2.4.tgz", - "integrity": "sha512-Ibt84YwBDDA890eDiDCEqcbwvHlBvzzDkU2cGBBDDI1QWT12jTiXIOn2CIw5KK4i6N5Z2HUxwYjzriDyqaqqZg==" + "version": "8.8.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz", + "integrity": "sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==" }, - "events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==" + "acorn-import-assertions": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", + "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", + "requires": {} }, "schema-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", - "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", "requires": { - "@types/json-schema": "^7.0.6", + "@types/json-schema": "^7.0.8", "ajv": "^6.12.5", "ajv-keywords": "^3.5.2" } }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, "webpack-sources": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-2.2.0.tgz", - "integrity": "sha512-bQsA24JLwcnWGArOKUxYKhX3Mz/nK1Xf6hxullKERyktjNMC4x8koOeaDNTA2fEJ09BdWLbM/iTW0ithREUP0w==", - "requires": { - "source-list-map": "^2.0.1", - "source-map": "^0.6.1" - } + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==" } } }, "webpack-bundle-analyzer": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.4.1.tgz", - "integrity": "sha512-j5m7WgytCkiVBoOGavzNokBOqxe6Mma13X1asfVYtKWM3wxBiRRu1u1iG0Iol5+qp9WgyhkMmBAcvjEfJ2bdDw==", + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.6.1.tgz", + "integrity": "sha512-oKz9Oz9j3rUciLNfpGFjOb49/jEpXNmWdVH8Ls//zNcnLlQdTGXQQMsBbb/gR7Zl8WNLxVCq+0Hqbx3zv6twBw==", "requires": { "acorn": "^8.0.4", "acorn-walk": "^8.0.0", "chalk": "^4.1.0", - "commander": "^6.2.0", + "commander": "^7.2.0", "gzip-size": "^6.0.0", "lodash": "^4.17.20", "opener": "^1.5.2", @@ -26907,462 +23120,170 @@ }, "dependencies": { "acorn": { - "version": "8.2.4", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.2.4.tgz", - "integrity": "sha512-Ibt84YwBDDA890eDiDCEqcbwvHlBvzzDkU2cGBBDDI1QWT12jTiXIOn2CIw5KK4i6N5Z2HUxwYjzriDyqaqqZg==" + "version": "8.8.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz", + "integrity": "sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==" }, "commander": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", - "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==" - }, - "gzip-size": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz", - "integrity": "sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==", - "requires": { - "duplexer": "^0.1.2" - } + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==" } } }, "webpack-dev-middleware": { - "version": "3.7.3", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.7.3.tgz", - "integrity": "sha512-djelc/zGiz9nZj/U7PTBi2ViorGJXEWo/3ltkPbDyxCXhhEXkW0ce99falaok4TPj+AsxLiXJR0EBOb0zh9fKQ==", + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz", + "integrity": "sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA==", "requires": { - "memory-fs": "^0.4.1", - "mime": "^2.4.4", - "mkdirp": "^0.5.1", + "colorette": "^2.0.10", + "memfs": "^3.4.3", + "mime-types": "^2.1.31", "range-parser": "^1.2.1", - "webpack-log": "^2.0.0" + "schema-utils": "^4.0.0" }, "dependencies": { - "mime": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz", - "integrity": "sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==" + "ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "requires": { + "fast-deep-equal": "^3.1.3" + } + }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" }, - "mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "schema-utils": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", + "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", "requires": { - "minimist": "^1.2.5" + "@types/json-schema": "^7.0.9", + "ajv": "^8.8.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.0.0" } } } }, "webpack-dev-server": { - "version": "3.11.2", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.11.2.tgz", - "integrity": "sha512-A80BkuHRQfCiNtGBS1EMf2ChTUs0x+B3wGDFmOeT4rmJOHhHTCH2naNxIHhmkr0/UillP4U3yeIyv1pNp+QDLQ==", - "requires": { - "ansi-html": "0.0.7", - "bonjour": "^3.5.0", - "chokidar": "^2.1.8", + "version": "4.11.1", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.11.1.tgz", + "integrity": "sha512-lILVz9tAUy1zGFwieuaQtYiadImb5M3d+H+L1zDYalYoDl0cksAB1UNyuE5MMWJrG6zR1tXkCP2fitl7yoUJiw==", + "requires": { + "@types/bonjour": "^3.5.9", + "@types/connect-history-api-fallback": "^1.3.5", + "@types/express": "^4.17.13", + "@types/serve-index": "^1.9.1", + "@types/serve-static": "^1.13.10", + "@types/sockjs": "^0.3.33", + "@types/ws": "^8.5.1", + "ansi-html-community": "^0.0.8", + "bonjour-service": "^1.0.11", + "chokidar": "^3.5.3", + "colorette": "^2.0.10", "compression": "^1.7.4", - "connect-history-api-fallback": "^1.6.0", - "debug": "^4.1.1", - "del": "^4.1.1", - "express": "^4.17.1", - "html-entities": "^1.3.1", - "http-proxy-middleware": "0.19.1", - "import-local": "^2.0.0", - "internal-ip": "^4.3.0", - "ip": "^1.1.5", - "is-absolute-url": "^3.0.3", - "killable": "^1.0.1", - "loglevel": "^1.6.8", - "opn": "^5.5.0", - "p-retry": "^3.0.1", - "portfinder": "^1.0.26", - "schema-utils": "^1.0.0", - "selfsigned": "^1.10.8", - "semver": "^6.3.0", + "connect-history-api-fallback": "^2.0.0", + "default-gateway": "^6.0.3", + "express": "^4.17.3", + "graceful-fs": "^4.2.6", + "html-entities": "^2.3.2", + "http-proxy-middleware": "^2.0.3", + "ipaddr.js": "^2.0.1", + "open": "^8.0.9", + "p-retry": "^4.5.0", + "rimraf": "^3.0.2", + "schema-utils": "^4.0.0", + "selfsigned": "^2.1.1", "serve-index": "^1.9.1", - "sockjs": "^0.3.21", - "sockjs-client": "^1.5.0", + "sockjs": "^0.3.24", "spdy": "^4.0.2", - "strip-ansi": "^3.0.1", - "supports-color": "^6.1.0", - "url": "^0.11.0", - "webpack-dev-middleware": "^3.7.2", - "webpack-log": "^2.0.0", - "ws": "^6.2.1", - "yargs": "^13.3.2" + "webpack-dev-middleware": "^5.3.1", + "ws": "^8.4.2" }, "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" - }, - "anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "requires": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - }, - "dependencies": { - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "requires": { - "remove-trailing-separator": "^1.0.1" - } - } - } - }, - "array-union": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", - "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", - "requires": { - "array-uniq": "^1.0.1" - } - }, - "binary-extensions": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", - "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==" - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - } - }, - "chokidar": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", - "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", - "requires": { - "anymatch": "^2.0.0", - "async-each": "^1.0.1", - "braces": "^2.3.2", - "fsevents": "^1.2.7", - "glob-parent": "^3.1.0", - "inherits": "^2.0.3", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "normalize-path": "^3.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.2.1", - "upath": "^1.1.1" - } - }, - "del": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/del/-/del-4.1.1.tgz", - "integrity": "sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==", - "requires": { - "@types/glob": "^7.1.1", - "globby": "^6.1.0", - "is-path-cwd": "^2.0.0", - "is-path-in-cwd": "^2.0.0", - "p-map": "^2.0.0", - "pify": "^4.0.1", - "rimraf": "^2.6.3" - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - } - }, - "fsevents": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", - "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", - "optional": true, - "requires": { - "bindings": "^1.5.0", - "nan": "^2.12.1" - } - }, - "glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", - "requires": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - }, - "dependencies": { - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "requires": { - "is-extglob": "^2.1.0" - } - } - } - }, - "globby": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", - "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", - "requires": { - "array-union": "^1.0.1", - "glob": "^7.0.3", - "object-assign": "^4.0.1", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - }, - "dependencies": { - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" - } - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" - }, - "is-binary-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", - "requires": { - "binary-extensions": "^1.0.0" - } - }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" - }, - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "requires": { - "is-plain-object": "^2.0.4" - } - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - }, - "dependencies": { - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - } - } - } - }, - "p-map": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", - "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==" - }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "readdirp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", - "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", "requires": { - "graceful-fs": "^4.1.11", - "micromatch": "^3.1.10", - "readable-stream": "^2.0.2" + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" } }, - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", "requires": { - "glob": "^7.1.3" + "fast-deep-equal": "^3.1.3" } }, - "schema-utils": { + "json-schema-traverse": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", - "requires": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "requires": { - "has-flag": "^3.0.0" - } + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "schema-utils": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", + "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" + "@types/json-schema": "^7.0.9", + "ajv": "^8.8.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.0.0" } }, "ws": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz", - "integrity": "sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==", - "requires": { - "async-limiter": "~1.0.0" - } - } - } - }, - "webpack-log": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/webpack-log/-/webpack-log-2.0.0.tgz", - "integrity": "sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==", - "requires": { - "ansi-colors": "^3.0.0", - "uuid": "^3.3.2" - }, - "dependencies": { - "ansi-colors": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz", - "integrity": "sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==" + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz", + "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==", + "requires": {} } } }, "webpack-merge": { - "version": "5.7.3", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.7.3.tgz", - "integrity": "sha512-6/JUQv0ELQ1igjGDzHkXbVDRxkfA57Zw7PfiupdLFJYrgFqY5ZP8xxbpp2lU3EPwYx89ht5Z/aDkD40hFCm5AA==", + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.8.0.tgz", + "integrity": "sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q==", "requires": { "clone-deep": "^4.0.1", "wildcard": "^2.0.0" } }, - "webpack-sources": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", - "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", - "requires": { - "source-list-map": "^2.0.0", - "source-map": "~0.6.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - } - } - }, "webpackbar": { - "version": "5.0.0-3", - "resolved": "https://registry.npmjs.org/webpackbar/-/webpackbar-5.0.0-3.tgz", - "integrity": "sha512-viW6KCYjMb0NPoDrw2jAmLXU2dEOhRrtku28KmOfeE1vxbfwCYuTbTaMhnkrCZLFAFyY9Q49Z/jzYO80Dw5b8g==", + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/webpackbar/-/webpackbar-5.0.2.tgz", + "integrity": "sha512-BmFJo7veBDgQzfWXl/wwYXr/VFus0614qZ8i9znqcl9fnEdiVkdbi0TedLQ6xAK92HZHDJ0QmyQ0fmuZPAgCYQ==", "requires": { - "ansi-escapes": "^4.3.1", "chalk": "^4.1.0", - "consola": "^2.15.0", - "figures": "^3.2.0", + "consola": "^2.15.3", "pretty-time": "^1.1.0", - "std-env": "^2.2.1", - "text-table": "^0.2.0", - "wrap-ansi": "^7.0.0" + "std-env": "^3.0.1" + }, + "dependencies": { + "std-env": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.3.0.tgz", + "integrity": "sha512-cNNS+VYsXIs5gI6gJipO4qZ8YYT274JHvNnQ1/R/x8Q8mdP0qj0zoMchRXmBNPqp/0eOEhX+3g7g6Fgb7meLIQ==" + } } }, "websocket-driver": { @@ -27383,7 +23304,7 @@ "whatwg-url": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", "requires": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" @@ -27409,11 +23330,6 @@ "is-symbol": "^1.0.3" } }, - "which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" - }, "widest-line": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", @@ -27432,14 +23348,6 @@ "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==" }, - "worker-rpc": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/worker-rpc/-/worker-rpc-0.1.1.tgz", - "integrity": "sha512-P1WjMrUB3qgJNI9jfmpZ/htmBEjFh//6l/5y8SD9hg1Ef5zTTVVoRjTrTEzPrNBQvmhMxkoTsjOXN10GWU7aCg==", - "requires": { - "microevent.ts": "~0.1.1" - } - }, "wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", @@ -27453,7 +23361,7 @@ "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" }, "write-file-atomic": { "version": "3.0.3", @@ -27467,9 +23375,9 @@ } }, "ws": { - "version": "7.4.5", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.5.tgz", - "integrity": "sha512-xzyu3hFvomRfXKH8vOFMU3OguG6oOvhXMo3xsGy3xWExqaM2dxBbVxuD99O7m3ZUFMvvscsZDqxfgMaRr/Nr1g==", + "version": "7.5.9", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", + "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", "requires": {} }, "xdg-basedir": { @@ -27490,11 +23398,6 @@ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" }, - "y18n": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==" - }, "yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", @@ -27505,110 +23408,13 @@ "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==" }, - "yargs": { - "version": "13.3.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", - "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", - "requires": { - "cliui": "^5.0.0", - "find-up": "^3.0.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^3.0.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^13.1.2" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" - }, - "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" - }, - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "requires": { - "locate-path": "^3.0.0" - } - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "requires": { - "p-limit": "^2.0.0" - } - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "requires": { - "ansi-regex": "^4.1.0" - } - } - } - }, - "yargs-parser": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", - "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", + "yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - }, - "dependencies": { - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" - } + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" } }, "yocto-queue": { diff --git a/docs/package.json b/docs/package.json index 12a6ee16d8b831..20404b59e65759 100644 --- a/docs/package.json +++ b/docs/package.json @@ -21,11 +21,11 @@ }, "dependencies": { "@crowdin/cli": "^3.6.1", - "@docusaurus/core": "^2.0.0-beta.0", - "@docusaurus/preset-classic": "^2.0.0-beta.0", - "@docusaurus/theme-search-algolia": "^2.0.0-beta.0", + "@docusaurus/core": "^2.2.0", + "@docusaurus/preset-classic": "^2.2.0", + "@docusaurus/theme-search-algolia": "^2.2.0", "babel-eslint": "^10.1.0", - "clsx": "^1.1.1", + "clsx": "^1.2.1", "eslint": "^7.3.1", "eslint-plugin-react": "^7.20.0", "postcss": "^8.2.13", diff --git a/docs/src/cluster/commitments.md b/docs/src/cluster/commitments.md index 5340c7df6f5c77..6b7edd1c214525 100644 --- a/docs/src/cluster/commitments.md +++ b/docs/src/cluster/commitments.md @@ -1,7 +1,13 @@ --- title: Commitment Status description: "Processed, confirmed, and finalized. Learn the differences between the different commitment statuses on the Solana blockchain." -keywords: processed, confirmed, finalized, stake level, block, blockhash, +keywords: + - processed + - confirmed + - finalized + - stake level + - block + - blockhash --- The [commitment](./../terminology.md#commitment) metric gives clients a standard measure of the network confirmation for the block. Clients can then use this information to derive their own measures of commitment. diff --git a/docs/src/developing/intro/programs.md b/docs/src/developing/intro/programs.md index 7c0eb737f41986..20c5dd9f746c3b 100644 --- a/docs/src/developing/intro/programs.md +++ b/docs/src/developing/intro/programs.md @@ -1,7 +1,6 @@ --- title: What are Solana Programs? description: "A Solana Program, aka smart contract, is the executable code that interprets the instructions on the blockchain. There are two types: Native and on chain." -keywords: "" --- Solana Programs, often referred to as "_smart contracts_" on other blockchains, are the executable code that interprets the instructions sent inside of each transaction on the blockchain. They can be deployed directly into the core of the network as [Native Programs](#native-programs), or published by anyone as [On Chain Programs](#on-chain-programs). Programs are the core building blocks of the network and handle everything from sending tokens between wallets, to accepting votes of a DAOs, to tracking ownership of NFTs. diff --git a/docs/src/developing/intro/rent.md b/docs/src/developing/intro/rent.md index d26f93849c1c02..05cdebb948abf1 100644 --- a/docs/src/developing/intro/rent.md +++ b/docs/src/developing/intro/rent.md @@ -1,7 +1,6 @@ --- title: What is rent? description: "Rent: the small fee Solana accounts incur to store data on the blockchain. Accounts with >2 years of rent are rent exempt and do not pay the periodic fee." -keywords: "" --- The fee every Solana Account to store data on the blockchain is called "_rent_". This _time and space_ based fee is required to keep an account, and its therefore its data, alive on the blockchain since [clusters](../../cluster/overview.md) must actively maintain this data. diff --git a/docs/src/developing/intro/transaction_fees.md b/docs/src/developing/intro/transaction_fees.md new file mode 100644 index 00000000000000..520cfe30431d1c --- /dev/null +++ b/docs/src/developing/intro/transaction_fees.md @@ -0,0 +1,95 @@ +--- +title: Transaction Fees +description: "Transaction fees are the small fees paid to process instructions on the network. These fees are based on computation and an optional prioritization fee." +keywords: + - instruction fee + - processing fee + - storage fee + - low fee blockchain + - gas + - gwei + - cheap network + - affordable blockchain +--- + +The small fees paid to process [instructions](./../../terminology.md#instruction) on the Solana blockchain are known as "_transaction fees_". + +As each transaction (which contains one or more instructions) is sent through the network, it gets processed by the current leader validation-client. Once confirmed as a global state transaction, this _transaction fee_ is paid to the network to help support the economic design of the Solana blockchain. + +> NOTE: Transactions fees are different from the blockchain's data storage fee called [rent](./rent.md) + +### Transaction Fee Calculation + +Currently, the amount of resources consumed by a transaction do not impact fees in any way. This is because the runtime imposes a small cap on the amount of resources that transaction instructions can use, not to mention that the size of transactions is limited as well. So right now, transaction fees are solely determined by the number of signatures that need to be verified in a transaction. The only limit on the number of signatures in a transaction is the max size of transaction itself. Each signature (64 bytes) in a transaction (max 1232 bytes) must reference a unique public key (32 bytes) so a single transaction could contain as many as 12 signatures (not sure why you would do that). The fee per transaction signature can be fetched with the `solana` cli: + +```bash +$ solana fees +Blockhash: 8eULQbYYp67o5tGF2gxACnBCKAE39TetbYYMGTx3iBFc +Lamports per signature: 5000 +Last valid block height: 94236543 +``` + +The `solana` cli `fees` subcommand calls the `getFees` RPC API method to retrieve the above output information, so your application can call that method directly as well: + +```bash +$ curl http://api.mainnet-beta.solana.com -H "Content-Type: application/json" -d ' + {"jsonrpc":"2.0","id":1, "method":"getFees"} +' + +# RESULT (lastValidSlot removed since it's inaccurate) +{ + "jsonrpc": "2.0", + "result": { + "context": { + "slot": 106818885 + }, + "value": { + "blockhash": "78e3YBCMXJBiPD1HpyVtVfFzZFPG6nUycnQcyNMSUQzB", + "feeCalculator": { + "lamportsPerSignature": 5000 + }, + "lastValidBlockHeight": 96137823 + } + }, + "id": 1 +} +``` + +### Fee Determinism + +It's important to keep in mind that fee rates (such as `lamports_per_signature`) are subject to change from block to block (though that hasn't happened in the full history of the `mainnet-beta` cluster). Despite the fact that fees can fluctuate, fees for a transaction can still be calculated deterministically when creating (and before signing) a transaction. This determinism comes from the fact that fees are applied using the rates from the block whose blockhash matches the `recent_blockhash` field in a transaction. Blockhashes can only be referenced by a transaction for a few minutes before they expire. + +Transactions with expired blockhashes will be ignored and dropped by the cluster, so it's important to understand how expiration actually works. Before transactions are added to a block and during block validation, [each transaction's recent blockhash is checked](https://github.com/solana-labs/solana/blob/647aa926673e3df4443d8b3d9e3f759e8ca2c44b/runtime/src/bank.rs#L3482) to ensure it hasn't expired yet. The max age of a transaction's blockhash is only 150 blocks. This means that if no slots are skipped in between, the blockhash for block 100 would be usable by transactions processed in blocks 101 to 252, inclusive (during block 101 the age of block 100 is "0" and during block 252 its age is "150"). However, it's important to remember that slots may be skipped and that age checks use "block height" _not_ "slot height". Since slots are skipped occasionally, the actual age of a blockhash can be a bit longer than 150 slots. At the time of writing, slot times are about 500ms and skip rate is about 5% so the expected lifetime of a transaction which uses the most recent blockhash is about 1min 19s. + +### Fee Collection + +Transactions are required to have at least one account which has signed the transaction and is writable. Writable signer accounts are serialized first in the list of transaction accounts and the first of these accounts is always used as the "fee payer". + +Before any transaction instructions are processed, the fee payer account balance will be deducted to pay for transaction fees. If the fee payer balance is not sufficient to cover transaction fees, the transaction will be dropped by the cluster. If the balance was sufficient, the fees will be deducted whether the transaction is processed successfully or not. In fact, if any of the transaction instructions return an error or violate runtime restrictions, all account changes _except_ the transaction fee deduction will be rolled back. + +### Fee Distribution + +Transaction fees are partially burned and the remaining fees are collected by the validator that produced the block that the corresponding transactions were included in. The transaction fee burn rate was initialized as 50% when inflation rewards were enabled at the beginning of 2021 and has not changed so far. These fees incentivize a validator to process as many transactions as possible during its slots in the leader schedule. Collected fees are deposited in the validator's account (listed in the leader schedule for the current slot) after processing all of the transactions included in a block. + +## Upcoming Changes + +### Transaction wide compute budget + +As of version 1.8 of the Solana protocol, the maximum compute budget for transactions is assessed on a per instruction basis. This has allowed for flexibility in protocol design to squeeze out more compute by splitting up operations across multiple instructions but this workaround has skewed the distribution of compute consumption across different transactions. To keep transaction fees properly priced, the maximum compute budget will instead be assessed over the entire transaction. This change is likely to be released in version 1.9 of the Solana protocol and is gated on the following feature switch: + +```bash +$ ~/Workspace/solana (master branch) > cargo run --bin solana -- feature status 5ekBxc8itEnPv4NzGJtr8BVVQLNMQuLMNQQj7pHoLNZ9 --url mainnet-beta +5ekBxc8itEnPv4NzGJtr8BVVQLNMQuLMNQQj7pHoLNZ9 | inactive | transaction wide compute cap +``` + +This adjustment could negatively impact the usability of some protocols which have relied on the compute budget being reset for each instruction in a transaction. For this reason, this compute budget change will not be enabled until a new mechanism for increasing total transaction compute budget is added. This mechanism is described below... + +### Request increased compute budget + +As protocols have gotten more complex, the [default compute budget of 200,000 compute units](https://github.com/solana-labs/solana/blob/647aa926673e3df4443d8b3d9e3f759e8ca2c44b/sdk/src/compute_budget.rs#L105) has become a common pain-point for developers. Developers have gotten creative in working around this limitation by breaking up operations across multiple instructions and/or transactions. But in order to properly address this issue, a new program instruction will be added to request additional compute units from the runtime (up to a max of 1 million compute units). To request more compute, [create a `RequestUnits` instruction which invokes the new `Compute Budget` program](https://github.com/solana-labs/solana/blob/647aa926673e3df4443d8b3d9e3f759e8ca2c44b/sdk/src/compute_budget.rs#L44) and insert it at the beginning of a transaction. This new program will be released along with the transaction-wide compute budget change described above and is gated on the same feature switch. There are currently no increased transaction fees for using this feature, however that is likely to change. + +Note that adding a `RequestUnits` compute budget instruction will take up 39 extra bytes in a serialized transaction. That breaks down into 32 bytes for the compute budget program id, 1 byte for program id index, 1 byte for empty ix account vec len, 1 byte for data vec len, and 4 bytes for the requested compute. + +### Calculate transaction fees with RPC API + +In order to simplify fee calculation for developers, a new `getFeeForMessage` RPC API is planned to be released in v1.9 of the Solana protocol. This new method accepts a blockhash along with an encoded transaction message and will return the amount of fees that would be deducted if the transaction message is signed, sent, and processed by the cluster. Full documentation can be found on the "edge" version of the Solana docs here: [https://edge.docs.solana.com/developing/clients/jsonrpc-api#getfeeformessage](https://edge.docs.solana.com/developing/clients/jsonrpc-api#getfeeformessage) diff --git a/docs/src/developing/lookup-tables.md b/docs/src/developing/lookup-tables.md index b0c44d9c10cc52..fe49004e658bac 100644 --- a/docs/src/developing/lookup-tables.md +++ b/docs/src/developing/lookup-tables.md @@ -1,7 +1,6 @@ --- title: Address Lookup Tables description: "" -keywords: "" --- Address Lookup Tables, commonly referred to as "_lookup tables_" or "_ALTs_" for short, allow developers to create a collection of related addresses to efficiently load more addresses in a single transaction. diff --git a/docs/src/developing/versioned-transactions.md b/docs/src/developing/versioned-transactions.md index bb994226614b1f..d283a5530afd69 100644 --- a/docs/src/developing/versioned-transactions.md +++ b/docs/src/developing/versioned-transactions.md @@ -1,7 +1,6 @@ --- title: Versioned Transactions description: "" -keywords: "" --- [Versioned Transactions](./versioned-transactions.md) are the new transaction format that allow for additional functionality in the Solana runtime, including [Address Lookup Tables](./lookup-tables.md). diff --git a/docs/src/getstarted/hello-world.md b/docs/src/getstarted/hello-world.md index d33ae18a6dcc1e..4aa696f62b3726 100644 --- a/docs/src/getstarted/hello-world.md +++ b/docs/src/getstarted/hello-world.md @@ -1,7 +1,17 @@ --- title: "Hello World Quickstart Guide" description: 'This "hello world" quickstart guide will demonstrate how to setup, build, and deploy your first Solana program in your browser with Solana Playground.' -keywords: "playground, solana pg, on chain, rust, native program, tutorial, intro to solana development, blockchain developer, blockchain tutorial, web3 developer" +keywords: + - playground + - solana pg + - on chain + - rust + - native program + - tutorial + - intro to solana development + - blockchain developer + - blockchain tutorial + - web3 developer --- For this "hello world" quickstart guide, we will use [Solana Playground](https://beta.solpg.io), a browser the based IDE, to develop and deploy our Solana program. To use it, you do **NOT** have to install any software on your computer. Simply open Solana Playground in your browser of choice, and you are ready to write and deploy Solana programs. @@ -104,6 +114,7 @@ After each deployment, you will see your Playground Wallet balance change. By de > Note: > If you need more SOL, you can airdrop more by typing airdrop command in the playground terminal: + ```sh solana airdrop 2 ``` @@ -161,7 +172,7 @@ transaction.add( new web3.TransactionInstruction({ keys: [], programId: new web3.PublicKey(pg.PROGRAM_ID), - }) + }), ); ``` @@ -175,7 +186,7 @@ console.log("Sending transaction..."); const txHash = await web3.sendAndConfirmTransaction( pg.connection, transaction, - [pg.wallet.keypair] + [pg.wallet.keypair], ); console.log("Transaction sent with hash:", txHash); ``` diff --git a/docs/src/getstarted/local.md b/docs/src/getstarted/local.md index cb93d936b99ce4..067cc625a9c774 100644 --- a/docs/src/getstarted/local.md +++ b/docs/src/getstarted/local.md @@ -1,7 +1,16 @@ --- title: "Local Development Quickstart" description: "This quickstart guide will demonstrate how to quickly install and setup your local Solana development environment." -keywords: "rust, cargo, toml, program, tutorial, intro to solana development, blockchain developer, blockchain tutorial, web3 developer" +keywords: + - rust + - cargo + - toml + - program + - tutorial + - intro to solana development + - blockchain developer + - blockchain tutorial + - web3 developer --- This quickstart guide will demonstrate how to quickly install and setup your local development environment, getting you ready to start developing and deploying Solana programs to the blockchain. diff --git a/docs/src/getstarted/rust.md b/docs/src/getstarted/rust.md index 167580a97ec9b1..8ab59ae7811b51 100644 --- a/docs/src/getstarted/rust.md +++ b/docs/src/getstarted/rust.md @@ -1,7 +1,16 @@ --- title: "Rust Program Quickstart" description: "This quickstart guide will demonstrate how to quickly setup, build, and deploy your first Rust based Solana program to the blockchain." -keywords: "rust, cargo, toml, program, tutorial, intro to solana development, blockchain developer, blockchain tutorial, web3 developer" +keywords: + - rust + - cargo + - toml + - program + - tutorial + - intro to solana development + - blockchain developer + - blockchain tutorial + - web3 developer --- Rust is the most common programming language to write Solana programs with. This quickstart guide will demonstrate how to quickly setup, build, and deploy your first Rust based Solana program to the blockchain. diff --git a/docs/src/pages/developers.js b/docs/src/pages/developers.js index b73d5080698b94..344ad73a55ebda 100644 --- a/docs/src/pages/developers.js +++ b/docs/src/pages/developers.js @@ -23,8 +23,8 @@ function Developers() { your browser.

    - - Get Started + + Get Started
    diff --git a/docs/src/pages/getstarted.jsx b/docs/src/pages/getstarted.jsx index 2e6857922d1d20..954d80f43b7d3d 100644 --- a/docs/src/pages/getstarted.jsx +++ b/docs/src/pages/getstarted.jsx @@ -23,8 +23,8 @@ function GetStartedPage() { your browser.

    - - Get Started + + Get Started diff --git a/docs/src/terminology.md b/docs/src/terminology.md index 5145fd486748fe..4b86a921a86c28 100644 --- a/docs/src/terminology.md +++ b/docs/src/terminology.md @@ -1,7 +1,12 @@ --- title: Terminology -description: "Learn the essential terminology used thoughtout the Solana blockchain and development models." -keywords: "terms, dictionary, definitions, define, programming models" +description: "Learn the essential terminology used throughout the Solana blockchain and development models." +keywords: + - terms + - dictionary + - definitions + - define + - programming models --- The following terms are used throughout the Solana documentation and development ecosystem. diff --git a/docs/src/transaction_fees.md b/docs/src/transaction_fees.md index ee9fdfa43e9b93..7144907a7f1b31 100644 --- a/docs/src/transaction_fees.md +++ b/docs/src/transaction_fees.md @@ -1,7 +1,15 @@ --- title: Transaction Fees description: "Transaction fees are the small fees paid to process instructions on the network. These fees are based on computation and an optional prioritization fee." -keywords: "instruction fee, processing fee, storage fee, low fee blockchain, gas, gwei, cheap network, affordable blockchain" +keywords: + - instruction fee + - processing fee + - storage fee + - low fee blockchain + - gas + - gwei + - cheap network + - affordable blockchain --- The small fees paid to process [instructions](./terminology.md#instruction) on the Solana blockchain are known as "_transaction fees_". diff --git a/docs/yarn.lock b/docs/yarn.lock index 7969630912d805..5f52e1820560cc 100644 --- a/docs/yarn.lock +++ b/docs/yarn.lock @@ -2,142 +2,148 @@ # yarn lockfile v1 -"@algolia/autocomplete-core@1.0.0-alpha.44": - "integrity" "sha512-2iMXthldMIDXtlbg9omRKLgg1bLo2ZzINAEqwhNjUeyj1ceEyL1ck6FY0VnJpf2LsjmNthHCz2BuFk+nYUeDNA==" - "resolved" "https://registry.npmjs.org/@algolia/autocomplete-core/-/autocomplete-core-1.0.0-alpha.44.tgz" - "version" "1.0.0-alpha.44" - dependencies: - "@algolia/autocomplete-shared" "1.0.0-alpha.44" +"@algolia/autocomplete-core@1.7.1": + "integrity" "sha512-eiZw+fxMzNQn01S8dA/hcCpoWCOCwcIIEUtHHdzN5TGB3IpzLbuhqFeTfh2OUhhgkE8Uo17+wH+QJ/wYyQmmzg==" + "resolved" "https://registry.npmjs.org/@algolia/autocomplete-core/-/autocomplete-core-1.7.1.tgz" + "version" "1.7.1" + dependencies: + "@algolia/autocomplete-shared" "1.7.1" -"@algolia/autocomplete-preset-algolia@1.0.0-alpha.44": - "integrity" "sha512-DCHwo5ovzg9k2ejUolGNTLFnIA7GpsrkbNJTy1sFbMnYfBmeK8egZPZnEl7lBTr27OaZu7IkWpTepLVSztZyng==" - "resolved" "https://registry.npmjs.org/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.0.0-alpha.44.tgz" - "version" "1.0.0-alpha.44" - dependencies: - "@algolia/autocomplete-shared" "1.0.0-alpha.44" +"@algolia/autocomplete-preset-algolia@1.7.1": + "integrity" "sha512-pJwmIxeJCymU1M6cGujnaIYcY3QPOVYZOXhFkWVM7IxKzy272BwCvMFMyc5NpG/QmiObBxjo7myd060OeTNJXg==" + "resolved" "https://registry.npmjs.org/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.7.1.tgz" + "version" "1.7.1" + dependencies: + "@algolia/autocomplete-shared" "1.7.1" -"@algolia/autocomplete-shared@1.0.0-alpha.44": - "integrity" "sha512-2oQZPERYV+yNx/yoVWYjZZdOqsitJ5dfxXJjL18yczOXH6ujnsq+DTczSrX+RjzjQdVeJ1UAG053EJQF/FOiMg==" - "resolved" "https://registry.npmjs.org/@algolia/autocomplete-shared/-/autocomplete-shared-1.0.0-alpha.44.tgz" - "version" "1.0.0-alpha.44" +"@algolia/autocomplete-shared@1.7.1": + "integrity" "sha512-eTmGVqY3GeyBTT8IWiB2K5EuURAqhnumfktAEoHxfDY2o7vg2rSnO16ZtIG0fMgt3py28Vwgq42/bVEuaQV7pg==" + "resolved" "https://registry.npmjs.org/@algolia/autocomplete-shared/-/autocomplete-shared-1.7.1.tgz" + "version" "1.7.1" -"@algolia/cache-browser-local-storage@4.9.1": - "integrity" "sha512-bAUU9vKCy45uTTlzJw0LYu1IjoZsmzL6lgjaVFaW1crhX/4P+JD5ReQv3n/wpiXSFaHq1WEO3WyH2g3ymzeipQ==" - "resolved" "https://registry.npmjs.org/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.9.1.tgz" - "version" "4.9.1" - dependencies: - "@algolia/cache-common" "4.9.1" - -"@algolia/cache-common@4.9.1": - "integrity" "sha512-tcvw4mOfFy44V4ZxDEy9wNGr6vFROZKRpXKTEBgdw/WBn6mX51H1ar4RWtceDEcDU4H5fIv5tsY3ip2hU+fTPg==" - "resolved" "https://registry.npmjs.org/@algolia/cache-common/-/cache-common-4.9.1.tgz" - "version" "4.9.1" - -"@algolia/cache-in-memory@4.9.1": - "integrity" "sha512-IEJrHonvdymW2CnRfJtsTVWyfAH05xPEFkGXGCw00+6JNCj8Dln3TeaRLiaaY1srlyGedkemekQm1/Xb46CGOQ==" - "resolved" "https://registry.npmjs.org/@algolia/cache-in-memory/-/cache-in-memory-4.9.1.tgz" - "version" "4.9.1" - dependencies: - "@algolia/cache-common" "4.9.1" - -"@algolia/client-account@4.9.1": - "integrity" "sha512-Shpjeuwb7i2LR5QuWREb6UbEQLGB+Pl/J5+wPgILJDP/uWp7jpl0ase9mYNQGKj7TjztpSpQCPZ3dSHPnzZPfw==" - "resolved" "https://registry.npmjs.org/@algolia/client-account/-/client-account-4.9.1.tgz" - "version" "4.9.1" - dependencies: - "@algolia/client-common" "4.9.1" - "@algolia/client-search" "4.9.1" - "@algolia/transporter" "4.9.1" - -"@algolia/client-analytics@4.9.1": - "integrity" "sha512-/g6OkOSIA+A0t/tjvbL6iG/zV4El4LPFgv/tcAYHTH27BmlNtnEXw+iFpGjeUlQoPily9WVB3QNLMJkaNwL3HA==" - "resolved" "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-4.9.1.tgz" - "version" "4.9.1" - dependencies: - "@algolia/client-common" "4.9.1" - "@algolia/client-search" "4.9.1" - "@algolia/requester-common" "4.9.1" - "@algolia/transporter" "4.9.1" - -"@algolia/client-common@4.9.1": - "integrity" "sha512-UziRTZ8km3qwoVPIyEre8TV6V+MX7UtbfVqPmSafZ0xu41UUZ+sL56YoKjOXkbKuybeIC9prXMGy/ID5bXkTqg==" - "resolved" "https://registry.npmjs.org/@algolia/client-common/-/client-common-4.9.1.tgz" - "version" "4.9.1" - dependencies: - "@algolia/requester-common" "4.9.1" - "@algolia/transporter" "4.9.1" - -"@algolia/client-recommendation@4.9.1": - "integrity" "sha512-Drtvvm1PNIOpYf4HFlkPFstFQ3IsN+TRmxur2F7y6Faplb5ybISa8ithu1tmlTdyTf3A78hQUQjgJet6qD2XZw==" - "resolved" "https://registry.npmjs.org/@algolia/client-recommendation/-/client-recommendation-4.9.1.tgz" - "version" "4.9.1" - dependencies: - "@algolia/client-common" "4.9.1" - "@algolia/requester-common" "4.9.1" - "@algolia/transporter" "4.9.1" - -"@algolia/client-search@^4.5.1", "@algolia/client-search@4.9.1": - "integrity" "sha512-r9Cw2r8kJr45iYncFDht6EshARghU265wuY8Q8oHrpFHjAziEYdsUOdNmQKbsSH5J3gLjDPx1EI5DzVd6ivn3w==" - "resolved" "https://registry.npmjs.org/@algolia/client-search/-/client-search-4.9.1.tgz" - "version" "4.9.1" - dependencies: - "@algolia/client-common" "4.9.1" - "@algolia/requester-common" "4.9.1" - "@algolia/transporter" "4.9.1" - -"@algolia/logger-common@4.9.1": - "integrity" "sha512-9mPrbFlFyPT7or/7PXTiJjyOewWB9QRkZKVXkt5zHAUiUzGxmmdpJIGpPv3YQnDur8lXrXaRI0MHXUuIDMY1ng==" - "resolved" "https://registry.npmjs.org/@algolia/logger-common/-/logger-common-4.9.1.tgz" - "version" "4.9.1" - -"@algolia/logger-console@4.9.1": - "integrity" "sha512-74VUwjtFjFpjZpi3QoHIPv0kcr3vWUSHX/Vs8PJW3lPsD4CgyhFenQbG9v+ZnyH0JrJwiYTtzfmrVh7IMWZGrQ==" - "resolved" "https://registry.npmjs.org/@algolia/logger-console/-/logger-console-4.9.1.tgz" - "version" "4.9.1" - dependencies: - "@algolia/logger-common" "4.9.1" - -"@algolia/requester-browser-xhr@4.9.1": - "integrity" "sha512-zc46tk5o0ikOAz3uYiRAMxC2iVKAMFKT7nNZnLB5IzT0uqAh7pz/+D/UvIxP4bKmsllpBSnPcpfQF+OI4Ag/BA==" - "resolved" "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.9.1.tgz" - "version" "4.9.1" - dependencies: - "@algolia/requester-common" "4.9.1" - -"@algolia/requester-common@4.9.1": - "integrity" "sha512-9hPgXnlCSbqJqF69M5x5WN3h51Dc+mk/iWNeJSVxExHGvCDfBBZd0v6S15i8q2a9cD1I2RnhMpbnX5BmGtabVA==" - "resolved" "https://registry.npmjs.org/@algolia/requester-common/-/requester-common-4.9.1.tgz" - "version" "4.9.1" - -"@algolia/requester-node-http@4.9.1": - "integrity" "sha512-vYNVbSCuyrCSCjHBQJk+tLZtWCjvvDf5tSbRJjyJYMqpnXuIuP7gZm24iHil4NPYBhbBj5NU2ZDAhc/gTn75Ag==" - "resolved" "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-4.9.1.tgz" - "version" "4.9.1" +"@algolia/cache-browser-local-storage@4.14.2": + "integrity" "sha512-FRweBkK/ywO+GKYfAWbrepewQsPTIEirhi1BdykX9mxvBPtGNKccYAxvGdDCumU1jL4r3cayio4psfzKMejBlA==" + "resolved" "https://registry.npmjs.org/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.14.2.tgz" + "version" "4.14.2" dependencies: - "@algolia/requester-common" "4.9.1" - -"@algolia/transporter@4.9.1": - "integrity" "sha512-AbjFfGzX+cAuj7Qyc536OxIQzjFOA5FU2ANGStx8LBH+AKXScwfkx67C05riuaRR5adSCLMSEbVvUscH0nF+6A==" - "resolved" "https://registry.npmjs.org/@algolia/transporter/-/transporter-4.9.1.tgz" - "version" "4.9.1" - dependencies: - "@algolia/cache-common" "4.9.1" - "@algolia/logger-common" "4.9.1" - "@algolia/requester-common" "4.9.1" - -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.5.5": - "integrity" "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==" - "resolved" "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz" - "version" "7.12.13" + "@algolia/cache-common" "4.14.2" + +"@algolia/cache-common@4.14.2": + "integrity" "sha512-SbvAlG9VqNanCErr44q6lEKD2qoK4XtFNx9Qn8FK26ePCI8I9yU7pYB+eM/cZdS9SzQCRJBbHUumVr4bsQ4uxg==" + "resolved" "https://registry.npmjs.org/@algolia/cache-common/-/cache-common-4.14.2.tgz" + "version" "4.14.2" + +"@algolia/cache-in-memory@4.14.2": + "integrity" "sha512-HrOukWoop9XB/VFojPv1R5SVXowgI56T9pmezd/djh2JnVN/vXswhXV51RKy4nCpqxyHt/aGFSq2qkDvj6KiuQ==" + "resolved" "https://registry.npmjs.org/@algolia/cache-in-memory/-/cache-in-memory-4.14.2.tgz" + "version" "4.14.2" dependencies: - "@babel/highlight" "^7.12.13" + "@algolia/cache-common" "4.14.2" -"@babel/code-frame@7.10.4": - "integrity" "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==" - "resolved" "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz" - "version" "7.10.4" +"@algolia/client-account@4.14.2": + "integrity" "sha512-WHtriQqGyibbb/Rx71YY43T0cXqyelEU0lB2QMBRXvD2X0iyeGl4qMxocgEIcbHyK7uqE7hKgjT8aBrHqhgc1w==" + "resolved" "https://registry.npmjs.org/@algolia/client-account/-/client-account-4.14.2.tgz" + "version" "4.14.2" dependencies: - "@babel/highlight" "^7.10.4" + "@algolia/client-common" "4.14.2" + "@algolia/client-search" "4.14.2" + "@algolia/transporter" "4.14.2" + +"@algolia/client-analytics@4.14.2": + "integrity" "sha512-yBvBv2mw+HX5a+aeR0dkvUbFZsiC4FKSnfqk9rrfX+QrlNOKEhCG0tJzjiOggRW4EcNqRmaTULIYvIzQVL2KYQ==" + "resolved" "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-4.14.2.tgz" + "version" "4.14.2" + dependencies: + "@algolia/client-common" "4.14.2" + "@algolia/client-search" "4.14.2" + "@algolia/requester-common" "4.14.2" + "@algolia/transporter" "4.14.2" + +"@algolia/client-common@4.14.2": + "integrity" "sha512-43o4fslNLcktgtDMVaT5XwlzsDPzlqvqesRi4MjQz2x4/Sxm7zYg5LRYFol1BIhG6EwxKvSUq8HcC/KxJu3J0Q==" + "resolved" "https://registry.npmjs.org/@algolia/client-common/-/client-common-4.14.2.tgz" + "version" "4.14.2" + dependencies: + "@algolia/requester-common" "4.14.2" + "@algolia/transporter" "4.14.2" + +"@algolia/client-personalization@4.14.2": + "integrity" "sha512-ACCoLi0cL8CBZ1W/2juehSltrw2iqsQBnfiu/Rbl9W2yE6o2ZUb97+sqN/jBqYNQBS+o0ekTMKNkQjHHAcEXNw==" + "resolved" "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-4.14.2.tgz" + "version" "4.14.2" + dependencies: + "@algolia/client-common" "4.14.2" + "@algolia/requester-common" "4.14.2" + "@algolia/transporter" "4.14.2" + +"@algolia/client-search@^4.9.1", "@algolia/client-search@4.14.2": + "integrity" "sha512-L5zScdOmcZ6NGiVbLKTvP02UbxZ0njd5Vq9nJAmPFtjffUSOGEp11BmD2oMJ5QvARgx2XbX4KzTTNS5ECYIMWw==" + "resolved" "https://registry.npmjs.org/@algolia/client-search/-/client-search-4.14.2.tgz" + "version" "4.14.2" + dependencies: + "@algolia/client-common" "4.14.2" + "@algolia/requester-common" "4.14.2" + "@algolia/transporter" "4.14.2" + +"@algolia/events@^4.0.1": + "integrity" "sha512-FQzvOCgoFXAbf5Y6mYozw2aj5KCJoA3m4heImceldzPSMbdyS4atVjJzXKMsfX3wnZTFYwkkt8/z8UesLHlSBQ==" + "resolved" "https://registry.npmjs.org/@algolia/events/-/events-4.0.1.tgz" + "version" "4.0.1" + +"@algolia/logger-common@4.14.2": + "integrity" "sha512-/JGlYvdV++IcMHBnVFsqEisTiOeEr6cUJtpjz8zc0A9c31JrtLm318Njc72p14Pnkw3A/5lHHh+QxpJ6WFTmsA==" + "resolved" "https://registry.npmjs.org/@algolia/logger-common/-/logger-common-4.14.2.tgz" + "version" "4.14.2" + +"@algolia/logger-console@4.14.2": + "integrity" "sha512-8S2PlpdshbkwlLCSAB5f8c91xyc84VM9Ar9EdfE9UmX+NrKNYnWR1maXXVDQQoto07G1Ol/tYFnFVhUZq0xV/g==" + "resolved" "https://registry.npmjs.org/@algolia/logger-console/-/logger-console-4.14.2.tgz" + "version" "4.14.2" + dependencies: + "@algolia/logger-common" "4.14.2" + +"@algolia/requester-browser-xhr@4.14.2": + "integrity" "sha512-CEh//xYz/WfxHFh7pcMjQNWgpl4wFB85lUMRyVwaDPibNzQRVcV33YS+63fShFWc2+42YEipFGH2iPzlpszmDw==" + "resolved" "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.14.2.tgz" + "version" "4.14.2" + dependencies: + "@algolia/requester-common" "4.14.2" + +"@algolia/requester-common@4.14.2": + "integrity" "sha512-73YQsBOKa5fvVV3My7iZHu1sUqmjjfs9TteFWwPwDmnad7T0VTCopttcsM3OjLxZFtBnX61Xxl2T2gmG2O4ehg==" + "resolved" "https://registry.npmjs.org/@algolia/requester-common/-/requester-common-4.14.2.tgz" + "version" "4.14.2" + +"@algolia/requester-node-http@4.14.2": + "integrity" "sha512-oDbb02kd1o5GTEld4pETlPZLY0e+gOSWjWMJHWTgDXbv9rm/o2cF7japO6Vj1ENnrqWvLBmW1OzV9g6FUFhFXg==" + "resolved" "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-4.14.2.tgz" + "version" "4.14.2" + dependencies: + "@algolia/requester-common" "4.14.2" + +"@algolia/transporter@4.14.2": + "integrity" "sha512-t89dfQb2T9MFQHidjHcfhh6iGMNwvuKUvojAj+JsrHAGbuSy7yE4BylhLX6R0Q1xYRoC4Vvv+O5qIw/LdnQfsQ==" + "resolved" "https://registry.npmjs.org/@algolia/transporter/-/transporter-4.14.2.tgz" + "version" "4.14.2" + dependencies: + "@algolia/cache-common" "4.14.2" + "@algolia/logger-common" "4.14.2" + "@algolia/requester-common" "4.14.2" + +"@ampproject/remapping@^2.1.0": + "integrity" "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==" + "resolved" "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz" + "version" "2.2.0" + dependencies: + "@jridgewell/gen-mapping" "^0.1.0" + "@jridgewell/trace-mapping" "^0.3.9" + +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.16.0", "@babel/code-frame@^7.18.6", "@babel/code-frame@^7.8.3": + "integrity" "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==" + "resolved" "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz" + "version" "7.18.6" + dependencies: + "@babel/highlight" "^7.18.6" "@babel/code-frame@7.12.11": "integrity" "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==" @@ -146,31 +152,31 @@ dependencies: "@babel/highlight" "^7.10.4" -"@babel/compat-data@^7.13.11", "@babel/compat-data@^7.13.15", "@babel/compat-data@^7.14.0": - "integrity" "sha512-vu9V3uMM/1o5Hl5OekMUowo3FqXLJSw+s+66nt0fSWVWTtmosdzn45JHOB3cPtZoe6CTBDzvSw0RdOY85Q37+Q==" - "resolved" "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.14.0.tgz" - "version" "7.14.0" - -"@babel/core@^7.0.0", "@babel/core@^7.0.0-0", "@babel/core@^7.11.6", "@babel/core@^7.12.0", "@babel/core@^7.12.16", "@babel/core@^7.12.3", "@babel/core@^7.13.0", "@babel/core@^7.4.0-0": - "integrity" "sha512-OgC1mON+l4U4B4wiohJlQNUU3H73mpTyYY3j/c8U9dr9UagGGSm+WFpzjy/YLdoyjiG++c1kIDgxCo/mLwQJeQ==" - "resolved" "https://registry.npmjs.org/@babel/core/-/core-7.14.2.tgz" - "version" "7.14.2" - dependencies: - "@babel/code-frame" "^7.12.13" - "@babel/generator" "^7.14.2" - "@babel/helper-compilation-targets" "^7.13.16" - "@babel/helper-module-transforms" "^7.14.2" - "@babel/helpers" "^7.14.0" - "@babel/parser" "^7.14.2" - "@babel/template" "^7.12.13" - "@babel/traverse" "^7.14.2" - "@babel/types" "^7.14.2" +"@babel/compat-data@^7.17.7", "@babel/compat-data@^7.19.3", "@babel/compat-data@^7.19.4": + "integrity" "sha512-CHIGpJcUQ5lU9KrPHTjBMhVwQG6CQjxfg36fGXl3qk/Gik1WwWachaXFuo0uCWJT/mStOKtcbFJCaVLihC1CMw==" + "resolved" "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.19.4.tgz" + "version" "7.19.4" + +"@babel/core@^7.0.0", "@babel/core@^7.0.0-0", "@babel/core@^7.11.6", "@babel/core@^7.12.0", "@babel/core@^7.13.0", "@babel/core@^7.18.6", "@babel/core@^7.19.6", "@babel/core@^7.4.0-0": + "integrity" "sha512-D2Ue4KHpc6Ys2+AxpIx1BZ8+UegLLLE2p3KJEuJRKmokHOtl49jQ5ny1773KsGLZs8MQvBidAF6yWUJxRqtKtg==" + "resolved" "https://registry.npmjs.org/@babel/core/-/core-7.19.6.tgz" + "version" "7.19.6" + dependencies: + "@ampproject/remapping" "^2.1.0" + "@babel/code-frame" "^7.18.6" + "@babel/generator" "^7.19.6" + "@babel/helper-compilation-targets" "^7.19.3" + "@babel/helper-module-transforms" "^7.19.6" + "@babel/helpers" "^7.19.4" + "@babel/parser" "^7.19.6" + "@babel/template" "^7.18.10" + "@babel/traverse" "^7.19.6" + "@babel/types" "^7.19.4" "convert-source-map" "^1.7.0" "debug" "^4.1.0" "gensync" "^1.0.0-beta.2" - "json5" "^2.1.2" + "json5" "^2.2.1" "semver" "^6.3.0" - "source-map" "^0.5.0" "@babel/core@7.12.9": "integrity" "sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ==" @@ -194,325 +200,336 @@ "semver" "^5.4.1" "source-map" "^0.5.0" -"@babel/generator@^7.12.15", "@babel/generator@^7.12.5", "@babel/generator@^7.14.2": - "integrity" "sha512-OnADYbKrffDVai5qcpkMxQ7caomHOoEwjkouqnN2QhydAjowFAZcsdecFIRUBdb+ZcruwYE4ythYmF1UBZU5xQ==" - "resolved" "https://registry.npmjs.org/@babel/generator/-/generator-7.14.2.tgz" - "version" "7.14.2" +"@babel/generator@^7.12.5", "@babel/generator@^7.18.7", "@babel/generator@^7.19.6": + "integrity" "sha512-oHGRUQeoX1QrKeJIKVe0hwjGqNnVYsM5Nep5zo0uE0m42sLH+Fsd2pStJ5sRM1bNyTUUoz0pe2lTeMJrb/taTA==" + "resolved" "https://registry.npmjs.org/@babel/generator/-/generator-7.19.6.tgz" + "version" "7.19.6" dependencies: - "@babel/types" "^7.14.2" + "@babel/types" "^7.19.4" + "@jridgewell/gen-mapping" "^0.3.2" "jsesc" "^2.5.1" - "source-map" "^0.5.0" -"@babel/helper-annotate-as-pure@^7.10.4", "@babel/helper-annotate-as-pure@^7.12.13": - "integrity" "sha512-7YXfX5wQ5aYM/BOlbSccHDbuXXFPxeoUmfWtz8le2yTkTZc+BxsiEnENFoi2SlmA8ewDkG2LgIMIVzzn2h8kfw==" - "resolved" "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.12.13.tgz" - "version" "7.12.13" +"@babel/helper-annotate-as-pure@^7.18.6": + "integrity" "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==" + "resolved" "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz" + "version" "7.18.6" dependencies: - "@babel/types" "^7.12.13" + "@babel/types" "^7.18.6" -"@babel/helper-builder-binary-assignment-operator-visitor@^7.12.13": - "integrity" "sha512-CZOv9tGphhDRlVjVkAgm8Nhklm9RzSmWpX2my+t7Ua/KT616pEzXsQCjinzvkRvHWJ9itO4f296efroX23XCMA==" - "resolved" "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.12.13.tgz" - "version" "7.12.13" +"@babel/helper-builder-binary-assignment-operator-visitor@^7.18.6": + "integrity" "sha512-yFQ0YCHoIqarl8BCRwBL8ulYUaZpz3bNsA7oFepAzee+8/+ImtADXNOmO5vJvsPff3qi+hvpkY/NYBTrBQgdNw==" + "resolved" "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.18.9.tgz" + "version" "7.18.9" dependencies: - "@babel/helper-explode-assignable-expression" "^7.12.13" - "@babel/types" "^7.12.13" + "@babel/helper-explode-assignable-expression" "^7.18.6" + "@babel/types" "^7.18.9" -"@babel/helper-compilation-targets@^7.13.0", "@babel/helper-compilation-targets@^7.13.16": - "integrity" "sha512-3gmkYIrpqsLlieFwjkGgLaSHmhnvlAYzZLlYVjlW+QwI+1zE17kGxuJGmIqDQdYp56XdmGeD+Bswx0UTyG18xA==" - "resolved" "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.13.16.tgz" - "version" "7.13.16" +"@babel/helper-compilation-targets@^7.17.7", "@babel/helper-compilation-targets@^7.18.9", "@babel/helper-compilation-targets@^7.19.0", "@babel/helper-compilation-targets@^7.19.3": + "integrity" "sha512-65ESqLGyGmLvgR0mst5AdW1FkNlj9rQsCKduzEoEPhBCDFGXvz2jW6bXFG6i0/MrV2s7hhXjjb2yAzcPuQlLwg==" + "resolved" "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.19.3.tgz" + "version" "7.19.3" dependencies: - "@babel/compat-data" "^7.13.15" - "@babel/helper-validator-option" "^7.12.17" - "browserslist" "^4.14.5" + "@babel/compat-data" "^7.19.3" + "@babel/helper-validator-option" "^7.18.6" + "browserslist" "^4.21.3" "semver" "^6.3.0" -"@babel/helper-create-class-features-plugin@^7.13.0", "@babel/helper-create-class-features-plugin@^7.14.0": - "integrity" "sha512-6YctwVsmlkchxfGUogvVrrhzyD3grFJyluj5JgDlQrwfMLJSt5tdAzFZfPf4H2Xoi5YLcQ6BxfJlaOBHuctyIw==" - "resolved" "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.14.2.tgz" - "version" "7.14.2" - dependencies: - "@babel/helper-annotate-as-pure" "^7.12.13" - "@babel/helper-function-name" "^7.14.2" - "@babel/helper-member-expression-to-functions" "^7.13.12" - "@babel/helper-optimise-call-expression" "^7.12.13" - "@babel/helper-replace-supers" "^7.13.12" - "@babel/helper-split-export-declaration" "^7.12.13" - -"@babel/helper-create-regexp-features-plugin@^7.12.13": - "integrity" "sha512-p2VGmBu9oefLZ2nQpgnEnG0ZlRPvL8gAGvPUMQwUdaE8k49rOMuZpOwdQoy5qJf6K8jL3bcAMhVUlHAjIgJHUg==" - "resolved" "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.12.17.tgz" - "version" "7.12.17" - dependencies: - "@babel/helper-annotate-as-pure" "^7.12.13" - "regexpu-core" "^4.7.1" - -"@babel/helper-define-polyfill-provider@^0.2.0": - "integrity" "sha512-JT8tHuFjKBo8NnaUbblz7mIu1nnvUDiHVjXXkulZULyidvo/7P6TY7+YqpV37IfF+KUFxmlK04elKtGKXaiVgw==" - "resolved" "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.2.0.tgz" - "version" "0.2.0" - dependencies: - "@babel/helper-compilation-targets" "^7.13.0" - "@babel/helper-module-imports" "^7.12.13" - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/traverse" "^7.13.0" +"@babel/helper-create-class-features-plugin@^7.18.6", "@babel/helper-create-class-features-plugin@^7.19.0": + "integrity" "sha512-NRz8DwF4jT3UfrmUoZjd0Uph9HQnP30t7Ash+weACcyNkiYTywpIjDBgReJMKgr+n86sn2nPVVmJ28Dm053Kqw==" + "resolved" "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.19.0.tgz" + "version" "7.19.0" + dependencies: + "@babel/helper-annotate-as-pure" "^7.18.6" + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-function-name" "^7.19.0" + "@babel/helper-member-expression-to-functions" "^7.18.9" + "@babel/helper-optimise-call-expression" "^7.18.6" + "@babel/helper-replace-supers" "^7.18.9" + "@babel/helper-split-export-declaration" "^7.18.6" + +"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.19.0": + "integrity" "sha512-htnV+mHX32DF81amCDrwIDr8nrp1PTm+3wfBN9/v8QJOLEioOCOG7qNyq0nHeFiWbT3Eb7gsPwEmV64UCQ1jzw==" + "resolved" "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.19.0.tgz" + "version" "7.19.0" + dependencies: + "@babel/helper-annotate-as-pure" "^7.18.6" + "regexpu-core" "^5.1.0" + +"@babel/helper-define-polyfill-provider@^0.3.3": + "integrity" "sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==" + "resolved" "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.3.tgz" + "version" "0.3.3" + dependencies: + "@babel/helper-compilation-targets" "^7.17.7" + "@babel/helper-plugin-utils" "^7.16.7" "debug" "^4.1.1" "lodash.debounce" "^4.0.8" "resolve" "^1.14.2" "semver" "^6.1.2" -"@babel/helper-explode-assignable-expression@^7.12.13": - "integrity" "sha512-qS0peLTDP8kOisG1blKbaoBg/o9OSa1qoumMjTK5pM+KDTtpxpsiubnCGP34vK8BXGcb2M9eigwgvoJryrzwWA==" - "resolved" "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.13.0.tgz" - "version" "7.13.0" - dependencies: - "@babel/types" "^7.13.0" +"@babel/helper-environment-visitor@^7.18.9": + "integrity" "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==" + "resolved" "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz" + "version" "7.18.9" -"@babel/helper-function-name@^7.12.13", "@babel/helper-function-name@^7.14.2": - "integrity" "sha512-NYZlkZRydxw+YT56IlhIcS8PAhb+FEUiOzuhFTfqDyPmzAhRge6ua0dQYT/Uh0t/EDHq05/i+e5M2d4XvjgarQ==" - "resolved" "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.2.tgz" - "version" "7.14.2" +"@babel/helper-explode-assignable-expression@^7.18.6": + "integrity" "sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg==" + "resolved" "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.18.6.tgz" + "version" "7.18.6" dependencies: - "@babel/helper-get-function-arity" "^7.12.13" - "@babel/template" "^7.12.13" - "@babel/types" "^7.14.2" + "@babel/types" "^7.18.6" -"@babel/helper-get-function-arity@^7.12.13": - "integrity" "sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg==" - "resolved" "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz" - "version" "7.12.13" +"@babel/helper-function-name@^7.18.9", "@babel/helper-function-name@^7.19.0": + "integrity" "sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==" + "resolved" "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz" + "version" "7.19.0" dependencies: - "@babel/types" "^7.12.13" + "@babel/template" "^7.18.10" + "@babel/types" "^7.19.0" -"@babel/helper-hoist-variables@^7.13.0": - "integrity" "sha512-1eMtTrXtrwscjcAeO4BVK+vvkxaLJSPFz1w1KLawz6HLNi9bPFGBNwwDyVfiu1Tv/vRRFYfoGaKhmAQPGPn5Wg==" - "resolved" "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.13.16.tgz" - "version" "7.13.16" +"@babel/helper-hoist-variables@^7.18.6": + "integrity" "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==" + "resolved" "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz" + "version" "7.18.6" dependencies: - "@babel/traverse" "^7.13.15" - "@babel/types" "^7.13.16" + "@babel/types" "^7.18.6" -"@babel/helper-member-expression-to-functions@^7.13.12": - "integrity" "sha512-48ql1CLL59aKbU94Y88Xgb2VFy7a95ykGRbJJaaVv+LX5U8wFpLfiGXJJGUozsmA1oEh/o5Bp60Voq7ACyA/Sw==" - "resolved" "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.13.12.tgz" - "version" "7.13.12" +"@babel/helper-member-expression-to-functions@^7.18.9": + "integrity" "sha512-RxifAh2ZoVU67PyKIO4AMi1wTenGfMR/O/ae0CCRqwgBAt5v7xjdtRw7UoSbsreKrQn5t7r89eruK/9JjYHuDg==" + "resolved" "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.18.9.tgz" + "version" "7.18.9" dependencies: - "@babel/types" "^7.13.12" + "@babel/types" "^7.18.9" -"@babel/helper-module-imports@^7.12.13", "@babel/helper-module-imports@^7.13.12": - "integrity" "sha512-4cVvR2/1B693IuOvSI20xqqa/+bl7lqAMR59R4iu39R9aOX8/JoYY1sFaNvUMyMBGnHdwvJgUrzNLoUZxXypxA==" - "resolved" "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.13.12.tgz" - "version" "7.13.12" +"@babel/helper-module-imports@^7.18.6": + "integrity" "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==" + "resolved" "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz" + "version" "7.18.6" dependencies: - "@babel/types" "^7.13.12" + "@babel/types" "^7.18.6" -"@babel/helper-module-transforms@^7.12.1", "@babel/helper-module-transforms@^7.13.0", "@babel/helper-module-transforms@^7.14.0", "@babel/helper-module-transforms@^7.14.2": - "integrity" "sha512-OznJUda/soKXv0XhpvzGWDnml4Qnwp16GN+D/kZIdLsWoHj05kyu8Rm5kXmMef+rVJZ0+4pSGLkeixdqNUATDA==" - "resolved" "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.14.2.tgz" - "version" "7.14.2" +"@babel/helper-module-transforms@^7.12.1", "@babel/helper-module-transforms@^7.18.6", "@babel/helper-module-transforms@^7.19.6": + "integrity" "sha512-fCmcfQo/KYr/VXXDIyd3CBGZ6AFhPFy1TfSEJ+PilGVlQT6jcbqtHAM4C1EciRqMza7/TpOUZliuSH+U6HAhJw==" + "resolved" "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.19.6.tgz" + "version" "7.19.6" dependencies: - "@babel/helper-module-imports" "^7.13.12" - "@babel/helper-replace-supers" "^7.13.12" - "@babel/helper-simple-access" "^7.13.12" - "@babel/helper-split-export-declaration" "^7.12.13" - "@babel/helper-validator-identifier" "^7.14.0" - "@babel/template" "^7.12.13" - "@babel/traverse" "^7.14.2" - "@babel/types" "^7.14.2" + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-module-imports" "^7.18.6" + "@babel/helper-simple-access" "^7.19.4" + "@babel/helper-split-export-declaration" "^7.18.6" + "@babel/helper-validator-identifier" "^7.19.1" + "@babel/template" "^7.18.10" + "@babel/traverse" "^7.19.6" + "@babel/types" "^7.19.4" -"@babel/helper-optimise-call-expression@^7.12.13": - "integrity" "sha512-BdWQhoVJkp6nVjB7nkFWcn43dkprYauqtk++Py2eaf/GRDFm5BxRqEIZCiHlZUGAVmtwKcsVL1dC68WmzeFmiA==" - "resolved" "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.13.tgz" - "version" "7.12.13" +"@babel/helper-optimise-call-expression@^7.18.6": + "integrity" "sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==" + "resolved" "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz" + "version" "7.18.6" dependencies: - "@babel/types" "^7.12.13" + "@babel/types" "^7.18.6" -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.13.0", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": - "integrity" "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==" - "resolved" "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz" - "version" "7.13.0" +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.16.7", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.18.9", "@babel/helper-plugin-utils@^7.19.0", "@babel/helper-plugin-utils@^7.20.2", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": + "integrity" "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==" + "resolved" "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz" + "version" "7.20.2" "@babel/helper-plugin-utils@7.10.4": "integrity" "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" "resolved" "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz" "version" "7.10.4" -"@babel/helper-remap-async-to-generator@^7.13.0": - "integrity" "sha512-pUQpFBE9JvC9lrQbpX0TmeNIy5s7GnZjna2lhhcHC7DzgBs6fWn722Y5cfwgrtrqc7NAJwMvOa0mKhq6XaE4jg==" - "resolved" "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.13.0.tgz" - "version" "7.13.0" - dependencies: - "@babel/helper-annotate-as-pure" "^7.12.13" - "@babel/helper-wrap-function" "^7.13.0" - "@babel/types" "^7.13.0" - -"@babel/helper-replace-supers@^7.12.13", "@babel/helper-replace-supers@^7.13.12": - "integrity" "sha512-Gz1eiX+4yDO8mT+heB94aLVNCL+rbuT2xy4YfyNqu8F+OI6vMvJK891qGBTqL9Uc8wxEvRW92Id6G7sDen3fFw==" - "resolved" "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.13.12.tgz" - "version" "7.13.12" - dependencies: - "@babel/helper-member-expression-to-functions" "^7.13.12" - "@babel/helper-optimise-call-expression" "^7.12.13" - "@babel/traverse" "^7.13.0" - "@babel/types" "^7.13.12" - -"@babel/helper-simple-access@^7.13.12": - "integrity" "sha512-7FEjbrx5SL9cWvXioDbnlYTppcZGuCY6ow3/D5vMggb2Ywgu4dMrpTJX0JdQAIcRRUElOIxF3yEooa9gUb9ZbA==" - "resolved" "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.13.12.tgz" - "version" "7.13.12" - dependencies: - "@babel/types" "^7.13.12" - -"@babel/helper-skip-transparent-expression-wrappers@^7.12.1": - "integrity" "sha512-Mf5AUuhG1/OCChOJ/HcADmvcHM42WJockombn8ATJG3OnyiSxBK/Mm5x78BQWvmtXZKHgbjdGL2kin/HOLlZGA==" - "resolved" "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.12.1.tgz" - "version" "7.12.1" - dependencies: - "@babel/types" "^7.12.1" - -"@babel/helper-split-export-declaration@^7.12.13": - "integrity" "sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg==" - "resolved" "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz" - "version" "7.12.13" - dependencies: - "@babel/types" "^7.12.13" - -"@babel/helper-validator-identifier@^7.12.11", "@babel/helper-validator-identifier@^7.14.0": - "integrity" "sha512-V3ts7zMSu5lfiwWDVWzRDGIN+lnCEUdaXgtVHJgLb1rGaA6jMrtB9EmE7L18foXJIE8Un/A/h6NJfGQp/e1J4A==" - "resolved" "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.0.tgz" - "version" "7.14.0" - -"@babel/helper-validator-option@^7.12.17": - "integrity" "sha512-TopkMDmLzq8ngChwRlyjR6raKD6gMSae4JdYDB8bByKreQgG0RBTuKe9LRxW3wFtUnjxOPRKBDwEH6Mg5KeDfw==" - "resolved" "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.12.17.tgz" - "version" "7.12.17" - -"@babel/helper-wrap-function@^7.13.0": - "integrity" "sha512-1UX9F7K3BS42fI6qd2A4BjKzgGjToscyZTdp1DjknHLCIvpgne6918io+aL5LXFcER/8QWiwpoY902pVEqgTXA==" - "resolved" "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.13.0.tgz" - "version" "7.13.0" - dependencies: - "@babel/helper-function-name" "^7.12.13" - "@babel/template" "^7.12.13" - "@babel/traverse" "^7.13.0" - "@babel/types" "^7.13.0" - -"@babel/helpers@^7.12.5", "@babel/helpers@^7.14.0": - "integrity" "sha512-+ufuXprtQ1D1iZTO/K9+EBRn+qPWMJjZSw/S0KlFrxCw4tkrzv9grgpDHkY9MeQTjTY8i2sp7Jep8DfU6tN9Mg==" - "resolved" "https://registry.npmjs.org/@babel/helpers/-/helpers-7.14.0.tgz" - "version" "7.14.0" - dependencies: - "@babel/template" "^7.12.13" - "@babel/traverse" "^7.14.0" - "@babel/types" "^7.14.0" - -"@babel/highlight@^7.10.4", "@babel/highlight@^7.12.13": - "integrity" "sha512-YSCOwxvTYEIMSGaBQb5kDDsCopDdiUGsqpatp3fOlI4+2HQSkTmEVWnVuySdAC5EWCqSWWTv0ib63RjR7dTBdg==" - "resolved" "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.0.tgz" - "version" "7.14.0" - dependencies: - "@babel/helper-validator-identifier" "^7.14.0" +"@babel/helper-remap-async-to-generator@^7.18.6", "@babel/helper-remap-async-to-generator@^7.18.9": + "integrity" "sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA==" + "resolved" "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.9.tgz" + "version" "7.18.9" + dependencies: + "@babel/helper-annotate-as-pure" "^7.18.6" + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-wrap-function" "^7.18.9" + "@babel/types" "^7.18.9" + +"@babel/helper-replace-supers@^7.18.6", "@babel/helper-replace-supers@^7.18.9": + "integrity" "sha512-T7ahH7wV0Hfs46SFh5Jz3s0B6+o8g3c+7TMxu7xKfmHikg7EAZ3I2Qk9LFhjxXq8sL7UkP5JflezNwoZa8WvWw==" + "resolved" "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.19.1.tgz" + "version" "7.19.1" + dependencies: + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-member-expression-to-functions" "^7.18.9" + "@babel/helper-optimise-call-expression" "^7.18.6" + "@babel/traverse" "^7.19.1" + "@babel/types" "^7.19.0" + +"@babel/helper-simple-access@^7.19.4": + "integrity" "sha512-f9Xq6WqBFqaDfbCzn2w85hwklswz5qsKlh7f08w4Y9yhJHpnNC0QemtSkK5YyOY8kPGvyiwdzZksGUhnGdaUIg==" + "resolved" "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.19.4.tgz" + "version" "7.19.4" + dependencies: + "@babel/types" "^7.19.4" + +"@babel/helper-skip-transparent-expression-wrappers@^7.18.9": + "integrity" "sha512-imytd2gHi3cJPsybLRbmFrF7u5BIEuI2cNheyKi3/iOBC63kNn3q8Crn2xVuESli0aM4KYsyEqKyS7lFL8YVtw==" + "resolved" "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.18.9.tgz" + "version" "7.18.9" + dependencies: + "@babel/types" "^7.18.9" + +"@babel/helper-split-export-declaration@^7.18.6": + "integrity" "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==" + "resolved" "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz" + "version" "7.18.6" + dependencies: + "@babel/types" "^7.18.6" + +"@babel/helper-string-parser@^7.19.4": + "integrity" "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==" + "resolved" "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz" + "version" "7.19.4" + +"@babel/helper-validator-identifier@^7.18.6", "@babel/helper-validator-identifier@^7.19.1": + "integrity" "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==" + "resolved" "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz" + "version" "7.19.1" + +"@babel/helper-validator-option@^7.18.6": + "integrity" "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==" + "resolved" "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz" + "version" "7.18.6" + +"@babel/helper-wrap-function@^7.18.9": + "integrity" "sha512-txX8aN8CZyYGTwcLhlk87KRqncAzhh5TpQamZUa0/u3an36NtDpUP6bQgBCBcLeBs09R/OwQu3OjK0k/HwfNDg==" + "resolved" "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.19.0.tgz" + "version" "7.19.0" + dependencies: + "@babel/helper-function-name" "^7.19.0" + "@babel/template" "^7.18.10" + "@babel/traverse" "^7.19.0" + "@babel/types" "^7.19.0" + +"@babel/helpers@^7.12.5", "@babel/helpers@^7.19.4": + "integrity" "sha512-G+z3aOx2nfDHwX/kyVii5fJq+bgscg89/dJNWpYeKeBv3v9xX8EIabmx1k6u9LS04H7nROFVRVK+e3k0VHp+sw==" + "resolved" "https://registry.npmjs.org/@babel/helpers/-/helpers-7.19.4.tgz" + "version" "7.19.4" + dependencies: + "@babel/template" "^7.18.10" + "@babel/traverse" "^7.19.4" + "@babel/types" "^7.19.4" + +"@babel/highlight@^7.10.4", "@babel/highlight@^7.18.6": + "integrity" "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==" + "resolved" "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz" + "version" "7.18.6" + dependencies: + "@babel/helper-validator-identifier" "^7.18.6" "chalk" "^2.0.0" "js-tokens" "^4.0.0" -"@babel/parser@^7.12.13", "@babel/parser@^7.12.16", "@babel/parser@^7.12.7", "@babel/parser@^7.14.2", "@babel/parser@^7.7.0": - "integrity" "sha512-IoVDIHpsgE/fu7eXBeRWt8zLbDrSvD7H1gpomOkPpBoEN8KCruCqSDdqo8dddwQQrui30KSvQBaMUOJiuFu6QQ==" - "resolved" "https://registry.npmjs.org/@babel/parser/-/parser-7.14.2.tgz" - "version" "7.14.2" +"@babel/parser@^7.12.7", "@babel/parser@^7.18.10", "@babel/parser@^7.18.8", "@babel/parser@^7.19.6", "@babel/parser@^7.7.0": + "integrity" "sha512-h1IUp81s2JYJ3mRkdxJgs4UvmSsRvDrx5ICSJbPvtWYv5i1nTBGcBpnog+89rAFMwvvru6E5NUHdBe01UeSzYA==" + "resolved" "https://registry.npmjs.org/@babel/parser/-/parser-7.19.6.tgz" + "version" "7.19.6" -"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.13.12": - "integrity" "sha512-d0u3zWKcoZf379fOeJdr1a5WPDny4aOFZ6hlfKivgK0LY7ZxNfoaHL2fWwdGtHyVvra38FC+HVYkO+byfSA8AQ==" - "resolved" "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.13.12.tgz" - "version" "7.13.12" +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.18.6": + "integrity" "sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==" + "resolved" "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6.tgz" + "version" "7.18.6" dependencies: - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/helper-skip-transparent-expression-wrappers" "^7.12.1" - "@babel/plugin-proposal-optional-chaining" "^7.13.12" + "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-proposal-async-generator-functions@^7.14.2": - "integrity" "sha512-b1AM4F6fwck4N8ItZ/AtC4FP/cqZqmKRQ4FaTDutwSYyjuhtvsGEMLK4N/ztV/ImP40BjIDyMgBQAeAMsQYVFQ==" - "resolved" "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.14.2.tgz" - "version" "7.14.2" +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.18.9": + "integrity" "sha512-AHrP9jadvH7qlOj6PINbgSuphjQUAK7AOT7DPjBo9EHoLhQTnnK5u45e1Hd4DbSQEO9nqPWtQ89r+XEOWFScKg==" + "resolved" "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.18.9.tgz" + "version" "7.18.9" dependencies: - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/helper-remap-async-to-generator" "^7.13.0" + "@babel/helper-plugin-utils" "^7.18.9" + "@babel/helper-skip-transparent-expression-wrappers" "^7.18.9" + "@babel/plugin-proposal-optional-chaining" "^7.18.9" + +"@babel/plugin-proposal-async-generator-functions@^7.19.1": + "integrity" "sha512-0yu8vNATgLy4ivqMNBIwb1HebCelqN7YX8SL3FDXORv/RqT0zEEWUCH4GH44JsSrvCu6GqnAdR5EBFAPeNBB4Q==" + "resolved" "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.19.1.tgz" + "version" "7.19.1" + dependencies: + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-plugin-utils" "^7.19.0" + "@babel/helper-remap-async-to-generator" "^7.18.9" "@babel/plugin-syntax-async-generators" "^7.8.4" -"@babel/plugin-proposal-class-properties@^7.13.0": - "integrity" "sha512-KnTDjFNC1g+45ka0myZNvSBFLhNCLN+GeGYLDEA8Oq7MZ6yMgfLoIRh86GRT0FjtJhZw8JyUskP9uvj5pHM9Zg==" - "resolved" "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.13.0.tgz" - "version" "7.13.0" +"@babel/plugin-proposal-class-properties@^7.18.6": + "integrity" "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==" + "resolved" "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz" + "version" "7.18.6" dependencies: - "@babel/helper-create-class-features-plugin" "^7.13.0" - "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-create-class-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-proposal-class-static-block@^7.13.11": - "integrity" "sha512-fJTdFI4bfnMjvxJyNuaf8i9mVcZ0UhetaGEUHaHV9KEnibLugJkZAtXikR8KcYj+NYmI4DZMS8yQAyg+hvfSqg==" - "resolved" "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.13.11.tgz" - "version" "7.13.11" +"@babel/plugin-proposal-class-static-block@^7.18.6": + "integrity" "sha512-+I3oIiNxrCpup3Gi8n5IGMwj0gOCAjcJUSQEcotNnCCPMEnixawOQ+KeJPlgfjzx+FKQ1QSyZOWe7wmoJp7vhw==" + "resolved" "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.18.6.tgz" + "version" "7.18.6" dependencies: - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/plugin-syntax-class-static-block" "^7.12.13" + "@babel/helper-create-class-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-syntax-class-static-block" "^7.14.5" -"@babel/plugin-proposal-dynamic-import@^7.14.2": - "integrity" "sha512-oxVQZIWFh91vuNEMKltqNsKLFWkOIyJc95k2Gv9lWVyDfPUQGSSlbDEgWuJUU1afGE9WwlzpucMZ3yDRHIItkA==" - "resolved" "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.14.2.tgz" - "version" "7.14.2" +"@babel/plugin-proposal-dynamic-import@^7.18.6": + "integrity" "sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==" + "resolved" "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz" + "version" "7.18.6" dependencies: - "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-syntax-dynamic-import" "^7.8.3" -"@babel/plugin-proposal-export-namespace-from@^7.14.2": - "integrity" "sha512-sRxW3z3Zp3pFfLAgVEvzTFutTXax837oOatUIvSG9o5gRj9mKwm3br1Se5f4QalTQs9x4AzlA/HrCWbQIHASUQ==" - "resolved" "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.14.2.tgz" - "version" "7.14.2" +"@babel/plugin-proposal-export-namespace-from@^7.18.9": + "integrity" "sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==" + "resolved" "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz" + "version" "7.18.9" dependencies: - "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-plugin-utils" "^7.18.9" "@babel/plugin-syntax-export-namespace-from" "^7.8.3" -"@babel/plugin-proposal-json-strings@^7.14.2": - "integrity" "sha512-w2DtsfXBBJddJacXMBhElGEYqCZQqN99Se1qeYn8DVLB33owlrlLftIbMzn5nz1OITfDVknXF433tBrLEAOEjA==" - "resolved" "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.14.2.tgz" - "version" "7.14.2" +"@babel/plugin-proposal-json-strings@^7.18.6": + "integrity" "sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==" + "resolved" "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz" + "version" "7.18.6" dependencies: - "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-syntax-json-strings" "^7.8.3" -"@babel/plugin-proposal-logical-assignment-operators@^7.14.2": - "integrity" "sha512-1JAZtUrqYyGsS7IDmFeaem+/LJqujfLZ2weLR9ugB0ufUPjzf8cguyVT1g5im7f7RXxuLq1xUxEzvm68uYRtGg==" - "resolved" "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.14.2.tgz" - "version" "7.14.2" +"@babel/plugin-proposal-logical-assignment-operators@^7.18.9": + "integrity" "sha512-128YbMpjCrP35IOExw2Fq+x55LMP42DzhOhX2aNNIdI9avSWl2PI0yuBWarr3RYpZBSPtabfadkH2yeRiMD61Q==" + "resolved" "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.18.9.tgz" + "version" "7.18.9" dependencies: - "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-plugin-utils" "^7.18.9" "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" -"@babel/plugin-proposal-nullish-coalescing-operator@^7.14.2": - "integrity" "sha512-ebR0zU9OvI2N4qiAC38KIAK75KItpIPTpAtd2r4OZmMFeKbKJpUFLYP2EuDut82+BmYi8sz42B+TfTptJ9iG5Q==" - "resolved" "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.14.2.tgz" - "version" "7.14.2" +"@babel/plugin-proposal-nullish-coalescing-operator@^7.18.6": + "integrity" "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==" + "resolved" "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz" + "version" "7.18.6" dependencies: - "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" -"@babel/plugin-proposal-numeric-separator@^7.14.2": - "integrity" "sha512-DcTQY9syxu9BpU3Uo94fjCB3LN9/hgPS8oUL7KrSW3bA2ePrKZZPJcc5y0hoJAM9dft3pGfErtEUvxXQcfLxUg==" - "resolved" "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.14.2.tgz" - "version" "7.14.2" +"@babel/plugin-proposal-numeric-separator@^7.18.6": + "integrity" "sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==" + "resolved" "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz" + "version" "7.18.6" dependencies: - "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-syntax-numeric-separator" "^7.10.4" -"@babel/plugin-proposal-object-rest-spread@^7.14.2": - "integrity" "sha512-hBIQFxwZi8GIp934+nj5uV31mqclC1aYDhctDu5khTi9PCCUOczyy0b34W0oE9U/eJXiqQaKyVsmjeagOaSlbw==" - "resolved" "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.14.2.tgz" - "version" "7.14.2" +"@babel/plugin-proposal-object-rest-spread@^7.19.4": + "integrity" "sha512-wHmj6LDxVDnL+3WhXteUBaoM1aVILZODAUjg11kHqG4cOlfgMQGxw6aCgvrXrmaJR3Bn14oZhImyCPZzRpC93Q==" + "resolved" "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.19.4.tgz" + "version" "7.19.4" dependencies: - "@babel/compat-data" "^7.14.0" - "@babel/helper-compilation-targets" "^7.13.16" - "@babel/helper-plugin-utils" "^7.13.0" + "@babel/compat-data" "^7.19.4" + "@babel/helper-compilation-targets" "^7.19.3" + "@babel/helper-plugin-utils" "^7.19.0" "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-transform-parameters" "^7.14.2" + "@babel/plugin-transform-parameters" "^7.18.8" "@babel/plugin-proposal-object-rest-spread@7.12.1": "integrity" "sha512-s6SowJIjzlhx8o7lsFx5zmY4At6CTtDvgNQDdPzkBQucle58A6b/TTeEBYtyDgmcXjUTM+vE8YOGHZzzbc/ioA==" @@ -523,48 +540,48 @@ "@babel/plugin-syntax-object-rest-spread" "^7.8.0" "@babel/plugin-transform-parameters" "^7.12.1" -"@babel/plugin-proposal-optional-catch-binding@^7.14.2": - "integrity" "sha512-XtkJsmJtBaUbOxZsNk0Fvrv8eiqgneug0A6aqLFZ4TSkar2L5dSXWcnUKHgmjJt49pyB/6ZHvkr3dPgl9MOWRQ==" - "resolved" "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.14.2.tgz" - "version" "7.14.2" +"@babel/plugin-proposal-optional-catch-binding@^7.18.6": + "integrity" "sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==" + "resolved" "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz" + "version" "7.18.6" dependencies: - "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" -"@babel/plugin-proposal-optional-chaining@^7.13.12", "@babel/plugin-proposal-optional-chaining@^7.14.2": - "integrity" "sha512-qQByMRPwMZJainfig10BoaDldx/+VDtNcrA7qdNaEOAj6VXud+gfrkA8j4CRAU5HjnWREXqIpSpH30qZX1xivA==" - "resolved" "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.14.2.tgz" - "version" "7.14.2" +"@babel/plugin-proposal-optional-chaining@^7.18.9": + "integrity" "sha512-v5nwt4IqBXihxGsW2QmCWMDS3B3bzGIk/EQVZz2ei7f3NJl8NzAJVvUmpDW5q1CRNY+Beb/k58UAH1Km1N411w==" + "resolved" "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.18.9.tgz" + "version" "7.18.9" dependencies: - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/helper-skip-transparent-expression-wrappers" "^7.12.1" + "@babel/helper-plugin-utils" "^7.18.9" + "@babel/helper-skip-transparent-expression-wrappers" "^7.18.9" "@babel/plugin-syntax-optional-chaining" "^7.8.3" -"@babel/plugin-proposal-private-methods@^7.13.0": - "integrity" "sha512-MXyyKQd9inhx1kDYPkFRVOBXQ20ES8Pto3T7UZ92xj2mY0EVD8oAVzeyYuVfy/mxAdTSIayOvg+aVzcHV2bn6Q==" - "resolved" "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.13.0.tgz" - "version" "7.13.0" +"@babel/plugin-proposal-private-methods@^7.18.6": + "integrity" "sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==" + "resolved" "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz" + "version" "7.18.6" dependencies: - "@babel/helper-create-class-features-plugin" "^7.13.0" - "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-create-class-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-proposal-private-property-in-object@^7.14.0": - "integrity" "sha512-59ANdmEwwRUkLjB7CRtwJxxwtjESw+X2IePItA+RGQh+oy5RmpCh/EvVVvh5XQc3yxsm5gtv0+i9oBZhaDNVTg==" - "resolved" "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.14.0.tgz" - "version" "7.14.0" +"@babel/plugin-proposal-private-property-in-object@^7.18.6": + "integrity" "sha512-9Rysx7FOctvT5ouj5JODjAFAkgGoudQuLPamZb0v1TGLpapdNaftzifU8NTWQm0IRjqoYypdrSmyWgkocDQ8Dw==" + "resolved" "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.18.6.tgz" + "version" "7.18.6" dependencies: - "@babel/helper-annotate-as-pure" "^7.12.13" - "@babel/helper-create-class-features-plugin" "^7.14.0" - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/plugin-syntax-private-property-in-object" "^7.14.0" + "@babel/helper-annotate-as-pure" "^7.18.6" + "@babel/helper-create-class-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-syntax-private-property-in-object" "^7.14.5" -"@babel/plugin-proposal-unicode-property-regex@^7.12.13", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": - "integrity" "sha512-XyJmZidNfofEkqFV5VC/bLabGmO5QzenPO/YOfGuEbgU+2sSwMmio3YLb4WtBgcmmdwZHyVyv8on77IUjQ5Gvg==" - "resolved" "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.12.13.tgz" - "version" "7.12.13" +"@babel/plugin-proposal-unicode-property-regex@^7.18.6", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": + "integrity" "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==" + "resolved" "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz" + "version" "7.18.6" dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.12.13" - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-create-regexp-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-syntax-async-generators@^7.8.4": "integrity" "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==" @@ -580,12 +597,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.12.13" -"@babel/plugin-syntax-class-static-block@^7.12.13": - "integrity" "sha512-ZmKQ0ZXR0nYpHZIIuj9zE7oIqCx2hw9TKi+lIo73NNrMPAZGHfS92/VRV0ZmPj6H2ffBgyFHXvJ5NYsNeEaP2A==" - "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.12.13.tgz" - "version" "7.12.13" +"@babel/plugin-syntax-class-static-block@^7.14.5": + "integrity" "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz" + "version" "7.14.5" dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-dynamic-import@^7.8.3": "integrity" "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==" @@ -601,6 +618,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.3" +"@babel/plugin-syntax-import-assertions@^7.18.6": + "integrity" "sha512-/DU3RXad9+bZwrgWJQKbr39gYbJpLJHezqEzRzi/BHRlJ9zsQb4CK2CA/5apllXNomwA1qHwzvHl+AdEmC5krQ==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.18.6.tgz" + "version" "7.18.6" + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-syntax-json-strings@^7.8.3": "integrity" "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==" "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz" @@ -608,12 +632,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-jsx@^7.12.13": - "integrity" "sha512-d4HM23Q1K7oq/SLNmG6mRt85l2csmQ0cHRaxRXjKW0YFdEXqlZ5kzFQKH5Uc3rDJECgu+yCRgPkG04Mm98R/1g==" - "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.13.tgz" - "version" "7.12.13" +"@babel/plugin-syntax-jsx@^7.18.6": + "integrity" "sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz" + "version" "7.18.6" dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-syntax-jsx@7.12.1": "integrity" "sha512-1yRi7yAtB0ETgxdY9ti/p2TivUxJkTdhu/ZbF9MshVGqOx1TdB3b7xCXs49Fupgg50N45KcAsRP/ZqWjs9SRjg==" @@ -664,366 +688,370 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-private-property-in-object@^7.14.0": - "integrity" "sha512-bda3xF8wGl5/5btF794utNOL0Jw+9jE5C1sLZcoK7c4uonE/y3iQiyG+KbkF3WBV/paX58VCpjhxLPkdj5Fe4w==" - "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.0.tgz" - "version" "7.14.0" +"@babel/plugin-syntax-private-property-in-object@^7.14.5": + "integrity" "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz" + "version" "7.14.5" dependencies: - "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-syntax-top-level-await@^7.12.13": - "integrity" "sha512-A81F9pDwyS7yM//KwbCSDqy3Uj4NMIurtplxphWxoYtNPov7cJsDkAFNNyVlIZ3jwGycVsurZ+LtOA8gZ376iQ==" - "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.13.tgz" - "version" "7.12.13" +"@babel/plugin-syntax-top-level-await@^7.14.5": + "integrity" "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz" + "version" "7.14.5" dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-syntax-typescript@^7.12.13": - "integrity" "sha512-cHP3u1JiUiG2LFDKbXnwVad81GvfyIOmCD6HIEId6ojrY0Drfy2q1jw7BwN7dE84+kTnBjLkXoL3IEy/3JPu2w==" - "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.12.13.tgz" - "version" "7.12.13" +"@babel/plugin-syntax-typescript@^7.18.6": + "integrity" "sha512-mAWAuq4rvOepWCBid55JuRNvpTNf2UGVgoz4JV0fXEKolsVZDzsa4NqCef758WZJj/GDu0gVGItjKFiClTAmZA==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.18.6.tgz" + "version" "7.18.6" dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-arrow-functions@^7.13.0": - "integrity" "sha512-96lgJagobeVmazXFaDrbmCLQxBysKu7U6Do3mLsx27gf5Dk85ezysrs2BZUpXD703U/Su1xTBDxxar2oa4jAGg==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.13.0.tgz" - "version" "7.13.0" +"@babel/plugin-transform-arrow-functions@^7.18.6": + "integrity" "sha512-9S9X9RUefzrsHZmKMbDXxweEH+YlE8JJEuat9FdvW9Qh1cw7W64jELCtWNkPBPX5En45uy28KGvA/AySqUh8CQ==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.18.6.tgz" + "version" "7.18.6" dependencies: - "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-async-to-generator@^7.13.0": - "integrity" "sha512-3j6E004Dx0K3eGmhxVJxwwI89CTJrce7lg3UrtFuDAVQ/2+SJ/h/aSFOeE6/n0WB1GsOffsJp6MnPQNQ8nmwhg==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.13.0.tgz" - "version" "7.13.0" +"@babel/plugin-transform-async-to-generator@^7.18.6": + "integrity" "sha512-ARE5wZLKnTgPW7/1ftQmSi1CmkqqHo2DNmtztFhvgtOWSDfq0Cq9/9L+KnZNYSNrydBekhW3rwShduf59RoXag==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.18.6.tgz" + "version" "7.18.6" dependencies: - "@babel/helper-module-imports" "^7.12.13" - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/helper-remap-async-to-generator" "^7.13.0" + "@babel/helper-module-imports" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-remap-async-to-generator" "^7.18.6" -"@babel/plugin-transform-block-scoped-functions@^7.12.13": - "integrity" "sha512-zNyFqbc3kI/fVpqwfqkg6RvBgFpC4J18aKKMmv7KdQ/1GgREapSJAykLMVNwfRGO3BtHj3YQZl8kxCXPcVMVeg==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.12.13.tgz" - "version" "7.12.13" +"@babel/plugin-transform-block-scoped-functions@^7.18.6": + "integrity" "sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz" + "version" "7.18.6" dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-block-scoping@^7.14.2": - "integrity" "sha512-neZZcP19NugZZqNwMTH+KoBjx5WyvESPSIOQb4JHpfd+zPfqcH65RMu5xJju5+6q/Y2VzYrleQTr+b6METyyxg==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.14.2.tgz" - "version" "7.14.2" +"@babel/plugin-transform-block-scoping@^7.19.4": + "integrity" "sha512-934S2VLLlt2hRJwPf4MczaOr4hYF0z+VKPwqTNxyKX7NthTiPfhuKFWQZHXRM0vh/wo/VyXB3s4bZUNA08l+tQ==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.19.4.tgz" + "version" "7.19.4" dependencies: - "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-plugin-utils" "^7.19.0" -"@babel/plugin-transform-classes@^7.14.2": - "integrity" "sha512-7oafAVcucHquA/VZCsXv/gmuiHeYd64UJyyTYU+MPfNu0KeNlxw06IeENBO8bJjXVbolu+j1MM5aKQtH1OMCNg==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.14.2.tgz" - "version" "7.14.2" +"@babel/plugin-transform-classes@^7.19.0": + "integrity" "sha512-YfeEE9kCjqTS9IitkgfJuxjcEtLUHMqa8yUJ6zdz8vR7hKuo6mOy2C05P0F1tdMmDCeuyidKnlrw/iTppHcr2A==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.19.0.tgz" + "version" "7.19.0" dependencies: - "@babel/helper-annotate-as-pure" "^7.12.13" - "@babel/helper-function-name" "^7.14.2" - "@babel/helper-optimise-call-expression" "^7.12.13" - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/helper-replace-supers" "^7.13.12" - "@babel/helper-split-export-declaration" "^7.12.13" + "@babel/helper-annotate-as-pure" "^7.18.6" + "@babel/helper-compilation-targets" "^7.19.0" + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-function-name" "^7.19.0" + "@babel/helper-optimise-call-expression" "^7.18.6" + "@babel/helper-plugin-utils" "^7.19.0" + "@babel/helper-replace-supers" "^7.18.9" + "@babel/helper-split-export-declaration" "^7.18.6" "globals" "^11.1.0" -"@babel/plugin-transform-computed-properties@^7.13.0": - "integrity" "sha512-RRqTYTeZkZAz8WbieLTvKUEUxZlUTdmL5KGMyZj7FnMfLNKV4+r5549aORG/mgojRmFlQMJDUupwAMiF2Q7OUg==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.13.0.tgz" - "version" "7.13.0" +"@babel/plugin-transform-computed-properties@^7.18.9": + "integrity" "sha512-+i0ZU1bCDymKakLxn5srGHrsAPRELC2WIbzwjLhHW9SIE1cPYkLCL0NlnXMZaM1vhfgA2+M7hySk42VBvrkBRw==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.18.9.tgz" + "version" "7.18.9" dependencies: - "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-plugin-utils" "^7.18.9" -"@babel/plugin-transform-destructuring@^7.13.17": - "integrity" "sha512-UAUqiLv+uRLO+xuBKKMEpC+t7YRNVRqBsWWq1yKXbBZBje/t3IXCiSinZhjn/DC3qzBfICeYd2EFGEbHsh5RLA==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.13.17.tgz" - "version" "7.13.17" +"@babel/plugin-transform-destructuring@^7.19.4": + "integrity" "sha512-t0j0Hgidqf0aM86dF8U+vXYReUgJnlv4bZLsyoPnwZNrGY+7/38o8YjaELrvHeVfTZao15kjR0PVv0nju2iduA==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.19.4.tgz" + "version" "7.19.4" dependencies: - "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-plugin-utils" "^7.19.0" -"@babel/plugin-transform-dotall-regex@^7.12.13", "@babel/plugin-transform-dotall-regex@^7.4.4": - "integrity" "sha512-foDrozE65ZFdUC2OfgeOCrEPTxdB3yjqxpXh8CH+ipd9CHd4s/iq81kcUpyH8ACGNEPdFqbtzfgzbT/ZGlbDeQ==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.12.13.tgz" - "version" "7.12.13" +"@babel/plugin-transform-dotall-regex@^7.18.6", "@babel/plugin-transform-dotall-regex@^7.4.4": + "integrity" "sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.18.6.tgz" + "version" "7.18.6" dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.12.13" - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-create-regexp-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-duplicate-keys@^7.12.13": - "integrity" "sha512-NfADJiiHdhLBW3pulJlJI2NB0t4cci4WTZ8FtdIuNc2+8pslXdPtRRAEWqUY+m9kNOk2eRYbTAOipAxlrOcwwQ==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.12.13.tgz" - "version" "7.12.13" +"@babel/plugin-transform-duplicate-keys@^7.18.9": + "integrity" "sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.9.tgz" + "version" "7.18.9" dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.18.9" -"@babel/plugin-transform-exponentiation-operator@^7.12.13": - "integrity" "sha512-fbUelkM1apvqez/yYx1/oICVnGo2KM5s63mhGylrmXUxK/IAXSIf87QIxVfZldWf4QsOafY6vV3bX8aMHSvNrA==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.12.13.tgz" - "version" "7.12.13" +"@babel/plugin-transform-exponentiation-operator@^7.18.6": + "integrity" "sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz" + "version" "7.18.6" dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor" "^7.12.13" - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-for-of@^7.13.0": - "integrity" "sha512-IHKT00mwUVYE0zzbkDgNRP6SRzvfGCYsOxIRz8KsiaaHCcT9BWIkO+H9QRJseHBLOGBZkHUdHiqj6r0POsdytg==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.13.0.tgz" - "version" "7.13.0" +"@babel/plugin-transform-for-of@^7.18.8": + "integrity" "sha512-yEfTRnjuskWYo0k1mHUqrVWaZwrdq8AYbfrpqULOJOaucGSp4mNMVps+YtA8byoevxS/urwU75vyhQIxcCgiBQ==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.8.tgz" + "version" "7.18.8" dependencies: - "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-function-name@^7.12.13": - "integrity" "sha512-6K7gZycG0cmIwwF7uMK/ZqeCikCGVBdyP2J5SKNCXO5EOHcqi+z7Jwf8AmyDNcBgxET8DrEtCt/mPKPyAzXyqQ==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.12.13.tgz" - "version" "7.12.13" +"@babel/plugin-transform-function-name@^7.18.9": + "integrity" "sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.9.tgz" + "version" "7.18.9" dependencies: - "@babel/helper-function-name" "^7.12.13" - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-compilation-targets" "^7.18.9" + "@babel/helper-function-name" "^7.18.9" + "@babel/helper-plugin-utils" "^7.18.9" -"@babel/plugin-transform-literals@^7.12.13": - "integrity" "sha512-FW+WPjSR7hiUxMcKqyNjP05tQ2kmBCdpEpZHY1ARm96tGQCCBvXKnpjILtDplUnJ/eHZ0lALLM+d2lMFSpYJrQ==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.12.13.tgz" - "version" "7.12.13" +"@babel/plugin-transform-literals@^7.18.9": + "integrity" "sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.9.tgz" + "version" "7.18.9" dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.18.9" -"@babel/plugin-transform-member-expression-literals@^7.12.13": - "integrity" "sha512-kxLkOsg8yir4YeEPHLuO2tXP9R/gTjpuTOjshqSpELUN3ZAg2jfDnKUvzzJxObun38sw3wm4Uu69sX/zA7iRvg==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.12.13.tgz" - "version" "7.12.13" +"@babel/plugin-transform-member-expression-literals@^7.18.6": + "integrity" "sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.18.6.tgz" + "version" "7.18.6" dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-modules-amd@^7.14.2": - "integrity" "sha512-hPC6XBswt8P3G2D1tSV2HzdKvkqOpmbyoy+g73JG0qlF/qx2y3KaMmXb1fLrpmWGLZYA0ojCvaHdzFWjlmV+Pw==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.14.2.tgz" - "version" "7.14.2" +"@babel/plugin-transform-modules-amd@^7.18.6": + "integrity" "sha512-uG3od2mXvAtIFQIh0xrpLH6r5fpSQN04gIVovl+ODLdUMANokxQLZnPBHcjmv3GxRjnqwLuHvppjjcelqUFZvg==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.19.6.tgz" + "version" "7.19.6" dependencies: - "@babel/helper-module-transforms" "^7.14.2" - "@babel/helper-plugin-utils" "^7.13.0" - "babel-plugin-dynamic-import-node" "^2.3.3" + "@babel/helper-module-transforms" "^7.19.6" + "@babel/helper-plugin-utils" "^7.19.0" -"@babel/plugin-transform-modules-commonjs@^7.14.0": - "integrity" "sha512-EX4QePlsTaRZQmw9BsoPeyh5OCtRGIhwfLquhxGp5e32w+dyL8htOcDwamlitmNFK6xBZYlygjdye9dbd9rUlQ==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.14.0.tgz" - "version" "7.14.0" +"@babel/plugin-transform-modules-commonjs@^7.18.6": + "integrity" "sha512-8PIa1ym4XRTKuSsOUXqDG0YaOlEuTVvHMe5JCfgBMOtHvJKw/4NGovEGN33viISshG/rZNVrACiBmPQLvWN8xQ==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.19.6.tgz" + "version" "7.19.6" dependencies: - "@babel/helper-module-transforms" "^7.14.0" - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/helper-simple-access" "^7.13.12" - "babel-plugin-dynamic-import-node" "^2.3.3" + "@babel/helper-module-transforms" "^7.19.6" + "@babel/helper-plugin-utils" "^7.19.0" + "@babel/helper-simple-access" "^7.19.4" -"@babel/plugin-transform-modules-systemjs@^7.13.8": - "integrity" "sha512-hwqctPYjhM6cWvVIlOIe27jCIBgHCsdH2xCJVAYQm7V5yTMoilbVMi9f6wKg0rpQAOn6ZG4AOyvCqFF/hUh6+A==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.13.8.tgz" - "version" "7.13.8" +"@babel/plugin-transform-modules-systemjs@^7.19.0": + "integrity" "sha512-fqGLBepcc3kErfR9R3DnVpURmckXP7gj7bAlrTQyBxrigFqszZCkFkcoxzCp2v32XmwXLvbw+8Yq9/b+QqksjQ==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.19.6.tgz" + "version" "7.19.6" dependencies: - "@babel/helper-hoist-variables" "^7.13.0" - "@babel/helper-module-transforms" "^7.13.0" - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/helper-validator-identifier" "^7.12.11" - "babel-plugin-dynamic-import-node" "^2.3.3" + "@babel/helper-hoist-variables" "^7.18.6" + "@babel/helper-module-transforms" "^7.19.6" + "@babel/helper-plugin-utils" "^7.19.0" + "@babel/helper-validator-identifier" "^7.19.1" -"@babel/plugin-transform-modules-umd@^7.14.0": - "integrity" "sha512-nPZdnWtXXeY7I87UZr9VlsWme3Y0cfFFE41Wbxz4bbaexAjNMInXPFUpRRUJ8NoMm0Cw+zxbqjdPmLhcjfazMw==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.14.0.tgz" - "version" "7.14.0" +"@babel/plugin-transform-modules-umd@^7.18.6": + "integrity" "sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.6.tgz" + "version" "7.18.6" dependencies: - "@babel/helper-module-transforms" "^7.14.0" - "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-module-transforms" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-named-capturing-groups-regex@^7.12.13": - "integrity" "sha512-Xsm8P2hr5hAxyYblrfACXpQKdQbx4m2df9/ZZSQ8MAhsadw06+jW7s9zsSw6he+mJZXRlVMyEnVktJo4zjk1WA==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.12.13.tgz" - "version" "7.12.13" +"@babel/plugin-transform-named-capturing-groups-regex@^7.19.1": + "integrity" "sha512-oWk9l9WItWBQYS4FgXD4Uyy5kq898lvkXpXQxoJEY1RnvPk4R/Dvu2ebXU9q8lP+rlMwUQTFf2Ok6d78ODa0kw==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.19.1.tgz" + "version" "7.19.1" dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.12.13" + "@babel/helper-create-regexp-features-plugin" "^7.19.0" + "@babel/helper-plugin-utils" "^7.19.0" -"@babel/plugin-transform-new-target@^7.12.13": - "integrity" "sha512-/KY2hbLxrG5GTQ9zzZSc3xWiOy379pIETEhbtzwZcw9rvuaVV4Fqy7BYGYOWZnaoXIQYbbJ0ziXLa/sKcGCYEQ==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.12.13.tgz" - "version" "7.12.13" +"@babel/plugin-transform-new-target@^7.18.6": + "integrity" "sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.6.tgz" + "version" "7.18.6" dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-object-super@^7.12.13": - "integrity" "sha512-JzYIcj3XtYspZDV8j9ulnoMPZZnF/Cj0LUxPOjR89BdBVx+zYJI9MdMIlUZjbXDX+6YVeS6I3e8op+qQ3BYBoQ==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.12.13.tgz" - "version" "7.12.13" +"@babel/plugin-transform-object-super@^7.18.6": + "integrity" "sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz" + "version" "7.18.6" dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - "@babel/helper-replace-supers" "^7.12.13" + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-replace-supers" "^7.18.6" -"@babel/plugin-transform-parameters@^7.12.1", "@babel/plugin-transform-parameters@^7.14.2": - "integrity" "sha512-NxoVmA3APNCC1JdMXkdYXuQS+EMdqy0vIwyDHeKHiJKRxmp1qGSdb0JLEIoPRhkx6H/8Qi3RJ3uqOCYw8giy9A==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.14.2.tgz" - "version" "7.14.2" +"@babel/plugin-transform-parameters@^7.12.1", "@babel/plugin-transform-parameters@^7.18.8": + "integrity" "sha512-ivfbE3X2Ss+Fj8nnXvKJS6sjRG4gzwPMsP+taZC+ZzEGjAYlvENixmt1sZ5Ca6tWls+BlKSGKPJ6OOXvXCbkFg==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.18.8.tgz" + "version" "7.18.8" dependencies: - "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-property-literals@^7.12.13": - "integrity" "sha512-nqVigwVan+lR+g8Fj8Exl0UQX2kymtjcWfMOYM1vTYEKujeyv2SkMgazf2qNcK7l4SDiKyTA/nHCPqL4e2zo1A==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.12.13.tgz" - "version" "7.12.13" +"@babel/plugin-transform-property-literals@^7.18.6": + "integrity" "sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz" + "version" "7.18.6" dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-react-constant-elements@^7.12.1": - "integrity" "sha512-SNJU53VM/SjQL0bZhyU+f4kJQz7bQQajnrZRSaU21hruG/NWY41AEM9AWXeXX90pYr/C2yAmTgI6yW3LlLrAUQ==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.13.13.tgz" - "version" "7.13.13" +"@babel/plugin-transform-react-constant-elements@^7.18.12": + "integrity" "sha512-KS/G8YI8uwMGKErLFOHS/ekhqdHhpEloxs43NecQHVgo2QuQSyJhGIY1fL8UGl9wy5ItVwwoUL4YxVqsplGq2g==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.20.2.tgz" + "version" "7.20.2" dependencies: - "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-plugin-utils" "^7.20.2" -"@babel/plugin-transform-react-display-name@^7.12.13": - "integrity" "sha512-zCubvP+jjahpnFJvPaHPiGVfuVUjXHhFvJKQdNnsmSsiU9kR/rCZ41jHc++tERD2zV+p7Hr6is+t5b6iWTCqSw==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.14.2.tgz" - "version" "7.14.2" +"@babel/plugin-transform-react-display-name@^7.18.6": + "integrity" "sha512-TV4sQ+T013n61uMoygyMRm+xf04Bd5oqFpv2jAEQwSZ8NwQA7zeRPg1LMVg2PWi3zWBz+CLKD+v5bcpZ/BS0aA==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.18.6.tgz" + "version" "7.18.6" dependencies: - "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-react-jsx-development@^7.12.17": - "integrity" "sha512-BPjYV86SVuOaudFhsJR1zjgxxOhJDt6JHNoD48DxWEIxUCAMjV1ys6DYw4SDYZh0b1QsS2vfIA9t/ZsQGsDOUQ==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.12.17.tgz" - "version" "7.12.17" +"@babel/plugin-transform-react-jsx-development@^7.18.6": + "integrity" "sha512-SA6HEjwYFKF7WDjWcMcMGUimmw/nhNRDWxr+KaLSCrkD/LMDBvWRmHAYgE1HDeF8KUuI8OAu+RT6EOtKxSW2qA==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.18.6.tgz" + "version" "7.18.6" dependencies: - "@babel/plugin-transform-react-jsx" "^7.12.17" + "@babel/plugin-transform-react-jsx" "^7.18.6" -"@babel/plugin-transform-react-jsx@^7.12.17", "@babel/plugin-transform-react-jsx@^7.13.12": - "integrity" "sha512-jcEI2UqIcpCqB5U5DRxIl0tQEProI2gcu+g8VTIqxLO5Iidojb4d77q+fwGseCvd8af/lJ9masp4QWzBXFE2xA==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.13.12.tgz" - "version" "7.13.12" +"@babel/plugin-transform-react-jsx@^7.18.6": + "integrity" "sha512-UVEvX3tXie3Szm3emi1+G63jyw1w5IcMY0FSKM+CRnKRI5Mr1YbCNgsSTwoTwKphQEG9P+QqmuRFneJPZuHNhg==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.19.0.tgz" + "version" "7.19.0" dependencies: - "@babel/helper-annotate-as-pure" "^7.12.13" - "@babel/helper-module-imports" "^7.13.12" - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/plugin-syntax-jsx" "^7.12.13" - "@babel/types" "^7.13.12" + "@babel/helper-annotate-as-pure" "^7.18.6" + "@babel/helper-module-imports" "^7.18.6" + "@babel/helper-plugin-utils" "^7.19.0" + "@babel/plugin-syntax-jsx" "^7.18.6" + "@babel/types" "^7.19.0" -"@babel/plugin-transform-react-pure-annotations@^7.12.1": - "integrity" "sha512-RqeaHiwZtphSIUZ5I85PEH19LOSzxfuEazoY7/pWASCAIBuATQzpSVD+eT6MebeeZT2F4eSL0u4vw6n4Nm0Mjg==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.12.1.tgz" - "version" "7.12.1" - dependencies: - "@babel/helper-annotate-as-pure" "^7.10.4" - "@babel/helper-plugin-utils" "^7.10.4" +"@babel/plugin-transform-react-pure-annotations@^7.18.6": + "integrity" "sha512-I8VfEPg9r2TRDdvnHgPepTKvuRomzA8+u+nhY7qSI1fR2hRNebasZEETLyM5mAUr0Ku56OkXJ0I7NHJnO6cJiQ==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.18.6.tgz" + "version" "7.18.6" + dependencies: + "@babel/helper-annotate-as-pure" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-regenerator@^7.13.15": - "integrity" "sha512-Bk9cOLSz8DiurcMETZ8E2YtIVJbFCPGW28DJWUakmyVWtQSm6Wsf0p4B4BfEr/eL2Nkhe/CICiUiMOCi1TPhuQ==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.13.15.tgz" - "version" "7.13.15" +"@babel/plugin-transform-regenerator@^7.18.6": + "integrity" "sha512-poqRI2+qiSdeldcz4wTSTXBRryoq3Gc70ye7m7UD5Ww0nE29IXqMl6r7Nd15WBgRd74vloEMlShtH6CKxVzfmQ==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.18.6.tgz" + "version" "7.18.6" dependencies: - "regenerator-transform" "^0.14.2" + "@babel/helper-plugin-utils" "^7.18.6" + "regenerator-transform" "^0.15.0" -"@babel/plugin-transform-reserved-words@^7.12.13": - "integrity" "sha512-xhUPzDXxZN1QfiOy/I5tyye+TRz6lA7z6xaT4CLOjPRMVg1ldRf0LHw0TDBpYL4vG78556WuHdyO9oi5UmzZBg==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.12.13.tgz" - "version" "7.12.13" +"@babel/plugin-transform-reserved-words@^7.18.6": + "integrity" "sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.18.6.tgz" + "version" "7.18.6" dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-runtime@^7.12.15": - "integrity" "sha512-LyA2AiPkaYzI7G5e2YI4NCasTfFe7mZvlupNprDOB7CdNUHb2DQC4uV6oeZ0396gOcicUzUCh0MShL6wiUgk+Q==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.14.2.tgz" - "version" "7.14.2" +"@babel/plugin-transform-runtime@^7.18.6": + "integrity" "sha512-PRH37lz4JU156lYFW1p8OxE5i7d6Sl/zV58ooyr+q1J1lnQPyg5tIiXlIwNVhJaY4W3TmOtdc8jqdXQcB1v5Yw==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.19.6.tgz" + "version" "7.19.6" dependencies: - "@babel/helper-module-imports" "^7.13.12" - "@babel/helper-plugin-utils" "^7.13.0" - "babel-plugin-polyfill-corejs2" "^0.2.0" - "babel-plugin-polyfill-corejs3" "^0.2.0" - "babel-plugin-polyfill-regenerator" "^0.2.0" + "@babel/helper-module-imports" "^7.18.6" + "@babel/helper-plugin-utils" "^7.19.0" + "babel-plugin-polyfill-corejs2" "^0.3.3" + "babel-plugin-polyfill-corejs3" "^0.6.0" + "babel-plugin-polyfill-regenerator" "^0.4.1" "semver" "^6.3.0" -"@babel/plugin-transform-shorthand-properties@^7.12.13": - "integrity" "sha512-xpL49pqPnLtf0tVluuqvzWIgLEhuPpZzvs2yabUHSKRNlN7ScYU7aMlmavOeyXJZKgZKQRBlh8rHbKiJDraTSw==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.12.13.tgz" - "version" "7.12.13" - dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - -"@babel/plugin-transform-spread@^7.13.0": - "integrity" "sha512-V6vkiXijjzYeFmQTr3dBxPtZYLPcUfY34DebOU27jIl2M/Y8Egm52Hw82CSjjPqd54GTlJs5x+CR7HeNr24ckg==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.13.0.tgz" - "version" "7.13.0" - dependencies: - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/helper-skip-transparent-expression-wrappers" "^7.12.1" - -"@babel/plugin-transform-sticky-regex@^7.12.13": - "integrity" "sha512-Jc3JSaaWT8+fr7GRvQP02fKDsYk4K/lYwWq38r/UGfaxo89ajud321NH28KRQ7xy1Ybc0VUE5Pz8psjNNDUglg==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.12.13.tgz" - "version" "7.12.13" - dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - -"@babel/plugin-transform-template-literals@^7.13.0": - "integrity" "sha512-d67umW6nlfmr1iehCcBv69eSUSySk1EsIS8aTDX4Xo9qajAh6mYtcl4kJrBkGXuxZPEgVr7RVfAvNW6YQkd4Mw==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.13.0.tgz" - "version" "7.13.0" - dependencies: - "@babel/helper-plugin-utils" "^7.13.0" - -"@babel/plugin-transform-typeof-symbol@^7.12.13": - "integrity" "sha512-eKv/LmUJpMnu4npgfvs3LiHhJua5fo/CysENxa45YCQXZwKnGCQKAg87bvoqSW1fFT+HA32l03Qxsm8ouTY3ZQ==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.12.13.tgz" - "version" "7.12.13" - dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - -"@babel/plugin-transform-typescript@^7.13.0": - "integrity" "sha512-elQEwluzaU8R8dbVuW2Q2Y8Nznf7hnjM7+DSCd14Lo5fF63C9qNLbwZYbmZrtV9/ySpSUpkRpQXvJb6xyu4hCQ==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.13.0.tgz" - "version" "7.13.0" - dependencies: - "@babel/helper-create-class-features-plugin" "^7.13.0" - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/plugin-syntax-typescript" "^7.12.13" - -"@babel/plugin-transform-unicode-escapes@^7.12.13": - "integrity" "sha512-0bHEkdwJ/sN/ikBHfSmOXPypN/beiGqjo+o4/5K+vxEFNPRPdImhviPakMKG4x96l85emoa0Z6cDflsdBusZbw==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.12.13.tgz" - "version" "7.12.13" - dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - -"@babel/plugin-transform-unicode-regex@^7.12.13": - "integrity" "sha512-mDRzSNY7/zopwisPZ5kM9XKCfhchqIYwAKRERtEnhYscZB79VRekuRSoYbN0+KVe3y8+q1h6A4svXtP7N+UoCA==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.12.13.tgz" - "version" "7.12.13" - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.12.13" - "@babel/helper-plugin-utils" "^7.12.13" - -"@babel/preset-env@^7.12.1", "@babel/preset-env@^7.12.16": - "integrity" "sha512-7dD7lVT8GMrE73v4lvDEb85cgcQhdES91BSD7jS/xjC6QY8PnRhux35ac+GCpbiRhp8crexBvZZqnaL6VrY8TQ==" - "resolved" "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.14.2.tgz" - "version" "7.14.2" - dependencies: - "@babel/compat-data" "^7.14.0" - "@babel/helper-compilation-targets" "^7.13.16" - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/helper-validator-option" "^7.12.17" - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.13.12" - "@babel/plugin-proposal-async-generator-functions" "^7.14.2" - "@babel/plugin-proposal-class-properties" "^7.13.0" - "@babel/plugin-proposal-class-static-block" "^7.13.11" - "@babel/plugin-proposal-dynamic-import" "^7.14.2" - "@babel/plugin-proposal-export-namespace-from" "^7.14.2" - "@babel/plugin-proposal-json-strings" "^7.14.2" - "@babel/plugin-proposal-logical-assignment-operators" "^7.14.2" - "@babel/plugin-proposal-nullish-coalescing-operator" "^7.14.2" - "@babel/plugin-proposal-numeric-separator" "^7.14.2" - "@babel/plugin-proposal-object-rest-spread" "^7.14.2" - "@babel/plugin-proposal-optional-catch-binding" "^7.14.2" - "@babel/plugin-proposal-optional-chaining" "^7.14.2" - "@babel/plugin-proposal-private-methods" "^7.13.0" - "@babel/plugin-proposal-private-property-in-object" "^7.14.0" - "@babel/plugin-proposal-unicode-property-regex" "^7.12.13" +"@babel/plugin-transform-shorthand-properties@^7.18.6": + "integrity" "sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz" + "version" "7.18.6" + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-spread@^7.19.0": + "integrity" "sha512-RsuMk7j6n+r752EtzyScnWkQyuJdli6LdO5Klv8Yx0OfPVTcQkIUfS8clx5e9yHXzlnhOZF3CbQ8C2uP5j074w==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.19.0.tgz" + "version" "7.19.0" + dependencies: + "@babel/helper-plugin-utils" "^7.19.0" + "@babel/helper-skip-transparent-expression-wrappers" "^7.18.9" + +"@babel/plugin-transform-sticky-regex@^7.18.6": + "integrity" "sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.18.6.tgz" + "version" "7.18.6" + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-template-literals@^7.18.9": + "integrity" "sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.9.tgz" + "version" "7.18.9" + dependencies: + "@babel/helper-plugin-utils" "^7.18.9" + +"@babel/plugin-transform-typeof-symbol@^7.18.9": + "integrity" "sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.9.tgz" + "version" "7.18.9" + dependencies: + "@babel/helper-plugin-utils" "^7.18.9" + +"@babel/plugin-transform-typescript@^7.18.6": + "integrity" "sha512-z6fnuK9ve9u/0X0rRvI9MY0xg+DOUaABDYOe+/SQTxtlptaBB/V9JIUxJn6xp3lMBeb9qe8xSFmHU35oZDXD+w==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.19.3.tgz" + "version" "7.19.3" + dependencies: + "@babel/helper-create-class-features-plugin" "^7.19.0" + "@babel/helper-plugin-utils" "^7.19.0" + "@babel/plugin-syntax-typescript" "^7.18.6" + +"@babel/plugin-transform-unicode-escapes@^7.18.10": + "integrity" "sha512-kKAdAI+YzPgGY/ftStBFXTI1LZFju38rYThnfMykS+IXy8BVx+res7s2fxf1l8I35DV2T97ezo6+SGrXz6B3iQ==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.18.10.tgz" + "version" "7.18.10" + dependencies: + "@babel/helper-plugin-utils" "^7.18.9" + +"@babel/plugin-transform-unicode-regex@^7.18.6": + "integrity" "sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz" + "version" "7.18.6" + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/preset-env@^7.18.6", "@babel/preset-env@^7.19.4": + "integrity" "sha512-5QVOTXUdqTCjQuh2GGtdd7YEhoRXBMVGROAtsBeLGIbIz3obCBIfRMT1I3ZKkMgNzwkyCkftDXSSkHxnfVf4qg==" + "resolved" "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.19.4.tgz" + "version" "7.19.4" + dependencies: + "@babel/compat-data" "^7.19.4" + "@babel/helper-compilation-targets" "^7.19.3" + "@babel/helper-plugin-utils" "^7.19.0" + "@babel/helper-validator-option" "^7.18.6" + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.18.6" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.18.9" + "@babel/plugin-proposal-async-generator-functions" "^7.19.1" + "@babel/plugin-proposal-class-properties" "^7.18.6" + "@babel/plugin-proposal-class-static-block" "^7.18.6" + "@babel/plugin-proposal-dynamic-import" "^7.18.6" + "@babel/plugin-proposal-export-namespace-from" "^7.18.9" + "@babel/plugin-proposal-json-strings" "^7.18.6" + "@babel/plugin-proposal-logical-assignment-operators" "^7.18.9" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.18.6" + "@babel/plugin-proposal-numeric-separator" "^7.18.6" + "@babel/plugin-proposal-object-rest-spread" "^7.19.4" + "@babel/plugin-proposal-optional-catch-binding" "^7.18.6" + "@babel/plugin-proposal-optional-chaining" "^7.18.9" + "@babel/plugin-proposal-private-methods" "^7.18.6" + "@babel/plugin-proposal-private-property-in-object" "^7.18.6" + "@babel/plugin-proposal-unicode-property-regex" "^7.18.6" "@babel/plugin-syntax-async-generators" "^7.8.4" "@babel/plugin-syntax-class-properties" "^7.12.13" - "@babel/plugin-syntax-class-static-block" "^7.12.13" + "@babel/plugin-syntax-class-static-block" "^7.14.5" "@babel/plugin-syntax-dynamic-import" "^7.8.3" "@babel/plugin-syntax-export-namespace-from" "^7.8.3" + "@babel/plugin-syntax-import-assertions" "^7.18.6" "@babel/plugin-syntax-json-strings" "^7.8.3" "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" @@ -1031,52 +1059,52 @@ "@babel/plugin-syntax-object-rest-spread" "^7.8.3" "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" "@babel/plugin-syntax-optional-chaining" "^7.8.3" - "@babel/plugin-syntax-private-property-in-object" "^7.14.0" - "@babel/plugin-syntax-top-level-await" "^7.12.13" - "@babel/plugin-transform-arrow-functions" "^7.13.0" - "@babel/plugin-transform-async-to-generator" "^7.13.0" - "@babel/plugin-transform-block-scoped-functions" "^7.12.13" - "@babel/plugin-transform-block-scoping" "^7.14.2" - "@babel/plugin-transform-classes" "^7.14.2" - "@babel/plugin-transform-computed-properties" "^7.13.0" - "@babel/plugin-transform-destructuring" "^7.13.17" - "@babel/plugin-transform-dotall-regex" "^7.12.13" - "@babel/plugin-transform-duplicate-keys" "^7.12.13" - "@babel/plugin-transform-exponentiation-operator" "^7.12.13" - "@babel/plugin-transform-for-of" "^7.13.0" - "@babel/plugin-transform-function-name" "^7.12.13" - "@babel/plugin-transform-literals" "^7.12.13" - "@babel/plugin-transform-member-expression-literals" "^7.12.13" - "@babel/plugin-transform-modules-amd" "^7.14.2" - "@babel/plugin-transform-modules-commonjs" "^7.14.0" - "@babel/plugin-transform-modules-systemjs" "^7.13.8" - "@babel/plugin-transform-modules-umd" "^7.14.0" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.12.13" - "@babel/plugin-transform-new-target" "^7.12.13" - "@babel/plugin-transform-object-super" "^7.12.13" - "@babel/plugin-transform-parameters" "^7.14.2" - "@babel/plugin-transform-property-literals" "^7.12.13" - "@babel/plugin-transform-regenerator" "^7.13.15" - "@babel/plugin-transform-reserved-words" "^7.12.13" - "@babel/plugin-transform-shorthand-properties" "^7.12.13" - "@babel/plugin-transform-spread" "^7.13.0" - "@babel/plugin-transform-sticky-regex" "^7.12.13" - "@babel/plugin-transform-template-literals" "^7.13.0" - "@babel/plugin-transform-typeof-symbol" "^7.12.13" - "@babel/plugin-transform-unicode-escapes" "^7.12.13" - "@babel/plugin-transform-unicode-regex" "^7.12.13" - "@babel/preset-modules" "^0.1.4" - "@babel/types" "^7.14.2" - "babel-plugin-polyfill-corejs2" "^0.2.0" - "babel-plugin-polyfill-corejs3" "^0.2.0" - "babel-plugin-polyfill-regenerator" "^0.2.0" - "core-js-compat" "^3.9.0" + "@babel/plugin-syntax-private-property-in-object" "^7.14.5" + "@babel/plugin-syntax-top-level-await" "^7.14.5" + "@babel/plugin-transform-arrow-functions" "^7.18.6" + "@babel/plugin-transform-async-to-generator" "^7.18.6" + "@babel/plugin-transform-block-scoped-functions" "^7.18.6" + "@babel/plugin-transform-block-scoping" "^7.19.4" + "@babel/plugin-transform-classes" "^7.19.0" + "@babel/plugin-transform-computed-properties" "^7.18.9" + "@babel/plugin-transform-destructuring" "^7.19.4" + "@babel/plugin-transform-dotall-regex" "^7.18.6" + "@babel/plugin-transform-duplicate-keys" "^7.18.9" + "@babel/plugin-transform-exponentiation-operator" "^7.18.6" + "@babel/plugin-transform-for-of" "^7.18.8" + "@babel/plugin-transform-function-name" "^7.18.9" + "@babel/plugin-transform-literals" "^7.18.9" + "@babel/plugin-transform-member-expression-literals" "^7.18.6" + "@babel/plugin-transform-modules-amd" "^7.18.6" + "@babel/plugin-transform-modules-commonjs" "^7.18.6" + "@babel/plugin-transform-modules-systemjs" "^7.19.0" + "@babel/plugin-transform-modules-umd" "^7.18.6" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.19.1" + "@babel/plugin-transform-new-target" "^7.18.6" + "@babel/plugin-transform-object-super" "^7.18.6" + "@babel/plugin-transform-parameters" "^7.18.8" + "@babel/plugin-transform-property-literals" "^7.18.6" + "@babel/plugin-transform-regenerator" "^7.18.6" + "@babel/plugin-transform-reserved-words" "^7.18.6" + "@babel/plugin-transform-shorthand-properties" "^7.18.6" + "@babel/plugin-transform-spread" "^7.19.0" + "@babel/plugin-transform-sticky-regex" "^7.18.6" + "@babel/plugin-transform-template-literals" "^7.18.9" + "@babel/plugin-transform-typeof-symbol" "^7.18.9" + "@babel/plugin-transform-unicode-escapes" "^7.18.10" + "@babel/plugin-transform-unicode-regex" "^7.18.6" + "@babel/preset-modules" "^0.1.5" + "@babel/types" "^7.19.4" + "babel-plugin-polyfill-corejs2" "^0.3.3" + "babel-plugin-polyfill-corejs3" "^0.6.0" + "babel-plugin-polyfill-regenerator" "^0.4.1" + "core-js-compat" "^3.25.1" "semver" "^6.3.0" -"@babel/preset-modules@^0.1.4": - "integrity" "sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg==" - "resolved" "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.4.tgz" - "version" "0.1.4" +"@babel/preset-modules@^0.1.5": + "integrity" "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==" + "resolved" "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz" + "version" "0.1.5" dependencies: "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-proposal-unicode-property-regex" "^7.4.4" @@ -1084,448 +1112,510 @@ "@babel/types" "^7.4.4" "esutils" "^2.0.2" -"@babel/preset-react@^7.12.13", "@babel/preset-react@^7.12.5": - "integrity" "sha512-gx+tDLIE06sRjKJkVtpZ/t3mzCDOnPG+ggHZG9lffUbX8+wC739x20YQc9V35Do6ZAxaUc/HhVHIiOzz5MvDmA==" - "resolved" "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.13.13.tgz" - "version" "7.13.13" - dependencies: - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/helper-validator-option" "^7.12.17" - "@babel/plugin-transform-react-display-name" "^7.12.13" - "@babel/plugin-transform-react-jsx" "^7.13.12" - "@babel/plugin-transform-react-jsx-development" "^7.12.17" - "@babel/plugin-transform-react-pure-annotations" "^7.12.1" - -"@babel/preset-typescript@^7.12.16": - "integrity" "sha512-LXJwxrHy0N3f6gIJlYbLta1D9BDtHpQeqwzM0LIfjDlr6UE/D5Mc7W4iDiQzaE+ks0sTjT26ArcHWnJVt0QiHw==" - "resolved" "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.13.0.tgz" - "version" "7.13.0" - dependencies: - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/helper-validator-option" "^7.12.17" - "@babel/plugin-transform-typescript" "^7.13.0" - -"@babel/runtime-corejs3@^7.12.13": - "integrity" "sha512-0R0HTZWHLk6G8jIk0FtoX+AatCtKnswS98VhXwGImFc759PJRp4Tru0PQYZofyijTFUr+gT8Mu7sgXVJLQ0ceg==" - "resolved" "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.14.0.tgz" - "version" "7.14.0" - dependencies: - "core-js-pure" "^3.0.0" +"@babel/preset-react@^7.18.6": + "integrity" "sha512-zXr6atUmyYdiWRVLOZahakYmOBHtWc2WGCkP8PYTgZi0iJXDY2CN180TdrIW4OGOAdLc7TifzDIvtx6izaRIzg==" + "resolved" "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.18.6.tgz" + "version" "7.18.6" + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-validator-option" "^7.18.6" + "@babel/plugin-transform-react-display-name" "^7.18.6" + "@babel/plugin-transform-react-jsx" "^7.18.6" + "@babel/plugin-transform-react-jsx-development" "^7.18.6" + "@babel/plugin-transform-react-pure-annotations" "^7.18.6" + +"@babel/preset-typescript@^7.18.6": + "integrity" "sha512-s9ik86kXBAnD760aybBucdpnLsAt0jK1xqJn2juOn9lkOvSHV60os5hxoVJsPzMQxvnUJFAlkont2DvvaYEBtQ==" + "resolved" "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.18.6.tgz" + "version" "7.18.6" + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-validator-option" "^7.18.6" + "@babel/plugin-transform-typescript" "^7.18.6" + +"@babel/runtime-corejs3@^7.18.6": + "integrity" "sha512-oWNn1ZlGde7b4i/3tnixpH9qI0bOAACiUs+KEES4UUCnsPjVWFlWdLV/iwJuPC2qp3EowbAqsm+0XqNwnwYhxA==" + "resolved" "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.19.6.tgz" + "version" "7.19.6" + dependencies: + "core-js-pure" "^3.25.1" "regenerator-runtime" "^0.13.4" -"@babel/runtime@^7.1.2", "@babel/runtime@^7.10.2", "@babel/runtime@^7.10.3", "@babel/runtime@^7.12.1", "@babel/runtime@^7.12.5", "@babel/runtime@^7.8.4": - "integrity" "sha512-JELkvo/DlpNdJ7dlyw/eY7E0suy5i5GQH+Vlxaq1nsNJ+H7f4Vtv3jMeCEgRhZZQFXTjldYfQgv2qmM6M1v5wA==" - "resolved" "https://registry.npmjs.org/@babel/runtime/-/runtime-7.14.0.tgz" - "version" "7.14.0" +"@babel/runtime@^7.1.2", "@babel/runtime@^7.10.2", "@babel/runtime@^7.10.3", "@babel/runtime@^7.12.13", "@babel/runtime@^7.12.5", "@babel/runtime@^7.18.6", "@babel/runtime@^7.8.4": + "integrity" "sha512-EXpLCrk55f+cYqmHsSR+yD/0gAIMxxA9QK9lnQWzhMCvt+YmoBN7Zx94s++Kv0+unHk39vxNO8t+CMA2WSS3wA==" + "resolved" "https://registry.npmjs.org/@babel/runtime/-/runtime-7.19.4.tgz" + "version" "7.19.4" dependencies: "regenerator-runtime" "^0.13.4" -"@babel/template@^7.12.13", "@babel/template@^7.12.7": - "integrity" "sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA==" - "resolved" "https://registry.npmjs.org/@babel/template/-/template-7.12.13.tgz" - "version" "7.12.13" - dependencies: - "@babel/code-frame" "^7.12.13" - "@babel/parser" "^7.12.13" - "@babel/types" "^7.12.13" - -"@babel/traverse@^7.12.13", "@babel/traverse@^7.12.9", "@babel/traverse@^7.13.0", "@babel/traverse@^7.13.15", "@babel/traverse@^7.14.0", "@babel/traverse@^7.14.2", "@babel/traverse@^7.7.0": - "integrity" "sha512-TsdRgvBFHMyHOOzcP9S6QU0QQtjxlRpEYOy3mcCO5RgmC305ki42aSAmfZEMSSYBla2oZ9BMqYlncBaKmD/7iA==" - "resolved" "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.2.tgz" - "version" "7.14.2" - dependencies: - "@babel/code-frame" "^7.12.13" - "@babel/generator" "^7.14.2" - "@babel/helper-function-name" "^7.14.2" - "@babel/helper-split-export-declaration" "^7.12.13" - "@babel/parser" "^7.14.2" - "@babel/types" "^7.14.2" +"@babel/template@^7.12.7", "@babel/template@^7.18.10": + "integrity" "sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==" + "resolved" "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz" + "version" "7.18.10" + dependencies: + "@babel/code-frame" "^7.18.6" + "@babel/parser" "^7.18.10" + "@babel/types" "^7.18.10" + +"@babel/traverse@^7.12.9", "@babel/traverse@^7.18.8", "@babel/traverse@^7.19.0", "@babel/traverse@^7.19.1", "@babel/traverse@^7.19.4", "@babel/traverse@^7.19.6", "@babel/traverse@^7.7.0": + "integrity" "sha512-6l5HrUCzFM04mfbG09AagtYyR2P0B71B1wN7PfSPiksDPz2k5H9CBC1tcZpz2M8OxbKTPccByoOJ22rUKbpmQQ==" + "resolved" "https://registry.npmjs.org/@babel/traverse/-/traverse-7.19.6.tgz" + "version" "7.19.6" + dependencies: + "@babel/code-frame" "^7.18.6" + "@babel/generator" "^7.19.6" + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-function-name" "^7.19.0" + "@babel/helper-hoist-variables" "^7.18.6" + "@babel/helper-split-export-declaration" "^7.18.6" + "@babel/parser" "^7.19.6" + "@babel/types" "^7.19.4" "debug" "^4.1.0" "globals" "^11.1.0" -"@babel/types@^7.12.1", "@babel/types@^7.12.13", "@babel/types@^7.12.6", "@babel/types@^7.12.7", "@babel/types@^7.13.0", "@babel/types@^7.13.12", "@babel/types@^7.13.16", "@babel/types@^7.14.0", "@babel/types@^7.14.2", "@babel/types@^7.4.4", "@babel/types@^7.7.0": - "integrity" "sha512-SdjAG/3DikRHpUOjxZgnkbR11xUlyDMUFJdvnIgZEE16mqmY0BINMmc4//JMJglEmn6i7sq6p+mGrFWyZ98EEw==" - "resolved" "https://registry.npmjs.org/@babel/types/-/types-7.14.2.tgz" - "version" "7.14.2" +"@babel/types@^7.12.7", "@babel/types@^7.18.10", "@babel/types@^7.18.6", "@babel/types@^7.18.9", "@babel/types@^7.19.0", "@babel/types@^7.19.4", "@babel/types@^7.20.0", "@babel/types@^7.4.4", "@babel/types@^7.7.0": + "integrity" "sha512-69OnhBxSSgK0OzTJai4kyPDiKTIe3j+ctaHdIGVbRahTLAT7L3R9oeXHC2aVSuGYt3cVnoAMDmOCgJ2yaiLMvg==" + "resolved" "https://registry.npmjs.org/@babel/types/-/types-7.20.7.tgz" + "version" "7.20.7" dependencies: - "@babel/helper-validator-identifier" "^7.14.0" + "@babel/helper-string-parser" "^7.19.4" + "@babel/helper-validator-identifier" "^7.19.1" "to-fast-properties" "^2.0.0" +"@colors/colors@1.5.0": + "integrity" "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==" + "resolved" "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz" + "version" "1.5.0" + "@crowdin/cli@^3.6.1": - "integrity" "sha512-RUKFrPCX3R1MJPyRpBSqWFwmjbDlVWLHtXAzx2FPeyjnyMXrXLPJ8YEl4t8YU+96q/0t46qTdmMLeQmYyDEvGQ==" - "resolved" "https://registry.npmjs.org/@crowdin/cli/-/cli-3.6.1.tgz" - "version" "3.6.1" + "integrity" "sha512-4wQjqJZmU/mg3VYfRL6IYXw/pPAL9vdfW3QVSBovYA+bYaEt43ZuGsSrqeBGOhLehasWwRqklXWsl96gxQlLdw==" + "resolved" "https://registry.npmjs.org/@crowdin/cli/-/cli-3.9.0.tgz" + "version" "3.9.0" dependencies: + "njre" "^0.2.0" "shelljs" "^0.8.4" -"@docsearch/css@3.0.0-alpha.36": - "integrity" "sha512-zSN2SXuZPDqQaSFzYa1kOwToukqzhLHG7c66iO+/PlmWb6/RZ5cjTkG6VCJynlohRWea7AqZKWS/ptm8kM2Dmg==" - "resolved" "https://registry.npmjs.org/@docsearch/css/-/css-3.0.0-alpha.36.tgz" - "version" "3.0.0-alpha.36" +"@docsearch/css@3.2.2": + "integrity" "sha512-VB0Evx4ikS1ZlW1YVUw+vI9b3H/UXMCo4W/ZWy+n56Sho4KOqyCHcINVays91TJt7HTV/CKO3FCbm2VJg5Wipw==" + "resolved" "https://registry.npmjs.org/@docsearch/css/-/css-3.2.2.tgz" + "version" "3.2.2" -"@docsearch/react@^3.0.0-alpha.33": - "integrity" "sha512-synYZDHalvMzesFiy7kK+uoz4oTdWSTbe2cU+iiUjwFMyQ+WWjWwGVnvcvk+cjj9pRCVaZo5y5WpqNXq1j8k9Q==" - "resolved" "https://registry.npmjs.org/@docsearch/react/-/react-3.0.0-alpha.36.tgz" - "version" "3.0.0-alpha.36" +"@docsearch/react@^3.1.1": + "integrity" "sha512-1Hn2SNQUFVPrzqvaj+vxXZfsfn3rnW8CoyGAJ1LqXMY9py8GbxK8VfmJ5Z6z4LwG9849tGru/N6dp0cQO6r9Ag==" + "resolved" "https://registry.npmjs.org/@docsearch/react/-/react-3.2.2.tgz" + "version" "3.2.2" dependencies: - "@algolia/autocomplete-core" "1.0.0-alpha.44" - "@algolia/autocomplete-preset-algolia" "1.0.0-alpha.44" - "@docsearch/css" "3.0.0-alpha.36" + "@algolia/autocomplete-core" "1.7.1" + "@algolia/autocomplete-preset-algolia" "1.7.1" + "@docsearch/css" "3.2.2" "algoliasearch" "^4.0.0" -"@docusaurus/core@^2.0.0-beta.0", "@docusaurus/core@2.0.0-beta.0": - "integrity" "sha512-xWwpuEwFRKJmZvNGOpr/dyRDnx/psckLPsozQTg2hu3u81Wqu9gigWgYK/C2fPlEjxMcVw0/2WH+zwpbyWmF2Q==" - "resolved" "https://registry.npmjs.org/@docusaurus/core/-/core-2.0.0-beta.0.tgz" - "version" "2.0.0-beta.0" +"@docusaurus/core@^2.2.0", "@docusaurus/core@2.2.0": + "integrity" "sha512-Vd6XOluKQqzG12fEs9prJgDtyn6DPok9vmUWDR2E6/nV5Fl9SVkhEQOBxwObjk3kQh7OY7vguFaLh0jqdApWsA==" + "resolved" "https://registry.npmjs.org/@docusaurus/core/-/core-2.2.0.tgz" + "version" "2.2.0" dependencies: - "@babel/core" "^7.12.16" - "@babel/generator" "^7.12.15" + "@babel/core" "^7.18.6" + "@babel/generator" "^7.18.7" "@babel/plugin-syntax-dynamic-import" "^7.8.3" - "@babel/plugin-transform-runtime" "^7.12.15" - "@babel/preset-env" "^7.12.16" - "@babel/preset-react" "^7.12.13" - "@babel/preset-typescript" "^7.12.16" - "@babel/runtime" "^7.12.5" - "@babel/runtime-corejs3" "^7.12.13" - "@babel/traverse" "^7.12.13" - "@docusaurus/cssnano-preset" "2.0.0-beta.0" - "@docusaurus/react-loadable" "5.5.0" - "@docusaurus/types" "2.0.0-beta.0" - "@docusaurus/utils" "2.0.0-beta.0" - "@docusaurus/utils-validation" "2.0.0-beta.0" - "@endiliey/static-site-generator-webpack-plugin" "^4.0.0" - "@svgr/webpack" "^5.5.0" - "autoprefixer" "^10.2.5" - "babel-loader" "^8.2.2" - "babel-plugin-dynamic-import-node" "2.3.0" - "boxen" "^5.0.0" - "chalk" "^4.1.0" - "chokidar" "^3.5.1" - "clean-css" "^5.1.1" + "@babel/plugin-transform-runtime" "^7.18.6" + "@babel/preset-env" "^7.18.6" + "@babel/preset-react" "^7.18.6" + "@babel/preset-typescript" "^7.18.6" + "@babel/runtime" "^7.18.6" + "@babel/runtime-corejs3" "^7.18.6" + "@babel/traverse" "^7.18.8" + "@docusaurus/cssnano-preset" "2.2.0" + "@docusaurus/logger" "2.2.0" + "@docusaurus/mdx-loader" "2.2.0" + "@docusaurus/react-loadable" "5.5.2" + "@docusaurus/utils" "2.2.0" + "@docusaurus/utils-common" "2.2.0" + "@docusaurus/utils-validation" "2.2.0" + "@slorber/static-site-generator-webpack-plugin" "^4.0.7" + "@svgr/webpack" "^6.2.1" + "autoprefixer" "^10.4.7" + "babel-loader" "^8.2.5" + "babel-plugin-dynamic-import-node" "^2.3.3" + "boxen" "^6.2.1" + "chalk" "^4.1.2" + "chokidar" "^3.5.3" + "clean-css" "^5.3.0" + "cli-table3" "^0.6.2" + "combine-promises" "^1.1.0" "commander" "^5.1.0" - "copy-webpack-plugin" "^8.1.0" - "core-js" "^3.9.1" - "css-loader" "^5.1.1" - "css-minimizer-webpack-plugin" "^2.0.0" - "cssnano" "^5.0.1" - "del" "^6.0.0" + "copy-webpack-plugin" "^11.0.0" + "core-js" "^3.23.3" + "css-loader" "^6.7.1" + "css-minimizer-webpack-plugin" "^4.0.0" + "cssnano" "^5.1.12" + "del" "^6.1.1" "detect-port" "^1.3.0" - "eta" "^1.12.1" - "express" "^4.17.1" + "escape-html" "^1.0.3" + "eta" "^1.12.3" "file-loader" "^6.2.0" - "fs-extra" "^9.1.0" - "github-slugger" "^1.3.0" - "globby" "^11.0.2" - "html-minifier-terser" "^5.1.1" - "html-tags" "^3.1.0" - "html-webpack-plugin" "^5.2.0" + "fs-extra" "^10.1.0" + "html-minifier-terser" "^6.1.0" + "html-tags" "^3.2.0" + "html-webpack-plugin" "^5.5.0" "import-fresh" "^3.3.0" - "is-root" "^2.1.0" "leven" "^3.1.0" - "lodash" "^4.17.20" - "mini-css-extract-plugin" "^1.4.0" - "module-alias" "^2.2.2" - "nprogress" "^0.2.0" - "postcss" "^8.2.10" - "postcss-loader" "^5.2.0" - "prompts" "^2.4.0" - "react-dev-utils" "^11.0.1" - "react-error-overlay" "^6.0.9" - "react-helmet" "^6.1.0" - "react-loadable" "^5.5.0" + "lodash" "^4.17.21" + "mini-css-extract-plugin" "^2.6.1" + "postcss" "^8.4.14" + "postcss-loader" "^7.0.0" + "prompts" "^2.4.2" + "react-dev-utils" "^12.0.1" + "react-helmet-async" "^1.3.0" + "react-loadable" "npm:@docusaurus/react-loadable@5.5.2" "react-loadable-ssr-addon-v5-slorber" "^1.0.1" - "react-router" "^5.2.0" + "react-router" "^5.3.3" "react-router-config" "^5.1.1" - "react-router-dom" "^5.2.0" - "resolve-pathname" "^3.0.0" - "rtl-detect" "^1.0.2" - "semver" "^7.3.4" + "react-router-dom" "^5.3.3" + "rtl-detect" "^1.0.4" + "semver" "^7.3.7" "serve-handler" "^6.1.3" - "shelljs" "^0.8.4" - "std-env" "^2.2.1" - "strip-ansi" "^6.0.0" - "terser-webpack-plugin" "^5.1.1" - "tslib" "^2.1.0" + "shelljs" "^0.8.5" + "terser-webpack-plugin" "^5.3.3" + "tslib" "^2.4.0" "update-notifier" "^5.1.0" "url-loader" "^4.1.1" - "wait-on" "^5.2.1" - "webpack" "^5.28.0" - "webpack-bundle-analyzer" "^4.4.0" - "webpack-dev-server" "^3.11.2" - "webpack-merge" "^5.7.3" - "webpackbar" "^5.0.0-3" - -"@docusaurus/cssnano-preset@2.0.0-beta.0": - "integrity" "sha512-gqQHeQCDHZDd5NaiKZwDiyg75sBCqDyAsvmFukkDAty8xE7u9IhzbOQKvCAtwseuvzu2BNN41gnJ8bz7vZzQiw==" - "resolved" "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-2.0.0-beta.0.tgz" - "version" "2.0.0-beta.0" - dependencies: - "cssnano-preset-advanced" "^5.0.0" - "postcss" "^8.2.10" - "postcss-sort-media-queries" "^3.8.9" - -"@docusaurus/mdx-loader@2.0.0-beta.0": - "integrity" "sha512-oQLS2ZeUnqw79CV37glglZpaYgFfA5Az5lT83m5tJfMUZjoK4ehG1XWBeUzWy8QQNI452yAID8jz8jihEQeCcw==" - "resolved" "https://registry.npmjs.org/@docusaurus/mdx-loader/-/mdx-loader-2.0.0-beta.0.tgz" - "version" "2.0.0-beta.0" - dependencies: - "@babel/parser" "^7.12.16" - "@babel/traverse" "^7.12.13" - "@docusaurus/core" "2.0.0-beta.0" - "@docusaurus/utils" "2.0.0-beta.0" - "@mdx-js/mdx" "^1.6.21" - "@mdx-js/react" "^1.6.21" + "wait-on" "^6.0.1" + "webpack" "^5.73.0" + "webpack-bundle-analyzer" "^4.5.0" + "webpack-dev-server" "^4.9.3" + "webpack-merge" "^5.8.0" + "webpackbar" "^5.0.2" + +"@docusaurus/cssnano-preset@2.2.0": + "integrity" "sha512-mAAwCo4n66TMWBH1kXnHVZsakW9VAXJzTO4yZukuL3ro4F+JtkMwKfh42EG75K/J/YIFQG5I/Bzy0UH/hFxaTg==" + "resolved" "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-2.2.0.tgz" + "version" "2.2.0" + dependencies: + "cssnano-preset-advanced" "^5.3.8" + "postcss" "^8.4.14" + "postcss-sort-media-queries" "^4.2.1" + "tslib" "^2.4.0" + +"@docusaurus/logger@2.2.0": + "integrity" "sha512-DF3j1cA5y2nNsu/vk8AG7xwpZu6f5MKkPPMaaIbgXLnWGfm6+wkOeW7kNrxnM95YOhKUkJUophX69nGUnLsm0A==" + "resolved" "https://registry.npmjs.org/@docusaurus/logger/-/logger-2.2.0.tgz" + "version" "2.2.0" + dependencies: + "chalk" "^4.1.2" + "tslib" "^2.4.0" + +"@docusaurus/mdx-loader@2.2.0": + "integrity" "sha512-X2bzo3T0jW0VhUU+XdQofcEeozXOTmKQMvc8tUnWRdTnCvj4XEcBVdC3g+/jftceluiwSTNRAX4VBOJdNt18jA==" + "resolved" "https://registry.npmjs.org/@docusaurus/mdx-loader/-/mdx-loader-2.2.0.tgz" + "version" "2.2.0" + dependencies: + "@babel/parser" "^7.18.8" + "@babel/traverse" "^7.18.8" + "@docusaurus/logger" "2.2.0" + "@docusaurus/utils" "2.2.0" + "@mdx-js/mdx" "^1.6.22" "escape-html" "^1.0.3" "file-loader" "^6.2.0" - "fs-extra" "^9.1.0" - "github-slugger" "^1.3.0" - "gray-matter" "^4.0.2" + "fs-extra" "^10.1.0" + "image-size" "^1.0.1" "mdast-util-to-string" "^2.0.0" - "remark-emoji" "^2.1.0" + "remark-emoji" "^2.2.0" "stringify-object" "^3.3.0" - "unist-util-visit" "^2.0.2" + "tslib" "^2.4.0" + "unified" "^9.2.2" + "unist-util-visit" "^2.0.3" "url-loader" "^4.1.1" - "webpack" "^5.28.0" - -"@docusaurus/plugin-content-blog@2.0.0-beta.0": - "integrity" "sha512-lz63i5k/23RJ3Rk/2fIsYAoD8Wua3b5b0AbH2JoOhQu1iAIQiV8m91Z3XALBSzA3nBtAOIweNI7yzWL+JFSTvw==" - "resolved" "https://registry.npmjs.org/@docusaurus/plugin-content-blog/-/plugin-content-blog-2.0.0-beta.0.tgz" - "version" "2.0.0-beta.0" - dependencies: - "@docusaurus/core" "2.0.0-beta.0" - "@docusaurus/mdx-loader" "2.0.0-beta.0" - "@docusaurus/types" "2.0.0-beta.0" - "@docusaurus/utils" "2.0.0-beta.0" - "@docusaurus/utils-validation" "2.0.0-beta.0" - "chalk" "^4.1.0" + "webpack" "^5.73.0" + +"@docusaurus/module-type-aliases@2.2.0": + "integrity" "sha512-wDGW4IHKoOr9YuJgy7uYuKWrDrSpsUSDHLZnWQYM9fN7D5EpSmYHjFruUpKWVyxLpD/Wh0rW8hYZwdjJIQUQCQ==" + "resolved" "https://registry.npmjs.org/@docusaurus/module-type-aliases/-/module-type-aliases-2.2.0.tgz" + "version" "2.2.0" + dependencies: + "@docusaurus/react-loadable" "5.5.2" + "@docusaurus/types" "2.2.0" + "@types/history" "^4.7.11" + "@types/react" "*" + "@types/react-router-config" "*" + "@types/react-router-dom" "*" + "react-helmet-async" "*" + "react-loadable" "npm:@docusaurus/react-loadable@5.5.2" + +"@docusaurus/plugin-content-blog@2.2.0": + "integrity" "sha512-0mWBinEh0a5J2+8ZJXJXbrCk1tSTNf7Nm4tYAl5h2/xx+PvH/Bnu0V+7mMljYm/1QlDYALNIIaT/JcoZQFUN3w==" + "resolved" "https://registry.npmjs.org/@docusaurus/plugin-content-blog/-/plugin-content-blog-2.2.0.tgz" + "version" "2.2.0" + dependencies: + "@docusaurus/core" "2.2.0" + "@docusaurus/logger" "2.2.0" + "@docusaurus/mdx-loader" "2.2.0" + "@docusaurus/types" "2.2.0" + "@docusaurus/utils" "2.2.0" + "@docusaurus/utils-common" "2.2.0" + "@docusaurus/utils-validation" "2.2.0" + "cheerio" "^1.0.0-rc.12" "feed" "^4.2.2" - "fs-extra" "^9.1.0" - "globby" "^11.0.2" - "loader-utils" "^2.0.0" - "lodash" "^4.17.20" - "reading-time" "^1.3.0" - "remark-admonitions" "^1.2.1" - "tslib" "^2.1.0" - "webpack" "^5.28.0" - -"@docusaurus/plugin-content-docs@2.0.0-beta.0": - "integrity" "sha512-WdDQUh2rRCbfJswVc0vY9EaAspxgziqpVEZja8+BmQR/TZh7HuLplT6GJbiFbE4RvwM3+PwG/jHMPglYDK60kw==" - "resolved" "https://registry.npmjs.org/@docusaurus/plugin-content-docs/-/plugin-content-docs-2.0.0-beta.0.tgz" - "version" "2.0.0-beta.0" - dependencies: - "@docusaurus/core" "2.0.0-beta.0" - "@docusaurus/mdx-loader" "2.0.0-beta.0" - "@docusaurus/types" "2.0.0-beta.0" - "@docusaurus/utils" "2.0.0-beta.0" - "@docusaurus/utils-validation" "2.0.0-beta.0" - "chalk" "^4.1.0" - "combine-promises" "^1.1.0" - "execa" "^5.0.0" - "fs-extra" "^9.1.0" - "globby" "^11.0.2" - "import-fresh" "^3.2.2" - "js-yaml" "^4.0.0" - "loader-utils" "^1.2.3" - "lodash" "^4.17.20" - "remark-admonitions" "^1.2.1" - "shelljs" "^0.8.4" - "tslib" "^2.1.0" + "fs-extra" "^10.1.0" + "lodash" "^4.17.21" + "reading-time" "^1.5.0" + "tslib" "^2.4.0" + "unist-util-visit" "^2.0.3" "utility-types" "^3.10.0" - "webpack" "^5.28.0" - -"@docusaurus/plugin-content-pages@2.0.0-beta.0": - "integrity" "sha512-mk5LVVSvn+HJPKBaAs/Pceq/hTGxF2LVBvJEquuQz0NMAW3QdBWaYRRpOrL9CO8v+ygn5RuLslXsyZBsDNuhww==" - "resolved" "https://registry.npmjs.org/@docusaurus/plugin-content-pages/-/plugin-content-pages-2.0.0-beta.0.tgz" - "version" "2.0.0-beta.0" - dependencies: - "@docusaurus/core" "2.0.0-beta.0" - "@docusaurus/mdx-loader" "2.0.0-beta.0" - "@docusaurus/types" "2.0.0-beta.0" - "@docusaurus/utils" "2.0.0-beta.0" - "@docusaurus/utils-validation" "2.0.0-beta.0" - "globby" "^11.0.2" - "lodash" "^4.17.20" - "minimatch" "^3.0.4" - "remark-admonitions" "^1.2.1" - "slash" "^3.0.0" - "tslib" "^2.1.0" - "webpack" "^5.28.0" + "webpack" "^5.73.0" -"@docusaurus/plugin-debug@2.0.0-beta.0": - "integrity" "sha512-m75sZdF8Yccxfih3qfdQg9DucMTrYBnmeTA8GNmdVaK701Ip8t50d1pDJchtu0FSEh6vzVB9C6D2YD5YgVFp8A==" - "resolved" "https://registry.npmjs.org/@docusaurus/plugin-debug/-/plugin-debug-2.0.0-beta.0.tgz" - "version" "2.0.0-beta.0" +"@docusaurus/plugin-content-docs@2.2.0": + "integrity" "sha512-BOazBR0XjzsHE+2K1wpNxz5QZmrJgmm3+0Re0EVPYFGW8qndCWGNtXW/0lGKhecVPML8yyFeAmnUCIs7xM2wPw==" + "resolved" "https://registry.npmjs.org/@docusaurus/plugin-content-docs/-/plugin-content-docs-2.2.0.tgz" + "version" "2.2.0" dependencies: - "@docusaurus/core" "2.0.0-beta.0" - "@docusaurus/types" "2.0.0-beta.0" - "@docusaurus/utils" "2.0.0-beta.0" - "react-json-view" "^1.21.1" - "tslib" "^2.1.0" + "@docusaurus/core" "2.2.0" + "@docusaurus/logger" "2.2.0" + "@docusaurus/mdx-loader" "2.2.0" + "@docusaurus/module-type-aliases" "2.2.0" + "@docusaurus/types" "2.2.0" + "@docusaurus/utils" "2.2.0" + "@docusaurus/utils-validation" "2.2.0" + "@types/react-router-config" "^5.0.6" + "combine-promises" "^1.1.0" + "fs-extra" "^10.1.0" + "import-fresh" "^3.3.0" + "js-yaml" "^4.1.0" + "lodash" "^4.17.21" + "tslib" "^2.4.0" + "utility-types" "^3.10.0" + "webpack" "^5.73.0" -"@docusaurus/plugin-google-analytics@2.0.0-beta.0": - "integrity" "sha512-7lHrg1L+adc8VbiaLexa15i4fdq4MRPUTLMxRPAWz+QskhisW89Ryi2/gDmfMNqLblX84Qg2RASa+2gqO4wepw==" - "resolved" "https://registry.npmjs.org/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-2.0.0-beta.0.tgz" - "version" "2.0.0-beta.0" +"@docusaurus/plugin-content-pages@2.2.0": + "integrity" "sha512-+OTK3FQHk5WMvdelz8v19PbEbx+CNT6VSpx7nVOvMNs5yJCKvmqBJBQ2ZSxROxhVDYn+CZOlmyrC56NSXzHf6g==" + "resolved" "https://registry.npmjs.org/@docusaurus/plugin-content-pages/-/plugin-content-pages-2.2.0.tgz" + "version" "2.2.0" dependencies: - "@docusaurus/core" "2.0.0-beta.0" + "@docusaurus/core" "2.2.0" + "@docusaurus/mdx-loader" "2.2.0" + "@docusaurus/types" "2.2.0" + "@docusaurus/utils" "2.2.0" + "@docusaurus/utils-validation" "2.2.0" + "fs-extra" "^10.1.0" + "tslib" "^2.4.0" + "webpack" "^5.73.0" + +"@docusaurus/plugin-debug@2.2.0": + "integrity" "sha512-p9vOep8+7OVl6r/NREEYxf4HMAjV8JMYJ7Bos5fCFO0Wyi9AZEo0sCTliRd7R8+dlJXZEgcngSdxAUo/Q+CJow==" + "resolved" "https://registry.npmjs.org/@docusaurus/plugin-debug/-/plugin-debug-2.2.0.tgz" + "version" "2.2.0" + dependencies: + "@docusaurus/core" "2.2.0" + "@docusaurus/types" "2.2.0" + "@docusaurus/utils" "2.2.0" + "fs-extra" "^10.1.0" + "react-json-view" "^1.21.3" + "tslib" "^2.4.0" -"@docusaurus/plugin-google-gtag@2.0.0-beta.0": - "integrity" "sha512-V7zaYbhAMv0jexm5H/5sAnoM1GHibcn9QQk5UWC++x1kE0KRuLDZHV+9OyvW5wr0wWFajod/b88SpUpSMF5u+g==" - "resolved" "https://registry.npmjs.org/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-2.0.0-beta.0.tgz" - "version" "2.0.0-beta.0" +"@docusaurus/plugin-google-analytics@2.2.0": + "integrity" "sha512-+eZVVxVeEnV5nVQJdey9ZsfyEVMls6VyWTIj8SmX0k5EbqGvnIfET+J2pYEuKQnDIHxy+syRMoRM6AHXdHYGIg==" + "resolved" "https://registry.npmjs.org/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-2.2.0.tgz" + "version" "2.2.0" dependencies: - "@docusaurus/core" "2.0.0-beta.0" + "@docusaurus/core" "2.2.0" + "@docusaurus/types" "2.2.0" + "@docusaurus/utils-validation" "2.2.0" + "tslib" "^2.4.0" -"@docusaurus/plugin-sitemap@2.0.0-beta.0": - "integrity" "sha512-dvmk8Sr+6pBkiKDb7Rjdp0GeFDWPUlayoJWK3fN3g0Fno6uxFfYhNZyXJ+ObyCA7HoW5rzeBMiO+uAja19JXTg==" - "resolved" "https://registry.npmjs.org/@docusaurus/plugin-sitemap/-/plugin-sitemap-2.0.0-beta.0.tgz" - "version" "2.0.0-beta.0" +"@docusaurus/plugin-google-gtag@2.2.0": + "integrity" "sha512-6SOgczP/dYdkqUMGTRqgxAS1eTp6MnJDAQMy8VCF1QKbWZmlkx4agHDexihqmYyCujTYHqDAhm1hV26EET54NQ==" + "resolved" "https://registry.npmjs.org/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-2.2.0.tgz" + "version" "2.2.0" dependencies: - "@docusaurus/core" "2.0.0-beta.0" - "@docusaurus/types" "2.0.0-beta.0" - "@docusaurus/utils" "2.0.0-beta.0" - "@docusaurus/utils-validation" "2.0.0-beta.0" - "fs-extra" "^9.1.0" - "sitemap" "^6.3.6" - "tslib" "^2.1.0" + "@docusaurus/core" "2.2.0" + "@docusaurus/types" "2.2.0" + "@docusaurus/utils-validation" "2.2.0" + "tslib" "^2.4.0" -"@docusaurus/preset-classic@^2.0.0-beta.0": - "integrity" "sha512-cFpR0UaAeUt5qVx1bpidhlar6tiRNITIQlxP4bOVsjbxVTZhZ/cNuIz7C+2zFPCuKIflGXdTIQOrucPmd7z51Q==" - "resolved" "https://registry.npmjs.org/@docusaurus/preset-classic/-/preset-classic-2.0.0-beta.0.tgz" - "version" "2.0.0-beta.0" - dependencies: - "@docusaurus/core" "2.0.0-beta.0" - "@docusaurus/plugin-content-blog" "2.0.0-beta.0" - "@docusaurus/plugin-content-docs" "2.0.0-beta.0" - "@docusaurus/plugin-content-pages" "2.0.0-beta.0" - "@docusaurus/plugin-debug" "2.0.0-beta.0" - "@docusaurus/plugin-google-analytics" "2.0.0-beta.0" - "@docusaurus/plugin-google-gtag" "2.0.0-beta.0" - "@docusaurus/plugin-sitemap" "2.0.0-beta.0" - "@docusaurus/theme-classic" "2.0.0-beta.0" - "@docusaurus/theme-search-algolia" "2.0.0-beta.0" - -"@docusaurus/react-loadable@5.5.0": - "integrity" "sha512-Ld/kwUE6yATIOTLq3JCsWiTa/drisajwKqBQ2Rw6IcT+sFsKfYek8F2jSH8f68AT73xX97UehduZeCSlnuCBIg==" - "resolved" "https://registry.npmjs.org/@docusaurus/react-loadable/-/react-loadable-5.5.0.tgz" - "version" "5.5.0" +"@docusaurus/plugin-sitemap@2.2.0": + "integrity" "sha512-0jAmyRDN/aI265CbWZNZuQpFqiZuo+5otk2MylU9iVrz/4J7gSc+ZJ9cy4EHrEsW7PV8s1w18hIEsmcA1YgkKg==" + "resolved" "https://registry.npmjs.org/@docusaurus/plugin-sitemap/-/plugin-sitemap-2.2.0.tgz" + "version" "2.2.0" + dependencies: + "@docusaurus/core" "2.2.0" + "@docusaurus/logger" "2.2.0" + "@docusaurus/types" "2.2.0" + "@docusaurus/utils" "2.2.0" + "@docusaurus/utils-common" "2.2.0" + "@docusaurus/utils-validation" "2.2.0" + "fs-extra" "^10.1.0" + "sitemap" "^7.1.1" + "tslib" "^2.4.0" + +"@docusaurus/preset-classic@^2.2.0": + "integrity" "sha512-yKIWPGNx7BT8v2wjFIWvYrS+nvN04W+UameSFf8lEiJk6pss0kL6SG2MRvyULiI3BDxH+tj6qe02ncpSPGwumg==" + "resolved" "https://registry.npmjs.org/@docusaurus/preset-classic/-/preset-classic-2.2.0.tgz" + "version" "2.2.0" dependencies: + "@docusaurus/core" "2.2.0" + "@docusaurus/plugin-content-blog" "2.2.0" + "@docusaurus/plugin-content-docs" "2.2.0" + "@docusaurus/plugin-content-pages" "2.2.0" + "@docusaurus/plugin-debug" "2.2.0" + "@docusaurus/plugin-google-analytics" "2.2.0" + "@docusaurus/plugin-google-gtag" "2.2.0" + "@docusaurus/plugin-sitemap" "2.2.0" + "@docusaurus/theme-classic" "2.2.0" + "@docusaurus/theme-common" "2.2.0" + "@docusaurus/theme-search-algolia" "2.2.0" + "@docusaurus/types" "2.2.0" + +"@docusaurus/react-loadable@5.5.2": + "integrity" "sha512-A3dYjdBGuy0IGT+wyLIGIKLRE+sAk1iNk0f1HjNDysO7u8lhL4N3VEm+FAubmJbAztn94F7MxBTPmnixbiyFdQ==" + "resolved" "https://registry.npmjs.org/@docusaurus/react-loadable/-/react-loadable-5.5.2.tgz" + "version" "5.5.2" + dependencies: + "@types/react" "*" "prop-types" "^15.6.2" -"@docusaurus/theme-classic@2.0.0-beta.0": - "integrity" "sha512-cBNtwAyg3be7Gk41FazMtgyibAcfuYaGHhGHIDRsXfc/qp3RhbiGiei7tyh200QT0NgKZxiVQy/r4d0mtjC++Q==" - "resolved" "https://registry.npmjs.org/@docusaurus/theme-classic/-/theme-classic-2.0.0-beta.0.tgz" - "version" "2.0.0-beta.0" - dependencies: - "@docusaurus/core" "2.0.0-beta.0" - "@docusaurus/plugin-content-blog" "2.0.0-beta.0" - "@docusaurus/plugin-content-docs" "2.0.0-beta.0" - "@docusaurus/plugin-content-pages" "2.0.0-beta.0" - "@docusaurus/theme-common" "2.0.0-beta.0" - "@docusaurus/types" "2.0.0-beta.0" - "@docusaurus/utils" "2.0.0-beta.0" - "@docusaurus/utils-validation" "2.0.0-beta.0" - "@mdx-js/mdx" "^1.6.21" - "@mdx-js/react" "^1.6.21" - "chalk" "^4.1.0" - "clsx" "^1.1.1" - "copy-text-to-clipboard" "^3.0.0" - "fs-extra" "^9.1.0" - "globby" "^11.0.2" - "infima" "0.2.0-alpha.23" - "lodash" "^4.17.20" - "parse-numeric-range" "^1.2.0" - "postcss" "^8.2.10" - "prism-react-renderer" "^1.1.1" - "prismjs" "^1.23.0" - "prop-types" "^15.7.2" - "react-router-dom" "^5.2.0" - "rtlcss" "^3.1.2" - -"@docusaurus/theme-common@2.0.0-beta.0": - "integrity" "sha512-2rcVmQpvbdAgnzTWuM7Bfpu+2TQm928bhlvxn226jQy7IYz8ySRlIode63HhCtpx03hpdMCkrK6HxhfEcvHjQg==" - "resolved" "https://registry.npmjs.org/@docusaurus/theme-common/-/theme-common-2.0.0-beta.0.tgz" - "version" "2.0.0-beta.0" - dependencies: - "@docusaurus/core" "2.0.0-beta.0" - "@docusaurus/plugin-content-blog" "2.0.0-beta.0" - "@docusaurus/plugin-content-docs" "2.0.0-beta.0" - "@docusaurus/plugin-content-pages" "2.0.0-beta.0" - "@docusaurus/types" "2.0.0-beta.0" - "tslib" "^2.1.0" +"@docusaurus/theme-classic@2.2.0": + "integrity" "sha512-kjbg/qJPwZ6H1CU/i9d4l/LcFgnuzeiGgMQlt6yPqKo0SOJIBMPuz7Rnu3r/WWbZFPi//o8acclacOzmXdUUEg==" + "resolved" "https://registry.npmjs.org/@docusaurus/theme-classic/-/theme-classic-2.2.0.tgz" + "version" "2.2.0" + dependencies: + "@docusaurus/core" "2.2.0" + "@docusaurus/mdx-loader" "2.2.0" + "@docusaurus/module-type-aliases" "2.2.0" + "@docusaurus/plugin-content-blog" "2.2.0" + "@docusaurus/plugin-content-docs" "2.2.0" + "@docusaurus/plugin-content-pages" "2.2.0" + "@docusaurus/theme-common" "2.2.0" + "@docusaurus/theme-translations" "2.2.0" + "@docusaurus/types" "2.2.0" + "@docusaurus/utils" "2.2.0" + "@docusaurus/utils-common" "2.2.0" + "@docusaurus/utils-validation" "2.2.0" + "@mdx-js/react" "^1.6.22" + "clsx" "^1.2.1" + "copy-text-to-clipboard" "^3.0.1" + "infima" "0.2.0-alpha.42" + "lodash" "^4.17.21" + "nprogress" "^0.2.0" + "postcss" "^8.4.14" + "prism-react-renderer" "^1.3.5" + "prismjs" "^1.28.0" + "react-router-dom" "^5.3.3" + "rtlcss" "^3.5.0" + "tslib" "^2.4.0" + "utility-types" "^3.10.0" -"@docusaurus/theme-search-algolia@^2.0.0-beta.0", "@docusaurus/theme-search-algolia@2.0.0-beta.0": - "integrity" "sha512-/GhgAm4yuwqTXWTsWnqpFYxpjTv+t45Wk8q/LmTVINa+A7b6jkMkch2lygagIt69/ufDm2Uw6eYhgrmF4DJqfQ==" - "resolved" "https://registry.npmjs.org/@docusaurus/theme-search-algolia/-/theme-search-algolia-2.0.0-beta.0.tgz" - "version" "2.0.0-beta.0" - dependencies: - "@docsearch/react" "^3.0.0-alpha.33" - "@docusaurus/core" "2.0.0-beta.0" - "@docusaurus/theme-common" "2.0.0-beta.0" - "@docusaurus/utils" "2.0.0-beta.0" - "@docusaurus/utils-validation" "2.0.0-beta.0" - "algoliasearch" "^4.8.4" - "algoliasearch-helper" "^3.3.4" - "clsx" "^1.1.1" - "eta" "^1.12.1" - "lodash" "^4.17.20" +"@docusaurus/theme-common@2.2.0": + "integrity" "sha512-R8BnDjYoN90DCL75gP7qYQfSjyitXuP9TdzgsKDmSFPNyrdE3twtPNa2dIN+h+p/pr+PagfxwWbd6dn722A1Dw==" + "resolved" "https://registry.npmjs.org/@docusaurus/theme-common/-/theme-common-2.2.0.tgz" + "version" "2.2.0" + dependencies: + "@docusaurus/mdx-loader" "2.2.0" + "@docusaurus/module-type-aliases" "2.2.0" + "@docusaurus/plugin-content-blog" "2.2.0" + "@docusaurus/plugin-content-docs" "2.2.0" + "@docusaurus/plugin-content-pages" "2.2.0" + "@docusaurus/utils" "2.2.0" + "@types/history" "^4.7.11" + "@types/react" "*" + "@types/react-router-config" "*" + "clsx" "^1.2.1" + "parse-numeric-range" "^1.3.0" + "prism-react-renderer" "^1.3.5" + "tslib" "^2.4.0" + "utility-types" "^3.10.0" + +"@docusaurus/theme-search-algolia@^2.2.0", "@docusaurus/theme-search-algolia@2.2.0": + "integrity" "sha512-2h38B0tqlxgR2FZ9LpAkGrpDWVdXZ7vltfmTdX+4RsDs3A7khiNsmZB+x/x6sA4+G2V2CvrsPMlsYBy5X+cY1w==" + "resolved" "https://registry.npmjs.org/@docusaurus/theme-search-algolia/-/theme-search-algolia-2.2.0.tgz" + "version" "2.2.0" + dependencies: + "@docsearch/react" "^3.1.1" + "@docusaurus/core" "2.2.0" + "@docusaurus/logger" "2.2.0" + "@docusaurus/plugin-content-docs" "2.2.0" + "@docusaurus/theme-common" "2.2.0" + "@docusaurus/theme-translations" "2.2.0" + "@docusaurus/utils" "2.2.0" + "@docusaurus/utils-validation" "2.2.0" + "algoliasearch" "^4.13.1" + "algoliasearch-helper" "^3.10.0" + "clsx" "^1.2.1" + "eta" "^1.12.3" + "fs-extra" "^10.1.0" + "lodash" "^4.17.21" + "tslib" "^2.4.0" + "utility-types" "^3.10.0" -"@docusaurus/types@2.0.0-beta.0": - "integrity" "sha512-z9PI+GbtYwqTXnkX4/a/A6psDX2p8N2uWlN2f4ifrm8WY4WhR9yiTOh0uo0pIqqaUQQvkEq3o5hOXuXLECEs+w==" - "resolved" "https://registry.npmjs.org/@docusaurus/types/-/types-2.0.0-beta.0.tgz" - "version" "2.0.0-beta.0" +"@docusaurus/theme-translations@2.2.0": + "integrity" "sha512-3T140AG11OjJrtKlY4pMZ5BzbGRDjNs2co5hJ6uYJG1bVWlhcaFGqkaZ5lCgKflaNHD7UHBHU9Ec5f69jTdd6w==" + "resolved" "https://registry.npmjs.org/@docusaurus/theme-translations/-/theme-translations-2.2.0.tgz" + "version" "2.2.0" dependencies: + "fs-extra" "^10.1.0" + "tslib" "^2.4.0" + +"@docusaurus/types@*", "@docusaurus/types@2.2.0": + "integrity" "sha512-b6xxyoexfbRNRI8gjblzVOnLr4peCJhGbYGPpJ3LFqpi5nsFfoK4mmDLvWdeah0B7gmJeXabN7nQkFoqeSdmOw==" + "resolved" "https://registry.npmjs.org/@docusaurus/types/-/types-2.2.0.tgz" + "version" "2.2.0" + dependencies: + "@types/history" "^4.7.11" + "@types/react" "*" "commander" "^5.1.0" - "joi" "^17.4.0" - "querystring" "0.2.0" - "webpack" "^5.28.0" - "webpack-merge" "^5.7.3" + "joi" "^17.6.0" + "react-helmet-async" "^1.3.0" + "utility-types" "^3.10.0" + "webpack" "^5.73.0" + "webpack-merge" "^5.8.0" -"@docusaurus/utils-validation@2.0.0-beta.0": - "integrity" "sha512-ELl/FVJ6xBz35TisZ1NmJhjbiVXDeU++K531PEFPCPmwnQPh7S6hZXdPnR71/Kc3BmuN9X2ZkwGOqNKVfys2Bg==" - "resolved" "https://registry.npmjs.org/@docusaurus/utils-validation/-/utils-validation-2.0.0-beta.0.tgz" - "version" "2.0.0-beta.0" +"@docusaurus/utils-common@2.2.0": + "integrity" "sha512-qebnerHp+cyovdUseDQyYFvMW1n1nv61zGe5JJfoNQUnjKuApch3IVsz+/lZ9a38pId8kqehC1Ao2bW/s0ntDA==" + "resolved" "https://registry.npmjs.org/@docusaurus/utils-common/-/utils-common-2.2.0.tgz" + "version" "2.2.0" dependencies: - "@docusaurus/utils" "2.0.0-beta.0" - "chalk" "^4.1.0" - "joi" "^17.4.0" - "tslib" "^2.1.0" + "tslib" "^2.4.0" -"@docusaurus/utils@2.0.0-beta.0": - "integrity" "sha512-bvrT1EQu0maavr0Hb/lke9jmpzgVL/9tn5VQtbyahf472eJFY0bQDExllDrHK+l784SUvucqX0iaQeg0q6ySUw==" - "resolved" "https://registry.npmjs.org/@docusaurus/utils/-/utils-2.0.0-beta.0.tgz" - "version" "2.0.0-beta.0" +"@docusaurus/utils-validation@2.2.0": + "integrity" "sha512-I1hcsG3yoCkasOL5qQAYAfnmVoLei7apugT6m4crQjmDGxq+UkiRrq55UqmDDyZlac/6ax/JC0p+usZ6W4nVyg==" + "resolved" "https://registry.npmjs.org/@docusaurus/utils-validation/-/utils-validation-2.2.0.tgz" + "version" "2.2.0" dependencies: - "@docusaurus/types" "2.0.0-beta.0" - "@types/github-slugger" "^1.3.0" - "chalk" "^4.1.0" - "escape-string-regexp" "^4.0.0" - "fs-extra" "^9.1.0" - "gray-matter" "^4.0.2" - "lodash" "^4.17.20" - "resolve-pathname" "^3.0.0" - "tslib" "^2.1.0" + "@docusaurus/logger" "2.2.0" + "@docusaurus/utils" "2.2.0" + "joi" "^17.6.0" + "js-yaml" "^4.1.0" + "tslib" "^2.4.0" -"@endiliey/static-site-generator-webpack-plugin@^4.0.0": - "integrity" "sha512-3MBqYCs30qk1OBRC697NqhGouYbs71D1B8hrk/AFJC6GwF2QaJOQZtA1JYAaGSe650sZ8r5ppRTtCRXepDWlng==" - "resolved" "https://registry.npmjs.org/@endiliey/static-site-generator-webpack-plugin/-/static-site-generator-webpack-plugin-4.0.0.tgz" - "version" "4.0.0" +"@docusaurus/utils@2.2.0": + "integrity" "sha512-oNk3cjvx7Tt1Lgh/aeZAmFpGV2pDr5nHKrBVx6hTkzGhrnMuQqLt6UPlQjdYQ3QHXwyF/ZtZMO1D5Pfi0lu7SA==" + "resolved" "https://registry.npmjs.org/@docusaurus/utils/-/utils-2.2.0.tgz" + "version" "2.2.0" dependencies: - "bluebird" "^3.7.1" - "cheerio" "^0.22.0" - "eval" "^0.1.4" - "url" "^0.11.0" - "webpack-sources" "^1.4.3" + "@docusaurus/logger" "2.2.0" + "@svgr/webpack" "^6.2.1" + "file-loader" "^6.2.0" + "fs-extra" "^10.1.0" + "github-slugger" "^1.4.0" + "globby" "^11.1.0" + "gray-matter" "^4.0.3" + "js-yaml" "^4.1.0" + "lodash" "^4.17.21" + "micromatch" "^4.0.5" + "resolve-pathname" "^3.0.0" + "shelljs" "^0.8.5" + "tslib" "^2.4.0" + "url-loader" "^4.1.1" + "webpack" "^5.73.0" -"@eslint/eslintrc@^0.4.1": - "integrity" "sha512-5v7TDE9plVhvxQeWLXDTvFvJBdH6pEsdnl2g/dAptmuFEPedQ4Erq5rsDsX+mvAM610IhNaO2W5V1dOOnDKxkQ==" - "resolved" "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.1.tgz" - "version" "0.4.1" +"@eslint/eslintrc@^0.4.3": + "integrity" "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==" + "resolved" "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz" + "version" "0.4.3" dependencies: "ajv" "^6.12.4" "debug" "^4.1.1" "espree" "^7.3.0" - "globals" "^12.1.0" + "globals" "^13.9.0" "ignore" "^4.0.6" "import-fresh" "^3.2.1" "js-yaml" "^3.13.1" @@ -1533,18 +1623,113 @@ "strip-json-comments" "^3.1.1" "@hapi/hoek@^9.0.0": - "integrity" "sha512-sqKVVVOe5ivCaXDWivIJYVSaEgdQK9ul7a4Kity5Iw7u9+wBAPbX1RMSnLLmp7O4Vzj0WOWwMAJsTL00xwaNug==" - "resolved" "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.2.0.tgz" - "version" "9.2.0" + "integrity" "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==" + "resolved" "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz" + "version" "9.3.0" "@hapi/topo@^5.0.0": - "integrity" "sha512-tFJlT47db0kMqVm3H4nQYgn6Pwg10GTZHb1pwmSiv1K4ks6drQOtfEF5ZnPjkvC+y4/bUPHK+bc87QvLcL+WMw==" - "resolved" "https://registry.npmjs.org/@hapi/topo/-/topo-5.0.0.tgz" - "version" "5.0.0" + "integrity" "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==" + "resolved" "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz" + "version" "5.1.0" dependencies: "@hapi/hoek" "^9.0.0" -"@mdx-js/mdx@^1.6.21": +"@humanwhocodes/config-array@^0.5.0": + "integrity" "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==" + "resolved" "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz" + "version" "0.5.0" + dependencies: + "@humanwhocodes/object-schema" "^1.2.0" + "debug" "^4.1.1" + "minimatch" "^3.0.4" + +"@humanwhocodes/object-schema@^1.2.0": + "integrity" "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==" + "resolved" "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz" + "version" "1.2.1" + +"@jest/schemas@^29.0.0": + "integrity" "sha512-3Ab5HgYIIAnS0HjqJHQYZS+zXc4tUmTmBH3z83ajI6afXp8X3ZtdLX+nXx+I7LNkJD7uN9LAVhgnjDgZa2z0kA==" + "resolved" "https://registry.npmjs.org/@jest/schemas/-/schemas-29.0.0.tgz" + "version" "29.0.0" + dependencies: + "@sinclair/typebox" "^0.24.1" + +"@jest/types@^29.3.1": + "integrity" "sha512-d0S0jmmTpjnhCmNpApgX3jrUZgZ22ivKJRvL2lli5hpCRoNnp1f85r2/wpKfXuYu8E7Jjh1hGfhPyup1NM5AmA==" + "resolved" "https://registry.npmjs.org/@jest/types/-/types-29.3.1.tgz" + "version" "29.3.1" + dependencies: + "@jest/schemas" "^29.0.0" + "@types/istanbul-lib-coverage" "^2.0.0" + "@types/istanbul-reports" "^3.0.0" + "@types/node" "*" + "@types/yargs" "^17.0.8" + "chalk" "^4.0.0" + +"@jridgewell/gen-mapping@^0.1.0": + "integrity" "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==" + "resolved" "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz" + "version" "0.1.1" + dependencies: + "@jridgewell/set-array" "^1.0.0" + "@jridgewell/sourcemap-codec" "^1.4.10" + +"@jridgewell/gen-mapping@^0.3.0": + "integrity" "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==" + "resolved" "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz" + "version" "0.3.2" + dependencies: + "@jridgewell/set-array" "^1.0.1" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@jridgewell/trace-mapping" "^0.3.9" + +"@jridgewell/gen-mapping@^0.3.2": + "integrity" "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==" + "resolved" "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz" + "version" "0.3.2" + dependencies: + "@jridgewell/set-array" "^1.0.1" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@jridgewell/trace-mapping" "^0.3.9" + +"@jridgewell/resolve-uri@3.1.0": + "integrity" "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==" + "resolved" "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz" + "version" "3.1.0" + +"@jridgewell/set-array@^1.0.0", "@jridgewell/set-array@^1.0.1": + "integrity" "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==" + "resolved" "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz" + "version" "1.1.2" + +"@jridgewell/source-map@^0.3.2": + "integrity" "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==" + "resolved" "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz" + "version" "0.3.2" + dependencies: + "@jridgewell/gen-mapping" "^0.3.0" + "@jridgewell/trace-mapping" "^0.3.9" + +"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@1.4.14": + "integrity" "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" + "resolved" "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz" + "version" "1.4.14" + +"@jridgewell/trace-mapping@^0.3.14", "@jridgewell/trace-mapping@^0.3.9": + "integrity" "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==" + "resolved" "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz" + "version" "0.3.17" + dependencies: + "@jridgewell/resolve-uri" "3.1.0" + "@jridgewell/sourcemap-codec" "1.4.14" + +"@leichtgewicht/ip-codec@^2.0.1": + "integrity" "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==" + "resolved" "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz" + "version" "2.0.4" + +"@mdx-js/mdx@^1.6.22": "integrity" "sha512-AMxuLxPz2j5/6TpF/XSdKpQP1NlG0z11dFOlq+2IP/lSgl11GY8ji6S/rgsViN/L0BDvHvUMruRb7ub+24LUYA==" "resolved" "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-1.6.22.tgz" "version" "1.6.22" @@ -1569,7 +1754,7 @@ "unist-builder" "2.0.3" "unist-util-visit" "2.0.3" -"@mdx-js/react@^1.6.21": +"@mdx-js/react@^1.6.22": "integrity" "sha512-TDoPum4SHdfPiGSAaRBw7ECyI8VaHpK8GJugbJIJuqyh6kzw9ZLJZW3HGL3NNrJGxcAixUvqROm+YuQOo5eXtg==" "resolved" "https://registry.npmjs.org/@mdx-js/react/-/react-1.6.22.tgz" "version" "1.6.22" @@ -1579,36 +1764,36 @@ "resolved" "https://registry.npmjs.org/@mdx-js/util/-/util-1.6.22.tgz" "version" "1.6.22" -"@nodelib/fs.scandir@2.1.4": - "integrity" "sha512-33g3pMJk3bg5nXbL/+CY6I2eJDzZAni49PfJnL5fghPTggPvBd/pFNSgJsdAgWptuFu7qq/ERvOYFlhvsLTCKA==" - "resolved" "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.4.tgz" - "version" "2.1.4" +"@nodelib/fs.scandir@2.1.5": + "integrity" "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==" + "resolved" "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz" + "version" "2.1.5" dependencies: - "@nodelib/fs.stat" "2.0.4" + "@nodelib/fs.stat" "2.0.5" "run-parallel" "^1.1.9" -"@nodelib/fs.stat@^2.0.2", "@nodelib/fs.stat@2.0.4": - "integrity" "sha512-IYlHJA0clt2+Vg7bccq+TzRdJvv19c2INqBSsoOLp1je7xjtr7J26+WXR72MCdvU9q1qTzIWDfhMf+DRvQJK4Q==" - "resolved" "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.4.tgz" - "version" "2.0.4" +"@nodelib/fs.stat@^2.0.2", "@nodelib/fs.stat@2.0.5": + "integrity" "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==" + "resolved" "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz" + "version" "2.0.5" "@nodelib/fs.walk@^1.2.3": - "integrity" "sha512-8Broas6vTtW4GIXTAHDoE32hnN2M5ykgCpWGbuXHQ15vEMqr23pB76e/GZcYsZCHALv50ktd24qhEyKr6wBtow==" - "resolved" "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.6.tgz" - "version" "1.2.6" + "integrity" "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==" + "resolved" "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz" + "version" "1.2.8" dependencies: - "@nodelib/fs.scandir" "2.1.4" + "@nodelib/fs.scandir" "2.1.5" "fastq" "^1.6.0" -"@polka/url@^1.0.0-next.9": - "integrity" "sha512-6RglhutqrGFMO1MNUXp95RBuYIuc8wTnMAV5MUhLmjTOy78ncwOw7RgeQ/HeymkKXRhZd0s2DNrM1rL7unk3MQ==" - "resolved" "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.12.tgz" - "version" "1.0.0-next.12" +"@polka/url@^1.0.0-next.20": + "integrity" "sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==" + "resolved" "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.21.tgz" + "version" "1.0.0-next.21" -"@sideway/address@^4.1.0": - "integrity" "sha512-idTz8ibqWFrPU8kMirL0CoPH/A29XOzzAzpyN3zQ4kAWnzmNfFmRaoMNN6VI8ske5M73HZyhIaW4OuSFIdM4oA==" - "resolved" "https://registry.npmjs.org/@sideway/address/-/address-4.1.2.tgz" - "version" "4.1.2" +"@sideway/address@^4.1.3": + "integrity" "sha512-7vwq+rOHVWjyXxVlR76Agnvhy8I9rpzjosTESvmhNeXOXdZZB15Fl+TI9x1SiHZH5Jv2wTGduSxFDIaq0m3DUw==" + "resolved" "https://registry.npmjs.org/@sideway/address/-/address-4.1.4.tgz" + "version" "4.1.4" dependencies: "@hapi/hoek" "^9.0.0" @@ -1622,113 +1807,130 @@ "resolved" "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz" "version" "2.0.0" +"@sinclair/typebox@^0.24.1": + "integrity" "sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA==" + "resolved" "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.51.tgz" + "version" "0.24.51" + "@sindresorhus/is@^0.14.0": "integrity" "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==" "resolved" "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz" "version" "0.14.0" -"@svgr/babel-plugin-add-jsx-attribute@^5.4.0": - "integrity" "sha512-ZFf2gs/8/6B8PnSofI0inYXr2SDNTDScPXhN7k5EqD4aZ3gi6u+rbmZHVB8IM3wDyx8ntKACZbtXSm7oZGRqVg==" - "resolved" "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-5.4.0.tgz" - "version" "5.4.0" - -"@svgr/babel-plugin-remove-jsx-attribute@^5.4.0": - "integrity" "sha512-yaS4o2PgUtwLFGTKbsiAy6D0o3ugcUhWK0Z45umJ66EPWunAz9fuFw2gJuje6wqQvQWOTJvIahUwndOXb7QCPg==" - "resolved" "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-5.4.0.tgz" - "version" "5.4.0" - -"@svgr/babel-plugin-remove-jsx-empty-expression@^5.0.1": - "integrity" "sha512-LA72+88A11ND/yFIMzyuLRSMJ+tRKeYKeQ+mR3DcAZ5I4h5CPWN9AHyUzJbWSYp/u2u0xhmgOe0+E41+GjEueA==" - "resolved" "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-5.0.1.tgz" - "version" "5.0.1" - -"@svgr/babel-plugin-replace-jsx-attribute-value@^5.0.1": - "integrity" "sha512-PoiE6ZD2Eiy5mK+fjHqwGOS+IXX0wq/YDtNyIgOrc6ejFnxN4b13pRpiIPbtPwHEc+NT2KCjteAcq33/F1Y9KQ==" - "resolved" "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-5.0.1.tgz" - "version" "5.0.1" +"@slorber/static-site-generator-webpack-plugin@^4.0.7": + "integrity" "sha512-Ug7x6z5lwrz0WqdnNFOMYrDQNTPAprvHLSh6+/fmml3qUiz6l5eq+2MzLKWtn/q5K5NpSiFsZTP/fck/3vjSxA==" + "resolved" "https://registry.npmjs.org/@slorber/static-site-generator-webpack-plugin/-/static-site-generator-webpack-plugin-4.0.7.tgz" + "version" "4.0.7" + dependencies: + "eval" "^0.1.8" + "p-map" "^4.0.0" + "webpack-sources" "^3.2.2" -"@svgr/babel-plugin-svg-dynamic-title@^5.4.0": - "integrity" "sha512-zSOZH8PdZOpuG1ZVx/cLVePB2ibo3WPpqo7gFIjLV9a0QsuQAzJiwwqmuEdTaW2pegyBE17Uu15mOgOcgabQZg==" - "resolved" "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-5.4.0.tgz" - "version" "5.4.0" +"@svgr/babel-plugin-add-jsx-attribute@^6.5.1": + "integrity" "sha512-9PYGcXrAxitycIjRmZB+Q0JaN07GZIWaTBIGQzfaZv+qr1n8X1XUEJ5rZ/vx6OVD9RRYlrNnXWExQXcmZeD/BQ==" + "resolved" "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-6.5.1.tgz" + "version" "6.5.1" -"@svgr/babel-plugin-svg-em-dimensions@^5.4.0": - "integrity" "sha512-cPzDbDA5oT/sPXDCUYoVXEmm3VIoAWAPT6mSPTJNbQaBNUuEKVKyGH93oDY4e42PYHRW67N5alJx/eEol20abw==" - "resolved" "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-5.4.0.tgz" - "version" "5.4.0" - -"@svgr/babel-plugin-transform-react-native-svg@^5.4.0": - "integrity" "sha512-3eYP/SaopZ41GHwXma7Rmxcv9uRslRDTY1estspeB1w1ueZWd/tPlMfEOoccYpEMZU3jD4OU7YitnXcF5hLW2Q==" - "resolved" "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-5.4.0.tgz" - "version" "5.4.0" +"@svgr/babel-plugin-remove-jsx-attribute@*": + "integrity" "sha512-8zYdkym7qNyfXpWvu4yq46k41pyNM9SOstoWhKlm+IfdCE1DdnRKeMUPsWIEO/DEkaWxJ8T9esNdG3QwQ93jBA==" + "resolved" "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-6.5.0.tgz" + "version" "6.5.0" -"@svgr/babel-plugin-transform-svg-component@^5.5.0": - "integrity" "sha512-q4jSH1UUvbrsOtlo/tKcgSeiCHRSBdXoIoqX1pgcKK/aU3JD27wmMKwGtpB8qRYUYoyXvfGxUVKchLuR5pB3rQ==" - "resolved" "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-5.5.0.tgz" - "version" "5.5.0" +"@svgr/babel-plugin-remove-jsx-empty-expression@*": + "integrity" "sha512-NFdxMq3xA42Kb1UbzCVxplUc0iqSyM9X8kopImvFnB+uSDdzIHOdbs1op8ofAvVRtbg4oZiyRl3fTYeKcOe9Iw==" + "resolved" "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-6.5.0.tgz" + "version" "6.5.0" -"@svgr/babel-preset@^5.5.0": - "integrity" "sha512-4FiXBjvQ+z2j7yASeGPEi8VD/5rrGQk4Xrq3EdJmoZgz/tpqChpo5hgXDvmEauwtvOc52q8ghhZK4Oy7qph4ig==" - "resolved" "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-5.5.0.tgz" - "version" "5.5.0" - dependencies: - "@svgr/babel-plugin-add-jsx-attribute" "^5.4.0" - "@svgr/babel-plugin-remove-jsx-attribute" "^5.4.0" - "@svgr/babel-plugin-remove-jsx-empty-expression" "^5.0.1" - "@svgr/babel-plugin-replace-jsx-attribute-value" "^5.0.1" - "@svgr/babel-plugin-svg-dynamic-title" "^5.4.0" - "@svgr/babel-plugin-svg-em-dimensions" "^5.4.0" - "@svgr/babel-plugin-transform-react-native-svg" "^5.4.0" - "@svgr/babel-plugin-transform-svg-component" "^5.5.0" - -"@svgr/core@^5.5.0": - "integrity" "sha512-q52VOcsJPvV3jO1wkPtzTuKlvX7Y3xIcWRpCMtBF3MrteZJtBfQw/+u0B1BHy5ColpQc1/YVTrPEtSYIMNZlrQ==" - "resolved" "https://registry.npmjs.org/@svgr/core/-/core-5.5.0.tgz" - "version" "5.5.0" - dependencies: - "@svgr/plugin-jsx" "^5.5.0" +"@svgr/babel-plugin-replace-jsx-attribute-value@^6.5.1": + "integrity" "sha512-8DPaVVE3fd5JKuIC29dqyMB54sA6mfgki2H2+swh+zNJoynC8pMPzOkidqHOSc6Wj032fhl8Z0TVn1GiPpAiJg==" + "resolved" "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-6.5.1.tgz" + "version" "6.5.1" + +"@svgr/babel-plugin-svg-dynamic-title@^6.5.1": + "integrity" "sha512-FwOEi0Il72iAzlkaHrlemVurgSQRDFbk0OC8dSvD5fSBPHltNh7JtLsxmZUhjYBZo2PpcU/RJvvi6Q0l7O7ogw==" + "resolved" "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-6.5.1.tgz" + "version" "6.5.1" + +"@svgr/babel-plugin-svg-em-dimensions@^6.5.1": + "integrity" "sha512-gWGsiwjb4tw+ITOJ86ndY/DZZ6cuXMNE/SjcDRg+HLuCmwpcjOktwRF9WgAiycTqJD/QXqL2f8IzE2Rzh7aVXA==" + "resolved" "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-6.5.1.tgz" + "version" "6.5.1" + +"@svgr/babel-plugin-transform-react-native-svg@^6.5.1": + "integrity" "sha512-2jT3nTayyYP7kI6aGutkyfJ7UMGtuguD72OjeGLwVNyfPRBD8zQthlvL+fAbAKk5n9ZNcvFkp/b1lZ7VsYqVJg==" + "resolved" "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-6.5.1.tgz" + "version" "6.5.1" + +"@svgr/babel-plugin-transform-svg-component@^6.5.1": + "integrity" "sha512-a1p6LF5Jt33O3rZoVRBqdxL350oge54iZWHNI6LJB5tQ7EelvD/Mb1mfBiZNAan0dt4i3VArkFRjA4iObuNykQ==" + "resolved" "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-6.5.1.tgz" + "version" "6.5.1" + +"@svgr/babel-preset@^6.5.1": + "integrity" "sha512-6127fvO/FF2oi5EzSQOAjo1LE3OtNVh11R+/8FXa+mHx1ptAaS4cknIjnUA7e6j6fwGGJ17NzaTJFUwOV2zwCw==" + "resolved" "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-6.5.1.tgz" + "version" "6.5.1" + dependencies: + "@svgr/babel-plugin-add-jsx-attribute" "^6.5.1" + "@svgr/babel-plugin-remove-jsx-attribute" "*" + "@svgr/babel-plugin-remove-jsx-empty-expression" "*" + "@svgr/babel-plugin-replace-jsx-attribute-value" "^6.5.1" + "@svgr/babel-plugin-svg-dynamic-title" "^6.5.1" + "@svgr/babel-plugin-svg-em-dimensions" "^6.5.1" + "@svgr/babel-plugin-transform-react-native-svg" "^6.5.1" + "@svgr/babel-plugin-transform-svg-component" "^6.5.1" + +"@svgr/core@*", "@svgr/core@^6.0.0", "@svgr/core@^6.5.1": + "integrity" "sha512-/xdLSWxK5QkqG524ONSjvg3V/FkNyCv538OIBdQqPNaAta3AsXj/Bd2FbvR87yMbXO2hFSWiAe/Q6IkVPDw+mw==" + "resolved" "https://registry.npmjs.org/@svgr/core/-/core-6.5.1.tgz" + "version" "6.5.1" + dependencies: + "@babel/core" "^7.19.6" + "@svgr/babel-preset" "^6.5.1" + "@svgr/plugin-jsx" "^6.5.1" "camelcase" "^6.2.0" - "cosmiconfig" "^7.0.0" + "cosmiconfig" "^7.0.1" -"@svgr/hast-util-to-babel-ast@^5.5.0": - "integrity" "sha512-cAaR/CAiZRB8GP32N+1jocovUtvlj0+e65TB50/6Lcime+EA49m/8l+P2ko+XPJ4dw3xaPS3jOL4F2X4KWxoeQ==" - "resolved" "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-5.5.0.tgz" - "version" "5.5.0" +"@svgr/hast-util-to-babel-ast@^6.5.1": + "integrity" "sha512-1hnUxxjd83EAxbL4a0JDJoD3Dao3hmjvyvyEV8PzWmLK3B9m9NPlW7GKjFyoWE8nM7HnXzPcmmSyOW8yOddSXw==" + "resolved" "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-6.5.1.tgz" + "version" "6.5.1" dependencies: - "@babel/types" "^7.12.6" + "@babel/types" "^7.20.0" + "entities" "^4.4.0" -"@svgr/plugin-jsx@^5.5.0": - "integrity" "sha512-V/wVh33j12hGh05IDg8GpIUXbjAPnTdPTKuP4VNLggnwaHMPNQNae2pRnyTAILWCQdz5GyMqtO488g7CKM8CBA==" - "resolved" "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-5.5.0.tgz" - "version" "5.5.0" +"@svgr/plugin-jsx@^6.5.1": + "integrity" "sha512-+UdQxI3jgtSjCykNSlEMuy1jSRQlGC7pqBCPvkG/2dATdWo082zHTTK3uhnAju2/6XpE6B5mZ3z4Z8Ns01S8Gw==" + "resolved" "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-6.5.1.tgz" + "version" "6.5.1" dependencies: - "@babel/core" "^7.12.3" - "@svgr/babel-preset" "^5.5.0" - "@svgr/hast-util-to-babel-ast" "^5.5.0" - "svg-parser" "^2.0.2" + "@babel/core" "^7.19.6" + "@svgr/babel-preset" "^6.5.1" + "@svgr/hast-util-to-babel-ast" "^6.5.1" + "svg-parser" "^2.0.4" -"@svgr/plugin-svgo@^5.5.0": - "integrity" "sha512-r5swKk46GuQl4RrVejVwpeeJaydoxkdwkM1mBKOgJLBUJPGaLci6ylg/IjhrRsREKDkr4kbMWdgOtbXEh0fyLQ==" - "resolved" "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-5.5.0.tgz" - "version" "5.5.0" +"@svgr/plugin-svgo@^6.5.1": + "integrity" "sha512-omvZKf8ixP9z6GWgwbtmP9qQMPX4ODXi+wzbVZgomNFsUIlHA1sf4fThdwTWSsZGgvGAG6yE+b/F5gWUkcZ/iQ==" + "resolved" "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-6.5.1.tgz" + "version" "6.5.1" dependencies: - "cosmiconfig" "^7.0.0" + "cosmiconfig" "^7.0.1" "deepmerge" "^4.2.2" - "svgo" "^1.2.2" - -"@svgr/webpack@^5.5.0": - "integrity" "sha512-DOBOK255wfQxguUta2INKkzPj6AIS6iafZYiYmHn6W3pHlycSRRlvWKCfLDG10fXfLWqE3DJHgRUOyJYmARa7g==" - "resolved" "https://registry.npmjs.org/@svgr/webpack/-/webpack-5.5.0.tgz" - "version" "5.5.0" - dependencies: - "@babel/core" "^7.12.3" - "@babel/plugin-transform-react-constant-elements" "^7.12.1" - "@babel/preset-env" "^7.12.1" - "@babel/preset-react" "^7.12.5" - "@svgr/core" "^5.5.0" - "@svgr/plugin-jsx" "^5.5.0" - "@svgr/plugin-svgo" "^5.5.0" - "loader-utils" "^2.0.0" + "svgo" "^2.8.0" + +"@svgr/webpack@^6.2.1": + "integrity" "sha512-cQ/AsnBkXPkEK8cLbv4Dm7JGXq2XrumKnL1dRpJD9rIO2fTIlJI9a1uCciYG1F2aUsox/hJQyNGbt3soDxSRkA==" + "resolved" "https://registry.npmjs.org/@svgr/webpack/-/webpack-6.5.1.tgz" + "version" "6.5.1" + dependencies: + "@babel/core" "^7.19.6" + "@babel/plugin-transform-react-constant-elements" "^7.18.12" + "@babel/preset-env" "^7.19.4" + "@babel/preset-react" "^7.18.6" + "@babel/preset-typescript" "^7.18.6" + "@svgr/core" "^6.5.1" + "@svgr/plugin-jsx" "^6.5.1" + "@svgr/plugin-svgo" "^6.5.1" "@szmarczak/http-timer@^1.1.2": "integrity" "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==" @@ -1737,88 +1939,155 @@ dependencies: "defer-to-connect" "^1.0.1" -"@trysound/sax@0.1.1": - "integrity" "sha512-Z6DoceYb/1xSg5+e+ZlPZ9v0N16ZvZ+wYMraFue4HYrE4ttONKtsvruIRf6t9TBR0YvSOfi1hUU0fJfBLCDYow==" - "resolved" "https://registry.npmjs.org/@trysound/sax/-/sax-0.1.1.tgz" - "version" "0.1.1" +"@trysound/sax@0.2.0": + "integrity" "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==" + "resolved" "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz" + "version" "0.2.0" + +"@types/body-parser@*": + "integrity" "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==" + "resolved" "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz" + "version" "1.19.2" + dependencies: + "@types/connect" "*" + "@types/node" "*" -"@types/eslint-scope@^3.7.0": - "integrity" "sha512-O/ql2+rrCUe2W2rs7wMR+GqPRcgB6UiqN5RhrR5xruFlY7l9YLMn0ZkDzjoHLeiFkR8MCQZVudUuuvQ2BLC9Qw==" - "resolved" "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.0.tgz" - "version" "3.7.0" +"@types/bonjour@^3.5.9": + "integrity" "sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw==" + "resolved" "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.10.tgz" + "version" "3.5.10" + dependencies: + "@types/node" "*" + +"@types/connect-history-api-fallback@^1.3.5": + "integrity" "sha512-h8QJa8xSb1WD4fpKBDcATDNGXghFj6/3GRWG6dhmRcu0RX1Ubasur2Uvx5aeEwlf0MwblEC2bMzzMQntxnw/Cw==" + "resolved" "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.3.5.tgz" + "version" "1.3.5" + dependencies: + "@types/express-serve-static-core" "*" + "@types/node" "*" + +"@types/connect@*": + "integrity" "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==" + "resolved" "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz" + "version" "3.4.35" + dependencies: + "@types/node" "*" + +"@types/eslint-scope@^3.7.3": + "integrity" "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==" + "resolved" "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz" + "version" "3.7.4" dependencies: "@types/eslint" "*" "@types/estree" "*" "@types/eslint@*": - "integrity" "sha512-kUEPnMKrqbtpCq/KTaGFFKAcz6Ethm2EjCoKIDaCmfRBWLbFuTcOJfTlorwbnboXBzahqWLgUp1BQeKHiJzPUQ==" - "resolved" "https://registry.npmjs.org/@types/eslint/-/eslint-7.2.10.tgz" - "version" "7.2.10" + "integrity" "sha512-ehM7cCt2RSFs42mb+lcmhFT9ouIlV92PuaeRGn8N8c98oMjG4Z5pJHA9b1QiCcuqnbPSHcyfiD3mlhqMaHsQIw==" + "resolved" "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.7.tgz" + "version" "8.4.7" dependencies: "@types/estree" "*" "@types/json-schema" "*" -"@types/estree@*", "@types/estree@^0.0.47": - "integrity" "sha512-c5ciR06jK8u9BstrmJyO97m+klJrrhCf9u3rLu3DEAJBirxRqSCvDQoYKmxuYwQI5SZChAWu+tq9oVlGRuzPAg==" - "resolved" "https://registry.npmjs.org/@types/estree/-/estree-0.0.47.tgz" - "version" "0.0.47" - -"@types/github-slugger@^1.3.0": - "integrity" "sha512-J/rMZa7RqiH/rT29TEVZO4nBoDP9XJOjnbbIofg7GQKs4JIduEO3WLpte+6WeUz/TcrXKlY+bM7FYrp8yFB+3g==" - "resolved" "https://registry.npmjs.org/@types/github-slugger/-/github-slugger-1.3.0.tgz" - "version" "1.3.0" +"@types/estree@*", "@types/estree@^0.0.51": + "integrity" "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==" + "resolved" "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz" + "version" "0.0.51" -"@types/glob@^7.1.1": - "integrity" "sha512-SEYeGAIQIQX8NN6LDKprLjbrd5dARM5EXsd8GI/A5l0apYI1fGMWgPHSe4ZKL4eozlAyI+doUE9XbYS4xCkQ1w==" - "resolved" "https://registry.npmjs.org/@types/glob/-/glob-7.1.3.tgz" - "version" "7.1.3" +"@types/express-serve-static-core@*", "@types/express-serve-static-core@^4.17.31": + "integrity" "sha512-aI5h/VOkxOF2Z1saPy0Zsxs5avets/iaiAJYznQFm5By/pamU31xWKL//epiF4OfUA2qTOc9PV6tCUjhO8wlZA==" + "resolved" "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.32.tgz" + "version" "4.17.32" dependencies: - "@types/minimatch" "*" "@types/node" "*" + "@types/qs" "*" + "@types/range-parser" "*" + +"@types/express@*", "@types/express@^4.17.13": + "integrity" "sha512-Yv0k4bXGOH+8a+7bELd2PqHQsuiANB+A8a4gnQrkRWzrkKlb6KHaVvyXhqs04sVW/OWlbPyYxRgYlIXLfrufMQ==" + "resolved" "https://registry.npmjs.org/@types/express/-/express-4.17.15.tgz" + "version" "4.17.15" + dependencies: + "@types/body-parser" "*" + "@types/express-serve-static-core" "^4.17.31" + "@types/qs" "*" + "@types/serve-static" "*" "@types/hast@^2.0.0": - "integrity" "sha512-viwwrB+6xGzw+G1eWpF9geV3fnsDgXqHG+cqgiHrvQfDUW5hzhCyV7Sy3UJxhfRFBsgky2SSW33qi/YrIkjX5Q==" - "resolved" "https://registry.npmjs.org/@types/hast/-/hast-2.3.1.tgz" - "version" "2.3.1" + "integrity" "sha512-wLEm0QvaoawEDoTRwzTXp4b4jpwiJDvR5KMnFnVodm3scufTlBOWRD6N1OBf9TZMhjlNsSfcO5V+7AF4+Vy+9g==" + "resolved" "https://registry.npmjs.org/@types/hast/-/hast-2.3.4.tgz" + "version" "2.3.4" dependencies: "@types/unist" "*" -"@types/html-minifier-terser@^5.0.0": - "integrity" "sha512-giAlZwstKbmvMk1OO7WXSj4OZ0keXAcl2TQq4LWHiiPH2ByaH7WeUzng+Qej8UPxxv+8lRTuouo0iaNDBuzIBA==" - "resolved" "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz" - "version" "5.1.1" +"@types/history@^4.7.11": + "integrity" "sha512-qjDJRrmvBMiTx+jyLxvLfJU7UznFuokDv4f3WRuriHKERccVpFU+8XMQUAbDzoiJCsmexxRExQeMwwCdamSKDA==" + "resolved" "https://registry.npmjs.org/@types/history/-/history-4.7.11.tgz" + "version" "4.7.11" + +"@types/html-minifier-terser@^6.0.0": + "integrity" "sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==" + "resolved" "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz" + "version" "6.1.0" + +"@types/http-proxy@^1.17.8": + "integrity" "sha512-QsbSjA/fSk7xB+UXlCT3wHBy5ai9wOcNDWwZAtud+jXhwOM3l+EYZh8Lng4+/6n8uar0J7xILzqftJdJ/Wdfkw==" + "resolved" "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.9.tgz" + "version" "1.17.9" + dependencies: + "@types/node" "*" + +"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0": + "integrity" "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==" + "resolved" "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz" + "version" "2.0.4" + +"@types/istanbul-lib-report@*": + "integrity" "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==" + "resolved" "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "@types/istanbul-lib-coverage" "*" + +"@types/istanbul-reports@^3.0.0": + "integrity" "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==" + "resolved" "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz" + "version" "3.0.1" + dependencies: + "@types/istanbul-lib-report" "*" -"@types/json-schema@*", "@types/json-schema@^7.0.5", "@types/json-schema@^7.0.6": - "integrity" "sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA==" - "resolved" "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.7.tgz" - "version" "7.0.7" +"@types/json-schema@*", "@types/json-schema@^7.0.4", "@types/json-schema@^7.0.5", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9": + "integrity" "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==" + "resolved" "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz" + "version" "7.0.11" "@types/katex@^0.11.0": - "integrity" "sha512-27BfE8zASRLYfSBNMk5/+KIjr2CBBrH0i5lhsO04fca4TGirIIMay73v3zNkzqmsaeIa/Mi5kejWDcxPLAmkvA==" - "resolved" "https://registry.npmjs.org/@types/katex/-/katex-0.11.0.tgz" - "version" "0.11.0" + "integrity" "sha512-DUlIj2nk0YnJdlWgsFuVKcX27MLW0KbKmGVoUHmFr+74FYYNUDAaj9ZqTADvsbE8rfxuVmSFc7KczYn5Y09ozg==" + "resolved" "https://registry.npmjs.org/@types/katex/-/katex-0.11.1.tgz" + "version" "0.11.1" "@types/mdast@^3.0.0": - "integrity" "sha512-SXPBMnFVQg1s00dlMCc/jCdvPqdE4mXaMMCeRlxLDmTAEoegHT53xKtkDnzDTOcmMHUfcjyf36/YYZ6SxRdnsw==" - "resolved" "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.3.tgz" - "version" "3.0.3" + "integrity" "sha512-W864tg/Osz1+9f4lrGTZpCSO5/z4608eUp19tbozkq2HJK6i3z1kT0H9tlADXuYIb1YYOBByU4Jsqkk75q48qA==" + "resolved" "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.10.tgz" + "version" "3.0.10" dependencies: "@types/unist" "*" -"@types/minimatch@*": - "integrity" "sha512-1z8k4wzFnNjVK/tlxvrWuK5WMt6mydWWP7+zvH5eFep4oj+UkrfiJTRtjCeBXNpwaA/FYqqtb4/QS4ianFpIRA==" - "resolved" "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.4.tgz" - "version" "3.0.4" +"@types/mime@*": + "integrity" "sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA==" + "resolved" "https://registry.npmjs.org/@types/mime/-/mime-3.0.1.tgz" + "version" "3.0.1" "@types/node@*": - "integrity" "sha512-/WbxFeBU+0F79z9RdEOXH4CsDga+ibi5M8uEYr91u3CkT/pdWcV8MCook+4wDPnZBexRdwWS+PiVZ2xJviAzcQ==" - "resolved" "https://registry.npmjs.org/@types/node/-/node-15.0.3.tgz" - "version" "15.0.3" + "integrity" "sha512-fNjDQzzOsZeKZu5NATgXUPsaFaTxeRgFXoosrHivTl8RGeV733OLawXsGfEk9a8/tySyZUyiZ6E8LcjPFZ2y1A==" + "resolved" "https://registry.npmjs.org/@types/node/-/node-18.11.3.tgz" + "version" "18.11.3" -"@types/node@^14.14.28": - "integrity" "sha512-DssMqTV9UnnoxDWu959sDLZzfvqCF0qDNRjaWeYSui9xkFe61kKo4l1TWNTQONpuXEm+gLMRvdlzvNHBamzmEw==" - "resolved" "https://registry.npmjs.org/@types/node/-/node-14.14.45.tgz" - "version" "14.14.45" +"@types/node@^17.0.5": + "integrity" "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==" + "resolved" "https://registry.npmjs.org/@types/node/-/node-17.0.45.tgz" + "version" "17.0.45" "@types/parse-json@^4.0.0": "integrity" "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==" @@ -1831,160 +2100,237 @@ "version" "5.0.3" "@types/prop-types@*": - "integrity" "sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw==" - "resolved" "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.3.tgz" - "version" "15.7.3" + "integrity" "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==" + "resolved" "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz" + "version" "15.7.5" + +"@types/qs@*": + "integrity" "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==" + "resolved" "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz" + "version" "6.9.7" + +"@types/range-parser@*": + "integrity" "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==" + "resolved" "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz" + "version" "1.2.4" + +"@types/react-router-config@*", "@types/react-router-config@^5.0.6": + "integrity" "sha512-db1mx37a1EJDf1XeX8jJN7R3PZABmJQXR8r28yUjVMFSjkmnQo6X6pOEEmNl+Tp2gYQOGPdYbFIipBtdElZ3Yg==" + "resolved" "https://registry.npmjs.org/@types/react-router-config/-/react-router-config-5.0.6.tgz" + "version" "5.0.6" + dependencies: + "@types/history" "^4.7.11" + "@types/react" "*" + "@types/react-router" "*" + +"@types/react-router-dom@*": + "integrity" "sha512-kpqnYK4wcdm5UaWI3fLcELopqLrHgLqNsdpHauzlQktfkHL3npOSwtj1Uz9oKBAzs7lFtVkV8j83voAz2D8fhw==" + "resolved" "https://registry.npmjs.org/@types/react-router-dom/-/react-router-dom-5.3.3.tgz" + "version" "5.3.3" + dependencies: + "@types/history" "^4.7.11" + "@types/react" "*" + "@types/react-router" "*" -"@types/q@^1.5.1": - "integrity" "sha512-1HcDas8SEj4z1Wc696tH56G8OlRaH/sqZOynNNB+HF0WOeXPaxTtbYzJY2oEfiUxjSKjhCKr+MvR7dCHcEelug==" - "resolved" "https://registry.npmjs.org/@types/q/-/q-1.5.4.tgz" - "version" "1.5.4" +"@types/react-router@*": + "integrity" "sha512-jGjmu/ZqS7FjSH6owMcD5qpq19+1RS9DeVRqfl1FeBMxTDQAGwlMWOcs52NDoXaNKyG3d1cYQFMs9rCrb88o9Q==" + "resolved" "https://registry.npmjs.org/@types/react-router/-/react-router-5.1.20.tgz" + "version" "5.1.20" + dependencies: + "@types/history" "^4.7.11" + "@types/react" "*" -"@types/react@>= 16.8.0 < 18.0.0": - "integrity" "sha512-bj4biDB9ZJmGAYTWSKJly6bMr4BLUiBrx9ujiJEoP9XIDY9CTaPGxE5QWN/1WjpPLzYF7/jRNnV2nNxNe970sw==" - "resolved" "https://registry.npmjs.org/@types/react/-/react-17.0.5.tgz" - "version" "17.0.5" +"@types/react@*", "@types/react@>= 16.8.0 < 19.0.0": + "integrity" "sha512-hCR3PJQsAIXyxhTNSiDFY//LhnMZWpNNr5etoCqx/iUfGc5gXWtQR2Phl908jVR6uPXacojQWTg4qRpkxTuGug==" + "resolved" "https://registry.npmjs.org/@types/react/-/react-18.0.26.tgz" + "version" "18.0.26" dependencies: "@types/prop-types" "*" "@types/scheduler" "*" "csstype" "^3.0.2" +"@types/retry@0.12.0": + "integrity" "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==" + "resolved" "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz" + "version" "0.12.0" + "@types/sax@^1.2.1": - "integrity" "sha512-dqYdvN7Sbw8QT/0Ci5rhjE4/iCMJEM0Y9rHpCu+gGXD9Lwbz28t6HI2yegsB6BoV1sShRMU6lAmAcgRjmFy7LA==" - "resolved" "https://registry.npmjs.org/@types/sax/-/sax-1.2.1.tgz" - "version" "1.2.1" + "integrity" "sha512-pSAff4IAxJjfAXUG6tFkO7dsSbTmf8CtUpfhhZ5VhkRpC4628tJhh3+V6H1E+/Gs9piSzYKT5yzHO5M4GG9jkw==" + "resolved" "https://registry.npmjs.org/@types/sax/-/sax-1.2.4.tgz" + "version" "1.2.4" dependencies: "@types/node" "*" "@types/scheduler@*": - "integrity" "sha512-EaCxbanVeyxDRTQBkdLb3Bvl/HK7PBK6UJjsSixB0iHKoWxE5uu2Q/DgtpOhPIojN0Zl1whvOd7PoHs2P0s5eA==" - "resolved" "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.1.tgz" - "version" "0.16.1" - -"@types/unist@*", "@types/unist@^2.0.0", "@types/unist@^2.0.2", "@types/unist@^2.0.3": - "integrity" "sha512-FvUupuM3rlRsRtCN+fDudtmytGO6iHJuuRKS1Ss0pG5z8oX0diNEw94UEL7hgDbpN94rgaK5R7sWm6RrSkZuAQ==" - "resolved" "https://registry.npmjs.org/@types/unist/-/unist-2.0.3.tgz" - "version" "2.0.3" + "integrity" "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==" + "resolved" "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz" + "version" "0.16.2" -"@webassemblyjs/ast@1.11.0": - "integrity" "sha512-kX2W49LWsbthrmIRMbQZuQDhGtjyqXfEmmHyEi4XWnSZtPmxY0+3anPIzsnRb45VH/J55zlOfWvZuY47aJZTJg==" - "resolved" "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.0.tgz" - "version" "1.11.0" +"@types/serve-index@^1.9.1": + "integrity" "sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg==" + "resolved" "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.1.tgz" + "version" "1.9.1" dependencies: - "@webassemblyjs/helper-numbers" "1.11.0" - "@webassemblyjs/helper-wasm-bytecode" "1.11.0" + "@types/express" "*" -"@webassemblyjs/floating-point-hex-parser@1.11.0": - "integrity" "sha512-Q/aVYs/VnPDVYvsCBL/gSgwmfjeCb4LW8+TMrO3cSzJImgv8lxxEPM2JA5jMrivE7LSz3V+PFqtMbls3m1exDA==" - "resolved" "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.0.tgz" - "version" "1.11.0" +"@types/serve-static@*", "@types/serve-static@^1.13.10": + "integrity" "sha512-z5xyF6uh8CbjAu9760KDKsH2FcDxZ2tFCsA4HIMWE6IkiYMXfVoa+4f9KX+FN0ZLsaMw1WNG2ETLA6N+/YA+cg==" + "resolved" "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.0.tgz" + "version" "1.15.0" + dependencies: + "@types/mime" "*" + "@types/node" "*" -"@webassemblyjs/helper-api-error@1.11.0": - "integrity" "sha512-baT/va95eXiXb2QflSx95QGT5ClzWpGaa8L7JnJbgzoYeaA27FCvuBXU758l+KXWRndEmUXjP0Q5fibhavIn8w==" - "resolved" "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.0.tgz" - "version" "1.11.0" +"@types/sockjs@^0.3.33": + "integrity" "sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw==" + "resolved" "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.33.tgz" + "version" "0.3.33" + dependencies: + "@types/node" "*" -"@webassemblyjs/helper-buffer@1.11.0": - "integrity" "sha512-u9HPBEl4DS+vA8qLQdEQ6N/eJQ7gT7aNvMIo8AAWvAl/xMrcOSiI2M0MAnMCy3jIFke7bEee/JwdX1nUpCtdyA==" - "resolved" "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.0.tgz" - "version" "1.11.0" +"@types/unist@*", "@types/unist@^2.0.0", "@types/unist@^2.0.2", "@types/unist@^2.0.3": + "integrity" "sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ==" + "resolved" "https://registry.npmjs.org/@types/unist/-/unist-2.0.6.tgz" + "version" "2.0.6" -"@webassemblyjs/helper-numbers@1.11.0": - "integrity" "sha512-DhRQKelIj01s5IgdsOJMKLppI+4zpmcMQ3XboFPLwCpSNH6Hqo1ritgHgD0nqHeSYqofA6aBN/NmXuGjM1jEfQ==" - "resolved" "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.0.tgz" - "version" "1.11.0" +"@types/ws@^8.5.1": + "integrity" "sha512-zdQDHKUgcX/zBc4GrwsE/7dVdAD8JR4EuiAXiiUhhfyIJXXb2+PrGshFyeXWQPMmmZ2XxgaqclgpIC7eTXc1mg==" + "resolved" "https://registry.npmjs.org/@types/ws/-/ws-8.5.4.tgz" + "version" "8.5.4" dependencies: - "@webassemblyjs/floating-point-hex-parser" "1.11.0" - "@webassemblyjs/helper-api-error" "1.11.0" - "@xtuc/long" "4.2.2" + "@types/node" "*" -"@webassemblyjs/helper-wasm-bytecode@1.11.0": - "integrity" "sha512-MbmhvxXExm542tWREgSFnOVo07fDpsBJg3sIl6fSp9xuu75eGz5lz31q7wTLffwL3Za7XNRCMZy210+tnsUSEA==" - "resolved" "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.0.tgz" - "version" "1.11.0" +"@types/yargs-parser@*": + "integrity" "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==" + "resolved" "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz" + "version" "21.0.0" -"@webassemblyjs/helper-wasm-section@1.11.0": - "integrity" "sha512-3Eb88hcbfY/FCukrg6i3EH8H2UsD7x8Vy47iVJrP967A9JGqgBVL9aH71SETPx1JrGsOUVLo0c7vMCN22ytJew==" - "resolved" "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.0.tgz" - "version" "1.11.0" +"@types/yargs@^17.0.8": + "integrity" "sha512-cAx3qamwaYX9R0fzOIZAlFpo4A+1uBVCxqpKz9D26uTF4srRXaGTTsikQmaotCtNdbhzyUH7ft6p9ktz9s6UNQ==" + "resolved" "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.19.tgz" + "version" "17.0.19" dependencies: - "@webassemblyjs/ast" "1.11.0" - "@webassemblyjs/helper-buffer" "1.11.0" - "@webassemblyjs/helper-wasm-bytecode" "1.11.0" - "@webassemblyjs/wasm-gen" "1.11.0" + "@types/yargs-parser" "*" -"@webassemblyjs/ieee754@1.11.0": - "integrity" "sha512-KXzOqpcYQwAfeQ6WbF6HXo+0udBNmw0iXDmEK5sFlmQdmND+tr773Ti8/5T/M6Tl/413ArSJErATd8In3B+WBA==" - "resolved" "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.0.tgz" - "version" "1.11.0" +"@webassemblyjs/ast@1.11.1": + "integrity" "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==" + "resolved" "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz" + "version" "1.11.1" dependencies: - "@xtuc/ieee754" "^1.2.0" + "@webassemblyjs/helper-numbers" "1.11.1" + "@webassemblyjs/helper-wasm-bytecode" "1.11.1" -"@webassemblyjs/leb128@1.11.0": - "integrity" "sha512-aqbsHa1mSQAbeeNcl38un6qVY++hh8OpCOzxhixSYgbRfNWcxJNJQwe2rezK9XEcssJbbWIkblaJRwGMS9zp+g==" - "resolved" "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.0.tgz" - "version" "1.11.0" +"@webassemblyjs/floating-point-hex-parser@1.11.1": + "integrity" "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==" + "resolved" "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz" + "version" "1.11.1" + +"@webassemblyjs/helper-api-error@1.11.1": + "integrity" "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==" + "resolved" "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz" + "version" "1.11.1" + +"@webassemblyjs/helper-buffer@1.11.1": + "integrity" "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==" + "resolved" "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz" + "version" "1.11.1" + +"@webassemblyjs/helper-numbers@1.11.1": + "integrity" "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==" + "resolved" "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz" + "version" "1.11.1" dependencies: + "@webassemblyjs/floating-point-hex-parser" "1.11.1" + "@webassemblyjs/helper-api-error" "1.11.1" "@xtuc/long" "4.2.2" -"@webassemblyjs/utf8@1.11.0": - "integrity" "sha512-A/lclGxH6SpSLSyFowMzO/+aDEPU4hvEiooCMXQPcQFPPJaYcPQNKGOCLUySJsYJ4trbpr+Fs08n4jelkVTGVw==" - "resolved" "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.0.tgz" - "version" "1.11.0" +"@webassemblyjs/helper-wasm-bytecode@1.11.1": + "integrity" "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==" + "resolved" "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz" + "version" "1.11.1" -"@webassemblyjs/wasm-edit@1.11.0": - "integrity" "sha512-JHQ0damXy0G6J9ucyKVXO2j08JVJ2ntkdJlq1UTiUrIgfGMmA7Ik5VdC/L8hBK46kVJgujkBIoMtT8yVr+yVOQ==" - "resolved" "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.0.tgz" - "version" "1.11.0" - dependencies: - "@webassemblyjs/ast" "1.11.0" - "@webassemblyjs/helper-buffer" "1.11.0" - "@webassemblyjs/helper-wasm-bytecode" "1.11.0" - "@webassemblyjs/helper-wasm-section" "1.11.0" - "@webassemblyjs/wasm-gen" "1.11.0" - "@webassemblyjs/wasm-opt" "1.11.0" - "@webassemblyjs/wasm-parser" "1.11.0" - "@webassemblyjs/wast-printer" "1.11.0" - -"@webassemblyjs/wasm-gen@1.11.0": - "integrity" "sha512-BEUv1aj0WptCZ9kIS30th5ILASUnAPEvE3tVMTrItnZRT9tXCLW2LEXT8ezLw59rqPP9klh9LPmpU+WmRQmCPQ==" - "resolved" "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.0.tgz" - "version" "1.11.0" +"@webassemblyjs/helper-wasm-section@1.11.1": + "integrity" "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==" + "resolved" "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz" + "version" "1.11.1" dependencies: - "@webassemblyjs/ast" "1.11.0" - "@webassemblyjs/helper-wasm-bytecode" "1.11.0" - "@webassemblyjs/ieee754" "1.11.0" - "@webassemblyjs/leb128" "1.11.0" - "@webassemblyjs/utf8" "1.11.0" + "@webassemblyjs/ast" "1.11.1" + "@webassemblyjs/helper-buffer" "1.11.1" + "@webassemblyjs/helper-wasm-bytecode" "1.11.1" + "@webassemblyjs/wasm-gen" "1.11.1" -"@webassemblyjs/wasm-opt@1.11.0": - "integrity" "sha512-tHUSP5F4ywyh3hZ0+fDQuWxKx3mJiPeFufg+9gwTpYp324mPCQgnuVKwzLTZVqj0duRDovnPaZqDwoyhIO8kYg==" - "resolved" "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.0.tgz" - "version" "1.11.0" +"@webassemblyjs/ieee754@1.11.1": + "integrity" "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==" + "resolved" "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz" + "version" "1.11.1" dependencies: - "@webassemblyjs/ast" "1.11.0" - "@webassemblyjs/helper-buffer" "1.11.0" - "@webassemblyjs/wasm-gen" "1.11.0" - "@webassemblyjs/wasm-parser" "1.11.0" + "@xtuc/ieee754" "^1.2.0" -"@webassemblyjs/wasm-parser@1.11.0": - "integrity" "sha512-6L285Sgu9gphrcpDXINvm0M9BskznnzJTE7gYkjDbxET28shDqp27wpruyx3C2S/dvEwiigBwLA1cz7lNUi0kw==" - "resolved" "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.0.tgz" - "version" "1.11.0" +"@webassemblyjs/leb128@1.11.1": + "integrity" "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==" + "resolved" "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz" + "version" "1.11.1" dependencies: - "@webassemblyjs/ast" "1.11.0" - "@webassemblyjs/helper-api-error" "1.11.0" - "@webassemblyjs/helper-wasm-bytecode" "1.11.0" - "@webassemblyjs/ieee754" "1.11.0" - "@webassemblyjs/leb128" "1.11.0" - "@webassemblyjs/utf8" "1.11.0" + "@xtuc/long" "4.2.2" -"@webassemblyjs/wast-printer@1.11.0": - "integrity" "sha512-Fg5OX46pRdTgB7rKIUojkh9vXaVN6sGYCnEiJN1GYkb0RPwShZXp6KTDqmoMdQPKhcroOXh3fEzmkWmCYaKYhQ==" - "resolved" "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.0.tgz" - "version" "1.11.0" - dependencies: - "@webassemblyjs/ast" "1.11.0" +"@webassemblyjs/utf8@1.11.1": + "integrity" "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==" + "resolved" "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz" + "version" "1.11.1" + +"@webassemblyjs/wasm-edit@1.11.1": + "integrity" "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==" + "resolved" "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz" + "version" "1.11.1" + dependencies: + "@webassemblyjs/ast" "1.11.1" + "@webassemblyjs/helper-buffer" "1.11.1" + "@webassemblyjs/helper-wasm-bytecode" "1.11.1" + "@webassemblyjs/helper-wasm-section" "1.11.1" + "@webassemblyjs/wasm-gen" "1.11.1" + "@webassemblyjs/wasm-opt" "1.11.1" + "@webassemblyjs/wasm-parser" "1.11.1" + "@webassemblyjs/wast-printer" "1.11.1" + +"@webassemblyjs/wasm-gen@1.11.1": + "integrity" "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==" + "resolved" "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz" + "version" "1.11.1" + dependencies: + "@webassemblyjs/ast" "1.11.1" + "@webassemblyjs/helper-wasm-bytecode" "1.11.1" + "@webassemblyjs/ieee754" "1.11.1" + "@webassemblyjs/leb128" "1.11.1" + "@webassemblyjs/utf8" "1.11.1" + +"@webassemblyjs/wasm-opt@1.11.1": + "integrity" "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==" + "resolved" "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz" + "version" "1.11.1" + dependencies: + "@webassemblyjs/ast" "1.11.1" + "@webassemblyjs/helper-buffer" "1.11.1" + "@webassemblyjs/wasm-gen" "1.11.1" + "@webassemblyjs/wasm-parser" "1.11.1" + +"@webassemblyjs/wasm-parser@1.11.1": + "integrity" "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==" + "resolved" "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz" + "version" "1.11.1" + dependencies: + "@webassemblyjs/ast" "1.11.1" + "@webassemblyjs/helper-api-error" "1.11.1" + "@webassemblyjs/helper-wasm-bytecode" "1.11.1" + "@webassemblyjs/ieee754" "1.11.1" + "@webassemblyjs/leb128" "1.11.1" + "@webassemblyjs/utf8" "1.11.1" + +"@webassemblyjs/wast-printer@1.11.1": + "integrity" "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==" + "resolved" "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz" + "version" "1.11.1" + dependencies: + "@webassemblyjs/ast" "1.11.1" "@xtuc/long" "4.2.2" "@xtuc/ieee754@^1.2.0": @@ -1997,23 +2343,28 @@ "resolved" "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz" "version" "4.2.2" -"accepts@~1.3.4", "accepts@~1.3.5", "accepts@~1.3.7": - "integrity" "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==" - "resolved" "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz" - "version" "1.3.7" +"accepts@~1.3.4", "accepts@~1.3.5", "accepts@~1.3.8": + "integrity" "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==" + "resolved" "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz" + "version" "1.3.8" dependencies: - "mime-types" "~2.1.24" - "negotiator" "0.6.2" + "mime-types" "~2.1.34" + "negotiator" "0.6.3" + +"acorn-import-assertions@^1.7.6": + "integrity" "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==" + "resolved" "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz" + "version" "1.8.0" "acorn-jsx@^5.3.1": - "integrity" "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==" - "resolved" "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz" - "version" "5.3.1" + "integrity" "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==" + "resolved" "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz" + "version" "5.3.2" "acorn-walk@^8.0.0": - "integrity" "sha512-mjmzmv12YIG/G8JQdQuz2MUDShEJ6teYpT5bmWA4q7iwoGen8xtt3twF3OvzIUl+Q06aWIjvnwQUKvQ6TtMRjg==" - "resolved" "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.1.0.tgz" - "version" "8.1.0" + "integrity" "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==" + "resolved" "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz" + "version" "8.2.0" "acorn@^6.0.0 || ^7.0.0 || ^8.0.0", "acorn@^7.4.0": "integrity" "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==" @@ -2021,19 +2372,24 @@ "version" "7.4.1" "acorn@^8.0.4": - "integrity" "sha512-Ibt84YwBDDA890eDiDCEqcbwvHlBvzzDkU2cGBBDDI1QWT12jTiXIOn2CIw5KK4i6N5Z2HUxwYjzriDyqaqqZg==" - "resolved" "https://registry.npmjs.org/acorn/-/acorn-8.2.4.tgz" - "version" "8.2.4" - -"acorn@^8.2.1": - "integrity" "sha512-Ibt84YwBDDA890eDiDCEqcbwvHlBvzzDkU2cGBBDDI1QWT12jTiXIOn2CIw5KK4i6N5Z2HUxwYjzriDyqaqqZg==" - "resolved" "https://registry.npmjs.org/acorn/-/acorn-8.2.4.tgz" - "version" "8.2.4" - -"address@^1.0.1", "address@1.1.2": - "integrity" "sha512-aT6camzM4xEA54YVJYSqxz1kv4IHnQZRtThJJHhUMRExaU5spC7jX5ugSwTaTgJliIgs4VhZOk7htClvQ/LmRA==" - "resolved" "https://registry.npmjs.org/address/-/address-1.1.2.tgz" - "version" "1.1.2" + "integrity" "sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==" + "resolved" "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz" + "version" "8.8.0" + +"acorn@^8.5.0": + "integrity" "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==" + "resolved" "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz" + "version" "8.8.1" + +"acorn@^8", "acorn@^8.7.1": + "integrity" "sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==" + "resolved" "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz" + "version" "8.8.0" + +"address@^1.0.1", "address@^1.1.2": + "integrity" "sha512-B+6bi5D34+fDYENiH5qOlA0cV2rAGKuWZ9LeyUUehbXy8e0VS9e498yO0Jeeh+iM+6KbfudHTFjXw2MmJD4QRA==" + "resolved" "https://registry.npmjs.org/address/-/address-1.2.1.tgz" + "version" "1.2.1" "aggregate-error@^3.0.0": "integrity" "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==" @@ -2043,17 +2399,26 @@ "clean-stack" "^2.0.0" "indent-string" "^4.0.0" -"ajv-errors@^1.0.0": - "integrity" "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==" - "resolved" "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz" - "version" "1.0.1" +"ajv-formats@^2.1.1": + "integrity" "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==" + "resolved" "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz" + "version" "2.1.1" + dependencies: + "ajv" "^8.0.0" -"ajv-keywords@^3.1.0", "ajv-keywords@^3.5.2": +"ajv-keywords@^3.4.1", "ajv-keywords@^3.5.2": "integrity" "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==" "resolved" "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz" "version" "3.5.2" -"ajv@^6.1.0", "ajv@^6.10.0", "ajv@^6.12.4", "ajv@^6.12.5", "ajv@^6.9.1", "ajv@>=5.0.0": +"ajv-keywords@^5.0.0": + "integrity" "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==" + "resolved" "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz" + "version" "5.1.0" + dependencies: + "fast-deep-equal" "^3.1.3" + +"ajv@^6.10.0", "ajv@^6.12.2", "ajv@^6.12.4", "ajv@^6.12.5", "ajv@^6.9.1": "integrity" "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==" "resolved" "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz" "version" "6.12.6" @@ -2063,98 +2428,89 @@ "json-schema-traverse" "^0.4.1" "uri-js" "^4.2.2" -"ajv@^8.0.1": - "integrity" "sha512-RYE7B5An83d7eWnDR8kbdaIFqmKCNsP16ay1hDbJEU+sa0e3H9SebskCt0Uufem6cfAVu7Col6ubcn/W+Sm8/Q==" - "resolved" "https://registry.npmjs.org/ajv/-/ajv-8.3.0.tgz" - "version" "8.3.0" +"ajv@^8.0.0": + "integrity" "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==" + "resolved" "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz" + "version" "8.12.0" dependencies: "fast-deep-equal" "^3.1.1" "json-schema-traverse" "^1.0.0" "require-from-string" "^2.0.2" "uri-js" "^4.2.2" -"algoliasearch-helper@^3.3.4": - "integrity" "sha512-OjyVLjykaYKCMxxRMZNiwLp8CS310E0qAeIY2NaublcmLAh8/SL19+zYHp7XCLtMem2ZXwl3ywMiA32O9jszuw==" - "resolved" "https://registry.npmjs.org/algoliasearch-helper/-/algoliasearch-helper-3.4.4.tgz" - "version" "3.4.4" - dependencies: - "events" "^1.1.1" - -"algoliasearch@^4.0.0", "algoliasearch@^4.5.1", "algoliasearch@^4.8.4", "algoliasearch@>= 3.1 < 5": - "integrity" "sha512-EeJUYXzBEhZSsL6tXc3hseLBCtlNLa1MZ4mlMK6EeX38yRjY5vgnFcNNml6uUhlOjvheKxgkKRpPWkxgL8Cqkg==" - "resolved" "https://registry.npmjs.org/algoliasearch/-/algoliasearch-4.9.1.tgz" - "version" "4.9.1" - dependencies: - "@algolia/cache-browser-local-storage" "4.9.1" - "@algolia/cache-common" "4.9.1" - "@algolia/cache-in-memory" "4.9.1" - "@algolia/client-account" "4.9.1" - "@algolia/client-analytics" "4.9.1" - "@algolia/client-common" "4.9.1" - "@algolia/client-recommendation" "4.9.1" - "@algolia/client-search" "4.9.1" - "@algolia/logger-common" "4.9.1" - "@algolia/logger-console" "4.9.1" - "@algolia/requester-browser-xhr" "4.9.1" - "@algolia/requester-common" "4.9.1" - "@algolia/requester-node-http" "4.9.1" - "@algolia/transporter" "4.9.1" - -"alphanum-sort@^1.0.2": - "integrity" "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=" - "resolved" "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz" - "version" "1.0.2" - -"ansi-align@^3.0.0": - "integrity" "sha512-ZpClVKqXN3RGBmKibdfWzqCY4lnjEuoNzU5T0oEFpfd/z5qJHVarukridD4juLO2FXMiwUQxr9WqQtaYa8XRYw==" - "resolved" "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.0.tgz" - "version" "3.0.0" +"ajv@^8.0.1": + "integrity" "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==" + "resolved" "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz" + "version" "8.11.0" dependencies: - "string-width" "^3.0.0" - -"ansi-colors@^3.0.0": - "integrity" "sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==" - "resolved" "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz" - "version" "3.2.4" - -"ansi-colors@^4.1.1": - "integrity" "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==" - "resolved" "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz" - "version" "4.1.1" + "fast-deep-equal" "^3.1.1" + "json-schema-traverse" "^1.0.0" + "require-from-string" "^2.0.2" + "uri-js" "^4.2.2" -"ansi-escapes@^4.3.1": - "integrity" "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==" - "resolved" "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz" - "version" "4.3.2" +"ajv@^8.8.0", "ajv@^8.8.2": + "integrity" "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==" + "resolved" "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz" + "version" "8.12.0" dependencies: - "type-fest" "^0.21.3" - -"ansi-html@0.0.7": - "integrity" "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=" - "resolved" "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz" - "version" "0.0.7" + "fast-deep-equal" "^3.1.1" + "json-schema-traverse" "^1.0.0" + "require-from-string" "^2.0.2" + "uri-js" "^4.2.2" -"ansi-regex@^2.0.0": - "integrity" "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" - "resolved" "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz" - "version" "2.1.1" +"algoliasearch-helper@^3.10.0": + "integrity" "sha512-mvsPN3eK4E0bZG0/WlWJjeqe/bUD2KOEVOl0GyL/TGXn6wcpZU8NOuztGHCUKXkyg5gq6YzUakVTmnmSSO5Yiw==" + "resolved" "https://registry.npmjs.org/algoliasearch-helper/-/algoliasearch-helper-3.11.1.tgz" + "version" "3.11.1" + dependencies: + "@algolia/events" "^4.0.1" -"ansi-regex@^4.1.0": - "integrity" "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" - "resolved" "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz" - "version" "4.1.0" +"algoliasearch@^4.0.0", "algoliasearch@^4.13.1", "algoliasearch@^4.9.1", "algoliasearch@>= 3.1 < 6": + "integrity" "sha512-ngbEQonGEmf8dyEh5f+uOIihv4176dgbuOZspiuhmTTBRBuzWu3KCGHre6uHj5YyuC7pNvQGzB6ZNJyZi0z+Sg==" + "resolved" "https://registry.npmjs.org/algoliasearch/-/algoliasearch-4.14.2.tgz" + "version" "4.14.2" + dependencies: + "@algolia/cache-browser-local-storage" "4.14.2" + "@algolia/cache-common" "4.14.2" + "@algolia/cache-in-memory" "4.14.2" + "@algolia/client-account" "4.14.2" + "@algolia/client-analytics" "4.14.2" + "@algolia/client-common" "4.14.2" + "@algolia/client-personalization" "4.14.2" + "@algolia/client-search" "4.14.2" + "@algolia/logger-common" "4.14.2" + "@algolia/logger-console" "4.14.2" + "@algolia/requester-browser-xhr" "4.14.2" + "@algolia/requester-common" "4.14.2" + "@algolia/requester-node-http" "4.14.2" + "@algolia/transporter" "4.14.2" + +"ansi-align@^3.0.0", "ansi-align@^3.0.1": + "integrity" "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==" + "resolved" "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz" + "version" "3.0.1" + dependencies: + "string-width" "^4.1.0" -"ansi-regex@^5.0.0": - "integrity" "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" - "resolved" "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz" - "version" "5.0.0" +"ansi-colors@^4.1.1": + "integrity" "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==" + "resolved" "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz" + "version" "4.1.3" + +"ansi-html-community@^0.0.8": + "integrity" "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==" + "resolved" "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz" + "version" "0.0.8" + +"ansi-regex@^5.0.1": + "integrity" "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" + "resolved" "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz" + "version" "5.0.1" -"ansi-styles@^3.2.0": - "integrity" "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==" - "resolved" "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz" - "version" "3.2.1" - dependencies: - "color-convert" "^1.9.0" +"ansi-regex@^6.0.1": + "integrity" "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==" + "resolved" "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz" + "version" "6.0.1" "ansi-styles@^3.2.1": "integrity" "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==" @@ -2170,15 +2526,12 @@ dependencies: "color-convert" "^2.0.1" -"anymatch@^2.0.0": - "integrity" "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==" - "resolved" "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz" - "version" "2.0.0" - dependencies: - "micromatch" "^3.1.4" - "normalize-path" "^2.1.1" +"ansi-styles@^6.1.0": + "integrity" "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==" + "resolved" "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz" + "version" "6.2.1" -"anymatch@~3.1.1": +"anymatch@~3.1.2": "integrity" "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==" "resolved" "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz" "version" "3.1.2" @@ -2187,9 +2540,9 @@ "picomatch" "^2.0.4" "arg@^5.0.0": - "integrity" "sha512-4P8Zm2H+BRS+c/xX1LrHw0qKpEhdlZjLCgWy+d78T9vqa2Z2SiD2wMrYuWIAFy5IZUD7nnNXroRttz+0RzlrzQ==" - "resolved" "https://registry.npmjs.org/arg/-/arg-5.0.0.tgz" - "version" "5.0.0" + "integrity" "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==" + "resolved" "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz" + "version" "5.0.2" "argparse@^1.0.7": "integrity" "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==" @@ -2203,134 +2556,75 @@ "resolved" "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz" "version" "2.0.1" -"arr-diff@^4.0.0": - "integrity" "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=" - "resolved" "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz" - "version" "4.0.0" - -"arr-flatten@^1.1.0": - "integrity" "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==" - "resolved" "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz" - "version" "1.1.0" - -"arr-union@^3.1.0": - "integrity" "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=" - "resolved" "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz" - "version" "3.1.0" - -"array-flatten@^2.1.0": +"array-flatten@^2.1.2": "integrity" "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==" "resolved" "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz" "version" "2.1.2" "array-flatten@1.1.1": - "integrity" "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" + "integrity" "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" "resolved" "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz" "version" "1.1.1" -"array-includes@^3.1.2", "array-includes@^3.1.3": - "integrity" "sha512-gcem1KlBU7c9rB+Rq8/3PPKsK2kjqeEBa3bD5kkQo4nYlOHQCJqIJFqBXDEfwaRuYTT4E+FxA9xez7Gf/e3Q7A==" - "resolved" "https://registry.npmjs.org/array-includes/-/array-includes-3.1.3.tgz" - "version" "3.1.3" +"array-includes@^3.1.5": + "integrity" "sha512-iSDYZMMyTPkiFasVqfuAQnWAYcvO/SeBSCGKePoEthjp4LEMTe4uLc7b025o4jAZpHhihh8xPo99TNWUWWkGDQ==" + "resolved" "https://registry.npmjs.org/array-includes/-/array-includes-3.1.5.tgz" + "version" "3.1.5" dependencies: "call-bind" "^1.0.2" - "define-properties" "^1.1.3" - "es-abstract" "^1.18.0-next.2" + "define-properties" "^1.1.4" + "es-abstract" "^1.19.5" "get-intrinsic" "^1.1.1" - "is-string" "^1.0.5" - -"array-union@^1.0.1": - "integrity" "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=" - "resolved" "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz" - "version" "1.0.2" - dependencies: - "array-uniq" "^1.0.1" + "is-string" "^1.0.7" "array-union@^2.1.0": "integrity" "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==" "resolved" "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz" "version" "2.1.0" -"array-uniq@^1.0.1": - "integrity" "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=" - "resolved" "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz" - "version" "1.0.3" - -"array-unique@^0.3.2": - "integrity" "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=" - "resolved" "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz" - "version" "0.3.2" - -"array.prototype.flatmap@^1.2.4": - "integrity" "sha512-r9Z0zYoxqHz60vvQbWEdXIEtCwHF0yxaWfno9qzXeNHvfyl3BZqygmGzb84dsubyaXLH4husF+NFgMSdpZhk2Q==" - "resolved" "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.2.4.tgz" - "version" "1.2.4" +"array.prototype.flatmap@^1.3.0": + "integrity" "sha512-PZC9/8TKAIxcWKdyeb77EzULHPrIX/tIZebLJUQOMR1OwYosT8yggdfWScfTBCDj5utONvOuPQQumYsU2ULbkg==" + "resolved" "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.0.tgz" + "version" "1.3.0" dependencies: - "call-bind" "^1.0.0" + "call-bind" "^1.0.2" "define-properties" "^1.1.3" - "es-abstract" "^1.18.0-next.1" - "function-bind" "^1.1.1" + "es-abstract" "^1.19.2" + "es-shim-unscopables" "^1.0.0" "asap@~2.0.3": - "integrity" "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=" + "integrity" "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==" "resolved" "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz" "version" "2.0.6" -"assign-symbols@^1.0.0": - "integrity" "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=" - "resolved" "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz" - "version" "1.0.0" - "astral-regex@^2.0.0": "integrity" "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==" "resolved" "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz" "version" "2.0.0" -"async-each@^1.0.1": - "integrity" "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==" - "resolved" "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz" - "version" "1.0.3" - -"async-limiter@~1.0.0": - "integrity" "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==" - "resolved" "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz" - "version" "1.0.1" - -"async@^2.6.2": - "integrity" "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==" - "resolved" "https://registry.npmjs.org/async/-/async-2.6.3.tgz" - "version" "2.6.3" - dependencies: - "lodash" "^4.17.14" - "at-least-node@^1.0.0": "integrity" "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==" "resolved" "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz" "version" "1.0.0" -"atob@^2.1.2": - "integrity" "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==" - "resolved" "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz" - "version" "2.1.2" - -"autoprefixer@^10.0.2", "autoprefixer@^10.2.5": - "integrity" "sha512-7H4AJZXvSsn62SqZyJCP+1AWwOuoYpUfK6ot9vm0e87XD6mT8lDywc9D9OTJPMULyGcvmIxzTAMeG2Cc+YX+fA==" - "resolved" "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.2.5.tgz" - "version" "10.2.5" +"autoprefixer@^10.4.12", "autoprefixer@^10.4.7": + "integrity" "sha512-WrCGV9/b97Pa+jtwf5UGaRjgQIg7OK3D06GnoYoZNcG1Xb8Gt3EfuKjlhh9i/VtT16g6PYjZ69jdJ2g8FxSC4Q==" + "resolved" "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.12.tgz" + "version" "10.4.12" dependencies: - "browserslist" "^4.16.3" - "caniuse-lite" "^1.0.30001196" - "colorette" "^1.2.2" - "fraction.js" "^4.0.13" + "browserslist" "^4.21.4" + "caniuse-lite" "^1.0.30001407" + "fraction.js" "^4.2.0" "normalize-range" "^0.1.2" - "postcss-value-parser" "^4.1.0" + "picocolors" "^1.0.0" + "postcss-value-parser" "^4.2.0" -"axios@^0.21.1": - "integrity" "sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA==" - "resolved" "https://registry.npmjs.org/axios/-/axios-0.21.1.tgz" - "version" "0.21.1" +"axios@^0.25.0": + "integrity" "sha512-cD8FOb0tRH3uuEe6+evtAbgJtfxr7ly3fQjYcMcuPlgkwVS9xboaVIpcDV+cYQe+yGykgwZCs1pzjntcGa6l5g==" + "resolved" "https://registry.npmjs.org/axios/-/axios-0.25.0.tgz" + "version" "0.25.0" dependencies: - "follow-redirects" "^1.10.0" + "follow-redirects" "^1.14.7" "babel-eslint@^10.1.0": "integrity" "sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg==" @@ -2344,13 +2638,13 @@ "eslint-visitor-keys" "^1.0.0" "resolve" "^1.12.0" -"babel-loader@^8.2.2": - "integrity" "sha512-JvTd0/D889PQBtUXJ2PXaKU/pjZDMtHA9V2ecm+eNRmmBCMR09a+fmpGTNwnJtFmFl5Ei7Vy47LjBb+L0wQ99g==" - "resolved" "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.2.tgz" - "version" "8.2.2" +"babel-loader@^8.2.5": + "integrity" "sha512-OSiFfH89LrEMiWd4pLNqGz4CwJDtbs2ZVc+iGu2HrkRfPxId9F2anQj38IxWpmRfsUY0aBZYi1EFcd3mhtRMLQ==" + "resolved" "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.5.tgz" + "version" "8.2.5" dependencies: "find-cache-dir" "^3.3.1" - "loader-utils" "^1.4.0" + "loader-utils" "^2.0.0" "make-dir" "^3.1.0" "schema-utils" "^2.6.5" @@ -2369,13 +2663,6 @@ dependencies: "object.assign" "^4.1.0" -"babel-plugin-dynamic-import-node@2.3.0": - "integrity" "sha512-o6qFkpeQEBxcqt0XYlWzAVxNCSCZdUgcR8IRlhD/8DylxjjO4foPcvTW0GGKa/cVt3rvxZ7o5ippJ+/0nvLhlQ==" - "resolved" "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.0.tgz" - "version" "2.3.0" - dependencies: - "object.assign" "^4.1.0" - "babel-plugin-extract-import-names@1.6.22": "integrity" "sha512-yJ9BsJaISua7d8zNT7oRG1ZLBJCIdZ4PZqmH8qa9N5AK01ifk3fnkc98AXhtzE7UkfCsEumvoQWgoYLhOnJ7jQ==" "resolved" "https://registry.npmjs.org/babel-plugin-extract-import-names/-/babel-plugin-extract-import-names-1.6.22.tgz" @@ -2383,29 +2670,29 @@ dependencies: "@babel/helper-plugin-utils" "7.10.4" -"babel-plugin-polyfill-corejs2@^0.2.0": - "integrity" "sha512-9bNwiR0dS881c5SHnzCmmGlMkJLl0OUZvxrxHo9w/iNoRuqaPjqlvBf4HrovXtQs/au5yKkpcdgfT1cC5PAZwg==" - "resolved" "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.2.0.tgz" - "version" "0.2.0" +"babel-plugin-polyfill-corejs2@^0.3.3": + "integrity" "sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==" + "resolved" "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz" + "version" "0.3.3" dependencies: - "@babel/compat-data" "^7.13.11" - "@babel/helper-define-polyfill-provider" "^0.2.0" + "@babel/compat-data" "^7.17.7" + "@babel/helper-define-polyfill-provider" "^0.3.3" "semver" "^6.1.1" -"babel-plugin-polyfill-corejs3@^0.2.0": - "integrity" "sha512-zZyi7p3BCUyzNxLx8KV61zTINkkV65zVkDAFNZmrTCRVhjo1jAS+YLvDJ9Jgd/w2tsAviCwFHReYfxO3Iql8Yg==" - "resolved" "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.2.0.tgz" - "version" "0.2.0" +"babel-plugin-polyfill-corejs3@^0.6.0": + "integrity" "sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==" + "resolved" "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.6.0.tgz" + "version" "0.6.0" dependencies: - "@babel/helper-define-polyfill-provider" "^0.2.0" - "core-js-compat" "^3.9.1" + "@babel/helper-define-polyfill-provider" "^0.3.3" + "core-js-compat" "^3.25.1" -"babel-plugin-polyfill-regenerator@^0.2.0": - "integrity" "sha512-J7vKbCuD2Xi/eEHxquHN14bXAW9CXtecwuLrOIDJtcZzTaPzV1VdEfoUf9AzcRBMolKUQKM9/GVojeh0hFiqMg==" - "resolved" "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.2.0.tgz" - "version" "0.2.0" +"babel-plugin-polyfill-regenerator@^0.4.1": + "integrity" "sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==" + "resolved" "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.1.tgz" + "version" "0.4.1" dependencies: - "@babel/helper-define-polyfill-provider" "^0.2.0" + "@babel/helper-define-polyfill-provider" "^0.3.3" "bail@^1.0.0": "integrity" "sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==" @@ -2417,26 +2704,13 @@ "resolved" "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz" "version" "1.0.2" -"base@^0.11.1": - "integrity" "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==" - "resolved" "https://registry.npmjs.org/base/-/base-0.11.2.tgz" - "version" "0.11.2" - dependencies: - "cache-base" "^1.0.1" - "class-utils" "^0.3.5" - "component-emitter" "^1.2.1" - "define-property" "^1.0.0" - "isobject" "^3.0.1" - "mixin-deep" "^1.2.0" - "pascalcase" "^0.1.1" - "base16@^1.0.0": - "integrity" "sha1-4pf2DX7BAUp6lxo568ipjAtoHnA=" + "integrity" "sha512-pNdYkNPiJUnEhnfXV56+sQy8+AaPcG3POZAUnwr4EeqCUZFz4u2PePbo3e5Gj4ziYPCWGUZT9RHisvJKnwFuBQ==" "resolved" "https://registry.npmjs.org/base16/-/base16-1.0.0.tgz" "version" "1.0.0" "batch@0.6.1": - "integrity" "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=" + "integrity" "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==" "resolved" "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz" "version" "0.6.1" @@ -2445,75 +2719,72 @@ "resolved" "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz" "version" "5.2.2" -"binary-extensions@^1.0.0": - "integrity" "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==" - "resolved" "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz" - "version" "1.13.1" - "binary-extensions@^2.0.0": "integrity" "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==" "resolved" "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz" "version" "2.2.0" -"bindings@^1.5.0": - "integrity" "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==" - "resolved" "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz" - "version" "1.5.0" - dependencies: - "file-uri-to-path" "1.0.0" - -"bluebird@^3.7.1": - "integrity" "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" - "resolved" "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz" - "version" "3.7.2" - -"body-parser@1.19.0": - "integrity" "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==" - "resolved" "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz" - "version" "1.19.0" +"body-parser@1.20.1": + "integrity" "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==" + "resolved" "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz" + "version" "1.20.1" dependencies: - "bytes" "3.1.0" + "bytes" "3.1.2" "content-type" "~1.0.4" "debug" "2.6.9" - "depd" "~1.1.2" - "http-errors" "1.7.2" + "depd" "2.0.0" + "destroy" "1.2.0" + "http-errors" "2.0.0" "iconv-lite" "0.4.24" - "on-finished" "~2.3.0" - "qs" "6.7.0" - "raw-body" "2.4.0" - "type-is" "~1.6.17" - -"bonjour@^3.5.0": - "integrity" "sha1-jokKGD2O6aI5OzhExpGkK897yfU=" - "resolved" "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz" - "version" "3.5.0" + "on-finished" "2.4.1" + "qs" "6.11.0" + "raw-body" "2.5.1" + "type-is" "~1.6.18" + "unpipe" "1.0.0" + +"bonjour-service@^1.0.11": + "integrity" "sha512-HIMbgLnk1Vqvs6B4Wq5ep7mxvj9sGz5d1JJyDNSGNIdA/w2MCz6GTjWTdjqOJV1bEPj+6IkxDvWNFKEBxNt4kQ==" + "resolved" "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.0.14.tgz" + "version" "1.0.14" dependencies: - "array-flatten" "^2.1.0" - "deep-equal" "^1.0.1" + "array-flatten" "^2.1.2" "dns-equal" "^1.0.0" - "dns-txt" "^2.0.2" - "multicast-dns" "^6.0.1" - "multicast-dns-service-types" "^1.1.0" + "fast-deep-equal" "^3.1.3" + "multicast-dns" "^7.2.5" -"boolbase@^1.0.0", "boolbase@~1.0.0": - "integrity" "sha1-aN/1++YMUes3cl6p4+0xDcwed24=" +"boolbase@^1.0.0": + "integrity" "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==" "resolved" "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz" "version" "1.0.0" "boxen@^5.0.0": - "integrity" "sha512-49VBlw+PrWEF51aCmy7QIteYPIFZxSpvqBdP/2itCPPlJ49kj9zg/XPRFrdkne2W+CfwXUls8exMvu1RysZpKA==" - "resolved" "https://registry.npmjs.org/boxen/-/boxen-5.0.1.tgz" - "version" "5.0.1" + "integrity" "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==" + "resolved" "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz" + "version" "5.1.2" dependencies: "ansi-align" "^3.0.0" "camelcase" "^6.2.0" "chalk" "^4.1.0" "cli-boxes" "^2.2.1" - "string-width" "^4.2.0" + "string-width" "^4.2.2" "type-fest" "^0.20.2" "widest-line" "^3.1.0" "wrap-ansi" "^7.0.0" +"boxen@^6.2.1": + "integrity" "sha512-H4PEsJXfFI/Pt8sjDWbHlQPx4zL/bvSQjcilJmaulGt5mLDorHOHpmdXAJcBcmru7PhYSp/cDMWRko4ZUMFkSw==" + "resolved" "https://registry.npmjs.org/boxen/-/boxen-6.2.1.tgz" + "version" "6.2.1" + dependencies: + "ansi-align" "^3.0.1" + "camelcase" "^6.2.0" + "chalk" "^4.1.2" + "cli-boxes" "^3.0.0" + "string-width" "^5.0.1" + "type-fest" "^2.5.0" + "widest-line" "^4.0.1" + "wrap-ansi" "^8.0.1" + "brace-expansion@^1.1.7": "integrity" "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==" "resolved" "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz" @@ -2522,84 +2793,42 @@ "balanced-match" "^1.0.0" "concat-map" "0.0.1" -"braces@^2.3.1", "braces@^2.3.2": - "integrity" "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==" - "resolved" "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz" - "version" "2.3.2" - dependencies: - "arr-flatten" "^1.1.0" - "array-unique" "^0.3.2" - "extend-shallow" "^2.0.1" - "fill-range" "^4.0.0" - "isobject" "^3.0.1" - "repeat-element" "^1.1.2" - "snapdragon" "^0.8.1" - "snapdragon-node" "^2.0.1" - "split-string" "^3.0.2" - "to-regex" "^3.0.1" - -"braces@^3.0.1", "braces@~3.0.2": +"braces@^3.0.2", "braces@~3.0.2": "integrity" "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==" "resolved" "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz" "version" "3.0.2" dependencies: "fill-range" "^7.0.1" -"browserslist@^4.0.0", "browserslist@^4.14.5", "browserslist@^4.16.0", "browserslist@^4.16.3", "browserslist@^4.16.6": - "integrity" "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==" - "resolved" "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz" - "version" "4.16.6" +"browserslist@^4.0.0", "browserslist@^4.14.5", "browserslist@^4.16.6", "browserslist@^4.18.1", "browserslist@^4.21.3", "browserslist@^4.21.4", "browserslist@>= 4.21.0": + "integrity" "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==" + "resolved" "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz" + "version" "4.21.4" dependencies: - "caniuse-lite" "^1.0.30001219" - "colorette" "^1.2.2" - "electron-to-chromium" "^1.3.723" - "escalade" "^3.1.1" - "node-releases" "^1.1.71" + "caniuse-lite" "^1.0.30001400" + "electron-to-chromium" "^1.4.251" + "node-releases" "^2.0.6" + "update-browserslist-db" "^1.0.9" -"browserslist@4.14.2": - "integrity" "sha512-HI4lPveGKUR0x2StIz+2FXfDk9SfVMrxn6PLh1JeGUwcuoDkdKZebWiyLRJ68iIPDpMI4JLVDf7S7XzslgWOhw==" - "resolved" "https://registry.npmjs.org/browserslist/-/browserslist-4.14.2.tgz" - "version" "4.14.2" - dependencies: - "caniuse-lite" "^1.0.30001125" - "electron-to-chromium" "^1.3.564" - "escalade" "^3.0.2" - "node-releases" "^1.1.61" +"buffer-crc32@~0.2.3": + "integrity" "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==" + "resolved" "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz" + "version" "0.2.13" "buffer-from@^1.0.0": - "integrity" "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" - "resolved" "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz" - "version" "1.1.1" - -"buffer-indexof@^1.0.0": - "integrity" "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==" - "resolved" "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz" - "version" "1.1.1" + "integrity" "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" + "resolved" "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz" + "version" "1.1.2" "bytes@3.0.0": - "integrity" "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" + "integrity" "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==" "resolved" "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz" "version" "3.0.0" -"bytes@3.1.0": - "integrity" "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" - "resolved" "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz" - "version" "3.1.0" - -"cache-base@^1.0.1": - "integrity" "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==" - "resolved" "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz" - "version" "1.0.1" - dependencies: - "collection-visit" "^1.0.0" - "component-emitter" "^1.2.1" - "get-value" "^2.0.6" - "has-value" "^1.0.0" - "isobject" "^3.0.1" - "set-value" "^2.0.0" - "to-object-path" "^0.3.0" - "union-value" "^1.0.0" - "unset-value" "^1.0.0" +"bytes@3.1.2": + "integrity" "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==" + "resolved" "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz" + "version" "3.1.2" "cacheable-request@^6.0.0": "integrity" "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==" @@ -2627,7 +2856,7 @@ "resolved" "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz" "version" "3.1.0" -"camel-case@^4.1.1": +"camel-case@^4.1.2": "integrity" "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==" "resolved" "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz" "version" "4.1.2" @@ -2640,15 +2869,10 @@ "resolved" "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz" "version" "2.0.1" -"camelcase@^5.0.0": - "integrity" "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" - "resolved" "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz" - "version" "5.3.1" - "camelcase@^6.2.0": - "integrity" "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==" - "resolved" "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz" - "version" "6.2.0" + "integrity" "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==" + "resolved" "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz" + "version" "6.3.0" "caniuse-api@^3.0.0": "integrity" "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==" @@ -2660,12 +2884,12 @@ "lodash.memoize" "^4.1.2" "lodash.uniq" "^4.5.0" -"caniuse-lite@^1.0.0", "caniuse-lite@^1.0.30001125", "caniuse-lite@^1.0.30001196", "caniuse-lite@^1.0.30001219": - "integrity" "sha512-2SodVrFFtvGENGCv0ChVJIDQ0KPaS1cg7/qtfMaICgeMolDdo/Z2OD32F0Aq9yl6F4YFwGPBS5AaPqNYiW4PoA==" - "resolved" "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001341.tgz" - "version" "1.0.30001341" +"caniuse-lite@^1.0.0", "caniuse-lite@^1.0.30001400", "caniuse-lite@^1.0.30001407": + "integrity" "sha512-hSesn02u1QacQHhaxl/kNMZwqVG35Sz/8DgvmgedxSH8z9UUpcDYSPYgsj3x5dQNRcNp6BwpSfQfVzYUTm+fog==" + "resolved" "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001422.tgz" + "version" "1.0.30001422" -"ccount@^1.0.0", "ccount@^1.0.3": +"ccount@^1.0.0": "integrity" "sha512-vlNK021QdI7PNeiUh/lKkC/mNHHfV0m/Ad5JoI0TYtlBnJAslM/JIkm/tGC88bkLIwO6OQ5uV6ztS6kVAtCDlg==" "resolved" "https://registry.npmjs.org/ccount/-/ccount-1.1.0.tgz" "version" "1.1.0" @@ -2679,32 +2903,14 @@ "escape-string-regexp" "^1.0.5" "supports-color" "^5.3.0" -"chalk@^2.4.1": - "integrity" "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==" - "resolved" "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz" - "version" "2.4.2" - dependencies: - "ansi-styles" "^3.2.1" - "escape-string-regexp" "^1.0.5" - "supports-color" "^5.3.0" - -"chalk@^4.0.0", "chalk@^4.1.0": - "integrity" "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==" - "resolved" "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz" - "version" "4.1.1" +"chalk@^4.0.0", "chalk@^4.1.0", "chalk@^4.1.2": + "integrity" "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==" + "resolved" "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" + "version" "4.1.2" dependencies: "ansi-styles" "^4.1.0" "supports-color" "^7.1.0" -"chalk@2.4.2": - "integrity" "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==" - "resolved" "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz" - "version" "2.4.2" - dependencies: - "ansi-styles" "^3.2.1" - "escape-string-regexp" "^1.0.5" - "supports-color" "^5.3.0" - "character-entities-legacy@^1.0.0": "integrity" "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==" "resolved" "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz" @@ -2720,61 +2926,50 @@ "resolved" "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz" "version" "1.1.4" -"cheerio@^0.22.0": - "integrity" "sha1-qbqoYKP5tZWmuBsahocxIe06Jp4=" - "resolved" "https://registry.npmjs.org/cheerio/-/cheerio-0.22.0.tgz" - "version" "0.22.0" - dependencies: - "css-select" "~1.2.0" - "dom-serializer" "~0.1.0" - "entities" "~1.1.1" - "htmlparser2" "^3.9.1" - "lodash.assignin" "^4.0.9" - "lodash.bind" "^4.1.4" - "lodash.defaults" "^4.0.1" - "lodash.filter" "^4.4.0" - "lodash.flatten" "^4.2.0" - "lodash.foreach" "^4.3.0" - "lodash.map" "^4.4.0" - "lodash.merge" "^4.4.0" - "lodash.pick" "^4.2.1" - "lodash.reduce" "^4.4.0" - "lodash.reject" "^4.4.0" - "lodash.some" "^4.4.0" - -"chokidar@^2.1.8": - "integrity" "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==" - "resolved" "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz" - "version" "2.1.8" - dependencies: - "anymatch" "^2.0.0" - "async-each" "^1.0.1" - "braces" "^2.3.2" - "glob-parent" "^3.1.0" - "inherits" "^2.0.3" - "is-binary-path" "^1.0.0" - "is-glob" "^4.0.0" - "normalize-path" "^3.0.0" - "path-is-absolute" "^1.0.0" - "readdirp" "^2.2.1" - "upath" "^1.1.1" - optionalDependencies: - "fsevents" "^1.2.7" - -"chokidar@^3.5.1": - "integrity" "sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==" - "resolved" "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz" - "version" "3.5.1" +"cheerio-select@^2.1.0": + "integrity" "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==" + "resolved" "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz" + "version" "2.1.0" dependencies: - "anymatch" "~3.1.1" + "boolbase" "^1.0.0" + "css-select" "^5.1.0" + "css-what" "^6.1.0" + "domelementtype" "^2.3.0" + "domhandler" "^5.0.3" + "domutils" "^3.0.1" + +"cheerio@^1.0.0-rc.12": + "integrity" "sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==" + "resolved" "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.12.tgz" + "version" "1.0.0-rc.12" + dependencies: + "cheerio-select" "^2.1.0" + "dom-serializer" "^2.0.0" + "domhandler" "^5.0.3" + "domutils" "^3.0.1" + "htmlparser2" "^8.0.1" + "parse5" "^7.0.0" + "parse5-htmlparser2-tree-adapter" "^7.0.0" + +"chokidar@^3.4.2", "chokidar@^3.5.3": + "integrity" "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==" + "resolved" "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz" + "version" "3.5.3" + dependencies: + "anymatch" "~3.1.2" "braces" "~3.0.2" - "glob-parent" "~5.1.0" + "glob-parent" "~5.1.2" "is-binary-path" "~2.1.0" "is-glob" "~4.0.1" "normalize-path" "~3.0.0" - "readdirp" "~3.5.0" + "readdirp" "~3.6.0" optionalDependencies: - "fsevents" "~2.3.1" + "fsevents" "~2.3.2" + +"chownr@^1.1.4": + "integrity" "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" + "resolved" "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz" + "version" "1.1.4" "chrome-trace-event@^1.0.2": "integrity" "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==" @@ -2786,32 +2981,15 @@ "resolved" "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz" "version" "2.0.0" -"ci-info@^3.0.0": - "integrity" "sha512-kdRWLBIJwdsYJWYJFtAFFYxybguqeF91qpZaggjG5Nf8QKdizFG2hjqvaTXbxFIcYbSaD74KpAXv6BSm17DHEQ==" - "resolved" "https://registry.npmjs.org/ci-info/-/ci-info-3.1.1.tgz" - "version" "3.1.1" - -"class-utils@^0.3.5": - "integrity" "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==" - "resolved" "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz" - "version" "0.3.6" - dependencies: - "arr-union" "^3.1.0" - "define-property" "^0.2.5" - "isobject" "^3.0.0" - "static-extend" "^0.1.1" - -"clean-css@^4.2.3": - "integrity" "sha512-VcMWDN54ZN/DS+g58HYL5/n4Zrqe8vHJpGA8KdgUXFU4fuP/aHNw8eld9SyEIyabIMJX/0RaY/fplOo5hYLSFA==" - "resolved" "https://registry.npmjs.org/clean-css/-/clean-css-4.2.3.tgz" - "version" "4.2.3" - dependencies: - "source-map" "~0.6.0" +"ci-info@^3.2.0": + "integrity" "sha512-4jYS4MOAaCIStSRwiuxc4B8MYhIe676yO1sYGzARnjXkWpmzZMMYxY6zu8WYWDhSuth5zhrQ1rhNSibyyvv4/w==" + "resolved" "https://registry.npmjs.org/ci-info/-/ci-info-3.7.1.tgz" + "version" "3.7.1" -"clean-css@^5.1.1": - "integrity" "sha512-QcaGg9OuMo+0Ds933yLOY+gHPWbxhxqF0HDexmToPf8pczvmvZGYzd+QqWp9/mkucAOKViI+dSFOqoZIvXbeBw==" - "resolved" "https://registry.npmjs.org/clean-css/-/clean-css-5.1.2.tgz" - "version" "5.1.2" +"clean-css@^5.2.2", "clean-css@^5.3.0": + "integrity" "sha512-lCr8OHhiWCTw4v8POJovCoh4T7I9U11yVsPjMWWnnMmp9ZowCxyad1Pathle/9HjaDp+fdQKjO9fQydE6RHTZg==" + "resolved" "https://registry.npmjs.org/clean-css/-/clean-css-5.3.1.tgz" + "version" "5.3.1" dependencies: "source-map" "~0.6.0" @@ -2825,23 +3003,19 @@ "resolved" "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz" "version" "2.2.1" -"clipboard@^2.0.0": - "integrity" "sha512-Y6WO0unAIQp5bLmk1zdThRhgJt/x3ks6f30s3oE3H1mgIEU33XyQjEf8gsf6DxC7NPX8Y1SsNWjUjL/ywLnnbQ==" - "resolved" "https://registry.npmjs.org/clipboard/-/clipboard-2.0.8.tgz" - "version" "2.0.8" - dependencies: - "good-listener" "^1.2.2" - "select" "^1.1.2" - "tiny-emitter" "^2.0.0" +"cli-boxes@^3.0.0": + "integrity" "sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==" + "resolved" "https://registry.npmjs.org/cli-boxes/-/cli-boxes-3.0.0.tgz" + "version" "3.0.0" -"cliui@^5.0.0": - "integrity" "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==" - "resolved" "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz" - "version" "5.0.0" +"cli-table3@^0.6.2": + "integrity" "sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==" + "resolved" "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.3.tgz" + "version" "0.6.3" dependencies: - "string-width" "^3.1.0" - "strip-ansi" "^5.2.0" - "wrap-ansi" "^5.1.0" + "string-width" "^4.2.0" + optionalDependencies: + "@colors/colors" "1.5.0" "clone-deep@^4.0.1": "integrity" "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==" @@ -2853,47 +3027,23 @@ "shallow-clone" "^3.0.0" "clone-response@^1.0.2": - "integrity" "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=" - "resolved" "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz" - "version" "1.0.2" + "integrity" "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==" + "resolved" "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz" + "version" "1.0.3" dependencies: "mimic-response" "^1.0.0" -"clsx@^1.1.1": - "integrity" "sha512-6/bPho624p3S2pMyvP5kKBPXnI3ufHLObBFCfgx+LkeR5lg2XYy2hqZqUf45ypD8COn2bhgGJSUE+l5dhNBieA==" - "resolved" "https://registry.npmjs.org/clsx/-/clsx-1.1.1.tgz" - "version" "1.1.1" - -"coa@^2.0.2": - "integrity" "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==" - "resolved" "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz" - "version" "2.0.2" - dependencies: - "@types/q" "^1.5.1" - "chalk" "^2.4.1" - "q" "^1.1.2" - -"collapse-white-space@^1.0.2": - "integrity" "sha512-jEovNnrhMuqyCcjfEJA56v0Xq8SkIoPKDyaHahwo3POf4qcSXqMYuwNcOTzp74vTsR9Tn08z4MxWqAhcekogkQ==" - "resolved" "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-1.0.6.tgz" - "version" "1.0.6" - -"collection-visit@^1.0.0": - "integrity" "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=" - "resolved" "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz" - "version" "1.0.0" - dependencies: - "map-visit" "^1.0.0" - "object-visit" "^1.0.0" +"clsx@^1.2.1": + "integrity" "sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==" + "resolved" "https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz" + "version" "1.2.1" -"color-convert@^1.9.0": - "integrity" "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==" - "resolved" "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz" - "version" "1.9.3" - dependencies: - "color-name" "1.1.3" +"collapse-white-space@^1.0.2": + "integrity" "sha512-jEovNnrhMuqyCcjfEJA56v0Xq8SkIoPKDyaHahwo3POf4qcSXqMYuwNcOTzp74vTsR9Tn08z4MxWqAhcekogkQ==" + "resolved" "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-1.0.6.tgz" + "version" "1.0.6" -"color-convert@^1.9.1": +"color-convert@^1.9.0": "integrity" "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==" "resolved" "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz" "version" "1.9.3" @@ -2907,36 +3057,25 @@ dependencies: "color-name" "~1.1.4" -"color-name@^1.0.0", "color-name@~1.1.4": +"color-name@~1.1.4": "integrity" "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" "resolved" "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" "version" "1.1.4" "color-name@1.1.3": - "integrity" "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + "integrity" "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" "resolved" "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz" "version" "1.1.3" -"color-string@^1.5.4": - "integrity" "sha512-jgIoum0OfQfq9Whcfc2z/VhCNcmQjWbey6qBX0vqt7YICflUmBCh9E9CiQD5GSJ+Uehixm3NUwHVhqUAWRivZg==" - "resolved" "https://registry.npmjs.org/color-string/-/color-string-1.5.5.tgz" - "version" "1.5.5" - dependencies: - "color-name" "^1.0.0" - "simple-swizzle" "^0.2.2" - -"color@^3.1.1": - "integrity" "sha512-xgXAcTHa2HeFCGLE9Xs/R82hujGtu9Jd9x4NW3T34+OMs7VoPsjwzRczKHvTAHeJwWFwX5j15+MgAppE8ztObQ==" - "resolved" "https://registry.npmjs.org/color/-/color-3.1.3.tgz" - "version" "3.1.3" - dependencies: - "color-convert" "^1.9.1" - "color-string" "^1.5.4" +"colord@^2.9.1": + "integrity" "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==" + "resolved" "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz" + "version" "2.9.3" -"colorette@^1.2.2": - "integrity" "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==" - "resolved" "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz" - "version" "1.2.2" +"colorette@^2.0.10": + "integrity" "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==" + "resolved" "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz" + "version" "2.0.19" "combine-promises@^1.1.0": "integrity" "sha512-ZI9jvcLDxqwaXEixOhArm3r7ReIivsXkpbyEWyeOhzz1QS0iSgBPnWvEqvIQtYyamGCYA88gFhmUrs9hrrQ0pg==" @@ -2948,6 +3087,11 @@ "resolved" "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz" "version" "1.0.8" +"command-exists-promise@^2.0.2": + "integrity" "sha512-T6PB6vdFrwnHXg/I0kivM3DqaCGZLjjYSOe0a5WgFKcz1sOnmOeIjnhQPXVXX3QjVbLyTJ85lJkX6lUpukTzaA==" + "resolved" "https://registry.npmjs.org/command-exists-promise/-/command-exists-promise-2.0.2.tgz" + "version" "2.0.2" + "commander@^2.19.0": "integrity" "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" "resolved" "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz" @@ -2958,36 +3102,26 @@ "resolved" "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz" "version" "2.20.3" -"commander@^4.1.1": - "integrity" "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==" - "resolved" "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz" - "version" "4.1.1" - "commander@^5.1.0": "integrity" "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==" "resolved" "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz" "version" "5.1.0" -"commander@^6.2.0": - "integrity" "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==" - "resolved" "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz" - "version" "6.2.1" - -"commander@^7.1.0": +"commander@^7.2.0": "integrity" "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==" "resolved" "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz" "version" "7.2.0" +"commander@^8.3.0": + "integrity" "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==" + "resolved" "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz" + "version" "8.3.0" + "commondir@^1.0.1": - "integrity" "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=" + "integrity" "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==" "resolved" "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz" "version" "1.0.1" -"component-emitter@^1.2.1": - "integrity" "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" - "resolved" "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz" - "version" "1.3.0" - "compressible@~2.0.16": "integrity" "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==" "resolved" "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz" @@ -3009,7 +3143,7 @@ "vary" "~1.1.2" "concat-map@0.0.1": - "integrity" "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + "integrity" "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" "resolved" "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" "version" "0.0.1" @@ -3025,27 +3159,27 @@ "write-file-atomic" "^3.0.0" "xdg-basedir" "^4.0.0" -"connect-history-api-fallback@^1.6.0": - "integrity" "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==" - "resolved" "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz" - "version" "1.6.0" +"connect-history-api-fallback@^2.0.0": + "integrity" "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==" + "resolved" "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz" + "version" "2.0.0" -"consola@^2.15.0": +"consola@^2.15.3": "integrity" "sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==" "resolved" "https://registry.npmjs.org/consola/-/consola-2.15.3.tgz" "version" "2.15.3" "content-disposition@0.5.2": - "integrity" "sha1-DPaLud318r55YcOoUXjLhdunjLQ=" + "integrity" "sha512-kRGRZw3bLlFISDBgwTSA1TMBFN6J6GWDeubmDE3AF+3+yXL8hTWv8r5rkLbqYXY4RjPk/EzHnClI3zQf1cFmHA==" "resolved" "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz" "version" "0.5.2" -"content-disposition@0.5.3": - "integrity" "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==" - "resolved" "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz" - "version" "0.5.3" +"content-disposition@0.5.4": + "integrity" "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==" + "resolved" "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz" + "version" "0.5.4" dependencies: - "safe-buffer" "5.1.2" + "safe-buffer" "5.2.1" "content-type@~1.0.4": "integrity" "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" @@ -3053,72 +3187,74 @@ "version" "1.0.4" "convert-source-map@^1.7.0": - "integrity" "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==" - "resolved" "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz" - "version" "1.7.0" - dependencies: - "safe-buffer" "~5.1.1" + "integrity" "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" + "resolved" "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz" + "version" "1.9.0" "cookie-signature@1.0.6": - "integrity" "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" + "integrity" "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" "resolved" "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz" "version" "1.0.6" -"cookie@0.4.0": - "integrity" "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==" - "resolved" "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz" - "version" "0.4.0" - -"copy-descriptor@^0.1.0": - "integrity" "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=" - "resolved" "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz" - "version" "0.1.1" +"cookie@0.5.0": + "integrity" "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==" + "resolved" "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz" + "version" "0.5.0" -"copy-text-to-clipboard@^3.0.0": +"copy-text-to-clipboard@^3.0.1": "integrity" "sha512-rvVsHrpFcL4F2P8ihsoLdFHmd404+CMg71S756oRSeQgqk51U3kicGdnvfkrxva0xXH92SjGS62B0XIJsbh+9Q==" "resolved" "https://registry.npmjs.org/copy-text-to-clipboard/-/copy-text-to-clipboard-3.0.1.tgz" "version" "3.0.1" -"copy-webpack-plugin@^8.1.0": - "integrity" "sha512-rYM2uzRxrLRpcyPqGceRBDpxxUV8vcDqIKxAUKfcnFpcrPxT5+XvhTxv7XLjo5AvEJFPdAE3zCogG2JVahqgSQ==" - "resolved" "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-8.1.1.tgz" - "version" "8.1.1" +"copy-webpack-plugin@^11.0.0": + "integrity" "sha512-fX2MWpamkW0hZxMEg0+mYnA40LTosOSa5TqZ9GYIBzyJa9C3QUaMPSE2xAi/buNr8u89SfD9wHSQVBzrRa/SOQ==" + "resolved" "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-11.0.0.tgz" + "version" "11.0.0" dependencies: - "fast-glob" "^3.2.5" - "glob-parent" "^5.1.1" - "globby" "^11.0.3" + "fast-glob" "^3.2.11" + "glob-parent" "^6.0.1" + "globby" "^13.1.1" "normalize-path" "^3.0.0" - "p-limit" "^3.1.0" - "schema-utils" "^3.0.0" - "serialize-javascript" "^5.0.1" + "schema-utils" "^4.0.0" + "serialize-javascript" "^6.0.0" -"core-js-compat@^3.9.0", "core-js-compat@^3.9.1": - "integrity" "sha512-i6h5qODpw6EsHAoIdQhKoZdWn+dGBF3dSS8m5tif36RlWvW3A6+yu2S16QHUo3CrkzrnEskMAt9f8FxmY9fhWQ==" - "resolved" "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.12.1.tgz" - "version" "3.12.1" +"core-js-compat@^3.25.1": + "integrity" "sha512-ovcyhs2DEBUIE0MGEKHP4olCUW/XYte3Vroyxuh38rD1wAO4dHohsovUC4eAOuzFxE6b+RXvBU3UZ9o0YhUTkA==" + "resolved" "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.25.5.tgz" + "version" "3.25.5" dependencies: - "browserslist" "^4.16.6" - "semver" "7.0.0" + "browserslist" "^4.21.4" -"core-js-pure@^3.0.0": - "integrity" "sha512-1cch+qads4JnDSWsvc7d6nzlKAippwjUlf6vykkTLW53VSV+NkE6muGBToAjEA8pG90cSfcud3JgVmW2ds5TaQ==" - "resolved" "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.12.1.tgz" - "version" "3.12.1" +"core-js-pure@^3.25.1": + "integrity" "sha512-oml3M22pHM+igfWHDfdLVq2ShWmjM2V4L+dQEBs0DWVIqEm9WHCwGAlZ6BmyBQGy5sFrJmcx+856D9lVKyGWYg==" + "resolved" "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.25.5.tgz" + "version" "3.25.5" -"core-js@^3.9.1": - "integrity" "sha512-Ne9DKPHTObRuB09Dru5AjwKjY4cJHVGu+y5f7coGn1E9Grkc3p2iBwE9AI/nJzsE29mQF7oq+mhYYRqOMFN1Bw==" - "resolved" "https://registry.npmjs.org/core-js/-/core-js-3.12.1.tgz" - "version" "3.12.1" +"core-js@^3.23.3": + "integrity" "sha512-nbm6eZSjm+ZuBQxCUPQKQCoUEfFOXjUZ8dTTyikyKaWrTYmAVbykQfwsKE5dBK88u3QCkCrzsx/PPlKfhsvgpw==" + "resolved" "https://registry.npmjs.org/core-js/-/core-js-3.25.5.tgz" + "version" "3.25.5" "core-util-is@~1.0.0": - "integrity" "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" - "resolved" "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz" - "version" "1.0.2" + "integrity" "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" + "resolved" "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz" + "version" "1.0.3" -"cosmiconfig@^7.0.0": - "integrity" "sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA==" - "resolved" "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.0.tgz" - "version" "7.0.0" +"cosmiconfig@^6.0.0": + "integrity" "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==" + "resolved" "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz" + "version" "6.0.0" + dependencies: + "@types/parse-json" "^4.0.0" + "import-fresh" "^3.1.0" + "parse-json" "^5.0.0" + "path-type" "^4.0.0" + "yaml" "^1.7.2" + +"cosmiconfig@^7.0.0", "cosmiconfig@^7.0.1": + "integrity" "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==" + "resolved" "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz" + "version" "7.0.1" dependencies: "@types/parse-json" "^4.0.0" "import-fresh" "^3.2.1" @@ -3126,25 +3262,14 @@ "path-type" "^4.0.0" "yaml" "^1.10.0" -"cross-fetch@^3.0.4": +"cross-fetch@^3.1.5": "integrity" "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==" "resolved" "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz" "version" "3.1.5" dependencies: "node-fetch" "2.6.7" -"cross-spawn@^6.0.0": - "integrity" "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==" - "resolved" "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz" - "version" "6.0.5" - dependencies: - "nice-try" "^1.0.4" - "path-key" "^2.0.1" - "semver" "^5.5.0" - "shebang-command" "^1.2.0" - "which" "^1.2.9" - -"cross-spawn@^7.0.2", "cross-spawn@^7.0.3", "cross-spawn@7.0.3": +"cross-spawn@^7.0.2", "cross-spawn@^7.0.3": "integrity" "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==" "resolved" "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz" "version" "7.0.3" @@ -3158,100 +3283,60 @@ "resolved" "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz" "version" "2.0.0" -"css-color-names@^0.0.4": - "integrity" "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=" - "resolved" "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz" - "version" "0.0.4" - -"css-color-names@^1.0.1": - "integrity" "sha512-/loXYOch1qU1biStIFsHH8SxTmOseh1IJqFvy8IujXOm1h+QjUdDhkzOrR5HG8K8mlxREj0yfi8ewCHx0eMxzA==" - "resolved" "https://registry.npmjs.org/css-color-names/-/css-color-names-1.0.1.tgz" - "version" "1.0.1" - -"css-declaration-sorter@6.0.0": - "integrity" "sha512-S0TE4E0ha5+tBHdLWPc5n+S8E4dFBS5xScPvgHkLNZwWvX4ISoFGhGeerLC9uS1cKA/sC+K2wHq6qEbcagT/fg==" - "resolved" "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.0.0.tgz" - "version" "6.0.0" - dependencies: - "timsort" "^0.3.0" +"css-declaration-sorter@^6.3.1": + "integrity" "sha512-fBffmak0bPAnyqc/HO8C3n2sHrp9wcqQz6ES9koRF2/mLOVAx9zIQ3Y7R29sYCteTPqMCwns4WYQoCX91Xl3+w==" + "resolved" "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.3.1.tgz" + "version" "6.3.1" -"css-loader@^5.1.1": - "integrity" "sha512-OFYGyINCKkdQsTrSYxzGSFnGS4gNjcXkKkQgWxK138jgnPt+lepxdjSZNc8sHAl5vP3DhsJUxufWIjOwI8PMMw==" - "resolved" "https://registry.npmjs.org/css-loader/-/css-loader-5.2.4.tgz" - "version" "5.2.4" +"css-loader@^6.7.1": + "integrity" "sha512-qhOH1KlBMnZP8FzRO6YCH9UHXQhVMcEGLyNdb7Hv2cpcmJbW0YrddO+tG1ab5nT41KpHIYGsbeHqxB9xPu1pKQ==" + "resolved" "https://registry.npmjs.org/css-loader/-/css-loader-6.7.3.tgz" + "version" "6.7.3" dependencies: - "camelcase" "^6.2.0" "icss-utils" "^5.1.0" - "loader-utils" "^2.0.0" - "postcss" "^8.2.10" + "postcss" "^8.4.19" "postcss-modules-extract-imports" "^3.0.0" "postcss-modules-local-by-default" "^4.0.0" "postcss-modules-scope" "^3.0.0" "postcss-modules-values" "^4.0.0" - "postcss-value-parser" "^4.1.0" - "schema-utils" "^3.0.0" - "semver" "^7.3.5" + "postcss-value-parser" "^4.2.0" + "semver" "^7.3.8" -"css-minimizer-webpack-plugin@^2.0.0": - "integrity" "sha512-cG/uc94727tx5pBNtb1Sd7gvUPzwmcQi1lkpfqTpdkuNq75hJCw7bIVsCNijLm4dhDcr1atvuysl2rZqOG8Txw==" - "resolved" "https://registry.npmjs.org/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-2.0.0.tgz" - "version" "2.0.0" +"css-minimizer-webpack-plugin@^4.0.0": + "integrity" "sha512-s3Of/4jKfw1Hj9CxEO1E5oXhQAxlayuHO2y/ML+C6I9sQ7FdzfEV6QgMLN3vI+qFsjJGIAFLKtQK7t8BOXAIyA==" + "resolved" "https://registry.npmjs.org/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-4.2.2.tgz" + "version" "4.2.2" dependencies: - "cssnano" "^5.0.0" - "jest-worker" "^26.3.0" - "p-limit" "^3.0.2" - "postcss" "^8.2.9" - "schema-utils" "^3.0.0" - "serialize-javascript" "^5.0.1" + "cssnano" "^5.1.8" + "jest-worker" "^29.1.2" + "postcss" "^8.4.17" + "schema-utils" "^4.0.0" + "serialize-javascript" "^6.0.0" "source-map" "^0.6.1" -"css-select-base-adapter@^0.1.1": - "integrity" "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==" - "resolved" "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz" - "version" "0.1.1" - -"css-select@^2.0.0": - "integrity" "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==" - "resolved" "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz" - "version" "2.1.0" - dependencies: - "boolbase" "^1.0.0" - "css-what" "^3.2.1" - "domutils" "^1.7.0" - "nth-check" "^1.0.2" - -"css-select@^2.0.2": - "integrity" "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==" - "resolved" "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz" - "version" "2.1.0" +"css-select@^4.1.3": + "integrity" "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==" + "resolved" "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz" + "version" "4.3.0" dependencies: "boolbase" "^1.0.0" - "css-what" "^3.2.1" - "domutils" "^1.7.0" - "nth-check" "^1.0.2" - -"css-select@^3.1.2": - "integrity" "sha512-qmss1EihSuBNWNNhHjxzxSfJoFBM/lERB/Q4EnsJQQC62R2evJDW481091oAdOr9uh46/0n4nrg0It5cAnj1RA==" - "resolved" "https://registry.npmjs.org/css-select/-/css-select-3.1.2.tgz" - "version" "3.1.2" + "css-what" "^6.0.1" + "domhandler" "^4.3.1" + "domutils" "^2.8.0" + "nth-check" "^2.0.1" + +"css-select@^5.1.0": + "integrity" "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==" + "resolved" "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz" + "version" "5.1.0" dependencies: "boolbase" "^1.0.0" - "css-what" "^4.0.0" - "domhandler" "^4.0.0" - "domutils" "^2.4.3" - "nth-check" "^2.0.0" - -"css-select@~1.2.0": - "integrity" "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=" - "resolved" "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz" - "version" "1.2.0" - dependencies: - "boolbase" "~1.0.0" - "css-what" "2.1" - "domutils" "1.5.1" - "nth-check" "~1.0.1" + "css-what" "^6.1.0" + "domhandler" "^5.0.2" + "domutils" "^3.0.1" + "nth-check" "^2.0.1" -"css-tree@^1.1.2": +"css-tree@^1.1.2", "css-tree@^1.1.3": "integrity" "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==" "resolved" "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz" "version" "1.1.3" @@ -3259,96 +3344,78 @@ "mdn-data" "2.0.14" "source-map" "^0.6.1" -"css-tree@1.0.0-alpha.37": - "integrity" "sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==" - "resolved" "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz" - "version" "1.0.0-alpha.37" - dependencies: - "mdn-data" "2.0.4" - "source-map" "^0.6.1" - -"css-what@^3.2.1": - "integrity" "sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==" - "resolved" "https://registry.npmjs.org/css-what/-/css-what-3.4.2.tgz" - "version" "3.4.2" - -"css-what@^4.0.0": - "integrity" "sha512-teijzG7kwYfNVsUh2H/YN62xW3KK9YhXEgSlbxMlcyjPNvdKJqFx5lrwlJgoFP1ZHlB89iGDlo/JyshKeRhv5A==" - "resolved" "https://registry.npmjs.org/css-what/-/css-what-4.0.0.tgz" - "version" "4.0.0" - -"css-what@2.1": - "integrity" "sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==" - "resolved" "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz" - "version" "2.1.3" +"css-what@^6.0.1", "css-what@^6.1.0": + "integrity" "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==" + "resolved" "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz" + "version" "6.1.0" "cssesc@^3.0.0": "integrity" "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==" "resolved" "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz" "version" "3.0.0" -"cssnano-preset-advanced@^5.0.0": - "integrity" "sha512-g+LB6GcihLXcBEdDh+mzk1qX9jgtBkVpzAg1OlgrH6C+qKIQYRHwAPyaoXy95Ci83sYYXlwJ0OrqLYTIUEBLZQ==" - "resolved" "https://registry.npmjs.org/cssnano-preset-advanced/-/cssnano-preset-advanced-5.0.1.tgz" - "version" "5.0.1" - dependencies: - "autoprefixer" "^10.0.2" - "cssnano-preset-default" "^5.0.1" - "postcss-discard-unused" "^5.0.0" - "postcss-merge-idents" "^5.0.0" - "postcss-reduce-idents" "^5.0.0" - "postcss-zindex" "^5.0.0" - -"cssnano-preset-default@^5.0.1": - "integrity" "sha512-cfmfThYODGqhpQKDq9H0MTAqkMvZ3dGbOUTBKw0xWZiIycMqHid22LsJXJl4r1qX4qzDeKxcSyQ/Xb5Mu3Z//Q==" - "resolved" "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.0.1.tgz" - "version" "5.0.1" - dependencies: - "css-declaration-sorter" "6.0.0" - "cssnano-utils" "^2.0.0" - "postcss-calc" "^8.0.0" - "postcss-colormin" "^5.0.0" - "postcss-convert-values" "^5.0.0" - "postcss-discard-comments" "^5.0.0" - "postcss-discard-duplicates" "^5.0.0" - "postcss-discard-empty" "^5.0.0" - "postcss-discard-overridden" "^5.0.0" - "postcss-merge-longhand" "^5.0.1" - "postcss-merge-rules" "^5.0.0" - "postcss-minify-font-values" "^5.0.0" - "postcss-minify-gradients" "^5.0.0" - "postcss-minify-params" "^5.0.0" - "postcss-minify-selectors" "^5.0.0" - "postcss-normalize-charset" "^5.0.0" - "postcss-normalize-display-values" "^5.0.0" - "postcss-normalize-positions" "^5.0.0" - "postcss-normalize-repeat-style" "^5.0.0" - "postcss-normalize-string" "^5.0.0" - "postcss-normalize-timing-functions" "^5.0.0" - "postcss-normalize-unicode" "^5.0.0" - "postcss-normalize-url" "^5.0.0" - "postcss-normalize-whitespace" "^5.0.0" - "postcss-ordered-values" "^5.0.0" - "postcss-reduce-initial" "^5.0.0" - "postcss-reduce-transforms" "^5.0.0" - "postcss-svgo" "^5.0.0" - "postcss-unique-selectors" "^5.0.0" - -"cssnano-utils@^2.0.0": - "integrity" "sha512-xvxmTszdrvSyTACdPe8VU5J6p4sm3egpgw54dILvNqt5eBUv6TFjACLhSxtRuEsxYrgy8uDy269YjScO5aKbGA==" - "resolved" "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-2.0.0.tgz" - "version" "2.0.0" +"cssnano-preset-advanced@^5.3.8": + "integrity" "sha512-njnh4pp1xCsibJcEHnWZb4EEzni0ePMqPuPNyuWT4Z+YeXmsgqNuTPIljXFEXhxGsWs9183JkXgHxc1TcsahIg==" + "resolved" "https://registry.npmjs.org/cssnano-preset-advanced/-/cssnano-preset-advanced-5.3.9.tgz" + "version" "5.3.9" + dependencies: + "autoprefixer" "^10.4.12" + "cssnano-preset-default" "^5.2.13" + "postcss-discard-unused" "^5.1.0" + "postcss-merge-idents" "^5.1.1" + "postcss-reduce-idents" "^5.2.0" + "postcss-zindex" "^5.1.0" + +"cssnano-preset-default@^5.2.12", "cssnano-preset-default@^5.2.13": + "integrity" "sha512-PX7sQ4Pb+UtOWuz8A1d+Rbi+WimBIxJTRyBdgGp1J75VU0r/HFQeLnMYgHiCAp6AR4rqrc7Y4R+1Rjk3KJz6DQ==" + "resolved" "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.2.13.tgz" + "version" "5.2.13" + dependencies: + "css-declaration-sorter" "^6.3.1" + "cssnano-utils" "^3.1.0" + "postcss-calc" "^8.2.3" + "postcss-colormin" "^5.3.0" + "postcss-convert-values" "^5.1.3" + "postcss-discard-comments" "^5.1.2" + "postcss-discard-duplicates" "^5.1.0" + "postcss-discard-empty" "^5.1.1" + "postcss-discard-overridden" "^5.1.0" + "postcss-merge-longhand" "^5.1.7" + "postcss-merge-rules" "^5.1.3" + "postcss-minify-font-values" "^5.1.0" + "postcss-minify-gradients" "^5.1.1" + "postcss-minify-params" "^5.1.4" + "postcss-minify-selectors" "^5.2.1" + "postcss-normalize-charset" "^5.1.0" + "postcss-normalize-display-values" "^5.1.0" + "postcss-normalize-positions" "^5.1.1" + "postcss-normalize-repeat-style" "^5.1.1" + "postcss-normalize-string" "^5.1.0" + "postcss-normalize-timing-functions" "^5.1.0" + "postcss-normalize-unicode" "^5.1.1" + "postcss-normalize-url" "^5.1.0" + "postcss-normalize-whitespace" "^5.1.1" + "postcss-ordered-values" "^5.1.3" + "postcss-reduce-initial" "^5.1.1" + "postcss-reduce-transforms" "^5.1.0" + "postcss-svgo" "^5.1.0" + "postcss-unique-selectors" "^5.1.1" + +"cssnano-utils@^3.1.0": + "integrity" "sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==" + "resolved" "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-3.1.0.tgz" + "version" "3.1.0" -"cssnano@^5.0.0", "cssnano@^5.0.1": - "integrity" "sha512-8JK3EnPsjQsULme9/e5M2hF564f/480hwsdcHvQ7ZtAIMfQ1O3SCfs+b8Mjf5KJxhYApyRshR2QSovEJi2K72Q==" - "resolved" "https://registry.npmjs.org/cssnano/-/cssnano-5.0.2.tgz" - "version" "5.0.2" +"cssnano@^5.1.12", "cssnano@^5.1.8": + "integrity" "sha512-S2SL2ekdEz6w6a2epXn4CmMKU4K3KpcyXLKfAYc9UQQqJRkD/2eLUG0vJ3Db/9OvO5GuAdgXw3pFbR6abqghDQ==" + "resolved" "https://registry.npmjs.org/cssnano/-/cssnano-5.1.13.tgz" + "version" "5.1.13" dependencies: - "cosmiconfig" "^7.0.0" - "cssnano-preset-default" "^5.0.1" - "is-resolvable" "^1.1.0" + "cssnano-preset-default" "^5.2.12" + "lilconfig" "^2.0.3" + "yaml" "^1.10.2" -"csso@^4.0.2", "csso@^4.2.0": +"csso@^4.2.0": "integrity" "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==" "resolved" "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz" "version" "4.2.0" @@ -3356,23 +3423,9 @@ "css-tree" "^1.1.2" "csstype@^3.0.2": - "integrity" "sha512-jXKhWqXPmlUeoQnF/EhTtTl4C9SnrxSH/jZUih3jmO6lBKr99rP3/+FmrMj4EFpOXzMtXHAZkd3x0E6h6Fgflw==" - "resolved" "https://registry.npmjs.org/csstype/-/csstype-3.0.8.tgz" - "version" "3.0.8" - -"debug@^2.2.0": - "integrity" "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==" - "resolved" "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz" - "version" "2.6.9" - dependencies: - "ms" "2.0.0" - -"debug@^2.3.3": - "integrity" "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==" - "resolved" "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz" - "version" "2.6.9" - dependencies: - "ms" "2.0.0" + "integrity" "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==" + "resolved" "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz" + "version" "3.1.1" "debug@^2.6.0": "integrity" "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==" @@ -3381,24 +3434,10 @@ dependencies: "ms" "2.0.0" -"debug@^3.1.1": - "integrity" "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==" - "resolved" "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz" - "version" "3.2.7" - dependencies: - "ms" "^2.1.1" - -"debug@^3.2.6": - "integrity" "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==" - "resolved" "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz" - "version" "3.2.7" - dependencies: - "ms" "^2.1.1" - -"debug@^4.0.1", "debug@^4.1.0", "debug@^4.1.1": - "integrity" "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==" - "resolved" "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz" - "version" "4.3.1" +"debug@^4.0.1", "debug@^4.1.0", "debug@^4.1.1", "debug@4": + "integrity" "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==" + "resolved" "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz" + "version" "4.3.4" dependencies: "ms" "2.1.2" @@ -3409,109 +3448,57 @@ dependencies: "ms" "2.0.0" -"decamelize@^1.2.0": - "integrity" "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" - "resolved" "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz" - "version" "1.2.0" - -"decode-uri-component@^0.2.0": - "integrity" "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=" - "resolved" "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz" - "version" "0.2.0" - "decompress-response@^3.3.0": - "integrity" "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=" + "integrity" "sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==" "resolved" "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz" "version" "3.3.0" dependencies: "mimic-response" "^1.0.0" -"deep-equal@^1.0.1": - "integrity" "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==" - "resolved" "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz" - "version" "1.1.1" - dependencies: - "is-arguments" "^1.0.4" - "is-date-object" "^1.0.1" - "is-regex" "^1.0.4" - "object-is" "^1.0.1" - "object-keys" "^1.1.1" - "regexp.prototype.flags" "^1.2.0" - "deep-extend@^0.6.0": "integrity" "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" "resolved" "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz" "version" "0.6.0" "deep-is@^0.1.3": - "integrity" "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=" - "resolved" "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz" - "version" "0.1.3" + "integrity" "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" + "resolved" "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz" + "version" "0.1.4" "deepmerge@^4.2.2": "integrity" "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==" "resolved" "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz" "version" "4.2.2" -"default-gateway@^4.2.0": - "integrity" "sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA==" - "resolved" "https://registry.npmjs.org/default-gateway/-/default-gateway-4.2.0.tgz" - "version" "4.2.0" +"default-gateway@^6.0.3": + "integrity" "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==" + "resolved" "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz" + "version" "6.0.3" dependencies: - "execa" "^1.0.0" - "ip-regex" "^2.1.0" + "execa" "^5.0.0" "defer-to-connect@^1.0.1": "integrity" "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==" "resolved" "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz" "version" "1.1.3" -"define-properties@^1.1.3": - "integrity" "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==" - "resolved" "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz" - "version" "1.1.3" - dependencies: - "object-keys" "^1.0.12" - -"define-property@^0.2.5": - "integrity" "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=" - "resolved" "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz" - "version" "0.2.5" - dependencies: - "is-descriptor" "^0.1.0" - -"define-property@^1.0.0": - "integrity" "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=" - "resolved" "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz" - "version" "1.0.0" - dependencies: - "is-descriptor" "^1.0.0" +"define-lazy-prop@^2.0.0": + "integrity" "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==" + "resolved" "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz" + "version" "2.0.0" -"define-property@^2.0.2": - "integrity" "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==" - "resolved" "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz" - "version" "2.0.2" +"define-properties@^1.1.3", "define-properties@^1.1.4": + "integrity" "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==" + "resolved" "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz" + "version" "1.1.4" dependencies: - "is-descriptor" "^1.0.2" - "isobject" "^3.0.1" + "has-property-descriptors" "^1.0.0" + "object-keys" "^1.1.1" -"del@^4.1.1": - "integrity" "sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==" - "resolved" "https://registry.npmjs.org/del/-/del-4.1.1.tgz" - "version" "4.1.1" - dependencies: - "@types/glob" "^7.1.1" - "globby" "^6.1.0" - "is-path-cwd" "^2.0.0" - "is-path-in-cwd" "^2.0.0" - "p-map" "^2.0.0" - "pify" "^4.0.1" - "rimraf" "^2.6.3" - -"del@^6.0.0": - "integrity" "sha512-1shh9DQ23L16oXSZKB2JxpL7iMy2E0S9d517ptA1P8iw0alkPtQcrKH7ru31rYtKwF499HkTu+DRzq3TCKDFRQ==" - "resolved" "https://registry.npmjs.org/del/-/del-6.0.0.tgz" - "version" "6.0.0" +"del@^6.1.1": + "integrity" "sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg==" + "resolved" "https://registry.npmjs.org/del/-/del-6.1.1.tgz" + "version" "6.1.1" dependencies: "globby" "^11.0.1" "graceful-fs" "^4.2.4" @@ -3522,20 +3509,20 @@ "rimraf" "^3.0.2" "slash" "^3.0.0" -"delegate@^3.1.2": - "integrity" "sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw==" - "resolved" "https://registry.npmjs.org/delegate/-/delegate-3.2.0.tgz" - "version" "3.2.0" - "depd@~1.1.2": - "integrity" "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" + "integrity" "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==" "resolved" "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz" "version" "1.1.2" -"destroy@~1.0.4": - "integrity" "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" - "resolved" "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz" - "version" "1.0.4" +"depd@2.0.0": + "integrity" "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" + "resolved" "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz" + "version" "2.0.0" + +"destroy@1.2.0": + "integrity" "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==" + "resolved" "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz" + "version" "1.2.0" "detab@2.0.4": "integrity" "sha512-8zdsQA5bIkoRECvCrNKPla84lyoR7DSAyf7p0YgXzBO9PDJx8KntPUay7NS6yp+KdxdVtiE5SpHKtbp2ZQyA9g==" @@ -3545,11 +3532,11 @@ "repeat-string" "^1.5.4" "detect-node@^2.0.4": - "integrity" "sha512-qi86tE6hRcFHy8jI1m2VG+LaPUR1LhqDa5G8tVjuUXmOrpuAgqsA1pN0+ldgr3aKUH+QLI9hCY/OcRYisERejw==" - "resolved" "https://registry.npmjs.org/detect-node/-/detect-node-2.0.5.tgz" - "version" "2.0.5" + "integrity" "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==" + "resolved" "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz" + "version" "2.1.0" -"detect-port-alt@1.1.6": +"detect-port-alt@^1.1.6": "integrity" "sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q==" "resolved" "https://registry.npmjs.org/detect-port-alt/-/detect-port-alt-1.1.6.tgz" "version" "1.1.6" @@ -3558,12 +3545,12 @@ "debug" "^2.6.0" "detect-port@^1.3.0": - "integrity" "sha512-E+B1gzkl2gqxt1IhUzwjrxBKRqx1UzC3WLONHinn8S3T6lwV/agVCyitiFOsGJ/eYuEUBvD71MZHy3Pv1G9doQ==" - "resolved" "https://registry.npmjs.org/detect-port/-/detect-port-1.3.0.tgz" - "version" "1.3.0" + "integrity" "sha512-aBzdj76lueB6uUst5iAs7+0H/oOjqI5D16XUWxlWMIMROhcM0rfsNVk93zTngq1dDNpoXRr++Sus7ETAExppAQ==" + "resolved" "https://registry.npmjs.org/detect-port/-/detect-port-1.5.1.tgz" + "version" "1.5.1" dependencies: "address" "^1.0.1" - "debug" "^2.6.0" + "debug" "4" "dir-glob@^3.0.1": "integrity" "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==" @@ -3573,24 +3560,16 @@ "path-type" "^4.0.0" "dns-equal@^1.0.0": - "integrity" "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=" + "integrity" "sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==" "resolved" "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz" "version" "1.0.0" -"dns-packet@^1.3.1": - "integrity" "sha512-BQ6F4vycLXBvdrJZ6S3gZewt6rcrks9KBgM9vrhW+knGRqc8uEdT7fuCwloc7nny5xNoMJ17HGH0R/6fpo8ECA==" - "resolved" "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.4.tgz" - "version" "1.3.4" - dependencies: - "ip" "^1.1.0" - "safe-buffer" "^5.0.1" - -"dns-txt@^2.0.2": - "integrity" "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=" - "resolved" "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz" - "version" "2.0.2" +"dns-packet@^5.2.2": + "integrity" "sha512-EgqGeaBB8hLiHLZtp/IbaDQTL8pZ0+IvwzSHA6d7VyMDM+B9hgddEMa9xjK5oYnw0ci0JQ6g2XCD7/f6cafU6g==" + "resolved" "https://registry.npmjs.org/dns-packet/-/dns-packet-5.4.0.tgz" + "version" "5.4.0" dependencies: - "buffer-indexof" "^1.0.0" + "@leichtgewicht/ip-codec" "^2.0.1" "doctrine@^2.1.0": "integrity" "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==" @@ -3606,7 +3585,7 @@ dependencies: "esutils" "^2.0.2" -"dom-converter@^0.2": +"dom-converter@^0.2.0": "integrity" "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==" "resolved" "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz" "version" "0.2.0" @@ -3614,71 +3593,60 @@ "utila" "~0.4" "dom-serializer@^1.0.1": - "integrity" "sha512-Pv2ZluG5ife96udGgEDovOOOA5UELkltfJpnIExPrAk1LTvecolUGn6lIaoLh86d83GiB86CjzciMd9BuRB71Q==" - "resolved" "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.1.tgz" - "version" "1.3.1" + "integrity" "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==" + "resolved" "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz" + "version" "1.4.1" dependencies: "domelementtype" "^2.0.1" - "domhandler" "^4.0.0" + "domhandler" "^4.2.0" "entities" "^2.0.0" -"dom-serializer@~0.1.0", "dom-serializer@0": - "integrity" "sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA==" - "resolved" "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.1.tgz" - "version" "0.1.1" +"dom-serializer@^2.0.0": + "integrity" "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==" + "resolved" "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz" + "version" "2.0.0" dependencies: - "domelementtype" "^1.3.0" - "entities" "^1.1.1" - -"domelementtype@^1.3.0", "domelementtype@^1.3.1", "domelementtype@1": - "integrity" "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==" - "resolved" "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz" - "version" "1.3.1" - -"domelementtype@^2.0.1", "domelementtype@^2.2.0": - "integrity" "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==" - "resolved" "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz" - "version" "2.2.0" + "domelementtype" "^2.3.0" + "domhandler" "^5.0.2" + "entities" "^4.2.0" -"domhandler@^2.3.0": - "integrity" "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==" - "resolved" "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz" - "version" "2.4.2" - dependencies: - "domelementtype" "1" +"domelementtype@^2.0.1", "domelementtype@^2.2.0", "domelementtype@^2.3.0": + "integrity" "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==" + "resolved" "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz" + "version" "2.3.0" -"domhandler@^4.0.0", "domhandler@^4.2.0": - "integrity" "sha512-zk7sgt970kzPks2Bf+dwT/PLzghLnsivb9CcxkvR8Mzr66Olr0Ofd8neSbglHJHaHa2MadfoSdNlKYAaafmWfA==" - "resolved" "https://registry.npmjs.org/domhandler/-/domhandler-4.2.0.tgz" - "version" "4.2.0" +"domhandler@^4.0.0", "domhandler@^4.2.0", "domhandler@^4.3.1": + "integrity" "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==" + "resolved" "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz" + "version" "4.3.1" dependencies: "domelementtype" "^2.2.0" -"domutils@^1.5.1", "domutils@1.5.1": - "integrity" "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=" - "resolved" "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz" - "version" "1.5.1" - dependencies: - "dom-serializer" "0" - "domelementtype" "1" - -"domutils@^1.7.0": - "integrity" "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==" - "resolved" "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz" - "version" "1.7.0" +"domhandler@^5.0.1", "domhandler@^5.0.2", "domhandler@^5.0.3": + "integrity" "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==" + "resolved" "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz" + "version" "5.0.3" dependencies: - "dom-serializer" "0" - "domelementtype" "1" + "domelementtype" "^2.3.0" -"domutils@^2.4.3": - "integrity" "sha512-y0BezHuy4MDYxh6OvolXYsH+1EMGmFbwv5FKW7ovwMG6zTPWqNPq3WF9ayZssFq+UlKdffGLbOEaghNdaOm1WA==" - "resolved" "https://registry.npmjs.org/domutils/-/domutils-2.6.0.tgz" - "version" "2.6.0" +"domutils@^2.5.2", "domutils@^2.8.0": + "integrity" "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==" + "resolved" "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz" + "version" "2.8.0" dependencies: "dom-serializer" "^1.0.1" "domelementtype" "^2.2.0" "domhandler" "^4.2.0" +"domutils@^3.0.1": + "integrity" "sha512-z08c1l761iKhDFtfXO04C7kTdPBLi41zwOZl00WS8b5eiaebNpY00HKbztwBq+e3vyqWNwWF3mP9YLUeqIrF+Q==" + "resolved" "https://registry.npmjs.org/domutils/-/domutils-3.0.1.tgz" + "version" "3.0.1" + dependencies: + "dom-serializer" "^2.0.0" + "domelementtype" "^2.3.0" + "domhandler" "^5.0.1" + "dot-case@^3.0.4": "integrity" "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==" "resolved" "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz" @@ -3694,40 +3662,40 @@ dependencies: "is-obj" "^2.0.0" -"duplexer@^0.1.1", "duplexer@^0.1.2": +"duplexer@^0.1.2": "integrity" "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==" "resolved" "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz" "version" "0.1.2" "duplexer3@^0.1.4": - "integrity" "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=" - "resolved" "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz" - "version" "0.1.4" + "integrity" "sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA==" + "resolved" "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.5.tgz" + "version" "0.1.5" + +"eastasianwidth@^0.2.0": + "integrity" "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" + "resolved" "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz" + "version" "0.2.0" "ee-first@1.1.1": - "integrity" "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" + "integrity" "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" "resolved" "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz" "version" "1.1.1" -"electron-to-chromium@^1.3.564", "electron-to-chromium@^1.3.723": - "integrity" "sha512-Mfz4FIB4FSvEwBpDfdipRIrwd6uo8gUDoRDF4QEYb4h4tSuI3ov594OrjU6on042UlFHouIJpClDODGkPcBSbg==" - "resolved" "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.727.tgz" - "version" "1.3.727" - -"emoji-regex@^7.0.1": - "integrity" "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" - "resolved" "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz" - "version" "7.0.3" +"electron-to-chromium@^1.4.251": + "integrity" "sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==" + "resolved" "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz" + "version" "1.4.284" "emoji-regex@^8.0.0": "integrity" "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" "resolved" "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz" "version" "8.0.0" -"emoji-regex@>=6.0.0 <=6.1.1": - "integrity" "sha1-xs0OwbBkLio8Z6ETfvxeeW2k+I4=" - "resolved" "https://registry.npmjs.org/emoji-regex/-/emoji-regex-6.1.1.tgz" - "version" "6.1.1" +"emoji-regex@^9.2.2": + "integrity" "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" + "resolved" "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz" + "version" "9.2.2" "emojis-list@^3.0.0": "integrity" "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==" @@ -3740,7 +3708,7 @@ "version" "3.2.0" "encodeurl@~1.0.2": - "integrity" "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" + "integrity" "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==" "resolved" "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz" "version" "1.0.2" @@ -3751,10 +3719,10 @@ dependencies: "once" "^1.4.0" -"enhanced-resolve@^5.8.0": - "integrity" "sha512-F27oB3WuHDzvR2DOGNTaYy0D5o0cnrv8TeI482VM4kYgQd/FT9lUQwuNsJ0oOHtBUq7eiW5ytqzp7nBFknL+GA==" - "resolved" "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.8.2.tgz" - "version" "5.8.2" +"enhanced-resolve@^5.10.0": + "integrity" "sha512-T0yTFjdpldGY8PmuXXR0PyQ1ufZpEGiHVrp7zHKB7jdR4qlmZHhONVM5AQOAWXuF/w3dnHbEQVrNptJgt7F+cQ==" + "resolved" "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.10.0.tgz" + "version" "5.10.0" dependencies: "graceful-fs" "^4.2.4" "tapable" "^2.2.0" @@ -3766,22 +3734,15 @@ dependencies: "ansi-colors" "^4.1.1" -"entities@^1.1.1", "entities@~1.1.1": - "integrity" "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==" - "resolved" "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz" - "version" "1.1.2" - "entities@^2.0.0": "integrity" "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==" "resolved" "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz" "version" "2.2.0" -"errno@^0.1.3": - "integrity" "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==" - "resolved" "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz" - "version" "0.1.8" - dependencies: - "prr" "~1.0.1" +"entities@^4.2.0", "entities@^4.3.0", "entities@^4.4.0": + "integrity" "sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA==" + "resolved" "https://registry.npmjs.org/entities/-/entities-4.4.0.tgz" + "version" "4.4.0" "error-ex@^1.3.1": "integrity" "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==" @@ -3790,32 +3751,47 @@ dependencies: "is-arrayish" "^0.2.1" -"es-abstract@^1.17.2", "es-abstract@^1.18.0-next.1", "es-abstract@^1.18.0-next.2": - "integrity" "sha512-LJzK7MrQa8TS0ja2w3YNLzUgJCGPdPOV1yVvezjNnS89D+VR08+Szt2mz3YB2Dck/+w5tfIq/RoUAFqJJGM2yw==" - "resolved" "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0.tgz" - "version" "1.18.0" +"es-abstract@^1.19.0", "es-abstract@^1.19.1", "es-abstract@^1.19.2", "es-abstract@^1.19.5": + "integrity" "sha512-0UtvRN79eMe2L+UNEF1BwRe364sj/DXhQ/k5FmivgoSdpM90b8Jc0mDzKMGo7QS0BVbOP/bTwBKNnDc9rNzaPA==" + "resolved" "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.4.tgz" + "version" "1.20.4" dependencies: "call-bind" "^1.0.2" "es-to-primitive" "^1.2.1" "function-bind" "^1.1.1" - "get-intrinsic" "^1.1.1" + "function.prototype.name" "^1.1.5" + "get-intrinsic" "^1.1.3" + "get-symbol-description" "^1.0.0" "has" "^1.0.3" - "has-symbols" "^1.0.2" - "is-callable" "^1.2.3" - "is-negative-zero" "^2.0.1" - "is-regex" "^1.1.2" - "is-string" "^1.0.5" - "object-inspect" "^1.9.0" + "has-property-descriptors" "^1.0.0" + "has-symbols" "^1.0.3" + "internal-slot" "^1.0.3" + "is-callable" "^1.2.7" + "is-negative-zero" "^2.0.2" + "is-regex" "^1.1.4" + "is-shared-array-buffer" "^1.0.2" + "is-string" "^1.0.7" + "is-weakref" "^1.0.2" + "object-inspect" "^1.12.2" "object-keys" "^1.1.1" - "object.assign" "^4.1.2" - "string.prototype.trimend" "^1.0.4" - "string.prototype.trimstart" "^1.0.4" - "unbox-primitive" "^1.0.0" - -"es-module-lexer@^0.4.0": - "integrity" "sha512-ooYciCUtfw6/d2w56UVeqHPcoCFAiJdz5XOkYpv/Txl1HMUozpXjz/2RIQgqwKdXNDPSF1W7mJCFse3G+HDyAA==" - "resolved" "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.4.1.tgz" - "version" "0.4.1" + "object.assign" "^4.1.4" + "regexp.prototype.flags" "^1.4.3" + "safe-regex-test" "^1.0.0" + "string.prototype.trimend" "^1.0.5" + "string.prototype.trimstart" "^1.0.5" + "unbox-primitive" "^1.0.2" + +"es-module-lexer@^0.9.0": + "integrity" "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==" + "resolved" "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz" + "version" "0.9.3" + +"es-shim-unscopables@^1.0.0": + "integrity" "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==" + "resolved" "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz" + "version" "1.0.0" + dependencies: + "has" "^1.0.3" "es-to-primitive@^1.2.1": "integrity" "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==" @@ -3826,7 +3802,7 @@ "is-date-object" "^1.0.1" "is-symbol" "^1.0.2" -"escalade@^3.0.2", "escalade@^3.1.1": +"escalade@^3.1.1": "integrity" "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" "resolved" "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz" "version" "3.1.1" @@ -3837,12 +3813,12 @@ "version" "2.1.1" "escape-html@^1.0.3", "escape-html@~1.0.3": - "integrity" "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" + "integrity" "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" "resolved" "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz" "version" "1.0.3" "escape-string-regexp@^1.0.5": - "integrity" "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + "integrity" "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" "resolved" "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" "version" "1.0.5" @@ -3851,30 +3827,27 @@ "resolved" "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz" "version" "4.0.0" -"escape-string-regexp@2.0.0": - "integrity" "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==" - "resolved" "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz" - "version" "2.0.0" - "eslint-plugin-react@^7.20.0": - "integrity" "sha512-AfjgFQB+nYszudkxRkTFu0UR1zEQig0ArVMPloKhxwlwkzaw/fBiH0QWcBBhZONlXqQC51+nfqFrkn4EzHcGBw==" - "resolved" "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.23.2.tgz" - "version" "7.23.2" + "integrity" "sha512-e4N/nc6AAlg4UKW/mXeYWd3R++qUano5/o+t+wnWxIf+bLsOaH3a4q74kX3nDjYym3VBN4HyO9nEn1GcAqgQOA==" + "resolved" "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.31.10.tgz" + "version" "7.31.10" dependencies: - "array-includes" "^3.1.3" - "array.prototype.flatmap" "^1.2.4" + "array-includes" "^3.1.5" + "array.prototype.flatmap" "^1.3.0" "doctrine" "^2.1.0" - "has" "^1.0.3" + "estraverse" "^5.3.0" "jsx-ast-utils" "^2.4.1 || ^3.0.0" - "minimatch" "^3.0.4" - "object.entries" "^1.1.3" - "object.fromentries" "^2.0.4" - "object.values" "^1.1.3" - "prop-types" "^15.7.2" + "minimatch" "^3.1.2" + "object.entries" "^1.1.5" + "object.fromentries" "^2.0.5" + "object.hasown" "^1.1.1" + "object.values" "^1.1.5" + "prop-types" "^15.8.1" "resolve" "^2.0.0-next.3" - "string.prototype.matchall" "^4.0.4" + "semver" "^6.3.0" + "string.prototype.matchall" "^4.0.7" -"eslint-scope@^5.1.1": +"eslint-scope@^5.1.1", "eslint-scope@5.1.1": "integrity" "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==" "resolved" "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz" "version" "5.1.1" @@ -3899,28 +3872,31 @@ "resolved" "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz" "version" "2.1.0" -"eslint@^3 || ^4 || ^5 || ^6 || ^7", "eslint@^7.3.1", "eslint@>= 4.12.1": - "integrity" "sha512-4R1ieRf52/izcZE7AlLy56uIHHDLT74Yzz2Iv2l6kDaYvEu9x+wMB5dZArVL8SYGXSYV2YAg70FcW5Y5nGGNIg==" - "resolved" "https://registry.npmjs.org/eslint/-/eslint-7.26.0.tgz" - "version" "7.26.0" +"eslint@^3 || ^4 || ^5 || ^6 || ^7 || ^8", "eslint@^7.3.1", "eslint@>= 4.12.1", "eslint@>= 6": + "integrity" "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==" + "resolved" "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz" + "version" "7.32.0" dependencies: "@babel/code-frame" "7.12.11" - "@eslint/eslintrc" "^0.4.1" + "@eslint/eslintrc" "^0.4.3" + "@humanwhocodes/config-array" "^0.5.0" "ajv" "^6.10.0" "chalk" "^4.0.0" "cross-spawn" "^7.0.2" "debug" "^4.0.1" "doctrine" "^3.0.0" "enquirer" "^2.3.5" + "escape-string-regexp" "^4.0.0" "eslint-scope" "^5.1.1" "eslint-utils" "^2.1.0" "eslint-visitor-keys" "^2.0.0" "espree" "^7.3.1" "esquery" "^1.4.0" "esutils" "^2.0.2" + "fast-deep-equal" "^3.1.3" "file-entry-cache" "^6.0.1" "functional-red-black-tree" "^1.0.1" - "glob-parent" "^5.0.0" + "glob-parent" "^5.1.2" "globals" "^13.6.0" "ignore" "^4.0.6" "import-fresh" "^3.0.0" @@ -3929,7 +3905,7 @@ "js-yaml" "^3.13.1" "json-stable-stringify-without-jsonify" "^1.0.1" "levn" "^0.4.1" - "lodash" "^4.17.21" + "lodash.merge" "^4.6.2" "minimatch" "^3.0.4" "natural-compare" "^1.4.0" "optionator" "^0.9.1" @@ -3938,7 +3914,7 @@ "semver" "^7.2.1" "strip-ansi" "^6.0.0" "strip-json-comments" "^3.1.0" - "table" "^6.0.4" + "table" "^6.0.9" "text-table" "^0.2.0" "v8-compile-cache" "^2.0.3" @@ -3975,36 +3951,32 @@ "resolved" "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz" "version" "4.3.0" -"estraverse@^5.1.0": - "integrity" "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==" - "resolved" "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz" - "version" "5.2.0" - -"estraverse@^5.2.0": - "integrity" "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==" - "resolved" "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz" - "version" "5.2.0" +"estraverse@^5.1.0", "estraverse@^5.2.0", "estraverse@^5.3.0": + "integrity" "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==" + "resolved" "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz" + "version" "5.3.0" "esutils@^2.0.2": "integrity" "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" "resolved" "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz" "version" "2.0.3" -"eta@^1.12.1": - "integrity" "sha512-H8npoci2J/7XiPnVcCVulBSPsTNGvGaINyMjQDU8AFqp9LGsEYS88g2CiU+d01Sg44WtX7o4nb8wUJ9vnI+tiA==" - "resolved" "https://registry.npmjs.org/eta/-/eta-1.12.1.tgz" - "version" "1.12.1" +"eta@^1.12.3": + "integrity" "sha512-qHixwbDLtekO/d51Yr4glcaUJCIjGVJyTzuqV4GPlgZo1YpgOKG+avQynErZIYrfM6JIJdtiG2Kox8tbb+DoGg==" + "resolved" "https://registry.npmjs.org/eta/-/eta-1.12.3.tgz" + "version" "1.12.3" "etag@~1.8.1": - "integrity" "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" + "integrity" "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==" "resolved" "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz" "version" "1.8.1" -"eval@^0.1.4": - "integrity" "sha512-o0XUw+5OGkXw4pJZzQoXUk+H87DHuC+7ZE//oSrRGtatTmr12oTnLfg6QOq9DyTt0c/p4TwzgmkKrBzWTSizyQ==" - "resolved" "https://registry.npmjs.org/eval/-/eval-0.1.6.tgz" - "version" "0.1.6" +"eval@^0.1.8": + "integrity" "sha512-EzV94NYKoO09GLXGjXj9JIlXijVck4ONSr5wiCWDvhsvj5jxSrzTmRU/9C1DyB6uToszLs8aifA6NQ7lEQdvFw==" + "resolved" "https://registry.npmjs.org/eval/-/eval-0.1.8.tgz" + "version" "0.1.8" dependencies: + "@types/node" "*" "require-like" ">= 0.1.1" "eventemitter3@^4.0.0": @@ -4012,40 +3984,15 @@ "resolved" "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz" "version" "4.0.7" -"events@^1.1.1": - "integrity" "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=" - "resolved" "https://registry.npmjs.org/events/-/events-1.1.1.tgz" - "version" "1.1.1" - "events@^3.2.0": "integrity" "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==" "resolved" "https://registry.npmjs.org/events/-/events-3.3.0.tgz" "version" "3.3.0" -"eventsource@^1.0.7": - "integrity" "sha512-VSJjT5oCNrFvCS6igjzPAt5hBzQ2qPBFIbJ03zLI9SE0mxwZpMw6BfJrbFHm1a141AavMEB8JHmBhWAd66PfCg==" - "resolved" "https://registry.npmjs.org/eventsource/-/eventsource-1.1.0.tgz" - "version" "1.1.0" - dependencies: - "original" "^1.0.0" - -"execa@^1.0.0": - "integrity" "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==" - "resolved" "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz" - "version" "1.0.0" - dependencies: - "cross-spawn" "^6.0.0" - "get-stream" "^4.0.0" - "is-stream" "^1.1.0" - "npm-run-path" "^2.0.0" - "p-finally" "^1.0.0" - "signal-exit" "^3.0.0" - "strip-eof" "^1.0.0" - "execa@^5.0.0": - "integrity" "sha512-ov6w/2LCiuyO4RLYGdpFGjkcs0wMTgGE8PrkTHikeUy5iJekXyPIKUjifk5CsE0pt7sMCrMZ3YNqoCj6idQOnQ==" - "resolved" "https://registry.npmjs.org/execa/-/execa-5.0.0.tgz" - "version" "5.0.0" + "integrity" "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==" + "resolved" "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz" + "version" "5.1.1" dependencies: "cross-spawn" "^7.0.3" "get-stream" "^6.0.0" @@ -4057,113 +4004,70 @@ "signal-exit" "^3.0.3" "strip-final-newline" "^2.0.0" -"expand-brackets@^2.1.4": - "integrity" "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=" - "resolved" "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz" - "version" "2.1.4" - dependencies: - "debug" "^2.3.3" - "define-property" "^0.2.5" - "extend-shallow" "^2.0.1" - "posix-character-classes" "^0.1.0" - "regex-not" "^1.0.0" - "snapdragon" "^0.8.1" - "to-regex" "^3.0.1" - -"express@^4.17.1": - "integrity" "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==" - "resolved" "https://registry.npmjs.org/express/-/express-4.17.1.tgz" - "version" "4.17.1" +"express@^4.17.3": + "integrity" "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==" + "resolved" "https://registry.npmjs.org/express/-/express-4.18.2.tgz" + "version" "4.18.2" dependencies: - "accepts" "~1.3.7" + "accepts" "~1.3.8" "array-flatten" "1.1.1" - "body-parser" "1.19.0" - "content-disposition" "0.5.3" + "body-parser" "1.20.1" + "content-disposition" "0.5.4" "content-type" "~1.0.4" - "cookie" "0.4.0" + "cookie" "0.5.0" "cookie-signature" "1.0.6" "debug" "2.6.9" - "depd" "~1.1.2" + "depd" "2.0.0" "encodeurl" "~1.0.2" "escape-html" "~1.0.3" "etag" "~1.8.1" - "finalhandler" "~1.1.2" + "finalhandler" "1.2.0" "fresh" "0.5.2" + "http-errors" "2.0.0" "merge-descriptors" "1.0.1" "methods" "~1.1.2" - "on-finished" "~2.3.0" + "on-finished" "2.4.1" "parseurl" "~1.3.3" "path-to-regexp" "0.1.7" - "proxy-addr" "~2.0.5" - "qs" "6.7.0" + "proxy-addr" "~2.0.7" + "qs" "6.11.0" "range-parser" "~1.2.1" - "safe-buffer" "5.1.2" - "send" "0.17.1" - "serve-static" "1.14.1" - "setprototypeof" "1.1.1" - "statuses" "~1.5.0" + "safe-buffer" "5.2.1" + "send" "0.18.0" + "serve-static" "1.15.0" + "setprototypeof" "1.2.0" + "statuses" "2.0.1" "type-is" "~1.6.18" "utils-merge" "1.0.1" "vary" "~1.1.2" "extend-shallow@^2.0.1": - "integrity" "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=" + "integrity" "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==" "resolved" "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz" "version" "2.0.1" dependencies: "is-extendable" "^0.1.0" -"extend-shallow@^3.0.0": - "integrity" "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=" - "resolved" "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz" - "version" "3.0.2" - dependencies: - "assign-symbols" "^1.0.0" - "is-extendable" "^1.0.1" - -"extend-shallow@^3.0.2": - "integrity" "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=" - "resolved" "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz" - "version" "3.0.2" - dependencies: - "assign-symbols" "^1.0.0" - "is-extendable" "^1.0.1" - "extend@^3.0.0": "integrity" "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" "resolved" "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz" "version" "3.0.2" -"extglob@^2.0.4": - "integrity" "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==" - "resolved" "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz" - "version" "2.0.4" - dependencies: - "array-unique" "^0.3.2" - "define-property" "^1.0.0" - "expand-brackets" "^2.1.4" - "extend-shallow" "^2.0.1" - "fragment-cache" "^0.2.1" - "regex-not" "^1.0.0" - "snapdragon" "^0.8.1" - "to-regex" "^3.0.1" - -"fast-deep-equal@^3.1.1": +"fast-deep-equal@^3.1.1", "fast-deep-equal@^3.1.3": "integrity" "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" "resolved" "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz" "version" "3.1.3" -"fast-glob@^3.1.1", "fast-glob@^3.2.5": - "integrity" "sha512-2DtFcgT68wiTTiwZ2hNdJfcHNke9XOfnwmBRWXhmeKM8rF0TGwmC/Qto3S7RoZKp5cilZbxzO5iTNTQsJ+EeDg==" - "resolved" "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.5.tgz" - "version" "3.2.5" +"fast-glob@^3.2.11", "fast-glob@^3.2.9": + "integrity" "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==" + "resolved" "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz" + "version" "3.2.12" dependencies: "@nodelib/fs.stat" "^2.0.2" "@nodelib/fs.walk" "^1.2.3" - "glob-parent" "^5.1.0" + "glob-parent" "^5.1.2" "merge2" "^1.3.0" - "micromatch" "^4.0.2" - "picomatch" "^2.2.1" + "micromatch" "^4.0.4" "fast-json-stable-stringify@^2.0.0": "integrity" "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" @@ -4171,28 +4075,28 @@ "version" "2.1.0" "fast-levenshtein@^2.0.6": - "integrity" "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" + "integrity" "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==" "resolved" "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz" "version" "2.0.6" "fast-url-parser@1.1.3": - "integrity" "sha1-9K8+qfNNiicc9YrSs3WfQx8LMY0=" + "integrity" "sha512-5jOCVXADYNuRkKFzNJ0dCCewsZiYo0dz8QNYljkOpFC6r2U4OBmKtvm/Tsuh4w1YYdDqDb31a8TVhBJ2OJKdqQ==" "resolved" "https://registry.npmjs.org/fast-url-parser/-/fast-url-parser-1.1.3.tgz" "version" "1.1.3" dependencies: "punycode" "^1.3.2" "fastq@^1.6.0": - "integrity" "sha512-7Eczs8gIPDrVzT+EksYBcupqMyxSHXXrHOLRRxU2/DicV8789MRBRR8+Hc2uWzUupOs4YS4JzBmBxjjCVBxD/g==" - "resolved" "https://registry.npmjs.org/fastq/-/fastq-1.11.0.tgz" - "version" "1.11.0" + "integrity" "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==" + "resolved" "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz" + "version" "1.13.0" dependencies: "reusify" "^1.0.4" "faye-websocket@^0.11.3": - "integrity" "sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA==" - "resolved" "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.3.tgz" - "version" "0.11.3" + "integrity" "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==" + "resolved" "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz" + "version" "0.11.4" dependencies: "websocket-driver" ">=0.5.1" @@ -4208,18 +4112,25 @@ "resolved" "https://registry.npmjs.org/fbjs-css-vars/-/fbjs-css-vars-1.0.2.tgz" "version" "1.0.2" -"fbjs@^3.0.0": - "integrity" "sha512-dJd4PiDOFuhe7vk4F80Mba83Vr2QuK86FoxtgPmzBqEJahncp+13YCmfoa53KHCo6OnlXLG7eeMWPfB5CrpVKg==" - "resolved" "https://registry.npmjs.org/fbjs/-/fbjs-3.0.0.tgz" - "version" "3.0.0" +"fbjs@^3.0.0", "fbjs@^3.0.1": + "integrity" "sha512-ucV0tDODnGV3JCnnkmoszb5lf4bNpzjv80K41wd4k798Etq+UYD0y0TIfalLjZoKgjive6/adkRnszwapiDgBQ==" + "resolved" "https://registry.npmjs.org/fbjs/-/fbjs-3.0.4.tgz" + "version" "3.0.4" dependencies: - "cross-fetch" "^3.0.4" + "cross-fetch" "^3.1.5" "fbjs-css-vars" "^1.0.0" "loose-envify" "^1.0.0" "object-assign" "^4.1.0" "promise" "^7.1.1" "setimmediate" "^1.0.5" - "ua-parser-js" "^0.7.18" + "ua-parser-js" "^0.7.30" + +"fd-slicer@~1.1.0": + "integrity" "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==" + "resolved" "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz" + "version" "1.1.0" + dependencies: + "pend" "~1.2.0" "feed@^4.2.2": "integrity" "sha512-u5/sxGfiMfZNtJ3OvQpXcvotFpYkL0n9u9mM2vkui2nGo8b4wvDkJ8gAkYqbA8QpGyFCv3RK0Z+Iv+9veCS9bQ==" @@ -4228,13 +4139,6 @@ dependencies: "xml-js" "^1.6.11" -"figures@^3.2.0": - "integrity" "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==" - "resolved" "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz" - "version" "3.2.0" - dependencies: - "escape-string-regexp" "^1.0.5" - "file-entry-cache@^6.0.1": "integrity" "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==" "resolved" "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz" @@ -4245,30 +4149,15 @@ "file-loader@*", "file-loader@^6.2.0": "integrity" "sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==" "resolved" "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz" - "version" "6.2.0" - dependencies: - "loader-utils" "^2.0.0" - "schema-utils" "^3.0.0" - -"file-uri-to-path@1.0.0": - "integrity" "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==" - "resolved" "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz" - "version" "1.0.0" - -"filesize@6.1.0": - "integrity" "sha512-LpCHtPQ3sFx67z+uh2HnSyWSLLu5Jxo21795uRDuar/EOuYWXib5EmPaGIBuSnRqH2IODiKA2k5re/K9OnN/Yg==" - "resolved" "https://registry.npmjs.org/filesize/-/filesize-6.1.0.tgz" - "version" "6.1.0" - -"fill-range@^4.0.0": - "integrity" "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=" - "resolved" "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz" - "version" "4.0.0" + "version" "6.2.0" dependencies: - "extend-shallow" "^2.0.1" - "is-number" "^3.0.0" - "repeat-string" "^1.6.1" - "to-regex-range" "^2.1.0" + "loader-utils" "^2.0.0" + "schema-utils" "^3.0.0" + +"filesize@^8.0.6": + "integrity" "sha512-pjmC+bkIF8XI7fWaH8KxHcZL3DPybs1roSKP4rKDvy20tAWwIObE4+JIseG2byfGKhud5ZnM4YSGKBz7Sh0ndQ==" + "resolved" "https://registry.npmjs.org/filesize/-/filesize-8.0.7.tgz" + "version" "8.0.7" "fill-range@^7.0.1": "integrity" "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==" @@ -4277,23 +4166,23 @@ dependencies: "to-regex-range" "^5.0.1" -"finalhandler@~1.1.2": - "integrity" "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==" - "resolved" "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz" - "version" "1.1.2" +"finalhandler@1.2.0": + "integrity" "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==" + "resolved" "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz" + "version" "1.2.0" dependencies: "debug" "2.6.9" "encodeurl" "~1.0.2" "escape-html" "~1.0.3" - "on-finished" "~2.3.0" + "on-finished" "2.4.1" "parseurl" "~1.3.3" - "statuses" "~1.5.0" + "statuses" "2.0.1" "unpipe" "~1.0.0" "find-cache-dir@^3.3.1": - "integrity" "sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==" - "resolved" "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz" - "version" "3.3.1" + "integrity" "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==" + "resolved" "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz" + "version" "3.3.2" dependencies: "commondir" "^1.0.1" "make-dir" "^3.0.2" @@ -4306,7 +4195,7 @@ dependencies: "locate-path" "^3.0.0" -"find-up@^4.0.0", "find-up@4.1.0": +"find-up@^4.0.0": "integrity" "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==" "resolved" "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz" "version" "4.1.0" @@ -4331,64 +4220,67 @@ "rimraf" "^3.0.2" "flatted@^3.1.0": - "integrity" "sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA==" - "resolved" "https://registry.npmjs.org/flatted/-/flatted-3.1.1.tgz" - "version" "3.1.1" + "integrity" "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==" + "resolved" "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz" + "version" "3.2.7" "flux@^4.0.1": - "integrity" "sha512-emk4RCvJ8RzNP2lNpphKnG7r18q8elDYNAPx7xn+bDeOIo9FFfxEfIQ2y6YbQNmnsGD3nH1noxtLE64Puz1bRQ==" - "resolved" "https://registry.npmjs.org/flux/-/flux-4.0.1.tgz" - "version" "4.0.1" + "integrity" "sha512-yKAbrp7JhZhj6uiT1FTuVMlIAT1J4jqEyBpFApi1kxpGZCvacMVc/t1pMQyotqHhAgvoE3bNvAykhCo2CLjnYw==" + "resolved" "https://registry.npmjs.org/flux/-/flux-4.0.3.tgz" + "version" "4.0.3" dependencies: "fbemitter" "^3.0.0" - "fbjs" "^3.0.0" - -"follow-redirects@^1.0.0", "follow-redirects@^1.10.0": - "integrity" "sha512-HWqDgT7ZEkqRzBvc2s64vSZ/hfOceEol3ac/7tKwzuvEyWx3/4UegXh5oBOIotkGsObyk3xznnSRVADBgWSQVg==" - "resolved" "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.1.tgz" - "version" "1.14.1" + "fbjs" "^3.0.1" -"for-in@^1.0.2": - "integrity" "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=" - "resolved" "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz" - "version" "1.0.2" +"follow-redirects@^1.0.0", "follow-redirects@^1.14.7": + "integrity" "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==" + "resolved" "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz" + "version" "1.15.2" -"fork-ts-checker-webpack-plugin@4.1.6": - "integrity" "sha512-DUxuQaKoqfNne8iikd14SAkh5uw4+8vNifp6gmA73yYNS6ywLIWSLD/n/mBzHQRpW3J7rbATEakmiA8JvkTyZw==" - "resolved" "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-4.1.6.tgz" - "version" "4.1.6" +"fork-ts-checker-webpack-plugin@^6.5.0": + "integrity" "sha512-m5cUmF30xkZ7h4tWUgTAcEaKmUW7tfyUyTqNNOz7OxWJ0v1VWKTcOvH8FWHUwSjlW/356Ijc9vi3XfcPstpQKA==" + "resolved" "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.2.tgz" + "version" "6.5.2" dependencies: - "@babel/code-frame" "^7.5.5" - "chalk" "^2.4.1" - "micromatch" "^3.1.10" + "@babel/code-frame" "^7.8.3" + "@types/json-schema" "^7.0.5" + "chalk" "^4.1.0" + "chokidar" "^3.4.2" + "cosmiconfig" "^6.0.0" + "deepmerge" "^4.2.2" + "fs-extra" "^9.0.0" + "glob" "^7.1.6" + "memfs" "^3.1.2" "minimatch" "^3.0.4" - "semver" "^5.6.0" + "schema-utils" "2.7.0" + "semver" "^7.3.2" "tapable" "^1.0.0" - "worker-rpc" "^0.1.0" - -"forwarded@~0.1.2": - "integrity" "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" - "resolved" "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz" - "version" "0.1.2" -"fraction.js@^4.0.13": - "integrity" "sha512-o9lSKpK0TDqDwTL24Hxqi6I99s942l6TYkfl6WvGWgLOIFz/YonSGKfiSeMadoiNvTfqnfOa9mjb5SGVbBK9/w==" - "resolved" "https://registry.npmjs.org/fraction.js/-/fraction.js-4.1.0.tgz" - "version" "4.1.0" +"forwarded@0.2.0": + "integrity" "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==" + "resolved" "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz" + "version" "0.2.0" -"fragment-cache@^0.2.1": - "integrity" "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=" - "resolved" "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz" - "version" "0.2.1" - dependencies: - "map-cache" "^0.2.2" +"fraction.js@^4.2.0": + "integrity" "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==" + "resolved" "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz" + "version" "4.2.0" "fresh@0.5.2": - "integrity" "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" + "integrity" "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==" "resolved" "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz" "version" "0.5.2" -"fs-extra@^9.1.0": +"fs-extra@^10.1.0": + "integrity" "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==" + "resolved" "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz" + "version" "10.1.0" + dependencies: + "graceful-fs" "^4.2.0" + "jsonfile" "^6.0.1" + "universalify" "^2.0.0" + +"fs-extra@^9.0.0": "integrity" "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==" "resolved" "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz" "version" "9.1.0" @@ -4398,20 +4290,24 @@ "jsonfile" "^6.0.1" "universalify" "^2.0.0" +"fs-minipass@^1.2.7": + "integrity" "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==" + "resolved" "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz" + "version" "1.2.7" + dependencies: + "minipass" "^2.6.0" + +"fs-monkey@^1.0.3": + "integrity" "sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q==" + "resolved" "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.3.tgz" + "version" "1.0.3" + "fs.realpath@^1.0.0": - "integrity" "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + "integrity" "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" "resolved" "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" "version" "1.0.0" -"fsevents@^1.2.7": - "integrity" "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==" - "resolved" "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz" - "version" "1.2.13" - dependencies: - "bindings" "^1.5.0" - "nan" "^2.12.1" - -"fsevents@~2.3.1": +"fsevents@~2.3.2": "integrity" "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==" "resolved" "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz" "version" "2.3.2" @@ -4421,42 +4317,45 @@ "resolved" "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz" "version" "1.1.1" +"function.prototype.name@^1.1.5": + "integrity" "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==" + "resolved" "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz" + "version" "1.1.5" + dependencies: + "call-bind" "^1.0.2" + "define-properties" "^1.1.3" + "es-abstract" "^1.19.0" + "functions-have-names" "^1.2.2" + "functional-red-black-tree@^1.0.1": - "integrity" "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=" + "integrity" "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==" "resolved" "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz" "version" "1.0.1" +"functions-have-names@^1.2.2": + "integrity" "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==" + "resolved" "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz" + "version" "1.2.3" + "gensync@^1.0.0-beta.1", "gensync@^1.0.0-beta.2": "integrity" "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==" "resolved" "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz" "version" "1.0.0-beta.2" -"get-caller-file@^2.0.1": - "integrity" "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" - "resolved" "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz" - "version" "2.0.5" - -"get-intrinsic@^1.0.2", "get-intrinsic@^1.1.0", "get-intrinsic@^1.1.1": - "integrity" "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==" - "resolved" "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz" - "version" "1.1.1" +"get-intrinsic@^1.0.2", "get-intrinsic@^1.1.0", "get-intrinsic@^1.1.1", "get-intrinsic@^1.1.3": + "integrity" "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==" + "resolved" "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz" + "version" "1.1.3" dependencies: "function-bind" "^1.1.1" "has" "^1.0.3" - "has-symbols" "^1.0.1" + "has-symbols" "^1.0.3" "get-own-enumerable-property-symbols@^3.0.0": "integrity" "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==" "resolved" "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz" "version" "3.0.2" -"get-stream@^4.0.0": - "integrity" "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==" - "resolved" "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz" - "version" "4.1.0" - dependencies: - "pump" "^3.0.0" - "get-stream@^4.1.0": "integrity" "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==" "resolved" "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz" @@ -4476,47 +4375,47 @@ "resolved" "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz" "version" "6.0.1" -"get-value@^2.0.3", "get-value@^2.0.6": - "integrity" "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=" - "resolved" "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz" - "version" "2.0.6" - -"github-slugger@^1.3.0": - "integrity" "sha512-gwJScWVNhFYSRDvURk/8yhcFBee6aFjye2a7Lhb2bUyRulpIoek9p0I9Kt7PT67d/nUlZbFu8L9RLiA0woQN8Q==" - "resolved" "https://registry.npmjs.org/github-slugger/-/github-slugger-1.3.0.tgz" - "version" "1.3.0" +"get-symbol-description@^1.0.0": + "integrity" "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==" + "resolved" "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz" + "version" "1.0.0" dependencies: - "emoji-regex" ">=6.0.0 <=6.1.1" + "call-bind" "^1.0.2" + "get-intrinsic" "^1.1.1" -"glob-parent@^3.1.0": - "integrity" "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=" - "resolved" "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz" - "version" "3.1.0" - dependencies: - "is-glob" "^3.1.0" - "path-dirname" "^1.0.0" +"github-slugger@^1.4.0": + "integrity" "sha512-w0dzqw/nt51xMVmlaV1+JRzN+oCa1KfcgGEWhxUG16wbdA+Xnt/yoFO8Z8x/V82ZcZ0wy6ln9QDup5avbhiDhQ==" + "resolved" "https://registry.npmjs.org/github-slugger/-/github-slugger-1.4.0.tgz" + "version" "1.4.0" -"glob-parent@^5.0.0", "glob-parent@^5.1.0", "glob-parent@^5.1.1", "glob-parent@~5.1.0": +"glob-parent@^5.1.2", "glob-parent@~5.1.2": "integrity" "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==" "resolved" "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" "version" "5.1.2" dependencies: "is-glob" "^4.0.1" +"glob-parent@^6.0.1": + "integrity" "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==" + "resolved" "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz" + "version" "6.0.2" + dependencies: + "is-glob" "^4.0.3" + "glob-to-regexp@^0.4.1": "integrity" "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==" "resolved" "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz" "version" "0.4.1" -"glob@^7.0.0", "glob@^7.0.3", "glob@^7.1.3": - "integrity" "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==" - "resolved" "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz" - "version" "7.1.7" +"glob@^7.0.0", "glob@^7.1.3", "glob@^7.1.6": + "integrity" "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==" + "resolved" "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz" + "version" "7.2.3" dependencies: "fs.realpath" "^1.0.0" "inflight" "^1.0.4" "inherits" "2" - "minimatch" "^3.0.4" + "minimatch" "^3.1.1" "once" "^1.3.0" "path-is-absolute" "^1.0.0" @@ -4527,7 +4426,7 @@ dependencies: "ini" "2.0.0" -"global-modules@2.0.0": +"global-modules@^2.0.0": "integrity" "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==" "resolved" "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz" "version" "2.0.0" @@ -4548,61 +4447,42 @@ "resolved" "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz" "version" "11.12.0" -"globals@^12.1.0": - "integrity" "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==" - "resolved" "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz" - "version" "12.4.0" - dependencies: - "type-fest" "^0.8.1" - "globals@^13.6.0": - "integrity" "sha512-rHtdA6+PDBIjeEvA91rpqzEvk/k3/i7EeNQiryiWuJH0Hw9cpyJMAt2jtbAwUaRdhD+573X4vWw6IcjKPasi9Q==" - "resolved" "https://registry.npmjs.org/globals/-/globals-13.8.0.tgz" - "version" "13.8.0" + "integrity" "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==" + "resolved" "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz" + "version" "13.17.0" dependencies: "type-fest" "^0.20.2" -"globby@^11.0.1", "globby@^11.0.2", "globby@^11.0.3": - "integrity" "sha512-ffdmosjA807y7+lA1NM0jELARVmYul/715xiILEjo3hBLPTcirgQNnXECn5g3mtR8TOLCVbkfua1Hpen25/Xcg==" - "resolved" "https://registry.npmjs.org/globby/-/globby-11.0.3.tgz" - "version" "11.0.3" - dependencies: - "array-union" "^2.1.0" - "dir-glob" "^3.0.1" - "fast-glob" "^3.1.1" - "ignore" "^5.1.4" - "merge2" "^1.3.0" - "slash" "^3.0.0" - -"globby@^6.1.0": - "integrity" "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=" - "resolved" "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz" - "version" "6.1.0" +"globals@^13.9.0": + "integrity" "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==" + "resolved" "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz" + "version" "13.17.0" dependencies: - "array-union" "^1.0.1" - "glob" "^7.0.3" - "object-assign" "^4.0.1" - "pify" "^2.0.0" - "pinkie-promise" "^2.0.0" + "type-fest" "^0.20.2" -"globby@11.0.1": - "integrity" "sha512-iH9RmgwCmUJHi2z5o2l3eTtGBtXek1OYlHrbcxOYugyHLmAsZrPj43OtHThd62Buh/Vv6VyCBD2bdyWcGNQqoQ==" - "resolved" "https://registry.npmjs.org/globby/-/globby-11.0.1.tgz" - "version" "11.0.1" +"globby@^11.0.1", "globby@^11.0.4", "globby@^11.1.0": + "integrity" "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==" + "resolved" "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz" + "version" "11.1.0" dependencies: "array-union" "^2.1.0" "dir-glob" "^3.0.1" - "fast-glob" "^3.1.1" - "ignore" "^5.1.4" - "merge2" "^1.3.0" + "fast-glob" "^3.2.9" + "ignore" "^5.2.0" + "merge2" "^1.4.1" "slash" "^3.0.0" -"good-listener@^1.2.2": - "integrity" "sha1-1TswzfkxPf+33JoNR3CWqm0UXFA=" - "resolved" "https://registry.npmjs.org/good-listener/-/good-listener-1.2.2.tgz" - "version" "1.2.2" +"globby@^13.1.1": + "integrity" "sha512-8krCNHXvlCgHDpegPzleMq07yMYTO2sXKASmZmquEYWEmCx6J5UTRbp5RwMJkTJGtcQ44YpiUYUiN0b9mzy8Bw==" + "resolved" "https://registry.npmjs.org/globby/-/globby-13.1.3.tgz" + "version" "13.1.3" dependencies: - "delegate" "^3.1.2" + "dir-glob" "^3.0.1" + "fast-glob" "^3.2.11" + "ignore" "^5.2.0" + "merge2" "^1.4.1" + "slash" "^4.0.0" "got@^9.6.0": "integrity" "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==" @@ -4621,12 +4501,12 @@ "to-readable-stream" "^1.0.0" "url-parse-lax" "^3.0.0" -"graceful-fs@^4.1.11", "graceful-fs@^4.1.2", "graceful-fs@^4.1.6", "graceful-fs@^4.2.0", "graceful-fs@^4.2.4": - "integrity" "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==" - "resolved" "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz" - "version" "4.2.6" +"graceful-fs@^4.1.2", "graceful-fs@^4.1.6", "graceful-fs@^4.2.0", "graceful-fs@^4.2.4", "graceful-fs@^4.2.6", "graceful-fs@^4.2.9": + "integrity" "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" + "resolved" "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz" + "version" "4.2.10" -"gray-matter@^4.0.2": +"gray-matter@^4.0.3": "integrity" "sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==" "resolved" "https://registry.npmjs.org/gray-matter/-/gray-matter-4.0.3.tgz" "version" "4.0.3" @@ -4643,26 +4523,18 @@ dependencies: "duplexer" "^0.1.2" -"gzip-size@5.1.1": - "integrity" "sha512-FNHi6mmoHvs1mxZAds4PpdCS6QG8B4C1krxJsMutgxl5t3+GlRTzzI3NEkifXx2pVsOvJdOGSmIgDhQ55FwdPA==" - "resolved" "https://registry.npmjs.org/gzip-size/-/gzip-size-5.1.1.tgz" - "version" "5.1.1" - dependencies: - "duplexer" "^0.1.1" - "pify" "^4.0.1" - "handle-thing@^2.0.0": "integrity" "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==" "resolved" "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz" "version" "2.0.1" -"has-bigints@^1.0.1": - "integrity" "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==" - "resolved" "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz" - "version" "1.0.1" +"has-bigints@^1.0.1", "has-bigints@^1.0.2": + "integrity" "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==" + "resolved" "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz" + "version" "1.0.2" "has-flag@^3.0.0": - "integrity" "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + "integrity" "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" "resolved" "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz" "version" "3.0.0" @@ -4671,41 +4543,24 @@ "resolved" "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" "version" "4.0.0" -"has-symbols@^1.0.1", "has-symbols@^1.0.2": - "integrity" "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==" - "resolved" "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz" - "version" "1.0.2" - -"has-value@^0.3.1": - "integrity" "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=" - "resolved" "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz" - "version" "0.3.1" - dependencies: - "get-value" "^2.0.3" - "has-values" "^0.1.4" - "isobject" "^2.0.0" - -"has-value@^1.0.0": - "integrity" "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=" - "resolved" "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz" +"has-property-descriptors@^1.0.0": + "integrity" "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==" + "resolved" "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz" "version" "1.0.0" dependencies: - "get-value" "^2.0.6" - "has-values" "^1.0.0" - "isobject" "^3.0.0" + "get-intrinsic" "^1.1.1" -"has-values@^0.1.4": - "integrity" "sha1-bWHeldkd/Km5oCCJrThL/49it3E=" - "resolved" "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz" - "version" "0.1.4" +"has-symbols@^1.0.2", "has-symbols@^1.0.3": + "integrity" "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" + "resolved" "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz" + "version" "1.0.3" -"has-values@^1.0.0": - "integrity" "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=" - "resolved" "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz" +"has-tostringtag@^1.0.0": + "integrity" "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==" + "resolved" "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz" "version" "1.0.0" dependencies: - "is-number" "^3.0.0" - "kind-of" "^4.0.0" + "has-symbols" "^1.0.2" "has-yarn@^2.1.0": "integrity" "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==" @@ -4732,17 +4587,6 @@ "unist-util-is" "^4.0.0" "web-namespaces" "^1.0.0" -"hast-util-from-parse5@^5.0.0": - "integrity" "sha512-gOc8UB99F6eWVWFtM9jUikjN7QkWxB3nY0df5Z0Zq1/Nkwl5V4hAAsl0tmwlgWl/1shlTF8DnNYLO8X6wRV9pA==" - "resolved" "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-5.0.3.tgz" - "version" "5.0.3" - dependencies: - "ccount" "^1.0.3" - "hastscript" "^5.0.0" - "property-information" "^5.0.0" - "web-namespaces" "^1.1.2" - "xtend" "^4.0.1" - "hast-util-from-parse5@^6.0.0": "integrity" "sha512-jeJUWiN5pSxW12Rh01smtVkZgZr33wBokLzKLwinYOUfSzm1Nl/c3GUGebDyOKjdsRgMvoVbV0VpAcpjF4NrJA==" "resolved" "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-6.0.1.tgz" @@ -4801,16 +4645,6 @@ "repeat-string" "^1.0.0" "unist-util-find-after" "^3.0.0" -"hastscript@^5.0.0": - "integrity" "sha512-WlztFuK+Lrvi3EggsqOkQ52rKbxkXL3RwB6t5lwoa8QLMemoWfBuL43eDrwOamJyR7uKQKdmKYaBH1NZBiIRrQ==" - "resolved" "https://registry.npmjs.org/hastscript/-/hastscript-5.1.2.tgz" - "version" "5.1.2" - dependencies: - "comma-separated-tokens" "^1.0.0" - "hast-util-parse-selector" "^2.0.0" - "property-information" "^5.0.0" - "space-separated-tokens" "^1.0.0" - "hastscript@^6.0.0": "integrity" "sha512-nDM6bvd7lIqDUiYEiu5Sl/+6ReP0BMk/2f4U/Rooccxkj0P5nm+acM5PrGJ/t5I8qPGiqZSE6hVAwZEdZIvP4w==" "resolved" "https://registry.npmjs.org/hastscript/-/hastscript-6.0.0.tgz" @@ -4827,11 +4661,6 @@ "resolved" "https://registry.npmjs.org/he/-/he-1.2.0.tgz" "version" "1.2.0" -"hex-color-regex@^1.1.0": - "integrity" "sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==" - "resolved" "https://registry.npmjs.org/hex-color-regex/-/hex-color-regex-1.1.0.tgz" - "version" "1.1.0" - "history@^4.9.0": "integrity" "sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew==" "resolved" "https://registry.npmjs.org/history/-/history-4.10.1.tgz" @@ -4852,7 +4681,7 @@ "react-is" "^16.7.0" "hpack.js@^2.1.6": - "integrity" "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=" + "integrity" "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==" "resolved" "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz" "version" "2.1.6" dependencies: @@ -4861,66 +4690,64 @@ "readable-stream" "^2.0.1" "wbuf" "^1.1.0" -"hsl-regex@^1.0.0": - "integrity" "sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4=" - "resolved" "https://registry.npmjs.org/hsl-regex/-/hsl-regex-1.0.0.tgz" - "version" "1.0.0" - -"hsla-regex@^1.0.0": - "integrity" "sha1-wc56MWjIxmFAM6S194d/OyJfnDg=" - "resolved" "https://registry.npmjs.org/hsla-regex/-/hsla-regex-1.0.0.tgz" - "version" "1.0.0" - -"html-entities@^1.3.1": - "integrity" "sha512-8nxjcBcd8wovbeKx7h3wTji4e6+rhaVuPNpMqwWgnHh+N9ToqsCs6XztWRBPQ+UtzsoMAdKZtUENoVzU/EMtZA==" - "resolved" "https://registry.npmjs.org/html-entities/-/html-entities-1.4.0.tgz" - "version" "1.4.0" +"html-entities@^2.3.2": + "integrity" "sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA==" + "resolved" "https://registry.npmjs.org/html-entities/-/html-entities-2.3.3.tgz" + "version" "2.3.3" -"html-minifier-terser@^5.0.1", "html-minifier-terser@^5.1.1": - "integrity" "sha512-ZPr5MNObqnV/T9akshPKbVgyOqLmy+Bxo7juKCfTfnjNniTAMdy4hz21YQqoofMBJD2kdREaqPPdThoR78Tgxg==" - "resolved" "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz" - "version" "5.1.1" +"html-minifier-terser@^6.0.2", "html-minifier-terser@^6.1.0": + "integrity" "sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==" + "resolved" "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz" + "version" "6.1.0" dependencies: - "camel-case" "^4.1.1" - "clean-css" "^4.2.3" - "commander" "^4.1.1" + "camel-case" "^4.1.2" + "clean-css" "^5.2.2" + "commander" "^8.3.0" "he" "^1.2.0" - "param-case" "^3.0.3" + "param-case" "^3.0.4" "relateurl" "^0.2.7" - "terser" "^4.6.3" + "terser" "^5.10.0" -"html-tags@^3.1.0": - "integrity" "sha512-1qYz89hW3lFDEazhjW0yVAV87lw8lVkrJocr72XmBkMKsoSVJCQx3W8BXsC7hO2qAt8BoVjYjtAcZ9perqGnNg==" - "resolved" "https://registry.npmjs.org/html-tags/-/html-tags-3.1.0.tgz" - "version" "3.1.0" +"html-tags@^3.2.0": + "integrity" "sha512-vy7ClnArOZwCnqZgvv+ddgHgJiAFXe3Ge9ML5/mBctVJoUoYPCdxVucOywjDARn6CVoh3dRSFdPHy2sX80L0Wg==" + "resolved" "https://registry.npmjs.org/html-tags/-/html-tags-3.2.0.tgz" + "version" "3.2.0" "html-void-elements@^1.0.0": "integrity" "sha512-uE/TxKuyNIcx44cIWnjr/rfIATDH7ZaOMmstu0CwhFG1Dunhlp4OC6/NMbhiwoq5BpW0ubi303qnEk/PZj614w==" "resolved" "https://registry.npmjs.org/html-void-elements/-/html-void-elements-1.0.5.tgz" "version" "1.0.5" -"html-webpack-plugin@^5.2.0": - "integrity" "sha512-rZsVvPXUYFyME0cuGkyOHfx9hmkFa4pWfxY/mdY38PsBEaVNsRoA+Id+8z6DBDgyv3zaw6XQszdF8HLwfQvcdQ==" - "resolved" "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.3.1.tgz" - "version" "5.3.1" +"html-webpack-plugin@^5.5.0": + "integrity" "sha512-sy88PC2cRTVxvETRgUHFrL4No3UxvcH8G1NepGhqaTT+GXN2kTamqasot0inS5hXeg1cMbFDt27zzo9p35lZVw==" + "resolved" "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.5.0.tgz" + "version" "5.5.0" dependencies: - "@types/html-minifier-terser" "^5.0.0" - "html-minifier-terser" "^5.0.1" - "lodash" "^4.17.20" - "pretty-error" "^2.1.1" + "@types/html-minifier-terser" "^6.0.0" + "html-minifier-terser" "^6.0.2" + "lodash" "^4.17.21" + "pretty-error" "^4.0.0" "tapable" "^2.0.0" -"htmlparser2@^3.10.1", "htmlparser2@^3.9.1": - "integrity" "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==" - "resolved" "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz" - "version" "3.10.1" +"htmlparser2@^6.1.0": + "integrity" "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==" + "resolved" "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz" + "version" "6.1.0" dependencies: - "domelementtype" "^1.3.1" - "domhandler" "^2.3.0" - "domutils" "^1.5.1" - "entities" "^1.1.1" - "inherits" "^2.0.1" - "readable-stream" "^3.1.1" + "domelementtype" "^2.0.1" + "domhandler" "^4.0.0" + "domutils" "^2.5.2" + "entities" "^2.0.0" + +"htmlparser2@^8.0.1": + "integrity" "sha512-4lVbmc1diZC7GUJQtRQ5yBAeUCL1exyMwmForWkRLnwyzWBFxN633SALPMGYaWZvKe9j1pRZJpauvmxENSp/EA==" + "resolved" "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.1.tgz" + "version" "8.0.1" + dependencies: + "domelementtype" "^2.3.0" + "domhandler" "^5.0.2" + "domutils" "^3.0.1" + "entities" "^4.3.0" "http-cache-semantics@^4.0.0": "integrity" "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==" @@ -4928,12 +4755,12 @@ "version" "4.1.0" "http-deceiver@^1.2.7": - "integrity" "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=" + "integrity" "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==" "resolved" "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz" "version" "1.2.7" "http-errors@~1.6.2": - "integrity" "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=" + "integrity" "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==" "resolved" "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz" "version" "1.6.3" dependencies: @@ -4942,33 +4769,34 @@ "setprototypeof" "1.1.0" "statuses" ">= 1.4.0 < 2" -"http-errors@~1.7.2", "http-errors@1.7.2": - "integrity" "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==" - "resolved" "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz" - "version" "1.7.2" +"http-errors@2.0.0": + "integrity" "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==" + "resolved" "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz" + "version" "2.0.0" dependencies: - "depd" "~1.1.2" - "inherits" "2.0.3" - "setprototypeof" "1.1.1" - "statuses" ">= 1.5.0 < 2" - "toidentifier" "1.0.0" + "depd" "2.0.0" + "inherits" "2.0.4" + "setprototypeof" "1.2.0" + "statuses" "2.0.1" + "toidentifier" "1.0.1" "http-parser-js@>=0.5.1": - "integrity" "sha512-t7hjvef/5HEK7RWTdUzVUhl8zkEu+LlaE0IYzdMuvbSDipxBRpOn4Uhw8ZyECEa808iVT8XCjzo6xmYt4CiLZg==" - "resolved" "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.3.tgz" - "version" "0.5.3" + "integrity" "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==" + "resolved" "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz" + "version" "0.5.8" -"http-proxy-middleware@0.19.1": - "integrity" "sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q==" - "resolved" "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz" - "version" "0.19.1" +"http-proxy-middleware@^2.0.3": + "integrity" "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==" + "resolved" "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz" + "version" "2.0.6" dependencies: - "http-proxy" "^1.17.0" - "is-glob" "^4.0.0" - "lodash" "^4.17.11" - "micromatch" "^3.1.10" + "@types/http-proxy" "^1.17.8" + "http-proxy" "^1.18.1" + "is-glob" "^4.0.1" + "is-plain-obj" "^3.0.0" + "micromatch" "^4.0.2" -"http-proxy@^1.17.0": +"http-proxy@^1.18.1": "integrity" "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==" "resolved" "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz" "version" "1.18.1" @@ -4999,17 +4827,24 @@ "resolved" "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz" "version" "4.0.6" -"ignore@^5.1.4": - "integrity" "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==" - "resolved" "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz" - "version" "5.1.8" +"ignore@^5.2.0": + "integrity" "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==" + "resolved" "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz" + "version" "5.2.4" -"immer@8.0.1": - "integrity" "sha512-aqXhGP7//Gui2+UrEtvxZxSquQVXTpZ7KDxfCcKAF3Vysvw0CViVaW9RZ1j1xlIYqaaaipBoqdqeibkc18PNvA==" - "resolved" "https://registry.npmjs.org/immer/-/immer-8.0.1.tgz" - "version" "8.0.1" +"image-size@^1.0.1": + "integrity" "sha512-xfOoWjceHntRb3qFCrh5ZFORYH8XCdYpASltMhZ/Q0KZiOwjdE/Yl2QCiWdwD+lygV5bMCvauzgu5PxBX/Yerg==" + "resolved" "https://registry.npmjs.org/image-size/-/image-size-1.0.2.tgz" + "version" "1.0.2" + dependencies: + "queue" "6.0.2" + +"immer@^9.0.7": + "integrity" "sha512-+hBruaLSQvkPfxRiTLK/mi4vLH+/VQS6z2KJahdoxlleFOI8ARqzOF17uy12eFDlqWmPoygwc5evgwcp+dlHhg==" + "resolved" "https://registry.npmjs.org/immer/-/immer-9.0.17.tgz" + "version" "9.0.17" -"import-fresh@^3.0.0", "import-fresh@^3.2.1", "import-fresh@^3.2.2", "import-fresh@^3.3.0": +"import-fresh@^3.0.0", "import-fresh@^3.1.0", "import-fresh@^3.2.1", "import-fresh@^3.3.0": "integrity" "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==" "resolved" "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz" "version" "3.3.0" @@ -5018,20 +4853,12 @@ "resolve-from" "^4.0.0" "import-lazy@^2.1.0": - "integrity" "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=" + "integrity" "sha512-m7ZEHgtw69qOGw+jwxXkHlrlIPdTGkyh66zXZ1ajZbxkDBNjSY/LGbmjc7h0s2ELsUDTAhFr55TrPSSqJGPG0A==" "resolved" "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz" "version" "2.1.0" -"import-local@^2.0.0": - "integrity" "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==" - "resolved" "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz" - "version" "2.0.0" - dependencies: - "pkg-dir" "^3.0.0" - "resolve-cwd" "^2.0.0" - "imurmurhash@^0.1.4": - "integrity" "sha1-khi5srkoojixPcT7a21XbyMUU+o=" + "integrity" "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==" "resolved" "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz" "version" "0.1.4" @@ -5040,31 +4867,26 @@ "resolved" "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz" "version" "4.0.0" -"indexes-of@^1.0.1": - "integrity" "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=" - "resolved" "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz" - "version" "1.0.1" - -"infima@0.2.0-alpha.23": - "integrity" "sha512-V0RTjB1otjpH3E2asbydx3gz7ovdSJsuV7r9JTdBggqRilnelTJUcXxLawBQQKsjQi5qPcRTjxnlaV8xyyKhhw==" - "resolved" "https://registry.npmjs.org/infima/-/infima-0.2.0-alpha.23.tgz" - "version" "0.2.0-alpha.23" +"infima@0.2.0-alpha.42": + "integrity" "sha512-ift8OXNbQQwtbIt6z16KnSWP7uJ/SysSMFI4F87MNRTicypfl4Pv3E2OGVv6N3nSZFJvA8imYulCBS64iyHYww==" + "resolved" "https://registry.npmjs.org/infima/-/infima-0.2.0-alpha.42.tgz" + "version" "0.2.0-alpha.42" "inflight@^1.0.4": - "integrity" "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=" + "integrity" "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==" "resolved" "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz" "version" "1.0.6" dependencies: "once" "^1.3.0" "wrappy" "1" -"inherits@^2.0.0", "inherits@^2.0.1", "inherits@^2.0.3", "inherits@^2.0.4", "inherits@~2.0.3", "inherits@2": +"inherits@^2.0.0", "inherits@^2.0.1", "inherits@^2.0.3", "inherits@~2.0.3", "inherits@2", "inherits@2.0.4": "integrity" "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" "resolved" "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" "version" "2.0.4" "inherits@2.0.3": - "integrity" "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + "integrity" "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==" "resolved" "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz" "version" "2.0.3" @@ -5083,14 +4905,6 @@ "resolved" "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.1.1.tgz" "version" "0.1.1" -"internal-ip@^4.3.0": - "integrity" "sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg==" - "resolved" "https://registry.npmjs.org/internal-ip/-/internal-ip-4.3.0.tgz" - "version" "4.3.0" - dependencies: - "default-gateway" "^4.2.0" - "ipaddr.js" "^1.9.0" - "internal-slot@^1.0.3": "integrity" "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==" "resolved" "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz" @@ -5105,40 +4919,23 @@ "resolved" "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz" "version" "1.4.0" -"ip-regex@^2.1.0": - "integrity" "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=" - "resolved" "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz" - "version" "2.1.0" +"invariant@^2.2.4": + "integrity" "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==" + "resolved" "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz" + "version" "2.2.4" + dependencies: + "loose-envify" "^1.0.0" -"ip@^1.1.0", "ip@^1.1.5": - "integrity" "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=" - "resolved" "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz" - "version" "1.1.5" +"ipaddr.js@^2.0.1": + "integrity" "sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng==" + "resolved" "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.0.1.tgz" + "version" "2.0.1" -"ipaddr.js@^1.9.0", "ipaddr.js@1.9.1": +"ipaddr.js@1.9.1": "integrity" "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" "resolved" "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz" "version" "1.9.1" -"is-absolute-url@^3.0.3": - "integrity" "sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==" - "resolved" "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.3.tgz" - "version" "3.0.3" - -"is-accessor-descriptor@^0.1.6": - "integrity" "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=" - "resolved" "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz" - "version" "0.1.6" - dependencies: - "kind-of" "^3.0.2" - -"is-accessor-descriptor@^1.0.0": - "integrity" "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==" - "resolved" "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz" - "version" "1.0.0" - dependencies: - "kind-of" "^6.0.0" - "is-alphabetical@^1.0.0", "is-alphabetical@1.0.4": "integrity" "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==" "resolved" "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz" @@ -5152,34 +4949,17 @@ "is-alphabetical" "^1.0.0" "is-decimal" "^1.0.0" -"is-arguments@^1.0.4": - "integrity" "sha512-1Ij4lOMPl/xB5kBDn7I+b2ttPMKa8szhEIrXDuXQD/oe3HJLTLhqhgGspwgyGd6MOywBUqVvYicF72lkgDnIHg==" - "resolved" "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.0.tgz" - "version" "1.1.0" - dependencies: - "call-bind" "^1.0.0" - "is-arrayish@^0.2.1": - "integrity" "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" + "integrity" "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" "resolved" "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz" "version" "0.2.1" -"is-arrayish@^0.3.1": - "integrity" "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" - "resolved" "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz" - "version" "0.3.2" - "is-bigint@^1.0.1": - "integrity" "sha512-0JV5+SOCQkIdzjBK9buARcV804Ddu7A0Qet6sHi3FimE9ne6m4BGQZfRn+NZiXbBk4F4XmHfDZIipLj9pX8dSA==" - "resolved" "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.2.tgz" - "version" "1.0.2" - -"is-binary-path@^1.0.0": - "integrity" "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=" - "resolved" "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz" - "version" "1.0.1" + "integrity" "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==" + "resolved" "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz" + "version" "1.0.4" dependencies: - "binary-extensions" "^1.0.0" + "has-bigints" "^1.0.1" "is-binary-path@~2.1.0": "integrity" "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==" @@ -5189,26 +4969,22 @@ "binary-extensions" "^2.0.0" "is-boolean-object@^1.1.0": - "integrity" "sha512-bXdQWkECBUIAcCkeH1unwJLIpZYaa5VvuygSyS/c2lf719mTKZDU5UdDRlpd01UjADgmW8RfqaP+mRaVPdr/Ng==" - "resolved" "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.1.tgz" - "version" "1.1.1" + "integrity" "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==" + "resolved" "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz" + "version" "1.1.2" dependencies: "call-bind" "^1.0.2" - -"is-buffer@^1.1.5": - "integrity" "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" - "resolved" "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz" - "version" "1.1.6" + "has-tostringtag" "^1.0.0" "is-buffer@^2.0.0": "integrity" "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==" "resolved" "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz" "version" "2.0.5" -"is-callable@^1.1.4", "is-callable@^1.2.3": - "integrity" "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==" - "resolved" "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz" - "version" "1.2.3" +"is-callable@^1.1.4", "is-callable@^1.2.7": + "integrity" "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==" + "resolved" "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz" + "version" "1.2.7" "is-ci@^2.0.0": "integrity" "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==" @@ -5217,110 +4993,49 @@ dependencies: "ci-info" "^2.0.0" -"is-color-stop@^1.1.0": - "integrity" "sha1-z/9HGu5N1cnhWFmPvhKWe1za00U=" - "resolved" "https://registry.npmjs.org/is-color-stop/-/is-color-stop-1.1.0.tgz" - "version" "1.1.0" - dependencies: - "css-color-names" "^0.0.4" - "hex-color-regex" "^1.1.0" - "hsl-regex" "^1.0.0" - "hsla-regex" "^1.0.0" - "rgb-regex" "^1.0.1" - "rgba-regex" "^1.0.0" - -"is-core-module@^2.2.0": - "integrity" "sha512-6A2fkfq1rfeQZjxrZJGerpLCTHRNEBiSgnu0+obeJpEPZRUooHgsizvzv0ZjJwOz3iWIHdJtVWJ/tmPr3D21/A==" - "resolved" "https://registry.npmjs.org/is-core-module/-/is-core-module-2.4.0.tgz" - "version" "2.4.0" +"is-core-module@^2.9.0": + "integrity" "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==" + "resolved" "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz" + "version" "2.11.0" dependencies: "has" "^1.0.3" -"is-data-descriptor@^0.1.4": - "integrity" "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=" - "resolved" "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz" - "version" "0.1.4" - dependencies: - "kind-of" "^3.0.2" - -"is-data-descriptor@^1.0.0": - "integrity" "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==" - "resolved" "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz" - "version" "1.0.0" - dependencies: - "kind-of" "^6.0.0" - "is-date-object@^1.0.1": - "integrity" "sha512-/b4ZVsG7Z5XVtIxs/h9W8nvfLgSAyKYdtGWQLbqy6jA1icmgjf8WCoTKgeS4wy5tYaPePouzFMANbnj94c2Z+A==" - "resolved" "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.4.tgz" - "version" "1.0.4" + "integrity" "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==" + "resolved" "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz" + "version" "1.0.5" + dependencies: + "has-tostringtag" "^1.0.0" "is-decimal@^1.0.0": "integrity" "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==" "resolved" "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz" "version" "1.0.4" -"is-descriptor@^0.1.0": - "integrity" "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==" - "resolved" "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz" - "version" "0.1.6" - dependencies: - "is-accessor-descriptor" "^0.1.6" - "is-data-descriptor" "^0.1.4" - "kind-of" "^5.0.0" - -"is-descriptor@^1.0.0", "is-descriptor@^1.0.2": - "integrity" "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==" - "resolved" "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz" - "version" "1.0.2" - dependencies: - "is-accessor-descriptor" "^1.0.0" - "is-data-descriptor" "^1.0.0" - "kind-of" "^6.0.2" - -"is-docker@^2.0.0": +"is-docker@^2.0.0", "is-docker@^2.1.1": "integrity" "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==" "resolved" "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz" "version" "2.2.1" -"is-extendable@^0.1.0", "is-extendable@^0.1.1": - "integrity" "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" +"is-extendable@^0.1.0": + "integrity" "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==" "resolved" "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz" "version" "0.1.1" -"is-extendable@^1.0.1": - "integrity" "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==" - "resolved" "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz" - "version" "1.0.1" - dependencies: - "is-plain-object" "^2.0.4" - -"is-extglob@^2.1.0", "is-extglob@^2.1.1": - "integrity" "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" +"is-extglob@^2.1.1": + "integrity" "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==" "resolved" "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" "version" "2.1.1" -"is-fullwidth-code-point@^2.0.0": - "integrity" "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" - "resolved" "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz" - "version" "2.0.0" - "is-fullwidth-code-point@^3.0.0": "integrity" "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" "resolved" "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz" "version" "3.0.0" -"is-glob@^3.1.0": - "integrity" "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=" - "resolved" "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz" - "version" "3.1.0" - dependencies: - "is-extglob" "^2.1.0" - -"is-glob@^4.0.0", "is-glob@^4.0.1", "is-glob@~4.0.1": - "integrity" "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==" - "resolved" "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz" - "version" "4.0.1" +"is-glob@^4.0.0", "is-glob@^4.0.1", "is-glob@^4.0.3", "is-glob@~4.0.1": + "integrity" "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==" + "resolved" "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz" + "version" "4.0.3" dependencies: "is-extglob" "^2.1.1" @@ -5337,10 +5052,10 @@ "global-dirs" "^3.0.0" "is-path-inside" "^3.0.2" -"is-negative-zero@^2.0.1": - "integrity" "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==" - "resolved" "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz" - "version" "2.0.1" +"is-negative-zero@^2.0.2": + "integrity" "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==" + "resolved" "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz" + "version" "2.0.2" "is-npm@^5.0.0": "integrity" "sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA==" @@ -5348,16 +5063,11 @@ "version" "5.0.0" "is-number-object@^1.0.4": - "integrity" "sha512-RU0lI/n95pMoUKu9v1BZP5MBcZuNSVJkMkAG2dJqC4z2GlkGUNeH68SuHuBKBD/XFe+LHZ+f9BKkLET60Niedw==" - "resolved" "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.5.tgz" - "version" "1.0.5" - -"is-number@^3.0.0": - "integrity" "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=" - "resolved" "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz" - "version" "3.0.0" + "integrity" "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==" + "resolved" "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz" + "version" "1.0.7" dependencies: - "kind-of" "^3.0.2" + "has-tostringtag" "^1.0.0" "is-number@^7.0.0": "integrity" "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" @@ -5365,7 +5075,7 @@ "version" "7.0.0" "is-obj@^1.0.1": - "integrity" "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=" + "integrity" "sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==" "resolved" "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz" "version" "1.0.1" @@ -5374,25 +5084,11 @@ "resolved" "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz" "version" "2.0.0" -"is-path-cwd@^2.0.0", "is-path-cwd@^2.2.0": +"is-path-cwd@^2.2.0": "integrity" "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==" "resolved" "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz" "version" "2.2.0" -"is-path-in-cwd@^2.0.0": - "integrity" "sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ==" - "resolved" "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz" - "version" "2.1.0" - dependencies: - "is-path-inside" "^2.1.0" - -"is-path-inside@^2.1.0": - "integrity" "sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==" - "resolved" "https://registry.npmjs.org/is-path-inside/-/is-path-inside-2.1.0.tgz" - "version" "2.1.0" - dependencies: - "path-is-inside" "^1.0.2" - "is-path-inside@^3.0.2": "integrity" "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==" "resolved" "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz" @@ -5403,50 +5099,54 @@ "resolved" "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz" "version" "2.1.0" -"is-plain-object@^2.0.3", "is-plain-object@^2.0.4": +"is-plain-obj@^3.0.0": + "integrity" "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==" + "resolved" "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz" + "version" "3.0.0" + +"is-plain-object@^2.0.4": "integrity" "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==" "resolved" "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz" "version" "2.0.4" dependencies: "isobject" "^3.0.1" -"is-regex@^1.0.4", "is-regex@^1.1.2": - "integrity" "sha512-qSVXFz28HM7y+IWX6vLCsexdlvzT1PJNFSBuaQLQ5o0IEw8UDYW6/2+eCMVyIsbM8CNLX2a/QWmSpyxYEHY7CQ==" - "resolved" "https://registry.npmjs.org/is-regex/-/is-regex-1.1.3.tgz" - "version" "1.1.3" +"is-regex@^1.1.4": + "integrity" "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==" + "resolved" "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz" + "version" "1.1.4" dependencies: "call-bind" "^1.0.2" - "has-symbols" "^1.0.2" + "has-tostringtag" "^1.0.0" "is-regexp@^1.0.0": - "integrity" "sha1-/S2INUXEa6xaYz57mgnof6LLUGk=" + "integrity" "sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==" "resolved" "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz" "version" "1.0.0" -"is-resolvable@^1.1.0": - "integrity" "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==" - "resolved" "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz" - "version" "1.1.0" - -"is-root@^2.1.0", "is-root@2.1.0": +"is-root@^2.1.0": "integrity" "sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg==" "resolved" "https://registry.npmjs.org/is-root/-/is-root-2.1.0.tgz" "version" "2.1.0" -"is-stream@^1.1.0": - "integrity" "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" - "resolved" "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz" - "version" "1.1.0" +"is-shared-array-buffer@^1.0.2": + "integrity" "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==" + "resolved" "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz" + "version" "1.0.2" + dependencies: + "call-bind" "^1.0.2" "is-stream@^2.0.0": - "integrity" "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==" - "resolved" "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz" - "version" "2.0.0" + "integrity" "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==" + "resolved" "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz" + "version" "2.0.1" -"is-string@^1.0.5": - "integrity" "sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w==" - "resolved" "https://registry.npmjs.org/is-string/-/is-string-1.0.6.tgz" - "version" "1.0.6" +"is-string@^1.0.5", "is-string@^1.0.7": + "integrity" "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==" + "resolved" "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz" + "version" "1.0.7" + dependencies: + "has-tostringtag" "^1.0.0" "is-symbol@^1.0.2", "is-symbol@^1.0.3": "integrity" "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==" @@ -5456,31 +5156,28 @@ "has-symbols" "^1.0.2" "is-typedarray@^1.0.0": - "integrity" "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" + "integrity" "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" "resolved" "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz" "version" "1.0.0" +"is-weakref@^1.0.2": + "integrity" "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==" + "resolved" "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz" + "version" "1.0.2" + dependencies: + "call-bind" "^1.0.2" + "is-whitespace-character@^1.0.0": "integrity" "sha512-SDweEzfIZM0SJV0EUga669UTKlmL0Pq8Lno0QDQsPnvECB3IM2aP0gdx5TrU0A01MAPfViaZiI2V1QMZLaKK5w==" "resolved" "https://registry.npmjs.org/is-whitespace-character/-/is-whitespace-character-1.0.4.tgz" "version" "1.0.4" -"is-windows@^1.0.2": - "integrity" "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==" - "resolved" "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz" - "version" "1.0.2" - "is-word-character@^1.0.0": "integrity" "sha512-5SMO8RVennx3nZrqtKwCGyyetPE9VDba5ugvKLaD4KopPG5kR4mQ7tNt/r7feL5yt5h3lpuBbIUmCOG2eSzXHA==" "resolved" "https://registry.npmjs.org/is-word-character/-/is-word-character-1.0.4.tgz" "version" "1.0.4" -"is-wsl@^1.1.0": - "integrity" "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=" - "resolved" "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz" - "version" "1.1.0" - -"is-wsl@^2.1.1": +"is-wsl@^2.2.0": "integrity" "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==" "resolved" "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz" "version" "2.2.0" @@ -5492,50 +5189,65 @@ "resolved" "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz" "version" "0.3.0" -"isarray@~1.0.0", "isarray@1.0.0": - "integrity" "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" +"isarray@~1.0.0": + "integrity" "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" "resolved" "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz" "version" "1.0.0" "isarray@0.0.1": - "integrity" "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" + "integrity" "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==" "resolved" "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz" "version" "0.0.1" "isexe@^2.0.0": - "integrity" "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" + "integrity" "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" "resolved" "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" "version" "2.0.0" -"isobject@^2.0.0": - "integrity" "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=" - "resolved" "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz" - "version" "2.1.0" - dependencies: - "isarray" "1.0.0" - -"isobject@^3.0.0", "isobject@^3.0.1": - "integrity" "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" +"isobject@^3.0.1": + "integrity" "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==" "resolved" "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz" "version" "3.0.1" -"jest-worker@^26.3.0", "jest-worker@^26.6.2": - "integrity" "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==" - "resolved" "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz" - "version" "26.6.2" +"jest-util@^29.3.1": + "integrity" "sha512-7YOVZaiX7RJLv76ZfHt4nbNEzzTRiMW/IiOG7ZOKmTXmoGBxUDefgMAxQubu6WPVqP5zSzAdZG0FfLcC7HOIFQ==" + "resolved" "https://registry.npmjs.org/jest-util/-/jest-util-29.3.1.tgz" + "version" "29.3.1" + dependencies: + "@jest/types" "^29.3.1" + "@types/node" "*" + "chalk" "^4.0.0" + "ci-info" "^3.2.0" + "graceful-fs" "^4.2.9" + "picomatch" "^2.2.3" + +"jest-worker@^27.4.5": + "integrity" "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==" + "resolved" "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz" + "version" "27.5.1" + dependencies: + "@types/node" "*" + "merge-stream" "^2.0.0" + "supports-color" "^8.0.0" + +"jest-worker@^29.1.2": + "integrity" "sha512-lY4AnnmsEWeiXirAIA0c9SDPbuCBq8IYuDVL8PMm0MZ2PEs2yPvRA/J64QBXuZp7CYKrDM/rmNrc9/i3KJQncw==" + "resolved" "https://registry.npmjs.org/jest-worker/-/jest-worker-29.3.1.tgz" + "version" "29.3.1" dependencies: "@types/node" "*" + "jest-util" "^29.3.1" "merge-stream" "^2.0.0" - "supports-color" "^7.0.0" + "supports-color" "^8.0.0" -"joi@^17.3.0", "joi@^17.4.0": - "integrity" "sha512-F4WiW2xaV6wc1jxete70Rw4V/VuMd6IN+a5ilZsxG4uYtUXWu2kq9W5P2dz30e7Gmw8RCbY/u/uk+dMPma9tAg==" - "resolved" "https://registry.npmjs.org/joi/-/joi-17.4.0.tgz" - "version" "17.4.0" +"joi@^17.6.0": + "integrity" "sha512-YlQsIaS9MHYekzf1Qe11LjTkNzx9qhYluK3172z38RxYoAUf82XMX1p1DG1H4Wtk2ED/vPdSn9OggqtDu+aTow==" + "resolved" "https://registry.npmjs.org/joi/-/joi-17.6.3.tgz" + "version" "17.6.3" dependencies: "@hapi/hoek" "^9.0.0" "@hapi/topo" "^5.0.0" - "@sideway/address" "^4.1.0" + "@sideway/address" "^4.1.3" "@sideway/formula" "^3.0.0" "@sideway/pinpoint" "^2.0.0" @@ -5552,7 +5264,7 @@ "argparse" "^1.0.7" "esprima" "^4.0.0" -"js-yaml@^4.0.0": +"js-yaml@^4.1.0": "integrity" "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==" "resolved" "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz" "version" "4.1.0" @@ -5565,21 +5277,16 @@ "version" "2.5.2" "jsesc@~0.5.0": - "integrity" "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=" + "integrity" "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==" "resolved" "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz" "version" "0.5.0" "json-buffer@3.0.0": - "integrity" "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=" + "integrity" "sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ==" "resolved" "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz" "version" "3.0.0" -"json-parse-better-errors@^1.0.2": - "integrity" "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==" - "resolved" "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz" - "version" "1.0.2" - -"json-parse-even-better-errors@^2.3.0": +"json-parse-even-better-errors@^2.3.0", "json-parse-even-better-errors@^2.3.1": "integrity" "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" "resolved" "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz" "version" "2.3.1" @@ -5595,28 +5302,14 @@ "version" "1.0.0" "json-stable-stringify-without-jsonify@^1.0.1": - "integrity" "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=" + "integrity" "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==" "resolved" "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz" "version" "1.0.1" -"json3@^3.3.3": - "integrity" "sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA==" - "resolved" "https://registry.npmjs.org/json3/-/json3-3.3.3.tgz" - "version" "3.3.3" - -"json5@^1.0.1": - "integrity" "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==" - "resolved" "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz" - "version" "1.0.1" - dependencies: - "minimist" "^1.2.0" - -"json5@^2.1.2": - "integrity" "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==" - "resolved" "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz" - "version" "2.2.0" - dependencies: - "minimist" "^1.2.5" +"json5@^2.1.2", "json5@^2.2.1": + "integrity" "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==" + "resolved" "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz" + "version" "2.2.1" "jsonfile@^6.0.1": "integrity" "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==" @@ -5628,12 +5321,12 @@ "graceful-fs" "^4.1.6" "jsx-ast-utils@^2.4.1 || ^3.0.0": - "integrity" "sha512-EIsmt3O3ljsU6sot/J4E1zDRxfBNrhjyf/OKjlydwgEimQuznlM4Wv7U+ueONJMyEn1WRE0K8dhi3dVAXYT24Q==" - "resolved" "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.2.0.tgz" - "version" "3.2.0" + "integrity" "sha512-fYQHZTZ8jSfmWZ0iyzfwiU4WDX4HpHbMCZ3gPlWYiCl3BoeOTsqKBqnTVfH2rYT7eP5c3sVbeSPHnnJOaTrWiw==" + "resolved" "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.3.tgz" + "version" "3.3.3" dependencies: - "array-includes" "^3.1.2" - "object.assign" "^4.1.2" + "array-includes" "^3.1.5" + "object.assign" "^4.1.3" "katex@^0.12.0": "integrity" "sha512-y+8btoc/CK70XqcHqjxiGWBOeIL8upbS0peTPXTvgrh21n1RiWWcIpSWM+4uXq+IAgNh9YYQWdc7LVDPDAEEAg==" @@ -5649,37 +5342,6 @@ dependencies: "json-buffer" "3.0.0" -"killable@^1.0.1": - "integrity" "sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg==" - "resolved" "https://registry.npmjs.org/killable/-/killable-1.0.1.tgz" - "version" "1.0.1" - -"kind-of@^3.0.2", "kind-of@^3.0.3": - "integrity" "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=" - "resolved" "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz" - "version" "3.2.2" - dependencies: - "is-buffer" "^1.1.5" - -"kind-of@^3.2.0": - "integrity" "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=" - "resolved" "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz" - "version" "3.2.2" - dependencies: - "is-buffer" "^1.1.5" - -"kind-of@^4.0.0": - "integrity" "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=" - "resolved" "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz" - "version" "4.0.0" - dependencies: - "is-buffer" "^1.1.5" - -"kind-of@^5.0.0": - "integrity" "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" - "resolved" "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz" - "version" "5.1.0" - "kind-of@^6.0.0", "kind-of@^6.0.2": "integrity" "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" "resolved" "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz" @@ -5690,10 +5352,10 @@ "resolved" "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz" "version" "3.0.3" -"klona@^2.0.4": - "integrity" "sha512-ZRbnvdg/NxqzC7L9Uyqzf4psi1OM4Cuc+sJAkQPjO6XkQIJTNbfK2Rsmbw8fx1p2mkZdp2FZYo2+LwXYY/uwIA==" - "resolved" "https://registry.npmjs.org/klona/-/klona-2.0.4.tgz" - "version" "2.0.4" +"klona@^2.0.4", "klona@^2.0.5": + "integrity" "sha512-pJiBpiXMbt7dkzXe8Ghj/u4FfXOOa98fPW+bihOJ4SjnoijweJrNThJfd3ifXpXhREjpoF2mZVH1GfS9LV3kHQ==" + "resolved" "https://registry.npmjs.org/klona/-/klona-2.0.5.tgz" + "version" "2.0.5" "latest-version@^5.1.0": "integrity" "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==" @@ -5715,43 +5377,35 @@ "prelude-ls" "^1.2.1" "type-check" "~0.4.0" +"lilconfig@^2.0.3": + "integrity" "sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg==" + "resolved" "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.6.tgz" + "version" "2.0.6" + "lines-and-columns@^1.1.6": - "integrity" "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=" - "resolved" "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz" - "version" "1.1.6" + "integrity" "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" + "resolved" "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz" + "version" "1.2.4" "loader-runner@^4.2.0": - "integrity" "sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw==" - "resolved" "https://registry.npmjs.org/loader-runner/-/loader-runner-4.2.0.tgz" - "version" "4.2.0" - -"loader-utils@^1.2.3": - "integrity" "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==" - "resolved" "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz" - "version" "1.4.0" - dependencies: - "big.js" "^5.2.2" - "emojis-list" "^3.0.0" - "json5" "^1.0.1" - -"loader-utils@^1.4.0": - "integrity" "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==" - "resolved" "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz" - "version" "1.4.0" - dependencies: - "big.js" "^5.2.2" - "emojis-list" "^3.0.0" - "json5" "^1.0.1" + "integrity" "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==" + "resolved" "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz" + "version" "4.3.0" -"loader-utils@^2.0.0", "loader-utils@2.0.0": - "integrity" "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==" - "resolved" "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz" - "version" "2.0.0" +"loader-utils@^2.0.0": + "integrity" "sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A==" + "resolved" "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.2.tgz" + "version" "2.0.2" dependencies: "big.js" "^5.2.2" "emojis-list" "^3.0.0" "json5" "^2.1.2" +"loader-utils@^3.2.0": + "integrity" "sha512-ZvFw1KWS3GVyYBYb7qkmRM/WwL2TQQBxgCK62rlvm4WpVQ23Nb4tYjApUlfjrEGvOs7KHEsmyUn75OHZrJMWPw==" + "resolved" "https://registry.npmjs.org/loader-utils/-/loader-utils-3.2.1.tgz" + "version" "3.2.1" + "locate-path@^3.0.0": "integrity" "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==" "resolved" "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz" @@ -5774,116 +5428,46 @@ dependencies: "p-locate" "^5.0.0" -"lodash.assignin@^4.0.9": - "integrity" "sha1-uo31+4QesKPoBEIysOJjqNxqKKI=" - "resolved" "https://registry.npmjs.org/lodash.assignin/-/lodash.assignin-4.2.0.tgz" - "version" "4.2.0" - -"lodash.bind@^4.1.4": - "integrity" "sha1-euMBfpOWIqwxt9fX3LGzTbFpDTU=" - "resolved" "https://registry.npmjs.org/lodash.bind/-/lodash.bind-4.2.1.tgz" - "version" "4.2.1" - -"lodash.clonedeep@^4.5.0": - "integrity" "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=" - "resolved" "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz" - "version" "4.5.0" - "lodash.curry@^4.0.1": - "integrity" "sha1-JI42By7ekGUB11lmIAqG2riyMXA=" + "integrity" "sha512-/u14pXGviLaweY5JI0IUzgzF2J6Ne8INyzAZjImcryjgkZ+ebruBxy2/JaOOkTqScddcYtakjhSaeemV8lR0tA==" "resolved" "https://registry.npmjs.org/lodash.curry/-/lodash.curry-4.1.1.tgz" "version" "4.1.1" "lodash.debounce@^4.0.8": - "integrity" "sha1-gteb/zCmfEAF/9XiUVMArZyk168=" + "integrity" "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==" "resolved" "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz" "version" "4.0.8" -"lodash.defaults@^4.0.1": - "integrity" "sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=" - "resolved" "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz" - "version" "4.2.0" - -"lodash.filter@^4.4.0": - "integrity" "sha1-ZosdSYFgOuHMWm+nYBQ+SAtMSs4=" - "resolved" "https://registry.npmjs.org/lodash.filter/-/lodash.filter-4.6.0.tgz" - "version" "4.6.0" - -"lodash.flatten@^4.2.0": - "integrity" "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=" - "resolved" "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz" - "version" "4.4.0" - "lodash.flow@^3.3.0": - "integrity" "sha1-h79AKSuM+D5OjOGjrkIJ4gBxZ1o=" + "integrity" "sha512-ff3BX/tSioo+XojX4MOsOMhJw0nZoUEF011LX8g8d3gvjVbxd89cCio4BCXronjxcTUIJUoqKEUA+n4CqvvRPw==" "resolved" "https://registry.npmjs.org/lodash.flow/-/lodash.flow-3.5.0.tgz" "version" "3.5.0" -"lodash.foreach@^4.3.0": - "integrity" "sha1-Gmo16s5AEoDH8G3d7DUWWrJ+PlM=" - "resolved" "https://registry.npmjs.org/lodash.foreach/-/lodash.foreach-4.5.0.tgz" - "version" "4.5.0" - -"lodash.map@^4.4.0": - "integrity" "sha1-dx7Hg540c9nEzeKLGTlMNWL09tM=" - "resolved" "https://registry.npmjs.org/lodash.map/-/lodash.map-4.6.0.tgz" - "version" "4.6.0" - "lodash.memoize@^4.1.2": - "integrity" "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=" + "integrity" "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==" "resolved" "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz" "version" "4.1.2" -"lodash.merge@^4.4.0": +"lodash.merge@^4.6.2": "integrity" "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" "resolved" "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz" "version" "4.6.2" -"lodash.pick@^4.2.1": - "integrity" "sha1-UvBWEP/53tQiYRRB7R/BI6AwAbM=" - "resolved" "https://registry.npmjs.org/lodash.pick/-/lodash.pick-4.4.0.tgz" - "version" "4.4.0" - -"lodash.reduce@^4.4.0": - "integrity" "sha1-8atrg5KZrUj3hKu/R2WW8DuRTTs=" - "resolved" "https://registry.npmjs.org/lodash.reduce/-/lodash.reduce-4.6.0.tgz" - "version" "4.6.0" - -"lodash.reject@^4.4.0": - "integrity" "sha1-gNZJLcFHCGS79YNTO2UfQqn1JBU=" - "resolved" "https://registry.npmjs.org/lodash.reject/-/lodash.reject-4.6.0.tgz" - "version" "4.6.0" - -"lodash.some@^4.4.0": - "integrity" "sha1-G7nzFO9ri63tE7VJFpsqlF62jk0=" - "resolved" "https://registry.npmjs.org/lodash.some/-/lodash.some-4.6.0.tgz" - "version" "4.6.0" - -"lodash.toarray@^4.4.0": - "integrity" "sha1-JMS/zWsvuji/0FlNsRedjptlZWE=" - "resolved" "https://registry.npmjs.org/lodash.toarray/-/lodash.toarray-4.4.0.tgz" - "version" "4.4.0" - "lodash.truncate@^4.4.2": - "integrity" "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=" + "integrity" "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==" "resolved" "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz" "version" "4.4.2" "lodash.uniq@^4.5.0", "lodash.uniq@4.5.0": - "integrity" "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=" + "integrity" "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==" "resolved" "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz" "version" "4.5.0" -"lodash@^4.17.11", "lodash@^4.17.14", "lodash@^4.17.19", "lodash@^4.17.20", "lodash@^4.17.21": +"lodash@^4.17.19", "lodash@^4.17.20", "lodash@^4.17.21": "integrity" "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" "resolved" "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz" "version" "4.17.21" -"loglevel@^1.6.8": - "integrity" "sha512-Hesni4s5UkWkwCGJMQGAh71PaLUmKFM60dHvq0zi/vDhhrzuk+4GgNbTXJ12YYQJn6ZKBDNIjYcuQGKudvqrIw==" - "resolved" "https://registry.npmjs.org/loglevel/-/loglevel-1.7.1.tgz" - "version" "1.7.1" - "loose-envify@^1.0.0", "loose-envify@^1.1.0", "loose-envify@^1.2.0", "loose-envify@^1.3.1", "loose-envify@^1.4.0": "integrity" "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==" "resolved" "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz" @@ -5922,18 +5506,6 @@ dependencies: "semver" "^6.0.0" -"map-cache@^0.2.2": - "integrity" "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=" - "resolved" "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz" - "version" "0.2.2" - -"map-visit@^1.0.0": - "integrity" "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=" - "resolved" "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz" - "version" "1.0.0" - dependencies: - "object-visit" "^1.0.0" - "markdown-escapes@^1.0.0": "integrity" "sha512-8z4efJYk43E0upd0NbVXwgSTQs6cT3T06etieCMEg7dRbzCbxUCK/GHlX8mhHRDcp+OLlHkPKsvqQTCvsRl2cg==" "resolved" "https://registry.npmjs.org/markdown-escapes/-/markdown-escapes-1.0.4.tgz" @@ -5977,31 +5549,25 @@ "resolved" "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz" "version" "2.0.14" -"mdn-data@2.0.4": - "integrity" "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==" - "resolved" "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz" - "version" "2.0.4" - "mdurl@^1.0.0": - "integrity" "sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4=" + "integrity" "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==" "resolved" "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz" "version" "1.0.1" "media-typer@0.3.0": - "integrity" "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" + "integrity" "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==" "resolved" "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz" "version" "0.3.0" -"memory-fs@^0.4.1": - "integrity" "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=" - "resolved" "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz" - "version" "0.4.1" +"memfs@^3.1.2", "memfs@^3.4.3": + "integrity" "sha512-BcjuQn6vfqP+k100e0E9m61Hyqa//Brp+I3f0OBmN0ATHlFA8vx3Lt8z57R3u2bPqe3WGDBC+nF72fTH7isyEw==" + "resolved" "https://registry.npmjs.org/memfs/-/memfs-3.4.12.tgz" + "version" "3.4.12" dependencies: - "errno" "^0.1.3" - "readable-stream" "^2.0.1" + "fs-monkey" "^1.0.3" "merge-descriptors@1.0.1": - "integrity" "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" + "integrity" "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" "resolved" "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz" "version" "1.0.1" @@ -6010,64 +5576,40 @@ "resolved" "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz" "version" "2.0.0" -"merge2@^1.3.0": +"merge2@^1.3.0", "merge2@^1.4.1": "integrity" "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==" "resolved" "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz" "version" "1.4.1" "methods@~1.1.2": - "integrity" "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" + "integrity" "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==" "resolved" "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz" "version" "1.1.2" -"microevent.ts@~0.1.1": - "integrity" "sha512-jo1OfR4TaEwd5HOrt5+tAZ9mqT4jmpNAusXtyfNzqVm9uiSYFZlKM1wYL4oU7azZW/PxQW53wM0S6OR1JHNa2g==" - "resolved" "https://registry.npmjs.org/microevent.ts/-/microevent.ts-0.1.1.tgz" - "version" "0.1.1" - -"micromatch@^3.1.10", "micromatch@^3.1.4": - "integrity" "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==" - "resolved" "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz" - "version" "3.1.10" - dependencies: - "arr-diff" "^4.0.0" - "array-unique" "^0.3.2" - "braces" "^2.3.1" - "define-property" "^2.0.2" - "extend-shallow" "^3.0.2" - "extglob" "^2.0.4" - "fragment-cache" "^0.2.1" - "kind-of" "^6.0.2" - "nanomatch" "^1.2.9" - "object.pick" "^1.3.0" - "regex-not" "^1.0.0" - "snapdragon" "^0.8.1" - "to-regex" "^3.0.2" - -"micromatch@^4.0.2": - "integrity" "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==" - "resolved" "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz" - "version" "4.0.4" - dependencies: - "braces" "^3.0.1" - "picomatch" "^2.2.3" +"micromatch@^4.0.2", "micromatch@^4.0.4", "micromatch@^4.0.5": + "integrity" "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==" + "resolved" "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz" + "version" "4.0.5" + dependencies: + "braces" "^3.0.2" + "picomatch" "^2.3.1" -"mime-db@>= 1.43.0 < 2", "mime-db@1.47.0": - "integrity" "sha512-QBmA/G2y+IfeS4oktet3qRZ+P5kPhCKRXxXnQEudYqUaEioAU1/Lq2us3D/t1Jfo4hE9REQPrbB7K5sOczJVIw==" - "resolved" "https://registry.npmjs.org/mime-db/-/mime-db-1.47.0.tgz" - "version" "1.47.0" +"mime-db@>= 1.43.0 < 2", "mime-db@1.52.0": + "integrity" "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" + "resolved" "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz" + "version" "1.52.0" "mime-db@~1.33.0": "integrity" "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==" "resolved" "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz" "version" "1.33.0" -"mime-types@^2.1.27", "mime-types@~2.1.17", "mime-types@~2.1.24": - "integrity" "sha512-crmjA4bLtR8m9qLpHvgxSChT+XoSlZi8J4n/aIdn3z92e/U47Z0V/yl+Wh9W046GgFVAmoNR/fmdbZYcSSIUeg==" - "resolved" "https://registry.npmjs.org/mime-types/-/mime-types-2.1.30.tgz" - "version" "2.1.30" +"mime-types@^2.1.27", "mime-types@^2.1.31", "mime-types@~2.1.17", "mime-types@~2.1.24", "mime-types@~2.1.34": + "integrity" "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==" + "resolved" "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz" + "version" "2.1.35" dependencies: - "mime-db" "1.47.0" + "mime-db" "1.52.0" "mime-types@2.1.18": "integrity" "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==" @@ -6076,16 +5618,6 @@ dependencies: "mime-db" "~1.33.0" -"mime@^2.3.1": - "integrity" "sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==" - "resolved" "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz" - "version" "2.5.2" - -"mime@^2.4.4": - "integrity" "sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==" - "resolved" "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz" - "version" "2.5.2" - "mime@1.6.0": "integrity" "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" "resolved" "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz" @@ -6101,153 +5633,116 @@ "resolved" "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz" "version" "1.0.1" -"mini-create-react-context@^0.4.0": - "integrity" "sha512-YWCYEmd5CQeHGSAKrYvXgmzzkrvssZcuuQDDeqkT+PziKGMgE+0MCCtcKbROzocGBG1meBLl2FotlRwf4gAzbQ==" - "resolved" "https://registry.npmjs.org/mini-create-react-context/-/mini-create-react-context-0.4.1.tgz" - "version" "0.4.1" - dependencies: - "@babel/runtime" "^7.12.1" - "tiny-warning" "^1.0.3" - -"mini-css-extract-plugin@^1.4.0": - "integrity" "sha512-nPFKI7NSy6uONUo9yn2hIfb9vyYvkFu95qki0e21DQ9uaqNKDP15DGpK0KnV6wDroWxPHtExrdEwx/yDQ8nVRw==" - "resolved" "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-1.6.0.tgz" - "version" "1.6.0" +"mini-css-extract-plugin@^2.6.1": + "integrity" "sha512-EdlUizq13o0Pd+uCp+WO/JpkLvHRVGt97RqfeGhXqAcorYo1ypJSpkV+WDT0vY/kmh/p7wRdJNJtuyK540PXDw==" + "resolved" "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.7.2.tgz" + "version" "2.7.2" dependencies: - "loader-utils" "^2.0.0" - "schema-utils" "^3.0.0" - "webpack-sources" "^1.1.0" + "schema-utils" "^4.0.0" "minimalistic-assert@^1.0.0": "integrity" "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" "resolved" "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz" "version" "1.0.1" -"minimatch@^3.0.4", "minimatch@3.0.4": +"minimatch@^3.0.4", "minimatch@^3.0.5", "minimatch@^3.1.1", "minimatch@^3.1.2": + "integrity" "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==" + "resolved" "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" + "version" "3.1.2" + dependencies: + "brace-expansion" "^1.1.7" + +"minimatch@3.0.4": "integrity" "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==" "resolved" "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz" "version" "3.0.4" dependencies: "brace-expansion" "^1.1.7" -"minimist@^1.2.0", "minimist@^1.2.5": - "integrity" "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" - "resolved" "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz" - "version" "1.2.5" +"minimist@^1.2.0", "minimist@^1.2.5", "minimist@^1.2.6": + "integrity" "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==" + "resolved" "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz" + "version" "1.2.7" -"mixin-deep@^1.2.0": - "integrity" "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==" - "resolved" "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz" - "version" "1.3.2" +"minipass@^2.6.0", "minipass@^2.9.0": + "integrity" "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==" + "resolved" "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz" + "version" "2.9.0" dependencies: - "for-in" "^1.0.2" - "is-extendable" "^1.0.1" + "safe-buffer" "^5.1.2" + "yallist" "^3.0.0" -"mkdirp@^0.5.1": - "integrity" "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==" - "resolved" "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz" - "version" "0.5.5" +"minizlib@^1.3.3": + "integrity" "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==" + "resolved" "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz" + "version" "1.3.3" dependencies: - "minimist" "^1.2.5" + "minipass" "^2.9.0" "mkdirp@^0.5.5": - "integrity" "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==" - "resolved" "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz" - "version" "0.5.5" - dependencies: - "minimist" "^1.2.5" - -"mkdirp@^1.0.4": - "integrity" "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" - "resolved" "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz" - "version" "1.0.4" - -"mkdirp@~0.5.1": - "integrity" "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==" - "resolved" "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz" - "version" "0.5.5" + "integrity" "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==" + "resolved" "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz" + "version" "0.5.6" dependencies: - "minimist" "^1.2.5" + "minimist" "^1.2.6" -"module-alias@^2.2.2": - "integrity" "sha512-A/78XjoX2EmNvppVWEhM2oGk3x4lLxnkEA4jTbaK97QKSDjkIoOsKQlfylt/d3kKKi596Qy3NP5XrXJ6fZIC9Q==" - "resolved" "https://registry.npmjs.org/module-alias/-/module-alias-2.2.2.tgz" - "version" "2.2.2" - -"ms@^2.1.1", "ms@2.1.2": - "integrity" "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - "resolved" "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" - "version" "2.1.2" +"mrmime@^1.0.0": + "integrity" "sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==" + "resolved" "https://registry.npmjs.org/mrmime/-/mrmime-1.0.1.tgz" + "version" "1.0.1" "ms@2.0.0": - "integrity" "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + "integrity" "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" "resolved" "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz" "version" "2.0.0" -"ms@2.1.1": - "integrity" "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" - "resolved" "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz" - "version" "2.1.1" +"ms@2.1.2": + "integrity" "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + "resolved" "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" + "version" "2.1.2" -"multicast-dns-service-types@^1.1.0": - "integrity" "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=" - "resolved" "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz" - "version" "1.1.0" +"ms@2.1.3": + "integrity" "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + "resolved" "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz" + "version" "2.1.3" -"multicast-dns@^6.0.1": - "integrity" "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==" - "resolved" "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz" - "version" "6.2.3" +"multicast-dns@^7.2.5": + "integrity" "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==" + "resolved" "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz" + "version" "7.2.5" dependencies: - "dns-packet" "^1.3.1" + "dns-packet" "^5.2.2" "thunky" "^1.0.2" -"nan@^2.12.1": - "integrity" "sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ==" - "resolved" "https://registry.npmjs.org/nan/-/nan-2.14.2.tgz" - "version" "2.14.2" - -"nanoid@^3.1.23": - "integrity" "sha512-FiB0kzdP0FFVGDKlRLEQ1BgDzU87dy5NnzjeW9YZNt+/c3+q82EQDUwniSAUxp/F0gFNI1ZhKU1FqYsMuqZVnw==" - "resolved" "https://registry.npmjs.org/nanoid/-/nanoid-3.1.23.tgz" - "version" "3.1.23" - -"nanomatch@^1.2.9": - "integrity" "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==" - "resolved" "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz" - "version" "1.2.13" - dependencies: - "arr-diff" "^4.0.0" - "array-unique" "^0.3.2" - "define-property" "^2.0.2" - "extend-shallow" "^3.0.2" - "fragment-cache" "^0.2.1" - "is-windows" "^1.0.2" - "kind-of" "^6.0.2" - "object.pick" "^1.3.0" - "regex-not" "^1.0.0" - "snapdragon" "^0.8.1" - "to-regex" "^3.0.1" +"nanoid@^3.3.4": + "integrity" "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==" + "resolved" "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz" + "version" "3.3.4" "natural-compare@^1.4.0": - "integrity" "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=" + "integrity" "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==" "resolved" "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz" "version" "1.4.0" -"negotiator@0.6.2": - "integrity" "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" - "resolved" "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz" - "version" "0.6.2" +"negotiator@0.6.3": + "integrity" "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==" + "resolved" "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz" + "version" "0.6.3" "neo-async@^2.6.2": "integrity" "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" "resolved" "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz" "version" "2.6.2" -"nice-try@^1.0.4": - "integrity" "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" - "resolved" "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz" - "version" "1.0.5" +"njre@^0.2.0": + "integrity" "sha512-+Wq8R6VmjK+jI8a9NdzfU6Vh50r3tjsdvl5KJE1OyHeH8I/nx5Ptm12qpO3qNUbstXuZfBDgDL0qQZw9JyjhMw==" + "resolved" "https://registry.npmjs.org/njre/-/njre-0.2.0.tgz" + "version" "0.2.0" + dependencies: + "command-exists-promise" "^2.0.2" + "node-fetch" "^2.5.0" + "tar" "^4.4.8" + "yauzl" "^2.10.0" "no-case@^3.0.4": "integrity" "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==" @@ -6258,35 +5753,28 @@ "tslib" "^2.0.3" "node-emoji@^1.10.0": - "integrity" "sha512-Yt3384If5H6BYGVHiHwTL+99OzJKHhgp82S8/dktEK73T26BazdgZ4JZh92xSVtGNJvz9UbXdNAc5hcrXV42vw==" - "resolved" "https://registry.npmjs.org/node-emoji/-/node-emoji-1.10.0.tgz" - "version" "1.10.0" + "integrity" "sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==" + "resolved" "https://registry.npmjs.org/node-emoji/-/node-emoji-1.11.0.tgz" + "version" "1.11.0" dependencies: - "lodash.toarray" "^4.4.0" + "lodash" "^4.17.21" -"node-fetch@2.6.7": +"node-fetch@^2.5.0", "node-fetch@2.6.7": "integrity" "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==" "resolved" "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz" "version" "2.6.7" dependencies: "whatwg-url" "^5.0.0" -"node-forge@^0.10.0": - "integrity" "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==" - "resolved" "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz" - "version" "0.10.0" - -"node-releases@^1.1.61", "node-releases@^1.1.71": - "integrity" "sha512-LLUo+PpH3dU6XizX3iVoubUNheF/owjXCZZ5yACDxNnPtgFuludV1ZL3ayK1kVep42Rmm0+R9/Y60NQbZ2bifw==" - "resolved" "https://registry.npmjs.org/node-releases/-/node-releases-1.1.72.tgz" - "version" "1.1.72" +"node-forge@^1": + "integrity" "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==" + "resolved" "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz" + "version" "1.3.1" -"normalize-path@^2.1.1": - "integrity" "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=" - "resolved" "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz" - "version" "2.1.1" - dependencies: - "remove-trailing-separator" "^1.0.1" +"node-releases@^2.0.6": + "integrity" "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==" + "resolved" "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz" + "version" "2.0.6" "normalize-path@^3.0.0", "normalize-path@~3.0.0": "integrity" "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" @@ -6294,21 +5782,19 @@ "version" "3.0.0" "normalize-range@^0.1.2": - "integrity" "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=" + "integrity" "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==" "resolved" "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz" "version" "0.1.2" -"normalize-url@^4.1.0", "normalize-url@^4.5.0": +"normalize-url@^4.1.0": "integrity" "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==" "resolved" "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz" "version" "4.5.1" -"npm-run-path@^2.0.0": - "integrity" "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=" - "resolved" "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz" - "version" "2.0.2" - dependencies: - "path-key" "^2.0.0" +"normalize-url@^6.0.1": + "integrity" "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==" + "resolved" "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz" + "version" "6.1.0" "npm-run-path@^4.0.1": "integrity" "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==" @@ -6318,128 +5804,86 @@ "path-key" "^3.0.0" "nprogress@^0.2.0": - "integrity" "sha1-y480xTIT2JVyP8urkH6UIq28r7E=" + "integrity" "sha512-I19aIingLgR1fmhftnbWWO3dXc0hSxqHQHQb3H8m+K3TnEn/iSeTZZOyvKXWqQESMwuUVnatlCnZdLBZZt2VSA==" "resolved" "https://registry.npmjs.org/nprogress/-/nprogress-0.2.0.tgz" "version" "0.2.0" -"nth-check@^1.0.2", "nth-check@~1.0.1": - "integrity" "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==" - "resolved" "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz" - "version" "1.0.2" - dependencies: - "boolbase" "~1.0.0" - -"nth-check@^2.0.0": - "integrity" "sha512-i4sc/Kj8htBrAiH1viZ0TgU8Y5XqCaV/FziYK6TBczxmeKm3AEFWqqF3195yKudrarqy7Zu80Ra5dobFjn9X/Q==" - "resolved" "https://registry.npmjs.org/nth-check/-/nth-check-2.0.0.tgz" - "version" "2.0.0" +"nth-check@^2.0.1": + "integrity" "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==" + "resolved" "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz" + "version" "2.1.1" dependencies: "boolbase" "^1.0.0" -"object-assign@^4.0.1", "object-assign@^4.1.0", "object-assign@^4.1.1": - "integrity" "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" +"object-assign@^4.1.0", "object-assign@^4.1.1": + "integrity" "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==" "resolved" "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz" "version" "4.1.1" -"object-copy@^0.1.0": - "integrity" "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=" - "resolved" "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz" - "version" "0.1.0" - dependencies: - "copy-descriptor" "^0.1.0" - "define-property" "^0.2.5" - "kind-of" "^3.0.3" - -"object-inspect@^1.9.0": - "integrity" "sha512-e5mCJlSH7poANfC8z8S9s9S2IN5/4Zb3aZ33f5s8YqoazCFzNLloLU8r5VCG+G7WoqLvAAZoVMcy3tp/3X0Plw==" - "resolved" "https://registry.npmjs.org/object-inspect/-/object-inspect-1.10.3.tgz" - "version" "1.10.3" - -"object-is@^1.0.1": - "integrity" "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==" - "resolved" "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz" - "version" "1.1.5" - dependencies: - "call-bind" "^1.0.2" - "define-properties" "^1.1.3" +"object-inspect@^1.12.2", "object-inspect@^1.9.0": + "integrity" "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==" + "resolved" "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz" + "version" "1.12.2" -"object-keys@^1.0.12", "object-keys@^1.1.1": +"object-keys@^1.1.1": "integrity" "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" "resolved" "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz" "version" "1.1.1" -"object-visit@^1.0.0": - "integrity" "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=" - "resolved" "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz" - "version" "1.0.1" - dependencies: - "isobject" "^3.0.0" - -"object.assign@^4.1.0", "object.assign@^4.1.2": - "integrity" "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==" - "resolved" "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz" - "version" "4.1.2" +"object.assign@^4.1.0", "object.assign@^4.1.3", "object.assign@^4.1.4": + "integrity" "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==" + "resolved" "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz" + "version" "4.1.4" dependencies: - "call-bind" "^1.0.0" - "define-properties" "^1.1.3" - "has-symbols" "^1.0.1" + "call-bind" "^1.0.2" + "define-properties" "^1.1.4" + "has-symbols" "^1.0.3" "object-keys" "^1.1.1" -"object.entries@^1.1.3": - "integrity" "sha512-ym7h7OZebNS96hn5IJeyUmaWhaSM4SVtAPPfNLQEI2MYWCO2egsITb9nab2+i/Pwibx+R0mtn+ltKJXRSeTMGg==" - "resolved" "https://registry.npmjs.org/object.entries/-/object.entries-1.1.3.tgz" - "version" "1.1.3" - dependencies: - "call-bind" "^1.0.0" - "define-properties" "^1.1.3" - "es-abstract" "^1.18.0-next.1" - "has" "^1.0.3" - -"object.fromentries@^2.0.4": - "integrity" "sha512-EsFBshs5RUUpQEY1D4q/m59kMfz4YJvxuNCJcv/jWwOJr34EaVnG11ZrZa0UHB3wnzV1wx8m58T4hQL8IuNXlQ==" - "resolved" "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.4.tgz" - "version" "2.0.4" +"object.entries@^1.1.5": + "integrity" "sha512-TyxmjUoZggd4OrrU1W66FMDG6CuqJxsFvymeyXI51+vQLN67zYfZseptRge703kKQdo4uccgAKebXFcRCzk4+g==" + "resolved" "https://registry.npmjs.org/object.entries/-/object.entries-1.1.5.tgz" + "version" "1.1.5" dependencies: "call-bind" "^1.0.2" "define-properties" "^1.1.3" - "es-abstract" "^1.18.0-next.2" - "has" "^1.0.3" + "es-abstract" "^1.19.1" -"object.getownpropertydescriptors@^2.1.0": - "integrity" "sha512-WtxeKSzfBjlzL+F9b7M7hewDzMwy+C8NRssHd1YrNlzHzIDrXcXiNOMrezdAEM4UXixgV+vvnyBeN7Rygl2ttQ==" - "resolved" "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.2.tgz" - "version" "2.1.2" +"object.fromentries@^2.0.5": + "integrity" "sha512-CAyG5mWQRRiBU57Re4FKoTBjXfDoNwdFVH2Y1tS9PqCsfUTymAohOkEMSG3aRNKmv4lV3O7p1et7c187q6bynw==" + "resolved" "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.5.tgz" + "version" "2.0.5" dependencies: "call-bind" "^1.0.2" "define-properties" "^1.1.3" - "es-abstract" "^1.18.0-next.2" + "es-abstract" "^1.19.1" -"object.pick@^1.3.0": - "integrity" "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=" - "resolved" "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz" - "version" "1.3.0" +"object.hasown@^1.1.1": + "integrity" "sha512-LYLe4tivNQzq4JdaWW6WO3HMZZJWzkkH8fnI6EebWl0VZth2wL2Lovm74ep2/gZzlaTdV62JZHEqHQ2yVn8Q/A==" + "resolved" "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.1.tgz" + "version" "1.1.1" dependencies: - "isobject" "^3.0.1" + "define-properties" "^1.1.4" + "es-abstract" "^1.19.5" -"object.values@^1.1.0", "object.values@^1.1.3": - "integrity" "sha512-nkF6PfDB9alkOUxpf1HNm/QlkeW3SReqL5WXeBLpEJJnlPSvRaDQpW3gQTksTN3fgJX4hL42RzKyOin6ff3tyw==" - "resolved" "https://registry.npmjs.org/object.values/-/object.values-1.1.3.tgz" - "version" "1.1.3" +"object.values@^1.1.5": + "integrity" "sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==" + "resolved" "https://registry.npmjs.org/object.values/-/object.values-1.1.5.tgz" + "version" "1.1.5" dependencies: "call-bind" "^1.0.2" "define-properties" "^1.1.3" - "es-abstract" "^1.18.0-next.2" - "has" "^1.0.3" + "es-abstract" "^1.19.1" "obuf@^1.0.0", "obuf@^1.1.2": "integrity" "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==" "resolved" "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz" "version" "1.1.2" -"on-finished@~2.3.0": - "integrity" "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=" - "resolved" "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz" - "version" "2.3.0" +"on-finished@2.4.1": + "integrity" "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==" + "resolved" "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz" + "version" "2.4.1" dependencies: "ee-first" "1.1.1" @@ -6449,7 +5893,7 @@ "version" "1.0.2" "once@^1.3.0", "once@^1.3.1", "once@^1.4.0": - "integrity" "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=" + "integrity" "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==" "resolved" "https://registry.npmjs.org/once/-/once-1.4.0.tgz" "version" "1.4.0" dependencies: @@ -6462,26 +5906,20 @@ dependencies: "mimic-fn" "^2.1.0" -"open@^7.0.2": - "integrity" "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==" - "resolved" "https://registry.npmjs.org/open/-/open-7.4.2.tgz" - "version" "7.4.2" +"open@^8.0.9", "open@^8.4.0": + "integrity" "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==" + "resolved" "https://registry.npmjs.org/open/-/open-8.4.0.tgz" + "version" "8.4.0" dependencies: - "is-docker" "^2.0.0" - "is-wsl" "^2.1.1" + "define-lazy-prop" "^2.0.0" + "is-docker" "^2.1.1" + "is-wsl" "^2.2.0" "opener@^1.5.2": "integrity" "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==" "resolved" "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz" "version" "1.5.2" -"opn@^5.5.0": - "integrity" "sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==" - "resolved" "https://registry.npmjs.org/opn/-/opn-5.5.0.tgz" - "version" "5.5.0" - dependencies: - "is-wsl" "^1.1.0" - "optionator@^0.9.1": "integrity" "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==" "resolved" "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz" @@ -6494,38 +5932,19 @@ "type-check" "^0.4.0" "word-wrap" "^1.2.3" -"original@^1.0.0": - "integrity" "sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg==" - "resolved" "https://registry.npmjs.org/original/-/original-1.0.2.tgz" - "version" "1.0.2" - dependencies: - "url-parse" "^1.4.3" - "p-cancelable@^1.0.0": "integrity" "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==" "resolved" "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz" "version" "1.1.0" -"p-finally@^1.0.0": - "integrity" "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=" - "resolved" "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz" - "version" "1.0.0" - -"p-limit@^2.0.0": - "integrity" "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==" - "resolved" "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz" - "version" "2.3.0" - dependencies: - "p-try" "^2.0.0" - -"p-limit@^2.2.0": +"p-limit@^2.0.0", "p-limit@^2.2.0": "integrity" "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==" "resolved" "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz" "version" "2.3.0" dependencies: "p-try" "^2.0.0" -"p-limit@^3.0.2", "p-limit@^3.1.0": +"p-limit@^3.0.2": "integrity" "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==" "resolved" "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz" "version" "3.1.0" @@ -6553,11 +5972,6 @@ dependencies: "p-limit" "^3.0.2" -"p-map@^2.0.0": - "integrity" "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==" - "resolved" "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz" - "version" "2.1.0" - "p-map@^4.0.0": "integrity" "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==" "resolved" "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz" @@ -6565,12 +5979,13 @@ dependencies: "aggregate-error" "^3.0.0" -"p-retry@^3.0.1": - "integrity" "sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w==" - "resolved" "https://registry.npmjs.org/p-retry/-/p-retry-3.0.1.tgz" - "version" "3.0.1" +"p-retry@^4.5.0": + "integrity" "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==" + "resolved" "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz" + "version" "4.6.2" dependencies: - "retry" "^0.12.0" + "@types/retry" "0.12.0" + "retry" "^0.13.1" "p-try@^2.0.0": "integrity" "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" @@ -6587,7 +6002,7 @@ "registry-url" "^5.0.0" "semver" "^6.2.0" -"param-case@^3.0.3": +"param-case@^3.0.4": "integrity" "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==" "resolved" "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz" "version" "3.0.4" @@ -6624,21 +6039,31 @@ "json-parse-even-better-errors" "^2.3.0" "lines-and-columns" "^1.1.6" -"parse-numeric-range@^1.2.0": - "integrity" "sha512-1q2tXpAOplPxcl8vrIGPWz1dJxxfmdRkCFcpxxMBerDnGuuHalOWF/xj9L8Nn5XoTUoB/6F0CeQBp2fMgkOYFg==" - "resolved" "https://registry.npmjs.org/parse-numeric-range/-/parse-numeric-range-1.2.0.tgz" - "version" "1.2.0" +"parse-numeric-range@^1.3.0": + "integrity" "sha512-twN+njEipszzlMJd4ONUYgSfZPDxgHhT9Ahed5uTigpQn90FggW4SA/AIPq/6a149fTbE9qBEcSwE3FAEp6wQQ==" + "resolved" "https://registry.npmjs.org/parse-numeric-range/-/parse-numeric-range-1.3.0.tgz" + "version" "1.3.0" -"parse5@^5.0.0": - "integrity" "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==" - "resolved" "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz" - "version" "5.1.1" +"parse5-htmlparser2-tree-adapter@^7.0.0": + "integrity" "sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==" + "resolved" "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz" + "version" "7.0.0" + dependencies: + "domhandler" "^5.0.2" + "parse5" "^7.0.0" "parse5@^6.0.0": "integrity" "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" "resolved" "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz" "version" "6.0.1" +"parse5@^7.0.0": + "integrity" "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==" + "resolved" "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz" + "version" "7.1.2" + dependencies: + "entities" "^4.4.0" + "parseurl@~1.3.2", "parseurl@~1.3.3": "integrity" "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" "resolved" "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz" @@ -6652,18 +6077,8 @@ "no-case" "^3.0.4" "tslib" "^2.0.3" -"pascalcase@^0.1.1": - "integrity" "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=" - "resolved" "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz" - "version" "0.1.1" - -"path-dirname@^1.0.0": - "integrity" "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=" - "resolved" "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz" - "version" "1.0.2" - "path-exists@^3.0.0": - "integrity" "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" + "integrity" "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==" "resolved" "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz" "version" "3.0.0" @@ -6673,26 +6088,21 @@ "version" "4.0.0" "path-is-absolute@^1.0.0": - "integrity" "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + "integrity" "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==" "resolved" "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" "version" "1.0.1" -"path-is-inside@^1.0.2", "path-is-inside@1.0.2": - "integrity" "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=" +"path-is-inside@1.0.2": + "integrity" "sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==" "resolved" "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz" "version" "1.0.2" -"path-key@^2.0.0", "path-key@^2.0.1": - "integrity" "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=" - "resolved" "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz" - "version" "2.0.1" - "path-key@^3.0.0", "path-key@^3.1.0": "integrity" "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" "resolved" "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz" "version" "3.1.1" -"path-parse@^1.0.6": +"path-parse@^1.0.7": "integrity" "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" "resolved" "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz" "version" "1.0.7" @@ -6705,7 +6115,7 @@ "isarray" "0.0.1" "path-to-regexp@0.1.7": - "integrity" "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" + "integrity" "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" "resolved" "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz" "version" "0.1.7" @@ -6719,39 +6129,20 @@ "resolved" "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz" "version" "4.0.0" -"picomatch@^2.0.4", "picomatch@^2.2.1", "picomatch@^2.2.3": - "integrity" "sha512-KpELjfwcCDUb9PeigTs2mBJzXUPzAuP2oPcA989He8Rte0+YUAjw1JVedDhuTKPkHjSYzMN3npC9luThGYEKdg==" - "resolved" "https://registry.npmjs.org/picomatch/-/picomatch-2.2.3.tgz" - "version" "2.2.3" - -"pify@^2.0.0": - "integrity" "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" - "resolved" "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz" - "version" "2.3.0" - -"pify@^4.0.1": - "integrity" "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==" - "resolved" "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz" - "version" "4.0.1" - -"pinkie-promise@^2.0.0": - "integrity" "sha1-ITXW36ejWMBprJsXh3YogihFD/o=" - "resolved" "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz" - "version" "2.0.1" - dependencies: - "pinkie" "^2.0.0" +"pend@~1.2.0": + "integrity" "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==" + "resolved" "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz" + "version" "1.2.0" -"pinkie@^2.0.0": - "integrity" "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=" - "resolved" "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz" - "version" "2.0.4" +"picocolors@^1.0.0": + "integrity" "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + "resolved" "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz" + "version" "1.0.0" -"pkg-dir@^3.0.0": - "integrity" "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==" - "resolved" "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz" - "version" "3.0.0" - dependencies: - "find-up" "^3.0.0" +"picomatch@^2.0.4", "picomatch@^2.2.1", "picomatch@^2.2.3", "picomatch@^2.3.1": + "integrity" "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" + "resolved" "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz" + "version" "2.3.1" "pkg-dir@^4.1.0": "integrity" "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==" @@ -6760,77 +6151,65 @@ dependencies: "find-up" "^4.0.0" -"pkg-up@3.1.0": +"pkg-up@^3.1.0": "integrity" "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==" "resolved" "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz" "version" "3.1.0" dependencies: "find-up" "^3.0.0" -"portfinder@^1.0.26": - "integrity" "sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA==" - "resolved" "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz" - "version" "1.0.28" - dependencies: - "async" "^2.6.2" - "debug" "^3.1.1" - "mkdirp" "^0.5.5" - -"posix-character-classes@^0.1.0": - "integrity" "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=" - "resolved" "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz" - "version" "0.1.1" - -"postcss-calc@^8.0.0": - "integrity" "sha512-5NglwDrcbiy8XXfPM11F3HeC6hoT9W7GUH/Zi5U/p7u3Irv4rHhdDcIZwG0llHXV4ftsBjpfWMXAnXNl4lnt8g==" - "resolved" "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.0.0.tgz" - "version" "8.0.0" +"postcss-calc@^8.2.3": + "integrity" "sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==" + "resolved" "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.2.4.tgz" + "version" "8.2.4" dependencies: - "postcss-selector-parser" "^6.0.2" - "postcss-value-parser" "^4.0.2" + "postcss-selector-parser" "^6.0.9" + "postcss-value-parser" "^4.2.0" -"postcss-colormin@^5.0.0": - "integrity" "sha512-Yt84+5V6CgS/AhK7d7MA58vG8dSZ7+ytlRtWLaQhag3HXOncTfmYpuUOX4cDoXjvLfw1sHRCHMiBjYhc35CymQ==" - "resolved" "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.0.0.tgz" - "version" "5.0.0" +"postcss-colormin@^5.3.0": + "integrity" "sha512-WdDO4gOFG2Z8n4P8TWBpshnL3JpmNmJwdnfP2gbk2qBA8PWwOYcmjmI/t3CmMeL72a7Hkd+x/Mg9O2/0rD54Pg==" + "resolved" "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.3.0.tgz" + "version" "5.3.0" dependencies: - "browserslist" "^4.16.0" - "color" "^3.1.1" - "postcss-value-parser" "^4.1.0" + "browserslist" "^4.16.6" + "caniuse-api" "^3.0.0" + "colord" "^2.9.1" + "postcss-value-parser" "^4.2.0" -"postcss-convert-values@^5.0.0": - "integrity" "sha512-V5kmYm4xoBAjNs+eHY/6XzXJkkGeg4kwNf2ocfqhLb1WBPEa4oaSmoi1fnVO7Dkblqvus9h+AenDvhCKUCK7uQ==" - "resolved" "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.0.0.tgz" - "version" "5.0.0" +"postcss-convert-values@^5.1.3": + "integrity" "sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA==" + "resolved" "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.1.3.tgz" + "version" "5.1.3" dependencies: - "postcss-value-parser" "^4.1.0" + "browserslist" "^4.21.4" + "postcss-value-parser" "^4.2.0" -"postcss-discard-comments@^5.0.0": - "integrity" "sha512-Umig6Gxs8m20RihiXY6QkePd6mp4FxkA1Dg+f/Kd6uw0gEMfKRjDeQOyFkLibexbJJGHpE3lrN/Q0R9SMrUMbQ==" - "resolved" "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.0.0.tgz" - "version" "5.0.0" +"postcss-discard-comments@^5.1.2": + "integrity" "sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==" + "resolved" "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.1.2.tgz" + "version" "5.1.2" -"postcss-discard-duplicates@^5.0.0": - "integrity" "sha512-vEJJ+Y3pFUnO1FyCBA6PSisGjHtnphL3V6GsNvkASq/VkP3OX5/No5RYXXLxHa2QegStNzg6HYrYdo71uR4caQ==" - "resolved" "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.0.0.tgz" - "version" "5.0.0" +"postcss-discard-duplicates@^5.1.0": + "integrity" "sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==" + "resolved" "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz" + "version" "5.1.0" -"postcss-discard-empty@^5.0.0": - "integrity" "sha512-+wigy099Y1xZxG36WG5L1f2zeH1oicntkJEW4TDIqKKDO2g9XVB3OhoiHTu08rDEjLnbcab4rw0BAccwi2VjiQ==" - "resolved" "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.0.0.tgz" - "version" "5.0.0" +"postcss-discard-empty@^5.1.1": + "integrity" "sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==" + "resolved" "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz" + "version" "5.1.1" -"postcss-discard-overridden@^5.0.0": - "integrity" "sha512-hybnScTaZM2iEA6kzVQ6Spozy7kVdLw+lGw8hftLlBEzt93uzXoltkYp9u0tI8xbfhxDLTOOzHsHQCkYdmzRUg==" - "resolved" "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.0.0.tgz" - "version" "5.0.0" +"postcss-discard-overridden@^5.1.0": + "integrity" "sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==" + "resolved" "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz" + "version" "5.1.0" -"postcss-discard-unused@^5.0.0": - "integrity" "sha512-C+bchjnGRoGlSQjACMts/FlpY3LMDEUS5+9rHKxvl/NFUY/5OYWjkA1AEUo9HDWnFB44CFgcm6khLMSIbrjVEQ==" - "resolved" "https://registry.npmjs.org/postcss-discard-unused/-/postcss-discard-unused-5.0.0.tgz" - "version" "5.0.0" +"postcss-discard-unused@^5.1.0": + "integrity" "sha512-KwLWymI9hbwXmJa0dkrzpRbSJEh0vVUd7r8t0yOGPcfKzyJJxFM8kLyC5Ev9avji6nY95pOp1W6HqIrfT+0VGw==" + "resolved" "https://registry.npmjs.org/postcss-discard-unused/-/postcss-discard-unused-5.1.0.tgz" + "version" "5.1.0" dependencies: - "postcss-selector-parser" "^6.0.4" + "postcss-selector-parser" "^6.0.5" "postcss-loader@^4.2.0": "integrity" "sha512-M/dSoIiNDOo8Rk0mUqoj4kpGq91gcxCfb9PoyZVdZ76/AuhxylHDYZblNE8o+EQ9AMSASeMFEKxZf5aU6wlx1Q==" @@ -6843,77 +6222,72 @@ "schema-utils" "^3.0.0" "semver" "^7.3.4" -"postcss-loader@^5.2.0": - "integrity" "sha512-/+Z1RAmssdiSLgIZwnJHwBMnlABPgF7giYzTN2NOfr9D21IJZ4mQC1R2miwp80zno9M4zMD/umGI8cR+2EL5zw==" - "resolved" "https://registry.npmjs.org/postcss-loader/-/postcss-loader-5.3.0.tgz" - "version" "5.3.0" +"postcss-loader@^7.0.0": + "integrity" "sha512-fUJzV/QH7NXUAqV8dWJ9Lg4aTkDCezpTS5HgJ2DvqznexTbSTxgi/dTECvTZ15BwKTtk8G/bqI/QTu2HPd3ZCg==" + "resolved" "https://registry.npmjs.org/postcss-loader/-/postcss-loader-7.0.2.tgz" + "version" "7.0.2" dependencies: "cosmiconfig" "^7.0.0" - "klona" "^2.0.4" - "semver" "^7.3.4" + "klona" "^2.0.5" + "semver" "^7.3.8" -"postcss-merge-idents@^5.0.0": - "integrity" "sha512-s8wwhAB/SJDPkcVxj31s2SGzgrO66ktUYjWh6j4qwY67Mzxx3/TkK+m/+v6tU/xyW4TmGd4yuyTXsHaaLC0jLg==" - "resolved" "https://registry.npmjs.org/postcss-merge-idents/-/postcss-merge-idents-5.0.0.tgz" - "version" "5.0.0" +"postcss-merge-idents@^5.1.1": + "integrity" "sha512-pCijL1TREiCoog5nQp7wUe+TUonA2tC2sQ54UGeMmryK3UFGIYKqDyjnqd6RcuI4znFn9hWSLNN8xKE/vWcUQw==" + "resolved" "https://registry.npmjs.org/postcss-merge-idents/-/postcss-merge-idents-5.1.1.tgz" + "version" "5.1.1" dependencies: - "cssnano-utils" "^2.0.0" - "postcss-value-parser" "^4.1.0" + "cssnano-utils" "^3.1.0" + "postcss-value-parser" "^4.2.0" -"postcss-merge-longhand@^5.0.1": - "integrity" "sha512-H1RO8le5deFGumQzuhJjuL0bIXPRysa+w7xtk5KrHe38oiaSS9ksPXDo24+IOS3SETPhip0J5+1uCOW+ALs3Yw==" - "resolved" "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.0.1.tgz" - "version" "5.0.1" +"postcss-merge-longhand@^5.1.7": + "integrity" "sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ==" + "resolved" "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.1.7.tgz" + "version" "5.1.7" dependencies: - "css-color-names" "^1.0.1" - "postcss-value-parser" "^4.1.0" - "stylehacks" "^5.0.0" + "postcss-value-parser" "^4.2.0" + "stylehacks" "^5.1.1" -"postcss-merge-rules@^5.0.0": - "integrity" "sha512-TfsXbKjNYCGfUPEXGIGPySnMiJbdS+3gcVeV8gwmJP4RajyKZHW8E0FYDL1WmggTj3hi+m+WUCAvqRpX2ut4Kg==" - "resolved" "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.0.0.tgz" - "version" "5.0.0" +"postcss-merge-rules@^5.1.3": + "integrity" "sha512-LbLd7uFC00vpOuMvyZop8+vvhnfRGpp2S+IMQKeuOZZapPRY4SMq5ErjQeHbHsjCUgJkRNrlU+LmxsKIqPKQlA==" + "resolved" "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.1.3.tgz" + "version" "5.1.3" dependencies: - "browserslist" "^4.16.0" + "browserslist" "^4.21.4" "caniuse-api" "^3.0.0" - "cssnano-utils" "^2.0.0" - "postcss-selector-parser" "^6.0.4" - "vendors" "^1.0.3" + "cssnano-utils" "^3.1.0" + "postcss-selector-parser" "^6.0.5" -"postcss-minify-font-values@^5.0.0": - "integrity" "sha512-zi2JhFaMOcIaNxhndX5uhsqSY1rexKDp23wV8EOmC9XERqzLbHsoRye3aYF716Zm+hkcR4loqKDt8LZlmihwAg==" - "resolved" "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.0.0.tgz" - "version" "5.0.0" +"postcss-minify-font-values@^5.1.0": + "integrity" "sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA==" + "resolved" "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.1.0.tgz" + "version" "5.1.0" dependencies: - "postcss-value-parser" "^4.1.0" + "postcss-value-parser" "^4.2.0" -"postcss-minify-gradients@^5.0.0": - "integrity" "sha512-/jPtNgs6JySMwgsE5dPOq8a2xEopWTW3RyqoB9fLqxgR+mDUNLSi7joKd+N1z7FXWgVkc4l/dEBMXHgNAaUbvg==" - "resolved" "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.0.0.tgz" - "version" "5.0.0" +"postcss-minify-gradients@^5.1.1": + "integrity" "sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw==" + "resolved" "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.1.1.tgz" + "version" "5.1.1" dependencies: - "cssnano-utils" "^2.0.0" - "is-color-stop" "^1.1.0" - "postcss-value-parser" "^4.1.0" + "colord" "^2.9.1" + "cssnano-utils" "^3.1.0" + "postcss-value-parser" "^4.2.0" -"postcss-minify-params@^5.0.0": - "integrity" "sha512-KvZYIxTPBVKjdd+XgObq9A+Sfv8lMkXTpbZTsjhr42XbfWIeLaTItMlygsDWfjArEc3muUfDaUFgNSeDiJ5jug==" - "resolved" "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.0.0.tgz" - "version" "5.0.0" +"postcss-minify-params@^5.1.4": + "integrity" "sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw==" + "resolved" "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.1.4.tgz" + "version" "5.1.4" dependencies: - "alphanum-sort" "^1.0.2" - "browserslist" "^4.16.0" - "cssnano-utils" "^2.0.0" - "postcss-value-parser" "^4.1.0" - "uniqs" "^2.0.0" + "browserslist" "^4.21.4" + "cssnano-utils" "^3.1.0" + "postcss-value-parser" "^4.2.0" -"postcss-minify-selectors@^5.0.0": - "integrity" "sha512-cEM0O0eWwFIvmo6nfB0lH0vO/XFwgqIvymODbfPXZ1gTA3i76FKnb7TGUrEpiTxaXH6tgYQ6DcTHwRiRS+YQLQ==" - "resolved" "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.0.0.tgz" - "version" "5.0.0" +"postcss-minify-selectors@^5.2.1": + "integrity" "sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg==" + "resolved" "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.2.1.tgz" + "version" "5.2.1" dependencies: - "alphanum-sort" "^1.0.2" - "postcss-selector-parser" "^3.1.2" + "postcss-selector-parser" "^6.0.5" "postcss-modules-extract-imports@^3.0.0": "integrity" "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==" @@ -6943,166 +6317,147 @@ dependencies: "icss-utils" "^5.0.0" -"postcss-normalize-charset@^5.0.0": - "integrity" "sha512-pqsCkgo9KmQP0ew6DqSA+uP9YN6EfsW20pQ3JU5JoQge09Z6Too4qU0TNDsTNWuEaP8SWsMp+19l15210MsDZQ==" - "resolved" "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.0.0.tgz" - "version" "5.0.0" +"postcss-normalize-charset@^5.1.0": + "integrity" "sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==" + "resolved" "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz" + "version" "5.1.0" -"postcss-normalize-display-values@^5.0.0": - "integrity" "sha512-t4f2d//gH1f7Ns0Jq3eNdnWuPT7TeLuISZ6RQx4j8gpl5XrhkdshdNcOnlrEK48YU6Tcb6jqK7dorME3N4oOGA==" - "resolved" "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.0.0.tgz" - "version" "5.0.0" +"postcss-normalize-display-values@^5.1.0": + "integrity" "sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA==" + "resolved" "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.1.0.tgz" + "version" "5.1.0" dependencies: - "cssnano-utils" "^2.0.0" - "postcss-value-parser" "^4.1.0" + "postcss-value-parser" "^4.2.0" -"postcss-normalize-positions@^5.0.0": - "integrity" "sha512-0o6/qU5ky74X/eWYj/tv4iiKCm3YqJnrhmVADpIMNXxzFZywsSQxl8F7cKs8jQEtF3VrJBgcDHTexZy1zgDoYg==" - "resolved" "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.0.0.tgz" - "version" "5.0.0" +"postcss-normalize-positions@^5.1.1": + "integrity" "sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg==" + "resolved" "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.1.1.tgz" + "version" "5.1.1" dependencies: - "postcss-value-parser" "^4.1.0" + "postcss-value-parser" "^4.2.0" -"postcss-normalize-repeat-style@^5.0.0": - "integrity" "sha512-KRT14JbrXKcFMYuc4q7lh8lvv8u22wLyMrq+UpHKLtbx2H/LOjvWXYdoDxmNrrrJzomAWL+ViEXr48/IhSUJnQ==" - "resolved" "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.0.0.tgz" - "version" "5.0.0" +"postcss-normalize-repeat-style@^5.1.1": + "integrity" "sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g==" + "resolved" "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.1.tgz" + "version" "5.1.1" dependencies: - "cssnano-utils" "^2.0.0" - "postcss-value-parser" "^4.1.0" + "postcss-value-parser" "^4.2.0" -"postcss-normalize-string@^5.0.0": - "integrity" "sha512-wSO4pf7GNcDZpmelREWYADF1+XZWrAcbFLQCOqoE92ZwYgaP/RLumkUTaamEzdT2YKRZAH8eLLKGWotU/7FNPw==" - "resolved" "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.0.0.tgz" - "version" "5.0.0" +"postcss-normalize-string@^5.1.0": + "integrity" "sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w==" + "resolved" "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.1.0.tgz" + "version" "5.1.0" dependencies: - "postcss-value-parser" "^4.1.0" + "postcss-value-parser" "^4.2.0" -"postcss-normalize-timing-functions@^5.0.0": - "integrity" "sha512-TwPaDX+wl9wO3MUm23lzGmOzGCGKnpk+rSDgzB2INpakD5dgWR3L6bJq1P1LQYzBAvz8fRIj2NWdnZdV4EV98Q==" - "resolved" "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.0.0.tgz" - "version" "5.0.0" +"postcss-normalize-timing-functions@^5.1.0": + "integrity" "sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg==" + "resolved" "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.1.0.tgz" + "version" "5.1.0" dependencies: - "cssnano-utils" "^2.0.0" - "postcss-value-parser" "^4.1.0" + "postcss-value-parser" "^4.2.0" -"postcss-normalize-unicode@^5.0.0": - "integrity" "sha512-2CpVoz/67rXU5s9tsPZDxG1YGS9OFHwoY9gsLAzrURrCxTAb0H7Vp87/62LvVPgRWTa5ZmvgmqTp2rL8tlm72A==" - "resolved" "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.0.0.tgz" - "version" "5.0.0" +"postcss-normalize-unicode@^5.1.1": + "integrity" "sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA==" + "resolved" "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.1.tgz" + "version" "5.1.1" dependencies: - "browserslist" "^4.16.0" - "postcss-value-parser" "^4.1.0" + "browserslist" "^4.21.4" + "postcss-value-parser" "^4.2.0" -"postcss-normalize-url@^5.0.0": - "integrity" "sha512-ICDaGFBqLgA3dlrCIRuhblLl80D13YtgEV9NJPTYJtgR72vu61KgxAHv+z/lKMs1EbwfSQa3ALjOFLSmXiE34A==" - "resolved" "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.0.0.tgz" - "version" "5.0.0" +"postcss-normalize-url@^5.1.0": + "integrity" "sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew==" + "resolved" "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.1.0.tgz" + "version" "5.1.0" dependencies: - "is-absolute-url" "^3.0.3" - "normalize-url" "^4.5.0" - "postcss-value-parser" "^4.1.0" + "normalize-url" "^6.0.1" + "postcss-value-parser" "^4.2.0" -"postcss-normalize-whitespace@^5.0.0": - "integrity" "sha512-KRnxQvQAVkJfaeXSz7JlnD9nBN9sFZF9lrk9452Q2uRoqrRSkinqifF8Iex7wZGei2DZVG/qpmDFDmRvbNAOGA==" - "resolved" "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.0.0.tgz" - "version" "5.0.0" +"postcss-normalize-whitespace@^5.1.1": + "integrity" "sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA==" + "resolved" "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.1.1.tgz" + "version" "5.1.1" dependencies: - "postcss-value-parser" "^4.1.0" + "postcss-value-parser" "^4.2.0" -"postcss-ordered-values@^5.0.0": - "integrity" "sha512-dPr+SRObiHueCIc4IUaG0aOGQmYkuNu50wQvdXTGKy+rzi2mjmPsbeDsheLk5WPb9Zyf2tp8E+I+h40cnivm6g==" - "resolved" "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.0.0.tgz" - "version" "5.0.0" +"postcss-ordered-values@^5.1.3": + "integrity" "sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ==" + "resolved" "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.1.3.tgz" + "version" "5.1.3" dependencies: - "cssnano-utils" "^2.0.0" - "postcss-value-parser" "^4.1.0" + "cssnano-utils" "^3.1.0" + "postcss-value-parser" "^4.2.0" -"postcss-reduce-idents@^5.0.0": - "integrity" "sha512-wDth7wkXAZ91i7GNe+/PJKyC9NOR2n04U0t5nnqlvlkKhMhnRn/8NJLYQRa7ZZHPGOZcOfvugrhblioTTg2X8A==" - "resolved" "https://registry.npmjs.org/postcss-reduce-idents/-/postcss-reduce-idents-5.0.0.tgz" - "version" "5.0.0" +"postcss-reduce-idents@^5.2.0": + "integrity" "sha512-BTrLjICoSB6gxbc58D5mdBK8OhXRDqud/zodYfdSi52qvDHdMwk+9kB9xsM8yJThH/sZU5A6QVSmMmaN001gIg==" + "resolved" "https://registry.npmjs.org/postcss-reduce-idents/-/postcss-reduce-idents-5.2.0.tgz" + "version" "5.2.0" dependencies: - "postcss-value-parser" "^4.1.0" + "postcss-value-parser" "^4.2.0" -"postcss-reduce-initial@^5.0.0": - "integrity" "sha512-wR6pXUaFbSMG1oCKx8pKVA+rnSXCHlca5jMrlmkmif+uig0HNUTV9oGN5kjKsM3mATQAldv2PF9Tbl2vqLFjnA==" - "resolved" "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.0.0.tgz" - "version" "5.0.0" +"postcss-reduce-initial@^5.1.1": + "integrity" "sha512-//jeDqWcHPuXGZLoolFrUXBDyuEGbr9S2rMo19bkTIjBQ4PqkaO+oI8wua5BOUxpfi97i3PCoInsiFIEBfkm9w==" + "resolved" "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.1.1.tgz" + "version" "5.1.1" dependencies: - "browserslist" "^4.16.0" + "browserslist" "^4.21.4" "caniuse-api" "^3.0.0" -"postcss-reduce-transforms@^5.0.0": - "integrity" "sha512-iHdGODW4YzM3WjVecBhPQt6fpJC4lGQZxJKjkBNHpp2b8dzmvj0ogKThqya+IRodQEFzjfXgYeESkf172FH5Lw==" - "resolved" "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.0.0.tgz" - "version" "5.0.0" - dependencies: - "cssnano-utils" "^2.0.0" - "postcss-value-parser" "^4.1.0" - -"postcss-selector-parser@^3.1.2": - "integrity" "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==" - "resolved" "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz" - "version" "3.1.2" +"postcss-reduce-transforms@^5.1.0": + "integrity" "sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ==" + "resolved" "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.1.0.tgz" + "version" "5.1.0" dependencies: - "dot-prop" "^5.2.0" - "indexes-of" "^1.0.1" - "uniq" "^1.0.1" + "postcss-value-parser" "^4.2.0" -"postcss-selector-parser@^6.0.2", "postcss-selector-parser@^6.0.4": - "integrity" "sha512-9LXrvaaX3+mcv5xkg5kFwqSzSH1JIObIx51PrndZwlmznwXRfxMddDvo9gve3gVR8ZTKgoFDdWkbRFmEhT4PMg==" - "resolved" "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.6.tgz" - "version" "6.0.6" +"postcss-selector-parser@^6.0.2", "postcss-selector-parser@^6.0.4", "postcss-selector-parser@^6.0.5", "postcss-selector-parser@^6.0.9": + "integrity" "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==" + "resolved" "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz" + "version" "6.0.10" dependencies: "cssesc" "^3.0.0" "util-deprecate" "^1.0.2" -"postcss-sort-media-queries@^3.8.9": - "integrity" "sha512-pyCWbMrpQq4WjcYFrcVAvxS/+iHnXK5pxa1SAm1s9U4HZjGYU4gkCHwbHbzJ2ZFiiRYpRNRp85QuFvg6ZyKHxw==" - "resolved" "https://registry.npmjs.org/postcss-sort-media-queries/-/postcss-sort-media-queries-3.9.10.tgz" - "version" "3.9.10" +"postcss-sort-media-queries@^4.2.1": + "integrity" "sha512-jAl8gJM2DvuIJiI9sL1CuiHtKM4s5aEIomkU8G3LFvbP+p8i7Sz8VV63uieTgoewGqKbi+hxBTiOKJlB35upCg==" + "resolved" "https://registry.npmjs.org/postcss-sort-media-queries/-/postcss-sort-media-queries-4.3.0.tgz" + "version" "4.3.0" dependencies: - "sort-css-media-queries" "1.5.4" + "sort-css-media-queries" "2.1.0" -"postcss-svgo@^5.0.0": - "integrity" "sha512-M3/VS4sFI1Yp9g0bPL+xzzCNz5iLdRUztoFaugMit5a8sMfkVzzhwqbsOlD8IFFymCdJDmXmh31waYHWw1K4BA==" - "resolved" "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.0.0.tgz" - "version" "5.0.0" +"postcss-svgo@^5.1.0": + "integrity" "sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA==" + "resolved" "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.1.0.tgz" + "version" "5.1.0" dependencies: - "postcss-value-parser" "^4.1.0" - "svgo" "^2.3.0" + "postcss-value-parser" "^4.2.0" + "svgo" "^2.7.0" -"postcss-unique-selectors@^5.0.0": - "integrity" "sha512-o9l4pF8SRn7aCMTmzb/kNv/kjV7wPZpZ8Nlb1Gq8v/Qvw969K1wanz1RVA0ehHzWe9+wHXaC2DvZlak/gdMJ5w==" - "resolved" "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.0.0.tgz" - "version" "5.0.0" +"postcss-unique-selectors@^5.1.1": + "integrity" "sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA==" + "resolved" "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.1.1.tgz" + "version" "5.1.1" dependencies: - "alphanum-sort" "^1.0.2" - "postcss-selector-parser" "^6.0.2" - "uniqs" "^2.0.0" + "postcss-selector-parser" "^6.0.5" -"postcss-value-parser@^4.0.2", "postcss-value-parser@^4.1.0": - "integrity" "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==" - "resolved" "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz" - "version" "4.1.0" +"postcss-value-parser@^4.1.0", "postcss-value-parser@^4.2.0": + "integrity" "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" + "resolved" "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz" + "version" "4.2.0" -"postcss-zindex@^5.0.0": - "integrity" "sha512-thJp90qNZedxzfljsAnu7V35L/Zue/nVvWzPDLKZuqHmwDuy1vd3xkFVYfEa8WZZQaetvHtsi3uwjVD3UJAVeg==" - "resolved" "https://registry.npmjs.org/postcss-zindex/-/postcss-zindex-5.0.0.tgz" - "version" "5.0.0" - dependencies: - "has" "^1.0.3" - "uniqs" "^2.0.0" +"postcss-zindex@^5.1.0": + "integrity" "sha512-fgFMf0OtVSBR1va1JNHYgMxYk73yhn/qb4uQDq1DLGYolz8gHCyr/sesEuGUaYs58E3ZJRcpoGuPVoB7Meiq9A==" + "resolved" "https://registry.npmjs.org/postcss-zindex/-/postcss-zindex-5.1.0.tgz" + "version" "5.1.0" -"postcss@^7.0.0 || ^8.0.1", "postcss@^8.0.9", "postcss@^8.1.0", "postcss@^8.2.1", "postcss@^8.2.10", "postcss@^8.2.13", "postcss@^8.2.2", "postcss@^8.2.4", "postcss@^8.2.9": - "integrity" "sha512-2zO3b26eJD/8rb106Qu2o7Qgg52ND5HPjcyQiK2B98O388h43A448LCslC0dI2P97wCAQRJsFvwTRcXxTKds+Q==" - "resolved" "https://registry.npmjs.org/postcss/-/postcss-8.2.15.tgz" - "version" "8.2.15" +"postcss@^7.0.0 || ^8.0.1", "postcss@^8.0.9", "postcss@^8.1.0", "postcss@^8.2.13", "postcss@^8.2.15", "postcss@^8.2.2", "postcss@^8.3.11", "postcss@^8.4.14", "postcss@^8.4.16", "postcss@^8.4.17", "postcss@^8.4.19": + "integrity" "sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg==" + "resolved" "https://registry.npmjs.org/postcss/-/postcss-8.4.21.tgz" + "version" "8.4.21" dependencies: - "colorette" "^1.2.2" - "nanoid" "^3.1.23" - "source-map" "^0.6.1" + "nanoid" "^3.3.4" + "picocolors" "^1.0.0" + "source-map-js" "^1.0.2" "prelude-ls@^1.2.1": "integrity" "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==" @@ -7110,39 +6465,37 @@ "version" "1.2.1" "prepend-http@^2.0.0": - "integrity" "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=" + "integrity" "sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA==" "resolved" "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz" "version" "2.0.0" "prettier@^2.0.5": - "integrity" "sha512-kXtO4s0Lz/DW/IJ9QdWhAf7/NmPWQXkFr/r/WkR3vyI+0v8amTDxiaQSLzs8NBlytfLWX/7uQUMIW677yLKl4w==" - "resolved" "https://registry.npmjs.org/prettier/-/prettier-2.3.0.tgz" - "version" "2.3.0" + "integrity" "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==" + "resolved" "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz" + "version" "2.7.1" -"pretty-error@^2.1.1": - "integrity" "sha512-EY5oDzmsX5wvuynAByrmY0P0hcp+QpnAKbJng2A2MPjVKXCxrDSUkzghVJ4ZGPIv+JC4gX8fPUWscC0RtjsWGw==" - "resolved" "https://registry.npmjs.org/pretty-error/-/pretty-error-2.1.2.tgz" - "version" "2.1.2" +"pretty-error@^4.0.0": + "integrity" "sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==" + "resolved" "https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz" + "version" "4.0.0" dependencies: "lodash" "^4.17.20" - "renderkid" "^2.0.4" + "renderkid" "^3.0.0" "pretty-time@^1.1.0": "integrity" "sha512-28iF6xPQrP8Oa6uxE6a1biz+lWeTOAPKggvjB8HAs6nVMKZwf5bG++632Dx614hIWgUPkgivRfG+a8uAXGTIbA==" "resolved" "https://registry.npmjs.org/pretty-time/-/pretty-time-1.1.0.tgz" "version" "1.1.0" -"prism-react-renderer@^1.1.1": - "integrity" "sha512-GHqzxLYImx1iKN1jJURcuRoA/0ygCcNhfGw1IT8nPIMzarmKQ3Nc+JcG0gi8JXQzuh0C5ShE4npMIoqNin40hg==" - "resolved" "https://registry.npmjs.org/prism-react-renderer/-/prism-react-renderer-1.2.0.tgz" - "version" "1.2.0" +"prism-react-renderer@^1.3.5": + "integrity" "sha512-IJ+MSwBWKG+SM3b2SUfdrhC+gu01QkV2KmRQgREThBfSQRoufqRfxfHUxpG1WcaFjP+kojcFyO9Qqtpgt3qLCg==" + "resolved" "https://registry.npmjs.org/prism-react-renderer/-/prism-react-renderer-1.3.5.tgz" + "version" "1.3.5" -"prismjs@^1.23.0": - "integrity" "sha512-c29LVsqOaLbBHuIbsTxaKENh1N2EQBOHaWv7gkHN4dgRbxSREqDnDbtFJYdpPauS4YCplMSNCABQ6Eeor69bAA==" - "resolved" "https://registry.npmjs.org/prismjs/-/prismjs-1.23.0.tgz" - "version" "1.23.0" - optionalDependencies: - "clipboard" "^2.0.0" +"prismjs@^1.28.0": + "integrity" "sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==" + "resolved" "https://registry.npmjs.org/prismjs/-/prismjs-1.29.0.tgz" + "version" "1.29.0" "process-nextick-args@~2.0.0": "integrity" "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" @@ -7161,30 +6514,22 @@ dependencies: "asap" "~2.0.3" -"prompts@^2.4.0": - "integrity" "sha512-EQyfIuO2hPDsX1L/blblV+H7I0knhgAd82cVneCwcdND9B8AuCDuRcBH6yIcG4dFzlOUqbazQqwGjx5xmsNLuQ==" - "resolved" "https://registry.npmjs.org/prompts/-/prompts-2.4.1.tgz" - "version" "2.4.1" - dependencies: - "kleur" "^3.0.3" - "sisteransi" "^1.0.5" - -"prompts@2.4.0": - "integrity" "sha512-awZAKrk3vN6CroQukBL+R9051a4R3zCZBlJm/HBfrSZ8iTpYix3VX1vU4mveiLpiwmOJT4wokTF9m6HUk4KqWQ==" - "resolved" "https://registry.npmjs.org/prompts/-/prompts-2.4.0.tgz" - "version" "2.4.0" +"prompts@^2.4.2": + "integrity" "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==" + "resolved" "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz" + "version" "2.4.2" dependencies: "kleur" "^3.0.3" "sisteransi" "^1.0.5" -"prop-types@^15.0.0", "prop-types@^15.5.0", "prop-types@^15.6.2", "prop-types@^15.7.2": - "integrity" "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==" - "resolved" "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz" - "version" "15.7.2" +"prop-types@^15.5.0", "prop-types@^15.6.2", "prop-types@^15.7.2", "prop-types@^15.8.1": + "integrity" "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==" + "resolved" "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz" + "version" "15.8.1" dependencies: "loose-envify" "^1.4.0" "object-assign" "^4.1.1" - "react-is" "^16.8.1" + "react-is" "^16.13.1" "property-information@^5.0.0", "property-information@^5.3.0": "integrity" "sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA==" @@ -7193,19 +6538,14 @@ dependencies: "xtend" "^4.0.0" -"proxy-addr@~2.0.5": - "integrity" "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==" - "resolved" "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz" - "version" "2.0.6" +"proxy-addr@~2.0.7": + "integrity" "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==" + "resolved" "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz" + "version" "2.0.7" dependencies: - "forwarded" "~0.1.2" + "forwarded" "0.2.0" "ipaddr.js" "1.9.1" -"prr@~1.0.1": - "integrity" "sha1-0/wRS6BplaRexok/SEzrHXj19HY=" - "resolved" "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz" - "version" "1.0.1" - "pump@^3.0.0": "integrity" "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==" "resolved" "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz" @@ -7215,7 +6555,7 @@ "once" "^1.3.1" "punycode@^1.3.2": - "integrity" "sha1-wNWmOycYgArY4esPpSachN1BhF4=" + "integrity" "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==" "resolved" "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz" "version" "1.4.1" @@ -7224,11 +6564,6 @@ "resolved" "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz" "version" "2.1.1" -"punycode@1.3.2": - "integrity" "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=" - "resolved" "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz" - "version" "1.3.2" - "pupa@^2.1.1": "integrity" "sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==" "resolved" "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz" @@ -7237,35 +6572,29 @@ "escape-goat" "^2.0.0" "pure-color@^1.2.0": - "integrity" "sha1-H+Bk+wrIUfDeYTIKi/eWg2Qi8z4=" + "integrity" "sha512-QFADYnsVoBMw1srW7OVKEYjG+MbIa49s54w1MA1EDY6r2r/sTcKKYqRX1f4GYvnXP7eN/Pe9HFcX+hwzmrXRHA==" "resolved" "https://registry.npmjs.org/pure-color/-/pure-color-1.3.0.tgz" "version" "1.3.0" -"q@^1.1.2": - "integrity" "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=" - "resolved" "https://registry.npmjs.org/q/-/q-1.5.1.tgz" - "version" "1.5.1" - -"qs@6.7.0": - "integrity" "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==" - "resolved" "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz" - "version" "6.7.0" - -"querystring@0.2.0": - "integrity" "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=" - "resolved" "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz" - "version" "0.2.0" - -"querystringify@^2.1.1": - "integrity" "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==" - "resolved" "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz" - "version" "2.2.0" +"qs@6.11.0": + "integrity" "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==" + "resolved" "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz" + "version" "6.11.0" + dependencies: + "side-channel" "^1.0.4" "queue-microtask@^1.2.2": "integrity" "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==" "resolved" "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz" "version" "1.2.3" +"queue@6.0.2": + "integrity" "sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==" + "resolved" "https://registry.npmjs.org/queue/-/queue-6.0.2.tgz" + "version" "6.0.2" + dependencies: + "inherits" "~2.0.3" + "randombytes@^2.1.0": "integrity" "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==" "resolved" "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz" @@ -7279,21 +6608,21 @@ "version" "1.2.1" "range-parser@1.2.0": - "integrity" "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=" + "integrity" "sha512-kA5WQoNVo4t9lNx2kQNFCxKeBl5IbbSNBl1M/tLkw9WCn+hxNBAW5Qh8gdhs63CJnhjJ2zQWFoqPJP2sK1AV5A==" "resolved" "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz" "version" "1.2.0" -"raw-body@2.4.0": - "integrity" "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==" - "resolved" "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz" - "version" "2.4.0" +"raw-body@2.5.1": + "integrity" "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==" + "resolved" "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz" + "version" "2.5.1" dependencies: - "bytes" "3.1.0" - "http-errors" "1.7.2" + "bytes" "3.1.2" + "http-errors" "2.0.0" "iconv-lite" "0.4.24" "unpipe" "1.0.0" -"rc@^1.2.8": +"rc@^1.2.8", "rc@1.2.8": "integrity" "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==" "resolved" "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz" "version" "1.2.8" @@ -7304,7 +6633,7 @@ "strip-json-comments" "~2.0.1" "react-base16-styling@^0.6.0": - "integrity" "sha1-7yFW1mz0E5aVyKFniGy2nqZgeSw=" + "integrity" "sha512-yvh/7CArceR/jNATXOKDlvTnPKPmGZz7zsenQ3jUwLzHkNUR0CvY3yGYJbWJ/nnxsL8Sgmt5cO3/SILVuPO6TQ==" "resolved" "https://registry.npmjs.org/react-base16-styling/-/react-base16-styling-0.6.0.tgz" "version" "0.6.0" dependencies: @@ -7313,37 +6642,37 @@ "lodash.flow" "^3.3.0" "pure-color" "^1.2.0" -"react-dev-utils@^11.0.1": - "integrity" "sha512-dx0LvIGHcOPtKbeiSUM4jqpBl3TcY7CDjZdfOIcKeznE7BWr9dg0iPG90G5yfVQ+p/rGNMXdbfStvzQZEVEi4A==" - "resolved" "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-11.0.4.tgz" - "version" "11.0.4" - dependencies: - "@babel/code-frame" "7.10.4" - "address" "1.1.2" - "browserslist" "4.14.2" - "chalk" "2.4.2" - "cross-spawn" "7.0.3" - "detect-port-alt" "1.1.6" - "escape-string-regexp" "2.0.0" - "filesize" "6.1.0" - "find-up" "4.1.0" - "fork-ts-checker-webpack-plugin" "4.1.6" - "global-modules" "2.0.0" - "globby" "11.0.1" - "gzip-size" "5.1.1" - "immer" "8.0.1" - "is-root" "2.1.0" - "loader-utils" "2.0.0" - "open" "^7.0.2" - "pkg-up" "3.1.0" - "prompts" "2.4.0" - "react-error-overlay" "^6.0.9" - "recursive-readdir" "2.2.2" - "shell-quote" "1.7.2" - "strip-ansi" "6.0.0" - "text-table" "0.2.0" - -"react-dom@^16.8.4", "react-dom@^16.8.4 || ^17.0.0", "react-dom@^17.0.0 || ^16.3.0 || ^15.5.4", "react-dom@>= 16.8.0 < 18.0.0": +"react-dev-utils@^12.0.1": + "integrity" "sha512-84Ivxmr17KjUupyqzFode6xKhjwuEJDROWKJy/BthkL7Wn6NJ8h4WE6k/exAv6ImS+0oZLRRW5j/aINMHyeGeQ==" + "resolved" "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-12.0.1.tgz" + "version" "12.0.1" + dependencies: + "@babel/code-frame" "^7.16.0" + "address" "^1.1.2" + "browserslist" "^4.18.1" + "chalk" "^4.1.2" + "cross-spawn" "^7.0.3" + "detect-port-alt" "^1.1.6" + "escape-string-regexp" "^4.0.0" + "filesize" "^8.0.6" + "find-up" "^5.0.0" + "fork-ts-checker-webpack-plugin" "^6.5.0" + "global-modules" "^2.0.0" + "globby" "^11.0.4" + "gzip-size" "^6.0.0" + "immer" "^9.0.7" + "is-root" "^2.1.0" + "loader-utils" "^3.2.0" + "open" "^8.4.0" + "pkg-up" "^3.1.0" + "prompts" "^2.4.2" + "react-error-overlay" "^6.0.11" + "recursive-readdir" "^2.2.2" + "shell-quote" "^1.7.3" + "strip-ansi" "^6.0.1" + "text-table" "^0.2.0" + +"react-dom@*", "react-dom@^16.6.0 || ^17.0.0 || ^18.0.0", "react-dom@^16.8.4", "react-dom@^16.8.4 || ^17.0.0", "react-dom@^17.0.0 || ^16.3.0 || ^15.5.4", "react-dom@>= 16.8.0 < 19.0.0": "integrity" "sha512-1gCeQXDLoIqMgqD3IO2Ah9bnf0w9kzhwN5q4FGnHZ67hBm9yePzB5JJAIQCc8x3pFnNlwFq4RidZggNAAkzWWw==" "resolved" "https://registry.npmjs.org/react-dom/-/react-dom-16.14.0.tgz" "version" "16.14.0" @@ -7353,32 +6682,33 @@ "prop-types" "^15.6.2" "scheduler" "^0.19.1" -"react-error-overlay@^6.0.9": - "integrity" "sha512-nQTTcUu+ATDbrSD1BZHr5kgSD4oF8OFjxun8uAaL8RwPBacGBNPf/yAuVVdx17N8XNzRDMrZ9XcKZHCjPW+9ew==" - "resolved" "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.9.tgz" - "version" "6.0.9" +"react-error-overlay@^6.0.11": + "integrity" "sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg==" + "resolved" "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.11.tgz" + "version" "6.0.11" -"react-fast-compare@^3.1.1": +"react-fast-compare@^3.2.0": "integrity" "sha512-rtGImPZ0YyLrscKI9xTpV8psd6I8VAtjKCzQDlzyDvqJA8XOW78TXYQwNRNd8g8JZnDu8q9Fu/1v4HPAVwVdHA==" "resolved" "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-3.2.0.tgz" "version" "3.2.0" -"react-helmet@^6.1.0": - "integrity" "sha512-4uMzEY9nlDlgxr61NL3XbKRy1hEkXmKNXhjbAIOVw5vcFrsdYbH2FEwcNyWvWinl103nXgzYNlns9ca+8kFiWw==" - "resolved" "https://registry.npmjs.org/react-helmet/-/react-helmet-6.1.0.tgz" - "version" "6.1.0" +"react-helmet-async@*", "react-helmet-async@^1.3.0": + "integrity" "sha512-9jZ57/dAn9t3q6hneQS0wukqC2ENOBgMNVEhb/ZG9ZSxUetzVIw4iAmEU38IaVg3QGYauQPhSeUTuIUtFglWpg==" + "resolved" "https://registry.npmjs.org/react-helmet-async/-/react-helmet-async-1.3.0.tgz" + "version" "1.3.0" dependencies: - "object-assign" "^4.1.1" + "@babel/runtime" "^7.12.5" + "invariant" "^2.2.4" "prop-types" "^15.7.2" - "react-fast-compare" "^3.1.1" - "react-side-effect" "^2.1.0" + "react-fast-compare" "^3.2.0" + "shallowequal" "^1.1.0" -"react-is@^16.6.0", "react-is@^16.7.0", "react-is@^16.8.1": +"react-is@^16.13.1", "react-is@^16.6.0", "react-is@^16.7.0": "integrity" "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" "resolved" "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz" "version" "16.13.1" -"react-json-view@^1.21.1": +"react-json-view@^1.21.3": "integrity" "sha512-13p8IREj9/x/Ye4WI/JpjhoIwuzEgUAtgJZNBJckfzJt1qyh24BdTm6UQNGnyTq9dapQdrqvquZTo3dz1X6Cjw==" "resolved" "https://registry.npmjs.org/react-json-view/-/react-json-view-1.21.3.tgz" "version" "1.21.3" @@ -7400,13 +6730,21 @@ dependencies: "@babel/runtime" "^7.10.3" -"react-loadable@*", "react-loadable@^5.5.0": +"react-loadable@*": "integrity" "sha512-C8Aui0ZpMd4KokxRdVAm2bQtI03k2RMRNzOB+IipV3yxFTSVICv7WoUr5L9ALB5BmKO1iHgZtWM8EvYG83otdg==" "resolved" "https://registry.npmjs.org/react-loadable/-/react-loadable-5.5.0.tgz" "version" "5.5.0" dependencies: "prop-types" "^15.5.0" +"react-loadable@npm:@docusaurus/react-loadable@5.5.2": + "integrity" "sha512-A3dYjdBGuy0IGT+wyLIGIKLRE+sAk1iNk0f1HjNDysO7u8lhL4N3VEm+FAubmJbAztn94F7MxBTPmnixbiyFdQ==" + "resolved" "https://registry.npmjs.org/@docusaurus/react-loadable/-/react-loadable-5.5.2.tgz" + "version" "5.5.2" + dependencies: + "@types/react" "*" + "prop-types" "^15.6.2" + "react-router-config@^5.1.1": "integrity" "sha512-DuanZjaD8mQp1ppHjgnnUnyOlqYXZVjnov/JzFhjLEwd3Z4dYjMSnqrEzzGThH47vpCOqPPwJM2FtthLeJ8Pbg==" "resolved" "https://registry.npmjs.org/react-router-config/-/react-router-config-5.1.1.tgz" @@ -7414,50 +6752,44 @@ dependencies: "@babel/runtime" "^7.1.2" -"react-router-dom@^5.2.0": - "integrity" "sha512-gxAmfylo2QUjcwxI63RhQ5G85Qqt4voZpUXSEqCwykV0baaOTQDR1f0PmY8AELqIyVc0NEZUj0Gov5lNGcXgsA==" - "resolved" "https://registry.npmjs.org/react-router-dom/-/react-router-dom-5.2.0.tgz" - "version" "5.2.0" +"react-router-dom@^5.3.3": + "integrity" "sha512-m4EqFMHv/Ih4kpcBCONHbkT68KoAeHN4p3lAGoNryfHi0dMy0kCzEZakiKRsvg5wHZ/JLrLW8o8KomWiz/qbYQ==" + "resolved" "https://registry.npmjs.org/react-router-dom/-/react-router-dom-5.3.4.tgz" + "version" "5.3.4" dependencies: - "@babel/runtime" "^7.1.2" + "@babel/runtime" "^7.12.13" "history" "^4.9.0" "loose-envify" "^1.3.1" "prop-types" "^15.6.2" - "react-router" "5.2.0" + "react-router" "5.3.4" "tiny-invariant" "^1.0.2" "tiny-warning" "^1.0.0" -"react-router@^5.2.0", "react-router@>=5", "react-router@5.2.0": - "integrity" "sha512-smz1DUuFHRKdcJC0jobGo8cVbhO3x50tCL4icacOlcwDOEQPq4TMqwx3sY1TP+DvtTgz4nm3thuo7A+BK2U0Dw==" - "resolved" "https://registry.npmjs.org/react-router/-/react-router-5.2.0.tgz" - "version" "5.2.0" +"react-router@^5.3.3", "react-router@>=5", "react-router@5.3.4": + "integrity" "sha512-Ys9K+ppnJah3QuaRiLxk+jDWOR1MekYQrlytiXxC1RyfbdsZkS5pvKAzCCr031xHixZwpnsYNT5xysdFHQaYsA==" + "resolved" "https://registry.npmjs.org/react-router/-/react-router-5.3.4.tgz" + "version" "5.3.4" dependencies: - "@babel/runtime" "^7.1.2" + "@babel/runtime" "^7.12.13" "history" "^4.9.0" "hoist-non-react-statics" "^3.1.0" "loose-envify" "^1.3.1" - "mini-create-react-context" "^0.4.0" "path-to-regexp" "^1.7.0" "prop-types" "^15.6.2" "react-is" "^16.6.0" "tiny-invariant" "^1.0.2" "tiny-warning" "^1.0.0" -"react-side-effect@^2.1.0": - "integrity" "sha512-2FoTQzRNTncBVtnzxFOk2mCpcfxQpenBMbk5kSVBg5UcPqV9fRbgY2zhb7GTWWOlpFmAxhClBDlIq8Rsubz1yQ==" - "resolved" "https://registry.npmjs.org/react-side-effect/-/react-side-effect-2.1.1.tgz" - "version" "2.1.1" - "react-textarea-autosize@^8.3.2": - "integrity" "sha512-JrMWVgQSaExQByP3ggI1eA8zF4mF0+ddVuX7acUeK2V7bmrpjVOY72vmLz2IXFJSAXoY3D80nEzrn0GWajWK3Q==" - "resolved" "https://registry.npmjs.org/react-textarea-autosize/-/react-textarea-autosize-8.3.2.tgz" - "version" "8.3.2" + "integrity" "sha512-YrTFaEHLgJsi8sJVYHBzYn+mkP3prGkmP2DKb/tm0t7CLJY5t1Rxix8070LAKb0wby7bl/lf2EeHkuMihMZMwQ==" + "resolved" "https://registry.npmjs.org/react-textarea-autosize/-/react-textarea-autosize-8.4.0.tgz" + "version" "8.4.0" dependencies: "@babel/runtime" "^7.10.2" - "use-composed-ref" "^1.0.0" - "use-latest" "^1.0.0" + "use-composed-ref" "^1.3.0" + "use-latest" "^1.2.1" -"react@*", "react@^0.14.0 || ^15.0.0 || ^16.0.0 || ^17.0.0", "react@^15.0.2 || ^16.0.0 || ^17.0.0", "react@^16.13.1 || ^17.0.0", "react@^16.14.0", "react@^16.3.0 || ^17.0.0", "react@^16.8.0 || ^17.0.0", "react@^16.8.4", "react@^16.8.4 || ^17.0.0", "react@^17.0.0 || ^16.3.0 || ^15.5.4", "react@>= 16.8.0 < 18.0.0", "react@>=0.14.9", "react@>=15", "react@>=16.3.0": +"react@*", "react@^15.0.2 || ^16.0.0 || ^17.0.0", "react@^16.13.1 || ^17.0.0", "react@^16.14.0", "react@^16.6.0 || ^17.0.0 || ^18.0.0", "react@^16.8.0 || ^17.0.0 || ^18.0.0", "react@^16.8.4", "react@^16.8.4 || ^17.0.0", "react@^17.0.0 || ^16.3.0 || ^15.5.4", "react@>= 16.8.0 < 19.0.0", "react@>=0.14.9", "react@>=15": "integrity" "sha512-0X2CImDkJGApiAlcf0ODKIneSwBPhqJawOa5wCtKbu7ZECrmS26NvtSILynQ66cgkT/RJ4LidJOc3bUESwmU8g==" "resolved" "https://registry.npmjs.org/react/-/react-16.14.0.tgz" "version" "16.14.0" @@ -7479,20 +6811,7 @@ "string_decoder" "~1.1.1" "util-deprecate" "~1.0.1" -"readable-stream@^2.0.2": - "integrity" "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==" - "resolved" "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz" - "version" "2.3.7" - dependencies: - "core-util-is" "~1.0.0" - "inherits" "~2.0.3" - "isarray" "~1.0.0" - "process-nextick-args" "~2.0.0" - "safe-buffer" "~5.1.1" - "string_decoder" "~1.1.1" - "util-deprecate" "~1.0.1" - -"readable-stream@^3.0.6", "readable-stream@^3.1.1": +"readable-stream@^3.0.6": "integrity" "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==" "resolved" "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz" "version" "3.6.0" @@ -7501,104 +6820,88 @@ "string_decoder" "^1.1.1" "util-deprecate" "^1.0.1" -"readdirp@^2.2.1": - "integrity" "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==" - "resolved" "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz" - "version" "2.2.1" - dependencies: - "graceful-fs" "^4.1.11" - "micromatch" "^3.1.10" - "readable-stream" "^2.0.2" - -"readdirp@~3.5.0": - "integrity" "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==" - "resolved" "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz" - "version" "3.5.0" +"readdirp@~3.6.0": + "integrity" "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==" + "resolved" "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz" + "version" "3.6.0" dependencies: "picomatch" "^2.2.1" -"reading-time@^1.3.0": - "integrity" "sha512-RJ8J5O6UvrclfZpcPSPuKusrdRfoY7uXXoYOOdeswZNtSkQaewT3919yz6RyloDBR+iwcUyz5zGOUjhgvfuv3g==" - "resolved" "https://registry.npmjs.org/reading-time/-/reading-time-1.3.0.tgz" - "version" "1.3.0" +"reading-time@^1.5.0": + "integrity" "sha512-onYyVhBNr4CmAxFsKS7bz+uTLRakypIe4R+5A824vBSkQy/hB3fZepoVEf8OVAxzLvK+H/jm9TzpI3ETSm64Kg==" + "resolved" "https://registry.npmjs.org/reading-time/-/reading-time-1.5.0.tgz" + "version" "1.5.0" "rechoir@^0.6.2": - "integrity" "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=" + "integrity" "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==" "resolved" "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz" "version" "0.6.2" dependencies: "resolve" "^1.1.6" -"recursive-readdir@2.2.2": - "integrity" "sha512-nRCcW9Sj7NuZwa2XvH9co8NPeXUBhZP7CRKJtU+cS6PW9FpCIFoI5ib0NT1ZrbNuPoRy0ylyCaUL8Gih4LSyFg==" - "resolved" "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.2.tgz" - "version" "2.2.2" +"recursive-readdir@^2.2.2": + "integrity" "sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA==" + "resolved" "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.3.tgz" + "version" "2.2.3" dependencies: - "minimatch" "3.0.4" + "minimatch" "^3.0.5" -"regenerate-unicode-properties@^8.2.0": - "integrity" "sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA==" - "resolved" "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz" - "version" "8.2.0" +"regenerate-unicode-properties@^10.1.0": + "integrity" "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==" + "resolved" "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz" + "version" "10.1.0" dependencies: - "regenerate" "^1.4.0" + "regenerate" "^1.4.2" -"regenerate@^1.4.0": +"regenerate@^1.4.2": "integrity" "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==" "resolved" "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz" "version" "1.4.2" "regenerator-runtime@^0.13.4": - "integrity" "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==" - "resolved" "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz" - "version" "0.13.7" + "integrity" "sha512-KepLsg4dU12hryUO7bp/axHAKvwGOCV0sGloQtpagJ12ai+ojVDqkeGSiRX1zlq+kjIMZ1t7gpze+26QqtdGqw==" + "resolved" "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.10.tgz" + "version" "0.13.10" -"regenerator-transform@^0.14.2": - "integrity" "sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==" - "resolved" "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz" - "version" "0.14.5" +"regenerator-transform@^0.15.0": + "integrity" "sha512-LsrGtPmbYg19bcPHwdtmXwbW+TqNvtY4riE3P83foeHRroMbH6/2ddFBfab3t7kbzc7v7p4wbkIecHImqt0QNg==" + "resolved" "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.0.tgz" + "version" "0.15.0" dependencies: "@babel/runtime" "^7.8.4" -"regex-not@^1.0.0", "regex-not@^1.0.2": - "integrity" "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==" - "resolved" "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz" - "version" "1.0.2" - dependencies: - "extend-shallow" "^3.0.2" - "safe-regex" "^1.1.0" - -"regexp.prototype.flags@^1.2.0", "regexp.prototype.flags@^1.3.1": - "integrity" "sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA==" - "resolved" "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz" - "version" "1.3.1" +"regexp.prototype.flags@^1.4.1", "regexp.prototype.flags@^1.4.3": + "integrity" "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==" + "resolved" "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz" + "version" "1.4.3" dependencies: "call-bind" "^1.0.2" "define-properties" "^1.1.3" + "functions-have-names" "^1.2.2" "regexpp@^3.1.0": - "integrity" "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==" - "resolved" "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz" - "version" "3.1.0" + "integrity" "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==" + "resolved" "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz" + "version" "3.2.0" -"regexpu-core@^4.7.1": - "integrity" "sha512-ywH2VUraA44DZQuRKzARmw6S66mr48pQVva4LBeRhcOltJ6hExvWly5ZjFLYo67xbIxb6W1q4bAGtgfEl20zfQ==" - "resolved" "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.1.tgz" - "version" "4.7.1" +"regexpu-core@^5.1.0": + "integrity" "sha512-HrnlNtpvqP1Xkb28tMhBUO2EbyUHdQlsnlAhzWcwHy8WJR53UWr7/MAvqrsQKMbV4qdpv03oTMG8iIhfsPFktQ==" + "resolved" "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.2.1.tgz" + "version" "5.2.1" dependencies: - "regenerate" "^1.4.0" - "regenerate-unicode-properties" "^8.2.0" - "regjsgen" "^0.5.1" - "regjsparser" "^0.6.4" - "unicode-match-property-ecmascript" "^1.0.4" - "unicode-match-property-value-ecmascript" "^1.2.0" + "regenerate" "^1.4.2" + "regenerate-unicode-properties" "^10.1.0" + "regjsgen" "^0.7.1" + "regjsparser" "^0.9.1" + "unicode-match-property-ecmascript" "^2.0.0" + "unicode-match-property-value-ecmascript" "^2.0.0" "registry-auth-token@^4.0.0": - "integrity" "sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw==" - "resolved" "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.1.tgz" - "version" "4.2.1" + "integrity" "sha512-PC5ZysNb42zpFME6D/XlIgtNGdTl8bBOCw90xQLVMpzuuubJKYDWFAEuUNc+Cn8Z8724tg2SDhDRrkVEsqfDMg==" + "resolved" "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.2.tgz" + "version" "4.2.2" dependencies: - "rc" "^1.2.8" + "rc" "1.2.8" "registry-url@^5.0.0": "integrity" "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==" @@ -7607,15 +6910,15 @@ dependencies: "rc" "^1.2.8" -"regjsgen@^0.5.1": - "integrity" "sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==" - "resolved" "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.2.tgz" - "version" "0.5.2" +"regjsgen@^0.7.1": + "integrity" "sha512-RAt+8H2ZEzHeYWxZ3H2z6tF18zyyOnlcdaafLrm21Bguj7uZy6ULibiAFdXEtKQY4Sy7wDTwDiOazasMLc4KPA==" + "resolved" "https://registry.npmjs.org/regjsgen/-/regjsgen-0.7.1.tgz" + "version" "0.7.1" -"regjsparser@^0.6.4": - "integrity" "sha512-ZqbNRz1SNjLAiYuwY0zoXW8Ne675IX5q+YHioAGbCw4X96Mjl2+dcX9B2ciaeyYjViDAfvIjFpQjJgLttTEERQ==" - "resolved" "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.9.tgz" - "version" "0.6.9" +"regjsparser@^0.9.1": + "integrity" "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==" + "resolved" "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz" + "version" "0.9.1" dependencies: "jsesc" "~0.5.0" @@ -7631,15 +6934,6 @@ "unified" "^9.0.0" "unist-util-visit" "^2.0.0" -"rehype-parse@^6.0.2": - "integrity" "sha512-0S3CpvpTAgGmnz8kiCyFLGuW5yA4OQhyNTm/nwPopZ7+PI11WnGl1TTWTGv/2hPEe/g2jRLlhVVSsoDH8waRug==" - "resolved" "https://registry.npmjs.org/rehype-parse/-/rehype-parse-6.0.2.tgz" - "version" "6.0.2" - dependencies: - "hast-util-from-parse5" "^5.0.0" - "parse5" "^5.0.0" - "xtend" "^4.0.0" - "rehype-parse@^7.0.0": "integrity" "sha512-fOiR9a9xH+Le19i4fGzIEowAbwG7idy2Jzs4mOrFWBSJ0sNUgy0ev871dwWnbOo371SjgjG4pwzrbgSVrKxecw==" "resolved" "https://registry.npmjs.org/rehype-parse/-/rehype-parse-7.0.1.tgz" @@ -7649,20 +6943,11 @@ "parse5" "^6.0.0" "relateurl@^0.2.7": - "integrity" "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=" + "integrity" "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==" "resolved" "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz" "version" "0.2.7" -"remark-admonitions@^1.2.1": - "integrity" "sha512-Ji6p68VDvD+H1oS95Fdx9Ar5WA2wcDA4kwrrhVU7fGctC6+d3uiMICu7w7/2Xld+lnU7/gi+432+rRbup5S8ow==" - "resolved" "https://registry.npmjs.org/remark-admonitions/-/remark-admonitions-1.2.1.tgz" - "version" "1.2.1" - dependencies: - "rehype-parse" "^6.0.2" - "unified" "^8.4.2" - "unist-util-visit" "^2.0.1" - -"remark-emoji@^2.1.0": +"remark-emoji@^2.2.0": "integrity" "sha512-P3cj9s5ggsUvWw5fS2uzCHJMGuXYRb0NnZqYlNecewXt8QBU9n5vW3DUUKOhepS8F9CwdMx9B8a3i7pqFWAI5w==" "resolved" "https://registry.npmjs.org/remark-emoji/-/remark-emoji-2.2.0.tgz" "version" "2.2.0" @@ -7724,69 +7009,37 @@ dependencies: "mdast-squeeze-paragraphs" "^4.0.0" -"remove-trailing-separator@^1.0.1": - "integrity" "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=" - "resolved" "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz" - "version" "1.1.0" - -"renderkid@^2.0.4": - "integrity" "sha512-ccqoLg+HLOHq1vdfYNm4TBeaCDIi1FLt3wGojTDSvdewUv65oTmI3cnT2E4hRjl1gzKZIPK+KZrXzlUYKnR+vQ==" - "resolved" "https://registry.npmjs.org/renderkid/-/renderkid-2.0.5.tgz" - "version" "2.0.5" +"renderkid@^3.0.0": + "integrity" "sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==" + "resolved" "https://registry.npmjs.org/renderkid/-/renderkid-3.0.0.tgz" + "version" "3.0.0" dependencies: - "css-select" "^2.0.2" - "dom-converter" "^0.2" - "htmlparser2" "^3.10.1" - "lodash" "^4.17.20" - "strip-ansi" "^3.0.0" - -"repeat-element@^1.1.2": - "integrity" "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==" - "resolved" "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz" - "version" "1.1.4" + "css-select" "^4.1.3" + "dom-converter" "^0.2.0" + "htmlparser2" "^6.1.0" + "lodash" "^4.17.21" + "strip-ansi" "^6.0.1" -"repeat-string@^1.0.0", "repeat-string@^1.5.4", "repeat-string@^1.6.1": - "integrity" "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" +"repeat-string@^1.0.0", "repeat-string@^1.5.4": + "integrity" "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==" "resolved" "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz" "version" "1.6.1" -"require-directory@^2.1.1": - "integrity" "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" - "resolved" "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz" - "version" "2.1.1" - "require-from-string@^2.0.2": "integrity" "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==" "resolved" "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz" "version" "2.0.2" "require-like@>= 0.1.1": - "integrity" "sha1-rW8wwTvs15cBDEaK+ndcDAprR/o=" + "integrity" "sha512-oyrU88skkMtDdauHDuKVrgR+zuItqr6/c//FXzvmxRGMexSDc6hNvJInGW3LL46n+8b50RykrvwSUIIQH2LQ5A==" "resolved" "https://registry.npmjs.org/require-like/-/require-like-0.1.2.tgz" "version" "0.1.2" -"require-main-filename@^2.0.0": - "integrity" "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" - "resolved" "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz" - "version" "2.0.0" - "requires-port@^1.0.0": - "integrity" "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=" + "integrity" "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==" "resolved" "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz" "version" "1.0.0" -"resolve-cwd@^2.0.0": - "integrity" "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=" - "resolved" "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz" - "version" "2.0.0" - dependencies: - "resolve-from" "^3.0.0" - -"resolve-from@^3.0.0": - "integrity" "sha1-six699nWiBvItuZTM17rywoYh0g=" - "resolved" "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz" - "version" "3.0.0" - "resolve-from@^4.0.0": "integrity" "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==" "resolved" "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz" @@ -7797,66 +7050,41 @@ "resolved" "https://registry.npmjs.org/resolve-pathname/-/resolve-pathname-3.0.0.tgz" "version" "3.0.0" -"resolve-url@^0.2.1": - "integrity" "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=" - "resolved" "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz" - "version" "0.2.1" - "resolve@^1.1.6", "resolve@^1.12.0", "resolve@^1.14.2", "resolve@^1.3.2": - "integrity" "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==" - "resolved" "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz" - "version" "1.20.0" + "integrity" "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==" + "resolved" "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz" + "version" "1.22.1" dependencies: - "is-core-module" "^2.2.0" - "path-parse" "^1.0.6" + "is-core-module" "^2.9.0" + "path-parse" "^1.0.7" + "supports-preserve-symlinks-flag" "^1.0.0" "resolve@^2.0.0-next.3": - "integrity" "sha512-W8LucSynKUIDu9ylraa7ueVZ7hc0uAgJBxVsQSKOXOyle8a93qXhcz+XAXZ8bIq2d6i4Ehddn6Evt+0/UwKk6Q==" - "resolved" "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.3.tgz" - "version" "2.0.0-next.3" + "integrity" "sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==" + "resolved" "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.4.tgz" + "version" "2.0.0-next.4" dependencies: - "is-core-module" "^2.2.0" - "path-parse" "^1.0.6" + "is-core-module" "^2.9.0" + "path-parse" "^1.0.7" + "supports-preserve-symlinks-flag" "^1.0.0" "responselike@^1.0.2": - "integrity" "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=" + "integrity" "sha512-/Fpe5guzJk1gPqdJLJR5u7eG/gNY4nImjbRDaVWVMRhne55TCmj2i9Q+54PBRfatRC8v/rIiv9BN0pMd9OV5EQ==" "resolved" "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz" "version" "1.0.2" dependencies: "lowercase-keys" "^1.0.0" -"ret@~0.1.10": - "integrity" "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==" - "resolved" "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz" - "version" "0.1.15" - -"retry@^0.12.0": - "integrity" "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=" - "resolved" "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz" - "version" "0.12.0" +"retry@^0.13.1": + "integrity" "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==" + "resolved" "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz" + "version" "0.13.1" "reusify@^1.0.4": "integrity" "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==" "resolved" "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz" "version" "1.0.4" -"rgb-regex@^1.0.1": - "integrity" "sha1-wODWiC3w4jviVKR16O3UGRX+rrE=" - "resolved" "https://registry.npmjs.org/rgb-regex/-/rgb-regex-1.0.1.tgz" - "version" "1.0.1" - -"rgba-regex@^1.0.0": - "integrity" "sha1-QzdOLiyglosO8VI0YLfXMP8i7rM=" - "resolved" "https://registry.npmjs.org/rgba-regex/-/rgba-regex-1.0.0.tgz" - "version" "1.0.0" - -"rimraf@^2.6.3": - "integrity" "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==" - "resolved" "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz" - "version" "2.7.1" - dependencies: - "glob" "^7.1.3" - "rimraf@^3.0.2": "integrity" "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==" "resolved" "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz" @@ -7864,20 +7092,19 @@ dependencies: "glob" "^7.1.3" -"rtl-detect@^1.0.2": - "integrity" "sha512-2sMcZO60tL9YDEFe24gqddg3hJ+xSmJFN8IExcQUxeHxQzydQrN6GHPL+yAWgzItXSI7es53hcZC9pJneuZDKA==" - "resolved" "https://registry.npmjs.org/rtl-detect/-/rtl-detect-1.0.3.tgz" - "version" "1.0.3" +"rtl-detect@^1.0.4": + "integrity" "sha512-EBR4I2VDSSYr7PkBmFy04uhycIpDKp+21p/jARYXlCSjQksTBQcJ0HFUPOO79EPPH5JS6VAhiIQbycf0O3JAxQ==" + "resolved" "https://registry.npmjs.org/rtl-detect/-/rtl-detect-1.0.4.tgz" + "version" "1.0.4" -"rtlcss@^3.1.2": - "integrity" "sha512-b04YSX37siupPOWUEguEBReWX2w4QT89C0PI9g2JzZycbq7zrgPmTr1DA1pizSWpKRFdCjjnrx/SSvU4fOHmGg==" - "resolved" "https://registry.npmjs.org/rtlcss/-/rtlcss-3.1.2.tgz" - "version" "3.1.2" +"rtlcss@^3.5.0": + "integrity" "sha512-wzgMaMFHQTnyi9YOwsx9LjOxYXJPzS8sYnFaKm6R5ysvTkwzHiB0vxnbHwchHQT65PTdBjDG21/kQBWI7q9O7A==" + "resolved" "https://registry.npmjs.org/rtlcss/-/rtlcss-3.5.0.tgz" + "version" "3.5.0" dependencies: - "chalk" "^4.1.0" "find-up" "^5.0.0" - "mkdirp" "^1.0.4" - "postcss" "^8.2.4" + "picocolors" "^1.0.0" + "postcss" "^8.3.11" "strip-json-comments" "^3.1.1" "run-parallel@^1.1.9": @@ -7887,36 +7114,43 @@ dependencies: "queue-microtask" "^1.2.2" -"rxjs@^6.6.3": - "integrity" "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==" - "resolved" "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz" - "version" "6.6.7" +"rxjs@^7.5.4": + "integrity" "sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg==" + "resolved" "https://registry.npmjs.org/rxjs/-/rxjs-7.8.0.tgz" + "version" "7.8.0" dependencies: - "tslib" "^1.9.0" + "tslib" "^2.1.0" + +"safe-buffer@^5.1.0", "safe-buffer@^5.1.2", "safe-buffer@^5.2.1", "safe-buffer@>=5.1.0", "safe-buffer@~5.2.0", "safe-buffer@5.2.1": + "integrity" "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + "resolved" "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" + "version" "5.2.1" -"safe-buffer@^5.0.1", "safe-buffer@^5.1.0", "safe-buffer@>=5.1.0", "safe-buffer@~5.1.0", "safe-buffer@~5.1.1", "safe-buffer@5.1.2": +"safe-buffer@~5.1.0", "safe-buffer@~5.1.1": "integrity" "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" "resolved" "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" "version" "5.1.2" -"safe-buffer@~5.2.0": - "integrity" "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" - "resolved" "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" - "version" "5.2.1" +"safe-buffer@5.1.2": + "integrity" "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + "resolved" "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" + "version" "5.1.2" -"safe-regex@^1.1.0": - "integrity" "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=" - "resolved" "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz" - "version" "1.1.0" +"safe-regex-test@^1.0.0": + "integrity" "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==" + "resolved" "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz" + "version" "1.0.0" dependencies: - "ret" "~0.1.10" + "call-bind" "^1.0.2" + "get-intrinsic" "^1.1.3" + "is-regex" "^1.1.4" "safer-buffer@>= 2.1.2 < 3": "integrity" "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" "resolved" "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz" "version" "2.1.2" -"sax@^1.2.4", "sax@~1.2.4": +"sax@^1.2.4": "integrity" "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" "resolved" "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz" "version" "1.2.4" @@ -7929,15 +7163,6 @@ "loose-envify" "^1.1.0" "object-assign" "^4.1.1" -"schema-utils@^1.0.0": - "integrity" "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==" - "resolved" "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz" - "version" "1.0.0" - dependencies: - "ajv" "^6.1.0" - "ajv-errors" "^1.0.0" - "ajv-keywords" "^3.1.0" - "schema-utils@^2.6.5": "integrity" "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==" "resolved" "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz" @@ -7948,14 +7173,51 @@ "ajv-keywords" "^3.5.2" "schema-utils@^3.0.0": - "integrity" "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==" - "resolved" "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz" - "version" "3.0.0" + "integrity" "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==" + "resolved" "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz" + "version" "3.1.1" + dependencies: + "@types/json-schema" "^7.0.8" + "ajv" "^6.12.5" + "ajv-keywords" "^3.5.2" + +"schema-utils@^3.1.0": + "integrity" "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==" + "resolved" "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz" + "version" "3.1.1" + dependencies: + "@types/json-schema" "^7.0.8" + "ajv" "^6.12.5" + "ajv-keywords" "^3.5.2" + +"schema-utils@^3.1.1": + "integrity" "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==" + "resolved" "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz" + "version" "3.1.1" dependencies: - "@types/json-schema" "^7.0.6" + "@types/json-schema" "^7.0.8" "ajv" "^6.12.5" "ajv-keywords" "^3.5.2" +"schema-utils@^4.0.0": + "integrity" "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==" + "resolved" "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz" + "version" "4.0.0" + dependencies: + "@types/json-schema" "^7.0.9" + "ajv" "^8.8.0" + "ajv-formats" "^2.1.1" + "ajv-keywords" "^5.0.0" + +"schema-utils@2.7.0": + "integrity" "sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==" + "resolved" "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz" + "version" "2.7.0" + dependencies: + "@types/json-schema" "^7.0.4" + "ajv" "^6.12.2" + "ajv-keywords" "^3.4.1" + "section-matter@^1.0.0": "integrity" "sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==" "resolved" "https://registry.npmjs.org/section-matter/-/section-matter-1.0.0.tgz" @@ -7965,21 +7227,16 @@ "kind-of" "^6.0.0" "select-hose@^2.0.0": - "integrity" "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=" + "integrity" "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==" "resolved" "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz" "version" "2.0.0" -"select@^1.1.2": - "integrity" "sha1-DnNQrN7ICxEIUoeG7B1EGNEbOW0=" - "resolved" "https://registry.npmjs.org/select/-/select-1.1.2.tgz" - "version" "1.1.2" - -"selfsigned@^1.10.8": - "integrity" "sha512-aVmbPOfViZqOZPgRBT0+3u4yZFHpmnIghLMlAcb5/xhp5ZtB/RVnKhz5vl2M32CLXAqR4kha9zfhNg0Lf/sxKA==" - "resolved" "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.11.tgz" - "version" "1.10.11" +"selfsigned@^2.1.1": + "integrity" "sha512-GSL3aowiF7wa/WtSFwnUrludWFoNhftq8bUkH9pkzjpN2XSPOAYEgg6e0sS9s0rZwgJzJiQRPU18A6clnoW5wQ==" + "resolved" "https://registry.npmjs.org/selfsigned/-/selfsigned-2.1.1.tgz" + "version" "2.1.1" dependencies: - "node-forge" "^0.10.0" + "node-forge" "^1" "semver-diff@^3.1.1": "integrity" "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==" @@ -7993,16 +7250,6 @@ "resolved" "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz" "version" "5.7.1" -"semver@^5.5.0": - "integrity" "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - "resolved" "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz" - "version" "5.7.1" - -"semver@^5.6.0": - "integrity" "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - "resolved" "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz" - "version" "5.7.1" - "semver@^6.0.0": "integrity" "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" "resolved" "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz" @@ -8028,41 +7275,36 @@ "resolved" "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz" "version" "6.3.0" -"semver@^7.2.1", "semver@^7.3.4", "semver@^7.3.5": - "integrity" "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==" - "resolved" "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz" - "version" "7.3.5" +"semver@^7.2.1", "semver@^7.3.2", "semver@^7.3.4", "semver@^7.3.7", "semver@^7.3.8": + "integrity" "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==" + "resolved" "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz" + "version" "7.3.8" dependencies: "lru-cache" "^6.0.0" -"semver@7.0.0": - "integrity" "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==" - "resolved" "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz" - "version" "7.0.0" - -"send@0.17.1": - "integrity" "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==" - "resolved" "https://registry.npmjs.org/send/-/send-0.17.1.tgz" - "version" "0.17.1" +"send@0.18.0": + "integrity" "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==" + "resolved" "https://registry.npmjs.org/send/-/send-0.18.0.tgz" + "version" "0.18.0" dependencies: "debug" "2.6.9" - "depd" "~1.1.2" - "destroy" "~1.0.4" + "depd" "2.0.0" + "destroy" "1.2.0" "encodeurl" "~1.0.2" "escape-html" "~1.0.3" "etag" "~1.8.1" "fresh" "0.5.2" - "http-errors" "~1.7.2" + "http-errors" "2.0.0" "mime" "1.6.0" - "ms" "2.1.1" - "on-finished" "~2.3.0" + "ms" "2.1.3" + "on-finished" "2.4.1" "range-parser" "~1.2.1" - "statuses" "~1.5.0" + "statuses" "2.0.1" -"serialize-javascript@^5.0.1": - "integrity" "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==" - "resolved" "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz" - "version" "5.0.1" +"serialize-javascript@^6.0.0": + "integrity" "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==" + "resolved" "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz" + "version" "6.0.0" dependencies: "randombytes" "^2.1.0" @@ -8081,7 +7323,7 @@ "range-parser" "1.2.0" "serve-index@^1.9.1": - "integrity" "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=" + "integrity" "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==" "resolved" "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz" "version" "1.9.1" dependencies: @@ -8093,33 +7335,18 @@ "mime-types" "~2.1.17" "parseurl" "~1.3.2" -"serve-static@1.14.1": - "integrity" "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==" - "resolved" "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz" - "version" "1.14.1" +"serve-static@1.15.0": + "integrity" "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==" + "resolved" "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz" + "version" "1.15.0" dependencies: "encodeurl" "~1.0.2" "escape-html" "~1.0.3" "parseurl" "~1.3.3" - "send" "0.17.1" - -"set-blocking@^2.0.0": - "integrity" "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" - "resolved" "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz" - "version" "2.0.0" - -"set-value@^2.0.0", "set-value@^2.0.1": - "integrity" "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==" - "resolved" "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz" - "version" "2.0.1" - dependencies: - "extend-shallow" "^2.0.1" - "is-extendable" "^0.1.1" - "is-plain-object" "^2.0.3" - "split-string" "^3.0.1" + "send" "0.18.0" "setimmediate@^1.0.5": - "integrity" "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" + "integrity" "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==" "resolved" "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz" "version" "1.0.5" @@ -8128,10 +7355,10 @@ "resolved" "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz" "version" "1.1.0" -"setprototypeof@1.1.1": - "integrity" "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" - "resolved" "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz" - "version" "1.1.1" +"setprototypeof@1.2.0": + "integrity" "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + "resolved" "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz" + "version" "1.2.0" "shallow-clone@^3.0.0": "integrity" "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==" @@ -8140,12 +7367,10 @@ dependencies: "kind-of" "^6.0.2" -"shebang-command@^1.2.0": - "integrity" "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=" - "resolved" "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz" - "version" "1.2.0" - dependencies: - "shebang-regex" "^1.0.0" +"shallowequal@^1.1.0": + "integrity" "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==" + "resolved" "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz" + "version" "1.1.0" "shebang-command@^2.0.0": "integrity" "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==" @@ -8154,25 +7379,20 @@ dependencies: "shebang-regex" "^3.0.0" -"shebang-regex@^1.0.0": - "integrity" "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=" - "resolved" "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz" - "version" "1.0.0" - "shebang-regex@^3.0.0": "integrity" "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" "resolved" "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz" "version" "3.0.0" -"shell-quote@1.7.2": - "integrity" "sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg==" - "resolved" "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.2.tgz" - "version" "1.7.2" +"shell-quote@^1.7.3": + "integrity" "sha512-8o/QEhSSRb1a5i7TFR0iM4G16Z0vYB2OQVs4G3aAFXjn3T6yEx8AZxy1PgDF7I00LZHYA3WxaSYIf5e5sAX8Rw==" + "resolved" "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.4.tgz" + "version" "1.7.4" -"shelljs@^0.8.4": - "integrity" "sha512-7gk3UZ9kOfPLIAbslLzyWeGiEqx9e3rxwZM0KE6EL8GlGwjym9Mrlx5/p33bWTu9YG6vcS4MBxYZDHYr5lr8BQ==" - "resolved" "https://registry.npmjs.org/shelljs/-/shelljs-0.8.4.tgz" - "version" "0.8.4" +"shelljs@^0.8.4", "shelljs@^0.8.5": + "integrity" "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==" + "resolved" "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz" + "version" "0.8.5" dependencies: "glob" "^7.0.0" "interpret" "^1.0.0" @@ -8187,25 +7407,18 @@ "get-intrinsic" "^1.0.2" "object-inspect" "^1.9.0" -"signal-exit@^3.0.0", "signal-exit@^3.0.2", "signal-exit@^3.0.3": - "integrity" "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==" - "resolved" "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz" - "version" "3.0.3" - -"simple-swizzle@^0.2.2": - "integrity" "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=" - "resolved" "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz" - "version" "0.2.2" - dependencies: - "is-arrayish" "^0.3.1" +"signal-exit@^3.0.2", "signal-exit@^3.0.3": + "integrity" "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" + "resolved" "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz" + "version" "3.0.7" "sirv@^1.0.7": - "integrity" "sha512-SR36i3/LSWja7AJNRBz4fF/Xjpn7lQFI30tZ434dIy+bitLYSP+ZEenHg36i23V2SGEz+kqjksg0uOGZ5LPiqg==" - "resolved" "https://registry.npmjs.org/sirv/-/sirv-1.0.11.tgz" - "version" "1.0.11" + "integrity" "sha512-JuLThK3TnZG1TAKDwNIqNq6QA2afLOCcm+iE8D1Kj3GA40pSPsxQjjJl0J8X3tsR7T+CP1GavpzLwYkgVLWrZQ==" + "resolved" "https://registry.npmjs.org/sirv/-/sirv-1.0.19.tgz" + "version" "1.0.19" dependencies: - "@polka/url" "^1.0.0-next.9" - "mime" "^2.3.1" + "@polka/url" "^1.0.0-next.20" + "mrmime" "^1.0.0" "totalist" "^1.0.0" "sisteransi@^1.0.5": @@ -8213,12 +7426,12 @@ "resolved" "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz" "version" "1.0.5" -"sitemap@^6.3.6": - "integrity" "sha512-DoPKNc2/apQZTUnfiOONWctwq7s6dZVspxAZe2VPMNtoqNq7HgXRvlRnbIpKjf+8+piQdWncwcy+YhhTGY5USQ==" - "resolved" "https://registry.npmjs.org/sitemap/-/sitemap-6.4.0.tgz" - "version" "6.4.0" +"sitemap@^7.1.1": + "integrity" "sha512-mK3aFtjz4VdJN0igpIJrinf3EO8U8mxOPsTBzSsy06UtjZQJ3YY3o3Xa7zSc5nMqcMrRwlChHZ18Kxg0caiPBg==" + "resolved" "https://registry.npmjs.org/sitemap/-/sitemap-7.1.1.tgz" + "version" "7.1.1" dependencies: - "@types/node" "^14.14.28" + "@types/node" "^17.0.5" "@types/sax" "^1.2.1" "arg" "^5.0.0" "sax" "^1.2.4" @@ -8228,6 +7441,11 @@ "resolved" "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz" "version" "3.0.0" +"slash@^4.0.0": + "integrity" "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==" + "resolved" "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz" + "version" "4.0.0" + "slice-ansi@^4.0.0": "integrity" "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==" "resolved" "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz" @@ -8237,121 +7455,43 @@ "astral-regex" "^2.0.0" "is-fullwidth-code-point" "^3.0.0" -"snapdragon-node@^2.0.1": - "integrity" "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==" - "resolved" "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz" - "version" "2.1.1" - dependencies: - "define-property" "^1.0.0" - "isobject" "^3.0.0" - "snapdragon-util" "^3.0.1" - -"snapdragon-util@^3.0.1": - "integrity" "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==" - "resolved" "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz" - "version" "3.0.1" - dependencies: - "kind-of" "^3.2.0" - -"snapdragon@^0.8.1": - "integrity" "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==" - "resolved" "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz" - "version" "0.8.2" - dependencies: - "base" "^0.11.1" - "debug" "^2.2.0" - "define-property" "^0.2.5" - "extend-shallow" "^2.0.1" - "map-cache" "^0.2.2" - "source-map" "^0.5.6" - "source-map-resolve" "^0.5.0" - "use" "^3.1.0" - -"sockjs-client@^1.5.0": - "integrity" "sha512-VnVAb663fosipI/m6pqRXakEOw7nvd7TUgdr3PlR/8V2I95QIdwT8L4nMxhyU8SmDBHYXU1TOElaKOmKLfYzeQ==" - "resolved" "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.5.1.tgz" - "version" "1.5.1" - dependencies: - "debug" "^3.2.6" - "eventsource" "^1.0.7" - "faye-websocket" "^0.11.3" - "inherits" "^2.0.4" - "json3" "^3.3.3" - "url-parse" "^1.5.1" - -"sockjs@^0.3.21": - "integrity" "sha512-DhbPFGpxjc6Z3I+uX07Id5ZO2XwYsWOrYjaSeieES78cq+JaJvVe5q/m1uvjIQhXinhIeCFRH6JgXe+mvVMyXw==" - "resolved" "https://registry.npmjs.org/sockjs/-/sockjs-0.3.21.tgz" - "version" "0.3.21" +"sockjs@^0.3.24": + "integrity" "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==" + "resolved" "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz" + "version" "0.3.24" dependencies: "faye-websocket" "^0.11.3" - "uuid" "^3.4.0" + "uuid" "^8.3.2" "websocket-driver" "^0.7.4" -"sort-css-media-queries@1.5.4": - "integrity" "sha512-YP5W/h4Sid/YP7Lp87ejJ5jP13/Mtqt2vx33XyhO+IAugKlufRPbOrPlIiEUuxmpNBSBd3EeeQpFhdu3RfI2Ag==" - "resolved" "https://registry.npmjs.org/sort-css-media-queries/-/sort-css-media-queries-1.5.4.tgz" - "version" "1.5.4" - -"source-list-map@^2.0.0", "source-list-map@^2.0.1": - "integrity" "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==" - "resolved" "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz" - "version" "2.0.1" +"sort-css-media-queries@2.1.0": + "integrity" "sha512-IeWvo8NkNiY2vVYdPa27MCQiR0MN0M80johAYFVxWWXQ44KU84WNxjslwBHmc/7ZL2ccwkM7/e6S5aiKZXm7jA==" + "resolved" "https://registry.npmjs.org/sort-css-media-queries/-/sort-css-media-queries-2.1.0.tgz" + "version" "2.1.0" -"source-map-resolve@^0.5.0": - "integrity" "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==" - "resolved" "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz" - "version" "0.5.3" - dependencies: - "atob" "^2.1.2" - "decode-uri-component" "^0.2.0" - "resolve-url" "^0.2.1" - "source-map-url" "^0.4.0" - "urix" "^0.1.0" +"source-map-js@^1.0.2": + "integrity" "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==" + "resolved" "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz" + "version" "1.0.2" -"source-map-support@~0.5.12", "source-map-support@~0.5.19": - "integrity" "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==" - "resolved" "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz" - "version" "0.5.19" +"source-map-support@~0.5.20": + "integrity" "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==" + "resolved" "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz" + "version" "0.5.21" dependencies: "buffer-from" "^1.0.0" "source-map" "^0.6.0" -"source-map-url@^0.4.0": - "integrity" "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==" - "resolved" "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz" - "version" "0.4.1" - -"source-map@^0.5.0", "source-map@^0.5.6": - "integrity" "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" +"source-map@^0.5.0": + "integrity" "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==" "resolved" "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz" "version" "0.5.7" -"source-map@^0.6.0": - "integrity" "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - "resolved" "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" - "version" "0.6.1" - -"source-map@^0.6.1": - "integrity" "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - "resolved" "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" - "version" "0.6.1" - -"source-map@~0.6.0": - "integrity" "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - "resolved" "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" - "version" "0.6.1" - -"source-map@~0.6.1": +"source-map@^0.6.0", "source-map@^0.6.1", "source-map@~0.6.0": "integrity" "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" "resolved" "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" "version" "0.6.1" -"source-map@~0.7.2": - "integrity" "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==" - "resolved" "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz" - "version" "0.7.3" - "space-separated-tokens@^1.0.0": "integrity" "sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==" "resolved" "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz" @@ -8380,15 +7520,8 @@ "select-hose" "^2.0.0" "spdy-transport" "^3.0.0" -"split-string@^3.0.1", "split-string@^3.0.2": - "integrity" "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==" - "resolved" "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz" - "version" "3.1.0" - dependencies: - "extend-shallow" "^3.0.0" - "sprintf-js@~1.0.2": - "integrity" "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" + "integrity" "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" "resolved" "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz" "version" "1.0.3" @@ -8402,25 +7535,20 @@ "resolved" "https://registry.npmjs.org/state-toggle/-/state-toggle-1.0.3.tgz" "version" "1.0.3" -"static-extend@^0.1.1": - "integrity" "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=" - "resolved" "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz" - "version" "0.1.2" - dependencies: - "define-property" "^0.2.5" - "object-copy" "^0.1.0" - -"statuses@>= 1.4.0 < 2", "statuses@>= 1.5.0 < 2", "statuses@~1.5.0": - "integrity" "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" +"statuses@>= 1.4.0 < 2": + "integrity" "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==" "resolved" "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz" "version" "1.5.0" -"std-env@^2.2.1": - "integrity" "sha512-4qT5B45+Kjef2Z6pE0BkskzsH0GO7GrND0wGlTM1ioUe3v0dGYx9ZJH0Aro/YyA8fqQ5EyIKDRjZojJYMFTflw==" - "resolved" "https://registry.npmjs.org/std-env/-/std-env-2.3.0.tgz" - "version" "2.3.0" - dependencies: - "ci-info" "^3.0.0" +"statuses@2.0.1": + "integrity" "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" + "resolved" "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz" + "version" "2.0.1" + +"std-env@^3.0.1": + "integrity" "sha512-cNNS+VYsXIs5gI6gJipO4qZ8YYT274JHvNnQ1/R/x8Q8mdP0qj0zoMchRXmBNPqp/0eOEhX+3g7g6Fgb7meLIQ==" + "resolved" "https://registry.npmjs.org/std-env/-/std-env-3.3.0.tgz" + "version" "3.3.0" "string_decoder@^1.1.1": "integrity" "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==" @@ -8436,52 +7564,55 @@ dependencies: "safe-buffer" "~5.1.0" -"string-width@^3.0.0", "string-width@^3.1.0": - "integrity" "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==" - "resolved" "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz" - "version" "3.1.0" - dependencies: - "emoji-regex" "^7.0.1" - "is-fullwidth-code-point" "^2.0.0" - "strip-ansi" "^5.1.0" - -"string-width@^4.0.0", "string-width@^4.1.0", "string-width@^4.2.0": - "integrity" "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==" - "resolved" "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz" - "version" "4.2.2" +"string-width@^4.0.0", "string-width@^4.1.0", "string-width@^4.2.0", "string-width@^4.2.2", "string-width@^4.2.3": + "integrity" "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==" + "resolved" "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" + "version" "4.2.3" dependencies: "emoji-regex" "^8.0.0" "is-fullwidth-code-point" "^3.0.0" - "strip-ansi" "^6.0.0" + "strip-ansi" "^6.0.1" -"string.prototype.matchall@^4.0.4": - "integrity" "sha512-pknFIWVachNcyqRfaQSeu/FUfpvJTe4uskUSZ9Wc1RijsPuzbZ8TyYT8WCNnntCjUEqQ3vUHMAfVj2+wLAisPQ==" - "resolved" "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.4.tgz" - "version" "4.0.4" +"string-width@^5.0.1": + "integrity" "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==" + "resolved" "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz" + "version" "5.1.2" + dependencies: + "eastasianwidth" "^0.2.0" + "emoji-regex" "^9.2.2" + "strip-ansi" "^7.0.1" + +"string.prototype.matchall@^4.0.7": + "integrity" "sha512-f48okCX7JiwVi1NXCVWcFnZgADDC/n2vePlQ/KUCNqCikLLilQvwjMO8+BHVKvgzH0JB0J9LEPgxOGT02RoETg==" + "resolved" "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.7.tgz" + "version" "4.0.7" dependencies: "call-bind" "^1.0.2" "define-properties" "^1.1.3" - "es-abstract" "^1.18.0-next.2" - "has-symbols" "^1.0.1" + "es-abstract" "^1.19.1" + "get-intrinsic" "^1.1.1" + "has-symbols" "^1.0.3" "internal-slot" "^1.0.3" - "regexp.prototype.flags" "^1.3.1" + "regexp.prototype.flags" "^1.4.1" "side-channel" "^1.0.4" -"string.prototype.trimend@^1.0.4": - "integrity" "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==" - "resolved" "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz" - "version" "1.0.4" +"string.prototype.trimend@^1.0.5": + "integrity" "sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==" + "resolved" "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz" + "version" "1.0.5" dependencies: "call-bind" "^1.0.2" - "define-properties" "^1.1.3" + "define-properties" "^1.1.4" + "es-abstract" "^1.19.5" -"string.prototype.trimstart@^1.0.4": - "integrity" "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==" - "resolved" "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz" - "version" "1.0.4" +"string.prototype.trimstart@^1.0.5": + "integrity" "sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==" + "resolved" "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz" + "version" "1.0.5" dependencies: "call-bind" "^1.0.2" - "define-properties" "^1.1.3" + "define-properties" "^1.1.4" + "es-abstract" "^1.19.5" "stringify-object@^3.3.0": "integrity" "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==" @@ -8492,44 +7623,25 @@ "is-obj" "^1.0.1" "is-regexp" "^1.0.0" -"strip-ansi@^3.0.0": - "integrity" "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=" - "resolved" "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz" - "version" "3.0.1" - dependencies: - "ansi-regex" "^2.0.0" - -"strip-ansi@^3.0.1": - "integrity" "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=" - "resolved" "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz" - "version" "3.0.1" - dependencies: - "ansi-regex" "^2.0.0" - -"strip-ansi@^5.0.0", "strip-ansi@^5.1.0", "strip-ansi@^5.2.0": - "integrity" "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==" - "resolved" "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz" - "version" "5.2.0" +"strip-ansi@^6.0.0", "strip-ansi@^6.0.1": + "integrity" "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==" + "resolved" "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" + "version" "6.0.1" dependencies: - "ansi-regex" "^4.1.0" + "ansi-regex" "^5.0.1" -"strip-ansi@^6.0.0", "strip-ansi@6.0.0": - "integrity" "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==" - "resolved" "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz" - "version" "6.0.0" +"strip-ansi@^7.0.1": + "integrity" "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==" + "resolved" "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz" + "version" "7.0.1" dependencies: - "ansi-regex" "^5.0.0" + "ansi-regex" "^6.0.1" "strip-bom-string@^1.0.0": - "integrity" "sha1-5SEekiQ2n7uB1jOi8ABE3IztrZI=" + "integrity" "sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==" "resolved" "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz" "version" "1.0.0" -"strip-eof@^1.0.0": - "integrity" "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=" - "resolved" "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz" - "version" "1.0.0" - "strip-final-newline@^2.0.0": "integrity" "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==" "resolved" "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz" @@ -8541,7 +7653,7 @@ "version" "3.1.1" "strip-json-comments@~2.0.1": - "integrity" "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" + "integrity" "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==" "resolved" "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz" "version" "2.0.1" @@ -8552,12 +7664,12 @@ dependencies: "inline-style-parser" "0.1.1" -"stylehacks@^5.0.0": - "integrity" "sha512-QOWm6XivDLb+fqffTZP8jrmPmPITVChl2KCY2R05nsCWwLi3VGhCdVc3IVGNwd1zzTt1jPd67zIKjpQfxzQZeA==" - "resolved" "https://registry.npmjs.org/stylehacks/-/stylehacks-5.0.0.tgz" - "version" "5.0.0" +"stylehacks@^5.1.1": + "integrity" "sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw==" + "resolved" "https://registry.npmjs.org/stylehacks/-/stylehacks-5.1.1.tgz" + "version" "5.1.1" dependencies: - "browserslist" "^4.16.0" + "browserslist" "^4.21.4" "postcss-selector-parser" "^6.0.4" "supports-color@^5.3.0": @@ -8567,68 +7679,53 @@ dependencies: "has-flag" "^3.0.0" -"supports-color@^6.1.0": - "integrity" "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==" - "resolved" "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz" - "version" "6.1.0" - dependencies: - "has-flag" "^3.0.0" - -"supports-color@^7.0.0", "supports-color@^7.1.0": +"supports-color@^7.1.0": "integrity" "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==" "resolved" "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz" "version" "7.2.0" dependencies: "has-flag" "^4.0.0" -"svg-parser@^2.0.2": +"supports-color@^8.0.0": + "integrity" "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==" + "resolved" "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz" + "version" "8.1.1" + dependencies: + "has-flag" "^4.0.0" + +"supports-preserve-symlinks-flag@^1.0.0": + "integrity" "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==" + "resolved" "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz" + "version" "1.0.0" + +"svg-parser@^2.0.4": "integrity" "sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==" "resolved" "https://registry.npmjs.org/svg-parser/-/svg-parser-2.0.4.tgz" "version" "2.0.4" -"svgo@^1.2.2": - "integrity" "sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==" - "resolved" "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz" - "version" "1.3.2" - dependencies: - "chalk" "^2.4.1" - "coa" "^2.0.2" - "css-select" "^2.0.0" - "css-select-base-adapter" "^0.1.1" - "css-tree" "1.0.0-alpha.37" - "csso" "^4.0.2" - "js-yaml" "^3.13.1" - "mkdirp" "~0.5.1" - "object.values" "^1.1.0" - "sax" "~1.2.4" - "stable" "^0.1.8" - "unquote" "~1.1.1" - "util.promisify" "~1.0.0" - -"svgo@^2.3.0": - "integrity" "sha512-fz4IKjNO6HDPgIQxu4IxwtubtbSfGEAJUq/IXyTPIkGhWck/faiiwfkvsB8LnBkKLvSoyNNIY6d13lZprJMc9Q==" - "resolved" "https://registry.npmjs.org/svgo/-/svgo-2.3.0.tgz" - "version" "2.3.0" +"svgo@^2.7.0", "svgo@^2.8.0": + "integrity" "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==" + "resolved" "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz" + "version" "2.8.0" dependencies: - "@trysound/sax" "0.1.1" - "chalk" "^4.1.0" - "commander" "^7.1.0" - "css-select" "^3.1.2" - "css-tree" "^1.1.2" + "@trysound/sax" "0.2.0" + "commander" "^7.2.0" + "css-select" "^4.1.3" + "css-tree" "^1.1.3" "csso" "^4.2.0" + "picocolors" "^1.0.0" "stable" "^0.1.8" -"table@^6.0.4": - "integrity" "sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg==" - "resolved" "https://registry.npmjs.org/table/-/table-6.7.1.tgz" - "version" "6.7.1" +"table@^6.0.9": + "integrity" "sha512-s/fitrbVeEyHKFa7mFdkuQMWlH1Wgw/yEXMt5xACT4ZpzWFluehAxRtUUQKPuWhaLAWhFcVx6w3oC8VKaUfPGA==" + "resolved" "https://registry.npmjs.org/table/-/table-6.8.0.tgz" + "version" "6.8.0" dependencies: "ajv" "^8.0.1" - "lodash.clonedeep" "^4.5.0" "lodash.truncate" "^4.4.2" "slice-ansi" "^4.0.0" - "string-width" "^4.2.0" - "strip-ansi" "^6.0.0" + "string-width" "^4.2.3" + "strip-ansi" "^6.0.1" "tapable@^1.0.0": "integrity" "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==" @@ -8636,42 +7733,46 @@ "version" "1.1.3" "tapable@^2.0.0", "tapable@^2.1.1", "tapable@^2.2.0": - "integrity" "sha512-FBk4IesMV1rBxX2tfiK8RAmogtWn53puLOQlvO8XuwlgxcYbP4mVPS9Ph4aeamSyyVjOl24aYWAuc8U5kCVwMw==" - "resolved" "https://registry.npmjs.org/tapable/-/tapable-2.2.0.tgz" - "version" "2.2.0" - -"terser-webpack-plugin@^5.1.1": - "integrity" "sha512-6QhDaAiVHIQr5Ab3XUWZyDmrIPCHMiqJVljMF91YKyqwKkL5QHnYMkrMBy96v9Z7ev1hGhSEw1HQZc2p/s5Z8Q==" - "resolved" "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.1.2.tgz" - "version" "5.1.2" - dependencies: - "jest-worker" "^26.6.2" - "p-limit" "^3.1.0" - "schema-utils" "^3.0.0" - "serialize-javascript" "^5.0.1" - "source-map" "^0.6.1" - "terser" "^5.7.0" - -"terser@^4.6.3": - "integrity" "sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==" - "resolved" "https://registry.npmjs.org/terser/-/terser-4.8.0.tgz" - "version" "4.8.0" - dependencies: - "commander" "^2.20.0" - "source-map" "~0.6.1" - "source-map-support" "~0.5.12" + "integrity" "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==" + "resolved" "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz" + "version" "2.2.1" -"terser@^5.7.0": - "integrity" "sha512-HP5/9hp2UaZt5fYkuhNBR8YyRcT8juw8+uFbAme53iN9hblvKnLUTKkmwJG6ocWpIKf8UK4DoeWG4ty0J6S6/g==" - "resolved" "https://registry.npmjs.org/terser/-/terser-5.7.0.tgz" - "version" "5.7.0" +"tar@^4.4.8": + "integrity" "sha512-a20gEsvHnWe0ygBY8JbxoM4w3SJdhc7ZAuxkLqh+nvNQN2IOt0B5lLgM490X5Hl8FF0dl0tOf2ewFYAlIFgzVA==" + "resolved" "https://registry.npmjs.org/tar/-/tar-4.4.19.tgz" + "version" "4.4.19" dependencies: + "chownr" "^1.1.4" + "fs-minipass" "^1.2.7" + "minipass" "^2.9.0" + "minizlib" "^1.3.3" + "mkdirp" "^0.5.5" + "safe-buffer" "^5.2.1" + "yallist" "^3.1.1" + +"terser-webpack-plugin@^5.1.3", "terser-webpack-plugin@^5.3.3": + "integrity" "sha512-kfLFk+PoLUQIbLmB1+PZDMRSZS99Mp+/MHqDNmMA6tOItzRt+Npe3E+fsMs5mfcM0wCtrrdU387UnV+vnSffXQ==" + "resolved" "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.6.tgz" + "version" "5.3.6" + dependencies: + "@jridgewell/trace-mapping" "^0.3.14" + "jest-worker" "^27.4.5" + "schema-utils" "^3.1.1" + "serialize-javascript" "^6.0.0" + "terser" "^5.14.1" + +"terser@^5.10.0", "terser@^5.14.1": + "integrity" "sha512-xvQfyfA1ayT0qdK47zskQgRZeWLoOQ8JQ6mIgRGVNwZKdQMU+5FkCBjmv4QjcrTzyZquRw2FVtlJSRUmMKQslw==" + "resolved" "https://registry.npmjs.org/terser/-/terser-5.16.1.tgz" + "version" "5.16.1" + dependencies: + "@jridgewell/source-map" "^0.3.2" + "acorn" "^8.5.0" "commander" "^2.20.0" - "source-map" "~0.7.2" - "source-map-support" "~0.5.19" + "source-map-support" "~0.5.20" -"text-table@^0.2.0", "text-table@0.2.0": - "integrity" "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=" +"text-table@^0.2.0": + "integrity" "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==" "resolved" "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz" "version" "0.2.0" @@ -8680,51 +7781,26 @@ "resolved" "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz" "version" "1.1.0" -"timsort@^0.3.0": - "integrity" "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=" - "resolved" "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz" - "version" "0.3.0" - -"tiny-emitter@^2.0.0": - "integrity" "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==" - "resolved" "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.1.0.tgz" - "version" "2.1.0" - "tiny-invariant@^1.0.2": - "integrity" "sha512-ytxQvrb1cPc9WBEI/HSeYYoGD0kWnGEOR8RY6KomWLBVhqz0RgTwVO9dLrGz7dC+nN9llyI7OKAgRq8Vq4ZBSw==" - "resolved" "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.1.0.tgz" - "version" "1.1.0" + "integrity" "sha512-AD5ih2NlSssTCwsMznbvwMZpJ1cbhkGd2uueNxzv2jDlEeZdU04JQfRnggJQ8DrcVBGjAsCKwFBbDlVNtEMlzw==" + "resolved" "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.1.tgz" + "version" "1.3.1" -"tiny-warning@^1.0.0", "tiny-warning@^1.0.3": +"tiny-warning@^1.0.0": "integrity" "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==" "resolved" "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz" "version" "1.0.3" "to-fast-properties@^2.0.0": - "integrity" "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=" + "integrity" "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==" "resolved" "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz" "version" "2.0.0" -"to-object-path@^0.3.0": - "integrity" "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=" - "resolved" "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz" - "version" "0.3.0" - dependencies: - "kind-of" "^3.0.2" - "to-readable-stream@^1.0.0": "integrity" "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==" "resolved" "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz" "version" "1.0.0" -"to-regex-range@^2.1.0": - "integrity" "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=" - "resolved" "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz" - "version" "2.1.1" - dependencies: - "is-number" "^3.0.0" - "repeat-string" "^1.6.1" - "to-regex-range@^5.0.1": "integrity" "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==" "resolved" "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz" @@ -8732,20 +7808,10 @@ dependencies: "is-number" "^7.0.0" -"to-regex@^3.0.1", "to-regex@^3.0.2": - "integrity" "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==" - "resolved" "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz" - "version" "3.0.2" - dependencies: - "define-property" "^2.0.2" - "extend-shallow" "^3.0.2" - "regex-not" "^1.0.2" - "safe-regex" "^1.1.0" - -"toidentifier@1.0.0": - "integrity" "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" - "resolved" "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz" - "version" "1.0.0" +"toidentifier@1.0.1": + "integrity" "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" + "resolved" "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz" + "version" "1.0.1" "totalist@^1.0.0": "integrity" "sha512-gduQwd1rOdDMGxFG1gEvhV88Oirdo2p+KjoYFU7k2g+i7n6AFFbDQ5kMPUsW0pNbfQsB/cwXvT1i4Bue0s9g5g==" @@ -8753,7 +7819,7 @@ "version" "1.1.0" "tr46@~0.0.3": - "integrity" "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=" + "integrity" "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" "resolved" "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz" "version" "0.0.3" @@ -8763,7 +7829,7 @@ "version" "1.1.4" "trim@0.0.1": - "integrity" "sha1-WFhUf2spB1fulczMZm+1AITEYN0=" + "integrity" "sha512-YzQV+TZg4AxpKxaTHK3c3D+kRDCGVEE7LemdlQZoQXn0iennk10RsIoY6ikzAqJTc9Xjl9C1/waHom/J86ziAQ==" "resolved" "https://registry.npmjs.org/trim/-/trim-0.0.1.tgz" "version" "0.0.1" @@ -8772,20 +7838,10 @@ "resolved" "https://registry.npmjs.org/trough/-/trough-1.0.5.tgz" "version" "1.0.5" -"ts-essentials@^2.0.3": - "integrity" "sha512-3IVX4nI6B5cc31/GFFE+i8ey/N2eA0CZDbo6n0yrz0zDX8ZJ8djmU1p+XRz7G3is0F3bB3pu2pAroFdAWQKU3w==" - "resolved" "https://registry.npmjs.org/ts-essentials/-/ts-essentials-2.0.12.tgz" - "version" "2.0.12" - -"tslib@^1.9.0": - "integrity" "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - "resolved" "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz" - "version" "1.14.1" - -"tslib@^2.0.3", "tslib@^2.1.0": - "integrity" "sha512-gS9GVHRU+RGn5KQM2rllAlR3dU6m7AcpJKdtH8gFvQiC4Otgk98XnmMU+nZenHt/+VhnBPWwgrJsyrdcw6i23w==" - "resolved" "https://registry.npmjs.org/tslib/-/tslib-2.2.0.tgz" - "version" "2.2.0" +"tslib@^2.0.3", "tslib@^2.1.0", "tslib@^2.4.0": + "integrity" "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==" + "resolved" "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz" + "version" "2.4.0" "type-check@^0.4.0", "type-check@~0.4.0": "integrity" "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==" @@ -8799,17 +7855,12 @@ "resolved" "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz" "version" "0.20.2" -"type-fest@^0.21.3": - "integrity" "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==" - "resolved" "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz" - "version" "0.21.3" - -"type-fest@^0.8.1": - "integrity" "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==" - "resolved" "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz" - "version" "0.8.1" +"type-fest@^2.5.0": + "integrity" "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==" + "resolved" "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz" + "version" "2.19.0" -"type-is@~1.6.17", "type-is@~1.6.18": +"type-is@~1.6.18": "integrity" "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==" "resolved" "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz" "version" "1.6.18" @@ -8824,19 +7875,24 @@ dependencies: "is-typedarray" "^1.0.0" -"ua-parser-js@^0.7.18": - "integrity" "sha512-6Gurc1n//gjp9eQNXjD9O3M/sMwVtN5S8Lv9bvOYBfKfDNiIIhqiyi01vMBO45u4zkDE420w/e0se7Vs+sIg+g==" - "resolved" "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.28.tgz" - "version" "0.7.28" +"typescript@>= 2.7": + "integrity" "sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg==" + "resolved" "https://registry.npmjs.org/typescript/-/typescript-4.9.4.tgz" + "version" "4.9.4" -"unbox-primitive@^1.0.0": - "integrity" "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==" - "resolved" "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz" - "version" "1.0.1" +"ua-parser-js@^0.7.30": + "integrity" "sha512-f9BESNVhzlhEFf2CHMSj40NWOjYPl1YKYbrvIr/hFTDEmLq7SRbWvm7FcdcpCYT95zrOhC7gZSxjdnnTpBcwVw==" + "resolved" "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.32.tgz" + "version" "0.7.32" + +"unbox-primitive@^1.0.2": + "integrity" "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==" + "resolved" "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz" + "version" "1.0.2" dependencies: - "function-bind" "^1.1.1" - "has-bigints" "^1.0.1" - "has-symbols" "^1.0.2" + "call-bind" "^1.0.2" + "has-bigints" "^1.0.2" + "has-symbols" "^1.0.3" "which-boxed-primitive" "^1.0.2" "unherit@^1.0.4": @@ -8847,44 +7903,45 @@ "inherits" "^2.0.0" "xtend" "^4.0.0" -"unicode-canonical-property-names-ecmascript@^1.0.4": - "integrity" "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==" - "resolved" "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz" - "version" "1.0.4" +"unicode-canonical-property-names-ecmascript@^2.0.0": + "integrity" "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==" + "resolved" "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz" + "version" "2.0.0" -"unicode-match-property-ecmascript@^1.0.4": - "integrity" "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==" - "resolved" "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz" - "version" "1.0.4" +"unicode-match-property-ecmascript@^2.0.0": + "integrity" "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==" + "resolved" "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz" + "version" "2.0.0" dependencies: - "unicode-canonical-property-names-ecmascript" "^1.0.4" - "unicode-property-aliases-ecmascript" "^1.0.4" + "unicode-canonical-property-names-ecmascript" "^2.0.0" + "unicode-property-aliases-ecmascript" "^2.0.0" -"unicode-match-property-value-ecmascript@^1.2.0": - "integrity" "sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ==" - "resolved" "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz" - "version" "1.2.0" +"unicode-match-property-value-ecmascript@^2.0.0": + "integrity" "sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw==" + "resolved" "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz" + "version" "2.0.0" -"unicode-property-aliases-ecmascript@^1.0.4": - "integrity" "sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==" - "resolved" "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz" - "version" "1.1.0" +"unicode-property-aliases-ecmascript@^2.0.0": + "integrity" "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==" + "resolved" "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz" + "version" "2.1.0" -"unified@^8.4.2": - "integrity" "sha512-JCrmN13jI4+h9UAyKEoGcDZV+i1E7BLFuG7OsaDvTXI5P0qhHX+vZO/kOhz9jn8HGENDKbwSeB0nVOg4gVStGA==" - "resolved" "https://registry.npmjs.org/unified/-/unified-8.4.2.tgz" - "version" "8.4.2" +"unified@^9.0.0", "unified@9.2.0": + "integrity" "sha512-vx2Z0vY+a3YoTj8+pttM3tiJHCwY5UFbYdiWrwBEbHmK8pvsPj2rtAX2BFfgXen8T39CJWblWRDT4L5WGXtDdg==" + "resolved" "https://registry.npmjs.org/unified/-/unified-9.2.0.tgz" + "version" "9.2.0" dependencies: "bail" "^1.0.0" "extend" "^3.0.0" + "is-buffer" "^2.0.0" "is-plain-obj" "^2.0.0" "trough" "^1.0.0" "vfile" "^4.0.0" -"unified@^9.0.0", "unified@9.2.0": - "integrity" "sha512-vx2Z0vY+a3YoTj8+pttM3tiJHCwY5UFbYdiWrwBEbHmK8pvsPj2rtAX2BFfgXen8T39CJWblWRDT4L5WGXtDdg==" - "resolved" "https://registry.npmjs.org/unified/-/unified-9.2.0.tgz" - "version" "9.2.0" +"unified@^9.2.2": + "integrity" "sha512-Sg7j110mtefBD+qunSLO1lqOEKdrwBFBrR6Qd8f4uwkhWNlbkaqwHse6e7QvD3AP/MNoJdEDLaf8OxYyoWgorQ==" + "resolved" "https://registry.npmjs.org/unified/-/unified-9.2.2.tgz" + "version" "9.2.2" dependencies: "bail" "^1.0.0" "extend" "^3.0.0" @@ -8893,26 +7950,6 @@ "trough" "^1.0.0" "vfile" "^4.0.0" -"union-value@^1.0.0": - "integrity" "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==" - "resolved" "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz" - "version" "1.0.1" - dependencies: - "arr-union" "^3.1.0" - "get-value" "^2.0.6" - "is-extendable" "^0.1.1" - "set-value" "^2.0.1" - -"uniq@^1.0.1": - "integrity" "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=" - "resolved" "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz" - "version" "1.0.1" - -"uniqs@^2.0.0": - "integrity" "sha1-/+3ks2slKQaW5uFl1KWe25mOawI=" - "resolved" "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz" - "version" "2.0.0" - "unique-string@^2.0.0": "integrity" "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==" "resolved" "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz" @@ -8976,7 +8013,7 @@ "@types/unist" "^2.0.0" "unist-util-is" "^4.0.0" -"unist-util-visit@^2.0.0", "unist-util-visit@^2.0.1", "unist-util-visit@^2.0.2", "unist-util-visit@^2.0.3", "unist-util-visit@2.0.3": +"unist-util-visit@^2.0.0", "unist-util-visit@^2.0.3", "unist-util-visit@2.0.3": "integrity" "sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q==" "resolved" "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.3.tgz" "version" "2.0.3" @@ -8991,27 +8028,17 @@ "version" "2.0.0" "unpipe@~1.0.0", "unpipe@1.0.0": - "integrity" "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" + "integrity" "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==" "resolved" "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz" "version" "1.0.0" -"unquote@~1.1.1": - "integrity" "sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ=" - "resolved" "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz" - "version" "1.1.1" - -"unset-value@^1.0.0": - "integrity" "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=" - "resolved" "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz" - "version" "1.0.0" +"update-browserslist-db@^1.0.9": + "integrity" "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==" + "resolved" "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz" + "version" "1.0.10" dependencies: - "has-value" "^0.3.1" - "isobject" "^3.0.0" - -"upath@^1.1.1": - "integrity" "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==" - "resolved" "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz" - "version" "1.2.0" + "escalade" "^3.1.1" + "picocolors" "^1.0.0" "update-notifier@^5.1.0": "integrity" "sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw==" @@ -9040,11 +8067,6 @@ dependencies: "punycode" "^2.1.0" -"urix@^0.1.0": - "integrity" "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=" - "resolved" "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz" - "version" "0.1.0" - "url-loader@^4.1.1": "integrity" "sha512-3BTV812+AVHHOJQO8O5MkWgZ5aosP7GnROJwvzLS9hWDj00lZ6Z0wNak423Lp9PBZN05N+Jk/N5Si8jRAlGyWA==" "resolved" "https://registry.npmjs.org/url-loader/-/url-loader-4.1.1.tgz" @@ -9055,69 +8077,36 @@ "schema-utils" "^3.0.0" "url-parse-lax@^3.0.0": - "integrity" "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=" + "integrity" "sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ==" "resolved" "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz" "version" "3.0.0" dependencies: "prepend-http" "^2.0.0" -"url-parse@^1.4.3", "url-parse@^1.5.1": - "integrity" "sha512-HOfCOUJt7iSYzEx/UqgtwKRMC6EU91NFhsCHMv9oM03VJcVo2Qrp8T8kI9D7amFf1cu+/3CEhgb3rF9zL7k85Q==" - "resolved" "https://registry.npmjs.org/url-parse/-/url-parse-1.5.1.tgz" - "version" "1.5.1" - dependencies: - "querystringify" "^2.1.1" - "requires-port" "^1.0.0" - -"url@^0.11.0": - "integrity" "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=" - "resolved" "https://registry.npmjs.org/url/-/url-0.11.0.tgz" - "version" "0.11.0" - dependencies: - "punycode" "1.3.2" - "querystring" "0.2.0" - -"use-composed-ref@^1.0.0": - "integrity" "sha512-my1lNHGWsSDAhhVAT4MKs6IjBUtG6ZG11uUqexPH9PptiIZDQOzaF4f5tEbJ2+7qvNbtXNBbU3SfmN+fXlWDhg==" - "resolved" "https://registry.npmjs.org/use-composed-ref/-/use-composed-ref-1.1.0.tgz" - "version" "1.1.0" - dependencies: - "ts-essentials" "^2.0.3" +"use-composed-ref@^1.3.0": + "integrity" "sha512-GLMG0Jc/jiKov/3Ulid1wbv3r54K9HlMW29IWcDFPEqFkSO2nS0MuefWgMJpeHQ9YJeXDL3ZUF+P3jdXlZX/cQ==" + "resolved" "https://registry.npmjs.org/use-composed-ref/-/use-composed-ref-1.3.0.tgz" + "version" "1.3.0" -"use-isomorphic-layout-effect@^1.0.0": - "integrity" "sha512-L7Evj8FGcwo/wpbv/qvSfrkHFtOpCzvM5yl2KVyDJoylVuSvzphiiasmjgQPttIGBAy2WKiBNR98q8w7PiNgKQ==" - "resolved" "https://registry.npmjs.org/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.1.1.tgz" - "version" "1.1.1" +"use-isomorphic-layout-effect@^1.1.1": + "integrity" "sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA==" + "resolved" "https://registry.npmjs.org/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.1.2.tgz" + "version" "1.1.2" -"use-latest@^1.0.0": - "integrity" "sha512-d2TEuG6nSLKQLAfW3By8mKr8HurOlTkul0sOpxbClIv4SQ4iOd7BYr7VIzdbktUCnv7dua/60xzd8igMU6jmyw==" - "resolved" "https://registry.npmjs.org/use-latest/-/use-latest-1.2.0.tgz" - "version" "1.2.0" +"use-latest@^1.2.1": + "integrity" "sha512-xA+AVm/Wlg3e2P/JiItTziwS7FK92LWrDB0p+hgXloIMuVCeJJ8v6f0eeHyPZaJrM+usM1FkFfbNCrJGs8A/zw==" + "resolved" "https://registry.npmjs.org/use-latest/-/use-latest-1.2.1.tgz" + "version" "1.2.1" dependencies: - "use-isomorphic-layout-effect" "^1.0.0" - -"use@^3.1.0": - "integrity" "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==" - "resolved" "https://registry.npmjs.org/use/-/use-3.1.1.tgz" - "version" "3.1.1" + "use-isomorphic-layout-effect" "^1.1.1" "util-deprecate@^1.0.1", "util-deprecate@^1.0.2", "util-deprecate@~1.0.1": - "integrity" "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + "integrity" "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" "resolved" "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" "version" "1.0.2" -"util.promisify@~1.0.0": - "integrity" "sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==" - "resolved" "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.1.tgz" - "version" "1.0.1" - dependencies: - "define-properties" "^1.1.3" - "es-abstract" "^1.17.2" - "has-symbols" "^1.0.1" - "object.getownpropertydescriptors" "^2.1.0" - "utila@~0.4": - "integrity" "sha1-ihagXURWV6Oupe7MWxKk+lN5dyw=" + "integrity" "sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==" "resolved" "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz" "version" "0.4.0" @@ -9127,14 +8116,14 @@ "version" "3.10.0" "utils-merge@1.0.1": - "integrity" "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" + "integrity" "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==" "resolved" "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz" "version" "1.0.1" -"uuid@^3.3.2", "uuid@^3.4.0": - "integrity" "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" - "resolved" "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz" - "version" "3.4.0" +"uuid@^8.3.2": + "integrity" "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" + "resolved" "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz" + "version" "8.3.2" "v8-compile-cache@^2.0.3": "integrity" "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==" @@ -9147,15 +8136,10 @@ "version" "1.0.1" "vary@~1.1.2": - "integrity" "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" + "integrity" "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==" "resolved" "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz" "version" "1.1.2" -"vendors@^1.0.3": - "integrity" "sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w==" - "resolved" "https://registry.npmjs.org/vendors/-/vendors-1.0.4.tgz" - "version" "1.0.4" - "vfile-location@^3.0.0", "vfile-location@^3.2.0": "integrity" "sha512-aLEIZKv/oxuCDZ8lkJGhuhztf/BW4M+iHdCwglA/eWc+vtuRFJj8EtgceYFX4LRjOhCAAiNHsKGssC6onJ+jbA==" "resolved" "https://registry.npmjs.org/vfile-location/-/vfile-location-3.2.0.tgz" @@ -9179,21 +8163,21 @@ "unist-util-stringify-position" "^2.0.0" "vfile-message" "^2.0.0" -"wait-on@^5.2.1": - "integrity" "sha512-DwrHrnTK+/0QFaB9a8Ol5Lna3k7WvUR4jzSKmz0YaPBpuN2sACyiPVKVfj6ejnjcajAcvn3wlbTyMIn9AZouOg==" - "resolved" "https://registry.npmjs.org/wait-on/-/wait-on-5.3.0.tgz" - "version" "5.3.0" +"wait-on@^6.0.1": + "integrity" "sha512-zht+KASY3usTY5u2LgaNqn/Cd8MukxLGjdcZxT2ns5QzDmTFc4XoWBgC+C/na+sMRZTuVygQoMYwdcVjHnYIVw==" + "resolved" "https://registry.npmjs.org/wait-on/-/wait-on-6.0.1.tgz" + "version" "6.0.1" dependencies: - "axios" "^0.21.1" - "joi" "^17.3.0" + "axios" "^0.25.0" + "joi" "^17.6.0" "lodash" "^4.17.21" "minimist" "^1.2.5" - "rxjs" "^6.6.3" + "rxjs" "^7.5.4" -"watchpack@^2.0.0": - "integrity" "sha512-Oo7LXCmc1eE1AjyuSBmtC3+Wy4HcV8PxWh2kP6fOl8yTlNS7r0K9l1ao2lrrUza7V39Y3D/BbJgY8VeSlc5JKw==" - "resolved" "https://registry.npmjs.org/watchpack/-/watchpack-2.1.1.tgz" - "version" "2.1.1" +"watchpack@^2.4.0": + "integrity" "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==" + "resolved" "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz" + "version" "2.4.0" dependencies: "glob-to-regexp" "^0.4.1" "graceful-fs" "^4.1.2" @@ -9205,155 +8189,134 @@ dependencies: "minimalistic-assert" "^1.0.0" -"web-namespaces@^1.0.0", "web-namespaces@^1.1.2": +"web-namespaces@^1.0.0": "integrity" "sha512-wYxSGajtmoP4WxfejAPIr4l0fVh+jeMXZb08wNc0tMg6xsfZXj3cECqIK0G7ZAqUq0PP8WlMDtaOGVBTAWztNw==" "resolved" "https://registry.npmjs.org/web-namespaces/-/web-namespaces-1.1.4.tgz" "version" "1.1.4" "webidl-conversions@^3.0.0": - "integrity" "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=" + "integrity" "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" "resolved" "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz" "version" "3.0.1" -"webpack-bundle-analyzer@^4.4.0": - "integrity" "sha512-j5m7WgytCkiVBoOGavzNokBOqxe6Mma13X1asfVYtKWM3wxBiRRu1u1iG0Iol5+qp9WgyhkMmBAcvjEfJ2bdDw==" - "resolved" "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.4.1.tgz" - "version" "4.4.1" +"webpack-bundle-analyzer@^4.5.0": + "integrity" "sha512-oKz9Oz9j3rUciLNfpGFjOb49/jEpXNmWdVH8Ls//zNcnLlQdTGXQQMsBbb/gR7Zl8WNLxVCq+0Hqbx3zv6twBw==" + "resolved" "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.6.1.tgz" + "version" "4.6.1" dependencies: "acorn" "^8.0.4" "acorn-walk" "^8.0.0" "chalk" "^4.1.0" - "commander" "^6.2.0" + "commander" "^7.2.0" "gzip-size" "^6.0.0" "lodash" "^4.17.20" "opener" "^1.5.2" "sirv" "^1.0.7" "ws" "^7.3.1" -"webpack-dev-middleware@^3.7.2": - "integrity" "sha512-djelc/zGiz9nZj/U7PTBi2ViorGJXEWo/3ltkPbDyxCXhhEXkW0ce99falaok4TPj+AsxLiXJR0EBOb0zh9fKQ==" - "resolved" "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.7.3.tgz" - "version" "3.7.3" +"webpack-dev-middleware@^5.3.1": + "integrity" "sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA==" + "resolved" "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz" + "version" "5.3.3" dependencies: - "memory-fs" "^0.4.1" - "mime" "^2.4.4" - "mkdirp" "^0.5.1" + "colorette" "^2.0.10" + "memfs" "^3.4.3" + "mime-types" "^2.1.31" "range-parser" "^1.2.1" - "webpack-log" "^2.0.0" - -"webpack-dev-server@^3.11.2": - "integrity" "sha512-A80BkuHRQfCiNtGBS1EMf2ChTUs0x+B3wGDFmOeT4rmJOHhHTCH2naNxIHhmkr0/UillP4U3yeIyv1pNp+QDLQ==" - "resolved" "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.11.2.tgz" - "version" "3.11.2" - dependencies: - "ansi-html" "0.0.7" - "bonjour" "^3.5.0" - "chokidar" "^2.1.8" + "schema-utils" "^4.0.0" + +"webpack-dev-server@^4.9.3": + "integrity" "sha512-lILVz9tAUy1zGFwieuaQtYiadImb5M3d+H+L1zDYalYoDl0cksAB1UNyuE5MMWJrG6zR1tXkCP2fitl7yoUJiw==" + "resolved" "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.11.1.tgz" + "version" "4.11.1" + dependencies: + "@types/bonjour" "^3.5.9" + "@types/connect-history-api-fallback" "^1.3.5" + "@types/express" "^4.17.13" + "@types/serve-index" "^1.9.1" + "@types/serve-static" "^1.13.10" + "@types/sockjs" "^0.3.33" + "@types/ws" "^8.5.1" + "ansi-html-community" "^0.0.8" + "bonjour-service" "^1.0.11" + "chokidar" "^3.5.3" + "colorette" "^2.0.10" "compression" "^1.7.4" - "connect-history-api-fallback" "^1.6.0" - "debug" "^4.1.1" - "del" "^4.1.1" - "express" "^4.17.1" - "html-entities" "^1.3.1" - "http-proxy-middleware" "0.19.1" - "import-local" "^2.0.0" - "internal-ip" "^4.3.0" - "ip" "^1.1.5" - "is-absolute-url" "^3.0.3" - "killable" "^1.0.1" - "loglevel" "^1.6.8" - "opn" "^5.5.0" - "p-retry" "^3.0.1" - "portfinder" "^1.0.26" - "schema-utils" "^1.0.0" - "selfsigned" "^1.10.8" - "semver" "^6.3.0" + "connect-history-api-fallback" "^2.0.0" + "default-gateway" "^6.0.3" + "express" "^4.17.3" + "graceful-fs" "^4.2.6" + "html-entities" "^2.3.2" + "http-proxy-middleware" "^2.0.3" + "ipaddr.js" "^2.0.1" + "open" "^8.0.9" + "p-retry" "^4.5.0" + "rimraf" "^3.0.2" + "schema-utils" "^4.0.0" + "selfsigned" "^2.1.1" "serve-index" "^1.9.1" - "sockjs" "^0.3.21" - "sockjs-client" "^1.5.0" + "sockjs" "^0.3.24" "spdy" "^4.0.2" - "strip-ansi" "^3.0.1" - "supports-color" "^6.1.0" - "url" "^0.11.0" - "webpack-dev-middleware" "^3.7.2" - "webpack-log" "^2.0.0" - "ws" "^6.2.1" - "yargs" "^13.3.2" - -"webpack-log@^2.0.0": - "integrity" "sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==" - "resolved" "https://registry.npmjs.org/webpack-log/-/webpack-log-2.0.0.tgz" - "version" "2.0.0" - dependencies: - "ansi-colors" "^3.0.0" - "uuid" "^3.3.2" + "webpack-dev-middleware" "^5.3.1" + "ws" "^8.4.2" -"webpack-merge@^5.7.3": - "integrity" "sha512-6/JUQv0ELQ1igjGDzHkXbVDRxkfA57Zw7PfiupdLFJYrgFqY5ZP8xxbpp2lU3EPwYx89ht5Z/aDkD40hFCm5AA==" - "resolved" "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.7.3.tgz" - "version" "5.7.3" +"webpack-merge@^5.8.0": + "integrity" "sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q==" + "resolved" "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.8.0.tgz" + "version" "5.8.0" dependencies: "clone-deep" "^4.0.1" "wildcard" "^2.0.0" -"webpack-sources@^1.1.0", "webpack-sources@^1.4.3": - "integrity" "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==" - "resolved" "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz" - "version" "1.4.3" - dependencies: - "source-list-map" "^2.0.0" - "source-map" "~0.6.1" - -"webpack-sources@^2.1.1": - "integrity" "sha512-bQsA24JLwcnWGArOKUxYKhX3Mz/nK1Xf6hxullKERyktjNMC4x8koOeaDNTA2fEJ09BdWLbM/iTW0ithREUP0w==" - "resolved" "https://registry.npmjs.org/webpack-sources/-/webpack-sources-2.2.0.tgz" - "version" "2.2.0" - dependencies: - "source-list-map" "^2.0.1" - "source-map" "^0.6.1" - -"webpack@^4.0.0 || ^5.0.0", "webpack@^4.27.0 || ^5.0.0", "webpack@^4.4.0 || ^5.0.0", "webpack@^5.0.0", "webpack@^5.1.0", "webpack@^5.20.0", "webpack@^5.28.0", "webpack@>=2", "webpack@>=4.41.1 || 5.x", "webpack@3 || 4 || 5": - "integrity" "sha512-yvdhgcI6QkQkDe1hINBAJ1UNevqNGTVaCkD2SSJcB8rcrNNl922RI8i2DXUAuNfANoxwsiXXEA4ZPZI9q2oGLA==" - "resolved" "https://registry.npmjs.org/webpack/-/webpack-5.37.0.tgz" - "version" "5.37.0" - dependencies: - "@types/eslint-scope" "^3.7.0" - "@types/estree" "^0.0.47" - "@webassemblyjs/ast" "1.11.0" - "@webassemblyjs/wasm-edit" "1.11.0" - "@webassemblyjs/wasm-parser" "1.11.0" - "acorn" "^8.2.1" +"webpack-sources@^3.2.2": + "integrity" "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==" + "resolved" "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz" + "version" "3.2.3" + +"webpack-sources@^3.2.3": + "integrity" "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==" + "resolved" "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz" + "version" "3.2.3" + +"webpack@^4.0.0 || ^5.0.0", "webpack@^4.37.0 || ^5.0.0", "webpack@^5.0.0", "webpack@^5.1.0", "webpack@^5.20.0", "webpack@^5.73.0", "webpack@>= 4", "webpack@>=2", "webpack@>=4.41.1 || 5.x", "webpack@3 || 4 || 5": + "integrity" "sha512-A2InDwnhhGN4LYctJj6M1JEaGL7Luj6LOmyBHjcI8529cm5p6VXiTIW2sn6ffvEAKmveLzvu4jrihwXtPojlAA==" + "resolved" "https://registry.npmjs.org/webpack/-/webpack-5.74.0.tgz" + "version" "5.74.0" + dependencies: + "@types/eslint-scope" "^3.7.3" + "@types/estree" "^0.0.51" + "@webassemblyjs/ast" "1.11.1" + "@webassemblyjs/wasm-edit" "1.11.1" + "@webassemblyjs/wasm-parser" "1.11.1" + "acorn" "^8.7.1" + "acorn-import-assertions" "^1.7.6" "browserslist" "^4.14.5" "chrome-trace-event" "^1.0.2" - "enhanced-resolve" "^5.8.0" - "es-module-lexer" "^0.4.0" - "eslint-scope" "^5.1.1" + "enhanced-resolve" "^5.10.0" + "es-module-lexer" "^0.9.0" + "eslint-scope" "5.1.1" "events" "^3.2.0" "glob-to-regexp" "^0.4.1" - "graceful-fs" "^4.2.4" - "json-parse-better-errors" "^1.0.2" + "graceful-fs" "^4.2.9" + "json-parse-even-better-errors" "^2.3.1" "loader-runner" "^4.2.0" "mime-types" "^2.1.27" "neo-async" "^2.6.2" - "schema-utils" "^3.0.0" + "schema-utils" "^3.1.0" "tapable" "^2.1.1" - "terser-webpack-plugin" "^5.1.1" - "watchpack" "^2.0.0" - "webpack-sources" "^2.1.1" + "terser-webpack-plugin" "^5.1.3" + "watchpack" "^2.4.0" + "webpack-sources" "^3.2.3" -"webpackbar@^5.0.0-3": - "integrity" "sha512-viW6KCYjMb0NPoDrw2jAmLXU2dEOhRrtku28KmOfeE1vxbfwCYuTbTaMhnkrCZLFAFyY9Q49Z/jzYO80Dw5b8g==" - "resolved" "https://registry.npmjs.org/webpackbar/-/webpackbar-5.0.0-3.tgz" - "version" "5.0.0-3" +"webpackbar@^5.0.2": + "integrity" "sha512-BmFJo7veBDgQzfWXl/wwYXr/VFus0614qZ8i9znqcl9fnEdiVkdbi0TedLQ6xAK92HZHDJ0QmyQ0fmuZPAgCYQ==" + "resolved" "https://registry.npmjs.org/webpackbar/-/webpackbar-5.0.2.tgz" + "version" "5.0.2" dependencies: - "ansi-escapes" "^4.3.1" "chalk" "^4.1.0" - "consola" "^2.15.0" - "figures" "^3.2.0" + "consola" "^2.15.3" "pretty-time" "^1.1.0" - "std-env" "^2.2.1" - "text-table" "^0.2.0" - "wrap-ansi" "^7.0.0" + "std-env" "^3.0.1" "websocket-driver@^0.7.4", "websocket-driver@>=0.5.1": "integrity" "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==" @@ -9370,7 +8333,7 @@ "version" "0.1.4" "whatwg-url@^5.0.0": - "integrity" "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=" + "integrity" "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==" "resolved" "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz" "version" "5.0.0" dependencies: @@ -9388,18 +8351,6 @@ "is-string" "^1.0.5" "is-symbol" "^1.0.3" -"which-module@^2.0.0": - "integrity" "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" - "resolved" "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz" - "version" "2.0.0" - -"which@^1.2.9": - "integrity" "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==" - "resolved" "https://registry.npmjs.org/which/-/which-1.3.1.tgz" - "version" "1.3.1" - dependencies: - "isexe" "^2.0.0" - "which@^1.3.1": "integrity" "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==" "resolved" "https://registry.npmjs.org/which/-/which-1.3.1.tgz" @@ -9421,6 +8372,13 @@ dependencies: "string-width" "^4.0.0" +"widest-line@^4.0.1": + "integrity" "sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig==" + "resolved" "https://registry.npmjs.org/widest-line/-/widest-line-4.0.1.tgz" + "version" "4.0.1" + dependencies: + "string-width" "^5.0.1" + "wildcard@^2.0.0": "integrity" "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==" "resolved" "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz" @@ -9431,22 +8389,6 @@ "resolved" "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz" "version" "1.2.3" -"worker-rpc@^0.1.0": - "integrity" "sha512-P1WjMrUB3qgJNI9jfmpZ/htmBEjFh//6l/5y8SD9hg1Ef5zTTVVoRjTrTEzPrNBQvmhMxkoTsjOXN10GWU7aCg==" - "resolved" "https://registry.npmjs.org/worker-rpc/-/worker-rpc-0.1.1.tgz" - "version" "0.1.1" - dependencies: - "microevent.ts" "~0.1.1" - -"wrap-ansi@^5.1.0": - "integrity" "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==" - "resolved" "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz" - "version" "5.1.0" - dependencies: - "ansi-styles" "^3.2.0" - "string-width" "^3.0.0" - "strip-ansi" "^5.0.0" - "wrap-ansi@^7.0.0": "integrity" "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==" "resolved" "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz" @@ -9456,8 +8398,17 @@ "string-width" "^4.1.0" "strip-ansi" "^6.0.0" +"wrap-ansi@^8.0.1": + "integrity" "sha512-QFF+ufAqhoYHvoHdajT/Po7KoXVBPXS2bgjIam5isfWJPfIOnQZ50JtUiVvCv/sjgacf3yRrt2ZKUZ/V4itN4g==" + "resolved" "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.0.1.tgz" + "version" "8.0.1" + dependencies: + "ansi-styles" "^6.1.0" + "string-width" "^5.0.1" + "strip-ansi" "^7.0.1" + "wrappy@1": - "integrity" "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + "integrity" "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" "resolved" "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" "version" "1.0.2" @@ -9471,17 +8422,15 @@ "signal-exit" "^3.0.2" "typedarray-to-buffer" "^3.1.5" -"ws@^6.2.1": - "integrity" "sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==" - "resolved" "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz" - "version" "6.2.1" - dependencies: - "async-limiter" "~1.0.0" - "ws@^7.3.1": - "integrity" "sha512-xzyu3hFvomRfXKH8vOFMU3OguG6oOvhXMo3xsGy3xWExqaM2dxBbVxuD99O7m3ZUFMvvscsZDqxfgMaRr/Nr1g==" - "resolved" "https://registry.npmjs.org/ws/-/ws-7.4.5.tgz" - "version" "7.4.5" + "integrity" "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==" + "resolved" "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz" + "version" "7.5.9" + +"ws@^8.4.2": + "integrity" "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==" + "resolved" "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz" + "version" "8.11.0" "xdg-basedir@^4.0.0": "integrity" "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==" @@ -9500,44 +8449,33 @@ "resolved" "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz" "version" "4.0.2" -"y18n@^4.0.0": - "integrity" "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==" - "resolved" "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz" - "version" "4.0.3" +"yallist@^3.0.0": + "integrity" "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" + "resolved" "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz" + "version" "3.1.1" + +"yallist@^3.1.1": + "integrity" "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" + "resolved" "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz" + "version" "3.1.1" "yallist@^4.0.0": "integrity" "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" "resolved" "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz" "version" "4.0.0" -"yaml@^1.10.0": +"yaml@^1.10.0", "yaml@^1.10.2", "yaml@^1.7.2": "integrity" "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==" "resolved" "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz" "version" "1.10.2" -"yargs-parser@^13.1.2": - "integrity" "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==" - "resolved" "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz" - "version" "13.1.2" - dependencies: - "camelcase" "^5.0.0" - "decamelize" "^1.2.0" - -"yargs@^13.3.2": - "integrity" "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==" - "resolved" "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz" - "version" "13.3.2" +"yauzl@^2.10.0": + "integrity" "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==" + "resolved" "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz" + "version" "2.10.0" dependencies: - "cliui" "^5.0.0" - "find-up" "^3.0.0" - "get-caller-file" "^2.0.1" - "require-directory" "^2.1.1" - "require-main-filename" "^2.0.0" - "set-blocking" "^2.0.0" - "string-width" "^3.0.0" - "which-module" "^2.0.0" - "y18n" "^4.0.0" - "yargs-parser" "^13.1.2" + "buffer-crc32" "~0.2.3" + "fd-slicer" "~1.1.0" "yocto-queue@^0.1.0": "integrity" "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==" From 35ed752c293b77a3c2d7f1614485d8a645d30e9e Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Thu, 19 Jan 2023 12:47:57 +0800 Subject: [PATCH 294/465] ci: fix commit range in push event (backport #29755) (#29776) * ci: fix commit range in push event (#29755) * fix commit range * use github.event.before instead of HEAD~1 (cherry picked from commit e7838768ec0dec02e3fc47c899c5ff8f929c8acb) # Conflicts: # .github/workflows/crate-check.yml # .github/workflows/docs.yml * fix conflict Co-authored-by: Yihau Chen Co-authored-by: yihau --- .github/workflows/docs.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index a124adcceb5218..a8544faf360cf3 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -26,7 +26,7 @@ jobs: - name: Get commit range (push) if: ${{ github.event_name == 'push' }} run: | - echo "COMMIT_RANGE=$GIHTUB_SHA" >> $GITHUB_ENV + echo "COMMIT_RANGE=${{ github.event.before }}..$GITHUB_SHA" >> $GITHUB_ENV - name: Get commit range (pull_request) if: ${{ github.event_name == 'pull_request' }} From 0a3e52ba8b4f63c3675fa91fc89c4f54f69e5855 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Thu, 19 Jan 2023 07:41:54 +0100 Subject: [PATCH 295/465] Refactor - Simplify loader utils (backport #29699) (#29757) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Refactor - Simplify loader utils (#29699) * Moves all the common code of tests and benches into loader utils. * Removes write_sbf_program(). * Removes ignored test: test_program_sbf_test_use_latest_executor2(). (cherry picked from commit ab97d37e3d1249beb08536f4c8e7ac73ea20d847) Co-authored-by: Alexander Meißner --- programs/bpf/benches/bpf_loader.rs | 52 +--- programs/bpf/tests/programs.rs | 466 +++++------------------------ runtime/src/loader_utils.rs | 134 ++++++--- 3 files changed, 171 insertions(+), 481 deletions(-) diff --git a/programs/bpf/benches/bpf_loader.rs b/programs/bpf/benches/bpf_loader.rs index 4334463b9cb667..360ee3c5961f69 100644 --- a/programs/bpf/benches/bpf_loader.rs +++ b/programs/bpf/benches/bpf_loader.rs @@ -22,7 +22,7 @@ use { bank::Bank, bank_client::BankClient, genesis_utils::{create_genesis_config, GenesisConfigInfo}, - loader_utils::load_program, + loader_utils::{create_deprecated_program, load_program_from_file}, }, solana_sdk::{ bpf_loader, @@ -30,54 +30,18 @@ use { entrypoint::SUCCESS, instruction::{AccountMeta, Instruction}, message::Message, - pubkey::Pubkey, - signature::{Keypair, Signer}, + signature::Signer, }, - std::{env, fs::File, io::Read, mem, path::PathBuf, sync::Arc}, + std::{mem, sync::Arc}, test::Bencher, }; -/// BPF program file extension -const PLATFORM_FILE_EXTENSION_BPF: &str = "so"; -/// Create a BPF program file name -fn create_bpf_path(name: &str) -> PathBuf { - let mut pathbuf = { - let current_exe = env::current_exe().unwrap(); - PathBuf::from(current_exe.parent().unwrap().parent().unwrap()) - }; - pathbuf.push("bpf/"); - pathbuf.push(name); - pathbuf.set_extension(PLATFORM_FILE_EXTENSION_BPF); - pathbuf -} - -fn load_elf(name: &str) -> Result, std::io::Error> { - let path = create_bpf_path(name); - let mut file = File::open(&path).expect(&format!("Unable to open {:?}", path)); - let mut elf = Vec::new(); - file.read_to_end(&mut elf).unwrap(); - Ok(elf) -} - -fn load_bpf_program( - bank_client: &BankClient, - loader_id: &Pubkey, - payer_keypair: &Keypair, - name: &str, -) -> Pubkey { - let path = create_bpf_path(name); - let mut file = File::open(path).unwrap(); - let mut elf = Vec::new(); - file.read_to_end(&mut elf).unwrap(); - load_program(bank_client, payer_keypair, loader_id, elf) -} - const ARMSTRONG_LIMIT: u64 = 500; const ARMSTRONG_EXPECTED: u64 = 5; #[bench] fn bench_program_create_executable(bencher: &mut Bencher) { - let elf = load_elf("bench_alu").unwrap(); + let elf = load_program_from_file("bench_alu"); bencher.iter(|| { let _ = Executable::::from_elf( @@ -98,7 +62,7 @@ fn bench_program_alu(bencher: &mut Bencher) { .write_u64::(ARMSTRONG_LIMIT) .unwrap(); inner_iter.write_u64::(0).unwrap(); - let elf = load_elf("bench_alu").unwrap(); + let elf = load_program_from_file("bench_alu"); let loader_id = bpf_loader::id(); with_mock_invoke_context(loader_id, 10000001, |invoke_context| { invoke_context @@ -191,7 +155,7 @@ fn bench_program_execute_noop(bencher: &mut Bencher) { let bank_client = BankClient::new_shared(&bank); let invoke_program_id = - load_bpf_program(&bank_client, &bpf_loader::id(), &mint_keypair, "noop"); + create_deprecated_program(&bank_client, &bpf_loader::id(), &mint_keypair, "noop"); let mint_pubkey = mint_keypair.pubkey(); let account_metas = vec![AccountMeta::new(mint_pubkey, true)]; @@ -214,7 +178,7 @@ fn bench_program_execute_noop(bencher: &mut Bencher) { #[bench] fn bench_create_vm(bencher: &mut Bencher) { - let elf = load_elf("noop").unwrap(); + let elf = load_program_from_file("noop"); let loader_id = bpf_loader::id(); with_mock_invoke_context(loader_id, 10000001, |invoke_context| { const BUDGET: u64 = 200_000; @@ -262,7 +226,7 @@ fn bench_create_vm(bencher: &mut Bencher) { #[bench] fn bench_instruction_count_tuner(_bencher: &mut Bencher) { - let elf = load_elf("tuner").unwrap(); + let elf = load_program_from_file("tuner"); let loader_id = bpf_loader::id(); with_mock_invoke_context(loader_id, 10000001, |invoke_context| { const BUDGET: u64 = 200_000; diff --git a/programs/bpf/tests/programs.rs b/programs/bpf/tests/programs.rs index 186841d4f8cb38..72138c9e8ef929 100644 --- a/programs/bpf/tests/programs.rs +++ b/programs/bpf/tests/programs.rs @@ -37,8 +37,9 @@ use { bank_client::BankClient, genesis_utils::{create_genesis_config, GenesisConfigInfo}, loader_utils::{ - load_buffer_account, load_program, load_upgradeable_program, set_upgrade_authority, - upgrade_program, + create_deprecated_program, load_and_finalize_deprecated_program, + load_program_from_file, load_upgradeable_buffer, load_upgradeable_program, + set_upgrade_authority, upgrade_program, }, }, solana_sdk::{ @@ -68,143 +69,11 @@ use { ConfirmedTransactionWithStatusMeta, InnerInstructions, TransactionStatusMeta, TransactionWithStatusMeta, VersionedTransactionWithStatusMeta, }, - std::{collections::HashMap, env, fs::File, io::Read, path::PathBuf, str::FromStr, sync::Arc}, + std::{collections::HashMap, str::FromStr, sync::Arc}, }; -/// BPF program file extension -const PLATFORM_FILE_EXTENSION_BPF: &str = "so"; - -/// Create a BPF program file name -fn create_bpf_path(name: &str) -> PathBuf { - let mut pathbuf = { - let current_exe = env::current_exe().unwrap(); - PathBuf::from(current_exe.parent().unwrap().parent().unwrap()) - }; - pathbuf.push("bpf/"); - pathbuf.push(name); - pathbuf.set_extension(PLATFORM_FILE_EXTENSION_BPF); - pathbuf -} - -fn load_bpf_program( - bank_client: &BankClient, - loader_id: &Pubkey, - payer_keypair: &Keypair, - name: &str, -) -> Pubkey { - let elf = read_bpf_program(name); - load_program(bank_client, payer_keypair, loader_id, elf) -} - -fn read_bpf_program(name: &str) -> Vec { - let path = create_bpf_path(name); - let mut file = File::open(&path).unwrap_or_else(|err| { - panic!("Failed to open {}: {}", path.display(), err); - }); - let mut elf = Vec::new(); - file.read_to_end(&mut elf).unwrap(); - - elf -} - -#[cfg(feature = "bpf_rust")] -fn write_bpf_program( - bank_client: &BankClient, - loader_id: &Pubkey, - payer_keypair: &Keypair, - program_keypair: &Keypair, - elf: &[u8], -) { - let chunk_size = 512; // Size of chunk just needs to fit into tx - let mut offset = 0; - for chunk in elf.chunks(chunk_size) { - let instruction = - loader_instruction::write(&program_keypair.pubkey(), loader_id, offset, chunk.to_vec()); - let message = Message::new(&[instruction], Some(&payer_keypair.pubkey())); - - bank_client - .send_and_confirm_message(&[payer_keypair, &program_keypair], message) - .unwrap(); - - offset += chunk_size as u32; - } -} - -fn load_upgradeable_bpf_program( - bank_client: &BankClient, - payer_keypair: &Keypair, - buffer_keypair: &Keypair, - executable_keypair: &Keypair, - authority_keypair: &Keypair, - name: &str, -) { - let path = create_bpf_path(name); - let mut file = File::open(&path).unwrap_or_else(|err| { - panic!("Failed to open {}: {}", path.display(), err); - }); - let mut elf = Vec::new(); - file.read_to_end(&mut elf).unwrap(); - load_upgradeable_program( - bank_client, - payer_keypair, - buffer_keypair, - executable_keypair, - authority_keypair, - elf, - ); -} - -fn load_upgradeable_buffer( - bank_client: &BankClient, - payer_keypair: &Keypair, - buffer_keypair: &Keypair, - buffer_authority_keypair: &Keypair, - name: &str, -) { - let path = create_bpf_path(name); - let mut file = File::open(&path).unwrap_or_else(|err| { - panic!("Failed to open {}: {}", path.display(), err); - }); - let mut elf = Vec::new(); - file.read_to_end(&mut elf).unwrap(); - load_buffer_account( - bank_client, - payer_keypair, - &buffer_keypair, - buffer_authority_keypair, - &elf, - ); -} - -fn upgrade_bpf_program( - bank_client: &BankClient, - payer_keypair: &Keypair, - buffer_keypair: &Keypair, - executable_pubkey: &Pubkey, - authority_keypair: &Keypair, - name: &str, -) { - load_upgradeable_buffer( - bank_client, - payer_keypair, - buffer_keypair, - authority_keypair, - name, - ); - upgrade_program( - bank_client, - payer_keypair, - executable_pubkey, - &buffer_keypair.pubkey(), - &authority_keypair, - &payer_keypair.pubkey(), - ); -} - fn run_program(name: &str) -> u64 { - let mut file = File::open(create_bpf_path(name)).unwrap(); - let mut data = vec![]; - file.read_to_end(&mut data).unwrap(); + let elf = load_program_from_file(name); let loader_id = bpf_loader::id(); with_mock_invoke_context(loader_id, 0, |invoke_context| { let (parameter_bytes, account_lengths) = serialize_parameters( @@ -225,7 +94,7 @@ fn run_program(name: &str) -> u64 { ..Config::default() }; let executable = Executable::::from_elf( - &data, + &elf, config, register_syscalls(invoke_context, true /* no sol_alloc_free */).unwrap(), ) @@ -569,7 +438,7 @@ fn test_program_bpf_sanity() { // Call user program let program_id = - load_bpf_program(&bank_client, &bpf_loader::id(), &mint_keypair, program.0); + create_deprecated_program(&bank_client, &bpf_loader::id(), &mint_keypair, program.0); let account_metas = vec![ AccountMeta::new(mint_keypair.pubkey(), true), AccountMeta::new(Keypair::new().pubkey(), false), @@ -620,7 +489,7 @@ fn test_program_bpf_loader_deprecated() { bank.add_builtin(&name, &id, entrypoint); let bank_client = BankClient::new(bank); - let program_id = load_bpf_program( + let program_id = create_deprecated_program( &bank_client, &bpf_loader_deprecated::id(), &mint_keypair, @@ -653,7 +522,7 @@ fn test_sol_alloc_free_no_longer_deployable() { bank.add_builtin(&name, &id, entrypoint); // Populate loader account with elf that depends on _sol_alloc_free syscall - let elf = read_bpf_program("solana_bpf_rust_deprecated_loader"); + let elf = load_program_from_file("solana_bpf_rust_deprecated_loader"); let mut program_account = AccountSharedData::new(1, elf.len(), &loader_address); program_account .data_as_mut_slice() @@ -745,7 +614,8 @@ fn test_program_bpf_duplicate_accounts() { bank.add_builtin(&name, &id, entrypoint); let bank = Arc::new(bank); let bank_client = BankClient::new_shared(&bank); - let program_id = load_bpf_program(&bank_client, &bpf_loader::id(), &mint_keypair, program); + let program_id = + create_deprecated_program(&bank_client, &bpf_loader::id(), &mint_keypair, program); let payee_account = AccountSharedData::new(10, 1, &program_id); let payee_pubkey = Pubkey::new_unique(); bank.store_account(&payee_pubkey, &payee_account); @@ -844,7 +714,8 @@ fn test_program_bpf_error_handling() { let (name, id, entrypoint) = solana_bpf_loader_program!(); bank.add_builtin(&name, &id, entrypoint); let bank_client = BankClient::new(bank); - let program_id = load_bpf_program(&bank_client, &bpf_loader::id(), &mint_keypair, program); + let program_id = + create_deprecated_program(&bank_client, &bpf_loader::id(), &mint_keypair, program); let account_metas = vec![AccountMeta::new(mint_keypair.pubkey(), true)]; let instruction = Instruction::new_with_bytes(program_id, &[1], account_metas.clone()); @@ -948,7 +819,8 @@ fn test_return_data_and_log_data_syscall() { let bank = Arc::new(bank); let bank_client = BankClient::new_shared(&bank); - let program_id = load_bpf_program(&bank_client, &bpf_loader::id(), &mint_keypair, program); + let program_id = + create_deprecated_program(&bank_client, &bpf_loader::id(), &mint_keypair, program); bank.freeze(); @@ -1013,11 +885,11 @@ fn test_program_bpf_invoke_sanity() { let bank_client = BankClient::new_shared(&bank); let invoke_program_id = - load_bpf_program(&bank_client, &bpf_loader::id(), &mint_keypair, program.1); + create_deprecated_program(&bank_client, &bpf_loader::id(), &mint_keypair, program.1); let invoked_program_id = - load_bpf_program(&bank_client, &bpf_loader::id(), &mint_keypair, program.2); + create_deprecated_program(&bank_client, &bpf_loader::id(), &mint_keypair, program.2); let noop_program_id = - load_bpf_program(&bank_client, &bpf_loader::id(), &mint_keypair, program.3); + create_deprecated_program(&bank_client, &bpf_loader::id(), &mint_keypair, program.3); let argument_keypair = Keypair::new(); let account = AccountSharedData::new(42, 100, &invoke_program_id); @@ -1411,13 +1283,13 @@ fn test_program_bpf_program_id_spoofing() { let bank = Arc::new(bank); let bank_client = BankClient::new_shared(&bank); - let malicious_swap_pubkey = load_bpf_program( + let malicious_swap_pubkey = create_deprecated_program( &bank_client, &bpf_loader::id(), &mint_keypair, "solana_bpf_rust_spoof1", ); - let malicious_system_pubkey = load_bpf_program( + let malicious_system_pubkey = create_deprecated_program( &bank_client, &bpf_loader::id(), &mint_keypair, @@ -1464,13 +1336,13 @@ fn test_program_bpf_caller_has_access_to_cpi_program() { let bank = Arc::new(bank); let bank_client = BankClient::new_shared(&bank); - let caller_pubkey = load_bpf_program( + let caller_pubkey = create_deprecated_program( &bank_client, &bpf_loader::id(), &mint_keypair, "solana_bpf_rust_caller_access", ); - let caller2_pubkey = load_bpf_program( + let caller2_pubkey = create_deprecated_program( &bank_client, &bpf_loader::id(), &mint_keypair, @@ -1504,7 +1376,7 @@ fn test_program_bpf_ro_modify() { let bank = Arc::new(bank); let bank_client = BankClient::new_shared(&bank); - let program_pubkey = load_bpf_program( + let program_pubkey = create_deprecated_program( &bank_client, &bpf_loader::id(), &mint_keypair, @@ -1559,7 +1431,7 @@ fn test_program_bpf_call_depth() { let (name, id, entrypoint) = solana_bpf_loader_program!(); bank.add_builtin(&name, &id, entrypoint); let bank_client = BankClient::new(bank); - let program_id = load_bpf_program( + let program_id = create_deprecated_program( &bank_client, &bpf_loader::id(), &mint_keypair, @@ -1594,7 +1466,7 @@ fn test_program_bpf_compute_budget() { let (name, id, entrypoint) = solana_bpf_loader_program!(); bank.add_builtin(&name, &id, entrypoint); let bank_client = BankClient::new(bank); - let program_id = load_bpf_program( + let program_id = create_deprecated_program( &bank_client, &bpf_loader::id(), &mint_keypair, @@ -1695,7 +1567,7 @@ fn test_program_bpf_instruction_introspection() { let bank = Arc::new(bank); let bank_client = BankClient::new_shared(&bank); - let program_id = load_bpf_program( + let program_id = create_deprecated_program( &bank_client, &bpf_loader::id(), &mint_keypair, @@ -1753,42 +1625,26 @@ fn test_program_bpf_test_use_latest_executor() { let (name, id, entrypoint) = solana_bpf_loader_program!(); bank.add_builtin(&name, &id, entrypoint); let bank_client = BankClient::new(bank); - let panic_id = load_bpf_program( + let panic_id = create_deprecated_program( &bank_client, &bpf_loader::id(), &mint_keypair, "solana_bpf_rust_panic", ); - let program_keypair = Keypair::new(); - // Write the panic program into the program account - let elf = read_bpf_program("solana_bpf_rust_panic"); - let message = Message::new( - &[system_instruction::create_account( - &mint_keypair.pubkey(), - &program_keypair.pubkey(), - 1, - elf.len() as u64 * 2, - &bpf_loader::id(), - )], - Some(&mint_keypair.pubkey()), - ); - assert!(bank_client - .send_and_confirm_message(&[&mint_keypair, &program_keypair], message) - .is_ok()); - write_bpf_program( + let (program_keypair, instruction) = load_and_finalize_deprecated_program( &bank_client, &bpf_loader::id(), + None, &mint_keypair, - &program_keypair, - &elf, + "solana_bpf_rust_panic", ); // Finalize the panic program, but fail the tx let message = Message::new( &[ - loader_instruction::finalize(&program_keypair.pubkey(), &bpf_loader::id()), + instruction, Instruction::new_with_bytes(panic_id, &[0], vec![]), ], Some(&mint_keypair.pubkey()), @@ -1798,159 +1654,19 @@ fn test_program_bpf_test_use_latest_executor() { .is_err()); // Write the noop program into the same program account - let elf = read_bpf_program("solana_bpf_rust_noop"); - write_bpf_program( - &bank_client, - &bpf_loader::id(), - &mint_keypair, - &program_keypair, - &elf, - ); - - // Finalize the noop program - let message = Message::new( - &[loader_instruction::finalize( - &program_keypair.pubkey(), - &bpf_loader::id(), - )], - Some(&mint_keypair.pubkey()), - ); - assert!(bank_client - .send_and_confirm_message(&[&mint_keypair, &program_keypair], message) - .is_ok()); - - // Call the noop program, should get noop not panic - let message = Message::new( - &[Instruction::new_with_bytes( - program_keypair.pubkey(), - &[0], - vec![], - )], - Some(&mint_keypair.pubkey()), - ); - assert!(bank_client - .send_and_confirm_message(&[&mint_keypair], message) - .is_ok()); -} - -#[ignore] // Invoking BPF loaders from CPI not allowed -#[cfg(feature = "bpf_rust")] -#[test] -fn test_program_bpf_test_use_latest_executor2() { - solana_logger::setup(); - - let GenesisConfigInfo { - genesis_config, - mint_keypair, - .. - } = create_genesis_config(50); - let mut bank = Bank::new_for_tests(&genesis_config); - let (name, id, entrypoint) = solana_bpf_loader_program!(); - bank.add_builtin(&name, &id, entrypoint); - let bank_client = BankClient::new(bank); - let invoke_and_error = load_bpf_program( - &bank_client, - &bpf_loader::id(), - &mint_keypair, - "solana_bpf_rust_invoke_and_error", - ); - let invoke_and_ok = load_bpf_program( + let (program_keypair, instruction) = load_and_finalize_deprecated_program( &bank_client, &bpf_loader::id(), + Some(program_keypair), &mint_keypair, - "solana_bpf_rust_invoke_and_ok", - ); - - let program_keypair = Keypair::new(); - - // Write the panic program into the program account - let elf = read_bpf_program("solana_bpf_rust_panic"); - let message = Message::new( - &[system_instruction::create_account( - &mint_keypair.pubkey(), - &program_keypair.pubkey(), - 1, - elf.len() as u64 * 2, - &bpf_loader::id(), - )], - Some(&mint_keypair.pubkey()), - ); - assert!(bank_client - .send_and_confirm_message(&[&mint_keypair, &program_keypair], message) - .is_ok()); - write_bpf_program( - &bank_client, - &bpf_loader::id(), - &mint_keypair, - &program_keypair, - &elf, - ); - - // - invoke finalize and return error, swallow error - let mut instruction = - loader_instruction::finalize(&program_keypair.pubkey(), &bpf_loader::id()); - instruction.accounts.insert( - 0, - AccountMeta { - is_signer: false, - is_writable: false, - pubkey: instruction.program_id, - }, - ); - instruction.program_id = invoke_and_ok; - instruction.accounts.insert( - 0, - AccountMeta { - is_signer: false, - is_writable: false, - pubkey: invoke_and_error, - }, + "solana_bpf_rust_noop", ); let message = Message::new(&[instruction], Some(&mint_keypair.pubkey())); - assert!(bank_client - .send_and_confirm_message(&[&mint_keypair, &program_keypair], message) - .is_ok()); - - // invoke program, verify not found - let message = Message::new( - &[Instruction::new_with_bytes( - program_keypair.pubkey(), - &[0], - vec![], - )], - Some(&mint_keypair.pubkey()), - ); - assert_eq!( - bank_client - .send_and_confirm_message(&[&mint_keypair], message) - .unwrap_err() - .unwrap(), - TransactionError::InvalidProgramForExecution - ); - - // Write the noop program into the same program account - let elf = read_bpf_program("solana_bpf_rust_noop"); - write_bpf_program( - &bank_client, - &bpf_loader::id(), - &mint_keypair, - &program_keypair, - &elf, - ); - - // Finalize the noop program - let message = Message::new( - &[loader_instruction::finalize( - &program_keypair.pubkey(), - &bpf_loader::id(), - )], - Some(&mint_keypair.pubkey()), - ); - assert!(bank_client + bank_client .send_and_confirm_message(&[&mint_keypair, &program_keypair], message) - .is_ok()); + .unwrap(); - // Call the program, should get noop, not panic + // Call the noop program, should get noop not panic let message = Message::new( &[Instruction::new_with_bytes( program_keypair.pubkey(), @@ -1984,7 +1700,7 @@ fn test_program_bpf_upgrade() { let program_keypair = Keypair::new(); let program_id = program_keypair.pubkey(); let authority_keypair = Keypair::new(); - load_upgradeable_bpf_program( + load_upgradeable_program( &bank_client, &mint_keypair, &buffer_keypair, @@ -2005,7 +1721,7 @@ fn test_program_bpf_upgrade() { // Upgrade program let buffer_keypair = Keypair::new(); - upgrade_bpf_program( + upgrade_program( &bank_client, &mint_keypair, &buffer_keypair, @@ -2034,7 +1750,7 @@ fn test_program_bpf_upgrade() { // Upgrade back to the original program let buffer_keypair = Keypair::new(); - upgrade_bpf_program( + upgrade_program( &bank_client, &mint_keypair, &buffer_keypair, @@ -2073,7 +1789,7 @@ fn test_program_bpf_upgrade_and_invoke_in_same_tx() { let program_keypair = Keypair::new(); let program_id = program_keypair.pubkey(); let authority_keypair = Keypair::new(); - load_upgradeable_bpf_program( + load_upgradeable_program( &bank_client, &mint_keypair, &buffer_keypair, @@ -2142,7 +1858,7 @@ fn test_program_bpf_invoke_upgradeable_via_cpi() { let (name, id, entrypoint) = solana_bpf_loader_upgradeable_program!(); bank.add_builtin(&name, &id, entrypoint); let bank_client = BankClient::new(bank); - let invoke_and_return = load_bpf_program( + let invoke_and_return = create_deprecated_program( &bank_client, &bpf_loader::id(), &mint_keypair, @@ -2154,7 +1870,7 @@ fn test_program_bpf_invoke_upgradeable_via_cpi() { let program_keypair = Keypair::new(); let program_id = program_keypair.pubkey(); let authority_keypair = Keypair::new(); - load_upgradeable_bpf_program( + load_upgradeable_program( &bank_client, &mint_keypair, &buffer_keypair, @@ -2182,7 +1898,7 @@ fn test_program_bpf_invoke_upgradeable_via_cpi() { // Upgrade program let buffer_keypair = Keypair::new(); - upgrade_bpf_program( + upgrade_program( &bank_client, &mint_keypair, &buffer_keypair, @@ -2211,7 +1927,7 @@ fn test_program_bpf_invoke_upgradeable_via_cpi() { // Upgrade back to the original program let buffer_keypair = Keypair::new(); - upgrade_bpf_program( + upgrade_program( &bank_client, &mint_keypair, &buffer_keypair, @@ -2255,7 +1971,8 @@ fn test_program_bpf_disguised_as_bpf_loader() { bank.add_builtin(&name, &id, entrypoint); let bank_client = BankClient::new(bank); - let program_id = load_bpf_program(&bank_client, &bpf_loader::id(), &mint_keypair, program); + let program_id = + create_deprecated_program(&bank_client, &bpf_loader::id(), &mint_keypair, program); let account_metas = vec![AccountMeta::new_readonly(program_id, false)]; let instruction = Instruction::new_with_bytes(bpf_loader::id(), &[1], account_metas); let result = bank_client.send_and_confirm_instruction(&mint_keypair, instruction); @@ -2286,7 +2003,8 @@ fn test_program_bpf_c_dup() { let bank_client = BankClient::new(bank); - let program_id = load_bpf_program(&bank_client, &bpf_loader::id(), &mint_keypair, "ser"); + let program_id = + create_deprecated_program(&bank_client, &bpf_loader::id(), &mint_keypair, "ser"); let account_metas = vec![ AccountMeta::new_readonly(account_address, false), AccountMeta::new_readonly(account_address, false), @@ -2313,7 +2031,7 @@ fn test_program_bpf_upgrade_via_cpi() { let (name, id, entrypoint) = solana_bpf_loader_upgradeable_program!(); bank.add_builtin(&name, &id, entrypoint); let bank_client = BankClient::new(bank); - let invoke_and_return = load_bpf_program( + let invoke_and_return = create_deprecated_program( &bank_client, &bpf_loader::id(), &mint_keypair, @@ -2325,7 +2043,7 @@ fn test_program_bpf_upgrade_via_cpi() { let program_keypair = Keypair::new(); let program_id = program_keypair.pubkey(); let authority_keypair = Keypair::new(); - load_upgradeable_bpf_program( + load_upgradeable_program( &bank_client, &mint_keypair, &buffer_keypair, @@ -2363,19 +2081,13 @@ fn test_program_bpf_upgrade_via_cpi() { ); // Load the buffer account - let path = create_bpf_path("solana_bpf_rust_upgraded"); - let mut file = File::open(&path).unwrap_or_else(|err| { - panic!("Failed to open {}: {}", path.display(), err); - }); - let mut elf = Vec::new(); - file.read_to_end(&mut elf).unwrap(); let buffer_keypair = Keypair::new(); - load_buffer_account( + load_upgradeable_buffer( &bank_client, &mint_keypair, &buffer_keypair, &authority_keypair, - &elf, + "solana_bpf_rust_upgraded", ); // Upgrade program via CPI @@ -2427,7 +2139,7 @@ fn test_program_bpf_upgrade_self_via_cpi() { bank.add_builtin(&name, &id, entrypoint); let bank = Arc::new(bank); let bank_client = BankClient::new_shared(&bank); - let noop_program_id = load_bpf_program( + let noop_program_id = create_deprecated_program( &bank_client, &bpf_loader::id(), &mint_keypair, @@ -2439,7 +2151,7 @@ fn test_program_bpf_upgrade_self_via_cpi() { let program_keypair = Keypair::new(); let program_id = program_keypair.pubkey(); let authority_keypair = Keypair::new(); - load_upgradeable_bpf_program( + load_upgradeable_program( &bank_client, &mint_keypair, &buffer_keypair, @@ -2517,7 +2229,7 @@ fn test_program_bpf_set_upgrade_authority_via_cpi() { let bank_client = BankClient::new(bank); // Deploy CPI invoker program - let invoke_and_return = load_bpf_program( + let invoke_and_return = create_deprecated_program( &bank_client, &bpf_loader::id(), &mint_keypair, @@ -2529,7 +2241,7 @@ fn test_program_bpf_set_upgrade_authority_via_cpi() { let program_keypair = Keypair::new(); let program_id = program_keypair.pubkey(); let authority_keypair = Keypair::new(); - load_upgradeable_bpf_program( + load_upgradeable_program( &bank_client, &mint_keypair, &buffer_keypair, @@ -2608,7 +2320,7 @@ fn test_program_upgradeable_locks() { let bank = Arc::new(bank); let bank_client = BankClient::new_shared(&bank); - load_upgradeable_bpf_program( + load_upgradeable_program( &bank_client, &mint_keypair, buffer_keypair, @@ -2618,18 +2330,12 @@ fn test_program_upgradeable_locks() { ); // Load the buffer account - let path = create_bpf_path("solana_bpf_rust_noop"); - let mut file = File::open(&path).unwrap_or_else(|err| { - panic!("Failed to open {}: {}", path.display(), err); - }); - let mut elf = Vec::new(); - file.read_to_end(&mut elf).unwrap(); - load_buffer_account( + load_upgradeable_buffer( &bank_client, &mint_keypair, buffer_keypair, &payer_keypair, - &elf, + "solana_bpf_rust_noop", ); bank_client @@ -2735,46 +2441,30 @@ fn test_program_bpf_finalize() { let bank = Arc::new(bank); let bank_client = BankClient::new_shared(&bank); - let program_pubkey = load_bpf_program( + let program_pubkey = create_deprecated_program( &bank_client, &bpf_loader::id(), &mint_keypair, "solana_bpf_rust_finalize", ); - let noop_keypair = Keypair::new(); - // Write the noop program into the same program account - let elf = read_bpf_program("solana_bpf_rust_noop"); - let message = Message::new( - &[system_instruction::create_account( - &mint_keypair.pubkey(), - &noop_keypair.pubkey(), - 1, - elf.len() as u64 * 2, - &bpf_loader::id(), - )], - Some(&mint_keypair.pubkey()), - ); - assert!(bank_client - .send_and_confirm_message(&[&mint_keypair, &noop_keypair], message) - .is_ok()); - write_bpf_program( + let (program_keypair, _instruction) = load_and_finalize_deprecated_program( &bank_client, &bpf_loader::id(), + None, &mint_keypair, - &noop_keypair, - &elf, + "solana_bpf_rust_noop", ); let account_metas = vec![ - AccountMeta::new(noop_keypair.pubkey(), true), + AccountMeta::new(program_keypair.pubkey(), true), AccountMeta::new_readonly(bpf_loader::id(), false), AccountMeta::new(rent::id(), false), ]; let instruction = Instruction::new_with_bytes(program_pubkey, &[], account_metas.clone()); let message = Message::new(&[instruction], Some(&mint_keypair.pubkey())); - let result = bank_client.send_and_confirm_message(&[&mint_keypair, &noop_keypair], message); + let result = bank_client.send_and_confirm_message(&[&mint_keypair, &program_keypair], message); assert_eq!( result.unwrap_err().unwrap(), TransactionError::InstructionError(0, InstructionError::ProgramFailedToComplete) @@ -2797,7 +2487,7 @@ fn test_program_bpf_ro_account_modify() { let bank = Arc::new(bank); let bank_client = BankClient::new_shared(&bank); - let program_id = load_bpf_program( + let program_id = create_deprecated_program( &bank_client, &bpf_loader::id(), &mint_keypair, @@ -2864,7 +2554,7 @@ fn test_program_bpf_realloc() { let bank = Arc::new(bank); let bank_client = BankClient::new_shared(&bank); - let program_id = load_bpf_program( + let program_id = create_deprecated_program( &bank_client, &bpf_loader::id(), &mint_keypair, @@ -3161,14 +2851,14 @@ fn test_program_bpf_realloc_invoke() { let bank = Arc::new(bank); let bank_client = BankClient::new_shared(&bank); - let realloc_program_id = load_bpf_program( + let realloc_program_id = create_deprecated_program( &bank_client, &bpf_loader::id(), &mint_keypair, "solana_bpf_rust_realloc", ); - let realloc_invoke_program_id = load_bpf_program( + let realloc_invoke_program_id = create_deprecated_program( &bank_client, &bpf_loader::id(), &mint_keypair, @@ -3679,25 +3369,25 @@ fn test_program_bpf_processed_inner_instruction() { let bank = Arc::new(bank); let bank_client = BankClient::new_shared(&bank); - let sibling_program_id = load_bpf_program( + let sibling_program_id = create_deprecated_program( &bank_client, &bpf_loader::id(), &mint_keypair, "solana_bpf_rust_sibling_instructions", ); - let sibling_inner_program_id = load_bpf_program( + let sibling_inner_program_id = create_deprecated_program( &bank_client, &bpf_loader::id(), &mint_keypair, "solana_bpf_rust_sibling_inner_instructions", ); - let noop_program_id = load_bpf_program( + let noop_program_id = create_deprecated_program( &bank_client, &bpf_loader::id(), &mint_keypair, "solana_bpf_rust_noop", ); - let invoke_and_return_program_id = load_bpf_program( + let invoke_and_return_program_id = create_deprecated_program( &bank_client, &bpf_loader::id(), &mint_keypair, @@ -3762,7 +3452,7 @@ fn test_program_fees() { bank.add_builtin(&name, &id, entrypoint); let bank_client = BankClient::new(bank); - let program_id = load_bpf_program( + let program_id = create_deprecated_program( &bank_client, &bpf_loader::id(), &mint_keypair, @@ -3830,7 +3520,7 @@ fn test_get_minimum_delegation() { let bank = Arc::new(bank); let bank_client = BankClient::new_shared(&bank); - let program_id = load_bpf_program( + let program_id = create_deprecated_program( &bank_client, &bpf_loader::id(), &mint_keypair, @@ -3865,7 +3555,7 @@ fn test_program_bpf_inner_instruction_alignment_checks() { let bank_client = BankClient::new(bank); // load aligned program - let noop = load_bpf_program( + let noop = create_deprecated_program( &bank_client, &bpf_loader::id(), &mint_keypair, @@ -3873,7 +3563,7 @@ fn test_program_bpf_inner_instruction_alignment_checks() { ); // Load unaligned program - let inner_instruction_alignment_check = load_bpf_program( + let inner_instruction_alignment_check = create_deprecated_program( &bank_client, &bpf_loader_deprecated::id(), &mint_keypair, diff --git a/runtime/src/loader_utils.rs b/runtime/src/loader_utils.rs index d8ead330452b88..dc0a740c134ebf 100644 --- a/runtime/src/loader_utils.rs +++ b/runtime/src/loader_utils.rs @@ -10,65 +10,92 @@ use { signature::{Keypair, Signer}, system_instruction, }, + std::{env, fs::File, io::Read, path::PathBuf}, }; const CHUNK_SIZE: usize = 512; // Size of chunk just needs to fit into tx -pub fn load_program( - bank_client: &T, - from_keypair: &Keypair, - loader_pubkey: &Pubkey, - program: Vec, -) -> Pubkey { - let program_keypair = Keypair::new(); - let program_pubkey = program_keypair.pubkey(); - - let instruction = system_instruction::create_account( - &from_keypair.pubkey(), - &program_pubkey, - 1.max( - bank_client - .get_minimum_balance_for_rent_exemption(program.len()) - .unwrap(), - ), - program.len() as u64, - loader_pubkey, - ); - bank_client - .send_and_confirm_message( - &[from_keypair, &program_keypair], - Message::new(&[instruction], Some(&from_keypair.pubkey())), - ) - .unwrap(); +pub fn load_program_from_file(name: &str) -> Vec { + let mut pathbuf = { + let current_exe = env::current_exe().unwrap(); + PathBuf::from(current_exe.parent().unwrap().parent().unwrap()) + }; + pathbuf.push("bpf/"); + pathbuf.push(name); + pathbuf.set_extension("so"); + let mut file = File::open(&pathbuf).unwrap_or_else(|err| { + panic!("Failed to open {}: {}", pathbuf.display(), err); + }); + let mut program = Vec::new(); + file.read_to_end(&mut program).unwrap(); + program +} +pub fn load_and_finalize_deprecated_program( + bank_client: &T, + loader_id: &Pubkey, + program_keypair: Option, + payer_keypair: &Keypair, + name: &str, +) -> (Keypair, Instruction) { + let program = load_program_from_file(name); + let program_keypair = program_keypair.unwrap_or_else(|| { + let program_keypair = Keypair::new(); + let instruction = system_instruction::create_account( + &payer_keypair.pubkey(), + &program_keypair.pubkey(), + 1.max( + bank_client + .get_minimum_balance_for_rent_exemption(program.len()) + .unwrap(), + ), + program.len() as u64, + loader_id, + ); + let message = Message::new(&[instruction], Some(&payer_keypair.pubkey())); + bank_client + .send_and_confirm_message(&[payer_keypair, &program_keypair], message) + .unwrap(); + program_keypair + }); let chunk_size = CHUNK_SIZE; let mut offset = 0; for chunk in program.chunks(chunk_size) { let instruction = - loader_instruction::write(&program_pubkey, loader_pubkey, offset, chunk.to_vec()); - let message = Message::new(&[instruction], Some(&from_keypair.pubkey())); + loader_instruction::write(&program_keypair.pubkey(), loader_id, offset, chunk.to_vec()); + let message = Message::new(&[instruction], Some(&payer_keypair.pubkey())); bank_client - .send_and_confirm_message(&[from_keypair, &program_keypair], message) + .send_and_confirm_message(&[payer_keypair, &program_keypair], message) .unwrap(); offset += chunk_size as u32; } + let instruction = loader_instruction::finalize(&program_keypair.pubkey(), loader_id); + (program_keypair, instruction) +} - let instruction = loader_instruction::finalize(&program_pubkey, loader_pubkey); - let message = Message::new(&[instruction], Some(&from_keypair.pubkey())); +pub fn create_deprecated_program( + bank_client: &T, + loader_id: &Pubkey, + payer_keypair: &Keypair, + name: &str, +) -> Pubkey { + let (program_keypair, instruction) = + load_and_finalize_deprecated_program(bank_client, loader_id, None, payer_keypair, name); + let message = Message::new(&[instruction], Some(&payer_keypair.pubkey())); bank_client - .send_and_confirm_message(&[from_keypair, &program_keypair], message) + .send_and_confirm_message(&[payer_keypair, &program_keypair], message) .unwrap(); - - program_pubkey + program_keypair.pubkey() } -pub fn load_buffer_account( +pub fn load_upgradeable_buffer( bank_client: &T, from_keypair: &Keypair, buffer_keypair: &Keypair, buffer_authority_keypair: &Keypair, - program: &[u8], -) { + name: &str, +) -> Vec { + let program = load_program_from_file(name); let buffer_pubkey = buffer_keypair.pubkey(); let buffer_authority_pubkey = buffer_authority_keypair.pubkey(); @@ -110,6 +137,8 @@ pub fn load_buffer_account( .unwrap(); offset += chunk_size as u32; } + + program } pub fn load_upgradeable_program( @@ -118,17 +147,17 @@ pub fn load_upgradeable_program( buffer_keypair: &Keypair, executable_keypair: &Keypair, authority_keypair: &Keypair, - program: Vec, + name: &str, ) { let program_pubkey = executable_keypair.pubkey(); let authority_pubkey = authority_keypair.pubkey(); - load_buffer_account( + let program = load_upgradeable_buffer( bank_client, from_keypair, buffer_keypair, authority_keypair, - &program, + name, ); let message = Message::new( @@ -159,23 +188,30 @@ pub fn load_upgradeable_program( pub fn upgrade_program( bank_client: &T, - from_keypair: &Keypair, - program_pubkey: &Pubkey, - buffer_pubkey: &Pubkey, + payer_keypair: &Keypair, + buffer_keypair: &Keypair, + executable_pubkey: &Pubkey, authority_keypair: &Keypair, - spill_pubkey: &Pubkey, + name: &str, ) { + load_upgradeable_buffer( + bank_client, + payer_keypair, + buffer_keypair, + authority_keypair, + name, + ); let message = Message::new( &[bpf_loader_upgradeable::upgrade( - program_pubkey, - buffer_pubkey, + executable_pubkey, + &buffer_keypair.pubkey(), &authority_keypair.pubkey(), - spill_pubkey, + &payer_keypair.pubkey(), )], - Some(&from_keypair.pubkey()), + Some(&payer_keypair.pubkey()), ); bank_client - .send_and_confirm_message(&[from_keypair, authority_keypair], message) + .send_and_confirm_message(&[payer_keypair, authority_keypair], message) .unwrap(); } From 12d6fbf5e3ff822a126a91baf144e39144a4e142 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Thu, 19 Jan 2023 19:19:48 +0100 Subject: [PATCH 296/465] Adds symmetric tests for all cases of un-/re-/deployment inside the same transaction (backport #29725) (#29756) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Adds symmetric tests for all cases of un-/re-/deployment inside the same transaction (#29725) Unifies test_program_sbf_upgrade_and_invoke_in_same_tx() and test_program_sbf_upgrade_self_via_cpi() into test_program_sbf_invoke_in_same_tx_as_redeployment(). Adds test_program_sbf_invoke_in_same_tx_as_deployment() and test_program_sbf_invoke_in_same_tx_as_undeployment(). (cherry picked from commit c5380d46992e15931f2b6301ce841aebd125f94e) Co-authored-by: Alexander Meißner --- programs/bpf/tests/programs.rs | 361 ++++++++++++++++++++++----------- runtime/src/loader_utils.rs | 7 +- 2 files changed, 246 insertions(+), 122 deletions(-) diff --git a/programs/bpf/tests/programs.rs b/programs/bpf/tests/programs.rs index 72138c9e8ef929..8dfcbb0efe56fb 100644 --- a/programs/bpf/tests/programs.rs +++ b/programs/bpf/tests/programs.rs @@ -1770,7 +1770,7 @@ fn test_program_bpf_upgrade() { #[cfg(feature = "bpf_rust")] #[test] -fn test_program_bpf_upgrade_and_invoke_in_same_tx() { +fn test_program_bpf_invoke_in_same_tx_as_deployment() { solana_logger::setup(); let GenesisConfigInfo { @@ -1784,7 +1784,99 @@ fn test_program_bpf_upgrade_and_invoke_in_same_tx() { let bank = Arc::new(bank); let bank_client = BankClient::new_shared(&bank); - // Deploy upgrade program + // Deploy upgradeable program + let buffer_keypair = Keypair::new(); + let program_keypair = Keypair::new(); + let program_id = program_keypair.pubkey(); + let authority_keypair = Keypair::new(); + + // Deploy indirect invocation program + let indirect_program_keypair = Keypair::new(); + load_upgradeable_program( + &bank_client, + &mint_keypair, + &buffer_keypair, + &indirect_program_keypair, + &authority_keypair, + "solana_bpf_rust_invoke_and_return", + ); + + let invoke_instruction = + Instruction::new_with_bytes(program_id, &[0], vec![AccountMeta::new(clock::id(), false)]); + let indirect_invoke_instruction = Instruction::new_with_bytes( + indirect_program_keypair.pubkey(), + &[0], + vec![ + AccountMeta::new_readonly(program_id, false), + AccountMeta::new_readonly(clock::id(), false), + ], + ); + + // Prepare deployment + let program = load_upgradeable_buffer( + &bank_client, + &mint_keypair, + &buffer_keypair, + &authority_keypair, + "solana_bpf_rust_noop", + ); + let deployment_instructions = bpf_loader_upgradeable::deploy_with_max_program_len( + &mint_keypair.pubkey(), + &program_keypair.pubkey(), + &buffer_keypair.pubkey(), + &authority_keypair.pubkey(), + 1.max( + bank_client + .get_minimum_balance_for_rent_exemption( + bpf_loader_upgradeable::UpgradeableLoaderState::size_of_program(), + ) + .unwrap(), + ), + program.len() * 2, + ) + .unwrap(); + + // Deployment is invisible to top-level-instructions but visible to CPI instructions + for (invoke_instruction, expected) in [ + ( + invoke_instruction, + Err(TransactionError::ProgramAccountNotFound), + ), + (indirect_invoke_instruction, Ok(())), + ] { + let mut instructions = deployment_instructions.clone(); + instructions.push(invoke_instruction); + let tx = Transaction::new( + &[&mint_keypair, &program_keypair, &authority_keypair], + Message::new(&instructions, Some(&mint_keypair.pubkey())), + bank.last_blockhash(), + ); + let results = execute_transactions(&bank, vec![tx]); + if let Err(err) = expected { + assert_eq!(results[0].as_ref().unwrap_err(), &err); + } else { + assert!(results[0].is_ok()); + } + } +} + +#[test] +#[cfg(feature = "bpf_rust")] +fn test_program_bpf_invoke_in_same_tx_as_redeployment() { + solana_logger::setup(); + + let GenesisConfigInfo { + genesis_config, + mint_keypair, + .. + } = create_genesis_config(50); + let mut bank = Bank::new_for_tests(&genesis_config); + let (name, id, entrypoint) = solana_bpf_loader_upgradeable_program!(); + bank.add_builtin(&name, &id, entrypoint); + let bank = Arc::new(bank); + let bank_client = BankClient::new_shared(&bank); + + // Deploy upgradeable program let buffer_keypair = Keypair::new(); let program_keypair = Keypair::new(); let program_id = program_keypair.pubkey(); @@ -1798,48 +1890,172 @@ fn test_program_bpf_upgrade_and_invoke_in_same_tx() { "solana_bpf_rust_noop", ); + // Deploy indirect invocation program + let indirect_program_keypair = Keypair::new(); + load_upgradeable_program( + &bank_client, + &mint_keypair, + &buffer_keypair, + &indirect_program_keypair, + &authority_keypair, + "solana_bpf_rust_invoke_and_return", + ); + let invoke_instruction = Instruction::new_with_bytes(program_id, &[0], vec![AccountMeta::new(clock::id(), false)]); + let indirect_invoke_instruction = Instruction::new_with_bytes( + indirect_program_keypair.pubkey(), + &[0], + vec![ + AccountMeta::new_readonly(program_id, false), + AccountMeta::new_readonly(clock::id(), false), + ], + ); - // Call upgradeable program - let result = - bank_client.send_and_confirm_instruction(&mint_keypair, invoke_instruction.clone()); - assert!(result.is_ok()); + // Prepare redeployment + load_upgradeable_buffer( + &bank_client, + &mint_keypair, + &buffer_keypair, + &authority_keypair, + "solana_bpf_rust_panic", + ); + let redeployment_instruction = bpf_loader_upgradeable::upgrade( + &program_id, + &buffer_keypair.pubkey(), + &authority_keypair.pubkey(), + &mint_keypair.pubkey(), + ); - // Prepare for upgrade + // Redeployment is visible to both top-level-instructions and CPI instructions + for invoke_instruction in [invoke_instruction, indirect_invoke_instruction] { + // Call upgradeable program + let result = + bank_client.send_and_confirm_instruction(&mint_keypair, invoke_instruction.clone()); + assert!(result.is_ok()); + + // Upgrade the program and invoke in same tx + let message = Message::new( + &[redeployment_instruction.clone(), invoke_instruction], + Some(&mint_keypair.pubkey()), + ); + let tx = Transaction::new( + &[&mint_keypair, &authority_keypair], + message.clone(), + bank.last_blockhash(), + ); + let (result, _, _) = process_transaction_and_record_inner(&bank, tx); + assert_eq!( + result.unwrap_err(), + TransactionError::InstructionError(1, InstructionError::ProgramFailedToComplete), + ); + } +} + +#[test] +#[cfg(feature = "bpf_rust")] +fn test_program_bpf_invoke_in_same_tx_as_undeployment() { + solana_logger::setup(); + + let GenesisConfigInfo { + genesis_config, + mint_keypair, + .. + } = create_genesis_config(50); + let mut bank = Bank::new_for_tests(&genesis_config); + let (name, id, entrypoint) = solana_bpf_loader_upgradeable_program!(); + bank.add_builtin(&name, &id, entrypoint); + let bank = Arc::new(bank); + let bank_client = BankClient::new_shared(&bank); + + // Deploy upgradeable program let buffer_keypair = Keypair::new(); - load_upgradeable_buffer( + let program_keypair = Keypair::new(); + let program_id = program_keypair.pubkey(); + let authority_keypair = Keypair::new(); + load_upgradeable_program( + &bank_client, + &mint_keypair, + &buffer_keypair, + &program_keypair, + &authority_keypair, + "solana_bpf_rust_noop", + ); + + // Deploy indirect invocation program + let indirect_program_keypair = Keypair::new(); + load_upgradeable_program( &bank_client, &mint_keypair, &buffer_keypair, + &indirect_program_keypair, + &authority_keypair, + "solana_bpf_rust_invoke_and_return", + ); + + // Deploy panic program + let panic_program_keypair = Keypair::new(); + load_upgradeable_program( + &bank_client, + &mint_keypair, + &buffer_keypair, + &panic_program_keypair, &authority_keypair, "solana_bpf_rust_panic", ); - // Invoke, then upgrade the program, and then invoke again in same tx - let message = Message::new( - &[ - invoke_instruction.clone(), - bpf_loader_upgradeable::upgrade( - &program_id, - &buffer_keypair.pubkey(), - &authority_keypair.pubkey(), - &mint_keypair.pubkey(), - ), - invoke_instruction, + let invoke_instruction = + Instruction::new_with_bytes(program_id, &[0], vec![AccountMeta::new(clock::id(), false)]); + let indirect_invoke_instruction = Instruction::new_with_bytes( + indirect_program_keypair.pubkey(), + &[0], + vec![ + AccountMeta::new_readonly(program_id, false), + AccountMeta::new_readonly(clock::id(), false), ], - Some(&mint_keypair.pubkey()), ); - let tx = Transaction::new( - &[&mint_keypair, &authority_keypair], - message.clone(), - bank.last_blockhash(), + let panic_instruction = + Instruction::new_with_bytes(panic_program_keypair.pubkey(), &[], vec![]); + + // Prepare undeployment + let (programdata_address, _) = Pubkey::find_program_address( + &[program_keypair.pubkey().as_ref()], + &bpf_loader_upgradeable::id(), ); - let (result, _, _) = process_transaction_and_record_inner(&bank, tx); - assert_eq!( - result.unwrap_err(), - TransactionError::InstructionError(2, InstructionError::ProgramFailedToComplete) + let undeployment_instruction = bpf_loader_upgradeable::close_any( + &programdata_address, + &mint_keypair.pubkey(), + Some(&authority_keypair.pubkey()), + Some(&program_id), ); + + // Undeployment is invisible to both top-level-instructions and CPI instructions + for invoke_instruction in [invoke_instruction, indirect_invoke_instruction] { + // Call upgradeable program + let result = + bank_client.send_and_confirm_instruction(&mint_keypair, invoke_instruction.clone()); + assert!(result.is_ok()); + + // Upgrade the program and invoke in same tx + let message = Message::new( + &[ + undeployment_instruction.clone(), + invoke_instruction, + panic_instruction.clone(), // Make sure the TX fails, so we don't have to deploy another program + ], + Some(&mint_keypair.pubkey()), + ); + let tx = Transaction::new( + &[&mint_keypair, &authority_keypair], + message.clone(), + bank.last_blockhash(), + ); + let (result, _, _) = process_transaction_and_record_inner(&bank, tx); + assert_eq!( + result.unwrap_err(), + TransactionError::InstructionError(2, InstructionError::ProgramFailedToComplete), + ); + } } #[cfg(feature = "bpf_rust")] @@ -2122,95 +2338,6 @@ fn test_program_bpf_upgrade_via_cpi() { assert_ne!(programdata, original_programdata); } -#[cfg(feature = "bpf_rust")] -#[test] -fn test_program_bpf_upgrade_self_via_cpi() { - solana_logger::setup(); - - let GenesisConfigInfo { - genesis_config, - mint_keypair, - .. - } = create_genesis_config(50); - let mut bank = Bank::new_for_tests(&genesis_config); - let (name, id, entrypoint) = solana_bpf_loader_program!(); - bank.add_builtin(&name, &id, entrypoint); - let (name, id, entrypoint) = solana_bpf_loader_upgradeable_program!(); - bank.add_builtin(&name, &id, entrypoint); - let bank = Arc::new(bank); - let bank_client = BankClient::new_shared(&bank); - let noop_program_id = create_deprecated_program( - &bank_client, - &bpf_loader::id(), - &mint_keypair, - "solana_bpf_rust_noop", - ); - - // Deploy upgradeable program - let buffer_keypair = Keypair::new(); - let program_keypair = Keypair::new(); - let program_id = program_keypair.pubkey(); - let authority_keypair = Keypair::new(); - load_upgradeable_program( - &bank_client, - &mint_keypair, - &buffer_keypair, - &program_keypair, - &authority_keypair, - "solana_bpf_rust_invoke_and_return", - ); - - let mut invoke_instruction = Instruction::new_with_bytes( - program_id, - &[0], - vec![ - AccountMeta::new_readonly(noop_program_id, false), - AccountMeta::new_readonly(clock::id(), false), - ], - ); - - // Call the upgraded program - invoke_instruction.data[0] += 1; - let result = - bank_client.send_and_confirm_instruction(&mint_keypair, invoke_instruction.clone()); - assert!(result.is_ok()); - - // Prepare for upgrade - let buffer_keypair = Keypair::new(); - load_upgradeable_buffer( - &bank_client, - &mint_keypair, - &buffer_keypair, - &authority_keypair, - "solana_bpf_rust_panic", - ); - - // Invoke, then upgrade the program, and then invoke again in same tx - let message = Message::new( - &[ - invoke_instruction.clone(), - bpf_loader_upgradeable::upgrade( - &program_id, - &buffer_keypair.pubkey(), - &authority_keypair.pubkey(), - &mint_keypair.pubkey(), - ), - invoke_instruction, - ], - Some(&mint_keypair.pubkey()), - ); - let tx = Transaction::new( - &[&mint_keypair, &authority_keypair], - message.clone(), - bank.last_blockhash(), - ); - let (result, _, _) = process_transaction_and_record_inner(&bank, tx); - assert_eq!( - result.unwrap_err(), - TransactionError::InstructionError(2, InstructionError::ProgramFailedToComplete) - ); -} - #[cfg(feature = "bpf_rust")] #[test] fn test_program_bpf_set_upgrade_authority_via_cpi() { diff --git a/runtime/src/loader_utils.rs b/runtime/src/loader_utils.rs index dc0a740c134ebf..23bb5d56e9527e 100644 --- a/runtime/src/loader_utils.rs +++ b/runtime/src/loader_utils.rs @@ -149,9 +149,6 @@ pub fn load_upgradeable_program( authority_keypair: &Keypair, name: &str, ) { - let program_pubkey = executable_keypair.pubkey(); - let authority_pubkey = authority_keypair.pubkey(); - let program = load_upgradeable_buffer( bank_client, from_keypair, @@ -163,9 +160,9 @@ pub fn load_upgradeable_program( let message = Message::new( &bpf_loader_upgradeable::deploy_with_max_program_len( &from_keypair.pubkey(), - &program_pubkey, + &executable_keypair.pubkey(), &buffer_keypair.pubkey(), - &authority_pubkey, + &authority_keypair.pubkey(), 1.max( bank_client .get_minimum_balance_for_rent_exemption( From 9238cd7ab8c5ec5fac965a5e847586e7a3906d6f Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 19 Jan 2023 12:27:04 -0600 Subject: [PATCH 297/465] Bump Version to 1.14.14 (#29782) Co-authored-by: willhickey --- Cargo.lock | 484 ++++++++--------- account-decoder/Cargo.toml | 10 +- accounts-bench/Cargo.toml | 12 +- accounts-cluster-bench/Cargo.toml | 34 +- banking-bench/Cargo.toml | 26 +- banks-client/Cargo.toml | 12 +- banks-interface/Cargo.toml | 4 +- banks-server/Cargo.toml | 12 +- bench-streamer/Cargo.toml | 8 +- bench-tps/Cargo.toml | 38 +- bloom/Cargo.toml | 8 +- bucket_map/Cargo.toml | 8 +- clap-utils/Cargo.toml | 8 +- clap-v3-utils/Cargo.toml | 8 +- cli-config/Cargo.toml | 6 +- cli-output/Cargo.toml | 16 +- cli/Cargo.toml | 38 +- client-test/Cargo.toml | 32 +- client/Cargo.toml | 28 +- core/Cargo.toml | 56 +- dos/Cargo.toml | 30 +- download-utils/Cargo.toml | 6 +- entry/Cargo.toml | 16 +- faucet/Cargo.toml | 14 +- frozen-abi/Cargo.toml | 6 +- frozen-abi/macro/Cargo.toml | 2 +- genesis-utils/Cargo.toml | 8 +- genesis/Cargo.toml | 22 +- geyser-plugin-interface/Cargo.toml | 6 +- geyser-plugin-manager/Cargo.toml | 16 +- gossip/Cargo.toml | 38 +- install/Cargo.toml | 14 +- keygen/Cargo.toml | 12 +- ledger-tool/Cargo.toml | 30 +- ledger/Cargo.toml | 40 +- local-cluster/Cargo.toml | 28 +- log-analyzer/Cargo.toml | 6 +- logger/Cargo.toml | 2 +- measure/Cargo.toml | 4 +- merkle-root-bench/Cargo.toml | 12 +- merkle-tree/Cargo.toml | 4 +- metrics/Cargo.toml | 4 +- net-shaper/Cargo.toml | 4 +- net-utils/Cargo.toml | 8 +- notifier/Cargo.toml | 2 +- perf/Cargo.toml | 12 +- poh-bench/Cargo.toml | 14 +- poh/Cargo.toml | 20 +- program-runtime/Cargo.toml | 14 +- program-test/Cargo.toml | 20 +- .../address-lookup-table-tests/Cargo.toml | 8 +- programs/address-lookup-table/Cargo.toml | 12 +- programs/bpf-loader-tests/Cargo.toml | 8 +- programs/bpf/Cargo.lock | 490 +++++++++--------- programs/bpf/Cargo.toml | 28 +- programs/bpf/rust/128bit/Cargo.toml | 6 +- programs/bpf/rust/128bit_dep/Cargo.toml | 4 +- programs/bpf/rust/alloc/Cargo.toml | 4 +- programs/bpf/rust/call_depth/Cargo.toml | 4 +- programs/bpf/rust/caller_access/Cargo.toml | 4 +- programs/bpf/rust/curve25519/Cargo.toml | 6 +- programs/bpf/rust/custom_heap/Cargo.toml | 4 +- programs/bpf/rust/dep_crate/Cargo.toml | 6 +- .../bpf/rust/deprecated_loader/Cargo.toml | 4 +- programs/bpf/rust/dup_accounts/Cargo.toml | 4 +- programs/bpf/rust/error_handling/Cargo.toml | 4 +- programs/bpf/rust/external_spend/Cargo.toml | 4 +- programs/bpf/rust/finalize/Cargo.toml | 4 +- .../rust/get_minimum_delegation/Cargo.toml | 4 +- .../Cargo.toml | 4 +- .../rust/instruction_introspection/Cargo.toml | 4 +- programs/bpf/rust/invoke/Cargo.toml | 4 +- programs/bpf/rust/invoke_and_error/Cargo.toml | 4 +- programs/bpf/rust/invoke_and_ok/Cargo.toml | 4 +- .../bpf/rust/invoke_and_return/Cargo.toml | 4 +- programs/bpf/rust/invoked/Cargo.toml | 4 +- programs/bpf/rust/iter/Cargo.toml | 4 +- programs/bpf/rust/log_data/Cargo.toml | 4 +- programs/bpf/rust/many_args/Cargo.toml | 6 +- programs/bpf/rust/many_args_dep/Cargo.toml | 4 +- programs/bpf/rust/mem/Cargo.toml | 10 +- programs/bpf/rust/membuiltins/Cargo.toml | 6 +- programs/bpf/rust/noop/Cargo.toml | 4 +- programs/bpf/rust/panic/Cargo.toml | 4 +- programs/bpf/rust/param_passing/Cargo.toml | 6 +- .../bpf/rust/param_passing_dep/Cargo.toml | 4 +- programs/bpf/rust/rand/Cargo.toml | 4 +- programs/bpf/rust/realloc/Cargo.toml | 4 +- programs/bpf/rust/realloc_invoke/Cargo.toml | 6 +- .../bpf/rust/ro_account_modify/Cargo.toml | 4 +- programs/bpf/rust/ro_modify/Cargo.toml | 4 +- programs/bpf/rust/sanity/Cargo.toml | 10 +- .../bpf/rust/secp256k1_recover/Cargo.toml | 4 +- programs/bpf/rust/sha/Cargo.toml | 4 +- .../rust/sibling_inner_instruction/Cargo.toml | 4 +- .../bpf/rust/sibling_instruction/Cargo.toml | 4 +- programs/bpf/rust/simulation/Cargo.toml | 12 +- programs/bpf/rust/spoof1/Cargo.toml | 4 +- programs/bpf/rust/spoof1_system/Cargo.toml | 4 +- programs/bpf/rust/sysvar/Cargo.toml | 10 +- programs/bpf/rust/upgradeable/Cargo.toml | 4 +- programs/bpf/rust/upgraded/Cargo.toml | 4 +- programs/bpf_loader/Cargo.toml | 14 +- .../bpf_loader/gen-syscall-list/Cargo.toml | 2 +- programs/compute-budget/Cargo.toml | 6 +- programs/config/Cargo.toml | 8 +- programs/ed25519-tests/Cargo.toml | 6 +- programs/stake/Cargo.toml | 18 +- programs/vote/Cargo.toml | 14 +- programs/zk-token-proof/Cargo.toml | 8 +- rayon-threadlimit/Cargo.toml | 2 +- rbpf-cli/Cargo.toml | 10 +- remote-wallet/Cargo.toml | 4 +- rpc-test/Cargo.toml | 18 +- rpc/Cargo.toml | 48 +- runtime/Cargo.toml | 34 +- runtime/store-tool/Cargo.toml | 8 +- sdk/Cargo.toml | 12 +- sdk/cargo-build-bpf/Cargo.toml | 4 +- sdk/cargo-build-sbf/Cargo.toml | 8 +- .../tests/crates/fail/Cargo.toml | 4 +- .../tests/crates/noop/Cargo.toml | 4 +- sdk/cargo-test-bpf/Cargo.toml | 2 +- sdk/cargo-test-sbf/Cargo.toml | 2 +- sdk/gen-headers/Cargo.toml | 2 +- sdk/macro/Cargo.toml | 2 +- sdk/program/Cargo.toml | 10 +- send-transaction-service/Cargo.toml | 14 +- stake-accounts/Cargo.toml | 16 +- storage-bigtable/Cargo.toml | 10 +- storage-bigtable/build-proto/Cargo.lock | 2 +- storage-bigtable/build-proto/Cargo.toml | 2 +- storage-proto/Cargo.toml | 8 +- streamer/Cargo.toml | 10 +- sys-tuner/Cargo.toml | 6 +- test-validator/Cargo.toml | 28 +- tokens/Cargo.toml | 24 +- transaction-dos/Cargo.toml | 32 +- transaction-status/Cargo.toml | 14 +- upload-perf/Cargo.toml | 4 +- validator/Cargo.toml | 50 +- version/Cargo.toml | 8 +- watchtower/Cargo.toml | 20 +- zk-token-sdk/Cargo.toml | 6 +- 144 files changed, 1270 insertions(+), 1270 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 500f45d7a056ef..dde95047c58ff7 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1688,7 +1688,7 @@ dependencies = [ [[package]] name = "gen-headers" -version = "1.14.13" +version = "1.14.14" dependencies = [ "log", "regex", @@ -1696,7 +1696,7 @@ dependencies = [ [[package]] name = "gen-syscall-list" -version = "1.14.13" +version = "1.14.14" dependencies = [ "regex", ] @@ -3747,15 +3747,15 @@ dependencies = [ [[package]] name = "rbpf-cli" -version = "1.14.13" +version = "1.14.14" dependencies = [ "clap 3.1.8", "serde", "serde_json", "solana-bpf-loader-program", - "solana-logger 1.14.13", + "solana-logger 1.14.14", "solana-program-runtime", - "solana-sdk 1.14.13", + "solana-sdk 1.14.14", "solana_rbpf", ] @@ -4467,7 +4467,7 @@ dependencies = [ [[package]] name = "solana-account-decoder" -version = "1.14.13" +version = "1.14.14" dependencies = [ "Inflector", "base64 0.13.0", @@ -4480,7 +4480,7 @@ dependencies = [ "serde_json", "solana-address-lookup-table-program", "solana-config-program", - "solana-sdk 1.14.13", + "solana-sdk 1.14.14", "solana-vote-program", "spl-token", "spl-token-2022", @@ -4490,21 +4490,21 @@ dependencies = [ [[package]] name = "solana-accounts-bench" -version = "1.14.13" +version = "1.14.14" dependencies = [ "clap 2.33.3", "log", "rayon", - "solana-logger 1.14.13", + "solana-logger 1.14.14", "solana-measure", "solana-runtime", - "solana-sdk 1.14.13", + "solana-sdk 1.14.14", "solana-version", ] [[package]] name = "solana-accounts-cluster-bench" -version = "1.14.13" +version = "1.14.14" dependencies = [ "clap 2.33.3", "log", @@ -4517,11 +4517,11 @@ dependencies = [ "solana-faucet", "solana-gossip", "solana-local-cluster", - "solana-logger 1.14.13", + "solana-logger 1.14.14", "solana-measure", "solana-net-utils", "solana-runtime", - "solana-sdk 1.14.13", + "solana-sdk 1.14.14", "solana-streamer", "solana-test-validator", "solana-transaction-status", @@ -4531,7 +4531,7 @@ dependencies = [ [[package]] name = "solana-address-lookup-table-program" -version = "1.14.13" +version = "1.14.14" dependencies = [ "bincode", "bytemuck", @@ -4540,28 +4540,28 @@ dependencies = [ "num-traits", "rustc_version 0.4.0", "serde", - "solana-frozen-abi 1.14.13", - "solana-frozen-abi-macro 1.14.13", - "solana-program 1.14.13", + "solana-frozen-abi 1.14.14", + "solana-frozen-abi-macro 1.14.14", + "solana-program 1.14.14", "solana-program-runtime", - "solana-sdk 1.14.13", + "solana-sdk 1.14.14", "thiserror", ] [[package]] name = "solana-address-lookup-table-program-tests" -version = "1.14.13" +version = "1.14.14" dependencies = [ "assert_matches", "bincode", "solana-address-lookup-table-program", "solana-program-test", - "solana-sdk 1.14.13", + "solana-sdk 1.14.14", ] [[package]] name = "solana-banking-bench" -version = "1.14.13" +version = "1.14.14" dependencies = [ "clap 3.1.8", "crossbeam-channel", @@ -4572,27 +4572,27 @@ dependencies = [ "solana-core", "solana-gossip", "solana-ledger", - "solana-logger 1.14.13", + "solana-logger 1.14.14", "solana-measure", "solana-perf", "solana-poh", "solana-runtime", - "solana-sdk 1.14.13", + "solana-sdk 1.14.14", "solana-streamer", "solana-version", ] [[package]] name = "solana-banks-client" -version = "1.14.13" +version = "1.14.14" dependencies = [ "borsh", "futures 0.3.21", "solana-banks-interface", "solana-banks-server", - "solana-program 1.14.13", + "solana-program 1.14.14", "solana-runtime", - "solana-sdk 1.14.13", + "solana-sdk 1.14.14", "tarpc", "thiserror", "tokio", @@ -4601,16 +4601,16 @@ dependencies = [ [[package]] name = "solana-banks-interface" -version = "1.14.13" +version = "1.14.14" dependencies = [ "serde", - "solana-sdk 1.14.13", + "solana-sdk 1.14.14", "tarpc", ] [[package]] name = "solana-banks-server" -version = "1.14.13" +version = "1.14.14" dependencies = [ "bincode", "crossbeam-channel", @@ -4618,7 +4618,7 @@ dependencies = [ "solana-banks-interface", "solana-client", "solana-runtime", - "solana-sdk 1.14.13", + "solana-sdk 1.14.14", "solana-send-transaction-service", "tarpc", "tokio", @@ -4628,7 +4628,7 @@ dependencies = [ [[package]] name = "solana-bench-streamer" -version = "1.14.13" +version = "1.14.14" dependencies = [ "clap 3.1.8", "crossbeam-channel", @@ -4639,7 +4639,7 @@ dependencies = [ [[package]] name = "solana-bench-tps" -version = "1.14.13" +version = "1.14.14" dependencies = [ "clap 2.33.3", "crossbeam-channel", @@ -4656,13 +4656,13 @@ dependencies = [ "solana-genesis", "solana-gossip", "solana-local-cluster", - "solana-logger 1.14.13", + "solana-logger 1.14.14", "solana-measure", "solana-metrics", "solana-net-utils", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.13", + "solana-sdk 1.14.14", "solana-streamer", "solana-test-validator", "solana-version", @@ -4671,7 +4671,7 @@ dependencies = [ [[package]] name = "solana-bloom" -version = "1.14.13" +version = "1.14.14" dependencies = [ "bv", "fnv", @@ -4681,14 +4681,14 @@ dependencies = [ "rustc_version 0.4.0", "serde", "serde_derive", - "solana-frozen-abi 1.14.13", - "solana-frozen-abi-macro 1.14.13", - "solana-sdk 1.14.13", + "solana-frozen-abi 1.14.14", + "solana-frozen-abi-macro 1.14.14", + "solana-sdk 1.14.14", ] [[package]] name = "solana-bpf-loader-program" -version = "1.14.13" +version = "1.14.14" dependencies = [ "bincode", "byteorder", @@ -4699,26 +4699,26 @@ dependencies = [ "solana-metrics", "solana-program-runtime", "solana-runtime", - "solana-sdk 1.14.13", - "solana-zk-token-sdk 1.14.13", + "solana-sdk 1.14.14", + "solana-zk-token-sdk 1.14.14", "solana_rbpf", "thiserror", ] [[package]] name = "solana-bpf-loader-program-tests" -version = "1.14.13" +version = "1.14.14" dependencies = [ "assert_matches", "bincode", "solana-bpf-loader-program", "solana-program-test", - "solana-sdk 1.14.13", + "solana-sdk 1.14.14", ] [[package]] name = "solana-bucket-map" -version = "1.14.13" +version = "1.14.14" dependencies = [ "fs_extra", "log", @@ -4726,24 +4726,24 @@ dependencies = [ "modular-bitfield", "rand 0.7.3", "rayon", - "solana-logger 1.14.13", + "solana-logger 1.14.14", "solana-measure", - "solana-sdk 1.14.13", + "solana-sdk 1.14.14", "tempfile", ] [[package]] name = "solana-cargo-build-bpf" -version = "1.14.13" +version = "1.14.14" dependencies = [ "cargo_metadata", "clap 3.1.8", - "solana-sdk 1.14.13", + "solana-sdk 1.14.14", ] [[package]] name = "solana-cargo-build-sbf" -version = "1.14.13" +version = "1.14.14" dependencies = [ "bzip2", "cargo_metadata", @@ -4752,14 +4752,14 @@ dependencies = [ "regex", "serial_test", "solana-download-utils", - "solana-logger 1.14.13", - "solana-sdk 1.14.13", + "solana-logger 1.14.14", + "solana-sdk 1.14.14", "tar", ] [[package]] name = "solana-cargo-test-bpf" -version = "1.14.13" +version = "1.14.14" dependencies = [ "cargo_metadata", "clap 3.1.8", @@ -4767,7 +4767,7 @@ dependencies = [ [[package]] name = "solana-cargo-test-sbf" -version = "1.14.13" +version = "1.14.14" dependencies = [ "cargo_metadata", "clap 3.1.8", @@ -4775,14 +4775,14 @@ dependencies = [ [[package]] name = "solana-clap-utils" -version = "1.14.13" +version = "1.14.14" dependencies = [ "chrono", "clap 2.33.3", "rpassword", "solana-perf", "solana-remote-wallet", - "solana-sdk 1.14.13", + "solana-sdk 1.14.14", "tempfile", "thiserror", "tiny-bip39", @@ -4792,14 +4792,14 @@ dependencies = [ [[package]] name = "solana-clap-v3-utils" -version = "1.14.13" +version = "1.14.14" dependencies = [ "chrono", "clap 3.1.8", "rpassword", "solana-perf", "solana-remote-wallet", - "solana-sdk 1.14.13", + "solana-sdk 1.14.14", "tempfile", "thiserror", "tiny-bip39", @@ -4809,7 +4809,7 @@ dependencies = [ [[package]] name = "solana-cli" -version = "1.14.13" +version = "1.14.14" dependencies = [ "bincode", "bs58", @@ -4837,10 +4837,10 @@ dependencies = [ "solana-client", "solana-config-program", "solana-faucet", - "solana-logger 1.14.13", + "solana-logger 1.14.14", "solana-program-runtime", "solana-remote-wallet", - "solana-sdk 1.14.13", + "solana-sdk 1.14.14", "solana-streamer", "solana-test-validator", "solana-transaction-status", @@ -4855,7 +4855,7 @@ dependencies = [ [[package]] name = "solana-cli-config" -version = "1.14.13" +version = "1.14.14" dependencies = [ "anyhow", "dirs-next", @@ -4864,13 +4864,13 @@ dependencies = [ "serde_derive", "serde_yaml", "solana-clap-utils", - "solana-sdk 1.14.13", + "solana-sdk 1.14.14", "url 2.2.2", ] [[package]] name = "solana-cli-output" -version = "1.14.13" +version = "1.14.14" dependencies = [ "Inflector", "base64 0.13.0", @@ -4888,7 +4888,7 @@ dependencies = [ "solana-clap-utils", "solana-cli-config", "solana-client", - "solana-sdk 1.14.13", + "solana-sdk 1.14.14", "solana-transaction-status", "solana-vote-program", "spl-memo", @@ -4896,7 +4896,7 @@ dependencies = [ [[package]] name = "solana-client" -version = "1.14.13" +version = "1.14.14" dependencies = [ "anyhow", "assert_matches", @@ -4932,12 +4932,12 @@ dependencies = [ "solana-account-decoder", "solana-clap-utils", "solana-faucet", - "solana-logger 1.14.13", + "solana-logger 1.14.14", "solana-measure", "solana-metrics", "solana-net-utils", "solana-perf", - "solana-sdk 1.14.13", + "solana-sdk 1.14.14", "solana-streamer", "solana-transaction-status", "solana-version", @@ -4953,14 +4953,14 @@ dependencies = [ [[package]] name = "solana-client-test" -version = "1.14.13" +version = "1.14.14" dependencies = [ "futures-util", "serde_json", "serial_test", "solana-client", "solana-ledger", - "solana-logger 1.14.13", + "solana-logger 1.14.14", "solana-measure", "solana-merkle-tree", "solana-metrics", @@ -4968,7 +4968,7 @@ dependencies = [ "solana-rayon-threadlimit", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.13", + "solana-sdk 1.14.14", "solana-streamer", "solana-test-validator", "solana-transaction-status", @@ -4979,28 +4979,28 @@ dependencies = [ [[package]] name = "solana-compute-budget-program" -version = "1.14.13" +version = "1.14.14" dependencies = [ "solana-program-runtime", - "solana-sdk 1.14.13", + "solana-sdk 1.14.14", ] [[package]] name = "solana-config-program" -version = "1.14.13" +version = "1.14.14" dependencies = [ "bincode", "chrono", "serde", "serde_derive", - "solana-logger 1.14.13", + "solana-logger 1.14.14", "solana-program-runtime", - "solana-sdk 1.14.13", + "solana-sdk 1.14.14", ] [[package]] name = "solana-core" -version = "1.14.13" +version = "1.14.14" dependencies = [ "ahash", "base64 0.13.0", @@ -5033,12 +5033,12 @@ dependencies = [ "solana-bloom", "solana-client", "solana-entry", - "solana-frozen-abi 1.14.13", - "solana-frozen-abi-macro 1.14.13", + "solana-frozen-abi 1.14.14", + "solana-frozen-abi-macro 1.14.14", "solana-geyser-plugin-manager", "solana-gossip", "solana-ledger", - "solana-logger 1.14.13", + "solana-logger 1.14.14", "solana-measure", "solana-metrics", "solana-net-utils", @@ -5048,7 +5048,7 @@ dependencies = [ "solana-rayon-threadlimit", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.13", + "solana-sdk 1.14.14", "solana-send-transaction-service", "solana-stake-program", "solana-streamer", @@ -5068,7 +5068,7 @@ dependencies = [ [[package]] name = "solana-dos" -version = "1.14.13" +version = "1.14.14" dependencies = [ "bincode", "clap 3.1.8", @@ -5084,42 +5084,42 @@ dependencies = [ "solana-faucet", "solana-gossip", "solana-local-cluster", - "solana-logger 1.14.13", + "solana-logger 1.14.14", "solana-measure", "solana-net-utils", "solana-perf", "solana-rpc", - "solana-sdk 1.14.13", + "solana-sdk 1.14.14", "solana-streamer", "solana-version", ] [[package]] name = "solana-download-utils" -version = "1.14.13" +version = "1.14.14" dependencies = [ "console", "indicatif", "log", "reqwest", "solana-runtime", - "solana-sdk 1.14.13", + "solana-sdk 1.14.14", ] [[package]] name = "solana-ed25519-program-tests" -version = "1.14.13" +version = "1.14.14" dependencies = [ "assert_matches", "ed25519-dalek", "rand 0.7.3", "solana-program-test", - "solana-sdk 1.14.13", + "solana-sdk 1.14.14", ] [[package]] name = "solana-entry" -version = "1.14.13" +version = "1.14.14" dependencies = [ "bincode", "crossbeam-channel", @@ -5131,18 +5131,18 @@ dependencies = [ "rand 0.7.3", "rayon", "serde", - "solana-logger 1.14.13", + "solana-logger 1.14.14", "solana-measure", "solana-merkle-tree", "solana-metrics", "solana-perf", "solana-rayon-threadlimit", - "solana-sdk 1.14.13", + "solana-sdk 1.14.14", ] [[package]] name = "solana-faucet" -version = "1.14.13" +version = "1.14.14" dependencies = [ "bincode", "byteorder", @@ -5153,9 +5153,9 @@ dependencies = [ "serde_derive", "solana-clap-utils", "solana-cli-config", - "solana-logger 1.14.13", + "solana-logger 1.14.14", "solana-metrics", - "solana-sdk 1.14.13", + "solana-sdk 1.14.14", "solana-version", "spl-memo", "thiserror", @@ -5198,7 +5198,7 @@ dependencies = [ [[package]] name = "solana-frozen-abi" -version = "1.14.13" +version = "1.14.14" dependencies = [ "ahash", "blake3", @@ -5223,8 +5223,8 @@ dependencies = [ "serde_derive", "serde_json", "sha2 0.10.2", - "solana-frozen-abi-macro 1.14.13", - "solana-logger 1.14.13", + "solana-frozen-abi-macro 1.14.14", + "solana-logger 1.14.14", "subtle", "thiserror", ] @@ -5243,7 +5243,7 @@ dependencies = [ [[package]] name = "solana-frozen-abi-macro" -version = "1.14.13" +version = "1.14.14" dependencies = [ "proc-macro2 1.0.41", "quote 1.0.18", @@ -5253,7 +5253,7 @@ dependencies = [ [[package]] name = "solana-genesis" -version = "1.14.13" +version = "1.14.14" dependencies = [ "base64 0.13.0", "clap 2.33.3", @@ -5264,9 +5264,9 @@ dependencies = [ "solana-cli-config", "solana-entry", "solana-ledger", - "solana-logger 1.14.13", + "solana-logger 1.14.14", "solana-runtime", - "solana-sdk 1.14.13", + "solana-sdk 1.14.14", "solana-stake-program", "solana-version", "solana-vote-program", @@ -5275,26 +5275,26 @@ dependencies = [ [[package]] name = "solana-genesis-utils" -version = "1.14.13" +version = "1.14.14" dependencies = [ "solana-download-utils", "solana-runtime", - "solana-sdk 1.14.13", + "solana-sdk 1.14.14", ] [[package]] name = "solana-geyser-plugin-interface" -version = "1.14.13" +version = "1.14.14" dependencies = [ "log", - "solana-sdk 1.14.13", + "solana-sdk 1.14.14", "solana-transaction-status", "thiserror", ] [[package]] name = "solana-geyser-plugin-manager" -version = "1.14.13" +version = "1.14.14" dependencies = [ "bs58", "crossbeam-channel", @@ -5307,14 +5307,14 @@ dependencies = [ "solana-metrics", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.13", + "solana-sdk 1.14.14", "solana-transaction-status", "thiserror", ] [[package]] name = "solana-gossip" -version = "1.14.13" +version = "1.14.14" dependencies = [ "bincode", "bv", @@ -5341,17 +5341,17 @@ dependencies = [ "solana-clap-utils", "solana-client", "solana-entry", - "solana-frozen-abi 1.14.13", - "solana-frozen-abi-macro 1.14.13", + "solana-frozen-abi 1.14.14", + "solana-frozen-abi-macro 1.14.14", "solana-ledger", - "solana-logger 1.14.13", + "solana-logger 1.14.14", "solana-measure", "solana-metrics", "solana-net-utils", "solana-perf", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.14.13", + "solana-sdk 1.14.14", "solana-streamer", "solana-version", "solana-vote-program", @@ -5360,7 +5360,7 @@ dependencies = [ [[package]] name = "solana-install" -version = "1.14.13" +version = "1.14.14" dependencies = [ "atty", "bincode", @@ -5381,8 +5381,8 @@ dependencies = [ "solana-clap-utils", "solana-client", "solana-config-program", - "solana-logger 1.14.13", - "solana-sdk 1.14.13", + "solana-logger 1.14.14", + "solana-sdk 1.14.14", "solana-version", "tar", "tempfile", @@ -5393,7 +5393,7 @@ dependencies = [ [[package]] name = "solana-keygen" -version = "1.14.13" +version = "1.14.14" dependencies = [ "bs58", "clap 3.1.8", @@ -5402,14 +5402,14 @@ dependencies = [ "solana-clap-v3-utils", "solana-cli-config", "solana-remote-wallet", - "solana-sdk 1.14.13", + "solana-sdk 1.14.14", "solana-version", "tiny-bip39", ] [[package]] name = "solana-ledger" -version = "1.14.13" +version = "1.14.14" dependencies = [ "assert_matches", "bincode", @@ -5443,16 +5443,16 @@ dependencies = [ "solana-account-decoder", "solana-bpf-loader-program", "solana-entry", - "solana-frozen-abi 1.14.13", - "solana-frozen-abi-macro 1.14.13", - "solana-logger 1.14.13", + "solana-frozen-abi 1.14.14", + "solana-frozen-abi-macro 1.14.14", + "solana-logger 1.14.14", "solana-measure", "solana-metrics", "solana-perf", "solana-program-runtime", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.14.13", + "solana-sdk 1.14.14", "solana-stake-program", "solana-storage-bigtable", "solana-storage-proto", @@ -5471,7 +5471,7 @@ dependencies = [ [[package]] name = "solana-ledger-tool" -version = "1.14.13" +version = "1.14.14" dependencies = [ "assert_cmd", "base64 0.13.0", @@ -5493,10 +5493,10 @@ dependencies = [ "solana-core", "solana-entry", "solana-ledger", - "solana-logger 1.14.13", + "solana-logger 1.14.14", "solana-measure", "solana-runtime", - "solana-sdk 1.14.13", + "solana-sdk 1.14.14", "solana-stake-program", "solana-storage-bigtable", "solana-transaction-status", @@ -5508,7 +5508,7 @@ dependencies = [ [[package]] name = "solana-local-cluster" -version = "1.14.13" +version = "1.14.14" dependencies = [ "assert_matches", "crossbeam-channel", @@ -5526,9 +5526,9 @@ dependencies = [ "solana-entry", "solana-gossip", "solana-ledger", - "solana-logger 1.14.13", + "solana-logger 1.14.14", "solana-runtime", - "solana-sdk 1.14.13", + "solana-sdk 1.14.14", "solana-stake-program", "solana-streamer", "solana-vote-program", @@ -5537,13 +5537,13 @@ dependencies = [ [[package]] name = "solana-log-analyzer" -version = "1.14.13" +version = "1.14.14" dependencies = [ "byte-unit", "clap 3.1.8", "serde", "serde_json", - "solana-logger 1.14.13", + "solana-logger 1.14.14", "solana-version", ] @@ -5560,7 +5560,7 @@ dependencies = [ [[package]] name = "solana-logger" -version = "1.14.13" +version = "1.14.14" dependencies = [ "env_logger", "lazy_static", @@ -5569,38 +5569,38 @@ dependencies = [ [[package]] name = "solana-measure" -version = "1.14.13" +version = "1.14.14" dependencies = [ "log", - "solana-sdk 1.14.13", + "solana-sdk 1.14.14", ] [[package]] name = "solana-merkle-root-bench" -version = "1.14.13" +version = "1.14.14" dependencies = [ "clap 2.33.3", "log", - "solana-logger 1.14.13", + "solana-logger 1.14.14", "solana-measure", "solana-runtime", - "solana-sdk 1.14.13", + "solana-sdk 1.14.14", "solana-version", ] [[package]] name = "solana-merkle-tree" -version = "1.14.13" +version = "1.14.14" dependencies = [ "fast-math", "hex", "matches", - "solana-program 1.14.13", + "solana-program 1.14.14", ] [[package]] name = "solana-metrics" -version = "1.14.13" +version = "1.14.14" dependencies = [ "crossbeam-channel", "env_logger", @@ -5610,23 +5610,23 @@ dependencies = [ "rand 0.7.3", "reqwest", "serial_test", - "solana-sdk 1.14.13", + "solana-sdk 1.14.14", ] [[package]] name = "solana-net-shaper" -version = "1.14.13" +version = "1.14.14" dependencies = [ "clap 3.1.8", "rand 0.7.3", "serde", "serde_json", - "solana-logger 1.14.13", + "solana-logger 1.14.14", ] [[package]] name = "solana-net-utils" -version = "1.14.13" +version = "1.14.14" dependencies = [ "bincode", "clap 3.1.8", @@ -5637,8 +5637,8 @@ dependencies = [ "serde", "serde_derive", "socket2", - "solana-logger 1.14.13", - "solana-sdk 1.14.13", + "solana-logger 1.14.14", + "solana-sdk 1.14.14", "solana-version", "tokio", "url 2.2.2", @@ -5646,7 +5646,7 @@ dependencies = [ [[package]] name = "solana-notifier" -version = "1.14.13" +version = "1.14.14" dependencies = [ "log", "reqwest", @@ -5655,7 +5655,7 @@ dependencies = [ [[package]] name = "solana-perf" -version = "1.14.13" +version = "1.14.14" dependencies = [ "ahash", "bincode", @@ -5673,16 +5673,16 @@ dependencies = [ "rand 0.7.3", "rayon", "serde", - "solana-logger 1.14.13", + "solana-logger 1.14.14", "solana-metrics", "solana-rayon-threadlimit", - "solana-sdk 1.14.13", + "solana-sdk 1.14.14", "solana-vote-program", ] [[package]] name = "solana-poh" -version = "1.14.13" +version = "1.14.14" dependencies = [ "bincode", "core_affinity", @@ -5692,29 +5692,29 @@ dependencies = [ "rand 0.7.3", "solana-entry", "solana-ledger", - "solana-logger 1.14.13", + "solana-logger 1.14.14", "solana-measure", "solana-metrics", "solana-perf", "solana-runtime", - "solana-sdk 1.14.13", + "solana-sdk 1.14.14", "solana-sys-tuner", "thiserror", ] [[package]] name = "solana-poh-bench" -version = "1.14.13" +version = "1.14.14" dependencies = [ "clap 3.1.8", "log", "rand 0.7.3", "rayon", "solana-entry", - "solana-logger 1.14.13", + "solana-logger 1.14.14", "solana-measure", "solana-perf", - "solana-sdk 1.14.13", + "solana-sdk 1.14.14", "solana-version", ] @@ -5769,7 +5769,7 @@ dependencies = [ [[package]] name = "solana-program" -version = "1.14.13" +version = "1.14.14" dependencies = [ "anyhow", "assert_matches", @@ -5807,10 +5807,10 @@ dependencies = [ "serde_json", "sha2 0.10.2", "sha3 0.10.1", - "solana-frozen-abi 1.14.13", - "solana-frozen-abi-macro 1.14.13", - "solana-logger 1.14.13", - "solana-sdk-macro 1.14.13", + "solana-frozen-abi 1.14.14", + "solana-frozen-abi-macro 1.14.14", + "solana-logger 1.14.14", + "solana-sdk-macro 1.14.14", "static_assertions", "thiserror", "tiny-bip39", @@ -5820,7 +5820,7 @@ dependencies = [ [[package]] name = "solana-program-runtime" -version = "1.14.13" +version = "1.14.14" dependencies = [ "base64 0.13.0", "bincode", @@ -5835,18 +5835,18 @@ dependencies = [ "rand 0.7.3", "rustc_version 0.4.0", "serde", - "solana-frozen-abi 1.14.13", - "solana-frozen-abi-macro 1.14.13", - "solana-logger 1.14.13", + "solana-frozen-abi 1.14.14", + "solana-frozen-abi-macro 1.14.14", + "solana-logger 1.14.14", "solana-measure", "solana-metrics", - "solana-sdk 1.14.13", + "solana-sdk 1.14.14", "thiserror", ] [[package]] name = "solana-program-test" -version = "1.14.13" +version = "1.14.14" dependencies = [ "assert_matches", "async-trait", @@ -5858,10 +5858,10 @@ dependencies = [ "solana-banks-client", "solana-banks-server", "solana-bpf-loader-program", - "solana-logger 1.14.13", + "solana-logger 1.14.14", "solana-program-runtime", "solana-runtime", - "solana-sdk 1.14.13", + "solana-sdk 1.14.14", "solana-stake-program", "solana-vote-program", "thiserror", @@ -5870,7 +5870,7 @@ dependencies = [ [[package]] name = "solana-rayon-threadlimit" -version = "1.14.13" +version = "1.14.14" dependencies = [ "lazy_static", "num_cpus", @@ -5878,7 +5878,7 @@ dependencies = [ [[package]] name = "solana-remote-wallet" -version = "1.14.13" +version = "1.14.14" dependencies = [ "console", "dialoguer", @@ -5889,14 +5889,14 @@ dependencies = [ "parking_lot 0.12.1", "qstring", "semver 1.0.10", - "solana-sdk 1.14.13", + "solana-sdk 1.14.14", "thiserror", "uriparse", ] [[package]] name = "solana-rpc" -version = "1.14.13" +version = "1.14.14" dependencies = [ "base64 0.13.0", "bincode", @@ -5932,7 +5932,7 @@ dependencies = [ "solana-poh", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.14.13", + "solana-sdk 1.14.14", "solana-send-transaction-service", "solana-stake-program", "solana-storage-bigtable", @@ -5951,7 +5951,7 @@ dependencies = [ [[package]] name = "solana-rpc-test" -version = "1.14.13" +version = "1.14.14" dependencies = [ "bincode", "bs58", @@ -5963,9 +5963,9 @@ dependencies = [ "serde_json", "solana-account-decoder", "solana-client", - "solana-logger 1.14.13", + "solana-logger 1.14.14", "solana-rpc", - "solana-sdk 1.14.13", + "solana-sdk 1.14.14", "solana-streamer", "solana-test-validator", "solana-transaction-status", @@ -5974,7 +5974,7 @@ dependencies = [ [[package]] name = "solana-runtime" -version = "1.14.13" +version = "1.14.14" dependencies = [ "arrayref", "assert_matches", @@ -6015,18 +6015,18 @@ dependencies = [ "solana-bucket-map", "solana-compute-budget-program", "solana-config-program", - "solana-frozen-abi 1.14.13", - "solana-frozen-abi-macro 1.14.13", - "solana-logger 1.14.13", + "solana-frozen-abi 1.14.14", + "solana-frozen-abi-macro 1.14.14", + "solana-logger 1.14.14", "solana-measure", "solana-metrics", "solana-program-runtime", "solana-rayon-threadlimit", - "solana-sdk 1.14.13", + "solana-sdk 1.14.14", "solana-stake-program", "solana-vote-program", "solana-zk-token-proof-program", - "solana-zk-token-sdk 1.14.13", + "solana-zk-token-sdk 1.14.14", "strum", "strum_macros", "symlink", @@ -6089,7 +6089,7 @@ dependencies = [ [[package]] name = "solana-sdk" -version = "1.14.13" +version = "1.14.14" dependencies = [ "anyhow", "assert_matches", @@ -6129,11 +6129,11 @@ dependencies = [ "serde_json", "sha2 0.10.2", "sha3 0.10.1", - "solana-frozen-abi 1.14.13", - "solana-frozen-abi-macro 1.14.13", - "solana-logger 1.14.13", - "solana-program 1.14.13", - "solana-sdk-macro 1.14.13", + "solana-frozen-abi 1.14.14", + "solana-frozen-abi-macro 1.14.14", + "solana-logger 1.14.14", + "solana-program 1.14.14", + "solana-sdk-macro 1.14.14", "static_assertions", "thiserror", "tiny-bip39", @@ -6156,7 +6156,7 @@ dependencies = [ [[package]] name = "solana-sdk-macro" -version = "1.14.13" +version = "1.14.14" dependencies = [ "bs58", "proc-macro2 1.0.41", @@ -6167,21 +6167,21 @@ dependencies = [ [[package]] name = "solana-send-transaction-service" -version = "1.14.13" +version = "1.14.14" dependencies = [ "crossbeam-channel", "log", "solana-client", - "solana-logger 1.14.13", + "solana-logger 1.14.14", "solana-measure", "solana-metrics", "solana-runtime", - "solana-sdk 1.14.13", + "solana-sdk 1.14.14", ] [[package]] name = "solana-stake-accounts" -version = "1.14.13" +version = "1.14.14" dependencies = [ "clap 2.33.3", "solana-clap-utils", @@ -6189,13 +6189,13 @@ dependencies = [ "solana-client", "solana-remote-wallet", "solana-runtime", - "solana-sdk 1.14.13", + "solana-sdk 1.14.14", "solana-stake-program", ] [[package]] name = "solana-stake-program" -version = "1.14.13" +version = "1.14.14" dependencies = [ "assert_matches", "bincode", @@ -6207,12 +6207,12 @@ dependencies = [ "serde", "serde_derive", "solana-config-program", - "solana-frozen-abi 1.14.13", - "solana-frozen-abi-macro 1.14.13", - "solana-logger 1.14.13", + "solana-frozen-abi 1.14.14", + "solana-frozen-abi-macro 1.14.14", + "solana-logger 1.14.14", "solana-metrics", "solana-program-runtime", - "solana-sdk 1.14.13", + "solana-sdk 1.14.14", "solana-vote-program", "test-case", "thiserror", @@ -6220,7 +6220,7 @@ dependencies = [ [[package]] name = "solana-storage-bigtable" -version = "1.14.13" +version = "1.14.14" dependencies = [ "backoff", "bincode", @@ -6241,7 +6241,7 @@ dependencies = [ "serde_derive", "smpl_jwt", "solana-metrics", - "solana-sdk 1.14.13", + "solana-sdk 1.14.14", "solana-storage-proto", "solana-transaction-status", "thiserror", @@ -6252,7 +6252,7 @@ dependencies = [ [[package]] name = "solana-storage-proto" -version = "1.14.13" +version = "1.14.14" dependencies = [ "bincode", "bs58", @@ -6261,25 +6261,25 @@ dependencies = [ "protobuf-src", "serde", "solana-account-decoder", - "solana-sdk 1.14.13", + "solana-sdk 1.14.14", "solana-transaction-status", "tonic-build 0.8.0", ] [[package]] name = "solana-store-tool" -version = "1.14.13" +version = "1.14.14" dependencies = [ "clap 2.33.3", "log", - "solana-logger 1.14.13", + "solana-logger 1.14.14", "solana-runtime", "solana-version", ] [[package]] name = "solana-streamer" -version = "1.14.13" +version = "1.14.14" dependencies = [ "crossbeam-channel", "futures-util", @@ -6296,10 +6296,10 @@ dependencies = [ "rand 0.7.3", "rcgen", "rustls 0.20.6", - "solana-logger 1.14.13", + "solana-logger 1.14.14", "solana-metrics", "solana-perf", - "solana-sdk 1.14.13", + "solana-sdk 1.14.14", "thiserror", "tokio", "x509-parser", @@ -6307,13 +6307,13 @@ dependencies = [ [[package]] name = "solana-sys-tuner" -version = "1.14.13" +version = "1.14.14" dependencies = [ "clap 2.33.3", "libc", "log", "nix", - "solana-logger 1.14.13", + "solana-logger 1.14.14", "solana-version", "sysctl", "unix_socket2", @@ -6322,7 +6322,7 @@ dependencies = [ [[package]] name = "solana-test-validator" -version = "1.14.13" +version = "1.14.14" dependencies = [ "base64 0.13.0", "log", @@ -6333,20 +6333,20 @@ dependencies = [ "solana-core", "solana-gossip", "solana-ledger", - "solana-logger 1.14.13", + "solana-logger 1.14.14", "solana-net-utils", "solana-program-runtime", "solana-program-test", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.13", + "solana-sdk 1.14.14", "solana-streamer", "tokio", ] [[package]] name = "solana-tokens" -version = "1.14.13" +version = "1.14.14" dependencies = [ "bincode", "chrono", @@ -6362,9 +6362,9 @@ dependencies = [ "solana-clap-utils", "solana-cli-config", "solana-client", - "solana-logger 1.14.13", + "solana-logger 1.14.14", "solana-remote-wallet", - "solana-sdk 1.14.13", + "solana-sdk 1.14.14", "solana-streamer", "solana-test-validator", "solana-transaction-status", @@ -6377,7 +6377,7 @@ dependencies = [ [[package]] name = "solana-transaction-dos" -version = "1.14.13" +version = "1.14.14" dependencies = [ "bincode", "clap 2.33.3", @@ -6391,11 +6391,11 @@ dependencies = [ "solana-faucet", "solana-gossip", "solana-local-cluster", - "solana-logger 1.14.13", + "solana-logger 1.14.14", "solana-measure", "solana-net-utils", "solana-runtime", - "solana-sdk 1.14.13", + "solana-sdk 1.14.14", "solana-streamer", "solana-transaction-status", "solana-version", @@ -6403,7 +6403,7 @@ dependencies = [ [[package]] name = "solana-transaction-status" -version = "1.14.13" +version = "1.14.14" dependencies = [ "Inflector", "base64 0.13.0", @@ -6419,7 +6419,7 @@ dependencies = [ "solana-address-lookup-table-program", "solana-measure", "solana-metrics", - "solana-sdk 1.14.13", + "solana-sdk 1.14.14", "solana-vote-program", "spl-associated-token-account", "spl-memo", @@ -6430,7 +6430,7 @@ dependencies = [ [[package]] name = "solana-upload-perf" -version = "1.14.13" +version = "1.14.14" dependencies = [ "serde_json", "solana-metrics", @@ -6438,7 +6438,7 @@ dependencies = [ [[package]] name = "solana-validator" -version = "1.14.13" +version = "1.14.14" dependencies = [ "chrono", "clap 2.33.3", @@ -6469,14 +6469,14 @@ dependencies = [ "solana-genesis-utils", "solana-gossip", "solana-ledger", - "solana-logger 1.14.13", + "solana-logger 1.14.14", "solana-metrics", "solana-net-utils", "solana-perf", "solana-poh", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.13", + "solana-sdk 1.14.14", "solana-send-transaction-service", "solana-storage-bigtable", "solana-streamer", @@ -6489,21 +6489,21 @@ dependencies = [ [[package]] name = "solana-version" -version = "1.14.13" +version = "1.14.14" dependencies = [ "log", "rustc_version 0.4.0", "semver 1.0.10", "serde", "serde_derive", - "solana-frozen-abi 1.14.13", - "solana-frozen-abi-macro 1.14.13", - "solana-sdk 1.14.13", + "solana-frozen-abi 1.14.14", + "solana-frozen-abi-macro 1.14.14", + "solana-sdk 1.14.14", ] [[package]] name = "solana-vote-program" -version = "1.14.13" +version = "1.14.14" dependencies = [ "bincode", "itertools", @@ -6514,19 +6514,19 @@ dependencies = [ "rustc_version 0.4.0", "serde", "serde_derive", - "solana-frozen-abi 1.14.13", - "solana-frozen-abi-macro 1.14.13", - "solana-logger 1.14.13", + "solana-frozen-abi 1.14.14", + "solana-frozen-abi-macro 1.14.14", + "solana-logger 1.14.14", "solana-metrics", "solana-program-runtime", - "solana-sdk 1.14.13", + "solana-sdk 1.14.14", "test-case", "thiserror", ] [[package]] name = "solana-watchtower" -version = "1.14.13" +version = "1.14.14" dependencies = [ "clap 2.33.3", "humantime", @@ -6535,24 +6535,24 @@ dependencies = [ "solana-cli-config", "solana-cli-output", "solana-client", - "solana-logger 1.14.13", + "solana-logger 1.14.14", "solana-metrics", "solana-notifier", - "solana-sdk 1.14.13", + "solana-sdk 1.14.14", "solana-version", ] [[package]] name = "solana-zk-token-proof-program" -version = "1.14.13" +version = "1.14.14" dependencies = [ "bytemuck", "getrandom 0.1.16", "num-derive", "num-traits", "solana-program-runtime", - "solana-sdk 1.14.13", - "solana-zk-token-sdk 1.14.13", + "solana-sdk 1.14.14", + "solana-zk-token-sdk 1.14.14", ] [[package]] @@ -6588,7 +6588,7 @@ dependencies = [ [[package]] name = "solana-zk-token-sdk" -version = "1.14.13" +version = "1.14.14" dependencies = [ "aes-gcm-siv", "arrayref", @@ -6608,8 +6608,8 @@ dependencies = [ "serde", "serde_json", "sha3 0.9.1", - "solana-program 1.14.13", - "solana-sdk 1.14.13", + "solana-program 1.14.14", + "solana-sdk 1.14.14", "subtle", "thiserror", "zeroize", diff --git a/account-decoder/Cargo.toml b/account-decoder/Cargo.toml index ebb0d0e7aa26b0..03c4bb76131e12 100644 --- a/account-decoder/Cargo.toml +++ b/account-decoder/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-account-decoder" -version = "1.14.13" +version = "1.14.14" description = "Solana account decoder" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -19,10 +19,10 @@ lazy_static = "1.4.0" serde = "1.0.138" serde_derive = "1.0.103" serde_json = "1.0.81" -solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.13" } -solana-config-program = { path = "../programs/config", version = "=1.14.13" } -solana-sdk = { path = "../sdk", version = "=1.14.13" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.13" } +solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.14" } +solana-config-program = { path = "../programs/config", version = "=1.14.14" } +solana-sdk = { path = "../sdk", version = "=1.14.14" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.14" } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } spl-token-2022 = { version = "=0.5.0", features = ["no-entrypoint"] } thiserror = "1.0" diff --git a/accounts-bench/Cargo.toml b/accounts-bench/Cargo.toml index a6e56ae865ada6..9c2f895c1cb10a 100644 --- a/accounts-bench/Cargo.toml +++ b/accounts-bench/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-accounts-bench" -version = "1.14.13" +version = "1.14.14" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -12,11 +12,11 @@ publish = false clap = "2.33.1" log = "0.4.17" rayon = "1.5.3" -solana-logger = { path = "../logger", version = "=1.14.13" } -solana-measure = { path = "../measure", version = "=1.14.13" } -solana-runtime = { path = "../runtime", version = "=1.14.13" } -solana-sdk = { path = "../sdk", version = "=1.14.13" } -solana-version = { path = "../version", version = "=1.14.13" } +solana-logger = { path = "../logger", version = "=1.14.14" } +solana-measure = { path = "../measure", version = "=1.14.14" } +solana-runtime = { path = "../runtime", version = "=1.14.14" } +solana-sdk = { path = "../sdk", version = "=1.14.14" } +solana-version = { path = "../version", version = "=1.14.14" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/accounts-cluster-bench/Cargo.toml b/accounts-cluster-bench/Cargo.toml index 6bb2856324e4b7..a46693445da1cf 100644 --- a/accounts-cluster-bench/Cargo.toml +++ b/accounts-cluster-bench/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-accounts-cluster-bench" -version = "1.14.13" +version = "1.14.14" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -13,25 +13,25 @@ clap = "2.33.1" log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.13" } -solana-clap-utils = { path = "../clap-utils", version = "=1.14.13" } -solana-client = { path = "../client", version = "=1.14.13" } -solana-faucet = { path = "../faucet", version = "=1.14.13" } -solana-gossip = { path = "../gossip", version = "=1.14.13" } -solana-logger = { path = "../logger", version = "=1.14.13" } -solana-measure = { path = "../measure", version = "=1.14.13" } -solana-net-utils = { path = "../net-utils", version = "=1.14.13" } -solana-runtime = { path = "../runtime", version = "=1.14.13" } -solana-sdk = { path = "../sdk", version = "=1.14.13" } -solana-streamer = { path = "../streamer", version = "=1.14.13" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.13" } -solana-version = { path = "../version", version = "=1.14.13" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.14" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.14" } +solana-client = { path = "../client", version = "=1.14.14" } +solana-faucet = { path = "../faucet", version = "=1.14.14" } +solana-gossip = { path = "../gossip", version = "=1.14.14" } +solana-logger = { path = "../logger", version = "=1.14.14" } +solana-measure = { path = "../measure", version = "=1.14.14" } +solana-net-utils = { path = "../net-utils", version = "=1.14.14" } +solana-runtime = { path = "../runtime", version = "=1.14.14" } +solana-sdk = { path = "../sdk", version = "=1.14.14" } +solana-streamer = { path = "../streamer", version = "=1.14.14" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.14" } +solana-version = { path = "../version", version = "=1.14.14" } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } [dev-dependencies] -solana-core = { path = "../core", version = "=1.14.13" } -solana-local-cluster = { path = "../local-cluster", version = "=1.14.13" } -solana-test-validator = { path = "../test-validator", version = "=1.14.13" } +solana-core = { path = "../core", version = "=1.14.14" } +solana-local-cluster = { path = "../local-cluster", version = "=1.14.14" } +solana-test-validator = { path = "../test-validator", version = "=1.14.14" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/banking-bench/Cargo.toml b/banking-bench/Cargo.toml index 8dfb3317a013fa..9cee6b56559b8c 100644 --- a/banking-bench/Cargo.toml +++ b/banking-bench/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-banking-bench" -version = "1.14.13" +version = "1.14.14" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,18 +14,18 @@ crossbeam-channel = "0.5" log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" -solana-client = { path = "../client", version = "=1.14.13" } -solana-core = { path = "../core", version = "=1.14.13" } -solana-gossip = { path = "../gossip", version = "=1.14.13" } -solana-ledger = { path = "../ledger", version = "=1.14.13" } -solana-logger = { path = "../logger", version = "=1.14.13" } -solana-measure = { path = "../measure", version = "=1.14.13" } -solana-perf = { path = "../perf", version = "=1.14.13" } -solana-poh = { path = "../poh", version = "=1.14.13" } -solana-runtime = { path = "../runtime", version = "=1.14.13" } -solana-sdk = { path = "../sdk", version = "=1.14.13" } -solana-streamer = { path = "../streamer", version = "=1.14.13" } -solana-version = { path = "../version", version = "=1.14.13" } +solana-client = { path = "../client", version = "=1.14.14" } +solana-core = { path = "../core", version = "=1.14.14" } +solana-gossip = { path = "../gossip", version = "=1.14.14" } +solana-ledger = { path = "../ledger", version = "=1.14.14" } +solana-logger = { path = "../logger", version = "=1.14.14" } +solana-measure = { path = "../measure", version = "=1.14.14" } +solana-perf = { path = "../perf", version = "=1.14.14" } +solana-poh = { path = "../poh", version = "=1.14.14" } +solana-runtime = { path = "../runtime", version = "=1.14.14" } +solana-sdk = { path = "../sdk", version = "=1.14.14" } +solana-streamer = { path = "../streamer", version = "=1.14.14" } +solana-version = { path = "../version", version = "=1.14.14" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/banks-client/Cargo.toml b/banks-client/Cargo.toml index 9246095214d67e..5088a94281b98d 100644 --- a/banks-client/Cargo.toml +++ b/banks-client/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-banks-client" -version = "1.14.13" +version = "1.14.14" description = "Solana banks client" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,17 +12,17 @@ edition = "2021" [dependencies] borsh = "0.9.3" futures = "0.3" -solana-banks-interface = { path = "../banks-interface", version = "=1.14.13" } -solana-program = { path = "../sdk/program", version = "=1.14.13" } -solana-sdk = { path = "../sdk", version = "=1.14.13" } +solana-banks-interface = { path = "../banks-interface", version = "=1.14.14" } +solana-program = { path = "../sdk/program", version = "=1.14.14" } +solana-sdk = { path = "../sdk", version = "=1.14.14" } tarpc = { version = "0.29.0", features = ["full"] } thiserror = "1.0" tokio = { version = "~1.14.1", features = ["full"] } tokio-serde = { version = "0.8", features = ["bincode"] } [dev-dependencies] -solana-banks-server = { path = "../banks-server", version = "=1.14.13" } -solana-runtime = { path = "../runtime", version = "=1.14.13" } +solana-banks-server = { path = "../banks-server", version = "=1.14.14" } +solana-runtime = { path = "../runtime", version = "=1.14.14" } [lib] crate-type = ["lib"] diff --git a/banks-interface/Cargo.toml b/banks-interface/Cargo.toml index 261a913b30e82f..ac51860968f75e 100644 --- a/banks-interface/Cargo.toml +++ b/banks-interface/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-banks-interface" -version = "1.14.13" +version = "1.14.14" description = "Solana banks RPC interface" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -11,7 +11,7 @@ edition = "2021" [dependencies] serde = { version = "1.0.138", features = ["derive"] } -solana-sdk = { path = "../sdk", version = "=1.14.13" } +solana-sdk = { path = "../sdk", version = "=1.14.14" } tarpc = { version = "0.29.0", features = ["full"] } [lib] diff --git a/banks-server/Cargo.toml b/banks-server/Cargo.toml index 88834e145cdc9f..d0778dadfd0051 100644 --- a/banks-server/Cargo.toml +++ b/banks-server/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-banks-server" -version = "1.14.13" +version = "1.14.14" description = "Solana banks server" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,11 +13,11 @@ edition = "2021" bincode = "1.3.3" crossbeam-channel = "0.5" futures = "0.3" -solana-banks-interface = { path = "../banks-interface", version = "=1.14.13" } -solana-client = { path = "../client", version = "=1.14.13" } -solana-runtime = { path = "../runtime", version = "=1.14.13" } -solana-sdk = { path = "../sdk", version = "=1.14.13" } -solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.13" } +solana-banks-interface = { path = "../banks-interface", version = "=1.14.14" } +solana-client = { path = "../client", version = "=1.14.14" } +solana-runtime = { path = "../runtime", version = "=1.14.14" } +solana-sdk = { path = "../sdk", version = "=1.14.14" } +solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.14" } tarpc = { version = "0.29.0", features = ["full"] } tokio = { version = "1", features = ["full"] } tokio-serde = { version = "0.8", features = ["bincode"] } diff --git a/bench-streamer/Cargo.toml b/bench-streamer/Cargo.toml index e56052d8bced05..6b277051a54c1e 100644 --- a/bench-streamer/Cargo.toml +++ b/bench-streamer/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-bench-streamer" -version = "1.14.13" +version = "1.14.14" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -11,9 +11,9 @@ publish = false [dependencies] clap = { version = "3.1.5", features = ["cargo"] } crossbeam-channel = "0.5" -solana-net-utils = { path = "../net-utils", version = "=1.14.13" } -solana-streamer = { path = "../streamer", version = "=1.14.13" } -solana-version = { path = "../version", version = "=1.14.13" } +solana-net-utils = { path = "../net-utils", version = "=1.14.14" } +solana-streamer = { path = "../streamer", version = "=1.14.14" } +solana-version = { path = "../version", version = "=1.14.14" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/bench-tps/Cargo.toml b/bench-tps/Cargo.toml index 5d1c1b5825b656..0d10eae6d47091 100644 --- a/bench-tps/Cargo.toml +++ b/bench-tps/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-bench-tps" -version = "1.14.13" +version = "1.14.14" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -15,28 +15,28 @@ log = "0.4.17" rayon = "1.5.3" serde_json = "1.0.81" serde_yaml = "0.8.26" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.13" } -solana-cli-config = { path = "../cli-config", version = "=1.14.13" } -solana-client = { path = "../client", version = "=1.14.13" } -solana-core = { path = "../core", version = "=1.14.13" } -solana-faucet = { path = "../faucet", version = "=1.14.13" } -solana-genesis = { path = "../genesis", version = "=1.14.13" } -solana-gossip = { path = "../gossip", version = "=1.14.13" } -solana-logger = { path = "../logger", version = "=1.14.13" } -solana-measure = { path = "../measure", version = "=1.14.13" } -solana-metrics = { path = "../metrics", version = "=1.14.13" } -solana-net-utils = { path = "../net-utils", version = "=1.14.13" } -solana-rpc = { path = "../rpc", version = "=1.14.13" } -solana-runtime = { path = "../runtime", version = "=1.14.13" } -solana-sdk = { path = "../sdk", version = "=1.14.13" } -solana-streamer = { path = "../streamer", version = "=1.14.13" } -solana-version = { path = "../version", version = "=1.14.13" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.14" } +solana-cli-config = { path = "../cli-config", version = "=1.14.14" } +solana-client = { path = "../client", version = "=1.14.14" } +solana-core = { path = "../core", version = "=1.14.14" } +solana-faucet = { path = "../faucet", version = "=1.14.14" } +solana-genesis = { path = "../genesis", version = "=1.14.14" } +solana-gossip = { path = "../gossip", version = "=1.14.14" } +solana-logger = { path = "../logger", version = "=1.14.14" } +solana-measure = { path = "../measure", version = "=1.14.14" } +solana-metrics = { path = "../metrics", version = "=1.14.14" } +solana-net-utils = { path = "../net-utils", version = "=1.14.14" } +solana-rpc = { path = "../rpc", version = "=1.14.14" } +solana-runtime = { path = "../runtime", version = "=1.14.14" } +solana-sdk = { path = "../sdk", version = "=1.14.14" } +solana-streamer = { path = "../streamer", version = "=1.14.14" } +solana-version = { path = "../version", version = "=1.14.14" } thiserror = "1.0" [dev-dependencies] serial_test = "0.8.0" -solana-local-cluster = { path = "../local-cluster", version = "=1.14.13" } -solana-test-validator = { path = "../test-validator", version = "=1.14.13" } +solana-local-cluster = { path = "../local-cluster", version = "=1.14.14" } +solana-test-validator = { path = "../test-validator", version = "=1.14.14" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/bloom/Cargo.toml b/bloom/Cargo.toml index 039df6618f6539..4608c99f5e0761 100644 --- a/bloom/Cargo.toml +++ b/bloom/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bloom" -version = "1.14.13" +version = "1.14.14" description = "Solana bloom filter" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -17,9 +17,9 @@ rand = "0.7.0" rayon = "1.5.3" serde = { version = "1.0.138", features = ["rc"] } serde_derive = "1.0.103" -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.13" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.13" } -solana-sdk = { path = "../sdk", version = "=1.14.13" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.14" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.14" } +solana-sdk = { path = "../sdk", version = "=1.14.14" } [lib] crate-type = ["lib"] diff --git a/bucket_map/Cargo.toml b/bucket_map/Cargo.toml index 7bc51b483b6464..97d4a1d15e4636 100644 --- a/bucket_map/Cargo.toml +++ b/bucket_map/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bucket-map" -version = "1.14.13" +version = "1.14.14" description = "solana-bucket-map" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-bucket-map" @@ -15,14 +15,14 @@ log = { version = "0.4.17" } memmap2 = "0.5.3" modular-bitfield = "0.11.2" rand = "0.7.0" -solana-measure = { path = "../measure", version = "=1.14.13" } -solana-sdk = { path = "../sdk", version = "=1.14.13" } +solana-measure = { path = "../measure", version = "=1.14.14" } +solana-sdk = { path = "../sdk", version = "=1.14.14" } tempfile = "3.3.0" [dev-dependencies] fs_extra = "1.2.0" rayon = "1.5.3" -solana-logger = { path = "../logger", version = "=1.14.13" } +solana-logger = { path = "../logger", version = "=1.14.14" } [lib] crate-type = ["lib"] diff --git a/clap-utils/Cargo.toml b/clap-utils/Cargo.toml index 35dfccc6fa2b85..71eae2d3d5345f 100644 --- a/clap-utils/Cargo.toml +++ b/clap-utils/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-clap-utils" -version = "1.14.13" +version = "1.14.14" description = "Solana utilities for the clap" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,9 +13,9 @@ edition = "2021" chrono = "0.4" clap = "2.33.0" rpassword = "6.0" -solana-perf = { path = "../perf", version = "=1.14.13" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.13", default-features = false } -solana-sdk = { path = "../sdk", version = "=1.14.13" } +solana-perf = { path = "../perf", version = "=1.14.14" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.14", default-features = false } +solana-sdk = { path = "../sdk", version = "=1.14.14" } thiserror = "1.0.31" tiny-bip39 = "0.8.2" uriparse = "0.6.4" diff --git a/clap-v3-utils/Cargo.toml b/clap-v3-utils/Cargo.toml index 843429e48976fb..4e01f4df64e445 100644 --- a/clap-v3-utils/Cargo.toml +++ b/clap-v3-utils/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-clap-v3-utils" -version = "1.14.13" +version = "1.14.14" description = "Solana utilities for the clap v3" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,9 +13,9 @@ edition = "2021" chrono = "0.4" clap = { version = "3.1.5", features = ["cargo"] } rpassword = "6.0" -solana-perf = { path = "../perf", version = "=1.14.13" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.13", default-features = false } -solana-sdk = { path = "../sdk", version = "=1.14.13" } +solana-perf = { path = "../perf", version = "=1.14.14" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.14", default-features = false } +solana-sdk = { path = "../sdk", version = "=1.14.14" } thiserror = "1.0.31" tiny-bip39 = "0.8.2" uriparse = "0.6.4" diff --git a/cli-config/Cargo.toml b/cli-config/Cargo.toml index a60ed0f893b5ff..350b2afb1b0dd4 100644 --- a/cli-config/Cargo.toml +++ b/cli-config/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-cli-config" description = "Blockchain, Rebuilt for Scale" -version = "1.14.13" +version = "1.14.14" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -15,8 +15,8 @@ lazy_static = "1.4.0" serde = "1.0.138" serde_derive = "1.0.103" serde_yaml = "0.8.26" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.13" } -solana-sdk = { path = "../sdk", version = "=1.14.13" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.14" } +solana-sdk = { path = "../sdk", version = "=1.14.14" } url = "2.2.2" [dev-dependencies] diff --git a/cli-output/Cargo.toml b/cli-output/Cargo.toml index e70caf43615477..bf54e19c3fe6b2 100644 --- a/cli-output/Cargo.toml +++ b/cli-output/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-cli-output" description = "Blockchain, Rebuilt for Scale" -version = "1.14.13" +version = "1.14.14" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -21,13 +21,13 @@ pretty-hex = "0.3.0" semver = "1.0.10" serde = "1.0.138" serde_json = "1.0.81" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.13" } -solana-clap-utils = { path = "../clap-utils", version = "=1.14.13" } -solana-cli-config = { path = "../cli-config", version = "=1.14.13" } -solana-client = { path = "../client", version = "=1.14.13" } -solana-sdk = { path = "../sdk", version = "=1.14.13" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.13" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.13" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.14" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.14" } +solana-cli-config = { path = "../cli-config", version = "=1.14.14" } +solana-client = { path = "../client", version = "=1.14.14" } +solana-sdk = { path = "../sdk", version = "=1.14.14" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.14" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.14" } spl-memo = { version = "=3.0.1", features = ["no-entrypoint"] } [dev-dependencies] diff --git a/cli/Cargo.toml b/cli/Cargo.toml index bfd39d7c4be083..6e12d5edeaea08 100644 --- a/cli/Cargo.toml +++ b/cli/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-cli" description = "Blockchain, Rebuilt for Scale" -version = "1.14.13" +version = "1.14.14" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -27,30 +27,30 @@ semver = "1.0.10" serde = "1.0.138" serde_derive = "1.0.103" serde_json = "1.0.81" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.13" } -solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.13" } -solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.13" } -solana-clap-utils = { path = "../clap-utils", version = "=1.14.13" } -solana-cli-config = { path = "../cli-config", version = "=1.14.13" } -solana-cli-output = { path = "../cli-output", version = "=1.14.13" } -solana-client = { path = "../client", version = "=1.14.13" } -solana-config-program = { path = "../programs/config", version = "=1.14.13" } -solana-faucet = { path = "../faucet", version = "=1.14.13" } -solana-logger = { path = "../logger", version = "=1.14.13" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.13" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.13" } -solana-sdk = { path = "../sdk", version = "=1.14.13" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.13" } -solana-version = { path = "../version", version = "=1.14.13" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.13" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.14" } +solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.14" } +solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.14" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.14" } +solana-cli-config = { path = "../cli-config", version = "=1.14.14" } +solana-cli-output = { path = "../cli-output", version = "=1.14.14" } +solana-client = { path = "../client", version = "=1.14.14" } +solana-config-program = { path = "../programs/config", version = "=1.14.14" } +solana-faucet = { path = "../faucet", version = "=1.14.14" } +solana-logger = { path = "../logger", version = "=1.14.14" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.14" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.14" } +solana-sdk = { path = "../sdk", version = "=1.14.14" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.14" } +solana-version = { path = "../version", version = "=1.14.14" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.14" } solana_rbpf = "=0.2.31" spl-memo = { version = "=3.0.1", features = ["no-entrypoint"] } thiserror = "1.0.31" tiny-bip39 = "0.8.2" [dev-dependencies] -solana-streamer = { path = "../streamer", version = "=1.14.13" } -solana-test-validator = { path = "../test-validator", version = "=1.14.13" } +solana-streamer = { path = "../streamer", version = "=1.14.14" } +solana-test-validator = { path = "../test-validator", version = "=1.14.14" } tempfile = "3.3.0" [[bin]] diff --git a/client-test/Cargo.toml b/client-test/Cargo.toml index 590e38cedacb21..92430ca9d14369 100644 --- a/client-test/Cargo.toml +++ b/client-test/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-client-test" -version = "1.14.13" +version = "1.14.14" description = "Solana RPC Test" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,25 +14,25 @@ publish = false futures-util = "0.3.21" serde_json = "1.0.81" serial_test = "0.8.0" -solana-client = { path = "../client", version = "=1.14.13" } -solana-ledger = { path = "../ledger", version = "=1.14.13" } -solana-measure = { path = "../measure", version = "=1.14.13" } -solana-merkle-tree = { path = "../merkle-tree", version = "=1.14.13" } -solana-metrics = { path = "../metrics", version = "=1.14.13" } -solana-perf = { path = "../perf", version = "=1.14.13" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.13" } -solana-rpc = { path = "../rpc", version = "=1.14.13" } -solana-runtime = { path = "../runtime", version = "=1.14.13" } -solana-sdk = { path = "../sdk", version = "=1.14.13" } -solana-streamer = { path = "../streamer", version = "=1.14.13" } -solana-test-validator = { path = "../test-validator", version = "=1.14.13" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.13" } -solana-version = { path = "../version", version = "=1.14.13" } +solana-client = { path = "../client", version = "=1.14.14" } +solana-ledger = { path = "../ledger", version = "=1.14.14" } +solana-measure = { path = "../measure", version = "=1.14.14" } +solana-merkle-tree = { path = "../merkle-tree", version = "=1.14.14" } +solana-metrics = { path = "../metrics", version = "=1.14.14" } +solana-perf = { path = "../perf", version = "=1.14.14" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.14" } +solana-rpc = { path = "../rpc", version = "=1.14.14" } +solana-runtime = { path = "../runtime", version = "=1.14.14" } +solana-sdk = { path = "../sdk", version = "=1.14.14" } +solana-streamer = { path = "../streamer", version = "=1.14.14" } +solana-test-validator = { path = "../test-validator", version = "=1.14.14" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.14" } +solana-version = { path = "../version", version = "=1.14.14" } systemstat = "0.1.11" tokio = { version = "~1.14.1", features = ["full"] } [dev-dependencies] -solana-logger = { path = "../logger", version = "=1.14.13" } +solana-logger = { path = "../logger", version = "=1.14.14" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/client/Cargo.toml b/client/Cargo.toml index 54e776b79d9b11..e626dc7a092ba2 100644 --- a/client/Cargo.toml +++ b/client/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-client" -version = "1.14.13" +version = "1.14.14" description = "Solana Client" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -38,17 +38,17 @@ semver = "1.0.10" serde = "1.0.138" serde_derive = "1.0.103" serde_json = "1.0.81" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.13" } -solana-clap-utils = { path = "../clap-utils", version = "=1.14.13" } -solana-faucet = { path = "../faucet", version = "=1.14.13" } -solana-measure = { path = "../measure", version = "=1.14.13" } -solana-metrics = { path = "../metrics", version = "=1.14.13" } -solana-net-utils = { path = "../net-utils", version = "=1.14.13" } -solana-sdk = { path = "../sdk", version = "=1.14.13" } -solana-streamer = { path = "../streamer", version = "=1.14.13" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.13" } -solana-version = { path = "../version", version = "=1.14.13" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.13" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.14" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.14" } +solana-faucet = { path = "../faucet", version = "=1.14.14" } +solana-measure = { path = "../measure", version = "=1.14.14" } +solana-metrics = { path = "../metrics", version = "=1.14.14" } +solana-net-utils = { path = "../net-utils", version = "=1.14.14" } +solana-sdk = { path = "../sdk", version = "=1.14.14" } +solana-streamer = { path = "../streamer", version = "=1.14.14" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.14" } +solana-version = { path = "../version", version = "=1.14.14" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.14" } spl-token-2022 = { version = "=0.5.0", features = ["no-entrypoint"] } thiserror = "1.0" tokio = { version = "1", features = ["full"] } @@ -61,8 +61,8 @@ url = "2.2.2" anyhow = "1.0.58" assert_matches = "1.5.0" jsonrpc-http-server = "18.0.0" -solana-logger = { path = "../logger", version = "=1.14.13" } -solana-perf = { path = "../perf", version = "=1.14.13" } +solana-logger = { path = "../logger", version = "=1.14.14" } +solana-perf = { path = "../perf", version = "=1.14.14" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/core/Cargo.toml b/core/Cargo.toml index 66e8270c8dde1e..81c605a470e7d4 100644 --- a/core/Cargo.toml +++ b/core/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "solana-core" description = "Blockchain, Rebuilt for Scale" -version = "1.14.13" +version = "1.14.14" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-core" readme = "../README.md" @@ -36,30 +36,30 @@ rand_chacha = "0.2.2" rayon = "1.5.3" serde = "1.0.138" serde_derive = "1.0.103" -solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.13" } -solana-bloom = { path = "../bloom", version = "=1.14.13" } -solana-client = { path = "../client", version = "=1.14.13" } -solana-entry = { path = "../entry", version = "=1.14.13" } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.13" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.13" } -solana-geyser-plugin-manager = { path = "../geyser-plugin-manager", version = "=1.14.13" } -solana-gossip = { path = "../gossip", version = "=1.14.13" } -solana-ledger = { path = "../ledger", version = "=1.14.13" } -solana-measure = { path = "../measure", version = "=1.14.13" } -solana-metrics = { path = "../metrics", version = "=1.14.13" } -solana-net-utils = { path = "../net-utils", version = "=1.14.13" } -solana-perf = { path = "../perf", version = "=1.14.13" } -solana-poh = { path = "../poh", version = "=1.14.13" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.13" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.13" } -solana-rpc = { path = "../rpc", version = "=1.14.13" } -solana-runtime = { path = "../runtime", version = "=1.14.13" } -solana-sdk = { path = "../sdk", version = "=1.14.13" } -solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.13" } -solana-streamer = { path = "../streamer", version = "=1.14.13" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.13" } -solana-version = { path = "../version", version = "=1.14.13" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.13" } +solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.14" } +solana-bloom = { path = "../bloom", version = "=1.14.14" } +solana-client = { path = "../client", version = "=1.14.14" } +solana-entry = { path = "../entry", version = "=1.14.14" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.14" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.14" } +solana-geyser-plugin-manager = { path = "../geyser-plugin-manager", version = "=1.14.14" } +solana-gossip = { path = "../gossip", version = "=1.14.14" } +solana-ledger = { path = "../ledger", version = "=1.14.14" } +solana-measure = { path = "../measure", version = "=1.14.14" } +solana-metrics = { path = "../metrics", version = "=1.14.14" } +solana-net-utils = { path = "../net-utils", version = "=1.14.14" } +solana-perf = { path = "../perf", version = "=1.14.14" } +solana-poh = { path = "../poh", version = "=1.14.14" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.14" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.14" } +solana-rpc = { path = "../rpc", version = "=1.14.14" } +solana-runtime = { path = "../runtime", version = "=1.14.14" } +solana-sdk = { path = "../sdk", version = "=1.14.14" } +solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.14" } +solana-streamer = { path = "../streamer", version = "=1.14.14" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.14" } +solana-version = { path = "../version", version = "=1.14.14" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.14" } sys-info = "0.9.1" tempfile = "3.3.0" thiserror = "1.0" @@ -71,9 +71,9 @@ matches = "0.1.9" raptorq = "1.7.0" serde_json = "1.0.81" serial_test = "0.8.0" -solana-logger = { path = "../logger", version = "=1.14.13" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.13" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.13" } +solana-logger = { path = "../logger", version = "=1.14.14" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.14" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.14" } static_assertions = "1.1.0" systemstat = "0.1.11" test-case = "2.1.0" diff --git a/dos/Cargo.toml b/dos/Cargo.toml index e2a25c022ae729..5752b8df109d9e 100644 --- a/dos/Cargo.toml +++ b/dos/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-dos" -version = "1.14.13" +version = "1.14.14" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -17,23 +17,23 @@ itertools = "0.10.3" log = "0.4.17" rand = "0.7.0" serde = "1.0.138" -solana-bench-tps = { path = "../bench-tps", version = "=1.14.13" } -solana-client = { path = "../client", version = "=1.14.13" } -solana-core = { path = "../core", version = "=1.14.13" } -solana-faucet = { path = "../faucet", version = "=1.14.13" } -solana-gossip = { path = "../gossip", version = "=1.14.13" } -solana-logger = { path = "../logger", version = "=1.14.13" } -solana-measure = { path = "../measure", version = "=1.14.13" } -solana-net-utils = { path = "../net-utils", version = "=1.14.13" } -solana-perf = { path = "../perf", version = "=1.14.13" } -solana-rpc = { path = "../rpc", version = "=1.14.13" } -solana-sdk = { path = "../sdk", version = "=1.14.13" } -solana-streamer = { path = "../streamer", version = "=1.14.13" } -solana-version = { path = "../version", version = "=1.14.13" } +solana-bench-tps = { path = "../bench-tps", version = "=1.14.14" } +solana-client = { path = "../client", version = "=1.14.14" } +solana-core = { path = "../core", version = "=1.14.14" } +solana-faucet = { path = "../faucet", version = "=1.14.14" } +solana-gossip = { path = "../gossip", version = "=1.14.14" } +solana-logger = { path = "../logger", version = "=1.14.14" } +solana-measure = { path = "../measure", version = "=1.14.14" } +solana-net-utils = { path = "../net-utils", version = "=1.14.14" } +solana-perf = { path = "../perf", version = "=1.14.14" } +solana-rpc = { path = "../rpc", version = "=1.14.14" } +solana-sdk = { path = "../sdk", version = "=1.14.14" } +solana-streamer = { path = "../streamer", version = "=1.14.14" } +solana-version = { path = "../version", version = "=1.14.14" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] [dev-dependencies] serial_test = "0.8.0" -solana-local-cluster = { path = "../local-cluster", version = "=1.14.13" } +solana-local-cluster = { path = "../local-cluster", version = "=1.14.14" } diff --git a/download-utils/Cargo.toml b/download-utils/Cargo.toml index ade2c234e0c8b5..7c3cfbbb9780b7 100644 --- a/download-utils/Cargo.toml +++ b/download-utils/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-download-utils" -version = "1.14.13" +version = "1.14.14" description = "Solana Download Utils" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,8 +14,8 @@ console = "0.15.0" indicatif = "0.16.2" log = "0.4.17" reqwest = { version = "0.11.11", default-features = false, features = ["blocking", "brotli", "deflate", "gzip", "rustls-tls", "json"] } -solana-runtime = { path = "../runtime", version = "=1.14.13" } -solana-sdk = { path = "../sdk", version = "=1.14.13" } +solana-runtime = { path = "../runtime", version = "=1.14.14" } +solana-sdk = { path = "../sdk", version = "=1.14.14" } [lib] crate-type = ["lib"] diff --git a/entry/Cargo.toml b/entry/Cargo.toml index 2f93251d2408a7..1f3705ea6bb9a7 100644 --- a/entry/Cargo.toml +++ b/entry/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-entry" -version = "1.14.13" +version = "1.14.14" description = "Solana Entry" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -19,16 +19,16 @@ log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" serde = "1.0.138" -solana-measure = { path = "../measure", version = "=1.14.13" } -solana-merkle-tree = { path = "../merkle-tree", version = "=1.14.13" } -solana-metrics = { path = "../metrics", version = "=1.14.13" } -solana-perf = { path = "../perf", version = "=1.14.13" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.13" } -solana-sdk = { path = "../sdk", version = "=1.14.13" } +solana-measure = { path = "../measure", version = "=1.14.14" } +solana-merkle-tree = { path = "../merkle-tree", version = "=1.14.14" } +solana-metrics = { path = "../metrics", version = "=1.14.14" } +solana-perf = { path = "../perf", version = "=1.14.14" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.14" } +solana-sdk = { path = "../sdk", version = "=1.14.14" } [dev-dependencies] matches = "0.1.9" -solana-logger = { path = "../logger", version = "=1.14.13" } +solana-logger = { path = "../logger", version = "=1.14.14" } [lib] crate-type = ["lib"] diff --git a/faucet/Cargo.toml b/faucet/Cargo.toml index a3c8ee6937e5ed..63a1563907b679 100644 --- a/faucet/Cargo.toml +++ b/faucet/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-faucet" -version = "1.14.13" +version = "1.14.14" description = "Solana Faucet" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -17,12 +17,12 @@ crossbeam-channel = "0.5" log = "0.4.17" serde = "1.0.138" serde_derive = "1.0.103" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.13" } -solana-cli-config = { path = "../cli-config", version = "=1.14.13" } -solana-logger = { path = "../logger", version = "=1.14.13" } -solana-metrics = { path = "../metrics", version = "=1.14.13" } -solana-sdk = { path = "../sdk", version = "=1.14.13" } -solana-version = { path = "../version", version = "=1.14.13" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.14" } +solana-cli-config = { path = "../cli-config", version = "=1.14.14" } +solana-logger = { path = "../logger", version = "=1.14.14" } +solana-metrics = { path = "../metrics", version = "=1.14.14" } +solana-sdk = { path = "../sdk", version = "=1.14.14" } +solana-version = { path = "../version", version = "=1.14.14" } spl-memo = { version = "=3.0.1", features = ["no-entrypoint"] } thiserror = "1.0" tokio = { version = "1", features = ["full"] } diff --git a/frozen-abi/Cargo.toml b/frozen-abi/Cargo.toml index 538ec7b7340350..8f2fdb5238081d 100644 --- a/frozen-abi/Cargo.toml +++ b/frozen-abi/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-frozen-abi" -version = "1.14.13" +version = "1.14.14" description = "Solana Frozen ABI" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -20,7 +20,7 @@ serde_bytes = "0.11" serde_derive = "1.0" serde_json = "1.0" sha2 = "0.10.2" -solana-frozen-abi-macro = { path = "macro", version = "=1.14.13" } +solana-frozen-abi-macro = { path = "macro", version = "=1.14.14" } thiserror = "1.0" [target.'cfg(not(target_os = "solana"))'.dependencies] @@ -43,7 +43,7 @@ rand_core = { version = "0.6.3", features = ["alloc", "getrandom", "std"] } subtle = { version = "2.4.1", features = ["default", "i128", "std"] } [target.'cfg(not(target_os = "solana"))'.dev-dependencies] -solana-logger = { path = "../logger", version = "=1.14.13" } +solana-logger = { path = "../logger", version = "=1.14.14" } [build-dependencies] rustc_version = "0.4" diff --git a/frozen-abi/macro/Cargo.toml b/frozen-abi/macro/Cargo.toml index 88c048dcf81ba0..0e55cc64d93be9 100644 --- a/frozen-abi/macro/Cargo.toml +++ b/frozen-abi/macro/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-frozen-abi-macro" -version = "1.14.13" +version = "1.14.14" description = "Solana Frozen ABI Macro" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/genesis-utils/Cargo.toml b/genesis-utils/Cargo.toml index 40f194ada72c04..e48a3adffe94ad 100644 --- a/genesis-utils/Cargo.toml +++ b/genesis-utils/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-genesis-utils" -version = "1.14.13" +version = "1.14.14" description = "Solana Genesis Utils" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,9 +10,9 @@ documentation = "https://docs.rs/solana-download-utils" edition = "2021" [dependencies] -solana-download-utils = { path = "../download-utils", version = "=1.14.13" } -solana-runtime = { path = "../runtime", version = "=1.14.13" } -solana-sdk = { path = "../sdk", version = "=1.14.13" } +solana-download-utils = { path = "../download-utils", version = "=1.14.14" } +solana-runtime = { path = "../runtime", version = "=1.14.14" } +solana-sdk = { path = "../sdk", version = "=1.14.14" } [lib] crate-type = ["lib"] diff --git a/genesis/Cargo.toml b/genesis/Cargo.toml index 93fb158bfbdd0e..55a547812a8b23 100644 --- a/genesis/Cargo.toml +++ b/genesis/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-genesis" description = "Blockchain, Rebuilt for Scale" -version = "1.14.13" +version = "1.14.14" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -15,16 +15,16 @@ clap = "2.33.1" serde = "1.0.138" serde_json = "1.0.81" serde_yaml = "0.8.26" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.13" } -solana-cli-config = { path = "../cli-config", version = "=1.14.13" } -solana-entry = { path = "../entry", version = "=1.14.13" } -solana-ledger = { path = "../ledger", version = "=1.14.13" } -solana-logger = { path = "../logger", version = "=1.14.13" } -solana-runtime = { path = "../runtime", version = "=1.14.13" } -solana-sdk = { path = "../sdk", version = "=1.14.13" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.13" } -solana-version = { path = "../version", version = "=1.14.13" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.13" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.14" } +solana-cli-config = { path = "../cli-config", version = "=1.14.14" } +solana-entry = { path = "../entry", version = "=1.14.14" } +solana-ledger = { path = "../ledger", version = "=1.14.14" } +solana-logger = { path = "../logger", version = "=1.14.14" } +solana-runtime = { path = "../runtime", version = "=1.14.14" } +solana-sdk = { path = "../sdk", version = "=1.14.14" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.14" } +solana-version = { path = "../version", version = "=1.14.14" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.14" } tempfile = "3.3.0" [[bin]] diff --git a/geyser-plugin-interface/Cargo.toml b/geyser-plugin-interface/Cargo.toml index b7f2231f9a645b..1263b6454696e5 100644 --- a/geyser-plugin-interface/Cargo.toml +++ b/geyser-plugin-interface/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-geyser-plugin-interface" description = "The Solana Geyser plugin interface." -version = "1.14.13" +version = "1.14.14" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -11,8 +11,8 @@ documentation = "https://docs.rs/solana-geyser-plugin-interface" [dependencies] log = "0.4.17" -solana-sdk = { path = "../sdk", version = "=1.14.13" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.13" } +solana-sdk = { path = "../sdk", version = "=1.14.14" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.14" } thiserror = "1.0.31" [package.metadata.docs.rs] diff --git a/geyser-plugin-manager/Cargo.toml b/geyser-plugin-manager/Cargo.toml index d451ed9b10791e..cac8176488478e 100644 --- a/geyser-plugin-manager/Cargo.toml +++ b/geyser-plugin-manager/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-geyser-plugin-manager" description = "The Solana Geyser plugin manager." -version = "1.14.13" +version = "1.14.14" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -16,13 +16,13 @@ json5 = "0.4.1" libloading = "0.7.3" log = "0.4.17" serde_json = "1.0.81" -solana-geyser-plugin-interface = { path = "../geyser-plugin-interface", version = "=1.14.13" } -solana-measure = { path = "../measure", version = "=1.14.13" } -solana-metrics = { path = "../metrics", version = "=1.14.13" } -solana-rpc = { path = "../rpc", version = "=1.14.13" } -solana-runtime = { path = "../runtime", version = "=1.14.13" } -solana-sdk = { path = "../sdk", version = "=1.14.13" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.13" } +solana-geyser-plugin-interface = { path = "../geyser-plugin-interface", version = "=1.14.14" } +solana-measure = { path = "../measure", version = "=1.14.14" } +solana-metrics = { path = "../metrics", version = "=1.14.14" } +solana-rpc = { path = "../rpc", version = "=1.14.14" } +solana-runtime = { path = "../runtime", version = "=1.14.14" } +solana-sdk = { path = "../sdk", version = "=1.14.14" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.14" } thiserror = "1.0.31" [package.metadata.docs.rs] diff --git a/gossip/Cargo.toml b/gossip/Cargo.toml index dc637e8105f1fa..853f6ea61170b6 100644 --- a/gossip/Cargo.toml +++ b/gossip/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-gossip" description = "Blockchain, Rebuilt for Scale" -version = "1.14.13" +version = "1.14.14" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -27,24 +27,24 @@ rayon = "1.5.3" serde = "1.0.138" serde_bytes = "0.11" serde_derive = "1.0.103" -solana-bloom = { path = "../bloom", version = "=1.14.13" } -solana-clap-utils = { path = "../clap-utils", version = "=1.14.13" } -solana-client = { path = "../client", version = "=1.14.13" } -solana-entry = { path = "../entry", version = "=1.14.13" } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.13" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.13" } -solana-ledger = { path = "../ledger", version = "=1.14.13" } -solana-logger = { path = "../logger", version = "=1.14.13" } -solana-measure = { path = "../measure", version = "=1.14.13" } -solana-metrics = { path = "../metrics", version = "=1.14.13" } -solana-net-utils = { path = "../net-utils", version = "=1.14.13" } -solana-perf = { path = "../perf", version = "=1.14.13" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.13" } -solana-runtime = { path = "../runtime", version = "=1.14.13" } -solana-sdk = { path = "../sdk", version = "=1.14.13" } -solana-streamer = { path = "../streamer", version = "=1.14.13" } -solana-version = { path = "../version", version = "=1.14.13" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.13" } +solana-bloom = { path = "../bloom", version = "=1.14.14" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.14" } +solana-client = { path = "../client", version = "=1.14.14" } +solana-entry = { path = "../entry", version = "=1.14.14" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.14" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.14" } +solana-ledger = { path = "../ledger", version = "=1.14.14" } +solana-logger = { path = "../logger", version = "=1.14.14" } +solana-measure = { path = "../measure", version = "=1.14.14" } +solana-metrics = { path = "../metrics", version = "=1.14.14" } +solana-net-utils = { path = "../net-utils", version = "=1.14.14" } +solana-perf = { path = "../perf", version = "=1.14.14" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.14" } +solana-runtime = { path = "../runtime", version = "=1.14.14" } +solana-sdk = { path = "../sdk", version = "=1.14.14" } +solana-streamer = { path = "../streamer", version = "=1.14.14" } +solana-version = { path = "../version", version = "=1.14.14" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.14" } thiserror = "1.0" [dev-dependencies] diff --git a/install/Cargo.toml b/install/Cargo.toml index 08b0d346fe20bf..e7f993166352f6 100644 --- a/install/Cargo.toml +++ b/install/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-install" description = "The solana cluster software installer" -version = "1.14.13" +version = "1.14.14" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -26,12 +26,12 @@ reqwest = { version = "0.11.11", default-features = false, features = ["blocking semver = "1.0.10" serde = { version = "1.0.138", features = ["derive"] } serde_yaml = "0.8.26" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.13" } -solana-client = { path = "../client", version = "=1.14.13" } -solana-config-program = { path = "../programs/config", version = "=1.14.13" } -solana-logger = { path = "../logger", version = "=1.14.13" } -solana-sdk = { path = "../sdk", version = "=1.14.13" } -solana-version = { path = "../version", version = "=1.14.13" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.14" } +solana-client = { path = "../client", version = "=1.14.14" } +solana-config-program = { path = "../programs/config", version = "=1.14.14" } +solana-logger = { path = "../logger", version = "=1.14.14" } +solana-sdk = { path = "../sdk", version = "=1.14.14" } +solana-version = { path = "../version", version = "=1.14.14" } tar = "0.4.38" tempfile = "3.3.0" url = "2.2.2" diff --git a/keygen/Cargo.toml b/keygen/Cargo.toml index e3171832a4717c..486269b7c05695 100644 --- a/keygen/Cargo.toml +++ b/keygen/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-keygen" -version = "1.14.13" +version = "1.14.14" description = "Solana key generation utility" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,11 +14,11 @@ bs58 = "0.4.0" clap = { version = "3.1.5", features = ["cargo"] } dirs-next = "2.0.0" num_cpus = "1.13.1" -solana-clap-v3-utils = { path = "../clap-v3-utils", version = "=1.14.13" } -solana-cli-config = { path = "../cli-config", version = "=1.14.13" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.13" } -solana-sdk = { path = "../sdk", version = "=1.14.13" } -solana-version = { path = "../version", version = "=1.14.13" } +solana-clap-v3-utils = { path = "../clap-v3-utils", version = "=1.14.14" } +solana-cli-config = { path = "../cli-config", version = "=1.14.14" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.14" } +solana-sdk = { path = "../sdk", version = "=1.14.14" } +solana-version = { path = "../version", version = "=1.14.14" } tiny-bip39 = "0.8.2" [[bin]] diff --git a/ledger-tool/Cargo.toml b/ledger-tool/Cargo.toml index fe541ff3c9d657..d2adc5695a0b3c 100644 --- a/ledger-tool/Cargo.toml +++ b/ledger-tool/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-ledger-tool" description = "Blockchain, Rebuilt for Scale" -version = "1.14.13" +version = "1.14.14" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -22,20 +22,20 @@ log = { version = "0.4.17" } regex = "1" serde = { version = "1.0", features = ["derive"] } serde_json = "1.0.81" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.13" } -solana-cli-output = { path = "../cli-output", version = "=1.14.13" } -solana-core = { path = "../core", version = "=1.14.13" } -solana-entry = { path = "../entry", version = "=1.14.13" } -solana-ledger = { path = "../ledger", version = "=1.14.13" } -solana-logger = { path = "../logger", version = "=1.14.13" } -solana-measure = { path = "../measure", version = "=1.14.13" } -solana-runtime = { path = "../runtime", version = "=1.14.13" } -solana-sdk = { path = "../sdk", version = "=1.14.13" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.13" } -solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.13" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.13" } -solana-version = { path = "../version", version = "=1.14.13" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.13" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.14" } +solana-cli-output = { path = "../cli-output", version = "=1.14.14" } +solana-core = { path = "../core", version = "=1.14.14" } +solana-entry = { path = "../entry", version = "=1.14.14" } +solana-ledger = { path = "../ledger", version = "=1.14.14" } +solana-logger = { path = "../logger", version = "=1.14.14" } +solana-measure = { path = "../measure", version = "=1.14.14" } +solana-runtime = { path = "../runtime", version = "=1.14.14" } +solana-sdk = { path = "../sdk", version = "=1.14.14" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.14" } +solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.14" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.14" } +solana-version = { path = "../version", version = "=1.14.14" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.14" } tokio = { version = "1", features = ["full"] } [target.'cfg(not(target_env = "msvc"))'.dependencies] diff --git a/ledger/Cargo.toml b/ledger/Cargo.toml index 272cf796c28470..a71999ca50b377 100644 --- a/ledger/Cargo.toml +++ b/ledger/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-ledger" -version = "1.14.13" +version = "1.14.14" description = "Solana ledger" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -35,23 +35,23 @@ reed-solomon-erasure = { version = "6.0.0", features = ["simd-accel"] } serde = "1.0.138" serde_bytes = "0.11.6" sha2 = "0.10.2" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.13" } -solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.13" } -solana-entry = { path = "../entry", version = "=1.14.13" } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.13" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.13" } -solana-measure = { path = "../measure", version = "=1.14.13" } -solana-metrics = { path = "../metrics", version = "=1.14.13" } -solana-perf = { path = "../perf", version = "=1.14.13" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.13" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.13" } -solana-runtime = { path = "../runtime", version = "=1.14.13" } -solana-sdk = { path = "../sdk", version = "=1.14.13" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.13" } -solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.13" } -solana-storage-proto = { path = "../storage-proto", version = "=1.14.13" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.13" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.13" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.14" } +solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.14" } +solana-entry = { path = "../entry", version = "=1.14.14" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.14" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.14" } +solana-measure = { path = "../measure", version = "=1.14.14" } +solana-metrics = { path = "../metrics", version = "=1.14.14" } +solana-perf = { path = "../perf", version = "=1.14.14" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.14" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.14" } +solana-runtime = { path = "../runtime", version = "=1.14.14" } +solana-sdk = { path = "../sdk", version = "=1.14.14" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.14" } +solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.14" } +solana-storage-proto = { path = "../storage-proto", version = "=1.14.14" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.14" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.14" } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } spl-token-2022 = { version = "=0.5.0", features = ["no-entrypoint"] } static_assertions = "1.1.0" @@ -71,8 +71,8 @@ features = ["lz4"] [dev-dependencies] bs58 = "0.4.0" matches = "0.1.9" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.13" } -solana-logger = { path = "../logger", version = "=1.14.13" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.14" } +solana-logger = { path = "../logger", version = "=1.14.14" } test-case = "2.1.0" [build-dependencies] diff --git a/local-cluster/Cargo.toml b/local-cluster/Cargo.toml index fecec4c4aee5ab..e2803b9893d0d1 100644 --- a/local-cluster/Cargo.toml +++ b/local-cluster/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-local-cluster" description = "Blockchain, Rebuilt for Scale" -version = "1.14.13" +version = "1.14.14" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -16,25 +16,25 @@ itertools = "0.10.3" log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" -solana-client = { path = "../client", version = "=1.14.13" } -solana-config-program = { path = "../programs/config", version = "=1.14.13" } -solana-core = { path = "../core", version = "=1.14.13" } -solana-entry = { path = "../entry", version = "=1.14.13" } -solana-gossip = { path = "../gossip", version = "=1.14.13" } -solana-ledger = { path = "../ledger", version = "=1.14.13" } -solana-runtime = { path = "../runtime", version = "=1.14.13" } -solana-sdk = { path = "../sdk", version = "=1.14.13" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.13" } -solana-streamer = { path = "../streamer", version = "=1.14.13" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.13" } +solana-client = { path = "../client", version = "=1.14.14" } +solana-config-program = { path = "../programs/config", version = "=1.14.14" } +solana-core = { path = "../core", version = "=1.14.14" } +solana-entry = { path = "../entry", version = "=1.14.14" } +solana-gossip = { path = "../gossip", version = "=1.14.14" } +solana-ledger = { path = "../ledger", version = "=1.14.14" } +solana-runtime = { path = "../runtime", version = "=1.14.14" } +solana-sdk = { path = "../sdk", version = "=1.14.14" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.14" } +solana-streamer = { path = "../streamer", version = "=1.14.14" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.14" } tempfile = "3.3.0" [dev-dependencies] assert_matches = "1.5.0" gag = "1.0.0" serial_test = "0.8.0" -solana-download-utils = { path = "../download-utils", version = "=1.14.13" } -solana-logger = { path = "../logger", version = "=1.14.13" } +solana-download-utils = { path = "../download-utils", version = "=1.14.14" } +solana-logger = { path = "../logger", version = "=1.14.14" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/log-analyzer/Cargo.toml b/log-analyzer/Cargo.toml index 358f287af3f0f0..914b8feb5ebb28 100644 --- a/log-analyzer/Cargo.toml +++ b/log-analyzer/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-log-analyzer" description = "The solana cluster network analysis tool" -version = "1.14.13" +version = "1.14.14" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,8 +14,8 @@ byte-unit = "4.0.14" clap = { version = "3.1.5", features = ["cargo"] } serde = "1.0.138" serde_json = "1.0.81" -solana-logger = { path = "../logger", version = "=1.14.13" } -solana-version = { path = "../version", version = "=1.14.13" } +solana-logger = { path = "../logger", version = "=1.14.14" } +solana-version = { path = "../version", version = "=1.14.14" } [[bin]] name = "solana-log-analyzer" diff --git a/logger/Cargo.toml b/logger/Cargo.toml index d7bd2203f9ff6f..9b191becc10ebb 100644 --- a/logger/Cargo.toml +++ b/logger/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-logger" -version = "1.14.13" +version = "1.14.14" description = "Solana Logger" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/measure/Cargo.toml b/measure/Cargo.toml index 7d3d16984407af..e18b55c0411847 100644 --- a/measure/Cargo.toml +++ b/measure/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "solana-measure" description = "Blockchain, Rebuilt for Scale" -version = "1.14.13" +version = "1.14.14" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-measure" readme = "../README.md" @@ -12,7 +12,7 @@ edition = "2021" [dependencies] log = "0.4.17" -solana-sdk = { path = "../sdk", version = "=1.14.13" } +solana-sdk = { path = "../sdk", version = "=1.14.14" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/merkle-root-bench/Cargo.toml b/merkle-root-bench/Cargo.toml index ed46c89a6511a5..7b1f62d56ca6a3 100644 --- a/merkle-root-bench/Cargo.toml +++ b/merkle-root-bench/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-merkle-root-bench" -version = "1.14.13" +version = "1.14.14" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -11,11 +11,11 @@ publish = false [dependencies] clap = "2.33.1" log = "0.4.17" -solana-logger = { path = "../logger", version = "=1.14.13" } -solana-measure = { path = "../measure", version = "=1.14.13" } -solana-runtime = { path = "../runtime", version = "=1.14.13" } -solana-sdk = { path = "../sdk", version = "=1.14.13" } -solana-version = { path = "../version", version = "=1.14.13" } +solana-logger = { path = "../logger", version = "=1.14.14" } +solana-measure = { path = "../measure", version = "=1.14.14" } +solana-runtime = { path = "../runtime", version = "=1.14.14" } +solana-sdk = { path = "../sdk", version = "=1.14.14" } +solana-version = { path = "../version", version = "=1.14.14" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/merkle-tree/Cargo.toml b/merkle-tree/Cargo.toml index 7d74ebce4154ed..67ccc90bf793cb 100644 --- a/merkle-tree/Cargo.toml +++ b/merkle-tree/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-merkle-tree" -version = "1.14.13" +version = "1.14.14" description = "Solana Merkle Tree" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -11,7 +11,7 @@ edition = "2021" [dependencies] fast-math = "0.1" -solana-program = { path = "../sdk/program", version = "=1.14.13" } +solana-program = { path = "../sdk/program", version = "=1.14.14" } # This can go once the BPF toolchain target Rust 1.42.0+ [target.bpfel-unknown-unknown.dependencies] diff --git a/metrics/Cargo.toml b/metrics/Cargo.toml index 83115a7f7cbb39..57590a8702d3d1 100644 --- a/metrics/Cargo.toml +++ b/metrics/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-metrics" -version = "1.14.13" +version = "1.14.14" description = "Solana Metrics" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -15,7 +15,7 @@ gethostname = "0.2.3" lazy_static = "1.4.0" log = "0.4.17" reqwest = { version = "0.11.11", default-features = false, features = ["blocking", "brotli", "deflate", "gzip", "rustls-tls", "json"] } -solana-sdk = { path = "../sdk", version = "=1.14.13" } +solana-sdk = { path = "../sdk", version = "=1.14.14" } [dev-dependencies] env_logger = "0.9.0" diff --git a/net-shaper/Cargo.toml b/net-shaper/Cargo.toml index af49a4bd130b40..f4630c79364b79 100644 --- a/net-shaper/Cargo.toml +++ b/net-shaper/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-net-shaper" description = "The solana cluster network shaping tool" -version = "1.14.13" +version = "1.14.14" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,7 +14,7 @@ clap = { version = "3.1.5", features = ["cargo"] } rand = "0.7.0" serde = { version = "1.0.138", features = ["derive"] } serde_json = "1.0.81" -solana-logger = { path = "../logger", version = "=1.14.13" } +solana-logger = { path = "../logger", version = "=1.14.14" } [[bin]] name = "solana-net-shaper" diff --git a/net-utils/Cargo.toml b/net-utils/Cargo.toml index 1a4292a0c7602d..a9add614a68d33 100644 --- a/net-utils/Cargo.toml +++ b/net-utils/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-net-utils" -version = "1.14.13" +version = "1.14.14" description = "Solana Network Utilities" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -19,9 +19,9 @@ rand = "0.7.0" serde = "1.0.138" serde_derive = "1.0.103" socket2 = "0.4.4" -solana-logger = { path = "../logger", version = "=1.14.13" } -solana-sdk = { path = "../sdk", version = "=1.14.13" } -solana-version = { path = "../version", version = "=1.14.13" } +solana-logger = { path = "../logger", version = "=1.14.14" } +solana-sdk = { path = "../sdk", version = "=1.14.14" } +solana-version = { path = "../version", version = "=1.14.14" } tokio = { version = "1", features = ["full"] } url = "2.2.2" diff --git a/notifier/Cargo.toml b/notifier/Cargo.toml index 6bd438928849e9..546e337b1d34e7 100644 --- a/notifier/Cargo.toml +++ b/notifier/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-notifier" -version = "1.14.13" +version = "1.14.14" description = "Solana Notifier" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/perf/Cargo.toml b/perf/Cargo.toml index 35f89075cc1630..af6bfc36b31d31 100644 --- a/perf/Cargo.toml +++ b/perf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-perf" -version = "1.14.13" +version = "1.14.14" description = "Solana Performance APIs" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -22,10 +22,10 @@ log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" serde = "1.0.138" -solana-metrics = { path = "../metrics", version = "=1.14.13" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.13" } -solana-sdk = { path = "../sdk", version = "=1.14.13" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.13" } +solana-metrics = { path = "../metrics", version = "=1.14.14" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.14" } +solana-sdk = { path = "../sdk", version = "=1.14.14" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.14" } [target."cfg(target_os = \"linux\")".dependencies] caps = "0.5.3" @@ -37,7 +37,7 @@ name = "solana_perf" [dev-dependencies] matches = "0.1.9" -solana-logger = { path = "../logger", version = "=1.14.13" } +solana-logger = { path = "../logger", version = "=1.14.14" } [[bench]] name = "sigverify" diff --git a/poh-bench/Cargo.toml b/poh-bench/Cargo.toml index c6d779ed388801..3f46f29a30d61d 100644 --- a/poh-bench/Cargo.toml +++ b/poh-bench/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-poh-bench" -version = "1.14.13" +version = "1.14.14" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,12 +14,12 @@ clap = { version = "3.1.5", features = ["cargo"] } log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" -solana-entry = { path = "../entry", version = "=1.14.13" } -solana-logger = { path = "../logger", version = "=1.14.13" } -solana-measure = { path = "../measure", version = "=1.14.13" } -solana-perf = { path = "../perf", version = "=1.14.13" } -solana-sdk = { path = "../sdk", version = "=1.14.13" } -solana-version = { path = "../version", version = "=1.14.13" } +solana-entry = { path = "../entry", version = "=1.14.14" } +solana-logger = { path = "../logger", version = "=1.14.14" } +solana-measure = { path = "../measure", version = "=1.14.14" } +solana-perf = { path = "../perf", version = "=1.14.14" } +solana-sdk = { path = "../sdk", version = "=1.14.14" } +solana-version = { path = "../version", version = "=1.14.14" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/poh/Cargo.toml b/poh/Cargo.toml index 12890d104c2e2b..7e664979b81fda 100644 --- a/poh/Cargo.toml +++ b/poh/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-poh" -version = "1.14.13" +version = "1.14.14" description = "Solana PoH" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,21 +13,21 @@ edition = "2021" core_affinity = "0.5.10" crossbeam-channel = "0.5" log = "0.4.17" -solana-entry = { path = "../entry", version = "=1.14.13" } -solana-ledger = { path = "../ledger", version = "=1.14.13" } -solana-measure = { path = "../measure", version = "=1.14.13" } -solana-metrics = { path = "../metrics", version = "=1.14.13" } -solana-runtime = { path = "../runtime", version = "=1.14.13" } -solana-sdk = { path = "../sdk", version = "=1.14.13" } -solana-sys-tuner = { path = "../sys-tuner", version = "=1.14.13" } +solana-entry = { path = "../entry", version = "=1.14.14" } +solana-ledger = { path = "../ledger", version = "=1.14.14" } +solana-measure = { path = "../measure", version = "=1.14.14" } +solana-metrics = { path = "../metrics", version = "=1.14.14" } +solana-runtime = { path = "../runtime", version = "=1.14.14" } +solana-sdk = { path = "../sdk", version = "=1.14.14" } +solana-sys-tuner = { path = "../sys-tuner", version = "=1.14.14" } thiserror = "1.0" [dev-dependencies] bincode = "1.3.3" matches = "0.1.9" rand = "0.7.0" -solana-logger = { path = "../logger", version = "=1.14.13" } -solana-perf = { path = "../perf", version = "=1.14.13" } +solana-logger = { path = "../logger", version = "=1.14.14" } +solana-perf = { path = "../perf", version = "=1.14.14" } [lib] crate-type = ["lib"] diff --git a/program-runtime/Cargo.toml b/program-runtime/Cargo.toml index 76e61455482278..e36713940f34d7 100644 --- a/program-runtime/Cargo.toml +++ b/program-runtime/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-program-runtime" -version = "1.14.13" +version = "1.14.14" description = "Solana program runtime" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -21,16 +21,16 @@ num-derive = { version = "0.3" } num-traits = { version = "0.2" } rand = "0.7.0" serde = { version = "1.0.129", features = ["derive", "rc"] } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.13" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.13" } -solana-measure = { path = "../measure", version = "=1.14.13" } -solana-metrics = { path = "../metrics", version = "=1.14.13" } -solana-sdk = { path = "../sdk", version = "=1.14.13" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.14" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.14" } +solana-measure = { path = "../measure", version = "=1.14.14" } +solana-metrics = { path = "../metrics", version = "=1.14.14" } +solana-sdk = { path = "../sdk", version = "=1.14.14" } thiserror = "1.0" enum-iterator = "0.8.1" [dev-dependencies] -solana-logger = { path = "../logger", version = "=1.14.13" } +solana-logger = { path = "../logger", version = "=1.14.14" } [lib] crate-type = ["lib"] diff --git a/program-test/Cargo.toml b/program-test/Cargo.toml index 36f232fad08932..a6612f1814835e 100644 --- a/program-test/Cargo.toml +++ b/program-test/Cargo.toml @@ -5,7 +5,7 @@ edition = "2021" license = "Apache-2.0" name = "solana-program-test" repository = "https://github.com/solana-labs/solana" -version = "1.14.13" +version = "1.14.14" [dependencies] assert_matches = "1.5.0" @@ -15,16 +15,16 @@ bincode = "1.3.3" chrono-humanize = "0.2.1" log = "0.4.17" serde = "1.0.138" -solana-banks-client = { path = "../banks-client", version = "=1.14.13" } -solana-banks-server = { path = "../banks-server", version = "=1.14.13" } -solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.13" } -solana-logger = { path = "../logger", version = "=1.14.13" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.13" } -solana-runtime = { path = "../runtime", version = "=1.14.13" } -solana-sdk = { path = "../sdk", version = "=1.14.13" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.13" } +solana-banks-client = { path = "../banks-client", version = "=1.14.14" } +solana-banks-server = { path = "../banks-server", version = "=1.14.14" } +solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.14" } +solana-logger = { path = "../logger", version = "=1.14.14" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.14" } +solana-runtime = { path = "../runtime", version = "=1.14.14" } +solana-sdk = { path = "../sdk", version = "=1.14.14" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.14" } thiserror = "1.0" tokio = { version = "1", features = ["full"] } [dev-dependencies] -solana-stake-program = { path = "../programs/stake", version = "=1.14.13" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.14" } diff --git a/programs/address-lookup-table-tests/Cargo.toml b/programs/address-lookup-table-tests/Cargo.toml index e832f8ef300e4a..9c54018b4937b1 100644 --- a/programs/address-lookup-table-tests/Cargo.toml +++ b/programs/address-lookup-table-tests/Cargo.toml @@ -3,7 +3,7 @@ [package] name = "solana-address-lookup-table-program-tests" -version = "1.14.13" +version = "1.14.14" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" @@ -14,9 +14,9 @@ publish = false [dev-dependencies] assert_matches = "1.5.0" bincode = "1.3.3" -solana-address-lookup-table-program = { path = "../address-lookup-table", version = "=1.14.13" } -solana-program-test = { path = "../../program-test", version = "=1.14.13" } -solana-sdk = { path = "../../sdk", version = "=1.14.13" } +solana-address-lookup-table-program = { path = "../address-lookup-table", version = "=1.14.14" } +solana-program-test = { path = "../../program-test", version = "=1.14.14" } +solana-sdk = { path = "../../sdk", version = "=1.14.14" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/address-lookup-table/Cargo.toml b/programs/address-lookup-table/Cargo.toml index 59a4a9c4c55477..07961b0fd901e2 100644 --- a/programs/address-lookup-table/Cargo.toml +++ b/programs/address-lookup-table/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-address-lookup-table-program" -version = "1.14.13" +version = "1.14.14" description = "Solana address lookup table program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -16,14 +16,14 @@ log = "0.4.17" num-derive = "0.3" num-traits = "0.2" serde = { version = "1.0.138", features = ["derive"] } -solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.13" } -solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.13" } -solana-program = { path = "../../sdk/program", version = "=1.14.13" } +solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.14" } +solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.14" } +solana-program = { path = "../../sdk/program", version = "=1.14.14" } thiserror = "1.0" [target.'cfg(not(target_os = "solana"))'.dependencies] -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.13" } -solana-sdk = { path = "../../sdk", version = "=1.14.13" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.14" } +solana-sdk = { path = "../../sdk", version = "=1.14.14" } [build-dependencies] rustc_version = "0.4" diff --git a/programs/bpf-loader-tests/Cargo.toml b/programs/bpf-loader-tests/Cargo.toml index 35f0688d9b4ea5..6ef8bcf75cc9d9 100644 --- a/programs/bpf-loader-tests/Cargo.toml +++ b/programs/bpf-loader-tests/Cargo.toml @@ -3,7 +3,7 @@ [package] name = "solana-bpf-loader-program-tests" -version = "1.14.13" +version = "1.14.14" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" @@ -14,9 +14,9 @@ publish = false [dev-dependencies] assert_matches = "1.5.0" bincode = "1.3.3" -solana-bpf-loader-program = { path = "../bpf_loader", version = "=1.14.13" } -solana-program-test = { path = "../../program-test", version = "=1.14.13" } -solana-sdk = { path = "../../sdk", version = "=1.14.13" } +solana-bpf-loader-program = { path = "../bpf_loader", version = "=1.14.14" } +solana-program-test = { path = "../../program-test", version = "=1.14.14" } +solana-sdk = { path = "../../sdk", version = "=1.14.14" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/bpf/Cargo.lock b/programs/bpf/Cargo.lock index af120631aaf9d3..1d163cbcbed4de 100644 --- a/programs/bpf/Cargo.lock +++ b/programs/bpf/Cargo.lock @@ -4054,7 +4054,7 @@ dependencies = [ [[package]] name = "solana-account-decoder" -version = "1.14.13" +version = "1.14.14" dependencies = [ "Inflector", "base64 0.13.0", @@ -4067,7 +4067,7 @@ dependencies = [ "serde_json", "solana-address-lookup-table-program", "solana-config-program", - "solana-sdk 1.14.13", + "solana-sdk 1.14.14", "solana-vote-program", "spl-token", "spl-token-2022", @@ -4077,7 +4077,7 @@ dependencies = [ [[package]] name = "solana-address-lookup-table-program" -version = "1.14.13" +version = "1.14.14" dependencies = [ "bincode", "bytemuck", @@ -4086,23 +4086,23 @@ dependencies = [ "num-traits", "rustc_version", "serde", - "solana-frozen-abi 1.14.13", - "solana-frozen-abi-macro 1.14.13", - "solana-program 1.14.13", + "solana-frozen-abi 1.14.14", + "solana-frozen-abi-macro 1.14.14", + "solana-program 1.14.14", "solana-program-runtime", - "solana-sdk 1.14.13", + "solana-sdk 1.14.14", "thiserror", ] [[package]] name = "solana-banks-client" -version = "1.14.13" +version = "1.14.14" dependencies = [ "borsh", "futures 0.3.21", "solana-banks-interface", - "solana-program 1.14.13", - "solana-sdk 1.14.13", + "solana-program 1.14.14", + "solana-sdk 1.14.14", "tarpc", "thiserror", "tokio", @@ -4111,16 +4111,16 @@ dependencies = [ [[package]] name = "solana-banks-interface" -version = "1.14.13" +version = "1.14.14" dependencies = [ "serde", - "solana-sdk 1.14.13", + "solana-sdk 1.14.14", "tarpc", ] [[package]] name = "solana-banks-server" -version = "1.14.13" +version = "1.14.14" dependencies = [ "bincode", "crossbeam-channel", @@ -4128,7 +4128,7 @@ dependencies = [ "solana-banks-interface", "solana-client", "solana-runtime", - "solana-sdk 1.14.13", + "solana-sdk 1.14.14", "solana-send-transaction-service", "tarpc", "tokio", @@ -4138,7 +4138,7 @@ dependencies = [ [[package]] name = "solana-bloom" -version = "1.14.13" +version = "1.14.14" dependencies = [ "bv", "fnv", @@ -4148,14 +4148,14 @@ dependencies = [ "rustc_version", "serde", "serde_derive", - "solana-frozen-abi 1.14.13", - "solana-frozen-abi-macro 1.14.13", - "solana-sdk 1.14.13", + "solana-frozen-abi 1.14.14", + "solana-frozen-abi-macro 1.14.14", + "solana-sdk 1.14.14", ] [[package]] name = "solana-bpf-loader-program" -version = "1.14.13" +version = "1.14.14" dependencies = [ "bincode", "byteorder 1.4.3", @@ -4164,15 +4164,15 @@ dependencies = [ "solana-measure", "solana-metrics", "solana-program-runtime", - "solana-sdk 1.14.13", - "solana-zk-token-sdk 1.14.13", + "solana-sdk 1.14.14", + "solana-zk-token-sdk 1.14.14", "solana_rbpf", "thiserror", ] [[package]] name = "solana-bpf-programs" -version = "1.14.13" +version = "1.14.14" dependencies = [ "bincode", "byteorder 1.4.3", @@ -4188,11 +4188,11 @@ dependencies = [ "solana-bpf-rust-realloc-invoke", "solana-cli-output", "solana-ledger", - "solana-logger 1.14.13", + "solana-logger 1.14.14", "solana-measure", "solana-program-runtime", "solana-runtime", - "solana-sdk 1.14.13", + "solana-sdk 1.14.14", "solana-transaction-status", "solana_rbpf", "walkdir", @@ -4200,385 +4200,385 @@ dependencies = [ [[package]] name = "solana-bpf-rust-128bit" -version = "1.14.13" +version = "1.14.14" dependencies = [ "solana-bpf-rust-128bit-dep", - "solana-program 1.14.13", + "solana-program 1.14.14", ] [[package]] name = "solana-bpf-rust-128bit-dep" -version = "1.14.13" +version = "1.14.14" dependencies = [ - "solana-program 1.14.13", + "solana-program 1.14.14", ] [[package]] name = "solana-bpf-rust-alloc" -version = "1.14.13" +version = "1.14.14" dependencies = [ - "solana-program 1.14.13", + "solana-program 1.14.14", ] [[package]] name = "solana-bpf-rust-call-depth" -version = "1.14.13" +version = "1.14.14" dependencies = [ - "solana-program 1.14.13", + "solana-program 1.14.14", ] [[package]] name = "solana-bpf-rust-caller-access" -version = "1.14.13" +version = "1.14.14" dependencies = [ - "solana-program 1.14.13", + "solana-program 1.14.14", ] [[package]] name = "solana-bpf-rust-curve25519" -version = "1.14.13" +version = "1.14.14" dependencies = [ - "solana-program 1.14.13", - "solana-zk-token-sdk 1.14.13", + "solana-program 1.14.14", + "solana-zk-token-sdk 1.14.14", ] [[package]] name = "solana-bpf-rust-custom-heap" -version = "1.14.13" +version = "1.14.14" dependencies = [ - "solana-program 1.14.13", + "solana-program 1.14.14", ] [[package]] name = "solana-bpf-rust-dep-crate" -version = "1.14.13" +version = "1.14.14" dependencies = [ "byteorder 1.4.3", "solana-address-lookup-table-program", - "solana-program 1.14.13", + "solana-program 1.14.14", ] [[package]] name = "solana-bpf-rust-deprecated-loader" -version = "1.14.13" +version = "1.14.14" dependencies = [ - "solana-program 1.14.13", + "solana-program 1.14.14", ] [[package]] name = "solana-bpf-rust-dup-accounts" -version = "1.14.13" +version = "1.14.14" dependencies = [ - "solana-program 1.14.13", + "solana-program 1.14.14", ] [[package]] name = "solana-bpf-rust-error-handling" -version = "1.14.13" +version = "1.14.14" dependencies = [ "num-derive", "num-traits", - "solana-program 1.14.13", + "solana-program 1.14.14", "thiserror", ] [[package]] name = "solana-bpf-rust-external-spend" -version = "1.14.13" +version = "1.14.14" dependencies = [ - "solana-program 1.14.13", + "solana-program 1.14.14", ] [[package]] name = "solana-bpf-rust-finalize" -version = "1.14.13" +version = "1.14.14" dependencies = [ - "solana-program 1.14.13", + "solana-program 1.14.14", ] [[package]] name = "solana-bpf-rust-get-minimum-delegation" -version = "1.14.13" +version = "1.14.14" dependencies = [ - "solana-program 1.14.13", + "solana-program 1.14.14", ] [[package]] name = "solana-bpf-rust-inner_instruction_alignment_check" -version = "1.14.13" +version = "1.14.14" dependencies = [ - "solana-program 1.14.13", + "solana-program 1.14.14", ] [[package]] name = "solana-bpf-rust-instruction-introspection" -version = "1.14.13" +version = "1.14.14" dependencies = [ - "solana-program 1.14.13", + "solana-program 1.14.14", ] [[package]] name = "solana-bpf-rust-invoke" -version = "1.14.13" +version = "1.14.14" dependencies = [ "solana-bpf-rust-invoked", - "solana-program 1.14.13", + "solana-program 1.14.14", ] [[package]] name = "solana-bpf-rust-invoke-and-error" -version = "1.14.13" +version = "1.14.14" dependencies = [ - "solana-program 1.14.13", + "solana-program 1.14.14", ] [[package]] name = "solana-bpf-rust-invoke-and-ok" -version = "1.14.13" +version = "1.14.14" dependencies = [ - "solana-program 1.14.13", + "solana-program 1.14.14", ] [[package]] name = "solana-bpf-rust-invoke-and-return" -version = "1.14.13" +version = "1.14.14" dependencies = [ - "solana-program 1.14.13", + "solana-program 1.14.14", ] [[package]] name = "solana-bpf-rust-invoked" -version = "1.14.13" +version = "1.14.14" dependencies = [ - "solana-program 1.14.13", + "solana-program 1.14.14", ] [[package]] name = "solana-bpf-rust-iter" -version = "1.14.13" +version = "1.14.14" dependencies = [ - "solana-program 1.14.13", + "solana-program 1.14.14", ] [[package]] name = "solana-bpf-rust-log-data" -version = "1.14.13" +version = "1.14.14" dependencies = [ - "solana-program 1.14.13", + "solana-program 1.14.14", ] [[package]] name = "solana-bpf-rust-many-args" -version = "1.14.13" +version = "1.14.14" dependencies = [ "solana-bpf-rust-many-args-dep", - "solana-program 1.14.13", + "solana-program 1.14.14", ] [[package]] name = "solana-bpf-rust-many-args-dep" -version = "1.14.13" +version = "1.14.14" dependencies = [ - "solana-program 1.14.13", + "solana-program 1.14.14", ] [[package]] name = "solana-bpf-rust-mem" -version = "1.14.13" +version = "1.14.14" dependencies = [ - "solana-program 1.14.13", + "solana-program 1.14.14", "solana-program-runtime", "solana-program-test", - "solana-sdk 1.14.13", + "solana-sdk 1.14.14", ] [[package]] name = "solana-bpf-rust-membuiltins" -version = "1.14.13" +version = "1.14.14" dependencies = [ "solana-bpf-rust-mem", - "solana-program 1.14.13", + "solana-program 1.14.14", ] [[package]] name = "solana-bpf-rust-noop" -version = "1.14.13" +version = "1.14.14" dependencies = [ - "solana-program 1.14.13", + "solana-program 1.14.14", ] [[package]] name = "solana-bpf-rust-panic" -version = "1.14.13" +version = "1.14.14" dependencies = [ - "solana-program 1.14.13", + "solana-program 1.14.14", ] [[package]] name = "solana-bpf-rust-param-passing" -version = "1.14.13" +version = "1.14.14" dependencies = [ "solana-bpf-rust-param-passing-dep", - "solana-program 1.14.13", + "solana-program 1.14.14", ] [[package]] name = "solana-bpf-rust-param-passing-dep" -version = "1.14.13" +version = "1.14.14" dependencies = [ - "solana-program 1.14.13", + "solana-program 1.14.14", ] [[package]] name = "solana-bpf-rust-rand" -version = "1.14.13" +version = "1.14.14" dependencies = [ "getrandom 0.1.14", "rand 0.7.3", - "solana-program 1.14.13", + "solana-program 1.14.14", ] [[package]] name = "solana-bpf-rust-realloc" -version = "1.14.13" +version = "1.14.14" dependencies = [ - "solana-program 1.14.13", + "solana-program 1.14.14", ] [[package]] name = "solana-bpf-rust-realloc-invoke" -version = "1.14.13" +version = "1.14.14" dependencies = [ "solana-bpf-rust-realloc", - "solana-program 1.14.13", + "solana-program 1.14.14", ] [[package]] name = "solana-bpf-rust-ro-account_modify" -version = "1.14.13" +version = "1.14.14" dependencies = [ - "solana-program 1.14.13", + "solana-program 1.14.14", ] [[package]] name = "solana-bpf-rust-ro-modify" -version = "1.14.13" +version = "1.14.14" dependencies = [ - "solana-program 1.14.13", + "solana-program 1.14.14", ] [[package]] name = "solana-bpf-rust-sanity" -version = "1.14.13" +version = "1.14.14" dependencies = [ - "solana-program 1.14.13", + "solana-program 1.14.14", "solana-program-runtime", "solana-program-test", - "solana-sdk 1.14.13", + "solana-sdk 1.14.14", ] [[package]] name = "solana-bpf-rust-secp256k1-recover" -version = "1.14.13" +version = "1.14.14" dependencies = [ "libsecp256k1 0.7.0", - "solana-program 1.14.13", + "solana-program 1.14.14", ] [[package]] name = "solana-bpf-rust-sha" -version = "1.14.13" +version = "1.14.14" dependencies = [ "blake3", - "solana-program 1.14.13", + "solana-program 1.14.14", ] [[package]] name = "solana-bpf-rust-sibling-instructions" -version = "1.14.13" +version = "1.14.14" dependencies = [ - "solana-program 1.14.13", + "solana-program 1.14.14", ] [[package]] name = "solana-bpf-rust-sibling_inner-instructions" -version = "1.14.13" +version = "1.14.14" dependencies = [ - "solana-program 1.14.13", + "solana-program 1.14.14", ] [[package]] name = "solana-bpf-rust-simulation" -version = "1.14.13" +version = "1.14.14" dependencies = [ - "solana-logger 1.14.13", - "solana-program 1.14.13", + "solana-logger 1.14.14", + "solana-program 1.14.14", "solana-program-test", - "solana-sdk 1.14.13", + "solana-sdk 1.14.14", "solana-validator", ] [[package]] name = "solana-bpf-rust-spoof1" -version = "1.14.13" +version = "1.14.14" dependencies = [ - "solana-program 1.14.13", + "solana-program 1.14.14", ] [[package]] name = "solana-bpf-rust-spoof1-system" -version = "1.14.13" +version = "1.14.14" dependencies = [ - "solana-program 1.14.13", + "solana-program 1.14.14", ] [[package]] name = "solana-bpf-rust-sysvar" -version = "1.14.13" +version = "1.14.14" dependencies = [ - "solana-program 1.14.13", + "solana-program 1.14.14", "solana-program-runtime", "solana-program-test", - "solana-sdk 1.14.13", + "solana-sdk 1.14.14", ] [[package]] name = "solana-bpf-rust-upgradeable" -version = "1.14.13" +version = "1.14.14" dependencies = [ - "solana-program 1.14.13", + "solana-program 1.14.14", ] [[package]] name = "solana-bpf-rust-upgraded" -version = "1.14.13" +version = "1.14.14" dependencies = [ - "solana-program 1.14.13", + "solana-program 1.14.14", ] [[package]] name = "solana-bucket-map" -version = "1.14.13" +version = "1.14.14" dependencies = [ "log", "memmap2", "modular-bitfield", "rand 0.7.3", "solana-measure", - "solana-sdk 1.14.13", + "solana-sdk 1.14.14", "tempfile", ] [[package]] name = "solana-clap-utils" -version = "1.14.13" +version = "1.14.14" dependencies = [ "chrono", "clap 2.33.3", "rpassword", "solana-perf", "solana-remote-wallet", - "solana-sdk 1.14.13", + "solana-sdk 1.14.14", "thiserror", "tiny-bip39", "uriparse", @@ -4587,7 +4587,7 @@ dependencies = [ [[package]] name = "solana-cli-config" -version = "1.14.13" +version = "1.14.14" dependencies = [ "dirs-next", "lazy_static", @@ -4595,13 +4595,13 @@ dependencies = [ "serde_derive", "serde_yaml", "solana-clap-utils", - "solana-sdk 1.14.13", + "solana-sdk 1.14.14", "url 2.2.2", ] [[package]] name = "solana-cli-output" -version = "1.14.13" +version = "1.14.14" dependencies = [ "Inflector", "base64 0.13.0", @@ -4618,7 +4618,7 @@ dependencies = [ "solana-clap-utils", "solana-cli-config", "solana-client", - "solana-sdk 1.14.13", + "solana-sdk 1.14.14", "solana-transaction-status", "solana-vote-program", "spl-memo", @@ -4626,7 +4626,7 @@ dependencies = [ [[package]] name = "solana-client" -version = "1.14.13" +version = "1.14.14" dependencies = [ "async-mutex", "async-trait", @@ -4662,7 +4662,7 @@ dependencies = [ "solana-measure", "solana-metrics", "solana-net-utils", - "solana-sdk 1.14.13", + "solana-sdk 1.14.14", "solana-streamer", "solana-transaction-status", "solana-version", @@ -4678,27 +4678,27 @@ dependencies = [ [[package]] name = "solana-compute-budget-program" -version = "1.14.13" +version = "1.14.14" dependencies = [ "solana-program-runtime", - "solana-sdk 1.14.13", + "solana-sdk 1.14.14", ] [[package]] name = "solana-config-program" -version = "1.14.13" +version = "1.14.14" dependencies = [ "bincode", "chrono", "serde", "serde_derive", "solana-program-runtime", - "solana-sdk 1.14.13", + "solana-sdk 1.14.14", ] [[package]] name = "solana-core" -version = "1.14.13" +version = "1.14.14" dependencies = [ "ahash", "base64 0.13.0", @@ -4727,8 +4727,8 @@ dependencies = [ "solana-bloom", "solana-client", "solana-entry", - "solana-frozen-abi 1.14.13", - "solana-frozen-abi-macro 1.14.13", + "solana-frozen-abi 1.14.14", + "solana-frozen-abi-macro 1.14.14", "solana-geyser-plugin-manager", "solana-gossip", "solana-ledger", @@ -4741,7 +4741,7 @@ dependencies = [ "solana-rayon-threadlimit", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.13", + "solana-sdk 1.14.14", "solana-send-transaction-service", "solana-streamer", "solana-transaction-status", @@ -4757,19 +4757,19 @@ dependencies = [ [[package]] name = "solana-download-utils" -version = "1.14.13" +version = "1.14.14" dependencies = [ "console", "indicatif", "log", "reqwest", "solana-runtime", - "solana-sdk 1.14.13", + "solana-sdk 1.14.14", ] [[package]] name = "solana-entry" -version = "1.14.13" +version = "1.14.14" dependencies = [ "bincode", "crossbeam-channel", @@ -4785,12 +4785,12 @@ dependencies = [ "solana-metrics", "solana-perf", "solana-rayon-threadlimit", - "solana-sdk 1.14.13", + "solana-sdk 1.14.14", ] [[package]] name = "solana-faucet" -version = "1.14.13" +version = "1.14.14" dependencies = [ "bincode", "byteorder 1.4.3", @@ -4801,9 +4801,9 @@ dependencies = [ "serde_derive", "solana-clap-utils", "solana-cli-config", - "solana-logger 1.14.13", + "solana-logger 1.14.14", "solana-metrics", - "solana-sdk 1.14.13", + "solana-sdk 1.14.14", "solana-version", "spl-memo", "thiserror", @@ -4846,7 +4846,7 @@ dependencies = [ [[package]] name = "solana-frozen-abi" -version = "1.14.13" +version = "1.14.14" dependencies = [ "ahash", "blake3", @@ -4871,7 +4871,7 @@ dependencies = [ "serde_derive", "serde_json", "sha2 0.10.2", - "solana-frozen-abi-macro 1.14.13", + "solana-frozen-abi-macro 1.14.14", "subtle", "thiserror", ] @@ -4890,7 +4890,7 @@ dependencies = [ [[package]] name = "solana-frozen-abi-macro" -version = "1.14.13" +version = "1.14.14" dependencies = [ "proc-macro2 1.0.41", "quote 1.0.18", @@ -4900,26 +4900,26 @@ dependencies = [ [[package]] name = "solana-genesis-utils" -version = "1.14.13" +version = "1.14.14" dependencies = [ "solana-download-utils", "solana-runtime", - "solana-sdk 1.14.13", + "solana-sdk 1.14.14", ] [[package]] name = "solana-geyser-plugin-interface" -version = "1.14.13" +version = "1.14.14" dependencies = [ "log", - "solana-sdk 1.14.13", + "solana-sdk 1.14.14", "solana-transaction-status", "thiserror", ] [[package]] name = "solana-geyser-plugin-manager" -version = "1.14.13" +version = "1.14.14" dependencies = [ "bs58", "crossbeam-channel", @@ -4932,14 +4932,14 @@ dependencies = [ "solana-metrics", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.13", + "solana-sdk 1.14.14", "solana-transaction-status", "thiserror", ] [[package]] name = "solana-gossip" -version = "1.14.13" +version = "1.14.14" dependencies = [ "bincode", "bv", @@ -4963,17 +4963,17 @@ dependencies = [ "solana-clap-utils", "solana-client", "solana-entry", - "solana-frozen-abi 1.14.13", - "solana-frozen-abi-macro 1.14.13", + "solana-frozen-abi 1.14.14", + "solana-frozen-abi-macro 1.14.14", "solana-ledger", - "solana-logger 1.14.13", + "solana-logger 1.14.14", "solana-measure", "solana-metrics", "solana-net-utils", "solana-perf", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.14.13", + "solana-sdk 1.14.14", "solana-streamer", "solana-version", "solana-vote-program", @@ -4982,7 +4982,7 @@ dependencies = [ [[package]] name = "solana-ledger" -version = "1.14.13" +version = "1.14.14" dependencies = [ "assert_matches", "bincode", @@ -5014,15 +5014,15 @@ dependencies = [ "solana-account-decoder", "solana-bpf-loader-program", "solana-entry", - "solana-frozen-abi 1.14.13", - "solana-frozen-abi-macro 1.14.13", + "solana-frozen-abi 1.14.14", + "solana-frozen-abi-macro 1.14.14", "solana-measure", "solana-metrics", "solana-perf", "solana-program-runtime", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.14.13", + "solana-sdk 1.14.14", "solana-stake-program", "solana-storage-bigtable", "solana-storage-proto", @@ -5051,7 +5051,7 @@ dependencies = [ [[package]] name = "solana-logger" -version = "1.14.13" +version = "1.14.14" dependencies = [ "env_logger", "lazy_static", @@ -5060,36 +5060,36 @@ dependencies = [ [[package]] name = "solana-measure" -version = "1.14.13" +version = "1.14.14" dependencies = [ "log", - "solana-sdk 1.14.13", + "solana-sdk 1.14.14", ] [[package]] name = "solana-merkle-tree" -version = "1.14.13" +version = "1.14.14" dependencies = [ "fast-math", "matches", - "solana-program 1.14.13", + "solana-program 1.14.14", ] [[package]] name = "solana-metrics" -version = "1.14.13" +version = "1.14.14" dependencies = [ "crossbeam-channel", "gethostname", "lazy_static", "log", "reqwest", - "solana-sdk 1.14.13", + "solana-sdk 1.14.14", ] [[package]] name = "solana-net-utils" -version = "1.14.13" +version = "1.14.14" dependencies = [ "bincode", "clap 3.1.6", @@ -5100,8 +5100,8 @@ dependencies = [ "serde", "serde_derive", "socket2", - "solana-logger 1.14.13", - "solana-sdk 1.14.13", + "solana-logger 1.14.14", + "solana-sdk 1.14.14", "solana-version", "tokio", "url 2.2.2", @@ -5109,7 +5109,7 @@ dependencies = [ [[package]] name = "solana-perf" -version = "1.14.13" +version = "1.14.14" dependencies = [ "ahash", "bincode", @@ -5128,13 +5128,13 @@ dependencies = [ "serde", "solana-metrics", "solana-rayon-threadlimit", - "solana-sdk 1.14.13", + "solana-sdk 1.14.14", "solana-vote-program", ] [[package]] name = "solana-poh" -version = "1.14.13" +version = "1.14.14" dependencies = [ "core_affinity", "crossbeam-channel", @@ -5144,7 +5144,7 @@ dependencies = [ "solana-measure", "solana-metrics", "solana-runtime", - "solana-sdk 1.14.13", + "solana-sdk 1.14.14", "solana-sys-tuner", "thiserror", ] @@ -5200,7 +5200,7 @@ dependencies = [ [[package]] name = "solana-program" -version = "1.14.13" +version = "1.14.14" dependencies = [ "base64 0.13.0", "bincode", @@ -5236,9 +5236,9 @@ dependencies = [ "serde_json", "sha2 0.10.2", "sha3 0.10.1", - "solana-frozen-abi 1.14.13", - "solana-frozen-abi-macro 1.14.13", - "solana-sdk-macro 1.14.13", + "solana-frozen-abi 1.14.14", + "solana-frozen-abi-macro 1.14.14", + "solana-sdk-macro 1.14.14", "thiserror", "tiny-bip39", "wasm-bindgen", @@ -5247,7 +5247,7 @@ dependencies = [ [[package]] name = "solana-program-runtime" -version = "1.14.13" +version = "1.14.14" dependencies = [ "base64 0.13.0", "bincode", @@ -5262,17 +5262,17 @@ dependencies = [ "rand 0.7.3", "rustc_version", "serde", - "solana-frozen-abi 1.14.13", - "solana-frozen-abi-macro 1.14.13", + "solana-frozen-abi 1.14.14", + "solana-frozen-abi-macro 1.14.14", "solana-measure", "solana-metrics", - "solana-sdk 1.14.13", + "solana-sdk 1.14.14", "thiserror", ] [[package]] name = "solana-program-test" -version = "1.14.13" +version = "1.14.14" dependencies = [ "assert_matches", "async-trait", @@ -5284,10 +5284,10 @@ dependencies = [ "solana-banks-client", "solana-banks-server", "solana-bpf-loader-program", - "solana-logger 1.14.13", + "solana-logger 1.14.14", "solana-program-runtime", "solana-runtime", - "solana-sdk 1.14.13", + "solana-sdk 1.14.14", "solana-vote-program", "thiserror", "tokio", @@ -5295,7 +5295,7 @@ dependencies = [ [[package]] name = "solana-rayon-threadlimit" -version = "1.14.13" +version = "1.14.14" dependencies = [ "lazy_static", "num_cpus", @@ -5303,7 +5303,7 @@ dependencies = [ [[package]] name = "solana-remote-wallet" -version = "1.14.13" +version = "1.14.14" dependencies = [ "console", "dialoguer", @@ -5313,14 +5313,14 @@ dependencies = [ "parking_lot 0.12.1", "qstring", "semver", - "solana-sdk 1.14.13", + "solana-sdk 1.14.14", "thiserror", "uriparse", ] [[package]] name = "solana-rpc" -version = "1.14.13" +version = "1.14.14" dependencies = [ "base64 0.13.0", "bincode", @@ -5353,7 +5353,7 @@ dependencies = [ "solana-poh", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.14.13", + "solana-sdk 1.14.14", "solana-send-transaction-service", "solana-stake-program", "solana-storage-bigtable", @@ -5371,7 +5371,7 @@ dependencies = [ [[package]] name = "solana-runtime" -version = "1.14.13" +version = "1.14.14" dependencies = [ "arrayref", "bincode", @@ -5408,17 +5408,17 @@ dependencies = [ "solana-bucket-map", "solana-compute-budget-program", "solana-config-program", - "solana-frozen-abi 1.14.13", - "solana-frozen-abi-macro 1.14.13", + "solana-frozen-abi 1.14.14", + "solana-frozen-abi-macro 1.14.14", "solana-measure", "solana-metrics", "solana-program-runtime", "solana-rayon-threadlimit", - "solana-sdk 1.14.13", + "solana-sdk 1.14.14", "solana-stake-program", "solana-vote-program", "solana-zk-token-proof-program", - "solana-zk-token-sdk 1.14.13", + "solana-zk-token-sdk 1.14.14", "strum", "strum_macros", "symlink", @@ -5481,7 +5481,7 @@ dependencies = [ [[package]] name = "solana-sdk" -version = "1.14.13" +version = "1.14.14" dependencies = [ "assert_matches", "base64 0.13.0", @@ -5518,11 +5518,11 @@ dependencies = [ "serde_json", "sha2 0.10.2", "sha3 0.10.1", - "solana-frozen-abi 1.14.13", - "solana-frozen-abi-macro 1.14.13", - "solana-logger 1.14.13", - "solana-program 1.14.13", - "solana-sdk-macro 1.14.13", + "solana-frozen-abi 1.14.14", + "solana-frozen-abi-macro 1.14.14", + "solana-logger 1.14.14", + "solana-program 1.14.14", + "solana-sdk-macro 1.14.14", "thiserror", "uriparse", "wasm-bindgen", @@ -5543,7 +5543,7 @@ dependencies = [ [[package]] name = "solana-sdk-macro" -version = "1.14.13" +version = "1.14.14" dependencies = [ "bs58", "proc-macro2 1.0.41", @@ -5554,7 +5554,7 @@ dependencies = [ [[package]] name = "solana-send-transaction-service" -version = "1.14.13" +version = "1.14.14" dependencies = [ "crossbeam-channel", "log", @@ -5562,12 +5562,12 @@ dependencies = [ "solana-measure", "solana-metrics", "solana-runtime", - "solana-sdk 1.14.13", + "solana-sdk 1.14.14", ] [[package]] name = "solana-stake-program" -version = "1.14.13" +version = "1.14.14" dependencies = [ "bincode", "log", @@ -5577,18 +5577,18 @@ dependencies = [ "serde", "serde_derive", "solana-config-program", - "solana-frozen-abi 1.14.13", - "solana-frozen-abi-macro 1.14.13", + "solana-frozen-abi 1.14.14", + "solana-frozen-abi-macro 1.14.14", "solana-metrics", "solana-program-runtime", - "solana-sdk 1.14.13", + "solana-sdk 1.14.14", "solana-vote-program", "thiserror", ] [[package]] name = "solana-storage-bigtable" -version = "1.14.13" +version = "1.14.14" dependencies = [ "backoff", "bincode", @@ -5609,7 +5609,7 @@ dependencies = [ "serde_derive", "smpl_jwt", "solana-metrics", - "solana-sdk 1.14.13", + "solana-sdk 1.14.14", "solana-storage-proto", "solana-transaction-status", "thiserror", @@ -5620,7 +5620,7 @@ dependencies = [ [[package]] name = "solana-storage-proto" -version = "1.14.13" +version = "1.14.14" dependencies = [ "bincode", "bs58", @@ -5628,14 +5628,14 @@ dependencies = [ "protobuf-src", "serde", "solana-account-decoder", - "solana-sdk 1.14.13", + "solana-sdk 1.14.14", "solana-transaction-status", "tonic-build 0.8.0", ] [[package]] name = "solana-streamer" -version = "1.14.13" +version = "1.14.14" dependencies = [ "crossbeam-channel", "futures-util", @@ -5654,7 +5654,7 @@ dependencies = [ "rustls 0.20.6", "solana-metrics", "solana-perf", - "solana-sdk 1.14.13", + "solana-sdk 1.14.14", "thiserror", "tokio", "x509-parser", @@ -5662,13 +5662,13 @@ dependencies = [ [[package]] name = "solana-sys-tuner" -version = "1.14.13" +version = "1.14.14" dependencies = [ "clap 2.33.3", "libc", "log", "nix", - "solana-logger 1.14.13", + "solana-logger 1.14.14", "solana-version", "sysctl", "unix_socket2", @@ -5677,7 +5677,7 @@ dependencies = [ [[package]] name = "solana-test-validator" -version = "1.14.13" +version = "1.14.14" dependencies = [ "base64 0.13.0", "log", @@ -5688,20 +5688,20 @@ dependencies = [ "solana-core", "solana-gossip", "solana-ledger", - "solana-logger 1.14.13", + "solana-logger 1.14.14", "solana-net-utils", "solana-program-runtime", "solana-program-test", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.13", + "solana-sdk 1.14.14", "solana-streamer", "tokio", ] [[package]] name = "solana-transaction-status" -version = "1.14.13" +version = "1.14.14" dependencies = [ "Inflector", "base64 0.13.0", @@ -5717,7 +5717,7 @@ dependencies = [ "solana-address-lookup-table-program", "solana-measure", "solana-metrics", - "solana-sdk 1.14.13", + "solana-sdk 1.14.14", "solana-vote-program", "spl-associated-token-account", "spl-memo", @@ -5728,7 +5728,7 @@ dependencies = [ [[package]] name = "solana-validator" -version = "1.14.13" +version = "1.14.14" dependencies = [ "chrono", "clap 2.33.3", @@ -5759,14 +5759,14 @@ dependencies = [ "solana-genesis-utils", "solana-gossip", "solana-ledger", - "solana-logger 1.14.13", + "solana-logger 1.14.14", "solana-metrics", "solana-net-utils", "solana-perf", "solana-poh", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.13", + "solana-sdk 1.14.14", "solana-send-transaction-service", "solana-storage-bigtable", "solana-streamer", @@ -5779,21 +5779,21 @@ dependencies = [ [[package]] name = "solana-version" -version = "1.14.13" +version = "1.14.14" dependencies = [ "log", "rustc_version", "semver", "serde", "serde_derive", - "solana-frozen-abi 1.14.13", - "solana-frozen-abi-macro 1.14.13", - "solana-sdk 1.14.13", + "solana-frozen-abi 1.14.14", + "solana-frozen-abi-macro 1.14.14", + "solana-sdk 1.14.14", ] [[package]] name = "solana-vote-program" -version = "1.14.13" +version = "1.14.14" dependencies = [ "bincode", "log", @@ -5802,25 +5802,25 @@ dependencies = [ "rustc_version", "serde", "serde_derive", - "solana-frozen-abi 1.14.13", - "solana-frozen-abi-macro 1.14.13", + "solana-frozen-abi 1.14.14", + "solana-frozen-abi-macro 1.14.14", "solana-metrics", "solana-program-runtime", - "solana-sdk 1.14.13", + "solana-sdk 1.14.14", "thiserror", ] [[package]] name = "solana-zk-token-proof-program" -version = "1.14.13" +version = "1.14.14" dependencies = [ "bytemuck", "getrandom 0.1.14", "num-derive", "num-traits", "solana-program-runtime", - "solana-sdk 1.14.13", - "solana-zk-token-sdk 1.14.13", + "solana-sdk 1.14.14", + "solana-zk-token-sdk 1.14.14", ] [[package]] @@ -5856,7 +5856,7 @@ dependencies = [ [[package]] name = "solana-zk-token-sdk" -version = "1.14.13" +version = "1.14.14" dependencies = [ "aes-gcm-siv", "arrayref", @@ -5876,8 +5876,8 @@ dependencies = [ "serde", "serde_json", "sha3 0.9.1", - "solana-program 1.14.13", - "solana-sdk 1.14.13", + "solana-program 1.14.14", + "solana-sdk 1.14.14", "subtle", "thiserror", "zeroize", diff --git a/programs/bpf/Cargo.toml b/programs/bpf/Cargo.toml index 7b971fd4277ecc..2f258ae4ff28f1 100644 --- a/programs/bpf/Cargo.toml +++ b/programs/bpf/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "solana-bpf-programs" description = "Blockchain, Rebuilt for Scale" -version = "1.14.13" +version = "1.14.14" documentation = "https://docs.rs/solana" homepage = "https://solana.com/" readme = "README.md" @@ -26,22 +26,22 @@ itertools = "0.10.1" log = "0.4.11" miow = "0.3.6" net2 = "0.2.37" -solana-account-decoder = { path = "../../account-decoder", version = "=1.14.13" } -solana-bpf-loader-program = { path = "../bpf_loader", version = "=1.14.13" } -solana-bpf-rust-invoke = { path = "rust/invoke", version = "=1.14.13" } -solana-bpf-rust-realloc = { path = "rust/realloc", version = "=1.14.13" } -solana-bpf-rust-realloc-invoke = { path = "rust/realloc_invoke", version = "=1.14.13" } -solana-cli-output = { path = "../../cli-output", version = "=1.14.13" } -solana-logger = { path = "../../logger", version = "=1.14.13" } -solana-measure = { path = "../../measure", version = "=1.14.13" } -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.13" } -solana-runtime = { path = "../../runtime", version = "=1.14.13" } -solana-sdk = { path = "../../sdk", version = "=1.14.13" } -solana-transaction-status = { path = "../../transaction-status", version = "=1.14.13" } +solana-account-decoder = { path = "../../account-decoder", version = "=1.14.14" } +solana-bpf-loader-program = { path = "../bpf_loader", version = "=1.14.14" } +solana-bpf-rust-invoke = { path = "rust/invoke", version = "=1.14.14" } +solana-bpf-rust-realloc = { path = "rust/realloc", version = "=1.14.14" } +solana-bpf-rust-realloc-invoke = { path = "rust/realloc_invoke", version = "=1.14.14" } +solana-cli-output = { path = "../../cli-output", version = "=1.14.14" } +solana-logger = { path = "../../logger", version = "=1.14.14" } +solana-measure = { path = "../../measure", version = "=1.14.14" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.14" } +solana-runtime = { path = "../../runtime", version = "=1.14.14" } +solana-sdk = { path = "../../sdk", version = "=1.14.14" } +solana-transaction-status = { path = "../../transaction-status", version = "=1.14.14" } solana_rbpf = "=0.2.31" [dev-dependencies] -solana-ledger = { path = "../../ledger", version = "=1.14.13" } +solana-ledger = { path = "../../ledger", version = "=1.14.14" } [[bench]] name = "bpf_loader" diff --git a/programs/bpf/rust/128bit/Cargo.toml b/programs/bpf/rust/128bit/Cargo.toml index 9f07a8fed6c409..1ddf4c7dcc456d 100644 --- a/programs/bpf/rust/128bit/Cargo.toml +++ b/programs/bpf/rust/128bit/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-128bit" -version = "1.14.13" +version = "1.14.14" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ documentation = "https://docs.rs/solana-bpf-rust-128bit" edition = "2021" [dependencies] -solana-bpf-rust-128bit-dep = { path = "../128bit_dep", version = "=1.14.13" } -solana-program = { path = "../../../../sdk/program", version = "=1.14.13" } +solana-bpf-rust-128bit-dep = { path = "../128bit_dep", version = "=1.14.14" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.14" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/128bit_dep/Cargo.toml b/programs/bpf/rust/128bit_dep/Cargo.toml index 2ca2505a0bec84..022e3f0dbdf455 100644 --- a/programs/bpf/rust/128bit_dep/Cargo.toml +++ b/programs/bpf/rust/128bit_dep/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-128bit-dep" -version = "1.14.13" +version = "1.14.14" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-128bit-dep" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.13" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.14" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/bpf/rust/alloc/Cargo.toml b/programs/bpf/rust/alloc/Cargo.toml index 6982836d66f0b0..98e919bccb36e5 100644 --- a/programs/bpf/rust/alloc/Cargo.toml +++ b/programs/bpf/rust/alloc/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-alloc" -version = "1.14.13" +version = "1.14.14" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-alloc" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.13" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.14" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/call_depth/Cargo.toml b/programs/bpf/rust/call_depth/Cargo.toml index bf8b75f9bd42b9..3342d2d69876c9 100644 --- a/programs/bpf/rust/call_depth/Cargo.toml +++ b/programs/bpf/rust/call_depth/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-call-depth" -version = "1.14.13" +version = "1.14.14" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-call-depth" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.13" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.14" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/caller_access/Cargo.toml b/programs/bpf/rust/caller_access/Cargo.toml index c14737cf9479d8..0b24276a6bb6ab 100644 --- a/programs/bpf/rust/caller_access/Cargo.toml +++ b/programs/bpf/rust/caller_access/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-caller-access" -version = "1.14.13" +version = "1.14.14" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-caller-access" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.13" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.14" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/curve25519/Cargo.toml b/programs/bpf/rust/curve25519/Cargo.toml index 78533eaef7093e..340b354fa6ced9 100644 --- a/programs/bpf/rust/curve25519/Cargo.toml +++ b/programs/bpf/rust/curve25519/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-curve25519" -version = "1.14.13" +version = "1.14.14" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ documentation = "https://docs.rs/solana-bpf-rust-zktoken_crypto" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.13" } -solana-zk-token-sdk = { path = "../../../../zk-token-sdk", version = "=1.14.13" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.14" } +solana-zk-token-sdk = { path = "../../../../zk-token-sdk", version = "=1.14.14" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/custom_heap/Cargo.toml b/programs/bpf/rust/custom_heap/Cargo.toml index 189f61b5e45ba7..ea279044779b85 100644 --- a/programs/bpf/rust/custom_heap/Cargo.toml +++ b/programs/bpf/rust/custom_heap/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-custom-heap" -version = "1.14.13" +version = "1.14.14" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-custom-heap" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.13" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.14" } [features] default = ["custom-heap"] diff --git a/programs/bpf/rust/dep_crate/Cargo.toml b/programs/bpf/rust/dep_crate/Cargo.toml index e005096f9cda08..c4fb870139e396 100644 --- a/programs/bpf/rust/dep_crate/Cargo.toml +++ b/programs/bpf/rust/dep_crate/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-dep-crate" -version = "1.14.13" +version = "1.14.14" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,8 +12,8 @@ edition = "2021" [dependencies] byteorder = { version = "1", default-features = false } # list of crates which must be buildable for bpf programs -solana-address-lookup-table-program = { path = "../../../../programs/address-lookup-table", version = "=1.14.13" } -solana-program = { path = "../../../../sdk/program", version = "=1.14.13" } +solana-address-lookup-table-program = { path = "../../../../programs/address-lookup-table", version = "=1.14.14" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.14" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/deprecated_loader/Cargo.toml b/programs/bpf/rust/deprecated_loader/Cargo.toml index 077f50339c8626..86d94b45ee16ad 100644 --- a/programs/bpf/rust/deprecated_loader/Cargo.toml +++ b/programs/bpf/rust/deprecated_loader/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-deprecated-loader" -version = "1.14.13" +version = "1.14.14" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-deprecated-loader" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.13" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.14" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/dup_accounts/Cargo.toml b/programs/bpf/rust/dup_accounts/Cargo.toml index c8c37a70fcf800..1fe14c109959be 100644 --- a/programs/bpf/rust/dup_accounts/Cargo.toml +++ b/programs/bpf/rust/dup_accounts/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-dup-accounts" -version = "1.14.13" +version = "1.14.14" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-dup-accounts" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.13" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.14" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/error_handling/Cargo.toml b/programs/bpf/rust/error_handling/Cargo.toml index 03e1ba71bb6b0a..e4c4b44697609a 100644 --- a/programs/bpf/rust/error_handling/Cargo.toml +++ b/programs/bpf/rust/error_handling/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-error-handling" -version = "1.14.13" +version = "1.14.14" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,7 +12,7 @@ edition = "2021" [dependencies] num-derive = "0.3" num-traits = "0.2" -solana-program = { path = "../../../../sdk/program", version = "=1.14.13" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.14" } thiserror = "1.0" [lib] diff --git a/programs/bpf/rust/external_spend/Cargo.toml b/programs/bpf/rust/external_spend/Cargo.toml index 86b9435eb33de9..ffd739ccf11258 100644 --- a/programs/bpf/rust/external_spend/Cargo.toml +++ b/programs/bpf/rust/external_spend/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-external-spend" -version = "1.14.13" +version = "1.14.14" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-external-spend" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.13" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.14" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/finalize/Cargo.toml b/programs/bpf/rust/finalize/Cargo.toml index 989867f1a3fb78..0ece9e1349cb38 100644 --- a/programs/bpf/rust/finalize/Cargo.toml +++ b/programs/bpf/rust/finalize/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-finalize" -version = "1.14.13" +version = "1.14.14" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-finalize" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.13" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.14" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/get_minimum_delegation/Cargo.toml b/programs/bpf/rust/get_minimum_delegation/Cargo.toml index f19b5e209fb493..1abef6275a3bbf 100644 --- a/programs/bpf/rust/get_minimum_delegation/Cargo.toml +++ b/programs/bpf/rust/get_minimum_delegation/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-get-minimum-delegation" -version = "1.14.13" +version = "1.14.14" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-get-minimum-delegation" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.13" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.14" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/inner_instruction_alignment_check/Cargo.toml b/programs/bpf/rust/inner_instruction_alignment_check/Cargo.toml index bba4f2dfae3970..f859e1d83a424f 100644 --- a/programs/bpf/rust/inner_instruction_alignment_check/Cargo.toml +++ b/programs/bpf/rust/inner_instruction_alignment_check/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-inner_instruction_alignment_check" -version = "1.14.13" +version = "1.14.14" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-inner_instruction_alignment_che edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.13" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.14" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/instruction_introspection/Cargo.toml b/programs/bpf/rust/instruction_introspection/Cargo.toml index 0a62290527d252..af88aca6ea5011 100644 --- a/programs/bpf/rust/instruction_introspection/Cargo.toml +++ b/programs/bpf/rust/instruction_introspection/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-instruction-introspection" -version = "1.14.13" +version = "1.14.14" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-instruction-introspection" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.13" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.14" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/invoke/Cargo.toml b/programs/bpf/rust/invoke/Cargo.toml index d6dccafef8f779..62df1c24b70e0b 100644 --- a/programs/bpf/rust/invoke/Cargo.toml +++ b/programs/bpf/rust/invoke/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-invoke" -version = "1.14.13" +version = "1.14.14" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -15,7 +15,7 @@ program = [] [dependencies] solana-bpf-rust-invoked = { path = "../invoked", default-features = false } -solana-program = { path = "../../../../sdk/program", version = "=1.14.13" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.14" } [lib] crate-type = ["lib", "cdylib"] diff --git a/programs/bpf/rust/invoke_and_error/Cargo.toml b/programs/bpf/rust/invoke_and_error/Cargo.toml index 121a6d60a8e590..c7ee95464c15cd 100644 --- a/programs/bpf/rust/invoke_and_error/Cargo.toml +++ b/programs/bpf/rust/invoke_and_error/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-invoke-and-error" -version = "1.14.13" +version = "1.14.14" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-invoke-and-error" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.13" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.14" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/invoke_and_ok/Cargo.toml b/programs/bpf/rust/invoke_and_ok/Cargo.toml index 04197c7690ccfb..46d32c7843678b 100644 --- a/programs/bpf/rust/invoke_and_ok/Cargo.toml +++ b/programs/bpf/rust/invoke_and_ok/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-invoke-and-ok" -version = "1.14.13" +version = "1.14.14" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-invoke-and-ok" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.13" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.14" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/invoke_and_return/Cargo.toml b/programs/bpf/rust/invoke_and_return/Cargo.toml index 4d3920ce7131f2..9f456f98b2107f 100644 --- a/programs/bpf/rust/invoke_and_return/Cargo.toml +++ b/programs/bpf/rust/invoke_and_return/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-invoke-and-return" -version = "1.14.13" +version = "1.14.14" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-invoke-and-return" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.13" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.14" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/invoked/Cargo.toml b/programs/bpf/rust/invoked/Cargo.toml index 7efdeba4b674ac..70b491638c71d5 100644 --- a/programs/bpf/rust/invoked/Cargo.toml +++ b/programs/bpf/rust/invoked/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-invoked" -version = "1.14.13" +version = "1.14.14" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,7 +14,7 @@ default = ["program"] program = [] [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.13" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.14" } [lib] crate-type = ["lib", "cdylib"] diff --git a/programs/bpf/rust/iter/Cargo.toml b/programs/bpf/rust/iter/Cargo.toml index ce3b5dbd2a83df..97ba72d89a8b1e 100644 --- a/programs/bpf/rust/iter/Cargo.toml +++ b/programs/bpf/rust/iter/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-iter" -version = "1.14.13" +version = "1.14.14" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-iter" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.13" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.14" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/log_data/Cargo.toml b/programs/bpf/rust/log_data/Cargo.toml index a7c61a506065db..46b2da2ccf5883 100644 --- a/programs/bpf/rust/log_data/Cargo.toml +++ b/programs/bpf/rust/log_data/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-log-data" -version = "1.14.13" +version = "1.14.14" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-log-data" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.13" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.14" } [features] default = ["program"] diff --git a/programs/bpf/rust/many_args/Cargo.toml b/programs/bpf/rust/many_args/Cargo.toml index 1dab5786029146..57c8f929ecedbc 100644 --- a/programs/bpf/rust/many_args/Cargo.toml +++ b/programs/bpf/rust/many_args/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-many-args" -version = "1.14.13" +version = "1.14.14" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ documentation = "https://docs.rs/solana-bpf-rust-many-args" edition = "2021" [dependencies] -solana-bpf-rust-many-args-dep = { path = "../many_args_dep", version = "=1.14.13" } -solana-program = { path = "../../../../sdk/program", version = "=1.14.13" } +solana-bpf-rust-many-args-dep = { path = "../many_args_dep", version = "=1.14.14" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.14" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/many_args_dep/Cargo.toml b/programs/bpf/rust/many_args_dep/Cargo.toml index 0aad89417f83f5..5e58f529aec564 100644 --- a/programs/bpf/rust/many_args_dep/Cargo.toml +++ b/programs/bpf/rust/many_args_dep/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-many-args-dep" -version = "1.14.13" +version = "1.14.14" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-many-args-dep" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.13" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.14" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/bpf/rust/mem/Cargo.toml b/programs/bpf/rust/mem/Cargo.toml index 89df4610ded386..667ccfeea65919 100644 --- a/programs/bpf/rust/mem/Cargo.toml +++ b/programs/bpf/rust/mem/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-mem" -version = "1.14.13" +version = "1.14.14" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,12 +13,12 @@ edition = "2021" no-entrypoint = [] [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.13" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.14" } [dev-dependencies] -solana-program-runtime = { path = "../../../../program-runtime", version = "=1.14.13" } -solana-program-test = { path = "../../../../program-test", version = "=1.14.13" } -solana-sdk = { path = "../../../../sdk", version = "=1.14.13" } +solana-program-runtime = { path = "../../../../program-runtime", version = "=1.14.14" } +solana-program-test = { path = "../../../../program-test", version = "=1.14.14" } +solana-sdk = { path = "../../../../sdk", version = "=1.14.14" } [lib] crate-type = ["cdylib", "lib"] diff --git a/programs/bpf/rust/membuiltins/Cargo.toml b/programs/bpf/rust/membuiltins/Cargo.toml index 88dce8f89e8b00..84378e081c783a 100644 --- a/programs/bpf/rust/membuiltins/Cargo.toml +++ b/programs/bpf/rust/membuiltins/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-membuiltins" -version = "1.14.13" +version = "1.14.14" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ documentation = "https://docs.rs/solana-bpf-rust-mem" edition = "2021" [dependencies] -solana-bpf-rust-mem = { path = "../mem", version = "=1.14.13", features = [ "no-entrypoint" ] } -solana-program = { path = "../../../../sdk/program", version = "=1.14.13" } +solana-bpf-rust-mem = { path = "../mem", version = "=1.14.14", features = [ "no-entrypoint" ] } +solana-program = { path = "../../../../sdk/program", version = "=1.14.14" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/noop/Cargo.toml b/programs/bpf/rust/noop/Cargo.toml index f57dc559b859c7..23646e2cd8db04 100644 --- a/programs/bpf/rust/noop/Cargo.toml +++ b/programs/bpf/rust/noop/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-noop" -version = "1.14.13" +version = "1.14.14" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-noop" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.13" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.14" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/panic/Cargo.toml b/programs/bpf/rust/panic/Cargo.toml index 865f39e2f07e7d..631606719d01a3 100644 --- a/programs/bpf/rust/panic/Cargo.toml +++ b/programs/bpf/rust/panic/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-panic" -version = "1.14.13" +version = "1.14.14" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-panic" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.13" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.14" } [features] default = ["custom-panic"] diff --git a/programs/bpf/rust/param_passing/Cargo.toml b/programs/bpf/rust/param_passing/Cargo.toml index 27ebf02e9110bc..89807dde69e3ff 100644 --- a/programs/bpf/rust/param_passing/Cargo.toml +++ b/programs/bpf/rust/param_passing/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-param-passing" -version = "1.14.13" +version = "1.14.14" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ documentation = "https://docs.rs/solana-bpf-rust-param-passing" edition = "2021" [dependencies] -solana-bpf-rust-param-passing-dep = { path = "../param_passing_dep", version = "=1.14.13" } -solana-program = { path = "../../../../sdk/program", version = "=1.14.13" } +solana-bpf-rust-param-passing-dep = { path = "../param_passing_dep", version = "=1.14.14" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.14" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/param_passing_dep/Cargo.toml b/programs/bpf/rust/param_passing_dep/Cargo.toml index 467111b3638862..602bccd09f86c5 100644 --- a/programs/bpf/rust/param_passing_dep/Cargo.toml +++ b/programs/bpf/rust/param_passing_dep/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-param-passing-dep" -version = "1.14.13" +version = "1.14.14" description = "Solana BPF program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-param-passing-dep" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.13" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.14" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/bpf/rust/rand/Cargo.toml b/programs/bpf/rust/rand/Cargo.toml index e41fb7a7bf70f4..c584a788ab1628 100644 --- a/programs/bpf/rust/rand/Cargo.toml +++ b/programs/bpf/rust/rand/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-rand" -version = "1.14.13" +version = "1.14.14" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,7 +12,7 @@ edition = "2021" [dependencies] getrandom = { version = "0.1.14", features = ["dummy"] } rand = "0.7" -solana-program = { path = "../../../../sdk/program", version = "=1.14.13" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.14" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/realloc/Cargo.toml b/programs/bpf/rust/realloc/Cargo.toml index 438876eb558f70..1856e6ef0c022e 100644 --- a/programs/bpf/rust/realloc/Cargo.toml +++ b/programs/bpf/rust/realloc/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-realloc" -version = "1.14.13" +version = "1.14.14" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,7 +14,7 @@ default = ["program"] program = [] [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.13" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.14" } [lib] crate-type = ["lib", "cdylib"] diff --git a/programs/bpf/rust/realloc_invoke/Cargo.toml b/programs/bpf/rust/realloc_invoke/Cargo.toml index 3ca0b565d2c6a3..cfea3f866f8c65 100644 --- a/programs/bpf/rust/realloc_invoke/Cargo.toml +++ b/programs/bpf/rust/realloc_invoke/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-realloc-invoke" -version = "1.14.13" +version = "1.14.14" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,8 +14,8 @@ default = ["program"] program = [] [dependencies] -solana-bpf-rust-realloc = { path = "../realloc", version = "=1.14.13", default-features = false } -solana-program = { path = "../../../../sdk/program", version = "=1.14.13" } +solana-bpf-rust-realloc = { path = "../realloc", version = "=1.14.14", default-features = false } +solana-program = { path = "../../../../sdk/program", version = "=1.14.14" } [lib] crate-type = ["lib", "cdylib"] diff --git a/programs/bpf/rust/ro_account_modify/Cargo.toml b/programs/bpf/rust/ro_account_modify/Cargo.toml index bc152dec6c6d90..0d2cb66ed37d14 100644 --- a/programs/bpf/rust/ro_account_modify/Cargo.toml +++ b/programs/bpf/rust/ro_account_modify/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-ro-account_modify" -version = "1.14.13" +version = "1.14.14" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-ro-modify" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.13" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.14" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/ro_modify/Cargo.toml b/programs/bpf/rust/ro_modify/Cargo.toml index 256dfbfc59e1a4..b1e019ed8a85fd 100644 --- a/programs/bpf/rust/ro_modify/Cargo.toml +++ b/programs/bpf/rust/ro_modify/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-ro-modify" -version = "1.14.13" +version = "1.14.14" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-ro-modify" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.13" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.14" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/sanity/Cargo.toml b/programs/bpf/rust/sanity/Cargo.toml index cbaeda89bc5f73..b4d14d12c5b2cb 100644 --- a/programs/bpf/rust/sanity/Cargo.toml +++ b/programs/bpf/rust/sanity/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-sanity" -version = "1.14.13" +version = "1.14.14" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,12 +13,12 @@ edition = "2021" test-bpf = [] [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.13" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.14" } [dev-dependencies] -solana-program-runtime = { path = "../../../../program-runtime", version = "=1.14.13" } -solana-program-test = { path = "../../../../program-test", version = "=1.14.13" } -solana-sdk = { path = "../../../../sdk", version = "=1.14.13" } +solana-program-runtime = { path = "../../../../program-runtime", version = "=1.14.14" } +solana-program-test = { path = "../../../../program-test", version = "=1.14.14" } +solana-sdk = { path = "../../../../sdk", version = "=1.14.14" } [lib] crate-type = ["cdylib", "lib"] diff --git a/programs/bpf/rust/secp256k1_recover/Cargo.toml b/programs/bpf/rust/secp256k1_recover/Cargo.toml index e30d2c95abc03a..e244c08be3098b 100644 --- a/programs/bpf/rust/secp256k1_recover/Cargo.toml +++ b/programs/bpf/rust/secp256k1_recover/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-secp256k1-recover" -version = "1.14.13" +version = "1.14.14" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -11,7 +11,7 @@ edition = "2021" [dependencies] libsecp256k1 = { version = "0.7.0", default-features = false } -solana-program = { path = "../../../../sdk/program", version = "=1.14.13" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.14" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/sha/Cargo.toml b/programs/bpf/rust/sha/Cargo.toml index b3be0b6d99927b..47a64da2b87dc8 100644 --- a/programs/bpf/rust/sha/Cargo.toml +++ b/programs/bpf/rust/sha/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-sha" -version = "1.14.13" +version = "1.14.14" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -11,7 +11,7 @@ edition = "2021" [dependencies] blake3 = "1.0.0" -solana-program = { path = "../../../../sdk/program", version = "=1.14.13" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.14" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/sibling_inner_instruction/Cargo.toml b/programs/bpf/rust/sibling_inner_instruction/Cargo.toml index 4a7e9805359778..ad2ac666e7ec7d 100644 --- a/programs/bpf/rust/sibling_inner_instruction/Cargo.toml +++ b/programs/bpf/rust/sibling_inner_instruction/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-sibling_inner-instructions" -version = "1.14.13" +version = "1.14.14" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-log-data" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.13" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.14" } [features] default = ["program"] diff --git a/programs/bpf/rust/sibling_instruction/Cargo.toml b/programs/bpf/rust/sibling_instruction/Cargo.toml index 01f5e39609a231..a4681e6fa61fc3 100644 --- a/programs/bpf/rust/sibling_instruction/Cargo.toml +++ b/programs/bpf/rust/sibling_instruction/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-sibling-instructions" -version = "1.14.13" +version = "1.14.14" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-log-data" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.13" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.14" } [features] default = ["program"] diff --git a/programs/bpf/rust/simulation/Cargo.toml b/programs/bpf/rust/simulation/Cargo.toml index 653ddf7303b55f..cd9a6020db41ea 100644 --- a/programs/bpf/rust/simulation/Cargo.toml +++ b/programs/bpf/rust/simulation/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-simulation" -version = "1.14.13" +version = "1.14.14" description = "Solana BPF Program Simulation Differences" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,13 +13,13 @@ edition = "2021" test-bpf = [] [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.13" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.14" } [dev-dependencies] -solana-logger = { path = "../../../../logger", version = "=1.14.13" } -solana-program-test = { path = "../../../../program-test", version = "=1.14.13" } -solana-sdk = { path = "../../../../sdk", version = "=1.14.13" } -solana-validator = { path = "../../../../validator", version = "=1.14.13" } +solana-logger = { path = "../../../../logger", version = "=1.14.14" } +solana-program-test = { path = "../../../../program-test", version = "=1.14.14" } +solana-sdk = { path = "../../../../sdk", version = "=1.14.14" } +solana-validator = { path = "../../../../validator", version = "=1.14.14" } [lib] crate-type = ["cdylib", "lib"] diff --git a/programs/bpf/rust/spoof1/Cargo.toml b/programs/bpf/rust/spoof1/Cargo.toml index c1473910f706c4..ecf323e9e56881 100644 --- a/programs/bpf/rust/spoof1/Cargo.toml +++ b/programs/bpf/rust/spoof1/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-spoof1" -version = "1.14.13" +version = "1.14.14" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-spoof1" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.13" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.14" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/spoof1_system/Cargo.toml b/programs/bpf/rust/spoof1_system/Cargo.toml index 08c9dcc3735a44..f0536374bb53e3 100644 --- a/programs/bpf/rust/spoof1_system/Cargo.toml +++ b/programs/bpf/rust/spoof1_system/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-spoof1-system" -version = "1.14.13" +version = "1.14.14" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-spoof1-system" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.13" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.14" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/sysvar/Cargo.toml b/programs/bpf/rust/sysvar/Cargo.toml index 077923f0b4cbde..6d58363c694fe3 100644 --- a/programs/bpf/rust/sysvar/Cargo.toml +++ b/programs/bpf/rust/sysvar/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-sysvar" -version = "1.14.13" +version = "1.14.14" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,12 +10,12 @@ documentation = "https://docs.rs/solana-bpf-rust-sysvar" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.13" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.14" } [dev-dependencies] -solana-program-runtime = { path = "../../../../program-runtime", version = "=1.14.13" } -solana-program-test = { path = "../../../../program-test", version = "=1.14.13" } -solana-sdk = { path = "../../../../sdk", version = "=1.14.13" } +solana-program-runtime = { path = "../../../../program-runtime", version = "=1.14.14" } +solana-program-test = { path = "../../../../program-test", version = "=1.14.14" } +solana-sdk = { path = "../../../../sdk", version = "=1.14.14" } [lib] crate-type = ["cdylib", "lib"] diff --git a/programs/bpf/rust/upgradeable/Cargo.toml b/programs/bpf/rust/upgradeable/Cargo.toml index f0700b8c1e2e75..e1682c8ff5c6a7 100644 --- a/programs/bpf/rust/upgradeable/Cargo.toml +++ b/programs/bpf/rust/upgradeable/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-upgradeable" -version = "1.14.13" +version = "1.14.14" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-upgradeable" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.13" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.14" } [lib] name = "solana_bpf_rust_upgradeable" diff --git a/programs/bpf/rust/upgraded/Cargo.toml b/programs/bpf/rust/upgraded/Cargo.toml index a18a3d5e496899..9df35b2c952db1 100644 --- a/programs/bpf/rust/upgraded/Cargo.toml +++ b/programs/bpf/rust/upgraded/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-upgraded" -version = "1.14.13" +version = "1.14.14" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-upgraded" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.13" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.14" } [lib] name = "solana_bpf_rust_upgraded" diff --git a/programs/bpf_loader/Cargo.toml b/programs/bpf_loader/Cargo.toml index 78a5c461092273..0aaa18c2077995 100644 --- a/programs/bpf_loader/Cargo.toml +++ b/programs/bpf_loader/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-loader-program" -version = "1.14.13" +version = "1.14.14" description = "Solana BPF loader" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,17 +14,17 @@ bincode = "1.3.3" byteorder = "1.4.3" libsecp256k1 = "0.6.0" log = "0.4.17" -solana-measure = { path = "../../measure", version = "=1.14.13" } -solana-metrics = { path = "../../metrics", version = "=1.14.13" } -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.13" } -solana-sdk = { path = "../../sdk", version = "=1.14.13" } -solana-zk-token-sdk = { path = "../../zk-token-sdk", version = "=1.14.13" } +solana-measure = { path = "../../measure", version = "=1.14.14" } +solana-metrics = { path = "../../metrics", version = "=1.14.14" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.14" } +solana-sdk = { path = "../../sdk", version = "=1.14.14" } +solana-zk-token-sdk = { path = "../../zk-token-sdk", version = "=1.14.14" } solana_rbpf = "=0.2.31" thiserror = "1.0" [dev-dependencies] rand = "0.7.3" -solana-runtime = { path = "../../runtime", version = "=1.14.13" } +solana-runtime = { path = "../../runtime", version = "=1.14.14" } [lib] crate-type = ["lib"] diff --git a/programs/bpf_loader/gen-syscall-list/Cargo.toml b/programs/bpf_loader/gen-syscall-list/Cargo.toml index a834c6ed66f87c..52f1c8c6e1685f 100644 --- a/programs/bpf_loader/gen-syscall-list/Cargo.toml +++ b/programs/bpf_loader/gen-syscall-list/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "gen-syscall-list" -version = "1.14.13" +version = "1.14.14" edition = "2021" license = "Apache-2.0" publish = false diff --git a/programs/compute-budget/Cargo.toml b/programs/compute-budget/Cargo.toml index dd3ee15902d58d..ebc9073f01ee58 100644 --- a/programs/compute-budget/Cargo.toml +++ b/programs/compute-budget/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "solana-compute-budget-program" description = "Solana Compute Budget program" -version = "1.14.13" +version = "1.14.14" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-compute-budget-program" repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ license = "Apache-2.0" edition = "2021" [dependencies] -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.13" } -solana-sdk = { path = "../../sdk", version = "=1.14.13" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.14" } +solana-sdk = { path = "../../sdk", version = "=1.14.14" } [lib] crate-type = ["lib"] diff --git a/programs/config/Cargo.toml b/programs/config/Cargo.toml index b7f38c60289102..e4c209e754a43c 100644 --- a/programs/config/Cargo.toml +++ b/programs/config/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-config-program" -version = "1.14.13" +version = "1.14.14" description = "Solana Config program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,11 +14,11 @@ bincode = "1.3.3" chrono = { version = "0.4.11", features = ["serde"] } serde = "1.0.138" serde_derive = "1.0.103" -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.13" } -solana-sdk = { path = "../../sdk", version = "=1.14.13" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.14" } +solana-sdk = { path = "../../sdk", version = "=1.14.14" } [dev-dependencies] -solana-logger = { path = "../../logger", version = "=1.14.13" } +solana-logger = { path = "../../logger", version = "=1.14.14" } [lib] crate-type = ["lib"] diff --git a/programs/ed25519-tests/Cargo.toml b/programs/ed25519-tests/Cargo.toml index ea3be15ba40bb7..7fb6aea1b38d86 100644 --- a/programs/ed25519-tests/Cargo.toml +++ b/programs/ed25519-tests/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-ed25519-program-tests" -version = "1.14.13" +version = "1.14.14" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" @@ -12,8 +12,8 @@ publish = false assert_matches = "1.5.0" ed25519-dalek = "=1.0.1" rand = "0.7.0" -solana-program-test = { path = "../../program-test", version = "=1.14.13" } -solana-sdk = { path = "../../sdk", version = "=1.14.13" } +solana-program-test = { path = "../../program-test", version = "=1.14.14" } +solana-sdk = { path = "../../sdk", version = "=1.14.14" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/stake/Cargo.toml b/programs/stake/Cargo.toml index e041d3afa126ba..ed3a5d85e658af 100644 --- a/programs/stake/Cargo.toml +++ b/programs/stake/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-stake-program" -version = "1.14.13" +version = "1.14.14" description = "Solana Stake program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -16,19 +16,19 @@ num-derive = "0.3" num-traits = "0.2" serde = "1.0.138" serde_derive = "1.0.103" -solana-config-program = { path = "../config", version = "=1.14.13" } -solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.13" } -solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.13" } -solana-metrics = { path = "../../metrics", version = "=1.14.13" } -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.13" } -solana-sdk = { path = "../../sdk", version = "=1.14.13" } -solana-vote-program = { path = "../vote", version = "=1.14.13" } +solana-config-program = { path = "../config", version = "=1.14.14" } +solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.14" } +solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.14" } +solana-metrics = { path = "../../metrics", version = "=1.14.14" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.14" } +solana-sdk = { path = "../../sdk", version = "=1.14.14" } +solana-vote-program = { path = "../vote", version = "=1.14.14" } thiserror = "1.0" [dev-dependencies] assert_matches = "1.5.0" proptest = "1.0" -solana-logger = { path = "../../logger", version = "=1.14.13" } +solana-logger = { path = "../../logger", version = "=1.14.14" } test-case = "2.1.0" [build-dependencies] diff --git a/programs/vote/Cargo.toml b/programs/vote/Cargo.toml index 68a30c2dc40885..bbdab7a6e8a48c 100644 --- a/programs/vote/Cargo.toml +++ b/programs/vote/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-vote-program" -version = "1.14.13" +version = "1.14.14" description = "Solana Vote program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -16,17 +16,17 @@ num-derive = "0.3" num-traits = "0.2" serde = "1.0.138" serde_derive = "1.0.103" -solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.13" } -solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.13" } -solana-metrics = { path = "../../metrics", version = "=1.14.13" } -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.13" } -solana-sdk = { path = "../../sdk", version = "=1.14.13" } +solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.14" } +solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.14" } +solana-metrics = { path = "../../metrics", version = "=1.14.14" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.14" } +solana-sdk = { path = "../../sdk", version = "=1.14.14" } thiserror = "1.0" [dev-dependencies] itertools = "0.10.3" rand = "0.7.0" -solana-logger = { path = "../../logger", version = "=1.14.13" } +solana-logger = { path = "../../logger", version = "=1.14.14" } test-case = "2.1.0" [build-dependencies] diff --git a/programs/zk-token-proof/Cargo.toml b/programs/zk-token-proof/Cargo.toml index a94014d7b655a9..93c8957e9405d6 100644 --- a/programs/zk-token-proof/Cargo.toml +++ b/programs/zk-token-proof/Cargo.toml @@ -3,7 +3,7 @@ name = "solana-zk-token-proof-program" description = "Solana Zk Token Proof Program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" -version = "1.14.13" +version = "1.14.14" license = "Apache-2.0" edition = "2021" @@ -12,6 +12,6 @@ bytemuck = { version = "1.11.0", features = ["derive"] } getrandom = { version = "0.1", features = ["dummy"] } num-derive = "0.3" num-traits = "0.2" -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.13" } -solana-sdk = { path = "../../sdk", version = "=1.14.13" } -solana-zk-token-sdk = { path = "../../zk-token-sdk", version = "=1.14.13" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.14" } +solana-sdk = { path = "../../sdk", version = "=1.14.14" } +solana-zk-token-sdk = { path = "../../zk-token-sdk", version = "=1.14.14" } diff --git a/rayon-threadlimit/Cargo.toml b/rayon-threadlimit/Cargo.toml index 608ed8e6040658..f9e15adf5e6594 100644 --- a/rayon-threadlimit/Cargo.toml +++ b/rayon-threadlimit/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-rayon-threadlimit" -version = "1.14.13" +version = "1.14.14" description = "solana-rayon-threadlimit" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-rayon-threadlimit" diff --git a/rbpf-cli/Cargo.toml b/rbpf-cli/Cargo.toml index 5ed7e2ea433c62..44e8f5c43d88f7 100644 --- a/rbpf-cli/Cargo.toml +++ b/rbpf-cli/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "rbpf-cli" -version = "1.14.13" +version = "1.14.14" description = "CLI to test and analyze eBPF programs" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/rbpf" @@ -13,8 +13,8 @@ publish = false clap = { version = "3.1.5", features = ["cargo"] } serde = "1.0.138" serde_json = "1.0.81" -solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.13" } -solana-logger = { path = "../logger", version = "=1.14.13" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.13" } -solana-sdk = { path = "../sdk", version = "=1.14.13" } +solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.14" } +solana-logger = { path = "../logger", version = "=1.14.14" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.14" } +solana-sdk = { path = "../sdk", version = "=1.14.14" } solana_rbpf = "=0.2.31" diff --git a/remote-wallet/Cargo.toml b/remote-wallet/Cargo.toml index ca44b45568bd8b..cec7a58e83ac0e 100644 --- a/remote-wallet/Cargo.toml +++ b/remote-wallet/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-remote-wallet" description = "Blockchain, Rebuilt for Scale" -version = "1.14.13" +version = "1.14.14" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -19,7 +19,7 @@ num-traits = { version = "0.2" } parking_lot = "0.12" qstring = "0.7.2" semver = "1.0" -solana-sdk = { path = "../sdk", version = "=1.14.13" } +solana-sdk = { path = "../sdk", version = "=1.14.14" } thiserror = "1.0" uriparse = "0.6.4" diff --git a/rpc-test/Cargo.toml b/rpc-test/Cargo.toml index 250917c6972880..6da060c5a572be 100644 --- a/rpc-test/Cargo.toml +++ b/rpc-test/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-rpc-test" -version = "1.14.13" +version = "1.14.14" description = "Solana RPC Test" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -19,17 +19,17 @@ log = "0.4.17" reqwest = { version = "0.11.11", default-features = false, features = ["blocking", "brotli", "deflate", "gzip", "rustls-tls", "json"] } serde = "1.0.138" serde_json = "1.0.81" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.13" } -solana-client = { path = "../client", version = "=1.14.13" } -solana-rpc = { path = "../rpc", version = "=1.14.13" } -solana-sdk = { path = "../sdk", version = "=1.14.13" } -solana-streamer = { path = "../streamer", version = "=1.14.13" } -solana-test-validator = { path = "../test-validator", version = "=1.14.13" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.13" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.14" } +solana-client = { path = "../client", version = "=1.14.14" } +solana-rpc = { path = "../rpc", version = "=1.14.14" } +solana-sdk = { path = "../sdk", version = "=1.14.14" } +solana-streamer = { path = "../streamer", version = "=1.14.14" } +solana-test-validator = { path = "../test-validator", version = "=1.14.14" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.14" } tokio = { version = "~1.14.1", features = ["full"] } [dev-dependencies] -solana-logger = { path = "../logger", version = "=1.14.13" } +solana-logger = { path = "../logger", version = "=1.14.14" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/rpc/Cargo.toml b/rpc/Cargo.toml index 4e2741a7de6a31..114ee4c45561fc 100644 --- a/rpc/Cargo.toml +++ b/rpc/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-rpc" -version = "1.14.13" +version = "1.14.14" description = "Solana RPC" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -29,26 +29,26 @@ serde = "1.0.138" serde_derive = "1.0.103" serde_json = "1.0.81" soketto = "0.7" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.13" } -solana-client = { path = "../client", version = "=1.14.13" } -solana-entry = { path = "../entry", version = "=1.14.13" } -solana-faucet = { path = "../faucet", version = "=1.14.13" } -solana-gossip = { path = "../gossip", version = "=1.14.13" } -solana-ledger = { path = "../ledger", version = "=1.14.13" } -solana-measure = { path = "../measure", version = "=1.14.13" } -solana-metrics = { path = "../metrics", version = "=1.14.13" } -solana-perf = { path = "../perf", version = "=1.14.13" } -solana-poh = { path = "../poh", version = "=1.14.13" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.13" } -solana-runtime = { path = "../runtime", version = "=1.14.13" } -solana-sdk = { path = "../sdk", version = "=1.14.13" } -solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.13" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.13" } -solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.13" } -solana-streamer = { path = "../streamer", version = "=1.14.13" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.13" } -solana-version = { path = "../version", version = "=1.14.13" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.13" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.14" } +solana-client = { path = "../client", version = "=1.14.14" } +solana-entry = { path = "../entry", version = "=1.14.14" } +solana-faucet = { path = "../faucet", version = "=1.14.14" } +solana-gossip = { path = "../gossip", version = "=1.14.14" } +solana-ledger = { path = "../ledger", version = "=1.14.14" } +solana-measure = { path = "../measure", version = "=1.14.14" } +solana-metrics = { path = "../metrics", version = "=1.14.14" } +solana-perf = { path = "../perf", version = "=1.14.14" } +solana-poh = { path = "../poh", version = "=1.14.14" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.14" } +solana-runtime = { path = "../runtime", version = "=1.14.14" } +solana-sdk = { path = "../sdk", version = "=1.14.14" } +solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.14" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.14" } +solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.14" } +solana-streamer = { path = "../streamer", version = "=1.14.14" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.14" } +solana-version = { path = "../version", version = "=1.14.14" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.14" } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } spl-token-2022 = { version = "=0.5.0", features = ["no-entrypoint"] } stream-cancel = "0.8.1" @@ -58,9 +58,9 @@ tokio-util = { version = "0.6", features = ["codec", "compat"] } [dev-dependencies] serial_test = "0.8.0" -solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.13" } -solana-net-utils = { path = "../net-utils", version = "=1.14.13" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.13" } +solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.14" } +solana-net-utils = { path = "../net-utils", version = "=1.14.14" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.14" } symlink = "0.1.0" [lib] diff --git a/runtime/Cargo.toml b/runtime/Cargo.toml index 1eecf5a4a08089..9c5ba2b6ead672 100644 --- a/runtime/Cargo.toml +++ b/runtime/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-runtime" -version = "1.14.13" +version = "1.14.14" description = "Solana runtime" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -40,21 +40,21 @@ rayon = "1.5.3" regex = "1.5.6" serde = { version = "1.0.138", features = ["rc"] } serde_derive = "1.0.103" -solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.13" } -solana-bucket-map = { path = "../bucket_map", version = "=1.14.13" } -solana-compute-budget-program = { path = "../programs/compute-budget", version = "=1.14.13" } -solana-config-program = { path = "../programs/config", version = "=1.14.13" } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.13" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.13" } -solana-measure = { path = "../measure", version = "=1.14.13" } -solana-metrics = { path = "../metrics", version = "=1.14.13" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.13" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.13" } -solana-sdk = { path = "../sdk", version = "=1.14.13" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.13" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.13" } -solana-zk-token-proof-program = { path = "../programs/zk-token-proof", version = "=1.14.13" } -solana-zk-token-sdk = { path = "../zk-token-sdk", version = "=1.14.13" } +solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.14" } +solana-bucket-map = { path = "../bucket_map", version = "=1.14.14" } +solana-compute-budget-program = { path = "../programs/compute-budget", version = "=1.14.14" } +solana-config-program = { path = "../programs/config", version = "=1.14.14" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.14" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.14" } +solana-measure = { path = "../measure", version = "=1.14.14" } +solana-metrics = { path = "../metrics", version = "=1.14.14" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.14" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.14" } +solana-sdk = { path = "../sdk", version = "=1.14.14" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.14" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.14" } +solana-zk-token-proof-program = { path = "../programs/zk-token-proof", version = "=1.14.14" } +solana-zk-token-sdk = { path = "../zk-token-sdk", version = "=1.14.14" } strum = { version = "0.24", features = ["derive"] } strum_macros = "0.24" symlink = "0.1.0" @@ -72,7 +72,7 @@ assert_matches = "1.5.0" ed25519-dalek = "=1.0.1" libsecp256k1 = "0.6.0" rand_chacha = "0.2.2" -solana-logger = { path = "../logger", version = "=1.14.13" } +solana-logger = { path = "../logger", version = "=1.14.14" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/runtime/store-tool/Cargo.toml b/runtime/store-tool/Cargo.toml index 90a7bbc9edd487..0b3e3d1e245958 100644 --- a/runtime/store-tool/Cargo.toml +++ b/runtime/store-tool/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-store-tool" description = "Tool to inspect append vecs" -version = "1.14.13" +version = "1.14.14" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -12,9 +12,9 @@ publish = false [dependencies] clap = "2.33.1" log = { version = "0.4.17" } -solana-logger = { path = "../../logger", version = "=1.14.13" } -solana-runtime = { path = "..", version = "=1.14.13" } -solana-version = { path = "../../version", version = "=1.14.13" } +solana-logger = { path = "../../logger", version = "=1.14.14" } +solana-runtime = { path = "..", version = "=1.14.14" } +solana-version = { path = "../../version", version = "=1.14.14" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/sdk/Cargo.toml b/sdk/Cargo.toml index 811b1aeab9ab7d..c505634d071f92 100644 --- a/sdk/Cargo.toml +++ b/sdk/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-sdk" -version = "1.14.13" +version = "1.14.14" description = "Solana SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -71,11 +71,11 @@ serde_derive = "1.0.103" serde_json = { version = "1.0.81", optional = true } sha2 = "0.10.2" sha3 = { version = "0.10.1", optional = true } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.13" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.13" } -solana-logger = { path = "../logger", version = "=1.14.13", optional = true } -solana-program = { path = "program", version = "=1.14.13" } -solana-sdk-macro = { path = "macro", version = "=1.14.13" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.14" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.14" } +solana-logger = { path = "../logger", version = "=1.14.14", optional = true } +solana-program = { path = "program", version = "=1.14.14" } +solana-sdk-macro = { path = "macro", version = "=1.14.14" } thiserror = "1.0" uriparse = "0.6.4" wasm-bindgen = "0.2" diff --git a/sdk/cargo-build-bpf/Cargo.toml b/sdk/cargo-build-bpf/Cargo.toml index bc892464c02ab2..58481a221321ab 100644 --- a/sdk/cargo-build-bpf/Cargo.toml +++ b/sdk/cargo-build-bpf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-cargo-build-bpf" -version = "1.14.13" +version = "1.14.14" description = "Compile a local package and all of its dependencies using the Solana SBF SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,7 +12,7 @@ publish = false [dependencies] cargo_metadata = "0.15.0" clap = { version = "3.1.5", features = ["cargo", "env"] } -solana-sdk = { path = "..", version = "=1.14.13" } +solana-sdk = { path = "..", version = "=1.14.14" } [features] program = [] diff --git a/sdk/cargo-build-sbf/Cargo.toml b/sdk/cargo-build-sbf/Cargo.toml index 7dd60417c6f08e..b447e141bc7928 100644 --- a/sdk/cargo-build-sbf/Cargo.toml +++ b/sdk/cargo-build-sbf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-cargo-build-sbf" -version = "1.14.13" +version = "1.14.14" description = "Compile a local package and all of its dependencies using the Solana SBF SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -15,9 +15,9 @@ cargo_metadata = "0.15.0" clap = { version = "3.1.5", features = ["cargo", "env"] } log = { version = "0.4.14", features = ["std"] } regex = "1.5.6" -solana-download-utils = { path = "../../download-utils", version = "=1.14.13" } -solana-logger = { path = "../../logger", version = "=1.14.13" } -solana-sdk = { path = "..", version = "=1.14.13" } +solana-download-utils = { path = "../../download-utils", version = "=1.14.14" } +solana-logger = { path = "../../logger", version = "=1.14.14" } +solana-sdk = { path = "..", version = "=1.14.14" } tar = "0.4.38" [dev-dependencies] diff --git a/sdk/cargo-build-sbf/tests/crates/fail/Cargo.toml b/sdk/cargo-build-sbf/tests/crates/fail/Cargo.toml index d0261bf887c3de..6889d6ecd5e3d0 100644 --- a/sdk/cargo-build-sbf/tests/crates/fail/Cargo.toml +++ b/sdk/cargo-build-sbf/tests/crates/fail/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "fail" -version = "1.14.13" +version = "1.14.14" description = "Solana SBF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ edition = "2021" publish = false [dependencies] -solana-program = { path = "../../../../program", version = "=1.14.13" } +solana-program = { path = "../../../../program", version = "=1.14.14" } [lib] crate-type = ["cdylib"] diff --git a/sdk/cargo-build-sbf/tests/crates/noop/Cargo.toml b/sdk/cargo-build-sbf/tests/crates/noop/Cargo.toml index 6d21657d36f332..1ada76eb6ad9aa 100644 --- a/sdk/cargo-build-sbf/tests/crates/noop/Cargo.toml +++ b/sdk/cargo-build-sbf/tests/crates/noop/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "noop" -version = "1.14.13" +version = "1.14.14" description = "Solana SBF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ edition = "2021" publish = false [dependencies] -solana-program = { path = "../../../../program", version = "=1.14.13" } +solana-program = { path = "../../../../program", version = "=1.14.14" } [lib] crate-type = ["cdylib"] diff --git a/sdk/cargo-test-bpf/Cargo.toml b/sdk/cargo-test-bpf/Cargo.toml index 6a40728362cc40..85ee1cbe2672ff 100644 --- a/sdk/cargo-test-bpf/Cargo.toml +++ b/sdk/cargo-test-bpf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-cargo-test-bpf" -version = "1.14.13" +version = "1.14.14" description = "Execute all unit and integration tests after building with the Solana SBF SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/sdk/cargo-test-sbf/Cargo.toml b/sdk/cargo-test-sbf/Cargo.toml index d1cbc62f9d7613..1f97901585259c 100644 --- a/sdk/cargo-test-sbf/Cargo.toml +++ b/sdk/cargo-test-sbf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-cargo-test-sbf" -version = "1.14.13" +version = "1.14.14" description = "Execute all unit and integration tests after building with the Solana SBF SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/sdk/gen-headers/Cargo.toml b/sdk/gen-headers/Cargo.toml index cadbd5ef626c6f..75bd5d675abd4c 100644 --- a/sdk/gen-headers/Cargo.toml +++ b/sdk/gen-headers/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "gen-headers" -version = "1.14.13" +version = "1.14.14" edition = "2021" license = "Apache-2.0" publish = false diff --git a/sdk/macro/Cargo.toml b/sdk/macro/Cargo.toml index 826e451846946f..e3d3ad8267d5a3 100644 --- a/sdk/macro/Cargo.toml +++ b/sdk/macro/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-sdk-macro" -version = "1.14.13" +version = "1.14.14" description = "Solana SDK Macro" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/sdk/program/Cargo.toml b/sdk/program/Cargo.toml index 4343e9281ff479..e2c6b0d7c8ff48 100644 --- a/sdk/program/Cargo.toml +++ b/sdk/program/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-program" -version = "1.14.13" +version = "1.14.14" description = "Solana Program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -31,9 +31,9 @@ serde_derive = "1.0" serde_json = "1.0" sha2 = "0.10.0" sha3 = "0.10.0" -solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.13" } -solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.13" } -solana-sdk-macro = { path = "../macro", version = "=1.14.13" } +solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.14" } +solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.14" } +solana-sdk-macro = { path = "../macro", version = "=1.14.14" } thiserror = "1.0" [target.'cfg(not(target_os = "solana"))'.dependencies] @@ -50,7 +50,7 @@ wasm-bindgen = "0.2" zeroize = { version = "1.3", default-features = true, features = ["zeroize_derive"] } [target.'cfg(not(target_os = "solana"))'.dev-dependencies] -solana-logger = { path = "../../logger", version = "=1.14.13" } +solana-logger = { path = "../../logger", version = "=1.14.14" } [target.'cfg(target_arch = "wasm32")'.dependencies] console_error_panic_hook = "0.1.7" diff --git a/send-transaction-service/Cargo.toml b/send-transaction-service/Cargo.toml index 662dadad845175..b18d3df565617e 100644 --- a/send-transaction-service/Cargo.toml +++ b/send-transaction-service/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-send-transaction-service" -version = "1.14.13" +version = "1.14.14" description = "Solana send transaction service" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,14 +12,14 @@ edition = "2021" [dependencies] crossbeam-channel = "0.5" log = "0.4.17" -solana-client = { path = "../client", version = "=1.14.13" } -solana-measure = { path = "../measure", version = "=1.14.13" } -solana-metrics = { path = "../metrics", version = "=1.14.13" } -solana-runtime = { path = "../runtime", version = "=1.14.13" } -solana-sdk = { path = "../sdk", version = "=1.14.13" } +solana-client = { path = "../client", version = "=1.14.14" } +solana-measure = { path = "../measure", version = "=1.14.14" } +solana-metrics = { path = "../metrics", version = "=1.14.14" } +solana-runtime = { path = "../runtime", version = "=1.14.14" } +solana-sdk = { path = "../sdk", version = "=1.14.14" } [dev-dependencies] -solana-logger = { path = "../logger", version = "=1.14.13" } +solana-logger = { path = "../logger", version = "=1.14.14" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/stake-accounts/Cargo.toml b/stake-accounts/Cargo.toml index e25935c1449ad1..7305fd873c0584 100644 --- a/stake-accounts/Cargo.toml +++ b/stake-accounts/Cargo.toml @@ -3,7 +3,7 @@ name = "solana-stake-accounts" description = "Blockchain, Rebuilt for Scale" authors = ["Solana Maintainers "] edition = "2021" -version = "1.14.13" +version = "1.14.14" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -11,15 +11,15 @@ documentation = "https://docs.rs/solana-stake-accounts" [dependencies] clap = "2.33.1" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.13" } -solana-cli-config = { path = "../cli-config", version = "=1.14.13" } -solana-client = { path = "../client", version = "=1.14.13" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.13" } -solana-sdk = { path = "../sdk", version = "=1.14.13" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.13" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.14" } +solana-cli-config = { path = "../cli-config", version = "=1.14.14" } +solana-client = { path = "../client", version = "=1.14.14" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.14" } +solana-sdk = { path = "../sdk", version = "=1.14.14" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.14" } [dev-dependencies] -solana-runtime = { path = "../runtime", version = "=1.14.13" } +solana-runtime = { path = "../runtime", version = "=1.14.14" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/storage-bigtable/Cargo.toml b/storage-bigtable/Cargo.toml index 14608514e898c6..630184dbc75afc 100644 --- a/storage-bigtable/Cargo.toml +++ b/storage-bigtable/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-storage-bigtable" -version = "1.14.13" +version = "1.14.14" description = "Solana Storage BigTable" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -27,10 +27,10 @@ prost-types = "0.11.0" serde = "1.0.138" serde_derive = "1.0.103" smpl_jwt = "0.7.1" -solana-metrics = { path = "../metrics", version = "=1.14.13" } -solana-sdk = { path = "../sdk", version = "=1.14.13" } -solana-storage-proto = { path = "../storage-proto", version = "=1.14.13" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.13" } +solana-metrics = { path = "../metrics", version = "=1.14.14" } +solana-sdk = { path = "../sdk", version = "=1.14.14" } +solana-storage-proto = { path = "../storage-proto", version = "=1.14.14" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.14" } thiserror = "1.0" tokio = "1" tonic = { version = "0.8.0", features = ["tls", "transport"] } diff --git a/storage-bigtable/build-proto/Cargo.lock b/storage-bigtable/build-proto/Cargo.lock index 8d67036593631d..90dd6ea600ce57 100644 --- a/storage-bigtable/build-proto/Cargo.lock +++ b/storage-bigtable/build-proto/Cargo.lock @@ -219,7 +219,7 @@ dependencies = [ [[package]] name = "proto" -version = "1.14.13" +version = "1.14.14" dependencies = [ "protobuf-src", "tonic-build", diff --git a/storage-bigtable/build-proto/Cargo.toml b/storage-bigtable/build-proto/Cargo.toml index acdd964dbcf7d9..8e4d4dfb7b107b 100644 --- a/storage-bigtable/build-proto/Cargo.toml +++ b/storage-bigtable/build-proto/Cargo.toml @@ -7,7 +7,7 @@ license = "Apache-2.0" name = "proto" publish = false repository = "https://github.com/solana-labs/solana" -version = "1.14.13" +version = "1.14.14" [workspace] diff --git a/storage-proto/Cargo.toml b/storage-proto/Cargo.toml index e589501a45cadf..4eec7121cee02e 100644 --- a/storage-proto/Cargo.toml +++ b/storage-proto/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-storage-proto" -version = "1.14.13" +version = "1.14.14" description = "Solana Storage Protobuf Definitions" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,9 +14,9 @@ bincode = "1.3.3" bs58 = "0.4.0" prost = "0.11.0" serde = "1.0.138" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.13" } -solana-sdk = { path = "../sdk", version = "=1.14.13" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.13" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.14" } +solana-sdk = { path = "../sdk", version = "=1.14.14" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.14" } [dev-dependencies] enum-iterator = "0.8.1" diff --git a/streamer/Cargo.toml b/streamer/Cargo.toml index 158db723705676..d04e6396eaa6ff 100644 --- a/streamer/Cargo.toml +++ b/streamer/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-streamer" -version = "1.14.13" +version = "1.14.14" description = "Solana Streamer" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -25,15 +25,15 @@ quinn = "0.8.3" rand = "0.7.0" rcgen = "0.9.2" rustls = { version = "0.20.6", features = ["dangerous_configuration"] } -solana-metrics = { path = "../metrics", version = "=1.14.13" } -solana-perf = { path = "../perf", version = "=1.14.13" } -solana-sdk = { path = "../sdk", version = "=1.14.13" } +solana-metrics = { path = "../metrics", version = "=1.14.14" } +solana-perf = { path = "../perf", version = "=1.14.14" } +solana-sdk = { path = "../sdk", version = "=1.14.14" } thiserror = "1.0" tokio = { version = "1", features = ["full"] } x509-parser = "0.14.0" [dev-dependencies] -solana-logger = { path = "../logger", version = "=1.14.13" } +solana-logger = { path = "../logger", version = "=1.14.14" } [lib] crate-type = ["lib"] diff --git a/sys-tuner/Cargo.toml b/sys-tuner/Cargo.toml index 080f7aa5da8882..29a9452f074933 100644 --- a/sys-tuner/Cargo.toml +++ b/sys-tuner/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-sys-tuner" description = "The solana cluster system tuner daemon" -version = "1.14.13" +version = "1.14.14" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,8 +14,8 @@ publish = true clap = "2.33.1" libc = "0.2.126" log = "0.4.17" -solana-logger = { path = "../logger", version = "=1.14.13" } -solana-version = { path = "../version", version = "=1.14.13" } +solana-logger = { path = "../logger", version = "=1.14.14" } +solana-version = { path = "../version", version = "=1.14.14" } [target."cfg(unix)".dependencies] unix_socket2 = "0.5.4" diff --git a/test-validator/Cargo.toml b/test-validator/Cargo.toml index 66ba9031d0542c..d4982fa0648d48 100644 --- a/test-validator/Cargo.toml +++ b/test-validator/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "solana-test-validator" description = "Blockchain, Rebuilt for Scale" -version = "1.14.13" +version = "1.14.14" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-test-validator" readme = "../README.md" @@ -15,19 +15,19 @@ base64 = "0.13.0" log = "0.4.17" serde_derive = "1.0.103" serde_json = "1.0.81" -solana-cli-output = { path = "../cli-output", version = "=1.14.13" } -solana-client = { path = "../client", version = "=1.14.13" } -solana-core = { path = "../core", version = "=1.14.13" } -solana-gossip = { path = "../gossip", version = "=1.14.13" } -solana-ledger = { path = "../ledger", version = "=1.14.13" } -solana-logger = { path = "../logger", version = "=1.14.13" } -solana-net-utils = { path = "../net-utils", version = "=1.14.13" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.13" } -solana-program-test = { path = "../program-test", version = "=1.14.13" } -solana-rpc = { path = "../rpc", version = "=1.14.13" } -solana-runtime = { path = "../runtime", version = "=1.14.13" } -solana-sdk = { path = "../sdk", version = "=1.14.13" } -solana-streamer = { path = "../streamer", version = "=1.14.13" } +solana-cli-output = { path = "../cli-output", version = "=1.14.14" } +solana-client = { path = "../client", version = "=1.14.14" } +solana-core = { path = "../core", version = "=1.14.14" } +solana-gossip = { path = "../gossip", version = "=1.14.14" } +solana-ledger = { path = "../ledger", version = "=1.14.14" } +solana-logger = { path = "../logger", version = "=1.14.14" } +solana-net-utils = { path = "../net-utils", version = "=1.14.14" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.14" } +solana-program-test = { path = "../program-test", version = "=1.14.14" } +solana-rpc = { path = "../rpc", version = "=1.14.14" } +solana-runtime = { path = "../runtime", version = "=1.14.14" } +solana-sdk = { path = "../sdk", version = "=1.14.14" } +solana-streamer = { path = "../streamer", version = "=1.14.14" } tokio = { version = "1", features = ["full"] } [package.metadata.docs.rs] diff --git a/tokens/Cargo.toml b/tokens/Cargo.toml index afae4999967b5a..c7e3bd6d385ddd 100644 --- a/tokens/Cargo.toml +++ b/tokens/Cargo.toml @@ -3,7 +3,7 @@ name = "solana-tokens" description = "Blockchain, Rebuilt for Scale" authors = ["Solana Maintainers "] edition = "2021" -version = "1.14.13" +version = "1.14.14" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -19,14 +19,14 @@ indexmap = "1.9.1" indicatif = "0.16.2" pickledb = "0.4.1" serde = { version = "1.0", features = ["derive"] } -solana-account-decoder = { path = "../account-decoder", version = "=1.14.13" } -solana-clap-utils = { path = "../clap-utils", version = "=1.14.13" } -solana-cli-config = { path = "../cli-config", version = "=1.14.13" } -solana-client = { path = "../client", version = "=1.14.13" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.13" } -solana-sdk = { path = "../sdk", version = "=1.14.13" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.13" } -solana-version = { path = "../version", version = "=1.14.13" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.14" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.14" } +solana-cli-config = { path = "../cli-config", version = "=1.14.14" } +solana-client = { path = "../client", version = "=1.14.14" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.14" } +solana-sdk = { path = "../sdk", version = "=1.14.14" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.14" } +solana-version = { path = "../version", version = "=1.14.14" } spl-associated-token-account = { version = "=1.1.2" } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } tempfile = "3.3.0" @@ -34,6 +34,6 @@ thiserror = "1.0" [dev-dependencies] bincode = "1.3.3" -solana-logger = { path = "../logger", version = "=1.14.13" } -solana-streamer = { path = "../streamer", version = "=1.14.13" } -solana-test-validator = { path = "../test-validator", version = "=1.14.13" } +solana-logger = { path = "../logger", version = "=1.14.14" } +solana-streamer = { path = "../streamer", version = "=1.14.14" } +solana-test-validator = { path = "../test-validator", version = "=1.14.14" } diff --git a/transaction-dos/Cargo.toml b/transaction-dos/Cargo.toml index 25c89ec4725830..e72f6516a301c9 100644 --- a/transaction-dos/Cargo.toml +++ b/transaction-dos/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-transaction-dos" -version = "1.14.13" +version = "1.14.14" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,23 +14,23 @@ clap = "2.33.1" log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.13" } -solana-cli = { path = "../cli", version = "=1.14.13" } -solana-client = { path = "../client", version = "=1.14.13" } -solana-core = { path = "../core", version = "=1.14.13" } -solana-faucet = { path = "../faucet", version = "=1.14.13" } -solana-gossip = { path = "../gossip", version = "=1.14.13" } -solana-logger = { path = "../logger", version = "=1.14.13" } -solana-measure = { path = "../measure", version = "=1.14.13" } -solana-net-utils = { path = "../net-utils", version = "=1.14.13" } -solana-runtime = { path = "../runtime", version = "=1.14.13" } -solana-sdk = { path = "../sdk", version = "=1.14.13" } -solana-streamer = { path = "../streamer", version = "=1.14.13" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.13" } -solana-version = { path = "../version", version = "=1.14.13" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.14" } +solana-cli = { path = "../cli", version = "=1.14.14" } +solana-client = { path = "../client", version = "=1.14.14" } +solana-core = { path = "../core", version = "=1.14.14" } +solana-faucet = { path = "../faucet", version = "=1.14.14" } +solana-gossip = { path = "../gossip", version = "=1.14.14" } +solana-logger = { path = "../logger", version = "=1.14.14" } +solana-measure = { path = "../measure", version = "=1.14.14" } +solana-net-utils = { path = "../net-utils", version = "=1.14.14" } +solana-runtime = { path = "../runtime", version = "=1.14.14" } +solana-sdk = { path = "../sdk", version = "=1.14.14" } +solana-streamer = { path = "../streamer", version = "=1.14.14" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.14" } +solana-version = { path = "../version", version = "=1.14.14" } [dev-dependencies] -solana-local-cluster = { path = "../local-cluster", version = "=1.14.13" } +solana-local-cluster = { path = "../local-cluster", version = "=1.14.14" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/transaction-status/Cargo.toml b/transaction-status/Cargo.toml index 63e45872390d48..6f0d59ae931520 100644 --- a/transaction-status/Cargo.toml +++ b/transaction-status/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-transaction-status" -version = "1.14.13" +version = "1.14.14" description = "Solana transaction status types" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -20,12 +20,12 @@ log = "0.4.17" serde = "1.0.138" serde_derive = "1.0.103" serde_json = "1.0.81" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.13" } -solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.13" } -solana-measure = { path = "../measure", version = "=1.14.13" } -solana-metrics = { path = "../metrics", version = "=1.14.13" } -solana-sdk = { path = "../sdk", version = "=1.14.13" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.13" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.14" } +solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.14" } +solana-measure = { path = "../measure", version = "=1.14.14" } +solana-metrics = { path = "../metrics", version = "=1.14.14" } +solana-sdk = { path = "../sdk", version = "=1.14.14" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.14" } spl-associated-token-account = { version = "=1.1.2", features = ["no-entrypoint"] } spl-memo = { version = "=3.0.1", features = ["no-entrypoint"] } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } diff --git a/upload-perf/Cargo.toml b/upload-perf/Cargo.toml index 92bc64dcbdd1c1..b2215a68d0cece 100644 --- a/upload-perf/Cargo.toml +++ b/upload-perf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-upload-perf" -version = "1.14.13" +version = "1.14.14" description = "Metrics Upload Utility" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -11,7 +11,7 @@ publish = false [dependencies] serde_json = "1.0.81" -solana-metrics = { path = "../metrics", version = "=1.14.13" } +solana-metrics = { path = "../metrics", version = "=1.14.14" } [[bin]] name = "solana-upload-perf" diff --git a/validator/Cargo.toml b/validator/Cargo.toml index 98ef02eee4ce71..0ff99cd36f927f 100644 --- a/validator/Cargo.toml +++ b/validator/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-validator" description = "Blockchain, Rebuilt for Scale" -version = "1.14.13" +version = "1.14.14" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -28,30 +28,30 @@ num_cpus = "1.13.1" rand = "0.7.0" serde = "1.0.138" serde_json = "1.0.81" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.13" } -solana-cli-config = { path = "../cli-config", version = "=1.14.13" } -solana-client = { path = "../client", version = "=1.14.13" } -solana-core = { path = "../core", version = "=1.14.13" } -solana-download-utils = { path = "../download-utils", version = "=1.14.13" } -solana-entry = { path = "../entry", version = "=1.14.13" } -solana-faucet = { path = "../faucet", version = "=1.14.13" } -solana-genesis-utils = { path = "../genesis-utils", version = "=1.14.13" } -solana-gossip = { path = "../gossip", version = "=1.14.13" } -solana-ledger = { path = "../ledger", version = "=1.14.13" } -solana-logger = { path = "../logger", version = "=1.14.13" } -solana-metrics = { path = "../metrics", version = "=1.14.13" } -solana-net-utils = { path = "../net-utils", version = "=1.14.13" } -solana-perf = { path = "../perf", version = "=1.14.13" } -solana-poh = { path = "../poh", version = "=1.14.13" } -solana-rpc = { path = "../rpc", version = "=1.14.13" } -solana-runtime = { path = "../runtime", version = "=1.14.13" } -solana-sdk = { path = "../sdk", version = "=1.14.13" } -solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.13" } -solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.13" } -solana-streamer = { path = "../streamer", version = "=1.14.13" } -solana-test-validator = { path = "../test-validator", version = "=1.14.13" } -solana-version = { path = "../version", version = "=1.14.13" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.13" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.14" } +solana-cli-config = { path = "../cli-config", version = "=1.14.14" } +solana-client = { path = "../client", version = "=1.14.14" } +solana-core = { path = "../core", version = "=1.14.14" } +solana-download-utils = { path = "../download-utils", version = "=1.14.14" } +solana-entry = { path = "../entry", version = "=1.14.14" } +solana-faucet = { path = "../faucet", version = "=1.14.14" } +solana-genesis-utils = { path = "../genesis-utils", version = "=1.14.14" } +solana-gossip = { path = "../gossip", version = "=1.14.14" } +solana-ledger = { path = "../ledger", version = "=1.14.14" } +solana-logger = { path = "../logger", version = "=1.14.14" } +solana-metrics = { path = "../metrics", version = "=1.14.14" } +solana-net-utils = { path = "../net-utils", version = "=1.14.14" } +solana-perf = { path = "../perf", version = "=1.14.14" } +solana-poh = { path = "../poh", version = "=1.14.14" } +solana-rpc = { path = "../rpc", version = "=1.14.14" } +solana-runtime = { path = "../runtime", version = "=1.14.14" } +solana-sdk = { path = "../sdk", version = "=1.14.14" } +solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.14" } +solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.14" } +solana-streamer = { path = "../streamer", version = "=1.14.14" } +solana-test-validator = { path = "../test-validator", version = "=1.14.14" } +solana-version = { path = "../version", version = "=1.14.14" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.14" } symlink = "0.1.0" [target.'cfg(not(target_env = "msvc"))'.dependencies] diff --git a/version/Cargo.toml b/version/Cargo.toml index 7ae7cf5599f478..70d5d0339454ac 100644 --- a/version/Cargo.toml +++ b/version/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-version" -version = "1.14.13" +version = "1.14.14" description = "Solana Version" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,9 +14,9 @@ log = "0.4.17" semver = "1.0.10" serde = "1.0.138" serde_derive = "1.0.103" -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.13" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.13" } -solana-sdk = { path = "../sdk", version = "=1.14.13" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.14" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.14" } +solana-sdk = { path = "../sdk", version = "=1.14.14" } [lib] name = "solana_version" diff --git a/watchtower/Cargo.toml b/watchtower/Cargo.toml index a91a201f017ff3..473ce49d0ad10d 100644 --- a/watchtower/Cargo.toml +++ b/watchtower/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-watchtower" description = "Blockchain, Rebuilt for Scale" -version = "1.14.13" +version = "1.14.14" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -13,15 +13,15 @@ documentation = "https://docs.rs/solana-watchtower" clap = "2.33.1" humantime = "2.0.1" log = "0.4.17" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.13" } -solana-cli-config = { path = "../cli-config", version = "=1.14.13" } -solana-cli-output = { path = "../cli-output", version = "=1.14.13" } -solana-client = { path = "../client", version = "=1.14.13" } -solana-logger = { path = "../logger", version = "=1.14.13" } -solana-metrics = { path = "../metrics", version = "=1.14.13" } -solana-notifier = { path = "../notifier", version = "=1.14.13" } -solana-sdk = { path = "../sdk", version = "=1.14.13" } -solana-version = { path = "../version", version = "=1.14.13" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.14" } +solana-cli-config = { path = "../cli-config", version = "=1.14.14" } +solana-cli-output = { path = "../cli-output", version = "=1.14.14" } +solana-client = { path = "../client", version = "=1.14.14" } +solana-logger = { path = "../logger", version = "=1.14.14" } +solana-metrics = { path = "../metrics", version = "=1.14.14" } +solana-notifier = { path = "../notifier", version = "=1.14.14" } +solana-sdk = { path = "../sdk", version = "=1.14.14" } +solana-version = { path = "../version", version = "=1.14.14" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/zk-token-sdk/Cargo.toml b/zk-token-sdk/Cargo.toml index a608341a38aac3..ab6ec219d11aad 100644 --- a/zk-token-sdk/Cargo.toml +++ b/zk-token-sdk/Cargo.toml @@ -3,7 +3,7 @@ name = "solana-zk-token-sdk" description = "Solana Zk Token SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" -version = "1.14.13" +version = "1.14.14" license = "Apache-2.0" edition = "2021" @@ -12,7 +12,7 @@ base64 = "0.13" bytemuck = { version = "1.11.0", features = ["derive"] } num-derive = "0.3" num-traits = "0.2" -solana-program = { path = "../sdk/program", version = "=1.14.13" } +solana-program = { path = "../sdk/program", version = "=1.14.14" } [target.'cfg(not(target_os = "solana"))'.dependencies] aes-gcm-siv = "0.10.3" @@ -29,7 +29,7 @@ rand = "0.7" serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" sha3 = "0.9" -solana-sdk = { path = "../sdk", version = "=1.14.13" } +solana-sdk = { path = "../sdk", version = "=1.14.14" } subtle = "2" thiserror = "1.0" zeroize = { version = "1.3", default-features = false, features = ["zeroize_derive"] } From f728a5a40d2df7758615f082541d9a1d6322f9ed Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Fri, 20 Jan 2023 11:08:12 -0700 Subject: [PATCH 298/465] validator: remove `--no-duplicate-instance-check` (backport #29785) (#29791) validator: remove `--no-duplicate-instance-check` Co-authored-by: Trent Nelson --- validator/src/main.rs | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/validator/src/main.rs b/validator/src/main.rs index a17df8a680981f..bcf3de9b5c7612 100644 --- a/validator/src/main.rs +++ b/validator/src/main.rs @@ -1799,13 +1799,6 @@ pub fn main() { it becomes a candidate for shrinking. The value must between 0. and 1.0 \ inclusive."), ) - .arg( - Arg::with_name("no_duplicate_instance_check") - .long("no-duplicate-instance-check") - .takes_value(false) - .help("Disables duplicate instance check") - .hidden(true), - ) .arg( Arg::with_name("allow_private_addr") .long("allow-private-addr") @@ -3088,7 +3081,7 @@ pub fn main() { let identity_keypair = Arc::new(identity_keypair); - let should_check_duplicate_instance = !matches.is_present("no_duplicate_instance_check"); + let should_check_duplicate_instance = true; if !cluster_entrypoints.is_empty() { bootstrap::rpc_bootstrap( &node, From 73c018488c00534d8eec60e4f26e03333f31c6fb Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Fri, 20 Jan 2023 19:37:18 +0000 Subject: [PATCH 299/465] errors out when retransmit loopbacks to the slot leader (backport #29789) (#29800) errors out when retransmit loopbacks to the slot leader (#29789) When broadcasting shreds, turbine excludes the slot leader from the random shuffle. Doing so, shreds should never loopback to the leader. If shreds reaching retransmit stage are from the node's own leader slots they should not be retransmited to any nodes. (cherry picked from commit 64c13b74d8616380a101bfc99ac3695b9fc9fac8) Co-authored-by: behzad nouri --- core/src/cluster_nodes.rs | 37 ++++++++++++++++++++----------- core/src/retransmit_stage.rs | 42 +++++++++++++++++++++++++++--------- 2 files changed, 56 insertions(+), 23 deletions(-) diff --git a/core/src/cluster_nodes.rs b/core/src/cluster_nodes.rs index 0cb61a3a272216..d500b9452e1dba 100644 --- a/core/src/cluster_nodes.rs +++ b/core/src/cluster_nodes.rs @@ -33,10 +33,17 @@ use { sync::{Arc, Mutex}, time::{Duration, Instant}, }, + thiserror::Error, }; pub(crate) const MAX_NUM_TURBINE_HOPS: usize = 4; +#[derive(Debug, Error)] +pub enum Error { + #[error("Loopback from slot leader: {leader}, shred: {shred:?}")] + Loopback { leader: Pubkey, shred: ShredId }, +} + #[allow(clippy::large_enum_variant)] enum NodeId { // TVU node obtained through gossip (staked or not). @@ -150,14 +157,14 @@ impl ClusterNodes { shred: &ShredId, root_bank: &Bank, fanout: usize, - ) -> (/*root_distance:*/ usize, Vec) { + ) -> Result<(/*root_distance:*/ usize, Vec), Error> { let RetransmitPeers { root_distance, neighbors, children, addrs, frwds, - } = self.get_retransmit_peers(slot_leader, shred, root_bank, fanout); + } = self.get_retransmit_peers(slot_leader, shred, root_bank, fanout)?; if neighbors.is_empty() { let peers = children .into_iter() @@ -165,7 +172,7 @@ impl ClusterNodes { .filter(|node| addrs.get(&node.tvu) == Some(&node.id)) .map(|node| node.tvu) .collect(); - return (root_distance, peers); + return Ok((root_distance, peers)); } // If the node is on the critical path (i.e. the first node in each // neighborhood), it should send the packet to tvu socket of its @@ -177,7 +184,7 @@ impl ClusterNodes { .filter_map(Node::contact_info) .filter(|node| frwds.get(&node.tvu_forwards) == Some(&node.id)) .map(|node| node.tvu_forwards); - return (root_distance, peers.collect()); + return Ok((root_distance, peers.collect())); } // First neighbor is this node itself, so skip it. let peers = neighbors[1..] @@ -192,7 +199,7 @@ impl ClusterNodes { .filter(|node| addrs.get(&node.tvu) == Some(&node.id)) .map(|node| node.tvu), ); - (root_distance, peers.collect()) + Ok((root_distance, peers.collect())) } pub fn get_retransmit_peers( @@ -201,15 +208,19 @@ impl ClusterNodes { shred: &ShredId, root_bank: &Bank, fanout: usize, - ) -> RetransmitPeers { + ) -> Result { let shred_seed = shred.seed(slot_leader); let mut weighted_shuffle = self.weighted_shuffle.clone(); // Exclude slot leader from list of nodes. if slot_leader == &self.pubkey { - error!("retransmit from slot leader: {}", slot_leader); - } else if let Some(index) = self.index.get(slot_leader) { + return Err(Error::Loopback { + leader: *slot_leader, + shred: *shred, + }); + } + if let Some(index) = self.index.get(slot_leader) { weighted_shuffle.remove_index(*index); - }; + } let mut addrs = HashMap::::with_capacity(self.nodes.len()); let mut frwds = HashMap::::with_capacity(self.nodes.len()); let mut rng = ChaChaRng::from_seed(shred_seed); @@ -241,13 +252,13 @@ impl ClusterNodes { 3 // If changed, update MAX_NUM_TURBINE_HOPS. }; let peers = get_retransmit_peers(fanout, self_index, &nodes); - return RetransmitPeers { + return Ok(RetransmitPeers { root_distance, neighbors: Vec::default(), children: peers.collect(), addrs, frwds, - }; + }); } let root_distance = if self_index == 0 { 0 @@ -262,13 +273,13 @@ impl ClusterNodes { // Assert that the node itself is included in the set of neighbors, at // the right offset. debug_assert_eq!(neighbors[self_index % fanout].pubkey(), self.pubkey); - RetransmitPeers { + Ok(RetransmitPeers { root_distance, neighbors, children, addrs, frwds, - } + }) } } diff --git a/core/src/retransmit_stage.rs b/core/src/retransmit_stage.rs index ff8564f9f61ef9..c0db208195fd09 100644 --- a/core/src/retransmit_stage.rs +++ b/core/src/retransmit_stage.rs @@ -3,7 +3,7 @@ use { crate::{ - cluster_nodes::{self, ClusterNodes, ClusterNodesCache, MAX_NUM_TURBINE_HOPS}, + cluster_nodes::{self, ClusterNodes, ClusterNodesCache, Error, MAX_NUM_TURBINE_HOPS}, packet_hasher::PacketHasher, }, crossbeam_channel::{Receiver, RecvTimeoutError}, @@ -61,6 +61,7 @@ struct RetransmitStats { since: Instant, num_nodes: AtomicUsize, num_addrs_failed: AtomicUsize, + num_loopback_errs: AtomicUsize, num_shreds: usize, num_shreds_skipped: usize, num_small_batches: usize, @@ -98,6 +99,7 @@ impl RetransmitStats { ("num_small_batches", self.num_small_batches, i64), ("num_nodes", *self.num_nodes.get_mut(), i64), ("num_addrs_failed", *self.num_addrs_failed.get_mut(), i64), + ("num_loopback_errs", *self.num_loopback_errs.get_mut(), i64), ("num_shreds", self.num_shreds, i64), ("num_shreds_skipped", self.num_shreds_skipped, i64), ("retransmit_total", *self.retransmit_total.get_mut(), i64), @@ -116,6 +118,15 @@ impl RetransmitStats { let old = std::mem::replace(self, Self::new(Instant::now())); self.slot_stats = old.slot_stats; } + + fn record_error(&self, err: &Error) { + match err { + Error::Loopback { .. } => { + error!("retransmit_shred: {err}"); + self.num_loopback_errs.fetch_add(1, Ordering::Relaxed) + } + }; + } } // Map of shred (slot, index, type) => list of hash values seen for that key. @@ -243,7 +254,7 @@ fn retransmit( shreds .into_iter() .enumerate() - .map(|(index, ((key, shred), slot_leader, cluster_nodes))| { + .filter_map(|(index, ((key, shred), slot_leader, cluster_nodes))| { let (root_distance, num_nodes) = retransmit_shred( &key, &shred, @@ -253,15 +264,20 @@ fn retransmit( socket_addr_space, &sockets[index % sockets.len()], stats, - ); - (key.slot(), root_distance, num_nodes) + ) + .map_err(|err| { + stats.record_error(&err); + err + }) + .ok()?; + Some((key.slot(), root_distance, num_nodes)) }) .fold(HashMap::new(), record) } else { thread_pool.install(|| { shreds .into_par_iter() - .map(|((key, shred), slot_leader, cluster_nodes)| { + .filter_map(|((key, shred), slot_leader, cluster_nodes)| { let index = thread_pool.current_thread_index().unwrap(); let (root_distance, num_nodes) = retransmit_shred( &key, @@ -272,8 +288,13 @@ fn retransmit( socket_addr_space, &sockets[index % sockets.len()], stats, - ); - (key.slot(), root_distance, num_nodes) + ) + .map_err(|err| { + stats.record_error(&err); + err + }) + .ok()?; + Some((key.slot(), root_distance, num_nodes)) }) .fold(HashMap::new, record) .reduce(HashMap::new, RetransmitSlotStats::merge) @@ -295,11 +316,11 @@ fn retransmit_shred( socket_addr_space: &SocketAddrSpace, socket: &UdpSocket, stats: &RetransmitStats, -) -> (/*root_distance:*/ usize, /*num_nodes:*/ usize) { +) -> Result<(/*root_distance:*/ usize, /*num_nodes:*/ usize), Error> { let mut compute_turbine_peers = Measure::start("turbine_start"); let data_plane_fanout = cluster_nodes::get_data_plane_fanout(key.slot(), root_bank); let (root_distance, addrs) = - cluster_nodes.get_retransmit_addrs(slot_leader, key, root_bank, data_plane_fanout); + cluster_nodes.get_retransmit_addrs(slot_leader, key, root_bank, data_plane_fanout)?; let addrs: Vec<_> = addrs .into_iter() .filter(|addr| ContactInfo::is_valid_address(addr, socket_addr_space)) @@ -330,7 +351,7 @@ fn retransmit_shred( stats .retransmit_total .fetch_add(retransmit_time.as_us(), Ordering::Relaxed); - (root_distance, num_nodes) + Ok((root_distance, num_nodes)) } /// Service to retransmit messages from the leader or layer 1 to relevant peer nodes. @@ -453,6 +474,7 @@ impl RetransmitStats { since: now, num_nodes: AtomicUsize::default(), num_addrs_failed: AtomicUsize::default(), + num_loopback_errs: AtomicUsize::default(), num_shreds: 0usize, num_shreds_skipped: 0usize, total_batches: 0usize, From 30a56848bf3780e5682ae139b1ba0ca329803617 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Mon, 23 Jan 2023 20:07:00 +0000 Subject: [PATCH 300/465] indexes duplicate-shreds in gossip crds table (backport #29317) (#29829) indexes duplicate-shreds in gossip crds table (#29317) Also adding Crds::get_duplicate_shreds which retrieves all upserted duplicate-shreds since a given cursor using the index. (cherry picked from commit 2d849a2eae4ff71315d4de9fd393cb1d84695930) Co-authored-by: behzad nouri --- gossip/src/cluster_info.rs | 14 ++++++++++++++ gossip/src/crds.rs | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 46 insertions(+) diff --git a/gossip/src/cluster_info.rs b/gossip/src/cluster_info.rs index 0b6b5cdc43322d..5fda011c69223e 100644 --- a/gossip/src/cluster_info.rs +++ b/gossip/src/cluster_info.rs @@ -33,6 +33,7 @@ use { self, CrdsData, CrdsValue, CrdsValueLabel, EpochSlotsIndex, IncrementalSnapshotHashes, LowestSlot, NodeInstance, SnapshotHashes, Version, Vote, MAX_WALLCLOCK, }, + duplicate_shred::DuplicateShred, epoch_slots::EpochSlots, gossip_error::GossipError, ping_pong::{self, PingCache, Pong}, @@ -1228,6 +1229,19 @@ impl ClusterInfo { .collect() } + /// Returns duplicate-shreds inserted since the given cursor. + #[allow(dead_code)] + pub(crate) fn get_duplicate_shreds(&self, cursor: &mut Cursor) -> Vec { + let gossip_crds = self.gossip.crds.read().unwrap(); + gossip_crds + .get_duplicate_shreds(cursor) + .map(|entry| match &entry.value.data { + CrdsData::DuplicateShred(_, dup) => dup.clone(), + _ => panic!("this should not happen!"), + }) + .collect() + } + pub fn get_node_version(&self, pubkey: &Pubkey) -> Option { let gossip_crds = self.gossip.crds.read().unwrap(); if let Some(version) = gossip_crds.get::<&Version>(*pubkey) { diff --git a/gossip/src/crds.rs b/gossip/src/crds.rs index 2c215c928cbb8b..8507c44fbd78ef 100644 --- a/gossip/src/crds.rs +++ b/gossip/src/crds.rs @@ -66,6 +66,8 @@ pub struct Crds { votes: BTreeMap, // Indices of EpochSlots keyed by insert order. epoch_slots: BTreeMap, + // Indices of DuplicateShred keyed by insert order. + duplicate_shreds: BTreeMap, // Indices of all crds values associated with a node. records: HashMap>, // Indices of all entries keyed by insert order. @@ -153,6 +155,7 @@ impl Default for Crds { nodes: IndexSet::default(), votes: BTreeMap::default(), epoch_slots: BTreeMap::default(), + duplicate_shreds: BTreeMap::default(), records: HashMap::default(), entries: BTreeMap::default(), purged: VecDeque::default(), @@ -223,6 +226,9 @@ impl Crds { CrdsData::EpochSlots(_, _) => { self.epoch_slots.insert(value.ordinal, entry_index); } + CrdsData::DuplicateShred(_, _) => { + self.duplicate_shreds.insert(value.ordinal, entry_index); + } _ => (), }; self.entries.insert(value.ordinal, entry_index); @@ -251,6 +257,10 @@ impl Crds { self.epoch_slots.remove(&entry.get().ordinal); self.epoch_slots.insert(value.ordinal, entry_index); } + CrdsData::DuplicateShred(_, _) => { + self.duplicate_shreds.remove(&entry.get().ordinal); + self.duplicate_shreds.insert(value.ordinal, entry_index); + } _ => (), } self.entries.remove(&entry.get().ordinal); @@ -328,6 +338,21 @@ impl Crds { }) } + /// Returns duplicate-shreds inserted since the given cursor. + /// Updates the cursor as the values are consumed. + pub(crate) fn get_duplicate_shreds<'a>( + &'a self, + cursor: &'a mut Cursor, + ) -> impl Iterator { + let range = (Bound::Included(cursor.ordinal()), Bound::Unbounded); + self.duplicate_shreds + .range(range) + .map(move |(ordinal, index)| { + cursor.consume(*ordinal); + self.table.index(*index) + }) + } + /// Returns all entries inserted since the given cursor. pub(crate) fn get_entries<'a>( &'a self, @@ -487,6 +512,9 @@ impl Crds { CrdsData::EpochSlots(_, _) => { self.epoch_slots.remove(&value.ordinal); } + CrdsData::DuplicateShred(_, _) => { + self.duplicate_shreds.remove(&value.ordinal); + } _ => (), } self.entries.remove(&value.ordinal); @@ -522,6 +550,9 @@ impl Crds { CrdsData::EpochSlots(_, _) => { self.epoch_slots.insert(value.ordinal, index); } + CrdsData::DuplicateShred(_, _) => { + self.duplicate_shreds.insert(value.ordinal, index); + } _ => (), }; self.entries.insert(value.ordinal, index); @@ -606,6 +637,7 @@ impl Crds { nodes: self.nodes.clone(), votes: self.votes.clone(), epoch_slots: self.epoch_slots.clone(), + duplicate_shreds: self.duplicate_shreds.clone(), records: self.records.clone(), entries: self.entries.clone(), purged: self.purged.clone(), From 8ea2d23e5789937f8e14c718c0078ff2f3452c2f Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Tue, 24 Jan 2023 01:25:56 +0000 Subject: [PATCH 301/465] simplifies shreds sigverify (backport #29436) (#29835) * simplifies shreds sigverify (#29436) Simplifying this code in preparation of removing merkle roots from shreds binary. (cherry picked from commit 1de161c13a953d08ae476c36a269b957022b07e0) # Conflicts: # ledger/src/sigverify_shreds.rs * resolves mergify merge conflicts * removes then_some Co-authored-by: behzad nouri --- ledger/src/sigverify_shreds.rs | 229 +++++++++++++++------------------ 1 file changed, 101 insertions(+), 128 deletions(-) diff --git a/ledger/src/sigverify_shreds.rs b/ledger/src/sigverify_shreds.rs index cb528bb8b1330e..8f1d0e09b5c60b 100644 --- a/ledger/src/sigverify_shreds.rs +++ b/ledger/src/sigverify_shreds.rs @@ -31,6 +31,7 @@ lazy_static! { .unwrap(); } +#[must_use] pub fn verify_shred_cpu( packet: &Packet, slot_leaders: &HashMap, @@ -86,11 +87,10 @@ fn verify_shreds_cpu( } fn slot_key_data_for_gpu( - offset_start: usize, batches: &[PacketBatch], slot_keys: &HashMap, recycler_cache: &RecyclerCache, -) -> (PinnedVec, TxOffset, usize) +) -> (/*pubkeys:*/ PinnedVec, TxOffset) where T: AsRef<[u8]> + Copy + Debug + Default + Eq + std::hash::Hash + Sync, { @@ -115,56 +115,53 @@ where }); let keys_to_slots: HashMap> = slots .iter() - .map(|slot| (*slot_keys.get(slot).unwrap(), *slot)) + .map(|slot| (slot_keys[slot], *slot)) .into_group_map(); let mut keyvec = recycler_cache.buffer().allocate("shred_gpu_pubkeys"); keyvec.set_pinnable(); let keyvec_size = keys_to_slots.len() * size_of::(); - keyvec.resize(keyvec_size, 0); - - let slot_to_key_ix: HashMap = keys_to_slots - .into_iter() - .enumerate() - .flat_map(|(i, (k, slots))| { - let start = i * size_of::(); - let end = start + size_of::(); - keyvec[start..end].copy_from_slice(k.as_ref()); - slots.into_iter().zip(repeat(i)) - }) - .collect(); - + resize_buffer(&mut keyvec, keyvec_size); + + let key_offsets: HashMap = { + let mut size = 0; + keys_to_slots + .into_iter() + .flat_map(|(key, slots)| { + let offset = size; + size += std::mem::size_of::(); + keyvec[offset..size].copy_from_slice(key.as_ref()); + slots.into_iter().zip(repeat(offset)) + }) + .collect() + }; let mut offsets = recycler_cache.offsets().allocate("shred_offsets"); offsets.set_pinnable(); for slot in slots { - let key_offset = slot_to_key_ix.get(&slot).unwrap() * size_of::(); - offsets.push((offset_start + key_offset) as u32); + offsets.push(key_offsets[&slot] as u32); } - let num_in_packets = resize_vec(&mut keyvec); trace!("keyvec.len: {}", keyvec.len()); trace!("keyvec: {:?}", keyvec); trace!("offsets: {:?}", offsets); - (keyvec, offsets, num_in_packets) -} - -fn vec_size_in_packets(keyvec: &PinnedVec) -> usize { - (keyvec.len() + (size_of::() - 1)) / size_of::() + (keyvec, offsets) } -fn resize_vec(keyvec: &mut PinnedVec) -> usize { +// Resizes the buffer to >= size and a multiple of +// std::mem::size_of::(). +fn resize_buffer(buffer: &mut PinnedVec, size: usize) { //HACK: Pubkeys vector is passed along as a `PacketBatch` buffer to the GPU //TODO: GPU needs a more opaque interface, which can handle variable sized structures for data //Pad the Pubkeys buffer such that it is bigger than a buffer of Packet sized elems - let num_in_packets = (keyvec.len() + (size_of::() - 1)) / size_of::(); - keyvec.resize(num_in_packets * size_of::(), 0u8); - num_in_packets + let num_packets = (size + std::mem::size_of::() - 1) / std::mem::size_of::(); + let size = num_packets * std::mem::size_of::(); + buffer.resize(size, 0u8); } fn shred_gpu_offsets( - mut pubkeys_end: usize, + offset: usize, batches: &[PacketBatch], recycler_cache: &RecyclerCache, -) -> (TxOffset, TxOffset, TxOffset, Vec>) { +) -> (TxOffset, TxOffset, TxOffset) { fn add_offset(range: Range, offset: usize) -> Range { range.start + offset..range.end + offset } @@ -174,28 +171,25 @@ fn shred_gpu_offsets( msg_start_offsets.set_pinnable(); let mut msg_sizes = recycler_cache.offsets().allocate("shred_msg_sizes"); msg_sizes.set_pinnable(); - let mut v_sig_lens = vec![]; - for batch in batches.iter() { - let mut sig_lens = Vec::new(); - for packet in batch.iter() { - let sig = shred::layout::get_signature_range(); - let sig = add_offset(sig, pubkeys_end); - debug_assert_eq!(sig.end - sig.start, std::mem::size_of::()); - let shred = shred::layout::get_shred(packet); - // Signature may verify for an empty message but the packet will be - // discarded during deserialization. - let msg = shred.and_then(shred::layout::get_signed_message_range); - let msg = add_offset(msg.unwrap_or_default(), pubkeys_end); - signature_offsets.push(sig.start as u32); - msg_start_offsets.push(msg.start as u32); - let msg_size = msg.end.saturating_sub(msg.start); - msg_sizes.push(msg_size as u32); - sig_lens.push(1); - pubkeys_end += size_of::(); - } - v_sig_lens.push(sig_lens); + let offsets = std::iter::successors(Some(offset), |offset| { + offset.checked_add(std::mem::size_of::()) + }); + let packets = batches.iter().flatten(); + for (offset, packet) in offsets.zip(packets) { + let sig = shred::layout::get_signature_range(); + let sig = add_offset(sig, offset); + debug_assert_eq!(sig.end - sig.start, std::mem::size_of::()); + let shred = shred::layout::get_shred(packet); + // Signature may verify for an empty message but the packet will be + // discarded during deserialization. + let msg = shred.and_then(shred::layout::get_signed_message_range); + let msg = add_offset(msg.unwrap_or_default(), offset); + signature_offsets.push(sig.start as u32); + msg_start_offsets.push(msg.start as u32); + let msg_size = msg.end.saturating_sub(msg.start); + msg_sizes.push(msg_size as u32); } - (signature_offsets, msg_start_offsets, msg_sizes, v_sig_lens) + (signature_offsets, msg_start_offsets, msg_sizes) } pub fn verify_shreds_gpu( @@ -207,38 +201,27 @@ pub fn verify_shreds_gpu( None => return verify_shreds_cpu(batches, slot_leaders), Some(api) => api, }; - let mut elems = Vec::new(); - let mut rvs = Vec::new(); - let packet_count = count_packets_in_batches(batches); - let (pubkeys, pubkey_offsets, mut num_packets) = - slot_key_data_for_gpu(0, batches, slot_leaders, recycler_cache); + let (pubkeys, pubkey_offsets) = slot_key_data_for_gpu(batches, slot_leaders, recycler_cache); //HACK: Pubkeys vector is passed along as a `PacketBatch` buffer to the GPU //TODO: GPU needs a more opaque interface, which can handle variable sized structures for data - let pubkeys_len = num_packets * size_of::(); - trace!("num_packets: {}", num_packets); - trace!("pubkeys_len: {}", pubkeys_len); - let (signature_offsets, msg_start_offsets, msg_sizes, v_sig_lens) = - shred_gpu_offsets(pubkeys_len, batches, recycler_cache); + let offset = pubkeys.len(); + let (signature_offsets, msg_start_offsets, msg_sizes) = + shred_gpu_offsets(offset, batches, recycler_cache); let mut out = recycler_cache.buffer().allocate("out_buffer"); out.set_pinnable(); - elems.push(perf_libs::Elems { + out.resize(signature_offsets.len(), 0u8); + debug_assert_eq!(pubkeys.len() % std::mem::size_of::(), 0); + let num_pubkey_packets = pubkeys.len() / std::mem::size_of::(); + let mut elems = vec![perf_libs::Elems { #[allow(clippy::cast_ptr_alignment)] elems: pubkeys.as_ptr() as *const solana_sdk::packet::Packet, - num: num_packets as u32, - }); - - for batch in batches { - elems.push(perf_libs::Elems { - elems: batch.as_ptr(), - num: batch.len() as u32, - }); - let mut v = Vec::new(); - v.resize(batch.len(), 0); - rvs.push(v); - num_packets += batch.len(); - } - out.resize(signature_offsets.len(), 0); - + num: num_pubkey_packets as u32, + }]; + elems.extend(batches.iter().map(|batch| perf_libs::Elems { + elems: batch.as_ptr(), + num: batch.len() as u32, + })); + let num_packets = elems.iter().map(|elem| elem.num).sum(); trace!("Starting verify num packets: {}", num_packets); trace!("elem len: {}", elems.len() as u32); trace!("packet sizeof: {}", size_of::() as u32); @@ -248,7 +231,7 @@ pub fn verify_shreds_gpu( elems.as_ptr(), elems.len() as u32, size_of::() as u32, - num_packets as u32, + num_packets, signature_offsets.len() as u32, msg_sizes.as_ptr(), pubkey_offsets.as_ptr(), @@ -264,9 +247,15 @@ pub fn verify_shreds_gpu( trace!("done verify"); trace!("out buf {:?}", out); + // Each shred has exactly one signature. + let v_sig_lens: Vec<_> = batches + .iter() + .map(|batch| vec![1u32; batch.len()]) + .collect(); + let mut rvs: Vec<_> = batches.iter().map(|batch| vec![0u8; batch.len()]).collect(); sigverify::copy_return_values(&v_sig_lens, &out, &mut rvs); - inc_new_counter_debug!("ed25519_shred_verify_gpu", packet_count); + inc_new_counter_debug!("ed25519_shred_verify_gpu", out.len()); rvs } @@ -307,10 +296,10 @@ pub fn sign_shreds_gpu_pinned_keypair(keypair: &Keypair, cache: &RecyclerCache) result[0] &= 248; result[31] &= 63; result[31] |= 64; - vec.resize(pubkey.len() + result.len(), 0); + let size = pubkey.len() + result.len(); + resize_buffer(&mut vec, size); vec[0..pubkey.len()].copy_from_slice(&pubkey); - vec[pubkey.len()..].copy_from_slice(&result); - resize_vec(&mut vec); + vec[pubkey.len()..size].copy_from_slice(&result); vec } @@ -332,11 +321,6 @@ pub fn sign_shreds_gpu( }; let pinned_keypair = pinned_keypair.as_ref().unwrap(); - let mut elems = Vec::new(); - let offset: usize = pinned_keypair.len(); - let num_keypair_packets = vec_size_in_packets(pinned_keypair); - let mut num_packets = num_keypair_packets; - //should be zero let mut pubkey_offsets = recycler_cache.offsets().allocate("pubkey offsets"); pubkey_offsets.resize(packet_count, 0); @@ -344,29 +328,27 @@ pub fn sign_shreds_gpu( let mut secret_offsets = recycler_cache.offsets().allocate("secret_offsets"); secret_offsets.resize(packet_count, pubkey_size as u32); + let offset: usize = pinned_keypair.len(); trace!("offset: {}", offset); - let (signature_offsets, msg_start_offsets, msg_sizes, _v_sig_lens) = + let (signature_offsets, msg_start_offsets, msg_sizes) = shred_gpu_offsets(offset, batches, recycler_cache); let total_sigs = signature_offsets.len(); let mut signatures_out = recycler_cache.buffer().allocate("ed25519 signatures"); signatures_out.set_pinnable(); signatures_out.resize(total_sigs * sig_size, 0); - elems.push(perf_libs::Elems { + + debug_assert_eq!(pinned_keypair.len() % std::mem::size_of::(), 0); + let num_keypair_packets = pinned_keypair.len() / std::mem::size_of::(); + let mut elems = vec![perf_libs::Elems { #[allow(clippy::cast_ptr_alignment)] elems: pinned_keypair.as_ptr() as *const solana_sdk::packet::Packet, num: num_keypair_packets as u32, - }); - - for batch in batches.iter() { - elems.push(perf_libs::Elems { - elems: batch.as_ptr(), - num: batch.len() as u32, - }); - let mut v = Vec::new(); - v.resize(batch.len(), 0); - num_packets += batch.len(); - } - + }]; + elems.extend(batches.iter().map(|batch| perf_libs::Elems { + elems: batch.as_ptr(), + num: batch.len() as u32, + })); + let num_packets = elems.iter().map(|elem| elem.num).sum(); trace!("Starting verify num packets: {}", num_packets); trace!("elem len: {}", elems.len() as u32); trace!("packet sizeof: {}", size_of::() as u32); @@ -376,7 +358,7 @@ pub fn sign_shreds_gpu( elems.as_mut_ptr(), elems.len() as u32, size_of::() as u32, - num_packets as u32, + num_packets, total_sigs as u32, msg_sizes.as_ptr(), pubkey_offsets.as_ptr(), @@ -390,20 +372,20 @@ pub fn sign_shreds_gpu( } } trace!("done sign"); - let mut sizes: Vec = vec![0]; - sizes.extend(batches.iter().map(|b| b.len())); - for i in 0..sizes.len() { - if i == 0 { - continue; - } - sizes[i] += sizes[i - 1]; - } + // Cumulative number of packets within batches. + let num_packets: Vec<_> = batches + .iter() + .scan(0, |num_packets, batch| { + let out = *num_packets; + *num_packets += batch.len(); + Some(out) + }) + .collect(); SIGVERIFY_THREAD_POOL.install(|| { batches .par_iter_mut() - .enumerate() - .for_each(|(batch_ix, batch)| { - let num_packets = sizes[batch_ix]; + .zip(num_packets) + .for_each(|(batch, num_packets)| { batch[..] .par_iter_mut() .enumerate() @@ -827,15 +809,9 @@ mod tests { }); let packets: Vec<_> = repeat_with(|| { let size = rng.gen_range(0, 16); - let packets: Vec<_> = repeat_with(|| packets.next()) - .while_some() - .take(size) - .collect(); - if size != 0 && packets.is_empty() { - None - } else { - Some(PacketBatch::new(packets)) - } + let packets = packets.by_ref().take(size).collect(); + let batch = PacketBatch::new(packets); + (size == 0 || !batch.is_empty()).then(|| batch) }) .while_some() .collect(); @@ -862,8 +838,7 @@ mod tests { verify_shreds_gpu(&packets, &pubkeys, &recycler_cache), packets .iter() - .map(PacketBatch::len) - .map(|size| vec![1u8; size]) + .map(|batch| vec![1u8; batch.len()]) .collect::>() ); // Invalidate signatures for a random number of packets. @@ -906,8 +881,7 @@ mod tests { verify_shreds_gpu(&packets, &pubkeys, &recycler_cache), packets .iter() - .map(PacketBatch::len) - .map(|size| vec![0u8; size]) + .map(|batch| vec![0u8; batch.len()]) .collect::>() ); let pinned_keypair = sign_shreds_gpu_pinned_keypair(&keypair, &recycler_cache); @@ -918,8 +892,7 @@ mod tests { verify_shreds_gpu(&packets, &pubkeys, &recycler_cache), packets .iter() - .map(PacketBatch::len) - .map(|size| vec![1u8; size]) + .map(|batch| vec![1u8; batch.len()]) .collect::>() ); } From 1ef6b1f3953a3438387c20420182c2e56defa02e Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Tue, 24 Jan 2023 02:17:42 -0600 Subject: [PATCH 302/465] Increase cpu metric reporting interval from 1s to 10s (backport #28237) (#29846) Increase cpu metric reporting interval from 1s to 10s (cherry picked from commit e2fc9d51ded89f791e4331e626d20e5bdb6c9382) Co-authored-by: Jason Davis --- core/src/system_monitor_service.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/system_monitor_service.rs b/core/src/system_monitor_service.rs index 57f11f7dff5196..a562784407a525 100644 --- a/core/src/system_monitor_service.rs +++ b/core/src/system_monitor_service.rs @@ -27,7 +27,7 @@ const MS_PER_H: u64 = MS_PER_M * 60; const SAMPLE_INTERVAL_UDP_MS: u64 = 2 * MS_PER_S; const SAMPLE_INTERVAL_OS_NETWORK_LIMITS_MS: u64 = MS_PER_H; const SAMPLE_INTERVAL_MEM_MS: u64 = MS_PER_S; -const SAMPLE_INTERVAL_CPU_MS: u64 = MS_PER_S; +const SAMPLE_INTERVAL_CPU_MS: u64 = 10 * MS_PER_S; const SAMPLE_INTERVAL_DISK_MS: u64 = MS_PER_S; const SLEEP_INTERVAL: Duration = Duration::from_millis(500); From 1343d2b01c4615538fa6ade59b48dd610b0e08dd Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Tue, 24 Jan 2023 14:17:53 +0000 Subject: [PATCH 303/465] implements shred::layout::get_merkle_root (backport #29437) (#29847) implements shred::layout::get_merkle_root (#29437) In preparation of removing merkle roots form shreds binary, the commit adds api to recover the root from the merkle proof embedded in shreds payload. (cherry picked from commit db3d926633061cf82ecb791100cb1253868e7e96) Co-authored-by: behzad nouri --- ledger/src/shred.rs | 28 +++++++--- ledger/src/shred/merkle.rs | 110 ++++++++++++++++++++++++++++++++----- 2 files changed, 117 insertions(+), 21 deletions(-) diff --git a/ledger/src/shred.rs b/ledger/src/shred.rs index b88e6a9b83bb75..950faa3a73288d 100644 --- a/ledger/src/shred.rs +++ b/ledger/src/shred.rs @@ -100,7 +100,6 @@ const SIZE_OF_CODING_SHRED_HEADERS: usize = 89; const SIZE_OF_SIGNATURE: usize = SIGNATURE_BYTES; const SIZE_OF_SHRED_VARIANT: usize = 1; const SIZE_OF_SHRED_SLOT: usize = 8; -const SIZE_OF_SHRED_INDEX: usize = 4; const OFFSET_OF_SHRED_VARIANT: usize = SIZE_OF_SIGNATURE; const OFFSET_OF_SHRED_SLOT: usize = SIZE_OF_SIGNATURE + SIZE_OF_SHRED_VARIANT; @@ -539,6 +538,8 @@ impl Shred { // Helper methods to extract pieces of the shred from the payload // without deserializing the entire payload. pub mod layout { + #[cfg(test)] + use crate::shred::merkle::MerkleRoot; use {super::*, std::ops::Range}; fn get_shred_size(packet: &Packet) -> Option { @@ -592,17 +593,15 @@ pub mod layout { } pub fn get_version(shred: &[u8]) -> Option { - const OFFSET_OF_SHRED_VERSION: usize = OFFSET_OF_SHRED_INDEX + SIZE_OF_SHRED_INDEX; - <[u8; 2]>::try_from(shred.get(OFFSET_OF_SHRED_VERSION..)?.get(..2)?) + <[u8; 2]>::try_from(shred.get(77..79)?) .map(u16::from_le_bytes) .ok() } // The caller should verify first that the shred is data and not code! pub(super) fn get_parent_offset(shred: &[u8]) -> Option { - const OFFSET_OF_SHRED_PARENT: usize = SIZE_OF_COMMON_SHRED_HEADER; debug_assert_eq!(get_shred_type(shred).unwrap(), ShredType::Data); - <[u8; 2]>::try_from(shred.get(OFFSET_OF_SHRED_PARENT..)?.get(..2)?) + <[u8; 2]>::try_from(shred.get(83..85)?) .map(u16::from_le_bytes) .ok() } @@ -631,17 +630,28 @@ pub mod layout { } pub(crate) fn get_reference_tick(shred: &[u8]) -> Result { - const SIZE_OF_PARENT_OFFSET: usize = std::mem::size_of::(); - const OFFSET_OF_SHRED_FLAGS: usize = SIZE_OF_COMMON_SHRED_HEADER + SIZE_OF_PARENT_OFFSET; if get_shred_type(shred)? != ShredType::Data { return Err(Error::InvalidShredType); } - let flags = match shred.get(OFFSET_OF_SHRED_FLAGS) { + let flags = match shred.get(85) { None => return Err(Error::InvalidPayloadSize(shred.len())), Some(flags) => flags, }; Ok(flags & ShredFlags::SHRED_TICK_REFERENCE_MASK.bits()) } + + #[cfg(test)] + pub(crate) fn get_merkle_root(shred: &[u8]) -> Option { + match get_shred_variant(shred).ok()? { + ShredVariant::LegacyCode | ShredVariant::LegacyData => None, + ShredVariant::MerkleCode(proof_size) => { + merkle::ShredCode::get_merkle_root(shred, proof_size) + } + ShredVariant::MerkleData(proof_size) => { + merkle::ShredData::get_merkle_root(shred, proof_size) + } + } + } } impl From for Shred { @@ -948,6 +958,8 @@ mod tests { solana_sdk::{shred_version, signature::Signer}, }; + const SIZE_OF_SHRED_INDEX: usize = 4; + fn bs58_decode>(data: T) -> Vec { bs58::decode(data).into_vec().unwrap() } diff --git a/ledger/src/shred/merkle.rs b/ledger/src/shred/merkle.rs index 4ac4b7a6c67c7b..e86dcd0a1745b0 100644 --- a/ledger/src/shred/merkle.rs +++ b/ledger/src/shred/merkle.rs @@ -46,7 +46,7 @@ const_assert_eq!(ShredData::SIZE_OF_PAYLOAD, 1203); const MERKLE_HASH_PREFIX_LEAF: &[u8] = &[0x00]; const MERKLE_HASH_PREFIX_NODE: &[u8] = &[0x01]; -type MerkleRoot = MerkleProofEntry; +pub(crate) type MerkleRoot = MerkleProofEntry; type MerkleProofEntry = [u8; 20]; // Layout: {common, data} headers | data buffer | merkle branch @@ -246,6 +246,27 @@ impl ShredData { } shred_data::sanitize(self) } + + #[cfg(test)] + pub(super) fn get_merkle_root(shred: &[u8], proof_size: u8) -> Option { + debug_assert_eq!( + shred::layout::get_shred_variant(shred).unwrap(), + ShredVariant::MerkleData(proof_size) + ); + // Shred index in the erasure batch. + let index = { + let fec_set_index = <[u8; 4]>::try_from(shred.get(79..83)?) + .map(u32::from_le_bytes) + .ok()?; + shred::layout::get_index(shred)? + .checked_sub(fec_set_index) + .map(usize::try_from)? + .ok()? + }; + // Where the merkle branch starts in the shred binary. + let offset = Self::SIZE_OF_HEADERS + Self::capacity(proof_size).ok()?; + get_merkle_root(shred, proof_size, index, offset) + } } impl ShredCode { @@ -375,6 +396,29 @@ impl ShredCode { } shred_code::sanitize(self) } + + #[cfg(test)] + pub(super) fn get_merkle_root(shred: &[u8], proof_size: u8) -> Option { + debug_assert_eq!( + shred::layout::get_shred_variant(shred).unwrap(), + ShredVariant::MerkleCode(proof_size) + ); + // Shred index in the erasure batch. + let index = { + let num_data_shreds = <[u8; 2]>::try_from(shred.get(83..85)?) + .map(u16::from_le_bytes) + .map(usize::from) + .ok()?; + let position = <[u8; 2]>::try_from(shred.get(87..89)?) + .map(u16::from_le_bytes) + .map(usize::from) + .ok()?; + num_data_shreds.checked_add(position)? + }; + // Where the merkle branch starts in the shred binary. + let offset = Self::SIZE_OF_HEADERS + Self::capacity(proof_size).ok()?; + get_merkle_root(shred, proof_size, index, offset) + } } impl ShredTrait for ShredData { @@ -569,17 +613,51 @@ fn join_nodes, T: AsRef<[u8]>>(node: S, other: T) -> Hash { } fn verify_merkle_proof(index: usize, node: Hash, merkle_branch: &MerkleBranch) -> bool { - let proof = merkle_branch.proof.iter(); - let (index, root) = proof.fold((index, node), |(index, node), other| { - let parent = if index % 2 == 0 { - join_nodes(node, other) - } else { - join_nodes(other, node) - }; - (index >> 1, parent) - }); - let root = &root.as_ref()[..SIZE_OF_MERKLE_ROOT]; - (index, root) == (0usize, &merkle_branch.root[..]) + let proof = merkle_branch.proof.iter().copied(); + let root = fold_merkle_proof(index, node, proof); + root.as_ref() == Some(merkle_branch.root) +} + +// Recovers root of the merkle tree from a leaf node +// at the given index and the respective proof. +fn fold_merkle_proof<'a, I>(index: usize, node: Hash, proof: I) -> Option +where + I: IntoIterator, +{ + let (index, root) = proof + .into_iter() + .fold((index, node), |(index, node), other| { + let parent = if index % 2 == 0 { + join_nodes(node, other) + } else { + join_nodes(other, node) + }; + (index >> 1, parent) + }); + (index == 0).then(|| { + let root = &root.as_ref()[..SIZE_OF_MERKLE_ROOT]; + MerkleRoot::try_from(root).ok() + })? +} + +#[cfg(test)] +fn get_merkle_root( + shred: &[u8], + proof_size: u8, + index: usize, // Shred index in the erasure batch. + offset: usize, // Where the merkle branch starts in the shred binary. +) -> Option { + let node = shred.get(SIZE_OF_SIGNATURE..offset)?; + let node = hashv(&[MERKLE_HASH_PREFIX_LEAF, node]); + // Merkle proof embedded in the payload. + let offset = offset + SIZE_OF_MERKLE_ROOT; + let size = usize::from(proof_size) * SIZE_OF_MERKLE_PROOF_ENTRY; + let proof = shred + .get(offset..offset + size)? + .chunks(SIZE_OF_MERKLE_PROOF_ENTRY) + .map(<&MerkleProofEntry>::try_from) + .map(Result::unwrap); + fold_merkle_proof(index, node, proof) } fn make_merkle_tree(mut nodes: Vec) -> Vec { @@ -1059,7 +1137,7 @@ fn make_erasure_batch( mod test { use { super::*, - crate::shred::ShredFlags, + crate::shred::{ShredFlags, ShredId}, itertools::Itertools, matches::assert_matches, rand::{seq::SliceRandom, CryptoRng, Rng}, @@ -1412,15 +1490,21 @@ mod test { version, fec_set_index: _, } = *shred.common_header(); + let shred_type = ShredType::from(shred_variant); + let key = ShredId::new(slot, index, shred_type); + let merkle_root = shred.merkle_root().copied().ok(); let shred = shred.payload(); assert_eq!(shred::layout::get_signature(shred), Some(signature)); assert_eq!( shred::layout::get_shred_variant(shred).unwrap(), shred_variant ); + assert_eq!(shred::layout::get_shred_type(shred).unwrap(), shred_type); assert_eq!(shred::layout::get_slot(shred), Some(slot)); assert_eq!(shred::layout::get_index(shred), Some(index)); assert_eq!(shred::layout::get_version(shred), Some(version)); + assert_eq!(shred::layout::get_shred_id(shred), Some(key)); + assert_eq!(shred::layout::get_merkle_root(shred), merkle_root); let slice = shred::layout::get_signed_message_range(shred).unwrap(); let message = shred.get(slice).unwrap(); assert!(signature.verify(keypair.pubkey().as_ref(), message)); From 2bea91f27e79a76e3a6a229437c1645a61480118 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Tue, 24 Jan 2023 10:30:11 -0600 Subject: [PATCH 304/465] reduce memory and disk usage report freq to 1 per 5s (backport #28327) (#29848) reduce memory usage report freq to 1 per 5s (#28327) (cherry picked from commit 7e87998091de062589b1fbd5261df5ce6d213bfc) Co-authored-by: HaoranYi --- core/src/system_monitor_service.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/src/system_monitor_service.rs b/core/src/system_monitor_service.rs index a562784407a525..8806b62bc85e06 100644 --- a/core/src/system_monitor_service.rs +++ b/core/src/system_monitor_service.rs @@ -26,9 +26,9 @@ const MS_PER_M: u64 = MS_PER_S * 60; const MS_PER_H: u64 = MS_PER_M * 60; const SAMPLE_INTERVAL_UDP_MS: u64 = 2 * MS_PER_S; const SAMPLE_INTERVAL_OS_NETWORK_LIMITS_MS: u64 = MS_PER_H; -const SAMPLE_INTERVAL_MEM_MS: u64 = MS_PER_S; +const SAMPLE_INTERVAL_MEM_MS: u64 = 5 * MS_PER_S; const SAMPLE_INTERVAL_CPU_MS: u64 = 10 * MS_PER_S; -const SAMPLE_INTERVAL_DISK_MS: u64 = MS_PER_S; +const SAMPLE_INTERVAL_DISK_MS: u64 = 5 * MS_PER_S; const SLEEP_INTERVAL: Duration = Duration::from_millis(500); #[cfg(target_os = "linux")] From 983880602a8d5bd686702b3957a3358c03a716ab Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Tue, 24 Jan 2023 17:40:50 +0000 Subject: [PATCH 305/465] adds shred::layout::get_signed_data (backport #29438) (#29854) * adds shred::layout::get_signed_data (#29438) Working towards removing merkle root from shreds payload, the commit implements api to obtain signed data from shreds binary. (cherry picked from commit 50afb80f527246e2deeb733ef278bf74355ba6b0) # Conflicts: # ledger/src/shred.rs * resolves mergify merge conflicts Co-authored-by: behzad nouri --- ledger/src/shred.rs | 117 ++++++++++++++++++++--- ledger/src/shred/legacy.rs | 7 +- ledger/src/shred/merkle.rs | 30 +++--- ledger/src/shred/shred_code.rs | 2 +- ledger/src/shred/shred_data.rs | 2 +- ledger/src/shred/traits.rs | 2 +- ledger/src/sigverify_shreds.rs | 163 ++++++++++++--------------------- 7 files changed, 185 insertions(+), 138 deletions(-) diff --git a/ledger/src/shred.rs b/ledger/src/shred.rs index 950faa3a73288d..73e5759a0b8f99 100644 --- a/ledger/src/shred.rs +++ b/ledger/src/shred.rs @@ -309,7 +309,7 @@ use dispatch; impl Shred { dispatch!(fn common_header(&self) -> &ShredCommonHeader); dispatch!(fn set_signature(&mut self, signature: Signature)); - dispatch!(fn signed_message(&self) -> &[u8]); + dispatch!(fn signed_data(&self) -> &[u8]); // Returns the portion of the shred's payload which is erasure coded. dispatch!(pub(crate) fn erasure_shard(self) -> Result, Error>); @@ -460,7 +460,7 @@ impl Shred { } pub fn sign(&mut self, keypair: &Keypair) { - let signature = keypair.sign_message(self.signed_message()); + let signature = keypair.sign_message(self.signed_data()); self.set_signature(signature); } @@ -508,8 +508,8 @@ impl Shred { #[must_use] pub fn verify(&self, pubkey: &Pubkey) -> bool { - let message = self.signed_message(); - self.signature().verify(pubkey.as_ref(), message) + let data = self.signed_data(); + self.signature().verify(pubkey.as_ref(), data) } // Returns true if the erasure coding of the two shreds mismatch. @@ -538,9 +538,26 @@ impl Shred { // Helper methods to extract pieces of the shred from the payload // without deserializing the entire payload. pub mod layout { + use {super::*, crate::shred::merkle::MerkleRoot, std::ops::Range}; #[cfg(test)] - use crate::shred::merkle::MerkleRoot; - use {super::*, std::ops::Range}; + use { + rand::{seq::SliceRandom, Rng}, + std::collections::HashMap, + }; + + pub(crate) enum SignedData<'a> { + Chunk(&'a [u8]), + MerkleRoot(MerkleRoot), + } + + impl<'a> AsRef<[u8]> for SignedData<'a> { + fn as_ref(&self) -> &[u8] { + match self { + Self::Chunk(chunk) => chunk, + Self::MerkleRoot(root) => root, + } + } + } fn get_shred_size(packet: &Packet) -> Option { let size = packet.data(..)?.len(); @@ -615,18 +632,36 @@ pub mod layout { )) } - // Returns slice range of the shred payload which is signed. - pub(crate) fn get_signed_message_range(shred: &[u8]) -> Option> { - let range = match get_shred_variant(shred).ok()? { - ShredVariant::LegacyCode | ShredVariant::LegacyData => legacy::SIGNED_MESSAGE_RANGE, + pub(crate) fn get_signed_data(shred: &[u8]) -> Option { + let data = match get_shred_variant(shred).ok()? { + ShredVariant::LegacyCode | ShredVariant::LegacyData => { + let chunk = shred.get(self::legacy::SIGNED_MESSAGE_OFFSETS)?; + SignedData::Chunk(chunk) + } + ShredVariant::MerkleCode(proof_size) => { + let merkle_root = self::merkle::ShredCode::get_merkle_root(shred, proof_size)?; + SignedData::MerkleRoot(merkle_root) + } + ShredVariant::MerkleData(proof_size) => { + let merkle_root = self::merkle::ShredData::get_merkle_root(shred, proof_size)?; + SignedData::MerkleRoot(merkle_root) + } + }; + Some(data) + } + + // Returns offsets within the shred payload which is signed. + pub(crate) fn get_signed_data_offsets(shred: &[u8]) -> Option> { + let offsets = match get_shred_variant(shred).ok()? { + ShredVariant::LegacyCode | ShredVariant::LegacyData => legacy::SIGNED_MESSAGE_OFFSETS, ShredVariant::MerkleCode(proof_size) => { - merkle::ShredCode::get_signed_message_range(proof_size)? + merkle::ShredCode::get_signed_data_offsets(proof_size)? } ShredVariant::MerkleData(proof_size) => { - merkle::ShredData::get_signed_message_range(proof_size)? + merkle::ShredData::get_signed_data_offsets(proof_size)? } }; - (range.end <= shred.len()).then(|| range) + (offsets.end <= shred.len()).then(|| offsets) } pub(crate) fn get_reference_tick(shred: &[u8]) -> Result { @@ -652,6 +687,62 @@ pub mod layout { } } } + + // Minimally corrupts the packet so that the signature no longer verifies. + #[cfg(test)] + pub(crate) fn corrupt_packet( + rng: &mut R, + packet: &mut Packet, + keypairs: &HashMap, + ) { + fn modify_packet(rng: &mut R, packet: &mut Packet, offsets: Range) { + let buffer = packet.buffer_mut(); + let byte = buffer[offsets].choose_mut(rng).unwrap(); + *byte = rng.gen::().max(1u8).wrapping_add(*byte); + } + let shred = get_shred(packet).unwrap(); + let merkle_proof_size = match get_shred_variant(shred).unwrap() { + ShredVariant::LegacyCode | ShredVariant::LegacyData => None, + ShredVariant::MerkleCode(proof_size) | ShredVariant::MerkleData(proof_size) => { + Some(proof_size) + } + }; + let coin_flip: bool = rng.gen(); + if coin_flip { + // Corrupt one byte within the signature offsets. + modify_packet(rng, packet, 0..SIGNATURE_BYTES); + } else { + // Corrupt one byte within the signed data offsets. + let size = shred.len(); + let offsets = get_signed_data_offsets(shred).unwrap(); + modify_packet(rng, packet, offsets); + if let Some(proof_size) = merkle_proof_size { + // Also need to corrupt the merkle proof. + // Proof entries are each 20 bytes at the end of shreds. + let offset = usize::from(proof_size) * 20; + modify_packet(rng, packet, size - offset..size); + } + } + // Assert that the signature no longer verifies. + let shred = get_shred(packet).unwrap(); + let slot = get_slot(shred).unwrap(); + let signature = get_signature(shred).unwrap(); + if coin_flip { + let pubkey = keypairs[&slot].pubkey(); + let data = get_signed_data(shred).unwrap(); + assert!(!signature.verify(pubkey.as_ref(), data.as_ref())); + let offsets = get_signed_data_offsets(shred).unwrap(); + assert!(!signature.verify(pubkey.as_ref(), &shred[offsets])); + } else { + // Slot may have been corrupted and no longer mapping to a keypair. + let pubkey = keypairs.get(&slot).map(Keypair::pubkey).unwrap_or_default(); + if let Some(data) = get_signed_data(shred) { + assert!(!signature.verify(pubkey.as_ref(), data.as_ref())); + } + let offsets = get_signed_data_offsets(shred).unwrap_or_default(); + assert!(!signature.verify(pubkey.as_ref(), &shred[offsets])); + } + } } impl From for Shred { diff --git a/ledger/src/shred/legacy.rs b/ledger/src/shred/legacy.rs index 62eb58bc38e164..095ee8691b82e8 100644 --- a/ledger/src/shred/legacy.rs +++ b/ledger/src/shred/legacy.rs @@ -15,7 +15,8 @@ use { // All payload including any zero paddings are signed. // Code and data shreds have the same payload size. -pub(super) const SIGNED_MESSAGE_RANGE: Range = SIZE_OF_SIGNATURE..ShredData::SIZE_OF_PAYLOAD; +pub(super) const SIGNED_MESSAGE_OFFSETS: Range = + SIZE_OF_SIGNATURE..ShredData::SIZE_OF_PAYLOAD; const_assert_eq!(ShredData::SIZE_OF_PAYLOAD, ShredCode::SIZE_OF_PAYLOAD); const_assert_eq!(ShredData::SIZE_OF_PAYLOAD, 1228); const_assert_eq!(ShredData::CAPACITY, 1051); @@ -108,7 +109,7 @@ impl Shred for ShredData { shred_data::sanitize(self) } - fn signed_message(&self) -> &[u8] { + fn signed_data(&self) -> &[u8] { debug_assert_eq!(self.payload.len(), Self::SIZE_OF_PAYLOAD); &self.payload[SIZE_OF_SIGNATURE..] } @@ -170,7 +171,7 @@ impl Shred for ShredCode { shred_code::sanitize(self) } - fn signed_message(&self) -> &[u8] { + fn signed_data(&self) -> &[u8] { debug_assert_eq!(self.payload.len(), Self::SIZE_OF_PAYLOAD); &self.payload[SIZE_OF_SIGNATURE..] } diff --git a/ledger/src/shred/merkle.rs b/ledger/src/shred/merkle.rs index e86dcd0a1745b0..13bc6f861f5e3a 100644 --- a/ledger/src/shred/merkle.rs +++ b/ledger/src/shred/merkle.rs @@ -91,12 +91,12 @@ impl Shred { dispatch!(fn sanitize(&self, verify_merkle_proof: bool) -> Result<(), Error>); dispatch!(fn set_merkle_branch(&mut self, merkle_branch: &MerkleBranch) -> Result<(), Error>); dispatch!(fn set_signature(&mut self, signature: Signature)); - dispatch!(fn signed_message(&self) -> &[u8]); + dispatch!(fn signed_data(&self) -> &[u8]); #[must_use] fn verify(&self, pubkey: &Pubkey) -> bool { - let message = self.signed_message(); - self.signature().verify(pubkey.as_ref(), message) + let data = self.signed_data(); + self.signature().verify(pubkey.as_ref(), data) } fn signature(&self) -> Signature { @@ -147,7 +147,7 @@ impl ShredData { .ok_or(Error::InvalidProofSize(proof_size)) } - pub(super) fn get_signed_message_range(proof_size: u8) -> Option> { + pub(super) fn get_signed_data_offsets(proof_size: u8) -> Option> { let data_buffer_size = Self::capacity(proof_size).ok()?; let offset = Self::SIZE_OF_HEADERS + data_buffer_size; Some(offset..offset + SIZE_OF_MERKLE_ROOT) @@ -247,7 +247,6 @@ impl ShredData { shred_data::sanitize(self) } - #[cfg(test)] pub(super) fn get_merkle_root(shred: &[u8], proof_size: u8) -> Option { debug_assert_eq!( shred::layout::get_shred_variant(shred).unwrap(), @@ -332,7 +331,7 @@ impl ShredCode { Ok(verify_merkle_proof(index, node, &self.merkle_branch()?)) } - pub(super) fn get_signed_message_range(proof_size: u8) -> Option> { + pub(super) fn get_signed_data_offsets(proof_size: u8) -> Option> { let offset = Self::SIZE_OF_HEADERS + Self::capacity(proof_size).ok()?; Some(offset..offset + SIZE_OF_MERKLE_ROOT) } @@ -397,7 +396,6 @@ impl ShredCode { shred_code::sanitize(self) } - #[cfg(test)] pub(super) fn get_merkle_root(shred: &[u8], proof_size: u8) -> Option { debug_assert_eq!( shred::layout::get_shred_variant(shred).unwrap(), @@ -488,7 +486,7 @@ impl ShredTrait for ShredData { self.sanitize(/*verify_merkle_proof:*/ true) } - fn signed_message(&self) -> &[u8] { + fn signed_data(&self) -> &[u8] { self.merkle_root().map(AsRef::as_ref).unwrap_or_default() } } @@ -553,7 +551,7 @@ impl ShredTrait for ShredCode { self.sanitize(/*verify_merkle_proof:*/ true) } - fn signed_message(&self) -> &[u8] { + fn signed_data(&self) -> &[u8] { self.merkle_root().map(AsRef::as_ref).unwrap_or_default() } } @@ -640,7 +638,6 @@ where })? } -#[cfg(test)] fn get_merkle_root( shred: &[u8], proof_size: u8, @@ -1347,7 +1344,7 @@ mod test { let merkle_branch = make_merkle_branch(index, num_shreds, &tree).unwrap(); assert_eq!(merkle_branch.proof.len(), usize::from(proof_size)); shred.set_merkle_branch(&merkle_branch).unwrap(); - let signature = keypair.sign_message(shred.signed_message()); + let signature = keypair.sign_message(shred.signed_data()); shred.set_signature(signature); assert!(shred.verify(&keypair.pubkey())); assert_matches!(shred.sanitize(/*verify_merkle_proof:*/ true), Ok(())); @@ -1479,8 +1476,9 @@ mod test { .collect::>() ); // Assert that shreds sanitize and verify. + let pubkey = keypair.pubkey(); for shred in &shreds { - assert!(shred.verify(&keypair.pubkey())); + assert!(shred.verify(&pubkey)); assert_matches!(shred.sanitize(/*verify_merkle_proof:*/ true), Ok(())); let ShredCommonHeader { signature, @@ -1505,9 +1503,11 @@ mod test { assert_eq!(shred::layout::get_version(shred), Some(version)); assert_eq!(shred::layout::get_shred_id(shred), Some(key)); assert_eq!(shred::layout::get_merkle_root(shred), merkle_root); - let slice = shred::layout::get_signed_message_range(shred).unwrap(); - let message = shred.get(slice).unwrap(); - assert!(signature.verify(keypair.pubkey().as_ref(), message)); + let offsets = shred::layout::get_signed_data_offsets(shred).unwrap(); + let data = shred.get(offsets).unwrap(); + assert!(signature.verify(pubkey.as_ref(), data)); + let data = shred::layout::get_signed_data(shred).unwrap(); + assert!(signature.verify(pubkey.as_ref(), data.as_ref())); } // Verify common, data and coding headers. let mut num_data_shreds = 0; diff --git a/ledger/src/shred/shred_code.rs b/ledger/src/shred/shred_code.rs index 0cafc6c4ada6bd..68c4f04560d89d 100644 --- a/ledger/src/shred/shred_code.rs +++ b/ledger/src/shred/shred_code.rs @@ -39,7 +39,7 @@ impl ShredCode { dispatch!(pub(super) fn payload(&self) -> &Vec); dispatch!(pub(super) fn sanitize(&self) -> Result<(), Error>); dispatch!(pub(super) fn set_signature(&mut self, signature: Signature)); - dispatch!(pub(super) fn signed_message(&self) -> &[u8]); + dispatch!(pub(super) fn signed_data(&self) -> &[u8]); // Only for tests. dispatch!(pub(super) fn set_index(&mut self, index: u32)); diff --git a/ledger/src/shred/shred_data.rs b/ledger/src/shred/shred_data.rs index 73c8ef221645d5..7e1e1e2bb0baaa 100644 --- a/ledger/src/shred/shred_data.rs +++ b/ledger/src/shred/shred_data.rs @@ -29,7 +29,7 @@ impl ShredData { dispatch!(pub(super) fn payload(&self) -> &Vec); dispatch!(pub(super) fn sanitize(&self) -> Result<(), Error>); dispatch!(pub(super) fn set_signature(&mut self, signature: Signature)); - dispatch!(pub(super) fn signed_message(&self) -> &[u8]); + dispatch!(pub(super) fn signed_data(&self) -> &[u8]); // Only for tests. dispatch!(pub(super) fn set_index(&mut self, index: u32)); diff --git a/ledger/src/shred/traits.rs b/ledger/src/shred/traits.rs index 5ae2b955aaa45a..3cb9b01403e1ff 100644 --- a/ledger/src/shred/traits.rs +++ b/ledger/src/shred/traits.rs @@ -27,7 +27,7 @@ pub(super) trait Shred: Sized { fn erasure_shard_as_slice(&self) -> Result<&[u8], Error>; // Portion of the payload which is signed. - fn signed_message(&self) -> &[u8]; + fn signed_data(&self) -> &[u8]; // Only for tests. fn set_index(&mut self, index: u32); diff --git a/ledger/src/sigverify_shreds.rs b/ledger/src/sigverify_shreds.rs index 8f1d0e09b5c60b..b350947052592f 100644 --- a/ledger/src/sigverify_shreds.rs +++ b/ledger/src/sigverify_shreds.rs @@ -57,12 +57,11 @@ pub fn verify_shred_cpu( Some(signature) => signature, }; trace!("signature {}", signature); - let message = - match shred::layout::get_signed_message_range(shred).and_then(|slice| shred.get(slice)) { - None => return false, - Some(message) => message, - }; - signature.verify(pubkey, message) + let data = match shred::layout::get_signed_data(shred) { + None => return false, + Some(data) => data, + }; + signature.verify(pubkey, data.as_ref()) } fn verify_shreds_cpu( @@ -182,7 +181,7 @@ fn shred_gpu_offsets( let shred = shred::layout::get_shred(packet); // Signature may verify for an empty message but the packet will be // discarded during deserialization. - let msg = shred.and_then(shred::layout::get_signed_message_range); + let msg = shred.and_then(shred::layout::get_signed_data_offsets); let msg = add_offset(msg.unwrap_or_default(), offset); signature_offsets.push(sig.start as u32); msg_start_offsets.push(msg.start as u32); @@ -262,13 +261,13 @@ pub fn verify_shreds_gpu( fn sign_shred_cpu(keypair: &Keypair, packet: &mut Packet) { let sig = shred::layout::get_signature_range(); let msg = shred::layout::get_shred(packet) - .and_then(shred::layout::get_signed_message_range) + .and_then(shred::layout::get_signed_data) .unwrap(); assert!( packet.meta.size >= sig.end, "packet is not large enough for a signature" ); - let signature = keypair.sign_message(packet.data(msg).unwrap()); + let signature = keypair.sign_message(msg.as_ref()); trace!("signature {:?}", signature); packet.buffer_mut()[sig].copy_from_slice(signature.as_ref()); } @@ -415,7 +414,7 @@ mod tests { solana_sdk::{ hash, hash::Hash, - signature::{Keypair, Signer, SIGNATURE_BYTES}, + signature::{Keypair, Signer}, system_transaction, transaction::Transaction, }, @@ -690,98 +689,42 @@ mod tests { ) } - // Minimally corrupts the packet so that the signature no longer verifies. - fn corrupt_packet(rng: &mut R, packet: &mut Packet, keypairs: &HashMap) { - let coin_flip: bool = rng.gen(); - if coin_flip { - // Corrupt one byte within the signature offsets. - let k = rng.gen_range(0, SIGNATURE_BYTES); - let buffer = packet.buffer_mut(); - buffer[k] = buffer[k].wrapping_add(1u8); - } else { - // Corrupt one byte within the signed message offsets. - let shred = shred::layout::get_shred(packet).unwrap(); - let offsets: Range = shred::layout::get_signed_message_range(shred).unwrap(); - let k = rng.gen_range(offsets.start, offsets.end); - let buffer = packet.buffer_mut(); - buffer[k] = buffer[k].wrapping_add(1u8); - } - // Assert that the signature no longer verifies. - let shred = shred::layout::get_shred(packet).unwrap(); - let slot = shred::layout::get_slot(shred).unwrap(); - let signature = shred::layout::get_signature(shred).unwrap(); - if coin_flip { - let pubkey = keypairs[&slot].pubkey(); - let offsets = shred::layout::get_signed_message_range(shred).unwrap(); - assert!(!signature.verify(pubkey.as_ref(), &shred[offsets])); - } else { - // Slot may have been corrupted and no longer mapping to a keypair. - let pubkey = keypairs.get(&slot).map(Keypair::pubkey).unwrap_or_default(); - let offsets = shred::layout::get_signed_message_range(shred).unwrap_or_default(); - assert!(!signature.verify(pubkey.as_ref(), &shred[offsets])); - }; + fn make_entries(rng: &mut R, num_entries: usize) -> Vec { + let prev_hash = hash::hashv(&[&rng.gen::<[u8; 32]>()]); + let entry = make_entry(rng, &prev_hash); + std::iter::successors(Some(entry), |entry| Some(make_entry(rng, &entry.hash))) + .take(num_entries) + .collect() } - fn make_shreds(rng: &mut R) -> (Vec, HashMap) { + fn make_shreds(rng: &mut R, keypairs: &HashMap) -> Vec { let reed_solomon_cache = ReedSolomonCache::default(); - let entries: Vec<_> = { - let prev_hash = hash::hashv(&[&rng.gen::<[u8; 32]>()]); - let entry = make_entry(rng, &prev_hash); - let num_entries = rng.gen_range(64, 128); - std::iter::successors(Some(entry), |entry| Some(make_entry(rng, &entry.hash))) - .take(num_entries) - .collect() - }; - let mut keypairs = HashMap::::new(); - // Legacy shreds. - let (mut shreds, coding_shreds) = { - let slot = 169_367_809; - let parent_slot = slot - rng.gen::().max(1) as Slot; - keypairs.insert(slot, Keypair::new()); - Shredder::new( - slot, - parent_slot, - rng.gen_range(0, 0x3F), // reference_tick - rng.gen(), // version - ) - .unwrap() - .entries_to_shreds( - &keypairs[&slot], - &entries, - rng.gen(), // is_last_in_slot - rng.gen_range(0, 671), // next_shred_index - rng.gen_range(0, 781), // next_code_index - false, // merkle_variant - &reed_solomon_cache, - &mut ProcessShredsStats::default(), - ) - }; - shreds.extend(coding_shreds); - // Merkle shreds. - let (data_shreds, coding_shreds) = { - let slot = 169_376_655; - let parent_slot = slot - rng.gen::().max(1) as Slot; - keypairs.insert(slot, Keypair::new()); - Shredder::new( - slot, - parent_slot, - rng.gen_range(0, 0x3F), // reference_tick - rng.gen(), // version - ) - .unwrap() - .entries_to_shreds( - &keypairs[&slot], - &entries, - rng.gen(), // is_last_in_slot - rng.gen_range(0, 671), // next_shred_index - rng.gen_range(0, 781), // next_code_index - true, // merkle_variant - &reed_solomon_cache, - &mut ProcessShredsStats::default(), - ) - }; - shreds.extend(data_shreds); - shreds.extend(coding_shreds); + let mut shreds: Vec<_> = keypairs + .iter() + .flat_map(|(&slot, keypair)| { + let parent_slot = slot - rng.gen::().max(1) as Slot; + let num_entries = rng.gen_range(64, 128); + let (data_shreds, coding_shreds) = Shredder::new( + slot, + parent_slot, + rng.gen_range(0, 0x40), // reference_tick + rng.gen(), // version + ) + .unwrap() + .entries_to_shreds( + keypair, + &make_entries(rng, num_entries), + rng.gen(), // is_last_in_slot + rng.gen_range(0, 2671), // next_shred_index + rng.gen_range(0, 2781), // next_code_index + rng.gen(), // merkle_variant, + &reed_solomon_cache, + &mut ProcessShredsStats::default(), + ); + [data_shreds, coding_shreds] + }) + .flatten() + .collect(); shreds.shuffle(rng); // Assert that all shreds verfiy and sanitize. for shred in &shreds { @@ -794,11 +737,13 @@ mod tests { let shred = shred.payload(); let slot = shred::layout::get_slot(shred).unwrap(); let signature = shred::layout::get_signature(shred).unwrap(); - let offsets = shred::layout::get_signed_message_range(shred).unwrap(); + let offsets = shred::layout::get_signed_data_offsets(shred).unwrap(); let pubkey = keypairs[&slot].pubkey(); assert!(signature.verify(pubkey.as_ref(), &shred[offsets])); + let data = shred::layout::get_signed_data(shred).unwrap(); + assert!(signature.verify(pubkey.as_ref(), data.as_ref())); } - (shreds, keypairs) + shreds } fn make_packets(rng: &mut R, shreds: &[Shred]) -> Vec { @@ -827,7 +772,11 @@ mod tests { fn test_verify_shreds_fuzz() { let mut rng = rand::thread_rng(); let recycler_cache = RecyclerCache::default(); - let (shreds, keypairs) = make_shreds(&mut rng); + let keypairs = repeat_with(|| rng.gen_range(169_367_809, 169_906_789)) + .map(|slot| (slot, Keypair::new())) + .take(3) + .collect(); + let shreds = make_shreds(&mut rng, &keypairs); let pubkeys: HashMap = keypairs .iter() .map(|(&slot, keypair)| (slot, keypair.pubkey().to_bytes())) @@ -850,7 +799,7 @@ mod tests { .map(|packet| { let coin_flip: bool = rng.gen(); if !coin_flip { - corrupt_packet(&mut rng, packet, &keypairs); + shred::layout::corrupt_packet(&mut rng, packet, &keypairs); } u8::from(coin_flip) }) @@ -864,7 +813,13 @@ mod tests { fn test_sign_shreds_gpu() { let mut rng = rand::thread_rng(); let recycler_cache = RecyclerCache::default(); - let (shreds, _) = make_shreds(&mut rng); + let shreds = { + let keypairs = repeat_with(|| rng.gen_range(169_367_809, 169_906_789)) + .map(|slot| (slot, Keypair::new())) + .take(3) + .collect(); + make_shreds(&mut rng, &keypairs) + }; let keypair = Keypair::new(); let pubkeys: HashMap = { let pubkey = keypair.pubkey().to_bytes(); From 4442c90e17a0d59363d28cc1d5c35aa741f21a15 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Tue, 24 Jan 2023 20:30:49 +0000 Subject: [PATCH 306/465] deprecates Pubkey::new in favor of Pubkey::{,try_}from (backport #29805) (#29816) * deprecates Pubkey::new in favor of Pubkey::{,try_}from (#29805) The commit deprecates Pubkey::new which lacks type-safety and instead implements TryFrom<&[u8]> and TryFrom> for Pubkey. (cherry picked from commit 272e667cb27d40419e579b4da9cd25f0af411c31) # Conflicts: # runtime/src/accounts_db.rs # runtime/src/accounts_hash.rs # runtime/src/ancient_append_vecs.rs # runtime/src/append_vec.rs # runtime/src/bank.rs # runtime/src/storable_accounts.rs # streamer/src/tls_certificates.rs # transaction-status/src/parse_instruction.rs * resolves mergify merge conflicts * bumps solana_bpf_rust_sanity Co-authored-by: behzad nouri --- account-decoder/src/parse_token.rs | 10 ++-- cli-output/src/cli_output.rs | 8 +-- cli/src/checks.rs | 8 +-- cli/src/cli.rs | 2 +- cli/src/memo.rs | 2 +- cli/src/nonce.rs | 8 +-- cli/src/stake.rs | 10 ++-- cli/tests/nonce.rs | 2 +- cli/tests/transfer.rs | 10 ++-- client/src/blockhash_query.rs | 12 ++-- client/src/nonblocking/blockhash_query.rs | 12 ++-- faucet/src/faucet.rs | 4 +- genesis/src/stakes.rs | 2 +- gossip/src/cluster_info.rs | 10 ++-- gossip/src/crds_gossip.rs | 6 +- gossip/tests/crds_gossip.rs | 12 ++-- ledger/src/blockstore.rs | 8 +-- ledger/src/blockstore/blockstore_purge.rs | 20 +++---- ledger/src/blockstore_db.rs | 4 +- programs/bpf/tests/programs.rs | 2 +- remote-wallet/src/ledger.rs | 5 +- rpc/src/rpc.rs | 4 +- rpc/src/transaction_status_service.rs | 2 +- runtime/benches/bank.rs | 8 +-- runtime/src/accounts.rs | 58 +++++++++---------- runtime/src/accounts_db.rs | 18 +++--- runtime/src/accounts_hash.rs | 24 ++++---- runtime/src/accounts_index.rs | 8 +-- runtime/src/ancient_append_vecs.rs | 6 +- runtime/src/bank.rs | 34 +++++------ runtime/src/in_mem_accounts_index.rs | 8 +-- runtime/src/message_processor.rs | 2 +- runtime/src/pubkey_bins.rs | 12 ++-- .../src/rent_paying_accounts_by_partition.rs | 2 +- runtime/src/storable_accounts.rs | 4 +- runtime/src/system_instruction_processor.rs | 30 +++++----- sdk/program/src/fee_calculator.rs | 8 +-- sdk/program/src/pubkey.rs | 46 ++++++++++----- sdk/program/src/serialize_utils.rs | 3 +- sdk/program/src/wasm/pubkey.rs | 6 +- sdk/src/pubkey.rs | 2 +- sdk/src/signature.rs | 2 +- sdk/src/signer/keypair.rs | 2 +- sdk/src/transaction/mod.rs | 4 +- storage-proto/src/convert.rs | 22 ++++--- streamer/src/tls_certificates.rs | 13 ++--- transaction-status/src/parse_instruction.rs | 2 +- 47 files changed, 254 insertions(+), 233 deletions(-) diff --git a/account-decoder/src/parse_token.rs b/account-decoder/src/parse_token.rs index b6b504e02fd6aa..862fbba12edaa4 100644 --- a/account-decoder/src/parse_token.rs +++ b/account-decoder/src/parse_token.rs @@ -282,11 +282,9 @@ pub struct UiMultisig { } pub fn get_token_account_mint(data: &[u8]) -> Option { - if Account::valid_account_data(data) { - Some(Pubkey::new(&data[0..32])) - } else { - None - } + Account::valid_account_data(data) + .then(|| Pubkey::try_from(data.get(..32)?).ok()) + .flatten() } #[cfg(test)] @@ -402,7 +400,7 @@ mod test { account.state = AccountState::Initialized; Account::pack(account, &mut account_data).unwrap(); - let expected_mint_pubkey = Pubkey::new(&[2; 32]); + let expected_mint_pubkey = Pubkey::from([2; 32]); assert_eq!( get_token_account_mint(&account_data), Some(expected_mint_pubkey) diff --git a/cli-output/src/cli_output.rs b/cli-output/src/cli_output.rs index 645b7b66fbbb40..5d18d51d81dd10 100644 --- a/cli-output/src/cli_output.rs +++ b/cli-output/src/cli_output.rs @@ -2862,10 +2862,10 @@ mod tests { } let present: Box = Box::new(keypair_from_seed(&[2u8; 32]).unwrap()); - let absent: Box = Box::new(NullSigner::new(&Pubkey::new(&[3u8; 32]))); - let bad: Box = Box::new(BadSigner::new(Pubkey::new(&[4u8; 32]))); - let to = Pubkey::new(&[5u8; 32]); - let nonce = Pubkey::new(&[6u8; 32]); + let absent: Box = Box::new(NullSigner::new(&Pubkey::from([3u8; 32]))); + let bad: Box = Box::new(BadSigner::new(Pubkey::from([4u8; 32]))); + let to = Pubkey::from([5u8; 32]); + let nonce = Pubkey::from([6u8; 32]); let from = present.pubkey(); let fee_payer = absent.pubkey(); let nonce_auth = bad.pubkey(); diff --git a/cli/src/checks.rs b/cli/src/checks.rs index dea87e5c4a13db..5e75d250b07805 100644 --- a/cli/src/checks.rs +++ b/cli/src/checks.rs @@ -187,8 +187,8 @@ mod tests { }); let pubkey = solana_sdk::pubkey::new_rand(); - let pubkey0 = Pubkey::new(&[0; 32]); - let pubkey1 = Pubkey::new(&[1; 32]); + let pubkey0 = Pubkey::from([0; 32]); + let pubkey1 = Pubkey::from([1; 32]); let ix0 = system_instruction::transfer(&pubkey0, &pubkey1, 1); let message0 = Message::new(&[ix0], Some(&pubkey0)); @@ -292,8 +292,8 @@ mod tests { assert_eq!(get_fee_for_messages(&rpc_client, &[]).unwrap(), 0); // One message w/ one signature, a fee. - let pubkey0 = Pubkey::new(&[0; 32]); - let pubkey1 = Pubkey::new(&[1; 32]); + let pubkey0 = Pubkey::from([0; 32]); + let pubkey1 = Pubkey::from([1; 32]); let ix0 = system_instruction::transfer(&pubkey0, &pubkey1, 1); let message0 = Message::new(&[ix0], Some(&pubkey0)); assert_eq!(get_fee_for_messages(&rpc_client, &[&message0]).unwrap(), 1); diff --git a/cli/src/cli.rs b/cli/src/cli.rs index d202a2a69f66c8..8314cdd35d2545 100644 --- a/cli/src/cli.rs +++ b/cli/src/cli.rs @@ -2617,7 +2617,7 @@ mod tests { ); //Test Transfer Subcommand, with nonce - let nonce_address = Pubkey::new(&[1u8; 32]); + let nonce_address = Pubkey::from([1u8; 32]); let nonce_address_string = nonce_address.to_string(); let nonce_authority = keypair_from_seed(&[2u8; 32]).unwrap(); let nonce_authority_file = make_tmp_path("nonce_authority_file"); diff --git a/cli/src/memo.rs b/cli/src/memo.rs index 1043415357b338..53a126a450dad2 100644 --- a/cli/src/memo.rs +++ b/cli/src/memo.rs @@ -12,7 +12,7 @@ impl WithMemo for Vec { if let Some(memo) = &memo { let memo = memo.as_ref(); let memo_ix = Instruction { - program_id: Pubkey::new(&id().to_bytes()), + program_id: Pubkey::from(id().to_bytes()), accounts: vec![], data: memo.as_bytes().to_vec(), }; diff --git a/cli/src/nonce.rs b/cli/src/nonce.rs index 1d7324bf30ef36..efe04e242a6b4c 100644 --- a/cli/src/nonce.rs +++ b/cli/src/nonce.rs @@ -1083,7 +1083,7 @@ mod tests { let valid = Account::new_data(1, &data, &system_program::ID); assert!(check_nonce_account(&valid.unwrap(), &nonce_pubkey, &blockhash).is_ok()); - let invalid_owner = Account::new_data(1, &data, &Pubkey::new(&[1u8; 32])); + let invalid_owner = Account::new_data(1, &data, &Pubkey::from([1u8; 32])); if let CliError::InvalidNonce(err) = check_nonce_account(&invalid_owner.unwrap(), &nonce_pubkey, &blockhash).unwrap_err() { @@ -1155,7 +1155,7 @@ mod tests { Err(Error::UnexpectedDataSize), ); - let other_program = Pubkey::new(&[1u8; 32]); + let other_program = Pubkey::from([1u8; 32]); let other_account_no_data = Account::new(1, 0, &other_program); assert_eq!( account_identity_ok(&other_account_no_data), @@ -1169,7 +1169,7 @@ mod tests { assert_eq!(state_from_account(&nonce_account), Ok(State::Uninitialized)); let durable_nonce = DurableNonce::from_blockhash(&Hash::new(&[42u8; 32])); - let data = nonce::state::Data::new(Pubkey::new(&[1u8; 32]), durable_nonce, 42); + let data = nonce::state::Data::new(Pubkey::from([1u8; 32]), durable_nonce, 42); nonce_account .set_state(&Versions::new(State::Initialized(data.clone()))) .unwrap(); @@ -1199,7 +1199,7 @@ mod tests { ); let durable_nonce = DurableNonce::from_blockhash(&Hash::new(&[42u8; 32])); - let data = nonce::state::Data::new(Pubkey::new(&[1u8; 32]), durable_nonce, 42); + let data = nonce::state::Data::new(Pubkey::from([1u8; 32]), durable_nonce, 42); nonce_account .set_state(&Versions::new(State::Initialized(data.clone()))) .unwrap(); diff --git a/cli/src/stake.rs b/cli/src/stake.rs index 03425f474ccc5f..22f23b81a706d2 100644 --- a/cli/src/stake.rs +++ b/cli/src/stake.rs @@ -2707,9 +2707,9 @@ mod tests { // stake-authorize subcommand let stake_account_string = stake_account_pubkey.to_string(); - let new_stake_authority = Pubkey::new(&[1u8; 32]); + let new_stake_authority = Pubkey::from([1u8; 32]); let new_stake_string = new_stake_authority.to_string(); - let new_withdraw_authority = Pubkey::new(&[2u8; 32]); + let new_withdraw_authority = Pubkey::from([2u8; 32]); let new_withdraw_string = new_withdraw_authority.to_string(); let test_stake_authorize = test_commands.clone().get_matches_from(vec![ "test", @@ -3558,7 +3558,7 @@ mod tests { let pubkey2 = keypair2.pubkey(); let sig2 = keypair.sign_message(&[0u8]); let signer2 = format!("{}={}", keypair2.pubkey(), sig2); - let nonce_account = Pubkey::new(&[1u8; 32]); + let nonce_account = Pubkey::from([1u8; 32]); let test_authorize = test_commands.clone().get_matches_from(vec![ "test", "stake-authorize", @@ -3935,7 +3935,7 @@ mod tests { assert!(parse_command(&test_create_stake_account, &default_signer, &mut None).is_err()); // CreateStakeAccount offline and nonce - let nonce_account = Pubkey::new(&[1u8; 32]); + let nonce_account = Pubkey::from([1u8; 32]); let nonce_account_string = nonce_account.to_string(); let offline = keypair_from_seed(&[2u8; 32]).unwrap(); let offline_pubkey = offline.pubkey(); @@ -4850,7 +4850,7 @@ mod tests { ); // Split stake offline nonced submission - let nonce_account = Pubkey::new(&[1u8; 32]); + let nonce_account = Pubkey::from([1u8; 32]); let nonce_account_string = nonce_account.to_string(); let nonce_auth = keypair_from_seed(&[2u8; 32]).unwrap(); let nonce_auth_pubkey = nonce_auth.pubkey(); diff --git a/cli/tests/nonce.rs b/cli/tests/nonce.rs index a5c36197fa1f25..8c66fc52884f9e 100644 --- a/cli/tests/nonce.rs +++ b/cli/tests/nonce.rs @@ -259,7 +259,7 @@ fn test_create_account_with_seed() { let offline_nonce_authority_signer = keypair_from_seed(&[1u8; 32]).unwrap(); let online_nonce_creator_signer = keypair_from_seed(&[2u8; 32]).unwrap(); - let to_address = Pubkey::new(&[3u8; 32]); + let to_address = Pubkey::from([3u8; 32]); // Setup accounts let rpc_client = diff --git a/cli/tests/transfer.rs b/cli/tests/transfer.rs index 33abc5d4e3d937..546792ae7405de 100644 --- a/cli/tests/transfer.rs +++ b/cli/tests/transfer.rs @@ -53,7 +53,7 @@ fn test_transfer() { config.signers = vec![&default_signer]; let sender_pubkey = config.signers[0].pubkey(); - let recipient_pubkey = Pubkey::new(&[1u8; 32]); + let recipient_pubkey = Pubkey::from([1u8; 32]); request_and_confirm_airdrop(&rpc_client, &config, &sender_pubkey, sol_to_lamports(5.0)) .unwrap(); @@ -339,7 +339,7 @@ fn test_transfer_multisession_signing() { SocketAddrSpace::Unspecified, ); - let to_pubkey = Pubkey::new(&[1u8; 32]); + let to_pubkey = Pubkey::from([1u8; 32]); let offline_from_signer = keypair_from_seed(&[2u8; 32]).unwrap(); let offline_fee_payer_signer = keypair_from_seed(&[3u8; 32]).unwrap(); let from_null_signer = NullSigner::new(&offline_from_signer.pubkey()); @@ -501,7 +501,7 @@ fn test_transfer_all() { config.signers = vec![&default_signer]; let sender_pubkey = config.signers[0].pubkey(); - let recipient_pubkey = Pubkey::new(&[1u8; 32]); + let recipient_pubkey = Pubkey::from([1u8; 32]); request_and_confirm_airdrop(&rpc_client, &config, &sender_pubkey, 500_000).unwrap(); check_balance!(500_000, &rpc_client, &sender_pubkey); @@ -555,7 +555,7 @@ fn test_transfer_unfunded_recipient() { config.signers = vec![&default_signer]; let sender_pubkey = config.signers[0].pubkey(); - let recipient_pubkey = Pubkey::new(&[1u8; 32]); + let recipient_pubkey = Pubkey::from([1u8; 32]); request_and_confirm_airdrop(&rpc_client, &config, &sender_pubkey, 50_000).unwrap(); check_balance!(50_000, &rpc_client, &sender_pubkey); @@ -610,7 +610,7 @@ fn test_transfer_with_seed() { config.signers = vec![&default_signer]; let sender_pubkey = config.signers[0].pubkey(); - let recipient_pubkey = Pubkey::new(&[1u8; 32]); + let recipient_pubkey = Pubkey::from([1u8; 32]); let derived_address_seed = "seed".to_string(); let derived_address_program_id = stake::program::id(); let derived_address = Pubkey::create_with_seed( diff --git a/client/src/blockhash_query.rs b/client/src/blockhash_query.rs index 1b630351c94471..98288acbf932c7 100644 --- a/client/src/blockhash_query.rs +++ b/client/src/blockhash_query.rs @@ -205,7 +205,7 @@ mod tests { #[test] fn test_blockhash_query_new_ok() { let blockhash = hash(&[1u8]); - let nonce_pubkey = Pubkey::new(&[1u8; 32]); + let nonce_pubkey = Pubkey::from([1u8; 32]); assert_eq!( BlockhashQuery::new(Some(blockhash), true, None), @@ -246,7 +246,7 @@ mod tests { #[test] #[should_panic] fn test_blockhash_query_new_nonce_fail() { - let nonce_pubkey = Pubkey::new(&[1u8; 32]); + let nonce_pubkey = Pubkey::from([1u8; 32]); BlockhashQuery::new(None, true, Some(nonce_pubkey)); } @@ -287,7 +287,7 @@ mod tests { BlockhashQuery::All(blockhash_query::Source::Cluster), ); - let nonce_pubkey = Pubkey::new(&[1u8; 32]); + let nonce_pubkey = Pubkey::from([1u8; 32]); let nonce_string = nonce_pubkey.to_string(); let matches = test_commands.clone().get_matches_from(vec![ "blockhash_query_test", @@ -341,7 +341,7 @@ mod tests { // We can really only hit this case if the arg requirements // are broken, so unset the requires() to recreate that condition .arg(sign_only_arg().requires("")); - let nonce_pubkey = Pubkey::new(&[1u8; 32]); + let nonce_pubkey = Pubkey::from([1u8; 32]); let nonce_string = nonce_pubkey.to_string(); let matches = test_commands.clone().get_matches_from(vec![ @@ -420,7 +420,7 @@ mod tests { let nonce_blockhash = *durable_nonce.as_hash(); let nonce_fee_calc = FeeCalculator::new(4242); let data = nonce::state::Data { - authority: Pubkey::new(&[3u8; 32]), + authority: Pubkey::from([3u8; 32]), durable_nonce, fee_calculator: nonce_fee_calc, }; @@ -431,7 +431,7 @@ mod tests { &system_program::id(), ) .unwrap(); - let nonce_pubkey = Pubkey::new(&[4u8; 32]); + let nonce_pubkey = Pubkey::from([4u8; 32]); let rpc_nonce_account = UiAccount::encode( &nonce_pubkey, &nonce_account, diff --git a/client/src/nonblocking/blockhash_query.rs b/client/src/nonblocking/blockhash_query.rs index 28943ad6a886f1..922ff15a19198a 100644 --- a/client/src/nonblocking/blockhash_query.rs +++ b/client/src/nonblocking/blockhash_query.rs @@ -136,7 +136,7 @@ mod tests { #[test] fn test_blockhash_query_new_ok() { let blockhash = hash(&[1u8]); - let nonce_pubkey = Pubkey::new(&[1u8; 32]); + let nonce_pubkey = Pubkey::from([1u8; 32]); assert_eq!( BlockhashQuery::new(Some(blockhash), true, None), @@ -177,7 +177,7 @@ mod tests { #[test] #[should_panic] fn test_blockhash_query_new_nonce_fail() { - let nonce_pubkey = Pubkey::new(&[1u8; 32]); + let nonce_pubkey = Pubkey::from([1u8; 32]); BlockhashQuery::new(None, true, Some(nonce_pubkey)); } @@ -218,7 +218,7 @@ mod tests { BlockhashQuery::Rpc(blockhash_query::Source::Cluster), ); - let nonce_pubkey = Pubkey::new(&[1u8; 32]); + let nonce_pubkey = Pubkey::from([1u8; 32]); let nonce_string = nonce_pubkey.to_string(); let matches = test_commands.clone().get_matches_from(vec![ "blockhash_query_test", @@ -272,7 +272,7 @@ mod tests { // We can really only hit this case if the arg requirements // are broken, so unset the requires() to recreate that condition .arg(sign_only_arg().requires("")); - let nonce_pubkey = Pubkey::new(&[1u8; 32]); + let nonce_pubkey = Pubkey::from([1u8; 32]); let nonce_string = nonce_pubkey.to_string(); let matches = test_commands.clone().get_matches_from(vec![ @@ -364,7 +364,7 @@ mod tests { let nonce_blockhash = *durable_nonce.as_hash(); let nonce_fee_calc = FeeCalculator::new(4242); let data = nonce::state::Data { - authority: Pubkey::new(&[3u8; 32]), + authority: Pubkey::from([3u8; 32]), durable_nonce, fee_calculator: nonce_fee_calc, }; @@ -375,7 +375,7 @@ mod tests { &system_program::id(), ) .unwrap(); - let nonce_pubkey = Pubkey::new(&[4u8; 32]); + let nonce_pubkey = Pubkey::from([4u8; 32]); let rpc_nonce_account = UiAccount::encode( &nonce_pubkey, &nonce_account, diff --git a/faucet/src/faucet.rs b/faucet/src/faucet.rs index d440d34ffffdcb..d74acec6b8cf4e 100644 --- a/faucet/src/faucet.rs +++ b/faucet/src/faucet.rs @@ -203,7 +203,7 @@ impl Faucet { ) ); let memo_instruction = Instruction { - program_id: Pubkey::new(&spl_memo::id().to_bytes()), + program_id: Pubkey::from(spl_memo::id().to_bytes()), accounts: vec![], data: memo.as_bytes().to_vec(), }; @@ -634,7 +634,7 @@ mod tests { assert_eq!(tx.signatures.len(), 1); assert_eq!( message.account_keys, - vec![mint_pubkey, Pubkey::new(&spl_memo::id().to_bytes())] + vec![mint_pubkey, Pubkey::from(spl_memo::id().to_bytes())] ); assert_eq!(message.recent_blockhash, blockhash); diff --git a/genesis/src/stakes.rs b/genesis/src/stakes.rs index 4fbb6d34d68daf..c48a3ec86326d5 100644 --- a/genesis/src/stakes.rs +++ b/genesis/src/stakes.rs @@ -216,7 +216,7 @@ mod tests { // print( // "\n\"{}\", // {:?}", // hex, - // Pubkey::new(&hex::decode(hex).unwrap()) + // Pubkey::try_from(&hex::decode(hex).unwrap()).unwrap() // ); // }); // println(); diff --git a/gossip/src/cluster_info.rs b/gossip/src/cluster_info.rs index 5fda011c69223e..a7ca2793dac1ac 100644 --- a/gossip/src/cluster_info.rs +++ b/gossip/src/cluster_info.rs @@ -4191,7 +4191,7 @@ RPC Enabled Nodes: 1"#; #[test] fn test_tvu_peers_and_stakes() { - let d = ContactInfo::new_localhost(&Pubkey::new(&[0; 32]), timestamp()); + let d = ContactInfo::new_localhost(&Pubkey::from([0; 32]), timestamp()); let cluster_info = ClusterInfo::new( d.clone(), Arc::new(Keypair::new()), @@ -4200,12 +4200,12 @@ RPC Enabled Nodes: 1"#; let mut stakes = HashMap::new(); // no stake - let id = Pubkey::new(&[1u8; 32]); + let id = Pubkey::from([1u8; 32]); let contact_info = ContactInfo::new_localhost(&id, timestamp()); cluster_info.insert_info(contact_info); // normal - let id2 = Pubkey::new(&[2u8; 32]); + let id2 = Pubkey::from([2u8; 32]); let mut contact_info = ContactInfo::new_localhost(&id2, timestamp()); cluster_info.insert_info(contact_info.clone()); stakes.insert(id2, 10); @@ -4215,14 +4215,14 @@ RPC Enabled Nodes: 1"#; cluster_info.insert_info(contact_info); // no tvu - let id3 = Pubkey::new(&[3u8; 32]); + let id3 = Pubkey::from([3u8; 32]); let mut contact_info = ContactInfo::new_localhost(&id3, timestamp()); contact_info.tvu = "0.0.0.0:0".parse().unwrap(); cluster_info.insert_info(contact_info); stakes.insert(id3, 10); // normal but with different shred version - let id4 = Pubkey::new(&[4u8; 32]); + let id4 = Pubkey::from([4u8; 32]); let mut contact_info = ContactInfo::new_localhost(&id4, timestamp()); contact_info.shred_version = 1; assert_ne!(contact_info.shred_version, d.shred_version); diff --git a/gossip/src/crds_gossip.rs b/gossip/src/crds_gossip.rs index 4a2fcf8536fc43..f3620c83410b90 100644 --- a/gossip/src/crds_gossip.rs +++ b/gossip/src/crds_gossip.rs @@ -388,8 +388,8 @@ mod test { let crds_gossip = CrdsGossip::default(); let keypair = Keypair::new(); let id = keypair.pubkey(); - let ci = ContactInfo::new_localhost(&Pubkey::new(&[1; 32]), 0); - let prune_pubkey = Pubkey::new(&[2; 32]); + let ci = ContactInfo::new_localhost(&Pubkey::from([1; 32]), 0); + let prune_pubkey = Pubkey::from([2; 32]); crds_gossip .crds .write() @@ -420,7 +420,7 @@ mod test { let mut res = crds_gossip.process_prune_msg( &id, &ci.id, - &Pubkey::new(hash(&[1; 32]).as_ref()), + &Pubkey::from(hash(&[1; 32]).to_bytes()), &[prune_pubkey], now, now, diff --git a/gossip/tests/crds_gossip.rs b/gossip/tests/crds_gossip.rs index e37b44d868a895..41957285fe2ca2 100644 --- a/gossip/tests/crds_gossip.rs +++ b/gossip/tests/crds_gossip.rs @@ -723,8 +723,8 @@ fn test_prune_errors() { let crds_gossip = CrdsGossip::default(); let keypair = Keypair::new(); let id = keypair.pubkey(); - let ci = ContactInfo::new_localhost(&Pubkey::new(&[1; 32]), 0); - let prune_pubkey = Pubkey::new(&[2; 32]); + let ci = ContactInfo::new_localhost(&Pubkey::from([1; 32]), 0); + let prune_pubkey = Pubkey::from([2; 32]); crds_gossip .crds .write() @@ -748,10 +748,10 @@ fn test_prune_errors() { let now = timestamp(); //incorrect dest let mut res = crds_gossip.process_prune_msg( - &id, // self_pubkey - &ci.id, // peer - &Pubkey::new(hash(&[1; 32]).as_ref()), // destination - &[prune_pubkey], // origins + &id, // self_pubkey + &ci.id, // peer + &Pubkey::from(hash(&[1; 32]).to_bytes()), // destination + &[prune_pubkey], // origins now, now, ); diff --git a/ledger/src/blockstore.rs b/ledger/src/blockstore.rs index 63e494863b60a1..ef5aad1eb35139 100644 --- a/ledger/src/blockstore.rs +++ b/ledger/src/blockstore.rs @@ -6966,8 +6966,8 @@ pub mod tests { .write_transaction_status( slot0, Signature::new(&random_bytes), - vec![&Pubkey::new(&random_bytes[0..32])], - vec![&Pubkey::new(&random_bytes[32..])], + vec![&Pubkey::try_from(&random_bytes[..32]).unwrap()], + vec![&Pubkey::try_from(&random_bytes[32..]).unwrap()], TransactionStatusMeta::default(), ) .unwrap(); @@ -7032,8 +7032,8 @@ pub mod tests { .write_transaction_status( slot1, Signature::new(&random_bytes), - vec![&Pubkey::new(&random_bytes[0..32])], - vec![&Pubkey::new(&random_bytes[32..])], + vec![&Pubkey::try_from(&random_bytes[..32]).unwrap()], + vec![&Pubkey::try_from(&random_bytes[32..]).unwrap()], TransactionStatusMeta::default(), ) .unwrap(); diff --git a/ledger/src/blockstore/blockstore_purge.rs b/ledger/src/blockstore/blockstore_purge.rs index 734debbded2a66..3c492e7f17cc3f 100644 --- a/ledger/src/blockstore/blockstore_purge.rs +++ b/ledger/src/blockstore/blockstore_purge.rs @@ -578,8 +578,8 @@ pub mod tests { .write_transaction_status( x, Signature::new(&random_bytes), - vec![&Pubkey::new(&random_bytes[0..32])], - vec![&Pubkey::new(&random_bytes[32..])], + vec![&Pubkey::try_from(&random_bytes[..32]).unwrap()], + vec![&Pubkey::try_from(&random_bytes[32..]).unwrap()], TransactionStatusMeta::default(), ) .unwrap(); @@ -593,8 +593,8 @@ pub mod tests { .write_transaction_status( x, Signature::new(&random_bytes), - vec![&Pubkey::new(&random_bytes[0..32])], - vec![&Pubkey::new(&random_bytes[32..])], + vec![&Pubkey::try_from(&random_bytes[..32]).unwrap()], + vec![&Pubkey::try_from(&random_bytes[32..]).unwrap()], TransactionStatusMeta::default(), ) .unwrap(); @@ -628,8 +628,8 @@ pub mod tests { .write_transaction_status( slot, Signature::new(&random_bytes), - vec![&Pubkey::new(&random_bytes[0..32])], - vec![&Pubkey::new(&random_bytes[32..])], + vec![&Pubkey::try_from(&random_bytes[..32]).unwrap()], + vec![&Pubkey::try_from(&random_bytes[32..]).unwrap()], TransactionStatusMeta::default(), ) .unwrap(); @@ -828,8 +828,8 @@ pub mod tests { .write_transaction_status( x, signature, - vec![&Pubkey::new(&random_bytes[0..32])], - vec![&Pubkey::new(&random_bytes[32..])], + vec![&Pubkey::try_from(&random_bytes[..32]).unwrap()], + vec![&Pubkey::try_from(&random_bytes[32..]).unwrap()], TransactionStatusMeta::default(), ) .unwrap(); @@ -871,8 +871,8 @@ pub mod tests { .write_transaction_status( x, signature, - vec![&Pubkey::new(&random_bytes[0..32])], - vec![&Pubkey::new(&random_bytes[32..])], + vec![&Pubkey::try_from(&random_bytes[..32]).unwrap()], + vec![&Pubkey::try_from(&random_bytes[32..]).unwrap()], TransactionStatusMeta::default(), ) .unwrap(); diff --git a/ledger/src/blockstore_db.rs b/ledger/src/blockstore_db.rs index ba44026f0dac4a..5fb34ad1bddf11 100644 --- a/ledger/src/blockstore_db.rs +++ b/ledger/src/blockstore_db.rs @@ -651,7 +651,7 @@ impl Column for columns::AddressSignatures { fn index(key: &[u8]) -> (u64, Pubkey, Slot, Signature) { let index = BigEndian::read_u64(&key[0..8]); - let pubkey = Pubkey::new(&key[8..40]); + let pubkey = Pubkey::try_from(&key[8..40]).unwrap(); let slot = BigEndian::read_u64(&key[40..48]); let signature = Signature::new(&key[48..112]); (index, pubkey, slot, signature) @@ -782,7 +782,7 @@ impl Column for columns::ProgramCosts { } fn index(key: &[u8]) -> Self::Index { - Pubkey::new(&key[0..32]) + Pubkey::try_from(&key[..32]).unwrap() } fn primary_index(_index: Self::Index) -> u64 { diff --git a/programs/bpf/tests/programs.rs b/programs/bpf/tests/programs.rs index 8dfcbb0efe56fb..e4a2b41e4cd090 100644 --- a/programs/bpf/tests/programs.rs +++ b/programs/bpf/tests/programs.rs @@ -1524,7 +1524,7 @@ fn assert_instruction_count() { ("solana_bpf_rust_noop", 366), ("solana_bpf_rust_param_passing", 146), ("solana_bpf_rust_rand", 469), - ("solana_bpf_rust_sanity", 52054), + ("solana_bpf_rust_sanity", 52232), ("solana_bpf_rust_secp256k1_recover", 91195), ("solana_bpf_rust_sha", 24081), ]); diff --git a/remote-wallet/src/ledger.rs b/remote-wallet/src/ledger.rs index ec929257acc0bf..ba10554dce7a79 100644 --- a/remote-wallet/src/ledger.rs +++ b/remote-wallet/src/ledger.rs @@ -419,10 +419,7 @@ impl RemoteWallet for LedgerWallet { 0, &derivation_path, )?; - if key.len() != 32 { - return Err(RemoteWalletError::Protocol("Key packet size mismatch")); - } - Ok(Pubkey::new(&key)) + Pubkey::try_from(key).map_err(|_| RemoteWalletError::Protocol("Key packet size mismatch")) } fn sign_message( diff --git a/rpc/src/rpc.rs b/rpc/src/rpc.rs index cafe347f884c35..bb527349677b74 100644 --- a/rpc/src/rpc.rs +++ b/rpc/src/rpc.rs @@ -2382,7 +2382,7 @@ fn get_spl_token_owner_filter(program_id: &Pubkey, filters: &[RpcFilterType]) -> .. }) if *offset == SPL_TOKEN_ACCOUNT_OWNER_OFFSET => { if bytes.len() == PUBKEY_BYTES { - owner_key = Some(Pubkey::new(bytes)); + owner_key = Pubkey::try_from(&bytes[..]).ok(); } else { incorrect_owner_len = Some(bytes.len()); } @@ -2438,7 +2438,7 @@ fn get_spl_token_mint_filter(program_id: &Pubkey, filters: &[RpcFilterType]) -> .. }) if *offset == SPL_TOKEN_ACCOUNT_MINT_OFFSET => { if bytes.len() == PUBKEY_BYTES { - mint = Some(Pubkey::new(bytes)); + mint = Pubkey::try_from(&bytes[..]).ok(); } else { incorrect_mint_len = Some(bytes.len()); } diff --git a/rpc/src/transaction_status_service.rs b/rpc/src/transaction_status_service.rs index d0a3fde0cb2ec0..abdb3e6fc14783 100644 --- a/rpc/src/transaction_status_service.rs +++ b/rpc/src/transaction_status_service.rs @@ -351,7 +351,7 @@ pub(crate) mod tests { let mut nonce_account = nonce_account::create_account(1).into_inner(); let durable_nonce = DurableNonce::from_blockhash(&Hash::new(&[42u8; 32])); - let data = nonce::state::Data::new(Pubkey::new(&[1u8; 32]), durable_nonce, 42); + let data = nonce::state::Data::new(Pubkey::from([1u8; 32]), durable_nonce, 42); nonce_account .set_state(&nonce::state::Versions::new(nonce::State::Initialized( data, diff --git a/runtime/benches/bank.rs b/runtime/benches/bank.rs index 139cd15692414a..26441f566587cf 100644 --- a/runtime/benches/bank.rs +++ b/runtime/benches/bank.rs @@ -47,7 +47,7 @@ pub fn create_builtin_transactions( bank_client: &BankClient, mint_keypair: &Keypair, ) -> Vec { - let program_id = Pubkey::new(&BUILTIN_PROGRAM_ID); + let program_id = Pubkey::from(BUILTIN_PROGRAM_ID); (0..4096) .map(|_| { @@ -69,7 +69,7 @@ pub fn create_native_loader_transactions( bank_client: &BankClient, mint_keypair: &Keypair, ) -> Vec { - let program_id = Pubkey::new(&NOOP_PROGRAM_ID); + let program_id = Pubkey::from(NOOP_PROGRAM_ID); (0..4096) .map(|_| { @@ -137,10 +137,10 @@ fn do_bench_transactions( let mut bank = Bank::new_from_parent(&Arc::new(bank), &Pubkey::default(), 1); bank.add_builtin( "builtin_program", - &Pubkey::new(&BUILTIN_PROGRAM_ID), + &Pubkey::from(BUILTIN_PROGRAM_ID), process_instruction, ); - bank.add_builtin_account("solana_noop_program", &Pubkey::new(&NOOP_PROGRAM_ID), false); + bank.add_builtin_account("solana_noop_program", &Pubkey::from(NOOP_PROGRAM_ID), false); let bank = Arc::new(bank); let bank_client = BankClient::new_shared(&bank); let transactions = create_transactions(&bank_client, &mint_keypair); diff --git a/runtime/src/accounts.rs b/runtime/src/accounts.rs index 68b9062923ce9f..5d8eea943274d0 100644 --- a/runtime/src/accounts.rs +++ b/runtime/src/accounts.rs @@ -1558,7 +1558,7 @@ mod tests { #[test] fn test_hold_range_in_memory() { let accts = Accounts::default_for_tests(); - let range = Pubkey::new(&[0; 32])..=Pubkey::new(&[0xff; 32]); + let range = Pubkey::from([0; 32])..=Pubkey::from([0xff; 32]); accts.hold_range_in_memory(&range, true, &test_thread_pool()); accts.hold_range_in_memory(&range, false, &test_thread_pool()); accts.hold_range_in_memory(&range, true, &test_thread_pool()); @@ -1570,7 +1570,7 @@ mod tests { #[test] fn test_hold_range_in_memory2() { let accts = Accounts::default_for_tests(); - let range = Pubkey::new(&[0; 32])..=Pubkey::new(&[0xff; 32]); + let range = Pubkey::from([0; 32])..=Pubkey::from([0xff; 32]); let idx = &accts.accounts_db.accounts_index; let bins = idx.account_maps.len(); // use bins * 2 to get the first half of the range within bin 0 @@ -1643,7 +1643,7 @@ mod tests { let keypair = Keypair::new(); let key0 = keypair.pubkey(); - let key1 = Pubkey::new(&[5u8; 32]); + let key1 = Pubkey::from([5u8; 32]); let account = AccountSharedData::new(1, 0, &Pubkey::default()); accounts.push((key0, account)); @@ -1829,7 +1829,7 @@ mod tests { let keypair = Keypair::new(); let key0 = keypair.pubkey(); - let key1 = Pubkey::new(&[5u8; 32]); + let key1 = Pubkey::from([5u8; 32]); let mut account = AccountSharedData::new(1, 0, &Pubkey::default()); account.set_rent_epoch(1); @@ -1870,12 +1870,12 @@ mod tests { let keypair = Keypair::new(); let key0 = keypair.pubkey(); - let key1 = Pubkey::new(&[5u8; 32]); - let key2 = Pubkey::new(&[6u8; 32]); - let key3 = Pubkey::new(&[7u8; 32]); - let key4 = Pubkey::new(&[8u8; 32]); - let key5 = Pubkey::new(&[9u8; 32]); - let key6 = Pubkey::new(&[10u8; 32]); + let key1 = Pubkey::from([5u8; 32]); + let key2 = Pubkey::from([6u8; 32]); + let key3 = Pubkey::from([7u8; 32]); + let key4 = Pubkey::from([8u8; 32]); + let key5 = Pubkey::from([9u8; 32]); + let key6 = Pubkey::from([10u8; 32]); let account = AccountSharedData::new(1, 0, &Pubkey::default()); accounts.push((key0, account)); @@ -1936,7 +1936,7 @@ mod tests { let keypair = Keypair::new(); let key0 = keypair.pubkey(); - let key1 = Pubkey::new(&[5u8; 32]); + let key1 = Pubkey::from([5u8; 32]); let account = AccountSharedData::new(1, 0, &Pubkey::default()); accounts.push((key0, account)); @@ -1971,7 +1971,7 @@ mod tests { let keypair = Keypair::new(); let key0 = keypair.pubkey(); - let key1 = Pubkey::new(&[5u8; 32]); + let key1 = Pubkey::from([5u8; 32]); let account = AccountSharedData::new(1, 0, &Pubkey::default()); accounts.push((key0, account)); @@ -2005,8 +2005,8 @@ mod tests { let keypair = Keypair::new(); let key0 = keypair.pubkey(); - let key1 = Pubkey::new(&[5u8; 32]); - let key2 = Pubkey::new(&[6u8; 32]); + let key1 = Pubkey::from([5u8; 32]); + let key2 = Pubkey::from([6u8; 32]); let mut account = AccountSharedData::new(1, 0, &Pubkey::default()); account.set_rent_epoch(1); @@ -2220,20 +2220,20 @@ mod tests { // Load accounts owned by various programs into AccountsDb let pubkey0 = solana_sdk::pubkey::new_rand(); - let account0 = AccountSharedData::new(1, 0, &Pubkey::new(&[2; 32])); + let account0 = AccountSharedData::new(1, 0, &Pubkey::from([2; 32])); accounts.store_slow_uncached(0, &pubkey0, &account0); let pubkey1 = solana_sdk::pubkey::new_rand(); - let account1 = AccountSharedData::new(1, 0, &Pubkey::new(&[2; 32])); + let account1 = AccountSharedData::new(1, 0, &Pubkey::from([2; 32])); accounts.store_slow_uncached(0, &pubkey1, &account1); let pubkey2 = solana_sdk::pubkey::new_rand(); - let account2 = AccountSharedData::new(1, 0, &Pubkey::new(&[3; 32])); + let account2 = AccountSharedData::new(1, 0, &Pubkey::from([3; 32])); accounts.store_slow_uncached(0, &pubkey2, &account2); - let loaded = accounts.load_by_program_slot(0, Some(&Pubkey::new(&[2; 32]))); + let loaded = accounts.load_by_program_slot(0, Some(&Pubkey::from([2; 32]))); assert_eq!(loaded.len(), 2); - let loaded = accounts.load_by_program_slot(0, Some(&Pubkey::new(&[3; 32]))); + let loaded = accounts.load_by_program_slot(0, Some(&Pubkey::from([3; 32]))); assert_eq!(loaded, vec![(pubkey2, account2)]); - let loaded = accounts.load_by_program_slot(0, Some(&Pubkey::new(&[4; 32]))); + let loaded = accounts.load_by_program_slot(0, Some(&Pubkey::from([4; 32]))); assert_eq!(loaded, vec![]); } @@ -2244,8 +2244,8 @@ mod tests { let keypair = Keypair::new(); let key0 = keypair.pubkey(); - let key1 = Pubkey::new(&[5u8; 32]); - let key2 = Pubkey::new(&[6u8; 32]); + let key1 = Pubkey::from([5u8; 32]); + let key2 = Pubkey::from([6u8; 32]); let mut account = AccountSharedData::new(1, 0, &Pubkey::default()); account.set_rent_epoch(1); @@ -2300,10 +2300,10 @@ mod tests { let keypair = Keypair::new(); let key0 = keypair.pubkey(); - let key1 = Pubkey::new(&[5u8; 32]); - let key2 = Pubkey::new(&[6u8; 32]); - let programdata_key1 = Pubkey::new(&[7u8; 32]); - let programdata_key2 = Pubkey::new(&[8u8; 32]); + let key1 = Pubkey::from([5u8; 32]); + let key2 = Pubkey::from([6u8; 32]); + let programdata_key1 = Pubkey::from([7u8; 32]); + let programdata_key2 = Pubkey::from([8u8; 32]); let mut account = AccountSharedData::new(1, 0, &Pubkey::default()); account.set_rent_epoch(1); @@ -2397,8 +2397,8 @@ mod tests { let keypair = Keypair::new(); let key0 = keypair.pubkey(); - let key1 = Pubkey::new(&[5u8; 32]); - let key2 = Pubkey::new(&[6u8; 32]); + let key1 = Pubkey::from([5u8; 32]); + let key2 = Pubkey::from([6u8; 32]); let mut account = AccountSharedData::new(1, 0, &Pubkey::default()); account.set_rent_epoch(1); @@ -3335,7 +3335,7 @@ mod tests { let expect_account = post_account.clone(); // Wrong key assert!(run_prepare_if_nonce_account_test( - &Pubkey::new(&[1u8; 32]), + &Pubkey::from([1u8; 32]), &mut post_account, &Ok(()), false, diff --git a/runtime/src/accounts_db.rs b/runtime/src/accounts_db.rs index ad28f3c308b7bd..aab6985ca8b451 100644 --- a/runtime/src/accounts_db.rs +++ b/runtime/src/accounts_db.rs @@ -8856,7 +8856,7 @@ impl AccountsDb { #[allow(clippy::stable_sort_primitive)] alive_roots.sort(); info!("{}: accounts_index alive_roots: {:?}", label, alive_roots,); - let full_pubkey_range = Pubkey::new(&[0; 32])..=Pubkey::new(&[0xff; 32]); + let full_pubkey_range = Pubkey::from([0; 32])..=Pubkey::from([0xff; 32]); self.accounts_index.account_maps.iter().for_each(|map| { for (pubkey, account_entry) in map.items(&full_pubkey_range) { @@ -9218,10 +9218,10 @@ pub mod tests { slot: Slot, ) -> (SnapshotStorages, Vec) { let accounts = AccountsDb::new(Vec::new(), &ClusterType::Development); - let pubkey0 = Pubkey::new(&[0u8; 32]); - let pubkey127 = Pubkey::new(&[0x7fu8; 32]); - let pubkey128 = Pubkey::new(&[0x80u8; 32]); - let pubkey255 = Pubkey::new(&[0xffu8; 32]); + let pubkey0 = Pubkey::from([0u8; 32]); + let pubkey127 = Pubkey::from([0x7fu8; 32]); + let pubkey128 = Pubkey::from([0x80u8; 32]); + let pubkey255 = Pubkey::from([0xffu8; 32]); let mut raw_expected = vec![ CalculateHashIntermediate::new(Hash::default(), 1, pubkey0), @@ -15161,8 +15161,8 @@ pub mod tests { fn test_calculate_storage_count_and_alive_bytes_2_accounts() { let accounts = AccountsDb::new_single_for_tests(); let keys = [ - solana_sdk::pubkey::Pubkey::new(&[0; 32]), - solana_sdk::pubkey::Pubkey::new(&[255; 32]), + solana_sdk::pubkey::Pubkey::from([0; 32]), + solana_sdk::pubkey::Pubkey::from([255; 32]), ]; // make sure accounts are in 2 different bins assert!( @@ -15486,7 +15486,7 @@ pub mod tests { let rewrites = Rewrites::default(); db.extend_hashes_with_skipped_rewrites(&mut hashes, &rewrites); assert!(hashes.is_empty()); - let pubkey = Pubkey::new(&[1; 32]); + let pubkey = Pubkey::from([1; 32]); let hash = Hash::new(&[2; 32]); rewrites.write().unwrap().insert(pubkey, hash); db.extend_hashes_with_skipped_rewrites(&mut hashes, &rewrites); @@ -15494,7 +15494,7 @@ pub mod tests { // pubkey is already in hashes, will not be added a second time db.extend_hashes_with_skipped_rewrites(&mut hashes, &rewrites); assert_eq!(hashes, vec![(pubkey, hash)]); - let pubkey2 = Pubkey::new(&[2; 32]); + let pubkey2 = Pubkey::from([2; 32]); let hash2 = Hash::new(&[3; 32]); rewrites.write().unwrap().insert(pubkey2, hash2); db.extend_hashes_with_skipped_rewrites(&mut hashes, &rewrites); diff --git a/runtime/src/accounts_hash.rs b/runtime/src/accounts_hash.rs index 4aad51756f34bf..c21fc1f12600bf 100644 --- a/runtime/src/accounts_hash.rs +++ b/runtime/src/accounts_hash.rs @@ -1035,13 +1035,13 @@ pub mod tests { let mut account_maps = Vec::new(); - let key = Pubkey::new(&[11u8; 32]); + let key = Pubkey::from([11u8; 32]); let hash = Hash::new(&[1u8; 32]); let val = CalculateHashIntermediate::new(hash, 88, key); account_maps.push(val); // 2nd key - zero lamports, so will be removed - let key = Pubkey::new(&[12u8; 32]); + let key = Pubkey::from([12u8; 32]); let hash = Hash::new(&[2u8; 32]); let val = CalculateHashIntermediate::new(hash, ZERO_RAW_LAMPORTS_SENTINEL, key); account_maps.push(val); @@ -1058,7 +1058,7 @@ pub mod tests { assert_eq!((result.0, result.1), (expected_hash, 88)); // 3rd key - with pubkey value before 1st key so it will be sorted first - let key = Pubkey::new(&[10u8; 32]); + let key = Pubkey::from([10u8; 32]); let hash = Hash::new(&[2u8; 32]); let val = CalculateHashIntermediate::new(hash, 20, key); account_maps.insert(0, val); @@ -1074,7 +1074,7 @@ pub mod tests { assert_eq!((result.0, result.1), (expected_hash, 108)); // 3rd key - with later slot - let key = Pubkey::new(&[10u8; 32]); + let key = Pubkey::from([10u8; 32]); let hash = Hash::new(&[99u8; 32]); let val = CalculateHashIntermediate::new(hash, 30, key); account_maps.insert(1, val); @@ -1109,13 +1109,13 @@ pub mod tests { for pass in 0..3 { let mut account_maps = Vec::new(); - let key = Pubkey::new(&[11u8; 32]); + let key = Pubkey::from([11u8; 32]); let hash = Hash::new(&[1u8; 32]); let val = CalculateHashIntermediate::new(hash, 88, key); account_maps.push(val); // 2nd key - zero lamports, so will be removed - let key = Pubkey::new(&[12u8; 32]); + let key = Pubkey::from([12u8; 32]); let hash = Hash::new(&[2u8; 32]); let val = CalculateHashIntermediate::new(hash, ZERO_RAW_LAMPORTS_SENTINEL, key); account_maps.push(val); @@ -1196,12 +1196,12 @@ pub mod tests { let mut account_maps = Vec::new(); - let key = Pubkey::new(&[11u8; 32]); + let key = Pubkey::from([11u8; 32]); let hash = Hash::new(&[1u8; 32]); let val = CalculateHashIntermediate::new(hash, 88, key); account_maps.push(val); - let key = Pubkey::new(&[12u8; 32]); + let key = Pubkey::from([12u8; 32]); let hash = Hash::new(&[2u8; 32]); let val = CalculateHashIntermediate::new(hash, 20, key); account_maps.push(val); @@ -1435,9 +1435,9 @@ pub mod tests { fn test_accountsdb_de_dup_accounts_from_stores() { solana_logger::setup(); - let key_a = Pubkey::new(&[1u8; 32]); - let key_b = Pubkey::new(&[2u8; 32]); - let key_c = Pubkey::new(&[3u8; 32]); + let key_a = Pubkey::from([1u8; 32]); + let key_b = Pubkey::from([2u8; 32]); + let key_c = Pubkey::from([3u8; 32]); const COUNT: usize = 6; let hashes = (0..COUNT).into_iter().map(|i| Hash::new(&[i as u8; 32])); // create this vector @@ -1981,7 +1981,7 @@ pub mod tests { for count in start..iterations { let mut input: Vec<_> = (0..count) .map(|i| { - let key = Pubkey::new(&[(pass * iterations + count) as u8; 32]); + let key = Pubkey::from([(pass * iterations + count) as u8; 32]); let hash = Hash::new(&[(pass * iterations + count + i + 1) as u8; 32]); (key, hash) }) diff --git a/runtime/src/accounts_index.rs b/runtime/src/accounts_index.rs index e3618d7494f713..e495e9170d1af1 100644 --- a/runtime/src/accounts_index.rs +++ b/runtime/src/accounts_index.rs @@ -3925,8 +3925,8 @@ pub mod tests { ); assert_eq!((0, usize::MAX), iter.bin_start_and_range()); - let key_0 = Pubkey::new(&[0; 32]); - let key_ff = Pubkey::new(&[0xff; 32]); + let key_0 = Pubkey::from([0; 32]); + let key_ff = Pubkey::from([0xff; 32]); let iter = AccountsIndexIterator::new( &index, @@ -4179,7 +4179,7 @@ pub mod tests { assert_eq!(iter.start_bin(), 0); // no range, so 0 assert_eq!(iter.end_bin_inclusive(), usize::MAX); // no range, so max - let key = Pubkey::new(&[0; 32]); + let key = Pubkey::from([0; 32]); let iter = AccountsIndexIterator::new( &index, Some(&RangeInclusive::new(key, key)), @@ -4202,7 +4202,7 @@ pub mod tests { assert_eq!(iter.start_bin(), 0); // start at pubkey 0, so 0 assert_eq!(iter.end_bin_inclusive(), 0); // end at pubkey 0, so 0 - let key = Pubkey::new(&[0xff; 32]); + let key = Pubkey::from([0xff; 32]); let iter = AccountsIndexIterator::new( &index, Some(&RangeInclusive::new(key, key)), diff --git a/runtime/src/ancient_append_vecs.rs b/runtime/src/ancient_append_vecs.rs index 85e8fc69e4938d..1fc96fbdf200a0 100644 --- a/runtime/src/ancient_append_vecs.rs +++ b/runtime/src/ancient_append_vecs.rs @@ -135,7 +135,7 @@ pub mod tests { #[test] fn test_accounts_to_store_more() { - let pubkey = Pubkey::new(&[1; 32]); + let pubkey = Pubkey::from([1; 32]); let store_id = AppendVecId::default(); let account_size = 3; @@ -143,7 +143,7 @@ pub mod tests { let account_meta = AccountMeta { lamports: 1, - owner: Pubkey::new(&[2; 32]), + owner: Pubkey::from([2; 32]), executable: false, rent_epoch: 0, }; @@ -238,7 +238,7 @@ pub mod tests { let sm = StoredMeta { write_version: 0, - pubkey: Pubkey::new(&[0; 32]), + pubkey: Pubkey::from([0; 32]), data_len: data_len as u64, }; av.append_accounts(&[(sm, Some(&account))], &[Hash::default()]); diff --git a/runtime/src/bank.rs b/runtime/src/bank.rs index 2b1a7899a9ce62..0fc8636593786f 100644 --- a/runtime/src/bank.rs +++ b/runtime/src/bank.rs @@ -8850,7 +8850,7 @@ pub(crate) mod tests { #[allow(clippy::cognitive_complexity)] fn test_rent_complex() { solana_logger::setup(); - let mock_program_id = Pubkey::new(&[2u8; 32]); + let mock_program_id = Pubkey::from([2u8; 32]); #[derive(Serialize, Deserialize)] enum MockInstruction { @@ -9841,7 +9841,7 @@ pub(crate) mod tests { fn test_collect_rent_from_accounts() { solana_logger::setup(); - let zero_lamport_pubkey = Pubkey::new(&[0; 32]); + let zero_lamport_pubkey = Pubkey::from([0; 32]); let genesis_bank = create_simple_test_arc_bank(100000); let first_bank = Arc::new(new_from_parent(&genesis_bank)); @@ -12294,7 +12294,7 @@ pub(crate) mod tests { let bank0 = Arc::new(new_from_parent(&parent)); let pubkey0 = solana_sdk::pubkey::new_rand(); - let program_id = Pubkey::new(&[2; 32]); + let program_id = Pubkey::from([2; 32]); let account0 = AccountSharedData::new(1, 0, &program_id); bank0.store_account(&pubkey0, &account0); @@ -12479,7 +12479,7 @@ pub(crate) mod tests { let mut bank = Bank::new_for_tests(&genesis_config); fn mock_vote_program_id() -> Pubkey { - Pubkey::new(&[42u8; 32]) + Pubkey::from([42u8; 32]) } fn mock_vote_processor( _first_instruction_account: usize, @@ -13043,7 +13043,7 @@ pub(crate) mod tests { let blockhash = bank.last_blockhash(); bank.store_account(&nonce.pubkey(), &nonce_account); - let ix = system_instruction::assign(&nonce.pubkey(), &Pubkey::new(&[9u8; 32])); + let ix = system_instruction::assign(&nonce.pubkey(), &Pubkey::from([9u8; 32])); let message = Message::new(&[ix], Some(&nonce.pubkey())); let tx = Transaction::new(&[&nonce], message, blockhash); @@ -13737,7 +13737,7 @@ pub(crate) mod tests { let keypair = Keypair::new(); let pubkey0 = solana_sdk::pubkey::new_rand(); let pubkey1 = solana_sdk::pubkey::new_rand(); - let program_id = Pubkey::new(&[2; 32]); + let program_id = Pubkey::from([2; 32]); let keypair_account = AccountSharedData::new(8, 0, &program_id); let account0 = AccountSharedData::new(11, 0, &program_id); let program_account = AccountSharedData::new(1, 10, &Pubkey::default()); @@ -13885,7 +13885,7 @@ pub(crate) mod tests { Ok(()) } - let mock_program_id = Pubkey::new(&[2u8; 32]); + let mock_program_id = Pubkey::from([2u8; 32]); bank.add_builtin("mock_program", &mock_program_id, mock_process_instruction); let from_pubkey = solana_sdk::pubkey::new_rand(); @@ -13929,7 +13929,7 @@ pub(crate) mod tests { Ok(()) } - let mock_program_id = Pubkey::new(&[2u8; 32]); + let mock_program_id = Pubkey::from([2u8; 32]); bank.add_builtin("mock_program", &mock_program_id, mock_process_instruction); let from_pubkey = solana_sdk::pubkey::new_rand(); @@ -14349,7 +14349,7 @@ pub(crate) mod tests { let mut genesis_config = GenesisConfig::new( &[( - Pubkey::new(&[42; 32]), + Pubkey::from([42; 32]), AccountSharedData::new(1_000_000_000_000, 0, &system_program::id()), )], &[], @@ -14466,8 +14466,8 @@ pub(crate) mod tests { solana_logger::setup(); let (genesis_config, _mint_keypair) = create_genesis_config(1_000_000_000); - let pubkey0 = Pubkey::new(&[0; 32]); - let pubkey1 = Pubkey::new(&[1; 32]); + let pubkey0 = Pubkey::from([0; 32]); + let pubkey1 = Pubkey::from([1; 32]); info!("pubkey0: {}", pubkey0); info!("pubkey1: {}", pubkey1); @@ -16641,12 +16641,12 @@ pub(crate) mod tests { ); let mut bank = Bank::new_for_tests(&genesis_config); - let mock_program_id = Pubkey::new(&[2u8; 32]); + let mock_program_id = Pubkey::from([2u8; 32]); fn mock_process_instruction( _first_instruction_account: usize, invoke_context: &mut InvokeContext, ) -> result::Result<(), InstructionError> { - let mock_program_id = Pubkey::new(&[2u8; 32]); + let mock_program_id = Pubkey::from([2u8; 32]); let transaction_context = &mut invoke_context.transaction_context; let instruction_context = transaction_context.get_current_instruction_context()?; let instruction_data = instruction_context.get_instruction_data(); @@ -18480,7 +18480,7 @@ pub(crate) mod tests { assert!(bank.rewrites_skipped_this_slot.read().unwrap().is_empty()); // bank's map is initially empty - let mut test = vec![(Pubkey::new(&[4; 32]), Hash::new(&[5; 32]))]; + let mut test = vec![(Pubkey::from([4; 32]), Hash::new(&[5; 32]))]; bank.remember_skipped_rewrites(test.clone()); assert_eq!( *bank.rewrites_skipped_this_slot.read().unwrap(), @@ -18488,7 +18488,7 @@ pub(crate) mod tests { ); // now there is already some stuff in the bank's map - test.push((Pubkey::new(&[6; 32]), Hash::new(&[7; 32]))); + test.push((Pubkey::from([6; 32]), Hash::new(&[7; 32]))); bank.remember_skipped_rewrites(test[1..].to_vec()); assert_eq!( *bank.rewrites_skipped_this_slot.read().unwrap(), @@ -19005,8 +19005,8 @@ pub(crate) mod tests { assert!(bank.get_rent_paying_pubkeys(&(0, 2, n)).is_none()); assert!(bank.get_rent_paying_pubkeys(&(0, 0, n)).is_none()); - let pk1 = Pubkey::new(&[2; 32]); - let pk2 = Pubkey::new(&[3; 32]); + let pk1 = Pubkey::from([2; 32]); + let pk2 = Pubkey::from([3; 32]); let index1 = Bank::partition_from_pubkey(&pk1, n); let index2 = Bank::partition_from_pubkey(&pk2, n); assert!(index1 > 0, "{}", index1); diff --git a/runtime/src/in_mem_accounts_index.rs b/runtime/src/in_mem_accounts_index.rs index 1201ef7491f7b9..50898da7fed5a8 100644 --- a/runtime/src/in_mem_accounts_index.rs +++ b/runtime/src/in_mem_accounts_index.rs @@ -870,12 +870,12 @@ impl InMemAccountsIndex { assert!(!only_add_if_already_held || start_holding); let start = match range.start_bound() { Bound::Included(bound) | Bound::Excluded(bound) => *bound, - Bound::Unbounded => Pubkey::new(&[0; 32]), + Bound::Unbounded => Pubkey::from([0; 32]), }; let end = match range.end_bound() { Bound::Included(bound) | Bound::Excluded(bound) => *bound, - Bound::Unbounded => Pubkey::new(&[0xff; 32]), + Bound::Unbounded => Pubkey::from([0xff; 32]), }; // this becomes inclusive - that is ok - we are just roughly holding a range of items. @@ -1666,10 +1666,10 @@ mod tests { fn test_hold_range_in_memory() { let bucket = new_disk_buckets_for_test::(); // 0x81 is just some other range - let all = Pubkey::new(&[0; 32])..=Pubkey::new(&[0xff; 32]); + let all = Pubkey::from([0; 32])..=Pubkey::from([0xff; 32]); let ranges = [ all.clone(), - Pubkey::new(&[0x81; 32])..=Pubkey::new(&[0xff; 32]), + Pubkey::from([0x81; 32])..=Pubkey::from([0xff; 32]), ]; for range in ranges.clone() { assert!(bucket.cache_ranges_held.read().unwrap().is_empty()); diff --git a/runtime/src/message_processor.rs b/runtime/src/message_processor.rs index 2077b441906dff..55ae052b6a074a 100644 --- a/runtime/src/message_processor.rs +++ b/runtime/src/message_processor.rs @@ -466,7 +466,7 @@ mod tests { } } - let mock_program_id = Pubkey::new(&[2u8; 32]); + let mock_program_id = Pubkey::from([2u8; 32]); let rent_collector = RentCollector::default(); let builtin_programs = &[BuiltinProgram { program_id: mock_program_id, diff --git a/runtime/src/pubkey_bins.rs b/runtime/src/pubkey_bins.rs index 9d1938758dcfe0..40206829cf3cf5 100644 --- a/runtime/src/pubkey_bins.rs +++ b/runtime/src/pubkey_bins.rs @@ -37,7 +37,7 @@ impl PubkeyBinCalculator24 { pub fn lowest_pubkey_from_bin(&self, mut bin: usize, bins: usize) -> Pubkey { assert!(bin < bins); bin <<= self.shift_bits; - let mut pubkey = Pubkey::new(&[0; 32]); + let mut pubkey = Pubkey::from([0; 32]); pubkey.as_mut()[0] = ((bin / 256 / 256) & 0xff) as u8; pubkey.as_mut()[1] = ((bin / 256) & 0xff) as u8; pubkey.as_mut()[2] = (bin & 0xff) as u8; @@ -75,7 +75,7 @@ pub mod tests { #[test] fn test_pubkey_bins_pubkeys() { - let mut pk = Pubkey::new(&[0; 32]); + let mut pk = Pubkey::from([0; 32]); for i in 0..=8 { let bins = 2usize.pow(i); let calc = PubkeyBinCalculator24::new(bins); @@ -106,7 +106,7 @@ pub mod tests { } for i in 9..=16 { - let mut pk = Pubkey::new(&[0; 32]); + let mut pk = Pubkey::from([0; 32]); let bins = 2usize.pow(i); let calc = PubkeyBinCalculator24::new(bins); @@ -118,7 +118,7 @@ pub mod tests { pk.as_mut()[1] = 0xff; assert_eq!(bins - 1, calc.bin_from_pubkey(&pk)); - let mut pk = Pubkey::new(&[0; 32]); + let mut pk = Pubkey::from([0; 32]); for bin in 0..bins { let mut target = (bin << shift_bits) as u16; pk.as_mut()[0] = (target / 256) as u8; @@ -142,7 +142,7 @@ pub mod tests { } for i in 17..=24 { - let mut pk = Pubkey::new(&[0; 32]); + let mut pk = Pubkey::from([0; 32]); let bins = 2usize.pow(i); let calc = PubkeyBinCalculator24::new(bins); @@ -155,7 +155,7 @@ pub mod tests { pk.as_mut()[2] = 0xff; assert_eq!(bins - 1, calc.bin_from_pubkey(&pk)); - let mut pk = Pubkey::new(&[0; 32]); + let mut pk = Pubkey::from([0; 32]); for bin in 0..bins { let mut target = (bin << shift_bits) as u32; pk.as_mut()[0] = (target / 256 / 256) as u8; diff --git a/runtime/src/rent_paying_accounts_by_partition.rs b/runtime/src/rent_paying_accounts_by_partition.rs index 9232677ac96ed7..ffb3bf4de35f75 100644 --- a/runtime/src/rent_paying_accounts_by_partition.rs +++ b/runtime/src/rent_paying_accounts_by_partition.rs @@ -65,7 +65,7 @@ pub(crate) mod tests { #[test] fn test_add() { let mut test = RentPayingAccountsByPartition::new(&EpochSchedule::custom(32, 0, false)); - let pk = Pubkey::new(&[1; 32]); + let pk = Pubkey::from([1; 32]); test.add_account(&pk); // make sure duplicate adds only result in a single item test.add_account(&pk); diff --git a/runtime/src/storable_accounts.rs b/runtime/src/storable_accounts.rs index 8d79c0f78c5fe4..4c46fb77315746 100644 --- a/runtime/src/storable_accounts.rs +++ b/runtime/src/storable_accounts.rs @@ -136,7 +136,7 @@ pub mod tests { #[test] fn test_contains_multiple_slots() { - let pk = Pubkey::new(&[1; 32]); + let pk = Pubkey::from([1; 32]); let account = AccountSharedData::create(1, Vec::default(), Pubkey::default(), false, 0); let slot = 0; let test3 = ( @@ -159,7 +159,7 @@ pub mod tests { for starting_slot in 0..max_slots { let mut raw = Vec::new(); for entry in 0..entries { - let pk = Pubkey::new(&[entry; 32]); + let pk = Pubkey::from([entry; 32]); raw.push(( pk, AccountSharedData::create( diff --git a/runtime/src/system_instruction_processor.rs b/runtime/src/system_instruction_processor.rs index 67f1f931147cef..66bcf145829e06 100644 --- a/runtime/src/system_instruction_processor.rs +++ b/runtime/src/system_instruction_processor.rs @@ -662,7 +662,7 @@ mod tests { #[test] fn test_create_account() { - let new_owner = Pubkey::new(&[9; 32]); + let new_owner = Pubkey::from([9; 32]); let from = Pubkey::new_unique(); let to = Pubkey::new_unique(); let from_account = AccountSharedData::new(100, 0, &system_program::id()); @@ -699,7 +699,7 @@ mod tests { #[test] fn test_create_account_with_seed() { - let new_owner = Pubkey::new(&[9; 32]); + let new_owner = Pubkey::from([9; 32]); let from = Pubkey::new_unique(); let seed = "shiny pepper"; let to = Pubkey::create_with_seed(&from, seed, &new_owner).unwrap(); @@ -739,7 +739,7 @@ mod tests { #[test] fn test_create_account_with_seed_separate_base_account() { - let new_owner = Pubkey::new(&[9; 32]); + let new_owner = Pubkey::from([9; 32]); let from = Pubkey::new_unique(); let base = Pubkey::new_unique(); let seed = "shiny pepper"; @@ -802,7 +802,7 @@ mod tests { #[test] fn test_create_account_with_seed_missing_sig() { - let new_owner = Pubkey::new(&[9; 32]); + let new_owner = Pubkey::from([9; 32]); let from = Pubkey::new_unique(); let seed = "dull boy"; let to = Pubkey::create_with_seed(&from, seed, &new_owner).unwrap(); @@ -839,7 +839,7 @@ mod tests { #[test] fn test_create_with_zero_lamports() { // create account with zero lamports transferred - let new_owner = Pubkey::new(&[9; 32]); + let new_owner = Pubkey::from([9; 32]); let from = Pubkey::new_unique(); let from_account = AccountSharedData::new(100, 0, &Pubkey::new_unique()); // not from system account let to = Pubkey::new_unique(); @@ -877,7 +877,7 @@ mod tests { #[test] fn test_create_negative_lamports() { // Attempt to create account with more lamports than from_account has - let new_owner = Pubkey::new(&[9; 32]); + let new_owner = Pubkey::from([9; 32]); let from = Pubkey::new_unique(); let from_account = AccountSharedData::new(100, 0, &Pubkey::new_unique()); let to = Pubkey::new_unique(); @@ -960,13 +960,13 @@ mod tests { #[test] fn test_create_already_in_use() { - let new_owner = Pubkey::new(&[9; 32]); + let new_owner = Pubkey::from([9; 32]); let from = Pubkey::new_unique(); let from_account = AccountSharedData::new(100, 0, &system_program::id()); let owned_key = Pubkey::new_unique(); // Attempt to create system account in account already owned by another program - let original_program_owner = Pubkey::new(&[5; 32]); + let original_program_owner = Pubkey::from([5; 32]); let owned_account = AccountSharedData::new(0, 0, &original_program_owner); let unchanged_account = owned_account.clone(); let accounts = process_instruction( @@ -1057,7 +1057,7 @@ mod tests { #[test] fn test_create_unsigned() { // Attempt to create an account without signing the transfer - let new_owner = Pubkey::new(&[9; 32]); + let new_owner = Pubkey::from([9; 32]); let from = Pubkey::new_unique(); let from_account = AccountSharedData::new(100, 0, &system_program::id()); let owned_key = Pubkey::new_unique(); @@ -1180,7 +1180,7 @@ mod tests { #[test] fn test_create_data_populated() { // Attempt to create system account in account with populated data - let new_owner = Pubkey::new(&[9; 32]); + let new_owner = Pubkey::from([9; 32]); let from = Pubkey::new_unique(); let from_account = AccountSharedData::new(100, 0, &system_program::id()); let populated_key = Pubkey::new_unique(); @@ -1253,7 +1253,7 @@ mod tests { #[test] fn test_assign() { - let new_owner = Pubkey::new(&[9; 32]); + let new_owner = Pubkey::from([9; 32]); let pubkey = Pubkey::new_unique(); let account = AccountSharedData::new(100, 0, &system_program::id()); @@ -1352,7 +1352,7 @@ mod tests { fn test_transfer_lamports() { let from = Pubkey::new_unique(); let from_account = AccountSharedData::new(100, 0, &system_program::id()); - let to = Pubkey::new(&[3; 32]); + let to = Pubkey::from([3; 32]); let to_account = AccountSharedData::new(1, 0, &to); // account owner should not matter let transaction_accounts = vec![(from, from_account), (to, to_account)]; let instruction_accounts = vec![ @@ -1427,12 +1427,12 @@ mod tests { #[test] fn test_transfer_with_seed() { let base = Pubkey::new_unique(); - let base_account = AccountSharedData::new(100, 0, &Pubkey::new(&[2; 32])); // account owner should not matter + let base_account = AccountSharedData::new(100, 0, &Pubkey::from([2; 32])); // account owner should not matter let from_seed = "42".to_string(); let from_owner = system_program::id(); let from = Pubkey::create_with_seed(&base, from_seed.as_str(), &from_owner).unwrap(); let from_account = AccountSharedData::new(100, 0, &system_program::id()); - let to = Pubkey::new(&[3; 32]); + let to = Pubkey::from([3; 32]); let to_account = AccountSharedData::new(1, 0, &to); // account owner should not matter let transaction_accounts = vec![(from, from_account), (base, base_account), (to, to_account)]; @@ -1519,7 +1519,7 @@ mod tests { get_system_account_kind(&from_account), Some(SystemAccountKind::Nonce) ); - let to = Pubkey::new(&[3; 32]); + let to = Pubkey::from([3; 32]); let to_account = AccountSharedData::new(1, 0, &to); // account owner should not matter process_instruction( diff --git a/sdk/program/src/fee_calculator.rs b/sdk/program/src/fee_calculator.rs index 69ec783bc0590c..182f82ed160458 100644 --- a/sdk/program/src/fee_calculator.rs +++ b/sdk/program/src/fee_calculator.rs @@ -214,8 +214,8 @@ mod tests { assert_eq!(FeeCalculator::new(1).calculate_fee(&message), 0); // One signature, a fee. - let pubkey0 = Pubkey::new(&[0; 32]); - let pubkey1 = Pubkey::new(&[1; 32]); + let pubkey0 = Pubkey::from([0; 32]); + let pubkey1 = Pubkey::from([1; 32]); let ix0 = system_instruction::transfer(&pubkey0, &pubkey1, 1); let message = Message::new(&[ix0], Some(&pubkey0)); assert_eq!(FeeCalculator::new(2).calculate_fee(&message), 2); @@ -231,8 +231,8 @@ mod tests { #[allow(deprecated)] fn test_fee_calculator_calculate_fee_secp256k1() { use crate::instruction::Instruction; - let pubkey0 = Pubkey::new(&[0; 32]); - let pubkey1 = Pubkey::new(&[1; 32]); + let pubkey0 = Pubkey::from([0; 32]); + let pubkey1 = Pubkey::from([1; 32]); let ix0 = system_instruction::transfer(&pubkey0, &pubkey1, 1); let mut secp_instruction = Instruction { program_id: crate::secp256k1_program::id(), diff --git a/sdk/program/src/pubkey.rs b/sdk/program/src/pubkey.rs index a8992c3672a3e0..7bbaf4ffef336f 100644 --- a/sdk/program/src/pubkey.rs +++ b/sdk/program/src/pubkey.rs @@ -121,17 +121,36 @@ impl FromStr for Pubkey { if pubkey_vec.len() != mem::size_of::() { Err(ParsePubkeyError::WrongSize) } else { - Ok(Pubkey::new(&pubkey_vec)) + Pubkey::try_from(pubkey_vec).map_err(|_| ParsePubkeyError::Invalid) } } } impl From<[u8; 32]> for Pubkey { + #[inline] fn from(from: [u8; 32]) -> Self { Self(from) } } +impl TryFrom<&[u8]> for Pubkey { + type Error = std::array::TryFromSliceError; + + #[inline] + fn try_from(pubkey: &[u8]) -> Result { + <[u8; 32]>::try_from(pubkey).map(Self::from) + } +} + +impl TryFrom> for Pubkey { + type Error = Vec; + + #[inline] + fn try_from(pubkey: Vec) -> Result { + <[u8; 32]>::try_from(pubkey).map(Self::from) + } +} + impl TryFrom<&str> for Pubkey { type Error = ParsePubkeyError; fn try_from(s: &str) -> Result { @@ -151,11 +170,12 @@ pub fn bytes_are_curve_point>(_bytes: T) -> bool { } impl Pubkey { + #[deprecated( + since = "1.14.14", + note = "Please use 'Pubkey::from' or 'Pubkey::try_from' instead" + )] pub fn new(pubkey_vec: &[u8]) -> Self { - Self( - <[u8; 32]>::try_from(<&[u8]>::clone(&pubkey_vec)) - .expect("Slice must be the same length as a Pubkey"), - ) + Self::try_from(pubkey_vec).expect("Slice must be the same length as a Pubkey") } pub const fn new_from_array(pubkey_array: [u8; 32]) -> Self { @@ -166,7 +186,7 @@ impl Pubkey { #[cfg(not(target_os = "solana"))] pub fn new_rand() -> Self { // Consider removing Pubkey::new_rand() entirely in the v1.5 or v1.6 timeframe - Pubkey::new(&rand::random::<[u8; 32]>()) + Pubkey::from(rand::random::<[u8; 32]>()) } /// unique Pubkey for tests and benchmarks. @@ -179,7 +199,7 @@ impl Pubkey { // use big endian representation to ensure that recent unique pubkeys // are always greater than less recent unique pubkeys b[0..8].copy_from_slice(&i.to_be_bytes()); - Self::new(&b) + Self::from(b) } pub fn create_with_seed( @@ -198,10 +218,8 @@ impl Pubkey { return Err(PubkeyError::IllegalOwner); } } - - Ok(Pubkey::new( - hashv(&[base.as_ref(), seed.as_ref(), owner]).as_ref(), - )) + let hash = hashv(&[base.as_ref(), seed.as_ref(), owner]); + Ok(Pubkey::from(hash.to_bytes())) } /// Find a valid [program derived address][pda] and its corresponding bump seed. @@ -508,7 +526,7 @@ impl Pubkey { ) }; match result { - crate::entrypoint::SUCCESS => Some((Pubkey::new(&bytes), bump_seed)), + crate::entrypoint::SUCCESS => Some((Pubkey::from(bytes), bump_seed)), _ => None, } } @@ -584,7 +602,7 @@ impl Pubkey { return Err(PubkeyError::InvalidSeeds); } - Ok(Pubkey::new(hash.as_ref())) + Ok(Pubkey::from(hash.to_bytes())) } // Call via a system call to perform the calculation #[cfg(target_os = "solana")] @@ -599,7 +617,7 @@ impl Pubkey { ) }; match result { - crate::entrypoint::SUCCESS => Ok(Pubkey::new(&bytes)), + crate::entrypoint::SUCCESS => Ok(Pubkey::from(bytes)), _ => Err(result.into()), } } diff --git a/sdk/program/src/serialize_utils.rs b/sdk/program/src/serialize_utils.rs index 78003f85777901..a2b61f75d06de9 100644 --- a/sdk/program/src/serialize_utils.rs +++ b/sdk/program/src/serialize_utils.rs @@ -37,7 +37,8 @@ pub fn read_pubkey(current: &mut usize, data: &[u8]) -> Result().map_err(display_to_jsvalue) } else if let Some(uint8_array) = value.dyn_ref::() { - Ok(Pubkey::new(&uint8_array.to_vec())) + Pubkey::try_from(uint8_array.to_vec()) + .map_err(|err| JsValue::from(format!("Invalid Uint8Array pubkey: {err:?}"))) } else if let Some(array) = value.dyn_ref::() { let mut bytes = vec![]; let iterator = js_sys::try_iter(&array.values())?.expect("array to be iterable"); @@ -49,7 +50,8 @@ impl Pubkey { } return Err(format!("Invalid array argument: {:?}", x).into()); } - Ok(Pubkey::new(&bytes)) + Pubkey::try_from(bytes) + .map_err(|err| JsValue::from(format!("Invalid Array pubkey: {err:?}"))) } else if value.is_undefined() { Ok(Pubkey::default()) } else { diff --git a/sdk/src/pubkey.rs b/sdk/src/pubkey.rs index b28672b7f36226..fe3c9488e9107c 100644 --- a/sdk/src/pubkey.rs +++ b/sdk/src/pubkey.rs @@ -3,7 +3,7 @@ pub use solana_program::pubkey::*; /// New random Pubkey for tests and benchmarks. #[cfg(feature = "full")] pub fn new_rand() -> Pubkey { - Pubkey::new(&rand::random::<[u8; PUBKEY_BYTES]>()) + Pubkey::from(rand::random::<[u8; PUBKEY_BYTES]>()) } #[cfg(feature = "full")] diff --git a/sdk/src/signature.rs b/sdk/src/signature.rs index ace0bf0981e92d..3f94ccf9353acb 100644 --- a/sdk/src/signature.rs +++ b/sdk/src/signature.rs @@ -179,7 +179,7 @@ mod tests { let off_curve_point = curve25519_dalek::edwards::CompressedEdwardsY(off_curve_bits); assert_eq!(off_curve_point.decompress(), None); - let pubkey = Pubkey::new(&off_curve_bytes); + let pubkey = Pubkey::try_from(off_curve_bytes).unwrap(); let signature = Signature::default(); // Unfortunately, ed25519-dalek doesn't surface the internal error types that we'd ideally // `source()` out of the `SignatureError` returned by `verify_strict()`. So the best we diff --git a/sdk/src/signer/keypair.rs b/sdk/src/signer/keypair.rs index 4ee5c51b07232a..0983072f906216 100644 --- a/sdk/src/signer/keypair.rs +++ b/sdk/src/signer/keypair.rs @@ -68,7 +68,7 @@ impl Keypair { impl Signer for Keypair { fn pubkey(&self) -> Pubkey { - Pubkey::new(self.0.public.as_ref()) + Pubkey::from(self.0.public.to_bytes()) } fn try_pubkey(&self) -> Result { diff --git a/sdk/src/transaction/mod.rs b/sdk/src/transaction/mod.rs index 0041889a5b7277..caa9c4799e7aff 100644 --- a/sdk/src/transaction/mod.rs +++ b/sdk/src/transaction/mod.rs @@ -1273,12 +1273,12 @@ mod tests { 62, 89, 99, ]) .unwrap(); - let to = Pubkey::new(&[ + let to = Pubkey::from([ 1, 1, 1, 4, 5, 6, 7, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 8, 7, 6, 5, 4, 1, 1, 1, ]); - let program_id = Pubkey::new(&[ + let program_id = Pubkey::from([ 2, 2, 2, 4, 5, 6, 7, 8, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 9, 8, 7, 6, 5, 4, 2, 2, 2, ]); diff --git a/storage-proto/src/convert.rs b/storage-proto/src/convert.rs index 6580095403cf4f..0b942a2dd92dee 100644 --- a/storage-proto/src/convert.rs +++ b/storage-proto/src/convert.rs @@ -302,7 +302,7 @@ impl From for VersionedMessage { let account_keys = value .account_keys .into_iter() - .map(|key| Pubkey::new(&key)) + .map(|key| Pubkey::try_from(key).unwrap()) .collect(); let recent_blockhash = Hash::new(&value.recent_blockhash); let instructions = value.instructions.into_iter().map(|ix| ix.into()).collect(); @@ -494,12 +494,20 @@ impl TryFrom for TransactionStatusMeta { let loaded_addresses = LoadedAddresses { writable: loaded_writable_addresses .into_iter() - .map(|key| Pubkey::new(&key)) - .collect(), + .map(Pubkey::try_from) + .collect::>() + .map_err(|err| { + let err = format!("Invalid writable address: {err:?}"); + Self::Error::new(bincode::ErrorKind::Custom(err)) + })?, readonly: loaded_readonly_addresses .into_iter() - .map(|key| Pubkey::new(&key)) - .collect(), + .map(Pubkey::try_from) + .collect::>() + .map_err(|err| { + let err = format!("Invalid readonly address: {err:?}"); + Self::Error::new(bincode::ErrorKind::Custom(err)) + })?, }; let return_data = if return_data_none { None @@ -600,7 +608,7 @@ impl From for generated::MessageAddressTableLookup { impl From for MessageAddressTableLookup { fn from(value: generated::MessageAddressTableLookup) -> Self { Self { - account_key: Pubkey::new(&value.account_key), + account_key: Pubkey::try_from(value.account_key).unwrap(), writable_indexes: value.writable_indexes, readonly_indexes: value.readonly_indexes, } @@ -619,7 +627,7 @@ impl From for generated::ReturnData { impl From for TransactionReturnData { fn from(value: generated::ReturnData) -> Self { Self { - program_id: Pubkey::new(&value.program_id), + program_id: Pubkey::try_from(value.program_id).unwrap(), data: value.data, } } diff --git a/streamer/src/tls_certificates.rs b/streamer/src/tls_certificates.rs index 9e6bf35bc71caa..6f964972a248cc 100644 --- a/streamer/src/tls_certificates.rs +++ b/streamer/src/tls_certificates.rs @@ -59,14 +59,11 @@ pub fn new_self_signed_tls_certificate_chain( pub fn get_pubkey_from_tls_certificate(certificates: &[rustls::Certificate]) -> Option { if certificates.len() == 1 { let der_cert = &certificates[0]; - X509Certificate::from_der(der_cert.as_ref()) - .ok() - .and_then(|(_, cert)| { - cert.public_key().parsed().ok().and_then(|key| match key { - PublicKey::Unknown(inner_key) => Some(Pubkey::new(inner_key)), - _ => None, - }) - }) + let (_, cert) = X509Certificate::from_der(der_cert.as_ref()).ok()?; + match cert.public_key().parsed().ok()? { + PublicKey::Unknown(key) => Pubkey::try_from(key).ok(), + _ => None, + } } else { None } diff --git a/transaction-status/src/parse_instruction.rs b/transaction-status/src/parse_instruction.rs index 4689e9c10600c4..1b8f2d821e7fca 100644 --- a/transaction-status/src/parse_instruction.rs +++ b/transaction-status/src/parse_instruction.rs @@ -193,7 +193,7 @@ mod test { } ); - let non_parsable_program_id = Pubkey::new(&[1; 32]); + let non_parsable_program_id = Pubkey::from([1; 32]); assert!(parse(&non_parsable_program_id, &memo_instruction, &no_keys).is_err()); } From b40bcf922ae3daa689bf057b9255aa6f5442f04f Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Tue, 24 Jan 2023 15:36:37 -0600 Subject: [PATCH 307/465] Reduce cpuid reporting frequency to once an hour (backport #29849) (#29857) * Reduce cpuid reporting frequency to once an hour (#29849) (cherry picked from commit be7ec87b9bdc87ef1859a4912f874ba9a2f6769d) * Update core/src/system_monitor_service.rs Co-authored-by: steviez Co-authored-by: Brennan Watt --- core/src/system_monitor_service.rs | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/core/src/system_monitor_service.rs b/core/src/system_monitor_service.rs index 8806b62bc85e06..f0ea1afb33522e 100644 --- a/core/src/system_monitor_service.rs +++ b/core/src/system_monitor_service.rs @@ -28,6 +28,7 @@ const SAMPLE_INTERVAL_UDP_MS: u64 = 2 * MS_PER_S; const SAMPLE_INTERVAL_OS_NETWORK_LIMITS_MS: u64 = MS_PER_H; const SAMPLE_INTERVAL_MEM_MS: u64 = 5 * MS_PER_S; const SAMPLE_INTERVAL_CPU_MS: u64 = 10 * MS_PER_S; +const SAMPLE_INTERVAL_CPU_ID_MS: u64 = MS_PER_H; const SAMPLE_INTERVAL_DISK_MS: u64 = 5 * MS_PER_S; const SLEEP_INTERVAL: Duration = Duration::from_millis(500); @@ -827,9 +828,6 @@ impl SystemMonitorService { ("total_num_threads", info.num_threads as i64, i64), ) } - - #[cfg(any(target_arch = "x86", target_arch = "x86_64"))] - Self::report_cpuid_values(); } #[cfg(target_os = "linux")] @@ -980,6 +978,7 @@ impl SystemMonitorService { let udp_timer = AtomicInterval::default(); let mem_timer = AtomicInterval::default(); let cpu_timer = AtomicInterval::default(); + let cpuid_timer = AtomicInterval::default(); let disk_timer = AtomicInterval::default(); loop { @@ -997,8 +996,14 @@ impl SystemMonitorService { if report_os_memory_stats && mem_timer.should_update(SAMPLE_INTERVAL_MEM_MS) { Self::report_mem_stats(); } - if report_os_cpu_stats && cpu_timer.should_update(SAMPLE_INTERVAL_CPU_MS) { - Self::report_cpu_stats(); + if report_os_cpu_stats { + if cpu_timer.should_update(SAMPLE_INTERVAL_CPU_MS) { + Self::report_cpu_stats(); + } + if cpuid_timer.should_update(SAMPLE_INTERVAL_CPU_ID_MS) { + #[cfg(any(target_arch = "x86", target_arch = "x86_64"))] + Self::report_cpuid_values(); + } } if report_os_disk_stats && disk_timer.should_update(SAMPLE_INTERVAL_DISK_MS) { Self::process_disk_stats(&mut disk_stats); From 1f5986e7c3ea37b1ec7b1f7257ef682d4bb5d0cd Mon Sep 17 00:00:00 2001 From: steviez Date: Tue, 24 Jan 2023 15:37:37 -0600 Subject: [PATCH 308/465] Manual backport of #29599 for consistent metric name (#29862) --- runtime/src/bank.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/runtime/src/bank.rs b/runtime/src/bank.rs index 0fc8636593786f..b63b3ba647da70 100644 --- a/runtime/src/bank.rs +++ b/runtime/src/bank.rs @@ -1676,7 +1676,7 @@ impl Bank { apply_feature_activations_time.as_us(), i64 ), - ("activate_epoch_Us", activate_epoch_time.as_us(), i64), + ("activate_epoch_us", activate_epoch_time.as_us(), i64), ( "update_epoch_stakes_us", update_epoch_stakes_time.as_us(), From e94afeb381d9982fe4cbe55740f3fce47b2b6b95 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Tue, 24 Jan 2023 21:52:28 +0000 Subject: [PATCH 309/465] generalizes the return type of Shred::get_signed_data (backport #29446) (#29869) generalizes the return type of Shred::get_signed_data (#29446) The commit adds an associated SignedData type to Shred trait so that merkle and legacy shreds can return different types for signed_data method. This would allow legacy shreds to point to a section of the shred payload, whereas merkle shreds would compute and return the merkle root. Ultimately this would allow to remove the merkle root from the shreds binary. (cherry picked from commit 754ecf467bb0abe54307143967507e5afc4daf84) Co-authored-by: behzad nouri --- .../broadcast_duplicates_run.rs | 4 +- ledger/src/shred.rs | 49 ++++++++++--------- ledger/src/shred/legacy.rs | 16 +++--- ledger/src/shred/merkle.rs | 31 +++++++----- ledger/src/shred/shred_code.rs | 12 +++-- ledger/src/shred/shred_data.rs | 10 +++- ledger/src/shred/traits.rs | 10 ++-- 7 files changed, 80 insertions(+), 52 deletions(-) diff --git a/core/src/broadcast_stage/broadcast_duplicates_run.rs b/core/src/broadcast_stage/broadcast_duplicates_run.rs index c617ede200e459..0c414c38eb99fb 100644 --- a/core/src/broadcast_stage/broadcast_duplicates_run.rs +++ b/core/src/broadcast_stage/broadcast_duplicates_run.rs @@ -312,7 +312,7 @@ impl BroadcastRun for BroadcastDuplicatesRun { .original_last_data_shreds .lock() .unwrap() - .remove(&shred.signature()) + .remove(shred.signature()) { if cluster_partition.contains(&node.id) { info!( @@ -327,7 +327,7 @@ impl BroadcastRun for BroadcastDuplicatesRun { .partition_last_data_shreds .lock() .unwrap() - .remove(&shred.signature()) + .remove(shred.signature()) { // If the shred is part of the partition, broadcast it directly to the // partition node. This is to account for cases when the partition stake diff --git a/ledger/src/shred.rs b/ledger/src/shred.rs index 73e5759a0b8f99..5ecd6b47b0c039 100644 --- a/ledger/src/shred.rs +++ b/ledger/src/shred.rs @@ -52,7 +52,7 @@ #[cfg(test)] pub(crate) use shred_code::MAX_CODE_SHREDS_PER_SLOT; use { - self::{shred_code::ShredCode, traits::Shred as _}, + self::{merkle::MerkleRoot, shred_code::ShredCode, traits::Shred as _}, crate::blockstore::{self, MAX_DATA_SHREDS_PER_SLOT}, bitflags::bitflags, num_enum::{IntoPrimitive, TryFromPrimitive}, @@ -230,6 +230,20 @@ pub enum Shred { ShredData(ShredData), } +pub(crate) enum SignedData<'a> { + Chunk(&'a [u8]), // Chunk of payload past signature. + MerkleRoot(MerkleRoot), +} + +impl<'a> AsRef<[u8]> for SignedData<'a> { + fn as_ref(&self) -> &[u8] { + match self { + Self::Chunk(chunk) => chunk, + Self::MerkleRoot(root) => root, + } + } +} + /// Tuple which uniquely identifies a shred should it exists. #[derive(Clone, Copy, Eq, Debug, Hash, PartialEq)] pub struct ShredId(Slot, /*shred index:*/ u32, ShredType); @@ -309,7 +323,7 @@ use dispatch; impl Shred { dispatch!(fn common_header(&self) -> &ShredCommonHeader); dispatch!(fn set_signature(&mut self, signature: Signature)); - dispatch!(fn signed_data(&self) -> &[u8]); + dispatch!(fn signed_data(&self) -> Result); // Returns the portion of the shred's payload which is erasure coded. dispatch!(pub(crate) fn erasure_shard(self) -> Result, Error>); @@ -455,12 +469,13 @@ impl Shred { ErasureSetId(self.slot(), self.fec_set_index()) } - pub fn signature(&self) -> Signature { - self.common_header().signature + pub fn signature(&self) -> &Signature { + &self.common_header().signature } pub fn sign(&mut self, keypair: &Keypair) { - let signature = keypair.sign_message(self.signed_data()); + let data = self.signed_data().unwrap(); + let signature = keypair.sign_message(data.as_ref()); self.set_signature(signature); } @@ -508,8 +523,10 @@ impl Shred { #[must_use] pub fn verify(&self, pubkey: &Pubkey) -> bool { - let data = self.signed_data(); - self.signature().verify(pubkey.as_ref(), data) + match self.signed_data() { + Ok(data) => self.signature().verify(pubkey.as_ref(), data.as_ref()), + Err(_) => false, + } } // Returns true if the erasure coding of the two shreds mismatch. @@ -538,27 +555,13 @@ impl Shred { // Helper methods to extract pieces of the shred from the payload // without deserializing the entire payload. pub mod layout { - use {super::*, crate::shred::merkle::MerkleRoot, std::ops::Range}; + use {super::*, std::ops::Range}; #[cfg(test)] use { rand::{seq::SliceRandom, Rng}, std::collections::HashMap, }; - pub(crate) enum SignedData<'a> { - Chunk(&'a [u8]), - MerkleRoot(MerkleRoot), - } - - impl<'a> AsRef<[u8]> for SignedData<'a> { - fn as_ref(&self) -> &[u8] { - match self { - Self::Chunk(chunk) => chunk, - Self::MerkleRoot(root) => root, - } - } - } - fn get_shred_size(packet: &Packet) -> Option { let size = packet.data(..)?.len(); if packet.meta.repair() { @@ -1494,7 +1497,7 @@ mod tests { assert_eq!(layout::get_index(data), Some(shred.index())); assert_eq!(layout::get_version(data), Some(shred.version())); assert_eq!(layout::get_shred_id(data), Some(shred.id())); - assert_eq!(layout::get_signature(data), Some(shred.signature())); + assert_eq!(layout::get_signature(data), Some(*shred.signature())); assert_eq!(layout::get_shred_type(data).unwrap(), shred.shred_type()); match shred.shred_type() { ShredType::Code => { diff --git a/ledger/src/shred/legacy.rs b/ledger/src/shred/legacy.rs index 095ee8691b82e8..e1a077bb383554 100644 --- a/ledger/src/shred/legacy.rs +++ b/ledger/src/shred/legacy.rs @@ -48,7 +48,9 @@ pub struct ShredCode { payload: Vec, } -impl Shred for ShredData { +impl<'a> Shred<'a> for ShredData { + type SignedData = &'a [u8]; + impl_shred_common!(); // Legacy data shreds are always zero padded and // the same size as coding shreds. @@ -109,13 +111,15 @@ impl Shred for ShredData { shred_data::sanitize(self) } - fn signed_data(&self) -> &[u8] { + fn signed_data(&'a self) -> Result { debug_assert_eq!(self.payload.len(), Self::SIZE_OF_PAYLOAD); - &self.payload[SIZE_OF_SIGNATURE..] + Ok(&self.payload[SIZE_OF_SIGNATURE..]) } } -impl Shred for ShredCode { +impl<'a> Shred<'a> for ShredCode { + type SignedData = &'a [u8]; + impl_shred_common!(); const SIZE_OF_PAYLOAD: usize = shred_code::ShredCode::SIZE_OF_PAYLOAD; const SIZE_OF_HEADERS: usize = SIZE_OF_CODING_SHRED_HEADERS; @@ -171,9 +175,9 @@ impl Shred for ShredCode { shred_code::sanitize(self) } - fn signed_data(&self) -> &[u8] { + fn signed_data(&'a self) -> Result { debug_assert_eq!(self.payload.len(), Self::SIZE_OF_PAYLOAD); - &self.payload[SIZE_OF_SIGNATURE..] + Ok(&self.payload[SIZE_OF_SIGNATURE..]) } } diff --git a/ledger/src/shred/merkle.rs b/ledger/src/shred/merkle.rs index 13bc6f861f5e3a..2995f157219e90 100644 --- a/ledger/src/shred/merkle.rs +++ b/ledger/src/shred/merkle.rs @@ -91,16 +91,18 @@ impl Shred { dispatch!(fn sanitize(&self, verify_merkle_proof: bool) -> Result<(), Error>); dispatch!(fn set_merkle_branch(&mut self, merkle_branch: &MerkleBranch) -> Result<(), Error>); dispatch!(fn set_signature(&mut self, signature: Signature)); - dispatch!(fn signed_data(&self) -> &[u8]); + dispatch!(fn signed_data(&self) -> Result); #[must_use] fn verify(&self, pubkey: &Pubkey) -> bool { - let data = self.signed_data(); - self.signature().verify(pubkey.as_ref(), data) + match self.signed_data() { + Ok(data) => self.signature().verify(pubkey.as_ref(), data.as_ref()), + Err(_) => false, + } } - fn signature(&self) -> Signature { - self.common_header().signature + fn signature(&self) -> &Signature { + &self.common_header().signature } fn from_payload(shred: Vec) -> Result { @@ -419,7 +421,9 @@ impl ShredCode { } } -impl ShredTrait for ShredData { +impl<'a> ShredTrait<'a> for ShredData { + type SignedData = MerkleRoot; + impl_shred_common!(); // Also equal to: @@ -486,12 +490,14 @@ impl ShredTrait for ShredData { self.sanitize(/*verify_merkle_proof:*/ true) } - fn signed_data(&self) -> &[u8] { - self.merkle_root().map(AsRef::as_ref).unwrap_or_default() + fn signed_data(&'a self) -> Result { + self.merkle_root().copied() } } -impl ShredTrait for ShredCode { +impl<'a> ShredTrait<'a> for ShredCode { + type SignedData = MerkleRoot; + impl_shred_common!(); const SIZE_OF_PAYLOAD: usize = shred_code::ShredCode::SIZE_OF_PAYLOAD; const SIZE_OF_HEADERS: usize = SIZE_OF_CODING_SHRED_HEADERS; @@ -551,8 +557,8 @@ impl ShredTrait for ShredCode { self.sanitize(/*verify_merkle_proof:*/ true) } - fn signed_data(&self) -> &[u8] { - self.merkle_root().map(AsRef::as_ref).unwrap_or_default() + fn signed_data(&'a self) -> Result { + self.merkle_root().copied() } } @@ -1344,7 +1350,8 @@ mod test { let merkle_branch = make_merkle_branch(index, num_shreds, &tree).unwrap(); assert_eq!(merkle_branch.proof.len(), usize::from(proof_size)); shred.set_merkle_branch(&merkle_branch).unwrap(); - let signature = keypair.sign_message(shred.signed_data()); + let data = shred.signed_data().unwrap(); + let signature = keypair.sign_message(data.as_ref()); shred.set_signature(signature); assert!(shred.verify(&keypair.pubkey())); assert_matches!(shred.sanitize(/*verify_merkle_proof:*/ true), Ok(())); diff --git a/ledger/src/shred/shred_code.rs b/ledger/src/shred/shred_code.rs index 68c4f04560d89d..5e3f8d3a8cfef8 100644 --- a/ledger/src/shred/shred_code.rs +++ b/ledger/src/shred/shred_code.rs @@ -4,8 +4,8 @@ use { common::dispatch, legacy, merkle, traits::{Shred, ShredCode as ShredCodeTrait}, - CodingShredHeader, Error, ShredCommonHeader, ShredType, DATA_SHREDS_PER_FEC_BLOCK, - MAX_DATA_SHREDS_PER_SLOT, SIZE_OF_NONCE, + CodingShredHeader, Error, ShredCommonHeader, ShredType, SignedData, + DATA_SHREDS_PER_FEC_BLOCK, MAX_DATA_SHREDS_PER_SLOT, SIZE_OF_NONCE, }, shredder::ERASURE_BATCH_SIZE, }, @@ -39,12 +39,18 @@ impl ShredCode { dispatch!(pub(super) fn payload(&self) -> &Vec); dispatch!(pub(super) fn sanitize(&self) -> Result<(), Error>); dispatch!(pub(super) fn set_signature(&mut self, signature: Signature)); - dispatch!(pub(super) fn signed_data(&self) -> &[u8]); // Only for tests. dispatch!(pub(super) fn set_index(&mut self, index: u32)); dispatch!(pub(super) fn set_slot(&mut self, slot: Slot)); + pub(super) fn signed_data(&self) -> Result { + match self { + Self::Legacy(shred) => Ok(SignedData::Chunk(shred.signed_data()?)), + Self::Merkle(shred) => Ok(SignedData::MerkleRoot(shred.signed_data()?)), + } + } + pub(super) fn new_from_parity_shard( slot: Slot, index: u32, diff --git a/ledger/src/shred/shred_data.rs b/ledger/src/shred/shred_data.rs index 7e1e1e2bb0baaa..915ae29d4e3f2e 100644 --- a/ledger/src/shred/shred_data.rs +++ b/ledger/src/shred/shred_data.rs @@ -4,7 +4,7 @@ use { common::dispatch, legacy, merkle, traits::{Shred as _, ShredData as ShredDataTrait}, - DataShredHeader, Error, ShredCommonHeader, ShredFlags, ShredType, ShredVariant, + DataShredHeader, Error, ShredCommonHeader, ShredFlags, ShredType, ShredVariant, SignedData, MAX_DATA_SHREDS_PER_SLOT, }, solana_sdk::{clock::Slot, signature::Signature}, @@ -29,12 +29,18 @@ impl ShredData { dispatch!(pub(super) fn payload(&self) -> &Vec); dispatch!(pub(super) fn sanitize(&self) -> Result<(), Error>); dispatch!(pub(super) fn set_signature(&mut self, signature: Signature)); - dispatch!(pub(super) fn signed_data(&self) -> &[u8]); // Only for tests. dispatch!(pub(super) fn set_index(&mut self, index: u32)); dispatch!(pub(super) fn set_slot(&mut self, slot: Slot)); + pub(super) fn signed_data(&self) -> Result { + match self { + Self::Legacy(shred) => Ok(SignedData::Chunk(shred.signed_data()?)), + Self::Merkle(shred) => Ok(SignedData::MerkleRoot(shred.signed_data()?)), + } + } + pub(super) fn new_from_data( slot: Slot, index: u32, diff --git a/ledger/src/shred/traits.rs b/ledger/src/shred/traits.rs index 3cb9b01403e1ff..35a6c0a617af64 100644 --- a/ledger/src/shred/traits.rs +++ b/ledger/src/shred/traits.rs @@ -3,13 +3,15 @@ use { solana_sdk::{clock::Slot, signature::Signature}, }; -pub(super) trait Shred: Sized { +pub(super) trait Shred<'a>: Sized { // Total size of payload including headers, merkle // branches (if any), zero paddings, etc. const SIZE_OF_PAYLOAD: usize; // Size of common and code/data headers. const SIZE_OF_HEADERS: usize; + type SignedData: AsRef<[u8]>; + fn from_payload(shred: Vec) -> Result; fn common_header(&self) -> &ShredCommonHeader; fn sanitize(&self) -> Result<(), Error>; @@ -27,14 +29,14 @@ pub(super) trait Shred: Sized { fn erasure_shard_as_slice(&self) -> Result<&[u8], Error>; // Portion of the payload which is signed. - fn signed_data(&self) -> &[u8]; + fn signed_data(&'a self) -> Result; // Only for tests. fn set_index(&mut self, index: u32); fn set_slot(&mut self, slot: Slot); } -pub(super) trait ShredData: Shred { +pub(super) trait ShredData: for<'a> Shred<'a> { fn data_header(&self) -> &DataShredHeader; fn parent(&self) -> Result { @@ -56,7 +58,7 @@ pub(super) trait ShredData: Shred { fn data(&self) -> Result<&[u8], Error>; } -pub(super) trait ShredCode: Shred { +pub(super) trait ShredCode: for<'a> Shred<'a> { fn coding_header(&self) -> &CodingShredHeader; fn first_coding_index(&self) -> Option { From 5bb9643e27aa16fd9854025bd99da8246b497efc Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Wed, 25 Jan 2023 11:32:28 +0000 Subject: [PATCH 310/465] patches bug in sigverify-shreds when identity is hot-swapped (backport #29802) (#29875) patches bug in sigverify-shreds when identity is hot-swapped (#29802) Sigverify-shreds discards shreds from node's own leader slots: https://github.com/solana-labs/solana/blob/6baab92ab/core/src/sigverify_shreds.rs#L153-L154 But if the identity is hot-swapped the pubkey would be wrong since it is instantiated only once at startup: https://github.com/solana-labs/solana/blob/6baab92ab/core/src/tvu.rs#L168 (cherry picked from commit d75303f541fe37be3ddfb71d876b686533dbdc09) Co-authored-by: behzad nouri --- core/src/sigverify_shreds.rs | 9 ++++++--- core/src/tvu.rs | 2 +- sdk/src/signer/keypair.rs | 1 + 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/core/src/sigverify_shreds.rs b/core/src/sigverify_shreds.rs index 521fadedd0db3f..00dfd80cc1aa9d 100644 --- a/core/src/sigverify_shreds.rs +++ b/core/src/sigverify_shreds.rs @@ -1,11 +1,12 @@ use { crossbeam_channel::{Receiver, RecvTimeoutError, SendError, Sender}, + solana_gossip::cluster_info::ClusterInfo, solana_ledger::{ leader_schedule_cache::LeaderScheduleCache, shred, sigverify_shreds::verify_shreds_gpu, }, solana_perf::{self, packet::PacketBatch, recycler_cache::RecyclerCache}, solana_runtime::{bank::Bank, bank_forks::BankForks}, - solana_sdk::{clock::Slot, pubkey::Pubkey}, + solana_sdk::{clock::Slot, pubkey::Pubkey, signature::Signer}, std::{ collections::HashMap, sync::{ @@ -25,8 +26,7 @@ enum Error { } pub(crate) fn spawn_shred_sigverify( - // TODO: Hot swap will change pubkey. - self_pubkey: Pubkey, + cluster_info: Arc, bank_forks: Arc>, leader_schedule_cache: Arc, shred_fetch_receiver: Receiver, @@ -39,6 +39,9 @@ pub(crate) fn spawn_shred_sigverify( Builder::new() .name("solShredVerifr".to_string()) .spawn(move || loop { + // We can't store the pubkey outside the loop + // because the identity might be hot swapped. + let self_pubkey = cluster_info.keypair().pubkey(); match run_shred_sigverify( &self_pubkey, &bank_forks, diff --git a/core/src/tvu.rs b/core/src/tvu.rs index 4ec82901447b99..23e0b089300304 100644 --- a/core/src/tvu.rs +++ b/core/src/tvu.rs @@ -160,7 +160,7 @@ impl Tvu { let (verified_sender, verified_receiver) = unbounded(); let (retransmit_sender, retransmit_receiver) = unbounded(); let shred_sigverify = sigverify_shreds::spawn_shred_sigverify( - cluster_info.id(), + cluster_info.clone(), bank_forks.clone(), leader_schedule_cache.clone(), fetch_receiver, diff --git a/sdk/src/signer/keypair.rs b/sdk/src/signer/keypair.rs index 0983072f906216..529876248f6c7c 100644 --- a/sdk/src/signer/keypair.rs +++ b/sdk/src/signer/keypair.rs @@ -67,6 +67,7 @@ impl Keypair { } impl Signer for Keypair { + #[inline] fn pubkey(&self) -> Pubkey { Pubkey::from(self.0.public.to_bytes()) } From e8e14e72b9fbc442db912d1555541cc17d246485 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Wed, 25 Jan 2023 11:57:53 +0000 Subject: [PATCH 311/465] includes rent_epoch in vote-accounts sanity checks (backport #29861) (#29874) includes rent_epoch in vote-accounts sanity checks (#29861) https://github.com/solana-labs/solana/pull/26479 preserves rent epoch for rent-exempt accounts. Since the feature got activated, vote accounts in stakes-cache have identical rent_epoch field as the accounts in accounts-db. The commit verifies this in stakes-cache sanity checks. (cherry picked from commit 8a146361d18eda39548c0f4da54f7c6a2196f343) Co-authored-by: behzad nouri --- runtime/src/stakes.rs | 15 +++------------ 1 file changed, 3 insertions(+), 12 deletions(-) diff --git a/runtime/src/stakes.rs b/runtime/src/stakes.rs index e4fb84df62327d..f8ea7fb007bef3 100644 --- a/runtime/src/stakes.rs +++ b/runtime/src/stakes.rs @@ -235,18 +235,9 @@ impl Stakes { None => return Err(Error::VoteAccountNotFound(*pubkey)), Some(account) => account, }; - // Ignoring rent_epoch until the feature for - // preserve_rent_epoch_for_rent_exempt_accounts is activated. let vote_account = vote_account.account(); - if vote_account.lamports() != account.lamports() - || vote_account.owner() != account.owner() - || vote_account.executable() != account.executable() - || vote_account.data() != account.data() - { - error!( - "vote account mismatch: {}, {:?}, {:?}", - pubkey, vote_account, account - ); + if vote_account != &account { + error!("vote account mismatch: {pubkey}, {vote_account:?}, {account:?}"); return Err(Error::VoteAccountMismatch(*pubkey)); } } @@ -266,7 +257,7 @@ impl Stakes { if VoteState::is_correct_size_and_initialized(account.data()) && VoteAccount::try_from(account.clone()).is_ok() { - error!("vote account not cached: {}, {:?}", pubkey, account); + error!("vote account not cached: {pubkey}, {account:?}"); return Err(Error::VoteAccountNotCached(pubkey)); } } From 733e510ae65aae1e027207c206a01d9d1e22919e Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Wed, 25 Jan 2023 12:07:10 +0000 Subject: [PATCH 312/465] recovers merkle roots from shreds binary in {verify,sign}_shreds_gpu (backport #29445) (#29877) * recovers merkle roots from shreds binary in {verify,sign}_shreds_gpu (#29445) {verify,sign}_shreds_gpu need to point to offsets within the packets for the signed data. For merkle shreds this signed data is the merkle root of the erasure batch and this would necessitate embedding the merkle roots in the shreds payload. However this is wasteful and reduces shreds capacity to store data because the merkle root can already be recovered from the encoded merkle proof. Instead of pointing to offsets within the shreds payload, this commit recovers merkle roots from the merkle proofs and stores them in an allocated buffer. {verify,sign}_shreds_gpu would then point to offsets within this new buffer for the respective signed data. This would unblock us from removing merkle roots from shreds payload which would save capacity to send more data with each shred. (cherry picked from commit 9db25655f72dc3cd4362b9ef077f09054573ccee) # Conflicts: # ledger/src/sigverify_shreds.rs * resolves mergify merge conflicts Co-authored-by: behzad nouri --- ledger/src/shred.rs | 6 +- ledger/src/shred/merkle.rs | 2 +- ledger/src/sigverify_shreds.rs | 127 +++++++++++++++++++++++++-------- 3 files changed, 103 insertions(+), 32 deletions(-) diff --git a/ledger/src/shred.rs b/ledger/src/shred.rs index 5ecd6b47b0c039..e3bade08743db2 100644 --- a/ledger/src/shred.rs +++ b/ledger/src/shred.rs @@ -49,10 +49,11 @@ //! So, given a) - c), we must restrict data shred's payload length such that the entire coding //! payload can fit into one coding shred / packet. +pub(crate) use self::merkle::{MerkleRoot, SIZE_OF_MERKLE_ROOT}; #[cfg(test)] -pub(crate) use shred_code::MAX_CODE_SHREDS_PER_SLOT; +pub(crate) use self::shred_code::MAX_CODE_SHREDS_PER_SLOT; use { - self::{merkle::MerkleRoot, shred_code::ShredCode, traits::Shred as _}, + self::{shred_code::ShredCode, traits::Shred as _}, crate::blockstore::{self, MAX_DATA_SHREDS_PER_SLOT}, bitflags::bitflags, num_enum::{IntoPrimitive, TryFromPrimitive}, @@ -678,7 +679,6 @@ pub mod layout { Ok(flags & ShredFlags::SHRED_TICK_REFERENCE_MASK.bits()) } - #[cfg(test)] pub(crate) fn get_merkle_root(shred: &[u8]) -> Option { match get_shred_variant(shred).ok()? { ShredVariant::LegacyCode | ShredVariant::LegacyData => None, diff --git a/ledger/src/shred/merkle.rs b/ledger/src/shred/merkle.rs index 2995f157219e90..0670748e0089da 100644 --- a/ledger/src/shred/merkle.rs +++ b/ledger/src/shred/merkle.rs @@ -36,7 +36,7 @@ use { }; const_assert_eq!(SIZE_OF_MERKLE_ROOT, 20); -const SIZE_OF_MERKLE_ROOT: usize = std::mem::size_of::(); +pub(crate) const SIZE_OF_MERKLE_ROOT: usize = std::mem::size_of::(); const_assert_eq!(SIZE_OF_MERKLE_PROOF_ENTRY, 20); const SIZE_OF_MERKLE_PROOF_ENTRY: usize = std::mem::size_of::(); const_assert_eq!(ShredData::SIZE_OF_PAYLOAD, 1203); diff --git a/ledger/src/sigverify_shreds.rs b/ledger/src/sigverify_shreds.rs index b350947052592f..de76b2b424ee36 100644 --- a/ledger/src/sigverify_shreds.rs +++ b/ledger/src/sigverify_shreds.rs @@ -1,7 +1,7 @@ #![allow(clippy::implicit_hasher)] use { - crate::shred, - itertools::Itertools, + crate::shred::{self, MerkleRoot, SIZE_OF_MERKLE_ROOT}, + itertools::{izip, Itertools}, rayon::{prelude::*, ThreadPool}, sha2::{Digest, Sha512}, solana_metrics::inc_new_counter_debug, @@ -123,13 +123,13 @@ where resize_buffer(&mut keyvec, keyvec_size); let key_offsets: HashMap = { - let mut size = 0; + let mut next_offset = 0; keys_to_slots .into_iter() .flat_map(|(key, slots)| { - let offset = size; - size += std::mem::size_of::(); - keyvec[offset..size].copy_from_slice(key.as_ref()); + let offset = next_offset; + next_offset += std::mem::size_of::(); + keyvec[offset..next_offset].copy_from_slice(key.as_ref()); slots.into_iter().zip(repeat(offset)) }) .collect() @@ -145,6 +145,48 @@ where (keyvec, offsets) } +// Recovers merkle roots from shreds binary. +fn get_merkle_roots( + packets: &[PacketBatch], + recycler_cache: &RecyclerCache, +) -> ( + PinnedVec, // Merkle roots + Vec>, // Offsets +) { + let merkle_roots: Vec> = SIGVERIFY_THREAD_POOL.install(|| { + packets + .par_iter() + .flat_map(|packets| { + packets.par_iter().map(|packet| { + if packet.meta.discard() { + return None; + } + let shred = shred::layout::get_shred(packet)?; + shred::layout::get_merkle_root(shred) + }) + }) + .collect() + }); + let num_merkle_roots = merkle_roots.iter().flatten().count(); + let mut buffer = recycler_cache.buffer().allocate("shred_gpu_merkle_roots"); + buffer.set_pinnable(); + resize_buffer(&mut buffer, num_merkle_roots * SIZE_OF_MERKLE_ROOT); + let offsets = { + let mut next_offset = 0; + merkle_roots + .into_iter() + .map(|root| { + let root = root?; + let offset = next_offset; + next_offset += SIZE_OF_MERKLE_ROOT; + buffer[offset..next_offset].copy_from_slice(&root); + Some(offset) + }) + .collect() + }; + (buffer, offsets) +} + // Resizes the buffer to >= size and a multiple of // std::mem::size_of::(). fn resize_buffer(buffer: &mut PinnedVec, size: usize) { @@ -156,9 +198,21 @@ fn resize_buffer(buffer: &mut PinnedVec, size: usize) { buffer.resize(size, 0u8); } +fn elems_from_buffer(buffer: &PinnedVec) -> perf_libs::Elems { + // resize_buffer ensures that buffer size is a multiple of Packet size. + debug_assert_eq!(buffer.len() % std::mem::size_of::(), 0); + let num_packets = buffer.len() / std::mem::size_of::(); + perf_libs::Elems { + #[allow(clippy::cast_ptr_alignment)] + elems: buffer.as_ptr() as *const solana_sdk::packet::Packet, + num: num_packets as u32, + } +} + fn shred_gpu_offsets( offset: usize, batches: &[PacketBatch], + merkle_roots_offsets: impl IntoIterator>, recycler_cache: &RecyclerCache, ) -> (TxOffset, TxOffset, TxOffset) { fn add_offset(range: Range, offset: usize) -> Range { @@ -174,15 +228,22 @@ fn shred_gpu_offsets( offset.checked_add(std::mem::size_of::()) }); let packets = batches.iter().flatten(); - for (offset, packet) in offsets.zip(packets) { + for (offset, packet, merkle_root_offset) in izip!(offsets, packets, merkle_roots_offsets) { let sig = shred::layout::get_signature_range(); let sig = add_offset(sig, offset); debug_assert_eq!(sig.end - sig.start, std::mem::size_of::()); - let shred = shred::layout::get_shred(packet); // Signature may verify for an empty message but the packet will be // discarded during deserialization. - let msg = shred.and_then(shred::layout::get_signed_data_offsets); - let msg = add_offset(msg.unwrap_or_default(), offset); + let msg: Range = match merkle_root_offset { + None => { + let shred = shred::layout::get_shred(packet); + let msg = shred.and_then(shred::layout::get_signed_data_offsets); + add_offset(msg.unwrap_or_default(), offset) + } + Some(merkle_root_offset) => { + merkle_root_offset..merkle_root_offset + SIZE_OF_MERKLE_ROOT + } + }; signature_offsets.push(sig.start as u32); msg_start_offsets.push(msg.start as u32); let msg_size = msg.end.saturating_sub(msg.start); @@ -203,19 +264,24 @@ pub fn verify_shreds_gpu( let (pubkeys, pubkey_offsets) = slot_key_data_for_gpu(batches, slot_leaders, recycler_cache); //HACK: Pubkeys vector is passed along as a `PacketBatch` buffer to the GPU //TODO: GPU needs a more opaque interface, which can handle variable sized structures for data - let offset = pubkeys.len(); + let (merkle_roots, merkle_roots_offsets) = get_merkle_roots(batches, recycler_cache); + // Merkle roots are placed after pubkeys; adjust offsets accordingly. + let merkle_roots_offsets = { + let shift = pubkeys.len(); + merkle_roots_offsets + .into_iter() + .map(move |offset| Some(offset? + shift)) + }; + let offset = pubkeys.len() + merkle_roots.len(); let (signature_offsets, msg_start_offsets, msg_sizes) = - shred_gpu_offsets(offset, batches, recycler_cache); + shred_gpu_offsets(offset, batches, merkle_roots_offsets, recycler_cache); let mut out = recycler_cache.buffer().allocate("out_buffer"); out.set_pinnable(); out.resize(signature_offsets.len(), 0u8); - debug_assert_eq!(pubkeys.len() % std::mem::size_of::(), 0); - let num_pubkey_packets = pubkeys.len() / std::mem::size_of::(); - let mut elems = vec![perf_libs::Elems { - #[allow(clippy::cast_ptr_alignment)] - elems: pubkeys.as_ptr() as *const solana_sdk::packet::Packet, - num: num_pubkey_packets as u32, - }]; + let mut elems = vec![ + elems_from_buffer(&pubkeys), + elems_from_buffer(&merkle_roots), + ]; elems.extend(batches.iter().map(|batch| perf_libs::Elems { elems: batch.as_ptr(), num: batch.len() as u32, @@ -327,22 +393,27 @@ pub fn sign_shreds_gpu( let mut secret_offsets = recycler_cache.offsets().allocate("secret_offsets"); secret_offsets.resize(packet_count, pubkey_size as u32); - let offset: usize = pinned_keypair.len(); + let (merkle_roots, merkle_roots_offsets) = get_merkle_roots(batches, recycler_cache); + // Merkle roots are placed after the keypair; adjust offsets accordingly. + let merkle_roots_offsets = { + let shift = pinned_keypair.len(); + merkle_roots_offsets + .into_iter() + .map(move |offset| Some(offset? + shift)) + }; + let offset = pinned_keypair.len() + merkle_roots.len(); trace!("offset: {}", offset); let (signature_offsets, msg_start_offsets, msg_sizes) = - shred_gpu_offsets(offset, batches, recycler_cache); + shred_gpu_offsets(offset, batches, merkle_roots_offsets, recycler_cache); let total_sigs = signature_offsets.len(); let mut signatures_out = recycler_cache.buffer().allocate("ed25519 signatures"); signatures_out.set_pinnable(); signatures_out.resize(total_sigs * sig_size, 0); - debug_assert_eq!(pinned_keypair.len() % std::mem::size_of::(), 0); - let num_keypair_packets = pinned_keypair.len() / std::mem::size_of::(); - let mut elems = vec![perf_libs::Elems { - #[allow(clippy::cast_ptr_alignment)] - elems: pinned_keypair.as_ptr() as *const solana_sdk::packet::Packet, - num: num_keypair_packets as u32, - }]; + let mut elems = vec![ + elems_from_buffer(pinned_keypair), + elems_from_buffer(&merkle_roots), + ]; elems.extend(batches.iter().map(|batch| perf_libs::Elems { elems: batch.as_ptr(), num: batch.len() as u32, From c98eaa6ab8a7d019333caea3731c92513175670b Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Wed, 25 Jan 2023 14:33:21 +0000 Subject: [PATCH 313/465] simplifies sigverify copy_return_values (backport #29495) (#29896) simplifies sigverify copy_return_values (#29495) (cherry picked from commit b71cb9d9c7d854d81478c1c6db45733e12fa7506) Co-authored-by: behzad nouri --- ledger/src/sigverify_shreds.rs | 7 +-- perf/src/sigverify.rs | 78 ++++++++++++++++++++++++---------- 2 files changed, 58 insertions(+), 27 deletions(-) diff --git a/ledger/src/sigverify_shreds.rs b/ledger/src/sigverify_shreds.rs index de76b2b424ee36..9c547e378198e1 100644 --- a/ledger/src/sigverify_shreds.rs +++ b/ledger/src/sigverify_shreds.rs @@ -313,12 +313,9 @@ pub fn verify_shreds_gpu( trace!("out buf {:?}", out); // Each shred has exactly one signature. - let v_sig_lens: Vec<_> = batches - .iter() - .map(|batch| vec![1u32; batch.len()]) - .collect(); + let v_sig_lens = batches.iter().map(|batch| repeat(1u32).take(batch.len())); let mut rvs: Vec<_> = batches.iter().map(|batch| vec![0u8; batch.len()]).collect(); - sigverify::copy_return_values(&v_sig_lens, &out, &mut rvs); + sigverify::copy_return_values(v_sig_lens, &out, &mut rvs); inc_new_counter_debug!("ed25519_shred_verify_gpu", out.len()); rvs diff --git a/perf/src/sigverify.rs b/perf/src/sigverify.rs index 4d7d144887c188..f4fcd689414c2e 100644 --- a/perf/src/sigverify.rs +++ b/perf/src/sigverify.rs @@ -662,26 +662,18 @@ pub fn ed25519_verify_disabled(batches: &mut [PacketBatch]) { inc_new_counter_debug!("ed25519_verify_disabled", packet_count); } -pub fn copy_return_values(sig_lens: &[Vec], out: &PinnedVec, rvs: &mut [Vec]) { - let mut num = 0; - for (vs, sig_vs) in rvs.iter_mut().zip(sig_lens.iter()) { - for (v, sig_v) in vs.iter_mut().zip(sig_vs.iter()) { - if *sig_v == 0 { - *v = 0; - } else { - let mut vout = 1; - for _ in 0..*sig_v { - if 0 == out[num] { - vout = 0; - } - num = num.saturating_add(1); - } - *v = vout; - } - if *v != 0 { - trace!("VERIFIED PACKET!!!!!"); - } - } +pub fn copy_return_values(sig_lens: I, out: &PinnedVec, rvs: &mut [Vec]) +where + I: IntoIterator, + T: IntoIterator, +{ + debug_assert!(rvs.iter().flatten().all(|&rv| rv == 0u8)); + let mut offset = 0usize; + let rvs = rvs.iter_mut().flatten(); + for (k, rv) in sig_lens.into_iter().flatten().zip(rvs) { + let out = out[offset..].iter().take(k as usize).all(|&x| x == 1u8); + *rv = u8::from(k != 0u32 && out); + offset = offset.saturating_add(k as usize); } } @@ -794,7 +786,7 @@ pub fn ed25519_verify( } } trace!("done verify"); - copy_return_values(&sig_lens, &out, &mut rvs); + copy_return_values(sig_lens, &out, &mut rvs); mark_disabled(batches, &rvs); inc_new_counter_debug!("ed25519_verify_gpu", valid_packet_count); } @@ -818,7 +810,10 @@ mod tests { signature::{Keypair, Signature, Signer}, transaction::Transaction, }, - std::sync::atomic::{AtomicU64, Ordering}, + std::{ + iter::repeat_with, + sync::atomic::{AtomicU64, Ordering}, + }, }; const SIG_OFFSET: usize = 1; @@ -834,6 +829,45 @@ mod tests { None } + #[test] + fn test_copy_return_values() { + let mut rng = rand::thread_rng(); + let sig_lens: Vec> = { + let size = rng.gen_range(0, 64); + repeat_with(|| { + let size = rng.gen_range(0, 16); + repeat_with(|| rng.gen_range(0, 5)).take(size).collect() + }) + .take(size) + .collect() + }; + let out: Vec>> = sig_lens + .iter() + .map(|sig_lens| { + sig_lens + .iter() + .map(|&size| repeat_with(|| rng.gen()).take(size as usize).collect()) + .collect() + }) + .collect(); + let expected: Vec> = out + .iter() + .map(|out| { + out.iter() + .map(|out| u8::from(!out.is_empty() && out.iter().all(|&k| k))) + .collect() + }) + .collect(); + let out = + PinnedVec::::from_vec(out.into_iter().flatten().flatten().map(u8::from).collect()); + let mut rvs: Vec> = sig_lens + .iter() + .map(|sig_lens| vec![0u8; sig_lens.len()]) + .collect(); + copy_return_values(sig_lens, &out, &mut rvs); + assert_eq!(rvs, expected); + } + #[test] fn test_mark_disabled() { let batch_size = 1; From 60d67b0bbb5f3b1c507bc745905e737d3b2426ac Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Wed, 25 Jan 2023 17:35:49 +0000 Subject: [PATCH 314/465] renames ContactInfo to LegacyContactInfo (backport #29566) (#29898) * renames ContactInfo to LegacyContactInfo (#29566) Working towards adding a new ContactInfo where new sockets can be added in a backward compatible way. (cherry picked from commit 8c212f59ad4a1953ad7f4160be56f7ce11d422be) # Conflicts: # core/src/accounts_hash_verifier.rs # core/src/retransmit_stage.rs # core/tests/epoch_accounts_hash.rs # gossip/src/cluster_info.rs # gossip/src/crds_gossip_push.rs # validator/src/admin_rpc_service.rs * resolves mergify merge conflicts Co-authored-by: behzad nouri --- core/benches/cluster_info.rs | 2 +- core/benches/cluster_nodes.rs | 2 +- core/benches/retransmit_stage.rs | 2 +- core/src/accounts_hash_verifier.rs | 5 +- core/src/ancestor_hashes_service.rs | 2 +- core/src/banking_stage.rs | 6 +- core/src/broadcast_stage.rs | 2 +- .../broadcast_duplicates_run.rs | 2 +- .../broadcast_fake_shreds_run.rs | 2 +- core/src/cluster_nodes.rs | 4 +- core/src/cluster_slots.rs | 3 +- core/src/repair_service.rs | 4 +- core/src/retransmit_stage.rs | 4 +- core/src/serve_repair.rs | 16 ++-- core/src/validator.rs | 2 +- core/src/window_service.rs | 2 +- core/tests/snapshots.rs | 4 +- dos/src/main.rs | 2 +- gossip/src/cluster_info.rs | 39 ++++---- gossip/src/cluster_info_metrics.rs | 8 +- gossip/src/crds.rs | 76 +++++++-------- gossip/src/crds_entry.rs | 8 +- gossip/src/crds_gossip.rs | 6 +- gossip/src/crds_gossip_pull.rs | 95 +++++++++---------- gossip/src/crds_gossip_push.rs | 90 ++++++++---------- gossip/src/crds_value.rs | 53 +++++------ gossip/src/gossip_service.rs | 2 +- ...contact_info.rs => legacy_contact_info.rs} | 48 +++++----- gossip/src/lib.rs | 4 +- gossip/src/main.rs | 4 +- gossip/tests/cluster_info.rs | 2 +- gossip/tests/crds_gossip.rs | 24 ++--- gossip/tests/gossip.rs | 2 +- local-cluster/src/cluster.rs | 2 +- local-cluster/src/cluster_tests.rs | 2 +- local-cluster/src/local_cluster.rs | 3 +- rpc/src/cluster_tpu_info.rs | 2 +- rpc/src/rpc.rs | 6 +- rpc/src/rpc_health.rs | 4 +- rpc/src/rpc_service.rs | 2 +- validator/src/admin_rpc_service.rs | 4 +- validator/src/bootstrap.rs | 2 +- validator/src/main.rs | 2 +- 43 files changed, 281 insertions(+), 275 deletions(-) rename gossip/src/{contact_info.rs => legacy_contact_info.rs} (89%) diff --git a/core/benches/cluster_info.rs b/core/benches/cluster_info.rs index ea12f7d08959ce..2c6df51cca75b5 100644 --- a/core/benches/cluster_info.rs +++ b/core/benches/cluster_info.rs @@ -12,7 +12,7 @@ use { }, solana_gossip::{ cluster_info::{ClusterInfo, Node}, - contact_info::ContactInfo, + legacy_contact_info::LegacyContactInfo as ContactInfo, }, solana_ledger::{ genesis_utils::{create_genesis_config, GenesisConfigInfo}, diff --git a/core/benches/cluster_nodes.rs b/core/benches/cluster_nodes.rs index e9f74bc9b947b4..2201a73f2f7adb 100644 --- a/core/benches/cluster_nodes.rs +++ b/core/benches/cluster_nodes.rs @@ -8,7 +8,7 @@ use { cluster_nodes::{make_test_cluster, new_cluster_nodes, ClusterNodes}, retransmit_stage::RetransmitStage, }, - solana_gossip::contact_info::ContactInfo, + solana_gossip::legacy_contact_info::LegacyContactInfo as ContactInfo, solana_ledger::{ genesis_utils::{create_genesis_config, GenesisConfigInfo}, shred::{Shred, ShredFlags}, diff --git a/core/benches/retransmit_stage.rs b/core/benches/retransmit_stage.rs index bad02d043a51f5..ff647525dfc2d9 100644 --- a/core/benches/retransmit_stage.rs +++ b/core/benches/retransmit_stage.rs @@ -10,7 +10,7 @@ use { solana_entry::entry::Entry, solana_gossip::{ cluster_info::{ClusterInfo, Node}, - contact_info::ContactInfo, + legacy_contact_info::LegacyContactInfo as ContactInfo, }, solana_ledger::{ genesis_utils::{create_genesis_config, GenesisConfigInfo}, diff --git a/core/src/accounts_hash_verifier.rs b/core/src/accounts_hash_verifier.rs index b8bc425c4a33d3..70e967f7387dad 100644 --- a/core/src/accounts_hash_verifier.rs +++ b/core/src/accounts_hash_verifier.rs @@ -334,7 +334,10 @@ impl AccountsHashVerifier { mod tests { use { super::*, - solana_gossip::{cluster_info::make_accounts_hashes_message, contact_info::ContactInfo}, + solana_gossip::{ + cluster_info::make_accounts_hashes_message, + legacy_contact_info::LegacyContactInfo as ContactInfo, + }, solana_runtime::{ rent_collector::RentCollector, snapshot_utils::{ArchiveFormat, SnapshotVersion}, diff --git a/core/src/ancestor_hashes_service.rs b/core/src/ancestor_hashes_service.rs index 48e1c07dd1478e..6ecf140decbd5f 100644 --- a/core/src/ancestor_hashes_service.rs +++ b/core/src/ancestor_hashes_service.rs @@ -771,7 +771,7 @@ mod test { }, solana_gossip::{ cluster_info::{ClusterInfo, Node}, - contact_info::ContactInfo, + legacy_contact_info::LegacyContactInfo as ContactInfo, }, solana_ledger::{blockstore::make_many_slot_entries, get_tmp_ledger_path, shred::Nonce}, solana_runtime::{accounts_background_service::AbsRequestSender, bank_forks::BankForks}, diff --git a/core/src/banking_stage.rs b/core/src/banking_stage.rs index 0b7b4e21f8e170..fb865b7ac86536 100644 --- a/core/src/banking_stage.rs +++ b/core/src/banking_stage.rs @@ -24,7 +24,9 @@ use { min_max_heap::MinMaxHeap, solana_client::{connection_cache::ConnectionCache, tpu_connection::TpuConnection}, solana_entry::entry::hash_transactions, - solana_gossip::{cluster_info::ClusterInfo, contact_info::ContactInfo}, + solana_gossip::{ + cluster_info::ClusterInfo, legacy_contact_info::LegacyContactInfo as ContactInfo, + }, solana_ledger::{ blockstore_processor::TransactionStatusSender, token_balances::collect_token_balances, }, @@ -2308,7 +2310,7 @@ mod tests { crossbeam_channel::{unbounded, Receiver}, solana_address_lookup_table_program::state::{AddressLookupTable, LookupTableMeta}, solana_entry::entry::{next_entry, next_versioned_entry, Entry, EntrySlice}, - solana_gossip::{cluster_info::Node, contact_info::ContactInfo}, + solana_gossip::cluster_info::Node, solana_ledger::{ blockstore::{entries_to_test_shreds, Blockstore}, genesis_utils::{create_genesis_config, GenesisConfigInfo}, diff --git a/core/src/broadcast_stage.rs b/core/src/broadcast_stage.rs index a42c8a68851037..3609569b7ca85e 100644 --- a/core/src/broadcast_stage.rs +++ b/core/src/broadcast_stage.rs @@ -16,7 +16,7 @@ use { itertools::Itertools, solana_gossip::{ cluster_info::{ClusterInfo, ClusterInfoError}, - contact_info::ContactInfo, + legacy_contact_info::LegacyContactInfo as ContactInfo, }, solana_ledger::{blockstore::Blockstore, shred::Shred}, solana_measure::measure::Measure, diff --git a/core/src/broadcast_stage/broadcast_duplicates_run.rs b/core/src/broadcast_stage/broadcast_duplicates_run.rs index 0c414c38eb99fb..29f901c3ad4e66 100644 --- a/core/src/broadcast_stage/broadcast_duplicates_run.rs +++ b/core/src/broadcast_stage/broadcast_duplicates_run.rs @@ -3,7 +3,7 @@ use { crate::cluster_nodes::ClusterNodesCache, itertools::Itertools, solana_entry::entry::Entry, - solana_gossip::contact_info::ContactInfo, + solana_gossip::legacy_contact_info::LegacyContactInfo as ContactInfo, solana_ledger::shred::{ProcessShredsStats, ReedSolomonCache, Shredder}, solana_sdk::{ hash::Hash, diff --git a/core/src/broadcast_stage/broadcast_fake_shreds_run.rs b/core/src/broadcast_stage/broadcast_fake_shreds_run.rs index 69aaf410af9123..f035abf13b90ca 100644 --- a/core/src/broadcast_stage/broadcast_fake_shreds_run.rs +++ b/core/src/broadcast_stage/broadcast_fake_shreds_run.rs @@ -159,7 +159,7 @@ impl BroadcastRun for BroadcastFakeShredsRun { mod tests { use { super::*, - solana_gossip::contact_info::ContactInfo, + solana_gossip::legacy_contact_info::LegacyContactInfo as ContactInfo, solana_streamer::socket::SocketAddrSpace, std::net::{IpAddr, Ipv4Addr, SocketAddr}, }; diff --git a/core/src/cluster_nodes.rs b/core/src/cluster_nodes.rs index d500b9452e1dba..633d746687d507 100644 --- a/core/src/cluster_nodes.rs +++ b/core/src/cluster_nodes.rs @@ -6,10 +6,10 @@ use { rand_chacha::ChaChaRng, solana_gossip::{ cluster_info::{compute_retransmit_peers, ClusterInfo, DATA_PLANE_FANOUT}, - contact_info::ContactInfo, crds::GossipRoute, crds_gossip_pull::CRDS_GOSSIP_PULL_CRDS_TIMEOUT_MS, crds_value::{CrdsData, CrdsValue}, + legacy_contact_info::LegacyContactInfo as ContactInfo, weighted_shuffle::WeightedShuffle, }, solana_ledger::shred::ShredId, @@ -486,7 +486,7 @@ pub fn make_test_cluster( let mut gossip_crds = cluster_info.gossip.crds.write().unwrap(); // First node is pushed to crds table by ClusterInfo constructor. for node in nodes.iter().skip(1) { - let node = CrdsData::ContactInfo(node.clone()); + let node = CrdsData::LegacyContactInfo(node.clone()); let node = CrdsValue::new_unsigned(node); assert_eq!( gossip_crds.insert(node, now, GossipRoute::LocalMessage), diff --git a/core/src/cluster_slots.rs b/core/src/cluster_slots.rs index 6f43a2ac8d2092..be22ed7024fa3a 100644 --- a/core/src/cluster_slots.rs +++ b/core/src/cluster_slots.rs @@ -1,7 +1,8 @@ use { itertools::Itertools, solana_gossip::{ - cluster_info::ClusterInfo, contact_info::ContactInfo, crds::Cursor, epoch_slots::EpochSlots, + cluster_info::ClusterInfo, crds::Cursor, epoch_slots::EpochSlots, + legacy_contact_info::LegacyContactInfo as ContactInfo, }, solana_runtime::{bank::Bank, epoch_stakes::NodeIdToVoteAccounts}, solana_sdk::{ diff --git a/core/src/repair_service.rs b/core/src/repair_service.rs index 07c4d89967dc43..854a81854460f4 100644 --- a/core/src/repair_service.rs +++ b/core/src/repair_service.rs @@ -727,7 +727,9 @@ impl RepairService { mod test { use { super::*, - solana_gossip::{cluster_info::Node, contact_info::ContactInfo}, + solana_gossip::{ + cluster_info::Node, legacy_contact_info::LegacyContactInfo as ContactInfo, + }, solana_ledger::{ blockstore::{ make_chaining_slot_entries, make_many_slot_entries, make_slot_entries, Blockstore, diff --git a/core/src/retransmit_stage.rs b/core/src/retransmit_stage.rs index c0db208195fd09..8f4374f93071bb 100644 --- a/core/src/retransmit_stage.rs +++ b/core/src/retransmit_stage.rs @@ -11,7 +11,9 @@ use { lru::LruCache, rayon::{prelude::*, ThreadPool, ThreadPoolBuilder}, solana_client::rpc_response::SlotUpdate, - solana_gossip::{cluster_info::ClusterInfo, contact_info::ContactInfo}, + solana_gossip::{ + cluster_info::ClusterInfo, legacy_contact_info::LegacyContactInfo as ContactInfo, + }, solana_ledger::{ leader_schedule_cache::LeaderScheduleCache, shred::{self, ShredId}, diff --git a/core/src/serve_repair.rs b/core/src/serve_repair.rs index 7acd9f0d0f4b8e..5e466f39b00d86 100644 --- a/core/src/serve_repair.rs +++ b/core/src/serve_repair.rs @@ -15,7 +15,7 @@ use { }, solana_gossip::{ cluster_info::{ClusterInfo, ClusterInfoError}, - contact_info::ContactInfo, + legacy_contact_info::{LegacyContactInfo as ContactInfo, LegacyContactInfo}, ping_pong::{self, PingCache, Pong}, weighted_shuffle::WeightedShuffle, }, @@ -204,13 +204,13 @@ pub(crate) type Ping = ping_pong::Ping<[u8; REPAIR_PING_TOKEN_SIZE]>; /// Window protocol messages #[derive(Serialize, Deserialize, Debug)] pub enum RepairProtocol { - LegacyWindowIndex(ContactInfo, Slot, u64), - LegacyHighestWindowIndex(ContactInfo, Slot, u64), - LegacyOrphan(ContactInfo, Slot), - LegacyWindowIndexWithNonce(ContactInfo, Slot, u64, Nonce), - LegacyHighestWindowIndexWithNonce(ContactInfo, Slot, u64, Nonce), - LegacyOrphanWithNonce(ContactInfo, Slot, Nonce), - LegacyAncestorHashes(ContactInfo, Slot, Nonce), + LegacyWindowIndex(LegacyContactInfo, Slot, u64), + LegacyHighestWindowIndex(LegacyContactInfo, Slot, u64), + LegacyOrphan(LegacyContactInfo, Slot), + LegacyWindowIndexWithNonce(LegacyContactInfo, Slot, u64, Nonce), + LegacyHighestWindowIndexWithNonce(LegacyContactInfo, Slot, u64, Nonce), + LegacyOrphanWithNonce(LegacyContactInfo, Slot, Nonce), + LegacyAncestorHashes(LegacyContactInfo, Slot, Nonce), Pong(ping_pong::Pong), WindowIndex { header: RepairRequestHeader, diff --git a/core/src/validator.rs b/core/src/validator.rs index 9d06c9d61577e4..74da81d07b2967 100644 --- a/core/src/validator.rs +++ b/core/src/validator.rs @@ -33,9 +33,9 @@ use { ClusterInfo, Node, DEFAULT_CONTACT_DEBUG_INTERVAL_MILLIS, DEFAULT_CONTACT_SAVE_INTERVAL_MILLIS, }, - contact_info::ContactInfo, crds_gossip_pull::CRDS_GOSSIP_PULL_CRDS_TIMEOUT_MS, gossip_service::GossipService, + legacy_contact_info::LegacyContactInfo as ContactInfo, }, solana_ledger::{ bank_forks_utils, diff --git a/core/src/window_service.rs b/core/src/window_service.rs index 5e7d0e4bd5b0dc..9fccd86d6e8db6 100644 --- a/core/src/window_service.rs +++ b/core/src/window_service.rs @@ -483,7 +483,7 @@ mod test { use { super::*, solana_entry::entry::{create_ticks, Entry}, - solana_gossip::contact_info::ContactInfo, + solana_gossip::legacy_contact_info::LegacyContactInfo as ContactInfo, solana_ledger::{ blockstore::{make_many_slot_entries, Blockstore}, get_tmp_ledger_path, diff --git a/core/tests/snapshots.rs b/core/tests/snapshots.rs index 505ccb81d518ef..0e57371a37ce69 100644 --- a/core/tests/snapshots.rs +++ b/core/tests/snapshots.rs @@ -10,7 +10,9 @@ use { accounts_hash_verifier::AccountsHashVerifier, snapshot_packager_service::SnapshotPackagerService, }, - solana_gossip::{cluster_info::ClusterInfo, contact_info::ContactInfo}, + solana_gossip::{ + cluster_info::ClusterInfo, legacy_contact_info::LegacyContactInfo as ContactInfo, + }, solana_runtime::{ accounts_background_service::{ AbsRequestHandler, AbsRequestSender, AccountsBackgroundService, SnapshotRequestHandler, diff --git a/dos/src/main.rs b/dos/src/main.rs index f86ca781d710e0..fa9c897f966372 100644 --- a/dos/src/main.rs +++ b/dos/src/main.rs @@ -53,8 +53,8 @@ use { solana_core::serve_repair::{RepairProtocol, RepairRequestHeader, ServeRepair}, solana_dos::cli::*, solana_gossip::{ - contact_info::ContactInfo, gossip_service::{discover, get_multi_client}, + legacy_contact_info::LegacyContactInfo as ContactInfo, }, solana_measure::measure::Measure, solana_sdk::{ diff --git a/gossip/src/cluster_info.rs b/gossip/src/cluster_info.rs index a7ca2793dac1ac..6c72c03c8b6247 100644 --- a/gossip/src/cluster_info.rs +++ b/gossip/src/cluster_info.rs @@ -24,7 +24,6 @@ use { cluster_info_metrics::{ submit_gossip_stats, Counter, GossipStats, ScopedTimer, TimedGuard, }, - contact_info::ContactInfo, crds::{Crds, Cursor, GossipRoute}, crds_gossip::CrdsGossip, crds_gossip_error::CrdsGossipError, @@ -36,6 +35,7 @@ use { duplicate_shred::DuplicateShred, epoch_slots::EpochSlots, gossip_error::GossipError, + legacy_contact_info::LegacyContactInfo as ContactInfo, ping_pong::{self, PingCache, Pong}, socketaddr, socketaddr_any, weighted_shuffle::WeightedShuffle, @@ -267,7 +267,7 @@ pub fn make_accounts_hashes_message( pub(crate) type Ping = ping_pong::Ping<[u8; GOSSIP_PING_TOKEN_SIZE]>; // TODO These messages should go through the gpu pipeline for spam filtering -#[frozen_abi(digest = "C1nR7B7CgMyUYo6h3z2KXcS38JSwF6y8jmZ6Y9Cz7XEd")] +#[frozen_abi(digest = "32XMrR8yTPMsw7TASQDinrbcB4bdVGyLeTvQrk95hS4i")] #[derive(Serialize, Deserialize, Debug, AbiEnumVisitor, AbiExample)] #[allow(clippy::large_enum_variant)] pub(crate) enum Protocol { @@ -377,7 +377,7 @@ impl Sanitize for Protocol { fn retain_staked(values: &mut Vec, stakes: &HashMap) { values.retain(|value| { match value.data { - CrdsData::ContactInfo(_) => true, + CrdsData::LegacyContactInfo(_) => true, // May Impact new validators starting up without any stake yet. CrdsData::Vote(_, _) => true, // Unstaked nodes can still help repair. @@ -471,7 +471,7 @@ impl ClusterInfo { let now = timestamp(); self.my_contact_info.write().unwrap().wallclock = now; let entries: Vec<_> = vec![ - CrdsData::ContactInfo(self.my_contact_info()), + CrdsData::LegacyContactInfo(self.my_contact_info()), CrdsData::NodeInstance(self.instance.read().unwrap().with_wallclock(now)), ] .into_iter() @@ -524,7 +524,8 @@ impl ClusterInfo { // TODO kill insert_info, only used by tests pub fn insert_info(&self, contact_info: ContactInfo) { - let value = CrdsValue::new_signed(CrdsData::ContactInfo(contact_info), &self.keypair()); + let value = + CrdsValue::new_signed(CrdsData::LegacyContactInfo(contact_info), &self.keypair()); let mut gossip_crds = self.gossip.crds.write().unwrap(); let _ = gossip_crds.insert(value, timestamp(), GossipRoute::LocalMessage); } @@ -1359,7 +1360,7 @@ impl ClusterInfo { fn insert_self(&self) { let value = CrdsValue::new_signed( - CrdsData::ContactInfo(self.my_contact_info()), + CrdsData::LegacyContactInfo(self.my_contact_info()), &self.keypair(), ); let mut gossip_crds = self.gossip.crds.write().unwrap(); @@ -1495,7 +1496,7 @@ impl ClusterInfo { self.gossip.mark_pull_request_creation_time(peer.id, now); } } - let self_info = CrdsData::ContactInfo(self.my_contact_info()); + let self_info = CrdsData::LegacyContactInfo(self.my_contact_info()); let self_info = CrdsValue::new_signed(self_info, &self.keypair()); let pulls = pulls .into_iter() @@ -2033,7 +2034,7 @@ impl ClusterInfo { score }; let score = match response.data { - CrdsData::ContactInfo(_) => 2 * score, + CrdsData::LegacyContactInfo(_) => 2 * score, _ => score, }; ((addr, response), score) @@ -3081,7 +3082,7 @@ fn filter_on_shred_version( if crds.get_shred_version(from) == Some(self_shred_version) { values.retain(|value| match &value.data { // Allow contact-infos so that shred-versions are updated. - CrdsData::ContactInfo(_) => true, + CrdsData::LegacyContactInfo(_) => true, CrdsData::NodeInstance(_) => true, // Only retain values with the same shred version. _ => crds.get_shred_version(&value.pubkey()) == Some(self_shred_version), @@ -3090,7 +3091,7 @@ fn filter_on_shred_version( values.retain(|value| match &value.data { // Allow node to update its own contact info in case their // shred-version changes - CrdsData::ContactInfo(node) => node.id == *from, + CrdsData::LegacyContactInfo(node) => node.id == *from, CrdsData::NodeInstance(_) => true, _ => false, }) @@ -3103,7 +3104,7 @@ fn filter_on_shred_version( match &mut msg { Protocol::PullRequest(_, caller) => match &caller.data { // Allow spy nodes with shred-verion == 0 to pull from other nodes. - CrdsData::ContactInfo(node) + CrdsData::LegacyContactInfo(node) if node.shred_version == 0 || node.shred_version == self_shred_version => { Some(msg) @@ -3424,7 +3425,7 @@ RPC Enabled Nodes: 1"#; fn test_crds_values(pubkey: Pubkey) -> Vec { let entrypoint = ContactInfo::new_localhost(&pubkey, timestamp()); - let entrypoint_crdsvalue = CrdsValue::new_unsigned(CrdsData::ContactInfo(entrypoint)); + let entrypoint_crdsvalue = CrdsValue::new_unsigned(CrdsData::LegacyContactInfo(entrypoint)); vec![entrypoint_crdsvalue] } @@ -3627,7 +3628,7 @@ RPC Enabled Nodes: 1"#; let cluster_info = ClusterInfo::new(d, Arc::new(Keypair::new()), SocketAddrSpace::Unspecified); let d = ContactInfo::new_localhost(&solana_sdk::pubkey::new_rand(), timestamp()); - let label = CrdsValueLabel::ContactInfo(d.id); + let label = CrdsValueLabel::LegacyContactInfo(d.id); cluster_info.insert_info(d); let gossip_crds = cluster_info.gossip.crds.read().unwrap(); assert!(gossip_crds.get::<&CrdsValue>(&label).is_some()); @@ -4004,7 +4005,7 @@ RPC Enabled Nodes: 1"#; node.shred_version = 42; let epoch_slots = EpochSlots::new_rand(&mut rng, Some(node_pubkey)); let entries = vec![ - CrdsValue::new_unsigned(CrdsData::ContactInfo(node)), + CrdsValue::new_unsigned(CrdsData::LegacyContactInfo(node)), CrdsValue::new_unsigned(CrdsData::EpochSlots(0, epoch_slots)), ]; { @@ -4061,7 +4062,7 @@ RPC Enabled Nodes: 1"#; } // now add this message back to the table and make sure after the next pull, the entrypoint is unset let entrypoint_crdsvalue = - CrdsValue::new_unsigned(CrdsData::ContactInfo(entrypoint.clone())); + CrdsValue::new_unsigned(CrdsData::LegacyContactInfo(entrypoint.clone())); let cluster_info = Arc::new(cluster_info); let timeouts = cluster_info.gossip.make_timeouts( cluster_info.id(), @@ -4082,7 +4083,7 @@ RPC Enabled Nodes: 1"#; #[test] fn test_split_messages_small() { - let value = CrdsValue::new_unsigned(CrdsData::ContactInfo(ContactInfo::default())); + let value = CrdsValue::new_unsigned(CrdsData::LegacyContactInfo(ContactInfo::default())); test_split_messages(value); } @@ -4184,7 +4185,7 @@ RPC Enabled Nodes: 1"#; } fn check_pull_request_size(filter: CrdsFilter) { - let value = CrdsValue::new_unsigned(CrdsData::ContactInfo(ContactInfo::default())); + let value = CrdsValue::new_unsigned(CrdsData::LegacyContactInfo(ContactInfo::default())); let protocol = Protocol::PullRequest(filter, value); assert!(serialized_size(&protocol).unwrap() <= PACKET_DATA_SIZE as u64); } @@ -4351,7 +4352,7 @@ RPC Enabled Nodes: 1"#; .expect("unable to serialize default filter") as usize; let protocol = Protocol::PullRequest( CrdsFilter::default(), - CrdsValue::new_unsigned(CrdsData::ContactInfo(ContactInfo::default())), + CrdsValue::new_unsigned(CrdsData::LegacyContactInfo(ContactInfo::default())), ); let protocol_size = serialized_size(&protocol).expect("unable to serialize gossip protocol") as usize; @@ -4690,7 +4691,7 @@ RPC Enabled Nodes: 1"#; let mut rand_ci = ContactInfo::new_rand(&mut rng, Some(keypair.pubkey())); rand_ci.shred_version = shred_version; rand_ci.wallclock = timestamp(); - CrdsValue::new_signed(CrdsData::ContactInfo(rand_ci), &keypair) + CrdsValue::new_signed(CrdsData::LegacyContactInfo(rand_ci), &keypair) }) .take(NO_ENTRIES) .collect(); diff --git a/gossip/src/cluster_info_metrics.rs b/gossip/src/cluster_info_metrics.rs index 7026ec41b6984b..44f02577680418 100644 --- a/gossip/src/cluster_info_metrics.rs +++ b/gossip/src/cluster_info_metrics.rs @@ -613,8 +613,8 @@ pub(crate) fn submit_gossip_stats( ); datapoint_info!( "cluster_info_crds_stats", - ("ContactInfo-push", crds_stats.push.counts[0], i64), - ("ContactInfo-pull", crds_stats.pull.counts[0], i64), + ("LegacyContactInfo-push", crds_stats.push.counts[0], i64), + ("LegacyContactInfo-pull", crds_stats.pull.counts[0], i64), ("Vote-push", crds_stats.push.counts[1], i64), ("Vote-pull", crds_stats.pull.counts[1], i64), ("LowestSlot-push", crds_stats.push.counts[2], i64), @@ -656,8 +656,8 @@ pub(crate) fn submit_gossip_stats( ); datapoint_info!( "cluster_info_crds_stats_fails", - ("ContactInfo-push", crds_stats.push.fails[0], i64), - ("ContactInfo-pull", crds_stats.pull.fails[0], i64), + ("LegacyContactInfo-push", crds_stats.push.fails[0], i64), + ("LegacyContactInfo-pull", crds_stats.pull.fails[0], i64), ("Vote-push", crds_stats.push.fails[1], i64), ("Vote-pull", crds_stats.pull.fails[1], i64), ("LowestSlot-push", crds_stats.push.fails[2], i64), diff --git a/gossip/src/crds.rs b/gossip/src/crds.rs index 8507c44fbd78ef..9864182ec6beb1 100644 --- a/gossip/src/crds.rs +++ b/gossip/src/crds.rs @@ -26,10 +26,10 @@ use { crate::{ - contact_info::ContactInfo, crds_entry::CrdsEntry, crds_shards::CrdsShards, crds_value::{CrdsData, CrdsValue, CrdsValueLabel}, + legacy_contact_info::LegacyContactInfo as ContactInfo, }, bincode::serialize, indexmap::{ @@ -216,7 +216,7 @@ impl Crds { let entry_index = entry.index(); self.shards.insert(entry_index, &value); match &value.value.data { - CrdsData::ContactInfo(node) => { + CrdsData::LegacyContactInfo(node) => { self.nodes.insert(entry_index); self.shred_versions.insert(pubkey, node.shred_version); } @@ -243,11 +243,14 @@ impl Crds { self.shards.remove(entry_index, entry.get()); self.shards.insert(entry_index, &value); match &value.value.data { - CrdsData::ContactInfo(node) => { + CrdsData::LegacyContactInfo(node) => { self.shred_versions.insert(pubkey, node.shred_version); // self.nodes does not need to be updated since the // entry at this index was and stays contact-info. - debug_assert_matches!(entry.get().value.data, CrdsData::ContactInfo(_)); + debug_assert_matches!( + entry.get().value.data, + CrdsData::LegacyContactInfo(_) + ); } CrdsData::Vote(_, _) => { self.votes.remove(&entry.get().ordinal); @@ -307,7 +310,7 @@ impl Crds { /// Returns ContactInfo of all known nodes. pub(crate) fn get_nodes_contact_info(&self) -> impl Iterator { self.get_nodes().map(|v| match &v.value.data { - CrdsData::ContactInfo(info) => info, + CrdsData::LegacyContactInfo(info) => info, _ => panic!("this should not happen!"), }) } @@ -436,7 +439,7 @@ impl Crds { // It suffices to only overwrite the origin's timestamp since that is // used when purging old values. If the origin does not exist in the // table, fallback to exhaustive update on all associated records. - let origin = CrdsValueLabel::ContactInfo(*pubkey); + let origin = CrdsValueLabel::LegacyContactInfo(*pubkey); if let Some(origin) = self.table.get_mut(&origin) { if origin.local_timestamp < now { origin.local_timestamp = now; @@ -468,7 +471,7 @@ impl Crds { let timeout = timeouts.get(pubkey).copied().unwrap_or(default_timeout); // If the origin's contact-info hasn't expired yet then preserve // all associated values. - let origin = CrdsValueLabel::ContactInfo(*pubkey); + let origin = CrdsValueLabel::LegacyContactInfo(*pubkey); if let Some(origin) = self.table.get(&origin) { if now < origin.local_timestamp.saturating_add(timeout) { return vec![]; @@ -503,7 +506,7 @@ impl Crds { self.purged.push_back((value.value_hash, now)); self.shards.remove(index, &value); match value.value.data { - CrdsData::ContactInfo(_) => { + CrdsData::LegacyContactInfo(_) => { self.nodes.swap_remove(&index); } CrdsData::Vote(_, _) => { @@ -540,7 +543,7 @@ impl Crds { self.shards.remove(size, value); self.shards.insert(index, value); match value.value.data { - CrdsData::ContactInfo(_) => { + CrdsData::LegacyContactInfo(_) => { self.nodes.swap_remove(&size); self.nodes.insert(index); } @@ -674,7 +677,7 @@ impl CrdsDataStats { fn ordinal(entry: &VersionedCrdsValue) -> usize { match &entry.value.data { - CrdsData::ContactInfo(_) => 0, + CrdsData::LegacyContactInfo(_) => 0, CrdsData::Vote(_, _) => 1, CrdsData::LowestSlot(_, _) => 2, CrdsData::SnapshotHashes(_) => 3, @@ -714,8 +717,8 @@ mod tests { use { super::*, crate::{ - contact_info::ContactInfo, crds_value::{new_rand_timestamp, NodeInstance, SnapshotHashes}, + socketaddr, }, rand::{thread_rng, Rng, SeedableRng}, rand_chacha::ChaChaRng, @@ -730,7 +733,7 @@ mod tests { #[test] fn test_insert() { let mut crds = Crds::default(); - let val = CrdsValue::new_unsigned(CrdsData::ContactInfo(ContactInfo::default())); + let val = CrdsValue::new_unsigned(CrdsData::LegacyContactInfo(ContactInfo::default())); assert_eq!( crds.insert(val.clone(), 0, GossipRoute::LocalMessage), Ok(()) @@ -742,7 +745,7 @@ mod tests { #[test] fn test_update_old() { let mut crds = Crds::default(); - let val = CrdsValue::new_unsigned(CrdsData::ContactInfo(ContactInfo::default())); + let val = CrdsValue::new_unsigned(CrdsData::LegacyContactInfo(ContactInfo::default())); assert_eq!( crds.insert(val.clone(), 0, GossipRoute::LocalMessage), Ok(()) @@ -757,13 +760,12 @@ mod tests { #[test] fn test_update_new() { let mut crds = Crds::default(); - let original = CrdsValue::new_unsigned(CrdsData::ContactInfo(ContactInfo::new_localhost( - &Pubkey::default(), - 0, - ))); + let original = CrdsValue::new_unsigned(CrdsData::LegacyContactInfo( + ContactInfo::new_localhost(&Pubkey::default(), 0), + )); let value_hash = hash(&serialize(&original).unwrap()); assert_matches!(crds.insert(original, 0, GossipRoute::LocalMessage), Ok(())); - let val = CrdsValue::new_unsigned(CrdsData::ContactInfo(ContactInfo::new_localhost( + let val = CrdsValue::new_unsigned(CrdsData::LegacyContactInfo(ContactInfo::new_localhost( &Pubkey::default(), 1, ))); @@ -777,7 +779,7 @@ mod tests { #[test] fn test_update_timestamp() { let mut crds = Crds::default(); - let val = CrdsValue::new_unsigned(CrdsData::ContactInfo(ContactInfo::new_localhost( + let val = CrdsValue::new_unsigned(CrdsData::LegacyContactInfo(ContactInfo::new_localhost( &Pubkey::default(), 0, ))); @@ -787,7 +789,7 @@ mod tests { ); assert_eq!(crds.table[&val.label()].ordinal, 0); - let val2 = CrdsValue::new_unsigned(CrdsData::ContactInfo(ContactInfo::default())); + let val2 = CrdsValue::new_unsigned(CrdsData::LegacyContactInfo(ContactInfo::default())); let value_hash = hash(&serialize(&val2).unwrap()); assert_eq!(val2.label().pubkey(), val.label().pubkey()); assert_eq!( @@ -807,7 +809,7 @@ mod tests { let mut ci = ContactInfo::default(); ci.wallclock += 1; - let val3 = CrdsValue::new_unsigned(CrdsData::ContactInfo(ci)); + let val3 = CrdsValue::new_unsigned(CrdsData::LegacyContactInfo(ci)); assert_eq!(crds.insert(val3, 3, GossipRoute::LocalMessage), Ok(())); assert_eq!(*crds.purged.back().unwrap(), (value_hash, 3)); assert_eq!(crds.table[&val2.label()].local_timestamp, 3); @@ -876,7 +878,7 @@ mod tests { fn test_find_old_records_default() { let thread_pool = ThreadPoolBuilder::new().build().unwrap(); let mut crds = Crds::default(); - let val = CrdsValue::new_unsigned(CrdsData::ContactInfo(ContactInfo::default())); + let val = CrdsValue::new_unsigned(CrdsData::LegacyContactInfo(ContactInfo::default())); assert_eq!( crds.insert(val.clone(), 1, GossipRoute::LocalMessage), Ok(()) @@ -928,7 +930,7 @@ mod tests { fn test_remove_default() { let thread_pool = ThreadPoolBuilder::new().build().unwrap(); let mut crds = Crds::default(); - let val = CrdsValue::new_unsigned(CrdsData::ContactInfo(ContactInfo::default())); + let val = CrdsValue::new_unsigned(CrdsData::LegacyContactInfo(ContactInfo::default())); assert_matches!( crds.insert(val.clone(), 1, GossipRoute::LocalMessage), Ok(_) @@ -946,7 +948,7 @@ mod tests { fn test_find_old_records_staked() { let thread_pool = ThreadPoolBuilder::new().build().unwrap(); let mut crds = Crds::default(); - let val = CrdsValue::new_unsigned(CrdsData::ContactInfo(ContactInfo::default())); + let val = CrdsValue::new_unsigned(CrdsData::LegacyContactInfo(ContactInfo::default())); assert_eq!( crds.insert(val.clone(), 1, GossipRoute::LocalMessage), Ok(()) @@ -1099,7 +1101,7 @@ mod tests { let num_nodes = crds .table .values() - .filter(|v| matches!(v.value.data, CrdsData::ContactInfo(_))) + .filter(|v| matches!(v.value.data, CrdsData::LegacyContactInfo(_))) .count(); let num_votes = crds .table @@ -1229,7 +1231,7 @@ mod tests { let mut node = ContactInfo::new_rand(&mut rng, Some(pubkey)); let wallclock = node.wallclock; node.shred_version = 42; - let node = CrdsData::ContactInfo(node); + let node = CrdsData::LegacyContactInfo(node); let node = CrdsValue::new_unsigned(node); assert_eq!( crds.insert(node, timestamp(), GossipRoute::LocalMessage), @@ -1240,7 +1242,7 @@ mod tests { let mut node = ContactInfo::new_rand(&mut rng, Some(pubkey)); node.wallclock = wallclock - 1; // outdated. node.shred_version = 8; - let node = CrdsData::ContactInfo(node); + let node = CrdsData::LegacyContactInfo(node); let node = CrdsValue::new_unsigned(node); assert_eq!( crds.insert(node, timestamp(), GossipRoute::LocalMessage), @@ -1251,7 +1253,7 @@ mod tests { let mut node = ContactInfo::new_rand(&mut rng, Some(pubkey)); node.wallclock = wallclock + 1; // so that it overrides the prev one. node.shred_version = 8; - let node = CrdsData::ContactInfo(node); + let node = CrdsData::LegacyContactInfo(node); let node = CrdsValue::new_unsigned(node); assert_eq!( crds.insert(node, timestamp(), GossipRoute::LocalMessage), @@ -1269,7 +1271,7 @@ mod tests { assert_eq!(crds.get_shred_version(&pubkey), Some(8)); // Remove contact-info. Shred version should stay there since there // are still values associated with the pubkey. - crds.remove(&CrdsValueLabel::ContactInfo(pubkey), timestamp()); + crds.remove(&CrdsValueLabel::LegacyContactInfo(pubkey), timestamp()); assert_eq!(crds.get::<&ContactInfo>(pubkey), None); assert_eq!(crds.get_shred_version(&pubkey), Some(8)); // Remove the remaining entry with the same pubkey. @@ -1342,7 +1344,7 @@ mod tests { fn test_remove_staked() { let thread_pool = ThreadPoolBuilder::new().build().unwrap(); let mut crds = Crds::default(); - let val = CrdsValue::new_unsigned(CrdsData::ContactInfo(ContactInfo::default())); + let val = CrdsValue::new_unsigned(CrdsData::LegacyContactInfo(ContactInfo::default())); assert_matches!( crds.insert(val.clone(), 1, GossipRoute::LocalMessage), Ok(_) @@ -1363,7 +1365,7 @@ mod tests { #[test] #[allow(clippy::neg_cmp_op_on_partial_ord)] fn test_equal() { - let val = CrdsValue::new_unsigned(CrdsData::ContactInfo(ContactInfo::default())); + let val = CrdsValue::new_unsigned(CrdsData::LegacyContactInfo(ContactInfo::default())); let v1 = VersionedCrdsValue::new(val.clone(), Cursor::default(), 1); let v2 = VersionedCrdsValue::new(val, Cursor::default(), 1); assert_eq!(v1, v2); @@ -1375,7 +1377,7 @@ mod tests { #[allow(clippy::neg_cmp_op_on_partial_ord)] fn test_hash_order() { let v1 = VersionedCrdsValue::new( - CrdsValue::new_unsigned(CrdsData::ContactInfo(ContactInfo::new_localhost( + CrdsValue::new_unsigned(CrdsData::LegacyContactInfo(ContactInfo::new_localhost( &Pubkey::default(), 0, ))), @@ -1386,7 +1388,7 @@ mod tests { { let mut contact_info = ContactInfo::new_localhost(&Pubkey::default(), 0); contact_info.rpc = socketaddr!("0.0.0.0:0"); - CrdsValue::new_unsigned(CrdsData::ContactInfo(contact_info)) + CrdsValue::new_unsigned(CrdsData::LegacyContactInfo(contact_info)) }, Cursor::default(), 1, // local_timestamp @@ -1409,7 +1411,7 @@ mod tests { #[allow(clippy::neg_cmp_op_on_partial_ord)] fn test_wallclock_order() { let v1 = VersionedCrdsValue::new( - CrdsValue::new_unsigned(CrdsData::ContactInfo(ContactInfo::new_localhost( + CrdsValue::new_unsigned(CrdsData::LegacyContactInfo(ContactInfo::new_localhost( &Pubkey::default(), 1, ))), @@ -1417,7 +1419,7 @@ mod tests { 1, // local_timestamp ); let v2 = VersionedCrdsValue::new( - CrdsValue::new_unsigned(CrdsData::ContactInfo(ContactInfo::new_localhost( + CrdsValue::new_unsigned(CrdsData::LegacyContactInfo(ContactInfo::new_localhost( &Pubkey::default(), 0, ))), @@ -1435,7 +1437,7 @@ mod tests { #[allow(clippy::neg_cmp_op_on_partial_ord)] fn test_label_order() { let v1 = VersionedCrdsValue::new( - CrdsValue::new_unsigned(CrdsData::ContactInfo(ContactInfo::new_localhost( + CrdsValue::new_unsigned(CrdsData::LegacyContactInfo(ContactInfo::new_localhost( &solana_sdk::pubkey::new_rand(), 0, ))), @@ -1443,7 +1445,7 @@ mod tests { 1, // local_timestamp ); let v2 = VersionedCrdsValue::new( - CrdsValue::new_unsigned(CrdsData::ContactInfo(ContactInfo::new_localhost( + CrdsValue::new_unsigned(CrdsData::LegacyContactInfo(ContactInfo::new_localhost( &solana_sdk::pubkey::new_rand(), 0, ))), diff --git a/gossip/src/crds_entry.rs b/gossip/src/crds_entry.rs index c2b5235b80ed3c..0d0b0281504c5a 100644 --- a/gossip/src/crds_entry.rs +++ b/gossip/src/crds_entry.rs @@ -1,11 +1,11 @@ use { crate::{ - contact_info::ContactInfo, crds::VersionedCrdsValue, crds_value::{ CrdsData, CrdsValue, CrdsValueLabel, IncrementalSnapshotHashes, LegacyVersion, LowestSlot, SnapshotHashes, Version, }, + legacy_contact_info::LegacyContactInfo, }, indexmap::IndexMap, solana_sdk::pubkey::Pubkey, @@ -53,7 +53,7 @@ impl_crds_entry!(CrdsValue, |entry| Some(&entry?.value)); impl_crds_entry!(VersionedCrdsValue, |entry| entry); // Lookup by Pubkey. -impl_crds_entry!(ContactInfo, CrdsData::ContactInfo(node), node); +impl_crds_entry!(LegacyContactInfo, CrdsData::LegacyContactInfo(node), node); impl_crds_entry!(LegacyVersion, CrdsData::LegacyVersion(version), version); impl_crds_entry!(LowestSlot, CrdsData::LowestSlot(_, slot), slot); impl_crds_entry!(Version, CrdsData::Version(version), version); @@ -114,8 +114,8 @@ mod tests { assert_eq!(crds.get::<&VersionedCrdsValue>(&key).unwrap().value, *entry); let key = entry.pubkey(); match &entry.data { - CrdsData::ContactInfo(node) => { - assert_eq!(crds.get::<&ContactInfo>(key), Some(node)) + CrdsData::LegacyContactInfo(node) => { + assert_eq!(crds.get::<&LegacyContactInfo>(key), Some(node)) } CrdsData::LowestSlot(_, slot) => { assert_eq!(crds.get::<&LowestSlot>(key), Some(slot)) diff --git a/gossip/src/crds_gossip.rs b/gossip/src/crds_gossip.rs index f3620c83410b90..3c8ad948aaeaa0 100644 --- a/gossip/src/crds_gossip.rs +++ b/gossip/src/crds_gossip.rs @@ -8,13 +8,13 @@ use { crate::{ cluster_info::Ping, cluster_info_metrics::GossipStats, - contact_info::ContactInfo, crds::{Crds, GossipRoute}, crds_gossip_error::CrdsGossipError, crds_gossip_pull::{CrdsFilter, CrdsGossipPull, ProcessPullStats}, crds_gossip_push::{CrdsGossipPush, CRDS_GOSSIP_NUM_ACTIVE}, crds_value::{CrdsData, CrdsValue}, duplicate_shred::{self, DuplicateShredIndex, LeaderScheduleFn, MAX_DUPLICATE_SHREDS}, + legacy_contact_info::LegacyContactInfo as ContactInfo, ping_pong::PingCache, }, itertools::Itertools, @@ -379,7 +379,7 @@ where mod test { use { super::*, - crate::{contact_info::ContactInfo, crds_value::CrdsData}, + crate::crds_value::CrdsData, solana_sdk::{hash::hash, timing::timestamp}, }; @@ -395,7 +395,7 @@ mod test { .write() .unwrap() .insert( - CrdsValue::new_unsigned(CrdsData::ContactInfo(ci.clone())), + CrdsValue::new_unsigned(CrdsData::LegacyContactInfo(ci.clone())), 0, GossipRoute::LocalMessage, ) diff --git a/gossip/src/crds_gossip_pull.rs b/gossip/src/crds_gossip_pull.rs index 7be82fa23879ed..0288e98a019880 100644 --- a/gossip/src/crds_gossip_pull.rs +++ b/gossip/src/crds_gossip_pull.rs @@ -15,11 +15,11 @@ use { crate::{ cluster_info::{Ping, CRDS_UNIQUE_PUBKEY_CAPACITY}, cluster_info_metrics::GossipStats, - contact_info::ContactInfo, crds::{Crds, GossipRoute, VersionedCrdsValue}, crds_gossip::{self, get_stake, get_weight}, crds_gossip_error::CrdsGossipError, crds_value::CrdsValue, + legacy_contact_info::LegacyContactInfo as ContactInfo, ping_pong::PingCache, }, itertools::Itertools, @@ -662,8 +662,8 @@ pub(crate) mod tests { super::*, crate::{ cluster_info::MAX_BLOOM_SIZE, - contact_info::ContactInfo, crds_value::{CrdsData, Vote}, + socketaddr, }, itertools::Itertools, rand::{seq::SliceRandom, thread_rng, SeedableRng}, @@ -722,17 +722,16 @@ pub(crate) mod tests { let mut crds = Crds::default(); let mut stakes = HashMap::new(); let node = CrdsGossipPull::default(); - let me = CrdsValue::new_unsigned(CrdsData::ContactInfo(ContactInfo::new_localhost( + let me = CrdsValue::new_unsigned(CrdsData::LegacyContactInfo(ContactInfo::new_localhost( &solana_sdk::pubkey::new_rand(), 0, ))); crds.insert(me.clone(), 0, GossipRoute::LocalMessage) .unwrap(); for i in 1..=30 { - let entry = CrdsValue::new_unsigned(CrdsData::ContactInfo(ContactInfo::new_localhost( - &solana_sdk::pubkey::new_rand(), - 0, - ))); + let entry = CrdsValue::new_unsigned(CrdsData::LegacyContactInfo( + ContactInfo::new_localhost(&solana_sdk::pubkey::new_rand(), 0), + )); let id = entry.label().pubkey(); crds.insert(entry.clone(), 0, GossipRoute::LocalMessage) .unwrap(); @@ -763,25 +762,25 @@ pub(crate) mod tests { let gossip = socketaddr!("127.0.0.1:1234"); - let me = CrdsValue::new_unsigned(CrdsData::ContactInfo(ContactInfo { + let me = CrdsValue::new_unsigned(CrdsData::LegacyContactInfo(ContactInfo { id: solana_sdk::pubkey::new_rand(), shred_version: 123, gossip, ..ContactInfo::default() })); - let spy = CrdsValue::new_unsigned(CrdsData::ContactInfo(ContactInfo { + let spy = CrdsValue::new_unsigned(CrdsData::LegacyContactInfo(ContactInfo { id: solana_sdk::pubkey::new_rand(), shred_version: 0, gossip, ..ContactInfo::default() })); - let node_123 = CrdsValue::new_unsigned(CrdsData::ContactInfo(ContactInfo { + let node_123 = CrdsValue::new_unsigned(CrdsData::LegacyContactInfo(ContactInfo { id: solana_sdk::pubkey::new_rand(), shred_version: 123, gossip, ..ContactInfo::default() })); - let node_456 = CrdsValue::new_unsigned(CrdsData::ContactInfo(ContactInfo { + let node_456 = CrdsValue::new_unsigned(CrdsData::LegacyContactInfo(ContactInfo { id: solana_sdk::pubkey::new_rand(), shred_version: 456, gossip, @@ -843,12 +842,12 @@ pub(crate) mod tests { let node = CrdsGossipPull::default(); let gossip = socketaddr!("127.0.0.1:1234"); - let me = CrdsValue::new_unsigned(CrdsData::ContactInfo(ContactInfo { + let me = CrdsValue::new_unsigned(CrdsData::LegacyContactInfo(ContactInfo { id: solana_sdk::pubkey::new_rand(), gossip, ..ContactInfo::default() })); - let node_123 = CrdsValue::new_unsigned(CrdsData::ContactInfo(ContactInfo { + let node_123 = CrdsValue::new_unsigned(CrdsData::LegacyContactInfo(ContactInfo { id: solana_sdk::pubkey::new_rand(), gossip, ..ContactInfo::default() @@ -1006,10 +1005,9 @@ pub(crate) mod tests { let thread_pool = ThreadPoolBuilder::new().build().unwrap(); let crds = RwLock::::default(); let node_keypair = Keypair::new(); - let entry = CrdsValue::new_unsigned(CrdsData::ContactInfo(ContactInfo::new_localhost( - &node_keypair.pubkey(), - 0, - ))); + let entry = CrdsValue::new_unsigned(CrdsData::LegacyContactInfo( + ContactInfo::new_localhost(&node_keypair.pubkey(), 0), + )); let node = CrdsGossipPull::default(); let mut pings = Vec::new(); let ping_cache = Mutex::new(PingCache::new( @@ -1060,7 +1058,7 @@ pub(crate) mod tests { .lock() .unwrap() .mock_pong(new.id, new.gossip, Instant::now()); - let new = CrdsValue::new_unsigned(CrdsData::ContactInfo(new)); + let new = CrdsValue::new_unsigned(CrdsData::LegacyContactInfo(new)); crds.write() .unwrap() .insert(new.clone(), now, GossipRoute::LocalMessage) @@ -1083,7 +1081,7 @@ pub(crate) mod tests { node.mark_pull_request_creation_time(new.contact_info().unwrap().id, now); let offline = ContactInfo::new_localhost(&solana_sdk::pubkey::new_rand(), now); - let offline = CrdsValue::new_unsigned(CrdsData::ContactInfo(offline)); + let offline = CrdsValue::new_unsigned(CrdsData::LegacyContactInfo(offline)); crds.write() .unwrap() .insert(offline, now, GossipRoute::LocalMessage) @@ -1118,20 +1116,19 @@ pub(crate) mod tests { ); let mut crds = Crds::default(); let node_keypair = Keypair::new(); - let entry = CrdsValue::new_unsigned(CrdsData::ContactInfo(ContactInfo::new_localhost( - &node_keypair.pubkey(), - 0, - ))); + let entry = CrdsValue::new_unsigned(CrdsData::LegacyContactInfo( + ContactInfo::new_localhost(&node_keypair.pubkey(), 0), + )); let node = CrdsGossipPull::default(); crds.insert(entry, now, GossipRoute::LocalMessage).unwrap(); let old = ContactInfo::new_localhost(&solana_sdk::pubkey::new_rand(), 0); ping_cache.mock_pong(old.id, old.gossip, Instant::now()); - let old = CrdsValue::new_unsigned(CrdsData::ContactInfo(old)); + let old = CrdsValue::new_unsigned(CrdsData::LegacyContactInfo(old)); crds.insert(old.clone(), now, GossipRoute::LocalMessage) .unwrap(); let new = ContactInfo::new_localhost(&solana_sdk::pubkey::new_rand(), 0); ping_cache.mock_pong(new.id, new.gossip, Instant::now()); - let new = CrdsValue::new_unsigned(CrdsData::ContactInfo(new)); + let new = CrdsValue::new_unsigned(CrdsData::LegacyContactInfo(new)); crds.insert(new.clone(), now, GossipRoute::LocalMessage) .unwrap(); let crds = RwLock::new(crds); @@ -1216,10 +1213,9 @@ pub(crate) mod tests { Duration::from_secs(20 * 60) / 64, // rate_limit_delay 128, // capacity ); - let entry = CrdsValue::new_unsigned(CrdsData::ContactInfo(ContactInfo::new_localhost( - &node_keypair.pubkey(), - 0, - ))); + let entry = CrdsValue::new_unsigned(CrdsData::LegacyContactInfo( + ContactInfo::new_localhost(&node_keypair.pubkey(), 0), + )); let caller = entry.clone(); let node = CrdsGossipPull::default(); node_crds @@ -1227,7 +1223,7 @@ pub(crate) mod tests { .unwrap(); let new = ContactInfo::new_localhost(&solana_sdk::pubkey::new_rand(), 0); ping_cache.mock_pong(new.id, new.gossip, Instant::now()); - let new = CrdsValue::new_unsigned(CrdsData::ContactInfo(new)); + let new = CrdsValue::new_unsigned(CrdsData::LegacyContactInfo(new)); node_crds.insert(new, 0, GossipRoute::LocalMessage).unwrap(); let node_crds = RwLock::new(node_crds); let mut pings = Vec::new(); @@ -1259,7 +1255,7 @@ pub(crate) mod tests { assert_eq!(rsp[0].len(), 0); - let new = CrdsValue::new_unsigned(CrdsData::ContactInfo(ContactInfo::new_localhost( + let new = CrdsValue::new_unsigned(CrdsData::LegacyContactInfo(ContactInfo::new_localhost( &solana_sdk::pubkey::new_rand(), CRDS_GOSSIP_PULL_MSG_TIMEOUT_MS, ))); @@ -1288,7 +1284,7 @@ pub(crate) mod tests { // Should return new value since caller is new. let now = CRDS_GOSSIP_PULL_MSG_TIMEOUT_MS + 1; let caller = ContactInfo::new_localhost(&Pubkey::new_unique(), now); - let caller = CrdsValue::new_unsigned(CrdsData::ContactInfo(caller)); + let caller = CrdsValue::new_unsigned(CrdsData::LegacyContactInfo(caller)); filters .iter() .map(|(_, filter)| (caller.clone(), filter.clone())) @@ -1315,10 +1311,9 @@ pub(crate) mod tests { let thread_pool = ThreadPoolBuilder::new().build().unwrap(); let node_keypair = Keypair::new(); let mut node_crds = Crds::default(); - let entry = CrdsValue::new_unsigned(CrdsData::ContactInfo(ContactInfo::new_localhost( - &node_keypair.pubkey(), - 0, - ))); + let entry = CrdsValue::new_unsigned(CrdsData::LegacyContactInfo( + ContactInfo::new_localhost(&node_keypair.pubkey(), 0), + )); let caller = entry.clone(); let node = CrdsGossipPull::default(); node_crds @@ -1331,7 +1326,7 @@ pub(crate) mod tests { ); let new = ContactInfo::new_localhost(&solana_sdk::pubkey::new_rand(), 0); ping_cache.mock_pong(new.id, new.gossip, Instant::now()); - let new = CrdsValue::new_unsigned(CrdsData::ContactInfo(new)); + let new = CrdsValue::new_unsigned(CrdsData::LegacyContactInfo(new)); node_crds.insert(new, 0, GossipRoute::LocalMessage).unwrap(); let node_crds = RwLock::new(node_crds); let mut pings = Vec::new(); @@ -1375,10 +1370,9 @@ pub(crate) mod tests { let thread_pool = ThreadPoolBuilder::new().build().unwrap(); let node_keypair = Keypair::new(); let mut node_crds = Crds::default(); - let entry = CrdsValue::new_unsigned(CrdsData::ContactInfo(ContactInfo::new_localhost( - &node_keypair.pubkey(), - 1, - ))); + let entry = CrdsValue::new_unsigned(CrdsData::LegacyContactInfo( + ContactInfo::new_localhost(&node_keypair.pubkey(), 1), + )); let caller = entry.clone(); let node_pubkey = entry.label().pubkey(); let node = CrdsGossipPull::default(); @@ -1392,14 +1386,14 @@ pub(crate) mod tests { ); let new = ContactInfo::new_localhost(&solana_sdk::pubkey::new_rand(), 1); ping_cache.mock_pong(new.id, new.gossip, Instant::now()); - let new = CrdsValue::new_unsigned(CrdsData::ContactInfo(new)); + let new = CrdsValue::new_unsigned(CrdsData::LegacyContactInfo(new)); node_crds.insert(new, 0, GossipRoute::LocalMessage).unwrap(); let mut dest_crds = Crds::default(); let new_id = solana_sdk::pubkey::new_rand(); let new = ContactInfo::new_localhost(&new_id, 1); ping_cache.mock_pong(new.id, new.gossip, Instant::now()); - let new = CrdsValue::new_unsigned(CrdsData::ContactInfo(new)); + let new = CrdsValue::new_unsigned(CrdsData::LegacyContactInfo(new)); dest_crds .insert(new.clone(), 0, GossipRoute::LocalMessage) .unwrap(); @@ -1408,7 +1402,7 @@ pub(crate) mod tests { // node contains a key from the dest node, but at an older local timestamp let same_key = ContactInfo::new_localhost(&new_id, 0); ping_cache.mock_pong(same_key.id, same_key.gossip, Instant::now()); - let same_key = CrdsValue::new_unsigned(CrdsData::ContactInfo(same_key)); + let same_key = CrdsValue::new_unsigned(CrdsData::LegacyContactInfo(same_key)); assert_eq!(same_key.label(), new.label()); assert!(same_key.wallclock() < new.wallclock()); node_crds @@ -1492,17 +1486,16 @@ pub(crate) mod tests { fn test_gossip_purge() { let thread_pool = ThreadPoolBuilder::new().build().unwrap(); let mut node_crds = Crds::default(); - let entry = CrdsValue::new_unsigned(CrdsData::ContactInfo(ContactInfo::new_localhost( - &solana_sdk::pubkey::new_rand(), - 0, - ))); + let entry = CrdsValue::new_unsigned(CrdsData::LegacyContactInfo( + ContactInfo::new_localhost(&solana_sdk::pubkey::new_rand(), 0), + )); let node_label = entry.label(); let node_pubkey = node_label.pubkey(); let node = CrdsGossipPull::default(); node_crds .insert(entry, 0, GossipRoute::LocalMessage) .unwrap(); - let old = CrdsValue::new_unsigned(CrdsData::ContactInfo(ContactInfo::new_localhost( + let old = CrdsValue::new_unsigned(CrdsData::LegacyContactInfo(ContactInfo::new_localhost( &solana_sdk::pubkey::new_rand(), 0, ))); @@ -1632,7 +1625,7 @@ pub(crate) mod tests { let node = CrdsGossipPull::default(); let peer_pubkey = solana_sdk::pubkey::new_rand(); - let peer_entry = CrdsValue::new_unsigned(CrdsData::ContactInfo( + let peer_entry = CrdsValue::new_unsigned(CrdsData::LegacyContactInfo( ContactInfo::new_localhost(&peer_pubkey, 0), )); let mut timeouts = HashMap::new(); @@ -1652,7 +1645,7 @@ pub(crate) mod tests { ); let node_crds = RwLock::::default(); - let unstaked_peer_entry = CrdsValue::new_unsigned(CrdsData::ContactInfo( + let unstaked_peer_entry = CrdsValue::new_unsigned(CrdsData::LegacyContactInfo( ContactInfo::new_localhost(&peer_pubkey, 0), )); // check that old contact infos fail if they are too old, regardless of "timeouts" diff --git a/gossip/src/crds_gossip_push.rs b/gossip/src/crds_gossip_push.rs index a5db5cbd1a6b22..ae67027e96a1ca 100644 --- a/gossip/src/crds_gossip_push.rs +++ b/gossip/src/crds_gossip_push.rs @@ -14,10 +14,10 @@ use { crate::{ cluster_info::{Ping, CRDS_UNIQUE_PUBKEY_CAPACITY}, - contact_info::ContactInfo, crds::{Crds, Cursor, GossipRoute}, crds_gossip::{self, get_stake, get_weight}, crds_value::CrdsValue, + legacy_contact_info::LegacyContactInfo as ContactInfo, ping_pong::PingCache, weighted_shuffle::WeightedShuffle, }, @@ -521,7 +521,7 @@ impl CrdsGossipPush { mod tests { use { super::*, - crate::{contact_info::ContactInfo, crds_value::CrdsData}, + crate::{crds_value::CrdsData, socketaddr}, std::time::Duration, }; @@ -544,9 +544,9 @@ mod tests { stakes.insert(self_id, 100); stakes.insert(origin, 100); - let value = CrdsValue::new_unsigned(CrdsData::ContactInfo(ContactInfo::new_localhost( - &origin, 0, - ))); + let value = CrdsValue::new_unsigned(CrdsData::LegacyContactInfo( + ContactInfo::new_localhost(&origin, 0), + )); let low_staked_peers = (0..10).map(|_| solana_sdk::pubkey::new_rand()); let mut low_staked_set = HashSet::new(); low_staked_peers.for_each(|p| { @@ -599,10 +599,9 @@ mod tests { fn test_process_push_one() { let crds = RwLock::::default(); let push = CrdsGossipPush::default(); - let value = CrdsValue::new_unsigned(CrdsData::ContactInfo(ContactInfo::new_localhost( - &solana_sdk::pubkey::new_rand(), - 0, - ))); + let value = CrdsValue::new_unsigned(CrdsData::LegacyContactInfo( + ContactInfo::new_localhost(&solana_sdk::pubkey::new_rand(), 0), + )); let label = value.label(); // push a new message assert_eq!( @@ -622,7 +621,7 @@ mod tests { let push = CrdsGossipPush::default(); let mut ci = ContactInfo::new_localhost(&solana_sdk::pubkey::new_rand(), 0); ci.wallclock = 1; - let value = CrdsValue::new_unsigned(CrdsData::ContactInfo(ci.clone())); + let value = CrdsValue::new_unsigned(CrdsData::LegacyContactInfo(ci.clone())); // push a new message assert_eq!( @@ -632,7 +631,7 @@ mod tests { // push an old version ci.wallclock = 0; - let value = CrdsValue::new_unsigned(CrdsData::ContactInfo(ci)); + let value = CrdsValue::new_unsigned(CrdsData::LegacyContactInfo(ci)); assert!(push .process_push_message(&crds, vec![(Pubkey::default(), vec![value])], 0) .is_empty()); @@ -646,14 +645,14 @@ mod tests { // push a version to far in the future ci.wallclock = timeout + 1; - let value = CrdsValue::new_unsigned(CrdsData::ContactInfo(ci.clone())); + let value = CrdsValue::new_unsigned(CrdsData::LegacyContactInfo(ci.clone())); assert!(push .process_push_message(&crds, vec![(Pubkey::default(), vec![value])], 0) .is_empty()); // push a version to far in the past ci.wallclock = 0; - let value = CrdsValue::new_unsigned(CrdsData::ContactInfo(ci)); + let value = CrdsValue::new_unsigned(CrdsData::LegacyContactInfo(ci)); assert!(push .process_push_message(&crds, vec![(Pubkey::default(), vec![value])], timeout + 1) .is_empty()); @@ -665,7 +664,7 @@ mod tests { let mut ci = ContactInfo::new_localhost(&solana_sdk::pubkey::new_rand(), 0); let origin = ci.id; ci.wallclock = 0; - let value_old = CrdsValue::new_unsigned(CrdsData::ContactInfo(ci.clone())); + let value_old = CrdsValue::new_unsigned(CrdsData::LegacyContactInfo(ci.clone())); // push a new message assert_eq!( @@ -675,7 +674,7 @@ mod tests { // push an old version ci.wallclock = 1; - let value = CrdsValue::new_unsigned(CrdsData::ContactInfo(ci)); + let value = CrdsValue::new_unsigned(CrdsData::LegacyContactInfo(ci)); assert_eq!( push.process_push_message(&crds, vec![(Pubkey::default(), vec![value])], 0), [origin].into_iter().collect() @@ -697,7 +696,7 @@ mod tests { let mut ping_cache = new_ping_cache(); let value1 = ContactInfo::new_localhost(&solana_sdk::pubkey::new_rand(), 0); ping_cache.mock_pong(value1.id, value1.gossip, Instant::now()); - let value1 = CrdsValue::new_unsigned(CrdsData::ContactInfo(value1)); + let value1 = CrdsValue::new_unsigned(CrdsData::LegacyContactInfo(value1)); assert_eq!( crds.insert(value1.clone(), now, GossipRoute::LocalMessage), @@ -727,7 +726,7 @@ mod tests { .lock() .unwrap() .mock_pong(value2.id, value2.gossip, Instant::now()); - let value2 = CrdsValue::new_unsigned(CrdsData::ContactInfo(value2)); + let value2 = CrdsValue::new_unsigned(CrdsData::LegacyContactInfo(value2)); assert!(active_set.get(&value2.label().pubkey()).is_none()); drop(active_set); assert_eq!( @@ -765,7 +764,7 @@ mod tests { .lock() .unwrap() .mock_pong(value2.id, value2.gossip, Instant::now()); - let value2 = CrdsValue::new_unsigned(CrdsData::ContactInfo(value2)); + let value2 = CrdsValue::new_unsigned(CrdsData::LegacyContactInfo(value2)); assert_eq!( crds.write() .unwrap() @@ -796,10 +795,9 @@ mod tests { let push = CrdsGossipPush::default(); let mut stakes = HashMap::new(); for i in 1..=100 { - let peer = CrdsValue::new_unsigned(CrdsData::ContactInfo(ContactInfo::new_localhost( - &solana_sdk::pubkey::new_rand(), - time, - ))); + let peer = CrdsValue::new_unsigned(CrdsData::LegacyContactInfo( + ContactInfo::new_localhost(&solana_sdk::pubkey::new_rand(), time), + )); let id = peer.label().pubkey(); crds.insert(peer.clone(), time, GossipRoute::LocalMessage) .unwrap(); @@ -830,25 +828,25 @@ mod tests { let gossip = socketaddr!("127.0.0.1:1234"); - let me = CrdsValue::new_unsigned(CrdsData::ContactInfo(ContactInfo { + let me = CrdsValue::new_unsigned(CrdsData::LegacyContactInfo(ContactInfo { id: solana_sdk::pubkey::new_rand(), shred_version: 123, gossip, ..ContactInfo::default() })); - let spy = CrdsValue::new_unsigned(CrdsData::ContactInfo(ContactInfo { + let spy = CrdsValue::new_unsigned(CrdsData::LegacyContactInfo(ContactInfo { id: solana_sdk::pubkey::new_rand(), shred_version: 0, gossip, ..ContactInfo::default() })); - let node_123 = CrdsValue::new_unsigned(CrdsData::ContactInfo(ContactInfo { + let node_123 = CrdsValue::new_unsigned(CrdsData::LegacyContactInfo(ContactInfo { id: solana_sdk::pubkey::new_rand(), shred_version: 123, gossip, ..ContactInfo::default() })); - let node_456 = CrdsValue::new_unsigned(CrdsData::ContactInfo(ContactInfo { + let node_456 = CrdsValue::new_unsigned(CrdsData::LegacyContactInfo(ContactInfo { id: solana_sdk::pubkey::new_rand(), shred_version: 456, gossip, @@ -902,12 +900,12 @@ mod tests { let node = CrdsGossipPush::default(); let gossip = socketaddr!("127.0.0.1:1234"); - let me = CrdsValue::new_unsigned(CrdsData::ContactInfo(ContactInfo { + let me = CrdsValue::new_unsigned(CrdsData::LegacyContactInfo(ContactInfo { id: solana_sdk::pubkey::new_rand(), gossip, ..ContactInfo::default() })); - let node_123 = CrdsValue::new_unsigned(CrdsData::ContactInfo(ContactInfo { + let node_123 = CrdsValue::new_unsigned(CrdsData::LegacyContactInfo(ContactInfo { id: solana_sdk::pubkey::new_rand(), gossip, ..ContactInfo::default() @@ -967,7 +965,7 @@ mod tests { let mut ping_cache = new_ping_cache(); let peer = ContactInfo::new_localhost(&solana_sdk::pubkey::new_rand(), 0); ping_cache.mock_pong(peer.id, peer.gossip, Instant::now()); - let peer = CrdsValue::new_unsigned(CrdsData::ContactInfo(peer)); + let peer = CrdsValue::new_unsigned(CrdsData::LegacyContactInfo(peer)); assert_eq!( crds.insert(peer.clone(), now, GossipRoute::LocalMessage), Ok(()) @@ -987,10 +985,9 @@ mod tests { &SocketAddrSpace::Unspecified, ); - let new_msg = CrdsValue::new_unsigned(CrdsData::ContactInfo(ContactInfo::new_localhost( - &solana_sdk::pubkey::new_rand(), - 0, - ))); + let new_msg = CrdsValue::new_unsigned(CrdsData::LegacyContactInfo( + ContactInfo::new_localhost(&solana_sdk::pubkey::new_rand(), 0), + )); let mut expected = HashMap::new(); expected.insert(peer.label().pubkey(), vec![new_msg.clone()]); let origin = new_msg.pubkey(); @@ -1014,7 +1011,7 @@ mod tests { let mut peer = ContactInfo::new_rand(&mut rng, /*pubkey=*/ None); peer.wallclock = wallclock; ping_cache.mock_pong(peer.id, peer.gossip, Instant::now()); - CrdsValue::new_unsigned(CrdsData::ContactInfo(peer)) + CrdsValue::new_unsigned(CrdsData::LegacyContactInfo(peer)) }) .collect(); let origin: Vec<_> = peers.iter().map(|node| node.pubkey()).collect(); @@ -1064,10 +1061,9 @@ mod tests { let mut crds = Crds::default(); let self_id = solana_sdk::pubkey::new_rand(); let push = CrdsGossipPush::default(); - let peer = CrdsValue::new_unsigned(CrdsData::ContactInfo(ContactInfo::new_localhost( - &solana_sdk::pubkey::new_rand(), - 0, - ))); + let peer = CrdsValue::new_unsigned(CrdsData::LegacyContactInfo( + ContactInfo::new_localhost(&solana_sdk::pubkey::new_rand(), 0), + )); assert_eq!( crds.insert(peer.clone(), 0, GossipRoute::LocalMessage), Ok(()) @@ -1087,10 +1083,9 @@ mod tests { &SocketAddrSpace::Unspecified, ); - let new_msg = CrdsValue::new_unsigned(CrdsData::ContactInfo(ContactInfo::new_localhost( - &solana_sdk::pubkey::new_rand(), - 0, - ))); + let new_msg = CrdsValue::new_unsigned(CrdsData::LegacyContactInfo( + ContactInfo::new_localhost(&solana_sdk::pubkey::new_rand(), 0), + )); let expected = HashMap::new(); let origin = new_msg.pubkey(); assert_eq!( @@ -1108,10 +1103,9 @@ mod tests { fn test_purge_old_pending_push_messages() { let mut crds = Crds::default(); let push = CrdsGossipPush::default(); - let peer = CrdsValue::new_unsigned(CrdsData::ContactInfo(ContactInfo::new_localhost( - &solana_sdk::pubkey::new_rand(), - 0, - ))); + let peer = CrdsValue::new_unsigned(CrdsData::LegacyContactInfo( + ContactInfo::new_localhost(&solana_sdk::pubkey::new_rand(), 0), + )); assert_eq!(crds.insert(peer, 0, GossipRoute::LocalMessage), Ok(())); let crds = RwLock::new(crds); let ping_cache = Mutex::new(new_ping_cache()); @@ -1130,7 +1124,7 @@ mod tests { let mut ci = ContactInfo::new_localhost(&solana_sdk::pubkey::new_rand(), 0); ci.wallclock = 1; - let new_msg = CrdsValue::new_unsigned(CrdsData::ContactInfo(ci)); + let new_msg = CrdsValue::new_unsigned(CrdsData::LegacyContactInfo(ci)); let expected = HashMap::new(); let origin = new_msg.pubkey(); assert_eq!( @@ -1146,7 +1140,7 @@ mod tests { let push = CrdsGossipPush::default(); let mut ci = ContactInfo::new_localhost(&solana_sdk::pubkey::new_rand(), 0); ci.wallclock = 0; - let value = CrdsValue::new_unsigned(CrdsData::ContactInfo(ci)); + let value = CrdsValue::new_unsigned(CrdsData::LegacyContactInfo(ci)); let label = value.label(); // push a new message assert_eq!( diff --git a/gossip/src/crds_value.rs b/gossip/src/crds_value.rs index 1e40a2954eb950..ec63ac51399ba6 100644 --- a/gossip/src/crds_value.rs +++ b/gossip/src/crds_value.rs @@ -1,10 +1,10 @@ use { crate::{ cluster_info::MAX_SNAPSHOT_HASHES, - contact_info::ContactInfo, deprecated, duplicate_shred::{DuplicateShred, DuplicateShredIndex, MAX_DUPLICATE_SHREDS}, epoch_slots::EpochSlots, + legacy_contact_info::LegacyContactInfo, }, bincode::{serialize, serialized_size}, rand::{CryptoRng, Rng}, @@ -81,7 +81,7 @@ impl Signable for CrdsValue { #[allow(clippy::large_enum_variant)] #[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq, AbiExample, AbiEnumVisitor)] pub enum CrdsData { - ContactInfo(ContactInfo), + LegacyContactInfo(LegacyContactInfo), Vote(VoteIndex, Vote), LowestSlot(/*DEPRECATED:*/ u8, LowestSlot), SnapshotHashes(SnapshotHashes), @@ -97,7 +97,7 @@ pub enum CrdsData { impl Sanitize for CrdsData { fn sanitize(&self) -> Result<(), SanitizeError> { match self { - CrdsData::ContactInfo(val) => val.sanitize(), + CrdsData::LegacyContactInfo(val) => val.sanitize(), CrdsData::Vote(ix, val) => { if *ix >= MAX_VOTES { return Err(SanitizeError::ValueOutOfBounds); @@ -147,7 +147,7 @@ impl CrdsData { // TODO: Assign ranges to each arm proportional to their frequency in // the mainnet crds table. match kind { - 0 => CrdsData::ContactInfo(ContactInfo::new_rand(rng, pubkey)), + 0 => CrdsData::LegacyContactInfo(LegacyContactInfo::new_rand(rng, pubkey)), // Index for LowestSlot is deprecated and should be zero. 1 => CrdsData::LowestSlot(0, LowestSlot::new_rand(rng, pubkey)), 2 => CrdsData::SnapshotHashes(SnapshotHashes::new_rand(rng, pubkey)), @@ -481,7 +481,7 @@ impl Sanitize for NodeInstance { /// These are labels for values in a record that is associated with `Pubkey` #[derive(PartialEq, Hash, Eq, Clone, Debug)] pub enum CrdsValueLabel { - ContactInfo(Pubkey), + LegacyContactInfo(Pubkey), Vote(VoteIndex, Pubkey), LowestSlot(Pubkey), SnapshotHashes(Pubkey), @@ -497,7 +497,9 @@ pub enum CrdsValueLabel { impl fmt::Display for CrdsValueLabel { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { match self { - CrdsValueLabel::ContactInfo(_) => write!(f, "ContactInfo({})", self.pubkey()), + CrdsValueLabel::LegacyContactInfo(_) => { + write!(f, "LegacyContactInfo({})", self.pubkey()) + } CrdsValueLabel::Vote(ix, _) => write!(f, "Vote({}, {})", ix, self.pubkey()), CrdsValueLabel::LowestSlot(_) => write!(f, "LowestSlot({})", self.pubkey()), CrdsValueLabel::SnapshotHashes(_) => write!(f, "SnapshotHashes({})", self.pubkey()), @@ -517,7 +519,7 @@ impl fmt::Display for CrdsValueLabel { impl CrdsValueLabel { pub fn pubkey(&self) -> Pubkey { match self { - CrdsValueLabel::ContactInfo(p) => *p, + CrdsValueLabel::LegacyContactInfo(p) => *p, CrdsValueLabel::Vote(_, p) => *p, CrdsValueLabel::LowestSlot(p) => *p, CrdsValueLabel::SnapshotHashes(p) => *p, @@ -566,7 +568,7 @@ impl CrdsValue { /// This is used to time out push messages. pub fn wallclock(&self) -> u64 { match &self.data { - CrdsData::ContactInfo(contact_info) => contact_info.wallclock, + CrdsData::LegacyContactInfo(contact_info) => contact_info.wallclock, CrdsData::Vote(_, vote) => vote.wallclock, CrdsData::LowestSlot(_, obj) => obj.wallclock, CrdsData::SnapshotHashes(hash) => hash.wallclock, @@ -581,7 +583,7 @@ impl CrdsValue { } pub fn pubkey(&self) -> Pubkey { match &self.data { - CrdsData::ContactInfo(contact_info) => contact_info.id, + CrdsData::LegacyContactInfo(contact_info) => contact_info.id, CrdsData::Vote(_, vote) => vote.from, CrdsData::LowestSlot(_, slots) => slots.from, CrdsData::SnapshotHashes(hash) => hash.from, @@ -596,7 +598,7 @@ impl CrdsValue { } pub fn label(&self) -> CrdsValueLabel { match &self.data { - CrdsData::ContactInfo(_) => CrdsValueLabel::ContactInfo(self.pubkey()), + CrdsData::LegacyContactInfo(_) => CrdsValueLabel::LegacyContactInfo(self.pubkey()), CrdsData::Vote(ix, _) => CrdsValueLabel::Vote(*ix, self.pubkey()), CrdsData::LowestSlot(_, _) => CrdsValueLabel::LowestSlot(self.pubkey()), CrdsData::SnapshotHashes(_) => CrdsValueLabel::SnapshotHashes(self.pubkey()), @@ -611,9 +613,9 @@ impl CrdsValue { } } } - pub fn contact_info(&self) -> Option<&ContactInfo> { + pub fn contact_info(&self) -> Option<&LegacyContactInfo> { match &self.data { - CrdsData::ContactInfo(contact_info) => Some(contact_info), + CrdsData::LegacyContactInfo(contact_info) => Some(contact_info), _ => None, } } @@ -683,7 +685,6 @@ pub(crate) fn sanitize_wallclock(wallclock: u64) -> Result<(), SanitizeError> { mod test { use { super::*, - crate::contact_info::ContactInfo, bincode::{deserialize, Options}, rand::SeedableRng, rand_chacha::ChaChaRng, @@ -699,10 +700,10 @@ mod test { #[test] fn test_keys_and_values() { let mut rng = rand::thread_rng(); - let v = CrdsValue::new_unsigned(CrdsData::ContactInfo(ContactInfo::default())); + let v = CrdsValue::new_unsigned(CrdsData::LegacyContactInfo(LegacyContactInfo::default())); assert_eq!(v.wallclock(), 0); let key = v.contact_info().unwrap().id; - assert_eq!(v.label(), CrdsValueLabel::ContactInfo(key)); + assert_eq!(v.label(), CrdsValueLabel::LegacyContactInfo(key)); let v = Vote::new(Pubkey::default(), new_test_vote_tx(&mut rng), 0).unwrap(); let v = CrdsValue::new_unsigned(CrdsData::Vote(0, v)); @@ -756,10 +757,9 @@ mod test { let mut rng = rand::thread_rng(); let keypair = Keypair::new(); let wrong_keypair = Keypair::new(); - let mut v = CrdsValue::new_unsigned(CrdsData::ContactInfo(ContactInfo::new_localhost( - &keypair.pubkey(), - timestamp(), - ))); + let mut v = CrdsValue::new_unsigned(CrdsData::LegacyContactInfo( + LegacyContactInfo::new_localhost(&keypair.pubkey(), timestamp()), + )); verify_signatures(&mut v, &keypair, &wrong_keypair); let v = Vote::new(keypair.pubkey(), new_test_vote_tx(&mut rng), timestamp()).unwrap(); let mut v = CrdsValue::new_unsigned(CrdsData::Vote(0, v)); @@ -1035,8 +1035,8 @@ mod test { assert_eq!(node.overrides(&other_crds), None); assert_eq!(other.overrides(&node_crds), None); // Differnt crds value is not a duplicate. - let other = ContactInfo::new_rand(&mut rng, Some(pubkey)); - let other = CrdsValue::new_unsigned(CrdsData::ContactInfo(other)); + let other = LegacyContactInfo::new_rand(&mut rng, Some(pubkey)); + let other = CrdsValue::new_unsigned(CrdsData::LegacyContactInfo(other)); assert!(!node.check_duplicate(&other)); assert_eq!(node.overrides(&other), None); } @@ -1045,13 +1045,10 @@ mod test { fn test_should_force_push() { let mut rng = rand::thread_rng(); let pubkey = Pubkey::new_unique(); - assert!( - !CrdsValue::new_unsigned(CrdsData::ContactInfo(ContactInfo::new_rand( - &mut rng, - Some(pubkey), - ))) - .should_force_push(&pubkey) - ); + assert!(!CrdsValue::new_unsigned(CrdsData::LegacyContactInfo( + LegacyContactInfo::new_rand(&mut rng, Some(pubkey)) + )) + .should_force_push(&pubkey)); let node = CrdsValue::new_unsigned(CrdsData::NodeInstance(NodeInstance::new( &mut rng, pubkey, diff --git a/gossip/src/gossip_service.rs b/gossip/src/gossip_service.rs index d487cf546ef7ca..85f9e0166e49b0 100644 --- a/gossip/src/gossip_service.rs +++ b/gossip/src/gossip_service.rs @@ -1,7 +1,7 @@ //! The `gossip_service` module implements the network control plane. use { - crate::{cluster_info::ClusterInfo, contact_info::ContactInfo}, + crate::{cluster_info::ClusterInfo, legacy_contact_info::LegacyContactInfo as ContactInfo}, crossbeam_channel::{unbounded, Sender}, rand::{thread_rng, Rng}, solana_client::{connection_cache::ConnectionCache, thin_client::ThinClient}, diff --git a/gossip/src/contact_info.rs b/gossip/src/legacy_contact_info.rs similarity index 89% rename from gossip/src/contact_info.rs rename to gossip/src/legacy_contact_info.rs index eb261607cd5970..456355e15e1681 100644 --- a/gossip/src/contact_info.rs +++ b/gossip/src/legacy_contact_info.rs @@ -15,7 +15,7 @@ use { #[derive( Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd, AbiExample, Deserialize, Serialize, )] -pub struct ContactInfo { +pub struct LegacyContactInfo { pub id: Pubkey, /// gossip address pub gossip: SocketAddr, @@ -43,7 +43,7 @@ pub struct ContactInfo { pub shred_version: u16, } -impl Sanitize for ContactInfo { +impl Sanitize for LegacyContactInfo { fn sanitize(&self) -> std::result::Result<(), SanitizeError> { if self.wallclock >= MAX_WALLCLOCK { return Err(SanitizeError::ValueOutOfBounds); @@ -68,9 +68,9 @@ macro_rules! socketaddr_any { }; } -impl Default for ContactInfo { +impl Default for LegacyContactInfo { fn default() -> Self { - ContactInfo { + LegacyContactInfo { id: Pubkey::default(), gossip: socketaddr_any!(), tvu: socketaddr_any!(), @@ -88,7 +88,7 @@ impl Default for ContactInfo { } } -impl ContactInfo { +impl LegacyContactInfo { pub fn new_localhost(id: &Pubkey, now: u64) -> Self { Self { id: *id, @@ -107,18 +107,18 @@ impl ContactInfo { } } - /// New random ContactInfo for tests and simulations. + /// New random LegacyContactInfo for tests and simulations. pub fn new_rand(rng: &mut R, pubkey: Option) -> Self { let delay = 10 * 60 * 1000; // 10 minutes let now = timestamp() - delay + rng.gen_range(0, 2 * delay); let pubkey = pubkey.unwrap_or_else(solana_sdk::pubkey::new_rand); - let mut node = ContactInfo::new_localhost(&pubkey, now); + let mut node = LegacyContactInfo::new_localhost(&pubkey, now); node.gossip.set_port(rng.gen_range(1024, u16::MAX)); node } #[cfg(test)] - /// ContactInfo with multicast addresses for adversarial testing. + /// LegacyContactInfo with multicast addresses for adversarial testing. pub fn new_multicast() -> Self { let addr = socketaddr!("224.0.1.255:1000"); assert!(addr.ip().is_multicast()); @@ -180,13 +180,13 @@ impl ContactInfo { Self::new_with_pubkey_socketaddr(&keypair.pubkey(), bind_addr) } - // Construct a ContactInfo that's only usable for gossip + // Construct a LegacyContactInfo that's only usable for gossip pub fn new_gossip_entry_point(gossip_addr: &SocketAddr) -> Self { Self { id: Pubkey::default(), gossip: *gossip_addr, wallclock: timestamp(), - ..ContactInfo::default() + ..LegacyContactInfo::default() } } @@ -219,8 +219,8 @@ impl ContactInfo { &self, socket_addr_space: &SocketAddrSpace, ) -> Option<(SocketAddr, SocketAddr)> { - if ContactInfo::is_valid_address(&self.rpc, socket_addr_space) - && ContactInfo::is_valid_address(&self.tpu, socket_addr_space) + if LegacyContactInfo::is_valid_address(&self.rpc, socket_addr_space) + && LegacyContactInfo::is_valid_address(&self.tpu, socket_addr_space) { Some((self.rpc, self.tpu)) } else { @@ -236,31 +236,31 @@ mod tests { #[test] fn test_is_valid_address() { let bad_address_port = socketaddr!("127.0.0.1:0"); - assert!(!ContactInfo::is_valid_address( + assert!(!LegacyContactInfo::is_valid_address( &bad_address_port, &SocketAddrSpace::Unspecified )); let bad_address_unspecified = socketaddr!(0, 1234); - assert!(!ContactInfo::is_valid_address( + assert!(!LegacyContactInfo::is_valid_address( &bad_address_unspecified, &SocketAddrSpace::Unspecified )); let bad_address_multicast = socketaddr!([224, 254, 0, 0], 1234); - assert!(!ContactInfo::is_valid_address( + assert!(!LegacyContactInfo::is_valid_address( &bad_address_multicast, &SocketAddrSpace::Unspecified )); let loopback = socketaddr!("127.0.0.1:1234"); - assert!(ContactInfo::is_valid_address( + assert!(LegacyContactInfo::is_valid_address( &loopback, &SocketAddrSpace::Unspecified )); - // assert!(!ContactInfo::is_valid_ip_internal(loopback.ip(), false)); + // assert!(!LegacyContactInfo::is_valid_ip_internal(loopback.ip(), false)); } #[test] fn test_default() { - let ci = ContactInfo::default(); + let ci = LegacyContactInfo::default(); assert!(ci.gossip.ip().is_unspecified()); assert!(ci.tvu.ip().is_unspecified()); assert!(ci.tpu_forwards.ip().is_unspecified()); @@ -272,7 +272,7 @@ mod tests { } #[test] fn test_multicast() { - let ci = ContactInfo::new_multicast(); + let ci = LegacyContactInfo::new_multicast(); assert!(ci.gossip.ip().is_multicast()); assert!(ci.tvu.ip().is_multicast()); assert!(ci.tpu_forwards.ip().is_multicast()); @@ -285,7 +285,7 @@ mod tests { #[test] fn test_entry_point() { let addr = socketaddr!("127.0.0.1:10"); - let ci = ContactInfo::new_gossip_entry_point(&addr); + let ci = LegacyContactInfo::new_gossip_entry_point(&addr); assert_eq!(ci.gossip, addr); assert!(ci.tvu.ip().is_unspecified()); assert!(ci.tpu_forwards.ip().is_unspecified()); @@ -298,7 +298,7 @@ mod tests { #[test] fn test_socketaddr() { let addr = socketaddr!("127.0.0.1:10"); - let ci = ContactInfo::new_with_socketaddr(&addr); + let ci = LegacyContactInfo::new_with_socketaddr(&addr); assert_eq!(ci.tpu, addr); assert_eq!(ci.tpu_vote.port(), 17); assert_eq!(ci.gossip.port(), 11); @@ -312,7 +312,7 @@ mod tests { #[test] fn replayed_data_new_with_socketaddr_with_pubkey() { let keypair = Keypair::new(); - let d1 = ContactInfo::new_with_pubkey_socketaddr( + let d1 = LegacyContactInfo::new_with_pubkey_socketaddr( &keypair.pubkey(), &socketaddr!("127.0.0.1:1234"), ); @@ -337,7 +337,7 @@ mod tests { #[test] fn test_valid_client_facing() { - let mut ci = ContactInfo::default(); + let mut ci = LegacyContactInfo::default(); assert_eq!( ci.valid_client_facing_addr(&SocketAddrSpace::Unspecified), None @@ -355,7 +355,7 @@ mod tests { #[test] fn test_sanitize() { - let mut ci = ContactInfo::default(); + let mut ci = LegacyContactInfo::default(); assert_eq!(ci.sanitize(), Ok(())); ci.wallclock = MAX_WALLCLOCK; assert_eq!(ci.sanitize(), Err(SanitizeError::ValueOutOfBounds)); diff --git a/gossip/src/lib.rs b/gossip/src/lib.rs index 7b37240f896a8e..2435c70d6d6e6f 100644 --- a/gossip/src/lib.rs +++ b/gossip/src/lib.rs @@ -3,8 +3,6 @@ pub mod cluster_info; pub mod cluster_info_metrics; -#[macro_use] -pub mod contact_info; pub mod crds; pub mod crds_entry; pub mod crds_gossip; @@ -18,6 +16,8 @@ pub mod duplicate_shred; pub mod epoch_slots; pub mod gossip_error; pub mod gossip_service; +#[macro_use] +pub mod legacy_contact_info; pub mod ping_pong; pub mod weighted_shuffle; diff --git a/gossip/src/main.rs b/gossip/src/main.rs index f2bb071b2aa82d..8904e1ab974f2c 100644 --- a/gossip/src/main.rs +++ b/gossip/src/main.rs @@ -9,7 +9,9 @@ use { input_parsers::keypair_of, input_validators::{is_keypair_or_ask_keyword, is_port, is_pubkey}, }, - solana_gossip::{contact_info::ContactInfo, gossip_service::discover}, + solana_gossip::{ + gossip_service::discover, legacy_contact_info::LegacyContactInfo as ContactInfo, + }, solana_sdk::pubkey::Pubkey, solana_streamer::socket::SocketAddrSpace, std::{ diff --git a/gossip/tests/cluster_info.rs b/gossip/tests/cluster_info.rs index 1b45ec2aa591ca..15583a63b247ab 100644 --- a/gossip/tests/cluster_info.rs +++ b/gossip/tests/cluster_info.rs @@ -8,7 +8,7 @@ use { serial_test::serial, solana_gossip::{ cluster_info::{compute_retransmit_peers, ClusterInfo}, - contact_info::ContactInfo, + legacy_contact_info::LegacyContactInfo as ContactInfo, weighted_shuffle::WeightedShuffle, }, solana_sdk::{pubkey::Pubkey, signer::keypair::Keypair}, diff --git a/gossip/tests/crds_gossip.rs b/gossip/tests/crds_gossip.rs index 41957285fe2ca2..0295ff03f66e17 100644 --- a/gossip/tests/crds_gossip.rs +++ b/gossip/tests/crds_gossip.rs @@ -7,13 +7,13 @@ use { solana_gossip::{ cluster_info, cluster_info_metrics::GossipStats, - contact_info::ContactInfo, crds::GossipRoute, crds_gossip::*, crds_gossip_error::CrdsGossipError, crds_gossip_pull::{ProcessPullStats, CRDS_GOSSIP_PULL_CRDS_TIMEOUT_MS}, crds_gossip_push::CRDS_GOSSIP_PUSH_MSG_TIMEOUT_MS, crds_value::{CrdsData, CrdsValue, CrdsValueLabel}, + legacy_contact_info::LegacyContactInfo as ContactInfo, ping_pong::PingCache, }, solana_rayon_threadlimit::get_thread_count, @@ -98,12 +98,12 @@ fn stakes(network: &Network) -> HashMap { fn star_network_create(num: usize) -> Network { let node_keypair = Arc::new(Keypair::new()); let contact_info = ContactInfo::new_localhost(&node_keypair.pubkey(), 0); - let entry = CrdsValue::new_unsigned(CrdsData::ContactInfo(contact_info.clone())); + let entry = CrdsValue::new_unsigned(CrdsData::LegacyContactInfo(contact_info.clone())); let mut network: HashMap<_, _> = (1..num) .map(|_| { let node_keypair = Arc::new(Keypair::new()); let contact_info = ContactInfo::new_localhost(&node_keypair.pubkey(), 0); - let new = CrdsValue::new_unsigned(CrdsData::ContactInfo(contact_info.clone())); + let new = CrdsValue::new_unsigned(CrdsData::LegacyContactInfo(contact_info.clone())); let node = CrdsGossip::default(); { let mut node_crds = node.crds.write().unwrap(); @@ -133,7 +133,7 @@ fn star_network_create(num: usize) -> Network { fn rstar_network_create(num: usize) -> Network { let node_keypair = Arc::new(Keypair::new()); let contact_info = ContactInfo::new_localhost(&node_keypair.pubkey(), 0); - let entry = CrdsValue::new_unsigned(CrdsData::ContactInfo(contact_info.clone())); + let entry = CrdsValue::new_unsigned(CrdsData::LegacyContactInfo(contact_info.clone())); let origin = CrdsGossip::default(); let id = entry.label().pubkey(); origin @@ -146,7 +146,7 @@ fn rstar_network_create(num: usize) -> Network { .map(|_| { let node_keypair = Arc::new(Keypair::new()); let contact_info = ContactInfo::new_localhost(&node_keypair.pubkey(), 0); - let new = CrdsValue::new_unsigned(CrdsData::ContactInfo(contact_info.clone())); + let new = CrdsValue::new_unsigned(CrdsData::LegacyContactInfo(contact_info.clone())); let node = CrdsGossip::default(); node.crds .write() @@ -173,7 +173,7 @@ fn ring_network_create(num: usize) -> Network { .map(|_| { let node_keypair = Arc::new(Keypair::new()); let contact_info = ContactInfo::new_localhost(&node_keypair.pubkey(), 0); - let new = CrdsValue::new_unsigned(CrdsData::ContactInfo(contact_info.clone())); + let new = CrdsValue::new_unsigned(CrdsData::LegacyContactInfo(contact_info.clone())); let node = CrdsGossip::default(); node.crds .write() @@ -189,7 +189,7 @@ fn ring_network_create(num: usize) -> Network { let start_info = { let start = &network[&keys[k]]; let start_id = keys[k]; - let label = CrdsValueLabel::ContactInfo(start_id); + let label = CrdsValueLabel::LegacyContactInfo(start_id); let gossip_crds = start.gossip.crds.read().unwrap(); gossip_crds.get::<&CrdsValue>(&label).unwrap().clone() }; @@ -208,7 +208,7 @@ fn connected_staked_network_create(stakes: &[u64]) -> Network { .map(|n| { let node_keypair = Arc::new(Keypair::new()); let contact_info = ContactInfo::new_localhost(&node_keypair.pubkey(), 0); - let new = CrdsValue::new_unsigned(CrdsData::ContactInfo(contact_info.clone())); + let new = CrdsValue::new_unsigned(CrdsData::LegacyContactInfo(contact_info.clone())); let node = CrdsGossip::default(); node.crds .write() @@ -225,7 +225,7 @@ fn connected_staked_network_create(stakes: &[u64]) -> Network { .iter() .map(|k| { let start = &network[k]; - let start_label = CrdsValueLabel::ContactInfo(*k); + let start_label = CrdsValueLabel::LegacyContactInfo(*k); let gossip_crds = start.gossip.crds.read().unwrap(); gossip_crds.get::<&CrdsValue>(&start_label).unwrap().clone() }) @@ -292,7 +292,7 @@ fn network_simulator(thread_pool: &ThreadPool, network: &mut Network, max_conver node.gossip.process_push_message( vec![( Pubkey::default(), - vec![CrdsValue::new_unsigned(CrdsData::ContactInfo(m))], + vec![CrdsValue::new_unsigned(CrdsData::LegacyContactInfo(m))], )], now, ); @@ -508,7 +508,7 @@ fn network_run_pull( ) .unwrap_or_default(); let from_pubkey = from.keypair.pubkey(); - let label = CrdsValueLabel::ContactInfo(from_pubkey); + let label = CrdsValueLabel::LegacyContactInfo(from_pubkey); let gossip_crds = from.gossip.crds.read().unwrap(); let self_info = gossip_crds.get::<&CrdsValue>(&label).unwrap().clone(); requests @@ -730,7 +730,7 @@ fn test_prune_errors() { .write() .unwrap() .insert( - CrdsValue::new_unsigned(CrdsData::ContactInfo(ci.clone())), + CrdsValue::new_unsigned(CrdsData::LegacyContactInfo(ci.clone())), 0, GossipRoute::LocalMessage, ) diff --git a/gossip/tests/gossip.rs b/gossip/tests/gossip.rs index f3e136cdba7f72..954a88b023e972 100644 --- a/gossip/tests/gossip.rs +++ b/gossip/tests/gossip.rs @@ -6,9 +6,9 @@ use { rayon::iter::*, solana_gossip::{ cluster_info::{ClusterInfo, Node}, - contact_info::ContactInfo, crds::Cursor, gossip_service::GossipService, + legacy_contact_info::LegacyContactInfo as ContactInfo, }, solana_perf::packet::Packet, solana_runtime::bank_forks::BankForks, diff --git a/local-cluster/src/cluster.rs b/local-cluster/src/cluster.rs index b5bcf658fb38e9..0cee27e6c99e79 100644 --- a/local-cluster/src/cluster.rs +++ b/local-cluster/src/cluster.rs @@ -1,7 +1,7 @@ use { solana_client::thin_client::ThinClient, solana_core::validator::{Validator, ValidatorConfig}, - solana_gossip::{cluster_info::Node, contact_info::ContactInfo}, + solana_gossip::{cluster_info::Node, legacy_contact_info::LegacyContactInfo as ContactInfo}, solana_sdk::{pubkey::Pubkey, signature::Keypair}, solana_streamer::socket::SocketAddrSpace, std::{path::PathBuf, sync::Arc}, diff --git a/local-cluster/src/cluster_tests.rs b/local-cluster/src/cluster_tests.rs index 7f8c4331a95afb..25edf397905ea6 100644 --- a/local-cluster/src/cluster_tests.rs +++ b/local-cluster/src/cluster_tests.rs @@ -11,10 +11,10 @@ use { solana_entry::entry::{Entry, EntrySlice}, solana_gossip::{ cluster_info, - contact_info::ContactInfo, crds_value::{self, CrdsData, CrdsValue}, gossip_error::GossipError, gossip_service::discover_cluster, + legacy_contact_info::LegacyContactInfo as ContactInfo, }, solana_ledger::blockstore::Blockstore, solana_sdk::{ diff --git a/local-cluster/src/local_cluster.rs b/local-cluster/src/local_cluster.rs index 5389f9dca6c8e6..6b46dbaa820857 100644 --- a/local-cluster/src/local_cluster.rs +++ b/local-cluster/src/local_cluster.rs @@ -18,7 +18,8 @@ use { validator::{Validator, ValidatorConfig, ValidatorStartProgress}, }, solana_gossip::{ - cluster_info::Node, contact_info::ContactInfo, gossip_service::discover_cluster, + cluster_info::Node, gossip_service::discover_cluster, + legacy_contact_info::LegacyContactInfo as ContactInfo, }, solana_ledger::create_new_tmp_ledger, solana_runtime::{ diff --git a/rpc/src/cluster_tpu_info.rs b/rpc/src/cluster_tpu_info.rs index 7e1982cf50b945..5889399b63d2b8 100644 --- a/rpc/src/cluster_tpu_info.rs +++ b/rpc/src/cluster_tpu_info.rs @@ -59,7 +59,7 @@ impl TpuInfo for ClusterTpuInfo { mod test { use { super::*, - solana_gossip::contact_info::ContactInfo, + solana_gossip::legacy_contact_info::LegacyContactInfo as ContactInfo, solana_ledger::{ blockstore::Blockstore, get_tmp_ledger_path, leader_schedule_cache::LeaderScheduleCache, }, diff --git a/rpc/src/rpc.rs b/rpc/src/rpc.rs index bb527349677b74..6fe5086007d6ed 100644 --- a/rpc/src/rpc.rs +++ b/rpc/src/rpc.rs @@ -31,7 +31,9 @@ use { }, solana_entry::entry::Entry, solana_faucet::faucet::request_airdrop_transaction, - solana_gossip::{cluster_info::ClusterInfo, contact_info::ContactInfo}, + solana_gossip::{ + cluster_info::ClusterInfo, legacy_contact_info::LegacyContactInfo as ContactInfo, + }, solana_ledger::{ blockstore::{Blockstore, SignatureInfosForAddress}, blockstore_db::BlockstoreError, @@ -4634,7 +4636,7 @@ pub mod tests { rpc_filter::{Memcmp, MemcmpEncodedBytes}, }, solana_entry::entry::next_versioned_entry, - solana_gossip::{contact_info::ContactInfo, socketaddr}, + solana_gossip::socketaddr, solana_ledger::{ blockstore_meta::PerfSample, blockstore_processor::fill_blockstore_slot_with_ticks, diff --git a/rpc/src/rpc_health.rs b/rpc/src/rpc_health.rs index 89acc2e06ee697..5653ca4d7d4967 100644 --- a/rpc/src/rpc_health.rs +++ b/rpc/src/rpc_health.rs @@ -129,8 +129,8 @@ impl RpcHealth { #[cfg(test)] pub(crate) fn stub() -> Arc { use { - solana_gossip::contact_info::ContactInfo, solana_sdk::signer::keypair::Keypair, - solana_streamer::socket::SocketAddrSpace, + solana_gossip::legacy_contact_info::LegacyContactInfo as ContactInfo, + solana_sdk::signer::keypair::Keypair, solana_streamer::socket::SocketAddrSpace, }; Arc::new(Self::new( Arc::new(ClusterInfo::new( diff --git a/rpc/src/rpc_service.rs b/rpc/src/rpc_service.rs index a1acec205e2302..be529a5954b6fb 100644 --- a/rpc/src/rpc_service.rs +++ b/rpc/src/rpc_service.rs @@ -570,9 +570,9 @@ mod tests { crate::rpc::create_validator_exit, solana_client::rpc_config::RpcContextConfig, solana_gossip::{ - contact_info::ContactInfo, crds::GossipRoute, crds_value::{CrdsData, CrdsValue, SnapshotHashes}, + legacy_contact_info::LegacyContactInfo as ContactInfo, }, solana_ledger::{ genesis_utils::{create_genesis_config, GenesisConfigInfo}, diff --git a/validator/src/admin_rpc_service.rs b/validator/src/admin_rpc_service.rs index f226b5853522e8..1951780d6ed6f7 100644 --- a/validator/src/admin_rpc_service.rs +++ b/validator/src/admin_rpc_service.rs @@ -9,7 +9,9 @@ use { solana_core::{ consensus::Tower, tower_storage::TowerStorage, validator::ValidatorStartProgress, }, - solana_gossip::{cluster_info::ClusterInfo, contact_info::ContactInfo}, + solana_gossip::{ + cluster_info::ClusterInfo, legacy_contact_info::LegacyContactInfo as ContactInfo, + }, solana_runtime::bank_forks::BankForks, solana_sdk::{ exit::Exit, diff --git a/validator/src/bootstrap.rs b/validator/src/bootstrap.rs index b315494ffd8331..9868346e520f18 100644 --- a/validator/src/bootstrap.rs +++ b/validator/src/bootstrap.rs @@ -7,9 +7,9 @@ use { solana_genesis_utils::download_then_check_genesis_hash, solana_gossip::{ cluster_info::{ClusterInfo, Node}, - contact_info::ContactInfo, crds_value, gossip_service::GossipService, + legacy_contact_info::LegacyContactInfo as ContactInfo, }, solana_runtime::{ snapshot_archive_info::SnapshotArchiveInfoGetter, diff --git a/validator/src/main.rs b/validator/src/main.rs index bcf3de9b5c7612..ac62c809afdea8 100644 --- a/validator/src/main.rs +++ b/validator/src/main.rs @@ -31,7 +31,7 @@ use { tpu::DEFAULT_TPU_COALESCE_MS, validator::{is_snapshot_config_valid, Validator, ValidatorConfig, ValidatorStartProgress}, }, - solana_gossip::{cluster_info::Node, contact_info::ContactInfo}, + solana_gossip::{cluster_info::Node, legacy_contact_info::LegacyContactInfo as ContactInfo}, solana_ledger::blockstore_options::{ BlockstoreCompressionType, BlockstoreRecoveryMode, LedgerColumnOptions, ShredStorageType, DEFAULT_ROCKS_FIFO_SHRED_STORAGE_SIZE_BYTES, From f901a85808564023acd578451a36d549b5e97fe7 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Wed, 25 Jan 2023 20:21:11 +0000 Subject: [PATCH 315/465] removes LegacyContactInfo::is_valid_tvu_address (backport #29570) (#29904) removes LegacyContactInfo::is_valid_tvu_address (#29570) Since https://github.com/solana-labs/solana/pull/20480 turbine includes all epoch staked nodes in tree construction and no longer relies on obtaining their contact-info from gossip; and so distinguishing between is_valid_address and is_valid_tvu_address is no longer necessary and the latter can be removed. (cherry picked from commit 677b6d6458336913fa73f41c1d14c71081be945c) Co-authored-by: behzad nouri --- gossip/src/cluster_info.rs | 4 ++-- gossip/src/legacy_contact_info.rs | 9 +-------- 2 files changed, 3 insertions(+), 10 deletions(-) diff --git a/gossip/src/cluster_info.rs b/gossip/src/cluster_info.rs index 6c72c03c8b6247..0cd6d2485e38ac 100644 --- a/gossip/src/cluster_info.rs +++ b/gossip/src/cluster_info.rs @@ -1310,7 +1310,7 @@ impl ClusterInfo { .filter(|node| { node.id != self_pubkey && node.shred_version == self_shred_version - && ContactInfo::is_valid_tvu_address(&node.tvu) + && ContactInfo::is_valid_address(&node.tvu, &self.socket_addr_space) }) .cloned() .collect() @@ -1327,7 +1327,7 @@ impl ClusterInfo { .filter(|node| { node.id != self_pubkey && node.shred_version == self_shred_version - && ContactInfo::is_valid_tvu_address(&node.tvu) + && ContactInfo::is_valid_address(&node.tvu, &self.socket_addr_space) && ContactInfo::is_valid_address(&node.serve_repair, &self.socket_addr_space) && match gossip_crds.get::<&LowestSlot>(node.id) { None => true, // fallback to legacy behavior diff --git a/gossip/src/legacy_contact_info.rs b/gossip/src/legacy_contact_info.rs index 456355e15e1681..9f41c79d65e4c5 100644 --- a/gossip/src/legacy_contact_info.rs +++ b/gossip/src/legacy_contact_info.rs @@ -199,16 +199,9 @@ impl LegacyContactInfo { /// port must not be 0 /// ip must be specified and not multicast /// loopback ip is only allowed in tests - // Keeping this for now not to break tvu-peers and turbine shuffle order of - // nodes when arranging nodes on retransmit tree. Private IP addresses in - // turbine are filtered out just before sending packets. - pub(crate) fn is_valid_tvu_address(addr: &SocketAddr) -> bool { - (addr.port() != 0) && Self::is_valid_ip(addr.ip()) - } - // TODO: Replace this entirely with streamer SocketAddrSpace. pub fn is_valid_address(addr: &SocketAddr, socket_addr_space: &SocketAddrSpace) -> bool { - Self::is_valid_tvu_address(addr) && socket_addr_space.check(addr) + addr.port() != 0u16 && Self::is_valid_ip(addr.ip()) && socket_addr_space.check(addr) } pub fn client_facing_addr(&self) -> (SocketAddr, SocketAddr) { From c3274054497e1ee1fa652694666ef0ea5a45806d Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Thu, 26 Jan 2023 01:38:36 +0100 Subject: [PATCH 316/465] sdk: Expose `CompileError` to the outside (backport #29900) (#29907) sdk: Expose `CompileError` to the outside (#29900) sdk: Expose `CompileError` to users (cherry picked from commit 77c45f04785e263b2fc58bf3d7cedff3d028205b) Co-authored-by: Jon Cinque --- sdk/program/src/message/legacy.rs | 2 +- sdk/program/src/message/mod.rs | 3 +-- sdk/program/src/message/versions/v0/mod.rs | 5 +++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/sdk/program/src/message/legacy.rs b/sdk/program/src/message/legacy.rs index 8b90322400253f..cff7eee56c650d 100644 --- a/sdk/program/src/message/legacy.rs +++ b/sdk/program/src/message/legacy.rs @@ -16,7 +16,7 @@ use { bpf_loader, bpf_loader_deprecated, bpf_loader_upgradeable, hash::Hash, instruction::{CompiledInstruction, Instruction}, - message::{CompiledKeys, MessageHeader}, + message::{compiled_keys::CompiledKeys, MessageHeader}, pubkey::Pubkey, sanitize::{Sanitize, SanitizeError}, short_vec, system_instruction, system_program, sysvar, wasm_bindgen, diff --git a/sdk/program/src/message/mod.rs b/sdk/program/src/message/mod.rs index e507335ae74c66..c950852021a50d 100644 --- a/sdk/program/src/message/mod.rs +++ b/sdk/program/src/message/mod.rs @@ -51,10 +51,9 @@ mod non_bpf_modules { pub use {account_keys::*, address_loader::*, sanitized::*, versions::*}; } -use compiled_keys::*; -pub use legacy::Message; #[cfg(not(target_os = "solana"))] pub use non_bpf_modules::*; +pub use {compiled_keys::CompileError, legacy::Message}; /// The length of a message header in bytes. pub const MESSAGE_HEADER_LENGTH: usize = 3; diff --git a/sdk/program/src/message/versions/v0/mod.rs b/sdk/program/src/message/versions/v0/mod.rs index 61d12ce5eafb48..b63907b27ab3bd 100644 --- a/sdk/program/src/message/versions/v0/mod.rs +++ b/sdk/program/src/message/versions/v0/mod.rs @@ -15,8 +15,9 @@ use crate::{ hash::Hash, instruction::{CompiledInstruction, Instruction}, message::{ - compiled_keys::CompileError, legacy::is_builtin_key_or_sysvar, AccountKeys, CompiledKeys, - MessageHeader, MESSAGE_VERSION_PREFIX, + compiled_keys::{CompileError, CompiledKeys}, + legacy::is_builtin_key_or_sysvar, + AccountKeys, MessageHeader, MESSAGE_VERSION_PREFIX, }, pubkey::Pubkey, sanitize::SanitizeError, From 003f8488e8c0ce53f87ca30618d880e006864c35 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Fri, 27 Jan 2023 11:37:32 -0500 Subject: [PATCH 317/465] Improves RPC path sanitation (backport #29931) (#29946) * Improves RPC path sanitation (#29931) (cherry picked from commit daea6722f67d88c9d63be496d67d0a73482ccaa9) * fixup backport --------- Co-authored-by: Brooks --- rpc/src/rpc_service.rs | 77 +++++++++++++++++++++++++++++++++++++----- 1 file changed, 68 insertions(+), 9 deletions(-) diff --git a/rpc/src/rpc_service.rs b/rpc/src/rpc_service.rs index be529a5954b6fb..7048f1253d400f 100644 --- a/rpc/src/rpc_service.rs +++ b/rpc/src/rpc_service.rs @@ -121,6 +121,10 @@ impl RpcRequestMiddleware { .unwrap() } + fn strip_leading_slash(path: &str) -> Option<&str> { + path.strip_prefix('/') + } + fn is_file_get_path(&self, path: &str) -> bool { if path == DEFAULT_GENESIS_DOWNLOAD_PATH { return true; @@ -130,15 +134,13 @@ impl RpcRequestMiddleware { return false; } - let starting_character = '/'; - if !path.starts_with(starting_character) { - return false; + match Self::strip_leading_slash(path) { + None => false, + Some(path) => { + self.full_snapshot_archive_path_regex.is_match(path) + || self.incremental_snapshot_archive_path_regex.is_match(path) + } } - - let path = path.trim_start_matches(starting_character); - - self.full_snapshot_archive_path_regex.is_match(path) - || self.incremental_snapshot_archive_path_regex.is_match(path) } #[cfg(unix)] @@ -188,8 +190,8 @@ impl RpcRequestMiddleware { } fn process_file_get(&self, path: &str) -> RequestMiddlewareAction { - let stem = path.split_at(1).1; // Drop leading '/' from path let filename = { + let stem = Self::strip_leading_slash(path).expect("path already verified"); match path { DEFAULT_GENESIS_DOWNLOAD_PATH => { inc_new_counter_info!("rpc-get_genesis", 1); @@ -681,6 +683,35 @@ mod tests { ); } + #[test] + fn test_strip_prefix() { + assert_eq!(RpcRequestMiddleware::strip_leading_slash("/"), Some("")); + assert_eq!(RpcRequestMiddleware::strip_leading_slash("//"), Some("/")); + assert_eq!( + RpcRequestMiddleware::strip_leading_slash("/abc"), + Some("abc") + ); + assert_eq!( + RpcRequestMiddleware::strip_leading_slash("//abc"), + Some("/abc") + ); + assert_eq!( + RpcRequestMiddleware::strip_leading_slash("/./abc"), + Some("./abc") + ); + assert_eq!( + RpcRequestMiddleware::strip_leading_slash("/../abc"), + Some("../abc") + ); + + assert_eq!(RpcRequestMiddleware::strip_leading_slash(""), None); + assert_eq!(RpcRequestMiddleware::strip_leading_slash("./"), None); + assert_eq!(RpcRequestMiddleware::strip_leading_slash("../"), None); + assert_eq!(RpcRequestMiddleware::strip_leading_slash("."), None); + assert_eq!(RpcRequestMiddleware::strip_leading_slash(".."), None); + assert_eq!(RpcRequestMiddleware::strip_leading_slash("abc"), None); + } + #[test] fn test_is_file_get_path() { let bank_forks = create_bank_forks(); @@ -699,6 +730,8 @@ mod tests { assert!(rrm.is_file_get_path(DEFAULT_GENESIS_DOWNLOAD_PATH)); assert!(!rrm.is_file_get_path(DEFAULT_GENESIS_ARCHIVE)); + assert!(!rrm.is_file_get_path("//genesis.tar.bz2")); + assert!(!rrm.is_file_get_path("/../genesis.tar.bz2")); assert!(!rrm.is_file_get_path("/snapshot.tar.bz2")); // This is a redirect @@ -748,8 +781,34 @@ mod tests { .is_file_get_path("../../../test/incremental-snapshot-123-456-xxx.tar")); assert!(!rrm.is_file_get_path("/")); + assert!(!rrm.is_file_get_path("//")); + assert!(!rrm.is_file_get_path("/.")); + assert!(!rrm.is_file_get_path("/./")); + assert!(!rrm.is_file_get_path("/..")); + assert!(!rrm.is_file_get_path("/../")); + assert!(!rrm.is_file_get_path(".")); + assert!(!rrm.is_file_get_path("./")); + assert!(!rrm.is_file_get_path(".//")); assert!(!rrm.is_file_get_path("..")); + assert!(!rrm.is_file_get_path("../")); + assert!(!rrm.is_file_get_path("..//")); assert!(!rrm.is_file_get_path("🎣")); + + assert!(!rrm_with_snapshot_config + .is_file_get_path("//snapshot-100-AvFf9oS8A8U78HdjT9YG2sTTThLHJZmhaMn2g8vkWYnr.tar")); + assert!(!rrm_with_snapshot_config + .is_file_get_path("/./snapshot-100-AvFf9oS8A8U78HdjT9YG2sTTThLHJZmhaMn2g8vkWYnr.tar")); + assert!(!rrm_with_snapshot_config + .is_file_get_path("/../snapshot-100-AvFf9oS8A8U78HdjT9YG2sTTThLHJZmhaMn2g8vkWYnr.tar")); + assert!(!rrm_with_snapshot_config.is_file_get_path( + "//incremental-snapshot-100-200-AvFf9oS8A8U78HdjT9YG2sTTThLHJZmhaMn2g8vkWYnr.tar" + )); + assert!(!rrm_with_snapshot_config.is_file_get_path( + "/./incremental-snapshot-100-200-AvFf9oS8A8U78HdjT9YG2sTTThLHJZmhaMn2g8vkWYnr.tar" + )); + assert!(!rrm_with_snapshot_config.is_file_get_path( + "/../incremental-snapshot-100-200-AvFf9oS8A8U78HdjT9YG2sTTThLHJZmhaMn2g8vkWYnr.tar" + )); } #[test] From 27e7b52bd35d39667edf4cdca96369c4733bc94b Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Sat, 28 Jan 2023 00:22:20 +0000 Subject: [PATCH 318/465] feature gates merkle shreds on all clusters (backport #29957) (#29960) feature gates merkle shreds on all clusters (#29957) (cherry picked from commit 7f173ce7c79ceb87bc3055d1664d5ba4955e39b9) Co-authored-by: behzad nouri --- core/src/shred_fetch_stage.rs | 21 +++++++++------------ 1 file changed, 9 insertions(+), 12 deletions(-) diff --git a/core/src/shred_fetch_stage.rs b/core/src/shred_fetch_stage.rs index ee0e4b6e28042f..7da542275d3576 100644 --- a/core/src/shred_fetch_stage.rs +++ b/core/src/shred_fetch_stage.rs @@ -14,7 +14,6 @@ use { solana_sdk::{ clock::{Slot, DEFAULT_MS_PER_SLOT}, feature_set, - genesis_config::ClusterType, }, solana_streamer::streamer::{self, PacketBatchReceiver, StreamerReceiveStats}, std::{ @@ -265,17 +264,15 @@ fn should_discard_packet( #[must_use] fn should_drop_merkle_shreds(shred_slot: Slot, root_bank: &Bank) -> bool { - root_bank.cluster_type() == ClusterType::Testnet - && check_feature_activation( - &feature_set::drop_merkle_shreds::id(), - shred_slot, - root_bank, - ) - && !check_feature_activation( - &feature_set::keep_merkle_shreds::id(), - shred_slot, - root_bank, - ) + check_feature_activation( + &feature_set::drop_merkle_shreds::id(), + shred_slot, + root_bank, + ) && !check_feature_activation( + &feature_set::keep_merkle_shreds::id(), + shred_slot, + root_bank, + ) } #[cfg(test)] From ec320644dbc89d870c21df1d0346931226e798d7 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Fri, 27 Jan 2023 20:07:11 -0800 Subject: [PATCH 319/465] track repair handle_requests time (backport #29940) (#29965) track repair handle_requests time (#29940) (cherry picked from commit 7cacbdcca21976e69ece1c1d91a68c765a69e078) Co-authored-by: Jeff Biseda --- core/src/serve_repair.rs | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/core/src/serve_repair.rs b/core/src/serve_repair.rs index 5e466f39b00d86..07016aeace6a9e 100644 --- a/core/src/serve_repair.rs +++ b/core/src/serve_repair.rs @@ -171,6 +171,7 @@ struct ServeRepairStats { ping_cache_check_failed: usize, pings_sent: usize, decode_time_us: u64, + handle_requests_time_us: u64, err_time_skew: usize, err_malformed: usize, err_sig_verify: usize, @@ -524,7 +525,8 @@ impl ServeRepair { decoded_reqs.truncate(MAX_REQUESTS_PER_ITERATION); } - self.handle_packets( + let handle_requests_start = Instant::now(); + self.handle_requests( ping_cache, recycler, blockstore, @@ -534,6 +536,7 @@ impl ServeRepair { data_budget, cluster_type, ); + stats.handle_requests_time_us += handle_requests_start.elapsed().as_micros() as u64; Ok(()) } @@ -610,6 +613,11 @@ impl ServeRepair { ), ("pings_sent", stats.pings_sent, i64), ("decode_time_us", stats.decode_time_us, i64), + ( + "handle_requests_time_us", + stats.handle_requests_time_us, + i64 + ), ("err_time_skew", stats.err_time_skew, i64), ("err_malformed", stats.err_malformed, i64), ("err_sig_verify", stats.err_sig_verify, i64), @@ -775,7 +783,7 @@ impl ServeRepair { (check, ping_pkt) } - fn handle_packets( + fn handle_requests( &self, ping_cache: &mut PingCache, recycler: &PacketBatchRecycler, From 064b3e3be1d6d9c58caaa8e419f4205759207ec8 Mon Sep 17 00:00:00 2001 From: Yihau Chen Date: Fri, 3 Feb 2023 14:00:02 +0800 Subject: [PATCH 320/465] chore: bump bzip2 from 0.4.3 to 0.4.4 (#30113) --- Cargo.lock | 4 ++-- install/Cargo.toml | 2 +- programs/bpf/Cargo.lock | 4 ++-- runtime/Cargo.toml | 2 +- sdk/cargo-build-sbf/Cargo.toml | 2 +- storage-bigtable/Cargo.toml | 2 +- 6 files changed, 8 insertions(+), 8 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index dde95047c58ff7..89517cb685386d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -630,9 +630,9 @@ checksum = "6c58ec36aac5066d5ca17df51b3e70279f5670a72102f5752cb7e7c856adfc70" [[package]] name = "bzip2" -version = "0.4.3" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6afcd980b5f3a45017c57e57a2fcccbb351cc43a356ce117ef760ef8052b89b0" +checksum = "bdb116a6ef3f6c3698828873ad02c3014b3c85cadb88496095628e3ef1e347f8" dependencies = [ "bzip2-sys", "libc", diff --git a/install/Cargo.toml b/install/Cargo.toml index e7f993166352f6..26dc772af20761 100644 --- a/install/Cargo.toml +++ b/install/Cargo.toml @@ -12,7 +12,7 @@ documentation = "https://docs.rs/solana-install" [dependencies] atty = "0.2.11" bincode = "1.3.3" -bzip2 = "0.4.3" +bzip2 = "0.4.4" chrono = { version = "0.4.11", features = ["serde"] } clap = { version = "2.33.1" } console = "0.15.0" diff --git a/programs/bpf/Cargo.lock b/programs/bpf/Cargo.lock index 1d163cbcbed4de..9b820b6ebbf390 100644 --- a/programs/bpf/Cargo.lock +++ b/programs/bpf/Cargo.lock @@ -583,9 +583,9 @@ checksum = "c4872d67bab6358e59559027aa3b9157c53d9358c51423c17554809a8858e0f8" [[package]] name = "bzip2" -version = "0.4.3" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6afcd980b5f3a45017c57e57a2fcccbb351cc43a356ce117ef760ef8052b89b0" +checksum = "bdb116a6ef3f6c3698828873ad02c3014b3c85cadb88496095628e3ef1e347f8" dependencies = [ "bzip2-sys", "libc", diff --git a/runtime/Cargo.toml b/runtime/Cargo.toml index 9c5ba2b6ead672..e4d42e48acbaa2 100644 --- a/runtime/Cargo.toml +++ b/runtime/Cargo.toml @@ -16,7 +16,7 @@ blake3 = "1.3.1" bv = { version = "0.11.1", features = ["serde"] } bytemuck = "1.11.0" byteorder = "1.4.3" -bzip2 = "0.4.3" +bzip2 = "0.4.4" crossbeam-channel = "0.5" dashmap = { version = "4.0.2", features = ["rayon", "raw-api"] } dir-diff = "0.3.2" diff --git a/sdk/cargo-build-sbf/Cargo.toml b/sdk/cargo-build-sbf/Cargo.toml index b447e141bc7928..ef6ccd766c7e56 100644 --- a/sdk/cargo-build-sbf/Cargo.toml +++ b/sdk/cargo-build-sbf/Cargo.toml @@ -10,7 +10,7 @@ edition = "2021" publish = false [dependencies] -bzip2 = "0.4.3" +bzip2 = "0.4.4" cargo_metadata = "0.15.0" clap = { version = "3.1.5", features = ["cargo", "env"] } log = { version = "0.4.14", features = ["std"] } diff --git a/storage-bigtable/Cargo.toml b/storage-bigtable/Cargo.toml index 630184dbc75afc..bf757aad3a0816 100644 --- a/storage-bigtable/Cargo.toml +++ b/storage-bigtable/Cargo.toml @@ -13,7 +13,7 @@ edition = "2021" backoff = { version = "0.4.0", features = ["tokio"] } bincode = "1.3.3" bytes = "1.0" -bzip2 = "0.4.3" +bzip2 = "0.4.4" enum-iterator = "0.8.1" flate2 = "1.0.24" futures = "0.3.21" From e8bdc8e69e072b7950e4f98547e9c238d6d1e440 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Fri, 3 Feb 2023 17:03:46 +0000 Subject: [PATCH 321/465] ci: cancel previous Windows build when start a new one (backport #30086) (#30109) Co-authored-by: Yihau Chen --- .github/workflows/release-artifacts-auto.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/workflows/release-artifacts-auto.yml b/.github/workflows/release-artifacts-auto.yml index 22249d88d69ba2..d6b490daa8cf98 100644 --- a/.github/workflows/release-artifacts-auto.yml +++ b/.github/workflows/release-artifacts-auto.yml @@ -8,6 +8,10 @@ on: tags: - v[0-9]+.[0-9]+.[0-9]+ +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + jobs: release-artifacts: uses: ./.github/workflows/release-artifacts.yml From 34a11a00a9ef3b06f62a3a51e22fff852722a059 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Fri, 3 Feb 2023 19:00:34 +0000 Subject: [PATCH 322/465] Use TPU IP instead of gossip for QUIC client certificate info (backport #30105) (#30111) Co-authored-by: Pankaj Garg --- core/src/validator.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/validator.rs b/core/src/validator.rs index 74da81d07b2967..3beb6ff8b8d45f 100644 --- a/core/src/validator.rs +++ b/core/src/validator.rs @@ -786,7 +786,7 @@ impl Validator { true => { let mut connection_cache = ConnectionCache::new(tpu_connection_pool_size); connection_cache - .update_client_certificate(&identity_keypair, node.info.gossip.ip()) + .update_client_certificate(&identity_keypair, node.info.tpu.ip()) .expect("Failed to update QUIC client certificates"); connection_cache.set_staked_nodes(&staked_nodes, &identity_keypair.pubkey()); Arc::new(connection_cache) From e2b476e3f4c0fbc9660dfa1b6684b274ea278a6e Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Fri, 3 Feb 2023 18:18:13 -0600 Subject: [PATCH 323/465] feature gate to enable compute_budget::request_heap_frame on mainnetBeta (backport #30077) (#30117) Co-authored-by: Tao Zhu <82401714+taozhu-chicago@users.noreply.github.com> Co-authored-by: Tao Zhu Co-authored-by: Michael Vines --- program-runtime/src/compute_budget.rs | 124 ++++++++++++++++++-- programs/bpf/tests/programs.rs | 2 + runtime/src/accounts.rs | 9 +- runtime/src/bank.rs | 88 +++++++++++++- runtime/src/transaction_priority_details.rs | 1 + sdk/src/feature_set.rs | 5 + 6 files changed, 213 insertions(+), 16 deletions(-) diff --git a/program-runtime/src/compute_budget.rs b/program-runtime/src/compute_budget.rs index 2880cc9d69162c..f0dd852b51f0bd 100644 --- a/program-runtime/src/compute_budget.rs +++ b/program-runtime/src/compute_budget.rs @@ -128,6 +128,7 @@ impl ComputeBudget { instructions: impl Iterator, default_units_per_instruction: bool, support_set_compute_unit_price_ix: bool, + enable_request_heap_frame_ix: bool, ) -> Result { let mut num_non_compute_budget_instructions: usize = 0; let mut updated_compute_unit_limit = None; @@ -209,7 +210,8 @@ impl ComputeBudget { } if let Some((bytes, i)) = requested_heap_size { - if bytes > MAX_HEAP_FRAME_BYTES + if !enable_request_heap_frame_ix + || bytes > MAX_HEAP_FRAME_BYTES || bytes < MIN_HEAP_FRAME_BYTES as u32 || bytes % 1024 != 0 { @@ -267,7 +269,7 @@ mod tests { } macro_rules! test { - ( $instructions: expr, $expected_result: expr, $expected_budget: expr, $type_change: expr ) => { + ( $instructions: expr, $expected_result: expr, $expected_budget: expr, $type_change: expr, $enable_request_heap_frame_ix: expr) => { let payer_keypair = Keypair::new(); let tx = SanitizedTransaction::from_transaction_for_tests(Transaction::new( &[&payer_keypair], @@ -279,12 +281,19 @@ mod tests { tx.message().program_instructions_iter(), true, $type_change, + $enable_request_heap_frame_ix, ); assert_eq!($expected_result, result); assert_eq!(compute_budget, $expected_budget); }; ( $instructions: expr, $expected_result: expr, $expected_budget: expr) => { - test!($instructions, $expected_result, $expected_budget, true); + test!( + $instructions, + $expected_result, + $expected_budget, + true, + true + ); }; } @@ -358,7 +367,8 @@ mod tests { compute_unit_limit: DEFAULT_INSTRUCTION_COMPUTE_UNIT_LIMIT as u64 * 3, ..ComputeBudget::default() }, - false + false, + true ); // Prioritization fee @@ -372,7 +382,8 @@ mod tests { compute_unit_limit: 1, ..ComputeBudget::default() }, - false + false, + true ); test!( @@ -400,7 +411,8 @@ mod tests { compute_unit_limit: 1, ..ComputeBudget::default() }, - false + false, + true ); // HeapFrame @@ -532,7 +544,8 @@ mod tests { InstructionError::InvalidInstructionData, )), ComputeBudget::default(), - false + false, + true ); test!( @@ -568,7 +581,8 @@ mod tests { heap_size: Some(MIN_HEAP_FRAME_BYTES as usize), ..ComputeBudget::default() }, - false + false, + true ); // Duplicates @@ -602,4 +616,98 @@ mod tests { ComputeBudget::default() ); } + + #[test] + fn test_process_instructions_disable_request_heap_frame() { + // assert empty message results default compute budget and fee + test!( + &[], + Ok(PrioritizationFeeDetails::default()), + ComputeBudget { + compute_unit_limit: 0, + ..ComputeBudget::default() + }, + true, + false + ); + + // assert requesting heap frame when feature is disable will result instruction error + test!( + &[ + ComputeBudgetInstruction::request_heap_frame(40 * 1024), + Instruction::new_with_bincode(Pubkey::new_unique(), &0_u8, vec![]), + ], + Err(TransactionError::InstructionError( + 0, + InstructionError::InvalidInstructionData + )), + ComputeBudget::default(), + true, + false + ); + test!( + &[ + Instruction::new_with_bincode(Pubkey::new_unique(), &0_u8, vec![]), + ComputeBudgetInstruction::request_heap_frame(MAX_HEAP_FRAME_BYTES), + ], + Err(TransactionError::InstructionError( + 1, + InstructionError::InvalidInstructionData, + )), + ComputeBudget::default(), + true, + false + ); + test!( + &[ + Instruction::new_with_bincode(Pubkey::new_unique(), &0_u8, vec![]), + ComputeBudgetInstruction::request_heap_frame(MAX_HEAP_FRAME_BYTES), + ComputeBudgetInstruction::set_compute_unit_limit(MAX_COMPUTE_UNIT_LIMIT), + ComputeBudgetInstruction::set_compute_unit_price(u64::MAX), + ], + Err(TransactionError::InstructionError( + 1, + InstructionError::InvalidInstructionData, + )), + ComputeBudget::default(), + true, + false + ); + test!( + &[ + Instruction::new_with_bincode(Pubkey::new_unique(), &0_u8, vec![]), + ComputeBudgetInstruction::set_compute_unit_limit(1), + ComputeBudgetInstruction::request_heap_frame(MAX_HEAP_FRAME_BYTES), + ComputeBudgetInstruction::set_compute_unit_price(u64::MAX), + ], + Err(TransactionError::InstructionError( + 2, + InstructionError::InvalidInstructionData, + )), + ComputeBudget::default(), + true, + false + ); + + // assert normal results when not requesting heap frame when the feature is disabled + test!( + &[ + Instruction::new_with_bincode(Pubkey::new_unique(), &0_u8, vec![]), + Instruction::new_with_bincode(Pubkey::new_unique(), &0_u8, vec![]), + Instruction::new_with_bincode(Pubkey::new_unique(), &0_u8, vec![]), + Instruction::new_with_bincode(Pubkey::new_unique(), &0_u8, vec![]), + Instruction::new_with_bincode(Pubkey::new_unique(), &0_u8, vec![]), + Instruction::new_with_bincode(Pubkey::new_unique(), &0_u8, vec![]), + Instruction::new_with_bincode(Pubkey::new_unique(), &0_u8, vec![]), + Instruction::new_with_bincode(Pubkey::new_unique(), &0_u8, vec![]), + ], + Ok(PrioritizationFeeDetails::default()), + ComputeBudget { + compute_unit_limit: DEFAULT_INSTRUCTION_COMPUTE_UNIT_LIMIT as u64 * 7, + ..ComputeBudget::default() + }, + true, + false + ); + } } diff --git a/programs/bpf/tests/programs.rs b/programs/bpf/tests/programs.rs index e4a2b41e4cd090..bf3b78845e01b5 100644 --- a/programs/bpf/tests/programs.rs +++ b/programs/bpf/tests/programs.rs @@ -3599,6 +3599,7 @@ fn test_program_fees() { &fee_structure, true, true, + true, ); bank_client .send_and_confirm_message(&[&mint_keypair], message) @@ -3621,6 +3622,7 @@ fn test_program_fees() { &fee_structure, true, true, + true, ); assert!(expected_normal_fee < expected_prioritized_fee); diff --git a/runtime/src/accounts.rs b/runtime/src/accounts.rs index 5d8eea943274d0..0e952168feabba 100644 --- a/runtime/src/accounts.rs +++ b/runtime/src/accounts.rs @@ -35,8 +35,9 @@ use { bpf_loader_upgradeable::{self, UpgradeableLoaderState}, clock::{BankId, Slot, INITIAL_RENT_EPOCH}, feature_set::{ - self, add_set_compute_unit_price_ix, return_none_for_zero_lamport_accounts, - use_default_units_in_fee_calculation, FeatureSet, + self, add_set_compute_unit_price_ix, enable_request_heap_frame_ix, + return_none_for_zero_lamport_accounts, use_default_units_in_fee_calculation, + FeatureSet, }, fee::FeeStructure, genesis_config::ClusterType, @@ -571,6 +572,9 @@ impl Accounts { fee_structure, feature_set.is_active(&add_set_compute_unit_price_ix::id()), feature_set.is_active(&use_default_units_in_fee_calculation::id()), + feature_set.is_active(&enable_request_heap_frame_ix::id()) + || self.accounts_db.expected_cluster_type() + != ClusterType::MainnetBeta, ) } else { return (Err(TransactionError::BlockhashNotFound), None); @@ -1697,6 +1701,7 @@ mod tests { &FeeStructure::default(), true, true, + true, ); assert_eq!(fee, lamports_per_signature); diff --git a/runtime/src/bank.rs b/runtime/src/bank.rs index b63b3ba647da70..6938379547ad19 100644 --- a/runtime/src/bank.rs +++ b/runtime/src/bank.rs @@ -108,7 +108,7 @@ use { feature_set::{ self, add_set_compute_unit_price_ix, default_units_per_instruction, disable_fee_calculator, enable_early_verification_of_account_modifications, - use_default_units_in_fee_calculation, FeatureSet, + enable_request_heap_frame_ix, use_default_units_in_fee_calculation, FeatureSet, }, fee::FeeStructure, fee_calculator::{FeeCalculator, FeeRateGovernor}, @@ -3474,6 +3474,7 @@ impl Bank { .is_active(&add_set_compute_unit_price_ix::id()), self.feature_set .is_active(&use_default_units_in_fee_calculation::id()), + self.enable_request_heap_frame_ix(), )) } @@ -3517,6 +3518,7 @@ impl Bank { .is_active(&add_set_compute_unit_price_ix::id()), self.feature_set .is_active(&use_default_units_in_fee_calculation::id()), + self.enable_request_heap_frame_ix(), ) } @@ -4252,6 +4254,15 @@ impl Bank { } } + // A cluster specific feature gate, when not activated it keeps v1.13 behavior in mainnet-beta; + // once activated for v1.14+, it allows compute_budget::request_heap_frame and + // compute_budget::set_compute_unit_price co-exist in same transaction. + fn enable_request_heap_frame_ix(&self) -> bool { + self.feature_set + .is_active(&enable_request_heap_frame_ix::id()) + || self.cluster_type() != ClusterType::MainnetBeta + } + #[allow(clippy::type_complexity)] pub fn load_and_execute_transactions( &self, @@ -4357,6 +4368,7 @@ impl Bank { tx.message().program_instructions_iter(), feature_set.is_active(&default_units_per_instruction::id()), feature_set.is_active(&add_set_compute_unit_price_ix::id()), + true, // don't reject txs that use request heap size ix ); compute_budget_process_transaction_time.stop(); saturating_add_assign!( @@ -4643,6 +4655,7 @@ impl Bank { fee_structure: &FeeStructure, support_set_compute_unit_price_ix: bool, use_default_units_per_instruction: bool, + enable_request_heap_frame_ix: bool, ) -> u64 { // Fee based on compute units and signatures const BASE_CONGESTION: f64 = 5_000.0; @@ -4659,6 +4672,7 @@ impl Bank { message.program_instructions_iter(), use_default_units_per_instruction, support_set_compute_unit_price_ix, + enable_request_heap_frame_ix, ) .unwrap_or_default(); let prioritization_fee = prioritization_fee_details.get_fee(); @@ -4726,6 +4740,7 @@ impl Bank { .is_active(&add_set_compute_unit_price_ix::id()), self.feature_set .is_active(&use_default_units_in_fee_calculation::id()), + self.enable_request_heap_frame_ix(), ); // In case of instruction error, even though no accounts @@ -10690,6 +10705,7 @@ pub(crate) mod tests { &FeeStructure::default(), true, true, + true, ); let (expected_fee_collected, expected_fee_burned) = @@ -10872,6 +10888,7 @@ pub(crate) mod tests { &FeeStructure::default(), true, true, + true, ); assert_eq!( bank.get_balance(&mint_keypair.pubkey()), @@ -10890,6 +10907,7 @@ pub(crate) mod tests { &FeeStructure::default(), true, true, + true, ); assert_eq!( bank.get_balance(&mint_keypair.pubkey()), @@ -11006,6 +11024,7 @@ pub(crate) mod tests { &FeeStructure::default(), true, true, + true, ) * 2 ) .0 @@ -17369,6 +17388,7 @@ pub(crate) mod tests { }, true, true, + true, ), 0 ); @@ -17384,6 +17404,7 @@ pub(crate) mod tests { }, true, true, + true, ), 1 ); @@ -17404,6 +17425,7 @@ pub(crate) mod tests { }, true, true, + true, ), 4 ); @@ -17423,7 +17445,7 @@ pub(crate) mod tests { let message = SanitizedMessage::try_from(Message::new(&[], Some(&Pubkey::new_unique()))).unwrap(); assert_eq!( - Bank::calculate_fee(&message, 1, &fee_structure, true, true,), + Bank::calculate_fee(&message, 1, &fee_structure, true, true, true), max_fee + lamports_per_signature ); @@ -17435,7 +17457,7 @@ pub(crate) mod tests { SanitizedMessage::try_from(Message::new(&[ix0, ix1], Some(&Pubkey::new_unique()))) .unwrap(); assert_eq!( - Bank::calculate_fee(&message, 1, &fee_structure, true, true,), + Bank::calculate_fee(&message, 1, &fee_structure, true, true, true), max_fee + 3 * lamports_per_signature ); @@ -17468,7 +17490,7 @@ pub(crate) mod tests { Some(&Pubkey::new_unique()), )) .unwrap(); - let fee = Bank::calculate_fee(&message, 1, &fee_structure, true, true); + let fee = Bank::calculate_fee(&message, 1, &fee_structure, true, true, true); assert_eq!( fee, lamports_per_signature + prioritization_fee_details.get_fee() @@ -17507,7 +17529,7 @@ pub(crate) mod tests { )) .unwrap(); assert_eq!( - Bank::calculate_fee(&message, 1, &fee_structure, true, true,), + Bank::calculate_fee(&message, 1, &fee_structure, true, true, true), 2 ); @@ -17519,7 +17541,7 @@ pub(crate) mod tests { )) .unwrap(); assert_eq!( - Bank::calculate_fee(&message, 1, &fee_structure, true, true,), + Bank::calculate_fee(&message, 1, &fee_structure, true, true, true), 11 ); } @@ -19163,4 +19185,58 @@ pub(crate) mod tests { ); } } + + #[test] + fn test_calculate_fee_with_request_heap_frame_flag() { + let key0 = Pubkey::new_unique(); + let key1 = Pubkey::new_unique(); + let lamports_per_signature: u64 = 5_000; + let signature_fee: u64 = 10; + let request_cu: u64 = 1; + let lamports_per_cu: u64 = 5; + let fee_structure = FeeStructure { + lamports_per_signature: signature_fee, + ..FeeStructure::default() + }; + let message = SanitizedMessage::try_from(Message::new( + &[ + system_instruction::transfer(&key0, &key1, 1), + ComputeBudgetInstruction::set_compute_unit_limit(request_cu as u32), + ComputeBudgetInstruction::request_heap_frame(40 * 1024), + ComputeBudgetInstruction::set_compute_unit_price(lamports_per_cu * 1_000_000), + ], + Some(&key0), + )) + .unwrap(); + + // assert when enable_request_heap_frame_ix is enabled, prioritization fee will be counted + // into transaction fee + let mut enable_request_heap_frame_ix = true; + assert_eq!( + Bank::calculate_fee( + &message, + lamports_per_signature, + &fee_structure, + true, + true, + enable_request_heap_frame_ix, + ), + signature_fee + request_cu * lamports_per_cu + ); + + // assert when enable_request_heap_frame_ix is disabled (an v1.13 behavior), prioritization fee will not be counted + // into transaction fee + enable_request_heap_frame_ix = false; + assert_eq!( + Bank::calculate_fee( + &message, + lamports_per_signature, + &fee_structure, + true, + true, + enable_request_heap_frame_ix, + ), + signature_fee + ); + } } diff --git a/runtime/src/transaction_priority_details.rs b/runtime/src/transaction_priority_details.rs index 7f816cad2a879a..99bd7a8352c81d 100644 --- a/runtime/src/transaction_priority_details.rs +++ b/runtime/src/transaction_priority_details.rs @@ -25,6 +25,7 @@ pub trait GetTransactionPriorityDetails { instructions, true, // use default units per instruction true, // don't reject txs that use set compute unit price ix + true, // supports request heap frame instruction ) .ok()?; Some(TransactionPriorityDetails { diff --git a/sdk/src/feature_set.rs b/sdk/src/feature_set.rs index 53a7207c3c279e..811ff476c4ffc4 100644 --- a/sdk/src/feature_set.rs +++ b/sdk/src/feature_set.rs @@ -540,6 +540,10 @@ pub mod move_serialized_len_ptr_in_cpi { solana_sdk::declare_id!("74CoWuBmt3rUVUrCb2JiSTvh6nXyBWUsK4SaMj3CtE3T"); } +pub mod enable_request_heap_frame_ix { + solana_sdk::declare_id!("Hr1nUA9b7NJ6eChS26o7Vi8gYYDDwWD3YeBfzJkTbU86"); +} + lazy_static! { /// Map of feature identifiers to user-visible description pub static ref FEATURE_NAMES: HashMap = [ @@ -669,6 +673,7 @@ lazy_static! { (drop_merkle_shreds::id(), "drop merkle shreds #29711"), (keep_merkle_shreds::id(), "keep merkle shreds #29711"), (move_serialized_len_ptr_in_cpi::id(), "cpi ignore serialized_len_ptr #29592"), + (enable_request_heap_frame_ix::id(), "Enable transaction to request heap frame using compute budget instruction #30076"), /*************** ADD NEW FEATURES HERE ***************/ ] .iter() From 984abf0c2efdfbf81baa7e080ed07239f3accffd Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 6 Feb 2023 19:13:32 +0000 Subject: [PATCH 324/465] Bump Version to 1.14.15 (#30149) Co-authored-by: willhickey --- Cargo.lock | 484 ++++++++--------- account-decoder/Cargo.toml | 10 +- accounts-bench/Cargo.toml | 12 +- accounts-cluster-bench/Cargo.toml | 34 +- banking-bench/Cargo.toml | 26 +- banks-client/Cargo.toml | 12 +- banks-interface/Cargo.toml | 4 +- banks-server/Cargo.toml | 12 +- bench-streamer/Cargo.toml | 8 +- bench-tps/Cargo.toml | 38 +- bloom/Cargo.toml | 8 +- bucket_map/Cargo.toml | 8 +- clap-utils/Cargo.toml | 8 +- clap-v3-utils/Cargo.toml | 8 +- cli-config/Cargo.toml | 6 +- cli-output/Cargo.toml | 16 +- cli/Cargo.toml | 38 +- client-test/Cargo.toml | 32 +- client/Cargo.toml | 28 +- core/Cargo.toml | 56 +- dos/Cargo.toml | 30 +- download-utils/Cargo.toml | 6 +- entry/Cargo.toml | 16 +- faucet/Cargo.toml | 14 +- frozen-abi/Cargo.toml | 6 +- frozen-abi/macro/Cargo.toml | 2 +- genesis-utils/Cargo.toml | 8 +- genesis/Cargo.toml | 22 +- geyser-plugin-interface/Cargo.toml | 6 +- geyser-plugin-manager/Cargo.toml | 16 +- gossip/Cargo.toml | 38 +- install/Cargo.toml | 14 +- keygen/Cargo.toml | 12 +- ledger-tool/Cargo.toml | 30 +- ledger/Cargo.toml | 40 +- local-cluster/Cargo.toml | 28 +- log-analyzer/Cargo.toml | 6 +- logger/Cargo.toml | 2 +- measure/Cargo.toml | 4 +- merkle-root-bench/Cargo.toml | 12 +- merkle-tree/Cargo.toml | 4 +- metrics/Cargo.toml | 4 +- net-shaper/Cargo.toml | 4 +- net-utils/Cargo.toml | 8 +- notifier/Cargo.toml | 2 +- perf/Cargo.toml | 12 +- poh-bench/Cargo.toml | 14 +- poh/Cargo.toml | 20 +- program-runtime/Cargo.toml | 14 +- program-test/Cargo.toml | 20 +- .../address-lookup-table-tests/Cargo.toml | 8 +- programs/address-lookup-table/Cargo.toml | 12 +- programs/bpf-loader-tests/Cargo.toml | 8 +- programs/bpf/Cargo.lock | 490 +++++++++--------- programs/bpf/Cargo.toml | 28 +- programs/bpf/rust/128bit/Cargo.toml | 6 +- programs/bpf/rust/128bit_dep/Cargo.toml | 4 +- programs/bpf/rust/alloc/Cargo.toml | 4 +- programs/bpf/rust/call_depth/Cargo.toml | 4 +- programs/bpf/rust/caller_access/Cargo.toml | 4 +- programs/bpf/rust/curve25519/Cargo.toml | 6 +- programs/bpf/rust/custom_heap/Cargo.toml | 4 +- programs/bpf/rust/dep_crate/Cargo.toml | 6 +- .../bpf/rust/deprecated_loader/Cargo.toml | 4 +- programs/bpf/rust/dup_accounts/Cargo.toml | 4 +- programs/bpf/rust/error_handling/Cargo.toml | 4 +- programs/bpf/rust/external_spend/Cargo.toml | 4 +- programs/bpf/rust/finalize/Cargo.toml | 4 +- .../rust/get_minimum_delegation/Cargo.toml | 4 +- .../Cargo.toml | 4 +- .../rust/instruction_introspection/Cargo.toml | 4 +- programs/bpf/rust/invoke/Cargo.toml | 4 +- programs/bpf/rust/invoke_and_error/Cargo.toml | 4 +- programs/bpf/rust/invoke_and_ok/Cargo.toml | 4 +- .../bpf/rust/invoke_and_return/Cargo.toml | 4 +- programs/bpf/rust/invoked/Cargo.toml | 4 +- programs/bpf/rust/iter/Cargo.toml | 4 +- programs/bpf/rust/log_data/Cargo.toml | 4 +- programs/bpf/rust/many_args/Cargo.toml | 6 +- programs/bpf/rust/many_args_dep/Cargo.toml | 4 +- programs/bpf/rust/mem/Cargo.toml | 10 +- programs/bpf/rust/membuiltins/Cargo.toml | 6 +- programs/bpf/rust/noop/Cargo.toml | 4 +- programs/bpf/rust/panic/Cargo.toml | 4 +- programs/bpf/rust/param_passing/Cargo.toml | 6 +- .../bpf/rust/param_passing_dep/Cargo.toml | 4 +- programs/bpf/rust/rand/Cargo.toml | 4 +- programs/bpf/rust/realloc/Cargo.toml | 4 +- programs/bpf/rust/realloc_invoke/Cargo.toml | 6 +- .../bpf/rust/ro_account_modify/Cargo.toml | 4 +- programs/bpf/rust/ro_modify/Cargo.toml | 4 +- programs/bpf/rust/sanity/Cargo.toml | 10 +- .../bpf/rust/secp256k1_recover/Cargo.toml | 4 +- programs/bpf/rust/sha/Cargo.toml | 4 +- .../rust/sibling_inner_instruction/Cargo.toml | 4 +- .../bpf/rust/sibling_instruction/Cargo.toml | 4 +- programs/bpf/rust/simulation/Cargo.toml | 12 +- programs/bpf/rust/spoof1/Cargo.toml | 4 +- programs/bpf/rust/spoof1_system/Cargo.toml | 4 +- programs/bpf/rust/sysvar/Cargo.toml | 10 +- programs/bpf/rust/upgradeable/Cargo.toml | 4 +- programs/bpf/rust/upgraded/Cargo.toml | 4 +- programs/bpf_loader/Cargo.toml | 14 +- .../bpf_loader/gen-syscall-list/Cargo.toml | 2 +- programs/compute-budget/Cargo.toml | 6 +- programs/config/Cargo.toml | 8 +- programs/ed25519-tests/Cargo.toml | 6 +- programs/stake/Cargo.toml | 18 +- programs/vote/Cargo.toml | 14 +- programs/zk-token-proof/Cargo.toml | 8 +- rayon-threadlimit/Cargo.toml | 2 +- rbpf-cli/Cargo.toml | 10 +- remote-wallet/Cargo.toml | 4 +- rpc-test/Cargo.toml | 18 +- rpc/Cargo.toml | 48 +- runtime/Cargo.toml | 34 +- runtime/store-tool/Cargo.toml | 8 +- sdk/Cargo.toml | 12 +- sdk/cargo-build-bpf/Cargo.toml | 4 +- sdk/cargo-build-sbf/Cargo.toml | 8 +- .../tests/crates/fail/Cargo.toml | 4 +- .../tests/crates/noop/Cargo.toml | 4 +- sdk/cargo-test-bpf/Cargo.toml | 2 +- sdk/cargo-test-sbf/Cargo.toml | 2 +- sdk/gen-headers/Cargo.toml | 2 +- sdk/macro/Cargo.toml | 2 +- sdk/program/Cargo.toml | 10 +- send-transaction-service/Cargo.toml | 14 +- stake-accounts/Cargo.toml | 16 +- storage-bigtable/Cargo.toml | 10 +- storage-bigtable/build-proto/Cargo.lock | 2 +- storage-bigtable/build-proto/Cargo.toml | 2 +- storage-proto/Cargo.toml | 8 +- streamer/Cargo.toml | 10 +- sys-tuner/Cargo.toml | 6 +- test-validator/Cargo.toml | 28 +- tokens/Cargo.toml | 24 +- transaction-dos/Cargo.toml | 32 +- transaction-status/Cargo.toml | 14 +- upload-perf/Cargo.toml | 4 +- validator/Cargo.toml | 50 +- version/Cargo.toml | 8 +- watchtower/Cargo.toml | 20 +- zk-token-sdk/Cargo.toml | 6 +- 144 files changed, 1270 insertions(+), 1270 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 89517cb685386d..c3e8e1aaedf60e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1688,7 +1688,7 @@ dependencies = [ [[package]] name = "gen-headers" -version = "1.14.14" +version = "1.14.15" dependencies = [ "log", "regex", @@ -1696,7 +1696,7 @@ dependencies = [ [[package]] name = "gen-syscall-list" -version = "1.14.14" +version = "1.14.15" dependencies = [ "regex", ] @@ -3747,15 +3747,15 @@ dependencies = [ [[package]] name = "rbpf-cli" -version = "1.14.14" +version = "1.14.15" dependencies = [ "clap 3.1.8", "serde", "serde_json", "solana-bpf-loader-program", - "solana-logger 1.14.14", + "solana-logger 1.14.15", "solana-program-runtime", - "solana-sdk 1.14.14", + "solana-sdk 1.14.15", "solana_rbpf", ] @@ -4467,7 +4467,7 @@ dependencies = [ [[package]] name = "solana-account-decoder" -version = "1.14.14" +version = "1.14.15" dependencies = [ "Inflector", "base64 0.13.0", @@ -4480,7 +4480,7 @@ dependencies = [ "serde_json", "solana-address-lookup-table-program", "solana-config-program", - "solana-sdk 1.14.14", + "solana-sdk 1.14.15", "solana-vote-program", "spl-token", "spl-token-2022", @@ -4490,21 +4490,21 @@ dependencies = [ [[package]] name = "solana-accounts-bench" -version = "1.14.14" +version = "1.14.15" dependencies = [ "clap 2.33.3", "log", "rayon", - "solana-logger 1.14.14", + "solana-logger 1.14.15", "solana-measure", "solana-runtime", - "solana-sdk 1.14.14", + "solana-sdk 1.14.15", "solana-version", ] [[package]] name = "solana-accounts-cluster-bench" -version = "1.14.14" +version = "1.14.15" dependencies = [ "clap 2.33.3", "log", @@ -4517,11 +4517,11 @@ dependencies = [ "solana-faucet", "solana-gossip", "solana-local-cluster", - "solana-logger 1.14.14", + "solana-logger 1.14.15", "solana-measure", "solana-net-utils", "solana-runtime", - "solana-sdk 1.14.14", + "solana-sdk 1.14.15", "solana-streamer", "solana-test-validator", "solana-transaction-status", @@ -4531,7 +4531,7 @@ dependencies = [ [[package]] name = "solana-address-lookup-table-program" -version = "1.14.14" +version = "1.14.15" dependencies = [ "bincode", "bytemuck", @@ -4540,28 +4540,28 @@ dependencies = [ "num-traits", "rustc_version 0.4.0", "serde", - "solana-frozen-abi 1.14.14", - "solana-frozen-abi-macro 1.14.14", - "solana-program 1.14.14", + "solana-frozen-abi 1.14.15", + "solana-frozen-abi-macro 1.14.15", + "solana-program 1.14.15", "solana-program-runtime", - "solana-sdk 1.14.14", + "solana-sdk 1.14.15", "thiserror", ] [[package]] name = "solana-address-lookup-table-program-tests" -version = "1.14.14" +version = "1.14.15" dependencies = [ "assert_matches", "bincode", "solana-address-lookup-table-program", "solana-program-test", - "solana-sdk 1.14.14", + "solana-sdk 1.14.15", ] [[package]] name = "solana-banking-bench" -version = "1.14.14" +version = "1.14.15" dependencies = [ "clap 3.1.8", "crossbeam-channel", @@ -4572,27 +4572,27 @@ dependencies = [ "solana-core", "solana-gossip", "solana-ledger", - "solana-logger 1.14.14", + "solana-logger 1.14.15", "solana-measure", "solana-perf", "solana-poh", "solana-runtime", - "solana-sdk 1.14.14", + "solana-sdk 1.14.15", "solana-streamer", "solana-version", ] [[package]] name = "solana-banks-client" -version = "1.14.14" +version = "1.14.15" dependencies = [ "borsh", "futures 0.3.21", "solana-banks-interface", "solana-banks-server", - "solana-program 1.14.14", + "solana-program 1.14.15", "solana-runtime", - "solana-sdk 1.14.14", + "solana-sdk 1.14.15", "tarpc", "thiserror", "tokio", @@ -4601,16 +4601,16 @@ dependencies = [ [[package]] name = "solana-banks-interface" -version = "1.14.14" +version = "1.14.15" dependencies = [ "serde", - "solana-sdk 1.14.14", + "solana-sdk 1.14.15", "tarpc", ] [[package]] name = "solana-banks-server" -version = "1.14.14" +version = "1.14.15" dependencies = [ "bincode", "crossbeam-channel", @@ -4618,7 +4618,7 @@ dependencies = [ "solana-banks-interface", "solana-client", "solana-runtime", - "solana-sdk 1.14.14", + "solana-sdk 1.14.15", "solana-send-transaction-service", "tarpc", "tokio", @@ -4628,7 +4628,7 @@ dependencies = [ [[package]] name = "solana-bench-streamer" -version = "1.14.14" +version = "1.14.15" dependencies = [ "clap 3.1.8", "crossbeam-channel", @@ -4639,7 +4639,7 @@ dependencies = [ [[package]] name = "solana-bench-tps" -version = "1.14.14" +version = "1.14.15" dependencies = [ "clap 2.33.3", "crossbeam-channel", @@ -4656,13 +4656,13 @@ dependencies = [ "solana-genesis", "solana-gossip", "solana-local-cluster", - "solana-logger 1.14.14", + "solana-logger 1.14.15", "solana-measure", "solana-metrics", "solana-net-utils", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.14", + "solana-sdk 1.14.15", "solana-streamer", "solana-test-validator", "solana-version", @@ -4671,7 +4671,7 @@ dependencies = [ [[package]] name = "solana-bloom" -version = "1.14.14" +version = "1.14.15" dependencies = [ "bv", "fnv", @@ -4681,14 +4681,14 @@ dependencies = [ "rustc_version 0.4.0", "serde", "serde_derive", - "solana-frozen-abi 1.14.14", - "solana-frozen-abi-macro 1.14.14", - "solana-sdk 1.14.14", + "solana-frozen-abi 1.14.15", + "solana-frozen-abi-macro 1.14.15", + "solana-sdk 1.14.15", ] [[package]] name = "solana-bpf-loader-program" -version = "1.14.14" +version = "1.14.15" dependencies = [ "bincode", "byteorder", @@ -4699,26 +4699,26 @@ dependencies = [ "solana-metrics", "solana-program-runtime", "solana-runtime", - "solana-sdk 1.14.14", - "solana-zk-token-sdk 1.14.14", + "solana-sdk 1.14.15", + "solana-zk-token-sdk 1.14.15", "solana_rbpf", "thiserror", ] [[package]] name = "solana-bpf-loader-program-tests" -version = "1.14.14" +version = "1.14.15" dependencies = [ "assert_matches", "bincode", "solana-bpf-loader-program", "solana-program-test", - "solana-sdk 1.14.14", + "solana-sdk 1.14.15", ] [[package]] name = "solana-bucket-map" -version = "1.14.14" +version = "1.14.15" dependencies = [ "fs_extra", "log", @@ -4726,24 +4726,24 @@ dependencies = [ "modular-bitfield", "rand 0.7.3", "rayon", - "solana-logger 1.14.14", + "solana-logger 1.14.15", "solana-measure", - "solana-sdk 1.14.14", + "solana-sdk 1.14.15", "tempfile", ] [[package]] name = "solana-cargo-build-bpf" -version = "1.14.14" +version = "1.14.15" dependencies = [ "cargo_metadata", "clap 3.1.8", - "solana-sdk 1.14.14", + "solana-sdk 1.14.15", ] [[package]] name = "solana-cargo-build-sbf" -version = "1.14.14" +version = "1.14.15" dependencies = [ "bzip2", "cargo_metadata", @@ -4752,14 +4752,14 @@ dependencies = [ "regex", "serial_test", "solana-download-utils", - "solana-logger 1.14.14", - "solana-sdk 1.14.14", + "solana-logger 1.14.15", + "solana-sdk 1.14.15", "tar", ] [[package]] name = "solana-cargo-test-bpf" -version = "1.14.14" +version = "1.14.15" dependencies = [ "cargo_metadata", "clap 3.1.8", @@ -4767,7 +4767,7 @@ dependencies = [ [[package]] name = "solana-cargo-test-sbf" -version = "1.14.14" +version = "1.14.15" dependencies = [ "cargo_metadata", "clap 3.1.8", @@ -4775,14 +4775,14 @@ dependencies = [ [[package]] name = "solana-clap-utils" -version = "1.14.14" +version = "1.14.15" dependencies = [ "chrono", "clap 2.33.3", "rpassword", "solana-perf", "solana-remote-wallet", - "solana-sdk 1.14.14", + "solana-sdk 1.14.15", "tempfile", "thiserror", "tiny-bip39", @@ -4792,14 +4792,14 @@ dependencies = [ [[package]] name = "solana-clap-v3-utils" -version = "1.14.14" +version = "1.14.15" dependencies = [ "chrono", "clap 3.1.8", "rpassword", "solana-perf", "solana-remote-wallet", - "solana-sdk 1.14.14", + "solana-sdk 1.14.15", "tempfile", "thiserror", "tiny-bip39", @@ -4809,7 +4809,7 @@ dependencies = [ [[package]] name = "solana-cli" -version = "1.14.14" +version = "1.14.15" dependencies = [ "bincode", "bs58", @@ -4837,10 +4837,10 @@ dependencies = [ "solana-client", "solana-config-program", "solana-faucet", - "solana-logger 1.14.14", + "solana-logger 1.14.15", "solana-program-runtime", "solana-remote-wallet", - "solana-sdk 1.14.14", + "solana-sdk 1.14.15", "solana-streamer", "solana-test-validator", "solana-transaction-status", @@ -4855,7 +4855,7 @@ dependencies = [ [[package]] name = "solana-cli-config" -version = "1.14.14" +version = "1.14.15" dependencies = [ "anyhow", "dirs-next", @@ -4864,13 +4864,13 @@ dependencies = [ "serde_derive", "serde_yaml", "solana-clap-utils", - "solana-sdk 1.14.14", + "solana-sdk 1.14.15", "url 2.2.2", ] [[package]] name = "solana-cli-output" -version = "1.14.14" +version = "1.14.15" dependencies = [ "Inflector", "base64 0.13.0", @@ -4888,7 +4888,7 @@ dependencies = [ "solana-clap-utils", "solana-cli-config", "solana-client", - "solana-sdk 1.14.14", + "solana-sdk 1.14.15", "solana-transaction-status", "solana-vote-program", "spl-memo", @@ -4896,7 +4896,7 @@ dependencies = [ [[package]] name = "solana-client" -version = "1.14.14" +version = "1.14.15" dependencies = [ "anyhow", "assert_matches", @@ -4932,12 +4932,12 @@ dependencies = [ "solana-account-decoder", "solana-clap-utils", "solana-faucet", - "solana-logger 1.14.14", + "solana-logger 1.14.15", "solana-measure", "solana-metrics", "solana-net-utils", "solana-perf", - "solana-sdk 1.14.14", + "solana-sdk 1.14.15", "solana-streamer", "solana-transaction-status", "solana-version", @@ -4953,14 +4953,14 @@ dependencies = [ [[package]] name = "solana-client-test" -version = "1.14.14" +version = "1.14.15" dependencies = [ "futures-util", "serde_json", "serial_test", "solana-client", "solana-ledger", - "solana-logger 1.14.14", + "solana-logger 1.14.15", "solana-measure", "solana-merkle-tree", "solana-metrics", @@ -4968,7 +4968,7 @@ dependencies = [ "solana-rayon-threadlimit", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.14", + "solana-sdk 1.14.15", "solana-streamer", "solana-test-validator", "solana-transaction-status", @@ -4979,28 +4979,28 @@ dependencies = [ [[package]] name = "solana-compute-budget-program" -version = "1.14.14" +version = "1.14.15" dependencies = [ "solana-program-runtime", - "solana-sdk 1.14.14", + "solana-sdk 1.14.15", ] [[package]] name = "solana-config-program" -version = "1.14.14" +version = "1.14.15" dependencies = [ "bincode", "chrono", "serde", "serde_derive", - "solana-logger 1.14.14", + "solana-logger 1.14.15", "solana-program-runtime", - "solana-sdk 1.14.14", + "solana-sdk 1.14.15", ] [[package]] name = "solana-core" -version = "1.14.14" +version = "1.14.15" dependencies = [ "ahash", "base64 0.13.0", @@ -5033,12 +5033,12 @@ dependencies = [ "solana-bloom", "solana-client", "solana-entry", - "solana-frozen-abi 1.14.14", - "solana-frozen-abi-macro 1.14.14", + "solana-frozen-abi 1.14.15", + "solana-frozen-abi-macro 1.14.15", "solana-geyser-plugin-manager", "solana-gossip", "solana-ledger", - "solana-logger 1.14.14", + "solana-logger 1.14.15", "solana-measure", "solana-metrics", "solana-net-utils", @@ -5048,7 +5048,7 @@ dependencies = [ "solana-rayon-threadlimit", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.14", + "solana-sdk 1.14.15", "solana-send-transaction-service", "solana-stake-program", "solana-streamer", @@ -5068,7 +5068,7 @@ dependencies = [ [[package]] name = "solana-dos" -version = "1.14.14" +version = "1.14.15" dependencies = [ "bincode", "clap 3.1.8", @@ -5084,42 +5084,42 @@ dependencies = [ "solana-faucet", "solana-gossip", "solana-local-cluster", - "solana-logger 1.14.14", + "solana-logger 1.14.15", "solana-measure", "solana-net-utils", "solana-perf", "solana-rpc", - "solana-sdk 1.14.14", + "solana-sdk 1.14.15", "solana-streamer", "solana-version", ] [[package]] name = "solana-download-utils" -version = "1.14.14" +version = "1.14.15" dependencies = [ "console", "indicatif", "log", "reqwest", "solana-runtime", - "solana-sdk 1.14.14", + "solana-sdk 1.14.15", ] [[package]] name = "solana-ed25519-program-tests" -version = "1.14.14" +version = "1.14.15" dependencies = [ "assert_matches", "ed25519-dalek", "rand 0.7.3", "solana-program-test", - "solana-sdk 1.14.14", + "solana-sdk 1.14.15", ] [[package]] name = "solana-entry" -version = "1.14.14" +version = "1.14.15" dependencies = [ "bincode", "crossbeam-channel", @@ -5131,18 +5131,18 @@ dependencies = [ "rand 0.7.3", "rayon", "serde", - "solana-logger 1.14.14", + "solana-logger 1.14.15", "solana-measure", "solana-merkle-tree", "solana-metrics", "solana-perf", "solana-rayon-threadlimit", - "solana-sdk 1.14.14", + "solana-sdk 1.14.15", ] [[package]] name = "solana-faucet" -version = "1.14.14" +version = "1.14.15" dependencies = [ "bincode", "byteorder", @@ -5153,9 +5153,9 @@ dependencies = [ "serde_derive", "solana-clap-utils", "solana-cli-config", - "solana-logger 1.14.14", + "solana-logger 1.14.15", "solana-metrics", - "solana-sdk 1.14.14", + "solana-sdk 1.14.15", "solana-version", "spl-memo", "thiserror", @@ -5198,7 +5198,7 @@ dependencies = [ [[package]] name = "solana-frozen-abi" -version = "1.14.14" +version = "1.14.15" dependencies = [ "ahash", "blake3", @@ -5223,8 +5223,8 @@ dependencies = [ "serde_derive", "serde_json", "sha2 0.10.2", - "solana-frozen-abi-macro 1.14.14", - "solana-logger 1.14.14", + "solana-frozen-abi-macro 1.14.15", + "solana-logger 1.14.15", "subtle", "thiserror", ] @@ -5243,7 +5243,7 @@ dependencies = [ [[package]] name = "solana-frozen-abi-macro" -version = "1.14.14" +version = "1.14.15" dependencies = [ "proc-macro2 1.0.41", "quote 1.0.18", @@ -5253,7 +5253,7 @@ dependencies = [ [[package]] name = "solana-genesis" -version = "1.14.14" +version = "1.14.15" dependencies = [ "base64 0.13.0", "clap 2.33.3", @@ -5264,9 +5264,9 @@ dependencies = [ "solana-cli-config", "solana-entry", "solana-ledger", - "solana-logger 1.14.14", + "solana-logger 1.14.15", "solana-runtime", - "solana-sdk 1.14.14", + "solana-sdk 1.14.15", "solana-stake-program", "solana-version", "solana-vote-program", @@ -5275,26 +5275,26 @@ dependencies = [ [[package]] name = "solana-genesis-utils" -version = "1.14.14" +version = "1.14.15" dependencies = [ "solana-download-utils", "solana-runtime", - "solana-sdk 1.14.14", + "solana-sdk 1.14.15", ] [[package]] name = "solana-geyser-plugin-interface" -version = "1.14.14" +version = "1.14.15" dependencies = [ "log", - "solana-sdk 1.14.14", + "solana-sdk 1.14.15", "solana-transaction-status", "thiserror", ] [[package]] name = "solana-geyser-plugin-manager" -version = "1.14.14" +version = "1.14.15" dependencies = [ "bs58", "crossbeam-channel", @@ -5307,14 +5307,14 @@ dependencies = [ "solana-metrics", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.14", + "solana-sdk 1.14.15", "solana-transaction-status", "thiserror", ] [[package]] name = "solana-gossip" -version = "1.14.14" +version = "1.14.15" dependencies = [ "bincode", "bv", @@ -5341,17 +5341,17 @@ dependencies = [ "solana-clap-utils", "solana-client", "solana-entry", - "solana-frozen-abi 1.14.14", - "solana-frozen-abi-macro 1.14.14", + "solana-frozen-abi 1.14.15", + "solana-frozen-abi-macro 1.14.15", "solana-ledger", - "solana-logger 1.14.14", + "solana-logger 1.14.15", "solana-measure", "solana-metrics", "solana-net-utils", "solana-perf", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.14.14", + "solana-sdk 1.14.15", "solana-streamer", "solana-version", "solana-vote-program", @@ -5360,7 +5360,7 @@ dependencies = [ [[package]] name = "solana-install" -version = "1.14.14" +version = "1.14.15" dependencies = [ "atty", "bincode", @@ -5381,8 +5381,8 @@ dependencies = [ "solana-clap-utils", "solana-client", "solana-config-program", - "solana-logger 1.14.14", - "solana-sdk 1.14.14", + "solana-logger 1.14.15", + "solana-sdk 1.14.15", "solana-version", "tar", "tempfile", @@ -5393,7 +5393,7 @@ dependencies = [ [[package]] name = "solana-keygen" -version = "1.14.14" +version = "1.14.15" dependencies = [ "bs58", "clap 3.1.8", @@ -5402,14 +5402,14 @@ dependencies = [ "solana-clap-v3-utils", "solana-cli-config", "solana-remote-wallet", - "solana-sdk 1.14.14", + "solana-sdk 1.14.15", "solana-version", "tiny-bip39", ] [[package]] name = "solana-ledger" -version = "1.14.14" +version = "1.14.15" dependencies = [ "assert_matches", "bincode", @@ -5443,16 +5443,16 @@ dependencies = [ "solana-account-decoder", "solana-bpf-loader-program", "solana-entry", - "solana-frozen-abi 1.14.14", - "solana-frozen-abi-macro 1.14.14", - "solana-logger 1.14.14", + "solana-frozen-abi 1.14.15", + "solana-frozen-abi-macro 1.14.15", + "solana-logger 1.14.15", "solana-measure", "solana-metrics", "solana-perf", "solana-program-runtime", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.14.14", + "solana-sdk 1.14.15", "solana-stake-program", "solana-storage-bigtable", "solana-storage-proto", @@ -5471,7 +5471,7 @@ dependencies = [ [[package]] name = "solana-ledger-tool" -version = "1.14.14" +version = "1.14.15" dependencies = [ "assert_cmd", "base64 0.13.0", @@ -5493,10 +5493,10 @@ dependencies = [ "solana-core", "solana-entry", "solana-ledger", - "solana-logger 1.14.14", + "solana-logger 1.14.15", "solana-measure", "solana-runtime", - "solana-sdk 1.14.14", + "solana-sdk 1.14.15", "solana-stake-program", "solana-storage-bigtable", "solana-transaction-status", @@ -5508,7 +5508,7 @@ dependencies = [ [[package]] name = "solana-local-cluster" -version = "1.14.14" +version = "1.14.15" dependencies = [ "assert_matches", "crossbeam-channel", @@ -5526,9 +5526,9 @@ dependencies = [ "solana-entry", "solana-gossip", "solana-ledger", - "solana-logger 1.14.14", + "solana-logger 1.14.15", "solana-runtime", - "solana-sdk 1.14.14", + "solana-sdk 1.14.15", "solana-stake-program", "solana-streamer", "solana-vote-program", @@ -5537,13 +5537,13 @@ dependencies = [ [[package]] name = "solana-log-analyzer" -version = "1.14.14" +version = "1.14.15" dependencies = [ "byte-unit", "clap 3.1.8", "serde", "serde_json", - "solana-logger 1.14.14", + "solana-logger 1.14.15", "solana-version", ] @@ -5560,7 +5560,7 @@ dependencies = [ [[package]] name = "solana-logger" -version = "1.14.14" +version = "1.14.15" dependencies = [ "env_logger", "lazy_static", @@ -5569,38 +5569,38 @@ dependencies = [ [[package]] name = "solana-measure" -version = "1.14.14" +version = "1.14.15" dependencies = [ "log", - "solana-sdk 1.14.14", + "solana-sdk 1.14.15", ] [[package]] name = "solana-merkle-root-bench" -version = "1.14.14" +version = "1.14.15" dependencies = [ "clap 2.33.3", "log", - "solana-logger 1.14.14", + "solana-logger 1.14.15", "solana-measure", "solana-runtime", - "solana-sdk 1.14.14", + "solana-sdk 1.14.15", "solana-version", ] [[package]] name = "solana-merkle-tree" -version = "1.14.14" +version = "1.14.15" dependencies = [ "fast-math", "hex", "matches", - "solana-program 1.14.14", + "solana-program 1.14.15", ] [[package]] name = "solana-metrics" -version = "1.14.14" +version = "1.14.15" dependencies = [ "crossbeam-channel", "env_logger", @@ -5610,23 +5610,23 @@ dependencies = [ "rand 0.7.3", "reqwest", "serial_test", - "solana-sdk 1.14.14", + "solana-sdk 1.14.15", ] [[package]] name = "solana-net-shaper" -version = "1.14.14" +version = "1.14.15" dependencies = [ "clap 3.1.8", "rand 0.7.3", "serde", "serde_json", - "solana-logger 1.14.14", + "solana-logger 1.14.15", ] [[package]] name = "solana-net-utils" -version = "1.14.14" +version = "1.14.15" dependencies = [ "bincode", "clap 3.1.8", @@ -5637,8 +5637,8 @@ dependencies = [ "serde", "serde_derive", "socket2", - "solana-logger 1.14.14", - "solana-sdk 1.14.14", + "solana-logger 1.14.15", + "solana-sdk 1.14.15", "solana-version", "tokio", "url 2.2.2", @@ -5646,7 +5646,7 @@ dependencies = [ [[package]] name = "solana-notifier" -version = "1.14.14" +version = "1.14.15" dependencies = [ "log", "reqwest", @@ -5655,7 +5655,7 @@ dependencies = [ [[package]] name = "solana-perf" -version = "1.14.14" +version = "1.14.15" dependencies = [ "ahash", "bincode", @@ -5673,16 +5673,16 @@ dependencies = [ "rand 0.7.3", "rayon", "serde", - "solana-logger 1.14.14", + "solana-logger 1.14.15", "solana-metrics", "solana-rayon-threadlimit", - "solana-sdk 1.14.14", + "solana-sdk 1.14.15", "solana-vote-program", ] [[package]] name = "solana-poh" -version = "1.14.14" +version = "1.14.15" dependencies = [ "bincode", "core_affinity", @@ -5692,29 +5692,29 @@ dependencies = [ "rand 0.7.3", "solana-entry", "solana-ledger", - "solana-logger 1.14.14", + "solana-logger 1.14.15", "solana-measure", "solana-metrics", "solana-perf", "solana-runtime", - "solana-sdk 1.14.14", + "solana-sdk 1.14.15", "solana-sys-tuner", "thiserror", ] [[package]] name = "solana-poh-bench" -version = "1.14.14" +version = "1.14.15" dependencies = [ "clap 3.1.8", "log", "rand 0.7.3", "rayon", "solana-entry", - "solana-logger 1.14.14", + "solana-logger 1.14.15", "solana-measure", "solana-perf", - "solana-sdk 1.14.14", + "solana-sdk 1.14.15", "solana-version", ] @@ -5769,7 +5769,7 @@ dependencies = [ [[package]] name = "solana-program" -version = "1.14.14" +version = "1.14.15" dependencies = [ "anyhow", "assert_matches", @@ -5807,10 +5807,10 @@ dependencies = [ "serde_json", "sha2 0.10.2", "sha3 0.10.1", - "solana-frozen-abi 1.14.14", - "solana-frozen-abi-macro 1.14.14", - "solana-logger 1.14.14", - "solana-sdk-macro 1.14.14", + "solana-frozen-abi 1.14.15", + "solana-frozen-abi-macro 1.14.15", + "solana-logger 1.14.15", + "solana-sdk-macro 1.14.15", "static_assertions", "thiserror", "tiny-bip39", @@ -5820,7 +5820,7 @@ dependencies = [ [[package]] name = "solana-program-runtime" -version = "1.14.14" +version = "1.14.15" dependencies = [ "base64 0.13.0", "bincode", @@ -5835,18 +5835,18 @@ dependencies = [ "rand 0.7.3", "rustc_version 0.4.0", "serde", - "solana-frozen-abi 1.14.14", - "solana-frozen-abi-macro 1.14.14", - "solana-logger 1.14.14", + "solana-frozen-abi 1.14.15", + "solana-frozen-abi-macro 1.14.15", + "solana-logger 1.14.15", "solana-measure", "solana-metrics", - "solana-sdk 1.14.14", + "solana-sdk 1.14.15", "thiserror", ] [[package]] name = "solana-program-test" -version = "1.14.14" +version = "1.14.15" dependencies = [ "assert_matches", "async-trait", @@ -5858,10 +5858,10 @@ dependencies = [ "solana-banks-client", "solana-banks-server", "solana-bpf-loader-program", - "solana-logger 1.14.14", + "solana-logger 1.14.15", "solana-program-runtime", "solana-runtime", - "solana-sdk 1.14.14", + "solana-sdk 1.14.15", "solana-stake-program", "solana-vote-program", "thiserror", @@ -5870,7 +5870,7 @@ dependencies = [ [[package]] name = "solana-rayon-threadlimit" -version = "1.14.14" +version = "1.14.15" dependencies = [ "lazy_static", "num_cpus", @@ -5878,7 +5878,7 @@ dependencies = [ [[package]] name = "solana-remote-wallet" -version = "1.14.14" +version = "1.14.15" dependencies = [ "console", "dialoguer", @@ -5889,14 +5889,14 @@ dependencies = [ "parking_lot 0.12.1", "qstring", "semver 1.0.10", - "solana-sdk 1.14.14", + "solana-sdk 1.14.15", "thiserror", "uriparse", ] [[package]] name = "solana-rpc" -version = "1.14.14" +version = "1.14.15" dependencies = [ "base64 0.13.0", "bincode", @@ -5932,7 +5932,7 @@ dependencies = [ "solana-poh", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.14.14", + "solana-sdk 1.14.15", "solana-send-transaction-service", "solana-stake-program", "solana-storage-bigtable", @@ -5951,7 +5951,7 @@ dependencies = [ [[package]] name = "solana-rpc-test" -version = "1.14.14" +version = "1.14.15" dependencies = [ "bincode", "bs58", @@ -5963,9 +5963,9 @@ dependencies = [ "serde_json", "solana-account-decoder", "solana-client", - "solana-logger 1.14.14", + "solana-logger 1.14.15", "solana-rpc", - "solana-sdk 1.14.14", + "solana-sdk 1.14.15", "solana-streamer", "solana-test-validator", "solana-transaction-status", @@ -5974,7 +5974,7 @@ dependencies = [ [[package]] name = "solana-runtime" -version = "1.14.14" +version = "1.14.15" dependencies = [ "arrayref", "assert_matches", @@ -6015,18 +6015,18 @@ dependencies = [ "solana-bucket-map", "solana-compute-budget-program", "solana-config-program", - "solana-frozen-abi 1.14.14", - "solana-frozen-abi-macro 1.14.14", - "solana-logger 1.14.14", + "solana-frozen-abi 1.14.15", + "solana-frozen-abi-macro 1.14.15", + "solana-logger 1.14.15", "solana-measure", "solana-metrics", "solana-program-runtime", "solana-rayon-threadlimit", - "solana-sdk 1.14.14", + "solana-sdk 1.14.15", "solana-stake-program", "solana-vote-program", "solana-zk-token-proof-program", - "solana-zk-token-sdk 1.14.14", + "solana-zk-token-sdk 1.14.15", "strum", "strum_macros", "symlink", @@ -6089,7 +6089,7 @@ dependencies = [ [[package]] name = "solana-sdk" -version = "1.14.14" +version = "1.14.15" dependencies = [ "anyhow", "assert_matches", @@ -6129,11 +6129,11 @@ dependencies = [ "serde_json", "sha2 0.10.2", "sha3 0.10.1", - "solana-frozen-abi 1.14.14", - "solana-frozen-abi-macro 1.14.14", - "solana-logger 1.14.14", - "solana-program 1.14.14", - "solana-sdk-macro 1.14.14", + "solana-frozen-abi 1.14.15", + "solana-frozen-abi-macro 1.14.15", + "solana-logger 1.14.15", + "solana-program 1.14.15", + "solana-sdk-macro 1.14.15", "static_assertions", "thiserror", "tiny-bip39", @@ -6156,7 +6156,7 @@ dependencies = [ [[package]] name = "solana-sdk-macro" -version = "1.14.14" +version = "1.14.15" dependencies = [ "bs58", "proc-macro2 1.0.41", @@ -6167,21 +6167,21 @@ dependencies = [ [[package]] name = "solana-send-transaction-service" -version = "1.14.14" +version = "1.14.15" dependencies = [ "crossbeam-channel", "log", "solana-client", - "solana-logger 1.14.14", + "solana-logger 1.14.15", "solana-measure", "solana-metrics", "solana-runtime", - "solana-sdk 1.14.14", + "solana-sdk 1.14.15", ] [[package]] name = "solana-stake-accounts" -version = "1.14.14" +version = "1.14.15" dependencies = [ "clap 2.33.3", "solana-clap-utils", @@ -6189,13 +6189,13 @@ dependencies = [ "solana-client", "solana-remote-wallet", "solana-runtime", - "solana-sdk 1.14.14", + "solana-sdk 1.14.15", "solana-stake-program", ] [[package]] name = "solana-stake-program" -version = "1.14.14" +version = "1.14.15" dependencies = [ "assert_matches", "bincode", @@ -6207,12 +6207,12 @@ dependencies = [ "serde", "serde_derive", "solana-config-program", - "solana-frozen-abi 1.14.14", - "solana-frozen-abi-macro 1.14.14", - "solana-logger 1.14.14", + "solana-frozen-abi 1.14.15", + "solana-frozen-abi-macro 1.14.15", + "solana-logger 1.14.15", "solana-metrics", "solana-program-runtime", - "solana-sdk 1.14.14", + "solana-sdk 1.14.15", "solana-vote-program", "test-case", "thiserror", @@ -6220,7 +6220,7 @@ dependencies = [ [[package]] name = "solana-storage-bigtable" -version = "1.14.14" +version = "1.14.15" dependencies = [ "backoff", "bincode", @@ -6241,7 +6241,7 @@ dependencies = [ "serde_derive", "smpl_jwt", "solana-metrics", - "solana-sdk 1.14.14", + "solana-sdk 1.14.15", "solana-storage-proto", "solana-transaction-status", "thiserror", @@ -6252,7 +6252,7 @@ dependencies = [ [[package]] name = "solana-storage-proto" -version = "1.14.14" +version = "1.14.15" dependencies = [ "bincode", "bs58", @@ -6261,25 +6261,25 @@ dependencies = [ "protobuf-src", "serde", "solana-account-decoder", - "solana-sdk 1.14.14", + "solana-sdk 1.14.15", "solana-transaction-status", "tonic-build 0.8.0", ] [[package]] name = "solana-store-tool" -version = "1.14.14" +version = "1.14.15" dependencies = [ "clap 2.33.3", "log", - "solana-logger 1.14.14", + "solana-logger 1.14.15", "solana-runtime", "solana-version", ] [[package]] name = "solana-streamer" -version = "1.14.14" +version = "1.14.15" dependencies = [ "crossbeam-channel", "futures-util", @@ -6296,10 +6296,10 @@ dependencies = [ "rand 0.7.3", "rcgen", "rustls 0.20.6", - "solana-logger 1.14.14", + "solana-logger 1.14.15", "solana-metrics", "solana-perf", - "solana-sdk 1.14.14", + "solana-sdk 1.14.15", "thiserror", "tokio", "x509-parser", @@ -6307,13 +6307,13 @@ dependencies = [ [[package]] name = "solana-sys-tuner" -version = "1.14.14" +version = "1.14.15" dependencies = [ "clap 2.33.3", "libc", "log", "nix", - "solana-logger 1.14.14", + "solana-logger 1.14.15", "solana-version", "sysctl", "unix_socket2", @@ -6322,7 +6322,7 @@ dependencies = [ [[package]] name = "solana-test-validator" -version = "1.14.14" +version = "1.14.15" dependencies = [ "base64 0.13.0", "log", @@ -6333,20 +6333,20 @@ dependencies = [ "solana-core", "solana-gossip", "solana-ledger", - "solana-logger 1.14.14", + "solana-logger 1.14.15", "solana-net-utils", "solana-program-runtime", "solana-program-test", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.14", + "solana-sdk 1.14.15", "solana-streamer", "tokio", ] [[package]] name = "solana-tokens" -version = "1.14.14" +version = "1.14.15" dependencies = [ "bincode", "chrono", @@ -6362,9 +6362,9 @@ dependencies = [ "solana-clap-utils", "solana-cli-config", "solana-client", - "solana-logger 1.14.14", + "solana-logger 1.14.15", "solana-remote-wallet", - "solana-sdk 1.14.14", + "solana-sdk 1.14.15", "solana-streamer", "solana-test-validator", "solana-transaction-status", @@ -6377,7 +6377,7 @@ dependencies = [ [[package]] name = "solana-transaction-dos" -version = "1.14.14" +version = "1.14.15" dependencies = [ "bincode", "clap 2.33.3", @@ -6391,11 +6391,11 @@ dependencies = [ "solana-faucet", "solana-gossip", "solana-local-cluster", - "solana-logger 1.14.14", + "solana-logger 1.14.15", "solana-measure", "solana-net-utils", "solana-runtime", - "solana-sdk 1.14.14", + "solana-sdk 1.14.15", "solana-streamer", "solana-transaction-status", "solana-version", @@ -6403,7 +6403,7 @@ dependencies = [ [[package]] name = "solana-transaction-status" -version = "1.14.14" +version = "1.14.15" dependencies = [ "Inflector", "base64 0.13.0", @@ -6419,7 +6419,7 @@ dependencies = [ "solana-address-lookup-table-program", "solana-measure", "solana-metrics", - "solana-sdk 1.14.14", + "solana-sdk 1.14.15", "solana-vote-program", "spl-associated-token-account", "spl-memo", @@ -6430,7 +6430,7 @@ dependencies = [ [[package]] name = "solana-upload-perf" -version = "1.14.14" +version = "1.14.15" dependencies = [ "serde_json", "solana-metrics", @@ -6438,7 +6438,7 @@ dependencies = [ [[package]] name = "solana-validator" -version = "1.14.14" +version = "1.14.15" dependencies = [ "chrono", "clap 2.33.3", @@ -6469,14 +6469,14 @@ dependencies = [ "solana-genesis-utils", "solana-gossip", "solana-ledger", - "solana-logger 1.14.14", + "solana-logger 1.14.15", "solana-metrics", "solana-net-utils", "solana-perf", "solana-poh", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.14", + "solana-sdk 1.14.15", "solana-send-transaction-service", "solana-storage-bigtable", "solana-streamer", @@ -6489,21 +6489,21 @@ dependencies = [ [[package]] name = "solana-version" -version = "1.14.14" +version = "1.14.15" dependencies = [ "log", "rustc_version 0.4.0", "semver 1.0.10", "serde", "serde_derive", - "solana-frozen-abi 1.14.14", - "solana-frozen-abi-macro 1.14.14", - "solana-sdk 1.14.14", + "solana-frozen-abi 1.14.15", + "solana-frozen-abi-macro 1.14.15", + "solana-sdk 1.14.15", ] [[package]] name = "solana-vote-program" -version = "1.14.14" +version = "1.14.15" dependencies = [ "bincode", "itertools", @@ -6514,19 +6514,19 @@ dependencies = [ "rustc_version 0.4.0", "serde", "serde_derive", - "solana-frozen-abi 1.14.14", - "solana-frozen-abi-macro 1.14.14", - "solana-logger 1.14.14", + "solana-frozen-abi 1.14.15", + "solana-frozen-abi-macro 1.14.15", + "solana-logger 1.14.15", "solana-metrics", "solana-program-runtime", - "solana-sdk 1.14.14", + "solana-sdk 1.14.15", "test-case", "thiserror", ] [[package]] name = "solana-watchtower" -version = "1.14.14" +version = "1.14.15" dependencies = [ "clap 2.33.3", "humantime", @@ -6535,24 +6535,24 @@ dependencies = [ "solana-cli-config", "solana-cli-output", "solana-client", - "solana-logger 1.14.14", + "solana-logger 1.14.15", "solana-metrics", "solana-notifier", - "solana-sdk 1.14.14", + "solana-sdk 1.14.15", "solana-version", ] [[package]] name = "solana-zk-token-proof-program" -version = "1.14.14" +version = "1.14.15" dependencies = [ "bytemuck", "getrandom 0.1.16", "num-derive", "num-traits", "solana-program-runtime", - "solana-sdk 1.14.14", - "solana-zk-token-sdk 1.14.14", + "solana-sdk 1.14.15", + "solana-zk-token-sdk 1.14.15", ] [[package]] @@ -6588,7 +6588,7 @@ dependencies = [ [[package]] name = "solana-zk-token-sdk" -version = "1.14.14" +version = "1.14.15" dependencies = [ "aes-gcm-siv", "arrayref", @@ -6608,8 +6608,8 @@ dependencies = [ "serde", "serde_json", "sha3 0.9.1", - "solana-program 1.14.14", - "solana-sdk 1.14.14", + "solana-program 1.14.15", + "solana-sdk 1.14.15", "subtle", "thiserror", "zeroize", diff --git a/account-decoder/Cargo.toml b/account-decoder/Cargo.toml index 03c4bb76131e12..273a1e2bd954c9 100644 --- a/account-decoder/Cargo.toml +++ b/account-decoder/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-account-decoder" -version = "1.14.14" +version = "1.14.15" description = "Solana account decoder" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -19,10 +19,10 @@ lazy_static = "1.4.0" serde = "1.0.138" serde_derive = "1.0.103" serde_json = "1.0.81" -solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.14" } -solana-config-program = { path = "../programs/config", version = "=1.14.14" } -solana-sdk = { path = "../sdk", version = "=1.14.14" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.14" } +solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.15" } +solana-config-program = { path = "../programs/config", version = "=1.14.15" } +solana-sdk = { path = "../sdk", version = "=1.14.15" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.15" } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } spl-token-2022 = { version = "=0.5.0", features = ["no-entrypoint"] } thiserror = "1.0" diff --git a/accounts-bench/Cargo.toml b/accounts-bench/Cargo.toml index 9c2f895c1cb10a..8d0d76879769fc 100644 --- a/accounts-bench/Cargo.toml +++ b/accounts-bench/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-accounts-bench" -version = "1.14.14" +version = "1.14.15" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -12,11 +12,11 @@ publish = false clap = "2.33.1" log = "0.4.17" rayon = "1.5.3" -solana-logger = { path = "../logger", version = "=1.14.14" } -solana-measure = { path = "../measure", version = "=1.14.14" } -solana-runtime = { path = "../runtime", version = "=1.14.14" } -solana-sdk = { path = "../sdk", version = "=1.14.14" } -solana-version = { path = "../version", version = "=1.14.14" } +solana-logger = { path = "../logger", version = "=1.14.15" } +solana-measure = { path = "../measure", version = "=1.14.15" } +solana-runtime = { path = "../runtime", version = "=1.14.15" } +solana-sdk = { path = "../sdk", version = "=1.14.15" } +solana-version = { path = "../version", version = "=1.14.15" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/accounts-cluster-bench/Cargo.toml b/accounts-cluster-bench/Cargo.toml index a46693445da1cf..f6d6e5108e3f8e 100644 --- a/accounts-cluster-bench/Cargo.toml +++ b/accounts-cluster-bench/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-accounts-cluster-bench" -version = "1.14.14" +version = "1.14.15" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -13,25 +13,25 @@ clap = "2.33.1" log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.14" } -solana-clap-utils = { path = "../clap-utils", version = "=1.14.14" } -solana-client = { path = "../client", version = "=1.14.14" } -solana-faucet = { path = "../faucet", version = "=1.14.14" } -solana-gossip = { path = "../gossip", version = "=1.14.14" } -solana-logger = { path = "../logger", version = "=1.14.14" } -solana-measure = { path = "../measure", version = "=1.14.14" } -solana-net-utils = { path = "../net-utils", version = "=1.14.14" } -solana-runtime = { path = "../runtime", version = "=1.14.14" } -solana-sdk = { path = "../sdk", version = "=1.14.14" } -solana-streamer = { path = "../streamer", version = "=1.14.14" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.14" } -solana-version = { path = "../version", version = "=1.14.14" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.15" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.15" } +solana-client = { path = "../client", version = "=1.14.15" } +solana-faucet = { path = "../faucet", version = "=1.14.15" } +solana-gossip = { path = "../gossip", version = "=1.14.15" } +solana-logger = { path = "../logger", version = "=1.14.15" } +solana-measure = { path = "../measure", version = "=1.14.15" } +solana-net-utils = { path = "../net-utils", version = "=1.14.15" } +solana-runtime = { path = "../runtime", version = "=1.14.15" } +solana-sdk = { path = "../sdk", version = "=1.14.15" } +solana-streamer = { path = "../streamer", version = "=1.14.15" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.15" } +solana-version = { path = "../version", version = "=1.14.15" } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } [dev-dependencies] -solana-core = { path = "../core", version = "=1.14.14" } -solana-local-cluster = { path = "../local-cluster", version = "=1.14.14" } -solana-test-validator = { path = "../test-validator", version = "=1.14.14" } +solana-core = { path = "../core", version = "=1.14.15" } +solana-local-cluster = { path = "../local-cluster", version = "=1.14.15" } +solana-test-validator = { path = "../test-validator", version = "=1.14.15" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/banking-bench/Cargo.toml b/banking-bench/Cargo.toml index 9cee6b56559b8c..ec642abdd69774 100644 --- a/banking-bench/Cargo.toml +++ b/banking-bench/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-banking-bench" -version = "1.14.14" +version = "1.14.15" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,18 +14,18 @@ crossbeam-channel = "0.5" log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" -solana-client = { path = "../client", version = "=1.14.14" } -solana-core = { path = "../core", version = "=1.14.14" } -solana-gossip = { path = "../gossip", version = "=1.14.14" } -solana-ledger = { path = "../ledger", version = "=1.14.14" } -solana-logger = { path = "../logger", version = "=1.14.14" } -solana-measure = { path = "../measure", version = "=1.14.14" } -solana-perf = { path = "../perf", version = "=1.14.14" } -solana-poh = { path = "../poh", version = "=1.14.14" } -solana-runtime = { path = "../runtime", version = "=1.14.14" } -solana-sdk = { path = "../sdk", version = "=1.14.14" } -solana-streamer = { path = "../streamer", version = "=1.14.14" } -solana-version = { path = "../version", version = "=1.14.14" } +solana-client = { path = "../client", version = "=1.14.15" } +solana-core = { path = "../core", version = "=1.14.15" } +solana-gossip = { path = "../gossip", version = "=1.14.15" } +solana-ledger = { path = "../ledger", version = "=1.14.15" } +solana-logger = { path = "../logger", version = "=1.14.15" } +solana-measure = { path = "../measure", version = "=1.14.15" } +solana-perf = { path = "../perf", version = "=1.14.15" } +solana-poh = { path = "../poh", version = "=1.14.15" } +solana-runtime = { path = "../runtime", version = "=1.14.15" } +solana-sdk = { path = "../sdk", version = "=1.14.15" } +solana-streamer = { path = "../streamer", version = "=1.14.15" } +solana-version = { path = "../version", version = "=1.14.15" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/banks-client/Cargo.toml b/banks-client/Cargo.toml index 5088a94281b98d..9ae21a4cc88dc6 100644 --- a/banks-client/Cargo.toml +++ b/banks-client/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-banks-client" -version = "1.14.14" +version = "1.14.15" description = "Solana banks client" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,17 +12,17 @@ edition = "2021" [dependencies] borsh = "0.9.3" futures = "0.3" -solana-banks-interface = { path = "../banks-interface", version = "=1.14.14" } -solana-program = { path = "../sdk/program", version = "=1.14.14" } -solana-sdk = { path = "../sdk", version = "=1.14.14" } +solana-banks-interface = { path = "../banks-interface", version = "=1.14.15" } +solana-program = { path = "../sdk/program", version = "=1.14.15" } +solana-sdk = { path = "../sdk", version = "=1.14.15" } tarpc = { version = "0.29.0", features = ["full"] } thiserror = "1.0" tokio = { version = "~1.14.1", features = ["full"] } tokio-serde = { version = "0.8", features = ["bincode"] } [dev-dependencies] -solana-banks-server = { path = "../banks-server", version = "=1.14.14" } -solana-runtime = { path = "../runtime", version = "=1.14.14" } +solana-banks-server = { path = "../banks-server", version = "=1.14.15" } +solana-runtime = { path = "../runtime", version = "=1.14.15" } [lib] crate-type = ["lib"] diff --git a/banks-interface/Cargo.toml b/banks-interface/Cargo.toml index ac51860968f75e..1f6fc53e6b9a66 100644 --- a/banks-interface/Cargo.toml +++ b/banks-interface/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-banks-interface" -version = "1.14.14" +version = "1.14.15" description = "Solana banks RPC interface" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -11,7 +11,7 @@ edition = "2021" [dependencies] serde = { version = "1.0.138", features = ["derive"] } -solana-sdk = { path = "../sdk", version = "=1.14.14" } +solana-sdk = { path = "../sdk", version = "=1.14.15" } tarpc = { version = "0.29.0", features = ["full"] } [lib] diff --git a/banks-server/Cargo.toml b/banks-server/Cargo.toml index d0778dadfd0051..6445cbd47bb6f5 100644 --- a/banks-server/Cargo.toml +++ b/banks-server/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-banks-server" -version = "1.14.14" +version = "1.14.15" description = "Solana banks server" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,11 +13,11 @@ edition = "2021" bincode = "1.3.3" crossbeam-channel = "0.5" futures = "0.3" -solana-banks-interface = { path = "../banks-interface", version = "=1.14.14" } -solana-client = { path = "../client", version = "=1.14.14" } -solana-runtime = { path = "../runtime", version = "=1.14.14" } -solana-sdk = { path = "../sdk", version = "=1.14.14" } -solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.14" } +solana-banks-interface = { path = "../banks-interface", version = "=1.14.15" } +solana-client = { path = "../client", version = "=1.14.15" } +solana-runtime = { path = "../runtime", version = "=1.14.15" } +solana-sdk = { path = "../sdk", version = "=1.14.15" } +solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.15" } tarpc = { version = "0.29.0", features = ["full"] } tokio = { version = "1", features = ["full"] } tokio-serde = { version = "0.8", features = ["bincode"] } diff --git a/bench-streamer/Cargo.toml b/bench-streamer/Cargo.toml index 6b277051a54c1e..3c87a1a1894492 100644 --- a/bench-streamer/Cargo.toml +++ b/bench-streamer/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-bench-streamer" -version = "1.14.14" +version = "1.14.15" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -11,9 +11,9 @@ publish = false [dependencies] clap = { version = "3.1.5", features = ["cargo"] } crossbeam-channel = "0.5" -solana-net-utils = { path = "../net-utils", version = "=1.14.14" } -solana-streamer = { path = "../streamer", version = "=1.14.14" } -solana-version = { path = "../version", version = "=1.14.14" } +solana-net-utils = { path = "../net-utils", version = "=1.14.15" } +solana-streamer = { path = "../streamer", version = "=1.14.15" } +solana-version = { path = "../version", version = "=1.14.15" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/bench-tps/Cargo.toml b/bench-tps/Cargo.toml index 0d10eae6d47091..47a635aff63b1e 100644 --- a/bench-tps/Cargo.toml +++ b/bench-tps/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-bench-tps" -version = "1.14.14" +version = "1.14.15" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -15,28 +15,28 @@ log = "0.4.17" rayon = "1.5.3" serde_json = "1.0.81" serde_yaml = "0.8.26" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.14" } -solana-cli-config = { path = "../cli-config", version = "=1.14.14" } -solana-client = { path = "../client", version = "=1.14.14" } -solana-core = { path = "../core", version = "=1.14.14" } -solana-faucet = { path = "../faucet", version = "=1.14.14" } -solana-genesis = { path = "../genesis", version = "=1.14.14" } -solana-gossip = { path = "../gossip", version = "=1.14.14" } -solana-logger = { path = "../logger", version = "=1.14.14" } -solana-measure = { path = "../measure", version = "=1.14.14" } -solana-metrics = { path = "../metrics", version = "=1.14.14" } -solana-net-utils = { path = "../net-utils", version = "=1.14.14" } -solana-rpc = { path = "../rpc", version = "=1.14.14" } -solana-runtime = { path = "../runtime", version = "=1.14.14" } -solana-sdk = { path = "../sdk", version = "=1.14.14" } -solana-streamer = { path = "../streamer", version = "=1.14.14" } -solana-version = { path = "../version", version = "=1.14.14" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.15" } +solana-cli-config = { path = "../cli-config", version = "=1.14.15" } +solana-client = { path = "../client", version = "=1.14.15" } +solana-core = { path = "../core", version = "=1.14.15" } +solana-faucet = { path = "../faucet", version = "=1.14.15" } +solana-genesis = { path = "../genesis", version = "=1.14.15" } +solana-gossip = { path = "../gossip", version = "=1.14.15" } +solana-logger = { path = "../logger", version = "=1.14.15" } +solana-measure = { path = "../measure", version = "=1.14.15" } +solana-metrics = { path = "../metrics", version = "=1.14.15" } +solana-net-utils = { path = "../net-utils", version = "=1.14.15" } +solana-rpc = { path = "../rpc", version = "=1.14.15" } +solana-runtime = { path = "../runtime", version = "=1.14.15" } +solana-sdk = { path = "../sdk", version = "=1.14.15" } +solana-streamer = { path = "../streamer", version = "=1.14.15" } +solana-version = { path = "../version", version = "=1.14.15" } thiserror = "1.0" [dev-dependencies] serial_test = "0.8.0" -solana-local-cluster = { path = "../local-cluster", version = "=1.14.14" } -solana-test-validator = { path = "../test-validator", version = "=1.14.14" } +solana-local-cluster = { path = "../local-cluster", version = "=1.14.15" } +solana-test-validator = { path = "../test-validator", version = "=1.14.15" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/bloom/Cargo.toml b/bloom/Cargo.toml index 4608c99f5e0761..566970d3944463 100644 --- a/bloom/Cargo.toml +++ b/bloom/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bloom" -version = "1.14.14" +version = "1.14.15" description = "Solana bloom filter" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -17,9 +17,9 @@ rand = "0.7.0" rayon = "1.5.3" serde = { version = "1.0.138", features = ["rc"] } serde_derive = "1.0.103" -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.14" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.14" } -solana-sdk = { path = "../sdk", version = "=1.14.14" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.15" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.15" } +solana-sdk = { path = "../sdk", version = "=1.14.15" } [lib] crate-type = ["lib"] diff --git a/bucket_map/Cargo.toml b/bucket_map/Cargo.toml index 97d4a1d15e4636..4bbbcaceea1528 100644 --- a/bucket_map/Cargo.toml +++ b/bucket_map/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bucket-map" -version = "1.14.14" +version = "1.14.15" description = "solana-bucket-map" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-bucket-map" @@ -15,14 +15,14 @@ log = { version = "0.4.17" } memmap2 = "0.5.3" modular-bitfield = "0.11.2" rand = "0.7.0" -solana-measure = { path = "../measure", version = "=1.14.14" } -solana-sdk = { path = "../sdk", version = "=1.14.14" } +solana-measure = { path = "../measure", version = "=1.14.15" } +solana-sdk = { path = "../sdk", version = "=1.14.15" } tempfile = "3.3.0" [dev-dependencies] fs_extra = "1.2.0" rayon = "1.5.3" -solana-logger = { path = "../logger", version = "=1.14.14" } +solana-logger = { path = "../logger", version = "=1.14.15" } [lib] crate-type = ["lib"] diff --git a/clap-utils/Cargo.toml b/clap-utils/Cargo.toml index 71eae2d3d5345f..a88f6988ebc443 100644 --- a/clap-utils/Cargo.toml +++ b/clap-utils/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-clap-utils" -version = "1.14.14" +version = "1.14.15" description = "Solana utilities for the clap" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,9 +13,9 @@ edition = "2021" chrono = "0.4" clap = "2.33.0" rpassword = "6.0" -solana-perf = { path = "../perf", version = "=1.14.14" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.14", default-features = false } -solana-sdk = { path = "../sdk", version = "=1.14.14" } +solana-perf = { path = "../perf", version = "=1.14.15" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.15", default-features = false } +solana-sdk = { path = "../sdk", version = "=1.14.15" } thiserror = "1.0.31" tiny-bip39 = "0.8.2" uriparse = "0.6.4" diff --git a/clap-v3-utils/Cargo.toml b/clap-v3-utils/Cargo.toml index 4e01f4df64e445..6effd299d7edc4 100644 --- a/clap-v3-utils/Cargo.toml +++ b/clap-v3-utils/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-clap-v3-utils" -version = "1.14.14" +version = "1.14.15" description = "Solana utilities for the clap v3" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,9 +13,9 @@ edition = "2021" chrono = "0.4" clap = { version = "3.1.5", features = ["cargo"] } rpassword = "6.0" -solana-perf = { path = "../perf", version = "=1.14.14" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.14", default-features = false } -solana-sdk = { path = "../sdk", version = "=1.14.14" } +solana-perf = { path = "../perf", version = "=1.14.15" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.15", default-features = false } +solana-sdk = { path = "../sdk", version = "=1.14.15" } thiserror = "1.0.31" tiny-bip39 = "0.8.2" uriparse = "0.6.4" diff --git a/cli-config/Cargo.toml b/cli-config/Cargo.toml index 350b2afb1b0dd4..b3fcca3dd0f691 100644 --- a/cli-config/Cargo.toml +++ b/cli-config/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-cli-config" description = "Blockchain, Rebuilt for Scale" -version = "1.14.14" +version = "1.14.15" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -15,8 +15,8 @@ lazy_static = "1.4.0" serde = "1.0.138" serde_derive = "1.0.103" serde_yaml = "0.8.26" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.14" } -solana-sdk = { path = "../sdk", version = "=1.14.14" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.15" } +solana-sdk = { path = "../sdk", version = "=1.14.15" } url = "2.2.2" [dev-dependencies] diff --git a/cli-output/Cargo.toml b/cli-output/Cargo.toml index bf54e19c3fe6b2..f752b64dc9abab 100644 --- a/cli-output/Cargo.toml +++ b/cli-output/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-cli-output" description = "Blockchain, Rebuilt for Scale" -version = "1.14.14" +version = "1.14.15" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -21,13 +21,13 @@ pretty-hex = "0.3.0" semver = "1.0.10" serde = "1.0.138" serde_json = "1.0.81" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.14" } -solana-clap-utils = { path = "../clap-utils", version = "=1.14.14" } -solana-cli-config = { path = "../cli-config", version = "=1.14.14" } -solana-client = { path = "../client", version = "=1.14.14" } -solana-sdk = { path = "../sdk", version = "=1.14.14" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.14" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.14" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.15" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.15" } +solana-cli-config = { path = "../cli-config", version = "=1.14.15" } +solana-client = { path = "../client", version = "=1.14.15" } +solana-sdk = { path = "../sdk", version = "=1.14.15" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.15" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.15" } spl-memo = { version = "=3.0.1", features = ["no-entrypoint"] } [dev-dependencies] diff --git a/cli/Cargo.toml b/cli/Cargo.toml index 6e12d5edeaea08..146a7d2a145b46 100644 --- a/cli/Cargo.toml +++ b/cli/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-cli" description = "Blockchain, Rebuilt for Scale" -version = "1.14.14" +version = "1.14.15" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -27,30 +27,30 @@ semver = "1.0.10" serde = "1.0.138" serde_derive = "1.0.103" serde_json = "1.0.81" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.14" } -solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.14" } -solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.14" } -solana-clap-utils = { path = "../clap-utils", version = "=1.14.14" } -solana-cli-config = { path = "../cli-config", version = "=1.14.14" } -solana-cli-output = { path = "../cli-output", version = "=1.14.14" } -solana-client = { path = "../client", version = "=1.14.14" } -solana-config-program = { path = "../programs/config", version = "=1.14.14" } -solana-faucet = { path = "../faucet", version = "=1.14.14" } -solana-logger = { path = "../logger", version = "=1.14.14" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.14" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.14" } -solana-sdk = { path = "../sdk", version = "=1.14.14" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.14" } -solana-version = { path = "../version", version = "=1.14.14" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.14" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.15" } +solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.15" } +solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.15" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.15" } +solana-cli-config = { path = "../cli-config", version = "=1.14.15" } +solana-cli-output = { path = "../cli-output", version = "=1.14.15" } +solana-client = { path = "../client", version = "=1.14.15" } +solana-config-program = { path = "../programs/config", version = "=1.14.15" } +solana-faucet = { path = "../faucet", version = "=1.14.15" } +solana-logger = { path = "../logger", version = "=1.14.15" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.15" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.15" } +solana-sdk = { path = "../sdk", version = "=1.14.15" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.15" } +solana-version = { path = "../version", version = "=1.14.15" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.15" } solana_rbpf = "=0.2.31" spl-memo = { version = "=3.0.1", features = ["no-entrypoint"] } thiserror = "1.0.31" tiny-bip39 = "0.8.2" [dev-dependencies] -solana-streamer = { path = "../streamer", version = "=1.14.14" } -solana-test-validator = { path = "../test-validator", version = "=1.14.14" } +solana-streamer = { path = "../streamer", version = "=1.14.15" } +solana-test-validator = { path = "../test-validator", version = "=1.14.15" } tempfile = "3.3.0" [[bin]] diff --git a/client-test/Cargo.toml b/client-test/Cargo.toml index 92430ca9d14369..6ce0e17131927c 100644 --- a/client-test/Cargo.toml +++ b/client-test/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-client-test" -version = "1.14.14" +version = "1.14.15" description = "Solana RPC Test" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,25 +14,25 @@ publish = false futures-util = "0.3.21" serde_json = "1.0.81" serial_test = "0.8.0" -solana-client = { path = "../client", version = "=1.14.14" } -solana-ledger = { path = "../ledger", version = "=1.14.14" } -solana-measure = { path = "../measure", version = "=1.14.14" } -solana-merkle-tree = { path = "../merkle-tree", version = "=1.14.14" } -solana-metrics = { path = "../metrics", version = "=1.14.14" } -solana-perf = { path = "../perf", version = "=1.14.14" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.14" } -solana-rpc = { path = "../rpc", version = "=1.14.14" } -solana-runtime = { path = "../runtime", version = "=1.14.14" } -solana-sdk = { path = "../sdk", version = "=1.14.14" } -solana-streamer = { path = "../streamer", version = "=1.14.14" } -solana-test-validator = { path = "../test-validator", version = "=1.14.14" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.14" } -solana-version = { path = "../version", version = "=1.14.14" } +solana-client = { path = "../client", version = "=1.14.15" } +solana-ledger = { path = "../ledger", version = "=1.14.15" } +solana-measure = { path = "../measure", version = "=1.14.15" } +solana-merkle-tree = { path = "../merkle-tree", version = "=1.14.15" } +solana-metrics = { path = "../metrics", version = "=1.14.15" } +solana-perf = { path = "../perf", version = "=1.14.15" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.15" } +solana-rpc = { path = "../rpc", version = "=1.14.15" } +solana-runtime = { path = "../runtime", version = "=1.14.15" } +solana-sdk = { path = "../sdk", version = "=1.14.15" } +solana-streamer = { path = "../streamer", version = "=1.14.15" } +solana-test-validator = { path = "../test-validator", version = "=1.14.15" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.15" } +solana-version = { path = "../version", version = "=1.14.15" } systemstat = "0.1.11" tokio = { version = "~1.14.1", features = ["full"] } [dev-dependencies] -solana-logger = { path = "../logger", version = "=1.14.14" } +solana-logger = { path = "../logger", version = "=1.14.15" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/client/Cargo.toml b/client/Cargo.toml index e626dc7a092ba2..24b839328c2622 100644 --- a/client/Cargo.toml +++ b/client/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-client" -version = "1.14.14" +version = "1.14.15" description = "Solana Client" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -38,17 +38,17 @@ semver = "1.0.10" serde = "1.0.138" serde_derive = "1.0.103" serde_json = "1.0.81" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.14" } -solana-clap-utils = { path = "../clap-utils", version = "=1.14.14" } -solana-faucet = { path = "../faucet", version = "=1.14.14" } -solana-measure = { path = "../measure", version = "=1.14.14" } -solana-metrics = { path = "../metrics", version = "=1.14.14" } -solana-net-utils = { path = "../net-utils", version = "=1.14.14" } -solana-sdk = { path = "../sdk", version = "=1.14.14" } -solana-streamer = { path = "../streamer", version = "=1.14.14" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.14" } -solana-version = { path = "../version", version = "=1.14.14" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.14" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.15" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.15" } +solana-faucet = { path = "../faucet", version = "=1.14.15" } +solana-measure = { path = "../measure", version = "=1.14.15" } +solana-metrics = { path = "../metrics", version = "=1.14.15" } +solana-net-utils = { path = "../net-utils", version = "=1.14.15" } +solana-sdk = { path = "../sdk", version = "=1.14.15" } +solana-streamer = { path = "../streamer", version = "=1.14.15" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.15" } +solana-version = { path = "../version", version = "=1.14.15" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.15" } spl-token-2022 = { version = "=0.5.0", features = ["no-entrypoint"] } thiserror = "1.0" tokio = { version = "1", features = ["full"] } @@ -61,8 +61,8 @@ url = "2.2.2" anyhow = "1.0.58" assert_matches = "1.5.0" jsonrpc-http-server = "18.0.0" -solana-logger = { path = "../logger", version = "=1.14.14" } -solana-perf = { path = "../perf", version = "=1.14.14" } +solana-logger = { path = "../logger", version = "=1.14.15" } +solana-perf = { path = "../perf", version = "=1.14.15" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/core/Cargo.toml b/core/Cargo.toml index 81c605a470e7d4..45bf66ee706770 100644 --- a/core/Cargo.toml +++ b/core/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "solana-core" description = "Blockchain, Rebuilt for Scale" -version = "1.14.14" +version = "1.14.15" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-core" readme = "../README.md" @@ -36,30 +36,30 @@ rand_chacha = "0.2.2" rayon = "1.5.3" serde = "1.0.138" serde_derive = "1.0.103" -solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.14" } -solana-bloom = { path = "../bloom", version = "=1.14.14" } -solana-client = { path = "../client", version = "=1.14.14" } -solana-entry = { path = "../entry", version = "=1.14.14" } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.14" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.14" } -solana-geyser-plugin-manager = { path = "../geyser-plugin-manager", version = "=1.14.14" } -solana-gossip = { path = "../gossip", version = "=1.14.14" } -solana-ledger = { path = "../ledger", version = "=1.14.14" } -solana-measure = { path = "../measure", version = "=1.14.14" } -solana-metrics = { path = "../metrics", version = "=1.14.14" } -solana-net-utils = { path = "../net-utils", version = "=1.14.14" } -solana-perf = { path = "../perf", version = "=1.14.14" } -solana-poh = { path = "../poh", version = "=1.14.14" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.14" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.14" } -solana-rpc = { path = "../rpc", version = "=1.14.14" } -solana-runtime = { path = "../runtime", version = "=1.14.14" } -solana-sdk = { path = "../sdk", version = "=1.14.14" } -solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.14" } -solana-streamer = { path = "../streamer", version = "=1.14.14" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.14" } -solana-version = { path = "../version", version = "=1.14.14" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.14" } +solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.15" } +solana-bloom = { path = "../bloom", version = "=1.14.15" } +solana-client = { path = "../client", version = "=1.14.15" } +solana-entry = { path = "../entry", version = "=1.14.15" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.15" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.15" } +solana-geyser-plugin-manager = { path = "../geyser-plugin-manager", version = "=1.14.15" } +solana-gossip = { path = "../gossip", version = "=1.14.15" } +solana-ledger = { path = "../ledger", version = "=1.14.15" } +solana-measure = { path = "../measure", version = "=1.14.15" } +solana-metrics = { path = "../metrics", version = "=1.14.15" } +solana-net-utils = { path = "../net-utils", version = "=1.14.15" } +solana-perf = { path = "../perf", version = "=1.14.15" } +solana-poh = { path = "../poh", version = "=1.14.15" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.15" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.15" } +solana-rpc = { path = "../rpc", version = "=1.14.15" } +solana-runtime = { path = "../runtime", version = "=1.14.15" } +solana-sdk = { path = "../sdk", version = "=1.14.15" } +solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.15" } +solana-streamer = { path = "../streamer", version = "=1.14.15" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.15" } +solana-version = { path = "../version", version = "=1.14.15" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.15" } sys-info = "0.9.1" tempfile = "3.3.0" thiserror = "1.0" @@ -71,9 +71,9 @@ matches = "0.1.9" raptorq = "1.7.0" serde_json = "1.0.81" serial_test = "0.8.0" -solana-logger = { path = "../logger", version = "=1.14.14" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.14" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.14" } +solana-logger = { path = "../logger", version = "=1.14.15" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.15" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.15" } static_assertions = "1.1.0" systemstat = "0.1.11" test-case = "2.1.0" diff --git a/dos/Cargo.toml b/dos/Cargo.toml index 5752b8df109d9e..f8a8832a3a9723 100644 --- a/dos/Cargo.toml +++ b/dos/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-dos" -version = "1.14.14" +version = "1.14.15" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -17,23 +17,23 @@ itertools = "0.10.3" log = "0.4.17" rand = "0.7.0" serde = "1.0.138" -solana-bench-tps = { path = "../bench-tps", version = "=1.14.14" } -solana-client = { path = "../client", version = "=1.14.14" } -solana-core = { path = "../core", version = "=1.14.14" } -solana-faucet = { path = "../faucet", version = "=1.14.14" } -solana-gossip = { path = "../gossip", version = "=1.14.14" } -solana-logger = { path = "../logger", version = "=1.14.14" } -solana-measure = { path = "../measure", version = "=1.14.14" } -solana-net-utils = { path = "../net-utils", version = "=1.14.14" } -solana-perf = { path = "../perf", version = "=1.14.14" } -solana-rpc = { path = "../rpc", version = "=1.14.14" } -solana-sdk = { path = "../sdk", version = "=1.14.14" } -solana-streamer = { path = "../streamer", version = "=1.14.14" } -solana-version = { path = "../version", version = "=1.14.14" } +solana-bench-tps = { path = "../bench-tps", version = "=1.14.15" } +solana-client = { path = "../client", version = "=1.14.15" } +solana-core = { path = "../core", version = "=1.14.15" } +solana-faucet = { path = "../faucet", version = "=1.14.15" } +solana-gossip = { path = "../gossip", version = "=1.14.15" } +solana-logger = { path = "../logger", version = "=1.14.15" } +solana-measure = { path = "../measure", version = "=1.14.15" } +solana-net-utils = { path = "../net-utils", version = "=1.14.15" } +solana-perf = { path = "../perf", version = "=1.14.15" } +solana-rpc = { path = "../rpc", version = "=1.14.15" } +solana-sdk = { path = "../sdk", version = "=1.14.15" } +solana-streamer = { path = "../streamer", version = "=1.14.15" } +solana-version = { path = "../version", version = "=1.14.15" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] [dev-dependencies] serial_test = "0.8.0" -solana-local-cluster = { path = "../local-cluster", version = "=1.14.14" } +solana-local-cluster = { path = "../local-cluster", version = "=1.14.15" } diff --git a/download-utils/Cargo.toml b/download-utils/Cargo.toml index 7c3cfbbb9780b7..25e602518e8236 100644 --- a/download-utils/Cargo.toml +++ b/download-utils/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-download-utils" -version = "1.14.14" +version = "1.14.15" description = "Solana Download Utils" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,8 +14,8 @@ console = "0.15.0" indicatif = "0.16.2" log = "0.4.17" reqwest = { version = "0.11.11", default-features = false, features = ["blocking", "brotli", "deflate", "gzip", "rustls-tls", "json"] } -solana-runtime = { path = "../runtime", version = "=1.14.14" } -solana-sdk = { path = "../sdk", version = "=1.14.14" } +solana-runtime = { path = "../runtime", version = "=1.14.15" } +solana-sdk = { path = "../sdk", version = "=1.14.15" } [lib] crate-type = ["lib"] diff --git a/entry/Cargo.toml b/entry/Cargo.toml index 1f3705ea6bb9a7..0ac67b27681256 100644 --- a/entry/Cargo.toml +++ b/entry/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-entry" -version = "1.14.14" +version = "1.14.15" description = "Solana Entry" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -19,16 +19,16 @@ log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" serde = "1.0.138" -solana-measure = { path = "../measure", version = "=1.14.14" } -solana-merkle-tree = { path = "../merkle-tree", version = "=1.14.14" } -solana-metrics = { path = "../metrics", version = "=1.14.14" } -solana-perf = { path = "../perf", version = "=1.14.14" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.14" } -solana-sdk = { path = "../sdk", version = "=1.14.14" } +solana-measure = { path = "../measure", version = "=1.14.15" } +solana-merkle-tree = { path = "../merkle-tree", version = "=1.14.15" } +solana-metrics = { path = "../metrics", version = "=1.14.15" } +solana-perf = { path = "../perf", version = "=1.14.15" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.15" } +solana-sdk = { path = "../sdk", version = "=1.14.15" } [dev-dependencies] matches = "0.1.9" -solana-logger = { path = "../logger", version = "=1.14.14" } +solana-logger = { path = "../logger", version = "=1.14.15" } [lib] crate-type = ["lib"] diff --git a/faucet/Cargo.toml b/faucet/Cargo.toml index 63a1563907b679..b0f57b9c212ce1 100644 --- a/faucet/Cargo.toml +++ b/faucet/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-faucet" -version = "1.14.14" +version = "1.14.15" description = "Solana Faucet" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -17,12 +17,12 @@ crossbeam-channel = "0.5" log = "0.4.17" serde = "1.0.138" serde_derive = "1.0.103" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.14" } -solana-cli-config = { path = "../cli-config", version = "=1.14.14" } -solana-logger = { path = "../logger", version = "=1.14.14" } -solana-metrics = { path = "../metrics", version = "=1.14.14" } -solana-sdk = { path = "../sdk", version = "=1.14.14" } -solana-version = { path = "../version", version = "=1.14.14" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.15" } +solana-cli-config = { path = "../cli-config", version = "=1.14.15" } +solana-logger = { path = "../logger", version = "=1.14.15" } +solana-metrics = { path = "../metrics", version = "=1.14.15" } +solana-sdk = { path = "../sdk", version = "=1.14.15" } +solana-version = { path = "../version", version = "=1.14.15" } spl-memo = { version = "=3.0.1", features = ["no-entrypoint"] } thiserror = "1.0" tokio = { version = "1", features = ["full"] } diff --git a/frozen-abi/Cargo.toml b/frozen-abi/Cargo.toml index 8f2fdb5238081d..8ae89445bf9cbc 100644 --- a/frozen-abi/Cargo.toml +++ b/frozen-abi/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-frozen-abi" -version = "1.14.14" +version = "1.14.15" description = "Solana Frozen ABI" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -20,7 +20,7 @@ serde_bytes = "0.11" serde_derive = "1.0" serde_json = "1.0" sha2 = "0.10.2" -solana-frozen-abi-macro = { path = "macro", version = "=1.14.14" } +solana-frozen-abi-macro = { path = "macro", version = "=1.14.15" } thiserror = "1.0" [target.'cfg(not(target_os = "solana"))'.dependencies] @@ -43,7 +43,7 @@ rand_core = { version = "0.6.3", features = ["alloc", "getrandom", "std"] } subtle = { version = "2.4.1", features = ["default", "i128", "std"] } [target.'cfg(not(target_os = "solana"))'.dev-dependencies] -solana-logger = { path = "../logger", version = "=1.14.14" } +solana-logger = { path = "../logger", version = "=1.14.15" } [build-dependencies] rustc_version = "0.4" diff --git a/frozen-abi/macro/Cargo.toml b/frozen-abi/macro/Cargo.toml index 0e55cc64d93be9..18736e5802bc88 100644 --- a/frozen-abi/macro/Cargo.toml +++ b/frozen-abi/macro/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-frozen-abi-macro" -version = "1.14.14" +version = "1.14.15" description = "Solana Frozen ABI Macro" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/genesis-utils/Cargo.toml b/genesis-utils/Cargo.toml index e48a3adffe94ad..555ee68bdcd490 100644 --- a/genesis-utils/Cargo.toml +++ b/genesis-utils/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-genesis-utils" -version = "1.14.14" +version = "1.14.15" description = "Solana Genesis Utils" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,9 +10,9 @@ documentation = "https://docs.rs/solana-download-utils" edition = "2021" [dependencies] -solana-download-utils = { path = "../download-utils", version = "=1.14.14" } -solana-runtime = { path = "../runtime", version = "=1.14.14" } -solana-sdk = { path = "../sdk", version = "=1.14.14" } +solana-download-utils = { path = "../download-utils", version = "=1.14.15" } +solana-runtime = { path = "../runtime", version = "=1.14.15" } +solana-sdk = { path = "../sdk", version = "=1.14.15" } [lib] crate-type = ["lib"] diff --git a/genesis/Cargo.toml b/genesis/Cargo.toml index 55a547812a8b23..d96c28dc017f34 100644 --- a/genesis/Cargo.toml +++ b/genesis/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-genesis" description = "Blockchain, Rebuilt for Scale" -version = "1.14.14" +version = "1.14.15" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -15,16 +15,16 @@ clap = "2.33.1" serde = "1.0.138" serde_json = "1.0.81" serde_yaml = "0.8.26" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.14" } -solana-cli-config = { path = "../cli-config", version = "=1.14.14" } -solana-entry = { path = "../entry", version = "=1.14.14" } -solana-ledger = { path = "../ledger", version = "=1.14.14" } -solana-logger = { path = "../logger", version = "=1.14.14" } -solana-runtime = { path = "../runtime", version = "=1.14.14" } -solana-sdk = { path = "../sdk", version = "=1.14.14" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.14" } -solana-version = { path = "../version", version = "=1.14.14" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.14" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.15" } +solana-cli-config = { path = "../cli-config", version = "=1.14.15" } +solana-entry = { path = "../entry", version = "=1.14.15" } +solana-ledger = { path = "../ledger", version = "=1.14.15" } +solana-logger = { path = "../logger", version = "=1.14.15" } +solana-runtime = { path = "../runtime", version = "=1.14.15" } +solana-sdk = { path = "../sdk", version = "=1.14.15" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.15" } +solana-version = { path = "../version", version = "=1.14.15" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.15" } tempfile = "3.3.0" [[bin]] diff --git a/geyser-plugin-interface/Cargo.toml b/geyser-plugin-interface/Cargo.toml index 1263b6454696e5..1fcda27f43da03 100644 --- a/geyser-plugin-interface/Cargo.toml +++ b/geyser-plugin-interface/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-geyser-plugin-interface" description = "The Solana Geyser plugin interface." -version = "1.14.14" +version = "1.14.15" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -11,8 +11,8 @@ documentation = "https://docs.rs/solana-geyser-plugin-interface" [dependencies] log = "0.4.17" -solana-sdk = { path = "../sdk", version = "=1.14.14" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.14" } +solana-sdk = { path = "../sdk", version = "=1.14.15" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.15" } thiserror = "1.0.31" [package.metadata.docs.rs] diff --git a/geyser-plugin-manager/Cargo.toml b/geyser-plugin-manager/Cargo.toml index cac8176488478e..bd5a52184dd7d3 100644 --- a/geyser-plugin-manager/Cargo.toml +++ b/geyser-plugin-manager/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-geyser-plugin-manager" description = "The Solana Geyser plugin manager." -version = "1.14.14" +version = "1.14.15" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -16,13 +16,13 @@ json5 = "0.4.1" libloading = "0.7.3" log = "0.4.17" serde_json = "1.0.81" -solana-geyser-plugin-interface = { path = "../geyser-plugin-interface", version = "=1.14.14" } -solana-measure = { path = "../measure", version = "=1.14.14" } -solana-metrics = { path = "../metrics", version = "=1.14.14" } -solana-rpc = { path = "../rpc", version = "=1.14.14" } -solana-runtime = { path = "../runtime", version = "=1.14.14" } -solana-sdk = { path = "../sdk", version = "=1.14.14" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.14" } +solana-geyser-plugin-interface = { path = "../geyser-plugin-interface", version = "=1.14.15" } +solana-measure = { path = "../measure", version = "=1.14.15" } +solana-metrics = { path = "../metrics", version = "=1.14.15" } +solana-rpc = { path = "../rpc", version = "=1.14.15" } +solana-runtime = { path = "../runtime", version = "=1.14.15" } +solana-sdk = { path = "../sdk", version = "=1.14.15" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.15" } thiserror = "1.0.31" [package.metadata.docs.rs] diff --git a/gossip/Cargo.toml b/gossip/Cargo.toml index 853f6ea61170b6..9488d0154f5db8 100644 --- a/gossip/Cargo.toml +++ b/gossip/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-gossip" description = "Blockchain, Rebuilt for Scale" -version = "1.14.14" +version = "1.14.15" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -27,24 +27,24 @@ rayon = "1.5.3" serde = "1.0.138" serde_bytes = "0.11" serde_derive = "1.0.103" -solana-bloom = { path = "../bloom", version = "=1.14.14" } -solana-clap-utils = { path = "../clap-utils", version = "=1.14.14" } -solana-client = { path = "../client", version = "=1.14.14" } -solana-entry = { path = "../entry", version = "=1.14.14" } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.14" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.14" } -solana-ledger = { path = "../ledger", version = "=1.14.14" } -solana-logger = { path = "../logger", version = "=1.14.14" } -solana-measure = { path = "../measure", version = "=1.14.14" } -solana-metrics = { path = "../metrics", version = "=1.14.14" } -solana-net-utils = { path = "../net-utils", version = "=1.14.14" } -solana-perf = { path = "../perf", version = "=1.14.14" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.14" } -solana-runtime = { path = "../runtime", version = "=1.14.14" } -solana-sdk = { path = "../sdk", version = "=1.14.14" } -solana-streamer = { path = "../streamer", version = "=1.14.14" } -solana-version = { path = "../version", version = "=1.14.14" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.14" } +solana-bloom = { path = "../bloom", version = "=1.14.15" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.15" } +solana-client = { path = "../client", version = "=1.14.15" } +solana-entry = { path = "../entry", version = "=1.14.15" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.15" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.15" } +solana-ledger = { path = "../ledger", version = "=1.14.15" } +solana-logger = { path = "../logger", version = "=1.14.15" } +solana-measure = { path = "../measure", version = "=1.14.15" } +solana-metrics = { path = "../metrics", version = "=1.14.15" } +solana-net-utils = { path = "../net-utils", version = "=1.14.15" } +solana-perf = { path = "../perf", version = "=1.14.15" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.15" } +solana-runtime = { path = "../runtime", version = "=1.14.15" } +solana-sdk = { path = "../sdk", version = "=1.14.15" } +solana-streamer = { path = "../streamer", version = "=1.14.15" } +solana-version = { path = "../version", version = "=1.14.15" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.15" } thiserror = "1.0" [dev-dependencies] diff --git a/install/Cargo.toml b/install/Cargo.toml index 26dc772af20761..af1419cf8ae3c5 100644 --- a/install/Cargo.toml +++ b/install/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-install" description = "The solana cluster software installer" -version = "1.14.14" +version = "1.14.15" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -26,12 +26,12 @@ reqwest = { version = "0.11.11", default-features = false, features = ["blocking semver = "1.0.10" serde = { version = "1.0.138", features = ["derive"] } serde_yaml = "0.8.26" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.14" } -solana-client = { path = "../client", version = "=1.14.14" } -solana-config-program = { path = "../programs/config", version = "=1.14.14" } -solana-logger = { path = "../logger", version = "=1.14.14" } -solana-sdk = { path = "../sdk", version = "=1.14.14" } -solana-version = { path = "../version", version = "=1.14.14" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.15" } +solana-client = { path = "../client", version = "=1.14.15" } +solana-config-program = { path = "../programs/config", version = "=1.14.15" } +solana-logger = { path = "../logger", version = "=1.14.15" } +solana-sdk = { path = "../sdk", version = "=1.14.15" } +solana-version = { path = "../version", version = "=1.14.15" } tar = "0.4.38" tempfile = "3.3.0" url = "2.2.2" diff --git a/keygen/Cargo.toml b/keygen/Cargo.toml index 486269b7c05695..4003d404d0ce83 100644 --- a/keygen/Cargo.toml +++ b/keygen/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-keygen" -version = "1.14.14" +version = "1.14.15" description = "Solana key generation utility" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,11 +14,11 @@ bs58 = "0.4.0" clap = { version = "3.1.5", features = ["cargo"] } dirs-next = "2.0.0" num_cpus = "1.13.1" -solana-clap-v3-utils = { path = "../clap-v3-utils", version = "=1.14.14" } -solana-cli-config = { path = "../cli-config", version = "=1.14.14" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.14" } -solana-sdk = { path = "../sdk", version = "=1.14.14" } -solana-version = { path = "../version", version = "=1.14.14" } +solana-clap-v3-utils = { path = "../clap-v3-utils", version = "=1.14.15" } +solana-cli-config = { path = "../cli-config", version = "=1.14.15" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.15" } +solana-sdk = { path = "../sdk", version = "=1.14.15" } +solana-version = { path = "../version", version = "=1.14.15" } tiny-bip39 = "0.8.2" [[bin]] diff --git a/ledger-tool/Cargo.toml b/ledger-tool/Cargo.toml index d2adc5695a0b3c..1234cc18ada8bb 100644 --- a/ledger-tool/Cargo.toml +++ b/ledger-tool/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-ledger-tool" description = "Blockchain, Rebuilt for Scale" -version = "1.14.14" +version = "1.14.15" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -22,20 +22,20 @@ log = { version = "0.4.17" } regex = "1" serde = { version = "1.0", features = ["derive"] } serde_json = "1.0.81" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.14" } -solana-cli-output = { path = "../cli-output", version = "=1.14.14" } -solana-core = { path = "../core", version = "=1.14.14" } -solana-entry = { path = "../entry", version = "=1.14.14" } -solana-ledger = { path = "../ledger", version = "=1.14.14" } -solana-logger = { path = "../logger", version = "=1.14.14" } -solana-measure = { path = "../measure", version = "=1.14.14" } -solana-runtime = { path = "../runtime", version = "=1.14.14" } -solana-sdk = { path = "../sdk", version = "=1.14.14" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.14" } -solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.14" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.14" } -solana-version = { path = "../version", version = "=1.14.14" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.14" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.15" } +solana-cli-output = { path = "../cli-output", version = "=1.14.15" } +solana-core = { path = "../core", version = "=1.14.15" } +solana-entry = { path = "../entry", version = "=1.14.15" } +solana-ledger = { path = "../ledger", version = "=1.14.15" } +solana-logger = { path = "../logger", version = "=1.14.15" } +solana-measure = { path = "../measure", version = "=1.14.15" } +solana-runtime = { path = "../runtime", version = "=1.14.15" } +solana-sdk = { path = "../sdk", version = "=1.14.15" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.15" } +solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.15" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.15" } +solana-version = { path = "../version", version = "=1.14.15" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.15" } tokio = { version = "1", features = ["full"] } [target.'cfg(not(target_env = "msvc"))'.dependencies] diff --git a/ledger/Cargo.toml b/ledger/Cargo.toml index a71999ca50b377..f9d85ab1994b5d 100644 --- a/ledger/Cargo.toml +++ b/ledger/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-ledger" -version = "1.14.14" +version = "1.14.15" description = "Solana ledger" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -35,23 +35,23 @@ reed-solomon-erasure = { version = "6.0.0", features = ["simd-accel"] } serde = "1.0.138" serde_bytes = "0.11.6" sha2 = "0.10.2" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.14" } -solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.14" } -solana-entry = { path = "../entry", version = "=1.14.14" } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.14" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.14" } -solana-measure = { path = "../measure", version = "=1.14.14" } -solana-metrics = { path = "../metrics", version = "=1.14.14" } -solana-perf = { path = "../perf", version = "=1.14.14" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.14" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.14" } -solana-runtime = { path = "../runtime", version = "=1.14.14" } -solana-sdk = { path = "../sdk", version = "=1.14.14" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.14" } -solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.14" } -solana-storage-proto = { path = "../storage-proto", version = "=1.14.14" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.14" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.14" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.15" } +solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.15" } +solana-entry = { path = "../entry", version = "=1.14.15" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.15" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.15" } +solana-measure = { path = "../measure", version = "=1.14.15" } +solana-metrics = { path = "../metrics", version = "=1.14.15" } +solana-perf = { path = "../perf", version = "=1.14.15" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.15" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.15" } +solana-runtime = { path = "../runtime", version = "=1.14.15" } +solana-sdk = { path = "../sdk", version = "=1.14.15" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.15" } +solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.15" } +solana-storage-proto = { path = "../storage-proto", version = "=1.14.15" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.15" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.15" } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } spl-token-2022 = { version = "=0.5.0", features = ["no-entrypoint"] } static_assertions = "1.1.0" @@ -71,8 +71,8 @@ features = ["lz4"] [dev-dependencies] bs58 = "0.4.0" matches = "0.1.9" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.14" } -solana-logger = { path = "../logger", version = "=1.14.14" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.15" } +solana-logger = { path = "../logger", version = "=1.14.15" } test-case = "2.1.0" [build-dependencies] diff --git a/local-cluster/Cargo.toml b/local-cluster/Cargo.toml index e2803b9893d0d1..5810ae87a5a72f 100644 --- a/local-cluster/Cargo.toml +++ b/local-cluster/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-local-cluster" description = "Blockchain, Rebuilt for Scale" -version = "1.14.14" +version = "1.14.15" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -16,25 +16,25 @@ itertools = "0.10.3" log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" -solana-client = { path = "../client", version = "=1.14.14" } -solana-config-program = { path = "../programs/config", version = "=1.14.14" } -solana-core = { path = "../core", version = "=1.14.14" } -solana-entry = { path = "../entry", version = "=1.14.14" } -solana-gossip = { path = "../gossip", version = "=1.14.14" } -solana-ledger = { path = "../ledger", version = "=1.14.14" } -solana-runtime = { path = "../runtime", version = "=1.14.14" } -solana-sdk = { path = "../sdk", version = "=1.14.14" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.14" } -solana-streamer = { path = "../streamer", version = "=1.14.14" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.14" } +solana-client = { path = "../client", version = "=1.14.15" } +solana-config-program = { path = "../programs/config", version = "=1.14.15" } +solana-core = { path = "../core", version = "=1.14.15" } +solana-entry = { path = "../entry", version = "=1.14.15" } +solana-gossip = { path = "../gossip", version = "=1.14.15" } +solana-ledger = { path = "../ledger", version = "=1.14.15" } +solana-runtime = { path = "../runtime", version = "=1.14.15" } +solana-sdk = { path = "../sdk", version = "=1.14.15" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.15" } +solana-streamer = { path = "../streamer", version = "=1.14.15" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.15" } tempfile = "3.3.0" [dev-dependencies] assert_matches = "1.5.0" gag = "1.0.0" serial_test = "0.8.0" -solana-download-utils = { path = "../download-utils", version = "=1.14.14" } -solana-logger = { path = "../logger", version = "=1.14.14" } +solana-download-utils = { path = "../download-utils", version = "=1.14.15" } +solana-logger = { path = "../logger", version = "=1.14.15" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/log-analyzer/Cargo.toml b/log-analyzer/Cargo.toml index 914b8feb5ebb28..e9f6eb5de9b7e2 100644 --- a/log-analyzer/Cargo.toml +++ b/log-analyzer/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-log-analyzer" description = "The solana cluster network analysis tool" -version = "1.14.14" +version = "1.14.15" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,8 +14,8 @@ byte-unit = "4.0.14" clap = { version = "3.1.5", features = ["cargo"] } serde = "1.0.138" serde_json = "1.0.81" -solana-logger = { path = "../logger", version = "=1.14.14" } -solana-version = { path = "../version", version = "=1.14.14" } +solana-logger = { path = "../logger", version = "=1.14.15" } +solana-version = { path = "../version", version = "=1.14.15" } [[bin]] name = "solana-log-analyzer" diff --git a/logger/Cargo.toml b/logger/Cargo.toml index 9b191becc10ebb..8bcbfb93d118c7 100644 --- a/logger/Cargo.toml +++ b/logger/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-logger" -version = "1.14.14" +version = "1.14.15" description = "Solana Logger" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/measure/Cargo.toml b/measure/Cargo.toml index e18b55c0411847..3d2d1499ef755b 100644 --- a/measure/Cargo.toml +++ b/measure/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "solana-measure" description = "Blockchain, Rebuilt for Scale" -version = "1.14.14" +version = "1.14.15" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-measure" readme = "../README.md" @@ -12,7 +12,7 @@ edition = "2021" [dependencies] log = "0.4.17" -solana-sdk = { path = "../sdk", version = "=1.14.14" } +solana-sdk = { path = "../sdk", version = "=1.14.15" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/merkle-root-bench/Cargo.toml b/merkle-root-bench/Cargo.toml index 7b1f62d56ca6a3..c831cdce42a5ae 100644 --- a/merkle-root-bench/Cargo.toml +++ b/merkle-root-bench/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-merkle-root-bench" -version = "1.14.14" +version = "1.14.15" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -11,11 +11,11 @@ publish = false [dependencies] clap = "2.33.1" log = "0.4.17" -solana-logger = { path = "../logger", version = "=1.14.14" } -solana-measure = { path = "../measure", version = "=1.14.14" } -solana-runtime = { path = "../runtime", version = "=1.14.14" } -solana-sdk = { path = "../sdk", version = "=1.14.14" } -solana-version = { path = "../version", version = "=1.14.14" } +solana-logger = { path = "../logger", version = "=1.14.15" } +solana-measure = { path = "../measure", version = "=1.14.15" } +solana-runtime = { path = "../runtime", version = "=1.14.15" } +solana-sdk = { path = "../sdk", version = "=1.14.15" } +solana-version = { path = "../version", version = "=1.14.15" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/merkle-tree/Cargo.toml b/merkle-tree/Cargo.toml index 67ccc90bf793cb..6aa6a153378d70 100644 --- a/merkle-tree/Cargo.toml +++ b/merkle-tree/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-merkle-tree" -version = "1.14.14" +version = "1.14.15" description = "Solana Merkle Tree" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -11,7 +11,7 @@ edition = "2021" [dependencies] fast-math = "0.1" -solana-program = { path = "../sdk/program", version = "=1.14.14" } +solana-program = { path = "../sdk/program", version = "=1.14.15" } # This can go once the BPF toolchain target Rust 1.42.0+ [target.bpfel-unknown-unknown.dependencies] diff --git a/metrics/Cargo.toml b/metrics/Cargo.toml index 57590a8702d3d1..b98933f7f5cb01 100644 --- a/metrics/Cargo.toml +++ b/metrics/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-metrics" -version = "1.14.14" +version = "1.14.15" description = "Solana Metrics" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -15,7 +15,7 @@ gethostname = "0.2.3" lazy_static = "1.4.0" log = "0.4.17" reqwest = { version = "0.11.11", default-features = false, features = ["blocking", "brotli", "deflate", "gzip", "rustls-tls", "json"] } -solana-sdk = { path = "../sdk", version = "=1.14.14" } +solana-sdk = { path = "../sdk", version = "=1.14.15" } [dev-dependencies] env_logger = "0.9.0" diff --git a/net-shaper/Cargo.toml b/net-shaper/Cargo.toml index f4630c79364b79..887474179265be 100644 --- a/net-shaper/Cargo.toml +++ b/net-shaper/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-net-shaper" description = "The solana cluster network shaping tool" -version = "1.14.14" +version = "1.14.15" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,7 +14,7 @@ clap = { version = "3.1.5", features = ["cargo"] } rand = "0.7.0" serde = { version = "1.0.138", features = ["derive"] } serde_json = "1.0.81" -solana-logger = { path = "../logger", version = "=1.14.14" } +solana-logger = { path = "../logger", version = "=1.14.15" } [[bin]] name = "solana-net-shaper" diff --git a/net-utils/Cargo.toml b/net-utils/Cargo.toml index a9add614a68d33..263da1f677a524 100644 --- a/net-utils/Cargo.toml +++ b/net-utils/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-net-utils" -version = "1.14.14" +version = "1.14.15" description = "Solana Network Utilities" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -19,9 +19,9 @@ rand = "0.7.0" serde = "1.0.138" serde_derive = "1.0.103" socket2 = "0.4.4" -solana-logger = { path = "../logger", version = "=1.14.14" } -solana-sdk = { path = "../sdk", version = "=1.14.14" } -solana-version = { path = "../version", version = "=1.14.14" } +solana-logger = { path = "../logger", version = "=1.14.15" } +solana-sdk = { path = "../sdk", version = "=1.14.15" } +solana-version = { path = "../version", version = "=1.14.15" } tokio = { version = "1", features = ["full"] } url = "2.2.2" diff --git a/notifier/Cargo.toml b/notifier/Cargo.toml index 546e337b1d34e7..2007b5e69a09eb 100644 --- a/notifier/Cargo.toml +++ b/notifier/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-notifier" -version = "1.14.14" +version = "1.14.15" description = "Solana Notifier" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/perf/Cargo.toml b/perf/Cargo.toml index af6bfc36b31d31..edd1bf201dd9f8 100644 --- a/perf/Cargo.toml +++ b/perf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-perf" -version = "1.14.14" +version = "1.14.15" description = "Solana Performance APIs" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -22,10 +22,10 @@ log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" serde = "1.0.138" -solana-metrics = { path = "../metrics", version = "=1.14.14" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.14" } -solana-sdk = { path = "../sdk", version = "=1.14.14" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.14" } +solana-metrics = { path = "../metrics", version = "=1.14.15" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.15" } +solana-sdk = { path = "../sdk", version = "=1.14.15" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.15" } [target."cfg(target_os = \"linux\")".dependencies] caps = "0.5.3" @@ -37,7 +37,7 @@ name = "solana_perf" [dev-dependencies] matches = "0.1.9" -solana-logger = { path = "../logger", version = "=1.14.14" } +solana-logger = { path = "../logger", version = "=1.14.15" } [[bench]] name = "sigverify" diff --git a/poh-bench/Cargo.toml b/poh-bench/Cargo.toml index 3f46f29a30d61d..5b529b14afe89b 100644 --- a/poh-bench/Cargo.toml +++ b/poh-bench/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-poh-bench" -version = "1.14.14" +version = "1.14.15" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,12 +14,12 @@ clap = { version = "3.1.5", features = ["cargo"] } log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" -solana-entry = { path = "../entry", version = "=1.14.14" } -solana-logger = { path = "../logger", version = "=1.14.14" } -solana-measure = { path = "../measure", version = "=1.14.14" } -solana-perf = { path = "../perf", version = "=1.14.14" } -solana-sdk = { path = "../sdk", version = "=1.14.14" } -solana-version = { path = "../version", version = "=1.14.14" } +solana-entry = { path = "../entry", version = "=1.14.15" } +solana-logger = { path = "../logger", version = "=1.14.15" } +solana-measure = { path = "../measure", version = "=1.14.15" } +solana-perf = { path = "../perf", version = "=1.14.15" } +solana-sdk = { path = "../sdk", version = "=1.14.15" } +solana-version = { path = "../version", version = "=1.14.15" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/poh/Cargo.toml b/poh/Cargo.toml index 7e664979b81fda..1cbf4f9f976227 100644 --- a/poh/Cargo.toml +++ b/poh/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-poh" -version = "1.14.14" +version = "1.14.15" description = "Solana PoH" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,21 +13,21 @@ edition = "2021" core_affinity = "0.5.10" crossbeam-channel = "0.5" log = "0.4.17" -solana-entry = { path = "../entry", version = "=1.14.14" } -solana-ledger = { path = "../ledger", version = "=1.14.14" } -solana-measure = { path = "../measure", version = "=1.14.14" } -solana-metrics = { path = "../metrics", version = "=1.14.14" } -solana-runtime = { path = "../runtime", version = "=1.14.14" } -solana-sdk = { path = "../sdk", version = "=1.14.14" } -solana-sys-tuner = { path = "../sys-tuner", version = "=1.14.14" } +solana-entry = { path = "../entry", version = "=1.14.15" } +solana-ledger = { path = "../ledger", version = "=1.14.15" } +solana-measure = { path = "../measure", version = "=1.14.15" } +solana-metrics = { path = "../metrics", version = "=1.14.15" } +solana-runtime = { path = "../runtime", version = "=1.14.15" } +solana-sdk = { path = "../sdk", version = "=1.14.15" } +solana-sys-tuner = { path = "../sys-tuner", version = "=1.14.15" } thiserror = "1.0" [dev-dependencies] bincode = "1.3.3" matches = "0.1.9" rand = "0.7.0" -solana-logger = { path = "../logger", version = "=1.14.14" } -solana-perf = { path = "../perf", version = "=1.14.14" } +solana-logger = { path = "../logger", version = "=1.14.15" } +solana-perf = { path = "../perf", version = "=1.14.15" } [lib] crate-type = ["lib"] diff --git a/program-runtime/Cargo.toml b/program-runtime/Cargo.toml index e36713940f34d7..5022c4355c727f 100644 --- a/program-runtime/Cargo.toml +++ b/program-runtime/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-program-runtime" -version = "1.14.14" +version = "1.14.15" description = "Solana program runtime" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -21,16 +21,16 @@ num-derive = { version = "0.3" } num-traits = { version = "0.2" } rand = "0.7.0" serde = { version = "1.0.129", features = ["derive", "rc"] } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.14" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.14" } -solana-measure = { path = "../measure", version = "=1.14.14" } -solana-metrics = { path = "../metrics", version = "=1.14.14" } -solana-sdk = { path = "../sdk", version = "=1.14.14" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.15" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.15" } +solana-measure = { path = "../measure", version = "=1.14.15" } +solana-metrics = { path = "../metrics", version = "=1.14.15" } +solana-sdk = { path = "../sdk", version = "=1.14.15" } thiserror = "1.0" enum-iterator = "0.8.1" [dev-dependencies] -solana-logger = { path = "../logger", version = "=1.14.14" } +solana-logger = { path = "../logger", version = "=1.14.15" } [lib] crate-type = ["lib"] diff --git a/program-test/Cargo.toml b/program-test/Cargo.toml index a6612f1814835e..5402e3445543a4 100644 --- a/program-test/Cargo.toml +++ b/program-test/Cargo.toml @@ -5,7 +5,7 @@ edition = "2021" license = "Apache-2.0" name = "solana-program-test" repository = "https://github.com/solana-labs/solana" -version = "1.14.14" +version = "1.14.15" [dependencies] assert_matches = "1.5.0" @@ -15,16 +15,16 @@ bincode = "1.3.3" chrono-humanize = "0.2.1" log = "0.4.17" serde = "1.0.138" -solana-banks-client = { path = "../banks-client", version = "=1.14.14" } -solana-banks-server = { path = "../banks-server", version = "=1.14.14" } -solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.14" } -solana-logger = { path = "../logger", version = "=1.14.14" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.14" } -solana-runtime = { path = "../runtime", version = "=1.14.14" } -solana-sdk = { path = "../sdk", version = "=1.14.14" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.14" } +solana-banks-client = { path = "../banks-client", version = "=1.14.15" } +solana-banks-server = { path = "../banks-server", version = "=1.14.15" } +solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.15" } +solana-logger = { path = "../logger", version = "=1.14.15" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.15" } +solana-runtime = { path = "../runtime", version = "=1.14.15" } +solana-sdk = { path = "../sdk", version = "=1.14.15" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.15" } thiserror = "1.0" tokio = { version = "1", features = ["full"] } [dev-dependencies] -solana-stake-program = { path = "../programs/stake", version = "=1.14.14" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.15" } diff --git a/programs/address-lookup-table-tests/Cargo.toml b/programs/address-lookup-table-tests/Cargo.toml index 9c54018b4937b1..badb33f6c26336 100644 --- a/programs/address-lookup-table-tests/Cargo.toml +++ b/programs/address-lookup-table-tests/Cargo.toml @@ -3,7 +3,7 @@ [package] name = "solana-address-lookup-table-program-tests" -version = "1.14.14" +version = "1.14.15" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" @@ -14,9 +14,9 @@ publish = false [dev-dependencies] assert_matches = "1.5.0" bincode = "1.3.3" -solana-address-lookup-table-program = { path = "../address-lookup-table", version = "=1.14.14" } -solana-program-test = { path = "../../program-test", version = "=1.14.14" } -solana-sdk = { path = "../../sdk", version = "=1.14.14" } +solana-address-lookup-table-program = { path = "../address-lookup-table", version = "=1.14.15" } +solana-program-test = { path = "../../program-test", version = "=1.14.15" } +solana-sdk = { path = "../../sdk", version = "=1.14.15" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/address-lookup-table/Cargo.toml b/programs/address-lookup-table/Cargo.toml index 07961b0fd901e2..a047e51c0ea36d 100644 --- a/programs/address-lookup-table/Cargo.toml +++ b/programs/address-lookup-table/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-address-lookup-table-program" -version = "1.14.14" +version = "1.14.15" description = "Solana address lookup table program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -16,14 +16,14 @@ log = "0.4.17" num-derive = "0.3" num-traits = "0.2" serde = { version = "1.0.138", features = ["derive"] } -solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.14" } -solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.14" } -solana-program = { path = "../../sdk/program", version = "=1.14.14" } +solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.15" } +solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.15" } +solana-program = { path = "../../sdk/program", version = "=1.14.15" } thiserror = "1.0" [target.'cfg(not(target_os = "solana"))'.dependencies] -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.14" } -solana-sdk = { path = "../../sdk", version = "=1.14.14" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.15" } +solana-sdk = { path = "../../sdk", version = "=1.14.15" } [build-dependencies] rustc_version = "0.4" diff --git a/programs/bpf-loader-tests/Cargo.toml b/programs/bpf-loader-tests/Cargo.toml index 6ef8bcf75cc9d9..f78b835cf8c565 100644 --- a/programs/bpf-loader-tests/Cargo.toml +++ b/programs/bpf-loader-tests/Cargo.toml @@ -3,7 +3,7 @@ [package] name = "solana-bpf-loader-program-tests" -version = "1.14.14" +version = "1.14.15" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" @@ -14,9 +14,9 @@ publish = false [dev-dependencies] assert_matches = "1.5.0" bincode = "1.3.3" -solana-bpf-loader-program = { path = "../bpf_loader", version = "=1.14.14" } -solana-program-test = { path = "../../program-test", version = "=1.14.14" } -solana-sdk = { path = "../../sdk", version = "=1.14.14" } +solana-bpf-loader-program = { path = "../bpf_loader", version = "=1.14.15" } +solana-program-test = { path = "../../program-test", version = "=1.14.15" } +solana-sdk = { path = "../../sdk", version = "=1.14.15" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/bpf/Cargo.lock b/programs/bpf/Cargo.lock index 9b820b6ebbf390..ec3c335e3a1adf 100644 --- a/programs/bpf/Cargo.lock +++ b/programs/bpf/Cargo.lock @@ -4054,7 +4054,7 @@ dependencies = [ [[package]] name = "solana-account-decoder" -version = "1.14.14" +version = "1.14.15" dependencies = [ "Inflector", "base64 0.13.0", @@ -4067,7 +4067,7 @@ dependencies = [ "serde_json", "solana-address-lookup-table-program", "solana-config-program", - "solana-sdk 1.14.14", + "solana-sdk 1.14.15", "solana-vote-program", "spl-token", "spl-token-2022", @@ -4077,7 +4077,7 @@ dependencies = [ [[package]] name = "solana-address-lookup-table-program" -version = "1.14.14" +version = "1.14.15" dependencies = [ "bincode", "bytemuck", @@ -4086,23 +4086,23 @@ dependencies = [ "num-traits", "rustc_version", "serde", - "solana-frozen-abi 1.14.14", - "solana-frozen-abi-macro 1.14.14", - "solana-program 1.14.14", + "solana-frozen-abi 1.14.15", + "solana-frozen-abi-macro 1.14.15", + "solana-program 1.14.15", "solana-program-runtime", - "solana-sdk 1.14.14", + "solana-sdk 1.14.15", "thiserror", ] [[package]] name = "solana-banks-client" -version = "1.14.14" +version = "1.14.15" dependencies = [ "borsh", "futures 0.3.21", "solana-banks-interface", - "solana-program 1.14.14", - "solana-sdk 1.14.14", + "solana-program 1.14.15", + "solana-sdk 1.14.15", "tarpc", "thiserror", "tokio", @@ -4111,16 +4111,16 @@ dependencies = [ [[package]] name = "solana-banks-interface" -version = "1.14.14" +version = "1.14.15" dependencies = [ "serde", - "solana-sdk 1.14.14", + "solana-sdk 1.14.15", "tarpc", ] [[package]] name = "solana-banks-server" -version = "1.14.14" +version = "1.14.15" dependencies = [ "bincode", "crossbeam-channel", @@ -4128,7 +4128,7 @@ dependencies = [ "solana-banks-interface", "solana-client", "solana-runtime", - "solana-sdk 1.14.14", + "solana-sdk 1.14.15", "solana-send-transaction-service", "tarpc", "tokio", @@ -4138,7 +4138,7 @@ dependencies = [ [[package]] name = "solana-bloom" -version = "1.14.14" +version = "1.14.15" dependencies = [ "bv", "fnv", @@ -4148,14 +4148,14 @@ dependencies = [ "rustc_version", "serde", "serde_derive", - "solana-frozen-abi 1.14.14", - "solana-frozen-abi-macro 1.14.14", - "solana-sdk 1.14.14", + "solana-frozen-abi 1.14.15", + "solana-frozen-abi-macro 1.14.15", + "solana-sdk 1.14.15", ] [[package]] name = "solana-bpf-loader-program" -version = "1.14.14" +version = "1.14.15" dependencies = [ "bincode", "byteorder 1.4.3", @@ -4164,15 +4164,15 @@ dependencies = [ "solana-measure", "solana-metrics", "solana-program-runtime", - "solana-sdk 1.14.14", - "solana-zk-token-sdk 1.14.14", + "solana-sdk 1.14.15", + "solana-zk-token-sdk 1.14.15", "solana_rbpf", "thiserror", ] [[package]] name = "solana-bpf-programs" -version = "1.14.14" +version = "1.14.15" dependencies = [ "bincode", "byteorder 1.4.3", @@ -4188,11 +4188,11 @@ dependencies = [ "solana-bpf-rust-realloc-invoke", "solana-cli-output", "solana-ledger", - "solana-logger 1.14.14", + "solana-logger 1.14.15", "solana-measure", "solana-program-runtime", "solana-runtime", - "solana-sdk 1.14.14", + "solana-sdk 1.14.15", "solana-transaction-status", "solana_rbpf", "walkdir", @@ -4200,385 +4200,385 @@ dependencies = [ [[package]] name = "solana-bpf-rust-128bit" -version = "1.14.14" +version = "1.14.15" dependencies = [ "solana-bpf-rust-128bit-dep", - "solana-program 1.14.14", + "solana-program 1.14.15", ] [[package]] name = "solana-bpf-rust-128bit-dep" -version = "1.14.14" +version = "1.14.15" dependencies = [ - "solana-program 1.14.14", + "solana-program 1.14.15", ] [[package]] name = "solana-bpf-rust-alloc" -version = "1.14.14" +version = "1.14.15" dependencies = [ - "solana-program 1.14.14", + "solana-program 1.14.15", ] [[package]] name = "solana-bpf-rust-call-depth" -version = "1.14.14" +version = "1.14.15" dependencies = [ - "solana-program 1.14.14", + "solana-program 1.14.15", ] [[package]] name = "solana-bpf-rust-caller-access" -version = "1.14.14" +version = "1.14.15" dependencies = [ - "solana-program 1.14.14", + "solana-program 1.14.15", ] [[package]] name = "solana-bpf-rust-curve25519" -version = "1.14.14" +version = "1.14.15" dependencies = [ - "solana-program 1.14.14", - "solana-zk-token-sdk 1.14.14", + "solana-program 1.14.15", + "solana-zk-token-sdk 1.14.15", ] [[package]] name = "solana-bpf-rust-custom-heap" -version = "1.14.14" +version = "1.14.15" dependencies = [ - "solana-program 1.14.14", + "solana-program 1.14.15", ] [[package]] name = "solana-bpf-rust-dep-crate" -version = "1.14.14" +version = "1.14.15" dependencies = [ "byteorder 1.4.3", "solana-address-lookup-table-program", - "solana-program 1.14.14", + "solana-program 1.14.15", ] [[package]] name = "solana-bpf-rust-deprecated-loader" -version = "1.14.14" +version = "1.14.15" dependencies = [ - "solana-program 1.14.14", + "solana-program 1.14.15", ] [[package]] name = "solana-bpf-rust-dup-accounts" -version = "1.14.14" +version = "1.14.15" dependencies = [ - "solana-program 1.14.14", + "solana-program 1.14.15", ] [[package]] name = "solana-bpf-rust-error-handling" -version = "1.14.14" +version = "1.14.15" dependencies = [ "num-derive", "num-traits", - "solana-program 1.14.14", + "solana-program 1.14.15", "thiserror", ] [[package]] name = "solana-bpf-rust-external-spend" -version = "1.14.14" +version = "1.14.15" dependencies = [ - "solana-program 1.14.14", + "solana-program 1.14.15", ] [[package]] name = "solana-bpf-rust-finalize" -version = "1.14.14" +version = "1.14.15" dependencies = [ - "solana-program 1.14.14", + "solana-program 1.14.15", ] [[package]] name = "solana-bpf-rust-get-minimum-delegation" -version = "1.14.14" +version = "1.14.15" dependencies = [ - "solana-program 1.14.14", + "solana-program 1.14.15", ] [[package]] name = "solana-bpf-rust-inner_instruction_alignment_check" -version = "1.14.14" +version = "1.14.15" dependencies = [ - "solana-program 1.14.14", + "solana-program 1.14.15", ] [[package]] name = "solana-bpf-rust-instruction-introspection" -version = "1.14.14" +version = "1.14.15" dependencies = [ - "solana-program 1.14.14", + "solana-program 1.14.15", ] [[package]] name = "solana-bpf-rust-invoke" -version = "1.14.14" +version = "1.14.15" dependencies = [ "solana-bpf-rust-invoked", - "solana-program 1.14.14", + "solana-program 1.14.15", ] [[package]] name = "solana-bpf-rust-invoke-and-error" -version = "1.14.14" +version = "1.14.15" dependencies = [ - "solana-program 1.14.14", + "solana-program 1.14.15", ] [[package]] name = "solana-bpf-rust-invoke-and-ok" -version = "1.14.14" +version = "1.14.15" dependencies = [ - "solana-program 1.14.14", + "solana-program 1.14.15", ] [[package]] name = "solana-bpf-rust-invoke-and-return" -version = "1.14.14" +version = "1.14.15" dependencies = [ - "solana-program 1.14.14", + "solana-program 1.14.15", ] [[package]] name = "solana-bpf-rust-invoked" -version = "1.14.14" +version = "1.14.15" dependencies = [ - "solana-program 1.14.14", + "solana-program 1.14.15", ] [[package]] name = "solana-bpf-rust-iter" -version = "1.14.14" +version = "1.14.15" dependencies = [ - "solana-program 1.14.14", + "solana-program 1.14.15", ] [[package]] name = "solana-bpf-rust-log-data" -version = "1.14.14" +version = "1.14.15" dependencies = [ - "solana-program 1.14.14", + "solana-program 1.14.15", ] [[package]] name = "solana-bpf-rust-many-args" -version = "1.14.14" +version = "1.14.15" dependencies = [ "solana-bpf-rust-many-args-dep", - "solana-program 1.14.14", + "solana-program 1.14.15", ] [[package]] name = "solana-bpf-rust-many-args-dep" -version = "1.14.14" +version = "1.14.15" dependencies = [ - "solana-program 1.14.14", + "solana-program 1.14.15", ] [[package]] name = "solana-bpf-rust-mem" -version = "1.14.14" +version = "1.14.15" dependencies = [ - "solana-program 1.14.14", + "solana-program 1.14.15", "solana-program-runtime", "solana-program-test", - "solana-sdk 1.14.14", + "solana-sdk 1.14.15", ] [[package]] name = "solana-bpf-rust-membuiltins" -version = "1.14.14" +version = "1.14.15" dependencies = [ "solana-bpf-rust-mem", - "solana-program 1.14.14", + "solana-program 1.14.15", ] [[package]] name = "solana-bpf-rust-noop" -version = "1.14.14" +version = "1.14.15" dependencies = [ - "solana-program 1.14.14", + "solana-program 1.14.15", ] [[package]] name = "solana-bpf-rust-panic" -version = "1.14.14" +version = "1.14.15" dependencies = [ - "solana-program 1.14.14", + "solana-program 1.14.15", ] [[package]] name = "solana-bpf-rust-param-passing" -version = "1.14.14" +version = "1.14.15" dependencies = [ "solana-bpf-rust-param-passing-dep", - "solana-program 1.14.14", + "solana-program 1.14.15", ] [[package]] name = "solana-bpf-rust-param-passing-dep" -version = "1.14.14" +version = "1.14.15" dependencies = [ - "solana-program 1.14.14", + "solana-program 1.14.15", ] [[package]] name = "solana-bpf-rust-rand" -version = "1.14.14" +version = "1.14.15" dependencies = [ "getrandom 0.1.14", "rand 0.7.3", - "solana-program 1.14.14", + "solana-program 1.14.15", ] [[package]] name = "solana-bpf-rust-realloc" -version = "1.14.14" +version = "1.14.15" dependencies = [ - "solana-program 1.14.14", + "solana-program 1.14.15", ] [[package]] name = "solana-bpf-rust-realloc-invoke" -version = "1.14.14" +version = "1.14.15" dependencies = [ "solana-bpf-rust-realloc", - "solana-program 1.14.14", + "solana-program 1.14.15", ] [[package]] name = "solana-bpf-rust-ro-account_modify" -version = "1.14.14" +version = "1.14.15" dependencies = [ - "solana-program 1.14.14", + "solana-program 1.14.15", ] [[package]] name = "solana-bpf-rust-ro-modify" -version = "1.14.14" +version = "1.14.15" dependencies = [ - "solana-program 1.14.14", + "solana-program 1.14.15", ] [[package]] name = "solana-bpf-rust-sanity" -version = "1.14.14" +version = "1.14.15" dependencies = [ - "solana-program 1.14.14", + "solana-program 1.14.15", "solana-program-runtime", "solana-program-test", - "solana-sdk 1.14.14", + "solana-sdk 1.14.15", ] [[package]] name = "solana-bpf-rust-secp256k1-recover" -version = "1.14.14" +version = "1.14.15" dependencies = [ "libsecp256k1 0.7.0", - "solana-program 1.14.14", + "solana-program 1.14.15", ] [[package]] name = "solana-bpf-rust-sha" -version = "1.14.14" +version = "1.14.15" dependencies = [ "blake3", - "solana-program 1.14.14", + "solana-program 1.14.15", ] [[package]] name = "solana-bpf-rust-sibling-instructions" -version = "1.14.14" +version = "1.14.15" dependencies = [ - "solana-program 1.14.14", + "solana-program 1.14.15", ] [[package]] name = "solana-bpf-rust-sibling_inner-instructions" -version = "1.14.14" +version = "1.14.15" dependencies = [ - "solana-program 1.14.14", + "solana-program 1.14.15", ] [[package]] name = "solana-bpf-rust-simulation" -version = "1.14.14" +version = "1.14.15" dependencies = [ - "solana-logger 1.14.14", - "solana-program 1.14.14", + "solana-logger 1.14.15", + "solana-program 1.14.15", "solana-program-test", - "solana-sdk 1.14.14", + "solana-sdk 1.14.15", "solana-validator", ] [[package]] name = "solana-bpf-rust-spoof1" -version = "1.14.14" +version = "1.14.15" dependencies = [ - "solana-program 1.14.14", + "solana-program 1.14.15", ] [[package]] name = "solana-bpf-rust-spoof1-system" -version = "1.14.14" +version = "1.14.15" dependencies = [ - "solana-program 1.14.14", + "solana-program 1.14.15", ] [[package]] name = "solana-bpf-rust-sysvar" -version = "1.14.14" +version = "1.14.15" dependencies = [ - "solana-program 1.14.14", + "solana-program 1.14.15", "solana-program-runtime", "solana-program-test", - "solana-sdk 1.14.14", + "solana-sdk 1.14.15", ] [[package]] name = "solana-bpf-rust-upgradeable" -version = "1.14.14" +version = "1.14.15" dependencies = [ - "solana-program 1.14.14", + "solana-program 1.14.15", ] [[package]] name = "solana-bpf-rust-upgraded" -version = "1.14.14" +version = "1.14.15" dependencies = [ - "solana-program 1.14.14", + "solana-program 1.14.15", ] [[package]] name = "solana-bucket-map" -version = "1.14.14" +version = "1.14.15" dependencies = [ "log", "memmap2", "modular-bitfield", "rand 0.7.3", "solana-measure", - "solana-sdk 1.14.14", + "solana-sdk 1.14.15", "tempfile", ] [[package]] name = "solana-clap-utils" -version = "1.14.14" +version = "1.14.15" dependencies = [ "chrono", "clap 2.33.3", "rpassword", "solana-perf", "solana-remote-wallet", - "solana-sdk 1.14.14", + "solana-sdk 1.14.15", "thiserror", "tiny-bip39", "uriparse", @@ -4587,7 +4587,7 @@ dependencies = [ [[package]] name = "solana-cli-config" -version = "1.14.14" +version = "1.14.15" dependencies = [ "dirs-next", "lazy_static", @@ -4595,13 +4595,13 @@ dependencies = [ "serde_derive", "serde_yaml", "solana-clap-utils", - "solana-sdk 1.14.14", + "solana-sdk 1.14.15", "url 2.2.2", ] [[package]] name = "solana-cli-output" -version = "1.14.14" +version = "1.14.15" dependencies = [ "Inflector", "base64 0.13.0", @@ -4618,7 +4618,7 @@ dependencies = [ "solana-clap-utils", "solana-cli-config", "solana-client", - "solana-sdk 1.14.14", + "solana-sdk 1.14.15", "solana-transaction-status", "solana-vote-program", "spl-memo", @@ -4626,7 +4626,7 @@ dependencies = [ [[package]] name = "solana-client" -version = "1.14.14" +version = "1.14.15" dependencies = [ "async-mutex", "async-trait", @@ -4662,7 +4662,7 @@ dependencies = [ "solana-measure", "solana-metrics", "solana-net-utils", - "solana-sdk 1.14.14", + "solana-sdk 1.14.15", "solana-streamer", "solana-transaction-status", "solana-version", @@ -4678,27 +4678,27 @@ dependencies = [ [[package]] name = "solana-compute-budget-program" -version = "1.14.14" +version = "1.14.15" dependencies = [ "solana-program-runtime", - "solana-sdk 1.14.14", + "solana-sdk 1.14.15", ] [[package]] name = "solana-config-program" -version = "1.14.14" +version = "1.14.15" dependencies = [ "bincode", "chrono", "serde", "serde_derive", "solana-program-runtime", - "solana-sdk 1.14.14", + "solana-sdk 1.14.15", ] [[package]] name = "solana-core" -version = "1.14.14" +version = "1.14.15" dependencies = [ "ahash", "base64 0.13.0", @@ -4727,8 +4727,8 @@ dependencies = [ "solana-bloom", "solana-client", "solana-entry", - "solana-frozen-abi 1.14.14", - "solana-frozen-abi-macro 1.14.14", + "solana-frozen-abi 1.14.15", + "solana-frozen-abi-macro 1.14.15", "solana-geyser-plugin-manager", "solana-gossip", "solana-ledger", @@ -4741,7 +4741,7 @@ dependencies = [ "solana-rayon-threadlimit", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.14", + "solana-sdk 1.14.15", "solana-send-transaction-service", "solana-streamer", "solana-transaction-status", @@ -4757,19 +4757,19 @@ dependencies = [ [[package]] name = "solana-download-utils" -version = "1.14.14" +version = "1.14.15" dependencies = [ "console", "indicatif", "log", "reqwest", "solana-runtime", - "solana-sdk 1.14.14", + "solana-sdk 1.14.15", ] [[package]] name = "solana-entry" -version = "1.14.14" +version = "1.14.15" dependencies = [ "bincode", "crossbeam-channel", @@ -4785,12 +4785,12 @@ dependencies = [ "solana-metrics", "solana-perf", "solana-rayon-threadlimit", - "solana-sdk 1.14.14", + "solana-sdk 1.14.15", ] [[package]] name = "solana-faucet" -version = "1.14.14" +version = "1.14.15" dependencies = [ "bincode", "byteorder 1.4.3", @@ -4801,9 +4801,9 @@ dependencies = [ "serde_derive", "solana-clap-utils", "solana-cli-config", - "solana-logger 1.14.14", + "solana-logger 1.14.15", "solana-metrics", - "solana-sdk 1.14.14", + "solana-sdk 1.14.15", "solana-version", "spl-memo", "thiserror", @@ -4846,7 +4846,7 @@ dependencies = [ [[package]] name = "solana-frozen-abi" -version = "1.14.14" +version = "1.14.15" dependencies = [ "ahash", "blake3", @@ -4871,7 +4871,7 @@ dependencies = [ "serde_derive", "serde_json", "sha2 0.10.2", - "solana-frozen-abi-macro 1.14.14", + "solana-frozen-abi-macro 1.14.15", "subtle", "thiserror", ] @@ -4890,7 +4890,7 @@ dependencies = [ [[package]] name = "solana-frozen-abi-macro" -version = "1.14.14" +version = "1.14.15" dependencies = [ "proc-macro2 1.0.41", "quote 1.0.18", @@ -4900,26 +4900,26 @@ dependencies = [ [[package]] name = "solana-genesis-utils" -version = "1.14.14" +version = "1.14.15" dependencies = [ "solana-download-utils", "solana-runtime", - "solana-sdk 1.14.14", + "solana-sdk 1.14.15", ] [[package]] name = "solana-geyser-plugin-interface" -version = "1.14.14" +version = "1.14.15" dependencies = [ "log", - "solana-sdk 1.14.14", + "solana-sdk 1.14.15", "solana-transaction-status", "thiserror", ] [[package]] name = "solana-geyser-plugin-manager" -version = "1.14.14" +version = "1.14.15" dependencies = [ "bs58", "crossbeam-channel", @@ -4932,14 +4932,14 @@ dependencies = [ "solana-metrics", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.14", + "solana-sdk 1.14.15", "solana-transaction-status", "thiserror", ] [[package]] name = "solana-gossip" -version = "1.14.14" +version = "1.14.15" dependencies = [ "bincode", "bv", @@ -4963,17 +4963,17 @@ dependencies = [ "solana-clap-utils", "solana-client", "solana-entry", - "solana-frozen-abi 1.14.14", - "solana-frozen-abi-macro 1.14.14", + "solana-frozen-abi 1.14.15", + "solana-frozen-abi-macro 1.14.15", "solana-ledger", - "solana-logger 1.14.14", + "solana-logger 1.14.15", "solana-measure", "solana-metrics", "solana-net-utils", "solana-perf", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.14.14", + "solana-sdk 1.14.15", "solana-streamer", "solana-version", "solana-vote-program", @@ -4982,7 +4982,7 @@ dependencies = [ [[package]] name = "solana-ledger" -version = "1.14.14" +version = "1.14.15" dependencies = [ "assert_matches", "bincode", @@ -5014,15 +5014,15 @@ dependencies = [ "solana-account-decoder", "solana-bpf-loader-program", "solana-entry", - "solana-frozen-abi 1.14.14", - "solana-frozen-abi-macro 1.14.14", + "solana-frozen-abi 1.14.15", + "solana-frozen-abi-macro 1.14.15", "solana-measure", "solana-metrics", "solana-perf", "solana-program-runtime", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.14.14", + "solana-sdk 1.14.15", "solana-stake-program", "solana-storage-bigtable", "solana-storage-proto", @@ -5051,7 +5051,7 @@ dependencies = [ [[package]] name = "solana-logger" -version = "1.14.14" +version = "1.14.15" dependencies = [ "env_logger", "lazy_static", @@ -5060,36 +5060,36 @@ dependencies = [ [[package]] name = "solana-measure" -version = "1.14.14" +version = "1.14.15" dependencies = [ "log", - "solana-sdk 1.14.14", + "solana-sdk 1.14.15", ] [[package]] name = "solana-merkle-tree" -version = "1.14.14" +version = "1.14.15" dependencies = [ "fast-math", "matches", - "solana-program 1.14.14", + "solana-program 1.14.15", ] [[package]] name = "solana-metrics" -version = "1.14.14" +version = "1.14.15" dependencies = [ "crossbeam-channel", "gethostname", "lazy_static", "log", "reqwest", - "solana-sdk 1.14.14", + "solana-sdk 1.14.15", ] [[package]] name = "solana-net-utils" -version = "1.14.14" +version = "1.14.15" dependencies = [ "bincode", "clap 3.1.6", @@ -5100,8 +5100,8 @@ dependencies = [ "serde", "serde_derive", "socket2", - "solana-logger 1.14.14", - "solana-sdk 1.14.14", + "solana-logger 1.14.15", + "solana-sdk 1.14.15", "solana-version", "tokio", "url 2.2.2", @@ -5109,7 +5109,7 @@ dependencies = [ [[package]] name = "solana-perf" -version = "1.14.14" +version = "1.14.15" dependencies = [ "ahash", "bincode", @@ -5128,13 +5128,13 @@ dependencies = [ "serde", "solana-metrics", "solana-rayon-threadlimit", - "solana-sdk 1.14.14", + "solana-sdk 1.14.15", "solana-vote-program", ] [[package]] name = "solana-poh" -version = "1.14.14" +version = "1.14.15" dependencies = [ "core_affinity", "crossbeam-channel", @@ -5144,7 +5144,7 @@ dependencies = [ "solana-measure", "solana-metrics", "solana-runtime", - "solana-sdk 1.14.14", + "solana-sdk 1.14.15", "solana-sys-tuner", "thiserror", ] @@ -5200,7 +5200,7 @@ dependencies = [ [[package]] name = "solana-program" -version = "1.14.14" +version = "1.14.15" dependencies = [ "base64 0.13.0", "bincode", @@ -5236,9 +5236,9 @@ dependencies = [ "serde_json", "sha2 0.10.2", "sha3 0.10.1", - "solana-frozen-abi 1.14.14", - "solana-frozen-abi-macro 1.14.14", - "solana-sdk-macro 1.14.14", + "solana-frozen-abi 1.14.15", + "solana-frozen-abi-macro 1.14.15", + "solana-sdk-macro 1.14.15", "thiserror", "tiny-bip39", "wasm-bindgen", @@ -5247,7 +5247,7 @@ dependencies = [ [[package]] name = "solana-program-runtime" -version = "1.14.14" +version = "1.14.15" dependencies = [ "base64 0.13.0", "bincode", @@ -5262,17 +5262,17 @@ dependencies = [ "rand 0.7.3", "rustc_version", "serde", - "solana-frozen-abi 1.14.14", - "solana-frozen-abi-macro 1.14.14", + "solana-frozen-abi 1.14.15", + "solana-frozen-abi-macro 1.14.15", "solana-measure", "solana-metrics", - "solana-sdk 1.14.14", + "solana-sdk 1.14.15", "thiserror", ] [[package]] name = "solana-program-test" -version = "1.14.14" +version = "1.14.15" dependencies = [ "assert_matches", "async-trait", @@ -5284,10 +5284,10 @@ dependencies = [ "solana-banks-client", "solana-banks-server", "solana-bpf-loader-program", - "solana-logger 1.14.14", + "solana-logger 1.14.15", "solana-program-runtime", "solana-runtime", - "solana-sdk 1.14.14", + "solana-sdk 1.14.15", "solana-vote-program", "thiserror", "tokio", @@ -5295,7 +5295,7 @@ dependencies = [ [[package]] name = "solana-rayon-threadlimit" -version = "1.14.14" +version = "1.14.15" dependencies = [ "lazy_static", "num_cpus", @@ -5303,7 +5303,7 @@ dependencies = [ [[package]] name = "solana-remote-wallet" -version = "1.14.14" +version = "1.14.15" dependencies = [ "console", "dialoguer", @@ -5313,14 +5313,14 @@ dependencies = [ "parking_lot 0.12.1", "qstring", "semver", - "solana-sdk 1.14.14", + "solana-sdk 1.14.15", "thiserror", "uriparse", ] [[package]] name = "solana-rpc" -version = "1.14.14" +version = "1.14.15" dependencies = [ "base64 0.13.0", "bincode", @@ -5353,7 +5353,7 @@ dependencies = [ "solana-poh", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.14.14", + "solana-sdk 1.14.15", "solana-send-transaction-service", "solana-stake-program", "solana-storage-bigtable", @@ -5371,7 +5371,7 @@ dependencies = [ [[package]] name = "solana-runtime" -version = "1.14.14" +version = "1.14.15" dependencies = [ "arrayref", "bincode", @@ -5408,17 +5408,17 @@ dependencies = [ "solana-bucket-map", "solana-compute-budget-program", "solana-config-program", - "solana-frozen-abi 1.14.14", - "solana-frozen-abi-macro 1.14.14", + "solana-frozen-abi 1.14.15", + "solana-frozen-abi-macro 1.14.15", "solana-measure", "solana-metrics", "solana-program-runtime", "solana-rayon-threadlimit", - "solana-sdk 1.14.14", + "solana-sdk 1.14.15", "solana-stake-program", "solana-vote-program", "solana-zk-token-proof-program", - "solana-zk-token-sdk 1.14.14", + "solana-zk-token-sdk 1.14.15", "strum", "strum_macros", "symlink", @@ -5481,7 +5481,7 @@ dependencies = [ [[package]] name = "solana-sdk" -version = "1.14.14" +version = "1.14.15" dependencies = [ "assert_matches", "base64 0.13.0", @@ -5518,11 +5518,11 @@ dependencies = [ "serde_json", "sha2 0.10.2", "sha3 0.10.1", - "solana-frozen-abi 1.14.14", - "solana-frozen-abi-macro 1.14.14", - "solana-logger 1.14.14", - "solana-program 1.14.14", - "solana-sdk-macro 1.14.14", + "solana-frozen-abi 1.14.15", + "solana-frozen-abi-macro 1.14.15", + "solana-logger 1.14.15", + "solana-program 1.14.15", + "solana-sdk-macro 1.14.15", "thiserror", "uriparse", "wasm-bindgen", @@ -5543,7 +5543,7 @@ dependencies = [ [[package]] name = "solana-sdk-macro" -version = "1.14.14" +version = "1.14.15" dependencies = [ "bs58", "proc-macro2 1.0.41", @@ -5554,7 +5554,7 @@ dependencies = [ [[package]] name = "solana-send-transaction-service" -version = "1.14.14" +version = "1.14.15" dependencies = [ "crossbeam-channel", "log", @@ -5562,12 +5562,12 @@ dependencies = [ "solana-measure", "solana-metrics", "solana-runtime", - "solana-sdk 1.14.14", + "solana-sdk 1.14.15", ] [[package]] name = "solana-stake-program" -version = "1.14.14" +version = "1.14.15" dependencies = [ "bincode", "log", @@ -5577,18 +5577,18 @@ dependencies = [ "serde", "serde_derive", "solana-config-program", - "solana-frozen-abi 1.14.14", - "solana-frozen-abi-macro 1.14.14", + "solana-frozen-abi 1.14.15", + "solana-frozen-abi-macro 1.14.15", "solana-metrics", "solana-program-runtime", - "solana-sdk 1.14.14", + "solana-sdk 1.14.15", "solana-vote-program", "thiserror", ] [[package]] name = "solana-storage-bigtable" -version = "1.14.14" +version = "1.14.15" dependencies = [ "backoff", "bincode", @@ -5609,7 +5609,7 @@ dependencies = [ "serde_derive", "smpl_jwt", "solana-metrics", - "solana-sdk 1.14.14", + "solana-sdk 1.14.15", "solana-storage-proto", "solana-transaction-status", "thiserror", @@ -5620,7 +5620,7 @@ dependencies = [ [[package]] name = "solana-storage-proto" -version = "1.14.14" +version = "1.14.15" dependencies = [ "bincode", "bs58", @@ -5628,14 +5628,14 @@ dependencies = [ "protobuf-src", "serde", "solana-account-decoder", - "solana-sdk 1.14.14", + "solana-sdk 1.14.15", "solana-transaction-status", "tonic-build 0.8.0", ] [[package]] name = "solana-streamer" -version = "1.14.14" +version = "1.14.15" dependencies = [ "crossbeam-channel", "futures-util", @@ -5654,7 +5654,7 @@ dependencies = [ "rustls 0.20.6", "solana-metrics", "solana-perf", - "solana-sdk 1.14.14", + "solana-sdk 1.14.15", "thiserror", "tokio", "x509-parser", @@ -5662,13 +5662,13 @@ dependencies = [ [[package]] name = "solana-sys-tuner" -version = "1.14.14" +version = "1.14.15" dependencies = [ "clap 2.33.3", "libc", "log", "nix", - "solana-logger 1.14.14", + "solana-logger 1.14.15", "solana-version", "sysctl", "unix_socket2", @@ -5677,7 +5677,7 @@ dependencies = [ [[package]] name = "solana-test-validator" -version = "1.14.14" +version = "1.14.15" dependencies = [ "base64 0.13.0", "log", @@ -5688,20 +5688,20 @@ dependencies = [ "solana-core", "solana-gossip", "solana-ledger", - "solana-logger 1.14.14", + "solana-logger 1.14.15", "solana-net-utils", "solana-program-runtime", "solana-program-test", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.14", + "solana-sdk 1.14.15", "solana-streamer", "tokio", ] [[package]] name = "solana-transaction-status" -version = "1.14.14" +version = "1.14.15" dependencies = [ "Inflector", "base64 0.13.0", @@ -5717,7 +5717,7 @@ dependencies = [ "solana-address-lookup-table-program", "solana-measure", "solana-metrics", - "solana-sdk 1.14.14", + "solana-sdk 1.14.15", "solana-vote-program", "spl-associated-token-account", "spl-memo", @@ -5728,7 +5728,7 @@ dependencies = [ [[package]] name = "solana-validator" -version = "1.14.14" +version = "1.14.15" dependencies = [ "chrono", "clap 2.33.3", @@ -5759,14 +5759,14 @@ dependencies = [ "solana-genesis-utils", "solana-gossip", "solana-ledger", - "solana-logger 1.14.14", + "solana-logger 1.14.15", "solana-metrics", "solana-net-utils", "solana-perf", "solana-poh", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.14", + "solana-sdk 1.14.15", "solana-send-transaction-service", "solana-storage-bigtable", "solana-streamer", @@ -5779,21 +5779,21 @@ dependencies = [ [[package]] name = "solana-version" -version = "1.14.14" +version = "1.14.15" dependencies = [ "log", "rustc_version", "semver", "serde", "serde_derive", - "solana-frozen-abi 1.14.14", - "solana-frozen-abi-macro 1.14.14", - "solana-sdk 1.14.14", + "solana-frozen-abi 1.14.15", + "solana-frozen-abi-macro 1.14.15", + "solana-sdk 1.14.15", ] [[package]] name = "solana-vote-program" -version = "1.14.14" +version = "1.14.15" dependencies = [ "bincode", "log", @@ -5802,25 +5802,25 @@ dependencies = [ "rustc_version", "serde", "serde_derive", - "solana-frozen-abi 1.14.14", - "solana-frozen-abi-macro 1.14.14", + "solana-frozen-abi 1.14.15", + "solana-frozen-abi-macro 1.14.15", "solana-metrics", "solana-program-runtime", - "solana-sdk 1.14.14", + "solana-sdk 1.14.15", "thiserror", ] [[package]] name = "solana-zk-token-proof-program" -version = "1.14.14" +version = "1.14.15" dependencies = [ "bytemuck", "getrandom 0.1.14", "num-derive", "num-traits", "solana-program-runtime", - "solana-sdk 1.14.14", - "solana-zk-token-sdk 1.14.14", + "solana-sdk 1.14.15", + "solana-zk-token-sdk 1.14.15", ] [[package]] @@ -5856,7 +5856,7 @@ dependencies = [ [[package]] name = "solana-zk-token-sdk" -version = "1.14.14" +version = "1.14.15" dependencies = [ "aes-gcm-siv", "arrayref", @@ -5876,8 +5876,8 @@ dependencies = [ "serde", "serde_json", "sha3 0.9.1", - "solana-program 1.14.14", - "solana-sdk 1.14.14", + "solana-program 1.14.15", + "solana-sdk 1.14.15", "subtle", "thiserror", "zeroize", diff --git a/programs/bpf/Cargo.toml b/programs/bpf/Cargo.toml index 2f258ae4ff28f1..4928c8c25cd22c 100644 --- a/programs/bpf/Cargo.toml +++ b/programs/bpf/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "solana-bpf-programs" description = "Blockchain, Rebuilt for Scale" -version = "1.14.14" +version = "1.14.15" documentation = "https://docs.rs/solana" homepage = "https://solana.com/" readme = "README.md" @@ -26,22 +26,22 @@ itertools = "0.10.1" log = "0.4.11" miow = "0.3.6" net2 = "0.2.37" -solana-account-decoder = { path = "../../account-decoder", version = "=1.14.14" } -solana-bpf-loader-program = { path = "../bpf_loader", version = "=1.14.14" } -solana-bpf-rust-invoke = { path = "rust/invoke", version = "=1.14.14" } -solana-bpf-rust-realloc = { path = "rust/realloc", version = "=1.14.14" } -solana-bpf-rust-realloc-invoke = { path = "rust/realloc_invoke", version = "=1.14.14" } -solana-cli-output = { path = "../../cli-output", version = "=1.14.14" } -solana-logger = { path = "../../logger", version = "=1.14.14" } -solana-measure = { path = "../../measure", version = "=1.14.14" } -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.14" } -solana-runtime = { path = "../../runtime", version = "=1.14.14" } -solana-sdk = { path = "../../sdk", version = "=1.14.14" } -solana-transaction-status = { path = "../../transaction-status", version = "=1.14.14" } +solana-account-decoder = { path = "../../account-decoder", version = "=1.14.15" } +solana-bpf-loader-program = { path = "../bpf_loader", version = "=1.14.15" } +solana-bpf-rust-invoke = { path = "rust/invoke", version = "=1.14.15" } +solana-bpf-rust-realloc = { path = "rust/realloc", version = "=1.14.15" } +solana-bpf-rust-realloc-invoke = { path = "rust/realloc_invoke", version = "=1.14.15" } +solana-cli-output = { path = "../../cli-output", version = "=1.14.15" } +solana-logger = { path = "../../logger", version = "=1.14.15" } +solana-measure = { path = "../../measure", version = "=1.14.15" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.15" } +solana-runtime = { path = "../../runtime", version = "=1.14.15" } +solana-sdk = { path = "../../sdk", version = "=1.14.15" } +solana-transaction-status = { path = "../../transaction-status", version = "=1.14.15" } solana_rbpf = "=0.2.31" [dev-dependencies] -solana-ledger = { path = "../../ledger", version = "=1.14.14" } +solana-ledger = { path = "../../ledger", version = "=1.14.15" } [[bench]] name = "bpf_loader" diff --git a/programs/bpf/rust/128bit/Cargo.toml b/programs/bpf/rust/128bit/Cargo.toml index 1ddf4c7dcc456d..874005438b65b6 100644 --- a/programs/bpf/rust/128bit/Cargo.toml +++ b/programs/bpf/rust/128bit/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-128bit" -version = "1.14.14" +version = "1.14.15" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ documentation = "https://docs.rs/solana-bpf-rust-128bit" edition = "2021" [dependencies] -solana-bpf-rust-128bit-dep = { path = "../128bit_dep", version = "=1.14.14" } -solana-program = { path = "../../../../sdk/program", version = "=1.14.14" } +solana-bpf-rust-128bit-dep = { path = "../128bit_dep", version = "=1.14.15" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.15" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/128bit_dep/Cargo.toml b/programs/bpf/rust/128bit_dep/Cargo.toml index 022e3f0dbdf455..33bb27d5109b7d 100644 --- a/programs/bpf/rust/128bit_dep/Cargo.toml +++ b/programs/bpf/rust/128bit_dep/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-128bit-dep" -version = "1.14.14" +version = "1.14.15" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-128bit-dep" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.14" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.15" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/bpf/rust/alloc/Cargo.toml b/programs/bpf/rust/alloc/Cargo.toml index 98e919bccb36e5..bd12581f3e2dfd 100644 --- a/programs/bpf/rust/alloc/Cargo.toml +++ b/programs/bpf/rust/alloc/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-alloc" -version = "1.14.14" +version = "1.14.15" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-alloc" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.14" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.15" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/call_depth/Cargo.toml b/programs/bpf/rust/call_depth/Cargo.toml index 3342d2d69876c9..0da728bf1f2bd9 100644 --- a/programs/bpf/rust/call_depth/Cargo.toml +++ b/programs/bpf/rust/call_depth/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-call-depth" -version = "1.14.14" +version = "1.14.15" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-call-depth" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.14" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.15" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/caller_access/Cargo.toml b/programs/bpf/rust/caller_access/Cargo.toml index 0b24276a6bb6ab..b30e7fb16380db 100644 --- a/programs/bpf/rust/caller_access/Cargo.toml +++ b/programs/bpf/rust/caller_access/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-caller-access" -version = "1.14.14" +version = "1.14.15" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-caller-access" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.14" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.15" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/curve25519/Cargo.toml b/programs/bpf/rust/curve25519/Cargo.toml index 340b354fa6ced9..cb5de0933369ed 100644 --- a/programs/bpf/rust/curve25519/Cargo.toml +++ b/programs/bpf/rust/curve25519/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-curve25519" -version = "1.14.14" +version = "1.14.15" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ documentation = "https://docs.rs/solana-bpf-rust-zktoken_crypto" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.14" } -solana-zk-token-sdk = { path = "../../../../zk-token-sdk", version = "=1.14.14" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.15" } +solana-zk-token-sdk = { path = "../../../../zk-token-sdk", version = "=1.14.15" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/custom_heap/Cargo.toml b/programs/bpf/rust/custom_heap/Cargo.toml index ea279044779b85..8bed3e3fd464d8 100644 --- a/programs/bpf/rust/custom_heap/Cargo.toml +++ b/programs/bpf/rust/custom_heap/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-custom-heap" -version = "1.14.14" +version = "1.14.15" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-custom-heap" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.14" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.15" } [features] default = ["custom-heap"] diff --git a/programs/bpf/rust/dep_crate/Cargo.toml b/programs/bpf/rust/dep_crate/Cargo.toml index c4fb870139e396..57181a8320b11b 100644 --- a/programs/bpf/rust/dep_crate/Cargo.toml +++ b/programs/bpf/rust/dep_crate/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-dep-crate" -version = "1.14.14" +version = "1.14.15" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,8 +12,8 @@ edition = "2021" [dependencies] byteorder = { version = "1", default-features = false } # list of crates which must be buildable for bpf programs -solana-address-lookup-table-program = { path = "../../../../programs/address-lookup-table", version = "=1.14.14" } -solana-program = { path = "../../../../sdk/program", version = "=1.14.14" } +solana-address-lookup-table-program = { path = "../../../../programs/address-lookup-table", version = "=1.14.15" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.15" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/deprecated_loader/Cargo.toml b/programs/bpf/rust/deprecated_loader/Cargo.toml index 86d94b45ee16ad..99a8939aa01456 100644 --- a/programs/bpf/rust/deprecated_loader/Cargo.toml +++ b/programs/bpf/rust/deprecated_loader/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-deprecated-loader" -version = "1.14.14" +version = "1.14.15" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-deprecated-loader" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.14" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.15" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/dup_accounts/Cargo.toml b/programs/bpf/rust/dup_accounts/Cargo.toml index 1fe14c109959be..bda640a1a2b417 100644 --- a/programs/bpf/rust/dup_accounts/Cargo.toml +++ b/programs/bpf/rust/dup_accounts/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-dup-accounts" -version = "1.14.14" +version = "1.14.15" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-dup-accounts" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.14" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.15" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/error_handling/Cargo.toml b/programs/bpf/rust/error_handling/Cargo.toml index e4c4b44697609a..b0913bd0c20967 100644 --- a/programs/bpf/rust/error_handling/Cargo.toml +++ b/programs/bpf/rust/error_handling/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-error-handling" -version = "1.14.14" +version = "1.14.15" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,7 +12,7 @@ edition = "2021" [dependencies] num-derive = "0.3" num-traits = "0.2" -solana-program = { path = "../../../../sdk/program", version = "=1.14.14" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.15" } thiserror = "1.0" [lib] diff --git a/programs/bpf/rust/external_spend/Cargo.toml b/programs/bpf/rust/external_spend/Cargo.toml index ffd739ccf11258..9d4fef90cd479c 100644 --- a/programs/bpf/rust/external_spend/Cargo.toml +++ b/programs/bpf/rust/external_spend/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-external-spend" -version = "1.14.14" +version = "1.14.15" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-external-spend" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.14" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.15" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/finalize/Cargo.toml b/programs/bpf/rust/finalize/Cargo.toml index 0ece9e1349cb38..36c7bdb7f0872d 100644 --- a/programs/bpf/rust/finalize/Cargo.toml +++ b/programs/bpf/rust/finalize/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-finalize" -version = "1.14.14" +version = "1.14.15" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-finalize" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.14" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.15" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/get_minimum_delegation/Cargo.toml b/programs/bpf/rust/get_minimum_delegation/Cargo.toml index 1abef6275a3bbf..90c72b838b3039 100644 --- a/programs/bpf/rust/get_minimum_delegation/Cargo.toml +++ b/programs/bpf/rust/get_minimum_delegation/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-get-minimum-delegation" -version = "1.14.14" +version = "1.14.15" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-get-minimum-delegation" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.14" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.15" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/inner_instruction_alignment_check/Cargo.toml b/programs/bpf/rust/inner_instruction_alignment_check/Cargo.toml index f859e1d83a424f..8efd9a73368f22 100644 --- a/programs/bpf/rust/inner_instruction_alignment_check/Cargo.toml +++ b/programs/bpf/rust/inner_instruction_alignment_check/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-inner_instruction_alignment_check" -version = "1.14.14" +version = "1.14.15" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-inner_instruction_alignment_che edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.14" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.15" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/instruction_introspection/Cargo.toml b/programs/bpf/rust/instruction_introspection/Cargo.toml index af88aca6ea5011..b69339332e5614 100644 --- a/programs/bpf/rust/instruction_introspection/Cargo.toml +++ b/programs/bpf/rust/instruction_introspection/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-instruction-introspection" -version = "1.14.14" +version = "1.14.15" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-instruction-introspection" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.14" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.15" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/invoke/Cargo.toml b/programs/bpf/rust/invoke/Cargo.toml index 62df1c24b70e0b..802923f67dc9ed 100644 --- a/programs/bpf/rust/invoke/Cargo.toml +++ b/programs/bpf/rust/invoke/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-invoke" -version = "1.14.14" +version = "1.14.15" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -15,7 +15,7 @@ program = [] [dependencies] solana-bpf-rust-invoked = { path = "../invoked", default-features = false } -solana-program = { path = "../../../../sdk/program", version = "=1.14.14" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.15" } [lib] crate-type = ["lib", "cdylib"] diff --git a/programs/bpf/rust/invoke_and_error/Cargo.toml b/programs/bpf/rust/invoke_and_error/Cargo.toml index c7ee95464c15cd..c0b4c2c065eb49 100644 --- a/programs/bpf/rust/invoke_and_error/Cargo.toml +++ b/programs/bpf/rust/invoke_and_error/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-invoke-and-error" -version = "1.14.14" +version = "1.14.15" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-invoke-and-error" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.14" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.15" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/invoke_and_ok/Cargo.toml b/programs/bpf/rust/invoke_and_ok/Cargo.toml index 46d32c7843678b..e2caccf8298598 100644 --- a/programs/bpf/rust/invoke_and_ok/Cargo.toml +++ b/programs/bpf/rust/invoke_and_ok/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-invoke-and-ok" -version = "1.14.14" +version = "1.14.15" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-invoke-and-ok" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.14" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.15" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/invoke_and_return/Cargo.toml b/programs/bpf/rust/invoke_and_return/Cargo.toml index 9f456f98b2107f..10badfe84a18b5 100644 --- a/programs/bpf/rust/invoke_and_return/Cargo.toml +++ b/programs/bpf/rust/invoke_and_return/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-invoke-and-return" -version = "1.14.14" +version = "1.14.15" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-invoke-and-return" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.14" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.15" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/invoked/Cargo.toml b/programs/bpf/rust/invoked/Cargo.toml index 70b491638c71d5..8d095bd447a6cb 100644 --- a/programs/bpf/rust/invoked/Cargo.toml +++ b/programs/bpf/rust/invoked/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-invoked" -version = "1.14.14" +version = "1.14.15" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,7 +14,7 @@ default = ["program"] program = [] [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.14" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.15" } [lib] crate-type = ["lib", "cdylib"] diff --git a/programs/bpf/rust/iter/Cargo.toml b/programs/bpf/rust/iter/Cargo.toml index 97ba72d89a8b1e..3ac35b57b63ae8 100644 --- a/programs/bpf/rust/iter/Cargo.toml +++ b/programs/bpf/rust/iter/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-iter" -version = "1.14.14" +version = "1.14.15" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-iter" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.14" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.15" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/log_data/Cargo.toml b/programs/bpf/rust/log_data/Cargo.toml index 46b2da2ccf5883..c16fe3bc267664 100644 --- a/programs/bpf/rust/log_data/Cargo.toml +++ b/programs/bpf/rust/log_data/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-log-data" -version = "1.14.14" +version = "1.14.15" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-log-data" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.14" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.15" } [features] default = ["program"] diff --git a/programs/bpf/rust/many_args/Cargo.toml b/programs/bpf/rust/many_args/Cargo.toml index 57c8f929ecedbc..72e935284c63b4 100644 --- a/programs/bpf/rust/many_args/Cargo.toml +++ b/programs/bpf/rust/many_args/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-many-args" -version = "1.14.14" +version = "1.14.15" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ documentation = "https://docs.rs/solana-bpf-rust-many-args" edition = "2021" [dependencies] -solana-bpf-rust-many-args-dep = { path = "../many_args_dep", version = "=1.14.14" } -solana-program = { path = "../../../../sdk/program", version = "=1.14.14" } +solana-bpf-rust-many-args-dep = { path = "../many_args_dep", version = "=1.14.15" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.15" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/many_args_dep/Cargo.toml b/programs/bpf/rust/many_args_dep/Cargo.toml index 5e58f529aec564..7de12757303930 100644 --- a/programs/bpf/rust/many_args_dep/Cargo.toml +++ b/programs/bpf/rust/many_args_dep/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-many-args-dep" -version = "1.14.14" +version = "1.14.15" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-many-args-dep" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.14" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.15" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/bpf/rust/mem/Cargo.toml b/programs/bpf/rust/mem/Cargo.toml index 667ccfeea65919..541a8f75c8ed6e 100644 --- a/programs/bpf/rust/mem/Cargo.toml +++ b/programs/bpf/rust/mem/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-mem" -version = "1.14.14" +version = "1.14.15" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,12 +13,12 @@ edition = "2021" no-entrypoint = [] [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.14" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.15" } [dev-dependencies] -solana-program-runtime = { path = "../../../../program-runtime", version = "=1.14.14" } -solana-program-test = { path = "../../../../program-test", version = "=1.14.14" } -solana-sdk = { path = "../../../../sdk", version = "=1.14.14" } +solana-program-runtime = { path = "../../../../program-runtime", version = "=1.14.15" } +solana-program-test = { path = "../../../../program-test", version = "=1.14.15" } +solana-sdk = { path = "../../../../sdk", version = "=1.14.15" } [lib] crate-type = ["cdylib", "lib"] diff --git a/programs/bpf/rust/membuiltins/Cargo.toml b/programs/bpf/rust/membuiltins/Cargo.toml index 84378e081c783a..3383854f795675 100644 --- a/programs/bpf/rust/membuiltins/Cargo.toml +++ b/programs/bpf/rust/membuiltins/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-membuiltins" -version = "1.14.14" +version = "1.14.15" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ documentation = "https://docs.rs/solana-bpf-rust-mem" edition = "2021" [dependencies] -solana-bpf-rust-mem = { path = "../mem", version = "=1.14.14", features = [ "no-entrypoint" ] } -solana-program = { path = "../../../../sdk/program", version = "=1.14.14" } +solana-bpf-rust-mem = { path = "../mem", version = "=1.14.15", features = [ "no-entrypoint" ] } +solana-program = { path = "../../../../sdk/program", version = "=1.14.15" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/noop/Cargo.toml b/programs/bpf/rust/noop/Cargo.toml index 23646e2cd8db04..8bdd8e0a03c98c 100644 --- a/programs/bpf/rust/noop/Cargo.toml +++ b/programs/bpf/rust/noop/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-noop" -version = "1.14.14" +version = "1.14.15" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-noop" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.14" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.15" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/panic/Cargo.toml b/programs/bpf/rust/panic/Cargo.toml index 631606719d01a3..b4a596cbeef75f 100644 --- a/programs/bpf/rust/panic/Cargo.toml +++ b/programs/bpf/rust/panic/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-panic" -version = "1.14.14" +version = "1.14.15" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-panic" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.14" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.15" } [features] default = ["custom-panic"] diff --git a/programs/bpf/rust/param_passing/Cargo.toml b/programs/bpf/rust/param_passing/Cargo.toml index 89807dde69e3ff..ce7a4a7dd17e05 100644 --- a/programs/bpf/rust/param_passing/Cargo.toml +++ b/programs/bpf/rust/param_passing/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-param-passing" -version = "1.14.14" +version = "1.14.15" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ documentation = "https://docs.rs/solana-bpf-rust-param-passing" edition = "2021" [dependencies] -solana-bpf-rust-param-passing-dep = { path = "../param_passing_dep", version = "=1.14.14" } -solana-program = { path = "../../../../sdk/program", version = "=1.14.14" } +solana-bpf-rust-param-passing-dep = { path = "../param_passing_dep", version = "=1.14.15" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.15" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/param_passing_dep/Cargo.toml b/programs/bpf/rust/param_passing_dep/Cargo.toml index 602bccd09f86c5..edce85bbce22e8 100644 --- a/programs/bpf/rust/param_passing_dep/Cargo.toml +++ b/programs/bpf/rust/param_passing_dep/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-param-passing-dep" -version = "1.14.14" +version = "1.14.15" description = "Solana BPF program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-param-passing-dep" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.14" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.15" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/bpf/rust/rand/Cargo.toml b/programs/bpf/rust/rand/Cargo.toml index c584a788ab1628..97a38d30053d38 100644 --- a/programs/bpf/rust/rand/Cargo.toml +++ b/programs/bpf/rust/rand/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-rand" -version = "1.14.14" +version = "1.14.15" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,7 +12,7 @@ edition = "2021" [dependencies] getrandom = { version = "0.1.14", features = ["dummy"] } rand = "0.7" -solana-program = { path = "../../../../sdk/program", version = "=1.14.14" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.15" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/realloc/Cargo.toml b/programs/bpf/rust/realloc/Cargo.toml index 1856e6ef0c022e..6837e315ebd00f 100644 --- a/programs/bpf/rust/realloc/Cargo.toml +++ b/programs/bpf/rust/realloc/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-realloc" -version = "1.14.14" +version = "1.14.15" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,7 +14,7 @@ default = ["program"] program = [] [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.14" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.15" } [lib] crate-type = ["lib", "cdylib"] diff --git a/programs/bpf/rust/realloc_invoke/Cargo.toml b/programs/bpf/rust/realloc_invoke/Cargo.toml index cfea3f866f8c65..b05c260fc1e097 100644 --- a/programs/bpf/rust/realloc_invoke/Cargo.toml +++ b/programs/bpf/rust/realloc_invoke/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-realloc-invoke" -version = "1.14.14" +version = "1.14.15" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,8 +14,8 @@ default = ["program"] program = [] [dependencies] -solana-bpf-rust-realloc = { path = "../realloc", version = "=1.14.14", default-features = false } -solana-program = { path = "../../../../sdk/program", version = "=1.14.14" } +solana-bpf-rust-realloc = { path = "../realloc", version = "=1.14.15", default-features = false } +solana-program = { path = "../../../../sdk/program", version = "=1.14.15" } [lib] crate-type = ["lib", "cdylib"] diff --git a/programs/bpf/rust/ro_account_modify/Cargo.toml b/programs/bpf/rust/ro_account_modify/Cargo.toml index 0d2cb66ed37d14..372245706051a5 100644 --- a/programs/bpf/rust/ro_account_modify/Cargo.toml +++ b/programs/bpf/rust/ro_account_modify/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-ro-account_modify" -version = "1.14.14" +version = "1.14.15" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-ro-modify" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.14" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.15" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/ro_modify/Cargo.toml b/programs/bpf/rust/ro_modify/Cargo.toml index b1e019ed8a85fd..dd38945aa14351 100644 --- a/programs/bpf/rust/ro_modify/Cargo.toml +++ b/programs/bpf/rust/ro_modify/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-ro-modify" -version = "1.14.14" +version = "1.14.15" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-ro-modify" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.14" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.15" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/sanity/Cargo.toml b/programs/bpf/rust/sanity/Cargo.toml index b4d14d12c5b2cb..effa8f30ce0331 100644 --- a/programs/bpf/rust/sanity/Cargo.toml +++ b/programs/bpf/rust/sanity/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-sanity" -version = "1.14.14" +version = "1.14.15" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,12 +13,12 @@ edition = "2021" test-bpf = [] [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.14" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.15" } [dev-dependencies] -solana-program-runtime = { path = "../../../../program-runtime", version = "=1.14.14" } -solana-program-test = { path = "../../../../program-test", version = "=1.14.14" } -solana-sdk = { path = "../../../../sdk", version = "=1.14.14" } +solana-program-runtime = { path = "../../../../program-runtime", version = "=1.14.15" } +solana-program-test = { path = "../../../../program-test", version = "=1.14.15" } +solana-sdk = { path = "../../../../sdk", version = "=1.14.15" } [lib] crate-type = ["cdylib", "lib"] diff --git a/programs/bpf/rust/secp256k1_recover/Cargo.toml b/programs/bpf/rust/secp256k1_recover/Cargo.toml index e244c08be3098b..7470379cc60aa2 100644 --- a/programs/bpf/rust/secp256k1_recover/Cargo.toml +++ b/programs/bpf/rust/secp256k1_recover/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-secp256k1-recover" -version = "1.14.14" +version = "1.14.15" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -11,7 +11,7 @@ edition = "2021" [dependencies] libsecp256k1 = { version = "0.7.0", default-features = false } -solana-program = { path = "../../../../sdk/program", version = "=1.14.14" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.15" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/sha/Cargo.toml b/programs/bpf/rust/sha/Cargo.toml index 47a64da2b87dc8..bbd5bace46ffc0 100644 --- a/programs/bpf/rust/sha/Cargo.toml +++ b/programs/bpf/rust/sha/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-sha" -version = "1.14.14" +version = "1.14.15" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -11,7 +11,7 @@ edition = "2021" [dependencies] blake3 = "1.0.0" -solana-program = { path = "../../../../sdk/program", version = "=1.14.14" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.15" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/sibling_inner_instruction/Cargo.toml b/programs/bpf/rust/sibling_inner_instruction/Cargo.toml index ad2ac666e7ec7d..405d2f401ed8d3 100644 --- a/programs/bpf/rust/sibling_inner_instruction/Cargo.toml +++ b/programs/bpf/rust/sibling_inner_instruction/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-sibling_inner-instructions" -version = "1.14.14" +version = "1.14.15" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-log-data" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.14" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.15" } [features] default = ["program"] diff --git a/programs/bpf/rust/sibling_instruction/Cargo.toml b/programs/bpf/rust/sibling_instruction/Cargo.toml index a4681e6fa61fc3..f71783b64972d8 100644 --- a/programs/bpf/rust/sibling_instruction/Cargo.toml +++ b/programs/bpf/rust/sibling_instruction/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-sibling-instructions" -version = "1.14.14" +version = "1.14.15" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-log-data" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.14" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.15" } [features] default = ["program"] diff --git a/programs/bpf/rust/simulation/Cargo.toml b/programs/bpf/rust/simulation/Cargo.toml index cd9a6020db41ea..e06f06dc12c3e0 100644 --- a/programs/bpf/rust/simulation/Cargo.toml +++ b/programs/bpf/rust/simulation/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-simulation" -version = "1.14.14" +version = "1.14.15" description = "Solana BPF Program Simulation Differences" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,13 +13,13 @@ edition = "2021" test-bpf = [] [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.14" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.15" } [dev-dependencies] -solana-logger = { path = "../../../../logger", version = "=1.14.14" } -solana-program-test = { path = "../../../../program-test", version = "=1.14.14" } -solana-sdk = { path = "../../../../sdk", version = "=1.14.14" } -solana-validator = { path = "../../../../validator", version = "=1.14.14" } +solana-logger = { path = "../../../../logger", version = "=1.14.15" } +solana-program-test = { path = "../../../../program-test", version = "=1.14.15" } +solana-sdk = { path = "../../../../sdk", version = "=1.14.15" } +solana-validator = { path = "../../../../validator", version = "=1.14.15" } [lib] crate-type = ["cdylib", "lib"] diff --git a/programs/bpf/rust/spoof1/Cargo.toml b/programs/bpf/rust/spoof1/Cargo.toml index ecf323e9e56881..bce8b4d7fe24b8 100644 --- a/programs/bpf/rust/spoof1/Cargo.toml +++ b/programs/bpf/rust/spoof1/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-spoof1" -version = "1.14.14" +version = "1.14.15" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-spoof1" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.14" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.15" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/spoof1_system/Cargo.toml b/programs/bpf/rust/spoof1_system/Cargo.toml index f0536374bb53e3..a9931fbf46046d 100644 --- a/programs/bpf/rust/spoof1_system/Cargo.toml +++ b/programs/bpf/rust/spoof1_system/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-spoof1-system" -version = "1.14.14" +version = "1.14.15" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-spoof1-system" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.14" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.15" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/sysvar/Cargo.toml b/programs/bpf/rust/sysvar/Cargo.toml index 6d58363c694fe3..61c781aae50451 100644 --- a/programs/bpf/rust/sysvar/Cargo.toml +++ b/programs/bpf/rust/sysvar/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-sysvar" -version = "1.14.14" +version = "1.14.15" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,12 +10,12 @@ documentation = "https://docs.rs/solana-bpf-rust-sysvar" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.14" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.15" } [dev-dependencies] -solana-program-runtime = { path = "../../../../program-runtime", version = "=1.14.14" } -solana-program-test = { path = "../../../../program-test", version = "=1.14.14" } -solana-sdk = { path = "../../../../sdk", version = "=1.14.14" } +solana-program-runtime = { path = "../../../../program-runtime", version = "=1.14.15" } +solana-program-test = { path = "../../../../program-test", version = "=1.14.15" } +solana-sdk = { path = "../../../../sdk", version = "=1.14.15" } [lib] crate-type = ["cdylib", "lib"] diff --git a/programs/bpf/rust/upgradeable/Cargo.toml b/programs/bpf/rust/upgradeable/Cargo.toml index e1682c8ff5c6a7..77ef98a41d858e 100644 --- a/programs/bpf/rust/upgradeable/Cargo.toml +++ b/programs/bpf/rust/upgradeable/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-upgradeable" -version = "1.14.14" +version = "1.14.15" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-upgradeable" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.14" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.15" } [lib] name = "solana_bpf_rust_upgradeable" diff --git a/programs/bpf/rust/upgraded/Cargo.toml b/programs/bpf/rust/upgraded/Cargo.toml index 9df35b2c952db1..773a768af19fce 100644 --- a/programs/bpf/rust/upgraded/Cargo.toml +++ b/programs/bpf/rust/upgraded/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-upgraded" -version = "1.14.14" +version = "1.14.15" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-upgraded" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.14" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.15" } [lib] name = "solana_bpf_rust_upgraded" diff --git a/programs/bpf_loader/Cargo.toml b/programs/bpf_loader/Cargo.toml index 0aaa18c2077995..47cc912a9b34d8 100644 --- a/programs/bpf_loader/Cargo.toml +++ b/programs/bpf_loader/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-loader-program" -version = "1.14.14" +version = "1.14.15" description = "Solana BPF loader" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,17 +14,17 @@ bincode = "1.3.3" byteorder = "1.4.3" libsecp256k1 = "0.6.0" log = "0.4.17" -solana-measure = { path = "../../measure", version = "=1.14.14" } -solana-metrics = { path = "../../metrics", version = "=1.14.14" } -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.14" } -solana-sdk = { path = "../../sdk", version = "=1.14.14" } -solana-zk-token-sdk = { path = "../../zk-token-sdk", version = "=1.14.14" } +solana-measure = { path = "../../measure", version = "=1.14.15" } +solana-metrics = { path = "../../metrics", version = "=1.14.15" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.15" } +solana-sdk = { path = "../../sdk", version = "=1.14.15" } +solana-zk-token-sdk = { path = "../../zk-token-sdk", version = "=1.14.15" } solana_rbpf = "=0.2.31" thiserror = "1.0" [dev-dependencies] rand = "0.7.3" -solana-runtime = { path = "../../runtime", version = "=1.14.14" } +solana-runtime = { path = "../../runtime", version = "=1.14.15" } [lib] crate-type = ["lib"] diff --git a/programs/bpf_loader/gen-syscall-list/Cargo.toml b/programs/bpf_loader/gen-syscall-list/Cargo.toml index 52f1c8c6e1685f..8b5248126a180e 100644 --- a/programs/bpf_loader/gen-syscall-list/Cargo.toml +++ b/programs/bpf_loader/gen-syscall-list/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "gen-syscall-list" -version = "1.14.14" +version = "1.14.15" edition = "2021" license = "Apache-2.0" publish = false diff --git a/programs/compute-budget/Cargo.toml b/programs/compute-budget/Cargo.toml index ebc9073f01ee58..90d6d70c4b84f2 100644 --- a/programs/compute-budget/Cargo.toml +++ b/programs/compute-budget/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "solana-compute-budget-program" description = "Solana Compute Budget program" -version = "1.14.14" +version = "1.14.15" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-compute-budget-program" repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ license = "Apache-2.0" edition = "2021" [dependencies] -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.14" } -solana-sdk = { path = "../../sdk", version = "=1.14.14" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.15" } +solana-sdk = { path = "../../sdk", version = "=1.14.15" } [lib] crate-type = ["lib"] diff --git a/programs/config/Cargo.toml b/programs/config/Cargo.toml index e4c209e754a43c..ba8549e60aca3b 100644 --- a/programs/config/Cargo.toml +++ b/programs/config/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-config-program" -version = "1.14.14" +version = "1.14.15" description = "Solana Config program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,11 +14,11 @@ bincode = "1.3.3" chrono = { version = "0.4.11", features = ["serde"] } serde = "1.0.138" serde_derive = "1.0.103" -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.14" } -solana-sdk = { path = "../../sdk", version = "=1.14.14" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.15" } +solana-sdk = { path = "../../sdk", version = "=1.14.15" } [dev-dependencies] -solana-logger = { path = "../../logger", version = "=1.14.14" } +solana-logger = { path = "../../logger", version = "=1.14.15" } [lib] crate-type = ["lib"] diff --git a/programs/ed25519-tests/Cargo.toml b/programs/ed25519-tests/Cargo.toml index 7fb6aea1b38d86..e2043c88e9e30f 100644 --- a/programs/ed25519-tests/Cargo.toml +++ b/programs/ed25519-tests/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-ed25519-program-tests" -version = "1.14.14" +version = "1.14.15" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" @@ -12,8 +12,8 @@ publish = false assert_matches = "1.5.0" ed25519-dalek = "=1.0.1" rand = "0.7.0" -solana-program-test = { path = "../../program-test", version = "=1.14.14" } -solana-sdk = { path = "../../sdk", version = "=1.14.14" } +solana-program-test = { path = "../../program-test", version = "=1.14.15" } +solana-sdk = { path = "../../sdk", version = "=1.14.15" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/stake/Cargo.toml b/programs/stake/Cargo.toml index ed3a5d85e658af..a36587f041a4ad 100644 --- a/programs/stake/Cargo.toml +++ b/programs/stake/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-stake-program" -version = "1.14.14" +version = "1.14.15" description = "Solana Stake program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -16,19 +16,19 @@ num-derive = "0.3" num-traits = "0.2" serde = "1.0.138" serde_derive = "1.0.103" -solana-config-program = { path = "../config", version = "=1.14.14" } -solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.14" } -solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.14" } -solana-metrics = { path = "../../metrics", version = "=1.14.14" } -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.14" } -solana-sdk = { path = "../../sdk", version = "=1.14.14" } -solana-vote-program = { path = "../vote", version = "=1.14.14" } +solana-config-program = { path = "../config", version = "=1.14.15" } +solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.15" } +solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.15" } +solana-metrics = { path = "../../metrics", version = "=1.14.15" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.15" } +solana-sdk = { path = "../../sdk", version = "=1.14.15" } +solana-vote-program = { path = "../vote", version = "=1.14.15" } thiserror = "1.0" [dev-dependencies] assert_matches = "1.5.0" proptest = "1.0" -solana-logger = { path = "../../logger", version = "=1.14.14" } +solana-logger = { path = "../../logger", version = "=1.14.15" } test-case = "2.1.0" [build-dependencies] diff --git a/programs/vote/Cargo.toml b/programs/vote/Cargo.toml index bbdab7a6e8a48c..df7d68b066af6c 100644 --- a/programs/vote/Cargo.toml +++ b/programs/vote/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-vote-program" -version = "1.14.14" +version = "1.14.15" description = "Solana Vote program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -16,17 +16,17 @@ num-derive = "0.3" num-traits = "0.2" serde = "1.0.138" serde_derive = "1.0.103" -solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.14" } -solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.14" } -solana-metrics = { path = "../../metrics", version = "=1.14.14" } -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.14" } -solana-sdk = { path = "../../sdk", version = "=1.14.14" } +solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.15" } +solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.15" } +solana-metrics = { path = "../../metrics", version = "=1.14.15" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.15" } +solana-sdk = { path = "../../sdk", version = "=1.14.15" } thiserror = "1.0" [dev-dependencies] itertools = "0.10.3" rand = "0.7.0" -solana-logger = { path = "../../logger", version = "=1.14.14" } +solana-logger = { path = "../../logger", version = "=1.14.15" } test-case = "2.1.0" [build-dependencies] diff --git a/programs/zk-token-proof/Cargo.toml b/programs/zk-token-proof/Cargo.toml index 93c8957e9405d6..c9fd51c80c7810 100644 --- a/programs/zk-token-proof/Cargo.toml +++ b/programs/zk-token-proof/Cargo.toml @@ -3,7 +3,7 @@ name = "solana-zk-token-proof-program" description = "Solana Zk Token Proof Program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" -version = "1.14.14" +version = "1.14.15" license = "Apache-2.0" edition = "2021" @@ -12,6 +12,6 @@ bytemuck = { version = "1.11.0", features = ["derive"] } getrandom = { version = "0.1", features = ["dummy"] } num-derive = "0.3" num-traits = "0.2" -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.14" } -solana-sdk = { path = "../../sdk", version = "=1.14.14" } -solana-zk-token-sdk = { path = "../../zk-token-sdk", version = "=1.14.14" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.15" } +solana-sdk = { path = "../../sdk", version = "=1.14.15" } +solana-zk-token-sdk = { path = "../../zk-token-sdk", version = "=1.14.15" } diff --git a/rayon-threadlimit/Cargo.toml b/rayon-threadlimit/Cargo.toml index f9e15adf5e6594..bcc65f6155301f 100644 --- a/rayon-threadlimit/Cargo.toml +++ b/rayon-threadlimit/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-rayon-threadlimit" -version = "1.14.14" +version = "1.14.15" description = "solana-rayon-threadlimit" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-rayon-threadlimit" diff --git a/rbpf-cli/Cargo.toml b/rbpf-cli/Cargo.toml index 44e8f5c43d88f7..ecf9d57676f86b 100644 --- a/rbpf-cli/Cargo.toml +++ b/rbpf-cli/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "rbpf-cli" -version = "1.14.14" +version = "1.14.15" description = "CLI to test and analyze eBPF programs" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/rbpf" @@ -13,8 +13,8 @@ publish = false clap = { version = "3.1.5", features = ["cargo"] } serde = "1.0.138" serde_json = "1.0.81" -solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.14" } -solana-logger = { path = "../logger", version = "=1.14.14" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.14" } -solana-sdk = { path = "../sdk", version = "=1.14.14" } +solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.15" } +solana-logger = { path = "../logger", version = "=1.14.15" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.15" } +solana-sdk = { path = "../sdk", version = "=1.14.15" } solana_rbpf = "=0.2.31" diff --git a/remote-wallet/Cargo.toml b/remote-wallet/Cargo.toml index cec7a58e83ac0e..1b4001d81e16ba 100644 --- a/remote-wallet/Cargo.toml +++ b/remote-wallet/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-remote-wallet" description = "Blockchain, Rebuilt for Scale" -version = "1.14.14" +version = "1.14.15" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -19,7 +19,7 @@ num-traits = { version = "0.2" } parking_lot = "0.12" qstring = "0.7.2" semver = "1.0" -solana-sdk = { path = "../sdk", version = "=1.14.14" } +solana-sdk = { path = "../sdk", version = "=1.14.15" } thiserror = "1.0" uriparse = "0.6.4" diff --git a/rpc-test/Cargo.toml b/rpc-test/Cargo.toml index 6da060c5a572be..6a5cbb6b78b220 100644 --- a/rpc-test/Cargo.toml +++ b/rpc-test/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-rpc-test" -version = "1.14.14" +version = "1.14.15" description = "Solana RPC Test" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -19,17 +19,17 @@ log = "0.4.17" reqwest = { version = "0.11.11", default-features = false, features = ["blocking", "brotli", "deflate", "gzip", "rustls-tls", "json"] } serde = "1.0.138" serde_json = "1.0.81" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.14" } -solana-client = { path = "../client", version = "=1.14.14" } -solana-rpc = { path = "../rpc", version = "=1.14.14" } -solana-sdk = { path = "../sdk", version = "=1.14.14" } -solana-streamer = { path = "../streamer", version = "=1.14.14" } -solana-test-validator = { path = "../test-validator", version = "=1.14.14" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.14" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.15" } +solana-client = { path = "../client", version = "=1.14.15" } +solana-rpc = { path = "../rpc", version = "=1.14.15" } +solana-sdk = { path = "../sdk", version = "=1.14.15" } +solana-streamer = { path = "../streamer", version = "=1.14.15" } +solana-test-validator = { path = "../test-validator", version = "=1.14.15" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.15" } tokio = { version = "~1.14.1", features = ["full"] } [dev-dependencies] -solana-logger = { path = "../logger", version = "=1.14.14" } +solana-logger = { path = "../logger", version = "=1.14.15" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/rpc/Cargo.toml b/rpc/Cargo.toml index 114ee4c45561fc..ae5f3a4d3ecbeb 100644 --- a/rpc/Cargo.toml +++ b/rpc/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-rpc" -version = "1.14.14" +version = "1.14.15" description = "Solana RPC" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -29,26 +29,26 @@ serde = "1.0.138" serde_derive = "1.0.103" serde_json = "1.0.81" soketto = "0.7" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.14" } -solana-client = { path = "../client", version = "=1.14.14" } -solana-entry = { path = "../entry", version = "=1.14.14" } -solana-faucet = { path = "../faucet", version = "=1.14.14" } -solana-gossip = { path = "../gossip", version = "=1.14.14" } -solana-ledger = { path = "../ledger", version = "=1.14.14" } -solana-measure = { path = "../measure", version = "=1.14.14" } -solana-metrics = { path = "../metrics", version = "=1.14.14" } -solana-perf = { path = "../perf", version = "=1.14.14" } -solana-poh = { path = "../poh", version = "=1.14.14" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.14" } -solana-runtime = { path = "../runtime", version = "=1.14.14" } -solana-sdk = { path = "../sdk", version = "=1.14.14" } -solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.14" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.14" } -solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.14" } -solana-streamer = { path = "../streamer", version = "=1.14.14" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.14" } -solana-version = { path = "../version", version = "=1.14.14" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.14" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.15" } +solana-client = { path = "../client", version = "=1.14.15" } +solana-entry = { path = "../entry", version = "=1.14.15" } +solana-faucet = { path = "../faucet", version = "=1.14.15" } +solana-gossip = { path = "../gossip", version = "=1.14.15" } +solana-ledger = { path = "../ledger", version = "=1.14.15" } +solana-measure = { path = "../measure", version = "=1.14.15" } +solana-metrics = { path = "../metrics", version = "=1.14.15" } +solana-perf = { path = "../perf", version = "=1.14.15" } +solana-poh = { path = "../poh", version = "=1.14.15" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.15" } +solana-runtime = { path = "../runtime", version = "=1.14.15" } +solana-sdk = { path = "../sdk", version = "=1.14.15" } +solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.15" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.15" } +solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.15" } +solana-streamer = { path = "../streamer", version = "=1.14.15" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.15" } +solana-version = { path = "../version", version = "=1.14.15" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.15" } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } spl-token-2022 = { version = "=0.5.0", features = ["no-entrypoint"] } stream-cancel = "0.8.1" @@ -58,9 +58,9 @@ tokio-util = { version = "0.6", features = ["codec", "compat"] } [dev-dependencies] serial_test = "0.8.0" -solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.14" } -solana-net-utils = { path = "../net-utils", version = "=1.14.14" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.14" } +solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.15" } +solana-net-utils = { path = "../net-utils", version = "=1.14.15" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.15" } symlink = "0.1.0" [lib] diff --git a/runtime/Cargo.toml b/runtime/Cargo.toml index e4d42e48acbaa2..7d666bb705b38e 100644 --- a/runtime/Cargo.toml +++ b/runtime/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-runtime" -version = "1.14.14" +version = "1.14.15" description = "Solana runtime" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -40,21 +40,21 @@ rayon = "1.5.3" regex = "1.5.6" serde = { version = "1.0.138", features = ["rc"] } serde_derive = "1.0.103" -solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.14" } -solana-bucket-map = { path = "../bucket_map", version = "=1.14.14" } -solana-compute-budget-program = { path = "../programs/compute-budget", version = "=1.14.14" } -solana-config-program = { path = "../programs/config", version = "=1.14.14" } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.14" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.14" } -solana-measure = { path = "../measure", version = "=1.14.14" } -solana-metrics = { path = "../metrics", version = "=1.14.14" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.14" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.14" } -solana-sdk = { path = "../sdk", version = "=1.14.14" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.14" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.14" } -solana-zk-token-proof-program = { path = "../programs/zk-token-proof", version = "=1.14.14" } -solana-zk-token-sdk = { path = "../zk-token-sdk", version = "=1.14.14" } +solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.15" } +solana-bucket-map = { path = "../bucket_map", version = "=1.14.15" } +solana-compute-budget-program = { path = "../programs/compute-budget", version = "=1.14.15" } +solana-config-program = { path = "../programs/config", version = "=1.14.15" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.15" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.15" } +solana-measure = { path = "../measure", version = "=1.14.15" } +solana-metrics = { path = "../metrics", version = "=1.14.15" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.15" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.15" } +solana-sdk = { path = "../sdk", version = "=1.14.15" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.15" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.15" } +solana-zk-token-proof-program = { path = "../programs/zk-token-proof", version = "=1.14.15" } +solana-zk-token-sdk = { path = "../zk-token-sdk", version = "=1.14.15" } strum = { version = "0.24", features = ["derive"] } strum_macros = "0.24" symlink = "0.1.0" @@ -72,7 +72,7 @@ assert_matches = "1.5.0" ed25519-dalek = "=1.0.1" libsecp256k1 = "0.6.0" rand_chacha = "0.2.2" -solana-logger = { path = "../logger", version = "=1.14.14" } +solana-logger = { path = "../logger", version = "=1.14.15" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/runtime/store-tool/Cargo.toml b/runtime/store-tool/Cargo.toml index 0b3e3d1e245958..1a8d6c344b9dbb 100644 --- a/runtime/store-tool/Cargo.toml +++ b/runtime/store-tool/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-store-tool" description = "Tool to inspect append vecs" -version = "1.14.14" +version = "1.14.15" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -12,9 +12,9 @@ publish = false [dependencies] clap = "2.33.1" log = { version = "0.4.17" } -solana-logger = { path = "../../logger", version = "=1.14.14" } -solana-runtime = { path = "..", version = "=1.14.14" } -solana-version = { path = "../../version", version = "=1.14.14" } +solana-logger = { path = "../../logger", version = "=1.14.15" } +solana-runtime = { path = "..", version = "=1.14.15" } +solana-version = { path = "../../version", version = "=1.14.15" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/sdk/Cargo.toml b/sdk/Cargo.toml index c505634d071f92..21bbbe423c6e46 100644 --- a/sdk/Cargo.toml +++ b/sdk/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-sdk" -version = "1.14.14" +version = "1.14.15" description = "Solana SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -71,11 +71,11 @@ serde_derive = "1.0.103" serde_json = { version = "1.0.81", optional = true } sha2 = "0.10.2" sha3 = { version = "0.10.1", optional = true } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.14" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.14" } -solana-logger = { path = "../logger", version = "=1.14.14", optional = true } -solana-program = { path = "program", version = "=1.14.14" } -solana-sdk-macro = { path = "macro", version = "=1.14.14" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.15" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.15" } +solana-logger = { path = "../logger", version = "=1.14.15", optional = true } +solana-program = { path = "program", version = "=1.14.15" } +solana-sdk-macro = { path = "macro", version = "=1.14.15" } thiserror = "1.0" uriparse = "0.6.4" wasm-bindgen = "0.2" diff --git a/sdk/cargo-build-bpf/Cargo.toml b/sdk/cargo-build-bpf/Cargo.toml index 58481a221321ab..06b41bbaac6e2e 100644 --- a/sdk/cargo-build-bpf/Cargo.toml +++ b/sdk/cargo-build-bpf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-cargo-build-bpf" -version = "1.14.14" +version = "1.14.15" description = "Compile a local package and all of its dependencies using the Solana SBF SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,7 +12,7 @@ publish = false [dependencies] cargo_metadata = "0.15.0" clap = { version = "3.1.5", features = ["cargo", "env"] } -solana-sdk = { path = "..", version = "=1.14.14" } +solana-sdk = { path = "..", version = "=1.14.15" } [features] program = [] diff --git a/sdk/cargo-build-sbf/Cargo.toml b/sdk/cargo-build-sbf/Cargo.toml index ef6ccd766c7e56..d46fcf809f952f 100644 --- a/sdk/cargo-build-sbf/Cargo.toml +++ b/sdk/cargo-build-sbf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-cargo-build-sbf" -version = "1.14.14" +version = "1.14.15" description = "Compile a local package and all of its dependencies using the Solana SBF SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -15,9 +15,9 @@ cargo_metadata = "0.15.0" clap = { version = "3.1.5", features = ["cargo", "env"] } log = { version = "0.4.14", features = ["std"] } regex = "1.5.6" -solana-download-utils = { path = "../../download-utils", version = "=1.14.14" } -solana-logger = { path = "../../logger", version = "=1.14.14" } -solana-sdk = { path = "..", version = "=1.14.14" } +solana-download-utils = { path = "../../download-utils", version = "=1.14.15" } +solana-logger = { path = "../../logger", version = "=1.14.15" } +solana-sdk = { path = "..", version = "=1.14.15" } tar = "0.4.38" [dev-dependencies] diff --git a/sdk/cargo-build-sbf/tests/crates/fail/Cargo.toml b/sdk/cargo-build-sbf/tests/crates/fail/Cargo.toml index 6889d6ecd5e3d0..b4be58369db33c 100644 --- a/sdk/cargo-build-sbf/tests/crates/fail/Cargo.toml +++ b/sdk/cargo-build-sbf/tests/crates/fail/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "fail" -version = "1.14.14" +version = "1.14.15" description = "Solana SBF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ edition = "2021" publish = false [dependencies] -solana-program = { path = "../../../../program", version = "=1.14.14" } +solana-program = { path = "../../../../program", version = "=1.14.15" } [lib] crate-type = ["cdylib"] diff --git a/sdk/cargo-build-sbf/tests/crates/noop/Cargo.toml b/sdk/cargo-build-sbf/tests/crates/noop/Cargo.toml index 1ada76eb6ad9aa..6b2f23663ca4dd 100644 --- a/sdk/cargo-build-sbf/tests/crates/noop/Cargo.toml +++ b/sdk/cargo-build-sbf/tests/crates/noop/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "noop" -version = "1.14.14" +version = "1.14.15" description = "Solana SBF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ edition = "2021" publish = false [dependencies] -solana-program = { path = "../../../../program", version = "=1.14.14" } +solana-program = { path = "../../../../program", version = "=1.14.15" } [lib] crate-type = ["cdylib"] diff --git a/sdk/cargo-test-bpf/Cargo.toml b/sdk/cargo-test-bpf/Cargo.toml index 85ee1cbe2672ff..af293b56a766da 100644 --- a/sdk/cargo-test-bpf/Cargo.toml +++ b/sdk/cargo-test-bpf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-cargo-test-bpf" -version = "1.14.14" +version = "1.14.15" description = "Execute all unit and integration tests after building with the Solana SBF SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/sdk/cargo-test-sbf/Cargo.toml b/sdk/cargo-test-sbf/Cargo.toml index 1f97901585259c..9663a9c6d8d0a1 100644 --- a/sdk/cargo-test-sbf/Cargo.toml +++ b/sdk/cargo-test-sbf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-cargo-test-sbf" -version = "1.14.14" +version = "1.14.15" description = "Execute all unit and integration tests after building with the Solana SBF SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/sdk/gen-headers/Cargo.toml b/sdk/gen-headers/Cargo.toml index 75bd5d675abd4c..9d63aefbff75e5 100644 --- a/sdk/gen-headers/Cargo.toml +++ b/sdk/gen-headers/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "gen-headers" -version = "1.14.14" +version = "1.14.15" edition = "2021" license = "Apache-2.0" publish = false diff --git a/sdk/macro/Cargo.toml b/sdk/macro/Cargo.toml index e3d3ad8267d5a3..9fe26ace18dfad 100644 --- a/sdk/macro/Cargo.toml +++ b/sdk/macro/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-sdk-macro" -version = "1.14.14" +version = "1.14.15" description = "Solana SDK Macro" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/sdk/program/Cargo.toml b/sdk/program/Cargo.toml index e2c6b0d7c8ff48..ea423da7966f35 100644 --- a/sdk/program/Cargo.toml +++ b/sdk/program/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-program" -version = "1.14.14" +version = "1.14.15" description = "Solana Program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -31,9 +31,9 @@ serde_derive = "1.0" serde_json = "1.0" sha2 = "0.10.0" sha3 = "0.10.0" -solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.14" } -solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.14" } -solana-sdk-macro = { path = "../macro", version = "=1.14.14" } +solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.15" } +solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.15" } +solana-sdk-macro = { path = "../macro", version = "=1.14.15" } thiserror = "1.0" [target.'cfg(not(target_os = "solana"))'.dependencies] @@ -50,7 +50,7 @@ wasm-bindgen = "0.2" zeroize = { version = "1.3", default-features = true, features = ["zeroize_derive"] } [target.'cfg(not(target_os = "solana"))'.dev-dependencies] -solana-logger = { path = "../../logger", version = "=1.14.14" } +solana-logger = { path = "../../logger", version = "=1.14.15" } [target.'cfg(target_arch = "wasm32")'.dependencies] console_error_panic_hook = "0.1.7" diff --git a/send-transaction-service/Cargo.toml b/send-transaction-service/Cargo.toml index b18d3df565617e..27a07fde1c3011 100644 --- a/send-transaction-service/Cargo.toml +++ b/send-transaction-service/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-send-transaction-service" -version = "1.14.14" +version = "1.14.15" description = "Solana send transaction service" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,14 +12,14 @@ edition = "2021" [dependencies] crossbeam-channel = "0.5" log = "0.4.17" -solana-client = { path = "../client", version = "=1.14.14" } -solana-measure = { path = "../measure", version = "=1.14.14" } -solana-metrics = { path = "../metrics", version = "=1.14.14" } -solana-runtime = { path = "../runtime", version = "=1.14.14" } -solana-sdk = { path = "../sdk", version = "=1.14.14" } +solana-client = { path = "../client", version = "=1.14.15" } +solana-measure = { path = "../measure", version = "=1.14.15" } +solana-metrics = { path = "../metrics", version = "=1.14.15" } +solana-runtime = { path = "../runtime", version = "=1.14.15" } +solana-sdk = { path = "../sdk", version = "=1.14.15" } [dev-dependencies] -solana-logger = { path = "../logger", version = "=1.14.14" } +solana-logger = { path = "../logger", version = "=1.14.15" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/stake-accounts/Cargo.toml b/stake-accounts/Cargo.toml index 7305fd873c0584..bf1710921a1fd6 100644 --- a/stake-accounts/Cargo.toml +++ b/stake-accounts/Cargo.toml @@ -3,7 +3,7 @@ name = "solana-stake-accounts" description = "Blockchain, Rebuilt for Scale" authors = ["Solana Maintainers "] edition = "2021" -version = "1.14.14" +version = "1.14.15" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -11,15 +11,15 @@ documentation = "https://docs.rs/solana-stake-accounts" [dependencies] clap = "2.33.1" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.14" } -solana-cli-config = { path = "../cli-config", version = "=1.14.14" } -solana-client = { path = "../client", version = "=1.14.14" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.14" } -solana-sdk = { path = "../sdk", version = "=1.14.14" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.14" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.15" } +solana-cli-config = { path = "../cli-config", version = "=1.14.15" } +solana-client = { path = "../client", version = "=1.14.15" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.15" } +solana-sdk = { path = "../sdk", version = "=1.14.15" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.15" } [dev-dependencies] -solana-runtime = { path = "../runtime", version = "=1.14.14" } +solana-runtime = { path = "../runtime", version = "=1.14.15" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/storage-bigtable/Cargo.toml b/storage-bigtable/Cargo.toml index bf757aad3a0816..9ffebe342372ea 100644 --- a/storage-bigtable/Cargo.toml +++ b/storage-bigtable/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-storage-bigtable" -version = "1.14.14" +version = "1.14.15" description = "Solana Storage BigTable" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -27,10 +27,10 @@ prost-types = "0.11.0" serde = "1.0.138" serde_derive = "1.0.103" smpl_jwt = "0.7.1" -solana-metrics = { path = "../metrics", version = "=1.14.14" } -solana-sdk = { path = "../sdk", version = "=1.14.14" } -solana-storage-proto = { path = "../storage-proto", version = "=1.14.14" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.14" } +solana-metrics = { path = "../metrics", version = "=1.14.15" } +solana-sdk = { path = "../sdk", version = "=1.14.15" } +solana-storage-proto = { path = "../storage-proto", version = "=1.14.15" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.15" } thiserror = "1.0" tokio = "1" tonic = { version = "0.8.0", features = ["tls", "transport"] } diff --git a/storage-bigtable/build-proto/Cargo.lock b/storage-bigtable/build-proto/Cargo.lock index 90dd6ea600ce57..f3d4b73c54cd51 100644 --- a/storage-bigtable/build-proto/Cargo.lock +++ b/storage-bigtable/build-proto/Cargo.lock @@ -219,7 +219,7 @@ dependencies = [ [[package]] name = "proto" -version = "1.14.14" +version = "1.14.15" dependencies = [ "protobuf-src", "tonic-build", diff --git a/storage-bigtable/build-proto/Cargo.toml b/storage-bigtable/build-proto/Cargo.toml index 8e4d4dfb7b107b..0cdc7c187b7413 100644 --- a/storage-bigtable/build-proto/Cargo.toml +++ b/storage-bigtable/build-proto/Cargo.toml @@ -7,7 +7,7 @@ license = "Apache-2.0" name = "proto" publish = false repository = "https://github.com/solana-labs/solana" -version = "1.14.14" +version = "1.14.15" [workspace] diff --git a/storage-proto/Cargo.toml b/storage-proto/Cargo.toml index 4eec7121cee02e..1362f6b22e16e4 100644 --- a/storage-proto/Cargo.toml +++ b/storage-proto/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-storage-proto" -version = "1.14.14" +version = "1.14.15" description = "Solana Storage Protobuf Definitions" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,9 +14,9 @@ bincode = "1.3.3" bs58 = "0.4.0" prost = "0.11.0" serde = "1.0.138" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.14" } -solana-sdk = { path = "../sdk", version = "=1.14.14" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.14" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.15" } +solana-sdk = { path = "../sdk", version = "=1.14.15" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.15" } [dev-dependencies] enum-iterator = "0.8.1" diff --git a/streamer/Cargo.toml b/streamer/Cargo.toml index d04e6396eaa6ff..0dea6f40a23328 100644 --- a/streamer/Cargo.toml +++ b/streamer/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-streamer" -version = "1.14.14" +version = "1.14.15" description = "Solana Streamer" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -25,15 +25,15 @@ quinn = "0.8.3" rand = "0.7.0" rcgen = "0.9.2" rustls = { version = "0.20.6", features = ["dangerous_configuration"] } -solana-metrics = { path = "../metrics", version = "=1.14.14" } -solana-perf = { path = "../perf", version = "=1.14.14" } -solana-sdk = { path = "../sdk", version = "=1.14.14" } +solana-metrics = { path = "../metrics", version = "=1.14.15" } +solana-perf = { path = "../perf", version = "=1.14.15" } +solana-sdk = { path = "../sdk", version = "=1.14.15" } thiserror = "1.0" tokio = { version = "1", features = ["full"] } x509-parser = "0.14.0" [dev-dependencies] -solana-logger = { path = "../logger", version = "=1.14.14" } +solana-logger = { path = "../logger", version = "=1.14.15" } [lib] crate-type = ["lib"] diff --git a/sys-tuner/Cargo.toml b/sys-tuner/Cargo.toml index 29a9452f074933..867307e696af34 100644 --- a/sys-tuner/Cargo.toml +++ b/sys-tuner/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-sys-tuner" description = "The solana cluster system tuner daemon" -version = "1.14.14" +version = "1.14.15" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,8 +14,8 @@ publish = true clap = "2.33.1" libc = "0.2.126" log = "0.4.17" -solana-logger = { path = "../logger", version = "=1.14.14" } -solana-version = { path = "../version", version = "=1.14.14" } +solana-logger = { path = "../logger", version = "=1.14.15" } +solana-version = { path = "../version", version = "=1.14.15" } [target."cfg(unix)".dependencies] unix_socket2 = "0.5.4" diff --git a/test-validator/Cargo.toml b/test-validator/Cargo.toml index d4982fa0648d48..422c5e2076d925 100644 --- a/test-validator/Cargo.toml +++ b/test-validator/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "solana-test-validator" description = "Blockchain, Rebuilt for Scale" -version = "1.14.14" +version = "1.14.15" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-test-validator" readme = "../README.md" @@ -15,19 +15,19 @@ base64 = "0.13.0" log = "0.4.17" serde_derive = "1.0.103" serde_json = "1.0.81" -solana-cli-output = { path = "../cli-output", version = "=1.14.14" } -solana-client = { path = "../client", version = "=1.14.14" } -solana-core = { path = "../core", version = "=1.14.14" } -solana-gossip = { path = "../gossip", version = "=1.14.14" } -solana-ledger = { path = "../ledger", version = "=1.14.14" } -solana-logger = { path = "../logger", version = "=1.14.14" } -solana-net-utils = { path = "../net-utils", version = "=1.14.14" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.14" } -solana-program-test = { path = "../program-test", version = "=1.14.14" } -solana-rpc = { path = "../rpc", version = "=1.14.14" } -solana-runtime = { path = "../runtime", version = "=1.14.14" } -solana-sdk = { path = "../sdk", version = "=1.14.14" } -solana-streamer = { path = "../streamer", version = "=1.14.14" } +solana-cli-output = { path = "../cli-output", version = "=1.14.15" } +solana-client = { path = "../client", version = "=1.14.15" } +solana-core = { path = "../core", version = "=1.14.15" } +solana-gossip = { path = "../gossip", version = "=1.14.15" } +solana-ledger = { path = "../ledger", version = "=1.14.15" } +solana-logger = { path = "../logger", version = "=1.14.15" } +solana-net-utils = { path = "../net-utils", version = "=1.14.15" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.15" } +solana-program-test = { path = "../program-test", version = "=1.14.15" } +solana-rpc = { path = "../rpc", version = "=1.14.15" } +solana-runtime = { path = "../runtime", version = "=1.14.15" } +solana-sdk = { path = "../sdk", version = "=1.14.15" } +solana-streamer = { path = "../streamer", version = "=1.14.15" } tokio = { version = "1", features = ["full"] } [package.metadata.docs.rs] diff --git a/tokens/Cargo.toml b/tokens/Cargo.toml index c7e3bd6d385ddd..e0f87e911de9b8 100644 --- a/tokens/Cargo.toml +++ b/tokens/Cargo.toml @@ -3,7 +3,7 @@ name = "solana-tokens" description = "Blockchain, Rebuilt for Scale" authors = ["Solana Maintainers "] edition = "2021" -version = "1.14.14" +version = "1.14.15" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -19,14 +19,14 @@ indexmap = "1.9.1" indicatif = "0.16.2" pickledb = "0.4.1" serde = { version = "1.0", features = ["derive"] } -solana-account-decoder = { path = "../account-decoder", version = "=1.14.14" } -solana-clap-utils = { path = "../clap-utils", version = "=1.14.14" } -solana-cli-config = { path = "../cli-config", version = "=1.14.14" } -solana-client = { path = "../client", version = "=1.14.14" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.14" } -solana-sdk = { path = "../sdk", version = "=1.14.14" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.14" } -solana-version = { path = "../version", version = "=1.14.14" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.15" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.15" } +solana-cli-config = { path = "../cli-config", version = "=1.14.15" } +solana-client = { path = "../client", version = "=1.14.15" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.15" } +solana-sdk = { path = "../sdk", version = "=1.14.15" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.15" } +solana-version = { path = "../version", version = "=1.14.15" } spl-associated-token-account = { version = "=1.1.2" } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } tempfile = "3.3.0" @@ -34,6 +34,6 @@ thiserror = "1.0" [dev-dependencies] bincode = "1.3.3" -solana-logger = { path = "../logger", version = "=1.14.14" } -solana-streamer = { path = "../streamer", version = "=1.14.14" } -solana-test-validator = { path = "../test-validator", version = "=1.14.14" } +solana-logger = { path = "../logger", version = "=1.14.15" } +solana-streamer = { path = "../streamer", version = "=1.14.15" } +solana-test-validator = { path = "../test-validator", version = "=1.14.15" } diff --git a/transaction-dos/Cargo.toml b/transaction-dos/Cargo.toml index e72f6516a301c9..d1101dedc69222 100644 --- a/transaction-dos/Cargo.toml +++ b/transaction-dos/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-transaction-dos" -version = "1.14.14" +version = "1.14.15" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,23 +14,23 @@ clap = "2.33.1" log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.14" } -solana-cli = { path = "../cli", version = "=1.14.14" } -solana-client = { path = "../client", version = "=1.14.14" } -solana-core = { path = "../core", version = "=1.14.14" } -solana-faucet = { path = "../faucet", version = "=1.14.14" } -solana-gossip = { path = "../gossip", version = "=1.14.14" } -solana-logger = { path = "../logger", version = "=1.14.14" } -solana-measure = { path = "../measure", version = "=1.14.14" } -solana-net-utils = { path = "../net-utils", version = "=1.14.14" } -solana-runtime = { path = "../runtime", version = "=1.14.14" } -solana-sdk = { path = "../sdk", version = "=1.14.14" } -solana-streamer = { path = "../streamer", version = "=1.14.14" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.14" } -solana-version = { path = "../version", version = "=1.14.14" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.15" } +solana-cli = { path = "../cli", version = "=1.14.15" } +solana-client = { path = "../client", version = "=1.14.15" } +solana-core = { path = "../core", version = "=1.14.15" } +solana-faucet = { path = "../faucet", version = "=1.14.15" } +solana-gossip = { path = "../gossip", version = "=1.14.15" } +solana-logger = { path = "../logger", version = "=1.14.15" } +solana-measure = { path = "../measure", version = "=1.14.15" } +solana-net-utils = { path = "../net-utils", version = "=1.14.15" } +solana-runtime = { path = "../runtime", version = "=1.14.15" } +solana-sdk = { path = "../sdk", version = "=1.14.15" } +solana-streamer = { path = "../streamer", version = "=1.14.15" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.15" } +solana-version = { path = "../version", version = "=1.14.15" } [dev-dependencies] -solana-local-cluster = { path = "../local-cluster", version = "=1.14.14" } +solana-local-cluster = { path = "../local-cluster", version = "=1.14.15" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/transaction-status/Cargo.toml b/transaction-status/Cargo.toml index 6f0d59ae931520..6d00d0593e252a 100644 --- a/transaction-status/Cargo.toml +++ b/transaction-status/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-transaction-status" -version = "1.14.14" +version = "1.14.15" description = "Solana transaction status types" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -20,12 +20,12 @@ log = "0.4.17" serde = "1.0.138" serde_derive = "1.0.103" serde_json = "1.0.81" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.14" } -solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.14" } -solana-measure = { path = "../measure", version = "=1.14.14" } -solana-metrics = { path = "../metrics", version = "=1.14.14" } -solana-sdk = { path = "../sdk", version = "=1.14.14" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.14" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.15" } +solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.15" } +solana-measure = { path = "../measure", version = "=1.14.15" } +solana-metrics = { path = "../metrics", version = "=1.14.15" } +solana-sdk = { path = "../sdk", version = "=1.14.15" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.15" } spl-associated-token-account = { version = "=1.1.2", features = ["no-entrypoint"] } spl-memo = { version = "=3.0.1", features = ["no-entrypoint"] } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } diff --git a/upload-perf/Cargo.toml b/upload-perf/Cargo.toml index b2215a68d0cece..3798d81088f3ce 100644 --- a/upload-perf/Cargo.toml +++ b/upload-perf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-upload-perf" -version = "1.14.14" +version = "1.14.15" description = "Metrics Upload Utility" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -11,7 +11,7 @@ publish = false [dependencies] serde_json = "1.0.81" -solana-metrics = { path = "../metrics", version = "=1.14.14" } +solana-metrics = { path = "../metrics", version = "=1.14.15" } [[bin]] name = "solana-upload-perf" diff --git a/validator/Cargo.toml b/validator/Cargo.toml index 0ff99cd36f927f..84ca5f07450b53 100644 --- a/validator/Cargo.toml +++ b/validator/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-validator" description = "Blockchain, Rebuilt for Scale" -version = "1.14.14" +version = "1.14.15" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -28,30 +28,30 @@ num_cpus = "1.13.1" rand = "0.7.0" serde = "1.0.138" serde_json = "1.0.81" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.14" } -solana-cli-config = { path = "../cli-config", version = "=1.14.14" } -solana-client = { path = "../client", version = "=1.14.14" } -solana-core = { path = "../core", version = "=1.14.14" } -solana-download-utils = { path = "../download-utils", version = "=1.14.14" } -solana-entry = { path = "../entry", version = "=1.14.14" } -solana-faucet = { path = "../faucet", version = "=1.14.14" } -solana-genesis-utils = { path = "../genesis-utils", version = "=1.14.14" } -solana-gossip = { path = "../gossip", version = "=1.14.14" } -solana-ledger = { path = "../ledger", version = "=1.14.14" } -solana-logger = { path = "../logger", version = "=1.14.14" } -solana-metrics = { path = "../metrics", version = "=1.14.14" } -solana-net-utils = { path = "../net-utils", version = "=1.14.14" } -solana-perf = { path = "../perf", version = "=1.14.14" } -solana-poh = { path = "../poh", version = "=1.14.14" } -solana-rpc = { path = "../rpc", version = "=1.14.14" } -solana-runtime = { path = "../runtime", version = "=1.14.14" } -solana-sdk = { path = "../sdk", version = "=1.14.14" } -solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.14" } -solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.14" } -solana-streamer = { path = "../streamer", version = "=1.14.14" } -solana-test-validator = { path = "../test-validator", version = "=1.14.14" } -solana-version = { path = "../version", version = "=1.14.14" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.14" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.15" } +solana-cli-config = { path = "../cli-config", version = "=1.14.15" } +solana-client = { path = "../client", version = "=1.14.15" } +solana-core = { path = "../core", version = "=1.14.15" } +solana-download-utils = { path = "../download-utils", version = "=1.14.15" } +solana-entry = { path = "../entry", version = "=1.14.15" } +solana-faucet = { path = "../faucet", version = "=1.14.15" } +solana-genesis-utils = { path = "../genesis-utils", version = "=1.14.15" } +solana-gossip = { path = "../gossip", version = "=1.14.15" } +solana-ledger = { path = "../ledger", version = "=1.14.15" } +solana-logger = { path = "../logger", version = "=1.14.15" } +solana-metrics = { path = "../metrics", version = "=1.14.15" } +solana-net-utils = { path = "../net-utils", version = "=1.14.15" } +solana-perf = { path = "../perf", version = "=1.14.15" } +solana-poh = { path = "../poh", version = "=1.14.15" } +solana-rpc = { path = "../rpc", version = "=1.14.15" } +solana-runtime = { path = "../runtime", version = "=1.14.15" } +solana-sdk = { path = "../sdk", version = "=1.14.15" } +solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.15" } +solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.15" } +solana-streamer = { path = "../streamer", version = "=1.14.15" } +solana-test-validator = { path = "../test-validator", version = "=1.14.15" } +solana-version = { path = "../version", version = "=1.14.15" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.15" } symlink = "0.1.0" [target.'cfg(not(target_env = "msvc"))'.dependencies] diff --git a/version/Cargo.toml b/version/Cargo.toml index 70d5d0339454ac..f2ea1412b71c78 100644 --- a/version/Cargo.toml +++ b/version/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-version" -version = "1.14.14" +version = "1.14.15" description = "Solana Version" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,9 +14,9 @@ log = "0.4.17" semver = "1.0.10" serde = "1.0.138" serde_derive = "1.0.103" -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.14" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.14" } -solana-sdk = { path = "../sdk", version = "=1.14.14" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.15" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.15" } +solana-sdk = { path = "../sdk", version = "=1.14.15" } [lib] name = "solana_version" diff --git a/watchtower/Cargo.toml b/watchtower/Cargo.toml index 473ce49d0ad10d..607fdc5c2a11c9 100644 --- a/watchtower/Cargo.toml +++ b/watchtower/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-watchtower" description = "Blockchain, Rebuilt for Scale" -version = "1.14.14" +version = "1.14.15" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -13,15 +13,15 @@ documentation = "https://docs.rs/solana-watchtower" clap = "2.33.1" humantime = "2.0.1" log = "0.4.17" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.14" } -solana-cli-config = { path = "../cli-config", version = "=1.14.14" } -solana-cli-output = { path = "../cli-output", version = "=1.14.14" } -solana-client = { path = "../client", version = "=1.14.14" } -solana-logger = { path = "../logger", version = "=1.14.14" } -solana-metrics = { path = "../metrics", version = "=1.14.14" } -solana-notifier = { path = "../notifier", version = "=1.14.14" } -solana-sdk = { path = "../sdk", version = "=1.14.14" } -solana-version = { path = "../version", version = "=1.14.14" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.15" } +solana-cli-config = { path = "../cli-config", version = "=1.14.15" } +solana-cli-output = { path = "../cli-output", version = "=1.14.15" } +solana-client = { path = "../client", version = "=1.14.15" } +solana-logger = { path = "../logger", version = "=1.14.15" } +solana-metrics = { path = "../metrics", version = "=1.14.15" } +solana-notifier = { path = "../notifier", version = "=1.14.15" } +solana-sdk = { path = "../sdk", version = "=1.14.15" } +solana-version = { path = "../version", version = "=1.14.15" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/zk-token-sdk/Cargo.toml b/zk-token-sdk/Cargo.toml index ab6ec219d11aad..9d8d396f580df0 100644 --- a/zk-token-sdk/Cargo.toml +++ b/zk-token-sdk/Cargo.toml @@ -3,7 +3,7 @@ name = "solana-zk-token-sdk" description = "Solana Zk Token SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" -version = "1.14.14" +version = "1.14.15" license = "Apache-2.0" edition = "2021" @@ -12,7 +12,7 @@ base64 = "0.13" bytemuck = { version = "1.11.0", features = ["derive"] } num-derive = "0.3" num-traits = "0.2" -solana-program = { path = "../sdk/program", version = "=1.14.14" } +solana-program = { path = "../sdk/program", version = "=1.14.15" } [target.'cfg(not(target_os = "solana"))'.dependencies] aes-gcm-siv = "0.10.3" @@ -29,7 +29,7 @@ rand = "0.7" serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" sha3 = "0.9" -solana-sdk = { path = "../sdk", version = "=1.14.14" } +solana-sdk = { path = "../sdk", version = "=1.14.15" } subtle = "2" thiserror = "1.0" zeroize = { version = "1.3", default-features = false, features = ["zeroize_derive"] } From 7ec2584548dcc5a5e2f3c1988d691e95fa826ce1 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Tue, 7 Feb 2023 16:21:32 -0700 Subject: [PATCH 325/465] v1.14: ci: update openssl-src to 111.25 as per RUSTSEC-2023-0007 (backport of #30173) (#30178) Co-authored-by: Trent Nelson --- Cargo.lock | 4 ++-- programs/bpf/Cargo.lock | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index c3e8e1aaedf60e..e9ffbefe40002f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2938,9 +2938,9 @@ checksum = "28988d872ab76095a6e6ac88d99b54fd267702734fd7ffe610ca27f533ddb95a" [[package]] name = "openssl-src" -version = "111.22.0+1.1.1q" +version = "111.25.0+1.1.1t" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f31f0d509d1c1ae9cada2f9539ff8f37933831fd5098879e482aa687d659853" +checksum = "3173cd3626c43e3854b1b727422a276e568d9ec5fe8cec197822cf52cfb743d6" dependencies = [ "cc", ] diff --git a/programs/bpf/Cargo.lock b/programs/bpf/Cargo.lock index ec3c335e3a1adf..6e9505c7921763 100644 --- a/programs/bpf/Cargo.lock +++ b/programs/bpf/Cargo.lock @@ -2741,9 +2741,9 @@ checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" [[package]] name = "openssl-src" -version = "111.22.0+1.1.1q" +version = "111.25.0+1.1.1t" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f31f0d509d1c1ae9cada2f9539ff8f37933831fd5098879e482aa687d659853" +checksum = "3173cd3626c43e3854b1b727422a276e568d9ec5fe8cec197822cf52cfb743d6" dependencies = [ "cc", ] From 15e35fd3feb0792b5f1be9d3fe0f5f8dbb32cd27 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Tue, 7 Feb 2023 23:32:10 -0700 Subject: [PATCH 326/465] v1.14: chore: bump pickledb from 0.4.1 to 0.5.1 (backport of #25511) (#30185) Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Tyera Eulberg --- Cargo.lock | 23 ++--------------------- tokens/Cargo.toml | 2 +- 2 files changed, 3 insertions(+), 22 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index e9ffbefe40002f..a9703fb75451bd 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1825,12 +1825,6 @@ dependencies = [ "tracing", ] -[[package]] -name = "half" -version = "1.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eabb4a44450da02c90444cf74558da904edde8fb4e9035a9a6a4e15445af0bd7" - [[package]] name = "hash32" version = "0.2.1" @@ -3182,14 +3176,11 @@ dependencies = [ [[package]] name = "pickledb" -version = "0.4.1" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9161694d67f6c5163519d42be942ae36bbdb55f439460144f105bc4f9f7d1d61" +checksum = "c53a5ade47760e8cc4986bdc5e72daeffaaaee64cbc374f9cfe0a00c1cd87b1f" dependencies = [ - "bincode", "serde", - "serde_cbor", - "serde_json", "serde_yaml", ] @@ -4192,16 +4183,6 @@ dependencies = [ "serde", ] -[[package]] -name = "serde_cbor" -version = "0.11.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2bef2ebfde456fb76bbcf9f59315333decc4fda0b2b44b420243c11e0f5ec1f5" -dependencies = [ - "half", - "serde", -] - [[package]] name = "serde_derive" version = "1.0.138" diff --git a/tokens/Cargo.toml b/tokens/Cargo.toml index e0f87e911de9b8..5fa5072bda9aa3 100644 --- a/tokens/Cargo.toml +++ b/tokens/Cargo.toml @@ -17,7 +17,7 @@ csv = "1.1.6" ctrlc = { version = "3.2.2", features = ["termination"] } indexmap = "1.9.1" indicatif = "0.16.2" -pickledb = "0.4.1" +pickledb = { version = "0.5.1", default-features = false, features = ["yaml"] } serde = { version = "1.0", features = ["derive"] } solana-account-decoder = { path = "../account-decoder", version = "=1.14.15" } solana-clap-utils = { path = "../clap-utils", version = "=1.14.15" } From 48aa6342d892845a0e007758f0740f4a95a7ac80 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Wed, 8 Feb 2023 08:28:56 -0800 Subject: [PATCH 327/465] v1.14: Fix camelCase response for RpcPrioritizationFee (backport of #30162) (#30174) Co-authored-by: Athar Mohammad <56029409+atharmohammad@users.noreply.github.com> --- client/src/rpc_response.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/client/src/rpc_response.rs b/client/src/rpc_response.rs index dbbf810ea14161..557ec2891c0f8e 100644 --- a/client/src/rpc_response.rs +++ b/client/src/rpc_response.rs @@ -543,6 +543,7 @@ pub struct RpcSnapshotSlotInfo { } #[derive(Serialize, Deserialize, Clone, Copy, Debug, PartialEq, Eq)] +#[serde(rename_all = "camelCase")] pub struct RpcPrioritizationFee { pub slot: Slot, pub prioritization_fee: u64, From 60f29903f2126231806b15cdd60494d8b84bbf69 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 13 Feb 2023 12:16:53 -0700 Subject: [PATCH 328/465] Bump Version to 1.14.16 (#30194) Co-authored-by: willhickey --- Cargo.lock | 484 ++++++++--------- account-decoder/Cargo.toml | 10 +- accounts-bench/Cargo.toml | 12 +- accounts-cluster-bench/Cargo.toml | 34 +- banking-bench/Cargo.toml | 26 +- banks-client/Cargo.toml | 12 +- banks-interface/Cargo.toml | 4 +- banks-server/Cargo.toml | 12 +- bench-streamer/Cargo.toml | 8 +- bench-tps/Cargo.toml | 38 +- bloom/Cargo.toml | 8 +- bucket_map/Cargo.toml | 8 +- clap-utils/Cargo.toml | 8 +- clap-v3-utils/Cargo.toml | 8 +- cli-config/Cargo.toml | 6 +- cli-output/Cargo.toml | 16 +- cli/Cargo.toml | 38 +- client-test/Cargo.toml | 32 +- client/Cargo.toml | 28 +- core/Cargo.toml | 56 +- dos/Cargo.toml | 30 +- download-utils/Cargo.toml | 6 +- entry/Cargo.toml | 16 +- faucet/Cargo.toml | 14 +- frozen-abi/Cargo.toml | 6 +- frozen-abi/macro/Cargo.toml | 2 +- genesis-utils/Cargo.toml | 8 +- genesis/Cargo.toml | 22 +- geyser-plugin-interface/Cargo.toml | 6 +- geyser-plugin-manager/Cargo.toml | 16 +- gossip/Cargo.toml | 38 +- install/Cargo.toml | 14 +- keygen/Cargo.toml | 12 +- ledger-tool/Cargo.toml | 30 +- ledger/Cargo.toml | 40 +- local-cluster/Cargo.toml | 28 +- log-analyzer/Cargo.toml | 6 +- logger/Cargo.toml | 2 +- measure/Cargo.toml | 4 +- merkle-root-bench/Cargo.toml | 12 +- merkle-tree/Cargo.toml | 4 +- metrics/Cargo.toml | 4 +- net-shaper/Cargo.toml | 4 +- net-utils/Cargo.toml | 8 +- notifier/Cargo.toml | 2 +- perf/Cargo.toml | 12 +- poh-bench/Cargo.toml | 14 +- poh/Cargo.toml | 20 +- program-runtime/Cargo.toml | 14 +- program-test/Cargo.toml | 20 +- .../address-lookup-table-tests/Cargo.toml | 8 +- programs/address-lookup-table/Cargo.toml | 12 +- programs/bpf-loader-tests/Cargo.toml | 8 +- programs/bpf/Cargo.lock | 490 +++++++++--------- programs/bpf/Cargo.toml | 28 +- programs/bpf/rust/128bit/Cargo.toml | 6 +- programs/bpf/rust/128bit_dep/Cargo.toml | 4 +- programs/bpf/rust/alloc/Cargo.toml | 4 +- programs/bpf/rust/call_depth/Cargo.toml | 4 +- programs/bpf/rust/caller_access/Cargo.toml | 4 +- programs/bpf/rust/curve25519/Cargo.toml | 6 +- programs/bpf/rust/custom_heap/Cargo.toml | 4 +- programs/bpf/rust/dep_crate/Cargo.toml | 6 +- .../bpf/rust/deprecated_loader/Cargo.toml | 4 +- programs/bpf/rust/dup_accounts/Cargo.toml | 4 +- programs/bpf/rust/error_handling/Cargo.toml | 4 +- programs/bpf/rust/external_spend/Cargo.toml | 4 +- programs/bpf/rust/finalize/Cargo.toml | 4 +- .../rust/get_minimum_delegation/Cargo.toml | 4 +- .../Cargo.toml | 4 +- .../rust/instruction_introspection/Cargo.toml | 4 +- programs/bpf/rust/invoke/Cargo.toml | 4 +- programs/bpf/rust/invoke_and_error/Cargo.toml | 4 +- programs/bpf/rust/invoke_and_ok/Cargo.toml | 4 +- .../bpf/rust/invoke_and_return/Cargo.toml | 4 +- programs/bpf/rust/invoked/Cargo.toml | 4 +- programs/bpf/rust/iter/Cargo.toml | 4 +- programs/bpf/rust/log_data/Cargo.toml | 4 +- programs/bpf/rust/many_args/Cargo.toml | 6 +- programs/bpf/rust/many_args_dep/Cargo.toml | 4 +- programs/bpf/rust/mem/Cargo.toml | 10 +- programs/bpf/rust/membuiltins/Cargo.toml | 6 +- programs/bpf/rust/noop/Cargo.toml | 4 +- programs/bpf/rust/panic/Cargo.toml | 4 +- programs/bpf/rust/param_passing/Cargo.toml | 6 +- .../bpf/rust/param_passing_dep/Cargo.toml | 4 +- programs/bpf/rust/rand/Cargo.toml | 4 +- programs/bpf/rust/realloc/Cargo.toml | 4 +- programs/bpf/rust/realloc_invoke/Cargo.toml | 6 +- .../bpf/rust/ro_account_modify/Cargo.toml | 4 +- programs/bpf/rust/ro_modify/Cargo.toml | 4 +- programs/bpf/rust/sanity/Cargo.toml | 10 +- .../bpf/rust/secp256k1_recover/Cargo.toml | 4 +- programs/bpf/rust/sha/Cargo.toml | 4 +- .../rust/sibling_inner_instruction/Cargo.toml | 4 +- .../bpf/rust/sibling_instruction/Cargo.toml | 4 +- programs/bpf/rust/simulation/Cargo.toml | 12 +- programs/bpf/rust/spoof1/Cargo.toml | 4 +- programs/bpf/rust/spoof1_system/Cargo.toml | 4 +- programs/bpf/rust/sysvar/Cargo.toml | 10 +- programs/bpf/rust/upgradeable/Cargo.toml | 4 +- programs/bpf/rust/upgraded/Cargo.toml | 4 +- programs/bpf_loader/Cargo.toml | 14 +- .../bpf_loader/gen-syscall-list/Cargo.toml | 2 +- programs/compute-budget/Cargo.toml | 6 +- programs/config/Cargo.toml | 8 +- programs/ed25519-tests/Cargo.toml | 6 +- programs/stake/Cargo.toml | 18 +- programs/vote/Cargo.toml | 14 +- programs/zk-token-proof/Cargo.toml | 8 +- rayon-threadlimit/Cargo.toml | 2 +- rbpf-cli/Cargo.toml | 10 +- remote-wallet/Cargo.toml | 4 +- rpc-test/Cargo.toml | 18 +- rpc/Cargo.toml | 48 +- runtime/Cargo.toml | 34 +- runtime/store-tool/Cargo.toml | 8 +- sdk/Cargo.toml | 12 +- sdk/cargo-build-bpf/Cargo.toml | 4 +- sdk/cargo-build-sbf/Cargo.toml | 8 +- .../tests/crates/fail/Cargo.toml | 4 +- .../tests/crates/noop/Cargo.toml | 4 +- sdk/cargo-test-bpf/Cargo.toml | 2 +- sdk/cargo-test-sbf/Cargo.toml | 2 +- sdk/gen-headers/Cargo.toml | 2 +- sdk/macro/Cargo.toml | 2 +- sdk/program/Cargo.toml | 10 +- send-transaction-service/Cargo.toml | 14 +- stake-accounts/Cargo.toml | 16 +- storage-bigtable/Cargo.toml | 10 +- storage-bigtable/build-proto/Cargo.lock | 2 +- storage-bigtable/build-proto/Cargo.toml | 2 +- storage-proto/Cargo.toml | 8 +- streamer/Cargo.toml | 10 +- sys-tuner/Cargo.toml | 6 +- test-validator/Cargo.toml | 28 +- tokens/Cargo.toml | 24 +- transaction-dos/Cargo.toml | 32 +- transaction-status/Cargo.toml | 14 +- upload-perf/Cargo.toml | 4 +- validator/Cargo.toml | 50 +- version/Cargo.toml | 8 +- watchtower/Cargo.toml | 20 +- zk-token-sdk/Cargo.toml | 6 +- 144 files changed, 1270 insertions(+), 1270 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index a9703fb75451bd..4c51b59e52a964 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1688,7 +1688,7 @@ dependencies = [ [[package]] name = "gen-headers" -version = "1.14.15" +version = "1.14.16" dependencies = [ "log", "regex", @@ -1696,7 +1696,7 @@ dependencies = [ [[package]] name = "gen-syscall-list" -version = "1.14.15" +version = "1.14.16" dependencies = [ "regex", ] @@ -3738,15 +3738,15 @@ dependencies = [ [[package]] name = "rbpf-cli" -version = "1.14.15" +version = "1.14.16" dependencies = [ "clap 3.1.8", "serde", "serde_json", "solana-bpf-loader-program", - "solana-logger 1.14.15", + "solana-logger 1.14.16", "solana-program-runtime", - "solana-sdk 1.14.15", + "solana-sdk 1.14.16", "solana_rbpf", ] @@ -4448,7 +4448,7 @@ dependencies = [ [[package]] name = "solana-account-decoder" -version = "1.14.15" +version = "1.14.16" dependencies = [ "Inflector", "base64 0.13.0", @@ -4461,7 +4461,7 @@ dependencies = [ "serde_json", "solana-address-lookup-table-program", "solana-config-program", - "solana-sdk 1.14.15", + "solana-sdk 1.14.16", "solana-vote-program", "spl-token", "spl-token-2022", @@ -4471,21 +4471,21 @@ dependencies = [ [[package]] name = "solana-accounts-bench" -version = "1.14.15" +version = "1.14.16" dependencies = [ "clap 2.33.3", "log", "rayon", - "solana-logger 1.14.15", + "solana-logger 1.14.16", "solana-measure", "solana-runtime", - "solana-sdk 1.14.15", + "solana-sdk 1.14.16", "solana-version", ] [[package]] name = "solana-accounts-cluster-bench" -version = "1.14.15" +version = "1.14.16" dependencies = [ "clap 2.33.3", "log", @@ -4498,11 +4498,11 @@ dependencies = [ "solana-faucet", "solana-gossip", "solana-local-cluster", - "solana-logger 1.14.15", + "solana-logger 1.14.16", "solana-measure", "solana-net-utils", "solana-runtime", - "solana-sdk 1.14.15", + "solana-sdk 1.14.16", "solana-streamer", "solana-test-validator", "solana-transaction-status", @@ -4512,7 +4512,7 @@ dependencies = [ [[package]] name = "solana-address-lookup-table-program" -version = "1.14.15" +version = "1.14.16" dependencies = [ "bincode", "bytemuck", @@ -4521,28 +4521,28 @@ dependencies = [ "num-traits", "rustc_version 0.4.0", "serde", - "solana-frozen-abi 1.14.15", - "solana-frozen-abi-macro 1.14.15", - "solana-program 1.14.15", + "solana-frozen-abi 1.14.16", + "solana-frozen-abi-macro 1.14.16", + "solana-program 1.14.16", "solana-program-runtime", - "solana-sdk 1.14.15", + "solana-sdk 1.14.16", "thiserror", ] [[package]] name = "solana-address-lookup-table-program-tests" -version = "1.14.15" +version = "1.14.16" dependencies = [ "assert_matches", "bincode", "solana-address-lookup-table-program", "solana-program-test", - "solana-sdk 1.14.15", + "solana-sdk 1.14.16", ] [[package]] name = "solana-banking-bench" -version = "1.14.15" +version = "1.14.16" dependencies = [ "clap 3.1.8", "crossbeam-channel", @@ -4553,27 +4553,27 @@ dependencies = [ "solana-core", "solana-gossip", "solana-ledger", - "solana-logger 1.14.15", + "solana-logger 1.14.16", "solana-measure", "solana-perf", "solana-poh", "solana-runtime", - "solana-sdk 1.14.15", + "solana-sdk 1.14.16", "solana-streamer", "solana-version", ] [[package]] name = "solana-banks-client" -version = "1.14.15" +version = "1.14.16" dependencies = [ "borsh", "futures 0.3.21", "solana-banks-interface", "solana-banks-server", - "solana-program 1.14.15", + "solana-program 1.14.16", "solana-runtime", - "solana-sdk 1.14.15", + "solana-sdk 1.14.16", "tarpc", "thiserror", "tokio", @@ -4582,16 +4582,16 @@ dependencies = [ [[package]] name = "solana-banks-interface" -version = "1.14.15" +version = "1.14.16" dependencies = [ "serde", - "solana-sdk 1.14.15", + "solana-sdk 1.14.16", "tarpc", ] [[package]] name = "solana-banks-server" -version = "1.14.15" +version = "1.14.16" dependencies = [ "bincode", "crossbeam-channel", @@ -4599,7 +4599,7 @@ dependencies = [ "solana-banks-interface", "solana-client", "solana-runtime", - "solana-sdk 1.14.15", + "solana-sdk 1.14.16", "solana-send-transaction-service", "tarpc", "tokio", @@ -4609,7 +4609,7 @@ dependencies = [ [[package]] name = "solana-bench-streamer" -version = "1.14.15" +version = "1.14.16" dependencies = [ "clap 3.1.8", "crossbeam-channel", @@ -4620,7 +4620,7 @@ dependencies = [ [[package]] name = "solana-bench-tps" -version = "1.14.15" +version = "1.14.16" dependencies = [ "clap 2.33.3", "crossbeam-channel", @@ -4637,13 +4637,13 @@ dependencies = [ "solana-genesis", "solana-gossip", "solana-local-cluster", - "solana-logger 1.14.15", + "solana-logger 1.14.16", "solana-measure", "solana-metrics", "solana-net-utils", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.15", + "solana-sdk 1.14.16", "solana-streamer", "solana-test-validator", "solana-version", @@ -4652,7 +4652,7 @@ dependencies = [ [[package]] name = "solana-bloom" -version = "1.14.15" +version = "1.14.16" dependencies = [ "bv", "fnv", @@ -4662,14 +4662,14 @@ dependencies = [ "rustc_version 0.4.0", "serde", "serde_derive", - "solana-frozen-abi 1.14.15", - "solana-frozen-abi-macro 1.14.15", - "solana-sdk 1.14.15", + "solana-frozen-abi 1.14.16", + "solana-frozen-abi-macro 1.14.16", + "solana-sdk 1.14.16", ] [[package]] name = "solana-bpf-loader-program" -version = "1.14.15" +version = "1.14.16" dependencies = [ "bincode", "byteorder", @@ -4680,26 +4680,26 @@ dependencies = [ "solana-metrics", "solana-program-runtime", "solana-runtime", - "solana-sdk 1.14.15", - "solana-zk-token-sdk 1.14.15", + "solana-sdk 1.14.16", + "solana-zk-token-sdk 1.14.16", "solana_rbpf", "thiserror", ] [[package]] name = "solana-bpf-loader-program-tests" -version = "1.14.15" +version = "1.14.16" dependencies = [ "assert_matches", "bincode", "solana-bpf-loader-program", "solana-program-test", - "solana-sdk 1.14.15", + "solana-sdk 1.14.16", ] [[package]] name = "solana-bucket-map" -version = "1.14.15" +version = "1.14.16" dependencies = [ "fs_extra", "log", @@ -4707,24 +4707,24 @@ dependencies = [ "modular-bitfield", "rand 0.7.3", "rayon", - "solana-logger 1.14.15", + "solana-logger 1.14.16", "solana-measure", - "solana-sdk 1.14.15", + "solana-sdk 1.14.16", "tempfile", ] [[package]] name = "solana-cargo-build-bpf" -version = "1.14.15" +version = "1.14.16" dependencies = [ "cargo_metadata", "clap 3.1.8", - "solana-sdk 1.14.15", + "solana-sdk 1.14.16", ] [[package]] name = "solana-cargo-build-sbf" -version = "1.14.15" +version = "1.14.16" dependencies = [ "bzip2", "cargo_metadata", @@ -4733,14 +4733,14 @@ dependencies = [ "regex", "serial_test", "solana-download-utils", - "solana-logger 1.14.15", - "solana-sdk 1.14.15", + "solana-logger 1.14.16", + "solana-sdk 1.14.16", "tar", ] [[package]] name = "solana-cargo-test-bpf" -version = "1.14.15" +version = "1.14.16" dependencies = [ "cargo_metadata", "clap 3.1.8", @@ -4748,7 +4748,7 @@ dependencies = [ [[package]] name = "solana-cargo-test-sbf" -version = "1.14.15" +version = "1.14.16" dependencies = [ "cargo_metadata", "clap 3.1.8", @@ -4756,14 +4756,14 @@ dependencies = [ [[package]] name = "solana-clap-utils" -version = "1.14.15" +version = "1.14.16" dependencies = [ "chrono", "clap 2.33.3", "rpassword", "solana-perf", "solana-remote-wallet", - "solana-sdk 1.14.15", + "solana-sdk 1.14.16", "tempfile", "thiserror", "tiny-bip39", @@ -4773,14 +4773,14 @@ dependencies = [ [[package]] name = "solana-clap-v3-utils" -version = "1.14.15" +version = "1.14.16" dependencies = [ "chrono", "clap 3.1.8", "rpassword", "solana-perf", "solana-remote-wallet", - "solana-sdk 1.14.15", + "solana-sdk 1.14.16", "tempfile", "thiserror", "tiny-bip39", @@ -4790,7 +4790,7 @@ dependencies = [ [[package]] name = "solana-cli" -version = "1.14.15" +version = "1.14.16" dependencies = [ "bincode", "bs58", @@ -4818,10 +4818,10 @@ dependencies = [ "solana-client", "solana-config-program", "solana-faucet", - "solana-logger 1.14.15", + "solana-logger 1.14.16", "solana-program-runtime", "solana-remote-wallet", - "solana-sdk 1.14.15", + "solana-sdk 1.14.16", "solana-streamer", "solana-test-validator", "solana-transaction-status", @@ -4836,7 +4836,7 @@ dependencies = [ [[package]] name = "solana-cli-config" -version = "1.14.15" +version = "1.14.16" dependencies = [ "anyhow", "dirs-next", @@ -4845,13 +4845,13 @@ dependencies = [ "serde_derive", "serde_yaml", "solana-clap-utils", - "solana-sdk 1.14.15", + "solana-sdk 1.14.16", "url 2.2.2", ] [[package]] name = "solana-cli-output" -version = "1.14.15" +version = "1.14.16" dependencies = [ "Inflector", "base64 0.13.0", @@ -4869,7 +4869,7 @@ dependencies = [ "solana-clap-utils", "solana-cli-config", "solana-client", - "solana-sdk 1.14.15", + "solana-sdk 1.14.16", "solana-transaction-status", "solana-vote-program", "spl-memo", @@ -4877,7 +4877,7 @@ dependencies = [ [[package]] name = "solana-client" -version = "1.14.15" +version = "1.14.16" dependencies = [ "anyhow", "assert_matches", @@ -4913,12 +4913,12 @@ dependencies = [ "solana-account-decoder", "solana-clap-utils", "solana-faucet", - "solana-logger 1.14.15", + "solana-logger 1.14.16", "solana-measure", "solana-metrics", "solana-net-utils", "solana-perf", - "solana-sdk 1.14.15", + "solana-sdk 1.14.16", "solana-streamer", "solana-transaction-status", "solana-version", @@ -4934,14 +4934,14 @@ dependencies = [ [[package]] name = "solana-client-test" -version = "1.14.15" +version = "1.14.16" dependencies = [ "futures-util", "serde_json", "serial_test", "solana-client", "solana-ledger", - "solana-logger 1.14.15", + "solana-logger 1.14.16", "solana-measure", "solana-merkle-tree", "solana-metrics", @@ -4949,7 +4949,7 @@ dependencies = [ "solana-rayon-threadlimit", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.15", + "solana-sdk 1.14.16", "solana-streamer", "solana-test-validator", "solana-transaction-status", @@ -4960,28 +4960,28 @@ dependencies = [ [[package]] name = "solana-compute-budget-program" -version = "1.14.15" +version = "1.14.16" dependencies = [ "solana-program-runtime", - "solana-sdk 1.14.15", + "solana-sdk 1.14.16", ] [[package]] name = "solana-config-program" -version = "1.14.15" +version = "1.14.16" dependencies = [ "bincode", "chrono", "serde", "serde_derive", - "solana-logger 1.14.15", + "solana-logger 1.14.16", "solana-program-runtime", - "solana-sdk 1.14.15", + "solana-sdk 1.14.16", ] [[package]] name = "solana-core" -version = "1.14.15" +version = "1.14.16" dependencies = [ "ahash", "base64 0.13.0", @@ -5014,12 +5014,12 @@ dependencies = [ "solana-bloom", "solana-client", "solana-entry", - "solana-frozen-abi 1.14.15", - "solana-frozen-abi-macro 1.14.15", + "solana-frozen-abi 1.14.16", + "solana-frozen-abi-macro 1.14.16", "solana-geyser-plugin-manager", "solana-gossip", "solana-ledger", - "solana-logger 1.14.15", + "solana-logger 1.14.16", "solana-measure", "solana-metrics", "solana-net-utils", @@ -5029,7 +5029,7 @@ dependencies = [ "solana-rayon-threadlimit", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.15", + "solana-sdk 1.14.16", "solana-send-transaction-service", "solana-stake-program", "solana-streamer", @@ -5049,7 +5049,7 @@ dependencies = [ [[package]] name = "solana-dos" -version = "1.14.15" +version = "1.14.16" dependencies = [ "bincode", "clap 3.1.8", @@ -5065,42 +5065,42 @@ dependencies = [ "solana-faucet", "solana-gossip", "solana-local-cluster", - "solana-logger 1.14.15", + "solana-logger 1.14.16", "solana-measure", "solana-net-utils", "solana-perf", "solana-rpc", - "solana-sdk 1.14.15", + "solana-sdk 1.14.16", "solana-streamer", "solana-version", ] [[package]] name = "solana-download-utils" -version = "1.14.15" +version = "1.14.16" dependencies = [ "console", "indicatif", "log", "reqwest", "solana-runtime", - "solana-sdk 1.14.15", + "solana-sdk 1.14.16", ] [[package]] name = "solana-ed25519-program-tests" -version = "1.14.15" +version = "1.14.16" dependencies = [ "assert_matches", "ed25519-dalek", "rand 0.7.3", "solana-program-test", - "solana-sdk 1.14.15", + "solana-sdk 1.14.16", ] [[package]] name = "solana-entry" -version = "1.14.15" +version = "1.14.16" dependencies = [ "bincode", "crossbeam-channel", @@ -5112,18 +5112,18 @@ dependencies = [ "rand 0.7.3", "rayon", "serde", - "solana-logger 1.14.15", + "solana-logger 1.14.16", "solana-measure", "solana-merkle-tree", "solana-metrics", "solana-perf", "solana-rayon-threadlimit", - "solana-sdk 1.14.15", + "solana-sdk 1.14.16", ] [[package]] name = "solana-faucet" -version = "1.14.15" +version = "1.14.16" dependencies = [ "bincode", "byteorder", @@ -5134,9 +5134,9 @@ dependencies = [ "serde_derive", "solana-clap-utils", "solana-cli-config", - "solana-logger 1.14.15", + "solana-logger 1.14.16", "solana-metrics", - "solana-sdk 1.14.15", + "solana-sdk 1.14.16", "solana-version", "spl-memo", "thiserror", @@ -5179,7 +5179,7 @@ dependencies = [ [[package]] name = "solana-frozen-abi" -version = "1.14.15" +version = "1.14.16" dependencies = [ "ahash", "blake3", @@ -5204,8 +5204,8 @@ dependencies = [ "serde_derive", "serde_json", "sha2 0.10.2", - "solana-frozen-abi-macro 1.14.15", - "solana-logger 1.14.15", + "solana-frozen-abi-macro 1.14.16", + "solana-logger 1.14.16", "subtle", "thiserror", ] @@ -5224,7 +5224,7 @@ dependencies = [ [[package]] name = "solana-frozen-abi-macro" -version = "1.14.15" +version = "1.14.16" dependencies = [ "proc-macro2 1.0.41", "quote 1.0.18", @@ -5234,7 +5234,7 @@ dependencies = [ [[package]] name = "solana-genesis" -version = "1.14.15" +version = "1.14.16" dependencies = [ "base64 0.13.0", "clap 2.33.3", @@ -5245,9 +5245,9 @@ dependencies = [ "solana-cli-config", "solana-entry", "solana-ledger", - "solana-logger 1.14.15", + "solana-logger 1.14.16", "solana-runtime", - "solana-sdk 1.14.15", + "solana-sdk 1.14.16", "solana-stake-program", "solana-version", "solana-vote-program", @@ -5256,26 +5256,26 @@ dependencies = [ [[package]] name = "solana-genesis-utils" -version = "1.14.15" +version = "1.14.16" dependencies = [ "solana-download-utils", "solana-runtime", - "solana-sdk 1.14.15", + "solana-sdk 1.14.16", ] [[package]] name = "solana-geyser-plugin-interface" -version = "1.14.15" +version = "1.14.16" dependencies = [ "log", - "solana-sdk 1.14.15", + "solana-sdk 1.14.16", "solana-transaction-status", "thiserror", ] [[package]] name = "solana-geyser-plugin-manager" -version = "1.14.15" +version = "1.14.16" dependencies = [ "bs58", "crossbeam-channel", @@ -5288,14 +5288,14 @@ dependencies = [ "solana-metrics", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.15", + "solana-sdk 1.14.16", "solana-transaction-status", "thiserror", ] [[package]] name = "solana-gossip" -version = "1.14.15" +version = "1.14.16" dependencies = [ "bincode", "bv", @@ -5322,17 +5322,17 @@ dependencies = [ "solana-clap-utils", "solana-client", "solana-entry", - "solana-frozen-abi 1.14.15", - "solana-frozen-abi-macro 1.14.15", + "solana-frozen-abi 1.14.16", + "solana-frozen-abi-macro 1.14.16", "solana-ledger", - "solana-logger 1.14.15", + "solana-logger 1.14.16", "solana-measure", "solana-metrics", "solana-net-utils", "solana-perf", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.14.15", + "solana-sdk 1.14.16", "solana-streamer", "solana-version", "solana-vote-program", @@ -5341,7 +5341,7 @@ dependencies = [ [[package]] name = "solana-install" -version = "1.14.15" +version = "1.14.16" dependencies = [ "atty", "bincode", @@ -5362,8 +5362,8 @@ dependencies = [ "solana-clap-utils", "solana-client", "solana-config-program", - "solana-logger 1.14.15", - "solana-sdk 1.14.15", + "solana-logger 1.14.16", + "solana-sdk 1.14.16", "solana-version", "tar", "tempfile", @@ -5374,7 +5374,7 @@ dependencies = [ [[package]] name = "solana-keygen" -version = "1.14.15" +version = "1.14.16" dependencies = [ "bs58", "clap 3.1.8", @@ -5383,14 +5383,14 @@ dependencies = [ "solana-clap-v3-utils", "solana-cli-config", "solana-remote-wallet", - "solana-sdk 1.14.15", + "solana-sdk 1.14.16", "solana-version", "tiny-bip39", ] [[package]] name = "solana-ledger" -version = "1.14.15" +version = "1.14.16" dependencies = [ "assert_matches", "bincode", @@ -5424,16 +5424,16 @@ dependencies = [ "solana-account-decoder", "solana-bpf-loader-program", "solana-entry", - "solana-frozen-abi 1.14.15", - "solana-frozen-abi-macro 1.14.15", - "solana-logger 1.14.15", + "solana-frozen-abi 1.14.16", + "solana-frozen-abi-macro 1.14.16", + "solana-logger 1.14.16", "solana-measure", "solana-metrics", "solana-perf", "solana-program-runtime", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.14.15", + "solana-sdk 1.14.16", "solana-stake-program", "solana-storage-bigtable", "solana-storage-proto", @@ -5452,7 +5452,7 @@ dependencies = [ [[package]] name = "solana-ledger-tool" -version = "1.14.15" +version = "1.14.16" dependencies = [ "assert_cmd", "base64 0.13.0", @@ -5474,10 +5474,10 @@ dependencies = [ "solana-core", "solana-entry", "solana-ledger", - "solana-logger 1.14.15", + "solana-logger 1.14.16", "solana-measure", "solana-runtime", - "solana-sdk 1.14.15", + "solana-sdk 1.14.16", "solana-stake-program", "solana-storage-bigtable", "solana-transaction-status", @@ -5489,7 +5489,7 @@ dependencies = [ [[package]] name = "solana-local-cluster" -version = "1.14.15" +version = "1.14.16" dependencies = [ "assert_matches", "crossbeam-channel", @@ -5507,9 +5507,9 @@ dependencies = [ "solana-entry", "solana-gossip", "solana-ledger", - "solana-logger 1.14.15", + "solana-logger 1.14.16", "solana-runtime", - "solana-sdk 1.14.15", + "solana-sdk 1.14.16", "solana-stake-program", "solana-streamer", "solana-vote-program", @@ -5518,13 +5518,13 @@ dependencies = [ [[package]] name = "solana-log-analyzer" -version = "1.14.15" +version = "1.14.16" dependencies = [ "byte-unit", "clap 3.1.8", "serde", "serde_json", - "solana-logger 1.14.15", + "solana-logger 1.14.16", "solana-version", ] @@ -5541,7 +5541,7 @@ dependencies = [ [[package]] name = "solana-logger" -version = "1.14.15" +version = "1.14.16" dependencies = [ "env_logger", "lazy_static", @@ -5550,38 +5550,38 @@ dependencies = [ [[package]] name = "solana-measure" -version = "1.14.15" +version = "1.14.16" dependencies = [ "log", - "solana-sdk 1.14.15", + "solana-sdk 1.14.16", ] [[package]] name = "solana-merkle-root-bench" -version = "1.14.15" +version = "1.14.16" dependencies = [ "clap 2.33.3", "log", - "solana-logger 1.14.15", + "solana-logger 1.14.16", "solana-measure", "solana-runtime", - "solana-sdk 1.14.15", + "solana-sdk 1.14.16", "solana-version", ] [[package]] name = "solana-merkle-tree" -version = "1.14.15" +version = "1.14.16" dependencies = [ "fast-math", "hex", "matches", - "solana-program 1.14.15", + "solana-program 1.14.16", ] [[package]] name = "solana-metrics" -version = "1.14.15" +version = "1.14.16" dependencies = [ "crossbeam-channel", "env_logger", @@ -5591,23 +5591,23 @@ dependencies = [ "rand 0.7.3", "reqwest", "serial_test", - "solana-sdk 1.14.15", + "solana-sdk 1.14.16", ] [[package]] name = "solana-net-shaper" -version = "1.14.15" +version = "1.14.16" dependencies = [ "clap 3.1.8", "rand 0.7.3", "serde", "serde_json", - "solana-logger 1.14.15", + "solana-logger 1.14.16", ] [[package]] name = "solana-net-utils" -version = "1.14.15" +version = "1.14.16" dependencies = [ "bincode", "clap 3.1.8", @@ -5618,8 +5618,8 @@ dependencies = [ "serde", "serde_derive", "socket2", - "solana-logger 1.14.15", - "solana-sdk 1.14.15", + "solana-logger 1.14.16", + "solana-sdk 1.14.16", "solana-version", "tokio", "url 2.2.2", @@ -5627,7 +5627,7 @@ dependencies = [ [[package]] name = "solana-notifier" -version = "1.14.15" +version = "1.14.16" dependencies = [ "log", "reqwest", @@ -5636,7 +5636,7 @@ dependencies = [ [[package]] name = "solana-perf" -version = "1.14.15" +version = "1.14.16" dependencies = [ "ahash", "bincode", @@ -5654,16 +5654,16 @@ dependencies = [ "rand 0.7.3", "rayon", "serde", - "solana-logger 1.14.15", + "solana-logger 1.14.16", "solana-metrics", "solana-rayon-threadlimit", - "solana-sdk 1.14.15", + "solana-sdk 1.14.16", "solana-vote-program", ] [[package]] name = "solana-poh" -version = "1.14.15" +version = "1.14.16" dependencies = [ "bincode", "core_affinity", @@ -5673,29 +5673,29 @@ dependencies = [ "rand 0.7.3", "solana-entry", "solana-ledger", - "solana-logger 1.14.15", + "solana-logger 1.14.16", "solana-measure", "solana-metrics", "solana-perf", "solana-runtime", - "solana-sdk 1.14.15", + "solana-sdk 1.14.16", "solana-sys-tuner", "thiserror", ] [[package]] name = "solana-poh-bench" -version = "1.14.15" +version = "1.14.16" dependencies = [ "clap 3.1.8", "log", "rand 0.7.3", "rayon", "solana-entry", - "solana-logger 1.14.15", + "solana-logger 1.14.16", "solana-measure", "solana-perf", - "solana-sdk 1.14.15", + "solana-sdk 1.14.16", "solana-version", ] @@ -5750,7 +5750,7 @@ dependencies = [ [[package]] name = "solana-program" -version = "1.14.15" +version = "1.14.16" dependencies = [ "anyhow", "assert_matches", @@ -5788,10 +5788,10 @@ dependencies = [ "serde_json", "sha2 0.10.2", "sha3 0.10.1", - "solana-frozen-abi 1.14.15", - "solana-frozen-abi-macro 1.14.15", - "solana-logger 1.14.15", - "solana-sdk-macro 1.14.15", + "solana-frozen-abi 1.14.16", + "solana-frozen-abi-macro 1.14.16", + "solana-logger 1.14.16", + "solana-sdk-macro 1.14.16", "static_assertions", "thiserror", "tiny-bip39", @@ -5801,7 +5801,7 @@ dependencies = [ [[package]] name = "solana-program-runtime" -version = "1.14.15" +version = "1.14.16" dependencies = [ "base64 0.13.0", "bincode", @@ -5816,18 +5816,18 @@ dependencies = [ "rand 0.7.3", "rustc_version 0.4.0", "serde", - "solana-frozen-abi 1.14.15", - "solana-frozen-abi-macro 1.14.15", - "solana-logger 1.14.15", + "solana-frozen-abi 1.14.16", + "solana-frozen-abi-macro 1.14.16", + "solana-logger 1.14.16", "solana-measure", "solana-metrics", - "solana-sdk 1.14.15", + "solana-sdk 1.14.16", "thiserror", ] [[package]] name = "solana-program-test" -version = "1.14.15" +version = "1.14.16" dependencies = [ "assert_matches", "async-trait", @@ -5839,10 +5839,10 @@ dependencies = [ "solana-banks-client", "solana-banks-server", "solana-bpf-loader-program", - "solana-logger 1.14.15", + "solana-logger 1.14.16", "solana-program-runtime", "solana-runtime", - "solana-sdk 1.14.15", + "solana-sdk 1.14.16", "solana-stake-program", "solana-vote-program", "thiserror", @@ -5851,7 +5851,7 @@ dependencies = [ [[package]] name = "solana-rayon-threadlimit" -version = "1.14.15" +version = "1.14.16" dependencies = [ "lazy_static", "num_cpus", @@ -5859,7 +5859,7 @@ dependencies = [ [[package]] name = "solana-remote-wallet" -version = "1.14.15" +version = "1.14.16" dependencies = [ "console", "dialoguer", @@ -5870,14 +5870,14 @@ dependencies = [ "parking_lot 0.12.1", "qstring", "semver 1.0.10", - "solana-sdk 1.14.15", + "solana-sdk 1.14.16", "thiserror", "uriparse", ] [[package]] name = "solana-rpc" -version = "1.14.15" +version = "1.14.16" dependencies = [ "base64 0.13.0", "bincode", @@ -5913,7 +5913,7 @@ dependencies = [ "solana-poh", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.14.15", + "solana-sdk 1.14.16", "solana-send-transaction-service", "solana-stake-program", "solana-storage-bigtable", @@ -5932,7 +5932,7 @@ dependencies = [ [[package]] name = "solana-rpc-test" -version = "1.14.15" +version = "1.14.16" dependencies = [ "bincode", "bs58", @@ -5944,9 +5944,9 @@ dependencies = [ "serde_json", "solana-account-decoder", "solana-client", - "solana-logger 1.14.15", + "solana-logger 1.14.16", "solana-rpc", - "solana-sdk 1.14.15", + "solana-sdk 1.14.16", "solana-streamer", "solana-test-validator", "solana-transaction-status", @@ -5955,7 +5955,7 @@ dependencies = [ [[package]] name = "solana-runtime" -version = "1.14.15" +version = "1.14.16" dependencies = [ "arrayref", "assert_matches", @@ -5996,18 +5996,18 @@ dependencies = [ "solana-bucket-map", "solana-compute-budget-program", "solana-config-program", - "solana-frozen-abi 1.14.15", - "solana-frozen-abi-macro 1.14.15", - "solana-logger 1.14.15", + "solana-frozen-abi 1.14.16", + "solana-frozen-abi-macro 1.14.16", + "solana-logger 1.14.16", "solana-measure", "solana-metrics", "solana-program-runtime", "solana-rayon-threadlimit", - "solana-sdk 1.14.15", + "solana-sdk 1.14.16", "solana-stake-program", "solana-vote-program", "solana-zk-token-proof-program", - "solana-zk-token-sdk 1.14.15", + "solana-zk-token-sdk 1.14.16", "strum", "strum_macros", "symlink", @@ -6070,7 +6070,7 @@ dependencies = [ [[package]] name = "solana-sdk" -version = "1.14.15" +version = "1.14.16" dependencies = [ "anyhow", "assert_matches", @@ -6110,11 +6110,11 @@ dependencies = [ "serde_json", "sha2 0.10.2", "sha3 0.10.1", - "solana-frozen-abi 1.14.15", - "solana-frozen-abi-macro 1.14.15", - "solana-logger 1.14.15", - "solana-program 1.14.15", - "solana-sdk-macro 1.14.15", + "solana-frozen-abi 1.14.16", + "solana-frozen-abi-macro 1.14.16", + "solana-logger 1.14.16", + "solana-program 1.14.16", + "solana-sdk-macro 1.14.16", "static_assertions", "thiserror", "tiny-bip39", @@ -6137,7 +6137,7 @@ dependencies = [ [[package]] name = "solana-sdk-macro" -version = "1.14.15" +version = "1.14.16" dependencies = [ "bs58", "proc-macro2 1.0.41", @@ -6148,21 +6148,21 @@ dependencies = [ [[package]] name = "solana-send-transaction-service" -version = "1.14.15" +version = "1.14.16" dependencies = [ "crossbeam-channel", "log", "solana-client", - "solana-logger 1.14.15", + "solana-logger 1.14.16", "solana-measure", "solana-metrics", "solana-runtime", - "solana-sdk 1.14.15", + "solana-sdk 1.14.16", ] [[package]] name = "solana-stake-accounts" -version = "1.14.15" +version = "1.14.16" dependencies = [ "clap 2.33.3", "solana-clap-utils", @@ -6170,13 +6170,13 @@ dependencies = [ "solana-client", "solana-remote-wallet", "solana-runtime", - "solana-sdk 1.14.15", + "solana-sdk 1.14.16", "solana-stake-program", ] [[package]] name = "solana-stake-program" -version = "1.14.15" +version = "1.14.16" dependencies = [ "assert_matches", "bincode", @@ -6188,12 +6188,12 @@ dependencies = [ "serde", "serde_derive", "solana-config-program", - "solana-frozen-abi 1.14.15", - "solana-frozen-abi-macro 1.14.15", - "solana-logger 1.14.15", + "solana-frozen-abi 1.14.16", + "solana-frozen-abi-macro 1.14.16", + "solana-logger 1.14.16", "solana-metrics", "solana-program-runtime", - "solana-sdk 1.14.15", + "solana-sdk 1.14.16", "solana-vote-program", "test-case", "thiserror", @@ -6201,7 +6201,7 @@ dependencies = [ [[package]] name = "solana-storage-bigtable" -version = "1.14.15" +version = "1.14.16" dependencies = [ "backoff", "bincode", @@ -6222,7 +6222,7 @@ dependencies = [ "serde_derive", "smpl_jwt", "solana-metrics", - "solana-sdk 1.14.15", + "solana-sdk 1.14.16", "solana-storage-proto", "solana-transaction-status", "thiserror", @@ -6233,7 +6233,7 @@ dependencies = [ [[package]] name = "solana-storage-proto" -version = "1.14.15" +version = "1.14.16" dependencies = [ "bincode", "bs58", @@ -6242,25 +6242,25 @@ dependencies = [ "protobuf-src", "serde", "solana-account-decoder", - "solana-sdk 1.14.15", + "solana-sdk 1.14.16", "solana-transaction-status", "tonic-build 0.8.0", ] [[package]] name = "solana-store-tool" -version = "1.14.15" +version = "1.14.16" dependencies = [ "clap 2.33.3", "log", - "solana-logger 1.14.15", + "solana-logger 1.14.16", "solana-runtime", "solana-version", ] [[package]] name = "solana-streamer" -version = "1.14.15" +version = "1.14.16" dependencies = [ "crossbeam-channel", "futures-util", @@ -6277,10 +6277,10 @@ dependencies = [ "rand 0.7.3", "rcgen", "rustls 0.20.6", - "solana-logger 1.14.15", + "solana-logger 1.14.16", "solana-metrics", "solana-perf", - "solana-sdk 1.14.15", + "solana-sdk 1.14.16", "thiserror", "tokio", "x509-parser", @@ -6288,13 +6288,13 @@ dependencies = [ [[package]] name = "solana-sys-tuner" -version = "1.14.15" +version = "1.14.16" dependencies = [ "clap 2.33.3", "libc", "log", "nix", - "solana-logger 1.14.15", + "solana-logger 1.14.16", "solana-version", "sysctl", "unix_socket2", @@ -6303,7 +6303,7 @@ dependencies = [ [[package]] name = "solana-test-validator" -version = "1.14.15" +version = "1.14.16" dependencies = [ "base64 0.13.0", "log", @@ -6314,20 +6314,20 @@ dependencies = [ "solana-core", "solana-gossip", "solana-ledger", - "solana-logger 1.14.15", + "solana-logger 1.14.16", "solana-net-utils", "solana-program-runtime", "solana-program-test", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.15", + "solana-sdk 1.14.16", "solana-streamer", "tokio", ] [[package]] name = "solana-tokens" -version = "1.14.15" +version = "1.14.16" dependencies = [ "bincode", "chrono", @@ -6343,9 +6343,9 @@ dependencies = [ "solana-clap-utils", "solana-cli-config", "solana-client", - "solana-logger 1.14.15", + "solana-logger 1.14.16", "solana-remote-wallet", - "solana-sdk 1.14.15", + "solana-sdk 1.14.16", "solana-streamer", "solana-test-validator", "solana-transaction-status", @@ -6358,7 +6358,7 @@ dependencies = [ [[package]] name = "solana-transaction-dos" -version = "1.14.15" +version = "1.14.16" dependencies = [ "bincode", "clap 2.33.3", @@ -6372,11 +6372,11 @@ dependencies = [ "solana-faucet", "solana-gossip", "solana-local-cluster", - "solana-logger 1.14.15", + "solana-logger 1.14.16", "solana-measure", "solana-net-utils", "solana-runtime", - "solana-sdk 1.14.15", + "solana-sdk 1.14.16", "solana-streamer", "solana-transaction-status", "solana-version", @@ -6384,7 +6384,7 @@ dependencies = [ [[package]] name = "solana-transaction-status" -version = "1.14.15" +version = "1.14.16" dependencies = [ "Inflector", "base64 0.13.0", @@ -6400,7 +6400,7 @@ dependencies = [ "solana-address-lookup-table-program", "solana-measure", "solana-metrics", - "solana-sdk 1.14.15", + "solana-sdk 1.14.16", "solana-vote-program", "spl-associated-token-account", "spl-memo", @@ -6411,7 +6411,7 @@ dependencies = [ [[package]] name = "solana-upload-perf" -version = "1.14.15" +version = "1.14.16" dependencies = [ "serde_json", "solana-metrics", @@ -6419,7 +6419,7 @@ dependencies = [ [[package]] name = "solana-validator" -version = "1.14.15" +version = "1.14.16" dependencies = [ "chrono", "clap 2.33.3", @@ -6450,14 +6450,14 @@ dependencies = [ "solana-genesis-utils", "solana-gossip", "solana-ledger", - "solana-logger 1.14.15", + "solana-logger 1.14.16", "solana-metrics", "solana-net-utils", "solana-perf", "solana-poh", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.15", + "solana-sdk 1.14.16", "solana-send-transaction-service", "solana-storage-bigtable", "solana-streamer", @@ -6470,21 +6470,21 @@ dependencies = [ [[package]] name = "solana-version" -version = "1.14.15" +version = "1.14.16" dependencies = [ "log", "rustc_version 0.4.0", "semver 1.0.10", "serde", "serde_derive", - "solana-frozen-abi 1.14.15", - "solana-frozen-abi-macro 1.14.15", - "solana-sdk 1.14.15", + "solana-frozen-abi 1.14.16", + "solana-frozen-abi-macro 1.14.16", + "solana-sdk 1.14.16", ] [[package]] name = "solana-vote-program" -version = "1.14.15" +version = "1.14.16" dependencies = [ "bincode", "itertools", @@ -6495,19 +6495,19 @@ dependencies = [ "rustc_version 0.4.0", "serde", "serde_derive", - "solana-frozen-abi 1.14.15", - "solana-frozen-abi-macro 1.14.15", - "solana-logger 1.14.15", + "solana-frozen-abi 1.14.16", + "solana-frozen-abi-macro 1.14.16", + "solana-logger 1.14.16", "solana-metrics", "solana-program-runtime", - "solana-sdk 1.14.15", + "solana-sdk 1.14.16", "test-case", "thiserror", ] [[package]] name = "solana-watchtower" -version = "1.14.15" +version = "1.14.16" dependencies = [ "clap 2.33.3", "humantime", @@ -6516,24 +6516,24 @@ dependencies = [ "solana-cli-config", "solana-cli-output", "solana-client", - "solana-logger 1.14.15", + "solana-logger 1.14.16", "solana-metrics", "solana-notifier", - "solana-sdk 1.14.15", + "solana-sdk 1.14.16", "solana-version", ] [[package]] name = "solana-zk-token-proof-program" -version = "1.14.15" +version = "1.14.16" dependencies = [ "bytemuck", "getrandom 0.1.16", "num-derive", "num-traits", "solana-program-runtime", - "solana-sdk 1.14.15", - "solana-zk-token-sdk 1.14.15", + "solana-sdk 1.14.16", + "solana-zk-token-sdk 1.14.16", ] [[package]] @@ -6569,7 +6569,7 @@ dependencies = [ [[package]] name = "solana-zk-token-sdk" -version = "1.14.15" +version = "1.14.16" dependencies = [ "aes-gcm-siv", "arrayref", @@ -6589,8 +6589,8 @@ dependencies = [ "serde", "serde_json", "sha3 0.9.1", - "solana-program 1.14.15", - "solana-sdk 1.14.15", + "solana-program 1.14.16", + "solana-sdk 1.14.16", "subtle", "thiserror", "zeroize", diff --git a/account-decoder/Cargo.toml b/account-decoder/Cargo.toml index 273a1e2bd954c9..16edab7c14bf93 100644 --- a/account-decoder/Cargo.toml +++ b/account-decoder/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-account-decoder" -version = "1.14.15" +version = "1.14.16" description = "Solana account decoder" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -19,10 +19,10 @@ lazy_static = "1.4.0" serde = "1.0.138" serde_derive = "1.0.103" serde_json = "1.0.81" -solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.15" } -solana-config-program = { path = "../programs/config", version = "=1.14.15" } -solana-sdk = { path = "../sdk", version = "=1.14.15" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.15" } +solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.16" } +solana-config-program = { path = "../programs/config", version = "=1.14.16" } +solana-sdk = { path = "../sdk", version = "=1.14.16" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.16" } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } spl-token-2022 = { version = "=0.5.0", features = ["no-entrypoint"] } thiserror = "1.0" diff --git a/accounts-bench/Cargo.toml b/accounts-bench/Cargo.toml index 8d0d76879769fc..8b9ee4bd7c1ba0 100644 --- a/accounts-bench/Cargo.toml +++ b/accounts-bench/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-accounts-bench" -version = "1.14.15" +version = "1.14.16" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -12,11 +12,11 @@ publish = false clap = "2.33.1" log = "0.4.17" rayon = "1.5.3" -solana-logger = { path = "../logger", version = "=1.14.15" } -solana-measure = { path = "../measure", version = "=1.14.15" } -solana-runtime = { path = "../runtime", version = "=1.14.15" } -solana-sdk = { path = "../sdk", version = "=1.14.15" } -solana-version = { path = "../version", version = "=1.14.15" } +solana-logger = { path = "../logger", version = "=1.14.16" } +solana-measure = { path = "../measure", version = "=1.14.16" } +solana-runtime = { path = "../runtime", version = "=1.14.16" } +solana-sdk = { path = "../sdk", version = "=1.14.16" } +solana-version = { path = "../version", version = "=1.14.16" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/accounts-cluster-bench/Cargo.toml b/accounts-cluster-bench/Cargo.toml index f6d6e5108e3f8e..5ff7d081829188 100644 --- a/accounts-cluster-bench/Cargo.toml +++ b/accounts-cluster-bench/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-accounts-cluster-bench" -version = "1.14.15" +version = "1.14.16" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -13,25 +13,25 @@ clap = "2.33.1" log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.15" } -solana-clap-utils = { path = "../clap-utils", version = "=1.14.15" } -solana-client = { path = "../client", version = "=1.14.15" } -solana-faucet = { path = "../faucet", version = "=1.14.15" } -solana-gossip = { path = "../gossip", version = "=1.14.15" } -solana-logger = { path = "../logger", version = "=1.14.15" } -solana-measure = { path = "../measure", version = "=1.14.15" } -solana-net-utils = { path = "../net-utils", version = "=1.14.15" } -solana-runtime = { path = "../runtime", version = "=1.14.15" } -solana-sdk = { path = "../sdk", version = "=1.14.15" } -solana-streamer = { path = "../streamer", version = "=1.14.15" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.15" } -solana-version = { path = "../version", version = "=1.14.15" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.16" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.16" } +solana-client = { path = "../client", version = "=1.14.16" } +solana-faucet = { path = "../faucet", version = "=1.14.16" } +solana-gossip = { path = "../gossip", version = "=1.14.16" } +solana-logger = { path = "../logger", version = "=1.14.16" } +solana-measure = { path = "../measure", version = "=1.14.16" } +solana-net-utils = { path = "../net-utils", version = "=1.14.16" } +solana-runtime = { path = "../runtime", version = "=1.14.16" } +solana-sdk = { path = "../sdk", version = "=1.14.16" } +solana-streamer = { path = "../streamer", version = "=1.14.16" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.16" } +solana-version = { path = "../version", version = "=1.14.16" } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } [dev-dependencies] -solana-core = { path = "../core", version = "=1.14.15" } -solana-local-cluster = { path = "../local-cluster", version = "=1.14.15" } -solana-test-validator = { path = "../test-validator", version = "=1.14.15" } +solana-core = { path = "../core", version = "=1.14.16" } +solana-local-cluster = { path = "../local-cluster", version = "=1.14.16" } +solana-test-validator = { path = "../test-validator", version = "=1.14.16" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/banking-bench/Cargo.toml b/banking-bench/Cargo.toml index ec642abdd69774..28dfec7760cf16 100644 --- a/banking-bench/Cargo.toml +++ b/banking-bench/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-banking-bench" -version = "1.14.15" +version = "1.14.16" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,18 +14,18 @@ crossbeam-channel = "0.5" log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" -solana-client = { path = "../client", version = "=1.14.15" } -solana-core = { path = "../core", version = "=1.14.15" } -solana-gossip = { path = "../gossip", version = "=1.14.15" } -solana-ledger = { path = "../ledger", version = "=1.14.15" } -solana-logger = { path = "../logger", version = "=1.14.15" } -solana-measure = { path = "../measure", version = "=1.14.15" } -solana-perf = { path = "../perf", version = "=1.14.15" } -solana-poh = { path = "../poh", version = "=1.14.15" } -solana-runtime = { path = "../runtime", version = "=1.14.15" } -solana-sdk = { path = "../sdk", version = "=1.14.15" } -solana-streamer = { path = "../streamer", version = "=1.14.15" } -solana-version = { path = "../version", version = "=1.14.15" } +solana-client = { path = "../client", version = "=1.14.16" } +solana-core = { path = "../core", version = "=1.14.16" } +solana-gossip = { path = "../gossip", version = "=1.14.16" } +solana-ledger = { path = "../ledger", version = "=1.14.16" } +solana-logger = { path = "../logger", version = "=1.14.16" } +solana-measure = { path = "../measure", version = "=1.14.16" } +solana-perf = { path = "../perf", version = "=1.14.16" } +solana-poh = { path = "../poh", version = "=1.14.16" } +solana-runtime = { path = "../runtime", version = "=1.14.16" } +solana-sdk = { path = "../sdk", version = "=1.14.16" } +solana-streamer = { path = "../streamer", version = "=1.14.16" } +solana-version = { path = "../version", version = "=1.14.16" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/banks-client/Cargo.toml b/banks-client/Cargo.toml index 9ae21a4cc88dc6..a55c1ec7784fc9 100644 --- a/banks-client/Cargo.toml +++ b/banks-client/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-banks-client" -version = "1.14.15" +version = "1.14.16" description = "Solana banks client" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,17 +12,17 @@ edition = "2021" [dependencies] borsh = "0.9.3" futures = "0.3" -solana-banks-interface = { path = "../banks-interface", version = "=1.14.15" } -solana-program = { path = "../sdk/program", version = "=1.14.15" } -solana-sdk = { path = "../sdk", version = "=1.14.15" } +solana-banks-interface = { path = "../banks-interface", version = "=1.14.16" } +solana-program = { path = "../sdk/program", version = "=1.14.16" } +solana-sdk = { path = "../sdk", version = "=1.14.16" } tarpc = { version = "0.29.0", features = ["full"] } thiserror = "1.0" tokio = { version = "~1.14.1", features = ["full"] } tokio-serde = { version = "0.8", features = ["bincode"] } [dev-dependencies] -solana-banks-server = { path = "../banks-server", version = "=1.14.15" } -solana-runtime = { path = "../runtime", version = "=1.14.15" } +solana-banks-server = { path = "../banks-server", version = "=1.14.16" } +solana-runtime = { path = "../runtime", version = "=1.14.16" } [lib] crate-type = ["lib"] diff --git a/banks-interface/Cargo.toml b/banks-interface/Cargo.toml index 1f6fc53e6b9a66..d37b668f687be4 100644 --- a/banks-interface/Cargo.toml +++ b/banks-interface/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-banks-interface" -version = "1.14.15" +version = "1.14.16" description = "Solana banks RPC interface" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -11,7 +11,7 @@ edition = "2021" [dependencies] serde = { version = "1.0.138", features = ["derive"] } -solana-sdk = { path = "../sdk", version = "=1.14.15" } +solana-sdk = { path = "../sdk", version = "=1.14.16" } tarpc = { version = "0.29.0", features = ["full"] } [lib] diff --git a/banks-server/Cargo.toml b/banks-server/Cargo.toml index 6445cbd47bb6f5..81aa3d4a99ae38 100644 --- a/banks-server/Cargo.toml +++ b/banks-server/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-banks-server" -version = "1.14.15" +version = "1.14.16" description = "Solana banks server" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,11 +13,11 @@ edition = "2021" bincode = "1.3.3" crossbeam-channel = "0.5" futures = "0.3" -solana-banks-interface = { path = "../banks-interface", version = "=1.14.15" } -solana-client = { path = "../client", version = "=1.14.15" } -solana-runtime = { path = "../runtime", version = "=1.14.15" } -solana-sdk = { path = "../sdk", version = "=1.14.15" } -solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.15" } +solana-banks-interface = { path = "../banks-interface", version = "=1.14.16" } +solana-client = { path = "../client", version = "=1.14.16" } +solana-runtime = { path = "../runtime", version = "=1.14.16" } +solana-sdk = { path = "../sdk", version = "=1.14.16" } +solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.16" } tarpc = { version = "0.29.0", features = ["full"] } tokio = { version = "1", features = ["full"] } tokio-serde = { version = "0.8", features = ["bincode"] } diff --git a/bench-streamer/Cargo.toml b/bench-streamer/Cargo.toml index 3c87a1a1894492..e6ef015256c75d 100644 --- a/bench-streamer/Cargo.toml +++ b/bench-streamer/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-bench-streamer" -version = "1.14.15" +version = "1.14.16" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -11,9 +11,9 @@ publish = false [dependencies] clap = { version = "3.1.5", features = ["cargo"] } crossbeam-channel = "0.5" -solana-net-utils = { path = "../net-utils", version = "=1.14.15" } -solana-streamer = { path = "../streamer", version = "=1.14.15" } -solana-version = { path = "../version", version = "=1.14.15" } +solana-net-utils = { path = "../net-utils", version = "=1.14.16" } +solana-streamer = { path = "../streamer", version = "=1.14.16" } +solana-version = { path = "../version", version = "=1.14.16" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/bench-tps/Cargo.toml b/bench-tps/Cargo.toml index 47a635aff63b1e..34c9fc9f19228d 100644 --- a/bench-tps/Cargo.toml +++ b/bench-tps/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-bench-tps" -version = "1.14.15" +version = "1.14.16" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -15,28 +15,28 @@ log = "0.4.17" rayon = "1.5.3" serde_json = "1.0.81" serde_yaml = "0.8.26" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.15" } -solana-cli-config = { path = "../cli-config", version = "=1.14.15" } -solana-client = { path = "../client", version = "=1.14.15" } -solana-core = { path = "../core", version = "=1.14.15" } -solana-faucet = { path = "../faucet", version = "=1.14.15" } -solana-genesis = { path = "../genesis", version = "=1.14.15" } -solana-gossip = { path = "../gossip", version = "=1.14.15" } -solana-logger = { path = "../logger", version = "=1.14.15" } -solana-measure = { path = "../measure", version = "=1.14.15" } -solana-metrics = { path = "../metrics", version = "=1.14.15" } -solana-net-utils = { path = "../net-utils", version = "=1.14.15" } -solana-rpc = { path = "../rpc", version = "=1.14.15" } -solana-runtime = { path = "../runtime", version = "=1.14.15" } -solana-sdk = { path = "../sdk", version = "=1.14.15" } -solana-streamer = { path = "../streamer", version = "=1.14.15" } -solana-version = { path = "../version", version = "=1.14.15" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.16" } +solana-cli-config = { path = "../cli-config", version = "=1.14.16" } +solana-client = { path = "../client", version = "=1.14.16" } +solana-core = { path = "../core", version = "=1.14.16" } +solana-faucet = { path = "../faucet", version = "=1.14.16" } +solana-genesis = { path = "../genesis", version = "=1.14.16" } +solana-gossip = { path = "../gossip", version = "=1.14.16" } +solana-logger = { path = "../logger", version = "=1.14.16" } +solana-measure = { path = "../measure", version = "=1.14.16" } +solana-metrics = { path = "../metrics", version = "=1.14.16" } +solana-net-utils = { path = "../net-utils", version = "=1.14.16" } +solana-rpc = { path = "../rpc", version = "=1.14.16" } +solana-runtime = { path = "../runtime", version = "=1.14.16" } +solana-sdk = { path = "../sdk", version = "=1.14.16" } +solana-streamer = { path = "../streamer", version = "=1.14.16" } +solana-version = { path = "../version", version = "=1.14.16" } thiserror = "1.0" [dev-dependencies] serial_test = "0.8.0" -solana-local-cluster = { path = "../local-cluster", version = "=1.14.15" } -solana-test-validator = { path = "../test-validator", version = "=1.14.15" } +solana-local-cluster = { path = "../local-cluster", version = "=1.14.16" } +solana-test-validator = { path = "../test-validator", version = "=1.14.16" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/bloom/Cargo.toml b/bloom/Cargo.toml index 566970d3944463..6c32e06c578a0a 100644 --- a/bloom/Cargo.toml +++ b/bloom/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bloom" -version = "1.14.15" +version = "1.14.16" description = "Solana bloom filter" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -17,9 +17,9 @@ rand = "0.7.0" rayon = "1.5.3" serde = { version = "1.0.138", features = ["rc"] } serde_derive = "1.0.103" -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.15" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.15" } -solana-sdk = { path = "../sdk", version = "=1.14.15" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.16" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.16" } +solana-sdk = { path = "../sdk", version = "=1.14.16" } [lib] crate-type = ["lib"] diff --git a/bucket_map/Cargo.toml b/bucket_map/Cargo.toml index 4bbbcaceea1528..195b4a9172c50f 100644 --- a/bucket_map/Cargo.toml +++ b/bucket_map/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bucket-map" -version = "1.14.15" +version = "1.14.16" description = "solana-bucket-map" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-bucket-map" @@ -15,14 +15,14 @@ log = { version = "0.4.17" } memmap2 = "0.5.3" modular-bitfield = "0.11.2" rand = "0.7.0" -solana-measure = { path = "../measure", version = "=1.14.15" } -solana-sdk = { path = "../sdk", version = "=1.14.15" } +solana-measure = { path = "../measure", version = "=1.14.16" } +solana-sdk = { path = "../sdk", version = "=1.14.16" } tempfile = "3.3.0" [dev-dependencies] fs_extra = "1.2.0" rayon = "1.5.3" -solana-logger = { path = "../logger", version = "=1.14.15" } +solana-logger = { path = "../logger", version = "=1.14.16" } [lib] crate-type = ["lib"] diff --git a/clap-utils/Cargo.toml b/clap-utils/Cargo.toml index a88f6988ebc443..c7c6935c557aa7 100644 --- a/clap-utils/Cargo.toml +++ b/clap-utils/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-clap-utils" -version = "1.14.15" +version = "1.14.16" description = "Solana utilities for the clap" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,9 +13,9 @@ edition = "2021" chrono = "0.4" clap = "2.33.0" rpassword = "6.0" -solana-perf = { path = "../perf", version = "=1.14.15" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.15", default-features = false } -solana-sdk = { path = "../sdk", version = "=1.14.15" } +solana-perf = { path = "../perf", version = "=1.14.16" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.16", default-features = false } +solana-sdk = { path = "../sdk", version = "=1.14.16" } thiserror = "1.0.31" tiny-bip39 = "0.8.2" uriparse = "0.6.4" diff --git a/clap-v3-utils/Cargo.toml b/clap-v3-utils/Cargo.toml index 6effd299d7edc4..a8600de9d49c71 100644 --- a/clap-v3-utils/Cargo.toml +++ b/clap-v3-utils/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-clap-v3-utils" -version = "1.14.15" +version = "1.14.16" description = "Solana utilities for the clap v3" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,9 +13,9 @@ edition = "2021" chrono = "0.4" clap = { version = "3.1.5", features = ["cargo"] } rpassword = "6.0" -solana-perf = { path = "../perf", version = "=1.14.15" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.15", default-features = false } -solana-sdk = { path = "../sdk", version = "=1.14.15" } +solana-perf = { path = "../perf", version = "=1.14.16" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.16", default-features = false } +solana-sdk = { path = "../sdk", version = "=1.14.16" } thiserror = "1.0.31" tiny-bip39 = "0.8.2" uriparse = "0.6.4" diff --git a/cli-config/Cargo.toml b/cli-config/Cargo.toml index b3fcca3dd0f691..3234a0b71956c9 100644 --- a/cli-config/Cargo.toml +++ b/cli-config/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-cli-config" description = "Blockchain, Rebuilt for Scale" -version = "1.14.15" +version = "1.14.16" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -15,8 +15,8 @@ lazy_static = "1.4.0" serde = "1.0.138" serde_derive = "1.0.103" serde_yaml = "0.8.26" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.15" } -solana-sdk = { path = "../sdk", version = "=1.14.15" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.16" } +solana-sdk = { path = "../sdk", version = "=1.14.16" } url = "2.2.2" [dev-dependencies] diff --git a/cli-output/Cargo.toml b/cli-output/Cargo.toml index f752b64dc9abab..6ee58b60132128 100644 --- a/cli-output/Cargo.toml +++ b/cli-output/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-cli-output" description = "Blockchain, Rebuilt for Scale" -version = "1.14.15" +version = "1.14.16" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -21,13 +21,13 @@ pretty-hex = "0.3.0" semver = "1.0.10" serde = "1.0.138" serde_json = "1.0.81" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.15" } -solana-clap-utils = { path = "../clap-utils", version = "=1.14.15" } -solana-cli-config = { path = "../cli-config", version = "=1.14.15" } -solana-client = { path = "../client", version = "=1.14.15" } -solana-sdk = { path = "../sdk", version = "=1.14.15" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.15" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.15" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.16" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.16" } +solana-cli-config = { path = "../cli-config", version = "=1.14.16" } +solana-client = { path = "../client", version = "=1.14.16" } +solana-sdk = { path = "../sdk", version = "=1.14.16" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.16" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.16" } spl-memo = { version = "=3.0.1", features = ["no-entrypoint"] } [dev-dependencies] diff --git a/cli/Cargo.toml b/cli/Cargo.toml index 146a7d2a145b46..3c4643936b9b08 100644 --- a/cli/Cargo.toml +++ b/cli/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-cli" description = "Blockchain, Rebuilt for Scale" -version = "1.14.15" +version = "1.14.16" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -27,30 +27,30 @@ semver = "1.0.10" serde = "1.0.138" serde_derive = "1.0.103" serde_json = "1.0.81" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.15" } -solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.15" } -solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.15" } -solana-clap-utils = { path = "../clap-utils", version = "=1.14.15" } -solana-cli-config = { path = "../cli-config", version = "=1.14.15" } -solana-cli-output = { path = "../cli-output", version = "=1.14.15" } -solana-client = { path = "../client", version = "=1.14.15" } -solana-config-program = { path = "../programs/config", version = "=1.14.15" } -solana-faucet = { path = "../faucet", version = "=1.14.15" } -solana-logger = { path = "../logger", version = "=1.14.15" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.15" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.15" } -solana-sdk = { path = "../sdk", version = "=1.14.15" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.15" } -solana-version = { path = "../version", version = "=1.14.15" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.15" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.16" } +solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.16" } +solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.16" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.16" } +solana-cli-config = { path = "../cli-config", version = "=1.14.16" } +solana-cli-output = { path = "../cli-output", version = "=1.14.16" } +solana-client = { path = "../client", version = "=1.14.16" } +solana-config-program = { path = "../programs/config", version = "=1.14.16" } +solana-faucet = { path = "../faucet", version = "=1.14.16" } +solana-logger = { path = "../logger", version = "=1.14.16" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.16" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.16" } +solana-sdk = { path = "../sdk", version = "=1.14.16" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.16" } +solana-version = { path = "../version", version = "=1.14.16" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.16" } solana_rbpf = "=0.2.31" spl-memo = { version = "=3.0.1", features = ["no-entrypoint"] } thiserror = "1.0.31" tiny-bip39 = "0.8.2" [dev-dependencies] -solana-streamer = { path = "../streamer", version = "=1.14.15" } -solana-test-validator = { path = "../test-validator", version = "=1.14.15" } +solana-streamer = { path = "../streamer", version = "=1.14.16" } +solana-test-validator = { path = "../test-validator", version = "=1.14.16" } tempfile = "3.3.0" [[bin]] diff --git a/client-test/Cargo.toml b/client-test/Cargo.toml index 6ce0e17131927c..90540d0984eee0 100644 --- a/client-test/Cargo.toml +++ b/client-test/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-client-test" -version = "1.14.15" +version = "1.14.16" description = "Solana RPC Test" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,25 +14,25 @@ publish = false futures-util = "0.3.21" serde_json = "1.0.81" serial_test = "0.8.0" -solana-client = { path = "../client", version = "=1.14.15" } -solana-ledger = { path = "../ledger", version = "=1.14.15" } -solana-measure = { path = "../measure", version = "=1.14.15" } -solana-merkle-tree = { path = "../merkle-tree", version = "=1.14.15" } -solana-metrics = { path = "../metrics", version = "=1.14.15" } -solana-perf = { path = "../perf", version = "=1.14.15" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.15" } -solana-rpc = { path = "../rpc", version = "=1.14.15" } -solana-runtime = { path = "../runtime", version = "=1.14.15" } -solana-sdk = { path = "../sdk", version = "=1.14.15" } -solana-streamer = { path = "../streamer", version = "=1.14.15" } -solana-test-validator = { path = "../test-validator", version = "=1.14.15" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.15" } -solana-version = { path = "../version", version = "=1.14.15" } +solana-client = { path = "../client", version = "=1.14.16" } +solana-ledger = { path = "../ledger", version = "=1.14.16" } +solana-measure = { path = "../measure", version = "=1.14.16" } +solana-merkle-tree = { path = "../merkle-tree", version = "=1.14.16" } +solana-metrics = { path = "../metrics", version = "=1.14.16" } +solana-perf = { path = "../perf", version = "=1.14.16" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.16" } +solana-rpc = { path = "../rpc", version = "=1.14.16" } +solana-runtime = { path = "../runtime", version = "=1.14.16" } +solana-sdk = { path = "../sdk", version = "=1.14.16" } +solana-streamer = { path = "../streamer", version = "=1.14.16" } +solana-test-validator = { path = "../test-validator", version = "=1.14.16" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.16" } +solana-version = { path = "../version", version = "=1.14.16" } systemstat = "0.1.11" tokio = { version = "~1.14.1", features = ["full"] } [dev-dependencies] -solana-logger = { path = "../logger", version = "=1.14.15" } +solana-logger = { path = "../logger", version = "=1.14.16" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/client/Cargo.toml b/client/Cargo.toml index 24b839328c2622..9950a69d92c021 100644 --- a/client/Cargo.toml +++ b/client/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-client" -version = "1.14.15" +version = "1.14.16" description = "Solana Client" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -38,17 +38,17 @@ semver = "1.0.10" serde = "1.0.138" serde_derive = "1.0.103" serde_json = "1.0.81" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.15" } -solana-clap-utils = { path = "../clap-utils", version = "=1.14.15" } -solana-faucet = { path = "../faucet", version = "=1.14.15" } -solana-measure = { path = "../measure", version = "=1.14.15" } -solana-metrics = { path = "../metrics", version = "=1.14.15" } -solana-net-utils = { path = "../net-utils", version = "=1.14.15" } -solana-sdk = { path = "../sdk", version = "=1.14.15" } -solana-streamer = { path = "../streamer", version = "=1.14.15" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.15" } -solana-version = { path = "../version", version = "=1.14.15" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.15" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.16" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.16" } +solana-faucet = { path = "../faucet", version = "=1.14.16" } +solana-measure = { path = "../measure", version = "=1.14.16" } +solana-metrics = { path = "../metrics", version = "=1.14.16" } +solana-net-utils = { path = "../net-utils", version = "=1.14.16" } +solana-sdk = { path = "../sdk", version = "=1.14.16" } +solana-streamer = { path = "../streamer", version = "=1.14.16" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.16" } +solana-version = { path = "../version", version = "=1.14.16" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.16" } spl-token-2022 = { version = "=0.5.0", features = ["no-entrypoint"] } thiserror = "1.0" tokio = { version = "1", features = ["full"] } @@ -61,8 +61,8 @@ url = "2.2.2" anyhow = "1.0.58" assert_matches = "1.5.0" jsonrpc-http-server = "18.0.0" -solana-logger = { path = "../logger", version = "=1.14.15" } -solana-perf = { path = "../perf", version = "=1.14.15" } +solana-logger = { path = "../logger", version = "=1.14.16" } +solana-perf = { path = "../perf", version = "=1.14.16" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/core/Cargo.toml b/core/Cargo.toml index 45bf66ee706770..186a1ed9c0ae6d 100644 --- a/core/Cargo.toml +++ b/core/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "solana-core" description = "Blockchain, Rebuilt for Scale" -version = "1.14.15" +version = "1.14.16" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-core" readme = "../README.md" @@ -36,30 +36,30 @@ rand_chacha = "0.2.2" rayon = "1.5.3" serde = "1.0.138" serde_derive = "1.0.103" -solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.15" } -solana-bloom = { path = "../bloom", version = "=1.14.15" } -solana-client = { path = "../client", version = "=1.14.15" } -solana-entry = { path = "../entry", version = "=1.14.15" } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.15" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.15" } -solana-geyser-plugin-manager = { path = "../geyser-plugin-manager", version = "=1.14.15" } -solana-gossip = { path = "../gossip", version = "=1.14.15" } -solana-ledger = { path = "../ledger", version = "=1.14.15" } -solana-measure = { path = "../measure", version = "=1.14.15" } -solana-metrics = { path = "../metrics", version = "=1.14.15" } -solana-net-utils = { path = "../net-utils", version = "=1.14.15" } -solana-perf = { path = "../perf", version = "=1.14.15" } -solana-poh = { path = "../poh", version = "=1.14.15" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.15" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.15" } -solana-rpc = { path = "../rpc", version = "=1.14.15" } -solana-runtime = { path = "../runtime", version = "=1.14.15" } -solana-sdk = { path = "../sdk", version = "=1.14.15" } -solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.15" } -solana-streamer = { path = "../streamer", version = "=1.14.15" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.15" } -solana-version = { path = "../version", version = "=1.14.15" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.15" } +solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.16" } +solana-bloom = { path = "../bloom", version = "=1.14.16" } +solana-client = { path = "../client", version = "=1.14.16" } +solana-entry = { path = "../entry", version = "=1.14.16" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.16" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.16" } +solana-geyser-plugin-manager = { path = "../geyser-plugin-manager", version = "=1.14.16" } +solana-gossip = { path = "../gossip", version = "=1.14.16" } +solana-ledger = { path = "../ledger", version = "=1.14.16" } +solana-measure = { path = "../measure", version = "=1.14.16" } +solana-metrics = { path = "../metrics", version = "=1.14.16" } +solana-net-utils = { path = "../net-utils", version = "=1.14.16" } +solana-perf = { path = "../perf", version = "=1.14.16" } +solana-poh = { path = "../poh", version = "=1.14.16" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.16" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.16" } +solana-rpc = { path = "../rpc", version = "=1.14.16" } +solana-runtime = { path = "../runtime", version = "=1.14.16" } +solana-sdk = { path = "../sdk", version = "=1.14.16" } +solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.16" } +solana-streamer = { path = "../streamer", version = "=1.14.16" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.16" } +solana-version = { path = "../version", version = "=1.14.16" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.16" } sys-info = "0.9.1" tempfile = "3.3.0" thiserror = "1.0" @@ -71,9 +71,9 @@ matches = "0.1.9" raptorq = "1.7.0" serde_json = "1.0.81" serial_test = "0.8.0" -solana-logger = { path = "../logger", version = "=1.14.15" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.15" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.15" } +solana-logger = { path = "../logger", version = "=1.14.16" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.16" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.16" } static_assertions = "1.1.0" systemstat = "0.1.11" test-case = "2.1.0" diff --git a/dos/Cargo.toml b/dos/Cargo.toml index f8a8832a3a9723..151c2d0ffdfb96 100644 --- a/dos/Cargo.toml +++ b/dos/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-dos" -version = "1.14.15" +version = "1.14.16" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -17,23 +17,23 @@ itertools = "0.10.3" log = "0.4.17" rand = "0.7.0" serde = "1.0.138" -solana-bench-tps = { path = "../bench-tps", version = "=1.14.15" } -solana-client = { path = "../client", version = "=1.14.15" } -solana-core = { path = "../core", version = "=1.14.15" } -solana-faucet = { path = "../faucet", version = "=1.14.15" } -solana-gossip = { path = "../gossip", version = "=1.14.15" } -solana-logger = { path = "../logger", version = "=1.14.15" } -solana-measure = { path = "../measure", version = "=1.14.15" } -solana-net-utils = { path = "../net-utils", version = "=1.14.15" } -solana-perf = { path = "../perf", version = "=1.14.15" } -solana-rpc = { path = "../rpc", version = "=1.14.15" } -solana-sdk = { path = "../sdk", version = "=1.14.15" } -solana-streamer = { path = "../streamer", version = "=1.14.15" } -solana-version = { path = "../version", version = "=1.14.15" } +solana-bench-tps = { path = "../bench-tps", version = "=1.14.16" } +solana-client = { path = "../client", version = "=1.14.16" } +solana-core = { path = "../core", version = "=1.14.16" } +solana-faucet = { path = "../faucet", version = "=1.14.16" } +solana-gossip = { path = "../gossip", version = "=1.14.16" } +solana-logger = { path = "../logger", version = "=1.14.16" } +solana-measure = { path = "../measure", version = "=1.14.16" } +solana-net-utils = { path = "../net-utils", version = "=1.14.16" } +solana-perf = { path = "../perf", version = "=1.14.16" } +solana-rpc = { path = "../rpc", version = "=1.14.16" } +solana-sdk = { path = "../sdk", version = "=1.14.16" } +solana-streamer = { path = "../streamer", version = "=1.14.16" } +solana-version = { path = "../version", version = "=1.14.16" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] [dev-dependencies] serial_test = "0.8.0" -solana-local-cluster = { path = "../local-cluster", version = "=1.14.15" } +solana-local-cluster = { path = "../local-cluster", version = "=1.14.16" } diff --git a/download-utils/Cargo.toml b/download-utils/Cargo.toml index 25e602518e8236..22e967b6263606 100644 --- a/download-utils/Cargo.toml +++ b/download-utils/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-download-utils" -version = "1.14.15" +version = "1.14.16" description = "Solana Download Utils" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,8 +14,8 @@ console = "0.15.0" indicatif = "0.16.2" log = "0.4.17" reqwest = { version = "0.11.11", default-features = false, features = ["blocking", "brotli", "deflate", "gzip", "rustls-tls", "json"] } -solana-runtime = { path = "../runtime", version = "=1.14.15" } -solana-sdk = { path = "../sdk", version = "=1.14.15" } +solana-runtime = { path = "../runtime", version = "=1.14.16" } +solana-sdk = { path = "../sdk", version = "=1.14.16" } [lib] crate-type = ["lib"] diff --git a/entry/Cargo.toml b/entry/Cargo.toml index 0ac67b27681256..1183a77d9cbbab 100644 --- a/entry/Cargo.toml +++ b/entry/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-entry" -version = "1.14.15" +version = "1.14.16" description = "Solana Entry" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -19,16 +19,16 @@ log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" serde = "1.0.138" -solana-measure = { path = "../measure", version = "=1.14.15" } -solana-merkle-tree = { path = "../merkle-tree", version = "=1.14.15" } -solana-metrics = { path = "../metrics", version = "=1.14.15" } -solana-perf = { path = "../perf", version = "=1.14.15" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.15" } -solana-sdk = { path = "../sdk", version = "=1.14.15" } +solana-measure = { path = "../measure", version = "=1.14.16" } +solana-merkle-tree = { path = "../merkle-tree", version = "=1.14.16" } +solana-metrics = { path = "../metrics", version = "=1.14.16" } +solana-perf = { path = "../perf", version = "=1.14.16" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.16" } +solana-sdk = { path = "../sdk", version = "=1.14.16" } [dev-dependencies] matches = "0.1.9" -solana-logger = { path = "../logger", version = "=1.14.15" } +solana-logger = { path = "../logger", version = "=1.14.16" } [lib] crate-type = ["lib"] diff --git a/faucet/Cargo.toml b/faucet/Cargo.toml index b0f57b9c212ce1..a85ab5a3956457 100644 --- a/faucet/Cargo.toml +++ b/faucet/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-faucet" -version = "1.14.15" +version = "1.14.16" description = "Solana Faucet" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -17,12 +17,12 @@ crossbeam-channel = "0.5" log = "0.4.17" serde = "1.0.138" serde_derive = "1.0.103" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.15" } -solana-cli-config = { path = "../cli-config", version = "=1.14.15" } -solana-logger = { path = "../logger", version = "=1.14.15" } -solana-metrics = { path = "../metrics", version = "=1.14.15" } -solana-sdk = { path = "../sdk", version = "=1.14.15" } -solana-version = { path = "../version", version = "=1.14.15" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.16" } +solana-cli-config = { path = "../cli-config", version = "=1.14.16" } +solana-logger = { path = "../logger", version = "=1.14.16" } +solana-metrics = { path = "../metrics", version = "=1.14.16" } +solana-sdk = { path = "../sdk", version = "=1.14.16" } +solana-version = { path = "../version", version = "=1.14.16" } spl-memo = { version = "=3.0.1", features = ["no-entrypoint"] } thiserror = "1.0" tokio = { version = "1", features = ["full"] } diff --git a/frozen-abi/Cargo.toml b/frozen-abi/Cargo.toml index 8ae89445bf9cbc..2443de3541d534 100644 --- a/frozen-abi/Cargo.toml +++ b/frozen-abi/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-frozen-abi" -version = "1.14.15" +version = "1.14.16" description = "Solana Frozen ABI" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -20,7 +20,7 @@ serde_bytes = "0.11" serde_derive = "1.0" serde_json = "1.0" sha2 = "0.10.2" -solana-frozen-abi-macro = { path = "macro", version = "=1.14.15" } +solana-frozen-abi-macro = { path = "macro", version = "=1.14.16" } thiserror = "1.0" [target.'cfg(not(target_os = "solana"))'.dependencies] @@ -43,7 +43,7 @@ rand_core = { version = "0.6.3", features = ["alloc", "getrandom", "std"] } subtle = { version = "2.4.1", features = ["default", "i128", "std"] } [target.'cfg(not(target_os = "solana"))'.dev-dependencies] -solana-logger = { path = "../logger", version = "=1.14.15" } +solana-logger = { path = "../logger", version = "=1.14.16" } [build-dependencies] rustc_version = "0.4" diff --git a/frozen-abi/macro/Cargo.toml b/frozen-abi/macro/Cargo.toml index 18736e5802bc88..059420c8db5663 100644 --- a/frozen-abi/macro/Cargo.toml +++ b/frozen-abi/macro/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-frozen-abi-macro" -version = "1.14.15" +version = "1.14.16" description = "Solana Frozen ABI Macro" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/genesis-utils/Cargo.toml b/genesis-utils/Cargo.toml index 555ee68bdcd490..7ec510647f74bd 100644 --- a/genesis-utils/Cargo.toml +++ b/genesis-utils/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-genesis-utils" -version = "1.14.15" +version = "1.14.16" description = "Solana Genesis Utils" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,9 +10,9 @@ documentation = "https://docs.rs/solana-download-utils" edition = "2021" [dependencies] -solana-download-utils = { path = "../download-utils", version = "=1.14.15" } -solana-runtime = { path = "../runtime", version = "=1.14.15" } -solana-sdk = { path = "../sdk", version = "=1.14.15" } +solana-download-utils = { path = "../download-utils", version = "=1.14.16" } +solana-runtime = { path = "../runtime", version = "=1.14.16" } +solana-sdk = { path = "../sdk", version = "=1.14.16" } [lib] crate-type = ["lib"] diff --git a/genesis/Cargo.toml b/genesis/Cargo.toml index d96c28dc017f34..b9e4448967c5db 100644 --- a/genesis/Cargo.toml +++ b/genesis/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-genesis" description = "Blockchain, Rebuilt for Scale" -version = "1.14.15" +version = "1.14.16" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -15,16 +15,16 @@ clap = "2.33.1" serde = "1.0.138" serde_json = "1.0.81" serde_yaml = "0.8.26" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.15" } -solana-cli-config = { path = "../cli-config", version = "=1.14.15" } -solana-entry = { path = "../entry", version = "=1.14.15" } -solana-ledger = { path = "../ledger", version = "=1.14.15" } -solana-logger = { path = "../logger", version = "=1.14.15" } -solana-runtime = { path = "../runtime", version = "=1.14.15" } -solana-sdk = { path = "../sdk", version = "=1.14.15" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.15" } -solana-version = { path = "../version", version = "=1.14.15" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.15" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.16" } +solana-cli-config = { path = "../cli-config", version = "=1.14.16" } +solana-entry = { path = "../entry", version = "=1.14.16" } +solana-ledger = { path = "../ledger", version = "=1.14.16" } +solana-logger = { path = "../logger", version = "=1.14.16" } +solana-runtime = { path = "../runtime", version = "=1.14.16" } +solana-sdk = { path = "../sdk", version = "=1.14.16" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.16" } +solana-version = { path = "../version", version = "=1.14.16" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.16" } tempfile = "3.3.0" [[bin]] diff --git a/geyser-plugin-interface/Cargo.toml b/geyser-plugin-interface/Cargo.toml index 1fcda27f43da03..3dc37df68b596b 100644 --- a/geyser-plugin-interface/Cargo.toml +++ b/geyser-plugin-interface/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-geyser-plugin-interface" description = "The Solana Geyser plugin interface." -version = "1.14.15" +version = "1.14.16" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -11,8 +11,8 @@ documentation = "https://docs.rs/solana-geyser-plugin-interface" [dependencies] log = "0.4.17" -solana-sdk = { path = "../sdk", version = "=1.14.15" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.15" } +solana-sdk = { path = "../sdk", version = "=1.14.16" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.16" } thiserror = "1.0.31" [package.metadata.docs.rs] diff --git a/geyser-plugin-manager/Cargo.toml b/geyser-plugin-manager/Cargo.toml index bd5a52184dd7d3..66a430cdcb863b 100644 --- a/geyser-plugin-manager/Cargo.toml +++ b/geyser-plugin-manager/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-geyser-plugin-manager" description = "The Solana Geyser plugin manager." -version = "1.14.15" +version = "1.14.16" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -16,13 +16,13 @@ json5 = "0.4.1" libloading = "0.7.3" log = "0.4.17" serde_json = "1.0.81" -solana-geyser-plugin-interface = { path = "../geyser-plugin-interface", version = "=1.14.15" } -solana-measure = { path = "../measure", version = "=1.14.15" } -solana-metrics = { path = "../metrics", version = "=1.14.15" } -solana-rpc = { path = "../rpc", version = "=1.14.15" } -solana-runtime = { path = "../runtime", version = "=1.14.15" } -solana-sdk = { path = "../sdk", version = "=1.14.15" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.15" } +solana-geyser-plugin-interface = { path = "../geyser-plugin-interface", version = "=1.14.16" } +solana-measure = { path = "../measure", version = "=1.14.16" } +solana-metrics = { path = "../metrics", version = "=1.14.16" } +solana-rpc = { path = "../rpc", version = "=1.14.16" } +solana-runtime = { path = "../runtime", version = "=1.14.16" } +solana-sdk = { path = "../sdk", version = "=1.14.16" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.16" } thiserror = "1.0.31" [package.metadata.docs.rs] diff --git a/gossip/Cargo.toml b/gossip/Cargo.toml index 9488d0154f5db8..9b8ac740dcdd64 100644 --- a/gossip/Cargo.toml +++ b/gossip/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-gossip" description = "Blockchain, Rebuilt for Scale" -version = "1.14.15" +version = "1.14.16" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -27,24 +27,24 @@ rayon = "1.5.3" serde = "1.0.138" serde_bytes = "0.11" serde_derive = "1.0.103" -solana-bloom = { path = "../bloom", version = "=1.14.15" } -solana-clap-utils = { path = "../clap-utils", version = "=1.14.15" } -solana-client = { path = "../client", version = "=1.14.15" } -solana-entry = { path = "../entry", version = "=1.14.15" } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.15" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.15" } -solana-ledger = { path = "../ledger", version = "=1.14.15" } -solana-logger = { path = "../logger", version = "=1.14.15" } -solana-measure = { path = "../measure", version = "=1.14.15" } -solana-metrics = { path = "../metrics", version = "=1.14.15" } -solana-net-utils = { path = "../net-utils", version = "=1.14.15" } -solana-perf = { path = "../perf", version = "=1.14.15" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.15" } -solana-runtime = { path = "../runtime", version = "=1.14.15" } -solana-sdk = { path = "../sdk", version = "=1.14.15" } -solana-streamer = { path = "../streamer", version = "=1.14.15" } -solana-version = { path = "../version", version = "=1.14.15" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.15" } +solana-bloom = { path = "../bloom", version = "=1.14.16" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.16" } +solana-client = { path = "../client", version = "=1.14.16" } +solana-entry = { path = "../entry", version = "=1.14.16" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.16" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.16" } +solana-ledger = { path = "../ledger", version = "=1.14.16" } +solana-logger = { path = "../logger", version = "=1.14.16" } +solana-measure = { path = "../measure", version = "=1.14.16" } +solana-metrics = { path = "../metrics", version = "=1.14.16" } +solana-net-utils = { path = "../net-utils", version = "=1.14.16" } +solana-perf = { path = "../perf", version = "=1.14.16" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.16" } +solana-runtime = { path = "../runtime", version = "=1.14.16" } +solana-sdk = { path = "../sdk", version = "=1.14.16" } +solana-streamer = { path = "../streamer", version = "=1.14.16" } +solana-version = { path = "../version", version = "=1.14.16" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.16" } thiserror = "1.0" [dev-dependencies] diff --git a/install/Cargo.toml b/install/Cargo.toml index af1419cf8ae3c5..e40239791d74a7 100644 --- a/install/Cargo.toml +++ b/install/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-install" description = "The solana cluster software installer" -version = "1.14.15" +version = "1.14.16" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -26,12 +26,12 @@ reqwest = { version = "0.11.11", default-features = false, features = ["blocking semver = "1.0.10" serde = { version = "1.0.138", features = ["derive"] } serde_yaml = "0.8.26" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.15" } -solana-client = { path = "../client", version = "=1.14.15" } -solana-config-program = { path = "../programs/config", version = "=1.14.15" } -solana-logger = { path = "../logger", version = "=1.14.15" } -solana-sdk = { path = "../sdk", version = "=1.14.15" } -solana-version = { path = "../version", version = "=1.14.15" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.16" } +solana-client = { path = "../client", version = "=1.14.16" } +solana-config-program = { path = "../programs/config", version = "=1.14.16" } +solana-logger = { path = "../logger", version = "=1.14.16" } +solana-sdk = { path = "../sdk", version = "=1.14.16" } +solana-version = { path = "../version", version = "=1.14.16" } tar = "0.4.38" tempfile = "3.3.0" url = "2.2.2" diff --git a/keygen/Cargo.toml b/keygen/Cargo.toml index 4003d404d0ce83..590f925c6331ec 100644 --- a/keygen/Cargo.toml +++ b/keygen/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-keygen" -version = "1.14.15" +version = "1.14.16" description = "Solana key generation utility" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,11 +14,11 @@ bs58 = "0.4.0" clap = { version = "3.1.5", features = ["cargo"] } dirs-next = "2.0.0" num_cpus = "1.13.1" -solana-clap-v3-utils = { path = "../clap-v3-utils", version = "=1.14.15" } -solana-cli-config = { path = "../cli-config", version = "=1.14.15" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.15" } -solana-sdk = { path = "../sdk", version = "=1.14.15" } -solana-version = { path = "../version", version = "=1.14.15" } +solana-clap-v3-utils = { path = "../clap-v3-utils", version = "=1.14.16" } +solana-cli-config = { path = "../cli-config", version = "=1.14.16" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.16" } +solana-sdk = { path = "../sdk", version = "=1.14.16" } +solana-version = { path = "../version", version = "=1.14.16" } tiny-bip39 = "0.8.2" [[bin]] diff --git a/ledger-tool/Cargo.toml b/ledger-tool/Cargo.toml index 1234cc18ada8bb..e0baedec38a671 100644 --- a/ledger-tool/Cargo.toml +++ b/ledger-tool/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-ledger-tool" description = "Blockchain, Rebuilt for Scale" -version = "1.14.15" +version = "1.14.16" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -22,20 +22,20 @@ log = { version = "0.4.17" } regex = "1" serde = { version = "1.0", features = ["derive"] } serde_json = "1.0.81" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.15" } -solana-cli-output = { path = "../cli-output", version = "=1.14.15" } -solana-core = { path = "../core", version = "=1.14.15" } -solana-entry = { path = "../entry", version = "=1.14.15" } -solana-ledger = { path = "../ledger", version = "=1.14.15" } -solana-logger = { path = "../logger", version = "=1.14.15" } -solana-measure = { path = "../measure", version = "=1.14.15" } -solana-runtime = { path = "../runtime", version = "=1.14.15" } -solana-sdk = { path = "../sdk", version = "=1.14.15" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.15" } -solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.15" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.15" } -solana-version = { path = "../version", version = "=1.14.15" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.15" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.16" } +solana-cli-output = { path = "../cli-output", version = "=1.14.16" } +solana-core = { path = "../core", version = "=1.14.16" } +solana-entry = { path = "../entry", version = "=1.14.16" } +solana-ledger = { path = "../ledger", version = "=1.14.16" } +solana-logger = { path = "../logger", version = "=1.14.16" } +solana-measure = { path = "../measure", version = "=1.14.16" } +solana-runtime = { path = "../runtime", version = "=1.14.16" } +solana-sdk = { path = "../sdk", version = "=1.14.16" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.16" } +solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.16" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.16" } +solana-version = { path = "../version", version = "=1.14.16" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.16" } tokio = { version = "1", features = ["full"] } [target.'cfg(not(target_env = "msvc"))'.dependencies] diff --git a/ledger/Cargo.toml b/ledger/Cargo.toml index f9d85ab1994b5d..a445a4ed64f166 100644 --- a/ledger/Cargo.toml +++ b/ledger/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-ledger" -version = "1.14.15" +version = "1.14.16" description = "Solana ledger" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -35,23 +35,23 @@ reed-solomon-erasure = { version = "6.0.0", features = ["simd-accel"] } serde = "1.0.138" serde_bytes = "0.11.6" sha2 = "0.10.2" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.15" } -solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.15" } -solana-entry = { path = "../entry", version = "=1.14.15" } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.15" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.15" } -solana-measure = { path = "../measure", version = "=1.14.15" } -solana-metrics = { path = "../metrics", version = "=1.14.15" } -solana-perf = { path = "../perf", version = "=1.14.15" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.15" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.15" } -solana-runtime = { path = "../runtime", version = "=1.14.15" } -solana-sdk = { path = "../sdk", version = "=1.14.15" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.15" } -solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.15" } -solana-storage-proto = { path = "../storage-proto", version = "=1.14.15" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.15" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.15" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.16" } +solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.16" } +solana-entry = { path = "../entry", version = "=1.14.16" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.16" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.16" } +solana-measure = { path = "../measure", version = "=1.14.16" } +solana-metrics = { path = "../metrics", version = "=1.14.16" } +solana-perf = { path = "../perf", version = "=1.14.16" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.16" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.16" } +solana-runtime = { path = "../runtime", version = "=1.14.16" } +solana-sdk = { path = "../sdk", version = "=1.14.16" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.16" } +solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.16" } +solana-storage-proto = { path = "../storage-proto", version = "=1.14.16" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.16" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.16" } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } spl-token-2022 = { version = "=0.5.0", features = ["no-entrypoint"] } static_assertions = "1.1.0" @@ -71,8 +71,8 @@ features = ["lz4"] [dev-dependencies] bs58 = "0.4.0" matches = "0.1.9" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.15" } -solana-logger = { path = "../logger", version = "=1.14.15" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.16" } +solana-logger = { path = "../logger", version = "=1.14.16" } test-case = "2.1.0" [build-dependencies] diff --git a/local-cluster/Cargo.toml b/local-cluster/Cargo.toml index 5810ae87a5a72f..d600bed6f9fbca 100644 --- a/local-cluster/Cargo.toml +++ b/local-cluster/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-local-cluster" description = "Blockchain, Rebuilt for Scale" -version = "1.14.15" +version = "1.14.16" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -16,25 +16,25 @@ itertools = "0.10.3" log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" -solana-client = { path = "../client", version = "=1.14.15" } -solana-config-program = { path = "../programs/config", version = "=1.14.15" } -solana-core = { path = "../core", version = "=1.14.15" } -solana-entry = { path = "../entry", version = "=1.14.15" } -solana-gossip = { path = "../gossip", version = "=1.14.15" } -solana-ledger = { path = "../ledger", version = "=1.14.15" } -solana-runtime = { path = "../runtime", version = "=1.14.15" } -solana-sdk = { path = "../sdk", version = "=1.14.15" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.15" } -solana-streamer = { path = "../streamer", version = "=1.14.15" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.15" } +solana-client = { path = "../client", version = "=1.14.16" } +solana-config-program = { path = "../programs/config", version = "=1.14.16" } +solana-core = { path = "../core", version = "=1.14.16" } +solana-entry = { path = "../entry", version = "=1.14.16" } +solana-gossip = { path = "../gossip", version = "=1.14.16" } +solana-ledger = { path = "../ledger", version = "=1.14.16" } +solana-runtime = { path = "../runtime", version = "=1.14.16" } +solana-sdk = { path = "../sdk", version = "=1.14.16" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.16" } +solana-streamer = { path = "../streamer", version = "=1.14.16" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.16" } tempfile = "3.3.0" [dev-dependencies] assert_matches = "1.5.0" gag = "1.0.0" serial_test = "0.8.0" -solana-download-utils = { path = "../download-utils", version = "=1.14.15" } -solana-logger = { path = "../logger", version = "=1.14.15" } +solana-download-utils = { path = "../download-utils", version = "=1.14.16" } +solana-logger = { path = "../logger", version = "=1.14.16" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/log-analyzer/Cargo.toml b/log-analyzer/Cargo.toml index e9f6eb5de9b7e2..6e7e30f0a7fdc1 100644 --- a/log-analyzer/Cargo.toml +++ b/log-analyzer/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-log-analyzer" description = "The solana cluster network analysis tool" -version = "1.14.15" +version = "1.14.16" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,8 +14,8 @@ byte-unit = "4.0.14" clap = { version = "3.1.5", features = ["cargo"] } serde = "1.0.138" serde_json = "1.0.81" -solana-logger = { path = "../logger", version = "=1.14.15" } -solana-version = { path = "../version", version = "=1.14.15" } +solana-logger = { path = "../logger", version = "=1.14.16" } +solana-version = { path = "../version", version = "=1.14.16" } [[bin]] name = "solana-log-analyzer" diff --git a/logger/Cargo.toml b/logger/Cargo.toml index 8bcbfb93d118c7..48fc9fcfd95820 100644 --- a/logger/Cargo.toml +++ b/logger/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-logger" -version = "1.14.15" +version = "1.14.16" description = "Solana Logger" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/measure/Cargo.toml b/measure/Cargo.toml index 3d2d1499ef755b..5af09f6303c131 100644 --- a/measure/Cargo.toml +++ b/measure/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "solana-measure" description = "Blockchain, Rebuilt for Scale" -version = "1.14.15" +version = "1.14.16" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-measure" readme = "../README.md" @@ -12,7 +12,7 @@ edition = "2021" [dependencies] log = "0.4.17" -solana-sdk = { path = "../sdk", version = "=1.14.15" } +solana-sdk = { path = "../sdk", version = "=1.14.16" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/merkle-root-bench/Cargo.toml b/merkle-root-bench/Cargo.toml index c831cdce42a5ae..5327c40c7623eb 100644 --- a/merkle-root-bench/Cargo.toml +++ b/merkle-root-bench/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-merkle-root-bench" -version = "1.14.15" +version = "1.14.16" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -11,11 +11,11 @@ publish = false [dependencies] clap = "2.33.1" log = "0.4.17" -solana-logger = { path = "../logger", version = "=1.14.15" } -solana-measure = { path = "../measure", version = "=1.14.15" } -solana-runtime = { path = "../runtime", version = "=1.14.15" } -solana-sdk = { path = "../sdk", version = "=1.14.15" } -solana-version = { path = "../version", version = "=1.14.15" } +solana-logger = { path = "../logger", version = "=1.14.16" } +solana-measure = { path = "../measure", version = "=1.14.16" } +solana-runtime = { path = "../runtime", version = "=1.14.16" } +solana-sdk = { path = "../sdk", version = "=1.14.16" } +solana-version = { path = "../version", version = "=1.14.16" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/merkle-tree/Cargo.toml b/merkle-tree/Cargo.toml index 6aa6a153378d70..618752eed0ebb6 100644 --- a/merkle-tree/Cargo.toml +++ b/merkle-tree/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-merkle-tree" -version = "1.14.15" +version = "1.14.16" description = "Solana Merkle Tree" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -11,7 +11,7 @@ edition = "2021" [dependencies] fast-math = "0.1" -solana-program = { path = "../sdk/program", version = "=1.14.15" } +solana-program = { path = "../sdk/program", version = "=1.14.16" } # This can go once the BPF toolchain target Rust 1.42.0+ [target.bpfel-unknown-unknown.dependencies] diff --git a/metrics/Cargo.toml b/metrics/Cargo.toml index b98933f7f5cb01..705e3887c19e12 100644 --- a/metrics/Cargo.toml +++ b/metrics/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-metrics" -version = "1.14.15" +version = "1.14.16" description = "Solana Metrics" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -15,7 +15,7 @@ gethostname = "0.2.3" lazy_static = "1.4.0" log = "0.4.17" reqwest = { version = "0.11.11", default-features = false, features = ["blocking", "brotli", "deflate", "gzip", "rustls-tls", "json"] } -solana-sdk = { path = "../sdk", version = "=1.14.15" } +solana-sdk = { path = "../sdk", version = "=1.14.16" } [dev-dependencies] env_logger = "0.9.0" diff --git a/net-shaper/Cargo.toml b/net-shaper/Cargo.toml index 887474179265be..0f240cd6bdfd4d 100644 --- a/net-shaper/Cargo.toml +++ b/net-shaper/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-net-shaper" description = "The solana cluster network shaping tool" -version = "1.14.15" +version = "1.14.16" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,7 +14,7 @@ clap = { version = "3.1.5", features = ["cargo"] } rand = "0.7.0" serde = { version = "1.0.138", features = ["derive"] } serde_json = "1.0.81" -solana-logger = { path = "../logger", version = "=1.14.15" } +solana-logger = { path = "../logger", version = "=1.14.16" } [[bin]] name = "solana-net-shaper" diff --git a/net-utils/Cargo.toml b/net-utils/Cargo.toml index 263da1f677a524..d747f07ae75266 100644 --- a/net-utils/Cargo.toml +++ b/net-utils/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-net-utils" -version = "1.14.15" +version = "1.14.16" description = "Solana Network Utilities" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -19,9 +19,9 @@ rand = "0.7.0" serde = "1.0.138" serde_derive = "1.0.103" socket2 = "0.4.4" -solana-logger = { path = "../logger", version = "=1.14.15" } -solana-sdk = { path = "../sdk", version = "=1.14.15" } -solana-version = { path = "../version", version = "=1.14.15" } +solana-logger = { path = "../logger", version = "=1.14.16" } +solana-sdk = { path = "../sdk", version = "=1.14.16" } +solana-version = { path = "../version", version = "=1.14.16" } tokio = { version = "1", features = ["full"] } url = "2.2.2" diff --git a/notifier/Cargo.toml b/notifier/Cargo.toml index 2007b5e69a09eb..24d38ccd8bb942 100644 --- a/notifier/Cargo.toml +++ b/notifier/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-notifier" -version = "1.14.15" +version = "1.14.16" description = "Solana Notifier" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/perf/Cargo.toml b/perf/Cargo.toml index edd1bf201dd9f8..310a59de9ac6b0 100644 --- a/perf/Cargo.toml +++ b/perf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-perf" -version = "1.14.15" +version = "1.14.16" description = "Solana Performance APIs" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -22,10 +22,10 @@ log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" serde = "1.0.138" -solana-metrics = { path = "../metrics", version = "=1.14.15" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.15" } -solana-sdk = { path = "../sdk", version = "=1.14.15" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.15" } +solana-metrics = { path = "../metrics", version = "=1.14.16" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.16" } +solana-sdk = { path = "../sdk", version = "=1.14.16" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.16" } [target."cfg(target_os = \"linux\")".dependencies] caps = "0.5.3" @@ -37,7 +37,7 @@ name = "solana_perf" [dev-dependencies] matches = "0.1.9" -solana-logger = { path = "../logger", version = "=1.14.15" } +solana-logger = { path = "../logger", version = "=1.14.16" } [[bench]] name = "sigverify" diff --git a/poh-bench/Cargo.toml b/poh-bench/Cargo.toml index 5b529b14afe89b..23b740d296fc08 100644 --- a/poh-bench/Cargo.toml +++ b/poh-bench/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-poh-bench" -version = "1.14.15" +version = "1.14.16" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,12 +14,12 @@ clap = { version = "3.1.5", features = ["cargo"] } log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" -solana-entry = { path = "../entry", version = "=1.14.15" } -solana-logger = { path = "../logger", version = "=1.14.15" } -solana-measure = { path = "../measure", version = "=1.14.15" } -solana-perf = { path = "../perf", version = "=1.14.15" } -solana-sdk = { path = "../sdk", version = "=1.14.15" } -solana-version = { path = "../version", version = "=1.14.15" } +solana-entry = { path = "../entry", version = "=1.14.16" } +solana-logger = { path = "../logger", version = "=1.14.16" } +solana-measure = { path = "../measure", version = "=1.14.16" } +solana-perf = { path = "../perf", version = "=1.14.16" } +solana-sdk = { path = "../sdk", version = "=1.14.16" } +solana-version = { path = "../version", version = "=1.14.16" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/poh/Cargo.toml b/poh/Cargo.toml index 1cbf4f9f976227..7349c94dba0cfd 100644 --- a/poh/Cargo.toml +++ b/poh/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-poh" -version = "1.14.15" +version = "1.14.16" description = "Solana PoH" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,21 +13,21 @@ edition = "2021" core_affinity = "0.5.10" crossbeam-channel = "0.5" log = "0.4.17" -solana-entry = { path = "../entry", version = "=1.14.15" } -solana-ledger = { path = "../ledger", version = "=1.14.15" } -solana-measure = { path = "../measure", version = "=1.14.15" } -solana-metrics = { path = "../metrics", version = "=1.14.15" } -solana-runtime = { path = "../runtime", version = "=1.14.15" } -solana-sdk = { path = "../sdk", version = "=1.14.15" } -solana-sys-tuner = { path = "../sys-tuner", version = "=1.14.15" } +solana-entry = { path = "../entry", version = "=1.14.16" } +solana-ledger = { path = "../ledger", version = "=1.14.16" } +solana-measure = { path = "../measure", version = "=1.14.16" } +solana-metrics = { path = "../metrics", version = "=1.14.16" } +solana-runtime = { path = "../runtime", version = "=1.14.16" } +solana-sdk = { path = "../sdk", version = "=1.14.16" } +solana-sys-tuner = { path = "../sys-tuner", version = "=1.14.16" } thiserror = "1.0" [dev-dependencies] bincode = "1.3.3" matches = "0.1.9" rand = "0.7.0" -solana-logger = { path = "../logger", version = "=1.14.15" } -solana-perf = { path = "../perf", version = "=1.14.15" } +solana-logger = { path = "../logger", version = "=1.14.16" } +solana-perf = { path = "../perf", version = "=1.14.16" } [lib] crate-type = ["lib"] diff --git a/program-runtime/Cargo.toml b/program-runtime/Cargo.toml index 5022c4355c727f..bdd87a7c77b316 100644 --- a/program-runtime/Cargo.toml +++ b/program-runtime/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-program-runtime" -version = "1.14.15" +version = "1.14.16" description = "Solana program runtime" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -21,16 +21,16 @@ num-derive = { version = "0.3" } num-traits = { version = "0.2" } rand = "0.7.0" serde = { version = "1.0.129", features = ["derive", "rc"] } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.15" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.15" } -solana-measure = { path = "../measure", version = "=1.14.15" } -solana-metrics = { path = "../metrics", version = "=1.14.15" } -solana-sdk = { path = "../sdk", version = "=1.14.15" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.16" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.16" } +solana-measure = { path = "../measure", version = "=1.14.16" } +solana-metrics = { path = "../metrics", version = "=1.14.16" } +solana-sdk = { path = "../sdk", version = "=1.14.16" } thiserror = "1.0" enum-iterator = "0.8.1" [dev-dependencies] -solana-logger = { path = "../logger", version = "=1.14.15" } +solana-logger = { path = "../logger", version = "=1.14.16" } [lib] crate-type = ["lib"] diff --git a/program-test/Cargo.toml b/program-test/Cargo.toml index 5402e3445543a4..1bf90581ebf8e0 100644 --- a/program-test/Cargo.toml +++ b/program-test/Cargo.toml @@ -5,7 +5,7 @@ edition = "2021" license = "Apache-2.0" name = "solana-program-test" repository = "https://github.com/solana-labs/solana" -version = "1.14.15" +version = "1.14.16" [dependencies] assert_matches = "1.5.0" @@ -15,16 +15,16 @@ bincode = "1.3.3" chrono-humanize = "0.2.1" log = "0.4.17" serde = "1.0.138" -solana-banks-client = { path = "../banks-client", version = "=1.14.15" } -solana-banks-server = { path = "../banks-server", version = "=1.14.15" } -solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.15" } -solana-logger = { path = "../logger", version = "=1.14.15" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.15" } -solana-runtime = { path = "../runtime", version = "=1.14.15" } -solana-sdk = { path = "../sdk", version = "=1.14.15" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.15" } +solana-banks-client = { path = "../banks-client", version = "=1.14.16" } +solana-banks-server = { path = "../banks-server", version = "=1.14.16" } +solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.16" } +solana-logger = { path = "../logger", version = "=1.14.16" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.16" } +solana-runtime = { path = "../runtime", version = "=1.14.16" } +solana-sdk = { path = "../sdk", version = "=1.14.16" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.16" } thiserror = "1.0" tokio = { version = "1", features = ["full"] } [dev-dependencies] -solana-stake-program = { path = "../programs/stake", version = "=1.14.15" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.16" } diff --git a/programs/address-lookup-table-tests/Cargo.toml b/programs/address-lookup-table-tests/Cargo.toml index badb33f6c26336..d562c6ee602b1b 100644 --- a/programs/address-lookup-table-tests/Cargo.toml +++ b/programs/address-lookup-table-tests/Cargo.toml @@ -3,7 +3,7 @@ [package] name = "solana-address-lookup-table-program-tests" -version = "1.14.15" +version = "1.14.16" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" @@ -14,9 +14,9 @@ publish = false [dev-dependencies] assert_matches = "1.5.0" bincode = "1.3.3" -solana-address-lookup-table-program = { path = "../address-lookup-table", version = "=1.14.15" } -solana-program-test = { path = "../../program-test", version = "=1.14.15" } -solana-sdk = { path = "../../sdk", version = "=1.14.15" } +solana-address-lookup-table-program = { path = "../address-lookup-table", version = "=1.14.16" } +solana-program-test = { path = "../../program-test", version = "=1.14.16" } +solana-sdk = { path = "../../sdk", version = "=1.14.16" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/address-lookup-table/Cargo.toml b/programs/address-lookup-table/Cargo.toml index a047e51c0ea36d..74037b9f80f4ad 100644 --- a/programs/address-lookup-table/Cargo.toml +++ b/programs/address-lookup-table/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-address-lookup-table-program" -version = "1.14.15" +version = "1.14.16" description = "Solana address lookup table program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -16,14 +16,14 @@ log = "0.4.17" num-derive = "0.3" num-traits = "0.2" serde = { version = "1.0.138", features = ["derive"] } -solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.15" } -solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.15" } -solana-program = { path = "../../sdk/program", version = "=1.14.15" } +solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.16" } +solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.16" } +solana-program = { path = "../../sdk/program", version = "=1.14.16" } thiserror = "1.0" [target.'cfg(not(target_os = "solana"))'.dependencies] -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.15" } -solana-sdk = { path = "../../sdk", version = "=1.14.15" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.16" } +solana-sdk = { path = "../../sdk", version = "=1.14.16" } [build-dependencies] rustc_version = "0.4" diff --git a/programs/bpf-loader-tests/Cargo.toml b/programs/bpf-loader-tests/Cargo.toml index f78b835cf8c565..a2756dcfdd8bbe 100644 --- a/programs/bpf-loader-tests/Cargo.toml +++ b/programs/bpf-loader-tests/Cargo.toml @@ -3,7 +3,7 @@ [package] name = "solana-bpf-loader-program-tests" -version = "1.14.15" +version = "1.14.16" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" @@ -14,9 +14,9 @@ publish = false [dev-dependencies] assert_matches = "1.5.0" bincode = "1.3.3" -solana-bpf-loader-program = { path = "../bpf_loader", version = "=1.14.15" } -solana-program-test = { path = "../../program-test", version = "=1.14.15" } -solana-sdk = { path = "../../sdk", version = "=1.14.15" } +solana-bpf-loader-program = { path = "../bpf_loader", version = "=1.14.16" } +solana-program-test = { path = "../../program-test", version = "=1.14.16" } +solana-sdk = { path = "../../sdk", version = "=1.14.16" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/bpf/Cargo.lock b/programs/bpf/Cargo.lock index 6e9505c7921763..e9750528f37fd3 100644 --- a/programs/bpf/Cargo.lock +++ b/programs/bpf/Cargo.lock @@ -4054,7 +4054,7 @@ dependencies = [ [[package]] name = "solana-account-decoder" -version = "1.14.15" +version = "1.14.16" dependencies = [ "Inflector", "base64 0.13.0", @@ -4067,7 +4067,7 @@ dependencies = [ "serde_json", "solana-address-lookup-table-program", "solana-config-program", - "solana-sdk 1.14.15", + "solana-sdk 1.14.16", "solana-vote-program", "spl-token", "spl-token-2022", @@ -4077,7 +4077,7 @@ dependencies = [ [[package]] name = "solana-address-lookup-table-program" -version = "1.14.15" +version = "1.14.16" dependencies = [ "bincode", "bytemuck", @@ -4086,23 +4086,23 @@ dependencies = [ "num-traits", "rustc_version", "serde", - "solana-frozen-abi 1.14.15", - "solana-frozen-abi-macro 1.14.15", - "solana-program 1.14.15", + "solana-frozen-abi 1.14.16", + "solana-frozen-abi-macro 1.14.16", + "solana-program 1.14.16", "solana-program-runtime", - "solana-sdk 1.14.15", + "solana-sdk 1.14.16", "thiserror", ] [[package]] name = "solana-banks-client" -version = "1.14.15" +version = "1.14.16" dependencies = [ "borsh", "futures 0.3.21", "solana-banks-interface", - "solana-program 1.14.15", - "solana-sdk 1.14.15", + "solana-program 1.14.16", + "solana-sdk 1.14.16", "tarpc", "thiserror", "tokio", @@ -4111,16 +4111,16 @@ dependencies = [ [[package]] name = "solana-banks-interface" -version = "1.14.15" +version = "1.14.16" dependencies = [ "serde", - "solana-sdk 1.14.15", + "solana-sdk 1.14.16", "tarpc", ] [[package]] name = "solana-banks-server" -version = "1.14.15" +version = "1.14.16" dependencies = [ "bincode", "crossbeam-channel", @@ -4128,7 +4128,7 @@ dependencies = [ "solana-banks-interface", "solana-client", "solana-runtime", - "solana-sdk 1.14.15", + "solana-sdk 1.14.16", "solana-send-transaction-service", "tarpc", "tokio", @@ -4138,7 +4138,7 @@ dependencies = [ [[package]] name = "solana-bloom" -version = "1.14.15" +version = "1.14.16" dependencies = [ "bv", "fnv", @@ -4148,14 +4148,14 @@ dependencies = [ "rustc_version", "serde", "serde_derive", - "solana-frozen-abi 1.14.15", - "solana-frozen-abi-macro 1.14.15", - "solana-sdk 1.14.15", + "solana-frozen-abi 1.14.16", + "solana-frozen-abi-macro 1.14.16", + "solana-sdk 1.14.16", ] [[package]] name = "solana-bpf-loader-program" -version = "1.14.15" +version = "1.14.16" dependencies = [ "bincode", "byteorder 1.4.3", @@ -4164,15 +4164,15 @@ dependencies = [ "solana-measure", "solana-metrics", "solana-program-runtime", - "solana-sdk 1.14.15", - "solana-zk-token-sdk 1.14.15", + "solana-sdk 1.14.16", + "solana-zk-token-sdk 1.14.16", "solana_rbpf", "thiserror", ] [[package]] name = "solana-bpf-programs" -version = "1.14.15" +version = "1.14.16" dependencies = [ "bincode", "byteorder 1.4.3", @@ -4188,11 +4188,11 @@ dependencies = [ "solana-bpf-rust-realloc-invoke", "solana-cli-output", "solana-ledger", - "solana-logger 1.14.15", + "solana-logger 1.14.16", "solana-measure", "solana-program-runtime", "solana-runtime", - "solana-sdk 1.14.15", + "solana-sdk 1.14.16", "solana-transaction-status", "solana_rbpf", "walkdir", @@ -4200,385 +4200,385 @@ dependencies = [ [[package]] name = "solana-bpf-rust-128bit" -version = "1.14.15" +version = "1.14.16" dependencies = [ "solana-bpf-rust-128bit-dep", - "solana-program 1.14.15", + "solana-program 1.14.16", ] [[package]] name = "solana-bpf-rust-128bit-dep" -version = "1.14.15" +version = "1.14.16" dependencies = [ - "solana-program 1.14.15", + "solana-program 1.14.16", ] [[package]] name = "solana-bpf-rust-alloc" -version = "1.14.15" +version = "1.14.16" dependencies = [ - "solana-program 1.14.15", + "solana-program 1.14.16", ] [[package]] name = "solana-bpf-rust-call-depth" -version = "1.14.15" +version = "1.14.16" dependencies = [ - "solana-program 1.14.15", + "solana-program 1.14.16", ] [[package]] name = "solana-bpf-rust-caller-access" -version = "1.14.15" +version = "1.14.16" dependencies = [ - "solana-program 1.14.15", + "solana-program 1.14.16", ] [[package]] name = "solana-bpf-rust-curve25519" -version = "1.14.15" +version = "1.14.16" dependencies = [ - "solana-program 1.14.15", - "solana-zk-token-sdk 1.14.15", + "solana-program 1.14.16", + "solana-zk-token-sdk 1.14.16", ] [[package]] name = "solana-bpf-rust-custom-heap" -version = "1.14.15" +version = "1.14.16" dependencies = [ - "solana-program 1.14.15", + "solana-program 1.14.16", ] [[package]] name = "solana-bpf-rust-dep-crate" -version = "1.14.15" +version = "1.14.16" dependencies = [ "byteorder 1.4.3", "solana-address-lookup-table-program", - "solana-program 1.14.15", + "solana-program 1.14.16", ] [[package]] name = "solana-bpf-rust-deprecated-loader" -version = "1.14.15" +version = "1.14.16" dependencies = [ - "solana-program 1.14.15", + "solana-program 1.14.16", ] [[package]] name = "solana-bpf-rust-dup-accounts" -version = "1.14.15" +version = "1.14.16" dependencies = [ - "solana-program 1.14.15", + "solana-program 1.14.16", ] [[package]] name = "solana-bpf-rust-error-handling" -version = "1.14.15" +version = "1.14.16" dependencies = [ "num-derive", "num-traits", - "solana-program 1.14.15", + "solana-program 1.14.16", "thiserror", ] [[package]] name = "solana-bpf-rust-external-spend" -version = "1.14.15" +version = "1.14.16" dependencies = [ - "solana-program 1.14.15", + "solana-program 1.14.16", ] [[package]] name = "solana-bpf-rust-finalize" -version = "1.14.15" +version = "1.14.16" dependencies = [ - "solana-program 1.14.15", + "solana-program 1.14.16", ] [[package]] name = "solana-bpf-rust-get-minimum-delegation" -version = "1.14.15" +version = "1.14.16" dependencies = [ - "solana-program 1.14.15", + "solana-program 1.14.16", ] [[package]] name = "solana-bpf-rust-inner_instruction_alignment_check" -version = "1.14.15" +version = "1.14.16" dependencies = [ - "solana-program 1.14.15", + "solana-program 1.14.16", ] [[package]] name = "solana-bpf-rust-instruction-introspection" -version = "1.14.15" +version = "1.14.16" dependencies = [ - "solana-program 1.14.15", + "solana-program 1.14.16", ] [[package]] name = "solana-bpf-rust-invoke" -version = "1.14.15" +version = "1.14.16" dependencies = [ "solana-bpf-rust-invoked", - "solana-program 1.14.15", + "solana-program 1.14.16", ] [[package]] name = "solana-bpf-rust-invoke-and-error" -version = "1.14.15" +version = "1.14.16" dependencies = [ - "solana-program 1.14.15", + "solana-program 1.14.16", ] [[package]] name = "solana-bpf-rust-invoke-and-ok" -version = "1.14.15" +version = "1.14.16" dependencies = [ - "solana-program 1.14.15", + "solana-program 1.14.16", ] [[package]] name = "solana-bpf-rust-invoke-and-return" -version = "1.14.15" +version = "1.14.16" dependencies = [ - "solana-program 1.14.15", + "solana-program 1.14.16", ] [[package]] name = "solana-bpf-rust-invoked" -version = "1.14.15" +version = "1.14.16" dependencies = [ - "solana-program 1.14.15", + "solana-program 1.14.16", ] [[package]] name = "solana-bpf-rust-iter" -version = "1.14.15" +version = "1.14.16" dependencies = [ - "solana-program 1.14.15", + "solana-program 1.14.16", ] [[package]] name = "solana-bpf-rust-log-data" -version = "1.14.15" +version = "1.14.16" dependencies = [ - "solana-program 1.14.15", + "solana-program 1.14.16", ] [[package]] name = "solana-bpf-rust-many-args" -version = "1.14.15" +version = "1.14.16" dependencies = [ "solana-bpf-rust-many-args-dep", - "solana-program 1.14.15", + "solana-program 1.14.16", ] [[package]] name = "solana-bpf-rust-many-args-dep" -version = "1.14.15" +version = "1.14.16" dependencies = [ - "solana-program 1.14.15", + "solana-program 1.14.16", ] [[package]] name = "solana-bpf-rust-mem" -version = "1.14.15" +version = "1.14.16" dependencies = [ - "solana-program 1.14.15", + "solana-program 1.14.16", "solana-program-runtime", "solana-program-test", - "solana-sdk 1.14.15", + "solana-sdk 1.14.16", ] [[package]] name = "solana-bpf-rust-membuiltins" -version = "1.14.15" +version = "1.14.16" dependencies = [ "solana-bpf-rust-mem", - "solana-program 1.14.15", + "solana-program 1.14.16", ] [[package]] name = "solana-bpf-rust-noop" -version = "1.14.15" +version = "1.14.16" dependencies = [ - "solana-program 1.14.15", + "solana-program 1.14.16", ] [[package]] name = "solana-bpf-rust-panic" -version = "1.14.15" +version = "1.14.16" dependencies = [ - "solana-program 1.14.15", + "solana-program 1.14.16", ] [[package]] name = "solana-bpf-rust-param-passing" -version = "1.14.15" +version = "1.14.16" dependencies = [ "solana-bpf-rust-param-passing-dep", - "solana-program 1.14.15", + "solana-program 1.14.16", ] [[package]] name = "solana-bpf-rust-param-passing-dep" -version = "1.14.15" +version = "1.14.16" dependencies = [ - "solana-program 1.14.15", + "solana-program 1.14.16", ] [[package]] name = "solana-bpf-rust-rand" -version = "1.14.15" +version = "1.14.16" dependencies = [ "getrandom 0.1.14", "rand 0.7.3", - "solana-program 1.14.15", + "solana-program 1.14.16", ] [[package]] name = "solana-bpf-rust-realloc" -version = "1.14.15" +version = "1.14.16" dependencies = [ - "solana-program 1.14.15", + "solana-program 1.14.16", ] [[package]] name = "solana-bpf-rust-realloc-invoke" -version = "1.14.15" +version = "1.14.16" dependencies = [ "solana-bpf-rust-realloc", - "solana-program 1.14.15", + "solana-program 1.14.16", ] [[package]] name = "solana-bpf-rust-ro-account_modify" -version = "1.14.15" +version = "1.14.16" dependencies = [ - "solana-program 1.14.15", + "solana-program 1.14.16", ] [[package]] name = "solana-bpf-rust-ro-modify" -version = "1.14.15" +version = "1.14.16" dependencies = [ - "solana-program 1.14.15", + "solana-program 1.14.16", ] [[package]] name = "solana-bpf-rust-sanity" -version = "1.14.15" +version = "1.14.16" dependencies = [ - "solana-program 1.14.15", + "solana-program 1.14.16", "solana-program-runtime", "solana-program-test", - "solana-sdk 1.14.15", + "solana-sdk 1.14.16", ] [[package]] name = "solana-bpf-rust-secp256k1-recover" -version = "1.14.15" +version = "1.14.16" dependencies = [ "libsecp256k1 0.7.0", - "solana-program 1.14.15", + "solana-program 1.14.16", ] [[package]] name = "solana-bpf-rust-sha" -version = "1.14.15" +version = "1.14.16" dependencies = [ "blake3", - "solana-program 1.14.15", + "solana-program 1.14.16", ] [[package]] name = "solana-bpf-rust-sibling-instructions" -version = "1.14.15" +version = "1.14.16" dependencies = [ - "solana-program 1.14.15", + "solana-program 1.14.16", ] [[package]] name = "solana-bpf-rust-sibling_inner-instructions" -version = "1.14.15" +version = "1.14.16" dependencies = [ - "solana-program 1.14.15", + "solana-program 1.14.16", ] [[package]] name = "solana-bpf-rust-simulation" -version = "1.14.15" +version = "1.14.16" dependencies = [ - "solana-logger 1.14.15", - "solana-program 1.14.15", + "solana-logger 1.14.16", + "solana-program 1.14.16", "solana-program-test", - "solana-sdk 1.14.15", + "solana-sdk 1.14.16", "solana-validator", ] [[package]] name = "solana-bpf-rust-spoof1" -version = "1.14.15" +version = "1.14.16" dependencies = [ - "solana-program 1.14.15", + "solana-program 1.14.16", ] [[package]] name = "solana-bpf-rust-spoof1-system" -version = "1.14.15" +version = "1.14.16" dependencies = [ - "solana-program 1.14.15", + "solana-program 1.14.16", ] [[package]] name = "solana-bpf-rust-sysvar" -version = "1.14.15" +version = "1.14.16" dependencies = [ - "solana-program 1.14.15", + "solana-program 1.14.16", "solana-program-runtime", "solana-program-test", - "solana-sdk 1.14.15", + "solana-sdk 1.14.16", ] [[package]] name = "solana-bpf-rust-upgradeable" -version = "1.14.15" +version = "1.14.16" dependencies = [ - "solana-program 1.14.15", + "solana-program 1.14.16", ] [[package]] name = "solana-bpf-rust-upgraded" -version = "1.14.15" +version = "1.14.16" dependencies = [ - "solana-program 1.14.15", + "solana-program 1.14.16", ] [[package]] name = "solana-bucket-map" -version = "1.14.15" +version = "1.14.16" dependencies = [ "log", "memmap2", "modular-bitfield", "rand 0.7.3", "solana-measure", - "solana-sdk 1.14.15", + "solana-sdk 1.14.16", "tempfile", ] [[package]] name = "solana-clap-utils" -version = "1.14.15" +version = "1.14.16" dependencies = [ "chrono", "clap 2.33.3", "rpassword", "solana-perf", "solana-remote-wallet", - "solana-sdk 1.14.15", + "solana-sdk 1.14.16", "thiserror", "tiny-bip39", "uriparse", @@ -4587,7 +4587,7 @@ dependencies = [ [[package]] name = "solana-cli-config" -version = "1.14.15" +version = "1.14.16" dependencies = [ "dirs-next", "lazy_static", @@ -4595,13 +4595,13 @@ dependencies = [ "serde_derive", "serde_yaml", "solana-clap-utils", - "solana-sdk 1.14.15", + "solana-sdk 1.14.16", "url 2.2.2", ] [[package]] name = "solana-cli-output" -version = "1.14.15" +version = "1.14.16" dependencies = [ "Inflector", "base64 0.13.0", @@ -4618,7 +4618,7 @@ dependencies = [ "solana-clap-utils", "solana-cli-config", "solana-client", - "solana-sdk 1.14.15", + "solana-sdk 1.14.16", "solana-transaction-status", "solana-vote-program", "spl-memo", @@ -4626,7 +4626,7 @@ dependencies = [ [[package]] name = "solana-client" -version = "1.14.15" +version = "1.14.16" dependencies = [ "async-mutex", "async-trait", @@ -4662,7 +4662,7 @@ dependencies = [ "solana-measure", "solana-metrics", "solana-net-utils", - "solana-sdk 1.14.15", + "solana-sdk 1.14.16", "solana-streamer", "solana-transaction-status", "solana-version", @@ -4678,27 +4678,27 @@ dependencies = [ [[package]] name = "solana-compute-budget-program" -version = "1.14.15" +version = "1.14.16" dependencies = [ "solana-program-runtime", - "solana-sdk 1.14.15", + "solana-sdk 1.14.16", ] [[package]] name = "solana-config-program" -version = "1.14.15" +version = "1.14.16" dependencies = [ "bincode", "chrono", "serde", "serde_derive", "solana-program-runtime", - "solana-sdk 1.14.15", + "solana-sdk 1.14.16", ] [[package]] name = "solana-core" -version = "1.14.15" +version = "1.14.16" dependencies = [ "ahash", "base64 0.13.0", @@ -4727,8 +4727,8 @@ dependencies = [ "solana-bloom", "solana-client", "solana-entry", - "solana-frozen-abi 1.14.15", - "solana-frozen-abi-macro 1.14.15", + "solana-frozen-abi 1.14.16", + "solana-frozen-abi-macro 1.14.16", "solana-geyser-plugin-manager", "solana-gossip", "solana-ledger", @@ -4741,7 +4741,7 @@ dependencies = [ "solana-rayon-threadlimit", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.15", + "solana-sdk 1.14.16", "solana-send-transaction-service", "solana-streamer", "solana-transaction-status", @@ -4757,19 +4757,19 @@ dependencies = [ [[package]] name = "solana-download-utils" -version = "1.14.15" +version = "1.14.16" dependencies = [ "console", "indicatif", "log", "reqwest", "solana-runtime", - "solana-sdk 1.14.15", + "solana-sdk 1.14.16", ] [[package]] name = "solana-entry" -version = "1.14.15" +version = "1.14.16" dependencies = [ "bincode", "crossbeam-channel", @@ -4785,12 +4785,12 @@ dependencies = [ "solana-metrics", "solana-perf", "solana-rayon-threadlimit", - "solana-sdk 1.14.15", + "solana-sdk 1.14.16", ] [[package]] name = "solana-faucet" -version = "1.14.15" +version = "1.14.16" dependencies = [ "bincode", "byteorder 1.4.3", @@ -4801,9 +4801,9 @@ dependencies = [ "serde_derive", "solana-clap-utils", "solana-cli-config", - "solana-logger 1.14.15", + "solana-logger 1.14.16", "solana-metrics", - "solana-sdk 1.14.15", + "solana-sdk 1.14.16", "solana-version", "spl-memo", "thiserror", @@ -4846,7 +4846,7 @@ dependencies = [ [[package]] name = "solana-frozen-abi" -version = "1.14.15" +version = "1.14.16" dependencies = [ "ahash", "blake3", @@ -4871,7 +4871,7 @@ dependencies = [ "serde_derive", "serde_json", "sha2 0.10.2", - "solana-frozen-abi-macro 1.14.15", + "solana-frozen-abi-macro 1.14.16", "subtle", "thiserror", ] @@ -4890,7 +4890,7 @@ dependencies = [ [[package]] name = "solana-frozen-abi-macro" -version = "1.14.15" +version = "1.14.16" dependencies = [ "proc-macro2 1.0.41", "quote 1.0.18", @@ -4900,26 +4900,26 @@ dependencies = [ [[package]] name = "solana-genesis-utils" -version = "1.14.15" +version = "1.14.16" dependencies = [ "solana-download-utils", "solana-runtime", - "solana-sdk 1.14.15", + "solana-sdk 1.14.16", ] [[package]] name = "solana-geyser-plugin-interface" -version = "1.14.15" +version = "1.14.16" dependencies = [ "log", - "solana-sdk 1.14.15", + "solana-sdk 1.14.16", "solana-transaction-status", "thiserror", ] [[package]] name = "solana-geyser-plugin-manager" -version = "1.14.15" +version = "1.14.16" dependencies = [ "bs58", "crossbeam-channel", @@ -4932,14 +4932,14 @@ dependencies = [ "solana-metrics", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.15", + "solana-sdk 1.14.16", "solana-transaction-status", "thiserror", ] [[package]] name = "solana-gossip" -version = "1.14.15" +version = "1.14.16" dependencies = [ "bincode", "bv", @@ -4963,17 +4963,17 @@ dependencies = [ "solana-clap-utils", "solana-client", "solana-entry", - "solana-frozen-abi 1.14.15", - "solana-frozen-abi-macro 1.14.15", + "solana-frozen-abi 1.14.16", + "solana-frozen-abi-macro 1.14.16", "solana-ledger", - "solana-logger 1.14.15", + "solana-logger 1.14.16", "solana-measure", "solana-metrics", "solana-net-utils", "solana-perf", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.14.15", + "solana-sdk 1.14.16", "solana-streamer", "solana-version", "solana-vote-program", @@ -4982,7 +4982,7 @@ dependencies = [ [[package]] name = "solana-ledger" -version = "1.14.15" +version = "1.14.16" dependencies = [ "assert_matches", "bincode", @@ -5014,15 +5014,15 @@ dependencies = [ "solana-account-decoder", "solana-bpf-loader-program", "solana-entry", - "solana-frozen-abi 1.14.15", - "solana-frozen-abi-macro 1.14.15", + "solana-frozen-abi 1.14.16", + "solana-frozen-abi-macro 1.14.16", "solana-measure", "solana-metrics", "solana-perf", "solana-program-runtime", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.14.15", + "solana-sdk 1.14.16", "solana-stake-program", "solana-storage-bigtable", "solana-storage-proto", @@ -5051,7 +5051,7 @@ dependencies = [ [[package]] name = "solana-logger" -version = "1.14.15" +version = "1.14.16" dependencies = [ "env_logger", "lazy_static", @@ -5060,36 +5060,36 @@ dependencies = [ [[package]] name = "solana-measure" -version = "1.14.15" +version = "1.14.16" dependencies = [ "log", - "solana-sdk 1.14.15", + "solana-sdk 1.14.16", ] [[package]] name = "solana-merkle-tree" -version = "1.14.15" +version = "1.14.16" dependencies = [ "fast-math", "matches", - "solana-program 1.14.15", + "solana-program 1.14.16", ] [[package]] name = "solana-metrics" -version = "1.14.15" +version = "1.14.16" dependencies = [ "crossbeam-channel", "gethostname", "lazy_static", "log", "reqwest", - "solana-sdk 1.14.15", + "solana-sdk 1.14.16", ] [[package]] name = "solana-net-utils" -version = "1.14.15" +version = "1.14.16" dependencies = [ "bincode", "clap 3.1.6", @@ -5100,8 +5100,8 @@ dependencies = [ "serde", "serde_derive", "socket2", - "solana-logger 1.14.15", - "solana-sdk 1.14.15", + "solana-logger 1.14.16", + "solana-sdk 1.14.16", "solana-version", "tokio", "url 2.2.2", @@ -5109,7 +5109,7 @@ dependencies = [ [[package]] name = "solana-perf" -version = "1.14.15" +version = "1.14.16" dependencies = [ "ahash", "bincode", @@ -5128,13 +5128,13 @@ dependencies = [ "serde", "solana-metrics", "solana-rayon-threadlimit", - "solana-sdk 1.14.15", + "solana-sdk 1.14.16", "solana-vote-program", ] [[package]] name = "solana-poh" -version = "1.14.15" +version = "1.14.16" dependencies = [ "core_affinity", "crossbeam-channel", @@ -5144,7 +5144,7 @@ dependencies = [ "solana-measure", "solana-metrics", "solana-runtime", - "solana-sdk 1.14.15", + "solana-sdk 1.14.16", "solana-sys-tuner", "thiserror", ] @@ -5200,7 +5200,7 @@ dependencies = [ [[package]] name = "solana-program" -version = "1.14.15" +version = "1.14.16" dependencies = [ "base64 0.13.0", "bincode", @@ -5236,9 +5236,9 @@ dependencies = [ "serde_json", "sha2 0.10.2", "sha3 0.10.1", - "solana-frozen-abi 1.14.15", - "solana-frozen-abi-macro 1.14.15", - "solana-sdk-macro 1.14.15", + "solana-frozen-abi 1.14.16", + "solana-frozen-abi-macro 1.14.16", + "solana-sdk-macro 1.14.16", "thiserror", "tiny-bip39", "wasm-bindgen", @@ -5247,7 +5247,7 @@ dependencies = [ [[package]] name = "solana-program-runtime" -version = "1.14.15" +version = "1.14.16" dependencies = [ "base64 0.13.0", "bincode", @@ -5262,17 +5262,17 @@ dependencies = [ "rand 0.7.3", "rustc_version", "serde", - "solana-frozen-abi 1.14.15", - "solana-frozen-abi-macro 1.14.15", + "solana-frozen-abi 1.14.16", + "solana-frozen-abi-macro 1.14.16", "solana-measure", "solana-metrics", - "solana-sdk 1.14.15", + "solana-sdk 1.14.16", "thiserror", ] [[package]] name = "solana-program-test" -version = "1.14.15" +version = "1.14.16" dependencies = [ "assert_matches", "async-trait", @@ -5284,10 +5284,10 @@ dependencies = [ "solana-banks-client", "solana-banks-server", "solana-bpf-loader-program", - "solana-logger 1.14.15", + "solana-logger 1.14.16", "solana-program-runtime", "solana-runtime", - "solana-sdk 1.14.15", + "solana-sdk 1.14.16", "solana-vote-program", "thiserror", "tokio", @@ -5295,7 +5295,7 @@ dependencies = [ [[package]] name = "solana-rayon-threadlimit" -version = "1.14.15" +version = "1.14.16" dependencies = [ "lazy_static", "num_cpus", @@ -5303,7 +5303,7 @@ dependencies = [ [[package]] name = "solana-remote-wallet" -version = "1.14.15" +version = "1.14.16" dependencies = [ "console", "dialoguer", @@ -5313,14 +5313,14 @@ dependencies = [ "parking_lot 0.12.1", "qstring", "semver", - "solana-sdk 1.14.15", + "solana-sdk 1.14.16", "thiserror", "uriparse", ] [[package]] name = "solana-rpc" -version = "1.14.15" +version = "1.14.16" dependencies = [ "base64 0.13.0", "bincode", @@ -5353,7 +5353,7 @@ dependencies = [ "solana-poh", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.14.15", + "solana-sdk 1.14.16", "solana-send-transaction-service", "solana-stake-program", "solana-storage-bigtable", @@ -5371,7 +5371,7 @@ dependencies = [ [[package]] name = "solana-runtime" -version = "1.14.15" +version = "1.14.16" dependencies = [ "arrayref", "bincode", @@ -5408,17 +5408,17 @@ dependencies = [ "solana-bucket-map", "solana-compute-budget-program", "solana-config-program", - "solana-frozen-abi 1.14.15", - "solana-frozen-abi-macro 1.14.15", + "solana-frozen-abi 1.14.16", + "solana-frozen-abi-macro 1.14.16", "solana-measure", "solana-metrics", "solana-program-runtime", "solana-rayon-threadlimit", - "solana-sdk 1.14.15", + "solana-sdk 1.14.16", "solana-stake-program", "solana-vote-program", "solana-zk-token-proof-program", - "solana-zk-token-sdk 1.14.15", + "solana-zk-token-sdk 1.14.16", "strum", "strum_macros", "symlink", @@ -5481,7 +5481,7 @@ dependencies = [ [[package]] name = "solana-sdk" -version = "1.14.15" +version = "1.14.16" dependencies = [ "assert_matches", "base64 0.13.0", @@ -5518,11 +5518,11 @@ dependencies = [ "serde_json", "sha2 0.10.2", "sha3 0.10.1", - "solana-frozen-abi 1.14.15", - "solana-frozen-abi-macro 1.14.15", - "solana-logger 1.14.15", - "solana-program 1.14.15", - "solana-sdk-macro 1.14.15", + "solana-frozen-abi 1.14.16", + "solana-frozen-abi-macro 1.14.16", + "solana-logger 1.14.16", + "solana-program 1.14.16", + "solana-sdk-macro 1.14.16", "thiserror", "uriparse", "wasm-bindgen", @@ -5543,7 +5543,7 @@ dependencies = [ [[package]] name = "solana-sdk-macro" -version = "1.14.15" +version = "1.14.16" dependencies = [ "bs58", "proc-macro2 1.0.41", @@ -5554,7 +5554,7 @@ dependencies = [ [[package]] name = "solana-send-transaction-service" -version = "1.14.15" +version = "1.14.16" dependencies = [ "crossbeam-channel", "log", @@ -5562,12 +5562,12 @@ dependencies = [ "solana-measure", "solana-metrics", "solana-runtime", - "solana-sdk 1.14.15", + "solana-sdk 1.14.16", ] [[package]] name = "solana-stake-program" -version = "1.14.15" +version = "1.14.16" dependencies = [ "bincode", "log", @@ -5577,18 +5577,18 @@ dependencies = [ "serde", "serde_derive", "solana-config-program", - "solana-frozen-abi 1.14.15", - "solana-frozen-abi-macro 1.14.15", + "solana-frozen-abi 1.14.16", + "solana-frozen-abi-macro 1.14.16", "solana-metrics", "solana-program-runtime", - "solana-sdk 1.14.15", + "solana-sdk 1.14.16", "solana-vote-program", "thiserror", ] [[package]] name = "solana-storage-bigtable" -version = "1.14.15" +version = "1.14.16" dependencies = [ "backoff", "bincode", @@ -5609,7 +5609,7 @@ dependencies = [ "serde_derive", "smpl_jwt", "solana-metrics", - "solana-sdk 1.14.15", + "solana-sdk 1.14.16", "solana-storage-proto", "solana-transaction-status", "thiserror", @@ -5620,7 +5620,7 @@ dependencies = [ [[package]] name = "solana-storage-proto" -version = "1.14.15" +version = "1.14.16" dependencies = [ "bincode", "bs58", @@ -5628,14 +5628,14 @@ dependencies = [ "protobuf-src", "serde", "solana-account-decoder", - "solana-sdk 1.14.15", + "solana-sdk 1.14.16", "solana-transaction-status", "tonic-build 0.8.0", ] [[package]] name = "solana-streamer" -version = "1.14.15" +version = "1.14.16" dependencies = [ "crossbeam-channel", "futures-util", @@ -5654,7 +5654,7 @@ dependencies = [ "rustls 0.20.6", "solana-metrics", "solana-perf", - "solana-sdk 1.14.15", + "solana-sdk 1.14.16", "thiserror", "tokio", "x509-parser", @@ -5662,13 +5662,13 @@ dependencies = [ [[package]] name = "solana-sys-tuner" -version = "1.14.15" +version = "1.14.16" dependencies = [ "clap 2.33.3", "libc", "log", "nix", - "solana-logger 1.14.15", + "solana-logger 1.14.16", "solana-version", "sysctl", "unix_socket2", @@ -5677,7 +5677,7 @@ dependencies = [ [[package]] name = "solana-test-validator" -version = "1.14.15" +version = "1.14.16" dependencies = [ "base64 0.13.0", "log", @@ -5688,20 +5688,20 @@ dependencies = [ "solana-core", "solana-gossip", "solana-ledger", - "solana-logger 1.14.15", + "solana-logger 1.14.16", "solana-net-utils", "solana-program-runtime", "solana-program-test", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.15", + "solana-sdk 1.14.16", "solana-streamer", "tokio", ] [[package]] name = "solana-transaction-status" -version = "1.14.15" +version = "1.14.16" dependencies = [ "Inflector", "base64 0.13.0", @@ -5717,7 +5717,7 @@ dependencies = [ "solana-address-lookup-table-program", "solana-measure", "solana-metrics", - "solana-sdk 1.14.15", + "solana-sdk 1.14.16", "solana-vote-program", "spl-associated-token-account", "spl-memo", @@ -5728,7 +5728,7 @@ dependencies = [ [[package]] name = "solana-validator" -version = "1.14.15" +version = "1.14.16" dependencies = [ "chrono", "clap 2.33.3", @@ -5759,14 +5759,14 @@ dependencies = [ "solana-genesis-utils", "solana-gossip", "solana-ledger", - "solana-logger 1.14.15", + "solana-logger 1.14.16", "solana-metrics", "solana-net-utils", "solana-perf", "solana-poh", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.15", + "solana-sdk 1.14.16", "solana-send-transaction-service", "solana-storage-bigtable", "solana-streamer", @@ -5779,21 +5779,21 @@ dependencies = [ [[package]] name = "solana-version" -version = "1.14.15" +version = "1.14.16" dependencies = [ "log", "rustc_version", "semver", "serde", "serde_derive", - "solana-frozen-abi 1.14.15", - "solana-frozen-abi-macro 1.14.15", - "solana-sdk 1.14.15", + "solana-frozen-abi 1.14.16", + "solana-frozen-abi-macro 1.14.16", + "solana-sdk 1.14.16", ] [[package]] name = "solana-vote-program" -version = "1.14.15" +version = "1.14.16" dependencies = [ "bincode", "log", @@ -5802,25 +5802,25 @@ dependencies = [ "rustc_version", "serde", "serde_derive", - "solana-frozen-abi 1.14.15", - "solana-frozen-abi-macro 1.14.15", + "solana-frozen-abi 1.14.16", + "solana-frozen-abi-macro 1.14.16", "solana-metrics", "solana-program-runtime", - "solana-sdk 1.14.15", + "solana-sdk 1.14.16", "thiserror", ] [[package]] name = "solana-zk-token-proof-program" -version = "1.14.15" +version = "1.14.16" dependencies = [ "bytemuck", "getrandom 0.1.14", "num-derive", "num-traits", "solana-program-runtime", - "solana-sdk 1.14.15", - "solana-zk-token-sdk 1.14.15", + "solana-sdk 1.14.16", + "solana-zk-token-sdk 1.14.16", ] [[package]] @@ -5856,7 +5856,7 @@ dependencies = [ [[package]] name = "solana-zk-token-sdk" -version = "1.14.15" +version = "1.14.16" dependencies = [ "aes-gcm-siv", "arrayref", @@ -5876,8 +5876,8 @@ dependencies = [ "serde", "serde_json", "sha3 0.9.1", - "solana-program 1.14.15", - "solana-sdk 1.14.15", + "solana-program 1.14.16", + "solana-sdk 1.14.16", "subtle", "thiserror", "zeroize", diff --git a/programs/bpf/Cargo.toml b/programs/bpf/Cargo.toml index 4928c8c25cd22c..11fb3519415897 100644 --- a/programs/bpf/Cargo.toml +++ b/programs/bpf/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "solana-bpf-programs" description = "Blockchain, Rebuilt for Scale" -version = "1.14.15" +version = "1.14.16" documentation = "https://docs.rs/solana" homepage = "https://solana.com/" readme = "README.md" @@ -26,22 +26,22 @@ itertools = "0.10.1" log = "0.4.11" miow = "0.3.6" net2 = "0.2.37" -solana-account-decoder = { path = "../../account-decoder", version = "=1.14.15" } -solana-bpf-loader-program = { path = "../bpf_loader", version = "=1.14.15" } -solana-bpf-rust-invoke = { path = "rust/invoke", version = "=1.14.15" } -solana-bpf-rust-realloc = { path = "rust/realloc", version = "=1.14.15" } -solana-bpf-rust-realloc-invoke = { path = "rust/realloc_invoke", version = "=1.14.15" } -solana-cli-output = { path = "../../cli-output", version = "=1.14.15" } -solana-logger = { path = "../../logger", version = "=1.14.15" } -solana-measure = { path = "../../measure", version = "=1.14.15" } -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.15" } -solana-runtime = { path = "../../runtime", version = "=1.14.15" } -solana-sdk = { path = "../../sdk", version = "=1.14.15" } -solana-transaction-status = { path = "../../transaction-status", version = "=1.14.15" } +solana-account-decoder = { path = "../../account-decoder", version = "=1.14.16" } +solana-bpf-loader-program = { path = "../bpf_loader", version = "=1.14.16" } +solana-bpf-rust-invoke = { path = "rust/invoke", version = "=1.14.16" } +solana-bpf-rust-realloc = { path = "rust/realloc", version = "=1.14.16" } +solana-bpf-rust-realloc-invoke = { path = "rust/realloc_invoke", version = "=1.14.16" } +solana-cli-output = { path = "../../cli-output", version = "=1.14.16" } +solana-logger = { path = "../../logger", version = "=1.14.16" } +solana-measure = { path = "../../measure", version = "=1.14.16" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.16" } +solana-runtime = { path = "../../runtime", version = "=1.14.16" } +solana-sdk = { path = "../../sdk", version = "=1.14.16" } +solana-transaction-status = { path = "../../transaction-status", version = "=1.14.16" } solana_rbpf = "=0.2.31" [dev-dependencies] -solana-ledger = { path = "../../ledger", version = "=1.14.15" } +solana-ledger = { path = "../../ledger", version = "=1.14.16" } [[bench]] name = "bpf_loader" diff --git a/programs/bpf/rust/128bit/Cargo.toml b/programs/bpf/rust/128bit/Cargo.toml index 874005438b65b6..a82c84353ecfad 100644 --- a/programs/bpf/rust/128bit/Cargo.toml +++ b/programs/bpf/rust/128bit/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-128bit" -version = "1.14.15" +version = "1.14.16" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ documentation = "https://docs.rs/solana-bpf-rust-128bit" edition = "2021" [dependencies] -solana-bpf-rust-128bit-dep = { path = "../128bit_dep", version = "=1.14.15" } -solana-program = { path = "../../../../sdk/program", version = "=1.14.15" } +solana-bpf-rust-128bit-dep = { path = "../128bit_dep", version = "=1.14.16" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.16" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/128bit_dep/Cargo.toml b/programs/bpf/rust/128bit_dep/Cargo.toml index 33bb27d5109b7d..28ae95aed8aca9 100644 --- a/programs/bpf/rust/128bit_dep/Cargo.toml +++ b/programs/bpf/rust/128bit_dep/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-128bit-dep" -version = "1.14.15" +version = "1.14.16" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-128bit-dep" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.15" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.16" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/bpf/rust/alloc/Cargo.toml b/programs/bpf/rust/alloc/Cargo.toml index bd12581f3e2dfd..1420908168c1d8 100644 --- a/programs/bpf/rust/alloc/Cargo.toml +++ b/programs/bpf/rust/alloc/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-alloc" -version = "1.14.15" +version = "1.14.16" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-alloc" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.15" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.16" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/call_depth/Cargo.toml b/programs/bpf/rust/call_depth/Cargo.toml index 0da728bf1f2bd9..9631f2b8ed73ab 100644 --- a/programs/bpf/rust/call_depth/Cargo.toml +++ b/programs/bpf/rust/call_depth/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-call-depth" -version = "1.14.15" +version = "1.14.16" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-call-depth" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.15" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.16" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/caller_access/Cargo.toml b/programs/bpf/rust/caller_access/Cargo.toml index b30e7fb16380db..50119c2e91315f 100644 --- a/programs/bpf/rust/caller_access/Cargo.toml +++ b/programs/bpf/rust/caller_access/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-caller-access" -version = "1.14.15" +version = "1.14.16" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-caller-access" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.15" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.16" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/curve25519/Cargo.toml b/programs/bpf/rust/curve25519/Cargo.toml index cb5de0933369ed..bcb2a682663341 100644 --- a/programs/bpf/rust/curve25519/Cargo.toml +++ b/programs/bpf/rust/curve25519/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-curve25519" -version = "1.14.15" +version = "1.14.16" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ documentation = "https://docs.rs/solana-bpf-rust-zktoken_crypto" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.15" } -solana-zk-token-sdk = { path = "../../../../zk-token-sdk", version = "=1.14.15" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.16" } +solana-zk-token-sdk = { path = "../../../../zk-token-sdk", version = "=1.14.16" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/custom_heap/Cargo.toml b/programs/bpf/rust/custom_heap/Cargo.toml index 8bed3e3fd464d8..d74cbe54d2cea7 100644 --- a/programs/bpf/rust/custom_heap/Cargo.toml +++ b/programs/bpf/rust/custom_heap/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-custom-heap" -version = "1.14.15" +version = "1.14.16" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-custom-heap" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.15" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.16" } [features] default = ["custom-heap"] diff --git a/programs/bpf/rust/dep_crate/Cargo.toml b/programs/bpf/rust/dep_crate/Cargo.toml index 57181a8320b11b..7557cca6037387 100644 --- a/programs/bpf/rust/dep_crate/Cargo.toml +++ b/programs/bpf/rust/dep_crate/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-dep-crate" -version = "1.14.15" +version = "1.14.16" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,8 +12,8 @@ edition = "2021" [dependencies] byteorder = { version = "1", default-features = false } # list of crates which must be buildable for bpf programs -solana-address-lookup-table-program = { path = "../../../../programs/address-lookup-table", version = "=1.14.15" } -solana-program = { path = "../../../../sdk/program", version = "=1.14.15" } +solana-address-lookup-table-program = { path = "../../../../programs/address-lookup-table", version = "=1.14.16" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.16" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/deprecated_loader/Cargo.toml b/programs/bpf/rust/deprecated_loader/Cargo.toml index 99a8939aa01456..8090b0c6a8d7c5 100644 --- a/programs/bpf/rust/deprecated_loader/Cargo.toml +++ b/programs/bpf/rust/deprecated_loader/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-deprecated-loader" -version = "1.14.15" +version = "1.14.16" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-deprecated-loader" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.15" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.16" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/dup_accounts/Cargo.toml b/programs/bpf/rust/dup_accounts/Cargo.toml index bda640a1a2b417..7fd9b72a6bc7d8 100644 --- a/programs/bpf/rust/dup_accounts/Cargo.toml +++ b/programs/bpf/rust/dup_accounts/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-dup-accounts" -version = "1.14.15" +version = "1.14.16" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-dup-accounts" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.15" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.16" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/error_handling/Cargo.toml b/programs/bpf/rust/error_handling/Cargo.toml index b0913bd0c20967..4770642b471e1a 100644 --- a/programs/bpf/rust/error_handling/Cargo.toml +++ b/programs/bpf/rust/error_handling/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-error-handling" -version = "1.14.15" +version = "1.14.16" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,7 +12,7 @@ edition = "2021" [dependencies] num-derive = "0.3" num-traits = "0.2" -solana-program = { path = "../../../../sdk/program", version = "=1.14.15" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.16" } thiserror = "1.0" [lib] diff --git a/programs/bpf/rust/external_spend/Cargo.toml b/programs/bpf/rust/external_spend/Cargo.toml index 9d4fef90cd479c..e71809611ef851 100644 --- a/programs/bpf/rust/external_spend/Cargo.toml +++ b/programs/bpf/rust/external_spend/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-external-spend" -version = "1.14.15" +version = "1.14.16" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-external-spend" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.15" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.16" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/finalize/Cargo.toml b/programs/bpf/rust/finalize/Cargo.toml index 36c7bdb7f0872d..4de041b9343702 100644 --- a/programs/bpf/rust/finalize/Cargo.toml +++ b/programs/bpf/rust/finalize/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-finalize" -version = "1.14.15" +version = "1.14.16" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-finalize" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.15" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.16" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/get_minimum_delegation/Cargo.toml b/programs/bpf/rust/get_minimum_delegation/Cargo.toml index 90c72b838b3039..142565d1dd4f3f 100644 --- a/programs/bpf/rust/get_minimum_delegation/Cargo.toml +++ b/programs/bpf/rust/get_minimum_delegation/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-get-minimum-delegation" -version = "1.14.15" +version = "1.14.16" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-get-minimum-delegation" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.15" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.16" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/inner_instruction_alignment_check/Cargo.toml b/programs/bpf/rust/inner_instruction_alignment_check/Cargo.toml index 8efd9a73368f22..c06a5bf96573b5 100644 --- a/programs/bpf/rust/inner_instruction_alignment_check/Cargo.toml +++ b/programs/bpf/rust/inner_instruction_alignment_check/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-inner_instruction_alignment_check" -version = "1.14.15" +version = "1.14.16" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-inner_instruction_alignment_che edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.15" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.16" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/instruction_introspection/Cargo.toml b/programs/bpf/rust/instruction_introspection/Cargo.toml index b69339332e5614..536dde9f20cead 100644 --- a/programs/bpf/rust/instruction_introspection/Cargo.toml +++ b/programs/bpf/rust/instruction_introspection/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-instruction-introspection" -version = "1.14.15" +version = "1.14.16" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-instruction-introspection" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.15" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.16" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/invoke/Cargo.toml b/programs/bpf/rust/invoke/Cargo.toml index 802923f67dc9ed..4c27a2155ccc04 100644 --- a/programs/bpf/rust/invoke/Cargo.toml +++ b/programs/bpf/rust/invoke/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-invoke" -version = "1.14.15" +version = "1.14.16" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -15,7 +15,7 @@ program = [] [dependencies] solana-bpf-rust-invoked = { path = "../invoked", default-features = false } -solana-program = { path = "../../../../sdk/program", version = "=1.14.15" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.16" } [lib] crate-type = ["lib", "cdylib"] diff --git a/programs/bpf/rust/invoke_and_error/Cargo.toml b/programs/bpf/rust/invoke_and_error/Cargo.toml index c0b4c2c065eb49..fdaef66ab707e8 100644 --- a/programs/bpf/rust/invoke_and_error/Cargo.toml +++ b/programs/bpf/rust/invoke_and_error/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-invoke-and-error" -version = "1.14.15" +version = "1.14.16" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-invoke-and-error" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.15" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.16" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/invoke_and_ok/Cargo.toml b/programs/bpf/rust/invoke_and_ok/Cargo.toml index e2caccf8298598..45a37f46eb2fae 100644 --- a/programs/bpf/rust/invoke_and_ok/Cargo.toml +++ b/programs/bpf/rust/invoke_and_ok/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-invoke-and-ok" -version = "1.14.15" +version = "1.14.16" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-invoke-and-ok" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.15" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.16" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/invoke_and_return/Cargo.toml b/programs/bpf/rust/invoke_and_return/Cargo.toml index 10badfe84a18b5..d7d075d2f1ae76 100644 --- a/programs/bpf/rust/invoke_and_return/Cargo.toml +++ b/programs/bpf/rust/invoke_and_return/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-invoke-and-return" -version = "1.14.15" +version = "1.14.16" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-invoke-and-return" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.15" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.16" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/invoked/Cargo.toml b/programs/bpf/rust/invoked/Cargo.toml index 8d095bd447a6cb..8ba7cad54580e3 100644 --- a/programs/bpf/rust/invoked/Cargo.toml +++ b/programs/bpf/rust/invoked/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-invoked" -version = "1.14.15" +version = "1.14.16" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,7 +14,7 @@ default = ["program"] program = [] [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.15" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.16" } [lib] crate-type = ["lib", "cdylib"] diff --git a/programs/bpf/rust/iter/Cargo.toml b/programs/bpf/rust/iter/Cargo.toml index 3ac35b57b63ae8..5f823984405158 100644 --- a/programs/bpf/rust/iter/Cargo.toml +++ b/programs/bpf/rust/iter/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-iter" -version = "1.14.15" +version = "1.14.16" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-iter" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.15" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.16" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/log_data/Cargo.toml b/programs/bpf/rust/log_data/Cargo.toml index c16fe3bc267664..9499340762034c 100644 --- a/programs/bpf/rust/log_data/Cargo.toml +++ b/programs/bpf/rust/log_data/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-log-data" -version = "1.14.15" +version = "1.14.16" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-log-data" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.15" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.16" } [features] default = ["program"] diff --git a/programs/bpf/rust/many_args/Cargo.toml b/programs/bpf/rust/many_args/Cargo.toml index 72e935284c63b4..1ecff634d49393 100644 --- a/programs/bpf/rust/many_args/Cargo.toml +++ b/programs/bpf/rust/many_args/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-many-args" -version = "1.14.15" +version = "1.14.16" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ documentation = "https://docs.rs/solana-bpf-rust-many-args" edition = "2021" [dependencies] -solana-bpf-rust-many-args-dep = { path = "../many_args_dep", version = "=1.14.15" } -solana-program = { path = "../../../../sdk/program", version = "=1.14.15" } +solana-bpf-rust-many-args-dep = { path = "../many_args_dep", version = "=1.14.16" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.16" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/many_args_dep/Cargo.toml b/programs/bpf/rust/many_args_dep/Cargo.toml index 7de12757303930..4f7b865345c668 100644 --- a/programs/bpf/rust/many_args_dep/Cargo.toml +++ b/programs/bpf/rust/many_args_dep/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-many-args-dep" -version = "1.14.15" +version = "1.14.16" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-many-args-dep" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.15" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.16" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/bpf/rust/mem/Cargo.toml b/programs/bpf/rust/mem/Cargo.toml index 541a8f75c8ed6e..15f71f245adb20 100644 --- a/programs/bpf/rust/mem/Cargo.toml +++ b/programs/bpf/rust/mem/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-mem" -version = "1.14.15" +version = "1.14.16" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,12 +13,12 @@ edition = "2021" no-entrypoint = [] [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.15" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.16" } [dev-dependencies] -solana-program-runtime = { path = "../../../../program-runtime", version = "=1.14.15" } -solana-program-test = { path = "../../../../program-test", version = "=1.14.15" } -solana-sdk = { path = "../../../../sdk", version = "=1.14.15" } +solana-program-runtime = { path = "../../../../program-runtime", version = "=1.14.16" } +solana-program-test = { path = "../../../../program-test", version = "=1.14.16" } +solana-sdk = { path = "../../../../sdk", version = "=1.14.16" } [lib] crate-type = ["cdylib", "lib"] diff --git a/programs/bpf/rust/membuiltins/Cargo.toml b/programs/bpf/rust/membuiltins/Cargo.toml index 3383854f795675..7a5b1765456a3a 100644 --- a/programs/bpf/rust/membuiltins/Cargo.toml +++ b/programs/bpf/rust/membuiltins/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-membuiltins" -version = "1.14.15" +version = "1.14.16" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ documentation = "https://docs.rs/solana-bpf-rust-mem" edition = "2021" [dependencies] -solana-bpf-rust-mem = { path = "../mem", version = "=1.14.15", features = [ "no-entrypoint" ] } -solana-program = { path = "../../../../sdk/program", version = "=1.14.15" } +solana-bpf-rust-mem = { path = "../mem", version = "=1.14.16", features = [ "no-entrypoint" ] } +solana-program = { path = "../../../../sdk/program", version = "=1.14.16" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/noop/Cargo.toml b/programs/bpf/rust/noop/Cargo.toml index 8bdd8e0a03c98c..8be1cd04c7d84e 100644 --- a/programs/bpf/rust/noop/Cargo.toml +++ b/programs/bpf/rust/noop/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-noop" -version = "1.14.15" +version = "1.14.16" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-noop" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.15" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.16" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/panic/Cargo.toml b/programs/bpf/rust/panic/Cargo.toml index b4a596cbeef75f..6bc48a6714e3a8 100644 --- a/programs/bpf/rust/panic/Cargo.toml +++ b/programs/bpf/rust/panic/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-panic" -version = "1.14.15" +version = "1.14.16" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-panic" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.15" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.16" } [features] default = ["custom-panic"] diff --git a/programs/bpf/rust/param_passing/Cargo.toml b/programs/bpf/rust/param_passing/Cargo.toml index ce7a4a7dd17e05..f02a9748f51233 100644 --- a/programs/bpf/rust/param_passing/Cargo.toml +++ b/programs/bpf/rust/param_passing/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-param-passing" -version = "1.14.15" +version = "1.14.16" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ documentation = "https://docs.rs/solana-bpf-rust-param-passing" edition = "2021" [dependencies] -solana-bpf-rust-param-passing-dep = { path = "../param_passing_dep", version = "=1.14.15" } -solana-program = { path = "../../../../sdk/program", version = "=1.14.15" } +solana-bpf-rust-param-passing-dep = { path = "../param_passing_dep", version = "=1.14.16" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.16" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/param_passing_dep/Cargo.toml b/programs/bpf/rust/param_passing_dep/Cargo.toml index edce85bbce22e8..b981df8751a4ff 100644 --- a/programs/bpf/rust/param_passing_dep/Cargo.toml +++ b/programs/bpf/rust/param_passing_dep/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-param-passing-dep" -version = "1.14.15" +version = "1.14.16" description = "Solana BPF program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-param-passing-dep" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.15" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.16" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/bpf/rust/rand/Cargo.toml b/programs/bpf/rust/rand/Cargo.toml index 97a38d30053d38..73968ee43f0470 100644 --- a/programs/bpf/rust/rand/Cargo.toml +++ b/programs/bpf/rust/rand/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-rand" -version = "1.14.15" +version = "1.14.16" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,7 +12,7 @@ edition = "2021" [dependencies] getrandom = { version = "0.1.14", features = ["dummy"] } rand = "0.7" -solana-program = { path = "../../../../sdk/program", version = "=1.14.15" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.16" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/realloc/Cargo.toml b/programs/bpf/rust/realloc/Cargo.toml index 6837e315ebd00f..89293ea3ce34bb 100644 --- a/programs/bpf/rust/realloc/Cargo.toml +++ b/programs/bpf/rust/realloc/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-realloc" -version = "1.14.15" +version = "1.14.16" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,7 +14,7 @@ default = ["program"] program = [] [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.15" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.16" } [lib] crate-type = ["lib", "cdylib"] diff --git a/programs/bpf/rust/realloc_invoke/Cargo.toml b/programs/bpf/rust/realloc_invoke/Cargo.toml index b05c260fc1e097..1707cc584e1f36 100644 --- a/programs/bpf/rust/realloc_invoke/Cargo.toml +++ b/programs/bpf/rust/realloc_invoke/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-realloc-invoke" -version = "1.14.15" +version = "1.14.16" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,8 +14,8 @@ default = ["program"] program = [] [dependencies] -solana-bpf-rust-realloc = { path = "../realloc", version = "=1.14.15", default-features = false } -solana-program = { path = "../../../../sdk/program", version = "=1.14.15" } +solana-bpf-rust-realloc = { path = "../realloc", version = "=1.14.16", default-features = false } +solana-program = { path = "../../../../sdk/program", version = "=1.14.16" } [lib] crate-type = ["lib", "cdylib"] diff --git a/programs/bpf/rust/ro_account_modify/Cargo.toml b/programs/bpf/rust/ro_account_modify/Cargo.toml index 372245706051a5..e23d9d5c11ac6d 100644 --- a/programs/bpf/rust/ro_account_modify/Cargo.toml +++ b/programs/bpf/rust/ro_account_modify/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-ro-account_modify" -version = "1.14.15" +version = "1.14.16" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-ro-modify" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.15" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.16" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/ro_modify/Cargo.toml b/programs/bpf/rust/ro_modify/Cargo.toml index dd38945aa14351..004964a62716fc 100644 --- a/programs/bpf/rust/ro_modify/Cargo.toml +++ b/programs/bpf/rust/ro_modify/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-ro-modify" -version = "1.14.15" +version = "1.14.16" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-ro-modify" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.15" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.16" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/sanity/Cargo.toml b/programs/bpf/rust/sanity/Cargo.toml index effa8f30ce0331..1e5f9dfdff3302 100644 --- a/programs/bpf/rust/sanity/Cargo.toml +++ b/programs/bpf/rust/sanity/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-sanity" -version = "1.14.15" +version = "1.14.16" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,12 +13,12 @@ edition = "2021" test-bpf = [] [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.15" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.16" } [dev-dependencies] -solana-program-runtime = { path = "../../../../program-runtime", version = "=1.14.15" } -solana-program-test = { path = "../../../../program-test", version = "=1.14.15" } -solana-sdk = { path = "../../../../sdk", version = "=1.14.15" } +solana-program-runtime = { path = "../../../../program-runtime", version = "=1.14.16" } +solana-program-test = { path = "../../../../program-test", version = "=1.14.16" } +solana-sdk = { path = "../../../../sdk", version = "=1.14.16" } [lib] crate-type = ["cdylib", "lib"] diff --git a/programs/bpf/rust/secp256k1_recover/Cargo.toml b/programs/bpf/rust/secp256k1_recover/Cargo.toml index 7470379cc60aa2..45d375199830f9 100644 --- a/programs/bpf/rust/secp256k1_recover/Cargo.toml +++ b/programs/bpf/rust/secp256k1_recover/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-secp256k1-recover" -version = "1.14.15" +version = "1.14.16" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -11,7 +11,7 @@ edition = "2021" [dependencies] libsecp256k1 = { version = "0.7.0", default-features = false } -solana-program = { path = "../../../../sdk/program", version = "=1.14.15" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.16" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/sha/Cargo.toml b/programs/bpf/rust/sha/Cargo.toml index bbd5bace46ffc0..4b3feff82c8447 100644 --- a/programs/bpf/rust/sha/Cargo.toml +++ b/programs/bpf/rust/sha/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-sha" -version = "1.14.15" +version = "1.14.16" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -11,7 +11,7 @@ edition = "2021" [dependencies] blake3 = "1.0.0" -solana-program = { path = "../../../../sdk/program", version = "=1.14.15" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.16" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/sibling_inner_instruction/Cargo.toml b/programs/bpf/rust/sibling_inner_instruction/Cargo.toml index 405d2f401ed8d3..08d20332d3f2bf 100644 --- a/programs/bpf/rust/sibling_inner_instruction/Cargo.toml +++ b/programs/bpf/rust/sibling_inner_instruction/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-sibling_inner-instructions" -version = "1.14.15" +version = "1.14.16" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-log-data" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.15" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.16" } [features] default = ["program"] diff --git a/programs/bpf/rust/sibling_instruction/Cargo.toml b/programs/bpf/rust/sibling_instruction/Cargo.toml index f71783b64972d8..487a975ac16758 100644 --- a/programs/bpf/rust/sibling_instruction/Cargo.toml +++ b/programs/bpf/rust/sibling_instruction/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-sibling-instructions" -version = "1.14.15" +version = "1.14.16" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-log-data" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.15" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.16" } [features] default = ["program"] diff --git a/programs/bpf/rust/simulation/Cargo.toml b/programs/bpf/rust/simulation/Cargo.toml index e06f06dc12c3e0..72c9761fb2aa25 100644 --- a/programs/bpf/rust/simulation/Cargo.toml +++ b/programs/bpf/rust/simulation/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-simulation" -version = "1.14.15" +version = "1.14.16" description = "Solana BPF Program Simulation Differences" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,13 +13,13 @@ edition = "2021" test-bpf = [] [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.15" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.16" } [dev-dependencies] -solana-logger = { path = "../../../../logger", version = "=1.14.15" } -solana-program-test = { path = "../../../../program-test", version = "=1.14.15" } -solana-sdk = { path = "../../../../sdk", version = "=1.14.15" } -solana-validator = { path = "../../../../validator", version = "=1.14.15" } +solana-logger = { path = "../../../../logger", version = "=1.14.16" } +solana-program-test = { path = "../../../../program-test", version = "=1.14.16" } +solana-sdk = { path = "../../../../sdk", version = "=1.14.16" } +solana-validator = { path = "../../../../validator", version = "=1.14.16" } [lib] crate-type = ["cdylib", "lib"] diff --git a/programs/bpf/rust/spoof1/Cargo.toml b/programs/bpf/rust/spoof1/Cargo.toml index bce8b4d7fe24b8..153af259abd917 100644 --- a/programs/bpf/rust/spoof1/Cargo.toml +++ b/programs/bpf/rust/spoof1/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-spoof1" -version = "1.14.15" +version = "1.14.16" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-spoof1" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.15" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.16" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/spoof1_system/Cargo.toml b/programs/bpf/rust/spoof1_system/Cargo.toml index a9931fbf46046d..32ce39dc4e65e3 100644 --- a/programs/bpf/rust/spoof1_system/Cargo.toml +++ b/programs/bpf/rust/spoof1_system/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-spoof1-system" -version = "1.14.15" +version = "1.14.16" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-spoof1-system" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.15" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.16" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/sysvar/Cargo.toml b/programs/bpf/rust/sysvar/Cargo.toml index 61c781aae50451..2d10d8a68de47c 100644 --- a/programs/bpf/rust/sysvar/Cargo.toml +++ b/programs/bpf/rust/sysvar/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-sysvar" -version = "1.14.15" +version = "1.14.16" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,12 +10,12 @@ documentation = "https://docs.rs/solana-bpf-rust-sysvar" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.15" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.16" } [dev-dependencies] -solana-program-runtime = { path = "../../../../program-runtime", version = "=1.14.15" } -solana-program-test = { path = "../../../../program-test", version = "=1.14.15" } -solana-sdk = { path = "../../../../sdk", version = "=1.14.15" } +solana-program-runtime = { path = "../../../../program-runtime", version = "=1.14.16" } +solana-program-test = { path = "../../../../program-test", version = "=1.14.16" } +solana-sdk = { path = "../../../../sdk", version = "=1.14.16" } [lib] crate-type = ["cdylib", "lib"] diff --git a/programs/bpf/rust/upgradeable/Cargo.toml b/programs/bpf/rust/upgradeable/Cargo.toml index 77ef98a41d858e..2a770fafafeb85 100644 --- a/programs/bpf/rust/upgradeable/Cargo.toml +++ b/programs/bpf/rust/upgradeable/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-upgradeable" -version = "1.14.15" +version = "1.14.16" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-upgradeable" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.15" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.16" } [lib] name = "solana_bpf_rust_upgradeable" diff --git a/programs/bpf/rust/upgraded/Cargo.toml b/programs/bpf/rust/upgraded/Cargo.toml index 773a768af19fce..6f55d2005da6d5 100644 --- a/programs/bpf/rust/upgraded/Cargo.toml +++ b/programs/bpf/rust/upgraded/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-upgraded" -version = "1.14.15" +version = "1.14.16" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-upgraded" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.15" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.16" } [lib] name = "solana_bpf_rust_upgraded" diff --git a/programs/bpf_loader/Cargo.toml b/programs/bpf_loader/Cargo.toml index 47cc912a9b34d8..2c5266d8404338 100644 --- a/programs/bpf_loader/Cargo.toml +++ b/programs/bpf_loader/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-loader-program" -version = "1.14.15" +version = "1.14.16" description = "Solana BPF loader" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,17 +14,17 @@ bincode = "1.3.3" byteorder = "1.4.3" libsecp256k1 = "0.6.0" log = "0.4.17" -solana-measure = { path = "../../measure", version = "=1.14.15" } -solana-metrics = { path = "../../metrics", version = "=1.14.15" } -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.15" } -solana-sdk = { path = "../../sdk", version = "=1.14.15" } -solana-zk-token-sdk = { path = "../../zk-token-sdk", version = "=1.14.15" } +solana-measure = { path = "../../measure", version = "=1.14.16" } +solana-metrics = { path = "../../metrics", version = "=1.14.16" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.16" } +solana-sdk = { path = "../../sdk", version = "=1.14.16" } +solana-zk-token-sdk = { path = "../../zk-token-sdk", version = "=1.14.16" } solana_rbpf = "=0.2.31" thiserror = "1.0" [dev-dependencies] rand = "0.7.3" -solana-runtime = { path = "../../runtime", version = "=1.14.15" } +solana-runtime = { path = "../../runtime", version = "=1.14.16" } [lib] crate-type = ["lib"] diff --git a/programs/bpf_loader/gen-syscall-list/Cargo.toml b/programs/bpf_loader/gen-syscall-list/Cargo.toml index 8b5248126a180e..90c6e2c3505e3e 100644 --- a/programs/bpf_loader/gen-syscall-list/Cargo.toml +++ b/programs/bpf_loader/gen-syscall-list/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "gen-syscall-list" -version = "1.14.15" +version = "1.14.16" edition = "2021" license = "Apache-2.0" publish = false diff --git a/programs/compute-budget/Cargo.toml b/programs/compute-budget/Cargo.toml index 90d6d70c4b84f2..6cbf5f850a1c5c 100644 --- a/programs/compute-budget/Cargo.toml +++ b/programs/compute-budget/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "solana-compute-budget-program" description = "Solana Compute Budget program" -version = "1.14.15" +version = "1.14.16" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-compute-budget-program" repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ license = "Apache-2.0" edition = "2021" [dependencies] -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.15" } -solana-sdk = { path = "../../sdk", version = "=1.14.15" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.16" } +solana-sdk = { path = "../../sdk", version = "=1.14.16" } [lib] crate-type = ["lib"] diff --git a/programs/config/Cargo.toml b/programs/config/Cargo.toml index ba8549e60aca3b..7b8d8ad4dcc3f2 100644 --- a/programs/config/Cargo.toml +++ b/programs/config/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-config-program" -version = "1.14.15" +version = "1.14.16" description = "Solana Config program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,11 +14,11 @@ bincode = "1.3.3" chrono = { version = "0.4.11", features = ["serde"] } serde = "1.0.138" serde_derive = "1.0.103" -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.15" } -solana-sdk = { path = "../../sdk", version = "=1.14.15" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.16" } +solana-sdk = { path = "../../sdk", version = "=1.14.16" } [dev-dependencies] -solana-logger = { path = "../../logger", version = "=1.14.15" } +solana-logger = { path = "../../logger", version = "=1.14.16" } [lib] crate-type = ["lib"] diff --git a/programs/ed25519-tests/Cargo.toml b/programs/ed25519-tests/Cargo.toml index e2043c88e9e30f..599da086a82cf4 100644 --- a/programs/ed25519-tests/Cargo.toml +++ b/programs/ed25519-tests/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-ed25519-program-tests" -version = "1.14.15" +version = "1.14.16" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" @@ -12,8 +12,8 @@ publish = false assert_matches = "1.5.0" ed25519-dalek = "=1.0.1" rand = "0.7.0" -solana-program-test = { path = "../../program-test", version = "=1.14.15" } -solana-sdk = { path = "../../sdk", version = "=1.14.15" } +solana-program-test = { path = "../../program-test", version = "=1.14.16" } +solana-sdk = { path = "../../sdk", version = "=1.14.16" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/stake/Cargo.toml b/programs/stake/Cargo.toml index a36587f041a4ad..15cd117869c696 100644 --- a/programs/stake/Cargo.toml +++ b/programs/stake/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-stake-program" -version = "1.14.15" +version = "1.14.16" description = "Solana Stake program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -16,19 +16,19 @@ num-derive = "0.3" num-traits = "0.2" serde = "1.0.138" serde_derive = "1.0.103" -solana-config-program = { path = "../config", version = "=1.14.15" } -solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.15" } -solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.15" } -solana-metrics = { path = "../../metrics", version = "=1.14.15" } -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.15" } -solana-sdk = { path = "../../sdk", version = "=1.14.15" } -solana-vote-program = { path = "../vote", version = "=1.14.15" } +solana-config-program = { path = "../config", version = "=1.14.16" } +solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.16" } +solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.16" } +solana-metrics = { path = "../../metrics", version = "=1.14.16" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.16" } +solana-sdk = { path = "../../sdk", version = "=1.14.16" } +solana-vote-program = { path = "../vote", version = "=1.14.16" } thiserror = "1.0" [dev-dependencies] assert_matches = "1.5.0" proptest = "1.0" -solana-logger = { path = "../../logger", version = "=1.14.15" } +solana-logger = { path = "../../logger", version = "=1.14.16" } test-case = "2.1.0" [build-dependencies] diff --git a/programs/vote/Cargo.toml b/programs/vote/Cargo.toml index df7d68b066af6c..68f20ea4614080 100644 --- a/programs/vote/Cargo.toml +++ b/programs/vote/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-vote-program" -version = "1.14.15" +version = "1.14.16" description = "Solana Vote program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -16,17 +16,17 @@ num-derive = "0.3" num-traits = "0.2" serde = "1.0.138" serde_derive = "1.0.103" -solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.15" } -solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.15" } -solana-metrics = { path = "../../metrics", version = "=1.14.15" } -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.15" } -solana-sdk = { path = "../../sdk", version = "=1.14.15" } +solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.16" } +solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.16" } +solana-metrics = { path = "../../metrics", version = "=1.14.16" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.16" } +solana-sdk = { path = "../../sdk", version = "=1.14.16" } thiserror = "1.0" [dev-dependencies] itertools = "0.10.3" rand = "0.7.0" -solana-logger = { path = "../../logger", version = "=1.14.15" } +solana-logger = { path = "../../logger", version = "=1.14.16" } test-case = "2.1.0" [build-dependencies] diff --git a/programs/zk-token-proof/Cargo.toml b/programs/zk-token-proof/Cargo.toml index c9fd51c80c7810..5d2a0965a3ad79 100644 --- a/programs/zk-token-proof/Cargo.toml +++ b/programs/zk-token-proof/Cargo.toml @@ -3,7 +3,7 @@ name = "solana-zk-token-proof-program" description = "Solana Zk Token Proof Program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" -version = "1.14.15" +version = "1.14.16" license = "Apache-2.0" edition = "2021" @@ -12,6 +12,6 @@ bytemuck = { version = "1.11.0", features = ["derive"] } getrandom = { version = "0.1", features = ["dummy"] } num-derive = "0.3" num-traits = "0.2" -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.15" } -solana-sdk = { path = "../../sdk", version = "=1.14.15" } -solana-zk-token-sdk = { path = "../../zk-token-sdk", version = "=1.14.15" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.16" } +solana-sdk = { path = "../../sdk", version = "=1.14.16" } +solana-zk-token-sdk = { path = "../../zk-token-sdk", version = "=1.14.16" } diff --git a/rayon-threadlimit/Cargo.toml b/rayon-threadlimit/Cargo.toml index bcc65f6155301f..ece740b02a5067 100644 --- a/rayon-threadlimit/Cargo.toml +++ b/rayon-threadlimit/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-rayon-threadlimit" -version = "1.14.15" +version = "1.14.16" description = "solana-rayon-threadlimit" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-rayon-threadlimit" diff --git a/rbpf-cli/Cargo.toml b/rbpf-cli/Cargo.toml index ecf9d57676f86b..f9f7481ddfbc98 100644 --- a/rbpf-cli/Cargo.toml +++ b/rbpf-cli/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "rbpf-cli" -version = "1.14.15" +version = "1.14.16" description = "CLI to test and analyze eBPF programs" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/rbpf" @@ -13,8 +13,8 @@ publish = false clap = { version = "3.1.5", features = ["cargo"] } serde = "1.0.138" serde_json = "1.0.81" -solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.15" } -solana-logger = { path = "../logger", version = "=1.14.15" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.15" } -solana-sdk = { path = "../sdk", version = "=1.14.15" } +solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.16" } +solana-logger = { path = "../logger", version = "=1.14.16" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.16" } +solana-sdk = { path = "../sdk", version = "=1.14.16" } solana_rbpf = "=0.2.31" diff --git a/remote-wallet/Cargo.toml b/remote-wallet/Cargo.toml index 1b4001d81e16ba..229a2f448d45e5 100644 --- a/remote-wallet/Cargo.toml +++ b/remote-wallet/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-remote-wallet" description = "Blockchain, Rebuilt for Scale" -version = "1.14.15" +version = "1.14.16" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -19,7 +19,7 @@ num-traits = { version = "0.2" } parking_lot = "0.12" qstring = "0.7.2" semver = "1.0" -solana-sdk = { path = "../sdk", version = "=1.14.15" } +solana-sdk = { path = "../sdk", version = "=1.14.16" } thiserror = "1.0" uriparse = "0.6.4" diff --git a/rpc-test/Cargo.toml b/rpc-test/Cargo.toml index 6a5cbb6b78b220..a2f84d76daa05e 100644 --- a/rpc-test/Cargo.toml +++ b/rpc-test/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-rpc-test" -version = "1.14.15" +version = "1.14.16" description = "Solana RPC Test" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -19,17 +19,17 @@ log = "0.4.17" reqwest = { version = "0.11.11", default-features = false, features = ["blocking", "brotli", "deflate", "gzip", "rustls-tls", "json"] } serde = "1.0.138" serde_json = "1.0.81" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.15" } -solana-client = { path = "../client", version = "=1.14.15" } -solana-rpc = { path = "../rpc", version = "=1.14.15" } -solana-sdk = { path = "../sdk", version = "=1.14.15" } -solana-streamer = { path = "../streamer", version = "=1.14.15" } -solana-test-validator = { path = "../test-validator", version = "=1.14.15" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.15" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.16" } +solana-client = { path = "../client", version = "=1.14.16" } +solana-rpc = { path = "../rpc", version = "=1.14.16" } +solana-sdk = { path = "../sdk", version = "=1.14.16" } +solana-streamer = { path = "../streamer", version = "=1.14.16" } +solana-test-validator = { path = "../test-validator", version = "=1.14.16" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.16" } tokio = { version = "~1.14.1", features = ["full"] } [dev-dependencies] -solana-logger = { path = "../logger", version = "=1.14.15" } +solana-logger = { path = "../logger", version = "=1.14.16" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/rpc/Cargo.toml b/rpc/Cargo.toml index ae5f3a4d3ecbeb..8551bc839b56c2 100644 --- a/rpc/Cargo.toml +++ b/rpc/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-rpc" -version = "1.14.15" +version = "1.14.16" description = "Solana RPC" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -29,26 +29,26 @@ serde = "1.0.138" serde_derive = "1.0.103" serde_json = "1.0.81" soketto = "0.7" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.15" } -solana-client = { path = "../client", version = "=1.14.15" } -solana-entry = { path = "../entry", version = "=1.14.15" } -solana-faucet = { path = "../faucet", version = "=1.14.15" } -solana-gossip = { path = "../gossip", version = "=1.14.15" } -solana-ledger = { path = "../ledger", version = "=1.14.15" } -solana-measure = { path = "../measure", version = "=1.14.15" } -solana-metrics = { path = "../metrics", version = "=1.14.15" } -solana-perf = { path = "../perf", version = "=1.14.15" } -solana-poh = { path = "../poh", version = "=1.14.15" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.15" } -solana-runtime = { path = "../runtime", version = "=1.14.15" } -solana-sdk = { path = "../sdk", version = "=1.14.15" } -solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.15" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.15" } -solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.15" } -solana-streamer = { path = "../streamer", version = "=1.14.15" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.15" } -solana-version = { path = "../version", version = "=1.14.15" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.15" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.16" } +solana-client = { path = "../client", version = "=1.14.16" } +solana-entry = { path = "../entry", version = "=1.14.16" } +solana-faucet = { path = "../faucet", version = "=1.14.16" } +solana-gossip = { path = "../gossip", version = "=1.14.16" } +solana-ledger = { path = "../ledger", version = "=1.14.16" } +solana-measure = { path = "../measure", version = "=1.14.16" } +solana-metrics = { path = "../metrics", version = "=1.14.16" } +solana-perf = { path = "../perf", version = "=1.14.16" } +solana-poh = { path = "../poh", version = "=1.14.16" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.16" } +solana-runtime = { path = "../runtime", version = "=1.14.16" } +solana-sdk = { path = "../sdk", version = "=1.14.16" } +solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.16" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.16" } +solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.16" } +solana-streamer = { path = "../streamer", version = "=1.14.16" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.16" } +solana-version = { path = "../version", version = "=1.14.16" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.16" } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } spl-token-2022 = { version = "=0.5.0", features = ["no-entrypoint"] } stream-cancel = "0.8.1" @@ -58,9 +58,9 @@ tokio-util = { version = "0.6", features = ["codec", "compat"] } [dev-dependencies] serial_test = "0.8.0" -solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.15" } -solana-net-utils = { path = "../net-utils", version = "=1.14.15" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.15" } +solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.16" } +solana-net-utils = { path = "../net-utils", version = "=1.14.16" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.16" } symlink = "0.1.0" [lib] diff --git a/runtime/Cargo.toml b/runtime/Cargo.toml index 7d666bb705b38e..65c6d565da9017 100644 --- a/runtime/Cargo.toml +++ b/runtime/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-runtime" -version = "1.14.15" +version = "1.14.16" description = "Solana runtime" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -40,21 +40,21 @@ rayon = "1.5.3" regex = "1.5.6" serde = { version = "1.0.138", features = ["rc"] } serde_derive = "1.0.103" -solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.15" } -solana-bucket-map = { path = "../bucket_map", version = "=1.14.15" } -solana-compute-budget-program = { path = "../programs/compute-budget", version = "=1.14.15" } -solana-config-program = { path = "../programs/config", version = "=1.14.15" } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.15" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.15" } -solana-measure = { path = "../measure", version = "=1.14.15" } -solana-metrics = { path = "../metrics", version = "=1.14.15" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.15" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.15" } -solana-sdk = { path = "../sdk", version = "=1.14.15" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.15" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.15" } -solana-zk-token-proof-program = { path = "../programs/zk-token-proof", version = "=1.14.15" } -solana-zk-token-sdk = { path = "../zk-token-sdk", version = "=1.14.15" } +solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.16" } +solana-bucket-map = { path = "../bucket_map", version = "=1.14.16" } +solana-compute-budget-program = { path = "../programs/compute-budget", version = "=1.14.16" } +solana-config-program = { path = "../programs/config", version = "=1.14.16" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.16" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.16" } +solana-measure = { path = "../measure", version = "=1.14.16" } +solana-metrics = { path = "../metrics", version = "=1.14.16" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.16" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.16" } +solana-sdk = { path = "../sdk", version = "=1.14.16" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.16" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.16" } +solana-zk-token-proof-program = { path = "../programs/zk-token-proof", version = "=1.14.16" } +solana-zk-token-sdk = { path = "../zk-token-sdk", version = "=1.14.16" } strum = { version = "0.24", features = ["derive"] } strum_macros = "0.24" symlink = "0.1.0" @@ -72,7 +72,7 @@ assert_matches = "1.5.0" ed25519-dalek = "=1.0.1" libsecp256k1 = "0.6.0" rand_chacha = "0.2.2" -solana-logger = { path = "../logger", version = "=1.14.15" } +solana-logger = { path = "../logger", version = "=1.14.16" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/runtime/store-tool/Cargo.toml b/runtime/store-tool/Cargo.toml index 1a8d6c344b9dbb..42fc6b9effe52b 100644 --- a/runtime/store-tool/Cargo.toml +++ b/runtime/store-tool/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-store-tool" description = "Tool to inspect append vecs" -version = "1.14.15" +version = "1.14.16" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -12,9 +12,9 @@ publish = false [dependencies] clap = "2.33.1" log = { version = "0.4.17" } -solana-logger = { path = "../../logger", version = "=1.14.15" } -solana-runtime = { path = "..", version = "=1.14.15" } -solana-version = { path = "../../version", version = "=1.14.15" } +solana-logger = { path = "../../logger", version = "=1.14.16" } +solana-runtime = { path = "..", version = "=1.14.16" } +solana-version = { path = "../../version", version = "=1.14.16" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/sdk/Cargo.toml b/sdk/Cargo.toml index 21bbbe423c6e46..98cf5d7b57d322 100644 --- a/sdk/Cargo.toml +++ b/sdk/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-sdk" -version = "1.14.15" +version = "1.14.16" description = "Solana SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -71,11 +71,11 @@ serde_derive = "1.0.103" serde_json = { version = "1.0.81", optional = true } sha2 = "0.10.2" sha3 = { version = "0.10.1", optional = true } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.15" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.15" } -solana-logger = { path = "../logger", version = "=1.14.15", optional = true } -solana-program = { path = "program", version = "=1.14.15" } -solana-sdk-macro = { path = "macro", version = "=1.14.15" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.16" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.16" } +solana-logger = { path = "../logger", version = "=1.14.16", optional = true } +solana-program = { path = "program", version = "=1.14.16" } +solana-sdk-macro = { path = "macro", version = "=1.14.16" } thiserror = "1.0" uriparse = "0.6.4" wasm-bindgen = "0.2" diff --git a/sdk/cargo-build-bpf/Cargo.toml b/sdk/cargo-build-bpf/Cargo.toml index 06b41bbaac6e2e..8d7abba464c995 100644 --- a/sdk/cargo-build-bpf/Cargo.toml +++ b/sdk/cargo-build-bpf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-cargo-build-bpf" -version = "1.14.15" +version = "1.14.16" description = "Compile a local package and all of its dependencies using the Solana SBF SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,7 +12,7 @@ publish = false [dependencies] cargo_metadata = "0.15.0" clap = { version = "3.1.5", features = ["cargo", "env"] } -solana-sdk = { path = "..", version = "=1.14.15" } +solana-sdk = { path = "..", version = "=1.14.16" } [features] program = [] diff --git a/sdk/cargo-build-sbf/Cargo.toml b/sdk/cargo-build-sbf/Cargo.toml index d46fcf809f952f..92e4a10c447c46 100644 --- a/sdk/cargo-build-sbf/Cargo.toml +++ b/sdk/cargo-build-sbf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-cargo-build-sbf" -version = "1.14.15" +version = "1.14.16" description = "Compile a local package and all of its dependencies using the Solana SBF SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -15,9 +15,9 @@ cargo_metadata = "0.15.0" clap = { version = "3.1.5", features = ["cargo", "env"] } log = { version = "0.4.14", features = ["std"] } regex = "1.5.6" -solana-download-utils = { path = "../../download-utils", version = "=1.14.15" } -solana-logger = { path = "../../logger", version = "=1.14.15" } -solana-sdk = { path = "..", version = "=1.14.15" } +solana-download-utils = { path = "../../download-utils", version = "=1.14.16" } +solana-logger = { path = "../../logger", version = "=1.14.16" } +solana-sdk = { path = "..", version = "=1.14.16" } tar = "0.4.38" [dev-dependencies] diff --git a/sdk/cargo-build-sbf/tests/crates/fail/Cargo.toml b/sdk/cargo-build-sbf/tests/crates/fail/Cargo.toml index b4be58369db33c..5f78806bc0e465 100644 --- a/sdk/cargo-build-sbf/tests/crates/fail/Cargo.toml +++ b/sdk/cargo-build-sbf/tests/crates/fail/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "fail" -version = "1.14.15" +version = "1.14.16" description = "Solana SBF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ edition = "2021" publish = false [dependencies] -solana-program = { path = "../../../../program", version = "=1.14.15" } +solana-program = { path = "../../../../program", version = "=1.14.16" } [lib] crate-type = ["cdylib"] diff --git a/sdk/cargo-build-sbf/tests/crates/noop/Cargo.toml b/sdk/cargo-build-sbf/tests/crates/noop/Cargo.toml index 6b2f23663ca4dd..2469009b9a1177 100644 --- a/sdk/cargo-build-sbf/tests/crates/noop/Cargo.toml +++ b/sdk/cargo-build-sbf/tests/crates/noop/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "noop" -version = "1.14.15" +version = "1.14.16" description = "Solana SBF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ edition = "2021" publish = false [dependencies] -solana-program = { path = "../../../../program", version = "=1.14.15" } +solana-program = { path = "../../../../program", version = "=1.14.16" } [lib] crate-type = ["cdylib"] diff --git a/sdk/cargo-test-bpf/Cargo.toml b/sdk/cargo-test-bpf/Cargo.toml index af293b56a766da..e13c3cf586547e 100644 --- a/sdk/cargo-test-bpf/Cargo.toml +++ b/sdk/cargo-test-bpf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-cargo-test-bpf" -version = "1.14.15" +version = "1.14.16" description = "Execute all unit and integration tests after building with the Solana SBF SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/sdk/cargo-test-sbf/Cargo.toml b/sdk/cargo-test-sbf/Cargo.toml index 9663a9c6d8d0a1..b332b2af91cab5 100644 --- a/sdk/cargo-test-sbf/Cargo.toml +++ b/sdk/cargo-test-sbf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-cargo-test-sbf" -version = "1.14.15" +version = "1.14.16" description = "Execute all unit and integration tests after building with the Solana SBF SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/sdk/gen-headers/Cargo.toml b/sdk/gen-headers/Cargo.toml index 9d63aefbff75e5..6314a747abf6f9 100644 --- a/sdk/gen-headers/Cargo.toml +++ b/sdk/gen-headers/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "gen-headers" -version = "1.14.15" +version = "1.14.16" edition = "2021" license = "Apache-2.0" publish = false diff --git a/sdk/macro/Cargo.toml b/sdk/macro/Cargo.toml index 9fe26ace18dfad..babce8dcabc80f 100644 --- a/sdk/macro/Cargo.toml +++ b/sdk/macro/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-sdk-macro" -version = "1.14.15" +version = "1.14.16" description = "Solana SDK Macro" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/sdk/program/Cargo.toml b/sdk/program/Cargo.toml index ea423da7966f35..15f0323871d0e3 100644 --- a/sdk/program/Cargo.toml +++ b/sdk/program/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-program" -version = "1.14.15" +version = "1.14.16" description = "Solana Program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -31,9 +31,9 @@ serde_derive = "1.0" serde_json = "1.0" sha2 = "0.10.0" sha3 = "0.10.0" -solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.15" } -solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.15" } -solana-sdk-macro = { path = "../macro", version = "=1.14.15" } +solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.16" } +solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.16" } +solana-sdk-macro = { path = "../macro", version = "=1.14.16" } thiserror = "1.0" [target.'cfg(not(target_os = "solana"))'.dependencies] @@ -50,7 +50,7 @@ wasm-bindgen = "0.2" zeroize = { version = "1.3", default-features = true, features = ["zeroize_derive"] } [target.'cfg(not(target_os = "solana"))'.dev-dependencies] -solana-logger = { path = "../../logger", version = "=1.14.15" } +solana-logger = { path = "../../logger", version = "=1.14.16" } [target.'cfg(target_arch = "wasm32")'.dependencies] console_error_panic_hook = "0.1.7" diff --git a/send-transaction-service/Cargo.toml b/send-transaction-service/Cargo.toml index 27a07fde1c3011..fdd8974cfb5c15 100644 --- a/send-transaction-service/Cargo.toml +++ b/send-transaction-service/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-send-transaction-service" -version = "1.14.15" +version = "1.14.16" description = "Solana send transaction service" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,14 +12,14 @@ edition = "2021" [dependencies] crossbeam-channel = "0.5" log = "0.4.17" -solana-client = { path = "../client", version = "=1.14.15" } -solana-measure = { path = "../measure", version = "=1.14.15" } -solana-metrics = { path = "../metrics", version = "=1.14.15" } -solana-runtime = { path = "../runtime", version = "=1.14.15" } -solana-sdk = { path = "../sdk", version = "=1.14.15" } +solana-client = { path = "../client", version = "=1.14.16" } +solana-measure = { path = "../measure", version = "=1.14.16" } +solana-metrics = { path = "../metrics", version = "=1.14.16" } +solana-runtime = { path = "../runtime", version = "=1.14.16" } +solana-sdk = { path = "../sdk", version = "=1.14.16" } [dev-dependencies] -solana-logger = { path = "../logger", version = "=1.14.15" } +solana-logger = { path = "../logger", version = "=1.14.16" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/stake-accounts/Cargo.toml b/stake-accounts/Cargo.toml index bf1710921a1fd6..5bc0f41a99a873 100644 --- a/stake-accounts/Cargo.toml +++ b/stake-accounts/Cargo.toml @@ -3,7 +3,7 @@ name = "solana-stake-accounts" description = "Blockchain, Rebuilt for Scale" authors = ["Solana Maintainers "] edition = "2021" -version = "1.14.15" +version = "1.14.16" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -11,15 +11,15 @@ documentation = "https://docs.rs/solana-stake-accounts" [dependencies] clap = "2.33.1" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.15" } -solana-cli-config = { path = "../cli-config", version = "=1.14.15" } -solana-client = { path = "../client", version = "=1.14.15" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.15" } -solana-sdk = { path = "../sdk", version = "=1.14.15" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.15" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.16" } +solana-cli-config = { path = "../cli-config", version = "=1.14.16" } +solana-client = { path = "../client", version = "=1.14.16" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.16" } +solana-sdk = { path = "../sdk", version = "=1.14.16" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.16" } [dev-dependencies] -solana-runtime = { path = "../runtime", version = "=1.14.15" } +solana-runtime = { path = "../runtime", version = "=1.14.16" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/storage-bigtable/Cargo.toml b/storage-bigtable/Cargo.toml index 9ffebe342372ea..60838cf2891097 100644 --- a/storage-bigtable/Cargo.toml +++ b/storage-bigtable/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-storage-bigtable" -version = "1.14.15" +version = "1.14.16" description = "Solana Storage BigTable" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -27,10 +27,10 @@ prost-types = "0.11.0" serde = "1.0.138" serde_derive = "1.0.103" smpl_jwt = "0.7.1" -solana-metrics = { path = "../metrics", version = "=1.14.15" } -solana-sdk = { path = "../sdk", version = "=1.14.15" } -solana-storage-proto = { path = "../storage-proto", version = "=1.14.15" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.15" } +solana-metrics = { path = "../metrics", version = "=1.14.16" } +solana-sdk = { path = "../sdk", version = "=1.14.16" } +solana-storage-proto = { path = "../storage-proto", version = "=1.14.16" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.16" } thiserror = "1.0" tokio = "1" tonic = { version = "0.8.0", features = ["tls", "transport"] } diff --git a/storage-bigtable/build-proto/Cargo.lock b/storage-bigtable/build-proto/Cargo.lock index f3d4b73c54cd51..bf666919b74b63 100644 --- a/storage-bigtable/build-proto/Cargo.lock +++ b/storage-bigtable/build-proto/Cargo.lock @@ -219,7 +219,7 @@ dependencies = [ [[package]] name = "proto" -version = "1.14.15" +version = "1.14.16" dependencies = [ "protobuf-src", "tonic-build", diff --git a/storage-bigtable/build-proto/Cargo.toml b/storage-bigtable/build-proto/Cargo.toml index 0cdc7c187b7413..d08b4c4c1c12e0 100644 --- a/storage-bigtable/build-proto/Cargo.toml +++ b/storage-bigtable/build-proto/Cargo.toml @@ -7,7 +7,7 @@ license = "Apache-2.0" name = "proto" publish = false repository = "https://github.com/solana-labs/solana" -version = "1.14.15" +version = "1.14.16" [workspace] diff --git a/storage-proto/Cargo.toml b/storage-proto/Cargo.toml index 1362f6b22e16e4..aa172a0500adf6 100644 --- a/storage-proto/Cargo.toml +++ b/storage-proto/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-storage-proto" -version = "1.14.15" +version = "1.14.16" description = "Solana Storage Protobuf Definitions" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,9 +14,9 @@ bincode = "1.3.3" bs58 = "0.4.0" prost = "0.11.0" serde = "1.0.138" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.15" } -solana-sdk = { path = "../sdk", version = "=1.14.15" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.15" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.16" } +solana-sdk = { path = "../sdk", version = "=1.14.16" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.16" } [dev-dependencies] enum-iterator = "0.8.1" diff --git a/streamer/Cargo.toml b/streamer/Cargo.toml index 0dea6f40a23328..48c9adf8141f2a 100644 --- a/streamer/Cargo.toml +++ b/streamer/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-streamer" -version = "1.14.15" +version = "1.14.16" description = "Solana Streamer" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -25,15 +25,15 @@ quinn = "0.8.3" rand = "0.7.0" rcgen = "0.9.2" rustls = { version = "0.20.6", features = ["dangerous_configuration"] } -solana-metrics = { path = "../metrics", version = "=1.14.15" } -solana-perf = { path = "../perf", version = "=1.14.15" } -solana-sdk = { path = "../sdk", version = "=1.14.15" } +solana-metrics = { path = "../metrics", version = "=1.14.16" } +solana-perf = { path = "../perf", version = "=1.14.16" } +solana-sdk = { path = "../sdk", version = "=1.14.16" } thiserror = "1.0" tokio = { version = "1", features = ["full"] } x509-parser = "0.14.0" [dev-dependencies] -solana-logger = { path = "../logger", version = "=1.14.15" } +solana-logger = { path = "../logger", version = "=1.14.16" } [lib] crate-type = ["lib"] diff --git a/sys-tuner/Cargo.toml b/sys-tuner/Cargo.toml index 867307e696af34..ee53c2a57ba5f4 100644 --- a/sys-tuner/Cargo.toml +++ b/sys-tuner/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-sys-tuner" description = "The solana cluster system tuner daemon" -version = "1.14.15" +version = "1.14.16" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,8 +14,8 @@ publish = true clap = "2.33.1" libc = "0.2.126" log = "0.4.17" -solana-logger = { path = "../logger", version = "=1.14.15" } -solana-version = { path = "../version", version = "=1.14.15" } +solana-logger = { path = "../logger", version = "=1.14.16" } +solana-version = { path = "../version", version = "=1.14.16" } [target."cfg(unix)".dependencies] unix_socket2 = "0.5.4" diff --git a/test-validator/Cargo.toml b/test-validator/Cargo.toml index 422c5e2076d925..3521800bd06e48 100644 --- a/test-validator/Cargo.toml +++ b/test-validator/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "solana-test-validator" description = "Blockchain, Rebuilt for Scale" -version = "1.14.15" +version = "1.14.16" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-test-validator" readme = "../README.md" @@ -15,19 +15,19 @@ base64 = "0.13.0" log = "0.4.17" serde_derive = "1.0.103" serde_json = "1.0.81" -solana-cli-output = { path = "../cli-output", version = "=1.14.15" } -solana-client = { path = "../client", version = "=1.14.15" } -solana-core = { path = "../core", version = "=1.14.15" } -solana-gossip = { path = "../gossip", version = "=1.14.15" } -solana-ledger = { path = "../ledger", version = "=1.14.15" } -solana-logger = { path = "../logger", version = "=1.14.15" } -solana-net-utils = { path = "../net-utils", version = "=1.14.15" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.15" } -solana-program-test = { path = "../program-test", version = "=1.14.15" } -solana-rpc = { path = "../rpc", version = "=1.14.15" } -solana-runtime = { path = "../runtime", version = "=1.14.15" } -solana-sdk = { path = "../sdk", version = "=1.14.15" } -solana-streamer = { path = "../streamer", version = "=1.14.15" } +solana-cli-output = { path = "../cli-output", version = "=1.14.16" } +solana-client = { path = "../client", version = "=1.14.16" } +solana-core = { path = "../core", version = "=1.14.16" } +solana-gossip = { path = "../gossip", version = "=1.14.16" } +solana-ledger = { path = "../ledger", version = "=1.14.16" } +solana-logger = { path = "../logger", version = "=1.14.16" } +solana-net-utils = { path = "../net-utils", version = "=1.14.16" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.16" } +solana-program-test = { path = "../program-test", version = "=1.14.16" } +solana-rpc = { path = "../rpc", version = "=1.14.16" } +solana-runtime = { path = "../runtime", version = "=1.14.16" } +solana-sdk = { path = "../sdk", version = "=1.14.16" } +solana-streamer = { path = "../streamer", version = "=1.14.16" } tokio = { version = "1", features = ["full"] } [package.metadata.docs.rs] diff --git a/tokens/Cargo.toml b/tokens/Cargo.toml index 5fa5072bda9aa3..6acf8c75d21f94 100644 --- a/tokens/Cargo.toml +++ b/tokens/Cargo.toml @@ -3,7 +3,7 @@ name = "solana-tokens" description = "Blockchain, Rebuilt for Scale" authors = ["Solana Maintainers "] edition = "2021" -version = "1.14.15" +version = "1.14.16" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -19,14 +19,14 @@ indexmap = "1.9.1" indicatif = "0.16.2" pickledb = { version = "0.5.1", default-features = false, features = ["yaml"] } serde = { version = "1.0", features = ["derive"] } -solana-account-decoder = { path = "../account-decoder", version = "=1.14.15" } -solana-clap-utils = { path = "../clap-utils", version = "=1.14.15" } -solana-cli-config = { path = "../cli-config", version = "=1.14.15" } -solana-client = { path = "../client", version = "=1.14.15" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.15" } -solana-sdk = { path = "../sdk", version = "=1.14.15" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.15" } -solana-version = { path = "../version", version = "=1.14.15" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.16" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.16" } +solana-cli-config = { path = "../cli-config", version = "=1.14.16" } +solana-client = { path = "../client", version = "=1.14.16" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.16" } +solana-sdk = { path = "../sdk", version = "=1.14.16" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.16" } +solana-version = { path = "../version", version = "=1.14.16" } spl-associated-token-account = { version = "=1.1.2" } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } tempfile = "3.3.0" @@ -34,6 +34,6 @@ thiserror = "1.0" [dev-dependencies] bincode = "1.3.3" -solana-logger = { path = "../logger", version = "=1.14.15" } -solana-streamer = { path = "../streamer", version = "=1.14.15" } -solana-test-validator = { path = "../test-validator", version = "=1.14.15" } +solana-logger = { path = "../logger", version = "=1.14.16" } +solana-streamer = { path = "../streamer", version = "=1.14.16" } +solana-test-validator = { path = "../test-validator", version = "=1.14.16" } diff --git a/transaction-dos/Cargo.toml b/transaction-dos/Cargo.toml index d1101dedc69222..0790df51e84b87 100644 --- a/transaction-dos/Cargo.toml +++ b/transaction-dos/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-transaction-dos" -version = "1.14.15" +version = "1.14.16" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,23 +14,23 @@ clap = "2.33.1" log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.15" } -solana-cli = { path = "../cli", version = "=1.14.15" } -solana-client = { path = "../client", version = "=1.14.15" } -solana-core = { path = "../core", version = "=1.14.15" } -solana-faucet = { path = "../faucet", version = "=1.14.15" } -solana-gossip = { path = "../gossip", version = "=1.14.15" } -solana-logger = { path = "../logger", version = "=1.14.15" } -solana-measure = { path = "../measure", version = "=1.14.15" } -solana-net-utils = { path = "../net-utils", version = "=1.14.15" } -solana-runtime = { path = "../runtime", version = "=1.14.15" } -solana-sdk = { path = "../sdk", version = "=1.14.15" } -solana-streamer = { path = "../streamer", version = "=1.14.15" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.15" } -solana-version = { path = "../version", version = "=1.14.15" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.16" } +solana-cli = { path = "../cli", version = "=1.14.16" } +solana-client = { path = "../client", version = "=1.14.16" } +solana-core = { path = "../core", version = "=1.14.16" } +solana-faucet = { path = "../faucet", version = "=1.14.16" } +solana-gossip = { path = "../gossip", version = "=1.14.16" } +solana-logger = { path = "../logger", version = "=1.14.16" } +solana-measure = { path = "../measure", version = "=1.14.16" } +solana-net-utils = { path = "../net-utils", version = "=1.14.16" } +solana-runtime = { path = "../runtime", version = "=1.14.16" } +solana-sdk = { path = "../sdk", version = "=1.14.16" } +solana-streamer = { path = "../streamer", version = "=1.14.16" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.16" } +solana-version = { path = "../version", version = "=1.14.16" } [dev-dependencies] -solana-local-cluster = { path = "../local-cluster", version = "=1.14.15" } +solana-local-cluster = { path = "../local-cluster", version = "=1.14.16" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/transaction-status/Cargo.toml b/transaction-status/Cargo.toml index 6d00d0593e252a..1fa42a54a90ad0 100644 --- a/transaction-status/Cargo.toml +++ b/transaction-status/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-transaction-status" -version = "1.14.15" +version = "1.14.16" description = "Solana transaction status types" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -20,12 +20,12 @@ log = "0.4.17" serde = "1.0.138" serde_derive = "1.0.103" serde_json = "1.0.81" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.15" } -solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.15" } -solana-measure = { path = "../measure", version = "=1.14.15" } -solana-metrics = { path = "../metrics", version = "=1.14.15" } -solana-sdk = { path = "../sdk", version = "=1.14.15" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.15" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.16" } +solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.16" } +solana-measure = { path = "../measure", version = "=1.14.16" } +solana-metrics = { path = "../metrics", version = "=1.14.16" } +solana-sdk = { path = "../sdk", version = "=1.14.16" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.16" } spl-associated-token-account = { version = "=1.1.2", features = ["no-entrypoint"] } spl-memo = { version = "=3.0.1", features = ["no-entrypoint"] } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } diff --git a/upload-perf/Cargo.toml b/upload-perf/Cargo.toml index 3798d81088f3ce..977bec33f2e8f2 100644 --- a/upload-perf/Cargo.toml +++ b/upload-perf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-upload-perf" -version = "1.14.15" +version = "1.14.16" description = "Metrics Upload Utility" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -11,7 +11,7 @@ publish = false [dependencies] serde_json = "1.0.81" -solana-metrics = { path = "../metrics", version = "=1.14.15" } +solana-metrics = { path = "../metrics", version = "=1.14.16" } [[bin]] name = "solana-upload-perf" diff --git a/validator/Cargo.toml b/validator/Cargo.toml index 84ca5f07450b53..fd0ca56123df74 100644 --- a/validator/Cargo.toml +++ b/validator/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-validator" description = "Blockchain, Rebuilt for Scale" -version = "1.14.15" +version = "1.14.16" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -28,30 +28,30 @@ num_cpus = "1.13.1" rand = "0.7.0" serde = "1.0.138" serde_json = "1.0.81" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.15" } -solana-cli-config = { path = "../cli-config", version = "=1.14.15" } -solana-client = { path = "../client", version = "=1.14.15" } -solana-core = { path = "../core", version = "=1.14.15" } -solana-download-utils = { path = "../download-utils", version = "=1.14.15" } -solana-entry = { path = "../entry", version = "=1.14.15" } -solana-faucet = { path = "../faucet", version = "=1.14.15" } -solana-genesis-utils = { path = "../genesis-utils", version = "=1.14.15" } -solana-gossip = { path = "../gossip", version = "=1.14.15" } -solana-ledger = { path = "../ledger", version = "=1.14.15" } -solana-logger = { path = "../logger", version = "=1.14.15" } -solana-metrics = { path = "../metrics", version = "=1.14.15" } -solana-net-utils = { path = "../net-utils", version = "=1.14.15" } -solana-perf = { path = "../perf", version = "=1.14.15" } -solana-poh = { path = "../poh", version = "=1.14.15" } -solana-rpc = { path = "../rpc", version = "=1.14.15" } -solana-runtime = { path = "../runtime", version = "=1.14.15" } -solana-sdk = { path = "../sdk", version = "=1.14.15" } -solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.15" } -solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.15" } -solana-streamer = { path = "../streamer", version = "=1.14.15" } -solana-test-validator = { path = "../test-validator", version = "=1.14.15" } -solana-version = { path = "../version", version = "=1.14.15" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.15" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.16" } +solana-cli-config = { path = "../cli-config", version = "=1.14.16" } +solana-client = { path = "../client", version = "=1.14.16" } +solana-core = { path = "../core", version = "=1.14.16" } +solana-download-utils = { path = "../download-utils", version = "=1.14.16" } +solana-entry = { path = "../entry", version = "=1.14.16" } +solana-faucet = { path = "../faucet", version = "=1.14.16" } +solana-genesis-utils = { path = "../genesis-utils", version = "=1.14.16" } +solana-gossip = { path = "../gossip", version = "=1.14.16" } +solana-ledger = { path = "../ledger", version = "=1.14.16" } +solana-logger = { path = "../logger", version = "=1.14.16" } +solana-metrics = { path = "../metrics", version = "=1.14.16" } +solana-net-utils = { path = "../net-utils", version = "=1.14.16" } +solana-perf = { path = "../perf", version = "=1.14.16" } +solana-poh = { path = "../poh", version = "=1.14.16" } +solana-rpc = { path = "../rpc", version = "=1.14.16" } +solana-runtime = { path = "../runtime", version = "=1.14.16" } +solana-sdk = { path = "../sdk", version = "=1.14.16" } +solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.16" } +solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.16" } +solana-streamer = { path = "../streamer", version = "=1.14.16" } +solana-test-validator = { path = "../test-validator", version = "=1.14.16" } +solana-version = { path = "../version", version = "=1.14.16" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.16" } symlink = "0.1.0" [target.'cfg(not(target_env = "msvc"))'.dependencies] diff --git a/version/Cargo.toml b/version/Cargo.toml index f2ea1412b71c78..bfee433498e77d 100644 --- a/version/Cargo.toml +++ b/version/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-version" -version = "1.14.15" +version = "1.14.16" description = "Solana Version" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,9 +14,9 @@ log = "0.4.17" semver = "1.0.10" serde = "1.0.138" serde_derive = "1.0.103" -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.15" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.15" } -solana-sdk = { path = "../sdk", version = "=1.14.15" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.16" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.16" } +solana-sdk = { path = "../sdk", version = "=1.14.16" } [lib] name = "solana_version" diff --git a/watchtower/Cargo.toml b/watchtower/Cargo.toml index 607fdc5c2a11c9..f15bf2f3887c38 100644 --- a/watchtower/Cargo.toml +++ b/watchtower/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-watchtower" description = "Blockchain, Rebuilt for Scale" -version = "1.14.15" +version = "1.14.16" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -13,15 +13,15 @@ documentation = "https://docs.rs/solana-watchtower" clap = "2.33.1" humantime = "2.0.1" log = "0.4.17" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.15" } -solana-cli-config = { path = "../cli-config", version = "=1.14.15" } -solana-cli-output = { path = "../cli-output", version = "=1.14.15" } -solana-client = { path = "../client", version = "=1.14.15" } -solana-logger = { path = "../logger", version = "=1.14.15" } -solana-metrics = { path = "../metrics", version = "=1.14.15" } -solana-notifier = { path = "../notifier", version = "=1.14.15" } -solana-sdk = { path = "../sdk", version = "=1.14.15" } -solana-version = { path = "../version", version = "=1.14.15" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.16" } +solana-cli-config = { path = "../cli-config", version = "=1.14.16" } +solana-cli-output = { path = "../cli-output", version = "=1.14.16" } +solana-client = { path = "../client", version = "=1.14.16" } +solana-logger = { path = "../logger", version = "=1.14.16" } +solana-metrics = { path = "../metrics", version = "=1.14.16" } +solana-notifier = { path = "../notifier", version = "=1.14.16" } +solana-sdk = { path = "../sdk", version = "=1.14.16" } +solana-version = { path = "../version", version = "=1.14.16" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/zk-token-sdk/Cargo.toml b/zk-token-sdk/Cargo.toml index 9d8d396f580df0..f9beb6b1bd90f9 100644 --- a/zk-token-sdk/Cargo.toml +++ b/zk-token-sdk/Cargo.toml @@ -3,7 +3,7 @@ name = "solana-zk-token-sdk" description = "Solana Zk Token SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" -version = "1.14.15" +version = "1.14.16" license = "Apache-2.0" edition = "2021" @@ -12,7 +12,7 @@ base64 = "0.13" bytemuck = { version = "1.11.0", features = ["derive"] } num-derive = "0.3" num-traits = "0.2" -solana-program = { path = "../sdk/program", version = "=1.14.15" } +solana-program = { path = "../sdk/program", version = "=1.14.16" } [target.'cfg(not(target_os = "solana"))'.dependencies] aes-gcm-siv = "0.10.3" @@ -29,7 +29,7 @@ rand = "0.7" serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" sha3 = "0.9" -solana-sdk = { path = "../sdk", version = "=1.14.15" } +solana-sdk = { path = "../sdk", version = "=1.14.16" } subtle = "2" thiserror = "1.0" zeroize = { version = "1.3", default-features = false, features = ["zeroize_derive"] } From 56a3b3d35cf15b3a15e45d6547a806c3b51ff4c0 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Mon, 13 Feb 2023 20:13:59 -0700 Subject: [PATCH 329/465] v1.14: remove recommendations to skip validator startup tests on failure (backport of #30250) (#30287) remove recommendations to skip validator startup tests on failure (#30250) (cherry picked from commit 8770b15bb235ee07efa5883a69335e854015cf6f) # Conflicts: # core/src/validator.rs # validator/src/cli.rs Co-authored-by: Trent Nelson --- core/src/validator.rs | 4 ++-- validator/src/main.rs | 10 ++++++++-- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/core/src/validator.rs b/core/src/validator.rs index 3beb6ff8b8d45f..3ac8fd674864f7 100644 --- a/core/src/validator.rs +++ b/core/src/validator.rs @@ -403,7 +403,7 @@ impl Validator { if !config.no_os_network_stats_reporting { verify_net_stats_access().unwrap_or_else(|err| { - error!("Failed to access Network stats: {}. Bypass check with --no-os-network-stats-reporting.", err); + error!("Failed to access Network stats: {}.", err); abort(); }); } @@ -1263,7 +1263,7 @@ fn check_poh_speed(genesis_config: &GenesisConfig, maybe_hash_samples: Option Date: Mon, 13 Feb 2023 20:18:19 -0700 Subject: [PATCH 330/465] v1.14: ci: suppress dep trees by default in `ci/do-audit.sh` (backport of #30255) (#30285) ci: suppress dep trees by default in `ci/do-audit.sh` (#30255) get them back by passing `--display-dependency-trees` (cherry picked from commit 85af23613e434403116da8c7e5e1283f777c43d8) # Conflicts: # ci/do-audit.sh Co-authored-by: Trent Nelson --- ci/do-audit.sh | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/ci/do-audit.sh b/ci/do-audit.sh index 28d5348cbdd409..6618b4289111aa 100755 --- a/ci/do-audit.sh +++ b/ci/do-audit.sh @@ -7,6 +7,16 @@ src_root="$(readlink -f "${here}/..")" cd "${src_root}" +# `cargo-audit` doesn't give us a way to do this nicely, so hammer it is... +dep_tree_filter="grep -Ev '│|└|├|─'" + +while [[ -n $1 ]]; do + if [[ $1 = "--display-dependency-trees" ]]; then + dep_tree_filter="cat" + shift + fi +done + cargo_audit_ignores=( # `net2` crate has been deprecated; use `socket2` instead # @@ -34,4 +44,4 @@ cargo_audit_ignores=( # Not worth upgrading tokio version on a stable branch --ignore RUSTSEC-2023-0001 ) -scripts/cargo-for-all-lock-files.sh stable audit "${cargo_audit_ignores[@]}" +scripts/cargo-for-all-lock-files.sh stable audit "${cargo_audit_ignores[@]}" | $dep_tree_filter From 5d00ea460df1fc7835654984527eb1e2ebe44de7 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Tue, 14 Feb 2023 11:32:24 -0700 Subject: [PATCH 331/465] v1.14: validator: let `clap` double-dash prefix long args (backport of #30303) (#30304) validator: let `clap` double-dash prefix long args (#30303) (cherry picked from commit 2ba73270270d037ef1d7dba71a8476bce77868a4) # Conflicts: # validator/src/cli.rs Co-authored-by: Trent Nelson --- validator/src/main.rs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/validator/src/main.rs b/validator/src/main.rs index 98dbb60905f610..ece41dc1ad28d7 100644 --- a/validator/src/main.rs +++ b/validator/src/main.rs @@ -626,33 +626,33 @@ pub fn main() { ) .arg( Arg::with_name("minimal_rpc_api") - .long("--minimal-rpc-api") + .long("minimal-rpc-api") .takes_value(false) .hidden(true) .help("Only expose the RPC methods required to serve snapshots to other nodes"), ) .arg( Arg::with_name("full_rpc_api") - .long("--full-rpc-api") + .long("full-rpc-api") .conflicts_with("minimal_rpc_api") .takes_value(false) .help("Expose RPC methods for querying chain state and transaction history"), ) .arg( Arg::with_name("obsolete_v1_7_rpc_api") - .long("--enable-rpc-obsolete_v1_7") + .long("enable-rpc-obsolete_v1_7") .takes_value(false) .help("Enable the obsolete RPC methods removed in v1.7"), ) .arg( Arg::with_name("private_rpc") - .long("--private-rpc") + .long("private-rpc") .takes_value(false) .help("Do not publish the RPC port for use by others") ) .arg( Arg::with_name("no_port_check") - .long("--no-port-check") + .long("no-port-check") .takes_value(false) .hidden(true) .help("Do not perform TCP/UDP reachable port checks at start-up") From 5ebeae2edfdd9e0a49574e1ac85de916a8c2dbe4 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Thu, 16 Feb 2023 09:16:17 -0600 Subject: [PATCH 332/465] v1.14: report less datapoints to block_min_prioritization_fee (backport of #30017) (#30356) report less datapoints to block_min_prioritization_fee (#30017) (cherry picked from commit 7bcb3cef023a740a573930bc033f433b63a4aec3) Co-authored-by: Tao Zhu <82401714+taozhu-chicago@users.noreply.github.com> --- runtime/src/prioritization_fee.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/runtime/src/prioritization_fee.rs b/runtime/src/prioritization_fee.rs index bd847dd4224163..8a75d0f4749c11 100644 --- a/runtime/src/prioritization_fee.rs +++ b/runtime/src/prioritization_fee.rs @@ -190,7 +190,7 @@ impl PrioritizationFee { ("min_prioritization_fee", min_transaction_fee as i64, i64), ); for (account_key, fee) in accounts_fees.iter().take(10) { - datapoint_info!( + datapoint_trace!( "block_min_prioritization_fee", ("slot", slot as i64, i64), ("entity", account_key.to_string(), String), From 0fb2ffda2ec4abd71816f1c7f47223d547132c6d Mon Sep 17 00:00:00 2001 From: Trent Nelson Date: Thu, 16 Feb 2023 12:13:30 -0700 Subject: [PATCH 333/465] validator: disable accounts disk index by default - v1.14 (#30357) validator: disable accounts disk index by default --- ledger-tool/src/main.rs | 19 ++++++++++++++----- validator/src/main.rs | 18 ++++++++++++++---- 2 files changed, 28 insertions(+), 9 deletions(-) diff --git a/ledger-tool/src/main.rs b/ledger-tool/src/main.rs index b3345f04a34f1e..293fb6b0db56f6 100644 --- a/ledger-tool/src/main.rs +++ b/ledger-tool/src/main.rs @@ -1121,11 +1121,16 @@ fn main() { .value_name("MEGABYTES") .validator(is_parsable::) .takes_value(true) + .requires("enable_accounts_disk_index") .help("How much memory the accounts index can consume. If this is exceeded, some account index entries will be stored on disk."); let disable_disk_index = Arg::with_name("disable_accounts_disk_index") .long("disable-accounts-disk-index") .help("Disable the disk-based accounts index. It is enabled by default. The entire accounts index will be kept in memory.") - .conflicts_with("accounts_index_memory_limit_mb"); + .conflicts_with("enable_accounts_disk_index"); + let enable_disk_index = Arg::with_name("enable_accounts_disk_index") + .long("enable-accounts-disk-index") + .conflicts_with("disable_accounts_disk_index") + .help("Enable the disk-based accounts index if it is disabled by default."); let accountsdb_skip_shrink = Arg::with_name("accounts_db_skip_shrink") .long("accounts-db-skip-shrink") .help( @@ -1539,6 +1544,7 @@ fn main() { .arg(&accounts_index_bins) .arg(&accounts_index_limit) .arg(&disable_disk_index) + .arg(&enable_disk_index) .arg(&accountsdb_skip_shrink) .arg(&accounts_filler_count) .arg(&accounts_filler_size) @@ -2430,13 +2436,16 @@ fn main() { ); accounts_index_config.index_limit_mb = if let Some(limit) = - value_t!(arg_matches, "accounts_index_memory_limit_mb", usize).ok() + value_t!(matches, "accounts_index_memory_limit_mb", usize).ok() { IndexLimitMb::Limit(limit) - } else if arg_matches.is_present("disable_accounts_disk_index") { - IndexLimitMb::InMemOnly - } else { + } else if matches.is_present("enable_accounts_disk_index") { IndexLimitMb::Unspecified + } else { + if matches.is_present("disable_accounts_disk_index") { + warn!("ignoring `--disable-accounts-disk-index` as it specifies default behavior"); + } + IndexLimitMb::InMemOnly }; { diff --git a/validator/src/main.rs b/validator/src/main.rs index ece41dc1ad28d7..9f84ff005b2c40 100644 --- a/validator/src/main.rs +++ b/validator/src/main.rs @@ -1706,13 +1706,20 @@ pub fn main() { .value_name("MEGABYTES") .validator(is_parsable::) .takes_value(true) + .requires("enable_accounts_disk_index") .help("How much memory the accounts index can consume. If this is exceeded, some account index entries will be stored on disk."), ) .arg( Arg::with_name("disable_accounts_disk_index") .long("disable-accounts-disk-index") .help("Disable the disk-based accounts index if it is enabled by default.") - .conflicts_with("accounts_index_memory_limit_mb") + .conflicts_with("enable_accounts_disk_index") + ) + .arg( + Arg::with_name("enable_accounts_disk_index") + .long("enable-accounts-disk-index") + .conflicts_with("disable_accounts_disk_index") + .help("Enable the disk-based accounts index if it is disabled by default.") ) .arg( Arg::with_name("accounts_index_bins") @@ -2448,10 +2455,13 @@ pub fn main() { accounts_index_config.index_limit_mb = if let Some(limit) = value_t!(matches, "accounts_index_memory_limit_mb", usize).ok() { IndexLimitMb::Limit(limit) - } else if matches.is_present("disable_accounts_disk_index") { - IndexLimitMb::InMemOnly - } else { + } else if matches.is_present("enable_accounts_disk_index") { IndexLimitMb::Unspecified + } else { + if matches.is_present("disable_accounts_disk_index") { + warn!("ignoring `--disable-accounts-disk-index` as it specifies default behavior"); + } + IndexLimitMb::InMemOnly }; { From 6149bed58519a29920fc94f38d67d295a670fb8e Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 17 Feb 2023 11:13:52 -0700 Subject: [PATCH 334/465] Bump Version to 1.14.17 (#30383) Co-authored-by: willhickey --- Cargo.lock | 484 ++++++++--------- account-decoder/Cargo.toml | 10 +- accounts-bench/Cargo.toml | 12 +- accounts-cluster-bench/Cargo.toml | 34 +- banking-bench/Cargo.toml | 26 +- banks-client/Cargo.toml | 12 +- banks-interface/Cargo.toml | 4 +- banks-server/Cargo.toml | 12 +- bench-streamer/Cargo.toml | 8 +- bench-tps/Cargo.toml | 38 +- bloom/Cargo.toml | 8 +- bucket_map/Cargo.toml | 8 +- clap-utils/Cargo.toml | 8 +- clap-v3-utils/Cargo.toml | 8 +- cli-config/Cargo.toml | 6 +- cli-output/Cargo.toml | 16 +- cli/Cargo.toml | 38 +- client-test/Cargo.toml | 32 +- client/Cargo.toml | 28 +- core/Cargo.toml | 56 +- dos/Cargo.toml | 30 +- download-utils/Cargo.toml | 6 +- entry/Cargo.toml | 16 +- faucet/Cargo.toml | 14 +- frozen-abi/Cargo.toml | 6 +- frozen-abi/macro/Cargo.toml | 2 +- genesis-utils/Cargo.toml | 8 +- genesis/Cargo.toml | 22 +- geyser-plugin-interface/Cargo.toml | 6 +- geyser-plugin-manager/Cargo.toml | 16 +- gossip/Cargo.toml | 38 +- install/Cargo.toml | 14 +- keygen/Cargo.toml | 12 +- ledger-tool/Cargo.toml | 30 +- ledger/Cargo.toml | 40 +- local-cluster/Cargo.toml | 28 +- log-analyzer/Cargo.toml | 6 +- logger/Cargo.toml | 2 +- measure/Cargo.toml | 4 +- merkle-root-bench/Cargo.toml | 12 +- merkle-tree/Cargo.toml | 4 +- metrics/Cargo.toml | 4 +- net-shaper/Cargo.toml | 4 +- net-utils/Cargo.toml | 8 +- notifier/Cargo.toml | 2 +- perf/Cargo.toml | 12 +- poh-bench/Cargo.toml | 14 +- poh/Cargo.toml | 20 +- program-runtime/Cargo.toml | 14 +- program-test/Cargo.toml | 20 +- .../address-lookup-table-tests/Cargo.toml | 8 +- programs/address-lookup-table/Cargo.toml | 12 +- programs/bpf-loader-tests/Cargo.toml | 8 +- programs/bpf/Cargo.lock | 490 +++++++++--------- programs/bpf/Cargo.toml | 28 +- programs/bpf/rust/128bit/Cargo.toml | 6 +- programs/bpf/rust/128bit_dep/Cargo.toml | 4 +- programs/bpf/rust/alloc/Cargo.toml | 4 +- programs/bpf/rust/call_depth/Cargo.toml | 4 +- programs/bpf/rust/caller_access/Cargo.toml | 4 +- programs/bpf/rust/curve25519/Cargo.toml | 6 +- programs/bpf/rust/custom_heap/Cargo.toml | 4 +- programs/bpf/rust/dep_crate/Cargo.toml | 6 +- .../bpf/rust/deprecated_loader/Cargo.toml | 4 +- programs/bpf/rust/dup_accounts/Cargo.toml | 4 +- programs/bpf/rust/error_handling/Cargo.toml | 4 +- programs/bpf/rust/external_spend/Cargo.toml | 4 +- programs/bpf/rust/finalize/Cargo.toml | 4 +- .../rust/get_minimum_delegation/Cargo.toml | 4 +- .../Cargo.toml | 4 +- .../rust/instruction_introspection/Cargo.toml | 4 +- programs/bpf/rust/invoke/Cargo.toml | 4 +- programs/bpf/rust/invoke_and_error/Cargo.toml | 4 +- programs/bpf/rust/invoke_and_ok/Cargo.toml | 4 +- .../bpf/rust/invoke_and_return/Cargo.toml | 4 +- programs/bpf/rust/invoked/Cargo.toml | 4 +- programs/bpf/rust/iter/Cargo.toml | 4 +- programs/bpf/rust/log_data/Cargo.toml | 4 +- programs/bpf/rust/many_args/Cargo.toml | 6 +- programs/bpf/rust/many_args_dep/Cargo.toml | 4 +- programs/bpf/rust/mem/Cargo.toml | 10 +- programs/bpf/rust/membuiltins/Cargo.toml | 6 +- programs/bpf/rust/noop/Cargo.toml | 4 +- programs/bpf/rust/panic/Cargo.toml | 4 +- programs/bpf/rust/param_passing/Cargo.toml | 6 +- .../bpf/rust/param_passing_dep/Cargo.toml | 4 +- programs/bpf/rust/rand/Cargo.toml | 4 +- programs/bpf/rust/realloc/Cargo.toml | 4 +- programs/bpf/rust/realloc_invoke/Cargo.toml | 6 +- .../bpf/rust/ro_account_modify/Cargo.toml | 4 +- programs/bpf/rust/ro_modify/Cargo.toml | 4 +- programs/bpf/rust/sanity/Cargo.toml | 10 +- .../bpf/rust/secp256k1_recover/Cargo.toml | 4 +- programs/bpf/rust/sha/Cargo.toml | 4 +- .../rust/sibling_inner_instruction/Cargo.toml | 4 +- .../bpf/rust/sibling_instruction/Cargo.toml | 4 +- programs/bpf/rust/simulation/Cargo.toml | 12 +- programs/bpf/rust/spoof1/Cargo.toml | 4 +- programs/bpf/rust/spoof1_system/Cargo.toml | 4 +- programs/bpf/rust/sysvar/Cargo.toml | 10 +- programs/bpf/rust/upgradeable/Cargo.toml | 4 +- programs/bpf/rust/upgraded/Cargo.toml | 4 +- programs/bpf_loader/Cargo.toml | 14 +- .../bpf_loader/gen-syscall-list/Cargo.toml | 2 +- programs/compute-budget/Cargo.toml | 6 +- programs/config/Cargo.toml | 8 +- programs/ed25519-tests/Cargo.toml | 6 +- programs/stake/Cargo.toml | 18 +- programs/vote/Cargo.toml | 14 +- programs/zk-token-proof/Cargo.toml | 8 +- rayon-threadlimit/Cargo.toml | 2 +- rbpf-cli/Cargo.toml | 10 +- remote-wallet/Cargo.toml | 4 +- rpc-test/Cargo.toml | 18 +- rpc/Cargo.toml | 48 +- runtime/Cargo.toml | 34 +- runtime/store-tool/Cargo.toml | 8 +- sdk/Cargo.toml | 12 +- sdk/cargo-build-bpf/Cargo.toml | 4 +- sdk/cargo-build-sbf/Cargo.toml | 8 +- .../tests/crates/fail/Cargo.toml | 4 +- .../tests/crates/noop/Cargo.toml | 4 +- sdk/cargo-test-bpf/Cargo.toml | 2 +- sdk/cargo-test-sbf/Cargo.toml | 2 +- sdk/gen-headers/Cargo.toml | 2 +- sdk/macro/Cargo.toml | 2 +- sdk/program/Cargo.toml | 10 +- send-transaction-service/Cargo.toml | 14 +- stake-accounts/Cargo.toml | 16 +- storage-bigtable/Cargo.toml | 10 +- storage-bigtable/build-proto/Cargo.lock | 2 +- storage-bigtable/build-proto/Cargo.toml | 2 +- storage-proto/Cargo.toml | 8 +- streamer/Cargo.toml | 10 +- sys-tuner/Cargo.toml | 6 +- test-validator/Cargo.toml | 28 +- tokens/Cargo.toml | 24 +- transaction-dos/Cargo.toml | 32 +- transaction-status/Cargo.toml | 14 +- upload-perf/Cargo.toml | 4 +- validator/Cargo.toml | 50 +- version/Cargo.toml | 8 +- watchtower/Cargo.toml | 20 +- zk-token-sdk/Cargo.toml | 6 +- 144 files changed, 1270 insertions(+), 1270 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 4c51b59e52a964..350cb5b6bb86f7 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1688,7 +1688,7 @@ dependencies = [ [[package]] name = "gen-headers" -version = "1.14.16" +version = "1.14.17" dependencies = [ "log", "regex", @@ -1696,7 +1696,7 @@ dependencies = [ [[package]] name = "gen-syscall-list" -version = "1.14.16" +version = "1.14.17" dependencies = [ "regex", ] @@ -3738,15 +3738,15 @@ dependencies = [ [[package]] name = "rbpf-cli" -version = "1.14.16" +version = "1.14.17" dependencies = [ "clap 3.1.8", "serde", "serde_json", "solana-bpf-loader-program", - "solana-logger 1.14.16", + "solana-logger 1.14.17", "solana-program-runtime", - "solana-sdk 1.14.16", + "solana-sdk 1.14.17", "solana_rbpf", ] @@ -4448,7 +4448,7 @@ dependencies = [ [[package]] name = "solana-account-decoder" -version = "1.14.16" +version = "1.14.17" dependencies = [ "Inflector", "base64 0.13.0", @@ -4461,7 +4461,7 @@ dependencies = [ "serde_json", "solana-address-lookup-table-program", "solana-config-program", - "solana-sdk 1.14.16", + "solana-sdk 1.14.17", "solana-vote-program", "spl-token", "spl-token-2022", @@ -4471,21 +4471,21 @@ dependencies = [ [[package]] name = "solana-accounts-bench" -version = "1.14.16" +version = "1.14.17" dependencies = [ "clap 2.33.3", "log", "rayon", - "solana-logger 1.14.16", + "solana-logger 1.14.17", "solana-measure", "solana-runtime", - "solana-sdk 1.14.16", + "solana-sdk 1.14.17", "solana-version", ] [[package]] name = "solana-accounts-cluster-bench" -version = "1.14.16" +version = "1.14.17" dependencies = [ "clap 2.33.3", "log", @@ -4498,11 +4498,11 @@ dependencies = [ "solana-faucet", "solana-gossip", "solana-local-cluster", - "solana-logger 1.14.16", + "solana-logger 1.14.17", "solana-measure", "solana-net-utils", "solana-runtime", - "solana-sdk 1.14.16", + "solana-sdk 1.14.17", "solana-streamer", "solana-test-validator", "solana-transaction-status", @@ -4512,7 +4512,7 @@ dependencies = [ [[package]] name = "solana-address-lookup-table-program" -version = "1.14.16" +version = "1.14.17" dependencies = [ "bincode", "bytemuck", @@ -4521,28 +4521,28 @@ dependencies = [ "num-traits", "rustc_version 0.4.0", "serde", - "solana-frozen-abi 1.14.16", - "solana-frozen-abi-macro 1.14.16", - "solana-program 1.14.16", + "solana-frozen-abi 1.14.17", + "solana-frozen-abi-macro 1.14.17", + "solana-program 1.14.17", "solana-program-runtime", - "solana-sdk 1.14.16", + "solana-sdk 1.14.17", "thiserror", ] [[package]] name = "solana-address-lookup-table-program-tests" -version = "1.14.16" +version = "1.14.17" dependencies = [ "assert_matches", "bincode", "solana-address-lookup-table-program", "solana-program-test", - "solana-sdk 1.14.16", + "solana-sdk 1.14.17", ] [[package]] name = "solana-banking-bench" -version = "1.14.16" +version = "1.14.17" dependencies = [ "clap 3.1.8", "crossbeam-channel", @@ -4553,27 +4553,27 @@ dependencies = [ "solana-core", "solana-gossip", "solana-ledger", - "solana-logger 1.14.16", + "solana-logger 1.14.17", "solana-measure", "solana-perf", "solana-poh", "solana-runtime", - "solana-sdk 1.14.16", + "solana-sdk 1.14.17", "solana-streamer", "solana-version", ] [[package]] name = "solana-banks-client" -version = "1.14.16" +version = "1.14.17" dependencies = [ "borsh", "futures 0.3.21", "solana-banks-interface", "solana-banks-server", - "solana-program 1.14.16", + "solana-program 1.14.17", "solana-runtime", - "solana-sdk 1.14.16", + "solana-sdk 1.14.17", "tarpc", "thiserror", "tokio", @@ -4582,16 +4582,16 @@ dependencies = [ [[package]] name = "solana-banks-interface" -version = "1.14.16" +version = "1.14.17" dependencies = [ "serde", - "solana-sdk 1.14.16", + "solana-sdk 1.14.17", "tarpc", ] [[package]] name = "solana-banks-server" -version = "1.14.16" +version = "1.14.17" dependencies = [ "bincode", "crossbeam-channel", @@ -4599,7 +4599,7 @@ dependencies = [ "solana-banks-interface", "solana-client", "solana-runtime", - "solana-sdk 1.14.16", + "solana-sdk 1.14.17", "solana-send-transaction-service", "tarpc", "tokio", @@ -4609,7 +4609,7 @@ dependencies = [ [[package]] name = "solana-bench-streamer" -version = "1.14.16" +version = "1.14.17" dependencies = [ "clap 3.1.8", "crossbeam-channel", @@ -4620,7 +4620,7 @@ dependencies = [ [[package]] name = "solana-bench-tps" -version = "1.14.16" +version = "1.14.17" dependencies = [ "clap 2.33.3", "crossbeam-channel", @@ -4637,13 +4637,13 @@ dependencies = [ "solana-genesis", "solana-gossip", "solana-local-cluster", - "solana-logger 1.14.16", + "solana-logger 1.14.17", "solana-measure", "solana-metrics", "solana-net-utils", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.16", + "solana-sdk 1.14.17", "solana-streamer", "solana-test-validator", "solana-version", @@ -4652,7 +4652,7 @@ dependencies = [ [[package]] name = "solana-bloom" -version = "1.14.16" +version = "1.14.17" dependencies = [ "bv", "fnv", @@ -4662,14 +4662,14 @@ dependencies = [ "rustc_version 0.4.0", "serde", "serde_derive", - "solana-frozen-abi 1.14.16", - "solana-frozen-abi-macro 1.14.16", - "solana-sdk 1.14.16", + "solana-frozen-abi 1.14.17", + "solana-frozen-abi-macro 1.14.17", + "solana-sdk 1.14.17", ] [[package]] name = "solana-bpf-loader-program" -version = "1.14.16" +version = "1.14.17" dependencies = [ "bincode", "byteorder", @@ -4680,26 +4680,26 @@ dependencies = [ "solana-metrics", "solana-program-runtime", "solana-runtime", - "solana-sdk 1.14.16", - "solana-zk-token-sdk 1.14.16", + "solana-sdk 1.14.17", + "solana-zk-token-sdk 1.14.17", "solana_rbpf", "thiserror", ] [[package]] name = "solana-bpf-loader-program-tests" -version = "1.14.16" +version = "1.14.17" dependencies = [ "assert_matches", "bincode", "solana-bpf-loader-program", "solana-program-test", - "solana-sdk 1.14.16", + "solana-sdk 1.14.17", ] [[package]] name = "solana-bucket-map" -version = "1.14.16" +version = "1.14.17" dependencies = [ "fs_extra", "log", @@ -4707,24 +4707,24 @@ dependencies = [ "modular-bitfield", "rand 0.7.3", "rayon", - "solana-logger 1.14.16", + "solana-logger 1.14.17", "solana-measure", - "solana-sdk 1.14.16", + "solana-sdk 1.14.17", "tempfile", ] [[package]] name = "solana-cargo-build-bpf" -version = "1.14.16" +version = "1.14.17" dependencies = [ "cargo_metadata", "clap 3.1.8", - "solana-sdk 1.14.16", + "solana-sdk 1.14.17", ] [[package]] name = "solana-cargo-build-sbf" -version = "1.14.16" +version = "1.14.17" dependencies = [ "bzip2", "cargo_metadata", @@ -4733,14 +4733,14 @@ dependencies = [ "regex", "serial_test", "solana-download-utils", - "solana-logger 1.14.16", - "solana-sdk 1.14.16", + "solana-logger 1.14.17", + "solana-sdk 1.14.17", "tar", ] [[package]] name = "solana-cargo-test-bpf" -version = "1.14.16" +version = "1.14.17" dependencies = [ "cargo_metadata", "clap 3.1.8", @@ -4748,7 +4748,7 @@ dependencies = [ [[package]] name = "solana-cargo-test-sbf" -version = "1.14.16" +version = "1.14.17" dependencies = [ "cargo_metadata", "clap 3.1.8", @@ -4756,14 +4756,14 @@ dependencies = [ [[package]] name = "solana-clap-utils" -version = "1.14.16" +version = "1.14.17" dependencies = [ "chrono", "clap 2.33.3", "rpassword", "solana-perf", "solana-remote-wallet", - "solana-sdk 1.14.16", + "solana-sdk 1.14.17", "tempfile", "thiserror", "tiny-bip39", @@ -4773,14 +4773,14 @@ dependencies = [ [[package]] name = "solana-clap-v3-utils" -version = "1.14.16" +version = "1.14.17" dependencies = [ "chrono", "clap 3.1.8", "rpassword", "solana-perf", "solana-remote-wallet", - "solana-sdk 1.14.16", + "solana-sdk 1.14.17", "tempfile", "thiserror", "tiny-bip39", @@ -4790,7 +4790,7 @@ dependencies = [ [[package]] name = "solana-cli" -version = "1.14.16" +version = "1.14.17" dependencies = [ "bincode", "bs58", @@ -4818,10 +4818,10 @@ dependencies = [ "solana-client", "solana-config-program", "solana-faucet", - "solana-logger 1.14.16", + "solana-logger 1.14.17", "solana-program-runtime", "solana-remote-wallet", - "solana-sdk 1.14.16", + "solana-sdk 1.14.17", "solana-streamer", "solana-test-validator", "solana-transaction-status", @@ -4836,7 +4836,7 @@ dependencies = [ [[package]] name = "solana-cli-config" -version = "1.14.16" +version = "1.14.17" dependencies = [ "anyhow", "dirs-next", @@ -4845,13 +4845,13 @@ dependencies = [ "serde_derive", "serde_yaml", "solana-clap-utils", - "solana-sdk 1.14.16", + "solana-sdk 1.14.17", "url 2.2.2", ] [[package]] name = "solana-cli-output" -version = "1.14.16" +version = "1.14.17" dependencies = [ "Inflector", "base64 0.13.0", @@ -4869,7 +4869,7 @@ dependencies = [ "solana-clap-utils", "solana-cli-config", "solana-client", - "solana-sdk 1.14.16", + "solana-sdk 1.14.17", "solana-transaction-status", "solana-vote-program", "spl-memo", @@ -4877,7 +4877,7 @@ dependencies = [ [[package]] name = "solana-client" -version = "1.14.16" +version = "1.14.17" dependencies = [ "anyhow", "assert_matches", @@ -4913,12 +4913,12 @@ dependencies = [ "solana-account-decoder", "solana-clap-utils", "solana-faucet", - "solana-logger 1.14.16", + "solana-logger 1.14.17", "solana-measure", "solana-metrics", "solana-net-utils", "solana-perf", - "solana-sdk 1.14.16", + "solana-sdk 1.14.17", "solana-streamer", "solana-transaction-status", "solana-version", @@ -4934,14 +4934,14 @@ dependencies = [ [[package]] name = "solana-client-test" -version = "1.14.16" +version = "1.14.17" dependencies = [ "futures-util", "serde_json", "serial_test", "solana-client", "solana-ledger", - "solana-logger 1.14.16", + "solana-logger 1.14.17", "solana-measure", "solana-merkle-tree", "solana-metrics", @@ -4949,7 +4949,7 @@ dependencies = [ "solana-rayon-threadlimit", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.16", + "solana-sdk 1.14.17", "solana-streamer", "solana-test-validator", "solana-transaction-status", @@ -4960,28 +4960,28 @@ dependencies = [ [[package]] name = "solana-compute-budget-program" -version = "1.14.16" +version = "1.14.17" dependencies = [ "solana-program-runtime", - "solana-sdk 1.14.16", + "solana-sdk 1.14.17", ] [[package]] name = "solana-config-program" -version = "1.14.16" +version = "1.14.17" dependencies = [ "bincode", "chrono", "serde", "serde_derive", - "solana-logger 1.14.16", + "solana-logger 1.14.17", "solana-program-runtime", - "solana-sdk 1.14.16", + "solana-sdk 1.14.17", ] [[package]] name = "solana-core" -version = "1.14.16" +version = "1.14.17" dependencies = [ "ahash", "base64 0.13.0", @@ -5014,12 +5014,12 @@ dependencies = [ "solana-bloom", "solana-client", "solana-entry", - "solana-frozen-abi 1.14.16", - "solana-frozen-abi-macro 1.14.16", + "solana-frozen-abi 1.14.17", + "solana-frozen-abi-macro 1.14.17", "solana-geyser-plugin-manager", "solana-gossip", "solana-ledger", - "solana-logger 1.14.16", + "solana-logger 1.14.17", "solana-measure", "solana-metrics", "solana-net-utils", @@ -5029,7 +5029,7 @@ dependencies = [ "solana-rayon-threadlimit", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.16", + "solana-sdk 1.14.17", "solana-send-transaction-service", "solana-stake-program", "solana-streamer", @@ -5049,7 +5049,7 @@ dependencies = [ [[package]] name = "solana-dos" -version = "1.14.16" +version = "1.14.17" dependencies = [ "bincode", "clap 3.1.8", @@ -5065,42 +5065,42 @@ dependencies = [ "solana-faucet", "solana-gossip", "solana-local-cluster", - "solana-logger 1.14.16", + "solana-logger 1.14.17", "solana-measure", "solana-net-utils", "solana-perf", "solana-rpc", - "solana-sdk 1.14.16", + "solana-sdk 1.14.17", "solana-streamer", "solana-version", ] [[package]] name = "solana-download-utils" -version = "1.14.16" +version = "1.14.17" dependencies = [ "console", "indicatif", "log", "reqwest", "solana-runtime", - "solana-sdk 1.14.16", + "solana-sdk 1.14.17", ] [[package]] name = "solana-ed25519-program-tests" -version = "1.14.16" +version = "1.14.17" dependencies = [ "assert_matches", "ed25519-dalek", "rand 0.7.3", "solana-program-test", - "solana-sdk 1.14.16", + "solana-sdk 1.14.17", ] [[package]] name = "solana-entry" -version = "1.14.16" +version = "1.14.17" dependencies = [ "bincode", "crossbeam-channel", @@ -5112,18 +5112,18 @@ dependencies = [ "rand 0.7.3", "rayon", "serde", - "solana-logger 1.14.16", + "solana-logger 1.14.17", "solana-measure", "solana-merkle-tree", "solana-metrics", "solana-perf", "solana-rayon-threadlimit", - "solana-sdk 1.14.16", + "solana-sdk 1.14.17", ] [[package]] name = "solana-faucet" -version = "1.14.16" +version = "1.14.17" dependencies = [ "bincode", "byteorder", @@ -5134,9 +5134,9 @@ dependencies = [ "serde_derive", "solana-clap-utils", "solana-cli-config", - "solana-logger 1.14.16", + "solana-logger 1.14.17", "solana-metrics", - "solana-sdk 1.14.16", + "solana-sdk 1.14.17", "solana-version", "spl-memo", "thiserror", @@ -5179,7 +5179,7 @@ dependencies = [ [[package]] name = "solana-frozen-abi" -version = "1.14.16" +version = "1.14.17" dependencies = [ "ahash", "blake3", @@ -5204,8 +5204,8 @@ dependencies = [ "serde_derive", "serde_json", "sha2 0.10.2", - "solana-frozen-abi-macro 1.14.16", - "solana-logger 1.14.16", + "solana-frozen-abi-macro 1.14.17", + "solana-logger 1.14.17", "subtle", "thiserror", ] @@ -5224,7 +5224,7 @@ dependencies = [ [[package]] name = "solana-frozen-abi-macro" -version = "1.14.16" +version = "1.14.17" dependencies = [ "proc-macro2 1.0.41", "quote 1.0.18", @@ -5234,7 +5234,7 @@ dependencies = [ [[package]] name = "solana-genesis" -version = "1.14.16" +version = "1.14.17" dependencies = [ "base64 0.13.0", "clap 2.33.3", @@ -5245,9 +5245,9 @@ dependencies = [ "solana-cli-config", "solana-entry", "solana-ledger", - "solana-logger 1.14.16", + "solana-logger 1.14.17", "solana-runtime", - "solana-sdk 1.14.16", + "solana-sdk 1.14.17", "solana-stake-program", "solana-version", "solana-vote-program", @@ -5256,26 +5256,26 @@ dependencies = [ [[package]] name = "solana-genesis-utils" -version = "1.14.16" +version = "1.14.17" dependencies = [ "solana-download-utils", "solana-runtime", - "solana-sdk 1.14.16", + "solana-sdk 1.14.17", ] [[package]] name = "solana-geyser-plugin-interface" -version = "1.14.16" +version = "1.14.17" dependencies = [ "log", - "solana-sdk 1.14.16", + "solana-sdk 1.14.17", "solana-transaction-status", "thiserror", ] [[package]] name = "solana-geyser-plugin-manager" -version = "1.14.16" +version = "1.14.17" dependencies = [ "bs58", "crossbeam-channel", @@ -5288,14 +5288,14 @@ dependencies = [ "solana-metrics", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.16", + "solana-sdk 1.14.17", "solana-transaction-status", "thiserror", ] [[package]] name = "solana-gossip" -version = "1.14.16" +version = "1.14.17" dependencies = [ "bincode", "bv", @@ -5322,17 +5322,17 @@ dependencies = [ "solana-clap-utils", "solana-client", "solana-entry", - "solana-frozen-abi 1.14.16", - "solana-frozen-abi-macro 1.14.16", + "solana-frozen-abi 1.14.17", + "solana-frozen-abi-macro 1.14.17", "solana-ledger", - "solana-logger 1.14.16", + "solana-logger 1.14.17", "solana-measure", "solana-metrics", "solana-net-utils", "solana-perf", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.14.16", + "solana-sdk 1.14.17", "solana-streamer", "solana-version", "solana-vote-program", @@ -5341,7 +5341,7 @@ dependencies = [ [[package]] name = "solana-install" -version = "1.14.16" +version = "1.14.17" dependencies = [ "atty", "bincode", @@ -5362,8 +5362,8 @@ dependencies = [ "solana-clap-utils", "solana-client", "solana-config-program", - "solana-logger 1.14.16", - "solana-sdk 1.14.16", + "solana-logger 1.14.17", + "solana-sdk 1.14.17", "solana-version", "tar", "tempfile", @@ -5374,7 +5374,7 @@ dependencies = [ [[package]] name = "solana-keygen" -version = "1.14.16" +version = "1.14.17" dependencies = [ "bs58", "clap 3.1.8", @@ -5383,14 +5383,14 @@ dependencies = [ "solana-clap-v3-utils", "solana-cli-config", "solana-remote-wallet", - "solana-sdk 1.14.16", + "solana-sdk 1.14.17", "solana-version", "tiny-bip39", ] [[package]] name = "solana-ledger" -version = "1.14.16" +version = "1.14.17" dependencies = [ "assert_matches", "bincode", @@ -5424,16 +5424,16 @@ dependencies = [ "solana-account-decoder", "solana-bpf-loader-program", "solana-entry", - "solana-frozen-abi 1.14.16", - "solana-frozen-abi-macro 1.14.16", - "solana-logger 1.14.16", + "solana-frozen-abi 1.14.17", + "solana-frozen-abi-macro 1.14.17", + "solana-logger 1.14.17", "solana-measure", "solana-metrics", "solana-perf", "solana-program-runtime", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.14.16", + "solana-sdk 1.14.17", "solana-stake-program", "solana-storage-bigtable", "solana-storage-proto", @@ -5452,7 +5452,7 @@ dependencies = [ [[package]] name = "solana-ledger-tool" -version = "1.14.16" +version = "1.14.17" dependencies = [ "assert_cmd", "base64 0.13.0", @@ -5474,10 +5474,10 @@ dependencies = [ "solana-core", "solana-entry", "solana-ledger", - "solana-logger 1.14.16", + "solana-logger 1.14.17", "solana-measure", "solana-runtime", - "solana-sdk 1.14.16", + "solana-sdk 1.14.17", "solana-stake-program", "solana-storage-bigtable", "solana-transaction-status", @@ -5489,7 +5489,7 @@ dependencies = [ [[package]] name = "solana-local-cluster" -version = "1.14.16" +version = "1.14.17" dependencies = [ "assert_matches", "crossbeam-channel", @@ -5507,9 +5507,9 @@ dependencies = [ "solana-entry", "solana-gossip", "solana-ledger", - "solana-logger 1.14.16", + "solana-logger 1.14.17", "solana-runtime", - "solana-sdk 1.14.16", + "solana-sdk 1.14.17", "solana-stake-program", "solana-streamer", "solana-vote-program", @@ -5518,13 +5518,13 @@ dependencies = [ [[package]] name = "solana-log-analyzer" -version = "1.14.16" +version = "1.14.17" dependencies = [ "byte-unit", "clap 3.1.8", "serde", "serde_json", - "solana-logger 1.14.16", + "solana-logger 1.14.17", "solana-version", ] @@ -5541,7 +5541,7 @@ dependencies = [ [[package]] name = "solana-logger" -version = "1.14.16" +version = "1.14.17" dependencies = [ "env_logger", "lazy_static", @@ -5550,38 +5550,38 @@ dependencies = [ [[package]] name = "solana-measure" -version = "1.14.16" +version = "1.14.17" dependencies = [ "log", - "solana-sdk 1.14.16", + "solana-sdk 1.14.17", ] [[package]] name = "solana-merkle-root-bench" -version = "1.14.16" +version = "1.14.17" dependencies = [ "clap 2.33.3", "log", - "solana-logger 1.14.16", + "solana-logger 1.14.17", "solana-measure", "solana-runtime", - "solana-sdk 1.14.16", + "solana-sdk 1.14.17", "solana-version", ] [[package]] name = "solana-merkle-tree" -version = "1.14.16" +version = "1.14.17" dependencies = [ "fast-math", "hex", "matches", - "solana-program 1.14.16", + "solana-program 1.14.17", ] [[package]] name = "solana-metrics" -version = "1.14.16" +version = "1.14.17" dependencies = [ "crossbeam-channel", "env_logger", @@ -5591,23 +5591,23 @@ dependencies = [ "rand 0.7.3", "reqwest", "serial_test", - "solana-sdk 1.14.16", + "solana-sdk 1.14.17", ] [[package]] name = "solana-net-shaper" -version = "1.14.16" +version = "1.14.17" dependencies = [ "clap 3.1.8", "rand 0.7.3", "serde", "serde_json", - "solana-logger 1.14.16", + "solana-logger 1.14.17", ] [[package]] name = "solana-net-utils" -version = "1.14.16" +version = "1.14.17" dependencies = [ "bincode", "clap 3.1.8", @@ -5618,8 +5618,8 @@ dependencies = [ "serde", "serde_derive", "socket2", - "solana-logger 1.14.16", - "solana-sdk 1.14.16", + "solana-logger 1.14.17", + "solana-sdk 1.14.17", "solana-version", "tokio", "url 2.2.2", @@ -5627,7 +5627,7 @@ dependencies = [ [[package]] name = "solana-notifier" -version = "1.14.16" +version = "1.14.17" dependencies = [ "log", "reqwest", @@ -5636,7 +5636,7 @@ dependencies = [ [[package]] name = "solana-perf" -version = "1.14.16" +version = "1.14.17" dependencies = [ "ahash", "bincode", @@ -5654,16 +5654,16 @@ dependencies = [ "rand 0.7.3", "rayon", "serde", - "solana-logger 1.14.16", + "solana-logger 1.14.17", "solana-metrics", "solana-rayon-threadlimit", - "solana-sdk 1.14.16", + "solana-sdk 1.14.17", "solana-vote-program", ] [[package]] name = "solana-poh" -version = "1.14.16" +version = "1.14.17" dependencies = [ "bincode", "core_affinity", @@ -5673,29 +5673,29 @@ dependencies = [ "rand 0.7.3", "solana-entry", "solana-ledger", - "solana-logger 1.14.16", + "solana-logger 1.14.17", "solana-measure", "solana-metrics", "solana-perf", "solana-runtime", - "solana-sdk 1.14.16", + "solana-sdk 1.14.17", "solana-sys-tuner", "thiserror", ] [[package]] name = "solana-poh-bench" -version = "1.14.16" +version = "1.14.17" dependencies = [ "clap 3.1.8", "log", "rand 0.7.3", "rayon", "solana-entry", - "solana-logger 1.14.16", + "solana-logger 1.14.17", "solana-measure", "solana-perf", - "solana-sdk 1.14.16", + "solana-sdk 1.14.17", "solana-version", ] @@ -5750,7 +5750,7 @@ dependencies = [ [[package]] name = "solana-program" -version = "1.14.16" +version = "1.14.17" dependencies = [ "anyhow", "assert_matches", @@ -5788,10 +5788,10 @@ dependencies = [ "serde_json", "sha2 0.10.2", "sha3 0.10.1", - "solana-frozen-abi 1.14.16", - "solana-frozen-abi-macro 1.14.16", - "solana-logger 1.14.16", - "solana-sdk-macro 1.14.16", + "solana-frozen-abi 1.14.17", + "solana-frozen-abi-macro 1.14.17", + "solana-logger 1.14.17", + "solana-sdk-macro 1.14.17", "static_assertions", "thiserror", "tiny-bip39", @@ -5801,7 +5801,7 @@ dependencies = [ [[package]] name = "solana-program-runtime" -version = "1.14.16" +version = "1.14.17" dependencies = [ "base64 0.13.0", "bincode", @@ -5816,18 +5816,18 @@ dependencies = [ "rand 0.7.3", "rustc_version 0.4.0", "serde", - "solana-frozen-abi 1.14.16", - "solana-frozen-abi-macro 1.14.16", - "solana-logger 1.14.16", + "solana-frozen-abi 1.14.17", + "solana-frozen-abi-macro 1.14.17", + "solana-logger 1.14.17", "solana-measure", "solana-metrics", - "solana-sdk 1.14.16", + "solana-sdk 1.14.17", "thiserror", ] [[package]] name = "solana-program-test" -version = "1.14.16" +version = "1.14.17" dependencies = [ "assert_matches", "async-trait", @@ -5839,10 +5839,10 @@ dependencies = [ "solana-banks-client", "solana-banks-server", "solana-bpf-loader-program", - "solana-logger 1.14.16", + "solana-logger 1.14.17", "solana-program-runtime", "solana-runtime", - "solana-sdk 1.14.16", + "solana-sdk 1.14.17", "solana-stake-program", "solana-vote-program", "thiserror", @@ -5851,7 +5851,7 @@ dependencies = [ [[package]] name = "solana-rayon-threadlimit" -version = "1.14.16" +version = "1.14.17" dependencies = [ "lazy_static", "num_cpus", @@ -5859,7 +5859,7 @@ dependencies = [ [[package]] name = "solana-remote-wallet" -version = "1.14.16" +version = "1.14.17" dependencies = [ "console", "dialoguer", @@ -5870,14 +5870,14 @@ dependencies = [ "parking_lot 0.12.1", "qstring", "semver 1.0.10", - "solana-sdk 1.14.16", + "solana-sdk 1.14.17", "thiserror", "uriparse", ] [[package]] name = "solana-rpc" -version = "1.14.16" +version = "1.14.17" dependencies = [ "base64 0.13.0", "bincode", @@ -5913,7 +5913,7 @@ dependencies = [ "solana-poh", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.14.16", + "solana-sdk 1.14.17", "solana-send-transaction-service", "solana-stake-program", "solana-storage-bigtable", @@ -5932,7 +5932,7 @@ dependencies = [ [[package]] name = "solana-rpc-test" -version = "1.14.16" +version = "1.14.17" dependencies = [ "bincode", "bs58", @@ -5944,9 +5944,9 @@ dependencies = [ "serde_json", "solana-account-decoder", "solana-client", - "solana-logger 1.14.16", + "solana-logger 1.14.17", "solana-rpc", - "solana-sdk 1.14.16", + "solana-sdk 1.14.17", "solana-streamer", "solana-test-validator", "solana-transaction-status", @@ -5955,7 +5955,7 @@ dependencies = [ [[package]] name = "solana-runtime" -version = "1.14.16" +version = "1.14.17" dependencies = [ "arrayref", "assert_matches", @@ -5996,18 +5996,18 @@ dependencies = [ "solana-bucket-map", "solana-compute-budget-program", "solana-config-program", - "solana-frozen-abi 1.14.16", - "solana-frozen-abi-macro 1.14.16", - "solana-logger 1.14.16", + "solana-frozen-abi 1.14.17", + "solana-frozen-abi-macro 1.14.17", + "solana-logger 1.14.17", "solana-measure", "solana-metrics", "solana-program-runtime", "solana-rayon-threadlimit", - "solana-sdk 1.14.16", + "solana-sdk 1.14.17", "solana-stake-program", "solana-vote-program", "solana-zk-token-proof-program", - "solana-zk-token-sdk 1.14.16", + "solana-zk-token-sdk 1.14.17", "strum", "strum_macros", "symlink", @@ -6070,7 +6070,7 @@ dependencies = [ [[package]] name = "solana-sdk" -version = "1.14.16" +version = "1.14.17" dependencies = [ "anyhow", "assert_matches", @@ -6110,11 +6110,11 @@ dependencies = [ "serde_json", "sha2 0.10.2", "sha3 0.10.1", - "solana-frozen-abi 1.14.16", - "solana-frozen-abi-macro 1.14.16", - "solana-logger 1.14.16", - "solana-program 1.14.16", - "solana-sdk-macro 1.14.16", + "solana-frozen-abi 1.14.17", + "solana-frozen-abi-macro 1.14.17", + "solana-logger 1.14.17", + "solana-program 1.14.17", + "solana-sdk-macro 1.14.17", "static_assertions", "thiserror", "tiny-bip39", @@ -6137,7 +6137,7 @@ dependencies = [ [[package]] name = "solana-sdk-macro" -version = "1.14.16" +version = "1.14.17" dependencies = [ "bs58", "proc-macro2 1.0.41", @@ -6148,21 +6148,21 @@ dependencies = [ [[package]] name = "solana-send-transaction-service" -version = "1.14.16" +version = "1.14.17" dependencies = [ "crossbeam-channel", "log", "solana-client", - "solana-logger 1.14.16", + "solana-logger 1.14.17", "solana-measure", "solana-metrics", "solana-runtime", - "solana-sdk 1.14.16", + "solana-sdk 1.14.17", ] [[package]] name = "solana-stake-accounts" -version = "1.14.16" +version = "1.14.17" dependencies = [ "clap 2.33.3", "solana-clap-utils", @@ -6170,13 +6170,13 @@ dependencies = [ "solana-client", "solana-remote-wallet", "solana-runtime", - "solana-sdk 1.14.16", + "solana-sdk 1.14.17", "solana-stake-program", ] [[package]] name = "solana-stake-program" -version = "1.14.16" +version = "1.14.17" dependencies = [ "assert_matches", "bincode", @@ -6188,12 +6188,12 @@ dependencies = [ "serde", "serde_derive", "solana-config-program", - "solana-frozen-abi 1.14.16", - "solana-frozen-abi-macro 1.14.16", - "solana-logger 1.14.16", + "solana-frozen-abi 1.14.17", + "solana-frozen-abi-macro 1.14.17", + "solana-logger 1.14.17", "solana-metrics", "solana-program-runtime", - "solana-sdk 1.14.16", + "solana-sdk 1.14.17", "solana-vote-program", "test-case", "thiserror", @@ -6201,7 +6201,7 @@ dependencies = [ [[package]] name = "solana-storage-bigtable" -version = "1.14.16" +version = "1.14.17" dependencies = [ "backoff", "bincode", @@ -6222,7 +6222,7 @@ dependencies = [ "serde_derive", "smpl_jwt", "solana-metrics", - "solana-sdk 1.14.16", + "solana-sdk 1.14.17", "solana-storage-proto", "solana-transaction-status", "thiserror", @@ -6233,7 +6233,7 @@ dependencies = [ [[package]] name = "solana-storage-proto" -version = "1.14.16" +version = "1.14.17" dependencies = [ "bincode", "bs58", @@ -6242,25 +6242,25 @@ dependencies = [ "protobuf-src", "serde", "solana-account-decoder", - "solana-sdk 1.14.16", + "solana-sdk 1.14.17", "solana-transaction-status", "tonic-build 0.8.0", ] [[package]] name = "solana-store-tool" -version = "1.14.16" +version = "1.14.17" dependencies = [ "clap 2.33.3", "log", - "solana-logger 1.14.16", + "solana-logger 1.14.17", "solana-runtime", "solana-version", ] [[package]] name = "solana-streamer" -version = "1.14.16" +version = "1.14.17" dependencies = [ "crossbeam-channel", "futures-util", @@ -6277,10 +6277,10 @@ dependencies = [ "rand 0.7.3", "rcgen", "rustls 0.20.6", - "solana-logger 1.14.16", + "solana-logger 1.14.17", "solana-metrics", "solana-perf", - "solana-sdk 1.14.16", + "solana-sdk 1.14.17", "thiserror", "tokio", "x509-parser", @@ -6288,13 +6288,13 @@ dependencies = [ [[package]] name = "solana-sys-tuner" -version = "1.14.16" +version = "1.14.17" dependencies = [ "clap 2.33.3", "libc", "log", "nix", - "solana-logger 1.14.16", + "solana-logger 1.14.17", "solana-version", "sysctl", "unix_socket2", @@ -6303,7 +6303,7 @@ dependencies = [ [[package]] name = "solana-test-validator" -version = "1.14.16" +version = "1.14.17" dependencies = [ "base64 0.13.0", "log", @@ -6314,20 +6314,20 @@ dependencies = [ "solana-core", "solana-gossip", "solana-ledger", - "solana-logger 1.14.16", + "solana-logger 1.14.17", "solana-net-utils", "solana-program-runtime", "solana-program-test", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.16", + "solana-sdk 1.14.17", "solana-streamer", "tokio", ] [[package]] name = "solana-tokens" -version = "1.14.16" +version = "1.14.17" dependencies = [ "bincode", "chrono", @@ -6343,9 +6343,9 @@ dependencies = [ "solana-clap-utils", "solana-cli-config", "solana-client", - "solana-logger 1.14.16", + "solana-logger 1.14.17", "solana-remote-wallet", - "solana-sdk 1.14.16", + "solana-sdk 1.14.17", "solana-streamer", "solana-test-validator", "solana-transaction-status", @@ -6358,7 +6358,7 @@ dependencies = [ [[package]] name = "solana-transaction-dos" -version = "1.14.16" +version = "1.14.17" dependencies = [ "bincode", "clap 2.33.3", @@ -6372,11 +6372,11 @@ dependencies = [ "solana-faucet", "solana-gossip", "solana-local-cluster", - "solana-logger 1.14.16", + "solana-logger 1.14.17", "solana-measure", "solana-net-utils", "solana-runtime", - "solana-sdk 1.14.16", + "solana-sdk 1.14.17", "solana-streamer", "solana-transaction-status", "solana-version", @@ -6384,7 +6384,7 @@ dependencies = [ [[package]] name = "solana-transaction-status" -version = "1.14.16" +version = "1.14.17" dependencies = [ "Inflector", "base64 0.13.0", @@ -6400,7 +6400,7 @@ dependencies = [ "solana-address-lookup-table-program", "solana-measure", "solana-metrics", - "solana-sdk 1.14.16", + "solana-sdk 1.14.17", "solana-vote-program", "spl-associated-token-account", "spl-memo", @@ -6411,7 +6411,7 @@ dependencies = [ [[package]] name = "solana-upload-perf" -version = "1.14.16" +version = "1.14.17" dependencies = [ "serde_json", "solana-metrics", @@ -6419,7 +6419,7 @@ dependencies = [ [[package]] name = "solana-validator" -version = "1.14.16" +version = "1.14.17" dependencies = [ "chrono", "clap 2.33.3", @@ -6450,14 +6450,14 @@ dependencies = [ "solana-genesis-utils", "solana-gossip", "solana-ledger", - "solana-logger 1.14.16", + "solana-logger 1.14.17", "solana-metrics", "solana-net-utils", "solana-perf", "solana-poh", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.16", + "solana-sdk 1.14.17", "solana-send-transaction-service", "solana-storage-bigtable", "solana-streamer", @@ -6470,21 +6470,21 @@ dependencies = [ [[package]] name = "solana-version" -version = "1.14.16" +version = "1.14.17" dependencies = [ "log", "rustc_version 0.4.0", "semver 1.0.10", "serde", "serde_derive", - "solana-frozen-abi 1.14.16", - "solana-frozen-abi-macro 1.14.16", - "solana-sdk 1.14.16", + "solana-frozen-abi 1.14.17", + "solana-frozen-abi-macro 1.14.17", + "solana-sdk 1.14.17", ] [[package]] name = "solana-vote-program" -version = "1.14.16" +version = "1.14.17" dependencies = [ "bincode", "itertools", @@ -6495,19 +6495,19 @@ dependencies = [ "rustc_version 0.4.0", "serde", "serde_derive", - "solana-frozen-abi 1.14.16", - "solana-frozen-abi-macro 1.14.16", - "solana-logger 1.14.16", + "solana-frozen-abi 1.14.17", + "solana-frozen-abi-macro 1.14.17", + "solana-logger 1.14.17", "solana-metrics", "solana-program-runtime", - "solana-sdk 1.14.16", + "solana-sdk 1.14.17", "test-case", "thiserror", ] [[package]] name = "solana-watchtower" -version = "1.14.16" +version = "1.14.17" dependencies = [ "clap 2.33.3", "humantime", @@ -6516,24 +6516,24 @@ dependencies = [ "solana-cli-config", "solana-cli-output", "solana-client", - "solana-logger 1.14.16", + "solana-logger 1.14.17", "solana-metrics", "solana-notifier", - "solana-sdk 1.14.16", + "solana-sdk 1.14.17", "solana-version", ] [[package]] name = "solana-zk-token-proof-program" -version = "1.14.16" +version = "1.14.17" dependencies = [ "bytemuck", "getrandom 0.1.16", "num-derive", "num-traits", "solana-program-runtime", - "solana-sdk 1.14.16", - "solana-zk-token-sdk 1.14.16", + "solana-sdk 1.14.17", + "solana-zk-token-sdk 1.14.17", ] [[package]] @@ -6569,7 +6569,7 @@ dependencies = [ [[package]] name = "solana-zk-token-sdk" -version = "1.14.16" +version = "1.14.17" dependencies = [ "aes-gcm-siv", "arrayref", @@ -6589,8 +6589,8 @@ dependencies = [ "serde", "serde_json", "sha3 0.9.1", - "solana-program 1.14.16", - "solana-sdk 1.14.16", + "solana-program 1.14.17", + "solana-sdk 1.14.17", "subtle", "thiserror", "zeroize", diff --git a/account-decoder/Cargo.toml b/account-decoder/Cargo.toml index 16edab7c14bf93..a41200fede4022 100644 --- a/account-decoder/Cargo.toml +++ b/account-decoder/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-account-decoder" -version = "1.14.16" +version = "1.14.17" description = "Solana account decoder" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -19,10 +19,10 @@ lazy_static = "1.4.0" serde = "1.0.138" serde_derive = "1.0.103" serde_json = "1.0.81" -solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.16" } -solana-config-program = { path = "../programs/config", version = "=1.14.16" } -solana-sdk = { path = "../sdk", version = "=1.14.16" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.16" } +solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.17" } +solana-config-program = { path = "../programs/config", version = "=1.14.17" } +solana-sdk = { path = "../sdk", version = "=1.14.17" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.17" } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } spl-token-2022 = { version = "=0.5.0", features = ["no-entrypoint"] } thiserror = "1.0" diff --git a/accounts-bench/Cargo.toml b/accounts-bench/Cargo.toml index 8b9ee4bd7c1ba0..eea03333837c67 100644 --- a/accounts-bench/Cargo.toml +++ b/accounts-bench/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-accounts-bench" -version = "1.14.16" +version = "1.14.17" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -12,11 +12,11 @@ publish = false clap = "2.33.1" log = "0.4.17" rayon = "1.5.3" -solana-logger = { path = "../logger", version = "=1.14.16" } -solana-measure = { path = "../measure", version = "=1.14.16" } -solana-runtime = { path = "../runtime", version = "=1.14.16" } -solana-sdk = { path = "../sdk", version = "=1.14.16" } -solana-version = { path = "../version", version = "=1.14.16" } +solana-logger = { path = "../logger", version = "=1.14.17" } +solana-measure = { path = "../measure", version = "=1.14.17" } +solana-runtime = { path = "../runtime", version = "=1.14.17" } +solana-sdk = { path = "../sdk", version = "=1.14.17" } +solana-version = { path = "../version", version = "=1.14.17" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/accounts-cluster-bench/Cargo.toml b/accounts-cluster-bench/Cargo.toml index 5ff7d081829188..8c533dd9c66432 100644 --- a/accounts-cluster-bench/Cargo.toml +++ b/accounts-cluster-bench/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-accounts-cluster-bench" -version = "1.14.16" +version = "1.14.17" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -13,25 +13,25 @@ clap = "2.33.1" log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.16" } -solana-clap-utils = { path = "../clap-utils", version = "=1.14.16" } -solana-client = { path = "../client", version = "=1.14.16" } -solana-faucet = { path = "../faucet", version = "=1.14.16" } -solana-gossip = { path = "../gossip", version = "=1.14.16" } -solana-logger = { path = "../logger", version = "=1.14.16" } -solana-measure = { path = "../measure", version = "=1.14.16" } -solana-net-utils = { path = "../net-utils", version = "=1.14.16" } -solana-runtime = { path = "../runtime", version = "=1.14.16" } -solana-sdk = { path = "../sdk", version = "=1.14.16" } -solana-streamer = { path = "../streamer", version = "=1.14.16" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.16" } -solana-version = { path = "../version", version = "=1.14.16" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.17" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.17" } +solana-client = { path = "../client", version = "=1.14.17" } +solana-faucet = { path = "../faucet", version = "=1.14.17" } +solana-gossip = { path = "../gossip", version = "=1.14.17" } +solana-logger = { path = "../logger", version = "=1.14.17" } +solana-measure = { path = "../measure", version = "=1.14.17" } +solana-net-utils = { path = "../net-utils", version = "=1.14.17" } +solana-runtime = { path = "../runtime", version = "=1.14.17" } +solana-sdk = { path = "../sdk", version = "=1.14.17" } +solana-streamer = { path = "../streamer", version = "=1.14.17" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.17" } +solana-version = { path = "../version", version = "=1.14.17" } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } [dev-dependencies] -solana-core = { path = "../core", version = "=1.14.16" } -solana-local-cluster = { path = "../local-cluster", version = "=1.14.16" } -solana-test-validator = { path = "../test-validator", version = "=1.14.16" } +solana-core = { path = "../core", version = "=1.14.17" } +solana-local-cluster = { path = "../local-cluster", version = "=1.14.17" } +solana-test-validator = { path = "../test-validator", version = "=1.14.17" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/banking-bench/Cargo.toml b/banking-bench/Cargo.toml index 28dfec7760cf16..c016dd9da2bbf4 100644 --- a/banking-bench/Cargo.toml +++ b/banking-bench/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-banking-bench" -version = "1.14.16" +version = "1.14.17" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,18 +14,18 @@ crossbeam-channel = "0.5" log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" -solana-client = { path = "../client", version = "=1.14.16" } -solana-core = { path = "../core", version = "=1.14.16" } -solana-gossip = { path = "../gossip", version = "=1.14.16" } -solana-ledger = { path = "../ledger", version = "=1.14.16" } -solana-logger = { path = "../logger", version = "=1.14.16" } -solana-measure = { path = "../measure", version = "=1.14.16" } -solana-perf = { path = "../perf", version = "=1.14.16" } -solana-poh = { path = "../poh", version = "=1.14.16" } -solana-runtime = { path = "../runtime", version = "=1.14.16" } -solana-sdk = { path = "../sdk", version = "=1.14.16" } -solana-streamer = { path = "../streamer", version = "=1.14.16" } -solana-version = { path = "../version", version = "=1.14.16" } +solana-client = { path = "../client", version = "=1.14.17" } +solana-core = { path = "../core", version = "=1.14.17" } +solana-gossip = { path = "../gossip", version = "=1.14.17" } +solana-ledger = { path = "../ledger", version = "=1.14.17" } +solana-logger = { path = "../logger", version = "=1.14.17" } +solana-measure = { path = "../measure", version = "=1.14.17" } +solana-perf = { path = "../perf", version = "=1.14.17" } +solana-poh = { path = "../poh", version = "=1.14.17" } +solana-runtime = { path = "../runtime", version = "=1.14.17" } +solana-sdk = { path = "../sdk", version = "=1.14.17" } +solana-streamer = { path = "../streamer", version = "=1.14.17" } +solana-version = { path = "../version", version = "=1.14.17" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/banks-client/Cargo.toml b/banks-client/Cargo.toml index a55c1ec7784fc9..e04f4b058bc77b 100644 --- a/banks-client/Cargo.toml +++ b/banks-client/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-banks-client" -version = "1.14.16" +version = "1.14.17" description = "Solana banks client" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,17 +12,17 @@ edition = "2021" [dependencies] borsh = "0.9.3" futures = "0.3" -solana-banks-interface = { path = "../banks-interface", version = "=1.14.16" } -solana-program = { path = "../sdk/program", version = "=1.14.16" } -solana-sdk = { path = "../sdk", version = "=1.14.16" } +solana-banks-interface = { path = "../banks-interface", version = "=1.14.17" } +solana-program = { path = "../sdk/program", version = "=1.14.17" } +solana-sdk = { path = "../sdk", version = "=1.14.17" } tarpc = { version = "0.29.0", features = ["full"] } thiserror = "1.0" tokio = { version = "~1.14.1", features = ["full"] } tokio-serde = { version = "0.8", features = ["bincode"] } [dev-dependencies] -solana-banks-server = { path = "../banks-server", version = "=1.14.16" } -solana-runtime = { path = "../runtime", version = "=1.14.16" } +solana-banks-server = { path = "../banks-server", version = "=1.14.17" } +solana-runtime = { path = "../runtime", version = "=1.14.17" } [lib] crate-type = ["lib"] diff --git a/banks-interface/Cargo.toml b/banks-interface/Cargo.toml index d37b668f687be4..eb207c3e3f4838 100644 --- a/banks-interface/Cargo.toml +++ b/banks-interface/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-banks-interface" -version = "1.14.16" +version = "1.14.17" description = "Solana banks RPC interface" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -11,7 +11,7 @@ edition = "2021" [dependencies] serde = { version = "1.0.138", features = ["derive"] } -solana-sdk = { path = "../sdk", version = "=1.14.16" } +solana-sdk = { path = "../sdk", version = "=1.14.17" } tarpc = { version = "0.29.0", features = ["full"] } [lib] diff --git a/banks-server/Cargo.toml b/banks-server/Cargo.toml index 81aa3d4a99ae38..45ebf59412ec25 100644 --- a/banks-server/Cargo.toml +++ b/banks-server/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-banks-server" -version = "1.14.16" +version = "1.14.17" description = "Solana banks server" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,11 +13,11 @@ edition = "2021" bincode = "1.3.3" crossbeam-channel = "0.5" futures = "0.3" -solana-banks-interface = { path = "../banks-interface", version = "=1.14.16" } -solana-client = { path = "../client", version = "=1.14.16" } -solana-runtime = { path = "../runtime", version = "=1.14.16" } -solana-sdk = { path = "../sdk", version = "=1.14.16" } -solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.16" } +solana-banks-interface = { path = "../banks-interface", version = "=1.14.17" } +solana-client = { path = "../client", version = "=1.14.17" } +solana-runtime = { path = "../runtime", version = "=1.14.17" } +solana-sdk = { path = "../sdk", version = "=1.14.17" } +solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.17" } tarpc = { version = "0.29.0", features = ["full"] } tokio = { version = "1", features = ["full"] } tokio-serde = { version = "0.8", features = ["bincode"] } diff --git a/bench-streamer/Cargo.toml b/bench-streamer/Cargo.toml index e6ef015256c75d..eb86da70a137ff 100644 --- a/bench-streamer/Cargo.toml +++ b/bench-streamer/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-bench-streamer" -version = "1.14.16" +version = "1.14.17" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -11,9 +11,9 @@ publish = false [dependencies] clap = { version = "3.1.5", features = ["cargo"] } crossbeam-channel = "0.5" -solana-net-utils = { path = "../net-utils", version = "=1.14.16" } -solana-streamer = { path = "../streamer", version = "=1.14.16" } -solana-version = { path = "../version", version = "=1.14.16" } +solana-net-utils = { path = "../net-utils", version = "=1.14.17" } +solana-streamer = { path = "../streamer", version = "=1.14.17" } +solana-version = { path = "../version", version = "=1.14.17" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/bench-tps/Cargo.toml b/bench-tps/Cargo.toml index 34c9fc9f19228d..d980ffa4192dcf 100644 --- a/bench-tps/Cargo.toml +++ b/bench-tps/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-bench-tps" -version = "1.14.16" +version = "1.14.17" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -15,28 +15,28 @@ log = "0.4.17" rayon = "1.5.3" serde_json = "1.0.81" serde_yaml = "0.8.26" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.16" } -solana-cli-config = { path = "../cli-config", version = "=1.14.16" } -solana-client = { path = "../client", version = "=1.14.16" } -solana-core = { path = "../core", version = "=1.14.16" } -solana-faucet = { path = "../faucet", version = "=1.14.16" } -solana-genesis = { path = "../genesis", version = "=1.14.16" } -solana-gossip = { path = "../gossip", version = "=1.14.16" } -solana-logger = { path = "../logger", version = "=1.14.16" } -solana-measure = { path = "../measure", version = "=1.14.16" } -solana-metrics = { path = "../metrics", version = "=1.14.16" } -solana-net-utils = { path = "../net-utils", version = "=1.14.16" } -solana-rpc = { path = "../rpc", version = "=1.14.16" } -solana-runtime = { path = "../runtime", version = "=1.14.16" } -solana-sdk = { path = "../sdk", version = "=1.14.16" } -solana-streamer = { path = "../streamer", version = "=1.14.16" } -solana-version = { path = "../version", version = "=1.14.16" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.17" } +solana-cli-config = { path = "../cli-config", version = "=1.14.17" } +solana-client = { path = "../client", version = "=1.14.17" } +solana-core = { path = "../core", version = "=1.14.17" } +solana-faucet = { path = "../faucet", version = "=1.14.17" } +solana-genesis = { path = "../genesis", version = "=1.14.17" } +solana-gossip = { path = "../gossip", version = "=1.14.17" } +solana-logger = { path = "../logger", version = "=1.14.17" } +solana-measure = { path = "../measure", version = "=1.14.17" } +solana-metrics = { path = "../metrics", version = "=1.14.17" } +solana-net-utils = { path = "../net-utils", version = "=1.14.17" } +solana-rpc = { path = "../rpc", version = "=1.14.17" } +solana-runtime = { path = "../runtime", version = "=1.14.17" } +solana-sdk = { path = "../sdk", version = "=1.14.17" } +solana-streamer = { path = "../streamer", version = "=1.14.17" } +solana-version = { path = "../version", version = "=1.14.17" } thiserror = "1.0" [dev-dependencies] serial_test = "0.8.0" -solana-local-cluster = { path = "../local-cluster", version = "=1.14.16" } -solana-test-validator = { path = "../test-validator", version = "=1.14.16" } +solana-local-cluster = { path = "../local-cluster", version = "=1.14.17" } +solana-test-validator = { path = "../test-validator", version = "=1.14.17" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/bloom/Cargo.toml b/bloom/Cargo.toml index 6c32e06c578a0a..21370a14acf7d5 100644 --- a/bloom/Cargo.toml +++ b/bloom/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bloom" -version = "1.14.16" +version = "1.14.17" description = "Solana bloom filter" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -17,9 +17,9 @@ rand = "0.7.0" rayon = "1.5.3" serde = { version = "1.0.138", features = ["rc"] } serde_derive = "1.0.103" -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.16" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.16" } -solana-sdk = { path = "../sdk", version = "=1.14.16" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.17" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.17" } +solana-sdk = { path = "../sdk", version = "=1.14.17" } [lib] crate-type = ["lib"] diff --git a/bucket_map/Cargo.toml b/bucket_map/Cargo.toml index 195b4a9172c50f..5ee62ac911d1cc 100644 --- a/bucket_map/Cargo.toml +++ b/bucket_map/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bucket-map" -version = "1.14.16" +version = "1.14.17" description = "solana-bucket-map" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-bucket-map" @@ -15,14 +15,14 @@ log = { version = "0.4.17" } memmap2 = "0.5.3" modular-bitfield = "0.11.2" rand = "0.7.0" -solana-measure = { path = "../measure", version = "=1.14.16" } -solana-sdk = { path = "../sdk", version = "=1.14.16" } +solana-measure = { path = "../measure", version = "=1.14.17" } +solana-sdk = { path = "../sdk", version = "=1.14.17" } tempfile = "3.3.0" [dev-dependencies] fs_extra = "1.2.0" rayon = "1.5.3" -solana-logger = { path = "../logger", version = "=1.14.16" } +solana-logger = { path = "../logger", version = "=1.14.17" } [lib] crate-type = ["lib"] diff --git a/clap-utils/Cargo.toml b/clap-utils/Cargo.toml index c7c6935c557aa7..74700ad6a9db65 100644 --- a/clap-utils/Cargo.toml +++ b/clap-utils/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-clap-utils" -version = "1.14.16" +version = "1.14.17" description = "Solana utilities for the clap" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,9 +13,9 @@ edition = "2021" chrono = "0.4" clap = "2.33.0" rpassword = "6.0" -solana-perf = { path = "../perf", version = "=1.14.16" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.16", default-features = false } -solana-sdk = { path = "../sdk", version = "=1.14.16" } +solana-perf = { path = "../perf", version = "=1.14.17" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.17", default-features = false } +solana-sdk = { path = "../sdk", version = "=1.14.17" } thiserror = "1.0.31" tiny-bip39 = "0.8.2" uriparse = "0.6.4" diff --git a/clap-v3-utils/Cargo.toml b/clap-v3-utils/Cargo.toml index a8600de9d49c71..3dde2d241bd95c 100644 --- a/clap-v3-utils/Cargo.toml +++ b/clap-v3-utils/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-clap-v3-utils" -version = "1.14.16" +version = "1.14.17" description = "Solana utilities for the clap v3" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,9 +13,9 @@ edition = "2021" chrono = "0.4" clap = { version = "3.1.5", features = ["cargo"] } rpassword = "6.0" -solana-perf = { path = "../perf", version = "=1.14.16" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.16", default-features = false } -solana-sdk = { path = "../sdk", version = "=1.14.16" } +solana-perf = { path = "../perf", version = "=1.14.17" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.17", default-features = false } +solana-sdk = { path = "../sdk", version = "=1.14.17" } thiserror = "1.0.31" tiny-bip39 = "0.8.2" uriparse = "0.6.4" diff --git a/cli-config/Cargo.toml b/cli-config/Cargo.toml index 3234a0b71956c9..f30261049c33ae 100644 --- a/cli-config/Cargo.toml +++ b/cli-config/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-cli-config" description = "Blockchain, Rebuilt for Scale" -version = "1.14.16" +version = "1.14.17" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -15,8 +15,8 @@ lazy_static = "1.4.0" serde = "1.0.138" serde_derive = "1.0.103" serde_yaml = "0.8.26" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.16" } -solana-sdk = { path = "../sdk", version = "=1.14.16" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.17" } +solana-sdk = { path = "../sdk", version = "=1.14.17" } url = "2.2.2" [dev-dependencies] diff --git a/cli-output/Cargo.toml b/cli-output/Cargo.toml index 6ee58b60132128..c61f7668674f96 100644 --- a/cli-output/Cargo.toml +++ b/cli-output/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-cli-output" description = "Blockchain, Rebuilt for Scale" -version = "1.14.16" +version = "1.14.17" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -21,13 +21,13 @@ pretty-hex = "0.3.0" semver = "1.0.10" serde = "1.0.138" serde_json = "1.0.81" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.16" } -solana-clap-utils = { path = "../clap-utils", version = "=1.14.16" } -solana-cli-config = { path = "../cli-config", version = "=1.14.16" } -solana-client = { path = "../client", version = "=1.14.16" } -solana-sdk = { path = "../sdk", version = "=1.14.16" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.16" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.16" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.17" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.17" } +solana-cli-config = { path = "../cli-config", version = "=1.14.17" } +solana-client = { path = "../client", version = "=1.14.17" } +solana-sdk = { path = "../sdk", version = "=1.14.17" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.17" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.17" } spl-memo = { version = "=3.0.1", features = ["no-entrypoint"] } [dev-dependencies] diff --git a/cli/Cargo.toml b/cli/Cargo.toml index 3c4643936b9b08..5fb2c20017b2e5 100644 --- a/cli/Cargo.toml +++ b/cli/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-cli" description = "Blockchain, Rebuilt for Scale" -version = "1.14.16" +version = "1.14.17" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -27,30 +27,30 @@ semver = "1.0.10" serde = "1.0.138" serde_derive = "1.0.103" serde_json = "1.0.81" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.16" } -solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.16" } -solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.16" } -solana-clap-utils = { path = "../clap-utils", version = "=1.14.16" } -solana-cli-config = { path = "../cli-config", version = "=1.14.16" } -solana-cli-output = { path = "../cli-output", version = "=1.14.16" } -solana-client = { path = "../client", version = "=1.14.16" } -solana-config-program = { path = "../programs/config", version = "=1.14.16" } -solana-faucet = { path = "../faucet", version = "=1.14.16" } -solana-logger = { path = "../logger", version = "=1.14.16" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.16" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.16" } -solana-sdk = { path = "../sdk", version = "=1.14.16" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.16" } -solana-version = { path = "../version", version = "=1.14.16" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.16" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.17" } +solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.17" } +solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.17" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.17" } +solana-cli-config = { path = "../cli-config", version = "=1.14.17" } +solana-cli-output = { path = "../cli-output", version = "=1.14.17" } +solana-client = { path = "../client", version = "=1.14.17" } +solana-config-program = { path = "../programs/config", version = "=1.14.17" } +solana-faucet = { path = "../faucet", version = "=1.14.17" } +solana-logger = { path = "../logger", version = "=1.14.17" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.17" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.17" } +solana-sdk = { path = "../sdk", version = "=1.14.17" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.17" } +solana-version = { path = "../version", version = "=1.14.17" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.17" } solana_rbpf = "=0.2.31" spl-memo = { version = "=3.0.1", features = ["no-entrypoint"] } thiserror = "1.0.31" tiny-bip39 = "0.8.2" [dev-dependencies] -solana-streamer = { path = "../streamer", version = "=1.14.16" } -solana-test-validator = { path = "../test-validator", version = "=1.14.16" } +solana-streamer = { path = "../streamer", version = "=1.14.17" } +solana-test-validator = { path = "../test-validator", version = "=1.14.17" } tempfile = "3.3.0" [[bin]] diff --git a/client-test/Cargo.toml b/client-test/Cargo.toml index 90540d0984eee0..ce075421f2034b 100644 --- a/client-test/Cargo.toml +++ b/client-test/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-client-test" -version = "1.14.16" +version = "1.14.17" description = "Solana RPC Test" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,25 +14,25 @@ publish = false futures-util = "0.3.21" serde_json = "1.0.81" serial_test = "0.8.0" -solana-client = { path = "../client", version = "=1.14.16" } -solana-ledger = { path = "../ledger", version = "=1.14.16" } -solana-measure = { path = "../measure", version = "=1.14.16" } -solana-merkle-tree = { path = "../merkle-tree", version = "=1.14.16" } -solana-metrics = { path = "../metrics", version = "=1.14.16" } -solana-perf = { path = "../perf", version = "=1.14.16" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.16" } -solana-rpc = { path = "../rpc", version = "=1.14.16" } -solana-runtime = { path = "../runtime", version = "=1.14.16" } -solana-sdk = { path = "../sdk", version = "=1.14.16" } -solana-streamer = { path = "../streamer", version = "=1.14.16" } -solana-test-validator = { path = "../test-validator", version = "=1.14.16" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.16" } -solana-version = { path = "../version", version = "=1.14.16" } +solana-client = { path = "../client", version = "=1.14.17" } +solana-ledger = { path = "../ledger", version = "=1.14.17" } +solana-measure = { path = "../measure", version = "=1.14.17" } +solana-merkle-tree = { path = "../merkle-tree", version = "=1.14.17" } +solana-metrics = { path = "../metrics", version = "=1.14.17" } +solana-perf = { path = "../perf", version = "=1.14.17" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.17" } +solana-rpc = { path = "../rpc", version = "=1.14.17" } +solana-runtime = { path = "../runtime", version = "=1.14.17" } +solana-sdk = { path = "../sdk", version = "=1.14.17" } +solana-streamer = { path = "../streamer", version = "=1.14.17" } +solana-test-validator = { path = "../test-validator", version = "=1.14.17" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.17" } +solana-version = { path = "../version", version = "=1.14.17" } systemstat = "0.1.11" tokio = { version = "~1.14.1", features = ["full"] } [dev-dependencies] -solana-logger = { path = "../logger", version = "=1.14.16" } +solana-logger = { path = "../logger", version = "=1.14.17" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/client/Cargo.toml b/client/Cargo.toml index 9950a69d92c021..9fe34d666aba51 100644 --- a/client/Cargo.toml +++ b/client/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-client" -version = "1.14.16" +version = "1.14.17" description = "Solana Client" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -38,17 +38,17 @@ semver = "1.0.10" serde = "1.0.138" serde_derive = "1.0.103" serde_json = "1.0.81" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.16" } -solana-clap-utils = { path = "../clap-utils", version = "=1.14.16" } -solana-faucet = { path = "../faucet", version = "=1.14.16" } -solana-measure = { path = "../measure", version = "=1.14.16" } -solana-metrics = { path = "../metrics", version = "=1.14.16" } -solana-net-utils = { path = "../net-utils", version = "=1.14.16" } -solana-sdk = { path = "../sdk", version = "=1.14.16" } -solana-streamer = { path = "../streamer", version = "=1.14.16" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.16" } -solana-version = { path = "../version", version = "=1.14.16" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.16" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.17" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.17" } +solana-faucet = { path = "../faucet", version = "=1.14.17" } +solana-measure = { path = "../measure", version = "=1.14.17" } +solana-metrics = { path = "../metrics", version = "=1.14.17" } +solana-net-utils = { path = "../net-utils", version = "=1.14.17" } +solana-sdk = { path = "../sdk", version = "=1.14.17" } +solana-streamer = { path = "../streamer", version = "=1.14.17" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.17" } +solana-version = { path = "../version", version = "=1.14.17" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.17" } spl-token-2022 = { version = "=0.5.0", features = ["no-entrypoint"] } thiserror = "1.0" tokio = { version = "1", features = ["full"] } @@ -61,8 +61,8 @@ url = "2.2.2" anyhow = "1.0.58" assert_matches = "1.5.0" jsonrpc-http-server = "18.0.0" -solana-logger = { path = "../logger", version = "=1.14.16" } -solana-perf = { path = "../perf", version = "=1.14.16" } +solana-logger = { path = "../logger", version = "=1.14.17" } +solana-perf = { path = "../perf", version = "=1.14.17" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/core/Cargo.toml b/core/Cargo.toml index 186a1ed9c0ae6d..5849ca1bc0c154 100644 --- a/core/Cargo.toml +++ b/core/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "solana-core" description = "Blockchain, Rebuilt for Scale" -version = "1.14.16" +version = "1.14.17" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-core" readme = "../README.md" @@ -36,30 +36,30 @@ rand_chacha = "0.2.2" rayon = "1.5.3" serde = "1.0.138" serde_derive = "1.0.103" -solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.16" } -solana-bloom = { path = "../bloom", version = "=1.14.16" } -solana-client = { path = "../client", version = "=1.14.16" } -solana-entry = { path = "../entry", version = "=1.14.16" } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.16" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.16" } -solana-geyser-plugin-manager = { path = "../geyser-plugin-manager", version = "=1.14.16" } -solana-gossip = { path = "../gossip", version = "=1.14.16" } -solana-ledger = { path = "../ledger", version = "=1.14.16" } -solana-measure = { path = "../measure", version = "=1.14.16" } -solana-metrics = { path = "../metrics", version = "=1.14.16" } -solana-net-utils = { path = "../net-utils", version = "=1.14.16" } -solana-perf = { path = "../perf", version = "=1.14.16" } -solana-poh = { path = "../poh", version = "=1.14.16" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.16" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.16" } -solana-rpc = { path = "../rpc", version = "=1.14.16" } -solana-runtime = { path = "../runtime", version = "=1.14.16" } -solana-sdk = { path = "../sdk", version = "=1.14.16" } -solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.16" } -solana-streamer = { path = "../streamer", version = "=1.14.16" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.16" } -solana-version = { path = "../version", version = "=1.14.16" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.16" } +solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.17" } +solana-bloom = { path = "../bloom", version = "=1.14.17" } +solana-client = { path = "../client", version = "=1.14.17" } +solana-entry = { path = "../entry", version = "=1.14.17" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.17" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.17" } +solana-geyser-plugin-manager = { path = "../geyser-plugin-manager", version = "=1.14.17" } +solana-gossip = { path = "../gossip", version = "=1.14.17" } +solana-ledger = { path = "../ledger", version = "=1.14.17" } +solana-measure = { path = "../measure", version = "=1.14.17" } +solana-metrics = { path = "../metrics", version = "=1.14.17" } +solana-net-utils = { path = "../net-utils", version = "=1.14.17" } +solana-perf = { path = "../perf", version = "=1.14.17" } +solana-poh = { path = "../poh", version = "=1.14.17" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.17" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.17" } +solana-rpc = { path = "../rpc", version = "=1.14.17" } +solana-runtime = { path = "../runtime", version = "=1.14.17" } +solana-sdk = { path = "../sdk", version = "=1.14.17" } +solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.17" } +solana-streamer = { path = "../streamer", version = "=1.14.17" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.17" } +solana-version = { path = "../version", version = "=1.14.17" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.17" } sys-info = "0.9.1" tempfile = "3.3.0" thiserror = "1.0" @@ -71,9 +71,9 @@ matches = "0.1.9" raptorq = "1.7.0" serde_json = "1.0.81" serial_test = "0.8.0" -solana-logger = { path = "../logger", version = "=1.14.16" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.16" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.16" } +solana-logger = { path = "../logger", version = "=1.14.17" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.17" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.17" } static_assertions = "1.1.0" systemstat = "0.1.11" test-case = "2.1.0" diff --git a/dos/Cargo.toml b/dos/Cargo.toml index 151c2d0ffdfb96..3629979b3a8ec2 100644 --- a/dos/Cargo.toml +++ b/dos/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-dos" -version = "1.14.16" +version = "1.14.17" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -17,23 +17,23 @@ itertools = "0.10.3" log = "0.4.17" rand = "0.7.0" serde = "1.0.138" -solana-bench-tps = { path = "../bench-tps", version = "=1.14.16" } -solana-client = { path = "../client", version = "=1.14.16" } -solana-core = { path = "../core", version = "=1.14.16" } -solana-faucet = { path = "../faucet", version = "=1.14.16" } -solana-gossip = { path = "../gossip", version = "=1.14.16" } -solana-logger = { path = "../logger", version = "=1.14.16" } -solana-measure = { path = "../measure", version = "=1.14.16" } -solana-net-utils = { path = "../net-utils", version = "=1.14.16" } -solana-perf = { path = "../perf", version = "=1.14.16" } -solana-rpc = { path = "../rpc", version = "=1.14.16" } -solana-sdk = { path = "../sdk", version = "=1.14.16" } -solana-streamer = { path = "../streamer", version = "=1.14.16" } -solana-version = { path = "../version", version = "=1.14.16" } +solana-bench-tps = { path = "../bench-tps", version = "=1.14.17" } +solana-client = { path = "../client", version = "=1.14.17" } +solana-core = { path = "../core", version = "=1.14.17" } +solana-faucet = { path = "../faucet", version = "=1.14.17" } +solana-gossip = { path = "../gossip", version = "=1.14.17" } +solana-logger = { path = "../logger", version = "=1.14.17" } +solana-measure = { path = "../measure", version = "=1.14.17" } +solana-net-utils = { path = "../net-utils", version = "=1.14.17" } +solana-perf = { path = "../perf", version = "=1.14.17" } +solana-rpc = { path = "../rpc", version = "=1.14.17" } +solana-sdk = { path = "../sdk", version = "=1.14.17" } +solana-streamer = { path = "../streamer", version = "=1.14.17" } +solana-version = { path = "../version", version = "=1.14.17" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] [dev-dependencies] serial_test = "0.8.0" -solana-local-cluster = { path = "../local-cluster", version = "=1.14.16" } +solana-local-cluster = { path = "../local-cluster", version = "=1.14.17" } diff --git a/download-utils/Cargo.toml b/download-utils/Cargo.toml index 22e967b6263606..fd4aa1ae3df5b2 100644 --- a/download-utils/Cargo.toml +++ b/download-utils/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-download-utils" -version = "1.14.16" +version = "1.14.17" description = "Solana Download Utils" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,8 +14,8 @@ console = "0.15.0" indicatif = "0.16.2" log = "0.4.17" reqwest = { version = "0.11.11", default-features = false, features = ["blocking", "brotli", "deflate", "gzip", "rustls-tls", "json"] } -solana-runtime = { path = "../runtime", version = "=1.14.16" } -solana-sdk = { path = "../sdk", version = "=1.14.16" } +solana-runtime = { path = "../runtime", version = "=1.14.17" } +solana-sdk = { path = "../sdk", version = "=1.14.17" } [lib] crate-type = ["lib"] diff --git a/entry/Cargo.toml b/entry/Cargo.toml index 1183a77d9cbbab..4bf0d7869a3ad3 100644 --- a/entry/Cargo.toml +++ b/entry/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-entry" -version = "1.14.16" +version = "1.14.17" description = "Solana Entry" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -19,16 +19,16 @@ log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" serde = "1.0.138" -solana-measure = { path = "../measure", version = "=1.14.16" } -solana-merkle-tree = { path = "../merkle-tree", version = "=1.14.16" } -solana-metrics = { path = "../metrics", version = "=1.14.16" } -solana-perf = { path = "../perf", version = "=1.14.16" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.16" } -solana-sdk = { path = "../sdk", version = "=1.14.16" } +solana-measure = { path = "../measure", version = "=1.14.17" } +solana-merkle-tree = { path = "../merkle-tree", version = "=1.14.17" } +solana-metrics = { path = "../metrics", version = "=1.14.17" } +solana-perf = { path = "../perf", version = "=1.14.17" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.17" } +solana-sdk = { path = "../sdk", version = "=1.14.17" } [dev-dependencies] matches = "0.1.9" -solana-logger = { path = "../logger", version = "=1.14.16" } +solana-logger = { path = "../logger", version = "=1.14.17" } [lib] crate-type = ["lib"] diff --git a/faucet/Cargo.toml b/faucet/Cargo.toml index a85ab5a3956457..ec6b947206a013 100644 --- a/faucet/Cargo.toml +++ b/faucet/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-faucet" -version = "1.14.16" +version = "1.14.17" description = "Solana Faucet" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -17,12 +17,12 @@ crossbeam-channel = "0.5" log = "0.4.17" serde = "1.0.138" serde_derive = "1.0.103" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.16" } -solana-cli-config = { path = "../cli-config", version = "=1.14.16" } -solana-logger = { path = "../logger", version = "=1.14.16" } -solana-metrics = { path = "../metrics", version = "=1.14.16" } -solana-sdk = { path = "../sdk", version = "=1.14.16" } -solana-version = { path = "../version", version = "=1.14.16" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.17" } +solana-cli-config = { path = "../cli-config", version = "=1.14.17" } +solana-logger = { path = "../logger", version = "=1.14.17" } +solana-metrics = { path = "../metrics", version = "=1.14.17" } +solana-sdk = { path = "../sdk", version = "=1.14.17" } +solana-version = { path = "../version", version = "=1.14.17" } spl-memo = { version = "=3.0.1", features = ["no-entrypoint"] } thiserror = "1.0" tokio = { version = "1", features = ["full"] } diff --git a/frozen-abi/Cargo.toml b/frozen-abi/Cargo.toml index 2443de3541d534..c8c326e16290ce 100644 --- a/frozen-abi/Cargo.toml +++ b/frozen-abi/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-frozen-abi" -version = "1.14.16" +version = "1.14.17" description = "Solana Frozen ABI" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -20,7 +20,7 @@ serde_bytes = "0.11" serde_derive = "1.0" serde_json = "1.0" sha2 = "0.10.2" -solana-frozen-abi-macro = { path = "macro", version = "=1.14.16" } +solana-frozen-abi-macro = { path = "macro", version = "=1.14.17" } thiserror = "1.0" [target.'cfg(not(target_os = "solana"))'.dependencies] @@ -43,7 +43,7 @@ rand_core = { version = "0.6.3", features = ["alloc", "getrandom", "std"] } subtle = { version = "2.4.1", features = ["default", "i128", "std"] } [target.'cfg(not(target_os = "solana"))'.dev-dependencies] -solana-logger = { path = "../logger", version = "=1.14.16" } +solana-logger = { path = "../logger", version = "=1.14.17" } [build-dependencies] rustc_version = "0.4" diff --git a/frozen-abi/macro/Cargo.toml b/frozen-abi/macro/Cargo.toml index 059420c8db5663..0e6573b0ba9b9e 100644 --- a/frozen-abi/macro/Cargo.toml +++ b/frozen-abi/macro/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-frozen-abi-macro" -version = "1.14.16" +version = "1.14.17" description = "Solana Frozen ABI Macro" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/genesis-utils/Cargo.toml b/genesis-utils/Cargo.toml index 7ec510647f74bd..8ab4cfb61d9a98 100644 --- a/genesis-utils/Cargo.toml +++ b/genesis-utils/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-genesis-utils" -version = "1.14.16" +version = "1.14.17" description = "Solana Genesis Utils" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,9 +10,9 @@ documentation = "https://docs.rs/solana-download-utils" edition = "2021" [dependencies] -solana-download-utils = { path = "../download-utils", version = "=1.14.16" } -solana-runtime = { path = "../runtime", version = "=1.14.16" } -solana-sdk = { path = "../sdk", version = "=1.14.16" } +solana-download-utils = { path = "../download-utils", version = "=1.14.17" } +solana-runtime = { path = "../runtime", version = "=1.14.17" } +solana-sdk = { path = "../sdk", version = "=1.14.17" } [lib] crate-type = ["lib"] diff --git a/genesis/Cargo.toml b/genesis/Cargo.toml index b9e4448967c5db..9b055e32de91e7 100644 --- a/genesis/Cargo.toml +++ b/genesis/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-genesis" description = "Blockchain, Rebuilt for Scale" -version = "1.14.16" +version = "1.14.17" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -15,16 +15,16 @@ clap = "2.33.1" serde = "1.0.138" serde_json = "1.0.81" serde_yaml = "0.8.26" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.16" } -solana-cli-config = { path = "../cli-config", version = "=1.14.16" } -solana-entry = { path = "../entry", version = "=1.14.16" } -solana-ledger = { path = "../ledger", version = "=1.14.16" } -solana-logger = { path = "../logger", version = "=1.14.16" } -solana-runtime = { path = "../runtime", version = "=1.14.16" } -solana-sdk = { path = "../sdk", version = "=1.14.16" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.16" } -solana-version = { path = "../version", version = "=1.14.16" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.16" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.17" } +solana-cli-config = { path = "../cli-config", version = "=1.14.17" } +solana-entry = { path = "../entry", version = "=1.14.17" } +solana-ledger = { path = "../ledger", version = "=1.14.17" } +solana-logger = { path = "../logger", version = "=1.14.17" } +solana-runtime = { path = "../runtime", version = "=1.14.17" } +solana-sdk = { path = "../sdk", version = "=1.14.17" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.17" } +solana-version = { path = "../version", version = "=1.14.17" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.17" } tempfile = "3.3.0" [[bin]] diff --git a/geyser-plugin-interface/Cargo.toml b/geyser-plugin-interface/Cargo.toml index 3dc37df68b596b..fb5332f847f0bd 100644 --- a/geyser-plugin-interface/Cargo.toml +++ b/geyser-plugin-interface/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-geyser-plugin-interface" description = "The Solana Geyser plugin interface." -version = "1.14.16" +version = "1.14.17" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -11,8 +11,8 @@ documentation = "https://docs.rs/solana-geyser-plugin-interface" [dependencies] log = "0.4.17" -solana-sdk = { path = "../sdk", version = "=1.14.16" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.16" } +solana-sdk = { path = "../sdk", version = "=1.14.17" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.17" } thiserror = "1.0.31" [package.metadata.docs.rs] diff --git a/geyser-plugin-manager/Cargo.toml b/geyser-plugin-manager/Cargo.toml index 66a430cdcb863b..b2a316dd1caac0 100644 --- a/geyser-plugin-manager/Cargo.toml +++ b/geyser-plugin-manager/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-geyser-plugin-manager" description = "The Solana Geyser plugin manager." -version = "1.14.16" +version = "1.14.17" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -16,13 +16,13 @@ json5 = "0.4.1" libloading = "0.7.3" log = "0.4.17" serde_json = "1.0.81" -solana-geyser-plugin-interface = { path = "../geyser-plugin-interface", version = "=1.14.16" } -solana-measure = { path = "../measure", version = "=1.14.16" } -solana-metrics = { path = "../metrics", version = "=1.14.16" } -solana-rpc = { path = "../rpc", version = "=1.14.16" } -solana-runtime = { path = "../runtime", version = "=1.14.16" } -solana-sdk = { path = "../sdk", version = "=1.14.16" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.16" } +solana-geyser-plugin-interface = { path = "../geyser-plugin-interface", version = "=1.14.17" } +solana-measure = { path = "../measure", version = "=1.14.17" } +solana-metrics = { path = "../metrics", version = "=1.14.17" } +solana-rpc = { path = "../rpc", version = "=1.14.17" } +solana-runtime = { path = "../runtime", version = "=1.14.17" } +solana-sdk = { path = "../sdk", version = "=1.14.17" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.17" } thiserror = "1.0.31" [package.metadata.docs.rs] diff --git a/gossip/Cargo.toml b/gossip/Cargo.toml index 9b8ac740dcdd64..a539d2df52a8e9 100644 --- a/gossip/Cargo.toml +++ b/gossip/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-gossip" description = "Blockchain, Rebuilt for Scale" -version = "1.14.16" +version = "1.14.17" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -27,24 +27,24 @@ rayon = "1.5.3" serde = "1.0.138" serde_bytes = "0.11" serde_derive = "1.0.103" -solana-bloom = { path = "../bloom", version = "=1.14.16" } -solana-clap-utils = { path = "../clap-utils", version = "=1.14.16" } -solana-client = { path = "../client", version = "=1.14.16" } -solana-entry = { path = "../entry", version = "=1.14.16" } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.16" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.16" } -solana-ledger = { path = "../ledger", version = "=1.14.16" } -solana-logger = { path = "../logger", version = "=1.14.16" } -solana-measure = { path = "../measure", version = "=1.14.16" } -solana-metrics = { path = "../metrics", version = "=1.14.16" } -solana-net-utils = { path = "../net-utils", version = "=1.14.16" } -solana-perf = { path = "../perf", version = "=1.14.16" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.16" } -solana-runtime = { path = "../runtime", version = "=1.14.16" } -solana-sdk = { path = "../sdk", version = "=1.14.16" } -solana-streamer = { path = "../streamer", version = "=1.14.16" } -solana-version = { path = "../version", version = "=1.14.16" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.16" } +solana-bloom = { path = "../bloom", version = "=1.14.17" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.17" } +solana-client = { path = "../client", version = "=1.14.17" } +solana-entry = { path = "../entry", version = "=1.14.17" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.17" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.17" } +solana-ledger = { path = "../ledger", version = "=1.14.17" } +solana-logger = { path = "../logger", version = "=1.14.17" } +solana-measure = { path = "../measure", version = "=1.14.17" } +solana-metrics = { path = "../metrics", version = "=1.14.17" } +solana-net-utils = { path = "../net-utils", version = "=1.14.17" } +solana-perf = { path = "../perf", version = "=1.14.17" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.17" } +solana-runtime = { path = "../runtime", version = "=1.14.17" } +solana-sdk = { path = "../sdk", version = "=1.14.17" } +solana-streamer = { path = "../streamer", version = "=1.14.17" } +solana-version = { path = "../version", version = "=1.14.17" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.17" } thiserror = "1.0" [dev-dependencies] diff --git a/install/Cargo.toml b/install/Cargo.toml index e40239791d74a7..53ab67a40bd97d 100644 --- a/install/Cargo.toml +++ b/install/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-install" description = "The solana cluster software installer" -version = "1.14.16" +version = "1.14.17" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -26,12 +26,12 @@ reqwest = { version = "0.11.11", default-features = false, features = ["blocking semver = "1.0.10" serde = { version = "1.0.138", features = ["derive"] } serde_yaml = "0.8.26" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.16" } -solana-client = { path = "../client", version = "=1.14.16" } -solana-config-program = { path = "../programs/config", version = "=1.14.16" } -solana-logger = { path = "../logger", version = "=1.14.16" } -solana-sdk = { path = "../sdk", version = "=1.14.16" } -solana-version = { path = "../version", version = "=1.14.16" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.17" } +solana-client = { path = "../client", version = "=1.14.17" } +solana-config-program = { path = "../programs/config", version = "=1.14.17" } +solana-logger = { path = "../logger", version = "=1.14.17" } +solana-sdk = { path = "../sdk", version = "=1.14.17" } +solana-version = { path = "../version", version = "=1.14.17" } tar = "0.4.38" tempfile = "3.3.0" url = "2.2.2" diff --git a/keygen/Cargo.toml b/keygen/Cargo.toml index 590f925c6331ec..722000d0a88331 100644 --- a/keygen/Cargo.toml +++ b/keygen/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-keygen" -version = "1.14.16" +version = "1.14.17" description = "Solana key generation utility" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,11 +14,11 @@ bs58 = "0.4.0" clap = { version = "3.1.5", features = ["cargo"] } dirs-next = "2.0.0" num_cpus = "1.13.1" -solana-clap-v3-utils = { path = "../clap-v3-utils", version = "=1.14.16" } -solana-cli-config = { path = "../cli-config", version = "=1.14.16" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.16" } -solana-sdk = { path = "../sdk", version = "=1.14.16" } -solana-version = { path = "../version", version = "=1.14.16" } +solana-clap-v3-utils = { path = "../clap-v3-utils", version = "=1.14.17" } +solana-cli-config = { path = "../cli-config", version = "=1.14.17" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.17" } +solana-sdk = { path = "../sdk", version = "=1.14.17" } +solana-version = { path = "../version", version = "=1.14.17" } tiny-bip39 = "0.8.2" [[bin]] diff --git a/ledger-tool/Cargo.toml b/ledger-tool/Cargo.toml index e0baedec38a671..df469525ee1172 100644 --- a/ledger-tool/Cargo.toml +++ b/ledger-tool/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-ledger-tool" description = "Blockchain, Rebuilt for Scale" -version = "1.14.16" +version = "1.14.17" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -22,20 +22,20 @@ log = { version = "0.4.17" } regex = "1" serde = { version = "1.0", features = ["derive"] } serde_json = "1.0.81" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.16" } -solana-cli-output = { path = "../cli-output", version = "=1.14.16" } -solana-core = { path = "../core", version = "=1.14.16" } -solana-entry = { path = "../entry", version = "=1.14.16" } -solana-ledger = { path = "../ledger", version = "=1.14.16" } -solana-logger = { path = "../logger", version = "=1.14.16" } -solana-measure = { path = "../measure", version = "=1.14.16" } -solana-runtime = { path = "../runtime", version = "=1.14.16" } -solana-sdk = { path = "../sdk", version = "=1.14.16" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.16" } -solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.16" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.16" } -solana-version = { path = "../version", version = "=1.14.16" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.16" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.17" } +solana-cli-output = { path = "../cli-output", version = "=1.14.17" } +solana-core = { path = "../core", version = "=1.14.17" } +solana-entry = { path = "../entry", version = "=1.14.17" } +solana-ledger = { path = "../ledger", version = "=1.14.17" } +solana-logger = { path = "../logger", version = "=1.14.17" } +solana-measure = { path = "../measure", version = "=1.14.17" } +solana-runtime = { path = "../runtime", version = "=1.14.17" } +solana-sdk = { path = "../sdk", version = "=1.14.17" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.17" } +solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.17" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.17" } +solana-version = { path = "../version", version = "=1.14.17" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.17" } tokio = { version = "1", features = ["full"] } [target.'cfg(not(target_env = "msvc"))'.dependencies] diff --git a/ledger/Cargo.toml b/ledger/Cargo.toml index a445a4ed64f166..88add2a08c8ee8 100644 --- a/ledger/Cargo.toml +++ b/ledger/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-ledger" -version = "1.14.16" +version = "1.14.17" description = "Solana ledger" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -35,23 +35,23 @@ reed-solomon-erasure = { version = "6.0.0", features = ["simd-accel"] } serde = "1.0.138" serde_bytes = "0.11.6" sha2 = "0.10.2" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.16" } -solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.16" } -solana-entry = { path = "../entry", version = "=1.14.16" } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.16" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.16" } -solana-measure = { path = "../measure", version = "=1.14.16" } -solana-metrics = { path = "../metrics", version = "=1.14.16" } -solana-perf = { path = "../perf", version = "=1.14.16" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.16" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.16" } -solana-runtime = { path = "../runtime", version = "=1.14.16" } -solana-sdk = { path = "../sdk", version = "=1.14.16" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.16" } -solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.16" } -solana-storage-proto = { path = "../storage-proto", version = "=1.14.16" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.16" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.16" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.17" } +solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.17" } +solana-entry = { path = "../entry", version = "=1.14.17" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.17" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.17" } +solana-measure = { path = "../measure", version = "=1.14.17" } +solana-metrics = { path = "../metrics", version = "=1.14.17" } +solana-perf = { path = "../perf", version = "=1.14.17" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.17" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.17" } +solana-runtime = { path = "../runtime", version = "=1.14.17" } +solana-sdk = { path = "../sdk", version = "=1.14.17" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.17" } +solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.17" } +solana-storage-proto = { path = "../storage-proto", version = "=1.14.17" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.17" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.17" } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } spl-token-2022 = { version = "=0.5.0", features = ["no-entrypoint"] } static_assertions = "1.1.0" @@ -71,8 +71,8 @@ features = ["lz4"] [dev-dependencies] bs58 = "0.4.0" matches = "0.1.9" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.16" } -solana-logger = { path = "../logger", version = "=1.14.16" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.17" } +solana-logger = { path = "../logger", version = "=1.14.17" } test-case = "2.1.0" [build-dependencies] diff --git a/local-cluster/Cargo.toml b/local-cluster/Cargo.toml index d600bed6f9fbca..f22b5a0e3003bc 100644 --- a/local-cluster/Cargo.toml +++ b/local-cluster/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-local-cluster" description = "Blockchain, Rebuilt for Scale" -version = "1.14.16" +version = "1.14.17" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -16,25 +16,25 @@ itertools = "0.10.3" log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" -solana-client = { path = "../client", version = "=1.14.16" } -solana-config-program = { path = "../programs/config", version = "=1.14.16" } -solana-core = { path = "../core", version = "=1.14.16" } -solana-entry = { path = "../entry", version = "=1.14.16" } -solana-gossip = { path = "../gossip", version = "=1.14.16" } -solana-ledger = { path = "../ledger", version = "=1.14.16" } -solana-runtime = { path = "../runtime", version = "=1.14.16" } -solana-sdk = { path = "../sdk", version = "=1.14.16" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.16" } -solana-streamer = { path = "../streamer", version = "=1.14.16" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.16" } +solana-client = { path = "../client", version = "=1.14.17" } +solana-config-program = { path = "../programs/config", version = "=1.14.17" } +solana-core = { path = "../core", version = "=1.14.17" } +solana-entry = { path = "../entry", version = "=1.14.17" } +solana-gossip = { path = "../gossip", version = "=1.14.17" } +solana-ledger = { path = "../ledger", version = "=1.14.17" } +solana-runtime = { path = "../runtime", version = "=1.14.17" } +solana-sdk = { path = "../sdk", version = "=1.14.17" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.17" } +solana-streamer = { path = "../streamer", version = "=1.14.17" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.17" } tempfile = "3.3.0" [dev-dependencies] assert_matches = "1.5.0" gag = "1.0.0" serial_test = "0.8.0" -solana-download-utils = { path = "../download-utils", version = "=1.14.16" } -solana-logger = { path = "../logger", version = "=1.14.16" } +solana-download-utils = { path = "../download-utils", version = "=1.14.17" } +solana-logger = { path = "../logger", version = "=1.14.17" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/log-analyzer/Cargo.toml b/log-analyzer/Cargo.toml index 6e7e30f0a7fdc1..72f99023a1c678 100644 --- a/log-analyzer/Cargo.toml +++ b/log-analyzer/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-log-analyzer" description = "The solana cluster network analysis tool" -version = "1.14.16" +version = "1.14.17" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,8 +14,8 @@ byte-unit = "4.0.14" clap = { version = "3.1.5", features = ["cargo"] } serde = "1.0.138" serde_json = "1.0.81" -solana-logger = { path = "../logger", version = "=1.14.16" } -solana-version = { path = "../version", version = "=1.14.16" } +solana-logger = { path = "../logger", version = "=1.14.17" } +solana-version = { path = "../version", version = "=1.14.17" } [[bin]] name = "solana-log-analyzer" diff --git a/logger/Cargo.toml b/logger/Cargo.toml index 48fc9fcfd95820..3b1102167ccece 100644 --- a/logger/Cargo.toml +++ b/logger/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-logger" -version = "1.14.16" +version = "1.14.17" description = "Solana Logger" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/measure/Cargo.toml b/measure/Cargo.toml index 5af09f6303c131..128b42b91696f9 100644 --- a/measure/Cargo.toml +++ b/measure/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "solana-measure" description = "Blockchain, Rebuilt for Scale" -version = "1.14.16" +version = "1.14.17" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-measure" readme = "../README.md" @@ -12,7 +12,7 @@ edition = "2021" [dependencies] log = "0.4.17" -solana-sdk = { path = "../sdk", version = "=1.14.16" } +solana-sdk = { path = "../sdk", version = "=1.14.17" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/merkle-root-bench/Cargo.toml b/merkle-root-bench/Cargo.toml index 5327c40c7623eb..e3d7e6db2a077b 100644 --- a/merkle-root-bench/Cargo.toml +++ b/merkle-root-bench/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-merkle-root-bench" -version = "1.14.16" +version = "1.14.17" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -11,11 +11,11 @@ publish = false [dependencies] clap = "2.33.1" log = "0.4.17" -solana-logger = { path = "../logger", version = "=1.14.16" } -solana-measure = { path = "../measure", version = "=1.14.16" } -solana-runtime = { path = "../runtime", version = "=1.14.16" } -solana-sdk = { path = "../sdk", version = "=1.14.16" } -solana-version = { path = "../version", version = "=1.14.16" } +solana-logger = { path = "../logger", version = "=1.14.17" } +solana-measure = { path = "../measure", version = "=1.14.17" } +solana-runtime = { path = "../runtime", version = "=1.14.17" } +solana-sdk = { path = "../sdk", version = "=1.14.17" } +solana-version = { path = "../version", version = "=1.14.17" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/merkle-tree/Cargo.toml b/merkle-tree/Cargo.toml index 618752eed0ebb6..efe4ebddf8dec2 100644 --- a/merkle-tree/Cargo.toml +++ b/merkle-tree/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-merkle-tree" -version = "1.14.16" +version = "1.14.17" description = "Solana Merkle Tree" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -11,7 +11,7 @@ edition = "2021" [dependencies] fast-math = "0.1" -solana-program = { path = "../sdk/program", version = "=1.14.16" } +solana-program = { path = "../sdk/program", version = "=1.14.17" } # This can go once the BPF toolchain target Rust 1.42.0+ [target.bpfel-unknown-unknown.dependencies] diff --git a/metrics/Cargo.toml b/metrics/Cargo.toml index 705e3887c19e12..547b59420d421d 100644 --- a/metrics/Cargo.toml +++ b/metrics/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-metrics" -version = "1.14.16" +version = "1.14.17" description = "Solana Metrics" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -15,7 +15,7 @@ gethostname = "0.2.3" lazy_static = "1.4.0" log = "0.4.17" reqwest = { version = "0.11.11", default-features = false, features = ["blocking", "brotli", "deflate", "gzip", "rustls-tls", "json"] } -solana-sdk = { path = "../sdk", version = "=1.14.16" } +solana-sdk = { path = "../sdk", version = "=1.14.17" } [dev-dependencies] env_logger = "0.9.0" diff --git a/net-shaper/Cargo.toml b/net-shaper/Cargo.toml index 0f240cd6bdfd4d..ffb16eedd384cb 100644 --- a/net-shaper/Cargo.toml +++ b/net-shaper/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-net-shaper" description = "The solana cluster network shaping tool" -version = "1.14.16" +version = "1.14.17" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,7 +14,7 @@ clap = { version = "3.1.5", features = ["cargo"] } rand = "0.7.0" serde = { version = "1.0.138", features = ["derive"] } serde_json = "1.0.81" -solana-logger = { path = "../logger", version = "=1.14.16" } +solana-logger = { path = "../logger", version = "=1.14.17" } [[bin]] name = "solana-net-shaper" diff --git a/net-utils/Cargo.toml b/net-utils/Cargo.toml index d747f07ae75266..ba5821aa73dd68 100644 --- a/net-utils/Cargo.toml +++ b/net-utils/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-net-utils" -version = "1.14.16" +version = "1.14.17" description = "Solana Network Utilities" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -19,9 +19,9 @@ rand = "0.7.0" serde = "1.0.138" serde_derive = "1.0.103" socket2 = "0.4.4" -solana-logger = { path = "../logger", version = "=1.14.16" } -solana-sdk = { path = "../sdk", version = "=1.14.16" } -solana-version = { path = "../version", version = "=1.14.16" } +solana-logger = { path = "../logger", version = "=1.14.17" } +solana-sdk = { path = "../sdk", version = "=1.14.17" } +solana-version = { path = "../version", version = "=1.14.17" } tokio = { version = "1", features = ["full"] } url = "2.2.2" diff --git a/notifier/Cargo.toml b/notifier/Cargo.toml index 24d38ccd8bb942..c1f490d83379f1 100644 --- a/notifier/Cargo.toml +++ b/notifier/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-notifier" -version = "1.14.16" +version = "1.14.17" description = "Solana Notifier" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/perf/Cargo.toml b/perf/Cargo.toml index 310a59de9ac6b0..f0a2cbf8bd105e 100644 --- a/perf/Cargo.toml +++ b/perf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-perf" -version = "1.14.16" +version = "1.14.17" description = "Solana Performance APIs" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -22,10 +22,10 @@ log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" serde = "1.0.138" -solana-metrics = { path = "../metrics", version = "=1.14.16" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.16" } -solana-sdk = { path = "../sdk", version = "=1.14.16" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.16" } +solana-metrics = { path = "../metrics", version = "=1.14.17" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.17" } +solana-sdk = { path = "../sdk", version = "=1.14.17" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.17" } [target."cfg(target_os = \"linux\")".dependencies] caps = "0.5.3" @@ -37,7 +37,7 @@ name = "solana_perf" [dev-dependencies] matches = "0.1.9" -solana-logger = { path = "../logger", version = "=1.14.16" } +solana-logger = { path = "../logger", version = "=1.14.17" } [[bench]] name = "sigverify" diff --git a/poh-bench/Cargo.toml b/poh-bench/Cargo.toml index 23b740d296fc08..01638668fca280 100644 --- a/poh-bench/Cargo.toml +++ b/poh-bench/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-poh-bench" -version = "1.14.16" +version = "1.14.17" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,12 +14,12 @@ clap = { version = "3.1.5", features = ["cargo"] } log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" -solana-entry = { path = "../entry", version = "=1.14.16" } -solana-logger = { path = "../logger", version = "=1.14.16" } -solana-measure = { path = "../measure", version = "=1.14.16" } -solana-perf = { path = "../perf", version = "=1.14.16" } -solana-sdk = { path = "../sdk", version = "=1.14.16" } -solana-version = { path = "../version", version = "=1.14.16" } +solana-entry = { path = "../entry", version = "=1.14.17" } +solana-logger = { path = "../logger", version = "=1.14.17" } +solana-measure = { path = "../measure", version = "=1.14.17" } +solana-perf = { path = "../perf", version = "=1.14.17" } +solana-sdk = { path = "../sdk", version = "=1.14.17" } +solana-version = { path = "../version", version = "=1.14.17" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/poh/Cargo.toml b/poh/Cargo.toml index 7349c94dba0cfd..a72f2be21a89cc 100644 --- a/poh/Cargo.toml +++ b/poh/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-poh" -version = "1.14.16" +version = "1.14.17" description = "Solana PoH" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,21 +13,21 @@ edition = "2021" core_affinity = "0.5.10" crossbeam-channel = "0.5" log = "0.4.17" -solana-entry = { path = "../entry", version = "=1.14.16" } -solana-ledger = { path = "../ledger", version = "=1.14.16" } -solana-measure = { path = "../measure", version = "=1.14.16" } -solana-metrics = { path = "../metrics", version = "=1.14.16" } -solana-runtime = { path = "../runtime", version = "=1.14.16" } -solana-sdk = { path = "../sdk", version = "=1.14.16" } -solana-sys-tuner = { path = "../sys-tuner", version = "=1.14.16" } +solana-entry = { path = "../entry", version = "=1.14.17" } +solana-ledger = { path = "../ledger", version = "=1.14.17" } +solana-measure = { path = "../measure", version = "=1.14.17" } +solana-metrics = { path = "../metrics", version = "=1.14.17" } +solana-runtime = { path = "../runtime", version = "=1.14.17" } +solana-sdk = { path = "../sdk", version = "=1.14.17" } +solana-sys-tuner = { path = "../sys-tuner", version = "=1.14.17" } thiserror = "1.0" [dev-dependencies] bincode = "1.3.3" matches = "0.1.9" rand = "0.7.0" -solana-logger = { path = "../logger", version = "=1.14.16" } -solana-perf = { path = "../perf", version = "=1.14.16" } +solana-logger = { path = "../logger", version = "=1.14.17" } +solana-perf = { path = "../perf", version = "=1.14.17" } [lib] crate-type = ["lib"] diff --git a/program-runtime/Cargo.toml b/program-runtime/Cargo.toml index bdd87a7c77b316..b98bb0af3acd25 100644 --- a/program-runtime/Cargo.toml +++ b/program-runtime/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-program-runtime" -version = "1.14.16" +version = "1.14.17" description = "Solana program runtime" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -21,16 +21,16 @@ num-derive = { version = "0.3" } num-traits = { version = "0.2" } rand = "0.7.0" serde = { version = "1.0.129", features = ["derive", "rc"] } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.16" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.16" } -solana-measure = { path = "../measure", version = "=1.14.16" } -solana-metrics = { path = "../metrics", version = "=1.14.16" } -solana-sdk = { path = "../sdk", version = "=1.14.16" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.17" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.17" } +solana-measure = { path = "../measure", version = "=1.14.17" } +solana-metrics = { path = "../metrics", version = "=1.14.17" } +solana-sdk = { path = "../sdk", version = "=1.14.17" } thiserror = "1.0" enum-iterator = "0.8.1" [dev-dependencies] -solana-logger = { path = "../logger", version = "=1.14.16" } +solana-logger = { path = "../logger", version = "=1.14.17" } [lib] crate-type = ["lib"] diff --git a/program-test/Cargo.toml b/program-test/Cargo.toml index 1bf90581ebf8e0..deb7c58424cbfa 100644 --- a/program-test/Cargo.toml +++ b/program-test/Cargo.toml @@ -5,7 +5,7 @@ edition = "2021" license = "Apache-2.0" name = "solana-program-test" repository = "https://github.com/solana-labs/solana" -version = "1.14.16" +version = "1.14.17" [dependencies] assert_matches = "1.5.0" @@ -15,16 +15,16 @@ bincode = "1.3.3" chrono-humanize = "0.2.1" log = "0.4.17" serde = "1.0.138" -solana-banks-client = { path = "../banks-client", version = "=1.14.16" } -solana-banks-server = { path = "../banks-server", version = "=1.14.16" } -solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.16" } -solana-logger = { path = "../logger", version = "=1.14.16" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.16" } -solana-runtime = { path = "../runtime", version = "=1.14.16" } -solana-sdk = { path = "../sdk", version = "=1.14.16" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.16" } +solana-banks-client = { path = "../banks-client", version = "=1.14.17" } +solana-banks-server = { path = "../banks-server", version = "=1.14.17" } +solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.17" } +solana-logger = { path = "../logger", version = "=1.14.17" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.17" } +solana-runtime = { path = "../runtime", version = "=1.14.17" } +solana-sdk = { path = "../sdk", version = "=1.14.17" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.17" } thiserror = "1.0" tokio = { version = "1", features = ["full"] } [dev-dependencies] -solana-stake-program = { path = "../programs/stake", version = "=1.14.16" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.17" } diff --git a/programs/address-lookup-table-tests/Cargo.toml b/programs/address-lookup-table-tests/Cargo.toml index d562c6ee602b1b..d94258a1e4ff1b 100644 --- a/programs/address-lookup-table-tests/Cargo.toml +++ b/programs/address-lookup-table-tests/Cargo.toml @@ -3,7 +3,7 @@ [package] name = "solana-address-lookup-table-program-tests" -version = "1.14.16" +version = "1.14.17" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" @@ -14,9 +14,9 @@ publish = false [dev-dependencies] assert_matches = "1.5.0" bincode = "1.3.3" -solana-address-lookup-table-program = { path = "../address-lookup-table", version = "=1.14.16" } -solana-program-test = { path = "../../program-test", version = "=1.14.16" } -solana-sdk = { path = "../../sdk", version = "=1.14.16" } +solana-address-lookup-table-program = { path = "../address-lookup-table", version = "=1.14.17" } +solana-program-test = { path = "../../program-test", version = "=1.14.17" } +solana-sdk = { path = "../../sdk", version = "=1.14.17" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/address-lookup-table/Cargo.toml b/programs/address-lookup-table/Cargo.toml index 74037b9f80f4ad..5775e96766df36 100644 --- a/programs/address-lookup-table/Cargo.toml +++ b/programs/address-lookup-table/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-address-lookup-table-program" -version = "1.14.16" +version = "1.14.17" description = "Solana address lookup table program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -16,14 +16,14 @@ log = "0.4.17" num-derive = "0.3" num-traits = "0.2" serde = { version = "1.0.138", features = ["derive"] } -solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.16" } -solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.16" } -solana-program = { path = "../../sdk/program", version = "=1.14.16" } +solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.17" } +solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.17" } +solana-program = { path = "../../sdk/program", version = "=1.14.17" } thiserror = "1.0" [target.'cfg(not(target_os = "solana"))'.dependencies] -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.16" } -solana-sdk = { path = "../../sdk", version = "=1.14.16" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.17" } +solana-sdk = { path = "../../sdk", version = "=1.14.17" } [build-dependencies] rustc_version = "0.4" diff --git a/programs/bpf-loader-tests/Cargo.toml b/programs/bpf-loader-tests/Cargo.toml index a2756dcfdd8bbe..a95b94179ccec0 100644 --- a/programs/bpf-loader-tests/Cargo.toml +++ b/programs/bpf-loader-tests/Cargo.toml @@ -3,7 +3,7 @@ [package] name = "solana-bpf-loader-program-tests" -version = "1.14.16" +version = "1.14.17" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" @@ -14,9 +14,9 @@ publish = false [dev-dependencies] assert_matches = "1.5.0" bincode = "1.3.3" -solana-bpf-loader-program = { path = "../bpf_loader", version = "=1.14.16" } -solana-program-test = { path = "../../program-test", version = "=1.14.16" } -solana-sdk = { path = "../../sdk", version = "=1.14.16" } +solana-bpf-loader-program = { path = "../bpf_loader", version = "=1.14.17" } +solana-program-test = { path = "../../program-test", version = "=1.14.17" } +solana-sdk = { path = "../../sdk", version = "=1.14.17" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/bpf/Cargo.lock b/programs/bpf/Cargo.lock index e9750528f37fd3..f0afb8fd53278d 100644 --- a/programs/bpf/Cargo.lock +++ b/programs/bpf/Cargo.lock @@ -4054,7 +4054,7 @@ dependencies = [ [[package]] name = "solana-account-decoder" -version = "1.14.16" +version = "1.14.17" dependencies = [ "Inflector", "base64 0.13.0", @@ -4067,7 +4067,7 @@ dependencies = [ "serde_json", "solana-address-lookup-table-program", "solana-config-program", - "solana-sdk 1.14.16", + "solana-sdk 1.14.17", "solana-vote-program", "spl-token", "spl-token-2022", @@ -4077,7 +4077,7 @@ dependencies = [ [[package]] name = "solana-address-lookup-table-program" -version = "1.14.16" +version = "1.14.17" dependencies = [ "bincode", "bytemuck", @@ -4086,23 +4086,23 @@ dependencies = [ "num-traits", "rustc_version", "serde", - "solana-frozen-abi 1.14.16", - "solana-frozen-abi-macro 1.14.16", - "solana-program 1.14.16", + "solana-frozen-abi 1.14.17", + "solana-frozen-abi-macro 1.14.17", + "solana-program 1.14.17", "solana-program-runtime", - "solana-sdk 1.14.16", + "solana-sdk 1.14.17", "thiserror", ] [[package]] name = "solana-banks-client" -version = "1.14.16" +version = "1.14.17" dependencies = [ "borsh", "futures 0.3.21", "solana-banks-interface", - "solana-program 1.14.16", - "solana-sdk 1.14.16", + "solana-program 1.14.17", + "solana-sdk 1.14.17", "tarpc", "thiserror", "tokio", @@ -4111,16 +4111,16 @@ dependencies = [ [[package]] name = "solana-banks-interface" -version = "1.14.16" +version = "1.14.17" dependencies = [ "serde", - "solana-sdk 1.14.16", + "solana-sdk 1.14.17", "tarpc", ] [[package]] name = "solana-banks-server" -version = "1.14.16" +version = "1.14.17" dependencies = [ "bincode", "crossbeam-channel", @@ -4128,7 +4128,7 @@ dependencies = [ "solana-banks-interface", "solana-client", "solana-runtime", - "solana-sdk 1.14.16", + "solana-sdk 1.14.17", "solana-send-transaction-service", "tarpc", "tokio", @@ -4138,7 +4138,7 @@ dependencies = [ [[package]] name = "solana-bloom" -version = "1.14.16" +version = "1.14.17" dependencies = [ "bv", "fnv", @@ -4148,14 +4148,14 @@ dependencies = [ "rustc_version", "serde", "serde_derive", - "solana-frozen-abi 1.14.16", - "solana-frozen-abi-macro 1.14.16", - "solana-sdk 1.14.16", + "solana-frozen-abi 1.14.17", + "solana-frozen-abi-macro 1.14.17", + "solana-sdk 1.14.17", ] [[package]] name = "solana-bpf-loader-program" -version = "1.14.16" +version = "1.14.17" dependencies = [ "bincode", "byteorder 1.4.3", @@ -4164,15 +4164,15 @@ dependencies = [ "solana-measure", "solana-metrics", "solana-program-runtime", - "solana-sdk 1.14.16", - "solana-zk-token-sdk 1.14.16", + "solana-sdk 1.14.17", + "solana-zk-token-sdk 1.14.17", "solana_rbpf", "thiserror", ] [[package]] name = "solana-bpf-programs" -version = "1.14.16" +version = "1.14.17" dependencies = [ "bincode", "byteorder 1.4.3", @@ -4188,11 +4188,11 @@ dependencies = [ "solana-bpf-rust-realloc-invoke", "solana-cli-output", "solana-ledger", - "solana-logger 1.14.16", + "solana-logger 1.14.17", "solana-measure", "solana-program-runtime", "solana-runtime", - "solana-sdk 1.14.16", + "solana-sdk 1.14.17", "solana-transaction-status", "solana_rbpf", "walkdir", @@ -4200,385 +4200,385 @@ dependencies = [ [[package]] name = "solana-bpf-rust-128bit" -version = "1.14.16" +version = "1.14.17" dependencies = [ "solana-bpf-rust-128bit-dep", - "solana-program 1.14.16", + "solana-program 1.14.17", ] [[package]] name = "solana-bpf-rust-128bit-dep" -version = "1.14.16" +version = "1.14.17" dependencies = [ - "solana-program 1.14.16", + "solana-program 1.14.17", ] [[package]] name = "solana-bpf-rust-alloc" -version = "1.14.16" +version = "1.14.17" dependencies = [ - "solana-program 1.14.16", + "solana-program 1.14.17", ] [[package]] name = "solana-bpf-rust-call-depth" -version = "1.14.16" +version = "1.14.17" dependencies = [ - "solana-program 1.14.16", + "solana-program 1.14.17", ] [[package]] name = "solana-bpf-rust-caller-access" -version = "1.14.16" +version = "1.14.17" dependencies = [ - "solana-program 1.14.16", + "solana-program 1.14.17", ] [[package]] name = "solana-bpf-rust-curve25519" -version = "1.14.16" +version = "1.14.17" dependencies = [ - "solana-program 1.14.16", - "solana-zk-token-sdk 1.14.16", + "solana-program 1.14.17", + "solana-zk-token-sdk 1.14.17", ] [[package]] name = "solana-bpf-rust-custom-heap" -version = "1.14.16" +version = "1.14.17" dependencies = [ - "solana-program 1.14.16", + "solana-program 1.14.17", ] [[package]] name = "solana-bpf-rust-dep-crate" -version = "1.14.16" +version = "1.14.17" dependencies = [ "byteorder 1.4.3", "solana-address-lookup-table-program", - "solana-program 1.14.16", + "solana-program 1.14.17", ] [[package]] name = "solana-bpf-rust-deprecated-loader" -version = "1.14.16" +version = "1.14.17" dependencies = [ - "solana-program 1.14.16", + "solana-program 1.14.17", ] [[package]] name = "solana-bpf-rust-dup-accounts" -version = "1.14.16" +version = "1.14.17" dependencies = [ - "solana-program 1.14.16", + "solana-program 1.14.17", ] [[package]] name = "solana-bpf-rust-error-handling" -version = "1.14.16" +version = "1.14.17" dependencies = [ "num-derive", "num-traits", - "solana-program 1.14.16", + "solana-program 1.14.17", "thiserror", ] [[package]] name = "solana-bpf-rust-external-spend" -version = "1.14.16" +version = "1.14.17" dependencies = [ - "solana-program 1.14.16", + "solana-program 1.14.17", ] [[package]] name = "solana-bpf-rust-finalize" -version = "1.14.16" +version = "1.14.17" dependencies = [ - "solana-program 1.14.16", + "solana-program 1.14.17", ] [[package]] name = "solana-bpf-rust-get-minimum-delegation" -version = "1.14.16" +version = "1.14.17" dependencies = [ - "solana-program 1.14.16", + "solana-program 1.14.17", ] [[package]] name = "solana-bpf-rust-inner_instruction_alignment_check" -version = "1.14.16" +version = "1.14.17" dependencies = [ - "solana-program 1.14.16", + "solana-program 1.14.17", ] [[package]] name = "solana-bpf-rust-instruction-introspection" -version = "1.14.16" +version = "1.14.17" dependencies = [ - "solana-program 1.14.16", + "solana-program 1.14.17", ] [[package]] name = "solana-bpf-rust-invoke" -version = "1.14.16" +version = "1.14.17" dependencies = [ "solana-bpf-rust-invoked", - "solana-program 1.14.16", + "solana-program 1.14.17", ] [[package]] name = "solana-bpf-rust-invoke-and-error" -version = "1.14.16" +version = "1.14.17" dependencies = [ - "solana-program 1.14.16", + "solana-program 1.14.17", ] [[package]] name = "solana-bpf-rust-invoke-and-ok" -version = "1.14.16" +version = "1.14.17" dependencies = [ - "solana-program 1.14.16", + "solana-program 1.14.17", ] [[package]] name = "solana-bpf-rust-invoke-and-return" -version = "1.14.16" +version = "1.14.17" dependencies = [ - "solana-program 1.14.16", + "solana-program 1.14.17", ] [[package]] name = "solana-bpf-rust-invoked" -version = "1.14.16" +version = "1.14.17" dependencies = [ - "solana-program 1.14.16", + "solana-program 1.14.17", ] [[package]] name = "solana-bpf-rust-iter" -version = "1.14.16" +version = "1.14.17" dependencies = [ - "solana-program 1.14.16", + "solana-program 1.14.17", ] [[package]] name = "solana-bpf-rust-log-data" -version = "1.14.16" +version = "1.14.17" dependencies = [ - "solana-program 1.14.16", + "solana-program 1.14.17", ] [[package]] name = "solana-bpf-rust-many-args" -version = "1.14.16" +version = "1.14.17" dependencies = [ "solana-bpf-rust-many-args-dep", - "solana-program 1.14.16", + "solana-program 1.14.17", ] [[package]] name = "solana-bpf-rust-many-args-dep" -version = "1.14.16" +version = "1.14.17" dependencies = [ - "solana-program 1.14.16", + "solana-program 1.14.17", ] [[package]] name = "solana-bpf-rust-mem" -version = "1.14.16" +version = "1.14.17" dependencies = [ - "solana-program 1.14.16", + "solana-program 1.14.17", "solana-program-runtime", "solana-program-test", - "solana-sdk 1.14.16", + "solana-sdk 1.14.17", ] [[package]] name = "solana-bpf-rust-membuiltins" -version = "1.14.16" +version = "1.14.17" dependencies = [ "solana-bpf-rust-mem", - "solana-program 1.14.16", + "solana-program 1.14.17", ] [[package]] name = "solana-bpf-rust-noop" -version = "1.14.16" +version = "1.14.17" dependencies = [ - "solana-program 1.14.16", + "solana-program 1.14.17", ] [[package]] name = "solana-bpf-rust-panic" -version = "1.14.16" +version = "1.14.17" dependencies = [ - "solana-program 1.14.16", + "solana-program 1.14.17", ] [[package]] name = "solana-bpf-rust-param-passing" -version = "1.14.16" +version = "1.14.17" dependencies = [ "solana-bpf-rust-param-passing-dep", - "solana-program 1.14.16", + "solana-program 1.14.17", ] [[package]] name = "solana-bpf-rust-param-passing-dep" -version = "1.14.16" +version = "1.14.17" dependencies = [ - "solana-program 1.14.16", + "solana-program 1.14.17", ] [[package]] name = "solana-bpf-rust-rand" -version = "1.14.16" +version = "1.14.17" dependencies = [ "getrandom 0.1.14", "rand 0.7.3", - "solana-program 1.14.16", + "solana-program 1.14.17", ] [[package]] name = "solana-bpf-rust-realloc" -version = "1.14.16" +version = "1.14.17" dependencies = [ - "solana-program 1.14.16", + "solana-program 1.14.17", ] [[package]] name = "solana-bpf-rust-realloc-invoke" -version = "1.14.16" +version = "1.14.17" dependencies = [ "solana-bpf-rust-realloc", - "solana-program 1.14.16", + "solana-program 1.14.17", ] [[package]] name = "solana-bpf-rust-ro-account_modify" -version = "1.14.16" +version = "1.14.17" dependencies = [ - "solana-program 1.14.16", + "solana-program 1.14.17", ] [[package]] name = "solana-bpf-rust-ro-modify" -version = "1.14.16" +version = "1.14.17" dependencies = [ - "solana-program 1.14.16", + "solana-program 1.14.17", ] [[package]] name = "solana-bpf-rust-sanity" -version = "1.14.16" +version = "1.14.17" dependencies = [ - "solana-program 1.14.16", + "solana-program 1.14.17", "solana-program-runtime", "solana-program-test", - "solana-sdk 1.14.16", + "solana-sdk 1.14.17", ] [[package]] name = "solana-bpf-rust-secp256k1-recover" -version = "1.14.16" +version = "1.14.17" dependencies = [ "libsecp256k1 0.7.0", - "solana-program 1.14.16", + "solana-program 1.14.17", ] [[package]] name = "solana-bpf-rust-sha" -version = "1.14.16" +version = "1.14.17" dependencies = [ "blake3", - "solana-program 1.14.16", + "solana-program 1.14.17", ] [[package]] name = "solana-bpf-rust-sibling-instructions" -version = "1.14.16" +version = "1.14.17" dependencies = [ - "solana-program 1.14.16", + "solana-program 1.14.17", ] [[package]] name = "solana-bpf-rust-sibling_inner-instructions" -version = "1.14.16" +version = "1.14.17" dependencies = [ - "solana-program 1.14.16", + "solana-program 1.14.17", ] [[package]] name = "solana-bpf-rust-simulation" -version = "1.14.16" +version = "1.14.17" dependencies = [ - "solana-logger 1.14.16", - "solana-program 1.14.16", + "solana-logger 1.14.17", + "solana-program 1.14.17", "solana-program-test", - "solana-sdk 1.14.16", + "solana-sdk 1.14.17", "solana-validator", ] [[package]] name = "solana-bpf-rust-spoof1" -version = "1.14.16" +version = "1.14.17" dependencies = [ - "solana-program 1.14.16", + "solana-program 1.14.17", ] [[package]] name = "solana-bpf-rust-spoof1-system" -version = "1.14.16" +version = "1.14.17" dependencies = [ - "solana-program 1.14.16", + "solana-program 1.14.17", ] [[package]] name = "solana-bpf-rust-sysvar" -version = "1.14.16" +version = "1.14.17" dependencies = [ - "solana-program 1.14.16", + "solana-program 1.14.17", "solana-program-runtime", "solana-program-test", - "solana-sdk 1.14.16", + "solana-sdk 1.14.17", ] [[package]] name = "solana-bpf-rust-upgradeable" -version = "1.14.16" +version = "1.14.17" dependencies = [ - "solana-program 1.14.16", + "solana-program 1.14.17", ] [[package]] name = "solana-bpf-rust-upgraded" -version = "1.14.16" +version = "1.14.17" dependencies = [ - "solana-program 1.14.16", + "solana-program 1.14.17", ] [[package]] name = "solana-bucket-map" -version = "1.14.16" +version = "1.14.17" dependencies = [ "log", "memmap2", "modular-bitfield", "rand 0.7.3", "solana-measure", - "solana-sdk 1.14.16", + "solana-sdk 1.14.17", "tempfile", ] [[package]] name = "solana-clap-utils" -version = "1.14.16" +version = "1.14.17" dependencies = [ "chrono", "clap 2.33.3", "rpassword", "solana-perf", "solana-remote-wallet", - "solana-sdk 1.14.16", + "solana-sdk 1.14.17", "thiserror", "tiny-bip39", "uriparse", @@ -4587,7 +4587,7 @@ dependencies = [ [[package]] name = "solana-cli-config" -version = "1.14.16" +version = "1.14.17" dependencies = [ "dirs-next", "lazy_static", @@ -4595,13 +4595,13 @@ dependencies = [ "serde_derive", "serde_yaml", "solana-clap-utils", - "solana-sdk 1.14.16", + "solana-sdk 1.14.17", "url 2.2.2", ] [[package]] name = "solana-cli-output" -version = "1.14.16" +version = "1.14.17" dependencies = [ "Inflector", "base64 0.13.0", @@ -4618,7 +4618,7 @@ dependencies = [ "solana-clap-utils", "solana-cli-config", "solana-client", - "solana-sdk 1.14.16", + "solana-sdk 1.14.17", "solana-transaction-status", "solana-vote-program", "spl-memo", @@ -4626,7 +4626,7 @@ dependencies = [ [[package]] name = "solana-client" -version = "1.14.16" +version = "1.14.17" dependencies = [ "async-mutex", "async-trait", @@ -4662,7 +4662,7 @@ dependencies = [ "solana-measure", "solana-metrics", "solana-net-utils", - "solana-sdk 1.14.16", + "solana-sdk 1.14.17", "solana-streamer", "solana-transaction-status", "solana-version", @@ -4678,27 +4678,27 @@ dependencies = [ [[package]] name = "solana-compute-budget-program" -version = "1.14.16" +version = "1.14.17" dependencies = [ "solana-program-runtime", - "solana-sdk 1.14.16", + "solana-sdk 1.14.17", ] [[package]] name = "solana-config-program" -version = "1.14.16" +version = "1.14.17" dependencies = [ "bincode", "chrono", "serde", "serde_derive", "solana-program-runtime", - "solana-sdk 1.14.16", + "solana-sdk 1.14.17", ] [[package]] name = "solana-core" -version = "1.14.16" +version = "1.14.17" dependencies = [ "ahash", "base64 0.13.0", @@ -4727,8 +4727,8 @@ dependencies = [ "solana-bloom", "solana-client", "solana-entry", - "solana-frozen-abi 1.14.16", - "solana-frozen-abi-macro 1.14.16", + "solana-frozen-abi 1.14.17", + "solana-frozen-abi-macro 1.14.17", "solana-geyser-plugin-manager", "solana-gossip", "solana-ledger", @@ -4741,7 +4741,7 @@ dependencies = [ "solana-rayon-threadlimit", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.16", + "solana-sdk 1.14.17", "solana-send-transaction-service", "solana-streamer", "solana-transaction-status", @@ -4757,19 +4757,19 @@ dependencies = [ [[package]] name = "solana-download-utils" -version = "1.14.16" +version = "1.14.17" dependencies = [ "console", "indicatif", "log", "reqwest", "solana-runtime", - "solana-sdk 1.14.16", + "solana-sdk 1.14.17", ] [[package]] name = "solana-entry" -version = "1.14.16" +version = "1.14.17" dependencies = [ "bincode", "crossbeam-channel", @@ -4785,12 +4785,12 @@ dependencies = [ "solana-metrics", "solana-perf", "solana-rayon-threadlimit", - "solana-sdk 1.14.16", + "solana-sdk 1.14.17", ] [[package]] name = "solana-faucet" -version = "1.14.16" +version = "1.14.17" dependencies = [ "bincode", "byteorder 1.4.3", @@ -4801,9 +4801,9 @@ dependencies = [ "serde_derive", "solana-clap-utils", "solana-cli-config", - "solana-logger 1.14.16", + "solana-logger 1.14.17", "solana-metrics", - "solana-sdk 1.14.16", + "solana-sdk 1.14.17", "solana-version", "spl-memo", "thiserror", @@ -4846,7 +4846,7 @@ dependencies = [ [[package]] name = "solana-frozen-abi" -version = "1.14.16" +version = "1.14.17" dependencies = [ "ahash", "blake3", @@ -4871,7 +4871,7 @@ dependencies = [ "serde_derive", "serde_json", "sha2 0.10.2", - "solana-frozen-abi-macro 1.14.16", + "solana-frozen-abi-macro 1.14.17", "subtle", "thiserror", ] @@ -4890,7 +4890,7 @@ dependencies = [ [[package]] name = "solana-frozen-abi-macro" -version = "1.14.16" +version = "1.14.17" dependencies = [ "proc-macro2 1.0.41", "quote 1.0.18", @@ -4900,26 +4900,26 @@ dependencies = [ [[package]] name = "solana-genesis-utils" -version = "1.14.16" +version = "1.14.17" dependencies = [ "solana-download-utils", "solana-runtime", - "solana-sdk 1.14.16", + "solana-sdk 1.14.17", ] [[package]] name = "solana-geyser-plugin-interface" -version = "1.14.16" +version = "1.14.17" dependencies = [ "log", - "solana-sdk 1.14.16", + "solana-sdk 1.14.17", "solana-transaction-status", "thiserror", ] [[package]] name = "solana-geyser-plugin-manager" -version = "1.14.16" +version = "1.14.17" dependencies = [ "bs58", "crossbeam-channel", @@ -4932,14 +4932,14 @@ dependencies = [ "solana-metrics", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.16", + "solana-sdk 1.14.17", "solana-transaction-status", "thiserror", ] [[package]] name = "solana-gossip" -version = "1.14.16" +version = "1.14.17" dependencies = [ "bincode", "bv", @@ -4963,17 +4963,17 @@ dependencies = [ "solana-clap-utils", "solana-client", "solana-entry", - "solana-frozen-abi 1.14.16", - "solana-frozen-abi-macro 1.14.16", + "solana-frozen-abi 1.14.17", + "solana-frozen-abi-macro 1.14.17", "solana-ledger", - "solana-logger 1.14.16", + "solana-logger 1.14.17", "solana-measure", "solana-metrics", "solana-net-utils", "solana-perf", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.14.16", + "solana-sdk 1.14.17", "solana-streamer", "solana-version", "solana-vote-program", @@ -4982,7 +4982,7 @@ dependencies = [ [[package]] name = "solana-ledger" -version = "1.14.16" +version = "1.14.17" dependencies = [ "assert_matches", "bincode", @@ -5014,15 +5014,15 @@ dependencies = [ "solana-account-decoder", "solana-bpf-loader-program", "solana-entry", - "solana-frozen-abi 1.14.16", - "solana-frozen-abi-macro 1.14.16", + "solana-frozen-abi 1.14.17", + "solana-frozen-abi-macro 1.14.17", "solana-measure", "solana-metrics", "solana-perf", "solana-program-runtime", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.14.16", + "solana-sdk 1.14.17", "solana-stake-program", "solana-storage-bigtable", "solana-storage-proto", @@ -5051,7 +5051,7 @@ dependencies = [ [[package]] name = "solana-logger" -version = "1.14.16" +version = "1.14.17" dependencies = [ "env_logger", "lazy_static", @@ -5060,36 +5060,36 @@ dependencies = [ [[package]] name = "solana-measure" -version = "1.14.16" +version = "1.14.17" dependencies = [ "log", - "solana-sdk 1.14.16", + "solana-sdk 1.14.17", ] [[package]] name = "solana-merkle-tree" -version = "1.14.16" +version = "1.14.17" dependencies = [ "fast-math", "matches", - "solana-program 1.14.16", + "solana-program 1.14.17", ] [[package]] name = "solana-metrics" -version = "1.14.16" +version = "1.14.17" dependencies = [ "crossbeam-channel", "gethostname", "lazy_static", "log", "reqwest", - "solana-sdk 1.14.16", + "solana-sdk 1.14.17", ] [[package]] name = "solana-net-utils" -version = "1.14.16" +version = "1.14.17" dependencies = [ "bincode", "clap 3.1.6", @@ -5100,8 +5100,8 @@ dependencies = [ "serde", "serde_derive", "socket2", - "solana-logger 1.14.16", - "solana-sdk 1.14.16", + "solana-logger 1.14.17", + "solana-sdk 1.14.17", "solana-version", "tokio", "url 2.2.2", @@ -5109,7 +5109,7 @@ dependencies = [ [[package]] name = "solana-perf" -version = "1.14.16" +version = "1.14.17" dependencies = [ "ahash", "bincode", @@ -5128,13 +5128,13 @@ dependencies = [ "serde", "solana-metrics", "solana-rayon-threadlimit", - "solana-sdk 1.14.16", + "solana-sdk 1.14.17", "solana-vote-program", ] [[package]] name = "solana-poh" -version = "1.14.16" +version = "1.14.17" dependencies = [ "core_affinity", "crossbeam-channel", @@ -5144,7 +5144,7 @@ dependencies = [ "solana-measure", "solana-metrics", "solana-runtime", - "solana-sdk 1.14.16", + "solana-sdk 1.14.17", "solana-sys-tuner", "thiserror", ] @@ -5200,7 +5200,7 @@ dependencies = [ [[package]] name = "solana-program" -version = "1.14.16" +version = "1.14.17" dependencies = [ "base64 0.13.0", "bincode", @@ -5236,9 +5236,9 @@ dependencies = [ "serde_json", "sha2 0.10.2", "sha3 0.10.1", - "solana-frozen-abi 1.14.16", - "solana-frozen-abi-macro 1.14.16", - "solana-sdk-macro 1.14.16", + "solana-frozen-abi 1.14.17", + "solana-frozen-abi-macro 1.14.17", + "solana-sdk-macro 1.14.17", "thiserror", "tiny-bip39", "wasm-bindgen", @@ -5247,7 +5247,7 @@ dependencies = [ [[package]] name = "solana-program-runtime" -version = "1.14.16" +version = "1.14.17" dependencies = [ "base64 0.13.0", "bincode", @@ -5262,17 +5262,17 @@ dependencies = [ "rand 0.7.3", "rustc_version", "serde", - "solana-frozen-abi 1.14.16", - "solana-frozen-abi-macro 1.14.16", + "solana-frozen-abi 1.14.17", + "solana-frozen-abi-macro 1.14.17", "solana-measure", "solana-metrics", - "solana-sdk 1.14.16", + "solana-sdk 1.14.17", "thiserror", ] [[package]] name = "solana-program-test" -version = "1.14.16" +version = "1.14.17" dependencies = [ "assert_matches", "async-trait", @@ -5284,10 +5284,10 @@ dependencies = [ "solana-banks-client", "solana-banks-server", "solana-bpf-loader-program", - "solana-logger 1.14.16", + "solana-logger 1.14.17", "solana-program-runtime", "solana-runtime", - "solana-sdk 1.14.16", + "solana-sdk 1.14.17", "solana-vote-program", "thiserror", "tokio", @@ -5295,7 +5295,7 @@ dependencies = [ [[package]] name = "solana-rayon-threadlimit" -version = "1.14.16" +version = "1.14.17" dependencies = [ "lazy_static", "num_cpus", @@ -5303,7 +5303,7 @@ dependencies = [ [[package]] name = "solana-remote-wallet" -version = "1.14.16" +version = "1.14.17" dependencies = [ "console", "dialoguer", @@ -5313,14 +5313,14 @@ dependencies = [ "parking_lot 0.12.1", "qstring", "semver", - "solana-sdk 1.14.16", + "solana-sdk 1.14.17", "thiserror", "uriparse", ] [[package]] name = "solana-rpc" -version = "1.14.16" +version = "1.14.17" dependencies = [ "base64 0.13.0", "bincode", @@ -5353,7 +5353,7 @@ dependencies = [ "solana-poh", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.14.16", + "solana-sdk 1.14.17", "solana-send-transaction-service", "solana-stake-program", "solana-storage-bigtable", @@ -5371,7 +5371,7 @@ dependencies = [ [[package]] name = "solana-runtime" -version = "1.14.16" +version = "1.14.17" dependencies = [ "arrayref", "bincode", @@ -5408,17 +5408,17 @@ dependencies = [ "solana-bucket-map", "solana-compute-budget-program", "solana-config-program", - "solana-frozen-abi 1.14.16", - "solana-frozen-abi-macro 1.14.16", + "solana-frozen-abi 1.14.17", + "solana-frozen-abi-macro 1.14.17", "solana-measure", "solana-metrics", "solana-program-runtime", "solana-rayon-threadlimit", - "solana-sdk 1.14.16", + "solana-sdk 1.14.17", "solana-stake-program", "solana-vote-program", "solana-zk-token-proof-program", - "solana-zk-token-sdk 1.14.16", + "solana-zk-token-sdk 1.14.17", "strum", "strum_macros", "symlink", @@ -5481,7 +5481,7 @@ dependencies = [ [[package]] name = "solana-sdk" -version = "1.14.16" +version = "1.14.17" dependencies = [ "assert_matches", "base64 0.13.0", @@ -5518,11 +5518,11 @@ dependencies = [ "serde_json", "sha2 0.10.2", "sha3 0.10.1", - "solana-frozen-abi 1.14.16", - "solana-frozen-abi-macro 1.14.16", - "solana-logger 1.14.16", - "solana-program 1.14.16", - "solana-sdk-macro 1.14.16", + "solana-frozen-abi 1.14.17", + "solana-frozen-abi-macro 1.14.17", + "solana-logger 1.14.17", + "solana-program 1.14.17", + "solana-sdk-macro 1.14.17", "thiserror", "uriparse", "wasm-bindgen", @@ -5543,7 +5543,7 @@ dependencies = [ [[package]] name = "solana-sdk-macro" -version = "1.14.16" +version = "1.14.17" dependencies = [ "bs58", "proc-macro2 1.0.41", @@ -5554,7 +5554,7 @@ dependencies = [ [[package]] name = "solana-send-transaction-service" -version = "1.14.16" +version = "1.14.17" dependencies = [ "crossbeam-channel", "log", @@ -5562,12 +5562,12 @@ dependencies = [ "solana-measure", "solana-metrics", "solana-runtime", - "solana-sdk 1.14.16", + "solana-sdk 1.14.17", ] [[package]] name = "solana-stake-program" -version = "1.14.16" +version = "1.14.17" dependencies = [ "bincode", "log", @@ -5577,18 +5577,18 @@ dependencies = [ "serde", "serde_derive", "solana-config-program", - "solana-frozen-abi 1.14.16", - "solana-frozen-abi-macro 1.14.16", + "solana-frozen-abi 1.14.17", + "solana-frozen-abi-macro 1.14.17", "solana-metrics", "solana-program-runtime", - "solana-sdk 1.14.16", + "solana-sdk 1.14.17", "solana-vote-program", "thiserror", ] [[package]] name = "solana-storage-bigtable" -version = "1.14.16" +version = "1.14.17" dependencies = [ "backoff", "bincode", @@ -5609,7 +5609,7 @@ dependencies = [ "serde_derive", "smpl_jwt", "solana-metrics", - "solana-sdk 1.14.16", + "solana-sdk 1.14.17", "solana-storage-proto", "solana-transaction-status", "thiserror", @@ -5620,7 +5620,7 @@ dependencies = [ [[package]] name = "solana-storage-proto" -version = "1.14.16" +version = "1.14.17" dependencies = [ "bincode", "bs58", @@ -5628,14 +5628,14 @@ dependencies = [ "protobuf-src", "serde", "solana-account-decoder", - "solana-sdk 1.14.16", + "solana-sdk 1.14.17", "solana-transaction-status", "tonic-build 0.8.0", ] [[package]] name = "solana-streamer" -version = "1.14.16" +version = "1.14.17" dependencies = [ "crossbeam-channel", "futures-util", @@ -5654,7 +5654,7 @@ dependencies = [ "rustls 0.20.6", "solana-metrics", "solana-perf", - "solana-sdk 1.14.16", + "solana-sdk 1.14.17", "thiserror", "tokio", "x509-parser", @@ -5662,13 +5662,13 @@ dependencies = [ [[package]] name = "solana-sys-tuner" -version = "1.14.16" +version = "1.14.17" dependencies = [ "clap 2.33.3", "libc", "log", "nix", - "solana-logger 1.14.16", + "solana-logger 1.14.17", "solana-version", "sysctl", "unix_socket2", @@ -5677,7 +5677,7 @@ dependencies = [ [[package]] name = "solana-test-validator" -version = "1.14.16" +version = "1.14.17" dependencies = [ "base64 0.13.0", "log", @@ -5688,20 +5688,20 @@ dependencies = [ "solana-core", "solana-gossip", "solana-ledger", - "solana-logger 1.14.16", + "solana-logger 1.14.17", "solana-net-utils", "solana-program-runtime", "solana-program-test", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.16", + "solana-sdk 1.14.17", "solana-streamer", "tokio", ] [[package]] name = "solana-transaction-status" -version = "1.14.16" +version = "1.14.17" dependencies = [ "Inflector", "base64 0.13.0", @@ -5717,7 +5717,7 @@ dependencies = [ "solana-address-lookup-table-program", "solana-measure", "solana-metrics", - "solana-sdk 1.14.16", + "solana-sdk 1.14.17", "solana-vote-program", "spl-associated-token-account", "spl-memo", @@ -5728,7 +5728,7 @@ dependencies = [ [[package]] name = "solana-validator" -version = "1.14.16" +version = "1.14.17" dependencies = [ "chrono", "clap 2.33.3", @@ -5759,14 +5759,14 @@ dependencies = [ "solana-genesis-utils", "solana-gossip", "solana-ledger", - "solana-logger 1.14.16", + "solana-logger 1.14.17", "solana-metrics", "solana-net-utils", "solana-perf", "solana-poh", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.16", + "solana-sdk 1.14.17", "solana-send-transaction-service", "solana-storage-bigtable", "solana-streamer", @@ -5779,21 +5779,21 @@ dependencies = [ [[package]] name = "solana-version" -version = "1.14.16" +version = "1.14.17" dependencies = [ "log", "rustc_version", "semver", "serde", "serde_derive", - "solana-frozen-abi 1.14.16", - "solana-frozen-abi-macro 1.14.16", - "solana-sdk 1.14.16", + "solana-frozen-abi 1.14.17", + "solana-frozen-abi-macro 1.14.17", + "solana-sdk 1.14.17", ] [[package]] name = "solana-vote-program" -version = "1.14.16" +version = "1.14.17" dependencies = [ "bincode", "log", @@ -5802,25 +5802,25 @@ dependencies = [ "rustc_version", "serde", "serde_derive", - "solana-frozen-abi 1.14.16", - "solana-frozen-abi-macro 1.14.16", + "solana-frozen-abi 1.14.17", + "solana-frozen-abi-macro 1.14.17", "solana-metrics", "solana-program-runtime", - "solana-sdk 1.14.16", + "solana-sdk 1.14.17", "thiserror", ] [[package]] name = "solana-zk-token-proof-program" -version = "1.14.16" +version = "1.14.17" dependencies = [ "bytemuck", "getrandom 0.1.14", "num-derive", "num-traits", "solana-program-runtime", - "solana-sdk 1.14.16", - "solana-zk-token-sdk 1.14.16", + "solana-sdk 1.14.17", + "solana-zk-token-sdk 1.14.17", ] [[package]] @@ -5856,7 +5856,7 @@ dependencies = [ [[package]] name = "solana-zk-token-sdk" -version = "1.14.16" +version = "1.14.17" dependencies = [ "aes-gcm-siv", "arrayref", @@ -5876,8 +5876,8 @@ dependencies = [ "serde", "serde_json", "sha3 0.9.1", - "solana-program 1.14.16", - "solana-sdk 1.14.16", + "solana-program 1.14.17", + "solana-sdk 1.14.17", "subtle", "thiserror", "zeroize", diff --git a/programs/bpf/Cargo.toml b/programs/bpf/Cargo.toml index 11fb3519415897..25558a994d8265 100644 --- a/programs/bpf/Cargo.toml +++ b/programs/bpf/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "solana-bpf-programs" description = "Blockchain, Rebuilt for Scale" -version = "1.14.16" +version = "1.14.17" documentation = "https://docs.rs/solana" homepage = "https://solana.com/" readme = "README.md" @@ -26,22 +26,22 @@ itertools = "0.10.1" log = "0.4.11" miow = "0.3.6" net2 = "0.2.37" -solana-account-decoder = { path = "../../account-decoder", version = "=1.14.16" } -solana-bpf-loader-program = { path = "../bpf_loader", version = "=1.14.16" } -solana-bpf-rust-invoke = { path = "rust/invoke", version = "=1.14.16" } -solana-bpf-rust-realloc = { path = "rust/realloc", version = "=1.14.16" } -solana-bpf-rust-realloc-invoke = { path = "rust/realloc_invoke", version = "=1.14.16" } -solana-cli-output = { path = "../../cli-output", version = "=1.14.16" } -solana-logger = { path = "../../logger", version = "=1.14.16" } -solana-measure = { path = "../../measure", version = "=1.14.16" } -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.16" } -solana-runtime = { path = "../../runtime", version = "=1.14.16" } -solana-sdk = { path = "../../sdk", version = "=1.14.16" } -solana-transaction-status = { path = "../../transaction-status", version = "=1.14.16" } +solana-account-decoder = { path = "../../account-decoder", version = "=1.14.17" } +solana-bpf-loader-program = { path = "../bpf_loader", version = "=1.14.17" } +solana-bpf-rust-invoke = { path = "rust/invoke", version = "=1.14.17" } +solana-bpf-rust-realloc = { path = "rust/realloc", version = "=1.14.17" } +solana-bpf-rust-realloc-invoke = { path = "rust/realloc_invoke", version = "=1.14.17" } +solana-cli-output = { path = "../../cli-output", version = "=1.14.17" } +solana-logger = { path = "../../logger", version = "=1.14.17" } +solana-measure = { path = "../../measure", version = "=1.14.17" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.17" } +solana-runtime = { path = "../../runtime", version = "=1.14.17" } +solana-sdk = { path = "../../sdk", version = "=1.14.17" } +solana-transaction-status = { path = "../../transaction-status", version = "=1.14.17" } solana_rbpf = "=0.2.31" [dev-dependencies] -solana-ledger = { path = "../../ledger", version = "=1.14.16" } +solana-ledger = { path = "../../ledger", version = "=1.14.17" } [[bench]] name = "bpf_loader" diff --git a/programs/bpf/rust/128bit/Cargo.toml b/programs/bpf/rust/128bit/Cargo.toml index a82c84353ecfad..f440d02467bed9 100644 --- a/programs/bpf/rust/128bit/Cargo.toml +++ b/programs/bpf/rust/128bit/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-128bit" -version = "1.14.16" +version = "1.14.17" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ documentation = "https://docs.rs/solana-bpf-rust-128bit" edition = "2021" [dependencies] -solana-bpf-rust-128bit-dep = { path = "../128bit_dep", version = "=1.14.16" } -solana-program = { path = "../../../../sdk/program", version = "=1.14.16" } +solana-bpf-rust-128bit-dep = { path = "../128bit_dep", version = "=1.14.17" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.17" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/128bit_dep/Cargo.toml b/programs/bpf/rust/128bit_dep/Cargo.toml index 28ae95aed8aca9..7cdc0bb63c0c7b 100644 --- a/programs/bpf/rust/128bit_dep/Cargo.toml +++ b/programs/bpf/rust/128bit_dep/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-128bit-dep" -version = "1.14.16" +version = "1.14.17" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-128bit-dep" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.16" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.17" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/bpf/rust/alloc/Cargo.toml b/programs/bpf/rust/alloc/Cargo.toml index 1420908168c1d8..fd0922abd266ef 100644 --- a/programs/bpf/rust/alloc/Cargo.toml +++ b/programs/bpf/rust/alloc/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-alloc" -version = "1.14.16" +version = "1.14.17" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-alloc" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.16" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.17" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/call_depth/Cargo.toml b/programs/bpf/rust/call_depth/Cargo.toml index 9631f2b8ed73ab..3140724e67b100 100644 --- a/programs/bpf/rust/call_depth/Cargo.toml +++ b/programs/bpf/rust/call_depth/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-call-depth" -version = "1.14.16" +version = "1.14.17" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-call-depth" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.16" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.17" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/caller_access/Cargo.toml b/programs/bpf/rust/caller_access/Cargo.toml index 50119c2e91315f..182b2cf0904494 100644 --- a/programs/bpf/rust/caller_access/Cargo.toml +++ b/programs/bpf/rust/caller_access/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-caller-access" -version = "1.14.16" +version = "1.14.17" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-caller-access" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.16" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.17" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/curve25519/Cargo.toml b/programs/bpf/rust/curve25519/Cargo.toml index bcb2a682663341..19875f5ca28b39 100644 --- a/programs/bpf/rust/curve25519/Cargo.toml +++ b/programs/bpf/rust/curve25519/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-curve25519" -version = "1.14.16" +version = "1.14.17" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ documentation = "https://docs.rs/solana-bpf-rust-zktoken_crypto" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.16" } -solana-zk-token-sdk = { path = "../../../../zk-token-sdk", version = "=1.14.16" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.17" } +solana-zk-token-sdk = { path = "../../../../zk-token-sdk", version = "=1.14.17" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/custom_heap/Cargo.toml b/programs/bpf/rust/custom_heap/Cargo.toml index d74cbe54d2cea7..2ecd8fd1d70877 100644 --- a/programs/bpf/rust/custom_heap/Cargo.toml +++ b/programs/bpf/rust/custom_heap/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-custom-heap" -version = "1.14.16" +version = "1.14.17" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-custom-heap" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.16" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.17" } [features] default = ["custom-heap"] diff --git a/programs/bpf/rust/dep_crate/Cargo.toml b/programs/bpf/rust/dep_crate/Cargo.toml index 7557cca6037387..cf818db117d1d7 100644 --- a/programs/bpf/rust/dep_crate/Cargo.toml +++ b/programs/bpf/rust/dep_crate/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-dep-crate" -version = "1.14.16" +version = "1.14.17" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,8 +12,8 @@ edition = "2021" [dependencies] byteorder = { version = "1", default-features = false } # list of crates which must be buildable for bpf programs -solana-address-lookup-table-program = { path = "../../../../programs/address-lookup-table", version = "=1.14.16" } -solana-program = { path = "../../../../sdk/program", version = "=1.14.16" } +solana-address-lookup-table-program = { path = "../../../../programs/address-lookup-table", version = "=1.14.17" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.17" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/deprecated_loader/Cargo.toml b/programs/bpf/rust/deprecated_loader/Cargo.toml index 8090b0c6a8d7c5..6d420765b71019 100644 --- a/programs/bpf/rust/deprecated_loader/Cargo.toml +++ b/programs/bpf/rust/deprecated_loader/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-deprecated-loader" -version = "1.14.16" +version = "1.14.17" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-deprecated-loader" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.16" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.17" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/dup_accounts/Cargo.toml b/programs/bpf/rust/dup_accounts/Cargo.toml index 7fd9b72a6bc7d8..e8170522771b79 100644 --- a/programs/bpf/rust/dup_accounts/Cargo.toml +++ b/programs/bpf/rust/dup_accounts/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-dup-accounts" -version = "1.14.16" +version = "1.14.17" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-dup-accounts" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.16" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.17" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/error_handling/Cargo.toml b/programs/bpf/rust/error_handling/Cargo.toml index 4770642b471e1a..452dab1fc0eb1e 100644 --- a/programs/bpf/rust/error_handling/Cargo.toml +++ b/programs/bpf/rust/error_handling/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-error-handling" -version = "1.14.16" +version = "1.14.17" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,7 +12,7 @@ edition = "2021" [dependencies] num-derive = "0.3" num-traits = "0.2" -solana-program = { path = "../../../../sdk/program", version = "=1.14.16" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.17" } thiserror = "1.0" [lib] diff --git a/programs/bpf/rust/external_spend/Cargo.toml b/programs/bpf/rust/external_spend/Cargo.toml index e71809611ef851..46187cbc953ab7 100644 --- a/programs/bpf/rust/external_spend/Cargo.toml +++ b/programs/bpf/rust/external_spend/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-external-spend" -version = "1.14.16" +version = "1.14.17" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-external-spend" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.16" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.17" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/finalize/Cargo.toml b/programs/bpf/rust/finalize/Cargo.toml index 4de041b9343702..55aaa2ae6f73f8 100644 --- a/programs/bpf/rust/finalize/Cargo.toml +++ b/programs/bpf/rust/finalize/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-finalize" -version = "1.14.16" +version = "1.14.17" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-finalize" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.16" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.17" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/get_minimum_delegation/Cargo.toml b/programs/bpf/rust/get_minimum_delegation/Cargo.toml index 142565d1dd4f3f..98c56b46df2826 100644 --- a/programs/bpf/rust/get_minimum_delegation/Cargo.toml +++ b/programs/bpf/rust/get_minimum_delegation/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-get-minimum-delegation" -version = "1.14.16" +version = "1.14.17" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-get-minimum-delegation" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.16" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.17" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/inner_instruction_alignment_check/Cargo.toml b/programs/bpf/rust/inner_instruction_alignment_check/Cargo.toml index c06a5bf96573b5..8bc7e891b13f30 100644 --- a/programs/bpf/rust/inner_instruction_alignment_check/Cargo.toml +++ b/programs/bpf/rust/inner_instruction_alignment_check/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-inner_instruction_alignment_check" -version = "1.14.16" +version = "1.14.17" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-inner_instruction_alignment_che edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.16" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.17" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/instruction_introspection/Cargo.toml b/programs/bpf/rust/instruction_introspection/Cargo.toml index 536dde9f20cead..53fc750721666f 100644 --- a/programs/bpf/rust/instruction_introspection/Cargo.toml +++ b/programs/bpf/rust/instruction_introspection/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-instruction-introspection" -version = "1.14.16" +version = "1.14.17" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-instruction-introspection" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.16" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.17" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/invoke/Cargo.toml b/programs/bpf/rust/invoke/Cargo.toml index 4c27a2155ccc04..3750b86fc6ab20 100644 --- a/programs/bpf/rust/invoke/Cargo.toml +++ b/programs/bpf/rust/invoke/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-invoke" -version = "1.14.16" +version = "1.14.17" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -15,7 +15,7 @@ program = [] [dependencies] solana-bpf-rust-invoked = { path = "../invoked", default-features = false } -solana-program = { path = "../../../../sdk/program", version = "=1.14.16" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.17" } [lib] crate-type = ["lib", "cdylib"] diff --git a/programs/bpf/rust/invoke_and_error/Cargo.toml b/programs/bpf/rust/invoke_and_error/Cargo.toml index fdaef66ab707e8..3fc9887df8fd06 100644 --- a/programs/bpf/rust/invoke_and_error/Cargo.toml +++ b/programs/bpf/rust/invoke_and_error/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-invoke-and-error" -version = "1.14.16" +version = "1.14.17" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-invoke-and-error" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.16" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.17" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/invoke_and_ok/Cargo.toml b/programs/bpf/rust/invoke_and_ok/Cargo.toml index 45a37f46eb2fae..63305be3135760 100644 --- a/programs/bpf/rust/invoke_and_ok/Cargo.toml +++ b/programs/bpf/rust/invoke_and_ok/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-invoke-and-ok" -version = "1.14.16" +version = "1.14.17" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-invoke-and-ok" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.16" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.17" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/invoke_and_return/Cargo.toml b/programs/bpf/rust/invoke_and_return/Cargo.toml index d7d075d2f1ae76..da560933dbf6c0 100644 --- a/programs/bpf/rust/invoke_and_return/Cargo.toml +++ b/programs/bpf/rust/invoke_and_return/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-invoke-and-return" -version = "1.14.16" +version = "1.14.17" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-invoke-and-return" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.16" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.17" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/invoked/Cargo.toml b/programs/bpf/rust/invoked/Cargo.toml index 8ba7cad54580e3..34a6ef069b1f85 100644 --- a/programs/bpf/rust/invoked/Cargo.toml +++ b/programs/bpf/rust/invoked/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-invoked" -version = "1.14.16" +version = "1.14.17" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,7 +14,7 @@ default = ["program"] program = [] [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.16" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.17" } [lib] crate-type = ["lib", "cdylib"] diff --git a/programs/bpf/rust/iter/Cargo.toml b/programs/bpf/rust/iter/Cargo.toml index 5f823984405158..deba8f759285d1 100644 --- a/programs/bpf/rust/iter/Cargo.toml +++ b/programs/bpf/rust/iter/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-iter" -version = "1.14.16" +version = "1.14.17" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-iter" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.16" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.17" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/log_data/Cargo.toml b/programs/bpf/rust/log_data/Cargo.toml index 9499340762034c..dad5c004d29e78 100644 --- a/programs/bpf/rust/log_data/Cargo.toml +++ b/programs/bpf/rust/log_data/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-log-data" -version = "1.14.16" +version = "1.14.17" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-log-data" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.16" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.17" } [features] default = ["program"] diff --git a/programs/bpf/rust/many_args/Cargo.toml b/programs/bpf/rust/many_args/Cargo.toml index 1ecff634d49393..4c135aeb5c837d 100644 --- a/programs/bpf/rust/many_args/Cargo.toml +++ b/programs/bpf/rust/many_args/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-many-args" -version = "1.14.16" +version = "1.14.17" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ documentation = "https://docs.rs/solana-bpf-rust-many-args" edition = "2021" [dependencies] -solana-bpf-rust-many-args-dep = { path = "../many_args_dep", version = "=1.14.16" } -solana-program = { path = "../../../../sdk/program", version = "=1.14.16" } +solana-bpf-rust-many-args-dep = { path = "../many_args_dep", version = "=1.14.17" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.17" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/many_args_dep/Cargo.toml b/programs/bpf/rust/many_args_dep/Cargo.toml index 4f7b865345c668..56cd86721cd01d 100644 --- a/programs/bpf/rust/many_args_dep/Cargo.toml +++ b/programs/bpf/rust/many_args_dep/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-many-args-dep" -version = "1.14.16" +version = "1.14.17" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-many-args-dep" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.16" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.17" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/bpf/rust/mem/Cargo.toml b/programs/bpf/rust/mem/Cargo.toml index 15f71f245adb20..a201bb3e17c41e 100644 --- a/programs/bpf/rust/mem/Cargo.toml +++ b/programs/bpf/rust/mem/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-mem" -version = "1.14.16" +version = "1.14.17" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,12 +13,12 @@ edition = "2021" no-entrypoint = [] [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.16" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.17" } [dev-dependencies] -solana-program-runtime = { path = "../../../../program-runtime", version = "=1.14.16" } -solana-program-test = { path = "../../../../program-test", version = "=1.14.16" } -solana-sdk = { path = "../../../../sdk", version = "=1.14.16" } +solana-program-runtime = { path = "../../../../program-runtime", version = "=1.14.17" } +solana-program-test = { path = "../../../../program-test", version = "=1.14.17" } +solana-sdk = { path = "../../../../sdk", version = "=1.14.17" } [lib] crate-type = ["cdylib", "lib"] diff --git a/programs/bpf/rust/membuiltins/Cargo.toml b/programs/bpf/rust/membuiltins/Cargo.toml index 7a5b1765456a3a..e718718f186b91 100644 --- a/programs/bpf/rust/membuiltins/Cargo.toml +++ b/programs/bpf/rust/membuiltins/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-membuiltins" -version = "1.14.16" +version = "1.14.17" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ documentation = "https://docs.rs/solana-bpf-rust-mem" edition = "2021" [dependencies] -solana-bpf-rust-mem = { path = "../mem", version = "=1.14.16", features = [ "no-entrypoint" ] } -solana-program = { path = "../../../../sdk/program", version = "=1.14.16" } +solana-bpf-rust-mem = { path = "../mem", version = "=1.14.17", features = [ "no-entrypoint" ] } +solana-program = { path = "../../../../sdk/program", version = "=1.14.17" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/noop/Cargo.toml b/programs/bpf/rust/noop/Cargo.toml index 8be1cd04c7d84e..551c3bbc493537 100644 --- a/programs/bpf/rust/noop/Cargo.toml +++ b/programs/bpf/rust/noop/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-noop" -version = "1.14.16" +version = "1.14.17" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-noop" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.16" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.17" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/panic/Cargo.toml b/programs/bpf/rust/panic/Cargo.toml index 6bc48a6714e3a8..9879eeb1d06f1d 100644 --- a/programs/bpf/rust/panic/Cargo.toml +++ b/programs/bpf/rust/panic/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-panic" -version = "1.14.16" +version = "1.14.17" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-panic" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.16" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.17" } [features] default = ["custom-panic"] diff --git a/programs/bpf/rust/param_passing/Cargo.toml b/programs/bpf/rust/param_passing/Cargo.toml index f02a9748f51233..2d205e87a98f12 100644 --- a/programs/bpf/rust/param_passing/Cargo.toml +++ b/programs/bpf/rust/param_passing/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-param-passing" -version = "1.14.16" +version = "1.14.17" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ documentation = "https://docs.rs/solana-bpf-rust-param-passing" edition = "2021" [dependencies] -solana-bpf-rust-param-passing-dep = { path = "../param_passing_dep", version = "=1.14.16" } -solana-program = { path = "../../../../sdk/program", version = "=1.14.16" } +solana-bpf-rust-param-passing-dep = { path = "../param_passing_dep", version = "=1.14.17" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.17" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/param_passing_dep/Cargo.toml b/programs/bpf/rust/param_passing_dep/Cargo.toml index b981df8751a4ff..ba6a35395f7450 100644 --- a/programs/bpf/rust/param_passing_dep/Cargo.toml +++ b/programs/bpf/rust/param_passing_dep/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-param-passing-dep" -version = "1.14.16" +version = "1.14.17" description = "Solana BPF program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-param-passing-dep" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.16" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.17" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/bpf/rust/rand/Cargo.toml b/programs/bpf/rust/rand/Cargo.toml index 73968ee43f0470..cff79a7151dcfa 100644 --- a/programs/bpf/rust/rand/Cargo.toml +++ b/programs/bpf/rust/rand/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-rand" -version = "1.14.16" +version = "1.14.17" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,7 +12,7 @@ edition = "2021" [dependencies] getrandom = { version = "0.1.14", features = ["dummy"] } rand = "0.7" -solana-program = { path = "../../../../sdk/program", version = "=1.14.16" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.17" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/realloc/Cargo.toml b/programs/bpf/rust/realloc/Cargo.toml index 89293ea3ce34bb..6047c717780800 100644 --- a/programs/bpf/rust/realloc/Cargo.toml +++ b/programs/bpf/rust/realloc/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-realloc" -version = "1.14.16" +version = "1.14.17" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,7 +14,7 @@ default = ["program"] program = [] [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.16" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.17" } [lib] crate-type = ["lib", "cdylib"] diff --git a/programs/bpf/rust/realloc_invoke/Cargo.toml b/programs/bpf/rust/realloc_invoke/Cargo.toml index 1707cc584e1f36..75ddccdae83e51 100644 --- a/programs/bpf/rust/realloc_invoke/Cargo.toml +++ b/programs/bpf/rust/realloc_invoke/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-realloc-invoke" -version = "1.14.16" +version = "1.14.17" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,8 +14,8 @@ default = ["program"] program = [] [dependencies] -solana-bpf-rust-realloc = { path = "../realloc", version = "=1.14.16", default-features = false } -solana-program = { path = "../../../../sdk/program", version = "=1.14.16" } +solana-bpf-rust-realloc = { path = "../realloc", version = "=1.14.17", default-features = false } +solana-program = { path = "../../../../sdk/program", version = "=1.14.17" } [lib] crate-type = ["lib", "cdylib"] diff --git a/programs/bpf/rust/ro_account_modify/Cargo.toml b/programs/bpf/rust/ro_account_modify/Cargo.toml index e23d9d5c11ac6d..3c8fa2eac2a8e2 100644 --- a/programs/bpf/rust/ro_account_modify/Cargo.toml +++ b/programs/bpf/rust/ro_account_modify/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-ro-account_modify" -version = "1.14.16" +version = "1.14.17" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-ro-modify" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.16" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.17" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/ro_modify/Cargo.toml b/programs/bpf/rust/ro_modify/Cargo.toml index 004964a62716fc..0ead8d15a7fd86 100644 --- a/programs/bpf/rust/ro_modify/Cargo.toml +++ b/programs/bpf/rust/ro_modify/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-ro-modify" -version = "1.14.16" +version = "1.14.17" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-ro-modify" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.16" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.17" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/sanity/Cargo.toml b/programs/bpf/rust/sanity/Cargo.toml index 1e5f9dfdff3302..283689ff727c2f 100644 --- a/programs/bpf/rust/sanity/Cargo.toml +++ b/programs/bpf/rust/sanity/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-sanity" -version = "1.14.16" +version = "1.14.17" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,12 +13,12 @@ edition = "2021" test-bpf = [] [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.16" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.17" } [dev-dependencies] -solana-program-runtime = { path = "../../../../program-runtime", version = "=1.14.16" } -solana-program-test = { path = "../../../../program-test", version = "=1.14.16" } -solana-sdk = { path = "../../../../sdk", version = "=1.14.16" } +solana-program-runtime = { path = "../../../../program-runtime", version = "=1.14.17" } +solana-program-test = { path = "../../../../program-test", version = "=1.14.17" } +solana-sdk = { path = "../../../../sdk", version = "=1.14.17" } [lib] crate-type = ["cdylib", "lib"] diff --git a/programs/bpf/rust/secp256k1_recover/Cargo.toml b/programs/bpf/rust/secp256k1_recover/Cargo.toml index 45d375199830f9..bce41fe45d3790 100644 --- a/programs/bpf/rust/secp256k1_recover/Cargo.toml +++ b/programs/bpf/rust/secp256k1_recover/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-secp256k1-recover" -version = "1.14.16" +version = "1.14.17" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -11,7 +11,7 @@ edition = "2021" [dependencies] libsecp256k1 = { version = "0.7.0", default-features = false } -solana-program = { path = "../../../../sdk/program", version = "=1.14.16" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.17" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/sha/Cargo.toml b/programs/bpf/rust/sha/Cargo.toml index 4b3feff82c8447..062a07d4691ab2 100644 --- a/programs/bpf/rust/sha/Cargo.toml +++ b/programs/bpf/rust/sha/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-sha" -version = "1.14.16" +version = "1.14.17" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -11,7 +11,7 @@ edition = "2021" [dependencies] blake3 = "1.0.0" -solana-program = { path = "../../../../sdk/program", version = "=1.14.16" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.17" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/sibling_inner_instruction/Cargo.toml b/programs/bpf/rust/sibling_inner_instruction/Cargo.toml index 08d20332d3f2bf..57b876aff24971 100644 --- a/programs/bpf/rust/sibling_inner_instruction/Cargo.toml +++ b/programs/bpf/rust/sibling_inner_instruction/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-sibling_inner-instructions" -version = "1.14.16" +version = "1.14.17" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-log-data" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.16" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.17" } [features] default = ["program"] diff --git a/programs/bpf/rust/sibling_instruction/Cargo.toml b/programs/bpf/rust/sibling_instruction/Cargo.toml index 487a975ac16758..084e4858eb2a4a 100644 --- a/programs/bpf/rust/sibling_instruction/Cargo.toml +++ b/programs/bpf/rust/sibling_instruction/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-sibling-instructions" -version = "1.14.16" +version = "1.14.17" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-log-data" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.16" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.17" } [features] default = ["program"] diff --git a/programs/bpf/rust/simulation/Cargo.toml b/programs/bpf/rust/simulation/Cargo.toml index 72c9761fb2aa25..a0ae8014f9e7c5 100644 --- a/programs/bpf/rust/simulation/Cargo.toml +++ b/programs/bpf/rust/simulation/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-simulation" -version = "1.14.16" +version = "1.14.17" description = "Solana BPF Program Simulation Differences" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,13 +13,13 @@ edition = "2021" test-bpf = [] [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.16" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.17" } [dev-dependencies] -solana-logger = { path = "../../../../logger", version = "=1.14.16" } -solana-program-test = { path = "../../../../program-test", version = "=1.14.16" } -solana-sdk = { path = "../../../../sdk", version = "=1.14.16" } -solana-validator = { path = "../../../../validator", version = "=1.14.16" } +solana-logger = { path = "../../../../logger", version = "=1.14.17" } +solana-program-test = { path = "../../../../program-test", version = "=1.14.17" } +solana-sdk = { path = "../../../../sdk", version = "=1.14.17" } +solana-validator = { path = "../../../../validator", version = "=1.14.17" } [lib] crate-type = ["cdylib", "lib"] diff --git a/programs/bpf/rust/spoof1/Cargo.toml b/programs/bpf/rust/spoof1/Cargo.toml index 153af259abd917..d8a5dadb17e953 100644 --- a/programs/bpf/rust/spoof1/Cargo.toml +++ b/programs/bpf/rust/spoof1/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-spoof1" -version = "1.14.16" +version = "1.14.17" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-spoof1" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.16" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.17" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/spoof1_system/Cargo.toml b/programs/bpf/rust/spoof1_system/Cargo.toml index 32ce39dc4e65e3..1757f9f82082f5 100644 --- a/programs/bpf/rust/spoof1_system/Cargo.toml +++ b/programs/bpf/rust/spoof1_system/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-spoof1-system" -version = "1.14.16" +version = "1.14.17" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-spoof1-system" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.16" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.17" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/sysvar/Cargo.toml b/programs/bpf/rust/sysvar/Cargo.toml index 2d10d8a68de47c..1fc3f6802dbf5b 100644 --- a/programs/bpf/rust/sysvar/Cargo.toml +++ b/programs/bpf/rust/sysvar/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-sysvar" -version = "1.14.16" +version = "1.14.17" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,12 +10,12 @@ documentation = "https://docs.rs/solana-bpf-rust-sysvar" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.16" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.17" } [dev-dependencies] -solana-program-runtime = { path = "../../../../program-runtime", version = "=1.14.16" } -solana-program-test = { path = "../../../../program-test", version = "=1.14.16" } -solana-sdk = { path = "../../../../sdk", version = "=1.14.16" } +solana-program-runtime = { path = "../../../../program-runtime", version = "=1.14.17" } +solana-program-test = { path = "../../../../program-test", version = "=1.14.17" } +solana-sdk = { path = "../../../../sdk", version = "=1.14.17" } [lib] crate-type = ["cdylib", "lib"] diff --git a/programs/bpf/rust/upgradeable/Cargo.toml b/programs/bpf/rust/upgradeable/Cargo.toml index 2a770fafafeb85..8c7180705ba97f 100644 --- a/programs/bpf/rust/upgradeable/Cargo.toml +++ b/programs/bpf/rust/upgradeable/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-upgradeable" -version = "1.14.16" +version = "1.14.17" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-upgradeable" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.16" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.17" } [lib] name = "solana_bpf_rust_upgradeable" diff --git a/programs/bpf/rust/upgraded/Cargo.toml b/programs/bpf/rust/upgraded/Cargo.toml index 6f55d2005da6d5..c37877f19d0a1d 100644 --- a/programs/bpf/rust/upgraded/Cargo.toml +++ b/programs/bpf/rust/upgraded/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-upgraded" -version = "1.14.16" +version = "1.14.17" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-upgraded" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.16" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.17" } [lib] name = "solana_bpf_rust_upgraded" diff --git a/programs/bpf_loader/Cargo.toml b/programs/bpf_loader/Cargo.toml index 2c5266d8404338..c54ddbc5fbb3da 100644 --- a/programs/bpf_loader/Cargo.toml +++ b/programs/bpf_loader/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-loader-program" -version = "1.14.16" +version = "1.14.17" description = "Solana BPF loader" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,17 +14,17 @@ bincode = "1.3.3" byteorder = "1.4.3" libsecp256k1 = "0.6.0" log = "0.4.17" -solana-measure = { path = "../../measure", version = "=1.14.16" } -solana-metrics = { path = "../../metrics", version = "=1.14.16" } -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.16" } -solana-sdk = { path = "../../sdk", version = "=1.14.16" } -solana-zk-token-sdk = { path = "../../zk-token-sdk", version = "=1.14.16" } +solana-measure = { path = "../../measure", version = "=1.14.17" } +solana-metrics = { path = "../../metrics", version = "=1.14.17" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.17" } +solana-sdk = { path = "../../sdk", version = "=1.14.17" } +solana-zk-token-sdk = { path = "../../zk-token-sdk", version = "=1.14.17" } solana_rbpf = "=0.2.31" thiserror = "1.0" [dev-dependencies] rand = "0.7.3" -solana-runtime = { path = "../../runtime", version = "=1.14.16" } +solana-runtime = { path = "../../runtime", version = "=1.14.17" } [lib] crate-type = ["lib"] diff --git a/programs/bpf_loader/gen-syscall-list/Cargo.toml b/programs/bpf_loader/gen-syscall-list/Cargo.toml index 90c6e2c3505e3e..fe3d7952161edd 100644 --- a/programs/bpf_loader/gen-syscall-list/Cargo.toml +++ b/programs/bpf_loader/gen-syscall-list/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "gen-syscall-list" -version = "1.14.16" +version = "1.14.17" edition = "2021" license = "Apache-2.0" publish = false diff --git a/programs/compute-budget/Cargo.toml b/programs/compute-budget/Cargo.toml index 6cbf5f850a1c5c..a7f03312646069 100644 --- a/programs/compute-budget/Cargo.toml +++ b/programs/compute-budget/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "solana-compute-budget-program" description = "Solana Compute Budget program" -version = "1.14.16" +version = "1.14.17" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-compute-budget-program" repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ license = "Apache-2.0" edition = "2021" [dependencies] -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.16" } -solana-sdk = { path = "../../sdk", version = "=1.14.16" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.17" } +solana-sdk = { path = "../../sdk", version = "=1.14.17" } [lib] crate-type = ["lib"] diff --git a/programs/config/Cargo.toml b/programs/config/Cargo.toml index 7b8d8ad4dcc3f2..0c1366a3821fc1 100644 --- a/programs/config/Cargo.toml +++ b/programs/config/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-config-program" -version = "1.14.16" +version = "1.14.17" description = "Solana Config program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,11 +14,11 @@ bincode = "1.3.3" chrono = { version = "0.4.11", features = ["serde"] } serde = "1.0.138" serde_derive = "1.0.103" -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.16" } -solana-sdk = { path = "../../sdk", version = "=1.14.16" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.17" } +solana-sdk = { path = "../../sdk", version = "=1.14.17" } [dev-dependencies] -solana-logger = { path = "../../logger", version = "=1.14.16" } +solana-logger = { path = "../../logger", version = "=1.14.17" } [lib] crate-type = ["lib"] diff --git a/programs/ed25519-tests/Cargo.toml b/programs/ed25519-tests/Cargo.toml index 599da086a82cf4..1b47f092cbb95c 100644 --- a/programs/ed25519-tests/Cargo.toml +++ b/programs/ed25519-tests/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-ed25519-program-tests" -version = "1.14.16" +version = "1.14.17" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" @@ -12,8 +12,8 @@ publish = false assert_matches = "1.5.0" ed25519-dalek = "=1.0.1" rand = "0.7.0" -solana-program-test = { path = "../../program-test", version = "=1.14.16" } -solana-sdk = { path = "../../sdk", version = "=1.14.16" } +solana-program-test = { path = "../../program-test", version = "=1.14.17" } +solana-sdk = { path = "../../sdk", version = "=1.14.17" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/stake/Cargo.toml b/programs/stake/Cargo.toml index 15cd117869c696..7d85b0a1e23d2b 100644 --- a/programs/stake/Cargo.toml +++ b/programs/stake/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-stake-program" -version = "1.14.16" +version = "1.14.17" description = "Solana Stake program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -16,19 +16,19 @@ num-derive = "0.3" num-traits = "0.2" serde = "1.0.138" serde_derive = "1.0.103" -solana-config-program = { path = "../config", version = "=1.14.16" } -solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.16" } -solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.16" } -solana-metrics = { path = "../../metrics", version = "=1.14.16" } -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.16" } -solana-sdk = { path = "../../sdk", version = "=1.14.16" } -solana-vote-program = { path = "../vote", version = "=1.14.16" } +solana-config-program = { path = "../config", version = "=1.14.17" } +solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.17" } +solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.17" } +solana-metrics = { path = "../../metrics", version = "=1.14.17" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.17" } +solana-sdk = { path = "../../sdk", version = "=1.14.17" } +solana-vote-program = { path = "../vote", version = "=1.14.17" } thiserror = "1.0" [dev-dependencies] assert_matches = "1.5.0" proptest = "1.0" -solana-logger = { path = "../../logger", version = "=1.14.16" } +solana-logger = { path = "../../logger", version = "=1.14.17" } test-case = "2.1.0" [build-dependencies] diff --git a/programs/vote/Cargo.toml b/programs/vote/Cargo.toml index 68f20ea4614080..07b75c7ab5f0fd 100644 --- a/programs/vote/Cargo.toml +++ b/programs/vote/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-vote-program" -version = "1.14.16" +version = "1.14.17" description = "Solana Vote program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -16,17 +16,17 @@ num-derive = "0.3" num-traits = "0.2" serde = "1.0.138" serde_derive = "1.0.103" -solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.16" } -solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.16" } -solana-metrics = { path = "../../metrics", version = "=1.14.16" } -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.16" } -solana-sdk = { path = "../../sdk", version = "=1.14.16" } +solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.17" } +solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.17" } +solana-metrics = { path = "../../metrics", version = "=1.14.17" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.17" } +solana-sdk = { path = "../../sdk", version = "=1.14.17" } thiserror = "1.0" [dev-dependencies] itertools = "0.10.3" rand = "0.7.0" -solana-logger = { path = "../../logger", version = "=1.14.16" } +solana-logger = { path = "../../logger", version = "=1.14.17" } test-case = "2.1.0" [build-dependencies] diff --git a/programs/zk-token-proof/Cargo.toml b/programs/zk-token-proof/Cargo.toml index 5d2a0965a3ad79..307889e0cb480c 100644 --- a/programs/zk-token-proof/Cargo.toml +++ b/programs/zk-token-proof/Cargo.toml @@ -3,7 +3,7 @@ name = "solana-zk-token-proof-program" description = "Solana Zk Token Proof Program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" -version = "1.14.16" +version = "1.14.17" license = "Apache-2.0" edition = "2021" @@ -12,6 +12,6 @@ bytemuck = { version = "1.11.0", features = ["derive"] } getrandom = { version = "0.1", features = ["dummy"] } num-derive = "0.3" num-traits = "0.2" -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.16" } -solana-sdk = { path = "../../sdk", version = "=1.14.16" } -solana-zk-token-sdk = { path = "../../zk-token-sdk", version = "=1.14.16" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.17" } +solana-sdk = { path = "../../sdk", version = "=1.14.17" } +solana-zk-token-sdk = { path = "../../zk-token-sdk", version = "=1.14.17" } diff --git a/rayon-threadlimit/Cargo.toml b/rayon-threadlimit/Cargo.toml index ece740b02a5067..78fb5a2e67de2f 100644 --- a/rayon-threadlimit/Cargo.toml +++ b/rayon-threadlimit/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-rayon-threadlimit" -version = "1.14.16" +version = "1.14.17" description = "solana-rayon-threadlimit" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-rayon-threadlimit" diff --git a/rbpf-cli/Cargo.toml b/rbpf-cli/Cargo.toml index f9f7481ddfbc98..0ce29ea751ae0c 100644 --- a/rbpf-cli/Cargo.toml +++ b/rbpf-cli/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "rbpf-cli" -version = "1.14.16" +version = "1.14.17" description = "CLI to test and analyze eBPF programs" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/rbpf" @@ -13,8 +13,8 @@ publish = false clap = { version = "3.1.5", features = ["cargo"] } serde = "1.0.138" serde_json = "1.0.81" -solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.16" } -solana-logger = { path = "../logger", version = "=1.14.16" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.16" } -solana-sdk = { path = "../sdk", version = "=1.14.16" } +solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.17" } +solana-logger = { path = "../logger", version = "=1.14.17" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.17" } +solana-sdk = { path = "../sdk", version = "=1.14.17" } solana_rbpf = "=0.2.31" diff --git a/remote-wallet/Cargo.toml b/remote-wallet/Cargo.toml index 229a2f448d45e5..00931e1678c428 100644 --- a/remote-wallet/Cargo.toml +++ b/remote-wallet/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-remote-wallet" description = "Blockchain, Rebuilt for Scale" -version = "1.14.16" +version = "1.14.17" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -19,7 +19,7 @@ num-traits = { version = "0.2" } parking_lot = "0.12" qstring = "0.7.2" semver = "1.0" -solana-sdk = { path = "../sdk", version = "=1.14.16" } +solana-sdk = { path = "../sdk", version = "=1.14.17" } thiserror = "1.0" uriparse = "0.6.4" diff --git a/rpc-test/Cargo.toml b/rpc-test/Cargo.toml index a2f84d76daa05e..dda1d33bb29a09 100644 --- a/rpc-test/Cargo.toml +++ b/rpc-test/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-rpc-test" -version = "1.14.16" +version = "1.14.17" description = "Solana RPC Test" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -19,17 +19,17 @@ log = "0.4.17" reqwest = { version = "0.11.11", default-features = false, features = ["blocking", "brotli", "deflate", "gzip", "rustls-tls", "json"] } serde = "1.0.138" serde_json = "1.0.81" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.16" } -solana-client = { path = "../client", version = "=1.14.16" } -solana-rpc = { path = "../rpc", version = "=1.14.16" } -solana-sdk = { path = "../sdk", version = "=1.14.16" } -solana-streamer = { path = "../streamer", version = "=1.14.16" } -solana-test-validator = { path = "../test-validator", version = "=1.14.16" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.16" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.17" } +solana-client = { path = "../client", version = "=1.14.17" } +solana-rpc = { path = "../rpc", version = "=1.14.17" } +solana-sdk = { path = "../sdk", version = "=1.14.17" } +solana-streamer = { path = "../streamer", version = "=1.14.17" } +solana-test-validator = { path = "../test-validator", version = "=1.14.17" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.17" } tokio = { version = "~1.14.1", features = ["full"] } [dev-dependencies] -solana-logger = { path = "../logger", version = "=1.14.16" } +solana-logger = { path = "../logger", version = "=1.14.17" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/rpc/Cargo.toml b/rpc/Cargo.toml index 8551bc839b56c2..40568b7d183d2d 100644 --- a/rpc/Cargo.toml +++ b/rpc/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-rpc" -version = "1.14.16" +version = "1.14.17" description = "Solana RPC" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -29,26 +29,26 @@ serde = "1.0.138" serde_derive = "1.0.103" serde_json = "1.0.81" soketto = "0.7" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.16" } -solana-client = { path = "../client", version = "=1.14.16" } -solana-entry = { path = "../entry", version = "=1.14.16" } -solana-faucet = { path = "../faucet", version = "=1.14.16" } -solana-gossip = { path = "../gossip", version = "=1.14.16" } -solana-ledger = { path = "../ledger", version = "=1.14.16" } -solana-measure = { path = "../measure", version = "=1.14.16" } -solana-metrics = { path = "../metrics", version = "=1.14.16" } -solana-perf = { path = "../perf", version = "=1.14.16" } -solana-poh = { path = "../poh", version = "=1.14.16" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.16" } -solana-runtime = { path = "../runtime", version = "=1.14.16" } -solana-sdk = { path = "../sdk", version = "=1.14.16" } -solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.16" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.16" } -solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.16" } -solana-streamer = { path = "../streamer", version = "=1.14.16" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.16" } -solana-version = { path = "../version", version = "=1.14.16" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.16" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.17" } +solana-client = { path = "../client", version = "=1.14.17" } +solana-entry = { path = "../entry", version = "=1.14.17" } +solana-faucet = { path = "../faucet", version = "=1.14.17" } +solana-gossip = { path = "../gossip", version = "=1.14.17" } +solana-ledger = { path = "../ledger", version = "=1.14.17" } +solana-measure = { path = "../measure", version = "=1.14.17" } +solana-metrics = { path = "../metrics", version = "=1.14.17" } +solana-perf = { path = "../perf", version = "=1.14.17" } +solana-poh = { path = "../poh", version = "=1.14.17" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.17" } +solana-runtime = { path = "../runtime", version = "=1.14.17" } +solana-sdk = { path = "../sdk", version = "=1.14.17" } +solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.17" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.17" } +solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.17" } +solana-streamer = { path = "../streamer", version = "=1.14.17" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.17" } +solana-version = { path = "../version", version = "=1.14.17" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.17" } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } spl-token-2022 = { version = "=0.5.0", features = ["no-entrypoint"] } stream-cancel = "0.8.1" @@ -58,9 +58,9 @@ tokio-util = { version = "0.6", features = ["codec", "compat"] } [dev-dependencies] serial_test = "0.8.0" -solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.16" } -solana-net-utils = { path = "../net-utils", version = "=1.14.16" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.16" } +solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.17" } +solana-net-utils = { path = "../net-utils", version = "=1.14.17" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.17" } symlink = "0.1.0" [lib] diff --git a/runtime/Cargo.toml b/runtime/Cargo.toml index 65c6d565da9017..dd038f563242ef 100644 --- a/runtime/Cargo.toml +++ b/runtime/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-runtime" -version = "1.14.16" +version = "1.14.17" description = "Solana runtime" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -40,21 +40,21 @@ rayon = "1.5.3" regex = "1.5.6" serde = { version = "1.0.138", features = ["rc"] } serde_derive = "1.0.103" -solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.16" } -solana-bucket-map = { path = "../bucket_map", version = "=1.14.16" } -solana-compute-budget-program = { path = "../programs/compute-budget", version = "=1.14.16" } -solana-config-program = { path = "../programs/config", version = "=1.14.16" } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.16" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.16" } -solana-measure = { path = "../measure", version = "=1.14.16" } -solana-metrics = { path = "../metrics", version = "=1.14.16" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.16" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.16" } -solana-sdk = { path = "../sdk", version = "=1.14.16" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.16" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.16" } -solana-zk-token-proof-program = { path = "../programs/zk-token-proof", version = "=1.14.16" } -solana-zk-token-sdk = { path = "../zk-token-sdk", version = "=1.14.16" } +solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.17" } +solana-bucket-map = { path = "../bucket_map", version = "=1.14.17" } +solana-compute-budget-program = { path = "../programs/compute-budget", version = "=1.14.17" } +solana-config-program = { path = "../programs/config", version = "=1.14.17" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.17" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.17" } +solana-measure = { path = "../measure", version = "=1.14.17" } +solana-metrics = { path = "../metrics", version = "=1.14.17" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.17" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.17" } +solana-sdk = { path = "../sdk", version = "=1.14.17" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.17" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.17" } +solana-zk-token-proof-program = { path = "../programs/zk-token-proof", version = "=1.14.17" } +solana-zk-token-sdk = { path = "../zk-token-sdk", version = "=1.14.17" } strum = { version = "0.24", features = ["derive"] } strum_macros = "0.24" symlink = "0.1.0" @@ -72,7 +72,7 @@ assert_matches = "1.5.0" ed25519-dalek = "=1.0.1" libsecp256k1 = "0.6.0" rand_chacha = "0.2.2" -solana-logger = { path = "../logger", version = "=1.14.16" } +solana-logger = { path = "../logger", version = "=1.14.17" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/runtime/store-tool/Cargo.toml b/runtime/store-tool/Cargo.toml index 42fc6b9effe52b..caee46ef79b587 100644 --- a/runtime/store-tool/Cargo.toml +++ b/runtime/store-tool/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-store-tool" description = "Tool to inspect append vecs" -version = "1.14.16" +version = "1.14.17" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -12,9 +12,9 @@ publish = false [dependencies] clap = "2.33.1" log = { version = "0.4.17" } -solana-logger = { path = "../../logger", version = "=1.14.16" } -solana-runtime = { path = "..", version = "=1.14.16" } -solana-version = { path = "../../version", version = "=1.14.16" } +solana-logger = { path = "../../logger", version = "=1.14.17" } +solana-runtime = { path = "..", version = "=1.14.17" } +solana-version = { path = "../../version", version = "=1.14.17" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/sdk/Cargo.toml b/sdk/Cargo.toml index 98cf5d7b57d322..92e226867af2fe 100644 --- a/sdk/Cargo.toml +++ b/sdk/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-sdk" -version = "1.14.16" +version = "1.14.17" description = "Solana SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -71,11 +71,11 @@ serde_derive = "1.0.103" serde_json = { version = "1.0.81", optional = true } sha2 = "0.10.2" sha3 = { version = "0.10.1", optional = true } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.16" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.16" } -solana-logger = { path = "../logger", version = "=1.14.16", optional = true } -solana-program = { path = "program", version = "=1.14.16" } -solana-sdk-macro = { path = "macro", version = "=1.14.16" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.17" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.17" } +solana-logger = { path = "../logger", version = "=1.14.17", optional = true } +solana-program = { path = "program", version = "=1.14.17" } +solana-sdk-macro = { path = "macro", version = "=1.14.17" } thiserror = "1.0" uriparse = "0.6.4" wasm-bindgen = "0.2" diff --git a/sdk/cargo-build-bpf/Cargo.toml b/sdk/cargo-build-bpf/Cargo.toml index 8d7abba464c995..7f019597ce9800 100644 --- a/sdk/cargo-build-bpf/Cargo.toml +++ b/sdk/cargo-build-bpf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-cargo-build-bpf" -version = "1.14.16" +version = "1.14.17" description = "Compile a local package and all of its dependencies using the Solana SBF SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,7 +12,7 @@ publish = false [dependencies] cargo_metadata = "0.15.0" clap = { version = "3.1.5", features = ["cargo", "env"] } -solana-sdk = { path = "..", version = "=1.14.16" } +solana-sdk = { path = "..", version = "=1.14.17" } [features] program = [] diff --git a/sdk/cargo-build-sbf/Cargo.toml b/sdk/cargo-build-sbf/Cargo.toml index 92e4a10c447c46..05c27daafdb7ee 100644 --- a/sdk/cargo-build-sbf/Cargo.toml +++ b/sdk/cargo-build-sbf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-cargo-build-sbf" -version = "1.14.16" +version = "1.14.17" description = "Compile a local package and all of its dependencies using the Solana SBF SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -15,9 +15,9 @@ cargo_metadata = "0.15.0" clap = { version = "3.1.5", features = ["cargo", "env"] } log = { version = "0.4.14", features = ["std"] } regex = "1.5.6" -solana-download-utils = { path = "../../download-utils", version = "=1.14.16" } -solana-logger = { path = "../../logger", version = "=1.14.16" } -solana-sdk = { path = "..", version = "=1.14.16" } +solana-download-utils = { path = "../../download-utils", version = "=1.14.17" } +solana-logger = { path = "../../logger", version = "=1.14.17" } +solana-sdk = { path = "..", version = "=1.14.17" } tar = "0.4.38" [dev-dependencies] diff --git a/sdk/cargo-build-sbf/tests/crates/fail/Cargo.toml b/sdk/cargo-build-sbf/tests/crates/fail/Cargo.toml index 5f78806bc0e465..213bc80dc049ba 100644 --- a/sdk/cargo-build-sbf/tests/crates/fail/Cargo.toml +++ b/sdk/cargo-build-sbf/tests/crates/fail/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "fail" -version = "1.14.16" +version = "1.14.17" description = "Solana SBF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ edition = "2021" publish = false [dependencies] -solana-program = { path = "../../../../program", version = "=1.14.16" } +solana-program = { path = "../../../../program", version = "=1.14.17" } [lib] crate-type = ["cdylib"] diff --git a/sdk/cargo-build-sbf/tests/crates/noop/Cargo.toml b/sdk/cargo-build-sbf/tests/crates/noop/Cargo.toml index 2469009b9a1177..309baca04adfd5 100644 --- a/sdk/cargo-build-sbf/tests/crates/noop/Cargo.toml +++ b/sdk/cargo-build-sbf/tests/crates/noop/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "noop" -version = "1.14.16" +version = "1.14.17" description = "Solana SBF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ edition = "2021" publish = false [dependencies] -solana-program = { path = "../../../../program", version = "=1.14.16" } +solana-program = { path = "../../../../program", version = "=1.14.17" } [lib] crate-type = ["cdylib"] diff --git a/sdk/cargo-test-bpf/Cargo.toml b/sdk/cargo-test-bpf/Cargo.toml index e13c3cf586547e..0d2c111569c04e 100644 --- a/sdk/cargo-test-bpf/Cargo.toml +++ b/sdk/cargo-test-bpf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-cargo-test-bpf" -version = "1.14.16" +version = "1.14.17" description = "Execute all unit and integration tests after building with the Solana SBF SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/sdk/cargo-test-sbf/Cargo.toml b/sdk/cargo-test-sbf/Cargo.toml index b332b2af91cab5..bebfdeca657d13 100644 --- a/sdk/cargo-test-sbf/Cargo.toml +++ b/sdk/cargo-test-sbf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-cargo-test-sbf" -version = "1.14.16" +version = "1.14.17" description = "Execute all unit and integration tests after building with the Solana SBF SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/sdk/gen-headers/Cargo.toml b/sdk/gen-headers/Cargo.toml index 6314a747abf6f9..5e4c997a9989bf 100644 --- a/sdk/gen-headers/Cargo.toml +++ b/sdk/gen-headers/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "gen-headers" -version = "1.14.16" +version = "1.14.17" edition = "2021" license = "Apache-2.0" publish = false diff --git a/sdk/macro/Cargo.toml b/sdk/macro/Cargo.toml index babce8dcabc80f..65031a9d017b65 100644 --- a/sdk/macro/Cargo.toml +++ b/sdk/macro/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-sdk-macro" -version = "1.14.16" +version = "1.14.17" description = "Solana SDK Macro" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/sdk/program/Cargo.toml b/sdk/program/Cargo.toml index 15f0323871d0e3..426d4ad4d840ad 100644 --- a/sdk/program/Cargo.toml +++ b/sdk/program/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-program" -version = "1.14.16" +version = "1.14.17" description = "Solana Program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -31,9 +31,9 @@ serde_derive = "1.0" serde_json = "1.0" sha2 = "0.10.0" sha3 = "0.10.0" -solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.16" } -solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.16" } -solana-sdk-macro = { path = "../macro", version = "=1.14.16" } +solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.17" } +solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.17" } +solana-sdk-macro = { path = "../macro", version = "=1.14.17" } thiserror = "1.0" [target.'cfg(not(target_os = "solana"))'.dependencies] @@ -50,7 +50,7 @@ wasm-bindgen = "0.2" zeroize = { version = "1.3", default-features = true, features = ["zeroize_derive"] } [target.'cfg(not(target_os = "solana"))'.dev-dependencies] -solana-logger = { path = "../../logger", version = "=1.14.16" } +solana-logger = { path = "../../logger", version = "=1.14.17" } [target.'cfg(target_arch = "wasm32")'.dependencies] console_error_panic_hook = "0.1.7" diff --git a/send-transaction-service/Cargo.toml b/send-transaction-service/Cargo.toml index fdd8974cfb5c15..f36913e84351e4 100644 --- a/send-transaction-service/Cargo.toml +++ b/send-transaction-service/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-send-transaction-service" -version = "1.14.16" +version = "1.14.17" description = "Solana send transaction service" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,14 +12,14 @@ edition = "2021" [dependencies] crossbeam-channel = "0.5" log = "0.4.17" -solana-client = { path = "../client", version = "=1.14.16" } -solana-measure = { path = "../measure", version = "=1.14.16" } -solana-metrics = { path = "../metrics", version = "=1.14.16" } -solana-runtime = { path = "../runtime", version = "=1.14.16" } -solana-sdk = { path = "../sdk", version = "=1.14.16" } +solana-client = { path = "../client", version = "=1.14.17" } +solana-measure = { path = "../measure", version = "=1.14.17" } +solana-metrics = { path = "../metrics", version = "=1.14.17" } +solana-runtime = { path = "../runtime", version = "=1.14.17" } +solana-sdk = { path = "../sdk", version = "=1.14.17" } [dev-dependencies] -solana-logger = { path = "../logger", version = "=1.14.16" } +solana-logger = { path = "../logger", version = "=1.14.17" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/stake-accounts/Cargo.toml b/stake-accounts/Cargo.toml index 5bc0f41a99a873..fa3344948049a8 100644 --- a/stake-accounts/Cargo.toml +++ b/stake-accounts/Cargo.toml @@ -3,7 +3,7 @@ name = "solana-stake-accounts" description = "Blockchain, Rebuilt for Scale" authors = ["Solana Maintainers "] edition = "2021" -version = "1.14.16" +version = "1.14.17" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -11,15 +11,15 @@ documentation = "https://docs.rs/solana-stake-accounts" [dependencies] clap = "2.33.1" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.16" } -solana-cli-config = { path = "../cli-config", version = "=1.14.16" } -solana-client = { path = "../client", version = "=1.14.16" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.16" } -solana-sdk = { path = "../sdk", version = "=1.14.16" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.16" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.17" } +solana-cli-config = { path = "../cli-config", version = "=1.14.17" } +solana-client = { path = "../client", version = "=1.14.17" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.17" } +solana-sdk = { path = "../sdk", version = "=1.14.17" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.17" } [dev-dependencies] -solana-runtime = { path = "../runtime", version = "=1.14.16" } +solana-runtime = { path = "../runtime", version = "=1.14.17" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/storage-bigtable/Cargo.toml b/storage-bigtable/Cargo.toml index 60838cf2891097..a78cf05e88c576 100644 --- a/storage-bigtable/Cargo.toml +++ b/storage-bigtable/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-storage-bigtable" -version = "1.14.16" +version = "1.14.17" description = "Solana Storage BigTable" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -27,10 +27,10 @@ prost-types = "0.11.0" serde = "1.0.138" serde_derive = "1.0.103" smpl_jwt = "0.7.1" -solana-metrics = { path = "../metrics", version = "=1.14.16" } -solana-sdk = { path = "../sdk", version = "=1.14.16" } -solana-storage-proto = { path = "../storage-proto", version = "=1.14.16" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.16" } +solana-metrics = { path = "../metrics", version = "=1.14.17" } +solana-sdk = { path = "../sdk", version = "=1.14.17" } +solana-storage-proto = { path = "../storage-proto", version = "=1.14.17" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.17" } thiserror = "1.0" tokio = "1" tonic = { version = "0.8.0", features = ["tls", "transport"] } diff --git a/storage-bigtable/build-proto/Cargo.lock b/storage-bigtable/build-proto/Cargo.lock index bf666919b74b63..3e16ba9e84cdcc 100644 --- a/storage-bigtable/build-proto/Cargo.lock +++ b/storage-bigtable/build-proto/Cargo.lock @@ -219,7 +219,7 @@ dependencies = [ [[package]] name = "proto" -version = "1.14.16" +version = "1.14.17" dependencies = [ "protobuf-src", "tonic-build", diff --git a/storage-bigtable/build-proto/Cargo.toml b/storage-bigtable/build-proto/Cargo.toml index d08b4c4c1c12e0..345f3a20aebe36 100644 --- a/storage-bigtable/build-proto/Cargo.toml +++ b/storage-bigtable/build-proto/Cargo.toml @@ -7,7 +7,7 @@ license = "Apache-2.0" name = "proto" publish = false repository = "https://github.com/solana-labs/solana" -version = "1.14.16" +version = "1.14.17" [workspace] diff --git a/storage-proto/Cargo.toml b/storage-proto/Cargo.toml index aa172a0500adf6..7d1885c6813048 100644 --- a/storage-proto/Cargo.toml +++ b/storage-proto/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-storage-proto" -version = "1.14.16" +version = "1.14.17" description = "Solana Storage Protobuf Definitions" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,9 +14,9 @@ bincode = "1.3.3" bs58 = "0.4.0" prost = "0.11.0" serde = "1.0.138" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.16" } -solana-sdk = { path = "../sdk", version = "=1.14.16" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.16" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.17" } +solana-sdk = { path = "../sdk", version = "=1.14.17" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.17" } [dev-dependencies] enum-iterator = "0.8.1" diff --git a/streamer/Cargo.toml b/streamer/Cargo.toml index 48c9adf8141f2a..46125f46f3543e 100644 --- a/streamer/Cargo.toml +++ b/streamer/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-streamer" -version = "1.14.16" +version = "1.14.17" description = "Solana Streamer" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -25,15 +25,15 @@ quinn = "0.8.3" rand = "0.7.0" rcgen = "0.9.2" rustls = { version = "0.20.6", features = ["dangerous_configuration"] } -solana-metrics = { path = "../metrics", version = "=1.14.16" } -solana-perf = { path = "../perf", version = "=1.14.16" } -solana-sdk = { path = "../sdk", version = "=1.14.16" } +solana-metrics = { path = "../metrics", version = "=1.14.17" } +solana-perf = { path = "../perf", version = "=1.14.17" } +solana-sdk = { path = "../sdk", version = "=1.14.17" } thiserror = "1.0" tokio = { version = "1", features = ["full"] } x509-parser = "0.14.0" [dev-dependencies] -solana-logger = { path = "../logger", version = "=1.14.16" } +solana-logger = { path = "../logger", version = "=1.14.17" } [lib] crate-type = ["lib"] diff --git a/sys-tuner/Cargo.toml b/sys-tuner/Cargo.toml index ee53c2a57ba5f4..4be6e1b8888ce8 100644 --- a/sys-tuner/Cargo.toml +++ b/sys-tuner/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-sys-tuner" description = "The solana cluster system tuner daemon" -version = "1.14.16" +version = "1.14.17" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,8 +14,8 @@ publish = true clap = "2.33.1" libc = "0.2.126" log = "0.4.17" -solana-logger = { path = "../logger", version = "=1.14.16" } -solana-version = { path = "../version", version = "=1.14.16" } +solana-logger = { path = "../logger", version = "=1.14.17" } +solana-version = { path = "../version", version = "=1.14.17" } [target."cfg(unix)".dependencies] unix_socket2 = "0.5.4" diff --git a/test-validator/Cargo.toml b/test-validator/Cargo.toml index 3521800bd06e48..5434073af38428 100644 --- a/test-validator/Cargo.toml +++ b/test-validator/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "solana-test-validator" description = "Blockchain, Rebuilt for Scale" -version = "1.14.16" +version = "1.14.17" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-test-validator" readme = "../README.md" @@ -15,19 +15,19 @@ base64 = "0.13.0" log = "0.4.17" serde_derive = "1.0.103" serde_json = "1.0.81" -solana-cli-output = { path = "../cli-output", version = "=1.14.16" } -solana-client = { path = "../client", version = "=1.14.16" } -solana-core = { path = "../core", version = "=1.14.16" } -solana-gossip = { path = "../gossip", version = "=1.14.16" } -solana-ledger = { path = "../ledger", version = "=1.14.16" } -solana-logger = { path = "../logger", version = "=1.14.16" } -solana-net-utils = { path = "../net-utils", version = "=1.14.16" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.16" } -solana-program-test = { path = "../program-test", version = "=1.14.16" } -solana-rpc = { path = "../rpc", version = "=1.14.16" } -solana-runtime = { path = "../runtime", version = "=1.14.16" } -solana-sdk = { path = "../sdk", version = "=1.14.16" } -solana-streamer = { path = "../streamer", version = "=1.14.16" } +solana-cli-output = { path = "../cli-output", version = "=1.14.17" } +solana-client = { path = "../client", version = "=1.14.17" } +solana-core = { path = "../core", version = "=1.14.17" } +solana-gossip = { path = "../gossip", version = "=1.14.17" } +solana-ledger = { path = "../ledger", version = "=1.14.17" } +solana-logger = { path = "../logger", version = "=1.14.17" } +solana-net-utils = { path = "../net-utils", version = "=1.14.17" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.17" } +solana-program-test = { path = "../program-test", version = "=1.14.17" } +solana-rpc = { path = "../rpc", version = "=1.14.17" } +solana-runtime = { path = "../runtime", version = "=1.14.17" } +solana-sdk = { path = "../sdk", version = "=1.14.17" } +solana-streamer = { path = "../streamer", version = "=1.14.17" } tokio = { version = "1", features = ["full"] } [package.metadata.docs.rs] diff --git a/tokens/Cargo.toml b/tokens/Cargo.toml index 6acf8c75d21f94..7eee1783394428 100644 --- a/tokens/Cargo.toml +++ b/tokens/Cargo.toml @@ -3,7 +3,7 @@ name = "solana-tokens" description = "Blockchain, Rebuilt for Scale" authors = ["Solana Maintainers "] edition = "2021" -version = "1.14.16" +version = "1.14.17" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -19,14 +19,14 @@ indexmap = "1.9.1" indicatif = "0.16.2" pickledb = { version = "0.5.1", default-features = false, features = ["yaml"] } serde = { version = "1.0", features = ["derive"] } -solana-account-decoder = { path = "../account-decoder", version = "=1.14.16" } -solana-clap-utils = { path = "../clap-utils", version = "=1.14.16" } -solana-cli-config = { path = "../cli-config", version = "=1.14.16" } -solana-client = { path = "../client", version = "=1.14.16" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.16" } -solana-sdk = { path = "../sdk", version = "=1.14.16" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.16" } -solana-version = { path = "../version", version = "=1.14.16" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.17" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.17" } +solana-cli-config = { path = "../cli-config", version = "=1.14.17" } +solana-client = { path = "../client", version = "=1.14.17" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.17" } +solana-sdk = { path = "../sdk", version = "=1.14.17" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.17" } +solana-version = { path = "../version", version = "=1.14.17" } spl-associated-token-account = { version = "=1.1.2" } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } tempfile = "3.3.0" @@ -34,6 +34,6 @@ thiserror = "1.0" [dev-dependencies] bincode = "1.3.3" -solana-logger = { path = "../logger", version = "=1.14.16" } -solana-streamer = { path = "../streamer", version = "=1.14.16" } -solana-test-validator = { path = "../test-validator", version = "=1.14.16" } +solana-logger = { path = "../logger", version = "=1.14.17" } +solana-streamer = { path = "../streamer", version = "=1.14.17" } +solana-test-validator = { path = "../test-validator", version = "=1.14.17" } diff --git a/transaction-dos/Cargo.toml b/transaction-dos/Cargo.toml index 0790df51e84b87..3d7f2a42b5e5b6 100644 --- a/transaction-dos/Cargo.toml +++ b/transaction-dos/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-transaction-dos" -version = "1.14.16" +version = "1.14.17" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,23 +14,23 @@ clap = "2.33.1" log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.16" } -solana-cli = { path = "../cli", version = "=1.14.16" } -solana-client = { path = "../client", version = "=1.14.16" } -solana-core = { path = "../core", version = "=1.14.16" } -solana-faucet = { path = "../faucet", version = "=1.14.16" } -solana-gossip = { path = "../gossip", version = "=1.14.16" } -solana-logger = { path = "../logger", version = "=1.14.16" } -solana-measure = { path = "../measure", version = "=1.14.16" } -solana-net-utils = { path = "../net-utils", version = "=1.14.16" } -solana-runtime = { path = "../runtime", version = "=1.14.16" } -solana-sdk = { path = "../sdk", version = "=1.14.16" } -solana-streamer = { path = "../streamer", version = "=1.14.16" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.16" } -solana-version = { path = "../version", version = "=1.14.16" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.17" } +solana-cli = { path = "../cli", version = "=1.14.17" } +solana-client = { path = "../client", version = "=1.14.17" } +solana-core = { path = "../core", version = "=1.14.17" } +solana-faucet = { path = "../faucet", version = "=1.14.17" } +solana-gossip = { path = "../gossip", version = "=1.14.17" } +solana-logger = { path = "../logger", version = "=1.14.17" } +solana-measure = { path = "../measure", version = "=1.14.17" } +solana-net-utils = { path = "../net-utils", version = "=1.14.17" } +solana-runtime = { path = "../runtime", version = "=1.14.17" } +solana-sdk = { path = "../sdk", version = "=1.14.17" } +solana-streamer = { path = "../streamer", version = "=1.14.17" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.17" } +solana-version = { path = "../version", version = "=1.14.17" } [dev-dependencies] -solana-local-cluster = { path = "../local-cluster", version = "=1.14.16" } +solana-local-cluster = { path = "../local-cluster", version = "=1.14.17" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/transaction-status/Cargo.toml b/transaction-status/Cargo.toml index 1fa42a54a90ad0..9b8605232f0c9f 100644 --- a/transaction-status/Cargo.toml +++ b/transaction-status/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-transaction-status" -version = "1.14.16" +version = "1.14.17" description = "Solana transaction status types" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -20,12 +20,12 @@ log = "0.4.17" serde = "1.0.138" serde_derive = "1.0.103" serde_json = "1.0.81" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.16" } -solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.16" } -solana-measure = { path = "../measure", version = "=1.14.16" } -solana-metrics = { path = "../metrics", version = "=1.14.16" } -solana-sdk = { path = "../sdk", version = "=1.14.16" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.16" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.17" } +solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.17" } +solana-measure = { path = "../measure", version = "=1.14.17" } +solana-metrics = { path = "../metrics", version = "=1.14.17" } +solana-sdk = { path = "../sdk", version = "=1.14.17" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.17" } spl-associated-token-account = { version = "=1.1.2", features = ["no-entrypoint"] } spl-memo = { version = "=3.0.1", features = ["no-entrypoint"] } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } diff --git a/upload-perf/Cargo.toml b/upload-perf/Cargo.toml index 977bec33f2e8f2..7b9645193f3d2e 100644 --- a/upload-perf/Cargo.toml +++ b/upload-perf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-upload-perf" -version = "1.14.16" +version = "1.14.17" description = "Metrics Upload Utility" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -11,7 +11,7 @@ publish = false [dependencies] serde_json = "1.0.81" -solana-metrics = { path = "../metrics", version = "=1.14.16" } +solana-metrics = { path = "../metrics", version = "=1.14.17" } [[bin]] name = "solana-upload-perf" diff --git a/validator/Cargo.toml b/validator/Cargo.toml index fd0ca56123df74..f0ac14d346f8af 100644 --- a/validator/Cargo.toml +++ b/validator/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-validator" description = "Blockchain, Rebuilt for Scale" -version = "1.14.16" +version = "1.14.17" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -28,30 +28,30 @@ num_cpus = "1.13.1" rand = "0.7.0" serde = "1.0.138" serde_json = "1.0.81" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.16" } -solana-cli-config = { path = "../cli-config", version = "=1.14.16" } -solana-client = { path = "../client", version = "=1.14.16" } -solana-core = { path = "../core", version = "=1.14.16" } -solana-download-utils = { path = "../download-utils", version = "=1.14.16" } -solana-entry = { path = "../entry", version = "=1.14.16" } -solana-faucet = { path = "../faucet", version = "=1.14.16" } -solana-genesis-utils = { path = "../genesis-utils", version = "=1.14.16" } -solana-gossip = { path = "../gossip", version = "=1.14.16" } -solana-ledger = { path = "../ledger", version = "=1.14.16" } -solana-logger = { path = "../logger", version = "=1.14.16" } -solana-metrics = { path = "../metrics", version = "=1.14.16" } -solana-net-utils = { path = "../net-utils", version = "=1.14.16" } -solana-perf = { path = "../perf", version = "=1.14.16" } -solana-poh = { path = "../poh", version = "=1.14.16" } -solana-rpc = { path = "../rpc", version = "=1.14.16" } -solana-runtime = { path = "../runtime", version = "=1.14.16" } -solana-sdk = { path = "../sdk", version = "=1.14.16" } -solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.16" } -solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.16" } -solana-streamer = { path = "../streamer", version = "=1.14.16" } -solana-test-validator = { path = "../test-validator", version = "=1.14.16" } -solana-version = { path = "../version", version = "=1.14.16" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.16" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.17" } +solana-cli-config = { path = "../cli-config", version = "=1.14.17" } +solana-client = { path = "../client", version = "=1.14.17" } +solana-core = { path = "../core", version = "=1.14.17" } +solana-download-utils = { path = "../download-utils", version = "=1.14.17" } +solana-entry = { path = "../entry", version = "=1.14.17" } +solana-faucet = { path = "../faucet", version = "=1.14.17" } +solana-genesis-utils = { path = "../genesis-utils", version = "=1.14.17" } +solana-gossip = { path = "../gossip", version = "=1.14.17" } +solana-ledger = { path = "../ledger", version = "=1.14.17" } +solana-logger = { path = "../logger", version = "=1.14.17" } +solana-metrics = { path = "../metrics", version = "=1.14.17" } +solana-net-utils = { path = "../net-utils", version = "=1.14.17" } +solana-perf = { path = "../perf", version = "=1.14.17" } +solana-poh = { path = "../poh", version = "=1.14.17" } +solana-rpc = { path = "../rpc", version = "=1.14.17" } +solana-runtime = { path = "../runtime", version = "=1.14.17" } +solana-sdk = { path = "../sdk", version = "=1.14.17" } +solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.17" } +solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.17" } +solana-streamer = { path = "../streamer", version = "=1.14.17" } +solana-test-validator = { path = "../test-validator", version = "=1.14.17" } +solana-version = { path = "../version", version = "=1.14.17" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.17" } symlink = "0.1.0" [target.'cfg(not(target_env = "msvc"))'.dependencies] diff --git a/version/Cargo.toml b/version/Cargo.toml index bfee433498e77d..c4eef777f3aaf5 100644 --- a/version/Cargo.toml +++ b/version/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-version" -version = "1.14.16" +version = "1.14.17" description = "Solana Version" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,9 +14,9 @@ log = "0.4.17" semver = "1.0.10" serde = "1.0.138" serde_derive = "1.0.103" -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.16" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.16" } -solana-sdk = { path = "../sdk", version = "=1.14.16" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.17" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.17" } +solana-sdk = { path = "../sdk", version = "=1.14.17" } [lib] name = "solana_version" diff --git a/watchtower/Cargo.toml b/watchtower/Cargo.toml index f15bf2f3887c38..e2940f3c61c906 100644 --- a/watchtower/Cargo.toml +++ b/watchtower/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-watchtower" description = "Blockchain, Rebuilt for Scale" -version = "1.14.16" +version = "1.14.17" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -13,15 +13,15 @@ documentation = "https://docs.rs/solana-watchtower" clap = "2.33.1" humantime = "2.0.1" log = "0.4.17" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.16" } -solana-cli-config = { path = "../cli-config", version = "=1.14.16" } -solana-cli-output = { path = "../cli-output", version = "=1.14.16" } -solana-client = { path = "../client", version = "=1.14.16" } -solana-logger = { path = "../logger", version = "=1.14.16" } -solana-metrics = { path = "../metrics", version = "=1.14.16" } -solana-notifier = { path = "../notifier", version = "=1.14.16" } -solana-sdk = { path = "../sdk", version = "=1.14.16" } -solana-version = { path = "../version", version = "=1.14.16" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.17" } +solana-cli-config = { path = "../cli-config", version = "=1.14.17" } +solana-cli-output = { path = "../cli-output", version = "=1.14.17" } +solana-client = { path = "../client", version = "=1.14.17" } +solana-logger = { path = "../logger", version = "=1.14.17" } +solana-metrics = { path = "../metrics", version = "=1.14.17" } +solana-notifier = { path = "../notifier", version = "=1.14.17" } +solana-sdk = { path = "../sdk", version = "=1.14.17" } +solana-version = { path = "../version", version = "=1.14.17" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/zk-token-sdk/Cargo.toml b/zk-token-sdk/Cargo.toml index f9beb6b1bd90f9..a1b0c93687634f 100644 --- a/zk-token-sdk/Cargo.toml +++ b/zk-token-sdk/Cargo.toml @@ -3,7 +3,7 @@ name = "solana-zk-token-sdk" description = "Solana Zk Token SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" -version = "1.14.16" +version = "1.14.17" license = "Apache-2.0" edition = "2021" @@ -12,7 +12,7 @@ base64 = "0.13" bytemuck = { version = "1.11.0", features = ["derive"] } num-derive = "0.3" num-traits = "0.2" -solana-program = { path = "../sdk/program", version = "=1.14.16" } +solana-program = { path = "../sdk/program", version = "=1.14.17" } [target.'cfg(not(target_os = "solana"))'.dependencies] aes-gcm-siv = "0.10.3" @@ -29,7 +29,7 @@ rand = "0.7" serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" sha3 = "0.9" -solana-sdk = { path = "../sdk", version = "=1.14.16" } +solana-sdk = { path = "../sdk", version = "=1.14.17" } subtle = "2" thiserror = "1.0" zeroize = { version = "1.3", default-features = false, features = ["zeroize_derive"] } From ca1f86305a363bd7da257b8dc62be716076f90da Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Fri, 17 Feb 2023 16:19:12 -0700 Subject: [PATCH 335/465] docs remove ref. to commonly misused `--no-port-check` validator arg (#30306) (#30385) (cherry picked from commit 0487a4bd609eda0178c55da097b36f4e0ec6b88c) Co-authored-by: Trent Nelson --- docs/src/running-validator/validator-start.md | 6 ------ 1 file changed, 6 deletions(-) diff --git a/docs/src/running-validator/validator-start.md b/docs/src/running-validator/validator-start.md index 69966e28865c0a..852847c82a04c3 100644 --- a/docs/src/running-validator/validator-start.md +++ b/docs/src/running-validator/validator-start.md @@ -430,12 +430,6 @@ solana-validator ..."); otherwise, when logrotate sends its signal to the validator, the enclosing script will die and take the validator process with it. -### Disable port checks to speed up restarts - -Once your validator is operating normally, you can reduce the time it takes to -restart your validator by adding the `--no-port-check` flag to your -`solana-validator` command-line. - ### Using a ramdisk with spill-over into swap for the accounts database to reduce SSD wear If your machine has plenty of RAM, a tmpfs ramdisk From bed4e4cf51bb70b6db8c932de9e3803dec5c33ef Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Tue, 21 Feb 2023 10:46:18 -0700 Subject: [PATCH 336/465] v1.14: Scope SamplePerformanceService Bank only for initial sample snapshot (backport of #30316) (#30322) Scope SamplePerformanceService Bank only for initial sample snapshot (#30316) * Scope Bank only for initial sample snapshot * Remove nesting (cherry picked from commit 7c35191322641d084c27df16bb5ee8f76d62a98e) # Conflicts: # core/src/sample_performance_service.rs Co-authored-by: Tyera --- core/src/sample_performance_service.rs | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/core/src/sample_performance_service.rs b/core/src/sample_performance_service.rs index fe6820c91dde8d..acc6d08e1e55df 100644 --- a/core/src/sample_performance_service.rs +++ b/core/src/sample_performance_service.rs @@ -50,14 +50,18 @@ impl SamplePerformanceService { blockstore: &Arc, exit: Arc, ) { - let forks = bank_forks.read().unwrap(); - let bank = forks.root_bank(); - let highest_slot = forks.highest_slot(); - drop(forks); - - let mut sample_snapshot = SamplePerformanceSnapshot { - num_transactions: bank.transaction_count(), - num_slots: highest_slot, + let mut sample_snapshot = { + let forks = bank_forks.read().unwrap(); + let bank = forks.root_bank(); + let highest_slot = forks.highest_slot(); + + // Store the absolute transaction count to that we can compute the + // difference between these values at points in time to figure out + // how many transactions occurred in that timespan. + SamplePerformanceSnapshot { + num_transactions: bank.transaction_count(), + num_slots: highest_slot, + } }; let mut now = Instant::now(); From 69294ddd3442d2b465f307704bf609ba504d3404 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Fri, 24 Feb 2023 22:33:10 +0000 Subject: [PATCH 337/465] v1.14: Adjust tower root after warp slot (backport of #30467) (#30483) * Process tower after warping bank forks (#30467) This helps ensure tower and bank forks are in sync in terms of root slot (cherry picked from commit 784766151138ff0ee4e978d67bbac1c80549f75c) # Conflicts: # core/src/validator.rs * Update validator.rs --------- Co-authored-by: Brennan --- core/src/validator.rs | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/core/src/validator.rs b/core/src/validator.rs index 3ac8fd674864f7..7d2c2fd7c39327 100644 --- a/core/src/validator.rs +++ b/core/src/validator.rs @@ -1702,8 +1702,6 @@ fn maybe_warp_slot( abort(); }); - process_blockstore.process(); - let mut bank_forks = bank_forks.write().unwrap(); let working_bank = bank_forks.working_bank(); @@ -1749,6 +1747,11 @@ fn maybe_warp_slot( "created snapshot: {}", full_snapshot_archive_info.path().display() ); + + drop(bank_forks); + // Process blockstore after warping bank forks to make sure tower and + // bank forks are in sync. + process_blockstore.process(); } } From de70d51c6b56eabdddfa5d8ae5bf62e0a396c185 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Mon, 27 Feb 2023 14:10:06 -0800 Subject: [PATCH 338/465] v1.14: Make solana-ledger-tool retain all snapshots by default (backport of #27788) (#30539) Make solana-ledger-tool retain all snapshots by default (#27788) (cherry picked from commit 1d5314b5e625d47bcb4b32ca7e96d7133c86812a) Co-authored-by: steviez --- ledger-tool/src/main.rs | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/ledger-tool/src/main.rs b/ledger-tool/src/main.rs index 293fb6b0db56f6..8548b30733bfa8 100644 --- a/ledger-tool/src/main.rs +++ b/ledger-tool/src/main.rs @@ -51,8 +51,7 @@ use { snapshot_minimizer::SnapshotMinimizer, snapshot_utils::{ self, ArchiveFormat, SnapshotVersion, DEFAULT_ARCHIVE_COMPRESSION, - DEFAULT_MAX_FULL_SNAPSHOT_ARCHIVES_TO_RETAIN, - DEFAULT_MAX_INCREMENTAL_SNAPSHOT_ARCHIVES_TO_RETAIN, SUPPORTED_ARCHIVE_COMPRESSION, + SUPPORTED_ARCHIVE_COMPRESSION, }, }, solana_sdk::{ @@ -1251,8 +1250,9 @@ fn main() { .takes_value(true) .help("Log when transactions are processed that reference the given key(s)."); - let default_max_full_snapshot_archives_to_retain = - &DEFAULT_MAX_FULL_SNAPSHOT_ARCHIVES_TO_RETAIN.to_string(); + // Use std::usize::MAX for maximum_*_snapshots_to_retain such that + // ledger-tool commands will not remove any snapshots by default + let default_max_full_snapshot_archives_to_retain = &std::usize::MAX.to_string(); let maximum_full_snapshot_archives_to_retain = Arg::with_name( "maximum_full_snapshots_to_retain", ) @@ -1265,8 +1265,7 @@ fn main() { "The maximum number of full snapshot archives to hold on to when purging older snapshots.", ); - let default_max_incremental_snapshot_archives_to_retain = - &DEFAULT_MAX_INCREMENTAL_SNAPSHOT_ARCHIVES_TO_RETAIN.to_string(); + let default_max_incremental_snapshot_archives_to_retain = &std::usize::MAX.to_string(); let maximum_incremental_snapshot_archives_to_retain = Arg::with_name( "maximum_incremental_snapshots_to_retain", ) From 00f17136f3853956c5d5389b6b03209f68331dec Mon Sep 17 00:00:00 2001 From: steviez Date: Mon, 27 Feb 2023 14:10:34 -0800 Subject: [PATCH 339/465] Add accounts-index disk/mem arguments to create-snapshot command (#30541) The v1.14 branch was initially supposed to have the accounts-index on disk. In constrast, v1.13 and previous branches had the accounts-index in memory. However, high disk i/o during validator startup with v1.14 prompted a change to revert to in-memory accounts-index by default. This default behavior was enforced at the level of command line argument parsing, not defaults of the underlying config structs. The create-snapshot command did not previously have any of the arguments to configure the accounts-index mem/disk usage, so it implicitly used the default AccountsIndexConfig and IndexLimitMb value. As a result, create-snapshot has been running with accounts, accounts-index and the created snapshot all on disk. This shows the similar disk contention which results in the create-snapshot command running slower than it could. This change makes the create-snapshot command consistent with solana-validator to have the accounts-index in memory by default. This alleviate the high disk io, and makes the command finish quicker. Additionally, a node capable of running solana-validator to start can handle the additional memory usage of this change. --- ledger-tool/src/main.rs | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/ledger-tool/src/main.rs b/ledger-tool/src/main.rs index 8548b30733bfa8..61bbea9357112e 100644 --- a/ledger-tool/src/main.rs +++ b/ledger-tool/src/main.rs @@ -1605,6 +1605,9 @@ fn main() { .about("Create a new ledger snapshot") .arg(&no_snapshot_arg) .arg(&account_paths_arg) + .arg(&accounts_index_limit) + .arg(&disable_disk_index) + .arg(&enable_disk_index) .arg(&skip_rewrites_arg) .arg(&accounts_db_skip_initial_hash_calc_arg) .arg(&ancient_append_vecs) @@ -2726,7 +2729,24 @@ fn main() { output_directory.display() ); + let accounts_index_config = AccountsIndexConfig { + index_limit_mb: if let Some(limit) = + value_t!(matches, "accounts_index_memory_limit_mb", usize).ok() + { + IndexLimitMb::Limit(limit) + } else if matches.is_present("enable_accounts_disk_index") { + IndexLimitMb::Unspecified + } else { + if matches.is_present("disable_accounts_disk_index") { + warn!("ignoring `--disable-accounts-disk-index` as it specifies default behavior"); + } + IndexLimitMb::InMemOnly + }, + ..AccountsIndexConfig::default() + }; + let accounts_db_config = Some(AccountsDbConfig { + index: Some(accounts_index_config), skip_rewrites: arg_matches.is_present("accounts_db_skip_rewrites"), ancient_append_vecs: arg_matches.is_present("accounts_db_ancient_append_vecs"), skip_initial_hash_calc: arg_matches From 299a506822825e849c6a1e556628b334039f3f46 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Mon, 27 Feb 2023 18:28:39 -0800 Subject: [PATCH 340/465] v1.14: Not allow transactions request zero CU to update prioritization fee cache (backport of #30507) (#30524) Not allow transactions request zero CU to update prioritization fee cache (#30507) * filter out transaction requests zero cu from updating prioritization fee cache * updated comment (cherry picked from commit cbcd3ef27e61f323f9d532e6dbb543246fcaf1bc) Co-authored-by: Tao Zhu <82401714+taozhu-chicago@users.noreply.github.com> --- runtime/src/prioritization_fee_cache.rs | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/runtime/src/prioritization_fee_cache.rs b/runtime/src/prioritization_fee_cache.rs index 944f35e19519a9..1740b3a76f72f7 100644 --- a/runtime/src/prioritization_fee_cache.rs +++ b/runtime/src/prioritization_fee_cache.rs @@ -213,6 +213,13 @@ impl PrioritizationFeeCache { if priority_details.is_none() || account_locks.is_err() { continue; } + let priority_details = priority_details.unwrap(); + + // filter out any transaction that requests zero compute_unit_limit + // since its priority fee amount is not instructive + if priority_details.compute_unit_limit == 0 { + continue; + } let writable_accounts = Arc::new( account_locks @@ -226,7 +233,7 @@ impl PrioritizationFeeCache { self.sender .send(CacheServiceUpdate::TransactionUpdate { slot: bank.slot(), - transaction_fee: priority_details.unwrap().priority, + transaction_fee: priority_details.priority, writable_accounts, }) .unwrap_or_else(|err| { From 951b0b2f3755e22addc9ec542fc921b0742a1cf5 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Tue, 28 Feb 2023 13:58:12 -0800 Subject: [PATCH 341/465] v1.14: Not to tag versioned transaction as simple_vote_tx (backport of #30517) (#30522) * Not to tag versioned transaction as simple_vote_tx (#30517) (cherry picked from commit ee81679804e208a7f8a8d0f640a7cf96080a1fca) * fix merge conflict --------- Co-authored-by: Tao Zhu <82401714+taozhu-chicago@users.noreply.github.com> Co-authored-by: Tao Zhu --- perf/src/sigverify.rs | 89 +++++++++++++++++++++++++++++++++++-------- 1 file changed, 74 insertions(+), 15 deletions(-) diff --git a/perf/src/sigverify.rs b/perf/src/sigverify.rs index f4fcd689414c2e..2e8ac4e2e84323 100644 --- a/perf/src/sigverify.rs +++ b/perf/src/sigverify.rs @@ -367,6 +367,15 @@ fn check_for_simple_vote_transaction( return Err(PacketError::InvalidSignatureLen); } + // simple vote should only be legacy message + let msg_start = (packet_offsets.msg_start as usize) + .checked_sub(current_offset) + .ok_or(PacketError::InvalidLen)?; + let message_prefix = *packet.data(msg_start).ok_or(PacketError::InvalidLen)?; + if message_prefix & MESSAGE_VERSION_PREFIX != 0 { + return Ok(()); + } + let pubkey_start = (packet_offsets.pubkey_start as usize) .checked_sub(current_offset) .ok_or(PacketError::InvalidLen)?; @@ -1477,7 +1486,7 @@ mod tests { assert!(!packet.meta.is_simple_vote_tx()); } - // single vote tx is + // single legacy vote tx is { let mut tx = new_test_vote_tx(&mut rng); tx.message.instructions[0].data = vec![1, 2, 3]; @@ -1487,6 +1496,26 @@ mod tests { assert!(packet.meta.is_simple_vote_tx()); } + // single versioned vote tx is not + { + let mut tx = new_test_vote_tx(&mut rng); + tx.message.instructions[0].data = vec![1, 2, 3]; + let mut packet = Packet::from_data(None, tx).unwrap(); + + // set messager version to v0 + let mut packet_offsets = do_get_packet_offsets(&packet, 0).unwrap(); + let msg_start = packet_offsets.msg_start as usize; + let msg_bytes = packet.data(msg_start..).unwrap().to_vec(); + packet.buffer_mut()[msg_start] = MESSAGE_VERSION_PREFIX; + packet.meta.size += 1; + let msg_end = packet.meta.size; + packet.buffer_mut()[msg_start + 1..msg_end].copy_from_slice(&msg_bytes); + + packet_offsets = do_get_packet_offsets(&packet, 0).unwrap(); + check_for_simple_vote_transaction(&mut packet, &packet_offsets, 0).ok(); + assert!(!packet.meta.is_simple_vote_tx()); + } + // multiple mixed tx is not { let key = Keypair::new(); @@ -1514,22 +1543,52 @@ mod tests { solana_logger::setup(); let mut rng = rand::thread_rng(); - let mut current_offset = 0usize; - let mut batch = PacketBatch::default(); - batch.push(Packet::from_data(None, test_tx()).unwrap()); - let tx = new_test_vote_tx(&mut rng); - batch.push(Packet::from_data(None, tx).unwrap()); - batch.iter_mut().enumerate().for_each(|(index, packet)| { - let packet_offsets = do_get_packet_offsets(packet, current_offset).unwrap(); - check_for_simple_vote_transaction(packet, &packet_offsets, current_offset).ok(); - if index == 1 { - assert!(packet.meta.is_simple_vote_tx()); - } else { + // batch of legacy messages + { + let mut current_offset = 0usize; + let mut batch = PacketBatch::default(); + batch.push(Packet::from_data(None, test_tx()).unwrap()); + let tx = new_test_vote_tx(&mut rng); + batch.push(Packet::from_data(None, tx).unwrap()); + batch.iter_mut().enumerate().for_each(|(index, packet)| { + let packet_offsets = do_get_packet_offsets(packet, current_offset).unwrap(); + check_for_simple_vote_transaction(packet, &packet_offsets, current_offset).ok(); + if index == 1 { + assert!(packet.meta.is_simple_vote_tx()); + } else { + assert!(!packet.meta.is_simple_vote_tx()); + } + + current_offset = current_offset.saturating_add(size_of::()); + }); + } + + // batch of mixed legacy messages and versioned vote tx, which won't be flagged as + // simple_vote_tx + { + let mut current_offset = 0usize; + let mut batch = PacketBatch::default(); + batch.push(Packet::from_data(None, test_tx()).unwrap()); + // versioned vote tx + let tx = new_test_vote_tx(&mut rng); + let mut packet = Packet::from_data(None, tx).unwrap(); + let packet_offsets = do_get_packet_offsets(&packet, 0).unwrap(); + let msg_start = packet_offsets.msg_start as usize; + let msg_bytes = packet.data(msg_start..).unwrap().to_vec(); + packet.buffer_mut()[msg_start] = MESSAGE_VERSION_PREFIX; + packet.meta.size += 1; + let msg_end = packet.meta.size; + packet.buffer_mut()[msg_start + 1..msg_end].copy_from_slice(&msg_bytes); + batch.push(packet); + + batch.iter_mut().for_each(|packet| { + let packet_offsets = do_get_packet_offsets(packet, current_offset).unwrap(); + check_for_simple_vote_transaction(packet, &packet_offsets, current_offset).ok(); assert!(!packet.meta.is_simple_vote_tx()); - } - current_offset = current_offset.saturating_add(size_of::()); - }); + current_offset = current_offset.saturating_add(size_of::()); + }); + } } #[test] From 16ecee844e05b704980f67038face1e7f05395cb Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Fri, 3 Mar 2023 16:49:30 -0800 Subject: [PATCH 342/465] v1.14: Exit when stuck in an unrecoverable repair/purge loop (backport of #28596) (#30562) Exit when stuck in an unrecoverable repair/purge loop (#28596) * Exit when stuck in an unrecoverable repair/purge loop * add tests (cherry picked from commit ae557a9eb5d8c8451cf7615858f09b2fd47609a0) # Conflicts: # core/src/replay_stage.rs Co-authored-by: Ashwin Sekar --- core/src/ancestor_hashes_service.rs | 3 +- core/src/cluster_slot_state_verifier.rs | 36 ++++++++++++++++++ core/src/replay_stage.rs | 50 ++++++++++++++++++++++++- 3 files changed, 86 insertions(+), 3 deletions(-) diff --git a/core/src/ancestor_hashes_service.rs b/core/src/ancestor_hashes_service.rs index 6ecf140decbd5f..c9e0d3f001fcb4 100644 --- a/core/src/ancestor_hashes_service.rs +++ b/core/src/ancestor_hashes_service.rs @@ -760,7 +760,7 @@ mod test { use { super::*, crate::{ - cluster_slot_state_verifier::DuplicateSlotsToRepair, + cluster_slot_state_verifier::{DuplicateSlotsToRepair, PurgeRepairSlotCounter}, repair_service::DuplicateSlotsResetReceiver, replay_stage::{ tests::{replay_blockstore_components, ReplayBlockstoreComponents}, @@ -1621,6 +1621,7 @@ mod test { &bank_forks, &requester_blockstore, None, + &mut PurgeRepairSlotCounter::default(), ); // Simulate making a request diff --git a/core/src/cluster_slot_state_verifier.rs b/core/src/cluster_slot_state_verifier.rs index 8643f9c3afbaf8..a9e5be9d9256d1 100644 --- a/core/src/cluster_slot_state_verifier.rs +++ b/core/src/cluster_slot_state_verifier.rs @@ -11,6 +11,7 @@ use { pub(crate) type DuplicateSlotsTracker = BTreeSet; pub(crate) type DuplicateSlotsToRepair = HashMap; +pub(crate) type PurgeRepairSlotCounter = BTreeMap; pub(crate) type EpochSlotsFrozenSlots = BTreeMap; pub(crate) type GossipDuplicateConfirmedSlots = BTreeMap; @@ -694,6 +695,7 @@ fn apply_state_changes( duplicate_slots_to_repair: &mut DuplicateSlotsToRepair, blockstore: &Blockstore, ancestor_hashes_replay_update_sender: &AncestorHashesReplayUpdateSender, + purge_repair_slot_counter: &mut PurgeRepairSlotCounter, state_changes: Vec, ) { // Handle cases where the bank is frozen, but not duplicate confirmed @@ -728,6 +730,7 @@ fn apply_state_changes( ) .unwrap(); duplicate_slots_to_repair.remove(&slot); + purge_repair_slot_counter.remove(&slot); } ResultingStateChange::SendAncestorHashesReplayUpdate(ancestor_hashes_replay_update) => { let _ = ancestor_hashes_replay_update_sender.send(ancestor_hashes_replay_update); @@ -750,6 +753,7 @@ pub(crate) fn check_slot_agrees_with_cluster( fork_choice: &mut HeaviestSubtreeForkChoice, duplicate_slots_to_repair: &mut DuplicateSlotsToRepair, ancestor_hashes_replay_update_sender: &AncestorHashesReplayUpdateSender, + purge_repair_slot_counter: &mut PurgeRepairSlotCounter, slot_state_update: SlotStateUpdate, ) { info!( @@ -839,6 +843,7 @@ pub(crate) fn check_slot_agrees_with_cluster( duplicate_slots_to_repair, blockstore, ancestor_hashes_replay_update_sender, + purge_repair_slot_counter, state_changes, ); } @@ -1396,6 +1401,7 @@ mod test { } = setup(); let mut duplicate_slots_to_repair = DuplicateSlotsToRepair::default(); + let mut purge_repair_slot_counter = PurgeRepairSlotCounter::default(); // MarkSlotDuplicate should mark progress map and remove // the slot from fork choice @@ -1414,6 +1420,7 @@ mod test { &mut duplicate_slots_to_repair, &blockstore, &ancestor_hashes_replay_update_sender, + &mut purge_repair_slot_counter, vec![ResultingStateChange::MarkSlotDuplicate(duplicate_slot_hash)], ); assert!(!heaviest_subtree_fork_choice @@ -1436,6 +1443,7 @@ mod test { ); } assert!(duplicate_slots_to_repair.is_empty()); + assert!(purge_repair_slot_counter.is_empty()); // Simulate detecting another hash that is the correct version, // RepairDuplicateConfirmedVersion should add the slot to repair @@ -1448,6 +1456,7 @@ mod test { &mut duplicate_slots_to_repair, &blockstore, &ancestor_hashes_replay_update_sender, + &mut purge_repair_slot_counter, vec![ResultingStateChange::RepairDuplicateConfirmedVersion( correct_hash, )], @@ -1457,6 +1466,7 @@ mod test { *duplicate_slots_to_repair.get(&duplicate_slot).unwrap(), correct_hash ); + assert!(purge_repair_slot_counter.is_empty()); } #[test] @@ -1470,6 +1480,7 @@ mod test { } = setup(); let mut duplicate_slots_to_repair = DuplicateSlotsToRepair::default(); + let mut purge_repair_slot_counter = PurgeRepairSlotCounter::default(); let duplicate_slot = bank_forks.read().unwrap().root() + 1; let duplicate_slot_hash = bank_forks @@ -1490,6 +1501,7 @@ mod test { &mut duplicate_slots_to_repair, &blockstore, &ancestor_hashes_replay_update_sender, + &mut purge_repair_slot_counter, vec![ResultingStateChange::BankFrozen(duplicate_slot_hash)], ); assert_eq!( @@ -1513,6 +1525,7 @@ mod test { &mut duplicate_slots_to_repair, &blockstore, &ancestor_hashes_replay_update_sender, + &mut purge_repair_slot_counter, vec![ResultingStateChange::BankFrozen(new_bank_hash)], ); assert_eq!( @@ -1535,6 +1548,7 @@ mod test { } = setup(); let mut duplicate_slots_to_repair = DuplicateSlotsToRepair::default(); + let mut purge_repair_slot_counter = PurgeRepairSlotCounter::default(); let duplicate_slot = bank_forks.read().unwrap().root() + 1; let our_duplicate_slot_hash = bank_forks @@ -1546,6 +1560,7 @@ mod test { // Setup and check the state that is about to change. duplicate_slots_to_repair.insert(duplicate_slot, Hash::new_unique()); + purge_repair_slot_counter.insert(duplicate_slot, 1); assert!(blockstore.get_bank_hash(duplicate_slot).is_none()); assert!(!blockstore.is_duplicate_confirmed(duplicate_slot)); @@ -1553,6 +1568,7 @@ mod test { // 1) Re-enable fork choice // 2) Clear any pending repairs from `duplicate_slots_to_repair` since we have the // right version now + // 3) Clear the slot from `purge_repair_slot_counter` // 3) Set the status to duplicate confirmed in Blockstore let mut state_changes = vec![ResultingStateChange::DuplicateConfirmedSlotMatchesCluster( our_duplicate_slot_hash, @@ -1566,6 +1582,7 @@ mod test { &mut duplicate_slots_to_repair, &blockstore, &ancestor_hashes_replay_update_sender, + &mut purge_repair_slot_counter, state_changes, ); for child_slot in descendants @@ -1585,6 +1602,7 @@ mod test { .is_candidate(&(duplicate_slot, our_duplicate_slot_hash)) .unwrap()); assert!(duplicate_slots_to_repair.is_empty()); + assert!(purge_repair_slot_counter.is_empty()); assert_eq!( blockstore.get_bank_hash(duplicate_slot).unwrap(), our_duplicate_slot_hash @@ -1627,6 +1645,7 @@ mod test { let gossip_duplicate_confirmed_slots = GossipDuplicateConfirmedSlots::default(); let mut epoch_slots_frozen_slots = EpochSlotsFrozenSlots::default(); let mut duplicate_slots_to_repair = DuplicateSlotsToRepair::default(); + let mut purge_repair_slot_counter = PurgeRepairSlotCounter::default(); let duplicate_slot = 2; let duplicate_state = DuplicateState::new_from_state( duplicate_slot, @@ -1646,6 +1665,7 @@ mod test { &mut heaviest_subtree_fork_choice, &mut duplicate_slots_to_repair, &ancestor_hashes_replay_update_sender, + &mut purge_repair_slot_counter, SlotStateUpdate::Duplicate(duplicate_state), ); assert!(duplicate_slots_tracker.contains(&duplicate_slot)); @@ -1681,6 +1701,7 @@ mod test { &mut heaviest_subtree_fork_choice, &mut duplicate_slots_to_repair, &ancestor_hashes_replay_update_sender, + &mut purge_repair_slot_counter, SlotStateUpdate::BankFrozen(bank_frozen_state), ); @@ -1730,6 +1751,7 @@ mod test { ); let root = 0; let mut duplicate_slots_tracker = DuplicateSlotsTracker::default(); + let mut purge_repair_slot_counter = PurgeRepairSlotCounter::default(); let mut gossip_duplicate_confirmed_slots = GossipDuplicateConfirmedSlots::default(); // Mark slot 2 as duplicate confirmed @@ -1751,6 +1773,7 @@ mod test { &mut heaviest_subtree_fork_choice, &mut DuplicateSlotsToRepair::default(), &ancestor_hashes_replay_update_sender, + &mut purge_repair_slot_counter, SlotStateUpdate::DuplicateConfirmed(duplicate_confirmed_state), ); assert!(heaviest_subtree_fork_choice @@ -1788,6 +1811,7 @@ mod test { &mut heaviest_subtree_fork_choice, &mut DuplicateSlotsToRepair::default(), &ancestor_hashes_replay_update_sender, + &mut purge_repair_slot_counter, SlotStateUpdate::Duplicate(duplicate_state), ); assert!(duplicate_slots_tracker.contains(&3)); @@ -1837,6 +1861,7 @@ mod test { let root = 0; let mut duplicate_slots_tracker = DuplicateSlotsTracker::default(); let mut gossip_duplicate_confirmed_slots = GossipDuplicateConfirmedSlots::default(); + let mut purge_repair_slot_counter = PurgeRepairSlotCounter::default(); // Mark 2 as duplicate let slot2_hash = bank_forks.read().unwrap().get(2).unwrap().hash(); @@ -1858,6 +1883,7 @@ mod test { &mut heaviest_subtree_fork_choice, &mut DuplicateSlotsToRepair::default(), &ancestor_hashes_replay_update_sender, + &mut purge_repair_slot_counter, SlotStateUpdate::Duplicate(duplicate_state), ); assert!(duplicate_slots_tracker.contains(&2)); @@ -1893,6 +1919,7 @@ mod test { &mut heaviest_subtree_fork_choice, &mut DuplicateSlotsToRepair::default(), &ancestor_hashes_replay_update_sender, + &mut purge_repair_slot_counter, SlotStateUpdate::DuplicateConfirmed(duplicate_confirmed_state), ); for slot in 0..=3 { @@ -1954,6 +1981,7 @@ mod test { let mut gossip_duplicate_confirmed_slots = GossipDuplicateConfirmedSlots::default(); let mut epoch_slots_frozen_slots = EpochSlotsFrozenSlots::default(); let mut duplicate_slots_to_repair = DuplicateSlotsToRepair::default(); + let mut purge_repair_slot_counter = PurgeRepairSlotCounter::default(); // Mark 3 as duplicate confirmed gossip_duplicate_confirmed_slots.insert(3, slot3_hash); @@ -1973,6 +2001,7 @@ mod test { &mut heaviest_subtree_fork_choice, &mut duplicate_slots_to_repair, &ancestor_hashes_replay_update_sender, + &mut purge_repair_slot_counter, SlotStateUpdate::DuplicateConfirmed(duplicate_confirmed_state), ); verify_all_slots_duplicate_confirmed(&bank_forks, &heaviest_subtree_fork_choice, 3, true); @@ -2001,6 +2030,7 @@ mod test { &mut heaviest_subtree_fork_choice, &mut duplicate_slots_to_repair, &ancestor_hashes_replay_update_sender, + &mut purge_repair_slot_counter, SlotStateUpdate::Duplicate(duplicate_state), ); assert!(duplicate_slots_tracker.contains(&1)); @@ -2032,6 +2062,7 @@ mod test { let mut gossip_duplicate_confirmed_slots = GossipDuplicateConfirmedSlots::default(); let mut epoch_slots_frozen_slots = EpochSlotsFrozenSlots::default(); let mut duplicate_slots_to_repair = DuplicateSlotsToRepair::default(); + let mut purge_repair_slot_counter = PurgeRepairSlotCounter::default(); // Mark 3 as only epoch slots frozen, matching our `slot3_hash`, should not duplicate // confirm the slot @@ -2055,6 +2086,7 @@ mod test { &mut heaviest_subtree_fork_choice, &mut duplicate_slots_to_repair, &ancestor_hashes_replay_update_sender, + &mut purge_repair_slot_counter, SlotStateUpdate::EpochSlotsFrozen(epoch_slots_frozen_state), ); verify_all_slots_duplicate_confirmed( @@ -2084,6 +2116,7 @@ mod test { &mut heaviest_subtree_fork_choice, &mut duplicate_slots_to_repair, &ancestor_hashes_replay_update_sender, + &mut purge_repair_slot_counter, SlotStateUpdate::DuplicateConfirmed(duplicate_confirmed_state), ); assert_eq!(*epoch_slots_frozen_slots.get(&3).unwrap(), slot3_hash); @@ -2120,6 +2153,7 @@ mod test { let mut gossip_duplicate_confirmed_slots = GossipDuplicateConfirmedSlots::default(); let mut epoch_slots_frozen_slots = EpochSlotsFrozenSlots::default(); let mut duplicate_slots_to_repair = DuplicateSlotsToRepair::default(); + let mut purge_repair_slot_counter = PurgeRepairSlotCounter::default(); // Mark 3 as only epoch slots frozen with different hash than the our // locally replayed `slot3_hash`. This should not duplicate confirm the slot, @@ -2145,6 +2179,7 @@ mod test { &mut heaviest_subtree_fork_choice, &mut duplicate_slots_to_repair, &ancestor_hashes_replay_update_sender, + &mut purge_repair_slot_counter, SlotStateUpdate::EpochSlotsFrozen(epoch_slots_frozen_state), ); assert_eq!(*duplicate_slots_to_repair.get(&3).unwrap(), mismatched_hash); @@ -2175,6 +2210,7 @@ mod test { &mut heaviest_subtree_fork_choice, &mut duplicate_slots_to_repair, &ancestor_hashes_replay_update_sender, + &mut purge_repair_slot_counter, SlotStateUpdate::DuplicateConfirmed(duplicate_confirmed_state), ); assert!(duplicate_slots_to_repair.is_empty()); diff --git a/core/src/replay_stage.rs b/core/src/replay_stage.rs index ba9158e1249194..e76eb596409a8c 100644 --- a/core/src/replay_stage.rs +++ b/core/src/replay_stage.rs @@ -94,6 +94,7 @@ const MAX_VOTE_REFRESH_INTERVAL_MILLIS: usize = 5000; // Expect this number to be small enough to minimize thread pool overhead while large enough // to be able to replay all active forks at the same time in most cases. const MAX_CONCURRENT_FORKS_TO_REPLAY: usize = 4; +const MAX_REPAIR_RETRY_LOOP_ATTEMPTS: usize = 10; lazy_static! { static ref PAR_THREAD_POOL: ThreadPool = rayon::ThreadPoolBuilder::new() @@ -457,6 +458,7 @@ impl ReplayStage { let mut epoch_slots_frozen_slots: EpochSlotsFrozenSlots = EpochSlotsFrozenSlots::default(); let mut duplicate_slots_to_repair = DuplicateSlotsToRepair::default(); + let mut purge_repair_slot_counter = PurgeRepairSlotCounter::default(); let mut unfrozen_gossip_verified_vote_hashes: UnfrozenGossipVerifiedVoteHashes = UnfrozenGossipVerifiedVoteHashes::default(); let mut latest_validator_votes_for_frozen_banks: LatestValidatorVotesForFrozenBanks = @@ -533,6 +535,7 @@ impl ReplayStage { &mut replay_timing, log_messages_bytes_limit, &prioritization_fee_cache, + &mut purge_repair_slot_counter, ); replay_active_banks_time.stop(); @@ -553,6 +556,7 @@ impl ReplayStage { &bank_forks, &mut duplicate_slots_to_repair, &ancestor_hashes_replay_update_sender, + &mut purge_repair_slot_counter, ); purge_dead_slots_time.stop(); @@ -570,6 +574,7 @@ impl ReplayStage { &mut heaviest_subtree_fork_choice, &mut duplicate_slots_to_repair, &ancestor_hashes_replay_update_sender, + &mut purge_repair_slot_counter, ); process_gossip_duplicate_confirmed_slots_time.stop(); @@ -602,6 +607,7 @@ impl ReplayStage { &mut heaviest_subtree_fork_choice, &mut duplicate_slots_to_repair, &ancestor_hashes_replay_update_sender, + &mut purge_repair_slot_counter, ); } process_duplicate_slots_time.stop(); @@ -653,6 +659,7 @@ impl ReplayStage { &mut epoch_slots_frozen_slots, &mut duplicate_slots_to_repair, &ancestor_hashes_replay_update_sender, + &mut purge_repair_slot_counter, ); } compute_slot_stats_time.stop(); @@ -904,6 +911,7 @@ impl ReplayStage { &bank_forks, &blockstore, poh_bank.map(|bank| bank.slot()), + &mut purge_repair_slot_counter, ); dump_then_repair_correct_slots_time.stop(); @@ -1154,6 +1162,7 @@ impl ReplayStage { bank_forks: &RwLock, blockstore: &Blockstore, poh_bank_slot: Option, + purge_repair_slot_counter: &mut PurgeRepairSlotCounter, ) { if duplicate_slots_to_repair.is_empty() { return; @@ -1222,9 +1231,16 @@ impl ReplayStage { bank_forks, blockstore, ); + let attempt_no = purge_repair_slot_counter + .entry(*duplicate_slot) + .and_modify(|x| *x += 1) + .or_insert(1); + if *attempt_no > MAX_REPAIR_RETRY_LOOP_ATTEMPTS { + panic!("We have tried to repair duplicate slot: {} more than {} times and are unable to freeze a block with bankhash {}, instead we have a block with bankhash {:?}. This is most likely a bug in the runtime. At this point manual intervention is needed to make progress. Exiting", *duplicate_slot, MAX_REPAIR_RETRY_LOOP_ATTEMPTS, *correct_hash, frozen_hash); + } warn!( - "Notifying repair service to repair duplicate slot: {}", - *duplicate_slot, + "Notifying repair service to repair duplicate slot: {}, attempt {}", + *duplicate_slot, *attempt_no, ); true // TODO: Send signal to repair to repair the correct version of @@ -1257,6 +1273,7 @@ impl ReplayStage { bank_forks: &RwLock, duplicate_slots_to_repair: &mut DuplicateSlotsToRepair, ancestor_hashes_replay_update_sender: &AncestorHashesReplayUpdateSender, + purge_repair_slot_counter: &mut PurgeRepairSlotCounter, ) { let root = bank_forks.read().unwrap().root(); for maybe_purgeable_duplicate_slots in epoch_slots_frozen_receiver.try_iter() { @@ -1290,6 +1307,7 @@ impl ReplayStage { fork_choice, duplicate_slots_to_repair, ancestor_hashes_replay_update_sender, + purge_repair_slot_counter, SlotStateUpdate::EpochSlotsFrozen(epoch_slots_frozen_state), ); } @@ -1433,6 +1451,7 @@ impl ReplayStage { fork_choice: &mut HeaviestSubtreeForkChoice, duplicate_slots_to_repair: &mut DuplicateSlotsToRepair, ancestor_hashes_replay_update_sender: &AncestorHashesReplayUpdateSender, + purge_repair_slot_counter: &mut PurgeRepairSlotCounter, ) { let root = bank_forks.read().unwrap().root(); for new_confirmed_slots in gossip_duplicate_confirmed_slots_receiver.try_iter() { @@ -1461,6 +1480,7 @@ impl ReplayStage { fork_choice, duplicate_slots_to_repair, ancestor_hashes_replay_update_sender, + purge_repair_slot_counter, SlotStateUpdate::DuplicateConfirmed(duplicate_confirmed_state), ); } @@ -1499,6 +1519,7 @@ impl ReplayStage { fork_choice: &mut HeaviestSubtreeForkChoice, duplicate_slots_to_repair: &mut DuplicateSlotsToRepair, ancestor_hashes_replay_update_sender: &AncestorHashesReplayUpdateSender, + purge_repair_slot_counter: &mut PurgeRepairSlotCounter, ) { let new_duplicate_slots: Vec = duplicate_slots_receiver.try_iter().collect(); let (root_slot, bank_hashes) = { @@ -1530,6 +1551,7 @@ impl ReplayStage { fork_choice, duplicate_slots_to_repair, ancestor_hashes_replay_update_sender, + purge_repair_slot_counter, SlotStateUpdate::Duplicate(duplicate_state), ); } @@ -1801,6 +1823,7 @@ impl ReplayStage { heaviest_subtree_fork_choice: &mut HeaviestSubtreeForkChoice, duplicate_slots_to_repair: &mut DuplicateSlotsToRepair, ancestor_hashes_replay_update_sender: &AncestorHashesReplayUpdateSender, + purge_repair_slot_counter: &mut PurgeRepairSlotCounter, ) { // Do not remove from progress map when marking dead! Needed by // `process_gossip_duplicate_confirmed_slots()` @@ -1854,6 +1877,7 @@ impl ReplayStage { heaviest_subtree_fork_choice, duplicate_slots_to_repair, ancestor_hashes_replay_update_sender, + purge_repair_slot_counter, SlotStateUpdate::Dead(dead_state), ); } @@ -2473,6 +2497,7 @@ impl ReplayStage { block_metadata_notifier: Option, replay_result_vec: &[ReplaySlotFromBlockstore], prioritization_fee_cache: &PrioritizationFeeCache, + purge_repair_slot_counter: &mut PurgeRepairSlotCounter, ) -> bool { // TODO: See if processing of blockstore replay results and bank completion can be made thread safe. let mut did_complete_bank = false; @@ -2503,6 +2528,7 @@ impl ReplayStage { heaviest_subtree_fork_choice, duplicate_slots_to_repair, ancestor_hashes_replay_update_sender, + purge_repair_slot_counter, ); // If the bank was corrupted, don't try to run the below logic to check if the // bank is completed @@ -2574,6 +2600,7 @@ impl ReplayStage { heaviest_subtree_fork_choice, duplicate_slots_to_repair, ancestor_hashes_replay_update_sender, + purge_repair_slot_counter, SlotStateUpdate::BankFrozen(bank_frozen_state), ); if let Some(sender) = bank_notification_sender { @@ -2666,6 +2693,7 @@ impl ReplayStage { replay_timing: &mut ReplayTiming, log_messages_bytes_limit: Option, prioritization_fee_cache: &PrioritizationFeeCache, + purge_repair_slot_counter: &mut PurgeRepairSlotCounter, ) -> bool { let active_bank_slots = bank_forks.read().unwrap().active_bank_slots(); let num_active_banks = active_bank_slots.len(); @@ -2757,6 +2785,7 @@ impl ReplayStage { block_metadata_notifier, &replay_result_vec, prioritization_fee_cache, + purge_repair_slot_counter, ) } else { false @@ -3297,6 +3326,7 @@ impl ReplayStage { did_newly_reach_threshold } + #[allow(clippy::too_many_arguments)] fn mark_slots_confirmed( confirmed_forks: &[(Slot, Hash)], blockstore: &Blockstore, @@ -3307,6 +3337,7 @@ impl ReplayStage { epoch_slots_frozen_slots: &mut EpochSlotsFrozenSlots, duplicate_slots_to_repair: &mut DuplicateSlotsToRepair, ancestor_hashes_replay_update_sender: &AncestorHashesReplayUpdateSender, + purge_repair_slot_counter: &mut PurgeRepairSlotCounter, ) { let root_slot = bank_forks.read().unwrap().root(); for (slot, frozen_hash) in confirmed_forks.iter() { @@ -3334,6 +3365,7 @@ impl ReplayStage { fork_choice, duplicate_slots_to_repair, ancestor_hashes_replay_update_sender, + purge_repair_slot_counter, SlotStateUpdate::DuplicateConfirmed(duplicate_confirmed_state), ); } @@ -4322,6 +4354,7 @@ pub(crate) mod tests { &mut heaviest_subtree_fork_choice, &mut DuplicateSlotsToRepair::default(), &ancestor_hashes_replay_update_sender, + &mut PurgeRepairSlotCounter::default(), ); } @@ -5756,6 +5789,7 @@ pub(crate) mod tests { // Mark 5 as duplicate blockstore.store_duplicate_slot(5, vec![], vec![]).unwrap(); let mut duplicate_slots_tracker = DuplicateSlotsTracker::default(); + let mut purge_repair_slot_counter = PurgeRepairSlotCounter::default(); let mut gossip_duplicate_confirmed_slots = GossipDuplicateConfirmedSlots::default(); let mut epoch_slots_frozen_slots = EpochSlotsFrozenSlots::default(); let bank5_hash = bank_forks.read().unwrap().bank_hash(5).unwrap(); @@ -5778,6 +5812,7 @@ pub(crate) mod tests { &mut vote_simulator.heaviest_subtree_fork_choice, &mut DuplicateSlotsToRepair::default(), &ancestor_hashes_replay_update_sender, + &mut purge_repair_slot_counter, SlotStateUpdate::Duplicate(duplicate_state), ); @@ -5810,6 +5845,7 @@ pub(crate) mod tests { &mut vote_simulator.heaviest_subtree_fork_choice, &mut duplicate_slots_to_repair, &ancestor_hashes_replay_update_sender, + &mut purge_repair_slot_counter, SlotStateUpdate::DuplicateConfirmed(duplicate_confirmed_state), ); // The confirmed hash is detected in `progress`, which means @@ -5910,6 +5946,7 @@ pub(crate) mod tests { &mut vote_simulator.heaviest_subtree_fork_choice, &mut DuplicateSlotsToRepair::default(), &ancestor_hashes_replay_update_sender, + &mut PurgeRepairSlotCounter::default(), SlotStateUpdate::Duplicate(duplicate_state), ); @@ -5943,6 +5980,7 @@ pub(crate) mod tests { &mut vote_simulator.heaviest_subtree_fork_choice, &mut DuplicateSlotsToRepair::default(), &ancestor_hashes_replay_update_sender, + &mut PurgeRepairSlotCounter::default(), SlotStateUpdate::Duplicate(duplicate_state), ); @@ -5977,6 +6015,7 @@ pub(crate) mod tests { &mut vote_simulator.heaviest_subtree_fork_choice, &mut duplicate_slots_to_repair, &ancestor_hashes_replay_update_sender, + &mut PurgeRepairSlotCounter::default(), SlotStateUpdate::DuplicateConfirmed(duplicate_confirmed_state), ); // The confirmed hash is detected in `progress`, which means @@ -6024,6 +6063,7 @@ pub(crate) mod tests { let mut duplicate_slots_to_repair = DuplicateSlotsToRepair::default(); duplicate_slots_to_repair.insert(1, Hash::new_unique()); duplicate_slots_to_repair.insert(2, Hash::new_unique()); + let mut purge_repair_slot_counter = PurgeRepairSlotCounter::default(); ReplayStage::dump_then_repair_correct_slots( &mut duplicate_slots_to_repair, @@ -6033,6 +6073,7 @@ pub(crate) mod tests { bank_forks, blockstore, None, + &mut purge_repair_slot_counter, ); let r_bank_forks = bank_forks.read().unwrap(); @@ -6050,6 +6091,9 @@ pub(crate) mod tests { assert!(descendants_result.is_none()); } } + assert_eq!(2, purge_repair_slot_counter.len()); + assert_eq!(1, *purge_repair_slot_counter.get(&1).unwrap()); + assert_eq!(1, *purge_repair_slot_counter.get(&2).unwrap()); } fn setup_vote_then_rollback( @@ -6126,6 +6170,7 @@ pub(crate) mod tests { heaviest_subtree_fork_choice, &mut duplicate_slots_to_repair, &ancestor_hashes_replay_update_sender, + &mut PurgeRepairSlotCounter::default(), SlotStateUpdate::DuplicateConfirmed(duplicate_confirmed_state), ); assert_eq!( @@ -6144,6 +6189,7 @@ pub(crate) mod tests { bank_forks, blockstore, None, + &mut PurgeRepairSlotCounter::default(), ); // Check everything was purged properly From 65fd637f10c06ea7526d44134026786d39f5d08a Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Tue, 7 Mar 2023 00:55:20 +0000 Subject: [PATCH 343/465] v1.14: Panic when shred index exceeds the max per slot (backport of #30555) (#30605) Panic when shred index exceeds the max per slot (#30555) Assert when shred index exceeds the max per slot (cherry picked from commit 7a8563f2c87bcb0d46e3011b9077a72f99384622) Co-authored-by: sakridge --- .../broadcast_stage/standard_broadcast_run.rs | 103 +++++++++++++++--- ledger/src/shred.rs | 2 +- ledger/src/shred/shred_code.rs | 3 +- 3 files changed, 89 insertions(+), 19 deletions(-) diff --git a/core/src/broadcast_stage/standard_broadcast_run.rs b/core/src/broadcast_stage/standard_broadcast_run.rs index 3e75e237da1b3e..a25758c16e0ed4 100644 --- a/core/src/broadcast_stage/standard_broadcast_run.rs +++ b/core/src/broadcast_stage/standard_broadcast_run.rs @@ -9,7 +9,10 @@ use { broadcast_stage::broadcast_utils::UnfinishedSlotInfo, cluster_nodes::ClusterNodesCache, }, solana_entry::entry::Entry, - solana_ledger::shred::{ProcessShredsStats, ReedSolomonCache, Shred, ShredFlags, Shredder}, + solana_ledger::{ + blockstore, + shred::{shred_code, ProcessShredsStats, ReedSolomonCache, Shred, ShredFlags, Shredder}, + }, solana_sdk::{ genesis_config::ClusterType, signature::Keypair, @@ -33,6 +36,11 @@ pub struct StandardBroadcastRun { reed_solomon_cache: Arc, } +#[derive(Debug)] +enum BroadcastError { + TooManyShreds, +} + impl StandardBroadcastRun { pub(super) fn new(shred_version: u16) -> Self { let cluster_nodes_cache = Arc::new(ClusterNodesCache::::new( @@ -98,6 +106,7 @@ impl StandardBroadcastRun { } } + #[allow(clippy::too_many_arguments)] fn entries_to_shreds( &mut self, keypair: &Keypair, @@ -107,10 +116,15 @@ impl StandardBroadcastRun { is_slot_end: bool, cluster_type: ClusterType, process_stats: &mut ProcessShredsStats, - ) -> ( - Vec, // data shreds - Vec, // coding shreds - ) { + max_data_shreds_per_slot: u32, + max_code_shreds_per_slot: u32, + ) -> std::result::Result< + ( + Vec, // data shreds + Vec, // coding shreds + ), + BroadcastError, + > { let (slot, parent_slot) = self.current_slot_and_parent.unwrap(); let (next_shred_index, next_code_index) = match &self.unfinished_slot { Some(state) => (state.next_shred_index, state.next_code_index), @@ -123,7 +137,7 @@ impl StandardBroadcastRun { process_stats.num_extant_slots += 1; // This is a faulty situation that should not happen. // Refrain from generating shreds for the slot. - return (Vec::default(), Vec::default()); + return Ok((Vec::default(), Vec::default())); } } (0u32, 0u32) @@ -150,17 +164,24 @@ impl StandardBroadcastRun { Some(index) => index + 1, None => next_shred_index, }; + + if next_shred_index > max_data_shreds_per_slot { + return Err(BroadcastError::TooManyShreds); + } let next_code_index = match coding_shreds.iter().map(Shred::index).max() { Some(index) => index + 1, None => next_code_index, }; + if next_code_index > max_code_shreds_per_slot { + return Err(BroadcastError::TooManyShreds); + } self.unfinished_slot = Some(UnfinishedSlotInfo { next_shred_index, next_code_index, slot, parent: parent_slot, }); - (data_shreds, coding_shreds) + Ok((data_shreds, coding_shreds)) } #[cfg(test)] @@ -233,15 +254,19 @@ impl StandardBroadcastRun { // 2) Convert entries to shreds and coding shreds let is_last_in_slot = last_tick_height == bank.max_tick_height(); let reference_tick = bank.tick_height() % bank.ticks_per_slot(); - let (data_shreds, coding_shreds) = self.entries_to_shreds( - keypair, - &receive_results.entries, - blockstore, - reference_tick as u8, - is_last_in_slot, - cluster_type, - &mut process_stats, - ); + let (data_shreds, coding_shreds) = self + .entries_to_shreds( + keypair, + &receive_results.entries, + blockstore, + reference_tick as u8, + is_last_in_slot, + cluster_type, + &mut process_stats, + blockstore::MAX_DATA_SHREDS_PER_SLOT as u32, + shred_code::MAX_CODE_SHREDS_PER_SLOT as u32, + ) + .unwrap(); // Insert the first data shred synchronously so that blockstore stores // that the leader started this block. This must be done before the // blocks are sent out over the wire. By contrast Self::insert skips @@ -786,4 +811,50 @@ mod test { .unwrap(); assert!(standard_broadcast_run.unfinished_slot.is_none()) } + + #[test] + fn entries_to_shreds_max() { + solana_logger::setup(); + let mut bs = StandardBroadcastRun::new(0); + bs.current_slot_and_parent = Some((1, 0)); + let keypair = Keypair::new(); + let entries = create_ticks(10_000, 1, solana_sdk::hash::Hash::default()); + + let ledger_path = get_tmp_ledger_path!(); + let blockstore = Arc::new( + Blockstore::open(&ledger_path).expect("Expected to be able to open database ledger"), + ); + let mut stats = ProcessShredsStats::default(); + + let (data, coding) = bs + .entries_to_shreds( + &keypair, + &entries[0..entries.len() - 2], + &blockstore, + 0, + false, + ClusterType::Development, + &mut stats, + 1000, + 1000, + ) + .unwrap(); + info!("{} {}", data.len(), coding.len()); + assert!(!data.is_empty()); + assert!(!coding.is_empty()); + + let r = bs.entries_to_shreds( + &keypair, + &entries, + &blockstore, + 0, + false, + ClusterType::Development, + &mut stats, + 10, + 10, + ); + info!("{:?}", r); + assert_matches!(r, Err(BroadcastError::TooManyShreds)); + } } diff --git a/ledger/src/shred.rs b/ledger/src/shred.rs index e3bade08743db2..fb6a66bff3cde4 100644 --- a/ledger/src/shred.rs +++ b/ledger/src/shred.rs @@ -83,7 +83,7 @@ pub use { mod common; mod legacy; mod merkle; -mod shred_code; +pub mod shred_code; mod shred_data; mod stats; mod traits; diff --git a/ledger/src/shred/shred_code.rs b/ledger/src/shred/shred_code.rs index 5e3f8d3a8cfef8..00632650f51a10 100644 --- a/ledger/src/shred/shred_code.rs +++ b/ledger/src/shred/shred_code.rs @@ -14,8 +14,7 @@ use { }; const_assert_eq!(MAX_CODE_SHREDS_PER_SLOT, 32_768 * 17); -pub(crate) const MAX_CODE_SHREDS_PER_SLOT: usize = - MAX_DATA_SHREDS_PER_SLOT * (ERASURE_BATCH_SIZE[1] - 1); +pub const MAX_CODE_SHREDS_PER_SLOT: usize = MAX_DATA_SHREDS_PER_SLOT * (ERASURE_BATCH_SIZE[1] - 1); const_assert_eq!(ShredCode::SIZE_OF_PAYLOAD, 1228); From 6a020a6999698fd2fd685eb85f134e1a51b64269 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Tue, 7 Mar 2023 02:49:15 +0000 Subject: [PATCH 344/465] v1.14: reduces MAX_CODE_SHREDS_PER_SLOT (backport of #30543) (#30622) reduces MAX_CODE_SHREDS_PER_SLOT (#30543) https://github.com/solana-labs/solana/pull/26070 introduced MAX_CODE_SHREDS_PER_SLOT which because of how coding shreds are generated was later set larger than MAX_DATA_SHREDS_PER_SLOT. The old code was discarding: index >= MAX_DATA_SHREDS_PER_SLOT regardless of if the shred is code or data: https://github.com/solana-labs/solana/blob/v1.13.6/core/src/window_service.rs#L193-L195 Since that many code (or data) shreds will probably never result in a rooted slot anyways, the commit reduces MAX_CODE_SHREDS_PER_SLOT to what previously was the effective limit. (cherry picked from commit 06a841942380d25f579489c11fe4c3f09beb9c36) Co-authored-by: behzad nouri --- ledger/src/shred/legacy.rs | 2 +- ledger/src/shred/shred_code.rs | 19 ++++++++----------- ledger/src/shredder.rs | 2 +- 3 files changed, 10 insertions(+), 13 deletions(-) diff --git a/ledger/src/shred/legacy.rs b/ledger/src/shred/legacy.rs index e1a077bb383554..06022da8833bbf 100644 --- a/ledger/src/shred/legacy.rs +++ b/ledger/src/shred/legacy.rs @@ -442,7 +442,7 @@ mod test { shred.common_header.index = MAX_CODE_SHREDS_PER_SLOT as u32; assert_matches!( shred.sanitize(), - Err(Error::InvalidShredIndex(ShredType::Code, 557_056)) + Err(Error::InvalidShredIndex(ShredType::Code, 32_768)) ); } // pos >= num_coding is invalid. diff --git a/ledger/src/shred/shred_code.rs b/ledger/src/shred/shred_code.rs index 00632650f51a10..d6d1f543c3748f 100644 --- a/ledger/src/shred/shred_code.rs +++ b/ledger/src/shred/shred_code.rs @@ -1,20 +1,17 @@ use { - crate::{ - shred::{ - common::dispatch, - legacy, merkle, - traits::{Shred, ShredCode as ShredCodeTrait}, - CodingShredHeader, Error, ShredCommonHeader, ShredType, SignedData, - DATA_SHREDS_PER_FEC_BLOCK, MAX_DATA_SHREDS_PER_SLOT, SIZE_OF_NONCE, - }, - shredder::ERASURE_BATCH_SIZE, + crate::shred::{ + common::dispatch, + legacy, merkle, + traits::{Shred, ShredCode as ShredCodeTrait}, + CodingShredHeader, Error, ShredCommonHeader, ShredType, SignedData, + DATA_SHREDS_PER_FEC_BLOCK, MAX_DATA_SHREDS_PER_SLOT, SIZE_OF_NONCE, }, solana_sdk::{clock::Slot, packet::PACKET_DATA_SIZE, signature::Signature}, static_assertions::const_assert_eq, }; -const_assert_eq!(MAX_CODE_SHREDS_PER_SLOT, 32_768 * 17); -pub const MAX_CODE_SHREDS_PER_SLOT: usize = MAX_DATA_SHREDS_PER_SLOT * (ERASURE_BATCH_SIZE[1] - 1); +const_assert_eq!(MAX_CODE_SHREDS_PER_SLOT, 32_768); +pub const MAX_CODE_SHREDS_PER_SLOT: usize = MAX_DATA_SHREDS_PER_SLOT; const_assert_eq!(ShredCode::SIZE_OF_PAYLOAD, 1228); diff --git a/ledger/src/shredder.rs b/ledger/src/shredder.rs index 2c7dd0369c8ef8..4889c8e02e6ee5 100644 --- a/ledger/src/shredder.rs +++ b/ledger/src/shredder.rs @@ -1233,7 +1233,7 @@ mod tests { #[test] fn test_max_shreds_per_slot() { - for num_data_shreds in 0..128 { + for num_data_shreds in 32..128 { let num_coding_shreds = get_erasure_batch_size(num_data_shreds) .checked_sub(num_data_shreds) .unwrap(); From ae0d78516553d6d9d2853a3c2411a1050bf6142e Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Tue, 7 Mar 2023 17:53:44 +0000 Subject: [PATCH 345/465] v1.14: adds hash domain to merkle shreds (backport of #29339) (#30612) adds hash domain to merkle shreds (#29339) (cherry picked from commit 06bb71c79fca73ebbf3a2d4bbbc87890adc4e9c7) Co-authored-by: behzad nouri --- ledger/src/shred/merkle.rs | 6 ++++-- ledger/src/shredder.rs | 4 +--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/ledger/src/shred/merkle.rs b/ledger/src/shred/merkle.rs index 0670748e0089da..f005e949daff5e 100644 --- a/ledger/src/shred/merkle.rs +++ b/ledger/src/shred/merkle.rs @@ -43,8 +43,10 @@ const_assert_eq!(ShredData::SIZE_OF_PAYLOAD, 1203); // Defense against second preimage attack: // https://en.wikipedia.org/wiki/Merkle_tree#Second_preimage_attack -const MERKLE_HASH_PREFIX_LEAF: &[u8] = &[0x00]; -const MERKLE_HASH_PREFIX_NODE: &[u8] = &[0x01]; +// Following Certificate Transparency, 0x00 and 0x01 bytes are prepended to +// hash data when computing leaf and internal node hashes respectively. +const MERKLE_HASH_PREFIX_LEAF: &[u8] = b"\x00SOLANA_MERKLE_SHREDS_LEAF"; +const MERKLE_HASH_PREFIX_NODE: &[u8] = b"\x01SOLANA_MERKLE_SHREDS_NODE"; pub(crate) type MerkleRoot = MerkleProofEntry; type MerkleProofEntry = [u8; 20]; diff --git a/ledger/src/shredder.rs b/ledger/src/shredder.rs index 4889c8e02e6ee5..48573207da8f12 100644 --- a/ledger/src/shredder.rs +++ b/ledger/src/shredder.rs @@ -7,7 +7,7 @@ use { lru::LruCache, rayon::{prelude::*, ThreadPool}, reed_solomon_erasure::{ - galois_8::Field, + galois_8::ReedSolomon, Error::{InvalidIndex, TooFewDataShards, TooFewShardsPresent}, }, solana_entry::entry::Entry, @@ -38,8 +38,6 @@ pub(crate) const ERASURE_BATCH_SIZE: [usize; 33] = [ 55, 56, 58, 59, 60, 62, 63, 64, // 32 ]; -type ReedSolomon = reed_solomon_erasure::ReedSolomon; - pub struct ReedSolomonCache( Mutex>>, ); From 8c6b6c17c58dc5ca9a833595f437b966e6a1d359 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Tue, 7 Mar 2023 18:37:32 +0000 Subject: [PATCH 346/465] v1.14: removes the merkle root from shreds binary (backport of #29427) (#30613) * removes the merkle root from shreds binary (#29427) https://github.com/solana-labs/solana/pull/29445 makes it unnecessary to embed merkle roots into shreds binary. This commit removes the merkle root from shreds binary. This adds 20 bytes to shreds capacity to store more data. Additionally since we no longer need to truncate the merkle root, the signature would be on the full 32 bytes of hash as opposed to the truncated one. Also signature verification would now effectively verify merkle proof as well, so we no longer need to verify merkle proof in the sanitize implementation. (cherry picked from commit cf0a149add033e644eb1d18b1694192825e84323) # Conflicts: # ledger/src/shred.rs * resolves mergify merge conflicts --------- Co-authored-by: behzad nouri --- ledger/src/shred.rs | 52 ++-- ledger/src/shred/merkle.rs | 437 +++++++++++++-------------------- ledger/src/shred/shred_data.rs | 4 +- ledger/src/sigverify_shreds.rs | 15 +- 4 files changed, 216 insertions(+), 292 deletions(-) diff --git a/ledger/src/shred.rs b/ledger/src/shred.rs index fb6a66bff3cde4..2d8af56c83ad5b 100644 --- a/ledger/src/shred.rs +++ b/ledger/src/shred.rs @@ -49,7 +49,6 @@ //! So, given a) - c), we must restrict data shred's payload length such that the entire coding //! payload can fit into one coding shred / packet. -pub(crate) use self::merkle::{MerkleRoot, SIZE_OF_MERKLE_ROOT}; #[cfg(test)] pub(crate) use self::shred_code::MAX_CODE_SHREDS_PER_SLOT; use { @@ -193,7 +192,7 @@ pub enum ShredType { enum ShredVariant { LegacyCode, // 0b0101_1010 LegacyData, // 0b1010_0101 - // proof_size is the number of proof entries in the merkle tree branch. + // proof_size is the number of merkle proof entries. MerkleCode(/*proof_size:*/ u8), // 0b0100_???? MerkleData(/*proof_size:*/ u8), // 0b1000_???? } @@ -231,16 +230,17 @@ pub enum Shred { ShredData(ShredData), } +#[derive(Debug, PartialEq, Eq)] pub(crate) enum SignedData<'a> { Chunk(&'a [u8]), // Chunk of payload past signature. - MerkleRoot(MerkleRoot), + MerkleRoot(Hash), } impl<'a> AsRef<[u8]> for SignedData<'a> { fn as_ref(&self) -> &[u8] { match self { Self::Chunk(chunk) => chunk, - Self::MerkleRoot(root) => root, + Self::MerkleRoot(root) => root.as_ref(), } } } @@ -656,16 +656,17 @@ pub mod layout { // Returns offsets within the shred payload which is signed. pub(crate) fn get_signed_data_offsets(shred: &[u8]) -> Option> { - let offsets = match get_shred_variant(shred).ok()? { - ShredVariant::LegacyCode | ShredVariant::LegacyData => legacy::SIGNED_MESSAGE_OFFSETS, - ShredVariant::MerkleCode(proof_size) => { - merkle::ShredCode::get_signed_data_offsets(proof_size)? - } - ShredVariant::MerkleData(proof_size) => { - merkle::ShredData::get_signed_data_offsets(proof_size)? + match get_shred_variant(shred).ok()? { + ShredVariant::LegacyCode | ShredVariant::LegacyData => { + let offsets = self::legacy::SIGNED_MESSAGE_OFFSETS; + (offsets.end <= shred.len()).then(|| offsets) } - }; - (offsets.end <= shred.len()).then(|| offsets) + // Merkle shreds sign merkle tree root which can be recovered from + // the merkle proof embedded in the payload but itself is not + // stored the payload. + ShredVariant::MerkleCode(_) => None, + ShredVariant::MerkleData(_) => None, + } } pub(crate) fn get_reference_tick(shred: &[u8]) -> Result { @@ -679,7 +680,7 @@ pub mod layout { Ok(flags & ShredFlags::SHRED_TICK_REFERENCE_MASK.bits()) } - pub(crate) fn get_merkle_root(shred: &[u8]) -> Option { + pub(crate) fn get_merkle_root(shred: &[u8]) -> Option { match get_shred_variant(shred).ok()? { ShredVariant::LegacyCode | ShredVariant::LegacyData => None, ShredVariant::MerkleCode(proof_size) => { @@ -716,15 +717,15 @@ pub mod layout { modify_packet(rng, packet, 0..SIGNATURE_BYTES); } else { // Corrupt one byte within the signed data offsets. - let size = shred.len(); - let offsets = get_signed_data_offsets(shred).unwrap(); - modify_packet(rng, packet, offsets); - if let Some(proof_size) = merkle_proof_size { - // Also need to corrupt the merkle proof. - // Proof entries are each 20 bytes at the end of shreds. - let offset = usize::from(proof_size) * 20; - modify_packet(rng, packet, size - offset..size); - } + let offsets = merkle_proof_size + .map(|merkle_proof_size| { + // Need to corrupt the merkle proof. + // Proof entries are each 20 bytes at the end of shreds. + let offset = usize::from(merkle_proof_size) * 20; + shred.len() - offset..shred.len() + }) + .or_else(|| get_signed_data_offsets(shred)); + modify_packet(rng, packet, offsets.unwrap()); } // Assert that the signature no longer verifies. let shred = get_shred(packet).unwrap(); @@ -734,8 +735,9 @@ pub mod layout { let pubkey = keypairs[&slot].pubkey(); let data = get_signed_data(shred).unwrap(); assert!(!signature.verify(pubkey.as_ref(), data.as_ref())); - let offsets = get_signed_data_offsets(shred).unwrap(); - assert!(!signature.verify(pubkey.as_ref(), &shred[offsets])); + if let Some(offsets) = get_signed_data_offsets(shred) { + assert!(!signature.verify(pubkey.as_ref(), &shred[offsets])); + } } else { // Slot may have been corrupted and no longer mapping to a keypair. let pubkey = keypairs.get(&slot).map(Keypair::pubkey).unwrap_or_default(); diff --git a/ledger/src/shred/merkle.rs b/ledger/src/shred/merkle.rs index f005e949daff5e..f174aece65cbac 100644 --- a/ledger/src/shred/merkle.rs +++ b/ledger/src/shred/merkle.rs @@ -35,8 +35,6 @@ use { }, }; -const_assert_eq!(SIZE_OF_MERKLE_ROOT, 20); -pub(crate) const SIZE_OF_MERKLE_ROOT: usize = std::mem::size_of::(); const_assert_eq!(SIZE_OF_MERKLE_PROOF_ENTRY, 20); const SIZE_OF_MERKLE_PROOF_ENTRY: usize = std::mem::size_of::(); const_assert_eq!(ShredData::SIZE_OF_PAYLOAD, 1203); @@ -48,11 +46,10 @@ const_assert_eq!(ShredData::SIZE_OF_PAYLOAD, 1203); const MERKLE_HASH_PREFIX_LEAF: &[u8] = b"\x00SOLANA_MERKLE_SHREDS_LEAF"; const MERKLE_HASH_PREFIX_NODE: &[u8] = b"\x01SOLANA_MERKLE_SHREDS_NODE"; -pub(crate) type MerkleRoot = MerkleProofEntry; type MerkleProofEntry = [u8; 20]; -// Layout: {common, data} headers | data buffer | merkle branch -// The slice past signature and before merkle branch is erasure coded. +// Layout: {common, data} headers | data buffer | merkle proof +// The slice past signature and before the merkle proof is erasure coded. // Same slice is hashed to generate merkle tree. // The root of merkle tree is signed. #[derive(Clone, Debug, Eq, PartialEq)] @@ -62,8 +59,8 @@ pub struct ShredData { payload: Vec, } -// Layout: {common, coding} headers | erasure coded shard | merkle branch -// The slice past signature and before merkle branch is hashed to generate +// Layout: {common, coding} headers | erasure coded shard | merkle proof +// The slice past signature and before the merkle proof is hashed to generate // merkle tree. The root of merkle tree is signed. #[derive(Clone, Debug, Eq, PartialEq)] pub struct ShredCode { @@ -78,22 +75,23 @@ pub(super) enum Shred { ShredData(ShredData), } -struct MerkleBranch<'a> { - root: &'a MerkleRoot, - proof: Vec<&'a MerkleProofEntry>, -} - impl Shred { dispatch!(fn common_header(&self) -> &ShredCommonHeader); dispatch!(fn erasure_shard_as_slice(&self) -> Result<&[u8], Error>); dispatch!(fn erasure_shard_index(&self) -> Result); - dispatch!(fn merkle_root(&self) -> Result<&MerkleRoot, Error>); - dispatch!(fn merkle_tree_node(&self) -> Result); + dispatch!(fn merkle_node(&self) -> Result); dispatch!(fn payload(&self) -> &Vec); - dispatch!(fn sanitize(&self, verify_merkle_proof: bool) -> Result<(), Error>); - dispatch!(fn set_merkle_branch(&mut self, merkle_branch: &MerkleBranch) -> Result<(), Error>); + dispatch!(fn sanitize(&self) -> Result<(), Error>); + dispatch!(fn set_merkle_proof(&mut self, proof: &[&MerkleProofEntry]) -> Result<(), Error>); dispatch!(fn set_signature(&mut self, signature: Signature)); - dispatch!(fn signed_data(&self) -> Result); + dispatch!(fn signed_data(&self) -> Result); + + fn merkle_proof(&self) -> Result, Error> { + match self { + Self::ShredCode(shred) => shred.merkle_proof().map(Either::Left), + Self::ShredData(shred) => shred.merkle_proof().map(Either::Right), + } + } #[must_use] fn verify(&self, pubkey: &Pubkey) -> bool { @@ -118,6 +116,8 @@ impl Shred { #[cfg(test)] impl Shred { + dispatch!(fn merkle_root(&self) -> Result); + fn index(&self) -> u32 { self.common_header().index } @@ -128,7 +128,7 @@ impl Shred { } impl ShredData { - // proof_size is the number of proof entries in the merkle tree branch. + // proof_size is the number of merkle proof entries. fn proof_size(&self) -> Result { match self.common_header.shred_variant { ShredVariant::MerkleData(proof_size) => Ok(proof_size), @@ -144,53 +144,35 @@ impl ShredData { pub(super) fn capacity(proof_size: u8) -> Result { Self::SIZE_OF_PAYLOAD .checked_sub( - Self::SIZE_OF_HEADERS - + SIZE_OF_MERKLE_ROOT - + usize::from(proof_size) * SIZE_OF_MERKLE_PROOF_ENTRY, + Self::SIZE_OF_HEADERS + usize::from(proof_size) * SIZE_OF_MERKLE_PROOF_ENTRY, ) .ok_or(Error::InvalidProofSize(proof_size)) } - pub(super) fn get_signed_data_offsets(proof_size: u8) -> Option> { - let data_buffer_size = Self::capacity(proof_size).ok()?; - let offset = Self::SIZE_OF_HEADERS + data_buffer_size; - Some(offset..offset + SIZE_OF_MERKLE_ROOT) + // Where the merkle proof starts in the shred binary. + fn proof_offset(proof_size: u8) -> Result { + Ok(Self::SIZE_OF_HEADERS + Self::capacity(proof_size)?) } - fn merkle_root(&self) -> Result<&MerkleRoot, Error> { + fn merkle_root(&self) -> Result { let proof_size = self.proof_size()?; - let offset = Self::SIZE_OF_HEADERS + Self::capacity(proof_size)?; - let root = self - .payload - .get(offset..offset + SIZE_OF_MERKLE_ROOT) - .ok_or(Error::InvalidPayloadSize(self.payload.len()))?; - Ok(<&MerkleRoot>::try_from(root).unwrap()) + let index = self.erasure_shard_index()?; + let proof_offset = Self::proof_offset(proof_size)?; + let proof = get_merkle_proof(&self.payload, proof_offset, proof_size)?; + let node = get_merkle_node(&self.payload, SIZE_OF_SIGNATURE..proof_offset)?; + get_merkle_root(index, node, proof) } - fn merkle_branch(&self) -> Result { + fn merkle_proof(&self) -> Result, Error> { let proof_size = self.proof_size()?; - let offset = Self::SIZE_OF_HEADERS + Self::capacity(proof_size)?; - let size = SIZE_OF_MERKLE_ROOT + usize::from(proof_size) * SIZE_OF_MERKLE_PROOF_ENTRY; - let merkle_branch = MerkleBranch::try_from( - self.payload - .get(offset..offset + size) - .ok_or(Error::InvalidPayloadSize(self.payload.len()))?, - )?; - if merkle_branch.proof.len() != usize::from(proof_size) { - return Err(Error::InvalidMerkleProof); - } - Ok(merkle_branch) - } - - fn merkle_tree_node(&self) -> Result { - let chunk = self.erasure_shard_as_slice()?; - Ok(hashv(&[MERKLE_HASH_PREFIX_LEAF, chunk])) + let proof_offset = Self::proof_offset(proof_size)?; + get_merkle_proof(&self.payload, proof_offset, proof_size) } - fn verify_merkle_proof(&self) -> Result { - let node = self.merkle_tree_node()?; - let index = self.erasure_shard_index()?; - Ok(verify_merkle_proof(index, node, &self.merkle_branch()?)) + fn merkle_node(&self) -> Result { + let proof_size = self.proof_size()?; + let proof_offset = Self::proof_offset(proof_size)?; + get_merkle_node(&self.payload, SIZE_OF_SIGNATURE..proof_offset) } fn from_recovered_shard(signature: &Signature, mut shard: Vec) -> Result { @@ -217,41 +199,28 @@ impl ShredData { data_header, payload: shard, }; - // Merkle proof is not erasure coded and is not yet available here. - shred.sanitize(/*verify_merkle_proof:*/ false)?; + shred.sanitize()?; Ok(shred) } - fn set_merkle_branch(&mut self, merkle_branch: &MerkleBranch) -> Result<(), Error> { + fn set_merkle_proof(&mut self, proof: &[&MerkleProofEntry]) -> Result<(), Error> { let proof_size = self.proof_size()?; - if merkle_branch.proof.len() != usize::from(proof_size) { + if proof.len() != usize::from(proof_size) { return Err(Error::InvalidMerkleProof); } - let offset = Self::SIZE_OF_HEADERS + Self::capacity(proof_size)?; + let proof_offset = Self::proof_offset(proof_size)?; let mut cursor = Cursor::new( self.payload - .get_mut(offset..) + .get_mut(proof_offset..) .ok_or(Error::InvalidProofSize(proof_size))?, ); - bincode::serialize_into(&mut cursor, &merkle_branch.root)?; - for entry in &merkle_branch.proof { + for entry in proof { bincode::serialize_into(&mut cursor, entry)?; } Ok(()) } - fn sanitize(&self, verify_merkle_proof: bool) -> Result<(), Error> { - let shred_variant = self.common_header.shred_variant; - if !matches!(shred_variant, ShredVariant::MerkleData(_)) { - return Err(Error::InvalidShredVariant); - } - if verify_merkle_proof && !self.verify_merkle_proof()? { - return Err(Error::InvalidMerkleProof); - } - shred_data::sanitize(self) - } - - pub(super) fn get_merkle_root(shred: &[u8], proof_size: u8) -> Option { + pub(super) fn get_merkle_root(shred: &[u8], proof_size: u8) -> Option { debug_assert_eq!( shred::layout::get_shred_variant(shred).unwrap(), ShredVariant::MerkleData(proof_size) @@ -266,14 +235,15 @@ impl ShredData { .map(usize::try_from)? .ok()? }; - // Where the merkle branch starts in the shred binary. - let offset = Self::SIZE_OF_HEADERS + Self::capacity(proof_size).ok()?; - get_merkle_root(shred, proof_size, index, offset) + let proof_offset = Self::proof_offset(proof_size).ok()?; + let proof = get_merkle_proof(shred, proof_offset, proof_size).ok()?; + let node = get_merkle_node(shred, SIZE_OF_SIGNATURE..proof_offset).ok()?; + get_merkle_root(index, node, proof).ok() } } impl ShredCode { - // proof_size is the number of proof entries in the merkle tree branch. + // proof_size is the number of merkle proof entries. fn proof_size(&self) -> Result { match self.common_header.shred_variant { ShredVariant::MerkleCode(proof_size) => Ok(proof_size), @@ -283,61 +253,39 @@ impl ShredCode { // Size of buffer embedding erasure codes. fn capacity(proof_size: u8) -> Result { - // Merkle branch is generated and signed after coding shreds are + // Merkle proof is generated and signed after coding shreds are // generated. Coding shred headers cannot be erasure coded either. Self::SIZE_OF_PAYLOAD .checked_sub( - Self::SIZE_OF_HEADERS - + SIZE_OF_MERKLE_ROOT - + SIZE_OF_MERKLE_PROOF_ENTRY * usize::from(proof_size), + Self::SIZE_OF_HEADERS + SIZE_OF_MERKLE_PROOF_ENTRY * usize::from(proof_size), ) .ok_or(Error::InvalidProofSize(proof_size)) } - fn merkle_root(&self) -> Result<&MerkleRoot, Error> { - let proof_size = self.proof_size()?; - let offset = Self::SIZE_OF_HEADERS + Self::capacity(proof_size)?; - let root = self - .payload - .get(offset..offset + SIZE_OF_MERKLE_ROOT) - .ok_or(Error::InvalidPayloadSize(self.payload.len()))?; - Ok(<&MerkleRoot>::try_from(root).unwrap()) + // Where the merkle proof starts in the shred binary. + fn proof_offset(proof_size: u8) -> Result { + Ok(Self::SIZE_OF_HEADERS + Self::capacity(proof_size)?) } - fn merkle_branch(&self) -> Result { + fn merkle_root(&self) -> Result { let proof_size = self.proof_size()?; - let offset = Self::SIZE_OF_HEADERS + Self::capacity(proof_size)?; - let size = SIZE_OF_MERKLE_ROOT + usize::from(proof_size) * SIZE_OF_MERKLE_PROOF_ENTRY; - let merkle_branch = MerkleBranch::try_from( - self.payload - .get(offset..offset + size) - .ok_or(Error::InvalidPayloadSize(self.payload.len()))?, - )?; - if merkle_branch.proof.len() != usize::from(proof_size) { - return Err(Error::InvalidMerkleProof); - } - Ok(merkle_branch) + let index = self.erasure_shard_index()?; + let proof_offset = Self::proof_offset(proof_size)?; + let proof = get_merkle_proof(&self.payload, proof_offset, proof_size)?; + let node = get_merkle_node(&self.payload, SIZE_OF_SIGNATURE..proof_offset)?; + get_merkle_root(index, node, proof) } - fn merkle_tree_node(&self) -> Result { + fn merkle_proof(&self) -> Result, Error> { let proof_size = self.proof_size()?; - let shard_size = Self::capacity(proof_size)?; - let chunk = self - .payload - .get(SIZE_OF_SIGNATURE..Self::SIZE_OF_HEADERS + shard_size) - .ok_or(Error::InvalidPayloadSize(self.payload.len()))?; - Ok(hashv(&[MERKLE_HASH_PREFIX_LEAF, chunk])) + let proof_offset = Self::proof_offset(proof_size)?; + get_merkle_proof(&self.payload, proof_offset, proof_size) } - fn verify_merkle_proof(&self) -> Result { - let node = self.merkle_tree_node()?; - let index = self.erasure_shard_index()?; - Ok(verify_merkle_proof(index, node, &self.merkle_branch()?)) - } - - pub(super) fn get_signed_data_offsets(proof_size: u8) -> Option> { - let offset = Self::SIZE_OF_HEADERS + Self::capacity(proof_size).ok()?; - Some(offset..offset + SIZE_OF_MERKLE_ROOT) + fn merkle_node(&self) -> Result { + let proof_size = self.proof_size()?; + let proof_offset = Self::proof_offset(proof_size)?; + get_merkle_node(&self.payload, SIZE_OF_SIGNATURE..proof_offset) } fn from_recovered_shard( @@ -366,41 +314,28 @@ impl ShredCode { coding_header, payload: shard, }; - // Merkle proof is not erasure coded and is not yet available here. - shred.sanitize(/*verify_merkle_proof:*/ false)?; + shred.sanitize()?; Ok(shred) } - fn set_merkle_branch(&mut self, merkle_branch: &MerkleBranch) -> Result<(), Error> { + fn set_merkle_proof(&mut self, proof: &[&MerkleProofEntry]) -> Result<(), Error> { let proof_size = self.proof_size()?; - if merkle_branch.proof.len() != usize::from(proof_size) { + if proof.len() != usize::from(proof_size) { return Err(Error::InvalidMerkleProof); } - let offset = Self::SIZE_OF_HEADERS + Self::capacity(proof_size)?; + let proof_offset = Self::proof_offset(proof_size)?; let mut cursor = Cursor::new( self.payload - .get_mut(offset..) + .get_mut(proof_offset..) .ok_or(Error::InvalidProofSize(proof_size))?, ); - bincode::serialize_into(&mut cursor, &merkle_branch.root)?; - for entry in &merkle_branch.proof { + for entry in proof { bincode::serialize_into(&mut cursor, entry)?; } Ok(()) } - fn sanitize(&self, verify_merkle_proof: bool) -> Result<(), Error> { - let shred_variant = self.common_header.shred_variant; - if !matches!(shred_variant, ShredVariant::MerkleCode(_)) { - return Err(Error::InvalidShredVariant); - } - if verify_merkle_proof && !self.verify_merkle_proof()? { - return Err(Error::InvalidMerkleProof); - } - shred_code::sanitize(self) - } - - pub(super) fn get_merkle_root(shred: &[u8], proof_size: u8) -> Option { + pub(super) fn get_merkle_root(shred: &[u8], proof_size: u8) -> Option { debug_assert_eq!( shred::layout::get_shred_variant(shred).unwrap(), ShredVariant::MerkleCode(proof_size) @@ -417,21 +352,21 @@ impl ShredCode { .ok()?; num_data_shreds.checked_add(position)? }; - // Where the merkle branch starts in the shred binary. - let offset = Self::SIZE_OF_HEADERS + Self::capacity(proof_size).ok()?; - get_merkle_root(shred, proof_size, index, offset) + let proof_offset = Self::proof_offset(proof_size).ok()?; + let proof = get_merkle_proof(shred, proof_offset, proof_size).ok()?; + let node = get_merkle_node(shred, SIZE_OF_SIGNATURE..proof_offset).ok()?; + get_merkle_root(index, node, proof).ok() } } impl<'a> ShredTrait<'a> for ShredData { - type SignedData = MerkleRoot; + type SignedData = Hash; impl_shred_common!(); // Also equal to: // ShredData::SIZE_OF_HEADERS // + ShredData::capacity(proof_size).unwrap() - // + SIZE_OF_MERKLE_ROOT // + usize::from(proof_size) * SIZE_OF_MERKLE_PROOF_ENTRY const SIZE_OF_PAYLOAD: usize = ShredCode::SIZE_OF_PAYLOAD - ShredCode::SIZE_OF_HEADERS + SIZE_OF_SIGNATURE; @@ -454,7 +389,7 @@ impl<'a> ShredTrait<'a> for ShredData { data_header, payload, }; - shred.sanitize(/*verify_merkle_proof:*/ true)?; + shred.sanitize()?; Ok(shred) } @@ -470,9 +405,9 @@ impl<'a> ShredTrait<'a> for ShredData { return Err(Error::InvalidPayloadSize(self.payload.len())); } let proof_size = self.proof_size()?; - let data_buffer_size = Self::capacity(proof_size)?; + let proof_offset = Self::proof_offset(proof_size)?; let mut shard = self.payload; - shard.truncate(Self::SIZE_OF_HEADERS + data_buffer_size); + shard.truncate(proof_offset); shard.drain(0..SIZE_OF_SIGNATURE); Ok(shard) } @@ -482,23 +417,28 @@ impl<'a> ShredTrait<'a> for ShredData { return Err(Error::InvalidPayloadSize(self.payload.len())); } let proof_size = self.proof_size()?; - let data_buffer_size = Self::capacity(proof_size)?; + let proof_offset = Self::proof_offset(proof_size)?; self.payload - .get(SIZE_OF_SIGNATURE..Self::SIZE_OF_HEADERS + data_buffer_size) + .get(SIZE_OF_SIGNATURE..proof_offset) .ok_or(Error::InvalidPayloadSize(self.payload.len())) } fn sanitize(&self) -> Result<(), Error> { - self.sanitize(/*verify_merkle_proof:*/ true) + let shred_variant = self.common_header.shred_variant; + if !matches!(shred_variant, ShredVariant::MerkleData(_)) { + return Err(Error::InvalidShredVariant); + } + let _ = self.merkle_proof()?; + shred_data::sanitize(self) } fn signed_data(&'a self) -> Result { - self.merkle_root().copied() + self.merkle_root() } } impl<'a> ShredTrait<'a> for ShredCode { - type SignedData = MerkleRoot; + type SignedData = Hash; impl_shred_common!(); const SIZE_OF_PAYLOAD: usize = shred_code::ShredCode::SIZE_OF_PAYLOAD; @@ -521,7 +461,7 @@ impl<'a> ShredTrait<'a> for ShredCode { coding_header, payload, }; - shred.sanitize(/*verify_merkle_proof:*/ true)?; + shred.sanitize()?; Ok(shred) } @@ -537,10 +477,10 @@ impl<'a> ShredTrait<'a> for ShredCode { return Err(Error::InvalidPayloadSize(self.payload.len())); } let proof_size = self.proof_size()?; - let shard_size = Self::capacity(proof_size)?; + let proof_offset = Self::proof_offset(proof_size)?; let mut shard = self.payload; + shard.truncate(proof_offset); shard.drain(..Self::SIZE_OF_HEADERS); - shard.truncate(shard_size); Ok(shard) } @@ -549,18 +489,23 @@ impl<'a> ShredTrait<'a> for ShredCode { return Err(Error::InvalidPayloadSize(self.payload.len())); } let proof_size = self.proof_size()?; - let shard_size = Self::capacity(proof_size)?; + let proof_offset = Self::proof_offset(proof_size)?; self.payload - .get(Self::SIZE_OF_HEADERS..Self::SIZE_OF_HEADERS + shard_size) + .get(Self::SIZE_OF_HEADERS..proof_offset) .ok_or(Error::InvalidPayloadSize(self.payload.len())) } fn sanitize(&self) -> Result<(), Error> { - self.sanitize(/*verify_merkle_proof:*/ true) + let shred_variant = self.common_header.shred_variant; + if !matches!(shred_variant, ShredVariant::MerkleCode(_)) { + return Err(Error::InvalidShredVariant); + } + let _ = self.merkle_proof()?; + shred_code::sanitize(self) } fn signed_data(&'a self) -> Result { - self.merkle_root().copied() + self.merkle_root() } } @@ -594,23 +539,6 @@ impl ShredCodeTrait for ShredCode { } } -impl<'a> TryFrom<&'a [u8]> for MerkleBranch<'a> { - type Error = Error; - fn try_from(merkle_branch: &'a [u8]) -> Result { - if merkle_branch.len() < SIZE_OF_MERKLE_ROOT { - return Err(Error::InvalidMerkleProof); - } - let (root, proof) = merkle_branch.split_at(SIZE_OF_MERKLE_ROOT); - let root = <&MerkleRoot>::try_from(root).unwrap(); - let proof = proof - .chunks(SIZE_OF_MERKLE_PROOF_ENTRY) - .map(<&MerkleProofEntry>::try_from) - .collect::>() - .map_err(|_| Error::InvalidMerkleProof)?; - Ok(Self { root, proof }) - } -} - // Obtains parent's hash by joining two sibiling nodes in merkle tree. fn join_nodes, T: AsRef<[u8]>>(node: S, other: T) -> Hash { let node = &node.as_ref()[..SIZE_OF_MERKLE_PROOF_ENTRY]; @@ -618,15 +546,9 @@ fn join_nodes, T: AsRef<[u8]>>(node: S, other: T) -> Hash { hashv(&[MERKLE_HASH_PREFIX_NODE, node, other]) } -fn verify_merkle_proof(index: usize, node: Hash, merkle_branch: &MerkleBranch) -> bool { - let proof = merkle_branch.proof.iter().copied(); - let root = fold_merkle_proof(index, node, proof); - root.as_ref() == Some(merkle_branch.root) -} - // Recovers root of the merkle tree from a leaf node // at the given index and the respective proof. -fn fold_merkle_proof<'a, I>(index: usize, node: Hash, proof: I) -> Option +fn get_merkle_root<'a, I>(index: usize, node: Hash, proof: I) -> Result where I: IntoIterator, { @@ -640,29 +562,28 @@ where }; (index >> 1, parent) }); - (index == 0).then(|| { - let root = &root.as_ref()[..SIZE_OF_MERKLE_ROOT]; - MerkleRoot::try_from(root).ok() - })? + (index == 0).then(|| root).ok_or(Error::InvalidMerkleProof) } -fn get_merkle_root( +fn get_merkle_proof( shred: &[u8], - proof_size: u8, - index: usize, // Shred index in the erasure batch. - offset: usize, // Where the merkle branch starts in the shred binary. -) -> Option { - let node = shred.get(SIZE_OF_SIGNATURE..offset)?; - let node = hashv(&[MERKLE_HASH_PREFIX_LEAF, node]); - // Merkle proof embedded in the payload. - let offset = offset + SIZE_OF_MERKLE_ROOT; - let size = usize::from(proof_size) * SIZE_OF_MERKLE_PROOF_ENTRY; - let proof = shred - .get(offset..offset + size)? + proof_offset: usize, // Where the merkle proof starts. + proof_size: u8, // Number of proof entries. +) -> Result, Error> { + let proof_size = usize::from(proof_size) * SIZE_OF_MERKLE_PROOF_ENTRY; + Ok(shred + .get(proof_offset..proof_offset + proof_size) + .ok_or(Error::InvalidPayloadSize(shred.len()))? .chunks(SIZE_OF_MERKLE_PROOF_ENTRY) .map(<&MerkleProofEntry>::try_from) - .map(Result::unwrap); - fold_merkle_proof(index, node, proof) + .map(Result::unwrap)) +} + +fn get_merkle_node(shred: &[u8], offsets: Range) -> Result { + let node = shred + .get(offsets) + .ok_or(Error::InvalidPayloadSize(shred.len()))?; + Ok(hashv(&[MERKLE_HASH_PREFIX_LEAF, node])) } fn make_merkle_tree(mut nodes: Vec) -> Vec { @@ -680,11 +601,11 @@ fn make_merkle_tree(mut nodes: Vec) -> Vec { nodes } -fn make_merkle_branch( +fn make_merkle_proof( mut index: usize, // leaf index ~ shred's erasure shard index. mut size: usize, // number of leaves ~ erasure batch size. tree: &[Hash], -) -> Option { +) -> Option> { if index >= size { return None; } @@ -698,12 +619,7 @@ fn make_merkle_branch( size = (size + 1) >> 1; index >>= 1; } - if offset + 1 != tree.len() { - return None; - } - let root = &tree.last()?.as_ref()[..SIZE_OF_MERKLE_ROOT]; - let root = <&MerkleRoot>::try_from(root).unwrap(); - Some(MerkleBranch { root, proof }) + (offset + 1 == tree.len()).then(|| proof) } pub(super) fn recover( @@ -830,28 +746,25 @@ pub(super) fn recover( } }) .collect::>()?; - // Compute merkle tree and set the merkle branch on the recovered shreds. + // Compute merkle tree and set the merkle proof on the recovered shreds. let nodes: Vec<_> = shreds .iter() - .map(Shred::merkle_tree_node) + .map(Shred::merkle_node) .collect::>()?; let tree = make_merkle_tree(nodes); - let merkle_root = &tree.last().unwrap().as_ref()[..SIZE_OF_MERKLE_ROOT]; - let merkle_root = MerkleRoot::try_from(merkle_root).unwrap(); for (index, (shred, mask)) in shreds.iter_mut().zip(&mask).enumerate() { + let proof = make_merkle_proof(index, num_shards, &tree).ok_or(Error::InvalidMerkleProof)?; + if proof.len() != usize::from(proof_size) { + return Err(Error::InvalidMerkleProof); + } if *mask { - if shred.merkle_root()? != &merkle_root { + if shred.merkle_proof()?.ne(proof) { return Err(Error::InvalidMerkleProof); } } else { - let merkle_branch = - make_merkle_branch(index, num_shards, &tree).ok_or(Error::InvalidMerkleProof)?; - if merkle_branch.proof.len() != usize::from(proof_size) { - return Err(Error::InvalidMerkleProof); - } - shred.set_merkle_branch(&merkle_branch)?; + shred.set_merkle_proof(&proof)?; // Already sanitized in Shred{Code,Data}::from_recovered_shard. - debug_assert_matches!(shred.sanitize(/*verify_merkle_proof:*/ true), Ok(())); + debug_assert_matches!(shred.sanitize(), Ok(())); // Assert that shred payload is fully populated. debug_assert_eq!(shred, { let shred = shred.payload().clone(); @@ -867,7 +780,7 @@ pub(super) fn recover( .collect()) } -// Maps number of (code + data) shreds to MerkleBranch.proof.len(). +// Maps number of (code + data) shreds to merkle_proof.len(). fn get_proof_size(num_shreds: usize) -> u8 { let bits = usize::BITS - num_shreds.leading_zeros(); let proof_size = if num_shreds.is_power_of_two() { @@ -1028,7 +941,7 @@ pub(super) fn make_shreds_from_data( out }) .collect(); - // Generate coding shreds, populate merkle branch + // Generate coding shreds, populate merkle proof // for all shreds and attach signature. let shreds: Result, Error> = if shreds.len() <= 1 { shreds @@ -1053,7 +966,7 @@ pub(super) fn make_shreds_from_data( shreds } -// Generates coding shreds from data shreds, populates merke branch for all +// Generates coding shreds from data shreds, populates merke proof for all // shreds and attaches signature. fn make_erasure_batch( keypair: &Keypair, @@ -1111,24 +1024,23 @@ fn make_erasure_batch( let tree = make_merkle_tree( shreds .iter() - .map(Shred::merkle_tree_node) + .map(Shred::merkle_node) .collect::>()?, ); // Sign root of Merkle tree. let signature = { let root = tree.last().ok_or(Error::InvalidMerkleProof)?; - let root = &root.as_ref()[..SIZE_OF_MERKLE_ROOT]; - keypair.sign_message(root) + keypair.sign_message(root.as_ref()) }; - // Populate merkle branch for all shreds and attach signature. + // Populate merkle proof for all shreds and attach signature. for (index, shred) in shreds.iter_mut().enumerate() { - let merkle_branch = make_merkle_branch(index, erasure_batch_size, &tree) - .ok_or(Error::InvalidMerkleProof)?; - debug_assert_eq!(merkle_branch.proof.len(), usize::from(proof_size)); - shred.set_merkle_branch(&merkle_branch)?; + let proof = + make_merkle_proof(index, erasure_batch_size, &tree).ok_or(Error::InvalidMerkleProof)?; + debug_assert_eq!(proof.len(), usize::from(proof_size)); + shred.set_merkle_proof(&proof)?; shred.set_signature(signature); debug_assert!(shred.verify(&keypair.pubkey())); - debug_assert_matches!(shred.sanitize(/*verify_merkle_proof:*/ true), Ok(())); + debug_assert_matches!(shred.sanitize(), Ok(())); // Assert that shred payload is fully populated. debug_assert_eq!(shred, { let shred = shred.payload().clone(); @@ -1142,7 +1054,7 @@ fn make_erasure_batch( mod test { use { super::*, - crate::shred::{ShredFlags, ShredId}, + crate::shred::{ShredFlags, ShredId, SignedData}, itertools::Itertools, matches::assert_matches, rand::{seq::SliceRandom, CryptoRng, Rng}, @@ -1152,16 +1064,15 @@ mod test { test_case::test_case, }; - // Total size of a data shred including headers and merkle branch. + // Total size of a data shred including headers and merkle proof. fn shred_data_size_of_payload(proof_size: u8) -> usize { ShredData::SIZE_OF_HEADERS + ShredData::capacity(proof_size).unwrap() - + SIZE_OF_MERKLE_ROOT + usize::from(proof_size) * SIZE_OF_MERKLE_PROOF_ENTRY } - // Merkle branch is generated and signed after coding shreds are generated. - // All payload excluding merkle branch and the signature are erasure coded. + // Merkle proof is generated and signed after coding shreds are generated. + // All payload excluding merkle proof and the signature are erasure coded. // Therefore the data capacity is equal to erasure encoded shard size minus // size of erasure encoded header. fn shred_data_capacity(proof_size: u8) -> usize { @@ -1173,7 +1084,6 @@ mod test { fn shred_data_size_of_erasure_encoded_slice(proof_size: u8) -> usize { ShredData::SIZE_OF_PAYLOAD - SIZE_OF_SIGNATURE - - SIZE_OF_MERKLE_ROOT - usize::from(proof_size) * SIZE_OF_MERKLE_PROOF_ENTRY } @@ -1222,13 +1132,16 @@ mod test { let nodes = repeat_with(|| rng.gen::<[u8; 32]>()).map(Hash::from); let nodes: Vec<_> = nodes.take(size).collect(); let tree = make_merkle_tree(nodes.clone()); + let root = tree.last().copied().unwrap(); for index in 0..size { - let branch = make_merkle_branch(index, size, &tree).unwrap(); - let root = &tree.last().unwrap().as_ref()[..SIZE_OF_MERKLE_ROOT]; - assert_eq!(branch.root, root); - assert!(verify_merkle_proof(index, nodes[index], &branch)); - for i in (0..size).filter(|&i| i != index) { - assert!(!verify_merkle_proof(i, nodes[i], &branch)); + let proof = make_merkle_proof(index, size, &tree).unwrap(); + for (k, &node) in nodes.iter().enumerate() { + let proof = proof.iter().copied(); + if k == index { + assert_eq!(root, get_merkle_root(k, node, proof).unwrap()); + } else { + assert_ne!(root, get_merkle_root(k, node, proof).unwrap()); + } } } } @@ -1270,15 +1183,18 @@ mod test { let common_header = ShredCommonHeader { signature: Signature::default(), shred_variant: ShredVariant::MerkleData(proof_size), - slot: 145865705, + slot: 145_865_705, index: 1835, - version: 4978, + version: rng.gen(), fec_set_index: 1835, }; - let data_header = DataShredHeader { - parent_offset: 25, - flags: unsafe { ShredFlags::from_bits_unchecked(0b0010_1010) }, - size: 0, + let data_header = { + let reference_tick = rng.gen_range(0, 0x40); + DataShredHeader { + parent_offset: rng.gen::().max(1), + flags: unsafe { ShredFlags::from_bits_unchecked(reference_tick) }, + size: 0, + } }; let coding_header = CodingShredHeader { num_data_shreds: num_data_shreds as u16, @@ -1344,19 +1260,19 @@ mod test { } let nodes: Vec<_> = shreds .iter() - .map(Shred::merkle_tree_node) + .map(Shred::merkle_node) .collect::>() .unwrap(); let tree = make_merkle_tree(nodes); for (index, shred) in shreds.iter_mut().enumerate() { - let merkle_branch = make_merkle_branch(index, num_shreds, &tree).unwrap(); - assert_eq!(merkle_branch.proof.len(), usize::from(proof_size)); - shred.set_merkle_branch(&merkle_branch).unwrap(); + let proof = make_merkle_proof(index, num_shreds, &tree).unwrap(); + assert_eq!(proof.len(), usize::from(proof_size)); + shred.set_merkle_proof(&proof).unwrap(); let data = shred.signed_data().unwrap(); let signature = keypair.sign_message(data.as_ref()); shred.set_signature(signature); assert!(shred.verify(&keypair.pubkey())); - assert_matches!(shred.sanitize(/*verify_merkle_proof:*/ true), Ok(())); + assert_matches!(shred.sanitize(), Ok(())); } assert_eq!(shreds.iter().map(Shred::signature).dedup().count(), 1); for size in num_data_shreds..num_shreds { @@ -1488,7 +1404,7 @@ mod test { let pubkey = keypair.pubkey(); for shred in &shreds { assert!(shred.verify(&pubkey)); - assert_matches!(shred.sanitize(/*verify_merkle_proof:*/ true), Ok(())); + assert_matches!(shred.sanitize(), Ok(())); let ShredCommonHeader { signature, shred_variant, @@ -1499,7 +1415,9 @@ mod test { } = *shred.common_header(); let shred_type = ShredType::from(shred_variant); let key = ShredId::new(slot, index, shred_type); - let merkle_root = shred.merkle_root().copied().ok(); + let merkle_root = shred.merkle_root().unwrap(); + assert!(signature.verify(pubkey.as_ref(), merkle_root.as_ref())); + // Verify shred::layout api. let shred = shred.payload(); assert_eq!(shred::layout::get_signature(shred), Some(signature)); assert_eq!( @@ -1511,11 +1429,10 @@ mod test { assert_eq!(shred::layout::get_index(shred), Some(index)); assert_eq!(shred::layout::get_version(shred), Some(version)); assert_eq!(shred::layout::get_shred_id(shred), Some(key)); - assert_eq!(shred::layout::get_merkle_root(shred), merkle_root); - let offsets = shred::layout::get_signed_data_offsets(shred).unwrap(); - let data = shred.get(offsets).unwrap(); - assert!(signature.verify(pubkey.as_ref(), data)); + assert_eq!(shred::layout::get_merkle_root(shred), Some(merkle_root)); + assert_eq!(shred::layout::get_signed_data_offsets(shred), None); let data = shred::layout::get_signed_data(shred).unwrap(); + assert_eq!(data, SignedData::MerkleRoot(merkle_root)); assert!(signature.verify(pubkey.as_ref(), data.as_ref())); } // Verify common, data and coding headers. diff --git a/ledger/src/shred/shred_data.rs b/ledger/src/shred/shred_data.rs index 915ae29d4e3f2e..9bf2c0bf05f79e 100644 --- a/ledger/src/shred/shred_data.rs +++ b/ledger/src/shred/shred_data.rs @@ -102,8 +102,8 @@ impl ShredData { } // Maximum size of ledger data that can be embedded in a data-shred. - // merkle_proof_size is the number of proof entries in the merkle tree - // branch. None indicates a legacy data-shred. + // merkle_proof_size is the number of merkle proof entries. + // None indicates a legacy data-shred. pub fn capacity(merkle_proof_size: Option) -> Result { match merkle_proof_size { None => Ok(legacy::ShredData::CAPACITY), diff --git a/ledger/src/sigverify_shreds.rs b/ledger/src/sigverify_shreds.rs index 9c547e378198e1..79c3d2426a4aff 100644 --- a/ledger/src/sigverify_shreds.rs +++ b/ledger/src/sigverify_shreds.rs @@ -1,6 +1,6 @@ #![allow(clippy::implicit_hasher)] use { - crate::shred::{self, MerkleRoot, SIZE_OF_MERKLE_ROOT}, + crate::shred, itertools::{izip, Itertools}, rayon::{prelude::*, ThreadPool}, sha2::{Digest, Sha512}, @@ -15,13 +15,17 @@ use { solana_rayon_threadlimit::get_thread_count, solana_sdk::{ clock::Slot, + hash::Hash, pubkey::Pubkey, signature::{Keypair, Signature, Signer}, }, + static_assertions::const_assert_eq, std::{collections::HashMap, fmt::Debug, iter::repeat, mem::size_of, ops::Range, sync::Arc}, }; const SIGN_SHRED_GPU_MIN: usize = 256; +const_assert_eq!(SIZE_OF_MERKLE_ROOT, 32); +const SIZE_OF_MERKLE_ROOT: usize = std::mem::size_of::(); lazy_static! { static ref SIGVERIFY_THREAD_POOL: ThreadPool = rayon::ThreadPoolBuilder::new() @@ -153,7 +157,7 @@ fn get_merkle_roots( PinnedVec, // Merkle roots Vec>, // Offsets ) { - let merkle_roots: Vec> = SIGVERIFY_THREAD_POOL.install(|| { + let merkle_roots: Vec> = SIGVERIFY_THREAD_POOL.install(|| { packets .par_iter() .flat_map(|packets| { @@ -179,7 +183,7 @@ fn get_merkle_roots( let root = root?; let offset = next_offset; next_offset += SIZE_OF_MERKLE_ROOT; - buffer[offset..next_offset].copy_from_slice(&root); + buffer[offset..next_offset].copy_from_slice(root.as_ref()); Some(offset) }) .collect() @@ -805,9 +809,10 @@ mod tests { let shred = shred.payload(); let slot = shred::layout::get_slot(shred).unwrap(); let signature = shred::layout::get_signature(shred).unwrap(); - let offsets = shred::layout::get_signed_data_offsets(shred).unwrap(); let pubkey = keypairs[&slot].pubkey(); - assert!(signature.verify(pubkey.as_ref(), &shred[offsets])); + if let Some(offsets) = shred::layout::get_signed_data_offsets(shred) { + assert!(signature.verify(pubkey.as_ref(), &shred[offsets])); + } let data = shred::layout::get_signed_data(shred).unwrap(); assert!(signature.verify(pubkey.as_ref(), data.as_ref())); } From 798b4b9d5702af9bc29222f2a7ee54b6efb1c918 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Tue, 7 Mar 2023 17:40:44 -0800 Subject: [PATCH 347/465] v1.14: increase retransmit shreds received cache size (backport of #30556) (#30636) increase retransmit shreds received cache size (#30556) (cherry picked from commit 4c0ce84488de91eefe8a506f7e6fc0e0d50c5611) Co-authored-by: Jeff Biseda --- core/src/retransmit_stage.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/retransmit_stage.rs b/core/src/retransmit_stage.rs index 8f4374f93071bb..e31821ec59f89e 100644 --- a/core/src/retransmit_stage.rs +++ b/core/src/retransmit_stage.rs @@ -42,7 +42,7 @@ use { }; const MAX_DUPLICATE_COUNT: usize = 2; -const DEFAULT_LRU_SIZE: usize = 10_000; +const DEFAULT_LRU_SIZE: usize = 1 << 20; // Minimum number of shreds to use rayon parallel iterators. const PAR_ITER_MIN_NUM_SHREDS: usize = 2; From ec272282eb049b96d02b4e76d80c8220749f9ed4 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Fri, 10 Mar 2023 07:52:24 +0800 Subject: [PATCH 348/465] v1.14: Make backup_and_clear_blockstore() honor ValidatorConfig options (backport of #30538) (#30593) Make backup_and_clear_blockstore() honor ValidatorConfig options (#30538) * Add helper function to create BlockstoreOptions from ValidatorConfig * Make backup_and_clear_blockstore() honor ValidatorConfig options backup_and_clear_blockstore() opens a Blockstore session; however, it is currently using Blockstore::open(). This Blockstore method uses BlockstoreOption::default() under the hood. As a result, any validator args that adjust Blockstore settings are not considered in backup_and_clear_blockstore(). This is especially problematic if the non-default value of --rocksdb-shred-compaction is being used. In this case, backup_and_clear_blockstore() was opening the wrong directory and incorrectly finding an empty ledger. This change plumbs any blockstore configuration to backup_and_clear_blockstore(). (cherry picked from commit a8bff33387f216619e04f4456971af23e3db951a) Co-authored-by: steviez --- core/src/validator.rs | 50 ++++++++++++++++++++++++++++++------------- 1 file changed, 35 insertions(+), 15 deletions(-) diff --git a/core/src/validator.rs b/core/src/validator.rs index 7d2c2fd7c39327..275ef18173cc7a 100644 --- a/core/src/validator.rs +++ b/core/src/validator.rs @@ -469,6 +469,7 @@ impl Validator { *start_progress.write().unwrap() = ValidatorStartProgress::CleaningBlockStore; backup_and_clear_blockstore( ledger_path, + config, wait_for_supermajority_slot + 1, shred_version, ); @@ -1370,6 +1371,15 @@ fn post_process_restored_tower( }) } +fn blockstore_options_from_config(config: &ValidatorConfig) -> BlockstoreOptions { + BlockstoreOptions { + recovery_mode: config.wal_recovery_mode.clone(), + column_options: config.ledger_column_options.clone(), + enforce_ulimit_nofile: config.enforce_ulimit_nofile, + ..BlockstoreOptions::default() + } +} + #[allow(clippy::type_complexity)] fn load_blockstore( config: &ValidatorConfig, @@ -1424,16 +1434,8 @@ fn load_blockstore( ledger_signal_receiver, completed_slots_receiver, .. - } = Blockstore::open_with_signal( - ledger_path, - BlockstoreOptions { - recovery_mode: config.wal_recovery_mode.clone(), - column_options: config.ledger_column_options.clone(), - enforce_ulimit_nofile: config.enforce_ulimit_nofile, - ..BlockstoreOptions::default() - }, - ) - .expect("Failed to open ledger database"); + } = Blockstore::open_with_signal(ledger_path, blockstore_options_from_config(config)) + .expect("Failed to open ledger database"); blockstore.set_no_compaction(config.no_rocksdb_compaction); blockstore.shred_timing_point_sender = poh_timing_point_sender; // following boot sequence (esp BankForks) could set root. so stash the original value @@ -1781,15 +1783,31 @@ fn blockstore_contains_bad_shred_version( false } -fn backup_and_clear_blockstore(ledger_path: &Path, start_slot: Slot, shred_version: u16) { - let blockstore = Blockstore::open(ledger_path).unwrap(); +fn backup_and_clear_blockstore( + ledger_path: &Path, + config: &ValidatorConfig, + start_slot: Slot, + shred_version: u16, +) { + let blockstore = + Blockstore::open_with_options(ledger_path, blockstore_options_from_config(config)).unwrap(); let do_copy_and_clear = blockstore_contains_bad_shred_version(&blockstore, start_slot, shred_version); // If found, then copy shreds to another db and clear from start_slot if do_copy_and_clear { - let folder_name = format!("backup_rocksdb_{}", thread_rng().gen_range(0, 99999)); - let backup_blockstore = Blockstore::open(&ledger_path.join(folder_name)); + let folder_name = format!( + "backup_{}_{}", + config + .ledger_column_options + .shred_storage_type + .blockstore_directory(), + thread_rng().gen_range(0, 99999) + ); + let backup_blockstore = Blockstore::open_with_options( + &ledger_path.join(folder_name), + blockstore_options_from_config(config), + ); let mut last_print = Instant::now(); let mut copied = 0; let mut last_slot = None; @@ -2151,6 +2169,8 @@ mod tests { solana_entry::entry, solana_ledger::{blockstore, get_tmp_ledger_path}, }; + + let validator_config = ValidatorConfig::default_for_test(); let blockstore_path = get_tmp_ledger_path!(); { let blockstore = Blockstore::open(&blockstore_path).unwrap(); @@ -2177,7 +2197,7 @@ mod tests { drop(blockstore); // this purges and compacts all slots greater than or equal to 5 - backup_and_clear_blockstore(&blockstore_path, 5, 2); + backup_and_clear_blockstore(&blockstore_path, &validator_config, 5, 2); let blockstore = Blockstore::open(&blockstore_path).unwrap(); // assert that slots less than 5 aren't affected From b0324a91a1f2d6da0e207010c0dd2fc3716b6fad Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Fri, 10 Mar 2023 12:44:21 -0800 Subject: [PATCH 349/465] v1.14: Update discord link in docs (backport of #30670) (#30678) Update discord link in docs (#30670) Update discord link (cherry picked from commit 94ef881de01861a4f18ba5fa402f65cb2833dba2) Co-authored-by: mvines --- docs/src/running-validator/validator-troubleshoot.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/docs/src/running-validator/validator-troubleshoot.md b/docs/src/running-validator/validator-troubleshoot.md index 4fa35fceddc25e..533c66c53308b5 100644 --- a/docs/src/running-validator/validator-troubleshoot.md +++ b/docs/src/running-validator/validator-troubleshoot.md @@ -3,7 +3,7 @@ title: Troubleshooting --- There is a **\#validator-support** Discord channel available to reach other -testnet participants, [https://discord.gg/pquxPsq](https://discord.gg/pquxPsq). +testnet participants, [https://solana.com/discord](https://solana.com/discord) ## Useful Links & Discussion @@ -14,8 +14,6 @@ testnet participants, [https://discord.gg/pquxPsq](https://discord.gg/pquxPsq). - [\#testnet-announcements](https://discord.gg/Q5TxEC) The single source of truth for critical information relating Testnet - [Core software repo](https://github.com/solana-labs/solana) -Can't find what you're looking for? Send an email to ryan@solana.com or reach out to @rshea\#2622 on Discord. - ## Blockstore The validator blockstore rocksdb database can be inspected using the `ldb` tool. From 9e3a2b5fa0de0866b326fc7a947564d9e304d48b Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Sat, 11 Mar 2023 20:42:08 +0000 Subject: [PATCH 350/465] v1.14: stops nodes from broadcasting slots twice (backport of #30681) (#30682) * stops nodes from broadcasting slots twice (#30681) https://github.com/solana-labs/solana/blob/94ef881de/core/src/progress_map.rs#L178 always returns true the first time around because retry_time is None. So every slot is broadcasted twice. (cherry picked from commit f9805b6fbbef13b9c9a2bfbe39bc5b4a1bbb9cf8) # Conflicts: # core/src/replay_stage.rs * resolves mergify merge conflicts --------- Co-authored-by: behzad nouri --- core/src/progress_map.rs | 21 ++++++++++----------- core/src/replay_stage.rs | 33 ++++++++++++++++++++++----------- 2 files changed, 32 insertions(+), 22 deletions(-) diff --git a/core/src/progress_map.rs b/core/src/progress_map.rs index fc069750508839..fb297f2d9f8589 100644 --- a/core/src/progress_map.rs +++ b/core/src/progress_map.rs @@ -161,26 +161,22 @@ impl ValidatorStakeInfo { pub const RETRANSMIT_BASE_DELAY_MS: u64 = 5_000; pub const RETRANSMIT_BACKOFF_CAP: u32 = 6; -#[derive(Debug, Default)] +#[derive(Debug)] pub struct RetransmitInfo { - pub retry_time: Option, - pub retry_iteration: u32, + pub(crate) retry_time: Instant, + pub(crate) retry_iteration: u32, } impl RetransmitInfo { pub fn reached_retransmit_threshold(&self) -> bool { let backoff = std::cmp::min(self.retry_iteration, RETRANSMIT_BACKOFF_CAP); let backoff_duration_ms = (1_u64 << backoff) * RETRANSMIT_BASE_DELAY_MS; - self.retry_time - .map(|time| time.elapsed().as_millis() > backoff_duration_ms.into()) - .unwrap_or(true) + self.retry_time.elapsed().as_millis() > u128::from(backoff_duration_ms) } pub fn increment_retry_iteration(&mut self) { - if self.retry_time.is_some() { - self.retry_iteration += 1; - } - self.retry_time = Some(Instant::now()); + self.retry_iteration = self.retry_iteration.saturating_add(1); + self.retry_time = Instant::now(); } } @@ -248,7 +244,10 @@ impl ForkProgress { total_epoch_stake, ..PropagatedStats::default() }, - retransmit_info: RetransmitInfo::default(), + retransmit_info: RetransmitInfo { + retry_time: Instant::now(), + retry_iteration: 0u32, + }, } } diff --git a/core/src/replay_stage.rs b/core/src/replay_stage.rs index e76eb596409a8c..229a13a281e88c 100644 --- a/core/src/replay_stage.rs +++ b/core/src/replay_stage.rs @@ -6811,13 +6811,14 @@ pub(crate) mod tests { bank1.freeze(); bank_forks.write().unwrap().insert(bank1); + progress.get_retransmit_info_mut(0).unwrap().retry_time = Instant::now(); ReplayStage::retransmit_latest_unpropagated_leader_slot( &poh_recorder, &retransmit_slots_sender, &mut progress, ); let res = retransmit_slots_receiver.recv_timeout(Duration::from_millis(10)); - assert!(res.is_ok(), "retry_iteration=0, retry_time=None"); + assert_matches!(res, Err(_)); assert_eq!( progress.get_retransmit_info(0).unwrap().retry_iteration, 0, @@ -6835,8 +6836,9 @@ pub(crate) mod tests { "retry_iteration=0, elapsed < 2^0 * RETRANSMIT_BASE_DELAY_MS" ); - progress.get_retransmit_info_mut(0).unwrap().retry_time = - Some(Instant::now() - Duration::from_millis(RETRANSMIT_BASE_DELAY_MS + 1)); + progress.get_retransmit_info_mut(0).unwrap().retry_time = Instant::now() + .checked_sub(Duration::from_millis(RETRANSMIT_BASE_DELAY_MS + 1)) + .unwrap(); ReplayStage::retransmit_latest_unpropagated_leader_slot( &poh_recorder, &retransmit_slots_sender, @@ -6864,8 +6866,9 @@ pub(crate) mod tests { "retry_iteration=1, elapsed < 2^1 * RETRY_BASE_DELAY_MS" ); - progress.get_retransmit_info_mut(0).unwrap().retry_time = - Some(Instant::now() - Duration::from_millis(RETRANSMIT_BASE_DELAY_MS + 1)); + progress.get_retransmit_info_mut(0).unwrap().retry_time = Instant::now() + .checked_sub(Duration::from_millis(RETRANSMIT_BASE_DELAY_MS + 1)) + .unwrap(); ReplayStage::retransmit_latest_unpropagated_leader_slot( &poh_recorder, &retransmit_slots_sender, @@ -6877,8 +6880,9 @@ pub(crate) mod tests { "retry_iteration=1, elapsed < 2^1 * RETRANSMIT_BASE_DELAY_MS" ); - progress.get_retransmit_info_mut(0).unwrap().retry_time = - Some(Instant::now() - Duration::from_millis(2 * RETRANSMIT_BASE_DELAY_MS + 1)); + progress.get_retransmit_info_mut(0).unwrap().retry_time = Instant::now() + .checked_sub(Duration::from_millis(2 * RETRANSMIT_BASE_DELAY_MS + 1)) + .unwrap(); ReplayStage::retransmit_latest_unpropagated_leader_slot( &poh_recorder, &retransmit_slots_sender, @@ -6901,8 +6905,9 @@ pub(crate) mod tests { .unwrap() .increment_retry_iteration(); - progress.get_retransmit_info_mut(0).unwrap().retry_time = - Some(Instant::now() - Duration::from_millis(2 * RETRANSMIT_BASE_DELAY_MS + 1)); + progress.get_retransmit_info_mut(0).unwrap().retry_time = Instant::now() + .checked_sub(Duration::from_millis(2 * RETRANSMIT_BASE_DELAY_MS + 1)) + .unwrap(); ReplayStage::retransmit_latest_unpropagated_leader_slot( &poh_recorder, &retransmit_slots_sender, @@ -6914,8 +6919,9 @@ pub(crate) mod tests { "retry_iteration=3, elapsed < 2^3 * RETRANSMIT_BASE_DELAY_MS" ); - progress.get_retransmit_info_mut(0).unwrap().retry_time = - Some(Instant::now() - Duration::from_millis(8 * RETRANSMIT_BASE_DELAY_MS + 1)); + progress.get_retransmit_info_mut(0).unwrap().retry_time = Instant::now() + .checked_sub(Duration::from_millis(8 * RETRANSMIT_BASE_DELAY_MS + 1)) + .unwrap(); ReplayStage::retransmit_latest_unpropagated_leader_slot( &poh_recorder, &retransmit_slots_sender, @@ -6957,6 +6963,10 @@ pub(crate) mod tests { } = vote_simulator; let (retransmit_slots_sender, retransmit_slots_receiver) = unbounded(); + let retry_time = Instant::now() + .checked_sub(Duration::from_millis(RETRANSMIT_BASE_DELAY_MS + 1)) + .unwrap(); + progress.get_retransmit_info_mut(0).unwrap().retry_time = retry_time; let mut prev_index = 0; for i in (1..10).chain(11..15) { @@ -6982,6 +6992,7 @@ pub(crate) mod tests { bank.freeze(); bank_forks.write().unwrap().insert(bank); prev_index = i; + progress.get_retransmit_info_mut(i).unwrap().retry_time = retry_time; } // expect single slot when latest_leader_slot is the start of a consecutive range From 840fd2b0fc48239a38ad6e3e22ec692b37c62f49 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Tue, 14 Mar 2023 16:35:23 +0800 Subject: [PATCH 351/465] v1.14: ledger-tool: Avoid creating SanitizedTransaction in print command (backport of #30575) (#30705) ledger-tool: Avoid creating SanitizedTransaction in print command (#30575) The print command looks up program_ids from transactions by creating SanitizedTransactions. But, print doesn't have access to a Bank so transactions that include an address table lookup can't be sanitized. Sanitizing the transaction isn't necessary, so this change just looks up the program id from unsanitized transactions. (cherry picked from commit db94e4564fefdf37d35362d42bfd9e3ade36261b) Co-authored-by: steviez --- ledger-tool/src/main.rs | 37 +++++++++++++++---------------------- 1 file changed, 15 insertions(+), 22 deletions(-) diff --git a/ledger-tool/src/main.rs b/ledger-tool/src/main.rs index 61bbea9357112e..5280c1be69473e 100644 --- a/ledger-tool/src/main.rs +++ b/ledger-tool/src/main.rs @@ -69,7 +69,9 @@ use { shred_version::compute_shred_version, stake::{self, state::StakeState}, system_program, - transaction::{MessageHash, SanitizedTransaction, SimpleAddressLoader}, + transaction::{ + MessageHash, SanitizedTransaction, SimpleAddressLoader, VersionedTransaction, + }, }, solana_stake_program::stake_state::{self, PointValue}, solana_vote_program::{ @@ -101,6 +103,16 @@ enum LedgerOutputMethod { Json, } +fn get_program_ids(tx: &VersionedTransaction) -> impl Iterator + '_ { + let message = &tx.message; + let account_keys = message.static_account_keys(); + + message + .instructions() + .iter() + .map(|ix| ix.program_id(account_keys)) +} + fn output_slot_rewards(blockstore: &Blockstore, slot: Slot, method: &LedgerOutputMethod) { // Note: rewards are not output in JSON yet if *method == LedgerOutputMethod::Print { @@ -241,27 +253,8 @@ fn output_slot( transactions += entry.transactions.len(); num_hashes += entry.num_hashes; for transaction in entry.transactions { - let tx_signature = transaction.signatures[0]; - let sanitize_result = SanitizedTransaction::try_create( - transaction, - MessageHash::Compute, - None, - SimpleAddressLoader::Disabled, - true, // require_static_program_ids - ); - - match sanitize_result { - Ok(transaction) => { - for (program_id, _) in transaction.message().program_instructions_iter() { - *program_ids.entry(*program_id).or_insert(0) += 1; - } - } - Err(err) => { - warn!( - "Failed to analyze unsupported transaction {}: {:?}", - tx_signature, err - ); - } + for program_id in get_program_ids(&transaction) { + *program_ids.entry(*program_id).or_insert(0) += 1; } } } From 1a74a56b57c4dfcfccbfe14cd8a6a71e5f7b088d Mon Sep 17 00:00:00 2001 From: "Jeff Washington (jwash)" Date: Tue, 14 Mar 2023 09:27:41 -0500 Subject: [PATCH 352/465] use arg_matches instead of matches for ledger tool args (#30699) --- ledger-tool/src/main.rs | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/ledger-tool/src/main.rs b/ledger-tool/src/main.rs index 5280c1be69473e..803724ce095c86 100644 --- a/ledger-tool/src/main.rs +++ b/ledger-tool/src/main.rs @@ -2431,13 +2431,13 @@ fn main() { ); accounts_index_config.index_limit_mb = if let Some(limit) = - value_t!(matches, "accounts_index_memory_limit_mb", usize).ok() + value_t!(arg_matches, "accounts_index_memory_limit_mb", usize).ok() { IndexLimitMb::Limit(limit) - } else if matches.is_present("enable_accounts_disk_index") { + } else if arg_matches.is_present("enable_accounts_disk_index") { IndexLimitMb::Unspecified } else { - if matches.is_present("disable_accounts_disk_index") { + if arg_matches.is_present("disable_accounts_disk_index") { warn!("ignoring `--disable-accounts-disk-index` as it specifies default behavior"); } IndexLimitMb::InMemOnly @@ -2724,13 +2724,13 @@ fn main() { let accounts_index_config = AccountsIndexConfig { index_limit_mb: if let Some(limit) = - value_t!(matches, "accounts_index_memory_limit_mb", usize).ok() + value_t!(arg_matches, "accounts_index_memory_limit_mb", usize).ok() { IndexLimitMb::Limit(limit) - } else if matches.is_present("enable_accounts_disk_index") { + } else if arg_matches.is_present("enable_accounts_disk_index") { IndexLimitMb::Unspecified } else { - if matches.is_present("disable_accounts_disk_index") { + if arg_matches.is_present("disable_accounts_disk_index") { warn!("ignoring `--disable-accounts-disk-index` as it specifies default behavior"); } IndexLimitMb::InMemOnly From 05a541bfe33493c558cb497d5d06d7cbde056498 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Tue, 14 Mar 2023 09:49:30 -0700 Subject: [PATCH 353/465] v1.14: mem idx tracks duplicates better (backport of #30701) (#30709) mem idx tracks duplicates better (#30701) (cherry picked from commit 89d5efa0d867e66713b8e2fa0c677c7680278609) Co-authored-by: Jeff Washington (jwash) --- runtime/src/accounts_index.rs | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/runtime/src/accounts_index.rs b/runtime/src/accounts_index.rs index e495e9170d1af1..7a23c300db4c69 100644 --- a/runtime/src/accounts_index.rs +++ b/runtime/src/accounts_index.rs @@ -4,7 +4,7 @@ use { ancestors::Ancestors, bucket_map_holder::{Age, BucketMapHolder}, contains::Contains, - in_mem_accounts_index::InMemAccountsIndex, + in_mem_accounts_index::{InMemAccountsIndex, InsertNewEntryResults}, inline_spl_token::{self, GenericTokenAccount}, inline_spl_token_2022, pubkey_bins::PubkeyBinCalculator24, @@ -1566,7 +1566,7 @@ impl AccountsIndex { (pubkey_bin, Vec::with_capacity(expected_items_per_bin)) }) .collect::>(); - let dirty_pubkeys = items + let mut dirty_pubkeys = items .filter_map(|(pubkey, account_info)| { let pubkey_bin = self.bin_calculator.bin_from_pubkey(&pubkey); let binned_index = (pubkey_bin + random_offset) % bins; @@ -1597,7 +1597,13 @@ impl AccountsIndex { &self.storage.storage, use_disk, ); - r_account_maps.insert_new_entry_if_missing_with_lock(pubkey, new_entry); + match r_account_maps.insert_new_entry_if_missing_with_lock(pubkey, new_entry) { + InsertNewEntryResults::DidNotExist => {} + InsertNewEntryResults::ExistedNewEntryZeroLamports => {} + InsertNewEntryResults::ExistedNewEntryNonZeroLamports => { + dirty_pubkeys.push(pubkey); + } + } }); } insert_time.stop(); From 2171b3fb992aa623de2a6eb44f18db52985efb6a Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Tue, 14 Mar 2023 20:07:02 +0000 Subject: [PATCH 354/465] v1.14: rpc_service: Rename variable for consistency with the rest of the code base (backport of #30694) (#30713) rpc_service: Rename variable for consistency with the rest of the code base (#30694) Rename variable for consistency with the rest of the code base (cherry picked from commit a791e1b541316e3575503fa59deb9fe15b6561dc) Co-authored-by: mvines --- rpc/src/rpc_service.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/rpc/src/rpc_service.rs b/rpc/src/rpc_service.rs index 7048f1253d400f..8151950a7b78c4 100644 --- a/rpc/src/rpc_service.rs +++ b/rpc/src/rpc_service.rs @@ -357,7 +357,7 @@ impl JsonRpcService { max_slots: Arc, leader_schedule_cache: Arc, connection_cache: Arc, - current_transaction_status_slot: Arc, + max_complete_transaction_status_slot: Arc, prioritization_fee_cache: Arc, ) -> Self { info!("rpc bound to {:?}", rpc_addr); @@ -425,7 +425,7 @@ impl JsonRpcService { bigtable_ledger_storage.clone(), blockstore.clone(), block_commitment_cache.clone(), - current_transaction_status_slot.clone(), + max_complete_transaction_status_slot.clone(), ConfirmedBlockUploadConfig::default(), exit_bigtable_ledger_upload_service.clone(), ))) @@ -463,7 +463,7 @@ impl JsonRpcService { largest_accounts_cache, max_slots, leader_schedule_cache, - current_transaction_status_slot, + max_complete_transaction_status_slot, prioritization_fee_cache, ); From 1126e7b048845449338cbd36e4be5d68182e3b97 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Wed, 15 Mar 2023 00:03:12 +0000 Subject: [PATCH 355/465] v1.14: tests: share `GenesisConfig` in `validator_parallel_exit` (backport of #30692) (#30722) tests: share `GenesisConfig` in `validator_parallel_exit` (#30692) (cherry picked from commit a15139ef15645b033806634afb5d8771c82dc827) Co-authored-by: Trent Nelson --- core/src/validator.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/core/src/validator.rs b/core/src/validator.rs index 275ef18173cc7a..be3b5d48881985 100644 --- a/core/src/validator.rs +++ b/core/src/validator.rs @@ -2215,15 +2215,15 @@ mod tests { fn validator_parallel_exit() { let leader_keypair = Keypair::new(); let leader_node = Node::new_localhost_with_pubkey(&leader_keypair.pubkey()); + let genesis_config = + create_genesis_config_with_leader(10_000, &leader_keypair.pubkey(), 1000) + .genesis_config; let mut ledger_paths = vec![]; let mut validators: Vec = (0..2) .map(|_| { let validator_keypair = Keypair::new(); let validator_node = Node::new_localhost_with_pubkey(&validator_keypair.pubkey()); - let genesis_config = - create_genesis_config_with_leader(10_000, &leader_keypair.pubkey(), 1000) - .genesis_config; let (validator_ledger_path, _blockhash) = create_new_tmp_ledger!(&genesis_config); ledger_paths.push(validator_ledger_path.clone()); let vote_account_keypair = Keypair::new(); From 7d10f4dac9c3c32b335a4afa35b0699c48391970 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Wed, 15 Mar 2023 00:30:44 +0000 Subject: [PATCH 356/465] v1.14: Track max_complete_rewards_slot for use in rpc, bigtable (backport of #30698) (#30712) * Track max_complete_rewards_slot for use in rpc, bigtable (#30698) * Add RewardsMessage enum * Cache and update max_complete_rewards_slot * Plumb max_complete_rewards_slot into JsonRpcRequestProcesseor * Use max_complete_rewards_slot to check get_block requests * Use max_complete_rewards_slot to limit Bigtable uploads * Plumb max_complete_rewards_slot into RpcSubscriptions * Use max_complete_rewards_slot to limit block subscriptions * Nit: fix test (cherry picked from commit b389d509a8ecb8337adf1feca78ff7cfeccb112d) * Fix conflicts --------- Co-authored-by: Tyera --- client-test/tests/client.rs | 12 +++++ core/src/cluster_info_vote_listener.rs | 4 ++ core/src/replay_stage.rs | 13 ++++- core/src/rewards_recorder_service.rs | 50 ++++++++++++------- core/src/tvu.rs | 2 + core/src/validator.rs | 7 +++ ledger/src/bigtable_upload_service.rs | 15 ++++-- .../optimistically_confirmed_bank_tracker.rs | 2 + rpc/src/rpc.rs | 22 ++++++-- rpc/src/rpc_pubsub.rs | 24 +++++++++ rpc/src/rpc_pubsub_service.rs | 2 + rpc/src/rpc_service.rs | 4 ++ rpc/src/rpc_subscriptions.rs | 47 ++++++++++++++++- 13 files changed, 175 insertions(+), 29 deletions(-) diff --git a/client-test/tests/client.rs b/client-test/tests/client.rs index 9cf1e5ab8538fd..5832a7a146ac0c 100644 --- a/client-test/tests/client.rs +++ b/client-test/tests/client.rs @@ -130,9 +130,11 @@ fn test_account_subscription() { bank_forks.write().unwrap().insert(bank1); let bob = Keypair::new(); let max_complete_transaction_status_slot = Arc::new(AtomicU64::default()); + let max_complete_rewards_slot = Arc::new(AtomicU64::default()); let subscriptions = Arc::new(RpcSubscriptions::new_for_tests( &exit, max_complete_transaction_status_slot, + max_complete_rewards_slot, bank_forks.clone(), Arc::new(RwLock::new(BlockCommitmentCache::default())), OptimisticallyConfirmedBank::locked_from_bank_forks_root(&bank_forks), @@ -244,10 +246,12 @@ fn test_block_subscription() { max_complete_transaction_status_slot, ); let max_complete_transaction_status_slot = Arc::new(AtomicU64::default()); + let max_complete_rewards_slot = Arc::new(AtomicU64::default()); // setup RpcSubscriptions && PubSubService let subscriptions = Arc::new(RpcSubscriptions::new_for_tests_with_blockstore( &exit, max_complete_transaction_status_slot, + max_complete_rewards_slot, blockstore.clone(), bank_forks.clone(), Arc::new(RwLock::new(BlockCommitmentCache::default())), @@ -337,9 +341,11 @@ fn test_program_subscription() { bank_forks.write().unwrap().insert(bank1); let bob = Keypair::new(); let max_complete_transaction_status_slot = Arc::new(AtomicU64::default()); + let max_complete_rewards_slot = Arc::new(AtomicU64::default()); let subscriptions = Arc::new(RpcSubscriptions::new_for_tests( &exit, max_complete_transaction_status_slot, + max_complete_rewards_slot, bank_forks.clone(), Arc::new(RwLock::new(BlockCommitmentCache::default())), OptimisticallyConfirmedBank::locked_from_bank_forks_root(&bank_forks), @@ -423,9 +429,11 @@ fn test_root_subscription() { let bank1 = Bank::new_from_parent(&bank0, &Pubkey::default(), 1); bank_forks.write().unwrap().insert(bank1); let max_complete_transaction_status_slot = Arc::new(AtomicU64::default()); + let max_complete_rewards_slot = Arc::new(AtomicU64::default()); let subscriptions = Arc::new(RpcSubscriptions::new_for_tests( &exit, max_complete_transaction_status_slot, + max_complete_rewards_slot, bank_forks.clone(), Arc::new(RwLock::new(BlockCommitmentCache::default())), OptimisticallyConfirmedBank::locked_from_bank_forks_root(&bank_forks), @@ -474,9 +482,11 @@ fn test_slot_subscription() { let optimistically_confirmed_bank = OptimisticallyConfirmedBank::locked_from_bank_forks_root(&bank_forks); let max_complete_transaction_status_slot = Arc::new(AtomicU64::default()); + let max_complete_rewards_slot = Arc::new(AtomicU64::default()); let subscriptions = Arc::new(RpcSubscriptions::new_for_tests( &exit, max_complete_transaction_status_slot, + max_complete_rewards_slot, bank_forks, Arc::new(RwLock::new(BlockCommitmentCache::default())), optimistically_confirmed_bank, @@ -546,9 +556,11 @@ async fn test_slot_subscription_async() { let optimistically_confirmed_bank = OptimisticallyConfirmedBank::locked_from_bank_forks_root(&bank_forks); let max_complete_transaction_status_slot = Arc::new(AtomicU64::default()); + let max_complete_rewards_slot = Arc::new(AtomicU64::default()); let subscriptions = Arc::new(RpcSubscriptions::new_for_tests( &exit, max_complete_transaction_status_slot, + max_complete_rewards_slot, bank_forks, Arc::new(RwLock::new(BlockCommitmentCache::default())), optimistically_confirmed_bank, diff --git a/core/src/cluster_info_vote_listener.rs b/core/src/cluster_info_vote_listener.rs index bbe7c2b4a67e79..55d2d1aa3857a1 100644 --- a/core/src/cluster_info_vote_listener.rs +++ b/core/src/cluster_info_vote_listener.rs @@ -1443,9 +1443,11 @@ mod tests { let optimistically_confirmed_bank = OptimisticallyConfirmedBank::locked_from_bank_forks_root(&bank_forks); let max_complete_transaction_status_slot = Arc::new(AtomicU64::default()); + let max_complete_rewards_slot = Arc::new(AtomicU64::default()); let subscriptions = Arc::new(RpcSubscriptions::new_for_tests( &exit, max_complete_transaction_status_slot, + max_complete_rewards_slot, bank_forks, Arc::new(RwLock::new(BlockCommitmentCache::default())), optimistically_confirmed_bank, @@ -1557,9 +1559,11 @@ mod tests { let optimistically_confirmed_bank = OptimisticallyConfirmedBank::locked_from_bank_forks_root(&bank_forks); let max_complete_transaction_status_slot = Arc::new(AtomicU64::default()); + let max_complete_rewards_slot = Arc::new(AtomicU64::default()); let subscriptions = Arc::new(RpcSubscriptions::new_for_tests( &exit, max_complete_transaction_status_slot, + max_complete_rewards_slot, bank_forks, Arc::new(RwLock::new(BlockCommitmentCache::default())), optimistically_confirmed_bank, diff --git a/core/src/replay_stage.rs b/core/src/replay_stage.rs index 229a13a281e88c..f6ddd99e187e7f 100644 --- a/core/src/replay_stage.rs +++ b/core/src/replay_stage.rs @@ -21,7 +21,7 @@ use { latest_validator_votes_for_frozen_banks::LatestValidatorVotesForFrozenBanks, progress_map::{ForkProgress, ProgressMap, PropagatedStats, ReplaySlotStats}, repair_service::DuplicateSlotsResetReceiver, - rewards_recorder_service::RewardsRecorderSender, + rewards_recorder_service::{RewardsMessage, RewardsRecorderSender}, tower_storage::{SavedTower, SavedTowerVersions, TowerStorage}, unfrozen_gossip_verified_vote_hashes::UnfrozenGossipVerifiedVoteHashes, validator::ProcessBlockStore, @@ -3584,9 +3584,12 @@ impl ReplayStage { let rewards = bank.rewards.read().unwrap(); if !rewards.is_empty() { rewards_recorder_sender - .send((bank.slot(), rewards.clone())) + .send(RewardsMessage::Batch((bank.slot(), rewards.clone()))) .unwrap_or_else(|err| warn!("rewards_recorder_sender failed: {:?}", err)); } + rewards_recorder_sender + .send(RewardsMessage::Complete(bank.slot())) + .unwrap_or_else(|err| warn!("rewards_recorder_sender failed: {:?}", err)); } } @@ -3764,9 +3767,11 @@ pub(crate) mod tests { OptimisticallyConfirmedBank::locked_from_bank_forks_root(bank_forks); let exit = Arc::new(AtomicBool::new(false)); let max_complete_transaction_status_slot = Arc::new(AtomicU64::default()); + let max_complete_rewards_slot = Arc::new(AtomicU64::default()); let rpc_subscriptions = Arc::new(RpcSubscriptions::new_for_tests( &exit, max_complete_transaction_status_slot, + max_complete_rewards_slot, bank_forks.clone(), Arc::new(RwLock::new(BlockCommitmentCache::default())), optimistically_confirmed_bank, @@ -4331,9 +4336,11 @@ pub(crate) mod tests { &PrioritizationFeeCache::new(0u64), ); let max_complete_transaction_status_slot = Arc::new(AtomicU64::default()); + let max_complete_rewards_slot = Arc::new(AtomicU64::default()); let rpc_subscriptions = Arc::new(RpcSubscriptions::new_for_tests( &exit, max_complete_transaction_status_slot, + max_complete_rewards_slot, bank_forks.clone(), block_commitment_cache, OptimisticallyConfirmedBank::locked_from_bank_forks_root(&bank_forks), @@ -4402,9 +4409,11 @@ pub(crate) mod tests { let exit = Arc::new(AtomicBool::new(false)); let block_commitment_cache = Arc::new(RwLock::new(BlockCommitmentCache::default())); let max_complete_transaction_status_slot = Arc::new(AtomicU64::default()); + let max_complete_rewards_slot = Arc::new(AtomicU64::default()); let rpc_subscriptions = Arc::new(RpcSubscriptions::new_for_tests( &exit, max_complete_transaction_status_slot, + max_complete_rewards_slot, bank_forks.clone(), block_commitment_cache.clone(), OptimisticallyConfirmedBank::locked_from_bank_forks_root(&bank_forks), diff --git a/core/src/rewards_recorder_service.rs b/core/src/rewards_recorder_service.rs index 10dd8ea9cd0b0c..d83b0a285f9dd2 100644 --- a/core/src/rewards_recorder_service.rs +++ b/core/src/rewards_recorder_service.rs @@ -6,7 +6,7 @@ use { solana_transaction_status::Reward, std::{ sync::{ - atomic::{AtomicBool, Ordering}, + atomic::{AtomicBool, AtomicU64, Ordering}, Arc, }, thread::{self, Builder, JoinHandle}, @@ -14,8 +14,14 @@ use { }, }; -pub type RewardsRecorderReceiver = Receiver<(Slot, Vec<(Pubkey, RewardInfo)>)>; -pub type RewardsRecorderSender = Sender<(Slot, Vec<(Pubkey, RewardInfo)>)>; +pub type RewardsBatch = (Slot, Vec<(Pubkey, RewardInfo)>); +pub type RewardsRecorderReceiver = Receiver; +pub type RewardsRecorderSender = Sender; + +pub enum RewardsMessage { + Batch(RewardsBatch), + Complete(Slot), +} pub struct RewardsRecorderService { thread_hdl: JoinHandle<()>, @@ -25,6 +31,7 @@ impl RewardsRecorderService { #[allow(clippy::new_ret_no_self)] pub fn new( rewards_receiver: RewardsRecorderReceiver, + max_complete_rewards_slot: Arc, blockstore: Arc, exit: &Arc, ) -> Self { @@ -36,7 +43,7 @@ impl RewardsRecorderService { break; } if let Err(RecvTimeoutError::Disconnected) = - Self::write_rewards(&rewards_receiver, &blockstore) + Self::write_rewards(&rewards_receiver, &max_complete_rewards_slot, &blockstore) { break; } @@ -47,23 +54,30 @@ impl RewardsRecorderService { fn write_rewards( rewards_receiver: &RewardsRecorderReceiver, + max_complete_rewards_slot: &Arc, blockstore: &Arc, ) -> Result<(), RecvTimeoutError> { - let (slot, rewards) = rewards_receiver.recv_timeout(Duration::from_secs(1))?; - let rpc_rewards = rewards - .into_iter() - .map(|(pubkey, reward_info)| Reward { - pubkey: pubkey.to_string(), - lamports: reward_info.lamports, - post_balance: reward_info.post_balance, - reward_type: Some(reward_info.reward_type), - commission: reward_info.commission, - }) - .collect(); + match rewards_receiver.recv_timeout(Duration::from_secs(1))? { + RewardsMessage::Batch((slot, rewards)) => { + let rpc_rewards = rewards + .into_iter() + .map(|(pubkey, reward_info)| Reward { + pubkey: pubkey.to_string(), + lamports: reward_info.lamports, + post_balance: reward_info.post_balance, + reward_type: Some(reward_info.reward_type), + commission: reward_info.commission, + }) + .collect(); - blockstore - .write_rewards(slot, rpc_rewards) - .expect("Expect database write to succeed"); + blockstore + .write_rewards(slot, rpc_rewards) + .expect("Expect database write to succeed"); + } + RewardsMessage::Complete(slot) => { + max_complete_rewards_slot.fetch_max(slot, Ordering::SeqCst); + } + } Ok(()) } diff --git a/core/src/tvu.rs b/core/src/tvu.rs index 23e0b089300304..3d8d30ff97d4d4 100644 --- a/core/src/tvu.rs +++ b/core/src/tvu.rs @@ -403,6 +403,7 @@ pub mod tests { let (_, gossip_confirmed_slots_receiver) = unbounded(); let bank_forks = Arc::new(RwLock::new(bank_forks)); let max_complete_transaction_status_slot = Arc::new(AtomicU64::default()); + let max_complete_rewards_slot = Arc::new(AtomicU64::default()); let _ignored_prioritization_fee_cache = Arc::new(PrioritizationFeeCache::new(0u64)); let tvu = Tvu::new( &vote_keypair.pubkey(), @@ -423,6 +424,7 @@ pub mod tests { &Arc::new(RpcSubscriptions::new_for_tests( &exit, max_complete_transaction_status_slot, + max_complete_rewards_slot, bank_forks.clone(), block_commitment_cache.clone(), OptimisticallyConfirmedBank::locked_from_bank_forks_root(&bank_forks), diff --git a/core/src/validator.rs b/core/src/validator.rs index be3b5d48881985..b2853d512b4693 100644 --- a/core/src/validator.rs +++ b/core/src/validator.rs @@ -329,6 +329,7 @@ struct TransactionHistoryServices { max_complete_transaction_status_slot: Arc, rewards_recorder_sender: Option, rewards_recorder_service: Option, + max_complete_rewards_slot: Arc, cache_block_meta_sender: Option, cache_block_meta_service: Option, } @@ -545,6 +546,7 @@ impl Validator { max_complete_transaction_status_slot, rewards_recorder_sender, rewards_recorder_service, + max_complete_rewards_slot, cache_block_meta_sender, cache_block_meta_service, }, @@ -740,6 +742,7 @@ impl Validator { let rpc_subscriptions = Arc::new(RpcSubscriptions::new_with_config( &exit, max_complete_transaction_status_slot.clone(), + max_complete_rewards_slot.clone(), blockstore.clone(), bank_forks.clone(), block_commitment_cache.clone(), @@ -846,6 +849,7 @@ impl Validator { leader_schedule_cache.clone(), connection_cache.clone(), max_complete_transaction_status_slot, + max_complete_rewards_slot, prioritization_fee_cache.clone(), )), if !config.rpc_config.full_api { @@ -1860,10 +1864,12 @@ fn initialize_rpc_transaction_history_services( exit, )); + let max_complete_rewards_slot = Arc::new(AtomicU64::new(blockstore.max_root())); let (rewards_recorder_sender, rewards_receiver) = unbounded(); let rewards_recorder_sender = Some(rewards_recorder_sender); let rewards_recorder_service = Some(RewardsRecorderService::new( rewards_receiver, + max_complete_rewards_slot.clone(), blockstore.clone(), exit, )); @@ -1881,6 +1887,7 @@ fn initialize_rpc_transaction_history_services( max_complete_transaction_status_slot, rewards_recorder_sender, rewards_recorder_service, + max_complete_rewards_slot, cache_block_meta_sender, cache_block_meta_service, } diff --git a/ledger/src/bigtable_upload_service.rs b/ledger/src/bigtable_upload_service.rs index 857190a47de9ab..3149eb96a32d8e 100644 --- a/ledger/src/bigtable_upload_service.rs +++ b/ledger/src/bigtable_upload_service.rs @@ -26,6 +26,7 @@ impl BigTableUploadService { blockstore: Arc, block_commitment_cache: Arc>, max_complete_transaction_status_slot: Arc, + max_complete_rewards_slot: Arc, exit: Arc, ) -> Self { Self::new_with_config( @@ -34,6 +35,7 @@ impl BigTableUploadService { blockstore, block_commitment_cache, max_complete_transaction_status_slot, + max_complete_rewards_slot, ConfirmedBlockUploadConfig::default(), exit, ) @@ -45,6 +47,7 @@ impl BigTableUploadService { blockstore: Arc, block_commitment_cache: Arc>, max_complete_transaction_status_slot: Arc, + max_complete_rewards_slot: Arc, config: ConfirmedBlockUploadConfig, exit: Arc, ) -> Self { @@ -58,6 +61,7 @@ impl BigTableUploadService { blockstore, block_commitment_cache, max_complete_transaction_status_slot, + max_complete_rewards_slot, config, exit, ) @@ -73,6 +77,7 @@ impl BigTableUploadService { blockstore: Arc, block_commitment_cache: Arc>, max_complete_transaction_status_slot: Arc, + max_complete_rewards_slot: Arc, config: ConfirmedBlockUploadConfig, exit: Arc, ) { @@ -83,11 +88,15 @@ impl BigTableUploadService { } // The highest slot eligible for upload is the highest root that has complete - // transaction-status metadata - let highest_complete_root = min( + // transaction-status metadata and rewards + let highest_complete_root = [ max_complete_transaction_status_slot.load(Ordering::SeqCst), + max_complete_rewards_slot.load(Ordering::SeqCst), block_commitment_cache.read().unwrap().root(), - ); + ] + .into_iter() + .min() + .expect("root and max_complete slots exist"); let end_slot = min( highest_complete_root, start_slot.saturating_add(config.max_num_slots_to_check as u64 * 2), diff --git a/rpc/src/optimistically_confirmed_bank_tracker.rs b/rpc/src/optimistically_confirmed_bank_tracker.rs index 3dbc25473c1572..19e74df898244d 100644 --- a/rpc/src/optimistically_confirmed_bank_tracker.rs +++ b/rpc/src/optimistically_confirmed_bank_tracker.rs @@ -346,9 +346,11 @@ mod tests { let block_commitment_cache = Arc::new(RwLock::new(BlockCommitmentCache::default())); let max_complete_transaction_status_slot = Arc::new(AtomicU64::default()); + let max_complete_rewards_slot = Arc::new(AtomicU64::default()); let subscriptions = Arc::new(RpcSubscriptions::new_for_tests( &exit, max_complete_transaction_status_slot, + max_complete_rewards_slot, bank_forks.clone(), block_commitment_cache, optimistically_confirmed_bank.clone(), diff --git a/rpc/src/rpc.rs b/rpc/src/rpc.rs index 6fe5086007d6ed..b133814687160f 100644 --- a/rpc/src/rpc.rs +++ b/rpc/src/rpc.rs @@ -203,6 +203,7 @@ pub struct JsonRpcRequestProcessor { max_slots: Arc, leader_schedule_cache: Arc, max_complete_transaction_status_slot: Arc, + max_complete_rewards_slot: Arc, prioritization_fee_cache: Arc, } impl Metadata for JsonRpcRequestProcessor {} @@ -309,6 +310,7 @@ impl JsonRpcRequestProcessor { max_slots: Arc, leader_schedule_cache: Arc, max_complete_transaction_status_slot: Arc, + max_complete_rewards_slot: Arc, prioritization_fee_cache: Arc, ) -> (Self, Receiver) { let (sender, receiver) = unbounded(); @@ -330,6 +332,7 @@ impl JsonRpcRequestProcessor { max_slots, leader_schedule_cache, max_complete_transaction_status_slot, + max_complete_rewards_slot, prioritization_fee_cache, }, receiver, @@ -395,6 +398,7 @@ impl JsonRpcRequestProcessor { max_slots: Arc::new(MaxSlots::default()), leader_schedule_cache: Arc::new(LeaderScheduleCache::new_from_bank(bank)), max_complete_transaction_status_slot: Arc::new(AtomicU64::default()), + max_complete_rewards_slot: Arc::new(AtomicU64::default()), prioritization_fee_cache: Arc::new(PrioritizationFeeCache::default()), } } @@ -1050,11 +1054,12 @@ impl JsonRpcRequestProcessor { Ok(()) } - fn check_status_is_complete(&self, slot: Slot) -> Result<()> { + fn check_blockstore_writes_complete(&self, slot: Slot) -> Result<()> { if slot > self .max_complete_transaction_status_slot .load(Ordering::SeqCst) + || slot > self.max_complete_rewards_slot.load(Ordering::SeqCst) { Err(RpcCustomError::BlockStatusNotAvailableYet { slot }.into()) } else { @@ -1088,7 +1093,7 @@ impl JsonRpcRequestProcessor { .unwrap() .highest_confirmed_root() { - self.check_status_is_complete(slot)?; + self.check_blockstore_writes_complete(slot)?; let result = self.blockstore.get_rooted_block(slot, true); self.check_blockstore_root(&result, slot)?; let encode_block = |confirmed_block: ConfirmedBlock| -> Result { @@ -1119,7 +1124,7 @@ impl JsonRpcRequestProcessor { // Check if block is confirmed let confirmed_bank = self.bank(Some(CommitmentConfig::confirmed())); if confirmed_bank.status_cache_ancestors().contains(&slot) { - self.check_status_is_complete(slot)?; + self.check_blockstore_writes_complete(slot)?; let result = self.blockstore.get_complete_block(slot, true); return result .ok() @@ -4766,6 +4771,7 @@ pub mod tests { let max_slots = Arc::new(MaxSlots::default()); // note that this means that slot 0 will always be considered complete let max_complete_transaction_status_slot = Arc::new(AtomicU64::new(0)); + let max_complete_rewards_slot = Arc::new(AtomicU64::new(0)); let meta = JsonRpcRequestProcessor::new( JsonRpcConfig { @@ -4786,6 +4792,7 @@ pub mod tests { max_slots.clone(), Arc::new(LeaderScheduleCache::new_from_bank(&bank)), max_complete_transaction_status_slot.clone(), + max_complete_rewards_slot, Arc::new(PrioritizationFeeCache::default()), ) .0; @@ -6379,6 +6386,7 @@ pub mod tests { Arc::new(MaxSlots::default()), Arc::new(LeaderScheduleCache::default()), Arc::new(AtomicU64::default()), + Arc::new(AtomicU64::default()), Arc::new(PrioritizationFeeCache::default()), ); let connection_cache = Arc::new(ConnectionCache::default()); @@ -6650,6 +6658,7 @@ pub mod tests { Arc::new(MaxSlots::default()), Arc::new(LeaderScheduleCache::default()), Arc::new(AtomicU64::default()), + Arc::new(AtomicU64::default()), Arc::new(PrioritizationFeeCache::default()), ); let connection_cache = Arc::new(ConnectionCache::default()); @@ -8258,9 +8267,11 @@ pub mod tests { OptimisticallyConfirmedBank::locked_from_bank_forks_root(&bank_forks); let mut pending_optimistically_confirmed_banks = HashSet::new(); let max_complete_transaction_status_slot = Arc::new(AtomicU64::default()); + let max_complete_rewards_slot = Arc::new(AtomicU64::default()); let subscriptions = Arc::new(RpcSubscriptions::new_for_tests( &exit, - max_complete_transaction_status_slot, + max_complete_transaction_status_slot.clone(), + max_complete_rewards_slot.clone(), bank_forks.clone(), block_commitment_cache.clone(), optimistically_confirmed_bank.clone(), @@ -8281,7 +8292,8 @@ pub mod tests { Arc::new(RwLock::new(LargestAccountsCache::new(30))), Arc::new(MaxSlots::default()), Arc::new(LeaderScheduleCache::default()), - Arc::new(AtomicU64::default()), + max_complete_transaction_status_slot, + max_complete_rewards_slot, Arc::new(PrioritizationFeeCache::default()), ); diff --git a/rpc/src/rpc_pubsub.rs b/rpc/src/rpc_pubsub.rs index 162a8a06ff6cf5..7d7cbeb2520a99 100644 --- a/rpc/src/rpc_pubsub.rs +++ b/rpc/src/rpc_pubsub.rs @@ -676,9 +676,11 @@ mod tests { let blockhash = bank.last_blockhash(); let bank_forks = Arc::new(RwLock::new(BankForks::new(bank))); let max_complete_transaction_status_slot = Arc::new(AtomicU64::default()); + let max_complete_rewards_slot = Arc::new(AtomicU64::default()); let rpc_subscriptions = Arc::new(RpcSubscriptions::new_for_tests( &Arc::new(AtomicBool::new(false)), max_complete_transaction_status_slot, + max_complete_rewards_slot, bank_forks.clone(), Arc::new(RwLock::new(BlockCommitmentCache::new_for_tests())), OptimisticallyConfirmedBank::locked_from_bank_forks_root(&bank_forks), @@ -805,8 +807,10 @@ mod tests { let mut io = IoHandler::<()>::default(); let max_complete_transaction_status_slot = Arc::new(AtomicU64::default()); + let max_complete_rewards_slot = Arc::new(AtomicU64::default()); let subscriptions = Arc::new(RpcSubscriptions::default_with_bank_forks( max_complete_transaction_status_slot, + max_complete_rewards_slot, bank_forks, )); let (rpc, _receiver) = rpc_pubsub_service::test_connection(&subscriptions); @@ -862,9 +866,11 @@ mod tests { let bank1 = Bank::new_from_parent(&bank0, &Pubkey::default(), 1); bank_forks.write().unwrap().insert(bank1); let max_complete_transaction_status_slot = Arc::new(AtomicU64::default()); + let max_complete_rewards_slot = Arc::new(AtomicU64::default()); let rpc_subscriptions = Arc::new(RpcSubscriptions::new_for_tests( &Arc::new(AtomicBool::new(false)), max_complete_transaction_status_slot, + max_complete_rewards_slot, bank_forks.clone(), Arc::new(RwLock::new(BlockCommitmentCache::new_for_tests_with_slots( 1, 1, @@ -992,9 +998,11 @@ mod tests { let bank1 = Bank::new_from_parent(&bank0, &Pubkey::default(), 1); bank_forks.write().unwrap().insert(bank1); let max_complete_transaction_status_slot = Arc::new(AtomicU64::default()); + let max_complete_rewards_slot = Arc::new(AtomicU64::default()); let rpc_subscriptions = Arc::new(RpcSubscriptions::new_for_tests( &Arc::new(AtomicBool::new(false)), max_complete_transaction_status_slot, + max_complete_rewards_slot, bank_forks.clone(), Arc::new(RwLock::new(BlockCommitmentCache::new_for_tests_with_slots( 1, 1, @@ -1084,8 +1092,10 @@ mod tests { let mut io = IoHandler::<()>::default(); let max_complete_transaction_status_slot = Arc::new(AtomicU64::default()); + let max_complete_rewards_slot = Arc::new(AtomicU64::default()); let subscriptions = Arc::new(RpcSubscriptions::default_with_bank_forks( max_complete_transaction_status_slot, + max_complete_rewards_slot, bank_forks, )); let (rpc, _receiver) = rpc_pubsub_service::test_connection(&subscriptions); @@ -1132,9 +1142,11 @@ mod tests { let exit = Arc::new(AtomicBool::new(false)); let max_complete_transaction_status_slot = Arc::new(AtomicU64::default()); + let max_complete_rewards_slot = Arc::new(AtomicU64::default()); let rpc_subscriptions = Arc::new(RpcSubscriptions::new_for_tests( &exit, max_complete_transaction_status_slot, + max_complete_rewards_slot, bank_forks.clone(), Arc::new(RwLock::new(BlockCommitmentCache::new_for_tests())), OptimisticallyConfirmedBank::locked_from_bank_forks_root(&bank_forks), @@ -1186,9 +1198,11 @@ mod tests { let exit = Arc::new(AtomicBool::new(false)); let block_commitment_cache = Arc::new(RwLock::new(BlockCommitmentCache::new_for_tests())); let max_complete_transaction_status_slot = Arc::new(AtomicU64::default()); + let max_complete_rewards_slot = Arc::new(AtomicU64::default()); let subscriptions = Arc::new(RpcSubscriptions::new_for_tests( &exit, max_complete_transaction_status_slot, + max_complete_rewards_slot, bank_forks.clone(), block_commitment_cache, OptimisticallyConfirmedBank::locked_from_bank_forks_root(&bank_forks), @@ -1258,8 +1272,10 @@ mod tests { let bank = Bank::new_for_tests(&genesis_config); let bank_forks = Arc::new(RwLock::new(BankForks::new(bank))); let max_complete_transaction_status_slot = Arc::new(AtomicU64::default()); + let max_complete_rewards_slot = Arc::new(AtomicU64::default()); let rpc_subscriptions = Arc::new(RpcSubscriptions::default_with_bank_forks( max_complete_transaction_status_slot, + max_complete_rewards_slot, bank_forks, )); let (rpc, mut receiver) = rpc_pubsub_service::test_connection(&rpc_subscriptions); @@ -1290,8 +1306,10 @@ mod tests { let bank = Bank::new_for_tests(&genesis_config); let bank_forks = Arc::new(RwLock::new(BankForks::new(bank))); let max_complete_transaction_status_slot = Arc::new(AtomicU64::default()); + let max_complete_rewards_slot = Arc::new(AtomicU64::default()); let rpc_subscriptions = Arc::new(RpcSubscriptions::default_with_bank_forks( max_complete_transaction_status_slot, + max_complete_rewards_slot, bank_forks, )); let (rpc, mut receiver) = rpc_pubsub_service::test_connection(&rpc_subscriptions); @@ -1336,9 +1354,11 @@ mod tests { let optimistically_confirmed_bank = OptimisticallyConfirmedBank::locked_from_bank_forks_root(&bank_forks); let max_complete_transaction_status_slot = Arc::new(AtomicU64::default()); + let max_complete_rewards_slot = Arc::new(AtomicU64::default()); let subscriptions = Arc::new(RpcSubscriptions::new_for_tests( &exit, max_complete_transaction_status_slot, + max_complete_rewards_slot, bank_forks, block_commitment_cache, optimistically_confirmed_bank, @@ -1372,8 +1392,10 @@ mod tests { let bank = Bank::new_for_tests(&genesis_config); let bank_forks = Arc::new(RwLock::new(BankForks::new(bank))); let max_complete_transaction_status_slot = Arc::new(AtomicU64::default()); + let max_complete_rewards_slot = Arc::new(AtomicU64::default()); let rpc_subscriptions = Arc::new(RpcSubscriptions::default_with_bank_forks( max_complete_transaction_status_slot, + max_complete_rewards_slot, bank_forks, )); let (rpc, _receiver) = rpc_pubsub_service::test_connection(&rpc_subscriptions); @@ -1389,8 +1411,10 @@ mod tests { let bank = Bank::new_for_tests(&genesis_config); let bank_forks = Arc::new(RwLock::new(BankForks::new(bank))); let max_complete_transaction_status_slot = Arc::new(AtomicU64::default()); + let max_complete_rewards_slot = Arc::new(AtomicU64::default()); let rpc_subscriptions = Arc::new(RpcSubscriptions::default_with_bank_forks( max_complete_transaction_status_slot, + max_complete_rewards_slot, bank_forks, )); let (rpc, _receiver) = rpc_pubsub_service::test_connection(&rpc_subscriptions); diff --git a/rpc/src/rpc_pubsub_service.rs b/rpc/src/rpc_pubsub_service.rs index 9b5139a9efb3a6..95f7b5d9c8256b 100644 --- a/rpc/src/rpc_pubsub_service.rs +++ b/rpc/src/rpc_pubsub_service.rs @@ -401,6 +401,7 @@ mod tests { let pubsub_addr = SocketAddr::new(IpAddr::V4(Ipv4Addr::new(0, 0, 0, 0)), 0); let exit = Arc::new(AtomicBool::new(false)); let max_complete_transaction_status_slot = Arc::new(AtomicU64::default()); + let max_complete_rewards_slot = Arc::new(AtomicU64::default()); let GenesisConfigInfo { genesis_config, .. } = create_genesis_config(10_000); let bank = Bank::new_for_tests(&genesis_config); let bank_forks = Arc::new(RwLock::new(BankForks::new(bank))); @@ -409,6 +410,7 @@ mod tests { let subscriptions = Arc::new(RpcSubscriptions::new_for_tests( &exit, max_complete_transaction_status_slot, + max_complete_rewards_slot, bank_forks, Arc::new(RwLock::new(BlockCommitmentCache::new_for_tests())), optimistically_confirmed_bank, diff --git a/rpc/src/rpc_service.rs b/rpc/src/rpc_service.rs index 8151950a7b78c4..cbc367d939eef2 100644 --- a/rpc/src/rpc_service.rs +++ b/rpc/src/rpc_service.rs @@ -358,6 +358,7 @@ impl JsonRpcService { leader_schedule_cache: Arc, connection_cache: Arc, max_complete_transaction_status_slot: Arc, + max_complete_rewards_slot: Arc, prioritization_fee_cache: Arc, ) -> Self { info!("rpc bound to {:?}", rpc_addr); @@ -426,6 +427,7 @@ impl JsonRpcService { blockstore.clone(), block_commitment_cache.clone(), max_complete_transaction_status_slot.clone(), + max_complete_rewards_slot.clone(), ConfirmedBlockUploadConfig::default(), exit_bigtable_ledger_upload_service.clone(), ))) @@ -464,6 +466,7 @@ impl JsonRpcService { max_slots, leader_schedule_cache, max_complete_transaction_status_slot, + max_complete_rewards_slot, prioritization_fee_cache, ); @@ -646,6 +649,7 @@ mod tests { Arc::new(LeaderScheduleCache::default()), connection_cache, Arc::new(AtomicU64::default()), + Arc::new(AtomicU64::default()), Arc::new(PrioritizationFeeCache::default()), ); let thread = rpc_service.thread_hdl.thread(); diff --git a/rpc/src/rpc_subscriptions.rs b/rpc/src/rpc_subscriptions.rs index bc463940f76485..852d5e89520a1e 100644 --- a/rpc/src/rpc_subscriptions.rs +++ b/rpc/src/rpc_subscriptions.rs @@ -546,6 +546,7 @@ impl RpcSubscriptions { pub fn new( exit: &Arc, max_complete_transaction_status_slot: Arc, + max_complete_rewards_slot: Arc, blockstore: Arc, bank_forks: Arc>, block_commitment_cache: Arc>, @@ -554,6 +555,7 @@ impl RpcSubscriptions { Self::new_with_config( exit, max_complete_transaction_status_slot, + max_complete_rewards_slot, blockstore, bank_forks, block_commitment_cache, @@ -566,6 +568,7 @@ impl RpcSubscriptions { pub fn new_for_tests( exit: &Arc, max_complete_transaction_status_slot: Arc, + max_complete_rewards_slot: Arc, bank_forks: Arc>, block_commitment_cache: Arc>, optimistically_confirmed_bank: Arc>, @@ -577,6 +580,7 @@ impl RpcSubscriptions { Self::new_for_tests_with_blockstore( exit, max_complete_transaction_status_slot, + max_complete_rewards_slot, blockstore, bank_forks, block_commitment_cache, @@ -587,6 +591,7 @@ impl RpcSubscriptions { pub fn new_for_tests_with_blockstore( exit: &Arc, max_complete_transaction_status_slot: Arc, + max_complete_rewards_slot: Arc, blockstore: Arc, bank_forks: Arc>, block_commitment_cache: Arc>, @@ -597,6 +602,7 @@ impl RpcSubscriptions { let rpc_subscriptions = Self::new_with_config( exit, max_complete_transaction_status_slot, + max_complete_rewards_slot, blockstore, bank_forks, block_commitment_cache, @@ -621,6 +627,7 @@ impl RpcSubscriptions { pub fn new_with_config( exit: &Arc, max_complete_transaction_status_slot: Arc, + max_complete_rewards_slot: Arc, blockstore: Arc, bank_forks: Arc>, block_commitment_cache: Arc>, @@ -662,6 +669,7 @@ impl RpcSubscriptions { Self::process_notifications( exit_clone, max_complete_transaction_status_slot, + max_complete_rewards_slot, blockstore, notifier, notification_receiver, @@ -697,6 +705,7 @@ impl RpcSubscriptions { // For tests only... pub fn default_with_bank_forks( max_complete_transaction_status_slot: Arc, + max_complete_rewards_slot: Arc, bank_forks: Arc>, ) -> Self { let ledger_path = get_tmp_ledger_path!(); @@ -707,6 +716,7 @@ impl RpcSubscriptions { Self::new( &Arc::new(AtomicBool::new(false)), max_complete_transaction_status_slot, + max_complete_rewards_slot, blockstore, bank_forks, Arc::new(RwLock::new(BlockCommitmentCache::default())), @@ -776,9 +786,11 @@ impl RpcSubscriptions { } } + #[allow(clippy::too_many_arguments)] fn process_notifications( exit: Arc, max_complete_transaction_status_slot: Arc, + max_complete_rewards_slot: Arc, blockstore: Arc, notifier: RpcNotifier, notification_receiver: Receiver, @@ -864,6 +876,7 @@ impl RpcSubscriptions { const SOURCE: &str = "bank"; RpcSubscriptions::notify_watchers( max_complete_transaction_status_slot.clone(), + max_complete_rewards_slot.clone(), subscriptions.commitment_watchers(), &bank_forks, &blockstore, @@ -880,6 +893,7 @@ impl RpcSubscriptions { const SOURCE: &str = "gossip"; RpcSubscriptions::notify_watchers( max_complete_transaction_status_slot.clone(), + max_complete_rewards_slot.clone(), subscriptions.gossip_watchers(), &bank_forks, &blockstore, @@ -934,6 +948,7 @@ impl RpcSubscriptions { fn notify_watchers( max_complete_transaction_status_slot: Arc, + max_complete_rewards_slot: Arc, subscriptions: &HashMap>, bank_forks: &Arc>, blockstore: &Blockstore, @@ -1030,7 +1045,9 @@ impl RpcSubscriptions { // caused by non-deterministic concurrency accesses, we // break out of the loop. Besides if the current `s` is // greater, then any `s + K` is also greater. - if s > max_complete_transaction_status_slot.load(Ordering::SeqCst) { + if s > max_complete_transaction_status_slot.load(Ordering::SeqCst) + || s > max_complete_rewards_slot.load(Ordering::SeqCst) + { break; } @@ -1323,9 +1340,11 @@ pub(crate) mod tests { let exit = Arc::new(AtomicBool::new(false)); let max_complete_transaction_status_slot = Arc::new(AtomicU64::default()); + let max_complete_rewards_slot = Arc::new(AtomicU64::default()); let subscriptions = Arc::new(RpcSubscriptions::new_for_tests( &exit, max_complete_transaction_status_slot, + max_complete_rewards_slot, bank_forks.clone(), Arc::new(RwLock::new(BlockCommitmentCache::new_for_tests_with_slots( 1, 1, @@ -1440,9 +1459,11 @@ pub(crate) mod tests { let blockstore = Blockstore::open(&ledger_path).unwrap(); let blockstore = Arc::new(blockstore); let max_complete_transaction_status_slot = Arc::new(AtomicU64::default()); + let max_complete_rewards_slot = Arc::new(AtomicU64::default()); let subscriptions = Arc::new(RpcSubscriptions::new_for_tests_with_blockstore( &exit, max_complete_transaction_status_slot, + max_complete_rewards_slot, blockstore.clone(), bank_forks.clone(), Arc::new(RwLock::new(BlockCommitmentCache::new_for_tests())), @@ -1558,9 +1579,11 @@ pub(crate) mod tests { let blockstore = Blockstore::open(&ledger_path).unwrap(); let blockstore = Arc::new(blockstore); let max_complete_transaction_status_slot = Arc::new(AtomicU64::default()); + let max_complete_rewards_slot = Arc::new(AtomicU64::default()); let subscriptions = Arc::new(RpcSubscriptions::new_for_tests_with_blockstore( &exit, max_complete_transaction_status_slot, + max_complete_rewards_slot, blockstore.clone(), bank_forks.clone(), Arc::new(RwLock::new(BlockCommitmentCache::new_for_tests())), @@ -1674,9 +1697,11 @@ pub(crate) mod tests { let blockstore = Blockstore::open(&ledger_path).unwrap(); let blockstore = Arc::new(blockstore); let max_complete_transaction_status_slot = Arc::new(AtomicU64::default()); + let max_complete_rewards_slot = Arc::new(AtomicU64::default()); let subscriptions = Arc::new(RpcSubscriptions::new_for_tests_with_blockstore( &exit, max_complete_transaction_status_slot, + max_complete_rewards_slot, blockstore.clone(), bank_forks.clone(), Arc::new(RwLock::new(BlockCommitmentCache::new_for_tests())), @@ -1805,9 +1830,11 @@ pub(crate) mod tests { let optimistically_confirmed_bank = OptimisticallyConfirmedBank::locked_from_bank_forks_root(&bank_forks); let max_complete_transaction_status_slot = Arc::new(AtomicU64::default()); + let max_complete_rewards_slot = Arc::new(AtomicU64::default()); let subscriptions = Arc::new(RpcSubscriptions::new_for_tests( &exit, max_complete_transaction_status_slot, + max_complete_rewards_slot, bank_forks, Arc::new(RwLock::new(BlockCommitmentCache::new_for_tests())), optimistically_confirmed_bank, @@ -1952,9 +1979,11 @@ pub(crate) mod tests { OptimisticallyConfirmedBank::locked_from_bank_forks_root(&bank_forks); let mut pending_optimistically_confirmed_banks = HashSet::new(); let max_complete_transaction_status_slot = Arc::new(AtomicU64::default()); + let max_complete_rewards_slot = Arc::new(AtomicU64::default()); let subscriptions = Arc::new(RpcSubscriptions::new_for_tests( &exit, max_complete_transaction_status_slot, + max_complete_rewards_slot, bank_forks.clone(), Arc::new(RwLock::new(BlockCommitmentCache::new_for_tests_with_slots( 1, 1, @@ -2122,9 +2151,11 @@ pub(crate) mod tests { OptimisticallyConfirmedBank::locked_from_bank_forks_root(&bank_forks); let mut pending_optimistically_confirmed_banks = HashSet::new(); let max_complete_transaction_status_slot = Arc::new(AtomicU64::default()); + let max_complete_rewards_slot = Arc::new(AtomicU64::default()); let subscriptions = Arc::new(RpcSubscriptions::new_for_tests( &exit, max_complete_transaction_status_slot, + max_complete_rewards_slot, bank_forks.clone(), Arc::new(RwLock::new(BlockCommitmentCache::new_for_tests_with_slots( 1, 1, @@ -2233,9 +2264,11 @@ pub(crate) mod tests { OptimisticallyConfirmedBank::locked_from_bank_forks_root(&bank_forks); let mut pending_optimistically_confirmed_banks = HashSet::new(); let max_complete_transaction_status_slot = Arc::new(AtomicU64::default()); + let max_complete_rewards_slot = Arc::new(AtomicU64::default()); let subscriptions = Arc::new(RpcSubscriptions::new_for_tests( &exit, max_complete_transaction_status_slot, + max_complete_rewards_slot, bank_forks.clone(), Arc::new(RwLock::new(BlockCommitmentCache::new_for_tests_with_slots( 1, 1, @@ -2420,9 +2453,11 @@ pub(crate) mod tests { let optimistically_confirmed_bank = OptimisticallyConfirmedBank::locked_from_bank_forks_root(&bank_forks); let max_complete_transaction_status_slot = Arc::new(AtomicU64::default()); + let max_complete_rewards_slot = Arc::new(AtomicU64::default()); let subscriptions = Arc::new(RpcSubscriptions::new_for_tests( &exit, max_complete_transaction_status_slot, + max_complete_rewards_slot, bank_forks, Arc::new(RwLock::new(block_commitment_cache)), optimistically_confirmed_bank, @@ -2594,9 +2629,11 @@ pub(crate) mod tests { let optimistically_confirmed_bank = OptimisticallyConfirmedBank::locked_from_bank_forks_root(&bank_forks); let max_complete_transaction_status_slot = Arc::new(AtomicU64::default()); + let max_complete_rewards_slot = Arc::new(AtomicU64::default()); let subscriptions = Arc::new(RpcSubscriptions::new_for_tests( &exit, max_complete_transaction_status_slot, + max_complete_rewards_slot, bank_forks, Arc::new(RwLock::new(BlockCommitmentCache::new_for_tests())), optimistically_confirmed_bank, @@ -2640,9 +2677,11 @@ pub(crate) mod tests { let optimistically_confirmed_bank = OptimisticallyConfirmedBank::locked_from_bank_forks_root(&bank_forks); let max_complete_transaction_status_slot = Arc::new(AtomicU64::default()); + let max_complete_rewards_slot = Arc::new(AtomicU64::default()); let subscriptions = Arc::new(RpcSubscriptions::new_for_tests( &exit, max_complete_transaction_status_slot, + max_complete_rewards_slot, bank_forks, Arc::new(RwLock::new(BlockCommitmentCache::new_for_tests())), optimistically_confirmed_bank, @@ -2698,9 +2737,11 @@ pub(crate) mod tests { let exit = Arc::new(AtomicBool::new(false)); let max_complete_transaction_status_slot = Arc::new(AtomicU64::default()); + let max_complete_rewards_slot = Arc::new(AtomicU64::default()); let subscriptions = Arc::new(RpcSubscriptions::new_for_tests( &exit, max_complete_transaction_status_slot, + max_complete_rewards_slot, bank_forks.clone(), Arc::new(RwLock::new(BlockCommitmentCache::new_for_tests_with_slots( 1, 1, @@ -2888,11 +2929,13 @@ pub(crate) mod tests { let exit = Arc::new(AtomicBool::new(false)); let max_complete_transaction_status_slot = Arc::new(AtomicU64::default()); + let max_complete_rewards_slot = Arc::new(AtomicU64::default()); let optimistically_confirmed_bank = OptimisticallyConfirmedBank::locked_from_bank_forks_root(&bank_forks); let subscriptions = Arc::new(RpcSubscriptions::new_for_tests( &exit, max_complete_transaction_status_slot, + max_complete_rewards_slot, bank_forks.clone(), Arc::new(RwLock::new(BlockCommitmentCache::new_for_tests())), optimistically_confirmed_bank, @@ -2962,9 +3005,11 @@ pub(crate) mod tests { let GenesisConfigInfo { genesis_config, .. } = create_genesis_config(100); let bank = Bank::new_for_tests(&genesis_config); let max_complete_transaction_status_slot = Arc::new(AtomicU64::default()); + let max_complete_rewards_slot = Arc::new(AtomicU64::default()); let bank_forks = Arc::new(RwLock::new(BankForks::new(bank))); let subscriptions = Arc::new(RpcSubscriptions::default_with_bank_forks( max_complete_transaction_status_slot, + max_complete_rewards_slot, bank_forks, )); From 16aef760e4189aae36e6fea50aabb8e1c3cd03ee Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Wed, 15 Mar 2023 02:05:08 +0100 Subject: [PATCH 357/465] v1.14: program-test: Add token-2022 to default programs (backport of #29878) (#30708) * program-test: Add token-2022 to default programs (#29878) * program-test: Add token-2022 to default programs * Use the upgradeable loader (cherry picked from commit e326f4f60ba19be9c0fe7d0f307e2141c20d9b99) # Conflicts: # program-test/src/programs.rs * Fix merge conflict --------- Co-authored-by: Jon Cinque Co-authored-by: Jon Cinque --- fetch-spl.sh | 1 + program-test/src/programs.rs | 60 +++++++++++++--- .../src/programs/spl_token_2022-0.5.0.so | Bin 0 -> 1382016 bytes program-test/tests/spl.rs | 65 ++++++++++++++++++ 4 files changed, 118 insertions(+), 8 deletions(-) create mode 100644 program-test/src/programs/spl_token_2022-0.5.0.so create mode 100644 program-test/tests/spl.rs diff --git a/fetch-spl.sh b/fetch-spl.sh index 3882f536cd108c..9787bab50764b7 100755 --- a/fetch-spl.sh +++ b/fetch-spl.sh @@ -39,6 +39,7 @@ fetch_program() { } fetch_program token 3.5.0 TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA BPFLoader2111111111111111111111111111111111 +fetch_program token-2022 0.5.0 TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb BPFLoader2111111111111111111111111111111111 fetch_program memo 1.0.0 Memo1UhkJRfHyvLMcVucJwxXeuD728EqVDDwQDxFMNo BPFLoader1111111111111111111111111111111111 fetch_program memo 3.0.0 MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr BPFLoader2111111111111111111111111111111111 fetch_program associated-token-account 1.1.2 ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL BPFLoader2111111111111111111111111111111111 diff --git a/program-test/src/programs.rs b/program-test/src/programs.rs index f7e2c7e14ec52a..78d67453da2ba5 100644 --- a/program-test/src/programs.rs +++ b/program-test/src/programs.rs @@ -1,5 +1,6 @@ use solana_sdk::{ account::{Account, AccountSharedData}, + bpf_loader_upgradeable::UpgradeableLoaderState, pubkey::Pubkey, rent::Rent, }; @@ -7,6 +8,9 @@ use solana_sdk::{ mod spl_token { solana_sdk::declare_id!("TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"); } +mod spl_token_2022 { + solana_sdk::declare_id!("TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb"); +} mod spl_memo_1_0 { solana_sdk::declare_id!("Memo1UhkJRfHyvLMcVucJwxXeuD728EqVDDwQDxFMNo"); } @@ -17,18 +21,30 @@ mod spl_associated_token_account { solana_sdk::declare_id!("ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL"); } -static SPL_PROGRAMS: &[(Pubkey, &[u8])] = &[ - (spl_token::ID, include_bytes!("programs/spl_token-3.5.0.so")), +static SPL_PROGRAMS: &[(Pubkey, Pubkey, &[u8])] = &[ + ( + spl_token::ID, + solana_sdk::bpf_loader::ID, + include_bytes!("programs/spl_token-3.5.0.so"), + ), + ( + spl_token_2022::ID, + solana_sdk::bpf_loader_upgradeable::ID, + include_bytes!("programs/spl_token_2022-0.5.0.so"), + ), ( spl_memo_1_0::ID, + solana_sdk::bpf_loader::ID, include_bytes!("programs/spl_memo-1.0.0.so"), ), ( spl_memo_3_0::ID, + solana_sdk::bpf_loader::ID, include_bytes!("programs/spl_memo-3.0.0.so"), ), ( spl_associated_token_account::ID, + solana_sdk::bpf_loader::ID, include_bytes!("programs/spl_associated_token_account-1.1.1.so"), ), ]; @@ -36,17 +52,45 @@ static SPL_PROGRAMS: &[(Pubkey, &[u8])] = &[ pub fn spl_programs(rent: &Rent) -> Vec<(Pubkey, AccountSharedData)> { SPL_PROGRAMS .iter() - .map(|(program_id, elf)| { - ( + .flat_map(|(program_id, loader_id, elf)| { + let mut accounts = vec![]; + let data = if *loader_id == solana_sdk::bpf_loader_upgradeable::ID { + let (programdata_address, _) = + Pubkey::find_program_address(&[program_id.as_ref()], loader_id); + let mut program_data = bincode::serialize(&UpgradeableLoaderState::ProgramData { + slot: 0, + upgrade_authority_address: Some(Pubkey::default()), + }) + .unwrap(); + program_data.extend_from_slice(elf); + accounts.push(( + programdata_address, + AccountSharedData::from(Account { + lamports: rent.minimum_balance(program_data.len()).max(1), + data: program_data, + owner: *loader_id, + executable: false, + rent_epoch: 0, + }), + )); + bincode::serialize(&UpgradeableLoaderState::Program { + programdata_address, + }) + .unwrap() + } else { + elf.to_vec() + }; + accounts.push(( *program_id, AccountSharedData::from(Account { - lamports: rent.minimum_balance(elf.len()).min(1), - data: elf.to_vec(), - owner: solana_sdk::bpf_loader::id(), + lamports: rent.minimum_balance(data.len()).max(1), + data, + owner: *loader_id, executable: true, rent_epoch: 0, }), - ) + )); + accounts.into_iter() }) .collect() } diff --git a/program-test/src/programs/spl_token_2022-0.5.0.so b/program-test/src/programs/spl_token_2022-0.5.0.so new file mode 100644 index 0000000000000000000000000000000000000000..4253bfb1b44912962e66c130db004e3698b2541c GIT binary patch literal 1382016 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 z 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≤+X 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 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF j5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5*Bp9%aI%(htv literal 0 HcmV?d00001 diff --git a/program-test/tests/spl.rs b/program-test/tests/spl.rs new file mode 100644 index 00000000000000..a97cdc51bd2656 --- /dev/null +++ b/program-test/tests/spl.rs @@ -0,0 +1,65 @@ +use { + solana_program_test::{programs::spl_programs, ProgramTest}, + solana_sdk::{ + bpf_loader, bpf_loader_upgradeable, + instruction::{AccountMeta, Instruction}, + pubkey::Pubkey, + signature::Signer, + signer::keypair::Keypair, + system_instruction, + sysvar::rent, + transaction::Transaction, + }, +}; + +#[tokio::test] +async fn programs_present() { + let (mut banks_client, _, _) = ProgramTest::default().start().await; + let rent = banks_client.get_rent().await.unwrap(); + let token_2022_id = Pubkey::try_from("TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb").unwrap(); + let (token_2022_programdata_id, _) = + Pubkey::find_program_address(&[token_2022_id.as_ref()], &bpf_loader_upgradeable::id()); + + for (program_id, _) in spl_programs(&rent) { + let program_account = banks_client.get_account(program_id).await.unwrap().unwrap(); + if program_id == token_2022_id || program_id == token_2022_programdata_id { + assert_eq!(program_account.owner, bpf_loader_upgradeable::id()); + } else { + assert_eq!(program_account.owner, bpf_loader::id()); + } + } +} + +#[tokio::test] +async fn token_2022() { + let (mut banks_client, payer, recent_blockhash) = ProgramTest::default().start().await; + + let token_2022_id = Pubkey::try_from("TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb").unwrap(); + let mint = Keypair::new(); + let rent = banks_client.get_rent().await.unwrap(); + let space = 82; + let transaction = Transaction::new_signed_with_payer( + &[ + system_instruction::create_account( + &payer.pubkey(), + &mint.pubkey(), + rent.minimum_balance(space), + space as u64, + &token_2022_id, + ), + Instruction::new_with_bytes( + token_2022_id, + &[0; 35], // initialize mint + vec![ + AccountMeta::new(mint.pubkey(), false), + AccountMeta::new_readonly(rent::id(), false), + ], + ), + ], + Some(&payer.pubkey()), + &[&payer, &mint], + recent_blockhash, + ); + + banks_client.process_transaction(transaction).await.unwrap(); +} From 0bdda789f0b65327007b610db0f480ead40cc37e Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Wed, 15 Mar 2023 06:59:03 -0700 Subject: [PATCH 358/465] v1.14: validators always skip clean/shrink on startup (backport of #30710) (#30714) * validators always skip clean/shrink on startup (#30710) * validators always skip clean/shrink on startup * move arg to get_deprecated_arguments (cherry picked from commit 62fe6ea7a0e110fc8fcca95287da7479dc2465a3) # Conflicts: # validator/src/cli.rs * adapt to master changes * add deprecated log --------- Co-authored-by: Jeff Washington (jwash) --- validator/src/main.rs | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/validator/src/main.rs b/validator/src/main.rs index 9f84ff005b2c40..6109a745a2920b 100644 --- a/validator/src/main.rs +++ b/validator/src/main.rs @@ -1668,8 +1668,8 @@ pub fn main() { .arg( Arg::with_name("accounts_db_skip_shrink") .long("accounts-db-skip-shrink") - .help("Enables faster starting of validators by skipping shrink. \ - This option is for use during testing."), + .help("This is obsolete since it is now enabled by default. Enables faster starting of validators by skipping startup clean and shrink.") + .hidden(true), ) .arg( Arg::with_name("accounts_db_skip_rewrites") @@ -2588,6 +2588,10 @@ pub fn main() { } let full_api = matches.is_present("full_rpc_api"); + if matches.is_present("accounts_db_skip_shrink") { + warn!("`--accounts-db-skip-shrink` is deprecated. please consider removing it from the validator command line argument list"); + } + let mut validator_config = ValidatorConfig { require_tower: matches.is_present("require_tower"), tower_storage, @@ -2707,7 +2711,7 @@ pub fn main() { accounts_db_caching_enabled: true, accounts_db_test_hash_calculation: matches.is_present("accounts_db_test_hash_calculation"), accounts_db_config, - accounts_db_skip_shrink: matches.is_present("accounts_db_skip_shrink"), + accounts_db_skip_shrink: true, tpu_coalesce_ms, no_wait_for_vote_to_start_leader: matches.is_present("no_wait_for_vote_to_start_leader"), accounts_shrink_ratio, From c2496efd1ad99b5249b7ce0ca2757aaa974bd917 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Wed, 15 Mar 2023 13:28:53 -0500 Subject: [PATCH 359/465] v1.14: docs: updated readme (backport of #29561) (#30729) docs: updated readme (#29561) (cherry picked from commit 29ed19c5e0dabfbd5a576aceb0b243271606642e) Co-authored-by: Nick Frostbutter <75431177+nickfrosty@users.noreply.github.com> --- docs/README.md | 127 +++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 101 insertions(+), 26 deletions(-) diff --git a/docs/README.md b/docs/README.md index fb9faa502cc9fb..b28d3e44cddf46 100644 --- a/docs/README.md +++ b/docs/README.md @@ -1,40 +1,63 @@ -# Docs Readme +# Solana Docs Readme -Solana's Docs are built using [Docusaurus 2](https://v2.docusaurus.io/) with `npm`. +Solana's Docs are built using [Docusaurus v2](https://v2.docusaurus.io/) with `npm`. Static content delivery is handled using `vercel`. -### Installing Docusaurus +## Local Development -```sh -$ npm install +To set up the Solana Docs site locally: + +- install dependencies using `npm` +- build locally via `./build.sh` +- run the local development server +- make your changes and updates as needed + +> Note: After cloning this repo to your local machine, all the local development commands are run from within this `docs` directory. + +### Install dependencies + +Install the site's dependencies via `npm`: + +```bash +npm install ``` -### Local Development +### Build locally -This command starts a local development server and opens up a browser window. -Most changes are reflected live without having to restart the server. -(You might have to run build.sh first if you run into failures) +The build script generates static content into the `build` directory and can be served using any static content hosting service. -```sh -$ npm run start +```bash +./build.sh ``` -### Build Locally +Running this build script requires **Docker**, and will auto fetch the [solanalabs/rust](https://hub.docker.com/r/solanalabs/rust) image from Docker hub to compile the desired version of the [Solana CLI](https://docs.solana.com/cli) from source. -This command generates static content into the `build` directory and can be -served using any static content hosting service. +This build script will also: -```sh -$ docs/build.sh +- generate the `cli/usage.md` document from the output of each of the Solana CLI commands and sub-commands +- convert each of the `art/*.bob` files into SVG images used throughout the docs +- generate the language [Translations](#translations) + +> Note: Running this build script is **required** before being able to run the site locally via the `npm run start` command since it will generate the `cli/usage.md` document. + +If you run into errors or issues with this step, see [Common Issues](#common-issues) below. See also [CI Build Flow](#ci-build-flow) for more details on production deployments of the docs. + +### Local development server + +This command starts the Docusaurus local development server and opens up a browser window. + +```bash +npm run start ``` -### Translations +> Note: Most changes are reflected live without having to restart the server or refresh the page. However, some changes may require a manual refresh of the page or a restart of the development server (via the command above). -Translations are sourced from [Crowdin](https://docusaurus.io/docs/i18n/crowdin) -and generated when master is built. -For local development use the following two commands in the `docs` directory. +## Translations -To download the newest Documentation translations run: +Translations are sourced from [Crowdin](https://docusaurus.io/docs/i18n/crowdin) and generated when `master` is built. +For local development use the following two commands in this `docs` directory. + +To download the newest documentation translations run: ```sh npm run crowdin:download @@ -46,14 +69,66 @@ To upload changes from `src` & generate [explicit IDs](https://docusaurus.io/doc npm run crowdin:upload ``` -### CI Build Flow +## CI Build Flow -The docs are built and published in Travis CI with the `docs/build.sh` script. -On each PR, the docs are built, but not published. +The docs are built and published in Travis CI with the `./build.sh` script. On each PR, the docs are built, but not published. -In each post-commit build, docs are built and published using `vercel` to their -respective domain depending on the build branch. +In each post-commit build, docs are built and published using `vercel` to their respective domain depending on the build branch. - Master branch docs are published to `edge.docs.solana.com` - Beta branch docs are published to `beta.docs.solana.com` - Latest release tag docs are published to `docs.solana.com` + +## Common Issues + +### Bad sidebars file (or `cli/usage` not found) + +```bash +Error: Bad sidebars file. +These sidebar document ids do not exist: +- cli/usage, +``` + +If you have NOT successfully run the build script, then the `cli/usage.md` file will not exist within your local repo (since it is in `.gitignore`). Not having this doc file, will result in the error message above. + +If the Rust toolchain (specifically `cargo`) is installed on your system, you can specifically build the `cli/usage.md` document via: + +```bash +./build-cli-usage.sh +``` + +Or using Docker and the normal build script, you can perform a full production build of the docs to generate this file: + +```bash +./build.sh +``` + +### Permission denied for the Docker socket + +```bash +Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post +``` + +Running docs build script (`./build.sh`) required the use of Docker.\*\*\*\* + +Ensuring you have Docker installed on your system and it is running. + +You may also try running either of these build scripts (and by association, Docker) with elevation permissions via `sudo`: + +```bash +sudo ./build.sh +# or +sudo ./build-cli-usage.sh +``` + +### Multiple SVG images not found + +```bash +Error: Image static/img/***.svg used in src/***.md not found. +``` + +During the build process of the docs (specifically within the `./convert-ascii-to-svg.sh` script run by `./build.sh`), each of the `art/*.bob` files are converted to SVG images and saved to the `static/img` directory. + +To correct this issue, use the steps above to [build the docs locally](#build-locally). + +> Note: While not generating and saving these SVG images within your local repo will **NOT** prevent you from running the local development server, it will result in numerous output errors in your terminal. From 653432cd9307804fbd4554fa54118ae508b5ff5a Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Thu, 16 Mar 2023 08:08:31 +0900 Subject: [PATCH 360/465] v1.14: Upgrade to token-2022 0.6.0 (backport of #30353) (#30665) * Upgrade to token-2022 0.6.0 (#30353) * upgrade spl-token-2022 to 0.6.0 * Add spl_token_2022-0.6.0.so to program-test * cargo lock * update account decoder tests to use Pubkey::new_from_array instead of Pubkey::new * update rpc tests to use Pubkey::new_from_array instead of Pubkey::new * update token-2022 .so file * cargo lock * increase the threshold for allowable rebuilds in ci * update spl ATA to v1.1.3 * decrement back the threshold for allowable rebuilds * cargo lock * increment ci rebuild threshold (cherry picked from commit 4a94eeee5efa446c1119965be1d4bd7ddec88ffb) * resolve cherry-pick conflicts * cargo lock * Remove old spl token 2022 program file --------- Co-authored-by: samkim-crypto Co-authored-by: Jon Cinque --- Cargo.lock | 312 +++++++------- account-decoder/Cargo.toml | 2 +- account-decoder/src/parse_token.rs | 18 +- account-decoder/src/parse_token_extension.rs | 29 +- client/Cargo.toml | 2 +- fetch-spl.sh | 2 +- ledger/Cargo.toml | 2 +- program-test/src/programs.rs | 2 +- .../src/programs/spl_token_2022-0.5.0.so | Bin 1382016 -> 0 bytes .../src/programs/spl_token_2022-0.6.0.so | Bin 0 -> 395648 bytes programs/bpf/Cargo.lock | 298 +++++++------ rpc/Cargo.toml | 2 +- rpc/src/rpc.rs | 14 +- transaction-status/Cargo.toml | 2 +- transaction-status/src/parse_token.rs | 7 +- .../extension/confidential_transfer.rs | 408 ++++++++++++++++++ 16 files changed, 777 insertions(+), 323 deletions(-) delete mode 100644 program-test/src/programs/spl_token_2022-0.5.0.so create mode 100644 program-test/src/programs/spl_token_2022-0.6.0.so create mode 100644 transaction-status/src/parse_token/extension/confidential_transfer.rs diff --git a/Cargo.lock b/Cargo.lock index 350cb5b6bb86f7..d4fea82d096f3f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -156,9 +156,9 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "726535892e8eae7e70657b4c8ea93d26b8553afb1ce617caee529ef96d7dee6c" dependencies = [ - "proc-macro2 1.0.41", + "proc-macro2 1.0.52", "quote 1.0.18", - "syn 1.0.98", + "syn 1.0.109", "synstructure", ] @@ -168,9 +168,9 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2777730b2039ac0f95f093556e61b6d26cebed5393ca6f152717777cec3a42ed" dependencies = [ - "proc-macro2 1.0.41", + "proc-macro2 1.0.52", "quote 1.0.18", - "syn 1.0.98", + "syn 1.0.109", ] [[package]] @@ -232,9 +232,9 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "648ed8c8d2ce5409ccd57453d9d1b214b342a0d69376a6feda1fd6cae3299308" dependencies = [ - "proc-macro2 1.0.41", + "proc-macro2 1.0.52", "quote 1.0.18", - "syn 1.0.98", + "syn 1.0.109", ] [[package]] @@ -243,9 +243,9 @@ version = "0.1.56" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "96cf8829f67d2eab0b2dfa42c5d0ef737e0724e4a82b01b3e292456202b19716" dependencies = [ - "proc-macro2 1.0.41", + "proc-macro2 1.0.52", "quote 1.0.18", - "syn 1.0.98", + "syn 1.0.109", ] [[package]] @@ -372,7 +372,7 @@ dependencies = [ "lazy_static", "lazycell", "peeking_take_while", - "proc-macro2 1.0.41", + "proc-macro2 1.0.52", "quote 1.0.18", "regex", "rustc-hash", @@ -488,8 +488,8 @@ dependencies = [ "borsh-derive-internal", "borsh-schema-derive-internal", "proc-macro-crate 0.1.5", - "proc-macro2 1.0.41", - "syn 1.0.98", + "proc-macro2 1.0.52", + "syn 1.0.109", ] [[package]] @@ -498,9 +498,9 @@ version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5449c28a7b352f2d1e592a8a28bf139bc71afb0764a14f3c02500935d8c44065" dependencies = [ - "proc-macro2 1.0.41", + "proc-macro2 1.0.52", "quote 1.0.18", - "syn 1.0.98", + "syn 1.0.109", ] [[package]] @@ -509,9 +509,9 @@ version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cdbd5696d8bfa21d53d9fe39a714a18538bad11492a42d066dbbc395fb1951c0" dependencies = [ - "proc-macro2 1.0.41", + "proc-macro2 1.0.52", "quote 1.0.18", - "syn 1.0.98", + "syn 1.0.109", ] [[package]] @@ -592,22 +592,22 @@ checksum = "72feb31ffc86498dacdbd0fcebb56138e7177a8cc5cea4516031d15ae85a742e" [[package]] name = "bytemuck" -version = "1.11.0" +version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5377c8865e74a160d21f29c2d40669f53286db6eab59b88540cbb12ffc8b835" +checksum = "c041d3eab048880cb0b86b256447da3f18859a163c3b8d8893f4e6368abe6393" dependencies = [ "bytemuck_derive", ] [[package]] name = "bytemuck_derive" -version = "1.1.0" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "562e382481975bc61d11275ac5e62a19abd00b0547d99516a415336f183dcd0e" +checksum = "1aca418a974d83d40a0c1f0c5cba6ff4bc28d8df099109ca459a2118d40b6322" dependencies = [ - "proc-macro2 1.0.41", + "proc-macro2 1.0.52", "quote 1.0.18", - "syn 1.0.98", + "syn 1.0.109", ] [[package]] @@ -823,9 +823,9 @@ checksum = "a3aab4734e083b809aaf5794e14e756d1c798d2c69c7f7de7a09a2f5214993c1" dependencies = [ "heck 0.4.0", "proc-macro-error", - "proc-macro2 1.0.41", + "proc-macro2 1.0.52", "quote 1.0.18", - "syn 1.0.98", + "syn 1.0.109", ] [[package]] @@ -897,7 +897,7 @@ version = "0.2.22" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ef196d5d972878a48da7decb7686eded338b4858fbabeed513d63a7c98b2b82d" dependencies = [ - "proc-macro2 1.0.41", + "proc-macro2 1.0.52", "quote 1.0.18", "unicode-xid 0.2.2", ] @@ -1151,10 +1151,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "40eebddd2156ce1bb37b20bbe5151340a31828b1f2d22ba4141f3531710e38df" dependencies = [ "convert_case", - "proc-macro2 1.0.41", + "proc-macro2 1.0.52", "quote 1.0.18", "rustc_version 0.3.3", - "syn 1.0.98", + "syn 1.0.109", ] [[package]] @@ -1239,9 +1239,9 @@ version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3bf95dc3f046b9da4f2d51833c0d3547d8564ef6910f5c1ed130306a75b92886" dependencies = [ - "proc-macro2 1.0.41", + "proc-macro2 1.0.52", "quote 1.0.18", - "syn 1.0.98", + "syn 1.0.109", ] [[package]] @@ -1321,9 +1321,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f86b50932a01e7ec5c06160492ab660fb19b6bb2a7878030dd6cd68d21df9d4d" dependencies = [ "enum-ordinalize", - "proc-macro2 1.0.41", + "proc-macro2 1.0.52", "quote 1.0.18", - "syn 1.0.98", + "syn 1.0.109", ] [[package]] @@ -1362,9 +1362,9 @@ version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8958699f9359f0b04e691a13850d48b7de329138023876d07cbd024c2c820598" dependencies = [ - "proc-macro2 1.0.41", + "proc-macro2 1.0.52", "quote 1.0.18", - "syn 1.0.98", + "syn 1.0.109", ] [[package]] @@ -1375,9 +1375,9 @@ checksum = "0b166c9e378360dd5a6666a9604bb4f54ae0cac39023ffbac425e917a2a04fef" dependencies = [ "num-bigint 0.4.3", "num-traits", - "proc-macro2 1.0.41", + "proc-macro2 1.0.52", "quote 1.0.18", - "syn 1.0.98", + "syn 1.0.109", ] [[package]] @@ -1387,9 +1387,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0eb359f1476bf611266ac1f5355bc14aeca37b299d0ebccc038ee7058891c9cb" dependencies = [ "once_cell", - "proc-macro2 1.0.41", + "proc-macro2 1.0.52", "quote 1.0.18", - "syn 1.0.98", + "syn 1.0.109", ] [[package]] @@ -1631,9 +1631,9 @@ version = "0.3.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "33c1e13800337f4d4d7a316bf45a567dbcb6ffe087f16424852d97e97a91f512" dependencies = [ - "proc-macro2 1.0.41", + "proc-macro2 1.0.52", "quote 1.0.18", - "syn 1.0.98", + "syn 1.0.109", ] [[package]] @@ -2284,9 +2284,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5b939a78fa820cdfcb7ee7484466746a7377760970f6f9c6fe19f9edcc8a38d2" dependencies = [ "proc-macro-crate 0.1.5", - "proc-macro2 1.0.41", + "proc-macro2 1.0.52", "quote 1.0.18", - "syn 1.0.98", + "syn 1.0.109", ] [[package]] @@ -2654,9 +2654,9 @@ version = "0.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5a7d5f7076603ebc68de2dc6a650ec331a062a13abaa346975be747bbfa4b789" dependencies = [ - "proc-macro2 1.0.41", + "proc-macro2 1.0.52", "quote 1.0.18", - "syn 1.0.98", + "syn 1.0.109", ] [[package]] @@ -2778,9 +2778,9 @@ version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "876a53fff98e03a936a674b29568b0e605f06b29372c2489ff4de23f1949743d" dependencies = [ - "proc-macro2 1.0.41", + "proc-macro2 1.0.52", "quote 1.0.18", - "syn 1.0.98", + "syn 1.0.109", ] [[package]] @@ -2837,23 +2837,23 @@ dependencies = [ [[package]] name = "num_enum" -version = "0.5.7" +version = "0.5.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf5395665662ef45796a4ff5486c5d41d29e0c09640af4c5f17fd94ee2c119c9" +checksum = "8d829733185c1ca374f17e52b762f24f535ec625d2cc1f070e34c8a9068f341b" dependencies = [ "num_enum_derive", ] [[package]] name = "num_enum_derive" -version = "0.5.7" +version = "0.5.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b0498641e53dd6ac1a4f22547548caa6864cc4933784319cd1775271c5a46ce" +checksum = "2be1598bf1c313dcdd12092e3f1920f463462525a21b7b4e11b4168353d0123e" dependencies = [ "proc-macro-crate 1.1.0", - "proc-macro2 1.0.41", + "proc-macro2 1.0.52", "quote 1.0.18", - "syn 1.0.98", + "syn 1.0.109", ] [[package]] @@ -2919,9 +2919,9 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b501e44f11665960c7e7fcf062c7d96a14ade4aa98116c004b2e37b5be7d736c" dependencies = [ - "proc-macro2 1.0.41", + "proc-macro2 1.0.52", "quote 1.0.18", - "syn 1.0.98", + "syn 1.0.109", ] [[package]] @@ -3000,9 +3000,9 @@ checksum = "084fd65d5dd8b3772edccb5ffd1e4b7eba43897ecd0f9401e330e8c542959408" dependencies = [ "Inflector", "proc-macro-error", - "proc-macro2 1.0.41", + "proc-macro2 1.0.52", "quote 1.0.18", - "syn 1.0.98", + "syn 1.0.109", ] [[package]] @@ -3148,9 +3148,9 @@ checksum = "99b8db626e31e5b81787b9783425769681b347011cc59471e33ea46d2ea0cf55" dependencies = [ "pest", "pest_meta", - "proc-macro2 1.0.41", + "proc-macro2 1.0.52", "quote 1.0.18", - "syn 1.0.98", + "syn 1.0.109", ] [[package]] @@ -3199,9 +3199,9 @@ version = "1.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6e8fe8163d14ce7f0cdac2e040116f22eac817edabff0be91e8aff7e9accf389" dependencies = [ - "proc-macro2 1.0.41", + "proc-macro2 1.0.52", "quote 1.0.18", - "syn 1.0.98", + "syn 1.0.109", ] [[package]] @@ -3296,8 +3296,8 @@ version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3b83ec2d0af5c5c556257ff52c9f98934e243b9fd39604bfb2a9b75ec2e97f18" dependencies = [ - "proc-macro2 1.0.41", - "syn 1.0.98", + "proc-macro2 1.0.52", + "syn 1.0.109", ] [[package]] @@ -3326,9 +3326,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" dependencies = [ "proc-macro-error-attr", - "proc-macro2 1.0.41", + "proc-macro2 1.0.52", "quote 1.0.18", - "syn 1.0.98", + "syn 1.0.109", "version_check", ] @@ -3338,7 +3338,7 @@ version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" dependencies = [ - "proc-macro2 1.0.41", + "proc-macro2 1.0.52", "quote 1.0.18", "version_check", ] @@ -3354,9 +3354,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.41" +version = "1.0.52" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cdcc2916cde080c1876ff40292a396541241fe0072ef928cd76582e9ea5d60d2" +checksum = "1d0e1ae9e836cc3beddd63db0df682593d7e2d3d891ae8c9083d2113e1744224" dependencies = [ "unicode-ident", ] @@ -3449,9 +3449,9 @@ checksum = "f9cc1a3263e07e0bf68e96268f37665207b49560d98739662cdfaae215c720fe" dependencies = [ "anyhow", "itertools", - "proc-macro2 1.0.41", + "proc-macro2 1.0.52", "quote 1.0.18", - "syn 1.0.98", + "syn 1.0.109", ] [[package]] @@ -3462,9 +3462,9 @@ checksum = "7345d5f0e08c0536d7ac7229952590239e77abf0a0100a1b1d890add6ea96364" dependencies = [ "anyhow", "itertools", - "proc-macro2 1.0.41", + "proc-macro2 1.0.52", "quote 1.0.18", - "syn 1.0.98", + "syn 1.0.109", ] [[package]] @@ -3586,7 +3586,7 @@ version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a1feb54ed693b93a84e14094943b84b7c4eae204c512b7ccb95ab0c66d278ad1" dependencies = [ - "proc-macro2 1.0.41", + "proc-macro2 1.0.52", ] [[package]] @@ -4090,9 +4090,9 @@ version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bdbda6ac5cd1321e724fa9cee216f3a61885889b896f073b8f82322789c5250e" dependencies = [ - "proc-macro2 1.0.41", + "proc-macro2 1.0.52", "quote 1.0.18", - "syn 1.0.98", + "syn 1.0.109", ] [[package]] @@ -4189,9 +4189,9 @@ version = "1.0.138" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "023e9b1467aef8a10fb88f25611870ada9800ef7e22afce356bb0d2387b6f27c" dependencies = [ - "proc-macro2 1.0.41", + "proc-macro2 1.0.52", "quote 1.0.18", - "syn 1.0.98", + "syn 1.0.109", ] [[package]] @@ -4249,10 +4249,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f1b95bb2f4f624565e8fe8140c789af7e2082c0e0561b5a82a1b678baa9703dc" dependencies = [ "proc-macro-error", - "proc-macro2 1.0.41", + "proc-macro2 1.0.52", "quote 1.0.18", "rustversion", - "syn 1.0.98", + "syn 1.0.109", ] [[package]] @@ -4464,7 +4464,7 @@ dependencies = [ "solana-sdk 1.14.17", "solana-vote-program", "spl-token", - "spl-token-2022", + "spl-token-2022 0.6.0", "thiserror", "zstd", ] @@ -4923,7 +4923,7 @@ dependencies = [ "solana-transaction-status", "solana-version", "solana-vote-program", - "spl-token-2022", + "spl-token-2022 0.6.0", "thiserror", "tokio", "tokio-stream", @@ -5145,9 +5145,9 @@ dependencies = [ [[package]] name = "solana-frozen-abi" -version = "1.14.8" +version = "1.14.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "341bba362c91aedad2ad9fc0c28c2e39aaa606e6b9c049e8fbcc9f60675163ff" +checksum = "23b4953578272ac0fadec245e85e83ae86454611f0c0a7fff7d906835124bdcf" dependencies = [ "ahash", "blake3", @@ -5172,7 +5172,7 @@ dependencies = [ "serde_derive", "serde_json", "sha2 0.10.2", - "solana-frozen-abi-macro 1.14.8", + "solana-frozen-abi-macro 1.14.16", "subtle", "thiserror", ] @@ -5212,24 +5212,24 @@ dependencies = [ [[package]] name = "solana-frozen-abi-macro" -version = "1.14.8" +version = "1.14.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6fae474ab37e2ccc4dfd33edd36a05d7df02b8531fa9870cb244f9491b64fe3" +checksum = "57892538250428ad3dc3cbe05f6cd75ad14f4f16734fcb91bc7cd5fbb63d6315" dependencies = [ - "proc-macro2 1.0.41", + "proc-macro2 1.0.52", "quote 1.0.18", "rustc_version 0.4.0", - "syn 1.0.98", + "syn 1.0.109", ] [[package]] name = "solana-frozen-abi-macro" version = "1.14.17" dependencies = [ - "proc-macro2 1.0.41", + "proc-macro2 1.0.52", "quote 1.0.18", "rustc_version 0.4.0", - "syn 1.0.98", + "syn 1.0.109", ] [[package]] @@ -5440,7 +5440,7 @@ dependencies = [ "solana-transaction-status", "solana-vote-program", "spl-token", - "spl-token-2022", + "spl-token-2022 0.6.0", "static_assertions", "tempfile", "test-case", @@ -5530,9 +5530,9 @@ dependencies = [ [[package]] name = "solana-logger" -version = "1.14.8" +version = "1.14.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ec82f7dedfee58ff2ac102b20a033a195950e7355fb29f1713f46cee629ffda" +checksum = "06aa701c49493e93085dd1e800c05475baca15a9d4d527b59794f2ed0b66e055" dependencies = [ "env_logger", "lazy_static", @@ -5701,9 +5701,9 @@ dependencies = [ [[package]] name = "solana-program" -version = "1.14.8" +version = "1.14.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f480a0a440ea15d8436de1c9ac01501cb15979dae4a0a5fc8e33198949b38681" +checksum = "3f99052873619df68913cb8e92e28ff251a5483828925e87fa97ba15a9cbad51" dependencies = [ "base64 0.13.0", "bincode", @@ -5739,9 +5739,9 @@ dependencies = [ "serde_json", "sha2 0.10.2", "sha3 0.10.1", - "solana-frozen-abi 1.14.8", - "solana-frozen-abi-macro 1.14.8", - "solana-sdk-macro 1.14.8", + "solana-frozen-abi 1.14.16", + "solana-frozen-abi-macro 1.14.16", + "solana-sdk-macro 1.14.16", "thiserror", "tiny-bip39", "wasm-bindgen", @@ -5922,7 +5922,7 @@ dependencies = [ "solana-version", "solana-vote-program", "spl-token", - "spl-token-2022", + "spl-token-2022 0.6.0", "stream-cancel", "symlink", "thiserror", @@ -6019,9 +6019,9 @@ dependencies = [ [[package]] name = "solana-sdk" -version = "1.14.8" +version = "1.14.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "65641c3c87a81fbbf7663360a2d8d5e145280021c444220257f9975ff6cddc80" +checksum = "edb47da3e18cb669f6ace0b40cee0610e278903783e0c9f7fce1e1beb881a1b7" dependencies = [ "assert_matches", "base64 0.13.0", @@ -6058,11 +6058,11 @@ dependencies = [ "serde_json", "sha2 0.10.2", "sha3 0.10.1", - "solana-frozen-abi 1.14.8", - "solana-frozen-abi-macro 1.14.8", - "solana-logger 1.14.8", - "solana-program 1.14.8", - "solana-sdk-macro 1.14.8", + "solana-frozen-abi 1.14.16", + "solana-frozen-abi-macro 1.14.16", + "solana-logger 1.14.16", + "solana-program 1.14.16", + "solana-sdk-macro 1.14.16", "thiserror", "uriparse", "wasm-bindgen", @@ -6124,15 +6124,15 @@ dependencies = [ [[package]] name = "solana-sdk-macro" -version = "1.14.8" +version = "1.14.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "768f16d1a7315fc66ba835eebf9e95a83365ac94222551bc5cdcc6a74cb4a137" +checksum = "7d41a09b9cecd0a4df63c78a192adee99ebf2d3757c19713a68246e1d9789c7c" dependencies = [ "bs58", - "proc-macro2 1.0.41", + "proc-macro2 1.0.52", "quote 1.0.18", "rustversion", - "syn 1.0.98", + "syn 1.0.109", ] [[package]] @@ -6140,10 +6140,10 @@ name = "solana-sdk-macro" version = "1.14.17" dependencies = [ "bs58", - "proc-macro2 1.0.41", + "proc-macro2 1.0.52", "quote 1.0.18", "rustversion", - "syn 1.0.98", + "syn 1.0.109", ] [[package]] @@ -6405,7 +6405,7 @@ dependencies = [ "spl-associated-token-account", "spl-memo", "spl-token", - "spl-token-2022", + "spl-token-2022 0.6.0", "thiserror", ] @@ -6538,9 +6538,9 @@ dependencies = [ [[package]] name = "solana-zk-token-sdk" -version = "1.14.8" +version = "1.14.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac5982ab9d8771b3d9bbef11ece78348c496a9f70a90a96225aee0a70bd13b9d" +checksum = "7ab38abd096769f79fd8e3fe8465070f04742395db724606a5263c8ebc215567" dependencies = [ "aes-gcm-siv", "arrayref", @@ -6560,8 +6560,8 @@ dependencies = [ "serde", "serde_json", "sha3 0.9.1", - "solana-program 1.14.8", - "solana-sdk 1.14.8", + "solana-program 1.14.16", + "solana-sdk 1.14.16", "subtle", "thiserror", "zeroize", @@ -6646,9 +6646,9 @@ dependencies = [ "borsh", "num-derive", "num-traits", - "solana-program 1.14.8", + "solana-program 1.14.16", "spl-token", - "spl-token-2022", + "spl-token-2022 0.5.0", "thiserror", ] @@ -6658,7 +6658,7 @@ version = "3.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bd0dc6f70db6bacea7ff25870b016a65ba1d1b6013536f08e4fd79a8f9005325" dependencies = [ - "solana-program 1.14.8", + "solana-program 1.14.16", ] [[package]] @@ -6672,7 +6672,7 @@ dependencies = [ "num-derive", "num-traits", "num_enum", - "solana-program 1.14.8", + "solana-program 1.14.16", "thiserror", ] @@ -6687,8 +6687,26 @@ dependencies = [ "num-derive", "num-traits", "num_enum", - "solana-program 1.14.8", - "solana-zk-token-sdk 1.14.8", + "solana-program 1.14.16", + "solana-zk-token-sdk 1.14.16", + "spl-memo", + "spl-token", + "thiserror", +] + +[[package]] +name = "spl-token-2022" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67fcd758e8d22c5fce17315015f5ff319604d1a6e57a73c72795639dba898890" +dependencies = [ + "arrayref", + "bytemuck", + "num-derive", + "num-traits", + "num_enum", + "solana-program 1.14.16", + "solana-zk-token-sdk 1.14.16", "spl-memo", "spl-token", "thiserror", @@ -6745,10 +6763,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6878079b17446e4d3eba6192bb0a2950d5b14f0ed8424b852310e5a94345d0ef" dependencies = [ "heck 0.4.0", - "proc-macro2 1.0.41", + "proc-macro2 1.0.52", "quote 1.0.18", "rustversion", - "syn 1.0.98", + "syn 1.0.109", ] [[package]] @@ -6776,11 +6794,11 @@ dependencies = [ [[package]] name = "syn" -version = "1.0.98" +version = "1.0.109" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c50aef8a904de4c23c788f104b7dddc7d6f79c647c7c8ce4cc8f73eb0ca773dd" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" dependencies = [ - "proc-macro2 1.0.41", + "proc-macro2 1.0.52", "quote 1.0.18", "unicode-ident", ] @@ -6797,9 +6815,9 @@ version = "0.12.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f36bdaa60a83aca3921b5259d5400cbf5e90fc51931376a9bd4a0eb79aa7210f" dependencies = [ - "proc-macro2 1.0.41", + "proc-macro2 1.0.52", "quote 1.0.18", - "syn 1.0.98", + "syn 1.0.109", "unicode-xid 0.2.2", ] @@ -6881,9 +6899,9 @@ version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0ee42b4e559f17bce0385ebf511a7beb67d5cc33c12c96b7f4e9789919d9c10f" dependencies = [ - "proc-macro2 1.0.41", + "proc-macro2 1.0.52", "quote 1.0.18", - "syn 1.0.98", + "syn 1.0.109", ] [[package]] @@ -6942,9 +6960,9 @@ checksum = "8dd461f47ade621665c9f4e44b20449341769911c253275dc5cb03726cbb852c" dependencies = [ "cfg-if 1.0.0", "proc-macro-error", - "proc-macro2 1.0.41", + "proc-macro2 1.0.52", "quote 1.0.18", - "syn 1.0.98", + "syn 1.0.109", ] [[package]] @@ -6977,9 +6995,9 @@ version = "1.0.31" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0396bc89e626244658bef819e22d0cc459e795a5ebe878e6ec336d1674a8d79a" dependencies = [ - "proc-macro2 1.0.41", + "proc-macro2 1.0.52", "quote 1.0.18", - "syn 1.0.98", + "syn 1.0.109", ] [[package]] @@ -7116,9 +7134,9 @@ version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b557f72f448c511a979e2564e55d74e6c4432fc96ff4f6241bc6bded342643b7" dependencies = [ - "proc-macro2 1.0.41", + "proc-macro2 1.0.52", "quote 1.0.18", - "syn 1.0.98", + "syn 1.0.109", ] [[package]] @@ -7307,10 +7325,10 @@ version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9403f1bafde247186684b230dc6f38b5cd514584e8bec1dd32514be4745fa757" dependencies = [ - "proc-macro2 1.0.41", + "proc-macro2 1.0.52", "prost-build 0.9.0", "quote 1.0.18", - "syn 1.0.98", + "syn 1.0.109", ] [[package]] @@ -7320,10 +7338,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2fbcd2800e34e743b9ae795867d5f77b535d3a3be69fd731e39145719752df8c" dependencies = [ "prettyplease", - "proc-macro2 1.0.41", + "proc-macro2 1.0.52", "prost-build 0.11.0", "quote 1.0.18", - "syn 1.0.98", + "syn 1.0.109", ] [[package]] @@ -7396,9 +7414,9 @@ version = "0.1.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f4f480b8f81512e825f337ad51e94c1eb5d3bbdf2b363dcd01e2b19a9ffe3f8e" dependencies = [ - "proc-macro2 1.0.41", + "proc-macro2 1.0.52", "quote 1.0.18", - "syn 1.0.98", + "syn 1.0.109", ] [[package]] @@ -7717,9 +7735,9 @@ dependencies = [ "bumpalo", "log", "once_cell", - "proc-macro2 1.0.41", + "proc-macro2 1.0.52", "quote 1.0.18", - "syn 1.0.98", + "syn 1.0.109", "wasm-bindgen-shared", ] @@ -7751,9 +7769,9 @@ version = "0.2.82" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5be8e654bdd9b79216c2929ab90721aa82faf65c48cdf08bdc4e7f51357b80da" dependencies = [ - "proc-macro2 1.0.41", + "proc-macro2 1.0.52", "quote 1.0.18", - "syn 1.0.98", + "syn 1.0.109", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -8012,9 +8030,9 @@ version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bdff2024a851a322b08f179173ae2ba620445aef1e838f0c196820eade4ae0c7" dependencies = [ - "proc-macro2 1.0.41", + "proc-macro2 1.0.52", "quote 1.0.18", - "syn 1.0.98", + "syn 1.0.109", "synstructure", ] diff --git a/account-decoder/Cargo.toml b/account-decoder/Cargo.toml index a41200fede4022..bf3e3f1417bda4 100644 --- a/account-decoder/Cargo.toml +++ b/account-decoder/Cargo.toml @@ -24,7 +24,7 @@ solana-config-program = { path = "../programs/config", version = "=1.14.17" } solana-sdk = { path = "../sdk", version = "=1.14.17" } solana-vote-program = { path = "../programs/vote", version = "=1.14.17" } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } -spl-token-2022 = { version = "=0.5.0", features = ["no-entrypoint"] } +spl-token-2022 = { version = "=0.6.0", features = ["no-entrypoint"] } thiserror = "1.0" zstd = "0.11.2" diff --git a/account-decoder/src/parse_token.rs b/account-decoder/src/parse_token.rs index 862fbba12edaa4..8ec2dafec8241b 100644 --- a/account-decoder/src/parse_token.rs +++ b/account-decoder/src/parse_token.rs @@ -303,8 +303,8 @@ mod test { #[test] fn test_parse_token() { - let mint_pubkey = SplTokenPubkey::new(&[2; 32]); - let owner_pubkey = SplTokenPubkey::new(&[3; 32]); + let mint_pubkey = SplTokenPubkey::new_from_array([2; 32]); + let owner_pubkey = SplTokenPubkey::new_from_array([3; 32]); let mut account_data = vec![0; Account::get_packed_len()]; let mut account = Account::unpack_unchecked(&account_data).unwrap(); account.mint = mint_pubkey; @@ -358,9 +358,9 @@ mod test { }), ); - let signer1 = SplTokenPubkey::new(&[1; 32]); - let signer2 = SplTokenPubkey::new(&[2; 32]); - let signer3 = SplTokenPubkey::new(&[3; 32]); + let signer1 = SplTokenPubkey::new_from_array([1; 32]); + let signer2 = SplTokenPubkey::new_from_array([2; 32]); + let signer3 = SplTokenPubkey::new_from_array([3; 32]); let mut multisig_data = vec![0; Multisig::get_packed_len()]; let mut signers = [SplTokenPubkey::default(); 11]; signers[0] = signer1; @@ -393,7 +393,7 @@ mod test { #[test] fn test_get_token_account_mint() { - let mint_pubkey = SplTokenPubkey::new(&[2; 32]); + let mint_pubkey = SplTokenPubkey::new_from_array([2; 32]); let mut account_data = vec![0; Account::get_packed_len()]; let mut account = Account::unpack_unchecked(&account_data).unwrap(); account.mint = mint_pubkey; @@ -495,8 +495,8 @@ mod test { #[test] fn test_parse_token_account_with_extensions() { - let mint_pubkey = SplTokenPubkey::new(&[2; 32]); - let owner_pubkey = SplTokenPubkey::new(&[3; 32]); + let mint_pubkey = SplTokenPubkey::new_from_array([2; 32]); + let owner_pubkey = SplTokenPubkey::new_from_array([3; 32]); let account_base = Account { mint: mint_pubkey, @@ -586,7 +586,7 @@ mod test { #[test] fn test_parse_token_mint_with_extensions() { - let owner_pubkey = SplTokenPubkey::new(&[3; 32]); + let owner_pubkey = SplTokenPubkey::new_from_array([3; 32]); let mint_size = ExtensionType::get_account_len::(&[ExtensionType::MintCloseAuthority]); let mint_base = Mint { diff --git a/account-decoder/src/parse_token_extension.rs b/account-decoder/src/parse_token_extension.rs index de04539ac9b700..0df45a6b6dab3c 100644 --- a/account-decoder/src/parse_token_extension.rs +++ b/account-decoder/src/parse_token_extension.rs @@ -4,6 +4,7 @@ use { spl_token_2022::{ extension::{self, BaseState, BaseStateWithExtensions, ExtensionType, StateWithExtensions}, solana_program::pubkey::Pubkey, + solana_zk_token_sdk::zk_token_elgamal::pod::ElGamalPubkey, }, }; @@ -24,6 +25,7 @@ pub enum UiExtension { CpiGuard(UiCpiGuard), PermanentDelegate(UiPermanentDelegate), UnparseableExtension, + NonTransferableAccount, } pub fn parse_extension( @@ -74,6 +76,7 @@ pub fn parse_extension( .get_extension::() .map(|&extension| UiExtension::PermanentDelegate(extension.into())) .unwrap_or(UiExtension::UnparseableExtension), + ExtensionType::NonTransferableAccount => UiExtension::NonTransferableAccount, } } @@ -246,10 +249,10 @@ impl From for UiPermanentDeleg #[derive(Debug, Serialize, Deserialize, PartialEq, Eq)] #[serde(rename_all = "camelCase")] pub struct UiConfidentialTransferMint { - pub authority: String, + pub authority: Option, pub auto_approve_new_accounts: bool, - pub auditor_encryption_pubkey: String, - pub withdraw_withheld_authority_encryption_pubkey: String, + pub auditor_encryption_pubkey: Option, + pub withdraw_withheld_authority_encryption_pubkey: Option, pub withheld_amount: String, } @@ -259,17 +262,19 @@ impl From fn from( confidential_transfer_mint: extension::confidential_transfer::ConfidentialTransferMint, ) -> Self { + let authority: Option = confidential_transfer_mint.authority.into(); + let auditor_encryption_pubkey: Option = + confidential_transfer_mint.auditor_encryption_pubkey.into(); + let withdraw_withheld_authority_encryption_pubkey: Option = + confidential_transfer_mint + .withdraw_withheld_authority_encryption_pubkey + .into(); Self { - authority: confidential_transfer_mint.authority.to_string(), + authority: authority.map(|pubkey| pubkey.to_string()), auto_approve_new_accounts: confidential_transfer_mint.auto_approve_new_accounts.into(), - auditor_encryption_pubkey: format!( - "{}", - confidential_transfer_mint.auditor_encryption_pubkey - ), - withdraw_withheld_authority_encryption_pubkey: format!( - "{}", - confidential_transfer_mint.withdraw_withheld_authority_encryption_pubkey - ), + auditor_encryption_pubkey: auditor_encryption_pubkey.map(|pubkey| pubkey.to_string()), + withdraw_withheld_authority_encryption_pubkey: + withdraw_withheld_authority_encryption_pubkey.map(|pubkey| pubkey.to_string()), withheld_amount: format!("{}", confidential_transfer_mint.withheld_amount), } } diff --git a/client/Cargo.toml b/client/Cargo.toml index 9fe34d666aba51..3c3f922deb2421 100644 --- a/client/Cargo.toml +++ b/client/Cargo.toml @@ -49,7 +49,7 @@ solana-streamer = { path = "../streamer", version = "=1.14.17" } solana-transaction-status = { path = "../transaction-status", version = "=1.14.17" } solana-version = { path = "../version", version = "=1.14.17" } solana-vote-program = { path = "../programs/vote", version = "=1.14.17" } -spl-token-2022 = { version = "=0.5.0", features = ["no-entrypoint"] } +spl-token-2022 = { version = "=0.6.0", features = ["no-entrypoint"] } thiserror = "1.0" tokio = { version = "1", features = ["full"] } tokio-stream = "0.1.9" diff --git a/fetch-spl.sh b/fetch-spl.sh index 9787bab50764b7..f3487f4d282e85 100755 --- a/fetch-spl.sh +++ b/fetch-spl.sh @@ -39,7 +39,7 @@ fetch_program() { } fetch_program token 3.5.0 TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA BPFLoader2111111111111111111111111111111111 -fetch_program token-2022 0.5.0 TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb BPFLoader2111111111111111111111111111111111 +fetch_program token-2022 0.6.0 TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb BPFLoaderUpgradeab1e11111111111111111111111 fetch_program memo 1.0.0 Memo1UhkJRfHyvLMcVucJwxXeuD728EqVDDwQDxFMNo BPFLoader1111111111111111111111111111111111 fetch_program memo 3.0.0 MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr BPFLoader2111111111111111111111111111111111 fetch_program associated-token-account 1.1.2 ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL BPFLoader2111111111111111111111111111111111 diff --git a/ledger/Cargo.toml b/ledger/Cargo.toml index 88add2a08c8ee8..ff98735623b430 100644 --- a/ledger/Cargo.toml +++ b/ledger/Cargo.toml @@ -53,7 +53,7 @@ solana-storage-proto = { path = "../storage-proto", version = "=1.14.17" } solana-transaction-status = { path = "../transaction-status", version = "=1.14.17" } solana-vote-program = { path = "../programs/vote", version = "=1.14.17" } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } -spl-token-2022 = { version = "=0.5.0", features = ["no-entrypoint"] } +spl-token-2022 = { version = "=0.6.0", features = ["no-entrypoint"] } static_assertions = "1.1.0" tempfile = "3.3.0" thiserror = "1.0" diff --git a/program-test/src/programs.rs b/program-test/src/programs.rs index 78d67453da2ba5..2224252da77d19 100644 --- a/program-test/src/programs.rs +++ b/program-test/src/programs.rs @@ -30,7 +30,7 @@ static SPL_PROGRAMS: &[(Pubkey, Pubkey, &[u8])] = &[ ( spl_token_2022::ID, solana_sdk::bpf_loader_upgradeable::ID, - include_bytes!("programs/spl_token_2022-0.5.0.so"), + include_bytes!("programs/spl_token_2022-0.6.0.so"), ), ( spl_memo_1_0::ID, diff --git a/program-test/src/programs/spl_token_2022-0.5.0.so b/program-test/src/programs/spl_token_2022-0.5.0.so deleted file mode 100644 index 4253bfb1b44912962e66c130db004e3698b2541c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1382016 zcmeEv37l0|egAzkTxPODfIHyJGH=3~iO)_j1RTxZAqXL83Rxy#G=|3u85W}q69bo9 z4NDfJE)Zj+(f;MV88&MzU2I}&`>3^sf9qdq)r!`?Vzm`p7wT5jDF5I0x7>T?zBlk# zlE!?vADHvbIluEezw_J9de41u_Uq;}WHO#TjoyEIi0$}b11EK9#`Hq%!l>BsfaD%{E=$1o?uD1w1>G0Uwq@0CT z4y{3bTkn%{>2RME^DJ!E`1>^sN6C-w25G3J7e)zWcf+raUrZq3sBsJ!H2m^7euS4u zgM-Y^IsR0m$2@zOlKU2Vp6~rk;1o~LAp8g~VKiQl5jnW!-c04J{z{9$g-e8vpaHF< zdJB>sWCY)2LUSc01r62smJq&hNsbG|^%t}qHR^w3t@;a6zwxPwsyR+i)FyOvH#G5& zP}`a08~=zg^gKo7atJAk9PsJ4L0>`mcsB4)N#VbN@z0=Csz>FV(8tN%nb3b7wkuhh_cS03ZYDZ?KE z2?ec{`x%{g_XG*y2k>B=3CZ4dzuF(g@!0s@`djlK=;u&0$dKUa3Gd;6`vLef>j!!W z9pKJpe{d1%tD`^Icbal@%T;6;>{TX9`%I4A&EPV%OZyk|U$6r_zIQo?;Y<#QPoSFU zzCrqE*zyY?Kgw`SabxU++Rr@I4u5R5mG`$`Np%V>qeUSNNdmJO-?V z_tOk7a`t%^Sly1wqf(F0qXn^Vq*T^RdNf?xVSd{B*XRKvh#u=_(|oJ!k@8Jc{4gnG zWrM`gj_(p(MlZ$#9h7DKfd1tu4!AFE^}HVXjW~QO!fsF6AFiE3G2-(YnXef>!-Mh% zsU8fAU=-anYsV009P0at$dsaN50_C0c-Rlx36m(cB<-do&)RM6?bi8g(46u9hVp$+ z`tK$pkKrACp=`?kZ?;Vv7gU6N&-5&4%md5|H%NP6&kLG$P)6x4U;d;fU#^t$@1%y% z6K<0*&@~R<+sx@`AKDqcMB(0-}92?!mkJT1kaJ&C$;_ z8dd^HkA@3=@{3xZ)I;N7jZ1y=Z&&y^5}H0huJq3{`I|nQoLWZ?!OQeHfwmmtVtR-o(tm9fuqs4^+8Q z^TU4A3$5px*<2vM=_U>hzs+O18^0#?l%yWgOXkOjHU?+=DFMIMYy305Hc>l~Z+dF; zs+bSN1jwm-7!gWOY9L97x{6mSLF~j(M?-}MF+KVU3njM(_t3G8# z?_IkJseZ@-5BxzFh0ynlwh}!hqj$&cyXC>7O$zr%%}n!t6X@ZRUbsXn;=Bn|&s7v90UD1~>43s(bg8otYgzftI| z?iU)kKZ5=ctG(_%IOJ6B$v(^x!eU3%y-`hc6NO3;f@DDADt< zv{mtsl={k2Z`9r_@qVqp)06ms)E~_|rvATn{}X9H5cfk`5A4()@VhciVt3D$u!rc) z(a$v+hI@sdaX&Yl8bD825`IKFZkn%nB3cXMd>xOZ`yb!iBkg@s{B`AVfp67*5dIwx z{1g52tp2z^y5R@H2dzJ!c^$)>|Ig$=%xC=Pg_r`q{`>J1VK#a1aSbB4o2g(D!nm2r8A)Zr$ivW z_jztN_&`HWuXn>DE*NBFd=!?X9V3J+FWe}IqpYN(-8m`&{aXfquXw8c0-%WRn-(LW zdSo2gouPvCB>kA`Y1ZsR^-}w{N}0hu>@UFHV!N0j=`KBY5Ir^?8JaGcXT{@w^~)}v zn@`v-5tQ+%RzLWc?-9O0Rf>~@PT$)#NZ%^d9z3w??J2w7@layd6_bOGOKQQt!-Y4$ zaYKTCUkd-@F8s`);rd)SQ8TY{oxoSFk}x2{1c}|~*y#b^d3@Z)(RiL0G(F395@ox7 zg`DWl4h}2J1P=4P#q`si?>%rk!JR*Y;X>VCJJI~6rDp#m`WBW1PqZZ`_?BpTn}k7T z1QX)+SK~#xGHw7)n?+UD<_`3)`T++cAR4>E1_Vg{vPy2_!qt1~Y@Yfz_kntyq`J?M1ZQ4I&7fAm( zUicJs&XxECQXqPwd0i5}lA~VKK11R=Rqq1DGfm6S)^ZaCJ}fK0RWIUxN9E#sJDIPQ zg1{qxE9%WQA4SUKCRvxjd>;O4y2hh*BRN0T!>q?~m(P%=tAA^W@0FcWPesQ8;ehBb zBK zOj;0;+}`m>*hqRb zpY=VxE*vzT;(WGO5T3~YjU@Vdh=v^fU!!5St+%ZuhR_pkkTA$x%yHL0pX&HvbIM;H z46DZn$+}5uK08k7*_2~C!j00tw7o%&a|tA||Esy*4@<|yPh~r#Kiqp%{7Ua!#&;q< z{U_-~HJ|caE_yO2_)3a*br+}C>NhanK)rzk{h#)~oysrc&vokej4wKWPw19~^QXxFkgM=|dp9$^K}H64VOjlu z?_y4O$BVyTQ{OINxU{|#9+ji$AM}6acvm03b(~xf>4($@KZST-8>90;AN*7C35nDA zPw;7eGXB$i^#^gf+NDpUJwQ}+y(GOa7!1FY5d_0u&-Dkx7xDUBbm!4$kr8D*9xqki z$zbfa7t_y*_D5*f7jGrF^N%rnJ?nM%*W{zFbCd*6^yFc|w~;EKCyeJq;1b3~KjRSk z$9}qMesV<0*O;FiAbSVhf8I*%C^H(K#~-Bh(AL}gg^nO|J@dupf62J|5aX}x)$$~- zBN!K3Kiz(i^WFK&KfH_TD=9qD-3)lAzdKA>pzAXPNBbXKJ|4eQ|J*_OO%(F@UE|RT z8^0^xYK-5}Ublakf_iQIzFO!B2ZZ0K|NFBrem}tamWnXNtef?k4c58hDUzGSft#9XNC4Q&Yw?o@e_qhH|OfS|oAPH9=A-}LJc5mxd(1&ZO zh}i}7LF9N5;|T{u&%>GOceC1#8?@c++KyQ%zR7TOXueI9^1gRS{MRzB&a3Q_5O%=! zR*-mDPV8*~C4ug{U~jt>o}B$Y%wu~cURfd`?9<>ErtFjLM(qRme)UV@&yae3AtQY5 z^jZ|nZ4c9@?Wr}+9YA|FX!}WMZS>P!7wn=q+Vv@dOOK-hmNM*B$CnNtPgd{yQ}seb zwd(!Tn)S+h7uH|in>yEklXRdL{vLKrqNDNqU^{m88S)1Fm|sAzwLj2)B`_8W59SdigrsLV3Tx?27o`LLlQr8x1?fRMK9XujR?AsC$W;-aWn69b)RN~4@D)VS z1NvDG;_jG^J1MQ&Zv%TW-|@Y#a61d-=iBdmR`}b`?Xvz8-Py(dyh1qe#Qt!D#39#D+ycM9K>U6k^S0O5 z(1UJWe+Wy8XEh#ad%I=3Hsy_i5; zJ;MAa%62e*cf9iP-yIBxb&{}L4Y!ZrqIJ5?NaLUm!jJj=4pQ*x8jqf|afU5D8V>BXE2CA?!8hdz64_-(PjzBXCU zLA!arqx>Mgi@p!xukCz*JFY#|b&rE7fAYt)*aE$PU$*xTXdhbq)^$w27oTU4Wwp3} zJ<&SFKa+j*Q1Kl7Pu6o<8DX^L2;+~Q)O8PC4++w=o*t z_dw5?9}Vq={t6=(QWWV+GcVzD2}?7rf-m!0h6^$aS>NG@C;zv|2pPbC4TZ)J>OaLk z=zQSKlM2_w~GEtmn$d_`D_|gT{pYg0DDQ zXey2uye9Xhv~L9aS(>>_-$Pi$n9+{5pABwD2f_K?TNuI8%$0mDE6Ci$nh5xRNWtd` zGH$oF%WXg8;d{#&U+??TdXlg2c{3<{M#D;q55PBq{H*VNhxxRW&U2uhL1wmh0fnGr z)=vl1{c1}0`NSvSUP~uF1@7q-9F8UoMQ@r8+usNLOGwXs?@J=r%q*%)@UKhp<0__O z4*dlkH+UHNgWgZ4#x<{^bl;l^FwWnU(x=~|bfXjJOv@Da+3IWP(Gp;R9;hBYE^(Cq zV;ax--d{7_pkq<09(eBRdZ^>02mKNiN%Zvu_4Lqq-`xj++-ZKq^(Om(vJV0}j-~kK zwl}tqRDGax8uhEbHxReymJ}Z0zt}VC*_e_)T$8oe>M?z-C4T~E_^+@&zCW(_`zgHF z5}es9>g`X_HHGsVfsW@;Hv$ztarHe?LSF-JC~dNBSyS^K_9^`-Y$YVq?J!KL{b=y`nTkv(JShn-h8zn&fk z_};Uk2X{!RXr8PqRbCrzlc@50CF*Rx9>%>9N87zn#*} zeuCjIXSkpl-k$u>?~&s`7@v!WwNm^0IpFyf)(OGyde5^SNsWiz`#@5E++Qo7Z5-#y z6a87F`6f@~|1{;FG2~3zCF5n2TR`I!JV8dz$H(ib+5Nok1v~Db{3yGR-aIq$iBpx@W;CyJ)}ISccsH0mk;P4eedhy*NEQpIsUacPGUKwbD-tR z(O<3N@@NO4r1K2YFIs=(&Tk<1s9pGA>v&I*YM~tH{(Jf#mNqlKD69HjTCZ`{dwp*p z)b|B~hL>{r>&MaIA$rX2v2T`sU!niOM841)Zm-E>e2&XU?N5umYRqRrKj{2EnMTrX zo0q8^ON@rsLDmwy-PaJ=dkv!r0X>nu*DyxsVftQ!-OCVVb)9*#&fBJIxf=!E_hf-S zImdcb=#I~^$~v~4gNQm0OMZNgRq>Bi{F4>`bfxD;X@}3FbZYOwR+a<&mp$O0o$J4Q zqNMf^UvuqR$8J+@vOjg<^LHy@3adgrSuM+*g?`4QL`{fpnH@V!Tvp0Fh6 zLFl}T#y`Pfr04p>(%)!&vF0Dpcn^n#(nmQ=){mER#Tbt*reDcEu-dPVyQAz5=4Wqd zpWrPEzF5v>sV{2(uF7SR)Z6||jSIa|`&T&LXYzhh*DHt}9aKO1za7M9hz0Rzi>+6P zU#YcT0X=p7$srm~*}jUspAZfte(FXfT>T_s%s(Kfe)y^l29{3(ckBL3Ej^b!??w6wI$1q-k%H+rY zsmek8M80hn7szjv`GJ-1Zupp-KQ0UXBNXrQHU_8u@+0wkGQ%lprRK+c)Axb$Z8H`B zYdAFgPf-kd+TBo+dd%;ag|7HL8TETB1r6z$_`8bMhw}iylW)UcYNvL=m?y#R;`d`F za<-ShMFt-Ehp*>^)pDXDA=MMqMtW8L9gU+GNBn+`3qulm{)^L1 z-}(v+UW4xMF&z4b^m{O4A58j(dftQi={pj5;7h;Ha?wffrQ!e6!B@Fe=m*~P`z#GE zUX`!g@1@}nyLe{^-U=c?<0OAzD%?*n1tjk5<7SR`}yIl?D7e z0AJGeqwF4rr}N(&()g&V{6Q*@euVX`fs%3ZiOGAc5m}m^zUeorNa-5pa*3U-mUOR&(MQ(gukWf zYly#4#lo&b%#=FrUNjw~o z{+{|P&c}OQ;Fs%XG1HmYaGM8{Gkr1rSwo!w=&*D5t!pWQxQ>rd-+feHCyx{Ft>3{u9t|}-^V1I&1kW>C4*eULci(ud{t+H(FR3@T1%b)g=ky6h{SzQI$&P+p>^TbjgoG1G`WPk#9xGa#a}FKxPbL! zAu$8`@?Z-8LZTCNjL`aUu9fMcKM5aNz5Gj%O6{V2JZrRESQ0;7)cbIvZIW;E*-E?) zq2mY`1wHoONyY3)%Yh$5z4!iw&DHB9-8K);4^x58&4L;lXB2gRDbH;a|D(YwH?;(WM2%kTaq)?cj?as2jal* zu2*z7w~F4!=YLuOM&k-;Pckl=#p&ozFi%d_RgbdHqMq3&s0ZuFeY3UaJSVj`R@1~<9XCq?|R9&)Ox`3`;&1B+5J&IvT@Wk&Cm870X?-8W=AJdWWWi{io{drp-!uYm>a@_Tw zPv1;&TmPv#FDQz9CUWjb$@!&@oRf6{Yxid6OWp6co^)N{7Un~&AE&X7@@evgwvJNS z&gh(Z39JYCTZL|uugx3ld`~yrDRvdvxwna8ch&E+d|&Gme{OPg$HmZ7J1^vpKS=aE zUY$;(pF}@({uAr3_+``YWc|wS+gQu>yW{xu`qgXSp4hSNKMl3c20Q$~-)!LzU5k1Dm$&Y+S@SNfLkgbnKGqrx5KSnx#wE1_`CjCadP9$m= z`_XuwsrRn*ST$ep(t3)@dU6N*9Xl5jmVPdNC@bqlVJX9OMp<1?DxIfsU2jr< zXYbGVsvnEjne<#txL5RYGL19fzlJ^^vq$Tfe!a>r`k8EA-*?xWOrPELru+X_t@Wk? zBS_-~pVqt{dMbKs@;LK;;Z0m$c-H!br9%Hk;X}M0B*ReeDM}{M^Lo_`3iIPjqGx(v zNWM+V=Ql261XjMg;X}NRWPZoy4as`d_ISMtb+7=FK5$uNXo_QRiwYyQr5~g%`XXln@=>+kPG=3ZvkI^CjLsCL*fIe|8cwjtTLOk zY2AuCeR}c_i#+OCw?aL>7c&3c_exQttvijF46GEF;k*~xdog23p^$!w`k9@w4jL`Q zD3R=YVNOEp|85lc$kxRb@A85$V&&MW48L;h6b|7h#?UYGr^$ZuN~YJH2f_mzTr$3p zbue2OOUA{i^|A4&1?6>pYvtdi zouq%PXZ`N&4m|Ls*W=#r%6dI@0jVTzIvc_&lkw zJ-**8+$i!0-xDPjGufsp4O`*yid<3fi67N_^;>m<(s5|xF4m1QYxZW9_HbQKSSxSM!NC^=bSiR z;^Mq-ag_WH^!TE8lOAsp1SiF(6UiIY1H#_jP>ihH%`BvY4Cm;B}iuyK4 zeHEo2>8%eZbS!KlzfK^oozfe!UDjU#{{PWAk6L*CgzAI-KvV4g!}Pg}SkGIO4o9w= zA%|I-e!GOI?}L1w3*Mdyp3H2t=9>qytLW4g0DSl;gY z4^M-xve45+eA|Jz_N%b(xp$M2>H|7PtRXs_c5MgzY5_q0_a3Bm6+VqeaQ%{wbLz(k z4t)Q$dw(I-H=RJRPPo;n2ls-lb>hH#FV%sN&=9}&aXX?GN}wk!?a{a>T&U}*?z#cs zs^m2nsYK^1G*r0-%^39%-dkk7D7;O^k-Z-fxPTaim3G{ZlBdwlaoD*ytQ&&Ppm`1# zh&oq2iyu*Tt%U9CImEgp^vUobj>qNiQCiolJf`WJBm^IR^hSE`vLx?qL@PEkKCB}^ z^?f~u1Aj%V_wwrxalu~0GoGW~Zpy^YXYV#pLG?;E?d>KyW>S3qwVdqrz7JR_f11R1 zlYCIl?h_n`#jf}{_8``4zd`X}nDq0zsW?3FZmNdMwFxll2ZwAwVIk$CTzBSE3}EM0 ztiM6Kuco2b;QEd}c-Q*BVEFE)PpCX{gh}+Jli;5sc_6{}?&S0+yNvnOJCOMm;Anoz z@o=}kx25`zejX|@F*DVBC540iMvl%2<8&hNWhMtiH?)DqAWi3UIlIpYboY_GD#|Cb z)BAe&GQ8QF@8viS_=$t)o+Wh8Tg-GCd=I5UzVM%moO4e$4i3jGV7qYj=`iV2)VWCT zOy%n0e$Vz@QUCSiZ_ICy-)49l4;%fE7YGac1z$KI^mS)+d{;Wmp__s=-Lu=@~) zJ=8Dc2*ooRh9zl7kog=Vw)WoF`&o`#d*Rop%0c$JANb2sKkDm2ytJR|xvNDKfZi_} zL|+fdFGqORXn5BsU`0FkbLh%%AK}Bi1rPB5JB?KeyPsx!;jVpxwKCF??#Zhm;gb_R3cWd4Nxmse4i z(X&SBnMmIi7)9yO)7h>aA(5Wmt0Z*g;PM4>co$6#hiY%SolHMmWv0jXzRPyn zT17WniF|Rywhx%r7rRfoxAZHP$3!~cMlP85o2W^&Pjdm#a2yzY-o=wR`0=Pz^PKSI zE39wFm@ebH=|Q!emw3=qJNI|jdTal3kk9(Q@h;N4U7HzS;@3aS`HxarJmw!Emjk4y zwfxB1M<`wWF`egOeBr=a3Hw(`SX#zmka;8H9qj+T^?#(}1>al5`L++}!eJaRLewwb zA6(iz+RMN$iQWbZO&(SHwS>`fySqrgMl6%K)nogO_o)DVev5yPR%#=j9*XBE z#Qrcs__J40m@mjV6u=|ydvcGjjekvEuK(u!;5GuLXJ|QI#rvJ^d&X=p1t|yp$4~y!=SjU*gxV$>+NK#SK<@*|O*F5HNj@NV}F{U-V0q5HB`Uok33(dQ-lI+VV<`nQ$z2l8lwpDt}xyd8`; zEN|zy+rEn*N$9Y2JO2VakC9Bed32WW#nmg%J30$+A0#+5Ge`fQ(Qv6ZiGGpZs{c3q z&?7u3*R`p-+}rRN)s3J(&GYy2cG}hDE*fE;SIVjGdsr_pbssy^_cup#3ark{Xt58qNXE}p6Gm;r`h>^)9d&g zm-;jKu~!qkohyM~;W+UMPwQ9>FUoA%_2V}GwER|4Pp|b>DYty~6#mge^CYI{ zc1eGRd<5dP)@f|r=W|<#{*$feED?ORujj7se1^)0{fD`ow$5YgP_`a#^30D{c}YO! zjz~Fu@6hhEwfk;e|8S7>H5?Fr+Ib?_#X_$Ckl?X%QjZJ0Sa7 ze)eE`@;7Om;PH$YFCp%|#$);vmPKz@J|=*+uV8kNoHvp8rqlQL#OG>k-Gk5!b>8IR zhY~-thG@vq|89PpkMwJuykAY@R+(2WNu4**JJCaZ@5Sivy^@g7lbkmh&T;SwGpXWL zU>y4Aq}_lhzJ!xwdr!`nT*?{fpFWa0_i+{FKu+*Cc8b$_DRSDg|^MzEqU~xmY zYYY<-WN6$4x(Z4cMbho+KViEjbHOud*W6UQE^yifeK?*XlD`X04z!P6#q;(Itx^}YC)X!%!A#q>lskwZr)YCw8R zi_Y|%PCHhdupLME{;z072iqIQU5lw6cRYuC8BE^jzYbGA__J{n!IdaN5A+-NGT3;< zg?l@}MO*YehbGaNCJJ{DKc{Q_Oz(fSdl^E#j}!Fm?8JO>9Lpc;deC56zhZjhd(3Lw z%YgQxJkFlc{dK%A6=Vur&TTLB#MKYGzw-;^I>KE!@!wj1cjjKUoA^FFm3LU`V7U0a zRcVUGRsPGlT53lZ)6q@uUtdf~v_2wqHIT6(UYe_P-pFwqXP_PX=AzxN;q=py^Xxk1 zjPc|Dgq)Yvl(VdB)FWqHm66DKGV`e(IX_WT&Qs5loG(tv+13M1&hT=O>!(;>;`=hL zx{TAq@=HaJt`ff;mi1oVs}xW9GR>EM(fYw~m-qqehhW$AkJkN3k?5iKN4Z?MOY{-` z2>Ety(@h6_pU&?A2TJ04^!}Ei_k%BzcEx)CBl#Y3toKKSj#%&Idj+oE-@o_`a#mP2Tk7mhv1p{pl{$REV>tJR$C*?aG{F9Cae=pxv!(XZo0 z8*dKCxGxyi#C*M8?@6(BaPzO&S2~coxBlU^N&nqL`8gtCjfUNg!&sk!21=l()_0(< zrgkoD7I{|IGgv$>s@x;-`1=tAhX;JZ?pA)*G3HOcEz9ZoC1QUzFR*cbcjJ%c+({pU zc{VOy{&I=izPp_txBZ>GuICybQ7^GOc`r)m8TqNA?|D_U*71VZ1@@I*JpeGGq zaN*VNT>a$pXfz(i13kQL0qNoHRouRy>6M)B-Xpmm{hQ9C0sky@E$+Pl=)Y~9%l6kG zmz?5n-c)OxKZ@%Kb$>S8yP4|`_1^A4$M=(o&MOJh^wq}Kzz=@|dcH*T*!lC|Jn>^j zukCla@Si96*bgaxe6N-1aoc@3)$W66_XY+VbT4#H>G;o$)$I&)9SY-YdnV8i+dn;> z_C7^)*n5>hgBW14@2&G4hd+Nz@V4GD6dmdLU4?uAp7=ciT{j4tMR9P>9Zm9ee;WMc z@wUR9?7Q(;cSreJ-*^5X(QEVs%|Bs35j6i8%aNY>KlDdiDIV_wcgi|8^kEFq9-VLN z&XOLEqzrn(jD&;Nla4=_A0_Le?tBFMPvF<8)IR$-!h?PGgU-G>@3W`oBjH;TKOFa; zN(cCb_C#4(4-6Y}6azor;1wwk^ZA_=&rhVqPI{tt+1H8Amvzao0aOq_N*wUGdoJl~ zWc%TS9Oc1}on+E9E)@IDT+V!_^-Ye`J!`!F7?u`me1^ssX}pW$h0^UBU!d^?8lTH? zmyV&%zrIfCd3FQ#+drx07gd$thj~U>+eLcvSJW=p?<_6<6Dl8;q+EAK*RzRd=TW}# z)92fw2yQ^ynY2&$C;Fv*)~-TX+tV)c@I9Gux$Rnj3D|`k}X=C(0_{bUzpAcamJ<^AQxMe=!{N8xQc}33rIz#`gi}K2bDT?9t9y_E5PT z;L9S1^#0uZHejQA%+IJjgB~L1c%=5_dv9g^Iu$Bh0gW%q!K?pHWzcYKdDbzdFC53DzI zk^H7>Jh|^+6_=}Z-vRuc-EUyyj`O7K|w!%Il8^hE7@OrBC-cAvzRuBh{AY2QiO87^UT zUZ@|42^z5)LUPjaG4zoB#phd>&*p3o>*my@cnf`61E=sQ`VY9bE}%d3ETsPfl+ewo z7~i~!)4^wQlgHtQ@%Y|PnSNI<_UJy}D5?wd26%2d@67E98f2ax>Uk09)sr+uvU8%q z4?k<``T3DjkL{-cA61{6qnGZV-t*ba_-(ukyg!*k;|3a^;qkqB9J={ODIb1ou^}f2 zd;i645Bd?)OZYQjjIu|hz7nJ5aR>TA`tBX4Cw}i>90$K?KaAt3cdIi_iqtPeTf}Z{ zeBFx5xZGm43zsgod#As{I1TM?zn%EKNBZ$_uh?f;mVVxCKlpem^M#v;UvB-VkM1$y z_R#!=L)$;Hc`4{QLgfm2UMX33lzDL)AK+hk+u(W*a6RHT6F)Pa`I6i(B;z)-GdiCo zb{P8^FNI>$76a1J}dEg zO3%(uOZ-lur(S>K^3Ck+x*uX3(#v`h-?L@!eZ=h^C;qiFCt>@PD!t$7>m{&4&SpJ80Z_JnY!oW&J7O?gd;)>W81o z(fGp7Js^Jx^7m>!4Z>j`W^XjV<$5t5=^zlm|IYfs`1m}F^4*17lY+xI$i{`nH}IWM zGv3erHtg*H_veYdji=nf^_joe`2(WUX_xi)iz(gYZTi$iPK-z&#E0$FPOQJ|bNm_F z_cycPhjwtg!_syMO&_&?bn7*G{(|V!{t4|Y z2t4RJNO9jA&H7LGt~0-i`aSuu|7#qNI`?yaIPgV@&wEj~uuziq z@nZIGISzP2&G&SEo$$c#T}kmmS?>K0OLAV5_QM&zxAaX8qwEa9Hz4b-J!I#o*X@@G z-SKdzoV%+mpiFw~TpG@cp zD3m0FSsIXg(lx z=zTuXynPbiA@tHc3mm6=6(yW^Sir1S%j)j;qJLou75FyQKy7qe+S2XJvWGP35n3N z{SNgKi_eAjO1jaF`kC*e^xQ0EqbSY; zkozCxKhb4|56k?i_nn}c;_ByUJ%ih2{@3nZ3A`ruumSCMk%-C9cFWw|1G-Va zt@{NTIoAh%ld5>V4@tv7AM^%(43f8c&ELo8iYO2D_B}C<{t~@{R8ehfyC|=j0ana-G zx+xrw?#M~{faqH^NAx}%5Pgg0yhigy-=aCMlX5M~B%HKZ@=FUuzgonAX+4(XD_dw1 zMvv)%>5;AHL+;>Pe$?j%$qjlz!#jQ-102YY`WWYf|BxH_{?n9RVC6U50O^oksva!g zEOIir*mvCH_X#I4czpj;SoQtN>V1GyJ#RIo8x+d}zq@v&^p`|Fe+$o{4+D=T;JcjT3GB@0Rna zoQr>%GtRgDP8a_8I|yF;y>PG4NAq!}6L2}D=OMz2bMug75B*2_8V!^0K3z#E#D_Y* zd$UgQVcwd?*X@Zth4wvi)SAzyw ze+u>7PN45?p`Fl3@V$#n%id2&@C;Ak8ODSpcwjBW9|zBL!UKMxedf2~dFCdnh#vHB zs5hD+@#re?D+{R{8i4m0kTPG#vC(ph&|`KQ_Deg%sgfSs^Jt0t-jA3M$#+Tii~fmQ z^6Z|;_&jJq%3@9}32RzIxA{9!|}Rzr3PW zJLG#GbPinTuzNaY8Xa_~3v~B$zq48fgWh*wJ&D?-J%u*06_X$8gZ)OPN3(K* zXP)pQyg|le?)(V_z_(|(pJn$*_Ia1s)t2?5mwRMrLtV!Jg?$p5NKXQFa&sp!r5@YBI z`*ISl9$MeNMJk=}-S{T`Ow70J3|V(8i~dCI9THbPiaKQ-+vE_LG`5dZ zkkiKo$?3Dl8Sj%jo<)uI*vUfJ$=;#t8}3%WVg25KiE{S6JR8p^_~eDaXpEG%@3XD}T~w|wn-e-pjGp_Y9MKnLMIWH|cp|+A5pgIC zokJ1-toI>eT(QXM&uw2A>1!Wm6;nLom)w37`$DwN$MObz?r9fZ{1lCoINvST1-_OU zEq^D}`lVG1U^n(2n9S4YeFtf0ufRhNB);Rpd4I$02%7eDX!Cz}9!n%~fBfDXFpm05 zhO5VZzd>`Jus?0T5z8yQM*KUiSBqc1h6tj^_z2on#&6NM zw3oiO!tvgcw4*O8a-#cYkAe?2kD5%(@1QvBXb0?Ah zi|kxF^kMR~ScmpRA87tY?w92KCm@H$VcVJiHg1?m`6DMI|F1b8dTY-W^uzb|aMZ@- zc0XghpF+8f^dIZUt0)Zjil50(xP$A@U-N$$V}8^B<!lw z&G9{tKw$4<=8KB=ktknUS$ zIhh}XUZWi3d+FPuSE4UL<{8FYTqo~$6xSVLywN(J;`#JOW~1l&g#nskR{MqD5`I6qU;MJILyYR;boj@S^vm_TIG4loFsGk{UViG; zu>XUK=YWJK*!PDap&agycKvuWr6==(SF?V*>$L3m&0feZ4ikOAbIb1#9&uN4o)Y}n zz|Dxip8`8F_}3D=$=mKrHF&olIY@BT`f@8HcKs#%Ae{$dy?4_ur}V^*xL6EV(D%>6 zei^S7$6v+(VR?+$aeUwDg&Mz5^M`3%=Ksle1IVG%}3Jjqvx2T}0GZ;fW^bI6~Jg zeD4UShw=NwI=+bCC)Ro31i=^0(|WGtVsy?@@K?&R_vP;j(35z%kZx9C`O<16DfsZE4<+$|=upjytuV2UCwSuxBouozT ze!N@nA+YzSR^B7^MUQJeV+6nXZPTaZp50F|zTVPD*$-je7WLYB3RfR!nTOKRLy{c! zh`*~m%2D2DqTwFf4>(lN{iR}dJnKtA?Ww4GQG9YTr-wQojj~s3T=|=QxyG?tk8z>M z5$%xp*&FY@p{AWa#PuZY(DxwYc1VAj(68g{UZY>f-@Qh^^rMvz2>s!J@UKwP{x^Fm z^WVM$Rm_f)exaoOvCdQIeH2b7d(wQt8)fraUhvqss5nX#hTh}me3N@|brTa3mb8D- z_jqXkMDUM-G-1zzH~Id9j03|x>z_rwt@Hc*)e!QdHzJkvfY47zNN(n(6c%O*9kD*l z1Qd-UVm~4FQ_Q|F^rE8cFX$h}*3^$KroXVw+NJujjgzTer>7rw4&Ucp5wU+@EOx4% z*m;dk)r(HmhfdLh=U$)2OS@xz%5l6nbux#EK3%PG(dQLCT%;LX4z^Gcfs*5A)e;d;)zpLvGu1oXot(fF6~y8iMCN-=*MjpA&A+t20b zo^rOIaB3H4#C#Yn@vwhA!=3ti2dDu(V>xu`L4Tg6CscjK`~@ZL-VfW)iqm!7&-Z>; z=!3Fzira~P0y`H4a^ z`>m<@&gDG`Ut{|+IyU8)j&P%lYis$xKcl^xWS%pM`4jdpV?7Vci$&i{j3(Y^L;L@Q zj_8=*tR8=7rQUe_t>fiXyc3pW9B<>cxcph(hjI5U zpr^^c#m{(yARHzAOw_LPfKeUX&Uim)l=KIYzSj_5l9T-BaDDNjsMfr2j_^NTPtm7y=3A#;@=*HBX_~;&>JM~?lT;wB>1UTf;azuqV<&lf+JVz z<>>z!4ek8^moLz~wul=>{(;$j{IPf2KYIYLox}41; z7E(Q+v%5iFh@kha*&Z-YFh8r@hY!ej5v)3{LV_q4~!ixl72MPB8Rvfj`? zjzf3d5dFQa^MlS1>y9NZ&hkHmb}W%N@(;4VIaIS9-3_l}z_4^!=+}0Fk9Z>Tg?LUr z{{K6s+r~q_C+}aZAvU2$?$h-Hm(J&VUvnId&uzUP_E_(}<`M9_%xoC6ulXfnUAXJ0 z$ZN08ugk|cZs%pee=2@F7%ui+b+3)e3H*je0sbfdi}31tR=8Kkr&V?VXy~7w!|Ip$ zh|N!2KHI!x7>z}Tn&+I%k61tH-tUEW*>^X6@2kH6J+7a_{Lc4e9B6uxtPca4{G{r~ zLJGmS;%FJi`(9D_DAQOz_c)jG!-;pIn3tc{z#;q=QtX_n?RS~}E?+_nr6*{R`F=2L zD#z_!UzblusXbQC_5~r2Uq1+Wn4DFXLJt}LZHWZtUpQO;?LI5JT6E1c7JmIHYwnHH=vkj=R|NG z1tjA;2!P0M5IDr~*n7Kn-vI8XXSkUPM{zt)(SH)>akK|vHzrc_*mteE&(rvNPWJL0 z;#l*y{5~h-rMbuwSb?zUF+M=kw$d4BK4G;M_&bRRs(qTG9J*VY+LXeF^FkS&kxYvQ{=v6vI-K+J- z^vv`}Z2q*W-TM8xs9pSdsP|UVd*j?LI`1a!880yEe% z=_jsm#Q`-J&vX4EJ^Z)1fu{)TK z{4F1paN383uG=~Al6~xZYwttO6}aks?8Tg6>lu}Y1TNl}qAfi@ZFIhFnE3mkb4-9M~gyhHA1ViAL$`uDFZy#JQ$U;h=yO)pM; z|62BoUpV{MqA2-ka{jG)|GKrd-o*RYm!9(eHS3A)o7ld+yKjvh%%oqC^8#skpZ$Gn zIX`E1Zs+F;=k~4HUS7!i)|<)XZ9ZV~JJG)Ny$*cRFNnWCdB5;F=7-t8)tB@O=gv2! z`-OVXH{qO5(m$N~`KB8kxu*Taxqa&w-@Y~UCFv*5oo|9;I(NPaT&R7%>2H^xT0c>8 z;FEr09^*fGKXGpU07jk7`2&t3CjG;y&mT59@*KK3rOo_~Ge%^#pA zNxyJz{s1|i>leU<+Wms(`h_~ymA<|#=||4>3;*-$N?6G|lYU{pBhPdFg7|&ww@?4Q zh!3%0*@qXsrbMcGb7i`w|I7f?J`<_hn-S@3g)ZP!z z+xxPZT+>sL*AMCIfJ!I*0H%CK{RA@T!8j82K1F-O2yK73LUBCt{ns~1JnR?x^RJNm z0`i5MIU|3aFxu`RPWH8DFn_`U;j8WIF27OmfiD-(&%C}DO!sATM$j~wL)+K7Ym^Y| z-ba9YC$O*7bC~W4P`Z-$RK;FGyKkaR>g%EUz=3c;@{OLA_e(zROF(|4a=w1KFv9K= zvHNfEerEF>%4~uM9ar}_{n0kT*IJM;+26==LbylyL1Pj;%Qr}9_beG*v3zd=RU&T= zDa!KlpOXFWnVe1IrjK)+?n{!eEP9;W2da7;e`iDVHT@oK`n_1l3G4Zx; z9&IGWr3dizFMhw4?%iN|f`*?eeQGC}A9K7%`5rXrcQUCm*cJHtz;zf8{(#}^-WKrx zXzKmgU*7BRzW^%84)i{TTJT?S;ioJ76b<$MoSlMR}XiPAnbk% z+zSCX(EYKih+m~0(r)?=F`=OEcr4=kY6_)2oE~N8%KbHa8LfwVfpE`|d!Ncj5m$Wz z{=DKpx{AKnxm&(N>(Y}=mH#TmQErl!`!1Dp;ky9;nAGp$|2Dxz>lQG5-TK}-_&_9* zJg9;6#Bx@CAx>2}-$lKG;oSQ6P<`R33pqU;J%+==7 zCqK-g@vorYl`6I$^*go9GKm3%Gn=i(Kg9mhViJ z2OnL&Jxt|se?aq3lFm75Sxlv*T^v$A9{WCGG-(;f>AqOj*RUjV2fgqIu6?21%ombz zh2(-Kwr}Da^M#BERRHdvr(ygn{U7*-m7Az#9E!310X}LWK#jxxlJ6IPROs0w^z?4n z$#A%@7yh+7BVQgp6Mo-)hWuVg<#Ero?Wp!ITRA=c z?(GyV?p4$uxqjym>_bHgzV`ea_m|0dCdg!&-_}prI3lm#=gY6Yni1Q*JguXpo`CLi z2OoV;^xD3QXZOJ^f4S1rCSm+t5~2h0weM0JUC=`!^LY0#p-)#aA^FwfFNfAA+zv_d-^4+Dzu?)^rz;t8zHc&zt>dMh z?#4^J68-#5)~mm8Rm4UY3S9rfBE9jt9!|j{3h$w zTU|NUp;tH8fi@d%b?DU}xbUZ;SAYH@ z8DG8mH(amYWMi;&gy;|(TpN3vt_OlmIFP+H6gO#LajoowIX_W{3K>uJ(`hhB--+E4gE3P0~VIC^b#JVtQU`wp_e z3jMf^s&MxmeoQu->^sPMS1q`wyAuBp>i2nU9n;-6IN83#JBU78_dlI|hX<&9^}fS; zW?a-li{$ixe%N``vW(+lN#vZ~pNJ-{<$S>7vGv$!(q@kP-e1VRz-}pzd%A(wzEe_b zzv6pDUp@O3`-$(TzhALa*7H|0nO>;$_4e-Mgo&A}b>E_$*H^)>1{^cW`z8?o9Nf^9=Q4D)_H$7l)gj{EN1wytbQThUlDx(->55b_HX+{9z*t1SH}C}U}=6sj{Xkj z_gvb~uyuX(Q-A}X|A_mkxr{%^T*2}zlooJ2%F6deUAY}5x!L!i-2K1Xv9CjTVG+Q4 z5%H;aufA7O0yVV1MD3aextBFg?fxq*H;a-`ZaDbsz^^5E`|gK}KSOZQliQyKrtb63 zUjMX!=sEem_yPV7P;uU24(U9RgzX18H2xLJl3#3J%jsd+;8tl|;G_0s8W+4#`(lop z{|ieJPxi$HKG_!+d{MkFF7=&sUwoZ>kJ24~9Kd(H9r=L&@xG`d-+!bDv@55N<9j|% zImj9EGP(W(;GO>1%blnn0(~z1e@JwNCDG5mmiw#9zl~B{et~~3 zzjjjj>VD`DHD zzx@pP|28Ub`kDB7<^L1H&#)x)4keH10g(gt)vz$2VqnZdQNPfdu26XLosQJoy69?-fpAU-9P1*PQMlrtRdwuJf zo-qDS{91{}--%x(aWO+W&$o=@QA>{T#QWWIND=6XCRzLCJ0XePayE~yY zx})6Rx_)dK@!R!Vq-NZ|bdp?ao!2@a@Q(lbD&$3#p=W`fz8v~c5;~v{9e{WImf?RH z!39mAQtVesP`^e$eD8XW+W8;g!8xQLb0Mc=+}usS=zIXTCqHVcq!V0vT)mkpOvcr% zL&DwsYN4O1iND8&dckS8y=V{GYwZZA9rnGIzDG`eeh2(>`E?PMul8T-na-icMRd+o z$4!d`?vb?|R@=>HPWL@IU=r?@a`lX#A0oP<^N)zWY-2QDxL3-9|IBCN1F?wZzK|F~ z=TI0v$YAzMe4$Jp*E;?@r1jX&WAttl$2gJB15?%X9YN6>z~fh<=l{)i1AZ<$ z#c}pA^xx`#&F@1_>G5`N2aV6DdFVI80Xgp%_8;SRyZ#Gwrp(Gf7BxS7(K9x(;=r@=~prj9IU^-C+ABcH+us5Vc&PE$B#pF zwfy){U%LVeH2bGhf3ir4>>8A&#Hik6+3Kz$dW4`aQ%4 z>-RW@i`F$WUe}KwN{v6seAzBHkbHV~SI;jd0=~@X_&bQ{`NcXa=lbzwfPYNjp+|=Q zZ3GwKgWL4D@^f*ZPsgLuo@6}Q#`uzQ(r(1@r2U8Q{fO<}9e1YvHt2Wh zeiPB1`0bOAJHaoMpGEbk#Ameigyo2@UbBr$;KYjM3{t_&&^&RGs&<8Y*9`FTl?s)aHG=#2% zobC9_abh3+BRM>|zx>W=`b#xns5^YB|XCg(a!?WaDJt`$Q}^E=YgGUv3k9IgS0Fo!I};_a5v#X{g^1 z3kUSv>98i2^Yzm&;%X}x1kq#tCC;C%clurMYuDn0?^WkGC#gTv^T3gg>%m{J*!Ly_ zy;l)7d#%@Ul=Tf7o}VRx@cFBKA{STR6FgUN!F*e*gsa6t4}G3-G{Zf2=NYBl`M%4! zp5#2E@OS8Q9En|{<>p^cT}+sB!83S zpZ#;*GH=fJiNC#TJT1)A^L*;>t&2}he>-ZypFn@-xbSu8?*teAH1zk?|NY$P?@#Ye z_;l*}JG39h45xnm{mt>i7(YIrdi--oKK1zFFV})UfgXR~g|9=8|G|Yn4LyGJzn&XC z{*Xi0+0^41FH$|mkm>o<;~kEC>e1tO)Pg^O9zX8F*P+L&UHH?`KN7y3VE^ zub_e9i_ssS_ zUZnmQ>t@fVKmLIupL+E8v$fz)pvV8}!q=h4`(60c(Bs>F^4#e0HixdW>5nJ8NcA}P zJnQlM9r@Iw$9=WnPoT%|bm8mJ;~p3OH1zmQKYVWVc!opQ+0^56>uqOez3o+weCpBT zY%TZ`=y8V&UxyxF?82Xh9)IsFjgJqc)(yXL*O`nf&aJnRd#3gCGanZpPRZrlj$CT# zZyNqnwcs87J(j|M$c3+=ziIeCci~S%f1f>icKmQ!e;;+|I(0vMPJf>({e71smwNPf zMJ@Of=ZlYjRH>PVrEE8zet{Z_dh@l5YBjb7l1J zwC~fg{lcKJk@48~@uDY$-@Yg3a&4Yz_iy)Y7dq_z9pC#R>xFwS&6JefCpmJjwcneD zA65e%`@&r*yqCIgZOWh364rwM`5Tk*fbr3#dr=Di2p4}1J50lW-^E{t9d5^YkUH$} z2CTab?E5uZ7MAx&SlS_B|8@?8#`^8>lMbC>|I=JPx-Q3zi{{9_a{68*pS7CwQ~iYP z6T%L7y>J?|@igqPt&7X$SI^=wy`SFQsCKxCv#ag}Lj7!qas6V4L8F{wanBP$B#B@7 zzUXZVFYFh7WuBdZCEP zGrpor#K>f+KaBI2`f|P~@Z}y`lv_pl#y{i}YrVifpXmtv?;j@+`Yrx8@XuquBOmQU z`JJ5qU2cEif9E*pMo3*F=R-w&@83k92p;{7?|mzd=|#3enP%2A3-I`keI(AOsER!=zLGERtQzJ$YYf($65nU`oBttPxP!6mBqN@-8j zCi-OdWOxfYe(9$BhhbSpr`-ajcimmp`g;QVxLhZj$)Y#tZmn-KC8)nD0v)Un6?fc(>?DBXv;p zJVpQUBWU~)4*KRRKhaL1=N}o-(#Fg9rp={||J%cf{pik-TrOyQRR)>?`jPH?{Z;gC zb?B`W86DGE`Zw}lyZ14kaOWNg_wJBzV7r8+tsG*00>orBY#`wtsXtnqV}#Kn(R1H> z1=qi{F~=i`rH$|A?=T0AujDs5KquZ?@V)mi9NH=Iy;^QFy%CG{OwYhG0UmMR+Z@A7 zT-!O7GULH*pCI%EjkoX#X5bP3^C08t9{$%Hn%vy+AuNjCx8-(2j{)d= z@}-TXjqCUgn4obk-5@LUp@;Fk`xzhFBk}igd}-su9_%b=T$;g2SI~jD@4ZFfiC9=} ze#txH@{)fZn!)2iSY&?5GR_b0M=JFA32sl&_!)kq19)NizIrIoA@OIpT+sOX42H6R zg9q`wH%a>NyEwG>wlFTGVcv20jU2({N4=i&P2YNZDUlu;Z!&*u+z0-H;Iy5XeZVdz zlU)=_zsKc@*<~CSN*~hrN{x#>MA@S}{_HKuIpipNjN^8{2c08l_%OatJje0glIU}k z9mnzIyT#smcZnSqN>WcTTh#i5j$(E($8nDQN@@q*%lSI&ri9i~oVdVtv{B-f_esd@ zqK4Brn#%{7U$9^5A!UQT&+k$AT@u0%@_TY+jZ@j}sHY%t@Cz;gcyA*gV&kJU9d=K+ z-3yO$=#o(GbyTiUlJ*p{tC%i(&#Rbyv$k8>U(CvT?mg6Q=oy_OXFkst^YMyXgg@cl zw{p4VyQF;Y?zeEBNFo9!@ivYJjTdAv4+NZy2Ur|zM`CA}#N{OaLt1WlW~`P& z(|zw3^f&RdZaatar?cMR>Vf&owTwUQUt<3`4qQilk8>C_{({F@pdbA5z3*~5{7{a5 zJv;po=m|@ES?*C*>@6&pINm!Tb{g&#`!;{F5UnS@pm8759W+kO zkSdUTUYL+?m$8SOLOfOCU!<{l-3J0X$4E6gBVZYi@ zzw}o$&SAZU|HHV{_a5Q6Ywtt(pF1GWe(C>ceUR-kJn48&>@xO8Gjd#CG(|dqXgjQ) z{NP;iQ#Kxow14oucX2-Gg@5&V7AWHuWJK*Uj*8lMFg=)OlZkuLJnb)sUkncsk7s=z z4boimQKWiat294;kF|%OQJ^x5v*UHZmD(R;9D;nSFBm?V@q=#ETUjRM@&!)j_x6xJ zk-8J4_+B3aEDr^4;(5JH5#1}n^xri~=RYOMw{Zdd)7!p4{a-9+XbeIJNtan{UTls9l6plv|a~u|Z;YSpRfiEO`1s)q8&Y#O*UIc}w zr*ezLVF%YBUe-9tZwB?#7za*9`W=#vVz`%(?(YIxT928+A>i;t*J(Iuk;GdTbNGHq z=JzFCe!;F$w5W1S`$^RImVd(dL*C~%I-+%A&lu-pz7stu{u1MV_=9MR*e&qmp?jH_ zP8WZA91p*Y`bHB=3#DF$w|PaObic-B+#U9>=Xh9N%VF>CRT3{P<1m?T-^}&XJu{r% zr|ap3fyEpz&Vg1@eFHk4pMy~?(c6-fF!g;4-=obedY~uZo2y3{m-(!Xk`GO&sJt;w zN8I=RjO*@M1luioa^d3!#r_cSgy_LEy&^KoSCq#GX`sbuE5`RMUyQtrNS+4f7vSlLY_m%`-UkkK>^q49| zy><_R?>!)Vk?Q$7fPgc)tUpfns|0TtuPdzA_U_>@Y8U$r`*%pZQ|(yS&!TzD1YXAl zQIJD*UNlksYc!1%7V+7zF3|BZhA)hUb&_A})O8W%PqJ$-2fXxjgg;JyKdf z;m1*Pbf@Tvty4zx#&J1&uhjRZ3*CEFjsqe`;KjO}`HiqfKDx4Wz18}5wbVC*fB`S! za_)g`lJpH6@cIj>UA*pUZ2j3gdh|%xl=vRL9&xM{+ zQr}moKFfz+`8=&Ph9%h_vhQAoW!bNY+7Af7`epwi>fA5!fv<3A`(W{RHuZa$k@{<+ z%kH1C?+7IK%^emzdf!~^7hA+m&~JT%=#3r`hGJi>zuO|tMB&C~nyvU1N}c*n@2s3*LonM2~!uOu$})=_pp$K8G8uTCNP zi+l3IO(OyBh1W*iK~zgI9^*q7tb_IJb8!fzL^wdY2<@7_Jn z!0joi+%hINnQw#}RBl<7+eXoks9oi@N#)k5a(jr$pm9w~ZaR*RCTjUq8$QzxdwDQ37XnYj&K@xAQn=H_%J^=b2u|cD!5g!9T3Wd5&I*+jt57ZZjo8&o?a@ zET3bL&uW2p;od=Ty``&IUxSRygIxcMlq!04zE10#Y&YTVRif|xYdK8I&+3gjpJqJ* zecwGwb{EU<|A;=SoWc#l=WvtI8+A%Q7G*$XvpdOk+tCGqEd*(n@{zM%zu zS&?rsdra)OB=tbgUP^idexfG=U9Td22+IouU;iQwUHYL%fZI%_7XE+g-UZICs=6OP zcgQ6(_(%xcFkBv)ArHdH=!9pCqQgUp5!)bK6Qh*53~7Q$o0~z%$>CoTK#YhrJcJNm zxib?o5$!KlD?x21f3rPWJn%(khZ6~Fc7wH3U7fYmm z5buH?@crjAncmm;;k}-NX6q@INIE?S?WhYiA^1W)0w3tR-u7EN49kIe8>AnUddS-G zyQt6BKdNDHLN2VY6w-2UQNCP{DiRmt0<3od@npc}*PM_3@>Ine(%1Go%zU~Y#`w8< z4%#E_P^r+a_-gg_tPj(dY`y7D#arzpo>JlC+K$5ZD@9D@kfiqLn^w*~)|c?Fd>bC{ zjfj0B@>>f%z6Vs;&VVO5k#JFF%kW(0{gjT(0}>vjUH0#jOFx6}7wqTzVcO+n5#y%V z{pi!!<6`s~&5!yhf$k9fZ~sgQEad99`Yc9&r|G=^ny!Zs+2bm;(VtY>phc|T&@a0^ zE=^*rB7Wm3q)X3#UI9qtA$Gb??!K<4)W&s?o-VH9E%Gt{XpnECJokP#^z_50OS)rt zUTvjyy5`I46VlB&r_oMf9br6Z`jo~ujFYnXhW0CqZ+6iBr18xN;WWP4LU=3B`+fTO zhH>=i5-0Wq<(hJj79%?4gf}%UkK0$2>%`LzSFZ0pO+3T%agzl*SWjI$^&YPj#B#;! zd2bf4qMbgIcy(tkUj31D&B4FhCESyCqkDS?>EAXs?g3ro`?l<>3eWe``b_PE$30ke zAmzBn{ejizy`+6bw;;aoc;sHQpX-AyFb~c=(U}P@fi5I?11oDxA%o8Qu(YVjQ2Op zRyx{_vhhN2iRX+5#4ebG*^DKX318oNeu~7+s=rN!G4p{&!n_JV-q8J=T88yHojXl~>8yUCg&^kKRi~%yx*r zd3$)hg3;(}d54_-Qodv9dW?RY#;2l>sFLmuRt(w?F4QCJhQ}M}I%;!7@gUnlcPI0u z>yrfpirDJ6Ssb)W@PeQ9U&J{3UMv4%mVc1tEa9Waa;*?|2MY0azE8S(HC-|4!)sl4 zgQgj8+eH7cWuxAgNG6Tz#0?|=pCh=C3-c4n(b8@wae^UPwovhvWR(H%!0wK>zF<|Z z-EO`tv$JFL^q8fJ*X8Z~EzDT=lzhrQRk*1Af$BI!-oAlSjT!3FC68r$-r1XgrCL((a4?O%uk0(%x?u);saQBV- z^q!voC=gP5{>r3}D1P}4yVlzj;~(Y4mA3yu>TSH0`sVSO(_0~YbV&M}?H=dSS0;Tx z$usXrT5 zvJv_(9S_nV{3svFbHzVPIjcR2C^kJy{p|6QK(5&1k!5?e zUXw+8cwexa_pV)fkGHPl{k57cim#x(j;}O46^oCS9b~>m2Y6qwpZBhPdiVK*{>=-O z?__hY-upMV>V07CnR;)R%KO~6UbPq0-uSXN{E3ef;`u*(a?T<=|M13No#^9Ec>cj# zCaKhJ`oXDpC0&#&p5Okwr#^u6-@N*JJCiQTKb((s`EEHijB_ZkP_BrN+#f)`MG>v{ z8yOppQf2a)!5=bsp~1rj_Zs|OgXbH3zrj5Q|C7OU z4gRdb9R`2O;C6#QX7E&le`Ij0!A}?*8T@sF53-%tzhdwKgK6)Q@agg#K!8!#E@T9MXN_g<<@?Q5)RpV!nIiSGw-`L4BN#|C}%F8SlM+iE$4I z7X2o)bJ!nP%P%x|8kvN(FViB+Qqkzf%*GCe!Z5_c48Zj`epIS$&-&1&}LQ zWc789`JF}cDc`f1FIm9)Dv6-McQLv{U%*~VQKEsado}$)`5xYvZDfA`u4|cg%D+3B zl;30TNjE7E8BD&C@*@Vbo|E!N4W=F>}hYX%=M_{#?GG5F^O?=|?>2JbWYC~X(Aj>q8V7`(&a;|$(u@JR;mGI*xJyA9@g zD$!$uUv2NV7<{q8n+)bUF^NwMKHJ`JF!*|d*BRVz@EU{PVDKt~uP}I}!S67*&*0k) zUTSb+@M43x4=t`QH24vF-)r!Y!SfA%kHI|#-)Hb#gC94z!{E;t+-~qE4W4T7M-6T@ z_=g5Z27kw3+BKfe^6Eo< zz;hq|hWOaNGkk2{8NP#B-*JlXfWoE8D-Uf1p8N1O#J8X6Q~vfD>~?W)4&NTb_a}#T z0ndH-8{*rY!?!DkZ)XnQ4#Rilp##8kAO42;MsoPJtKR?RZk^5ei^>h4tccn=ZbjTIIu0s_hzM@_4$$}2rnJcCm+)j8g*KfvGaNVYl z*Nwhi(dax)kNnK$OC=DIt2C)ILV-s;ehJd|$@An*Qx*T|k{tO*8Fr-SlbmuL2MR~; zmzQ!OzCpTEuC?)kuKmBpb2$e|@yI@O-WMIz=YGBt;;eVglyt}JWBR)e=sn&bFXZz1 zyHbJUfnh(hUE(R&y@{?b?a9gi$w2<7C+&ZCD%te>5Y!{$wu#K+gCCUV&oCc6NIdW> z9r8S`x2xa5cqinZ+_jf-7_oF>hUQB@&ez)}U3>IB;>CTE1bFYfs?k5KMBI8C^M~oy zOS)S9D=P17{m^lmF!U40$`e@+%X*ncJjH08{>Z*#yO{A%2kRp_W+CC3W;Yk~5}w8U ziN}{)4X=+=7A=2noYMF4d0ZclFrVzZRKB{WL0X7Q(SW2K5!B!KS&XjJ-z7Lxx#HD& zYw+Wc6Xf^tlfrh;rwK#0DceP{KpaMS=is1^|;Ji zwO*t6()gil_P0*El9h|GPCUr=pLEfVd%Sl_I`4eD;v3yWezC5-PkzQWt`^s=9Ye|F z0)Kak{F7ryuUg-c>L=@w6Af~%f$F`F`-SEG81&uh7x-?``rNGeegA247wzHs(i!ZL zH)6*QAc35Nsd$@x*HGm+q-b>fY6IwOB`oJ8ke^}l1-h3>U{+1rv!B!PAZ%T>f`9$zO^-DVXSo&@c9O?&|`4 zopRWogr&&$3#a8+FAU0+j>DzvC*DAP-e!7T?;xCCH&fT_n&0i?_kI}KLtocKMUj3a z+fUi-&R`GWF0(sBq?fqe87AFv?aplSpPwHoMjMr}u>3RRiR`;0y|ufw-fQ*6#?LP5 zL2f@_xK3U5Xg$j->##Jvtb^7&>iO0mNx8RK`?Pd;zT@-KJ|_=o#(0o^eTnD`2+KGu z>6-n?+8@)0_6zj##eK+m7qp)x z1VnQA`*8oGu&V9;r=5-dtV5m`qvxp{p0z#8*)LxQ69;zeqY@Ih9ji!Og8ru1JGIMc z`>&fH?zFhn>bp|tXFW?9aK%GR=jY@i9zi*Mof2SNOYC{&sOuG${Z^?Tz=LA6v_Vh$ z%k&e)sG`rSgXieIzsu~y(3uJ+3(P(Y&m!#OURzHlyv+1}3*(Faj+05h2c;JM>*apM zWHIZlU-TQ7oWG>`Lpw2Bp1VEu`CXS+GrNi=G$#Evw!^TW4gK-{zxe+#bRo}T^h)_F z_|ke{z!2N|&t~Ho3&o$I|FJS?PiVjIn<03%EoOb!7xF#<`#lZcu?YMh`8tn$4Kr?y zFSPMUx8oO4po!b@i*xbgC7NBvE3KY9PV)G1w&foaKeFQzZ)3a_wr6j@SBvV3yr>6d zYrl2#BV}vXL-aFa%Vp!N=9gq1n|5HBdX(6Az~e#UO=ej+j<@pLc!Ph}7WNJr=j}Y? zcWDsc#KUY)sHX@21M*&~^;0TXoNMd2#Qu>Vv+Kp^(lL62o>N}`L{BwcxF1~mA64=% z`&HC`g#C&q-_Y3qP^#Z=IiDq>&HBkNRzhJuPxrIEvTjYS8~CTa57W8c zT__t(S5E_I}O`E0>SEch3_=kqa;`!~=LzX_={T{IJ!#>B;Ct`Z$_# z4ezKAr0>4S@Cb}6vH8Tz4znLG>mljS<}qEkzEANSXL!c&!?;b(;bVOteYPTy^CGPO z(=$f?E}v!iUZmNPO2NwIaU{)h7lN>&WDDv&W?RRL8 zK_Rop@7Hqt{{0W<@k0Kw;yBNLGyPkx`fu}oosvneYJIQS5w4GjhdRuDw6p%}Oo#Z- z`_2Dd5_I_l+r zJ0$%v5%umNc_5eXduuihc~JUYXrB`uhuo2?kL8!LKLCFQdwvMTOOuX)Tu=59Dz595JbpGUW|10PAP+o&m zwY*7}`|no53rxPlIxHb^`Z)5PZS^xIPG6+-!uqElZmfT?_e!spo;$^Mjra#Ivhk0X zD!$nC6!oU@AkBfu$@F@?CewJaPky?e@b55;9VcYFZ#GT{d4}^3@O#-fA?-@IKk6Sv z!K-O|^Kn8N_}KXJ^^m?F)6bc3zk>Y^XfplF)@gkw%j z?~^jy8`|}YJK!Ivm+^ztcVExf%s)&O#e63IVPCG@*QLu3y3lXbQ{y_(Zm_TQr}}?_ z@iQPy%GK{KHu}|A6s1AFmJl zhu!KQKBfAY`3KfRSl`lo(sc^)Hu8~v_oUOu7Z%cPrGCNYT~fa=pYKz@K>ba8eP(_g z@f?=R>ofHSCf9fKwa%;d$?s}?Q(6wltEj77VOPyQLuus-+g-2uhcz-*5Z8M(zu2QO z?Xw5++s6EeXWkpg6ZN+W`3LC_JU;9%KSg~XwtNy^Nf;>gO8lsY4teGJ?W3=U!~D+{p>w|6dnA8y7vsUO+|awsUb3CV!&$rPRC`JN z^ZKsHxk9i@UOqpkNY?wRyrlok`W3siWIxJZ?!1iYQ zl4RYk+VS9gCc>}hJipHqXZC5ozDIet&JaG1*~|2I$^*ILD(}tg(?RqTM0qC~zaGrl zr{{(CNz^BdUyIQpRVbeyL_LZc97?7eU;Q2A@0uoYtnh{M+<|$MI{kU6a6Z!?Cf`1* z_Ys|E+NXL_DM(|HD|ypyl}o56yI{{A*4KJ2;(oNVYY3ygY>=PeY7dCk{u!s;J^3)%DF?|XY;Z5 zio{?icIoq^yn%RZzpm^zBRsT+@9q4Ycz7qDZ?$;fT(g(6DR)0lHF*X3kn>u#o=`uG z%b3sOfU2#3tQ6`k9G^R=axJxdK=Vo5LAdZf;t?cZ9Oe3#Qz3`V`aG07>ZzfBB5>#@ zR*Jl9^~K?!r;DBM zk#w;4YEKOoKYTzQiyp9DyZsI2sd_wwRFWTshF)(~Q0VTXJs8gH#DLUIwZ1ErFDzIw zI#bK#=P%2AqP~~;M7@XYMCnzDAN9Q9C!)XGh;KA_e*8aTezTu?GPpuPL*B;!fIIk&C9!{6(L_{dP`L)y_N0_9eAydF8xD zP3PY$c=~#)QlGc89M~@PuTr0q1UN7#eV|6>21_p^cL zyRy#1zn@VmaDRGS{|MWEc_G`qonI>Rpa%cH_MY==as6`!_wjD)CZ3J{<@sI+z7L~+ z2-##Eh|)*>Q~wx%jHhQZFQNJaJK=Ku&Qi3icEuy(nR*ZPuSeRNw@W!cl=T+ad#$&i z9)E#$WBTiI59$41p%>Pp6l3D`cn$Rh_4uKNdh~vIhw5WoH+x>*#&V_h{sUG{^9Kta zBy9FRS!Cy0x!w11kJ;c-_#D$O{~qa0z(4&t=KUUaJDAlQ5EP@ca(r*f@x3v}xB0PQ zvxh!kHp}?*b;H*x+k*c~6Xx@yIzO4`4__gJ{WQ7#&iv@7Cd}u3u$QU+AH{QxOun`2 zSnh$%Ca0>R6+L@96DR^_2w-hYaxar`gox|;mi_vedpx2#*!=SlfGy$@_&N%(hQ z@6=8o#@@YE0)Vmhjys^kexBN+8s*o_-n~NP9@dlE-PKHwdRZu4ip)RUM7>Jw{T9k; z(ENdY_aPp7jB;6E?R41u$)XK>?)~LC);@FlSTp;&#_H(~^{1|Has3v9sdsVxMuVw; zvj5It>S1hgN*cF#+%v&?n@D`5aXr{@vde$Dhe;(ww%7MXmuewOeu%E$M)W_YY#haAr)*7LCA zv3gDMuwLUWw7(M{m*a%8`++|MJ9XXf)lMDMhWLkUrw&L5Z>*jAXD!z=u~R#i9NtcS zv^}&_-~J66Mls^K@PCN$?B@cxxjih&IZTLatAqcf?Xlm!uM-b_*6gjf(@zn$@9o4} zKSp@jZ`)3}9=Ud1ht^vbM|3Kj#Sv#1>~X|AgFTLzZ!qmk*00)4{*FK#@!z5+6Nw|h z`LmBB?$Gl5A-B(40zJ$6O){u1*E4CKFMXQ!`SOPLd4sl3d^e;+=oBOFEBr(910xgE zGuWYLuV?2A7W6m%aO2e%HPtga?{J$IPsgdAE?)iV>kjV+{_BL$4|JFx*sk%;@851t z(t?Hk`)1>IZr`i*$i|mv==Wk}-;9lmo}zes-le2p#gusr=|4fg5O2OnhPZsbD5Q6q zyw8sl`Z!rpzc$=B{(zCNV)Tg8^?A!?aq8bmJ&YMAsVke>Ps4Z~_&P@Zhw&@s2k`to zpXK}`{F(FT;|03kyNG%q-D;iJ#of<=@$V%xo4*BJwDI2)bfOWVI#)ft$*2U|6rVNuTuZb=5cS7bhY}))OQ)bYmuTg(@%8eeZP6Ujr_OnE$`-$kK&%e#d>E%*sFQHy~x=u+a z_D|zeITv2 zHTw?SRh^eA-l~mLWqQ}E&*Ks5M>wCmQQpLZH!{BNvUV}}W`nI=3|?!n&x60wU~3m; z+Cx8w9rF{bL|*61y+`mTn|(gX>|WXCl>>hOJqqU`)NZ8XTWhF~!h==PKOy?iOivz_=cU$9Xg!2_56WZhUy0=s|KS(BgQqL%S7jUh zJeqp;o^e=p@NTvD{apu@Zaie;ZVL_&9=36}Mf(YFwQ;v)`xKt&`UTnF!uswcx2c~u z`{RBxeSU%nN-jB{+W0!4`Llfw^ve_9XFx$U+XpUTs?f1>U53{wJ>NGF4;h`al$|vG z>dx&S@bwl;EIz9o^>f7|=d+UkL5{o0JSg!8?F4oRdhs1$BpzBx{jz;Rp`Pq8Kk*z% zi+(iXC|@7)wDPrcy~kfC|5eq4BNu1UE@g4n4%UDAy|A4Idz`h4^=s`Xi?c@bIpp)& zlSF@yq5n_T?q>d*sVA;K&El+$&oIvF&H2&CF8uA{EYJnt=ZGH-m-fm zleJq|{-9s9<7wio%PNg=_MUO#tV<s3W|J-~Nka5dQJXDF|wIeFa|$SaEz zc2lp@_-q&9G(Ou&_zq=9;k=Jb7PmZIylj5Q*SQbUE@bC; zjLom~r?Xy*k@+dt_hWnXMHp|RorLp{H;A0_@k7btvQSQq@u!~)Mmsh(o}<0X;<*u( z%T=8(CO;$O7wg&%pxv$~410kODOaKneGoqXu>=AY{VJ!l=WT4ySm(1*Qp!F-t>=n- z4*~M`G$awE?}8WGR0ony>VdwG)l|%nmn+`_QhkbsO{pqqi&iC>|b3 z?fDO7Yiu=WckpM$=weOidJ~VB-I_ogcutdgd?s<=nN9MSbQM+>2fDv4M(@%34E3Wi zzOr={w%;R*Td2-?yxkTf&g=iK>QCYp+R>o?J{r_trSM$F>-EL7 z<7vBniSi#C?B$kqMNDV*2KE70G2*=)YY=Ov@}Prbhy#*6R^NViE`+1Pl|{9>mhkZX*6A2dHO&U>jRm20Sv zC}A-=Ps@?+m*6nA?2qVHI;GY#)jpM4U!eX-)}QJ=O4k-jYS)ZeLAupsyz1%JO=>Dlx;J(ddZ6En~(@MSj`A)KaN8vC&+9U!D{h6NYWc>!v zS!s0kUm@|&!yI1>>;K2_PlL*~u1h*a{2}sPZ27(|`NH%)pl5Om@qb;?RgUgdM9>=< z8WDXX|M51Kr>I|*VEYpiqG!}|ANMXsoYxKM?GU-e(-^14$H6O#pFI9#y~oEg{*iHO zZGZiXHtF5JGwk09aryO^_pAJ3`_5KU{*l2On6LZ`gBkzIJ|%npls=dJDWqfj`})h1 z)DNJ%@=wOW*-nblpDBOIn-*)naQ)@FoV-<@RZXt_X|J!p&dL1-^nZeSLcN9c^dY1V z`b+JgV|p-p%~<>o=kRNs-K1XYlCISDT-DdO&hq5z73;zu781pXcFpaEj00%-0i(X< ze3}%dybdbt-_MfuWeR&eg?jKK*qfmI;5XF2yM<5ZZ=igo)=QYbg19os4|#_2yF>EB z-h|)H5<8sMFC>_h=?A=?^KuC3p}mLn_6z@@w@dJ#-QOhiJWeeYK4o$0ex;Yi&yRs@ z!}?eWGepj7^m$yTJ*iFOK%&dp&j~8pxn-4>cJ(jMM!tQ|Qoc(iKgLa$iTy}6n?E)F zVPBy?W99Ab=_~3h^6kva>-rM+cTg_l*k8!KSI>W8++8WWmg%?eRk_C&pUQa)8n1-) z2|J7Yd%lDI@h0V`RCpcR{btrf-fm0WuIXwVo{t7L_b43Kp#3QCJcD5^0l(N__Jfo1 zg$A>~?&~*EZl>ornw&$T=|n&6PX0pv)y@R^kMcktI|LER^;c3qWBYyN3w{tJ$krRV~EAJ>`R%j4q>X?g9taj85~drf(za;%%5 z^znHi-y;;zkJRybgMI&;*nPDx&DJxjA01Nmbiaqni_J>>)JDx04{y*r36#a2Ow+EKl73`TpC`eyab>`A7F-mBL(`A7}hsYH@n(my`;# zlpg9A^#*=lEhT0wk2W4F-z8#sY+P2(1te^7f4p@Q<@dDvpXjH<@^aqa z@=sGX()ggLr4e}!a-CMTFZx5|)6XXu9wzMP6Ks7i;dEa#@lSO9rJrM2Do}4_UzV1y zBHwdIL>dnsRJhc_IK$7O^nIP7d}oM!J-&rKljfD~%PU47(e_cT_o!Vd6`sfTRNtp| zN9-QkkFU%1_Eg_v@2x%AIF9ezeYC~mjxM*8JYOx|wnq6bMz6N|zD((6bS^R2+O3U? z$$mKF;~aa>xGFr)VmJKSJ*+?I)jx@*kRiFPHBkV&MSr0?AM!o{hYFRs88h;+FSP*qv~(mU${KP zpvn~wT7SB(p!PdqcOaK9$UZO87cF;YS5|4lW^^v!C4R}yO*DuU-7&H&({#| z6snE(*THG`+sLo`za;|VNu|)G8RBik6R)1HaI^IRJJ7EbHaFz@i;tF2{vFDPmp>ld zsc^Dh(T#f!QM{UrHlw%2=xxc-+phGsG|)qP#uX2ZkZz~J^LU3{L3xwo?D;(+Fu78D zW9O{oPb0Qr#b*s7jZ2iZ^R_wPy$ zu|Fl}wyGVAhuPnf`3%BapI|wcF&>Mz5dTE&x9l&ZT}}PQLggbKa=+pJ%l(G=x72U2 zeH9}<56e4Kisp96%bWSB%al&$r!G-AJx6EwrG!&Ibq?X*(oco;>2~GIqd1T6bj5q* z<|z+oy(G&b+B0jf(62s`ho3JBJ^HkSf^yD0>v0YBFgsr!y%cH3LweJAYOnN1A>WCv z@7kGbFI_KV90R`!J;i+@=g5OD_}%(MV}ER)JeU2ysz0T|32aw)9n|uK^OFbB?_SSx zBwg$$!0+#qN5K2Hmp9tGcBH?J>BDq8C0(t~^Jd~f%D2)Y1(B<$txoi9g!EzWVG8`a zw4q+ga8WSMeK)d;T@s@ySK|A5XR|(%WvyDicqZGod_RD&_*_lD=pg;P??-x_<;(3y zDn_?zdgrfF__3}Ztft=`^?AZcnl9v5$KBHTsGEqV)}!~Ze+;=nob;qLZIyhm=X-Mc@^50u;t`HJ`?}G?t@Cm{xn*Cd7hWy~tno1GKRb_gD&?7;$7=Gv zI4AE*lzo}U&B=S*b#`O>3sS_O-uXT|Z)%s?fw+Y#xnv%J;QF zZ!mQ(=R>JJS7aU^ehhX3?I_>g@Ek2~z|Mb)2Yvoz5A9xEUdjc#=X&{fV$$3{`n;E) zJC*uhHbe9qXcxzwFIcSd3)_hlLE10*2OV5;PL#?sTaWZy$~Rq)G>LG!9_cBz=V!Ve zX+7zUDTmo3x9fNh*4*wEqw}>K>G#>KotKU}PZ7p73gmF>)jlA0afPJrkpDN^y%N1Z zeo4K>kc!+b&VgOTRg5H)T#%FcfeD=B*DeX6Cr?QH8`_-?dG76~R5(q`7ux^%7)M>N z?SBTrPc~OoNKyF9NbJt^E&xhxY_Ijq`%lyk?)wk^2z=ed<^PzeP zvv@L}GN1bC{^dL=pj?T6XO`?V^>YYuGrlo;fOfn|_4{z^9~%9m+2QnjBeTzT{%ROk zq5dHM3!Am`AkK!o6VtbJ9x1R>&@;$?qH)gtoZouh1zDVv&Ksufs+)2+opSW?w`S|S zpx4iYk7!v@apMo<@YG8)KGJq(>sk)Co*s0Of4;<9?vF}^6ID->yKJ0eJI9~mku9_z zb&`gCL4J>)M(^YEMoVR+eM`?9r@xbP?G$gR#p61Tb6jxZ>59WCQ%?+Vt_uK<2pYC~Y7f9gy-l_M|v-B2u{z}UaHI9_= zRpoDr;k~Yt>1G$ce+cr2{sI5>_Fl$KG=2BX4Vtj~UdF+rmM{Hog1nWiGCuH4(y{e5 zQ|4(lJrBG?eqL|+Tu%PIQOtAWy^phXUkGf3^)BT_eYpMg_S(IE9bQM>o9@s%#s+bP z@&cxk9GBA}_hQ8Ht$2iTa6YDZK9Uu`%Lnd%lXkOjmM-4T_Eo)CkjhnRIa8;0i`wafB-hKSp+a1n5g5|B=%l;hZZ$ue^{A@g`k=t8jIYc>3qEeyX-_qkk^>>~EI< zUoIKvBHnh^Yg{M3q@4pxah>>F-%t;Tr?Yrrt`+IVB`>|JKcH7sNg?4^!F8zZ|(gSaAF5O>+>8!p(y!rHZhv{!qaqIUA zm*(&eh3VEaU5GcIetno;d=#!xtJhIZ%SEN5y7YPccG`K5o5!xVVZDdrGaIFyAYPd0 zdYhGRC@L-dLA!eLC7JwF|1p8M9CVTYo!^9C->CImvGY>1ad)4OVcd|-$86E`&E{i% zED9UO!Em9nPf^pmT)?N0KjiUTXh&Ab^P+ymmi7XEs2H7y;)-8BNIXN-|M)f<;4nYV zuR*zXOOwmfiw9R~{_*H$=c&mcG3ZS*yWiDEy2r78lLbo&A8&SN(PF~KYBnkFLee?i z@}F<{F17TgH}N%u;V+b4mHGX<;44IUA}aAGkfO*#+6jK4e7i)>9v{T^J+s)p1K{K6 zavnDMu=&O0u3m*_+@|QF_*%PPNB%CbbNEAfVqPR47rMU%AOHTh@}BNi#(jw2(>wp! z_XX!FecvzR{%(bo3+0q^m-W4`a|Hh0KNerOiF_g+*eX9ut!_Vw&*>rkW7y{aWO6~z z9+o@ghDY5~`2sL5;FIDVsvO1VqZa4*d6c0X&|Z)pH3m8-oJ##v`|R~;@o1@qZPd$O zY9YbczSk4hp>c~w|rLRP%7|z*9;HWrTRM5^!(?eW@&liGlVg@T<@FpPo8N% zsXf;}SsBO`9as;rG(S(<}D^XOnpff zu|GUsd|!-at6acuW4~e!l^(gOG-0qCNjr3-i{zERf9u@we@z8TT>K>q6yE~b% z`!-obE0>R7dH%{|>z8b!e5M%Q>uQ=j3i~C9sIIs7@es??eHQI@_wB?#V@pe~*`PU2pSyW8%vW`gn(eEk>&)C+#twOvGNm z@4(K+-^kimr7%tFv1)cATQ5R?o5d&eL(Srof0sHQ6Q7t|;DZMD=sg>MrJafEeDC&J*7q=d;d>p;Ci9tDcm z?tWVb7;ocqA7_*Ehly`JsIfk#oFe!p(~y^1C+Tw^?{J&*8VUsA8UWI=Z*H~ zRxMYpzEbN`*3IkvaCQjx1^RU9w_u01X!=s2NAV<^I~0CY#+x9y5(b{+^7TVL9*6ud zlyZ#nbyR6H{WU)wru$__pcnTjy2$;Pf42enKJyyU*R^|DjeeMs<%O{(sHu>GI=%es^MmLHd$m>TY2k%$9p6oUH zt|unnR8Lrb_hZR8dLrjXC?m<*9>tgEJM33pcJec~^Wk{XGqvLjb9VegvNafbCe7-Q z$LCo;ll`>PQO~D+IO=&i9^vZ-u`aYnO6v3Tu*W^)d@ufs(%$oNWl5v1vGG|^sZlPW z{c}GT%G3ALzeiLpe7*_mj%>ao8|UG;b2iSihV`9}^Qu4agDWWHokAIp6%;dI@>eS|Z-K2Gop%3E|4m-oZnet3BR>w7DA zB{zScbg{o!t95C*^gZ2}j6>OY!U7v-xN*Lwi!aif?$^`uO8kg>G5WUhRU3G{CaBex zGW{ybGdZS1%Neig(C5i9a}74VIi`nlu8sna>g|}oA+9Lm;R`!RB_XQE}<%7&$r(C3;Wiabwp!}Z(vt9KW1>R!8;9} zt9Ln<-{2mDM+~NZr0WUnyENH;i9Soe(b6x~`#`y@@(Jza9{8(46|c5W*sIVl!Y`mc zp$f1|{~{qq)z;UQ#6G|T7NfT*g3;LUNPOETKSMh1U$%Wh@YgM!sD<0dYvg%+8=vRj zi@#9*VV~Td<0y?V9m*l+CY^MBu{tD?9Al-K3OZeAwFzz8N z`xH|8J@N?Yue^-@c3lt$_&zP~FZ*{UL;5=)->r_9|9JT+i7aGY;$zP{-M}<9YEs^*{NVY~-+1!dc>a^Oyz86Iz8`^l^?D2S3FSxm{sjIwkhkig$vdpS$xZ4n zw(s}=kAzZDxc*J+Z9O=X=lAjsz3GvkNPo(2S#Q0~>g{&JAJp4TT5r9%db>aqHmkSe z#;LbRoIFX%7Z_W;VY7yZ8fYIU#DnJh{qMQzY~e7^wWq#FZ$g*@IUp(*Id zE9w8OQazXXKHhB|cIBv}wcW+1Df$MykayTFFOs1d;DcT8aX{Zcm5w8vKs?3huar)8 z@JA}IY+n8eh2>ljy~o2}C!Eg9e}(WfoR@DV|B}er=Sj2khL@6VdQSUdp$ zVE+N-*JS<)`FuRE+5FQdzXE(4D0hz!2Gjz{X1nCVLKV7YahsclYgD`%`m#oWIKE~@mr{B-svQhIr`+2Ve zMh{j+#+!a`^InYeyKm#XiTA6=&U>+54ma;5E$k3awQ4a#4PYkofK#eshKIC`j0`Sd3=OMe!qi;ouk`T4BwFule7 zA^v>&=Y;9mZHWAP$-d9p*X_iw<9Jeh#n|zrHE4I&kgvq-9op{;zl-)p{Vf&Fu=doh z^6~N0GBACp7?69E9w4`Uc~iH*vEsGx6RR&e#_h5to~c(+len)Uvl08@zhyg>32-+d((2>g1slbq`XGq(P1J+|6TQ}MtF=oOoX7@BIlwP zBd#-C-u8kBBa_S9ZrAgDN^RfKbtvF_yR>S*!1sv)INzDvt^D>~!PwSCBi(zR1f9Lg z=km6$NWxj6bDNI9mfF6l_~M7#tz6XOf$}DUpP5{ewQDGkIypuh^-xZaq1T}v?^*;s z?$vxA&u8P?yNPeB;S*7)e5-_GTaObrDffRpj&eVy`Iony9ZC2t=k2^kPLQKM^ycIW z%j$APTqyr!ofqwfe{Wpc?E!f#-{+-WDMmLSnaJ~{+8#=6R}`eXC*|o;x<1ZQjCN}} ze3wM=T7Jk!#3B6;vrkq|-#2r(^4gbhrM4>z&~oU_p24(U_{kSpH~z{j<+f4dmHRrxQqZPj^%QrpLL zT{QUrX%6oU!Q=ct)ApLY$@KCWv{PY0>Ah3dn-%5M6O^OWwnObkscmP}A@JCG<^b%G ztmn2*gMOdU|7%^}1o_;Yt6x}7m(SDHFV@T8Li+xLz|Xk9)bkW&$~7nFXP{?ZF0@Nr-d^OpyV@R$(bx5PsqGY5;Y$5~Urv8u z_Z*LptHZnX$n$~n_mq$Dd51i|zRdnz|6Tj^y{v1{_;R4kGxjn)S@~&)!gyhy+7a3%AGgW$ zpo9F_JgTpM0RHF8xx}(hTHlx2A~~Uj^80d5ze4-r^`G%W{)!O?`sKUUvh$mGX5{Jt z_A#voD{tOD_;$iK9m zjOV|`>dAc56Qdu*5hwo~^uL(We}0aBXn%ee^k4i7&>v0de>zuxpZkKp^g*})NIU(XY3Y6sWzeP{=hSBXB`cU3d} zdUkej^jgw^+;8|Ej9#45`-@zC&IssDxZL^pu}b~P`!AH^CbidR zr1W2sD{n|YD^H_7xqgQBVX5{TPfhXu!&8lZtRpDbczE6ahjHL*6z_2<-tXn~Htct1 z{_%d*i!2Vh+hC7_?l9Qnpj#C7IOk@uPvE!T`q5SMm;L2;Yr1NkacRHxM_n(%xCi>@ z@!&IQ7c=Gi>+*fb{}uAuUwUayKSF=v{O0S~;}q2QAN>mWeyI44Wc+`p?7t~SoF8_3 z5ZeE}%Pg3ea)6I_yew-+&C>76rGM+wq(6{Le`}CFS+@9pAU{7RDe3AX45K1f`~dG^ zeeD$g=KBr7@0k)<#v?nKug>)7SBxOtHH4Awbfg;`(R6MXL@!id!#E1-fZVUae{={6 zU6q9lXu4-#PVyz|0~H_UXYnQXVuW6m@V(v2d9yGGxW@a~ zb+*EkT;cpEIDj^YOl7bfZ4@bw#DZM-_%#;4g~NUn>lK z0Sf;<2;NK8%Q~kHeP3y5)p9rcP9e$xJ%L$PxL%Duh+D{egf;c7;ymI%P0E@RZpt*_p%)2`3l!Y-lOn!^@r@aweyEn zygDw>EAenRUOkL(%d|3*I& z(BB~TH>9t4o6tW?@WyrHf5iB2m2m*^*KRkO@$&-77xMjOwA$`Rnwsx4Wugo5N!0Lhatkm{8W#ncNlN2RdB6kRAcFR>d zu6()(tw&&4Z>#u6*_@*(_i46B=0Es+h%nZBJuc--7Laf7f&8c+T*(6RU)0(N_Nms1 zCmy0*Ic463n%?(~JD%F$=aio8v(@`-Sx1fWZ@0VH4+*ap%6qr)sNrKhHJ9gZ4gUJ=38)f+`xII}rJ>T;LPW<@+JZAC}2?2#ocwc#iQJ zjJK3pxGvEBp367JAgNp--8Ik`Tjv2g^O|YG=e9MJd!6Y)cO}wYLm256BHiFhO_$X_ z?Lg@FRR3$thjMkuPvnQ+b3Y{K%BlUS6gclNyY)C7PYn4Chns0=OchWtb~?z_sVZ}&g>_(erkiJ-zMiJk{&NyU%RJq98K2CYkF^wh!q?~o_1q>KC|UE~+}@ygHXD7Eo?ofXnvKp*W9@8fO6 zSG0YFqci29Tq~^o`To`^5)(0zBxLt8O?(?%qw^Y)3{rma_Uw<=O)>U0DC?U7k%H894w8wS1_H{zgzG_Cd zB>OsXl_c(lT!2TiO22QH$(`~~e1Dytuab0)@coe0-+~>4hnX)~v`OLQybi%8_37*M zt=|1SG|&TGuWv7B&Au0q**C85s?|`tQjZ0$?{|Hvtp?XvSI_bM{xa8Dh3oq6N4*Sc zGW8Rm3hD`RpCzv#?@qBjp*}1`I;*!Z-N};9{aS6n)dF9FxboexWQK5!sirrJ%XQtMalM6Y|!_y?Sn|aM{4I)$oGHvp3PP4 z#VX>fE8Ds+c2`brzMg8cUnyvw9pUvIsIupZ`0Qi>`>EsHhmB4?}=A7)-%eLl;CR^6qt5CY)5%LQagD*(}VBDqEGIJGrjt>;?3LJ!`Zz}IlH&!rCD6zdQ|i8hpm~b z3{*`&aGpC<&gJLpPknu-oQJIZIDh`$^#y(r?Jq31OxNrB!xkx@oRg~gaZX8x(ZL<| zdg&V*$BP~c`1XC;X}g|-(Q34F5u9Af9Q3*YTYb#IY6^jcCaz>UxB`9hKQM>(Y2X3c zt>jMHt!j;qeykkWp8b60to(cqeSyY?<<|OLtz=a%|3g@HKZ<=|9rDWUo$r6l$|sYn za%JVa$Y3uYT0vMoXzStqQ?%dJoSs*8i_jI&td%*AY(rzxkQe|I?5B_Wu7>#-CJ}T*b)! zKlNg)|CdE~a*gr-fn464lRx}_XopV|yIG6htazX&kc02rV{3&Sy+Pmmxw#cx9f9Y6 zX3uF)ynT3F!|d-%b`;6IOfkaUB%+{T5XlV zS-cK>@r`Ua@_hq+U#oe(etSGT-zu1X*Zw(KuusRcMlV&iqh#4$g<-dr$^UpOVV`f2ewDs=z47$P zqCNWD@imLvpm(8t)cD-&Y1mFb{0gz(Rq}&)ccc7t{~M+ok#v6Um&7MZ-{+H-cL1nsln|A_Zi%w_mI!U;B(OUmUaYt6!Lp-u3YeRVfy_x z9^Na@A%C2^DE(8)b@~QHEd6AI*BQ+E=%2nu;eiKk)O&I#?Z4}#e}A@FoHd@`+@15A zuYO4uXT>$rcR%QM)%{Ose-Iye{h?gnko`o5i<9={=-wF8wexIJ`)K{nERGNYa%FK6 zq%5%8M;~XhxCQZChrAE@MO*_ucPpQ4pUvXAgE>C04)_f90{G*>ebgU(BuK7g9`EV7 z zoHz0Fp)&crPw8dy;Rs2lzwhMxR6cK2*vC0pgb_I7RJF-bN!DmNr(+SmulB@ z5P-OLqh!L}#?yQ}#@8#9u_^_t;bri|6g=)XTeZWYc zbRDE!wew& zeFga_uTebSFOzW-gJ}#Utv2vrh(4R9Gx9GIwLtcTMS;PdN?rsD5)LTm&FE) z16Fvc!NQDOVcakYaA4>9EI#a$q_9^DFQNTKKDWQAU$Fk0&tG6XZ9Km)H|H0gANU2I zM{xW;Zapxa{JMV_n9lOJ91&lj#G&0r90Bow=Se7j zFpk7|z|4PQ_EO%b{*(0(@;Ou9hkU|MfX@xeC-oKIb?5*dJI5=dFToF)j z^8&&teNYp6dHY@0$2z{_ao8HAzgOi{k@>Fb0NWJtxW0XW)>@|9ZYp%MWUe<-Z+pQ2rf8f2q=EyQ{Q( z(&$^eOX9bu|S{^a_)~-|fpHzGq{f`># z^dBLd(g(Fh`kw(D(BEkE=PUh9Cja*seY0;V{jVv$jQ*DmcKVMKPU(YMBmM6H4(P8l z`g4{32BZHDqfh&p>Hn`4Uq=7u20Q&95>DxZS|fe+CjtFcM!#L@uQB?G(O;F*zmp2U zm(f4YV5k2a!YO@FYoxD!rjDmFzb$Y3jDD-qUupEOH~M`!`Y$2=toOS z-|X{+ON2iVs!ZlMmX9N(=UQ8Q@A1EngN|-fHne=OBR;O_^WT^US$K7kiR3TJ*?&%> z{;kQ$;q|@J--s4#o`!Xhk`C(^e-o|~5x;{XwTtuI7|_A_25SNsbU*Q;tpDSDqW&Qu zAJ+)m#Y*rM_+uY;f1U8J>oH?^Y+gQ}9_B~6 zK2MR#-Oi!(c?9Jn@So{?f}M-u=kUboxu&#lA$_#}u$-tz$O|!mf6v0t^PgdUtkfcn zMXv4>IKCU(esfFEPp;m+`NFK;AO``{ z`HV5;7?PKAVO<@{fpr&>MfL8fpggYEv7h&0`t9X#{Z8A>d5Sh&9|HM2Ao!O^@wMF? z4Jz4uRs0r7AXl>XfYxh#vx2&xNZZL31~Z#{_vAEvFnSZ8PceG6Yq|e%RK^Bztq{Fd zdD?w>aYiI;92#BD_t+_EOXM~~{@-vL87S(iFKL$n9$993 zsCM1|5|69{QapAa-I(E#Zg+IUz0>r;5~1^Q`L#m+Lo@z(o&1q&iPS^G^Im-{?OZA< zIyRc|7Q()Mu_WtqdgM{E_Mp=DbqJ4A-DF(;xtam%|F!(Rmf!f7{RWzEiSP@$wLY## zK)J=#W&Bw=fJe5grE)Ar9G4%JwLZ8?Z4#8qHEMiLF~z7|Vf8alU+eb*8uk5j@^?Ak z!`^89EVlZQ$C}>mqh?YduNm?T^E1$w8)SYJm#LIjCKR46omC#Nw zbu}vgag9E}d!SnS%wJdbG=5w+j(koOK2d&L?pJ)CGq!VC@Hw;AUs$7) zbpGD^@v_cY=`E3Z!w)&nP+`bv7wFCbcFA|N1UGV}_G!6-QEH#gBD_NQ3GKsjnYV=e zM_OU}uF4uVWXnZ>)6$U$G zafz?rD^2>k`j4Vw7n>ler{#1zV&yGHtY`OIwejr89m<~KQ9F|6{{ia*##1i$Q>niQ z^aTB!X6@)JlGo2M!}lm~dA)Z}pJy=juhPnP7Pim*z3)!_zzreue;}oA{vZ)Jj8b9=LfqUPq_|nvv%d{FTI=> zOg~-UyMKoqd*q3qpXdAheBHV8Kd@f2={jX_;_bE@fu~%)4%+SURVO~F^);US(Ek4s za`ScKCby!Tk^+2gpJX4K!pSr|m3Y+rgRl21**X50Z^GsE6Z(mHB1@l-_VE+hzoK~k zJ6FxVyV523Ec}rE;#hms2YsM8Be!oT*NHCyy*|Ycdjbi?57Qo2tk2>7gsgn@TPQcK zqQ+}u<>2LadBlUXo9-VESDvYmL;C$To&yqBNv~A+59Qa_mASq1{z$$aQO+q68phkk z%4IL)at-k!-7!dK>*u_D{bj}x;eHQo?=|K_{dLGs*kT$|N=-HNQ zq@i37q;$%Hzf}0Fo+oxB%CoYeJa13wh>8oHPp9WZJ=^lMHk9X3M5MqC9gO%Cpeud^PIOay=1s9-;E=Z>S%Rr||?$9N4iq5_k_b=r2Y@j*Ok$)F6k;ju_qz4R|j+VtAJ}$d?l$M?$^} z8}MRu^2o^dU<2NcBZhZ>16~=_l

    yVP}J$9dpF+js$pp{xY1$-GhF3r;!$ho)6eO9mb`K^4#h9crV5YIt|akmj~tYahd7zQZ64K0pCkNPjKM^ z{B0>}Nly`%af(Y*Goze4|4)neS zdNwcPbbZ_<9TzixYMqinE(}A0LdX~7RBGY;rLVX1_ZWXyd5iu4RrkzOE#h;5o$~?^!R+EV-`ksWhNi1^%+~_`Or=4IvB+#4B+nb(8*ggdo;Sz?xrV?3W#(V_r|>f#tqiHq|@iE_T2SrZkML3 z_;ZDz&mHgau>&≤+X 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 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF j5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5*Bp9%aI%(htv diff --git a/program-test/src/programs/spl_token_2022-0.6.0.so b/program-test/src/programs/spl_token_2022-0.6.0.so new file mode 100644 index 0000000000000000000000000000000000000000..0638fee19500c94582b129ff24b882f6aa4251e6 GIT binary patch literal 395648 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

    Z|RihmjWIFSlL$J;QX_ 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 "mint", + | AuthorityType::PermanentDelegate + | AuthorityType::ConfidentialTransferMint => "mint", AuthorityType::AccountOwner | AuthorityType::CloseAccount => "account", }; let mut value = json!({ @@ -603,6 +604,7 @@ pub enum UiAuthorityType { CloseMint, InterestRate, PermanentDelegate, + ConfidentialTransferMint, } impl From for UiAuthorityType { @@ -617,6 +619,7 @@ impl From for UiAuthorityType { AuthorityType::CloseMint => UiAuthorityType::CloseMint, AuthorityType::InterestRate => UiAuthorityType::InterestRate, AuthorityType::PermanentDelegate => UiAuthorityType::PermanentDelegate, + AuthorityType::ConfidentialTransferMint => UiAuthorityType::ConfidentialTransferMint, } } } @@ -637,6 +640,7 @@ pub enum UiExtensionType { InterestBearingConfig, CpiGuard, PermanentDelegate, + NonTransferableAccount, } impl From for UiExtensionType { @@ -657,6 +661,7 @@ impl From for UiExtensionType { ExtensionType::InterestBearingConfig => UiExtensionType::InterestBearingConfig, ExtensionType::CpiGuard => UiExtensionType::CpiGuard, ExtensionType::PermanentDelegate => UiExtensionType::PermanentDelegate, + ExtensionType::NonTransferableAccount => UiExtensionType::NonTransferableAccount, } } } diff --git a/transaction-status/src/parse_token/extension/confidential_transfer.rs b/transaction-status/src/parse_token/extension/confidential_transfer.rs new file mode 100644 index 00000000000000..44384f119318f9 --- /dev/null +++ b/transaction-status/src/parse_token/extension/confidential_transfer.rs @@ -0,0 +1,408 @@ +use { + super::*, + solana_account_decoder::parse_token_extension::UiConfidentialTransferMint, + spl_token_2022::{ + extension::confidential_transfer::{instruction::*, ConfidentialTransferMint}, + instruction::{decode_instruction_data, decode_instruction_type}, + }, +}; + +pub(in crate::parse_token) fn parse_confidential_transfer_instruction( + instruction_data: &[u8], + account_indexes: &[u8], + account_keys: &AccountKeys, +) -> Result { + match decode_instruction_type(instruction_data) + .map_err(|_| ParseInstructionError::InstructionNotParsable(ParsableProgram::SplToken))? + { + ConfidentialTransferInstruction::InitializeMint => { + check_num_token_accounts(account_indexes, 1)?; + let confidential_transfer_mint: ConfidentialTransferMint = + *decode_instruction_data(instruction_data).map_err(|_| { + ParseInstructionError::InstructionNotParsable(ParsableProgram::SplToken) + })?; + let confidential_transfer_mint: UiConfidentialTransferMint = + confidential_transfer_mint.into(); + let mut value = json!({ + "mint": account_keys[account_indexes[0] as usize].to_string(), + }); + let map = value.as_object_mut().unwrap(); + map.append(json!(confidential_transfer_mint).as_object_mut().unwrap()); + Ok(ParsedInstructionEnum { + instruction_type: "initializeConfidentialTransferMint".to_string(), + info: value, + }) + } + ConfidentialTransferInstruction::UpdateMint => { + check_num_token_accounts(account_indexes, 3)?; + let confidential_transfer_mint: ConfidentialTransferMint = + *decode_instruction_data(instruction_data).map_err(|_| { + ParseInstructionError::InstructionNotParsable(ParsableProgram::SplToken) + })?; + let confidential_transfer_mint: UiConfidentialTransferMint = + confidential_transfer_mint.into(); + let mut value = json!({ + "mint": account_keys[account_indexes[0] as usize].to_string(), + "confidentialTransferMintAuthority": account_keys[account_indexes[1] as usize].to_string(), + "newConfidentialTransferMintAuthority": account_keys[account_indexes[2] as usize].to_string(), + }); + let map = value.as_object_mut().unwrap(); + map.append(json!(confidential_transfer_mint).as_object_mut().unwrap()); + Ok(ParsedInstructionEnum { + instruction_type: "updateConfidentialTransferMint".to_string(), + info: value, + }) + } + ConfidentialTransferInstruction::ConfigureAccount => { + check_num_token_accounts(account_indexes, 3)?; + let configure_account_data: ConfigureAccountInstructionData = + *decode_instruction_data(instruction_data).map_err(|_| { + ParseInstructionError::InstructionNotParsable(ParsableProgram::SplToken) + })?; + let maximum_pending_balance_credit_counter: u64 = configure_account_data + .maximum_pending_balance_credit_counter + .into(); + let mut value = json!({ + "account": account_keys[account_indexes[0] as usize].to_string(), + "mint": account_keys[account_indexes[1] as usize].to_string(), + "decryptableZeroBalance": format!("{}", configure_account_data.decryptable_zero_balance), + "maximumPendingBalanceCreditCounter": maximum_pending_balance_credit_counter, + + }); + let map = value.as_object_mut().unwrap(); + parse_signers( + map, + 2, + account_keys, + account_indexes, + "owner", + "multisigOwner", + ); + Ok(ParsedInstructionEnum { + instruction_type: "configureConfidentialTransferAccount".to_string(), + info: value, + }) + } + ConfidentialTransferInstruction::ApproveAccount => { + check_num_token_accounts(account_indexes, 3)?; + Ok(ParsedInstructionEnum { + instruction_type: "approveConfidentialTransferAccount".to_string(), + info: json!({ + "account": account_keys[account_indexes[0] as usize].to_string(), + "mint": account_keys[account_indexes[1] as usize].to_string(), + "confidentialTransferAuditorAuthority": account_keys[account_indexes[2] as usize].to_string(), + }), + }) + } + ConfidentialTransferInstruction::EmptyAccount => { + check_num_token_accounts(account_indexes, 3)?; + let empty_account_data: EmptyAccountInstructionData = + *decode_instruction_data(instruction_data).map_err(|_| { + ParseInstructionError::InstructionNotParsable(ParsableProgram::SplToken) + })?; + let proof_instruction_offset: i8 = empty_account_data.proof_instruction_offset; + let mut value = json!({ + "account": account_keys[account_indexes[0] as usize].to_string(), + "instructionsSysvar": account_keys[account_indexes[1] as usize].to_string(), + "proofInstructionOffset": proof_instruction_offset, + + }); + let map = value.as_object_mut().unwrap(); + parse_signers( + map, + 2, + account_keys, + account_indexes, + "owner", + "multisigOwner", + ); + Ok(ParsedInstructionEnum { + instruction_type: "emptyConfidentialTransferAccount".to_string(), + info: value, + }) + } + ConfidentialTransferInstruction::Deposit => { + check_num_token_accounts(account_indexes, 4)?; + let deposit_data: DepositInstructionData = *decode_instruction_data(instruction_data) + .map_err(|_| { + ParseInstructionError::InstructionNotParsable(ParsableProgram::SplToken) + })?; + let amount: u64 = deposit_data.amount.into(); + let mut value = json!({ + "source": account_keys[account_indexes[0] as usize].to_string(), + "destination": account_keys[account_indexes[1] as usize].to_string(), + "mint": account_keys[account_indexes[2] as usize].to_string(), + "amount": amount, + "decimals": deposit_data.decimals, + + }); + let map = value.as_object_mut().unwrap(); + parse_signers( + map, + 3, + account_keys, + account_indexes, + "owner", + "multisigOwner", + ); + Ok(ParsedInstructionEnum { + instruction_type: "depositConfidentialTransfer".to_string(), + info: value, + }) + } + ConfidentialTransferInstruction::Withdraw => { + check_num_token_accounts(account_indexes, 5)?; + let withdrawal_data: WithdrawInstructionData = + *decode_instruction_data(instruction_data).map_err(|_| { + ParseInstructionError::InstructionNotParsable(ParsableProgram::SplToken) + })?; + let amount: u64 = withdrawal_data.amount.into(); + let proof_instruction_offset: i8 = withdrawal_data.proof_instruction_offset; + let mut value = json!({ + "source": account_keys[account_indexes[0] as usize].to_string(), + "destination": account_keys[account_indexes[1] as usize].to_string(), + "mint": account_keys[account_indexes[2] as usize].to_string(), + "instructionsSysvar": account_keys[account_indexes[3] as usize].to_string(), + "amount": amount, + "decimals": withdrawal_data.decimals, + "newDecryptableAvailableBalance": format!("{}", withdrawal_data.new_decryptable_available_balance), + "proofInstructionOffset": proof_instruction_offset, + + }); + let map = value.as_object_mut().unwrap(); + parse_signers( + map, + 4, + account_keys, + account_indexes, + "owner", + "multisigOwner", + ); + Ok(ParsedInstructionEnum { + instruction_type: "withdrawConfidentialTransfer".to_string(), + info: value, + }) + } + ConfidentialTransferInstruction::Transfer => { + check_num_token_accounts(account_indexes, 5)?; + let transfer_data: TransferInstructionData = *decode_instruction_data(instruction_data) + .map_err(|_| { + ParseInstructionError::InstructionNotParsable(ParsableProgram::SplToken) + })?; + let proof_instruction_offset: i8 = transfer_data.proof_instruction_offset; + let mut value = json!({ + "source": account_keys[account_indexes[0] as usize].to_string(), + "destination": account_keys[account_indexes[1] as usize].to_string(), + "mint": account_keys[account_indexes[2] as usize].to_string(), + "instructionsSysvar": account_keys[account_indexes[3] as usize].to_string(), + "newSourceDecryptableAvailableBalance": format!("{}", transfer_data.new_source_decryptable_available_balance), + "proofInstructionOffset": proof_instruction_offset, + + }); + let map = value.as_object_mut().unwrap(); + parse_signers( + map, + 4, + account_keys, + account_indexes, + "owner", + "multisigOwner", + ); + Ok(ParsedInstructionEnum { + instruction_type: "confidentialTransfer".to_string(), + info: value, + }) + } + ConfidentialTransferInstruction::ApplyPendingBalance => { + check_num_token_accounts(account_indexes, 2)?; + let apply_pending_balance_data: ApplyPendingBalanceData = + *decode_instruction_data(instruction_data).map_err(|_| { + ParseInstructionError::InstructionNotParsable(ParsableProgram::SplToken) + })?; + let expected_pending_balance_credit_counter: u64 = apply_pending_balance_data + .expected_pending_balance_credit_counter + .into(); + let mut value = json!({ + "account": account_keys[account_indexes[0] as usize].to_string(), + "newDecryptableAvailableBalance": format!("{}", apply_pending_balance_data.new_decryptable_available_balance), + "expectedPendingBalanceCreditCounter": expected_pending_balance_credit_counter, + + }); + let map = value.as_object_mut().unwrap(); + parse_signers( + map, + 1, + account_keys, + account_indexes, + "owner", + "multisigOwner", + ); + Ok(ParsedInstructionEnum { + instruction_type: "applyPendingConfidentialTransferBalance".to_string(), + info: value, + }) + } + ConfidentialTransferInstruction::EnableConfidentialCredits => { + check_num_token_accounts(account_indexes, 2)?; + let mut value = json!({ + "account": account_keys[account_indexes[0] as usize].to_string(), + + }); + let map = value.as_object_mut().unwrap(); + parse_signers( + map, + 1, + account_keys, + account_indexes, + "owner", + "multisigOwner", + ); + Ok(ParsedInstructionEnum { + instruction_type: "enableConfidentialTransferConfidentialCredits".to_string(), + info: value, + }) + } + ConfidentialTransferInstruction::DisableConfidentialCredits => { + check_num_token_accounts(account_indexes, 2)?; + let mut value = json!({ + "account": account_keys[account_indexes[0] as usize].to_string(), + + }); + let map = value.as_object_mut().unwrap(); + parse_signers( + map, + 1, + account_keys, + account_indexes, + "owner", + "multisigOwner", + ); + Ok(ParsedInstructionEnum { + instruction_type: "disableConfidentialTransferConfidentialCredits".to_string(), + info: value, + }) + } + ConfidentialTransferInstruction::EnableNonConfidentialCredits => { + check_num_token_accounts(account_indexes, 2)?; + let mut value = json!({ + "account": account_keys[account_indexes[0] as usize].to_string(), + + }); + let map = value.as_object_mut().unwrap(); + parse_signers( + map, + 1, + account_keys, + account_indexes, + "owner", + "multisigOwner", + ); + Ok(ParsedInstructionEnum { + instruction_type: "enableConfidentialTransferNonConfidentialCredits".to_string(), + info: value, + }) + } + ConfidentialTransferInstruction::DisableNonConfidentialCredits => { + check_num_token_accounts(account_indexes, 2)?; + let mut value = json!({ + "account": account_keys[account_indexes[0] as usize].to_string(), + + }); + let map = value.as_object_mut().unwrap(); + parse_signers( + map, + 1, + account_keys, + account_indexes, + "owner", + "multisigOwner", + ); + Ok(ParsedInstructionEnum { + instruction_type: "disableNonConfidentialTransferConfidentialCredits".to_string(), + info: value, + }) + } + ConfidentialTransferInstruction::WithdrawWithheldTokensFromMint => { + check_num_token_accounts(account_indexes, 4)?; + let withdraw_withheld_data: WithdrawWithheldTokensFromMintData = + *decode_instruction_data(instruction_data).map_err(|_| { + ParseInstructionError::InstructionNotParsable(ParsableProgram::SplToken) + })?; + let proof_instruction_offset: i8 = withdraw_withheld_data.proof_instruction_offset; + let mut value = json!({ + "mint": account_keys[account_indexes[0] as usize].to_string(), + "feeRecipient": account_keys[account_indexes[1] as usize].to_string(), + "instructionsSysvar": account_keys[account_indexes[2] as usize].to_string(), + "proofInstructionOffset": proof_instruction_offset, + + }); + let map = value.as_object_mut().unwrap(); + parse_signers( + map, + 3, + account_keys, + account_indexes, + "withdrawWithheldAuthority", + "multisigWithdrawWithheldAuthority", + ); + Ok(ParsedInstructionEnum { + instruction_type: "withdrawWithheldConfidentialTransferTokensFromMint".to_string(), + info: value, + }) + } + ConfidentialTransferInstruction::WithdrawWithheldTokensFromAccounts => { + let withdraw_withheld_data: WithdrawWithheldTokensFromAccountsData = + *decode_instruction_data(instruction_data).map_err(|_| { + ParseInstructionError::InstructionNotParsable(ParsableProgram::SplToken) + })?; + let num_token_accounts = withdraw_withheld_data.num_token_accounts; + check_num_token_accounts(account_indexes, 4 + num_token_accounts as usize)?; + let proof_instruction_offset: i8 = withdraw_withheld_data.proof_instruction_offset; + let mut value = json!({ + "mint": account_keys[account_indexes[0] as usize].to_string(), + "feeRecipient": account_keys[account_indexes[1] as usize].to_string(), + "instructionsSysvar": account_keys[account_indexes[2] as usize].to_string(), + "proofInstructionOffset": proof_instruction_offset, + }); + let map = value.as_object_mut().unwrap(); + let mut source_accounts: Vec = vec![]; + let first_source_account_index = account_indexes + .len() + .saturating_sub(num_token_accounts as usize); + for i in account_indexes[first_source_account_index..].iter() { + source_accounts.push(account_keys[*i as usize].to_string()); + } + map.insert("sourceAccounts".to_string(), json!(source_accounts)); + parse_signers( + map, + 3, + account_keys, + &account_indexes[..first_source_account_index], + "withdrawWithheldAuthority", + "multisigWithdrawWithheldAuthority", + ); + Ok(ParsedInstructionEnum { + instruction_type: "withdrawWithheldConfidentialTransferTokensFromAccounts" + .to_string(), + info: value, + }) + } + ConfidentialTransferInstruction::HarvestWithheldTokensToMint => { + check_num_token_accounts(account_indexes, 1)?; + let mut value = json!({ + "mint": account_keys[account_indexes[0] as usize].to_string(), + + }); + let map = value.as_object_mut().unwrap(); + let mut source_accounts: Vec = vec![]; + for i in account_indexes.iter().skip(1) { + source_accounts.push(account_keys[*i as usize].to_string()); + } + map.insert("sourceAccounts".to_string(), json!(source_accounts)); + Ok(ParsedInstructionEnum { + instruction_type: "harvestWithheldConfidentialTransferTokensToMint".to_string(), + info: value, + }) + } + } +} From cea8a396cc8e486c2f5552a08d4b82e27d43196c Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Thu, 16 Mar 2023 17:25:54 -0600 Subject: [PATCH 361/465] v1.14: Make redelegate signer more optional (backport of #30734) (#30742) Make redelegate signer more optional (#30734) (cherry picked from commit 0cdb315b5b42ea276a8807271e4d8cd183ed05f3) Co-authored-by: Tyera --- cli/src/cli.rs | 6 +++--- cli/src/stake.rs | 40 ++++++++++++++++++++++------------------ cli/tests/stake.rs | 18 +++++++++--------- 3 files changed, 34 insertions(+), 30 deletions(-) diff --git a/cli/src/cli.rs b/cli/src/cli.rs index 8314cdd35d2545..7aafeca70c9235 100644 --- a/cli/src/cli.rs +++ b/cli/src/cli.rs @@ -221,7 +221,7 @@ pub enum CliCommand { nonce_authority: SignerIndex, memo: Option, fee_payer: SignerIndex, - redelegation_stake_account_pubkey: Option, + redelegation_stake_account: Option, compute_unit_price: Option, }, SplitStake { @@ -1184,7 +1184,7 @@ pub fn process_command(config: &CliConfig) -> ProcessResult { nonce_authority, memo, fee_payer, - redelegation_stake_account_pubkey, + redelegation_stake_account, compute_unit_price, } => process_delegate_stake( &rpc_client, @@ -1200,7 +1200,7 @@ pub fn process_command(config: &CliConfig) -> ProcessResult { *nonce_authority, memo.as_ref(), *fee_payer, - redelegation_stake_account_pubkey.as_ref(), + *redelegation_stake_account, compute_unit_price.as_ref(), ), CliCommand::SplitStake { diff --git a/cli/src/stake.rs b/cli/src/stake.rs index 22f23b81a706d2..dcdc2ad9285026 100644 --- a/cli/src/stake.rs +++ b/cli/src/stake.rs @@ -827,10 +827,13 @@ pub fn parse_stake_delegate_stake( signer_of(matches, NONCE_AUTHORITY_ARG.name, wallet_manager)?; let (fee_payer, fee_payer_pubkey) = signer_of(matches, FEE_PAYER_ARG.name, wallet_manager)?; - let mut bulk_signers = vec![stake_authority, fee_payer, redelegation_stake_account]; + let mut bulk_signers = vec![stake_authority, fee_payer]; if nonce_account.is_some() { bulk_signers.push(nonce_authority); } + if redelegation_stake_account.is_some() { + bulk_signers.push(redelegation_stake_account); + } let signer_info = default_signer.generate_unique_signers(bulk_signers, matches, wallet_manager)?; let compute_unit_price = value_of(matches, COMPUTE_UNIT_PRICE_ARG.name); @@ -848,7 +851,8 @@ pub fn parse_stake_delegate_stake( nonce_authority: signer_info.index_of(nonce_authority_pubkey).unwrap(), memo, fee_payer: signer_info.index_of(fee_payer_pubkey).unwrap(), - redelegation_stake_account_pubkey, + redelegation_stake_account: redelegation_stake_account_pubkey + .and_then(|_| signer_info.index_of(redelegation_stake_account_pubkey)), compute_unit_price, }, signers: signer_info.signers, @@ -2507,25 +2511,26 @@ pub fn process_delegate_stake( nonce_authority: SignerIndex, memo: Option<&String>, fee_payer: SignerIndex, - redelegation_stake_account_pubkey: Option<&Pubkey>, + redelegation_stake_account: Option, compute_unit_price: Option<&u64>, ) -> ProcessResult { check_unique_pubkeys( (&config.signers[0].pubkey(), "cli keypair".to_string()), (stake_account_pubkey, "stake_account_pubkey".to_string()), )?; - if let Some(redelegation_stake_account_pubkey) = &redelegation_stake_account_pubkey { + let redelegation_stake_account = redelegation_stake_account.map(|index| config.signers[index]); + if let Some(redelegation_stake_account) = &redelegation_stake_account { check_unique_pubkeys( (stake_account_pubkey, "stake_account_pubkey".to_string()), ( - redelegation_stake_account_pubkey, + &redelegation_stake_account.pubkey(), "redelegation_stake_account".to_string(), ), )?; check_unique_pubkeys( (&config.signers[0].pubkey(), "cli keypair".to_string()), ( - redelegation_stake_account_pubkey, + &redelegation_stake_account.pubkey(), "redelegation_stake_account".to_string(), ), )?; @@ -2582,12 +2587,12 @@ pub fn process_delegate_stake( let recent_blockhash = blockhash_query.get_blockhash(rpc_client, config.commitment)?; - let ixs = if let Some(redelegation_stake_account_pubkey) = &redelegation_stake_account_pubkey { + let ixs = if let Some(redelegation_stake_account) = &redelegation_stake_account { stake_instruction::redelegate( stake_account_pubkey, &stake_authority.pubkey(), vote_account_pubkey, - redelegation_stake_account_pubkey, + &redelegation_stake_account.pubkey(), ) } else { vec![stake_instruction::delegate_stake( @@ -4018,7 +4023,7 @@ mod tests { nonce_authority: 0, memo: None, fee_payer: 0, - redelegation_stake_account_pubkey: None, + redelegation_stake_account: None, compute_unit_price: None, }, signers: vec![read_keypair_file(&default_keypair_file).unwrap().into()], @@ -4051,7 +4056,7 @@ mod tests { nonce_authority: 0, memo: None, fee_payer: 0, - redelegation_stake_account_pubkey: None, + redelegation_stake_account: None, compute_unit_price: None, }, signers: vec![ @@ -4086,7 +4091,7 @@ mod tests { nonce_authority: 0, memo: None, fee_payer: 0, - redelegation_stake_account_pubkey: None, + redelegation_stake_account: None, compute_unit_price: None, }, signers: vec![read_keypair_file(&default_keypair_file).unwrap().into()], @@ -4122,7 +4127,7 @@ mod tests { nonce_authority: 0, memo: None, fee_payer: 0, - redelegation_stake_account_pubkey: None, + redelegation_stake_account: None, compute_unit_price: None, }, signers: vec![read_keypair_file(&default_keypair_file).unwrap().into()], @@ -4153,7 +4158,7 @@ mod tests { nonce_authority: 0, memo: None, fee_payer: 0, - redelegation_stake_account_pubkey: None, + redelegation_stake_account: None, compute_unit_price: None, }, signers: vec![read_keypair_file(&default_keypair_file).unwrap().into()], @@ -4194,7 +4199,7 @@ mod tests { nonce_authority: 0, memo: None, fee_payer: 1, - redelegation_stake_account_pubkey: None, + redelegation_stake_account: None, compute_unit_price: None, }, signers: vec![ @@ -4244,7 +4249,7 @@ mod tests { nonce_authority: 2, memo: None, fee_payer: 1, - redelegation_stake_account_pubkey: None, + redelegation_stake_account: None, compute_unit_price: None, }, signers: vec![ @@ -4282,7 +4287,7 @@ mod tests { nonce_authority: 0, memo: None, fee_payer: 1, - redelegation_stake_account_pubkey: None, + redelegation_stake_account: None, compute_unit_price: None, }, signers: vec![ @@ -4302,7 +4307,6 @@ mod tests { redelegation_stake_account_tmp_file.as_file_mut(), ) .unwrap(); - let redelegation_stake_account_pubkey = redelegation_stake_account_keypair.pubkey(); let test_redelegate_stake = test_commands.clone().get_matches_from(vec![ "test", @@ -4326,7 +4330,7 @@ mod tests { nonce_authority: 0, memo: None, fee_payer: 0, - redelegation_stake_account_pubkey: Some(redelegation_stake_account_pubkey), + redelegation_stake_account: Some(1), compute_unit_price: None, }, signers: vec![ diff --git a/cli/tests/stake.rs b/cli/tests/stake.rs index cb7db3666fe759..e7c5a90804a77c 100644 --- a/cli/tests/stake.rs +++ b/cli/tests/stake.rs @@ -155,7 +155,7 @@ fn test_stake_redelegation() { nonce_authority: 0, memo: None, fee_payer: 0, - redelegation_stake_account_pubkey: None, + redelegation_stake_account: None, compute_unit_price: None, }; process_command(&config).unwrap(); @@ -219,7 +219,7 @@ fn test_stake_redelegation() { nonce_authority: 0, memo: None, fee_payer: 0, - redelegation_stake_account_pubkey: Some(stake2_keypair.pubkey()), + redelegation_stake_account: Some(1), compute_unit_price: None, }; process_command(&config).unwrap(); @@ -374,7 +374,7 @@ fn test_stake_delegation_force() { nonce_authority: 0, memo: None, fee_payer: 0, - redelegation_stake_account_pubkey: None, + redelegation_stake_account: None, compute_unit_price: None, }; process_command(&config).unwrap_err(); @@ -392,7 +392,7 @@ fn test_stake_delegation_force() { nonce_authority: 0, memo: None, fee_payer: 0, - redelegation_stake_account_pubkey: None, + redelegation_stake_account: None, compute_unit_price: None, }; process_command(&config).unwrap(); @@ -471,7 +471,7 @@ fn test_seed_stake_delegation_and_deactivation() { nonce_authority: 0, memo: None, fee_payer: 0, - redelegation_stake_account_pubkey: None, + redelegation_stake_account: None, compute_unit_price: None, }; process_command(&config_validator).unwrap(); @@ -563,7 +563,7 @@ fn test_stake_delegation_and_deactivation() { nonce_authority: 0, memo: None, fee_payer: 0, - redelegation_stake_account_pubkey: None, + redelegation_stake_account: None, compute_unit_price: None, }; process_command(&config_validator).unwrap(); @@ -679,7 +679,7 @@ fn test_offline_stake_delegation_and_deactivation() { nonce_authority: 0, memo: None, fee_payer: 0, - redelegation_stake_account_pubkey: None, + redelegation_stake_account: None, compute_unit_price: None, }; config_offline.output_format = OutputFormat::JsonCompact; @@ -702,7 +702,7 @@ fn test_offline_stake_delegation_and_deactivation() { nonce_authority: 0, memo: None, fee_payer: 0, - redelegation_stake_account_pubkey: None, + redelegation_stake_account: None, compute_unit_price: None, }; process_command(&config_payer).unwrap(); @@ -840,7 +840,7 @@ fn test_nonced_stake_delegation_and_deactivation() { nonce_authority: 0, memo: None, fee_payer: 0, - redelegation_stake_account_pubkey: None, + redelegation_stake_account: None, compute_unit_price: None, }; process_command(&config).unwrap(); From 48ebe7ba66fe616c90bff9bc3baeb92de1cfb87d Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Sat, 18 Mar 2023 19:48:50 +0800 Subject: [PATCH 362/465] v1.14: ledger-tool: chore: Cleanup snapshot retention constants (backport of #30745) (#30767) ledger-tool: chore: Cleanup snapshot retention constants (#30745) Declare constants at top of function with comment, and stringify the constants when needed to be in line with how other defaults are done in ledger-tool main function. (cherry picked from commit f1cd64f4a1addbd8514d26c21263b0168a0e08e2) Co-authored-by: steviez --- ledger-tool/src/main.rs | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/ledger-tool/src/main.rs b/ledger-tool/src/main.rs index 803724ce095c86..c5e789b34f1aa1 100644 --- a/ledger-tool/src/main.rs +++ b/ledger-tool/src/main.rs @@ -1081,6 +1081,11 @@ fn main() { const DEFAULT_ROOT_COUNT: &str = "1"; const DEFAULT_LATEST_OPTIMISTIC_SLOTS_COUNT: &str = "1"; const DEFAULT_MAX_SLOTS_ROOT_REPAIR: &str = "2000"; + // Use std::usize::MAX for DEFAULT_MAX_*_SNAPSHOTS_TO_RETAIN such that + // ledger-tool commands won't accidentally remove any snapshots by default + const DEFAULT_MAX_FULL_SNAPSHOT_ARCHIVES_TO_RETAIN: usize = std::usize::MAX; + const DEFAULT_MAX_INCREMENTAL_SNAPSHOT_ARCHIVES_TO_RETAIN: usize = std::usize::MAX; + solana_logger::setup_with_default("solana=info"); let starting_slot_arg = Arg::with_name("starting_slot") @@ -1243,9 +1248,8 @@ fn main() { .takes_value(true) .help("Log when transactions are processed that reference the given key(s)."); - // Use std::usize::MAX for maximum_*_snapshots_to_retain such that - // ledger-tool commands will not remove any snapshots by default - let default_max_full_snapshot_archives_to_retain = &std::usize::MAX.to_string(); + let default_max_full_snapshot_archives_to_retain = + &DEFAULT_MAX_FULL_SNAPSHOT_ARCHIVES_TO_RETAIN.to_string(); let maximum_full_snapshot_archives_to_retain = Arg::with_name( "maximum_full_snapshots_to_retain", ) @@ -1258,7 +1262,8 @@ fn main() { "The maximum number of full snapshot archives to hold on to when purging older snapshots.", ); - let default_max_incremental_snapshot_archives_to_retain = &std::usize::MAX.to_string(); + let default_max_incremental_snapshot_archives_to_retain = + &DEFAULT_MAX_INCREMENTAL_SNAPSHOT_ARCHIVES_TO_RETAIN.to_string(); let maximum_incremental_snapshot_archives_to_retain = Arg::with_name( "maximum_incremental_snapshots_to_retain", ) From b2404c19172ad16ce669cde7e1cb80d7200a0909 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Mon, 20 Mar 2023 17:56:55 +0000 Subject: [PATCH 363/465] v1.14: filters out merkle shreds until feature activation (backport of #30769) (#30798) filters out merkle shreds until feature activation (#30769) In order to maintain backward compatibility, the commit reworks merkle shreds feature gate to off by default until the feature activation. (cherry picked from commit 4de59881b7c6540199de9cd8c2807b99a8b38805) Co-authored-by: behzad nouri --- core/src/shred_fetch_stage.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/src/shred_fetch_stage.rs b/core/src/shred_fetch_stage.rs index 7da542275d3576..af0de30b34fd83 100644 --- a/core/src/shred_fetch_stage.rs +++ b/core/src/shred_fetch_stage.rs @@ -265,11 +265,11 @@ fn should_discard_packet( #[must_use] fn should_drop_merkle_shreds(shred_slot: Slot, root_bank: &Bank) -> bool { check_feature_activation( - &feature_set::drop_merkle_shreds::id(), + &feature_set::keep_merkle_shreds::id(), shred_slot, root_bank, ) && !check_feature_activation( - &feature_set::keep_merkle_shreds::id(), + &feature_set::drop_merkle_shreds::id(), shred_slot, root_bank, ) From 11a24f272dd1ffbe4989521768084ae15ac05f09 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Mon, 20 Mar 2023 15:28:40 -0500 Subject: [PATCH 364/465] v1.14: fix: fixed and/or removed forum links (backport of #30775) (#30802) fix: fixed and/or removed forum links (#30775) * fix: fixed and/or removed forum links Closes #29724 * fix: typo --------- Co-authored-by: nickfrosty (cherry picked from commit a131163904401dcfaa6817a5824a85d1744ab0c1) Co-authored-by: Nick Frostbutter <75431177+nickfrosty@users.noreply.github.com> --- docs/docusaurus.config.js | 4 ++-- .../implemented-proposals/ed_overview/ed_overview.md | 2 +- .../ed_validation_client_economics/ed_vce_overview.md | 4 ++-- .../ed_vce_state_validation_protocol_based_rewards.md | 8 ++++---- docs/src/inflation/inflation_schedule.md | 10 +++++----- docs/src/inflation/terminology.md | 4 ++-- docs/src/staking.md | 5 ----- docs/src/staking/stake-programming.md | 3 +-- 8 files changed, 17 insertions(+), 23 deletions(-) diff --git a/docs/docusaurus.config.js b/docs/docusaurus.config.js index dcc67e75bb9845..493c8826c678a0 100644 --- a/docs/docusaurus.config.js +++ b/docs/docusaurus.config.js @@ -170,8 +170,8 @@ module.exports = { href: "https://twitter.com/solana", }, { - label: "Forums »", - href: "https://forums.solana.com", + label: "Forum »", + href: "https://forum.solana.com", }, ], }, diff --git a/docs/src/implemented-proposals/ed_overview/ed_overview.md b/docs/src/implemented-proposals/ed_overview/ed_overview.md index 8d618dc22a2dfc..000ff2adbe6995 100644 --- a/docs/src/implemented-proposals/ed_overview/ed_overview.md +++ b/docs/src/implemented-proposals/ed_overview/ed_overview.md @@ -2,7 +2,7 @@ title: Cluster Economics --- -**Subject to change. Follow most recent economic discussions in the Solana forums: https://forums.solana.com** +**Subject to change.** Solana’s crypto-economic system is designed to promote a healthy, long term self-sustaining economy with participant incentives aligned to the security and decentralization of the network. The main participants in this economy are validation-clients. Their contributions to the network, state validation, and their requisite incentive mechanisms are discussed below. diff --git a/docs/src/implemented-proposals/ed_overview/ed_validation_client_economics/ed_vce_overview.md b/docs/src/implemented-proposals/ed_overview/ed_validation_client_economics/ed_vce_overview.md index c80b1fdb17b111..e0bd9bbe4e2d93 100644 --- a/docs/src/implemented-proposals/ed_overview/ed_validation_client_economics/ed_vce_overview.md +++ b/docs/src/implemented-proposals/ed_overview/ed_validation_client_economics/ed_vce_overview.md @@ -2,8 +2,8 @@ title: Validation-client Economics --- -**Subject to change. Follow most recent economic discussions in the Solana forums: https://forums.solana.com** +**Subject to change.** -Validator-clients are eligible to charge commission on inflationary rewards distributed to staked tokens. This compensation is for providing compute \(CPU+GPU\) resources to validate and vote on a given PoH state. These protocol-based rewards are determined through an algorithmic disinflationary schedule as a function of total token supply. The network is expected to launch with an annual inflation rate around 8%, set to decrease by 15% per year until a long-term stable rate of 1.5% is reached, however these parameters are yet to be finalized by the community. These issuances are to be split and distributed to participating validators, with around 95% of the issued tokens allocated for validator rewards initiall (the remaining 5% reserved for Foundation operating expenses). Because the network will be distributing a fixed amount of inflation rewards across the stake-weighted validator set, the yield observed for staked tokens will be primarily a function of the amount of staked tokens in relation to the total token supply. +Validator-clients are eligible to charge commission on inflationary rewards distributed to staked tokens. This compensation is for providing compute \(CPU+GPU\) resources to validate and vote on a given PoH state. These protocol-based rewards are determined through an algorithmic disinflationary schedule as a function of total token supply. The network is expected to launch with an annual inflation rate around 8%, set to decrease by 15% per year until a long-term stable rate of 1.5% is reached, however these parameters are yet to be finalized by the community. These issuances are to be split and distributed to participating validators, with around 95% of the issued tokens allocated for validator rewards initial (the remaining 5% reserved for Foundation operating expenses). Because the network will be distributing a fixed amount of inflation rewards across the stake-weighted validator set, the yield observed for staked tokens will be primarily a function of the amount of staked tokens in relation to the total token supply. Additionally, validator clients may earn revenue through fees via state-validation transactions. For clarity, we separately describe the design and motivation of these revenue distributions for validation-clients below: state-validation protocol-based rewards and state-validation transaction fees and rent. diff --git a/docs/src/implemented-proposals/ed_overview/ed_validation_client_economics/ed_vce_state_validation_protocol_based_rewards.md b/docs/src/implemented-proposals/ed_overview/ed_validation_client_economics/ed_vce_state_validation_protocol_based_rewards.md index 8f3fb5c03a3ac0..e5c3d10380b87a 100644 --- a/docs/src/implemented-proposals/ed_overview/ed_validation_client_economics/ed_vce_state_validation_protocol_based_rewards.md +++ b/docs/src/implemented-proposals/ed_overview/ed_validation_client_economics/ed_vce_state_validation_protocol_based_rewards.md @@ -2,7 +2,7 @@ title: Inflation Schedule --- -**Subject to change. Follow most recent economic discussions in the Solana forums: https://forums.solana.com** +**Subject to change.** Validator-clients have two functional roles in the Solana network: @@ -13,7 +13,7 @@ Validator-client rewards for these services are to be distributed at the end of The effective protocol-based annual staking yield \(%\) per epoch received by validation-clients is to be a function of: -- the current global inflation rate, derived from the pre-determined dis-inflationary issuance schedule \(see [Validation-client Economics](ed_vce_overview.md)\) +- the current global inflation rate, derived from the pre-determined disinflationary issuance schedule \(see [Validation-client Economics](ed_vce_overview.md)\) - the fraction of staked SOLs out of the current total circulating supply, - the commission charged by the validation service, - the up-time/participation \[% of available slots that validator had opportunity to vote on\] of a given validator over the previous epoch. @@ -25,7 +25,7 @@ As a first step to understanding the impact of the _Inflation Schedule_ on the S Specifically: - _Initial Inflation Rate_: 7-9% -- _Dis-inflation Rate_: -14-16% +- _Disinflation Rate_: -14-16% - _Long-term Inflation Rate_: 1-2% Using these ranges to simulate a number of possible Inflation Schedules, we can explore inflation over time: @@ -46,7 +46,7 @@ $$ In this case, because _% of Staked SOL_ is a parameter that must be estimated (unlike the _Inflation Schedule_ parameters), it is easier to use specific _Inflation Schedule_ parameters and explore a range of _% of Staked SOL_. For the below example, we’ve chosen the middle of the parameter ranges explored above: - _Initial Inflation Rate_: 8% -- _Dis-inflation Rate_: -15% +- _Disinflation Rate_: -15% - _Long-term Inflation Rate_: 1.5% The values of _% of Staked SOL_ range from 60% - 90%, which we feel covers the likely range we expect to observe, based on feedback from the investor and validator communities as well as what is observed on comparable Proof-of-Stake protocols. diff --git a/docs/src/inflation/inflation_schedule.md b/docs/src/inflation/inflation_schedule.md index 1b6777ebdb989b..0b83a75f4e843a 100644 --- a/docs/src/inflation/inflation_schedule.md +++ b/docs/src/inflation/inflation_schedule.md @@ -2,19 +2,19 @@ title: Solana's Proposed Inflation Schedule --- -As mentioned above, the network's _Inflation Schedule_ is uniquely described by three parameters: _Initial Inflation Rate_, _Dis-inflation Rate_ and _Long-term Inflation Rate_. When considering these numbers, there are many factors to take into account: +As mentioned above, the network's _Inflation Schedule_ is uniquely described by three parameters: _Initial Inflation Rate_, _Disinflation Rate_ and _Long-term Inflation Rate_. When considering these numbers, there are many factors to take into account: - A large portion of the SOL issued via inflation will be distributed to stake-holders in proportion to the SOL they have staked. We want to ensure that the _Inflation Schedule_ design results in reasonable _Staking Yields_ for token holders who delegate SOL and for validation service providers (via commissions taken from _Staking Yields_). - The primary driver of _Staked Yield_ is the amount of SOL staked divided by the total amount of SOL (% of total SOL staked). Therefore the distribution and delegation of tokens across validators are important factors to understand when determining initial inflation parameters. -- [Yield throttling](https://forums.solana.com/t/validator-yield-throttling-proposal-discussion/855/5) is a current area of research that would impact _staking-yields_. This is not taken into consideration in the discussion here or the modeling below. +- Yield throttling is a current area of research that would impact _staking-yields_. This is not taken into consideration in the discussion here or the modeling below. - Overall token issuance - i.e. what do we expect the Current Total Supply to be in 10 years, or 20 years? - Long-term, steady-state inflation is an important consideration not only for sustainable support for the validator ecosystem and the Solana Foundation grant programs, but also should be tuned in consideration with expected token losses and burning over time. -- The rate at which we expect network usage to grow, as a consideration to the dis-inflationary rate. Over time, we plan for inflation to drop and expect that usage will grow. +- The rate at which we expect network usage to grow, as a consideration to the disinflationary rate. Over time, we plan for inflation to drop and expect that usage will grow. -Based on these considerations and the community discussions following the initial [design](https://forums.solana.com/t/solana-inflation-design-overview/920), the Solana Foundation proposes the following Inflation Schedule parameters: +Based on these considerations and the community discussions following the initial design, the Solana Foundation proposes the following Inflation Schedule parameters: - Initial Inflation Rate: $8\%$ -- Dis-inflation Rate: $-15\%$ +- Disinflation Rate: $-15\%$ - Long-term Inflation Rate: $1.5\%$ These parameters define the proposed _Inflation Schedule_. Below we show implications of these parameters. These plots only show the impact of inflation issuances given the Inflation Schedule as parameterized above. They _do not account_ for other factors that may impact the Total Supply such as fee/rent burning, slashing or other unforeseen future token destruction events. Therefore, what is presented here is an **upper limit** on the amount of SOL issued via inflation. diff --git a/docs/src/inflation/terminology.md b/docs/src/inflation/terminology.md index df7ae3122c4e08..e9de2b8656ea74 100644 --- a/docs/src/inflation/terminology.md +++ b/docs/src/inflation/terminology.md @@ -14,10 +14,10 @@ The Solana protocol will automatically create new tokens on a predetermined infl ### Inflation Schedule -A deterministic description of token issuance over time. The Solana Foundation is proposing a dis-inflationary _Inflation Schedule_. I.e. Inflation starts at its highest value, the rate reduces over time until stabilizing at a predetermined long-term inflation rate (see discussion below). This schedule is completely and uniquely parameterized by three numbers: +A deterministic description of token issuance over time. The Solana Foundation is proposing a disinflationary _Inflation Schedule_. I.e. Inflation starts at its highest value, the rate reduces over time until stabilizing at a predetermined long-term inflation rate (see discussion below). This schedule is completely and uniquely parameterized by three numbers: - **Initial Inflation Rate [%]**: The starting _Inflation Rate_ for when inflation is first enabled. Token issuance rate can only decrease from this point. -- **Dis-inflation Rate [%]**: The rate at which the _Inflation Rate_ is reduced. +- **Disinflation Rate [%]**: The rate at which the _Inflation Rate_ is reduced. - **Long-term Inflation Rate [%]**: The stable, long-term _Inflation Rate_ to be expected. ### Effective Inflation Rate [%] diff --git a/docs/src/staking.md b/docs/src/staking.md index 46146e36e9ee3d..312f44fd99d347 100644 --- a/docs/src/staking.md +++ b/docs/src/staking.md @@ -74,11 +74,6 @@ Follow the wallet's instructions for selecting a validator. You can get information about potentially performant validators from the links below. The Solana Foundation does not recommend any particular validator. -The Mainnet Beta validators introduce themselves and their services on this -Solana Forum thread: - -- https://forums.solana.com/t/validator-information-thread - The site solanabeach.io is built and maintained by one of our validators, Staking Facilities. It provides a some high-level graphical information about the network as a whole, as well as a list of each validator and some recent diff --git a/docs/src/staking/stake-programming.md b/docs/src/staking/stake-programming.md index d8de644e28476b..99dace2cd9619c 100644 --- a/docs/src/staking/stake-programming.md +++ b/docs/src/staking/stake-programming.md @@ -11,8 +11,7 @@ stakes easier to manage. This off-chain program manages a large population of validators staked by a central authority. The Solana Foundation uses an auto-delegation bot to regularly delegate its -stake to "non-delinquent" validators that meet specified performance requirements. More information can be found on the -[official announcement](https://forums.solana.com/t/stake-o-matic-delegation-matching-program/790). +stake to "non-delinquent" validators that meet specified performance requirements. #### Stake Pools From 854d1a18c9656c98ab75a5140c3dca884e97fc2b Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Tue, 21 Mar 2023 17:27:13 +0000 Subject: [PATCH 365/465] v1.14: dedups packets using an atomic bloom filter (backport of #30726) (#30822) dedups packets using an atomic bloom filter (#30726) Current Deduper implementation uses many bits per entry: https://github.com/solana-labs/solana/blob/65cd55261/perf/src/deduper.rs#L70-L73 and may be saturated quickly. It also lacks api to specify desired false positive rate. The commit instead uses an atomic bloom filter with K hash functions. The false positive rate is obtained by tracking popcount of bits. (cherry picked from commit 7a7b020580ebe26533bea14d64a20753ef601cf8) Co-authored-by: behzad nouri --- Cargo.lock | 2 + core/src/sigverify_stage.rs | 11 +- perf/Cargo.toml | 2 + perf/benches/dedup.rs | 16 ++- perf/src/sigverify.rs | 250 +++++++++++++++++++----------------- 5 files changed, 156 insertions(+), 125 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index d4fea82d096f3f..38b213edb20345 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -5652,6 +5652,7 @@ dependencies = [ "matches", "nix", "rand 0.7.3", + "rand_chacha 0.2.2", "rayon", "serde", "solana-logger 1.14.17", @@ -5659,6 +5660,7 @@ dependencies = [ "solana-rayon-threadlimit", "solana-sdk 1.14.17", "solana-vote-program", + "test-case", ] [[package]] diff --git a/core/src/sigverify_stage.rs b/core/src/sigverify_stage.rs index 15fa4fc7cd903c..b442503472518c 100644 --- a/core/src/sigverify_stage.rs +++ b/core/src/sigverify_stage.rs @@ -290,7 +290,7 @@ impl SigVerifyStage { } fn verifier( - deduper: &Deduper, + deduper: &Deduper<2>, recvr: &find_packet_sender_stake_stage::FindPacketSenderStakeReceiver, verifier: &mut T, stats: &mut SigVerifierStats, @@ -410,13 +410,16 @@ impl SigVerifyStage { let mut stats = SigVerifierStats::default(); let mut last_print = Instant::now(); const MAX_DEDUPER_AGE: Duration = Duration::from_secs(2); - const MAX_DEDUPER_ITEMS: u32 = 1_000_000; + const DEDUPER_FALSE_POSITIVE_RATE: f64 = 0.001; + const DEDUPER_NUM_BITS: u64 = 63_999_979; Builder::new() .name("solSigVerifier".to_string()) .spawn(move || { - let mut deduper = Deduper::new(MAX_DEDUPER_ITEMS, MAX_DEDUPER_AGE); + let mut rng = rand::thread_rng(); + let mut deduper = + Deduper::<2>::new(&mut rng, DEDUPER_FALSE_POSITIVE_RATE, DEDUPER_NUM_BITS); loop { - deduper.reset(); + deduper.maybe_reset(&mut rng, &MAX_DEDUPER_AGE); if let Err(e) = Self::verifier(&deduper, &packet_receiver, &mut verifier, &mut stats) { diff --git a/perf/Cargo.toml b/perf/Cargo.toml index f0a2cbf8bd105e..082370584d5389 100644 --- a/perf/Cargo.toml +++ b/perf/Cargo.toml @@ -37,7 +37,9 @@ name = "solana_perf" [dev-dependencies] matches = "0.1.9" +rand_chacha = "0.2.2" solana-logger = { path = "../logger", version = "=1.14.17" } +test-case = "2.1.0" [[bench]] name = "sigverify" diff --git a/perf/benches/dedup.rs b/perf/benches/dedup.rs index c4f3169979cf52..13e8e056b2e18d 100644 --- a/perf/benches/dedup.rs +++ b/perf/benches/dedup.rs @@ -7,7 +7,7 @@ use { rand::prelude::*, solana_perf::{ packet::{to_packet_batches, PacketBatch}, - sigverify, + sigverify::Deduper, }, std::time::Duration, test::Bencher, @@ -24,10 +24,13 @@ fn test_packet_with_size(size: usize, rng: &mut ThreadRng) -> Vec { fn do_bench_dedup_packets(bencher: &mut Bencher, mut batches: Vec) { // verify packets - let mut deduper = sigverify::Deduper::new(1_000_000, Duration::from_millis(2_000)); + let mut rng = rand::thread_rng(); + let mut deduper = Deduper::<2>::new( + &mut rng, /*false_positive_rate:*/ 0.001, /*num_bits:*/ 63_999_979, + ); bencher.iter(|| { let _ans = deduper.dedup_packets_and_count_discards(&mut batches, |_, _, _| ()); - deduper.reset(); + deduper.maybe_reset(&mut rng, /*reset_cycle:*/ &Duration::from_secs(2)); batches .iter_mut() .for_each(|b| b.iter_mut().for_each(|p| p.meta.set_discard(false))); @@ -112,8 +115,11 @@ fn bench_dedup_baseline(bencher: &mut Bencher) { #[bench] #[ignore] fn bench_dedup_reset(bencher: &mut Bencher) { - let mut deduper = sigverify::Deduper::new(1_000_000, Duration::from_millis(0)); + let mut rng = rand::thread_rng(); + let mut deduper = Deduper::<2>::new( + &mut rng, /*false_positive_rate:*/ 0.001, /*num_bits:*/ 63_999_979, + ); bencher.iter(|| { - deduper.reset(); + deduper.maybe_reset(&mut rng, /*reset_cycle:*/ &Duration::from_millis(0)); }); } diff --git a/perf/src/sigverify.rs b/perf/src/sigverify.rs index 2e8ac4e2e84323..0a49cf30638984 100644 --- a/perf/src/sigverify.rs +++ b/perf/src/sigverify.rs @@ -11,7 +11,7 @@ use { recycler::Recycler, }, ahash::AHasher, - rand::{thread_rng, Rng}, + rand::Rng, rayon::{prelude::*, ThreadPool}, solana_metrics::inc_new_counter_debug, solana_rayon_threadlimit::get_thread_count, @@ -19,15 +19,15 @@ use { hash::Hash, message::{MESSAGE_HEADER_LENGTH, MESSAGE_VERSION_PREFIX}, pubkey::Pubkey, - saturating_add_assign, short_vec::decode_shortu16_len, signature::Signature, }, std::{ convert::TryFrom, - hash::Hasher, + hash::{Hash as _, Hasher}, + iter::repeat_with, mem::size_of, - sync::atomic::{AtomicBool, AtomicU64, Ordering}, + sync::atomic::{AtomicU64, Ordering}, time::{Duration, Instant}, }, }; @@ -495,72 +495,62 @@ pub fn generate_offsets( ) } -pub struct Deduper { - filter: Vec, - seed: (u128, u128), - age: Instant, - max_age: Duration, - pub saturated: AtomicBool, +pub struct Deduper { + num_bits: u64, + bits: Vec, + seeds: [(u128, u128); K], + clock: Instant, + // Maximum number of one bits before the false positive + // rate exceeds the specified threshold. + capacity: u64, + popcount: AtomicU64, // Number of one bits in self.bits. } -impl Deduper { - pub fn new(size: u32, max_age: Duration) -> Self { - let mut filter: Vec = Vec::with_capacity(size as usize); - filter.resize_with(size as usize, Default::default); - let seed = thread_rng().gen(); +impl Deduper { + pub fn new(rng: &mut R, false_positive_rate: f64, num_bits: u64) -> Self { + assert!(0.0 < false_positive_rate && false_positive_rate < 1.0); + let size = usize::try_from(num_bits.checked_add(63).unwrap() / 64).unwrap(); + let capacity = num_bits as f64 * false_positive_rate.powf(1f64 / K as f64); Self { - filter, - seed, - age: Instant::now(), - max_age, - saturated: AtomicBool::new(false), + num_bits, + seeds: [(); K].map(|_| rng.gen()), + clock: Instant::now(), + bits: repeat_with(AtomicU64::default).take(size).collect(), + capacity: capacity as u64, + popcount: AtomicU64::default(), } } - pub fn reset(&mut self) { - let now = Instant::now(); - //this should reset every 500k unique packets per 1m sized deduper - //false positive rate is 1/1000 at that point - let saturated = self.saturated.load(Ordering::Relaxed); - if saturated || now.duration_since(self.age) > self.max_age { - let len = self.filter.len(); - self.filter.clear(); - self.filter.resize_with(len, AtomicU64::default); - self.seed = thread_rng().gen(); - self.age = now; - self.saturated.store(false, Ordering::Relaxed); + pub fn maybe_reset(&mut self, rng: &mut R, reset_cycle: &Duration) { + let popcount = self.popcount.load(Ordering::Relaxed); + if popcount >= self.capacity || &self.clock.elapsed() >= reset_cycle { + self.seeds = [(); K].map(|_| rng.gen()); + self.clock = Instant::now(); + self.bits.fill_with(AtomicU64::default); + self.popcount = AtomicU64::default(); } } - /// Compute hash from packet data, returns (hash, bin_pos). - fn compute_hash(&self, packet: &Packet) -> (u64, usize) { - let mut hasher = AHasher::new_with_keys(self.seed.0, self.seed.1); - hasher.write(packet.data(..).unwrap_or_default()); - let h = hasher.finish(); - let len = self.filter.len(); - let pos = (usize::try_from(h).unwrap()).wrapping_rem(len); - (h, pos) - } - - // Deduplicates packets and returns 1 if packet is to be discarded. Else, 0. - fn dedup_packet(&self, packet: &mut Packet) -> u64 { - // If this packet was already marked as discard, drop it - if packet.meta.discard() { - return 1; - } - let (hash, pos) = self.compute_hash(packet); - // saturate each position with or - let prev = self.filter[pos].fetch_or(hash, Ordering::Relaxed); - if prev == u64::MAX { - self.saturated.store(true, Ordering::Relaxed); - //reset this value - self.filter[pos].store(hash, Ordering::Relaxed); - } - if hash == prev & hash { - packet.meta.set_discard(true); - return 1; + // Returns true if the packet is duplicate. + #[must_use] + #[allow(clippy::integer_arithmetic)] + fn dedup_packet(&self, packet: &Packet) -> bool { + // Should not dedup packet if already discarded. + debug_assert!(!packet.meta.discard()); + let mut out = true; + for seed in self.seeds { + let mut hasher = AHasher::new_with_keys(seed.0, seed.1); + packet.data(..).unwrap_or_default().hash(&mut hasher); + let hash: u64 = hasher.finish() % self.num_bits; + let index = (hash >> 6) as usize; + let mask: u64 = 1u64 << (hash & 63); + let old = self.bits[index].fetch_or(mask, Ordering::Relaxed); + if old & mask == 0u64 { + self.popcount.fetch_add(1, Ordering::Relaxed); + out = false; + } } - 0 + out } pub fn dedup_packets_and_count_discards( @@ -568,18 +558,21 @@ impl Deduper { batches: &mut [PacketBatch], mut process_received_packet: impl FnMut(&mut Packet, bool, bool), ) -> u64 { - let mut num_removed: u64 = 0; - batches.iter_mut().for_each(|batch| { - batch.iter_mut().for_each(|p| { - let removed_before_sigverify = p.meta.discard(); - let is_duplicate = self.dedup_packet(p); - if is_duplicate == 1 { - saturating_add_assign!(num_removed, 1); + batches + .iter_mut() + .flat_map(PacketBatch::iter_mut) + .map(|packet| { + if packet.meta.discard() { + process_received_packet(packet, true, false); + } else if self.dedup_packet(packet) { + packet.meta.set_discard(true); + process_received_packet(packet, false, true); + } else { + process_received_packet(packet, false, false); } - process_received_packet(p, removed_before_sigverify, is_duplicate == 1); + u64::from(packet.meta.discard()) }) - }); - num_removed + .sum() } } @@ -812,10 +805,12 @@ mod tests { }, bincode::{deserialize, serialize}, curve25519_dalek::{edwards::CompressedEdwardsY, scalar::Scalar}, - rand::{thread_rng, Rng}, + rand::{thread_rng, Rng, SeedableRng}, + rand_chacha::ChaChaRng, solana_sdk::{ instruction::CompiledInstruction, message::{Message, MessageHeader}, + packet::Meta, signature::{Keypair, Signature, Signer}, transaction::Transaction, }, @@ -823,6 +818,7 @@ mod tests { iter::repeat_with, sync::atomic::{AtomicU64, Ordering}, }, + test_case::test_case, }; const SIG_OFFSET: usize = 1; @@ -1598,7 +1594,10 @@ mod tests { let mut batches = to_packet_batches(&std::iter::repeat(tx).take(1024).collect::>(), 128); let packet_count = sigverify::count_packets_in_batches(&batches); - let filter = Deduper::new(1_000_000, Duration::from_millis(0)); + let mut rng = rand::thread_rng(); + let filter = Deduper::<2>::new( + &mut rng, /*false_positive_rate:*/ 0.001, /*num_bits:*/ 63_999_979, + ); let mut num_deduped = 0; let discard = filter.dedup_packets_and_count_discards( &mut batches, @@ -1612,13 +1611,16 @@ mod tests { #[test] fn test_dedup_diff() { - let mut filter = Deduper::new(1_000_000, Duration::from_millis(0)); + let mut rng = rand::thread_rng(); + let mut filter = Deduper::<2>::new( + &mut rng, /*false_positive_rate:*/ 0.001, /*num_bits:*/ 63_999_979, + ); let mut batches = to_packet_batches(&(0..1024).map(|_| test_tx()).collect::>(), 128); let discard = filter.dedup_packets_and_count_discards(&mut batches, |_, _, _| ()) as usize; // because dedup uses a threadpool, there maybe up to N threads of txs that go through assert_eq!(discard, 0); - filter.reset(); - for i in filter.filter { + filter.maybe_reset(&mut rng, /*reset_cycle:*/ &Duration::from_millis(0)); + for i in filter.bits { assert_eq!(i.load(Ordering::Relaxed), 0); } } @@ -1626,24 +1628,30 @@ mod tests { #[test] #[ignore] fn test_dedup_saturated() { - let filter = Deduper::new(1_000_000, Duration::from_millis(0)); + let mut rng = rand::thread_rng(); + let filter = Deduper::<2>::new( + &mut rng, /*false_positive_rate:*/ 0.001, /*num_bits:*/ 63_999_979, + ); let mut discard = 0; - assert!(!filter.saturated.load(Ordering::Relaxed)); + assert!(filter.popcount.load(Ordering::Relaxed) < filter.capacity); for i in 0..1000 { let mut batches = to_packet_batches(&(0..1000).map(|_| test_tx()).collect::>(), 128); discard += filter.dedup_packets_and_count_discards(&mut batches, |_, _, _| ()) as usize; trace!("{} {}", i, discard); - if filter.saturated.load(Ordering::Relaxed) { + if filter.popcount.load(Ordering::Relaxed) >= filter.capacity { break; } } - assert!(filter.saturated.load(Ordering::Relaxed)); + assert!(filter.popcount.load(Ordering::Relaxed) >= filter.capacity); } #[test] fn test_dedup_false_positive() { - let filter = Deduper::new(1_000_000, Duration::from_millis(0)); + let mut rng = rand::thread_rng(); + let filter = Deduper::<2>::new( + &mut rng, /*false_positive_rate:*/ 0.001, /*num_bits:*/ 63_999_979, + ); let mut discard = 0; for i in 0..10 { let mut batches = @@ -1655,43 +1663,53 @@ mod tests { assert!(discard < 2); } - #[test] - fn test_shrink_fuzz() { - for _ in 0..5 { - let mut batches = to_packet_batches( - &(0..PACKETS_PER_BATCH * 3) - .map(|_| test_tx()) - .collect::>(), - PACKETS_PER_BATCH, - ); - batches.iter_mut().for_each(|b| { - b.iter_mut() - .for_each(|p| p.meta.set_discard(thread_rng().gen())) - }); - //find all the non discarded packets - let mut start = vec![]; - batches.iter_mut().for_each(|b| { - b.iter_mut() - .filter(|p| !p.meta.discard()) - .for_each(|p| start.push(p.clone())) - }); - start.sort_by(|a, b| a.data(..).cmp(&b.data(..))); - - let packet_count = count_valid_packets(&batches, |_| ()); - shrink_batches(&mut batches); - - //make sure all the non discarded packets are the same - let mut end = vec![]; - batches.iter_mut().for_each(|b| { - b.iter_mut() - .filter(|p| !p.meta.discard()) - .for_each(|p| end.push(p.clone())) - }); - end.sort_by(|a, b| a.data(..).cmp(&b.data(..))); - let packet_count2 = count_valid_packets(&batches, |_| ()); - assert_eq!(packet_count, packet_count2); - assert_eq!(start, end); + #[test_case(63_999_979, 0.001, 2_023_857)] + #[test_case(622_401_961, 0.001, 19_682_078)] + #[test_case(622_401_979, 0.001, 19_682_078)] + #[test_case(629_145_593, 0.001, 19_895_330)] + #[test_case(632_455_543, 0.001, 20_000_000)] + #[test_case(637_534_199, 0.001, 20_160_601)] + #[test_case(622_401_961, 0.0001, 6_224_019)] + #[test_case(622_401_979, 0.0001, 6_224_019)] + #[test_case(629_145_593, 0.0001, 6_291_455)] + #[test_case(632_455_543, 0.0001, 6_324_555)] + #[test_case(637_534_199, 0.0001, 6_375_341)] + fn test_dedup_capacity(num_bits: u64, false_positive_rate: f64, capacity: u64) { + let mut rng = rand::thread_rng(); + let deduper = Deduper::<2>::new(&mut rng, false_positive_rate, num_bits); + assert_eq!(deduper.capacity, capacity); + } + + #[test_case([0xf9; 32], 3_199_997, 101_192, 51_414, 70, 101_125)] + #[test_case([0xdc; 32], 3_200_003, 101_192, 51_414, 71, 101_132)] + #[test_case([0xa5; 32], 6_399_971, 202_384, 102_828, 127, 202_157)] + #[test_case([0xdb; 32], 6_400_013, 202_386, 102_828, 145, 202_277)] + #[test_case([0xcd; 32], 12_799_987, 404_771, 205_655, 289, 404_434)] + #[test_case([0xc3; 32], 12_800_009, 404_771, 205_656, 309, 404_278)] + fn test_dedup_seeded( + seed: [u8; 32], + num_bits: u64, + capacity: u64, + num_packets: usize, + num_dups: usize, + popcount: u64, + ) { + let mut rng = ChaChaRng::from_seed(seed); + let deduper = Deduper::<2>::new(&mut rng, /*false_positive_rate:*/ 0.001, num_bits); + assert_eq!(deduper.capacity, capacity); + let mut packet = Packet::new([0u8; PACKET_DATA_SIZE], Meta::default()); + let mut dup_count = 0usize; + for _ in 0..num_packets { + let size = rng.gen_range(0, PACKET_DATA_SIZE); + packet.meta.size = size; + rng.fill(&mut packet.buffer_mut()[0..size]); + if deduper.dedup_packet(&packet) { + dup_count += 1; + } + assert!(deduper.dedup_packet(&packet)); } + assert_eq!(dup_count, num_dups); + assert_eq!(deduper.popcount.load(Ordering::Relaxed), popcount); } #[test] From 2b3b4ad3862cf52ff086780fa6e53dfa2bfbed01 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Tue, 21 Mar 2023 18:05:15 +0000 Subject: [PATCH 366/465] v1.14: removes lazy-static thread-pool from sigverify-shreds (backport of #30787) (#30827) * removes lazy-static thread-pool from sigverify-shreds (#30787) Instead the thread-pool is passed explicitly from higher in the call stack so that https://github.com/solana-labs/solana/pull/30786 can use the same thread-pool for shred deduplication. (cherry picked from commit c6e7aaf96ce2a524fe0a0b65e1de66a4a80bcd1e) # Conflicts: # core/src/sigverify_shreds.rs # ledger/src/sigverify_shreds.rs * resolves mergify merge conflicts --------- Co-authored-by: behzad nouri --- core/src/sigverify_shreds.rs | 27 +++++-- ledger/benches/sigverify_shreds.rs | 28 ++++++- ledger/src/sigverify_shreds.rs | 119 +++++++++++++++++------------ 3 files changed, 117 insertions(+), 57 deletions(-) diff --git a/core/src/sigverify_shreds.rs b/core/src/sigverify_shreds.rs index 00dfd80cc1aa9d..75fdcf8e5e8bdc 100644 --- a/core/src/sigverify_shreds.rs +++ b/core/src/sigverify_shreds.rs @@ -1,10 +1,12 @@ use { crossbeam_channel::{Receiver, RecvTimeoutError, SendError, Sender}, + rayon::{ThreadPool, ThreadPoolBuilder}, solana_gossip::cluster_info::ClusterInfo, solana_ledger::{ leader_schedule_cache::LeaderScheduleCache, shred, sigverify_shreds::verify_shreds_gpu, }, solana_perf::{self, packet::PacketBatch, recycler_cache::RecyclerCache}, + solana_rayon_threadlimit::get_thread_count, solana_runtime::{bank::Bank, bank_forks::BankForks}, solana_sdk::{clock::Slot, pubkey::Pubkey, signature::Signer}, std::{ @@ -36,13 +38,18 @@ pub(crate) fn spawn_shred_sigverify( ) -> JoinHandle<()> { let recycler_cache = RecyclerCache::warmed(); let mut stats = ShredSigVerifyStats::new(Instant::now()); - Builder::new() - .name("solShredVerifr".to_string()) - .spawn(move || loop { + let thread_pool = ThreadPoolBuilder::new() + .num_threads(get_thread_count()) + .thread_name(|i| format!("solSvrfyShred{i:02}")) + .build() + .unwrap(); + let run_shred_sigverify = move || { + loop { // We can't store the pubkey outside the loop // because the identity might be hot swapped. let self_pubkey = cluster_info.keypair().pubkey(); match run_shred_sigverify( + &thread_pool, &self_pubkey, &bank_forks, &leader_schedule_cache, @@ -59,11 +66,17 @@ pub(crate) fn spawn_shred_sigverify( Err(Error::SendError) => break, } stats.maybe_submit(); - }) + } + }; + Builder::new() + .name("solShredVerifr".to_string()) + .spawn(run_shred_sigverify) .unwrap() } +#[allow(clippy::too_many_arguments)] fn run_shred_sigverify( + thread_pool: &ThreadPool, self_pubkey: &Pubkey, bank_forks: &RwLock, leader_schedule_cache: &LeaderScheduleCache, @@ -84,6 +97,7 @@ fn run_shred_sigverify( stats.num_packets += packets.iter().map(PacketBatch::len).sum::(); stats.num_discards_pre += count_discards(&packets); verify_packets( + thread_pool, self_pubkey, bank_forks, leader_schedule_cache, @@ -109,6 +123,7 @@ fn run_shred_sigverify( } fn verify_packets( + thread_pool: &ThreadPool, self_pubkey: &Pubkey, bank_forks: &RwLock, leader_schedule_cache: &LeaderScheduleCache, @@ -122,7 +137,7 @@ fn verify_packets( .filter_map(|(slot, pubkey)| Some((slot, pubkey?.to_bytes()))) .chain(std::iter::once((Slot::MAX, [0u8; 32]))) .collect(); - let out = verify_shreds_gpu(packets, &leader_slots, recycler_cache); + let out = verify_shreds_gpu(thread_pool, packets, &leader_slots, recycler_cache); solana_perf::sigverify::mark_disabled(packets, &out); } @@ -285,7 +300,9 @@ mod tests { batches[0][1].buffer_mut()[..shred.payload().len()].copy_from_slice(shred.payload()); batches[0][1].meta.size = shred.payload().len(); + let thread_pool = ThreadPoolBuilder::new().num_threads(3).build().unwrap(); verify_packets( + &thread_pool, &Pubkey::new_unique(), // self_pubkey &bank_forks, &leader_schedule_cache, diff --git a/ledger/benches/sigverify_shreds.rs b/ledger/benches/sigverify_shreds.rs index 4007291d2da772..ab69441c18aa4c 100644 --- a/ledger/benches/sigverify_shreds.rs +++ b/ledger/benches/sigverify_shreds.rs @@ -2,6 +2,7 @@ extern crate test; use { + rayon::ThreadPoolBuilder, solana_ledger::{ shred::{Shred, ShredFlags, LEGACY_SHRED_DATA_CAPACITY}, sigverify_shreds::{sign_shreds_cpu, sign_shreds_gpu, sign_shreds_gpu_pinned_keypair}, @@ -10,6 +11,7 @@ use { packet::{Packet, PacketBatch}, recycler_cache::RecyclerCache, }, + solana_rayon_threadlimit::get_thread_count, solana_sdk::signature::Keypair, std::sync::Arc, test::Bencher, @@ -19,6 +21,10 @@ const NUM_PACKETS: usize = 256; const NUM_BATCHES: usize = 1; #[bench] fn bench_sigverify_shreds_sign_gpu(bencher: &mut Bencher) { + let thread_pool = ThreadPoolBuilder::new() + .num_threads(get_thread_count()) + .build() + .unwrap(); let recycler_cache = RecyclerCache::default(); let mut packet_batch = PacketBatch::new_pinned_with_capacity(NUM_PACKETS); @@ -43,15 +49,31 @@ fn bench_sigverify_shreds_sign_gpu(bencher: &mut Bencher) { let pinned_keypair = Some(Arc::new(pinned_keypair)); //warmup for _ in 0..100 { - sign_shreds_gpu(&keypair, &pinned_keypair, &mut batches, &recycler_cache); + sign_shreds_gpu( + &thread_pool, + &keypair, + &pinned_keypair, + &mut batches, + &recycler_cache, + ); } bencher.iter(|| { - sign_shreds_gpu(&keypair, &pinned_keypair, &mut batches, &recycler_cache); + sign_shreds_gpu( + &thread_pool, + &keypair, + &pinned_keypair, + &mut batches, + &recycler_cache, + ); }) } #[bench] fn bench_sigverify_shreds_sign_cpu(bencher: &mut Bencher) { + let thread_pool = ThreadPoolBuilder::new() + .num_threads(get_thread_count()) + .build() + .unwrap(); let mut packet_batch = PacketBatch::default(); let slot = 0xdead_c0de; packet_batch.resize(NUM_PACKETS, Packet::default()); @@ -71,6 +93,6 @@ fn bench_sigverify_shreds_sign_cpu(bencher: &mut Bencher) { let mut batches = vec![packet_batch; NUM_BATCHES]; let keypair = Keypair::new(); bencher.iter(|| { - sign_shreds_cpu(&keypair, &mut batches); + sign_shreds_cpu(&thread_pool, &keypair, &mut batches); }) } diff --git a/ledger/src/sigverify_shreds.rs b/ledger/src/sigverify_shreds.rs index 79c3d2426a4aff..5dc91ac9bded6a 100644 --- a/ledger/src/sigverify_shreds.rs +++ b/ledger/src/sigverify_shreds.rs @@ -12,7 +12,6 @@ use { recycler_cache::RecyclerCache, sigverify::{self, count_packets_in_batches, TxOffset}, }, - solana_rayon_threadlimit::get_thread_count, solana_sdk::{ clock::Slot, hash::Hash, @@ -27,14 +26,6 @@ const SIGN_SHRED_GPU_MIN: usize = 256; const_assert_eq!(SIZE_OF_MERKLE_ROOT, 32); const SIZE_OF_MERKLE_ROOT: usize = std::mem::size_of::(); -lazy_static! { - static ref SIGVERIFY_THREAD_POOL: ThreadPool = rayon::ThreadPoolBuilder::new() - .num_threads(get_thread_count()) - .thread_name(|ix| format!("solSvrfyShred{:02}", ix)) - .build() - .unwrap(); -} - #[must_use] pub fn verify_shred_cpu( packet: &Packet, @@ -69,12 +60,13 @@ pub fn verify_shred_cpu( } fn verify_shreds_cpu( + thread_pool: &ThreadPool, batches: &[PacketBatch], slot_leaders: &HashMap, ) -> Vec> { let packet_count = count_packets_in_batches(batches); debug!("CPU SHRED ECDSA for {}", packet_count); - let rv = SIGVERIFY_THREAD_POOL.install(|| { + let rv = thread_pool.install(|| { batches .into_par_iter() .map(|batch| { @@ -90,6 +82,7 @@ fn verify_shreds_cpu( } fn slot_key_data_for_gpu( + thread_pool: &ThreadPool, batches: &[PacketBatch], slot_keys: &HashMap, recycler_cache: &RecyclerCache, @@ -99,7 +92,7 @@ where { //TODO: mark Pubkey::default shreds as failed after the GPU returns assert_eq!(slot_keys.get(&Slot::MAX), Some(&T::default())); - let slots: Vec = SIGVERIFY_THREAD_POOL.install(|| { + let slots: Vec = thread_pool.install(|| { batches .into_par_iter() .flat_map_iter(|batch| { @@ -151,13 +144,14 @@ where // Recovers merkle roots from shreds binary. fn get_merkle_roots( + thread_pool: &ThreadPool, packets: &[PacketBatch], recycler_cache: &RecyclerCache, ) -> ( PinnedVec, // Merkle roots Vec>, // Offsets ) { - let merkle_roots: Vec> = SIGVERIFY_THREAD_POOL.install(|| { + let merkle_roots: Vec> = thread_pool.install(|| { packets .par_iter() .flat_map(|packets| { @@ -257,18 +251,21 @@ fn shred_gpu_offsets( } pub fn verify_shreds_gpu( + thread_pool: &ThreadPool, batches: &[PacketBatch], slot_leaders: &HashMap, recycler_cache: &RecyclerCache, ) -> Vec> { let api = match perf_libs::api() { - None => return verify_shreds_cpu(batches, slot_leaders), + None => return verify_shreds_cpu(thread_pool, batches, slot_leaders), Some(api) => api, }; - let (pubkeys, pubkey_offsets) = slot_key_data_for_gpu(batches, slot_leaders, recycler_cache); + let (pubkeys, pubkey_offsets) = + slot_key_data_for_gpu(thread_pool, batches, slot_leaders, recycler_cache); //HACK: Pubkeys vector is passed along as a `PacketBatch` buffer to the GPU //TODO: GPU needs a more opaque interface, which can handle variable sized structures for data - let (merkle_roots, merkle_roots_offsets) = get_merkle_roots(batches, recycler_cache); + let (merkle_roots, merkle_roots_offsets) = + get_merkle_roots(thread_pool, batches, recycler_cache); // Merkle roots are placed after pubkeys; adjust offsets accordingly. let merkle_roots_offsets = { let shift = pubkeys.len(); @@ -339,10 +336,10 @@ fn sign_shred_cpu(keypair: &Keypair, packet: &mut Packet) { packet.buffer_mut()[sig].copy_from_slice(signature.as_ref()); } -pub fn sign_shreds_cpu(keypair: &Keypair, batches: &mut [PacketBatch]) { +pub fn sign_shreds_cpu(thread_pool: &ThreadPool, keypair: &Keypair, batches: &mut [PacketBatch]) { let packet_count = count_packets_in_batches(batches); debug!("CPU SHRED ECDSA for {}", packet_count); - SIGVERIFY_THREAD_POOL.install(|| { + thread_pool.install(|| { batches.par_iter_mut().for_each(|batch| { batch[..] .par_iter_mut() @@ -370,6 +367,7 @@ pub fn sign_shreds_gpu_pinned_keypair(keypair: &Keypair, cache: &RecyclerCache) } pub fn sign_shreds_gpu( + thread_pool: &ThreadPool, keypair: &Keypair, pinned_keypair: &Option>>, batches: &mut [PacketBatch], @@ -379,10 +377,10 @@ pub fn sign_shreds_gpu( let pubkey_size = size_of::(); let packet_count = count_packets_in_batches(batches); if packet_count < SIGN_SHRED_GPU_MIN || pinned_keypair.is_none() { - return sign_shreds_cpu(keypair, batches); + return sign_shreds_cpu(thread_pool, keypair, batches); } let api = match perf_libs::api() { - None => return sign_shreds_cpu(keypair, batches), + None => return sign_shreds_cpu(thread_pool, keypair, batches), Some(api) => api, }; let pinned_keypair = pinned_keypair.as_ref().unwrap(); @@ -394,7 +392,8 @@ pub fn sign_shreds_gpu( let mut secret_offsets = recycler_cache.offsets().allocate("secret_offsets"); secret_offsets.resize(packet_count, pubkey_size as u32); - let (merkle_roots, merkle_roots_offsets) = get_merkle_roots(batches, recycler_cache); + let (merkle_roots, merkle_roots_offsets) = + get_merkle_roots(thread_pool, batches, recycler_cache); // Merkle roots are placed after the keypair; adjust offsets accordingly. let merkle_roots_offsets = { let shift = pinned_keypair.len(); @@ -452,7 +451,7 @@ pub fn sign_shreds_gpu( Some(out) }) .collect(); - SIGVERIFY_THREAD_POOL.install(|| { + thread_pool.install(|| { batches .par_iter_mut() .zip(num_packets) @@ -482,6 +481,7 @@ mod tests { }, matches::assert_matches, rand::{seq::SliceRandom, Rng}, + rayon::ThreadPoolBuilder, solana_entry::entry::Entry, solana_sdk::{ hash, @@ -535,7 +535,7 @@ mod tests { run_test_sigverify_shred_cpu(0xdead_c0de); } - fn run_test_sigverify_shreds_cpu(slot: Slot) { + fn run_test_sigverify_shreds_cpu(thread_pool: &ThreadPool, slot: Slot) { solana_logger::setup(); let mut batches = [PacketBatch::default()]; let mut shred = Shred::new_from_data( @@ -558,7 +558,7 @@ mod tests { .iter() .cloned() .collect(); - let rv = verify_shreds_cpu(&batches, &leader_slots); + let rv = verify_shreds_cpu(thread_pool, &batches, &leader_slots); assert_eq!(rv, vec![vec![1]]); let wrong_keypair = Keypair::new(); @@ -566,11 +566,11 @@ mod tests { .iter() .cloned() .collect(); - let rv = verify_shreds_cpu(&batches, &leader_slots); + let rv = verify_shreds_cpu(thread_pool, &batches, &leader_slots); assert_eq!(rv, vec![vec![0]]); let leader_slots = HashMap::new(); - let rv = verify_shreds_cpu(&batches, &leader_slots); + let rv = verify_shreds_cpu(thread_pool, &batches, &leader_slots); assert_eq!(rv, vec![vec![0]]); let leader_slots = [(slot, keypair.pubkey().to_bytes())] @@ -578,16 +578,17 @@ mod tests { .cloned() .collect(); batches[0][0].meta.size = 0; - let rv = verify_shreds_cpu(&batches, &leader_slots); + let rv = verify_shreds_cpu(thread_pool, &batches, &leader_slots); assert_eq!(rv, vec![vec![0]]); } #[test] fn test_sigverify_shreds_cpu() { - run_test_sigverify_shreds_cpu(0xdead_c0de); + let thread_pool = ThreadPoolBuilder::new().num_threads(3).build().unwrap(); + run_test_sigverify_shreds_cpu(&thread_pool, 0xdead_c0de); } - fn run_test_sigverify_shreds_gpu(slot: Slot) { + fn run_test_sigverify_shreds_gpu(thread_pool: &ThreadPool, slot: Slot) { solana_logger::setup(); let recycler_cache = RecyclerCache::default(); @@ -615,7 +616,7 @@ mod tests { .iter() .cloned() .collect(); - let rv = verify_shreds_gpu(&batches, &leader_slots, &recycler_cache); + let rv = verify_shreds_gpu(thread_pool, &batches, &leader_slots, &recycler_cache); assert_eq!(rv, vec![vec![1]]); let wrong_keypair = Keypair::new(); @@ -626,11 +627,11 @@ mod tests { .iter() .cloned() .collect(); - let rv = verify_shreds_gpu(&batches, &leader_slots, &recycler_cache); + let rv = verify_shreds_gpu(thread_pool, &batches, &leader_slots, &recycler_cache); assert_eq!(rv, vec![vec![0]]); let leader_slots = [(std::u64::MAX, [0u8; 32])].iter().cloned().collect(); - let rv = verify_shreds_gpu(&batches, &leader_slots, &recycler_cache); + let rv = verify_shreds_gpu(thread_pool, &batches, &leader_slots, &recycler_cache); assert_eq!(rv, vec![vec![0]]); batches[0][0].meta.size = 0; @@ -641,16 +642,17 @@ mod tests { .iter() .cloned() .collect(); - let rv = verify_shreds_gpu(&batches, &leader_slots, &recycler_cache); + let rv = verify_shreds_gpu(thread_pool, &batches, &leader_slots, &recycler_cache); assert_eq!(rv, vec![vec![0]]); } #[test] fn test_sigverify_shreds_gpu() { - run_test_sigverify_shreds_gpu(0xdead_c0de); + let thread_pool = ThreadPoolBuilder::new().num_threads(3).build().unwrap(); + run_test_sigverify_shreds_gpu(&thread_pool, 0xdead_c0de); } - fn run_test_sigverify_shreds_sign_gpu(slot: Slot) { + fn run_test_sigverify_shreds_sign_gpu(thread_pool: &ThreadPool, slot: Slot) { solana_logger::setup(); let recycler_cache = RecyclerCache::default(); @@ -684,23 +686,30 @@ mod tests { .cloned() .collect(); //unsigned - let rv = verify_shreds_gpu(&batches, &pubkeys, &recycler_cache); + let rv = verify_shreds_gpu(thread_pool, &batches, &pubkeys, &recycler_cache); assert_eq!(rv, vec![vec![0; num_packets]; num_batches]); //signed - sign_shreds_gpu(&keypair, &pinned_keypair, &mut batches, &recycler_cache); - let rv = verify_shreds_cpu(&batches, &pubkeys); + sign_shreds_gpu( + thread_pool, + &keypair, + &pinned_keypair, + &mut batches, + &recycler_cache, + ); + let rv = verify_shreds_cpu(thread_pool, &batches, &pubkeys); assert_eq!(rv, vec![vec![1; num_packets]; num_batches]); - let rv = verify_shreds_gpu(&batches, &pubkeys, &recycler_cache); + let rv = verify_shreds_gpu(thread_pool, &batches, &pubkeys, &recycler_cache); assert_eq!(rv, vec![vec![1; num_packets]; num_batches]); } #[test] fn test_sigverify_shreds_sign_gpu() { - run_test_sigverify_shreds_sign_gpu(0xdead_c0de); + let thread_pool = ThreadPoolBuilder::new().num_threads(3).build().unwrap(); + run_test_sigverify_shreds_sign_gpu(&thread_pool, 0xdead_c0de); } - fn run_test_sigverify_shreds_sign_cpu(slot: Slot) { + fn run_test_sigverify_shreds_sign_cpu(thread_pool: &ThreadPool, slot: Slot) { solana_logger::setup(); let mut batches = [PacketBatch::default()]; @@ -727,17 +736,18 @@ mod tests { .cloned() .collect(); //unsigned - let rv = verify_shreds_cpu(&batches, &pubkeys); + let rv = verify_shreds_cpu(thread_pool, &batches, &pubkeys); assert_eq!(rv, vec![vec![0]]); //signed - sign_shreds_cpu(&keypair, &mut batches); - let rv = verify_shreds_cpu(&batches, &pubkeys); + sign_shreds_cpu(thread_pool, &keypair, &mut batches); + let rv = verify_shreds_cpu(thread_pool, &batches, &pubkeys); assert_eq!(rv, vec![vec![1]]); } #[test] fn test_sigverify_shreds_sign_cpu() { - run_test_sigverify_shreds_sign_cpu(0xdead_c0de); + let thread_pool = ThreadPoolBuilder::new().num_threads(3).build().unwrap(); + run_test_sigverify_shreds_sign_cpu(&thread_pool, 0xdead_c0de); } fn make_transaction(rng: &mut R) -> Transaction { @@ -844,6 +854,7 @@ mod tests { #[test] fn test_verify_shreds_fuzz() { let mut rng = rand::thread_rng(); + let thread_pool = ThreadPoolBuilder::new().num_threads(3).build().unwrap(); let recycler_cache = RecyclerCache::default(); let keypairs = repeat_with(|| rng.gen_range(169_367_809, 169_906_789)) .map(|slot| (slot, Keypair::new())) @@ -857,7 +868,7 @@ mod tests { .collect(); let mut packets = make_packets(&mut rng, &shreds); assert_eq!( - verify_shreds_gpu(&packets, &pubkeys, &recycler_cache), + verify_shreds_gpu(&thread_pool, &packets, &pubkeys, &recycler_cache), packets .iter() .map(|batch| vec![1u8; batch.len()]) @@ -879,12 +890,16 @@ mod tests { .collect::>() }) .collect(); - assert_eq!(verify_shreds_gpu(&packets, &pubkeys, &recycler_cache), out); + assert_eq!( + verify_shreds_gpu(&thread_pool, &packets, &pubkeys, &recycler_cache), + out + ); } #[test] fn test_sign_shreds_gpu() { let mut rng = rand::thread_rng(); + let thread_pool = ThreadPoolBuilder::new().num_threads(3).build().unwrap(); let recycler_cache = RecyclerCache::default(); let shreds = { let keypairs = repeat_with(|| rng.gen_range(169_367_809, 169_906_789)) @@ -906,7 +921,7 @@ mod tests { let mut packets = make_packets(&mut rng, &shreds); // Assert that initially all signatrues are invalid. assert_eq!( - verify_shreds_gpu(&packets, &pubkeys, &recycler_cache), + verify_shreds_gpu(&thread_pool, &packets, &pubkeys, &recycler_cache), packets .iter() .map(|batch| vec![0u8; batch.len()]) @@ -915,9 +930,15 @@ mod tests { let pinned_keypair = sign_shreds_gpu_pinned_keypair(&keypair, &recycler_cache); let pinned_keypair = Some(Arc::new(pinned_keypair)); // Sign and verify shreds signatures. - sign_shreds_gpu(&keypair, &pinned_keypair, &mut packets, &recycler_cache); + sign_shreds_gpu( + &thread_pool, + &keypair, + &pinned_keypair, + &mut packets, + &recycler_cache, + ); assert_eq!( - verify_shreds_gpu(&packets, &pubkeys, &recycler_cache), + verify_shreds_gpu(&thread_pool, &packets, &pubkeys, &recycler_cache), packets .iter() .map(|batch| vec![1u8; batch.len()]) From 05211363f2be2b9718234aaed04bf63ad3bdb31b Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Tue, 21 Mar 2023 18:32:31 +0000 Subject: [PATCH 367/465] v1.14: moves turbine-disabled check to shred-fetch-stage (backport of #30799) (#30828) * moves turbine-disabled check to shred-fetch-stage (#30799) If turbine_disabled is true, the commit discards turbine packets earlier in the pipeline so that they won't interfere with the deduper and the packets can get through once turbine is enabled again. This is a prerequisite of: https://github.com/solana-labs/solana/pull/30786 so that local-cluster tests pass. (cherry picked from commit e66edeb180334ba20f712e05c03e7cb7c4b3993d) # Conflicts: # core/src/shred_fetch_stage.rs * resolves mergify merge conflicts --------- Co-authored-by: behzad nouri --- core/src/shred_fetch_stage.rs | 36 ++++++++++++++++++++++++----------- core/src/sigverify_shreds.rs | 14 +++----------- core/src/tvu.rs | 2 +- 3 files changed, 29 insertions(+), 23 deletions(-) diff --git a/core/src/shred_fetch_stage.rs b/core/src/shred_fetch_stage.rs index af0de30b34fd83..33c9cc10b66fe9 100644 --- a/core/src/shred_fetch_stage.rs +++ b/core/src/shred_fetch_stage.rs @@ -18,7 +18,10 @@ use { solana_streamer::streamer::{self, PacketBatchReceiver, StreamerReceiveStats}, std::{ net::UdpSocket, - sync::{atomic::AtomicBool, Arc, RwLock}, + sync::{ + atomic::{AtomicBool, Ordering}, + Arc, RwLock, + }, thread::{self, Builder, JoinHandle}, time::{Duration, Instant}, }, @@ -40,6 +43,7 @@ impl ShredFetchStage { name: &'static str, flags: PacketFlags, repair_context: Option<(&UdpSocket, &ClusterInfo)>, + turbine_disabled: Arc, ) { const STATS_SUBMIT_CADENCE: Duration = Duration::from_secs(1); let mut shreds_received = LruCache::new(DEFAULT_LRU_SIZE); @@ -93,17 +97,20 @@ impl ShredFetchStage { let max_slot = last_slot + 2 * slots_per_epoch; let should_drop_merkle_shreds = |shred_slot| should_drop_merkle_shreds(shred_slot, &root_bank); + let turbine_disabled = turbine_disabled.load(Ordering::Relaxed); for packet in packet_batch.iter_mut() { - if should_discard_packet( - packet, - last_root, - max_slot, - shred_version, - &packet_hasher, - &mut shreds_received, - should_drop_merkle_shreds, - &mut stats, - ) { + if turbine_disabled + || should_discard_packet( + packet, + last_root, + max_slot, + shred_version, + &packet_hasher, + &mut shreds_received, + should_drop_merkle_shreds, + &mut stats, + ) + { packet.meta.set_discard(true); } else { packet.meta.flags.insert(flags); @@ -116,6 +123,7 @@ impl ShredFetchStage { } } + #[allow(clippy::too_many_arguments)] fn packet_modifier( sockets: Vec>, exit: &Arc, @@ -126,6 +134,7 @@ impl ShredFetchStage { name: &'static str, flags: PacketFlags, repair_context: Option<(Arc, Arc)>, + turbine_disabled: Arc, ) -> (Vec>, JoinHandle<()>) { let (packet_sender, packet_receiver) = unbounded(); let streamers = sockets @@ -157,6 +166,7 @@ impl ShredFetchStage { name, flags, repair_context, + turbine_disabled, ) }) .unwrap(); @@ -171,6 +181,7 @@ impl ShredFetchStage { shred_version: u16, bank_forks: Arc>, cluster_info: Arc, + turbine_disabled: Arc, exit: &Arc, ) -> Self { let recycler = PacketBatchRecycler::warmed(100, 1024); @@ -185,6 +196,7 @@ impl ShredFetchStage { "shred_fetch", PacketFlags::empty(), None, // repair_context + turbine_disabled.clone(), ); let (tvu_forwards_threads, fwd_thread_hdl) = Self::packet_modifier( @@ -197,6 +209,7 @@ impl ShredFetchStage { "shred_fetch_tvu_forwards", PacketFlags::FORWARDED, None, // repair_context + turbine_disabled.clone(), ); let (repair_receiver, repair_handler) = Self::packet_modifier( @@ -209,6 +222,7 @@ impl ShredFetchStage { "shred_fetch_repair", PacketFlags::REPAIR, Some((repair_socket, cluster_info)), + turbine_disabled, ); tvu_threads.extend(tvu_forwards_threads.into_iter()); diff --git a/core/src/sigverify_shreds.rs b/core/src/sigverify_shreds.rs index 75fdcf8e5e8bdc..2a71a1347ddbb6 100644 --- a/core/src/sigverify_shreds.rs +++ b/core/src/sigverify_shreds.rs @@ -11,10 +11,7 @@ use { solana_sdk::{clock::Slot, pubkey::Pubkey, signature::Signer}, std::{ collections::HashMap, - sync::{ - atomic::{AtomicBool, Ordering}, - Arc, RwLock, - }, + sync::{Arc, RwLock}, thread::{Builder, JoinHandle}, time::{Duration, Instant}, }, @@ -34,7 +31,6 @@ pub(crate) fn spawn_shred_sigverify( shred_fetch_receiver: Receiver, retransmit_sender: Sender>>, verified_sender: Sender>, - turbine_disabled: Arc, ) -> JoinHandle<()> { let recycler_cache = RecyclerCache::warmed(); let mut stats = ShredSigVerifyStats::new(Instant::now()); @@ -57,7 +53,6 @@ pub(crate) fn spawn_shred_sigverify( &shred_fetch_receiver, &retransmit_sender, &verified_sender, - &turbine_disabled, &mut stats, ) { Ok(()) => (), @@ -84,7 +79,6 @@ fn run_shred_sigverify( shred_fetch_receiver: &Receiver, retransmit_sender: &Sender>>, verified_sender: &Sender>, - turbine_disabled: &AtomicBool, stats: &mut ShredSigVerifyStats, ) -> Result<(), Error> { const RECV_TIMEOUT: Duration = Duration::from_secs(1); @@ -114,10 +108,8 @@ fn run_shred_sigverify( .map(<[u8]>::to_vec) .collect(); stats.num_retransmit_shreds += shreds.len(); - if !turbine_disabled.load(Ordering::Relaxed) { - retransmit_sender.send(shreds)?; - verified_sender.send(packets)?; - } + retransmit_sender.send(shreds)?; + verified_sender.send(packets)?; stats.elapsed_micros += now.elapsed().as_micros() as u64; Ok(()) } diff --git a/core/src/tvu.rs b/core/src/tvu.rs index 3d8d30ff97d4d4..303c949d726b25 100644 --- a/core/src/tvu.rs +++ b/core/src/tvu.rs @@ -154,6 +154,7 @@ impl Tvu { tvu_config.shred_version, bank_forks.clone(), cluster_info.clone(), + turbine_disabled, exit, ); @@ -166,7 +167,6 @@ impl Tvu { fetch_receiver, retransmit_sender.clone(), verified_sender, - turbine_disabled, ); let retransmit_stage = RetransmitStage::new( From 54bc70f6785ae7d206e8c034f94bb6b6ce50cca0 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Wed, 22 Mar 2023 13:15:56 +0000 Subject: [PATCH 368/465] v1.14: increases shred-fetch-stage deduper capacity and reset-cycle (backport of #30690) (#30832) * increases shred-fetch-stage deduper capacity and reset-cycle (#30690) (cherry picked from commit 93f696dac720ec6beac70ea01508872e6851bd36) * resolves mergify merge conflicts * bumps timeout to 120s --------- Co-authored-by: behzad nouri --- core/src/packet_hasher.rs | 5 --- core/src/shred_fetch_stage.rs | 82 +++++++++++++++-------------------- core/src/validator.rs | 3 +- perf/src/sigverify.rs | 2 +- 4 files changed, 36 insertions(+), 56 deletions(-) diff --git a/core/src/packet_hasher.rs b/core/src/packet_hasher.rs index 58d40ec4ba238d..2734b025ce33fc 100644 --- a/core/src/packet_hasher.rs +++ b/core/src/packet_hasher.rs @@ -4,7 +4,6 @@ use { ahash::AHasher, rand::{thread_rng, Rng}, - solana_perf::packet::Packet, std::hash::Hasher, }; @@ -24,10 +23,6 @@ impl Default for PacketHasher { } impl PacketHasher { - pub(crate) fn hash_packet(&self, packet: &Packet) -> u64 { - self.hash_data(packet.data(..).unwrap_or_default()) - } - pub(crate) fn hash_shred(&self, shred: &[u8]) -> u64 { self.hash_data(shred) } diff --git a/core/src/shred_fetch_stage.rs b/core/src/shred_fetch_stage.rs index 33c9cc10b66fe9..92887dcb9293f5 100644 --- a/core/src/shred_fetch_stage.rs +++ b/core/src/shred_fetch_stage.rs @@ -1,15 +1,14 @@ //! The `shred_fetch_stage` pulls shreds from UDP sockets and sends it to a channel. use { - crate::{ - cluster_nodes::check_feature_activation, packet_hasher::PacketHasher, - serve_repair::ServeRepair, - }, + crate::{cluster_nodes::check_feature_activation, serve_repair::ServeRepair}, crossbeam_channel::{unbounded, Sender}, - lru::LruCache, solana_gossip::cluster_info::ClusterInfo, solana_ledger::shred::{should_discard_shred, ShredFetchStats}, - solana_perf::packet::{Packet, PacketBatch, PacketBatchRecycler, PacketFlags}, + solana_perf::{ + packet::{Packet, PacketBatch, PacketBatchRecycler, PacketFlags}, + sigverify::Deduper, + }, solana_runtime::{bank::Bank, bank_forks::BankForks}, solana_sdk::{ clock::{Slot, DEFAULT_MS_PER_SLOT}, @@ -27,7 +26,9 @@ use { }, }; -const DEFAULT_LRU_SIZE: usize = 10_000; +const DEDUPER_FALSE_POSITIVE_RATE: f64 = 0.001; +const DEDUPER_NUM_BITS: u64 = 637_534_199; // 76MB +const DEDUPER_RESET_CYCLE: Duration = Duration::from_secs(5 * 60); pub(crate) struct ShredFetchStage { thread_hdls: Vec>, @@ -46,7 +47,9 @@ impl ShredFetchStage { turbine_disabled: Arc, ) { const STATS_SUBMIT_CADENCE: Duration = Duration::from_secs(1); - let mut shreds_received = LruCache::new(DEFAULT_LRU_SIZE); + let mut rng = rand::thread_rng(); + let mut deduper = + Deduper::<2>::new(&mut rng, DEDUPER_FALSE_POSITIVE_RATE, DEDUPER_NUM_BITS); let mut last_updated = Instant::now(); let mut keypair = repair_context .as_ref() @@ -59,13 +62,11 @@ impl ShredFetchStage { let mut slots_per_epoch = 0; let mut stats = ShredFetchStats::default(); - let mut packet_hasher = PacketHasher::default(); for mut packet_batch in recvr { + deduper.maybe_reset(&mut rng, &DEDUPER_RESET_CYCLE); if last_updated.elapsed().as_millis() as u64 > DEFAULT_MS_PER_SLOT { last_updated = Instant::now(); - packet_hasher.reset(); - shreds_received.clear(); { let bank_forks_r = bank_forks.read().unwrap(); last_root = bank_forks_r.root(); @@ -105,8 +106,7 @@ impl ShredFetchStage { last_root, max_slot, shred_version, - &packet_hasher, - &mut shreds_received, + &deduper, should_drop_merkle_shreds, &mut stats, ) @@ -246,13 +246,12 @@ impl ShredFetchStage { // Returns true if the packet should be marked as discard. #[must_use] -fn should_discard_packet( +fn should_discard_packet( packet: &Packet, root: Slot, max_slot: Slot, // Max slot to ingest shreds for. shred_version: u16, - packet_hasher: &PacketHasher, - shreds_received: &mut LruCache, + deduper: &Deduper, should_drop_merkle_shreds: impl Fn(Slot) -> bool, stats: &mut ShredFetchStats, ) -> bool { @@ -266,13 +265,11 @@ fn should_discard_packet( ) { return true; } - let hash = packet_hasher.hash_packet(packet); - match shreds_received.put(hash, ()) { - None => false, - Some(()) => { - stats.duplicate_shred += 1; - true - } + if deduper.dedup_packet(packet) { + stats.duplicate_shred += 1; + true + } else { + false } } @@ -302,7 +299,8 @@ mod tests { #[test] fn test_data_code_same_index() { solana_logger::setup(); - let mut shreds_received = LruCache::new(DEFAULT_LRU_SIZE); + let mut rng = rand::thread_rng(); + let deduper = Deduper::<2>::new(&mut rng, DEDUPER_FALSE_POSITIVE_RATE, 640_007); let mut packet = Packet::default(); let mut stats = ShredFetchStats::default(); @@ -320,8 +318,6 @@ mod tests { ); shred.copy_to_packet(&mut packet); - let hasher = PacketHasher::default(); - let last_root = 0; let last_slot = 100; let slots_per_epoch = 10; @@ -331,8 +327,7 @@ mod tests { last_root, max_slot, shred_version, - &hasher, - &mut shreds_received, + &deduper, |_| false, // should_drop_merkle_shreds &mut stats, )); @@ -347,8 +342,7 @@ mod tests { last_root, max_slot, shred_version, - &hasher, - &mut shreds_received, + &deduper, |_| false, // should_drop_merkle_shreds &mut stats, )); @@ -357,7 +351,8 @@ mod tests { #[test] fn test_shred_filter() { solana_logger::setup(); - let mut shreds_received = LruCache::new(DEFAULT_LRU_SIZE); + let mut rng = rand::thread_rng(); + let deduper = Deduper::<2>::new(&mut rng, DEDUPER_FALSE_POSITIVE_RATE, 640_007); let mut packet = Packet::default(); let mut stats = ShredFetchStats::default(); let last_root = 0; @@ -366,16 +361,13 @@ mod tests { let shred_version = 59445; let max_slot = last_slot + 2 * slots_per_epoch; - let hasher = PacketHasher::default(); - // packet size is 0, so cannot get index assert!(should_discard_packet( &packet, last_root, max_slot, shred_version, - &hasher, - &mut shreds_received, + &deduper, |_| false, // should_drop_merkle_shreds &mut stats, )); @@ -398,8 +390,7 @@ mod tests { 3, max_slot, shred_version, - &hasher, - &mut shreds_received, + &deduper, |_| false, // should_drop_merkle_shreds &mut stats, )); @@ -410,8 +401,7 @@ mod tests { last_root, max_slot, 345, // shred_version - &hasher, - &mut shreds_received, + &deduper, |_| false, // should_drop_merkle_shreds &mut stats, )); @@ -423,20 +413,18 @@ mod tests { last_root, max_slot, shred_version, - &hasher, - &mut shreds_received, + &deduper, |_| false, // should_drop_merkle_shreds &mut stats, )); - // shreds_received should filter duplicate + // deduper should filter duplicate assert!(should_discard_packet( &packet, last_root, max_slot, shred_version, - &hasher, - &mut shreds_received, + &deduper, |_| false, // should_drop_merkle_shreds &mut stats, )); @@ -460,8 +448,7 @@ mod tests { last_root, max_slot, shred_version, - &hasher, - &mut shreds_received, + &deduper, |_| false, // should_drop_merkle_shreds &mut stats, )); @@ -474,8 +461,7 @@ mod tests { last_root, max_slot, shred_version, - &hasher, - &mut shreds_received, + &deduper, |_| false, // should_drop_merkle_shreds &mut stats, )); diff --git a/core/src/validator.rs b/core/src/validator.rs index b2853d512b4693..a2580f054ea86c 100644 --- a/core/src/validator.rs +++ b/core/src/validator.rs @@ -2268,8 +2268,7 @@ mod tests { sender.send(()).unwrap(); }); - // timeout of 30s for shutting down the validators - let timeout = Duration::from_secs(30); + let timeout = Duration::from_secs(120); if let Err(RecvTimeoutError::Timeout) = receiver.recv_timeout(timeout) { panic!("timeout for shutting down validators",); } diff --git a/perf/src/sigverify.rs b/perf/src/sigverify.rs index 0a49cf30638984..201e8f8d77d743 100644 --- a/perf/src/sigverify.rs +++ b/perf/src/sigverify.rs @@ -534,7 +534,7 @@ impl Deduper { // Returns true if the packet is duplicate. #[must_use] #[allow(clippy::integer_arithmetic)] - fn dedup_packet(&self, packet: &Packet) -> bool { + pub fn dedup_packet(&self, packet: &Packet) -> bool { // Should not dedup packet if already discarded. debug_assert!(!packet.meta.discard()); let mut out = true; From b9522c9fc54fd5c3813f2e3f097692dc4c4d3645 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Wed, 22 Mar 2023 16:51:10 +0000 Subject: [PATCH 369/465] v1.14: removes false_positive_rate field from Deduper (backport of #30788) (#30846) * removes false_positive_rate field from Deduper (#30788) removes the false_positive_rate field from the Deduper Deduper.false_positive_rate field is misleading because it is not enforced until maybe_reset is called. But then maybe_reset can be invoked with an explicit argument. (cherry picked from commit 46614c0e9f66773d375ef8b49095158c86a6ac2f) # Conflicts: # perf/src/deduper.rs * resolves mergify merge conflicts --------- Co-authored-by: behzad nouri --- core/src/shred_fetch_stage.rs | 9 ++-- core/src/sigverify_stage.rs | 5 +- perf/benches/dedup.rs | 20 +++++--- perf/src/sigverify.rs | 97 ++++++++++++++++++++++++----------- 4 files changed, 85 insertions(+), 46 deletions(-) diff --git a/core/src/shred_fetch_stage.rs b/core/src/shred_fetch_stage.rs index 92887dcb9293f5..e197744b7a762e 100644 --- a/core/src/shred_fetch_stage.rs +++ b/core/src/shred_fetch_stage.rs @@ -48,8 +48,7 @@ impl ShredFetchStage { ) { const STATS_SUBMIT_CADENCE: Duration = Duration::from_secs(1); let mut rng = rand::thread_rng(); - let mut deduper = - Deduper::<2>::new(&mut rng, DEDUPER_FALSE_POSITIVE_RATE, DEDUPER_NUM_BITS); + let mut deduper = Deduper::<2>::new(&mut rng, DEDUPER_NUM_BITS); let mut last_updated = Instant::now(); let mut keypair = repair_context .as_ref() @@ -64,7 +63,7 @@ impl ShredFetchStage { let mut stats = ShredFetchStats::default(); for mut packet_batch in recvr { - deduper.maybe_reset(&mut rng, &DEDUPER_RESET_CYCLE); + deduper.maybe_reset(&mut rng, DEDUPER_FALSE_POSITIVE_RATE, DEDUPER_RESET_CYCLE); if last_updated.elapsed().as_millis() as u64 > DEFAULT_MS_PER_SLOT { last_updated = Instant::now(); { @@ -300,7 +299,7 @@ mod tests { fn test_data_code_same_index() { solana_logger::setup(); let mut rng = rand::thread_rng(); - let deduper = Deduper::<2>::new(&mut rng, DEDUPER_FALSE_POSITIVE_RATE, 640_007); + let deduper = Deduper::<2>::new(&mut rng, /*num_bits:*/ 640_007); let mut packet = Packet::default(); let mut stats = ShredFetchStats::default(); @@ -352,7 +351,7 @@ mod tests { fn test_shred_filter() { solana_logger::setup(); let mut rng = rand::thread_rng(); - let deduper = Deduper::<2>::new(&mut rng, DEDUPER_FALSE_POSITIVE_RATE, 640_007); + let deduper = Deduper::<2>::new(&mut rng, /*num_bits:*/ 640_007); let mut packet = Packet::default(); let mut stats = ShredFetchStats::default(); let last_root = 0; diff --git a/core/src/sigverify_stage.rs b/core/src/sigverify_stage.rs index b442503472518c..20494754e6d2b3 100644 --- a/core/src/sigverify_stage.rs +++ b/core/src/sigverify_stage.rs @@ -416,10 +416,9 @@ impl SigVerifyStage { .name("solSigVerifier".to_string()) .spawn(move || { let mut rng = rand::thread_rng(); - let mut deduper = - Deduper::<2>::new(&mut rng, DEDUPER_FALSE_POSITIVE_RATE, DEDUPER_NUM_BITS); + let mut deduper = Deduper::<2>::new(&mut rng, DEDUPER_NUM_BITS); loop { - deduper.maybe_reset(&mut rng, &MAX_DEDUPER_AGE); + deduper.maybe_reset(&mut rng, DEDUPER_FALSE_POSITIVE_RATE, MAX_DEDUPER_AGE); if let Err(e) = Self::verifier(&deduper, &packet_receiver, &mut verifier, &mut stats) { diff --git a/perf/benches/dedup.rs b/perf/benches/dedup.rs index 13e8e056b2e18d..99f4d52947920b 100644 --- a/perf/benches/dedup.rs +++ b/perf/benches/dedup.rs @@ -25,12 +25,14 @@ fn test_packet_with_size(size: usize, rng: &mut ThreadRng) -> Vec { fn do_bench_dedup_packets(bencher: &mut Bencher, mut batches: Vec) { // verify packets let mut rng = rand::thread_rng(); - let mut deduper = Deduper::<2>::new( - &mut rng, /*false_positive_rate:*/ 0.001, /*num_bits:*/ 63_999_979, - ); + let mut deduper = Deduper::<2>::new(&mut rng, /*num_bits:*/ 63_999_979); bencher.iter(|| { let _ans = deduper.dedup_packets_and_count_discards(&mut batches, |_, _, _| ()); - deduper.maybe_reset(&mut rng, /*reset_cycle:*/ &Duration::from_secs(2)); + deduper.maybe_reset( + &mut rng, + 0.001, // false_positive_rate + Duration::from_secs(2), // reset_cycle + ); batches .iter_mut() .for_each(|b| b.iter_mut().for_each(|p| p.meta.set_discard(false))); @@ -116,10 +118,12 @@ fn bench_dedup_baseline(bencher: &mut Bencher) { #[ignore] fn bench_dedup_reset(bencher: &mut Bencher) { let mut rng = rand::thread_rng(); - let mut deduper = Deduper::<2>::new( - &mut rng, /*false_positive_rate:*/ 0.001, /*num_bits:*/ 63_999_979, - ); + let mut deduper = Deduper::<2>::new(&mut rng, /*num_bits:*/ 63_999_979); bencher.iter(|| { - deduper.maybe_reset(&mut rng, /*reset_cycle:*/ &Duration::from_millis(0)); + deduper.maybe_reset( + &mut rng, + 0.001, // false_positive_rate + Duration::from_millis(0), // reset_cycle + ); }); } diff --git a/perf/src/sigverify.rs b/perf/src/sigverify.rs index 201e8f8d77d743..a7b74a1afe3f54 100644 --- a/perf/src/sigverify.rs +++ b/perf/src/sigverify.rs @@ -500,35 +500,46 @@ pub struct Deduper { bits: Vec, seeds: [(u128, u128); K], clock: Instant, - // Maximum number of one bits before the false positive - // rate exceeds the specified threshold. - capacity: u64, popcount: AtomicU64, // Number of one bits in self.bits. } impl Deduper { - pub fn new(rng: &mut R, false_positive_rate: f64, num_bits: u64) -> Self { - assert!(0.0 < false_positive_rate && false_positive_rate < 1.0); - let size = usize::try_from(num_bits.checked_add(63).unwrap() / 64).unwrap(); - let capacity = num_bits as f64 * false_positive_rate.powf(1f64 / K as f64); + pub fn new(rng: &mut R, num_bits: u64) -> Self { + let size = num_bits.checked_add(63).unwrap() / 64; + let size = usize::try_from(size).unwrap(); Self { num_bits, seeds: [(); K].map(|_| rng.gen()), clock: Instant::now(), bits: repeat_with(AtomicU64::default).take(size).collect(), - capacity: capacity as u64, popcount: AtomicU64::default(), } } - pub fn maybe_reset(&mut self, rng: &mut R, reset_cycle: &Duration) { + fn false_positive_rate(&self) -> f64 { let popcount = self.popcount.load(Ordering::Relaxed); - if popcount >= self.capacity || &self.clock.elapsed() >= reset_cycle { + let ones_ratio = popcount.min(self.num_bits) as f64 / self.num_bits as f64; + ones_ratio.powi(K as i32) + } + + /// Resets the Deduper if either it is older than the reset_cycle or it is + /// saturated enough that false positive rate exceeds specified threshold. + /// Returns true if the deduper was saturated. + pub fn maybe_reset( + &mut self, + rng: &mut R, + false_positive_rate: f64, + reset_cycle: Duration, + ) -> bool { + assert!(0.0 < false_positive_rate && false_positive_rate < 1.0); + let saturated = self.false_positive_rate() >= false_positive_rate; + if saturated || self.clock.elapsed() >= reset_cycle { self.seeds = [(); K].map(|_| rng.gen()); self.clock = Instant::now(); self.bits.fill_with(AtomicU64::default); self.popcount = AtomicU64::default(); } + saturated } // Returns true if the packet is duplicate. @@ -1595,9 +1606,7 @@ mod tests { to_packet_batches(&std::iter::repeat(tx).take(1024).collect::>(), 128); let packet_count = sigverify::count_packets_in_batches(&batches); let mut rng = rand::thread_rng(); - let filter = Deduper::<2>::new( - &mut rng, /*false_positive_rate:*/ 0.001, /*num_bits:*/ 63_999_979, - ); + let filter = Deduper::<2>::new(&mut rng, /*num_bits:*/ 63_999_979); let mut num_deduped = 0; let discard = filter.dedup_packets_and_count_discards( &mut batches, @@ -1612,46 +1621,57 @@ mod tests { #[test] fn test_dedup_diff() { let mut rng = rand::thread_rng(); - let mut filter = Deduper::<2>::new( - &mut rng, /*false_positive_rate:*/ 0.001, /*num_bits:*/ 63_999_979, - ); + let mut filter = Deduper::<2>::new(&mut rng, /*num_bits:*/ 63_999_979); let mut batches = to_packet_batches(&(0..1024).map(|_| test_tx()).collect::>(), 128); let discard = filter.dedup_packets_and_count_discards(&mut batches, |_, _, _| ()) as usize; // because dedup uses a threadpool, there maybe up to N threads of txs that go through assert_eq!(discard, 0); - filter.maybe_reset(&mut rng, /*reset_cycle:*/ &Duration::from_millis(0)); + assert!(!filter.maybe_reset( + &mut rng, + 0.001, // false_positive_rate + Duration::from_millis(0), // reset_cycle + )); for i in filter.bits { assert_eq!(i.load(Ordering::Relaxed), 0); } } + fn get_capacity(num_bits: u64, false_positive_rate: f64) -> u64 { + (num_bits as f64 * false_positive_rate.powf(1f64 / K as f64)) as u64 + } + #[test] #[ignore] fn test_dedup_saturated() { + const NUM_BITS: u64 = 63_999_979; + const FALSE_POSITIVE_RATE: f64 = 0.001; let mut rng = rand::thread_rng(); - let filter = Deduper::<2>::new( - &mut rng, /*false_positive_rate:*/ 0.001, /*num_bits:*/ 63_999_979, - ); + let mut filter = Deduper::<2>::new(&mut rng, NUM_BITS); + let capacity = get_capacity::<2>(NUM_BITS, FALSE_POSITIVE_RATE); let mut discard = 0; - assert!(filter.popcount.load(Ordering::Relaxed) < filter.capacity); + assert!(filter.popcount.load(Ordering::Relaxed) < capacity); for i in 0..1000 { let mut batches = to_packet_batches(&(0..1000).map(|_| test_tx()).collect::>(), 128); discard += filter.dedup_packets_and_count_discards(&mut batches, |_, _, _| ()) as usize; trace!("{} {}", i, discard); - if filter.popcount.load(Ordering::Relaxed) >= filter.capacity { + if filter.popcount.load(Ordering::Relaxed) > capacity { break; } } - assert!(filter.popcount.load(Ordering::Relaxed) >= filter.capacity); + assert!(filter.popcount.load(Ordering::Relaxed) > capacity); + assert!(filter.false_positive_rate() >= FALSE_POSITIVE_RATE); + assert!(filter.maybe_reset( + &mut rng, + FALSE_POSITIVE_RATE, + Duration::from_millis(0), // reset_cycle + )); } #[test] fn test_dedup_false_positive() { let mut rng = rand::thread_rng(); - let filter = Deduper::<2>::new( - &mut rng, /*false_positive_rate:*/ 0.001, /*num_bits:*/ 63_999_979, - ); + let filter = Deduper::<2>::new(&mut rng, /*num_bits:*/ 63_999_979); let mut discard = 0; for i in 0..10 { let mut batches = @@ -1676,8 +1696,18 @@ mod tests { #[test_case(637_534_199, 0.0001, 6_375_341)] fn test_dedup_capacity(num_bits: u64, false_positive_rate: f64, capacity: u64) { let mut rng = rand::thread_rng(); - let deduper = Deduper::<2>::new(&mut rng, false_positive_rate, num_bits); - assert_eq!(deduper.capacity, capacity); + assert_eq!(get_capacity::<2>(num_bits, false_positive_rate), capacity); + let mut deduper = Deduper::<2>::new(&mut rng, num_bits); + assert_eq!(deduper.false_positive_rate(), 0.0); + deduper.popcount.store(capacity, Ordering::Relaxed); + assert!(deduper.false_positive_rate() < false_positive_rate); + deduper.popcount.store(capacity + 1, Ordering::Relaxed); + assert!(deduper.false_positive_rate() >= false_positive_rate); + assert!(deduper.maybe_reset( + &mut rng, + false_positive_rate, + Duration::from_millis(0), // reset_cycle + )); } #[test_case([0xf9; 32], 3_199_997, 101_192, 51_414, 70, 101_125)] @@ -1694,9 +1724,10 @@ mod tests { num_dups: usize, popcount: u64, ) { + const FALSE_POSITIVE_RATE: f64 = 0.001; let mut rng = ChaChaRng::from_seed(seed); - let deduper = Deduper::<2>::new(&mut rng, /*false_positive_rate:*/ 0.001, num_bits); - assert_eq!(deduper.capacity, capacity); + let mut deduper = Deduper::<2>::new(&mut rng, num_bits); + assert_eq!(get_capacity::<2>(num_bits, FALSE_POSITIVE_RATE), capacity); let mut packet = Packet::new([0u8; PACKET_DATA_SIZE], Meta::default()); let mut dup_count = 0usize; for _ in 0..num_packets { @@ -1710,6 +1741,12 @@ mod tests { } assert_eq!(dup_count, num_dups); assert_eq!(deduper.popcount.load(Ordering::Relaxed), popcount); + assert!(deduper.false_positive_rate() < FALSE_POSITIVE_RATE); + assert!(!deduper.maybe_reset( + &mut rng, + FALSE_POSITIVE_RATE, + Duration::from_millis(0), // reset_cycle + )); } #[test] From 6f28fcf0413eb3ff5aa5c9ec5d40e6ebbb422ab6 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Wed, 22 Mar 2023 18:49:40 +0000 Subject: [PATCH 370/465] v1.14: adds metrics tracking deduper saturations (backport of #30779) (#30852) adds metrics tracking deduper saturations (#30779) (cherry picked from commit 4b595ebaaf9cb0605a4bb30bea3a217f1c851b81) Co-authored-by: behzad nouri --- core/src/shred_fetch_stage.rs | 4 +++- core/src/sigverify_stage.rs | 6 +++++- ledger/src/shred/stats.rs | 2 ++ 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/core/src/shred_fetch_stage.rs b/core/src/shred_fetch_stage.rs index e197744b7a762e..941a0300cb5918 100644 --- a/core/src/shred_fetch_stage.rs +++ b/core/src/shred_fetch_stage.rs @@ -63,7 +63,9 @@ impl ShredFetchStage { let mut stats = ShredFetchStats::default(); for mut packet_batch in recvr { - deduper.maybe_reset(&mut rng, DEDUPER_FALSE_POSITIVE_RATE, DEDUPER_RESET_CYCLE); + if deduper.maybe_reset(&mut rng, DEDUPER_FALSE_POSITIVE_RATE, DEDUPER_RESET_CYCLE) { + stats.num_deduper_saturations += 1; + } if last_updated.elapsed().as_millis() as u64 > DEFAULT_MS_PER_SLOT { last_updated = Instant::now(); { diff --git a/core/src/sigverify_stage.rs b/core/src/sigverify_stage.rs index 20494754e6d2b3..2a7853308b97db 100644 --- a/core/src/sigverify_stage.rs +++ b/core/src/sigverify_stage.rs @@ -80,6 +80,7 @@ struct SigVerifierStats { dedup_packets_pp_us_hist: histogram::Histogram, // per-packet time to call verify_batch batches_hist: histogram::Histogram, // number of packet batches per verify call packets_hist: histogram::Histogram, // number of packets per verify call + num_deduper_saturations: usize, total_batches: usize, total_packets: usize, total_dedup: usize, @@ -196,6 +197,7 @@ impl SigVerifierStats { ("packets_min", self.packets_hist.minimum().unwrap_or(0), i64), ("packets_max", self.packets_hist.maximum().unwrap_or(0), i64), ("packets_mean", self.packets_hist.mean().unwrap_or(0), i64), + ("num_deduper_saturations", self.num_deduper_saturations, i64), ("total_batches", self.total_batches, i64), ("total_packets", self.total_packets, i64), ("total_dedup", self.total_dedup, i64), @@ -418,7 +420,9 @@ impl SigVerifyStage { let mut rng = rand::thread_rng(); let mut deduper = Deduper::<2>::new(&mut rng, DEDUPER_NUM_BITS); loop { - deduper.maybe_reset(&mut rng, DEDUPER_FALSE_POSITIVE_RATE, MAX_DEDUPER_AGE); + if deduper.maybe_reset(&mut rng, DEDUPER_FALSE_POSITIVE_RATE, MAX_DEDUPER_AGE) { + stats.num_deduper_saturations += 1; + } if let Err(e) = Self::verifier(&deduper, &packet_receiver, &mut verifier, &mut stats) { diff --git a/ledger/src/shred/stats.rs b/ledger/src/shred/stats.rs index 0087ba6061bad8..d998488630beca 100644 --- a/ledger/src/shred/stats.rs +++ b/ledger/src/shred/stats.rs @@ -32,6 +32,7 @@ pub struct ProcessShredsStats { pub struct ShredFetchStats { pub index_overrun: usize, pub shred_count: usize, + pub num_deduper_saturations: usize, pub(crate) num_shreds_merkle_code: usize, pub(crate) num_shreds_merkle_data: usize, pub ping_count: usize, @@ -117,6 +118,7 @@ impl ShredFetchStats { name, ("index_overrun", self.index_overrun, i64), ("shred_count", self.shred_count, i64), + ("num_deduper_saturations", self.num_deduper_saturations, i64), ("num_shreds_merkle_code", self.num_shreds_merkle_code, i64), ("num_shreds_merkle_data", self.num_shreds_merkle_data, i64), ("ping_count", self.ping_count, i64), From 5fdbf28c18c1f4a4bf6c08075f506dc79405b8cc Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Wed, 22 Mar 2023 20:58:42 +0000 Subject: [PATCH 371/465] v1.14: generalizes deduper to work with any hashable type (backport of #30753) (#30856) * generalizes deduper to work with any hashable type (#30753) generalizes Deduper to work with any hashable type Current Deduper is hard-coded only for Packet type. In order to use Deduper in retransmit-stage, we need to dedup types other than Packet. The commit generalizes Deduper to any hashable type. (cherry picked from commit 9ad77485ce43bf0ea398d4bfa53c15abbccbfabc) # Conflicts: # core/src/sigverify_stage.rs # perf/benches/dedup.rs # perf/src/deduper.rs * resolves mergify merge conflicts --------- Co-authored-by: behzad nouri --- core/src/shred_fetch_stage.rs | 14 ++++-- core/src/sigverify_stage.rs | 13 ++--- perf/benches/dedup.rs | 9 ++-- perf/src/sigverify.rs | 91 +++++++++++++++++++---------------- 4 files changed, 71 insertions(+), 56 deletions(-) diff --git a/core/src/shred_fetch_stage.rs b/core/src/shred_fetch_stage.rs index 941a0300cb5918..2a8e1ad0ee503a 100644 --- a/core/src/shred_fetch_stage.rs +++ b/core/src/shred_fetch_stage.rs @@ -48,7 +48,7 @@ impl ShredFetchStage { ) { const STATS_SUBMIT_CADENCE: Duration = Duration::from_secs(1); let mut rng = rand::thread_rng(); - let mut deduper = Deduper::<2>::new(&mut rng, DEDUPER_NUM_BITS); + let mut deduper = Deduper::<2, [u8]>::new(&mut rng, DEDUPER_NUM_BITS); let mut last_updated = Instant::now(); let mut keypair = repair_context .as_ref() @@ -252,7 +252,7 @@ fn should_discard_packet( root: Slot, max_slot: Slot, // Max slot to ingest shreds for. shred_version: u16, - deduper: &Deduper, + deduper: &Deduper, should_drop_merkle_shreds: impl Fn(Slot) -> bool, stats: &mut ShredFetchStats, ) -> bool { @@ -266,7 +266,11 @@ fn should_discard_packet( ) { return true; } - if deduper.dedup_packet(packet) { + if packet + .data(..) + .map(|data| deduper.dedup(data)) + .unwrap_or(true) + { stats.duplicate_shred += 1; true } else { @@ -301,7 +305,7 @@ mod tests { fn test_data_code_same_index() { solana_logger::setup(); let mut rng = rand::thread_rng(); - let deduper = Deduper::<2>::new(&mut rng, /*num_bits:*/ 640_007); + let deduper = Deduper::<2, [u8]>::new(&mut rng, /*num_bits:*/ 640_007); let mut packet = Packet::default(); let mut stats = ShredFetchStats::default(); @@ -353,7 +357,7 @@ mod tests { fn test_shred_filter() { solana_logger::setup(); let mut rng = rand::thread_rng(); - let deduper = Deduper::<2>::new(&mut rng, /*num_bits:*/ 640_007); + let deduper = Deduper::<2, [u8]>::new(&mut rng, /*num_bits:*/ 640_007); let mut packet = Packet::default(); let mut stats = ShredFetchStats::default(); let last_root = 0; diff --git a/core/src/sigverify_stage.rs b/core/src/sigverify_stage.rs index 2a7853308b97db..a5ac50083cb51a 100644 --- a/core/src/sigverify_stage.rs +++ b/core/src/sigverify_stage.rs @@ -14,8 +14,8 @@ use { solana_perf::{ packet::{Packet, PacketBatch}, sigverify::{ - count_discarded_packets, count_packets_in_batches, count_valid_packets, shrink_batches, - Deduper, + count_discarded_packets, count_packets_in_batches, count_valid_packets, + dedup_packets_and_count_discards, shrink_batches, Deduper, }, }, solana_sdk::timing, @@ -291,8 +291,8 @@ impl SigVerifyStage { (shrink_time.as_us(), shrink_total) } - fn verifier( - deduper: &Deduper<2>, + fn verifier( + deduper: &Deduper, recvr: &find_packet_sender_stake_stage::FindPacketSenderStakeReceiver, verifier: &mut T, stats: &mut SigVerifierStats, @@ -316,7 +316,8 @@ impl SigVerifyStage { discard_random_time.stop(); let mut dedup_time = Measure::start("sigverify_dedup_time"); - let discard_or_dedup_fail = deduper.dedup_packets_and_count_discards( + let discard_or_dedup_fail = dedup_packets_and_count_discards( + deduper, &mut batches, #[inline(always)] |received_packet, removed_before_sigverify_stage, is_dup| { @@ -418,7 +419,7 @@ impl SigVerifyStage { .name("solSigVerifier".to_string()) .spawn(move || { let mut rng = rand::thread_rng(); - let mut deduper = Deduper::<2>::new(&mut rng, DEDUPER_NUM_BITS); + let mut deduper = Deduper::<2, [u8]>::new(&mut rng, DEDUPER_NUM_BITS); loop { if deduper.maybe_reset(&mut rng, DEDUPER_FALSE_POSITIVE_RATE, MAX_DEDUPER_AGE) { stats.num_deduper_saturations += 1; diff --git a/perf/benches/dedup.rs b/perf/benches/dedup.rs index 99f4d52947920b..842d3ad071e0d9 100644 --- a/perf/benches/dedup.rs +++ b/perf/benches/dedup.rs @@ -7,7 +7,7 @@ use { rand::prelude::*, solana_perf::{ packet::{to_packet_batches, PacketBatch}, - sigverify::Deduper, + sigverify::{self, Deduper}, }, std::time::Duration, test::Bencher, @@ -25,9 +25,10 @@ fn test_packet_with_size(size: usize, rng: &mut ThreadRng) -> Vec { fn do_bench_dedup_packets(bencher: &mut Bencher, mut batches: Vec) { // verify packets let mut rng = rand::thread_rng(); - let mut deduper = Deduper::<2>::new(&mut rng, /*num_bits:*/ 63_999_979); + let mut deduper = Deduper::<2, [u8]>::new(&mut rng, /*num_bits:*/ 63_999_979); bencher.iter(|| { - let _ans = deduper.dedup_packets_and_count_discards(&mut batches, |_, _, _| ()); + let _ans = + sigverify::dedup_packets_and_count_discards(&deduper, &mut batches, |_, _, _| ()); deduper.maybe_reset( &mut rng, 0.001, // false_positive_rate @@ -118,7 +119,7 @@ fn bench_dedup_baseline(bencher: &mut Bencher) { #[ignore] fn bench_dedup_reset(bencher: &mut Bencher) { let mut rng = rand::thread_rng(); - let mut deduper = Deduper::<2>::new(&mut rng, /*num_bits:*/ 63_999_979); + let mut deduper = Deduper::<2, [u8]>::new(&mut rng, /*num_bits:*/ 63_999_979); bencher.iter(|| { deduper.maybe_reset( &mut rng, diff --git a/perf/src/sigverify.rs b/perf/src/sigverify.rs index a7b74a1afe3f54..b50ef21d166965 100644 --- a/perf/src/sigverify.rs +++ b/perf/src/sigverify.rs @@ -24,8 +24,9 @@ use { }, std::{ convert::TryFrom, - hash::{Hash as _, Hasher}, + hash::Hasher, iter::repeat_with, + marker::PhantomData, mem::size_of, sync::atomic::{AtomicU64, Ordering}, time::{Duration, Instant}, @@ -495,15 +496,16 @@ pub fn generate_offsets( ) } -pub struct Deduper { +pub struct Deduper { num_bits: u64, bits: Vec, seeds: [(u128, u128); K], clock: Instant, popcount: AtomicU64, // Number of one bits in self.bits. + _phantom: PhantomData, } -impl Deduper { +impl Deduper { pub fn new(rng: &mut R, num_bits: u64) -> Self { let size = num_bits.checked_add(63).unwrap() / 64; let size = usize::try_from(size).unwrap(); @@ -513,6 +515,7 @@ impl Deduper { clock: Instant::now(), bits: repeat_with(AtomicU64::default).take(size).collect(), popcount: AtomicU64::default(), + _phantom: PhantomData::::default(), } } @@ -542,16 +545,14 @@ impl Deduper { saturated } - // Returns true if the packet is duplicate. + // Returns true if the data is duplicate. #[must_use] #[allow(clippy::integer_arithmetic)] - pub fn dedup_packet(&self, packet: &Packet) -> bool { - // Should not dedup packet if already discarded. - debug_assert!(!packet.meta.discard()); + pub fn dedup(&self, data: &T) -> bool { let mut out = true; for seed in self.seeds { let mut hasher = AHasher::new_with_keys(seed.0, seed.1); - packet.data(..).unwrap_or_default().hash(&mut hasher); + data.hash(&mut hasher); let hash: u64 = hasher.finish() % self.num_bits; let index = (hash >> 6) as usize; let mask: u64 = 1u64 << (hash & 63); @@ -563,28 +564,32 @@ impl Deduper { } out } +} - pub fn dedup_packets_and_count_discards( - &self, - batches: &mut [PacketBatch], - mut process_received_packet: impl FnMut(&mut Packet, bool, bool), - ) -> u64 { - batches - .iter_mut() - .flat_map(PacketBatch::iter_mut) - .map(|packet| { - if packet.meta.discard() { - process_received_packet(packet, true, false); - } else if self.dedup_packet(packet) { - packet.meta.set_discard(true); - process_received_packet(packet, false, true); - } else { - process_received_packet(packet, false, false); - } - u64::from(packet.meta.discard()) - }) - .sum() - } +pub fn dedup_packets_and_count_discards( + deduper: &Deduper, + batches: &mut [PacketBatch], + mut process_received_packet: impl FnMut(&mut Packet, bool, bool), +) -> u64 { + batches + .iter_mut() + .flat_map(PacketBatch::iter_mut) + .map(|packet| { + if packet.meta.discard() { + process_received_packet(packet, true, false); + } else if packet + .data(..) + .map(|data| deduper.dedup(data)) + .unwrap_or(true) + { + packet.meta.set_discard(true); + process_received_packet(packet, false, true); + } else { + process_received_packet(packet, false, false); + } + u64::from(packet.meta.discard()) + }) + .sum() } //inplace shrink a batch of packets @@ -1606,9 +1611,10 @@ mod tests { to_packet_batches(&std::iter::repeat(tx).take(1024).collect::>(), 128); let packet_count = sigverify::count_packets_in_batches(&batches); let mut rng = rand::thread_rng(); - let filter = Deduper::<2>::new(&mut rng, /*num_bits:*/ 63_999_979); + let filter = Deduper::<2, [u8]>::new(&mut rng, /*num_bits:*/ 63_999_979); let mut num_deduped = 0; - let discard = filter.dedup_packets_and_count_discards( + let discard = dedup_packets_and_count_discards( + &filter, &mut batches, |_deduped_packet, _removed_before_sigverify_stage, _is_dup| { num_deduped += 1; @@ -1621,9 +1627,10 @@ mod tests { #[test] fn test_dedup_diff() { let mut rng = rand::thread_rng(); - let mut filter = Deduper::<2>::new(&mut rng, /*num_bits:*/ 63_999_979); + let mut filter = Deduper::<2, [u8]>::new(&mut rng, /*num_bits:*/ 63_999_979); let mut batches = to_packet_batches(&(0..1024).map(|_| test_tx()).collect::>(), 128); - let discard = filter.dedup_packets_and_count_discards(&mut batches, |_, _, _| ()) as usize; + let discard = + dedup_packets_and_count_discards(&filter, &mut batches, |_, _, _| ()) as usize; // because dedup uses a threadpool, there maybe up to N threads of txs that go through assert_eq!(discard, 0); assert!(!filter.maybe_reset( @@ -1646,14 +1653,15 @@ mod tests { const NUM_BITS: u64 = 63_999_979; const FALSE_POSITIVE_RATE: f64 = 0.001; let mut rng = rand::thread_rng(); - let mut filter = Deduper::<2>::new(&mut rng, NUM_BITS); + let mut filter = Deduper::<2, [u8]>::new(&mut rng, NUM_BITS); let capacity = get_capacity::<2>(NUM_BITS, FALSE_POSITIVE_RATE); let mut discard = 0; assert!(filter.popcount.load(Ordering::Relaxed) < capacity); for i in 0..1000 { let mut batches = to_packet_batches(&(0..1000).map(|_| test_tx()).collect::>(), 128); - discard += filter.dedup_packets_and_count_discards(&mut batches, |_, _, _| ()) as usize; + discard += + dedup_packets_and_count_discards(&filter, &mut batches, |_, _, _| ()) as usize; trace!("{} {}", i, discard); if filter.popcount.load(Ordering::Relaxed) > capacity { break; @@ -1671,12 +1679,13 @@ mod tests { #[test] fn test_dedup_false_positive() { let mut rng = rand::thread_rng(); - let filter = Deduper::<2>::new(&mut rng, /*num_bits:*/ 63_999_979); + let filter = Deduper::<2, [u8]>::new(&mut rng, /*num_bits:*/ 63_999_979); let mut discard = 0; for i in 0..10 { let mut batches = to_packet_batches(&(0..1024).map(|_| test_tx()).collect::>(), 128); - discard += filter.dedup_packets_and_count_discards(&mut batches, |_, _, _| ()) as usize; + discard += + dedup_packets_and_count_discards(&filter, &mut batches, |_, _, _| ()) as usize; debug!("false positive rate: {}/{}", discard, i * 1024); } //allow for 1 false positive even if extremely unlikely @@ -1697,7 +1706,7 @@ mod tests { fn test_dedup_capacity(num_bits: u64, false_positive_rate: f64, capacity: u64) { let mut rng = rand::thread_rng(); assert_eq!(get_capacity::<2>(num_bits, false_positive_rate), capacity); - let mut deduper = Deduper::<2>::new(&mut rng, num_bits); + let mut deduper = Deduper::<2, [u8]>::new(&mut rng, num_bits); assert_eq!(deduper.false_positive_rate(), 0.0); deduper.popcount.store(capacity, Ordering::Relaxed); assert!(deduper.false_positive_rate() < false_positive_rate); @@ -1726,7 +1735,7 @@ mod tests { ) { const FALSE_POSITIVE_RATE: f64 = 0.001; let mut rng = ChaChaRng::from_seed(seed); - let mut deduper = Deduper::<2>::new(&mut rng, num_bits); + let mut deduper = Deduper::<2, [u8]>::new(&mut rng, num_bits); assert_eq!(get_capacity::<2>(num_bits, FALSE_POSITIVE_RATE), capacity); let mut packet = Packet::new([0u8; PACKET_DATA_SIZE], Meta::default()); let mut dup_count = 0usize; @@ -1734,10 +1743,10 @@ mod tests { let size = rng.gen_range(0, PACKET_DATA_SIZE); packet.meta.size = size; rng.fill(&mut packet.buffer_mut()[0..size]); - if deduper.dedup_packet(&packet) { + if deduper.dedup(packet.data(..).unwrap()) { dup_count += 1; } - assert!(deduper.dedup_packet(&packet)); + assert!(deduper.dedup(packet.data(..).unwrap())); } assert_eq!(dup_count, num_dups); assert_eq!(deduper.popcount.load(Ordering::Relaxed), popcount); From 8c5f685aa375da3f437bcae97123c0c72a38b9ad Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Wed, 22 Mar 2023 23:00:09 +0000 Subject: [PATCH 372/465] v1.14: increases retransmit-stage deduper capacity and reset-cycle (backport of #30758) (#30860) * increases retransmit-stage deduper capacity and reset-cycle (#30758) For duplicate block detection, for each (slot, shred-index, shred-type) we need to allow 2 different shreds to be retransmitted. The commit implements this using two bloom-filter dedupers: * Shreds are deduplicated using the 1st deduper. * If a shred is not a duplicate, then we check if: (slot, shred-index, shred-type, k) is not a duplicate for either k = 0 or k = 1 using the 2nd deduper, and if so then the shred is retransmitted. This allows to achieve larger capactiy compared to current LRU-cache. (cherry picked from commit 5d9aba5548b17d1763683efac9cb0f5a67d0b76d) # Conflicts: # core/src/lib.rs # core/src/retransmit_stage.rs * resolves mergify merge conflicts --------- Co-authored-by: behzad nouri --- core/src/lib.rs | 1 - core/src/packet_hasher.rs | 39 -------- core/src/retransmit_stage.rs | 183 +++++++++++------------------------ ledger/src/blockstore.rs | 2 +- ledger/src/shred.rs | 2 +- 5 files changed, 60 insertions(+), 167 deletions(-) delete mode 100644 core/src/packet_hasher.rs diff --git a/core/src/lib.rs b/core/src/lib.rs index 33efb883df8281..129e0bea5f2e2a 100644 --- a/core/src/lib.rs +++ b/core/src/lib.rs @@ -38,7 +38,6 @@ pub mod ledger_metric_report_service; pub mod multi_iterator_scanner; pub mod optimistic_confirmation_verifier; pub mod outstanding_requests; -mod packet_hasher; pub mod packet_threshold; pub mod poh_timing_report_service; pub mod poh_timing_reporter; diff --git a/core/src/packet_hasher.rs b/core/src/packet_hasher.rs deleted file mode 100644 index 2734b025ce33fc..00000000000000 --- a/core/src/packet_hasher.rs +++ /dev/null @@ -1,39 +0,0 @@ -// Get a unique hash value for a packet -// Used in retransmit and shred fetch to prevent dos with same packet data. - -use { - ahash::AHasher, - rand::{thread_rng, Rng}, - std::hash::Hasher, -}; - -#[derive(Clone)] -pub(crate) struct PacketHasher { - seed1: u128, - seed2: u128, -} - -impl Default for PacketHasher { - fn default() -> Self { - Self { - seed1: thread_rng().gen::(), - seed2: thread_rng().gen::(), - } - } -} - -impl PacketHasher { - pub(crate) fn hash_shred(&self, shred: &[u8]) -> u64 { - self.hash_data(shred) - } - - fn hash_data(&self, data: &[u8]) -> u64 { - let mut hasher = AHasher::new_with_keys(self.seed1, self.seed2); - hasher.write(data); - hasher.finish() - } - - pub(crate) fn reset(&mut self) { - *self = Self::default(); - } -} diff --git a/core/src/retransmit_stage.rs b/core/src/retransmit_stage.rs index e31821ec59f89e..3f048a2433acea 100644 --- a/core/src/retransmit_stage.rs +++ b/core/src/retransmit_stage.rs @@ -2,13 +2,11 @@ #![allow(clippy::rc_buffer)] use { - crate::{ - cluster_nodes::{self, ClusterNodes, ClusterNodesCache, Error, MAX_NUM_TURBINE_HOPS}, - packet_hasher::PacketHasher, - }, + crate::cluster_nodes::{self, ClusterNodes, ClusterNodesCache, Error, MAX_NUM_TURBINE_HOPS}, crossbeam_channel::{Receiver, RecvTimeoutError}, itertools::{izip, Itertools}, lru::LruCache, + rand::Rng, rayon::{prelude::*, ThreadPool, ThreadPoolBuilder}, solana_client::rpc_response::SlotUpdate, solana_gossip::{ @@ -19,6 +17,7 @@ use { shred::{self, ShredId}, }, solana_measure::measure::Measure, + solana_perf::sigverify::Deduper, solana_rayon_threadlimit::get_thread_count, solana_rpc::{max_slots::MaxSlots, rpc_subscriptions::RpcSubscriptions}, solana_runtime::{bank::Bank, bank_forks::BankForks}, @@ -42,7 +41,9 @@ use { }; const MAX_DUPLICATE_COUNT: usize = 2; -const DEFAULT_LRU_SIZE: usize = 1 << 20; +const DEDUPER_FALSE_POSITIVE_RATE: f64 = 0.001; +const DEDUPER_NUM_BITS: u64 = 637_534_199; // 76MB +const DEDUPER_RESET_CYCLE: Duration = Duration::from_secs(5 * 60); // Minimum number of shreds to use rayon parallel iterators. const PAR_ITER_MIN_NUM_SHREDS: usize = 2; @@ -131,45 +132,36 @@ impl RetransmitStats { } } -// Map of shred (slot, index, type) => list of hash values seen for that key. -type ShredFilter = LruCache>; +struct ShredDeduper { + deduper: Deduper, + shred_id_filter: Deduper, +} -// Returns true if shred is already received and should skip retransmit. -fn should_skip_retransmit( - key: ShredId, - shred: &[u8], - shreds_received: &mut ShredFilter, - packet_hasher: &PacketHasher, -) -> bool { - match shreds_received.get_mut(&key) { - Some(sent) if sent.len() >= MAX_DUPLICATE_COUNT => true, - Some(sent) => { - let hash = packet_hasher.hash_shred(shred); - if sent.contains(&hash) { - true - } else { - sent.push(hash); - false - } - } - None => { - let hash = packet_hasher.hash_shred(shred); - shreds_received.put(key, vec![hash]); - false +impl ShredDeduper { + fn new(rng: &mut R, num_bits: u64) -> Self { + Self { + deduper: Deduper::new(rng, num_bits), + shred_id_filter: Deduper::new(rng, num_bits), } } -} -fn maybe_reset_shreds_received_cache( - shreds_received: &mut ShredFilter, - packet_hasher: &mut PacketHasher, - hasher_reset_ts: &mut Instant, -) { - const UPDATE_INTERVAL: Duration = Duration::from_secs(1); - if hasher_reset_ts.elapsed() >= UPDATE_INTERVAL { - *hasher_reset_ts = Instant::now(); - shreds_received.clear(); - packet_hasher.reset(); + fn maybe_reset( + &mut self, + rng: &mut R, + false_positive_rate: f64, + reset_cycle: Duration, + ) { + self.deduper + .maybe_reset(rng, false_positive_rate, reset_cycle); + self.shred_id_filter + .maybe_reset(rng, false_positive_rate, reset_cycle); + } + + fn dedup(&self, key: ShredId, shred: &[u8], max_duplicate_count: usize) -> bool { + // In order to detect duplicate blocks across cluster, we retransmit + // max_duplicate_count different shreds for each ShredId. + self.deduper.dedup(shred) + || (0..max_duplicate_count).all(|i| self.shred_id_filter.dedup(&(key, i))) } } @@ -183,9 +175,7 @@ fn retransmit( sockets: &[UdpSocket], stats: &mut RetransmitStats, cluster_nodes_cache: &ClusterNodesCache, - hasher_reset_ts: &mut Instant, - shreds_received: &mut ShredFilter, - packet_hasher: &mut PacketHasher, + shred_deduper: &mut ShredDeduper<2>, max_slots: &MaxSlots, rpc_subscriptions: Option<&RpcSubscriptions>, ) -> Result<(), RecvTimeoutError> { @@ -205,7 +195,11 @@ fn retransmit( stats.epoch_fetch += epoch_fetch.as_us(); let mut epoch_cache_update = Measure::start("retransmit_epoch_cache_update"); - maybe_reset_shreds_received_cache(shreds_received, packet_hasher, hasher_reset_ts); + shred_deduper.maybe_reset( + &mut rand::thread_rng(), + DEDUPER_FALSE_POSITIVE_RATE, + DEDUPER_RESET_CYCLE, + ); epoch_cache_update.stop(); stats.epoch_cache_update += epoch_cache_update.as_us(); // Lookup slot leader and cluster nodes for each slot. @@ -213,7 +207,7 @@ fn retransmit( .into_iter() .filter_map(|shred| { let key = shred::layout::get_shred_id(&shred)?; - if should_skip_retransmit(key, &shred, shreds_received, packet_hasher) { + if shred_deduper.dedup(key, &shred, MAX_DUPLICATE_COUNT) { stats.num_shreds_skipped += 1; None } else { @@ -377,10 +371,9 @@ pub fn retransmitter( CLUSTER_NODES_CACHE_NUM_EPOCH_CAP, CLUSTER_NODES_CACHE_TTL, ); - let mut hasher_reset_ts = Instant::now(); + let mut rng = rand::thread_rng(); + let mut shred_deduper = ShredDeduper::<2>::new(&mut rng, DEDUPER_NUM_BITS); let mut stats = RetransmitStats::new(Instant::now()); - let mut shreds_received = LruCache::::new(DEFAULT_LRU_SIZE); - let mut packet_hasher = PacketHasher::default(); let num_threads = get_thread_count().min(8).max(sockets.len()); let thread_pool = ThreadPoolBuilder::new() .num_threads(num_threads) @@ -399,9 +392,7 @@ pub fn retransmitter( &sockets, &mut stats, &cluster_nodes_cache, - &mut hasher_reset_ts, - &mut shreds_received, - &mut packet_hasher, + &mut shred_deduper, &max_slots, rpc_subscriptions.as_deref(), ) { @@ -593,6 +584,8 @@ impl RetransmitSlotStats { mod tests { use { super::*, + rand::SeedableRng, + rand_chacha::ChaChaRng, solana_ledger::shred::{Shred, ShredFlags}, }; @@ -611,22 +604,12 @@ mod tests { version, 0, ); - let mut shreds_received = LruCache::new(100); - let packet_hasher = PacketHasher::default(); + let mut rng = ChaChaRng::from_seed([0xa5; 32]); + let shred_deduper = ShredDeduper::<2>::new(&mut rng, /*num_bits:*/ 640_007); // unique shred for (1, 5) should pass - assert!(!should_skip_retransmit( - shred.id(), - shred.payload(), - &mut shreds_received, - &packet_hasher - )); + assert!(!shred_deduper.dedup(shred.id(), shred.payload(), MAX_DUPLICATE_COUNT)); // duplicate shred for (1, 5) blocked - assert!(should_skip_retransmit( - shred.id(), - shred.payload(), - &mut shreds_received, - &packet_hasher - )); + assert!(shred_deduper.dedup(shred.id(), shred.payload(), MAX_DUPLICATE_COUNT)); let shred = Shred::new_from_data( slot, @@ -639,19 +622,9 @@ mod tests { 0, ); // first duplicate shred for (1, 5) passed - assert!(!should_skip_retransmit( - shred.id(), - shred.payload(), - &mut shreds_received, - &packet_hasher - )); + assert!(!shred_deduper.dedup(shred.id(), shred.payload(), MAX_DUPLICATE_COUNT)); // then blocked - assert!(should_skip_retransmit( - shred.id(), - shred.payload(), - &mut shreds_received, - &packet_hasher - )); + assert!(shred_deduper.dedup(shred.id(), shred.payload(), MAX_DUPLICATE_COUNT)); let shred = Shred::new_from_data( slot, @@ -664,64 +637,24 @@ mod tests { 0, ); // 2nd duplicate shred for (1, 5) blocked - assert!(should_skip_retransmit( - shred.id(), - shred.payload(), - &mut shreds_received, - &packet_hasher - )); - assert!(should_skip_retransmit( - shred.id(), - shred.payload(), - &mut shreds_received, - &packet_hasher - )); + assert!(shred_deduper.dedup(shred.id(), shred.payload(), MAX_DUPLICATE_COUNT)); + assert!(shred_deduper.dedup(shred.id(), shred.payload(), MAX_DUPLICATE_COUNT)); let shred = Shred::new_from_parity_shard(slot, index, &[], 0, 1, 1, 0, version); // Coding at (1, 5) passes - assert!(!should_skip_retransmit( - shred.id(), - shred.payload(), - &mut shreds_received, - &packet_hasher - )); + assert!(!shred_deduper.dedup(shred.id(), shred.payload(), MAX_DUPLICATE_COUNT)); // then blocked - assert!(should_skip_retransmit( - shred.id(), - shred.payload(), - &mut shreds_received, - &packet_hasher - )); + assert!(shred_deduper.dedup(shred.id(), shred.payload(), MAX_DUPLICATE_COUNT)); let shred = Shred::new_from_parity_shard(slot, index, &[], 2, 1, 1, 0, version); // 2nd unique coding at (1, 5) passes - assert!(!should_skip_retransmit( - shred.id(), - shred.payload(), - &mut shreds_received, - &packet_hasher - )); + assert!(!shred_deduper.dedup(shred.id(), shred.payload(), MAX_DUPLICATE_COUNT)); // same again is blocked - assert!(should_skip_retransmit( - shred.id(), - shred.payload(), - &mut shreds_received, - &packet_hasher - )); + assert!(shred_deduper.dedup(shred.id(), shred.payload(), MAX_DUPLICATE_COUNT)); let shred = Shred::new_from_parity_shard(slot, index, &[], 3, 1, 1, 0, version); // Another unique coding at (1, 5) always blocked - assert!(should_skip_retransmit( - shred.id(), - shred.payload(), - &mut shreds_received, - &packet_hasher - )); - assert!(should_skip_retransmit( - shred.id(), - shred.payload(), - &mut shreds_received, - &packet_hasher - )); + assert!(shred_deduper.dedup(shred.id(), shred.payload(), MAX_DUPLICATE_COUNT)); + assert!(shred_deduper.dedup(shred.id(), shred.payload(), MAX_DUPLICATE_COUNT)); } } diff --git a/ledger/src/blockstore.rs b/ledger/src/blockstore.rs index ef5aad1eb35139..8f7f00cc302038 100644 --- a/ledger/src/blockstore.rs +++ b/ledger/src/blockstore.rs @@ -3160,7 +3160,7 @@ impl Blockstore { // given slot and index as this implies the leader generated two different shreds with // the same slot and index pub fn is_shred_duplicate(&self, shred: ShredId, payload: Vec) -> Option> { - let (slot, index, shred_type) = shred.unwrap(); + let (slot, index, shred_type) = shred.unpack(); let existing_shred = match shred_type { ShredType::Data => self.get_data_shred(slot, index as u64), ShredType::Code => self.get_coding_shred(slot, index as u64), diff --git a/ledger/src/shred.rs b/ledger/src/shred.rs index 2d8af56c83ad5b..05f63f4e7d2097 100644 --- a/ledger/src/shred.rs +++ b/ledger/src/shred.rs @@ -258,7 +258,7 @@ impl ShredId { self.0 } - pub(crate) fn unwrap(&self) -> (Slot, /*shred index:*/ u32, ShredType) { + pub(crate) fn unpack(&self) -> (Slot, /*shred index:*/ u32, ShredType) { (self.0, self.1, self.2) } From f1ccc41a9bb7037de14c2766320c59564dd4d0e4 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Wed, 22 Mar 2023 23:07:10 +0000 Subject: [PATCH 373/465] v1.14: moves shreds deduper to shred-sigverify stage (backport of #30786) (#30861) * moves shreds deduper to shred-sigverify stage (#30786) Shreds arriving at tvu/tvu_forward/repair sockets are each processed in a separate thread, and since each thread has its own deduper, the duplicates across these sockets are not filtered out. Using a common deduper across these threads will require an RwLock wrapper and may introduce lock contention. The commit instead moves the shred-deduper to shred-sigverify-stage where all these shreds arrive through the same channel. (cherry picked from commit 25b78118691350f53e758870e74458ca62930ce9) # Conflicts: # core/src/shred_fetch_stage.rs # core/src/sigverify_shreds.rs * resolves mergify merge conflicts --------- Co-authored-by: behzad nouri --- core/src/shred_fetch_stage.rs | 93 +++++------------------------------ core/src/sigverify_shreds.rs | 39 +++++++++++++-- ledger/src/shred/stats.rs | 4 -- 3 files changed, 47 insertions(+), 89 deletions(-) diff --git a/core/src/shred_fetch_stage.rs b/core/src/shred_fetch_stage.rs index 2a8e1ad0ee503a..770a8115c043fe 100644 --- a/core/src/shred_fetch_stage.rs +++ b/core/src/shred_fetch_stage.rs @@ -5,10 +5,7 @@ use { crossbeam_channel::{unbounded, Sender}, solana_gossip::cluster_info::ClusterInfo, solana_ledger::shred::{should_discard_shred, ShredFetchStats}, - solana_perf::{ - packet::{Packet, PacketBatch, PacketBatchRecycler, PacketFlags}, - sigverify::Deduper, - }, + solana_perf::packet::{PacketBatch, PacketBatchRecycler, PacketFlags}, solana_runtime::{bank::Bank, bank_forks::BankForks}, solana_sdk::{ clock::{Slot, DEFAULT_MS_PER_SLOT}, @@ -26,10 +23,6 @@ use { }, }; -const DEDUPER_FALSE_POSITIVE_RATE: f64 = 0.001; -const DEDUPER_NUM_BITS: u64 = 637_534_199; // 76MB -const DEDUPER_RESET_CYCLE: Duration = Duration::from_secs(5 * 60); - pub(crate) struct ShredFetchStage { thread_hdls: Vec>, } @@ -47,8 +40,6 @@ impl ShredFetchStage { turbine_disabled: Arc, ) { const STATS_SUBMIT_CADENCE: Duration = Duration::from_secs(1); - let mut rng = rand::thread_rng(); - let mut deduper = Deduper::<2, [u8]>::new(&mut rng, DEDUPER_NUM_BITS); let mut last_updated = Instant::now(); let mut keypair = repair_context .as_ref() @@ -63,9 +54,6 @@ impl ShredFetchStage { let mut stats = ShredFetchStats::default(); for mut packet_batch in recvr { - if deduper.maybe_reset(&mut rng, DEDUPER_FALSE_POSITIVE_RATE, DEDUPER_RESET_CYCLE) { - stats.num_deduper_saturations += 1; - } if last_updated.elapsed().as_millis() as u64 > DEFAULT_MS_PER_SLOT { last_updated = Instant::now(); { @@ -102,12 +90,11 @@ impl ShredFetchStage { let turbine_disabled = turbine_disabled.load(Ordering::Relaxed); for packet in packet_batch.iter_mut() { if turbine_disabled - || should_discard_packet( + || should_discard_shred( packet, last_root, max_slot, shred_version, - &deduper, should_drop_merkle_shreds, &mut stats, ) @@ -245,39 +232,6 @@ impl ShredFetchStage { } } -// Returns true if the packet should be marked as discard. -#[must_use] -fn should_discard_packet( - packet: &Packet, - root: Slot, - max_slot: Slot, // Max slot to ingest shreds for. - shred_version: u16, - deduper: &Deduper, - should_drop_merkle_shreds: impl Fn(Slot) -> bool, - stats: &mut ShredFetchStats, -) -> bool { - if should_discard_shred( - packet, - root, - max_slot, - shred_version, - should_drop_merkle_shreds, - stats, - ) { - return true; - } - if packet - .data(..) - .map(|data| deduper.dedup(data)) - .unwrap_or(true) - { - stats.duplicate_shred += 1; - true - } else { - false - } -} - #[must_use] fn should_drop_merkle_shreds(shred_slot: Slot, root_bank: &Bank) -> bool { check_feature_activation( @@ -299,13 +253,12 @@ mod tests { blockstore::MAX_DATA_SHREDS_PER_SLOT, shred::{ReedSolomonCache, Shred, ShredFlags}, }, + solana_sdk::packet::Packet, }; #[test] fn test_data_code_same_index() { solana_logger::setup(); - let mut rng = rand::thread_rng(); - let deduper = Deduper::<2, [u8]>::new(&mut rng, /*num_bits:*/ 640_007); let mut packet = Packet::default(); let mut stats = ShredFetchStats::default(); @@ -327,12 +280,11 @@ mod tests { let last_slot = 100; let slots_per_epoch = 10; let max_slot = last_slot + 2 * slots_per_epoch; - assert!(!should_discard_packet( + assert!(!should_discard_shred( &packet, last_root, max_slot, shred_version, - &deduper, |_| false, // should_drop_merkle_shreds &mut stats, )); @@ -342,12 +294,11 @@ mod tests { &ReedSolomonCache::default(), ); coding[0].copy_to_packet(&mut packet); - assert!(!should_discard_packet( + assert!(!should_discard_shred( &packet, last_root, max_slot, shred_version, - &deduper, |_| false, // should_drop_merkle_shreds &mut stats, )); @@ -356,8 +307,6 @@ mod tests { #[test] fn test_shred_filter() { solana_logger::setup(); - let mut rng = rand::thread_rng(); - let deduper = Deduper::<2, [u8]>::new(&mut rng, /*num_bits:*/ 640_007); let mut packet = Packet::default(); let mut stats = ShredFetchStats::default(); let last_root = 0; @@ -367,12 +316,11 @@ mod tests { let max_slot = last_slot + 2 * slots_per_epoch; // packet size is 0, so cannot get index - assert!(should_discard_packet( + assert!(should_discard_shred( &packet, last_root, max_slot, shred_version, - &deduper, |_| false, // should_drop_merkle_shreds &mut stats, )); @@ -390,50 +338,35 @@ mod tests { shred.copy_to_packet(&mut packet); // rejected slot is 2, root is 3 - assert!(should_discard_packet( + assert!(should_discard_shred( &packet, 3, max_slot, shred_version, - &deduper, |_| false, // should_drop_merkle_shreds &mut stats, )); assert_eq!(stats.slot_out_of_range, 1); - assert!(should_discard_packet( + assert!(should_discard_shred( &packet, last_root, max_slot, - 345, // shred_version - &deduper, + 345, // shred_version |_| false, // should_drop_merkle_shreds &mut stats, )); assert_eq!(stats.shred_version_mismatch, 1); // Accepted for 1,3 - assert!(!should_discard_packet( - &packet, - last_root, - max_slot, - shred_version, - &deduper, - |_| false, // should_drop_merkle_shreds - &mut stats, - )); - - // deduper should filter duplicate - assert!(should_discard_packet( + assert!(!should_discard_shred( &packet, last_root, max_slot, shred_version, - &deduper, |_| false, // should_drop_merkle_shreds &mut stats, )); - assert_eq!(stats.duplicate_shred, 1); let shred = Shred::new_from_data( 1_000_000, @@ -448,12 +381,11 @@ mod tests { shred.copy_to_packet(&mut packet); // Slot 1 million is too high - assert!(should_discard_packet( + assert!(should_discard_shred( &packet, last_root, max_slot, shred_version, - &deduper, |_| false, // should_drop_merkle_shreds &mut stats, )); @@ -461,12 +393,11 @@ mod tests { let index = MAX_DATA_SHREDS_PER_SLOT as u32; let shred = Shred::new_from_data(5, index, 0, &[], ShredFlags::LAST_SHRED_IN_SLOT, 0, 0, 0); shred.copy_to_packet(&mut packet); - assert!(should_discard_packet( + assert!(should_discard_shred( &packet, last_root, max_slot, shred_version, - &deduper, |_| false, // should_drop_merkle_shreds &mut stats, )); diff --git a/core/src/sigverify_shreds.rs b/core/src/sigverify_shreds.rs index 2a71a1347ddbb6..b2571987409fe3 100644 --- a/core/src/sigverify_shreds.rs +++ b/core/src/sigverify_shreds.rs @@ -1,11 +1,11 @@ use { crossbeam_channel::{Receiver, RecvTimeoutError, SendError, Sender}, - rayon::{ThreadPool, ThreadPoolBuilder}, + rayon::{prelude::*, ThreadPool, ThreadPoolBuilder}, solana_gossip::cluster_info::ClusterInfo, solana_ledger::{ leader_schedule_cache::LeaderScheduleCache, shred, sigverify_shreds::verify_shreds_gpu, }, - solana_perf::{self, packet::PacketBatch, recycler_cache::RecyclerCache}, + solana_perf::{self, packet::PacketBatch, recycler_cache::RecyclerCache, sigverify::Deduper}, solana_rayon_threadlimit::get_thread_count, solana_runtime::{bank::Bank, bank_forks::BankForks}, solana_sdk::{clock::Slot, pubkey::Pubkey, signature::Signer}, @@ -17,6 +17,10 @@ use { }, }; +const DEDUPER_FALSE_POSITIVE_RATE: f64 = 0.001; +const DEDUPER_NUM_BITS: u64 = 637_534_199; // 76MB +const DEDUPER_RESET_CYCLE: Duration = Duration::from_secs(5 * 60); + #[allow(clippy::enum_variant_names)] enum Error { RecvDisconnected, @@ -40,7 +44,12 @@ pub(crate) fn spawn_shred_sigverify( .build() .unwrap(); let run_shred_sigverify = move || { + let mut rng = rand::thread_rng(); + let mut deduper = Deduper::<2, [u8]>::new(&mut rng, DEDUPER_NUM_BITS); loop { + if deduper.maybe_reset(&mut rng, DEDUPER_FALSE_POSITIVE_RATE, DEDUPER_RESET_CYCLE) { + stats.num_deduper_saturations += 1; + } // We can't store the pubkey outside the loop // because the identity might be hot swapped. let self_pubkey = cluster_info.keypair().pubkey(); @@ -50,6 +59,7 @@ pub(crate) fn spawn_shred_sigverify( &bank_forks, &leader_schedule_cache, &recycler_cache, + &deduper, &shred_fetch_receiver, &retransmit_sender, &verified_sender, @@ -70,12 +80,13 @@ pub(crate) fn spawn_shred_sigverify( } #[allow(clippy::too_many_arguments)] -fn run_shred_sigverify( +fn run_shred_sigverify( thread_pool: &ThreadPool, self_pubkey: &Pubkey, bank_forks: &RwLock, leader_schedule_cache: &LeaderScheduleCache, recycler_cache: &RecyclerCache, + deduper: &Deduper, shred_fetch_receiver: &Receiver, retransmit_sender: &Sender>>, verified_sender: &Sender>, @@ -90,6 +101,20 @@ fn run_shred_sigverify( stats.num_iters += 1; stats.num_packets += packets.iter().map(PacketBatch::len).sum::(); stats.num_discards_pre += count_discards(&packets); + stats.num_duplicates += thread_pool.install(|| { + packets + .par_iter_mut() + .flatten() + .filter(|packet| { + !packet.meta.discard() + && packet + .data(..) + .map(|data| deduper.dedup(data)) + .unwrap_or(true) + }) + .map(|packet| packet.meta.set_discard(true)) + .count() + }); verify_packets( thread_pool, self_pubkey, @@ -198,8 +223,10 @@ struct ShredSigVerifyStats { since: Instant, num_iters: usize, num_packets: usize, - num_discards_pre: usize, + num_deduper_saturations: usize, num_discards_post: usize, + num_discards_pre: usize, + num_duplicates: usize, num_retransmit_shreds: usize, elapsed_micros: u64, } @@ -213,7 +240,9 @@ impl ShredSigVerifyStats { num_iters: 0usize, num_packets: 0usize, num_discards_pre: 0usize, + num_deduper_saturations: 0usize, num_discards_post: 0usize, + num_duplicates: 0usize, num_retransmit_shreds: 0usize, elapsed_micros: 0u64, } @@ -228,7 +257,9 @@ impl ShredSigVerifyStats { ("num_iters", self.num_iters, i64), ("num_packets", self.num_packets, i64), ("num_discards_pre", self.num_discards_pre, i64), + ("num_deduper_saturations", self.num_deduper_saturations, i64), ("num_discards_post", self.num_discards_post, i64), + ("num_duplicates", self.num_duplicates, i64), ("num_retransmit_shreds", self.num_retransmit_shreds, i64), ("elapsed_micros", self.elapsed_micros, i64), ); diff --git a/ledger/src/shred/stats.rs b/ledger/src/shred/stats.rs index d998488630beca..b1c4769d5f876c 100644 --- a/ledger/src/shred/stats.rs +++ b/ledger/src/shred/stats.rs @@ -32,7 +32,6 @@ pub struct ProcessShredsStats { pub struct ShredFetchStats { pub index_overrun: usize, pub shred_count: usize, - pub num_deduper_saturations: usize, pub(crate) num_shreds_merkle_code: usize, pub(crate) num_shreds_merkle_data: usize, pub ping_count: usize, @@ -40,7 +39,6 @@ pub struct ShredFetchStats { pub(crate) index_bad_deserialize: usize, pub(crate) index_out_of_bounds: usize, pub(crate) slot_bad_deserialize: usize, - pub duplicate_shred: usize, pub slot_out_of_range: usize, pub(crate) bad_shred_type: usize, pub shred_version_mismatch: usize, @@ -118,7 +116,6 @@ impl ShredFetchStats { name, ("index_overrun", self.index_overrun, i64), ("shred_count", self.shred_count, i64), - ("num_deduper_saturations", self.num_deduper_saturations, i64), ("num_shreds_merkle_code", self.num_shreds_merkle_code, i64), ("num_shreds_merkle_data", self.num_shreds_merkle_data, i64), ("ping_count", self.ping_count, i64), @@ -127,7 +124,6 @@ impl ShredFetchStats { ("index_bad_deserialize", self.index_bad_deserialize, i64), ("index_out_of_bounds", self.index_out_of_bounds, i64), ("slot_out_of_range", self.slot_out_of_range, i64), - ("duplicate_shred", self.duplicate_shred, i64), ("bad_shred_type", self.bad_shred_type, i64), ("shred_version_mismatch", self.shred_version_mismatch, i64), ("bad_parent_offset", self.bad_parent_offset, i64), From b29a37cf4c4c85ee74fa26544e2bbcc92738d8ea Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Thu, 23 Mar 2023 10:55:51 -0600 Subject: [PATCH 374/465] v1.14: cli: require one or more authority params in `stake-authorized-checked` (backport of #30863) (#30865) cli: require one or more authority params in `stake-authorized-checked` (#30863) * Require one or more authority params * Add auth list len check (cherry picked from commit 0291e8c702c75d277ecb9bacc265b13580d58d3d) Co-authored-by: Tyera --- cli/src/stake.rs | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/cli/src/stake.rs b/cli/src/stake.rs index dcdc2ad9285026..08b996a74f77d8 100644 --- a/cli/src/stake.rs +++ b/cli/src/stake.rs @@ -390,6 +390,7 @@ impl StakeSubCommands for App<'_, '_> { .value_name("KEYPAIR") .takes_value(true) .validator(is_valid_signer) + .required_unless("new_withdraw_authority") .help("New authorized staker") ) .arg( @@ -398,6 +399,7 @@ impl StakeSubCommands for App<'_, '_> { .value_name("KEYPAIR") .takes_value(true) .validator(is_valid_signer) + .required_unless("new_stake_authority") .help("New authorized withdrawer") ) .arg(stake_authority_arg()) @@ -946,6 +948,11 @@ pub fn parse_stake_authorize( default_signer.generate_unique_signers(bulk_signers, matches, wallet_manager)?; let compute_unit_price = value_of(matches, COMPUTE_UNIT_PRICE_ARG.name); + if new_authorizations.is_empty() { + return Err(CliError::BadParameter( + "New authorization list must include at least one authority".to_string(), + )); + } let new_authorizations = new_authorizations .into_iter() .map( From ee657ce40cf2914a05715e2ba4ba473d7c55c774 Mon Sep 17 00:00:00 2001 From: Will Hickey Date: Mon, 27 Mar 2023 12:47:48 -0500 Subject: [PATCH 375/465] Bump version to v1.14.18 (#30906) --- Cargo.lock | 484 ++++++++--------- account-decoder/Cargo.toml | 10 +- accounts-bench/Cargo.toml | 12 +- accounts-cluster-bench/Cargo.toml | 34 +- banking-bench/Cargo.toml | 26 +- banks-client/Cargo.toml | 12 +- banks-interface/Cargo.toml | 4 +- banks-server/Cargo.toml | 12 +- bench-streamer/Cargo.toml | 8 +- bench-tps/Cargo.toml | 38 +- bloom/Cargo.toml | 8 +- bucket_map/Cargo.toml | 8 +- clap-utils/Cargo.toml | 8 +- clap-v3-utils/Cargo.toml | 8 +- cli-config/Cargo.toml | 6 +- cli-output/Cargo.toml | 16 +- cli/Cargo.toml | 38 +- client-test/Cargo.toml | 32 +- client/Cargo.toml | 28 +- core/Cargo.toml | 56 +- dos/Cargo.toml | 30 +- download-utils/Cargo.toml | 6 +- entry/Cargo.toml | 16 +- faucet/Cargo.toml | 14 +- frozen-abi/Cargo.toml | 6 +- frozen-abi/macro/Cargo.toml | 2 +- genesis-utils/Cargo.toml | 8 +- genesis/Cargo.toml | 22 +- geyser-plugin-interface/Cargo.toml | 6 +- geyser-plugin-manager/Cargo.toml | 16 +- gossip/Cargo.toml | 38 +- install/Cargo.toml | 14 +- keygen/Cargo.toml | 12 +- ledger-tool/Cargo.toml | 30 +- ledger/Cargo.toml | 40 +- local-cluster/Cargo.toml | 28 +- log-analyzer/Cargo.toml | 6 +- logger/Cargo.toml | 2 +- measure/Cargo.toml | 4 +- merkle-root-bench/Cargo.toml | 12 +- merkle-tree/Cargo.toml | 4 +- metrics/Cargo.toml | 4 +- net-shaper/Cargo.toml | 4 +- net-utils/Cargo.toml | 8 +- notifier/Cargo.toml | 2 +- perf/Cargo.toml | 12 +- poh-bench/Cargo.toml | 14 +- poh/Cargo.toml | 20 +- program-runtime/Cargo.toml | 14 +- program-test/Cargo.toml | 20 +- .../address-lookup-table-tests/Cargo.toml | 8 +- programs/address-lookup-table/Cargo.toml | 12 +- programs/bpf-loader-tests/Cargo.toml | 8 +- programs/bpf/Cargo.lock | 490 +++++++++--------- programs/bpf/Cargo.toml | 28 +- programs/bpf/rust/128bit/Cargo.toml | 6 +- programs/bpf/rust/128bit_dep/Cargo.toml | 4 +- programs/bpf/rust/alloc/Cargo.toml | 4 +- programs/bpf/rust/call_depth/Cargo.toml | 4 +- programs/bpf/rust/caller_access/Cargo.toml | 4 +- programs/bpf/rust/curve25519/Cargo.toml | 6 +- programs/bpf/rust/custom_heap/Cargo.toml | 4 +- programs/bpf/rust/dep_crate/Cargo.toml | 6 +- .../bpf/rust/deprecated_loader/Cargo.toml | 4 +- programs/bpf/rust/dup_accounts/Cargo.toml | 4 +- programs/bpf/rust/error_handling/Cargo.toml | 4 +- programs/bpf/rust/external_spend/Cargo.toml | 4 +- programs/bpf/rust/finalize/Cargo.toml | 4 +- .../rust/get_minimum_delegation/Cargo.toml | 4 +- .../Cargo.toml | 4 +- .../rust/instruction_introspection/Cargo.toml | 4 +- programs/bpf/rust/invoke/Cargo.toml | 4 +- programs/bpf/rust/invoke_and_error/Cargo.toml | 4 +- programs/bpf/rust/invoke_and_ok/Cargo.toml | 4 +- .../bpf/rust/invoke_and_return/Cargo.toml | 4 +- programs/bpf/rust/invoked/Cargo.toml | 4 +- programs/bpf/rust/iter/Cargo.toml | 4 +- programs/bpf/rust/log_data/Cargo.toml | 4 +- programs/bpf/rust/many_args/Cargo.toml | 6 +- programs/bpf/rust/many_args_dep/Cargo.toml | 4 +- programs/bpf/rust/mem/Cargo.toml | 10 +- programs/bpf/rust/membuiltins/Cargo.toml | 6 +- programs/bpf/rust/noop/Cargo.toml | 4 +- programs/bpf/rust/panic/Cargo.toml | 4 +- programs/bpf/rust/param_passing/Cargo.toml | 6 +- .../bpf/rust/param_passing_dep/Cargo.toml | 4 +- programs/bpf/rust/rand/Cargo.toml | 4 +- programs/bpf/rust/realloc/Cargo.toml | 4 +- programs/bpf/rust/realloc_invoke/Cargo.toml | 6 +- .../bpf/rust/ro_account_modify/Cargo.toml | 4 +- programs/bpf/rust/ro_modify/Cargo.toml | 4 +- programs/bpf/rust/sanity/Cargo.toml | 10 +- .../bpf/rust/secp256k1_recover/Cargo.toml | 4 +- programs/bpf/rust/sha/Cargo.toml | 4 +- .../rust/sibling_inner_instruction/Cargo.toml | 4 +- .../bpf/rust/sibling_instruction/Cargo.toml | 4 +- programs/bpf/rust/simulation/Cargo.toml | 12 +- programs/bpf/rust/spoof1/Cargo.toml | 4 +- programs/bpf/rust/spoof1_system/Cargo.toml | 4 +- programs/bpf/rust/sysvar/Cargo.toml | 10 +- programs/bpf/rust/upgradeable/Cargo.toml | 4 +- programs/bpf/rust/upgraded/Cargo.toml | 4 +- programs/bpf_loader/Cargo.toml | 14 +- .../bpf_loader/gen-syscall-list/Cargo.toml | 2 +- programs/compute-budget/Cargo.toml | 6 +- programs/config/Cargo.toml | 8 +- programs/ed25519-tests/Cargo.toml | 6 +- programs/stake/Cargo.toml | 18 +- programs/vote/Cargo.toml | 14 +- programs/zk-token-proof/Cargo.toml | 8 +- rayon-threadlimit/Cargo.toml | 2 +- rbpf-cli/Cargo.toml | 10 +- remote-wallet/Cargo.toml | 4 +- rpc-test/Cargo.toml | 18 +- rpc/Cargo.toml | 48 +- runtime/Cargo.toml | 34 +- runtime/store-tool/Cargo.toml | 8 +- sdk/Cargo.toml | 12 +- sdk/cargo-build-bpf/Cargo.toml | 4 +- sdk/cargo-build-sbf/Cargo.toml | 8 +- .../tests/crates/fail/Cargo.toml | 4 +- .../tests/crates/noop/Cargo.toml | 4 +- sdk/cargo-test-bpf/Cargo.toml | 2 +- sdk/cargo-test-sbf/Cargo.toml | 2 +- sdk/gen-headers/Cargo.toml | 2 +- sdk/macro/Cargo.toml | 2 +- sdk/program/Cargo.toml | 10 +- send-transaction-service/Cargo.toml | 14 +- stake-accounts/Cargo.toml | 16 +- storage-bigtable/Cargo.toml | 10 +- storage-bigtable/build-proto/Cargo.lock | 2 +- storage-bigtable/build-proto/Cargo.toml | 2 +- storage-proto/Cargo.toml | 8 +- streamer/Cargo.toml | 10 +- sys-tuner/Cargo.toml | 6 +- test-validator/Cargo.toml | 28 +- tokens/Cargo.toml | 24 +- transaction-dos/Cargo.toml | 32 +- transaction-status/Cargo.toml | 14 +- upload-perf/Cargo.toml | 4 +- validator/Cargo.toml | 50 +- version/Cargo.toml | 8 +- watchtower/Cargo.toml | 20 +- zk-token-sdk/Cargo.toml | 6 +- 144 files changed, 1270 insertions(+), 1270 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 38b213edb20345..34c05106cdbdd1 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1688,7 +1688,7 @@ dependencies = [ [[package]] name = "gen-headers" -version = "1.14.17" +version = "1.14.18" dependencies = [ "log", "regex", @@ -1696,7 +1696,7 @@ dependencies = [ [[package]] name = "gen-syscall-list" -version = "1.14.17" +version = "1.14.18" dependencies = [ "regex", ] @@ -3738,15 +3738,15 @@ dependencies = [ [[package]] name = "rbpf-cli" -version = "1.14.17" +version = "1.14.18" dependencies = [ "clap 3.1.8", "serde", "serde_json", "solana-bpf-loader-program", - "solana-logger 1.14.17", + "solana-logger 1.14.18", "solana-program-runtime", - "solana-sdk 1.14.17", + "solana-sdk 1.14.18", "solana_rbpf", ] @@ -4448,7 +4448,7 @@ dependencies = [ [[package]] name = "solana-account-decoder" -version = "1.14.17" +version = "1.14.18" dependencies = [ "Inflector", "base64 0.13.0", @@ -4461,7 +4461,7 @@ dependencies = [ "serde_json", "solana-address-lookup-table-program", "solana-config-program", - "solana-sdk 1.14.17", + "solana-sdk 1.14.18", "solana-vote-program", "spl-token", "spl-token-2022 0.6.0", @@ -4471,21 +4471,21 @@ dependencies = [ [[package]] name = "solana-accounts-bench" -version = "1.14.17" +version = "1.14.18" dependencies = [ "clap 2.33.3", "log", "rayon", - "solana-logger 1.14.17", + "solana-logger 1.14.18", "solana-measure", "solana-runtime", - "solana-sdk 1.14.17", + "solana-sdk 1.14.18", "solana-version", ] [[package]] name = "solana-accounts-cluster-bench" -version = "1.14.17" +version = "1.14.18" dependencies = [ "clap 2.33.3", "log", @@ -4498,11 +4498,11 @@ dependencies = [ "solana-faucet", "solana-gossip", "solana-local-cluster", - "solana-logger 1.14.17", + "solana-logger 1.14.18", "solana-measure", "solana-net-utils", "solana-runtime", - "solana-sdk 1.14.17", + "solana-sdk 1.14.18", "solana-streamer", "solana-test-validator", "solana-transaction-status", @@ -4512,7 +4512,7 @@ dependencies = [ [[package]] name = "solana-address-lookup-table-program" -version = "1.14.17" +version = "1.14.18" dependencies = [ "bincode", "bytemuck", @@ -4521,28 +4521,28 @@ dependencies = [ "num-traits", "rustc_version 0.4.0", "serde", - "solana-frozen-abi 1.14.17", - "solana-frozen-abi-macro 1.14.17", - "solana-program 1.14.17", + "solana-frozen-abi 1.14.18", + "solana-frozen-abi-macro 1.14.18", + "solana-program 1.14.18", "solana-program-runtime", - "solana-sdk 1.14.17", + "solana-sdk 1.14.18", "thiserror", ] [[package]] name = "solana-address-lookup-table-program-tests" -version = "1.14.17" +version = "1.14.18" dependencies = [ "assert_matches", "bincode", "solana-address-lookup-table-program", "solana-program-test", - "solana-sdk 1.14.17", + "solana-sdk 1.14.18", ] [[package]] name = "solana-banking-bench" -version = "1.14.17" +version = "1.14.18" dependencies = [ "clap 3.1.8", "crossbeam-channel", @@ -4553,27 +4553,27 @@ dependencies = [ "solana-core", "solana-gossip", "solana-ledger", - "solana-logger 1.14.17", + "solana-logger 1.14.18", "solana-measure", "solana-perf", "solana-poh", "solana-runtime", - "solana-sdk 1.14.17", + "solana-sdk 1.14.18", "solana-streamer", "solana-version", ] [[package]] name = "solana-banks-client" -version = "1.14.17" +version = "1.14.18" dependencies = [ "borsh", "futures 0.3.21", "solana-banks-interface", "solana-banks-server", - "solana-program 1.14.17", + "solana-program 1.14.18", "solana-runtime", - "solana-sdk 1.14.17", + "solana-sdk 1.14.18", "tarpc", "thiserror", "tokio", @@ -4582,16 +4582,16 @@ dependencies = [ [[package]] name = "solana-banks-interface" -version = "1.14.17" +version = "1.14.18" dependencies = [ "serde", - "solana-sdk 1.14.17", + "solana-sdk 1.14.18", "tarpc", ] [[package]] name = "solana-banks-server" -version = "1.14.17" +version = "1.14.18" dependencies = [ "bincode", "crossbeam-channel", @@ -4599,7 +4599,7 @@ dependencies = [ "solana-banks-interface", "solana-client", "solana-runtime", - "solana-sdk 1.14.17", + "solana-sdk 1.14.18", "solana-send-transaction-service", "tarpc", "tokio", @@ -4609,7 +4609,7 @@ dependencies = [ [[package]] name = "solana-bench-streamer" -version = "1.14.17" +version = "1.14.18" dependencies = [ "clap 3.1.8", "crossbeam-channel", @@ -4620,7 +4620,7 @@ dependencies = [ [[package]] name = "solana-bench-tps" -version = "1.14.17" +version = "1.14.18" dependencies = [ "clap 2.33.3", "crossbeam-channel", @@ -4637,13 +4637,13 @@ dependencies = [ "solana-genesis", "solana-gossip", "solana-local-cluster", - "solana-logger 1.14.17", + "solana-logger 1.14.18", "solana-measure", "solana-metrics", "solana-net-utils", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.17", + "solana-sdk 1.14.18", "solana-streamer", "solana-test-validator", "solana-version", @@ -4652,7 +4652,7 @@ dependencies = [ [[package]] name = "solana-bloom" -version = "1.14.17" +version = "1.14.18" dependencies = [ "bv", "fnv", @@ -4662,14 +4662,14 @@ dependencies = [ "rustc_version 0.4.0", "serde", "serde_derive", - "solana-frozen-abi 1.14.17", - "solana-frozen-abi-macro 1.14.17", - "solana-sdk 1.14.17", + "solana-frozen-abi 1.14.18", + "solana-frozen-abi-macro 1.14.18", + "solana-sdk 1.14.18", ] [[package]] name = "solana-bpf-loader-program" -version = "1.14.17" +version = "1.14.18" dependencies = [ "bincode", "byteorder", @@ -4680,26 +4680,26 @@ dependencies = [ "solana-metrics", "solana-program-runtime", "solana-runtime", - "solana-sdk 1.14.17", - "solana-zk-token-sdk 1.14.17", + "solana-sdk 1.14.18", + "solana-zk-token-sdk 1.14.18", "solana_rbpf", "thiserror", ] [[package]] name = "solana-bpf-loader-program-tests" -version = "1.14.17" +version = "1.14.18" dependencies = [ "assert_matches", "bincode", "solana-bpf-loader-program", "solana-program-test", - "solana-sdk 1.14.17", + "solana-sdk 1.14.18", ] [[package]] name = "solana-bucket-map" -version = "1.14.17" +version = "1.14.18" dependencies = [ "fs_extra", "log", @@ -4707,24 +4707,24 @@ dependencies = [ "modular-bitfield", "rand 0.7.3", "rayon", - "solana-logger 1.14.17", + "solana-logger 1.14.18", "solana-measure", - "solana-sdk 1.14.17", + "solana-sdk 1.14.18", "tempfile", ] [[package]] name = "solana-cargo-build-bpf" -version = "1.14.17" +version = "1.14.18" dependencies = [ "cargo_metadata", "clap 3.1.8", - "solana-sdk 1.14.17", + "solana-sdk 1.14.18", ] [[package]] name = "solana-cargo-build-sbf" -version = "1.14.17" +version = "1.14.18" dependencies = [ "bzip2", "cargo_metadata", @@ -4733,14 +4733,14 @@ dependencies = [ "regex", "serial_test", "solana-download-utils", - "solana-logger 1.14.17", - "solana-sdk 1.14.17", + "solana-logger 1.14.18", + "solana-sdk 1.14.18", "tar", ] [[package]] name = "solana-cargo-test-bpf" -version = "1.14.17" +version = "1.14.18" dependencies = [ "cargo_metadata", "clap 3.1.8", @@ -4748,7 +4748,7 @@ dependencies = [ [[package]] name = "solana-cargo-test-sbf" -version = "1.14.17" +version = "1.14.18" dependencies = [ "cargo_metadata", "clap 3.1.8", @@ -4756,14 +4756,14 @@ dependencies = [ [[package]] name = "solana-clap-utils" -version = "1.14.17" +version = "1.14.18" dependencies = [ "chrono", "clap 2.33.3", "rpassword", "solana-perf", "solana-remote-wallet", - "solana-sdk 1.14.17", + "solana-sdk 1.14.18", "tempfile", "thiserror", "tiny-bip39", @@ -4773,14 +4773,14 @@ dependencies = [ [[package]] name = "solana-clap-v3-utils" -version = "1.14.17" +version = "1.14.18" dependencies = [ "chrono", "clap 3.1.8", "rpassword", "solana-perf", "solana-remote-wallet", - "solana-sdk 1.14.17", + "solana-sdk 1.14.18", "tempfile", "thiserror", "tiny-bip39", @@ -4790,7 +4790,7 @@ dependencies = [ [[package]] name = "solana-cli" -version = "1.14.17" +version = "1.14.18" dependencies = [ "bincode", "bs58", @@ -4818,10 +4818,10 @@ dependencies = [ "solana-client", "solana-config-program", "solana-faucet", - "solana-logger 1.14.17", + "solana-logger 1.14.18", "solana-program-runtime", "solana-remote-wallet", - "solana-sdk 1.14.17", + "solana-sdk 1.14.18", "solana-streamer", "solana-test-validator", "solana-transaction-status", @@ -4836,7 +4836,7 @@ dependencies = [ [[package]] name = "solana-cli-config" -version = "1.14.17" +version = "1.14.18" dependencies = [ "anyhow", "dirs-next", @@ -4845,13 +4845,13 @@ dependencies = [ "serde_derive", "serde_yaml", "solana-clap-utils", - "solana-sdk 1.14.17", + "solana-sdk 1.14.18", "url 2.2.2", ] [[package]] name = "solana-cli-output" -version = "1.14.17" +version = "1.14.18" dependencies = [ "Inflector", "base64 0.13.0", @@ -4869,7 +4869,7 @@ dependencies = [ "solana-clap-utils", "solana-cli-config", "solana-client", - "solana-sdk 1.14.17", + "solana-sdk 1.14.18", "solana-transaction-status", "solana-vote-program", "spl-memo", @@ -4877,7 +4877,7 @@ dependencies = [ [[package]] name = "solana-client" -version = "1.14.17" +version = "1.14.18" dependencies = [ "anyhow", "assert_matches", @@ -4913,12 +4913,12 @@ dependencies = [ "solana-account-decoder", "solana-clap-utils", "solana-faucet", - "solana-logger 1.14.17", + "solana-logger 1.14.18", "solana-measure", "solana-metrics", "solana-net-utils", "solana-perf", - "solana-sdk 1.14.17", + "solana-sdk 1.14.18", "solana-streamer", "solana-transaction-status", "solana-version", @@ -4934,14 +4934,14 @@ dependencies = [ [[package]] name = "solana-client-test" -version = "1.14.17" +version = "1.14.18" dependencies = [ "futures-util", "serde_json", "serial_test", "solana-client", "solana-ledger", - "solana-logger 1.14.17", + "solana-logger 1.14.18", "solana-measure", "solana-merkle-tree", "solana-metrics", @@ -4949,7 +4949,7 @@ dependencies = [ "solana-rayon-threadlimit", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.17", + "solana-sdk 1.14.18", "solana-streamer", "solana-test-validator", "solana-transaction-status", @@ -4960,28 +4960,28 @@ dependencies = [ [[package]] name = "solana-compute-budget-program" -version = "1.14.17" +version = "1.14.18" dependencies = [ "solana-program-runtime", - "solana-sdk 1.14.17", + "solana-sdk 1.14.18", ] [[package]] name = "solana-config-program" -version = "1.14.17" +version = "1.14.18" dependencies = [ "bincode", "chrono", "serde", "serde_derive", - "solana-logger 1.14.17", + "solana-logger 1.14.18", "solana-program-runtime", - "solana-sdk 1.14.17", + "solana-sdk 1.14.18", ] [[package]] name = "solana-core" -version = "1.14.17" +version = "1.14.18" dependencies = [ "ahash", "base64 0.13.0", @@ -5014,12 +5014,12 @@ dependencies = [ "solana-bloom", "solana-client", "solana-entry", - "solana-frozen-abi 1.14.17", - "solana-frozen-abi-macro 1.14.17", + "solana-frozen-abi 1.14.18", + "solana-frozen-abi-macro 1.14.18", "solana-geyser-plugin-manager", "solana-gossip", "solana-ledger", - "solana-logger 1.14.17", + "solana-logger 1.14.18", "solana-measure", "solana-metrics", "solana-net-utils", @@ -5029,7 +5029,7 @@ dependencies = [ "solana-rayon-threadlimit", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.17", + "solana-sdk 1.14.18", "solana-send-transaction-service", "solana-stake-program", "solana-streamer", @@ -5049,7 +5049,7 @@ dependencies = [ [[package]] name = "solana-dos" -version = "1.14.17" +version = "1.14.18" dependencies = [ "bincode", "clap 3.1.8", @@ -5065,42 +5065,42 @@ dependencies = [ "solana-faucet", "solana-gossip", "solana-local-cluster", - "solana-logger 1.14.17", + "solana-logger 1.14.18", "solana-measure", "solana-net-utils", "solana-perf", "solana-rpc", - "solana-sdk 1.14.17", + "solana-sdk 1.14.18", "solana-streamer", "solana-version", ] [[package]] name = "solana-download-utils" -version = "1.14.17" +version = "1.14.18" dependencies = [ "console", "indicatif", "log", "reqwest", "solana-runtime", - "solana-sdk 1.14.17", + "solana-sdk 1.14.18", ] [[package]] name = "solana-ed25519-program-tests" -version = "1.14.17" +version = "1.14.18" dependencies = [ "assert_matches", "ed25519-dalek", "rand 0.7.3", "solana-program-test", - "solana-sdk 1.14.17", + "solana-sdk 1.14.18", ] [[package]] name = "solana-entry" -version = "1.14.17" +version = "1.14.18" dependencies = [ "bincode", "crossbeam-channel", @@ -5112,18 +5112,18 @@ dependencies = [ "rand 0.7.3", "rayon", "serde", - "solana-logger 1.14.17", + "solana-logger 1.14.18", "solana-measure", "solana-merkle-tree", "solana-metrics", "solana-perf", "solana-rayon-threadlimit", - "solana-sdk 1.14.17", + "solana-sdk 1.14.18", ] [[package]] name = "solana-faucet" -version = "1.14.17" +version = "1.14.18" dependencies = [ "bincode", "byteorder", @@ -5134,9 +5134,9 @@ dependencies = [ "serde_derive", "solana-clap-utils", "solana-cli-config", - "solana-logger 1.14.17", + "solana-logger 1.14.18", "solana-metrics", - "solana-sdk 1.14.17", + "solana-sdk 1.14.18", "solana-version", "spl-memo", "thiserror", @@ -5179,7 +5179,7 @@ dependencies = [ [[package]] name = "solana-frozen-abi" -version = "1.14.17" +version = "1.14.18" dependencies = [ "ahash", "blake3", @@ -5204,8 +5204,8 @@ dependencies = [ "serde_derive", "serde_json", "sha2 0.10.2", - "solana-frozen-abi-macro 1.14.17", - "solana-logger 1.14.17", + "solana-frozen-abi-macro 1.14.18", + "solana-logger 1.14.18", "subtle", "thiserror", ] @@ -5224,7 +5224,7 @@ dependencies = [ [[package]] name = "solana-frozen-abi-macro" -version = "1.14.17" +version = "1.14.18" dependencies = [ "proc-macro2 1.0.52", "quote 1.0.18", @@ -5234,7 +5234,7 @@ dependencies = [ [[package]] name = "solana-genesis" -version = "1.14.17" +version = "1.14.18" dependencies = [ "base64 0.13.0", "clap 2.33.3", @@ -5245,9 +5245,9 @@ dependencies = [ "solana-cli-config", "solana-entry", "solana-ledger", - "solana-logger 1.14.17", + "solana-logger 1.14.18", "solana-runtime", - "solana-sdk 1.14.17", + "solana-sdk 1.14.18", "solana-stake-program", "solana-version", "solana-vote-program", @@ -5256,26 +5256,26 @@ dependencies = [ [[package]] name = "solana-genesis-utils" -version = "1.14.17" +version = "1.14.18" dependencies = [ "solana-download-utils", "solana-runtime", - "solana-sdk 1.14.17", + "solana-sdk 1.14.18", ] [[package]] name = "solana-geyser-plugin-interface" -version = "1.14.17" +version = "1.14.18" dependencies = [ "log", - "solana-sdk 1.14.17", + "solana-sdk 1.14.18", "solana-transaction-status", "thiserror", ] [[package]] name = "solana-geyser-plugin-manager" -version = "1.14.17" +version = "1.14.18" dependencies = [ "bs58", "crossbeam-channel", @@ -5288,14 +5288,14 @@ dependencies = [ "solana-metrics", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.17", + "solana-sdk 1.14.18", "solana-transaction-status", "thiserror", ] [[package]] name = "solana-gossip" -version = "1.14.17" +version = "1.14.18" dependencies = [ "bincode", "bv", @@ -5322,17 +5322,17 @@ dependencies = [ "solana-clap-utils", "solana-client", "solana-entry", - "solana-frozen-abi 1.14.17", - "solana-frozen-abi-macro 1.14.17", + "solana-frozen-abi 1.14.18", + "solana-frozen-abi-macro 1.14.18", "solana-ledger", - "solana-logger 1.14.17", + "solana-logger 1.14.18", "solana-measure", "solana-metrics", "solana-net-utils", "solana-perf", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.14.17", + "solana-sdk 1.14.18", "solana-streamer", "solana-version", "solana-vote-program", @@ -5341,7 +5341,7 @@ dependencies = [ [[package]] name = "solana-install" -version = "1.14.17" +version = "1.14.18" dependencies = [ "atty", "bincode", @@ -5362,8 +5362,8 @@ dependencies = [ "solana-clap-utils", "solana-client", "solana-config-program", - "solana-logger 1.14.17", - "solana-sdk 1.14.17", + "solana-logger 1.14.18", + "solana-sdk 1.14.18", "solana-version", "tar", "tempfile", @@ -5374,7 +5374,7 @@ dependencies = [ [[package]] name = "solana-keygen" -version = "1.14.17" +version = "1.14.18" dependencies = [ "bs58", "clap 3.1.8", @@ -5383,14 +5383,14 @@ dependencies = [ "solana-clap-v3-utils", "solana-cli-config", "solana-remote-wallet", - "solana-sdk 1.14.17", + "solana-sdk 1.14.18", "solana-version", "tiny-bip39", ] [[package]] name = "solana-ledger" -version = "1.14.17" +version = "1.14.18" dependencies = [ "assert_matches", "bincode", @@ -5424,16 +5424,16 @@ dependencies = [ "solana-account-decoder", "solana-bpf-loader-program", "solana-entry", - "solana-frozen-abi 1.14.17", - "solana-frozen-abi-macro 1.14.17", - "solana-logger 1.14.17", + "solana-frozen-abi 1.14.18", + "solana-frozen-abi-macro 1.14.18", + "solana-logger 1.14.18", "solana-measure", "solana-metrics", "solana-perf", "solana-program-runtime", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.14.17", + "solana-sdk 1.14.18", "solana-stake-program", "solana-storage-bigtable", "solana-storage-proto", @@ -5452,7 +5452,7 @@ dependencies = [ [[package]] name = "solana-ledger-tool" -version = "1.14.17" +version = "1.14.18" dependencies = [ "assert_cmd", "base64 0.13.0", @@ -5474,10 +5474,10 @@ dependencies = [ "solana-core", "solana-entry", "solana-ledger", - "solana-logger 1.14.17", + "solana-logger 1.14.18", "solana-measure", "solana-runtime", - "solana-sdk 1.14.17", + "solana-sdk 1.14.18", "solana-stake-program", "solana-storage-bigtable", "solana-transaction-status", @@ -5489,7 +5489,7 @@ dependencies = [ [[package]] name = "solana-local-cluster" -version = "1.14.17" +version = "1.14.18" dependencies = [ "assert_matches", "crossbeam-channel", @@ -5507,9 +5507,9 @@ dependencies = [ "solana-entry", "solana-gossip", "solana-ledger", - "solana-logger 1.14.17", + "solana-logger 1.14.18", "solana-runtime", - "solana-sdk 1.14.17", + "solana-sdk 1.14.18", "solana-stake-program", "solana-streamer", "solana-vote-program", @@ -5518,13 +5518,13 @@ dependencies = [ [[package]] name = "solana-log-analyzer" -version = "1.14.17" +version = "1.14.18" dependencies = [ "byte-unit", "clap 3.1.8", "serde", "serde_json", - "solana-logger 1.14.17", + "solana-logger 1.14.18", "solana-version", ] @@ -5541,7 +5541,7 @@ dependencies = [ [[package]] name = "solana-logger" -version = "1.14.17" +version = "1.14.18" dependencies = [ "env_logger", "lazy_static", @@ -5550,38 +5550,38 @@ dependencies = [ [[package]] name = "solana-measure" -version = "1.14.17" +version = "1.14.18" dependencies = [ "log", - "solana-sdk 1.14.17", + "solana-sdk 1.14.18", ] [[package]] name = "solana-merkle-root-bench" -version = "1.14.17" +version = "1.14.18" dependencies = [ "clap 2.33.3", "log", - "solana-logger 1.14.17", + "solana-logger 1.14.18", "solana-measure", "solana-runtime", - "solana-sdk 1.14.17", + "solana-sdk 1.14.18", "solana-version", ] [[package]] name = "solana-merkle-tree" -version = "1.14.17" +version = "1.14.18" dependencies = [ "fast-math", "hex", "matches", - "solana-program 1.14.17", + "solana-program 1.14.18", ] [[package]] name = "solana-metrics" -version = "1.14.17" +version = "1.14.18" dependencies = [ "crossbeam-channel", "env_logger", @@ -5591,23 +5591,23 @@ dependencies = [ "rand 0.7.3", "reqwest", "serial_test", - "solana-sdk 1.14.17", + "solana-sdk 1.14.18", ] [[package]] name = "solana-net-shaper" -version = "1.14.17" +version = "1.14.18" dependencies = [ "clap 3.1.8", "rand 0.7.3", "serde", "serde_json", - "solana-logger 1.14.17", + "solana-logger 1.14.18", ] [[package]] name = "solana-net-utils" -version = "1.14.17" +version = "1.14.18" dependencies = [ "bincode", "clap 3.1.8", @@ -5618,8 +5618,8 @@ dependencies = [ "serde", "serde_derive", "socket2", - "solana-logger 1.14.17", - "solana-sdk 1.14.17", + "solana-logger 1.14.18", + "solana-sdk 1.14.18", "solana-version", "tokio", "url 2.2.2", @@ -5627,7 +5627,7 @@ dependencies = [ [[package]] name = "solana-notifier" -version = "1.14.17" +version = "1.14.18" dependencies = [ "log", "reqwest", @@ -5636,7 +5636,7 @@ dependencies = [ [[package]] name = "solana-perf" -version = "1.14.17" +version = "1.14.18" dependencies = [ "ahash", "bincode", @@ -5655,17 +5655,17 @@ dependencies = [ "rand_chacha 0.2.2", "rayon", "serde", - "solana-logger 1.14.17", + "solana-logger 1.14.18", "solana-metrics", "solana-rayon-threadlimit", - "solana-sdk 1.14.17", + "solana-sdk 1.14.18", "solana-vote-program", "test-case", ] [[package]] name = "solana-poh" -version = "1.14.17" +version = "1.14.18" dependencies = [ "bincode", "core_affinity", @@ -5675,29 +5675,29 @@ dependencies = [ "rand 0.7.3", "solana-entry", "solana-ledger", - "solana-logger 1.14.17", + "solana-logger 1.14.18", "solana-measure", "solana-metrics", "solana-perf", "solana-runtime", - "solana-sdk 1.14.17", + "solana-sdk 1.14.18", "solana-sys-tuner", "thiserror", ] [[package]] name = "solana-poh-bench" -version = "1.14.17" +version = "1.14.18" dependencies = [ "clap 3.1.8", "log", "rand 0.7.3", "rayon", "solana-entry", - "solana-logger 1.14.17", + "solana-logger 1.14.18", "solana-measure", "solana-perf", - "solana-sdk 1.14.17", + "solana-sdk 1.14.18", "solana-version", ] @@ -5752,7 +5752,7 @@ dependencies = [ [[package]] name = "solana-program" -version = "1.14.17" +version = "1.14.18" dependencies = [ "anyhow", "assert_matches", @@ -5790,10 +5790,10 @@ dependencies = [ "serde_json", "sha2 0.10.2", "sha3 0.10.1", - "solana-frozen-abi 1.14.17", - "solana-frozen-abi-macro 1.14.17", - "solana-logger 1.14.17", - "solana-sdk-macro 1.14.17", + "solana-frozen-abi 1.14.18", + "solana-frozen-abi-macro 1.14.18", + "solana-logger 1.14.18", + "solana-sdk-macro 1.14.18", "static_assertions", "thiserror", "tiny-bip39", @@ -5803,7 +5803,7 @@ dependencies = [ [[package]] name = "solana-program-runtime" -version = "1.14.17" +version = "1.14.18" dependencies = [ "base64 0.13.0", "bincode", @@ -5818,18 +5818,18 @@ dependencies = [ "rand 0.7.3", "rustc_version 0.4.0", "serde", - "solana-frozen-abi 1.14.17", - "solana-frozen-abi-macro 1.14.17", - "solana-logger 1.14.17", + "solana-frozen-abi 1.14.18", + "solana-frozen-abi-macro 1.14.18", + "solana-logger 1.14.18", "solana-measure", "solana-metrics", - "solana-sdk 1.14.17", + "solana-sdk 1.14.18", "thiserror", ] [[package]] name = "solana-program-test" -version = "1.14.17" +version = "1.14.18" dependencies = [ "assert_matches", "async-trait", @@ -5841,10 +5841,10 @@ dependencies = [ "solana-banks-client", "solana-banks-server", "solana-bpf-loader-program", - "solana-logger 1.14.17", + "solana-logger 1.14.18", "solana-program-runtime", "solana-runtime", - "solana-sdk 1.14.17", + "solana-sdk 1.14.18", "solana-stake-program", "solana-vote-program", "thiserror", @@ -5853,7 +5853,7 @@ dependencies = [ [[package]] name = "solana-rayon-threadlimit" -version = "1.14.17" +version = "1.14.18" dependencies = [ "lazy_static", "num_cpus", @@ -5861,7 +5861,7 @@ dependencies = [ [[package]] name = "solana-remote-wallet" -version = "1.14.17" +version = "1.14.18" dependencies = [ "console", "dialoguer", @@ -5872,14 +5872,14 @@ dependencies = [ "parking_lot 0.12.1", "qstring", "semver 1.0.10", - "solana-sdk 1.14.17", + "solana-sdk 1.14.18", "thiserror", "uriparse", ] [[package]] name = "solana-rpc" -version = "1.14.17" +version = "1.14.18" dependencies = [ "base64 0.13.0", "bincode", @@ -5915,7 +5915,7 @@ dependencies = [ "solana-poh", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.14.17", + "solana-sdk 1.14.18", "solana-send-transaction-service", "solana-stake-program", "solana-storage-bigtable", @@ -5934,7 +5934,7 @@ dependencies = [ [[package]] name = "solana-rpc-test" -version = "1.14.17" +version = "1.14.18" dependencies = [ "bincode", "bs58", @@ -5946,9 +5946,9 @@ dependencies = [ "serde_json", "solana-account-decoder", "solana-client", - "solana-logger 1.14.17", + "solana-logger 1.14.18", "solana-rpc", - "solana-sdk 1.14.17", + "solana-sdk 1.14.18", "solana-streamer", "solana-test-validator", "solana-transaction-status", @@ -5957,7 +5957,7 @@ dependencies = [ [[package]] name = "solana-runtime" -version = "1.14.17" +version = "1.14.18" dependencies = [ "arrayref", "assert_matches", @@ -5998,18 +5998,18 @@ dependencies = [ "solana-bucket-map", "solana-compute-budget-program", "solana-config-program", - "solana-frozen-abi 1.14.17", - "solana-frozen-abi-macro 1.14.17", - "solana-logger 1.14.17", + "solana-frozen-abi 1.14.18", + "solana-frozen-abi-macro 1.14.18", + "solana-logger 1.14.18", "solana-measure", "solana-metrics", "solana-program-runtime", "solana-rayon-threadlimit", - "solana-sdk 1.14.17", + "solana-sdk 1.14.18", "solana-stake-program", "solana-vote-program", "solana-zk-token-proof-program", - "solana-zk-token-sdk 1.14.17", + "solana-zk-token-sdk 1.14.18", "strum", "strum_macros", "symlink", @@ -6072,7 +6072,7 @@ dependencies = [ [[package]] name = "solana-sdk" -version = "1.14.17" +version = "1.14.18" dependencies = [ "anyhow", "assert_matches", @@ -6112,11 +6112,11 @@ dependencies = [ "serde_json", "sha2 0.10.2", "sha3 0.10.1", - "solana-frozen-abi 1.14.17", - "solana-frozen-abi-macro 1.14.17", - "solana-logger 1.14.17", - "solana-program 1.14.17", - "solana-sdk-macro 1.14.17", + "solana-frozen-abi 1.14.18", + "solana-frozen-abi-macro 1.14.18", + "solana-logger 1.14.18", + "solana-program 1.14.18", + "solana-sdk-macro 1.14.18", "static_assertions", "thiserror", "tiny-bip39", @@ -6139,7 +6139,7 @@ dependencies = [ [[package]] name = "solana-sdk-macro" -version = "1.14.17" +version = "1.14.18" dependencies = [ "bs58", "proc-macro2 1.0.52", @@ -6150,21 +6150,21 @@ dependencies = [ [[package]] name = "solana-send-transaction-service" -version = "1.14.17" +version = "1.14.18" dependencies = [ "crossbeam-channel", "log", "solana-client", - "solana-logger 1.14.17", + "solana-logger 1.14.18", "solana-measure", "solana-metrics", "solana-runtime", - "solana-sdk 1.14.17", + "solana-sdk 1.14.18", ] [[package]] name = "solana-stake-accounts" -version = "1.14.17" +version = "1.14.18" dependencies = [ "clap 2.33.3", "solana-clap-utils", @@ -6172,13 +6172,13 @@ dependencies = [ "solana-client", "solana-remote-wallet", "solana-runtime", - "solana-sdk 1.14.17", + "solana-sdk 1.14.18", "solana-stake-program", ] [[package]] name = "solana-stake-program" -version = "1.14.17" +version = "1.14.18" dependencies = [ "assert_matches", "bincode", @@ -6190,12 +6190,12 @@ dependencies = [ "serde", "serde_derive", "solana-config-program", - "solana-frozen-abi 1.14.17", - "solana-frozen-abi-macro 1.14.17", - "solana-logger 1.14.17", + "solana-frozen-abi 1.14.18", + "solana-frozen-abi-macro 1.14.18", + "solana-logger 1.14.18", "solana-metrics", "solana-program-runtime", - "solana-sdk 1.14.17", + "solana-sdk 1.14.18", "solana-vote-program", "test-case", "thiserror", @@ -6203,7 +6203,7 @@ dependencies = [ [[package]] name = "solana-storage-bigtable" -version = "1.14.17" +version = "1.14.18" dependencies = [ "backoff", "bincode", @@ -6224,7 +6224,7 @@ dependencies = [ "serde_derive", "smpl_jwt", "solana-metrics", - "solana-sdk 1.14.17", + "solana-sdk 1.14.18", "solana-storage-proto", "solana-transaction-status", "thiserror", @@ -6235,7 +6235,7 @@ dependencies = [ [[package]] name = "solana-storage-proto" -version = "1.14.17" +version = "1.14.18" dependencies = [ "bincode", "bs58", @@ -6244,25 +6244,25 @@ dependencies = [ "protobuf-src", "serde", "solana-account-decoder", - "solana-sdk 1.14.17", + "solana-sdk 1.14.18", "solana-transaction-status", "tonic-build 0.8.0", ] [[package]] name = "solana-store-tool" -version = "1.14.17" +version = "1.14.18" dependencies = [ "clap 2.33.3", "log", - "solana-logger 1.14.17", + "solana-logger 1.14.18", "solana-runtime", "solana-version", ] [[package]] name = "solana-streamer" -version = "1.14.17" +version = "1.14.18" dependencies = [ "crossbeam-channel", "futures-util", @@ -6279,10 +6279,10 @@ dependencies = [ "rand 0.7.3", "rcgen", "rustls 0.20.6", - "solana-logger 1.14.17", + "solana-logger 1.14.18", "solana-metrics", "solana-perf", - "solana-sdk 1.14.17", + "solana-sdk 1.14.18", "thiserror", "tokio", "x509-parser", @@ -6290,13 +6290,13 @@ dependencies = [ [[package]] name = "solana-sys-tuner" -version = "1.14.17" +version = "1.14.18" dependencies = [ "clap 2.33.3", "libc", "log", "nix", - "solana-logger 1.14.17", + "solana-logger 1.14.18", "solana-version", "sysctl", "unix_socket2", @@ -6305,7 +6305,7 @@ dependencies = [ [[package]] name = "solana-test-validator" -version = "1.14.17" +version = "1.14.18" dependencies = [ "base64 0.13.0", "log", @@ -6316,20 +6316,20 @@ dependencies = [ "solana-core", "solana-gossip", "solana-ledger", - "solana-logger 1.14.17", + "solana-logger 1.14.18", "solana-net-utils", "solana-program-runtime", "solana-program-test", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.17", + "solana-sdk 1.14.18", "solana-streamer", "tokio", ] [[package]] name = "solana-tokens" -version = "1.14.17" +version = "1.14.18" dependencies = [ "bincode", "chrono", @@ -6345,9 +6345,9 @@ dependencies = [ "solana-clap-utils", "solana-cli-config", "solana-client", - "solana-logger 1.14.17", + "solana-logger 1.14.18", "solana-remote-wallet", - "solana-sdk 1.14.17", + "solana-sdk 1.14.18", "solana-streamer", "solana-test-validator", "solana-transaction-status", @@ -6360,7 +6360,7 @@ dependencies = [ [[package]] name = "solana-transaction-dos" -version = "1.14.17" +version = "1.14.18" dependencies = [ "bincode", "clap 2.33.3", @@ -6374,11 +6374,11 @@ dependencies = [ "solana-faucet", "solana-gossip", "solana-local-cluster", - "solana-logger 1.14.17", + "solana-logger 1.14.18", "solana-measure", "solana-net-utils", "solana-runtime", - "solana-sdk 1.14.17", + "solana-sdk 1.14.18", "solana-streamer", "solana-transaction-status", "solana-version", @@ -6386,7 +6386,7 @@ dependencies = [ [[package]] name = "solana-transaction-status" -version = "1.14.17" +version = "1.14.18" dependencies = [ "Inflector", "base64 0.13.0", @@ -6402,7 +6402,7 @@ dependencies = [ "solana-address-lookup-table-program", "solana-measure", "solana-metrics", - "solana-sdk 1.14.17", + "solana-sdk 1.14.18", "solana-vote-program", "spl-associated-token-account", "spl-memo", @@ -6413,7 +6413,7 @@ dependencies = [ [[package]] name = "solana-upload-perf" -version = "1.14.17" +version = "1.14.18" dependencies = [ "serde_json", "solana-metrics", @@ -6421,7 +6421,7 @@ dependencies = [ [[package]] name = "solana-validator" -version = "1.14.17" +version = "1.14.18" dependencies = [ "chrono", "clap 2.33.3", @@ -6452,14 +6452,14 @@ dependencies = [ "solana-genesis-utils", "solana-gossip", "solana-ledger", - "solana-logger 1.14.17", + "solana-logger 1.14.18", "solana-metrics", "solana-net-utils", "solana-perf", "solana-poh", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.17", + "solana-sdk 1.14.18", "solana-send-transaction-service", "solana-storage-bigtable", "solana-streamer", @@ -6472,21 +6472,21 @@ dependencies = [ [[package]] name = "solana-version" -version = "1.14.17" +version = "1.14.18" dependencies = [ "log", "rustc_version 0.4.0", "semver 1.0.10", "serde", "serde_derive", - "solana-frozen-abi 1.14.17", - "solana-frozen-abi-macro 1.14.17", - "solana-sdk 1.14.17", + "solana-frozen-abi 1.14.18", + "solana-frozen-abi-macro 1.14.18", + "solana-sdk 1.14.18", ] [[package]] name = "solana-vote-program" -version = "1.14.17" +version = "1.14.18" dependencies = [ "bincode", "itertools", @@ -6497,19 +6497,19 @@ dependencies = [ "rustc_version 0.4.0", "serde", "serde_derive", - "solana-frozen-abi 1.14.17", - "solana-frozen-abi-macro 1.14.17", - "solana-logger 1.14.17", + "solana-frozen-abi 1.14.18", + "solana-frozen-abi-macro 1.14.18", + "solana-logger 1.14.18", "solana-metrics", "solana-program-runtime", - "solana-sdk 1.14.17", + "solana-sdk 1.14.18", "test-case", "thiserror", ] [[package]] name = "solana-watchtower" -version = "1.14.17" +version = "1.14.18" dependencies = [ "clap 2.33.3", "humantime", @@ -6518,24 +6518,24 @@ dependencies = [ "solana-cli-config", "solana-cli-output", "solana-client", - "solana-logger 1.14.17", + "solana-logger 1.14.18", "solana-metrics", "solana-notifier", - "solana-sdk 1.14.17", + "solana-sdk 1.14.18", "solana-version", ] [[package]] name = "solana-zk-token-proof-program" -version = "1.14.17" +version = "1.14.18" dependencies = [ "bytemuck", "getrandom 0.1.16", "num-derive", "num-traits", "solana-program-runtime", - "solana-sdk 1.14.17", - "solana-zk-token-sdk 1.14.17", + "solana-sdk 1.14.18", + "solana-zk-token-sdk 1.14.18", ] [[package]] @@ -6571,7 +6571,7 @@ dependencies = [ [[package]] name = "solana-zk-token-sdk" -version = "1.14.17" +version = "1.14.18" dependencies = [ "aes-gcm-siv", "arrayref", @@ -6591,8 +6591,8 @@ dependencies = [ "serde", "serde_json", "sha3 0.9.1", - "solana-program 1.14.17", - "solana-sdk 1.14.17", + "solana-program 1.14.18", + "solana-sdk 1.14.18", "subtle", "thiserror", "zeroize", diff --git a/account-decoder/Cargo.toml b/account-decoder/Cargo.toml index bf3e3f1417bda4..a04ce13cb3c8f6 100644 --- a/account-decoder/Cargo.toml +++ b/account-decoder/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-account-decoder" -version = "1.14.17" +version = "1.14.18" description = "Solana account decoder" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -19,10 +19,10 @@ lazy_static = "1.4.0" serde = "1.0.138" serde_derive = "1.0.103" serde_json = "1.0.81" -solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.17" } -solana-config-program = { path = "../programs/config", version = "=1.14.17" } -solana-sdk = { path = "../sdk", version = "=1.14.17" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.17" } +solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.18" } +solana-config-program = { path = "../programs/config", version = "=1.14.18" } +solana-sdk = { path = "../sdk", version = "=1.14.18" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.18" } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } spl-token-2022 = { version = "=0.6.0", features = ["no-entrypoint"] } thiserror = "1.0" diff --git a/accounts-bench/Cargo.toml b/accounts-bench/Cargo.toml index eea03333837c67..9df729d40908a4 100644 --- a/accounts-bench/Cargo.toml +++ b/accounts-bench/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-accounts-bench" -version = "1.14.17" +version = "1.14.18" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -12,11 +12,11 @@ publish = false clap = "2.33.1" log = "0.4.17" rayon = "1.5.3" -solana-logger = { path = "../logger", version = "=1.14.17" } -solana-measure = { path = "../measure", version = "=1.14.17" } -solana-runtime = { path = "../runtime", version = "=1.14.17" } -solana-sdk = { path = "../sdk", version = "=1.14.17" } -solana-version = { path = "../version", version = "=1.14.17" } +solana-logger = { path = "../logger", version = "=1.14.18" } +solana-measure = { path = "../measure", version = "=1.14.18" } +solana-runtime = { path = "../runtime", version = "=1.14.18" } +solana-sdk = { path = "../sdk", version = "=1.14.18" } +solana-version = { path = "../version", version = "=1.14.18" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/accounts-cluster-bench/Cargo.toml b/accounts-cluster-bench/Cargo.toml index 8c533dd9c66432..8a2b75d1e33aa2 100644 --- a/accounts-cluster-bench/Cargo.toml +++ b/accounts-cluster-bench/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-accounts-cluster-bench" -version = "1.14.17" +version = "1.14.18" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -13,25 +13,25 @@ clap = "2.33.1" log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.17" } -solana-clap-utils = { path = "../clap-utils", version = "=1.14.17" } -solana-client = { path = "../client", version = "=1.14.17" } -solana-faucet = { path = "../faucet", version = "=1.14.17" } -solana-gossip = { path = "../gossip", version = "=1.14.17" } -solana-logger = { path = "../logger", version = "=1.14.17" } -solana-measure = { path = "../measure", version = "=1.14.17" } -solana-net-utils = { path = "../net-utils", version = "=1.14.17" } -solana-runtime = { path = "../runtime", version = "=1.14.17" } -solana-sdk = { path = "../sdk", version = "=1.14.17" } -solana-streamer = { path = "../streamer", version = "=1.14.17" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.17" } -solana-version = { path = "../version", version = "=1.14.17" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.18" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.18" } +solana-client = { path = "../client", version = "=1.14.18" } +solana-faucet = { path = "../faucet", version = "=1.14.18" } +solana-gossip = { path = "../gossip", version = "=1.14.18" } +solana-logger = { path = "../logger", version = "=1.14.18" } +solana-measure = { path = "../measure", version = "=1.14.18" } +solana-net-utils = { path = "../net-utils", version = "=1.14.18" } +solana-runtime = { path = "../runtime", version = "=1.14.18" } +solana-sdk = { path = "../sdk", version = "=1.14.18" } +solana-streamer = { path = "../streamer", version = "=1.14.18" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.18" } +solana-version = { path = "../version", version = "=1.14.18" } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } [dev-dependencies] -solana-core = { path = "../core", version = "=1.14.17" } -solana-local-cluster = { path = "../local-cluster", version = "=1.14.17" } -solana-test-validator = { path = "../test-validator", version = "=1.14.17" } +solana-core = { path = "../core", version = "=1.14.18" } +solana-local-cluster = { path = "../local-cluster", version = "=1.14.18" } +solana-test-validator = { path = "../test-validator", version = "=1.14.18" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/banking-bench/Cargo.toml b/banking-bench/Cargo.toml index c016dd9da2bbf4..4f41f4f6a3818c 100644 --- a/banking-bench/Cargo.toml +++ b/banking-bench/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-banking-bench" -version = "1.14.17" +version = "1.14.18" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,18 +14,18 @@ crossbeam-channel = "0.5" log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" -solana-client = { path = "../client", version = "=1.14.17" } -solana-core = { path = "../core", version = "=1.14.17" } -solana-gossip = { path = "../gossip", version = "=1.14.17" } -solana-ledger = { path = "../ledger", version = "=1.14.17" } -solana-logger = { path = "../logger", version = "=1.14.17" } -solana-measure = { path = "../measure", version = "=1.14.17" } -solana-perf = { path = "../perf", version = "=1.14.17" } -solana-poh = { path = "../poh", version = "=1.14.17" } -solana-runtime = { path = "../runtime", version = "=1.14.17" } -solana-sdk = { path = "../sdk", version = "=1.14.17" } -solana-streamer = { path = "../streamer", version = "=1.14.17" } -solana-version = { path = "../version", version = "=1.14.17" } +solana-client = { path = "../client", version = "=1.14.18" } +solana-core = { path = "../core", version = "=1.14.18" } +solana-gossip = { path = "../gossip", version = "=1.14.18" } +solana-ledger = { path = "../ledger", version = "=1.14.18" } +solana-logger = { path = "../logger", version = "=1.14.18" } +solana-measure = { path = "../measure", version = "=1.14.18" } +solana-perf = { path = "../perf", version = "=1.14.18" } +solana-poh = { path = "../poh", version = "=1.14.18" } +solana-runtime = { path = "../runtime", version = "=1.14.18" } +solana-sdk = { path = "../sdk", version = "=1.14.18" } +solana-streamer = { path = "../streamer", version = "=1.14.18" } +solana-version = { path = "../version", version = "=1.14.18" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/banks-client/Cargo.toml b/banks-client/Cargo.toml index e04f4b058bc77b..4dd1cc5c38d4df 100644 --- a/banks-client/Cargo.toml +++ b/banks-client/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-banks-client" -version = "1.14.17" +version = "1.14.18" description = "Solana banks client" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,17 +12,17 @@ edition = "2021" [dependencies] borsh = "0.9.3" futures = "0.3" -solana-banks-interface = { path = "../banks-interface", version = "=1.14.17" } -solana-program = { path = "../sdk/program", version = "=1.14.17" } -solana-sdk = { path = "../sdk", version = "=1.14.17" } +solana-banks-interface = { path = "../banks-interface", version = "=1.14.18" } +solana-program = { path = "../sdk/program", version = "=1.14.18" } +solana-sdk = { path = "../sdk", version = "=1.14.18" } tarpc = { version = "0.29.0", features = ["full"] } thiserror = "1.0" tokio = { version = "~1.14.1", features = ["full"] } tokio-serde = { version = "0.8", features = ["bincode"] } [dev-dependencies] -solana-banks-server = { path = "../banks-server", version = "=1.14.17" } -solana-runtime = { path = "../runtime", version = "=1.14.17" } +solana-banks-server = { path = "../banks-server", version = "=1.14.18" } +solana-runtime = { path = "../runtime", version = "=1.14.18" } [lib] crate-type = ["lib"] diff --git a/banks-interface/Cargo.toml b/banks-interface/Cargo.toml index eb207c3e3f4838..83a37c0bfa2d03 100644 --- a/banks-interface/Cargo.toml +++ b/banks-interface/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-banks-interface" -version = "1.14.17" +version = "1.14.18" description = "Solana banks RPC interface" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -11,7 +11,7 @@ edition = "2021" [dependencies] serde = { version = "1.0.138", features = ["derive"] } -solana-sdk = { path = "../sdk", version = "=1.14.17" } +solana-sdk = { path = "../sdk", version = "=1.14.18" } tarpc = { version = "0.29.0", features = ["full"] } [lib] diff --git a/banks-server/Cargo.toml b/banks-server/Cargo.toml index 45ebf59412ec25..6f85dbef0c2975 100644 --- a/banks-server/Cargo.toml +++ b/banks-server/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-banks-server" -version = "1.14.17" +version = "1.14.18" description = "Solana banks server" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,11 +13,11 @@ edition = "2021" bincode = "1.3.3" crossbeam-channel = "0.5" futures = "0.3" -solana-banks-interface = { path = "../banks-interface", version = "=1.14.17" } -solana-client = { path = "../client", version = "=1.14.17" } -solana-runtime = { path = "../runtime", version = "=1.14.17" } -solana-sdk = { path = "../sdk", version = "=1.14.17" } -solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.17" } +solana-banks-interface = { path = "../banks-interface", version = "=1.14.18" } +solana-client = { path = "../client", version = "=1.14.18" } +solana-runtime = { path = "../runtime", version = "=1.14.18" } +solana-sdk = { path = "../sdk", version = "=1.14.18" } +solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.18" } tarpc = { version = "0.29.0", features = ["full"] } tokio = { version = "1", features = ["full"] } tokio-serde = { version = "0.8", features = ["bincode"] } diff --git a/bench-streamer/Cargo.toml b/bench-streamer/Cargo.toml index eb86da70a137ff..5bb526e07969d8 100644 --- a/bench-streamer/Cargo.toml +++ b/bench-streamer/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-bench-streamer" -version = "1.14.17" +version = "1.14.18" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -11,9 +11,9 @@ publish = false [dependencies] clap = { version = "3.1.5", features = ["cargo"] } crossbeam-channel = "0.5" -solana-net-utils = { path = "../net-utils", version = "=1.14.17" } -solana-streamer = { path = "../streamer", version = "=1.14.17" } -solana-version = { path = "../version", version = "=1.14.17" } +solana-net-utils = { path = "../net-utils", version = "=1.14.18" } +solana-streamer = { path = "../streamer", version = "=1.14.18" } +solana-version = { path = "../version", version = "=1.14.18" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/bench-tps/Cargo.toml b/bench-tps/Cargo.toml index d980ffa4192dcf..76e179966df70b 100644 --- a/bench-tps/Cargo.toml +++ b/bench-tps/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-bench-tps" -version = "1.14.17" +version = "1.14.18" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -15,28 +15,28 @@ log = "0.4.17" rayon = "1.5.3" serde_json = "1.0.81" serde_yaml = "0.8.26" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.17" } -solana-cli-config = { path = "../cli-config", version = "=1.14.17" } -solana-client = { path = "../client", version = "=1.14.17" } -solana-core = { path = "../core", version = "=1.14.17" } -solana-faucet = { path = "../faucet", version = "=1.14.17" } -solana-genesis = { path = "../genesis", version = "=1.14.17" } -solana-gossip = { path = "../gossip", version = "=1.14.17" } -solana-logger = { path = "../logger", version = "=1.14.17" } -solana-measure = { path = "../measure", version = "=1.14.17" } -solana-metrics = { path = "../metrics", version = "=1.14.17" } -solana-net-utils = { path = "../net-utils", version = "=1.14.17" } -solana-rpc = { path = "../rpc", version = "=1.14.17" } -solana-runtime = { path = "../runtime", version = "=1.14.17" } -solana-sdk = { path = "../sdk", version = "=1.14.17" } -solana-streamer = { path = "../streamer", version = "=1.14.17" } -solana-version = { path = "../version", version = "=1.14.17" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.18" } +solana-cli-config = { path = "../cli-config", version = "=1.14.18" } +solana-client = { path = "../client", version = "=1.14.18" } +solana-core = { path = "../core", version = "=1.14.18" } +solana-faucet = { path = "../faucet", version = "=1.14.18" } +solana-genesis = { path = "../genesis", version = "=1.14.18" } +solana-gossip = { path = "../gossip", version = "=1.14.18" } +solana-logger = { path = "../logger", version = "=1.14.18" } +solana-measure = { path = "../measure", version = "=1.14.18" } +solana-metrics = { path = "../metrics", version = "=1.14.18" } +solana-net-utils = { path = "../net-utils", version = "=1.14.18" } +solana-rpc = { path = "../rpc", version = "=1.14.18" } +solana-runtime = { path = "../runtime", version = "=1.14.18" } +solana-sdk = { path = "../sdk", version = "=1.14.18" } +solana-streamer = { path = "../streamer", version = "=1.14.18" } +solana-version = { path = "../version", version = "=1.14.18" } thiserror = "1.0" [dev-dependencies] serial_test = "0.8.0" -solana-local-cluster = { path = "../local-cluster", version = "=1.14.17" } -solana-test-validator = { path = "../test-validator", version = "=1.14.17" } +solana-local-cluster = { path = "../local-cluster", version = "=1.14.18" } +solana-test-validator = { path = "../test-validator", version = "=1.14.18" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/bloom/Cargo.toml b/bloom/Cargo.toml index 21370a14acf7d5..f3c2db3b153f8f 100644 --- a/bloom/Cargo.toml +++ b/bloom/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bloom" -version = "1.14.17" +version = "1.14.18" description = "Solana bloom filter" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -17,9 +17,9 @@ rand = "0.7.0" rayon = "1.5.3" serde = { version = "1.0.138", features = ["rc"] } serde_derive = "1.0.103" -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.17" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.17" } -solana-sdk = { path = "../sdk", version = "=1.14.17" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.18" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.18" } +solana-sdk = { path = "../sdk", version = "=1.14.18" } [lib] crate-type = ["lib"] diff --git a/bucket_map/Cargo.toml b/bucket_map/Cargo.toml index 5ee62ac911d1cc..69f0d01569e3e1 100644 --- a/bucket_map/Cargo.toml +++ b/bucket_map/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bucket-map" -version = "1.14.17" +version = "1.14.18" description = "solana-bucket-map" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-bucket-map" @@ -15,14 +15,14 @@ log = { version = "0.4.17" } memmap2 = "0.5.3" modular-bitfield = "0.11.2" rand = "0.7.0" -solana-measure = { path = "../measure", version = "=1.14.17" } -solana-sdk = { path = "../sdk", version = "=1.14.17" } +solana-measure = { path = "../measure", version = "=1.14.18" } +solana-sdk = { path = "../sdk", version = "=1.14.18" } tempfile = "3.3.0" [dev-dependencies] fs_extra = "1.2.0" rayon = "1.5.3" -solana-logger = { path = "../logger", version = "=1.14.17" } +solana-logger = { path = "../logger", version = "=1.14.18" } [lib] crate-type = ["lib"] diff --git a/clap-utils/Cargo.toml b/clap-utils/Cargo.toml index 74700ad6a9db65..93ada9e4d270db 100644 --- a/clap-utils/Cargo.toml +++ b/clap-utils/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-clap-utils" -version = "1.14.17" +version = "1.14.18" description = "Solana utilities for the clap" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,9 +13,9 @@ edition = "2021" chrono = "0.4" clap = "2.33.0" rpassword = "6.0" -solana-perf = { path = "../perf", version = "=1.14.17" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.17", default-features = false } -solana-sdk = { path = "../sdk", version = "=1.14.17" } +solana-perf = { path = "../perf", version = "=1.14.18" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.18", default-features = false } +solana-sdk = { path = "../sdk", version = "=1.14.18" } thiserror = "1.0.31" tiny-bip39 = "0.8.2" uriparse = "0.6.4" diff --git a/clap-v3-utils/Cargo.toml b/clap-v3-utils/Cargo.toml index 3dde2d241bd95c..b1613ad97fe8a1 100644 --- a/clap-v3-utils/Cargo.toml +++ b/clap-v3-utils/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-clap-v3-utils" -version = "1.14.17" +version = "1.14.18" description = "Solana utilities for the clap v3" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,9 +13,9 @@ edition = "2021" chrono = "0.4" clap = { version = "3.1.5", features = ["cargo"] } rpassword = "6.0" -solana-perf = { path = "../perf", version = "=1.14.17" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.17", default-features = false } -solana-sdk = { path = "../sdk", version = "=1.14.17" } +solana-perf = { path = "../perf", version = "=1.14.18" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.18", default-features = false } +solana-sdk = { path = "../sdk", version = "=1.14.18" } thiserror = "1.0.31" tiny-bip39 = "0.8.2" uriparse = "0.6.4" diff --git a/cli-config/Cargo.toml b/cli-config/Cargo.toml index f30261049c33ae..07a8376ec5f275 100644 --- a/cli-config/Cargo.toml +++ b/cli-config/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-cli-config" description = "Blockchain, Rebuilt for Scale" -version = "1.14.17" +version = "1.14.18" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -15,8 +15,8 @@ lazy_static = "1.4.0" serde = "1.0.138" serde_derive = "1.0.103" serde_yaml = "0.8.26" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.17" } -solana-sdk = { path = "../sdk", version = "=1.14.17" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.18" } +solana-sdk = { path = "../sdk", version = "=1.14.18" } url = "2.2.2" [dev-dependencies] diff --git a/cli-output/Cargo.toml b/cli-output/Cargo.toml index c61f7668674f96..88764247f5681d 100644 --- a/cli-output/Cargo.toml +++ b/cli-output/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-cli-output" description = "Blockchain, Rebuilt for Scale" -version = "1.14.17" +version = "1.14.18" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -21,13 +21,13 @@ pretty-hex = "0.3.0" semver = "1.0.10" serde = "1.0.138" serde_json = "1.0.81" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.17" } -solana-clap-utils = { path = "../clap-utils", version = "=1.14.17" } -solana-cli-config = { path = "../cli-config", version = "=1.14.17" } -solana-client = { path = "../client", version = "=1.14.17" } -solana-sdk = { path = "../sdk", version = "=1.14.17" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.17" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.17" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.18" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.18" } +solana-cli-config = { path = "../cli-config", version = "=1.14.18" } +solana-client = { path = "../client", version = "=1.14.18" } +solana-sdk = { path = "../sdk", version = "=1.14.18" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.18" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.18" } spl-memo = { version = "=3.0.1", features = ["no-entrypoint"] } [dev-dependencies] diff --git a/cli/Cargo.toml b/cli/Cargo.toml index 5fb2c20017b2e5..f9fedd77cf99f5 100644 --- a/cli/Cargo.toml +++ b/cli/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-cli" description = "Blockchain, Rebuilt for Scale" -version = "1.14.17" +version = "1.14.18" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -27,30 +27,30 @@ semver = "1.0.10" serde = "1.0.138" serde_derive = "1.0.103" serde_json = "1.0.81" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.17" } -solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.17" } -solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.17" } -solana-clap-utils = { path = "../clap-utils", version = "=1.14.17" } -solana-cli-config = { path = "../cli-config", version = "=1.14.17" } -solana-cli-output = { path = "../cli-output", version = "=1.14.17" } -solana-client = { path = "../client", version = "=1.14.17" } -solana-config-program = { path = "../programs/config", version = "=1.14.17" } -solana-faucet = { path = "../faucet", version = "=1.14.17" } -solana-logger = { path = "../logger", version = "=1.14.17" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.17" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.17" } -solana-sdk = { path = "../sdk", version = "=1.14.17" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.17" } -solana-version = { path = "../version", version = "=1.14.17" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.17" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.18" } +solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.18" } +solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.18" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.18" } +solana-cli-config = { path = "../cli-config", version = "=1.14.18" } +solana-cli-output = { path = "../cli-output", version = "=1.14.18" } +solana-client = { path = "../client", version = "=1.14.18" } +solana-config-program = { path = "../programs/config", version = "=1.14.18" } +solana-faucet = { path = "../faucet", version = "=1.14.18" } +solana-logger = { path = "../logger", version = "=1.14.18" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.18" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.18" } +solana-sdk = { path = "../sdk", version = "=1.14.18" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.18" } +solana-version = { path = "../version", version = "=1.14.18" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.18" } solana_rbpf = "=0.2.31" spl-memo = { version = "=3.0.1", features = ["no-entrypoint"] } thiserror = "1.0.31" tiny-bip39 = "0.8.2" [dev-dependencies] -solana-streamer = { path = "../streamer", version = "=1.14.17" } -solana-test-validator = { path = "../test-validator", version = "=1.14.17" } +solana-streamer = { path = "../streamer", version = "=1.14.18" } +solana-test-validator = { path = "../test-validator", version = "=1.14.18" } tempfile = "3.3.0" [[bin]] diff --git a/client-test/Cargo.toml b/client-test/Cargo.toml index ce075421f2034b..b100aa7d851ba9 100644 --- a/client-test/Cargo.toml +++ b/client-test/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-client-test" -version = "1.14.17" +version = "1.14.18" description = "Solana RPC Test" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,25 +14,25 @@ publish = false futures-util = "0.3.21" serde_json = "1.0.81" serial_test = "0.8.0" -solana-client = { path = "../client", version = "=1.14.17" } -solana-ledger = { path = "../ledger", version = "=1.14.17" } -solana-measure = { path = "../measure", version = "=1.14.17" } -solana-merkle-tree = { path = "../merkle-tree", version = "=1.14.17" } -solana-metrics = { path = "../metrics", version = "=1.14.17" } -solana-perf = { path = "../perf", version = "=1.14.17" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.17" } -solana-rpc = { path = "../rpc", version = "=1.14.17" } -solana-runtime = { path = "../runtime", version = "=1.14.17" } -solana-sdk = { path = "../sdk", version = "=1.14.17" } -solana-streamer = { path = "../streamer", version = "=1.14.17" } -solana-test-validator = { path = "../test-validator", version = "=1.14.17" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.17" } -solana-version = { path = "../version", version = "=1.14.17" } +solana-client = { path = "../client", version = "=1.14.18" } +solana-ledger = { path = "../ledger", version = "=1.14.18" } +solana-measure = { path = "../measure", version = "=1.14.18" } +solana-merkle-tree = { path = "../merkle-tree", version = "=1.14.18" } +solana-metrics = { path = "../metrics", version = "=1.14.18" } +solana-perf = { path = "../perf", version = "=1.14.18" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.18" } +solana-rpc = { path = "../rpc", version = "=1.14.18" } +solana-runtime = { path = "../runtime", version = "=1.14.18" } +solana-sdk = { path = "../sdk", version = "=1.14.18" } +solana-streamer = { path = "../streamer", version = "=1.14.18" } +solana-test-validator = { path = "../test-validator", version = "=1.14.18" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.18" } +solana-version = { path = "../version", version = "=1.14.18" } systemstat = "0.1.11" tokio = { version = "~1.14.1", features = ["full"] } [dev-dependencies] -solana-logger = { path = "../logger", version = "=1.14.17" } +solana-logger = { path = "../logger", version = "=1.14.18" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/client/Cargo.toml b/client/Cargo.toml index 3c3f922deb2421..b4e2566792f358 100644 --- a/client/Cargo.toml +++ b/client/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-client" -version = "1.14.17" +version = "1.14.18" description = "Solana Client" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -38,17 +38,17 @@ semver = "1.0.10" serde = "1.0.138" serde_derive = "1.0.103" serde_json = "1.0.81" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.17" } -solana-clap-utils = { path = "../clap-utils", version = "=1.14.17" } -solana-faucet = { path = "../faucet", version = "=1.14.17" } -solana-measure = { path = "../measure", version = "=1.14.17" } -solana-metrics = { path = "../metrics", version = "=1.14.17" } -solana-net-utils = { path = "../net-utils", version = "=1.14.17" } -solana-sdk = { path = "../sdk", version = "=1.14.17" } -solana-streamer = { path = "../streamer", version = "=1.14.17" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.17" } -solana-version = { path = "../version", version = "=1.14.17" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.17" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.18" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.18" } +solana-faucet = { path = "../faucet", version = "=1.14.18" } +solana-measure = { path = "../measure", version = "=1.14.18" } +solana-metrics = { path = "../metrics", version = "=1.14.18" } +solana-net-utils = { path = "../net-utils", version = "=1.14.18" } +solana-sdk = { path = "../sdk", version = "=1.14.18" } +solana-streamer = { path = "../streamer", version = "=1.14.18" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.18" } +solana-version = { path = "../version", version = "=1.14.18" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.18" } spl-token-2022 = { version = "=0.6.0", features = ["no-entrypoint"] } thiserror = "1.0" tokio = { version = "1", features = ["full"] } @@ -61,8 +61,8 @@ url = "2.2.2" anyhow = "1.0.58" assert_matches = "1.5.0" jsonrpc-http-server = "18.0.0" -solana-logger = { path = "../logger", version = "=1.14.17" } -solana-perf = { path = "../perf", version = "=1.14.17" } +solana-logger = { path = "../logger", version = "=1.14.18" } +solana-perf = { path = "../perf", version = "=1.14.18" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/core/Cargo.toml b/core/Cargo.toml index 5849ca1bc0c154..3b65af8abee997 100644 --- a/core/Cargo.toml +++ b/core/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "solana-core" description = "Blockchain, Rebuilt for Scale" -version = "1.14.17" +version = "1.14.18" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-core" readme = "../README.md" @@ -36,30 +36,30 @@ rand_chacha = "0.2.2" rayon = "1.5.3" serde = "1.0.138" serde_derive = "1.0.103" -solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.17" } -solana-bloom = { path = "../bloom", version = "=1.14.17" } -solana-client = { path = "../client", version = "=1.14.17" } -solana-entry = { path = "../entry", version = "=1.14.17" } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.17" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.17" } -solana-geyser-plugin-manager = { path = "../geyser-plugin-manager", version = "=1.14.17" } -solana-gossip = { path = "../gossip", version = "=1.14.17" } -solana-ledger = { path = "../ledger", version = "=1.14.17" } -solana-measure = { path = "../measure", version = "=1.14.17" } -solana-metrics = { path = "../metrics", version = "=1.14.17" } -solana-net-utils = { path = "../net-utils", version = "=1.14.17" } -solana-perf = { path = "../perf", version = "=1.14.17" } -solana-poh = { path = "../poh", version = "=1.14.17" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.17" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.17" } -solana-rpc = { path = "../rpc", version = "=1.14.17" } -solana-runtime = { path = "../runtime", version = "=1.14.17" } -solana-sdk = { path = "../sdk", version = "=1.14.17" } -solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.17" } -solana-streamer = { path = "../streamer", version = "=1.14.17" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.17" } -solana-version = { path = "../version", version = "=1.14.17" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.17" } +solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.18" } +solana-bloom = { path = "../bloom", version = "=1.14.18" } +solana-client = { path = "../client", version = "=1.14.18" } +solana-entry = { path = "../entry", version = "=1.14.18" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.18" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.18" } +solana-geyser-plugin-manager = { path = "../geyser-plugin-manager", version = "=1.14.18" } +solana-gossip = { path = "../gossip", version = "=1.14.18" } +solana-ledger = { path = "../ledger", version = "=1.14.18" } +solana-measure = { path = "../measure", version = "=1.14.18" } +solana-metrics = { path = "../metrics", version = "=1.14.18" } +solana-net-utils = { path = "../net-utils", version = "=1.14.18" } +solana-perf = { path = "../perf", version = "=1.14.18" } +solana-poh = { path = "../poh", version = "=1.14.18" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.18" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.18" } +solana-rpc = { path = "../rpc", version = "=1.14.18" } +solana-runtime = { path = "../runtime", version = "=1.14.18" } +solana-sdk = { path = "../sdk", version = "=1.14.18" } +solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.18" } +solana-streamer = { path = "../streamer", version = "=1.14.18" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.18" } +solana-version = { path = "../version", version = "=1.14.18" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.18" } sys-info = "0.9.1" tempfile = "3.3.0" thiserror = "1.0" @@ -71,9 +71,9 @@ matches = "0.1.9" raptorq = "1.7.0" serde_json = "1.0.81" serial_test = "0.8.0" -solana-logger = { path = "../logger", version = "=1.14.17" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.17" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.17" } +solana-logger = { path = "../logger", version = "=1.14.18" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.18" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.18" } static_assertions = "1.1.0" systemstat = "0.1.11" test-case = "2.1.0" diff --git a/dos/Cargo.toml b/dos/Cargo.toml index 3629979b3a8ec2..b5726e81624e05 100644 --- a/dos/Cargo.toml +++ b/dos/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-dos" -version = "1.14.17" +version = "1.14.18" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -17,23 +17,23 @@ itertools = "0.10.3" log = "0.4.17" rand = "0.7.0" serde = "1.0.138" -solana-bench-tps = { path = "../bench-tps", version = "=1.14.17" } -solana-client = { path = "../client", version = "=1.14.17" } -solana-core = { path = "../core", version = "=1.14.17" } -solana-faucet = { path = "../faucet", version = "=1.14.17" } -solana-gossip = { path = "../gossip", version = "=1.14.17" } -solana-logger = { path = "../logger", version = "=1.14.17" } -solana-measure = { path = "../measure", version = "=1.14.17" } -solana-net-utils = { path = "../net-utils", version = "=1.14.17" } -solana-perf = { path = "../perf", version = "=1.14.17" } -solana-rpc = { path = "../rpc", version = "=1.14.17" } -solana-sdk = { path = "../sdk", version = "=1.14.17" } -solana-streamer = { path = "../streamer", version = "=1.14.17" } -solana-version = { path = "../version", version = "=1.14.17" } +solana-bench-tps = { path = "../bench-tps", version = "=1.14.18" } +solana-client = { path = "../client", version = "=1.14.18" } +solana-core = { path = "../core", version = "=1.14.18" } +solana-faucet = { path = "../faucet", version = "=1.14.18" } +solana-gossip = { path = "../gossip", version = "=1.14.18" } +solana-logger = { path = "../logger", version = "=1.14.18" } +solana-measure = { path = "../measure", version = "=1.14.18" } +solana-net-utils = { path = "../net-utils", version = "=1.14.18" } +solana-perf = { path = "../perf", version = "=1.14.18" } +solana-rpc = { path = "../rpc", version = "=1.14.18" } +solana-sdk = { path = "../sdk", version = "=1.14.18" } +solana-streamer = { path = "../streamer", version = "=1.14.18" } +solana-version = { path = "../version", version = "=1.14.18" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] [dev-dependencies] serial_test = "0.8.0" -solana-local-cluster = { path = "../local-cluster", version = "=1.14.17" } +solana-local-cluster = { path = "../local-cluster", version = "=1.14.18" } diff --git a/download-utils/Cargo.toml b/download-utils/Cargo.toml index fd4aa1ae3df5b2..2eb0fe3e9b55c6 100644 --- a/download-utils/Cargo.toml +++ b/download-utils/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-download-utils" -version = "1.14.17" +version = "1.14.18" description = "Solana Download Utils" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,8 +14,8 @@ console = "0.15.0" indicatif = "0.16.2" log = "0.4.17" reqwest = { version = "0.11.11", default-features = false, features = ["blocking", "brotli", "deflate", "gzip", "rustls-tls", "json"] } -solana-runtime = { path = "../runtime", version = "=1.14.17" } -solana-sdk = { path = "../sdk", version = "=1.14.17" } +solana-runtime = { path = "../runtime", version = "=1.14.18" } +solana-sdk = { path = "../sdk", version = "=1.14.18" } [lib] crate-type = ["lib"] diff --git a/entry/Cargo.toml b/entry/Cargo.toml index 4bf0d7869a3ad3..d1d3af00d76977 100644 --- a/entry/Cargo.toml +++ b/entry/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-entry" -version = "1.14.17" +version = "1.14.18" description = "Solana Entry" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -19,16 +19,16 @@ log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" serde = "1.0.138" -solana-measure = { path = "../measure", version = "=1.14.17" } -solana-merkle-tree = { path = "../merkle-tree", version = "=1.14.17" } -solana-metrics = { path = "../metrics", version = "=1.14.17" } -solana-perf = { path = "../perf", version = "=1.14.17" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.17" } -solana-sdk = { path = "../sdk", version = "=1.14.17" } +solana-measure = { path = "../measure", version = "=1.14.18" } +solana-merkle-tree = { path = "../merkle-tree", version = "=1.14.18" } +solana-metrics = { path = "../metrics", version = "=1.14.18" } +solana-perf = { path = "../perf", version = "=1.14.18" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.18" } +solana-sdk = { path = "../sdk", version = "=1.14.18" } [dev-dependencies] matches = "0.1.9" -solana-logger = { path = "../logger", version = "=1.14.17" } +solana-logger = { path = "../logger", version = "=1.14.18" } [lib] crate-type = ["lib"] diff --git a/faucet/Cargo.toml b/faucet/Cargo.toml index ec6b947206a013..09e9fb6a2bc479 100644 --- a/faucet/Cargo.toml +++ b/faucet/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-faucet" -version = "1.14.17" +version = "1.14.18" description = "Solana Faucet" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -17,12 +17,12 @@ crossbeam-channel = "0.5" log = "0.4.17" serde = "1.0.138" serde_derive = "1.0.103" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.17" } -solana-cli-config = { path = "../cli-config", version = "=1.14.17" } -solana-logger = { path = "../logger", version = "=1.14.17" } -solana-metrics = { path = "../metrics", version = "=1.14.17" } -solana-sdk = { path = "../sdk", version = "=1.14.17" } -solana-version = { path = "../version", version = "=1.14.17" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.18" } +solana-cli-config = { path = "../cli-config", version = "=1.14.18" } +solana-logger = { path = "../logger", version = "=1.14.18" } +solana-metrics = { path = "../metrics", version = "=1.14.18" } +solana-sdk = { path = "../sdk", version = "=1.14.18" } +solana-version = { path = "../version", version = "=1.14.18" } spl-memo = { version = "=3.0.1", features = ["no-entrypoint"] } thiserror = "1.0" tokio = { version = "1", features = ["full"] } diff --git a/frozen-abi/Cargo.toml b/frozen-abi/Cargo.toml index c8c326e16290ce..bc663bd33e5ca8 100644 --- a/frozen-abi/Cargo.toml +++ b/frozen-abi/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-frozen-abi" -version = "1.14.17" +version = "1.14.18" description = "Solana Frozen ABI" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -20,7 +20,7 @@ serde_bytes = "0.11" serde_derive = "1.0" serde_json = "1.0" sha2 = "0.10.2" -solana-frozen-abi-macro = { path = "macro", version = "=1.14.17" } +solana-frozen-abi-macro = { path = "macro", version = "=1.14.18" } thiserror = "1.0" [target.'cfg(not(target_os = "solana"))'.dependencies] @@ -43,7 +43,7 @@ rand_core = { version = "0.6.3", features = ["alloc", "getrandom", "std"] } subtle = { version = "2.4.1", features = ["default", "i128", "std"] } [target.'cfg(not(target_os = "solana"))'.dev-dependencies] -solana-logger = { path = "../logger", version = "=1.14.17" } +solana-logger = { path = "../logger", version = "=1.14.18" } [build-dependencies] rustc_version = "0.4" diff --git a/frozen-abi/macro/Cargo.toml b/frozen-abi/macro/Cargo.toml index 0e6573b0ba9b9e..e28cb6135c5f21 100644 --- a/frozen-abi/macro/Cargo.toml +++ b/frozen-abi/macro/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-frozen-abi-macro" -version = "1.14.17" +version = "1.14.18" description = "Solana Frozen ABI Macro" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/genesis-utils/Cargo.toml b/genesis-utils/Cargo.toml index 8ab4cfb61d9a98..53624a1cac9b82 100644 --- a/genesis-utils/Cargo.toml +++ b/genesis-utils/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-genesis-utils" -version = "1.14.17" +version = "1.14.18" description = "Solana Genesis Utils" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,9 +10,9 @@ documentation = "https://docs.rs/solana-download-utils" edition = "2021" [dependencies] -solana-download-utils = { path = "../download-utils", version = "=1.14.17" } -solana-runtime = { path = "../runtime", version = "=1.14.17" } -solana-sdk = { path = "../sdk", version = "=1.14.17" } +solana-download-utils = { path = "../download-utils", version = "=1.14.18" } +solana-runtime = { path = "../runtime", version = "=1.14.18" } +solana-sdk = { path = "../sdk", version = "=1.14.18" } [lib] crate-type = ["lib"] diff --git a/genesis/Cargo.toml b/genesis/Cargo.toml index 9b055e32de91e7..88cf9fb97e68f5 100644 --- a/genesis/Cargo.toml +++ b/genesis/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-genesis" description = "Blockchain, Rebuilt for Scale" -version = "1.14.17" +version = "1.14.18" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -15,16 +15,16 @@ clap = "2.33.1" serde = "1.0.138" serde_json = "1.0.81" serde_yaml = "0.8.26" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.17" } -solana-cli-config = { path = "../cli-config", version = "=1.14.17" } -solana-entry = { path = "../entry", version = "=1.14.17" } -solana-ledger = { path = "../ledger", version = "=1.14.17" } -solana-logger = { path = "../logger", version = "=1.14.17" } -solana-runtime = { path = "../runtime", version = "=1.14.17" } -solana-sdk = { path = "../sdk", version = "=1.14.17" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.17" } -solana-version = { path = "../version", version = "=1.14.17" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.17" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.18" } +solana-cli-config = { path = "../cli-config", version = "=1.14.18" } +solana-entry = { path = "../entry", version = "=1.14.18" } +solana-ledger = { path = "../ledger", version = "=1.14.18" } +solana-logger = { path = "../logger", version = "=1.14.18" } +solana-runtime = { path = "../runtime", version = "=1.14.18" } +solana-sdk = { path = "../sdk", version = "=1.14.18" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.18" } +solana-version = { path = "../version", version = "=1.14.18" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.18" } tempfile = "3.3.0" [[bin]] diff --git a/geyser-plugin-interface/Cargo.toml b/geyser-plugin-interface/Cargo.toml index fb5332f847f0bd..b7942a1a29df32 100644 --- a/geyser-plugin-interface/Cargo.toml +++ b/geyser-plugin-interface/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-geyser-plugin-interface" description = "The Solana Geyser plugin interface." -version = "1.14.17" +version = "1.14.18" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -11,8 +11,8 @@ documentation = "https://docs.rs/solana-geyser-plugin-interface" [dependencies] log = "0.4.17" -solana-sdk = { path = "../sdk", version = "=1.14.17" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.17" } +solana-sdk = { path = "../sdk", version = "=1.14.18" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.18" } thiserror = "1.0.31" [package.metadata.docs.rs] diff --git a/geyser-plugin-manager/Cargo.toml b/geyser-plugin-manager/Cargo.toml index b2a316dd1caac0..ac30e41c01bc8c 100644 --- a/geyser-plugin-manager/Cargo.toml +++ b/geyser-plugin-manager/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-geyser-plugin-manager" description = "The Solana Geyser plugin manager." -version = "1.14.17" +version = "1.14.18" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -16,13 +16,13 @@ json5 = "0.4.1" libloading = "0.7.3" log = "0.4.17" serde_json = "1.0.81" -solana-geyser-plugin-interface = { path = "../geyser-plugin-interface", version = "=1.14.17" } -solana-measure = { path = "../measure", version = "=1.14.17" } -solana-metrics = { path = "../metrics", version = "=1.14.17" } -solana-rpc = { path = "../rpc", version = "=1.14.17" } -solana-runtime = { path = "../runtime", version = "=1.14.17" } -solana-sdk = { path = "../sdk", version = "=1.14.17" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.17" } +solana-geyser-plugin-interface = { path = "../geyser-plugin-interface", version = "=1.14.18" } +solana-measure = { path = "../measure", version = "=1.14.18" } +solana-metrics = { path = "../metrics", version = "=1.14.18" } +solana-rpc = { path = "../rpc", version = "=1.14.18" } +solana-runtime = { path = "../runtime", version = "=1.14.18" } +solana-sdk = { path = "../sdk", version = "=1.14.18" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.18" } thiserror = "1.0.31" [package.metadata.docs.rs] diff --git a/gossip/Cargo.toml b/gossip/Cargo.toml index a539d2df52a8e9..57ad332646c090 100644 --- a/gossip/Cargo.toml +++ b/gossip/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-gossip" description = "Blockchain, Rebuilt for Scale" -version = "1.14.17" +version = "1.14.18" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -27,24 +27,24 @@ rayon = "1.5.3" serde = "1.0.138" serde_bytes = "0.11" serde_derive = "1.0.103" -solana-bloom = { path = "../bloom", version = "=1.14.17" } -solana-clap-utils = { path = "../clap-utils", version = "=1.14.17" } -solana-client = { path = "../client", version = "=1.14.17" } -solana-entry = { path = "../entry", version = "=1.14.17" } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.17" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.17" } -solana-ledger = { path = "../ledger", version = "=1.14.17" } -solana-logger = { path = "../logger", version = "=1.14.17" } -solana-measure = { path = "../measure", version = "=1.14.17" } -solana-metrics = { path = "../metrics", version = "=1.14.17" } -solana-net-utils = { path = "../net-utils", version = "=1.14.17" } -solana-perf = { path = "../perf", version = "=1.14.17" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.17" } -solana-runtime = { path = "../runtime", version = "=1.14.17" } -solana-sdk = { path = "../sdk", version = "=1.14.17" } -solana-streamer = { path = "../streamer", version = "=1.14.17" } -solana-version = { path = "../version", version = "=1.14.17" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.17" } +solana-bloom = { path = "../bloom", version = "=1.14.18" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.18" } +solana-client = { path = "../client", version = "=1.14.18" } +solana-entry = { path = "../entry", version = "=1.14.18" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.18" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.18" } +solana-ledger = { path = "../ledger", version = "=1.14.18" } +solana-logger = { path = "../logger", version = "=1.14.18" } +solana-measure = { path = "../measure", version = "=1.14.18" } +solana-metrics = { path = "../metrics", version = "=1.14.18" } +solana-net-utils = { path = "../net-utils", version = "=1.14.18" } +solana-perf = { path = "../perf", version = "=1.14.18" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.18" } +solana-runtime = { path = "../runtime", version = "=1.14.18" } +solana-sdk = { path = "../sdk", version = "=1.14.18" } +solana-streamer = { path = "../streamer", version = "=1.14.18" } +solana-version = { path = "../version", version = "=1.14.18" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.18" } thiserror = "1.0" [dev-dependencies] diff --git a/install/Cargo.toml b/install/Cargo.toml index 53ab67a40bd97d..377deee7a7118a 100644 --- a/install/Cargo.toml +++ b/install/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-install" description = "The solana cluster software installer" -version = "1.14.17" +version = "1.14.18" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -26,12 +26,12 @@ reqwest = { version = "0.11.11", default-features = false, features = ["blocking semver = "1.0.10" serde = { version = "1.0.138", features = ["derive"] } serde_yaml = "0.8.26" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.17" } -solana-client = { path = "../client", version = "=1.14.17" } -solana-config-program = { path = "../programs/config", version = "=1.14.17" } -solana-logger = { path = "../logger", version = "=1.14.17" } -solana-sdk = { path = "../sdk", version = "=1.14.17" } -solana-version = { path = "../version", version = "=1.14.17" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.18" } +solana-client = { path = "../client", version = "=1.14.18" } +solana-config-program = { path = "../programs/config", version = "=1.14.18" } +solana-logger = { path = "../logger", version = "=1.14.18" } +solana-sdk = { path = "../sdk", version = "=1.14.18" } +solana-version = { path = "../version", version = "=1.14.18" } tar = "0.4.38" tempfile = "3.3.0" url = "2.2.2" diff --git a/keygen/Cargo.toml b/keygen/Cargo.toml index 722000d0a88331..4f68419490fb7e 100644 --- a/keygen/Cargo.toml +++ b/keygen/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-keygen" -version = "1.14.17" +version = "1.14.18" description = "Solana key generation utility" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,11 +14,11 @@ bs58 = "0.4.0" clap = { version = "3.1.5", features = ["cargo"] } dirs-next = "2.0.0" num_cpus = "1.13.1" -solana-clap-v3-utils = { path = "../clap-v3-utils", version = "=1.14.17" } -solana-cli-config = { path = "../cli-config", version = "=1.14.17" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.17" } -solana-sdk = { path = "../sdk", version = "=1.14.17" } -solana-version = { path = "../version", version = "=1.14.17" } +solana-clap-v3-utils = { path = "../clap-v3-utils", version = "=1.14.18" } +solana-cli-config = { path = "../cli-config", version = "=1.14.18" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.18" } +solana-sdk = { path = "../sdk", version = "=1.14.18" } +solana-version = { path = "../version", version = "=1.14.18" } tiny-bip39 = "0.8.2" [[bin]] diff --git a/ledger-tool/Cargo.toml b/ledger-tool/Cargo.toml index df469525ee1172..d431202802098b 100644 --- a/ledger-tool/Cargo.toml +++ b/ledger-tool/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-ledger-tool" description = "Blockchain, Rebuilt for Scale" -version = "1.14.17" +version = "1.14.18" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -22,20 +22,20 @@ log = { version = "0.4.17" } regex = "1" serde = { version = "1.0", features = ["derive"] } serde_json = "1.0.81" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.17" } -solana-cli-output = { path = "../cli-output", version = "=1.14.17" } -solana-core = { path = "../core", version = "=1.14.17" } -solana-entry = { path = "../entry", version = "=1.14.17" } -solana-ledger = { path = "../ledger", version = "=1.14.17" } -solana-logger = { path = "../logger", version = "=1.14.17" } -solana-measure = { path = "../measure", version = "=1.14.17" } -solana-runtime = { path = "../runtime", version = "=1.14.17" } -solana-sdk = { path = "../sdk", version = "=1.14.17" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.17" } -solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.17" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.17" } -solana-version = { path = "../version", version = "=1.14.17" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.17" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.18" } +solana-cli-output = { path = "../cli-output", version = "=1.14.18" } +solana-core = { path = "../core", version = "=1.14.18" } +solana-entry = { path = "../entry", version = "=1.14.18" } +solana-ledger = { path = "../ledger", version = "=1.14.18" } +solana-logger = { path = "../logger", version = "=1.14.18" } +solana-measure = { path = "../measure", version = "=1.14.18" } +solana-runtime = { path = "../runtime", version = "=1.14.18" } +solana-sdk = { path = "../sdk", version = "=1.14.18" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.18" } +solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.18" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.18" } +solana-version = { path = "../version", version = "=1.14.18" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.18" } tokio = { version = "1", features = ["full"] } [target.'cfg(not(target_env = "msvc"))'.dependencies] diff --git a/ledger/Cargo.toml b/ledger/Cargo.toml index ff98735623b430..0c5ae5b9d1f3d4 100644 --- a/ledger/Cargo.toml +++ b/ledger/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-ledger" -version = "1.14.17" +version = "1.14.18" description = "Solana ledger" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -35,23 +35,23 @@ reed-solomon-erasure = { version = "6.0.0", features = ["simd-accel"] } serde = "1.0.138" serde_bytes = "0.11.6" sha2 = "0.10.2" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.17" } -solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.17" } -solana-entry = { path = "../entry", version = "=1.14.17" } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.17" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.17" } -solana-measure = { path = "../measure", version = "=1.14.17" } -solana-metrics = { path = "../metrics", version = "=1.14.17" } -solana-perf = { path = "../perf", version = "=1.14.17" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.17" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.17" } -solana-runtime = { path = "../runtime", version = "=1.14.17" } -solana-sdk = { path = "../sdk", version = "=1.14.17" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.17" } -solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.17" } -solana-storage-proto = { path = "../storage-proto", version = "=1.14.17" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.17" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.17" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.18" } +solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.18" } +solana-entry = { path = "../entry", version = "=1.14.18" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.18" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.18" } +solana-measure = { path = "../measure", version = "=1.14.18" } +solana-metrics = { path = "../metrics", version = "=1.14.18" } +solana-perf = { path = "../perf", version = "=1.14.18" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.18" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.18" } +solana-runtime = { path = "../runtime", version = "=1.14.18" } +solana-sdk = { path = "../sdk", version = "=1.14.18" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.18" } +solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.18" } +solana-storage-proto = { path = "../storage-proto", version = "=1.14.18" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.18" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.18" } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } spl-token-2022 = { version = "=0.6.0", features = ["no-entrypoint"] } static_assertions = "1.1.0" @@ -71,8 +71,8 @@ features = ["lz4"] [dev-dependencies] bs58 = "0.4.0" matches = "0.1.9" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.17" } -solana-logger = { path = "../logger", version = "=1.14.17" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.18" } +solana-logger = { path = "../logger", version = "=1.14.18" } test-case = "2.1.0" [build-dependencies] diff --git a/local-cluster/Cargo.toml b/local-cluster/Cargo.toml index f22b5a0e3003bc..040c15bcc5ef0b 100644 --- a/local-cluster/Cargo.toml +++ b/local-cluster/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-local-cluster" description = "Blockchain, Rebuilt for Scale" -version = "1.14.17" +version = "1.14.18" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -16,25 +16,25 @@ itertools = "0.10.3" log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" -solana-client = { path = "../client", version = "=1.14.17" } -solana-config-program = { path = "../programs/config", version = "=1.14.17" } -solana-core = { path = "../core", version = "=1.14.17" } -solana-entry = { path = "../entry", version = "=1.14.17" } -solana-gossip = { path = "../gossip", version = "=1.14.17" } -solana-ledger = { path = "../ledger", version = "=1.14.17" } -solana-runtime = { path = "../runtime", version = "=1.14.17" } -solana-sdk = { path = "../sdk", version = "=1.14.17" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.17" } -solana-streamer = { path = "../streamer", version = "=1.14.17" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.17" } +solana-client = { path = "../client", version = "=1.14.18" } +solana-config-program = { path = "../programs/config", version = "=1.14.18" } +solana-core = { path = "../core", version = "=1.14.18" } +solana-entry = { path = "../entry", version = "=1.14.18" } +solana-gossip = { path = "../gossip", version = "=1.14.18" } +solana-ledger = { path = "../ledger", version = "=1.14.18" } +solana-runtime = { path = "../runtime", version = "=1.14.18" } +solana-sdk = { path = "../sdk", version = "=1.14.18" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.18" } +solana-streamer = { path = "../streamer", version = "=1.14.18" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.18" } tempfile = "3.3.0" [dev-dependencies] assert_matches = "1.5.0" gag = "1.0.0" serial_test = "0.8.0" -solana-download-utils = { path = "../download-utils", version = "=1.14.17" } -solana-logger = { path = "../logger", version = "=1.14.17" } +solana-download-utils = { path = "../download-utils", version = "=1.14.18" } +solana-logger = { path = "../logger", version = "=1.14.18" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/log-analyzer/Cargo.toml b/log-analyzer/Cargo.toml index 72f99023a1c678..56d4be90401777 100644 --- a/log-analyzer/Cargo.toml +++ b/log-analyzer/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-log-analyzer" description = "The solana cluster network analysis tool" -version = "1.14.17" +version = "1.14.18" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,8 +14,8 @@ byte-unit = "4.0.14" clap = { version = "3.1.5", features = ["cargo"] } serde = "1.0.138" serde_json = "1.0.81" -solana-logger = { path = "../logger", version = "=1.14.17" } -solana-version = { path = "../version", version = "=1.14.17" } +solana-logger = { path = "../logger", version = "=1.14.18" } +solana-version = { path = "../version", version = "=1.14.18" } [[bin]] name = "solana-log-analyzer" diff --git a/logger/Cargo.toml b/logger/Cargo.toml index 3b1102167ccece..d2a6cf8a050af2 100644 --- a/logger/Cargo.toml +++ b/logger/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-logger" -version = "1.14.17" +version = "1.14.18" description = "Solana Logger" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/measure/Cargo.toml b/measure/Cargo.toml index 128b42b91696f9..d06b210a3174a3 100644 --- a/measure/Cargo.toml +++ b/measure/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "solana-measure" description = "Blockchain, Rebuilt for Scale" -version = "1.14.17" +version = "1.14.18" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-measure" readme = "../README.md" @@ -12,7 +12,7 @@ edition = "2021" [dependencies] log = "0.4.17" -solana-sdk = { path = "../sdk", version = "=1.14.17" } +solana-sdk = { path = "../sdk", version = "=1.14.18" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/merkle-root-bench/Cargo.toml b/merkle-root-bench/Cargo.toml index e3d7e6db2a077b..5f4d9ff0701075 100644 --- a/merkle-root-bench/Cargo.toml +++ b/merkle-root-bench/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-merkle-root-bench" -version = "1.14.17" +version = "1.14.18" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -11,11 +11,11 @@ publish = false [dependencies] clap = "2.33.1" log = "0.4.17" -solana-logger = { path = "../logger", version = "=1.14.17" } -solana-measure = { path = "../measure", version = "=1.14.17" } -solana-runtime = { path = "../runtime", version = "=1.14.17" } -solana-sdk = { path = "../sdk", version = "=1.14.17" } -solana-version = { path = "../version", version = "=1.14.17" } +solana-logger = { path = "../logger", version = "=1.14.18" } +solana-measure = { path = "../measure", version = "=1.14.18" } +solana-runtime = { path = "../runtime", version = "=1.14.18" } +solana-sdk = { path = "../sdk", version = "=1.14.18" } +solana-version = { path = "../version", version = "=1.14.18" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/merkle-tree/Cargo.toml b/merkle-tree/Cargo.toml index efe4ebddf8dec2..4540badb445e1f 100644 --- a/merkle-tree/Cargo.toml +++ b/merkle-tree/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-merkle-tree" -version = "1.14.17" +version = "1.14.18" description = "Solana Merkle Tree" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -11,7 +11,7 @@ edition = "2021" [dependencies] fast-math = "0.1" -solana-program = { path = "../sdk/program", version = "=1.14.17" } +solana-program = { path = "../sdk/program", version = "=1.14.18" } # This can go once the BPF toolchain target Rust 1.42.0+ [target.bpfel-unknown-unknown.dependencies] diff --git a/metrics/Cargo.toml b/metrics/Cargo.toml index 547b59420d421d..bb48ecab79de5b 100644 --- a/metrics/Cargo.toml +++ b/metrics/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-metrics" -version = "1.14.17" +version = "1.14.18" description = "Solana Metrics" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -15,7 +15,7 @@ gethostname = "0.2.3" lazy_static = "1.4.0" log = "0.4.17" reqwest = { version = "0.11.11", default-features = false, features = ["blocking", "brotli", "deflate", "gzip", "rustls-tls", "json"] } -solana-sdk = { path = "../sdk", version = "=1.14.17" } +solana-sdk = { path = "../sdk", version = "=1.14.18" } [dev-dependencies] env_logger = "0.9.0" diff --git a/net-shaper/Cargo.toml b/net-shaper/Cargo.toml index ffb16eedd384cb..31dfc815fdfca1 100644 --- a/net-shaper/Cargo.toml +++ b/net-shaper/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-net-shaper" description = "The solana cluster network shaping tool" -version = "1.14.17" +version = "1.14.18" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,7 +14,7 @@ clap = { version = "3.1.5", features = ["cargo"] } rand = "0.7.0" serde = { version = "1.0.138", features = ["derive"] } serde_json = "1.0.81" -solana-logger = { path = "../logger", version = "=1.14.17" } +solana-logger = { path = "../logger", version = "=1.14.18" } [[bin]] name = "solana-net-shaper" diff --git a/net-utils/Cargo.toml b/net-utils/Cargo.toml index ba5821aa73dd68..793365647adae1 100644 --- a/net-utils/Cargo.toml +++ b/net-utils/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-net-utils" -version = "1.14.17" +version = "1.14.18" description = "Solana Network Utilities" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -19,9 +19,9 @@ rand = "0.7.0" serde = "1.0.138" serde_derive = "1.0.103" socket2 = "0.4.4" -solana-logger = { path = "../logger", version = "=1.14.17" } -solana-sdk = { path = "../sdk", version = "=1.14.17" } -solana-version = { path = "../version", version = "=1.14.17" } +solana-logger = { path = "../logger", version = "=1.14.18" } +solana-sdk = { path = "../sdk", version = "=1.14.18" } +solana-version = { path = "../version", version = "=1.14.18" } tokio = { version = "1", features = ["full"] } url = "2.2.2" diff --git a/notifier/Cargo.toml b/notifier/Cargo.toml index c1f490d83379f1..d0e57013a588ee 100644 --- a/notifier/Cargo.toml +++ b/notifier/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-notifier" -version = "1.14.17" +version = "1.14.18" description = "Solana Notifier" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/perf/Cargo.toml b/perf/Cargo.toml index 082370584d5389..57722a3b87ed66 100644 --- a/perf/Cargo.toml +++ b/perf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-perf" -version = "1.14.17" +version = "1.14.18" description = "Solana Performance APIs" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -22,10 +22,10 @@ log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" serde = "1.0.138" -solana-metrics = { path = "../metrics", version = "=1.14.17" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.17" } -solana-sdk = { path = "../sdk", version = "=1.14.17" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.17" } +solana-metrics = { path = "../metrics", version = "=1.14.18" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.18" } +solana-sdk = { path = "../sdk", version = "=1.14.18" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.18" } [target."cfg(target_os = \"linux\")".dependencies] caps = "0.5.3" @@ -38,7 +38,7 @@ name = "solana_perf" [dev-dependencies] matches = "0.1.9" rand_chacha = "0.2.2" -solana-logger = { path = "../logger", version = "=1.14.17" } +solana-logger = { path = "../logger", version = "=1.14.18" } test-case = "2.1.0" [[bench]] diff --git a/poh-bench/Cargo.toml b/poh-bench/Cargo.toml index 01638668fca280..d405793787c5e4 100644 --- a/poh-bench/Cargo.toml +++ b/poh-bench/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-poh-bench" -version = "1.14.17" +version = "1.14.18" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,12 +14,12 @@ clap = { version = "3.1.5", features = ["cargo"] } log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" -solana-entry = { path = "../entry", version = "=1.14.17" } -solana-logger = { path = "../logger", version = "=1.14.17" } -solana-measure = { path = "../measure", version = "=1.14.17" } -solana-perf = { path = "../perf", version = "=1.14.17" } -solana-sdk = { path = "../sdk", version = "=1.14.17" } -solana-version = { path = "../version", version = "=1.14.17" } +solana-entry = { path = "../entry", version = "=1.14.18" } +solana-logger = { path = "../logger", version = "=1.14.18" } +solana-measure = { path = "../measure", version = "=1.14.18" } +solana-perf = { path = "../perf", version = "=1.14.18" } +solana-sdk = { path = "../sdk", version = "=1.14.18" } +solana-version = { path = "../version", version = "=1.14.18" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/poh/Cargo.toml b/poh/Cargo.toml index a72f2be21a89cc..dac2cce5b42a66 100644 --- a/poh/Cargo.toml +++ b/poh/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-poh" -version = "1.14.17" +version = "1.14.18" description = "Solana PoH" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,21 +13,21 @@ edition = "2021" core_affinity = "0.5.10" crossbeam-channel = "0.5" log = "0.4.17" -solana-entry = { path = "../entry", version = "=1.14.17" } -solana-ledger = { path = "../ledger", version = "=1.14.17" } -solana-measure = { path = "../measure", version = "=1.14.17" } -solana-metrics = { path = "../metrics", version = "=1.14.17" } -solana-runtime = { path = "../runtime", version = "=1.14.17" } -solana-sdk = { path = "../sdk", version = "=1.14.17" } -solana-sys-tuner = { path = "../sys-tuner", version = "=1.14.17" } +solana-entry = { path = "../entry", version = "=1.14.18" } +solana-ledger = { path = "../ledger", version = "=1.14.18" } +solana-measure = { path = "../measure", version = "=1.14.18" } +solana-metrics = { path = "../metrics", version = "=1.14.18" } +solana-runtime = { path = "../runtime", version = "=1.14.18" } +solana-sdk = { path = "../sdk", version = "=1.14.18" } +solana-sys-tuner = { path = "../sys-tuner", version = "=1.14.18" } thiserror = "1.0" [dev-dependencies] bincode = "1.3.3" matches = "0.1.9" rand = "0.7.0" -solana-logger = { path = "../logger", version = "=1.14.17" } -solana-perf = { path = "../perf", version = "=1.14.17" } +solana-logger = { path = "../logger", version = "=1.14.18" } +solana-perf = { path = "../perf", version = "=1.14.18" } [lib] crate-type = ["lib"] diff --git a/program-runtime/Cargo.toml b/program-runtime/Cargo.toml index b98bb0af3acd25..1444c42a880e22 100644 --- a/program-runtime/Cargo.toml +++ b/program-runtime/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-program-runtime" -version = "1.14.17" +version = "1.14.18" description = "Solana program runtime" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -21,16 +21,16 @@ num-derive = { version = "0.3" } num-traits = { version = "0.2" } rand = "0.7.0" serde = { version = "1.0.129", features = ["derive", "rc"] } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.17" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.17" } -solana-measure = { path = "../measure", version = "=1.14.17" } -solana-metrics = { path = "../metrics", version = "=1.14.17" } -solana-sdk = { path = "../sdk", version = "=1.14.17" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.18" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.18" } +solana-measure = { path = "../measure", version = "=1.14.18" } +solana-metrics = { path = "../metrics", version = "=1.14.18" } +solana-sdk = { path = "../sdk", version = "=1.14.18" } thiserror = "1.0" enum-iterator = "0.8.1" [dev-dependencies] -solana-logger = { path = "../logger", version = "=1.14.17" } +solana-logger = { path = "../logger", version = "=1.14.18" } [lib] crate-type = ["lib"] diff --git a/program-test/Cargo.toml b/program-test/Cargo.toml index deb7c58424cbfa..905c2f076e14d4 100644 --- a/program-test/Cargo.toml +++ b/program-test/Cargo.toml @@ -5,7 +5,7 @@ edition = "2021" license = "Apache-2.0" name = "solana-program-test" repository = "https://github.com/solana-labs/solana" -version = "1.14.17" +version = "1.14.18" [dependencies] assert_matches = "1.5.0" @@ -15,16 +15,16 @@ bincode = "1.3.3" chrono-humanize = "0.2.1" log = "0.4.17" serde = "1.0.138" -solana-banks-client = { path = "../banks-client", version = "=1.14.17" } -solana-banks-server = { path = "../banks-server", version = "=1.14.17" } -solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.17" } -solana-logger = { path = "../logger", version = "=1.14.17" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.17" } -solana-runtime = { path = "../runtime", version = "=1.14.17" } -solana-sdk = { path = "../sdk", version = "=1.14.17" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.17" } +solana-banks-client = { path = "../banks-client", version = "=1.14.18" } +solana-banks-server = { path = "../banks-server", version = "=1.14.18" } +solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.18" } +solana-logger = { path = "../logger", version = "=1.14.18" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.18" } +solana-runtime = { path = "../runtime", version = "=1.14.18" } +solana-sdk = { path = "../sdk", version = "=1.14.18" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.18" } thiserror = "1.0" tokio = { version = "1", features = ["full"] } [dev-dependencies] -solana-stake-program = { path = "../programs/stake", version = "=1.14.17" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.18" } diff --git a/programs/address-lookup-table-tests/Cargo.toml b/programs/address-lookup-table-tests/Cargo.toml index d94258a1e4ff1b..e50e24c009b76e 100644 --- a/programs/address-lookup-table-tests/Cargo.toml +++ b/programs/address-lookup-table-tests/Cargo.toml @@ -3,7 +3,7 @@ [package] name = "solana-address-lookup-table-program-tests" -version = "1.14.17" +version = "1.14.18" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" @@ -14,9 +14,9 @@ publish = false [dev-dependencies] assert_matches = "1.5.0" bincode = "1.3.3" -solana-address-lookup-table-program = { path = "../address-lookup-table", version = "=1.14.17" } -solana-program-test = { path = "../../program-test", version = "=1.14.17" } -solana-sdk = { path = "../../sdk", version = "=1.14.17" } +solana-address-lookup-table-program = { path = "../address-lookup-table", version = "=1.14.18" } +solana-program-test = { path = "../../program-test", version = "=1.14.18" } +solana-sdk = { path = "../../sdk", version = "=1.14.18" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/address-lookup-table/Cargo.toml b/programs/address-lookup-table/Cargo.toml index 5775e96766df36..3e890e30566053 100644 --- a/programs/address-lookup-table/Cargo.toml +++ b/programs/address-lookup-table/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-address-lookup-table-program" -version = "1.14.17" +version = "1.14.18" description = "Solana address lookup table program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -16,14 +16,14 @@ log = "0.4.17" num-derive = "0.3" num-traits = "0.2" serde = { version = "1.0.138", features = ["derive"] } -solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.17" } -solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.17" } -solana-program = { path = "../../sdk/program", version = "=1.14.17" } +solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.18" } +solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.18" } +solana-program = { path = "../../sdk/program", version = "=1.14.18" } thiserror = "1.0" [target.'cfg(not(target_os = "solana"))'.dependencies] -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.17" } -solana-sdk = { path = "../../sdk", version = "=1.14.17" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.18" } +solana-sdk = { path = "../../sdk", version = "=1.14.18" } [build-dependencies] rustc_version = "0.4" diff --git a/programs/bpf-loader-tests/Cargo.toml b/programs/bpf-loader-tests/Cargo.toml index a95b94179ccec0..d822e2341a9724 100644 --- a/programs/bpf-loader-tests/Cargo.toml +++ b/programs/bpf-loader-tests/Cargo.toml @@ -3,7 +3,7 @@ [package] name = "solana-bpf-loader-program-tests" -version = "1.14.17" +version = "1.14.18" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" @@ -14,9 +14,9 @@ publish = false [dev-dependencies] assert_matches = "1.5.0" bincode = "1.3.3" -solana-bpf-loader-program = { path = "../bpf_loader", version = "=1.14.17" } -solana-program-test = { path = "../../program-test", version = "=1.14.17" } -solana-sdk = { path = "../../sdk", version = "=1.14.17" } +solana-bpf-loader-program = { path = "../bpf_loader", version = "=1.14.18" } +solana-program-test = { path = "../../program-test", version = "=1.14.18" } +solana-sdk = { path = "../../sdk", version = "=1.14.18" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/bpf/Cargo.lock b/programs/bpf/Cargo.lock index 7a4f9a42c861cc..a6f7d8ec5ba175 100644 --- a/programs/bpf/Cargo.lock +++ b/programs/bpf/Cargo.lock @@ -4054,7 +4054,7 @@ dependencies = [ [[package]] name = "solana-account-decoder" -version = "1.14.17" +version = "1.14.18" dependencies = [ "Inflector", "base64 0.13.0", @@ -4067,7 +4067,7 @@ dependencies = [ "serde_json", "solana-address-lookup-table-program", "solana-config-program", - "solana-sdk 1.14.17", + "solana-sdk 1.14.18", "solana-vote-program", "spl-token", "spl-token-2022 0.6.0", @@ -4077,7 +4077,7 @@ dependencies = [ [[package]] name = "solana-address-lookup-table-program" -version = "1.14.17" +version = "1.14.18" dependencies = [ "bincode", "bytemuck", @@ -4086,23 +4086,23 @@ dependencies = [ "num-traits", "rustc_version", "serde", - "solana-frozen-abi 1.14.17", - "solana-frozen-abi-macro 1.14.17", - "solana-program 1.14.17", + "solana-frozen-abi 1.14.18", + "solana-frozen-abi-macro 1.14.18", + "solana-program 1.14.18", "solana-program-runtime", - "solana-sdk 1.14.17", + "solana-sdk 1.14.18", "thiserror", ] [[package]] name = "solana-banks-client" -version = "1.14.17" +version = "1.14.18" dependencies = [ "borsh", "futures 0.3.21", "solana-banks-interface", - "solana-program 1.14.17", - "solana-sdk 1.14.17", + "solana-program 1.14.18", + "solana-sdk 1.14.18", "tarpc", "thiserror", "tokio", @@ -4111,16 +4111,16 @@ dependencies = [ [[package]] name = "solana-banks-interface" -version = "1.14.17" +version = "1.14.18" dependencies = [ "serde", - "solana-sdk 1.14.17", + "solana-sdk 1.14.18", "tarpc", ] [[package]] name = "solana-banks-server" -version = "1.14.17" +version = "1.14.18" dependencies = [ "bincode", "crossbeam-channel", @@ -4128,7 +4128,7 @@ dependencies = [ "solana-banks-interface", "solana-client", "solana-runtime", - "solana-sdk 1.14.17", + "solana-sdk 1.14.18", "solana-send-transaction-service", "tarpc", "tokio", @@ -4138,7 +4138,7 @@ dependencies = [ [[package]] name = "solana-bloom" -version = "1.14.17" +version = "1.14.18" dependencies = [ "bv", "fnv", @@ -4148,14 +4148,14 @@ dependencies = [ "rustc_version", "serde", "serde_derive", - "solana-frozen-abi 1.14.17", - "solana-frozen-abi-macro 1.14.17", - "solana-sdk 1.14.17", + "solana-frozen-abi 1.14.18", + "solana-frozen-abi-macro 1.14.18", + "solana-sdk 1.14.18", ] [[package]] name = "solana-bpf-loader-program" -version = "1.14.17" +version = "1.14.18" dependencies = [ "bincode", "byteorder 1.4.3", @@ -4164,15 +4164,15 @@ dependencies = [ "solana-measure", "solana-metrics", "solana-program-runtime", - "solana-sdk 1.14.17", - "solana-zk-token-sdk 1.14.17", + "solana-sdk 1.14.18", + "solana-zk-token-sdk 1.14.18", "solana_rbpf", "thiserror", ] [[package]] name = "solana-bpf-programs" -version = "1.14.17" +version = "1.14.18" dependencies = [ "bincode", "byteorder 1.4.3", @@ -4188,11 +4188,11 @@ dependencies = [ "solana-bpf-rust-realloc-invoke", "solana-cli-output", "solana-ledger", - "solana-logger 1.14.17", + "solana-logger 1.14.18", "solana-measure", "solana-program-runtime", "solana-runtime", - "solana-sdk 1.14.17", + "solana-sdk 1.14.18", "solana-transaction-status", "solana_rbpf", "walkdir", @@ -4200,385 +4200,385 @@ dependencies = [ [[package]] name = "solana-bpf-rust-128bit" -version = "1.14.17" +version = "1.14.18" dependencies = [ "solana-bpf-rust-128bit-dep", - "solana-program 1.14.17", + "solana-program 1.14.18", ] [[package]] name = "solana-bpf-rust-128bit-dep" -version = "1.14.17" +version = "1.14.18" dependencies = [ - "solana-program 1.14.17", + "solana-program 1.14.18", ] [[package]] name = "solana-bpf-rust-alloc" -version = "1.14.17" +version = "1.14.18" dependencies = [ - "solana-program 1.14.17", + "solana-program 1.14.18", ] [[package]] name = "solana-bpf-rust-call-depth" -version = "1.14.17" +version = "1.14.18" dependencies = [ - "solana-program 1.14.17", + "solana-program 1.14.18", ] [[package]] name = "solana-bpf-rust-caller-access" -version = "1.14.17" +version = "1.14.18" dependencies = [ - "solana-program 1.14.17", + "solana-program 1.14.18", ] [[package]] name = "solana-bpf-rust-curve25519" -version = "1.14.17" +version = "1.14.18" dependencies = [ - "solana-program 1.14.17", - "solana-zk-token-sdk 1.14.17", + "solana-program 1.14.18", + "solana-zk-token-sdk 1.14.18", ] [[package]] name = "solana-bpf-rust-custom-heap" -version = "1.14.17" +version = "1.14.18" dependencies = [ - "solana-program 1.14.17", + "solana-program 1.14.18", ] [[package]] name = "solana-bpf-rust-dep-crate" -version = "1.14.17" +version = "1.14.18" dependencies = [ "byteorder 1.4.3", "solana-address-lookup-table-program", - "solana-program 1.14.17", + "solana-program 1.14.18", ] [[package]] name = "solana-bpf-rust-deprecated-loader" -version = "1.14.17" +version = "1.14.18" dependencies = [ - "solana-program 1.14.17", + "solana-program 1.14.18", ] [[package]] name = "solana-bpf-rust-dup-accounts" -version = "1.14.17" +version = "1.14.18" dependencies = [ - "solana-program 1.14.17", + "solana-program 1.14.18", ] [[package]] name = "solana-bpf-rust-error-handling" -version = "1.14.17" +version = "1.14.18" dependencies = [ "num-derive", "num-traits", - "solana-program 1.14.17", + "solana-program 1.14.18", "thiserror", ] [[package]] name = "solana-bpf-rust-external-spend" -version = "1.14.17" +version = "1.14.18" dependencies = [ - "solana-program 1.14.17", + "solana-program 1.14.18", ] [[package]] name = "solana-bpf-rust-finalize" -version = "1.14.17" +version = "1.14.18" dependencies = [ - "solana-program 1.14.17", + "solana-program 1.14.18", ] [[package]] name = "solana-bpf-rust-get-minimum-delegation" -version = "1.14.17" +version = "1.14.18" dependencies = [ - "solana-program 1.14.17", + "solana-program 1.14.18", ] [[package]] name = "solana-bpf-rust-inner_instruction_alignment_check" -version = "1.14.17" +version = "1.14.18" dependencies = [ - "solana-program 1.14.17", + "solana-program 1.14.18", ] [[package]] name = "solana-bpf-rust-instruction-introspection" -version = "1.14.17" +version = "1.14.18" dependencies = [ - "solana-program 1.14.17", + "solana-program 1.14.18", ] [[package]] name = "solana-bpf-rust-invoke" -version = "1.14.17" +version = "1.14.18" dependencies = [ "solana-bpf-rust-invoked", - "solana-program 1.14.17", + "solana-program 1.14.18", ] [[package]] name = "solana-bpf-rust-invoke-and-error" -version = "1.14.17" +version = "1.14.18" dependencies = [ - "solana-program 1.14.17", + "solana-program 1.14.18", ] [[package]] name = "solana-bpf-rust-invoke-and-ok" -version = "1.14.17" +version = "1.14.18" dependencies = [ - "solana-program 1.14.17", + "solana-program 1.14.18", ] [[package]] name = "solana-bpf-rust-invoke-and-return" -version = "1.14.17" +version = "1.14.18" dependencies = [ - "solana-program 1.14.17", + "solana-program 1.14.18", ] [[package]] name = "solana-bpf-rust-invoked" -version = "1.14.17" +version = "1.14.18" dependencies = [ - "solana-program 1.14.17", + "solana-program 1.14.18", ] [[package]] name = "solana-bpf-rust-iter" -version = "1.14.17" +version = "1.14.18" dependencies = [ - "solana-program 1.14.17", + "solana-program 1.14.18", ] [[package]] name = "solana-bpf-rust-log-data" -version = "1.14.17" +version = "1.14.18" dependencies = [ - "solana-program 1.14.17", + "solana-program 1.14.18", ] [[package]] name = "solana-bpf-rust-many-args" -version = "1.14.17" +version = "1.14.18" dependencies = [ "solana-bpf-rust-many-args-dep", - "solana-program 1.14.17", + "solana-program 1.14.18", ] [[package]] name = "solana-bpf-rust-many-args-dep" -version = "1.14.17" +version = "1.14.18" dependencies = [ - "solana-program 1.14.17", + "solana-program 1.14.18", ] [[package]] name = "solana-bpf-rust-mem" -version = "1.14.17" +version = "1.14.18" dependencies = [ - "solana-program 1.14.17", + "solana-program 1.14.18", "solana-program-runtime", "solana-program-test", - "solana-sdk 1.14.17", + "solana-sdk 1.14.18", ] [[package]] name = "solana-bpf-rust-membuiltins" -version = "1.14.17" +version = "1.14.18" dependencies = [ "solana-bpf-rust-mem", - "solana-program 1.14.17", + "solana-program 1.14.18", ] [[package]] name = "solana-bpf-rust-noop" -version = "1.14.17" +version = "1.14.18" dependencies = [ - "solana-program 1.14.17", + "solana-program 1.14.18", ] [[package]] name = "solana-bpf-rust-panic" -version = "1.14.17" +version = "1.14.18" dependencies = [ - "solana-program 1.14.17", + "solana-program 1.14.18", ] [[package]] name = "solana-bpf-rust-param-passing" -version = "1.14.17" +version = "1.14.18" dependencies = [ "solana-bpf-rust-param-passing-dep", - "solana-program 1.14.17", + "solana-program 1.14.18", ] [[package]] name = "solana-bpf-rust-param-passing-dep" -version = "1.14.17" +version = "1.14.18" dependencies = [ - "solana-program 1.14.17", + "solana-program 1.14.18", ] [[package]] name = "solana-bpf-rust-rand" -version = "1.14.17" +version = "1.14.18" dependencies = [ "getrandom 0.1.14", "rand 0.7.3", - "solana-program 1.14.17", + "solana-program 1.14.18", ] [[package]] name = "solana-bpf-rust-realloc" -version = "1.14.17" +version = "1.14.18" dependencies = [ - "solana-program 1.14.17", + "solana-program 1.14.18", ] [[package]] name = "solana-bpf-rust-realloc-invoke" -version = "1.14.17" +version = "1.14.18" dependencies = [ "solana-bpf-rust-realloc", - "solana-program 1.14.17", + "solana-program 1.14.18", ] [[package]] name = "solana-bpf-rust-ro-account_modify" -version = "1.14.17" +version = "1.14.18" dependencies = [ - "solana-program 1.14.17", + "solana-program 1.14.18", ] [[package]] name = "solana-bpf-rust-ro-modify" -version = "1.14.17" +version = "1.14.18" dependencies = [ - "solana-program 1.14.17", + "solana-program 1.14.18", ] [[package]] name = "solana-bpf-rust-sanity" -version = "1.14.17" +version = "1.14.18" dependencies = [ - "solana-program 1.14.17", + "solana-program 1.14.18", "solana-program-runtime", "solana-program-test", - "solana-sdk 1.14.17", + "solana-sdk 1.14.18", ] [[package]] name = "solana-bpf-rust-secp256k1-recover" -version = "1.14.17" +version = "1.14.18" dependencies = [ "libsecp256k1 0.7.0", - "solana-program 1.14.17", + "solana-program 1.14.18", ] [[package]] name = "solana-bpf-rust-sha" -version = "1.14.17" +version = "1.14.18" dependencies = [ "blake3", - "solana-program 1.14.17", + "solana-program 1.14.18", ] [[package]] name = "solana-bpf-rust-sibling-instructions" -version = "1.14.17" +version = "1.14.18" dependencies = [ - "solana-program 1.14.17", + "solana-program 1.14.18", ] [[package]] name = "solana-bpf-rust-sibling_inner-instructions" -version = "1.14.17" +version = "1.14.18" dependencies = [ - "solana-program 1.14.17", + "solana-program 1.14.18", ] [[package]] name = "solana-bpf-rust-simulation" -version = "1.14.17" +version = "1.14.18" dependencies = [ - "solana-logger 1.14.17", - "solana-program 1.14.17", + "solana-logger 1.14.18", + "solana-program 1.14.18", "solana-program-test", - "solana-sdk 1.14.17", + "solana-sdk 1.14.18", "solana-validator", ] [[package]] name = "solana-bpf-rust-spoof1" -version = "1.14.17" +version = "1.14.18" dependencies = [ - "solana-program 1.14.17", + "solana-program 1.14.18", ] [[package]] name = "solana-bpf-rust-spoof1-system" -version = "1.14.17" +version = "1.14.18" dependencies = [ - "solana-program 1.14.17", + "solana-program 1.14.18", ] [[package]] name = "solana-bpf-rust-sysvar" -version = "1.14.17" +version = "1.14.18" dependencies = [ - "solana-program 1.14.17", + "solana-program 1.14.18", "solana-program-runtime", "solana-program-test", - "solana-sdk 1.14.17", + "solana-sdk 1.14.18", ] [[package]] name = "solana-bpf-rust-upgradeable" -version = "1.14.17" +version = "1.14.18" dependencies = [ - "solana-program 1.14.17", + "solana-program 1.14.18", ] [[package]] name = "solana-bpf-rust-upgraded" -version = "1.14.17" +version = "1.14.18" dependencies = [ - "solana-program 1.14.17", + "solana-program 1.14.18", ] [[package]] name = "solana-bucket-map" -version = "1.14.17" +version = "1.14.18" dependencies = [ "log", "memmap2", "modular-bitfield", "rand 0.7.3", "solana-measure", - "solana-sdk 1.14.17", + "solana-sdk 1.14.18", "tempfile", ] [[package]] name = "solana-clap-utils" -version = "1.14.17" +version = "1.14.18" dependencies = [ "chrono", "clap 2.33.3", "rpassword", "solana-perf", "solana-remote-wallet", - "solana-sdk 1.14.17", + "solana-sdk 1.14.18", "thiserror", "tiny-bip39", "uriparse", @@ -4587,7 +4587,7 @@ dependencies = [ [[package]] name = "solana-cli-config" -version = "1.14.17" +version = "1.14.18" dependencies = [ "dirs-next", "lazy_static", @@ -4595,13 +4595,13 @@ dependencies = [ "serde_derive", "serde_yaml", "solana-clap-utils", - "solana-sdk 1.14.17", + "solana-sdk 1.14.18", "url 2.2.2", ] [[package]] name = "solana-cli-output" -version = "1.14.17" +version = "1.14.18" dependencies = [ "Inflector", "base64 0.13.0", @@ -4618,7 +4618,7 @@ dependencies = [ "solana-clap-utils", "solana-cli-config", "solana-client", - "solana-sdk 1.14.17", + "solana-sdk 1.14.18", "solana-transaction-status", "solana-vote-program", "spl-memo", @@ -4626,7 +4626,7 @@ dependencies = [ [[package]] name = "solana-client" -version = "1.14.17" +version = "1.14.18" dependencies = [ "async-mutex", "async-trait", @@ -4662,7 +4662,7 @@ dependencies = [ "solana-measure", "solana-metrics", "solana-net-utils", - "solana-sdk 1.14.17", + "solana-sdk 1.14.18", "solana-streamer", "solana-transaction-status", "solana-version", @@ -4678,27 +4678,27 @@ dependencies = [ [[package]] name = "solana-compute-budget-program" -version = "1.14.17" +version = "1.14.18" dependencies = [ "solana-program-runtime", - "solana-sdk 1.14.17", + "solana-sdk 1.14.18", ] [[package]] name = "solana-config-program" -version = "1.14.17" +version = "1.14.18" dependencies = [ "bincode", "chrono", "serde", "serde_derive", "solana-program-runtime", - "solana-sdk 1.14.17", + "solana-sdk 1.14.18", ] [[package]] name = "solana-core" -version = "1.14.17" +version = "1.14.18" dependencies = [ "ahash", "base64 0.13.0", @@ -4727,8 +4727,8 @@ dependencies = [ "solana-bloom", "solana-client", "solana-entry", - "solana-frozen-abi 1.14.17", - "solana-frozen-abi-macro 1.14.17", + "solana-frozen-abi 1.14.18", + "solana-frozen-abi-macro 1.14.18", "solana-geyser-plugin-manager", "solana-gossip", "solana-ledger", @@ -4741,7 +4741,7 @@ dependencies = [ "solana-rayon-threadlimit", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.17", + "solana-sdk 1.14.18", "solana-send-transaction-service", "solana-streamer", "solana-transaction-status", @@ -4757,19 +4757,19 @@ dependencies = [ [[package]] name = "solana-download-utils" -version = "1.14.17" +version = "1.14.18" dependencies = [ "console", "indicatif", "log", "reqwest", "solana-runtime", - "solana-sdk 1.14.17", + "solana-sdk 1.14.18", ] [[package]] name = "solana-entry" -version = "1.14.17" +version = "1.14.18" dependencies = [ "bincode", "crossbeam-channel", @@ -4785,12 +4785,12 @@ dependencies = [ "solana-metrics", "solana-perf", "solana-rayon-threadlimit", - "solana-sdk 1.14.17", + "solana-sdk 1.14.18", ] [[package]] name = "solana-faucet" -version = "1.14.17" +version = "1.14.18" dependencies = [ "bincode", "byteorder 1.4.3", @@ -4801,9 +4801,9 @@ dependencies = [ "serde_derive", "solana-clap-utils", "solana-cli-config", - "solana-logger 1.14.17", + "solana-logger 1.14.18", "solana-metrics", - "solana-sdk 1.14.17", + "solana-sdk 1.14.18", "solana-version", "spl-memo", "thiserror", @@ -4846,7 +4846,7 @@ dependencies = [ [[package]] name = "solana-frozen-abi" -version = "1.14.17" +version = "1.14.18" dependencies = [ "ahash", "blake3", @@ -4871,7 +4871,7 @@ dependencies = [ "serde_derive", "serde_json", "sha2 0.10.2", - "solana-frozen-abi-macro 1.14.17", + "solana-frozen-abi-macro 1.14.18", "subtle", "thiserror", ] @@ -4890,7 +4890,7 @@ dependencies = [ [[package]] name = "solana-frozen-abi-macro" -version = "1.14.17" +version = "1.14.18" dependencies = [ "proc-macro2 1.0.51", "quote 1.0.18", @@ -4900,26 +4900,26 @@ dependencies = [ [[package]] name = "solana-genesis-utils" -version = "1.14.17" +version = "1.14.18" dependencies = [ "solana-download-utils", "solana-runtime", - "solana-sdk 1.14.17", + "solana-sdk 1.14.18", ] [[package]] name = "solana-geyser-plugin-interface" -version = "1.14.17" +version = "1.14.18" dependencies = [ "log", - "solana-sdk 1.14.17", + "solana-sdk 1.14.18", "solana-transaction-status", "thiserror", ] [[package]] name = "solana-geyser-plugin-manager" -version = "1.14.17" +version = "1.14.18" dependencies = [ "bs58", "crossbeam-channel", @@ -4932,14 +4932,14 @@ dependencies = [ "solana-metrics", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.17", + "solana-sdk 1.14.18", "solana-transaction-status", "thiserror", ] [[package]] name = "solana-gossip" -version = "1.14.17" +version = "1.14.18" dependencies = [ "bincode", "bv", @@ -4963,17 +4963,17 @@ dependencies = [ "solana-clap-utils", "solana-client", "solana-entry", - "solana-frozen-abi 1.14.17", - "solana-frozen-abi-macro 1.14.17", + "solana-frozen-abi 1.14.18", + "solana-frozen-abi-macro 1.14.18", "solana-ledger", - "solana-logger 1.14.17", + "solana-logger 1.14.18", "solana-measure", "solana-metrics", "solana-net-utils", "solana-perf", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.14.17", + "solana-sdk 1.14.18", "solana-streamer", "solana-version", "solana-vote-program", @@ -4982,7 +4982,7 @@ dependencies = [ [[package]] name = "solana-ledger" -version = "1.14.17" +version = "1.14.18" dependencies = [ "assert_matches", "bincode", @@ -5014,15 +5014,15 @@ dependencies = [ "solana-account-decoder", "solana-bpf-loader-program", "solana-entry", - "solana-frozen-abi 1.14.17", - "solana-frozen-abi-macro 1.14.17", + "solana-frozen-abi 1.14.18", + "solana-frozen-abi-macro 1.14.18", "solana-measure", "solana-metrics", "solana-perf", "solana-program-runtime", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.14.17", + "solana-sdk 1.14.18", "solana-stake-program", "solana-storage-bigtable", "solana-storage-proto", @@ -5051,7 +5051,7 @@ dependencies = [ [[package]] name = "solana-logger" -version = "1.14.17" +version = "1.14.18" dependencies = [ "env_logger", "lazy_static", @@ -5060,36 +5060,36 @@ dependencies = [ [[package]] name = "solana-measure" -version = "1.14.17" +version = "1.14.18" dependencies = [ "log", - "solana-sdk 1.14.17", + "solana-sdk 1.14.18", ] [[package]] name = "solana-merkle-tree" -version = "1.14.17" +version = "1.14.18" dependencies = [ "fast-math", "matches", - "solana-program 1.14.17", + "solana-program 1.14.18", ] [[package]] name = "solana-metrics" -version = "1.14.17" +version = "1.14.18" dependencies = [ "crossbeam-channel", "gethostname", "lazy_static", "log", "reqwest", - "solana-sdk 1.14.17", + "solana-sdk 1.14.18", ] [[package]] name = "solana-net-utils" -version = "1.14.17" +version = "1.14.18" dependencies = [ "bincode", "clap 3.1.6", @@ -5100,8 +5100,8 @@ dependencies = [ "serde", "serde_derive", "socket2", - "solana-logger 1.14.17", - "solana-sdk 1.14.17", + "solana-logger 1.14.18", + "solana-sdk 1.14.18", "solana-version", "tokio", "url 2.2.2", @@ -5109,7 +5109,7 @@ dependencies = [ [[package]] name = "solana-perf" -version = "1.14.17" +version = "1.14.18" dependencies = [ "ahash", "bincode", @@ -5128,13 +5128,13 @@ dependencies = [ "serde", "solana-metrics", "solana-rayon-threadlimit", - "solana-sdk 1.14.17", + "solana-sdk 1.14.18", "solana-vote-program", ] [[package]] name = "solana-poh" -version = "1.14.17" +version = "1.14.18" dependencies = [ "core_affinity", "crossbeam-channel", @@ -5144,7 +5144,7 @@ dependencies = [ "solana-measure", "solana-metrics", "solana-runtime", - "solana-sdk 1.14.17", + "solana-sdk 1.14.18", "solana-sys-tuner", "thiserror", ] @@ -5200,7 +5200,7 @@ dependencies = [ [[package]] name = "solana-program" -version = "1.14.17" +version = "1.14.18" dependencies = [ "base64 0.13.0", "bincode", @@ -5236,9 +5236,9 @@ dependencies = [ "serde_json", "sha2 0.10.2", "sha3 0.10.1", - "solana-frozen-abi 1.14.17", - "solana-frozen-abi-macro 1.14.17", - "solana-sdk-macro 1.14.17", + "solana-frozen-abi 1.14.18", + "solana-frozen-abi-macro 1.14.18", + "solana-sdk-macro 1.14.18", "thiserror", "tiny-bip39", "wasm-bindgen", @@ -5247,7 +5247,7 @@ dependencies = [ [[package]] name = "solana-program-runtime" -version = "1.14.17" +version = "1.14.18" dependencies = [ "base64 0.13.0", "bincode", @@ -5262,17 +5262,17 @@ dependencies = [ "rand 0.7.3", "rustc_version", "serde", - "solana-frozen-abi 1.14.17", - "solana-frozen-abi-macro 1.14.17", + "solana-frozen-abi 1.14.18", + "solana-frozen-abi-macro 1.14.18", "solana-measure", "solana-metrics", - "solana-sdk 1.14.17", + "solana-sdk 1.14.18", "thiserror", ] [[package]] name = "solana-program-test" -version = "1.14.17" +version = "1.14.18" dependencies = [ "assert_matches", "async-trait", @@ -5284,10 +5284,10 @@ dependencies = [ "solana-banks-client", "solana-banks-server", "solana-bpf-loader-program", - "solana-logger 1.14.17", + "solana-logger 1.14.18", "solana-program-runtime", "solana-runtime", - "solana-sdk 1.14.17", + "solana-sdk 1.14.18", "solana-vote-program", "thiserror", "tokio", @@ -5295,7 +5295,7 @@ dependencies = [ [[package]] name = "solana-rayon-threadlimit" -version = "1.14.17" +version = "1.14.18" dependencies = [ "lazy_static", "num_cpus", @@ -5303,7 +5303,7 @@ dependencies = [ [[package]] name = "solana-remote-wallet" -version = "1.14.17" +version = "1.14.18" dependencies = [ "console", "dialoguer", @@ -5313,14 +5313,14 @@ dependencies = [ "parking_lot 0.12.1", "qstring", "semver", - "solana-sdk 1.14.17", + "solana-sdk 1.14.18", "thiserror", "uriparse", ] [[package]] name = "solana-rpc" -version = "1.14.17" +version = "1.14.18" dependencies = [ "base64 0.13.0", "bincode", @@ -5353,7 +5353,7 @@ dependencies = [ "solana-poh", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.14.17", + "solana-sdk 1.14.18", "solana-send-transaction-service", "solana-stake-program", "solana-storage-bigtable", @@ -5371,7 +5371,7 @@ dependencies = [ [[package]] name = "solana-runtime" -version = "1.14.17" +version = "1.14.18" dependencies = [ "arrayref", "bincode", @@ -5408,17 +5408,17 @@ dependencies = [ "solana-bucket-map", "solana-compute-budget-program", "solana-config-program", - "solana-frozen-abi 1.14.17", - "solana-frozen-abi-macro 1.14.17", + "solana-frozen-abi 1.14.18", + "solana-frozen-abi-macro 1.14.18", "solana-measure", "solana-metrics", "solana-program-runtime", "solana-rayon-threadlimit", - "solana-sdk 1.14.17", + "solana-sdk 1.14.18", "solana-stake-program", "solana-vote-program", "solana-zk-token-proof-program", - "solana-zk-token-sdk 1.14.17", + "solana-zk-token-sdk 1.14.18", "strum", "strum_macros", "symlink", @@ -5481,7 +5481,7 @@ dependencies = [ [[package]] name = "solana-sdk" -version = "1.14.17" +version = "1.14.18" dependencies = [ "assert_matches", "base64 0.13.0", @@ -5518,11 +5518,11 @@ dependencies = [ "serde_json", "sha2 0.10.2", "sha3 0.10.1", - "solana-frozen-abi 1.14.17", - "solana-frozen-abi-macro 1.14.17", - "solana-logger 1.14.17", - "solana-program 1.14.17", - "solana-sdk-macro 1.14.17", + "solana-frozen-abi 1.14.18", + "solana-frozen-abi-macro 1.14.18", + "solana-logger 1.14.18", + "solana-program 1.14.18", + "solana-sdk-macro 1.14.18", "thiserror", "uriparse", "wasm-bindgen", @@ -5543,7 +5543,7 @@ dependencies = [ [[package]] name = "solana-sdk-macro" -version = "1.14.17" +version = "1.14.18" dependencies = [ "bs58", "proc-macro2 1.0.51", @@ -5554,7 +5554,7 @@ dependencies = [ [[package]] name = "solana-send-transaction-service" -version = "1.14.17" +version = "1.14.18" dependencies = [ "crossbeam-channel", "log", @@ -5562,12 +5562,12 @@ dependencies = [ "solana-measure", "solana-metrics", "solana-runtime", - "solana-sdk 1.14.17", + "solana-sdk 1.14.18", ] [[package]] name = "solana-stake-program" -version = "1.14.17" +version = "1.14.18" dependencies = [ "bincode", "log", @@ -5577,18 +5577,18 @@ dependencies = [ "serde", "serde_derive", "solana-config-program", - "solana-frozen-abi 1.14.17", - "solana-frozen-abi-macro 1.14.17", + "solana-frozen-abi 1.14.18", + "solana-frozen-abi-macro 1.14.18", "solana-metrics", "solana-program-runtime", - "solana-sdk 1.14.17", + "solana-sdk 1.14.18", "solana-vote-program", "thiserror", ] [[package]] name = "solana-storage-bigtable" -version = "1.14.17" +version = "1.14.18" dependencies = [ "backoff", "bincode", @@ -5609,7 +5609,7 @@ dependencies = [ "serde_derive", "smpl_jwt", "solana-metrics", - "solana-sdk 1.14.17", + "solana-sdk 1.14.18", "solana-storage-proto", "solana-transaction-status", "thiserror", @@ -5620,7 +5620,7 @@ dependencies = [ [[package]] name = "solana-storage-proto" -version = "1.14.17" +version = "1.14.18" dependencies = [ "bincode", "bs58", @@ -5628,14 +5628,14 @@ dependencies = [ "protobuf-src", "serde", "solana-account-decoder", - "solana-sdk 1.14.17", + "solana-sdk 1.14.18", "solana-transaction-status", "tonic-build 0.8.0", ] [[package]] name = "solana-streamer" -version = "1.14.17" +version = "1.14.18" dependencies = [ "crossbeam-channel", "futures-util", @@ -5654,7 +5654,7 @@ dependencies = [ "rustls 0.20.6", "solana-metrics", "solana-perf", - "solana-sdk 1.14.17", + "solana-sdk 1.14.18", "thiserror", "tokio", "x509-parser", @@ -5662,13 +5662,13 @@ dependencies = [ [[package]] name = "solana-sys-tuner" -version = "1.14.17" +version = "1.14.18" dependencies = [ "clap 2.33.3", "libc", "log", "nix", - "solana-logger 1.14.17", + "solana-logger 1.14.18", "solana-version", "sysctl", "unix_socket2", @@ -5677,7 +5677,7 @@ dependencies = [ [[package]] name = "solana-test-validator" -version = "1.14.17" +version = "1.14.18" dependencies = [ "base64 0.13.0", "log", @@ -5688,20 +5688,20 @@ dependencies = [ "solana-core", "solana-gossip", "solana-ledger", - "solana-logger 1.14.17", + "solana-logger 1.14.18", "solana-net-utils", "solana-program-runtime", "solana-program-test", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.17", + "solana-sdk 1.14.18", "solana-streamer", "tokio", ] [[package]] name = "solana-transaction-status" -version = "1.14.17" +version = "1.14.18" dependencies = [ "Inflector", "base64 0.13.0", @@ -5717,7 +5717,7 @@ dependencies = [ "solana-address-lookup-table-program", "solana-measure", "solana-metrics", - "solana-sdk 1.14.17", + "solana-sdk 1.14.18", "solana-vote-program", "spl-associated-token-account", "spl-memo", @@ -5728,7 +5728,7 @@ dependencies = [ [[package]] name = "solana-validator" -version = "1.14.17" +version = "1.14.18" dependencies = [ "chrono", "clap 2.33.3", @@ -5759,14 +5759,14 @@ dependencies = [ "solana-genesis-utils", "solana-gossip", "solana-ledger", - "solana-logger 1.14.17", + "solana-logger 1.14.18", "solana-metrics", "solana-net-utils", "solana-perf", "solana-poh", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.17", + "solana-sdk 1.14.18", "solana-send-transaction-service", "solana-storage-bigtable", "solana-streamer", @@ -5779,21 +5779,21 @@ dependencies = [ [[package]] name = "solana-version" -version = "1.14.17" +version = "1.14.18" dependencies = [ "log", "rustc_version", "semver", "serde", "serde_derive", - "solana-frozen-abi 1.14.17", - "solana-frozen-abi-macro 1.14.17", - "solana-sdk 1.14.17", + "solana-frozen-abi 1.14.18", + "solana-frozen-abi-macro 1.14.18", + "solana-sdk 1.14.18", ] [[package]] name = "solana-vote-program" -version = "1.14.17" +version = "1.14.18" dependencies = [ "bincode", "log", @@ -5802,25 +5802,25 @@ dependencies = [ "rustc_version", "serde", "serde_derive", - "solana-frozen-abi 1.14.17", - "solana-frozen-abi-macro 1.14.17", + "solana-frozen-abi 1.14.18", + "solana-frozen-abi-macro 1.14.18", "solana-metrics", "solana-program-runtime", - "solana-sdk 1.14.17", + "solana-sdk 1.14.18", "thiserror", ] [[package]] name = "solana-zk-token-proof-program" -version = "1.14.17" +version = "1.14.18" dependencies = [ "bytemuck", "getrandom 0.1.14", "num-derive", "num-traits", "solana-program-runtime", - "solana-sdk 1.14.17", - "solana-zk-token-sdk 1.14.17", + "solana-sdk 1.14.18", + "solana-zk-token-sdk 1.14.18", ] [[package]] @@ -5856,7 +5856,7 @@ dependencies = [ [[package]] name = "solana-zk-token-sdk" -version = "1.14.17" +version = "1.14.18" dependencies = [ "aes-gcm-siv", "arrayref", @@ -5876,8 +5876,8 @@ dependencies = [ "serde", "serde_json", "sha3 0.9.1", - "solana-program 1.14.17", - "solana-sdk 1.14.17", + "solana-program 1.14.18", + "solana-sdk 1.14.18", "subtle", "thiserror", "zeroize", diff --git a/programs/bpf/Cargo.toml b/programs/bpf/Cargo.toml index 25558a994d8265..53bf3e0750b62d 100644 --- a/programs/bpf/Cargo.toml +++ b/programs/bpf/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "solana-bpf-programs" description = "Blockchain, Rebuilt for Scale" -version = "1.14.17" +version = "1.14.18" documentation = "https://docs.rs/solana" homepage = "https://solana.com/" readme = "README.md" @@ -26,22 +26,22 @@ itertools = "0.10.1" log = "0.4.11" miow = "0.3.6" net2 = "0.2.37" -solana-account-decoder = { path = "../../account-decoder", version = "=1.14.17" } -solana-bpf-loader-program = { path = "../bpf_loader", version = "=1.14.17" } -solana-bpf-rust-invoke = { path = "rust/invoke", version = "=1.14.17" } -solana-bpf-rust-realloc = { path = "rust/realloc", version = "=1.14.17" } -solana-bpf-rust-realloc-invoke = { path = "rust/realloc_invoke", version = "=1.14.17" } -solana-cli-output = { path = "../../cli-output", version = "=1.14.17" } -solana-logger = { path = "../../logger", version = "=1.14.17" } -solana-measure = { path = "../../measure", version = "=1.14.17" } -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.17" } -solana-runtime = { path = "../../runtime", version = "=1.14.17" } -solana-sdk = { path = "../../sdk", version = "=1.14.17" } -solana-transaction-status = { path = "../../transaction-status", version = "=1.14.17" } +solana-account-decoder = { path = "../../account-decoder", version = "=1.14.18" } +solana-bpf-loader-program = { path = "../bpf_loader", version = "=1.14.18" } +solana-bpf-rust-invoke = { path = "rust/invoke", version = "=1.14.18" } +solana-bpf-rust-realloc = { path = "rust/realloc", version = "=1.14.18" } +solana-bpf-rust-realloc-invoke = { path = "rust/realloc_invoke", version = "=1.14.18" } +solana-cli-output = { path = "../../cli-output", version = "=1.14.18" } +solana-logger = { path = "../../logger", version = "=1.14.18" } +solana-measure = { path = "../../measure", version = "=1.14.18" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.18" } +solana-runtime = { path = "../../runtime", version = "=1.14.18" } +solana-sdk = { path = "../../sdk", version = "=1.14.18" } +solana-transaction-status = { path = "../../transaction-status", version = "=1.14.18" } solana_rbpf = "=0.2.31" [dev-dependencies] -solana-ledger = { path = "../../ledger", version = "=1.14.17" } +solana-ledger = { path = "../../ledger", version = "=1.14.18" } [[bench]] name = "bpf_loader" diff --git a/programs/bpf/rust/128bit/Cargo.toml b/programs/bpf/rust/128bit/Cargo.toml index f440d02467bed9..72121a4901f70b 100644 --- a/programs/bpf/rust/128bit/Cargo.toml +++ b/programs/bpf/rust/128bit/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-128bit" -version = "1.14.17" +version = "1.14.18" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ documentation = "https://docs.rs/solana-bpf-rust-128bit" edition = "2021" [dependencies] -solana-bpf-rust-128bit-dep = { path = "../128bit_dep", version = "=1.14.17" } -solana-program = { path = "../../../../sdk/program", version = "=1.14.17" } +solana-bpf-rust-128bit-dep = { path = "../128bit_dep", version = "=1.14.18" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.18" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/128bit_dep/Cargo.toml b/programs/bpf/rust/128bit_dep/Cargo.toml index 7cdc0bb63c0c7b..377df646018d09 100644 --- a/programs/bpf/rust/128bit_dep/Cargo.toml +++ b/programs/bpf/rust/128bit_dep/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-128bit-dep" -version = "1.14.17" +version = "1.14.18" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-128bit-dep" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.17" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.18" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/bpf/rust/alloc/Cargo.toml b/programs/bpf/rust/alloc/Cargo.toml index fd0922abd266ef..1aab3dffeda13f 100644 --- a/programs/bpf/rust/alloc/Cargo.toml +++ b/programs/bpf/rust/alloc/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-alloc" -version = "1.14.17" +version = "1.14.18" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-alloc" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.17" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.18" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/call_depth/Cargo.toml b/programs/bpf/rust/call_depth/Cargo.toml index 3140724e67b100..56291219e9814d 100644 --- a/programs/bpf/rust/call_depth/Cargo.toml +++ b/programs/bpf/rust/call_depth/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-call-depth" -version = "1.14.17" +version = "1.14.18" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-call-depth" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.17" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.18" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/caller_access/Cargo.toml b/programs/bpf/rust/caller_access/Cargo.toml index 182b2cf0904494..f09f67046e5bc3 100644 --- a/programs/bpf/rust/caller_access/Cargo.toml +++ b/programs/bpf/rust/caller_access/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-caller-access" -version = "1.14.17" +version = "1.14.18" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-caller-access" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.17" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.18" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/curve25519/Cargo.toml b/programs/bpf/rust/curve25519/Cargo.toml index 19875f5ca28b39..db700b9cfabdbb 100644 --- a/programs/bpf/rust/curve25519/Cargo.toml +++ b/programs/bpf/rust/curve25519/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-curve25519" -version = "1.14.17" +version = "1.14.18" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ documentation = "https://docs.rs/solana-bpf-rust-zktoken_crypto" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.17" } -solana-zk-token-sdk = { path = "../../../../zk-token-sdk", version = "=1.14.17" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.18" } +solana-zk-token-sdk = { path = "../../../../zk-token-sdk", version = "=1.14.18" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/custom_heap/Cargo.toml b/programs/bpf/rust/custom_heap/Cargo.toml index 2ecd8fd1d70877..112603dcb93969 100644 --- a/programs/bpf/rust/custom_heap/Cargo.toml +++ b/programs/bpf/rust/custom_heap/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-custom-heap" -version = "1.14.17" +version = "1.14.18" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-custom-heap" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.17" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.18" } [features] default = ["custom-heap"] diff --git a/programs/bpf/rust/dep_crate/Cargo.toml b/programs/bpf/rust/dep_crate/Cargo.toml index cf818db117d1d7..ca6fbfb5f8b907 100644 --- a/programs/bpf/rust/dep_crate/Cargo.toml +++ b/programs/bpf/rust/dep_crate/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-dep-crate" -version = "1.14.17" +version = "1.14.18" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,8 +12,8 @@ edition = "2021" [dependencies] byteorder = { version = "1", default-features = false } # list of crates which must be buildable for bpf programs -solana-address-lookup-table-program = { path = "../../../../programs/address-lookup-table", version = "=1.14.17" } -solana-program = { path = "../../../../sdk/program", version = "=1.14.17" } +solana-address-lookup-table-program = { path = "../../../../programs/address-lookup-table", version = "=1.14.18" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.18" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/deprecated_loader/Cargo.toml b/programs/bpf/rust/deprecated_loader/Cargo.toml index 6d420765b71019..f6df84aeb8d08c 100644 --- a/programs/bpf/rust/deprecated_loader/Cargo.toml +++ b/programs/bpf/rust/deprecated_loader/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-deprecated-loader" -version = "1.14.17" +version = "1.14.18" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-deprecated-loader" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.17" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.18" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/dup_accounts/Cargo.toml b/programs/bpf/rust/dup_accounts/Cargo.toml index e8170522771b79..09e12e50cf709d 100644 --- a/programs/bpf/rust/dup_accounts/Cargo.toml +++ b/programs/bpf/rust/dup_accounts/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-dup-accounts" -version = "1.14.17" +version = "1.14.18" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-dup-accounts" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.17" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.18" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/error_handling/Cargo.toml b/programs/bpf/rust/error_handling/Cargo.toml index 452dab1fc0eb1e..311a7623e49500 100644 --- a/programs/bpf/rust/error_handling/Cargo.toml +++ b/programs/bpf/rust/error_handling/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-error-handling" -version = "1.14.17" +version = "1.14.18" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,7 +12,7 @@ edition = "2021" [dependencies] num-derive = "0.3" num-traits = "0.2" -solana-program = { path = "../../../../sdk/program", version = "=1.14.17" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.18" } thiserror = "1.0" [lib] diff --git a/programs/bpf/rust/external_spend/Cargo.toml b/programs/bpf/rust/external_spend/Cargo.toml index 46187cbc953ab7..48d00e15899345 100644 --- a/programs/bpf/rust/external_spend/Cargo.toml +++ b/programs/bpf/rust/external_spend/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-external-spend" -version = "1.14.17" +version = "1.14.18" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-external-spend" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.17" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.18" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/finalize/Cargo.toml b/programs/bpf/rust/finalize/Cargo.toml index 55aaa2ae6f73f8..7e1615c5d192f7 100644 --- a/programs/bpf/rust/finalize/Cargo.toml +++ b/programs/bpf/rust/finalize/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-finalize" -version = "1.14.17" +version = "1.14.18" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-finalize" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.17" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.18" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/get_minimum_delegation/Cargo.toml b/programs/bpf/rust/get_minimum_delegation/Cargo.toml index 98c56b46df2826..4e4addc287e0c9 100644 --- a/programs/bpf/rust/get_minimum_delegation/Cargo.toml +++ b/programs/bpf/rust/get_minimum_delegation/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-get-minimum-delegation" -version = "1.14.17" +version = "1.14.18" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-get-minimum-delegation" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.17" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.18" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/inner_instruction_alignment_check/Cargo.toml b/programs/bpf/rust/inner_instruction_alignment_check/Cargo.toml index 8bc7e891b13f30..3f377741eed28a 100644 --- a/programs/bpf/rust/inner_instruction_alignment_check/Cargo.toml +++ b/programs/bpf/rust/inner_instruction_alignment_check/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-inner_instruction_alignment_check" -version = "1.14.17" +version = "1.14.18" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-inner_instruction_alignment_che edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.17" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.18" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/instruction_introspection/Cargo.toml b/programs/bpf/rust/instruction_introspection/Cargo.toml index 53fc750721666f..29c00be05582e3 100644 --- a/programs/bpf/rust/instruction_introspection/Cargo.toml +++ b/programs/bpf/rust/instruction_introspection/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-instruction-introspection" -version = "1.14.17" +version = "1.14.18" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-instruction-introspection" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.17" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.18" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/invoke/Cargo.toml b/programs/bpf/rust/invoke/Cargo.toml index 3750b86fc6ab20..1b97081ae274af 100644 --- a/programs/bpf/rust/invoke/Cargo.toml +++ b/programs/bpf/rust/invoke/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-invoke" -version = "1.14.17" +version = "1.14.18" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -15,7 +15,7 @@ program = [] [dependencies] solana-bpf-rust-invoked = { path = "../invoked", default-features = false } -solana-program = { path = "../../../../sdk/program", version = "=1.14.17" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.18" } [lib] crate-type = ["lib", "cdylib"] diff --git a/programs/bpf/rust/invoke_and_error/Cargo.toml b/programs/bpf/rust/invoke_and_error/Cargo.toml index 3fc9887df8fd06..b02d01b39fe7db 100644 --- a/programs/bpf/rust/invoke_and_error/Cargo.toml +++ b/programs/bpf/rust/invoke_and_error/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-invoke-and-error" -version = "1.14.17" +version = "1.14.18" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-invoke-and-error" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.17" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.18" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/invoke_and_ok/Cargo.toml b/programs/bpf/rust/invoke_and_ok/Cargo.toml index 63305be3135760..f13da8c99f9883 100644 --- a/programs/bpf/rust/invoke_and_ok/Cargo.toml +++ b/programs/bpf/rust/invoke_and_ok/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-invoke-and-ok" -version = "1.14.17" +version = "1.14.18" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-invoke-and-ok" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.17" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.18" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/invoke_and_return/Cargo.toml b/programs/bpf/rust/invoke_and_return/Cargo.toml index da560933dbf6c0..fbaa38abfa37ec 100644 --- a/programs/bpf/rust/invoke_and_return/Cargo.toml +++ b/programs/bpf/rust/invoke_and_return/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-invoke-and-return" -version = "1.14.17" +version = "1.14.18" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-invoke-and-return" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.17" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.18" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/invoked/Cargo.toml b/programs/bpf/rust/invoked/Cargo.toml index 34a6ef069b1f85..76a06f1c1f351c 100644 --- a/programs/bpf/rust/invoked/Cargo.toml +++ b/programs/bpf/rust/invoked/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-invoked" -version = "1.14.17" +version = "1.14.18" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,7 +14,7 @@ default = ["program"] program = [] [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.17" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.18" } [lib] crate-type = ["lib", "cdylib"] diff --git a/programs/bpf/rust/iter/Cargo.toml b/programs/bpf/rust/iter/Cargo.toml index deba8f759285d1..810468969b3735 100644 --- a/programs/bpf/rust/iter/Cargo.toml +++ b/programs/bpf/rust/iter/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-iter" -version = "1.14.17" +version = "1.14.18" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-iter" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.17" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.18" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/log_data/Cargo.toml b/programs/bpf/rust/log_data/Cargo.toml index dad5c004d29e78..97715f881a6274 100644 --- a/programs/bpf/rust/log_data/Cargo.toml +++ b/programs/bpf/rust/log_data/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-log-data" -version = "1.14.17" +version = "1.14.18" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-log-data" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.17" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.18" } [features] default = ["program"] diff --git a/programs/bpf/rust/many_args/Cargo.toml b/programs/bpf/rust/many_args/Cargo.toml index 4c135aeb5c837d..af20ae9265544f 100644 --- a/programs/bpf/rust/many_args/Cargo.toml +++ b/programs/bpf/rust/many_args/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-many-args" -version = "1.14.17" +version = "1.14.18" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ documentation = "https://docs.rs/solana-bpf-rust-many-args" edition = "2021" [dependencies] -solana-bpf-rust-many-args-dep = { path = "../many_args_dep", version = "=1.14.17" } -solana-program = { path = "../../../../sdk/program", version = "=1.14.17" } +solana-bpf-rust-many-args-dep = { path = "../many_args_dep", version = "=1.14.18" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.18" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/many_args_dep/Cargo.toml b/programs/bpf/rust/many_args_dep/Cargo.toml index 56cd86721cd01d..84e7b8e54ef493 100644 --- a/programs/bpf/rust/many_args_dep/Cargo.toml +++ b/programs/bpf/rust/many_args_dep/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-many-args-dep" -version = "1.14.17" +version = "1.14.18" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-many-args-dep" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.17" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.18" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/bpf/rust/mem/Cargo.toml b/programs/bpf/rust/mem/Cargo.toml index a201bb3e17c41e..89d9ef0d2ad754 100644 --- a/programs/bpf/rust/mem/Cargo.toml +++ b/programs/bpf/rust/mem/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-mem" -version = "1.14.17" +version = "1.14.18" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,12 +13,12 @@ edition = "2021" no-entrypoint = [] [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.17" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.18" } [dev-dependencies] -solana-program-runtime = { path = "../../../../program-runtime", version = "=1.14.17" } -solana-program-test = { path = "../../../../program-test", version = "=1.14.17" } -solana-sdk = { path = "../../../../sdk", version = "=1.14.17" } +solana-program-runtime = { path = "../../../../program-runtime", version = "=1.14.18" } +solana-program-test = { path = "../../../../program-test", version = "=1.14.18" } +solana-sdk = { path = "../../../../sdk", version = "=1.14.18" } [lib] crate-type = ["cdylib", "lib"] diff --git a/programs/bpf/rust/membuiltins/Cargo.toml b/programs/bpf/rust/membuiltins/Cargo.toml index e718718f186b91..a9ec63a7ed0c74 100644 --- a/programs/bpf/rust/membuiltins/Cargo.toml +++ b/programs/bpf/rust/membuiltins/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-membuiltins" -version = "1.14.17" +version = "1.14.18" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ documentation = "https://docs.rs/solana-bpf-rust-mem" edition = "2021" [dependencies] -solana-bpf-rust-mem = { path = "../mem", version = "=1.14.17", features = [ "no-entrypoint" ] } -solana-program = { path = "../../../../sdk/program", version = "=1.14.17" } +solana-bpf-rust-mem = { path = "../mem", version = "=1.14.18", features = [ "no-entrypoint" ] } +solana-program = { path = "../../../../sdk/program", version = "=1.14.18" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/noop/Cargo.toml b/programs/bpf/rust/noop/Cargo.toml index 551c3bbc493537..3ceedfcffe380d 100644 --- a/programs/bpf/rust/noop/Cargo.toml +++ b/programs/bpf/rust/noop/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-noop" -version = "1.14.17" +version = "1.14.18" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-noop" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.17" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.18" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/panic/Cargo.toml b/programs/bpf/rust/panic/Cargo.toml index 9879eeb1d06f1d..62ed04e44ab4d0 100644 --- a/programs/bpf/rust/panic/Cargo.toml +++ b/programs/bpf/rust/panic/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-panic" -version = "1.14.17" +version = "1.14.18" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-panic" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.17" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.18" } [features] default = ["custom-panic"] diff --git a/programs/bpf/rust/param_passing/Cargo.toml b/programs/bpf/rust/param_passing/Cargo.toml index 2d205e87a98f12..c9d2e79ab2264e 100644 --- a/programs/bpf/rust/param_passing/Cargo.toml +++ b/programs/bpf/rust/param_passing/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-param-passing" -version = "1.14.17" +version = "1.14.18" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ documentation = "https://docs.rs/solana-bpf-rust-param-passing" edition = "2021" [dependencies] -solana-bpf-rust-param-passing-dep = { path = "../param_passing_dep", version = "=1.14.17" } -solana-program = { path = "../../../../sdk/program", version = "=1.14.17" } +solana-bpf-rust-param-passing-dep = { path = "../param_passing_dep", version = "=1.14.18" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.18" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/param_passing_dep/Cargo.toml b/programs/bpf/rust/param_passing_dep/Cargo.toml index ba6a35395f7450..88d50a2eda6b3d 100644 --- a/programs/bpf/rust/param_passing_dep/Cargo.toml +++ b/programs/bpf/rust/param_passing_dep/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-param-passing-dep" -version = "1.14.17" +version = "1.14.18" description = "Solana BPF program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-param-passing-dep" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.17" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.18" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/bpf/rust/rand/Cargo.toml b/programs/bpf/rust/rand/Cargo.toml index cff79a7151dcfa..71128abeaa15aa 100644 --- a/programs/bpf/rust/rand/Cargo.toml +++ b/programs/bpf/rust/rand/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-rand" -version = "1.14.17" +version = "1.14.18" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,7 +12,7 @@ edition = "2021" [dependencies] getrandom = { version = "0.1.14", features = ["dummy"] } rand = "0.7" -solana-program = { path = "../../../../sdk/program", version = "=1.14.17" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.18" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/realloc/Cargo.toml b/programs/bpf/rust/realloc/Cargo.toml index 6047c717780800..186c61df22800a 100644 --- a/programs/bpf/rust/realloc/Cargo.toml +++ b/programs/bpf/rust/realloc/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-realloc" -version = "1.14.17" +version = "1.14.18" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,7 +14,7 @@ default = ["program"] program = [] [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.17" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.18" } [lib] crate-type = ["lib", "cdylib"] diff --git a/programs/bpf/rust/realloc_invoke/Cargo.toml b/programs/bpf/rust/realloc_invoke/Cargo.toml index 75ddccdae83e51..a307990b9a7ed6 100644 --- a/programs/bpf/rust/realloc_invoke/Cargo.toml +++ b/programs/bpf/rust/realloc_invoke/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-realloc-invoke" -version = "1.14.17" +version = "1.14.18" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,8 +14,8 @@ default = ["program"] program = [] [dependencies] -solana-bpf-rust-realloc = { path = "../realloc", version = "=1.14.17", default-features = false } -solana-program = { path = "../../../../sdk/program", version = "=1.14.17" } +solana-bpf-rust-realloc = { path = "../realloc", version = "=1.14.18", default-features = false } +solana-program = { path = "../../../../sdk/program", version = "=1.14.18" } [lib] crate-type = ["lib", "cdylib"] diff --git a/programs/bpf/rust/ro_account_modify/Cargo.toml b/programs/bpf/rust/ro_account_modify/Cargo.toml index 3c8fa2eac2a8e2..e35eafc9734112 100644 --- a/programs/bpf/rust/ro_account_modify/Cargo.toml +++ b/programs/bpf/rust/ro_account_modify/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-ro-account_modify" -version = "1.14.17" +version = "1.14.18" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-ro-modify" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.17" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.18" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/ro_modify/Cargo.toml b/programs/bpf/rust/ro_modify/Cargo.toml index 0ead8d15a7fd86..c498ed9539880c 100644 --- a/programs/bpf/rust/ro_modify/Cargo.toml +++ b/programs/bpf/rust/ro_modify/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-ro-modify" -version = "1.14.17" +version = "1.14.18" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-ro-modify" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.17" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.18" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/sanity/Cargo.toml b/programs/bpf/rust/sanity/Cargo.toml index 283689ff727c2f..3b1a16d299f7e5 100644 --- a/programs/bpf/rust/sanity/Cargo.toml +++ b/programs/bpf/rust/sanity/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-sanity" -version = "1.14.17" +version = "1.14.18" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,12 +13,12 @@ edition = "2021" test-bpf = [] [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.17" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.18" } [dev-dependencies] -solana-program-runtime = { path = "../../../../program-runtime", version = "=1.14.17" } -solana-program-test = { path = "../../../../program-test", version = "=1.14.17" } -solana-sdk = { path = "../../../../sdk", version = "=1.14.17" } +solana-program-runtime = { path = "../../../../program-runtime", version = "=1.14.18" } +solana-program-test = { path = "../../../../program-test", version = "=1.14.18" } +solana-sdk = { path = "../../../../sdk", version = "=1.14.18" } [lib] crate-type = ["cdylib", "lib"] diff --git a/programs/bpf/rust/secp256k1_recover/Cargo.toml b/programs/bpf/rust/secp256k1_recover/Cargo.toml index bce41fe45d3790..fccf8856c9dc6a 100644 --- a/programs/bpf/rust/secp256k1_recover/Cargo.toml +++ b/programs/bpf/rust/secp256k1_recover/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-secp256k1-recover" -version = "1.14.17" +version = "1.14.18" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -11,7 +11,7 @@ edition = "2021" [dependencies] libsecp256k1 = { version = "0.7.0", default-features = false } -solana-program = { path = "../../../../sdk/program", version = "=1.14.17" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.18" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/sha/Cargo.toml b/programs/bpf/rust/sha/Cargo.toml index 062a07d4691ab2..539d3d5dd715f5 100644 --- a/programs/bpf/rust/sha/Cargo.toml +++ b/programs/bpf/rust/sha/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-sha" -version = "1.14.17" +version = "1.14.18" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -11,7 +11,7 @@ edition = "2021" [dependencies] blake3 = "1.0.0" -solana-program = { path = "../../../../sdk/program", version = "=1.14.17" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.18" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/sibling_inner_instruction/Cargo.toml b/programs/bpf/rust/sibling_inner_instruction/Cargo.toml index 57b876aff24971..d94a5c4285bbf5 100644 --- a/programs/bpf/rust/sibling_inner_instruction/Cargo.toml +++ b/programs/bpf/rust/sibling_inner_instruction/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-sibling_inner-instructions" -version = "1.14.17" +version = "1.14.18" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-log-data" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.17" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.18" } [features] default = ["program"] diff --git a/programs/bpf/rust/sibling_instruction/Cargo.toml b/programs/bpf/rust/sibling_instruction/Cargo.toml index 084e4858eb2a4a..837c521accd7aa 100644 --- a/programs/bpf/rust/sibling_instruction/Cargo.toml +++ b/programs/bpf/rust/sibling_instruction/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-sibling-instructions" -version = "1.14.17" +version = "1.14.18" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-log-data" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.17" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.18" } [features] default = ["program"] diff --git a/programs/bpf/rust/simulation/Cargo.toml b/programs/bpf/rust/simulation/Cargo.toml index a0ae8014f9e7c5..c429a7ac917de4 100644 --- a/programs/bpf/rust/simulation/Cargo.toml +++ b/programs/bpf/rust/simulation/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-simulation" -version = "1.14.17" +version = "1.14.18" description = "Solana BPF Program Simulation Differences" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,13 +13,13 @@ edition = "2021" test-bpf = [] [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.17" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.18" } [dev-dependencies] -solana-logger = { path = "../../../../logger", version = "=1.14.17" } -solana-program-test = { path = "../../../../program-test", version = "=1.14.17" } -solana-sdk = { path = "../../../../sdk", version = "=1.14.17" } -solana-validator = { path = "../../../../validator", version = "=1.14.17" } +solana-logger = { path = "../../../../logger", version = "=1.14.18" } +solana-program-test = { path = "../../../../program-test", version = "=1.14.18" } +solana-sdk = { path = "../../../../sdk", version = "=1.14.18" } +solana-validator = { path = "../../../../validator", version = "=1.14.18" } [lib] crate-type = ["cdylib", "lib"] diff --git a/programs/bpf/rust/spoof1/Cargo.toml b/programs/bpf/rust/spoof1/Cargo.toml index d8a5dadb17e953..cb35190cfd590f 100644 --- a/programs/bpf/rust/spoof1/Cargo.toml +++ b/programs/bpf/rust/spoof1/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-spoof1" -version = "1.14.17" +version = "1.14.18" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-spoof1" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.17" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.18" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/spoof1_system/Cargo.toml b/programs/bpf/rust/spoof1_system/Cargo.toml index 1757f9f82082f5..125851d3448118 100644 --- a/programs/bpf/rust/spoof1_system/Cargo.toml +++ b/programs/bpf/rust/spoof1_system/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-spoof1-system" -version = "1.14.17" +version = "1.14.18" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-spoof1-system" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.17" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.18" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/sysvar/Cargo.toml b/programs/bpf/rust/sysvar/Cargo.toml index 1fc3f6802dbf5b..9aab4661a800a9 100644 --- a/programs/bpf/rust/sysvar/Cargo.toml +++ b/programs/bpf/rust/sysvar/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-sysvar" -version = "1.14.17" +version = "1.14.18" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,12 +10,12 @@ documentation = "https://docs.rs/solana-bpf-rust-sysvar" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.17" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.18" } [dev-dependencies] -solana-program-runtime = { path = "../../../../program-runtime", version = "=1.14.17" } -solana-program-test = { path = "../../../../program-test", version = "=1.14.17" } -solana-sdk = { path = "../../../../sdk", version = "=1.14.17" } +solana-program-runtime = { path = "../../../../program-runtime", version = "=1.14.18" } +solana-program-test = { path = "../../../../program-test", version = "=1.14.18" } +solana-sdk = { path = "../../../../sdk", version = "=1.14.18" } [lib] crate-type = ["cdylib", "lib"] diff --git a/programs/bpf/rust/upgradeable/Cargo.toml b/programs/bpf/rust/upgradeable/Cargo.toml index 8c7180705ba97f..3fe012d0494552 100644 --- a/programs/bpf/rust/upgradeable/Cargo.toml +++ b/programs/bpf/rust/upgradeable/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-upgradeable" -version = "1.14.17" +version = "1.14.18" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-upgradeable" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.17" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.18" } [lib] name = "solana_bpf_rust_upgradeable" diff --git a/programs/bpf/rust/upgraded/Cargo.toml b/programs/bpf/rust/upgraded/Cargo.toml index c37877f19d0a1d..c38fcbf1d1ea8a 100644 --- a/programs/bpf/rust/upgraded/Cargo.toml +++ b/programs/bpf/rust/upgraded/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-upgraded" -version = "1.14.17" +version = "1.14.18" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-upgraded" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.17" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.18" } [lib] name = "solana_bpf_rust_upgraded" diff --git a/programs/bpf_loader/Cargo.toml b/programs/bpf_loader/Cargo.toml index c54ddbc5fbb3da..109c9704dbb780 100644 --- a/programs/bpf_loader/Cargo.toml +++ b/programs/bpf_loader/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-loader-program" -version = "1.14.17" +version = "1.14.18" description = "Solana BPF loader" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,17 +14,17 @@ bincode = "1.3.3" byteorder = "1.4.3" libsecp256k1 = "0.6.0" log = "0.4.17" -solana-measure = { path = "../../measure", version = "=1.14.17" } -solana-metrics = { path = "../../metrics", version = "=1.14.17" } -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.17" } -solana-sdk = { path = "../../sdk", version = "=1.14.17" } -solana-zk-token-sdk = { path = "../../zk-token-sdk", version = "=1.14.17" } +solana-measure = { path = "../../measure", version = "=1.14.18" } +solana-metrics = { path = "../../metrics", version = "=1.14.18" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.18" } +solana-sdk = { path = "../../sdk", version = "=1.14.18" } +solana-zk-token-sdk = { path = "../../zk-token-sdk", version = "=1.14.18" } solana_rbpf = "=0.2.31" thiserror = "1.0" [dev-dependencies] rand = "0.7.3" -solana-runtime = { path = "../../runtime", version = "=1.14.17" } +solana-runtime = { path = "../../runtime", version = "=1.14.18" } [lib] crate-type = ["lib"] diff --git a/programs/bpf_loader/gen-syscall-list/Cargo.toml b/programs/bpf_loader/gen-syscall-list/Cargo.toml index fe3d7952161edd..84743dbcd5c217 100644 --- a/programs/bpf_loader/gen-syscall-list/Cargo.toml +++ b/programs/bpf_loader/gen-syscall-list/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "gen-syscall-list" -version = "1.14.17" +version = "1.14.18" edition = "2021" license = "Apache-2.0" publish = false diff --git a/programs/compute-budget/Cargo.toml b/programs/compute-budget/Cargo.toml index a7f03312646069..cbfd7380cd9d69 100644 --- a/programs/compute-budget/Cargo.toml +++ b/programs/compute-budget/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "solana-compute-budget-program" description = "Solana Compute Budget program" -version = "1.14.17" +version = "1.14.18" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-compute-budget-program" repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ license = "Apache-2.0" edition = "2021" [dependencies] -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.17" } -solana-sdk = { path = "../../sdk", version = "=1.14.17" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.18" } +solana-sdk = { path = "../../sdk", version = "=1.14.18" } [lib] crate-type = ["lib"] diff --git a/programs/config/Cargo.toml b/programs/config/Cargo.toml index 0c1366a3821fc1..0be1dd0d2f536e 100644 --- a/programs/config/Cargo.toml +++ b/programs/config/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-config-program" -version = "1.14.17" +version = "1.14.18" description = "Solana Config program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,11 +14,11 @@ bincode = "1.3.3" chrono = { version = "0.4.11", features = ["serde"] } serde = "1.0.138" serde_derive = "1.0.103" -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.17" } -solana-sdk = { path = "../../sdk", version = "=1.14.17" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.18" } +solana-sdk = { path = "../../sdk", version = "=1.14.18" } [dev-dependencies] -solana-logger = { path = "../../logger", version = "=1.14.17" } +solana-logger = { path = "../../logger", version = "=1.14.18" } [lib] crate-type = ["lib"] diff --git a/programs/ed25519-tests/Cargo.toml b/programs/ed25519-tests/Cargo.toml index 1b47f092cbb95c..decefce709b16f 100644 --- a/programs/ed25519-tests/Cargo.toml +++ b/programs/ed25519-tests/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-ed25519-program-tests" -version = "1.14.17" +version = "1.14.18" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" @@ -12,8 +12,8 @@ publish = false assert_matches = "1.5.0" ed25519-dalek = "=1.0.1" rand = "0.7.0" -solana-program-test = { path = "../../program-test", version = "=1.14.17" } -solana-sdk = { path = "../../sdk", version = "=1.14.17" } +solana-program-test = { path = "../../program-test", version = "=1.14.18" } +solana-sdk = { path = "../../sdk", version = "=1.14.18" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/stake/Cargo.toml b/programs/stake/Cargo.toml index 7d85b0a1e23d2b..6b3cc45e8d1abd 100644 --- a/programs/stake/Cargo.toml +++ b/programs/stake/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-stake-program" -version = "1.14.17" +version = "1.14.18" description = "Solana Stake program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -16,19 +16,19 @@ num-derive = "0.3" num-traits = "0.2" serde = "1.0.138" serde_derive = "1.0.103" -solana-config-program = { path = "../config", version = "=1.14.17" } -solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.17" } -solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.17" } -solana-metrics = { path = "../../metrics", version = "=1.14.17" } -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.17" } -solana-sdk = { path = "../../sdk", version = "=1.14.17" } -solana-vote-program = { path = "../vote", version = "=1.14.17" } +solana-config-program = { path = "../config", version = "=1.14.18" } +solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.18" } +solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.18" } +solana-metrics = { path = "../../metrics", version = "=1.14.18" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.18" } +solana-sdk = { path = "../../sdk", version = "=1.14.18" } +solana-vote-program = { path = "../vote", version = "=1.14.18" } thiserror = "1.0" [dev-dependencies] assert_matches = "1.5.0" proptest = "1.0" -solana-logger = { path = "../../logger", version = "=1.14.17" } +solana-logger = { path = "../../logger", version = "=1.14.18" } test-case = "2.1.0" [build-dependencies] diff --git a/programs/vote/Cargo.toml b/programs/vote/Cargo.toml index 07b75c7ab5f0fd..cda75d7244634a 100644 --- a/programs/vote/Cargo.toml +++ b/programs/vote/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-vote-program" -version = "1.14.17" +version = "1.14.18" description = "Solana Vote program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -16,17 +16,17 @@ num-derive = "0.3" num-traits = "0.2" serde = "1.0.138" serde_derive = "1.0.103" -solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.17" } -solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.17" } -solana-metrics = { path = "../../metrics", version = "=1.14.17" } -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.17" } -solana-sdk = { path = "../../sdk", version = "=1.14.17" } +solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.18" } +solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.18" } +solana-metrics = { path = "../../metrics", version = "=1.14.18" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.18" } +solana-sdk = { path = "../../sdk", version = "=1.14.18" } thiserror = "1.0" [dev-dependencies] itertools = "0.10.3" rand = "0.7.0" -solana-logger = { path = "../../logger", version = "=1.14.17" } +solana-logger = { path = "../../logger", version = "=1.14.18" } test-case = "2.1.0" [build-dependencies] diff --git a/programs/zk-token-proof/Cargo.toml b/programs/zk-token-proof/Cargo.toml index 307889e0cb480c..2bff937e92e331 100644 --- a/programs/zk-token-proof/Cargo.toml +++ b/programs/zk-token-proof/Cargo.toml @@ -3,7 +3,7 @@ name = "solana-zk-token-proof-program" description = "Solana Zk Token Proof Program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" -version = "1.14.17" +version = "1.14.18" license = "Apache-2.0" edition = "2021" @@ -12,6 +12,6 @@ bytemuck = { version = "1.11.0", features = ["derive"] } getrandom = { version = "0.1", features = ["dummy"] } num-derive = "0.3" num-traits = "0.2" -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.17" } -solana-sdk = { path = "../../sdk", version = "=1.14.17" } -solana-zk-token-sdk = { path = "../../zk-token-sdk", version = "=1.14.17" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.18" } +solana-sdk = { path = "../../sdk", version = "=1.14.18" } +solana-zk-token-sdk = { path = "../../zk-token-sdk", version = "=1.14.18" } diff --git a/rayon-threadlimit/Cargo.toml b/rayon-threadlimit/Cargo.toml index 78fb5a2e67de2f..603df81b63a14a 100644 --- a/rayon-threadlimit/Cargo.toml +++ b/rayon-threadlimit/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-rayon-threadlimit" -version = "1.14.17" +version = "1.14.18" description = "solana-rayon-threadlimit" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-rayon-threadlimit" diff --git a/rbpf-cli/Cargo.toml b/rbpf-cli/Cargo.toml index 0ce29ea751ae0c..e3257a169a0ab6 100644 --- a/rbpf-cli/Cargo.toml +++ b/rbpf-cli/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "rbpf-cli" -version = "1.14.17" +version = "1.14.18" description = "CLI to test and analyze eBPF programs" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/rbpf" @@ -13,8 +13,8 @@ publish = false clap = { version = "3.1.5", features = ["cargo"] } serde = "1.0.138" serde_json = "1.0.81" -solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.17" } -solana-logger = { path = "../logger", version = "=1.14.17" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.17" } -solana-sdk = { path = "../sdk", version = "=1.14.17" } +solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.18" } +solana-logger = { path = "../logger", version = "=1.14.18" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.18" } +solana-sdk = { path = "../sdk", version = "=1.14.18" } solana_rbpf = "=0.2.31" diff --git a/remote-wallet/Cargo.toml b/remote-wallet/Cargo.toml index 00931e1678c428..aaa7060cef2035 100644 --- a/remote-wallet/Cargo.toml +++ b/remote-wallet/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-remote-wallet" description = "Blockchain, Rebuilt for Scale" -version = "1.14.17" +version = "1.14.18" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -19,7 +19,7 @@ num-traits = { version = "0.2" } parking_lot = "0.12" qstring = "0.7.2" semver = "1.0" -solana-sdk = { path = "../sdk", version = "=1.14.17" } +solana-sdk = { path = "../sdk", version = "=1.14.18" } thiserror = "1.0" uriparse = "0.6.4" diff --git a/rpc-test/Cargo.toml b/rpc-test/Cargo.toml index dda1d33bb29a09..7323c09dfa8201 100644 --- a/rpc-test/Cargo.toml +++ b/rpc-test/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-rpc-test" -version = "1.14.17" +version = "1.14.18" description = "Solana RPC Test" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -19,17 +19,17 @@ log = "0.4.17" reqwest = { version = "0.11.11", default-features = false, features = ["blocking", "brotli", "deflate", "gzip", "rustls-tls", "json"] } serde = "1.0.138" serde_json = "1.0.81" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.17" } -solana-client = { path = "../client", version = "=1.14.17" } -solana-rpc = { path = "../rpc", version = "=1.14.17" } -solana-sdk = { path = "../sdk", version = "=1.14.17" } -solana-streamer = { path = "../streamer", version = "=1.14.17" } -solana-test-validator = { path = "../test-validator", version = "=1.14.17" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.17" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.18" } +solana-client = { path = "../client", version = "=1.14.18" } +solana-rpc = { path = "../rpc", version = "=1.14.18" } +solana-sdk = { path = "../sdk", version = "=1.14.18" } +solana-streamer = { path = "../streamer", version = "=1.14.18" } +solana-test-validator = { path = "../test-validator", version = "=1.14.18" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.18" } tokio = { version = "~1.14.1", features = ["full"] } [dev-dependencies] -solana-logger = { path = "../logger", version = "=1.14.17" } +solana-logger = { path = "../logger", version = "=1.14.18" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/rpc/Cargo.toml b/rpc/Cargo.toml index ecf798f5bff6be..d3257032f22fb9 100644 --- a/rpc/Cargo.toml +++ b/rpc/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-rpc" -version = "1.14.17" +version = "1.14.18" description = "Solana RPC" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -29,26 +29,26 @@ serde = "1.0.138" serde_derive = "1.0.103" serde_json = "1.0.81" soketto = "0.7" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.17" } -solana-client = { path = "../client", version = "=1.14.17" } -solana-entry = { path = "../entry", version = "=1.14.17" } -solana-faucet = { path = "../faucet", version = "=1.14.17" } -solana-gossip = { path = "../gossip", version = "=1.14.17" } -solana-ledger = { path = "../ledger", version = "=1.14.17" } -solana-measure = { path = "../measure", version = "=1.14.17" } -solana-metrics = { path = "../metrics", version = "=1.14.17" } -solana-perf = { path = "../perf", version = "=1.14.17" } -solana-poh = { path = "../poh", version = "=1.14.17" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.17" } -solana-runtime = { path = "../runtime", version = "=1.14.17" } -solana-sdk = { path = "../sdk", version = "=1.14.17" } -solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.17" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.17" } -solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.17" } -solana-streamer = { path = "../streamer", version = "=1.14.17" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.17" } -solana-version = { path = "../version", version = "=1.14.17" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.17" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.18" } +solana-client = { path = "../client", version = "=1.14.18" } +solana-entry = { path = "../entry", version = "=1.14.18" } +solana-faucet = { path = "../faucet", version = "=1.14.18" } +solana-gossip = { path = "../gossip", version = "=1.14.18" } +solana-ledger = { path = "../ledger", version = "=1.14.18" } +solana-measure = { path = "../measure", version = "=1.14.18" } +solana-metrics = { path = "../metrics", version = "=1.14.18" } +solana-perf = { path = "../perf", version = "=1.14.18" } +solana-poh = { path = "../poh", version = "=1.14.18" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.18" } +solana-runtime = { path = "../runtime", version = "=1.14.18" } +solana-sdk = { path = "../sdk", version = "=1.14.18" } +solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.18" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.18" } +solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.18" } +solana-streamer = { path = "../streamer", version = "=1.14.18" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.18" } +solana-version = { path = "../version", version = "=1.14.18" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.18" } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } spl-token-2022 = { version = "=0.6.0", features = ["no-entrypoint"] } stream-cancel = "0.8.1" @@ -58,9 +58,9 @@ tokio-util = { version = "0.6", features = ["codec", "compat"] } [dev-dependencies] serial_test = "0.8.0" -solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.17" } -solana-net-utils = { path = "../net-utils", version = "=1.14.17" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.17" } +solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.18" } +solana-net-utils = { path = "../net-utils", version = "=1.14.18" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.18" } symlink = "0.1.0" [lib] diff --git a/runtime/Cargo.toml b/runtime/Cargo.toml index dd038f563242ef..3a2bdbbb3eec31 100644 --- a/runtime/Cargo.toml +++ b/runtime/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-runtime" -version = "1.14.17" +version = "1.14.18" description = "Solana runtime" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -40,21 +40,21 @@ rayon = "1.5.3" regex = "1.5.6" serde = { version = "1.0.138", features = ["rc"] } serde_derive = "1.0.103" -solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.17" } -solana-bucket-map = { path = "../bucket_map", version = "=1.14.17" } -solana-compute-budget-program = { path = "../programs/compute-budget", version = "=1.14.17" } -solana-config-program = { path = "../programs/config", version = "=1.14.17" } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.17" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.17" } -solana-measure = { path = "../measure", version = "=1.14.17" } -solana-metrics = { path = "../metrics", version = "=1.14.17" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.17" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.17" } -solana-sdk = { path = "../sdk", version = "=1.14.17" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.17" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.17" } -solana-zk-token-proof-program = { path = "../programs/zk-token-proof", version = "=1.14.17" } -solana-zk-token-sdk = { path = "../zk-token-sdk", version = "=1.14.17" } +solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.18" } +solana-bucket-map = { path = "../bucket_map", version = "=1.14.18" } +solana-compute-budget-program = { path = "../programs/compute-budget", version = "=1.14.18" } +solana-config-program = { path = "../programs/config", version = "=1.14.18" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.18" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.18" } +solana-measure = { path = "../measure", version = "=1.14.18" } +solana-metrics = { path = "../metrics", version = "=1.14.18" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.18" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.18" } +solana-sdk = { path = "../sdk", version = "=1.14.18" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.18" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.18" } +solana-zk-token-proof-program = { path = "../programs/zk-token-proof", version = "=1.14.18" } +solana-zk-token-sdk = { path = "../zk-token-sdk", version = "=1.14.18" } strum = { version = "0.24", features = ["derive"] } strum_macros = "0.24" symlink = "0.1.0" @@ -72,7 +72,7 @@ assert_matches = "1.5.0" ed25519-dalek = "=1.0.1" libsecp256k1 = "0.6.0" rand_chacha = "0.2.2" -solana-logger = { path = "../logger", version = "=1.14.17" } +solana-logger = { path = "../logger", version = "=1.14.18" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/runtime/store-tool/Cargo.toml b/runtime/store-tool/Cargo.toml index caee46ef79b587..c19ccc900deff1 100644 --- a/runtime/store-tool/Cargo.toml +++ b/runtime/store-tool/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-store-tool" description = "Tool to inspect append vecs" -version = "1.14.17" +version = "1.14.18" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -12,9 +12,9 @@ publish = false [dependencies] clap = "2.33.1" log = { version = "0.4.17" } -solana-logger = { path = "../../logger", version = "=1.14.17" } -solana-runtime = { path = "..", version = "=1.14.17" } -solana-version = { path = "../../version", version = "=1.14.17" } +solana-logger = { path = "../../logger", version = "=1.14.18" } +solana-runtime = { path = "..", version = "=1.14.18" } +solana-version = { path = "../../version", version = "=1.14.18" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/sdk/Cargo.toml b/sdk/Cargo.toml index 92e226867af2fe..dfae0623ffdedf 100644 --- a/sdk/Cargo.toml +++ b/sdk/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-sdk" -version = "1.14.17" +version = "1.14.18" description = "Solana SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -71,11 +71,11 @@ serde_derive = "1.0.103" serde_json = { version = "1.0.81", optional = true } sha2 = "0.10.2" sha3 = { version = "0.10.1", optional = true } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.17" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.17" } -solana-logger = { path = "../logger", version = "=1.14.17", optional = true } -solana-program = { path = "program", version = "=1.14.17" } -solana-sdk-macro = { path = "macro", version = "=1.14.17" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.18" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.18" } +solana-logger = { path = "../logger", version = "=1.14.18", optional = true } +solana-program = { path = "program", version = "=1.14.18" } +solana-sdk-macro = { path = "macro", version = "=1.14.18" } thiserror = "1.0" uriparse = "0.6.4" wasm-bindgen = "0.2" diff --git a/sdk/cargo-build-bpf/Cargo.toml b/sdk/cargo-build-bpf/Cargo.toml index 7f019597ce9800..4ce199bf1a52c5 100644 --- a/sdk/cargo-build-bpf/Cargo.toml +++ b/sdk/cargo-build-bpf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-cargo-build-bpf" -version = "1.14.17" +version = "1.14.18" description = "Compile a local package and all of its dependencies using the Solana SBF SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,7 +12,7 @@ publish = false [dependencies] cargo_metadata = "0.15.0" clap = { version = "3.1.5", features = ["cargo", "env"] } -solana-sdk = { path = "..", version = "=1.14.17" } +solana-sdk = { path = "..", version = "=1.14.18" } [features] program = [] diff --git a/sdk/cargo-build-sbf/Cargo.toml b/sdk/cargo-build-sbf/Cargo.toml index 05c27daafdb7ee..32669200a7c462 100644 --- a/sdk/cargo-build-sbf/Cargo.toml +++ b/sdk/cargo-build-sbf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-cargo-build-sbf" -version = "1.14.17" +version = "1.14.18" description = "Compile a local package and all of its dependencies using the Solana SBF SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -15,9 +15,9 @@ cargo_metadata = "0.15.0" clap = { version = "3.1.5", features = ["cargo", "env"] } log = { version = "0.4.14", features = ["std"] } regex = "1.5.6" -solana-download-utils = { path = "../../download-utils", version = "=1.14.17" } -solana-logger = { path = "../../logger", version = "=1.14.17" } -solana-sdk = { path = "..", version = "=1.14.17" } +solana-download-utils = { path = "../../download-utils", version = "=1.14.18" } +solana-logger = { path = "../../logger", version = "=1.14.18" } +solana-sdk = { path = "..", version = "=1.14.18" } tar = "0.4.38" [dev-dependencies] diff --git a/sdk/cargo-build-sbf/tests/crates/fail/Cargo.toml b/sdk/cargo-build-sbf/tests/crates/fail/Cargo.toml index 213bc80dc049ba..fd3b8ca18b10ae 100644 --- a/sdk/cargo-build-sbf/tests/crates/fail/Cargo.toml +++ b/sdk/cargo-build-sbf/tests/crates/fail/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "fail" -version = "1.14.17" +version = "1.14.18" description = "Solana SBF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ edition = "2021" publish = false [dependencies] -solana-program = { path = "../../../../program", version = "=1.14.17" } +solana-program = { path = "../../../../program", version = "=1.14.18" } [lib] crate-type = ["cdylib"] diff --git a/sdk/cargo-build-sbf/tests/crates/noop/Cargo.toml b/sdk/cargo-build-sbf/tests/crates/noop/Cargo.toml index 309baca04adfd5..3e1915e4399c9d 100644 --- a/sdk/cargo-build-sbf/tests/crates/noop/Cargo.toml +++ b/sdk/cargo-build-sbf/tests/crates/noop/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "noop" -version = "1.14.17" +version = "1.14.18" description = "Solana SBF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ edition = "2021" publish = false [dependencies] -solana-program = { path = "../../../../program", version = "=1.14.17" } +solana-program = { path = "../../../../program", version = "=1.14.18" } [lib] crate-type = ["cdylib"] diff --git a/sdk/cargo-test-bpf/Cargo.toml b/sdk/cargo-test-bpf/Cargo.toml index 0d2c111569c04e..fe1405219a981a 100644 --- a/sdk/cargo-test-bpf/Cargo.toml +++ b/sdk/cargo-test-bpf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-cargo-test-bpf" -version = "1.14.17" +version = "1.14.18" description = "Execute all unit and integration tests after building with the Solana SBF SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/sdk/cargo-test-sbf/Cargo.toml b/sdk/cargo-test-sbf/Cargo.toml index bebfdeca657d13..4150c55c8a22cb 100644 --- a/sdk/cargo-test-sbf/Cargo.toml +++ b/sdk/cargo-test-sbf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-cargo-test-sbf" -version = "1.14.17" +version = "1.14.18" description = "Execute all unit and integration tests after building with the Solana SBF SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/sdk/gen-headers/Cargo.toml b/sdk/gen-headers/Cargo.toml index 5e4c997a9989bf..5b2193511f76b2 100644 --- a/sdk/gen-headers/Cargo.toml +++ b/sdk/gen-headers/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "gen-headers" -version = "1.14.17" +version = "1.14.18" edition = "2021" license = "Apache-2.0" publish = false diff --git a/sdk/macro/Cargo.toml b/sdk/macro/Cargo.toml index 65031a9d017b65..aaa7647e5c19a9 100644 --- a/sdk/macro/Cargo.toml +++ b/sdk/macro/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-sdk-macro" -version = "1.14.17" +version = "1.14.18" description = "Solana SDK Macro" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/sdk/program/Cargo.toml b/sdk/program/Cargo.toml index 426d4ad4d840ad..ddaded4b5abc77 100644 --- a/sdk/program/Cargo.toml +++ b/sdk/program/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-program" -version = "1.14.17" +version = "1.14.18" description = "Solana Program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -31,9 +31,9 @@ serde_derive = "1.0" serde_json = "1.0" sha2 = "0.10.0" sha3 = "0.10.0" -solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.17" } -solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.17" } -solana-sdk-macro = { path = "../macro", version = "=1.14.17" } +solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.18" } +solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.18" } +solana-sdk-macro = { path = "../macro", version = "=1.14.18" } thiserror = "1.0" [target.'cfg(not(target_os = "solana"))'.dependencies] @@ -50,7 +50,7 @@ wasm-bindgen = "0.2" zeroize = { version = "1.3", default-features = true, features = ["zeroize_derive"] } [target.'cfg(not(target_os = "solana"))'.dev-dependencies] -solana-logger = { path = "../../logger", version = "=1.14.17" } +solana-logger = { path = "../../logger", version = "=1.14.18" } [target.'cfg(target_arch = "wasm32")'.dependencies] console_error_panic_hook = "0.1.7" diff --git a/send-transaction-service/Cargo.toml b/send-transaction-service/Cargo.toml index f36913e84351e4..99d156acaf7493 100644 --- a/send-transaction-service/Cargo.toml +++ b/send-transaction-service/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-send-transaction-service" -version = "1.14.17" +version = "1.14.18" description = "Solana send transaction service" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,14 +12,14 @@ edition = "2021" [dependencies] crossbeam-channel = "0.5" log = "0.4.17" -solana-client = { path = "../client", version = "=1.14.17" } -solana-measure = { path = "../measure", version = "=1.14.17" } -solana-metrics = { path = "../metrics", version = "=1.14.17" } -solana-runtime = { path = "../runtime", version = "=1.14.17" } -solana-sdk = { path = "../sdk", version = "=1.14.17" } +solana-client = { path = "../client", version = "=1.14.18" } +solana-measure = { path = "../measure", version = "=1.14.18" } +solana-metrics = { path = "../metrics", version = "=1.14.18" } +solana-runtime = { path = "../runtime", version = "=1.14.18" } +solana-sdk = { path = "../sdk", version = "=1.14.18" } [dev-dependencies] -solana-logger = { path = "../logger", version = "=1.14.17" } +solana-logger = { path = "../logger", version = "=1.14.18" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/stake-accounts/Cargo.toml b/stake-accounts/Cargo.toml index fa3344948049a8..da215008d401da 100644 --- a/stake-accounts/Cargo.toml +++ b/stake-accounts/Cargo.toml @@ -3,7 +3,7 @@ name = "solana-stake-accounts" description = "Blockchain, Rebuilt for Scale" authors = ["Solana Maintainers "] edition = "2021" -version = "1.14.17" +version = "1.14.18" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -11,15 +11,15 @@ documentation = "https://docs.rs/solana-stake-accounts" [dependencies] clap = "2.33.1" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.17" } -solana-cli-config = { path = "../cli-config", version = "=1.14.17" } -solana-client = { path = "../client", version = "=1.14.17" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.17" } -solana-sdk = { path = "../sdk", version = "=1.14.17" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.17" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.18" } +solana-cli-config = { path = "../cli-config", version = "=1.14.18" } +solana-client = { path = "../client", version = "=1.14.18" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.18" } +solana-sdk = { path = "../sdk", version = "=1.14.18" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.18" } [dev-dependencies] -solana-runtime = { path = "../runtime", version = "=1.14.17" } +solana-runtime = { path = "../runtime", version = "=1.14.18" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/storage-bigtable/Cargo.toml b/storage-bigtable/Cargo.toml index a78cf05e88c576..4aa4c4b5ed1621 100644 --- a/storage-bigtable/Cargo.toml +++ b/storage-bigtable/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-storage-bigtable" -version = "1.14.17" +version = "1.14.18" description = "Solana Storage BigTable" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -27,10 +27,10 @@ prost-types = "0.11.0" serde = "1.0.138" serde_derive = "1.0.103" smpl_jwt = "0.7.1" -solana-metrics = { path = "../metrics", version = "=1.14.17" } -solana-sdk = { path = "../sdk", version = "=1.14.17" } -solana-storage-proto = { path = "../storage-proto", version = "=1.14.17" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.17" } +solana-metrics = { path = "../metrics", version = "=1.14.18" } +solana-sdk = { path = "../sdk", version = "=1.14.18" } +solana-storage-proto = { path = "../storage-proto", version = "=1.14.18" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.18" } thiserror = "1.0" tokio = "1" tonic = { version = "0.8.0", features = ["tls", "transport"] } diff --git a/storage-bigtable/build-proto/Cargo.lock b/storage-bigtable/build-proto/Cargo.lock index 3e16ba9e84cdcc..a87bc85f83a23c 100644 --- a/storage-bigtable/build-proto/Cargo.lock +++ b/storage-bigtable/build-proto/Cargo.lock @@ -219,7 +219,7 @@ dependencies = [ [[package]] name = "proto" -version = "1.14.17" +version = "1.14.18" dependencies = [ "protobuf-src", "tonic-build", diff --git a/storage-bigtable/build-proto/Cargo.toml b/storage-bigtable/build-proto/Cargo.toml index 345f3a20aebe36..10be9018ced569 100644 --- a/storage-bigtable/build-proto/Cargo.toml +++ b/storage-bigtable/build-proto/Cargo.toml @@ -7,7 +7,7 @@ license = "Apache-2.0" name = "proto" publish = false repository = "https://github.com/solana-labs/solana" -version = "1.14.17" +version = "1.14.18" [workspace] diff --git a/storage-proto/Cargo.toml b/storage-proto/Cargo.toml index 7d1885c6813048..780bc8ad3670eb 100644 --- a/storage-proto/Cargo.toml +++ b/storage-proto/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-storage-proto" -version = "1.14.17" +version = "1.14.18" description = "Solana Storage Protobuf Definitions" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,9 +14,9 @@ bincode = "1.3.3" bs58 = "0.4.0" prost = "0.11.0" serde = "1.0.138" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.17" } -solana-sdk = { path = "../sdk", version = "=1.14.17" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.17" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.18" } +solana-sdk = { path = "../sdk", version = "=1.14.18" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.18" } [dev-dependencies] enum-iterator = "0.8.1" diff --git a/streamer/Cargo.toml b/streamer/Cargo.toml index 46125f46f3543e..52d1ce74246455 100644 --- a/streamer/Cargo.toml +++ b/streamer/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-streamer" -version = "1.14.17" +version = "1.14.18" description = "Solana Streamer" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -25,15 +25,15 @@ quinn = "0.8.3" rand = "0.7.0" rcgen = "0.9.2" rustls = { version = "0.20.6", features = ["dangerous_configuration"] } -solana-metrics = { path = "../metrics", version = "=1.14.17" } -solana-perf = { path = "../perf", version = "=1.14.17" } -solana-sdk = { path = "../sdk", version = "=1.14.17" } +solana-metrics = { path = "../metrics", version = "=1.14.18" } +solana-perf = { path = "../perf", version = "=1.14.18" } +solana-sdk = { path = "../sdk", version = "=1.14.18" } thiserror = "1.0" tokio = { version = "1", features = ["full"] } x509-parser = "0.14.0" [dev-dependencies] -solana-logger = { path = "../logger", version = "=1.14.17" } +solana-logger = { path = "../logger", version = "=1.14.18" } [lib] crate-type = ["lib"] diff --git a/sys-tuner/Cargo.toml b/sys-tuner/Cargo.toml index 4be6e1b8888ce8..6d92467e631f6c 100644 --- a/sys-tuner/Cargo.toml +++ b/sys-tuner/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-sys-tuner" description = "The solana cluster system tuner daemon" -version = "1.14.17" +version = "1.14.18" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,8 +14,8 @@ publish = true clap = "2.33.1" libc = "0.2.126" log = "0.4.17" -solana-logger = { path = "../logger", version = "=1.14.17" } -solana-version = { path = "../version", version = "=1.14.17" } +solana-logger = { path = "../logger", version = "=1.14.18" } +solana-version = { path = "../version", version = "=1.14.18" } [target."cfg(unix)".dependencies] unix_socket2 = "0.5.4" diff --git a/test-validator/Cargo.toml b/test-validator/Cargo.toml index 5434073af38428..f61a8ae0f9a82a 100644 --- a/test-validator/Cargo.toml +++ b/test-validator/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "solana-test-validator" description = "Blockchain, Rebuilt for Scale" -version = "1.14.17" +version = "1.14.18" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-test-validator" readme = "../README.md" @@ -15,19 +15,19 @@ base64 = "0.13.0" log = "0.4.17" serde_derive = "1.0.103" serde_json = "1.0.81" -solana-cli-output = { path = "../cli-output", version = "=1.14.17" } -solana-client = { path = "../client", version = "=1.14.17" } -solana-core = { path = "../core", version = "=1.14.17" } -solana-gossip = { path = "../gossip", version = "=1.14.17" } -solana-ledger = { path = "../ledger", version = "=1.14.17" } -solana-logger = { path = "../logger", version = "=1.14.17" } -solana-net-utils = { path = "../net-utils", version = "=1.14.17" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.17" } -solana-program-test = { path = "../program-test", version = "=1.14.17" } -solana-rpc = { path = "../rpc", version = "=1.14.17" } -solana-runtime = { path = "../runtime", version = "=1.14.17" } -solana-sdk = { path = "../sdk", version = "=1.14.17" } -solana-streamer = { path = "../streamer", version = "=1.14.17" } +solana-cli-output = { path = "../cli-output", version = "=1.14.18" } +solana-client = { path = "../client", version = "=1.14.18" } +solana-core = { path = "../core", version = "=1.14.18" } +solana-gossip = { path = "../gossip", version = "=1.14.18" } +solana-ledger = { path = "../ledger", version = "=1.14.18" } +solana-logger = { path = "../logger", version = "=1.14.18" } +solana-net-utils = { path = "../net-utils", version = "=1.14.18" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.18" } +solana-program-test = { path = "../program-test", version = "=1.14.18" } +solana-rpc = { path = "../rpc", version = "=1.14.18" } +solana-runtime = { path = "../runtime", version = "=1.14.18" } +solana-sdk = { path = "../sdk", version = "=1.14.18" } +solana-streamer = { path = "../streamer", version = "=1.14.18" } tokio = { version = "1", features = ["full"] } [package.metadata.docs.rs] diff --git a/tokens/Cargo.toml b/tokens/Cargo.toml index 7eee1783394428..a1d82ac5714b99 100644 --- a/tokens/Cargo.toml +++ b/tokens/Cargo.toml @@ -3,7 +3,7 @@ name = "solana-tokens" description = "Blockchain, Rebuilt for Scale" authors = ["Solana Maintainers "] edition = "2021" -version = "1.14.17" +version = "1.14.18" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -19,14 +19,14 @@ indexmap = "1.9.1" indicatif = "0.16.2" pickledb = { version = "0.5.1", default-features = false, features = ["yaml"] } serde = { version = "1.0", features = ["derive"] } -solana-account-decoder = { path = "../account-decoder", version = "=1.14.17" } -solana-clap-utils = { path = "../clap-utils", version = "=1.14.17" } -solana-cli-config = { path = "../cli-config", version = "=1.14.17" } -solana-client = { path = "../client", version = "=1.14.17" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.17" } -solana-sdk = { path = "../sdk", version = "=1.14.17" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.17" } -solana-version = { path = "../version", version = "=1.14.17" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.18" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.18" } +solana-cli-config = { path = "../cli-config", version = "=1.14.18" } +solana-client = { path = "../client", version = "=1.14.18" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.18" } +solana-sdk = { path = "../sdk", version = "=1.14.18" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.18" } +solana-version = { path = "../version", version = "=1.14.18" } spl-associated-token-account = { version = "=1.1.2" } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } tempfile = "3.3.0" @@ -34,6 +34,6 @@ thiserror = "1.0" [dev-dependencies] bincode = "1.3.3" -solana-logger = { path = "../logger", version = "=1.14.17" } -solana-streamer = { path = "../streamer", version = "=1.14.17" } -solana-test-validator = { path = "../test-validator", version = "=1.14.17" } +solana-logger = { path = "../logger", version = "=1.14.18" } +solana-streamer = { path = "../streamer", version = "=1.14.18" } +solana-test-validator = { path = "../test-validator", version = "=1.14.18" } diff --git a/transaction-dos/Cargo.toml b/transaction-dos/Cargo.toml index 3d7f2a42b5e5b6..f2902324c3fcdf 100644 --- a/transaction-dos/Cargo.toml +++ b/transaction-dos/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-transaction-dos" -version = "1.14.17" +version = "1.14.18" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,23 +14,23 @@ clap = "2.33.1" log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.17" } -solana-cli = { path = "../cli", version = "=1.14.17" } -solana-client = { path = "../client", version = "=1.14.17" } -solana-core = { path = "../core", version = "=1.14.17" } -solana-faucet = { path = "../faucet", version = "=1.14.17" } -solana-gossip = { path = "../gossip", version = "=1.14.17" } -solana-logger = { path = "../logger", version = "=1.14.17" } -solana-measure = { path = "../measure", version = "=1.14.17" } -solana-net-utils = { path = "../net-utils", version = "=1.14.17" } -solana-runtime = { path = "../runtime", version = "=1.14.17" } -solana-sdk = { path = "../sdk", version = "=1.14.17" } -solana-streamer = { path = "../streamer", version = "=1.14.17" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.17" } -solana-version = { path = "../version", version = "=1.14.17" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.18" } +solana-cli = { path = "../cli", version = "=1.14.18" } +solana-client = { path = "../client", version = "=1.14.18" } +solana-core = { path = "../core", version = "=1.14.18" } +solana-faucet = { path = "../faucet", version = "=1.14.18" } +solana-gossip = { path = "../gossip", version = "=1.14.18" } +solana-logger = { path = "../logger", version = "=1.14.18" } +solana-measure = { path = "../measure", version = "=1.14.18" } +solana-net-utils = { path = "../net-utils", version = "=1.14.18" } +solana-runtime = { path = "../runtime", version = "=1.14.18" } +solana-sdk = { path = "../sdk", version = "=1.14.18" } +solana-streamer = { path = "../streamer", version = "=1.14.18" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.18" } +solana-version = { path = "../version", version = "=1.14.18" } [dev-dependencies] -solana-local-cluster = { path = "../local-cluster", version = "=1.14.17" } +solana-local-cluster = { path = "../local-cluster", version = "=1.14.18" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/transaction-status/Cargo.toml b/transaction-status/Cargo.toml index c535284cb2275d..0cdbfc2447bc4a 100644 --- a/transaction-status/Cargo.toml +++ b/transaction-status/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-transaction-status" -version = "1.14.17" +version = "1.14.18" description = "Solana transaction status types" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -20,12 +20,12 @@ log = "0.4.17" serde = "1.0.138" serde_derive = "1.0.103" serde_json = "1.0.81" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.17" } -solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.17" } -solana-measure = { path = "../measure", version = "=1.14.17" } -solana-metrics = { path = "../metrics", version = "=1.14.17" } -solana-sdk = { path = "../sdk", version = "=1.14.17" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.17" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.18" } +solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.18" } +solana-measure = { path = "../measure", version = "=1.14.18" } +solana-metrics = { path = "../metrics", version = "=1.14.18" } +solana-sdk = { path = "../sdk", version = "=1.14.18" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.18" } spl-associated-token-account = { version = "=1.1.2", features = ["no-entrypoint"] } spl-memo = { version = "=3.0.1", features = ["no-entrypoint"] } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } diff --git a/upload-perf/Cargo.toml b/upload-perf/Cargo.toml index 7b9645193f3d2e..c1e6bb661cdd49 100644 --- a/upload-perf/Cargo.toml +++ b/upload-perf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-upload-perf" -version = "1.14.17" +version = "1.14.18" description = "Metrics Upload Utility" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -11,7 +11,7 @@ publish = false [dependencies] serde_json = "1.0.81" -solana-metrics = { path = "../metrics", version = "=1.14.17" } +solana-metrics = { path = "../metrics", version = "=1.14.18" } [[bin]] name = "solana-upload-perf" diff --git a/validator/Cargo.toml b/validator/Cargo.toml index f0ac14d346f8af..20b76996101f4e 100644 --- a/validator/Cargo.toml +++ b/validator/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-validator" description = "Blockchain, Rebuilt for Scale" -version = "1.14.17" +version = "1.14.18" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -28,30 +28,30 @@ num_cpus = "1.13.1" rand = "0.7.0" serde = "1.0.138" serde_json = "1.0.81" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.17" } -solana-cli-config = { path = "../cli-config", version = "=1.14.17" } -solana-client = { path = "../client", version = "=1.14.17" } -solana-core = { path = "../core", version = "=1.14.17" } -solana-download-utils = { path = "../download-utils", version = "=1.14.17" } -solana-entry = { path = "../entry", version = "=1.14.17" } -solana-faucet = { path = "../faucet", version = "=1.14.17" } -solana-genesis-utils = { path = "../genesis-utils", version = "=1.14.17" } -solana-gossip = { path = "../gossip", version = "=1.14.17" } -solana-ledger = { path = "../ledger", version = "=1.14.17" } -solana-logger = { path = "../logger", version = "=1.14.17" } -solana-metrics = { path = "../metrics", version = "=1.14.17" } -solana-net-utils = { path = "../net-utils", version = "=1.14.17" } -solana-perf = { path = "../perf", version = "=1.14.17" } -solana-poh = { path = "../poh", version = "=1.14.17" } -solana-rpc = { path = "../rpc", version = "=1.14.17" } -solana-runtime = { path = "../runtime", version = "=1.14.17" } -solana-sdk = { path = "../sdk", version = "=1.14.17" } -solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.17" } -solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.17" } -solana-streamer = { path = "../streamer", version = "=1.14.17" } -solana-test-validator = { path = "../test-validator", version = "=1.14.17" } -solana-version = { path = "../version", version = "=1.14.17" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.17" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.18" } +solana-cli-config = { path = "../cli-config", version = "=1.14.18" } +solana-client = { path = "../client", version = "=1.14.18" } +solana-core = { path = "../core", version = "=1.14.18" } +solana-download-utils = { path = "../download-utils", version = "=1.14.18" } +solana-entry = { path = "../entry", version = "=1.14.18" } +solana-faucet = { path = "../faucet", version = "=1.14.18" } +solana-genesis-utils = { path = "../genesis-utils", version = "=1.14.18" } +solana-gossip = { path = "../gossip", version = "=1.14.18" } +solana-ledger = { path = "../ledger", version = "=1.14.18" } +solana-logger = { path = "../logger", version = "=1.14.18" } +solana-metrics = { path = "../metrics", version = "=1.14.18" } +solana-net-utils = { path = "../net-utils", version = "=1.14.18" } +solana-perf = { path = "../perf", version = "=1.14.18" } +solana-poh = { path = "../poh", version = "=1.14.18" } +solana-rpc = { path = "../rpc", version = "=1.14.18" } +solana-runtime = { path = "../runtime", version = "=1.14.18" } +solana-sdk = { path = "../sdk", version = "=1.14.18" } +solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.18" } +solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.18" } +solana-streamer = { path = "../streamer", version = "=1.14.18" } +solana-test-validator = { path = "../test-validator", version = "=1.14.18" } +solana-version = { path = "../version", version = "=1.14.18" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.18" } symlink = "0.1.0" [target.'cfg(not(target_env = "msvc"))'.dependencies] diff --git a/version/Cargo.toml b/version/Cargo.toml index c4eef777f3aaf5..383d09f158b366 100644 --- a/version/Cargo.toml +++ b/version/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-version" -version = "1.14.17" +version = "1.14.18" description = "Solana Version" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,9 +14,9 @@ log = "0.4.17" semver = "1.0.10" serde = "1.0.138" serde_derive = "1.0.103" -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.17" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.17" } -solana-sdk = { path = "../sdk", version = "=1.14.17" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.18" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.18" } +solana-sdk = { path = "../sdk", version = "=1.14.18" } [lib] name = "solana_version" diff --git a/watchtower/Cargo.toml b/watchtower/Cargo.toml index e2940f3c61c906..f657f894e86f39 100644 --- a/watchtower/Cargo.toml +++ b/watchtower/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-watchtower" description = "Blockchain, Rebuilt for Scale" -version = "1.14.17" +version = "1.14.18" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -13,15 +13,15 @@ documentation = "https://docs.rs/solana-watchtower" clap = "2.33.1" humantime = "2.0.1" log = "0.4.17" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.17" } -solana-cli-config = { path = "../cli-config", version = "=1.14.17" } -solana-cli-output = { path = "../cli-output", version = "=1.14.17" } -solana-client = { path = "../client", version = "=1.14.17" } -solana-logger = { path = "../logger", version = "=1.14.17" } -solana-metrics = { path = "../metrics", version = "=1.14.17" } -solana-notifier = { path = "../notifier", version = "=1.14.17" } -solana-sdk = { path = "../sdk", version = "=1.14.17" } -solana-version = { path = "../version", version = "=1.14.17" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.18" } +solana-cli-config = { path = "../cli-config", version = "=1.14.18" } +solana-cli-output = { path = "../cli-output", version = "=1.14.18" } +solana-client = { path = "../client", version = "=1.14.18" } +solana-logger = { path = "../logger", version = "=1.14.18" } +solana-metrics = { path = "../metrics", version = "=1.14.18" } +solana-notifier = { path = "../notifier", version = "=1.14.18" } +solana-sdk = { path = "../sdk", version = "=1.14.18" } +solana-version = { path = "../version", version = "=1.14.18" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/zk-token-sdk/Cargo.toml b/zk-token-sdk/Cargo.toml index a1b0c93687634f..44c849d271ee8d 100644 --- a/zk-token-sdk/Cargo.toml +++ b/zk-token-sdk/Cargo.toml @@ -3,7 +3,7 @@ name = "solana-zk-token-sdk" description = "Solana Zk Token SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" -version = "1.14.17" +version = "1.14.18" license = "Apache-2.0" edition = "2021" @@ -12,7 +12,7 @@ base64 = "0.13" bytemuck = { version = "1.11.0", features = ["derive"] } num-derive = "0.3" num-traits = "0.2" -solana-program = { path = "../sdk/program", version = "=1.14.17" } +solana-program = { path = "../sdk/program", version = "=1.14.18" } [target.'cfg(not(target_os = "solana"))'.dependencies] aes-gcm-siv = "0.10.3" @@ -29,7 +29,7 @@ rand = "0.7" serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" sha3 = "0.9" -solana-sdk = { path = "../sdk", version = "=1.14.17" } +solana-sdk = { path = "../sdk", version = "=1.14.18" } subtle = "2" thiserror = "1.0" zeroize = { version = "1.3", default-features = false, features = ["zeroize_derive"] } From 76c1076306d36512d52502cac2fa0fd5bc677385 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Tue, 28 Mar 2023 10:50:34 +0900 Subject: [PATCH 376/465] v1.14: [clap-utils] Remove `--blockhash` arg as a strict requirement when passing `--nonce` (backport of #30864) (#30882) [clap-utils] Remove `--blockhash` arg as a strict requirement when passing `--nonce` (#30864) * require nonce authority argument on nonce clap argument * remove nonce authority requirement on nonce clap argument (cherry picked from commit 7d87e8227fde6fb402553e398f5ba7d2bed71ab0) Co-authored-by: samkim-crypto --- clap-v3-utils/src/nonce.rs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/clap-v3-utils/src/nonce.rs b/clap-v3-utils/src/nonce.rs index 8088edf10efb52..7ea6d5b8fc7284 100644 --- a/clap-v3-utils/src/nonce.rs +++ b/clap-v3-utils/src/nonce.rs @@ -1,5 +1,5 @@ use { - crate::{input_validators::*, offline::BLOCKHASH_ARG, ArgConstant}, + crate::{input_validators::*, ArgConstant}, clap::{Arg, Command}, }; @@ -23,7 +23,6 @@ fn nonce_arg<'a>() -> Arg<'a> { .long(NONCE_ARG.long) .takes_value(true) .value_name("PUBKEY") - .requires(BLOCKHASH_ARG.name) .validator(|s| is_valid_pubkey(s)) .help(NONCE_ARG.help) } From 96c7e43d64a084a80bec8250cfd0792f097f64d6 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Tue, 28 Mar 2023 15:18:00 +0000 Subject: [PATCH 377/465] v1.14: reports cluster-nodes metrics by stake (backport of #30912) (#30934) reports cluster-nodes metrics by stake (#30912) (cherry picked from commit 29f776c676ed4676f64bff927da87cdab0672878) Co-authored-by: behzad nouri --- core/src/cluster_nodes.rs | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/core/src/cluster_nodes.rs b/core/src/cluster_nodes.rs index 633d746687d507..2e1bfda0141964 100644 --- a/core/src/cluster_nodes.rs +++ b/core/src/cluster_nodes.rs @@ -17,6 +17,7 @@ use { solana_sdk::{ clock::{Epoch, Slot}, feature_set, + native_token::LAMPORTS_PER_SOL, pubkey::Pubkey, signature::Keypair, timing::timestamp, @@ -107,32 +108,42 @@ impl Node { impl ClusterNodes { pub(crate) fn submit_metrics(&self, name: &'static str, now: u64) { + let mut epoch_stakes = 0; let mut num_nodes_dead = 0; let mut num_nodes_staked = 0; let mut num_nodes_stale = 0; + let mut stake_dead = 0; + let mut stake_stale = 0; for node in &self.nodes { + epoch_stakes += node.stake; if node.stake != 0u64 { num_nodes_staked += 1; } match node.contact_info() { None => { num_nodes_dead += 1; + stake_dead += node.stake; } - Some(node) => { - let age = now.saturating_sub(node.wallclock); + Some(&ContactInfo { wallclock, .. }) => { + let age = now.saturating_sub(wallclock); if age > CRDS_GOSSIP_PULL_CRDS_TIMEOUT_MS { num_nodes_stale += 1; + stake_stale += node.stake; } } } } num_nodes_stale += num_nodes_dead; + stake_stale += stake_dead; datapoint_info!( name, + ("epoch_stakes", epoch_stakes / LAMPORTS_PER_SOL, i64), ("num_nodes", self.nodes.len(), i64), ("num_nodes_dead", num_nodes_dead, i64), ("num_nodes_staked", num_nodes_staked, i64), ("num_nodes_stale", num_nodes_stale, i64), + ("stake_dead", stake_dead / LAMPORTS_PER_SOL, i64), + ("stake_stale", stake_stale / LAMPORTS_PER_SOL, i64), ); } } From 5857b4514f2fbe8427bd6e3d1e7681b6d92fb05c Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Wed, 29 Mar 2023 09:34:07 -0700 Subject: [PATCH 378/465] v1.14: Update discord invite links (backport of #30909) (#30962) Update discord invite links (#30909) * Update discord invite links * Point to Stack Exchange for support (cherry picked from commit 000b912fc6da7f6100b668c5bffef2cabf2af1f9) Co-authored-by: Brennan --- docs/docusaurus.config.js | 4 ++-- geyser-plugin-interface/README.md | 2 +- sdk/README.md | 2 +- sdk/program/README.md | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/docusaurus.config.js b/docs/docusaurus.config.js index 493c8826c678a0..651c3d136f87c0 100644 --- a/docs/docusaurus.config.js +++ b/docs/docusaurus.config.js @@ -100,7 +100,7 @@ module.exports = { position: "right", }, { - href: "https://discordapp.com/invite/pquxPsq", + href: "https://solana.com/discord", // label: "Discord", className: "header-link-icon header-discord-link", "aria-label": "Solana Discord", @@ -163,7 +163,7 @@ module.exports = { }, { label: "Discord »", - href: "https://discordapp.com/invite/pquxPsq", + href: "https://solana.com/discord", }, { label: "Twitter »", diff --git a/geyser-plugin-interface/README.md b/geyser-plugin-interface/README.md index f2d20bee9fe695..761601d0dc4be1 100644 --- a/geyser-plugin-interface/README.md +++ b/geyser-plugin-interface/README.md @@ -22,4 +22,4 @@ an external PostgreSQL databases. More information about Solana is available in the [Solana documentation](https://docs.solana.com/). -Still have questions? Ask us on [Discord](https://discordapp.com/invite/pquxPsq) +Still have questions? Ask us on [Stack Exchange](https://sola.na/sse) diff --git a/sdk/README.md b/sdk/README.md index c8d6b77bd47e28..f12b3bfc19186b 100644 --- a/sdk/README.md +++ b/sdk/README.md @@ -12,4 +12,4 @@ More information about Solana is available in the [Solana documentation](https:/ The [Solana Program Library](https://github.com/solana-labs/solana-program-library) provides examples of how to use this crate. -Still have questions? Ask us on [Discord](https://discordapp.com/invite/pquxPsq) +Still have questions? Ask us on [Stack Exchange](https://sola.na/sse) diff --git a/sdk/program/README.md b/sdk/program/README.md index f15457eb7908c5..e5120a2780bce1 100644 --- a/sdk/program/README.md +++ b/sdk/program/README.md @@ -12,4 +12,4 @@ More information about Solana is available in the [Solana documentation](https:/ [Helloworld](https://github.com/solana-labs/example-helloworld) and the [Solana Program Library](https://github.com/solana-labs/solana-program-library) provide examples of how to use this crate. -Still have questions? Ask us on [Discord](https://discordapp.com/invite/pquxPsq) +Still have questions? Ask us on [Stack Exchange](https://sola.na/sse) From b67c6cbe841805d81493cde2cb62a59375df6de4 Mon Sep 17 00:00:00 2001 From: Kirill Fomichev Date: Wed, 29 Mar 2023 19:12:32 -0300 Subject: [PATCH 379/465] v1.14: Admin RPC Service: move post-init activation to before wait-for-supermajority (backport of #30544) (#30937) Admin RPC Service: move post-init activation to before wait-for-supermajority (cherry picked from commit 7b1d446001) --- core/src/admin_rpc_post_init.rs | 13 +++++++++++++ core/src/lib.rs | 1 + core/src/validator.rs | 10 ++++++++++ local-cluster/src/local_cluster.rs | 3 +++ test-validator/src/lib.rs | 5 +++++ validator/src/admin_rpc_service.rs | 16 +++------------- validator/src/bin/solana-test-validator.rs | 8 +------- validator/src/main.rs | 7 +------ 8 files changed, 37 insertions(+), 26 deletions(-) create mode 100644 core/src/admin_rpc_post_init.rs diff --git a/core/src/admin_rpc_post_init.rs b/core/src/admin_rpc_post_init.rs new file mode 100644 index 00000000000000..71d88f2b758d45 --- /dev/null +++ b/core/src/admin_rpc_post_init.rs @@ -0,0 +1,13 @@ +use { + solana_gossip::cluster_info::ClusterInfo, + solana_runtime::bank_forks::BankForks, + solana_sdk::pubkey::Pubkey, + std::sync::{Arc, RwLock}, +}; + +#[derive(Clone)] +pub struct AdminRpcRequestMetadataPostInit { + pub cluster_info: Arc, + pub bank_forks: Arc>, + pub vote_account: Pubkey, +} diff --git a/core/src/lib.rs b/core/src/lib.rs index 129e0bea5f2e2a..d6a22a5a68a639 100644 --- a/core/src/lib.rs +++ b/core/src/lib.rs @@ -9,6 +9,7 @@ //! pub mod accounts_hash_verifier; +pub mod admin_rpc_post_init; pub mod ancestor_hashes_service; pub mod banking_stage; pub mod broadcast_stage; diff --git a/core/src/validator.rs b/core/src/validator.rs index a2580f054ea86c..d749233c4ddc1a 100644 --- a/core/src/validator.rs +++ b/core/src/validator.rs @@ -4,6 +4,7 @@ pub use solana_perf::report_target_features; use { crate::{ accounts_hash_verifier::AccountsHashVerifier, + admin_rpc_post_init::AdminRpcRequestMetadataPostInit, broadcast_stage::BroadcastStageType, cache_block_meta_service::{CacheBlockMetaSender, CacheBlockMetaService}, cluster_info_vote_listener::VoteTracker, @@ -395,6 +396,7 @@ impl Validator { use_quic: bool, tpu_connection_pool_size: usize, tpu_enable_udp: bool, + admin_rpc_service_post_init: Arc>>, ) -> Self { let id = identity_keypair.pubkey(); assert_eq!(id, node.info.id); @@ -926,6 +928,12 @@ impl Validator { exit.clone(), ); + *admin_rpc_service_post_init.write().unwrap() = Some(AdminRpcRequestMetadataPostInit { + bank_forks: bank_forks.clone(), + cluster_info: cluster_info.clone(), + vote_account: *vote_account, + }); + let waited_for_supermajority = if let Ok(waited) = wait_for_supermajority( config, Some(&mut process_blockstore), @@ -2158,6 +2166,7 @@ mod tests { DEFAULT_TPU_USE_QUIC, DEFAULT_TPU_CONNECTION_POOL_SIZE, DEFAULT_TPU_ENABLE_UDP, + Arc::new(RwLock::new(None)), ); assert_eq!( @@ -2252,6 +2261,7 @@ mod tests { DEFAULT_TPU_USE_QUIC, DEFAULT_TPU_CONNECTION_POOL_SIZE, DEFAULT_TPU_ENABLE_UDP, + Arc::new(RwLock::new(None)), ) }) .collect(); diff --git a/local-cluster/src/local_cluster.rs b/local-cluster/src/local_cluster.rs index 6b46dbaa820857..533921b5fec77b 100644 --- a/local-cluster/src/local_cluster.rs +++ b/local-cluster/src/local_cluster.rs @@ -285,6 +285,7 @@ impl LocalCluster { DEFAULT_TPU_USE_QUIC, DEFAULT_TPU_CONNECTION_POOL_SIZE, DEFAULT_TPU_ENABLE_UDP, + Arc::new(RwLock::new(None)), ); let mut validators = HashMap::new(); @@ -484,6 +485,7 @@ impl LocalCluster { DEFAULT_TPU_USE_QUIC, DEFAULT_TPU_CONNECTION_POOL_SIZE, DEFAULT_TPU_ENABLE_UDP, + Arc::new(RwLock::new(None)), ); let validator_pubkey = validator_keypair.pubkey(); @@ -846,6 +848,7 @@ impl Cluster for LocalCluster { DEFAULT_TPU_USE_QUIC, DEFAULT_TPU_CONNECTION_POOL_SIZE, DEFAULT_TPU_ENABLE_UDP, + Arc::new(RwLock::new(None)), ); cluster_validator_info.validator = Some(restarted_node); cluster_validator_info diff --git a/test-validator/src/lib.rs b/test-validator/src/lib.rs index 1d9472d0fc3e62..5fa6588acf672e 100644 --- a/test-validator/src/lib.rs +++ b/test-validator/src/lib.rs @@ -11,6 +11,7 @@ use { rpc_request::MAX_MULTIPLE_ACCOUNTS, }, solana_core::{ + admin_rpc_post_init::AdminRpcRequestMetadataPostInit, tower_storage::TowerStorage, validator::{Validator, ValidatorConfig, ValidatorStartProgress}, }, @@ -126,6 +127,7 @@ pub struct TestValidatorGenesis { compute_unit_limit: Option, pub log_messages_bytes_limit: Option, pub tpu_enable_udp: bool, + admin_rpc_service_post_init: Arc>>, } impl Default for TestValidatorGenesis { @@ -156,6 +158,8 @@ impl Default for TestValidatorGenesis { compute_unit_limit: Option::::default(), log_messages_bytes_limit: Option::::default(), tpu_enable_udp: DEFAULT_TPU_ENABLE_UDP, + admin_rpc_service_post_init: + Arc::>>::default(), } } } @@ -844,6 +848,7 @@ impl TestValidator { DEFAULT_TPU_USE_QUIC, DEFAULT_TPU_CONNECTION_POOL_SIZE, config.tpu_enable_udp, + config.admin_rpc_service_post_init.clone(), )); // Needed to avoid panics in `solana-responder-gossip` in tests that create a number of diff --git a/validator/src/admin_rpc_service.rs b/validator/src/admin_rpc_service.rs index 1951780d6ed6f7..fc10f6f193206d 100644 --- a/validator/src/admin_rpc_service.rs +++ b/validator/src/admin_rpc_service.rs @@ -7,15 +7,12 @@ use { log::*, serde::{Deserialize, Serialize}, solana_core::{ - consensus::Tower, tower_storage::TowerStorage, validator::ValidatorStartProgress, + admin_rpc_post_init::AdminRpcRequestMetadataPostInit, consensus::Tower, + tower_storage::TowerStorage, validator::ValidatorStartProgress, }, - solana_gossip::{ - cluster_info::ClusterInfo, legacy_contact_info::LegacyContactInfo as ContactInfo, - }, - solana_runtime::bank_forks::BankForks, + solana_gossip::legacy_contact_info::LegacyContactInfo as ContactInfo, solana_sdk::{ exit::Exit, - pubkey::Pubkey, signature::{read_keypair_file, Keypair, Signer}, }, std::{ @@ -28,13 +25,6 @@ use { }, }; -#[derive(Clone)] -pub struct AdminRpcRequestMetadataPostInit { - pub cluster_info: Arc, - pub bank_forks: Arc>, - pub vote_account: Pubkey, -} - #[derive(Clone)] pub struct AdminRpcRequestMetadata { pub rpc_addr: Option, diff --git a/validator/src/bin/solana-test-validator.rs b/validator/src/bin/solana-test-validator.rs index 0bc0c3e7ae3487..fc392b244c810b 100644 --- a/validator/src/bin/solana-test-validator.rs +++ b/validator/src/bin/solana-test-validator.rs @@ -697,7 +697,7 @@ fn main() { start_time: std::time::SystemTime::now(), validator_exit: genesis.validator_exit.clone(), authorized_voter_keypairs: genesis.authorized_voter_keypairs.clone(), - post_init: admin_service_post_init.clone(), + post_init: admin_service_post_init, tower_storage: tower_storage.clone(), }, ); @@ -823,12 +823,6 @@ fn main() { match genesis.start_with_mint_address(mint_address, socket_addr_space) { Ok(test_validator) => { - *admin_service_post_init.write().unwrap() = - Some(admin_rpc_service::AdminRpcRequestMetadataPostInit { - bank_forks: test_validator.bank_forks(), - cluster_info: test_validator.cluster_info(), - vote_account: test_validator.vote_account_address(), - }); if let Some(dashboard) = dashboard { dashboard.run(Duration::from_millis(250)); } diff --git a/validator/src/main.rs b/validator/src/main.rs index 6109a745a2920b..937c69de2121df 100644 --- a/validator/src/main.rs +++ b/validator/src/main.rs @@ -3145,13 +3145,8 @@ pub fn main() { tpu_use_quic, tpu_connection_pool_size, tpu_enable_udp, + admin_service_post_init, ); - *admin_service_post_init.write().unwrap() = - Some(admin_rpc_service::AdminRpcRequestMetadataPostInit { - bank_forks: validator.bank_forks.clone(), - cluster_info: validator.cluster_info.clone(), - vote_account, - }); if let Some(filename) = init_complete_file { File::create(filename).unwrap_or_else(|_| { From e297b2e6f7e5398798ba5f23d31f3113d8bbfaad Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Fri, 31 Mar 2023 11:44:45 +0900 Subject: [PATCH 380/465] v1.14: [zk-token-sdk] Add option to create proof context state in the proof verification program (backport of #29996) (#30739) * [zk-token-sdk] Add option to create proof context state in the proof verification program (#29996) * extend verifiable trait * add PodBool * implement ZkProofData trait * add proof context program to zk-token-proof program * update tests for close account * add close account instruction * reorganize tests * complete tests * clean up and add docs * clean up pod * add proof program state * update tests * move proof program tests as separate module * clippy * cargo sort * cargo fmt * re-organize visibility * add context state description * update maintainer reference * change `VerifyProofData` and `ProofContextState` to pod * add tests for mixing proof types * add tests for self owned context state accounts * cargo fmt * remove unnecessary scoping and add comments on scopes * re-organize proof instructions * clippy * update zk-token-proof-test to 1.16.0 * upgrade spl-token-2022 to 0.6.1 * reoganize proof type * cargo lock * remove ZkProofContext trait (cherry picked from commit 2d58bb287d57f1e19e58f024c7d6766c86626049) # Conflicts: # Cargo.lock # Cargo.toml # programs/bpf/Cargo.lock # zk-token-sdk/src/instruction/transfer.rs * resolve conflicts * update zk-token-proof-tests version * adjust for update in transaction context run time * update spl-token to 0.6.1 * update ata to v1.1.3 --------- Co-authored-by: samkim-crypto --- Cargo.lock | 49 +- Cargo.toml | 1 + account-decoder/Cargo.toml | 2 +- client/Cargo.toml | 2 +- ledger/Cargo.toml | 2 +- programs/bpf/Cargo.lock | 38 +- programs/zk-token-proof-tests/Cargo.toml | 15 + .../tests/process_transaction.rs | 788 ++++++++++++++++++ programs/zk-token-proof/src/lib.rs | 129 ++- rpc/Cargo.toml | 2 +- tokens/Cargo.toml | 2 +- transaction-status/Cargo.toml | 4 +- zk-token-sdk/src/instruction/close_account.rs | 60 +- zk-token-sdk/src/instruction/mod.rs | 34 +- .../src/instruction/pubkey_validity.rs | 49 +- zk-token-sdk/src/instruction/transfer.rs | 95 ++- .../src/instruction/transfer_with_fee.rs | 119 +-- zk-token-sdk/src/instruction/withdraw.rs | 60 +- .../src/instruction/withdraw_withheld.rs | 81 +- zk-token-sdk/src/lib.rs | 1 + zk-token-sdk/src/zk_token_elgamal/pod.rs | 23 +- .../src/zk_token_proof_instruction.rs | 215 ++++- zk-token-sdk/src/zk_token_proof_state.rs | 72 ++ 23 files changed, 1534 insertions(+), 309 deletions(-) create mode 100644 programs/zk-token-proof-tests/Cargo.toml create mode 100644 programs/zk-token-proof-tests/tests/process_transaction.rs create mode 100644 zk-token-sdk/src/zk_token_proof_state.rs diff --git a/Cargo.lock b/Cargo.lock index 34c05106cdbdd1..087edefdb38b9d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4464,7 +4464,7 @@ dependencies = [ "solana-sdk 1.14.18", "solana-vote-program", "spl-token", - "spl-token-2022 0.6.0", + "spl-token-2022", "thiserror", "zstd", ] @@ -4923,7 +4923,7 @@ dependencies = [ "solana-transaction-status", "solana-version", "solana-vote-program", - "spl-token-2022 0.6.0", + "spl-token-2022", "thiserror", "tokio", "tokio-stream", @@ -5440,7 +5440,7 @@ dependencies = [ "solana-transaction-status", "solana-vote-program", "spl-token", - "spl-token-2022 0.6.0", + "spl-token-2022", "static_assertions", "tempfile", "test-case", @@ -5924,7 +5924,7 @@ dependencies = [ "solana-version", "solana-vote-program", "spl-token", - "spl-token-2022 0.6.0", + "spl-token-2022", "stream-cancel", "symlink", "thiserror", @@ -6407,7 +6407,7 @@ dependencies = [ "spl-associated-token-account", "spl-memo", "spl-token", - "spl-token-2022 0.6.0", + "spl-token-2022", "thiserror", ] @@ -6538,6 +6538,17 @@ dependencies = [ "solana-zk-token-sdk 1.14.18", ] +[[package]] +name = "solana-zk-token-proof-program-tests" +version = "1.14.18" +dependencies = [ + "bytemuck", + "solana-program-runtime", + "solana-program-test", + "solana-sdk 1.14.18", + "solana-zk-token-sdk 1.14.18", +] + [[package]] name = "solana-zk-token-sdk" version = "1.14.16" @@ -6640,9 +6651,9 @@ dependencies = [ [[package]] name = "spl-associated-token-account" -version = "1.1.2" +version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbc000f0fdf1f12f99d77d398137c1751345b18c88258ce0f99b7872cf6c9bd6" +checksum = "978dba3bcbe88d0c2c58366c254d9ea41c5f73357e72fc0bdee4d6b5fc99c8f4" dependencies = [ "assert_matches", "borsh", @@ -6650,7 +6661,7 @@ dependencies = [ "num-traits", "solana-program 1.14.16", "spl-token", - "spl-token-2022 0.5.0", + "spl-token-2022", "thiserror", ] @@ -6680,27 +6691,9 @@ dependencies = [ [[package]] name = "spl-token-2022" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0edb869dbe159b018f17fb9bfa67118c30f232d7f54a73742bc96794dff77ed8" -dependencies = [ - "arrayref", - "bytemuck", - "num-derive", - "num-traits", - "num_enum", - "solana-program 1.14.16", - "solana-zk-token-sdk 1.14.16", - "spl-memo", - "spl-token", - "thiserror", -] - -[[package]] -name = "spl-token-2022" -version = "0.6.0" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67fcd758e8d22c5fce17315015f5ff319604d1a6e57a73c72795639dba898890" +checksum = "0043b590232c400bad5ee9eb983ced003d15163c4c5d56b090ac6d9a57457b47" dependencies = [ "arrayref", "bytemuck", diff --git a/Cargo.toml b/Cargo.toml index 9aad90aeb4f175..48ef1d210423a7 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -58,6 +58,7 @@ members = [ "programs/stake", "programs/vote", "programs/zk-token-proof", + "programs/zk-token-proof-tests", "rayon-threadlimit", "rbpf-cli", "remote-wallet", diff --git a/account-decoder/Cargo.toml b/account-decoder/Cargo.toml index a04ce13cb3c8f6..3964f6533e2935 100644 --- a/account-decoder/Cargo.toml +++ b/account-decoder/Cargo.toml @@ -24,7 +24,7 @@ solana-config-program = { path = "../programs/config", version = "=1.14.18" } solana-sdk = { path = "../sdk", version = "=1.14.18" } solana-vote-program = { path = "../programs/vote", version = "=1.14.18" } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } -spl-token-2022 = { version = "=0.6.0", features = ["no-entrypoint"] } +spl-token-2022 = { version = "=0.6.1", features = ["no-entrypoint"] } thiserror = "1.0" zstd = "0.11.2" diff --git a/client/Cargo.toml b/client/Cargo.toml index b4e2566792f358..6166b95e29e82d 100644 --- a/client/Cargo.toml +++ b/client/Cargo.toml @@ -49,7 +49,7 @@ solana-streamer = { path = "../streamer", version = "=1.14.18" } solana-transaction-status = { path = "../transaction-status", version = "=1.14.18" } solana-version = { path = "../version", version = "=1.14.18" } solana-vote-program = { path = "../programs/vote", version = "=1.14.18" } -spl-token-2022 = { version = "=0.6.0", features = ["no-entrypoint"] } +spl-token-2022 = { version = "=0.6.1", features = ["no-entrypoint"] } thiserror = "1.0" tokio = { version = "1", features = ["full"] } tokio-stream = "0.1.9" diff --git a/ledger/Cargo.toml b/ledger/Cargo.toml index 0c5ae5b9d1f3d4..b2936a692f64d7 100644 --- a/ledger/Cargo.toml +++ b/ledger/Cargo.toml @@ -53,7 +53,7 @@ solana-storage-proto = { path = "../storage-proto", version = "=1.14.18" } solana-transaction-status = { path = "../transaction-status", version = "=1.14.18" } solana-vote-program = { path = "../programs/vote", version = "=1.14.18" } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } -spl-token-2022 = { version = "=0.6.0", features = ["no-entrypoint"] } +spl-token-2022 = { version = "=0.6.1", features = ["no-entrypoint"] } static_assertions = "1.1.0" tempfile = "3.3.0" thiserror = "1.0" diff --git a/programs/bpf/Cargo.lock b/programs/bpf/Cargo.lock index a6f7d8ec5ba175..bdaa7565d9abb5 100644 --- a/programs/bpf/Cargo.lock +++ b/programs/bpf/Cargo.lock @@ -4070,7 +4070,7 @@ dependencies = [ "solana-sdk 1.14.18", "solana-vote-program", "spl-token", - "spl-token-2022 0.6.0", + "spl-token-2022", "thiserror", "zstd", ] @@ -4667,7 +4667,7 @@ dependencies = [ "solana-transaction-status", "solana-version", "solana-vote-program", - "spl-token-2022 0.6.0", + "spl-token-2022", "thiserror", "tokio", "tokio-stream", @@ -5029,7 +5029,7 @@ dependencies = [ "solana-transaction-status", "solana-vote-program", "spl-token", - "spl-token-2022 0.6.0", + "spl-token-2022", "static_assertions", "tempfile", "thiserror", @@ -5362,7 +5362,7 @@ dependencies = [ "solana-version", "solana-vote-program", "spl-token", - "spl-token-2022 0.6.0", + "spl-token-2022", "stream-cancel", "thiserror", "tokio", @@ -5722,7 +5722,7 @@ dependencies = [ "spl-associated-token-account", "spl-memo", "spl-token", - "spl-token-2022 0.6.0", + "spl-token-2022", "thiserror", ] @@ -5925,9 +5925,9 @@ dependencies = [ [[package]] name = "spl-associated-token-account" -version = "1.1.2" +version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbc000f0fdf1f12f99d77d398137c1751345b18c88258ce0f99b7872cf6c9bd6" +checksum = "978dba3bcbe88d0c2c58366c254d9ea41c5f73357e72fc0bdee4d6b5fc99c8f4" dependencies = [ "assert_matches", "borsh", @@ -5935,7 +5935,7 @@ dependencies = [ "num-traits", "solana-program 1.14.16", "spl-token", - "spl-token-2022 0.5.0", + "spl-token-2022", "thiserror", ] @@ -5965,27 +5965,9 @@ dependencies = [ [[package]] name = "spl-token-2022" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0edb869dbe159b018f17fb9bfa67118c30f232d7f54a73742bc96794dff77ed8" -dependencies = [ - "arrayref", - "bytemuck", - "num-derive", - "num-traits", - "num_enum", - "solana-program 1.14.16", - "solana-zk-token-sdk 1.14.16", - "spl-memo", - "spl-token", - "thiserror", -] - -[[package]] -name = "spl-token-2022" -version = "0.6.0" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67fcd758e8d22c5fce17315015f5ff319604d1a6e57a73c72795639dba898890" +checksum = "0043b590232c400bad5ee9eb983ced003d15163c4c5d56b090ac6d9a57457b47" dependencies = [ "arrayref", "bytemuck", diff --git a/programs/zk-token-proof-tests/Cargo.toml b/programs/zk-token-proof-tests/Cargo.toml new file mode 100644 index 00000000000000..b1dfced7f01d65 --- /dev/null +++ b/programs/zk-token-proof-tests/Cargo.toml @@ -0,0 +1,15 @@ +[package] +name = "solana-zk-token-proof-program-tests" +authors = ["Solana Labs Maintainers "] +repository = "https://github.com/solana-labs/solana" +version = "1.14.18" +license = "Apache-2.0" +edition = "2021" +publish = false + +[dev-dependencies] +bytemuck = { version = "1.11.0", features = ["derive"] } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.18" } +solana-program-test = { path = "../../program-test", version = "=1.14.18" } +solana-sdk = { path = "../../sdk", version = "=1.14.18" } +solana-zk-token-sdk = { path = "../../zk-token-sdk", version = "=1.14.18" } diff --git a/programs/zk-token-proof-tests/tests/process_transaction.rs b/programs/zk-token-proof-tests/tests/process_transaction.rs new file mode 100644 index 00000000000000..555295e4e9a6ed --- /dev/null +++ b/programs/zk-token-proof-tests/tests/process_transaction.rs @@ -0,0 +1,788 @@ +use { + bytemuck::Pod, + solana_program_test::*, + solana_sdk::{ + instruction::InstructionError, + signature::Signer, + signer::keypair::Keypair, + system_instruction, + transaction::{Transaction, TransactionError}, + }, + solana_zk_token_sdk::{ + encryption::elgamal::ElGamalKeypair, instruction::*, zk_token_proof_instruction::*, + zk_token_proof_program, zk_token_proof_state::ProofContextState, + }, + std::mem::size_of, +}; + +const VERIFY_INSTRUCTION_TYPES: [ProofInstruction; 6] = [ + ProofInstruction::VerifyCloseAccount, + ProofInstruction::VerifyWithdraw, + ProofInstruction::VerifyWithdrawWithheldTokens, + ProofInstruction::VerifyTransfer, + ProofInstruction::VerifyTransferWithFee, + ProofInstruction::VerifyPubkeyValidity, +]; + +#[tokio::test] +async fn test_close_account() { + let elgamal_keypair = ElGamalKeypair::new_rand(); + + let zero_ciphertext = elgamal_keypair.public.encrypt(0_u64); + let success_proof_data = CloseAccountData::new(&elgamal_keypair, &zero_ciphertext).unwrap(); + + let incorrect_keypair = ElGamalKeypair { + public: ElGamalKeypair::new_rand().public, + secret: ElGamalKeypair::new_rand().secret, + }; + let fail_proof_data = CloseAccountData::new(&incorrect_keypair, &zero_ciphertext).unwrap(); + + test_verify_proof_without_context( + ProofInstruction::VerifyCloseAccount, + &success_proof_data, + &fail_proof_data, + ) + .await; + + test_verify_proof_with_context( + ProofInstruction::VerifyCloseAccount, + size_of::>(), + &success_proof_data, + &fail_proof_data, + ) + .await; + + test_close_context_state( + ProofInstruction::VerifyCloseAccount, + size_of::>(), + &success_proof_data, + ) + .await; +} + +#[tokio::test] +async fn test_withdraw_withheld_tokens() { + let elgamal_keypair = ElGamalKeypair::new_rand(); + let destination_keypair = ElGamalKeypair::new_rand(); + + let amount: u64 = 0; + let withdraw_withheld_authority_ciphertext = elgamal_keypair.public.encrypt(amount); + + let success_proof_data = WithdrawWithheldTokensData::new( + &elgamal_keypair, + &destination_keypair.public, + &withdraw_withheld_authority_ciphertext, + amount, + ) + .unwrap(); + + let incorrect_keypair = ElGamalKeypair { + public: ElGamalKeypair::new_rand().public, + secret: ElGamalKeypair::new_rand().secret, + }; + let fail_proof_data = WithdrawWithheldTokensData::new( + &incorrect_keypair, + &destination_keypair.public, + &withdraw_withheld_authority_ciphertext, + amount, + ) + .unwrap(); + + test_verify_proof_without_context( + ProofInstruction::VerifyWithdrawWithheldTokens, + &success_proof_data, + &fail_proof_data, + ) + .await; + + test_verify_proof_with_context( + ProofInstruction::VerifyWithdrawWithheldTokens, + size_of::>(), + &success_proof_data, + &fail_proof_data, + ) + .await; + + test_close_context_state( + ProofInstruction::VerifyWithdrawWithheldTokens, + size_of::>(), + &success_proof_data, + ) + .await; +} + +#[tokio::test] +async fn test_transfer() { + let source_keypair = ElGamalKeypair::new_rand(); + let dest_pubkey = ElGamalKeypair::new_rand().public; + let auditor_pubkey = ElGamalKeypair::new_rand().public; + + let spendable_balance: u64 = 0; + let spendable_ciphertext = source_keypair.public.encrypt(spendable_balance); + + let transfer_amount: u64 = 0; + + let success_proof_data = TransferData::new( + transfer_amount, + (spendable_balance, &spendable_ciphertext), + &source_keypair, + (&dest_pubkey, &auditor_pubkey), + ) + .unwrap(); + + let incorrect_keypair = ElGamalKeypair { + public: ElGamalKeypair::new_rand().public, + secret: ElGamalKeypair::new_rand().secret, + }; + + let fail_proof_data = TransferData::new( + transfer_amount, + (spendable_balance, &spendable_ciphertext), + &incorrect_keypair, + (&dest_pubkey, &auditor_pubkey), + ) + .unwrap(); + + test_verify_proof_without_context( + ProofInstruction::VerifyTransfer, + &success_proof_data, + &fail_proof_data, + ) + .await; + + test_verify_proof_with_context( + ProofInstruction::VerifyTransfer, + size_of::>(), + &success_proof_data, + &fail_proof_data, + ) + .await; + + test_close_context_state( + ProofInstruction::VerifyTransfer, + size_of::>(), + &success_proof_data, + ) + .await; +} + +#[tokio::test] +async fn test_transfer_with_fee() { + let source_keypair = ElGamalKeypair::new_rand(); + let destination_pubkey = ElGamalKeypair::new_rand().public; + let auditor_pubkey = ElGamalKeypair::new_rand().public; + let withdraw_withheld_authority_pubkey = ElGamalKeypair::new_rand().public; + + let spendable_balance: u64 = 120; + let spendable_ciphertext = source_keypair.public.encrypt(spendable_balance); + + let transfer_amount: u64 = 0; + + let fee_parameters = FeeParameters { + fee_rate_basis_points: 400, + maximum_fee: 3, + }; + + let success_proof_data = TransferWithFeeData::new( + transfer_amount, + (spendable_balance, &spendable_ciphertext), + &source_keypair, + (&destination_pubkey, &auditor_pubkey), + fee_parameters, + &withdraw_withheld_authority_pubkey, + ) + .unwrap(); + + let incorrect_keypair = ElGamalKeypair { + public: ElGamalKeypair::new_rand().public, + secret: ElGamalKeypair::new_rand().secret, + }; + + let fail_proof_data = TransferWithFeeData::new( + transfer_amount, + (spendable_balance, &spendable_ciphertext), + &incorrect_keypair, + (&destination_pubkey, &auditor_pubkey), + fee_parameters, + &withdraw_withheld_authority_pubkey, + ) + .unwrap(); + + test_verify_proof_without_context( + ProofInstruction::VerifyTransferWithFee, + &success_proof_data, + &fail_proof_data, + ) + .await; + + test_verify_proof_with_context( + ProofInstruction::VerifyTransferWithFee, + size_of::>(), + &success_proof_data, + &fail_proof_data, + ) + .await; + + test_close_context_state( + ProofInstruction::VerifyTransferWithFee, + size_of::>(), + &success_proof_data, + ) + .await; +} + +#[tokio::test] +async fn test_withdraw() { + let elgamal_keypair = ElGamalKeypair::new_rand(); + + let current_balance: u64 = 77; + let current_ciphertext = elgamal_keypair.public.encrypt(current_balance); + let withdraw_amount: u64 = 55; + + let success_proof_data = WithdrawData::new( + withdraw_amount, + &elgamal_keypair, + current_balance, + ¤t_ciphertext, + ) + .unwrap(); + + let incorrect_keypair = ElGamalKeypair { + public: ElGamalKeypair::new_rand().public, + secret: ElGamalKeypair::new_rand().secret, + }; + let fail_proof_data = WithdrawData::new( + withdraw_amount, + &incorrect_keypair, + current_balance, + ¤t_ciphertext, + ) + .unwrap(); + + test_verify_proof_without_context( + ProofInstruction::VerifyWithdraw, + &success_proof_data, + &fail_proof_data, + ) + .await; + + test_verify_proof_with_context( + ProofInstruction::VerifyWithdraw, + size_of::>(), + &success_proof_data, + &fail_proof_data, + ) + .await; + + test_close_context_state( + ProofInstruction::VerifyWithdraw, + size_of::>(), + &success_proof_data, + ) + .await; +} + +#[tokio::test] +async fn test_pubkey_validity() { + let elgamal_keypair = ElGamalKeypair::new_rand(); + + let success_proof_data = PubkeyValidityData::new(&elgamal_keypair).unwrap(); + + let incorrect_keypair = ElGamalKeypair { + public: ElGamalKeypair::new_rand().public, + secret: ElGamalKeypair::new_rand().secret, + }; + + let fail_proof_data = PubkeyValidityData::new(&incorrect_keypair).unwrap(); + + test_verify_proof_without_context( + ProofInstruction::VerifyPubkeyValidity, + &success_proof_data, + &fail_proof_data, + ) + .await; + + test_verify_proof_with_context( + ProofInstruction::VerifyPubkeyValidity, + size_of::>(), + &success_proof_data, + &fail_proof_data, + ) + .await; + + test_close_context_state( + ProofInstruction::VerifyPubkeyValidity, + size_of::>(), + &success_proof_data, + ) + .await; +} + +async fn test_verify_proof_without_context( + proof_instruction: ProofInstruction, + success_proof_data: &T, + fail_proof_data: &T, +) where + T: Pod + ZkProofData, + U: Pod, +{ + let mut context = ProgramTest::default().start_with_context().await; + + let client = &mut context.banks_client; + let payer = &context.payer; + let recent_blockhash = context.last_blockhash; + + // verify a valid proof (wihtout creating a context account) + let instructions = vec![proof_instruction.encode_verify_proof(None, success_proof_data)]; + let transaction = Transaction::new_signed_with_payer( + &instructions, + Some(&payer.pubkey()), + &[payer], + recent_blockhash, + ); + client.process_transaction(transaction).await.unwrap(); + + // try to verify an invalid proof (without creating a context account) + let instructions = vec![proof_instruction.encode_verify_proof(None, fail_proof_data)]; + let transaction = Transaction::new_signed_with_payer( + &instructions, + Some(&payer.pubkey()), + &[payer], + recent_blockhash, + ); + let err = client + .process_transaction(transaction) + .await + .unwrap_err() + .unwrap(); + assert_eq!( + err, + TransactionError::InstructionError(0, InstructionError::InvalidInstructionData) + ); + + // try to verify a valid proof, but with a wrong proof type + for wrong_instruction_type in VERIFY_INSTRUCTION_TYPES { + if proof_instruction == wrong_instruction_type { + continue; + } + + let instruction = + vec![wrong_instruction_type.encode_verify_proof(None, success_proof_data)]; + let transaction = Transaction::new_signed_with_payer( + &instruction, + Some(&payer.pubkey()), + &[payer], + recent_blockhash, + ); + let err = client + .process_transaction(transaction) + .await + .unwrap_err() + .unwrap(); + assert_eq!( + err, + TransactionError::InstructionError(0, InstructionError::InvalidInstructionData) + ); + } +} + +async fn test_verify_proof_with_context( + instruction_type: ProofInstruction, + space: usize, + success_proof_data: &T, + fail_proof_data: &T, +) where + T: Pod + ZkProofData, + U: Pod, +{ + let mut context = ProgramTest::default().start_with_context().await; + let rent = context.banks_client.get_rent().await.unwrap(); + + let client = &mut context.banks_client; + let payer = &context.payer; + let recent_blockhash = context.last_blockhash; + + let context_state_account = Keypair::new(); + let context_state_authority = Keypair::new(); + + let context_state_info = ContextStateInfo { + context_state_account: &context_state_account.pubkey(), + context_state_authority: &context_state_authority.pubkey(), + }; + + // try to create proof context state with an invalid proof + let instructions = vec![ + system_instruction::create_account( + &payer.pubkey(), + &context_state_account.pubkey(), + rent.minimum_balance(space), + space as u64, + &zk_token_proof_program::id(), + ), + instruction_type.encode_verify_proof(Some(context_state_info), fail_proof_data), + ]; + let transaction = Transaction::new_signed_with_payer( + &instructions, + Some(&payer.pubkey()), + &[payer, &context_state_account], + recent_blockhash, + ); + let err = client + .process_transaction(transaction) + .await + .unwrap_err() + .unwrap(); + assert_eq!( + err, + TransactionError::InstructionError(1, InstructionError::InvalidInstructionData) + ); + + // try to create proof context state with incorrect account data length + let instructions = vec![ + system_instruction::create_account( + &payer.pubkey(), + &context_state_account.pubkey(), + rent.minimum_balance(space), + (space.checked_sub(1).unwrap()) as u64, + &zk_token_proof_program::id(), + ), + instruction_type.encode_verify_proof(Some(context_state_info), success_proof_data), + ]; + let transaction = Transaction::new_signed_with_payer( + &instructions, + Some(&payer.pubkey()), + &[payer, &context_state_account], + recent_blockhash, + ); + let err = client + .process_transaction(transaction) + .await + .unwrap_err() + .unwrap(); + assert_eq!( + err, + TransactionError::InstructionError(1, InstructionError::InvalidAccountData) + ); + + // try to create proof context state with insufficient rent + let instructions = vec![ + system_instruction::create_account( + &payer.pubkey(), + &context_state_account.pubkey(), + rent.minimum_balance(space).checked_sub(1).unwrap(), + space as u64, + &zk_token_proof_program::id(), + ), + instruction_type.encode_verify_proof(Some(context_state_info), success_proof_data), + ]; + let transaction = Transaction::new_signed_with_payer( + &instructions, + Some(&payer.pubkey()), + &[payer, &context_state_account], + recent_blockhash, + ); + let err = client + .process_transaction(transaction) + .await + .unwrap_err() + .unwrap(); + assert_eq!( + err, + TransactionError::InsufficientFundsForRent { account_index: 1 }, + ); + + // try to create proof context state with an invalid `ProofType` + for wrong_instruction_type in VERIFY_INSTRUCTION_TYPES { + if instruction_type == wrong_instruction_type { + continue; + } + + let instructions = vec![ + system_instruction::create_account( + &payer.pubkey(), + &context_state_account.pubkey(), + rent.minimum_balance(space), + space as u64, + &zk_token_proof_program::id(), + ), + wrong_instruction_type + .encode_verify_proof(Some(context_state_info), success_proof_data), + ]; + let transaction = Transaction::new_signed_with_payer( + &instructions, + Some(&payer.pubkey()), + &[payer, &context_state_account], + recent_blockhash, + ); + let err = client + .process_transaction(transaction) + .await + .unwrap_err() + .unwrap(); + assert_eq!( + err, + TransactionError::InstructionError(1, InstructionError::InvalidInstructionData) + ); + } + + // successfully create a proof context state + let instructions = vec![ + system_instruction::create_account( + &payer.pubkey(), + &context_state_account.pubkey(), + rent.minimum_balance(space), + space as u64, + &zk_token_proof_program::id(), + ), + instruction_type.encode_verify_proof(Some(context_state_info), success_proof_data), + ]; + let transaction = Transaction::new_signed_with_payer( + &instructions, + Some(&payer.pubkey()), + &[payer, &context_state_account], + recent_blockhash, + ); + client.process_transaction(transaction).await.unwrap(); + + // try overwriting the context state + let instructions = + vec![instruction_type.encode_verify_proof(Some(context_state_info), success_proof_data)]; + let transaction = Transaction::new_signed_with_payer( + &instructions, + Some(&payer.pubkey()), + &[payer], + recent_blockhash, + ); + let err = client + .process_transaction(transaction) + .await + .unwrap_err() + .unwrap(); + assert_eq!( + err, + TransactionError::InstructionError(0, InstructionError::AccountAlreadyInitialized) + ); + + // self-owned context state account + let context_state_account_and_authority = Keypair::new(); + let context_state_info = ContextStateInfo { + context_state_account: &context_state_account_and_authority.pubkey(), + context_state_authority: &context_state_account_and_authority.pubkey(), + }; + + let instructions = vec![ + system_instruction::create_account( + &payer.pubkey(), + &context_state_account_and_authority.pubkey(), + rent.minimum_balance(space), + space as u64, + &zk_token_proof_program::id(), + ), + instruction_type.encode_verify_proof(Some(context_state_info), success_proof_data), + ]; + let transaction = Transaction::new_signed_with_payer( + &instructions, + Some(&payer.pubkey()), + &[payer, &context_state_account_and_authority], + recent_blockhash, + ); + client.process_transaction(transaction).await.unwrap(); +} + +async fn test_close_context_state( + instruction_type: ProofInstruction, + space: usize, + success_proof_data: &T, +) where + T: Pod + ZkProofData, + U: Pod, +{ + let mut context = ProgramTest::default().start_with_context().await; + let rent = context.banks_client.get_rent().await.unwrap(); + + let client = &mut context.banks_client; + let payer = &context.payer; + let recent_blockhash = context.last_blockhash; + + let context_state_account = Keypair::new(); + let context_state_authority = Keypair::new(); + + let context_state_info = ContextStateInfo { + context_state_account: &context_state_account.pubkey(), + context_state_authority: &context_state_authority.pubkey(), + }; + + let destination_account = Keypair::new(); + + // create a proof context state + let instructions = vec![ + system_instruction::create_account( + &payer.pubkey(), + &context_state_account.pubkey(), + rent.minimum_balance(space), + space as u64, + &zk_token_proof_program::id(), + ), + instruction_type.encode_verify_proof(Some(context_state_info), success_proof_data), + ]; + let transaction = Transaction::new_signed_with_payer( + &instructions, + Some(&payer.pubkey()), + &[payer, &context_state_account], + recent_blockhash, + ); + client.process_transaction(transaction).await.unwrap(); + + // try to close context state with incorrect authority + let incorrect_authority = Keypair::new(); + let instruction = close_context_state( + ContextStateInfo { + context_state_account: &context_state_account.pubkey(), + context_state_authority: &incorrect_authority.pubkey(), + }, + &destination_account.pubkey(), + ); + let transaction = Transaction::new_signed_with_payer( + &[instruction], + Some(&payer.pubkey()), + &[payer, &incorrect_authority], + recent_blockhash, + ); + let err = client + .process_transaction(transaction) + .await + .unwrap_err() + .unwrap(); + assert_eq!( + err, + TransactionError::InstructionError(0, InstructionError::InvalidAccountOwner) + ); + + // successfully close proof context state + let instruction = close_context_state( + ContextStateInfo { + context_state_account: &context_state_account.pubkey(), + context_state_authority: &context_state_authority.pubkey(), + }, + &destination_account.pubkey(), + ); + let transaction = Transaction::new_signed_with_payer( + &[instruction.clone()], + Some(&payer.pubkey()), + &[payer, &context_state_authority], + recent_blockhash, + ); + client.process_transaction(transaction).await.unwrap(); + + // create and close proof context in a single transaction + let instructions = vec![ + system_instruction::create_account( + &payer.pubkey(), + &context_state_account.pubkey(), + 0_u64, // do not deposit rent + space as u64, + &zk_token_proof_program::id(), + ), + instruction_type.encode_verify_proof(Some(context_state_info), success_proof_data), + close_context_state( + ContextStateInfo { + context_state_account: &context_state_account.pubkey(), + context_state_authority: &context_state_authority.pubkey(), + }, + &destination_account.pubkey(), + ), + ]; + let transaction = Transaction::new_signed_with_payer( + &instructions, + Some(&payer.pubkey()), + &[payer, &context_state_account, &context_state_authority], + recent_blockhash, + ); + client.process_transaction(transaction).await.unwrap(); + + // close proof context state with owner as destination + let instructions = vec![ + system_instruction::create_account( + &payer.pubkey(), + &context_state_account.pubkey(), + 0_u64, + space as u64, + &zk_token_proof_program::id(), + ), + instruction_type.encode_verify_proof(Some(context_state_info), success_proof_data), + close_context_state( + ContextStateInfo { + context_state_account: &context_state_account.pubkey(), + context_state_authority: &context_state_authority.pubkey(), + }, + &context_state_authority.pubkey(), + ), + ]; + let transaction = Transaction::new_signed_with_payer( + &instructions, + Some(&payer.pubkey()), + &[payer, &context_state_account, &context_state_authority], + recent_blockhash, + ); + client.process_transaction(transaction).await.unwrap(); + + // try close account with itself as destination + let instructions = vec![ + system_instruction::create_account( + &payer.pubkey(), + &context_state_account.pubkey(), + 0_u64, + space as u64, + &zk_token_proof_program::id(), + ), + instruction_type.encode_verify_proof(Some(context_state_info), success_proof_data), + close_context_state( + ContextStateInfo { + context_state_account: &context_state_account.pubkey(), + context_state_authority: &context_state_authority.pubkey(), + }, + &context_state_account.pubkey(), + ), + ]; + let transaction = Transaction::new_signed_with_payer( + &instructions, + Some(&payer.pubkey()), + &[payer, &context_state_account, &context_state_authority], + recent_blockhash, + ); + let err = client + .process_transaction(transaction) + .await + .unwrap_err() + .unwrap(); + assert_eq!( + err, + TransactionError::InstructionError(2, InstructionError::InvalidInstructionData) + ); + + // close self-owned proof context accounts + let context_state_account_and_authority = Keypair::new(); + let context_state_info = ContextStateInfo { + context_state_account: &context_state_account_and_authority.pubkey(), + context_state_authority: &context_state_account_and_authority.pubkey(), + }; + + let instructions = vec![ + system_instruction::create_account( + &payer.pubkey(), + &context_state_account_and_authority.pubkey(), + 0_u64, + space as u64, + &zk_token_proof_program::id(), + ), + instruction_type.encode_verify_proof(Some(context_state_info), success_proof_data), + close_context_state(context_state_info, &context_state_account.pubkey()), + ]; + let transaction = Transaction::new_signed_with_payer( + &instructions, + Some(&payer.pubkey()), + &[payer, &context_state_account_and_authority], + recent_blockhash, + ); + client.process_transaction(transaction).await.unwrap(); +} diff --git a/programs/zk-token-proof/src/lib.rs b/programs/zk-token-proof/src/lib.rs index 77d40064435a96..a49f361a089994 100644 --- a/programs/zk-token-proof/src/lib.rs +++ b/programs/zk-token-proof/src/lib.rs @@ -3,26 +3,114 @@ use { bytemuck::Pod, solana_program_runtime::{ic_msg, invoke_context::InvokeContext}, - solana_sdk::instruction::{InstructionError, TRANSACTION_LEVEL_STACK_HEIGHT}, - solana_zk_token_sdk::zk_token_proof_instruction::*, + solana_sdk::{ + instruction::{InstructionError, TRANSACTION_LEVEL_STACK_HEIGHT}, + system_program, + }, + solana_zk_token_sdk::{ + zk_token_proof_instruction::*, + zk_token_proof_program::id, + zk_token_proof_state::{ProofContextState, ProofContextStateMeta}, + }, std::result::Result, }; -fn verify(invoke_context: &mut InvokeContext) -> Result<(), InstructionError> { +fn process_verify_proof(invoke_context: &mut InvokeContext) -> Result<(), InstructionError> +where + T: Pod + ZkProofData, + U: Pod, +{ let transaction_context = &invoke_context.transaction_context; let instruction_context = transaction_context.get_current_instruction_context()?; let instruction_data = instruction_context.get_instruction_data(); - let instruction = ProofInstruction::decode_data::(instruction_data); - - let proof = instruction.ok_or_else(|| { + let proof_data = ProofInstruction::proof_data::(instruction_data).ok_or_else(|| { ic_msg!(invoke_context, "invalid proof data"); InstructionError::InvalidInstructionData })?; - proof.verify().map_err(|err| { - ic_msg!(invoke_context, "proof verification failed: {:?}", err); + proof_data.verify_proof().map_err(|err| { + ic_msg!(invoke_context, "proof_verification failed: {:?}", err); InstructionError::InvalidInstructionData - }) + })?; + + // create context state if accounts are provided with the instruction + if instruction_context.get_number_of_instruction_accounts() > 0 { + let context_state_authority = *instruction_context + .try_borrow_instruction_account(transaction_context, 1)? + .get_key(); + + let mut proof_context_account = + instruction_context.try_borrow_instruction_account(transaction_context, 0)?; + + if *proof_context_account.get_owner() != id() { + return Err(InstructionError::InvalidAccountOwner); + } + + let proof_context_state_meta = + ProofContextStateMeta::try_from_bytes(proof_context_account.get_data())?; + + if proof_context_state_meta.proof_type != ProofType::Uninitialized.into() { + return Err(InstructionError::AccountAlreadyInitialized); + } + + let context_state_data = ProofContextState::encode( + &context_state_authority, + T::PROOF_TYPE, + proof_data.context_data(), + ); + + if proof_context_account.get_data().len() != context_state_data.len() { + return Err(InstructionError::InvalidAccountData); + } + + proof_context_account.set_data(&context_state_data)?; + } + + Ok(()) +} + +fn process_close_proof_context(invoke_context: &mut InvokeContext) -> Result<(), InstructionError> { + let transaction_context = &invoke_context.transaction_context; + let instruction_context = transaction_context.get_current_instruction_context()?; + + let owner_pubkey = { + let owner_account = + instruction_context.try_borrow_instruction_account(transaction_context, 2)?; + + if !owner_account.is_signer() { + return Err(InstructionError::MissingRequiredSignature); + } + *owner_account.get_key() + }; // done with `owner_account`, so drop it to prevent a potential double borrow + + let proof_context_account_pubkey = *instruction_context + .try_borrow_instruction_account(transaction_context, 0)? + .get_key(); + let destination_account_pubkey = *instruction_context + .try_borrow_instruction_account(transaction_context, 1)? + .get_key(); + if proof_context_account_pubkey == destination_account_pubkey { + return Err(InstructionError::InvalidInstructionData); + } + + let mut proof_context_account = + instruction_context.try_borrow_instruction_account(transaction_context, 0)?; + let proof_context_state_meta = + ProofContextStateMeta::try_from_bytes(proof_context_account.get_data())?; + let expected_owner_pubkey = proof_context_state_meta.context_state_authority; + + if owner_pubkey != expected_owner_pubkey { + return Err(InstructionError::InvalidAccountOwner); + } + + let mut destination_account = + instruction_context.try_borrow_instruction_account(transaction_context, 1)?; + destination_account.checked_add_lamports(proof_context_account.get_lamports())?; + proof_context_account.set_lamports(0)?; + proof_context_account.set_data_length(0)?; + proof_context_account.set_owner(system_program::id().as_ref())?; + + Ok(()) } pub fn process_instruction( @@ -44,32 +132,39 @@ pub fn process_instruction( let transaction_context = &invoke_context.transaction_context; let instruction_context = transaction_context.get_current_instruction_context()?; let instruction_data = instruction_context.get_instruction_data(); - let instruction = ProofInstruction::decode_type(instruction_data); + let instruction = ProofInstruction::instruction_type(instruction_data) + .ok_or(InstructionError::InvalidInstructionData)?; - match instruction.ok_or(InstructionError::InvalidInstructionData)? { + match instruction { + ProofInstruction::CloseContextState => { + ic_msg!(invoke_context, "CloseContextState"); + process_close_proof_context(invoke_context) + } ProofInstruction::VerifyCloseAccount => { ic_msg!(invoke_context, "VerifyCloseAccount"); - verify::(invoke_context) + process_verify_proof::(invoke_context) } ProofInstruction::VerifyWithdraw => { ic_msg!(invoke_context, "VerifyWithdraw"); - verify::(invoke_context) + process_verify_proof::(invoke_context) } ProofInstruction::VerifyWithdrawWithheldTokens => { ic_msg!(invoke_context, "VerifyWithdrawWithheldTokens"); - verify::(invoke_context) + process_verify_proof::( + invoke_context, + ) } ProofInstruction::VerifyTransfer => { ic_msg!(invoke_context, "VerifyTransfer"); - verify::(invoke_context) + process_verify_proof::(invoke_context) } ProofInstruction::VerifyTransferWithFee => { ic_msg!(invoke_context, "VerifyTransferWithFee"); - verify::(invoke_context) + process_verify_proof::(invoke_context) } ProofInstruction::VerifyPubkeyValidity => { ic_msg!(invoke_context, "VerifyPubkeyValidity"); - verify::(invoke_context) + process_verify_proof::(invoke_context) } } } diff --git a/rpc/Cargo.toml b/rpc/Cargo.toml index d3257032f22fb9..3b11317909c090 100644 --- a/rpc/Cargo.toml +++ b/rpc/Cargo.toml @@ -50,7 +50,7 @@ solana-transaction-status = { path = "../transaction-status", version = "=1.14.1 solana-version = { path = "../version", version = "=1.14.18" } solana-vote-program = { path = "../programs/vote", version = "=1.14.18" } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } -spl-token-2022 = { version = "=0.6.0", features = ["no-entrypoint"] } +spl-token-2022 = { version = "=0.6.1", features = ["no-entrypoint"] } stream-cancel = "0.8.1" thiserror = "1.0" tokio = { version = "~1.14.1", features = ["full"] } diff --git a/tokens/Cargo.toml b/tokens/Cargo.toml index a1d82ac5714b99..c91e32b2a1c49a 100644 --- a/tokens/Cargo.toml +++ b/tokens/Cargo.toml @@ -27,7 +27,7 @@ solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.18" } solana-sdk = { path = "../sdk", version = "=1.14.18" } solana-transaction-status = { path = "../transaction-status", version = "=1.14.18" } solana-version = { path = "../version", version = "=1.14.18" } -spl-associated-token-account = { version = "=1.1.2" } +spl-associated-token-account = { version = "=1.1.3" } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } tempfile = "3.3.0" thiserror = "1.0" diff --git a/transaction-status/Cargo.toml b/transaction-status/Cargo.toml index 0cdbfc2447bc4a..1916ef6767c6f0 100644 --- a/transaction-status/Cargo.toml +++ b/transaction-status/Cargo.toml @@ -26,10 +26,10 @@ solana-measure = { path = "../measure", version = "=1.14.18" } solana-metrics = { path = "../metrics", version = "=1.14.18" } solana-sdk = { path = "../sdk", version = "=1.14.18" } solana-vote-program = { path = "../programs/vote", version = "=1.14.18" } -spl-associated-token-account = { version = "=1.1.2", features = ["no-entrypoint"] } +spl-associated-token-account = { version = "=1.1.3", features = ["no-entrypoint"] } spl-memo = { version = "=3.0.1", features = ["no-entrypoint"] } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } -spl-token-2022 = { version = "=0.6.0", features = ["no-entrypoint"] } +spl-token-2022 = { version = "=0.6.1", features = ["no-entrypoint"] } thiserror = "1.0" [package.metadata.docs.rs] diff --git a/zk-token-sdk/src/instruction/close_account.rs b/zk-token-sdk/src/instruction/close_account.rs index 5874266f423257..c745e400e3d9c8 100644 --- a/zk-token-sdk/src/instruction/close_account.rs +++ b/zk-token-sdk/src/instruction/close_account.rs @@ -1,19 +1,21 @@ -use { - crate::zk_token_elgamal::pod, - bytemuck::{Pod, Zeroable}, -}; #[cfg(not(target_os = "solana"))] use { crate::{ encryption::elgamal::{ElGamalCiphertext, ElGamalKeypair, ElGamalPubkey}, errors::ProofError, - instruction::Verifiable, sigma_proofs::zero_balance_proof::ZeroBalanceProof, transcript::TranscriptProtocol, }, merlin::Transcript, std::convert::TryInto, }; +use { + crate::{ + instruction::{ProofType, ZkProofData}, + zk_token_elgamal::pod, + }, + bytemuck::{Pod, Zeroable}, +}; /// This struct includes the cryptographic proof *and* the account data information needed to verify /// the proof @@ -25,14 +27,21 @@ use { #[derive(Clone, Copy, Pod, Zeroable)] #[repr(C)] pub struct CloseAccountData { + /// The context data for the close account proof + pub context: CloseAccountProofContext, + + /// Proof that the source account available balance is zero + pub proof: CloseAccountProof, // 96 bytes +} + +#[derive(Clone, Copy, Pod, Zeroable)] +#[repr(C)] +pub struct CloseAccountProofContext { /// The source account ElGamal pubkey pub pubkey: pod::ElGamalPubkey, // 32 bytes /// The source account available balance in encrypted form pub ciphertext: pod::ElGamalCiphertext, // 64 bytes - - /// Proof that the source account available balance is zero - pub proof: CloseAccountProof, // 96 bytes } #[cfg(not(target_os = "solana"))] @@ -44,25 +53,32 @@ impl CloseAccountData { let pod_pubkey = pod::ElGamalPubkey((&keypair.public).to_bytes()); let pod_ciphertext = pod::ElGamalCiphertext(ciphertext.to_bytes()); - let mut transcript = CloseAccountProof::transcript_new(&pod_pubkey, &pod_ciphertext); + let context = CloseAccountProofContext { + pubkey: pod_pubkey, + ciphertext: pod_ciphertext, + }; + let mut transcript = CloseAccountProof::transcript_new(&pod_pubkey, &pod_ciphertext); let proof = CloseAccountProof::new(keypair, ciphertext, &mut transcript); - Ok(CloseAccountData { - pubkey: pod_pubkey, - ciphertext: pod_ciphertext, - proof, - }) + Ok(CloseAccountData { context, proof }) } } -#[cfg(not(target_os = "solana"))] -impl Verifiable for CloseAccountData { - fn verify(&self) -> Result<(), ProofError> { - let mut transcript = CloseAccountProof::transcript_new(&self.pubkey, &self.ciphertext); +impl ZkProofData for CloseAccountData { + const PROOF_TYPE: ProofType = ProofType::CloseAccount; + + fn context_data(&self) -> &CloseAccountProofContext { + &self.context + } + + #[cfg(not(target_os = "solana"))] + fn verify_proof(&self) -> Result<(), ProofError> { + let mut transcript = + CloseAccountProof::transcript_new(&self.context.pubkey, &self.context.ciphertext); - let pubkey = self.pubkey.try_into()?; - let ciphertext = self.ciphertext.try_into()?; + let pubkey = self.context.pubkey.try_into()?; + let ciphertext = self.context.ciphertext.try_into()?; self.proof.verify(&pubkey, &ciphertext, &mut transcript) } } @@ -127,11 +143,11 @@ mod test { // general case: encryption of 0 let ciphertext = keypair.public.encrypt(0_u64); let close_account_data = CloseAccountData::new(&keypair, &ciphertext).unwrap(); - assert!(close_account_data.verify().is_ok()); + assert!(close_account_data.verify_proof().is_ok()); // general case: encryption of > 0 let ciphertext = keypair.public.encrypt(1_u64); let close_account_data = CloseAccountData::new(&keypair, &ciphertext).unwrap(); - assert!(close_account_data.verify().is_err()); + assert!(close_account_data.verify_proof().is_err()); } } diff --git a/zk-token-sdk/src/instruction/mod.rs b/zk-token-sdk/src/instruction/mod.rs index 3d5e44a5e01ee9..f257ee961a1a4e 100644 --- a/zk-token-sdk/src/instruction/mod.rs +++ b/zk-token-sdk/src/instruction/mod.rs @@ -5,6 +5,7 @@ pub mod transfer_with_fee; pub mod withdraw; pub mod withdraw_withheld; +use num_derive::{FromPrimitive, ToPrimitive}; #[cfg(not(target_os = "solana"))] use { crate::{ @@ -17,14 +18,35 @@ use { curve25519_dalek::scalar::Scalar, }; pub use { - close_account::CloseAccountData, pubkey_validity::PubkeyValidityData, transfer::TransferData, - transfer_with_fee::TransferWithFeeData, withdraw::WithdrawData, - withdraw_withheld::WithdrawWithheldTokensData, + bytemuck::Pod, + close_account::{CloseAccountData, CloseAccountProofContext}, + pubkey_validity::{PubkeyValidityData, PubkeyValidityProofContext}, + transfer::{TransferData, TransferProofContext}, + transfer_with_fee::{FeeParameters, TransferWithFeeData, TransferWithFeeProofContext}, + withdraw::{WithdrawData, WithdrawProofContext}, + withdraw_withheld::{WithdrawWithheldTokensData, WithdrawWithheldTokensProofContext}, }; -#[cfg(not(target_os = "solana"))] -pub trait Verifiable { - fn verify(&self) -> Result<(), ProofError>; +#[derive(Clone, Copy, Debug, FromPrimitive, ToPrimitive, PartialEq, Eq)] +#[repr(u8)] +pub enum ProofType { + /// Empty proof type used to distinguish if a proof context account is initialized + Uninitialized, + CloseAccount, + Withdraw, + WithdrawWithheldTokens, + Transfer, + TransferWithFee, + PubkeyValidity, +} + +pub trait ZkProofData { + const PROOF_TYPE: ProofType; + + fn context_data(&self) -> &T; + + #[cfg(not(target_os = "solana"))] + fn verify_proof(&self) -> Result<(), ProofError>; } #[cfg(not(target_os = "solana"))] diff --git a/zk-token-sdk/src/instruction/pubkey_validity.rs b/zk-token-sdk/src/instruction/pubkey_validity.rs index 3fc5a6288fb446..83f0461a1733f3 100644 --- a/zk-token-sdk/src/instruction/pubkey_validity.rs +++ b/zk-token-sdk/src/instruction/pubkey_validity.rs @@ -1,19 +1,21 @@ -use { - crate::zk_token_elgamal::pod, - bytemuck::{Pod, Zeroable}, -}; #[cfg(not(target_os = "solana"))] use { crate::{ encryption::elgamal::{ElGamalKeypair, ElGamalPubkey}, errors::ProofError, - instruction::Verifiable, sigma_proofs::pubkey_proof::PubkeySigmaProof, transcript::TranscriptProtocol, }, merlin::Transcript, std::convert::TryInto, }; +use { + crate::{ + instruction::{ProofType, ZkProofData}, + zk_token_elgamal::pod, + }, + bytemuck::{Pod, Zeroable}, +}; /// This struct includes the cryptographic proof *and* the account data information needed to /// verify the proof @@ -24,34 +26,45 @@ use { #[derive(Clone, Copy, Pod, Zeroable)] #[repr(C)] pub struct PubkeyValidityData { - /// The public key to be proved - pub pubkey: pod::ElGamalPubkey, + /// The context data for the public key validity proof + pub context: PubkeyValidityProofContext, /// Proof that the public key is well-formed pub proof: PubkeyValidityProof, // 64 bytes } +#[derive(Clone, Copy, Pod, Zeroable)] +#[repr(C)] +pub struct PubkeyValidityProofContext { + /// The public key to be proved + pub pubkey: pod::ElGamalPubkey, // 32 bytes +} + #[cfg(not(target_os = "solana"))] impl PubkeyValidityData { pub fn new(keypair: &ElGamalKeypair) -> Result { let pod_pubkey = pod::ElGamalPubkey(keypair.public.to_bytes()); - let mut transcript = PubkeyValidityProof::transcript_new(&pod_pubkey); + let context = PubkeyValidityProofContext { pubkey: pod_pubkey }; + let mut transcript = PubkeyValidityProof::transcript_new(&pod_pubkey); let proof = PubkeyValidityProof::new(keypair, &mut transcript); - Ok(PubkeyValidityData { - pubkey: pod_pubkey, - proof, - }) + Ok(PubkeyValidityData { context, proof }) } } -#[cfg(not(target_os = "solana"))] -impl Verifiable for PubkeyValidityData { - fn verify(&self) -> Result<(), ProofError> { - let mut transcript = PubkeyValidityProof::transcript_new(&self.pubkey); - let pubkey = self.pubkey.try_into()?; +impl ZkProofData for PubkeyValidityData { + const PROOF_TYPE: ProofType = ProofType::PubkeyValidity; + + fn context_data(&self) -> &PubkeyValidityProofContext { + &self.context + } + + #[cfg(not(target_os = "solana"))] + fn verify_proof(&self) -> Result<(), ProofError> { + let mut transcript = PubkeyValidityProof::transcript_new(&self.context.pubkey); + let pubkey = self.context.pubkey.try_into()?; self.proof.verify(&pubkey, &mut transcript) } } @@ -100,6 +113,6 @@ mod test { let keypair = ElGamalKeypair::new_rand(); let pubkey_validity_data = PubkeyValidityData::new(&keypair).unwrap(); - assert!(pubkey_validity_data.verify().is_ok()); + assert!(pubkey_validity_data.verify_proof().is_ok()); } } diff --git a/zk-token-sdk/src/instruction/transfer.rs b/zk-token-sdk/src/instruction/transfer.rs index bb55ed9d37d592..4ee12ee5fb21fe 100644 --- a/zk-token-sdk/src/instruction/transfer.rs +++ b/zk-token-sdk/src/instruction/transfer.rs @@ -1,7 +1,3 @@ -use { - crate::zk_token_elgamal::pod, - bytemuck::{Pod, Zeroable}, -}; #[cfg(not(target_os = "solana"))] use { crate::{ @@ -12,7 +8,7 @@ use { pedersen::{Pedersen, PedersenCommitment, PedersenOpening}, }, errors::ProofError, - instruction::{combine_lo_hi_ciphertexts, split_u64, Role, Verifiable}, + instruction::{combine_lo_hi_ciphertexts, split_u64, Role}, range_proof::RangeProof, sigma_proofs::{ equality_proof::CtxtCommEqualityProof, validity_proof::AggregatedValidityProof, @@ -23,6 +19,13 @@ use { merlin::Transcript, std::convert::TryInto, }; +use { + crate::{ + instruction::{ProofType, ZkProofData}, + zk_token_elgamal::pod, + }, + bytemuck::{Pod, Zeroable}, +}; #[cfg(not(target_os = "solana"))] const TRANSFER_SOURCE_AMOUNT_BITS: usize = 64; @@ -42,20 +45,27 @@ lazy_static::lazy_static! { #[derive(Clone, Copy, Pod, Zeroable)] #[repr(C)] pub struct TransferData { - /// Group encryption of the low 32 bits of the transfer amount - pub ciphertext_lo: pod::TransferAmountEncryption, + /// The context data for the transfer proof + pub context: TransferProofContext, - /// Group encryption of the high 32 bits of the transfer amount - pub ciphertext_hi: pod::TransferAmountEncryption, + /// Zero-knowledge proofs for Transfer + pub proof: TransferProof, +} + +#[derive(Clone, Copy, Pod, Zeroable)] +#[repr(C)] +pub struct TransferProofContext { + /// Group encryption of the low 16 bits of the transfer amount + pub ciphertext_lo: pod::TransferAmountEncryption, // 128 bytes + + /// Group encryption of the high 48 bits of the transfer amount + pub ciphertext_hi: pod::TransferAmountEncryption, // 128 bytes /// The public encryption keys associated with the transfer: source, dest, and auditor - pub transfer_pubkeys: pod::TransferPubkeys, + pub transfer_pubkeys: pod::TransferPubkeys, // 96 bytes /// The final spendable ciphertext after the transfer - pub new_source_ciphertext: pod::ElGamalCiphertext, - - /// Zero-knowledge proofs for Transfer - pub proof: TransferProof, + pub new_source_ciphertext: pod::ElGamalCiphertext, // 64 bytes } #[cfg(not(target_os = "solana"))] @@ -116,6 +126,13 @@ impl TransferData { let pod_ciphertext_hi: pod::TransferAmountEncryption = ciphertext_hi.into(); let pod_new_source_ciphertext: pod::ElGamalCiphertext = new_source_ciphertext.into(); + let context = TransferProofContext { + ciphertext_lo: pod_ciphertext_lo, + ciphertext_hi: pod_ciphertext_hi, + transfer_pubkeys: pod_transfer_pubkeys, + new_source_ciphertext: pod_new_source_ciphertext, + }; + let mut transcript = TransferProof::transcript_new( &pod_transfer_pubkeys, &pod_ciphertext_lo, @@ -133,18 +150,12 @@ impl TransferData { &mut transcript, ); - Ok(Self { - ciphertext_lo: pod_ciphertext_lo, - ciphertext_hi: pod_ciphertext_hi, - transfer_pubkeys: pod_transfer_pubkeys, - new_source_ciphertext: pod_new_source_ciphertext, - proof, - }) + Ok(Self { context, proof }) } /// Extracts the lo ciphertexts associated with a transfer data fn ciphertext_lo(&self, role: Role) -> Result { - let ciphertext_lo: TransferAmountEncryption = self.ciphertext_lo.try_into()?; + let ciphertext_lo: TransferAmountEncryption = self.context.ciphertext_lo.try_into()?; let handle_lo = match role { Role::Source => Some(ciphertext_lo.source_handle), @@ -165,7 +176,7 @@ impl TransferData { /// Extracts the lo ciphertexts associated with a transfer data fn ciphertext_hi(&self, role: Role) -> Result { - let ciphertext_hi: TransferAmountEncryption = self.ciphertext_hi.try_into()?; + let ciphertext_hi: TransferAmountEncryption = self.context.ciphertext_hi.try_into()?; let handle_hi = match role { Role::Source => Some(ciphertext_hi.source_handle), @@ -201,21 +212,27 @@ impl TransferData { } } -#[cfg(not(target_os = "solana"))] -impl Verifiable for TransferData { - fn verify(&self) -> Result<(), ProofError> { +impl ZkProofData for TransferData { + const PROOF_TYPE: ProofType = ProofType::Transfer; + + fn context_data(&self) -> &TransferProofContext { + &self.context + } + + #[cfg(not(target_os = "solana"))] + fn verify_proof(&self) -> Result<(), ProofError> { // generate transcript and append all public inputs let mut transcript = TransferProof::transcript_new( - &self.transfer_pubkeys, - &self.ciphertext_lo, - &self.ciphertext_hi, - &self.new_source_ciphertext, + &self.context.transfer_pubkeys, + &self.context.ciphertext_lo, + &self.context.ciphertext_hi, + &self.context.new_source_ciphertext, ); - let ciphertext_lo = self.ciphertext_lo.try_into()?; - let ciphertext_hi = self.ciphertext_hi.try_into()?; - let transfer_pubkeys = self.transfer_pubkeys.try_into()?; - let new_spendable_ciphertext = self.new_source_ciphertext.try_into()?; + let ciphertext_lo = self.context.ciphertext_lo.try_into()?; + let ciphertext_hi = self.context.ciphertext_hi.try_into()?; + let transfer_pubkeys = self.context.transfer_pubkeys.try_into()?; + let new_spendable_ciphertext = self.context.new_source_ciphertext.try_into()?; self.proof.verify( &ciphertext_lo, @@ -541,7 +558,7 @@ mod test { ) .unwrap(); - assert!(transfer_data.verify().is_ok()); + assert!(transfer_data.verify_proof().is_ok()); // Case 2: transfer max amount @@ -562,7 +579,7 @@ mod test { ) .unwrap(); - assert!(transfer_data.verify().is_ok()); + assert!(transfer_data.verify_proof().is_ok()); // Case 3: general success case @@ -582,7 +599,7 @@ mod test { ) .unwrap(); - assert!(transfer_data.verify().is_ok()); + assert!(transfer_data.verify_proof().is_ok()); // Case 4: invalid destination or auditor pubkey let spendable_balance: u64 = 0; @@ -602,7 +619,7 @@ mod test { ) .unwrap(); - assert!(transfer_data.verify().is_err()); + assert!(transfer_data.verify_proof().is_err()); // auditor pubkey invalid let dest_pk = ElGamalKeypair::new_rand().public; @@ -616,7 +633,7 @@ mod test { ) .unwrap(); - assert!(transfer_data.verify().is_err()); + assert!(transfer_data.verify_proof().is_err()); } #[test] diff --git a/zk-token-sdk/src/instruction/transfer_with_fee.rs b/zk-token-sdk/src/instruction/transfer_with_fee.rs index 7fbb603e2ec333..a6bdee776b54aa 100644 --- a/zk-token-sdk/src/instruction/transfer_with_fee.rs +++ b/zk-token-sdk/src/instruction/transfer_with_fee.rs @@ -1,7 +1,3 @@ -use { - crate::zk_token_elgamal::pod, - bytemuck::{Pod, Zeroable}, -}; #[cfg(not(target_os = "solana"))] use { crate::{ @@ -14,7 +10,7 @@ use { errors::ProofError, instruction::{ combine_lo_hi_ciphertexts, combine_lo_hi_commitments, combine_lo_hi_openings, - combine_lo_hi_u64, split_u64, transfer::TransferAmountEncryption, Role, Verifiable, + combine_lo_hi_u64, split_u64, transfer::TransferAmountEncryption, Role, }, range_proof::RangeProof, sigma_proofs::{ @@ -29,6 +25,13 @@ use { std::convert::TryInto, subtle::{ConditionallySelectable, ConstantTimeGreater}, }; +use { + crate::{ + instruction::{ProofType, ZkProofData}, + zk_token_elgamal::pod, + }, + bytemuck::{Pod, Zeroable}, +}; #[cfg(not(target_os = "solana"))] const MAX_FEE_BASIS_POINTS: u64 = 10_000; @@ -61,29 +64,36 @@ lazy_static::lazy_static! { #[derive(Clone, Copy, Pod, Zeroable)] #[repr(C)] pub struct TransferWithFeeData { + /// The context data for the transfer with fee proof + pub context: TransferWithFeeProofContext, + + // transfer fee proof + pub proof: TransferWithFeeProof, +} + +#[derive(Clone, Copy, Pod, Zeroable)] +#[repr(C)] +pub struct TransferWithFeeProofContext { /// Group encryption of the low 16 bites of the transfer amount - pub ciphertext_lo: pod::TransferAmountEncryption, + pub ciphertext_lo: pod::TransferAmountEncryption, // 128 bytes /// Group encryption of the high 48 bits of the transfer amount - pub ciphertext_hi: pod::TransferAmountEncryption, + pub ciphertext_hi: pod::TransferAmountEncryption, // 128 bytes /// The public encryption keys associated with the transfer: source, dest, and auditor - pub transfer_with_fee_pubkeys: pod::TransferWithFeePubkeys, + pub transfer_with_fee_pubkeys: pod::TransferWithFeePubkeys, // 128 bytes /// The final spendable ciphertext after the transfer, - pub new_source_ciphertext: pod::ElGamalCiphertext, + pub new_source_ciphertext: pod::ElGamalCiphertext, // 64 bytes // transfer fee encryption of the low 16 bits of the transfer fee amount - pub fee_ciphertext_lo: pod::FeeEncryption, + pub fee_ciphertext_lo: pod::FeeEncryption, // 96 bytes // transfer fee encryption of the hi 32 bits of the transfer fee amount - pub fee_ciphertext_hi: pod::FeeEncryption, + pub fee_ciphertext_hi: pod::FeeEncryption, // 96 bytes // fee parameters - pub fee_parameters: pod::FeeParameters, - - // transfer fee proof - pub proof: TransferWithFeeProof, + pub fee_parameters: pod::FeeParameters, // 10 bytes } #[cfg(not(target_os = "solana"))] @@ -173,6 +183,16 @@ impl TransferWithFeeData { let pod_fee_ciphertext_lo: pod::FeeEncryption = fee_ciphertext_lo.to_pod(); let pod_fee_ciphertext_hi: pod::FeeEncryption = fee_ciphertext_hi.to_pod(); + let context = TransferWithFeeProofContext { + ciphertext_lo: pod_ciphertext_lo, + ciphertext_hi: pod_ciphertext_hi, + transfer_with_fee_pubkeys: pod_transfer_with_fee_pubkeys, + new_source_ciphertext: pod_new_source_ciphertext, + fee_ciphertext_lo: pod_fee_ciphertext_lo, + fee_ciphertext_hi: pod_fee_ciphertext_hi, + fee_parameters: fee_parameters.into(), + }; + let mut transcript = TransferWithFeeProof::transcript_new( &pod_transfer_with_fee_pubkeys, &pod_ciphertext_lo, @@ -196,21 +216,12 @@ impl TransferWithFeeData { &mut transcript, ); - Ok(Self { - ciphertext_lo: pod_ciphertext_lo, - ciphertext_hi: pod_ciphertext_hi, - transfer_with_fee_pubkeys: pod_transfer_with_fee_pubkeys, - new_source_ciphertext: pod_new_source_ciphertext, - fee_ciphertext_lo: pod_fee_ciphertext_lo, - fee_ciphertext_hi: pod_fee_ciphertext_hi, - fee_parameters: fee_parameters.into(), - proof, - }) + Ok(Self { context, proof }) } /// Extracts the lo ciphertexts associated with a transfer-with-fee data fn ciphertext_lo(&self, role: Role) -> Result { - let ciphertext_lo: TransferAmountEncryption = self.ciphertext_lo.try_into()?; + let ciphertext_lo: TransferAmountEncryption = self.context.ciphertext_lo.try_into()?; let handle_lo = match role { Role::Source => Some(ciphertext_lo.source_handle), @@ -231,7 +242,7 @@ impl TransferWithFeeData { /// Extracts the lo ciphertexts associated with a transfer-with-fee data fn ciphertext_hi(&self, role: Role) -> Result { - let ciphertext_hi: TransferAmountEncryption = self.ciphertext_hi.try_into()?; + let ciphertext_hi: TransferAmountEncryption = self.context.ciphertext_hi.try_into()?; let handle_hi = match role { Role::Source => Some(ciphertext_hi.source_handle), @@ -252,7 +263,7 @@ impl TransferWithFeeData { /// Extracts the lo fee ciphertexts associated with a transfer_with_fee data fn fee_ciphertext_lo(&self, role: Role) -> Result { - let fee_ciphertext_lo: FeeEncryption = self.fee_ciphertext_lo.try_into()?; + let fee_ciphertext_lo: FeeEncryption = self.context.fee_ciphertext_lo.try_into()?; let fee_handle_lo = match role { Role::Source => None, @@ -275,7 +286,7 @@ impl TransferWithFeeData { /// Extracts the hi fee ciphertexts associated with a transfer_with_fee data fn fee_ciphertext_hi(&self, role: Role) -> Result { - let fee_ciphertext_hi: FeeEncryption = self.fee_ciphertext_hi.try_into()?; + let fee_ciphertext_hi: FeeEncryption = self.context.fee_ciphertext_hi.try_into()?; let fee_handle_hi = match role { Role::Source => None, @@ -329,26 +340,32 @@ impl TransferWithFeeData { } } -#[cfg(not(target_os = "solana"))] -impl Verifiable for TransferWithFeeData { - fn verify(&self) -> Result<(), ProofError> { +impl ZkProofData for TransferWithFeeData { + const PROOF_TYPE: ProofType = ProofType::TransferWithFee; + + fn context_data(&self) -> &TransferWithFeeProofContext { + &self.context + } + + #[cfg(not(target_os = "solana"))] + fn verify_proof(&self) -> Result<(), ProofError> { let mut transcript = TransferWithFeeProof::transcript_new( - &self.transfer_with_fee_pubkeys, - &self.ciphertext_lo, - &self.ciphertext_hi, - &self.new_source_ciphertext, - &self.fee_ciphertext_lo, - &self.fee_ciphertext_hi, + &self.context.transfer_with_fee_pubkeys, + &self.context.ciphertext_lo, + &self.context.ciphertext_hi, + &self.context.new_source_ciphertext, + &self.context.fee_ciphertext_lo, + &self.context.fee_ciphertext_hi, ); - let ciphertext_lo = self.ciphertext_lo.try_into()?; - let ciphertext_hi = self.ciphertext_hi.try_into()?; - let pubkeys_transfer_with_fee = self.transfer_with_fee_pubkeys.try_into()?; - let new_source_ciphertext = self.new_source_ciphertext.try_into()?; + let ciphertext_lo = self.context.ciphertext_lo.try_into()?; + let ciphertext_hi = self.context.ciphertext_hi.try_into()?; + let pubkeys_transfer_with_fee = self.context.transfer_with_fee_pubkeys.try_into()?; + let new_source_ciphertext = self.context.new_source_ciphertext.try_into()?; - let fee_ciphertext_lo = self.fee_ciphertext_lo.try_into()?; - let fee_ciphertext_hi = self.fee_ciphertext_hi.try_into()?; - let fee_parameters = self.fee_parameters.into(); + let fee_ciphertext_lo = self.context.fee_ciphertext_lo.try_into()?; + let fee_ciphertext_hi = self.context.fee_ciphertext_hi.try_into()?; + let fee_parameters = self.context.fee_parameters.into(); self.proof.verify( &ciphertext_lo, @@ -886,7 +903,7 @@ mod test { ) .unwrap(); - assert!(fee_data.verify().is_ok()); + assert!(fee_data.verify_proof().is_ok()); // Case 2: transfer max amount let spendable_balance: u64 = u64::max_value(); @@ -910,7 +927,7 @@ mod test { ) .unwrap(); - assert!(fee_data.verify().is_ok()); + assert!(fee_data.verify_proof().is_ok()); // Case 3: general success case let spendable_balance: u64 = 120; @@ -933,7 +950,7 @@ mod test { ) .unwrap(); - assert!(fee_data.verify().is_ok()); + assert!(fee_data.verify_proof().is_ok()); // Case 4: invalid destination, auditor, or withdraw authority pubkeys let spendable_balance: u64 = 120; @@ -961,7 +978,7 @@ mod test { ) .unwrap(); - assert!(fee_data.verify().is_err()); + assert!(fee_data.verify_proof().is_err()); // auditor pubkey invalid let destination_pubkey: ElGamalPubkey = ElGamalKeypair::new_rand().public; @@ -978,7 +995,7 @@ mod test { ) .unwrap(); - assert!(fee_data.verify().is_err()); + assert!(fee_data.verify_proof().is_err()); // withdraw authority invalid let destination_pubkey: ElGamalPubkey = ElGamalKeypair::new_rand().public; @@ -995,6 +1012,6 @@ mod test { ) .unwrap(); - assert!(fee_data.verify().is_err()); + assert!(fee_data.verify_proof().is_err()); } } diff --git a/zk-token-sdk/src/instruction/withdraw.rs b/zk-token-sdk/src/instruction/withdraw.rs index 5b84fe840bc616..340ea94c96d619 100644 --- a/zk-token-sdk/src/instruction/withdraw.rs +++ b/zk-token-sdk/src/instruction/withdraw.rs @@ -1,7 +1,3 @@ -use { - crate::zk_token_elgamal::pod, - bytemuck::{Pod, Zeroable}, -}; #[cfg(not(target_os = "solana"))] use { crate::{ @@ -10,7 +6,6 @@ use { pedersen::{Pedersen, PedersenCommitment}, }, errors::ProofError, - instruction::Verifiable, range_proof::RangeProof, sigma_proofs::equality_proof::CtxtCommEqualityProof, transcript::TranscriptProtocol, @@ -18,6 +13,13 @@ use { merlin::Transcript, std::convert::TryInto, }; +use { + crate::{ + instruction::{ProofType, ZkProofData}, + zk_token_elgamal::pod, + }, + bytemuck::{Pod, Zeroable}, +}; #[cfg(not(target_os = "solana"))] const WITHDRAW_AMOUNT_BIT_LENGTH: usize = 64; @@ -32,15 +34,22 @@ const WITHDRAW_AMOUNT_BIT_LENGTH: usize = 64; #[derive(Clone, Copy, Pod, Zeroable)] #[repr(C)] pub struct WithdrawData { + /// The context data for the withdraw proof + pub context: WithdrawProofContext, // 128 bytes + + /// Range proof + pub proof: WithdrawProof, // 736 bytes +} + +#[derive(Clone, Copy, Pod, Zeroable)] +#[repr(C)] +pub struct WithdrawProofContext { /// The source account ElGamal pubkey pub pubkey: pod::ElGamalPubkey, // 32 bytes /// The source account available balance *after* the withdraw (encrypted by /// `source_pk` pub final_ciphertext: pod::ElGamalCiphertext, // 64 bytes - - /// Range proof - pub proof: WithdrawProof, // 736 bytes } #[cfg(not(target_os = "solana"))] @@ -64,24 +73,33 @@ impl WithdrawData { let pod_pubkey = pod::ElGamalPubkey((&keypair.public).to_bytes()); let pod_final_ciphertext: pod::ElGamalCiphertext = final_ciphertext.into(); - let mut transcript = WithdrawProof::transcript_new(&pod_pubkey, &pod_final_ciphertext); - let proof = WithdrawProof::new(keypair, final_balance, &final_ciphertext, &mut transcript); - Ok(Self { + let context = WithdrawProofContext { pubkey: pod_pubkey, final_ciphertext: pod_final_ciphertext, - proof, - }) + }; + + let mut transcript = WithdrawProof::transcript_new(&pod_pubkey, &pod_final_ciphertext); + let proof = WithdrawProof::new(keypair, final_balance, &final_ciphertext, &mut transcript); + + Ok(Self { context, proof }) } } -#[cfg(not(target_os = "solana"))] -impl Verifiable for WithdrawData { - fn verify(&self) -> Result<(), ProofError> { - let mut transcript = WithdrawProof::transcript_new(&self.pubkey, &self.final_ciphertext); +impl ZkProofData for WithdrawData { + const PROOF_TYPE: ProofType = ProofType::Withdraw; + + fn context_data(&self) -> &WithdrawProofContext { + &self.context + } + + #[cfg(not(target_os = "solana"))] + fn verify_proof(&self) -> Result<(), ProofError> { + let mut transcript = + WithdrawProof::transcript_new(&self.context.pubkey, &self.context.final_ciphertext); - let elgamal_pubkey = self.pubkey.try_into()?; - let final_balance_ciphertext = self.final_ciphertext.try_into()?; + let elgamal_pubkey = self.context.pubkey.try_into()?; + let final_balance_ciphertext = self.context.final_ciphertext.try_into()?; self.proof .verify(&elgamal_pubkey, &final_balance_ciphertext, &mut transcript) } @@ -200,7 +218,7 @@ mod test { ¤t_ciphertext, ) .unwrap(); - assert!(data.verify().is_ok()); + assert!(data.verify_proof().is_ok()); // generate and verify proof with wrong balance let wrong_balance: u64 = 99; @@ -211,6 +229,6 @@ mod test { ¤t_ciphertext, ) .unwrap(); - assert!(data.verify().is_err()); + assert!(data.verify_proof().is_err()); } } diff --git a/zk-token-sdk/src/instruction/withdraw_withheld.rs b/zk-token-sdk/src/instruction/withdraw_withheld.rs index e0e5363b4a0792..58049031e1fd3e 100644 --- a/zk-token-sdk/src/instruction/withdraw_withheld.rs +++ b/zk-token-sdk/src/instruction/withdraw_withheld.rs @@ -1,7 +1,3 @@ -use { - crate::zk_token_elgamal::pod, - bytemuck::{Pod, Zeroable}, -}; #[cfg(not(target_os = "solana"))] use { crate::{ @@ -10,13 +6,19 @@ use { pedersen::PedersenOpening, }, errors::ProofError, - instruction::Verifiable, sigma_proofs::equality_proof::CtxtCtxtEqualityProof, transcript::TranscriptProtocol, }, merlin::Transcript, std::convert::TryInto, }; +use { + crate::{ + instruction::{ProofType, ZkProofData}, + zk_token_elgamal::pod, + }, + bytemuck::{Pod, Zeroable}, +}; /// This struct includes the cryptographic proof *and* the account data information needed to verify /// the proof @@ -28,15 +30,21 @@ use { #[derive(Clone, Copy, Pod, Zeroable)] #[repr(C)] pub struct WithdrawWithheldTokensData { - pub withdraw_withheld_authority_pubkey: pod::ElGamalPubkey, + pub context: WithdrawWithheldTokensProofContext, - pub destination_pubkey: pod::ElGamalPubkey, + pub proof: WithdrawWithheldTokensProof, +} - pub withdraw_withheld_authority_ciphertext: pod::ElGamalCiphertext, +#[derive(Clone, Copy, Pod, Zeroable)] +#[repr(C)] +pub struct WithdrawWithheldTokensProofContext { + pub withdraw_withheld_authority_pubkey: pod::ElGamalPubkey, // 32 bytes - pub destination_ciphertext: pod::ElGamalCiphertext, + pub destination_pubkey: pod::ElGamalPubkey, // 32 bytes - pub proof: WithdrawWithheldTokensProof, + pub withdraw_withheld_authority_ciphertext: pod::ElGamalCiphertext, // 64 bytes + + pub destination_ciphertext: pod::ElGamalCiphertext, // 64 bytes } #[cfg(not(target_os = "solana"))] @@ -58,6 +66,13 @@ impl WithdrawWithheldTokensData { pod::ElGamalCiphertext(withdraw_withheld_authority_ciphertext.to_bytes()); let pod_destination_ciphertext = pod::ElGamalCiphertext(destination_ciphertext.to_bytes()); + let context = WithdrawWithheldTokensProofContext { + withdraw_withheld_authority_pubkey: pod_withdraw_withheld_authority_pubkey, + destination_pubkey: pod_destination_pubkey, + withdraw_withheld_authority_ciphertext: pod_withdraw_withheld_authority_ciphertext, + destination_ciphertext: pod_destination_ciphertext, + }; + let mut transcript = WithdrawWithheldTokensProof::transcript_new( &pod_withdraw_withheld_authority_pubkey, &pod_destination_pubkey, @@ -74,32 +89,34 @@ impl WithdrawWithheldTokensData { &mut transcript, ); - Ok(Self { - withdraw_withheld_authority_pubkey: pod_withdraw_withheld_authority_pubkey, - destination_pubkey: pod_destination_pubkey, - withdraw_withheld_authority_ciphertext: pod_withdraw_withheld_authority_ciphertext, - destination_ciphertext: pod_destination_ciphertext, - proof, - }) + Ok(Self { context, proof }) } } -#[cfg(not(target_os = "solana"))] -impl Verifiable for WithdrawWithheldTokensData { - fn verify(&self) -> Result<(), ProofError> { +impl ZkProofData for WithdrawWithheldTokensData { + const PROOF_TYPE: ProofType = ProofType::WithdrawWithheldTokens; + + fn context_data(&self) -> &WithdrawWithheldTokensProofContext { + &self.context + } + + #[cfg(not(target_os = "solana"))] + fn verify_proof(&self) -> Result<(), ProofError> { let mut transcript = WithdrawWithheldTokensProof::transcript_new( - &self.withdraw_withheld_authority_pubkey, - &self.destination_pubkey, - &self.withdraw_withheld_authority_ciphertext, - &self.destination_ciphertext, + &self.context.withdraw_withheld_authority_pubkey, + &self.context.destination_pubkey, + &self.context.withdraw_withheld_authority_ciphertext, + &self.context.destination_ciphertext, ); let withdraw_withheld_authority_pubkey = - self.withdraw_withheld_authority_pubkey.try_into()?; - let destination_pubkey = self.destination_pubkey.try_into()?; - let withdraw_withheld_authority_ciphertext = - self.withdraw_withheld_authority_ciphertext.try_into()?; - let destination_ciphertext = self.destination_ciphertext.try_into()?; + self.context.withdraw_withheld_authority_pubkey.try_into()?; + let destination_pubkey = self.context.destination_pubkey.try_into()?; + let withdraw_withheld_authority_ciphertext = self + .context + .withdraw_withheld_authority_ciphertext + .try_into()?; + let destination_ciphertext = self.context.destination_ciphertext.try_into()?; self.proof.verify( &withdraw_withheld_authority_pubkey, @@ -210,7 +227,7 @@ mod test { ) .unwrap(); - assert!(withdraw_withheld_tokens_data.verify().is_ok()); + assert!(withdraw_withheld_tokens_data.verify_proof().is_ok()); let amount: u64 = 55; let withdraw_withheld_authority_ciphertext = @@ -224,7 +241,7 @@ mod test { ) .unwrap(); - assert!(withdraw_withheld_tokens_data.verify().is_ok()); + assert!(withdraw_withheld_tokens_data.verify_proof().is_ok()); let amount = u64::max_value(); let withdraw_withheld_authority_ciphertext = @@ -238,6 +255,6 @@ mod test { ) .unwrap(); - assert!(withdraw_withheld_tokens_data.verify().is_ok()); + assert!(withdraw_withheld_tokens_data.verify_proof().is_ok()); } } diff --git a/zk-token-sdk/src/lib.rs b/zk-token-sdk/src/lib.rs index c7a0391eaab8c8..14ce5b4380af47 100644 --- a/zk-token-sdk/src/lib.rs +++ b/zk-token-sdk/src/lib.rs @@ -37,3 +37,4 @@ pub mod instruction; pub mod zk_token_elgamal; pub mod zk_token_proof_instruction; pub mod zk_token_proof_program; +pub mod zk_token_proof_state; diff --git a/zk-token-sdk/src/zk_token_elgamal/pod.rs b/zk-token-sdk/src/zk_token_elgamal/pod.rs index 2658e3a1446357..fd728bc6a7caab 100644 --- a/zk-token-sdk/src/zk_token_elgamal/pod.rs +++ b/zk-token-sdk/src/zk_token_elgamal/pod.rs @@ -1,5 +1,10 @@ pub use bytemuck::{Pod, Zeroable}; -use std::fmt; +use { + crate::zk_token_proof_instruction::ProofType, + num_traits::{FromPrimitive, ToPrimitive}, + solana_program::instruction::InstructionError, + std::fmt, +}; #[derive(Clone, Copy, Debug, Default, PartialEq, Eq, Pod, Zeroable)] #[repr(transparent)] @@ -29,6 +34,22 @@ impl From for u64 { } } +#[derive(Clone, Copy, Debug, Default, PartialEq, Eq, Pod, Zeroable)] +#[repr(transparent)] +pub struct PodProofType(u8); +impl From for PodProofType { + fn from(proof_type: ProofType) -> Self { + Self(ToPrimitive::to_u8(&proof_type).unwrap()) + } +} +impl TryFrom for ProofType { + type Error = InstructionError; + + fn try_from(pod: PodProofType) -> Result { + FromPrimitive::from_u8(pod.0).ok_or(Self::Error::InvalidAccountData) + } +} + #[derive(Clone, Copy, Pod, Zeroable, PartialEq, Eq)] #[repr(transparent)] pub struct CompressedRistretto(pub [u8; 32]); diff --git a/zk-token-sdk/src/zk_token_proof_instruction.rs b/zk-token-sdk/src/zk_token_proof_instruction.rs index 867e0f783c901a..21d1dae975562d 100644 --- a/zk-token-sdk/src/zk_token_proof_instruction.rs +++ b/zk-token-sdk/src/zk_token_proof_instruction.rs @@ -1,18 +1,41 @@ ///! Instructions provided by the ZkToken Proof program pub use crate::instruction::*; use { - bytemuck::{bytes_of, Pod}, + bytemuck::bytes_of, num_derive::{FromPrimitive, ToPrimitive}, num_traits::{FromPrimitive, ToPrimitive}, - solana_program::instruction::Instruction, + solana_program::{ + instruction::{AccountMeta, Instruction}, + pubkey::Pubkey, + }, }; #[derive(Clone, Copy, Debug, FromPrimitive, ToPrimitive, PartialEq, Eq)] #[repr(u8)] pub enum ProofInstruction { - /// Verify a `CloseAccountData` struct + /// Close a zero-knowledge proof context state. /// /// Accounts expected by this instruction: + /// 0. `[writable]` The proof context account to close + /// 1. `[writable]` The destination account for lamports + /// 2. `[signer]` The context account's owner + /// + /// Data expected by this instruction: + /// None + /// + CloseContextState, + + /// Verify a close account zero-knowledge proof. + /// + /// This instruction can be configured to optionally create a proof context state account. + /// + /// Accounts expected by this instruction: + /// + /// * Creating a proof context account + /// 0. `[writable]` The proof context account + /// 1. `[]` The proof context account owner + /// + /// * Otherwise /// None /// /// Data expected by this instruction: @@ -20,9 +43,17 @@ pub enum ProofInstruction { /// VerifyCloseAccount, - /// Verify a `WithdrawData` struct + /// Verify a withdraw zero-knowledge proof. + /// + /// This instruction can be configured to optionally create a proof context state account. /// /// Accounts expected by this instruction: + /// + /// * Creating a proof context account + /// 0. `[writable]` The proof context account + /// 1. `[]` The proof context account owner + /// + /// * Otherwise /// None /// /// Data expected by this instruction: @@ -30,9 +61,17 @@ pub enum ProofInstruction { /// VerifyWithdraw, - /// Verify a `WithdrawWithheldTokensData` struct + /// Verify a withdraw withheld tokens zero-knowledge proof. + /// + /// This instruction can be configured to optionally create a proof context state account. /// /// Accounts expected by this instruction: + /// + /// * Creating a proof context account + /// 0. `[writable]` The proof context account + /// 1. `[]` The proof context account owner + /// + /// * Otherwise /// None /// /// Data expected by this instruction: @@ -40,9 +79,17 @@ pub enum ProofInstruction { /// VerifyWithdrawWithheldTokens, - /// Verify a `TransferData` struct + /// Verify a transfer zero-knowledge proof. + /// + /// This instruction can be configured to optionally create a proof context state account. /// /// Accounts expected by this instruction: + /// + /// * Creating a proof context account + /// 0. `[writable]` The proof context account + /// 1. `[]` The proof context account owner + /// + /// * Otherwise /// None /// /// Data expected by this instruction: @@ -50,9 +97,17 @@ pub enum ProofInstruction { /// VerifyTransfer, - /// Verify a `TransferWithFeeData` struct + /// Verify a transfer with fee zero-knowledge proof. + /// + /// This instruction can be configured to optionally create a proof context state account. /// /// Accounts expected by this instruction: + /// + /// * Creating a proof context account + /// 0. `[writable]` The proof context account + /// 1. `[]` The proof context account owner + /// + /// * Otherwise /// None /// /// Data expected by this instruction: @@ -60,9 +115,17 @@ pub enum ProofInstruction { /// VerifyTransferWithFee, - /// Verify a `PubkeyValidityData` struct + /// Verify a pubkey validity zero-knowledge proof. + /// + /// This instruction can be configured to optionally create a proof context state account. /// /// Accounts expected by this instruction: + /// + /// * Creating a proof context account + /// 0. `[writable]` The proof context account + /// 1. `[]` The proof context account owner + /// + /// * Otherwise /// None /// /// Data expected by this instruction: @@ -71,50 +134,124 @@ pub enum ProofInstruction { VerifyPubkeyValidity, } -impl ProofInstruction { - pub fn encode(&self, proof: &T) -> Instruction { - let mut data = vec![ToPrimitive::to_u8(self).unwrap()]; - data.extend_from_slice(bytes_of(proof)); - Instruction { - program_id: crate::zk_token_proof_program::id(), - accounts: vec![], - data, - } - } +/// Pubkeys associated with a context state account to be used as parameters to functions. +#[derive(Clone, Copy, Debug, PartialEq)] +pub struct ContextStateInfo<'a> { + pub context_state_account: &'a Pubkey, + pub context_state_authority: &'a Pubkey, +} - pub fn decode_type(input: &[u8]) -> Option { - input.first().and_then(|x| FromPrimitive::from_u8(*x)) - } +/// Create a `CloseContextState` instruction. +pub fn close_context_state( + context_state_info: ContextStateInfo, + destination_account: &Pubkey, +) -> Instruction { + let accounts = vec![ + AccountMeta::new(*context_state_info.context_state_account, false), + AccountMeta::new(*destination_account, false), + AccountMeta::new_readonly(*context_state_info.context_state_authority, true), + ]; - pub fn decode_data(input: &[u8]) -> Option<&T> { - if input.is_empty() { - None - } else { - bytemuck::try_from_bytes(&input[1..]).ok() - } + let data = vec![ToPrimitive::to_u8(&ProofInstruction::CloseContextState).unwrap()]; + + Instruction { + program_id: crate::zk_token_proof_program::id(), + accounts, + data, } } -pub fn verify_close_account(proof_data: &CloseAccountData) -> Instruction { - ProofInstruction::VerifyCloseAccount.encode(proof_data) +/// Create a `VerifyCloseAccount` instruction. +pub fn verify_close_account( + context_state_info: Option, + proof_data: &CloseAccountData, +) -> Instruction { + ProofInstruction::VerifyCloseAccount.encode_verify_proof(context_state_info, proof_data) } -pub fn verify_withdraw(proof_data: &WithdrawData) -> Instruction { - ProofInstruction::VerifyWithdraw.encode(proof_data) +/// Create a `VerifyWithdraw` instruction. +pub fn verify_withdraw( + context_state_info: Option, + proof_data: &WithdrawData, +) -> Instruction { + ProofInstruction::VerifyWithdraw.encode_verify_proof(context_state_info, proof_data) } -pub fn verify_withdraw_withheld_tokens(proof_data: &WithdrawWithheldTokensData) -> Instruction { - ProofInstruction::VerifyWithdrawWithheldTokens.encode(proof_data) +/// Create a `VerifyWithdrawWithheldTokens` instruction. +pub fn verify_withdraw_withheld_tokens( + context_state_info: Option, + proof_data: &WithdrawWithheldTokensData, +) -> Instruction { + ProofInstruction::VerifyWithdrawWithheldTokens + .encode_verify_proof(context_state_info, proof_data) } -pub fn verify_transfer(proof_data: &TransferData) -> Instruction { - ProofInstruction::VerifyTransfer.encode(proof_data) +/// Create a `VerifyTransfer` instruction. +pub fn verify_transfer( + context_state_info: Option, + proof_data: &TransferData, +) -> Instruction { + ProofInstruction::VerifyTransfer.encode_verify_proof(context_state_info, proof_data) } -pub fn verify_transfer_with_fee(proof_data: &TransferWithFeeData) -> Instruction { - ProofInstruction::VerifyTransferWithFee.encode(proof_data) +/// Create a `VerifyTransferWithFee` instruction. +pub fn verify_transfer_with_fee( + context_state_info: Option, + proof_data: &TransferWithFeeData, +) -> Instruction { + ProofInstruction::VerifyTransferWithFee.encode_verify_proof(context_state_info, proof_data) } -pub fn verify_pubkey_validity(proof_data: &PubkeyValidityData) -> Instruction { - ProofInstruction::VerifyPubkeyValidity.encode(proof_data) +/// Create a `VerifyPubkeyValidity` instruction. +pub fn verify_pubkey_validity( + context_state_info: Option, + proof_data: &PubkeyValidityData, +) -> Instruction { + ProofInstruction::VerifyPubkeyValidity.encode_verify_proof(context_state_info, proof_data) +} + +impl ProofInstruction { + pub fn encode_verify_proof( + &self, + context_state_info: Option, + proof_data: &T, + ) -> Instruction + where + T: Pod + ZkProofData, + U: Pod, + { + let accounts = if let Some(context_state_info) = context_state_info { + vec![ + AccountMeta::new(*context_state_info.context_state_account, false), + AccountMeta::new_readonly(*context_state_info.context_state_authority, false), + ] + } else { + vec![] + }; + + let mut data = vec![ToPrimitive::to_u8(self).unwrap()]; + data.extend_from_slice(bytes_of(proof_data)); + + Instruction { + program_id: crate::zk_token_proof_program::id(), + accounts, + data, + } + } + + pub fn instruction_type(input: &[u8]) -> Option { + input + .first() + .and_then(|instruction| FromPrimitive::from_u8(*instruction)) + } + + pub fn proof_data(input: &[u8]) -> Option<&T> + where + T: Pod + ZkProofData, + U: Pod, + { + input + .get(1..) + .and_then(|data| bytemuck::try_from_bytes(data).ok()) + } } diff --git a/zk-token-sdk/src/zk_token_proof_state.rs b/zk-token-sdk/src/zk_token_proof_state.rs new file mode 100644 index 00000000000000..d95aa4f11ec1c3 --- /dev/null +++ b/zk-token-sdk/src/zk_token_proof_state.rs @@ -0,0 +1,72 @@ +use { + crate::{zk_token_elgamal::pod::PodProofType, zk_token_proof_instruction::ProofType}, + bytemuck::{bytes_of, Pod, Zeroable}, + num_traits::ToPrimitive, + solana_program::{ + instruction::{InstructionError, InstructionError::InvalidAccountData}, + pubkey::Pubkey, + }, + std::mem::size_of, +}; + +/// The proof context account state +#[derive(Clone, Copy, Debug, PartialEq)] +#[repr(C)] +pub struct ProofContextState { + /// The proof context authority that can close the account + pub context_state_authority: Pubkey, + /// The proof type for the context data + pub proof_type: PodProofType, + /// The proof context data + pub proof_context: T, +} + +// `bytemuck::Pod` cannot be derived for generic structs unless the struct is marked +// `repr(packed)`, which may cause unnecessary complications when referencing its fields. Directly +// mark `ProofContextState` as `Zeroable` and `Pod` since since none of its fields has an alignment +// requirement greater than 1 and therefore, guaranteed to be `packed`. +unsafe impl Zeroable for ProofContextState {} +unsafe impl Pod for ProofContextState {} + +impl ProofContextState { + pub fn encode( + context_state_authority: &Pubkey, + proof_type: ProofType, + proof_context: &T, + ) -> Vec { + let mut buf = Vec::with_capacity(size_of::()); + buf.extend_from_slice(context_state_authority.as_ref()); + buf.push(ToPrimitive::to_u8(&proof_type).unwrap()); + buf.extend_from_slice(bytes_of(proof_context)); + buf + } + + /// Interpret a slice as a `ProofContextState`. + /// + /// This function requires a generic parameter. To access only the generic-independent fields + /// in `ProofContextState` without a generic parameter, use + /// `ProofContextStateMeta::try_from_bytes` instead. + pub fn try_from_bytes(input: &[u8]) -> Result<&Self, InstructionError> { + bytemuck::try_from_bytes(input).map_err(|_| InvalidAccountData) + } +} + +/// The `ProofContextState` without the proof context itself. This struct exists to facilitate the +/// decoding of generic-independent fields in `ProofContextState`. +#[derive(Clone, Copy, Debug, PartialEq, Pod, Zeroable)] +#[repr(C)] +pub struct ProofContextStateMeta { + /// The proof context authority that can close the account + pub context_state_authority: Pubkey, + /// The proof type for the context data + pub proof_type: PodProofType, +} + +impl ProofContextStateMeta { + pub fn try_from_bytes(input: &[u8]) -> Result<&Self, InstructionError> { + input + .get(..size_of::()) + .and_then(|data| bytemuck::try_from_bytes(data).ok()) + .ok_or(InvalidAccountData) + } +} From 2635dd44d4d366f01ac81983f1bd40b50a8202fe Mon Sep 17 00:00:00 2001 From: Yihau Chen Date: Thu, 16 Mar 2023 11:58:08 +0800 Subject: [PATCH 381/465] ci: fix do-audit don't report error (#30728) * ci: fix do-audit don't retport error * Update ci/do-audit.sh Co-authored-by: Trent Nelson * use the latest suggestion * lint * redirect stderr to stdout * another solution --------- Co-authored-by: Trent Nelson (cherry picked from commit f8abc8df8dca8e6e90641ff86233523fb797f0d0) # Conflicts: # ci/do-audit.sh --- ci/do-audit.sh | 6 ++++++ ci/docker-run.sh | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/ci/do-audit.sh b/ci/do-audit.sh index 6618b4289111aa..dc1585147d064d 100755 --- a/ci/do-audit.sh +++ b/ci/do-audit.sh @@ -44,4 +44,10 @@ cargo_audit_ignores=( # Not worth upgrading tokio version on a stable branch --ignore RUSTSEC-2023-0001 ) +<<<<<<< HEAD scripts/cargo-for-all-lock-files.sh stable audit "${cargo_audit_ignores[@]}" | $dep_tree_filter +======= +scripts/cargo-for-all-lock-files.sh audit "${cargo_audit_ignores[@]}" | $dep_tree_filter +# we want the `cargo audit` exit code, not `$dep_tree_filter`'s +exit "${PIPESTATUS[0]}" +>>>>>>> f8abc8df8 (ci: fix do-audit don't report error (#30728)) diff --git a/ci/docker-run.sh b/ci/docker-run.sh index a7b94f902e8303..6ce4671a01c248 100755 --- a/ci/docker-run.sh +++ b/ci/docker-run.sh @@ -114,4 +114,4 @@ fi set -x # shellcheck disable=SC2086 -exec docker run "${ARGS[@]}" $CODECOV_ENVS "$IMAGE" "$@" +exec docker run "${ARGS[@]}" $CODECOV_ENVS -t "$IMAGE" "$@" From da75ab7995ae1d5d6e3cfe9e40c983c334a2968c Mon Sep 17 00:00:00 2001 From: yihau Date: Sat, 1 Apr 2023 02:51:11 +0800 Subject: [PATCH 382/465] fix conflict --- ci/do-audit.sh | 4 ---- 1 file changed, 4 deletions(-) diff --git a/ci/do-audit.sh b/ci/do-audit.sh index dc1585147d064d..a4da2b5b2aa5d6 100755 --- a/ci/do-audit.sh +++ b/ci/do-audit.sh @@ -44,10 +44,6 @@ cargo_audit_ignores=( # Not worth upgrading tokio version on a stable branch --ignore RUSTSEC-2023-0001 ) -<<<<<<< HEAD scripts/cargo-for-all-lock-files.sh stable audit "${cargo_audit_ignores[@]}" | $dep_tree_filter -======= -scripts/cargo-for-all-lock-files.sh audit "${cargo_audit_ignores[@]}" | $dep_tree_filter # we want the `cargo audit` exit code, not `$dep_tree_filter`'s exit "${PIPESTATUS[0]}" ->>>>>>> f8abc8df8 (ci: fix do-audit don't report error (#30728)) From d4e0d15821bfafc4f0701c079a02ec037a3ed971 Mon Sep 17 00:00:00 2001 From: Illia Bobyr Date: Thu, 23 Mar 2023 21:06:27 -0700 Subject: [PATCH 383/465] Cargo.lock: Update `openssl`, as suggested by `cargo audit` (#30886) Just ran cargo update --package openssl in the root and in `programs/sbf`. --- Cargo.lock | 8 ++++---- programs/bpf/Cargo.lock | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 087edefdb38b9d..9970e877844d55 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2900,9 +2900,9 @@ checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" [[package]] name = "openssl" -version = "0.10.41" +version = "0.10.48" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "618febf65336490dfcf20b73f885f5651a0c89c64c2d4a8c3662585a70bf5bd0" +checksum = "518915b97df115dd36109bfa429a48b8f737bd05508cf9588977b599648926d2" dependencies = [ "bitflags", "cfg-if 1.0.0", @@ -2941,9 +2941,9 @@ dependencies = [ [[package]] name = "openssl-sys" -version = "0.9.75" +version = "0.9.83" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5f9bd0c2710541a3cda73d6f9ac4f1b240de4ae261065d309dbe73d9dceb42f" +checksum = "666416d899cf077260dac8698d60a60b435a46d57e82acb1be3d0dad87284e5b" dependencies = [ "autocfg", "cc", diff --git a/programs/bpf/Cargo.lock b/programs/bpf/Cargo.lock index bdaa7565d9abb5..68ac7b2ce01282 100644 --- a/programs/bpf/Cargo.lock +++ b/programs/bpf/Cargo.lock @@ -2709,9 +2709,9 @@ checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" [[package]] name = "openssl" -version = "0.10.41" +version = "0.10.48" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "618febf65336490dfcf20b73f885f5651a0c89c64c2d4a8c3662585a70bf5bd0" +checksum = "518915b97df115dd36109bfa429a48b8f737bd05508cf9588977b599648926d2" dependencies = [ "bitflags", "cfg-if 1.0.0", @@ -2750,9 +2750,9 @@ dependencies = [ [[package]] name = "openssl-sys" -version = "0.9.75" +version = "0.9.83" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5f9bd0c2710541a3cda73d6f9ac4f1b240de4ae261065d309dbe73d9dceb42f" +checksum = "666416d899cf077260dac8698d60a60b435a46d57e82acb1be3d0dad87284e5b" dependencies = [ "autocfg", "cc", From c0887d31928888568dc646aa3d54d4bde8547054 Mon Sep 17 00:00:00 2001 From: yihau Date: Sat, 1 Apr 2023 03:21:17 +0800 Subject: [PATCH 384/465] bump tempfile to 3.4.0 (#30727) --- Cargo.lock | 169 ++++++++++++++++++++++++++++++++------- bucket_map/Cargo.toml | 2 +- clap-utils/Cargo.toml | 2 +- clap-v3-utils/Cargo.toml | 2 +- cli/Cargo.toml | 2 +- core/Cargo.toml | 2 +- genesis/Cargo.toml | 2 +- install/Cargo.toml | 2 +- ledger/Cargo.toml | 2 +- local-cluster/Cargo.toml | 2 +- programs/bpf/Cargo.lock | 161 +++++++++++++++++++++++++++++++------ runtime/Cargo.toml | 2 +- tokens/Cargo.toml | 2 +- 13 files changed, 289 insertions(+), 63 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 9970e877844d55..30c8fb9ea7d218 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -254,7 +254,7 @@ version = "0.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" dependencies = [ - "hermit-abi", + "hermit-abi 0.1.19", "libc", "winapi 0.3.9", ] @@ -664,7 +664,7 @@ version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "61bf7211aad104ce2769ec05efcdfabf85ee84ac92461d142f22cf8badd0e54c" dependencies = [ - "errno", + "errno 0.2.8", "libc", "thiserror", ] @@ -1416,6 +1416,17 @@ dependencies = [ "winapi 0.3.9", ] +[[package]] +name = "errno" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50d6a0976c999d473fe89ad888d5a284e55366d9dc9038b1ba2aa15128c4afa0" +dependencies = [ + "errno-dragonfly", + "libc", + "windows-sys 0.45.0", +] + [[package]] name = "errno-dragonfly" version = "0.1.2" @@ -1478,7 +1489,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "46e245f4c8ec30c6415c56cb132c07e69e74f1942f6b4a4061da748b49f486ca" dependencies = [ "cfg-if 1.0.0", - "rustix", + "rustix 0.34.3", "windows-sys 0.30.0", ] @@ -1507,7 +1518,7 @@ checksum = "975ccf83d8d9d0d84682850a38c8169027be83368805971cc4f238c2b245bc98" dependencies = [ "cfg-if 1.0.0", "libc", - "redox_syscall", + "redox_syscall 0.2.10", "winapi 0.3.9", ] @@ -1901,6 +1912,12 @@ dependencies = [ "libc", ] +[[package]] +name = "hermit-abi" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fed44880c466736ef9a5c5b5facefb5ed0785676d0c02d612db14e54f0d84286" + [[package]] name = "hex" version = "0.4.3" @@ -2177,6 +2194,17 @@ version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9448015e586b611e5d322f6703812bbca2f1e709d5773ecd38ddb4e3bb649504" +[[package]] +name = "io-lifetimes" +version = "1.0.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09270fd4fa1111bc614ed2246c7ef56239a3063d5be0d1ec3b589c505d400aeb" +dependencies = [ + "hermit-abi 0.3.1", + "libc", + "windows-sys 0.45.0", +] + [[package]] name = "ipnet" version = "2.3.1" @@ -2383,9 +2411,9 @@ checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" [[package]] name = "libc" -version = "0.2.126" +version = "0.2.140" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "349d5a591cd28b49e1d1037471617a32ddcda5731b99419008085f72d5a53836" +checksum = "99227334921fae1a979cf0bfdfcc6b3e5ce376ef57e16fb6fb3ea2ed6095f80c" [[package]] name = "libloading" @@ -2488,6 +2516,12 @@ version = "0.0.42" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5284f00d480e1c39af34e72f8ad60b94f47007e3481cd3b731c1d67190ddc7b7" +[[package]] +name = "linux-raw-sys" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d59d8c75012853d2e872fb56bc8a2e53718e2cafe1a4c823143141c6d90c322f" + [[package]] name = "lock_api" version = "0.4.6" @@ -2831,7 +2865,7 @@ version = "1.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "19e64526ebdee182341572e50e9ad03965aa510cd94427a4549448f285e957a1" dependencies = [ - "hermit-abi", + "hermit-abi 0.1.19", "libc", ] @@ -3049,7 +3083,7 @@ dependencies = [ "cfg-if 1.0.0", "instant", "libc", - "redox_syscall", + "redox_syscall 0.2.10", "smallvec", "winapi 0.3.9", ] @@ -3062,7 +3096,7 @@ checksum = "28141e0cc4143da2443301914478dc976a61ffdb3f043058310c70df2fed8954" dependencies = [ "cfg-if 1.0.0", "libc", - "redox_syscall", + "redox_syscall 0.2.10", "smallvec", "windows-sys 0.32.0", ] @@ -3780,6 +3814,15 @@ dependencies = [ "bitflags", ] +[[package]] +name = "redox_syscall" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29" +dependencies = [ + "bitflags", +] + [[package]] name = "redox_users" version = "0.4.0" @@ -3787,7 +3830,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "528532f3d801c87aec9def2add9ca802fe569e44a544afe633765267840abe64" dependencies = [ "getrandom 0.2.3", - "redox_syscall", + "redox_syscall 0.2.10", ] [[package]] @@ -3828,15 +3871,6 @@ version = "0.6.26" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "49b3de9ec5dc0a3417da371aab17d729997c15010e7fd24ff707773a33bddb64" -[[package]] -name = "remove_dir_all" -version = "0.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3acd125665422973a33ac9d3dd2df85edad0f4ae9b00dafb1a05e43a9f5ef8e7" -dependencies = [ - "winapi 0.3.9", -] - [[package]] name = "reqwest" version = "0.11.11" @@ -3964,13 +3998,27 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cb617eb09c4ef1536405e357e3b63f39e3ab4cc2159db05395278ad5c352bb16" dependencies = [ "bitflags", - "errno", - "io-lifetimes", + "errno 0.2.8", + "io-lifetimes 0.6.1", "libc", - "linux-raw-sys", + "linux-raw-sys 0.0.42", "winapi 0.3.9", ] +[[package]] +name = "rustix" +version = "0.37.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e78cc525325c06b4a7ff02db283472f3c042b7ff0c391f96c6d5ac6f4f91b75" +dependencies = [ + "bitflags", + "errno 0.3.0", + "io-lifetimes 1.0.9", + "libc", + "linux-raw-sys 0.3.1", + "windows-sys 0.45.0", +] + [[package]] name = "rustls" version = "0.19.1" @@ -6901,16 +6949,15 @@ dependencies = [ [[package]] name = "tempfile" -version = "3.3.0" +version = "3.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5cdb1ef4eaeeaddc8fbd371e5017057064af0911902ef36b39801f67cc6d79e4" +checksum = "b9fbec84f381d5795b08656e4912bec604d162bff9291d6189a78f4c8ab87998" dependencies = [ "cfg-if 1.0.0", "fastrand", - "libc", - "redox_syscall", - "remove_dir_all", - "winapi 0.3.9", + "redox_syscall 0.3.5", + "rustix 0.37.5", + "windows-sys 0.45.0", ] [[package]] @@ -7896,6 +7943,36 @@ dependencies = [ "windows_x86_64_msvc 0.32.0", ] +[[package]] +name = "windows-sys" +version = "0.45.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" +dependencies = [ + "windows-targets", +] + +[[package]] +name = "windows-targets" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" +dependencies = [ + "windows_aarch64_gnullvm", + "windows_aarch64_msvc 0.42.2", + "windows_i686_gnu 0.42.2", + "windows_i686_msvc 0.42.2", + "windows_x86_64_gnu 0.42.2", + "windows_x86_64_gnullvm", + "windows_x86_64_msvc 0.42.2", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" + [[package]] name = "windows_aarch64_msvc" version = "0.30.0" @@ -7908,6 +7985,12 @@ version = "0.32.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d8e92753b1c443191654ec532f14c199742964a061be25d77d7a96f09db20bf5" +[[package]] +name = "windows_aarch64_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" + [[package]] name = "windows_i686_gnu" version = "0.30.0" @@ -7920,6 +8003,12 @@ version = "0.32.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6a711c68811799e017b6038e0922cb27a5e2f43a2ddb609fe0b6f3eeda9de615" +[[package]] +name = "windows_i686_gnu" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" + [[package]] name = "windows_i686_msvc" version = "0.30.0" @@ -7932,6 +8021,12 @@ version = "0.32.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "146c11bb1a02615db74680b32a68e2d61f553cc24c4eb5b4ca10311740e44172" +[[package]] +name = "windows_i686_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" + [[package]] name = "windows_x86_64_gnu" version = "0.30.0" @@ -7944,6 +8039,18 @@ version = "0.32.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c912b12f7454c6620635bbff3450962753834be2a594819bd5e945af18ec64bc" +[[package]] +name = "windows_x86_64_gnu" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" + [[package]] name = "windows_x86_64_msvc" version = "0.30.0" @@ -7956,6 +8063,12 @@ version = "0.32.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "504a2476202769977a040c6364301a3f65d0cc9e3fb08600b2bda150a0488316" +[[package]] +name = "windows_x86_64_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" + [[package]] name = "winreg" version = "0.10.1" diff --git a/bucket_map/Cargo.toml b/bucket_map/Cargo.toml index 69f0d01569e3e1..3b2be6bb4c6481 100644 --- a/bucket_map/Cargo.toml +++ b/bucket_map/Cargo.toml @@ -17,7 +17,7 @@ modular-bitfield = "0.11.2" rand = "0.7.0" solana-measure = { path = "../measure", version = "=1.14.18" } solana-sdk = { path = "../sdk", version = "=1.14.18" } -tempfile = "3.3.0" +tempfile = "3.4.0" [dev-dependencies] fs_extra = "1.2.0" diff --git a/clap-utils/Cargo.toml b/clap-utils/Cargo.toml index 93ada9e4d270db..65050b2a3825f1 100644 --- a/clap-utils/Cargo.toml +++ b/clap-utils/Cargo.toml @@ -22,7 +22,7 @@ uriparse = "0.6.4" url = "2.2.2" [dev-dependencies] -tempfile = "3.3.0" +tempfile = "3.4.0" [lib] name = "solana_clap_utils" diff --git a/clap-v3-utils/Cargo.toml b/clap-v3-utils/Cargo.toml index b1613ad97fe8a1..1ed1a71349112c 100644 --- a/clap-v3-utils/Cargo.toml +++ b/clap-v3-utils/Cargo.toml @@ -22,7 +22,7 @@ uriparse = "0.6.4" url = "2.2.2" [dev-dependencies] -tempfile = "3.3.0" +tempfile = "3.4.0" [lib] name = "solana_clap_v3_utils" diff --git a/cli/Cargo.toml b/cli/Cargo.toml index f9fedd77cf99f5..567b2aee0a60d7 100644 --- a/cli/Cargo.toml +++ b/cli/Cargo.toml @@ -51,7 +51,7 @@ tiny-bip39 = "0.8.2" [dev-dependencies] solana-streamer = { path = "../streamer", version = "=1.14.18" } solana-test-validator = { path = "../test-validator", version = "=1.14.18" } -tempfile = "3.3.0" +tempfile = "3.4.0" [[bin]] name = "solana" diff --git a/core/Cargo.toml b/core/Cargo.toml index 3b65af8abee997..57adc62e990972 100644 --- a/core/Cargo.toml +++ b/core/Cargo.toml @@ -61,7 +61,7 @@ solana-transaction-status = { path = "../transaction-status", version = "=1.14.1 solana-version = { path = "../version", version = "=1.14.18" } solana-vote-program = { path = "../programs/vote", version = "=1.14.18" } sys-info = "0.9.1" -tempfile = "3.3.0" +tempfile = "3.4.0" thiserror = "1.0" tokio = { version = "~1.14.1", features = ["full"] } trees = "0.4.2" diff --git a/genesis/Cargo.toml b/genesis/Cargo.toml index 88cf9fb97e68f5..fca1cff94c7c3b 100644 --- a/genesis/Cargo.toml +++ b/genesis/Cargo.toml @@ -25,7 +25,7 @@ solana-sdk = { path = "../sdk", version = "=1.14.18" } solana-stake-program = { path = "../programs/stake", version = "=1.14.18" } solana-version = { path = "../version", version = "=1.14.18" } solana-vote-program = { path = "../programs/vote", version = "=1.14.18" } -tempfile = "3.3.0" +tempfile = "3.4.0" [[bin]] name = "solana-genesis" diff --git a/install/Cargo.toml b/install/Cargo.toml index 377deee7a7118a..843fd3d8c0ad12 100644 --- a/install/Cargo.toml +++ b/install/Cargo.toml @@ -33,7 +33,7 @@ solana-logger = { path = "../logger", version = "=1.14.18" } solana-sdk = { path = "../sdk", version = "=1.14.18" } solana-version = { path = "../version", version = "=1.14.18" } tar = "0.4.38" -tempfile = "3.3.0" +tempfile = "3.4.0" url = "2.2.2" [target."cfg(windows)".dependencies] diff --git a/ledger/Cargo.toml b/ledger/Cargo.toml index b2936a692f64d7..77f56bec82faed 100644 --- a/ledger/Cargo.toml +++ b/ledger/Cargo.toml @@ -55,7 +55,7 @@ solana-vote-program = { path = "../programs/vote", version = "=1.14.18" } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } spl-token-2022 = { version = "=0.6.1", features = ["no-entrypoint"] } static_assertions = "1.1.0" -tempfile = "3.3.0" +tempfile = "3.4.0" thiserror = "1.0" tokio = { version = "1", features = ["full"] } tokio-stream = "0.1" diff --git a/local-cluster/Cargo.toml b/local-cluster/Cargo.toml index 040c15bcc5ef0b..9a9b7773d2d5f4 100644 --- a/local-cluster/Cargo.toml +++ b/local-cluster/Cargo.toml @@ -27,7 +27,7 @@ solana-sdk = { path = "../sdk", version = "=1.14.18" } solana-stake-program = { path = "../programs/stake", version = "=1.14.18" } solana-streamer = { path = "../streamer", version = "=1.14.18" } solana-vote-program = { path = "../programs/vote", version = "=1.14.18" } -tempfile = "3.3.0" +tempfile = "3.4.0" [dev-dependencies] assert_matches = "1.5.0" diff --git a/programs/bpf/Cargo.lock b/programs/bpf/Cargo.lock index 68ac7b2ce01282..3fd4ea0e583f1a 100644 --- a/programs/bpf/Cargo.lock +++ b/programs/bpf/Cargo.lock @@ -240,7 +240,7 @@ version = "0.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" dependencies = [ - "hermit-abi", + "hermit-abi 0.1.13", "libc", "winapi 0.3.9", ] @@ -608,7 +608,7 @@ version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "61bf7211aad104ce2769ec05efcdfabf85ee84ac92461d142f22cf8badd0e54c" dependencies = [ - "errno", + "errno 0.2.8", "libc", "thiserror", ] @@ -1247,6 +1247,17 @@ dependencies = [ "winapi 0.3.9", ] +[[package]] +name = "errno" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50d6a0976c999d473fe89ad888d5a284e55366d9dc9038b1ba2aa15128c4afa0" +dependencies = [ + "errno-dragonfly", + "libc", + "windows-sys 0.45.0", +] + [[package]] name = "errno-dragonfly" version = "0.1.2" @@ -1309,7 +1320,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "46e245f4c8ec30c6415c56cb132c07e69e74f1942f6b4a4061da748b49f486ca" dependencies = [ "cfg-if 1.0.0", - "rustix", + "rustix 0.34.4", "windows-sys 0.30.0", ] @@ -1689,6 +1700,12 @@ dependencies = [ "libc", ] +[[package]] +name = "hermit-abi" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fed44880c466736ef9a5c5b5facefb5ed0785676d0c02d612db14e54f0d84286" + [[package]] name = "histogram" version = "0.6.9" @@ -1948,6 +1965,17 @@ version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9448015e586b611e5d322f6703812bbca2f1e709d5773ecd38ddb4e3bb649504" +[[package]] +name = "io-lifetimes" +version = "1.0.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09270fd4fa1111bc614ed2246c7ef56239a3063d5be0d1ec3b589c505d400aeb" +dependencies = [ + "hermit-abi 0.3.1", + "libc", + "windows-sys 0.45.0", +] + [[package]] name = "ipnet" version = "2.3.0" @@ -2148,9 +2176,9 @@ checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" [[package]] name = "libc" -version = "0.2.126" +version = "0.2.140" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "349d5a591cd28b49e1d1037471617a32ddcda5731b99419008085f72d5a53836" +checksum = "99227334921fae1a979cf0bfdfcc6b3e5ce376ef57e16fb6fb3ea2ed6095f80c" [[package]] name = "libloading" @@ -2298,6 +2326,12 @@ version = "0.0.42" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5284f00d480e1c39af34e72f8ad60b94f47007e3481cd3b731c1d67190ddc7b7" +[[package]] +name = "linux-raw-sys" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d59d8c75012853d2e872fb56bc8a2e53718e2cafe1a4c823143141c6d90c322f" + [[package]] name = "lock_api" version = "0.4.6" @@ -2640,7 +2674,7 @@ version = "1.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "19e64526ebdee182341572e50e9ad03965aa510cd94427a4549448f285e957a1" dependencies = [ - "hermit-abi", + "hermit-abi 0.1.13", "libc", ] @@ -3460,6 +3494,15 @@ dependencies = [ "bitflags", ] +[[package]] +name = "redox_syscall" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29" +dependencies = [ + "bitflags", +] + [[package]] name = "redox_users" version = "0.4.0" @@ -3502,15 +3545,6 @@ version = "0.6.26" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "49b3de9ec5dc0a3417da371aab17d729997c15010e7fd24ff707773a33bddb64" -[[package]] -name = "remove_dir_all" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a83fa3702a688b9359eccba92d153ac33fd2e8462f9e0e3fdf155239ea7792e" -dependencies = [ - "winapi 0.3.9", -] - [[package]] name = "reqwest" version = "0.11.11" @@ -3629,13 +3663,27 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f5d1c6ed6d1c6915aa64749b809fc1bafff49d160f5d927463658093d7d62ab" dependencies = [ "bitflags", - "errno", - "io-lifetimes", + "errno 0.2.8", + "io-lifetimes 0.6.1", "libc", - "linux-raw-sys", + "linux-raw-sys 0.0.42", "winapi 0.3.9", ] +[[package]] +name = "rustix" +version = "0.37.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e78cc525325c06b4a7ff02db283472f3c042b7ff0c391f96c6d5ac6f4f91b75" +dependencies = [ + "bitflags", + "errno 0.3.0", + "io-lifetimes 1.0.9", + "libc", + "linux-raw-sys 0.3.1", + "windows-sys 0.45.0", +] + [[package]] name = "rustls" version = "0.19.1" @@ -6161,16 +6209,15 @@ dependencies = [ [[package]] name = "tempfile" -version = "3.3.0" +version = "3.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5cdb1ef4eaeeaddc8fbd371e5017057064af0911902ef36b39801f67cc6d79e4" +checksum = "b9fbec84f381d5795b08656e4912bec604d162bff9291d6189a78f4c8ab87998" dependencies = [ "cfg-if 1.0.0", "fastrand", - "libc", - "redox_syscall 0.2.10", - "remove_dir_all", - "winapi 0.3.9", + "redox_syscall 0.3.5", + "rustix 0.37.5", + "windows-sys 0.45.0", ] [[package]] @@ -7117,6 +7164,36 @@ dependencies = [ "windows_x86_64_msvc 0.32.0", ] +[[package]] +name = "windows-sys" +version = "0.45.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" +dependencies = [ + "windows-targets", +] + +[[package]] +name = "windows-targets" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" +dependencies = [ + "windows_aarch64_gnullvm", + "windows_aarch64_msvc 0.42.2", + "windows_i686_gnu 0.42.2", + "windows_i686_msvc 0.42.2", + "windows_x86_64_gnu 0.42.2", + "windows_x86_64_gnullvm", + "windows_x86_64_msvc 0.42.2", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" + [[package]] name = "windows_aarch64_msvc" version = "0.30.0" @@ -7129,6 +7206,12 @@ version = "0.32.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d8e92753b1c443191654ec532f14c199742964a061be25d77d7a96f09db20bf5" +[[package]] +name = "windows_aarch64_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" + [[package]] name = "windows_i686_gnu" version = "0.30.0" @@ -7141,6 +7224,12 @@ version = "0.32.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6a711c68811799e017b6038e0922cb27a5e2f43a2ddb609fe0b6f3eeda9de615" +[[package]] +name = "windows_i686_gnu" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" + [[package]] name = "windows_i686_msvc" version = "0.30.0" @@ -7153,6 +7242,12 @@ version = "0.32.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "146c11bb1a02615db74680b32a68e2d61f553cc24c4eb5b4ca10311740e44172" +[[package]] +name = "windows_i686_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" + [[package]] name = "windows_x86_64_gnu" version = "0.30.0" @@ -7165,6 +7260,18 @@ version = "0.32.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c912b12f7454c6620635bbff3450962753834be2a594819bd5e945af18ec64bc" +[[package]] +name = "windows_x86_64_gnu" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" + [[package]] name = "windows_x86_64_msvc" version = "0.30.0" @@ -7177,6 +7284,12 @@ version = "0.32.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "504a2476202769977a040c6364301a3f65d0cc9e3fb08600b2bda150a0488316" +[[package]] +name = "windows_x86_64_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" + [[package]] name = "winreg" version = "0.10.1" diff --git a/runtime/Cargo.toml b/runtime/Cargo.toml index 3a2bdbbb3eec31..6d8712eb08ccb6 100644 --- a/runtime/Cargo.toml +++ b/runtime/Cargo.toml @@ -59,7 +59,7 @@ strum = { version = "0.24", features = ["derive"] } strum_macros = "0.24" symlink = "0.1.0" tar = "0.4.38" -tempfile = "3.3.0" +tempfile = "3.4.0" thiserror = "1.0" zstd = "0.11.2" diff --git a/tokens/Cargo.toml b/tokens/Cargo.toml index c91e32b2a1c49a..cac36a76a7757d 100644 --- a/tokens/Cargo.toml +++ b/tokens/Cargo.toml @@ -29,7 +29,7 @@ solana-transaction-status = { path = "../transaction-status", version = "=1.14.1 solana-version = { path = "../version", version = "=1.14.18" } spl-associated-token-account = { version = "=1.1.3" } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } -tempfile = "3.3.0" +tempfile = "3.4.0" thiserror = "1.0" [dev-dependencies] From 961ec28c3bdc2bf7f4aecdd059ac6750a17f2de4 Mon Sep 17 00:00:00 2001 From: yihau Date: Sat, 1 Apr 2023 03:52:57 +0800 Subject: [PATCH 385/465] move storage-bigtable/build-proto as a part of members --- Cargo.lock | 8 + Cargo.toml | 1 + storage-bigtable/build-proto/Cargo.lock | 373 ------------------------ storage-bigtable/build-proto/Cargo.toml | 2 - 4 files changed, 9 insertions(+), 375 deletions(-) delete mode 100644 storage-bigtable/build-proto/Cargo.lock diff --git a/Cargo.lock b/Cargo.lock index 30c8fb9ea7d218..0d8c6506c55bbd 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3521,6 +3521,14 @@ dependencies = [ "prost 0.11.0", ] +[[package]] +name = "proto" +version = "1.14.18" +dependencies = [ + "protobuf-src", + "tonic-build 0.8.0", +] + [[package]] name = "protobuf-src" version = "1.0.5+3.19.3" diff --git a/Cargo.toml b/Cargo.toml index 48ef1d210423a7..219a27a4117d7b 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -75,6 +75,7 @@ members = [ "send-transaction-service", "stake-accounts", "storage-bigtable", + "storage-bigtable/build-proto", "storage-proto", "streamer", "sys-tuner", diff --git a/storage-bigtable/build-proto/Cargo.lock b/storage-bigtable/build-proto/Cargo.lock deleted file mode 100644 index a87bc85f83a23c..00000000000000 --- a/storage-bigtable/build-proto/Cargo.lock +++ /dev/null @@ -1,373 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 3 - -[[package]] -name = "anyhow" -version = "1.0.58" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb07d2053ccdbe10e2af2995a2f116c1330396493dc1269f6a91d0ae82e19704" - -[[package]] -name = "autocfg" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8aac770f1885fd7e387acedd76065302551364496e46b3dd00860b2f8359b9d" - -[[package]] -name = "autotools" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8138adefca3e5d2e73bfba83bd6eeaf904b26a7ac1b4a19892cfe16cc7e1701" -dependencies = [ - "cc", -] - -[[package]] -name = "bitflags" -version = "1.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693" - -[[package]] -name = "bytes" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b700ce4376041dcd0a327fd0097c41095743c4c8af8887265942faf1100bd040" - -[[package]] -name = "cc" -version = "1.0.73" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2fff2a6927b3bb87f9595d67196a70493f627687a71d87a0d692242c33f58c11" - -[[package]] -name = "cfg-if" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" - -[[package]] -name = "either" -version = "1.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f107b87b6afc2a64fd13cac55fe06d6c8859f12d4b14cbcdd2c67d0976781be" - -[[package]] -name = "fastrand" -version = "1.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "779d043b6a0b90cc4c0ed7ee380a6504394cee7efd7db050e3774eee387324b2" -dependencies = [ - "instant", -] - -[[package]] -name = "fixedbitset" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "398ea4fabe40b9b0d885340a2a991a44c8a645624075ad966d21f88688e2b69e" - -[[package]] -name = "hashbrown" -version = "0.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" - -[[package]] -name = "heck" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2540771e65fc8cb83cd6e8a237f70c319bd5c29f78ed1084ba5d50eeac86f7f9" - -[[package]] -name = "indexmap" -version = "1.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10a35a97730320ffe8e2d410b5d3b69279b98d2c14bdb8b70ea89ecf7888d41e" -dependencies = [ - "autocfg", - "hashbrown", -] - -[[package]] -name = "instant" -version = "0.1.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "itertools" -version = "0.10.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9a9d19fa1e79b6215ff29b9d6880b706147f16e9b1dbb1e4e5947b5b02bc5e3" -dependencies = [ - "either", -] - -[[package]] -name = "lazy_static" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" - -[[package]] -name = "libc" -version = "0.2.126" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "349d5a591cd28b49e1d1037471617a32ddcda5731b99419008085f72d5a53836" - -[[package]] -name = "log" -version = "0.4.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "multimap" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8883adfde9756c1d30b0f519c9b8c502a94b41ac62f696453c37c7fc0a958ce" - -[[package]] -name = "petgraph" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a13a2fa9d0b63e5f22328828741e523766fff0ee9e779316902290dff3f824f" -dependencies = [ - "fixedbitset", - "indexmap", -] - -[[package]] -name = "prettyplease" -version = "0.1.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b83ec2d0af5c5c556257ff52c9f98934e243b9fd39604bfb2a9b75ec2e97f18" -dependencies = [ - "proc-macro2", - "syn", -] - -[[package]] -name = "proc-macro2" -version = "1.0.36" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7342d5883fbccae1cc37a2353b09c87c9b0f3afd73f5fb9bba687a1f733b029" -dependencies = [ - "unicode-xid", -] - -[[package]] -name = "prost" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "399c3c31cdec40583bb68f0b18403400d01ec4289c383aa047560439952c4dd7" -dependencies = [ - "bytes", - "prost-derive", -] - -[[package]] -name = "prost-build" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d49d928704208aba2cb1fb022ce1a319bdedcb03caf51ddf82734fa903407762" -dependencies = [ - "bytes", - "heck", - "itertools", - "lazy_static", - "log", - "multimap", - "petgraph", - "prost", - "prost-types", - "regex", - "tempfile", - "which", -] - -[[package]] -name = "prost-derive" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7345d5f0e08c0536d7ac7229952590239e77abf0a0100a1b1d890add6ea96364" -dependencies = [ - "anyhow", - "itertools", - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "prost-types" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d30bc806a29b347314be074ff0608ef8e547286e8ea68b061a2fe55689edc01f" -dependencies = [ - "bytes", - "prost", -] - -[[package]] -name = "proto" -version = "1.14.18" -dependencies = [ - "protobuf-src", - "tonic-build", -] - -[[package]] -name = "protobuf-src" -version = "1.0.5+3.19.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe57f68bf9767f48f8cbcbceb5da21524e2b1330a821c1c2502c447d8043f078" -dependencies = [ - "autotools", -] - -[[package]] -name = "quote" -version = "1.0.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa563d17ecb180e500da1cfd2b028310ac758de548efdd203e18f283af693f37" -dependencies = [ - "proc-macro2", -] - -[[package]] -name = "redox_syscall" -version = "0.2.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8383f39639269cde97d255a32bdb68c047337295414940c68bdd30c2e13203ff" -dependencies = [ - "bitflags", -] - -[[package]] -name = "regex" -version = "1.5.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d83f127d94bdbcda4c8cc2e50f6f84f4b611f69c902699ca385a39c3a75f9ff1" -dependencies = [ - "regex-syntax", -] - -[[package]] -name = "regex-syntax" -version = "0.6.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49b3de9ec5dc0a3417da371aab17d729997c15010e7fd24ff707773a33bddb64" - -[[package]] -name = "remove_dir_all" -version = "0.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3acd125665422973a33ac9d3dd2df85edad0f4ae9b00dafb1a05e43a9f5ef8e7" -dependencies = [ - "winapi", -] - -[[package]] -name = "syn" -version = "1.0.91" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b683b2b825c8eef438b77c36a06dc262294da3d5a5813fac20da149241dcd44d" -dependencies = [ - "proc-macro2", - "quote", - "unicode-xid", -] - -[[package]] -name = "tempfile" -version = "3.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5cdb1ef4eaeeaddc8fbd371e5017057064af0911902ef36b39801f67cc6d79e4" -dependencies = [ - "cfg-if", - "fastrand", - "libc", - "redox_syscall", - "remove_dir_all", - "winapi", -] - -[[package]] -name = "thiserror" -version = "1.0.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd829fe32373d27f76265620b5309d0340cb8550f523c1dda251d6298069069a" -dependencies = [ - "thiserror-impl", -] - -[[package]] -name = "thiserror-impl" -version = "1.0.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0396bc89e626244658bef819e22d0cc459e795a5ebe878e6ec336d1674a8d79a" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "tonic-build" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2fbcd2800e34e743b9ae795867d5f77b535d3a3be69fd731e39145719752df8c" -dependencies = [ - "prettyplease", - "proc-macro2", - "prost-build", - "quote", - "syn", -] - -[[package]] -name = "unicode-xid" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7fe0bb3479651439c9112f72b6c505038574c9fbb575ed1bf3b797fa39dd564" - -[[package]] -name = "which" -version = "4.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87c14ef7e1b8b8ecfc75d5eca37949410046e66f15d185c01d70824f1f8111ef" -dependencies = [ - "libc", - "thiserror", -] - -[[package]] -name = "winapi" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" -dependencies = [ - "winapi-i686-pc-windows-gnu", - "winapi-x86_64-pc-windows-gnu", -] - -[[package]] -name = "winapi-i686-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" - -[[package]] -name = "winapi-x86_64-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" diff --git a/storage-bigtable/build-proto/Cargo.toml b/storage-bigtable/build-proto/Cargo.toml index 10be9018ced569..4f8d0e49d1f0f2 100644 --- a/storage-bigtable/build-proto/Cargo.toml +++ b/storage-bigtable/build-proto/Cargo.toml @@ -9,8 +9,6 @@ publish = false repository = "https://github.com/solana-labs/solana" version = "1.14.18" -[workspace] - [dependencies] tonic-build = "0.8.0" From d07d5be941bab994af951570c016fa6fa0f2dd95 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Tue, 4 Apr 2023 09:35:39 -0500 Subject: [PATCH 386/465] v1.14: docs - smaller logo image (backport of #29775) (#31038) docs - smaller logo image (#29775) fix: smaller logo image (cherry picked from commit 2dbe36e82a39d23ad272e97f33d276b6e8fc8423) Co-authored-by: Nick Frostbutter <75431177+nickfrosty@users.noreply.github.com> --- docs/static/img/logo-horizontal-dark.svg | 20 +------------------- docs/static/img/logo-horizontal.svg | 20 +------------------- 2 files changed, 2 insertions(+), 38 deletions(-) diff --git a/docs/static/img/logo-horizontal-dark.svg b/docs/static/img/logo-horizontal-dark.svg index 4a2dcf3be0eaab..4eb5ab152c005c 100644 --- a/docs/static/img/logo-horizontal-dark.svg +++ b/docs/static/img/logo-horizontal-dark.svg @@ -1,4 +1,4 @@ - + @@ -8,22 +8,4 @@ - - - - - - - - - - - - - - - - - - diff --git a/docs/static/img/logo-horizontal.svg b/docs/static/img/logo-horizontal.svg index 9de8e80eab5e7d..d906fe507706d3 100644 --- a/docs/static/img/logo-horizontal.svg +++ b/docs/static/img/logo-horizontal.svg @@ -1,4 +1,4 @@ - + @@ -8,22 +8,4 @@ - - - - - - - - - - - - - - - - - - From 02d45fc1b23b7c3ecc21d79bfe43120f41cb7643 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Tue, 4 Apr 2023 23:29:03 +0800 Subject: [PATCH 387/465] v1.14: ci: extract vercel scope as an env (backport of #30441) (#31043) ci: extract vercel scope as an env (#30441) (cherry picked from commit 17369dc8f0483701864bf16cbf5e6f401f928c35) Co-authored-by: Yihau Chen --- .github/workflows/docs.yml | 1 + docs/publish-docs.sh | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index a8544faf360cf3..a851a9c3975f8a 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -87,6 +87,7 @@ jobs: ./build.sh env: VERCEL_TOKEN: ${{ secrets.VERCEL_TOKEN }} + VERCEL_SCOPE: ${{ secrets.VERCEL_SCOPE }} notification: if: failure() diff --git a/docs/publish-docs.sh b/docs/publish-docs.sh index 898fd415f59f86..2a6002871b8f31 100755 --- a/docs/publish-docs.sh +++ b/docs/publish-docs.sh @@ -28,7 +28,7 @@ fi cat > "$CONFIG_FILE" < Date: Tue, 4 Apr 2023 13:45:34 -0500 Subject: [PATCH 388/465] v1.14: docs - new homepage (backport of #29793) (#31045) docs - new homepage (#29793) * refactor: new home page * refactor: line lengths and meta description * docs: removed text section * refactor: links label and comments * chore: removed comment * refactor: removed page (cherry picked from commit 54416451f6eab66d06bf610978727c74d725d932) Co-authored-by: Nick Frostbutter <75431177+nickfrosty@users.noreply.github.com> --- docs/components/Card.jsx | 13 ++-- docs/components/HomeCtaLinks.jsx | 34 +++++++++++ docs/src/css/custom.css | 14 +++-- docs/src/index.mdx | 56 +++++++++++++++++ docs/src/pages/index.js | 102 ------------------------------- 5 files changed, 108 insertions(+), 111 deletions(-) create mode 100644 docs/components/HomeCtaLinks.jsx create mode 100644 docs/src/index.mdx delete mode 100644 docs/src/pages/index.js diff --git a/docs/components/Card.jsx b/docs/components/Card.jsx index 56f25958011d7d..67989e67dc109d 100644 --- a/docs/components/Card.jsx +++ b/docs/components/Card.jsx @@ -37,11 +37,14 @@ function Card({ to, header, body, externalIcon = false }) { )} -

    + + {typeof body === "object" && ( +
    +

    + {body.label} +

    +
    + )} ); diff --git a/docs/components/HomeCtaLinks.jsx b/docs/components/HomeCtaLinks.jsx new file mode 100644 index 00000000000000..6a7283425ad6a7 --- /dev/null +++ b/docs/components/HomeCtaLinks.jsx @@ -0,0 +1,34 @@ +import React from "react"; +import Card from "./Card"; + +export default function HomeCtaLinks() { + return ( +
    +
    + + + + + +
    +
    + ); +} diff --git a/docs/src/css/custom.css b/docs/src/css/custom.css index 795de68317c1f9..35cc4a0d71f066 100644 --- a/docs/src/css/custom.css +++ b/docs/src/css/custom.css @@ -57,11 +57,11 @@ main { } .cards__container { - margin: 3em 0; + /* margin-bottom: 0; */ } .cards__container .col { - margin-bottom: 1em; + margin-bottom: 3em; } .card { @@ -73,7 +73,12 @@ main { transition-duration: 200ms; align-items: start; height: 100%; - box-shadow: 0 8px 15px 2px rgba(86, 91, 115, 0.1); + /* box-shadow: 0 8px 15px 2px rgba(86, 91, 115, 0.1); */ + border: 1px solid #ccc; +} + +[data-theme="dark"] .card { + border-color: #444; } .card a { @@ -81,7 +86,8 @@ main { } .card:hover { - transform: translate(0px, -5px); + /* transform: translate(0px, -5px); */ + border-color: var(--ifm-color-primary); } .footer--dark { diff --git a/docs/src/index.mdx b/docs/src/index.mdx new file mode 100644 index 00000000000000..a0e58819704881 --- /dev/null +++ b/docs/src/index.mdx @@ -0,0 +1,56 @@ +--- +slug: / +id: home +title: Home +sidebar_label: Home +description: + "Solana is a high performance network that is utilized for a range of use cases, \ + including finance, NFTs, payments, and gaming." +# displayed_sidebar: introductionSidebar +--- + +# Solana Documentaion + +Solana is a blockchain built for mass adoption. It's a high performance network that is utilized for +a range of use cases, including finance, NFTs, payments, and gaming. Solana operates as a single +global state machine, and is open, interoperable and decentralized. + +## Getting started + +Dive right into Solana to start building or setup your tooling. + +- [Setup local environment](/cli) - Install the Solana CLI to get your local development environment setup +- [Hello World in your browser](getstarted/hello-world) - Build and deploy your first on-chain Solana program, + directly in your browser using Solana Playground + +## Start learning + +Build a strong understanding of the core concepts that make Solana different from other blockchains. + +- [Transactions](./developing/programming-model/transactions) - Collection of instructions for the blockchain to execute +- [Accounts](./developing/programming-model/accounts) - Data and state storage mechanism for Solana +- [Programs](./developing/intro/programs) - The executable code used to perform actions on the blockchain +- [Cross-Program Invocation](./developing/programming-model/calling-between-programs) - Core of the "composability" + of Solana, this is how programs can "call" each other. + +## Understanding the architecture + +Get to know the underlying architecture of how the proof-of-stake blockchain works. + +- [Validators](./validator/anatomy) - the individual nodes that are the backbone of the network +- [Clusters](./cluster/overview) - a collection of validators that work together for consensus + +## Running a validator + +Explore what it takes to operate a Solana validator and help secure the network. + +- [System requirements](./running-validator/validator-reqs) - Recommended hardware requirements and expected SOL + needed to operate a validator +- [Quick start guide](./running-validator/validator-start) - Setup a validator and get connected to a cluster + for the first time + +## Learn more + +import HomeCtaLinks from "../components/HomeCtaLinks"; + + diff --git a/docs/src/pages/index.js b/docs/src/pages/index.js deleted file mode 100644 index 80558d647048ec..00000000000000 --- a/docs/src/pages/index.js +++ /dev/null @@ -1,102 +0,0 @@ -import React from "react"; -import Layout from "@theme/Layout"; -import useDocusaurusContext from "@docusaurus/useDocusaurusContext"; -import styles from "./styles.module.css"; -import Card from "../../components/Card"; - -function Home() { - const context = useDocusaurusContext(); - const { siteConfig = {} } = context; - - return ( - -
    -
    -
    -
    - - - - - - - - - - - -
    -
    -
    -
    -
    - ); -} - -export default Home; From b28cc09693ad4ebf0dacf7153dc67fb1f94ba383 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Tue, 4 Apr 2023 13:46:06 -0500 Subject: [PATCH 389/465] v1.14: Update turbine documentation (backport of #29906) (#31044) Update turbine documentation (#29906) * Update turbine text, fix typos, shuffle organization, update diagrams, and fix error rate calculations (cherry picked from commit c1aac6d430de88b2529dd47843e2b7e09e049d0b) Co-authored-by: Brennan --- docs/art/data-plane-fanout.bob | 4 +- docs/art/data-plane-neighborhood.bob | 43 +++++++------- docs/art/data-plane-seeding.bob | 16 ++--- docs/src/cluster/turbine-block-propagation.md | 58 ++++++++++--------- 4 files changed, 63 insertions(+), 58 deletions(-) diff --git a/docs/art/data-plane-fanout.bob b/docs/art/data-plane-fanout.bob index 9096d3aac955e5..13bc9de7c60934 100644 --- a/docs/art/data-plane-fanout.bob +++ b/docs/art/data-plane-fanout.bob @@ -3,13 +3,13 @@ | +-----------------+ Neighborhood 0 +-----------------+ | | | +--------------------->+ | | | | Validator 1 | | Validator 2 | | -| | +<---------------------+ | | +| | Root | | | | | +--------+-+------+ +------+-+--------+ | | | | | | | | | +-----------------------------+ | | | | | +------------------------+------+ | | | | | | | | -+------------------------------------------------------------------+ ++------------|------|------------------------|--------|------------+ | | | | v v v v +---------+------+---+ +-+--------+---------+ diff --git a/docs/art/data-plane-neighborhood.bob b/docs/art/data-plane-neighborhood.bob index bf2b82695f1fa4..ccdd3b6dd60f9f 100644 --- a/docs/art/data-plane-neighborhood.bob +++ b/docs/art/data-plane-neighborhood.bob @@ -1,25 +1,28 @@ +---------------------------------------------------------------------------------------------------------+ | Neighborhood Above | -| | -| +----------------+ +----------------+ +----------------+ +----------------+ | -| | +------>+ +------>+ +------>+ | | +| +-----------------+-----------------------+-------------------------+ | +| | | | | | +| | v v v | +| +--------------+-+ +----------------+ +----------------+ +----------------+ | +| | | | | | | | | | | | Neighbor 1 | | Neighbor 2 | | Neighbor 3 | | Neighbor 4 | | -| | +<------+ +<------+ +<------+ | | -| +--+-------------+ +--+-------------+ +-----+----------+ +--+-------------+ | -| | | | | | -+---------------------------------------------------------------------------------------------------------+ - | | | | - | | | | - | | | | - | | | | - | | | | -+---------------------------------------------------------------------------------------------------------+ -| | | Neighborhood Below | | | -| v v v v | -| +--+-------------+ +--+-------------+ +-----+----------+ +--+-------------+ | -| | +------>+ +------>+ +------>+ | | +| | Anchor | | | | | | | | +| +--+-------------+ +---+------------+ +------+---------+ +---+------------+ | +| | | | | | ++---------|-------------------------|---------------------------|---------------------|-------------------+ + | | | | + | | | | + | | | | + | | | | ++---------|-------------------------|---------------------------|---------------------|-------------------+ +| | | Neighborhood Below | | | +| v v v v | +| +--+-------------+ +---+------------+ +------+---------+ +---+------------+ | +| | | | | | | | | | | | Neighbor 1 | | Neighbor 2 | | Neighbor 3 | | Neighbor 4 | | -| | +<------+ +<------+ +<------+ | | -| +----------------+ +----------------+ +----------------+ +----------------+ | -| | +| | Anchor | | | | | | | | +| +--------------+-+ +----------------+ +----------------+ +----------------+ | +| | ^ ^ ^ | +| | | | | | +| +-----------------+-----------------------+-------------------------+ | +---------------------------------------------------------------------------------------------------------+ diff --git a/docs/art/data-plane-seeding.bob b/docs/art/data-plane-seeding.bob index 41e0bb75eacd2f..5a0d3b342c8b2c 100644 --- a/docs/art/data-plane-seeding.bob +++ b/docs/art/data-plane-seeding.bob @@ -1,15 +1,15 @@ +--------------+ | | - +------------+ Leader +------------+ - | | | | - | +--------------+ | - v v -+------------+----------------------------------------+------------+ -| | -| +-----------------+ Neighborhood 0 +-----------------+ | + +------------+ Leader | + | | | + | +--------------+ + | ++------------|-----------------------------------------------------+ +| v | +| +--------+--------+ Neighborhood 0 +-----------------+ | | | +--------------------->+ | | | | Validator 1 | | Validator 2 | | -| | +<---------------------+ | | +| | Root | | | | | +-----------------+ +-----------------+ | | | +------------------------------------------------------------------+ diff --git a/docs/src/cluster/turbine-block-propagation.md b/docs/src/cluster/turbine-block-propagation.md index 5c79b89d11209a..8cc30acdc20c6b 100644 --- a/docs/src/cluster/turbine-block-propagation.md +++ b/docs/src/cluster/turbine-block-propagation.md @@ -2,41 +2,49 @@ title: Turbine Block Propagation --- -A Solana cluster uses a multi-layer block propagation mechanism called _Turbine_ to broadcast transaction shreds to all nodes with minimal amount of duplicate messages. The cluster divides itself into small collections of nodes, called _neighborhoods_. Each node is responsible for sharing any data it receives with the other nodes in its neighborhood, as well as propagating the data on to a small set of nodes in other neighborhoods. This way each node only has to communicate with a small number of nodes. - -During its slot, the leader node distributes shreds between the validator nodes in the first neighborhood \(layer 0\). Each validator shares its data within its neighborhood, but also retransmits the shreds to one node in some neighborhoods in the next layer \(layer 1\). The layer-1 nodes each share their data with their neighborhood peers, and retransmit to nodes in the next layer, etc, until all nodes in the cluster have received all the shreds. +A Solana cluster uses a multi-layer block propagation mechanism called _Turbine_ to broadcast transaction shreds to all nodes with minimal amount of duplicate messages. The cluster divides itself into small collections of nodes, called _neighborhoods_. Each node is responsible for propagating any data it receives on to a small set of nodes in downstream neighborhoods and possibly sharing data with the other nodes in its neighborhood. This way each node only has to communicate with a small number of nodes. ## Neighborhood Assignment - Weighted Selection -In order for data plane fanout to work, the entire cluster must agree on how the cluster is divided into neighborhoods. To achieve this, all the recognized validator nodes \(the TVU peers\) are sorted by stake and stored in a list. This list is then indexed in different ways to figure out neighborhood boundaries and retransmit peers. For example, the leader will simply select the first nodes to make up layer 0. These will automatically be the highest stake holders, allowing the heaviest votes to come back to the leader first. Layer 0 and lower-layer nodes use the same logic to find their neighbors and next layer peers. +In order for data plane fanout to work, the entire cluster must agree on how the cluster is divided into neighborhoods. To achieve this, all the recognized validator nodes \(the TVU peers\) are sorted by stake and stored in a list. This list is then indexed in different ways to figure out neighborhood boundaries and retransmit peers. For example, the leader will simply select the first `DATA_PLANE_FANOUT` nodes to make up layer 1. These will automatically be the highest stake holders, allowing the heaviest votes to come back to the leader first. Layer 1 and lower-layer nodes use the same logic to find their neighbors and next layer peers. -To reduce the possibility of attack vectors, each shred is transmitted over a random tree of neighborhoods. Each node uses the same set of nodes representing the cluster. A random tree is generated from the set for each shred using a seed derived from the leader id, slot and shred index. +To reduce the possibility of attack vectors, each shred is transmitted over a random tree of neighborhoods. Each node uses the same set of nodes representing the cluster. A random tree is generated from the set for each shred using a seed derived from the slot leader id, slot, shred index, and shred type. ## Layer and Neighborhood Structure -The current leader makes its initial broadcasts to at most `DATA_PLANE_FANOUT` nodes. If this layer 0 is smaller than the number of nodes in the cluster, then the data plane fanout mechanism adds layers below. Subsequent layers follow these constraints to determine layer-capacity: Each neighborhood contains `DATA_PLANE_FANOUT` nodes. Layer 0 starts with 1 neighborhood with fanout nodes. The number of nodes in each additional layer grows by a factor of fanout. +The leader can be thought of as layer 0 and communicates with layer 1, which is made up of at most `DATA_PLANE_FANOUT` nodes. If this layer 1 is smaller than the number of nodes in the cluster, then the data plane fanout mechanism adds layers below. Subsequent layers follow these constraints to determine layer-capacity: Each neighborhood contains `DATA_PLANE_FANOUT` nodes. Layer 1 starts with 1 neighborhood. The number of nodes in each additional neighborhood/layer grows by a factor of `DATA_PLANE_FANOUT`. -As mentioned above, each node in a layer only has to broadcast its shreds to its neighbors and to exactly 1 node in some next-layer neighborhoods, instead of to every TVU peer in the cluster. A good way to think about this is, layer 0 starts with 1 neighborhood with fanout nodes, layer 1 adds fanout neighborhoods, each with fanout nodes and layer 2 will have `fanout * number of nodes in layer 1` and so on. +A good way to think about this is, layer 1 starts with 1 neighborhood with fanout nodes, layer 2 adds fanout neighborhoods, each with fanout nodes and layer 3 will have `fanout * number of nodes in layer 2` and so on. -This way each node only has to communicate with a maximum of `2 * DATA_PLANE_FANOUT - 1` nodes. +The following diagram shows a three layer cluster with a fanout of 2. -The following diagram shows how the Leader sends shreds with a fanout of 2 to Neighborhood 0 in Layer 0 and how the nodes in Neighborhood 0 share their data with each other. +![Two layer cluster with a Fanout of 2](/img/data-plane.svg) -![Leader sends shreds to Neighborhood 0 in Layer 0](/img/data-plane-seeding.svg) +### Configuration Values -The following diagram shows how Neighborhood 0 fans out to Neighborhoods 1 and 2. +`DATA_PLANE_FANOUT` - Determines the size of layer 1. Subsequent layers grow by a factor of `DATA_PLANE_FANOUT`. The number of nodes in a neighborhood is equal to the fanout value. Neighborhoods will fill to capacity before new ones are added, i.e if a neighborhood isn't full, it _must_ be the last one. -![Neighborhood 0 Fanout to Neighborhood 1 and 2](/img/data-plane-fanout.svg) +Currently, configuration is set when the cluster is launched. In the future, these parameters may be hosted on-chain, allowing modification on the fly as the cluster sizes change. -Finally, the following diagram shows a two layer cluster with a fanout of 2. +## Shred Propagation Flow -![Two layer cluster with a Fanout of 2](/img/data-plane.svg) +During its slot, the leader node \(layer 0\) makes its initial broadcasts to a special root node sitting atop the turbine tree. This root node is rotated every shred. The root shares data within its neighborhood \(layer 1\). Nodes in this neighborhood then retransmit shreds to one node in some neighborhoods in the next layer \(layer 2\). In general, the layer-1 root/anchor node (first node in the neighborhood, rotated on every shred) shares their data with their neighborhood peers, and every node in layer-1 retransmits to nodes in the next layer, etc, until all nodes in the cluster have received all the shreds. -### Configuration Values +As mentioned above, each node in a layer only has to broadcast its shreds to exactly 1 node in some next-layer neighborhoods (and to its neighbors if it is the anchor node), instead of to every TVU peer in the cluster. In this way, each node only has to communicate with a maximum of `2 * DATA_PLANE_FANOUT - 1` nodes if it is the anchor node and `DATA_PLANE_FANOUT` if it is not the anchor node. -`DATA_PLANE_FANOUT` - Determines the size of layer 0. Subsequent layers grow by a factor of `DATA_PLANE_FANOUT`. The number of nodes in a neighborhood is equal to the fanout value. Neighborhoods will fill to capacity before new ones are added, i.e if a neighborhood isn't full, it _must_ be the last one. +The following diagram shows how the leader sends shreds with a fanout of 2 to the root from Neighborhood 0 in Layer 1 and how the root from Neighborhood 0 shares its data with its neighbors. -Currently, configuration is set when the cluster is launched. In the future, these parameters may be hosted on-chain, allowing modification on the fly as the cluster sizes change. +![Leader sends shreds to Neighborhood 0 in Layer 1](/img/data-plane-seeding.svg) + +The following diagram shows how Neighborhood 0 fans out to Neighborhoods 1 and 2. + +![Neighborhood 0 Fanout to Neighborhood 1 and 2](/img/data-plane-fanout.svg) + +### Neighborhood Interaction + +The following diagram shows how two neighborhoods in different layers interact. To cripple a neighborhood, enough nodes \(erasure codes +1\) from the neighborhood above need to fail. Since each neighborhood receives shreds from multiple nodes in a neighborhood in the upper layer, we'd need a big network failure in the upper layers to end up with incomplete data. + +![Inner workings of a neighborhood](/img/data-plane-neighborhood.svg) ## Calculating the required FEC rate @@ -56,7 +64,7 @@ on repair to fixup the blocks. The probability of the shred group failing can be computed using the binomial distribution. If the FEC rate is `16:4`, then the group size is 20, and at least 4 of the shreds must fail for the group to fail. -Which is equal to the sum of the probability of 4 or more trails failing +Which is equal to the sum of the probability of 4 or more trials failing out of 20. Probability of a block succeeding in turbine: @@ -64,7 +72,7 @@ Probability of a block succeeding in turbine: - Probability of packet failure: `P = 1 - (1 - network_packet_loss_rate)^2` - FEC rate: `K:M` - Number of trials: `N = K + M` -- Shred group failure rate: `S = SUM of i=0 -> M for binomial(prob_failure = P, trials = N, failures = i)` +- Shred group failure rate: `S = 1 - (SUM of i=0 -> M for binomial(prob_failure = P, trials = N, failures = i))` - Shreds per block: `G` - Block success rate: `B = (1 - S) ^ (G / N)` - Binomial distribution for exactly `i` results with probability of P in N trials is defined as `(N choose i) * P^i * (1 - P)^(N-i)` @@ -79,23 +87,17 @@ With a FEC rate: `16:4` - `G = 8000` - `P = 1 - 0.85 * 0.85 = 1 - 0.7225 = 0.2775` -- `S = SUM of i=0 -> 4 for binomial(prob_failure = 0.2775, trials = 20, failures = i) = 0.689414` +- `S = 1 - (SUM of i=0 -> 4 for binomial(prob_failure = 0.2775, trials = 20, failures = i)) = 0.689414` - `B = (1 - 0.689) ^ (8000 / 20) = 10^-203` With FEC rate of `16:16` - `G = 12800` -- `S = SUM of i=0 -> 32 for binomial(prob_failure = 0.2775, trials = 64, failures = i) = 0.002132` +- `S = 1 - (SUM of i=0 -> 16 for binomial(prob_failure = 0.2775, trials = 32, failures = i)) = 0.002132` - `B = (1 - 0.002132) ^ (12800 / 32) = 0.42583` With FEC rate of `32:32` - `G = 12800` -- `S = SUM of i=0 -> 32 for binomial(prob_failure = 0.2775, trials = 64, failures = i) = 0.000048` +- `S = 1 - (SUM of i=0 -> 32 for binomial(prob_failure = 0.2775, trials = 64, failures = i)) = 0.000048` - `B = (1 - 0.000048) ^ (12800 / 64) = 0.99045` - -## Neighborhoods - -The following diagram shows how two neighborhoods in different layers interact. To cripple a neighborhood, enough nodes \(erasure codes +1\) from the neighborhood above need to fail. Since each neighborhood receives shreds from multiple nodes in a neighborhood in the upper layer, we'd need a big network failure in the upper layers to end up with incomplete data. - -![Inner workings of a neighborhood](/img/data-plane-neighborhood.svg) From 635191f5d9b920917abcc34a2bee1e29eabc60bb Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Wed, 5 Apr 2023 08:49:33 -0500 Subject: [PATCH 390/465] v1.14: Mention that the document is stale. (backport of #29769) (#31062) Mention that the document is stale. (#29769) (cherry picked from commit 62312f95a916a2edee0169ff4ef67a261280b3a5) Co-authored-by: aditya-solana <110843012+aditya-solana@users.noreply.github.com> --- docs/src/proposals/embedding-move.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/src/proposals/embedding-move.md b/docs/src/proposals/embedding-move.md index 9826220f5c7c94..2216feac6310f5 100644 --- a/docs/src/proposals/embedding-move.md +++ b/docs/src/proposals/embedding-move.md @@ -2,6 +2,8 @@ title: Embedding the Move Language --- +### This document is outdated and a new approach to support 'move' is in the works. + ## Problem Solana enables developers to write on-chain programs in general purpose programming languages such as C or Rust, but those programs contain Solana-specific mechanisms. For example, there isn't another chain that asks developers to create a Rust module with a `process_instruction(KeyedAccounts)` function. Whenever practical, Solana should offer application developers more portable options. From 3ff03065bc879e7f2ff3ee955a6ddbe04acc0e1c Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Wed, 5 Apr 2023 15:40:23 -0500 Subject: [PATCH 391/465] v1.14: Add backwards compatibility clarification on CLI tooling output (backport of #29961) (#31046) Add backwards compatibility clarification on CLI tooling output (#29961) Json output should remain consistent to avoid breaking automation; however, we want to be free to update human-reader-centric output to remove output as it becomes deprecated. (cherry picked from commit 9b13b90066c3707c3888b3a1762ea5a50d218c2c) Co-authored-by: steviez --- docs/src/developing/backwards-compatibility.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/docs/src/developing/backwards-compatibility.md b/docs/src/developing/backwards-compatibility.md index 769fbba8fa0980..252bbd2d9f6740 100644 --- a/docs/src/developing/backwards-compatibility.md +++ b/docs/src/developing/backwards-compatibility.md @@ -149,3 +149,9 @@ software releases. If a new attack vector is discovered in existing code, the above processes may be circumvented in order to rapidly deploy a fix, depending on the severity of the issue. + +#### CLI Tooling Output + +CLI tooling json output (`output --json`) compatibility will be preserved; however, output directed +for a human reader is subject to change. This includes output as well as potential help, warning, or +error messages. From 0c6eb72f5877fdf1fc83430e0793b3f6868518a9 Mon Sep 17 00:00:00 2001 From: Lijun Wang <83639177+lijunwangs@users.noreply.github.com> Date: Thu, 6 Apr 2023 09:10:32 -0700 Subject: [PATCH 392/465] fix total_connections metric (#27603) (#31069) Co-authored-by: kirill lykov --- streamer/src/nonblocking/quic.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/streamer/src/nonblocking/quic.rs b/streamer/src/nonblocking/quic.rs index 3423e8f1a51eb2..cda8fae678a63b 100644 --- a/streamer/src/nonblocking/quic.rs +++ b/streamer/src/nonblocking/quic.rs @@ -205,7 +205,6 @@ async fn setup_connection( .await { if let Ok(new_connection) = connecting_result { - stats.total_connections.fetch_add(1, Ordering::Relaxed); stats.total_new_connections.fetch_add(1, Ordering::Relaxed); let NewConnection { connection, @@ -358,6 +357,7 @@ async fn handle_connection( stats.total_streams.load(Ordering::Relaxed), stats.total_connections.load(Ordering::Relaxed), ); + stats.total_connections.fetch_add(1, Ordering::Relaxed); while !stream_exit.load(Ordering::Relaxed) { if let Ok(stream) = tokio::time::timeout( Duration::from_millis(WAIT_FOR_STREAM_TIMEOUT_MS), From 9a0bb47b4799ad866f859db9172180e6bdcb2f7d Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Fri, 7 Apr 2023 08:35:33 -0500 Subject: [PATCH 393/465] [docs] new JSON RPC API docs format (backport #29772) (#29939) * [docs] new JSON RPC API docs format (#29772) * feat: added api page * fix: api redirects * feat: websocket page and partials * feat: deprectated partials * feat: http method partials * fix: more deprecated partials * feat: codeblock component and styles * feat: api http methods page * feat: sidebar * refactor: proposal api links * refactor: internal linking * refactor: more internal links * refactor: internal link and note cards * refactor: local links * refactor: local links and auto save prettier * feat: added numNonVoteTransaction data details * fix: updated getRecentPrioritizationFees * fix: corrected wording * fix: version typo * fix: commitment links * fix: parsed response links * fix: dangling links * refactor: filter criteria * docs: removed jsonrpc-api.md file * fix: dangling links * style: removed whitespaces for CI * style: removed whitespace * style: fixed whitespaces (cherry picked from commit 9b270020f67a3e57d29cd2955a417a8220ef64c7) # Conflicts: # docs/src/developing/clients/jsonrpc-api.md # docs/src/developing/transaction_confirmation.md # docs/src/developing/versioned-transactions.md * rm docs/src/developing/clients/jsonrpc-api.md * fix docs/src/developing/versioned-transactions.md --------- Co-authored-by: Nick Frostbutter <75431177+nickfrosty@users.noreply.github.com> Co-authored-by: yihau --- docs/components/CodeDocBlock.jsx | 161 + docs/publish-docs.sh | 3 +- docs/sidebars.js | 6 +- docs/sidebars/api.js | 492 ++ .../src/api/deprecated/_getConfirmedBlock.mdx | 169 + .../api/deprecated/_getConfirmedBlocks.mdx | 71 + .../_getConfirmedBlocksWithLimit.mdx | 78 + .../_getConfirmedSignaturesForAddress2.mdx | 114 + .../deprecated/_getConfirmedTransaction.mdx | 133 + .../_getFeeCalculatorForBlockhash.mdx | 97 + .../api/deprecated/_getFeeRateGovernor.mdx | 76 + docs/src/api/deprecated/_getFees.mdx | 92 + .../api/deprecated/_getRecentBlockhash.mdx | 87 + docs/src/api/deprecated/_getSnapshotSlot.mdx | 64 + docs/src/api/http.md | 419 ++ docs/src/api/methods/_getAccountInfo.mdx | 136 + docs/src/api/methods/_getBalance.mdx | 78 + docs/src/api/methods/_getBlock.mdx | 288 + docs/src/api/methods/_getBlockCommitment.mdx | 70 + docs/src/api/methods/_getBlockHeight.mdx | 73 + docs/src/api/methods/_getBlockProduction.mdx | 97 + docs/src/api/methods/_getBlockTime.mdx | 67 + docs/src/api/methods/_getBlocks.mdx | 86 + docs/src/api/methods/_getBlocksWithLimit.mdx | 84 + docs/src/api/methods/_getClusterNodes.mdx | 71 + docs/src/api/methods/_getEpochInfo.mdx | 85 + docs/src/api/methods/_getEpochSchedule.mdx | 67 + docs/src/api/methods/_getFeeForMessage.mdx | 86 + .../api/methods/_getFirstAvailableBlock.mdx | 50 + docs/src/api/methods/_getGenesisHash.mdx | 51 + docs/src/api/methods/_getHealth.mdx | 88 + .../api/methods/_getHighestSnapshotSlot.mdx | 78 + docs/src/api/methods/_getIdentity.mdx | 55 + .../src/api/methods/_getInflationGovernor.mdx | 75 + docs/src/api/methods/_getInflationRate.mdx | 62 + docs/src/api/methods/_getInflationReward.mdx | 101 + docs/src/api/methods/_getLargestAccounts.mdx | 150 + docs/src/api/methods/_getLatestBlockhash.mdx | 92 + docs/src/api/methods/_getLeaderSchedule.mdx | 96 + .../src/api/methods/_getMaxRetransmitSlot.mdx | 48 + .../api/methods/_getMaxShredInsertSlot.mdx | 48 + .../_getMinimumBalanceForRentExemption.mdx | 67 + docs/src/api/methods/_getMultipleAccounts.mdx | 143 + docs/src/api/methods/_getProgramAccounts.mdx | 160 + .../methods/_getRecentPerformanceSamples.mdx | 103 + .../methods/_getRecentPrioritizationFees.mdx | 95 + .../src/api/methods/_getSignatureStatuses.mdx | 114 + .../api/methods/_getSignaturesForAddress.mdx | 117 + docs/src/api/methods/_getSlot.mdx | 63 + docs/src/api/methods/_getSlotLeader.mdx | 67 + docs/src/api/methods/_getSlotLeaders.mdx | 77 + docs/src/api/methods/_getStakeActivation.mdx | 95 + .../methods/_getStakeMinimumDelegation.mdx | 73 + docs/src/api/methods/_getSupply.mdx | 87 + .../api/methods/_getTokenAccountBalance.mdx | 91 + .../methods/_getTokenAccountsByDelegate.mdx | 177 + .../api/methods/_getTokenAccountsByOwner.mdx | 176 + .../api/methods/_getTokenLargestAccounts.mdx | 99 + docs/src/api/methods/_getTokenSupply.mdx | 88 + docs/src/api/methods/_getTransaction.mdx | 172 + docs/src/api/methods/_getTransactionCount.mdx | 63 + docs/src/api/methods/_getVersion.mdx | 51 + docs/src/api/methods/_getVoteAccounts.mdx | 114 + docs/src/api/methods/_isBlockhashValid.mdx | 89 + docs/src/api/methods/_minimumLedgerSlot.mdx | 52 + docs/src/api/methods/_requestAirdrop.mdx | 78 + docs/src/api/methods/_sendTransaction.mdx | 124 + docs/src/api/methods/_simulateTransaction.mdx | 174 + docs/src/api/websocket.md | 91 + docs/src/api/websocket/_accountSubscribe.mdx | 160 + .../src/api/websocket/_accountUnsubscribe.mdx | 53 + docs/src/api/websocket/_blockSubscribe.mdx | 342 + docs/src/api/websocket/_blockUnsubscribe.mdx | 53 + docs/src/api/websocket/_logsSubscribe.mdx | 130 + docs/src/api/websocket/_logsUnsubscribe.mdx | 53 + docs/src/api/websocket/_programSubscribe.mdx | 205 + .../src/api/websocket/_programUnsubscribe.mdx | 53 + docs/src/api/websocket/_rootSubscribe.mdx | 62 + docs/src/api/websocket/_rootUnsubscribe.mdx | 53 + .../src/api/websocket/_signatureSubscribe.mdx | 98 + .../api/websocket/_signatureUnsubscribe.mdx | 53 + docs/src/api/websocket/_slotSubscribe.mdx | 72 + docs/src/api/websocket/_slotUnsubscribe.mdx | 53 + .../api/websocket/_slotsUpdatesSubscribe.mdx | 86 + .../websocket/_slotsUpdatesUnsubscribe.mdx | 53 + docs/src/api/websocket/_voteSubscribe.mdx | 79 + docs/src/api/websocket/_voteUnsubscribe.mdx | 53 + docs/src/cluster/rpc-endpoints.md | 12 +- docs/src/developing/clients/javascript-api.md | 2 +- .../clients/javascript-reference.md | 4 +- docs/src/developing/clients/jsonrpc-api.md | 5490 ----------------- docs/src/developing/clients/rust-api.md | 2 +- docs/src/developing/intro/rent.md | 2 +- docs/src/developing/intro/transaction_fees.md | 2 +- .../developing/programming-model/accounts.md | 6 +- docs/src/developing/test-validator.md | 6 +- .../developing/transaction_confirmation.md | 199 + docs/src/developing/versioned-transactions.md | 2 +- docs/src/getstarted/hello-world.md | 25 +- .../rpc-transaction-history.md | 14 +- .../implemented-proposals/transaction-fees.md | 4 +- docs/src/integrations/exchange.md | 19 +- .../src/integrations/retrying-transactions.md | 16 +- docs/src/pages/CodeDocBlock.module.css | 80 + docs/src/pages/api.js | 82 + docs/src/pages/developers.js | 2 +- docs/src/running-validator/validator-stake.md | 2 +- docs/src/running-validator/validator-start.md | 21 +- docs/src/transaction_fees.md | 2 +- 109 files changed, 9388 insertions(+), 5561 deletions(-) create mode 100644 docs/components/CodeDocBlock.jsx create mode 100644 docs/sidebars/api.js create mode 100644 docs/src/api/deprecated/_getConfirmedBlock.mdx create mode 100644 docs/src/api/deprecated/_getConfirmedBlocks.mdx create mode 100644 docs/src/api/deprecated/_getConfirmedBlocksWithLimit.mdx create mode 100644 docs/src/api/deprecated/_getConfirmedSignaturesForAddress2.mdx create mode 100644 docs/src/api/deprecated/_getConfirmedTransaction.mdx create mode 100644 docs/src/api/deprecated/_getFeeCalculatorForBlockhash.mdx create mode 100644 docs/src/api/deprecated/_getFeeRateGovernor.mdx create mode 100644 docs/src/api/deprecated/_getFees.mdx create mode 100644 docs/src/api/deprecated/_getRecentBlockhash.mdx create mode 100644 docs/src/api/deprecated/_getSnapshotSlot.mdx create mode 100644 docs/src/api/http.md create mode 100644 docs/src/api/methods/_getAccountInfo.mdx create mode 100644 docs/src/api/methods/_getBalance.mdx create mode 100644 docs/src/api/methods/_getBlock.mdx create mode 100644 docs/src/api/methods/_getBlockCommitment.mdx create mode 100644 docs/src/api/methods/_getBlockHeight.mdx create mode 100644 docs/src/api/methods/_getBlockProduction.mdx create mode 100644 docs/src/api/methods/_getBlockTime.mdx create mode 100644 docs/src/api/methods/_getBlocks.mdx create mode 100644 docs/src/api/methods/_getBlocksWithLimit.mdx create mode 100644 docs/src/api/methods/_getClusterNodes.mdx create mode 100644 docs/src/api/methods/_getEpochInfo.mdx create mode 100644 docs/src/api/methods/_getEpochSchedule.mdx create mode 100644 docs/src/api/methods/_getFeeForMessage.mdx create mode 100644 docs/src/api/methods/_getFirstAvailableBlock.mdx create mode 100644 docs/src/api/methods/_getGenesisHash.mdx create mode 100644 docs/src/api/methods/_getHealth.mdx create mode 100644 docs/src/api/methods/_getHighestSnapshotSlot.mdx create mode 100644 docs/src/api/methods/_getIdentity.mdx create mode 100644 docs/src/api/methods/_getInflationGovernor.mdx create mode 100644 docs/src/api/methods/_getInflationRate.mdx create mode 100644 docs/src/api/methods/_getInflationReward.mdx create mode 100644 docs/src/api/methods/_getLargestAccounts.mdx create mode 100644 docs/src/api/methods/_getLatestBlockhash.mdx create mode 100644 docs/src/api/methods/_getLeaderSchedule.mdx create mode 100644 docs/src/api/methods/_getMaxRetransmitSlot.mdx create mode 100644 docs/src/api/methods/_getMaxShredInsertSlot.mdx create mode 100644 docs/src/api/methods/_getMinimumBalanceForRentExemption.mdx create mode 100644 docs/src/api/methods/_getMultipleAccounts.mdx create mode 100644 docs/src/api/methods/_getProgramAccounts.mdx create mode 100644 docs/src/api/methods/_getRecentPerformanceSamples.mdx create mode 100644 docs/src/api/methods/_getRecentPrioritizationFees.mdx create mode 100644 docs/src/api/methods/_getSignatureStatuses.mdx create mode 100644 docs/src/api/methods/_getSignaturesForAddress.mdx create mode 100644 docs/src/api/methods/_getSlot.mdx create mode 100644 docs/src/api/methods/_getSlotLeader.mdx create mode 100644 docs/src/api/methods/_getSlotLeaders.mdx create mode 100644 docs/src/api/methods/_getStakeActivation.mdx create mode 100644 docs/src/api/methods/_getStakeMinimumDelegation.mdx create mode 100644 docs/src/api/methods/_getSupply.mdx create mode 100644 docs/src/api/methods/_getTokenAccountBalance.mdx create mode 100644 docs/src/api/methods/_getTokenAccountsByDelegate.mdx create mode 100644 docs/src/api/methods/_getTokenAccountsByOwner.mdx create mode 100644 docs/src/api/methods/_getTokenLargestAccounts.mdx create mode 100644 docs/src/api/methods/_getTokenSupply.mdx create mode 100644 docs/src/api/methods/_getTransaction.mdx create mode 100644 docs/src/api/methods/_getTransactionCount.mdx create mode 100644 docs/src/api/methods/_getVersion.mdx create mode 100644 docs/src/api/methods/_getVoteAccounts.mdx create mode 100644 docs/src/api/methods/_isBlockhashValid.mdx create mode 100644 docs/src/api/methods/_minimumLedgerSlot.mdx create mode 100644 docs/src/api/methods/_requestAirdrop.mdx create mode 100644 docs/src/api/methods/_sendTransaction.mdx create mode 100644 docs/src/api/methods/_simulateTransaction.mdx create mode 100644 docs/src/api/websocket.md create mode 100644 docs/src/api/websocket/_accountSubscribe.mdx create mode 100644 docs/src/api/websocket/_accountUnsubscribe.mdx create mode 100644 docs/src/api/websocket/_blockSubscribe.mdx create mode 100644 docs/src/api/websocket/_blockUnsubscribe.mdx create mode 100644 docs/src/api/websocket/_logsSubscribe.mdx create mode 100644 docs/src/api/websocket/_logsUnsubscribe.mdx create mode 100644 docs/src/api/websocket/_programSubscribe.mdx create mode 100644 docs/src/api/websocket/_programUnsubscribe.mdx create mode 100644 docs/src/api/websocket/_rootSubscribe.mdx create mode 100644 docs/src/api/websocket/_rootUnsubscribe.mdx create mode 100644 docs/src/api/websocket/_signatureSubscribe.mdx create mode 100644 docs/src/api/websocket/_signatureUnsubscribe.mdx create mode 100644 docs/src/api/websocket/_slotSubscribe.mdx create mode 100644 docs/src/api/websocket/_slotUnsubscribe.mdx create mode 100644 docs/src/api/websocket/_slotsUpdatesSubscribe.mdx create mode 100644 docs/src/api/websocket/_slotsUpdatesUnsubscribe.mdx create mode 100644 docs/src/api/websocket/_voteSubscribe.mdx create mode 100644 docs/src/api/websocket/_voteUnsubscribe.mdx delete mode 100644 docs/src/developing/clients/jsonrpc-api.md create mode 100644 docs/src/developing/transaction_confirmation.md create mode 100644 docs/src/pages/CodeDocBlock.module.css create mode 100644 docs/src/pages/api.js diff --git a/docs/components/CodeDocBlock.jsx b/docs/components/CodeDocBlock.jsx new file mode 100644 index 00000000000000..bd0099b99e7830 --- /dev/null +++ b/docs/components/CodeDocBlock.jsx @@ -0,0 +1,161 @@ +import React from "react"; +import Link from "@docusaurus/Link"; +// import clsx from "clsx"; +import styles from "../src/pages/CodeDocBlock.module.css"; + +export function DocBlock({ children }) { + return
    {children}
    ; +} + +export function DocSideBySide({ children }) { + return
    {children}
    ; +} + +export function CodeParams({ children }) { + return
    {children}
    ; +} + +export function CodeSnippets({ children }) { + return ( +
    + {/*

    Code Sample:

    */} + + {children} +
    + ); +} + +/* + Display a single Parameter +*/ +export function Parameter(props) { + const { + name = null, + type = null, + required = null, + optional = null, + children, + } = computeHeader(props); + + return ( +
    +

    + {name && name} {type && type} {required && required}{" "} + {optional && optional} +

    + + {children} +
    + ); +} + +/* + Display a single Parameter's field data +*/ +export function Field(props) { + const { + name = null, + type = null, + values = null, + required = null, + defaultValue = null, + optional = null, + children, + } = computeHeader(props); + + return ( +
    +

    + {name && name} {type && type} {required && required}{" "} + {optional && optional} + {defaultValue && defaultValue} +

    + +
    + {values && values} + + {children} +
    +
    + ); +} + +/* + Parse an array of string values to display +*/ +export function Values({ values = null }) { + // format the Parameter's values + if (values && Array.isArray(values) && values?.length) { + values = values.map((value) => ( + + {value} + + )); + } + + return ( +

    + Values: {values} +

    + ); +} + +/* + Compute the formatted Parameter and Field component's header meta data +*/ +function computeHeader({ + name = null, + type = null, + href = null, + values = null, + required = null, + defaultValue = null, + optional = null, + children, +}) { + // format the Parameter's name + if (name) { + name = {name}; + + if (href) name = {name}; + } + + // format the Parameter's type + if (type) type = {type}; + + // format the Parameter's values + if (values && Array.isArray(values)) { + values = values.map((value) => ( + {value} + )); + } + + // format the `defaultValue` flag + if (defaultValue) { + defaultValue = ( + + Default: {defaultValue.toString()} + + ); + } + + // format the `required` flag + if (required) { + required = required; + } + // format the `optional` flag + else if (optional) { + optional = optional; + } + + return { + name, + type, + href, + values, + required, + defaultValue, + optional, + children, + }; +} diff --git a/docs/publish-docs.sh b/docs/publish-docs.sh index 2a6002871b8f31..811dea1eb491f7 100755 --- a/docs/publish-docs.sh +++ b/docs/publish-docs.sh @@ -38,7 +38,8 @@ cat > "$CONFIG_FILE" < + +## getConfirmedBlock + +:::warning DEPRECATED +This method is expected to be removed in solana-core v2.0. +**Please use [getBlock](#getblock) instead** +::: + +Returns identity and transaction information about a confirmed block in the ledger + + + + + +### Parameters: + + + slot number, as u64 integer + + + + +Configuration object containing the following fields: + + + + + level of transaction detail to return, either "full", "signatures", or "none" + + + + whether to populate the `rewards` array. + + + + +Encoding format for Account data + + + +
    + +- `jsonParsed` encoding attempts to use program-specific instruction parsers to return + more human-readable and explicit data in the `transaction.message.instructions` list. +- If `jsonParsed` is requested but a parser cannot be found, the instruction + falls back to regular JSON encoding (`accounts`, `data`, and `programIdIndex` fields). + +
    + +
    + +
    + +### Result: + +The result field will be an object with the following fields: + +- `` - if specified block is not confirmed +- `` - if block is confirmed, an object with the following fields: + - `blockhash: ` - the blockhash of this block, as base-58 encoded string + - `previousBlockhash: ` - the blockhash of this block's parent, as base-58 encoded string; if the parent block is not available due to ledger cleanup, this field will return "11111111111111111111111111111111" + - `parentSlot: ` - the slot index of this block's parent + - `transactions: ` - present if "full" transaction details are requested; an array of JSON objects containing: + - `transaction: ` - [Transaction](#transaction-structure) object, either in JSON format or encoded binary data, depending on encoding parameter + - `meta: ` - transaction status metadata object, containing `null` or: + - `err: ` - Error if transaction failed, null if transaction succeeded. [TransactionError definitions](https://github.com/solana-labs/solana/blob/c0c60386544ec9a9ec7119229f37386d9f070523/sdk/src/transaction/error.rs#L13) + - `fee: ` - fee this transaction was charged, as u64 integer + - `preBalances: ` - array of u64 account balances from before the transaction was processed + - `postBalances: ` - array of u64 account balances after the transaction was processed + - `innerInstructions: ` - List of [inner instructions](#inner-instructions-structure) or `null` if inner instruction recording was not enabled during this transaction + - `preTokenBalances: ` - List of [token balances](#token-balances-structure) from before the transaction was processed or omitted if token balance recording was not yet enabled during this transaction + - `postTokenBalances: ` - List of [token balances](#token-balances-structure) from after the transaction was processed or omitted if token balance recording was not yet enabled during this transaction + - `logMessages: ` - array of string log messages or `null` if log message recording was not enabled during this transaction + - DEPRECATED: `status: ` - Transaction status + - `"Ok": ` - Transaction was successful + - `"Err": ` - Transaction failed with TransactionError + - `signatures: ` - present if "signatures" are requested for transaction details; an array of signatures strings, corresponding to the transaction order in the block + - `rewards: ` - present if rewards are requested; an array of JSON objects containing: + - `pubkey: ` - The public key, as base-58 encoded string, of the account that received the reward + - `lamports: `- number of reward lamports credited or debited by the account, as a i64 + - `postBalance: ` - account balance in lamports after the reward was applied + - `rewardType: ` - type of reward: "fee", "rent", "voting", "staking" + - `commission: ` - vote account commission when the reward was credited, only present for voting and staking rewards + - `blockTime: ` - estimated production time, as Unix timestamp (seconds since the Unix epoch). null if not available + +#### For more details on returned data: + +- [Transaction Structure](#transaction-structure) +- [Inner Instructions Structure](#inner-instructions-structure) +- [Token Balances Structure](#token-balances-structure) + + + + + +### Code sample: + +```bash +curl http://localhost:8899 -X POST -H "Content-Type: application/json" -d ' + { + "jsonrpc": "2.0", "id": 1, + "method": "getConfirmedBlock", + "params": [430, "base64"] + } +' +``` + +### Response: + +```json +{ + "jsonrpc": "2.0", + "result": { + "blockTime": null, + "blockhash": "3Eq21vXNB5s86c62bVuUfTeaMif1N2kUqRPBmGRJhyTA", + "parentSlot": 429, + "previousBlockhash": "mfcyqEXB3DnHXki6KjjmZck6YjmZLvpAByy2fj4nh6B", + "rewards": [], + "transactions": [ + { + "meta": { + "err": null, + "fee": 5000, + "innerInstructions": [], + "logMessages": [], + "postBalances": [499998932500, 26858640, 1, 1, 1], + "postTokenBalances": [], + "preBalances": [499998937500, 26858640, 1, 1, 1], + "preTokenBalances": [], + "status": { + "Ok": null + } + }, + "transaction": [ + "AVj7dxHlQ9IrvdYVIjuiRFs1jLaDMHixgrv+qtHBwz51L4/ImLZhszwiyEJDIp7xeBSpm/TX5B7mYzxa+fPOMw0BAAMFJMJVqLw+hJYheizSoYlLm53KzgT82cDVmazarqQKG2GQsLgiqktA+a+FDR4/7xnDX7rsusMwryYVUdixfz1B1Qan1RcZLwqvxvJl4/t3zHragsUp0L47E24tAFUgAAAABqfVFxjHdMkoVmOYaR1etoteuKObS21cc1VbIQAAAAAHYUgdNXR0u3xNdiTr072z2DVec9EQQ/wNo1OAAAAAAAtxOUhPBp2WSjUNJEgfvy70BbxI00fZyEPvFHNfxrtEAQQEAQIDADUCAAAAAQAAAAAAAACtAQAAAAAAAAdUE18R96XTJCe+YfRfUp6WP+YKCy/72ucOL8AoBFSpAA==", + "base64" + ] + } + ] + }, + "id": 1 +} +``` + + + + diff --git a/docs/src/api/deprecated/_getConfirmedBlocks.mdx b/docs/src/api/deprecated/_getConfirmedBlocks.mdx new file mode 100644 index 00000000000000..5a6b21c12aa8a8 --- /dev/null +++ b/docs/src/api/deprecated/_getConfirmedBlocks.mdx @@ -0,0 +1,71 @@ +import { + DocBlock, + DocSideBySide, + CodeParams, + Parameter, + Field, + Values, + CodeSnippets, +} from "../../../components/CodeDocBlock"; + + + +## getConfirmedBlocks + +:::warning DEPRECATED +This method is expected to be removed in solana-core v2.0 +**Please use [getBlocks](#getblocks) instead** +::: + +Returns a list of confirmed blocks between two slots + + + + + +### Parameters: + + + start_slot, as u64 integer + + + + +Configuration object containing the following fields: + + + + + +### Result: + +The result field will be an array of u64 integers listing confirmed blocks +between `start_slot` and either `end_slot` - if provided, or latest confirmed block, +inclusive. Max range allowed is 500,000 slots. + + + + + +### Code sample: + +```bash +curl http://localhost:8899 -X POST -H "Content-Type: application/json" -d ' + {"jsonrpc": "2.0","id":1,"method":"getConfirmedBlocks","params":[5, 10]} +' +``` + +### Response: + +```json +{ "jsonrpc": "2.0", "result": [5, 6, 7, 8, 9, 10], "id": 1 } +``` + + + + diff --git a/docs/src/api/deprecated/_getConfirmedBlocksWithLimit.mdx b/docs/src/api/deprecated/_getConfirmedBlocksWithLimit.mdx new file mode 100644 index 00000000000000..3daec0abc25a37 --- /dev/null +++ b/docs/src/api/deprecated/_getConfirmedBlocksWithLimit.mdx @@ -0,0 +1,78 @@ +import { + DocBlock, + DocSideBySide, + CodeParams, + Parameter, + Field, + Values, + CodeSnippets, +} from "../../../components/CodeDocBlock"; + + + +## getConfirmedBlocksWithLimit + +:::warning DEPRECATED +This method is expected to be removed in solana-core v2.0 +**Please use [getBlocksWithLimit](#getblockswithlimit) instead** +::: + +Returns a list of confirmed blocks starting at the given slot + + + + + +### Parameters: + + + start_slot, as u64 integer + + + + limit, as u64 integer + + + + +Configuration object containing the following fields: + + + + + +### Result: + +The result field will be an array of u64 integers listing confirmed blocks +starting at `start_slot` for up to `limit` blocks, inclusive. + + + + + +### Code sample: + +```bash +curl http://localhost:8899 -X POST -H "Content-Type: application/json" -d ' + { + "jsonrpc": "2.0", "id": 1, + "method": "getConfirmedBlocksWithLimit", + "params": [5, 3] + } +' +``` + +### Response: + +```json +{ "jsonrpc": "2.0", "result": [5, 6, 7], "id": 1 } +``` + + + + diff --git a/docs/src/api/deprecated/_getConfirmedSignaturesForAddress2.mdx b/docs/src/api/deprecated/_getConfirmedSignaturesForAddress2.mdx new file mode 100644 index 00000000000000..7d8c803d061544 --- /dev/null +++ b/docs/src/api/deprecated/_getConfirmedSignaturesForAddress2.mdx @@ -0,0 +1,114 @@ +import { + DocBlock, + DocSideBySide, + CodeParams, + Parameter, + Field, + Values, + CodeSnippets, +} from "../../../components/CodeDocBlock"; + + + +## getConfirmedSignaturesForAddress2 + +:::warning DEPRECATED +This method is expected to be removed in solana-core v2.0 +**Please use [getSignaturesForAddress](#getsignaturesforaddress) instead** +::: + +Returns signatures for confirmed transactions that include the given address in +their `accountKeys` list. Returns signatures backwards in time from the +provided signature or most recent confirmed block + + + + + +### Parameters: + + + account address, as base-58 encoded string + + + +Configuration object containing the following fields: + + + + + maximum transaction signatures to return (between 1 and 1,000, default: + 1,000). + + + + start searching backwards from this transaction signature. (If not provided + the search starts from the top of the highest max confirmed block.) + + + + search until this transaction signature, if found before limit reached. + + + + +### Result: + +The result field will be an array of ``, ordered +from newest to oldest transaction, containing transaction signature information with the following fields: + +- `signature: ` - transaction signature as base-58 encoded string +- `slot: ` - The slot that contains the block with the transaction +- `err: ` - Error if transaction failed, null if transaction succeeded. [TransactionError definitions](https://github.com/solana-labs/solana/blob/c0c60386544ec9a9ec7119229f37386d9f070523/sdk/src/transaction/error.rs#L13) +- `memo: ` - Memo associated with the transaction, null if no memo is present +- `blockTime: ` - estimated production time, as Unix timestamp (seconds since the Unix epoch) of when transaction was processed. null if not available. + + + + + +### Code sample: + +```bash +curl http://localhost:8899 -X POST -H "Content-Type: application/json" -d ' + { + "jsonrpc": "2.0", + "id": 1, + "method": "getConfirmedSignaturesForAddress2", + "params": [ + "Vote111111111111111111111111111111111111111", + { + "limit": 1 + } + ] + } +' +``` + +### Response: + +```json +{ + "jsonrpc": "2.0", + "result": [ + { + "err": null, + "memo": null, + "signature": "5h6xBEauJ3PK6SWCZ1PGjBvj8vDdWG3KpwATGy1ARAXFSDwt8GFXM7W5Ncn16wmqokgpiKRLuS83KUxyZyv2sUYv", + "slot": 114, + "blockTime": null + } + ], + "id": 1 +} +``` + + + + diff --git a/docs/src/api/deprecated/_getConfirmedTransaction.mdx b/docs/src/api/deprecated/_getConfirmedTransaction.mdx new file mode 100644 index 00000000000000..9586975df62c6e --- /dev/null +++ b/docs/src/api/deprecated/_getConfirmedTransaction.mdx @@ -0,0 +1,133 @@ +import { + DocBlock, + DocSideBySide, + CodeParams, + Parameter, + Field, + Values, + CodeSnippets, +} from "../../../components/CodeDocBlock"; + + + +## getConfirmedTransaction + +:::warning DEPRECATED +This method is expected to be removed in solana-core v2.0 +**Please use [getTransaction](#gettransaction) instead** +::: + +Returns transaction details for a confirmed transaction + + + + + +### Parameters: + + + transaction signature, as base-58 encoded string + + + + +Configuration object containing the following fields: + + + + + +Encoding format for Account data + + + +
    + +- `base58` is slow and limited to less than 129 bytes of Account data. +- `jsonParsed` encoding attempts to use program-specific instruction parsers + to return more human-readable and explicit data in the `transaction.message.instructions` list. +- If `jsonParsed` is requested but a parser cannot be found, the instruction + falls back to regular `json` encoding (`accounts`, `data`, and `programIdIndex` fields). + +
    + +
    + +
    + +### Result: + +- `` - if transaction is not found or not confirmed +- `` - if transaction is confirmed, an object with the following fields: + - `slot: ` - the slot this transaction was processed in + - `transaction: ` - [Transaction](#transaction-structure) object, either in JSON format or encoded binary data, depending on encoding parameter + - `blockTime: ` - estimated production time, as Unix timestamp (seconds since the Unix epoch) of when the transaction was processed. null if not available + - `meta: ` - transaction status metadata object: + - `err: ` - Error if transaction failed, null if transaction succeeded. [TransactionError definitions](https://docs.rs/solana-sdk/VERSION_FOR_DOCS_RS/solana_sdk/transaction/enum.TransactionError.html) + - `fee: ` - fee this transaction was charged, as u64 integer + - `preBalances: ` - array of u64 account balances from before the transaction was processed + - `postBalances: ` - array of u64 account balances after the transaction was processed + - `innerInstructions: ` - List of [inner instructions](#inner-instructions-structure) or `null` if inner instruction recording was not enabled during this transaction + - `preTokenBalances: ` - List of [token balances](#token-balances-structure) from before the transaction was processed or omitted if token balance recording was not yet enabled during this transaction + - `postTokenBalances: ` - List of [token balances](#token-balances-structure) from after the transaction was processed or omitted if token balance recording was not yet enabled during this transaction + - `logMessages: ` - array of string log messages or `null` if log message recording was not enabled during this transaction + - DEPRECATED: `status: ` - Transaction status + - `"Ok": ` - Transaction was successful + - `"Err": ` - Transaction failed with TransactionError + + + + + +### Code sample: + +```bash +curl http://localhost:8899 -X POST -H "Content-Type: application/json" -d ' + { + "jsonrpc": "2.0", + "id": 1, + "method": "getConfirmedTransaction", + "params": [ + "2nBhEBYYvfaAe16UMNqRHre4YNSskvuYgx3M6E4JP1oDYvZEJHvoPzyUidNgNX5r9sTyN1J9UxtbCXy2rqYcuyuv", + "base64" + ] + } +' +``` + +### Response: + +```json +{ + "jsonrpc": "2.0", + "result": { + "meta": { + "err": null, + "fee": 5000, + "innerInstructions": [], + "postBalances": [499998932500, 26858640, 1, 1, 1], + "postTokenBalances": [], + "preBalances": [499998937500, 26858640, 1, 1, 1], + "preTokenBalances": [], + "status": { + "Ok": null + } + }, + "slot": 430, + "transaction": [ + "AVj7dxHlQ9IrvdYVIjuiRFs1jLaDMHixgrv+qtHBwz51L4/ImLZhszwiyEJDIp7xeBSpm/TX5B7mYzxa+fPOMw0BAAMFJMJVqLw+hJYheizSoYlLm53KzgT82cDVmazarqQKG2GQsLgiqktA+a+FDR4/7xnDX7rsusMwryYVUdixfz1B1Qan1RcZLwqvxvJl4/t3zHragsUp0L47E24tAFUgAAAABqfVFxjHdMkoVmOYaR1etoteuKObS21cc1VbIQAAAAAHYUgdNXR0u3xNdiTr072z2DVec9EQQ/wNo1OAAAAAAAtxOUhPBp2WSjUNJEgfvy70BbxI00fZyEPvFHNfxrtEAQQEAQIDADUCAAAAAQAAAAAAAACtAQAAAAAAAAdUE18R96XTJCe+YfRfUp6WP+YKCy/72ucOL8AoBFSpAA==", + "base64" + ] + }, + "id": 1 +} +``` + + + + diff --git a/docs/src/api/deprecated/_getFeeCalculatorForBlockhash.mdx b/docs/src/api/deprecated/_getFeeCalculatorForBlockhash.mdx new file mode 100644 index 00000000000000..66b0d954ee5581 --- /dev/null +++ b/docs/src/api/deprecated/_getFeeCalculatorForBlockhash.mdx @@ -0,0 +1,97 @@ +import { + DocBlock, + DocSideBySide, + CodeParams, + Parameter, + Field, + Values, + CodeSnippets, +} from "../../../components/CodeDocBlock"; + + + +## getFeeCalculatorForBlockhash + +:::warning DEPRECATED +This method is expected to be removed in solana-core v2.0 +**Please use [isBlockhashValid](#isblockhashvalid) or [getFeeForMessage](#getfeeformessage) instead** +::: + +Returns the fee calculator associated with the query blockhash, or `null` if the blockhash has expired + + + + + +### Parameters: + + + query blockhash, as a base-58 encoded string + + + + +Configuration object containing the following fields: + + + + + The minimum slot that the request can be evaluated at + + + + +### Result: + +The result will be an RpcResponse JSON object with `value` equal to: + +- `` - if the query blockhash has expired; or +- `` - otherwise, a JSON object containing: + - `feeCalculator: ` - `FeeCalculator` object describing the cluster fee rate at the queried blockhash + + + + + +### Code sample: + +```bash +curl http://localhost:8899 -X POST -H "Content-Type: application/json" -d ' + { + "jsonrpc": "2.0", + "id": 1, + "method": "getFeeCalculatorForBlockhash", + "params": [ + "GJxqhuxcgfn5Tcj6y3f8X4FeCDd2RQ6SnEMo1AAxrPRZ" + ] + } +' +``` + +### Response: + +```json +{ + "jsonrpc": "2.0", + "result": { + "context": { + "slot": 221 + }, + "value": { + "feeCalculator": { + "lamportsPerSignature": 5000 + } + } + }, + "id": 1 +} +``` + + + + diff --git a/docs/src/api/deprecated/_getFeeRateGovernor.mdx b/docs/src/api/deprecated/_getFeeRateGovernor.mdx new file mode 100644 index 00000000000000..e7b87cda19b981 --- /dev/null +++ b/docs/src/api/deprecated/_getFeeRateGovernor.mdx @@ -0,0 +1,76 @@ +import { + DocBlock, + DocSideBySide, + CodeParams, + Parameter, + Field, + Values, + CodeSnippets, +} from "../../../components/CodeDocBlock"; + + + +## getFeeRateGovernor + +:::warning DEPRECATED +This method is expected to be removed in solana-core v2.0 +::: + +Returns the fee rate governor information from the root bank + + + + + +### Parameters: + +**None** + +### Result: + +The result will be an RpcResponse JSON object with `value` equal to an `object` with the following fields: + +- `burnPercent: ` - Percentage of fees collected to be destroyed +- `maxLamportsPerSignature: ` - Largest value `lamportsPerSignature` can attain for the next slot +- `minLamportsPerSignature: ` - Smallest value `lamportsPerSignature` can attain for the next slot +- `targetLamportsPerSignature: ` - Desired fee rate for the cluster +- `targetSignaturesPerSlot: ` - Desired signature rate for the cluster + + + + + +### Code sample: + +```bash +curl http://localhost:8899 -X POST -H "Content-Type: application/json" -d ' + {"jsonrpc":"2.0","id":1, "method":"getFeeRateGovernor"} +' +``` + +### Response: + +```json +{ + "jsonrpc": "2.0", + "result": { + "context": { + "slot": 54 + }, + "value": { + "feeRateGovernor": { + "burnPercent": 50, + "maxLamportsPerSignature": 100000, + "minLamportsPerSignature": 5000, + "targetLamportsPerSignature": 10000, + "targetSignaturesPerSlot": 20000 + } + } + }, + "id": 1 +} +``` + + + + diff --git a/docs/src/api/deprecated/_getFees.mdx b/docs/src/api/deprecated/_getFees.mdx new file mode 100644 index 00000000000000..62cd33745483ef --- /dev/null +++ b/docs/src/api/deprecated/_getFees.mdx @@ -0,0 +1,92 @@ +import { + DocBlock, + DocSideBySide, + CodeParams, + Parameter, + Field, + Values, + CodeSnippets, +} from "../../../components/CodeDocBlock"; + + + +## getFees + +:::warning DEPRECATED +This method is expected to be removed in solana-core v2.0 +**Please use [getFeeForMessage](#getfeeformessage) instead** +::: + +Returns a recent block hash from the ledger, a fee schedule that can be used to +compute the cost of submitting a transaction using it, and the last slot in +which the blockhash will be valid. + + + + + +### Parameters: + + + Pubkey of account to query, as base-58 encoded string + + + + +Configuration object containing the following fields: + + + + + +### Result: + +The result will be an RpcResponse JSON object with `value` set to a JSON object with the following fields: + +- `blockhash: ` - a Hash as base-58 encoded string +- `feeCalculator: ` - FeeCalculator object, the fee schedule for this block hash +- `lastValidSlot: ` - DEPRECATED - this value is inaccurate and should not be relied upon +- `lastValidBlockHeight: ` - last [block height](../../terminology.md#block-height) at which the blockhash will be valid + + + + + +### Code sample: + +```bash +curl http://localhost:8899 -X POST -H "Content-Type: application/json" -d ' + { "jsonrpc":"2.0", "id": 1, "method":"getFees"} +' +``` + +### Response: + +```json +{ + "jsonrpc": "2.0", + "result": { + "context": { + "slot": 1 + }, + "value": { + "blockhash": "CSymwgTNX1j3E4qhKfJAUE41nBWEwXufoYryPbkde5RR", + "feeCalculator": { + "lamportsPerSignature": 5000 + }, + "lastValidSlot": 297, + "lastValidBlockHeight": 296 + } + }, + "id": 1 +} +``` + + + + diff --git a/docs/src/api/deprecated/_getRecentBlockhash.mdx b/docs/src/api/deprecated/_getRecentBlockhash.mdx new file mode 100644 index 00000000000000..456685c3ddf603 --- /dev/null +++ b/docs/src/api/deprecated/_getRecentBlockhash.mdx @@ -0,0 +1,87 @@ +import { + DocBlock, + DocSideBySide, + CodeParams, + Parameter, + Field, + Values, + CodeSnippets, +} from "../../../components/CodeDocBlock"; + + + +## getRecentBlockhash + +:::warning DEPRECATED +This method is expected to be removed in solana-core v2.0 +**Please use [getLatestBlockhash](#getlatestblockhash) instead** +::: + +Returns a recent block hash from the ledger, and a fee schedule that can be used to compute the cost of submitting a transaction using it. + + + + + +### Parameters: + + + Pubkey of account to query, as base-58 encoded string + + + + +Configuration object containing the following fields: + + + + + +### Result: + +An RpcResponse containing a JSON object consisting of a string blockhash and FeeCalculator JSON object. + +- `RpcResponse` - RpcResponse JSON object with `value` field set to a JSON object including: +- `blockhash: ` - a Hash as base-58 encoded string +- `feeCalculator: ` - FeeCalculator object, the fee schedule for this block hash + + + + + +### Code sample: + +```bash +curl http://localhost:8899 -X POST -H "Content-Type: application/json" -d ' + {"jsonrpc":"2.0","id":1, "method":"getRecentBlockhash"} +' +``` + +### Response: + +```json +{ + "jsonrpc": "2.0", + "result": { + "context": { + "slot": 1 + }, + "value": { + "blockhash": "CSymwgTNX1j3E4qhKfJAUE41nBWEwXufoYryPbkde5RR", + "feeCalculator": { + "lamportsPerSignature": 5000 + } + } + }, + "id": 1 +} +``` + + + + diff --git a/docs/src/api/deprecated/_getSnapshotSlot.mdx b/docs/src/api/deprecated/_getSnapshotSlot.mdx new file mode 100644 index 00000000000000..42ee186d5c3325 --- /dev/null +++ b/docs/src/api/deprecated/_getSnapshotSlot.mdx @@ -0,0 +1,64 @@ +import { + DocBlock, + DocSideBySide, + CodeParams, + Parameter, + Field, + Values, + CodeSnippets, +} from "../../../components/CodeDocBlock"; + + + +## getSnapshotSlot + +:::warning DEPRECATED +This method is expected to be removed in solana-core v2.0 +**Please use [getHighestSnapshotSlot](#gethighestsnapshotslot) instead** +::: + +Returns the highest slot that the node has a snapshot for + + + + + +### Parameters: + +**None** + +### Result: + +`` - Snapshot slot + + + + + +### Code sample: + +```bash +curl http://localhost:8899 -X POST -H "Content-Type: application/json" -d ' + {"jsonrpc":"2.0","id":1, "method":"getSnapshotSlot"} +' +``` + +### Response: + +```json +{ "jsonrpc": "2.0", "result": 100, "id": 1 } +``` + +Result when the node has no snapshot: + +```json +{ + "jsonrpc": "2.0", + "error": { "code": -32008, "message": "No snapshot" }, + "id": 1 +} +``` + + + + diff --git a/docs/src/api/http.md b/docs/src/api/http.md new file mode 100644 index 00000000000000..63163fbfa4ccdf --- /dev/null +++ b/docs/src/api/http.md @@ -0,0 +1,419 @@ +--- +title: JSON RPC HTTP Methods +displayed_sidebar: apiHttpMethodsSidebar +hide_table_of_contents: true +--- + +Solana nodes accept HTTP requests using the [JSON-RPC 2.0](https://www.jsonrpc.org/specification) specification. + +:::info +For JavaScript applications, use the [@solana/web3.js](https://github.com/solana-labs/solana-web3.js) library as a convenient interface for the RPC methods to interact with a Solana node. + +For an PubSub connection to a Solana node, use the [Websocket API](./websocket.md). +::: + +## RPC HTTP Endpoint + +**Default port:** 8899 e.g. [http://localhost:8899](http://localhost:8899), [http://192.168.1.88:8899](http://192.168.1.88:8899) + +## Request Formatting + +To make a JSON-RPC request, send an HTTP POST request with a `Content-Type: application/json` header. The JSON request data should contain 4 fields: + +- `jsonrpc: ` - set to `"2.0"` +- `id: ` - a unique client-generated identifying integer +- `method: ` - a string containing the method to be invoked +- `params: ` - a JSON array of ordered parameter values + +Example using curl: + +```bash +curl http://localhost:8899 -X POST -H "Content-Type: application/json" -d ' + { + "jsonrpc": "2.0", + "id": 1, + "method": "getBalance", + "params": [ + "83astBRguLMdt2h5U1Tpdq5tjFoJ6noeGwaY3mDLVcri" + ] + } +' +``` + +The response output will be a JSON object with the following fields: + +- `jsonrpc: ` - matching the request specification +- `id: ` - matching the request identifier +- `result: ` - requested data or success confirmation + +Requests can be sent in batches by sending an array of JSON-RPC request objects as the data for a single POST. + +## Definitions + +- Hash: A SHA-256 hash of a chunk of data. +- Pubkey: The public key of a Ed25519 key-pair. +- Transaction: A list of Solana instructions signed by a client keypair to authorize those actions. +- Signature: An Ed25519 signature of transaction's payload data including instructions. This can be used to identify transactions. + +## Configuring State Commitment + +For preflight checks and transaction processing, Solana nodes choose which bank +state to query based on a commitment requirement set by the client. The +commitment describes how finalized a block is at that point in time. When +querying the ledger state, it's recommended to use lower levels of commitment +to report progress and higher levels to ensure the state will not be rolled back. + +In descending order of commitment (most finalized to least finalized), clients +may specify: + +- `"finalized"` - the node will query the most recent block confirmed by supermajority + of the cluster as having reached maximum lockout, meaning the cluster has + recognized this block as finalized +- `"confirmed"` - the node will query the most recent block that has been voted on by supermajority of the cluster. + - It incorporates votes from gossip and replay. + - It does not count votes on descendants of a block, only direct votes on that block. + - This confirmation level also upholds "optimistic confirmation" guarantees in + release 1.3 and onwards. +- `"processed"` - the node will query its most recent block. Note that the block + may still be skipped by the cluster. + +For processing many dependent transactions in series, it's recommended to use +`"confirmed"` commitment, which balances speed with rollback safety. +For total safety, it's recommended to use`"finalized"` commitment. + +#### Example + +The commitment parameter should be included as the last element in the `params` array: + +```bash +curl http://localhost:8899 -X POST -H "Content-Type: application/json" -d ' + { + "jsonrpc": "2.0", + "id": 1, + "method": "getBalance", + "params": [ + "83astBRguLMdt2h5U1Tpdq5tjFoJ6noeGwaY3mDLVcri", + { + "commitment": "finalized" + } + ] + } +' +``` + +#### Default: + +If commitment configuration is not provided, the node will default to `"finalized"` commitment + +Only methods that query bank state accept the commitment parameter. They are indicated in the API Reference below. + +#### RpcResponse Structure + +Many methods that take a commitment parameter return an RpcResponse JSON object comprised of two parts: + +- `context` : An RpcResponseContext JSON structure including a `slot` field at which the operation was evaluated. +- `value` : The value returned by the operation itself. + +#### Parsed Responses + +Some methods support an `encoding` parameter, and can return account or +instruction data in parsed JSON format if `"encoding":"jsonParsed"` is requested +and the node has a parser for the owning program. Solana nodes currently support +JSON parsing for the following native and SPL programs: + +| Program | Account State | Instructions | +| ---------------------------- | ------------- | ------------ | +| Address Lookup | v1.15.0 | v1.15.0 | +| BPF Loader | n/a | stable | +| BPF Upgradeable Loader | stable | stable | +| Config | stable | | +| SPL Associated Token Account | n/a | stable | +| SPL Memo | n/a | stable | +| SPL Token | stable | stable | +| SPL Token 2022 | stable | stable | +| Stake | stable | stable | +| Vote | stable | stable | + +The list of account parsers can be found [here](https://github.com/solana-labs/solana/blob/master/account-decoder/src/parse_account_data.rs), and instruction parsers [here](https://github.com/solana-labs/solana/blob/master/transaction-status/src/parse_instruction.rs). + +## Filter criteria + +Some methods support providing a `filters` object to enable pre-filtering the data returned within the RpcResponse JSON object. The following filters exist: + +- `memcmp: object` - compares a provided series of bytes with program account data at a particular offset. Fields: + + - `offset: usize` - offset into program account data to start comparison + - `bytes: string` - data to match, as encoded string + - `encoding: string` - encoding for filter `bytes` data, either "base58" or "base64". Data is limited in size to 128 or fewer decoded bytes.
    + **NEW: This field, and base64 support generally, is only available in solana-core v1.14.0 or newer. Please omit when querying nodes on earlier versions** + +- `dataSize: u64` - compares the program account data length with the provided data size + +## Health Check + +Although not a JSON RPC API, a `GET /health` at the RPC HTTP Endpoint provides a +health-check mechanism for use by load balancers or other network +infrastructure. This request will always return a HTTP 200 OK response with a body of +"ok", "behind" or "unknown" based on the following conditions: + +1. If one or more `--known-validator` arguments are provided to `solana-validator` - "ok" is returned + when the node has within `HEALTH_CHECK_SLOT_DISTANCE` slots of the highest + known validator, otherwise "behind". "unknown" is returned when no slot + information from known validators is not yet available. +2. "ok" is always returned if no known validators are provided. + +## JSON RPC API Reference + +import GetAccountInfo from "./methods/\_getAccountInfo.mdx" + + + +import GetBalance from "./methods/\_getBalance.mdx" + + + +import GetBlock from "./methods/\_getBlock.mdx" + + + +import GetBlockHeight from "./methods/\_getBlockHeight.mdx" + + + +import GetBlockProduction from "./methods/\_getBlockProduction.mdx" + + + +import GetBlockCommitment from "./methods/\_getBlockCommitment.mdx" + + + +import GetBlocks from "./methods/\_getBlocks.mdx" + + + +import GetBlocksWithLimit from "./methods/\_getBlocksWithLimit.mdx" + + + +import GetBlockTime from "./methods/\_getBlockTime.mdx" + + + +import GetClusterNodes from "./methods/\_getClusterNodes.mdx" + + + +import GetEpochInfo from "./methods/\_getEpochInfo.mdx" + + + +import GetEpochSchedule from "./methods/\_getEpochSchedule.mdx" + + + +import GetFeeForMessage from "./methods/\_getFeeForMessage.mdx" + + + +import GetFirstAvailableBlock from "./methods/\_getFirstAvailableBlock.mdx" + + + +import GetGenesisHash from "./methods/\_getGenesisHash.mdx" + + + +import GetHealth from "./methods/\_getHealth.mdx" + + + +import GetHighestSnapshotSlot from "./methods/\_getHighestSnapshotSlot.mdx" + + + +import GetIdentity from "./methods/\_getIdentity.mdx" + + + +import GetInflationGovernor from "./methods/\_getInflationGovernor.mdx" + + + +import GetInflationRate from "./methods/\_getInflationRate.mdx" + + + +import GetInflationReward from "./methods/\_getInflationReward.mdx" + + + +import GetLargestAccounts from "./methods/\_getLargestAccounts.mdx" + + + +import GetLatestBlockhash from "./methods/\_getLatestBlockhash.mdx" + + + +import GetLeaderSchedule from "./methods/\_getLeaderSchedule.mdx" + + + +import GetMaxRetransmitSlot from "./methods/\_getMaxRetransmitSlot.mdx" + + + +import GetMaxShredInsertSlot from "./methods/\_getMaxShredInsertSlot.mdx" + + + +import GetMinimumBalanceForRentExemption from "./methods/\_getMinimumBalanceForRentExemption.mdx" + + + +import GetMultipleAccounts from "./methods/\_getMultipleAccounts.mdx" + + + +import GetProgramAccounts from "./methods/\_getProgramAccounts.mdx" + + + +import GetRecentPerformanceSamples from "./methods/\_getRecentPerformanceSamples.mdx" + + + +import GetRecentPrioritizationFees from "./methods/\_getRecentPrioritizationFees.mdx" + + + +import GetSignaturesForAddress from "./methods/\_getSignaturesForAddress.mdx" + + + +import GetSignatureStatuses from "./methods/\_getSignatureStatuses.mdx" + + + +import GetSlot from "./methods/\_getSlot.mdx" + + + +import GetSlotLeader from "./methods/\_getSlotLeader.mdx" + + + +import GetSlotLeaders from "./methods/\_getSlotLeaders.mdx" + + + +import GetStakeActivation from "./methods/\_getStakeActivation.mdx" + + + +import GetStakeMinimumDelegation from "./methods/\_getStakeMinimumDelegation.mdx" + + + +import GetSupply from "./methods/\_getSupply.mdx" + + + +import GetTokenAccountBalance from "./methods/\_getTokenAccountBalance.mdx" + + + +import GetTokenAccountsByDelegate from "./methods/\_getTokenAccountsByDelegate.mdx" + + + +import GetTokenAccountsByOwner from "./methods/\_getTokenAccountsByOwner.mdx" + + + +import GetTokenLargestAccounts from "./methods/\_getTokenLargestAccounts.mdx" + + + +import GetTokenSupply from "./methods/\_getTokenSupply.mdx" + + + +import GetTransaction from "./methods/\_getTransaction.mdx" + + + +import GetTransactionCount from "./methods/\_getTransactionCount.mdx" + + + +import GetVersion from "./methods/\_getVersion.mdx" + + + +import GetVoteAccounts from "./methods/\_getVoteAccounts.mdx" + + + +import IsBlockhashValid from "./methods/\_isBlockhashValid.mdx" + + + +import MinimumLedgerSlot from "./methods/\_minimumLedgerSlot.mdx" + + + +import RequestAirdrop from "./methods/\_requestAirdrop.mdx" + + + +import SendTransaction from "./methods/\_sendTransaction.mdx" + + + +import SimulateTransaction from "./methods/\_simulateTransaction.mdx" + + + +## JSON RPC API Deprecated Methods + +import GetConfirmedBlock from "./deprecated/\_getConfirmedBlock.mdx" + + + +import GetConfirmedBlocks from "./deprecated/\_getConfirmedBlocks.mdx" + + + +import GetConfirmedBlocksWithLimit from "./deprecated/\_getConfirmedBlocksWithLimit.mdx" + + + +import GetConfirmedSignaturesForAddress2 from "./deprecated/\_getConfirmedSignaturesForAddress2.mdx" + + + +import GetConfirmedTransaction from "./deprecated/\_getConfirmedTransaction.mdx" + + + +import GetFeeCalculatorForBlockhash from "./deprecated/\_getFeeCalculatorForBlockhash.mdx" + + + +import GetFeeRateGovernor from "./deprecated/\_getFeeRateGovernor.mdx" + + + +import GetFees from "./deprecated/\_getFees.mdx" + + + +import GetRecentBlockhash from "./deprecated/\_getRecentBlockhash.mdx" + + + +import GetSnapshotSlot from "./deprecated/\_getSnapshotSlot.mdx" + + diff --git a/docs/src/api/methods/_getAccountInfo.mdx b/docs/src/api/methods/_getAccountInfo.mdx new file mode 100644 index 00000000000000..18a5080758de4a --- /dev/null +++ b/docs/src/api/methods/_getAccountInfo.mdx @@ -0,0 +1,136 @@ +import { + DocBlock, + DocSideBySide, + CodeParams, + Parameter, + Field, + Values, + CodeSnippets, +} from "../../../components/CodeDocBlock"; + + + +## getAccountInfo + +Returns all information associated with the account of provided Pubkey + + + + + +### Parameters: + + + Pubkey of account to query, as base-58 encoded string + + + + +Configuration object containing the following fields: + + + + + +Encoding format for Account data + + + +
    + +- `base58` is slow and limited to less than 129 bytes of Account data. +- `base64` will return base64 encoded data for Account data of any size. +- `base64+zstd` compresses the Account data using [Zstandard](https://facebook.github.io/zstd/) + and base64-encodes the result. +- `jsonParsed` encoding attempts to use program-specific state parsers to return + more human-readable and explicit account state data. +- If `jsonParsed` is requested but a parser cannot be found, the field falls + back to `base64` encoding, detectable when the `data` field is type `string`. + +
    + +
    + + + limit the returned account data using the provided "offset: <usize>" and + "length: <usize>" fields +
  • + only available for base58, base64 or{" "} + base64+zstd encodings. +
  • +
    + + + The minimum slot that the request can be evaluated at + + +
    + +### Result: + +The result will be an RpcResponse JSON object with `value` equal to: + +- `` - if the requested account doesn't exist +- `` - otherwise, a JSON object containing: + - `lamports: ` - number of lamports assigned to this account, as a u64 + - `owner: ` - base-58 encoded Pubkey of the program this account has been assigned to + - `data: <[string, encoding]|object>` - data associated with the account, either as encoded binary data or JSON format `{: }` - depending on encoding parameter + - `executable: ` - boolean indicating if the account contains a program \(and is strictly read-only\) + - `rentEpoch: ` - the epoch at which this account will next owe rent, as u64 + - `size: ` - the data size of the account + + + + + +### Code sample: + +```bash +curl http://localhost:8899 -X POST -H "Content-Type: application/json" -d ' + { + "jsonrpc": "2.0", + "id": 1, + "method": "getAccountInfo", + "params": [ + "vines1vzrYbzLMRdu58ou5XTby4qAqVRLmqo36NKPTg", + { + "encoding": "base58" + } + ] + } +' +``` + +### Response: + +```json +{ + "jsonrpc": "2.0", + "result": { + "context": { + "slot": 1 + }, + "value": { + "data": [ + "11116bv5nS2h3y12kD1yUKeMZvGcKLSjQgX6BeV7u1FrjeJcKfsHRTPuR3oZ1EioKtYGiYxpxMG5vpbZLsbcBYBEmZZcMKaSoGx9JZeAuWf", + "base58" + ], + "executable": false, + "lamports": 1000000000, + "owner": "11111111111111111111111111111111", + "rentEpoch": 2, + "space": 80 + } + }, + "id": 1 +} +``` + + + + diff --git a/docs/src/api/methods/_getBalance.mdx b/docs/src/api/methods/_getBalance.mdx new file mode 100644 index 00000000000000..0cd0f0c6d0ef23 --- /dev/null +++ b/docs/src/api/methods/_getBalance.mdx @@ -0,0 +1,78 @@ +import { + DocBlock, + DocSideBySide, + CodeParams, + Parameter, + Field, + Values, + CodeSnippets, +} from "../../../components/CodeDocBlock"; + + + +## getBalance + +Returns the balance of the account of provided Pubkey + + + + + +### Parameters: + + + Pubkey of account to query, as base-58 encoded string + + + + +Configuration object containing the following fields: + + + + + The minimum slot that the request can be evaluated at + + + + +### Result: + +`RpcResponse` - RpcResponse JSON object with `value` field set to the balance + + + + + +### Code sample: + +```bash +curl http://localhost:8899 -X POST -H "Content-Type: application/json" -d ' + { + "jsonrpc": "2.0", "id": 1, + "method": "getBalance", + "params": [ + "83astBRguLMdt2h5U1Tpdq5tjFoJ6noeGwaY3mDLVcri" + ] + } +' +``` + +### Response: + +```json +{ + "jsonrpc": "2.0", + "result": { "context": { "slot": 1 }, "value": 0 }, + "id": 1 +} +``` + + + + diff --git a/docs/src/api/methods/_getBlock.mdx b/docs/src/api/methods/_getBlock.mdx new file mode 100644 index 00000000000000..dd70eaf5b95347 --- /dev/null +++ b/docs/src/api/methods/_getBlock.mdx @@ -0,0 +1,288 @@ +import { + DocBlock, + DocSideBySide, + CodeParams, + Parameter, + Field, + Values, + CodeSnippets, +} from "../../../components/CodeDocBlock"; + + + +## getBlock + +Returns identity and transaction information about a confirmed block in the ledger + + + + + +### Parameters: + + + slot number, as u64 integer + + + + +Configuration object containing the following fields: + + +
  • + the default is finalized +
  • +
  • + processed is not supported. +
  • +
    + + + +encoding format for each returned Transaction + + + +
    + +- `jsonParsed` attempts to use program-specific instruction parsers to return + more human-readable and explicit data in the `transaction.message.instructions` list. +- If `jsonParsed` is requested but a parser cannot be found, the instruction + falls back to regular JSON encoding (`accounts`, `data`, and `programIdIndex` fields). + +
    + +
    + + + +level of transaction detail to return + + + +
    + +- If `accounts` are requested, transaction details only include signatures and + an annotated list of accounts in each transaction. +- Transaction metadata is limited to only: fee, err, pre_balances, + post_balances, pre_token_balances, and post_token_balances. + +
    + +
    + + + +the max transaction version to return in responses. + +
    + +- If the requested block contains a transaction with a higher version, an + error will be returned. +- If this parameter is omitted, only legacy transactions will be returned, and + a block containing any versioned transaction will prompt the error. + +
    + +
    + + + whether to populate the `rewards` array. If parameter not provided, the + default includes rewards. + + +
    + +### Result: + +The result field will be an object with the following fields: + +- `` - if specified block is not confirmed +- `` - if block is confirmed, an object with the following fields: + - `blockhash: ` - the blockhash of this block, as base-58 encoded string + - `previousBlockhash: ` - the blockhash of this block's parent, as base-58 encoded string; if the parent block is not available due to ledger cleanup, this field will return "11111111111111111111111111111111" + - `parentSlot: ` - the slot index of this block's parent + - `transactions: ` - present if "full" transaction details are requested; an array of JSON objects containing: + - `transaction: ` - [Transaction](#transaction-structure) object, either in JSON format or encoded binary data, depending on encoding parameter + - `meta: ` - transaction status metadata object, containing `null` or: + - `err: ` - Error if transaction failed, null if transaction succeeded. [TransactionError definitions](https://github.com/solana-labs/solana/blob/c0c60386544ec9a9ec7119229f37386d9f070523/sdk/src/transaction/error.rs#L13) + - `fee: ` - fee this transaction was charged, as u64 integer + - `preBalances: ` - array of u64 account balances from before the transaction was processed + - `postBalances: ` - array of u64 account balances after the transaction was processed + - `innerInstructions: ` - List of [inner instructions](#inner-instructions-structure) or `null` if inner instruction recording was not enabled during this transaction + - `preTokenBalances: ` - List of [token balances](#token-balances-structure) from before the transaction was processed or omitted if token balance recording was not yet enabled during this transaction + - `postTokenBalances: ` - List of [token balances](#token-balances-structure) from after the transaction was processed or omitted if token balance recording was not yet enabled during this transaction + - `logMessages: ` - array of string log messages or `null` if log message recording was not enabled during this transaction + - `rewards: ` - transaction-level rewards, populated if rewards are requested; an array of JSON objects containing: + - `pubkey: ` - The public key, as base-58 encoded string, of the account that received the reward + - `lamports: `- number of reward lamports credited or debited by the account, as a i64 + - `postBalance: ` - account balance in lamports after the reward was applied + - `rewardType: ` - type of reward: "fee", "rent", "voting", "staking" + - `commission: ` - vote account commission when the reward was credited, only present for voting and staking rewards + - DEPRECATED: `status: ` - Transaction status + - `"Ok": ` - Transaction was successful + - `"Err": ` - Transaction failed with TransactionError + - `loadedAddresses: ` - Transaction addresses loaded from address lookup tables. Undefined if `maxSupportedTransactionVersion` is not set in request params. + - `writable: ` - Ordered list of base-58 encoded addresses for writable loaded accounts + - `readonly: ` - Ordered list of base-58 encoded addresses for readonly loaded accounts + - `returnData: ` - the most-recent return data generated by an instruction in the transaction, with the following fields: + - `programId: ` - the program that generated the return data, as base-58 encoded Pubkey + - `data: <[string, encoding]>` - the return data itself, as base-64 encoded binary data + - `computeUnitsConsumed: ` - number of [compute units](developing/programming-model/runtime.md#compute-budget) consumed by the transaction + - `version: <"legacy"|number|undefined>` - Transaction version. Undefined if `maxSupportedTransactionVersion` is not set in request params. + - `signatures: ` - present if "signatures" are requested for transaction details; an array of signatures strings, corresponding to the transaction order in the block + - `rewards: ` - block-level rewards, present if rewards are requested; an array of JSON objects containing: + - `pubkey: ` - The public key, as base-58 encoded string, of the account that received the reward + - `lamports: `- number of reward lamports credited or debited by the account, as a i64 + - `postBalance: ` - account balance in lamports after the reward was applied + - `rewardType: ` - type of reward: "fee", "rent", "voting", "staking" + - `commission: ` - vote account commission when the reward was credited, only present for voting and staking rewards + - `blockTime: ` - estimated production time, as Unix timestamp (seconds since the Unix epoch). null if not available + - `blockHeight: ` - the number of blocks beneath this block + + + + + +### Code sample: + +```bash +curl http://localhost:8899 -X POST -H "Content-Type: application/json" -d ' + { + "jsonrpc": "2.0","id":1, + "method":"getBlock", + "params": [ + 430, + { + "encoding": "json", + "maxSupportedTransactionVersion":0, + "transactionDetails":"full", + "rewards":false + } + ] + } +' +``` + +### Response: + +```json +{ + "jsonrpc": "2.0", + "result": { + "blockHeight": 428, + "blockTime": null, + "blockhash": "3Eq21vXNB5s86c62bVuUfTeaMif1N2kUqRPBmGRJhyTA", + "parentSlot": 429, + "previousBlockhash": "mfcyqEXB3DnHXki6KjjmZck6YjmZLvpAByy2fj4nh6B", + "transactions": [ + { + "meta": { + "err": null, + "fee": 5000, + "innerInstructions": [], + "logMessages": [], + "postBalances": [499998932500, 26858640, 1, 1, 1], + "postTokenBalances": [], + "preBalances": [499998937500, 26858640, 1, 1, 1], + "preTokenBalances": [], + "rewards": null, + "status": { + "Ok": null + } + }, + "transaction": { + "message": { + "accountKeys": [ + "3UVYmECPPMZSCqWKfENfuoTv51fTDTWicX9xmBD2euKe", + "AjozzgE83A3x1sHNUR64hfH7zaEBWeMaFuAN9kQgujrc", + "SysvarS1otHashes111111111111111111111111111", + "SysvarC1ock11111111111111111111111111111111", + "Vote111111111111111111111111111111111111111" + ], + "header": { + "numReadonlySignedAccounts": 0, + "numReadonlyUnsignedAccounts": 3, + "numRequiredSignatures": 1 + }, + "instructions": [ + { + "accounts": [1, 2, 3, 0], + "data": "37u9WtQpcm6ULa3WRQHmj49EPs4if7o9f1jSRVZpm2dvihR9C8jY4NqEwXUbLwx15HBSNcP1", + "programIdIndex": 4 + } + ], + "recentBlockhash": "mfcyqEXB3DnHXki6KjjmZck6YjmZLvpAByy2fj4nh6B" + }, + "signatures": [ + "2nBhEBYYvfaAe16UMNqRHre4YNSskvuYgx3M6E4JP1oDYvZEJHvoPzyUidNgNX5r9sTyN1J9UxtbCXy2rqYcuyuv" + ] + } + } + ] + }, + "id": 1 +} +``` + + + + +--- + +#### Transaction Structure + +Transactions are quite different from those on other blockchains. Be sure to review [Anatomy of a Transaction](developing/programming-model/transactions.md) to learn about transactions on Solana. + +The JSON structure of a transaction is defined as follows: + +- `signatures: ` - A list of base-58 encoded signatures applied to the transaction. The list is always of length `message.header.numRequiredSignatures` and not empty. The signature at index `i` corresponds to the public key at index `i` in `message.accountKeys`. The first one is used as the [transaction id](../../terminology.md#transaction-id). +- `message: ` - Defines the content of the transaction. + - `accountKeys: ` - List of base-58 encoded public keys used by the transaction, including by the instructions and for signatures. The first `message.header.numRequiredSignatures` public keys must sign the transaction. + - `header: ` - Details the account types and signatures required by the transaction. + - `numRequiredSignatures: ` - The total number of signatures required to make the transaction valid. The signatures must match the first `numRequiredSignatures` of `message.accountKeys`. + - `numReadonlySignedAccounts: ` - The last `numReadonlySignedAccounts` of the signed keys are read-only accounts. Programs may process multiple transactions that load read-only accounts within a single PoH entry, but are not permitted to credit or debit lamports or modify account data. Transactions targeting the same read-write account are evaluated sequentially. + - `numReadonlyUnsignedAccounts: ` - The last `numReadonlyUnsignedAccounts` of the unsigned keys are read-only accounts. + - `recentBlockhash: ` - A base-58 encoded hash of a recent block in the ledger used to prevent transaction duplication and to give transactions lifetimes. + - `instructions: ` - List of program instructions that will be executed in sequence and committed in one atomic transaction if all succeed. + - `programIdIndex: ` - Index into the `message.accountKeys` array indicating the program account that executes this instruction. + - `accounts: ` - List of ordered indices into the `message.accountKeys` array indicating which accounts to pass to the program. + - `data: ` - The program input data encoded in a base-58 string. + - `addressTableLookups: ` - List of address table lookups used by a transaction to dynamically load addresses from on-chain address lookup tables. Undefined if `maxSupportedTransactionVersion` is not set. + - `accountKey: ` - base-58 encoded public key for an address lookup table account. + - `writableIndexes: ` - List of indices used to load addresses of writable accounts from a lookup table. + - `readonlyIndexes: ` - List of indices used to load addresses of readonly accounts from a lookup table. + +#### Inner Instructions Structure + +The Solana runtime records the cross-program instructions that are invoked during transaction processing and makes these available for greater transparency of what was executed on-chain per transaction instruction. Invoked instructions are grouped by the originating transaction instruction and are listed in order of processing. + +The JSON structure of inner instructions is defined as a list of objects in the following structure: + +- `index: number` - Index of the transaction instruction from which the inner instruction(s) originated +- `instructions: ` - Ordered list of inner program instructions that were invoked during a single transaction instruction. + - `programIdIndex: ` - Index into the `message.accountKeys` array indicating the program account that executes this instruction. + - `accounts: ` - List of ordered indices into the `message.accountKeys` array indicating which accounts to pass to the program. + - `data: ` - The program input data encoded in a base-58 string. + +#### Token Balances Structure + +The JSON structure of token balances is defined as a list of objects in the following structure: + +- `accountIndex: ` - Index of the account in which the token balance is provided for. +- `mint: ` - Pubkey of the token's mint. +- `owner: ` - Pubkey of token balance's owner. +- `programId: ` - Pubkey of the Token program that owns the account. +- `uiTokenAmount: ` - + - `amount: ` - Raw amount of tokens as a string, ignoring decimals. + - `decimals: ` - Number of decimals configured for token's mint. + - `uiAmount: ` - Token amount as a float, accounting for decimals. **DEPRECATED** + - `uiAmountString: ` - Token amount as a string, accounting for decimals. + + diff --git a/docs/src/api/methods/_getBlockCommitment.mdx b/docs/src/api/methods/_getBlockCommitment.mdx new file mode 100644 index 00000000000000..c12fc186cfca4b --- /dev/null +++ b/docs/src/api/methods/_getBlockCommitment.mdx @@ -0,0 +1,70 @@ +import { + DocBlock, + DocSideBySide, + CodeParams, + Parameter, + Field, + Values, + CodeSnippets, +} from "../../../components/CodeDocBlock"; + + + +## getBlockCommitment + +Returns commitment for particular block + + + + + +### Parameters: + + + block number, identified by Slot + + +### Result: + +The result field will be a JSON object containing: + +- `commitment` - commitment, comprising either: + - `` - Unknown block + - `` - commitment, array of u64 integers logging the amount of cluster stake in lamports that has voted on the block at each depth from 0 to `MAX_LOCKOUT_HISTORY` + 1 +- `totalStake` - total active stake, in lamports, of the current epoch + + + + + +### Code sample: + +```bash +curl http://localhost:8899 -X POST -H "Content-Type: application/json" -d ' + { + "jsonrpc": "2.0", "id": 1, + "method": "getBlockCommitment", + "params":[5] + } +' +``` + +### Response: + +```json +{ + "jsonrpc": "2.0", + "result": { + "commitment": [ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 10, 32 + ], + "totalStake": 42 + }, + "id": 1 +} +``` + + + + diff --git a/docs/src/api/methods/_getBlockHeight.mdx b/docs/src/api/methods/_getBlockHeight.mdx new file mode 100644 index 00000000000000..9b8a07d0fd6a2b --- /dev/null +++ b/docs/src/api/methods/_getBlockHeight.mdx @@ -0,0 +1,73 @@ +import { + DocBlock, + DocSideBySide, + CodeParams, + Parameter, + Field, + Values, + CodeSnippets, +} from "../../../components/CodeDocBlock"; + + + +## getBlockHeight + +Returns the current block height of the node + + + + + +### Parameters: + + + +Configuration object containing the following fields: + + + + + The minimum slot that the request can be evaluated at + + + + +### Result: + +- `` - Current block height + + + + + +### Code sample: + +```bash +curl http://localhost:8899 -X POST -H "Content-Type: application/json" -d ' + { + "jsonrpc":"2.0","id":1, + "method":"getBlockHeight" + } +' +``` + +Result: + +### Response: + +```json +{ + "jsonrpc": "2.0", + "result": 1233, + "id": 1 +} +``` + + + + diff --git a/docs/src/api/methods/_getBlockProduction.mdx b/docs/src/api/methods/_getBlockProduction.mdx new file mode 100644 index 00000000000000..eed1b5e6fbd3b2 --- /dev/null +++ b/docs/src/api/methods/_getBlockProduction.mdx @@ -0,0 +1,97 @@ +import { + DocBlock, + DocSideBySide, + CodeParams, + Parameter, + Field, + Values, + CodeSnippets, +} from "../../../components/CodeDocBlock"; + + + +## getBlockProduction + +Returns recent block production information from the current or previous epoch. + + + + + +### Parameters: + + + +Configuration object containing the following fields: + + + + + Only return results for this validator identity (base-58 encoded) + + + +Slot range to return block production for. If parameter not provided, defaults to current epoch. + +- `firstSlot: ` - first slot to return block production information for (inclusive) +- (optional) `lastSlot: ` - last slot to return block production information for (inclusive). If parameter not provided, defaults to the highest slot + + + + + +### Result: + +The result will be an RpcResponse JSON object with `value` equal to: + +- `` + - `byIdentity: ` - a dictionary of validator identities, + as base-58 encoded strings. Value is a two element array containing the + number of leader slots and the number of blocks produced. + - `range: ` - Block production slot range + - `firstSlot: ` - first slot of the block production information (inclusive) + - `lastSlot: ` - last slot of block production information (inclusive) + + + + + +### Code sample: + +```bash +curl http://localhost:8899 -X POST -H "Content-Type: application/json" -d ' + {"jsonrpc":"2.0","id":1, "method":"getBlockProduction"} +' +``` + +### Response: + +```json +{ + "jsonrpc": "2.0", + "result": { + "context": { + "slot": 9887 + }, + "value": { + "byIdentity": { + "85iYT5RuzRTDgjyRa3cP8SYhM2j21fj7NhfJ3peu1DPr": [9888, 9886] + }, + "range": { + "firstSlot": 0, + "lastSlot": 9887 + } + } + }, + "id": 1 +} +``` + + + + diff --git a/docs/src/api/methods/_getBlockTime.mdx b/docs/src/api/methods/_getBlockTime.mdx new file mode 100644 index 00000000000000..50ef1de6fb4699 --- /dev/null +++ b/docs/src/api/methods/_getBlockTime.mdx @@ -0,0 +1,67 @@ +import { + DocBlock, + DocSideBySide, + CodeParams, + Parameter, + Field, + Values, + CodeSnippets, +} from "../../../components/CodeDocBlock"; + + + +## getBlockTime + +Returns the estimated production time of a block. + +:::info +Each validator reports their UTC time to the ledger on a regular interval by +intermittently adding a timestamp to a Vote for a particular block. A requested +block's time is calculated from the stake-weighted mean of the Vote timestamps +in a set of recent blocks recorded on the ledger. +::: + + + + + +### Parameters: + + + block number, identified by Slot + + +### Result: + +- `` - estimated production time, as Unix timestamp (seconds since the Unix epoch) +- `` - timestamp is not available for this block + + + + + +### Code sample: + +```bash +curl http://localhost:8899 -X POST -H "Content-Type: application/json" -d ' + { + "jsonrpc":"2.0", "id":1, + "method": "getBlockTime", + "params":[5] + } +' +``` + +### Response: + +```json +{ + "jsonrpc": "2.0", + "result": 1574721591, + "id": 1 +} +``` + + + + diff --git a/docs/src/api/methods/_getBlocks.mdx b/docs/src/api/methods/_getBlocks.mdx new file mode 100644 index 00000000000000..59e816d6e1af26 --- /dev/null +++ b/docs/src/api/methods/_getBlocks.mdx @@ -0,0 +1,86 @@ +import { + DocBlock, + DocSideBySide, + CodeParams, + Parameter, + Field, + Values, + CodeSnippets, +} from "../../../components/CodeDocBlock"; + + + +## getBlocks + +Returns a list of confirmed blocks between two slots + + + + + +### Parameters: + + + end_slot, as u64 integer + + + + start_slot, as u64 integer (must be no more than 500,000 blocks + higher than the `start_slot`) + + + + +Configuration object containing the following fields: + + + +- "processed" is not supported + + + + + +### Result: + +The result field will be an array of u64 integers listing confirmed blocks +between `start_slot` and either `end_slot` - if provided, or latest confirmed block, +inclusive. Max range allowed is 500,000 slots. + + + + + +### Code sample: + +```bash +curl http://localhost:8899 -X POST -H "Content-Type: application/json" -d ' + { + "jsonrpc": "2.0", "id": 1, + "method": "getBlocks", + "params": [ + 5, 10 + ] + } +' +``` + +### Response: + +```json +{ + "jsonrpc": "2.0", + "result": [5, 6, 7, 8, 9, 10], + "id": 1 +} +``` + + + + diff --git a/docs/src/api/methods/_getBlocksWithLimit.mdx b/docs/src/api/methods/_getBlocksWithLimit.mdx new file mode 100644 index 00000000000000..6080a027c5926a --- /dev/null +++ b/docs/src/api/methods/_getBlocksWithLimit.mdx @@ -0,0 +1,84 @@ +import { + DocBlock, + DocSideBySide, + CodeParams, + Parameter, + Field, + Values, + CodeSnippets, +} from "../../../components/CodeDocBlock"; + + + +## getBlocksWithLimit + +Returns a list of confirmed blocks starting at the given slot + + + + + +### Parameters: + + + start_slot, as u64 integer + + + + limit, as u64 integer (must be no more than 500,000 blocks higher + than the start_slot) + + + + +Configuration object containing the following field: + + + +- "processed" is not supported + + + + + +### Result: + +The result field will be an array of u64 integers listing confirmed blocks +starting at `start_slot` for up to `limit` blocks, inclusive. + + + + + +### Code sample: + +```bash +curl http://localhost:8899 -X POST -H "Content-Type: application/json" -d ' + { + "jsonrpc": "2.0", + "id":1, + "method":"getBlocksWithLimit", + "params":[5, 3] + } +' +``` + +### Response: + +```json +{ + "jsonrpc": "2.0", + "result": [5, 6, 7], + "id": 1 +} +``` + + + + diff --git a/docs/src/api/methods/_getClusterNodes.mdx b/docs/src/api/methods/_getClusterNodes.mdx new file mode 100644 index 00000000000000..735e3aff27fc8e --- /dev/null +++ b/docs/src/api/methods/_getClusterNodes.mdx @@ -0,0 +1,71 @@ +import { + DocBlock, + DocSideBySide, + CodeParams, + Parameter, + Field, + Values, + CodeSnippets, +} from "../../../components/CodeDocBlock"; + + + +## getClusterNodes + +Returns information about all the nodes participating in the cluster + + + + +### Parameters: + +**None** + +### Result: + +The result field will be an array of JSON objects, each with the following sub fields: + +- `pubkey: ` - Node public key, as base-58 encoded string +- `gossip: ` - Gossip network address for the node +- `tpu: ` - TPU network address for the node +- `rpc: ` - JSON RPC network address for the node, or `null` if the JSON RPC service is not enabled +- `version: ` - The software version of the node, or `null` if the version information is not available +- `featureSet: ` - The unique identifier of the node's feature set +- `shredVersion: ` - The shred version the node has been configured to use + + + + + +### Code sample: + +```bash +curl http://localhost:8899 -X POST -H "Content-Type: application/json" -d ' + { + "jsonrpc": "2.0", "id": 1, + "method": "getClusterNodes" + } +' +``` + +### Response: + +```json +{ + "jsonrpc": "2.0", + "result": [ + { + "gossip": "10.239.6.48:8001", + "pubkey": "9QzsJf7LPLj8GkXbYT3LFDKqsj2hHG7TA3xinJHu8epQ", + "rpc": "10.239.6.48:8899", + "tpu": "10.239.6.48:8856", + "version": "1.0.0 c375ce1f" + } + ], + "id": 1 +} +``` + + + + diff --git a/docs/src/api/methods/_getEpochInfo.mdx b/docs/src/api/methods/_getEpochInfo.mdx new file mode 100644 index 00000000000000..1f2cb4939a947e --- /dev/null +++ b/docs/src/api/methods/_getEpochInfo.mdx @@ -0,0 +1,85 @@ +import { + DocBlock, + DocSideBySide, + CodeParams, + Parameter, + Field, + Values, + CodeSnippets, +} from "../../../components/CodeDocBlock"; + + + +## getEpochInfo + +Returns information about the current epoch + + + + + +### Parameters: + + + Pubkey of account to query, as base-58 encoded string + + + + +Configuration object containing the following fields: + + + + + The minimum slot that the request can be evaluated at + + + + +### Result: + +The result field will be an object with the following fields: + +- `absoluteSlot: ` - the current slot +- `blockHeight: ` - the current block height +- `epoch: ` - the current epoch +- `slotIndex: ` - the current slot relative to the start of the current epoch +- `slotsInEpoch: ` - the number of slots in this epoch +- `transactionCount: ` - total number of transactions processed without error since genesis + + + + +### Code sample: + +```bash +curl http://localhost:8899 -X POST -H "Content-Type: application/json" -d ' + {"jsonrpc":"2.0","id":1, "method":"getEpochInfo"} +' +``` + +### Response: + +```json +{ + "jsonrpc": "2.0", + "result": { + "absoluteSlot": 166598, + "blockHeight": 166500, + "epoch": 27, + "slotIndex": 2790, + "slotsInEpoch": 8192, + "transactionCount": 22661093 + }, + "id": 1 +} +``` + + + + diff --git a/docs/src/api/methods/_getEpochSchedule.mdx b/docs/src/api/methods/_getEpochSchedule.mdx new file mode 100644 index 00000000000000..2e11e8a4be0d93 --- /dev/null +++ b/docs/src/api/methods/_getEpochSchedule.mdx @@ -0,0 +1,67 @@ +import { + DocBlock, + DocSideBySide, + CodeParams, + Parameter, + Field, + Values, + CodeSnippets, +} from "../../../components/CodeDocBlock"; + + + +## getEpochSchedule + +Returns the epoch schedule information from this cluster's genesis config + + + + +### Parameters: + +**None** + +### Result: + +The result field will be an object with the following fields: + +- `slotsPerEpoch: ` - the maximum number of slots in each epoch +- `leaderScheduleSlotOffset: ` - the number of slots before beginning of an epoch to calculate a leader schedule for that epoch +- `warmup: ` - whether epochs start short and grow +- `firstNormalEpoch: ` - first normal-length epoch, log2(slotsPerEpoch) - log2(MINIMUM_SLOTS_PER_EPOCH) +- `firstNormalSlot: ` - MINIMUM_SLOTS_PER_EPOCH \* (2.pow(firstNormalEpoch) - 1) + + + + + +### Code sample: + +```bash +curl http://localhost:8899 -X POST -H "Content-Type: application/json" -d ' + { + "jsonrpc":"2.0","id":1, + "method":"getEpochSchedule" + } +' +``` + +### Response: + +```json +{ + "jsonrpc": "2.0", + "result": { + "firstNormalEpoch": 8, + "firstNormalSlot": 8160, + "leaderScheduleSlotOffset": 8192, + "slotsPerEpoch": 8192, + "warmup": true + }, + "id": 1 +} +``` + + + + diff --git a/docs/src/api/methods/_getFeeForMessage.mdx b/docs/src/api/methods/_getFeeForMessage.mdx new file mode 100644 index 00000000000000..85a81f589b0fc9 --- /dev/null +++ b/docs/src/api/methods/_getFeeForMessage.mdx @@ -0,0 +1,86 @@ +import { + DocBlock, + DocSideBySide, + CodeParams, + Parameter, + Field, + Values, + CodeSnippets, +} from "../../../components/CodeDocBlock"; + + + +## getFeeForMessage + +Get the fee the network will charge for a particular Message + +:::caution +**NEW: This method is only available in solana-core v1.9 or newer. Please use +[getFees](#getFees) for solana-core v1.8** +::: + + + + +### Parameters: + + + Base-64 encoded Message + + + + +Configuration object containing the following fields: + + + + + The minimum slot that the request can be evaluated at + + + + +### Result: + +- `` - Fee corresponding to the message at the specified blockhash + + + + + +### Code sample: + +```bash +curl http://localhost:8899 -X POST -H "Content-Type: application/json" -d ' +{ + "id":1, + "jsonrpc":"2.0", + "method":"getFeeForMessage", + "params":[ + "AQABAgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQAA", + { + "commitment":"processed" + } + ] +} +' +``` + +### Response: + +```json +{ + "jsonrpc": "2.0", + "result": { "context": { "slot": 5068 }, "value": 5000 }, + "id": 1 +} +``` + + + + diff --git a/docs/src/api/methods/_getFirstAvailableBlock.mdx b/docs/src/api/methods/_getFirstAvailableBlock.mdx new file mode 100644 index 00000000000000..97139e17b5bf60 --- /dev/null +++ b/docs/src/api/methods/_getFirstAvailableBlock.mdx @@ -0,0 +1,50 @@ +import { + DocBlock, + DocSideBySide, + CodeParams, + Parameter, + Field, + Values, + CodeSnippets, +} from "../../../components/CodeDocBlock"; + + + +## getFirstAvailableBlock + +Returns the slot of the lowest confirmed block that has not been purged from the ledger + + + + +### Parameters: + +**None** + +### Result: + +- `` - Slot + + + + +### Code sample: + +```bash +curl http://localhost:8899 -X POST -H "Content-Type: application/json" -d ' + { + "jsonrpc":"2.0","id":1, + "method":"getFirstAvailableBlock" + } +' +``` + +### Response: + +```json +{ "jsonrpc": "2.0", "result": 250000, "id": 1 } +``` + + + + diff --git a/docs/src/api/methods/_getGenesisHash.mdx b/docs/src/api/methods/_getGenesisHash.mdx new file mode 100644 index 00000000000000..4a7802d8b1b266 --- /dev/null +++ b/docs/src/api/methods/_getGenesisHash.mdx @@ -0,0 +1,51 @@ +import { + DocBlock, + DocSideBySide, + CodeParams, + Parameter, + Field, + Values, + CodeSnippets, +} from "../../../components/CodeDocBlock"; + + + +## getGenesisHash + +Returns the genesis hash + + + + +### Parameters: + +**None** + +### Result: + +- `` - a Hash as base-58 encoded string + + + + +### Code sample: + +```bash +curl http://localhost:8899 -X POST -H "Content-Type: application/json" -d ' + {"jsonrpc":"2.0","id":1, "method":"getGenesisHash"} +' +``` + +### Response: + +```json +{ + "jsonrpc": "2.0", + "result": "GH7ome3EiwEr7tu9JuTh2dpYWBJK3z69Xm1ZE3MEE6JC", + "id": 1 +} +``` + + + + diff --git a/docs/src/api/methods/_getHealth.mdx b/docs/src/api/methods/_getHealth.mdx new file mode 100644 index 00000000000000..482a2ff62a076e --- /dev/null +++ b/docs/src/api/methods/_getHealth.mdx @@ -0,0 +1,88 @@ +import { + DocBlock, + DocSideBySide, + CodeParams, + Parameter, + Field, + Values, + CodeSnippets, +} from "../../../components/CodeDocBlock"; + + + +## getHealth + +Returns the current health of the node. + +:::caution +If one or more `--known-validator` arguments are provided to `solana-validator` - "ok" is returned +when the node has within `HEALTH_CHECK_SLOT_DISTANCE` slots of the highest known validator, +otherwise an error is returned. "ok" is always returned if no known validators are provided. +::: + + + + +### Parameters: + +**None** + +### Result: + +If the node is healthy: "ok" + +If the node is unhealthy, a JSON RPC error response is returned. The specifics of the error response are **UNSTABLE** and may change in the future + + + + + +### Code sample: + +```bash +curl http://localhost:8899 -X POST -H "Content-Type: application/json" -d ' + {"jsonrpc":"2.0","id":1, "method":"getHealth"} +' +``` + +### Response: + +Healthy Result: + +```json +{ "jsonrpc": "2.0", "result": "ok", "id": 1 } +``` + +Unhealthy Result (generic): + +```json +{ + "jsonrpc": "2.0", + "error": { + "code": -32005, + "message": "Node is unhealthy", + "data": {} + }, + "id": 1 +} +``` + +Unhealthy Result (if additional information is available) + +```json +{ + "jsonrpc": "2.0", + "error": { + "code": -32005, + "message": "Node is behind by 42 slots", + "data": { + "numSlotsBehind": 42 + } + }, + "id": 1 +} +``` + + + + diff --git a/docs/src/api/methods/_getHighestSnapshotSlot.mdx b/docs/src/api/methods/_getHighestSnapshotSlot.mdx new file mode 100644 index 00000000000000..5028f77e6feeca --- /dev/null +++ b/docs/src/api/methods/_getHighestSnapshotSlot.mdx @@ -0,0 +1,78 @@ +import { + DocBlock, + DocSideBySide, + CodeParams, + Parameter, + Field, + Values, + CodeSnippets, +} from "../../../components/CodeDocBlock"; + + + +## getHighestSnapshotSlot + +Returns the highest slot information that the node has snapshots for. + +This will find the highest full snapshot slot, and the highest incremental +snapshot slot _based on_ the full snapshot slot, if there is one. + +:::caution +NEW: This method is only available in solana-core v1.9 or newer. Please use +[getSnapshotSlot](/api/http#getsnapshotslot) for solana-core v1.8 +::: + + + + +### Parameters: + +**None** + +### Result: + +When the node has a snapshot, this returns a JSON object with the following fields: + +- `full: ` - Highest full snapshot slot +- `incremental: ` - Highest incremental snapshot slot _based on_ `full` + + + + + +### Code sample: + +```bash +curl http://localhost:8899 -X POST -H "Content-Type: application/json" -d ' + {"jsonrpc":"2.0","id":1,"method":"getHighestSnapshotSlot"} +' +``` + +### Response: + +Result when the node has a snapshot: + +```json +{ + "jsonrpc": "2.0", + "result": { + "full": 100, + "incremental": 110 + }, + "id": 1 +} +``` + +Result when the node has no snapshot: + +```json +{ + "jsonrpc": "2.0", + "error": { "code": -32008, "message": "No snapshot" }, + "id": 1 +} +``` + + + + diff --git a/docs/src/api/methods/_getIdentity.mdx b/docs/src/api/methods/_getIdentity.mdx new file mode 100644 index 00000000000000..263ebb28d7f824 --- /dev/null +++ b/docs/src/api/methods/_getIdentity.mdx @@ -0,0 +1,55 @@ +import { + DocBlock, + DocSideBySide, + CodeParams, + Parameter, + Field, + Values, + CodeSnippets, +} from "../../../components/CodeDocBlock"; + + + +## getIdentity + +Returns the identity pubkey for the current node + + + + +### Parameters: + +**None** + +### Result: + +The result field will be a JSON object with the following fields: + +- `identity` - the identity pubkey of the current node \(as a base-58 encoded string\) + + + + +### Code sample: + +```bash +curl http://localhost:8899 -X POST -H "Content-Type: application/json" -d ' + {"jsonrpc":"2.0","id":1, "method":"getIdentity"} +' +``` + +### Response: + +```json +{ + "jsonrpc": "2.0", + "result": { + "identity": "2r1F4iWqVcb8M1DbAjQuFpebkQHY9hcVU4WuW2DJBppN" + }, + "id": 1 +} +``` + + + + diff --git a/docs/src/api/methods/_getInflationGovernor.mdx b/docs/src/api/methods/_getInflationGovernor.mdx new file mode 100644 index 00000000000000..206fa9a60c498a --- /dev/null +++ b/docs/src/api/methods/_getInflationGovernor.mdx @@ -0,0 +1,75 @@ +import { + DocBlock, + DocSideBySide, + CodeParams, + Parameter, + Field, + Values, + CodeSnippets, +} from "../../../components/CodeDocBlock"; + + + +## getInflationGovernor + +Returns the current inflation governor + + + + +### Parameters: + + + +Configuration object containing the following fields: + + + + + +### Result: + +The result field will be a JSON object with the following fields: + +- `initial: ` - the initial inflation percentage from time 0 +- `terminal: ` - terminal inflation percentage +- `taper: ` - rate per year at which inflation is lowered. (Rate reduction is derived using the target slot time in genesis config) +- `foundation: ` - percentage of total inflation allocated to the foundation +- `foundationTerm: ` - duration of foundation pool inflation in years + + + + + +### Code sample: + +```bash +curl http://localhost:8899 -X POST -H "Content-Type: application/json" -d ' + {"jsonrpc":"2.0","id":1, "method":"getInflationGovernor"} +' +``` + +### Response: + +```json +{ + "jsonrpc": "2.0", + "result": { + "foundation": 0.05, + "foundationTerm": 7, + "initial": 0.15, + "taper": 0.15, + "terminal": 0.015 + }, + "id": 1 +} +``` + + + + diff --git a/docs/src/api/methods/_getInflationRate.mdx b/docs/src/api/methods/_getInflationRate.mdx new file mode 100644 index 00000000000000..1cc987aab13c1c --- /dev/null +++ b/docs/src/api/methods/_getInflationRate.mdx @@ -0,0 +1,62 @@ +import { + DocBlock, + DocSideBySide, + CodeParams, + Parameter, + Field, + Values, + CodeSnippets, +} from "../../../components/CodeDocBlock"; + + + +## getInflationRate + +Returns the specific inflation values for the current epoch + + + + +### Parameters: + +**None** + +### Result: + +The result field will be a JSON object with the following fields: + +- `total: ` - total inflation +- `validator: ` -inflation allocated to validators +- `foundation: ` - inflation allocated to the foundation +- `epoch: ` - epoch for which these values are valid + + + + + +### Code sample: + +```bash +curl http://localhost:8899 -X POST -H "Content-Type: application/json" -d ' + {"jsonrpc":"2.0","id":1, "method":"getInflationRate"} +' +``` + +### Response: + +```json +{ + "jsonrpc": "2.0", + "result": { + "epoch": 100, + "foundation": 0.001, + "total": 0.149, + "validator": 0.148 + }, + "id": 1 +} +``` + + + + diff --git a/docs/src/api/methods/_getInflationReward.mdx b/docs/src/api/methods/_getInflationReward.mdx new file mode 100644 index 00000000000000..840a6f520fa34c --- /dev/null +++ b/docs/src/api/methods/_getInflationReward.mdx @@ -0,0 +1,101 @@ +import { + DocBlock, + DocSideBySide, + CodeParams, + Parameter, + Field, + Values, + CodeSnippets, +} from "../../../components/CodeDocBlock"; + + + +## getInflationReward + +Returns the inflation / staking reward for a list of addresses for an epoch + + + + +### Parameters: + + + An array of addresses to query, as base-58 encoded strings + + + + +Configuration object containing the following fields: + + + + + An epoch for which the reward occurs. If omitted, the previous epoch will be + used + + + + The minimum slot that the request can be evaluated at + + + + +### Result: + +The result field will be a JSON array with the following fields: + +- `epoch: ` - epoch for which reward occured +- `effectiveSlot: ` - the slot in which the rewards are effective +- `amount: ` - reward amount in lamports +- `postBalance: ` - post balance of the account in lamports +- `commission: ` - vote account commission when the reward was credited + + + + + +### Code sample: + +```bash +curl http://localhost:8899 -X POST -H "Content-Type: application/json" -d ' + { + "jsonrpc": "2.0", + "id": 1, + "method": "getInflationReward", + "params": [ + [ + "6dmNQ5jwLeLk5REvio1JcMshcbvkYMwy26sJ8pbkvStu", + "BGsqMegLpV6n6Ve146sSX2dTjUMj3M92HnU8BbNRMhF2" + ], + {"epoch": 2} + ] + } +' +``` + +### Response: + +```json +{ + "jsonrpc": "2.0", + "result": [ + { + "amount": 2500, + "effectiveSlot": 224, + "epoch": 2, + "postBalance": 499999442500 + }, + null + ], + "id": 1 +} +``` + + + + diff --git a/docs/src/api/methods/_getLargestAccounts.mdx b/docs/src/api/methods/_getLargestAccounts.mdx new file mode 100644 index 00000000000000..aef3e9f8202c57 --- /dev/null +++ b/docs/src/api/methods/_getLargestAccounts.mdx @@ -0,0 +1,150 @@ +import { + DocBlock, + DocSideBySide, + CodeParams, + Parameter, + Field, + Values, + CodeSnippets, +} from "../../../components/CodeDocBlock"; + + + +## getLargestAccounts + +Returns the 20 largest accounts, by lamport balance (results may be cached up to two hours) + + + + +### Parameters: + + + +Configuration object containing the following fields: + + + + + filter results by account type + + + + + + +### Result: + +The result will be an RpcResponse JSON object with `value` equal to an array of `` containing: + +- `address: ` - base-58 encoded address of the account +- `lamports: ` - number of lamports in the account, as a u64 + + + + + +### Code sample: + +```bash +curl http://localhost:8899 -X POST -H "Content-Type: application/json" -d ' + {"jsonrpc":"2.0","id":1, "method":"getLargestAccounts"} +' +``` + +### Response: + +```json +{ + "jsonrpc": "2.0", + "result": { + "context": { + "slot": 54 + }, + "value": [ + { + "lamports": 999974, + "address": "99P8ZgtJYe1buSK8JXkvpLh8xPsCFuLYhz9hQFNw93WJ" + }, + { + "lamports": 42, + "address": "uPwWLo16MVehpyWqsLkK3Ka8nLowWvAHbBChqv2FZeL" + }, + { + "lamports": 42, + "address": "aYJCgU7REfu3XF8b3QhkqgqQvLizx8zxuLBHA25PzDS" + }, + { + "lamports": 42, + "address": "CTvHVtQ4gd4gUcw3bdVgZJJqApXE9nCbbbP4VTS5wE1D" + }, + { + "lamports": 20, + "address": "4fq3xJ6kfrh9RkJQsmVd5gNMvJbuSHfErywvEjNQDPxu" + }, + { + "lamports": 4, + "address": "AXJADheGVp9cruP8WYu46oNkRbeASngN5fPCMVGQqNHa" + }, + { + "lamports": 2, + "address": "8NT8yS6LiwNprgW4yM1jPPow7CwRUotddBVkrkWgYp24" + }, + { + "lamports": 1, + "address": "SysvarEpochSchedu1e111111111111111111111111" + }, + { + "lamports": 1, + "address": "11111111111111111111111111111111" + }, + { + "lamports": 1, + "address": "Stake11111111111111111111111111111111111111" + }, + { + "lamports": 1, + "address": "SysvarC1ock11111111111111111111111111111111" + }, + { + "lamports": 1, + "address": "StakeConfig11111111111111111111111111111111" + }, + { + "lamports": 1, + "address": "SysvarRent111111111111111111111111111111111" + }, + { + "lamports": 1, + "address": "Config1111111111111111111111111111111111111" + }, + { + "lamports": 1, + "address": "SysvarStakeHistory1111111111111111111111111" + }, + { + "lamports": 1, + "address": "SysvarRecentB1ockHashes11111111111111111111" + }, + { + "lamports": 1, + "address": "SysvarFees111111111111111111111111111111111" + }, + { + "lamports": 1, + "address": "Vote111111111111111111111111111111111111111" + } + ] + }, + "id": 1 +} +``` + + + + diff --git a/docs/src/api/methods/_getLatestBlockhash.mdx b/docs/src/api/methods/_getLatestBlockhash.mdx new file mode 100644 index 00000000000000..85724a785c71ec --- /dev/null +++ b/docs/src/api/methods/_getLatestBlockhash.mdx @@ -0,0 +1,92 @@ +import { + DocBlock, + DocSideBySide, + CodeParams, + Parameter, + Field, + Values, + CodeSnippets, +} from "../../../components/CodeDocBlock"; + + + +## getLatestBlockhash + +Returns the latest blockhash + +:::caution +NEW: This method is only available in solana-core v1.9 or newer. Please use +[getRecentBlockhash](#getrecentblockhash) for solana-core v1.8 +::: + + + + +### Parameters: + + + +Configuration object containing the following fields: + + + + + The minimum slot that the request can be evaluated at + + + + +### Result: + +`RpcResponse` - RpcResponse JSON object with `value` field set to a JSON object including: + +- `blockhash: ` - a Hash as base-58 encoded string +- `lastValidBlockHeight: ` - last [block height](../../terminology.md#block-height) at which the blockhash will be valid + + + + + +### Code sample: + +```bash +curl http://localhost:8899 -X POST -H "Content-Type: application/json" -d ' + { + "id":1, + "jsonrpc":"2.0", + "method":"getLatestBlockhash", + "params":[ + { + "commitment":"processed" + } + ] + } +' +``` + +### Response: + +```json +{ + "jsonrpc": "2.0", + "result": { + "context": { + "slot": 2792 + }, + "value": { + "blockhash": "EkSnNWid2cvwEVnVx9aBqawnmiCNiDgp3gUdkDPTKN1N", + "lastValidBlockHeight": 3090 + } + }, + "id": 1 +} +``` + + + + diff --git a/docs/src/api/methods/_getLeaderSchedule.mdx b/docs/src/api/methods/_getLeaderSchedule.mdx new file mode 100644 index 00000000000000..ee6803cb0ed49f --- /dev/null +++ b/docs/src/api/methods/_getLeaderSchedule.mdx @@ -0,0 +1,96 @@ +import { + DocBlock, + DocSideBySide, + CodeParams, + Parameter, + Field, + Values, + CodeSnippets, +} from "../../../components/CodeDocBlock"; + + + +## getLeaderSchedule + +Returns the leader schedule for an epoch + + + + +### Parameters: + + +Fetch the leader schedule for the epoch that corresponds to the provided slot. + +
  • If unspecified, the leader schedule for the current epoch is fetched
  • + +
    + + + +Configuration object containing the following fields: + + + + + Only return results for this validator identity (base-58 encoded) + + + + +### Result: + +Returns a result with one of the two following values: + +- `` - if requested epoch is not found, or +- `` - the result field will be a dictionary of validator identities, + as base-58 encoded strings, and their corresponding leader slot indices as values + (indices are relative to the first slot in the requested epoch) + + + + + +### Code sample: + +```bash +curl http://localhost:8899 -X POST -H "Content-Type: application/json" -d ' + { + "jsonrpc": "2.0", + "id": 1, + "method": "getLeaderSchedule", + "params": [ + null, + { + "identity": "4Qkev8aNZcqFNSRhQzwyLMFSsi94jHqE8WNVTJzTP99F" + } + ] + } +' +``` + +### Response: + +```json +{ + "jsonrpc": "2.0", + "result": { + "4Qkev8aNZcqFNSRhQzwyLMFSsi94jHqE8WNVTJzTP99F": [ + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, + 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, + 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, + 57, 58, 59, 60, 61, 62, 63 + ] + }, + "id": 1 +} +``` + + + + diff --git a/docs/src/api/methods/_getMaxRetransmitSlot.mdx b/docs/src/api/methods/_getMaxRetransmitSlot.mdx new file mode 100644 index 00000000000000..17a104750e5cd6 --- /dev/null +++ b/docs/src/api/methods/_getMaxRetransmitSlot.mdx @@ -0,0 +1,48 @@ +import { + DocBlock, + DocSideBySide, + CodeParams, + Parameter, + Field, + Values, + CodeSnippets, +} from "../../../components/CodeDocBlock"; + + + +## getMaxRetransmitSlot + +Get the max slot seen from retransmit stage. + + + + +### Parameters: + +**None** + +### Result: + +`` - Slot number + + + + + +### Code sample: + +```bash +curl http://localhost:8899 -X POST -H "Content-Type: application/json" -d ' + {"jsonrpc":"2.0","id":1, "method":"getMaxRetransmitSlot"} +' +``` + +### Response: + +```json +{ "jsonrpc": "2.0", "result": 1234, "id": 1 } +``` + + + + diff --git a/docs/src/api/methods/_getMaxShredInsertSlot.mdx b/docs/src/api/methods/_getMaxShredInsertSlot.mdx new file mode 100644 index 00000000000000..d776870ed9cc2c --- /dev/null +++ b/docs/src/api/methods/_getMaxShredInsertSlot.mdx @@ -0,0 +1,48 @@ +import { + DocBlock, + DocSideBySide, + CodeParams, + Parameter, + Field, + Values, + CodeSnippets, +} from "../../../components/CodeDocBlock"; + + + +## getMaxShredInsertSlot + +Get the max slot seen from after shred insert. + + + + +### Parameters: + +**None** + +### Result: + +`` - Slot number + + + + + +### Code sample: + +```bash +curl http://localhost:8899 -X POST -H "Content-Type: application/json" -d ' + {"jsonrpc":"2.0","id":1, "method":"getMaxShredInsertSlot"} +' +``` + +### Response: + +```json +{ "jsonrpc": "2.0", "result": 1234, "id": 1 } +``` + + + + diff --git a/docs/src/api/methods/_getMinimumBalanceForRentExemption.mdx b/docs/src/api/methods/_getMinimumBalanceForRentExemption.mdx new file mode 100644 index 00000000000000..3f528284413647 --- /dev/null +++ b/docs/src/api/methods/_getMinimumBalanceForRentExemption.mdx @@ -0,0 +1,67 @@ +import { + DocBlock, + DocSideBySide, + CodeParams, + Parameter, + Field, + Values, + CodeSnippets, +} from "../../../components/CodeDocBlock"; + + + +## getMinimumBalanceForRentExemption + +Returns minimum balance required to make account rent exempt. + + + + +### Parameters: + + + the Account's data length + + + + +Configuration object containing the following fields: + + + + + +### Result: + +`` - minimum lamports required in the Account to remain rent free + + + + + +### Code sample: + +```bash +curl http://localhost:8899 -X POST -H "Content-Type: application/json" -d ' + { + "jsonrpc": "2.0", "id": 1, + "method": "getMinimumBalanceForRentExemption", + "params": [50] + } +' +``` + +### Response: + +```json +{ "jsonrpc": "2.0", "result": 500, "id": 1 } +``` + + + + diff --git a/docs/src/api/methods/_getMultipleAccounts.mdx b/docs/src/api/methods/_getMultipleAccounts.mdx new file mode 100644 index 00000000000000..207828fb4e5c39 --- /dev/null +++ b/docs/src/api/methods/_getMultipleAccounts.mdx @@ -0,0 +1,143 @@ +import { + DocBlock, + DocSideBySide, + CodeParams, + Parameter, + Field, + Values, + CodeSnippets, +} from "../../../components/CodeDocBlock"; + + + +## getMultipleAccounts + +Returns the account information for a list of Pubkeys. + + + + +### Parameters: + + + An array of Pubkeys to query, as base-58 encoded strings (up to a maximum of + 100) + + + + +Configuration object containing the following fields: + + + + + The minimum slot that the request can be evaluated at + + + + +limit the returned account data using the provided `offset: ` and `length: ` fields; only available for "base58", "base64" or "base64+zstd" encodings. + + + + + +encoding format for the returned Account data + + + +
    + +- `base58` is slow and limited to less than 129 bytes of Account data. +- `base64` will return base64 encoded data for Account data of any size. +- `base64+zstd` compresses the Account data using [Zstandard](https://facebook.github.io/zstd/) + and base64-encodes the result. +- [`jsonParsed` encoding](/api/http#parsed-responses) attempts to use program-specific state parsers to + return more human-readable and explicit account state data. +- If `jsonParsed` is requested but a parser cannot be found, the field falls back to `base64` + encoding, detectable when the `data` field is type ``. + +
    + +
    + +
    + +### Result: + +The result will be a JSON object with `value` equal to an array of: + +- `` - if the account at that Pubkey doesn't exist, or +- `` - a JSON object containing: + - `lamports: ` - number of lamports assigned to this account, as a u64 + - `owner: ` - base-58 encoded Pubkey of the program this account has been assigned to + - `data: <[string, encoding]|object>` - data associated with the account, either as encoded binary data or JSON format `{: }` - depending on encoding parameter + - `executable: ` - boolean indicating if the account contains a program \(and is strictly read-only\) + - `rentEpoch: ` - the epoch at which this account will next owe rent, as u64 + - `size: ` - the data size of the account + + + + + +### Code sample: + +```bash +curl http://localhost:8899 -X POST -H "Content-Type: application/json" -d ' + { + "jsonrpc": "2.0", + "id": 1, + "method": "getMultipleAccounts", + "params": [ + [ + "vines1vzrYbzLMRdu58ou5XTby4qAqVRLmqo36NKPTg", + "4fYNw3dojWmQ4dXtSGE9epjRGy9pFSx62YypT7avPYvA" + ], + { + "encoding": "base58" + } + ] + } +' +``` + +### Response: + +```json +{ + "jsonrpc": "2.0", + "result": { + "context": { + "slot": 1 + }, + "value": [ + { + "data": ["", "base64"], + "executable": false, + "lamports": 1000000000, + "owner": "11111111111111111111111111111111", + "rentEpoch": 2, + "space": 16 + }, + { + "data": ["", "base64"], + "executable": false, + "lamports": 5000000000, + "owner": "11111111111111111111111111111111", + "rentEpoch": 2, + "space": 0 + } + ] + }, + "id": 1 +} +``` + + + + diff --git a/docs/src/api/methods/_getProgramAccounts.mdx b/docs/src/api/methods/_getProgramAccounts.mdx new file mode 100644 index 00000000000000..7b623849dd7a09 --- /dev/null +++ b/docs/src/api/methods/_getProgramAccounts.mdx @@ -0,0 +1,160 @@ +import { + DocBlock, + DocSideBySide, + CodeParams, + Parameter, + Field, + Values, + CodeSnippets, +} from "../../../components/CodeDocBlock"; + + + +## getProgramAccounts + +Returns all accounts owned by the provided program Pubkey + + + + +### Parameters: + + + Pubkey of program, as base-58 encoded string + + + + +Configuration object containing the following fields: + + + + + The minimum slot that the request can be evaluated at + + + + wrap the result in an RpcResponse JSON object + + + + +encoding format for the returned Account data + + + +
    + +- `base58` is slow and limited to less than 129 bytes of Account data. +- `base64` will return base64 encoded data for Account data of any size. +- `base64+zstd` compresses the Account data using [Zstandard](https://facebook.github.io/zstd/) and + base64-encodes the result. +- [`jsonParsed` encoding](/api/http#parsed-responses) attempts to use program-specific state + parsers to return more human-readable and explicit account state data. +- If `jsonParsed` is requested but a parser cannot be found, the field falls back + to `base64` encoding, detectable when the `data` field is type ``. + +
    + +
    + + +limit the returned account data using the provided `offset: usize` and `length: usize` fields; + +- only available for "base58", "base64" or "base64+zstd" encodings. + + + + + +filter results using up to 4 filter objects + +:::info +The resultant account(s) must meet **ALL** filter criteria to be included in the returned results +::: + + + +
    + +### Result: + +By default, the result field will be an array of JSON objects. + +:::info +If `withContext` flag is set the array will be wrapped in an RpcResponse JSON object. +::: + +The resultant response array will contain: + +- `pubkey: ` - the account Pubkey as base-58 encoded string +- `account: ` - a JSON object, with the following sub fields: + - `lamports: ` - number of lamports assigned to this account, as a u64 + - `owner: ` - base-58 encoded Pubkey of the program this account has been assigned to + - `data: <[string,encoding]|object>` - data associated with the account, either as encoded binary data or JSON format `{: }` - depending on encoding parameter + - `executable: ` - boolean indicating if the account contains a program \(and is strictly read-only\) + - `rentEpoch: ` - the epoch at which this account will next owe rent, as u64 + - `size: ` - the data size of the account + + + + + +### Code sample: + +```bash +curl http://localhost:8899 -X POST -H "Content-Type: application/json" -d ' + { + "jsonrpc": "2.0", + "id": 1, + "method": "getProgramAccounts", + "params": [ + "4Nd1mBQtrMJVYVfKf2PJy9NZUZdTAsp7D4xWLs4gDB4T", + { + "filters": [ + { + "dataSize": 17 + }, + { + "memcmp": { + "offset": 4, + "bytes": "3Mc6vR" + } + } + ] + } + ] + } +' +``` + +### Response: + +```json +{ + "jsonrpc": "2.0", + "result": [ + { + "account": { + "data": "2R9jLfiAQ9bgdcw6h8s44439", + "executable": false, + "lamports": 15298080, + "owner": "4Nd1mBQtrMJVYVfKf2PJy9NZUZdTAsp7D4xWLs4gDB4T", + "rentEpoch": 28, + "space": 42 + }, + "pubkey": "CxELquR1gPP8wHe33gZ4QxqGB3sZ9RSwsJ2KshVewkFY" + } + ], + "id": 1 +} +``` + + + + diff --git a/docs/src/api/methods/_getRecentPerformanceSamples.mdx b/docs/src/api/methods/_getRecentPerformanceSamples.mdx new file mode 100644 index 00000000000000..131cc80ba794d9 --- /dev/null +++ b/docs/src/api/methods/_getRecentPerformanceSamples.mdx @@ -0,0 +1,103 @@ +import { + DocBlock, + DocSideBySide, + CodeParams, + Parameter, + Field, + Values, + CodeSnippets, +} from "../../../components/CodeDocBlock"; + + + +## getRecentPerformanceSamples + +Returns a list of recent performance samples, in reverse slot order. Performance samples are taken every 60 seconds and +include the number of transactions and slots that occur in a given time window. + + + + +### Parameters: + + + +number of samples to return (maximum 720) + + + +### Result: + +An array of `RpcPerfSample` with the following fields: + +- `slot: ` - Slot in which sample was taken at +- `numTransactions: ` - Number of transactions in sample +- `numSlots: ` - Number of slots in sample +- `samplePeriodSecs: ` - Number of seconds in a sample window +- `numNonVoteTransaction: ` - Number of non-vote transactions in + sample. + +:::info +`numNonVoteTransaction` is present starting with v1.15. + +To get a number of voting transactions compute:
    +`numTransactions - numNonVoteTransaction` +::: + + + + + +### Code sample: + +```bash +curl http://localhost:8899 -X POST -H "Content-Type: application/json" -d ' + { + "jsonrpc":"2.0", "id":1, + "method": "getRecentPerformanceSamples", + "params": [4]} +' +``` + +### Response: + +```json +{ + "jsonrpc": "2.0", + "result": [ + { + "numSlots": 126, + "numTransactions": 126, + "numNonVoteTransaction": 1, + "samplePeriodSecs": 60, + "slot": 348125 + }, + { + "numSlots": 126, + "numTransactions": 126, + "numNonVoteTransaction": 1, + "samplePeriodSecs": 60, + "slot": 347999 + }, + { + "numSlots": 125, + "numTransactions": 125, + "numNonVoteTransaction": 0, + "samplePeriodSecs": 60, + "slot": 347873 + }, + { + "numSlots": 125, + "numTransactions": 125, + "numNonVoteTransaction": 0, + "samplePeriodSecs": 60, + "slot": 347748 + } + ], + "id": 1 +} +``` + + + + diff --git a/docs/src/api/methods/_getRecentPrioritizationFees.mdx b/docs/src/api/methods/_getRecentPrioritizationFees.mdx new file mode 100644 index 00000000000000..7d7fcc791de6ea --- /dev/null +++ b/docs/src/api/methods/_getRecentPrioritizationFees.mdx @@ -0,0 +1,95 @@ +import { + DocBlock, + DocSideBySide, + CodeParams, + Parameter, + Field, + Values, + CodeSnippets, +} from "../../../components/CodeDocBlock"; + + + +## getRecentPrioritizationFees + +Returns a list of prioritization fees from recent blocks. + +:::info +Currently, a node's prioritization-fee cache stores data from up to 150 blocks. +::: + + + + +### Parameters: + + + +An array of Account addresses (up to a maximum of 128 addresses), as base-58 encoded strings + +:::note +If this parameter is provided, the response will reflect a fee to land a transaction locking all of the provided accounts as writable. +::: + + + +### Result: + +An array of `RpcPrioritizationFee` with the following fields: + +- `slot: ` - slot in which the fee was observed +- `prioritizationFee: ` - the per-compute-unit fee paid by at least + one successfully landed transaction, specified in increments of 0.000001 lamports + + + + + +### Code sample: + +```bash +curl http://localhost:8899 -X POST -H "Content-Type: application/json" -d ' + { + "jsonrpc":"2.0", "id":1, + "method": "getRecentPrioritizationFees", + "params": [ + ["CxELquR1gPP8wHe33gZ4QxqGB3sZ9RSwsJ2KshVewkFY"] + ] + } +' +``` + +### Response: + +```json +{ + "jsonrpc": "2.0", + "result": [ + { + "slot": 348125, + "prioritizationFee": 0 + }, + { + "slot": 348126, + "prioritizationFee": 1000 + }, + { + "slot": 348127, + "prioritizationFee": 500 + }, + { + "slot": 348128, + "prioritizationFee": 0 + }, + { + "slot": 348129, + "prioritizationFee": 1234 + } + ], + "id": 1 +} +``` + + + + diff --git a/docs/src/api/methods/_getSignatureStatuses.mdx b/docs/src/api/methods/_getSignatureStatuses.mdx new file mode 100644 index 00000000000000..25bcbc326bca18 --- /dev/null +++ b/docs/src/api/methods/_getSignatureStatuses.mdx @@ -0,0 +1,114 @@ +import { + DocBlock, + DocSideBySide, + CodeParams, + Parameter, + Field, + Values, + CodeSnippets, +} from "../../../components/CodeDocBlock"; + + + +## getSignatureStatuses + +Returns the statuses of a list of signatures. + +:::info +Unless the `searchTransactionHistory` configuration parameter is included, +this method only searches the recent status cache of signatures, which +retains statuses for all active slots plus `MAX_RECENT_BLOCKHASHES` rooted slots. +::: + + + + +### Parameters: + + + An array of transaction signatures to confirm, as base-58 encoded strings (up + to a maximum of 256) + + + + +Configuration object containing the following fields: + + + +if `true` - a Solana node will search its ledger cache for any signatures not +found in the recent status cache + + + + + +### Result: + +An array of `RpcResponse` consisting of either: + +- `` - Unknown transaction, or +- `` + - `slot: ` - The slot the transaction was processed + - `confirmations: ` - Number of blocks since signature confirmation, null if rooted, as well as finalized by a supermajority of the cluster + - `err: ` - Error if transaction failed, null if transaction succeeded. + See [TransactionError definitions](https://github.com/solana-labs/solana/blob/c0c60386544ec9a9ec7119229f37386d9f070523/sdk/src/transaction/error.rs#L13) + - `confirmationStatus: ` - The transaction's cluster confirmation status; + Either `processed`, `confirmed`, or `finalized`. See [Commitment](/api/http#configuring-state-commitment) for more on optimistic confirmation. + - DEPRECATED: `status: ` - Transaction status + - `"Ok": ` - Transaction was successful + - `"Err": ` - Transaction failed with TransactionError + + + + + +### Code sample: + +```bash +curl http://localhost:8899 -X POST -H "Content-Type: application/json" -d ' + { + "jsonrpc": "2.0", + "id": 1, + "method": "getSignatureStatuses", + "params": [ + [ + "5VERv8NMvzbJMEkV8xnrLkEaWRtSz9CosKDYjCJjBRnbJLgp8uirBgmQpjKhoR4tjF3ZpRzrFmBV6UjKdiSZkQUW" + ], + { + "searchTransactionHistory": true + } + ] + } +' +``` + +### Response: + +```json +{ + "jsonrpc": "2.0", + "result": { + "context": { + "slot": 82 + }, + "value": [ + { + "slot": 48, + "confirmations": null, + "err": null, + "status": { + "Ok": null + }, + "confirmationStatus": "finalized" + }, + null + ] + }, + "id": 1 +} +``` + + + + diff --git a/docs/src/api/methods/_getSignaturesForAddress.mdx b/docs/src/api/methods/_getSignaturesForAddress.mdx new file mode 100644 index 00000000000000..dc0517058d34c7 --- /dev/null +++ b/docs/src/api/methods/_getSignaturesForAddress.mdx @@ -0,0 +1,117 @@ +import { + DocBlock, + DocSideBySide, + CodeParams, + Parameter, + Field, + Values, + CodeSnippets, +} from "../../../components/CodeDocBlock"; + + + +## getSignaturesForAddress + +Returns signatures for confirmed transactions that include the given address in +their `accountKeys` list. Returns signatures backwards in time from the +provided signature or most recent confirmed block + + + + +### Parameters: + + + Account address as base-58 encoded string + + + + +Configuration object containing the following fields: + + + + + The minimum slot that the request can be evaluated at + + + + maximum transaction signatures to return (between 1 and 1,000). + + + + start searching backwards from this transaction signature. If not provided the + search starts from the top of the highest max confirmed block. + + + + search until this transaction signature, if found before limit reached + + + + +### Result: + +An array of ``, ordered from **newest** to **oldest** transaction, containing transaction +signature information with the following fields: + +- `signature: ` - transaction signature as base-58 encoded string +- `slot: ` - The slot that contains the block with the transaction +- `err: ` - Error if transaction failed, null if transaction succeeded. + See [TransactionError definitions](https://github.com/solana-labs/solana/blob/c0c60386544ec9a9ec7119229f37386d9f070523/sdk/src/transaction/error.rs#L13) + for more info. +- `memo: ` - Memo associated with the transaction, null if no memo is present +- `blockTime: ` - estimated production time, as Unix timestamp (seconds since the Unix epoch) + of when transaction was processed. null if not available. +- `confirmationStatus: ` - The transaction's cluster confirmation status; + Either `processed`, `confirmed`, or `finalized`. See [Commitment](/api/http#configuring-state-commitment) + for more on optimistic confirmation. + + + + + +### Code sample: + +```bash +curl http://localhost:8899 -X POST -H "Content-Type: application/json" -d ' + { + "jsonrpc": "2.0", + "id": 1, + "method": "getSignaturesForAddress", + "params": [ + "Vote111111111111111111111111111111111111111", + { + "limit": 1 + } + ] + } +' +``` + +### Response: + +```json +{ + "jsonrpc": "2.0", + "result": [ + { + "err": null, + "memo": null, + "signature": "5h6xBEauJ3PK6SWCZ1PGjBvj8vDdWG3KpwATGy1ARAXFSDwt8GFXM7W5Ncn16wmqokgpiKRLuS83KUxyZyv2sUYv", + "slot": 114, + "blockTime": null + } + ], + "id": 1 +} +``` + + + + diff --git a/docs/src/api/methods/_getSlot.mdx b/docs/src/api/methods/_getSlot.mdx new file mode 100644 index 00000000000000..8693f8f3bb038e --- /dev/null +++ b/docs/src/api/methods/_getSlot.mdx @@ -0,0 +1,63 @@ +import { + DocBlock, + DocSideBySide, + CodeParams, + Parameter, + Field, + Values, + CodeSnippets, +} from "../../../components/CodeDocBlock"; + + + +## getSlot + +Returns the slot that has reached the [given or default commitment level](/api/http#configuring-state-commitment) + + + + +### Parameters: + + + +Configuration object containing the following fields: + + + + + The minimum slot that the request can be evaluated at + + + + +### Result: + +`` - Current slot + + + + + +### Code sample: + +```bash +curl http://localhost:8899 -X POST -H "Content-Type: application/json" -d ' + {"jsonrpc":"2.0","id":1, "method":"getSlot"} +' +``` + +### Response: + +```json +{ "jsonrpc": "2.0", "result": 1234, "id": 1 } +``` + + + + diff --git a/docs/src/api/methods/_getSlotLeader.mdx b/docs/src/api/methods/_getSlotLeader.mdx new file mode 100644 index 00000000000000..7f8550ee1b8bab --- /dev/null +++ b/docs/src/api/methods/_getSlotLeader.mdx @@ -0,0 +1,67 @@ +import { + DocBlock, + DocSideBySide, + CodeParams, + Parameter, + Field, + Values, + CodeSnippets, +} from "../../../components/CodeDocBlock"; + + + +## getSlotLeader + +Returns the current slot leader + + + + +### Parameters: + + + +Configuration object containing the following fields: + + + + + The minimum slot that the request can be evaluated at + + + + +### Result: + +`` - Node identity Pubkey as base-58 encoded string + + + + + +### Code sample: + +```bash +curl http://localhost:8899 -X POST -H "Content-Type: application/json" -d ' + {"jsonrpc":"2.0","id":1, "method":"getSlotLeader"} +' +``` + +### Response: + +```json +{ + "jsonrpc": "2.0", + "result": "ENvAW7JScgYq6o4zKZwewtkzzJgDzuJAFxYasvmEQdpS", + "id": 1 +} +``` + + + + diff --git a/docs/src/api/methods/_getSlotLeaders.mdx b/docs/src/api/methods/_getSlotLeaders.mdx new file mode 100644 index 00000000000000..386a74fb44de94 --- /dev/null +++ b/docs/src/api/methods/_getSlotLeaders.mdx @@ -0,0 +1,77 @@ +import { + DocBlock, + DocSideBySide, + CodeParams, + Parameter, + Field, + Values, + CodeSnippets, +} from "../../../components/CodeDocBlock"; + + + +## getSlotLeaders + +Returns the slot leaders for a given slot range + + + + +### Parameters: + + + Start slot, as u64 integer + + + + Limit, as u64 integer (between 1 and 5,000) + + +### Result: + +`` - array of Node identity public keys as base-58 encoded strings + + + + + +### Code sample: + +If the current slot is `#99` - query the next `10` leaders with the following request: + +```bash +curl http://localhost:8899 -X POST -H "Content-Type: application/json" -d ' + { + "jsonrpc":"2.0", "id": 1, + "method": "getSlotLeaders", + "params": [100, 10] + } +' +``` + +### Response: + +The first leader returned is the leader for slot `#100`: + +```json +{ + "jsonrpc": "2.0", + "result": [ + "ChorusmmK7i1AxXeiTtQgQZhQNiXYU84ULeaYF1EH15n", + "ChorusmmK7i1AxXeiTtQgQZhQNiXYU84ULeaYF1EH15n", + "ChorusmmK7i1AxXeiTtQgQZhQNiXYU84ULeaYF1EH15n", + "ChorusmmK7i1AxXeiTtQgQZhQNiXYU84ULeaYF1EH15n", + "Awes4Tr6TX8JDzEhCZY2QVNimT6iD1zWHzf1vNyGvpLM", + "Awes4Tr6TX8JDzEhCZY2QVNimT6iD1zWHzf1vNyGvpLM", + "Awes4Tr6TX8JDzEhCZY2QVNimT6iD1zWHzf1vNyGvpLM", + "Awes4Tr6TX8JDzEhCZY2QVNimT6iD1zWHzf1vNyGvpLM", + "DWvDTSh3qfn88UoQTEKRV2JnLt5jtJAVoiCo3ivtMwXP", + "DWvDTSh3qfn88UoQTEKRV2JnLt5jtJAVoiCo3ivtMwXP" + ], + "id": 1 +} +``` + + + + diff --git a/docs/src/api/methods/_getStakeActivation.mdx b/docs/src/api/methods/_getStakeActivation.mdx new file mode 100644 index 00000000000000..abd1d0bafb5966 --- /dev/null +++ b/docs/src/api/methods/_getStakeActivation.mdx @@ -0,0 +1,95 @@ +import { + DocBlock, + DocSideBySide, + CodeParams, + Parameter, + Field, + Values, + CodeSnippets, +} from "../../../components/CodeDocBlock"; + + + +## getStakeActivation + +Returns epoch activation information for a stake account + + + + +### Parameters: + + + Pubkey of stake Account to query, as base-58 encoded string + + + + +Configuration object containing the following fields: + + + + + The minimum slot that the request can be evaluated at + + + + epoch for which to calculate activation details. If parameter not provided, + defaults to current epoch. + + + + +### Result: + +The result will be a JSON object with the following fields: + +- `state: ` - the stake account's activation state, + either: `active`, `inactive`, `activating`, or `deactivating` +- `active: ` - stake active during the epoch +- `inactive: ` - stake inactive during the epoch + + + + + +### Code sample: + +```bash +curl http://localhost:8899 -X POST -H "Content-Type: application/json" -d ' + { + "jsonrpc": "2.0", + "id": 1, + "method": "getStakeActivation", + "params": [ + "CYRJWqiSjLitBAcRxPvWpgX3s5TvmN2SuRY3eEYypFvT", + { + "epoch": 4 + } + ] + } +' +``` + +### Response: + +```json +{ + "jsonrpc": "2.0", + "result": { + "active": 124429280, + "inactive": 73287840, + "state": "activating" + }, + "id": 1 +} +``` + + + + diff --git a/docs/src/api/methods/_getStakeMinimumDelegation.mdx b/docs/src/api/methods/_getStakeMinimumDelegation.mdx new file mode 100644 index 00000000000000..94e01ac87052e9 --- /dev/null +++ b/docs/src/api/methods/_getStakeMinimumDelegation.mdx @@ -0,0 +1,73 @@ +import { + DocBlock, + DocSideBySide, + CodeParams, + Parameter, + Field, + Values, + CodeSnippets, +} from "../../../components/CodeDocBlock"; + + + +## getStakeMinimumDelegation + +Returns the stake minimum delegation, in lamports. + + + + +### Parameters: + + + +Configuration object containing the following fields: + + + + + +### Result: + +The result will be an RpcResponse JSON object with `value` equal to: + +- `` - The stake minimum delegation, in lamports + + + + + +### Code sample: + +```bash +curl http://localhost:8899 -X POST -H "Content-Type: application/json" -d ' + { + "jsonrpc":"2.0", "id":1, + "method": "getStakeMinimumDelegation" + } +' +``` + +### Response: + +```json +{ + "jsonrpc": "2.0", + "result": { + "context": { + "slot": 501 + }, + "value": 1000000000 + }, + "id": 1 +} +``` + + + + diff --git a/docs/src/api/methods/_getSupply.mdx b/docs/src/api/methods/_getSupply.mdx new file mode 100644 index 00000000000000..a1d8915a1b87d1 --- /dev/null +++ b/docs/src/api/methods/_getSupply.mdx @@ -0,0 +1,87 @@ +import { + DocBlock, + DocSideBySide, + CodeParams, + Parameter, + Field, + Values, + CodeSnippets, +} from "../../../components/CodeDocBlock"; + + + +## getSupply + +Returns information about the current supply. + + + + +### Parameters: + + + +Configuration object containing the following fields: + + + + + exclude non circulating accounts list from response + + + + +### Result: + +The result will be an RpcResponse JSON object with `value` equal to a JSON object containing: + +- `total: ` - Total supply in lamports +- `circulating: ` - Circulating supply in lamports +- `nonCirculating: ` - Non-circulating supply in lamports +- `nonCirculatingAccounts: ` - an array of account addresses of non-circulating accounts, as strings. If `excludeNonCirculatingAccountsList` is enabled, the returned array will be empty. + + + + + +### Code sample: + +```bash +curl http://localhost:8899 -X POST -H "Content-Type: application/json" -d ' + {"jsonrpc":"2.0", "id":1, "method":"getSupply"} +' +``` + +### Response: + +```json +{ + "jsonrpc": "2.0", + "result": { + "context": { + "slot": 1114 + }, + "value": { + "circulating": 16000, + "nonCirculating": 1000000, + "nonCirculatingAccounts": [ + "FEy8pTbP5fEoqMV1GdTz83byuA8EKByqYat1PKDgVAq5", + "9huDUZfxoJ7wGMTffUE7vh1xePqef7gyrLJu9NApncqA", + "3mi1GmwEE3zo2jmfDuzvjSX9ovRXsDUKHvsntpkhuLJ9", + "BYxEJTDerkaRWBem3XgnVcdhppktBXa2HbkHPKj2Ui4Z" + ], + "total": 1016000 + } + }, + "id": 1 +} +``` + + + + diff --git a/docs/src/api/methods/_getTokenAccountBalance.mdx b/docs/src/api/methods/_getTokenAccountBalance.mdx new file mode 100644 index 00000000000000..e0cb785f7d6038 --- /dev/null +++ b/docs/src/api/methods/_getTokenAccountBalance.mdx @@ -0,0 +1,91 @@ +import { + DocBlock, + DocSideBySide, + CodeParams, + Parameter, + Field, + Values, + CodeSnippets, +} from "../../../components/CodeDocBlock"; + + + +## getTokenAccountBalance + +Returns the token balance of an SPL Token account. + + + + +### Parameters: + + + Pubkey of Token account to query, as base-58 encoded string + + + + +Configuration object containing the following fields: + + + + + +### Result: + +The result will be an RpcResponse JSON object with `value` equal to a JSON object containing: + +- `amount: ` - the raw balance without decimals, a string representation of u64 +- `decimals: ` - number of base 10 digits to the right of the decimal place +- `uiAmount: ` - the balance, using mint-prescribed decimals **DEPRECATED** +- `uiAmountString: ` - the balance as a string, using mint-prescribed decimals + +For more details on returned data, the [Token Balances Structure](#token-balances-structure) +response from [getBlock](#getblock) follows a similar structure. + + + + + +### Code sample: + +```bash +curl http://localhost:8899 -X POST -H "Content-Type: application/json" -d ' + { + "jsonrpc": "2.0", "id": 1, + "method": "getTokenAccountBalance", + "params": [ + "7fUAJdStEuGbc3sM84cKRL6yYaaSstyLSU4ve5oovLS7" + ] + } +' +``` + +### Response: + +```json +{ + "jsonrpc": "2.0", + "result": { + "context": { + "slot": 1114 + }, + "value": { + "amount": "9864", + "decimals": 2, + "uiAmount": 98.64, + "uiAmountString": "98.64" + }, + "id": 1 + } +} +``` + + + + diff --git a/docs/src/api/methods/_getTokenAccountsByDelegate.mdx b/docs/src/api/methods/_getTokenAccountsByDelegate.mdx new file mode 100644 index 00000000000000..be47c1305eeaa4 --- /dev/null +++ b/docs/src/api/methods/_getTokenAccountsByDelegate.mdx @@ -0,0 +1,177 @@ +import { + DocBlock, + DocSideBySide, + CodeParams, + Parameter, + Field, + Values, + CodeSnippets, +} from "../../../components/CodeDocBlock"; + + + +## getTokenAccountsByDelegate + +Returns all SPL Token accounts by approved Delegate. + + + + +### Parameters: + + + Pubkey of account delegate to query, as base-58 encoded string + + + + +A JSON object with one of the following fields: + +- `mint: ` - Pubkey of the specific token Mint to limit accounts to, as base-58 encoded string; or +- `programId: ` - Pubkey of the Token program that owns the accounts, as base-58 encoded string + + + + + +Configuration object containing the following fields: + + + + + The minimum slot that the request can be evaluated at + + + + +limit the returned account data using the provided `offset: ` +and `length: ` fields; only available for `base58`, +`base64` or `base64+zstd` encodings. + + + + + +Encoding format for Account data + + + +
    + +- `base58` is slow and limited to less than 129 bytes of Account data. +- `base64` will return base64 encoded data for Account data of any size. +- `base64+zstd` compresses the Account data using [Zstandard](https://facebook.github.io/zstd/) + and base64-encodes the result. +- `jsonParsed` encoding attempts to use program-specific state parsers to return + more human-readable and explicit account state data. +- If `jsonParsed` is requested but a parser cannot be found, the field falls + back to `base64` encoding, detectable when the `data` field is type `string`. + +
    + +
    + +
    + +### Result: + +The result will be an RpcResponse JSON object with `value` equal to an array of JSON objects, which will contain: + +- `pubkey: ` - the account Pubkey as base-58 encoded string +- `account: ` - a JSON object, with the following sub fields: + - `lamports: ` - number of lamports assigned to this account, as a u64 + - `owner: ` - base-58 encoded Pubkey of the program this account has been assigned to + - `data: ` - Token state data associated with the account, either as encoded binary data or in JSON format `{: }` + - `executable: ` - boolean indicating if the account contains a program (and is strictly read-only\) + - `rentEpoch: ` - the epoch at which this account will next owe rent, as u64 + - `size: ` - the data size of the account + +When the data is requested with the `jsonParsed` encoding a format similar to that of the +[Token Balances Structure](#token-balances-structure) can be expected inside the structure, +both for the `tokenAmount` and the `delegatedAmount` - with the latter being an optional object. + + + + + +### Code sample: + +```bash +curl http://localhost:8899 -X POST -H "Content-Type: application/json" -d ' + { + "jsonrpc": "2.0", + "id": 1, + "method": "getTokenAccountsByDelegate", + "params": [ + "4Nd1mBQtrMJVYVfKf2PJy9NZUZdTAsp7D4xWLs4gDB4T", + { + "programId": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA" + }, + { + "encoding": "jsonParsed" + } + ] + } +' +``` + +### Response: + +```json +{ + "jsonrpc": "2.0", + "result": { + "context": { + "slot": 1114 + }, + "value": [ + { + "account": { + "data": { + "program": "spl-token", + "parsed": { + "info": { + "tokenAmount": { + "amount": "1", + "decimals": 1, + "uiAmount": 0.1, + "uiAmountString": "0.1" + }, + "delegate": "4Nd1mBQtrMJVYVfKf2PJy9NZUZdTAsp7D4xWLs4gDB4T", + "delegatedAmount": { + "amount": "1", + "decimals": 1, + "uiAmount": 0.1, + "uiAmountString": "0.1" + }, + "state": "initialized", + "isNative": false, + "mint": "3wyAj7Rt1TWVPZVteFJPLa26JmLvdb1CAKEFZm3NY75E", + "owner": "CnPoSPKXu7wJqxe59Fs72tkBeALovhsCxYeFwPCQH9TD" + }, + "type": "account" + }, + "space": 165 + }, + "executable": false, + "lamports": 1726080, + "owner": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA", + "rentEpoch": 4, + "space": 165 + }, + "pubkey": "28YTZEwqtMHWrhWcvv34se7pjS7wctgqzCPB3gReCFKp" + } + ] + }, + "id": 1 +} +``` + + + + diff --git a/docs/src/api/methods/_getTokenAccountsByOwner.mdx b/docs/src/api/methods/_getTokenAccountsByOwner.mdx new file mode 100644 index 00000000000000..06a7e5fe4bbd80 --- /dev/null +++ b/docs/src/api/methods/_getTokenAccountsByOwner.mdx @@ -0,0 +1,176 @@ +import { + DocBlock, + DocSideBySide, + CodeParams, + Parameter, + Field, + Values, + CodeSnippets, +} from "../../../components/CodeDocBlock"; + + + +## getTokenAccountsByOwner + +Returns all SPL Token accounts by token owner. + + + + +### Parameters: + + + Pubkey of account delegate to query, as base-58 encoded string + + + + +A JSON object with one of the following fields: + +- `mint: ` - Pubkey of the specific token Mint to limit accounts to, as base-58 encoded string; or +- `programId: ` - Pubkey of the Token program that owns the accounts, as base-58 encoded string + + + + + +Configuration object containing the following fields: + + + + + The minimum slot that the request can be evaluated at + + + + +limit the returned account data using the provided `offset: ` +and `length: ` fields; only available for +`base58`, `base64`, or `base64+zstd` encodings. + + + + + +Encoding format for Account data + + + +
    + +- `base58` is slow and limited to less than 129 bytes of Account data. +- `base64` will return base64 encoded data for Account data of any size. +- `base64+zstd` compresses the Account data using [Zstandard](https://facebook.github.io/zstd/) + and base64-encodes the result. +- `jsonParsed` encoding attempts to use program-specific state parsers to return + more human-readable and explicit account state data. +- If `jsonParsed` is requested but a parser cannot be found, the field falls + back to `base64` encoding, detectable when the `data` field is type `string`. + +
    + +
    + +
    + +### Result: + +The result will be an RpcResponse JSON object with `value` equal to an array of JSON objects, which will contain: + +- `pubkey: ` - the account Pubkey as base-58 encoded string +- `account: ` - a JSON object, with the following sub fields: + - `lamports: ` - number of lamports assigned to this account, as a u64 + - `owner: ` - base-58 encoded Pubkey of the program this account has been assigned to + - `data: ` - Token state data associated with the account, either as encoded binary data or in JSON format `{: }` + - `executable: ` - boolean indicating if the account contains a program \(and is strictly read-only\) + - `rentEpoch: ` - the epoch at which this account will next owe rent, as u64 + - `size: ` - the data size of the account + +When the data is requested with the `jsonParsed` encoding a format similar to that of the [Token Balances Structure](/api/http#token-balances-structure) can be expected inside the structure, both for the `tokenAmount` and the `delegatedAmount` - with the latter being an optional object. + + + + + +### Code sample: + +```bash +curl http://localhost:8899 -X POST -H "Content-Type: application/json" -d ' + { + "jsonrpc": "2.0", + "id": 1, + "method": "getTokenAccountsByOwner", + "params": [ + "4Qkev8aNZcqFNSRhQzwyLMFSsi94jHqE8WNVTJzTP99F", + { + "mint": "3wyAj7Rt1TWVPZVteFJPLa26JmLvdb1CAKEFZm3NY75E" + }, + { + "encoding": "jsonParsed" + } + ] + } +' +``` + +### Response: + +```json +{ + "jsonrpc": "2.0", + "result": { + "context": { + "slot": 1114 + }, + "value": [ + { + "account": { + "data": { + "program": "spl-token", + "parsed": { + "accountType": "account", + "info": { + "tokenAmount": { + "amount": "1", + "decimals": 1, + "uiAmount": 0.1, + "uiAmountString": "0.1" + }, + "delegate": "4Nd1mBQtrMJVYVfKf2PJy9NZUZdTAsp7D4xWLs4gDB4T", + "delegatedAmount": { + "amount": "1", + "decimals": 1, + "uiAmount": 0.1, + "uiAmountString": "0.1" + }, + "state": "initialized", + "isNative": false, + "mint": "3wyAj7Rt1TWVPZVteFJPLa26JmLvdb1CAKEFZm3NY75E", + "owner": "4Qkev8aNZcqFNSRhQzwyLMFSsi94jHqE8WNVTJzTP99F" + }, + "type": "account" + }, + "space": 165 + }, + "executable": false, + "lamports": 1726080, + "owner": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA", + "rentEpoch": 4, + "space": 165 + }, + "pubkey": "C2gJg6tKpQs41PRS1nC8aw3ZKNZK3HQQZGVrDFDup5nx" + } + ] + }, + "id": 1 +} +``` + + + + diff --git a/docs/src/api/methods/_getTokenLargestAccounts.mdx b/docs/src/api/methods/_getTokenLargestAccounts.mdx new file mode 100644 index 00000000000000..387f00ad2e1bd4 --- /dev/null +++ b/docs/src/api/methods/_getTokenLargestAccounts.mdx @@ -0,0 +1,99 @@ +import { + DocBlock, + DocSideBySide, + CodeParams, + Parameter, + Field, + Values, + CodeSnippets, +} from "../../../components/CodeDocBlock"; + + + +## getTokenLargestAccounts + +Returns the 20 largest accounts of a particular SPL Token type. + + + + +### Parameters: + + + Pubkey of the token Mint to query, as base-58 encoded string + + + + +Configuration object containing the following fields: + + + + + +### Result: + +The result will be an RpcResponse JSON object with `value` equal to an array of JSON objects containing: + +- `address: ` - the address of the token account +- `amount: ` - the raw token account balance without decimals, a string representation of u64 +- `decimals: ` - number of base 10 digits to the right of the decimal place +- `uiAmount: ` - the token account balance, using mint-prescribed decimals **DEPRECATED** +- `uiAmountString: ` - the token account balance as a string, using mint-prescribed decimals + + + + + +### Code sample: + +```bash +curl http://localhost:8899 -X POST -H "Content-Type: application/json" -d ' + { + "jsonrpc": "2.0", "id": 1, + "method": "getTokenLargestAccounts", + "params": [ + "3wyAj7Rt1TWVPZVteFJPLa26JmLvdb1CAKEFZm3NY75E" + ] + } +' +``` + +### Response: + +```json +{ + "jsonrpc": "2.0", + "result": { + "context": { + "slot": 1114 + }, + "value": [ + { + "address": "FYjHNoFtSQ5uijKrZFyYAxvEr87hsKXkXcxkcmkBAf4r", + "amount": "771", + "decimals": 2, + "uiAmount": 7.71, + "uiAmountString": "7.71" + }, + { + "address": "BnsywxTcaYeNUtzrPxQUvzAWxfzZe3ZLUJ4wMMuLESnu", + "amount": "229", + "decimals": 2, + "uiAmount": 2.29, + "uiAmountString": "2.29" + } + ] + }, + "id": 1 +} +``` + + + + diff --git a/docs/src/api/methods/_getTokenSupply.mdx b/docs/src/api/methods/_getTokenSupply.mdx new file mode 100644 index 00000000000000..af42feee0683ac --- /dev/null +++ b/docs/src/api/methods/_getTokenSupply.mdx @@ -0,0 +1,88 @@ +import { + DocBlock, + DocSideBySide, + CodeParams, + Parameter, + Field, + Values, + CodeSnippets, +} from "../../../components/CodeDocBlock"; + + + +## getTokenSupply + +Returns the total supply of an SPL Token type. + + + + +### Parameters: + + + Pubkey of the token Mint to query, as base-58 encoded string + + + + +Configuration object containing the following fields: + + + + + +### Result: + +The result will be an RpcResponse JSON object with `value` equal to a JSON object containing: + +- `amount: ` - the raw total token supply without decimals, a string representation of u64 +- `decimals: ` - number of base 10 digits to the right of the decimal place +- `uiAmount: ` - the total token supply, using mint-prescribed decimals **DEPRECATED** +- `uiAmountString: ` - the total token supply as a string, using mint-prescribed decimals + + + + + +### Code sample: + +```bash +curl http://localhost:8899 -X POST -H "Content-Type: application/json" -d ' + { + "jsonrpc": "2.0", "id": 1, + "method": "getTokenSupply", + "params": [ + "3wyAj7Rt1TWVPZVteFJPLa26JmLvdb1CAKEFZm3NY75E" + ] + } +' +``` + +### Response: + +```json +{ + "jsonrpc": "2.0", + "result": { + "context": { + "slot": 1114 + }, + "value": { + "amount": "100000", + "decimals": 2, + "uiAmount": 1000, + "uiAmountString": "1000" + } + }, + "id": 1 +} +``` + + + + diff --git a/docs/src/api/methods/_getTransaction.mdx b/docs/src/api/methods/_getTransaction.mdx new file mode 100644 index 00000000000000..c4e17e53c7fd2a --- /dev/null +++ b/docs/src/api/methods/_getTransaction.mdx @@ -0,0 +1,172 @@ +import { + DocBlock, + DocSideBySide, + CodeParams, + Parameter, + Field, + Values, + CodeSnippets, +} from "../../../components/CodeDocBlock"; + + + +## getTransaction + +Returns transaction details for a confirmed transaction + + + + +### Parameters: + + + Transaction signature, as base-58 encoded string + + + + +Configuration object containing the following fields: + + + + + Set the max transaction version to return in responses. If the requested + transaction is a higher version, an error will be returned. If this parameter + is omitted, only legacy transactions will be returned, and any versioned + transaction will prompt the error. + + + + +Encoding for the returned Transaction + + + +
    + +- `jsonParsed` encoding attempts to use program-specific state parsers to return + more human-readable and explicit data in the `transaction.message.instructions` list. +- If `jsonParsed` is requested but a parser cannot be found, the instruction + falls back to regular JSON encoding (`accounts`, `data`, and `programIdIndex` fields). + +
    + +
    + +
    + +### Result: + +- `` - if transaction is not found or not confirmed +- `` - if transaction is confirmed, an object with the following fields: + - `slot: ` - the slot this transaction was processed in + - `transaction: ` - [Transaction](#transaction-structure) object, either in JSON format or encoded binary data, depending on encoding parameter + - `blockTime: ` - estimated production time, as Unix timestamp (seconds since the Unix epoch) of when the transaction was processed. null if not available + - `meta: ` - transaction status metadata object: + - `err: ` - Error if transaction failed, null if transaction succeeded. [TransactionError definitions](https://docs.rs/solana-sdk/VERSION_FOR_DOCS_RS/solana_sdk/transaction/enum.TransactionError.html) + - `fee: ` - fee this transaction was charged, as u64 integer + - `preBalances: ` - array of u64 account balances from before the transaction was processed + - `postBalances: ` - array of u64 account balances after the transaction was processed + - `innerInstructions: ` - List of [inner instructions](#inner-instructions-structure) or `null` if inner instruction recording was not enabled during this transaction + - `preTokenBalances: ` - List of [token balances](#token-balances-structure) from before the transaction was processed or omitted if token balance recording was not yet enabled during this transaction + - `postTokenBalances: ` - List of [token balances](#token-balances-structure) from after the transaction was processed or omitted if token balance recording was not yet enabled during this transaction + - `logMessages: ` - array of string log messages or `null` if log message recording was not enabled during this transaction + - DEPRECATED: `status: ` - Transaction status + - `"Ok": ` - Transaction was successful + - `"Err": ` - Transaction failed with TransactionError + - `rewards: ` - transaction-level rewards, populated if rewards are requested; an array of JSON objects containing: + - `pubkey: ` - The public key, as base-58 encoded string, of the account that received the reward + - `lamports: `- number of reward lamports credited or debited by the account, as a i64 + - `postBalance: ` - account balance in lamports after the reward was applied + - `rewardType: ` - type of reward: currently only "rent", other types may be added in the future + - `commission: ` - vote account commission when the reward was credited, only present for voting and staking rewards + - `loadedAddresses: ` - Transaction addresses loaded from address lookup tables. Undefined if `maxSupportedTransactionVersion` is not set in request params. + - `writable: ` - Ordered list of base-58 encoded addresses for writable loaded accounts + - `readonly: ` - Ordered list of base-58 encoded addresses for readonly loaded accounts + - `returnData: ` - the most-recent return data generated by an instruction in the transaction, with the following fields: + - `programId: ` - the program that generated the return data, as base-58 encoded Pubkey + - `data: <[string, encoding]>` - the return data itself, as base-64 encoded binary data + - `computeUnitsConsumed: ` - number of [compute units](developing/programming-model/runtime.md#compute-budget) consumed by the transaction + - `version: <"legacy"|number|undefined>` - Transaction version. Undefined if `maxSupportedTransactionVersion` is not set in request params. + + + + + +### Code sample: + +```bash +curl http://localhost:8899 -X POST -H "Content-Type: application/json" -d ' + { + "jsonrpc": "2.0", + "id": 1, + "method": "getTransaction", + "params": [ + "2nBhEBYYvfaAe16UMNqRHre4YNSskvuYgx3M6E4JP1oDYvZEJHvoPzyUidNgNX5r9sTyN1J9UxtbCXy2rqYcuyuv", + "json" + ] + } +' +``` + +### Response: + +```json +{ + "jsonrpc": "2.0", + "result": { + "meta": { + "err": null, + "fee": 5000, + "innerInstructions": [], + "postBalances": [499998932500, 26858640, 1, 1, 1], + "postTokenBalances": [], + "preBalances": [499998937500, 26858640, 1, 1, 1], + "preTokenBalances": [], + "rewards": [], + "status": { + "Ok": null + } + }, + "slot": 430, + "transaction": { + "message": { + "accountKeys": [ + "3UVYmECPPMZSCqWKfENfuoTv51fTDTWicX9xmBD2euKe", + "AjozzgE83A3x1sHNUR64hfH7zaEBWeMaFuAN9kQgujrc", + "SysvarS1otHashes111111111111111111111111111", + "SysvarC1ock11111111111111111111111111111111", + "Vote111111111111111111111111111111111111111" + ], + "header": { + "numReadonlySignedAccounts": 0, + "numReadonlyUnsignedAccounts": 3, + "numRequiredSignatures": 1 + }, + "instructions": [ + { + "accounts": [1, 2, 3, 0], + "data": "37u9WtQpcm6ULa3WRQHmj49EPs4if7o9f1jSRVZpm2dvihR9C8jY4NqEwXUbLwx15HBSNcP1", + "programIdIndex": 4 + } + ], + "recentBlockhash": "mfcyqEXB3DnHXki6KjjmZck6YjmZLvpAByy2fj4nh6B" + }, + "signatures": [ + "2nBhEBYYvfaAe16UMNqRHre4YNSskvuYgx3M6E4JP1oDYvZEJHvoPzyUidNgNX5r9sTyN1J9UxtbCXy2rqYcuyuv" + ] + } + }, + "blockTime": null, + "id": 1 +} +``` + + + + diff --git a/docs/src/api/methods/_getTransactionCount.mdx b/docs/src/api/methods/_getTransactionCount.mdx new file mode 100644 index 00000000000000..3a966a1f66dbf2 --- /dev/null +++ b/docs/src/api/methods/_getTransactionCount.mdx @@ -0,0 +1,63 @@ +import { + DocBlock, + DocSideBySide, + CodeParams, + Parameter, + Field, + Values, + CodeSnippets, +} from "../../../components/CodeDocBlock"; + + + +## getTransactionCount + +Returns the current Transaction count from the ledger + + + + +### Parameters: + + + +Configuration object containing the following fields: + + + + + The minimum slot that the request can be evaluated at + + + + +### Result: + +`` - the current Transaction count from the ledger + + + + + +### Code sample: + +```bash +curl http://localhost:8899 -X POST -H "Content-Type: application/json" -d ' + {"jsonrpc":"2.0","id":1, "method":"getTransactionCount"} +' +``` + +### Response: + +```json +{ "jsonrpc": "2.0", "result": 268, "id": 1 } +``` + + + + diff --git a/docs/src/api/methods/_getVersion.mdx b/docs/src/api/methods/_getVersion.mdx new file mode 100644 index 00000000000000..0ed4d94020fd2a --- /dev/null +++ b/docs/src/api/methods/_getVersion.mdx @@ -0,0 +1,51 @@ +import { + DocBlock, + DocSideBySide, + CodeParams, + Parameter, + Field, + Values, + CodeSnippets, +} from "../../../components/CodeDocBlock"; + + + +## getVersion + +Returns the current Solana version running on the node + + + + +### Parameters: + +**None** + +### Result: + +The result field will be a JSON object with the following fields: + +- `solana-core` - software version of solana-core +- `feature-set` - unique identifier of the current software's feature set + + + + + +### Code sample: + +```bash +curl http://localhost:8899 -X POST -H "Content-Type: application/json" -d ' + {"jsonrpc":"2.0","id":1, "method":"getVersion"} +' +``` + +### Response: + +```json +{ "jsonrpc": "2.0", "result": { "solana-core": "1.15.0" }, "id": 1 } +``` + + + + diff --git a/docs/src/api/methods/_getVoteAccounts.mdx b/docs/src/api/methods/_getVoteAccounts.mdx new file mode 100644 index 00000000000000..04a57a3aa42207 --- /dev/null +++ b/docs/src/api/methods/_getVoteAccounts.mdx @@ -0,0 +1,114 @@ +import { + DocBlock, + DocSideBySide, + CodeParams, + Parameter, + Field, + Values, + CodeSnippets, +} from "../../../components/CodeDocBlock"; + + + +## getVoteAccounts + +Returns the account info and associated stake for all the voting accounts in the current bank. + + + + +### Parameters: + + + +Configuration object containing the following fields: + + + + + Only return results for this validator vote address (base-58 encoded) + + + + Do not filter out delinquent validators with no stake + + + + Specify the number of slots behind the tip that a validator must fall to be + considered delinquent. **NOTE:** For the sake of consistency between ecosystem + products, _it is **not** recommended that this argument be specified._ + + + + +### Result: + +The result field will be a JSON object of `current` and `delinquent` accounts, +each containing an array of JSON objects with the following sub fields: + +- `votePubkey: ` - Vote account address, as base-58 encoded string +- `nodePubkey: ` - Validator identity, as base-58 encoded string +- `activatedStake: ` - the stake, in lamports, delegated to this vote account and active in this epoch +- `epochVoteAccount: ` - bool, whether the vote account is staked for this epoch +- `commission: ` - percentage (0-100) of rewards payout owed to the vote account +- `lastVote: ` - Most recent slot voted on by this vote account +- `epochCredits: ` - Latest history of earned credits for up to five epochs, as an array of arrays containing: `[epoch, credits, previousCredits]`. +- `rootSlot: ` - Current root slot for this vote account + + + + + +### Code sample: + +Restrict results to a single validator vote account: + +```bash +curl http://localhost:8899 -X POST -H "Content-Type: application/json" -d ' + { + "jsonrpc": "2.0", + "id": 1, + "method": "getVoteAccounts", + "params": [ + { + "votePubkey": "3ZT31jkAGhUaw8jsy4bTknwBMP8i4Eueh52By4zXcsVw" + } + ] + } +' +``` + +### Response: + +```json +{ + "jsonrpc": "2.0", + "result": { + "current": [ + { + "commission": 0, + "epochVoteAccount": true, + "epochCredits": [ + [1, 64, 0], + [2, 192, 64] + ], + "nodePubkey": "B97CCUW3AEZFGy6uUg6zUdnNYvnVq5VG8PUtb2HayTDD", + "lastVote": 147, + "activatedStake": 42, + "votePubkey": "3ZT31jkAGhUaw8jsy4bTknwBMP8i4Eueh52By4zXcsVw" + } + ], + "delinquent": [] + }, + "id": 1 +} +``` + + + + diff --git a/docs/src/api/methods/_isBlockhashValid.mdx b/docs/src/api/methods/_isBlockhashValid.mdx new file mode 100644 index 00000000000000..d8903dc0ee44eb --- /dev/null +++ b/docs/src/api/methods/_isBlockhashValid.mdx @@ -0,0 +1,89 @@ +import { + DocBlock, + DocSideBySide, + CodeParams, + Parameter, + Field, + Values, + CodeSnippets, +} from "../../../components/CodeDocBlock"; + + + +## isBlockhashValid + +Returns whether a blockhash is still valid or not + +:::caution +NEW: This method is only available in solana-core v1.9 or newer. Please use +[getFeeCalculatorForBlockhash](#getfeecalculatorforblockhash) for solana-core v1.8 +::: + + + + +### Parameters: + + + the blockhash of the block to evauluate, as base-58 encoded string + + + + +Configuration object containing the following fields: + + + + + The minimum slot that the request can be evaluated at + + + + +### Result: + +`` - `true` if the blockhash is still valid + + + + + +### Code sample: + +```bash +curl http://localhost:8899 -X POST -H "Content-Type: application/json" -d ' + { + "id":45, + "jsonrpc":"2.0", + "method":"isBlockhashValid", + "params":[ + "J7rBdM6AecPDEZp8aPq5iPSNKVkU5Q76F3oAV4eW5wsW", + {"commitment":"processed"} + ] + } +' +``` + +### Response: + +```json +{ + "jsonrpc": "2.0", + "result": { + "context": { + "slot": 2483 + }, + "value": false + }, + "id": 1 +} +``` + + + + diff --git a/docs/src/api/methods/_minimumLedgerSlot.mdx b/docs/src/api/methods/_minimumLedgerSlot.mdx new file mode 100644 index 00000000000000..1ac63315d972ed --- /dev/null +++ b/docs/src/api/methods/_minimumLedgerSlot.mdx @@ -0,0 +1,52 @@ +import { + DocBlock, + DocSideBySide, + CodeParams, + Parameter, + Field, + Values, + CodeSnippets, +} from "../../../components/CodeDocBlock"; + + + +## minimumLedgerSlot + +Returns the lowest slot that the node has information about in its ledger. + +:::info +This value may increase over time if the node is configured to purge older ledger data +::: + + + + +### Parameters: + +**None** + +### Result: + +`u64` - Minimum ledger slot number + + + + + +### Code sample: + +```bash +curl http://localhost:8899 -X POST -H "Content-Type: application/json" -d ' + {"jsonrpc":"2.0","id":1, "method":"minimumLedgerSlot"} +' +``` + +### Response: + +```json +{ "jsonrpc": "2.0", "result": 1234, "id": 1 } +``` + + + + diff --git a/docs/src/api/methods/_requestAirdrop.mdx b/docs/src/api/methods/_requestAirdrop.mdx new file mode 100644 index 00000000000000..7a9cf3527f919d --- /dev/null +++ b/docs/src/api/methods/_requestAirdrop.mdx @@ -0,0 +1,78 @@ +import { + DocBlock, + DocSideBySide, + CodeParams, + Parameter, + Field, + Values, + CodeSnippets, +} from "../../../components/CodeDocBlock"; + + + +## requestAirdrop + +Requests an airdrop of lamports to a Pubkey + + + + +### Parameters: + + + Pubkey of account to receive lamports, as a base-58 encoded string + + + + lamports to airdrop, as a "u64" + + + + +Configuration object containing the following fields: + + + + + +### Result: + +`` - Transaction Signature of the airdrop, as a base-58 encoded string + + + + + +### Code sample: + +```bash +curl http://localhost:8899 -X POST -H "Content-Type: application/json" -d ' + { + "jsonrpc": "2.0", "id": 1, + "method": "requestAirdrop", + "params": [ + "83astBRguLMdt2h5U1Tpdq5tjFoJ6noeGwaY3mDLVcri", + 1000000000 + ] + } +' +``` + +### Response: + +```json +{ + "jsonrpc": "2.0", + "result": "5VERv8NMvzbJMEkV8xnrLkEaWRtSz9CosKDYjCJjBRnbJLgp8uirBgmQpjKhoR4tjF3ZpRzrFmBV6UjKdiSZkQUW", + "id": 1 +} +``` + + + + diff --git a/docs/src/api/methods/_sendTransaction.mdx b/docs/src/api/methods/_sendTransaction.mdx new file mode 100644 index 00000000000000..fc9978aaeea0c6 --- /dev/null +++ b/docs/src/api/methods/_sendTransaction.mdx @@ -0,0 +1,124 @@ +import { + DocBlock, + DocSideBySide, + CodeParams, + Parameter, + Field, + Values, + CodeSnippets, +} from "../../../components/CodeDocBlock"; + + + +## sendTransaction + +Submits a signed transaction to the cluster for processing. + +This method does not alter the transaction in any way; it relays the +transaction created by clients to the node as-is. + +If the node's rpc service receives the transaction, this method immediately +succeeds, without waiting for any confirmations. A successful response from +this method does not guarantee the transaction is processed or confirmed by the +cluster. + +While the rpc service will reasonably retry to submit it, the transaction +could be rejected if transaction's `recent_blockhash` expires before it lands. + +Use [`getSignatureStatuses`](#getsignaturestatuses) to ensure a transaction is processed and confirmed. + +Before submitting, the following preflight checks are performed: + +1. The transaction signatures are verified +2. The transaction is simulated against the bank slot specified by the preflight + commitment. On failure an error will be returned. Preflight checks may be + disabled if desired. It is recommended to specify the same commitment and + preflight commitment to avoid confusing behavior. + +The returned signature is the first signature in the transaction, which +is used to identify the transaction ([transaction id](../../terminology.md#transaction-id)). +This identifier can be easily extracted from the transaction data before +submission. + + + + +### Parameters: + + + Fully-signed Transaction, as encoded string. + + + + +Configuration object containing the following optional fields: + + + +Encoding used for the transaction data. + +Values: `base58` (_slow_, **DEPRECATED**), or `base64`. + + + + + if "true", skip the preflight transaction checks + + + + Commitment level to use for preflight. + + + + Maximum number of times for the RPC node to retry sending the transaction to + the leader. If this parameter not provided, the RPC node will retry the + transaction until it is finalized or until the blockhash expires. + + + + set the minimum slot at which to perform preflight transaction checks + + + + +### Result: + +`` - First Transaction Signature embedded in the transaction, as base-58 encoded string ([transaction id](../../terminology.md#transaction-id)) + + + + + +### Code sample: + +```bash +curl http://localhost:8899 -X POST -H "Content-Type: application/json" -d ' + { + "jsonrpc": "2.0", + "id": 1, + "method": "sendTransaction", + "params": [ + "4hXTCkRzt9WyecNzV1XPgCDfGAZzQKNxLXgynz5QDuWWPSAZBZSHptvWRL3BjCvzUXRdKvHL2b7yGrRQcWyaqsaBCncVG7BFggS8w9snUts67BSh3EqKpXLUm5UMHfD7ZBe9GhARjbNQMLJ1QD3Spr6oMTBU6EhdB4RD8CP2xUxr2u3d6fos36PD98XS6oX8TQjLpsMwncs5DAMiD4nNnR8NBfyghGCWvCVifVwvA8B8TJxE1aiyiv2L429BCWfyzAme5sZW8rDb14NeCQHhZbtNqfXhcp2tAnaAT" + ] + } +' +``` + +### Response: + +```json +{ + "jsonrpc": "2.0", + "result": "2id3YC2jK9G5Wo2phDx4gJVAew8DcY5NAojnVuao8rkxwPYPe8cSwE5GzhEgJA2y8fVjDEo6iR6ykBvDxrTQrtpb", + "id": 1 +} +``` + + + + diff --git a/docs/src/api/methods/_simulateTransaction.mdx b/docs/src/api/methods/_simulateTransaction.mdx new file mode 100644 index 00000000000000..fbae901244a97b --- /dev/null +++ b/docs/src/api/methods/_simulateTransaction.mdx @@ -0,0 +1,174 @@ +import { + DocBlock, + DocSideBySide, + CodeParams, + Parameter, + Field, + Values, + CodeSnippets, +} from "../../../components/CodeDocBlock"; + + + +## simulateTransaction + +Simulate sending a transaction + + + + +### Parameters: + + + +Transaction, as an encoded string. + +:::note +The transaction must have a valid blockhash, but is not required to be signed. +::: + + + + + +Configuration object containing the following fields: + + + Commitment level to simulate the transaction at + + + + if `true` the transaction signatures will be verified (conflicts with + `replaceRecentBlockhash`) + + + + if `true` the transaction recent blockhash will be replaced with the most + recent blockhash. (conflicts with `sigVerify`) + + + + the minimum slot that the request can be evaluated at + + + + +Encoding used for the transaction data. + +Values: `base58` (_slow_, **DEPRECATED**), or `base64`. + + + + + +Accounts configuration object containing the following fields: + + + An `array` of accounts to return, as base-58 encoded strings + + + + +encoding for returned Account data + + + +
    + +- `jsonParsed` encoding attempts to use program-specific state + parsers to return more human-readable and explicit account state data. +- If `jsonParsed` is requested but a parser cannot be found, the field falls + back to binary encoding, detectable when the `data` field is type `string`. + +
    + +
    + +
    + +
    + +### Result: + +The result will be an RpcResponse JSON object with `value` set to a JSON object with the following fields: + +- `err: ` - Error if transaction failed, null if transaction succeeded. [TransactionError definitions](https://github.com/solana-labs/solana/blob/c0c60386544ec9a9ec7119229f37386d9f070523/sdk/src/transaction/error.rs#L13) +- `logs: ` - Array of log messages the transaction instructions output during execution, null if simulation failed before the transaction was able to execute (for example due to an invalid blockhash or signature verification failure) +- `accounts: ` - array of accounts with the same length as the `accounts.addresses` array in the request + - `` - if the account doesn't exist or if `err` is not null + - `` - otherwise, a JSON object containing: + - `lamports: ` - number of lamports assigned to this account, as a u64 + - `owner: ` - base-58 encoded Pubkey of the program this account has been assigned to + - `data: <[string, encoding]|object>` - data associated with the account, either as encoded binary data or JSON format `{: }` - depending on encoding parameter + - `executable: ` - boolean indicating if the account contains a program \(and is strictly read-only\) + - `rentEpoch: ` - the epoch at which this account will next owe rent, as u64 +- `unitsConsumed: ` - The number of compute budget units consumed during the processing of this transaction +- `returnData: ` - the most-recent return data generated by an instruction in the transaction, with the following fields: + - `programId: ` - the program that generated the return data, as base-58 encoded Pubkey + - `data: <[string, encoding]>` - the return data itself, as base-64 encoded binary data + + + + + +### Code sample: + +```bash +curl http://localhost:8899 -X POST -H "Content-Type: application/json" -d ' + { + "jsonrpc": "2.0", + "id": 1, + "method": "simulateTransaction", + "params": [ + "AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAEDArczbMia1tLmq7zz4DinMNN0pJ1JtLdqIJPUw3YrGCzYAMHBsgN27lcgB6H2WQvFgyZuJYHa46puOQo9yQ8CVQbd9uHXZaGT2cvhRs7reawctIXtX1s3kTqM9YV+/wCp20C7Wj2aiuk5TReAXo+VTVg8QTHjs0UjNMMKCvpzZ+ABAgEBARU=", + { + "encoding":"base64", + } + ] + } +' +``` + +### Response: + +```json +{ + "jsonrpc": "2.0", + "result": { + "context": { + "slot": 218 + }, + "value": { + "err": null, + "accounts": null, + "logs": [ + "Program 83astBRguLMdt2h5U1Tpdq5tjFoJ6noeGwaY3mDLVcri invoke [1]", + "Program 83astBRguLMdt2h5U1Tpdq5tjFoJ6noeGwaY3mDLVcri consumed 2366 of 1400000 compute units", + "Program return: 83astBRguLMdt2h5U1Tpdq5tjFoJ6noeGwaY3mDLVcri KgAAAAAAAAA=", + "Program 83astBRguLMdt2h5U1Tpdq5tjFoJ6noeGwaY3mDLVcri success" + ], + "returnData": { + "data": ["Kg==", "base64"], + "programId": "83astBRguLMdt2h5U1Tpdq5tjFoJ6noeGwaY3mDLVcri" + }, + "unitsConsumed": 2366 + } + }, + "id": 1 +} +``` + + + + diff --git a/docs/src/api/websocket.md b/docs/src/api/websocket.md new file mode 100644 index 00000000000000..d409072f462901 --- /dev/null +++ b/docs/src/api/websocket.md @@ -0,0 +1,91 @@ +--- +title: RPC Websocket API +displayed_sidebar: apiWebsocketMethodsSidebar +hide_table_of_contents: true +--- + +After connecting to the RPC PubSub websocket at `ws://
    /`: + +- Submit subscription requests to the websocket using the methods below +- Multiple subscriptions may be active at once +- Many subscriptions take the optional [`commitment` parameter](/api/http#configuring-state-commitment), defining how finalized a change should be to trigger a notification. For subscriptions, if commitment is unspecified, the default value is `finalized`. + +## RPC PubSub WebSocket Endpoint + +**Default port:** 8900 e.g. ws://localhost:8900, [http://192.168.1.88:8900](http://192.168.1.88:8900) + +## Methods + +The following methods are supported in the RPC Websocket API: + +import AccountSubscribe from "./websocket/\_accountSubscribe.mdx" + + + +import AccountUnsubscribe from "./websocket/\_accountUnsubscribe.mdx" + + + +import BlockSubscribe from "./websocket/\_blockSubscribe.mdx" + + + +import BlockUnsubscribe from "./websocket/\_blockUnsubscribe.mdx" + + + +import LogsSubscribe from "./websocket/\_logsSubscribe.mdx" + + + +import LogsUnsubscribe from "./websocket/\_logsUnsubscribe.mdx" + + + +import ProgramSubscribe from "./websocket/\_programSubscribe.mdx" + + + +import ProgramUnsubscribe from "./websocket/\_programUnsubscribe.mdx" + + + +import SignatureSubscribe from "./websocket/\_signatureSubscribe.mdx" + + + +import SignatureUnsubscribe from "./websocket/\_signatureUnsubscribe.mdx" + + + +import SlotSubscribe from "./websocket/\_slotSubscribe.mdx" + + + +import SlotUnsubscribe from "./websocket/\_slotUnsubscribe.mdx" + + + +import SlotsUpdatesSubscribe from "./websocket/\_slotsUpdatesSubscribe.mdx" + + + +import SlotsUpdatesUnsubscribe from "./websocket/\_slotsUpdatesUnsubscribe.mdx" + + + +import RootSubscribe from "./websocket/\_rootSubscribe.mdx" + + + +import RootUnsubscribe from "./websocket/\_rootUnsubscribe.mdx" + + + +import VoteSubscribe from "./websocket/\_voteSubscribe.mdx" + + + +import VoteUnsubscribe from "./websocket/\_voteUnsubscribe.mdx" + + diff --git a/docs/src/api/websocket/_accountSubscribe.mdx b/docs/src/api/websocket/_accountSubscribe.mdx new file mode 100644 index 00000000000000..f86e214a64aa92 --- /dev/null +++ b/docs/src/api/websocket/_accountSubscribe.mdx @@ -0,0 +1,160 @@ +import { + DocBlock, + DocSideBySide, + CodeParams, + Parameter, + Field, + Values, + CodeSnippets, +} from "../../../components/CodeDocBlock"; + + + +## accountSubscribe + +Subscribe to an account to receive notifications when the lamports or data for a given account public key changes + + + + +### Parameters: + + + Account Pubkey, as base-58 encoded string + + + + +Configuration object containing the following fields: + + + + + +Encoding format for Account data + + + +
    + +- `base58` is slow. +- `jsonParsed` encoding attempts to use program-specific state parsers to return more + human-readable and explicit account state data +- If `jsonParsed` is requested but a parser cannot be found, the field falls back to + binary encoding, detectable when the `data`field is type`string`. + +
    + +
    + +
    + +### Result: + +`` - Subscription id \(needed to unsubscribe\) + +
    + + + +### Code sample: + +```json +{ + "jsonrpc": "2.0", + "id": 1, + "method": "accountSubscribe", + "params": [ + "CM78CPUeXjn8o3yroDHxUtKsZZgoy4GPkPPXfouKNH12", + { + "encoding": "jsonParsed", + "commitment": "finalized" + } + ] +} +``` + +### Response: + +```json +{ "jsonrpc": "2.0", "result": 23784, "id": 1 } +``` + + +
    + +#### Notification Format: + +The notification format is the same as seen in the [getAccountInfo](#getAccountInfo) RPC HTTP method. + +Base58 encoding: + +```json +{ + "jsonrpc": "2.0", + "method": "accountNotification", + "params": { + "result": { + "context": { + "slot": 5199307 + }, + "value": { + "data": [ + "11116bv5nS2h3y12kD1yUKeMZvGcKLSjQgX6BeV7u1FrjeJcKfsHPXHRDEHrBesJhZyqnnq9qJeUuF7WHxiuLuL5twc38w2TXNLxnDbjmuR", + "base58" + ], + "executable": false, + "lamports": 33594, + "owner": "11111111111111111111111111111111", + "rentEpoch": 635, + "space": 80 + } + }, + "subscription": 23784 + } +} +``` + +Parsed-JSON encoding: + +```json +{ + "jsonrpc": "2.0", + "method": "accountNotification", + "params": { + "result": { + "context": { + "slot": 5199307 + }, + "value": { + "data": { + "program": "nonce", + "parsed": { + "type": "initialized", + "info": { + "authority": "Bbqg1M4YVVfbhEzwA9SpC9FhsaG83YMTYoR4a8oTDLX", + "blockhash": "LUaQTmM7WbMRiATdMMHaRGakPtCkc2GHtH57STKXs6k", + "feeCalculator": { + "lamportsPerSignature": 5000 + } + } + } + }, + "executable": false, + "lamports": 33594, + "owner": "11111111111111111111111111111111", + "rentEpoch": 635, + "space": 80 + } + }, + "subscription": 23784 + } +} +``` + +
    diff --git a/docs/src/api/websocket/_accountUnsubscribe.mdx b/docs/src/api/websocket/_accountUnsubscribe.mdx new file mode 100644 index 00000000000000..d3a90de9ab9132 --- /dev/null +++ b/docs/src/api/websocket/_accountUnsubscribe.mdx @@ -0,0 +1,53 @@ +import { + DocBlock, + DocSideBySide, + CodeParams, + Parameter, + Field, + Values, + CodeSnippets, +} from "../../../components/CodeDocBlock"; + + + +## accountUnsubscribe + +Unsubscribe from account change notifications + + + + +### Parameters: + + + id of the account Subscription to cancel + + +### Result: + +`` - unsubscribe success message + + + + + +### Code sample: + +```json +{ + "jsonrpc": "2.0", + "id": 1, + "method": "accountUnsubscribe", + "params": [0] +} +``` + +### Response: + +```json +{ "jsonrpc": "2.0", "result": true, "id": 1 } +``` + + + + diff --git a/docs/src/api/websocket/_blockSubscribe.mdx b/docs/src/api/websocket/_blockSubscribe.mdx new file mode 100644 index 00000000000000..078f7585846e7f --- /dev/null +++ b/docs/src/api/websocket/_blockSubscribe.mdx @@ -0,0 +1,342 @@ +import { + DocBlock, + DocSideBySide, + CodeParams, + Parameter, + Field, + Values, + CodeSnippets, +} from "../../../components/CodeDocBlock"; + + + +## blockSubscribe + +Subscribe to receive notification anytime a new block is Confirmed or Finalized. + +:::caution +This subscription is **unstable** and only available if the validator was started +with the `--rpc-pubsub-enable-block-subscription` flag. + +**NOTE: The format of this subscription may change in the future** +::: + + + + +### Parameters: + + + +filter criteria for the logs to receive results by account type; currently supported: + + + all - include all transactions in block + + + + +A JSON object with the following field: + +- `mentionsAccountOrProgram: ` - return only transactions that mention the provided public key (as base-58 encoded string). If no mentions in a given block, then no notification will be sent. + + + + + + + +Configuration object containing the following fields: + + + + + level of transaction detail to return, either "full", "signatures", or "none". + + + + whether to populate the `rewards` array. + + + + +Encoding format for Account data + + + +
    + +- `base58` is slow +- `jsonParsed` encoding attempts to use program-specific state parsers to return + more human-readable and explicit account state data. +- If `jsonParsed` is requested but a parser cannot be found, the field falls back + to `base64` encoding, detectable when the `data` field is type `string`. + +
    + +
    + +
    + +### Result: + +`integer` - subscription id \(needed to unsubscribe\) + +
    + + + +### Code sample: + +```json +{ + "jsonrpc": "2.0", + "id": "1", + "method": "blockSubscribe", + "params": ["all"] +} +``` + +```json +{ + "jsonrpc": "2.0", + "id": "1", + "method": "blockSubscribe", + "params": [ + { + "mentionsAccountOrProgram": "LieKvPRE8XeX3Y2xVNHjKlpAScD12lYySBVQ4HqoJ5op" + }, + { + "commitment": "confirmed", + "encoding": "base64", + "showRewards": true, + "transactionDetails": "full" + } + ] +} +``` + +### Response: + +```json +{ "jsonrpc": "2.0", "result": 0, "id": 1 } +``` + + +
    + +#### Notification Format: + +The notification will be an object with the following fields: + +- `slot: ` - The corresponding slot. +- `err: ` - Error if something went wrong publishing the notification otherwise null. +- `block: ` - A block object as seen in the [getBlock](/api/http#getblock) RPC HTTP method. + +```json +{ + "jsonrpc": "2.0", + "method": "blockNotification", + "params": { + "result": { + "context": { + "slot": 112301554 + }, + "value": { + "slot": 112301554, + "block": { + "previousBlockhash": "GJp125YAN4ufCSUvZJVdCyWQJ7RPWMmwxoyUQySydZA", + "blockhash": "6ojMHjctdqfB55JDpEpqfHnP96fiaHEcvzEQ2NNcxzHP", + "parentSlot": 112301553, + "transactions": [ + { + "transaction": [ + "OpltwoUvWxYi1P2U8vbIdE/aPntjYo5Aa0VQ2JJyeJE2g9Vvxk8dDGgFMruYfDu8/IfUWb0REppTe7IpAuuLRgIBAAkWnj4KHRpEWWW7gvO1c0BHy06wZi2g7/DLqpEtkRsThAXIdBbhXCLvltw50ZnjDx2hzw74NVn49kmpYj2VZHQJoeJoYJqaKcvuxCi/2i4yywedcVNDWkM84Iuw+cEn9/ROCrXY4qBFI9dveEERQ1c4kdU46xjxj9Vi+QXkb2Kx45QFVkG4Y7HHsoS6WNUiw2m4ffnMNnOVdF9tJht7oeuEfDMuUEaO7l9JeUxppCvrGk3CP45saO51gkwVYEgKzhpKjCx3rgsYxNR81fY4hnUQXSbbc2Y55FkwgRBpVvQK7/+clR4Gjhd3L4y+OtPl7QF93Akg1LaU9wRMs5nvfDFlggqI9PqJl+IvVWrNRdBbPS8LIIhcwbRTkSbqlJQWxYg3Bo2CTVbw7rt1ZubuHWWp0mD/UJpLXGm2JprWTePNULzHu67sfqaWF99LwmwjTyYEkqkRt1T0Je5VzHgJs0N5jY4iIU9K3lMqvrKOIn/2zEMZ+ol2gdgjshx+sphIyhw65F3J/Dbzk04LLkK+CULmN571Y+hFlXF2ke0BIuUG6AUF+4214Cu7FXnqo3rkxEHDZAk0lRrAJ8X/Z+iwuwI5cgbd9uHXZaGT2cvhRs7reawctIXtX1s3kTqM9YV+/wCpDLAp8axcEkaQkLDKRoWxqp8XLNZSKial7Rk+ELAVVKWoWLRXRZ+OIggu0OzMExvVLE5VHqy71FNHq4gGitkiKYNFWSLIE4qGfdFLZXy/6hwS+wq9ewjikCpd//C9BcCL7Wl0iQdUslxNVCBZHnCoPYih9JXvGefOb9WWnjGy14sG9j70+RSVx6BlkFELWwFvIlWR/tHn3EhHAuL0inS2pwX7ZQTAU6gDVaoqbR2EiJ47cKoPycBNvHLoKxoY9AZaBjPl6q8SKQJSFyFd9n44opAgI6zMTjYF/8Ok4VpXEESp3QaoUyTI9sOJ6oFP6f4dwnvQelgXS+AEfAsHsKXxGAIUDQENAgMEBQAGBwgIDg8IBJCER3QXl1AVDBADCQoOAAQLERITDAjb7ugh3gOuTy==", + "base64" + ], + "meta": { + "err": null, + "status": { + "Ok": null + }, + "fee": 5000, + "preBalances": [ + 1758510880, 2067120, 1566000, 1461600, 2039280, 2039280, + 1900080, 1865280, 0, 3680844220, 2039280 + ], + "postBalances": [ + 1758505880, 2067120, 1566000, 1461600, 2039280, 2039280, + 1900080, 1865280, 0, 3680844220, 2039280 + ], + "innerInstructions": [ + { + "index": 0, + "instructions": [ + { + "programIdIndex": 13, + "accounts": [1, 15, 3, 4, 2, 14], + "data": "21TeLgZXNbtHXVBzCaiRmH" + }, + { + "programIdIndex": 14, + "accounts": [3, 4, 1], + "data": "6qfC8ic7Aq99" + }, + { + "programIdIndex": 13, + "accounts": [1, 15, 3, 5, 2, 14], + "data": "21TeLgZXNbsn4QEpaSEr3q" + }, + { + "programIdIndex": 14, + "accounts": [3, 5, 1], + "data": "6LC7BYyxhFRh" + } + ] + }, + { + "index": 1, + "instructions": [ + { + "programIdIndex": 14, + "accounts": [4, 3, 0], + "data": "7aUiLHFjSVdZ" + }, + { + "programIdIndex": 19, + "accounts": [17, 18, 16, 9, 11, 12, 14], + "data": "8kvZyjATKQWYxaKR1qD53V" + }, + { + "programIdIndex": 14, + "accounts": [9, 11, 18], + "data": "6qfC8ic7Aq99" + } + ] + } + ], + "logMessages": [ + "Program QMNeHCGYnLVDn1icRAfQZpjPLBNkfGbSKRB83G5d8KB invoke [1]", + "Program QMWoBmAyJLAsA1Lh9ugMTw2gciTihncciphzdNzdZYV invoke [2]" + ], + "preTokenBalances": [ + { + "accountIndex": 4, + "mint": "iouQcQBAiEXe6cKLS85zmZxUqaCqBdeHFpqKoSz615u", + "uiTokenAmount": { + "uiAmount": null, + "decimals": 6, + "amount": "0", + "uiAmountString": "0" + }, + "owner": "LieKvPRE8XeX3Y2xVNHjKlpAScD12lYySBVQ4HqoJ5op", + "programId": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA" + }, + { + "accountIndex": 5, + "mint": "iouQcQBAiEXe6cKLS85zmZxUqaCqBdeHFpqKoSz615u", + "uiTokenAmount": { + "uiAmount": 11513.0679, + "decimals": 6, + "amount": "11513067900", + "uiAmountString": "11513.0679" + }, + "owner": "rXhAofQCT7NN9TUqigyEAUzV1uLL4boeD8CRkNBSkYk", + "programId": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA" + }, + { + "accountIndex": 10, + "mint": "Saber2gLauYim4Mvftnrasomsv6NvAuncvMEZwcLpD1", + "uiTokenAmount": { + "uiAmount": null, + "decimals": 6, + "amount": "0", + "uiAmountString": "0" + }, + "owner": "CL9wkGFT3SZRRNa9dgaovuRV7jrVVigBUZ6DjcgySsCU", + "programId": "TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb" + }, + { + "accountIndex": 11, + "mint": "Saber2gLauYim4Mvftnrasomsv6NvAuncvMEZwcLpD1", + "uiTokenAmount": { + "uiAmount": 15138.514093, + "decimals": 6, + "amount": "15138514093", + "uiAmountString": "15138.514093" + }, + "owner": "LieKvPRE8XeX3Y2xVNHjKlpAScD12lYySBVQ4HqoJ5op", + "programId": "TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb" + } + ], + "postTokenBalances": [ + { + "accountIndex": 4, + "mint": "iouQcQBAiEXe6cKLS85zmZxUqaCqBdeHFpqKoSz615u", + "uiTokenAmount": { + "uiAmount": null, + "decimals": 6, + "amount": "0", + "uiAmountString": "0" + }, + "owner": "LieKvPRE8XeX3Y2xVNHjKlpAScD12lYySBVQ4HqoJ5op", + "programId": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA" + }, + { + "accountIndex": 5, + "mint": "iouQcQBAiEXe6cKLS85zmZxUqaCqBdeHFpqKoSz615u", + "uiTokenAmount": { + "uiAmount": 11513.103028, + "decimals": 6, + "amount": "11513103028", + "uiAmountString": "11513.103028" + }, + "owner": "rXhAofQCT7NN9TUqigyEAUzV1uLL4boeD8CRkNBSkYk", + "programId": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA" + }, + { + "accountIndex": 10, + "mint": "Saber2gLauYim4Mvftnrasomsv6NvAuncvMEZwcLpD1", + "uiTokenAmount": { + "uiAmount": null, + "decimals": 6, + "amount": "0", + "uiAmountString": "0" + }, + "owner": "CL9wkGFT3SZRRNa9dgaovuRV7jrVVigBUZ6DjcgySsCU", + "programId": "TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb" + }, + { + "accountIndex": 11, + "mint": "Saber2gLauYim4Mvftnrasomsv6NvAuncvMEZwcLpD1", + "uiTokenAmount": { + "uiAmount": 15489.767829, + "decimals": 6, + "amount": "15489767829", + "uiAmountString": "15489.767829" + }, + "owner": "BeiHVPRE8XeX3Y2xVNrSsTpAScH94nYySBVQ4HqgN9at", + "programId": "TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb" + } + ], + "rewards": [] + } + } + ], + "blockTime": 1639926816, + "blockHeight": 101210751 + }, + "err": null + } + }, + "subscription": 14 + } +} +``` + +
    diff --git a/docs/src/api/websocket/_blockUnsubscribe.mdx b/docs/src/api/websocket/_blockUnsubscribe.mdx new file mode 100644 index 00000000000000..a16b73ca639aa4 --- /dev/null +++ b/docs/src/api/websocket/_blockUnsubscribe.mdx @@ -0,0 +1,53 @@ +import { + DocBlock, + DocSideBySide, + CodeParams, + Parameter, + Field, + Values, + CodeSnippets, +} from "../../../components/CodeDocBlock"; + + + +## blockUnsubscribe + +Unsubscribe from block notifications + + + + +### Parameters: + + + subscription id to cancel + + +### Result: + +`` - unsubscribe success message + + + + + +### Code sample: + +```json +{ + "jsonrpc": "2.0", + "id": 1, + "method": "blockUnsubscribe", + "params": [0] +} +``` + +### Response: + +```json +{ "jsonrpc": "2.0", "result": true, "id": 1 } +``` + + + + diff --git a/docs/src/api/websocket/_logsSubscribe.mdx b/docs/src/api/websocket/_logsSubscribe.mdx new file mode 100644 index 00000000000000..f715bb8b521bac --- /dev/null +++ b/docs/src/api/websocket/_logsSubscribe.mdx @@ -0,0 +1,130 @@ +import { + DocBlock, + DocSideBySide, + CodeParams, + Parameter, + Field, + Values, + CodeSnippets, +} from "../../../components/CodeDocBlock"; + + + +## logsSubscribe + +Subscribe to transaction logging + + + + +### Parameters: + + + filter criteria for the logs to receive results by account type. The following filters types are currently supported: + + + +A string with one of the following values: + +- `all` - subscribe to all transactions except for simple vote transactions +- `allWithVotes` - subscribe to all transactions including simple vote transactions + + + + + +An object with the following field: + +- `mentions: [ ]` - array of Pubkeys (as base-58 encoded strings) to listen for being mentioned in any transaction + + + + + + + +Configuration object containing the following fields: + + + + + +### Result: + +`` - Subscription id \(needed to unsubscribe\) + + + + + +### Code sample: + +```json +{ + "jsonrpc": "2.0", + "id": 1, + "method": "logsSubscribe", + "params": [ + { + "mentions": [ "11111111111111111111111111111111" ] + }, + { + "commitment": "finalized" + } + ] +} +{ + "jsonrpc": "2.0", + "id": 1, + "method": "logsSubscribe", + "params": [ "all" ] +} +``` + +### Response: + +```json +{ "jsonrpc": "2.0", "result": 24040, "id": 1 } +``` + + + + +#### Notification Format: + +The notification will be an RpcResponse JSON object with value equal to: + +- `signature: ` - The transaction signature base58 encoded. +- `err: ` - Error if transaction failed, null if transaction succeeded. [TransactionError definitions](https://github.com/solana-labs/solana/blob/c0c60386544ec9a9ec7119229f37386d9f070523/sdk/src/transaction/error.rs#L13) +- `logs: ` - Array of log messages the transaction instructions output during execution, null if simulation failed before the transaction was able to execute (for example due to an invalid blockhash or signature verification failure) + +Example: + +```json +{ + "jsonrpc": "2.0", + "method": "logsNotification", + "params": { + "result": { + "context": { + "slot": 5208469 + }, + "value": { + "signature": "5h6xBEauJ3PK6SWCZ1PGjBvj8vDdWG3KpwATGy1ARAXFSDwt8GFXM7W5Ncn16wmqokgpiKRLuS83KUxyZyv2sUYv", + "err": null, + "logs": [ + "SBF program 83astBRguLMdt2h5U1Tpdq5tjFoJ6noeGwaY3mDLVcri success" + ] + } + }, + "subscription": 24040 + } +} +``` + + diff --git a/docs/src/api/websocket/_logsUnsubscribe.mdx b/docs/src/api/websocket/_logsUnsubscribe.mdx new file mode 100644 index 00000000000000..6a75606eb02b06 --- /dev/null +++ b/docs/src/api/websocket/_logsUnsubscribe.mdx @@ -0,0 +1,53 @@ +import { + DocBlock, + DocSideBySide, + CodeParams, + Parameter, + Field, + Values, + CodeSnippets, +} from "../../../components/CodeDocBlock"; + + + +## logsUnsubscribe + +Unsubscribe from transaction logging + + + + +### Parameters: + + + subscription id to cancel + + +### Result: + +`` - unsubscribe success message + + + + + +### Code sample: + +```json +{ + "jsonrpc": "2.0", + "id": 1, + "method": "logsUnsubscribe", + "params": [0] +} +``` + +### Response: + +```json +{ "jsonrpc": "2.0", "result": true, "id": 1 } +``` + + + + diff --git a/docs/src/api/websocket/_programSubscribe.mdx b/docs/src/api/websocket/_programSubscribe.mdx new file mode 100644 index 00000000000000..bea83bac6c0fad --- /dev/null +++ b/docs/src/api/websocket/_programSubscribe.mdx @@ -0,0 +1,205 @@ +import { + DocBlock, + DocSideBySide, + CodeParams, + Parameter, + Field, + Values, + CodeSnippets, +} from "../../../components/CodeDocBlock"; + + + +## programSubscribe + +Subscribe to a program to receive notifications when the lamports or data for an account owned by the given program changes + + + + +### Parameters: + + + +Pubkey of the `program_id`, as base-58 encoded string + + + + + +Configuration object containing the following fields: + + + + + +filter results using various [filter objects](/api/http#filter-criteria) + +:::info +The resultant account must meet **ALL** filter criteria to be included in the returned results +::: + + + + + +Encoding format for Account data + + + +
    + +- `base58` is slow. +- [`jsonParsed`](/api/http#parsed-responses">) encoding attempts to use program-specific + state parsers to return more human-readable and explicit account state data. +- If `jsonParsed` is requested but a parser cannot be found, the field falls + back to `base64` encoding, detectable when the `data` field is type `string`. + +
    + +
    + +
    + +### Result: + +`` - Subscription id \(needed to unsubscribe\) + +
    + + + +### Code sample: + +```json +{ + "jsonrpc": "2.0", + "id": 1, + "method": "programSubscribe", + "params": [ + "11111111111111111111111111111111", + { + "encoding": "base64", + "commitment": "finalized" + } + ] +} +{ + "jsonrpc": "2.0", + "id": 1, + "method": "programSubscribe", + "params": [ + "11111111111111111111111111111111", + { + "encoding": "jsonParsed" + } + ] +} +{ + "jsonrpc": "2.0", + "id": 1, + "method": "programSubscribe", + "params": [ + "11111111111111111111111111111111", + { + "encoding": "base64", + "filters": [ + { + "dataSize": 80 + } + ] + } + ] +} +``` + +### Response: + +```json +{ "jsonrpc": "2.0", "result": 24040, "id": 1 } +``` + + +
    + +#### Notification format + +The notification format is a single program account object as seen in the [getProgramAccounts](/api/http#getprogramaccounts) RPC HTTP method. + +Base58 encoding: + +```json +{ + "jsonrpc": "2.0", + "method": "programNotification", + "params": { + "result": { + "context": { + "slot": 5208469 + }, + "value": { + "pubkey": "H4vnBqifaSACnKa7acsxstsY1iV1bvJNxsCY7enrd1hq", + "account": { + "data": [ + "11116bv5nS2h3y12kD1yUKeMZvGcKLSjQgX6BeV7u1FrjeJcKfsHPXHRDEHrBesJhZyqnnq9qJeUuF7WHxiuLuL5twc38w2TXNLxnDbjmuR", + "base58" + ], + "executable": false, + "lamports": 33594, + "owner": "11111111111111111111111111111111", + "rentEpoch": 636, + "space": 80 + } + } + }, + "subscription": 24040 + } +} +``` + +Parsed-JSON encoding: + +```json +{ + "jsonrpc": "2.0", + "method": "programNotification", + "params": { + "result": { + "context": { + "slot": 5208469 + }, + "value": { + "pubkey": "H4vnBqifaSACnKa7acsxstsY1iV1bvJNxsCY7enrd1hq", + "account": { + "data": { + "program": "nonce", + "parsed": { + "type": "initialized", + "info": { + "authority": "Bbqg1M4YVVfbhEzwA9SpC9FhsaG83YMTYoR4a8oTDLX", + "blockhash": "LUaQTmM7WbMRiATdMMHaRGakPtCkc2GHtH57STKXs6k", + "feeCalculator": { + "lamportsPerSignature": 5000 + } + } + } + }, + "executable": false, + "lamports": 33594, + "owner": "11111111111111111111111111111111", + "rentEpoch": 636, + "space": 80 + } + } + }, + "subscription": 24040 + } +} +``` + +
    diff --git a/docs/src/api/websocket/_programUnsubscribe.mdx b/docs/src/api/websocket/_programUnsubscribe.mdx new file mode 100644 index 00000000000000..b3decdcb9a50fe --- /dev/null +++ b/docs/src/api/websocket/_programUnsubscribe.mdx @@ -0,0 +1,53 @@ +import { + DocBlock, + DocSideBySide, + CodeParams, + Parameter, + Field, + Values, + CodeSnippets, +} from "../../../components/CodeDocBlock"; + + + +## programUnsubscribe + +Unsubscribe from program-owned account change notifications + + + + +### Parameters: + + + id of account Subscription to cancel + + +### Result: + +`` - unsubscribe success message + + + + + +### Code sample: + +```json +{ + "jsonrpc": "2.0", + "id": 1, + "method": "programUnsubscribe", + "params": [0] +} +``` + +### Response: + +```json +{ "jsonrpc": "2.0", "result": true, "id": 1 } +``` + + + + diff --git a/docs/src/api/websocket/_rootSubscribe.mdx b/docs/src/api/websocket/_rootSubscribe.mdx new file mode 100644 index 00000000000000..98fd59407f023b --- /dev/null +++ b/docs/src/api/websocket/_rootSubscribe.mdx @@ -0,0 +1,62 @@ +import { + DocBlock, + DocSideBySide, + CodeParams, + Parameter, + Field, + Values, + CodeSnippets, +} from "../../../components/CodeDocBlock"; + + + +## rootSubscribe + +Subscribe to receive notification anytime a new root is set by the validator. + + + + +### Parameters: + +**None** + +### Result: + +`integer` - subscription id \(needed to unsubscribe\) + + + + + +### Code sample: + +```json +{ "jsonrpc": "2.0", "id": 1, "method": "rootSubscribe" } +``` + +### Response: + +```json +{ "jsonrpc": "2.0", "result": 0, "id": 1 } +``` + + + + +#### Notification Format: + +The result is the latest root slot number. + +```json +{ + "jsonrpc": "2.0", + "method": "rootNotification", + "params": { + "result": 42, + "subscription": 0 + } +} +``` + + diff --git a/docs/src/api/websocket/_rootUnsubscribe.mdx b/docs/src/api/websocket/_rootUnsubscribe.mdx new file mode 100644 index 00000000000000..8d4085f183678f --- /dev/null +++ b/docs/src/api/websocket/_rootUnsubscribe.mdx @@ -0,0 +1,53 @@ +import { + DocBlock, + DocSideBySide, + CodeParams, + Parameter, + Field, + Values, + CodeSnippets, +} from "../../../components/CodeDocBlock"; + + + +## rootUnsubscribe + +Unsubscribe from root notifications + + + + +### Parameters: + + + subscription id to cancel + + +### Result: + +`` - unsubscribe success message + + + + + +### Code sample: + +```json +{ + "jsonrpc": "2.0", + "id": 1, + "method": "rootUnsubscribe", + "params": [0] +} +``` + +### Response: + +```json +{ "jsonrpc": "2.0", "result": true, "id": 1 } +``` + + + + diff --git a/docs/src/api/websocket/_signatureSubscribe.mdx b/docs/src/api/websocket/_signatureSubscribe.mdx new file mode 100644 index 00000000000000..70d0b602693593 --- /dev/null +++ b/docs/src/api/websocket/_signatureSubscribe.mdx @@ -0,0 +1,98 @@ +import { + DocBlock, + DocSideBySide, + CodeParams, + Parameter, + Field, + Values, + CodeSnippets, +} from "../../../components/CodeDocBlock"; + + + +## signatureSubscribe + +Subscribe to a transaction signature to receive notification when a given transaction is committed. On `signatureNotification` - the subscription is automatically cancelled. + + + + +### Parameters: + + + Transaction Signature, as base-58 encoded string + + + + +Configuration object containing the following fields: + + + + + +### Result: + +`` - subscription id (needed to unsubscribe) + + + + + +### Code sample: + +```json +{ + "jsonrpc": "2.0", + "id": 1, + "method": "signatureSubscribe", + "params": [ + "2EBVM6cB8vAAD93Ktr6Vd8p67XPbQzCJX47MpReuiCXJAtcjaxpvWpcg9Ege1Nr5Tk3a2GFrByT7WPBjdsTycY9b", + { + "commitment": "finalized" + } + ] +} +``` + +### Response: + +```json +{ "jsonrpc": "2.0", "result": 0, "id": 1 } +``` + + + + +#### Notification Format: + +The notification will be an RpcResponse JSON object with value containing an object with: + +- `err: ` - Error if transaction failed, null if transaction succeeded. [TransactionError definitions](https://github.com/solana-labs/solana/blob/c0c60386544ec9a9ec7119229f37386d9f070523/sdk/src/transaction/error.rs#L13) + +Example: + +```json +{ + "jsonrpc": "2.0", + "method": "signatureNotification", + "params": { + "result": { + "context": { + "slot": 5207624 + }, + "value": { + "err": null + } + }, + "subscription": 24006 + } +} +``` + + diff --git a/docs/src/api/websocket/_signatureUnsubscribe.mdx b/docs/src/api/websocket/_signatureUnsubscribe.mdx new file mode 100644 index 00000000000000..880efed7c49fe7 --- /dev/null +++ b/docs/src/api/websocket/_signatureUnsubscribe.mdx @@ -0,0 +1,53 @@ +import { + DocBlock, + DocSideBySide, + CodeParams, + Parameter, + Field, + Values, + CodeSnippets, +} from "../../../components/CodeDocBlock"; + + + +## signatureUnsubscribe + +Unsubscribe from signature confirmation notification + + + + +### Parameters: + + + subscription id to cancel + + +### Result: + +`` - unsubscribe success message + + + + + +### Code sample: + +```json +{ + "jsonrpc": "2.0", + "id": 1, + "method": "signatureUnsubscribe", + "params": [0] +} +``` + +### Response: + +```json +{ "jsonrpc": "2.0", "result": true, "id": 1 } +``` + + + + diff --git a/docs/src/api/websocket/_slotSubscribe.mdx b/docs/src/api/websocket/_slotSubscribe.mdx new file mode 100644 index 00000000000000..c746ff060e5b22 --- /dev/null +++ b/docs/src/api/websocket/_slotSubscribe.mdx @@ -0,0 +1,72 @@ +import { + DocBlock, + DocSideBySide, + CodeParams, + Parameter, + Field, + Values, + CodeSnippets, +} from "../../../components/CodeDocBlock"; + + + +## slotSubscribe + +Subscribe to receive notification anytime a slot is processed by the validator + + + + +### Parameters: + +**None** + +### Result: + +`` - Subscription id \(needed to unsubscribe\) + + + + + +### Code sample: + +```json +{ "jsonrpc": "2.0", "id": 1, "method": "slotSubscribe" } +``` + +### Response: + +```json +{ "jsonrpc": "2.0", "result": 0, "id": 1 } +``` + + + + +#### Notification Format: + +The notification will be an object with the following fields: + +- `parent: ` - The parent slot +- `root: ` - The current root slot +- `slot: ` - The newly set slot value + +Example: + +```json +{ + "jsonrpc": "2.0", + "method": "slotNotification", + "params": { + "result": { + "parent": 75, + "root": 44, + "slot": 76 + }, + "subscription": 0 + } +} +``` + + diff --git a/docs/src/api/websocket/_slotUnsubscribe.mdx b/docs/src/api/websocket/_slotUnsubscribe.mdx new file mode 100644 index 00000000000000..0ce506163c87ca --- /dev/null +++ b/docs/src/api/websocket/_slotUnsubscribe.mdx @@ -0,0 +1,53 @@ +import { + DocBlock, + DocSideBySide, + CodeParams, + Parameter, + Field, + Values, + CodeSnippets, +} from "../../../components/CodeDocBlock"; + + + +## slotUnsubscribe + +Unsubscribe from slot notifications + + + + +### Parameters: + + + subscription id to cancel + + +### Result: + +`` - unsubscribe success message + + + + + +### Code sample: + +```json +{ + "jsonrpc": "2.0", + "id": 1, + "method": "slotUnsubscribe", + "params": [0] +} +``` + +### Response: + +```json +{ "jsonrpc": "2.0", "result": true, "id": 1 } +``` + + + + diff --git a/docs/src/api/websocket/_slotsUpdatesSubscribe.mdx b/docs/src/api/websocket/_slotsUpdatesSubscribe.mdx new file mode 100644 index 00000000000000..efb639b2034958 --- /dev/null +++ b/docs/src/api/websocket/_slotsUpdatesSubscribe.mdx @@ -0,0 +1,86 @@ +import { + DocBlock, + DocSideBySide, + CodeParams, + Parameter, + Field, + Values, + CodeSnippets, +} from "../../../components/CodeDocBlock"; + + + +## slotsUpdatesSubscribe + +Subscribe to receive a notification from the validator on a variety of updates +on every slot + +:::caution +This subscription is unstable + +**NOTE: the format of this subscription may change in the future and it may not always be supported** +::: + + + + +### Parameters: + +**None** + +### Result: + +`` - Subscription id (needed to unsubscribe) + + + + + +### Code sample: + +```json +{ "jsonrpc": "2.0", "id": 1, "method": "slotsUpdatesSubscribe" } +``` + +### Response: + +```json +{ "jsonrpc": "2.0", "result": 0, "id": 1 } +``` + + + + +#### Notification Format: + +The notification will be an object with the following fields: + +- `parent: ` - The parent slot +- `slot: ` - The newly updated slot +- `timestamp: ` - The Unix timestamp of the update +- `type: ` - The update type, one of: + - "firstShredReceived" + - "completed" + - "createdBank" + - "frozen" + - "dead" + - "optimisticConfirmation" + - "root" + +```bash +{ + "jsonrpc": "2.0", + "method": "slotsUpdatesNotification", + "params": { + "result": { + "parent": 75, + "slot": 76, + "timestamp": 1625081266243, + "type": "optimisticConfirmation" + }, + "subscription": 0 + } +} +``` + + diff --git a/docs/src/api/websocket/_slotsUpdatesUnsubscribe.mdx b/docs/src/api/websocket/_slotsUpdatesUnsubscribe.mdx new file mode 100644 index 00000000000000..8169e52118781b --- /dev/null +++ b/docs/src/api/websocket/_slotsUpdatesUnsubscribe.mdx @@ -0,0 +1,53 @@ +import { + DocBlock, + DocSideBySide, + CodeParams, + Parameter, + Field, + Values, + CodeSnippets, +} from "../../../components/CodeDocBlock"; + + + +## slotsUpdatesUnsubscribe + +Unsubscribe from slot-update notifications + + + + +### Parameters: + + + subscription id to cancel + + +### Result: + +`` - unsubscribe success message + + + + + +### Code sample: + +```json +{ + "jsonrpc": "2.0", + "id": 1, + "method": "slotsUpdatesUnsubscribe", + "params": [0] +} +``` + +### Response: + +```json +{ "jsonrpc": "2.0", "result": true, "id": 1 } +``` + + + + diff --git a/docs/src/api/websocket/_voteSubscribe.mdx b/docs/src/api/websocket/_voteSubscribe.mdx new file mode 100644 index 00000000000000..4f6f9cc87be982 --- /dev/null +++ b/docs/src/api/websocket/_voteSubscribe.mdx @@ -0,0 +1,79 @@ +import { + DocBlock, + DocSideBySide, + CodeParams, + Parameter, + Field, + Values, + CodeSnippets, +} from "../../../components/CodeDocBlock"; + + + +## voteSubscribe + +Subscribe to receive notification anytime a new vote is observed in gossip. +These votes are pre-consensus therefore there is no guarantee these votes will +enter the ledger. + +:::caution +This subscription is unstable and only available if the validator was started +with the `--rpc-pubsub-enable-vote-subscription` flag. The format of this +subscription may change in the future +::: + + + + +### Parameters: + +**None** + +### Result: + +`` - subscription id (needed to unsubscribe) + + + + + +### Code sample: + +```json +{ "jsonrpc": "2.0", "id": 1, "method": "voteSubscribe" } +``` + +### Response: + +```json +{ "jsonrpc": "2.0", "result": 0, "id": 1 } +``` + + + + +#### Notification Format: + +The notification will be an object with the following fields: + +- `hash: ` - The vote hash +- `slots: ` - The slots covered by the vote, as an array of u64 integers +- `timestamp: ` - The timestamp of the vote +- `signature: ` - The signature of the transaction that contained this vote + +```json +{ + "jsonrpc": "2.0", + "method": "voteNotification", + "params": { + "result": { + "hash": "8Rshv2oMkPu5E4opXTRyuyBeZBqQ4S477VG26wUTFxUM", + "slots": [1, 2], + "timestamp": null + }, + "subscription": 0 + } +} +``` + + diff --git a/docs/src/api/websocket/_voteUnsubscribe.mdx b/docs/src/api/websocket/_voteUnsubscribe.mdx new file mode 100644 index 00000000000000..db37b4205479a1 --- /dev/null +++ b/docs/src/api/websocket/_voteUnsubscribe.mdx @@ -0,0 +1,53 @@ +import { + DocBlock, + DocSideBySide, + CodeParams, + Parameter, + Field, + Values, + CodeSnippets, +} from "../../../components/CodeDocBlock"; + + + +## voteUnsubscribe + +Unsubscribe from vote notifications + + + + +### Parameters: + + + subscription id to cancel + + +### Result: + +`` - unsubscribe success message + + + + + +### Code sample: + +```json +{ + "jsonrpc": "2.0", + "id": 1, + "method": "voteUnsubscribe", + "params": [0] +} +``` + +### Response: + +```json +{ "jsonrpc": "2.0", "result": true, "id": 1 } +``` + + + + diff --git a/docs/src/cluster/rpc-endpoints.md b/docs/src/cluster/rpc-endpoints.md index 9ae28f7cd5c3b3..50173fa9087334 100644 --- a/docs/src/cluster/rpc-endpoints.md +++ b/docs/src/cluster/rpc-endpoints.md @@ -2,7 +2,7 @@ title: Solana Cluster RPC Endpoints --- -Solana maintains dedicated api nodes to fulfill [JSON-RPC](developing/clients/jsonrpc-api.md) +Solana maintains dedicated api nodes to fulfill [JSON-RPC](/api) requests for each public cluster, and third parties may as well. Here are the public RPC endpoints currently available and recommended for each public cluster: @@ -36,7 +36,7 @@ public RPC endpoints currently available and recommended for each public cluster ## Mainnet Beta -#### Endpoints* +#### Endpoints\* - `https://api.mainnet-beta.solana.com` - Solana-hosted api node cluster, backed by a load balancer; rate-limited @@ -48,7 +48,7 @@ public RPC endpoints currently available and recommended for each public cluster - Maximum connection rate per 10 seconds per IP: 40 - Maximum amount of data per 30 second: 100 MB -*The public RPC endpoints are not intended for production applications. Please +\*The public RPC endpoints are not intended for production applications. Please use dedicated/private RPC servers when you launch your application, drop NFTs, etc. The public services are subject to abuse and rate limits may change without prior notice. Likewise, high-traffic websites may be blocked without @@ -58,6 +58,6 @@ prior notice. - 403 -- Your IP address or website has been blocked. It is time to run your own RPC server(s) or find a private service. - 429 -- Your IP address is exceeding the rate limits. Slow down! Use the -[Retry-After](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Retry-After) -HTTP response header to determine how long to wait before making another -request. + [Retry-After](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Retry-After) + HTTP response header to determine how long to wait before making another + request. diff --git a/docs/src/developing/clients/javascript-api.md b/docs/src/developing/clients/javascript-api.md index 862905b39bc71d..8dad0f46a00698 100644 --- a/docs/src/developing/clients/javascript-api.md +++ b/docs/src/developing/clients/javascript-api.md @@ -4,7 +4,7 @@ title: Web3 JavaScript API ## What is Solana-Web3.js? -The Solana-Web3.js library aims to provide complete coverage of Solana. The library was built on top of the [Solana JSON RPC API](../clients/jsonrpc-api.md). +The Solana-Web3.js library aims to provide complete coverage of Solana. The library was built on top of the [Solana JSON RPC API](/api). You can find the full documentation for the `@solana/web3.js` library [here](https://solana-labs.github.io/solana-web3.js/). diff --git a/docs/src/developing/clients/javascript-reference.md b/docs/src/developing/clients/javascript-reference.md index 91b346bee64342..4d7dfd6c9a962b 100644 --- a/docs/src/developing/clients/javascript-reference.md +++ b/docs/src/developing/clients/javascript-reference.md @@ -4,7 +4,7 @@ title: Web3 API Reference ## Web3 API Reference Guide -The `@solana/web3.js` library is a package that has coverage over the [Solana JSON RPC API](../clients/jsonrpc-api.md). +The `@solana/web3.js` library is a package that has coverage over the [Solana JSON RPC API](/api). You can find the full documentation for the `@solana/web3.js` library [here](https://solana-labs.github.io/solana-web3.js/). @@ -14,7 +14,7 @@ You can find the full documentation for the `@solana/web3.js` library [here](htt [Source Documentation](https://solana-labs.github.io/solana-web3.js/classes/Connection.html) -Connection is used to interact with the [Solana JSON RPC](../clients/jsonrpc-api.md). You can use Connection to confirm transactions, get account info, and more. +Connection is used to interact with the [Solana JSON RPC](/api). You can use Connection to confirm transactions, get account info, and more. You create a connection by defining the JSON RPC cluster endpoint and the desired commitment. Once this is complete, you can use this connection object to interact with any of the Solana JSON RPC API. diff --git a/docs/src/developing/clients/jsonrpc-api.md b/docs/src/developing/clients/jsonrpc-api.md deleted file mode 100644 index a729ee70cf3064..00000000000000 --- a/docs/src/developing/clients/jsonrpc-api.md +++ /dev/null @@ -1,5490 +0,0 @@ ---- -title: JSON RPC API ---- - -Solana nodes accept HTTP requests using the [JSON-RPC 2.0](https://www.jsonrpc.org/specification) specification. - -To interact with a Solana node inside a JavaScript application, use the -[solana-web3.js](https://github.com/solana-labs/solana-web3.js) library, which -gives a convenient interface for the RPC methods. - -## RPC HTTP Endpoint - -**Default port:** 8899 e.g. [http://localhost:8899](http://localhost:8899), [http://192.168.1.88:8899](http://192.168.1.88:8899) - -## RPC PubSub WebSocket Endpoint - -**Default port:** 8900 e.g. ws://localhost:8900, [http://192.168.1.88:8900](http://192.168.1.88:8900) - -## Methods - -- [getAccountInfo](jsonrpc-api.md#getaccountinfo) -- [getBalance](jsonrpc-api.md#getbalance) -- [getBlock](jsonrpc-api.md#getblock) -- [getBlockHeight](jsonrpc-api.md#getblockheight) -- [getBlockProduction](jsonrpc-api.md#getblockproduction) -- [getBlockCommitment](jsonrpc-api.md#getblockcommitment) -- [getBlocks](jsonrpc-api.md#getblocks) -- [getBlocksWithLimit](jsonrpc-api.md#getblockswithlimit) -- [getBlockTime](jsonrpc-api.md#getblocktime) -- [getClusterNodes](jsonrpc-api.md#getclusternodes) -- [getEpochInfo](jsonrpc-api.md#getepochinfo) -- [getEpochSchedule](jsonrpc-api.md#getepochschedule) -- [getFeeForMessage](jsonrpc-api.md#getfeeformessage) -- [getFirstAvailableBlock](jsonrpc-api.md#getfirstavailableblock) -- [getGenesisHash](jsonrpc-api.md#getgenesishash) -- [getHealth](jsonrpc-api.md#gethealth) -- [getHighestSnapshotSlot](jsonrpc-api.md#gethighestsnapshotslot) -- [getIdentity](jsonrpc-api.md#getidentity) -- [getInflationGovernor](jsonrpc-api.md#getinflationgovernor) -- [getInflationRate](jsonrpc-api.md#getinflationrate) -- [getInflationReward](jsonrpc-api.md#getinflationreward) -- [getLargestAccounts](jsonrpc-api.md#getlargestaccounts) -- [getLatestBlockhash](jsonrpc-api.md#getlatestblockhash) -- [getLeaderSchedule](jsonrpc-api.md#getleaderschedule) -- [getMaxRetransmitSlot](jsonrpc-api.md#getmaxretransmitslot) -- [getMaxShredInsertSlot](jsonrpc-api.md#getmaxshredinsertslot) -- [getMinimumBalanceForRentExemption](jsonrpc-api.md#getminimumbalanceforrentexemption) -- [getMultipleAccounts](jsonrpc-api.md#getmultipleaccounts) -- [getProgramAccounts](jsonrpc-api.md#getprogramaccounts) -- [getRecentPerformanceSamples](jsonrpc-api.md#getrecentperformancesamples) -- [getRecentPrioritizationFees](jsonrpc-api.md#getrecentprioritizationfees) -- [getSignaturesForAddress](jsonrpc-api.md#getsignaturesforaddress) -- [getSignatureStatuses](jsonrpc-api.md#getsignaturestatuses) -- [getSlot](jsonrpc-api.md#getslot) -- [getSlotLeader](jsonrpc-api.md#getslotleader) -- [getSlotLeaders](jsonrpc-api.md#getslotleaders) -- [getStakeActivation](jsonrpc-api.md#getstakeactivation) -- [getStakeMinimumDelegation](jsonrpc-api.md#getstakeminimumdelegation) -- [getSupply](jsonrpc-api.md#getsupply) -- [getTokenAccountBalance](jsonrpc-api.md#gettokenaccountbalance) -- [getTokenAccountsByDelegate](jsonrpc-api.md#gettokenaccountsbydelegate) -- [getTokenAccountsByOwner](jsonrpc-api.md#gettokenaccountsbyowner) -- [getTokenLargestAccounts](jsonrpc-api.md#gettokenlargestaccounts) -- [getTokenSupply](jsonrpc-api.md#gettokensupply) -- [getTransaction](jsonrpc-api.md#gettransaction) -- [getTransactionCount](jsonrpc-api.md#gettransactioncount) -- [getVersion](jsonrpc-api.md#getversion) -- [getVoteAccounts](jsonrpc-api.md#getvoteaccounts) -- [isBlockhashValid](jsonrpc-api.md#isblockhashvalid) -- [minimumLedgerSlot](jsonrpc-api.md#minimumledgerslot) -- [requestAirdrop](jsonrpc-api.md#requestairdrop) -- [sendTransaction](jsonrpc-api.md#sendtransaction) -- [simulateTransaction](jsonrpc-api.md#simulatetransaction) -- [Subscription Websocket](jsonrpc-api.md#subscription-websocket) - - [accountSubscribe](jsonrpc-api.md#accountsubscribe) - - [accountUnsubscribe](jsonrpc-api.md#accountunsubscribe) - - [logsSubscribe](jsonrpc-api.md#logssubscribe) - - [logsUnsubscribe](jsonrpc-api.md#logsunsubscribe) - - [programSubscribe](jsonrpc-api.md#programsubscribe) - - [programUnsubscribe](jsonrpc-api.md#programunsubscribe) - - [signatureSubscribe](jsonrpc-api.md#signaturesubscribe) - - [signatureUnsubscribe](jsonrpc-api.md#signatureunsubscribe) - - [slotSubscribe](jsonrpc-api.md#slotsubscribe) - - [slotUnsubscribe](jsonrpc-api.md#slotunsubscribe) - -### Unstable Methods - -Unstable methods may see breaking changes in patch releases and may not be supported in perpetuity. - -- [blockSubscribe](jsonrpc-api.md#blocksubscribe---unstable-disabled-by-default) -- [blockUnsubscribe](jsonrpc-api.md#blockunsubscribe) -- [slotsUpdatesSubscribe](jsonrpc-api.md#slotsupdatessubscribe---unstable) -- [slotsUpdatesUnsubscribe](jsonrpc-api.md#slotsupdatesunsubscribe) -- [voteSubscribe](jsonrpc-api.md#votesubscribe---unstable-disabled-by-default) -- [voteUnsubscribe](jsonrpc-api.md#voteunsubscribe) - -### Deprecated Methods - -- [getConfirmedBlock](jsonrpc-api.md#getconfirmedblock) -- [getConfirmedBlocks](jsonrpc-api.md#getconfirmedblocks) -- [getConfirmedBlocksWithLimit](jsonrpc-api.md#getconfirmedblockswithlimit) -- [getConfirmedSignaturesForAddress2](jsonrpc-api.md#getconfirmedsignaturesforaddress2) -- [getConfirmedTransaction](jsonrpc-api.md#getconfirmedtransaction) -- [getFeeCalculatorForBlockhash](jsonrpc-api.md#getfeecalculatorforblockhash) -- [getFeeRateGovernor](jsonrpc-api.md#getfeerategovernor) -- [getFees](jsonrpc-api.md#getfees) -- [getRecentBlockhash](jsonrpc-api.md#getrecentblockhash) -- [getSnapshotSlot](jsonrpc-api.md#getsnapshotslot) - -## Request Formatting - -To make a JSON-RPC request, send an HTTP POST request with a `Content-Type: -application/json` header. The JSON request data should contain 4 fields: - -- `jsonrpc: `, set to `"2.0"` -- `id: `, a unique client-generated identifying integer -- `method: `, a string containing the method to be invoked -- `params: `, a JSON array of ordered parameter values - -Example using curl: - -```bash -curl http://localhost:8899 -X POST -H "Content-Type: application/json" -d ' - { - "jsonrpc": "2.0", - "id": 1, - "method": "getBalance", - "params": [ - "83astBRguLMdt2h5U1Tpdq5tjFoJ6noeGwaY3mDLVcri" - ] - } -' -``` - -The response output will be a JSON object with the following fields: - -- `jsonrpc: `, matching the request specification -- `id: `, matching the request identifier -- `result: `, requested data or success confirmation - -Requests can be sent in batches by sending an array of JSON-RPC request objects as the data for a single POST. - -## Definitions - -- Hash: A SHA-256 hash of a chunk of data. -- Pubkey: The public key of a Ed25519 key-pair. -- Transaction: A list of Solana instructions signed by a client keypair to authorize those actions. -- Signature: An Ed25519 signature of transaction's payload data including instructions. This can be used to identify transactions. - -## Configuring State Commitment - -For preflight checks and transaction processing, Solana nodes choose which bank -state to query based on a commitment requirement set by the client. The -commitment describes how finalized a block is at that point in time. When -querying the ledger state, it's recommended to use lower levels of commitment -to report progress and higher levels to ensure the state will not be rolled back. - -In descending order of commitment (most finalized to least finalized), clients -may specify: - -- `"finalized"` - the node will query the most recent block confirmed by supermajority - of the cluster as having reached maximum lockout, meaning the cluster has - recognized this block as finalized -- `"confirmed"` - the node will query the most recent block that has been voted on by supermajority of the cluster. - - It incorporates votes from gossip and replay. - - It does not count votes on descendants of a block, only direct votes on that block. - - This confirmation level also upholds "optimistic confirmation" guarantees in - release 1.3 and onwards. -- `"processed"` - the node will query its most recent block. Note that the block - may still be skipped by the cluster. - -For processing many dependent transactions in series, it's recommended to use -`"confirmed"` commitment, which balances speed with rollback safety. -For total safety, it's recommended to use`"finalized"` commitment. - -#### Example - -The commitment parameter should be included as the last element in the `params` array: - -```bash -curl http://localhost:8899 -X POST -H "Content-Type: application/json" -d ' - { - "jsonrpc": "2.0", - "id": 1, - "method": "getBalance", - "params": [ - "83astBRguLMdt2h5U1Tpdq5tjFoJ6noeGwaY3mDLVcri", - { - "commitment": "finalized" - } - ] - } -' -``` - -#### Default: - -If commitment configuration is not provided, the node will default to `"finalized"` commitment - -Only methods that query bank state accept the commitment parameter. They are indicated in the API Reference below. - -#### RpcResponse Structure - -Many methods that take a commitment parameter return an RpcResponse JSON object comprised of two parts: - -- `context` : An RpcResponseContext JSON structure including a `slot` field at which the operation was evaluated. -- `value` : The value returned by the operation itself. - -#### Parsed Responses - -Some methods support an `encoding` parameter, and can return account or -instruction data in parsed JSON format if `"encoding":"jsonParsed"` is requested -and the node has a parser for the owning program. Solana nodes currently support -JSON parsing for the following native and SPL programs: - -| Program | Account State | Instructions | -| --- | --- | --- | -| Address Lookup | v1.14.4 | v1.14.4 | -| BPF Loader | n/a | stable | -| BPF Upgradeable Loader | stable | stable | -| Config | stable | | -| SPL Associated Token Account | n/a | stable | -| SPL Memo | n/a | stable | -| SPL Token | stable | stable | -| SPL Token 2022 | stable | stable | -| Stake | stable | stable | -| Vote | stable | stable | - -The list of account parsers can be found [here](https://github.com/solana-labs/solana/blob/master/account-decoder/src/parse_account_data.rs), and instruction parsers [here](https://github.com/solana-labs/solana/blob/master/transaction-status/src/parse_instruction.rs). - -## Health Check - -Although not a JSON RPC API, a `GET /health` at the RPC HTTP Endpoint provides a -health-check mechanism for use by load balancers or other network -infrastructure. This request will always return a HTTP 200 OK response with a body of -"ok", "behind" or "unknown" based on the following conditions: - -1. If one or more `--known-validator` arguments are provided to `solana-validator`, "ok" is returned - when the node has within `HEALTH_CHECK_SLOT_DISTANCE` slots of the highest - known validator, otherwise "behind". "unknown" is returned when no slot - information from known validators is not yet available. -2. "ok" is always returned if no known validators are provided. - -## JSON RPC API Reference - -### getAccountInfo - -Returns all information associated with the account of provided Pubkey - -#### Parameters: - -- `` - Pubkey of account to query, as base-58 encoded string -- (optional) `` - Configuration object containing the following fields: - - (optional) `commitment: ` - [Commitment](jsonrpc-api.md#configuring-state-commitment) - - (optional) `encoding: ` - encoding for Account data, either "base58" (_slow_), "base64", "base64+zstd", or "jsonParsed". - "base58" is limited to Account data of less than 129 bytes. - "base64" will return base64 encoded data for Account data of any size. - "base64+zstd" compresses the Account data using [Zstandard](https://facebook.github.io/zstd/) and base64-encodes the result. - ["jsonParsed" encoding](jsonrpc-api.md#parsed-responses) attempts to use program-specific state parsers to return more human-readable and explicit account state data. If "jsonParsed" is requested but a parser cannot be found, the field falls back to "base64" encoding, detectable when the `data` field is type ``. - - (optional) `dataSlice: ` - limit the returned account data using the provided `offset: ` and `length: ` fields; only available for "base58", "base64" or "base64+zstd" encodings. - - (optional) `minContextSlot: ` - set the minimum slot that the request can be evaluated at. - -#### Results: - -The result will be an RpcResponse JSON object with `value` equal to: - -- `` - if the requested account doesn't exist -- `` - otherwise, a JSON object containing: - - `lamports: `, number of lamports assigned to this account, as a u64 - - `owner: `, base-58 encoded Pubkey of the program this account has been assigned to - - `data: <[string, encoding]|object>`, data associated with the account, either as encoded binary data or JSON format `{: }`, depending on encoding parameter - - `executable: `, boolean indicating if the account contains a program \(and is strictly read-only\) - - `rentEpoch: `, the epoch at which this account will next owe rent, as u64 - -#### Example: - -Request: - -```bash -curl http://localhost:8899 -X POST -H "Content-Type: application/json" -d ' - { - "jsonrpc": "2.0", - "id": 1, - "method": "getAccountInfo", - "params": [ - "vines1vzrYbzLMRdu58ou5XTby4qAqVRLmqo36NKPTg", - { - "encoding": "base58" - } - ] - } -' -``` - -Response: - -```json -{ - "jsonrpc": "2.0", - "result": { - "context": { - "slot": 1 - }, - "value": { - "data": [ - "11116bv5nS2h3y12kD1yUKeMZvGcKLSjQgX6BeV7u1FrjeJcKfsHRTPuR3oZ1EioKtYGiYxpxMG5vpbZLsbcBYBEmZZcMKaSoGx9JZeAuWf", - "base58" - ], - "executable": false, - "lamports": 1000000000, - "owner": "11111111111111111111111111111111", - "rentEpoch": 2 - } - }, - "id": 1 -} -``` - -#### Example: - -Request: - -```bash -curl http://localhost:8899 -X POST -H "Content-Type: application/json" -d ' - { - "jsonrpc": "2.0", - "id": 1, - "method": "getAccountInfo", - "params": [ - "4fYNw3dojWmQ4dXtSGE9epjRGy9pFSx62YypT7avPYvA", - { - "encoding": "jsonParsed" - } - ] - } -' -``` - -Response: - -```json -{ - "jsonrpc": "2.0", - "result": { - "context": { - "slot": 1 - }, - "value": { - "data": { - "nonce": { - "initialized": { - "authority": "Bbqg1M4YVVfbhEzwA9SpC9FhsaG83YMTYoR4a8oTDLX", - "blockhash": "3xLP3jK6dVJwpeGeTDYTwdDK3TKchUf1gYYGHa4sF3XJ", - "feeCalculator": { - "lamportsPerSignature": 5000 - } - } - } - }, - "executable": false, - "lamports": 1000000000, - "owner": "11111111111111111111111111111111", - "rentEpoch": 2 - } - }, - "id": 1 -} -``` - -### getBalance - -Returns the balance of the account of provided Pubkey - -#### Parameters: - -- `` - Pubkey of account to query, as base-58 encoded string -- (optional) `` - Configuration object containing the following fields: - - (optional) `commitment: ` - [Commitment](jsonrpc-api.md#configuring-state-commitment) - - (optional) `minContextSlot: ` - set the minimum slot that the request can be evaluated at. - -#### Results: - -- `RpcResponse` - RpcResponse JSON object with `value` field set to the balance - -#### Example: - -Request: - -```bash -curl http://localhost:8899 -X POST -H "Content-Type: application/json" -d ' - {"jsonrpc":"2.0", "id":1, "method":"getBalance", "params":["83astBRguLMdt2h5U1Tpdq5tjFoJ6noeGwaY3mDLVcri"]} -' -``` - -Result: - -```json -{ - "jsonrpc": "2.0", - "result": { "context": { "slot": 1 }, "value": 0 }, - "id": 1 -} -``` - -### getBlock - -Returns identity and transaction information about a confirmed block in the ledger - -#### Parameters: - -- `` - slot, as u64 integer -- (optional) `` - Configuration object containing the following optional fields: - - (optional) `encoding: ` - encoding for each returned Transaction, either "json", "jsonParsed", "base58" (_slow_), "base64". If parameter not provided, the default encoding is "json". - ["jsonParsed" encoding](jsonrpc-api.md#parsed-responses) attempts to use program-specific instruction parsers to return more human-readable and explicit data in the `transaction.message.instructions` list. If "jsonParsed" is requested but a parser cannot be found, the instruction falls back to regular JSON encoding (`accounts`, `data`, and `programIdIndex` fields). - - (optional) `transactionDetails: ` - level of transaction detail to return, either "full", "accounts", "signatures", or "none". If parameter not provided, the default detail level is "full". If "accounts" are requested, transaction details only include signatures and an annotated list of accounts in each transaction. Transaction metadata is limited to only: fee, err, pre_balances, post_balances, pre_token_balances, and post_token_balances. - - (optional) `rewards: bool` - whether to populate the `rewards` array. If parameter not provided, the default includes rewards. - - (optional) `commitment: ` - [Commitment](jsonrpc-api.md#configuring-state-commitment); "processed" is not supported. If parameter not provided, the default is "finalized". - - (optional) `maxSupportedTransactionVersion: ` - set the max transaction version to return in responses. If the requested block contains a transaction with a higher version, an error will be returned. If this parameter is omitted, only legacy transactions will be returned, and a block containing any versioned transaction will prompt the error. - -#### Results: - -The result field will be an object with the following fields: - -- `` - if specified block is not confirmed -- `` - if block is confirmed, an object with the following fields: - - `blockhash: ` - the blockhash of this block, as base-58 encoded string - - `previousBlockhash: ` - the blockhash of this block's parent, as base-58 encoded string; if the parent block is not available due to ledger cleanup, this field will return "11111111111111111111111111111111" - - `parentSlot: ` - the slot index of this block's parent - - `transactions: ` - present if "full" transaction details are requested; an array of JSON objects containing: - - `transaction: ` - [Transaction](#transaction-structure) object, either in JSON format or encoded binary data, depending on encoding parameter - - `meta: ` - transaction status metadata object, containing `null` or: - - `err: ` - Error if transaction failed, null if transaction succeeded. [TransactionError definitions](https://github.com/solana-labs/solana/blob/c0c60386544ec9a9ec7119229f37386d9f070523/sdk/src/transaction/error.rs#L13) - - `fee: ` - fee this transaction was charged, as u64 integer - - `preBalances: ` - array of u64 account balances from before the transaction was processed - - `postBalances: ` - array of u64 account balances after the transaction was processed - - `innerInstructions: ` - List of [inner instructions](#inner-instructions-structure) or `null` if inner instruction recording was not enabled during this transaction - - `preTokenBalances: ` - List of [token balances](#token-balances-structure) from before the transaction was processed or omitted if token balance recording was not yet enabled during this transaction - - `postTokenBalances: ` - List of [token balances](#token-balances-structure) from after the transaction was processed or omitted if token balance recording was not yet enabled during this transaction - - `logMessages: ` - array of string log messages or `null` if log message recording was not enabled during this transaction - - `rewards: ` - transaction-level rewards, populated if rewards are requested; an array of JSON objects containing: - - `pubkey: ` - The public key, as base-58 encoded string, of the account that received the reward - - `lamports: `- number of reward lamports credited or debited by the account, as a i64 - - `postBalance: ` - account balance in lamports after the reward was applied - - `rewardType: ` - type of reward: "fee", "rent", "voting", "staking" - - `commission: ` - vote account commission when the reward was credited, only present for voting and staking rewards - - DEPRECATED: `status: ` - Transaction status - - `"Ok": ` - Transaction was successful - - `"Err": ` - Transaction failed with TransactionError - - `loadedAddresses: ` - Transaction addresses loaded from address lookup tables. Undefined if `maxSupportedTransactionVersion` is not set in request params. - - `writable: ` - Ordered list of base-58 encoded addresses for writable loaded accounts - - `readonly: ` - Ordered list of base-58 encoded addresses for readonly loaded accounts - - `returnData: ` - the most-recent return data generated by an instruction in the transaction, with the following fields: - - `programId: `, the program that generated the return data, as base-58 encoded Pubkey - - `data: <[string, encoding]>`, the return data itself, as base-64 encoded binary data - - `computeUnitsConsumed: `, number of [compute units](developing/programming-model/runtime.md#compute-budget) consumed by the transaction - - `version: <"legacy"|number|undefined>` - Transaction version. Undefined if `maxSupportedTransactionVersion` is not set in request params. - - `signatures: ` - present if "signatures" are requested for transaction details; an array of signatures strings, corresponding to the transaction order in the block - - `rewards: ` - block-level rewards, present if rewards are requested; an array of JSON objects containing: - - `pubkey: ` - The public key, as base-58 encoded string, of the account that received the reward - - `lamports: `- number of reward lamports credited or debited by the account, as a i64 - - `postBalance: ` - account balance in lamports after the reward was applied - - `rewardType: ` - type of reward: "fee", "rent", "voting", "staking" - - `commission: ` - vote account commission when the reward was credited, only present for voting and staking rewards - - `blockTime: ` - estimated production time, as Unix timestamp (seconds since the Unix epoch). null if not available - - `blockHeight: ` - the number of blocks beneath this block - -#### Example: - -Request: - -```bash -curl http://localhost:8899 -X POST -H "Content-Type: application/json" -d ' - {"jsonrpc": "2.0","id":1,"method":"getBlock","params":[430, {"encoding": "json","maxSupportedTransactionVersion":0,"transactionDetails":"full","rewards":false}]} -' -``` - -Result: - -```json -{ - "jsonrpc": "2.0", - "result": { - "blockHeight": 428, - "blockTime": null, - "blockhash": "3Eq21vXNB5s86c62bVuUfTeaMif1N2kUqRPBmGRJhyTA", - "parentSlot": 429, - "previousBlockhash": "mfcyqEXB3DnHXki6KjjmZck6YjmZLvpAByy2fj4nh6B", - "transactions": [ - { - "meta": { - "err": null, - "fee": 5000, - "innerInstructions": [], - "logMessages": [], - "postBalances": [499998932500, 26858640, 1, 1, 1], - "postTokenBalances": [], - "preBalances": [499998937500, 26858640, 1, 1, 1], - "preTokenBalances": [], - "rewards": null, - "status": { - "Ok": null - } - }, - "transaction": { - "message": { - "accountKeys": [ - "3UVYmECPPMZSCqWKfENfuoTv51fTDTWicX9xmBD2euKe", - "AjozzgE83A3x1sHNUR64hfH7zaEBWeMaFuAN9kQgujrc", - "SysvarS1otHashes111111111111111111111111111", - "SysvarC1ock11111111111111111111111111111111", - "Vote111111111111111111111111111111111111111" - ], - "header": { - "numReadonlySignedAccounts": 0, - "numReadonlyUnsignedAccounts": 3, - "numRequiredSignatures": 1 - }, - "instructions": [ - { - "accounts": [1, 2, 3, 0], - "data": "37u9WtQpcm6ULa3WRQHmj49EPs4if7o9f1jSRVZpm2dvihR9C8jY4NqEwXUbLwx15HBSNcP1", - "programIdIndex": 4 - } - ], - "recentBlockhash": "mfcyqEXB3DnHXki6KjjmZck6YjmZLvpAByy2fj4nh6B" - }, - "signatures": [ - "2nBhEBYYvfaAe16UMNqRHre4YNSskvuYgx3M6E4JP1oDYvZEJHvoPzyUidNgNX5r9sTyN1J9UxtbCXy2rqYcuyuv" - ] - } - } - ] - }, - "id": 1 -} -``` - -#### Example: - -Request: - -```bash -curl http://localhost:8899 -X POST -H "Content-Type: application/json" -d ' - {"jsonrpc": "2.0","id":1,"method":"getBlock","params":[430, "base64"]} -' -``` - -Result: - -```json -{ - "jsonrpc": "2.0", - "result": { - "blockHeight": 428, - "blockTime": null, - "blockhash": "3Eq21vXNB5s86c62bVuUfTeaMif1N2kUqRPBmGRJhyTA", - "parentSlot": 429, - "previousBlockhash": "mfcyqEXB3DnHXki6KjjmZck6YjmZLvpAByy2fj4nh6B", - "rewards": [], - "transactions": [ - { - "meta": { - "err": null, - "fee": 5000, - "innerInstructions": null, - "logMessages": null, - "postBalances": [499998932500, 26858640, 1, 1, 1], - "postTokenBalances": [], - "preBalances": [499998937500, 26858640, 1, 1, 1], - "preTokenBalances": [], - "rewards": [], - "status": { - "Ok": null - } - }, - "transaction": [ - "AVj7dxHlQ9IrvdYVIjuiRFs1jLaDMHixgrv+qtHBwz51L4/ImLZhszwiyEJDIp7xeBSpm/TX5B7mYzxa+fPOMw0BAAMFJMJVqLw+hJYheizSoYlLm53KzgT82cDVmazarqQKG2GQsLgiqktA+a+FDR4/7xnDX7rsusMwryYVUdixfz1B1Qan1RcZLwqvxvJl4/t3zHragsUp0L47E24tAFUgAAAABqfVFxjHdMkoVmOYaR1etoteuKObS21cc1VbIQAAAAAHYUgdNXR0u3xNdiTr072z2DVec9EQQ/wNo1OAAAAAAAtxOUhPBp2WSjUNJEgfvy70BbxI00fZyEPvFHNfxrtEAQQEAQIDADUCAAAAAQAAAAAAAACtAQAAAAAAAAdUE18R96XTJCe+YfRfUp6WP+YKCy/72ucOL8AoBFSpAA==", - "base64" - ] - } - ] - }, - "id": 1 -} -``` - -#### Transaction Structure - -Transactions are quite different from those on other blockchains. Be sure to review [Anatomy of a Transaction](developing/programming-model/transactions.md) to learn about transactions on Solana. - -The JSON structure of a transaction is defined as follows: - -- `signatures: ` - A list of base-58 encoded signatures applied to the transaction. The list is always of length `message.header.numRequiredSignatures` and not empty. The signature at index `i` corresponds to the public key at index `i` in `message.accountKeys`. The first one is used as the [transaction id](../../terminology.md#transaction-id). -- `message: ` - Defines the content of the transaction. - - `accountKeys: ` - List of base-58 encoded public keys used by the transaction, including by the instructions and for signatures. The first `message.header.numRequiredSignatures` public keys must sign the transaction. - - `header: ` - Details the account types and signatures required by the transaction. - - `numRequiredSignatures: ` - The total number of signatures required to make the transaction valid. The signatures must match the first `numRequiredSignatures` of `message.accountKeys`. - - `numReadonlySignedAccounts: ` - The last `numReadonlySignedAccounts` of the signed keys are read-only accounts. Programs may process multiple transactions that load read-only accounts within a single PoH entry, but are not permitted to credit or debit lamports or modify account data. Transactions targeting the same read-write account are evaluated sequentially. - - `numReadonlyUnsignedAccounts: ` - The last `numReadonlyUnsignedAccounts` of the unsigned keys are read-only accounts. - - `recentBlockhash: ` - A base-58 encoded hash of a recent block in the ledger used to prevent transaction duplication and to give transactions lifetimes. - - `instructions: ` - List of program instructions that will be executed in sequence and committed in one atomic transaction if all succeed. - - `programIdIndex: ` - Index into the `message.accountKeys` array indicating the program account that executes this instruction. - - `accounts: ` - List of ordered indices into the `message.accountKeys` array indicating which accounts to pass to the program. - - `data: ` - The program input data encoded in a base-58 string. - - `addressTableLookups: ` - List of address table lookups used by a transaction to dynamically load addresses from on-chain address lookup tables. Undefined if `maxSupportedTransactionVersion` is not set. - - `accountKey: ` - base-58 encoded public key for an address lookup table account. - - `writableIndexes: ` - List of indices used to load addresses of writable accounts from a lookup table. - - `readonlyIndexes: ` - List of indices used to load addresses of readonly accounts from a lookup table. - -#### Inner Instructions Structure - -The Solana runtime records the cross-program instructions that are invoked during transaction processing and makes these available for greater transparency of what was executed on-chain per transaction instruction. Invoked instructions are grouped by the originating transaction instruction and are listed in order of processing. - -The JSON structure of inner instructions is defined as a list of objects in the following structure: - -- `index: number` - Index of the transaction instruction from which the inner instruction(s) originated -- `instructions: ` - Ordered list of inner program instructions that were invoked during a single transaction instruction. - - `programIdIndex: ` - Index into the `message.accountKeys` array indicating the program account that executes this instruction. - - `accounts: ` - List of ordered indices into the `message.accountKeys` array indicating which accounts to pass to the program. - - `data: ` - The program input data encoded in a base-58 string. - -#### Token Balances Structure - -The JSON structure of token balances is defined as a list of objects in the following structure: - -- `accountIndex: ` - Index of the account in which the token balance is provided for. -- `mint: ` - Pubkey of the token's mint. -- `owner: ` - Pubkey of token balance's owner. -- `programId: ` - Pubkey of the Token program that owns the account. -- `uiTokenAmount: ` - - - `amount: ` - Raw amount of tokens as a string, ignoring decimals. - - `decimals: ` - Number of decimals configured for token's mint. - - `uiAmount: ` - Token amount as a float, accounting for decimals. **DEPRECATED** - - `uiAmountString: ` - Token amount as a string, accounting for decimals. - -### getBlockHeight - -Returns the current block height of the node - -#### Parameters: - -- (optional) `` - Configuration object containing the following fields: - - (optional) `commitment: ` - [Commitment](jsonrpc-api.md#configuring-state-commitment) - - (optional) `minContextSlot: ` - set the minimum slot that the request can be evaluated at. - -#### Results: - -- `` - Current block height - -#### Example: - -Request: - -```bash -curl http://localhost:8899 -X POST -H "Content-Type: application/json" -d ' - {"jsonrpc":"2.0","id":1, "method":"getBlockHeight"} -' -``` - -Result: - -```json -{ "jsonrpc": "2.0", "result": 1233, "id": 1 } -``` - -### getBlockProduction - -Returns recent block production information from the current or previous epoch. - -#### Parameters: - -- (optional) `` - Configuration object containing the following optional fields: - - (optional) `commitment: ` - [Commitment](jsonrpc-api.md#configuring-state-commitment) - - (optional) `range: ` - Slot range to return block production for. If parameter not provided, defaults to current epoch. - - `firstSlot: ` - first slot to return block production information for (inclusive) - - (optional) `lastSlot: ` - last slot to return block production information for (inclusive). If parameter not provided, defaults to the highest slot - - (optional) `identity: ` - Only return results for this validator identity (base-58 encoded) - -#### Results: - -The result will be an RpcResponse JSON object with `value` equal to: - -- `` - - `byIdentity: ` - a dictionary of validator identities, - as base-58 encoded strings. Value is a two element array containing the - number of leader slots and the number of blocks produced. - - `range: ` - Block production slot range - - `firstSlot: ` - first slot of the block production information (inclusive) - - `lastSlot: ` - last slot of block production information (inclusive) - -#### Example: - -Request: - -```bash -curl http://localhost:8899 -X POST -H "Content-Type: application/json" -d ' - {"jsonrpc":"2.0","id":1, "method":"getBlockProduction"} -' -``` - -Result: - -```json -{ - "jsonrpc": "2.0", - "result": { - "context": { - "slot": 9887 - }, - "value": { - "byIdentity": { - "85iYT5RuzRTDgjyRa3cP8SYhM2j21fj7NhfJ3peu1DPr": [9888, 9886] - }, - "range": { - "firstSlot": 0, - "lastSlot": 9887 - } - } - }, - "id": 1 -} -``` - -#### Example: - -Request: - -```bash -curl http://localhost:8899 -X POST -H "Content-Type: application/json" -d ' - { - "jsonrpc": "2.0", - "id": 1, - "method": "getBlockProduction", - "params": [ - { - "identity": "85iYT5RuzRTDgjyRa3cP8SYhM2j21fj7NhfJ3peu1DPr", - "range": { - "firstSlot": 40, - "lastSlot": 50 - } - } - ] - } -' -``` - -Result: - -```json -{ - "jsonrpc": "2.0", - "result": { - "context": { - "slot": 10102 - }, - "value": { - "byIdentity": { - "85iYT5RuzRTDgjyRa3cP8SYhM2j21fj7NhfJ3peu1DPr": [11, 11] - }, - "range": { - "firstSlot": 50, - "lastSlot": 40 - } - } - }, - "id": 1 -} -``` - -### getBlockCommitment - -Returns commitment for particular block - -#### Parameters: - -- `` - block, identified by Slot - -#### Results: - -The result field will be a JSON object containing: - -- `commitment` - commitment, comprising either: - - `` - Unknown block - - `` - commitment, array of u64 integers logging the amount of cluster stake in lamports that has voted on the block at each depth from 0 to `MAX_LOCKOUT_HISTORY` + 1 -- `totalStake` - total active stake, in lamports, of the current epoch - -#### Example: - -Request: - -```bash -curl http://localhost:8899 -X POST -H "Content-Type: application/json" -d ' - {"jsonrpc":"2.0","id":1, "method":"getBlockCommitment","params":[5]} -' -``` - -Result: - -```json -{ - "jsonrpc": "2.0", - "result": { - "commitment": [ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 10, 32 - ], - "totalStake": 42 - }, - "id": 1 -} -``` - -### getBlocks - -Returns a list of confirmed blocks between two slots - -#### Parameters: - -- `` - start_slot, as u64 integer -- (optional) `` - end_slot, as u64 integer (must be no more than 500,000 blocks higher than the `start_slot`) -- (optional) `` - Configuration object containing the following field: - - (optional) `commitment: ` - [Commitment](jsonrpc-api.md#configuring-state-commitment); "processed" is not supported. If parameter not provided, the default is "finalized". - -#### Results: - -The result field will be an array of u64 integers listing confirmed blocks -between `start_slot` and either `end_slot`, if provided, or latest confirmed block, -inclusive. Max range allowed is 500,000 slots. - -#### Example: - -Request: - -```bash -curl http://localhost:8899 -X POST -H "Content-Type: application/json" -d ' - {"jsonrpc": "2.0","id":1,"method":"getBlocks","params":[5, 10]} -' -``` - -Result: - -```json -{ "jsonrpc": "2.0", "result": [5, 6, 7, 8, 9, 10], "id": 1 } -``` - -### getBlocksWithLimit - -Returns a list of confirmed blocks starting at the given slot - -#### Parameters: - -- `` - start_slot, as u64 integer -- `` - limit, as u64 integer (must be no more than 500,000 blocks higher than the `start_slot`) -- (optional) `` - Configuration object containing the following field: - - (optional) `commitment: ` - [Commitment](jsonrpc-api.md#configuring-state-commitment); "processed" is not supported. If parameter not provided, the default is "finalized". - -#### Results: - -The result field will be an array of u64 integers listing confirmed blocks -starting at `start_slot` for up to `limit` blocks, inclusive. - -#### Example: - -Request: - -```bash -curl http://localhost:8899 -X POST -H "Content-Type: application/json" -d ' - {"jsonrpc": "2.0","id":1,"method":"getBlocksWithLimit","params":[5, 3]} -' -``` - -Result: - -```json -{ "jsonrpc": "2.0", "result": [5, 6, 7], "id": 1 } -``` - -### getBlockTime - -Returns the estimated production time of a block. - -Each validator reports their UTC time to the ledger on a regular interval by -intermittently adding a timestamp to a Vote for a particular block. A requested -block's time is calculated from the stake-weighted mean of the Vote timestamps -in a set of recent blocks recorded on the ledger. - -#### Parameters: - -- `` - block, identified by Slot - -#### Results: - -- `` - estimated production time, as Unix timestamp (seconds since the Unix epoch) -- `` - timestamp is not available for this block - -#### Example: - -Request: - -```bash -curl http://localhost:8899 -X POST -H "Content-Type: application/json" -d ' - {"jsonrpc":"2.0","id":1, "method":"getBlockTime","params":[5]} -' -``` - -Result: - -```json -{ "jsonrpc": "2.0", "result": 1574721591, "id": 1 } -``` - -### getClusterNodes - -Returns information about all the nodes participating in the cluster - -#### Parameters: - -None - -#### Results: - -The result field will be an array of JSON objects, each with the following sub fields: - -- `pubkey: ` - Node public key, as base-58 encoded string -- `gossip: ` - Gossip network address for the node -- `tpu: ` - TPU network address for the node -- `rpc: ` - JSON RPC network address for the node, or `null` if the JSON RPC service is not enabled -- `version: ` - The software version of the node, or `null` if the version information is not available -- `featureSet: ` - The unique identifier of the node's feature set -- `shredVersion: ` - The shred version the node has been configured to use - -#### Example: - -Request: - -```bash -curl http://localhost:8899 -X POST -H "Content-Type: application/json" -d ' - {"jsonrpc":"2.0", "id":1, "method":"getClusterNodes"} -' -``` - -Result: - -```json -{ - "jsonrpc": "2.0", - "result": [ - { - "gossip": "10.239.6.48:8001", - "pubkey": "9QzsJf7LPLj8GkXbYT3LFDKqsj2hHG7TA3xinJHu8epQ", - "rpc": "10.239.6.48:8899", - "tpu": "10.239.6.48:8856", - "version": "1.0.0 c375ce1f" - } - ], - "id": 1 -} -``` - -### getEpochInfo - -Returns information about the current epoch - -#### Parameters: - -- (optional) `` - Configuration object containing the following fields: - - (optional) `commitment: ` - [Commitment](jsonrpc-api.md#configuring-state-commitment) - - (optional) `minContextSlot: ` - set the minimum slot that the request can be evaluated at. - -#### Results: - -The result field will be an object with the following fields: - -- `absoluteSlot: `, the current slot -- `blockHeight: `, the current block height -- `epoch: `, the current epoch -- `slotIndex: `, the current slot relative to the start of the current epoch -- `slotsInEpoch: `, the number of slots in this epoch -- `transactionCount: `, total number of transactions processed without error since genesis - -#### Example: - -Request: - -```bash -curl http://localhost:8899 -X POST -H "Content-Type: application/json" -d ' - {"jsonrpc":"2.0","id":1, "method":"getEpochInfo"} -' -``` - -Result: - -```json -{ - "jsonrpc": "2.0", - "result": { - "absoluteSlot": 166598, - "blockHeight": 166500, - "epoch": 27, - "slotIndex": 2790, - "slotsInEpoch": 8192, - "transactionCount": 22661093 - }, - "id": 1 -} -``` - -### getEpochSchedule - -Returns epoch schedule information from this cluster's genesis config - -#### Parameters: - -None - -#### Results: - -The result field will be an object with the following fields: - -- `slotsPerEpoch: `, the maximum number of slots in each epoch -- `leaderScheduleSlotOffset: `, the number of slots before beginning of an epoch to calculate a leader schedule for that epoch -- `warmup: `, whether epochs start short and grow -- `firstNormalEpoch: `, first normal-length epoch, log2(slotsPerEpoch) - log2(MINIMUM_SLOTS_PER_EPOCH) -- `firstNormalSlot: `, MINIMUM_SLOTS_PER_EPOCH \* (2.pow(firstNormalEpoch) - 1) - -#### Example: - -Request: - -```bash -curl http://localhost:8899 -X POST -H "Content-Type: application/json" -d ' - {"jsonrpc":"2.0","id":1, "method":"getEpochSchedule"} -' -``` - -Result: - -```json -{ - "jsonrpc": "2.0", - "result": { - "firstNormalEpoch": 8, - "firstNormalSlot": 8160, - "leaderScheduleSlotOffset": 8192, - "slotsPerEpoch": 8192, - "warmup": true - }, - "id": 1 -} -``` - -### getFeeForMessage - -**NEW: This method is only available in solana-core v1.9 or newer. Please use -[getFees](jsonrpc-api.md#getfees) for solana-core v1.8** - -Get the fee the network will charge for a particular Message - -#### Parameters: - -- `message: ` - Base-64 encoded Message -- (optional) `` - Configuration object containing the following optional fields: - - (optional) `commitment: ` - [Commitment](jsonrpc-api.md#configuring-state-commitment) (used for retrieving blockhash) - - (optional) `minContextSlot: ` - set the minimum slot that the request can be evaluated at. - -#### Results: - -- `` - Fee corresponding to the message at the specified blockhash - -#### Example: - -Request: - -```bash -curl http://localhost:8899 -X POST -H "Content-Type: application/json" -d ' -{ - "id":1, - "jsonrpc":"2.0", - "method":"getFeeForMessage", - "params":[ - "AQABAgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQAA", - { - "commitment":"processed" - } - ] -} -' -``` - -Result: - -```json -{ - "jsonrpc": "2.0", - "result": { "context": { "slot": 5068 }, "value": 5000 }, - "id": 1 -} -``` - -### getFirstAvailableBlock - -Returns the slot of the lowest confirmed block that has not been purged from the ledger - -#### Parameters: - -None - -#### Results: - -- `` - Slot - -#### Example: - -Request: - -```bash -curl http://localhost:8899 -X POST -H "Content-Type: application/json" -d ' - {"jsonrpc":"2.0","id":1, "method":"getFirstAvailableBlock"} -' -``` - -Result: - -```json -{ "jsonrpc": "2.0", "result": 250000, "id": 1 } -``` - -### getGenesisHash - -Returns the genesis hash - -#### Parameters: - -None - -#### Results: - -- `` - a Hash as base-58 encoded string - -#### Example: - -Request: - -```bash -curl http://localhost:8899 -X POST -H "Content-Type: application/json" -d ' - {"jsonrpc":"2.0","id":1, "method":"getGenesisHash"} -' -``` - -Result: - -```json -{ - "jsonrpc": "2.0", - "result": "GH7ome3EiwEr7tu9JuTh2dpYWBJK3z69Xm1ZE3MEE6JC", - "id": 1 -} -``` - -### getHealth - -Returns the current health of the node. - -If one or more `--known-validator` arguments are provided to -`solana-validator`, "ok" is returned when the node has within -`HEALTH_CHECK_SLOT_DISTANCE` slots of the highest known validator, otherwise -an error is returned. "ok" is always returned if no known validators are -provided. - -#### Parameters: - -None - -#### Results: - -If the node is healthy: "ok" -If the node is unhealthy, a JSON RPC error response is returned. The specifics -of the error response are **UNSTABLE** and may change in the future - -#### Example: - -Request: - -```bash -curl http://localhost:8899 -X POST -H "Content-Type: application/json" -d ' - {"jsonrpc":"2.0","id":1, "method":"getHealth"} -' -``` - -Healthy Result: - -```json -{ "jsonrpc": "2.0", "result": "ok", "id": 1 } -``` - -Unhealthy Result (generic): - -```json -{ - "jsonrpc": "2.0", - "error": { - "code": -32005, - "message": "Node is unhealthy", - "data": {} - }, - "id": 1 -} -``` - -Unhealthy Result (if additional information is available) - -```json -{ - "jsonrpc": "2.0", - "error": { - "code": -32005, - "message": "Node is behind by 42 slots", - "data": { - "numSlotsBehind": 42 - } - }, - "id": 1 -} -``` - -### getHighestSnapshotSlot - -**NEW: This method is only available in solana-core v1.9 or newer. Please use -[getSnapshotSlot](jsonrpc-api.md#getsnapshotslot) for solana-core v1.8** - -Returns the highest slot information that the node has snapshots for. - -This will find the highest full snapshot slot, and the highest incremental -snapshot slot _based on_ the full snapshot slot, if there is one. - -#### Parameters: - -None - -#### Results: - -- `` - - `full: ` - Highest full snapshot slot - - `incremental: ` - Highest incremental snapshot slot _based on_ `full` - -#### Example: - -Request: - -```bash -curl http://localhost:8899 -X POST -H "Content-Type: application/json" -d ' - {"jsonrpc":"2.0","id":1,"method":"getHighestSnapshotSlot"} -' -``` - -Result: - -```json -{ "jsonrpc": "2.0", "result": { "full": 100, "incremental": 110 }, "id": 1 } -``` - -Result when the node has no snapshot: - -```json -{ - "jsonrpc": "2.0", - "error": { "code": -32008, "message": "No snapshot" }, - "id": 1 -} -``` - -### getIdentity - -Returns the identity pubkey for the current node - -#### Parameters: - -None - -#### Results: - -The result field will be a JSON object with the following fields: - -- `identity`, the identity pubkey of the current node \(as a base-58 encoded string\) - -#### Example: - -Request: - -```bash -curl http://localhost:8899 -X POST -H "Content-Type: application/json" -d ' - {"jsonrpc":"2.0","id":1, "method":"getIdentity"} -' -``` - -Result: - -```json -{ - "jsonrpc": "2.0", - "result": { "identity": "2r1F4iWqVcb8M1DbAjQuFpebkQHY9hcVU4WuW2DJBppN" }, - "id": 1 -} -``` - -### getInflationGovernor - -Returns the current inflation governor - -#### Parameters: - -- (optional) `` - Configuration object containing the following field: - - (optional) `commitment: ` - [Commitment](jsonrpc-api.md#configuring-state-commitment) - -#### Results: - -The result field will be a JSON object with the following fields: - -- `initial: `, the initial inflation percentage from time 0 -- `terminal: `, terminal inflation percentage -- `taper: `, rate per year at which inflation is lowered. - Rate reduction is derived using the target slot time in genesis config -- `foundation: `, percentage of total inflation allocated to the foundation -- `foundationTerm: `, duration of foundation pool inflation in years - -#### Example: - -Request: - -```bash -curl http://localhost:8899 -X POST -H "Content-Type: application/json" -d ' - {"jsonrpc":"2.0","id":1, "method":"getInflationGovernor"} -' -``` - -Result: - -```json -{ - "jsonrpc": "2.0", - "result": { - "foundation": 0.05, - "foundationTerm": 7, - "initial": 0.15, - "taper": 0.15, - "terminal": 0.015 - }, - "id": 1 -} -``` - -### getInflationRate - -Returns the specific inflation values for the current epoch - -#### Parameters: - -None - -#### Results: - -The result field will be a JSON object with the following fields: - -- `total: `, total inflation -- `validator: `, inflation allocated to validators -- `foundation: `, inflation allocated to the foundation -- `epoch: `, epoch for which these values are valid - -#### Example: - -Request: - -```bash -curl http://localhost:8899 -X POST -H "Content-Type: application/json" -d ' - {"jsonrpc":"2.0","id":1, "method":"getInflationRate"} -' -``` - -Result: - -```json -{ - "jsonrpc": "2.0", - "result": { - "epoch": 100, - "foundation": 0.001, - "total": 0.149, - "validator": 0.148 - }, - "id": 1 -} -``` - -### getInflationReward - -Returns the inflation / staking reward for a list of addresses for an epoch - -#### Parameters: - -- `` - An array of addresses to query, as base-58 encoded strings -- (optional) `` - Configuration object containing the following fields: - - (optional) `commitment: ` - [Commitment](jsonrpc-api.md#configuring-state-commitment) - - (optional) `epoch: ` - An epoch for which the reward occurs. If omitted, the previous epoch will be used - - (optional) `minContextSlot: ` - set the minimum slot that the request can be evaluated at. - -#### Results - -The result field will be a JSON array with the following fields: - -- `epoch: `, epoch for which reward occured -- `effectiveSlot: `, the slot in which the rewards are effective -- `amount: `, reward amount in lamports -- `postBalance: `, post balance of the account in lamports -- `commission: ` - vote account commission when the reward was credited - -#### Example - -Request: - -```bash -curl http://localhost:8899 -X POST -H "Content-Type: application/json" -d ' - { - "jsonrpc": "2.0", - "id": 1, - "method": "getInflationReward", - "params": [ - ["6dmNQ5jwLeLk5REvio1JcMshcbvkYMwy26sJ8pbkvStu", "BGsqMegLpV6n6Ve146sSX2dTjUMj3M92HnU8BbNRMhF2"], {"epoch": 2} - ] - } -' -``` - -Response: - -```json -{ - "jsonrpc": "2.0", - "result": [ - { - "amount": 2500, - "effectiveSlot": 224, - "epoch": 2, - "postBalance": 499999442500 - }, - null - ], - "id": 1 -} -``` - -### getLargestAccounts - -Returns the 20 largest accounts, by lamport balance (results may be cached up to two hours) - -#### Parameters: - -- (optional) `` - Configuration object containing the following optional fields: - - (optional) `commitment: ` - [Commitment](jsonrpc-api.md#configuring-state-commitment) - - (optional) `filter: ` - filter results by account type; currently supported: `circulating|nonCirculating` - -#### Results: - -The result will be an RpcResponse JSON object with `value` equal to an array of: - -- `` - otherwise, a JSON object containing: - - `address: `, base-58 encoded address of the account - - `lamports: `, number of lamports in the account, as a u64 - -#### Example: - -Request: - -```bash -curl http://localhost:8899 -X POST -H "Content-Type: application/json" -d ' - {"jsonrpc":"2.0","id":1, "method":"getLargestAccounts"} -' -``` - -Result: - -```json -{ - "jsonrpc": "2.0", - "result": { - "context": { - "slot": 54 - }, - "value": [ - { - "lamports": 999974, - "address": "99P8ZgtJYe1buSK8JXkvpLh8xPsCFuLYhz9hQFNw93WJ" - }, - { - "lamports": 42, - "address": "uPwWLo16MVehpyWqsLkK3Ka8nLowWvAHbBChqv2FZeL" - }, - { - "lamports": 42, - "address": "aYJCgU7REfu3XF8b3QhkqgqQvLizx8zxuLBHA25PzDS" - }, - { - "lamports": 42, - "address": "CTvHVtQ4gd4gUcw3bdVgZJJqApXE9nCbbbP4VTS5wE1D" - }, - { - "lamports": 20, - "address": "4fq3xJ6kfrh9RkJQsmVd5gNMvJbuSHfErywvEjNQDPxu" - }, - { - "lamports": 4, - "address": "AXJADheGVp9cruP8WYu46oNkRbeASngN5fPCMVGQqNHa" - }, - { - "lamports": 2, - "address": "8NT8yS6LiwNprgW4yM1jPPow7CwRUotddBVkrkWgYp24" - }, - { - "lamports": 1, - "address": "SysvarEpochSchedu1e111111111111111111111111" - }, - { - "lamports": 1, - "address": "11111111111111111111111111111111" - }, - { - "lamports": 1, - "address": "Stake11111111111111111111111111111111111111" - }, - { - "lamports": 1, - "address": "SysvarC1ock11111111111111111111111111111111" - }, - { - "lamports": 1, - "address": "StakeConfig11111111111111111111111111111111" - }, - { - "lamports": 1, - "address": "SysvarRent111111111111111111111111111111111" - }, - { - "lamports": 1, - "address": "Config1111111111111111111111111111111111111" - }, - { - "lamports": 1, - "address": "SysvarStakeHistory1111111111111111111111111" - }, - { - "lamports": 1, - "address": "SysvarRecentB1ockHashes11111111111111111111" - }, - { - "lamports": 1, - "address": "SysvarFees111111111111111111111111111111111" - }, - { - "lamports": 1, - "address": "Vote111111111111111111111111111111111111111" - } - ] - }, - "id": 1 -} -``` - -### getLatestBlockhash - -**NEW: This method is only available in solana-core v1.9 or newer. Please use -[getRecentBlockhash](jsonrpc-api.md#getrecentblockhash) for solana-core v1.8** - -Returns the latest blockhash - -#### Parameters: - -- (optional) `` - Configuration object containing the following fields: - - (optional) `commitment: ` - [Commitment](jsonrpc-api.md#configuring-state-commitment) (used for retrieving blockhash) - - (optional) `minContextSlot: ` - set the minimum slot that the request can be evaluated at. - -#### Results: - -- `RpcResponse` - RpcResponse JSON object with `value` field set to a JSON object including: -- `blockhash: ` - a Hash as base-58 encoded string -- `lastValidBlockHeight: ` - last [block height](../../terminology.md#block-height) at which the blockhash will be valid - -#### Example: - -Request: - -```bash -curl http://localhost:8899 -X POST -H "Content-Type: application/json" -d ' - { - "id":1, - "jsonrpc":"2.0", - "method":"getLatestBlockhash", - "params":[ - { - "commitment":"processed" - } - ] - } -' -``` - -Result: - -```json -{ - "jsonrpc": "2.0", - "result": { - "context": { - "slot": 2792 - }, - "value": { - "blockhash": "EkSnNWid2cvwEVnVx9aBqawnmiCNiDgp3gUdkDPTKN1N", - "lastValidBlockHeight": 3090 - } - }, - "id": 1 -} -``` - -### getLeaderSchedule - -Returns the leader schedule for an epoch - -#### Parameters: - -- (optional) `` - Fetch the leader schedule for the epoch that corresponds to the provided slot. - If unspecified, the leader schedule for the current epoch is fetched -- (optional) `` - Configuration object containing the following field: - - (optional) `commitment: ` - [Commitment](jsonrpc-api.md#configuring-state-commitment) - - (optional) `identity: ` - Only return results for this validator identity (base-58 encoded) - -#### Results: - -- `` - if requested epoch is not found -- `` - otherwise, the result field will be a dictionary of validator identities, - as base-58 encoded strings, and their corresponding leader slot indices as values - (indices are relative to the first slot in the requested epoch) - -#### Example: - -Request: - -```bash -curl http://localhost:8899 -X POST -H "Content-Type: application/json" -d ' - {"jsonrpc":"2.0","id":1, "method":"getLeaderSchedule"} -' -``` - -Result: - -```json -{ - "jsonrpc": "2.0", - "result": { - "4Qkev8aNZcqFNSRhQzwyLMFSsi94jHqE8WNVTJzTP99F": [ - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, - 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, - 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, - 57, 58, 59, 60, 61, 62, 63 - ] - }, - "id": 1 -} -``` - -#### Example: - -Request: - -```bash -curl http://localhost:8899 -X POST -H "Content-Type: application/json" -d ' - { - "jsonrpc": "2.0", - "id": 1, - "method": "getLeaderSchedule", - "params": [ - null, - { - "identity": "4Qkev8aNZcqFNSRhQzwyLMFSsi94jHqE8WNVTJzTP99F" - } - ] - } -' -``` - -Result: - -```json -{ - "jsonrpc": "2.0", - "result": { - "4Qkev8aNZcqFNSRhQzwyLMFSsi94jHqE8WNVTJzTP99F": [ - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, - 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, - 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, - 57, 58, 59, 60, 61, 62, 63 - ] - }, - "id": 1 -} -``` - -### getMaxRetransmitSlot - -Get the max slot seen from retransmit stage. - -#### Results: - -- `` - Slot - -#### Example: - -Request: - -```bash -curl http://localhost:8899 -X POST -H "Content-Type: application/json" -d ' - {"jsonrpc":"2.0","id":1, "method":"getMaxRetransmitSlot"} -' -``` - -Result: - -```json -{ "jsonrpc": "2.0", "result": 1234, "id": 1 } -``` - -### getMaxShredInsertSlot - -Get the max slot seen from after shred insert. - -#### Results: - -- `` - Slot - -#### Example: - -Request: - -```bash -curl http://localhost:8899 -X POST -H "Content-Type: application/json" -d ' - {"jsonrpc":"2.0","id":1, "method":"getMaxShredInsertSlot"} -' -``` - -Result: - -```json -{ "jsonrpc": "2.0", "result": 1234, "id": 1 } -``` - -### getMinimumBalanceForRentExemption - -Returns minimum balance required to make account rent exempt. - -#### Parameters: - -- `` - account data length -- (optional) `` - Configuration object containing the following field: - - (optional) `commitment: ` - [Commitment](jsonrpc-api.md#configuring-state-commitment) - -#### Results: - -- `` - minimum lamports required in account - -#### Example: - -Request: - -```bash -curl http://localhost:8899 -X POST -H "Content-Type: application/json" -d ' - {"jsonrpc":"2.0", "id":1, "method":"getMinimumBalanceForRentExemption", "params":[50]} -' -``` - -Result: - -```json -{ "jsonrpc": "2.0", "result": 500, "id": 1 } -``` - -### getMultipleAccounts - -Returns the account information for a list of Pubkeys. - -#### Parameters: - -- `` - An array of Pubkeys to query, as base-58 encoded strings (up to a maximum of 100). -- (optional) `` - Configuration object containing the following fields: - - (optional) `commitment: ` - [Commitment](jsonrpc-api.md#configuring-state-commitment) - - (optional) `encoding: ` - encoding for Account data, either "base58" (_slow_), "base64", "base64+zstd", or "jsonParsed". - "base58" is limited to Account data of less than 129 bytes. - "base64" will return base64 encoded data for Account data of any size. - "base64+zstd" compresses the Account data using [Zstandard](https://facebook.github.io/zstd/) and base64-encodes the result. - ["jsonParsed" encoding](jsonrpc-api.md#parsed-responses) attempts to use program-specific state parsers to return more human-readable and explicit account state data. If "jsonParsed" is requested but a parser cannot be found, the field falls back to "base64" encoding, detectable when the `data` field is type ``. - - (optional) `dataSlice: ` - limit the returned account data using the provided `offset: ` and `length: ` fields; only available for "base58", "base64" or "base64+zstd" encodings. - - (optional) `minContextSlot: ` - set the minimum slot that the request can be evaluated at. - -#### Results: - -The result will be an RpcResponse JSON object with `value` equal to: - -An array of: - -- `` - if the account at that Pubkey doesn't exist -- `` - otherwise, a JSON object containing: - - `lamports: `, number of lamports assigned to this account, as a u64 - - `owner: `, base-58 encoded Pubkey of the program this account has been assigned to - - `data: <[string, encoding]|object>`, data associated with the account, either as encoded binary data or JSON format `{: }`, depending on encoding parameter - - `executable: `, boolean indicating if the account contains a program \(and is strictly read-only\) - - `rentEpoch: `, the epoch at which this account will next owe rent, as u64 - -#### Example: - -Request: - -```bash -curl http://localhost:8899 -X POST -H "Content-Type: application/json" -d ' - { - "jsonrpc": "2.0", - "id": 1, - "method": "getMultipleAccounts", - "params": [ - [ - "vines1vzrYbzLMRdu58ou5XTby4qAqVRLmqo36NKPTg", - "4fYNw3dojWmQ4dXtSGE9epjRGy9pFSx62YypT7avPYvA" - ], - { - "dataSlice": { - "offset": 0, - "length": 0 - } - } - ] - } -' -``` - -Result: - -```json -{ - "jsonrpc": "2.0", - "result": { - "context": { - "slot": 1 - }, - "value": [ - { - "data": ["AAAAAAEAAAACtzNsyJrW0g==", "base64"], - "executable": false, - "lamports": 1000000000, - "owner": "11111111111111111111111111111111", - "rentEpoch": 2 - }, - { - "data": ["", "base64"], - "executable": false, - "lamports": 5000000000, - "owner": "11111111111111111111111111111111", - "rentEpoch": 2 - } - ] - }, - "id": 1 -} -``` - -#### Example: - -Request: - -```bash -curl http://localhost:8899 -X POST -H "Content-Type: application/json" -d ' - { - "jsonrpc": "2.0", - "id": 1, - "method": "getMultipleAccounts", - "params": [ - [ - "vines1vzrYbzLMRdu58ou5XTby4qAqVRLmqo36NKPTg", - "4fYNw3dojWmQ4dXtSGE9epjRGy9pFSx62YypT7avPYvA" - ], - { - "encoding": "base58" - } - ] - } -' -``` - -Result: - -```json -{ - "jsonrpc": "2.0", - "result": { - "context": { - "slot": 1 - }, - "value": [ - { - "data": [ - "11116bv5nS2h3y12kD1yUKeMZvGcKLSjQgX6BeV7u1FrjeJcKfsHRTPuR3oZ1EioKtYGiYxpxMG5vpbZLsbcBYBEmZZcMKaSoGx9JZeAuWf", - "base58" - ], - "executable": false, - "lamports": 1000000000, - "owner": "11111111111111111111111111111111", - "rentEpoch": 2 - }, - { - "data": ["", "base58"], - "executable": false, - "lamports": 5000000000, - "owner": "11111111111111111111111111111111", - "rentEpoch": 2 - } - ] - }, - "id": 1 -} -``` - -### getProgramAccounts - -Returns all accounts owned by the provided program Pubkey - -#### Parameters: - -- `` - Pubkey of program, as base-58 encoded string -- (optional) `` - Configuration object containing the following fields: - - (optional) `commitment: ` - [Commitment](jsonrpc-api.md#configuring-state-commitment) - - (optional) `encoding: ` - encoding for Account data, either "base58" (_slow_), "base64", "base64+zstd", or "jsonParsed". - "base58" is limited to Account data of less than 129 bytes. - "base64" will return base64 encoded data for Account data of any size. - "base64+zstd" compresses the Account data using [Zstandard](https://facebook.github.io/zstd/) and base64-encodes the result. - ["jsonParsed" encoding](jsonrpc-api.md#parsed-responses) attempts to use program-specific state parsers to return more human-readable and explicit account state data. If "jsonParsed" is requested but a parser cannot be found, the field falls back to "base64" encoding, detectable when the `data` field is type ``. - - (optional) `dataSlice: ` - limit the returned account data using the provided `offset: ` and `length: ` fields; only available for "base58", "base64" or "base64+zstd" encodings. - - (optional) `filters: ` - filter results using up to 4 [filter objects](jsonrpc-api.md#filters); account must meet all filter criteria to be included in results - - (optional) `withContext: bool` - wrap the result in an RpcResponse JSON object. - - (optional) `minContextSlot: ` - set the minimum slot that the request can be evaluated at. - -##### Filters: - -- `memcmp: ` - compares a provided series of bytes with program account data at a particular offset. Fields: - - - `offset: ` - offset into program account data to start comparison - - `bytes: ` - data to match, as encoded string - - `encoding: ` - encoding for filter `bytes` data, either "base58" or "base64". Data is limited in size to 128 or fewer decoded bytes. - **NEW: This field, and base64 support generally, is only available in solana-core v1.14.0 or newer. Please omit when querying nodes on earlier versions** - -- `dataSize: ` - compares the program account data length with the provided data size - -#### Results: - -By default the result field will be an array of JSON objects. If `withContext` flag is set the array will be wrapped in an RpcResponse JSON object. - -The array will contain: - -- `pubkey: ` - the account Pubkey as base-58 encoded string -- `account: ` - a JSON object, with the following sub fields: - - `lamports: `, number of lamports assigned to this account, as a u64 - - `owner: `, base-58 encoded Pubkey of the program this account has been assigned to - - `data: <[string,encoding]|object>`, data associated with the account, either as encoded binary data or JSON format `{: }`, depending on encoding parameter - - `executable: `, boolean indicating if the account contains a program \(and is strictly read-only\) - - `rentEpoch: `, the epoch at which this account will next owe rent, as u64 - -#### Example: - -Request: - -```bash -curl http://localhost:8899 -X POST -H "Content-Type: application/json" -d ' - {"jsonrpc":"2.0", "id":1, "method":"getProgramAccounts", "params":["4Nd1mBQtrMJVYVfKf2PJy9NZUZdTAsp7D4xWLs4gDB4T"]} -' -``` - -Result: - -```json -{ - "jsonrpc": "2.0", - "result": [ - { - "account": { - "data": "2R9jLfiAQ9bgdcw6h8s44439", - "executable": false, - "lamports": 15298080, - "owner": "4Nd1mBQtrMJVYVfKf2PJy9NZUZdTAsp7D4xWLs4gDB4T", - "rentEpoch": 28 - }, - "pubkey": "CxELquR1gPP8wHe33gZ4QxqGB3sZ9RSwsJ2KshVewkFY" - } - ], - "id": 1 -} -``` - -#### Example: - -Request: - -```bash -curl http://localhost:8899 -X POST -H "Content-Type: application/json" -d ' - { - "jsonrpc": "2.0", - "id": 1, - "method": "getProgramAccounts", - "params": [ - "4Nd1mBQtrMJVYVfKf2PJy9NZUZdTAsp7D4xWLs4gDB4T", - { - "filters": [ - { - "dataSize": 17 - }, - { - "memcmp": { - "offset": 4, - "bytes": "3Mc6vR" - } - } - ] - } - ] - } -' -``` - -Result: - -```json -{ - "jsonrpc": "2.0", - "result": [ - { - "account": { - "data": "2R9jLfiAQ9bgdcw6h8s44439", - "executable": false, - "lamports": 15298080, - "owner": "4Nd1mBQtrMJVYVfKf2PJy9NZUZdTAsp7D4xWLs4gDB4T", - "rentEpoch": 28 - }, - "pubkey": "CxELquR1gPP8wHe33gZ4QxqGB3sZ9RSwsJ2KshVewkFY" - } - ], - "id": 1 -} -``` - -### getRecentPerformanceSamples - -Returns a list of recent performance samples, in reverse slot order. Performance samples are taken every 60 seconds and -include the number of transactions and slots that occur in a given time window. - -#### Parameters: - -- (optional) `limit: ` - number of samples to return (maximum 720) - -#### Results: - -An array of: - -- `RpcPerfSample` - - `slot: ` - Slot in which sample was taken at - - `numTransactions: ` - Number of transactions in sample - - `numSlots: ` - Number of slots in sample - - `samplePeriodSecs: ` - Number of seconds in a sample window - -#### Example: - -Request: - -```bash -// Request -curl http://localhost:8899 -X POST -H "Content-Type: application/json" -d ' - {"jsonrpc":"2.0", "id":1, "method":"getRecentPerformanceSamples", "params": [4]} -' -``` - -Result: - -```json -{ - "jsonrpc": "2.0", - "result": [ - { - "numSlots": 126, - "numTransactions": 126, - "samplePeriodSecs": 60, - "slot": 348125 - }, - { - "numSlots": 126, - "numTransactions": 126, - "samplePeriodSecs": 60, - "slot": 347999 - }, - { - "numSlots": 125, - "numTransactions": 125, - "samplePeriodSecs": 60, - "slot": 347873 - }, - { - "numSlots": 125, - "numTransactions": 125, - "samplePeriodSecs": 60, - "slot": 347748 - } - ], - "id": 1 -} -``` - -### getRecentPrioritizationFees - -Returns a list of prioritization fees from recent blocks. Currently, a -node's prioritization-fee cache stores data from up to 150 blocks. - -#### Parameters: - -- `` - (optional) An array of account address strings (up to a maximum of 128 addresses). If this parameter is provided, the response will reflect a fee to land a transaction locking all of the provided accounts as writable. - -#### Results: - -An array of: - -- `RpcPrioritizationFee` - - `slot: ` - Slot in which fee was observed - - `prioritizationFee: ` - the per-compute-unit fee paid by at least one successfully landed transaction, specified in increments of 0.000001 lamports - -#### Example: - -Request: - -```bash -// Request -curl http://localhost:8899 -X POST -H "Content-Type: application/json" -d ' - {"jsonrpc":"2.0", "id":1, "method":"getRecentPrioritizationFees", "params": [["CxELquR1gPP8wHe33gZ4QxqGB3sZ9RSwsJ2KshVewkFY"]]} -' -``` - -Result: - -```json -{ - "jsonrpc": "2.0", - "result": [ - { - "slot": 348125, - "prioritizationFee": 0, - }, - { - "slot": 348126, - "prioritizationFee": 1000, - }, - { - "slot": 348127, - "prioritizationFee": 500, - }, - { - "slot": 348128, - "prioritizationFee": 0, - }, - { - "slot": 348129, - "prioritizationFee": 1234, - } - ], - "id": 1 -} -``` - -### getSignaturesForAddress - -Returns signatures for confirmed transactions that include the given address in -their `accountKeys` list. Returns signatures backwards in time from the -provided signature or most recent confirmed block - -#### Parameters: - -- `` - account address as base-58 encoded string -- (optional) `` - Configuration object containing the following fields: - - (optional) `limit: ` - maximum transaction signatures to return (between 1 and 1,000, default: 1,000). - - (optional) `before: ` - start searching backwards from this transaction signature. - If not provided the search starts from the top of the highest max confirmed block. - - (optional) `until: ` - search until this transaction signature, if found before limit reached. - - (optional) `commitment: ` - [Commitment](jsonrpc-api.md#configuring-state-commitment) - - (optional) `minContextSlot: ` - set the minimum slot that the request can be evaluated at. - -#### Results: - -The result field will be an array of transaction signature information, ordered -from newest to oldest transaction: - -- `` - - `signature: ` - transaction signature as base-58 encoded string - - `slot: ` - The slot that contains the block with the transaction - - `err: ` - Error if transaction failed, null if transaction succeeded. [TransactionError definitions](https://github.com/solana-labs/solana/blob/c0c60386544ec9a9ec7119229f37386d9f070523/sdk/src/transaction/error.rs#L13) - - `memo: ` - Memo associated with the transaction, null if no memo is present - - `blockTime: ` - estimated production time, as Unix timestamp (seconds since the Unix epoch) of when transaction was processed. null if not available. - - `confirmationStatus: ` - The transaction's cluster confirmation status; either `processed`, `confirmed`, or `finalized`. See [Commitment](jsonrpc-api.md#configuring-state-commitment) for more on optimistic confirmation. - -#### Example: - -Request: - -```bash -curl http://localhost:8899 -X POST -H "Content-Type: application/json" -d ' - { - "jsonrpc": "2.0", - "id": 1, - "method": "getSignaturesForAddress", - "params": [ - "Vote111111111111111111111111111111111111111", - { - "limit": 1 - } - ] - } -' -``` - -Result: - -```json -{ - "jsonrpc": "2.0", - "result": [ - { - "err": null, - "memo": null, - "signature": "5h6xBEauJ3PK6SWCZ1PGjBvj8vDdWG3KpwATGy1ARAXFSDwt8GFXM7W5Ncn16wmqokgpiKRLuS83KUxyZyv2sUYv", - "slot": 114, - "blockTime": null - } - ], - "id": 1 -} -``` - -### getSignatureStatuses - -Returns the statuses of a list of signatures. Unless the -`searchTransactionHistory` configuration parameter is included, this method only -searches the recent status cache of signatures, which retains statuses for all -active slots plus `MAX_RECENT_BLOCKHASHES` rooted slots. - -#### Parameters: - -- `` - An array of transaction signatures to confirm, as base-58 encoded strings (up to a maximum of 256) -- (optional) `` - Configuration object containing the following field: - - `searchTransactionHistory: ` - if true, a Solana node will search its ledger cache for any signatures not found in the recent status cache - -#### Results: - -An RpcResponse containing a JSON object consisting of an array of TransactionStatus objects. - -- `RpcResponse` - RpcResponse JSON object with `value` field: - -An array of: - -- `` - Unknown transaction -- `` - - `slot: ` - The slot the transaction was processed - - `confirmations: ` - Number of blocks since signature confirmation, null if rooted, as well as finalized by a supermajority of the cluster - - `err: ` - Error if transaction failed, null if transaction succeeded. [TransactionError definitions](https://github.com/solana-labs/solana/blob/c0c60386544ec9a9ec7119229f37386d9f070523/sdk/src/transaction/error.rs#L13) - - `confirmationStatus: ` - The transaction's cluster confirmation status; either `processed`, `confirmed`, or `finalized`. See [Commitment](jsonrpc-api.md#configuring-state-commitment) for more on optimistic confirmation. - - DEPRECATED: `status: ` - Transaction status - - `"Ok": ` - Transaction was successful - - `"Err": ` - Transaction failed with TransactionError - -#### Example: - -Request: - -```bash -curl http://localhost:8899 -X POST -H "Content-Type: application/json" -d ' - { - "jsonrpc": "2.0", - "id": 1, - "method": "getSignatureStatuses", - "params": [ - [ - "5VERv8NMvzbJMEkV8xnrLkEaWRtSz9CosKDYjCJjBRnbJLgp8uirBgmQpjKhoR4tjF3ZpRzrFmBV6UjKdiSZkQUW", - "5j7s6NiJS3JAkvgkoc18WVAsiSaci2pxB2A6ueCJP4tprA2TFg9wSyTLeYouxPBJEMzJinENTkpA52YStRW5Dia7" - ] - ] - } -' -``` - -Result: - -```json -{ - "jsonrpc": "2.0", - "result": { - "context": { - "slot": 82 - }, - "value": [ - { - "slot": 72, - "confirmations": 10, - "err": null, - "status": { - "Ok": null - }, - "confirmationStatus": "confirmed" - }, - null - ] - }, - "id": 1 -} -``` - -#### Example: - -Request: - -```bash -curl http://localhost:8899 -X POST -H "Content-Type: application/json" -d ' - { - "jsonrpc": "2.0", - "id": 1, - "method": "getSignatureStatuses", - "params": [ - [ - "5VERv8NMvzbJMEkV8xnrLkEaWRtSz9CosKDYjCJjBRnbJLgp8uirBgmQpjKhoR4tjF3ZpRzrFmBV6UjKdiSZkQUW" - ], - { - "searchTransactionHistory": true - } - ] - } -' -``` - -Result: - -```json -{ - "jsonrpc": "2.0", - "result": { - "context": { - "slot": 82 - }, - "value": [ - { - "slot": 48, - "confirmations": null, - "err": null, - "status": { - "Ok": null - }, - "confirmationStatus": "finalized" - }, - null - ] - }, - "id": 1 -} -``` - -### getSlot - -Returns the slot that has reached the [given or default commitment level](jsonrpc-api.md#configuring-state-commitment) - -#### Parameters: - -- (optional) `` - Configuration object containing the following fields: - - (optional) `commitment: ` - [Commitment](jsonrpc-api.md#configuring-state-commitment) - - (optional) `minContextSlot: ` - set the minimum slot that the request can be evaluated at. - -#### Results: - -- `` - Current slot - -#### Example: - -Request: - -```bash -curl http://localhost:8899 -X POST -H "Content-Type: application/json" -d ' - {"jsonrpc":"2.0","id":1, "method":"getSlot"} -' -``` - -Result: - -```json -{ "jsonrpc": "2.0", "result": 1234, "id": 1 } -``` - -### getSlotLeader - -Returns the current slot leader - -#### Parameters: - -- (optional) `` - Configuration object containing the following fields: - - (optional) `commitment: ` - [Commitment](jsonrpc-api.md#configuring-state-commitment) - - (optional) `minContextSlot: ` - set the minimum slot that the request can be evaluated at. - -#### Results: - -- `` - Node identity Pubkey as base-58 encoded string - -#### Example: - -Request: - -```bash -curl http://localhost:8899 -X POST -H "Content-Type: application/json" -d ' - {"jsonrpc":"2.0","id":1, "method":"getSlotLeader"} -' -``` - -Result: - -```json -{ - "jsonrpc": "2.0", - "result": "ENvAW7JScgYq6o4zKZwewtkzzJgDzuJAFxYasvmEQdpS", - "id": 1 -} -``` - -### getSlotLeaders - -Returns the slot leaders for a given slot range - -#### Parameters: - -- `` - Start slot, as u64 integer -- `` - Limit, as u64 integer (between 1 and 5,000) - -#### Results: - -- `` - Node identity public keys as base-58 encoded strings - -#### Example: - -If the current slot is #99, query the next 10 leaders with the following request: - -Request: - -```bash -curl http://localhost:8899 -X POST -H "Content-Type: application/json" -d ' - {"jsonrpc":"2.0","id":1, "method":"getSlotLeaders", "params":[100, 10]} -' -``` - -Result: - -The first leader returned is the leader for slot #100: - -```json -{ - "jsonrpc": "2.0", - "result": [ - "ChorusmmK7i1AxXeiTtQgQZhQNiXYU84ULeaYF1EH15n", - "ChorusmmK7i1AxXeiTtQgQZhQNiXYU84ULeaYF1EH15n", - "ChorusmmK7i1AxXeiTtQgQZhQNiXYU84ULeaYF1EH15n", - "ChorusmmK7i1AxXeiTtQgQZhQNiXYU84ULeaYF1EH15n", - "Awes4Tr6TX8JDzEhCZY2QVNimT6iD1zWHzf1vNyGvpLM", - "Awes4Tr6TX8JDzEhCZY2QVNimT6iD1zWHzf1vNyGvpLM", - "Awes4Tr6TX8JDzEhCZY2QVNimT6iD1zWHzf1vNyGvpLM", - "Awes4Tr6TX8JDzEhCZY2QVNimT6iD1zWHzf1vNyGvpLM", - "DWvDTSh3qfn88UoQTEKRV2JnLt5jtJAVoiCo3ivtMwXP", - "DWvDTSh3qfn88UoQTEKRV2JnLt5jtJAVoiCo3ivtMwXP" - ], - "id": 1 -} -``` - -### getStakeActivation - -Returns epoch activation information for a stake account - -#### Parameters: - -- `` - Pubkey of stake account to query, as base-58 encoded string -- (optional) `` - Configuration object containing the following fields: - - (optional) `commitment: ` - [Commitment](jsonrpc-api.md#configuring-state-commitment) - - (optional) `epoch: ` - epoch for which to calculate activation details. If parameter not provided, defaults to current epoch. - - (optional) `minContextSlot: ` - set the minimum slot that the request can be evaluated at. - -#### Results: - -The result will be a JSON object with the following fields: - -- `state: ` - stake active during the epoch -- `inactive: ` - stake inactive during the epoch - -#### Example: - -Request: - -```bash -curl http://localhost:8899 -X POST -H "Content-Type: application/json" -d ' - {"jsonrpc":"2.0","id":1, "method":"getStakeActivation", "params": ["CYRJWqiSjLitBAcRxPvWpgX3s5TvmN2SuRY3eEYypFvT"]} -' -``` - -Result: - -```json -{ - "jsonrpc": "2.0", - "result": { "active": 197717120, "inactive": 0, "state": "active" }, - "id": 1 -} -``` - -#### Example: - -Request: - -```bash -curl http://localhost:8899 -X POST -H "Content-Type: application/json" -d ' - { - "jsonrpc": "2.0", - "id": 1, - "method": "getStakeActivation", - "params": [ - "CYRJWqiSjLitBAcRxPvWpgX3s5TvmN2SuRY3eEYypFvT", - { - "epoch": 4 - } - ] - } -' -``` - -Result: - -```json -{ - "jsonrpc": "2.0", - "result": { - "active": 124429280, - "inactive": 73287840, - "state": "activating" - }, - "id": 1 -} -``` - -### getStakeMinimumDelegation - -Returns the stake minimum delegation, in lamports. - -#### Parameters: - -- (optional) `` - Configuration object containing the following field: - - (optional) `commitment: ` - [Commitment](jsonrpc-api.md#configuring-state-commitment) - -#### Results: - -The result will be an RpcResponse JSON object with `value` equal to: - -- `` - The stake minimum delegation, in lamports - -#### Example: - -Request: - -```bash -curl http://localhost:8899 -X POST -H "Content-Type: application/json" -d ' - {"jsonrpc":"2.0","id":1,"method":"getStakeMinimumDelegation"} -' -``` - -Result: - -```json -{ - "jsonrpc": "2.0", - "result": { - "context": { - "slot": 501 - }, - "value": 1000000000 - }, - "id": 1 -} -``` - -### getSupply - -Returns information about the current supply. - -#### Parameters: - -- (optional) `` - Configuration object containing the following optional fields: - - (optional) `commitment: ` - [Commitment](jsonrpc-api.md#configuring-state-commitment) - - (optional) `excludeNonCirculatingAccountsList: ` - exclude non circulating accounts list from response - -#### Results: - -The result will be an RpcResponse JSON object with `value` equal to a JSON object containing: - -- `total: ` - Total supply in lamports -- `circulating: ` - Circulating supply in lamports -- `nonCirculating: ` - Non-circulating supply in lamports -- `nonCirculatingAccounts: ` - an array of account addresses of non-circulating accounts, as strings. If `excludeNonCirculatingAccountsList` is enabled, the returned array will be empty. - -#### Example: - -Request: - -```bash -curl http://localhost:8899 -X POST -H "Content-Type: application/json" -d ' - {"jsonrpc":"2.0", "id":1, "method":"getSupply"} -' -``` - -Result: - -```json -{ - "jsonrpc": "2.0", - "result": { - "context": { - "slot": 1114 - }, - "value": { - "circulating": 16000, - "nonCirculating": 1000000, - "nonCirculatingAccounts": [ - "FEy8pTbP5fEoqMV1GdTz83byuA8EKByqYat1PKDgVAq5", - "9huDUZfxoJ7wGMTffUE7vh1xePqef7gyrLJu9NApncqA", - "3mi1GmwEE3zo2jmfDuzvjSX9ovRXsDUKHvsntpkhuLJ9", - "BYxEJTDerkaRWBem3XgnVcdhppktBXa2HbkHPKj2Ui4Z" - ], - "total": 1016000 - } - }, - "id": 1 -} -``` - -### getTokenAccountBalance - -Returns the token balance of an SPL Token account. - -#### Parameters: - -- `` - Pubkey of Token account to query, as base-58 encoded string -- (optional) `` - Configuration object containing the following field: - - (optional) `commitment: ` - [Commitment](jsonrpc-api.md#configuring-state-commitment) - -#### Results: - -The result will be an RpcResponse JSON object with `value` equal to a JSON object containing: - -- `amount: ` - the raw balance without decimals, a string representation of u64 -- `decimals: ` - number of base 10 digits to the right of the decimal place -- `uiAmount: ` - the balance, using mint-prescribed decimals **DEPRECATED** -- `uiAmountString: ` - the balance as a string, using mint-prescribed decimals - -For more details on returned data: The -[Token Balances Structure](jsonrpc-api.md#token-balances-structure) response from [getBlock](jsonrpc-api.md#getblock) follows a similar structure. - -#### Example: - -Request: - -```bash -curl http://localhost:8899 -X POST -H "Content-Type: application/json" -d ' - {"jsonrpc":"2.0", "id":1, "method":"getTokenAccountBalance", "params": ["7fUAJdStEuGbc3sM84cKRL6yYaaSstyLSU4ve5oovLS7"]} -' -``` - -Result: - -```json -{ - "jsonrpc": "2.0", - "result": { - "context": { - "slot": 1114 - }, - "value": { - "amount": "9864", - "decimals": 2, - "uiAmount": 98.64, - "uiAmountString": "98.64" - }, - "id": 1 - } -} -``` - -### getTokenAccountsByDelegate - -Returns all SPL Token accounts by approved Delegate. - -#### Parameters: - -- `` - Pubkey of account delegate to query, as base-58 encoded string -- `` - Either: - - `mint: ` - Pubkey of the specific token Mint to limit accounts to, as base-58 encoded string; or - - `programId: ` - Pubkey of the Token program that owns the accounts, as base-58 encoded string -- (optional) `` - Configuration object containing the following fields: - - (optional) `commitment: ` - [Commitment](jsonrpc-api.md#configuring-state-commitment) - - (optional) `encoding: ` - encoding for Account data, either "base58" (_slow_), "base64", "base64+zstd", or "jsonParsed". - "base58" is limited to Account data of less than 129 bytes. - "base64" will return base64 encoded data for Account data of any size. - "base64+zstd" compresses the Account data using [Zstandard](https://facebook.github.io/zstd/) and base64-encodes the result. - ["jsonParsed" encoding](jsonrpc-api.md#parsed-responses) attempts to use program-specific state parsers to return more human-readable and explicit account state data. If "jsonParsed" is requested but a parser cannot be found, the field falls back to "base64" encoding, detectable when the `data` field is type ``. - - (optional) `dataSlice: ` - limit the returned account data using the provided `offset: ` and `length: ` fields; only available for "base58", "base64" or "base64+zstd" encodings. - - (optional) `minContextSlot: ` - set the minimum slot that the request can be evaluated at. - -#### Results: - -The result will be an RpcResponse JSON object with `value` equal to an array of JSON objects, which will contain: - -- `pubkey: ` - the account Pubkey as base-58 encoded string -- `account: ` - a JSON object, with the following sub fields: - - `lamports: `, number of lamports assigned to this account, as a u64 - - `owner: `, base-58 encoded Pubkey of the program this account has been assigned to - - `data: `, Token state data associated with the account, either as encoded binary data or in JSON format `{: }` - - `executable: `, boolean indicating if the account contains a program \(and is strictly read-only\) - - `rentEpoch: `, the epoch at which this account will next owe rent, as u64 - -When the data is requested with the `jsonParsed` encoding a format similar to that of the [Token Balances Structure](jsonrpc-api.md#token-balances-structure) can be expected inside the structure, both for the `tokenAmount` and the `delegatedAmount`, with the latter being an optional object. - -#### Example: - -```bash -curl http://localhost:8899 -X POST -H "Content-Type: application/json" -d ' - { - "jsonrpc": "2.0", - "id": 1, - "method": "getTokenAccountsByDelegate", - "params": [ - "4Nd1mBQtrMJVYVfKf2PJy9NZUZdTAsp7D4xWLs4gDB4T", - { - "programId": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA" - }, - { - "encoding": "jsonParsed" - } - ] - } -' -``` - -Result: - -```json -{ - "jsonrpc": "2.0", - "result": { - "context": { - "slot": 1114 - }, - "value": [ - { - "account": { - "data": { - "program": "spl-token", - "parsed": { - "info": { - "tokenAmount": { - "amount": "1", - "decimals": 1, - "uiAmount": 0.1, - "uiAmountString": "0.1" - }, - "delegate": "4Nd1mBQtrMJVYVfKf2PJy9NZUZdTAsp7D4xWLs4gDB4T", - "delegatedAmount": { - "amount": "1", - "decimals": 1, - "uiAmount": 0.1, - "uiAmountString": "0.1" - }, - "state": "initialized", - "isNative": false, - "mint": "3wyAj7Rt1TWVPZVteFJPLa26JmLvdb1CAKEFZm3NY75E", - "owner": "CnPoSPKXu7wJqxe59Fs72tkBeALovhsCxYeFwPCQH9TD" - }, - "type": "account" - }, - "space": 165 - }, - "executable": false, - "lamports": 1726080, - "owner": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA", - "rentEpoch": 4 - }, - "pubkey": "28YTZEwqtMHWrhWcvv34se7pjS7wctgqzCPB3gReCFKp" - } - ] - }, - "id": 1 -} -``` - -### getTokenAccountsByOwner - -Returns all SPL Token accounts by token owner. - -#### Parameters: - -- `` - Pubkey of account owner to query, as base-58 encoded string -- `` - Either: - - `mint: ` - Pubkey of the specific token Mint to limit accounts to, as base-58 encoded string; or - - `programId: ` - Pubkey of the Token program that owns the accounts, as base-58 encoded string -- (optional) `` - Configuration object containing the following fields: - - (optional) `commitment: ` - [Commitment](jsonrpc-api.md#configuring-state-commitment) - - (optional) `encoding: ` - encoding for Account data, either "base58" (_slow_), "base64", "base64+zstd", or "jsonParsed". - "base58" is limited to Account data of less than 129 bytes. - "base64" will return base64 encoded data for Account data of any size. - "base64+zstd" compresses the Account data using [Zstandard](https://facebook.github.io/zstd/) and base64-encodes the result. - ["jsonParsed" encoding](jsonrpc-api.md#parsed-responses) attempts to use program-specific state parsers to return more human-readable and explicit account state data. If "jsonParsed" is requested but a parser cannot be found, the field falls back to "base64" encoding, detectable when the `data` field is type ``. - - (optional) `dataSlice: ` - limit the returned account data using the provided `offset: ` and `length: ` fields; only available for "base58", "base64" or "base64+zstd" encodings. - - (optional) `minContextSlot: ` - set the minimum slot that the request can be evaluated at. - -#### Results: - -The result will be an RpcResponse JSON object with `value` equal to an array of JSON objects, which will contain: - -- `pubkey: ` - the account Pubkey as base-58 encoded string -- `account: ` - a JSON object, with the following sub fields: - - `lamports: `, number of lamports assigned to this account, as a u64 - - `owner: `, base-58 encoded Pubkey of the program this account has been assigned to - - `data: `, Token state data associated with the account, either as encoded binary data or in JSON format `{: }` - - `executable: `, boolean indicating if the account contains a program \(and is strictly read-only\) - - `rentEpoch: `, the epoch at which this account will next owe rent, as u64 - -When the data is requested with the `jsonParsed` encoding a format similar to that of the [Token Balances Structure](jsonrpc-api.md#token-balances-structure) can be expected inside the structure, both for the `tokenAmount` and the `delegatedAmount`, with the latter being an optional object. - -#### Example: - -```bash -curl http://localhost:8899 -X POST -H "Content-Type: application/json" -d ' - { - "jsonrpc": "2.0", - "id": 1, - "method": "getTokenAccountsByOwner", - "params": [ - "4Qkev8aNZcqFNSRhQzwyLMFSsi94jHqE8WNVTJzTP99F", - { - "mint": "3wyAj7Rt1TWVPZVteFJPLa26JmLvdb1CAKEFZm3NY75E" - }, - { - "encoding": "jsonParsed" - } - ] - } -' -``` - -Result: - -```json -{ - "jsonrpc": "2.0", - "result": { - "context": { - "slot": 1114 - }, - "value": [ - { - "account": { - "data": { - "program": "spl-token", - "parsed": { - "accountType": "account", - "info": { - "tokenAmount": { - "amount": "1", - "decimals": 1, - "uiAmount": 0.1, - "uiAmountString": "0.1" - }, - "delegate": "4Nd1mBQtrMJVYVfKf2PJy9NZUZdTAsp7D4xWLs4gDB4T", - "delegatedAmount": { - "amount": "1", - "decimals": 1, - "uiAmount": 0.1, - "uiAmountString": "0.1" - }, - "state": "initialized", - "isNative": false, - "mint": "3wyAj7Rt1TWVPZVteFJPLa26JmLvdb1CAKEFZm3NY75E", - "owner": "4Qkev8aNZcqFNSRhQzwyLMFSsi94jHqE8WNVTJzTP99F" - }, - "type": "account" - }, - "space": 165 - }, - "executable": false, - "lamports": 1726080, - "owner": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA", - "rentEpoch": 4 - }, - "pubkey": "C2gJg6tKpQs41PRS1nC8aw3ZKNZK3HQQZGVrDFDup5nx" - } - ] - }, - "id": 1 -} -``` - -### getTokenLargestAccounts - -Returns the 20 largest accounts of a particular SPL Token type. - -#### Parameters: - -- `` - Pubkey of token Mint to query, as base-58 encoded string -- (optional) `` - Configuration object containing the following field: - - (optional) `commitment: ` - [Commitment](jsonrpc-api.md#configuring-state-commitment) - -#### Results: - -The result will be an RpcResponse JSON object with `value` equal to an array of JSON objects containing: - -- `address: ` - the address of the token account -- `amount: ` - the raw token account balance without decimals, a string representation of u64 -- `decimals: ` - number of base 10 digits to the right of the decimal place -- `uiAmount: ` - the token account balance, using mint-prescribed decimals **DEPRECATED** -- `uiAmountString: ` - the token account balance as a string, using mint-prescribed decimals - -#### Example: - -```bash -curl http://localhost:8899 -X POST -H "Content-Type: application/json" -d ' - {"jsonrpc":"2.0", "id":1, "method":"getTokenLargestAccounts", "params": ["3wyAj7Rt1TWVPZVteFJPLa26JmLvdb1CAKEFZm3NY75E"]} -' -``` - -Result: - -```json -{ - "jsonrpc": "2.0", - "result": { - "context": { - "slot": 1114 - }, - "value": [ - { - "address": "FYjHNoFtSQ5uijKrZFyYAxvEr87hsKXkXcxkcmkBAf4r", - "amount": "771", - "decimals": 2, - "uiAmount": 7.71, - "uiAmountString": "7.71" - }, - { - "address": "BnsywxTcaYeNUtzrPxQUvzAWxfzZe3ZLUJ4wMMuLESnu", - "amount": "229", - "decimals": 2, - "uiAmount": 2.29, - "uiAmountString": "2.29" - } - ] - }, - "id": 1 -} -``` - -### getTokenSupply - -Returns the total supply of an SPL Token type. - -#### Parameters: - -- `` - Pubkey of token Mint to query, as base-58 encoded string -- (optional) `` - Configuration object containing the following field: - - (optional) `commitment: ` - [Commitment](jsonrpc-api.md#configuring-state-commitment) - -#### Results: - -The result will be an RpcResponse JSON object with `value` equal to a JSON object containing: - -- `amount: ` - the raw total token supply without decimals, a string representation of u64 -- `decimals: ` - number of base 10 digits to the right of the decimal place -- `uiAmount: ` - the total token supply, using mint-prescribed decimals **DEPRECATED** -- `uiAmountString: ` - the total token supply as a string, using mint-prescribed decimals - -#### Example: - -```bash -curl http://localhost:8899 -X POST -H "Content-Type: application/json" -d ' - {"jsonrpc":"2.0", "id":1, "method":"getTokenSupply", "params": ["3wyAj7Rt1TWVPZVteFJPLa26JmLvdb1CAKEFZm3NY75E"]} -' -``` - -Result: - -```json -{ - "jsonrpc": "2.0", - "result": { - "context": { - "slot": 1114 - }, - "value": { - "amount": "100000", - "decimals": 2, - "uiAmount": 1000, - "uiAmountString": "1000" - } - }, - "id": 1 -} -``` - -### getTransaction - -Returns transaction details for a confirmed transaction - -#### Parameters: - -- `` - transaction signature as base-58 encoded string -- (optional) `` - Configuration object containing the following optional fields: - - (optional) `encoding: ` - encoding for each returned Transaction, either "json", "jsonParsed", "base58" (_slow_), "base64". If parameter not provided, the default encoding is "json". - ["jsonParsed" encoding](jsonrpc-api.md#parsed-responses) attempts to use program-specific instruction parsers to return more human-readable and explicit data in the `transaction.message.instructions` list. If "jsonParsed" is requested but a parser cannot be found, the instruction falls back to regular JSON encoding (`accounts`, `data`, and `programIdIndex` fields). - - (optional) `commitment: ` - [Commitment](jsonrpc-api.md#configuring-state-commitment); "processed" is not supported. If parameter not provided, the default is "finalized". - - (optional) `maxSupportedTransactionVersion: ` - set the max transaction version to return in responses. If the requested transaction is a higher version, an error will be returned. If this parameter is omitted, only legacy transactions will be returned, and any versioned transaction will prompt the error. - -#### Results: - -- `` - if transaction is not found or not confirmed -- `` - if transaction is confirmed, an object with the following fields: - - `slot: ` - the slot this transaction was processed in - - `transaction: ` - [Transaction](#transaction-structure) object, either in JSON format or encoded binary data, depending on encoding parameter - - `blockTime: ` - estimated production time, as Unix timestamp (seconds since the Unix epoch) of when the transaction was processed. null if not available - - `meta: ` - transaction status metadata object: - - `err: ` - Error if transaction failed, null if transaction succeeded. [TransactionError definitions](https://docs.rs/solana-sdk/VERSION_FOR_DOCS_RS/solana_sdk/transaction/enum.TransactionError.html) - - `fee: ` - fee this transaction was charged, as u64 integer - - `preBalances: ` - array of u64 account balances from before the transaction was processed - - `postBalances: ` - array of u64 account balances after the transaction was processed - - `innerInstructions: ` - List of [inner instructions](#inner-instructions-structure) or `null` if inner instruction recording was not enabled during this transaction - - `preTokenBalances: ` - List of [token balances](#token-balances-structure) from before the transaction was processed or omitted if token balance recording was not yet enabled during this transaction - - `postTokenBalances: ` - List of [token balances](#token-balances-structure) from after the transaction was processed or omitted if token balance recording was not yet enabled during this transaction - - `logMessages: ` - array of string log messages or `null` if log message recording was not enabled during this transaction - - DEPRECATED: `status: ` - Transaction status - - `"Ok": ` - Transaction was successful - - `"Err": ` - Transaction failed with TransactionError - - `rewards: ` - transaction-level rewards, populated if rewards are requested; an array of JSON objects containing: - - `pubkey: ` - The public key, as base-58 encoded string, of the account that received the reward - - `lamports: `- number of reward lamports credited or debited by the account, as a i64 - - `postBalance: ` - account balance in lamports after the reward was applied - - `rewardType: ` - type of reward: currently only "rent", other types may be added in the future - - `commission: ` - vote account commission when the reward was credited, only present for voting and staking rewards - - `loadedAddresses: ` - Transaction addresses loaded from address lookup tables. Undefined if `maxSupportedTransactionVersion` is not set in request params. - - `writable: ` - Ordered list of base-58 encoded addresses for writable loaded accounts - - `readonly: ` - Ordered list of base-58 encoded addresses for readonly loaded accounts - - `returnData: ` - the most-recent return data generated by an instruction in the transaction, with the following fields: - - `programId: `, the program that generated the return data, as base-58 encoded Pubkey - - `data: <[string, encoding]>`, the return data itself, as base-64 encoded binary data - - `computeUnitsConsumed: `, number of [compute units](developing/programming-model/runtime.md#compute-budget) consumed by the transaction - - `version: <"legacy"|number|undefined>` - Transaction version. Undefined if `maxSupportedTransactionVersion` is not set in request params. - -#### Example: - -Request: - -```bash -curl http://localhost:8899 -X POST -H "Content-Type: application/json" -d ' - { - "jsonrpc": "2.0", - "id": 1, - "method": "getTransaction", - "params": [ - "2nBhEBYYvfaAe16UMNqRHre4YNSskvuYgx3M6E4JP1oDYvZEJHvoPzyUidNgNX5r9sTyN1J9UxtbCXy2rqYcuyuv", - "json" - ] - } -' -``` - -Result: - -```json -{ - "jsonrpc": "2.0", - "result": { - "meta": { - "err": null, - "fee": 5000, - "innerInstructions": [], - "postBalances": [499998932500, 26858640, 1, 1, 1], - "postTokenBalances": [], - "preBalances": [499998937500, 26858640, 1, 1, 1], - "preTokenBalances": [], - "rewards": [], - "status": { - "Ok": null - } - }, - "slot": 430, - "transaction": { - "message": { - "accountKeys": [ - "3UVYmECPPMZSCqWKfENfuoTv51fTDTWicX9xmBD2euKe", - "AjozzgE83A3x1sHNUR64hfH7zaEBWeMaFuAN9kQgujrc", - "SysvarS1otHashes111111111111111111111111111", - "SysvarC1ock11111111111111111111111111111111", - "Vote111111111111111111111111111111111111111" - ], - "header": { - "numReadonlySignedAccounts": 0, - "numReadonlyUnsignedAccounts": 3, - "numRequiredSignatures": 1 - }, - "instructions": [ - { - "accounts": [1, 2, 3, 0], - "data": "37u9WtQpcm6ULa3WRQHmj49EPs4if7o9f1jSRVZpm2dvihR9C8jY4NqEwXUbLwx15HBSNcP1", - "programIdIndex": 4 - } - ], - "recentBlockhash": "mfcyqEXB3DnHXki6KjjmZck6YjmZLvpAByy2fj4nh6B" - }, - "signatures": [ - "2nBhEBYYvfaAe16UMNqRHre4YNSskvuYgx3M6E4JP1oDYvZEJHvoPzyUidNgNX5r9sTyN1J9UxtbCXy2rqYcuyuv" - ] - } - }, - "blockTime": null, - "id": 1 -} -``` - -#### Example: - -Request: - -```bash -curl http://localhost:8899 -X POST -H "Content-Type: application/json" -d ' - { - "jsonrpc": "2.0", - "id": 1, - "method": "getTransaction", - "params": [ - "2nBhEBYYvfaAe16UMNqRHre4YNSskvuYgx3M6E4JP1oDYvZEJHvoPzyUidNgNX5r9sTyN1J9UxtbCXy2rqYcuyuv", - "base64" - ] - } -' -``` - -Result: - -```json -{ - "jsonrpc": "2.0", - "result": { - "meta": { - "err": null, - "fee": 5000, - "innerInstructions": [], - "postBalances": [499998932500, 26858640, 1, 1, 1], - "postTokenBalances": [], - "preBalances": [499998937500, 26858640, 1, 1, 1], - "preTokenBalances": [], - "rewards": null, - "status": { - "Ok": null - } - }, - "slot": 430, - "transaction": [ - "AVj7dxHlQ9IrvdYVIjuiRFs1jLaDMHixgrv+qtHBwz51L4/ImLZhszwiyEJDIp7xeBSpm/TX5B7mYzxa+fPOMw0BAAMFJMJVqLw+hJYheizSoYlLm53KzgT82cDVmazarqQKG2GQsLgiqktA+a+FDR4/7xnDX7rsusMwryYVUdixfz1B1Qan1RcZLwqvxvJl4/t3zHragsUp0L47E24tAFUgAAAABqfVFxjHdMkoVmOYaR1etoteuKObS21cc1VbIQAAAAAHYUgdNXR0u3xNdiTr072z2DVec9EQQ/wNo1OAAAAAAAtxOUhPBp2WSjUNJEgfvy70BbxI00fZyEPvFHNfxrtEAQQEAQIDADUCAAAAAQAAAAAAAACtAQAAAAAAAAdUE18R96XTJCe+YfRfUp6WP+YKCy/72ucOL8AoBFSpAA==", - "base64" - ] - }, - "id": 1 -} -``` - -### getTransactionCount - -Returns the current Transaction count from the ledger - -#### Parameters: - -- (optional) `` - Configuration object containing the following fields: - - (optional) `commitment: ` - [Commitment](jsonrpc-api.md#configuring-state-commitment) - - (optional) `minContextSlot: ` - set the minimum slot that the request can be evaluated at. - -#### Results: - -- `` - count - -#### Example: - -```bash -curl http://localhost:8899 -X POST -H "Content-Type: application/json" -d ' - {"jsonrpc":"2.0","id":1, "method":"getTransactionCount"} -' - -``` - -Result: - -```json -{ "jsonrpc": "2.0", "result": 268, "id": 1 } -``` - -### getVersion - -Returns the current solana versions running on the node - -#### Parameters: - -None - -#### Results: - -The result field will be a JSON object with the following fields: - -- `solana-core`, software version of solana-core -- `feature-set`, unique identifier of the current software's feature set - -#### Example: - -Request: - -```bash -curl http://localhost:8899 -X POST -H "Content-Type: application/json" -d ' - {"jsonrpc":"2.0","id":1, "method":"getVersion"} -' -``` - -Result: - -```json -{ "jsonrpc": "2.0", "result": { "solana-core": "1.14.3" }, "id": 1 } -``` - -### getVoteAccounts - -Returns the account info and associated stake for all the voting accounts in the current bank. - -#### Parameters: - -- (optional) `` - Configuration object containing the following field: - - (optional) `commitment: ` - [Commitment](jsonrpc-api.md#configuring-state-commitment) - - (optional) `votePubkey: ` - Only return results for this validator vote address (base-58 encoded) - - (optional) `keepUnstakedDelinquents: ` - Do not filter out delinquent validators with no stake - - (optional) `delinquentSlotDistance: ` - Specify the number of slots behind the tip that a validator must fall to be considered delinquent. **NOTE:** For the sake of consistency between ecosystem products, _it is **not** recommended that this argument be specified._ - -#### Results: - -The result field will be a JSON object of `current` and `delinquent` accounts, -each containing an array of JSON objects with the following sub fields: - -- `votePubkey: ` - Vote account address, as base-58 encoded string -- `nodePubkey: ` - Validator identity, as base-58 encoded string -- `activatedStake: ` - the stake, in lamports, delegated to this vote account and active in this epoch -- `epochVoteAccount: ` - bool, whether the vote account is staked for this epoch -- `commission: `, percentage (0-100) of rewards payout owed to the vote account -- `lastVote: ` - Most recent slot voted on by this vote account -- `epochCredits: ` - History of how many credits earned by the end of each epoch, as an array of arrays containing: `[epoch, credits, previousCredits]` - -#### Example: - -Request: - -```bash -curl http://localhost:8899 -X POST -H "Content-Type: application/json" -d ' - {"jsonrpc":"2.0","id":1, "method":"getVoteAccounts"} -' -``` - -Result: - -```json -{ - "jsonrpc": "2.0", - "result": { - "current": [ - { - "commission": 0, - "epochVoteAccount": true, - "epochCredits": [ - [1, 64, 0], - [2, 192, 64] - ], - "nodePubkey": "B97CCUW3AEZFGy6uUg6zUdnNYvnVq5VG8PUtb2HayTDD", - "lastVote": 147, - "activatedStake": 42, - "votePubkey": "3ZT31jkAGhUaw8jsy4bTknwBMP8i4Eueh52By4zXcsVw" - } - ], - "delinquent": [ - { - "commission": 127, - "epochVoteAccount": false, - "epochCredits": [], - "nodePubkey": "6ZPxeQaDo4bkZLRsdNrCzchNQr5LN9QMc9sipXv9Kw8f", - "lastVote": 0, - "activatedStake": 0, - "votePubkey": "CmgCk4aMS7KW1SHX3s9K5tBJ6Yng2LBaC8MFov4wx9sm" - } - ] - }, - "id": 1 -} -``` - -#### Example: Restrict results to a single validator vote account - -Request: - -```bash -curl http://localhost:8899 -X POST -H "Content-Type: application/json" -d ' - { - "jsonrpc": "2.0", - "id": 1, - "method": "getVoteAccounts", - "params": [ - { - "votePubkey": "3ZT31jkAGhUaw8jsy4bTknwBMP8i4Eueh52By4zXcsVw" - } - ] - } -' -``` - -Result: - -```json -{ - "jsonrpc": "2.0", - "result": { - "current": [ - { - "commission": 0, - "epochVoteAccount": true, - "epochCredits": [ - [1, 64, 0], - [2, 192, 64] - ], - "nodePubkey": "B97CCUW3AEZFGy6uUg6zUdnNYvnVq5VG8PUtb2HayTDD", - "lastVote": 147, - "activatedStake": 42, - "votePubkey": "3ZT31jkAGhUaw8jsy4bTknwBMP8i4Eueh52By4zXcsVw" - } - ], - "delinquent": [] - }, - "id": 1 -} -``` - -### isBlockhashValid - -**NEW: This method is only available in solana-core v1.9 or newer. Please use -[getFeeCalculatorForBlockhash](jsonrpc-api.md#getfeecalculatorforblockhash) for solana-core v1.8** - -Returns whether a blockhash is still valid or not - -#### Parameters: - -- `blockhash: ` - the blockhash of this block, as base-58 encoded string -- (optional) `` - Configuration object containing the following fields: - - (optional) `commitment: ` - [Commitment](jsonrpc-api.md#configuring-state-commitment) (used for retrieving blockhash) - - (optional) `minContextSlot: ` - set the minimum slot that the request can be evaluated at. - -#### Results: - -- `` - True if the blockhash is still valid - -#### Example: - -Request: - -```bash -curl http://localhost:8899 -X POST -H "Content-Type: application/json" -d ' - { - "id":45, - "jsonrpc":"2.0", - "method":"isBlockhashValid", - "params":[ - "J7rBdM6AecPDEZp8aPq5iPSNKVkU5Q76F3oAV4eW5wsW", - {"commitment":"processed"} - ] - } -' -``` - -Result: - -```json -{ - "jsonrpc": "2.0", - "result": { - "context": { - "slot": 2483 - }, - "value": false - }, - "id": 1 -} -``` - -### minimumLedgerSlot - -Returns the lowest slot that the node has information about in its ledger. This -value may increase over time if the node is configured to purge older ledger data - -#### Parameters: - -None - -#### Results: - -- `u64` - Minimum ledger slot - -#### Example: - -```bash -curl http://localhost:8899 -X POST -H "Content-Type: application/json" -d ' - {"jsonrpc":"2.0","id":1, "method":"minimumLedgerSlot"} -' - -``` - -Result: - -```json -{ "jsonrpc": "2.0", "result": 1234, "id": 1 } -``` - -### requestAirdrop - -Requests an airdrop of lamports to a Pubkey - -#### Parameters: - -- `` - Pubkey of account to receive lamports, as base-58 encoded string -- `` - lamports, as a u64 -- (optional) `` - Configuration object containing the following field: - - (optional) `commitment: ` - [Commitment](jsonrpc-api.md#configuring-state-commitment) (used for retrieving blockhash and verifying airdrop success) - -#### Results: - -- `` - Transaction Signature of airdrop, as base-58 encoded string - -#### Example: - -```bash -curl http://localhost:8899 -X POST -H "Content-Type: application/json" -d ' - {"jsonrpc":"2.0","id":1, "method":"requestAirdrop", "params":["83astBRguLMdt2h5U1Tpdq5tjFoJ6noeGwaY3mDLVcri", 1000000000]} -' - -``` - -Result: - -```json -{ - "jsonrpc": "2.0", - "result": "5VERv8NMvzbJMEkV8xnrLkEaWRtSz9CosKDYjCJjBRnbJLgp8uirBgmQpjKhoR4tjF3ZpRzrFmBV6UjKdiSZkQUW", - "id": 1 -} -``` - -### sendTransaction - -Submits a signed transaction to the cluster for processing. - -This method does not alter the transaction in any way; it relays the -transaction created by clients to the node as-is. - -If the node's rpc service receives the transaction, this method immediately -succeeds, without waiting for any confirmations. A successful response from -this method does not guarantee the transaction is processed or confirmed by the -cluster. - -While the rpc service will reasonably retry to submit it, the transaction -could be rejected if transaction's `recent_blockhash` expires before it lands. - -Use [`getSignatureStatuses`](jsonrpc-api.md#getsignaturestatuses) to ensure -a transaction is processed and confirmed. - -Before submitting, the following preflight checks are performed: - -1. The transaction signatures are verified -2. The transaction is simulated against the bank slot specified by the preflight - commitment. On failure an error will be returned. Preflight checks may be - disabled if desired. It is recommended to specify the same commitment and - preflight commitment to avoid confusing behavior. - -The returned signature is the first signature in the transaction, which -is used to identify the transaction ([transaction id](../../terminology.md#transaction-id)). -This identifier can be easily extracted from the transaction data before -submission. - -#### Parameters: - -- `` - fully-signed Transaction, as encoded string -- (optional) `` - Configuration object containing the following field: - - `skipPreflight: ` - if true, skip the preflight transaction checks (default: false) - - (optional) `preflightCommitment: ` - [Commitment](jsonrpc-api.md#configuring-state-commitment) level to use for preflight (default: `"finalized"`). - - (optional) `encoding: ` - Encoding used for the transaction data. Either `"base58"` (_slow_, **DEPRECATED**), or `"base64"`. (default: `"base58"`). - - (optional) `maxRetries: ` - Maximum number of times for the RPC node to retry sending the transaction to the leader. - If this parameter not provided, the RPC node will retry the transaction until it is finalized or until the blockhash expires. - - (optional) `minContextSlot: ` - set the minimum slot at which to perform preflight transaction checks. - -#### Results: - -- `` - First Transaction Signature embedded in the transaction, as base-58 encoded string ([transaction id](../../terminology.md#transaction-id)) - -#### Example: - -```bash -curl http://localhost:8899 -X POST -H "Content-Type: application/json" -d ' - { - "jsonrpc": "2.0", - "id": 1, - "method": "sendTransaction", - "params": [ - "4hXTCkRzt9WyecNzV1XPgCDfGAZzQKNxLXgynz5QDuWWPSAZBZSHptvWRL3BjCvzUXRdKvHL2b7yGrRQcWyaqsaBCncVG7BFggS8w9snUts67BSh3EqKpXLUm5UMHfD7ZBe9GhARjbNQMLJ1QD3Spr6oMTBU6EhdB4RD8CP2xUxr2u3d6fos36PD98XS6oX8TQjLpsMwncs5DAMiD4nNnR8NBfyghGCWvCVifVwvA8B8TJxE1aiyiv2L429BCWfyzAme5sZW8rDb14NeCQHhZbtNqfXhcp2tAnaAT" - ] - } -' - -``` - -Result: - -```json -{ - "jsonrpc": "2.0", - "result": "2id3YC2jK9G5Wo2phDx4gJVAew8DcY5NAojnVuao8rkxwPYPe8cSwE5GzhEgJA2y8fVjDEo6iR6ykBvDxrTQrtpb", - "id": 1 -} -``` - -### simulateTransaction - -Simulate sending a transaction - -#### Parameters: - -- `` - Transaction, as an encoded string. The transaction must have a valid blockhash, but is not required to be signed. -- (optional) `` - Configuration object containing the following fields: - - `sigVerify: ` - if true the transaction signatures will be verified (default: false, conflicts with `replaceRecentBlockhash`) - - (optional) `commitment: ` - [Commitment](jsonrpc-api.md#configuring-state-commitment) level to simulate the transaction at (default: `"finalized"`). - - (optional) `encoding: ` - Encoding used for the transaction data. Either `"base58"` (_slow_, **DEPRECATED**), or `"base64"`. (default: `"base58"`). - - (optional) `replaceRecentBlockhash: ` - if true the transaction recent blockhash will be replaced with the most recent blockhash. - (default: false, conflicts with `sigVerify`) - - (optional) `accounts: ` - Accounts configuration object containing the following fields: - - (optional) `encoding: ` - encoding for returned Account data, either "base64" (default), "base64+zstd" or "jsonParsed". - ["jsonParsed" encoding](jsonrpc-api.md#parsed-responses) attempts to use program-specific state parsers to return more human-readable and explicit account state data. If "jsonParsed" is requested but a parser cannot be found, the field falls back to binary encoding, detectable when the `data` field is type ``. - - `addresses: ` - An array of accounts to return, as base-58 encoded strings - - (optional) `minContextSlot: ` - set the minimum slot that the request can be evaluated at. - -#### Results: - -An RpcResponse containing a TransactionStatus object -The result will be an RpcResponse JSON object with `value` set to a JSON object with the following fields: - -- `err: ` - Error if transaction failed, null if transaction succeeded. [TransactionError definitions](https://github.com/solana-labs/solana/blob/c0c60386544ec9a9ec7119229f37386d9f070523/sdk/src/transaction/error.rs#L13) -- `logs: ` - Array of log messages the transaction instructions output during execution, null if simulation failed before the transaction was able to execute (for example due to an invalid blockhash or signature verification failure) -- `accounts: ` - array of accounts with the same length as the `accounts.addresses` array in the request - - `` - if the account doesn't exist or if `err` is not null - - `` - otherwise, a JSON object containing: - - `lamports: `, number of lamports assigned to this account, as a u64 - - `owner: `, base-58 encoded Pubkey of the program this account has been assigned to - - `data: <[string, encoding]|object>`, data associated with the account, either as encoded binary data or JSON format `{: }`, depending on encoding parameter - - `executable: `, boolean indicating if the account contains a program \(and is strictly read-only\) - - `rentEpoch: `, the epoch at which this account will next owe rent, as u64 -- `unitsConsumed: `, The number of compute budget units consumed during the processing of this transaction -- `returnData: ` - the most-recent return data generated by an instruction in the transaction, with the following fields: - - `programId: `, the program that generated the return data, as base-58 encoded Pubkey - - `data: <[string, encoding]>`, the return data itself, as base-64 encoded binary data - -#### Example: - -```bash -curl http://localhost:8899 -X POST -H "Content-Type: application/json" -d ' - { - "jsonrpc": "2.0", - "id": 1, - "method": "simulateTransaction", - "params": [ - "AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAEDArczbMia1tLmq7zz4DinMNN0pJ1JtLdqIJPUw3YrGCzYAMHBsgN27lcgB6H2WQvFgyZuJYHa46puOQo9yQ8CVQbd9uHXZaGT2cvhRs7reawctIXtX1s3kTqM9YV+/wCp20C7Wj2aiuk5TReAXo+VTVg8QTHjs0UjNMMKCvpzZ+ABAgEBARU=", - { - "encoding":"base64", - } - ] - } -' -``` - -Result: - -```json -{ - "jsonrpc": "2.0", - "result": { - "context": { - "slot": 218 - }, - "value": { - "err": null, - "accounts": null, - "logs": [ - "Program 83astBRguLMdt2h5U1Tpdq5tjFoJ6noeGwaY3mDLVcri invoke [1]", - "Program 83astBRguLMdt2h5U1Tpdq5tjFoJ6noeGwaY3mDLVcri consumed 2366 of 1400000 compute units", - "Program return: 83astBRguLMdt2h5U1Tpdq5tjFoJ6noeGwaY3mDLVcri KgAAAAAAAAA=", - "Program 83astBRguLMdt2h5U1Tpdq5tjFoJ6noeGwaY3mDLVcri success" - ], - "returnData": { - "data": [ - "Kg==", - "base64" - ], - "programId": "83astBRguLMdt2h5U1Tpdq5tjFoJ6noeGwaY3mDLVcri" - }, - "unitsConsumed": 2366 - } - }, - "id": 1 -} -``` - -## Subscription Websocket - -After connecting to the RPC PubSub websocket at `ws://
    /`: - -- Submit subscription requests to the websocket using the methods below -- Multiple subscriptions may be active at once -- Many subscriptions take the optional [`commitment` parameter](jsonrpc-api.md#configuring-state-commitment), defining how finalized a change should be to trigger a notification. For subscriptions, if commitment is unspecified, the default value is `"finalized"`. - -### accountSubscribe - -Subscribe to an account to receive notifications when the lamports or data for a given account public key changes - -#### Parameters: - -- `` - account Pubkey, as base-58 encoded string -- (optional) `` - Configuration object containing the following optional fields: - - (optional) `commitment: ` - [Commitment](jsonrpc-api.md#configuring-state-commitment) - - `encoding: ` - encoding for Account data, either "base58" (_slow_), "base64", "base64+zstd" or "jsonParsed". - ["jsonParsed" encoding](jsonrpc-api.md#parsed-responses) attempts to use program-specific state parsers to return more human-readable and explicit account state data. If "jsonParsed" is requested but a parser cannot be found, the field falls back to binary encoding, detectable when the `data` field is type ``. - -#### Results: - -- `` - Subscription id \(needed to unsubscribe\) - -#### Example: - -Request: - -```json -{ - "jsonrpc": "2.0", - "id": 1, - "method": "accountSubscribe", - "params": [ - "CM78CPUeXjn8o3yroDHxUtKsZZgoy4GPkPPXfouKNH12", - { - "encoding": "base64", - "commitment": "finalized" - } - ] -} -{ - "jsonrpc": "2.0", - "id": 1, - "method": "accountSubscribe", - "params": [ - "CM78CPUeXjn8o3yroDHxUtKsZZgoy4GPkPPXfouKNH12", - { - "encoding": "jsonParsed" - } - ] -} -``` - -Result: - -```json -{ "jsonrpc": "2.0", "result": 23784, "id": 1 } -``` - -#### Notification Format: - -The notification format is the same as seen in the [getAccountInfo](jsonrpc-api.md#getAccountInfo) RPC HTTP method. - -Base58 encoding: - -```json -{ - "jsonrpc": "2.0", - "method": "accountNotification", - "params": { - "result": { - "context": { - "slot": 5199307 - }, - "value": { - "data": [ - "11116bv5nS2h3y12kD1yUKeMZvGcKLSjQgX6BeV7u1FrjeJcKfsHPXHRDEHrBesJhZyqnnq9qJeUuF7WHxiuLuL5twc38w2TXNLxnDbjmuR", - "base58" - ], - "executable": false, - "lamports": 33594, - "owner": "11111111111111111111111111111111", - "rentEpoch": 635 - } - }, - "subscription": 23784 - } -} -``` - -Parsed-JSON encoding: - -```json -{ - "jsonrpc": "2.0", - "method": "accountNotification", - "params": { - "result": { - "context": { - "slot": 5199307 - }, - "value": { - "data": { - "program": "nonce", - "parsed": { - "type": "initialized", - "info": { - "authority": "Bbqg1M4YVVfbhEzwA9SpC9FhsaG83YMTYoR4a8oTDLX", - "blockhash": "LUaQTmM7WbMRiATdMMHaRGakPtCkc2GHtH57STKXs6k", - "feeCalculator": { - "lamportsPerSignature": 5000 - } - } - } - }, - "executable": false, - "lamports": 33594, - "owner": "11111111111111111111111111111111", - "rentEpoch": 635 - } - }, - "subscription": 23784 - } -} -``` - -### accountUnsubscribe - -Unsubscribe from account change notifications - -#### Parameters: - -- `` - id of account Subscription to cancel - -#### Results: - -- `` - unsubscribe success message - -#### Example: - -Request: - -```json -{ "jsonrpc": "2.0", "id": 1, "method": "accountUnsubscribe", "params": [0] } -``` - -Result: - -```json -{ "jsonrpc": "2.0", "result": true, "id": 1 } -``` - -### blockSubscribe - Unstable, disabled by default - -**This subscription is unstable and only available if the validator was started -with the `--rpc-pubsub-enable-block-subscription` flag. The format of this -subscription may change in the future** - -Subscribe to receive notification anytime a new block is Confirmed or Finalized. - -#### Parameters: - -- `filter: |` - filter criteria for the logs to receive results by account type; currently supported: - - "all" - include all transactions in block - - `{ "mentionsAccountOrProgram": }` - return only transactions that mention the provided public key (as base-58 encoded string). If no mentions in a given block, then no notification will be sent. -- (optional) `` - Configuration object containing the following optional fields: - - (optional) `commitment: ` - [Commitment](jsonrpc-api.md#configuring-state-commitment) - - (optional) `encoding: ` - encoding for Account data, either "base58" (_slow_), "base64", "base64+zstd" or "jsonParsed". - ["jsonParsed" encoding](jsonrpc-api.md#parsed-responses) attempts to use program-specific state parsers to return more human-readable and explicit account state data. If "jsonParsed" is requested but a parser cannot be found, the field falls back to base64 encoding, detectable when the `data` field is type ``. Default is "base64". - - (optional) `transactionDetails: ` - level of transaction detail to return, either "full", "signatures", or "none". If parameter not provided, the default detail level is "full". - - (optional) `showRewards: bool` - whether to populate the `rewards` array. If parameter not provided, the default includes rewards. - -#### Results: - -- `integer` - subscription id \(needed to unsubscribe\) - -#### Example: - -Request: - -```json -{ "jsonrpc": "2.0", "id": "1", "method": "blockSubscribe", "params": ["all"] } -``` - -```json -{ - "jsonrpc": "2.0", - "id": "1", - "method": "blockSubscribe", - "params": [ - { - "mentionsAccountOrProgram": "LieKvPRE8XeX3Y2xVNHjKlpAScD12lYySBVQ4HqoJ5op" - }, - { - "commitment": "confirmed", - "encoding": "base64", - "showRewards": true, - "transactionDetails": "full" - } - ] -} -``` - -Result: - -```json -{ "jsonrpc": "2.0", "result": 0, "id": 1 } -``` - -#### Notification Format: - -The notification will be an object with the following fields: - --`slot: ` - The corresponding slot. - -- `err: ` - Error if something went wrong publishing the notification otherwise null. -- `block: ` - A block object as seen in the [getBlock](jsonrpc-api.md#getblock) RPC HTTP method. - -```json -{ - "jsonrpc": "2.0", - "method": "blockNotification", - "params": { - "result": { - "context": { - "slot": 112301554 - }, - "value": { - "slot": 112301554, - "block": { - "previousBlockhash": "GJp125YAN4ufCSUvZJVdCyWQJ7RPWMmwxoyUQySydZA", - "blockhash": "6ojMHjctdqfB55JDpEpqfHnP96fiaHEcvzEQ2NNcxzHP", - "parentSlot": 112301553, - "transactions": [ - { - "transaction": [ - "OpltwoUvWxYi1P2U8vbIdE/aPntjYo5Aa0VQ2JJyeJE2g9Vvxk8dDGgFMruYfDu8/IfUWb0REppTe7IpAuuLRgIBAAkWnj4KHRpEWWW7gvO1c0BHy06wZi2g7/DLqpEtkRsThAXIdBbhXCLvltw50ZnjDx2hzw74NVn49kmpYj2VZHQJoeJoYJqaKcvuxCi/2i4yywedcVNDWkM84Iuw+cEn9/ROCrXY4qBFI9dveEERQ1c4kdU46xjxj9Vi+QXkb2Kx45QFVkG4Y7HHsoS6WNUiw2m4ffnMNnOVdF9tJht7oeuEfDMuUEaO7l9JeUxppCvrGk3CP45saO51gkwVYEgKzhpKjCx3rgsYxNR81fY4hnUQXSbbc2Y55FkwgRBpVvQK7/+clR4Gjhd3L4y+OtPl7QF93Akg1LaU9wRMs5nvfDFlggqI9PqJl+IvVWrNRdBbPS8LIIhcwbRTkSbqlJQWxYg3Bo2CTVbw7rt1ZubuHWWp0mD/UJpLXGm2JprWTePNULzHu67sfqaWF99LwmwjTyYEkqkRt1T0Je5VzHgJs0N5jY4iIU9K3lMqvrKOIn/2zEMZ+ol2gdgjshx+sphIyhw65F3J/Dbzk04LLkK+CULmN571Y+hFlXF2ke0BIuUG6AUF+4214Cu7FXnqo3rkxEHDZAk0lRrAJ8X/Z+iwuwI5cgbd9uHXZaGT2cvhRs7reawctIXtX1s3kTqM9YV+/wCpDLAp8axcEkaQkLDKRoWxqp8XLNZSKial7Rk+ELAVVKWoWLRXRZ+OIggu0OzMExvVLE5VHqy71FNHq4gGitkiKYNFWSLIE4qGfdFLZXy/6hwS+wq9ewjikCpd//C9BcCL7Wl0iQdUslxNVCBZHnCoPYih9JXvGefOb9WWnjGy14sG9j70+RSVx6BlkFELWwFvIlWR/tHn3EhHAuL0inS2pwX7ZQTAU6gDVaoqbR2EiJ47cKoPycBNvHLoKxoY9AZaBjPl6q8SKQJSFyFd9n44opAgI6zMTjYF/8Ok4VpXEESp3QaoUyTI9sOJ6oFP6f4dwnvQelgXS+AEfAsHsKXxGAIUDQENAgMEBQAGBwgIDg8IBJCER3QXl1AVDBADCQoOAAQLERITDAjb7ugh3gOuTy==", - "base64" - ], - "meta": { - "err": null, - "status": { - "Ok": null - }, - "fee": 5000, - "preBalances": [ - 1758510880, 2067120, 1566000, 1461600, 2039280, 2039280, - 1900080, 1865280, 0, 3680844220, 2039280 - ], - "postBalances": [ - 1758505880, 2067120, 1566000, 1461600, 2039280, 2039280, - 1900080, 1865280, 0, 3680844220, 2039280 - ], - "innerInstructions": [ - { - "index": 0, - "instructions": [ - { - "programIdIndex": 13, - "accounts": [1, 15, 3, 4, 2, 14], - "data": "21TeLgZXNbtHXVBzCaiRmH" - }, - { - "programIdIndex": 14, - "accounts": [3, 4, 1], - "data": "6qfC8ic7Aq99" - }, - { - "programIdIndex": 13, - "accounts": [1, 15, 3, 5, 2, 14], - "data": "21TeLgZXNbsn4QEpaSEr3q" - }, - { - "programIdIndex": 14, - "accounts": [3, 5, 1], - "data": "6LC7BYyxhFRh" - } - ] - }, - { - "index": 1, - "instructions": [ - { - "programIdIndex": 14, - "accounts": [4, 3, 0], - "data": "7aUiLHFjSVdZ" - }, - { - "programIdIndex": 19, - "accounts": [17, 18, 16, 9, 11, 12, 14], - "data": "8kvZyjATKQWYxaKR1qD53V" - }, - { - "programIdIndex": 14, - "accounts": [9, 11, 18], - "data": "6qfC8ic7Aq99" - } - ] - } - ], - "logMessages": [ - "Program QMNeHCGYnLVDn1icRAfQZpjPLBNkfGbSKRB83G5d8KB invoke [1]", - "Program QMWoBmAyJLAsA1Lh9ugMTw2gciTihncciphzdNzdZYV invoke [2]" - ], - "preTokenBalances": [ - { - "accountIndex": 4, - "mint": "iouQcQBAiEXe6cKLS85zmZxUqaCqBdeHFpqKoSz615u", - "uiTokenAmount": { - "uiAmount": null, - "decimals": 6, - "amount": "0", - "uiAmountString": "0" - }, - "owner": "LieKvPRE8XeX3Y2xVNHjKlpAScD12lYySBVQ4HqoJ5op", - "programId": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA" - }, - { - "accountIndex": 5, - "mint": "iouQcQBAiEXe6cKLS85zmZxUqaCqBdeHFpqKoSz615u", - "uiTokenAmount": { - "uiAmount": 11513.0679, - "decimals": 6, - "amount": "11513067900", - "uiAmountString": "11513.0679" - }, - "owner": "rXhAofQCT7NN9TUqigyEAUzV1uLL4boeD8CRkNBSkYk", - "programId": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA" - }, - { - "accountIndex": 10, - "mint": "Saber2gLauYim4Mvftnrasomsv6NvAuncvMEZwcLpD1", - "uiTokenAmount": { - "uiAmount": null, - "decimals": 6, - "amount": "0", - "uiAmountString": "0" - }, - "owner": "CL9wkGFT3SZRRNa9dgaovuRV7jrVVigBUZ6DjcgySsCU", - "programId": "TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb" - }, - { - "accountIndex": 11, - "mint": "Saber2gLauYim4Mvftnrasomsv6NvAuncvMEZwcLpD1", - "uiTokenAmount": { - "uiAmount": 15138.514093, - "decimals": 6, - "amount": "15138514093", - "uiAmountString": "15138.514093" - }, - "owner": "LieKvPRE8XeX3Y2xVNHjKlpAScD12lYySBVQ4HqoJ5op", - "programId": "TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb" - } - ], - "postTokenBalances": [ - { - "accountIndex": 4, - "mint": "iouQcQBAiEXe6cKLS85zmZxUqaCqBdeHFpqKoSz615u", - "uiTokenAmount": { - "uiAmount": null, - "decimals": 6, - "amount": "0", - "uiAmountString": "0" - }, - "owner": "LieKvPRE8XeX3Y2xVNHjKlpAScD12lYySBVQ4HqoJ5op", - "programId": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA" - }, - { - "accountIndex": 5, - "mint": "iouQcQBAiEXe6cKLS85zmZxUqaCqBdeHFpqKoSz615u", - "uiTokenAmount": { - "uiAmount": 11513.103028, - "decimals": 6, - "amount": "11513103028", - "uiAmountString": "11513.103028" - }, - "owner": "rXhAofQCT7NN9TUqigyEAUzV1uLL4boeD8CRkNBSkYk", - "programId": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA" - }, - { - "accountIndex": 10, - "mint": "Saber2gLauYim4Mvftnrasomsv6NvAuncvMEZwcLpD1", - "uiTokenAmount": { - "uiAmount": null, - "decimals": 6, - "amount": "0", - "uiAmountString": "0" - }, - "owner": "CL9wkGFT3SZRRNa9dgaovuRV7jrVVigBUZ6DjcgySsCU", - "programId": "TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb" - }, - { - "accountIndex": 11, - "mint": "Saber2gLauYim4Mvftnrasomsv6NvAuncvMEZwcLpD1", - "uiTokenAmount": { - "uiAmount": 15489.767829, - "decimals": 6, - "amount": "15489767829", - "uiAmountString": "15489.767829" - }, - "owner": "BeiHVPRE8XeX3Y2xVNrSsTpAScH94nYySBVQ4HqgN9at", - "programId": "TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb" - } - ], - "rewards": [] - } - } - ], - "blockTime": 1639926816, - "blockHeight": 101210751 - }, - "err": null - } - }, - "subscription": 14 - } -} -``` - -### blockUnsubscribe - -Unsubscribe from block notifications - -#### Parameters: - -- `` - subscription id to cancel - -#### Results: - -- `` - unsubscribe success message - -#### Example: - -Request: - -```json -{ "jsonrpc": "2.0", "id": 1, "method": "blockUnsubscribe", "params": [0] } -``` - -Response: - -```json -{ "jsonrpc": "2.0", "result": true, "id": 1 } -``` - -### logsSubscribe - -Subscribe to transaction logging - -#### Parameters: - -- `filter: |` - filter criteria for the logs to receive results by account type; currently supported: - - "all" - subscribe to all transactions except for simple vote transactions - - "allWithVotes" - subscribe to all transactions including simple vote transactions - - `{ "mentions": [ ] }` - subscribe to all transactions that mention the provided Pubkey (as base-58 encoded string) -- (optional) `` - Configuration object containing the following optional fields: - - (optional) `commitment: ` - [Commitment](jsonrpc-api.md#configuring-state-commitment) - -#### Results: - -- `` - Subscription id \(needed to unsubscribe\) - -#### Example: - -Request: - -```json -{ - "jsonrpc": "2.0", - "id": 1, - "method": "logsSubscribe", - "params": [ - { - "mentions": [ "11111111111111111111111111111111" ] - }, - { - "commitment": "finalized" - } - ] -} -{ - "jsonrpc": "2.0", - "id": 1, - "method": "logsSubscribe", - "params": [ "all" ] -} -``` - -Result: - -```json -{ "jsonrpc": "2.0", "result": 24040, "id": 1 } -``` - -#### Notification Format: - -The notification will be an RpcResponse JSON object with value equal to: - -- `signature: ` - The transaction signature base58 encoded. -- `err: ` - Error if transaction failed, null if transaction succeeded. [TransactionError definitions](https://github.com/solana-labs/solana/blob/c0c60386544ec9a9ec7119229f37386d9f070523/sdk/src/transaction/error.rs#L13) -- `logs: ` - Array of log messages the transaction instructions output during execution, null if simulation failed before the transaction was able to execute (for example due to an invalid blockhash or signature verification failure) - -Example: - -```json -{ - "jsonrpc": "2.0", - "method": "logsNotification", - "params": { - "result": { - "context": { - "slot": 5208469 - }, - "value": { - "signature": "5h6xBEauJ3PK6SWCZ1PGjBvj8vDdWG3KpwATGy1ARAXFSDwt8GFXM7W5Ncn16wmqokgpiKRLuS83KUxyZyv2sUYv", - "err": null, - "logs": [ - "BPF program 83astBRguLMdt2h5U1Tpdq5tjFoJ6noeGwaY3mDLVcri success" - ] - } - }, - "subscription": 24040 - } -} -``` - -### logsUnsubscribe - -Unsubscribe from transaction logging - -#### Parameters: - -- `` - id of subscription to cancel - -#### Results: - -- `` - unsubscribe success message - -#### Example: - -Request: - -```json -{ "jsonrpc": "2.0", "id": 1, "method": "logsUnsubscribe", "params": [0] } -``` - -Result: - -```json -{ "jsonrpc": "2.0", "result": true, "id": 1 } -``` - -### programSubscribe - -Subscribe to a program to receive notifications when the lamports or data for a given account owned by the program changes - -#### Parameters: - -- `` - program_id Pubkey, as base-58 encoded string -- (optional) `` - Configuration object containing the following optional fields: - - (optional) `commitment: ` - [Commitment](jsonrpc-api.md#configuring-state-commitment) - - `encoding: ` - encoding for Account data, either "base58" (_slow_), "base64", "base64+zstd" or "jsonParsed". - ["jsonParsed" encoding](jsonrpc-api.md#parsed-responses) attempts to use program-specific state parsers to return more human-readable and explicit account state data. If "jsonParsed" is requested but a parser cannot be found, the field falls back to base64 encoding, detectable when the `data` field is type ``. - - (optional) `filters: ` - filter results using various [filter objects](jsonrpc-api.md#filters); account must meet all filter criteria to be included in results - -#### Results: - -- `` - Subscription id \(needed to unsubscribe\) - -#### Example: - -Request: - -```json -{ - "jsonrpc": "2.0", - "id": 1, - "method": "programSubscribe", - "params": [ - "11111111111111111111111111111111", - { - "encoding": "base64", - "commitment": "finalized" - } - ] -} -{ - "jsonrpc": "2.0", - "id": 1, - "method": "programSubscribe", - "params": [ - "11111111111111111111111111111111", - { - "encoding": "jsonParsed" - } - ] -} -{ - "jsonrpc": "2.0", - "id": 1, - "method": "programSubscribe", - "params": [ - "11111111111111111111111111111111", - { - "encoding": "base64", - "filters": [ - { - "dataSize": 80 - } - ] - } - ] -} -``` - -Result: - -```json -{ "jsonrpc": "2.0", "result": 24040, "id": 1 } -``` - -#### Notification Format: - -The notification format is a single program account object as seen in the [getProgramAccounts](jsonrpc-api.md#getProgramAccounts) RPC HTTP method. - -Base58 encoding: - -```json -{ - "jsonrpc": "2.0", - "method": "programNotification", - "params": { - "result": { - "context": { - "slot": 5208469 - }, - "value": { - "pubkey": "H4vnBqifaSACnKa7acsxstsY1iV1bvJNxsCY7enrd1hq", - "account": { - "data": [ - "11116bv5nS2h3y12kD1yUKeMZvGcKLSjQgX6BeV7u1FrjeJcKfsHPXHRDEHrBesJhZyqnnq9qJeUuF7WHxiuLuL5twc38w2TXNLxnDbjmuR", - "base58" - ], - "executable": false, - "lamports": 33594, - "owner": "11111111111111111111111111111111", - "rentEpoch": 636 - } - } - }, - "subscription": 24040 - } -} -``` - -Parsed-JSON encoding: - -```json -{ - "jsonrpc": "2.0", - "method": "programNotification", - "params": { - "result": { - "context": { - "slot": 5208469 - }, - "value": { - "pubkey": "H4vnBqifaSACnKa7acsxstsY1iV1bvJNxsCY7enrd1hq", - "account": { - "data": { - "program": "nonce", - "parsed": { - "type": "initialized", - "info": { - "authority": "Bbqg1M4YVVfbhEzwA9SpC9FhsaG83YMTYoR4a8oTDLX", - "blockhash": "LUaQTmM7WbMRiATdMMHaRGakPtCkc2GHtH57STKXs6k", - "feeCalculator": { - "lamportsPerSignature": 5000 - } - } - } - }, - "executable": false, - "lamports": 33594, - "owner": "11111111111111111111111111111111", - "rentEpoch": 636 - } - } - }, - "subscription": 24040 - } -} -``` - -### programUnsubscribe - -Unsubscribe from program-owned account change notifications - -#### Parameters: - -- `` - id of account Subscription to cancel - -#### Results: - -- `` - unsubscribe success message - -#### Example: - -Request: - -```json -{ "jsonrpc": "2.0", "id": 1, "method": "programUnsubscribe", "params": [0] } -``` - -Result: - -```json -{ "jsonrpc": "2.0", "result": true, "id": 1 } -``` - -### signatureSubscribe - -Subscribe to a transaction signature to receive notification when the transaction is confirmed On `signatureNotification`, the subscription is automatically cancelled - -#### Parameters: - -- `` - Transaction Signature, as base-58 encoded string -- (optional) `` - Configuration object containing the following field: - - (optional) `commitment: ` - [Commitment](jsonrpc-api.md#configuring-state-commitment) - -#### Results: - -- `integer` - subscription id \(needed to unsubscribe\) - -#### Example: - -Request: - -```json -{ - "jsonrpc": "2.0", - "id": 1, - "method": "signatureSubscribe", - "params": [ - "2EBVM6cB8vAAD93Ktr6Vd8p67XPbQzCJX47MpReuiCXJAtcjaxpvWpcg9Ege1Nr5Tk3a2GFrByT7WPBjdsTycY9b" - ] -} - -{ - "jsonrpc": "2.0", - "id": 1, - "method": "signatureSubscribe", - "params": [ - "2EBVM6cB8vAAD93Ktr6Vd8p67XPbQzCJX47MpReuiCXJAtcjaxpvWpcg9Ege1Nr5Tk3a2GFrByT7WPBjdsTycY9b", - { - "commitment": "finalized" - } - ] -} -``` - -Result: - -```json -{ "jsonrpc": "2.0", "result": 0, "id": 1 } -``` - -#### Notification Format: - -The notification will be an RpcResponse JSON object with value containing an object with: - -- `err: ` - Error if transaction failed, null if transaction succeeded. [TransactionError definitions](https://github.com/solana-labs/solana/blob/c0c60386544ec9a9ec7119229f37386d9f070523/sdk/src/transaction/error.rs#L13) - -Example: - -```json -{ - "jsonrpc": "2.0", - "method": "signatureNotification", - "params": { - "result": { - "context": { - "slot": 5207624 - }, - "value": { - "err": null - } - }, - "subscription": 24006 - } -} -``` - -### signatureUnsubscribe - -Unsubscribe from signature confirmation notification - -#### Parameters: - -- `` - subscription id to cancel - -#### Results: - -- `` - unsubscribe success message - -#### Example: - -Request: - -```json -{ "jsonrpc": "2.0", "id": 1, "method": "signatureUnsubscribe", "params": [0] } -``` - -Result: - -```json -{ "jsonrpc": "2.0", "result": true, "id": 1 } -``` - -### slotSubscribe - -Subscribe to receive notification anytime a slot is processed by the validator - -#### Parameters: - -None - -#### Results: - -- `integer` - subscription id \(needed to unsubscribe\) - -#### Example: - -Request: - -```json -{ "jsonrpc": "2.0", "id": 1, "method": "slotSubscribe" } -``` - -Result: - -```json -{ "jsonrpc": "2.0", "result": 0, "id": 1 } -``` - -#### Notification Format: - -The notification will be an object with the following fields: - -- `parent: ` - The parent slot -- `root: ` - The current root slot -- `slot: ` - The newly set slot value - -Example: - -```json -{ - "jsonrpc": "2.0", - "method": "slotNotification", - "params": { - "result": { - "parent": 75, - "root": 44, - "slot": 76 - }, - "subscription": 0 - } -} -``` - -### slotUnsubscribe - -Unsubscribe from slot notifications - -#### Parameters: - -- `` - subscription id to cancel - -#### Results: - -- `` - unsubscribe success message - -#### Example: - -Request: - -```json -{ "jsonrpc": "2.0", "id": 1, "method": "slotUnsubscribe", "params": [0] } -``` - -Result: - -```json -{ "jsonrpc": "2.0", "result": true, "id": 1 } -``` - -### slotsUpdatesSubscribe - Unstable - -**This subscription is unstable; the format of this subscription may change in -the future and it may not always be supported** - -Subscribe to receive a notification from the validator on a variety of updates -on every slot - -#### Parameters: - -None - -#### Results: - -- `integer` - subscription id \(needed to unsubscribe\) - -#### Example: - -Request: - -```json -{ "jsonrpc": "2.0", "id": 1, "method": "slotsUpdatesSubscribe" } -``` - -Result: - -```json -{ "jsonrpc": "2.0", "result": 0, "id": 1 } -``` - -#### Notification Format: - -The notification will be an object with the following fields: - -- `parent: ` - The parent slot -- `slot: ` - The newly updated slot -- `timestamp: ` - The Unix timestamp of the update -- `type: ` - The update type, one of: - - "firstShredReceived" - - "completed" - - "createdBank" - - "frozen" - - "dead" - - "optimisticConfirmation" - - "root" - -```bash -{ - "jsonrpc": "2.0", - "method": "slotsUpdatesNotification", - "params": { - "result": { - "parent": 75, - "slot": 76, - "timestamp": 1625081266243, - "type": "optimisticConfirmation" - }, - "subscription": 0 - } -} -``` - -### slotsUpdatesUnsubscribe - -Unsubscribe from slot-update notifications - -#### Parameters: - -- `` - subscription id to cancel - -#### Results: - -- `` - unsubscribe success message - -#### Example: - -Request: - -```json -{ - "jsonrpc": "2.0", - "id": 1, - "method": "slotsUpdatesUnsubscribe", - "params": [0] -} -``` - -Result: - -```json -{ "jsonrpc": "2.0", "result": true, "id": 1 } -``` - -### rootSubscribe - -Subscribe to receive notification anytime a new root is set by the validator. - -#### Parameters: - -None - -#### Results: - -- `integer` - subscription id \(needed to unsubscribe\) - -#### Example: - -Request: - -```json -{ "jsonrpc": "2.0", "id": 1, "method": "rootSubscribe" } -``` - -Result: - -```json -{ "jsonrpc": "2.0", "result": 0, "id": 1 } -``` - -#### Notification Format: - -The result is the latest root slot number. - -```json -{ - "jsonrpc": "2.0", - "method": "rootNotification", - "params": { - "result": 42, - "subscription": 0 - } -} -``` - -### rootUnsubscribe - -Unsubscribe from root notifications - -#### Parameters: - -- `` - subscription id to cancel - -#### Results: - -- `` - unsubscribe success message - -#### Example: - -Request: - -```json -{ "jsonrpc": "2.0", "id": 1, "method": "rootUnsubscribe", "params": [0] } -``` - -Result: - -```json -{ "jsonrpc": "2.0", "result": true, "id": 1 } -``` - -### voteSubscribe - Unstable, disabled by default - -**This subscription is unstable and only available if the validator was started -with the `--rpc-pubsub-enable-vote-subscription` flag. The format of this -subscription may change in the future** - -Subscribe to receive notification anytime a new vote is observed in gossip. -These votes are pre-consensus therefore there is no guarantee these votes will -enter the ledger. - -#### Parameters: - -None - -#### Results: - -- `integer` - subscription id \(needed to unsubscribe\) - -#### Example: - -Request: - -```json -{ "jsonrpc": "2.0", "id": 1, "method": "voteSubscribe" } -``` - -Result: - -```json -{ "jsonrpc": "2.0", "result": 0, "id": 1 } -``` - -#### Notification Format: - -The notification will be an object with the following fields: - -- `hash: ` - The vote hash -- `slots: ` - The slots covered by the vote, as an array of u64 integers -- `timestamp: ` - The timestamp of the vote -- `signature: ` - The signature of the transaction that contained this vote - -```json -{ - "jsonrpc": "2.0", - "method": "voteNotification", - "params": { - "result": { - "hash": "8Rshv2oMkPu5E4opXTRyuyBeZBqQ4S477VG26wUTFxUM", - "slots": [1, 2], - "timestamp": null - }, - "subscription": 0 - } -} -``` - -### voteUnsubscribe - -Unsubscribe from vote notifications - -#### Parameters: - -- `` - subscription id to cancel - -#### Results: - -- `` - unsubscribe success message - -#### Example: - -Request: - -```json -{ "jsonrpc": "2.0", "id": 1, "method": "voteUnsubscribe", "params": [0] } -``` - -Response: - -```json -{ "jsonrpc": "2.0", "result": true, "id": 1 } -``` - -## JSON RPC API Deprecated Methods - -### getConfirmedBlock - -**DEPRECATED: Please use [getBlock](jsonrpc-api.md#getblock) instead** -This method is expected to be removed in solana-core v2.0 - -Returns identity and transaction information about a confirmed block in the ledger - -#### Parameters: - -- `` - slot, as u64 integer -- (optional) `` - Configuration object containing the following optional fields: - - (optional) `encoding: ` - encoding for each returned Transaction, either "json", "jsonParsed", "base58" (_slow_), "base64". If parameter not provided, the default encoding is "json". - ["jsonParsed" encoding](jsonrpc-api.md#parsed-responses) attempts to use program-specific instruction parsers to return more human-readable and explicit data in the `transaction.message.instructions` list. If "jsonParsed" is requested but a parser cannot be found, the instruction falls back to regular JSON encoding (`accounts`, `data`, and `programIdIndex` fields). - - (optional) `transactionDetails: ` - level of transaction detail to return, either "full", "signatures", or "none". If parameter not provided, the default detail level is "full". - - (optional) `rewards: bool` - whether to populate the `rewards` array. If parameter not provided, the default includes rewards. - - (optional) `commitment: ` - [Commitment](jsonrpc-api.md#configuring-state-commitment); "processed" is not supported. If parameter not provided, the default is "finalized". - -#### Results: - -The result field will be an object with the following fields: - -- `` - if specified block is not confirmed -- `` - if block is confirmed, an object with the following fields: - - `blockhash: ` - the blockhash of this block, as base-58 encoded string - - `previousBlockhash: ` - the blockhash of this block's parent, as base-58 encoded string; if the parent block is not available due to ledger cleanup, this field will return "11111111111111111111111111111111" - - `parentSlot: ` - the slot index of this block's parent - - `transactions: ` - present if "full" transaction details are requested; an array of JSON objects containing: - - `transaction: ` - [Transaction](#transaction-structure) object, either in JSON format or encoded binary data, depending on encoding parameter - - `meta: ` - transaction status metadata object, containing `null` or: - - `err: ` - Error if transaction failed, null if transaction succeeded. [TransactionError definitions](https://github.com/solana-labs/solana/blob/c0c60386544ec9a9ec7119229f37386d9f070523/sdk/src/transaction/error.rs#L13) - - `fee: ` - fee this transaction was charged, as u64 integer - - `preBalances: ` - array of u64 account balances from before the transaction was processed - - `postBalances: ` - array of u64 account balances after the transaction was processed - - `innerInstructions: ` - List of [inner instructions](#inner-instructions-structure) or `null` if inner instruction recording was not enabled during this transaction - - `preTokenBalances: ` - List of [token balances](#token-balances-structure) from before the transaction was processed or omitted if token balance recording was not yet enabled during this transaction - - `postTokenBalances: ` - List of [token balances](#token-balances-structure) from after the transaction was processed or omitted if token balance recording was not yet enabled during this transaction - - `logMessages: ` - array of string log messages or `null` if log message recording was not enabled during this transaction - - DEPRECATED: `status: ` - Transaction status - - `"Ok": ` - Transaction was successful - - `"Err": ` - Transaction failed with TransactionError - - `signatures: ` - present if "signatures" are requested for transaction details; an array of signatures strings, corresponding to the transaction order in the block - - `rewards: ` - present if rewards are requested; an array of JSON objects containing: - - `pubkey: ` - The public key, as base-58 encoded string, of the account that received the reward - - `lamports: `- number of reward lamports credited or debited by the account, as a i64 - - `postBalance: ` - account balance in lamports after the reward was applied - - `rewardType: ` - type of reward: "fee", "rent", "voting", "staking" - - `commission: ` - vote account commission when the reward was credited, only present for voting and staking rewards - - `blockTime: ` - estimated production time, as Unix timestamp (seconds since the Unix epoch). null if not available - -#### Example: - -Request: - -```bash -curl http://localhost:8899 -X POST -H "Content-Type: application/json" -d ' - {"jsonrpc": "2.0","id":1,"method":"getConfirmedBlock","params":[430, {"encoding": "json","transactionDetails":"full","rewards":false}]} -' -``` - -Result: - -```json -{ - "jsonrpc": "2.0", - "result": { - "blockTime": null, - "blockhash": "3Eq21vXNB5s86c62bVuUfTeaMif1N2kUqRPBmGRJhyTA", - "parentSlot": 429, - "previousBlockhash": "mfcyqEXB3DnHXki6KjjmZck6YjmZLvpAByy2fj4nh6B", - "transactions": [ - { - "meta": { - "err": null, - "fee": 5000, - "innerInstructions": [], - "logMessages": [], - "postBalances": [499998932500, 26858640, 1, 1, 1], - "postTokenBalances": [], - "preBalances": [499998937500, 26858640, 1, 1, 1], - "preTokenBalances": [], - "status": { - "Ok": null - } - }, - "transaction": { - "message": { - "accountKeys": [ - "3UVYmECPPMZSCqWKfENfuoTv51fTDTWicX9xmBD2euKe", - "AjozzgE83A3x1sHNUR64hfH7zaEBWeMaFuAN9kQgujrc", - "SysvarS1otHashes111111111111111111111111111", - "SysvarC1ock11111111111111111111111111111111", - "Vote111111111111111111111111111111111111111" - ], - "header": { - "numReadonlySignedAccounts": 0, - "numReadonlyUnsignedAccounts": 3, - "numRequiredSignatures": 1 - }, - "instructions": [ - { - "accounts": [1, 2, 3, 0], - "data": "37u9WtQpcm6ULa3WRQHmj49EPs4if7o9f1jSRVZpm2dvihR9C8jY4NqEwXUbLwx15HBSNcP1", - "programIdIndex": 4 - } - ], - "recentBlockhash": "mfcyqEXB3DnHXki6KjjmZck6YjmZLvpAByy2fj4nh6B" - }, - "signatures": [ - "2nBhEBYYvfaAe16UMNqRHre4YNSskvuYgx3M6E4JP1oDYvZEJHvoPzyUidNgNX5r9sTyN1J9UxtbCXy2rqYcuyuv" - ] - } - } - ] - }, - "id": 1 -} -``` - -#### Example: - -Request: - -```bash -curl http://localhost:8899 -X POST -H "Content-Type: application/json" -d ' - {"jsonrpc": "2.0","id":1,"method":"getConfirmedBlock","params":[430, "base64"]} -' -``` - -Result: - -```json -{ - "jsonrpc": "2.0", - "result": { - "blockTime": null, - "blockhash": "3Eq21vXNB5s86c62bVuUfTeaMif1N2kUqRPBmGRJhyTA", - "parentSlot": 429, - "previousBlockhash": "mfcyqEXB3DnHXki6KjjmZck6YjmZLvpAByy2fj4nh6B", - "rewards": [], - "transactions": [ - { - "meta": { - "err": null, - "fee": 5000, - "innerInstructions": [], - "logMessages": [], - "postBalances": [499998932500, 26858640, 1, 1, 1], - "postTokenBalances": [], - "preBalances": [499998937500, 26858640, 1, 1, 1], - "preTokenBalances": [], - "status": { - "Ok": null - } - }, - "transaction": [ - "AVj7dxHlQ9IrvdYVIjuiRFs1jLaDMHixgrv+qtHBwz51L4/ImLZhszwiyEJDIp7xeBSpm/TX5B7mYzxa+fPOMw0BAAMFJMJVqLw+hJYheizSoYlLm53KzgT82cDVmazarqQKG2GQsLgiqktA+a+FDR4/7xnDX7rsusMwryYVUdixfz1B1Qan1RcZLwqvxvJl4/t3zHragsUp0L47E24tAFUgAAAABqfVFxjHdMkoVmOYaR1etoteuKObS21cc1VbIQAAAAAHYUgdNXR0u3xNdiTr072z2DVec9EQQ/wNo1OAAAAAAAtxOUhPBp2WSjUNJEgfvy70BbxI00fZyEPvFHNfxrtEAQQEAQIDADUCAAAAAQAAAAAAAACtAQAAAAAAAAdUE18R96XTJCe+YfRfUp6WP+YKCy/72ucOL8AoBFSpAA==", - "base64" - ] - } - ] - }, - "id": 1 -} -``` - -For more details on returned data: -[Transaction Structure](jsonrpc-api.md#transaction-structure) -[Inner Instructions Structure](jsonrpc-api.md#inner-instructions-structure) -[Token Balances Structure](jsonrpc-api.md#token-balances-structure) - -### getConfirmedBlocks - -**DEPRECATED: Please use [getBlocks](jsonrpc-api.md#getblocks) instead** -This method is expected to be removed in solana-core v2.0 - -Returns a list of confirmed blocks between two slots - -#### Parameters: - -- `` - start_slot, as u64 integer -- (optional) `` - end_slot, as u64 integer -- (optional) `` - Configuration object containing the following field: - - (optional) `commitment: ` - [Commitment](jsonrpc-api.md#configuring-state-commitment); "processed" is not supported. If parameter not provided, the default is "finalized". - -#### Results: - -The result field will be an array of u64 integers listing confirmed blocks -between `start_slot` and either `end_slot`, if provided, or latest confirmed block, -inclusive. Max range allowed is 500,000 slots. - -#### Example: - -Request: - -```bash -curl http://localhost:8899 -X POST -H "Content-Type: application/json" -d ' - {"jsonrpc": "2.0","id":1,"method":"getConfirmedBlocks","params":[5, 10]} -' -``` - -Result: - -```json -{ "jsonrpc": "2.0", "result": [5, 6, 7, 8, 9, 10], "id": 1 } -``` - -### getConfirmedBlocksWithLimit - -**DEPRECATED: Please use [getBlocksWithLimit](jsonrpc-api.md#getblockswithlimit) instead** -This method is expected to be removed in solana-core v2.0 - -Returns a list of confirmed blocks starting at the given slot - -#### Parameters: - -- `` - start_slot, as u64 integer -- `` - limit, as u64 integer -- (optional) `` - Configuration object containing the following field: - - (optional) `commitment: ` - [Commitment](jsonrpc-api.md#configuring-state-commitment); "processed" is not supported. If parameter not provided, the default is "finalized". - -#### Results: - -The result field will be an array of u64 integers listing confirmed blocks -starting at `start_slot` for up to `limit` blocks, inclusive. - -#### Example: - -Request: - -```bash -curl http://localhost:8899 -X POST -H "Content-Type: application/json" -d ' - {"jsonrpc": "2.0","id":1,"method":"getConfirmedBlocksWithLimit","params":[5, 3]} -' -``` - -Result: - -```json -{ "jsonrpc": "2.0", "result": [5, 6, 7], "id": 1 } -``` - -### getConfirmedSignaturesForAddress2 - -**DEPRECATED: Please use [getSignaturesForAddress](jsonrpc-api.md#getsignaturesforaddress) instead** -This method is expected to be removed in solana-core v2.0 - -Returns signatures for confirmed transactions that include the given address in -their `accountKeys` list. Returns signatures backwards in time from the -provided signature or most recent confirmed block - -#### Parameters: - -- `` - account address as base-58 encoded string -- (optional) `` - Configuration object containing the following fields: - - (optional) `limit: ` - maximum transaction signatures to return (between 1 and 1,000, default: 1,000). - - (optional) `before: ` - start searching backwards from this transaction signature. - If not provided the search starts from the top of the highest max confirmed block. - - (optional) `until: ` - search until this transaction signature, if found before limit reached. - - (optional) `commitment: ` - [Commitment](jsonrpc-api.md#configuring-state-commitment); "processed" is not supported. If parameter not provided, the default is "finalized". - -#### Results: - -The result field will be an array of transaction signature information, ordered -from newest to oldest transaction: - -- `` - - `signature: ` - transaction signature as base-58 encoded string - - `slot: ` - The slot that contains the block with the transaction - - `err: ` - Error if transaction failed, null if transaction succeeded. [TransactionError definitions](https://github.com/solana-labs/solana/blob/c0c60386544ec9a9ec7119229f37386d9f070523/sdk/src/transaction/error.rs#L13) - - `memo: ` - Memo associated with the transaction, null if no memo is present - - `blockTime: ` - estimated production time, as Unix timestamp (seconds since the Unix epoch) of when transaction was processed. null if not available. - -#### Example: - -Request: - -```bash -curl http://localhost:8899 -X POST -H "Content-Type: application/json" -d ' - { - "jsonrpc": "2.0", - "id": 1, - "method": "getConfirmedSignaturesForAddress2", - "params": [ - "Vote111111111111111111111111111111111111111", - { - "limit": 1 - } - ] - } -' -``` - -Result: - -```json -{ - "jsonrpc": "2.0", - "result": [ - { - "err": null, - "memo": null, - "signature": "5h6xBEauJ3PK6SWCZ1PGjBvj8vDdWG3KpwATGy1ARAXFSDwt8GFXM7W5Ncn16wmqokgpiKRLuS83KUxyZyv2sUYv", - "slot": 114, - "blockTime": null - } - ], - "id": 1 -} -``` - -### getConfirmedTransaction - -**DEPRECATED: Please use [getTransaction](jsonrpc-api.md#gettransaction) instead** -This method is expected to be removed in solana-core v2.0 - -Returns transaction details for a confirmed transaction - -#### Parameters: - -- `` - transaction signature as base-58 encoded string -- (optional) `` - Configuration object containing the following optional fields: - - (optional) `encoding: ` - encoding for each returned Transaction, either "json", "jsonParsed", "base58" (_slow_), "base64". If parameter not provided, the default encoding is "json". - ["jsonParsed" encoding](jsonrpc-api.md#parsed-responses) attempts to use program-specific instruction parsers to return more human-readable and explicit data in the `transaction.message.instructions` list. If "jsonParsed" is requested but a parser cannot be found, the instruction falls back to regular JSON encoding (`accounts`, `data`, and `programIdIndex` fields). - - (optional) `commitment: ` - [Commitment](jsonrpc-api.md#configuring-state-commitment); "processed" is not supported. If parameter not provided, the default is "finalized". - -#### Results: - -- `` - if transaction is not found or not confirmed -- `` - if transaction is confirmed, an object with the following fields: - - `slot: ` - the slot this transaction was processed in - - `transaction: ` - [Transaction](#transaction-structure) object, either in JSON format or encoded binary data, depending on encoding parameter - - `blockTime: ` - estimated production time, as Unix timestamp (seconds since the Unix epoch) of when the transaction was processed. null if not available - - `meta: ` - transaction status metadata object: - - `err: ` - Error if transaction failed, null if transaction succeeded. [TransactionError definitions](https://docs.rs/solana-sdk/VERSION_FOR_DOCS_RS/solana_sdk/transaction/enum.TransactionError.html) - - `fee: ` - fee this transaction was charged, as u64 integer - - `preBalances: ` - array of u64 account balances from before the transaction was processed - - `postBalances: ` - array of u64 account balances after the transaction was processed - - `innerInstructions: ` - List of [inner instructions](#inner-instructions-structure) or `null` if inner instruction recording was not enabled during this transaction - - `preTokenBalances: ` - List of [token balances](#token-balances-structure) from before the transaction was processed or omitted if token balance recording was not yet enabled during this transaction - - `postTokenBalances: ` - List of [token balances](#token-balances-structure) from after the transaction was processed or omitted if token balance recording was not yet enabled during this transaction - - `logMessages: ` - array of string log messages or `null` if log message recording was not enabled during this transaction - - DEPRECATED: `status: ` - Transaction status - - `"Ok": ` - Transaction was successful - - `"Err": ` - Transaction failed with TransactionError - -#### Example: - -Request: - -```bash -curl http://localhost:8899 -X POST -H "Content-Type: application/json" -d ' - { - "jsonrpc": "2.0", - "id": 1, - "method": "getConfirmedTransaction", - "params": [ - "2nBhEBYYvfaAe16UMNqRHre4YNSskvuYgx3M6E4JP1oDYvZEJHvoPzyUidNgNX5r9sTyN1J9UxtbCXy2rqYcuyuv", - "json" - ] - } -' -``` - -Result: - -```json -{ - "jsonrpc": "2.0", - "result": { - "meta": { - "err": null, - "fee": 5000, - "innerInstructions": [], - "postBalances": [499998932500, 26858640, 1, 1, 1], - "postTokenBalances": [], - "preBalances": [499998937500, 26858640, 1, 1, 1], - "preTokenBalances": [], - "status": { - "Ok": null - } - }, - "slot": 430, - "transaction": { - "message": { - "accountKeys": [ - "3UVYmECPPMZSCqWKfENfuoTv51fTDTWicX9xmBD2euKe", - "AjozzgE83A3x1sHNUR64hfH7zaEBWeMaFuAN9kQgujrc", - "SysvarS1otHashes111111111111111111111111111", - "SysvarC1ock11111111111111111111111111111111", - "Vote111111111111111111111111111111111111111" - ], - "header": { - "numReadonlySignedAccounts": 0, - "numReadonlyUnsignedAccounts": 3, - "numRequiredSignatures": 1 - }, - "instructions": [ - { - "accounts": [1, 2, 3, 0], - "data": "37u9WtQpcm6ULa3WRQHmj49EPs4if7o9f1jSRVZpm2dvihR9C8jY4NqEwXUbLwx15HBSNcP1", - "programIdIndex": 4 - } - ], - "recentBlockhash": "mfcyqEXB3DnHXki6KjjmZck6YjmZLvpAByy2fj4nh6B" - }, - "signatures": [ - "2nBhEBYYvfaAe16UMNqRHre4YNSskvuYgx3M6E4JP1oDYvZEJHvoPzyUidNgNX5r9sTyN1J9UxtbCXy2rqYcuyuv" - ] - } - }, - "blockTime": null, - "id": 1 -} -``` - -#### Example: - -Request: - -```bash -curl http://localhost:8899 -X POST -H "Content-Type: application/json" -d ' - { - "jsonrpc": "2.0", - "id": 1, - "method": "getConfirmedTransaction", - "params": [ - "2nBhEBYYvfaAe16UMNqRHre4YNSskvuYgx3M6E4JP1oDYvZEJHvoPzyUidNgNX5r9sTyN1J9UxtbCXy2rqYcuyuv", - "base64" - ] - } -' -``` - -Result: - -```json -{ - "jsonrpc": "2.0", - "result": { - "meta": { - "err": null, - "fee": 5000, - "innerInstructions": [], - "postBalances": [499998932500, 26858640, 1, 1, 1], - "postTokenBalances": [], - "preBalances": [499998937500, 26858640, 1, 1, 1], - "preTokenBalances": [], - "status": { - "Ok": null - } - }, - "slot": 430, - "transaction": [ - "AVj7dxHlQ9IrvdYVIjuiRFs1jLaDMHixgrv+qtHBwz51L4/ImLZhszwiyEJDIp7xeBSpm/TX5B7mYzxa+fPOMw0BAAMFJMJVqLw+hJYheizSoYlLm53KzgT82cDVmazarqQKG2GQsLgiqktA+a+FDR4/7xnDX7rsusMwryYVUdixfz1B1Qan1RcZLwqvxvJl4/t3zHragsUp0L47E24tAFUgAAAABqfVFxjHdMkoVmOYaR1etoteuKObS21cc1VbIQAAAAAHYUgdNXR0u3xNdiTr072z2DVec9EQQ/wNo1OAAAAAAAtxOUhPBp2WSjUNJEgfvy70BbxI00fZyEPvFHNfxrtEAQQEAQIDADUCAAAAAQAAAAAAAACtAQAAAAAAAAdUE18R96XTJCe+YfRfUp6WP+YKCy/72ucOL8AoBFSpAA==", - "base64" - ] - }, - "id": 1 -} -``` - -### getFeeCalculatorForBlockhash - -**DEPRECATED: Please use [isBlockhashValid](jsonrpc-api.md#isblockhashvalid) or [getFeeForMessage](jsonrpc-api.md#getfeeformessage) instead** -This method is expected to be removed in solana-core v2.0 - -Returns the fee calculator associated with the query blockhash, or `null` if the blockhash has expired - -#### Parameters: - -- `` - query blockhash as a Base58 encoded string -- (optional) `` - Configuration object containing the following fields: - - (optional) `commitment: ` - [Commitment](jsonrpc-api.md#configuring-state-commitment) - - (optional) `minContextSlot: ` - set the minimum slot that the request can be evaluated at. - -#### Results: - -The result will be an RpcResponse JSON object with `value` equal to: - -- `` - if the query blockhash has expired -- `` - otherwise, a JSON object containing: - - `feeCalculator: `, `FeeCalculator` object describing the cluster fee rate at the queried blockhash - -#### Example: - -Request: - -```bash -curl http://localhost:8899 -X POST -H "Content-Type: application/json" -d ' - { - "jsonrpc": "2.0", - "id": 1, - "method": "getFeeCalculatorForBlockhash", - "params": [ - "GJxqhuxcgfn5Tcj6y3f8X4FeCDd2RQ6SnEMo1AAxrPRZ" - ] - } -' -``` - -Result: - -```json -{ - "jsonrpc": "2.0", - "result": { - "context": { - "slot": 221 - }, - "value": { - "feeCalculator": { - "lamportsPerSignature": 5000 - } - } - }, - "id": 1 -} -``` - -### getFeeRateGovernor - -Returns the fee rate governor information from the root bank - -#### Parameters: - -None - -#### Results: - -The `result` field will be an `object` with the following fields: - -- `burnPercent: `, Percentage of fees collected to be destroyed -- `maxLamportsPerSignature: `, Largest value `lamportsPerSignature` can attain for the next slot -- `minLamportsPerSignature: `, Smallest value `lamportsPerSignature` can attain for the next slot -- `targetLamportsPerSignature: `, Desired fee rate for the cluster -- `targetSignaturesPerSlot: `, Desired signature rate for the cluster - -#### Example: - -Request: - -```bash -curl http://localhost:8899 -X POST -H "Content-Type: application/json" -d ' - {"jsonrpc":"2.0","id":1, "method":"getFeeRateGovernor"} -' -``` - -Result: - -```json -{ - "jsonrpc": "2.0", - "result": { - "context": { - "slot": 54 - }, - "value": { - "feeRateGovernor": { - "burnPercent": 50, - "maxLamportsPerSignature": 100000, - "minLamportsPerSignature": 5000, - "targetLamportsPerSignature": 10000, - "targetSignaturesPerSlot": 20000 - } - } - }, - "id": 1 -} -``` - -### getFees - -**DEPRECATED: Please use [getFeeForMessage](jsonrpc-api.md#getfeeformessage) instead** -This method is expected to be removed in solana-core v2.0 - -Returns a recent block hash from the ledger, a fee schedule that can be used to -compute the cost of submitting a transaction using it, and the last slot in -which the blockhash will be valid. - -#### Parameters: - -- (optional) `` - Configuration object containing the following field: - - (optional) `commitment: ` - [Commitment](jsonrpc-api.md#configuring-state-commitment) - -#### Results: - -The result will be an RpcResponse JSON object with `value` set to a JSON object with the following fields: - -- `blockhash: ` - a Hash as base-58 encoded string -- `feeCalculator: ` - FeeCalculator object, the fee schedule for this block hash -- `lastValidSlot: ` - DEPRECATED - this value is inaccurate and should not be relied upon -- `lastValidBlockHeight: ` - last [block height](../../terminology.md#block-height) at which the blockhash will be valid - -#### Example: - -Request: - -```bash -curl http://localhost:8899 -X POST -H "Content-Type: application/json" -d ' - {"jsonrpc":"2.0","id":1, "method":"getFees"} -' -``` - -Result: - -```json -{ - "jsonrpc": "2.0", - "result": { - "context": { - "slot": 1 - }, - "value": { - "blockhash": "CSymwgTNX1j3E4qhKfJAUE41nBWEwXufoYryPbkde5RR", - "feeCalculator": { - "lamportsPerSignature": 5000 - }, - "lastValidSlot": 297, - "lastValidBlockHeight": 296 - } - }, - "id": 1 -} -``` - -### getRecentBlockhash - -**DEPRECATED: Please use [getLatestBlockhash](jsonrpc-api.md#getlatestblockhash) instead** -This method is expected to be removed in solana-core v2.0 - -Returns a recent block hash from the ledger, and a fee schedule that can be used to compute the cost of submitting a transaction using it. - -#### Parameters: - -- (optional) `` - Configuration object containing the following field: - - (optional) `commitment: ` - [Commitment](jsonrpc-api.md#configuring-state-commitment) - -#### Results: - -An RpcResponse containing a JSON object consisting of a string blockhash and FeeCalculator JSON object. - -- `RpcResponse` - RpcResponse JSON object with `value` field set to a JSON object including: -- `blockhash: ` - a Hash as base-58 encoded string -- `feeCalculator: ` - FeeCalculator object, the fee schedule for this block hash - -#### Example: - -Request: - -```bash -curl http://localhost:8899 -X POST -H "Content-Type: application/json" -d ' - {"jsonrpc":"2.0","id":1, "method":"getRecentBlockhash"} -' -``` - -Result: - -```json -{ - "jsonrpc": "2.0", - "result": { - "context": { - "slot": 1 - }, - "value": { - "blockhash": "CSymwgTNX1j3E4qhKfJAUE41nBWEwXufoYryPbkde5RR", - "feeCalculator": { - "lamportsPerSignature": 5000 - } - } - }, - "id": 1 -} -``` - -### getSnapshotSlot - -**DEPRECATED: Please use [getHighestSnapshotSlot](jsonrpc-api.md#gethighestsnapshotslot) instead** -This method is expected to be removed in solana-core v2.0 - -Returns the highest slot that the node has a snapshot for - -#### Parameters: - -None - -#### Results: - -- `` - Snapshot slot - -#### Example: - -Request: - -```bash -curl http://localhost:8899 -X POST -H "Content-Type: application/json" -d ' - {"jsonrpc":"2.0","id":1, "method":"getSnapshotSlot"} -' -``` - -Result: - -```json -{ "jsonrpc": "2.0", "result": 100, "id": 1 } -``` - -Result when the node has no snapshot: - -```json -{ - "jsonrpc": "2.0", - "error": { "code": -32008, "message": "No snapshot" }, - "id": 1 -} -``` diff --git a/docs/src/developing/clients/rust-api.md b/docs/src/developing/clients/rust-api.md index 6deaf81443acdb..dd49310d00f525 100644 --- a/docs/src/developing/clients/rust-api.md +++ b/docs/src/developing/clients/rust-api.md @@ -19,7 +19,7 @@ Some important crates: that do not run on-chain will import this. - [`solana-client`] — For interacting with a Solana node via the - [JSON RPC API](jsonrpc-api). + [JSON RPC API](/api). - [`solana-cli-config`] — Loading and saving the Solana CLI configuration file. diff --git a/docs/src/developing/intro/rent.md b/docs/src/developing/intro/rent.md index 05cdebb948abf1..544608efe4551a 100644 --- a/docs/src/developing/intro/rent.md +++ b/docs/src/developing/intro/rent.md @@ -21,7 +21,7 @@ Currently, the rent rate is a static amount and stored in the the [Rent sysvar]( Accounts that maintain a minimum LAMPORT balance greater than 2 years worth of rent payments are considered "_rent exempt_" and will not incur a rent collection. -> At the time of writing this, new Accounts and Programs **are required** to be initialized with enough LAMPORTS to become rent-exempt. The RPC endpoints have the ability to calculate this [estimated rent exempt balance](../clients/jsonrpc-api.md#getminimumbalanceforrentexemption) and is recommended to be used. +> At the time of writing this, new Accounts and Programs **are required** to be initialized with enough LAMPORTS to become rent-exempt. The RPC endpoints have the ability to calculate this [estimated rent exempt balance](../../api/http#getminimumbalanceforrentexemption) and is recommended to be used. Every time an account's balance is reduced, a check is performed to see if the account is still rent exempt. Transactions that would cause an account's balance to drop below the rent exempt threshold will fail. diff --git a/docs/src/developing/intro/transaction_fees.md b/docs/src/developing/intro/transaction_fees.md index 520cfe30431d1c..382dae826217e8 100644 --- a/docs/src/developing/intro/transaction_fees.md +++ b/docs/src/developing/intro/transaction_fees.md @@ -92,4 +92,4 @@ Note that adding a `RequestUnits` compute budget instruction will take up 39 ext ### Calculate transaction fees with RPC API -In order to simplify fee calculation for developers, a new `getFeeForMessage` RPC API is planned to be released in v1.9 of the Solana protocol. This new method accepts a blockhash along with an encoded transaction message and will return the amount of fees that would be deducted if the transaction message is signed, sent, and processed by the cluster. Full documentation can be found on the "edge" version of the Solana docs here: [https://edge.docs.solana.com/developing/clients/jsonrpc-api#getfeeformessage](https://edge.docs.solana.com/developing/clients/jsonrpc-api#getfeeformessage) +In order to simplify fee calculation for developers, a new [`getFeeForMessage`](/api/http#getfeeformessage) RPC API is planned to be released in v1.9 of the Solana protocol. This new method accepts a blockhash along with an encoded transaction message and will return the amount of fees that would be deducted if the transaction message is signed, sent, and processed by the cluster. diff --git a/docs/src/developing/programming-model/accounts.md b/docs/src/developing/programming-model/accounts.md index 9fda255643c105..90227b1b62c3c2 100644 --- a/docs/src/developing/programming-model/accounts.md +++ b/docs/src/developing/programming-model/accounts.md @@ -148,10 +148,12 @@ that would reduce the balance to below the minimum amount will fail. Program executable accounts are required by the runtime to be rent-exempt to avoid being purged. -Note: Use the [`getMinimumBalanceForRentExemption` RPC -endpoint](developing/clients/jsonrpc-api.md#getminimumbalanceforrentexemption) to calculate the +:::info +Use the [`getMinimumBalanceForRentExemption`](../../api/http#getminimumbalanceforrentexemption) RPC +endpoint to calculate the minimum balance for a particular account size. The following calculation is illustrative only. +::: For example, a program executable with the size of 15,000 bytes requires a balance of 105,290,880 lamports (=~ 0.105 SOL) to be rent-exempt: diff --git a/docs/src/developing/test-validator.md b/docs/src/developing/test-validator.md index 72dea3ea4a0878..b835692a9a4668 100644 --- a/docs/src/developing/test-validator.md +++ b/docs/src/developing/test-validator.md @@ -140,7 +140,7 @@ JSON RPC URL: http://127.0.0.1:8899 ``` - The network address of the [Gossip](/validator/gossip#gossip-overview), - [Transaction Processing Unit](/validator/tpu) and [JSON RPC](clients/jsonrpc-api#json-rpc-api-reference) + [Transaction Processing Unit](/validator/tpu) and [JSON RPC](../api/http#json-rpc-api-reference) service, respectively ``` @@ -148,7 +148,7 @@ JSON RPC URL: http://127.0.0.1:8899 ``` - Session running time, current slot of the the three block - [commitment levels](clients/jsonrpc-api#configuring-state-commitment), + [commitment levels](../api/http#configuring-state-commitment), slot height of the last snapshot, transaction count, [voting authority](/running-validator/vote-accounts#vote-authority) balance @@ -166,4 +166,4 @@ Since this may not always be desired, especially when testing programs meant for ```bash solana-test-validator --deactivate-feature --deactivate-feature -``` \ No newline at end of file +``` diff --git a/docs/src/developing/transaction_confirmation.md b/docs/src/developing/transaction_confirmation.md new file mode 100644 index 00000000000000..9fa1c6ab0b5fa3 --- /dev/null +++ b/docs/src/developing/transaction_confirmation.md @@ -0,0 +1,199 @@ +--- +title: "Transaction Confirmation" +--- + +into to transaction confirmation? + +Problems relating to [transaction confirmation](./transaction_confirmation.md) are common with many newer developers while building applications. This article aims to boost the overall understanding of the confirmation mechanism used on the Solana blockchain, including some recommended best practices. + +## Brief background on transactions + +Let’s first make sure we’re all on the same page and thinking about the same things... + +### What is a transaction? + +Transactions consist of two components: a [message](./../terminology.md#message) and a [list of signatures](./../terminology.md#signature). The transaction message is where the magic happens and at a high level it consists of three components: + +- a **list of instructions** to invoke, +- a **list of accounts** to load, and +- a **“recent blockhash.”** + +In this article, we’re going to be focusing a lot on a transaction’s [recent blockhash](./../terminology.md#blockhash) because it plays a big role in transaction confirmation. + +### Transaction lifecycle refresher + +Below is a high level view of the lifecycle of a transaction. This article will touch on everything except steps 1 and 4. + +1. Create a list of instructions along with the list of accounts that instructions need to read and write +2. Fetch a recent blockhash and use it to prepare a transaction message +3. Simulate the transaction to ensure it behaves as expected +4. Prompt user to sign the prepared transaction message with their private key +5. Send the transaction to an RPC node which attempts to forward it to the current block producer +6. Hope that a block producer validates and commits the transaction into their produced block +7. Confirm the transaction has either been included in a block or detect when it has expired + +## What is a Blockhash? + +A [“blockhash”](./../terminology.md#blockhash) refers to the last Proof of History (PoH) hash for a [“slot”](./../terminology.md#slot) (description below). Since Solana uses PoH as a trusted clock, a transaction’s recent blockhash can be thought of as a **timestamp**. + +### Proof of History refresher + +Solana’s Proof of History mechanism uses a very long chain of recursive SHA-256 hashes to build a trusted clock. The “history” part of the name comes from the fact that block producers hash transaction id’s into the stream to record which transactions were processed in their block. + +[PoH hash calculation](https://github.com/solana-labs/solana/blob/9488a73f5252ad0d7ea830a0b456d9aa4bfbb7c1/entry/src/poh.rs#L82): `next_hash = hash(prev_hash, hash(transaction_ids))` + +PoH can be used as a trusted clock because each hash must be produced sequentially. Each produced block contains a blockhash and a list of hash checkpoints called “ticks” so that validators can verify the full chain of hashes in parallel and prove that some amount of time has actually passed. The stream of hashes can be broken up into the following time units: + +# Transaction Expiration + +By default, all Solana transactions will expire if not committed to a block in a certain amount of time. The **vast majority** of transaction confirmation issues are related to how RPC nodes and validators detect and handle **expired** transactions. A solid understanding of how transaction expiration works should help you diagnose the bulk of your transaction confirmation issues. + +## How does transaction expiration work? + +Each transaction includes a “recent blockhash” which is used as a PoH clock timestamp and expires when that blockhash is no longer “recent” enough. More concretely, Solana validators look up the corresponding slot number for each transaction’s blockhash that they wish to process in a block. If the validator [can’t find a slot number for the blockhash](https://github.com/solana-labs/solana/blob/9488a73f5252ad0d7ea830a0b456d9aa4bfbb7c1/runtime/src/bank.rs#L3687) or if the looked up slot number is more than 151 slots lower than the slot number of the block being processed, the transaction will be rejected. + +Slots are configured to last about [400ms](https://github.com/solana-labs/solana/blob/47b938e617b77eb3fc171f19aae62222503098d7/sdk/program/src/clock.rs#L12) but often fluctuate between 400ms and 600ms, so a given blockhash can only be used by transactions for about 60 to 90 seconds. + +Transaction has expired pseudocode: `currentBankSlot > slotForTxRecentBlockhash + 151` + +Transaction not expired pseudocode: `currentBankSlot - slotForTxRecentBlockhash < 152` + +### Example of transaction expiration + +Let’s walk through a quick example: + +1. A validator is producing a new block for slot #1000 +2. The validator receives a transaction with recent blockhash `1234...` from a user +3. The validator checks the `1234...` blockhash against the list of recent blockhashes leading up to its new block and discovers that it was the blockhash for slot #849 +4. Since slot #849 is exactly 151 slots lower than slot #1000, the transaction hasn’t expired yet and can still be processed! +5. But wait, before actually processing the transaction, the validator finished the block for slot #1000 and starts producing the block for slot #1001 (validators get to produce blocks for 4 consecutive slots). +6. The validator checks the same transaction again and finds that it’s now too old and drops it because it’s now 152 slots lower than the current slot :( + +## Why do transactions expire? + +There’s a very good reason for this actually, it’s to help validators avoid processing the same transaction twice. + +A naive brute force approach to prevent double processing could be to check every new transaction against the blockchain’s entire transaction history. But by having transactions expire after a short amount of time, validators only need to check if a new transaction is in a relatively small set of _recently_ processed transactions. + +### Other blockchains + +Solana’s approach of prevent double processing is quite different from other blockchains. For example, Ethereum tracks a counter (nonce) for each transaction sender and will only process transactions that use the next valid nonce. + +Ethereum’s approach is simple for validators to implement, but it can be problematic for users. Many people have encountered situations when their Ethereum transactions got stuck in a _pending_ state for a long time and all the later transactions, which used higher nonce values, were blocked from processing. + +### Advantages on Solana + +There are a few advantages to Solana’s approach: + +1. A single fee payer can submit multiple transactions at the same time that are allowed to be processed in any order. This might happen if you’re using multiple applications at the same time. +2. If a transaction doesn’t get committed to a block and expires, users can try again knowing that their previous transaction won’t ever be processed. + +By not using counters, the Solana wallet experience may be easier for users to understand because they can get to success, failure, or expiration states quickly and avoid annoying pending states. + +### Disadvantages on Solana + +Of course there are some disadvantages too: + +1. Validators have to actively track a set of all processed transaction id’s to prevent double processing. +2. If the expiration time period is too short, users might not be able to submit their transaction before it expires. + +These disadvantages highlight a tradeoff in how transaction expiration is configured. If the expiration time of a transaction is increased, validators need to use more memory to track more transactions. If expiration time is decreased, users don’t have enough time to submit their transaction. + +Currently, Solana clusters require that transactions use blockhashes that are no more than [151 slots](https://github.com/solana-labs/solana/blob/9488a73f5252ad0d7ea830a0b456d9aa4bfbb7c1/sdk/program/src/clock.rs#L65) old. + +> This [Github issue](https://github.com/solana-labs/solana/issues/23582) contains some calculations that estimate that mainnet-beta validators need about 150MB of memory to track transactions. +> This could be slimmed down in the future if necessary without decreasing expiration time as I’ve detailed in that issue. + +## Transaction confirmation tips + +As mentioned before, blockhashes expire after a time period of only 151 slots which can pass as quickly as **one minute** when slots are processed within the target time of 400ms. + +One minute is not a lot of time considering that a client needs to fetch a recent blockhash, wait for the user to sign, and finally hope that the broadcasted transaction reaches a leader that is willing to accept it. Let’s go through some tips to help avoid confirmation failures due to transaction expiration! + +### Fetch blockhashes with the appropriate commitment level + +Given the short expiration time frame, it’s imperative that clients help users create transactions with blockhash that is as recent as possible. + +When fetching blockhashes, the current recommended RPC API is called [`getLatestBlockhash`](/api/http#getlatestblockhash). By default, this API uses the `"finalized"` commitment level to return the most recently finalized block’s blockhash. However, you can override this behavior by [setting the `commitment` parameter](/api/http#configuring-state-commitment) to a different commitment level. + +**Recommendation** + +The `"confirmed"` commitment level should almost always be used for RPC requests because it’s usually only a few slots behind the `"processed"` commitment and has a very low chance of belonging to a dropped [fork](./../cluster/fork-generation.md). + +But feel free to consider the other options: + +- Choosing `"processed"` will let you fetch the most recent blockhash compared to other commitment levels and therefore gives you the most time to prepare and process a transaction. But due to the prevalence of forking in the Solana protocol, roughly 5% of blocks don’t end up being finalized by the cluster so there’s a real chance that your transaction uses a blockhash that belongs to a dropped fork. Transactions that use blockhashes for abandoned blocks won’t ever be considered recent by any blocks that are in the finalized blockchain. +- Using the default commitment level `"finalized"` will eliminate any risk that the blockhash you choose will belong to a dropped fork. The tradeoff is that there is typically at least a 32 slot difference between the most recent confirmed block and the most recent finalized block. This tradeoff is pretty severe and effectively reduces the expiration of your transactions by about 13 seconds but this could be even more during unstable cluster conditions. + +### Use an appropriate preflight commitment level + +If your transaction uses a blockhash that was fetched from one RPC node then you send, or simulate, that transaction with a different RPC node, you could run into issues due to one node lagging behind the other. + +When RPC nodes receive a `sendTransaction` request, they will attempt to determine the expiration block of your transaction using the most recent finalized block or with the block selected by the `preflightCommitment` parameter. A **VERY** common issue is that a received transaction’s blockhash was produced after the block used to calculate the expiration for that transaction. If an RPC node can’t determine when your transaction expires, it will only forward your transaction **one time** and then will **drop** the transaction. + +Similarly, when RPC nodes receive a `simulateTransaction` request, they will simulate your transaction using the most recent finalized block or with the block selected by the `preflightCommitment` parameter. If the block chosen for simulation is older than the block used for your transaction’s blockhash, the simulation will fail with the dreaded “blockhash not found” error. + +**Recommendation** + +Even if you use `skipPreflight`, **ALWAYS** set the `preflightCommitment` parameter to the same commitment level used to fetch your transaction’s blockhash for both `sendTransaction` and `simulateTransaction` requests. + +### Be wary of lagging RPC nodes when sending transactions + +When your application uses an RPC pool service or when the RPC endpoint differs between creating a transaction and sending a transaction, you need to be wary of situations where one RPC node is lagging behind the other. For example, if you fetch a transaction blockhash from one RPC node then you send that transaction to a second RPC node for forwarding or simulation, the second RPC node might be lagging behind the first. + +**Recommendation** + +For `sendTransaction` requests, clients should keep resending a transaction to a RPC node on a frequent interval so that if an RPC node is slightly lagging behind the cluster, it will eventually catch up and detect your transaction’s expiration properly. + +For `simulateTransaction` requests, clients should use the [`replaceRecentBlockhash`](/api/http#simulatetransaction) parameter to tell the RPC node to replace the simulated transaction’s blockhash with a blockhash that will always be valid for simulation. + +### Avoid reusing stale blockhashes + +Even if your application has fetched a very recent blockhash, be sure that you’re not reusing that blockhash in transactions for too long. The ideal scenario is that a recent blockhash is fetched right before a user signs their transaction. + +**Recommendation for applications** + +Poll for new recent blockhashes on a frequent basis to ensure that whenever a user triggers an action that creates a transaction, your application already has a fresh blockhash that’s ready to go. + +**Recommendation for wallets** + +Poll for new recent blockhashes on a frequent basis and replace a transaction’s recent blockhash right before they sign the transaction to ensure the blockhash is as fresh as possible. + +### Use healthy RPC nodes when fetching blockhashes + +By fetching the latest blockhash with the `"confirmed"` commitment level from an RPC node, it’s going to respond with the blockhash for the latest confirmed block that it’s aware of. Solana’s block propagation protocol prioritizes sending blocks to staked nodes so RPC nodes naturally lag about a block behind the rest of the cluster. They also have to do more work to handle application requests and can lag a lot more under heavy user traffic. + +Lagging RPC nodes can therefore respond to blockhash requests with blockhashes that were confirmed by the cluster quite awhile ago. By default, a lagging RPC node detects that it is more than 150 slots behind the cluster will stop responding to requests, but just before hitting that threshold they can still return a blockhash that is just about to expire. + +**Recommendation** + +Monitor the health of your RPC nodes to ensure that they have an up-to-date view of the cluster state with one of the following methods: + +1. Fetch your RPC node’s highest processed slot by using the [`getSlot`](/api/http#getslot) RPC API with the `"processed"` commitment level and then call the [`getMaxShredInsertSlot](/api/http#getmaxshredinsertslot) RPC API to get the highest slot that your RPC node has received a “shred” of a block for. If the difference between these responses is very large, the cluster is producing blocks far ahead of what the RPC node has processed. +2. Call the `getLatestBlockhash` RPC API with the `"confirmed"` commitment level on a few different RPC API nodes and use the blockhash from the node that returns the highest slot for its [context slot](/api/http#rpcresponse-structure). + +### Wait long enough for expiration + +**Recommendation** + +When calling [`getLatestBlockhash`](/api/http#getlatestblockhash) RPC API to get a recent blockhash for your transaction, take note of the `"lastValidBlockHeight"` in the response. + +Then, poll the [`getBlockHeight`](/api/http#getblockheight) RPC API with the “confirmed” commitment level until it returns a block height greater than the previously returned last valid block height. + +### Consider using “durable” transactions + +Sometimes transaction expiration issues are really hard to avoid (e.g. offline signing, cluster instability). If the previous tips are still not sufficient for your use-case, you can switch to using durable transactions (they just require a bit of setup). + +To start using durable transactions, a user first needs to submit a transaction that [invokes instructions that create a special on-chain “nonce” account](https://docs.rs/solana-program/latest/solana_program/system_instruction/fn.create_nonce_account.html) and stores a “durable blockhash” inside of it. At any point in the future (as long as the nonce account hasn’t been used yet), the user can create a durable transaction by following these 2 rules: + +1. The instruction list must start with an [“advance nonce” system instruction](https://docs.rs/solana-program/latest/solana_program/system_instruction/fn.advance_nonce_account.html) which loads their on-chain nonce account +2. The transaction’s blockhash must be equal to the durable blockhash stored by the on-chain nonce account + +Here’s how these transactions are processed by the Solana runtime: + +1. If the transaction’s blockhash is no longer “recent”, the runtime checks if the transaction’s instruction list begins with an “advance nonce” system instruction +2. If so, it then loads the nonce account specified by the “advance nonce” instruction +3. Then it checks that the stored durable blockhash matches the transaction’s blockhash +4. Lastly it makes sure to advance the nonce account’s stored blockhash to the latest recent blockhash to ensure that the same transaction can never be processed again + +For more details about how these durable transactions work, you can read the [original proposal](./../implemented-proposals/durable-tx-nonces.md) and [check out an example](./clients/javascript-reference#nonceaccount) in the Solana docs. diff --git a/docs/src/developing/versioned-transactions.md b/docs/src/developing/versioned-transactions.md index d283a5530afd69..4ff509e4994a1c 100644 --- a/docs/src/developing/versioned-transactions.md +++ b/docs/src/developing/versioned-transactions.md @@ -16,7 +16,7 @@ The Solana runtime supports two transaction versions: ## Max supported transaction version -All RPC requests that return a transaction **_should_** specify the highest version of transactions they will support in their application using the `maxSupportedTransactionVersion` option. Including [`getBlock`](./clients/jsonrpc-api.md#getblock) and [`getTransaction`](./clients/jsonrpc-api.md#gettransaction), +All RPC requests that return a transaction **_should_** specify the highest version of transactions they will support in their application using the `maxSupportedTransactionVersion` option, including [`getBlock`](../api/http#getblock) and [`getTransaction`](../api/http#gettransaction). An RPC request will fail if a [Versioned Transaction](./versioned-transactions.md) is returned that is higher than the set `maxSupportedTransactionVersion`. (i.e. if a version `0` transaction is returned when `legacy` is selected) diff --git a/docs/src/getstarted/hello-world.md b/docs/src/getstarted/hello-world.md index 4aa696f62b3726..78d0715225d77d 100644 --- a/docs/src/getstarted/hello-world.md +++ b/docs/src/getstarted/hello-world.md @@ -44,8 +44,9 @@ Next, import the project into your local workspace by clicking the "**Import**" Normally with [local development](./local.md), you will need to create a file system wallet for use with the Solana CLI. But with the Solana Playground, you only need to click a few buttons to create a browser based wallet. -> **Note:** -> Your _Playground Wallet_ will be saved in your browser's local storage. Clearing your browser cache will remove your saved wallet. When creating a new wallet, you will have the option to save a local copy of your wallet's keypair file. +:::caution +Your _Playground Wallet_ will be saved in your browser's local storage. Clearing your browser cache will remove your saved wallet. When creating a new wallet, you will have the option to save a local copy of your wallet's keypair file. +::: Click on the red status indicator button at the bottom left of the screen, (optionally) save your wallet's keypair file to your computer for backup, then click "**Continue**". @@ -103,8 +104,9 @@ If you look at the Playground's terminal, you should see your Solana program beg ![Viewing a successful build of your Rust based program](/img/quickstarts/solana-get-started-successful-build.png) -> Note: -> You may receive _warning_ when your program is compiled due to unused variables. Don't worry, these warning will not affect your build. They are due to our very simple program not using all the variables we declared in the `process_instruction` function. +:::caution +You may receive _warning_ when your program is compiled due to unused variables. Don't worry, these warning will not affect your build. They are due to our very simple program not using all the variables we declared in the `process_instruction` function. +::: ### Deploy your program @@ -137,8 +139,9 @@ Once you have successfully deployed a Solana program to the blockchain, you will Like most developers creating dApps and websites, we will interact with our on chain program using JavaScript. Specifically, will use the open source [NPM package](https://www.npmjs.com/package/@solana/web3.js) `@solana/web3.js` to aid in our client application. -> **NOTE:** -> This web3.js package is an abstraction layer on top of the [JSON RPC API](./../developing/clients/jsonrpc-api.md) that reduced the need for rewriting common boilerplate, helping to simplify your client side application code. +:::info +This web3.js package is an abstraction layer on top of the [JSON RPC API](/api) that reduced the need for rewriting common boilerplate, helping to simplify your client side application code. +::: ### Initialize client @@ -154,8 +157,9 @@ We have created `client` folder and a default `client.ts`. This is where we will In playground, there are many utilities that are globally available for us to use without installing or setting up anything. Most important ones for our `hello world` program are `web3` for `@solana/web3.js` and `pg` for Solana Playground utilities. -> Note: -> You can go over all of the available globals by pressing `CTRL+SPACE` (or `CMD+SPACE` on macOS) inside the editor. +:::info +You can go over all of the available globals by pressing `CTRL+SPACE` (or `CMD+SPACE` on macOS) inside the editor. +::: ### Call the program @@ -191,8 +195,9 @@ const txHash = await web3.sendAndConfirmTransaction( console.log("Transaction sent with hash:", txHash); ``` -> Note: -> The first signer in the signers array is the transaction fee payer by default. We are signing with our keypair `pg.wallet.keypair`. +:::info +The first signer in the signers array is the transaction fee payer by default. We are signing with our keypair `pg.wallet.keypair`. +::: ### Run the application diff --git a/docs/src/implemented-proposals/rpc-transaction-history.md b/docs/src/implemented-proposals/rpc-transaction-history.md index 4853d19e6f2290..c8eb878eae45ce 100644 --- a/docs/src/implemented-proposals/rpc-transaction-history.md +++ b/docs/src/implemented-proposals/rpc-transaction-history.md @@ -10,13 +10,13 @@ fall back to the external data store. The affected RPC endpoints are: -- [getFirstAvailableBlock](developing/clients/jsonrpc-api.md#getfirstavailableblock) -- [getConfirmedBlock](developing/clients/jsonrpc-api.md#getconfirmedblock) -- [getConfirmedBlocks](developing/clients/jsonrpc-api.md#getconfirmedblocks) -- [getConfirmedSignaturesForAddress](developing/clients/jsonrpc-api.md#getconfirmedsignaturesforaddress) -- [getConfirmedTransaction](developing/clients/jsonrpc-api.md#getconfirmedtransaction) -- [getSignatureStatuses](developing/clients/jsonrpc-api.md#getsignaturestatuses) -- [getBlockTime](developing/clients/jsonrpc-api.md#getblocktime) +- [getFirstAvailableBlock](../api/http#getfirstavailableblock) +- [getConfirmedBlock](../api/http#getconfirmedblock) +- [getConfirmedBlocks](../api/http#getconfirmedblocks) +- [getConfirmedSignaturesForAddress](../api/http#getconfirmedsignaturesforaddress) +- [getConfirmedTransaction](../api/http#getconfirmedtransaction) +- [getSignatureStatuses](../api/http#getsignaturestatuses) +- [getBlockTime](../api/http#getblocktime) Some system design constraints: diff --git a/docs/src/implemented-proposals/transaction-fees.md b/docs/src/implemented-proposals/transaction-fees.md index 02245647b594c0..042db21a50af76 100644 --- a/docs/src/implemented-proposals/transaction-fees.md +++ b/docs/src/implemented-proposals/transaction-fees.md @@ -6,14 +6,14 @@ title: Deterministic Transaction Fees Before sending a transaction to the cluster, a client may query the network to determine what the transaction's fee will be via the rpc request -[getFeeForMessage](/developing/clients/jsonrpc-api#getfeeformessage). +[getFeeForMessage](../api/http#getfeeformessage). ## Fee Parameters The fee is based on the number of signatures in the transaction, the more signatures a transaction contains, the higher the fee. In addition, a transaction can specify an additional fee that determines how the transaction is -relatively prioritized against others. A transaction's prioritization fee is +relatively prioritized against others. A transaction's prioritization fee is calculated by multiplying the number of compute units by the compute unit price (measured in micro-lamports) set by the transaction via compute budget instructions. diff --git a/docs/src/integrations/exchange.md b/docs/src/integrations/exchange.md index 7d4e741022da3f..02306f4332d6d4 100644 --- a/docs/src/integrations/exchange.md +++ b/docs/src/integrations/exchange.md @@ -156,7 +156,7 @@ We recommend using a unique deposit account for each of your users. Solana accounts must be made rent-exempt by containing 2-years worth of [rent](developing/programming-model/accounts.md#rent) in SOL. In order to find the minimum rent-exempt balance for your deposit accounts, query the -[`getMinimumBalanceForRentExemption` endpoint](developing/clients/jsonrpc-api.md#getminimumbalanceforrentexemption): +[`getMinimumBalanceForRentExemption` endpoint](../api/http#getminimumbalanceforrentexemption): ```bash curl localhost:8899 -X POST -H "Content-Type: application/json" -d '{ @@ -218,7 +218,7 @@ To track all the deposit accounts for your exchange, poll for each confirmed block and inspect for addresses of interest, using the JSON-RPC service of your Solana API node. -- To identify which blocks are available, send a [`getBlocks` request](developing/clients/jsonrpc-api.md#getblocks), +- To identify which blocks are available, send a [`getBlocks`](../api/http#getblocks) request, passing the last block you have already processed as the start-slot parameter: ```bash @@ -235,7 +235,7 @@ curl https://api.devnet.solana.com -X POST -H "Content-Type: application/json" - Not every slot produces a block, so there may be gaps in the sequence of integers. -- For each block, request its contents with a [`getBlock` request](developing/clients/jsonrpc-api.md#getblock): +- For each block, request its contents with a [`getBlock`](../api/http#getblock) request: ### Block Fetching Tips @@ -352,7 +352,7 @@ generally _not_ a viable method for tracking all your deposit addresses over all slots, but may be useful for examining a few accounts for a specific period of time. -- Send a [`getSignaturesForAddress`](developing/clients/jsonrpc-api.md#getsignaturesforaddress) +- Send a [`getSignaturesForAddress`](../api/http#getsignaturesforaddress) request to the api node: ```bash @@ -402,7 +402,7 @@ curl localhost:8899 -X POST -H "Content-Type: application/json" -d '{ ``` - For each signature returned, get the transaction details by sending a - [`getTransaction`](developing/clients/jsonrpc-api.md#gettransaction) request: + [`getTransaction`](../api/http#gettransaction) request: ```bash curl https://api.devnet.solana.com -X POST -H 'Content-Type: application/json' -d '{ @@ -544,8 +544,7 @@ before retrying a withdrawal transfer that does not appear to have been confirmed or finalized by the cluster. Otherwise, you risk a double spend. See more on [blockhash expiration](#blockhash-expiration) below. -First, get a recent blockhash using the [`getFees` endpoint](developing/clients/jsonrpc-api.md#getfees) -or the CLI command: +First, get a recent blockhash using the [`getFees`](../api/http#getfees) endpoint or the CLI command: ```bash solana fees --url http://localhost:8899 @@ -559,12 +558,12 @@ solana transfer --no-wait --allow-unfunded-recipient --b ``` You can also build, sign, and serialize the transaction manually, and fire it off to -the cluster using the JSON-RPC [`sendTransaction` endpoint](developing/clients/jsonrpc-api.md#sendtransaction). +the cluster using the JSON-RPC [`sendTransaction`](../api/http#sendtransaction) endpoint. #### Transaction Confirmations & Finality Get the status of a batch of transactions using the -[`getSignatureStatuses` JSON-RPC endpoint](developing/clients/jsonrpc-api.md#getsignaturestatuses). +[`getSignatureStatuses`](../api/http#getsignaturestatuses) JSON-RPC endpoint. The `confirmations` field reports how many [confirmed blocks](../terminology.md#confirmed-block) have elapsed since the transaction was processed. If `confirmations: null`, it is [finalized](../terminology.md#finality). @@ -615,7 +614,7 @@ curl localhost:8899 -X POST -H "Content-Type: application/json" -d '{ #### Blockhash Expiration You can check whether a particular blockhash is still valid by sending a -[`getFeeCalculatorForBlockhash`](developing/clients/jsonrpc-api.md#getfeecalculatorforblockhash) +[`getFeeCalculatorForBlockhash`](../api/http#getfeecalculatorforblockhash) request with the blockhash as a parameter. If the response value is `null`, the blockhash is expired, and the withdrawal transaction using that blockhash should never succeed. diff --git a/docs/src/integrations/retrying-transactions.md b/docs/src/integrations/retrying-transactions.md index 66c59c205cdaf4..c2d7ff24be2292 100644 --- a/docs/src/integrations/retrying-transactions.md +++ b/docs/src/integrations/retrying-transactions.md @@ -38,7 +38,7 @@ so that they can be processed into a block. There are two main ways in which a transaction can be sent to leaders: 1. By proxy via an RPC server and the - [sendTransaction](../developing/clients/jsonrpc-api#sendtransaction) + [sendTransaction](../api/http#sendtransaction) JSON-RPC method 2. Directly to leaders via a [TPU Client](https://docs.rs/solana-client/1.7.3/solana_client/tpu_client/index.html) @@ -138,7 +138,7 @@ is queried from the advanced part of the pool (Backend A). When the transaction is submitted to the lagging part of the pool (Backend B), the nodes will not recognize the advanced blockhash and will drop the transaction. This can be detected upon transaction submission if developers enable -[preflight checks](../developing/clients/jsonrpc-api#sendtransaction) +[preflight checks](../api/http#sendtransaction) on `sendTransaction`. ![Dropped via RPC Pool](../../static/img/rt-dropped-via-rpc-pool.png) @@ -190,7 +190,7 @@ the transaction will be processed or finalized by the cluster. - `skipPreflight`: `boolean` - if true, skip the preflight transaction checks (default: false) - (optional) `preflightCommitment`: `string` - - [Commitment](../developing/clients/jsonrpc-api#configuring-state-commitment) + [Commitment](../api/http#configuring-state-commitment) level to use for preflight simulations against the bank slot (default: "finalized"). - (optional) `encoding`: `string` - Encoding used for the transaction data. @@ -204,7 +204,7 @@ Response - `transaction id`: `string` - First transaction signature embedded in the transaction, as base-58 encoded string. This transaction id can be used with - [getSignatureStatuses](../developing/clients/jsonrpc-api#getsignaturestatuses) + [`getSignatureStatuses`](../api/http#getsignaturestatuses) to poll for status updates. ::: @@ -219,9 +219,9 @@ developers to manually control the retry process A common pattern for manually retrying transactions involves temporarily storing the `lastValidBlockHeight` that comes from -[getLatestBlockhash](../developing/clients/jsonrpc-api#getlatestblockhash). +[getLatestBlockhash](../api/http#getlatestblockhash). Once stashed, an application can then -[poll the cluster’s blockheight](../developing/clients/jsonrpc-api#getblockheight) +[poll the cluster’s blockheight](../api/http#getblockheight) and manually retry the transaction at an appropriate interval. In times of network congestion, it’s advantageous to set `maxRetries` to 0 and manually rebroadcast via a custom algorithm. While some applications may employ an @@ -289,7 +289,7 @@ const sleep = async (ms: number) => { When polling via `getLatestBlockhash`, applications should specify their intended -[commitment](../developing/clients/jsonrpc-api#configuring-state-commitment) +[commitment](../api/http#configuring-state-commitment) level. By setting its commitment to `confirmed` (voted on) or `finalized` (~30 blocks after `confirmed`), an application can avoid polling a blockhash from a minority fork. @@ -331,6 +331,6 @@ In Solana, a dropped transaction can be safely discarded once the blockhash it references is older than the `lastValidBlockHeight` received from `getLatestBlockhash`. Developers should keep track of this `lastValidBlockHeight` by querying -[`getEpochInfo`](../developing/clients/jsonrpc-api#getepochinfo) +[`getEpochInfo`](../api/http#getepochinfo) and comparing with `blockHeight` in the response. Once a blockhash is invalidated, clients may re-sign with a newly-queried blockhash. diff --git a/docs/src/pages/CodeDocBlock.module.css b/docs/src/pages/CodeDocBlock.module.css new file mode 100644 index 00000000000000..7cffc5625bd7a0 --- /dev/null +++ b/docs/src/pages/CodeDocBlock.module.css @@ -0,0 +1,80 @@ +/* stylelint-disable docusaurus/copyright-header */ + +.DocBlock { + border-top: 1px solid #414141; + padding-top: 3rem; + /* display: flex; */ + /* justify-content: space-between; */ + margin-top: 5rem; + /* width: 100%; */ + /* align-items: center; */ +} + +.DocSideBySide { + margin-top: 2rem; +} + +.CodeParams { + display: block; + width: 100%; +} + +.CodeSnippets { + display: block; + width: 100%; +} + +@media screen and (min-width: 768px) { + .DocSideBySide { + display: flex; + width: 100%; + } + .CodeParams { + margin-right: 3rem; + width: 50%; + } + .CodeSnippets { + width: 50%; + } +} + +.Parameter { + padding: 1em 0em; + margin-bottom: 1em; + border-top: 1px solid #414141; + /* // border-bottom: 1px solid #414141; */ +} + +.ParameterName { + font-weight: 700; +} + +.ParameterHeader { + font-family: mono; + padding: 0.1em 0em; +} + +.Field { + /* // padding: 1em 0em; */ + margin: 1em 0em 1em 1em; + /* // border-top: 1px solid #414141; */ + /* // border-bottom: 1px solid #414141; */ +} +.Field section { + padding: 0em 1em; +} + +.FlagItem { + margin: 0 0.5rem; + color: #767676; + font-weight: 600; +} + +.Heading { + font-size: 1.24rem; + font-weight: 700; +} +.SubHeading { + /* font-size: 1.24rem; */ + font-weight: 600; +} diff --git a/docs/src/pages/api.js b/docs/src/pages/api.js new file mode 100644 index 00000000000000..6252d21df5027e --- /dev/null +++ b/docs/src/pages/api.js @@ -0,0 +1,82 @@ +import React from "react"; +import Link from "@docusaurus/Link"; +import styles from "./styles.module.css"; +import Card from "../../components/Card"; +import CardLayout from "../../layouts/CardLayout"; + +function APIPage() { + return ( + +
    +
    +
    +

    JSON RPC API

    + +
    +

    + Interact with Solana nodes directly with the JSON RPC API via + the HTTP and Websocket methods. +

    + + + Explore the API + +
    +
    + +
    +

    Explore the JSON RPC Methods

    + +
    + + + + + +
    +
    +
    +
    +
    + ); +} + +export default APIPage; diff --git a/docs/src/pages/developers.js b/docs/src/pages/developers.js index 344ad73a55ebda..fb612bb0d0b5dd 100644 --- a/docs/src/pages/developers.js +++ b/docs/src/pages/developers.js @@ -136,7 +136,7 @@ function Developers() { /> **Learn more:** compute units and the [Compute Budget](./developing/programming-model/runtime#compute-budget) in the Runtime and [requesting a fee estimate](./developing/clients/jsonrpc-api.md#getfeeformessage) from the RPC. +> **Learn more:** compute units and the [Compute Budget](./developing/programming-model/runtime#compute-budget) in the Runtime and [requesting a fee estimate](../api/http#getfeeformessage) from the RPC. ## Prioritization fee From ad761fec63875d16294e869cd96b3c72b8adbcb3 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Fri, 7 Apr 2023 22:04:39 +0800 Subject: [PATCH 394/465] v1.14: [docs] fix: rpc api redirect (backport of #30212) (#31108) [docs] fix: rpc api redirect (#30212) (cherry picked from commit ae59195ed08f7f12513027c22575faa7eaa9ffc8) Co-authored-by: Nick Frostbutter <75431177+nickfrosty@users.noreply.github.com> --- docs/publish-docs.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/publish-docs.sh b/docs/publish-docs.sh index 811dea1eb491f7..0ae2d927162acf 100755 --- a/docs/publish-docs.sh +++ b/docs/publish-docs.sh @@ -38,8 +38,8 @@ cat > "$CONFIG_FILE" < Date: Mon, 10 Apr 2023 22:18:29 +0800 Subject: [PATCH 395/465] v1.14: [docs] state compression and compressed nfts (backport of #31027) (#31076) [docs] state compression and compressed nfts (#31027) * feat: added doc for state compression * feat: added guide for compressed nfts * fix: updates sidebar for new docs * fix: added link to example repo * fix: fixed typos --------- Co-authored-by: nickfrosty (cherry picked from commit 4564bcdc1a18681503a534b2d1909edbeedac24d) Co-authored-by: Nick Frostbutter <75431177+nickfrosty@users.noreply.github.com> --- docs/sidebars.js | 23 + docs/src/developing/guides/compressed-nfts.md | 862 ++++++++++++++++++ docs/src/learn/state-compression.md | 334 +++++++ 3 files changed, 1219 insertions(+) create mode 100644 docs/src/developing/guides/compressed-nfts.md create mode 100644 docs/src/learn/state-compression.md diff --git a/docs/sidebars.js b/docs/sidebars.js index ae503fbee5bffa..304fc3cf15d065 100644 --- a/docs/sidebars.js +++ b/docs/sidebars.js @@ -182,6 +182,18 @@ module.exports = { }, ], }, + { + type: "category", + label: "Advanced Concepts", + // collapsed: false, + items: [ + { + type: "doc", + id: "learn/state-compression", + label: "State Compression", + }, + ], + }, { type: "category", label: "Clients", @@ -208,6 +220,17 @@ module.exports = { }, ], }, + { + type: "category", + label: "Guides", + items: [ + { + type: "doc", + id: "developing/guides/compressed-nfts", + label: "Compressed NFTs", + }, + ], + }, { type: "category", label: "Writing Programs", diff --git a/docs/src/developing/guides/compressed-nfts.md b/docs/src/developing/guides/compressed-nfts.md new file mode 100644 index 00000000000000..afcfbd564c9db1 --- /dev/null +++ b/docs/src/developing/guides/compressed-nfts.md @@ -0,0 +1,862 @@ +--- +title: Creating Compressed NFTs with JavaScript +description: + "Compressed NFTs use the Bubblegum program from Metaplex to cheaply and + securely store NFT metadata using State Compression on Solana." +keywords: + - compression + - merkle tree + - read api + - metaplex +--- + +Compressed NFTs on Solana use the +[Bubblegum](https://docs.metaplex.com/programs/compression/) program from +Metaplex to cheaply and securely store NFT metadata using +[State Compression](../../learn/state-compression.md). + +This developer guide will use JavaScript/TypeScript to demonstrate: + +- [how to create a tree for compressed NFTs](#create-a-tree), +- [how to mint compressed NFTs into a tree](#mint-compressed-nfts), +- [how to get compressed NFT metadata from the Read API](#reading-compressed-nfts-metadata), + and +- [how to transfer compressed NFTs](#transfer-compressed-nfts) + +## Intro to Compressed NFTs + +Compressed NFTs use [State Compression](../../learn/state-compression.md) and +[merkle trees](../../learn/state-compression.md#what-is-a-merkle-tree) to +drastically reduce the storage cost for NFTs. Instead of storing an NFT's +metadata in a typical Solana account, compressed NFTs store the metadata within +the ledger. This allows compressed NFTs to still inherit the security and speed +of the Solana blockchain, while at the same time reducing the overall storage +costs. + +Even though the on-chain data storage mechanism is different than their +uncompressed counterparts, compressed NFTs still follow the exact same +[Metadata](https://docs.metaplex.com/programs/token-metadata/accounts#metadata) +schema/structure. Allowing you to define your Collection and NFT in an identical +way. + +However, the process to mint and transfer compressed NFTs is different from +uncompressed NFTs. Aside from using a different on-chain program, compressed +NFTs are minting into a merkle tree and require verification of a "proof" to +transfer. More on this below. + +### Compressed NFTs and indexers + +Since compressed NFTs store all of their metadata in the +[ledger](../../terminology.md#ledger), instead of in traditional +[accounts](../../terminology.md#account) like uncompressed NFTs, we will need to +help of indexing services to quickly fetch our compressed NFT's metadata. + +Supporting RPC providers are using the Digital Asset Standard Read API (or "Read +API" for short) to add additional RPC methods that developers can call. These +additional, NFT oriented methods, are loaded with all the information about +particular NFTs. Including support for **BOTH** compressed NFTs **AND** +uncompressed NFTs. + +:::caution Metadata is secured by the ledger and cached by indexers + +Since validators do not keep a very long history of the recent ledger data, +these indexers effectively "cache" the compressed NFT metadata passed through +the Solana ledger. Quickly serving it back on request to improve speed and user +experience of applications. + +However, since the metadata was already secured by the ledger when minting the +compressed NFT, anyone could re-index the metadata directly from the secure +ledger. Allowing for independent verification of the data, should the need or +desire arise. + +::: + +These indexing services are already available from some of the common RPC +providers, with more rolling out support in the near future. To name a few of +the RPC providers that already support the Read API: + +- Helius +- Triton +- SimpleHash + +### How to mint compressed NFTs + +The process to create or mint compressed NFTs on Solana is similar to creating a +"traditional NFT collection", with a few differences. The mint process will +happen in 3 primary steps: + +- create an NFT collection (or use an existing one) +- create a + [concurrent merkle tree](../../learn/state-compression.md#what-is-a-concurrent-merkle-tree) + (using the `@solana/spl-account-compression` SDK) +- mint compressed NFTs into your tree (to any owner's address you want) + +### How to transfer a compressed NFT + +Once your compressed NFT exists on the Solana blockchain, the process to +transfer ownership of a compressed NFT happens in a few broad steps: + +1. get the NFT "asset" information (from the indexer) +2. get the NFT's "proof" (from the indexer) +3. get the Merkle tree account (from the Solana blockchain) +4. prepare the asset proof (by parsing and formatting it) +5. build and send the transfer instruction + +The first three steps primarily involve gathering specific pieces of information +(the `proof` and the tree's canopy depth) for the NFT to be transferred. These +pieces of information are needed to correctly parse/format the `proof` to +actually be sent within the transfer instruction itself. + +## Getting started + +For this guide, we are going to make a few assumptions about the compressed NFT +collection we are going to create: + +- we are going to use TypeScript and NodeJS for this example +- we will use a single, **new** Metaplex collection + +### Project Setup + +Before we start creating our compressed NFT collection, we need to install a few +packages: + +- [`@solana/web3.js`](https://www.npmjs.com/package/@solana/web3.js) - the base + Solana JS SDK for interacting with the blockchain, including making our RPC + connection and sending transactions +- [`@solana/spl-token`](https://www.npmjs.com/package/@solana/spl-token) - used + in creating our collection and mint on-chain +- [`@solana/spl-account-compression`](https://www.npmjs.com/package/@solana/spl-account-compression) - + used to create the on-chain tree to store our compressed NFTs +- [`@metaplex-foundation/mpl-bubblegum`](https://www.npmjs.com/package/@metaplex-foundation/mpl-bubblegum) - + used to get the types and helper functions for minting and transferring + compressed NFTs on-chain +- [`@metaplex-foundation/mpl-token-metadata`](https://www.npmjs.com/package/@metaplex-foundation/mpl-token-metadata) - +used to get the types and helper functions for our NFT's metadata + + +Using your preferred package manager (e.g. npm, yarn, pnpm, etc), install these +packages into your project: + +```sh +yarn add @solana/web3.js @solana/spl-token @solana/spl-account-compression +``` + +```sh +yarn add @metaplex-foundation/mpl-bubblegum @metaplex-foundation/mpl-token-metadata +``` + +## Create a Collection + +NFTs are normally grouped together into a +[Collection](https://docs.metaplex.com/programs/token-metadata/certified-collections#collection-nfts) +using the Metaplex standard. This is true for **BOTH** traditional NFTs **AND** +compressed NFTs. The NFT Collection will store all the broad metadata for our +NFT grouping, such as the collection image and name that will appear in wallets +and explorers. + +Under the hood, an NFT collection acts similar to any other token on Solana. +More specifically, a Collection is effectively a uncompressed NFT. So we +actually create them following the same process of creating an +[SPL token](https://spl.solana.com/token): + +- create a new token "mint" +- create a associated token account (`ata`) for our token mint +- actually mint a single single token +- store the collection's metadata in an Account on-chain + +Since NFT Collections having nothing special to do with +[State Compression](../../learn/state-compression.md) or +[compressed NFTs](./compressed-nfts.md), we will not cover creating one in this +guide. + +### Collection addresses + +Even though this guide does not cover creating one, we will need the many of the +various addresses for your Collection, including: + +- `collectionAuthority` - this may be your `payer` but it also might not be +- `collectionMint` - the collection's mint address +- `collectionMetadata` - the collection's metadata account +- `editionAccount` - for example, the `masterEditionAccount` created for your + collection + +## Create a tree + +One of the most important decisions to make when creating compressed NFTs is +[how to setup your tree](../../learn/state-compression.md#sizing-a-concurrent-merkle-tree). +Especially since the values used to size your tree will determine the overall +cost of creation, and **CANNOT** be changed after creation. + +:::caution + +A tree is **NOT** the same thing as a collection. A single collection can use +_any_ number of trees. In fact, this is usually recommended for larger +collections due to smaller trees having greater composability. + +Conversely, even though a tree **could** be used in multiple collections, it is +generally considered an anti-pattern and is not recommended. + +::: + +Using the helper functions provided by the +[`@solana/spl-account-compression`](https://www.npmjs.com/package/@solana/spl-account-compression) +SDK, we can create our tree in the following steps: + +- decide on our tree size +- generate a new Keypair and allocated space for the tree on-chain +- actually create the tree (making it owned by the Bubblegum program) + +### Size your tree + +Your tree size is set by 3 values, each serving a very specific purpose: + +1. `maxDepth` - used to determine how many NFTs we can have in the tree +2. `maxBufferSize` - used to determine how many updates to your tree are + possible in the same block +3. `canopyDepth` - used to store a portion of the proof on chain, and as such is + a large of cost and composability of your compressed NFT collection + +:::info + +Read more about the details about +[State Compression](../../learn/state-compression.md), including +[how to size a tree](../../learn/state-compression.md#sizing-a-concurrent-merkle-tree) +and potential composability concerns. + +::: + +Let's assume we are going to create a compressed NFT collection with 10k NFTs in +it. And since our collection is relatively small, we only need a single smaller +tree to store all the NFTs: + +```ts +// define the depth and buffer size of our tree to be created +const maxDepthSizePair: ValidDepthSizePair = { + // max=16,384 nodes (for a `maxDepth` of 14) + maxDepth: 14, + maxBufferSize: 64, +}; + +// define the canopy depth of our tree to be created +const canopyDepth = 10; +``` + +Setting a `maxDepth` of `14` will allow our tree to hold up to `16,384` +compressed NFTs, more than exceeding our `10k` collection size. + +Since only specific +[`ValidDepthSizePair`](https://solana-labs.github.io/solana-program-library/account-compression/sdk/docs/modules/index.html#ValidDepthSizePair) +pairs are allowed, simply set the `maxBufferSize` to the corresponding value +tied to your desired `maxDepth`. + +Next, setting `canopyDepth` of `10` tells our tree to store `10` of our "proof +node hashes" on-chain. Thus requiring us to always include `4` proof node values +(i.e. `maxDepth - canopyDepth`) in every compressed NFT transfer instruction. + +### Generate addresses for the tree + +When creating a new tree, we need to generate a new +[Keypair](../../terminology.md#keypair) address for the tree to have: + +```ts +const treeKeypair = Keypair.generate(); +``` + +Since our tree will be used for compressed NFTs, we will also need to derive an +Account with authority that is owned by the Bubblegum program (i.e. PDA): + +```ts +// derive the tree's authority (PDA), owned by Bubblegum +const [treeAuthority, _bump] = PublicKey.findProgramAddressSync( + [treeKeypair.publicKey.toBuffer()], + BUBBLEGUM_PROGRAM_ID, +); +``` + +### Build the tree creation instructions + +With our tree size values defined, and our addresses generated, we need to build +two related instructions: + +1. allocate enough space on-chain for our tree +2. actually create the tree, owned by the Bubblegum program + +Using the +[`createAllocTreeIx`](https://solana-labs.github.io/solana-program-library/account-compression/sdk/docs/modules/index.html#createAllocTreeIx) +helper function, we allocate enough space on-chain for our tree. + +```ts +// allocate the tree's account on chain with the `space` +const allocTreeIx = await createAllocTreeIx( + connection, + treeKeypair.publicKey, + payer.publicKey, + maxDepthSizePair, + canopyDepth, +); +``` + +Then using the +[`createCreateTreeInstruction`](https://metaplex-foundation.github.io/metaplex-program-library/docs/bubblegum/functions/createCreateTreeInstruction.html) +from the Bubblegum SDK, we actually create the tree on-chain. Making it owned by +the Bubblegum program. + +```ts +// create the instruction to actually create the tree +const createTreeIx = createCreateTreeInstruction( + { + payer: payer.publicKey, + treeCreator: payer.publicKey, + treeAuthority, + merkleTree: treeKeypair.publicKey, + compressionProgram: SPL_ACCOUNT_COMPRESSION_PROGRAM_ID, + // NOTE: this is used for some on chain logging + logWrapper: SPL_NOOP_PROGRAM_ID, + }, + { + maxBufferSize: maxDepthSizePair.maxBufferSize, + maxDepth: maxDepthSizePair.maxDepth, + public: false, + }, + BUBBLEGUM_PROGRAM_ID, +); +``` + +### Build and send the transaction + +With our two instructions built, we can add them into a transaction and send +them to the blockchain, making sure both the `payer` and generated `treeKeypair` +sign the transaction: + +```ts +// build the transaction +const tx = new Transaction().add(allocTreeIx).add(createTreeIx); +tx.feePayer = payer.publicKey; + +// send the transaction +const txSignature = await sendAndConfirmTransaction( + connection, + tx, + // ensuring the `treeKeypair` PDA and the `payer` are BOTH signers + [treeKeypair, payer], + { + commitment: "confirmed", + skipPreflight: true, + }, +); +``` + +After a few short moments, and once the transaction is confirmed, we are ready +to start minting compressed NFTs into our tree. + +## Mint compressed NFTs + +Since compressed NFTs follow the same Metaplex +[metadata standards](https://docs.metaplex.com/programs/token-metadata/accounts#metadata) +as traditional NFTs, we can define our actual NFTs data the same way. + +The primary difference is that with compressed NFTs the metadata is actually +stored in the ledger (unlike traditional NFTs that store them in accounts). The +metadata gets "hashed" and stored in our tree, and by association, secured by +the Solana ledger. + +Allowing us to cryptographically verify that our original metadata has not +changed (unless we want it to). + +:::info + +Learn more about how State Compression uses +[concurrent merkle trees](../../learn/state-compression.md#what-is-a-concurrent-merkle-tree) +to cryptographically secure off-chain data using the Solana ledger. + +::: + +### Define our NFT's metadata + +We can define the specific metadata for the single NFT we are about to mint: + +```ts +const compressedNFTMetadata: MetadataArgs = { + name: "NFT Name", + symbol: "ANY", + // specific json metadata for each NFT + uri: "https://supersweetcollection.notarealurl/token.json", + creators: null, + editionNonce: 0, + uses: null, + collection: null, + primarySaleHappened: false, + sellerFeeBasisPoints: 0, + isMutable: false, + // these values are taken from the Bubblegum package + tokenProgramVersion: TokenProgramVersion.Original, + tokenStandard: TokenStandard.NonFungible, +}; +``` + +In this demo, the key pieces of our NFT's metadata to note are: + +- `name` - this is the actual name of our NFT that will be displayed in wallets + and on explorers. +- `uri` - this is the address for your NFTs metadata JSON file. +- `creators` - for this example, we are not storing a list of creators. If you + want your NFTs to have royalties, you will need to store actual data here. You + can checkout the Metaplex docs for more info on it. + +### Derive the Bubblegum signer + +When minting new compressed NFTs, the Bubblegum program needs a PDA to perform a +[cross-program invocation](../programming-model/calling-between-programs#cross-program-invocations) +(`cpi`) to the SPL compression program. + +:::caution + +This `bubblegumSigner` PDA is derived using a hard coded seed string of +`collection_cpi` and owned by the Bubblegum program. If this hard coded value is +not provided correctly, your compressed NFT minting will fail. + +::: + +Below, we derive this PDA using the **required** hard coded seed string of +`collection_cpi`: + +```ts +// derive a PDA (owned by Bubblegum) to act as the signer of the compressed minting +const [bubblegumSigner, _bump2] = PublicKey.findProgramAddressSync( + // `collection_cpi` is a custom prefix required by the Bubblegum program + [Buffer.from("collection_cpi", "utf8")], + BUBBLEGUM_PROGRAM_ID, +); +``` + +### Create the mint instruction + +Now we should have all the information we need to actually mint our compressed +NFT. + +Using the `createMintToCollectionV1Instruction` helper function provided in the +Bubblegum SDK, we can craft the instruction to actually mint our compressed NFT +directly into our collection. + +If you have minted traditional NFTs on Solana, this will look fairly similar. We +are creating a new instruction, giving several of the account addresses you +might expect (e.g. the `payer`, `tokenMetadataProgram`, and various collection +addresses), and then some tree specific addresses. + +The addresses to pay special attention to are: + +- `leafOwner` - this will be the owner of the compressed NFT. You can either + mint it your self (i.e. the `payer`), or airdrop to any other Solana address +- `leafDelegate` - this is the delegated authority of this specific NFT we are + about to mint. If you do not want to have a delegated authority for the NFT we + are about to mint, then this value should be set to the same address of + `leafOwner`. + +```ts +const compressedMintIx = createMintToCollectionV1Instruction( + { + payer: payer.publicKey, + + merkleTree: treeAddress, + treeAuthority, + treeDelegate: payer.publicKey, + + // set the receiver of the NFT + leafOwner: receiverAddress || payer.publicKey, + // set a delegated authority over this NFT + leafDelegate: payer.publicKey, + + // collection details + collectionAuthority: payer.publicKey, + collectionAuthorityRecordPda: BUBBLEGUM_PROGRAM_ID, + collectionMint: collectionMint, + collectionMetadata: collectionMetadata, + editionAccount: collectionMasterEditionAccount, + + // other accounts + bubblegumSigner: bubblegumSigner, + compressionProgram: SPL_ACCOUNT_COMPRESSION_PROGRAM_ID, + logWrapper: SPL_NOOP_PROGRAM_ID, + tokenMetadataProgram: TOKEN_METADATA_PROGRAM_ID, + }, + { + metadataArgs: Object.assign(compressedNFTMetadata, { + collection: { key: collectionMint, verified: false }, + }), + }, +); +``` + +Some of the other tree specific addresses are: + +- `merkleTree` - the address of our tree we created +- `treeAuthority` - the authority of the tree +- `treeDelegate` - the delegated authority of the entire tree + +Then we also have all of our NFT collection's addresses, including the mint +address, metadata account, and edition account. These addresses are also +standard to pass in when minting uncompressed NFTs. + +#### Sign and send the transaction + +Once our compressed mint instruction has been created, we can add it to a +transaction and send it to the Solana network: + +```ts +const tx = new Transaction().add(compressedMintIx); +tx.feePayer = payer.publicKey; + +// send the transaction to the cluster +const txSignature = await sendAndConfirmTransaction(connection, tx, [payer], { + commitment: "confirmed", + skipPreflight: true, +}); +``` + +## Reading compressed NFTs metadata + +With the help of a supporting RPC provider, developers can use the Digital Asset +Standard Read API (or "Read API" for short) to fetch the metadata of NFTs. + +:::info + +The Read API supports both compressed NFTs and traditional/uncompressed NFTs. +You can use the same RPC endpoints to retrieve all the assorted information for +both types of NFTs, including auto-fetching the NFTs' JSON URI. + +::: + +### Using the Read API + +When working with the Read API and a supporting RPC provider, developers can +make `POST` requests to the RPC endpoint using your preferred method of making +such requests (e.g. `curl`, JavaScript `fetch()`, etc). + +:::warning Asset ID + +Within the Read API, digital assets (i.e. NFTs) are indexed by their `id`. This +asset `id` value differs slightly between traditional NFTs and compressed NFTs: + +- for traditional/uncompressed NFTs: this is the token's address for the actual + Account on-chain that stores the metadata for the asset. +- for compressed NFTs: this is the `id` of the compressed NFT within the tree + and is **NOT** an actual on-chain Account address. While a compressed NFT's + `assetId` resembles a traditional Solana Account address, it is not. + +::: + +### Common Read API Methods + +While the Read API supports more than these listed below, the most commonly used +methods are: + +- `getAsset` - get a specific NFT asset by its `id` +- `getAssetProof` - returns the merkle proof that is required to transfer a + compressed NFT, by its asset `id` +- `getAssetsByOwner` - get the assets owned by a specific address +- `getAssetsByGroup` - get the assets by a specific grouping (i.e. a collection) + +:::info Read API Methods, Schema, and Specification + +Explore all the additional RPC methods added by Digital Asset Standard Read API +on [Metaplex's RPC Playground](https://metaplex-read-api.surge.sh/). Here you +will also find the expected inputs and response schema for each supported RPC +method. + +::: + +### Example Read API Request + +For demonstration, below is an example request for the `getAsset` method using +the +[JavaScript Fetch API](https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API), +which is built into modern JavaScript runtimes: + +```ts +// make a POST request to the RPC using the JavaScript `fetch` api +const response = await fetch(rpcEndpointUrl, { + method: "POST", + headers: { + "Content-Type": "application/json", + }, + body: JSON.stringify({ + jsonrpc: "2.0", + id: "rpd-op-123", + method: "getAsset", + params: { + id: "5q7qQ4FWYyj4vnFrivRBe6beo6p88X8HTkkyVPjPkQmF", + }, + }), +}); +``` + +### Example Read API Response + +With a successful response from the RPC, you should seem similar data to this: + +```ts +{ + interface: 'V1_NFT', + id: '5q7qQ4FWYyj4vnFrivRBe6beo6p88X8HTkkyVPjPkQmF', + content: [Object], + authorities: [Array], + compression: [Object], + grouping: [], + royalty: [Object], + creators: [], + ownership: [Object], + supply: [Object], + mutable: false +} +``` + +The response fields to pay special attention to are: + +- `id` - this is your asset's `id` +- `grouping` - can tell you the collection address that the NFT belongs to. The + collection address will be the `group_value`. +- `metadata` - contains the actual metadata for the NFT, including the auto + fetched JSON uri set when the NFT was minted +- `ownership` - gives you the NFT owner's address (and also if the NFT has + delegated authority to another address) +- `compression` - tells you if this NFT is actually using compression or not. + For compressed NFTs, this will also give you the tree address that is storing + the compressed NFT on chain. + +:::caution + +Some of the returned values may be empty if the NFT is **not** a compressed NFT, +such as many of the `compression` fields. This is expected. + +::: + +## Transfer compressed NFTs + +Transferring compressed NFTs is different from transferring uncompressed NFTs. +Aside from using a different on-chain program, compressed NFTs require the use +of a asset's "merkle proof" (or `proof` for short) to actually change ownership. + +:::info What is a merkle proof? + +An asset's "merkle proof" is a listing of all the "adjacent hashes" within the +tree that are required to validate a specific leaf within said tree. + +These proof hashes themselves, and the specific asset's leaf data, are hashed +together in a deterministic way to compute the "root hash". Therefore, allowing +for cryptographic validation of an asset within the merkle tree. + +**NOTE:** While each of these hash values resemble a Solana Account's +[address/public key](../../terminology.md#public-key-pubkey), they are not +addresses. + +::: + +Transferring ownership of a compressed NFT happens in 5 broad steps: + +1. get the NFT's "asset" data (from the indexer) +2. get the NFT's proof (from the indexer) +3. get the Merkle tree account (directly from the Solana blockchain) +4. prepare the asset proof +5. build and send the transfer instruction + +The first three steps primarily involve gathering specific pieces of information +(the `proof` and the tree's canopy depth) for the NFT to be transferred. These +pieces of information are needed to correctly parse/format the `proof` to +actually be sent within the transfer instruction itself. + +### Get the asset + +To perform the transfer of our compressed NFT, we will need to retrieve a few +pieces of information about the NFT. + +For starters, we will need to get some the asset's information in order to allow +the on-chain compression program to correctly perform validation and security +checks. + +We can use the `getAsset` RPC method to retrieve two important pieces of +information for the compressed NFT: the `data_hash` and `creator_hash`. + +#### Example response from the `getAsset` method + +Below is an example response from the `getAsset` method: + +```ts +compression: { + eligible: false, + compressed: true, + data_hash: 'D57LAefACeaJesajt6VPAxY4QFXhHjPyZbjq9efrt3jP', + creator_hash: '6Q7xtKPmmLihpHGVBA6u1ENE351YKoyqd3ssHACfmXbn', + asset_hash: 'F3oDH1mJ47Z7tNBHvrpN5UFf4VAeQSwTtxZeJmn7q3Fh', + tree: 'BBUkS4LZQ7mU8iZXYLVGNUjSxCYnB3x44UuPVHVXS9Fo', + seq: 3, + leaf_id: 0 +} +``` + +### Get the asset proof + +The next step in preparing your compressed NFT transfer instruction, is to get a +**valid** asset `proof` to perform the transfer. This proof is required by the +on-chain compression program to validate on-chain information. + +We can use the `getAssetProof` RPC method to retrieve two important pieces of +information: + +- `proof` - the "full proof" that is required to perform the transfer (more on + this below) +- `tree_id` - the on-chain address of the compressed NFTs tree + +:::info Full proof is returned + +The `getAssetProof` RPC method returns the complete listing of "proof hashes" +that are used to perform the compressed NFT transfer. Since this "full proof" is +returned from the RPC, we will need to remove the portion of the "full proof" +that is stored on-chain via the tree's `canopy`. + +::: + +#### Example response from the `getAssetProof` method + +Below is an example response from the `getAssetProof` method: + +```ts +{ + root: '7dy5bzgaRcUnNH2KMExwNXXNaCJnf7wQqxc2VrGXy9qr', + proof: [ + 'HdvzZ4hrPEdEarJfEzAavNJEZcCS1YU1fg2uBvQGwAAb', + ... + '3e2oBSLfSDVdUdS7jRGFKa8nreJUA9sFPEELrHaQyd4J' + ], + node_index: 131072, + leaf: 'F3oDH1mJ47Z7tNBHvrpN5UFf4VAeQSwTtxZeJmn7q3Fh', + tree_id: 'BBUkS4LZQ7mU8iZXYLVGNUjSxCYnB3x44UuPVHVXS9Fo' +} +``` + +### Get the Merkle tree account + +Since the `getAssetProof` will always return the "full proof", we will have to +reduce it down in order to remove the proof hashes that are stored on-chain in +the tree's canopy. But in order to remove the correct number of proof addresses, +we need to know the tree's `canopyDepth`. + +Once we have our compressed NFT's tree address (the `tree_id` value from +`getAssetProof`), we can use the +[`ConcurrentMerkleTreeAccount`](https://solana-labs.github.io/solana-program-library/account-compression/sdk/docs/classes/index.ConcurrentMerkleTreeAccount.html) +class, from the `@solana/spl-account-compression` SDK: + +```ts +// retrieve the merkle tree's account from the blockchain +const treeAccount = await ConcurrentMerkleTreeAccount.fromAccountAddress( + connection, + treeAddress, +); + +// extract the needed values for our transfer instruction +const treeAuthority = treeAccount.getAuthority(); +const canopyDepth = treeAccount.getCanopyDepth(); +``` + +For the transfer instruction, we will also need the current `treeAuthority` +address which we can also get via the `treeAccount`. + +### Prepare the asset proof + +With our "full proof" and `canopyDepth` values on hand, we can correctly format +the `proof` to be submitted within the transfer instruction itself. + +Since we will use the `createTransferInstruction` helper function from the +Bubblegum SDK to actually build our transfer instruction, we need to: + +- remove the proof values that are already stored on-chain in the + [tree's canopy](../../learn/state-compression.md#canopy-depth), and +- convert the remaining proof values into the valid `AccountMeta` structure that + the instruction builder function accepts + +```ts +// parse the list of proof addresses into a valid AccountMeta[] +const proof: AccountMeta[] = assetProof.proof + .slice(0, assetProof.proof.length - (!!canopyDepth ? canopyDepth : 0)) + .map((node: string) => ({ + pubkey: new PublicKey(node), + isSigner: false, + isWritable: false, + })); +``` + +In the TypeScript code example above, we are first taking a `slice` of our "full +proof", starting at the beginning of the array, and ensuring we only have +`proof.length - canopyDepth` number of proof values. This will remove the +portion of the proof that is already stored on-chain in the tree's canopy. + +Then we are structuring each of the remaining proof values as a valid +`AccountMeta`, since the proof is submitted on-chain in the form of "extra +accounts" within the transfer instruction. + +### Build the transfer instruction + +Finally, with all the required pieces of data about our tree and compressed +NFTs, and a correctly formatted proof, we are ready to actually create the +transfer instruction. + +Build your transfer instruction using the +[`createTransferInstruction`](https://metaplex-foundation.github.io/metaplex-program-library/docs/bubblegum/functions/createTransferInstruction.html) +helper function from the Bubblegum SDK: + +```ts +// create the NFT transfer instruction (via the Bubblegum package) +const transferIx = createTransferInstruction( + { + merkleTree: treeAddress, + treeAuthority, + leafOwner, + leafDelegate, + newLeafOwner, + logWrapper: SPL_NOOP_PROGRAM_ID, + compressionProgram: SPL_ACCOUNT_COMPRESSION_PROGRAM_ID, + anchorRemainingAccounts: proof, + }, + { + root: [...new PublicKey(assetProof.root.trim()).toBytes()], + dataHash: [...new PublicKey(asset.compression.data_hash.trim()).toBytes()], + creatorHash: [ + ...new PublicKey(asset.compression.creator_hash.trim()).toBytes(), + ], + nonce: asset.compression.leaf_id, + index: asset.compression.leaf_id, + }, + BUBBLEGUM_PROGRAM_ID, +); +``` + +Aside from passing in our assorted Account addresses and the asset's proof, we +are converting the string values of our `data_hash`, `creator_hash`, `root` hash +into an array of bytes that is accepted by the `createTransferInstruction` +helper function. + +Since each of these hash values resemble and are formatted similar to +PublicKeys, we can use the +[`PublicKey`](https://solana-labs.github.io/solana-web3.js/classes/PublicKey.html) +class in web3.js to convert them into a accepted byte array format. + +#### Send the transaction + +With our transfer instructions built, we can add it into a transaction and send +it to the blockchain similar to before. Making sure either the current +`leafOwner` or the `leafDelegate` signs the transaction. + +:::note + +After each successful transfer of a compressed NFT, the `leafDelegate` should +reset to an empty value. Meaning the specific asset will not have delegated +authority to an address other than its owner. + +::: + +And once confirmed by the cluster, we will have successfully transferred a +compressed NFT. + +## Example code repository + +You can find an example code repository for this developer guide on the Solana +Developers GitHub: https://github.com/solana-developers/compressed-nfts diff --git a/docs/src/learn/state-compression.md b/docs/src/learn/state-compression.md new file mode 100644 index 00000000000000..993544944b3d06 --- /dev/null +++ b/docs/src/learn/state-compression.md @@ -0,0 +1,334 @@ +--- +title: State Compression +description: + 'State Compression is the method of cheaply and securely storing + "fingerprints" of off-chain data in the Solana leger, instead of expensive + accounts.' +--- + +On Solana, [State Compression](./state-compression.md) is the method of creating +a "fingerprint" (or hash) of off-chain data and storing this fingerprint +on-chain for secure verification. Effectively using the security of the Solana +ledger to securely validate off-chain data, verifying it has not been tampered +with. + +This method of "compression" allows Solana programs and dApps to use cheap +blockchain [ledger](./../terminology.md#ledger) space, instead of the more +expensive [account](./../terminology.md#account) space, to securely store data. + +This is accomplished by using a special binary tree structure, known as a +[concurrent merkle tree](#what-is-a-concurrent-merkle-tree), to create a hash of +each piece of data (called a `leaf`), hashing those together, and only storing +this final hash on-chain. + +## What is State Compression? + +In simple terms, state compression uses "**_tree_**" structures to +cryptographically hash off-chain data together, in a deterministic way, to +compute a single final hash that gets stored on-chain. + +These _trees_ are created in this "_deterministic_" process by: + +- taking any piece of data +- creating a hash of this data +- storing this hash as a `leaf` the bottom of the tree +- each `leaf` pair is then hash together, creating a `branch` +- each `branch` is then hash together +- continually climbing the tree and hashing adjacent branches together +- once at the top of the tree, a final `root hash` is produced + +This `root hash` is then stored on chain, as a verifiable **_proof_** of all of +the data within every leaf. Allowing anyone to cryptographically verify all the +off-chain data within the tree, while only actually storing a **minimal** amount +of data on-chain. Therefore, significantly reducing the cost to store/prove +large amounts of data due to this "state compression". + +## Merkle trees and concurrent merkle trees + +Solana's state compression used a special type of +[merkle tree](#what-is-a-merkle-tree) that allows for multiple changes to any +given tree to happen, while still maintaining the integrity and validity of the +tree. + +This special tree, known as a +"[concurrent merkle tree](#what-is-a-concurrent-merkle-tree)", effectively +retains a "changelog" of the tree on-chain. Allowing for multiple rapid changes +to the same tree (i.e. all in the same block), before a proof is invalidated. + +### What is a merkle tree? + +A [merkle tree](https://en.wikipedia.org/wiki/merkle_tree), sometimes called a +"hash tree", is a hash based binary tree structure where each `leaf` node is +represented as a cryptographic hash of its inner data. And every node that is +**not** a leaf, called a `branch`, is represented as a hash of its child leaf +hashes. + +Each branch is then also hashed together, climbing the tree, until eventually +only a single hash remains. This final hash, called the `root hash` or "root", +can then be used in combination with a "proof path" to verify any piece of data +stored within a leaf node. + +Once a final `root hash` has been computed, any piece of data stored within a +`leaf` node can be verified by rehashing the specific leaf's data and the hash +label of each adjacent branch climbing the tree (known as the `proof` or "proof +path"). Comparing this "rehash" to the `root hash` is the verification of the +underlying leaf data. If they match, the data is verified accurate. If they do +not match, the leaf data was changed. + +Whenever desired, the original leaf data can be changed by simply hashing the +**new leaf** data and recomputing the root hash in the same manner of the +original root. This **new root hash** is then used to verify any of the data, +and effectively invalidates the previous root hash and previous proof. +Therefore, each change to these _traditional merkle trees_ are required to be +performed in series. + +:::info + +This process of changing leaf data, and computing a new root hash can be a +**very common** thing when using merkle trees! While it is one of the design +points of the tree, it can result in one of the most notable drawbacks: rapid +changes. + +::: + +### What is a Concurrent merkle tree? + +In high throughput applications, like within the +[Solana runtime](/src/validator/runtime.md), requests to change an on-chain +_traditional merkle tree_ could be received by validators in relatively rapid +succession (e.g. within the same slot). Each leaf data change would still be +required to performed in series. Resulting in each subsequent request for change +to fail, due to the root hash and proof being invalidated by the previous change +request in the slot. + +Enter, Concurrent merkle trees. + +A **Concurrent merkle tree** stores a **secure changelog** of the most recent +changes, their root hash, and the proof to derive it. This changelog "buffer" is +stored on-chain in an account specific to each tree, with a maximum number of +changelog "records" (aka `maxBufferSize`). + +When multiple leaf data change requests are received by validators in the same +slot, the on-chain _concurrent merkle tree_ can use this "changelog buffer" as a +source of truth for more acceptable proofs. Effectively allowing for up to +`maxBufferSize` changes to the same tree in the same slot. Significantly +boosting throughput. + +## Sizing a concurrent merkle tree + +When creating one of these on-chain trees, there are 3 values that will +determine the size of your tree, the cost to create your tree, and the number of +concurrent changes to your tree: + +1. max depth +2. max buffer size +3. canopy depth + +### Max depth + +The "max depth" of a tree is the **maximum number** of hops to get from any data +`leaf` to the `root` of the tree. + +Since merkle trees are binary trees, every leaf is connected to **only one** +other leaf; existing as a `leaf pair`. + +Therefore, the `maxDepth` of a tree is used to determine the maximum number of +nodes (aka pieces of data or `leafs`) to store within the tree using a simple +calculation: + +``` +nodes_count = 2 ^ maxDepth +``` + +Since a trees depth must be set at tree creation, you must decide how many +pieces of data you want your tree to store. Then using the simple calculation +above, you can determine the lowest `maxDepth` to store your data. + +#### Example 1: minting 100 nfts + +If you wanted to create a tree to store 100 compressed nfts, we will need a +minimum of "100 leafs" or "100 nodes". + +``` +// maxDepth=6 -> 64 nodes +2^6 = 64 + +// maxDepth=7 -> 128 nodes +2^7 = 128 +``` + +We must use a `maxDepth` of `7` to ensure we can store all of our data. + +#### Example 2: minting 15000 nfts + +If you wanted to create a tree to store 15000 compressed nfts, we will need a +minimum of "15000 leafs" or "15000 nodes". + +``` +// maxDepth=13 -> 8192 nodes +2^13 = 8192 + +// maxDepth=14 -> 16384 nodes +2^14 = 16384 +``` + +We must use a `maxDepth` of `14` to ensure we can store all of our data. + +#### The higher the max depth, the higher the cost + +The `maxDepth` value will be one of the primary drivers of cost when creating a +tree since you will pay this cost upfront at tree creation. The higher the max +tree depth depth, the more data fingerprints (aka hashes) you can store, the +higher the cost. + +### Max buffer size + +The "max buffer size" is effectively the maximum number of changes that can +occur on a tree, with the `root hash` still being valid. + +Due to the root hash effectively being a single hash of all leaf data, changing +any single leaf would invalidate the proof needed for all subsequent attempts to +change any leaf of a regular tree. + +But with a [concurrent tree](#what-is-a-concurrent-merkle-tree), there is +effectively a changelog of updates for these proofs. This changelog buffer is +sized and set at tree creation via this `maxBufferSize` value. + +### Canopy depth + +The "canopy depth", sometimes called the canopy size, is the number of proof +nodes that are cached/stored on-chain for any given proof path. + +When performing an update action on a `leaf`, like transferring ownership (e.g. +selling a compressed NFT), the **complete** proof path must be used to verify +original ownership of the leaf and therefore allow for the update action. This +verification is performed using the **complete** proof path to correctly compute +the current `root hash` (or any cached `root hash` via the on-chain "concurrent +buffer"). + +The larger a tree's max depth is, the more proof nodes are required to perform +this verification. For example, if your max depth is `14`, there are `14` total +proof nodes required to be used to verify. As a tree gets larger, the complete +proof path gets larger. + +Normally, each of these proof nodes would be required to be included within each +tree update transaction. Since each proof node value takes up `32 bytes` in a +transaction (similar to providing a Public Key), larger trees would very quickly +exceed the maximum transaction size limit. + +Enter the canopy. The canopy enables storing a set number of proof nodes on +chain (for any given proof path). Allowing for less proof nodes to be included +within each update transactions, therefore keeping the overall transaction size +below the limit. + +For example, a tree with a max depth of `14` would require `14` total proof +nodes. With a canopy of `10`, only `4` proof nodes are required to be submitted +per update transaction. + +#### The larger the canopy depth value, the higher the cost + +The `canopyDepth` value is also a primary factor of cost when creating a tree +since you will pay this cost upfront at tree creation. The higher the canopy +depth, the more data proof nodes are stored on chain, the higher the cost. + +#### Smaller canopy limits composability + +While a tree's creation costs are higher with a higher canopy, having a lower +`canopyDepth` will require more proof nodes to be included within each update +transaction. The more nodes required to be submitted, the larger the transaction +size, and therefore the easier it is to exceed the transaction size limits. + +This will also be the case for any other Solana program or dApp that attempts to +interact with your tree/leafs. If your tree requires too many proof nodes +(because of a low canopy depth), then any other additional actions another +on-chain program **could** offer will be **limited** by their specific +instruction size plus your proof node list size. Limiting composability, and +potential additional utility for your specific tree. + +For example, if your tree is being used for compressed NFTs and has a very low +canopy depth, an NFT marketplace may only be able to support simple NFTs +transfers. And not be able to support an on-chain bidding system. + +## Cost of creating a tree + +The cost of creating a concurrent merkle tree is based on the tree's size +parameters: `maxDepth`, `maxBufferSize`, and `canopyDepth`. These values are all +used to calculate the on-chain storage (in bytes) required for a tree to exist +on chain. + +Once the required space (in bytes) has been calculated, and using the +[`getMinimumBalanceForRentExemption`](/api/http#getminimumbalanceforrentexemption) +RPC method, request the cost (in lamports) to allocate this amount of bytes +on-chain. + +### Calculate tree cost in JavaScript + +Within the +[`@solana/spl-account-compression`](https://www.npmjs.com/package/@solana/spl-account-compression) +package, developers can use the +[`getConcurrentMerkleTreeAccountSize`](https://solana-labs.github.io/solana-program-library/account-compression/sdk/docs/modules/index.html#getConcurrentMerkleTreeAccountSize) +function to calculate the required space for a given tree size parameters. + +Then using the +[`getMinimumBalanceForRentExemption`](https://solana-labs.github.io/solana-web3.js/classes/Connection.html#getMinimumBalanceForRentExemption) +function to get the final cost (in lamports) to allocate the required space for +the tree on-chain. + +Then determine the cost in lamports to make an account of this size rent exempt, +similar to any other account creation. + +```ts +// calculate the space required for the tree +const requiredSpace = getConcurrentMerkleTreeAccountSize( + maxDepth, + maxBufferSize, + canopyDepth, +); + +// get the cost (in lamports) to store the tree on-chain +const storageCost = await connection.getMinimumBalanceForRentExemption( + requiredSpace, +); +``` + +### Example costs + +Listed below are several example costs, for different tree sizes, including how +many leaf nodes are possible for each: + +**Example #1: 16,384 nodes costing 0.222 SOL** + +- max depth of `14` and max buffer size of `64` +- maximum number of leaf nodes: `16,384` +- canopy depth of `0` costs approximately `0.222 SOL` to create + +**Example #2: 16,384 nodes costing 1.134 SOL** + +- max depth of `14` and max buffer size of `64` +- maximum number of leaf nodes: `16,384` +- canopy depth of `11` costs approximately `1.134 SOL` to create + +**Example #3: 1,048,576 nodes costing 1.673 SOL** + +- max depth of `20` and max buffer size of `256` +- maximum number of leaf nodes: `1,048,576` +- canopy depth of `10` costs approximately `1.673 SOL` to create + +**Example #4: 1,048,576 nodes costing 15.814 SOL** + +- max depth of `20` and max buffer size of `256` +- maximum number of leaf nodes: `1,048,576` +- canopy depth of `15` costs approximately `15.814 SOL` to create + +## Compressed NFTs + +Compressed NFTs are one of the most popular use cases for State Compression on +Solana. With compression, a one million NFT collection could be minted for +`~50 SOL`, vice `~12,000 SOL` for its uncompressed equivalent collection. + +:::info Developer Guide + +Read our developer guide for +[minting and transferring compressed NFTs](./../developing/guides/compressed-nfts). + +::: From 2230410e59ca895a3202a04229be1b9a85b50c10 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Tue, 11 Apr 2023 16:19:13 -0500 Subject: [PATCH 396/465] v1.14: [docs] added google analytics to docs (backport of #31141) (#31152) [docs] added google analytics to docs (#31141) * feat: added google analytics to docs * docs: added comments (cherry picked from commit ac761dd9c08f36ef18114c0e035eff1883238e11) Co-authored-by: Nick Frostbutter <75431177+nickfrosty@users.noreply.github.com> --- docs/docusaurus.config.js | 6 + docs/package-lock.json | 1101 ++++++++++++++++++++++++++++++++++++- docs/package.json | 1 + 3 files changed, 1090 insertions(+), 18 deletions(-) diff --git a/docs/docusaurus.config.js b/docs/docusaurus.config.js index 651c3d136f87c0..95b13418385242 100644 --- a/docs/docusaurus.config.js +++ b/docs/docusaurus.config.js @@ -211,6 +211,12 @@ module.exports = { theme: { customCss: require.resolve("./src/css/custom.css"), }, + // Google Analytics are only active in prod + gtag: { + // this GA code is safe to be published + trackingID: "G-94WS0LRZRS", + anonymizeIP: true, + }, }, ], ], diff --git a/docs/package-lock.json b/docs/package-lock.json index d9fb5bc1120564..f98935ffa7dad2 100644 --- a/docs/package-lock.json +++ b/docs/package-lock.json @@ -10,6 +10,7 @@ "dependencies": { "@crowdin/cli": "^3.6.1", "@docusaurus/core": "^2.2.0", + "@docusaurus/plugin-google-gtag": "^2.4.0", "@docusaurus/preset-classic": "^2.2.0", "@docusaurus/theme-search-algolia": "^2.2.0", "babel-eslint": "^10.1.0", @@ -1973,6 +1974,28 @@ "crowdin": "jdeploy-bundle/jdeploy.js" } }, + "node_modules/@cspotcode/source-map-support": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "peer": true, + "dependencies": { + "@jridgewell/trace-mapping": "0.3.9" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "peer": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, "node_modules/@docsearch/css": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/@docsearch/css/-/css-3.2.2.tgz", @@ -2484,23 +2507,475 @@ } }, "node_modules/@docusaurus/plugin-google-gtag": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-2.2.0.tgz", - "integrity": "sha512-6SOgczP/dYdkqUMGTRqgxAS1eTp6MnJDAQMy8VCF1QKbWZmlkx4agHDexihqmYyCujTYHqDAhm1hV26EET54NQ==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-2.4.0.tgz", + "integrity": "sha512-adj/70DANaQs2+TF/nRdMezDXFAV/O/pjAbUgmKBlyOTq5qoMe0Tk4muvQIwWUmiUQxFJe+sKlZGM771ownyOg==", "dependencies": { - "@docusaurus/core": "2.2.0", - "@docusaurus/types": "2.2.0", - "@docusaurus/utils-validation": "2.2.0", + "@docusaurus/core": "2.4.0", + "@docusaurus/types": "2.4.0", + "@docusaurus/utils-validation": "2.4.0", + "tslib": "^2.4.0" + }, + "engines": { + "node": ">=16.14" + }, + "peerDependencies": { + "react": "^16.8.4 || ^17.0.0", + "react-dom": "^16.8.4 || ^17.0.0" + } + }, + "node_modules/@docusaurus/plugin-google-gtag/node_modules/@docusaurus/core": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-2.4.0.tgz", + "integrity": "sha512-J55/WEoIpRcLf3afO5POHPguVZosKmJEQWKBL+K7TAnfuE7i+Y0NPLlkKtnWCehagGsgTqClfQEexH/UT4kELA==", + "dependencies": { + "@babel/core": "^7.18.6", + "@babel/generator": "^7.18.7", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-transform-runtime": "^7.18.6", + "@babel/preset-env": "^7.18.6", + "@babel/preset-react": "^7.18.6", + "@babel/preset-typescript": "^7.18.6", + "@babel/runtime": "^7.18.6", + "@babel/runtime-corejs3": "^7.18.6", + "@babel/traverse": "^7.18.8", + "@docusaurus/cssnano-preset": "2.4.0", + "@docusaurus/logger": "2.4.0", + "@docusaurus/mdx-loader": "2.4.0", + "@docusaurus/react-loadable": "5.5.2", + "@docusaurus/utils": "2.4.0", + "@docusaurus/utils-common": "2.4.0", + "@docusaurus/utils-validation": "2.4.0", + "@slorber/static-site-generator-webpack-plugin": "^4.0.7", + "@svgr/webpack": "^6.2.1", + "autoprefixer": "^10.4.7", + "babel-loader": "^8.2.5", + "babel-plugin-dynamic-import-node": "^2.3.3", + "boxen": "^6.2.1", + "chalk": "^4.1.2", + "chokidar": "^3.5.3", + "clean-css": "^5.3.0", + "cli-table3": "^0.6.2", + "combine-promises": "^1.1.0", + "commander": "^5.1.0", + "copy-webpack-plugin": "^11.0.0", + "core-js": "^3.23.3", + "css-loader": "^6.7.1", + "css-minimizer-webpack-plugin": "^4.0.0", + "cssnano": "^5.1.12", + "del": "^6.1.1", + "detect-port": "^1.3.0", + "escape-html": "^1.0.3", + "eta": "^2.0.0", + "file-loader": "^6.2.0", + "fs-extra": "^10.1.0", + "html-minifier-terser": "^6.1.0", + "html-tags": "^3.2.0", + "html-webpack-plugin": "^5.5.0", + "import-fresh": "^3.3.0", + "leven": "^3.1.0", + "lodash": "^4.17.21", + "mini-css-extract-plugin": "^2.6.1", + "postcss": "^8.4.14", + "postcss-loader": "^7.0.0", + "prompts": "^2.4.2", + "react-dev-utils": "^12.0.1", + "react-helmet-async": "^1.3.0", + "react-loadable": "npm:@docusaurus/react-loadable@5.5.2", + "react-loadable-ssr-addon-v5-slorber": "^1.0.1", + "react-router": "^5.3.3", + "react-router-config": "^5.1.1", + "react-router-dom": "^5.3.3", + "rtl-detect": "^1.0.4", + "semver": "^7.3.7", + "serve-handler": "^6.1.3", + "shelljs": "^0.8.5", + "terser-webpack-plugin": "^5.3.3", + "tslib": "^2.4.0", + "update-notifier": "^5.1.0", + "url-loader": "^4.1.1", + "wait-on": "^6.0.1", + "webpack": "^5.73.0", + "webpack-bundle-analyzer": "^4.5.0", + "webpack-dev-server": "^4.9.3", + "webpack-merge": "^5.8.0", + "webpackbar": "^5.0.2" + }, + "bin": { + "docusaurus": "bin/docusaurus.mjs" + }, + "engines": { + "node": ">=16.14" + }, + "peerDependencies": { + "react": "^16.8.4 || ^17.0.0", + "react-dom": "^16.8.4 || ^17.0.0" + } + }, + "node_modules/@docusaurus/plugin-google-gtag/node_modules/@docusaurus/cssnano-preset": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-2.4.0.tgz", + "integrity": "sha512-RmdiA3IpsLgZGXRzqnmTbGv43W4OD44PCo+6Q/aYjEM2V57vKCVqNzuafE94jv0z/PjHoXUrjr69SaRymBKYYw==", + "dependencies": { + "cssnano-preset-advanced": "^5.3.8", + "postcss": "^8.4.14", + "postcss-sort-media-queries": "^4.2.1", "tslib": "^2.4.0" }, "engines": { "node": ">=16.14" + } + }, + "node_modules/@docusaurus/plugin-google-gtag/node_modules/@docusaurus/logger": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@docusaurus/logger/-/logger-2.4.0.tgz", + "integrity": "sha512-T8+qR4APN+MjcC9yL2Es+xPJ2923S9hpzDmMtdsOcUGLqpCGBbU1vp3AAqDwXtVgFkq+NsEk7sHdVsfLWR/AXw==", + "dependencies": { + "chalk": "^4.1.2", + "tslib": "^2.4.0" + }, + "engines": { + "node": ">=16.14" + } + }, + "node_modules/@docusaurus/plugin-google-gtag/node_modules/@docusaurus/mdx-loader": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@docusaurus/mdx-loader/-/mdx-loader-2.4.0.tgz", + "integrity": "sha512-GWoH4izZKOmFoC+gbI2/y8deH/xKLvzz/T5BsEexBye8EHQlwsA7FMrVa48N063bJBH4FUOiRRXxk5rq9cC36g==", + "dependencies": { + "@babel/parser": "^7.18.8", + "@babel/traverse": "^7.18.8", + "@docusaurus/logger": "2.4.0", + "@docusaurus/utils": "2.4.0", + "@mdx-js/mdx": "^1.6.22", + "escape-html": "^1.0.3", + "file-loader": "^6.2.0", + "fs-extra": "^10.1.0", + "image-size": "^1.0.1", + "mdast-util-to-string": "^2.0.0", + "remark-emoji": "^2.2.0", + "stringify-object": "^3.3.0", + "tslib": "^2.4.0", + "unified": "^9.2.2", + "unist-util-visit": "^2.0.3", + "url-loader": "^4.1.1", + "webpack": "^5.73.0" + }, + "engines": { + "node": ">=16.14" + }, + "peerDependencies": { + "react": "^16.8.4 || ^17.0.0", + "react-dom": "^16.8.4 || ^17.0.0" + } + }, + "node_modules/@docusaurus/plugin-google-gtag/node_modules/@docusaurus/types": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-2.4.0.tgz", + "integrity": "sha512-xaBXr+KIPDkIaef06c+i2HeTqVNixB7yFut5fBXPGI2f1rrmEV2vLMznNGsFwvZ5XmA3Quuefd4OGRkdo97Dhw==", + "dependencies": { + "@types/history": "^4.7.11", + "@types/react": "*", + "commander": "^5.1.0", + "joi": "^17.6.0", + "react-helmet-async": "^1.3.0", + "utility-types": "^3.10.0", + "webpack": "^5.73.0", + "webpack-merge": "^5.8.0" }, "peerDependencies": { "react": "^16.8.4 || ^17.0.0", "react-dom": "^16.8.4 || ^17.0.0" } }, + "node_modules/@docusaurus/plugin-google-gtag/node_modules/@docusaurus/utils": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@docusaurus/utils/-/utils-2.4.0.tgz", + "integrity": "sha512-89hLYkvtRX92j+C+ERYTuSUK6nF9bGM32QThcHPg2EDDHVw6FzYQXmX6/p+pU5SDyyx5nBlE4qXR92RxCAOqfg==", + "dependencies": { + "@docusaurus/logger": "2.4.0", + "@svgr/webpack": "^6.2.1", + "escape-string-regexp": "^4.0.0", + "file-loader": "^6.2.0", + "fs-extra": "^10.1.0", + "github-slugger": "^1.4.0", + "globby": "^11.1.0", + "gray-matter": "^4.0.3", + "js-yaml": "^4.1.0", + "lodash": "^4.17.21", + "micromatch": "^4.0.5", + "resolve-pathname": "^3.0.0", + "shelljs": "^0.8.5", + "tslib": "^2.4.0", + "url-loader": "^4.1.1", + "webpack": "^5.73.0" + }, + "engines": { + "node": ">=16.14" + }, + "peerDependencies": { + "@docusaurus/types": "*" + }, + "peerDependenciesMeta": { + "@docusaurus/types": { + "optional": true + } + } + }, + "node_modules/@docusaurus/plugin-google-gtag/node_modules/@docusaurus/utils-common": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@docusaurus/utils-common/-/utils-common-2.4.0.tgz", + "integrity": "sha512-zIMf10xuKxddYfLg5cS19x44zud/E9I7lj3+0bv8UIs0aahpErfNrGhijEfJpAfikhQ8tL3m35nH3hJ3sOG82A==", + "dependencies": { + "tslib": "^2.4.0" + }, + "engines": { + "node": ">=16.14" + }, + "peerDependencies": { + "@docusaurus/types": "*" + }, + "peerDependenciesMeta": { + "@docusaurus/types": { + "optional": true + } + } + }, + "node_modules/@docusaurus/plugin-google-gtag/node_modules/@docusaurus/utils-validation": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@docusaurus/utils-validation/-/utils-validation-2.4.0.tgz", + "integrity": "sha512-IrBsBbbAp6y7mZdJx4S4pIA7dUyWSA0GNosPk6ZJ0fX3uYIEQgcQSGIgTeSC+8xPEx3c16o03en1jSDpgQgz/w==", + "dependencies": { + "@docusaurus/logger": "2.4.0", + "@docusaurus/utils": "2.4.0", + "joi": "^17.6.0", + "js-yaml": "^4.1.0", + "tslib": "^2.4.0" + }, + "engines": { + "node": ">=16.14" + } + }, + "node_modules/@docusaurus/plugin-google-gtag/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@docusaurus/plugin-google-gtag/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@docusaurus/plugin-google-gtag/node_modules/boxen": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-6.2.1.tgz", + "integrity": "sha512-H4PEsJXfFI/Pt8sjDWbHlQPx4zL/bvSQjcilJmaulGt5mLDorHOHpmdXAJcBcmru7PhYSp/cDMWRko4ZUMFkSw==", + "dependencies": { + "ansi-align": "^3.0.1", + "camelcase": "^6.2.0", + "chalk": "^4.1.2", + "cli-boxes": "^3.0.0", + "string-width": "^5.0.1", + "type-fest": "^2.5.0", + "widest-line": "^4.0.1", + "wrap-ansi": "^8.0.1" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@docusaurus/plugin-google-gtag/node_modules/cli-boxes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-3.0.0.tgz", + "integrity": "sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@docusaurus/plugin-google-gtag/node_modules/cosmiconfig": { + "version": "8.1.3", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.1.3.tgz", + "integrity": "sha512-/UkO2JKI18b5jVMJUp0lvKFMpa/Gye+ZgZjKD+DGEN9y7NRcf/nK1A0sp67ONmKtnDCNMS44E6jrk0Yc3bDuUw==", + "dependencies": { + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "parse-json": "^5.0.0", + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/d-fischer" + } + }, + "node_modules/@docusaurus/plugin-google-gtag/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" + }, + "node_modules/@docusaurus/plugin-google-gtag/node_modules/eta": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/eta/-/eta-2.0.1.tgz", + "integrity": "sha512-46E2qDPDm7QA+usjffUWz9KfXsxVZclPOuKsXs4ZWZdI/X1wpDF7AO424pt7fdYohCzWsIkXAhNGXSlwo5naAg==", + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "url": "https://github.com/eta-dev/eta?sponsor=1" + } + }, + "node_modules/@docusaurus/plugin-google-gtag/node_modules/postcss-loader": { + "version": "7.2.4", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-7.2.4.tgz", + "integrity": "sha512-F88rpxxNspo5hatIc+orYwZDtHFaVFOSIVAx+fBfJC1GmhWbVmPWtmg2gXKE1OxJbneOSGn8PWdIwsZFcruS+w==", + "dependencies": { + "cosmiconfig": "^8.1.3", + "cosmiconfig-typescript-loader": "^4.3.0", + "klona": "^2.0.6", + "semver": "^7.3.8" + }, + "engines": { + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "postcss": "^7.0.0 || ^8.0.1", + "ts-node": ">=10", + "typescript": ">=4", + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "ts-node": { + "optional": true + }, + "typescript": { + "optional": true + } + } + }, + "node_modules/@docusaurus/plugin-google-gtag/node_modules/react-loadable": { + "name": "@docusaurus/react-loadable", + "version": "5.5.2", + "resolved": "https://registry.npmjs.org/@docusaurus/react-loadable/-/react-loadable-5.5.2.tgz", + "integrity": "sha512-A3dYjdBGuy0IGT+wyLIGIKLRE+sAk1iNk0f1HjNDysO7u8lhL4N3VEm+FAubmJbAztn94F7MxBTPmnixbiyFdQ==", + "dependencies": { + "@types/react": "*", + "prop-types": "^15.6.2" + }, + "peerDependencies": { + "react": "*" + } + }, + "node_modules/@docusaurus/plugin-google-gtag/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@docusaurus/plugin-google-gtag/node_modules/strip-ansi": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", + "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/@docusaurus/plugin-google-gtag/node_modules/type-fest": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", + "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@docusaurus/plugin-google-gtag/node_modules/unified": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.2.tgz", + "integrity": "sha512-Sg7j110mtefBD+qunSLO1lqOEKdrwBFBrR6Qd8f4uwkhWNlbkaqwHse6e7QvD3AP/MNoJdEDLaf8OxYyoWgorQ==", + "dependencies": { + "bail": "^1.0.0", + "extend": "^3.0.0", + "is-buffer": "^2.0.0", + "is-plain-obj": "^2.0.0", + "trough": "^1.0.0", + "vfile": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/@docusaurus/plugin-google-gtag/node_modules/widest-line": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-4.0.1.tgz", + "integrity": "sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig==", + "dependencies": { + "string-width": "^5.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@docusaurus/plugin-google-gtag/node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, "node_modules/@docusaurus/plugin-sitemap": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/@docusaurus/plugin-sitemap/-/plugin-sitemap-2.2.0.tgz", @@ -2550,6 +3025,24 @@ "react-dom": "^16.8.4 || ^17.0.0" } }, + "node_modules/@docusaurus/preset-classic/node_modules/@docusaurus/plugin-google-gtag": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-2.2.0.tgz", + "integrity": "sha512-6SOgczP/dYdkqUMGTRqgxAS1eTp6MnJDAQMy8VCF1QKbWZmlkx4agHDexihqmYyCujTYHqDAhm1hV26EET54NQ==", + "dependencies": { + "@docusaurus/core": "2.2.0", + "@docusaurus/types": "2.2.0", + "@docusaurus/utils-validation": "2.2.0", + "tslib": "^2.4.0" + }, + "engines": { + "node": ">=16.14" + }, + "peerDependencies": { + "react": "^16.8.4 || ^17.0.0", + "react-dom": "^16.8.4 || ^17.0.0" + } + }, "node_modules/@docusaurus/react-loadable": { "version": "5.5.2", "resolved": "https://registry.npmjs.org/@docusaurus/react-loadable/-/react-loadable-5.5.2.tgz", @@ -3396,6 +3889,30 @@ "node": ">=10.13.0" } }, + "node_modules/@tsconfig/node10": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", + "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", + "peer": true + }, + "node_modules/@tsconfig/node12": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", + "peer": true + }, + "node_modules/@tsconfig/node14": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", + "peer": true + }, + "node_modules/@tsconfig/node16": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz", + "integrity": "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==", + "peer": true + }, "node_modules/@types/body-parser": { "version": "1.19.2", "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", @@ -5191,6 +5708,27 @@ "node": ">=10" } }, + "node_modules/cosmiconfig-typescript-loader": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/cosmiconfig-typescript-loader/-/cosmiconfig-typescript-loader-4.3.0.tgz", + "integrity": "sha512-NTxV1MFfZDLPiBMjxbHRwSh5LaLcPMwNdCutmnHJCKoVnlvldPWlllonKwrsRJ5pYZBIBGRWWU2tfvzxgeSW5Q==", + "engines": { + "node": ">=12", + "npm": ">=6" + }, + "peerDependencies": { + "@types/node": "*", + "cosmiconfig": ">=7", + "ts-node": ">=10", + "typescript": ">=3" + } + }, + "node_modules/create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "peer": true + }, "node_modules/cross-fetch": { "version": "3.1.5", "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz", @@ -5689,6 +6227,15 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, + "node_modules/diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "peer": true, + "engines": { + "node": ">=0.3.1" + } + }, "node_modules/dir-glob": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", @@ -8410,9 +8957,9 @@ } }, "node_modules/klona": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.5.tgz", - "integrity": "sha512-pJiBpiXMbt7dkzXe8Ghj/u4FfXOOa98fPW+bihOJ4SjnoijweJrNThJfd3ifXpXhREjpoF2mZVH1GfS9LV3kHQ==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.6.tgz", + "integrity": "sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==", "engines": { "node": ">= 8" } @@ -8593,6 +9140,12 @@ "semver": "bin/semver.js" } }, + "node_modules/make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "peer": true + }, "node_modules/markdown-escapes": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/markdown-escapes/-/markdown-escapes-1.0.4.tgz", @@ -12488,6 +13041,67 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/ts-node": { + "version": "10.9.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", + "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", + "peer": true, + "dependencies": { + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1", + "yn": "3.1.1" + }, + "bin": { + "ts-node": "dist/bin.js", + "ts-node-cwd": "dist/bin-cwd.js", + "ts-node-esm": "dist/bin-esm.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" + }, + "peerDependencies": { + "@swc/core": ">=1.2.50", + "@swc/wasm": ">=1.2.50", + "@types/node": "*", + "typescript": ">=2.7" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "@swc/wasm": { + "optional": true + } + } + }, + "node_modules/ts-node/node_modules/acorn": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", + "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", + "peer": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/ts-node/node_modules/arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "peer": true + }, "node_modules/tslib": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", @@ -12982,6 +13596,12 @@ "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==" }, + "node_modules/v8-compile-cache-lib": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", + "peer": true + }, "node_modules/value-equal": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/value-equal/-/value-equal-1.0.1.tgz", @@ -13627,6 +14247,15 @@ "fd-slicer": "~1.1.0" } }, + "node_modules/yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "peer": true, + "engines": { + "node": ">=6" + } + }, "node_modules/yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", @@ -15012,6 +15641,27 @@ "shelljs": "^0.8.4" } }, + "@cspotcode/source-map-support": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "peer": true, + "requires": { + "@jridgewell/trace-mapping": "0.3.9" + }, + "dependencies": { + "@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "peer": true, + "requires": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + } + } + }, "@docsearch/css": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/@docsearch/css/-/css-3.2.2.tgz", @@ -15374,14 +16024,321 @@ } }, "@docusaurus/plugin-google-gtag": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-2.2.0.tgz", - "integrity": "sha512-6SOgczP/dYdkqUMGTRqgxAS1eTp6MnJDAQMy8VCF1QKbWZmlkx4agHDexihqmYyCujTYHqDAhm1hV26EET54NQ==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-2.4.0.tgz", + "integrity": "sha512-adj/70DANaQs2+TF/nRdMezDXFAV/O/pjAbUgmKBlyOTq5qoMe0Tk4muvQIwWUmiUQxFJe+sKlZGM771ownyOg==", "requires": { - "@docusaurus/core": "2.2.0", - "@docusaurus/types": "2.2.0", - "@docusaurus/utils-validation": "2.2.0", + "@docusaurus/core": "2.4.0", + "@docusaurus/types": "2.4.0", + "@docusaurus/utils-validation": "2.4.0", "tslib": "^2.4.0" + }, + "dependencies": { + "@docusaurus/core": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-2.4.0.tgz", + "integrity": "sha512-J55/WEoIpRcLf3afO5POHPguVZosKmJEQWKBL+K7TAnfuE7i+Y0NPLlkKtnWCehagGsgTqClfQEexH/UT4kELA==", + "requires": { + "@babel/core": "^7.18.6", + "@babel/generator": "^7.18.7", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-transform-runtime": "^7.18.6", + "@babel/preset-env": "^7.18.6", + "@babel/preset-react": "^7.18.6", + "@babel/preset-typescript": "^7.18.6", + "@babel/runtime": "^7.18.6", + "@babel/runtime-corejs3": "^7.18.6", + "@babel/traverse": "^7.18.8", + "@docusaurus/cssnano-preset": "2.4.0", + "@docusaurus/logger": "2.4.0", + "@docusaurus/mdx-loader": "2.4.0", + "@docusaurus/react-loadable": "5.5.2", + "@docusaurus/utils": "2.4.0", + "@docusaurus/utils-common": "2.4.0", + "@docusaurus/utils-validation": "2.4.0", + "@slorber/static-site-generator-webpack-plugin": "^4.0.7", + "@svgr/webpack": "^6.2.1", + "autoprefixer": "^10.4.7", + "babel-loader": "^8.2.5", + "babel-plugin-dynamic-import-node": "^2.3.3", + "boxen": "^6.2.1", + "chalk": "^4.1.2", + "chokidar": "^3.5.3", + "clean-css": "^5.3.0", + "cli-table3": "^0.6.2", + "combine-promises": "^1.1.0", + "commander": "^5.1.0", + "copy-webpack-plugin": "^11.0.0", + "core-js": "^3.23.3", + "css-loader": "^6.7.1", + "css-minimizer-webpack-plugin": "^4.0.0", + "cssnano": "^5.1.12", + "del": "^6.1.1", + "detect-port": "^1.3.0", + "escape-html": "^1.0.3", + "eta": "^2.0.0", + "file-loader": "^6.2.0", + "fs-extra": "^10.1.0", + "html-minifier-terser": "^6.1.0", + "html-tags": "^3.2.0", + "html-webpack-plugin": "^5.5.0", + "import-fresh": "^3.3.0", + "leven": "^3.1.0", + "lodash": "^4.17.21", + "mini-css-extract-plugin": "^2.6.1", + "postcss": "^8.4.14", + "postcss-loader": "^7.0.0", + "prompts": "^2.4.2", + "react-dev-utils": "^12.0.1", + "react-helmet-async": "^1.3.0", + "react-loadable": "npm:@docusaurus/react-loadable@5.5.2", + "react-loadable-ssr-addon-v5-slorber": "^1.0.1", + "react-router": "^5.3.3", + "react-router-config": "^5.1.1", + "react-router-dom": "^5.3.3", + "rtl-detect": "^1.0.4", + "semver": "^7.3.7", + "serve-handler": "^6.1.3", + "shelljs": "^0.8.5", + "terser-webpack-plugin": "^5.3.3", + "tslib": "^2.4.0", + "update-notifier": "^5.1.0", + "url-loader": "^4.1.1", + "wait-on": "^6.0.1", + "webpack": "^5.73.0", + "webpack-bundle-analyzer": "^4.5.0", + "webpack-dev-server": "^4.9.3", + "webpack-merge": "^5.8.0", + "webpackbar": "^5.0.2" + } + }, + "@docusaurus/cssnano-preset": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-2.4.0.tgz", + "integrity": "sha512-RmdiA3IpsLgZGXRzqnmTbGv43W4OD44PCo+6Q/aYjEM2V57vKCVqNzuafE94jv0z/PjHoXUrjr69SaRymBKYYw==", + "requires": { + "cssnano-preset-advanced": "^5.3.8", + "postcss": "^8.4.14", + "postcss-sort-media-queries": "^4.2.1", + "tslib": "^2.4.0" + } + }, + "@docusaurus/logger": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@docusaurus/logger/-/logger-2.4.0.tgz", + "integrity": "sha512-T8+qR4APN+MjcC9yL2Es+xPJ2923S9hpzDmMtdsOcUGLqpCGBbU1vp3AAqDwXtVgFkq+NsEk7sHdVsfLWR/AXw==", + "requires": { + "chalk": "^4.1.2", + "tslib": "^2.4.0" + } + }, + "@docusaurus/mdx-loader": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@docusaurus/mdx-loader/-/mdx-loader-2.4.0.tgz", + "integrity": "sha512-GWoH4izZKOmFoC+gbI2/y8deH/xKLvzz/T5BsEexBye8EHQlwsA7FMrVa48N063bJBH4FUOiRRXxk5rq9cC36g==", + "requires": { + "@babel/parser": "^7.18.8", + "@babel/traverse": "^7.18.8", + "@docusaurus/logger": "2.4.0", + "@docusaurus/utils": "2.4.0", + "@mdx-js/mdx": "^1.6.22", + "escape-html": "^1.0.3", + "file-loader": "^6.2.0", + "fs-extra": "^10.1.0", + "image-size": "^1.0.1", + "mdast-util-to-string": "^2.0.0", + "remark-emoji": "^2.2.0", + "stringify-object": "^3.3.0", + "tslib": "^2.4.0", + "unified": "^9.2.2", + "unist-util-visit": "^2.0.3", + "url-loader": "^4.1.1", + "webpack": "^5.73.0" + } + }, + "@docusaurus/types": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-2.4.0.tgz", + "integrity": "sha512-xaBXr+KIPDkIaef06c+i2HeTqVNixB7yFut5fBXPGI2f1rrmEV2vLMznNGsFwvZ5XmA3Quuefd4OGRkdo97Dhw==", + "requires": { + "@types/history": "^4.7.11", + "@types/react": "*", + "commander": "^5.1.0", + "joi": "^17.6.0", + "react-helmet-async": "^1.3.0", + "utility-types": "^3.10.0", + "webpack": "^5.73.0", + "webpack-merge": "^5.8.0" + } + }, + "@docusaurus/utils": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@docusaurus/utils/-/utils-2.4.0.tgz", + "integrity": "sha512-89hLYkvtRX92j+C+ERYTuSUK6nF9bGM32QThcHPg2EDDHVw6FzYQXmX6/p+pU5SDyyx5nBlE4qXR92RxCAOqfg==", + "requires": { + "@docusaurus/logger": "2.4.0", + "@svgr/webpack": "^6.2.1", + "escape-string-regexp": "^4.0.0", + "file-loader": "^6.2.0", + "fs-extra": "^10.1.0", + "github-slugger": "^1.4.0", + "globby": "^11.1.0", + "gray-matter": "^4.0.3", + "js-yaml": "^4.1.0", + "lodash": "^4.17.21", + "micromatch": "^4.0.5", + "resolve-pathname": "^3.0.0", + "shelljs": "^0.8.5", + "tslib": "^2.4.0", + "url-loader": "^4.1.1", + "webpack": "^5.73.0" + } + }, + "@docusaurus/utils-common": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@docusaurus/utils-common/-/utils-common-2.4.0.tgz", + "integrity": "sha512-zIMf10xuKxddYfLg5cS19x44zud/E9I7lj3+0bv8UIs0aahpErfNrGhijEfJpAfikhQ8tL3m35nH3hJ3sOG82A==", + "requires": { + "tslib": "^2.4.0" + } + }, + "@docusaurus/utils-validation": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@docusaurus/utils-validation/-/utils-validation-2.4.0.tgz", + "integrity": "sha512-IrBsBbbAp6y7mZdJx4S4pIA7dUyWSA0GNosPk6ZJ0fX3uYIEQgcQSGIgTeSC+8xPEx3c16o03en1jSDpgQgz/w==", + "requires": { + "@docusaurus/logger": "2.4.0", + "@docusaurus/utils": "2.4.0", + "joi": "^17.6.0", + "js-yaml": "^4.1.0", + "tslib": "^2.4.0" + } + }, + "ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==" + }, + "ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==" + }, + "boxen": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-6.2.1.tgz", + "integrity": "sha512-H4PEsJXfFI/Pt8sjDWbHlQPx4zL/bvSQjcilJmaulGt5mLDorHOHpmdXAJcBcmru7PhYSp/cDMWRko4ZUMFkSw==", + "requires": { + "ansi-align": "^3.0.1", + "camelcase": "^6.2.0", + "chalk": "^4.1.2", + "cli-boxes": "^3.0.0", + "string-width": "^5.0.1", + "type-fest": "^2.5.0", + "widest-line": "^4.0.1", + "wrap-ansi": "^8.0.1" + } + }, + "cli-boxes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-3.0.0.tgz", + "integrity": "sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==" + }, + "cosmiconfig": { + "version": "8.1.3", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.1.3.tgz", + "integrity": "sha512-/UkO2JKI18b5jVMJUp0lvKFMpa/Gye+ZgZjKD+DGEN9y7NRcf/nK1A0sp67ONmKtnDCNMS44E6jrk0Yc3bDuUw==", + "requires": { + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "parse-json": "^5.0.0", + "path-type": "^4.0.0" + } + }, + "emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" + }, + "eta": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/eta/-/eta-2.0.1.tgz", + "integrity": "sha512-46E2qDPDm7QA+usjffUWz9KfXsxVZclPOuKsXs4ZWZdI/X1wpDF7AO424pt7fdYohCzWsIkXAhNGXSlwo5naAg==" + }, + "postcss-loader": { + "version": "7.2.4", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-7.2.4.tgz", + "integrity": "sha512-F88rpxxNspo5hatIc+orYwZDtHFaVFOSIVAx+fBfJC1GmhWbVmPWtmg2gXKE1OxJbneOSGn8PWdIwsZFcruS+w==", + "requires": { + "cosmiconfig": "^8.1.3", + "cosmiconfig-typescript-loader": "^4.3.0", + "klona": "^2.0.6", + "semver": "^7.3.8" + } + }, + "react-loadable": { + "version": "npm:@docusaurus/react-loadable@5.5.2", + "resolved": "https://registry.npmjs.org/@docusaurus/react-loadable/-/react-loadable-5.5.2.tgz", + "integrity": "sha512-A3dYjdBGuy0IGT+wyLIGIKLRE+sAk1iNk0f1HjNDysO7u8lhL4N3VEm+FAubmJbAztn94F7MxBTPmnixbiyFdQ==", + "requires": { + "@types/react": "*", + "prop-types": "^15.6.2" + } + }, + "string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "requires": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + } + }, + "strip-ansi": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", + "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", + "requires": { + "ansi-regex": "^6.0.1" + } + }, + "type-fest": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", + "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==" + }, + "unified": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.2.tgz", + "integrity": "sha512-Sg7j110mtefBD+qunSLO1lqOEKdrwBFBrR6Qd8f4uwkhWNlbkaqwHse6e7QvD3AP/MNoJdEDLaf8OxYyoWgorQ==", + "requires": { + "bail": "^1.0.0", + "extend": "^3.0.0", + "is-buffer": "^2.0.0", + "is-plain-obj": "^2.0.0", + "trough": "^1.0.0", + "vfile": "^4.0.0" + } + }, + "widest-line": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-4.0.1.tgz", + "integrity": "sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig==", + "requires": { + "string-width": "^5.0.1" + } + }, + "wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "requires": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + } + } } }, "@docusaurus/plugin-sitemap": { @@ -15417,6 +16374,19 @@ "@docusaurus/theme-common": "2.2.0", "@docusaurus/theme-search-algolia": "2.2.0", "@docusaurus/types": "2.2.0" + }, + "dependencies": { + "@docusaurus/plugin-google-gtag": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-2.2.0.tgz", + "integrity": "sha512-6SOgczP/dYdkqUMGTRqgxAS1eTp6MnJDAQMy8VCF1QKbWZmlkx4agHDexihqmYyCujTYHqDAhm1hV26EET54NQ==", + "requires": { + "@docusaurus/core": "2.2.0", + "@docusaurus/types": "2.2.0", + "@docusaurus/utils-validation": "2.2.0", + "tslib": "^2.4.0" + } + } } }, "@docusaurus/react-loadable": { @@ -16007,6 +16977,30 @@ "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==" }, + "@tsconfig/node10": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", + "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", + "peer": true + }, + "@tsconfig/node12": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", + "peer": true + }, + "@tsconfig/node14": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", + "peer": true + }, + "@tsconfig/node16": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz", + "integrity": "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==", + "peer": true + }, "@types/body-parser": { "version": "1.19.2", "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", @@ -17404,6 +18398,18 @@ "yaml": "^1.10.0" } }, + "cosmiconfig-typescript-loader": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/cosmiconfig-typescript-loader/-/cosmiconfig-typescript-loader-4.3.0.tgz", + "integrity": "sha512-NTxV1MFfZDLPiBMjxbHRwSh5LaLcPMwNdCutmnHJCKoVnlvldPWlllonKwrsRJ5pYZBIBGRWWU2tfvzxgeSW5Q==", + "requires": {} + }, + "create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "peer": true + }, "cross-fetch": { "version": "3.1.5", "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz", @@ -17736,6 +18742,12 @@ } } }, + "diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "peer": true + }, "dir-glob": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", @@ -19716,9 +20728,9 @@ "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==" }, "klona": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.5.tgz", - "integrity": "sha512-pJiBpiXMbt7dkzXe8Ghj/u4FfXOOa98fPW+bihOJ4SjnoijweJrNThJfd3ifXpXhREjpoF2mZVH1GfS9LV3kHQ==" + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.6.tgz", + "integrity": "sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==" }, "latest-version": { "version": "5.1.0", @@ -19859,6 +20871,12 @@ } } }, + "make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "peer": true + }, "markdown-escapes": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/markdown-escapes/-/markdown-escapes-1.0.4.tgz", @@ -22653,6 +23671,41 @@ "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.5.tgz", "integrity": "sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==" }, + "ts-node": { + "version": "10.9.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", + "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", + "peer": true, + "requires": { + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1", + "yn": "3.1.1" + }, + "dependencies": { + "acorn": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", + "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", + "peer": true + }, + "arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "peer": true + } + } + }, "tslib": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", @@ -22970,6 +24023,12 @@ "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==" }, + "v8-compile-cache-lib": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", + "peer": true + }, "value-equal": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/value-equal/-/value-equal-1.0.1.tgz", @@ -23417,6 +24476,12 @@ "fd-slicer": "~1.1.0" } }, + "yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "peer": true + }, "yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", diff --git a/docs/package.json b/docs/package.json index 20404b59e65759..2be6040c558f80 100644 --- a/docs/package.json +++ b/docs/package.json @@ -22,6 +22,7 @@ "dependencies": { "@crowdin/cli": "^3.6.1", "@docusaurus/core": "^2.2.0", + "@docusaurus/plugin-google-gtag": "^2.4.0", "@docusaurus/preset-classic": "^2.2.0", "@docusaurus/theme-search-algolia": "^2.2.0", "babel-eslint": "^10.1.0", From cf563fcb3c045eb6efeb179090f8dfd6f753967a Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Wed, 12 Apr 2023 21:20:51 -0500 Subject: [PATCH 397/465] v1.14: ledger-tool: Skip compaction in purge command by default (backport of #30891) (#30965) ledger-tool: Skip compaction in purge command by default (#30891) Performing a manual ledger compaction can be very time consuming. Although the compaction will optimize storage use, swapping to skip compaction favors the command completing faster. Additionally, we no longer do regular compaction in the validator (via LedgerCleanupService) and instead make use of range deletion which is much more efficient. Given the above, this changes alters the default behavior to skip ledger compaction by default, and introduces a flag should a user really want to run compaction. For v1.14 BP, manually resolved to avoid hidden_unless_forced() call that is present in master but not v1.14. (cherry picked from commit 86cf0ad758a8da7cb5bdc76450aec5d3ed22f135) Co-authored-by: steviez --- ledger-tool/src/main.rs | 35 ++++++++++++++++++++++------------- 1 file changed, 22 insertions(+), 13 deletions(-) diff --git a/ledger-tool/src/main.rs b/ledger-tool/src/main.rs index c5e789b34f1aa1..fa95182d92177f 100644 --- a/ledger-tool/src/main.rs +++ b/ledger-tool/src/main.rs @@ -1882,7 +1882,20 @@ fn main() { .long("no-compaction") .required(false) .takes_value(false) - .help("Skip ledger compaction after purge") + .help("--no-compaction is deprecated, ledger compaction \ + after purge is disabled by default") + .conflicts_with("enable_compaction") + .hidden(true) + ) + .arg( + Arg::with_name("enable_compaction") + .long("enable-compaction") + .required(false) + .takes_value(false) + .help("Perform ledger compaction after purge. Compaction \ + will optimize storage space, but may take a long \ + time to complete.") + .conflicts_with("no_compaction") ) .arg( Arg::with_name("dead_slots_only") @@ -3676,17 +3689,13 @@ fn main() { ("purge", Some(arg_matches)) => { let start_slot = value_t_or_exit!(arg_matches, "start_slot", Slot); let end_slot = value_t!(arg_matches, "end_slot", Slot).ok(); - let no_compaction = arg_matches.is_present("no_compaction"); + let perform_compaction = arg_matches.is_present("enable_compaction"); let dead_slots_only = arg_matches.is_present("dead_slots_only"); let batch_size = value_t_or_exit!(arg_matches, "batch_size", usize); - let access_type = if !no_compaction { - AccessType::Primary - } else { - AccessType::PrimaryForMaintenance - }; + let blockstore = open_blockstore( &ledger_path, - access_type, + AccessType::PrimaryForMaintenance, wal_recovery_mode, &shred_storage_type, ); @@ -3717,19 +3726,19 @@ fn main() { exit(1); } info!( - "Purging data from slots {} to {} ({} slots) (skip compaction: {}) (dead slot only: {})", + "Purging data from slots {} to {} ({} slots) (do compaction: {}) (dead slot only: {})", start_slot, end_slot, end_slot - start_slot, - no_compaction, + perform_compaction, dead_slots_only, ); let purge_from_blockstore = |start_slot, end_slot| { blockstore.purge_from_next_slots(start_slot, end_slot); - if no_compaction { - blockstore.purge_slots(start_slot, end_slot, PurgeType::Exact); - } else { + if perform_compaction { blockstore.purge_and_compact_slots(start_slot, end_slot); + } else { + blockstore.purge_slots(start_slot, end_slot, PurgeType::Exact); } }; if !dead_slots_only { From 232d1f6b33df18117a65b5fcc859c67b2d984978 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Thu, 13 Apr 2023 15:28:26 +0800 Subject: [PATCH 398/465] v1.14: ci: use preinstalled openssl (backport of #31107) (#31183) ci: use preinstalled openssl (#31107) ci: use built-in openssl (cherry picked from commit fdecd0dcaa287e9f49abe9e1693f997f722ed7cd) Co-authored-by: Yihau Chen --- .github/workflows/release-artifacts.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/workflows/release-artifacts.yml b/.github/workflows/release-artifacts.yml index 36eb31d4e15515..82dc135e0fec16 100644 --- a/.github/workflows/release-artifacts.yml +++ b/.github/workflows/release-artifacts.yml @@ -47,8 +47,7 @@ jobs: id: build shell: bash run: | - choco install openssl - export OPENSSL_DIR="C:\Program Files\OpenSSL-Win64" + export OPENSSL_DIR="C:\Program Files\OpenSSL" choco install protoc export PROTOC="C:\ProgramData\chocolatey\lib\protoc\tools\bin\protoc.exe" source /tmp/env.sh From 3047af627c0f69f0a2b7d0f30e08b48eebf132fe Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Thu, 13 Apr 2023 14:03:38 -0500 Subject: [PATCH 399/465] v1.14: [docs][ci] skip usage doc build for non-deploys (backport of #31063) (#31188) [docs][ci] skip usage doc build for non-deploys (#31063) * build: skip cli usage doc build for non-deploys * fix: checking for CI * chore: removed trailing whitespace * fix: apease buildkite (cherry picked from commit 768405c410d2bf6008d50d9985ba5440009d8083) Co-authored-by: Nick Frostbutter <75431177+nickfrosty@users.noreply.github.com> --- docs/build-cli-usage.sh | 27 +++++++++++++++++++++++---- 1 file changed, 23 insertions(+), 4 deletions(-) diff --git a/docs/build-cli-usage.sh b/docs/build-cli-usage.sh index 17c7d1de0cbbdc..e994c54d83a570 100755 --- a/docs/build-cli-usage.sh +++ b/docs/build-cli-usage.sh @@ -4,6 +4,29 @@ set -e cd "$(dirname "$0")" cargo=../cargo +# shellcheck source=ci/env.sh +source ../ci/env.sh + +# Get current channel +eval "$(../ci/channel-info.sh)" + +# set the output file' location +out=${1:-src/cli/usage.md} + +# load the usage file's header +cat src/cli/.usage.md.header > "$out" + +# Skip generating the usage doc for non deployment commits of the docs +if [[ -n $CI ]]; then + if [[ $CI_BRANCH != $EDGE_CHANNEL* ]] && [[ $CI_BRANCH != $BETA_CHANNEL* ]] && [[ $CI_BRANCH != $STABLE_CHANNEL* ]]; then + echo "**NOTE:** The usage doc is only auto-generated during full production deployments of the docs" + echo "**NOTE:** This usage doc is auto-generated during deployments" >> "$out" + exit + fi +fi + +echo 'Building the solana cli from source...' + # shellcheck source=ci/rust-version.sh source ../ci/rust-version.sh stable @@ -14,10 +37,6 @@ source ../ci/rust-version.sh stable usage=$("$cargo" stable -q run -p solana-cli -- -C ~/.foo --help | sed -e 's|'"$HOME"'|~|g' -e 's/[[:space:]]\+$//') -out=${1:-src/cli/usage.md} - -cat src/cli/.usage.md.header > "$out" - section() { declare mark=${2:-"###"} declare section=$1 From b76da8be2366249c94548fba8c70d1e0c022cf86 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Fri, 14 Apr 2023 14:48:17 -0600 Subject: [PATCH 400/465] v1.14: Fix keygen usb panic (debug only) (backport of #31194) (#31195) * Fix keygen usb panic (debug only) (#31194) * Bump clap v3 * Use fallible method to check for confirm_key (cherry picked from commit 2147f0d0568510bff1f37b99df708189cecfb731) # Conflicts: # Cargo.lock # clap-v3-utils/Cargo.toml * Fix conflicts --------- Co-authored-by: Tyera --- Cargo.lock | 58 ++++++++++++++++++++---------------- clap-v3-utils/Cargo.toml | 2 +- clap-v3-utils/src/keypair.rs | 6 ++-- 3 files changed, 37 insertions(+), 29 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 087edefdb38b9d..f499beee63db58 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -800,26 +800,26 @@ dependencies = [ [[package]] name = "clap" -version = "3.1.8" +version = "3.2.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "71c47df61d9e16dc010b55dba1952a57d8c215dbb533fd13cdd13369aac73b1c" +checksum = "71655c45cb9845d3270c9d6df84ebe72b4dad3c2ba3f7023ad47c144e4e473a5" dependencies = [ "atty", "bitflags", "clap_derive", + "clap_lex", "indexmap", - "lazy_static", - "os_str_bytes", + "once_cell", "strsim 0.10.0", "termcolor", - "textwrap 0.15.0", + "textwrap 0.16.0", ] [[package]] name = "clap_derive" -version = "3.1.7" +version = "3.2.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3aab4734e083b809aaf5794e14e756d1c798d2c69c7f7de7a09a2f5214993c1" +checksum = "ea0c8bce528c4be4da13ea6fead8965e95b6073585a2f05204bd8f4119f82a65" dependencies = [ "heck 0.4.0", "proc-macro-error", @@ -828,6 +828,15 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "clap_lex" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2850f2f5a82cbf437dd5af4d49848fbdfc27c157c3d010345776f952765261c5" +dependencies = [ + "os_str_bytes", +] + [[package]] name = "combine" version = "3.8.1" @@ -2977,9 +2986,6 @@ name = "os_str_bytes" version = "6.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8e22443d1643a904602595ba1cd8f7d896afe56d26712531c5ff73a15b2fbf64" -dependencies = [ - "memchr", -] [[package]] name = "ouroboros" @@ -3740,7 +3746,7 @@ dependencies = [ name = "rbpf-cli" version = "1.14.18" dependencies = [ - "clap 3.1.8", + "clap 3.2.23", "serde", "serde_json", "solana-bpf-loader-program", @@ -4544,7 +4550,7 @@ dependencies = [ name = "solana-banking-bench" version = "1.14.18" dependencies = [ - "clap 3.1.8", + "clap 3.2.23", "crossbeam-channel", "log", "rand 0.7.3", @@ -4611,7 +4617,7 @@ dependencies = [ name = "solana-bench-streamer" version = "1.14.18" dependencies = [ - "clap 3.1.8", + "clap 3.2.23", "crossbeam-channel", "solana-net-utils", "solana-streamer", @@ -4718,7 +4724,7 @@ name = "solana-cargo-build-bpf" version = "1.14.18" dependencies = [ "cargo_metadata", - "clap 3.1.8", + "clap 3.2.23", "solana-sdk 1.14.18", ] @@ -4728,7 +4734,7 @@ version = "1.14.18" dependencies = [ "bzip2", "cargo_metadata", - "clap 3.1.8", + "clap 3.2.23", "log", "regex", "serial_test", @@ -4743,7 +4749,7 @@ name = "solana-cargo-test-bpf" version = "1.14.18" dependencies = [ "cargo_metadata", - "clap 3.1.8", + "clap 3.2.23", ] [[package]] @@ -4751,7 +4757,7 @@ name = "solana-cargo-test-sbf" version = "1.14.18" dependencies = [ "cargo_metadata", - "clap 3.1.8", + "clap 3.2.23", ] [[package]] @@ -4776,7 +4782,7 @@ name = "solana-clap-v3-utils" version = "1.14.18" dependencies = [ "chrono", - "clap 3.1.8", + "clap 3.2.23", "rpassword", "solana-perf", "solana-remote-wallet", @@ -5052,7 +5058,7 @@ name = "solana-dos" version = "1.14.18" dependencies = [ "bincode", - "clap 3.1.8", + "clap 3.2.23", "crossbeam-channel", "itertools", "log", @@ -5377,7 +5383,7 @@ name = "solana-keygen" version = "1.14.18" dependencies = [ "bs58", - "clap 3.1.8", + "clap 3.2.23", "dirs-next", "num_cpus", "solana-clap-v3-utils", @@ -5521,7 +5527,7 @@ name = "solana-log-analyzer" version = "1.14.18" dependencies = [ "byte-unit", - "clap 3.1.8", + "clap 3.2.23", "serde", "serde_json", "solana-logger 1.14.18", @@ -5598,7 +5604,7 @@ dependencies = [ name = "solana-net-shaper" version = "1.14.18" dependencies = [ - "clap 3.1.8", + "clap 3.2.23", "rand 0.7.3", "serde", "serde_json", @@ -5610,7 +5616,7 @@ name = "solana-net-utils" version = "1.14.18" dependencies = [ "bincode", - "clap 3.1.8", + "clap 3.2.23", "crossbeam-channel", "log", "nix", @@ -5689,7 +5695,7 @@ dependencies = [ name = "solana-poh-bench" version = "1.14.18" dependencies = [ - "clap 3.1.8", + "clap 3.2.23", "log", "rand 0.7.3", "rayon", @@ -6971,9 +6977,9 @@ dependencies = [ [[package]] name = "textwrap" -version = "0.15.0" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1141d4d61095b28419e22cb0bbf02755f5e54e0526f97f1e3d1d160e60885fb" +checksum = "222a222a5bfe1bba4a77b45ec488a741b3cb8872e5e499451fd7d0129c9c7c3d" [[package]] name = "thiserror" diff --git a/clap-v3-utils/Cargo.toml b/clap-v3-utils/Cargo.toml index b1613ad97fe8a1..e5cabf89cd97c4 100644 --- a/clap-v3-utils/Cargo.toml +++ b/clap-v3-utils/Cargo.toml @@ -11,7 +11,7 @@ edition = "2021" [dependencies] chrono = "0.4" -clap = { version = "3.1.5", features = ["cargo"] } +clap = { version = "3.2.23", features = ["cargo"] } rpassword = "6.0" solana-perf = { path = "../perf", version = "=1.14.18" } solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.18", default-features = false } diff --git a/clap-v3-utils/src/keypair.rs b/clap-v3-utils/src/keypair.rs index 8fe60437112e21..d1a92ac6fee2d7 100644 --- a/clap-v3-utils/src/keypair.rs +++ b/clap-v3-utils/src/keypair.rs @@ -789,11 +789,12 @@ pub fn signer_from_path_with_config( *wallet_manager = maybe_wallet_manager()?; } if let Some(wallet_manager) = wallet_manager { + let confirm_key = matches.try_contains_id("confirm_key").unwrap_or(false); Ok(Box::new(generate_remote_keypair( locator, derivation_path.unwrap_or_default(), wallet_manager, - matches.is_present("confirm_key"), + confirm_key, keypair_name, )?)) } else { @@ -917,11 +918,12 @@ pub fn resolve_signer_from_path( *wallet_manager = maybe_wallet_manager()?; } if let Some(wallet_manager) = wallet_manager { + let confirm_key = matches.try_contains_id("confirm_key").unwrap_or(false); let path = generate_remote_keypair( locator, derivation_path.unwrap_or_default(), wallet_manager, - matches.is_present("confirm_key"), + confirm_key, keypair_name, ) .map(|keypair| keypair.path)?; From 486457db0f3241747fb1388a3bfa0bdf9831fc60 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Mon, 17 Apr 2023 16:15:39 +0900 Subject: [PATCH 401/465] v1.14: add curve25519 multiscalar multiplication syscall (backport of #28216) (#31181) * add curve25519 multiscalar multiplication syscall (#28216) * add curve25519 multiscalar multiplication syscall * update compute unit costs * update tests * add update to compute budget * add syscall call function * update compute costs in tests * update syscall syntax (cherry picked from commit 3f63283edaeb2a879b482521a0335886210df98c) # Conflicts: # sdk/program/src/syscalls/definitions.rs * resolve conflict from cherry-pick * adjust syscall implementation to 1.14 style * use default memory region --------- Co-authored-by: samkim-crypto --- program-runtime/src/compute_budget.rs | 16 ++ programs/bpf/rust/curve25519/src/lib.rs | 14 ++ programs/bpf_loader/src/syscalls/mod.rs | 289 ++++++++++++++++++++++- sdk/program/src/syscalls/definitions.rs | 6 +- zk-token-sdk/src/curve25519/edwards.rs | 22 ++ zk-token-sdk/src/curve25519/ristretto.rs | 22 ++ 6 files changed, 363 insertions(+), 6 deletions(-) diff --git a/program-runtime/src/compute_budget.rs b/program-runtime/src/compute_budget.rs index f0dd852b51f0bd..5cb58fc6be1c44 100644 --- a/program-runtime/src/compute_budget.rs +++ b/program-runtime/src/compute_budget.rs @@ -67,6 +67,12 @@ pub struct ComputeBudget { pub curve25519_edwards_subtract_cost: u64, /// Number of compute units consumed to multiply a curve25519 edwards point pub curve25519_edwards_multiply_cost: u64, + /// Number of compute units consumed for a multiscalar multiplication (msm) of edwards points. + /// The total cost is calculated as `msm_base_cost + (length - 1) * msm_incremental_cost`. + pub curve25519_edwards_msm_base_cost: u64, + /// Number of compute units consumed for a multiscalar multiplication (msm) of edwards points. + /// The total cost is calculated as `msm_base_cost + (length - 1) * msm_incremental_cost`. + pub curve25519_edwards_msm_incremental_cost: u64, /// Number of compute units consumed to validate a curve25519 ristretto point pub curve25519_ristretto_validate_point_cost: u64, /// Number of compute units consumed to add two curve25519 ristretto points @@ -75,6 +81,12 @@ pub struct ComputeBudget { pub curve25519_ristretto_subtract_cost: u64, /// Number of compute units consumed to multiply a curve25519 ristretto point pub curve25519_ristretto_multiply_cost: u64, + /// Number of compute units consumed for a multiscalar multiplication (msm) of ristretto points. + /// The total cost is calculated as `msm_base_cost + (length - 1) * msm_incremental_cost`. + pub curve25519_ristretto_msm_base_cost: u64, + /// Number of compute units consumed for a multiscalar multiplication (msm) of ristretto points. + /// The total cost is calculated as `msm_base_cost + (length - 1) * msm_incremental_cost`. + pub curve25519_ristretto_msm_incremental_cost: u64, /// Optional program heap region size, if `None` then loader default pub heap_size: Option, /// Number of compute units per additional 32k heap above the default (~.5 @@ -113,10 +125,14 @@ impl ComputeBudget { curve25519_edwards_add_cost: 331, curve25519_edwards_subtract_cost: 329, curve25519_edwards_multiply_cost: 1_753, + curve25519_edwards_msm_base_cost: 1_870, + curve25519_edwards_msm_incremental_cost: 670, curve25519_ristretto_validate_point_cost: 117, curve25519_ristretto_add_cost: 367, curve25519_ristretto_subtract_cost: 366, curve25519_ristretto_multiply_cost: 1_804, + curve25519_ristretto_msm_base_cost: 1_870, + curve25519_ristretto_msm_incremental_cost: 670, heap_size: None, heap_cost: 8, mem_op_base_cost: 10, diff --git a/programs/bpf/rust/curve25519/src/lib.rs b/programs/bpf/rust/curve25519/src/lib.rs index 3f1e35ac4d5c20..a8096d65b34710 100644 --- a/programs/bpf/rust/curve25519/src/lib.rs +++ b/programs/bpf/rust/curve25519/src/lib.rs @@ -38,6 +38,13 @@ pub extern "C" fn entrypoint(_input: *mut u8) -> u64 { edwards::multiply_edwards(&scalar_one, &edwards_generator).expect("multiply_edwards") ); + msg!("multiscalar_multiply_edwards"); + assert_eq!( + edwards_generator, + edwards::multiscalar_multiply_edwards(&[scalar_one], &[edwards_generator]) + .expect("multiscalar_multiply_edwards"), + ); + let ristretto_identity = ristretto::PodRistrettoPoint([ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -64,6 +71,13 @@ pub extern "C" fn entrypoint(_input: *mut u8) -> u64 { .expect("multiply_ristretto") ); + msg!("multiscalar_multiply_ristretto"); + assert_eq!( + ristretto_generator, + ristretto::multiscalar_multiply_ristretto(&[scalar_one], &[ristretto_generator]) + .expect("multiscalar_multiply_ristretto"), + ); + 0 } diff --git a/programs/bpf_loader/src/syscalls/mod.rs b/programs/bpf_loader/src/syscalls/mod.rs index 0d76988aa43145..a012813bbbba5c 100644 --- a/programs/bpf_loader/src/syscalls/mod.rs +++ b/programs/bpf_loader/src/syscalls/mod.rs @@ -238,9 +238,7 @@ pub fn register_syscalls( SyscallBlake3::call, )?; - // Elliptic Curve Point Validation - // - // TODO: add group operations and multiscalar multiplications + // Elliptic Curve Operations register_feature_gated_syscall!( syscall_registry, curve25519_syscall_enabled, @@ -255,6 +253,13 @@ pub fn register_syscalls( SyscallCurveGroupOps::init, SyscallCurveGroupOps::call, )?; + register_feature_gated_syscall!( + syscall_registry, + curve25519_syscall_enabled, + b"sol_curve_multiscalar_mul", + SyscallCurveMultiscalarMultiplication::init, + SyscallCurveMultiscalarMultiplication::call, + )?; // Sysvars syscall_registry.register_syscall_by_name( @@ -1455,6 +1460,138 @@ declare_syscall!( } ); +declare_syscall!( + // Elliptic Curve Multiscalar Multiplication + // + // Currently, only curve25519 Edwards and Ristretto representations are supported + SyscallCurveMultiscalarMultiplication, + fn call( + &mut self, + curve_id: u64, + scalars_addr: u64, + points_addr: u64, + points_len: u64, + result_point_addr: u64, + memory_mapping: &mut MemoryMapping, + result: &mut Result>, + ) { + use solana_zk_token_sdk::curve25519::{ + curve_syscall_traits::*, edwards, ristretto, scalar, + }; + + let invoke_context = question_mark!( + self.invoke_context + .try_borrow() + .map_err(|_| SyscallError::InvokeContextBorrowFailed), + result + ); + + match curve_id { + CURVE25519_EDWARDS => { + let cost = invoke_context + .get_compute_budget() + .curve25519_edwards_msm_base_cost + .saturating_add( + invoke_context + .get_compute_budget() + .curve25519_edwards_msm_incremental_cost + .saturating_mul(points_len.saturating_sub(1)), + ); + question_mark!(invoke_context.get_compute_meter().consume(cost), result); + + let scalars = question_mark!( + translate_slice::( + memory_mapping, + scalars_addr, + points_len, + invoke_context.get_check_aligned(), + invoke_context.get_check_size(), + ), + result + ); + + let points = question_mark!( + translate_slice::( + memory_mapping, + points_addr, + points_len, + invoke_context.get_check_aligned(), + invoke_context.get_check_size(), + ), + result + ); + + if let Some(result_point) = edwards::multiscalar_multiply_edwards(scalars, points) { + *question_mark!( + translate_type_mut::( + memory_mapping, + result_point_addr, + invoke_context.get_check_aligned(), + ), + result + ) = result_point; + } else { + *result = Ok(1); + } + } + + CURVE25519_RISTRETTO => { + let cost = invoke_context + .get_compute_budget() + .curve25519_ristretto_msm_base_cost + .saturating_add( + invoke_context + .get_compute_budget() + .curve25519_ristretto_msm_incremental_cost + .saturating_mul(points_len.saturating_sub(1)), + ); + question_mark!(invoke_context.get_compute_meter().consume(cost), result); + + let scalars = question_mark!( + translate_slice::( + memory_mapping, + scalars_addr, + points_len, + invoke_context.get_check_aligned(), + invoke_context.get_check_size(), + ), + result + ); + + let points = question_mark!( + translate_slice::( + memory_mapping, + points_addr, + points_len, + invoke_context.get_check_aligned(), + invoke_context.get_check_size(), + ), + result + ); + + if let Some(result_point) = + ristretto::multiscalar_multiply_ristretto(scalars, points) + { + *question_mark!( + translate_type_mut::( + memory_mapping, + result_point_addr, + invoke_context.get_check_aligned(), + ), + result + ) = result_point; + } else { + *result = Ok(1); + } + } + + _ => { + *result = Ok(1); + } + } + } +); + declare_syscall!( // Blake3 SyscallBlake3, @@ -3477,6 +3614,152 @@ mod tests { ); } + #[test] + fn test_syscall_multiscalar_multiplication() { + use solana_zk_token_sdk::curve25519::curve_syscall_traits::{ + CURVE25519_EDWARDS, CURVE25519_RISTRETTO, + }; + + let config = Config::default(); + prepare_mockup!( + invoke_context, + transaction_context, + program_id, + bpf_loader::id(), + ); + + let scalar_a: [u8; 32] = [ + 254, 198, 23, 138, 67, 243, 184, 110, 236, 115, 236, 205, 205, 215, 79, 114, 45, 250, + 78, 137, 3, 107, 136, 237, 49, 126, 117, 223, 37, 191, 88, 6, + ]; + let scalar_b: [u8; 32] = [ + 254, 198, 23, 138, 67, 243, 184, 110, 236, 115, 236, 205, 205, 215, 79, 114, 45, 250, + 78, 137, 3, 107, 136, 237, 49, 126, 117, 223, 37, 191, 88, 6, + ]; + + let scalars = [scalar_a, scalar_b]; + let scalars_va = 0x100000000; + + let edwards_point_x: [u8; 32] = [ + 252, 31, 230, 46, 173, 95, 144, 148, 158, 157, 63, 10, 8, 68, 58, 176, 142, 192, 168, + 53, 61, 105, 194, 166, 43, 56, 246, 236, 28, 146, 114, 133, + ]; + let edwards_point_y: [u8; 32] = [ + 10, 111, 8, 236, 97, 189, 124, 69, 89, 176, 222, 39, 199, 253, 111, 11, 248, 186, 128, + 90, 120, 128, 248, 210, 232, 183, 93, 104, 111, 150, 7, 241, + ]; + let edwards_points = [edwards_point_x, edwards_point_y]; + let edwards_points_va = 0x200000000; + + let ristretto_point_x: [u8; 32] = [ + 130, 35, 97, 25, 18, 199, 33, 239, 85, 143, 119, 111, 49, 51, 224, 40, 167, 185, 240, + 179, 25, 194, 213, 41, 14, 155, 104, 18, 181, 197, 15, 112, + ]; + let ristretto_point_y: [u8; 32] = [ + 152, 156, 155, 197, 152, 232, 92, 206, 219, 159, 193, 134, 121, 128, 139, 36, 56, 191, + 51, 143, 72, 204, 87, 76, 110, 124, 101, 96, 238, 158, 42, 108, + ]; + let ristretto_points = [ristretto_point_x, ristretto_point_y]; + let ristretto_points_va = 0x300000000; + + let result_point: [u8; 32] = [0; 32]; + let result_point_va = 0x400000000; + + let mut memory_mapping = MemoryMapping::new::( + vec![ + MemoryRegion::default(), + MemoryRegion { + host_addr: scalars.as_ptr() as *const _ as u64, + vm_addr: scalars_va, + len: 64, + vm_gap_shift: 63, + is_writable: false, + }, + MemoryRegion { + host_addr: edwards_points.as_ptr() as *const _ as u64, + vm_addr: edwards_points_va, + len: 64, + vm_gap_shift: 63, + is_writable: false, + }, + MemoryRegion { + host_addr: ristretto_points.as_ptr() as *const _ as u64, + vm_addr: ristretto_points_va, + len: 64, + vm_gap_shift: 63, + is_writable: false, + }, + MemoryRegion { + host_addr: result_point.as_ptr() as *const _ as u64, + vm_addr: result_point_va, + len: 32, + vm_gap_shift: 63, + is_writable: true, + }, + ], + &config, + ) + .unwrap(); + + invoke_context + .get_compute_meter() + .borrow_mut() + .mock_set_remaining( + invoke_context + .get_compute_budget() + .curve25519_edwards_msm_base_cost + + invoke_context + .get_compute_budget() + .curve25519_edwards_msm_incremental_cost + + invoke_context + .get_compute_budget() + .curve25519_ristretto_msm_base_cost + + invoke_context + .get_compute_budget() + .curve25519_ristretto_msm_incremental_cost, + ); + + let mut syscall = SyscallCurveMultiscalarMultiplication { + invoke_context: Rc::new(RefCell::new(&mut invoke_context)), + }; + + let mut result: Result> = Ok(0); + syscall.call( + CURVE25519_EDWARDS, + scalars_va, + edwards_points_va, + 2, + result_point_va, + &mut memory_mapping, + &mut result, + ); + + assert_eq!(0, result.unwrap()); + let expected_product = [ + 30, 174, 168, 34, 160, 70, 63, 166, 236, 18, 74, 144, 185, 222, 208, 243, 5, 54, 223, + 172, 185, 75, 244, 26, 70, 18, 248, 46, 207, 184, 235, 60, + ]; + assert_eq!(expected_product, result_point); + + let mut result: Result> = Ok(0); + syscall.call( + CURVE25519_RISTRETTO, + scalars_va, + ristretto_points_va, + 2, + result_point_va, + &mut memory_mapping, + &mut result, + ); + + assert_eq!(0, result.unwrap()); + let expected_product = [ + 78, 120, 86, 111, 152, 64, 146, 84, 14, 236, 77, 147, 237, 190, 251, 241, 136, 167, 21, + 94, 84, 118, 92, 140, 120, 81, 30, 246, 173, 140, 195, 86, + ]; + assert_eq!(expected_product, result_point); + } + fn create_filled_type(zero_init: bool) -> T { let mut val = T::default(); let p = &mut val as *mut _ as *mut u8; diff --git a/sdk/program/src/syscalls/definitions.rs b/sdk/program/src/syscalls/definitions.rs index 75d2b6193a3c3d..8c06f85ec336cf 100644 --- a/sdk/program/src/syscalls/definitions.rs +++ b/sdk/program/src/syscalls/definitions.rs @@ -61,9 +61,9 @@ define_syscall!(fn sol_get_return_data(data: *mut u8, length: u64, program_id: * define_syscall!(fn sol_log_data(data: *const u8, data_len: u64)); define_syscall!(fn sol_get_processed_sibling_instruction(index: u64, meta: *mut ProcessedSiblingInstruction, program_id: *mut Pubkey, data: *mut u8, accounts: *mut AccountMeta) -> u64); define_syscall!(fn sol_get_stack_height() -> u64); -define_syscall!(fn sol_curve_validate_point(curve_id: u64, point: *const u8, result: *mut u8) -> u64); -define_syscall!(fn sol_curve_group_op(curve_id: u64, op_id: u64, left_point: *const u8, right_point: *const u8, result: *mut u8) -> u64); -define_syscall!(fn sol_curve_multiscalar_mul(curve_id: u64, scalars: *const u8, points: *const u8, result: *mut u8) -> u64); +define_syscall!(fn sol_curve_validate_point(curve_id: u64, point_addr: *const u8, result: *mut u8) -> u64); +define_syscall!(fn sol_curve_group_op(curve_id: u64, group_op: u64, left_input_addr: *const u8, right_input_addr: *const u8, result_point_addr: *mut u8) -> u64); +define_syscall!(fn sol_curve_multiscalar_mul(curve_id: u64, scalars_addr: *const u8, points_addr: *const u8, points_len: u64, result_point_addr: *mut u8) -> u64); define_syscall!(fn sol_curve_pairing_map(curve_id: u64, point: *const u8, result: *mut u8) -> u64); #[cfg(target_feature = "static-syscalls")] diff --git a/zk-token-sdk/src/curve25519/edwards.rs b/zk-token-sdk/src/curve25519/edwards.rs index b78a1c9d6c7a93..0dd019b1910d0a 100644 --- a/zk-token-sdk/src/curve25519/edwards.rs +++ b/zk-token-sdk/src/curve25519/edwards.rs @@ -217,6 +217,28 @@ mod target_arch { None } } + + pub fn multiscalar_multiply_edwards( + scalars: &[PodScalar], + points: &[PodEdwardsPoint], + ) -> Option { + let mut result_point = PodEdwardsPoint::zeroed(); + let result = unsafe { + solana_program::syscalls::sol_curve_multiscalar_mul( + CURVE25519_EDWARDS, + scalars.as_ptr() as *const u8, + points.as_ptr() as *const u8, + points.len() as u64, + &mut result_point.0 as *mut u8, + ) + }; + + if result == 0 { + Some(result_point) + } else { + None + } + } } #[cfg(test)] diff --git a/zk-token-sdk/src/curve25519/ristretto.rs b/zk-token-sdk/src/curve25519/ristretto.rs index d0c03c42f7b943..772441a32aa65f 100644 --- a/zk-token-sdk/src/curve25519/ristretto.rs +++ b/zk-token-sdk/src/curve25519/ristretto.rs @@ -219,6 +219,28 @@ mod target_arch { None } } + + pub fn multiscalar_multiply_ristretto( + scalars: &[PodScalar], + points: &[PodRistrettoPoint], + ) -> Option { + let mut result_point = PodRistrettoPoint::zeroed(); + let result = unsafe { + solana_program::syscalls::sol_curve_multiscalar_mul( + CURVE25519_RISTRETTO, + scalars.as_ptr() as *const u8, + points.as_ptr() as *const u8, + points.len() as u64, + &mut result_point.0 as *mut u8, + ) + }; + + if result == 0 { + Some(result_point) + } else { + None + } + } } #[cfg(test)] From 9e09f72ebf1703ba04710878a9674227702fb07d Mon Sep 17 00:00:00 2001 From: Yihau Chen Date: Mon, 17 Apr 2023 23:28:19 +0800 Subject: [PATCH 402/465] fix: lock spl-token-cli version in v2.3.0 (#31222) --- scripts/cargo-install-all.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/cargo-install-all.sh b/scripts/cargo-install-all.sh index eae5006c6f95c1..4d677138f8b775 100755 --- a/scripts/cargo-install-all.sh +++ b/scripts/cargo-install-all.sh @@ -144,7 +144,7 @@ mkdir -p "$installDir/bin" # Exclude `spl-token` binary for net.sh builds if [[ -z "$validatorOnly" ]]; then # shellcheck disable=SC2086 # Don't want to double quote $rust_version - "$cargo" $maybeRustVersion install --locked spl-token-cli --root "$installDir" + "$cargo" $maybeRustVersion install --locked spl-token-cli --version 2.3.0 --root "$installDir" fi ) From 38d6e651ef645b3b6da071fa8a9216b81aae91a9 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Mon, 17 Apr 2023 09:31:47 -0600 Subject: [PATCH 403/465] v1.14: doc: typo in geyser plugin doc (backport of #31125) (#31138) doc: typo in geyser plugin doc (#31125) doc: typo (cherry picked from commit 622141c5eb255d3855c138535c0f93003a0a79ae) Co-authored-by: DimAn --- docs/src/developing/plugins/geyser-plugins.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/src/developing/plugins/geyser-plugins.md b/docs/src/developing/plugins/geyser-plugins.md index 382f7f647f58d3..30ac70a4392ed0 100644 --- a/docs/src/developing/plugins/geyser-plugins.md +++ b/docs/src/developing/plugins/geyser-plugins.md @@ -141,7 +141,7 @@ The following method is used for notifying transactions: ) -> Result<()> ``` -The `ReplicaTransactionInfoVersionsoVersions` struct +The `ReplicaTransactionInfoVersions` struct contains the information about a streamed transaction. It wraps `ReplicaTransactionInfo` ``` From 47e168c6413c353af82ea47f752364b030ca1dd6 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Mon, 17 Apr 2023 13:09:14 -0500 Subject: [PATCH 404/465] v1.14: ledger-tool: Add deprecation warning for --no-compaction (backport of #31178) (#31214) ledger-tool: Add deprecation warning for --no-compaction (#31178) The argument is deprecated with a change in default behavior but this may not be obvious to a user; the warning makes this a bit more visible. (cherry picked from commit f3935f679e028dfec4950b4967f2b808bef789c3) Co-authored-by: steviez --- ledger-tool/src/main.rs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/ledger-tool/src/main.rs b/ledger-tool/src/main.rs index fa95182d92177f..0e3200970d7aa8 100644 --- a/ledger-tool/src/main.rs +++ b/ledger-tool/src/main.rs @@ -3690,6 +3690,9 @@ fn main() { let start_slot = value_t_or_exit!(arg_matches, "start_slot", Slot); let end_slot = value_t!(arg_matches, "end_slot", Slot).ok(); let perform_compaction = arg_matches.is_present("enable_compaction"); + if arg_matches.is_present("no_compaction") { + warn!("--no-compaction is deprecated and is now the default behavior."); + } let dead_slots_only = arg_matches.is_present("dead_slots_only"); let batch_size = value_t_or_exit!(arg_matches, "batch_size", usize); From ba61f146d0c2d8d146a5826445a25a803877c2f1 Mon Sep 17 00:00:00 2001 From: Tyera Date: Mon, 17 Apr 2023 14:45:38 -0600 Subject: [PATCH 405/465] v1.14: Hardcode newer rust version for crate publishing (#31224) Hardcode newer rust version for crate publishing --- ci/publish-crate.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/ci/publish-crate.sh b/ci/publish-crate.sh index 475038c203b283..d63015a4b93b93 100755 --- a/ci/publish-crate.sh +++ b/ci/publish-crate.sh @@ -2,6 +2,7 @@ set -e cd "$(dirname "$0")/.." source ci/semver_bash/semver.sh +export RUST_STABLE_VERSION=1.63.0 source ci/rust-version.sh stable cargo="$(readlink -f ./cargo)" From 638b4632974176eb33e14906d159a62d6e789312 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Tue, 18 Apr 2023 08:29:41 -0500 Subject: [PATCH 406/465] v1.14: [docs] clarify logsSubscribe `mentions` param (backport of #31225) (#31229) [docs] clarify logsSubscribe `mentions` param (#31225) * fix: clarify logsSubscribe mentions param * Update docs/src/api/websocket/_logsSubscribe.mdx Co-authored-by: Tyera * Update docs/src/api/websocket/_logsSubscribe.mdx Co-authored-by: Tyera --------- Co-authored-by: Tyera (cherry picked from commit 26bec21d0565fe51c51e358a66ce8936d5561d28) Co-authored-by: Nick Frostbutter <75431177+nickfrosty@users.noreply.github.com> --- docs/src/api/websocket/_logsSubscribe.mdx | 24 +++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/docs/src/api/websocket/_logsSubscribe.mdx b/docs/src/api/websocket/_logsSubscribe.mdx index f715bb8b521bac..6955004489cda9 100644 --- a/docs/src/api/websocket/_logsSubscribe.mdx +++ b/docs/src/api/websocket/_logsSubscribe.mdx @@ -27,7 +27,8 @@ Subscribe to transaction logging A string with one of the following values: - `all` - subscribe to all transactions except for simple vote transactions -- `allWithVotes` - subscribe to all transactions including simple vote transactions +- `allWithVotes` - subscribe to all transactions, including simple vote + transactions @@ -35,7 +36,17 @@ A string with one of the following values: An object with the following field: -- `mentions: [ ]` - array of Pubkeys (as base-58 encoded strings) to listen for being mentioned in any transaction +- `mentions: [ ]` - array containing a single Pubkey (as base-58 + encoded string); if present, subscribe to only transactions mentioning this address + +:::caution + +Currently, the `mentions` field +[only supports one](https://github.com/solana-labs/solana/blob/master/rpc/src/rpc_pubsub.rs#L481) +Pubkey string per method call. Listing additional addresses will result in an +error. + +::: @@ -100,8 +111,13 @@ Configuration object containing the following fields: The notification will be an RpcResponse JSON object with value equal to: - `signature: ` - The transaction signature base58 encoded. -- `err: ` - Error if transaction failed, null if transaction succeeded. [TransactionError definitions](https://github.com/solana-labs/solana/blob/c0c60386544ec9a9ec7119229f37386d9f070523/sdk/src/transaction/error.rs#L13) -- `logs: ` - Array of log messages the transaction instructions output during execution, null if simulation failed before the transaction was able to execute (for example due to an invalid blockhash or signature verification failure) +- `err: ` - Error if transaction failed, null if transaction + succeeded. + [TransactionError definitions](https://github.com/solana-labs/solana/blob/c0c60386544ec9a9ec7119229f37386d9f070523/sdk/src/transaction/error.rs#L13) +- `logs: ` - Array of log messages the transaction instructions + output during execution, null if simulation failed before the transaction was + able to execute (for example due to an invalid blockhash or signature + verification failure) Example: From 6496b627e4351c63ee05207b38347b6b158c04e8 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Tue, 18 Apr 2023 09:29:14 -0700 Subject: [PATCH 407/465] v1.14: clean up delegation errors (backport of #31202) (#31240) clean up delegation errors (#31202) * Make delegation errors more descriptive * Fix tests for StakeError::InsufficientDelegation (cherry picked from commit 07e038bceb4e13405892f5b8a7c7d8c52aa8a6ad) Co-authored-by: hana <81144685+2501babe@users.noreply.github.com> --- programs/stake/src/stake_instruction.rs | 4 ++-- programs/stake/src/stake_state.rs | 29 ++++++++++++++++++++++--- sdk/src/feature_set.rs | 5 +++++ 3 files changed, 33 insertions(+), 5 deletions(-) diff --git a/programs/stake/src/stake_instruction.rs b/programs/stake/src/stake_instruction.rs index 84cd9a4f965cd1..6ebb77ed8b5873 100644 --- a/programs/stake/src/stake_instruction.rs +++ b/programs/stake/src/stake_instruction.rs @@ -4311,7 +4311,7 @@ mod tests { /// When a destination account already has funds, ensure the minimum split amount reduces /// accordingly. #[test_case(feature_set_old_behavior(), &[Ok(()), Ok(())]; "old_behavior")] - #[test_case(feature_set_new_behavior(), &[ Err(InstructionError::InsufficientFunds), Err(InstructionError::InsufficientFunds) ] ; "new_behavior")] + #[test_case(feature_set_new_behavior(), &[ Err(StakeError::InsufficientDelegation.into()), Err(StakeError::InsufficientDelegation.into()) ] ; "new_behavior")] fn test_staked_split_destination_minimum_balance( feature_set: FeatureSet, expected_results: &[Result<(), InstructionError>], @@ -4961,7 +4961,7 @@ mod tests { &serialize(&StakeInstruction::Split(stake_lamports / 2)).unwrap(), transaction_accounts, instruction_accounts, - Err(StakeError::InsufficientStake.into()), + Err(StakeError::InsufficientDelegation.into()), ); } diff --git a/programs/stake/src/stake_state.rs b/programs/stake/src/stake_state.rs index a3d55e3d10ca5a..4b9a8a9f23b6c4 100644 --- a/programs/stake/src/stake_state.rs +++ b/programs/stake/src/stake_state.rs @@ -15,8 +15,8 @@ use { account_utils::StateMut, clock::{Clock, Epoch}, feature_set::{ - self, stake_allow_zero_undelegated_amount, stake_merge_with_unmatched_credits_observed, - stake_split_uses_rent_sysvar, FeatureSet, + self, clean_up_delegation_errors, stake_allow_zero_undelegated_amount, + stake_merge_with_unmatched_credits_observed, stake_split_uses_rent_sysvar, FeatureSet, }, instruction::{checked_add, InstructionError}, pubkey::Pubkey, @@ -731,6 +731,15 @@ pub fn split( } else { // Otherwise, the new split stake should reflect the entire split // requested, less any lamports needed to cover the split_rent_exempt_reserve. + + if invoke_context + .feature_set + .is_active(&clean_up_delegation_errors::id()) + && stake.delegation.stake.saturating_sub(lamports) < minimum_delegation + { + return Err(StakeError::InsufficientDelegation.into()); + } + ( lamports, lamports.saturating_sub( @@ -740,6 +749,15 @@ pub fn split( ), ) }; + + if invoke_context + .feature_set + .is_active(&clean_up_delegation_errors::id()) + && split_stake_amount < minimum_delegation + { + return Err(StakeError::InsufficientDelegation.into()); + } + let split_stake = stake.split(remaining_stake_delta, split_stake_amount)?; let mut split_meta = meta; split_meta.rent_exempt_reserve = validated_split_info.destination_rent_exempt_reserve; @@ -1287,7 +1305,12 @@ fn validate_split_amount( // account, the split amount must be at least the minimum stake delegation. So if the minimum // stake delegation was 10 lamports, then a split amount of 1 lamport would not meet the // *delegation* requirements. - if source_stake.is_some() && lamports < additional_required_lamports { + if !invoke_context + .feature_set + .is_active(&clean_up_delegation_errors::id()) + && source_stake.is_some() + && lamports < additional_required_lamports + { return Err(InstructionError::InsufficientFunds); } diff --git a/sdk/src/feature_set.rs b/sdk/src/feature_set.rs index 811ff476c4ffc4..d2609ba8db2c05 100644 --- a/sdk/src/feature_set.rs +++ b/sdk/src/feature_set.rs @@ -544,6 +544,10 @@ pub mod enable_request_heap_frame_ix { solana_sdk::declare_id!("Hr1nUA9b7NJ6eChS26o7Vi8gYYDDwWD3YeBfzJkTbU86"); } +pub mod clean_up_delegation_errors { + solana_sdk::declare_id!("Bj2jmUsM2iRhfdLLDSTkhM5UQRQvQHm57HSmPibPtEyu"); +} + lazy_static! { /// Map of feature identifiers to user-visible description pub static ref FEATURE_NAMES: HashMap = [ @@ -674,6 +678,7 @@ lazy_static! { (keep_merkle_shreds::id(), "keep merkle shreds #29711"), (move_serialized_len_ptr_in_cpi::id(), "cpi ignore serialized_len_ptr #29592"), (enable_request_heap_frame_ix::id(), "Enable transaction to request heap frame using compute budget instruction #30076"), + (clean_up_delegation_errors::id(), "Return InsufficientDelegation instead of InsufficientFunds or InsufficientStake where applicable #31206"), /*************** ADD NEW FEATURES HERE ***************/ ] .iter() From 9045929288014d22bcd5b8fe1e395638a4fae8b2 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Wed, 19 Apr 2023 21:46:44 +0000 Subject: [PATCH 408/465] v1.14: Fix bug where ReplayStage holds an Arc for process lifetime (backport of #31267) (#31271) Fix bug where ReplayStage holds an Arc for process lifetime When ReplayStage::new() kicks off, it needs to do some setup with the working bank prior to entering the main processing loop. This setup is done before entering the main processing loop; however, a bug made it such that an Arc remained in scope after the processing loop had been entered. The processing loop is only exited when the process exits, so this means that Bank was being held for the lifetime of the process. This is a waste of resources and prevents background cleanup. So, drop that bank immediately after use to free it before entering the processing loop. Co-authored-by: Steven Czabaniuk --- core/src/replay_stage.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/core/src/replay_stage.rs b/core/src/replay_stage.rs index f6ddd99e187e7f..3d92fbdcb77ef3 100644 --- a/core/src/replay_stage.rs +++ b/core/src/replay_stage.rs @@ -484,6 +484,7 @@ impl ReplayStage { &poh_recorder, &leader_schedule_cache, ); + drop(working_bank); loop { // Stop getting entries if we get exit signal From c715ce8f79d11805a0bff5666e3d1e12fceaed62 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Sat, 22 Apr 2023 14:24:14 -0500 Subject: [PATCH 409/465] v1.14: Register SendTransactionService exit (backport of #31261) (#31292) * Register SendTransactionService exit (#31261) * Pass exit into SendTransactionService * Abort SendTransactionService with BanksService * Register SendTransactionService exit as part of RpcService validator Exit * Improve test, ensure receiver has been dropped (cherry picked from commit 03c1744e1d03cb8c7cac6a10aff930007ed536ac) # Conflicts: # rpc/src/rpc_service.rs * Fix conflict --------- Co-authored-by: Tyera --- banks-server/src/banks_server.rs | 4 +- banks-server/src/rpc_banks_service.rs | 1 + rpc/src/rpc.rs | 3 ++ rpc/src/rpc_service.rs | 7 ++- .../src/send_transaction_service.rs | 49 ++++++++++++++++++- 5 files changed, 60 insertions(+), 4 deletions(-) diff --git a/banks-server/src/banks_server.rs b/banks-server/src/banks_server.rs index 1aff5220bec93b..cf0a1c6083d6b1 100644 --- a/banks-server/src/banks_server.rs +++ b/banks-server/src/banks_server.rs @@ -32,7 +32,7 @@ use { convert::TryFrom, io, net::{Ipv4Addr, SocketAddr}, - sync::{Arc, RwLock}, + sync::{atomic::AtomicBool, Arc, RwLock}, thread::Builder, time::Duration, }, @@ -395,6 +395,7 @@ pub async fn start_tcp_server( bank_forks: Arc>, block_commitment_cache: Arc>, connection_cache: Arc, + exit: Arc, ) -> io::Result<()> { // Note: These settings are copied straight from the tarpc example. let server = tcp::listen(listen_addr, Bincode::default) @@ -422,6 +423,7 @@ pub async fn start_tcp_server( &connection_cache, 5_000, 0, + exit.clone(), ); let server = BanksServer::new( diff --git a/banks-server/src/rpc_banks_service.rs b/banks-server/src/rpc_banks_service.rs index 8a2f48156291c8..f3224fb64ed87d 100644 --- a/banks-server/src/rpc_banks_service.rs +++ b/banks-server/src/rpc_banks_service.rs @@ -39,6 +39,7 @@ async fn start_abortable_tcp_server( bank_forks.clone(), block_commitment_cache.clone(), connection_cache, + exit.clone(), ) .fuse(); let interval = IntervalStream::new(time::interval(Duration::from_millis(100))).fuse(); diff --git a/rpc/src/rpc.rs b/rpc/src/rpc.rs index 030c92be41d80c..b2ad0e76ed504d 100644 --- a/rpc/src/rpc.rs +++ b/rpc/src/rpc.rs @@ -367,6 +367,7 @@ impl JsonRpcRequestProcessor { &connection_cache, 1000, 1, + exit.clone(), ); Self { @@ -6398,6 +6399,7 @@ pub mod tests { &connection_cache, 1000, 1, + exit, ); let mut bad_transaction = system_transaction::transfer( @@ -6670,6 +6672,7 @@ pub mod tests { &connection_cache, 1000, 1, + exit, ); assert_eq!( request_processor.get_block_commitment(0), diff --git a/rpc/src/rpc_service.rs b/rpc/src/rpc_service.rs index cbc367d939eef2..e297467cd4e7fe 100644 --- a/rpc/src/rpc_service.rs +++ b/rpc/src/rpc_service.rs @@ -470,6 +470,7 @@ impl JsonRpcService { prioritization_fee_cache, ); + let exit = Arc::new(AtomicBool::new(false)); let leader_info = poh_recorder.map(|recorder| ClusterTpuInfo::new(cluster_info.clone(), recorder)); let _send_transaction_service = Arc::new(SendTransactionService::new_with_config( @@ -479,6 +480,7 @@ impl JsonRpcService { receiver, &connection_cache, send_transaction_service_config, + exit.clone(), )); #[cfg(test)] @@ -548,7 +550,10 @@ impl JsonRpcService { validator_exit .write() .unwrap() - .register_exit(Box::new(move || close_handle_.close())); + .register_exit(Box::new(move || { + close_handle_.close(); + exit.store(true, Ordering::Relaxed); + })); Self { thread_hdl, #[cfg(test)] diff --git a/send-transaction-service/src/send_transaction_service.rs b/send-transaction-service/src/send_transaction_service.rs index a1b82e7676ab6b..5419cd0bb77793 100644 --- a/send-transaction-service/src/send_transaction_service.rs +++ b/send-transaction-service/src/send_transaction_service.rs @@ -332,6 +332,7 @@ impl SendTransactionService { connection_cache: &Arc, retry_rate_ms: u64, leader_forward_count: u64, + exit: Arc, ) -> Self { let config = Config { retry_rate_ms, @@ -345,6 +346,7 @@ impl SendTransactionService { receiver, connection_cache, config, + exit, ) } @@ -355,6 +357,7 @@ impl SendTransactionService { receiver: Receiver, connection_cache: &Arc, config: Config, + exit: Arc, ) -> Self { let stats_report = Arc::new(SendTransactionServiceStatsReport::default()); @@ -362,7 +365,6 @@ impl SendTransactionService { let leader_info_provider = Arc::new(Mutex::new(CurrentLeaderInfo::new(leader_info))); - let exit = Arc::new(AtomicBool::new(false)); let receive_txn_thread = Self::receive_txn_thread( tpu_address, receiver, @@ -776,7 +778,7 @@ mod test { use { super::*, crate::tpu_info::NullTpuInfo, - crossbeam_channel::unbounded, + crossbeam_channel::{bounded, unbounded}, solana_sdk::{ account::AccountSharedData, genesis_config::create_genesis_config, @@ -804,12 +806,55 @@ mod test { &connection_cache, 1000, 1, + Arc::new(AtomicBool::new(false)), ); drop(sender); send_tranaction_service.join().unwrap(); } + #[test] + fn validator_exit() { + let tpu_address = "127.0.0.1:0".parse().unwrap(); + let bank = Bank::default_for_tests(); + let bank_forks = Arc::new(RwLock::new(BankForks::new(bank))); + let (sender, receiver) = bounded(0); + + let dummy_tx_info = || TransactionInfo { + signature: Signature::default(), + wire_transaction: vec![0; 128], + last_valid_block_height: 0, + durable_nonce_info: None, + max_retries: None, + retries: 0, + last_sent_time: None, + }; + + let exit = Arc::new(AtomicBool::new(false)); + let connection_cache = Arc::new(ConnectionCache::default()); + let _send_transaction_service = SendTransactionService::new::( + tpu_address, + &bank_forks, + None, + receiver, + &connection_cache, + 1000, + 1, + exit.clone(), + ); + + sender.send(dummy_tx_info()).unwrap(); + + thread::spawn(move || { + exit.store(true, Ordering::Relaxed); + }); + + let mut option = Ok(()); + while option.is_ok() { + option = sender.send(dummy_tx_info()); + } + } + #[test] fn process_transactions() { solana_logger::setup(); From 5bf488c3e0b639e5cf143cfbc8599130b0c2a668 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Tue, 25 Apr 2023 13:55:08 -0500 Subject: [PATCH 410/465] v1.14: ledger-tool: Reallow custom accounts path with Secondary access (backport of #30228) (#30754) ledger-tool: Reallow custom accounts path with Secondary access (#30228) Previously, ledger-tool had a guardrail to disallow a custom accounts path when access mode to the blockstore was Secondary. This was to avoid potentially pulling the accounts out from underneath solana-validator. When ledger-tool switched over to use Secondary blockstore access for all commands that do not need write access, this removed the ability to use custom accounts paths with ledger-tool at all for these commands. Custom accounts paths are desirable, especially if that custom path is in tmpfs to speed up processing. With this change, when a custom accounts path is passed for a command using Secondary access, ledger-tool now checks if Primary access is being held by another process. If not, allow processing to proceed with the custom accounts path. The above check isn't fullproof, but it is about equal to the check that previously existed when ledger-tool would run in Primary access mode when it didn't need to. (cherry picked from commit 64d2809244174da18ad67a6b870671f0a3bc47e3) Co-authored-by: steviez --- ledger-tool/src/main.rs | 28 ++++++++++++++++++++++++---- 1 file changed, 24 insertions(+), 4 deletions(-) diff --git a/ledger-tool/src/main.rs b/ledger-tool/src/main.rs index 0e3200970d7aa8..008c76ed659f10 100644 --- a/ledger-tool/src/main.rs +++ b/ledger-tool/src/main.rs @@ -888,11 +888,31 @@ fn load_bank_forks( } let account_paths = if let Some(account_paths) = arg_matches.value_of("account_paths") { + // If this blockstore access is Primary, no other process (solana-validator) can hold + // Primary access. So, allow a custom accounts path without worry of wiping the accounts + // of solana-validator. if !blockstore.is_primary_access() { - // Be defensive, when default account dir is explicitly specified, it's still possible - // to wipe the dir possibly shared by the running validator! - eprintln!("Error: custom accounts path is not supported under secondary access"); - exit(1); + // Attempt to open the Blockstore in Primary access; if successful, no other process + // was holding Primary so allow things to proceed with custom accounts path. Release + // the Primary access instead of holding it to give priority to solana-validator over + // solana-ledger-tool should solana-validator start before we've finished. + info!( + "Checking if another process currently holding Primary access to {:?}", + blockstore.ledger_path() + ); + if Blockstore::open_with_options( + blockstore.ledger_path(), + BlockstoreOptions { + access_type: AccessType::PrimaryForMaintenance, + ..BlockstoreOptions::default() + }, + ) + .is_err() + { + // Couldn't get Primary access, error out to be defensive. + eprintln!("Error: custom accounts path is not supported under secondary access"); + exit(1); + } } account_paths.split(',').map(PathBuf::from).collect() } else if blockstore.is_primary_access() { From b93eafc44d0ea9c244934d1e4c703c8f2cea66e8 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Wed, 26 Apr 2023 11:37:11 +0900 Subject: [PATCH 411/465] v1.14: [curve25519 syscalls] update compute costs (backport of #29610) (#31220) [curve25519 syscalls] update compute costs (#29610) * update curve25519 syscall compute costs * update msm compute costs (cherry picked from commit 6b016a888116a12909412a0abf945d5ece4e1ba1) Co-authored-by: samkim-crypto --- program-runtime/src/compute_budget.rs | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/program-runtime/src/compute_budget.rs b/program-runtime/src/compute_budget.rs index 5cb58fc6be1c44..0fc87b4b19487e 100644 --- a/program-runtime/src/compute_budget.rs +++ b/program-runtime/src/compute_budget.rs @@ -121,18 +121,18 @@ impl ComputeBudget { sysvar_base_cost: 100, secp256k1_recover_cost: 25_000, syscall_base_cost: 100, - curve25519_edwards_validate_point_cost: 111, - curve25519_edwards_add_cost: 331, - curve25519_edwards_subtract_cost: 329, - curve25519_edwards_multiply_cost: 1_753, - curve25519_edwards_msm_base_cost: 1_870, - curve25519_edwards_msm_incremental_cost: 670, - curve25519_ristretto_validate_point_cost: 117, - curve25519_ristretto_add_cost: 367, - curve25519_ristretto_subtract_cost: 366, - curve25519_ristretto_multiply_cost: 1_804, - curve25519_ristretto_msm_base_cost: 1_870, - curve25519_ristretto_msm_incremental_cost: 670, + curve25519_edwards_validate_point_cost: 159, + curve25519_edwards_add_cost: 473, + curve25519_edwards_subtract_cost: 475, + curve25519_edwards_multiply_cost: 2_177, + curve25519_edwards_msm_base_cost: 2_273, + curve25519_edwards_msm_incremental_cost: 758, + curve25519_ristretto_validate_point_cost: 169, + curve25519_ristretto_add_cost: 521, + curve25519_ristretto_subtract_cost: 519, + curve25519_ristretto_multiply_cost: 2_208, + curve25519_ristretto_msm_base_cost: 2303, + curve25519_ristretto_msm_incremental_cost: 788, heap_size: None, heap_cost: 8, mem_op_base_cost: 10, From 7af7b7eae2da416d233f32bbb7b0f56c4fd281b4 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Fri, 28 Apr 2023 13:22:25 -0600 Subject: [PATCH 412/465] v1.14: Fix lockup docs (backport of #31362) (#31404) Fix lockup docs (#31362) (cherry picked from commit 747440453945ae139a1e5c38bdff0dbd7072fc00) Co-authored-by: Tyera --- docs/src/staking/stake-accounts.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/src/staking/stake-accounts.md b/docs/src/staking/stake-accounts.md index c78224d88dd5f9..0890bfb2abb1d5 100644 --- a/docs/src/staking/stake-accounts.md +++ b/docs/src/staking/stake-accounts.md @@ -118,10 +118,10 @@ Details on the warmup and cooldown timing can be found #### Lockups Stake accounts can have a lockup which prevents the tokens they hold from being -withdrawn before a particular date or epoch has been -reached. While locked up, the stake account can still be delegated, un-delegated, -or split, and its stake and withdraw authorities can be changed as normal. Only -withdrawal into a wallet address is not allowed. +withdrawn before a particular date or epoch has been reached. While locked up, +the stake account can still be delegated, un-delegated, or split, and its stake +authority can be changed as normal. Only withdrawal into another wallet or +updating the withdraw authority is not allowed. A lockup can only be added when a stake account is first created, but it can be modified later, by the _lockup authority_ or _custodian_, the address of which From 2c383b220440eb88962f0cc1e74823e07b37d9b4 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Fri, 28 Apr 2023 23:45:42 +0000 Subject: [PATCH 413/465] v1.14: ci: make docs job name more explicit (backport of #29072) (#31405) ci: make docs job name more explicit (#29072) make docs job name more clear (cherry picked from commit be8396040b59c5bef3d003acdd63a51f79a29a13) Co-authored-by: Yihau Chen --- .github/workflows/docs.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index a851a9c3975f8a..3ce7091598dfbf 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -69,7 +69,8 @@ jobs: needs: - check if: ${{ needs.check.outputs.continue == 1 }} - name: build & deploy + # the name is used by .mergify.yml as well + name: build & deploy docs runs-on: ubuntu-20.04 steps: - name: Checkout From 747cee30ae61a04f541981cfc899e552ee9cc616 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Mon, 1 May 2023 10:00:40 -0500 Subject: [PATCH 414/465] v1.14: Update install-solana-cli-tools.md (backport of #31080) (#31081) Update install-solana-cli-tools.md (#31080) Fix typo in the linux asset name. (cherry picked from commit d6051ba434249f7b77ea219f9e92e6736a63d984) Co-authored-by: Vide Krajnc <65022174+videvide@users.noreply.github.com> --- docs/src/cli/install-solana-cli-tools.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/src/cli/install-solana-cli-tools.md b/docs/src/cli/install-solana-cli-tools.md index 467ed94b6b6506..690dad059ef2b9 100644 --- a/docs/src/cli/install-solana-cli-tools.md +++ b/docs/src/cli/install-solana-cli-tools.md @@ -107,7 +107,7 @@ manually download and install the binaries. Download the binaries by navigating to [https://github.com/solana-labs/solana/releases/latest](https://github.com/solana-labs/solana/releases/latest), -download **solana-release-x86_64-unknown-linux-msvc.tar.bz2**, then extract the +download **solana-release-x86_64-unknown-linux-gnu.tar.bz2**, then extract the archive: ```bash From 624cfccb874e1c745e039f67e570e018553b06a0 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Wed, 3 May 2023 16:20:50 -0400 Subject: [PATCH 415/465] v1.14: Replace the feature ID for stake_raise_minimum_delegation_to_1_sol (backport of #31463) (#31466) Replace the feature ID for stake_raise_minimum_delegation_to_1_sol (#31463) (cherry picked from commit b3d5c0d94dbdb4edbd826e0c4dc9660ac761ef05) Co-authored-by: Brooks --- sdk/src/feature_set.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sdk/src/feature_set.rs b/sdk/src/feature_set.rs index d2609ba8db2c05..f80326b019e6d3 100644 --- a/sdk/src/feature_set.rs +++ b/sdk/src/feature_set.rs @@ -392,8 +392,8 @@ pub mod require_static_program_ids_in_transaction { } pub mod stake_raise_minimum_delegation_to_1_sol { - // This is a feature-proposal *feature id*. The feature keypair address is `3YHAo6wWw5rDbQxb59BmJkQ3XwVhX3m8tdBVbtxnJmma`. - solana_sdk::declare_id!("4xmyBuR2VCXzy9H6qYpH9ckfgnTuMDQFPFBfTs4eBCY1"); + // This is a feature-proposal *feature id*. The feature keypair address is `GQXzC7YiSNkje6FFUk6sc2p53XRvKoaZ9VMktYzUMnpL`. + solana_sdk::declare_id!("9onWzzvCzNC2jfhxxeqRgs5q7nFAAKpCUvkj6T6GJK9i"); } pub mod stake_minimum_delegation_for_rewards { From 0a62a139fbb7c23d815f2b09fe86acbf981fe1ff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexander=20Mei=C3=9Fner?= Date: Fri, 5 May 2023 10:09:25 +0200 Subject: [PATCH 416/465] Backport #29959 and #31488 to v1.14 (#31492) * Adds feature disable_builtin_loader_ownership_chains. * Removes test_load_accounts_max_call_depth(). * Factors account indices out of match. * Turns "match" into "if let Some(...) = ...". * Renames program_owner => owner_id. * Adds the actual feature gate to load_executable_accounts(). * Backport of #31488. --- runtime/src/accounts.rs | 141 +++++++++++++--------------------------- sdk/src/feature_set.rs | 5 ++ 2 files changed, 51 insertions(+), 95 deletions(-) diff --git a/runtime/src/accounts.rs b/runtime/src/accounts.rs index 0e952168feabba..0ec9549b01f685 100644 --- a/runtime/src/accounts.rs +++ b/runtime/src/accounts.rs @@ -391,6 +391,7 @@ impl Accounts { .iter() .map(|instruction| { self.load_executable_accounts( + feature_set, ancestors, &mut accounts, instruction.program_id_index as usize, @@ -463,6 +464,7 @@ impl Accounts { fn load_executable_accounts( &self, + feature_set: &FeatureSet, ancestors: &Ancestors, accounts: &mut Vec, mut program_account_index: usize, @@ -485,21 +487,16 @@ impl Accounts { } depth += 1; - program_account_index = match self.accounts_db.load_with_fixed_root( - ancestors, - &program_id, - load_zero_lamports, - ) { - Some((program_account, _)) => { - let account_index = accounts.len(); - accounts.push((program_id, program_account)); - account_index - } - None => { - error_counters.account_not_found += 1; - return Err(TransactionError::ProgramAccountNotFound); - } - }; + program_account_index = accounts.len(); + if let Some((program_account, _)) = + self.accounts_db + .load_with_fixed_root(ancestors, &program_id, load_zero_lamports) + { + accounts.push((program_id, program_account)); + } else { + error_counters.account_not_found += 1; + return Err(TransactionError::ProgramAccountNotFound); + } let program = &accounts[program_account_index].1; if !program.executable() { error_counters.invalid_program_for_execution += 1; @@ -507,29 +504,25 @@ impl Accounts { } // Add loader to chain - let program_owner = *program.owner(); + let owner_id = *program.owner(); account_indices.insert(0, program_account_index); - if bpf_loader_upgradeable::check_id(&program_owner) { + if bpf_loader_upgradeable::check_id(&owner_id) { // The upgradeable loader requires the derived ProgramData account if let Ok(UpgradeableLoaderState::Program { programdata_address, }) = program.state() { - let programdata_account_index = match self.accounts_db.load_with_fixed_root( + let programdata_account_index = accounts.len(); + if let Some((programdata_account, _)) = self.accounts_db.load_with_fixed_root( ancestors, &programdata_address, load_zero_lamports, ) { - Some((programdata_account, _)) => { - let account_index = accounts.len(); - accounts.push((programdata_address, programdata_account)); - account_index - } - None => { - error_counters.account_not_found += 1; - return Err(TransactionError::ProgramAccountNotFound); - } - }; + accounts.push((programdata_address, programdata_account)); + } else { + error_counters.account_not_found += 1; + return Err(TransactionError::ProgramAccountNotFound); + } account_indices.insert(0, programdata_account_index); } else { error_counters.invalid_program_for_execution += 1; @@ -537,7 +530,30 @@ impl Accounts { } } - program_id = program_owner; + if feature_set.is_active(&feature_set::disable_builtin_loader_ownership_chains::id()) { + if native_loader::check_id(&owner_id) { + return Ok(account_indices); + } + let owner_account_index = accounts.len(); + if let Some((owner_account, _)) = + self.accounts_db + .load_with_fixed_root(ancestors, &owner_id, load_zero_lamports) + { + if !native_loader::check_id(owner_account.owner()) + || !owner_account.executable() + { + error_counters.invalid_program_for_execution += 1; + return Err(TransactionError::InvalidProgramForExecution); + } + accounts.push((owner_id, owner_account)); + } else { + error_counters.account_not_found += 1; + return Err(TransactionError::ProgramAccountNotFound); + } + account_indices.insert(0, owner_account_index); + return Ok(account_indices); + } + program_id = owner_id; } Ok(account_indices) } @@ -1868,72 +1884,6 @@ mod tests { } } - #[test] - fn test_load_accounts_max_call_depth() { - let mut accounts: Vec = Vec::new(); - let mut error_counters = TransactionErrorMetrics::default(); - - let keypair = Keypair::new(); - let key0 = keypair.pubkey(); - let key1 = Pubkey::from([5u8; 32]); - let key2 = Pubkey::from([6u8; 32]); - let key3 = Pubkey::from([7u8; 32]); - let key4 = Pubkey::from([8u8; 32]); - let key5 = Pubkey::from([9u8; 32]); - let key6 = Pubkey::from([10u8; 32]); - - let account = AccountSharedData::new(1, 0, &Pubkey::default()); - accounts.push((key0, account)); - - let mut account = AccountSharedData::new(40, 1, &Pubkey::default()); - account.set_executable(true); - account.set_owner(native_loader::id()); - accounts.push((key1, account)); - - let mut account = AccountSharedData::new(41, 1, &Pubkey::default()); - account.set_executable(true); - account.set_owner(key1); - accounts.push((key2, account)); - - let mut account = AccountSharedData::new(42, 1, &Pubkey::default()); - account.set_executable(true); - account.set_owner(key2); - accounts.push((key3, account)); - - let mut account = AccountSharedData::new(43, 1, &Pubkey::default()); - account.set_executable(true); - account.set_owner(key3); - accounts.push((key4, account)); - - let mut account = AccountSharedData::new(44, 1, &Pubkey::default()); - account.set_executable(true); - account.set_owner(key4); - accounts.push((key5, account)); - - let mut account = AccountSharedData::new(45, 1, &Pubkey::default()); - account.set_executable(true); - account.set_owner(key5); - accounts.push((key6, account)); - - let instructions = vec![CompiledInstruction::new(1, &(), vec![0])]; - let tx = Transaction::new_with_compiled_instructions( - &[&keypair], - &[], - Hash::default(), - vec![key6], - instructions, - ); - - let loaded_accounts = load_accounts(tx, &accounts, &mut error_counters); - - assert_eq!(error_counters.call_chain_too_deep, 1); - assert_eq!(loaded_accounts.len(), 1); - assert_eq!( - loaded_accounts[0], - (Err(TransactionError::CallChainTooDeep), None,) - ); - } - #[test] fn test_load_accounts_bad_owner() { let mut accounts: Vec = Vec::new(); @@ -2497,6 +2447,7 @@ mod tests { assert_eq!( accounts.load_executable_accounts( + &FeatureSet::default(), &ancestors, &mut vec![(keypair.pubkey(), account)], 0, diff --git a/sdk/src/feature_set.rs b/sdk/src/feature_set.rs index f80326b019e6d3..e2a9835ab92862 100644 --- a/sdk/src/feature_set.rs +++ b/sdk/src/feature_set.rs @@ -540,6 +540,10 @@ pub mod move_serialized_len_ptr_in_cpi { solana_sdk::declare_id!("74CoWuBmt3rUVUrCb2JiSTvh6nXyBWUsK4SaMj3CtE3T"); } +pub mod disable_builtin_loader_ownership_chains { + solana_sdk::declare_id!("4UDcAfQ6EcA6bdcadkeHpkarkhZGJ7Bpq7wTAiRMjkoi"); +} + pub mod enable_request_heap_frame_ix { solana_sdk::declare_id!("Hr1nUA9b7NJ6eChS26o7Vi8gYYDDwWD3YeBfzJkTbU86"); } @@ -677,6 +681,7 @@ lazy_static! { (drop_merkle_shreds::id(), "drop merkle shreds #29711"), (keep_merkle_shreds::id(), "keep merkle shreds #29711"), (move_serialized_len_ptr_in_cpi::id(), "cpi ignore serialized_len_ptr #29592"), + (disable_builtin_loader_ownership_chains::id(), "disable builtin loader ownership chains #29956"), (enable_request_heap_frame_ix::id(), "Enable transaction to request heap frame using compute budget instruction #30076"), (clean_up_delegation_errors::id(), "Return InsufficientDelegation instead of InsufficientFunds or InsufficientStake where applicable #31206"), /*************** ADD NEW FEATURES HERE ***************/ From 18f3699b8fc4f75e74e21877a903ebacb8a2e2ad Mon Sep 17 00:00:00 2001 From: Tyera Date: Wed, 19 Apr 2023 12:39:19 -0600 Subject: [PATCH 417/465] Bump h2 to 0.3.18 (#31265) Changes: https://github.com/hyperium/h2/compare/v0.3.17...v0.3.18 --- Cargo.lock | 6 +++--- programs/bpf/Cargo.lock | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 0d8c6506c55bbd..db668ebcc9a2a6 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1819,9 +1819,9 @@ dependencies = [ [[package]] name = "h2" -version = "0.3.11" +version = "0.3.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9f1f717ddc7b2ba36df7e871fd88db79326551d3d6f1fc406fbfd28b582ff8e" +checksum = "17f8a914c2987b688368b5138aa05321db91f4090cf26118185672ad588bce21" dependencies = [ "bytes", "fnv", @@ -1832,7 +1832,7 @@ dependencies = [ "indexmap", "slab", "tokio", - "tokio-util 0.6.9", + "tokio-util 0.7.1", "tracing", ] diff --git a/programs/bpf/Cargo.lock b/programs/bpf/Cargo.lock index 3fd4ea0e583f1a..feb487ba4b5184 100644 --- a/programs/bpf/Cargo.lock +++ b/programs/bpf/Cargo.lock @@ -1607,9 +1607,9 @@ dependencies = [ [[package]] name = "h2" -version = "0.3.11" +version = "0.3.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9f1f717ddc7b2ba36df7e871fd88db79326551d3d6f1fc406fbfd28b582ff8e" +checksum = "17f8a914c2987b688368b5138aa05321db91f4090cf26118185672ad588bce21" dependencies = [ "bytes", "fnv", @@ -1620,7 +1620,7 @@ dependencies = [ "indexmap", "slab", "tokio", - "tokio-util 0.6.9", + "tokio-util 0.7.1", "tracing", ] From ce212e4e2ce97415e73d193f2cf7a3249119d51e Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Sat, 13 May 2023 03:25:23 +0000 Subject: [PATCH 418/465] v1.14: [docs] Add note about txids to signature status RPC method docs (backport of #31628) (#31630) [docs] Add note about txids to signature status RPC method docs (#31628) (cherry picked from commit 125a18550db8d613d267d54ba224ba88e61694ad) Co-authored-by: Jordan Sexton --- docs/src/api/methods/_getSignatureStatuses.mdx | 2 +- docs/src/api/websocket/_signatureSubscribe.mdx | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/src/api/methods/_getSignatureStatuses.mdx b/docs/src/api/methods/_getSignatureStatuses.mdx index 25bcbc326bca18..7c52c85dcdb8eb 100644 --- a/docs/src/api/methods/_getSignatureStatuses.mdx +++ b/docs/src/api/methods/_getSignatureStatuses.mdx @@ -12,7 +12,7 @@ import { ## getSignatureStatuses -Returns the statuses of a list of signatures. +Returns the statuses of a list of signatures. Each signature must be a [txid](/terminology#transaction-id), the first signature of a transaction. :::info Unless the `searchTransactionHistory` configuration parameter is included, diff --git a/docs/src/api/websocket/_signatureSubscribe.mdx b/docs/src/api/websocket/_signatureSubscribe.mdx index 70d0b602693593..d918c027d79635 100644 --- a/docs/src/api/websocket/_signatureSubscribe.mdx +++ b/docs/src/api/websocket/_signatureSubscribe.mdx @@ -13,6 +13,7 @@ import { ## signatureSubscribe Subscribe to a transaction signature to receive notification when a given transaction is committed. On `signatureNotification` - the subscription is automatically cancelled. +The signature must be a [txid](/terminology#transaction-id), the first signature of a transaction. From c46410db50a5214c06ec0cd4b0d50664fefa9fc2 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Mon, 15 May 2023 11:07:05 -0400 Subject: [PATCH 419/465] v1.14: Update docs to use ./cargo (backport of #28798) (#31649) Update docs to use ./cargo (#28798) (cherry picked from commit 1e2989501f0b1b36604794d5a5d5d43b9581a76f) Co-authored-by: Will Hickey --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index e76cfc43a1d6ca..0e939f533f8d60 100644 --- a/README.md +++ b/README.md @@ -48,7 +48,7 @@ $ cd solana ## **3. Build.** ```bash -$ cargo build +$ ./cargo build ``` # Testing @@ -56,7 +56,7 @@ $ cargo build **Run the test suite:** ```bash -$ cargo test +$ ./cargo test ``` ### Starting a local testnet From 3f34a6dec44f70cee1c975ade4910eaf7c412878 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Mon, 15 May 2023 16:37:06 -0500 Subject: [PATCH 420/465] v1.14: [docs] add that loadedAddresses is undefined when using jsonParsed encoding (backport of #31441) (#31452) [docs] add that loadedAddresses is undefined when using jsonParsed encoding (#31441) - Applies to `getTransaction` and `getBlock` RPC calls - This is intended because `accountKeys` already includes these addresses + lookupTable source. See https://github.com/solana-labs/solana/pull/31392#issuecomment-1527856367 (cherry picked from commit 9b547fe9f8334d40010656fcc4a8c38e9a46e388) Co-authored-by: Callum McIntyre --- docs/src/api/methods/_getBlock.mdx | 2 +- docs/src/api/methods/_getTransaction.mdx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/src/api/methods/_getBlock.mdx b/docs/src/api/methods/_getBlock.mdx index dd70eaf5b95347..6ced795c2eee8f 100644 --- a/docs/src/api/methods/_getBlock.mdx +++ b/docs/src/api/methods/_getBlock.mdx @@ -128,7 +128,7 @@ The result field will be an object with the following fields: - DEPRECATED: `status: ` - Transaction status - `"Ok": ` - Transaction was successful - `"Err": ` - Transaction failed with TransactionError - - `loadedAddresses: ` - Transaction addresses loaded from address lookup tables. Undefined if `maxSupportedTransactionVersion` is not set in request params. + - `loadedAddresses: ` - Transaction addresses loaded from address lookup tables. Undefined if `maxSupportedTransactionVersion` is not set in request params, or if `jsonParsed` encoding is set in request params. - `writable: ` - Ordered list of base-58 encoded addresses for writable loaded accounts - `readonly: ` - Ordered list of base-58 encoded addresses for readonly loaded accounts - `returnData: ` - the most-recent return data generated by an instruction in the transaction, with the following fields: diff --git a/docs/src/api/methods/_getTransaction.mdx b/docs/src/api/methods/_getTransaction.mdx index c4e17e53c7fd2a..8a70a3219b1414 100644 --- a/docs/src/api/methods/_getTransaction.mdx +++ b/docs/src/api/methods/_getTransaction.mdx @@ -85,7 +85,7 @@ Encoding for the returned Transaction - `postBalance: ` - account balance in lamports after the reward was applied - `rewardType: ` - type of reward: currently only "rent", other types may be added in the future - `commission: ` - vote account commission when the reward was credited, only present for voting and staking rewards - - `loadedAddresses: ` - Transaction addresses loaded from address lookup tables. Undefined if `maxSupportedTransactionVersion` is not set in request params. + - `loadedAddresses: ` - Transaction addresses loaded from address lookup tables. Undefined if `maxSupportedTransactionVersion` is not set in request params, or if `jsonParsed` encoding is set in request params. - `writable: ` - Ordered list of base-58 encoded addresses for writable loaded accounts - `readonly: ` - Ordered list of base-58 encoded addresses for readonly loaded accounts - `returnData: ` - the most-recent return data generated by an instruction in the transaction, with the following fields: From b00d18cec4011bb452e3fe87a3412a3f0146942e Mon Sep 17 00:00:00 2001 From: Will Hickey Date: Mon, 15 May 2023 21:02:18 -0500 Subject: [PATCH 421/465] Add origin/ prefix for git diff when building CI pipeline. (#31638) --- ci/buildkite-pipeline.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ci/buildkite-pipeline.sh b/ci/buildkite-pipeline.sh index a8f7d3fdcf191b..5fcd64718ad244 100755 --- a/ci/buildkite-pipeline.sh +++ b/ci/buildkite-pipeline.sh @@ -304,7 +304,7 @@ pull_or_push_steps() { # Version bump PRs are an edge case that can skip most of the CI steps if affects .toml$ && affects .lock$ && ! affects_other_than .toml$ .lock$; then - optional_old_version_number=$(git diff "$BUILDKITE_PULL_REQUEST_BASE_BRANCH"..HEAD validator/Cargo.toml | \ + optional_old_version_number=$(git diff origin/"$BUILDKITE_PULL_REQUEST_BASE_BRANCH"..HEAD validator/Cargo.toml | \ grep -e "^-version" | sed 's/-version = "\(.*\)"/\1/') echo "optional_old_version_number: ->$optional_old_version_number<-" new_version_number=$(grep -e "^version = " validator/Cargo.toml | sed 's/version = "\(.*\)"/\1/') @@ -314,7 +314,7 @@ pull_or_push_steps() { # lines that don't match. Any diff that produces output here is not a version bump. # | cat is a no-op. If this pull request is a version bump then grep will output no lines and have an exit code of 1. # Piping the output to cat prevents that non-zero exit code from exiting this script - diff_other_than_version_bump=$(git diff "$BUILDKITE_PULL_REQUEST_BASE_BRANCH"..HEAD | \ + diff_other_than_version_bump=$(git diff origin/"$BUILDKITE_PULL_REQUEST_BASE_BRANCH"..HEAD | \ grep -vE "^ |^@@ |^--- |^\+\+\+ |^index |^diff |^-( \")?solana.*$optional_old_version_number|^\+( \")?solana.*$new_version_number|^-version|^\+version"|cat) echo "diff_other_than_version_bump: ->$diff_other_than_version_bump<-" From cecafb7fb57ecbf560acd2b954fff7757bf01d03 Mon Sep 17 00:00:00 2001 From: Will Hickey Date: Mon, 15 May 2023 21:46:44 -0500 Subject: [PATCH 422/465] Bump version to v1.14.19 (#31663) --- Cargo.lock | 492 +++++++++--------- account-decoder/Cargo.toml | 10 +- accounts-bench/Cargo.toml | 12 +- accounts-cluster-bench/Cargo.toml | 34 +- banking-bench/Cargo.toml | 26 +- banks-client/Cargo.toml | 12 +- banks-interface/Cargo.toml | 4 +- banks-server/Cargo.toml | 12 +- bench-streamer/Cargo.toml | 8 +- bench-tps/Cargo.toml | 38 +- bloom/Cargo.toml | 8 +- bucket_map/Cargo.toml | 8 +- clap-utils/Cargo.toml | 8 +- clap-v3-utils/Cargo.toml | 8 +- cli-config/Cargo.toml | 6 +- cli-output/Cargo.toml | 16 +- cli/Cargo.toml | 38 +- client-test/Cargo.toml | 32 +- client/Cargo.toml | 28 +- core/Cargo.toml | 56 +- dos/Cargo.toml | 30 +- download-utils/Cargo.toml | 6 +- entry/Cargo.toml | 16 +- faucet/Cargo.toml | 14 +- frozen-abi/Cargo.toml | 6 +- frozen-abi/macro/Cargo.toml | 2 +- genesis-utils/Cargo.toml | 8 +- genesis/Cargo.toml | 22 +- geyser-plugin-interface/Cargo.toml | 6 +- geyser-plugin-manager/Cargo.toml | 16 +- gossip/Cargo.toml | 38 +- install/Cargo.toml | 14 +- keygen/Cargo.toml | 12 +- ledger-tool/Cargo.toml | 30 +- ledger/Cargo.toml | 40 +- local-cluster/Cargo.toml | 28 +- log-analyzer/Cargo.toml | 6 +- logger/Cargo.toml | 2 +- measure/Cargo.toml | 4 +- merkle-root-bench/Cargo.toml | 12 +- merkle-tree/Cargo.toml | 4 +- metrics/Cargo.toml | 4 +- net-shaper/Cargo.toml | 4 +- net-utils/Cargo.toml | 8 +- notifier/Cargo.toml | 2 +- perf/Cargo.toml | 12 +- poh-bench/Cargo.toml | 14 +- poh/Cargo.toml | 20 +- program-runtime/Cargo.toml | 14 +- program-test/Cargo.toml | 20 +- .../address-lookup-table-tests/Cargo.toml | 8 +- programs/address-lookup-table/Cargo.toml | 12 +- programs/bpf-loader-tests/Cargo.toml | 8 +- programs/bpf/Cargo.lock | 490 ++++++++--------- programs/bpf/Cargo.toml | 28 +- programs/bpf/rust/128bit/Cargo.toml | 6 +- programs/bpf/rust/128bit_dep/Cargo.toml | 4 +- programs/bpf/rust/alloc/Cargo.toml | 4 +- programs/bpf/rust/call_depth/Cargo.toml | 4 +- programs/bpf/rust/caller_access/Cargo.toml | 4 +- programs/bpf/rust/curve25519/Cargo.toml | 6 +- programs/bpf/rust/custom_heap/Cargo.toml | 4 +- programs/bpf/rust/dep_crate/Cargo.toml | 6 +- .../bpf/rust/deprecated_loader/Cargo.toml | 4 +- programs/bpf/rust/dup_accounts/Cargo.toml | 4 +- programs/bpf/rust/error_handling/Cargo.toml | 4 +- programs/bpf/rust/external_spend/Cargo.toml | 4 +- programs/bpf/rust/finalize/Cargo.toml | 4 +- .../rust/get_minimum_delegation/Cargo.toml | 4 +- .../Cargo.toml | 4 +- .../rust/instruction_introspection/Cargo.toml | 4 +- programs/bpf/rust/invoke/Cargo.toml | 4 +- programs/bpf/rust/invoke_and_error/Cargo.toml | 4 +- programs/bpf/rust/invoke_and_ok/Cargo.toml | 4 +- .../bpf/rust/invoke_and_return/Cargo.toml | 4 +- programs/bpf/rust/invoked/Cargo.toml | 4 +- programs/bpf/rust/iter/Cargo.toml | 4 +- programs/bpf/rust/log_data/Cargo.toml | 4 +- programs/bpf/rust/many_args/Cargo.toml | 6 +- programs/bpf/rust/many_args_dep/Cargo.toml | 4 +- programs/bpf/rust/mem/Cargo.toml | 10 +- programs/bpf/rust/membuiltins/Cargo.toml | 6 +- programs/bpf/rust/noop/Cargo.toml | 4 +- programs/bpf/rust/panic/Cargo.toml | 4 +- programs/bpf/rust/param_passing/Cargo.toml | 6 +- .../bpf/rust/param_passing_dep/Cargo.toml | 4 +- programs/bpf/rust/rand/Cargo.toml | 4 +- programs/bpf/rust/realloc/Cargo.toml | 4 +- programs/bpf/rust/realloc_invoke/Cargo.toml | 6 +- .../bpf/rust/ro_account_modify/Cargo.toml | 4 +- programs/bpf/rust/ro_modify/Cargo.toml | 4 +- programs/bpf/rust/sanity/Cargo.toml | 10 +- .../bpf/rust/secp256k1_recover/Cargo.toml | 4 +- programs/bpf/rust/sha/Cargo.toml | 4 +- .../rust/sibling_inner_instruction/Cargo.toml | 4 +- .../bpf/rust/sibling_instruction/Cargo.toml | 4 +- programs/bpf/rust/simulation/Cargo.toml | 12 +- programs/bpf/rust/spoof1/Cargo.toml | 4 +- programs/bpf/rust/spoof1_system/Cargo.toml | 4 +- programs/bpf/rust/sysvar/Cargo.toml | 10 +- programs/bpf/rust/upgradeable/Cargo.toml | 4 +- programs/bpf/rust/upgraded/Cargo.toml | 4 +- programs/bpf_loader/Cargo.toml | 14 +- .../bpf_loader/gen-syscall-list/Cargo.toml | 2 +- programs/compute-budget/Cargo.toml | 6 +- programs/config/Cargo.toml | 8 +- programs/ed25519-tests/Cargo.toml | 6 +- programs/stake/Cargo.toml | 18 +- programs/vote/Cargo.toml | 14 +- programs/zk-token-proof-tests/Cargo.toml | 10 +- programs/zk-token-proof/Cargo.toml | 8 +- rayon-threadlimit/Cargo.toml | 2 +- rbpf-cli/Cargo.toml | 10 +- remote-wallet/Cargo.toml | 4 +- rpc-test/Cargo.toml | 18 +- rpc/Cargo.toml | 48 +- runtime/Cargo.toml | 34 +- runtime/store-tool/Cargo.toml | 8 +- sdk/Cargo.toml | 12 +- sdk/cargo-build-bpf/Cargo.toml | 4 +- sdk/cargo-build-sbf/Cargo.toml | 8 +- .../tests/crates/fail/Cargo.toml | 4 +- .../tests/crates/noop/Cargo.toml | 4 +- sdk/cargo-test-bpf/Cargo.toml | 2 +- sdk/cargo-test-sbf/Cargo.toml | 2 +- sdk/gen-headers/Cargo.toml | 2 +- sdk/macro/Cargo.toml | 2 +- sdk/program/Cargo.toml | 10 +- send-transaction-service/Cargo.toml | 14 +- stake-accounts/Cargo.toml | 16 +- storage-bigtable/Cargo.toml | 10 +- storage-bigtable/build-proto/Cargo.toml | 2 +- storage-proto/Cargo.toml | 8 +- streamer/Cargo.toml | 10 +- sys-tuner/Cargo.toml | 6 +- test-validator/Cargo.toml | 28 +- tokens/Cargo.toml | 24 +- transaction-dos/Cargo.toml | 32 +- transaction-status/Cargo.toml | 14 +- upload-perf/Cargo.toml | 4 +- validator/Cargo.toml | 50 +- version/Cargo.toml | 8 +- watchtower/Cargo.toml | 20 +- zk-token-sdk/Cargo.toml | 6 +- 144 files changed, 1278 insertions(+), 1278 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 7fbd126228cc03..5d1f0f16f0216e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1708,7 +1708,7 @@ dependencies = [ [[package]] name = "gen-headers" -version = "1.14.18" +version = "1.14.19" dependencies = [ "log", "regex", @@ -1716,7 +1716,7 @@ dependencies = [ [[package]] name = "gen-syscall-list" -version = "1.14.18" +version = "1.14.19" dependencies = [ "regex", ] @@ -3529,7 +3529,7 @@ dependencies = [ [[package]] name = "proto" -version = "1.14.18" +version = "1.14.19" dependencies = [ "protobuf-src", "tonic-build 0.8.0", @@ -3786,15 +3786,15 @@ dependencies = [ [[package]] name = "rbpf-cli" -version = "1.14.18" +version = "1.14.19" dependencies = [ "clap 3.2.23", "serde", "serde_json", "solana-bpf-loader-program", - "solana-logger 1.14.18", + "solana-logger 1.14.19", "solana-program-runtime", - "solana-sdk 1.14.18", + "solana-sdk 1.14.19", "solana_rbpf", ] @@ -4510,7 +4510,7 @@ dependencies = [ [[package]] name = "solana-account-decoder" -version = "1.14.18" +version = "1.14.19" dependencies = [ "Inflector", "base64 0.13.0", @@ -4523,7 +4523,7 @@ dependencies = [ "serde_json", "solana-address-lookup-table-program", "solana-config-program", - "solana-sdk 1.14.18", + "solana-sdk 1.14.19", "solana-vote-program", "spl-token", "spl-token-2022", @@ -4533,21 +4533,21 @@ dependencies = [ [[package]] name = "solana-accounts-bench" -version = "1.14.18" +version = "1.14.19" dependencies = [ "clap 2.33.3", "log", "rayon", - "solana-logger 1.14.18", + "solana-logger 1.14.19", "solana-measure", "solana-runtime", - "solana-sdk 1.14.18", + "solana-sdk 1.14.19", "solana-version", ] [[package]] name = "solana-accounts-cluster-bench" -version = "1.14.18" +version = "1.14.19" dependencies = [ "clap 2.33.3", "log", @@ -4560,11 +4560,11 @@ dependencies = [ "solana-faucet", "solana-gossip", "solana-local-cluster", - "solana-logger 1.14.18", + "solana-logger 1.14.19", "solana-measure", "solana-net-utils", "solana-runtime", - "solana-sdk 1.14.18", + "solana-sdk 1.14.19", "solana-streamer", "solana-test-validator", "solana-transaction-status", @@ -4574,7 +4574,7 @@ dependencies = [ [[package]] name = "solana-address-lookup-table-program" -version = "1.14.18" +version = "1.14.19" dependencies = [ "bincode", "bytemuck", @@ -4583,28 +4583,28 @@ dependencies = [ "num-traits", "rustc_version 0.4.0", "serde", - "solana-frozen-abi 1.14.18", - "solana-frozen-abi-macro 1.14.18", - "solana-program 1.14.18", + "solana-frozen-abi 1.14.19", + "solana-frozen-abi-macro 1.14.19", + "solana-program 1.14.19", "solana-program-runtime", - "solana-sdk 1.14.18", + "solana-sdk 1.14.19", "thiserror", ] [[package]] name = "solana-address-lookup-table-program-tests" -version = "1.14.18" +version = "1.14.19" dependencies = [ "assert_matches", "bincode", "solana-address-lookup-table-program", "solana-program-test", - "solana-sdk 1.14.18", + "solana-sdk 1.14.19", ] [[package]] name = "solana-banking-bench" -version = "1.14.18" +version = "1.14.19" dependencies = [ "clap 3.2.23", "crossbeam-channel", @@ -4615,27 +4615,27 @@ dependencies = [ "solana-core", "solana-gossip", "solana-ledger", - "solana-logger 1.14.18", + "solana-logger 1.14.19", "solana-measure", "solana-perf", "solana-poh", "solana-runtime", - "solana-sdk 1.14.18", + "solana-sdk 1.14.19", "solana-streamer", "solana-version", ] [[package]] name = "solana-banks-client" -version = "1.14.18" +version = "1.14.19" dependencies = [ "borsh", "futures 0.3.21", "solana-banks-interface", "solana-banks-server", - "solana-program 1.14.18", + "solana-program 1.14.19", "solana-runtime", - "solana-sdk 1.14.18", + "solana-sdk 1.14.19", "tarpc", "thiserror", "tokio", @@ -4644,16 +4644,16 @@ dependencies = [ [[package]] name = "solana-banks-interface" -version = "1.14.18" +version = "1.14.19" dependencies = [ "serde", - "solana-sdk 1.14.18", + "solana-sdk 1.14.19", "tarpc", ] [[package]] name = "solana-banks-server" -version = "1.14.18" +version = "1.14.19" dependencies = [ "bincode", "crossbeam-channel", @@ -4661,7 +4661,7 @@ dependencies = [ "solana-banks-interface", "solana-client", "solana-runtime", - "solana-sdk 1.14.18", + "solana-sdk 1.14.19", "solana-send-transaction-service", "tarpc", "tokio", @@ -4671,7 +4671,7 @@ dependencies = [ [[package]] name = "solana-bench-streamer" -version = "1.14.18" +version = "1.14.19" dependencies = [ "clap 3.2.23", "crossbeam-channel", @@ -4682,7 +4682,7 @@ dependencies = [ [[package]] name = "solana-bench-tps" -version = "1.14.18" +version = "1.14.19" dependencies = [ "clap 2.33.3", "crossbeam-channel", @@ -4699,13 +4699,13 @@ dependencies = [ "solana-genesis", "solana-gossip", "solana-local-cluster", - "solana-logger 1.14.18", + "solana-logger 1.14.19", "solana-measure", "solana-metrics", "solana-net-utils", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.18", + "solana-sdk 1.14.19", "solana-streamer", "solana-test-validator", "solana-version", @@ -4714,7 +4714,7 @@ dependencies = [ [[package]] name = "solana-bloom" -version = "1.14.18" +version = "1.14.19" dependencies = [ "bv", "fnv", @@ -4724,14 +4724,14 @@ dependencies = [ "rustc_version 0.4.0", "serde", "serde_derive", - "solana-frozen-abi 1.14.18", - "solana-frozen-abi-macro 1.14.18", - "solana-sdk 1.14.18", + "solana-frozen-abi 1.14.19", + "solana-frozen-abi-macro 1.14.19", + "solana-sdk 1.14.19", ] [[package]] name = "solana-bpf-loader-program" -version = "1.14.18" +version = "1.14.19" dependencies = [ "bincode", "byteorder", @@ -4742,26 +4742,26 @@ dependencies = [ "solana-metrics", "solana-program-runtime", "solana-runtime", - "solana-sdk 1.14.18", - "solana-zk-token-sdk 1.14.18", + "solana-sdk 1.14.19", + "solana-zk-token-sdk 1.14.19", "solana_rbpf", "thiserror", ] [[package]] name = "solana-bpf-loader-program-tests" -version = "1.14.18" +version = "1.14.19" dependencies = [ "assert_matches", "bincode", "solana-bpf-loader-program", "solana-program-test", - "solana-sdk 1.14.18", + "solana-sdk 1.14.19", ] [[package]] name = "solana-bucket-map" -version = "1.14.18" +version = "1.14.19" dependencies = [ "fs_extra", "log", @@ -4769,24 +4769,24 @@ dependencies = [ "modular-bitfield", "rand 0.7.3", "rayon", - "solana-logger 1.14.18", + "solana-logger 1.14.19", "solana-measure", - "solana-sdk 1.14.18", + "solana-sdk 1.14.19", "tempfile", ] [[package]] name = "solana-cargo-build-bpf" -version = "1.14.18" +version = "1.14.19" dependencies = [ "cargo_metadata", "clap 3.2.23", - "solana-sdk 1.14.18", + "solana-sdk 1.14.19", ] [[package]] name = "solana-cargo-build-sbf" -version = "1.14.18" +version = "1.14.19" dependencies = [ "bzip2", "cargo_metadata", @@ -4795,14 +4795,14 @@ dependencies = [ "regex", "serial_test", "solana-download-utils", - "solana-logger 1.14.18", - "solana-sdk 1.14.18", + "solana-logger 1.14.19", + "solana-sdk 1.14.19", "tar", ] [[package]] name = "solana-cargo-test-bpf" -version = "1.14.18" +version = "1.14.19" dependencies = [ "cargo_metadata", "clap 3.2.23", @@ -4810,7 +4810,7 @@ dependencies = [ [[package]] name = "solana-cargo-test-sbf" -version = "1.14.18" +version = "1.14.19" dependencies = [ "cargo_metadata", "clap 3.2.23", @@ -4818,14 +4818,14 @@ dependencies = [ [[package]] name = "solana-clap-utils" -version = "1.14.18" +version = "1.14.19" dependencies = [ "chrono", "clap 2.33.3", "rpassword", "solana-perf", "solana-remote-wallet", - "solana-sdk 1.14.18", + "solana-sdk 1.14.19", "tempfile", "thiserror", "tiny-bip39", @@ -4835,14 +4835,14 @@ dependencies = [ [[package]] name = "solana-clap-v3-utils" -version = "1.14.18" +version = "1.14.19" dependencies = [ "chrono", "clap 3.2.23", "rpassword", "solana-perf", "solana-remote-wallet", - "solana-sdk 1.14.18", + "solana-sdk 1.14.19", "tempfile", "thiserror", "tiny-bip39", @@ -4852,7 +4852,7 @@ dependencies = [ [[package]] name = "solana-cli" -version = "1.14.18" +version = "1.14.19" dependencies = [ "bincode", "bs58", @@ -4880,10 +4880,10 @@ dependencies = [ "solana-client", "solana-config-program", "solana-faucet", - "solana-logger 1.14.18", + "solana-logger 1.14.19", "solana-program-runtime", "solana-remote-wallet", - "solana-sdk 1.14.18", + "solana-sdk 1.14.19", "solana-streamer", "solana-test-validator", "solana-transaction-status", @@ -4898,7 +4898,7 @@ dependencies = [ [[package]] name = "solana-cli-config" -version = "1.14.18" +version = "1.14.19" dependencies = [ "anyhow", "dirs-next", @@ -4907,13 +4907,13 @@ dependencies = [ "serde_derive", "serde_yaml", "solana-clap-utils", - "solana-sdk 1.14.18", + "solana-sdk 1.14.19", "url 2.2.2", ] [[package]] name = "solana-cli-output" -version = "1.14.18" +version = "1.14.19" dependencies = [ "Inflector", "base64 0.13.0", @@ -4931,7 +4931,7 @@ dependencies = [ "solana-clap-utils", "solana-cli-config", "solana-client", - "solana-sdk 1.14.18", + "solana-sdk 1.14.19", "solana-transaction-status", "solana-vote-program", "spl-memo", @@ -4939,7 +4939,7 @@ dependencies = [ [[package]] name = "solana-client" -version = "1.14.18" +version = "1.14.19" dependencies = [ "anyhow", "assert_matches", @@ -4975,12 +4975,12 @@ dependencies = [ "solana-account-decoder", "solana-clap-utils", "solana-faucet", - "solana-logger 1.14.18", + "solana-logger 1.14.19", "solana-measure", "solana-metrics", "solana-net-utils", "solana-perf", - "solana-sdk 1.14.18", + "solana-sdk 1.14.19", "solana-streamer", "solana-transaction-status", "solana-version", @@ -4996,14 +4996,14 @@ dependencies = [ [[package]] name = "solana-client-test" -version = "1.14.18" +version = "1.14.19" dependencies = [ "futures-util", "serde_json", "serial_test", "solana-client", "solana-ledger", - "solana-logger 1.14.18", + "solana-logger 1.14.19", "solana-measure", "solana-merkle-tree", "solana-metrics", @@ -5011,7 +5011,7 @@ dependencies = [ "solana-rayon-threadlimit", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.18", + "solana-sdk 1.14.19", "solana-streamer", "solana-test-validator", "solana-transaction-status", @@ -5022,28 +5022,28 @@ dependencies = [ [[package]] name = "solana-compute-budget-program" -version = "1.14.18" +version = "1.14.19" dependencies = [ "solana-program-runtime", - "solana-sdk 1.14.18", + "solana-sdk 1.14.19", ] [[package]] name = "solana-config-program" -version = "1.14.18" +version = "1.14.19" dependencies = [ "bincode", "chrono", "serde", "serde_derive", - "solana-logger 1.14.18", + "solana-logger 1.14.19", "solana-program-runtime", - "solana-sdk 1.14.18", + "solana-sdk 1.14.19", ] [[package]] name = "solana-core" -version = "1.14.18" +version = "1.14.19" dependencies = [ "ahash", "base64 0.13.0", @@ -5076,12 +5076,12 @@ dependencies = [ "solana-bloom", "solana-client", "solana-entry", - "solana-frozen-abi 1.14.18", - "solana-frozen-abi-macro 1.14.18", + "solana-frozen-abi 1.14.19", + "solana-frozen-abi-macro 1.14.19", "solana-geyser-plugin-manager", "solana-gossip", "solana-ledger", - "solana-logger 1.14.18", + "solana-logger 1.14.19", "solana-measure", "solana-metrics", "solana-net-utils", @@ -5091,7 +5091,7 @@ dependencies = [ "solana-rayon-threadlimit", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.18", + "solana-sdk 1.14.19", "solana-send-transaction-service", "solana-stake-program", "solana-streamer", @@ -5111,7 +5111,7 @@ dependencies = [ [[package]] name = "solana-dos" -version = "1.14.18" +version = "1.14.19" dependencies = [ "bincode", "clap 3.2.23", @@ -5127,42 +5127,42 @@ dependencies = [ "solana-faucet", "solana-gossip", "solana-local-cluster", - "solana-logger 1.14.18", + "solana-logger 1.14.19", "solana-measure", "solana-net-utils", "solana-perf", "solana-rpc", - "solana-sdk 1.14.18", + "solana-sdk 1.14.19", "solana-streamer", "solana-version", ] [[package]] name = "solana-download-utils" -version = "1.14.18" +version = "1.14.19" dependencies = [ "console", "indicatif", "log", "reqwest", "solana-runtime", - "solana-sdk 1.14.18", + "solana-sdk 1.14.19", ] [[package]] name = "solana-ed25519-program-tests" -version = "1.14.18" +version = "1.14.19" dependencies = [ "assert_matches", "ed25519-dalek", "rand 0.7.3", "solana-program-test", - "solana-sdk 1.14.18", + "solana-sdk 1.14.19", ] [[package]] name = "solana-entry" -version = "1.14.18" +version = "1.14.19" dependencies = [ "bincode", "crossbeam-channel", @@ -5174,18 +5174,18 @@ dependencies = [ "rand 0.7.3", "rayon", "serde", - "solana-logger 1.14.18", + "solana-logger 1.14.19", "solana-measure", "solana-merkle-tree", "solana-metrics", "solana-perf", "solana-rayon-threadlimit", - "solana-sdk 1.14.18", + "solana-sdk 1.14.19", ] [[package]] name = "solana-faucet" -version = "1.14.18" +version = "1.14.19" dependencies = [ "bincode", "byteorder", @@ -5196,9 +5196,9 @@ dependencies = [ "serde_derive", "solana-clap-utils", "solana-cli-config", - "solana-logger 1.14.18", + "solana-logger 1.14.19", "solana-metrics", - "solana-sdk 1.14.18", + "solana-sdk 1.14.19", "solana-version", "spl-memo", "thiserror", @@ -5241,7 +5241,7 @@ dependencies = [ [[package]] name = "solana-frozen-abi" -version = "1.14.18" +version = "1.14.19" dependencies = [ "ahash", "blake3", @@ -5266,8 +5266,8 @@ dependencies = [ "serde_derive", "serde_json", "sha2 0.10.2", - "solana-frozen-abi-macro 1.14.18", - "solana-logger 1.14.18", + "solana-frozen-abi-macro 1.14.19", + "solana-logger 1.14.19", "subtle", "thiserror", ] @@ -5286,7 +5286,7 @@ dependencies = [ [[package]] name = "solana-frozen-abi-macro" -version = "1.14.18" +version = "1.14.19" dependencies = [ "proc-macro2 1.0.52", "quote 1.0.18", @@ -5296,7 +5296,7 @@ dependencies = [ [[package]] name = "solana-genesis" -version = "1.14.18" +version = "1.14.19" dependencies = [ "base64 0.13.0", "clap 2.33.3", @@ -5307,9 +5307,9 @@ dependencies = [ "solana-cli-config", "solana-entry", "solana-ledger", - "solana-logger 1.14.18", + "solana-logger 1.14.19", "solana-runtime", - "solana-sdk 1.14.18", + "solana-sdk 1.14.19", "solana-stake-program", "solana-version", "solana-vote-program", @@ -5318,26 +5318,26 @@ dependencies = [ [[package]] name = "solana-genesis-utils" -version = "1.14.18" +version = "1.14.19" dependencies = [ "solana-download-utils", "solana-runtime", - "solana-sdk 1.14.18", + "solana-sdk 1.14.19", ] [[package]] name = "solana-geyser-plugin-interface" -version = "1.14.18" +version = "1.14.19" dependencies = [ "log", - "solana-sdk 1.14.18", + "solana-sdk 1.14.19", "solana-transaction-status", "thiserror", ] [[package]] name = "solana-geyser-plugin-manager" -version = "1.14.18" +version = "1.14.19" dependencies = [ "bs58", "crossbeam-channel", @@ -5350,14 +5350,14 @@ dependencies = [ "solana-metrics", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.18", + "solana-sdk 1.14.19", "solana-transaction-status", "thiserror", ] [[package]] name = "solana-gossip" -version = "1.14.18" +version = "1.14.19" dependencies = [ "bincode", "bv", @@ -5384,17 +5384,17 @@ dependencies = [ "solana-clap-utils", "solana-client", "solana-entry", - "solana-frozen-abi 1.14.18", - "solana-frozen-abi-macro 1.14.18", + "solana-frozen-abi 1.14.19", + "solana-frozen-abi-macro 1.14.19", "solana-ledger", - "solana-logger 1.14.18", + "solana-logger 1.14.19", "solana-measure", "solana-metrics", "solana-net-utils", "solana-perf", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.14.18", + "solana-sdk 1.14.19", "solana-streamer", "solana-version", "solana-vote-program", @@ -5403,7 +5403,7 @@ dependencies = [ [[package]] name = "solana-install" -version = "1.14.18" +version = "1.14.19" dependencies = [ "atty", "bincode", @@ -5424,8 +5424,8 @@ dependencies = [ "solana-clap-utils", "solana-client", "solana-config-program", - "solana-logger 1.14.18", - "solana-sdk 1.14.18", + "solana-logger 1.14.19", + "solana-sdk 1.14.19", "solana-version", "tar", "tempfile", @@ -5436,7 +5436,7 @@ dependencies = [ [[package]] name = "solana-keygen" -version = "1.14.18" +version = "1.14.19" dependencies = [ "bs58", "clap 3.2.23", @@ -5445,14 +5445,14 @@ dependencies = [ "solana-clap-v3-utils", "solana-cli-config", "solana-remote-wallet", - "solana-sdk 1.14.18", + "solana-sdk 1.14.19", "solana-version", "tiny-bip39", ] [[package]] name = "solana-ledger" -version = "1.14.18" +version = "1.14.19" dependencies = [ "assert_matches", "bincode", @@ -5486,16 +5486,16 @@ dependencies = [ "solana-account-decoder", "solana-bpf-loader-program", "solana-entry", - "solana-frozen-abi 1.14.18", - "solana-frozen-abi-macro 1.14.18", - "solana-logger 1.14.18", + "solana-frozen-abi 1.14.19", + "solana-frozen-abi-macro 1.14.19", + "solana-logger 1.14.19", "solana-measure", "solana-metrics", "solana-perf", "solana-program-runtime", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.14.18", + "solana-sdk 1.14.19", "solana-stake-program", "solana-storage-bigtable", "solana-storage-proto", @@ -5514,7 +5514,7 @@ dependencies = [ [[package]] name = "solana-ledger-tool" -version = "1.14.18" +version = "1.14.19" dependencies = [ "assert_cmd", "base64 0.13.0", @@ -5536,10 +5536,10 @@ dependencies = [ "solana-core", "solana-entry", "solana-ledger", - "solana-logger 1.14.18", + "solana-logger 1.14.19", "solana-measure", "solana-runtime", - "solana-sdk 1.14.18", + "solana-sdk 1.14.19", "solana-stake-program", "solana-storage-bigtable", "solana-transaction-status", @@ -5551,7 +5551,7 @@ dependencies = [ [[package]] name = "solana-local-cluster" -version = "1.14.18" +version = "1.14.19" dependencies = [ "assert_matches", "crossbeam-channel", @@ -5569,9 +5569,9 @@ dependencies = [ "solana-entry", "solana-gossip", "solana-ledger", - "solana-logger 1.14.18", + "solana-logger 1.14.19", "solana-runtime", - "solana-sdk 1.14.18", + "solana-sdk 1.14.19", "solana-stake-program", "solana-streamer", "solana-vote-program", @@ -5580,13 +5580,13 @@ dependencies = [ [[package]] name = "solana-log-analyzer" -version = "1.14.18" +version = "1.14.19" dependencies = [ "byte-unit", "clap 3.2.23", "serde", "serde_json", - "solana-logger 1.14.18", + "solana-logger 1.14.19", "solana-version", ] @@ -5603,7 +5603,7 @@ dependencies = [ [[package]] name = "solana-logger" -version = "1.14.18" +version = "1.14.19" dependencies = [ "env_logger", "lazy_static", @@ -5612,38 +5612,38 @@ dependencies = [ [[package]] name = "solana-measure" -version = "1.14.18" +version = "1.14.19" dependencies = [ "log", - "solana-sdk 1.14.18", + "solana-sdk 1.14.19", ] [[package]] name = "solana-merkle-root-bench" -version = "1.14.18" +version = "1.14.19" dependencies = [ "clap 2.33.3", "log", - "solana-logger 1.14.18", + "solana-logger 1.14.19", "solana-measure", "solana-runtime", - "solana-sdk 1.14.18", + "solana-sdk 1.14.19", "solana-version", ] [[package]] name = "solana-merkle-tree" -version = "1.14.18" +version = "1.14.19" dependencies = [ "fast-math", "hex", "matches", - "solana-program 1.14.18", + "solana-program 1.14.19", ] [[package]] name = "solana-metrics" -version = "1.14.18" +version = "1.14.19" dependencies = [ "crossbeam-channel", "env_logger", @@ -5653,23 +5653,23 @@ dependencies = [ "rand 0.7.3", "reqwest", "serial_test", - "solana-sdk 1.14.18", + "solana-sdk 1.14.19", ] [[package]] name = "solana-net-shaper" -version = "1.14.18" +version = "1.14.19" dependencies = [ "clap 3.2.23", "rand 0.7.3", "serde", "serde_json", - "solana-logger 1.14.18", + "solana-logger 1.14.19", ] [[package]] name = "solana-net-utils" -version = "1.14.18" +version = "1.14.19" dependencies = [ "bincode", "clap 3.2.23", @@ -5680,8 +5680,8 @@ dependencies = [ "serde", "serde_derive", "socket2", - "solana-logger 1.14.18", - "solana-sdk 1.14.18", + "solana-logger 1.14.19", + "solana-sdk 1.14.19", "solana-version", "tokio", "url 2.2.2", @@ -5689,7 +5689,7 @@ dependencies = [ [[package]] name = "solana-notifier" -version = "1.14.18" +version = "1.14.19" dependencies = [ "log", "reqwest", @@ -5698,7 +5698,7 @@ dependencies = [ [[package]] name = "solana-perf" -version = "1.14.18" +version = "1.14.19" dependencies = [ "ahash", "bincode", @@ -5717,17 +5717,17 @@ dependencies = [ "rand_chacha 0.2.2", "rayon", "serde", - "solana-logger 1.14.18", + "solana-logger 1.14.19", "solana-metrics", "solana-rayon-threadlimit", - "solana-sdk 1.14.18", + "solana-sdk 1.14.19", "solana-vote-program", "test-case", ] [[package]] name = "solana-poh" -version = "1.14.18" +version = "1.14.19" dependencies = [ "bincode", "core_affinity", @@ -5737,29 +5737,29 @@ dependencies = [ "rand 0.7.3", "solana-entry", "solana-ledger", - "solana-logger 1.14.18", + "solana-logger 1.14.19", "solana-measure", "solana-metrics", "solana-perf", "solana-runtime", - "solana-sdk 1.14.18", + "solana-sdk 1.14.19", "solana-sys-tuner", "thiserror", ] [[package]] name = "solana-poh-bench" -version = "1.14.18" +version = "1.14.19" dependencies = [ "clap 3.2.23", "log", "rand 0.7.3", "rayon", "solana-entry", - "solana-logger 1.14.18", + "solana-logger 1.14.19", "solana-measure", "solana-perf", - "solana-sdk 1.14.18", + "solana-sdk 1.14.19", "solana-version", ] @@ -5814,7 +5814,7 @@ dependencies = [ [[package]] name = "solana-program" -version = "1.14.18" +version = "1.14.19" dependencies = [ "anyhow", "assert_matches", @@ -5852,10 +5852,10 @@ dependencies = [ "serde_json", "sha2 0.10.2", "sha3 0.10.1", - "solana-frozen-abi 1.14.18", - "solana-frozen-abi-macro 1.14.18", - "solana-logger 1.14.18", - "solana-sdk-macro 1.14.18", + "solana-frozen-abi 1.14.19", + "solana-frozen-abi-macro 1.14.19", + "solana-logger 1.14.19", + "solana-sdk-macro 1.14.19", "static_assertions", "thiserror", "tiny-bip39", @@ -5865,7 +5865,7 @@ dependencies = [ [[package]] name = "solana-program-runtime" -version = "1.14.18" +version = "1.14.19" dependencies = [ "base64 0.13.0", "bincode", @@ -5880,18 +5880,18 @@ dependencies = [ "rand 0.7.3", "rustc_version 0.4.0", "serde", - "solana-frozen-abi 1.14.18", - "solana-frozen-abi-macro 1.14.18", - "solana-logger 1.14.18", + "solana-frozen-abi 1.14.19", + "solana-frozen-abi-macro 1.14.19", + "solana-logger 1.14.19", "solana-measure", "solana-metrics", - "solana-sdk 1.14.18", + "solana-sdk 1.14.19", "thiserror", ] [[package]] name = "solana-program-test" -version = "1.14.18" +version = "1.14.19" dependencies = [ "assert_matches", "async-trait", @@ -5903,10 +5903,10 @@ dependencies = [ "solana-banks-client", "solana-banks-server", "solana-bpf-loader-program", - "solana-logger 1.14.18", + "solana-logger 1.14.19", "solana-program-runtime", "solana-runtime", - "solana-sdk 1.14.18", + "solana-sdk 1.14.19", "solana-stake-program", "solana-vote-program", "thiserror", @@ -5915,7 +5915,7 @@ dependencies = [ [[package]] name = "solana-rayon-threadlimit" -version = "1.14.18" +version = "1.14.19" dependencies = [ "lazy_static", "num_cpus", @@ -5923,7 +5923,7 @@ dependencies = [ [[package]] name = "solana-remote-wallet" -version = "1.14.18" +version = "1.14.19" dependencies = [ "console", "dialoguer", @@ -5934,14 +5934,14 @@ dependencies = [ "parking_lot 0.12.1", "qstring", "semver 1.0.10", - "solana-sdk 1.14.18", + "solana-sdk 1.14.19", "thiserror", "uriparse", ] [[package]] name = "solana-rpc" -version = "1.14.18" +version = "1.14.19" dependencies = [ "base64 0.13.0", "bincode", @@ -5977,7 +5977,7 @@ dependencies = [ "solana-poh", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.14.18", + "solana-sdk 1.14.19", "solana-send-transaction-service", "solana-stake-program", "solana-storage-bigtable", @@ -5996,7 +5996,7 @@ dependencies = [ [[package]] name = "solana-rpc-test" -version = "1.14.18" +version = "1.14.19" dependencies = [ "bincode", "bs58", @@ -6008,9 +6008,9 @@ dependencies = [ "serde_json", "solana-account-decoder", "solana-client", - "solana-logger 1.14.18", + "solana-logger 1.14.19", "solana-rpc", - "solana-sdk 1.14.18", + "solana-sdk 1.14.19", "solana-streamer", "solana-test-validator", "solana-transaction-status", @@ -6019,7 +6019,7 @@ dependencies = [ [[package]] name = "solana-runtime" -version = "1.14.18" +version = "1.14.19" dependencies = [ "arrayref", "assert_matches", @@ -6060,18 +6060,18 @@ dependencies = [ "solana-bucket-map", "solana-compute-budget-program", "solana-config-program", - "solana-frozen-abi 1.14.18", - "solana-frozen-abi-macro 1.14.18", - "solana-logger 1.14.18", + "solana-frozen-abi 1.14.19", + "solana-frozen-abi-macro 1.14.19", + "solana-logger 1.14.19", "solana-measure", "solana-metrics", "solana-program-runtime", "solana-rayon-threadlimit", - "solana-sdk 1.14.18", + "solana-sdk 1.14.19", "solana-stake-program", "solana-vote-program", "solana-zk-token-proof-program", - "solana-zk-token-sdk 1.14.18", + "solana-zk-token-sdk 1.14.19", "strum", "strum_macros", "symlink", @@ -6134,7 +6134,7 @@ dependencies = [ [[package]] name = "solana-sdk" -version = "1.14.18" +version = "1.14.19" dependencies = [ "anyhow", "assert_matches", @@ -6174,11 +6174,11 @@ dependencies = [ "serde_json", "sha2 0.10.2", "sha3 0.10.1", - "solana-frozen-abi 1.14.18", - "solana-frozen-abi-macro 1.14.18", - "solana-logger 1.14.18", - "solana-program 1.14.18", - "solana-sdk-macro 1.14.18", + "solana-frozen-abi 1.14.19", + "solana-frozen-abi-macro 1.14.19", + "solana-logger 1.14.19", + "solana-program 1.14.19", + "solana-sdk-macro 1.14.19", "static_assertions", "thiserror", "tiny-bip39", @@ -6201,7 +6201,7 @@ dependencies = [ [[package]] name = "solana-sdk-macro" -version = "1.14.18" +version = "1.14.19" dependencies = [ "bs58", "proc-macro2 1.0.52", @@ -6212,21 +6212,21 @@ dependencies = [ [[package]] name = "solana-send-transaction-service" -version = "1.14.18" +version = "1.14.19" dependencies = [ "crossbeam-channel", "log", "solana-client", - "solana-logger 1.14.18", + "solana-logger 1.14.19", "solana-measure", "solana-metrics", "solana-runtime", - "solana-sdk 1.14.18", + "solana-sdk 1.14.19", ] [[package]] name = "solana-stake-accounts" -version = "1.14.18" +version = "1.14.19" dependencies = [ "clap 2.33.3", "solana-clap-utils", @@ -6234,13 +6234,13 @@ dependencies = [ "solana-client", "solana-remote-wallet", "solana-runtime", - "solana-sdk 1.14.18", + "solana-sdk 1.14.19", "solana-stake-program", ] [[package]] name = "solana-stake-program" -version = "1.14.18" +version = "1.14.19" dependencies = [ "assert_matches", "bincode", @@ -6252,12 +6252,12 @@ dependencies = [ "serde", "serde_derive", "solana-config-program", - "solana-frozen-abi 1.14.18", - "solana-frozen-abi-macro 1.14.18", - "solana-logger 1.14.18", + "solana-frozen-abi 1.14.19", + "solana-frozen-abi-macro 1.14.19", + "solana-logger 1.14.19", "solana-metrics", "solana-program-runtime", - "solana-sdk 1.14.18", + "solana-sdk 1.14.19", "solana-vote-program", "test-case", "thiserror", @@ -6265,7 +6265,7 @@ dependencies = [ [[package]] name = "solana-storage-bigtable" -version = "1.14.18" +version = "1.14.19" dependencies = [ "backoff", "bincode", @@ -6286,7 +6286,7 @@ dependencies = [ "serde_derive", "smpl_jwt", "solana-metrics", - "solana-sdk 1.14.18", + "solana-sdk 1.14.19", "solana-storage-proto", "solana-transaction-status", "thiserror", @@ -6297,7 +6297,7 @@ dependencies = [ [[package]] name = "solana-storage-proto" -version = "1.14.18" +version = "1.14.19" dependencies = [ "bincode", "bs58", @@ -6306,25 +6306,25 @@ dependencies = [ "protobuf-src", "serde", "solana-account-decoder", - "solana-sdk 1.14.18", + "solana-sdk 1.14.19", "solana-transaction-status", "tonic-build 0.8.0", ] [[package]] name = "solana-store-tool" -version = "1.14.18" +version = "1.14.19" dependencies = [ "clap 2.33.3", "log", - "solana-logger 1.14.18", + "solana-logger 1.14.19", "solana-runtime", "solana-version", ] [[package]] name = "solana-streamer" -version = "1.14.18" +version = "1.14.19" dependencies = [ "crossbeam-channel", "futures-util", @@ -6341,10 +6341,10 @@ dependencies = [ "rand 0.7.3", "rcgen", "rustls 0.20.6", - "solana-logger 1.14.18", + "solana-logger 1.14.19", "solana-metrics", "solana-perf", - "solana-sdk 1.14.18", + "solana-sdk 1.14.19", "thiserror", "tokio", "x509-parser", @@ -6352,13 +6352,13 @@ dependencies = [ [[package]] name = "solana-sys-tuner" -version = "1.14.18" +version = "1.14.19" dependencies = [ "clap 2.33.3", "libc", "log", "nix", - "solana-logger 1.14.18", + "solana-logger 1.14.19", "solana-version", "sysctl", "unix_socket2", @@ -6367,7 +6367,7 @@ dependencies = [ [[package]] name = "solana-test-validator" -version = "1.14.18" +version = "1.14.19" dependencies = [ "base64 0.13.0", "log", @@ -6378,20 +6378,20 @@ dependencies = [ "solana-core", "solana-gossip", "solana-ledger", - "solana-logger 1.14.18", + "solana-logger 1.14.19", "solana-net-utils", "solana-program-runtime", "solana-program-test", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.18", + "solana-sdk 1.14.19", "solana-streamer", "tokio", ] [[package]] name = "solana-tokens" -version = "1.14.18" +version = "1.14.19" dependencies = [ "bincode", "chrono", @@ -6407,9 +6407,9 @@ dependencies = [ "solana-clap-utils", "solana-cli-config", "solana-client", - "solana-logger 1.14.18", + "solana-logger 1.14.19", "solana-remote-wallet", - "solana-sdk 1.14.18", + "solana-sdk 1.14.19", "solana-streamer", "solana-test-validator", "solana-transaction-status", @@ -6422,7 +6422,7 @@ dependencies = [ [[package]] name = "solana-transaction-dos" -version = "1.14.18" +version = "1.14.19" dependencies = [ "bincode", "clap 2.33.3", @@ -6436,11 +6436,11 @@ dependencies = [ "solana-faucet", "solana-gossip", "solana-local-cluster", - "solana-logger 1.14.18", + "solana-logger 1.14.19", "solana-measure", "solana-net-utils", "solana-runtime", - "solana-sdk 1.14.18", + "solana-sdk 1.14.19", "solana-streamer", "solana-transaction-status", "solana-version", @@ -6448,7 +6448,7 @@ dependencies = [ [[package]] name = "solana-transaction-status" -version = "1.14.18" +version = "1.14.19" dependencies = [ "Inflector", "base64 0.13.0", @@ -6464,7 +6464,7 @@ dependencies = [ "solana-address-lookup-table-program", "solana-measure", "solana-metrics", - "solana-sdk 1.14.18", + "solana-sdk 1.14.19", "solana-vote-program", "spl-associated-token-account", "spl-memo", @@ -6475,7 +6475,7 @@ dependencies = [ [[package]] name = "solana-upload-perf" -version = "1.14.18" +version = "1.14.19" dependencies = [ "serde_json", "solana-metrics", @@ -6483,7 +6483,7 @@ dependencies = [ [[package]] name = "solana-validator" -version = "1.14.18" +version = "1.14.19" dependencies = [ "chrono", "clap 2.33.3", @@ -6514,14 +6514,14 @@ dependencies = [ "solana-genesis-utils", "solana-gossip", "solana-ledger", - "solana-logger 1.14.18", + "solana-logger 1.14.19", "solana-metrics", "solana-net-utils", "solana-perf", "solana-poh", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.18", + "solana-sdk 1.14.19", "solana-send-transaction-service", "solana-storage-bigtable", "solana-streamer", @@ -6534,21 +6534,21 @@ dependencies = [ [[package]] name = "solana-version" -version = "1.14.18" +version = "1.14.19" dependencies = [ "log", "rustc_version 0.4.0", "semver 1.0.10", "serde", "serde_derive", - "solana-frozen-abi 1.14.18", - "solana-frozen-abi-macro 1.14.18", - "solana-sdk 1.14.18", + "solana-frozen-abi 1.14.19", + "solana-frozen-abi-macro 1.14.19", + "solana-sdk 1.14.19", ] [[package]] name = "solana-vote-program" -version = "1.14.18" +version = "1.14.19" dependencies = [ "bincode", "itertools", @@ -6559,19 +6559,19 @@ dependencies = [ "rustc_version 0.4.0", "serde", "serde_derive", - "solana-frozen-abi 1.14.18", - "solana-frozen-abi-macro 1.14.18", - "solana-logger 1.14.18", + "solana-frozen-abi 1.14.19", + "solana-frozen-abi-macro 1.14.19", + "solana-logger 1.14.19", "solana-metrics", "solana-program-runtime", - "solana-sdk 1.14.18", + "solana-sdk 1.14.19", "test-case", "thiserror", ] [[package]] name = "solana-watchtower" -version = "1.14.18" +version = "1.14.19" dependencies = [ "clap 2.33.3", "humantime", @@ -6580,35 +6580,35 @@ dependencies = [ "solana-cli-config", "solana-cli-output", "solana-client", - "solana-logger 1.14.18", + "solana-logger 1.14.19", "solana-metrics", "solana-notifier", - "solana-sdk 1.14.18", + "solana-sdk 1.14.19", "solana-version", ] [[package]] name = "solana-zk-token-proof-program" -version = "1.14.18" +version = "1.14.19" dependencies = [ "bytemuck", "getrandom 0.1.16", "num-derive", "num-traits", "solana-program-runtime", - "solana-sdk 1.14.18", - "solana-zk-token-sdk 1.14.18", + "solana-sdk 1.14.19", + "solana-zk-token-sdk 1.14.19", ] [[package]] name = "solana-zk-token-proof-program-tests" -version = "1.14.18" +version = "1.14.19" dependencies = [ "bytemuck", "solana-program-runtime", "solana-program-test", - "solana-sdk 1.14.18", - "solana-zk-token-sdk 1.14.18", + "solana-sdk 1.14.19", + "solana-zk-token-sdk 1.14.19", ] [[package]] @@ -6644,7 +6644,7 @@ dependencies = [ [[package]] name = "solana-zk-token-sdk" -version = "1.14.18" +version = "1.14.19" dependencies = [ "aes-gcm-siv", "arrayref", @@ -6664,8 +6664,8 @@ dependencies = [ "serde", "serde_json", "sha3 0.9.1", - "solana-program 1.14.18", - "solana-sdk 1.14.18", + "solana-program 1.14.19", + "solana-sdk 1.14.19", "subtle", "thiserror", "zeroize", diff --git a/account-decoder/Cargo.toml b/account-decoder/Cargo.toml index 3964f6533e2935..b8e41415bbfa0f 100644 --- a/account-decoder/Cargo.toml +++ b/account-decoder/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-account-decoder" -version = "1.14.18" +version = "1.14.19" description = "Solana account decoder" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -19,10 +19,10 @@ lazy_static = "1.4.0" serde = "1.0.138" serde_derive = "1.0.103" serde_json = "1.0.81" -solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.18" } -solana-config-program = { path = "../programs/config", version = "=1.14.18" } -solana-sdk = { path = "../sdk", version = "=1.14.18" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.18" } +solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.19" } +solana-config-program = { path = "../programs/config", version = "=1.14.19" } +solana-sdk = { path = "../sdk", version = "=1.14.19" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.19" } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } spl-token-2022 = { version = "=0.6.1", features = ["no-entrypoint"] } thiserror = "1.0" diff --git a/accounts-bench/Cargo.toml b/accounts-bench/Cargo.toml index 9df729d40908a4..20d711328301dc 100644 --- a/accounts-bench/Cargo.toml +++ b/accounts-bench/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-accounts-bench" -version = "1.14.18" +version = "1.14.19" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -12,11 +12,11 @@ publish = false clap = "2.33.1" log = "0.4.17" rayon = "1.5.3" -solana-logger = { path = "../logger", version = "=1.14.18" } -solana-measure = { path = "../measure", version = "=1.14.18" } -solana-runtime = { path = "../runtime", version = "=1.14.18" } -solana-sdk = { path = "../sdk", version = "=1.14.18" } -solana-version = { path = "../version", version = "=1.14.18" } +solana-logger = { path = "../logger", version = "=1.14.19" } +solana-measure = { path = "../measure", version = "=1.14.19" } +solana-runtime = { path = "../runtime", version = "=1.14.19" } +solana-sdk = { path = "../sdk", version = "=1.14.19" } +solana-version = { path = "../version", version = "=1.14.19" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/accounts-cluster-bench/Cargo.toml b/accounts-cluster-bench/Cargo.toml index 8a2b75d1e33aa2..8d7a4c7f39258d 100644 --- a/accounts-cluster-bench/Cargo.toml +++ b/accounts-cluster-bench/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-accounts-cluster-bench" -version = "1.14.18" +version = "1.14.19" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -13,25 +13,25 @@ clap = "2.33.1" log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.18" } -solana-clap-utils = { path = "../clap-utils", version = "=1.14.18" } -solana-client = { path = "../client", version = "=1.14.18" } -solana-faucet = { path = "../faucet", version = "=1.14.18" } -solana-gossip = { path = "../gossip", version = "=1.14.18" } -solana-logger = { path = "../logger", version = "=1.14.18" } -solana-measure = { path = "../measure", version = "=1.14.18" } -solana-net-utils = { path = "../net-utils", version = "=1.14.18" } -solana-runtime = { path = "../runtime", version = "=1.14.18" } -solana-sdk = { path = "../sdk", version = "=1.14.18" } -solana-streamer = { path = "../streamer", version = "=1.14.18" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.18" } -solana-version = { path = "../version", version = "=1.14.18" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.19" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.19" } +solana-client = { path = "../client", version = "=1.14.19" } +solana-faucet = { path = "../faucet", version = "=1.14.19" } +solana-gossip = { path = "../gossip", version = "=1.14.19" } +solana-logger = { path = "../logger", version = "=1.14.19" } +solana-measure = { path = "../measure", version = "=1.14.19" } +solana-net-utils = { path = "../net-utils", version = "=1.14.19" } +solana-runtime = { path = "../runtime", version = "=1.14.19" } +solana-sdk = { path = "../sdk", version = "=1.14.19" } +solana-streamer = { path = "../streamer", version = "=1.14.19" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.19" } +solana-version = { path = "../version", version = "=1.14.19" } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } [dev-dependencies] -solana-core = { path = "../core", version = "=1.14.18" } -solana-local-cluster = { path = "../local-cluster", version = "=1.14.18" } -solana-test-validator = { path = "../test-validator", version = "=1.14.18" } +solana-core = { path = "../core", version = "=1.14.19" } +solana-local-cluster = { path = "../local-cluster", version = "=1.14.19" } +solana-test-validator = { path = "../test-validator", version = "=1.14.19" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/banking-bench/Cargo.toml b/banking-bench/Cargo.toml index 4f41f4f6a3818c..20b86b366ec3fd 100644 --- a/banking-bench/Cargo.toml +++ b/banking-bench/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-banking-bench" -version = "1.14.18" +version = "1.14.19" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,18 +14,18 @@ crossbeam-channel = "0.5" log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" -solana-client = { path = "../client", version = "=1.14.18" } -solana-core = { path = "../core", version = "=1.14.18" } -solana-gossip = { path = "../gossip", version = "=1.14.18" } -solana-ledger = { path = "../ledger", version = "=1.14.18" } -solana-logger = { path = "../logger", version = "=1.14.18" } -solana-measure = { path = "../measure", version = "=1.14.18" } -solana-perf = { path = "../perf", version = "=1.14.18" } -solana-poh = { path = "../poh", version = "=1.14.18" } -solana-runtime = { path = "../runtime", version = "=1.14.18" } -solana-sdk = { path = "../sdk", version = "=1.14.18" } -solana-streamer = { path = "../streamer", version = "=1.14.18" } -solana-version = { path = "../version", version = "=1.14.18" } +solana-client = { path = "../client", version = "=1.14.19" } +solana-core = { path = "../core", version = "=1.14.19" } +solana-gossip = { path = "../gossip", version = "=1.14.19" } +solana-ledger = { path = "../ledger", version = "=1.14.19" } +solana-logger = { path = "../logger", version = "=1.14.19" } +solana-measure = { path = "../measure", version = "=1.14.19" } +solana-perf = { path = "../perf", version = "=1.14.19" } +solana-poh = { path = "../poh", version = "=1.14.19" } +solana-runtime = { path = "../runtime", version = "=1.14.19" } +solana-sdk = { path = "../sdk", version = "=1.14.19" } +solana-streamer = { path = "../streamer", version = "=1.14.19" } +solana-version = { path = "../version", version = "=1.14.19" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/banks-client/Cargo.toml b/banks-client/Cargo.toml index 4dd1cc5c38d4df..3e3b801e759424 100644 --- a/banks-client/Cargo.toml +++ b/banks-client/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-banks-client" -version = "1.14.18" +version = "1.14.19" description = "Solana banks client" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,17 +12,17 @@ edition = "2021" [dependencies] borsh = "0.9.3" futures = "0.3" -solana-banks-interface = { path = "../banks-interface", version = "=1.14.18" } -solana-program = { path = "../sdk/program", version = "=1.14.18" } -solana-sdk = { path = "../sdk", version = "=1.14.18" } +solana-banks-interface = { path = "../banks-interface", version = "=1.14.19" } +solana-program = { path = "../sdk/program", version = "=1.14.19" } +solana-sdk = { path = "../sdk", version = "=1.14.19" } tarpc = { version = "0.29.0", features = ["full"] } thiserror = "1.0" tokio = { version = "~1.14.1", features = ["full"] } tokio-serde = { version = "0.8", features = ["bincode"] } [dev-dependencies] -solana-banks-server = { path = "../banks-server", version = "=1.14.18" } -solana-runtime = { path = "../runtime", version = "=1.14.18" } +solana-banks-server = { path = "../banks-server", version = "=1.14.19" } +solana-runtime = { path = "../runtime", version = "=1.14.19" } [lib] crate-type = ["lib"] diff --git a/banks-interface/Cargo.toml b/banks-interface/Cargo.toml index 83a37c0bfa2d03..1fec0c55435c71 100644 --- a/banks-interface/Cargo.toml +++ b/banks-interface/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-banks-interface" -version = "1.14.18" +version = "1.14.19" description = "Solana banks RPC interface" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -11,7 +11,7 @@ edition = "2021" [dependencies] serde = { version = "1.0.138", features = ["derive"] } -solana-sdk = { path = "../sdk", version = "=1.14.18" } +solana-sdk = { path = "../sdk", version = "=1.14.19" } tarpc = { version = "0.29.0", features = ["full"] } [lib] diff --git a/banks-server/Cargo.toml b/banks-server/Cargo.toml index 6f85dbef0c2975..c4c60cb7fdba6b 100644 --- a/banks-server/Cargo.toml +++ b/banks-server/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-banks-server" -version = "1.14.18" +version = "1.14.19" description = "Solana banks server" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,11 +13,11 @@ edition = "2021" bincode = "1.3.3" crossbeam-channel = "0.5" futures = "0.3" -solana-banks-interface = { path = "../banks-interface", version = "=1.14.18" } -solana-client = { path = "../client", version = "=1.14.18" } -solana-runtime = { path = "../runtime", version = "=1.14.18" } -solana-sdk = { path = "../sdk", version = "=1.14.18" } -solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.18" } +solana-banks-interface = { path = "../banks-interface", version = "=1.14.19" } +solana-client = { path = "../client", version = "=1.14.19" } +solana-runtime = { path = "../runtime", version = "=1.14.19" } +solana-sdk = { path = "../sdk", version = "=1.14.19" } +solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.19" } tarpc = { version = "0.29.0", features = ["full"] } tokio = { version = "1", features = ["full"] } tokio-serde = { version = "0.8", features = ["bincode"] } diff --git a/bench-streamer/Cargo.toml b/bench-streamer/Cargo.toml index 5bb526e07969d8..ff9792bb4f7e06 100644 --- a/bench-streamer/Cargo.toml +++ b/bench-streamer/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-bench-streamer" -version = "1.14.18" +version = "1.14.19" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -11,9 +11,9 @@ publish = false [dependencies] clap = { version = "3.1.5", features = ["cargo"] } crossbeam-channel = "0.5" -solana-net-utils = { path = "../net-utils", version = "=1.14.18" } -solana-streamer = { path = "../streamer", version = "=1.14.18" } -solana-version = { path = "../version", version = "=1.14.18" } +solana-net-utils = { path = "../net-utils", version = "=1.14.19" } +solana-streamer = { path = "../streamer", version = "=1.14.19" } +solana-version = { path = "../version", version = "=1.14.19" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/bench-tps/Cargo.toml b/bench-tps/Cargo.toml index 76e179966df70b..ac15af2b290345 100644 --- a/bench-tps/Cargo.toml +++ b/bench-tps/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-bench-tps" -version = "1.14.18" +version = "1.14.19" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -15,28 +15,28 @@ log = "0.4.17" rayon = "1.5.3" serde_json = "1.0.81" serde_yaml = "0.8.26" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.18" } -solana-cli-config = { path = "../cli-config", version = "=1.14.18" } -solana-client = { path = "../client", version = "=1.14.18" } -solana-core = { path = "../core", version = "=1.14.18" } -solana-faucet = { path = "../faucet", version = "=1.14.18" } -solana-genesis = { path = "../genesis", version = "=1.14.18" } -solana-gossip = { path = "../gossip", version = "=1.14.18" } -solana-logger = { path = "../logger", version = "=1.14.18" } -solana-measure = { path = "../measure", version = "=1.14.18" } -solana-metrics = { path = "../metrics", version = "=1.14.18" } -solana-net-utils = { path = "../net-utils", version = "=1.14.18" } -solana-rpc = { path = "../rpc", version = "=1.14.18" } -solana-runtime = { path = "../runtime", version = "=1.14.18" } -solana-sdk = { path = "../sdk", version = "=1.14.18" } -solana-streamer = { path = "../streamer", version = "=1.14.18" } -solana-version = { path = "../version", version = "=1.14.18" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.19" } +solana-cli-config = { path = "../cli-config", version = "=1.14.19" } +solana-client = { path = "../client", version = "=1.14.19" } +solana-core = { path = "../core", version = "=1.14.19" } +solana-faucet = { path = "../faucet", version = "=1.14.19" } +solana-genesis = { path = "../genesis", version = "=1.14.19" } +solana-gossip = { path = "../gossip", version = "=1.14.19" } +solana-logger = { path = "../logger", version = "=1.14.19" } +solana-measure = { path = "../measure", version = "=1.14.19" } +solana-metrics = { path = "../metrics", version = "=1.14.19" } +solana-net-utils = { path = "../net-utils", version = "=1.14.19" } +solana-rpc = { path = "../rpc", version = "=1.14.19" } +solana-runtime = { path = "../runtime", version = "=1.14.19" } +solana-sdk = { path = "../sdk", version = "=1.14.19" } +solana-streamer = { path = "../streamer", version = "=1.14.19" } +solana-version = { path = "../version", version = "=1.14.19" } thiserror = "1.0" [dev-dependencies] serial_test = "0.8.0" -solana-local-cluster = { path = "../local-cluster", version = "=1.14.18" } -solana-test-validator = { path = "../test-validator", version = "=1.14.18" } +solana-local-cluster = { path = "../local-cluster", version = "=1.14.19" } +solana-test-validator = { path = "../test-validator", version = "=1.14.19" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/bloom/Cargo.toml b/bloom/Cargo.toml index f3c2db3b153f8f..ea61e2e159d14e 100644 --- a/bloom/Cargo.toml +++ b/bloom/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bloom" -version = "1.14.18" +version = "1.14.19" description = "Solana bloom filter" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -17,9 +17,9 @@ rand = "0.7.0" rayon = "1.5.3" serde = { version = "1.0.138", features = ["rc"] } serde_derive = "1.0.103" -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.18" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.18" } -solana-sdk = { path = "../sdk", version = "=1.14.18" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.19" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.19" } +solana-sdk = { path = "../sdk", version = "=1.14.19" } [lib] crate-type = ["lib"] diff --git a/bucket_map/Cargo.toml b/bucket_map/Cargo.toml index 3b2be6bb4c6481..8f574e2ca4a5c2 100644 --- a/bucket_map/Cargo.toml +++ b/bucket_map/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bucket-map" -version = "1.14.18" +version = "1.14.19" description = "solana-bucket-map" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-bucket-map" @@ -15,14 +15,14 @@ log = { version = "0.4.17" } memmap2 = "0.5.3" modular-bitfield = "0.11.2" rand = "0.7.0" -solana-measure = { path = "../measure", version = "=1.14.18" } -solana-sdk = { path = "../sdk", version = "=1.14.18" } +solana-measure = { path = "../measure", version = "=1.14.19" } +solana-sdk = { path = "../sdk", version = "=1.14.19" } tempfile = "3.4.0" [dev-dependencies] fs_extra = "1.2.0" rayon = "1.5.3" -solana-logger = { path = "../logger", version = "=1.14.18" } +solana-logger = { path = "../logger", version = "=1.14.19" } [lib] crate-type = ["lib"] diff --git a/clap-utils/Cargo.toml b/clap-utils/Cargo.toml index 65050b2a3825f1..83769dd5c0cfe9 100644 --- a/clap-utils/Cargo.toml +++ b/clap-utils/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-clap-utils" -version = "1.14.18" +version = "1.14.19" description = "Solana utilities for the clap" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,9 +13,9 @@ edition = "2021" chrono = "0.4" clap = "2.33.0" rpassword = "6.0" -solana-perf = { path = "../perf", version = "=1.14.18" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.18", default-features = false } -solana-sdk = { path = "../sdk", version = "=1.14.18" } +solana-perf = { path = "../perf", version = "=1.14.19" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.19", default-features = false } +solana-sdk = { path = "../sdk", version = "=1.14.19" } thiserror = "1.0.31" tiny-bip39 = "0.8.2" uriparse = "0.6.4" diff --git a/clap-v3-utils/Cargo.toml b/clap-v3-utils/Cargo.toml index 1cb5804da7fd00..6c3bc8c0077a1b 100644 --- a/clap-v3-utils/Cargo.toml +++ b/clap-v3-utils/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-clap-v3-utils" -version = "1.14.18" +version = "1.14.19" description = "Solana utilities for the clap v3" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,9 +13,9 @@ edition = "2021" chrono = "0.4" clap = { version = "3.2.23", features = ["cargo"] } rpassword = "6.0" -solana-perf = { path = "../perf", version = "=1.14.18" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.18", default-features = false } -solana-sdk = { path = "../sdk", version = "=1.14.18" } +solana-perf = { path = "../perf", version = "=1.14.19" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.19", default-features = false } +solana-sdk = { path = "../sdk", version = "=1.14.19" } thiserror = "1.0.31" tiny-bip39 = "0.8.2" uriparse = "0.6.4" diff --git a/cli-config/Cargo.toml b/cli-config/Cargo.toml index 07a8376ec5f275..36804254e6f07f 100644 --- a/cli-config/Cargo.toml +++ b/cli-config/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-cli-config" description = "Blockchain, Rebuilt for Scale" -version = "1.14.18" +version = "1.14.19" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -15,8 +15,8 @@ lazy_static = "1.4.0" serde = "1.0.138" serde_derive = "1.0.103" serde_yaml = "0.8.26" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.18" } -solana-sdk = { path = "../sdk", version = "=1.14.18" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.19" } +solana-sdk = { path = "../sdk", version = "=1.14.19" } url = "2.2.2" [dev-dependencies] diff --git a/cli-output/Cargo.toml b/cli-output/Cargo.toml index 88764247f5681d..e8d1d24489c33f 100644 --- a/cli-output/Cargo.toml +++ b/cli-output/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-cli-output" description = "Blockchain, Rebuilt for Scale" -version = "1.14.18" +version = "1.14.19" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -21,13 +21,13 @@ pretty-hex = "0.3.0" semver = "1.0.10" serde = "1.0.138" serde_json = "1.0.81" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.18" } -solana-clap-utils = { path = "../clap-utils", version = "=1.14.18" } -solana-cli-config = { path = "../cli-config", version = "=1.14.18" } -solana-client = { path = "../client", version = "=1.14.18" } -solana-sdk = { path = "../sdk", version = "=1.14.18" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.18" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.18" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.19" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.19" } +solana-cli-config = { path = "../cli-config", version = "=1.14.19" } +solana-client = { path = "../client", version = "=1.14.19" } +solana-sdk = { path = "../sdk", version = "=1.14.19" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.19" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.19" } spl-memo = { version = "=3.0.1", features = ["no-entrypoint"] } [dev-dependencies] diff --git a/cli/Cargo.toml b/cli/Cargo.toml index 567b2aee0a60d7..50233064b33360 100644 --- a/cli/Cargo.toml +++ b/cli/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-cli" description = "Blockchain, Rebuilt for Scale" -version = "1.14.18" +version = "1.14.19" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -27,30 +27,30 @@ semver = "1.0.10" serde = "1.0.138" serde_derive = "1.0.103" serde_json = "1.0.81" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.18" } -solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.18" } -solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.18" } -solana-clap-utils = { path = "../clap-utils", version = "=1.14.18" } -solana-cli-config = { path = "../cli-config", version = "=1.14.18" } -solana-cli-output = { path = "../cli-output", version = "=1.14.18" } -solana-client = { path = "../client", version = "=1.14.18" } -solana-config-program = { path = "../programs/config", version = "=1.14.18" } -solana-faucet = { path = "../faucet", version = "=1.14.18" } -solana-logger = { path = "../logger", version = "=1.14.18" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.18" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.18" } -solana-sdk = { path = "../sdk", version = "=1.14.18" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.18" } -solana-version = { path = "../version", version = "=1.14.18" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.18" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.19" } +solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.19" } +solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.19" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.19" } +solana-cli-config = { path = "../cli-config", version = "=1.14.19" } +solana-cli-output = { path = "../cli-output", version = "=1.14.19" } +solana-client = { path = "../client", version = "=1.14.19" } +solana-config-program = { path = "../programs/config", version = "=1.14.19" } +solana-faucet = { path = "../faucet", version = "=1.14.19" } +solana-logger = { path = "../logger", version = "=1.14.19" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.19" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.19" } +solana-sdk = { path = "../sdk", version = "=1.14.19" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.19" } +solana-version = { path = "../version", version = "=1.14.19" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.19" } solana_rbpf = "=0.2.31" spl-memo = { version = "=3.0.1", features = ["no-entrypoint"] } thiserror = "1.0.31" tiny-bip39 = "0.8.2" [dev-dependencies] -solana-streamer = { path = "../streamer", version = "=1.14.18" } -solana-test-validator = { path = "../test-validator", version = "=1.14.18" } +solana-streamer = { path = "../streamer", version = "=1.14.19" } +solana-test-validator = { path = "../test-validator", version = "=1.14.19" } tempfile = "3.4.0" [[bin]] diff --git a/client-test/Cargo.toml b/client-test/Cargo.toml index b100aa7d851ba9..467cb32fc3fe97 100644 --- a/client-test/Cargo.toml +++ b/client-test/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-client-test" -version = "1.14.18" +version = "1.14.19" description = "Solana RPC Test" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,25 +14,25 @@ publish = false futures-util = "0.3.21" serde_json = "1.0.81" serial_test = "0.8.0" -solana-client = { path = "../client", version = "=1.14.18" } -solana-ledger = { path = "../ledger", version = "=1.14.18" } -solana-measure = { path = "../measure", version = "=1.14.18" } -solana-merkle-tree = { path = "../merkle-tree", version = "=1.14.18" } -solana-metrics = { path = "../metrics", version = "=1.14.18" } -solana-perf = { path = "../perf", version = "=1.14.18" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.18" } -solana-rpc = { path = "../rpc", version = "=1.14.18" } -solana-runtime = { path = "../runtime", version = "=1.14.18" } -solana-sdk = { path = "../sdk", version = "=1.14.18" } -solana-streamer = { path = "../streamer", version = "=1.14.18" } -solana-test-validator = { path = "../test-validator", version = "=1.14.18" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.18" } -solana-version = { path = "../version", version = "=1.14.18" } +solana-client = { path = "../client", version = "=1.14.19" } +solana-ledger = { path = "../ledger", version = "=1.14.19" } +solana-measure = { path = "../measure", version = "=1.14.19" } +solana-merkle-tree = { path = "../merkle-tree", version = "=1.14.19" } +solana-metrics = { path = "../metrics", version = "=1.14.19" } +solana-perf = { path = "../perf", version = "=1.14.19" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.19" } +solana-rpc = { path = "../rpc", version = "=1.14.19" } +solana-runtime = { path = "../runtime", version = "=1.14.19" } +solana-sdk = { path = "../sdk", version = "=1.14.19" } +solana-streamer = { path = "../streamer", version = "=1.14.19" } +solana-test-validator = { path = "../test-validator", version = "=1.14.19" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.19" } +solana-version = { path = "../version", version = "=1.14.19" } systemstat = "0.1.11" tokio = { version = "~1.14.1", features = ["full"] } [dev-dependencies] -solana-logger = { path = "../logger", version = "=1.14.18" } +solana-logger = { path = "../logger", version = "=1.14.19" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/client/Cargo.toml b/client/Cargo.toml index 6166b95e29e82d..2ee1b6242bdc9e 100644 --- a/client/Cargo.toml +++ b/client/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-client" -version = "1.14.18" +version = "1.14.19" description = "Solana Client" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -38,17 +38,17 @@ semver = "1.0.10" serde = "1.0.138" serde_derive = "1.0.103" serde_json = "1.0.81" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.18" } -solana-clap-utils = { path = "../clap-utils", version = "=1.14.18" } -solana-faucet = { path = "../faucet", version = "=1.14.18" } -solana-measure = { path = "../measure", version = "=1.14.18" } -solana-metrics = { path = "../metrics", version = "=1.14.18" } -solana-net-utils = { path = "../net-utils", version = "=1.14.18" } -solana-sdk = { path = "../sdk", version = "=1.14.18" } -solana-streamer = { path = "../streamer", version = "=1.14.18" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.18" } -solana-version = { path = "../version", version = "=1.14.18" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.18" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.19" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.19" } +solana-faucet = { path = "../faucet", version = "=1.14.19" } +solana-measure = { path = "../measure", version = "=1.14.19" } +solana-metrics = { path = "../metrics", version = "=1.14.19" } +solana-net-utils = { path = "../net-utils", version = "=1.14.19" } +solana-sdk = { path = "../sdk", version = "=1.14.19" } +solana-streamer = { path = "../streamer", version = "=1.14.19" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.19" } +solana-version = { path = "../version", version = "=1.14.19" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.19" } spl-token-2022 = { version = "=0.6.1", features = ["no-entrypoint"] } thiserror = "1.0" tokio = { version = "1", features = ["full"] } @@ -61,8 +61,8 @@ url = "2.2.2" anyhow = "1.0.58" assert_matches = "1.5.0" jsonrpc-http-server = "18.0.0" -solana-logger = { path = "../logger", version = "=1.14.18" } -solana-perf = { path = "../perf", version = "=1.14.18" } +solana-logger = { path = "../logger", version = "=1.14.19" } +solana-perf = { path = "../perf", version = "=1.14.19" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/core/Cargo.toml b/core/Cargo.toml index 57adc62e990972..39bdc1f0f8ee78 100644 --- a/core/Cargo.toml +++ b/core/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "solana-core" description = "Blockchain, Rebuilt for Scale" -version = "1.14.18" +version = "1.14.19" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-core" readme = "../README.md" @@ -36,30 +36,30 @@ rand_chacha = "0.2.2" rayon = "1.5.3" serde = "1.0.138" serde_derive = "1.0.103" -solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.18" } -solana-bloom = { path = "../bloom", version = "=1.14.18" } -solana-client = { path = "../client", version = "=1.14.18" } -solana-entry = { path = "../entry", version = "=1.14.18" } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.18" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.18" } -solana-geyser-plugin-manager = { path = "../geyser-plugin-manager", version = "=1.14.18" } -solana-gossip = { path = "../gossip", version = "=1.14.18" } -solana-ledger = { path = "../ledger", version = "=1.14.18" } -solana-measure = { path = "../measure", version = "=1.14.18" } -solana-metrics = { path = "../metrics", version = "=1.14.18" } -solana-net-utils = { path = "../net-utils", version = "=1.14.18" } -solana-perf = { path = "../perf", version = "=1.14.18" } -solana-poh = { path = "../poh", version = "=1.14.18" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.18" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.18" } -solana-rpc = { path = "../rpc", version = "=1.14.18" } -solana-runtime = { path = "../runtime", version = "=1.14.18" } -solana-sdk = { path = "../sdk", version = "=1.14.18" } -solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.18" } -solana-streamer = { path = "../streamer", version = "=1.14.18" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.18" } -solana-version = { path = "../version", version = "=1.14.18" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.18" } +solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.19" } +solana-bloom = { path = "../bloom", version = "=1.14.19" } +solana-client = { path = "../client", version = "=1.14.19" } +solana-entry = { path = "../entry", version = "=1.14.19" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.19" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.19" } +solana-geyser-plugin-manager = { path = "../geyser-plugin-manager", version = "=1.14.19" } +solana-gossip = { path = "../gossip", version = "=1.14.19" } +solana-ledger = { path = "../ledger", version = "=1.14.19" } +solana-measure = { path = "../measure", version = "=1.14.19" } +solana-metrics = { path = "../metrics", version = "=1.14.19" } +solana-net-utils = { path = "../net-utils", version = "=1.14.19" } +solana-perf = { path = "../perf", version = "=1.14.19" } +solana-poh = { path = "../poh", version = "=1.14.19" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.19" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.19" } +solana-rpc = { path = "../rpc", version = "=1.14.19" } +solana-runtime = { path = "../runtime", version = "=1.14.19" } +solana-sdk = { path = "../sdk", version = "=1.14.19" } +solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.19" } +solana-streamer = { path = "../streamer", version = "=1.14.19" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.19" } +solana-version = { path = "../version", version = "=1.14.19" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.19" } sys-info = "0.9.1" tempfile = "3.4.0" thiserror = "1.0" @@ -71,9 +71,9 @@ matches = "0.1.9" raptorq = "1.7.0" serde_json = "1.0.81" serial_test = "0.8.0" -solana-logger = { path = "../logger", version = "=1.14.18" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.18" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.18" } +solana-logger = { path = "../logger", version = "=1.14.19" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.19" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.19" } static_assertions = "1.1.0" systemstat = "0.1.11" test-case = "2.1.0" diff --git a/dos/Cargo.toml b/dos/Cargo.toml index b5726e81624e05..babb1691cb6516 100644 --- a/dos/Cargo.toml +++ b/dos/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-dos" -version = "1.14.18" +version = "1.14.19" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -17,23 +17,23 @@ itertools = "0.10.3" log = "0.4.17" rand = "0.7.0" serde = "1.0.138" -solana-bench-tps = { path = "../bench-tps", version = "=1.14.18" } -solana-client = { path = "../client", version = "=1.14.18" } -solana-core = { path = "../core", version = "=1.14.18" } -solana-faucet = { path = "../faucet", version = "=1.14.18" } -solana-gossip = { path = "../gossip", version = "=1.14.18" } -solana-logger = { path = "../logger", version = "=1.14.18" } -solana-measure = { path = "../measure", version = "=1.14.18" } -solana-net-utils = { path = "../net-utils", version = "=1.14.18" } -solana-perf = { path = "../perf", version = "=1.14.18" } -solana-rpc = { path = "../rpc", version = "=1.14.18" } -solana-sdk = { path = "../sdk", version = "=1.14.18" } -solana-streamer = { path = "../streamer", version = "=1.14.18" } -solana-version = { path = "../version", version = "=1.14.18" } +solana-bench-tps = { path = "../bench-tps", version = "=1.14.19" } +solana-client = { path = "../client", version = "=1.14.19" } +solana-core = { path = "../core", version = "=1.14.19" } +solana-faucet = { path = "../faucet", version = "=1.14.19" } +solana-gossip = { path = "../gossip", version = "=1.14.19" } +solana-logger = { path = "../logger", version = "=1.14.19" } +solana-measure = { path = "../measure", version = "=1.14.19" } +solana-net-utils = { path = "../net-utils", version = "=1.14.19" } +solana-perf = { path = "../perf", version = "=1.14.19" } +solana-rpc = { path = "../rpc", version = "=1.14.19" } +solana-sdk = { path = "../sdk", version = "=1.14.19" } +solana-streamer = { path = "../streamer", version = "=1.14.19" } +solana-version = { path = "../version", version = "=1.14.19" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] [dev-dependencies] serial_test = "0.8.0" -solana-local-cluster = { path = "../local-cluster", version = "=1.14.18" } +solana-local-cluster = { path = "../local-cluster", version = "=1.14.19" } diff --git a/download-utils/Cargo.toml b/download-utils/Cargo.toml index 2eb0fe3e9b55c6..f7efac46cf9107 100644 --- a/download-utils/Cargo.toml +++ b/download-utils/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-download-utils" -version = "1.14.18" +version = "1.14.19" description = "Solana Download Utils" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,8 +14,8 @@ console = "0.15.0" indicatif = "0.16.2" log = "0.4.17" reqwest = { version = "0.11.11", default-features = false, features = ["blocking", "brotli", "deflate", "gzip", "rustls-tls", "json"] } -solana-runtime = { path = "../runtime", version = "=1.14.18" } -solana-sdk = { path = "../sdk", version = "=1.14.18" } +solana-runtime = { path = "../runtime", version = "=1.14.19" } +solana-sdk = { path = "../sdk", version = "=1.14.19" } [lib] crate-type = ["lib"] diff --git a/entry/Cargo.toml b/entry/Cargo.toml index d1d3af00d76977..84cf21d48016f3 100644 --- a/entry/Cargo.toml +++ b/entry/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-entry" -version = "1.14.18" +version = "1.14.19" description = "Solana Entry" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -19,16 +19,16 @@ log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" serde = "1.0.138" -solana-measure = { path = "../measure", version = "=1.14.18" } -solana-merkle-tree = { path = "../merkle-tree", version = "=1.14.18" } -solana-metrics = { path = "../metrics", version = "=1.14.18" } -solana-perf = { path = "../perf", version = "=1.14.18" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.18" } -solana-sdk = { path = "../sdk", version = "=1.14.18" } +solana-measure = { path = "../measure", version = "=1.14.19" } +solana-merkle-tree = { path = "../merkle-tree", version = "=1.14.19" } +solana-metrics = { path = "../metrics", version = "=1.14.19" } +solana-perf = { path = "../perf", version = "=1.14.19" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.19" } +solana-sdk = { path = "../sdk", version = "=1.14.19" } [dev-dependencies] matches = "0.1.9" -solana-logger = { path = "../logger", version = "=1.14.18" } +solana-logger = { path = "../logger", version = "=1.14.19" } [lib] crate-type = ["lib"] diff --git a/faucet/Cargo.toml b/faucet/Cargo.toml index 09e9fb6a2bc479..b377ba8f541e6c 100644 --- a/faucet/Cargo.toml +++ b/faucet/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-faucet" -version = "1.14.18" +version = "1.14.19" description = "Solana Faucet" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -17,12 +17,12 @@ crossbeam-channel = "0.5" log = "0.4.17" serde = "1.0.138" serde_derive = "1.0.103" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.18" } -solana-cli-config = { path = "../cli-config", version = "=1.14.18" } -solana-logger = { path = "../logger", version = "=1.14.18" } -solana-metrics = { path = "../metrics", version = "=1.14.18" } -solana-sdk = { path = "../sdk", version = "=1.14.18" } -solana-version = { path = "../version", version = "=1.14.18" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.19" } +solana-cli-config = { path = "../cli-config", version = "=1.14.19" } +solana-logger = { path = "../logger", version = "=1.14.19" } +solana-metrics = { path = "../metrics", version = "=1.14.19" } +solana-sdk = { path = "../sdk", version = "=1.14.19" } +solana-version = { path = "../version", version = "=1.14.19" } spl-memo = { version = "=3.0.1", features = ["no-entrypoint"] } thiserror = "1.0" tokio = { version = "1", features = ["full"] } diff --git a/frozen-abi/Cargo.toml b/frozen-abi/Cargo.toml index bc663bd33e5ca8..8aa72d634c3c38 100644 --- a/frozen-abi/Cargo.toml +++ b/frozen-abi/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-frozen-abi" -version = "1.14.18" +version = "1.14.19" description = "Solana Frozen ABI" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -20,7 +20,7 @@ serde_bytes = "0.11" serde_derive = "1.0" serde_json = "1.0" sha2 = "0.10.2" -solana-frozen-abi-macro = { path = "macro", version = "=1.14.18" } +solana-frozen-abi-macro = { path = "macro", version = "=1.14.19" } thiserror = "1.0" [target.'cfg(not(target_os = "solana"))'.dependencies] @@ -43,7 +43,7 @@ rand_core = { version = "0.6.3", features = ["alloc", "getrandom", "std"] } subtle = { version = "2.4.1", features = ["default", "i128", "std"] } [target.'cfg(not(target_os = "solana"))'.dev-dependencies] -solana-logger = { path = "../logger", version = "=1.14.18" } +solana-logger = { path = "../logger", version = "=1.14.19" } [build-dependencies] rustc_version = "0.4" diff --git a/frozen-abi/macro/Cargo.toml b/frozen-abi/macro/Cargo.toml index e28cb6135c5f21..4fe597fb2a275e 100644 --- a/frozen-abi/macro/Cargo.toml +++ b/frozen-abi/macro/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-frozen-abi-macro" -version = "1.14.18" +version = "1.14.19" description = "Solana Frozen ABI Macro" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/genesis-utils/Cargo.toml b/genesis-utils/Cargo.toml index 53624a1cac9b82..7ad1b80f7fc765 100644 --- a/genesis-utils/Cargo.toml +++ b/genesis-utils/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-genesis-utils" -version = "1.14.18" +version = "1.14.19" description = "Solana Genesis Utils" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,9 +10,9 @@ documentation = "https://docs.rs/solana-download-utils" edition = "2021" [dependencies] -solana-download-utils = { path = "../download-utils", version = "=1.14.18" } -solana-runtime = { path = "../runtime", version = "=1.14.18" } -solana-sdk = { path = "../sdk", version = "=1.14.18" } +solana-download-utils = { path = "../download-utils", version = "=1.14.19" } +solana-runtime = { path = "../runtime", version = "=1.14.19" } +solana-sdk = { path = "../sdk", version = "=1.14.19" } [lib] crate-type = ["lib"] diff --git a/genesis/Cargo.toml b/genesis/Cargo.toml index fca1cff94c7c3b..f9900adf22b45b 100644 --- a/genesis/Cargo.toml +++ b/genesis/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-genesis" description = "Blockchain, Rebuilt for Scale" -version = "1.14.18" +version = "1.14.19" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -15,16 +15,16 @@ clap = "2.33.1" serde = "1.0.138" serde_json = "1.0.81" serde_yaml = "0.8.26" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.18" } -solana-cli-config = { path = "../cli-config", version = "=1.14.18" } -solana-entry = { path = "../entry", version = "=1.14.18" } -solana-ledger = { path = "../ledger", version = "=1.14.18" } -solana-logger = { path = "../logger", version = "=1.14.18" } -solana-runtime = { path = "../runtime", version = "=1.14.18" } -solana-sdk = { path = "../sdk", version = "=1.14.18" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.18" } -solana-version = { path = "../version", version = "=1.14.18" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.18" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.19" } +solana-cli-config = { path = "../cli-config", version = "=1.14.19" } +solana-entry = { path = "../entry", version = "=1.14.19" } +solana-ledger = { path = "../ledger", version = "=1.14.19" } +solana-logger = { path = "../logger", version = "=1.14.19" } +solana-runtime = { path = "../runtime", version = "=1.14.19" } +solana-sdk = { path = "../sdk", version = "=1.14.19" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.19" } +solana-version = { path = "../version", version = "=1.14.19" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.19" } tempfile = "3.4.0" [[bin]] diff --git a/geyser-plugin-interface/Cargo.toml b/geyser-plugin-interface/Cargo.toml index b7942a1a29df32..9b3e5bfd3030e3 100644 --- a/geyser-plugin-interface/Cargo.toml +++ b/geyser-plugin-interface/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-geyser-plugin-interface" description = "The Solana Geyser plugin interface." -version = "1.14.18" +version = "1.14.19" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -11,8 +11,8 @@ documentation = "https://docs.rs/solana-geyser-plugin-interface" [dependencies] log = "0.4.17" -solana-sdk = { path = "../sdk", version = "=1.14.18" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.18" } +solana-sdk = { path = "../sdk", version = "=1.14.19" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.19" } thiserror = "1.0.31" [package.metadata.docs.rs] diff --git a/geyser-plugin-manager/Cargo.toml b/geyser-plugin-manager/Cargo.toml index ac30e41c01bc8c..f560692b14f415 100644 --- a/geyser-plugin-manager/Cargo.toml +++ b/geyser-plugin-manager/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-geyser-plugin-manager" description = "The Solana Geyser plugin manager." -version = "1.14.18" +version = "1.14.19" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -16,13 +16,13 @@ json5 = "0.4.1" libloading = "0.7.3" log = "0.4.17" serde_json = "1.0.81" -solana-geyser-plugin-interface = { path = "../geyser-plugin-interface", version = "=1.14.18" } -solana-measure = { path = "../measure", version = "=1.14.18" } -solana-metrics = { path = "../metrics", version = "=1.14.18" } -solana-rpc = { path = "../rpc", version = "=1.14.18" } -solana-runtime = { path = "../runtime", version = "=1.14.18" } -solana-sdk = { path = "../sdk", version = "=1.14.18" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.18" } +solana-geyser-plugin-interface = { path = "../geyser-plugin-interface", version = "=1.14.19" } +solana-measure = { path = "../measure", version = "=1.14.19" } +solana-metrics = { path = "../metrics", version = "=1.14.19" } +solana-rpc = { path = "../rpc", version = "=1.14.19" } +solana-runtime = { path = "../runtime", version = "=1.14.19" } +solana-sdk = { path = "../sdk", version = "=1.14.19" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.19" } thiserror = "1.0.31" [package.metadata.docs.rs] diff --git a/gossip/Cargo.toml b/gossip/Cargo.toml index 57ad332646c090..623efab7dabff1 100644 --- a/gossip/Cargo.toml +++ b/gossip/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-gossip" description = "Blockchain, Rebuilt for Scale" -version = "1.14.18" +version = "1.14.19" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -27,24 +27,24 @@ rayon = "1.5.3" serde = "1.0.138" serde_bytes = "0.11" serde_derive = "1.0.103" -solana-bloom = { path = "../bloom", version = "=1.14.18" } -solana-clap-utils = { path = "../clap-utils", version = "=1.14.18" } -solana-client = { path = "../client", version = "=1.14.18" } -solana-entry = { path = "../entry", version = "=1.14.18" } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.18" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.18" } -solana-ledger = { path = "../ledger", version = "=1.14.18" } -solana-logger = { path = "../logger", version = "=1.14.18" } -solana-measure = { path = "../measure", version = "=1.14.18" } -solana-metrics = { path = "../metrics", version = "=1.14.18" } -solana-net-utils = { path = "../net-utils", version = "=1.14.18" } -solana-perf = { path = "../perf", version = "=1.14.18" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.18" } -solana-runtime = { path = "../runtime", version = "=1.14.18" } -solana-sdk = { path = "../sdk", version = "=1.14.18" } -solana-streamer = { path = "../streamer", version = "=1.14.18" } -solana-version = { path = "../version", version = "=1.14.18" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.18" } +solana-bloom = { path = "../bloom", version = "=1.14.19" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.19" } +solana-client = { path = "../client", version = "=1.14.19" } +solana-entry = { path = "../entry", version = "=1.14.19" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.19" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.19" } +solana-ledger = { path = "../ledger", version = "=1.14.19" } +solana-logger = { path = "../logger", version = "=1.14.19" } +solana-measure = { path = "../measure", version = "=1.14.19" } +solana-metrics = { path = "../metrics", version = "=1.14.19" } +solana-net-utils = { path = "../net-utils", version = "=1.14.19" } +solana-perf = { path = "../perf", version = "=1.14.19" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.19" } +solana-runtime = { path = "../runtime", version = "=1.14.19" } +solana-sdk = { path = "../sdk", version = "=1.14.19" } +solana-streamer = { path = "../streamer", version = "=1.14.19" } +solana-version = { path = "../version", version = "=1.14.19" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.19" } thiserror = "1.0" [dev-dependencies] diff --git a/install/Cargo.toml b/install/Cargo.toml index 843fd3d8c0ad12..84ce016472e000 100644 --- a/install/Cargo.toml +++ b/install/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-install" description = "The solana cluster software installer" -version = "1.14.18" +version = "1.14.19" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -26,12 +26,12 @@ reqwest = { version = "0.11.11", default-features = false, features = ["blocking semver = "1.0.10" serde = { version = "1.0.138", features = ["derive"] } serde_yaml = "0.8.26" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.18" } -solana-client = { path = "../client", version = "=1.14.18" } -solana-config-program = { path = "../programs/config", version = "=1.14.18" } -solana-logger = { path = "../logger", version = "=1.14.18" } -solana-sdk = { path = "../sdk", version = "=1.14.18" } -solana-version = { path = "../version", version = "=1.14.18" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.19" } +solana-client = { path = "../client", version = "=1.14.19" } +solana-config-program = { path = "../programs/config", version = "=1.14.19" } +solana-logger = { path = "../logger", version = "=1.14.19" } +solana-sdk = { path = "../sdk", version = "=1.14.19" } +solana-version = { path = "../version", version = "=1.14.19" } tar = "0.4.38" tempfile = "3.4.0" url = "2.2.2" diff --git a/keygen/Cargo.toml b/keygen/Cargo.toml index 4f68419490fb7e..6f87f572e75e5f 100644 --- a/keygen/Cargo.toml +++ b/keygen/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-keygen" -version = "1.14.18" +version = "1.14.19" description = "Solana key generation utility" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,11 +14,11 @@ bs58 = "0.4.0" clap = { version = "3.1.5", features = ["cargo"] } dirs-next = "2.0.0" num_cpus = "1.13.1" -solana-clap-v3-utils = { path = "../clap-v3-utils", version = "=1.14.18" } -solana-cli-config = { path = "../cli-config", version = "=1.14.18" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.18" } -solana-sdk = { path = "../sdk", version = "=1.14.18" } -solana-version = { path = "../version", version = "=1.14.18" } +solana-clap-v3-utils = { path = "../clap-v3-utils", version = "=1.14.19" } +solana-cli-config = { path = "../cli-config", version = "=1.14.19" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.19" } +solana-sdk = { path = "../sdk", version = "=1.14.19" } +solana-version = { path = "../version", version = "=1.14.19" } tiny-bip39 = "0.8.2" [[bin]] diff --git a/ledger-tool/Cargo.toml b/ledger-tool/Cargo.toml index d431202802098b..45f0a258b3662f 100644 --- a/ledger-tool/Cargo.toml +++ b/ledger-tool/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-ledger-tool" description = "Blockchain, Rebuilt for Scale" -version = "1.14.18" +version = "1.14.19" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -22,20 +22,20 @@ log = { version = "0.4.17" } regex = "1" serde = { version = "1.0", features = ["derive"] } serde_json = "1.0.81" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.18" } -solana-cli-output = { path = "../cli-output", version = "=1.14.18" } -solana-core = { path = "../core", version = "=1.14.18" } -solana-entry = { path = "../entry", version = "=1.14.18" } -solana-ledger = { path = "../ledger", version = "=1.14.18" } -solana-logger = { path = "../logger", version = "=1.14.18" } -solana-measure = { path = "../measure", version = "=1.14.18" } -solana-runtime = { path = "../runtime", version = "=1.14.18" } -solana-sdk = { path = "../sdk", version = "=1.14.18" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.18" } -solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.18" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.18" } -solana-version = { path = "../version", version = "=1.14.18" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.18" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.19" } +solana-cli-output = { path = "../cli-output", version = "=1.14.19" } +solana-core = { path = "../core", version = "=1.14.19" } +solana-entry = { path = "../entry", version = "=1.14.19" } +solana-ledger = { path = "../ledger", version = "=1.14.19" } +solana-logger = { path = "../logger", version = "=1.14.19" } +solana-measure = { path = "../measure", version = "=1.14.19" } +solana-runtime = { path = "../runtime", version = "=1.14.19" } +solana-sdk = { path = "../sdk", version = "=1.14.19" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.19" } +solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.19" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.19" } +solana-version = { path = "../version", version = "=1.14.19" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.19" } tokio = { version = "1", features = ["full"] } [target.'cfg(not(target_env = "msvc"))'.dependencies] diff --git a/ledger/Cargo.toml b/ledger/Cargo.toml index 77f56bec82faed..0685218412381b 100644 --- a/ledger/Cargo.toml +++ b/ledger/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-ledger" -version = "1.14.18" +version = "1.14.19" description = "Solana ledger" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -35,23 +35,23 @@ reed-solomon-erasure = { version = "6.0.0", features = ["simd-accel"] } serde = "1.0.138" serde_bytes = "0.11.6" sha2 = "0.10.2" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.18" } -solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.18" } -solana-entry = { path = "../entry", version = "=1.14.18" } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.18" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.18" } -solana-measure = { path = "../measure", version = "=1.14.18" } -solana-metrics = { path = "../metrics", version = "=1.14.18" } -solana-perf = { path = "../perf", version = "=1.14.18" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.18" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.18" } -solana-runtime = { path = "../runtime", version = "=1.14.18" } -solana-sdk = { path = "../sdk", version = "=1.14.18" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.18" } -solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.18" } -solana-storage-proto = { path = "../storage-proto", version = "=1.14.18" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.18" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.18" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.19" } +solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.19" } +solana-entry = { path = "../entry", version = "=1.14.19" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.19" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.19" } +solana-measure = { path = "../measure", version = "=1.14.19" } +solana-metrics = { path = "../metrics", version = "=1.14.19" } +solana-perf = { path = "../perf", version = "=1.14.19" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.19" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.19" } +solana-runtime = { path = "../runtime", version = "=1.14.19" } +solana-sdk = { path = "../sdk", version = "=1.14.19" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.19" } +solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.19" } +solana-storage-proto = { path = "../storage-proto", version = "=1.14.19" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.19" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.19" } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } spl-token-2022 = { version = "=0.6.1", features = ["no-entrypoint"] } static_assertions = "1.1.0" @@ -71,8 +71,8 @@ features = ["lz4"] [dev-dependencies] bs58 = "0.4.0" matches = "0.1.9" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.18" } -solana-logger = { path = "../logger", version = "=1.14.18" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.19" } +solana-logger = { path = "../logger", version = "=1.14.19" } test-case = "2.1.0" [build-dependencies] diff --git a/local-cluster/Cargo.toml b/local-cluster/Cargo.toml index 9a9b7773d2d5f4..ad5995fcd8dc9c 100644 --- a/local-cluster/Cargo.toml +++ b/local-cluster/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-local-cluster" description = "Blockchain, Rebuilt for Scale" -version = "1.14.18" +version = "1.14.19" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -16,25 +16,25 @@ itertools = "0.10.3" log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" -solana-client = { path = "../client", version = "=1.14.18" } -solana-config-program = { path = "../programs/config", version = "=1.14.18" } -solana-core = { path = "../core", version = "=1.14.18" } -solana-entry = { path = "../entry", version = "=1.14.18" } -solana-gossip = { path = "../gossip", version = "=1.14.18" } -solana-ledger = { path = "../ledger", version = "=1.14.18" } -solana-runtime = { path = "../runtime", version = "=1.14.18" } -solana-sdk = { path = "../sdk", version = "=1.14.18" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.18" } -solana-streamer = { path = "../streamer", version = "=1.14.18" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.18" } +solana-client = { path = "../client", version = "=1.14.19" } +solana-config-program = { path = "../programs/config", version = "=1.14.19" } +solana-core = { path = "../core", version = "=1.14.19" } +solana-entry = { path = "../entry", version = "=1.14.19" } +solana-gossip = { path = "../gossip", version = "=1.14.19" } +solana-ledger = { path = "../ledger", version = "=1.14.19" } +solana-runtime = { path = "../runtime", version = "=1.14.19" } +solana-sdk = { path = "../sdk", version = "=1.14.19" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.19" } +solana-streamer = { path = "../streamer", version = "=1.14.19" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.19" } tempfile = "3.4.0" [dev-dependencies] assert_matches = "1.5.0" gag = "1.0.0" serial_test = "0.8.0" -solana-download-utils = { path = "../download-utils", version = "=1.14.18" } -solana-logger = { path = "../logger", version = "=1.14.18" } +solana-download-utils = { path = "../download-utils", version = "=1.14.19" } +solana-logger = { path = "../logger", version = "=1.14.19" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/log-analyzer/Cargo.toml b/log-analyzer/Cargo.toml index 56d4be90401777..76e1721da78bb6 100644 --- a/log-analyzer/Cargo.toml +++ b/log-analyzer/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-log-analyzer" description = "The solana cluster network analysis tool" -version = "1.14.18" +version = "1.14.19" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,8 +14,8 @@ byte-unit = "4.0.14" clap = { version = "3.1.5", features = ["cargo"] } serde = "1.0.138" serde_json = "1.0.81" -solana-logger = { path = "../logger", version = "=1.14.18" } -solana-version = { path = "../version", version = "=1.14.18" } +solana-logger = { path = "../logger", version = "=1.14.19" } +solana-version = { path = "../version", version = "=1.14.19" } [[bin]] name = "solana-log-analyzer" diff --git a/logger/Cargo.toml b/logger/Cargo.toml index d2a6cf8a050af2..e64787592729e1 100644 --- a/logger/Cargo.toml +++ b/logger/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-logger" -version = "1.14.18" +version = "1.14.19" description = "Solana Logger" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/measure/Cargo.toml b/measure/Cargo.toml index d06b210a3174a3..b5edab221964f7 100644 --- a/measure/Cargo.toml +++ b/measure/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "solana-measure" description = "Blockchain, Rebuilt for Scale" -version = "1.14.18" +version = "1.14.19" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-measure" readme = "../README.md" @@ -12,7 +12,7 @@ edition = "2021" [dependencies] log = "0.4.17" -solana-sdk = { path = "../sdk", version = "=1.14.18" } +solana-sdk = { path = "../sdk", version = "=1.14.19" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/merkle-root-bench/Cargo.toml b/merkle-root-bench/Cargo.toml index 5f4d9ff0701075..7bc96fb008709e 100644 --- a/merkle-root-bench/Cargo.toml +++ b/merkle-root-bench/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-merkle-root-bench" -version = "1.14.18" +version = "1.14.19" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -11,11 +11,11 @@ publish = false [dependencies] clap = "2.33.1" log = "0.4.17" -solana-logger = { path = "../logger", version = "=1.14.18" } -solana-measure = { path = "../measure", version = "=1.14.18" } -solana-runtime = { path = "../runtime", version = "=1.14.18" } -solana-sdk = { path = "../sdk", version = "=1.14.18" } -solana-version = { path = "../version", version = "=1.14.18" } +solana-logger = { path = "../logger", version = "=1.14.19" } +solana-measure = { path = "../measure", version = "=1.14.19" } +solana-runtime = { path = "../runtime", version = "=1.14.19" } +solana-sdk = { path = "../sdk", version = "=1.14.19" } +solana-version = { path = "../version", version = "=1.14.19" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/merkle-tree/Cargo.toml b/merkle-tree/Cargo.toml index 4540badb445e1f..f6be2c13aa99ff 100644 --- a/merkle-tree/Cargo.toml +++ b/merkle-tree/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-merkle-tree" -version = "1.14.18" +version = "1.14.19" description = "Solana Merkle Tree" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -11,7 +11,7 @@ edition = "2021" [dependencies] fast-math = "0.1" -solana-program = { path = "../sdk/program", version = "=1.14.18" } +solana-program = { path = "../sdk/program", version = "=1.14.19" } # This can go once the BPF toolchain target Rust 1.42.0+ [target.bpfel-unknown-unknown.dependencies] diff --git a/metrics/Cargo.toml b/metrics/Cargo.toml index bb48ecab79de5b..fbfd13a508d610 100644 --- a/metrics/Cargo.toml +++ b/metrics/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-metrics" -version = "1.14.18" +version = "1.14.19" description = "Solana Metrics" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -15,7 +15,7 @@ gethostname = "0.2.3" lazy_static = "1.4.0" log = "0.4.17" reqwest = { version = "0.11.11", default-features = false, features = ["blocking", "brotli", "deflate", "gzip", "rustls-tls", "json"] } -solana-sdk = { path = "../sdk", version = "=1.14.18" } +solana-sdk = { path = "../sdk", version = "=1.14.19" } [dev-dependencies] env_logger = "0.9.0" diff --git a/net-shaper/Cargo.toml b/net-shaper/Cargo.toml index 31dfc815fdfca1..ead997e032bd9c 100644 --- a/net-shaper/Cargo.toml +++ b/net-shaper/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-net-shaper" description = "The solana cluster network shaping tool" -version = "1.14.18" +version = "1.14.19" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,7 +14,7 @@ clap = { version = "3.1.5", features = ["cargo"] } rand = "0.7.0" serde = { version = "1.0.138", features = ["derive"] } serde_json = "1.0.81" -solana-logger = { path = "../logger", version = "=1.14.18" } +solana-logger = { path = "../logger", version = "=1.14.19" } [[bin]] name = "solana-net-shaper" diff --git a/net-utils/Cargo.toml b/net-utils/Cargo.toml index 793365647adae1..2ddab28f606693 100644 --- a/net-utils/Cargo.toml +++ b/net-utils/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-net-utils" -version = "1.14.18" +version = "1.14.19" description = "Solana Network Utilities" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -19,9 +19,9 @@ rand = "0.7.0" serde = "1.0.138" serde_derive = "1.0.103" socket2 = "0.4.4" -solana-logger = { path = "../logger", version = "=1.14.18" } -solana-sdk = { path = "../sdk", version = "=1.14.18" } -solana-version = { path = "../version", version = "=1.14.18" } +solana-logger = { path = "../logger", version = "=1.14.19" } +solana-sdk = { path = "../sdk", version = "=1.14.19" } +solana-version = { path = "../version", version = "=1.14.19" } tokio = { version = "1", features = ["full"] } url = "2.2.2" diff --git a/notifier/Cargo.toml b/notifier/Cargo.toml index d0e57013a588ee..12de1982882665 100644 --- a/notifier/Cargo.toml +++ b/notifier/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-notifier" -version = "1.14.18" +version = "1.14.19" description = "Solana Notifier" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/perf/Cargo.toml b/perf/Cargo.toml index 57722a3b87ed66..182f3318dc3f41 100644 --- a/perf/Cargo.toml +++ b/perf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-perf" -version = "1.14.18" +version = "1.14.19" description = "Solana Performance APIs" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -22,10 +22,10 @@ log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" serde = "1.0.138" -solana-metrics = { path = "../metrics", version = "=1.14.18" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.18" } -solana-sdk = { path = "../sdk", version = "=1.14.18" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.18" } +solana-metrics = { path = "../metrics", version = "=1.14.19" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.19" } +solana-sdk = { path = "../sdk", version = "=1.14.19" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.19" } [target."cfg(target_os = \"linux\")".dependencies] caps = "0.5.3" @@ -38,7 +38,7 @@ name = "solana_perf" [dev-dependencies] matches = "0.1.9" rand_chacha = "0.2.2" -solana-logger = { path = "../logger", version = "=1.14.18" } +solana-logger = { path = "../logger", version = "=1.14.19" } test-case = "2.1.0" [[bench]] diff --git a/poh-bench/Cargo.toml b/poh-bench/Cargo.toml index d405793787c5e4..9917d6440cbe15 100644 --- a/poh-bench/Cargo.toml +++ b/poh-bench/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-poh-bench" -version = "1.14.18" +version = "1.14.19" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,12 +14,12 @@ clap = { version = "3.1.5", features = ["cargo"] } log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" -solana-entry = { path = "../entry", version = "=1.14.18" } -solana-logger = { path = "../logger", version = "=1.14.18" } -solana-measure = { path = "../measure", version = "=1.14.18" } -solana-perf = { path = "../perf", version = "=1.14.18" } -solana-sdk = { path = "../sdk", version = "=1.14.18" } -solana-version = { path = "../version", version = "=1.14.18" } +solana-entry = { path = "../entry", version = "=1.14.19" } +solana-logger = { path = "../logger", version = "=1.14.19" } +solana-measure = { path = "../measure", version = "=1.14.19" } +solana-perf = { path = "../perf", version = "=1.14.19" } +solana-sdk = { path = "../sdk", version = "=1.14.19" } +solana-version = { path = "../version", version = "=1.14.19" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/poh/Cargo.toml b/poh/Cargo.toml index dac2cce5b42a66..3fdb1f9b74c45a 100644 --- a/poh/Cargo.toml +++ b/poh/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-poh" -version = "1.14.18" +version = "1.14.19" description = "Solana PoH" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,21 +13,21 @@ edition = "2021" core_affinity = "0.5.10" crossbeam-channel = "0.5" log = "0.4.17" -solana-entry = { path = "../entry", version = "=1.14.18" } -solana-ledger = { path = "../ledger", version = "=1.14.18" } -solana-measure = { path = "../measure", version = "=1.14.18" } -solana-metrics = { path = "../metrics", version = "=1.14.18" } -solana-runtime = { path = "../runtime", version = "=1.14.18" } -solana-sdk = { path = "../sdk", version = "=1.14.18" } -solana-sys-tuner = { path = "../sys-tuner", version = "=1.14.18" } +solana-entry = { path = "../entry", version = "=1.14.19" } +solana-ledger = { path = "../ledger", version = "=1.14.19" } +solana-measure = { path = "../measure", version = "=1.14.19" } +solana-metrics = { path = "../metrics", version = "=1.14.19" } +solana-runtime = { path = "../runtime", version = "=1.14.19" } +solana-sdk = { path = "../sdk", version = "=1.14.19" } +solana-sys-tuner = { path = "../sys-tuner", version = "=1.14.19" } thiserror = "1.0" [dev-dependencies] bincode = "1.3.3" matches = "0.1.9" rand = "0.7.0" -solana-logger = { path = "../logger", version = "=1.14.18" } -solana-perf = { path = "../perf", version = "=1.14.18" } +solana-logger = { path = "../logger", version = "=1.14.19" } +solana-perf = { path = "../perf", version = "=1.14.19" } [lib] crate-type = ["lib"] diff --git a/program-runtime/Cargo.toml b/program-runtime/Cargo.toml index 1444c42a880e22..8316ba646095ea 100644 --- a/program-runtime/Cargo.toml +++ b/program-runtime/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-program-runtime" -version = "1.14.18" +version = "1.14.19" description = "Solana program runtime" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -21,16 +21,16 @@ num-derive = { version = "0.3" } num-traits = { version = "0.2" } rand = "0.7.0" serde = { version = "1.0.129", features = ["derive", "rc"] } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.18" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.18" } -solana-measure = { path = "../measure", version = "=1.14.18" } -solana-metrics = { path = "../metrics", version = "=1.14.18" } -solana-sdk = { path = "../sdk", version = "=1.14.18" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.19" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.19" } +solana-measure = { path = "../measure", version = "=1.14.19" } +solana-metrics = { path = "../metrics", version = "=1.14.19" } +solana-sdk = { path = "../sdk", version = "=1.14.19" } thiserror = "1.0" enum-iterator = "0.8.1" [dev-dependencies] -solana-logger = { path = "../logger", version = "=1.14.18" } +solana-logger = { path = "../logger", version = "=1.14.19" } [lib] crate-type = ["lib"] diff --git a/program-test/Cargo.toml b/program-test/Cargo.toml index 905c2f076e14d4..b9ea59c1974799 100644 --- a/program-test/Cargo.toml +++ b/program-test/Cargo.toml @@ -5,7 +5,7 @@ edition = "2021" license = "Apache-2.0" name = "solana-program-test" repository = "https://github.com/solana-labs/solana" -version = "1.14.18" +version = "1.14.19" [dependencies] assert_matches = "1.5.0" @@ -15,16 +15,16 @@ bincode = "1.3.3" chrono-humanize = "0.2.1" log = "0.4.17" serde = "1.0.138" -solana-banks-client = { path = "../banks-client", version = "=1.14.18" } -solana-banks-server = { path = "../banks-server", version = "=1.14.18" } -solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.18" } -solana-logger = { path = "../logger", version = "=1.14.18" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.18" } -solana-runtime = { path = "../runtime", version = "=1.14.18" } -solana-sdk = { path = "../sdk", version = "=1.14.18" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.18" } +solana-banks-client = { path = "../banks-client", version = "=1.14.19" } +solana-banks-server = { path = "../banks-server", version = "=1.14.19" } +solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.19" } +solana-logger = { path = "../logger", version = "=1.14.19" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.19" } +solana-runtime = { path = "../runtime", version = "=1.14.19" } +solana-sdk = { path = "../sdk", version = "=1.14.19" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.19" } thiserror = "1.0" tokio = { version = "1", features = ["full"] } [dev-dependencies] -solana-stake-program = { path = "../programs/stake", version = "=1.14.18" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.19" } diff --git a/programs/address-lookup-table-tests/Cargo.toml b/programs/address-lookup-table-tests/Cargo.toml index e50e24c009b76e..55e1909c91eb27 100644 --- a/programs/address-lookup-table-tests/Cargo.toml +++ b/programs/address-lookup-table-tests/Cargo.toml @@ -3,7 +3,7 @@ [package] name = "solana-address-lookup-table-program-tests" -version = "1.14.18" +version = "1.14.19" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" @@ -14,9 +14,9 @@ publish = false [dev-dependencies] assert_matches = "1.5.0" bincode = "1.3.3" -solana-address-lookup-table-program = { path = "../address-lookup-table", version = "=1.14.18" } -solana-program-test = { path = "../../program-test", version = "=1.14.18" } -solana-sdk = { path = "../../sdk", version = "=1.14.18" } +solana-address-lookup-table-program = { path = "../address-lookup-table", version = "=1.14.19" } +solana-program-test = { path = "../../program-test", version = "=1.14.19" } +solana-sdk = { path = "../../sdk", version = "=1.14.19" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/address-lookup-table/Cargo.toml b/programs/address-lookup-table/Cargo.toml index 3e890e30566053..ae2cab92c07b1f 100644 --- a/programs/address-lookup-table/Cargo.toml +++ b/programs/address-lookup-table/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-address-lookup-table-program" -version = "1.14.18" +version = "1.14.19" description = "Solana address lookup table program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -16,14 +16,14 @@ log = "0.4.17" num-derive = "0.3" num-traits = "0.2" serde = { version = "1.0.138", features = ["derive"] } -solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.18" } -solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.18" } -solana-program = { path = "../../sdk/program", version = "=1.14.18" } +solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.19" } +solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.19" } +solana-program = { path = "../../sdk/program", version = "=1.14.19" } thiserror = "1.0" [target.'cfg(not(target_os = "solana"))'.dependencies] -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.18" } -solana-sdk = { path = "../../sdk", version = "=1.14.18" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.19" } +solana-sdk = { path = "../../sdk", version = "=1.14.19" } [build-dependencies] rustc_version = "0.4" diff --git a/programs/bpf-loader-tests/Cargo.toml b/programs/bpf-loader-tests/Cargo.toml index d822e2341a9724..8379c942d69bea 100644 --- a/programs/bpf-loader-tests/Cargo.toml +++ b/programs/bpf-loader-tests/Cargo.toml @@ -3,7 +3,7 @@ [package] name = "solana-bpf-loader-program-tests" -version = "1.14.18" +version = "1.14.19" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" @@ -14,9 +14,9 @@ publish = false [dev-dependencies] assert_matches = "1.5.0" bincode = "1.3.3" -solana-bpf-loader-program = { path = "../bpf_loader", version = "=1.14.18" } -solana-program-test = { path = "../../program-test", version = "=1.14.18" } -solana-sdk = { path = "../../sdk", version = "=1.14.18" } +solana-bpf-loader-program = { path = "../bpf_loader", version = "=1.14.19" } +solana-program-test = { path = "../../program-test", version = "=1.14.19" } +solana-sdk = { path = "../../sdk", version = "=1.14.19" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/bpf/Cargo.lock b/programs/bpf/Cargo.lock index feb487ba4b5184..450779d7186f46 100644 --- a/programs/bpf/Cargo.lock +++ b/programs/bpf/Cargo.lock @@ -4102,7 +4102,7 @@ dependencies = [ [[package]] name = "solana-account-decoder" -version = "1.14.18" +version = "1.14.19" dependencies = [ "Inflector", "base64 0.13.0", @@ -4115,7 +4115,7 @@ dependencies = [ "serde_json", "solana-address-lookup-table-program", "solana-config-program", - "solana-sdk 1.14.18", + "solana-sdk 1.14.19", "solana-vote-program", "spl-token", "spl-token-2022", @@ -4125,7 +4125,7 @@ dependencies = [ [[package]] name = "solana-address-lookup-table-program" -version = "1.14.18" +version = "1.14.19" dependencies = [ "bincode", "bytemuck", @@ -4134,23 +4134,23 @@ dependencies = [ "num-traits", "rustc_version", "serde", - "solana-frozen-abi 1.14.18", - "solana-frozen-abi-macro 1.14.18", - "solana-program 1.14.18", + "solana-frozen-abi 1.14.19", + "solana-frozen-abi-macro 1.14.19", + "solana-program 1.14.19", "solana-program-runtime", - "solana-sdk 1.14.18", + "solana-sdk 1.14.19", "thiserror", ] [[package]] name = "solana-banks-client" -version = "1.14.18" +version = "1.14.19" dependencies = [ "borsh", "futures 0.3.21", "solana-banks-interface", - "solana-program 1.14.18", - "solana-sdk 1.14.18", + "solana-program 1.14.19", + "solana-sdk 1.14.19", "tarpc", "thiserror", "tokio", @@ -4159,16 +4159,16 @@ dependencies = [ [[package]] name = "solana-banks-interface" -version = "1.14.18" +version = "1.14.19" dependencies = [ "serde", - "solana-sdk 1.14.18", + "solana-sdk 1.14.19", "tarpc", ] [[package]] name = "solana-banks-server" -version = "1.14.18" +version = "1.14.19" dependencies = [ "bincode", "crossbeam-channel", @@ -4176,7 +4176,7 @@ dependencies = [ "solana-banks-interface", "solana-client", "solana-runtime", - "solana-sdk 1.14.18", + "solana-sdk 1.14.19", "solana-send-transaction-service", "tarpc", "tokio", @@ -4186,7 +4186,7 @@ dependencies = [ [[package]] name = "solana-bloom" -version = "1.14.18" +version = "1.14.19" dependencies = [ "bv", "fnv", @@ -4196,14 +4196,14 @@ dependencies = [ "rustc_version", "serde", "serde_derive", - "solana-frozen-abi 1.14.18", - "solana-frozen-abi-macro 1.14.18", - "solana-sdk 1.14.18", + "solana-frozen-abi 1.14.19", + "solana-frozen-abi-macro 1.14.19", + "solana-sdk 1.14.19", ] [[package]] name = "solana-bpf-loader-program" -version = "1.14.18" +version = "1.14.19" dependencies = [ "bincode", "byteorder 1.4.3", @@ -4212,15 +4212,15 @@ dependencies = [ "solana-measure", "solana-metrics", "solana-program-runtime", - "solana-sdk 1.14.18", - "solana-zk-token-sdk 1.14.18", + "solana-sdk 1.14.19", + "solana-zk-token-sdk 1.14.19", "solana_rbpf", "thiserror", ] [[package]] name = "solana-bpf-programs" -version = "1.14.18" +version = "1.14.19" dependencies = [ "bincode", "byteorder 1.4.3", @@ -4236,11 +4236,11 @@ dependencies = [ "solana-bpf-rust-realloc-invoke", "solana-cli-output", "solana-ledger", - "solana-logger 1.14.18", + "solana-logger 1.14.19", "solana-measure", "solana-program-runtime", "solana-runtime", - "solana-sdk 1.14.18", + "solana-sdk 1.14.19", "solana-transaction-status", "solana_rbpf", "walkdir", @@ -4248,385 +4248,385 @@ dependencies = [ [[package]] name = "solana-bpf-rust-128bit" -version = "1.14.18" +version = "1.14.19" dependencies = [ "solana-bpf-rust-128bit-dep", - "solana-program 1.14.18", + "solana-program 1.14.19", ] [[package]] name = "solana-bpf-rust-128bit-dep" -version = "1.14.18" +version = "1.14.19" dependencies = [ - "solana-program 1.14.18", + "solana-program 1.14.19", ] [[package]] name = "solana-bpf-rust-alloc" -version = "1.14.18" +version = "1.14.19" dependencies = [ - "solana-program 1.14.18", + "solana-program 1.14.19", ] [[package]] name = "solana-bpf-rust-call-depth" -version = "1.14.18" +version = "1.14.19" dependencies = [ - "solana-program 1.14.18", + "solana-program 1.14.19", ] [[package]] name = "solana-bpf-rust-caller-access" -version = "1.14.18" +version = "1.14.19" dependencies = [ - "solana-program 1.14.18", + "solana-program 1.14.19", ] [[package]] name = "solana-bpf-rust-curve25519" -version = "1.14.18" +version = "1.14.19" dependencies = [ - "solana-program 1.14.18", - "solana-zk-token-sdk 1.14.18", + "solana-program 1.14.19", + "solana-zk-token-sdk 1.14.19", ] [[package]] name = "solana-bpf-rust-custom-heap" -version = "1.14.18" +version = "1.14.19" dependencies = [ - "solana-program 1.14.18", + "solana-program 1.14.19", ] [[package]] name = "solana-bpf-rust-dep-crate" -version = "1.14.18" +version = "1.14.19" dependencies = [ "byteorder 1.4.3", "solana-address-lookup-table-program", - "solana-program 1.14.18", + "solana-program 1.14.19", ] [[package]] name = "solana-bpf-rust-deprecated-loader" -version = "1.14.18" +version = "1.14.19" dependencies = [ - "solana-program 1.14.18", + "solana-program 1.14.19", ] [[package]] name = "solana-bpf-rust-dup-accounts" -version = "1.14.18" +version = "1.14.19" dependencies = [ - "solana-program 1.14.18", + "solana-program 1.14.19", ] [[package]] name = "solana-bpf-rust-error-handling" -version = "1.14.18" +version = "1.14.19" dependencies = [ "num-derive", "num-traits", - "solana-program 1.14.18", + "solana-program 1.14.19", "thiserror", ] [[package]] name = "solana-bpf-rust-external-spend" -version = "1.14.18" +version = "1.14.19" dependencies = [ - "solana-program 1.14.18", + "solana-program 1.14.19", ] [[package]] name = "solana-bpf-rust-finalize" -version = "1.14.18" +version = "1.14.19" dependencies = [ - "solana-program 1.14.18", + "solana-program 1.14.19", ] [[package]] name = "solana-bpf-rust-get-minimum-delegation" -version = "1.14.18" +version = "1.14.19" dependencies = [ - "solana-program 1.14.18", + "solana-program 1.14.19", ] [[package]] name = "solana-bpf-rust-inner_instruction_alignment_check" -version = "1.14.18" +version = "1.14.19" dependencies = [ - "solana-program 1.14.18", + "solana-program 1.14.19", ] [[package]] name = "solana-bpf-rust-instruction-introspection" -version = "1.14.18" +version = "1.14.19" dependencies = [ - "solana-program 1.14.18", + "solana-program 1.14.19", ] [[package]] name = "solana-bpf-rust-invoke" -version = "1.14.18" +version = "1.14.19" dependencies = [ "solana-bpf-rust-invoked", - "solana-program 1.14.18", + "solana-program 1.14.19", ] [[package]] name = "solana-bpf-rust-invoke-and-error" -version = "1.14.18" +version = "1.14.19" dependencies = [ - "solana-program 1.14.18", + "solana-program 1.14.19", ] [[package]] name = "solana-bpf-rust-invoke-and-ok" -version = "1.14.18" +version = "1.14.19" dependencies = [ - "solana-program 1.14.18", + "solana-program 1.14.19", ] [[package]] name = "solana-bpf-rust-invoke-and-return" -version = "1.14.18" +version = "1.14.19" dependencies = [ - "solana-program 1.14.18", + "solana-program 1.14.19", ] [[package]] name = "solana-bpf-rust-invoked" -version = "1.14.18" +version = "1.14.19" dependencies = [ - "solana-program 1.14.18", + "solana-program 1.14.19", ] [[package]] name = "solana-bpf-rust-iter" -version = "1.14.18" +version = "1.14.19" dependencies = [ - "solana-program 1.14.18", + "solana-program 1.14.19", ] [[package]] name = "solana-bpf-rust-log-data" -version = "1.14.18" +version = "1.14.19" dependencies = [ - "solana-program 1.14.18", + "solana-program 1.14.19", ] [[package]] name = "solana-bpf-rust-many-args" -version = "1.14.18" +version = "1.14.19" dependencies = [ "solana-bpf-rust-many-args-dep", - "solana-program 1.14.18", + "solana-program 1.14.19", ] [[package]] name = "solana-bpf-rust-many-args-dep" -version = "1.14.18" +version = "1.14.19" dependencies = [ - "solana-program 1.14.18", + "solana-program 1.14.19", ] [[package]] name = "solana-bpf-rust-mem" -version = "1.14.18" +version = "1.14.19" dependencies = [ - "solana-program 1.14.18", + "solana-program 1.14.19", "solana-program-runtime", "solana-program-test", - "solana-sdk 1.14.18", + "solana-sdk 1.14.19", ] [[package]] name = "solana-bpf-rust-membuiltins" -version = "1.14.18" +version = "1.14.19" dependencies = [ "solana-bpf-rust-mem", - "solana-program 1.14.18", + "solana-program 1.14.19", ] [[package]] name = "solana-bpf-rust-noop" -version = "1.14.18" +version = "1.14.19" dependencies = [ - "solana-program 1.14.18", + "solana-program 1.14.19", ] [[package]] name = "solana-bpf-rust-panic" -version = "1.14.18" +version = "1.14.19" dependencies = [ - "solana-program 1.14.18", + "solana-program 1.14.19", ] [[package]] name = "solana-bpf-rust-param-passing" -version = "1.14.18" +version = "1.14.19" dependencies = [ "solana-bpf-rust-param-passing-dep", - "solana-program 1.14.18", + "solana-program 1.14.19", ] [[package]] name = "solana-bpf-rust-param-passing-dep" -version = "1.14.18" +version = "1.14.19" dependencies = [ - "solana-program 1.14.18", + "solana-program 1.14.19", ] [[package]] name = "solana-bpf-rust-rand" -version = "1.14.18" +version = "1.14.19" dependencies = [ "getrandom 0.1.14", "rand 0.7.3", - "solana-program 1.14.18", + "solana-program 1.14.19", ] [[package]] name = "solana-bpf-rust-realloc" -version = "1.14.18" +version = "1.14.19" dependencies = [ - "solana-program 1.14.18", + "solana-program 1.14.19", ] [[package]] name = "solana-bpf-rust-realloc-invoke" -version = "1.14.18" +version = "1.14.19" dependencies = [ "solana-bpf-rust-realloc", - "solana-program 1.14.18", + "solana-program 1.14.19", ] [[package]] name = "solana-bpf-rust-ro-account_modify" -version = "1.14.18" +version = "1.14.19" dependencies = [ - "solana-program 1.14.18", + "solana-program 1.14.19", ] [[package]] name = "solana-bpf-rust-ro-modify" -version = "1.14.18" +version = "1.14.19" dependencies = [ - "solana-program 1.14.18", + "solana-program 1.14.19", ] [[package]] name = "solana-bpf-rust-sanity" -version = "1.14.18" +version = "1.14.19" dependencies = [ - "solana-program 1.14.18", + "solana-program 1.14.19", "solana-program-runtime", "solana-program-test", - "solana-sdk 1.14.18", + "solana-sdk 1.14.19", ] [[package]] name = "solana-bpf-rust-secp256k1-recover" -version = "1.14.18" +version = "1.14.19" dependencies = [ "libsecp256k1 0.7.0", - "solana-program 1.14.18", + "solana-program 1.14.19", ] [[package]] name = "solana-bpf-rust-sha" -version = "1.14.18" +version = "1.14.19" dependencies = [ "blake3", - "solana-program 1.14.18", + "solana-program 1.14.19", ] [[package]] name = "solana-bpf-rust-sibling-instructions" -version = "1.14.18" +version = "1.14.19" dependencies = [ - "solana-program 1.14.18", + "solana-program 1.14.19", ] [[package]] name = "solana-bpf-rust-sibling_inner-instructions" -version = "1.14.18" +version = "1.14.19" dependencies = [ - "solana-program 1.14.18", + "solana-program 1.14.19", ] [[package]] name = "solana-bpf-rust-simulation" -version = "1.14.18" +version = "1.14.19" dependencies = [ - "solana-logger 1.14.18", - "solana-program 1.14.18", + "solana-logger 1.14.19", + "solana-program 1.14.19", "solana-program-test", - "solana-sdk 1.14.18", + "solana-sdk 1.14.19", "solana-validator", ] [[package]] name = "solana-bpf-rust-spoof1" -version = "1.14.18" +version = "1.14.19" dependencies = [ - "solana-program 1.14.18", + "solana-program 1.14.19", ] [[package]] name = "solana-bpf-rust-spoof1-system" -version = "1.14.18" +version = "1.14.19" dependencies = [ - "solana-program 1.14.18", + "solana-program 1.14.19", ] [[package]] name = "solana-bpf-rust-sysvar" -version = "1.14.18" +version = "1.14.19" dependencies = [ - "solana-program 1.14.18", + "solana-program 1.14.19", "solana-program-runtime", "solana-program-test", - "solana-sdk 1.14.18", + "solana-sdk 1.14.19", ] [[package]] name = "solana-bpf-rust-upgradeable" -version = "1.14.18" +version = "1.14.19" dependencies = [ - "solana-program 1.14.18", + "solana-program 1.14.19", ] [[package]] name = "solana-bpf-rust-upgraded" -version = "1.14.18" +version = "1.14.19" dependencies = [ - "solana-program 1.14.18", + "solana-program 1.14.19", ] [[package]] name = "solana-bucket-map" -version = "1.14.18" +version = "1.14.19" dependencies = [ "log", "memmap2", "modular-bitfield", "rand 0.7.3", "solana-measure", - "solana-sdk 1.14.18", + "solana-sdk 1.14.19", "tempfile", ] [[package]] name = "solana-clap-utils" -version = "1.14.18" +version = "1.14.19" dependencies = [ "chrono", "clap 2.33.3", "rpassword", "solana-perf", "solana-remote-wallet", - "solana-sdk 1.14.18", + "solana-sdk 1.14.19", "thiserror", "tiny-bip39", "uriparse", @@ -4635,7 +4635,7 @@ dependencies = [ [[package]] name = "solana-cli-config" -version = "1.14.18" +version = "1.14.19" dependencies = [ "dirs-next", "lazy_static", @@ -4643,13 +4643,13 @@ dependencies = [ "serde_derive", "serde_yaml", "solana-clap-utils", - "solana-sdk 1.14.18", + "solana-sdk 1.14.19", "url 2.2.2", ] [[package]] name = "solana-cli-output" -version = "1.14.18" +version = "1.14.19" dependencies = [ "Inflector", "base64 0.13.0", @@ -4666,7 +4666,7 @@ dependencies = [ "solana-clap-utils", "solana-cli-config", "solana-client", - "solana-sdk 1.14.18", + "solana-sdk 1.14.19", "solana-transaction-status", "solana-vote-program", "spl-memo", @@ -4674,7 +4674,7 @@ dependencies = [ [[package]] name = "solana-client" -version = "1.14.18" +version = "1.14.19" dependencies = [ "async-mutex", "async-trait", @@ -4710,7 +4710,7 @@ dependencies = [ "solana-measure", "solana-metrics", "solana-net-utils", - "solana-sdk 1.14.18", + "solana-sdk 1.14.19", "solana-streamer", "solana-transaction-status", "solana-version", @@ -4726,27 +4726,27 @@ dependencies = [ [[package]] name = "solana-compute-budget-program" -version = "1.14.18" +version = "1.14.19" dependencies = [ "solana-program-runtime", - "solana-sdk 1.14.18", + "solana-sdk 1.14.19", ] [[package]] name = "solana-config-program" -version = "1.14.18" +version = "1.14.19" dependencies = [ "bincode", "chrono", "serde", "serde_derive", "solana-program-runtime", - "solana-sdk 1.14.18", + "solana-sdk 1.14.19", ] [[package]] name = "solana-core" -version = "1.14.18" +version = "1.14.19" dependencies = [ "ahash", "base64 0.13.0", @@ -4775,8 +4775,8 @@ dependencies = [ "solana-bloom", "solana-client", "solana-entry", - "solana-frozen-abi 1.14.18", - "solana-frozen-abi-macro 1.14.18", + "solana-frozen-abi 1.14.19", + "solana-frozen-abi-macro 1.14.19", "solana-geyser-plugin-manager", "solana-gossip", "solana-ledger", @@ -4789,7 +4789,7 @@ dependencies = [ "solana-rayon-threadlimit", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.18", + "solana-sdk 1.14.19", "solana-send-transaction-service", "solana-streamer", "solana-transaction-status", @@ -4805,19 +4805,19 @@ dependencies = [ [[package]] name = "solana-download-utils" -version = "1.14.18" +version = "1.14.19" dependencies = [ "console", "indicatif", "log", "reqwest", "solana-runtime", - "solana-sdk 1.14.18", + "solana-sdk 1.14.19", ] [[package]] name = "solana-entry" -version = "1.14.18" +version = "1.14.19" dependencies = [ "bincode", "crossbeam-channel", @@ -4833,12 +4833,12 @@ dependencies = [ "solana-metrics", "solana-perf", "solana-rayon-threadlimit", - "solana-sdk 1.14.18", + "solana-sdk 1.14.19", ] [[package]] name = "solana-faucet" -version = "1.14.18" +version = "1.14.19" dependencies = [ "bincode", "byteorder 1.4.3", @@ -4849,9 +4849,9 @@ dependencies = [ "serde_derive", "solana-clap-utils", "solana-cli-config", - "solana-logger 1.14.18", + "solana-logger 1.14.19", "solana-metrics", - "solana-sdk 1.14.18", + "solana-sdk 1.14.19", "solana-version", "spl-memo", "thiserror", @@ -4894,7 +4894,7 @@ dependencies = [ [[package]] name = "solana-frozen-abi" -version = "1.14.18" +version = "1.14.19" dependencies = [ "ahash", "blake3", @@ -4919,7 +4919,7 @@ dependencies = [ "serde_derive", "serde_json", "sha2 0.10.2", - "solana-frozen-abi-macro 1.14.18", + "solana-frozen-abi-macro 1.14.19", "subtle", "thiserror", ] @@ -4938,7 +4938,7 @@ dependencies = [ [[package]] name = "solana-frozen-abi-macro" -version = "1.14.18" +version = "1.14.19" dependencies = [ "proc-macro2 1.0.51", "quote 1.0.18", @@ -4948,26 +4948,26 @@ dependencies = [ [[package]] name = "solana-genesis-utils" -version = "1.14.18" +version = "1.14.19" dependencies = [ "solana-download-utils", "solana-runtime", - "solana-sdk 1.14.18", + "solana-sdk 1.14.19", ] [[package]] name = "solana-geyser-plugin-interface" -version = "1.14.18" +version = "1.14.19" dependencies = [ "log", - "solana-sdk 1.14.18", + "solana-sdk 1.14.19", "solana-transaction-status", "thiserror", ] [[package]] name = "solana-geyser-plugin-manager" -version = "1.14.18" +version = "1.14.19" dependencies = [ "bs58", "crossbeam-channel", @@ -4980,14 +4980,14 @@ dependencies = [ "solana-metrics", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.18", + "solana-sdk 1.14.19", "solana-transaction-status", "thiserror", ] [[package]] name = "solana-gossip" -version = "1.14.18" +version = "1.14.19" dependencies = [ "bincode", "bv", @@ -5011,17 +5011,17 @@ dependencies = [ "solana-clap-utils", "solana-client", "solana-entry", - "solana-frozen-abi 1.14.18", - "solana-frozen-abi-macro 1.14.18", + "solana-frozen-abi 1.14.19", + "solana-frozen-abi-macro 1.14.19", "solana-ledger", - "solana-logger 1.14.18", + "solana-logger 1.14.19", "solana-measure", "solana-metrics", "solana-net-utils", "solana-perf", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.14.18", + "solana-sdk 1.14.19", "solana-streamer", "solana-version", "solana-vote-program", @@ -5030,7 +5030,7 @@ dependencies = [ [[package]] name = "solana-ledger" -version = "1.14.18" +version = "1.14.19" dependencies = [ "assert_matches", "bincode", @@ -5062,15 +5062,15 @@ dependencies = [ "solana-account-decoder", "solana-bpf-loader-program", "solana-entry", - "solana-frozen-abi 1.14.18", - "solana-frozen-abi-macro 1.14.18", + "solana-frozen-abi 1.14.19", + "solana-frozen-abi-macro 1.14.19", "solana-measure", "solana-metrics", "solana-perf", "solana-program-runtime", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.14.18", + "solana-sdk 1.14.19", "solana-stake-program", "solana-storage-bigtable", "solana-storage-proto", @@ -5099,7 +5099,7 @@ dependencies = [ [[package]] name = "solana-logger" -version = "1.14.18" +version = "1.14.19" dependencies = [ "env_logger", "lazy_static", @@ -5108,36 +5108,36 @@ dependencies = [ [[package]] name = "solana-measure" -version = "1.14.18" +version = "1.14.19" dependencies = [ "log", - "solana-sdk 1.14.18", + "solana-sdk 1.14.19", ] [[package]] name = "solana-merkle-tree" -version = "1.14.18" +version = "1.14.19" dependencies = [ "fast-math", "matches", - "solana-program 1.14.18", + "solana-program 1.14.19", ] [[package]] name = "solana-metrics" -version = "1.14.18" +version = "1.14.19" dependencies = [ "crossbeam-channel", "gethostname", "lazy_static", "log", "reqwest", - "solana-sdk 1.14.18", + "solana-sdk 1.14.19", ] [[package]] name = "solana-net-utils" -version = "1.14.18" +version = "1.14.19" dependencies = [ "bincode", "clap 3.1.6", @@ -5148,8 +5148,8 @@ dependencies = [ "serde", "serde_derive", "socket2", - "solana-logger 1.14.18", - "solana-sdk 1.14.18", + "solana-logger 1.14.19", + "solana-sdk 1.14.19", "solana-version", "tokio", "url 2.2.2", @@ -5157,7 +5157,7 @@ dependencies = [ [[package]] name = "solana-perf" -version = "1.14.18" +version = "1.14.19" dependencies = [ "ahash", "bincode", @@ -5176,13 +5176,13 @@ dependencies = [ "serde", "solana-metrics", "solana-rayon-threadlimit", - "solana-sdk 1.14.18", + "solana-sdk 1.14.19", "solana-vote-program", ] [[package]] name = "solana-poh" -version = "1.14.18" +version = "1.14.19" dependencies = [ "core_affinity", "crossbeam-channel", @@ -5192,7 +5192,7 @@ dependencies = [ "solana-measure", "solana-metrics", "solana-runtime", - "solana-sdk 1.14.18", + "solana-sdk 1.14.19", "solana-sys-tuner", "thiserror", ] @@ -5248,7 +5248,7 @@ dependencies = [ [[package]] name = "solana-program" -version = "1.14.18" +version = "1.14.19" dependencies = [ "base64 0.13.0", "bincode", @@ -5284,9 +5284,9 @@ dependencies = [ "serde_json", "sha2 0.10.2", "sha3 0.10.1", - "solana-frozen-abi 1.14.18", - "solana-frozen-abi-macro 1.14.18", - "solana-sdk-macro 1.14.18", + "solana-frozen-abi 1.14.19", + "solana-frozen-abi-macro 1.14.19", + "solana-sdk-macro 1.14.19", "thiserror", "tiny-bip39", "wasm-bindgen", @@ -5295,7 +5295,7 @@ dependencies = [ [[package]] name = "solana-program-runtime" -version = "1.14.18" +version = "1.14.19" dependencies = [ "base64 0.13.0", "bincode", @@ -5310,17 +5310,17 @@ dependencies = [ "rand 0.7.3", "rustc_version", "serde", - "solana-frozen-abi 1.14.18", - "solana-frozen-abi-macro 1.14.18", + "solana-frozen-abi 1.14.19", + "solana-frozen-abi-macro 1.14.19", "solana-measure", "solana-metrics", - "solana-sdk 1.14.18", + "solana-sdk 1.14.19", "thiserror", ] [[package]] name = "solana-program-test" -version = "1.14.18" +version = "1.14.19" dependencies = [ "assert_matches", "async-trait", @@ -5332,10 +5332,10 @@ dependencies = [ "solana-banks-client", "solana-banks-server", "solana-bpf-loader-program", - "solana-logger 1.14.18", + "solana-logger 1.14.19", "solana-program-runtime", "solana-runtime", - "solana-sdk 1.14.18", + "solana-sdk 1.14.19", "solana-vote-program", "thiserror", "tokio", @@ -5343,7 +5343,7 @@ dependencies = [ [[package]] name = "solana-rayon-threadlimit" -version = "1.14.18" +version = "1.14.19" dependencies = [ "lazy_static", "num_cpus", @@ -5351,7 +5351,7 @@ dependencies = [ [[package]] name = "solana-remote-wallet" -version = "1.14.18" +version = "1.14.19" dependencies = [ "console", "dialoguer", @@ -5361,14 +5361,14 @@ dependencies = [ "parking_lot 0.12.1", "qstring", "semver", - "solana-sdk 1.14.18", + "solana-sdk 1.14.19", "thiserror", "uriparse", ] [[package]] name = "solana-rpc" -version = "1.14.18" +version = "1.14.19" dependencies = [ "base64 0.13.0", "bincode", @@ -5401,7 +5401,7 @@ dependencies = [ "solana-poh", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.14.18", + "solana-sdk 1.14.19", "solana-send-transaction-service", "solana-stake-program", "solana-storage-bigtable", @@ -5419,7 +5419,7 @@ dependencies = [ [[package]] name = "solana-runtime" -version = "1.14.18" +version = "1.14.19" dependencies = [ "arrayref", "bincode", @@ -5456,17 +5456,17 @@ dependencies = [ "solana-bucket-map", "solana-compute-budget-program", "solana-config-program", - "solana-frozen-abi 1.14.18", - "solana-frozen-abi-macro 1.14.18", + "solana-frozen-abi 1.14.19", + "solana-frozen-abi-macro 1.14.19", "solana-measure", "solana-metrics", "solana-program-runtime", "solana-rayon-threadlimit", - "solana-sdk 1.14.18", + "solana-sdk 1.14.19", "solana-stake-program", "solana-vote-program", "solana-zk-token-proof-program", - "solana-zk-token-sdk 1.14.18", + "solana-zk-token-sdk 1.14.19", "strum", "strum_macros", "symlink", @@ -5529,7 +5529,7 @@ dependencies = [ [[package]] name = "solana-sdk" -version = "1.14.18" +version = "1.14.19" dependencies = [ "assert_matches", "base64 0.13.0", @@ -5566,11 +5566,11 @@ dependencies = [ "serde_json", "sha2 0.10.2", "sha3 0.10.1", - "solana-frozen-abi 1.14.18", - "solana-frozen-abi-macro 1.14.18", - "solana-logger 1.14.18", - "solana-program 1.14.18", - "solana-sdk-macro 1.14.18", + "solana-frozen-abi 1.14.19", + "solana-frozen-abi-macro 1.14.19", + "solana-logger 1.14.19", + "solana-program 1.14.19", + "solana-sdk-macro 1.14.19", "thiserror", "uriparse", "wasm-bindgen", @@ -5591,7 +5591,7 @@ dependencies = [ [[package]] name = "solana-sdk-macro" -version = "1.14.18" +version = "1.14.19" dependencies = [ "bs58", "proc-macro2 1.0.51", @@ -5602,7 +5602,7 @@ dependencies = [ [[package]] name = "solana-send-transaction-service" -version = "1.14.18" +version = "1.14.19" dependencies = [ "crossbeam-channel", "log", @@ -5610,12 +5610,12 @@ dependencies = [ "solana-measure", "solana-metrics", "solana-runtime", - "solana-sdk 1.14.18", + "solana-sdk 1.14.19", ] [[package]] name = "solana-stake-program" -version = "1.14.18" +version = "1.14.19" dependencies = [ "bincode", "log", @@ -5625,18 +5625,18 @@ dependencies = [ "serde", "serde_derive", "solana-config-program", - "solana-frozen-abi 1.14.18", - "solana-frozen-abi-macro 1.14.18", + "solana-frozen-abi 1.14.19", + "solana-frozen-abi-macro 1.14.19", "solana-metrics", "solana-program-runtime", - "solana-sdk 1.14.18", + "solana-sdk 1.14.19", "solana-vote-program", "thiserror", ] [[package]] name = "solana-storage-bigtable" -version = "1.14.18" +version = "1.14.19" dependencies = [ "backoff", "bincode", @@ -5657,7 +5657,7 @@ dependencies = [ "serde_derive", "smpl_jwt", "solana-metrics", - "solana-sdk 1.14.18", + "solana-sdk 1.14.19", "solana-storage-proto", "solana-transaction-status", "thiserror", @@ -5668,7 +5668,7 @@ dependencies = [ [[package]] name = "solana-storage-proto" -version = "1.14.18" +version = "1.14.19" dependencies = [ "bincode", "bs58", @@ -5676,14 +5676,14 @@ dependencies = [ "protobuf-src", "serde", "solana-account-decoder", - "solana-sdk 1.14.18", + "solana-sdk 1.14.19", "solana-transaction-status", "tonic-build 0.8.0", ] [[package]] name = "solana-streamer" -version = "1.14.18" +version = "1.14.19" dependencies = [ "crossbeam-channel", "futures-util", @@ -5702,7 +5702,7 @@ dependencies = [ "rustls 0.20.6", "solana-metrics", "solana-perf", - "solana-sdk 1.14.18", + "solana-sdk 1.14.19", "thiserror", "tokio", "x509-parser", @@ -5710,13 +5710,13 @@ dependencies = [ [[package]] name = "solana-sys-tuner" -version = "1.14.18" +version = "1.14.19" dependencies = [ "clap 2.33.3", "libc", "log", "nix", - "solana-logger 1.14.18", + "solana-logger 1.14.19", "solana-version", "sysctl", "unix_socket2", @@ -5725,7 +5725,7 @@ dependencies = [ [[package]] name = "solana-test-validator" -version = "1.14.18" +version = "1.14.19" dependencies = [ "base64 0.13.0", "log", @@ -5736,20 +5736,20 @@ dependencies = [ "solana-core", "solana-gossip", "solana-ledger", - "solana-logger 1.14.18", + "solana-logger 1.14.19", "solana-net-utils", "solana-program-runtime", "solana-program-test", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.18", + "solana-sdk 1.14.19", "solana-streamer", "tokio", ] [[package]] name = "solana-transaction-status" -version = "1.14.18" +version = "1.14.19" dependencies = [ "Inflector", "base64 0.13.0", @@ -5765,7 +5765,7 @@ dependencies = [ "solana-address-lookup-table-program", "solana-measure", "solana-metrics", - "solana-sdk 1.14.18", + "solana-sdk 1.14.19", "solana-vote-program", "spl-associated-token-account", "spl-memo", @@ -5776,7 +5776,7 @@ dependencies = [ [[package]] name = "solana-validator" -version = "1.14.18" +version = "1.14.19" dependencies = [ "chrono", "clap 2.33.3", @@ -5807,14 +5807,14 @@ dependencies = [ "solana-genesis-utils", "solana-gossip", "solana-ledger", - "solana-logger 1.14.18", + "solana-logger 1.14.19", "solana-metrics", "solana-net-utils", "solana-perf", "solana-poh", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.18", + "solana-sdk 1.14.19", "solana-send-transaction-service", "solana-storage-bigtable", "solana-streamer", @@ -5827,21 +5827,21 @@ dependencies = [ [[package]] name = "solana-version" -version = "1.14.18" +version = "1.14.19" dependencies = [ "log", "rustc_version", "semver", "serde", "serde_derive", - "solana-frozen-abi 1.14.18", - "solana-frozen-abi-macro 1.14.18", - "solana-sdk 1.14.18", + "solana-frozen-abi 1.14.19", + "solana-frozen-abi-macro 1.14.19", + "solana-sdk 1.14.19", ] [[package]] name = "solana-vote-program" -version = "1.14.18" +version = "1.14.19" dependencies = [ "bincode", "log", @@ -5850,25 +5850,25 @@ dependencies = [ "rustc_version", "serde", "serde_derive", - "solana-frozen-abi 1.14.18", - "solana-frozen-abi-macro 1.14.18", + "solana-frozen-abi 1.14.19", + "solana-frozen-abi-macro 1.14.19", "solana-metrics", "solana-program-runtime", - "solana-sdk 1.14.18", + "solana-sdk 1.14.19", "thiserror", ] [[package]] name = "solana-zk-token-proof-program" -version = "1.14.18" +version = "1.14.19" dependencies = [ "bytemuck", "getrandom 0.1.14", "num-derive", "num-traits", "solana-program-runtime", - "solana-sdk 1.14.18", - "solana-zk-token-sdk 1.14.18", + "solana-sdk 1.14.19", + "solana-zk-token-sdk 1.14.19", ] [[package]] @@ -5904,7 +5904,7 @@ dependencies = [ [[package]] name = "solana-zk-token-sdk" -version = "1.14.18" +version = "1.14.19" dependencies = [ "aes-gcm-siv", "arrayref", @@ -5924,8 +5924,8 @@ dependencies = [ "serde", "serde_json", "sha3 0.9.1", - "solana-program 1.14.18", - "solana-sdk 1.14.18", + "solana-program 1.14.19", + "solana-sdk 1.14.19", "subtle", "thiserror", "zeroize", diff --git a/programs/bpf/Cargo.toml b/programs/bpf/Cargo.toml index 53bf3e0750b62d..f66288edd8aa5f 100644 --- a/programs/bpf/Cargo.toml +++ b/programs/bpf/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "solana-bpf-programs" description = "Blockchain, Rebuilt for Scale" -version = "1.14.18" +version = "1.14.19" documentation = "https://docs.rs/solana" homepage = "https://solana.com/" readme = "README.md" @@ -26,22 +26,22 @@ itertools = "0.10.1" log = "0.4.11" miow = "0.3.6" net2 = "0.2.37" -solana-account-decoder = { path = "../../account-decoder", version = "=1.14.18" } -solana-bpf-loader-program = { path = "../bpf_loader", version = "=1.14.18" } -solana-bpf-rust-invoke = { path = "rust/invoke", version = "=1.14.18" } -solana-bpf-rust-realloc = { path = "rust/realloc", version = "=1.14.18" } -solana-bpf-rust-realloc-invoke = { path = "rust/realloc_invoke", version = "=1.14.18" } -solana-cli-output = { path = "../../cli-output", version = "=1.14.18" } -solana-logger = { path = "../../logger", version = "=1.14.18" } -solana-measure = { path = "../../measure", version = "=1.14.18" } -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.18" } -solana-runtime = { path = "../../runtime", version = "=1.14.18" } -solana-sdk = { path = "../../sdk", version = "=1.14.18" } -solana-transaction-status = { path = "../../transaction-status", version = "=1.14.18" } +solana-account-decoder = { path = "../../account-decoder", version = "=1.14.19" } +solana-bpf-loader-program = { path = "../bpf_loader", version = "=1.14.19" } +solana-bpf-rust-invoke = { path = "rust/invoke", version = "=1.14.19" } +solana-bpf-rust-realloc = { path = "rust/realloc", version = "=1.14.19" } +solana-bpf-rust-realloc-invoke = { path = "rust/realloc_invoke", version = "=1.14.19" } +solana-cli-output = { path = "../../cli-output", version = "=1.14.19" } +solana-logger = { path = "../../logger", version = "=1.14.19" } +solana-measure = { path = "../../measure", version = "=1.14.19" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.19" } +solana-runtime = { path = "../../runtime", version = "=1.14.19" } +solana-sdk = { path = "../../sdk", version = "=1.14.19" } +solana-transaction-status = { path = "../../transaction-status", version = "=1.14.19" } solana_rbpf = "=0.2.31" [dev-dependencies] -solana-ledger = { path = "../../ledger", version = "=1.14.18" } +solana-ledger = { path = "../../ledger", version = "=1.14.19" } [[bench]] name = "bpf_loader" diff --git a/programs/bpf/rust/128bit/Cargo.toml b/programs/bpf/rust/128bit/Cargo.toml index 72121a4901f70b..2499c56dd930c4 100644 --- a/programs/bpf/rust/128bit/Cargo.toml +++ b/programs/bpf/rust/128bit/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-128bit" -version = "1.14.18" +version = "1.14.19" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ documentation = "https://docs.rs/solana-bpf-rust-128bit" edition = "2021" [dependencies] -solana-bpf-rust-128bit-dep = { path = "../128bit_dep", version = "=1.14.18" } -solana-program = { path = "../../../../sdk/program", version = "=1.14.18" } +solana-bpf-rust-128bit-dep = { path = "../128bit_dep", version = "=1.14.19" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.19" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/128bit_dep/Cargo.toml b/programs/bpf/rust/128bit_dep/Cargo.toml index 377df646018d09..c85529621015f8 100644 --- a/programs/bpf/rust/128bit_dep/Cargo.toml +++ b/programs/bpf/rust/128bit_dep/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-128bit-dep" -version = "1.14.18" +version = "1.14.19" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-128bit-dep" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.18" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.19" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/bpf/rust/alloc/Cargo.toml b/programs/bpf/rust/alloc/Cargo.toml index 1aab3dffeda13f..12e2093abb85d1 100644 --- a/programs/bpf/rust/alloc/Cargo.toml +++ b/programs/bpf/rust/alloc/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-alloc" -version = "1.14.18" +version = "1.14.19" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-alloc" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.18" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.19" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/call_depth/Cargo.toml b/programs/bpf/rust/call_depth/Cargo.toml index 56291219e9814d..4c19e0e264074e 100644 --- a/programs/bpf/rust/call_depth/Cargo.toml +++ b/programs/bpf/rust/call_depth/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-call-depth" -version = "1.14.18" +version = "1.14.19" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-call-depth" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.18" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.19" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/caller_access/Cargo.toml b/programs/bpf/rust/caller_access/Cargo.toml index f09f67046e5bc3..049bde623c2f26 100644 --- a/programs/bpf/rust/caller_access/Cargo.toml +++ b/programs/bpf/rust/caller_access/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-caller-access" -version = "1.14.18" +version = "1.14.19" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-caller-access" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.18" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.19" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/curve25519/Cargo.toml b/programs/bpf/rust/curve25519/Cargo.toml index db700b9cfabdbb..31c84a5a1de325 100644 --- a/programs/bpf/rust/curve25519/Cargo.toml +++ b/programs/bpf/rust/curve25519/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-curve25519" -version = "1.14.18" +version = "1.14.19" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ documentation = "https://docs.rs/solana-bpf-rust-zktoken_crypto" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.18" } -solana-zk-token-sdk = { path = "../../../../zk-token-sdk", version = "=1.14.18" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.19" } +solana-zk-token-sdk = { path = "../../../../zk-token-sdk", version = "=1.14.19" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/custom_heap/Cargo.toml b/programs/bpf/rust/custom_heap/Cargo.toml index 112603dcb93969..75a273bd0d4210 100644 --- a/programs/bpf/rust/custom_heap/Cargo.toml +++ b/programs/bpf/rust/custom_heap/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-custom-heap" -version = "1.14.18" +version = "1.14.19" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-custom-heap" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.18" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.19" } [features] default = ["custom-heap"] diff --git a/programs/bpf/rust/dep_crate/Cargo.toml b/programs/bpf/rust/dep_crate/Cargo.toml index ca6fbfb5f8b907..13eed625fd7ec7 100644 --- a/programs/bpf/rust/dep_crate/Cargo.toml +++ b/programs/bpf/rust/dep_crate/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-dep-crate" -version = "1.14.18" +version = "1.14.19" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,8 +12,8 @@ edition = "2021" [dependencies] byteorder = { version = "1", default-features = false } # list of crates which must be buildable for bpf programs -solana-address-lookup-table-program = { path = "../../../../programs/address-lookup-table", version = "=1.14.18" } -solana-program = { path = "../../../../sdk/program", version = "=1.14.18" } +solana-address-lookup-table-program = { path = "../../../../programs/address-lookup-table", version = "=1.14.19" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.19" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/deprecated_loader/Cargo.toml b/programs/bpf/rust/deprecated_loader/Cargo.toml index f6df84aeb8d08c..294b2c6d690b8d 100644 --- a/programs/bpf/rust/deprecated_loader/Cargo.toml +++ b/programs/bpf/rust/deprecated_loader/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-deprecated-loader" -version = "1.14.18" +version = "1.14.19" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-deprecated-loader" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.18" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.19" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/dup_accounts/Cargo.toml b/programs/bpf/rust/dup_accounts/Cargo.toml index 09e12e50cf709d..e4d78f03b17a32 100644 --- a/programs/bpf/rust/dup_accounts/Cargo.toml +++ b/programs/bpf/rust/dup_accounts/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-dup-accounts" -version = "1.14.18" +version = "1.14.19" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-dup-accounts" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.18" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.19" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/error_handling/Cargo.toml b/programs/bpf/rust/error_handling/Cargo.toml index 311a7623e49500..16f5b5c8bf5b6a 100644 --- a/programs/bpf/rust/error_handling/Cargo.toml +++ b/programs/bpf/rust/error_handling/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-error-handling" -version = "1.14.18" +version = "1.14.19" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,7 +12,7 @@ edition = "2021" [dependencies] num-derive = "0.3" num-traits = "0.2" -solana-program = { path = "../../../../sdk/program", version = "=1.14.18" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.19" } thiserror = "1.0" [lib] diff --git a/programs/bpf/rust/external_spend/Cargo.toml b/programs/bpf/rust/external_spend/Cargo.toml index 48d00e15899345..a61b81cf2deb53 100644 --- a/programs/bpf/rust/external_spend/Cargo.toml +++ b/programs/bpf/rust/external_spend/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-external-spend" -version = "1.14.18" +version = "1.14.19" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-external-spend" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.18" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.19" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/finalize/Cargo.toml b/programs/bpf/rust/finalize/Cargo.toml index 7e1615c5d192f7..8c547dda56e47a 100644 --- a/programs/bpf/rust/finalize/Cargo.toml +++ b/programs/bpf/rust/finalize/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-finalize" -version = "1.14.18" +version = "1.14.19" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-finalize" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.18" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.19" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/get_minimum_delegation/Cargo.toml b/programs/bpf/rust/get_minimum_delegation/Cargo.toml index 4e4addc287e0c9..cea07fd38e6936 100644 --- a/programs/bpf/rust/get_minimum_delegation/Cargo.toml +++ b/programs/bpf/rust/get_minimum_delegation/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-get-minimum-delegation" -version = "1.14.18" +version = "1.14.19" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-get-minimum-delegation" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.18" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.19" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/inner_instruction_alignment_check/Cargo.toml b/programs/bpf/rust/inner_instruction_alignment_check/Cargo.toml index 3f377741eed28a..a9b87cfbd528d8 100644 --- a/programs/bpf/rust/inner_instruction_alignment_check/Cargo.toml +++ b/programs/bpf/rust/inner_instruction_alignment_check/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-inner_instruction_alignment_check" -version = "1.14.18" +version = "1.14.19" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-inner_instruction_alignment_che edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.18" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.19" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/instruction_introspection/Cargo.toml b/programs/bpf/rust/instruction_introspection/Cargo.toml index 29c00be05582e3..fd743e3277bbab 100644 --- a/programs/bpf/rust/instruction_introspection/Cargo.toml +++ b/programs/bpf/rust/instruction_introspection/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-instruction-introspection" -version = "1.14.18" +version = "1.14.19" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-instruction-introspection" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.18" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.19" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/invoke/Cargo.toml b/programs/bpf/rust/invoke/Cargo.toml index 1b97081ae274af..94ecf3369f173c 100644 --- a/programs/bpf/rust/invoke/Cargo.toml +++ b/programs/bpf/rust/invoke/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-invoke" -version = "1.14.18" +version = "1.14.19" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -15,7 +15,7 @@ program = [] [dependencies] solana-bpf-rust-invoked = { path = "../invoked", default-features = false } -solana-program = { path = "../../../../sdk/program", version = "=1.14.18" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.19" } [lib] crate-type = ["lib", "cdylib"] diff --git a/programs/bpf/rust/invoke_and_error/Cargo.toml b/programs/bpf/rust/invoke_and_error/Cargo.toml index b02d01b39fe7db..ac6afb1d764625 100644 --- a/programs/bpf/rust/invoke_and_error/Cargo.toml +++ b/programs/bpf/rust/invoke_and_error/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-invoke-and-error" -version = "1.14.18" +version = "1.14.19" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-invoke-and-error" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.18" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.19" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/invoke_and_ok/Cargo.toml b/programs/bpf/rust/invoke_and_ok/Cargo.toml index f13da8c99f9883..ff133f2ae1f617 100644 --- a/programs/bpf/rust/invoke_and_ok/Cargo.toml +++ b/programs/bpf/rust/invoke_and_ok/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-invoke-and-ok" -version = "1.14.18" +version = "1.14.19" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-invoke-and-ok" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.18" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.19" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/invoke_and_return/Cargo.toml b/programs/bpf/rust/invoke_and_return/Cargo.toml index fbaa38abfa37ec..98a67e4488bf16 100644 --- a/programs/bpf/rust/invoke_and_return/Cargo.toml +++ b/programs/bpf/rust/invoke_and_return/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-invoke-and-return" -version = "1.14.18" +version = "1.14.19" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-invoke-and-return" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.18" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.19" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/invoked/Cargo.toml b/programs/bpf/rust/invoked/Cargo.toml index 76a06f1c1f351c..06187d05108e37 100644 --- a/programs/bpf/rust/invoked/Cargo.toml +++ b/programs/bpf/rust/invoked/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-invoked" -version = "1.14.18" +version = "1.14.19" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,7 +14,7 @@ default = ["program"] program = [] [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.18" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.19" } [lib] crate-type = ["lib", "cdylib"] diff --git a/programs/bpf/rust/iter/Cargo.toml b/programs/bpf/rust/iter/Cargo.toml index 810468969b3735..0d4d27abb4264d 100644 --- a/programs/bpf/rust/iter/Cargo.toml +++ b/programs/bpf/rust/iter/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-iter" -version = "1.14.18" +version = "1.14.19" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-iter" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.18" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.19" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/log_data/Cargo.toml b/programs/bpf/rust/log_data/Cargo.toml index 97715f881a6274..64526d1b71e612 100644 --- a/programs/bpf/rust/log_data/Cargo.toml +++ b/programs/bpf/rust/log_data/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-log-data" -version = "1.14.18" +version = "1.14.19" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-log-data" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.18" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.19" } [features] default = ["program"] diff --git a/programs/bpf/rust/many_args/Cargo.toml b/programs/bpf/rust/many_args/Cargo.toml index af20ae9265544f..1f186e2ec55799 100644 --- a/programs/bpf/rust/many_args/Cargo.toml +++ b/programs/bpf/rust/many_args/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-many-args" -version = "1.14.18" +version = "1.14.19" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ documentation = "https://docs.rs/solana-bpf-rust-many-args" edition = "2021" [dependencies] -solana-bpf-rust-many-args-dep = { path = "../many_args_dep", version = "=1.14.18" } -solana-program = { path = "../../../../sdk/program", version = "=1.14.18" } +solana-bpf-rust-many-args-dep = { path = "../many_args_dep", version = "=1.14.19" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.19" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/many_args_dep/Cargo.toml b/programs/bpf/rust/many_args_dep/Cargo.toml index 84e7b8e54ef493..8d28b67675491d 100644 --- a/programs/bpf/rust/many_args_dep/Cargo.toml +++ b/programs/bpf/rust/many_args_dep/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-many-args-dep" -version = "1.14.18" +version = "1.14.19" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-many-args-dep" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.18" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.19" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/bpf/rust/mem/Cargo.toml b/programs/bpf/rust/mem/Cargo.toml index 89d9ef0d2ad754..0ce040aa8348cc 100644 --- a/programs/bpf/rust/mem/Cargo.toml +++ b/programs/bpf/rust/mem/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-mem" -version = "1.14.18" +version = "1.14.19" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,12 +13,12 @@ edition = "2021" no-entrypoint = [] [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.18" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.19" } [dev-dependencies] -solana-program-runtime = { path = "../../../../program-runtime", version = "=1.14.18" } -solana-program-test = { path = "../../../../program-test", version = "=1.14.18" } -solana-sdk = { path = "../../../../sdk", version = "=1.14.18" } +solana-program-runtime = { path = "../../../../program-runtime", version = "=1.14.19" } +solana-program-test = { path = "../../../../program-test", version = "=1.14.19" } +solana-sdk = { path = "../../../../sdk", version = "=1.14.19" } [lib] crate-type = ["cdylib", "lib"] diff --git a/programs/bpf/rust/membuiltins/Cargo.toml b/programs/bpf/rust/membuiltins/Cargo.toml index a9ec63a7ed0c74..8674774c753aac 100644 --- a/programs/bpf/rust/membuiltins/Cargo.toml +++ b/programs/bpf/rust/membuiltins/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-membuiltins" -version = "1.14.18" +version = "1.14.19" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ documentation = "https://docs.rs/solana-bpf-rust-mem" edition = "2021" [dependencies] -solana-bpf-rust-mem = { path = "../mem", version = "=1.14.18", features = [ "no-entrypoint" ] } -solana-program = { path = "../../../../sdk/program", version = "=1.14.18" } +solana-bpf-rust-mem = { path = "../mem", version = "=1.14.19", features = [ "no-entrypoint" ] } +solana-program = { path = "../../../../sdk/program", version = "=1.14.19" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/noop/Cargo.toml b/programs/bpf/rust/noop/Cargo.toml index 3ceedfcffe380d..a7090f966ae86d 100644 --- a/programs/bpf/rust/noop/Cargo.toml +++ b/programs/bpf/rust/noop/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-noop" -version = "1.14.18" +version = "1.14.19" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-noop" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.18" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.19" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/panic/Cargo.toml b/programs/bpf/rust/panic/Cargo.toml index 62ed04e44ab4d0..7262eb21105894 100644 --- a/programs/bpf/rust/panic/Cargo.toml +++ b/programs/bpf/rust/panic/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-panic" -version = "1.14.18" +version = "1.14.19" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-panic" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.18" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.19" } [features] default = ["custom-panic"] diff --git a/programs/bpf/rust/param_passing/Cargo.toml b/programs/bpf/rust/param_passing/Cargo.toml index c9d2e79ab2264e..8a1922841b5568 100644 --- a/programs/bpf/rust/param_passing/Cargo.toml +++ b/programs/bpf/rust/param_passing/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-param-passing" -version = "1.14.18" +version = "1.14.19" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ documentation = "https://docs.rs/solana-bpf-rust-param-passing" edition = "2021" [dependencies] -solana-bpf-rust-param-passing-dep = { path = "../param_passing_dep", version = "=1.14.18" } -solana-program = { path = "../../../../sdk/program", version = "=1.14.18" } +solana-bpf-rust-param-passing-dep = { path = "../param_passing_dep", version = "=1.14.19" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.19" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/param_passing_dep/Cargo.toml b/programs/bpf/rust/param_passing_dep/Cargo.toml index 88d50a2eda6b3d..74bca6afed4469 100644 --- a/programs/bpf/rust/param_passing_dep/Cargo.toml +++ b/programs/bpf/rust/param_passing_dep/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-param-passing-dep" -version = "1.14.18" +version = "1.14.19" description = "Solana BPF program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-param-passing-dep" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.18" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.19" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/bpf/rust/rand/Cargo.toml b/programs/bpf/rust/rand/Cargo.toml index 71128abeaa15aa..3f96a02b42b2ac 100644 --- a/programs/bpf/rust/rand/Cargo.toml +++ b/programs/bpf/rust/rand/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-rand" -version = "1.14.18" +version = "1.14.19" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,7 +12,7 @@ edition = "2021" [dependencies] getrandom = { version = "0.1.14", features = ["dummy"] } rand = "0.7" -solana-program = { path = "../../../../sdk/program", version = "=1.14.18" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.19" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/realloc/Cargo.toml b/programs/bpf/rust/realloc/Cargo.toml index 186c61df22800a..5633e00d46c053 100644 --- a/programs/bpf/rust/realloc/Cargo.toml +++ b/programs/bpf/rust/realloc/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-realloc" -version = "1.14.18" +version = "1.14.19" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,7 +14,7 @@ default = ["program"] program = [] [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.18" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.19" } [lib] crate-type = ["lib", "cdylib"] diff --git a/programs/bpf/rust/realloc_invoke/Cargo.toml b/programs/bpf/rust/realloc_invoke/Cargo.toml index a307990b9a7ed6..939bfcc9cbb3e0 100644 --- a/programs/bpf/rust/realloc_invoke/Cargo.toml +++ b/programs/bpf/rust/realloc_invoke/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-realloc-invoke" -version = "1.14.18" +version = "1.14.19" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,8 +14,8 @@ default = ["program"] program = [] [dependencies] -solana-bpf-rust-realloc = { path = "../realloc", version = "=1.14.18", default-features = false } -solana-program = { path = "../../../../sdk/program", version = "=1.14.18" } +solana-bpf-rust-realloc = { path = "../realloc", version = "=1.14.19", default-features = false } +solana-program = { path = "../../../../sdk/program", version = "=1.14.19" } [lib] crate-type = ["lib", "cdylib"] diff --git a/programs/bpf/rust/ro_account_modify/Cargo.toml b/programs/bpf/rust/ro_account_modify/Cargo.toml index e35eafc9734112..7a26ed13c54009 100644 --- a/programs/bpf/rust/ro_account_modify/Cargo.toml +++ b/programs/bpf/rust/ro_account_modify/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-ro-account_modify" -version = "1.14.18" +version = "1.14.19" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-ro-modify" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.18" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.19" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/ro_modify/Cargo.toml b/programs/bpf/rust/ro_modify/Cargo.toml index c498ed9539880c..47aeca115bc124 100644 --- a/programs/bpf/rust/ro_modify/Cargo.toml +++ b/programs/bpf/rust/ro_modify/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-ro-modify" -version = "1.14.18" +version = "1.14.19" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-ro-modify" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.18" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.19" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/sanity/Cargo.toml b/programs/bpf/rust/sanity/Cargo.toml index 3b1a16d299f7e5..b5cdab1862a09e 100644 --- a/programs/bpf/rust/sanity/Cargo.toml +++ b/programs/bpf/rust/sanity/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-sanity" -version = "1.14.18" +version = "1.14.19" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,12 +13,12 @@ edition = "2021" test-bpf = [] [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.18" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.19" } [dev-dependencies] -solana-program-runtime = { path = "../../../../program-runtime", version = "=1.14.18" } -solana-program-test = { path = "../../../../program-test", version = "=1.14.18" } -solana-sdk = { path = "../../../../sdk", version = "=1.14.18" } +solana-program-runtime = { path = "../../../../program-runtime", version = "=1.14.19" } +solana-program-test = { path = "../../../../program-test", version = "=1.14.19" } +solana-sdk = { path = "../../../../sdk", version = "=1.14.19" } [lib] crate-type = ["cdylib", "lib"] diff --git a/programs/bpf/rust/secp256k1_recover/Cargo.toml b/programs/bpf/rust/secp256k1_recover/Cargo.toml index fccf8856c9dc6a..881168eae67702 100644 --- a/programs/bpf/rust/secp256k1_recover/Cargo.toml +++ b/programs/bpf/rust/secp256k1_recover/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-secp256k1-recover" -version = "1.14.18" +version = "1.14.19" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -11,7 +11,7 @@ edition = "2021" [dependencies] libsecp256k1 = { version = "0.7.0", default-features = false } -solana-program = { path = "../../../../sdk/program", version = "=1.14.18" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.19" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/sha/Cargo.toml b/programs/bpf/rust/sha/Cargo.toml index 539d3d5dd715f5..f97724ad6d8a38 100644 --- a/programs/bpf/rust/sha/Cargo.toml +++ b/programs/bpf/rust/sha/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-sha" -version = "1.14.18" +version = "1.14.19" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -11,7 +11,7 @@ edition = "2021" [dependencies] blake3 = "1.0.0" -solana-program = { path = "../../../../sdk/program", version = "=1.14.18" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.19" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/sibling_inner_instruction/Cargo.toml b/programs/bpf/rust/sibling_inner_instruction/Cargo.toml index d94a5c4285bbf5..e716b7ec92d3c7 100644 --- a/programs/bpf/rust/sibling_inner_instruction/Cargo.toml +++ b/programs/bpf/rust/sibling_inner_instruction/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-sibling_inner-instructions" -version = "1.14.18" +version = "1.14.19" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-log-data" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.18" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.19" } [features] default = ["program"] diff --git a/programs/bpf/rust/sibling_instruction/Cargo.toml b/programs/bpf/rust/sibling_instruction/Cargo.toml index 837c521accd7aa..c1f5f91ba2064f 100644 --- a/programs/bpf/rust/sibling_instruction/Cargo.toml +++ b/programs/bpf/rust/sibling_instruction/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-sibling-instructions" -version = "1.14.18" +version = "1.14.19" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-log-data" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.18" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.19" } [features] default = ["program"] diff --git a/programs/bpf/rust/simulation/Cargo.toml b/programs/bpf/rust/simulation/Cargo.toml index c429a7ac917de4..3f342b15219d16 100644 --- a/programs/bpf/rust/simulation/Cargo.toml +++ b/programs/bpf/rust/simulation/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-simulation" -version = "1.14.18" +version = "1.14.19" description = "Solana BPF Program Simulation Differences" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,13 +13,13 @@ edition = "2021" test-bpf = [] [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.18" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.19" } [dev-dependencies] -solana-logger = { path = "../../../../logger", version = "=1.14.18" } -solana-program-test = { path = "../../../../program-test", version = "=1.14.18" } -solana-sdk = { path = "../../../../sdk", version = "=1.14.18" } -solana-validator = { path = "../../../../validator", version = "=1.14.18" } +solana-logger = { path = "../../../../logger", version = "=1.14.19" } +solana-program-test = { path = "../../../../program-test", version = "=1.14.19" } +solana-sdk = { path = "../../../../sdk", version = "=1.14.19" } +solana-validator = { path = "../../../../validator", version = "=1.14.19" } [lib] crate-type = ["cdylib", "lib"] diff --git a/programs/bpf/rust/spoof1/Cargo.toml b/programs/bpf/rust/spoof1/Cargo.toml index cb35190cfd590f..6759f1ab5f620a 100644 --- a/programs/bpf/rust/spoof1/Cargo.toml +++ b/programs/bpf/rust/spoof1/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-spoof1" -version = "1.14.18" +version = "1.14.19" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-spoof1" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.18" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.19" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/spoof1_system/Cargo.toml b/programs/bpf/rust/spoof1_system/Cargo.toml index 125851d3448118..816c6fc35d1053 100644 --- a/programs/bpf/rust/spoof1_system/Cargo.toml +++ b/programs/bpf/rust/spoof1_system/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-spoof1-system" -version = "1.14.18" +version = "1.14.19" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-spoof1-system" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.18" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.19" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/sysvar/Cargo.toml b/programs/bpf/rust/sysvar/Cargo.toml index 9aab4661a800a9..b6632431477746 100644 --- a/programs/bpf/rust/sysvar/Cargo.toml +++ b/programs/bpf/rust/sysvar/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-sysvar" -version = "1.14.18" +version = "1.14.19" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,12 +10,12 @@ documentation = "https://docs.rs/solana-bpf-rust-sysvar" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.18" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.19" } [dev-dependencies] -solana-program-runtime = { path = "../../../../program-runtime", version = "=1.14.18" } -solana-program-test = { path = "../../../../program-test", version = "=1.14.18" } -solana-sdk = { path = "../../../../sdk", version = "=1.14.18" } +solana-program-runtime = { path = "../../../../program-runtime", version = "=1.14.19" } +solana-program-test = { path = "../../../../program-test", version = "=1.14.19" } +solana-sdk = { path = "../../../../sdk", version = "=1.14.19" } [lib] crate-type = ["cdylib", "lib"] diff --git a/programs/bpf/rust/upgradeable/Cargo.toml b/programs/bpf/rust/upgradeable/Cargo.toml index 3fe012d0494552..ce1d1597eac885 100644 --- a/programs/bpf/rust/upgradeable/Cargo.toml +++ b/programs/bpf/rust/upgradeable/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-upgradeable" -version = "1.14.18" +version = "1.14.19" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-upgradeable" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.18" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.19" } [lib] name = "solana_bpf_rust_upgradeable" diff --git a/programs/bpf/rust/upgraded/Cargo.toml b/programs/bpf/rust/upgraded/Cargo.toml index c38fcbf1d1ea8a..d8c0a169092ec5 100644 --- a/programs/bpf/rust/upgraded/Cargo.toml +++ b/programs/bpf/rust/upgraded/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-upgraded" -version = "1.14.18" +version = "1.14.19" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-upgraded" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.18" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.19" } [lib] name = "solana_bpf_rust_upgraded" diff --git a/programs/bpf_loader/Cargo.toml b/programs/bpf_loader/Cargo.toml index 109c9704dbb780..b30daba109ab48 100644 --- a/programs/bpf_loader/Cargo.toml +++ b/programs/bpf_loader/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-loader-program" -version = "1.14.18" +version = "1.14.19" description = "Solana BPF loader" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,17 +14,17 @@ bincode = "1.3.3" byteorder = "1.4.3" libsecp256k1 = "0.6.0" log = "0.4.17" -solana-measure = { path = "../../measure", version = "=1.14.18" } -solana-metrics = { path = "../../metrics", version = "=1.14.18" } -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.18" } -solana-sdk = { path = "../../sdk", version = "=1.14.18" } -solana-zk-token-sdk = { path = "../../zk-token-sdk", version = "=1.14.18" } +solana-measure = { path = "../../measure", version = "=1.14.19" } +solana-metrics = { path = "../../metrics", version = "=1.14.19" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.19" } +solana-sdk = { path = "../../sdk", version = "=1.14.19" } +solana-zk-token-sdk = { path = "../../zk-token-sdk", version = "=1.14.19" } solana_rbpf = "=0.2.31" thiserror = "1.0" [dev-dependencies] rand = "0.7.3" -solana-runtime = { path = "../../runtime", version = "=1.14.18" } +solana-runtime = { path = "../../runtime", version = "=1.14.19" } [lib] crate-type = ["lib"] diff --git a/programs/bpf_loader/gen-syscall-list/Cargo.toml b/programs/bpf_loader/gen-syscall-list/Cargo.toml index 84743dbcd5c217..4996d6b678b8aa 100644 --- a/programs/bpf_loader/gen-syscall-list/Cargo.toml +++ b/programs/bpf_loader/gen-syscall-list/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "gen-syscall-list" -version = "1.14.18" +version = "1.14.19" edition = "2021" license = "Apache-2.0" publish = false diff --git a/programs/compute-budget/Cargo.toml b/programs/compute-budget/Cargo.toml index cbfd7380cd9d69..40b8b59ad00843 100644 --- a/programs/compute-budget/Cargo.toml +++ b/programs/compute-budget/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "solana-compute-budget-program" description = "Solana Compute Budget program" -version = "1.14.18" +version = "1.14.19" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-compute-budget-program" repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ license = "Apache-2.0" edition = "2021" [dependencies] -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.18" } -solana-sdk = { path = "../../sdk", version = "=1.14.18" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.19" } +solana-sdk = { path = "../../sdk", version = "=1.14.19" } [lib] crate-type = ["lib"] diff --git a/programs/config/Cargo.toml b/programs/config/Cargo.toml index 0be1dd0d2f536e..afc99869f7bae6 100644 --- a/programs/config/Cargo.toml +++ b/programs/config/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-config-program" -version = "1.14.18" +version = "1.14.19" description = "Solana Config program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,11 +14,11 @@ bincode = "1.3.3" chrono = { version = "0.4.11", features = ["serde"] } serde = "1.0.138" serde_derive = "1.0.103" -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.18" } -solana-sdk = { path = "../../sdk", version = "=1.14.18" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.19" } +solana-sdk = { path = "../../sdk", version = "=1.14.19" } [dev-dependencies] -solana-logger = { path = "../../logger", version = "=1.14.18" } +solana-logger = { path = "../../logger", version = "=1.14.19" } [lib] crate-type = ["lib"] diff --git a/programs/ed25519-tests/Cargo.toml b/programs/ed25519-tests/Cargo.toml index decefce709b16f..4eabbd2873829a 100644 --- a/programs/ed25519-tests/Cargo.toml +++ b/programs/ed25519-tests/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-ed25519-program-tests" -version = "1.14.18" +version = "1.14.19" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" @@ -12,8 +12,8 @@ publish = false assert_matches = "1.5.0" ed25519-dalek = "=1.0.1" rand = "0.7.0" -solana-program-test = { path = "../../program-test", version = "=1.14.18" } -solana-sdk = { path = "../../sdk", version = "=1.14.18" } +solana-program-test = { path = "../../program-test", version = "=1.14.19" } +solana-sdk = { path = "../../sdk", version = "=1.14.19" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/stake/Cargo.toml b/programs/stake/Cargo.toml index 6b3cc45e8d1abd..d19b742e58324d 100644 --- a/programs/stake/Cargo.toml +++ b/programs/stake/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-stake-program" -version = "1.14.18" +version = "1.14.19" description = "Solana Stake program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -16,19 +16,19 @@ num-derive = "0.3" num-traits = "0.2" serde = "1.0.138" serde_derive = "1.0.103" -solana-config-program = { path = "../config", version = "=1.14.18" } -solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.18" } -solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.18" } -solana-metrics = { path = "../../metrics", version = "=1.14.18" } -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.18" } -solana-sdk = { path = "../../sdk", version = "=1.14.18" } -solana-vote-program = { path = "../vote", version = "=1.14.18" } +solana-config-program = { path = "../config", version = "=1.14.19" } +solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.19" } +solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.19" } +solana-metrics = { path = "../../metrics", version = "=1.14.19" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.19" } +solana-sdk = { path = "../../sdk", version = "=1.14.19" } +solana-vote-program = { path = "../vote", version = "=1.14.19" } thiserror = "1.0" [dev-dependencies] assert_matches = "1.5.0" proptest = "1.0" -solana-logger = { path = "../../logger", version = "=1.14.18" } +solana-logger = { path = "../../logger", version = "=1.14.19" } test-case = "2.1.0" [build-dependencies] diff --git a/programs/vote/Cargo.toml b/programs/vote/Cargo.toml index cda75d7244634a..bd7af098b34096 100644 --- a/programs/vote/Cargo.toml +++ b/programs/vote/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-vote-program" -version = "1.14.18" +version = "1.14.19" description = "Solana Vote program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -16,17 +16,17 @@ num-derive = "0.3" num-traits = "0.2" serde = "1.0.138" serde_derive = "1.0.103" -solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.18" } -solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.18" } -solana-metrics = { path = "../../metrics", version = "=1.14.18" } -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.18" } -solana-sdk = { path = "../../sdk", version = "=1.14.18" } +solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.19" } +solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.19" } +solana-metrics = { path = "../../metrics", version = "=1.14.19" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.19" } +solana-sdk = { path = "../../sdk", version = "=1.14.19" } thiserror = "1.0" [dev-dependencies] itertools = "0.10.3" rand = "0.7.0" -solana-logger = { path = "../../logger", version = "=1.14.18" } +solana-logger = { path = "../../logger", version = "=1.14.19" } test-case = "2.1.0" [build-dependencies] diff --git a/programs/zk-token-proof-tests/Cargo.toml b/programs/zk-token-proof-tests/Cargo.toml index b1dfced7f01d65..1c4d0bf16a02c4 100644 --- a/programs/zk-token-proof-tests/Cargo.toml +++ b/programs/zk-token-proof-tests/Cargo.toml @@ -2,14 +2,14 @@ name = "solana-zk-token-proof-program-tests" authors = ["Solana Labs Maintainers "] repository = "https://github.com/solana-labs/solana" -version = "1.14.18" +version = "1.14.19" license = "Apache-2.0" edition = "2021" publish = false [dev-dependencies] bytemuck = { version = "1.11.0", features = ["derive"] } -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.18" } -solana-program-test = { path = "../../program-test", version = "=1.14.18" } -solana-sdk = { path = "../../sdk", version = "=1.14.18" } -solana-zk-token-sdk = { path = "../../zk-token-sdk", version = "=1.14.18" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.19" } +solana-program-test = { path = "../../program-test", version = "=1.14.19" } +solana-sdk = { path = "../../sdk", version = "=1.14.19" } +solana-zk-token-sdk = { path = "../../zk-token-sdk", version = "=1.14.19" } diff --git a/programs/zk-token-proof/Cargo.toml b/programs/zk-token-proof/Cargo.toml index 2bff937e92e331..e7240fe3de7e07 100644 --- a/programs/zk-token-proof/Cargo.toml +++ b/programs/zk-token-proof/Cargo.toml @@ -3,7 +3,7 @@ name = "solana-zk-token-proof-program" description = "Solana Zk Token Proof Program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" -version = "1.14.18" +version = "1.14.19" license = "Apache-2.0" edition = "2021" @@ -12,6 +12,6 @@ bytemuck = { version = "1.11.0", features = ["derive"] } getrandom = { version = "0.1", features = ["dummy"] } num-derive = "0.3" num-traits = "0.2" -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.18" } -solana-sdk = { path = "../../sdk", version = "=1.14.18" } -solana-zk-token-sdk = { path = "../../zk-token-sdk", version = "=1.14.18" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.19" } +solana-sdk = { path = "../../sdk", version = "=1.14.19" } +solana-zk-token-sdk = { path = "../../zk-token-sdk", version = "=1.14.19" } diff --git a/rayon-threadlimit/Cargo.toml b/rayon-threadlimit/Cargo.toml index 603df81b63a14a..77ece1ff949f2e 100644 --- a/rayon-threadlimit/Cargo.toml +++ b/rayon-threadlimit/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-rayon-threadlimit" -version = "1.14.18" +version = "1.14.19" description = "solana-rayon-threadlimit" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-rayon-threadlimit" diff --git a/rbpf-cli/Cargo.toml b/rbpf-cli/Cargo.toml index e3257a169a0ab6..466e16294fc265 100644 --- a/rbpf-cli/Cargo.toml +++ b/rbpf-cli/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "rbpf-cli" -version = "1.14.18" +version = "1.14.19" description = "CLI to test and analyze eBPF programs" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/rbpf" @@ -13,8 +13,8 @@ publish = false clap = { version = "3.1.5", features = ["cargo"] } serde = "1.0.138" serde_json = "1.0.81" -solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.18" } -solana-logger = { path = "../logger", version = "=1.14.18" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.18" } -solana-sdk = { path = "../sdk", version = "=1.14.18" } +solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.19" } +solana-logger = { path = "../logger", version = "=1.14.19" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.19" } +solana-sdk = { path = "../sdk", version = "=1.14.19" } solana_rbpf = "=0.2.31" diff --git a/remote-wallet/Cargo.toml b/remote-wallet/Cargo.toml index aaa7060cef2035..b9a6a49f45e270 100644 --- a/remote-wallet/Cargo.toml +++ b/remote-wallet/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-remote-wallet" description = "Blockchain, Rebuilt for Scale" -version = "1.14.18" +version = "1.14.19" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -19,7 +19,7 @@ num-traits = { version = "0.2" } parking_lot = "0.12" qstring = "0.7.2" semver = "1.0" -solana-sdk = { path = "../sdk", version = "=1.14.18" } +solana-sdk = { path = "../sdk", version = "=1.14.19" } thiserror = "1.0" uriparse = "0.6.4" diff --git a/rpc-test/Cargo.toml b/rpc-test/Cargo.toml index 7323c09dfa8201..b335b3c6fe2f14 100644 --- a/rpc-test/Cargo.toml +++ b/rpc-test/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-rpc-test" -version = "1.14.18" +version = "1.14.19" description = "Solana RPC Test" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -19,17 +19,17 @@ log = "0.4.17" reqwest = { version = "0.11.11", default-features = false, features = ["blocking", "brotli", "deflate", "gzip", "rustls-tls", "json"] } serde = "1.0.138" serde_json = "1.0.81" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.18" } -solana-client = { path = "../client", version = "=1.14.18" } -solana-rpc = { path = "../rpc", version = "=1.14.18" } -solana-sdk = { path = "../sdk", version = "=1.14.18" } -solana-streamer = { path = "../streamer", version = "=1.14.18" } -solana-test-validator = { path = "../test-validator", version = "=1.14.18" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.18" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.19" } +solana-client = { path = "../client", version = "=1.14.19" } +solana-rpc = { path = "../rpc", version = "=1.14.19" } +solana-sdk = { path = "../sdk", version = "=1.14.19" } +solana-streamer = { path = "../streamer", version = "=1.14.19" } +solana-test-validator = { path = "../test-validator", version = "=1.14.19" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.19" } tokio = { version = "~1.14.1", features = ["full"] } [dev-dependencies] -solana-logger = { path = "../logger", version = "=1.14.18" } +solana-logger = { path = "../logger", version = "=1.14.19" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/rpc/Cargo.toml b/rpc/Cargo.toml index 3b11317909c090..9ee9a25370eea4 100644 --- a/rpc/Cargo.toml +++ b/rpc/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-rpc" -version = "1.14.18" +version = "1.14.19" description = "Solana RPC" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -29,26 +29,26 @@ serde = "1.0.138" serde_derive = "1.0.103" serde_json = "1.0.81" soketto = "0.7" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.18" } -solana-client = { path = "../client", version = "=1.14.18" } -solana-entry = { path = "../entry", version = "=1.14.18" } -solana-faucet = { path = "../faucet", version = "=1.14.18" } -solana-gossip = { path = "../gossip", version = "=1.14.18" } -solana-ledger = { path = "../ledger", version = "=1.14.18" } -solana-measure = { path = "../measure", version = "=1.14.18" } -solana-metrics = { path = "../metrics", version = "=1.14.18" } -solana-perf = { path = "../perf", version = "=1.14.18" } -solana-poh = { path = "../poh", version = "=1.14.18" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.18" } -solana-runtime = { path = "../runtime", version = "=1.14.18" } -solana-sdk = { path = "../sdk", version = "=1.14.18" } -solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.18" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.18" } -solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.18" } -solana-streamer = { path = "../streamer", version = "=1.14.18" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.18" } -solana-version = { path = "../version", version = "=1.14.18" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.18" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.19" } +solana-client = { path = "../client", version = "=1.14.19" } +solana-entry = { path = "../entry", version = "=1.14.19" } +solana-faucet = { path = "../faucet", version = "=1.14.19" } +solana-gossip = { path = "../gossip", version = "=1.14.19" } +solana-ledger = { path = "../ledger", version = "=1.14.19" } +solana-measure = { path = "../measure", version = "=1.14.19" } +solana-metrics = { path = "../metrics", version = "=1.14.19" } +solana-perf = { path = "../perf", version = "=1.14.19" } +solana-poh = { path = "../poh", version = "=1.14.19" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.19" } +solana-runtime = { path = "../runtime", version = "=1.14.19" } +solana-sdk = { path = "../sdk", version = "=1.14.19" } +solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.19" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.19" } +solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.19" } +solana-streamer = { path = "../streamer", version = "=1.14.19" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.19" } +solana-version = { path = "../version", version = "=1.14.19" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.19" } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } spl-token-2022 = { version = "=0.6.1", features = ["no-entrypoint"] } stream-cancel = "0.8.1" @@ -58,9 +58,9 @@ tokio-util = { version = "0.6", features = ["codec", "compat"] } [dev-dependencies] serial_test = "0.8.0" -solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.18" } -solana-net-utils = { path = "../net-utils", version = "=1.14.18" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.18" } +solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.19" } +solana-net-utils = { path = "../net-utils", version = "=1.14.19" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.19" } symlink = "0.1.0" [lib] diff --git a/runtime/Cargo.toml b/runtime/Cargo.toml index 6d8712eb08ccb6..2c3de97f6d0991 100644 --- a/runtime/Cargo.toml +++ b/runtime/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-runtime" -version = "1.14.18" +version = "1.14.19" description = "Solana runtime" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -40,21 +40,21 @@ rayon = "1.5.3" regex = "1.5.6" serde = { version = "1.0.138", features = ["rc"] } serde_derive = "1.0.103" -solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.18" } -solana-bucket-map = { path = "../bucket_map", version = "=1.14.18" } -solana-compute-budget-program = { path = "../programs/compute-budget", version = "=1.14.18" } -solana-config-program = { path = "../programs/config", version = "=1.14.18" } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.18" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.18" } -solana-measure = { path = "../measure", version = "=1.14.18" } -solana-metrics = { path = "../metrics", version = "=1.14.18" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.18" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.18" } -solana-sdk = { path = "../sdk", version = "=1.14.18" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.18" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.18" } -solana-zk-token-proof-program = { path = "../programs/zk-token-proof", version = "=1.14.18" } -solana-zk-token-sdk = { path = "../zk-token-sdk", version = "=1.14.18" } +solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.19" } +solana-bucket-map = { path = "../bucket_map", version = "=1.14.19" } +solana-compute-budget-program = { path = "../programs/compute-budget", version = "=1.14.19" } +solana-config-program = { path = "../programs/config", version = "=1.14.19" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.19" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.19" } +solana-measure = { path = "../measure", version = "=1.14.19" } +solana-metrics = { path = "../metrics", version = "=1.14.19" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.19" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.19" } +solana-sdk = { path = "../sdk", version = "=1.14.19" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.19" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.19" } +solana-zk-token-proof-program = { path = "../programs/zk-token-proof", version = "=1.14.19" } +solana-zk-token-sdk = { path = "../zk-token-sdk", version = "=1.14.19" } strum = { version = "0.24", features = ["derive"] } strum_macros = "0.24" symlink = "0.1.0" @@ -72,7 +72,7 @@ assert_matches = "1.5.0" ed25519-dalek = "=1.0.1" libsecp256k1 = "0.6.0" rand_chacha = "0.2.2" -solana-logger = { path = "../logger", version = "=1.14.18" } +solana-logger = { path = "../logger", version = "=1.14.19" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/runtime/store-tool/Cargo.toml b/runtime/store-tool/Cargo.toml index c19ccc900deff1..f13af966627719 100644 --- a/runtime/store-tool/Cargo.toml +++ b/runtime/store-tool/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-store-tool" description = "Tool to inspect append vecs" -version = "1.14.18" +version = "1.14.19" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -12,9 +12,9 @@ publish = false [dependencies] clap = "2.33.1" log = { version = "0.4.17" } -solana-logger = { path = "../../logger", version = "=1.14.18" } -solana-runtime = { path = "..", version = "=1.14.18" } -solana-version = { path = "../../version", version = "=1.14.18" } +solana-logger = { path = "../../logger", version = "=1.14.19" } +solana-runtime = { path = "..", version = "=1.14.19" } +solana-version = { path = "../../version", version = "=1.14.19" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/sdk/Cargo.toml b/sdk/Cargo.toml index dfae0623ffdedf..d7b3015afae697 100644 --- a/sdk/Cargo.toml +++ b/sdk/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-sdk" -version = "1.14.18" +version = "1.14.19" description = "Solana SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -71,11 +71,11 @@ serde_derive = "1.0.103" serde_json = { version = "1.0.81", optional = true } sha2 = "0.10.2" sha3 = { version = "0.10.1", optional = true } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.18" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.18" } -solana-logger = { path = "../logger", version = "=1.14.18", optional = true } -solana-program = { path = "program", version = "=1.14.18" } -solana-sdk-macro = { path = "macro", version = "=1.14.18" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.19" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.19" } +solana-logger = { path = "../logger", version = "=1.14.19", optional = true } +solana-program = { path = "program", version = "=1.14.19" } +solana-sdk-macro = { path = "macro", version = "=1.14.19" } thiserror = "1.0" uriparse = "0.6.4" wasm-bindgen = "0.2" diff --git a/sdk/cargo-build-bpf/Cargo.toml b/sdk/cargo-build-bpf/Cargo.toml index 4ce199bf1a52c5..cf1b3b45703b73 100644 --- a/sdk/cargo-build-bpf/Cargo.toml +++ b/sdk/cargo-build-bpf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-cargo-build-bpf" -version = "1.14.18" +version = "1.14.19" description = "Compile a local package and all of its dependencies using the Solana SBF SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,7 +12,7 @@ publish = false [dependencies] cargo_metadata = "0.15.0" clap = { version = "3.1.5", features = ["cargo", "env"] } -solana-sdk = { path = "..", version = "=1.14.18" } +solana-sdk = { path = "..", version = "=1.14.19" } [features] program = [] diff --git a/sdk/cargo-build-sbf/Cargo.toml b/sdk/cargo-build-sbf/Cargo.toml index 32669200a7c462..2f746dd9ecad4d 100644 --- a/sdk/cargo-build-sbf/Cargo.toml +++ b/sdk/cargo-build-sbf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-cargo-build-sbf" -version = "1.14.18" +version = "1.14.19" description = "Compile a local package and all of its dependencies using the Solana SBF SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -15,9 +15,9 @@ cargo_metadata = "0.15.0" clap = { version = "3.1.5", features = ["cargo", "env"] } log = { version = "0.4.14", features = ["std"] } regex = "1.5.6" -solana-download-utils = { path = "../../download-utils", version = "=1.14.18" } -solana-logger = { path = "../../logger", version = "=1.14.18" } -solana-sdk = { path = "..", version = "=1.14.18" } +solana-download-utils = { path = "../../download-utils", version = "=1.14.19" } +solana-logger = { path = "../../logger", version = "=1.14.19" } +solana-sdk = { path = "..", version = "=1.14.19" } tar = "0.4.38" [dev-dependencies] diff --git a/sdk/cargo-build-sbf/tests/crates/fail/Cargo.toml b/sdk/cargo-build-sbf/tests/crates/fail/Cargo.toml index fd3b8ca18b10ae..a1fa96af50622d 100644 --- a/sdk/cargo-build-sbf/tests/crates/fail/Cargo.toml +++ b/sdk/cargo-build-sbf/tests/crates/fail/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "fail" -version = "1.14.18" +version = "1.14.19" description = "Solana SBF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ edition = "2021" publish = false [dependencies] -solana-program = { path = "../../../../program", version = "=1.14.18" } +solana-program = { path = "../../../../program", version = "=1.14.19" } [lib] crate-type = ["cdylib"] diff --git a/sdk/cargo-build-sbf/tests/crates/noop/Cargo.toml b/sdk/cargo-build-sbf/tests/crates/noop/Cargo.toml index 3e1915e4399c9d..f5edb4ccd63324 100644 --- a/sdk/cargo-build-sbf/tests/crates/noop/Cargo.toml +++ b/sdk/cargo-build-sbf/tests/crates/noop/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "noop" -version = "1.14.18" +version = "1.14.19" description = "Solana SBF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ edition = "2021" publish = false [dependencies] -solana-program = { path = "../../../../program", version = "=1.14.18" } +solana-program = { path = "../../../../program", version = "=1.14.19" } [lib] crate-type = ["cdylib"] diff --git a/sdk/cargo-test-bpf/Cargo.toml b/sdk/cargo-test-bpf/Cargo.toml index fe1405219a981a..e64d5382f4888a 100644 --- a/sdk/cargo-test-bpf/Cargo.toml +++ b/sdk/cargo-test-bpf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-cargo-test-bpf" -version = "1.14.18" +version = "1.14.19" description = "Execute all unit and integration tests after building with the Solana SBF SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/sdk/cargo-test-sbf/Cargo.toml b/sdk/cargo-test-sbf/Cargo.toml index 4150c55c8a22cb..950acd2f7ccf6c 100644 --- a/sdk/cargo-test-sbf/Cargo.toml +++ b/sdk/cargo-test-sbf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-cargo-test-sbf" -version = "1.14.18" +version = "1.14.19" description = "Execute all unit and integration tests after building with the Solana SBF SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/sdk/gen-headers/Cargo.toml b/sdk/gen-headers/Cargo.toml index 5b2193511f76b2..6d3d189835fd3e 100644 --- a/sdk/gen-headers/Cargo.toml +++ b/sdk/gen-headers/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "gen-headers" -version = "1.14.18" +version = "1.14.19" edition = "2021" license = "Apache-2.0" publish = false diff --git a/sdk/macro/Cargo.toml b/sdk/macro/Cargo.toml index aaa7647e5c19a9..ca220df05d320c 100644 --- a/sdk/macro/Cargo.toml +++ b/sdk/macro/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-sdk-macro" -version = "1.14.18" +version = "1.14.19" description = "Solana SDK Macro" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/sdk/program/Cargo.toml b/sdk/program/Cargo.toml index ddaded4b5abc77..356d7b64cd7f84 100644 --- a/sdk/program/Cargo.toml +++ b/sdk/program/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-program" -version = "1.14.18" +version = "1.14.19" description = "Solana Program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -31,9 +31,9 @@ serde_derive = "1.0" serde_json = "1.0" sha2 = "0.10.0" sha3 = "0.10.0" -solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.18" } -solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.18" } -solana-sdk-macro = { path = "../macro", version = "=1.14.18" } +solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.19" } +solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.19" } +solana-sdk-macro = { path = "../macro", version = "=1.14.19" } thiserror = "1.0" [target.'cfg(not(target_os = "solana"))'.dependencies] @@ -50,7 +50,7 @@ wasm-bindgen = "0.2" zeroize = { version = "1.3", default-features = true, features = ["zeroize_derive"] } [target.'cfg(not(target_os = "solana"))'.dev-dependencies] -solana-logger = { path = "../../logger", version = "=1.14.18" } +solana-logger = { path = "../../logger", version = "=1.14.19" } [target.'cfg(target_arch = "wasm32")'.dependencies] console_error_panic_hook = "0.1.7" diff --git a/send-transaction-service/Cargo.toml b/send-transaction-service/Cargo.toml index 99d156acaf7493..065d1b086463b2 100644 --- a/send-transaction-service/Cargo.toml +++ b/send-transaction-service/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-send-transaction-service" -version = "1.14.18" +version = "1.14.19" description = "Solana send transaction service" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,14 +12,14 @@ edition = "2021" [dependencies] crossbeam-channel = "0.5" log = "0.4.17" -solana-client = { path = "../client", version = "=1.14.18" } -solana-measure = { path = "../measure", version = "=1.14.18" } -solana-metrics = { path = "../metrics", version = "=1.14.18" } -solana-runtime = { path = "../runtime", version = "=1.14.18" } -solana-sdk = { path = "../sdk", version = "=1.14.18" } +solana-client = { path = "../client", version = "=1.14.19" } +solana-measure = { path = "../measure", version = "=1.14.19" } +solana-metrics = { path = "../metrics", version = "=1.14.19" } +solana-runtime = { path = "../runtime", version = "=1.14.19" } +solana-sdk = { path = "../sdk", version = "=1.14.19" } [dev-dependencies] -solana-logger = { path = "../logger", version = "=1.14.18" } +solana-logger = { path = "../logger", version = "=1.14.19" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/stake-accounts/Cargo.toml b/stake-accounts/Cargo.toml index da215008d401da..bd5cb2b3ae45dc 100644 --- a/stake-accounts/Cargo.toml +++ b/stake-accounts/Cargo.toml @@ -3,7 +3,7 @@ name = "solana-stake-accounts" description = "Blockchain, Rebuilt for Scale" authors = ["Solana Maintainers "] edition = "2021" -version = "1.14.18" +version = "1.14.19" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -11,15 +11,15 @@ documentation = "https://docs.rs/solana-stake-accounts" [dependencies] clap = "2.33.1" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.18" } -solana-cli-config = { path = "../cli-config", version = "=1.14.18" } -solana-client = { path = "../client", version = "=1.14.18" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.18" } -solana-sdk = { path = "../sdk", version = "=1.14.18" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.18" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.19" } +solana-cli-config = { path = "../cli-config", version = "=1.14.19" } +solana-client = { path = "../client", version = "=1.14.19" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.19" } +solana-sdk = { path = "../sdk", version = "=1.14.19" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.19" } [dev-dependencies] -solana-runtime = { path = "../runtime", version = "=1.14.18" } +solana-runtime = { path = "../runtime", version = "=1.14.19" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/storage-bigtable/Cargo.toml b/storage-bigtable/Cargo.toml index 4aa4c4b5ed1621..a0a8da6ba7dcae 100644 --- a/storage-bigtable/Cargo.toml +++ b/storage-bigtable/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-storage-bigtable" -version = "1.14.18" +version = "1.14.19" description = "Solana Storage BigTable" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -27,10 +27,10 @@ prost-types = "0.11.0" serde = "1.0.138" serde_derive = "1.0.103" smpl_jwt = "0.7.1" -solana-metrics = { path = "../metrics", version = "=1.14.18" } -solana-sdk = { path = "../sdk", version = "=1.14.18" } -solana-storage-proto = { path = "../storage-proto", version = "=1.14.18" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.18" } +solana-metrics = { path = "../metrics", version = "=1.14.19" } +solana-sdk = { path = "../sdk", version = "=1.14.19" } +solana-storage-proto = { path = "../storage-proto", version = "=1.14.19" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.19" } thiserror = "1.0" tokio = "1" tonic = { version = "0.8.0", features = ["tls", "transport"] } diff --git a/storage-bigtable/build-proto/Cargo.toml b/storage-bigtable/build-proto/Cargo.toml index 4f8d0e49d1f0f2..b8ab136baa8a8e 100644 --- a/storage-bigtable/build-proto/Cargo.toml +++ b/storage-bigtable/build-proto/Cargo.toml @@ -7,7 +7,7 @@ license = "Apache-2.0" name = "proto" publish = false repository = "https://github.com/solana-labs/solana" -version = "1.14.18" +version = "1.14.19" [dependencies] tonic-build = "0.8.0" diff --git a/storage-proto/Cargo.toml b/storage-proto/Cargo.toml index 780bc8ad3670eb..ca21ddd9d0508c 100644 --- a/storage-proto/Cargo.toml +++ b/storage-proto/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-storage-proto" -version = "1.14.18" +version = "1.14.19" description = "Solana Storage Protobuf Definitions" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,9 +14,9 @@ bincode = "1.3.3" bs58 = "0.4.0" prost = "0.11.0" serde = "1.0.138" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.18" } -solana-sdk = { path = "../sdk", version = "=1.14.18" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.18" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.19" } +solana-sdk = { path = "../sdk", version = "=1.14.19" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.19" } [dev-dependencies] enum-iterator = "0.8.1" diff --git a/streamer/Cargo.toml b/streamer/Cargo.toml index 52d1ce74246455..80c5b8068bb53e 100644 --- a/streamer/Cargo.toml +++ b/streamer/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-streamer" -version = "1.14.18" +version = "1.14.19" description = "Solana Streamer" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -25,15 +25,15 @@ quinn = "0.8.3" rand = "0.7.0" rcgen = "0.9.2" rustls = { version = "0.20.6", features = ["dangerous_configuration"] } -solana-metrics = { path = "../metrics", version = "=1.14.18" } -solana-perf = { path = "../perf", version = "=1.14.18" } -solana-sdk = { path = "../sdk", version = "=1.14.18" } +solana-metrics = { path = "../metrics", version = "=1.14.19" } +solana-perf = { path = "../perf", version = "=1.14.19" } +solana-sdk = { path = "../sdk", version = "=1.14.19" } thiserror = "1.0" tokio = { version = "1", features = ["full"] } x509-parser = "0.14.0" [dev-dependencies] -solana-logger = { path = "../logger", version = "=1.14.18" } +solana-logger = { path = "../logger", version = "=1.14.19" } [lib] crate-type = ["lib"] diff --git a/sys-tuner/Cargo.toml b/sys-tuner/Cargo.toml index 6d92467e631f6c..5528f9780b7704 100644 --- a/sys-tuner/Cargo.toml +++ b/sys-tuner/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-sys-tuner" description = "The solana cluster system tuner daemon" -version = "1.14.18" +version = "1.14.19" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,8 +14,8 @@ publish = true clap = "2.33.1" libc = "0.2.126" log = "0.4.17" -solana-logger = { path = "../logger", version = "=1.14.18" } -solana-version = { path = "../version", version = "=1.14.18" } +solana-logger = { path = "../logger", version = "=1.14.19" } +solana-version = { path = "../version", version = "=1.14.19" } [target."cfg(unix)".dependencies] unix_socket2 = "0.5.4" diff --git a/test-validator/Cargo.toml b/test-validator/Cargo.toml index f61a8ae0f9a82a..5b64a874b191ee 100644 --- a/test-validator/Cargo.toml +++ b/test-validator/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "solana-test-validator" description = "Blockchain, Rebuilt for Scale" -version = "1.14.18" +version = "1.14.19" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-test-validator" readme = "../README.md" @@ -15,19 +15,19 @@ base64 = "0.13.0" log = "0.4.17" serde_derive = "1.0.103" serde_json = "1.0.81" -solana-cli-output = { path = "../cli-output", version = "=1.14.18" } -solana-client = { path = "../client", version = "=1.14.18" } -solana-core = { path = "../core", version = "=1.14.18" } -solana-gossip = { path = "../gossip", version = "=1.14.18" } -solana-ledger = { path = "../ledger", version = "=1.14.18" } -solana-logger = { path = "../logger", version = "=1.14.18" } -solana-net-utils = { path = "../net-utils", version = "=1.14.18" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.18" } -solana-program-test = { path = "../program-test", version = "=1.14.18" } -solana-rpc = { path = "../rpc", version = "=1.14.18" } -solana-runtime = { path = "../runtime", version = "=1.14.18" } -solana-sdk = { path = "../sdk", version = "=1.14.18" } -solana-streamer = { path = "../streamer", version = "=1.14.18" } +solana-cli-output = { path = "../cli-output", version = "=1.14.19" } +solana-client = { path = "../client", version = "=1.14.19" } +solana-core = { path = "../core", version = "=1.14.19" } +solana-gossip = { path = "../gossip", version = "=1.14.19" } +solana-ledger = { path = "../ledger", version = "=1.14.19" } +solana-logger = { path = "../logger", version = "=1.14.19" } +solana-net-utils = { path = "../net-utils", version = "=1.14.19" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.19" } +solana-program-test = { path = "../program-test", version = "=1.14.19" } +solana-rpc = { path = "../rpc", version = "=1.14.19" } +solana-runtime = { path = "../runtime", version = "=1.14.19" } +solana-sdk = { path = "../sdk", version = "=1.14.19" } +solana-streamer = { path = "../streamer", version = "=1.14.19" } tokio = { version = "1", features = ["full"] } [package.metadata.docs.rs] diff --git a/tokens/Cargo.toml b/tokens/Cargo.toml index cac36a76a7757d..f1a1f4e3e407a6 100644 --- a/tokens/Cargo.toml +++ b/tokens/Cargo.toml @@ -3,7 +3,7 @@ name = "solana-tokens" description = "Blockchain, Rebuilt for Scale" authors = ["Solana Maintainers "] edition = "2021" -version = "1.14.18" +version = "1.14.19" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -19,14 +19,14 @@ indexmap = "1.9.1" indicatif = "0.16.2" pickledb = { version = "0.5.1", default-features = false, features = ["yaml"] } serde = { version = "1.0", features = ["derive"] } -solana-account-decoder = { path = "../account-decoder", version = "=1.14.18" } -solana-clap-utils = { path = "../clap-utils", version = "=1.14.18" } -solana-cli-config = { path = "../cli-config", version = "=1.14.18" } -solana-client = { path = "../client", version = "=1.14.18" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.18" } -solana-sdk = { path = "../sdk", version = "=1.14.18" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.18" } -solana-version = { path = "../version", version = "=1.14.18" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.19" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.19" } +solana-cli-config = { path = "../cli-config", version = "=1.14.19" } +solana-client = { path = "../client", version = "=1.14.19" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.19" } +solana-sdk = { path = "../sdk", version = "=1.14.19" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.19" } +solana-version = { path = "../version", version = "=1.14.19" } spl-associated-token-account = { version = "=1.1.3" } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } tempfile = "3.4.0" @@ -34,6 +34,6 @@ thiserror = "1.0" [dev-dependencies] bincode = "1.3.3" -solana-logger = { path = "../logger", version = "=1.14.18" } -solana-streamer = { path = "../streamer", version = "=1.14.18" } -solana-test-validator = { path = "../test-validator", version = "=1.14.18" } +solana-logger = { path = "../logger", version = "=1.14.19" } +solana-streamer = { path = "../streamer", version = "=1.14.19" } +solana-test-validator = { path = "../test-validator", version = "=1.14.19" } diff --git a/transaction-dos/Cargo.toml b/transaction-dos/Cargo.toml index f2902324c3fcdf..46819b6a410624 100644 --- a/transaction-dos/Cargo.toml +++ b/transaction-dos/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-transaction-dos" -version = "1.14.18" +version = "1.14.19" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,23 +14,23 @@ clap = "2.33.1" log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.18" } -solana-cli = { path = "../cli", version = "=1.14.18" } -solana-client = { path = "../client", version = "=1.14.18" } -solana-core = { path = "../core", version = "=1.14.18" } -solana-faucet = { path = "../faucet", version = "=1.14.18" } -solana-gossip = { path = "../gossip", version = "=1.14.18" } -solana-logger = { path = "../logger", version = "=1.14.18" } -solana-measure = { path = "../measure", version = "=1.14.18" } -solana-net-utils = { path = "../net-utils", version = "=1.14.18" } -solana-runtime = { path = "../runtime", version = "=1.14.18" } -solana-sdk = { path = "../sdk", version = "=1.14.18" } -solana-streamer = { path = "../streamer", version = "=1.14.18" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.18" } -solana-version = { path = "../version", version = "=1.14.18" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.19" } +solana-cli = { path = "../cli", version = "=1.14.19" } +solana-client = { path = "../client", version = "=1.14.19" } +solana-core = { path = "../core", version = "=1.14.19" } +solana-faucet = { path = "../faucet", version = "=1.14.19" } +solana-gossip = { path = "../gossip", version = "=1.14.19" } +solana-logger = { path = "../logger", version = "=1.14.19" } +solana-measure = { path = "../measure", version = "=1.14.19" } +solana-net-utils = { path = "../net-utils", version = "=1.14.19" } +solana-runtime = { path = "../runtime", version = "=1.14.19" } +solana-sdk = { path = "../sdk", version = "=1.14.19" } +solana-streamer = { path = "../streamer", version = "=1.14.19" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.19" } +solana-version = { path = "../version", version = "=1.14.19" } [dev-dependencies] -solana-local-cluster = { path = "../local-cluster", version = "=1.14.18" } +solana-local-cluster = { path = "../local-cluster", version = "=1.14.19" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/transaction-status/Cargo.toml b/transaction-status/Cargo.toml index 1916ef6767c6f0..2b0b5d7c254912 100644 --- a/transaction-status/Cargo.toml +++ b/transaction-status/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-transaction-status" -version = "1.14.18" +version = "1.14.19" description = "Solana transaction status types" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -20,12 +20,12 @@ log = "0.4.17" serde = "1.0.138" serde_derive = "1.0.103" serde_json = "1.0.81" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.18" } -solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.18" } -solana-measure = { path = "../measure", version = "=1.14.18" } -solana-metrics = { path = "../metrics", version = "=1.14.18" } -solana-sdk = { path = "../sdk", version = "=1.14.18" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.18" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.19" } +solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.19" } +solana-measure = { path = "../measure", version = "=1.14.19" } +solana-metrics = { path = "../metrics", version = "=1.14.19" } +solana-sdk = { path = "../sdk", version = "=1.14.19" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.19" } spl-associated-token-account = { version = "=1.1.3", features = ["no-entrypoint"] } spl-memo = { version = "=3.0.1", features = ["no-entrypoint"] } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } diff --git a/upload-perf/Cargo.toml b/upload-perf/Cargo.toml index c1e6bb661cdd49..41d24feb39d2e3 100644 --- a/upload-perf/Cargo.toml +++ b/upload-perf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-upload-perf" -version = "1.14.18" +version = "1.14.19" description = "Metrics Upload Utility" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -11,7 +11,7 @@ publish = false [dependencies] serde_json = "1.0.81" -solana-metrics = { path = "../metrics", version = "=1.14.18" } +solana-metrics = { path = "../metrics", version = "=1.14.19" } [[bin]] name = "solana-upload-perf" diff --git a/validator/Cargo.toml b/validator/Cargo.toml index 20b76996101f4e..ac62058fcd941d 100644 --- a/validator/Cargo.toml +++ b/validator/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-validator" description = "Blockchain, Rebuilt for Scale" -version = "1.14.18" +version = "1.14.19" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -28,30 +28,30 @@ num_cpus = "1.13.1" rand = "0.7.0" serde = "1.0.138" serde_json = "1.0.81" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.18" } -solana-cli-config = { path = "../cli-config", version = "=1.14.18" } -solana-client = { path = "../client", version = "=1.14.18" } -solana-core = { path = "../core", version = "=1.14.18" } -solana-download-utils = { path = "../download-utils", version = "=1.14.18" } -solana-entry = { path = "../entry", version = "=1.14.18" } -solana-faucet = { path = "../faucet", version = "=1.14.18" } -solana-genesis-utils = { path = "../genesis-utils", version = "=1.14.18" } -solana-gossip = { path = "../gossip", version = "=1.14.18" } -solana-ledger = { path = "../ledger", version = "=1.14.18" } -solana-logger = { path = "../logger", version = "=1.14.18" } -solana-metrics = { path = "../metrics", version = "=1.14.18" } -solana-net-utils = { path = "../net-utils", version = "=1.14.18" } -solana-perf = { path = "../perf", version = "=1.14.18" } -solana-poh = { path = "../poh", version = "=1.14.18" } -solana-rpc = { path = "../rpc", version = "=1.14.18" } -solana-runtime = { path = "../runtime", version = "=1.14.18" } -solana-sdk = { path = "../sdk", version = "=1.14.18" } -solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.18" } -solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.18" } -solana-streamer = { path = "../streamer", version = "=1.14.18" } -solana-test-validator = { path = "../test-validator", version = "=1.14.18" } -solana-version = { path = "../version", version = "=1.14.18" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.18" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.19" } +solana-cli-config = { path = "../cli-config", version = "=1.14.19" } +solana-client = { path = "../client", version = "=1.14.19" } +solana-core = { path = "../core", version = "=1.14.19" } +solana-download-utils = { path = "../download-utils", version = "=1.14.19" } +solana-entry = { path = "../entry", version = "=1.14.19" } +solana-faucet = { path = "../faucet", version = "=1.14.19" } +solana-genesis-utils = { path = "../genesis-utils", version = "=1.14.19" } +solana-gossip = { path = "../gossip", version = "=1.14.19" } +solana-ledger = { path = "../ledger", version = "=1.14.19" } +solana-logger = { path = "../logger", version = "=1.14.19" } +solana-metrics = { path = "../metrics", version = "=1.14.19" } +solana-net-utils = { path = "../net-utils", version = "=1.14.19" } +solana-perf = { path = "../perf", version = "=1.14.19" } +solana-poh = { path = "../poh", version = "=1.14.19" } +solana-rpc = { path = "../rpc", version = "=1.14.19" } +solana-runtime = { path = "../runtime", version = "=1.14.19" } +solana-sdk = { path = "../sdk", version = "=1.14.19" } +solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.19" } +solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.19" } +solana-streamer = { path = "../streamer", version = "=1.14.19" } +solana-test-validator = { path = "../test-validator", version = "=1.14.19" } +solana-version = { path = "../version", version = "=1.14.19" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.19" } symlink = "0.1.0" [target.'cfg(not(target_env = "msvc"))'.dependencies] diff --git a/version/Cargo.toml b/version/Cargo.toml index 383d09f158b366..2d20485ab56188 100644 --- a/version/Cargo.toml +++ b/version/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-version" -version = "1.14.18" +version = "1.14.19" description = "Solana Version" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,9 +14,9 @@ log = "0.4.17" semver = "1.0.10" serde = "1.0.138" serde_derive = "1.0.103" -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.18" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.18" } -solana-sdk = { path = "../sdk", version = "=1.14.18" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.19" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.19" } +solana-sdk = { path = "../sdk", version = "=1.14.19" } [lib] name = "solana_version" diff --git a/watchtower/Cargo.toml b/watchtower/Cargo.toml index f657f894e86f39..c89251b6e80c6b 100644 --- a/watchtower/Cargo.toml +++ b/watchtower/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-watchtower" description = "Blockchain, Rebuilt for Scale" -version = "1.14.18" +version = "1.14.19" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -13,15 +13,15 @@ documentation = "https://docs.rs/solana-watchtower" clap = "2.33.1" humantime = "2.0.1" log = "0.4.17" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.18" } -solana-cli-config = { path = "../cli-config", version = "=1.14.18" } -solana-cli-output = { path = "../cli-output", version = "=1.14.18" } -solana-client = { path = "../client", version = "=1.14.18" } -solana-logger = { path = "../logger", version = "=1.14.18" } -solana-metrics = { path = "../metrics", version = "=1.14.18" } -solana-notifier = { path = "../notifier", version = "=1.14.18" } -solana-sdk = { path = "../sdk", version = "=1.14.18" } -solana-version = { path = "../version", version = "=1.14.18" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.19" } +solana-cli-config = { path = "../cli-config", version = "=1.14.19" } +solana-cli-output = { path = "../cli-output", version = "=1.14.19" } +solana-client = { path = "../client", version = "=1.14.19" } +solana-logger = { path = "../logger", version = "=1.14.19" } +solana-metrics = { path = "../metrics", version = "=1.14.19" } +solana-notifier = { path = "../notifier", version = "=1.14.19" } +solana-sdk = { path = "../sdk", version = "=1.14.19" } +solana-version = { path = "../version", version = "=1.14.19" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/zk-token-sdk/Cargo.toml b/zk-token-sdk/Cargo.toml index 44c849d271ee8d..fd20f5b275ecf4 100644 --- a/zk-token-sdk/Cargo.toml +++ b/zk-token-sdk/Cargo.toml @@ -3,7 +3,7 @@ name = "solana-zk-token-sdk" description = "Solana Zk Token SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" -version = "1.14.18" +version = "1.14.19" license = "Apache-2.0" edition = "2021" @@ -12,7 +12,7 @@ base64 = "0.13" bytemuck = { version = "1.11.0", features = ["derive"] } num-derive = "0.3" num-traits = "0.2" -solana-program = { path = "../sdk/program", version = "=1.14.18" } +solana-program = { path = "../sdk/program", version = "=1.14.19" } [target.'cfg(not(target_os = "solana"))'.dependencies] aes-gcm-siv = "0.10.3" @@ -29,7 +29,7 @@ rand = "0.7" serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" sha3 = "0.9" -solana-sdk = { path = "../sdk", version = "=1.14.18" } +solana-sdk = { path = "../sdk", version = "=1.14.19" } subtle = "2" thiserror = "1.0" zeroize = { version = "1.3", default-features = false, features = ["zeroize_derive"] } From 5e37c58d6b37bd147a9af6a003d72f1a4947b6cc Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Tue, 16 May 2023 17:03:12 -0500 Subject: [PATCH 423/465] v1.14: [docs] remove incorrect pubkey param from getEpochInfo (backport of #31651) (#31674) [docs] remove incorrect pubkey param from getEpochInfo (#31651) Co-authored-by: Callum McIntyre (cherry picked from commit 16381d8f652aff3cd36db57a5b0465df9b644e78) Co-authored-by: Callum McIntyre --- docs/src/api/methods/_getEpochInfo.mdx | 4 ---- 1 file changed, 4 deletions(-) diff --git a/docs/src/api/methods/_getEpochInfo.mdx b/docs/src/api/methods/_getEpochInfo.mdx index 1f2cb4939a947e..4b8cb1c23b6449 100644 --- a/docs/src/api/methods/_getEpochInfo.mdx +++ b/docs/src/api/methods/_getEpochInfo.mdx @@ -20,10 +20,6 @@ Returns information about the current epoch ### Parameters: - - Pubkey of account to query, as base-58 encoded string - - Configuration object containing the following fields: From a210e0584704009c7009c39e616d5462ab6ad229 Mon Sep 17 00:00:00 2001 From: Tyera Date: Tue, 16 May 2023 18:36:05 -0600 Subject: [PATCH 424/465] v1.14: Hardcode even newer rust version for crate publishing (#31687) * Hardcode even newer rust version for crate publishing * Thanks for that, time-core --- ci/publish-crate.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ci/publish-crate.sh b/ci/publish-crate.sh index d63015a4b93b93..668643b8b0f34d 100755 --- a/ci/publish-crate.sh +++ b/ci/publish-crate.sh @@ -2,7 +2,7 @@ set -e cd "$(dirname "$0")/.." source ci/semver_bash/semver.sh -export RUST_STABLE_VERSION=1.63.0 +export RUST_STABLE_VERSION=1.65.0 source ci/rust-version.sh stable cargo="$(readlink -f ./cargo)" From e54bd6da48373288052e0e2e8edf5da489091ef6 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Tue, 16 May 2023 20:13:24 -0500 Subject: [PATCH 425/465] v1.14: [docs] add error response for getBlockTime RPC call (backport of #31653) (#31681) [docs] add error response for getBlockTime RPC call (#31653) Co-authored-by: Callum McIntyre (cherry picked from commit 6c1cdb57c61cfa1d64e7e8cc25f09aef1397603a) Co-authored-by: Callum McIntyre --- docs/src/api/methods/_getBlockTime.mdx | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/docs/src/api/methods/_getBlockTime.mdx b/docs/src/api/methods/_getBlockTime.mdx index 50ef1de6fb4699..7fc991b5b8690e 100644 --- a/docs/src/api/methods/_getBlockTime.mdx +++ b/docs/src/api/methods/_getBlockTime.mdx @@ -34,7 +34,6 @@ in a set of recent blocks recorded on the ledger. ### Result: - `` - estimated production time, as Unix timestamp (seconds since the Unix epoch) -- `` - timestamp is not available for this block @@ -54,6 +53,8 @@ curl http://localhost:8899 -X POST -H "Content-Type: application/json" -d ' ### Response: +When a block time is available: + ```json { "jsonrpc": "2.0", @@ -62,6 +63,19 @@ curl http://localhost:8899 -X POST -H "Content-Type: application/json" -d ' } ``` +When a block time is not available: + +```json +{ + "jsonrpc": "2.0", + "error": { + "code": -32004, + "message": "Block not available for slot 150" + }, + "id": 1 +} +``` + From f1b52d25015de2a1692e52d667080fddfc3fafed Mon Sep 17 00:00:00 2001 From: Trent Nelson Date: Wed, 17 May 2023 06:50:33 -0600 Subject: [PATCH 426/465] Add connection error metrics - v1.14 (bp #31049) (#31064) Add connection error metrics (#31049) Co-authored-by: sakridge --- streamer/src/nonblocking/quic.rs | 266 ++++++++++++++++++------------- streamer/src/quic.rs | 41 +++++ 2 files changed, 197 insertions(+), 110 deletions(-) diff --git a/streamer/src/nonblocking/quic.rs b/streamer/src/nonblocking/quic.rs index cda8fae678a63b..823840eba2c632 100644 --- a/streamer/src/nonblocking/quic.rs +++ b/streamer/src/nonblocking/quic.rs @@ -198,140 +198,148 @@ async fn setup_connection( max_unstaked_connections: usize, stats: Arc, ) { + let from = connecting.remote_address(); if let Ok(connecting_result) = timeout( Duration::from_millis(QUIC_CONNECTION_HANDSHAKE_TIMEOUT_MS), connecting, ) .await { - if let Ok(new_connection) = connecting_result { - stats.total_new_connections.fetch_add(1, Ordering::Relaxed); - let NewConnection { - connection, - uni_streams, - .. - } = new_connection; - - let remote_addr = connection.remote_address(); - let mut remote_pubkey = None; - - let table_and_stake = { - let (some_pubkey, stake) = get_connection_stake(&connection, staked_nodes.clone()) - .map_or((None, 0), |(pubkey, stake)| (Some(pubkey), stake)); - if stake > 0 { - remote_pubkey = some_pubkey; - let mut connection_table_l = staked_connection_table.lock().unwrap(); - if connection_table_l.total_size >= max_staked_connections { - let num_pruned = connection_table_l.prune_random(stake); - if num_pruned == 0 { - if max_unstaked_connections > 0 { - // If we couldn't prune a connection in the staked connection table, let's - // put this connection in the unstaked connection table. If needed, prune a - // connection from the unstaked connection table. - connection_table_l = unstaked_connection_table.lock().unwrap(); - prune_unstaked_connection_table( - &mut connection_table_l, - max_unstaked_connections, - stats.clone(), - ); - Some((connection_table_l, stake)) + match connecting_result { + Ok(new_connection) => { + stats.total_new_connections.fetch_add(1, Ordering::Relaxed); + let NewConnection { + connection, + uni_streams, + .. + } = new_connection; + + let remote_addr = connection.remote_address(); + let mut remote_pubkey = None; + + let table_and_stake = { + let (some_pubkey, stake) = + get_connection_stake(&connection, staked_nodes.clone()) + .map_or((None, 0), |(pubkey, stake)| (Some(pubkey), stake)); + if stake > 0 { + remote_pubkey = some_pubkey; + let mut connection_table_l = staked_connection_table.lock().unwrap(); + if connection_table_l.total_size >= max_staked_connections { + let num_pruned = connection_table_l.prune_random(stake); + if num_pruned == 0 { + if max_unstaked_connections > 0 { + // If we couldn't prune a connection in the staked connection table, let's + // put this connection in the unstaked connection table. If needed, prune a + // connection from the unstaked connection table. + connection_table_l = unstaked_connection_table.lock().unwrap(); + prune_unstaked_connection_table( + &mut connection_table_l, + max_unstaked_connections, + stats.clone(), + ); + Some((connection_table_l, stake)) + } else { + stats + .connection_add_failed_on_pruning + .fetch_add(1, Ordering::Relaxed); + None + } } else { - stats - .connection_add_failed_on_pruning - .fetch_add(1, Ordering::Relaxed); - None + stats.num_evictions.fetch_add(num_pruned, Ordering::Relaxed); + Some((connection_table_l, stake)) } } else { - stats.num_evictions.fetch_add(num_pruned, Ordering::Relaxed); Some((connection_table_l, stake)) } + } else if max_unstaked_connections > 0 { + let mut connection_table_l = unstaked_connection_table.lock().unwrap(); + prune_unstaked_connection_table( + &mut connection_table_l, + max_unstaked_connections, + stats.clone(), + ); + Some((connection_table_l, 0)) } else { - Some((connection_table_l, stake)) + None } - } else if max_unstaked_connections > 0 { - let mut connection_table_l = unstaked_connection_table.lock().unwrap(); - prune_unstaked_connection_table( - &mut connection_table_l, - max_unstaked_connections, - stats.clone(), - ); - Some((connection_table_l, 0)) - } else { - None - } - }; + }; - if let Some((mut connection_table_l, stake)) = table_and_stake { - let table_type = connection_table_l.peer_type; - let total_stake = staked_nodes.read().map_or(0, |stakes| stakes.total_stake); - drop(staked_nodes); + if let Some((mut connection_table_l, stake)) = table_and_stake { + let table_type = connection_table_l.peer_type; + let total_stake = staked_nodes.read().map_or(0, |stakes| stakes.total_stake); + drop(staked_nodes); - let max_uni_streams = - VarInt::from_u64( - compute_max_allowed_uni_streams(table_type, stake, total_stake) as u64, - ); + let max_uni_streams = VarInt::from_u64(compute_max_allowed_uni_streams( + table_type, + stake, + total_stake, + ) as u64); - debug!( - "Peer type: {:?}, stake {}, total stake {}, max streams {}", - table_type, - stake, - total_stake, - max_uni_streams.unwrap().into_inner() - ); - - if let Ok(max_uni_streams) = max_uni_streams { - connection.set_max_concurrent_uni_streams(max_uni_streams); - if let Some((last_update, stream_exit)) = connection_table_l.try_add_connection( - ConnectionTableKey::new(remote_addr.ip(), remote_pubkey), - remote_addr.port(), - Some(connection), + debug!( + "Peer type: {:?}, stake {}, total stake {}, max streams {}", + table_type, stake, - timing::timestamp(), - max_connections_per_peer, - ) { - drop(connection_table_l); - let stats = stats.clone(); - let connection_table = match table_type { - ConnectionPeerType::Unstaked => { - stats - .connection_added_from_unstaked_peer - .fetch_add(1, Ordering::Relaxed); - unstaked_connection_table.clone() - } - ConnectionPeerType::Staked => { - stats - .connection_added_from_staked_peer - .fetch_add(1, Ordering::Relaxed); - staked_connection_table.clone() - } - }; - tokio::spawn(handle_connection( - uni_streams, - packet_sender, - remote_addr, - remote_pubkey, - last_update, - connection_table, - stream_exit, - stats, - stake, - )); + total_stake, + max_uni_streams.unwrap().into_inner() + ); + + if let Ok(max_uni_streams) = max_uni_streams { + connection.set_max_concurrent_uni_streams(max_uni_streams); + if let Some((last_update, stream_exit)) = connection_table_l + .try_add_connection( + ConnectionTableKey::new(remote_addr.ip(), remote_pubkey), + remote_addr.port(), + Some(connection), + stake, + timing::timestamp(), + max_connections_per_peer, + ) + { + drop(connection_table_l); + let stats = stats.clone(); + let connection_table = match table_type { + ConnectionPeerType::Unstaked => { + stats + .connection_added_from_unstaked_peer + .fetch_add(1, Ordering::Relaxed); + unstaked_connection_table.clone() + } + ConnectionPeerType::Staked => { + stats + .connection_added_from_staked_peer + .fetch_add(1, Ordering::Relaxed); + staked_connection_table.clone() + } + }; + tokio::spawn(handle_connection( + uni_streams, + packet_sender, + remote_addr, + remote_pubkey, + last_update, + connection_table, + stream_exit, + stats, + stake, + )); + } else { + stats.connection_add_failed.fetch_add(1, Ordering::Relaxed); + } } else { - stats.connection_add_failed.fetch_add(1, Ordering::Relaxed); + stats + .connection_add_failed_invalid_stream_count + .fetch_add(1, Ordering::Relaxed); } } else { + connection.close(0u32.into(), &[0u8]); stats - .connection_add_failed_invalid_stream_count + .connection_add_failed_unstaked_node .fetch_add(1, Ordering::Relaxed); } - } else { - connection.close(0u32.into(), &[0u8]); - stats - .connection_add_failed_unstaked_node - .fetch_add(1, Ordering::Relaxed); } - } else { - stats.connection_setup_error.fetch_add(1, Ordering::Relaxed); + Err(e) => { + handle_connection_error(e, &stats, from); + } } } else { stats @@ -340,6 +348,44 @@ async fn setup_connection( } } +fn handle_connection_error(e: quinn::ConnectionError, stats: &StreamStats, from: SocketAddr) { + debug!("error: {:?} from: {:?}", e, from); + stats.connection_setup_error.fetch_add(1, Ordering::Relaxed); + match e { + quinn::ConnectionError::TimedOut => { + stats + .connection_setup_error_timed_out + .fetch_add(1, Ordering::Relaxed); + } + quinn::ConnectionError::ConnectionClosed(_) => { + stats + .connection_setup_error_closed + .fetch_add(1, Ordering::Relaxed); + } + quinn::ConnectionError::TransportError(_) => { + stats + .connection_setup_error_transport + .fetch_add(1, Ordering::Relaxed); + } + quinn::ConnectionError::ApplicationClosed(_) => { + stats + .connection_setup_error_app_closed + .fetch_add(1, Ordering::Relaxed); + } + quinn::ConnectionError::Reset => { + stats + .connection_setup_error_reset + .fetch_add(1, Ordering::Relaxed); + } + quinn::ConnectionError::LocallyClosed => { + stats + .connection_setup_error_locally_closed + .fetch_add(1, Ordering::Relaxed); + } + _ => {} + } +} + async fn handle_connection( mut uni_streams: IncomingUniStreams, packet_sender: Sender, diff --git a/streamer/src/quic.rs b/streamer/src/quic.rs index a172fc60053508..922b417ef2d3d6 100644 --- a/streamer/src/quic.rs +++ b/streamer/src/quic.rs @@ -137,6 +137,12 @@ pub struct StreamStats { pub(crate) connection_add_failed_on_pruning: AtomicUsize, pub(crate) connection_setup_timeout: AtomicUsize, pub(crate) connection_setup_error: AtomicUsize, + pub(crate) connection_setup_error_closed: AtomicUsize, + pub(crate) connection_setup_error_timed_out: AtomicUsize, + pub(crate) connection_setup_error_transport: AtomicUsize, + pub(crate) connection_setup_error_app_closed: AtomicUsize, + pub(crate) connection_setup_error_reset: AtomicUsize, + pub(crate) connection_setup_error_locally_closed: AtomicUsize, pub(crate) connection_removed: AtomicUsize, pub(crate) connection_remove_failed: AtomicUsize, } @@ -225,6 +231,41 @@ impl StreamStats { self.connection_setup_error.swap(0, Ordering::Relaxed), i64 ), + ( + "connection_setup_error_timed_out", + self.connection_setup_error_timed_out + .swap(0, Ordering::Relaxed), + i64 + ), + ( + "connection_setup_error_closed", + self.connection_setup_error_closed + .swap(0, Ordering::Relaxed), + i64 + ), + ( + "connection_setup_error_transport", + self.connection_setup_error_transport + .swap(0, Ordering::Relaxed), + i64 + ), + ( + "connection_setup_error_app_closed", + self.connection_setup_error_app_closed + .swap(0, Ordering::Relaxed), + i64 + ), + ( + "connection_setup_error_reset", + self.connection_setup_error_reset.swap(0, Ordering::Relaxed), + i64 + ), + ( + "connection_setup_error_locally_closed", + self.connection_setup_error_locally_closed + .swap(0, Ordering::Relaxed), + i64 + ), ( "invalid_chunk", self.total_invalid_chunks.swap(0, Ordering::Relaxed), From f89978dacb172950aa606521c7c78ad958e7b4ad Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Wed, 17 May 2023 18:02:11 -0600 Subject: [PATCH 427/465] v1.14: Eradicate zombie RPC threads (backport of #31688) (#31689) * Eradicate zombie RPC threads (#31688) * Ensure jsonrpc server has closed when joining rpc_service thread * Use same exit bool as other services * Remove redundant registered exit line (cherry picked from commit 2cdb43ff1b4a3664ced0a1bca99fa85f4eb90d43) # Conflicts: # core/src/validator.rs * Fix conflict * Remove redundant clone --------- Co-authored-by: Tyera --- core/src/validator.rs | 1 + rpc/src/rpc_service.rs | 9 +++++---- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/core/src/validator.rs b/core/src/validator.rs index d749233c4ddc1a..59d61613da06b6 100644 --- a/core/src/validator.rs +++ b/core/src/validator.rs @@ -842,6 +842,7 @@ impl Validator { genesis_config.hash(), ledger_path, config.validator_exit.clone(), + exit.clone(), config.known_validators.clone(), rpc_override_health_check.clone(), startup_verification_complete, diff --git a/rpc/src/rpc_service.rs b/rpc/src/rpc_service.rs index e297467cd4e7fe..abf30c83feeae2 100644 --- a/rpc/src/rpc_service.rs +++ b/rpc/src/rpc_service.rs @@ -349,6 +349,7 @@ impl JsonRpcService { genesis_hash: Hash, ledger_path: &Path, validator_exit: Arc>, + exit: Arc, known_validators: Option>, override_health_check: Arc, startup_verification_complete: Arc, @@ -470,7 +471,6 @@ impl JsonRpcService { prioritization_fee_cache, ); - let exit = Arc::new(AtomicBool::new(false)); let leader_info = poh_recorder.map(|recorder| ClusterTpuInfo::new(cluster_info.clone(), recorder)); let _send_transaction_service = Arc::new(SendTransactionService::new_with_config( @@ -480,7 +480,7 @@ impl JsonRpcService { receiver, &connection_cache, send_transaction_service_config, - exit.clone(), + exit, )); #[cfg(test)] @@ -552,7 +552,6 @@ impl JsonRpcService { .unwrap() .register_exit(Box::new(move || { close_handle_.close(); - exit.store(true, Ordering::Relaxed); })); Self { thread_hdl, @@ -568,7 +567,8 @@ impl JsonRpcService { } } - pub fn join(self) -> thread::Result<()> { + pub fn join(mut self) -> thread::Result<()> { + self.exit(); self.thread_hdl.join() } } @@ -641,6 +641,7 @@ mod tests { Hash::default(), &PathBuf::from("farf"), validator_exit, + exit, None, Arc::new(AtomicBool::new(false)), Arc::new(AtomicBool::new(true)), From db9fdf5811ecd8a84ea446591854974d386681ef Mon Sep 17 00:00:00 2001 From: Yihau Chen Date: Thu, 18 May 2023 21:28:07 +0800 Subject: [PATCH 428/465] ci: increase timeout for downstream project tests (#31707) ci: increase downstream project timeout --- ci/buildkite-pipeline.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ci/buildkite-pipeline.sh b/ci/buildkite-pipeline.sh index 5fcd64718ad244..71bdb01b609e0f 100755 --- a/ci/buildkite-pipeline.sh +++ b/ci/buildkite-pipeline.sh @@ -239,7 +239,7 @@ EOF cat >> "$output_file" <<"EOF" - command: "scripts/build-downstream-projects.sh" name: "downstream-projects" - timeout_in_minutes: 30 + timeout_in_minutes: 40 agents: queue: "solana" EOF From 4e51391b78202c9b3ea88e14eb6491297b80c155 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Fri, 19 May 2023 20:22:22 +0900 Subject: [PATCH 429/465] v1.14: [zk-token-sdk] rename and restructure `CloseAccount` and `WithdrawWithheld` proof instructions (backport of #31608) (#31704) * [zk-token-sdk] rename and restructure `CloseAccount` and `WithdrawWithheld` proof instructions (#31608) * rename and restruct ProofInstruction::VerifyCloseAccount to ProofInstruction::VerifyZeroBalance * rename `PubkeySigmaProof` to `PubkeyValidityProof` * refactor equality proofs into separate modules * rename and restructure ProofInstruction::VerifyWithdrawWithheld to ProofInstruction::VerifyCiphertextCiphertextEquality * add and reorg documentation for the proof instructions * generalize ciphertext-ciphertext equality proof data constructor * Update zk-token-sdk/src/instruction/ctxt_ctxt_equality.rs Co-authored-by: Jon Cinque --------- Co-authored-by: Jon Cinque (cherry picked from commit f9b0691eb41ecc071c126fccc18d3c9d9fe082be) # Conflicts: # programs/zk-token-proof/src/lib.rs # zk-token-sdk/src/instruction/close_account.rs # zk-token-sdk/src/instruction/withdraw_withheld.rs * resolve conflicts --------- Co-authored-by: samkim-crypto --- .../tests/process_transaction.rs | 62 +-- programs/zk-token-proof/src/lib.rs | 13 +- .../src/instruction/ctxt_ctxt_equality.rs | 228 +++++++++++ zk-token-sdk/src/instruction/mod.rs | 14 +- .../src/instruction/pubkey_validity.rs | 59 +-- zk-token-sdk/src/instruction/transfer.rs | 18 +- .../src/instruction/transfer_with_fee.rs | 16 +- zk-token-sdk/src/instruction/withdraw.rs | 29 +- zk-token-sdk/src/instruction/zero_balance.rs | 127 +++++++ ...y_proof.rs => ctxt_comm_equality_proof.rs} | 356 ++---------------- .../sigma_proofs/ctxt_ctxt_equality_proof.rs | 342 +++++++++++++++++ zk-token-sdk/src/sigma_proofs/mod.rs | 3 +- zk-token-sdk/src/sigma_proofs/pubkey_proof.rs | 14 +- .../src/sigma_proofs/zero_balance_proof.rs | 4 - zk-token-sdk/src/zk_token_elgamal/convert.rs | 29 +- zk-token-sdk/src/zk_token_elgamal/pod.rs | 18 +- .../src/zk_token_proof_instruction.rs | 28 +- 17 files changed, 869 insertions(+), 491 deletions(-) create mode 100644 zk-token-sdk/src/instruction/ctxt_ctxt_equality.rs create mode 100644 zk-token-sdk/src/instruction/zero_balance.rs rename zk-token-sdk/src/sigma_proofs/{equality_proof.rs => ctxt_comm_equality_proof.rs} (53%) create mode 100644 zk-token-sdk/src/sigma_proofs/ctxt_ctxt_equality_proof.rs diff --git a/programs/zk-token-proof-tests/tests/process_transaction.rs b/programs/zk-token-proof-tests/tests/process_transaction.rs index 555295e4e9a6ed..ca94774b788386 100644 --- a/programs/zk-token-proof-tests/tests/process_transaction.rs +++ b/programs/zk-token-proof-tests/tests/process_transaction.rs @@ -9,69 +9,79 @@ use { transaction::{Transaction, TransactionError}, }, solana_zk_token_sdk::{ - encryption::elgamal::ElGamalKeypair, instruction::*, zk_token_proof_instruction::*, - zk_token_proof_program, zk_token_proof_state::ProofContextState, + encryption::{elgamal::ElGamalKeypair, pedersen::PedersenOpening}, + instruction::*, + zk_token_proof_instruction::*, + zk_token_proof_program, + zk_token_proof_state::ProofContextState, }, std::mem::size_of, }; const VERIFY_INSTRUCTION_TYPES: [ProofInstruction; 6] = [ - ProofInstruction::VerifyCloseAccount, + ProofInstruction::VerifyZeroBalance, ProofInstruction::VerifyWithdraw, - ProofInstruction::VerifyWithdrawWithheldTokens, + ProofInstruction::VerifyCiphertextCiphertextEquality, ProofInstruction::VerifyTransfer, ProofInstruction::VerifyTransferWithFee, ProofInstruction::VerifyPubkeyValidity, ]; #[tokio::test] -async fn test_close_account() { +async fn test_zero_balance() { let elgamal_keypair = ElGamalKeypair::new_rand(); let zero_ciphertext = elgamal_keypair.public.encrypt(0_u64); - let success_proof_data = CloseAccountData::new(&elgamal_keypair, &zero_ciphertext).unwrap(); + let success_proof_data = ZeroBalanceProofData::new(&elgamal_keypair, &zero_ciphertext).unwrap(); let incorrect_keypair = ElGamalKeypair { public: ElGamalKeypair::new_rand().public, secret: ElGamalKeypair::new_rand().secret, }; - let fail_proof_data = CloseAccountData::new(&incorrect_keypair, &zero_ciphertext).unwrap(); + let fail_proof_data = ZeroBalanceProofData::new(&incorrect_keypair, &zero_ciphertext).unwrap(); test_verify_proof_without_context( - ProofInstruction::VerifyCloseAccount, + ProofInstruction::VerifyZeroBalance, &success_proof_data, &fail_proof_data, ) .await; test_verify_proof_with_context( - ProofInstruction::VerifyCloseAccount, - size_of::>(), + ProofInstruction::VerifyZeroBalance, + size_of::>(), &success_proof_data, &fail_proof_data, ) .await; test_close_context_state( - ProofInstruction::VerifyCloseAccount, - size_of::>(), + ProofInstruction::VerifyZeroBalance, + size_of::>(), &success_proof_data, ) .await; } #[tokio::test] -async fn test_withdraw_withheld_tokens() { - let elgamal_keypair = ElGamalKeypair::new_rand(); +async fn test_ciphertext_ciphertext_equality() { + let source_keypair = ElGamalKeypair::new_rand(); let destination_keypair = ElGamalKeypair::new_rand(); let amount: u64 = 0; - let withdraw_withheld_authority_ciphertext = elgamal_keypair.public.encrypt(amount); + let source_ciphertext = source_keypair.public.encrypt(amount); - let success_proof_data = WithdrawWithheldTokensData::new( - &elgamal_keypair, + let destination_opening = PedersenOpening::new_rand(); + let destination_ciphertext = destination_keypair + .public + .encrypt_with(amount, &destination_opening); + + let success_proof_data = CiphertextCiphertextEqualityProofData::new( + &source_keypair, &destination_keypair.public, - &withdraw_withheld_authority_ciphertext, + &source_ciphertext, + &destination_ciphertext, + &destination_opening, amount, ) .unwrap(); @@ -80,32 +90,34 @@ async fn test_withdraw_withheld_tokens() { public: ElGamalKeypair::new_rand().public, secret: ElGamalKeypair::new_rand().secret, }; - let fail_proof_data = WithdrawWithheldTokensData::new( + let fail_proof_data = CiphertextCiphertextEqualityProofData::new( &incorrect_keypair, &destination_keypair.public, - &withdraw_withheld_authority_ciphertext, + &source_ciphertext, + &destination_ciphertext, + &destination_opening, amount, ) .unwrap(); test_verify_proof_without_context( - ProofInstruction::VerifyWithdrawWithheldTokens, + ProofInstruction::VerifyCiphertextCiphertextEquality, &success_proof_data, &fail_proof_data, ) .await; test_verify_proof_with_context( - ProofInstruction::VerifyWithdrawWithheldTokens, - size_of::>(), + ProofInstruction::VerifyCiphertextCiphertextEquality, + size_of::>(), &success_proof_data, &fail_proof_data, ) .await; test_close_context_state( - ProofInstruction::VerifyWithdrawWithheldTokens, - size_of::>(), + ProofInstruction::VerifyCiphertextCiphertextEquality, + size_of::>(), &success_proof_data, ) .await; diff --git a/programs/zk-token-proof/src/lib.rs b/programs/zk-token-proof/src/lib.rs index a49f361a089994..bd1e4f46c1339a 100644 --- a/programs/zk-token-proof/src/lib.rs +++ b/programs/zk-token-proof/src/lib.rs @@ -140,19 +140,20 @@ pub fn process_instruction( ic_msg!(invoke_context, "CloseContextState"); process_close_proof_context(invoke_context) } - ProofInstruction::VerifyCloseAccount => { + ProofInstruction::VerifyZeroBalance => { ic_msg!(invoke_context, "VerifyCloseAccount"); - process_verify_proof::(invoke_context) + process_verify_proof::(invoke_context) } ProofInstruction::VerifyWithdraw => { ic_msg!(invoke_context, "VerifyWithdraw"); process_verify_proof::(invoke_context) } - ProofInstruction::VerifyWithdrawWithheldTokens => { + ProofInstruction::VerifyCiphertextCiphertextEquality => { ic_msg!(invoke_context, "VerifyWithdrawWithheldTokens"); - process_verify_proof::( - invoke_context, - ) + process_verify_proof::< + CiphertextCiphertextEqualityProofData, + CiphertextCiphertextEqualityProofContext, + >(invoke_context) } ProofInstruction::VerifyTransfer => { ic_msg!(invoke_context, "VerifyTransfer"); diff --git a/zk-token-sdk/src/instruction/ctxt_ctxt_equality.rs b/zk-token-sdk/src/instruction/ctxt_ctxt_equality.rs new file mode 100644 index 00000000000000..0451c05c68cea3 --- /dev/null +++ b/zk-token-sdk/src/instruction/ctxt_ctxt_equality.rs @@ -0,0 +1,228 @@ +//! The ciphertext-ciphertext equality proof instruction. +//! +//! A ciphertext-ciphertext equality proof is defined with respect to two twisted ElGamal +//! ciphertexts. The proof certifies that the two ciphertexts encrypt the same message. To generate +//! the proof, a prover must provide the decryption key for the first ciphertext and the randomness +//! used to generate the second ciphertext. +//! +//! The first ciphertext associated with the proof is referred to as the "source" ciphertext. The +//! second ciphertext associated with the proof is referred to as the "destination" ciphertext. + +#[cfg(not(target_os = "solana"))] +use { + crate::{ + encryption::{ + elgamal::{ElGamalCiphertext, ElGamalKeypair, ElGamalPubkey}, + pedersen::PedersenOpening, + }, + errors::ProofError, + sigma_proofs::ctxt_ctxt_equality_proof::CiphertextCiphertextEqualityProof, + transcript::TranscriptProtocol, + }, + merlin::Transcript, + std::convert::TryInto, +}; +use { + crate::{ + instruction::{ProofType, ZkProofData}, + zk_token_elgamal::pod, + }, + bytemuck::{Pod, Zeroable}, +}; + +/// The instruction data that is needed for the +/// `ProofInstruction::VerifyCiphertextCiphertextEquality` instruction. +/// +/// It includes the cryptographic proof as well as the context data information needed to verify +/// the proof. +#[derive(Clone, Copy, Pod, Zeroable)] +#[repr(C)] +pub struct CiphertextCiphertextEqualityProofData { + pub context: CiphertextCiphertextEqualityProofContext, + + pub proof: pod::CiphertextCiphertextEqualityProof, +} + +/// The context data needed to verify a ciphertext-ciphertext equality proof. +#[derive(Clone, Copy, Pod, Zeroable)] +#[repr(C)] +pub struct CiphertextCiphertextEqualityProofContext { + pub source_pubkey: pod::ElGamalPubkey, // 32 bytes + + pub destination_pubkey: pod::ElGamalPubkey, // 32 bytes + + pub source_ciphertext: pod::ElGamalCiphertext, // 64 bytes + + pub destination_ciphertext: pod::ElGamalCiphertext, // 64 bytes +} + +#[cfg(not(target_os = "solana"))] +impl CiphertextCiphertextEqualityProofData { + pub fn new( + source_keypair: &ElGamalKeypair, + destination_pubkey: &ElGamalPubkey, + source_ciphertext: &ElGamalCiphertext, + destination_ciphertext: &ElGamalCiphertext, + destination_opening: &PedersenOpening, + amount: u64, + ) -> Result { + let pod_source_pubkey = pod::ElGamalPubkey(source_keypair.public.to_bytes()); + let pod_destination_pubkey = pod::ElGamalPubkey(destination_pubkey.to_bytes()); + let pod_source_ciphertext = pod::ElGamalCiphertext(source_ciphertext.to_bytes()); + let pod_destination_ciphertext = pod::ElGamalCiphertext(destination_ciphertext.to_bytes()); + + let context = CiphertextCiphertextEqualityProofContext { + source_pubkey: pod_source_pubkey, + destination_pubkey: pod_destination_pubkey, + source_ciphertext: pod_source_ciphertext, + destination_ciphertext: pod_destination_ciphertext, + }; + + let mut transcript = CiphertextCiphertextEqualityProof::transcript_new( + &pod_source_pubkey, + &pod_destination_pubkey, + &pod_source_ciphertext, + &pod_destination_ciphertext, + ); + + let proof = CiphertextCiphertextEqualityProof::new( + source_keypair, + destination_pubkey, + source_ciphertext, + destination_opening, + amount, + &mut transcript, + ) + .into(); + + Ok(Self { context, proof }) + } +} + +impl ZkProofData + for CiphertextCiphertextEqualityProofData +{ + const PROOF_TYPE: ProofType = ProofType::CiphertextCiphertextEquality; + + fn context_data(&self) -> &CiphertextCiphertextEqualityProofContext { + &self.context + } + + #[cfg(not(target_os = "solana"))] + fn verify_proof(&self) -> Result<(), ProofError> { + let mut transcript = CiphertextCiphertextEqualityProof::transcript_new( + &self.context.source_pubkey, + &self.context.destination_pubkey, + &self.context.source_ciphertext, + &self.context.destination_ciphertext, + ); + + let source_pubkey = self.context.source_pubkey.try_into()?; + let destination_pubkey = self.context.destination_pubkey.try_into()?; + let source_ciphertext = self.context.source_ciphertext.try_into()?; + let destination_ciphertext = self.context.destination_ciphertext.try_into()?; + let proof: CiphertextCiphertextEqualityProof = self.proof.try_into()?; + + proof + .verify( + &source_pubkey, + &destination_pubkey, + &source_ciphertext, + &destination_ciphertext, + &mut transcript, + ) + .map_err(|e| e.into()) + } +} + +#[allow(non_snake_case)] +#[cfg(not(target_os = "solana"))] +impl CiphertextCiphertextEqualityProof { + fn transcript_new( + source_pubkey: &pod::ElGamalPubkey, + destination_pubkey: &pod::ElGamalPubkey, + source_ciphertext: &pod::ElGamalCiphertext, + destination_ciphertext: &pod::ElGamalCiphertext, + ) -> Transcript { + let mut transcript = Transcript::new(b"CiphertextCiphertextEqualityProof"); + + transcript.append_pubkey(b"pubkey-source", source_pubkey); + transcript.append_pubkey(b"pubkey-dest", destination_pubkey); + + transcript.append_ciphertext(b"ciphertext-source", source_ciphertext); + transcript.append_ciphertext(b"ciphertext-dest", destination_ciphertext); + + transcript + } +} + +#[cfg(test)] +mod test { + use super::*; + + #[test] + fn test_ciphertext_ciphertext_instruction_correctness() { + let source_keypair = ElGamalKeypair::new_rand(); + let destination_keypair = ElGamalKeypair::new_rand(); + + let amount: u64 = 0; + let source_ciphertext = source_keypair.public.encrypt(amount); + + let destination_opening = PedersenOpening::new_rand(); + let destination_ciphertext = destination_keypair + .public + .encrypt_with(amount, &destination_opening); + + let proof_data = CiphertextCiphertextEqualityProofData::new( + &source_keypair, + &destination_keypair.public, + &source_ciphertext, + &destination_ciphertext, + &destination_opening, + amount, + ) + .unwrap(); + + assert!(proof_data.verify_proof().is_ok()); + + let amount: u64 = 55; + let source_ciphertext = source_keypair.public.encrypt(amount); + + let destination_opening = PedersenOpening::new_rand(); + let destination_ciphertext = destination_keypair + .public + .encrypt_with(amount, &destination_opening); + + let proof_data = CiphertextCiphertextEqualityProofData::new( + &source_keypair, + &destination_keypair.public, + &source_ciphertext, + &destination_ciphertext, + &destination_opening, + amount, + ) + .unwrap(); + + assert!(proof_data.verify_proof().is_ok()); + + let amount = u64::max_value(); + let source_ciphertext = source_keypair.public.encrypt(amount); + + let destination_opening = PedersenOpening::new_rand(); + let destination_ciphertext = destination_keypair + .public + .encrypt_with(amount, &destination_opening); + + let proof_data = CiphertextCiphertextEqualityProofData::new( + &source_keypair, + &destination_keypair.public, + &source_ciphertext, + &destination_ciphertext, + &destination_opening, + amount, + ) + .unwrap(); + + assert!(proof_data.verify_proof().is_ok()); + } +} diff --git a/zk-token-sdk/src/instruction/mod.rs b/zk-token-sdk/src/instruction/mod.rs index f257ee961a1a4e..f480551f000136 100644 --- a/zk-token-sdk/src/instruction/mod.rs +++ b/zk-token-sdk/src/instruction/mod.rs @@ -1,9 +1,9 @@ -pub mod close_account; +pub mod ctxt_ctxt_equality; pub mod pubkey_validity; pub mod transfer; pub mod transfer_with_fee; pub mod withdraw; -pub mod withdraw_withheld; +pub mod zero_balance; use num_derive::{FromPrimitive, ToPrimitive}; #[cfg(not(target_os = "solana"))] @@ -19,12 +19,14 @@ use { }; pub use { bytemuck::Pod, - close_account::{CloseAccountData, CloseAccountProofContext}, + ctxt_ctxt_equality::{ + CiphertextCiphertextEqualityProofContext, CiphertextCiphertextEqualityProofData, + }, pubkey_validity::{PubkeyValidityData, PubkeyValidityProofContext}, transfer::{TransferData, TransferProofContext}, transfer_with_fee::{FeeParameters, TransferWithFeeData, TransferWithFeeProofContext}, withdraw::{WithdrawData, WithdrawProofContext}, - withdraw_withheld::{WithdrawWithheldTokensData, WithdrawWithheldTokensProofContext}, + zero_balance::{ZeroBalanceProofContext, ZeroBalanceProofData}, }; #[derive(Clone, Copy, Debug, FromPrimitive, ToPrimitive, PartialEq, Eq)] @@ -32,9 +34,9 @@ pub use { pub enum ProofType { /// Empty proof type used to distinguish if a proof context account is initialized Uninitialized, - CloseAccount, + ZeroBalance, Withdraw, - WithdrawWithheldTokens, + CiphertextCiphertextEquality, Transfer, TransferWithFee, PubkeyValidity, diff --git a/zk-token-sdk/src/instruction/pubkey_validity.rs b/zk-token-sdk/src/instruction/pubkey_validity.rs index 83f0461a1733f3..adaca3e7ccc794 100644 --- a/zk-token-sdk/src/instruction/pubkey_validity.rs +++ b/zk-token-sdk/src/instruction/pubkey_validity.rs @@ -1,10 +1,15 @@ +//! The public-key validity proof instruction. +//! +//! A public-key validity proof system is defined with respect to an ElGamal public key. The proof +//! certifies that a given public key is a valid ElGamal public key (i.e. the prover knows a +//! corresponding secret key). To generate the proof, a prover must provide the secret key for the +//! public key. + #[cfg(not(target_os = "solana"))] use { crate::{ - encryption::elgamal::{ElGamalKeypair, ElGamalPubkey}, - errors::ProofError, - sigma_proofs::pubkey_proof::PubkeySigmaProof, - transcript::TranscriptProtocol, + encryption::elgamal::ElGamalKeypair, errors::ProofError, + sigma_proofs::pubkey_proof::PubkeyValidityProof, transcript::TranscriptProtocol, }, merlin::Transcript, std::convert::TryInto, @@ -17,22 +22,22 @@ use { bytemuck::{Pod, Zeroable}, }; -/// This struct includes the cryptographic proof *and* the account data information needed to -/// verify the proof +/// The instruction data that is needed for the `ProofInstruction::VerifyPubkeyValidity` +/// instruction. /// -/// - The pre-instruction should call PubkeyValidityData::verify_proof(&self) -/// - The actual program should check that the public key in this struct is consistent with what is -/// stored in the confidential token account +/// It includes the cryptographic proof as well as the context data information needed to verify +/// the proof. #[derive(Clone, Copy, Pod, Zeroable)] #[repr(C)] pub struct PubkeyValidityData { /// The context data for the public key validity proof - pub context: PubkeyValidityProofContext, + pub context: PubkeyValidityProofContext, // 32 bytes /// Proof that the public key is well-formed - pub proof: PubkeyValidityProof, // 64 bytes + pub proof: pod::PubkeyValidityProof, // 64 bytes } +/// The context data needed to verify a pubkey validity proof. #[derive(Clone, Copy, Pod, Zeroable)] #[repr(C)] pub struct PubkeyValidityProofContext { @@ -48,7 +53,7 @@ impl PubkeyValidityData { let context = PubkeyValidityProofContext { pubkey: pod_pubkey }; let mut transcript = PubkeyValidityProof::transcript_new(&pod_pubkey); - let proof = PubkeyValidityProof::new(keypair, &mut transcript); + let proof = PubkeyValidityProof::new(keypair, &mut transcript).into(); Ok(PubkeyValidityData { context, proof }) } @@ -65,18 +70,11 @@ impl ZkProofData for PubkeyValidityData { fn verify_proof(&self) -> Result<(), ProofError> { let mut transcript = PubkeyValidityProof::transcript_new(&self.context.pubkey); let pubkey = self.context.pubkey.try_into()?; - self.proof.verify(&pubkey, &mut transcript) + let proof: PubkeyValidityProof = self.proof.try_into()?; + proof.verify(&pubkey, &mut transcript).map_err(|e| e.into()) } } -#[derive(Clone, Copy, Pod, Zeroable)] -#[repr(C)] -#[allow(non_snake_case)] -pub struct PubkeyValidityProof { - /// Associated public-key sigma proof - pub proof: pod::PubkeySigmaProof, -} - #[allow(non_snake_case)] #[cfg(not(target_os = "solana"))] impl PubkeyValidityProof { @@ -85,23 +83,6 @@ impl PubkeyValidityProof { transcript.append_pubkey(b"pubkey", pubkey); transcript } - - pub fn new(keypair: &ElGamalKeypair, transcript: &mut Transcript) -> Self { - let proof = PubkeySigmaProof::new(keypair, transcript); - Self { - proof: proof.into(), - } - } - - pub fn verify( - &self, - pubkey: &ElGamalPubkey, - transcript: &mut Transcript, - ) -> Result<(), ProofError> { - let proof: PubkeySigmaProof = self.proof.try_into()?; - proof.verify(pubkey, transcript)?; - Ok(()) - } } #[cfg(test)] @@ -109,7 +90,7 @@ mod test { use super::*; #[test] - fn test_pubkey_validity_correctness() { + fn test_pubkey_validity_instruction_correctness() { let keypair = ElGamalKeypair::new_rand(); let pubkey_validity_data = PubkeyValidityData::new(&keypair).unwrap(); diff --git a/zk-token-sdk/src/instruction/transfer.rs b/zk-token-sdk/src/instruction/transfer.rs index 4ee12ee5fb21fe..e897b376ac9300 100644 --- a/zk-token-sdk/src/instruction/transfer.rs +++ b/zk-token-sdk/src/instruction/transfer.rs @@ -11,7 +11,8 @@ use { instruction::{combine_lo_hi_ciphertexts, split_u64, Role}, range_proof::RangeProof, sigma_proofs::{ - equality_proof::CtxtCommEqualityProof, validity_proof::AggregatedValidityProof, + ctxt_comm_equality_proof::CiphertextCommitmentEqualityProof, + validity_proof::AggregatedValidityProof, }, transcript::TranscriptProtocol, }, @@ -42,6 +43,10 @@ lazy_static::lazy_static! { TRANSFER_AMOUNT_LO_NEGATED_BITS) - 1); } +/// The instruction data that is needed for the `ProofInstruction::VerifyTransfer` instruction. +/// +/// It includes the cryptographic proof as well as the context data information needed to verify +/// the proof. #[derive(Clone, Copy, Pod, Zeroable)] #[repr(C)] pub struct TransferData { @@ -52,6 +57,7 @@ pub struct TransferData { pub proof: TransferProof, } +/// The context data needed to verify a transfer proof. #[derive(Clone, Copy, Pod, Zeroable)] #[repr(C)] pub struct TransferProofContext { @@ -252,7 +258,7 @@ pub struct TransferProof { pub new_source_commitment: pod::PedersenCommitment, /// Associated equality proof - pub equality_proof: pod::CtxtCommEqualityProof, + pub equality_proof: pod::CiphertextCommitmentEqualityProof, /// Associated ciphertext validity proof pub validity_proof: pod::AggregatedValidityProof, @@ -307,11 +313,11 @@ impl TransferProof { transcript.append_commitment(b"commitment-new-source", &pod_new_source_commitment); // generate equality_proof - let equality_proof = CtxtCommEqualityProof::new( + let equality_proof = CiphertextCommitmentEqualityProof::new( source_keypair, new_source_ciphertext, - source_new_balance, &source_opening, + source_new_balance, transcript, ); @@ -381,13 +387,11 @@ impl TransferProof { transcript.append_commitment(b"commitment-new-source", &self.new_source_commitment); let commitment: PedersenCommitment = self.new_source_commitment.try_into()?; - let equality_proof: CtxtCommEqualityProof = self.equality_proof.try_into()?; + let equality_proof: CiphertextCommitmentEqualityProof = self.equality_proof.try_into()?; let aggregated_validity_proof: AggregatedValidityProof = self.validity_proof.try_into()?; let range_proof: RangeProof = self.range_proof.try_into()?; // verify equality proof - // - // TODO: we can also consider verifying equality and range proof in a batch equality_proof.verify( &transfer_pubkeys.source_pubkey, ciphertext_new_spendable, diff --git a/zk-token-sdk/src/instruction/transfer_with_fee.rs b/zk-token-sdk/src/instruction/transfer_with_fee.rs index a6bdee776b54aa..45a9496d639aa8 100644 --- a/zk-token-sdk/src/instruction/transfer_with_fee.rs +++ b/zk-token-sdk/src/instruction/transfer_with_fee.rs @@ -14,7 +14,7 @@ use { }, range_proof::RangeProof, sigma_proofs::{ - equality_proof::CtxtCommEqualityProof, fee_proof::FeeSigmaProof, + ctxt_comm_equality_proof::CiphertextCommitmentEqualityProof, fee_proof::FeeSigmaProof, validity_proof::AggregatedValidityProof, }, transcript::TranscriptProtocol, @@ -60,7 +60,10 @@ lazy_static::lazy_static! { pub static ref COMMITMENT_MAX_FEE_BASIS_POINTS: PedersenCommitment = Pedersen::encode(MAX_FEE_BASIS_POINTS); } -// #[derive(Clone, Copy, Pod, Zeroable)] +/// The instruction data that is needed for the `ProofInstruction::TransferWithFee` instruction. +/// +/// It includes the cryptographic proof as well as the cotnext data information needed to verify +/// the proof. #[derive(Clone, Copy, Pod, Zeroable)] #[repr(C)] pub struct TransferWithFeeData { @@ -71,6 +74,7 @@ pub struct TransferWithFeeData { pub proof: TransferWithFeeProof, } +/// The context data needed to verify a transfer-with-fee proof. #[derive(Clone, Copy, Pod, Zeroable)] #[repr(C)] pub struct TransferWithFeeProofContext { @@ -386,7 +390,7 @@ impl ZkProofData for TransferWithFeeData { pub struct TransferWithFeeProof { pub new_source_commitment: pod::PedersenCommitment, pub claimed_commitment: pod::PedersenCommitment, - pub equality_proof: pod::CtxtCommEqualityProof, + pub equality_proof: pod::CiphertextCommitmentEqualityProof, pub ciphertext_amount_validity_proof: pod::AggregatedValidityProof, pub fee_sigma_proof: pod::FeeSigmaProof, pub fee_ciphertext_validity_proof: pod::AggregatedValidityProof, @@ -472,11 +476,11 @@ impl TransferWithFeeProof { transcript.append_commitment(b"commitment-new-source", &pod_new_source_commitment); // generate equality_proof - let equality_proof = CtxtCommEqualityProof::new( + let equality_proof = CiphertextCommitmentEqualityProof::new( source_keypair, new_source_ciphertext, - source_new_balance, &opening_source, + source_new_balance, transcript, ); @@ -602,7 +606,7 @@ impl TransferWithFeeProof { let new_source_commitment: PedersenCommitment = self.new_source_commitment.try_into()?; let claimed_commitment: PedersenCommitment = self.claimed_commitment.try_into()?; - let equality_proof: CtxtCommEqualityProof = self.equality_proof.try_into()?; + let equality_proof: CiphertextCommitmentEqualityProof = self.equality_proof.try_into()?; let ciphertext_amount_validity_proof: AggregatedValidityProof = self.ciphertext_amount_validity_proof.try_into()?; let fee_sigma_proof: FeeSigmaProof = self.fee_sigma_proof.try_into()?; diff --git a/zk-token-sdk/src/instruction/withdraw.rs b/zk-token-sdk/src/instruction/withdraw.rs index 340ea94c96d619..5b940d99bc4f1b 100644 --- a/zk-token-sdk/src/instruction/withdraw.rs +++ b/zk-token-sdk/src/instruction/withdraw.rs @@ -7,7 +7,7 @@ use { }, errors::ProofError, range_proof::RangeProof, - sigma_proofs::equality_proof::CtxtCommEqualityProof, + sigma_proofs::ctxt_comm_equality_proof::CiphertextCommitmentEqualityProof, transcript::TranscriptProtocol, }, merlin::Transcript, @@ -24,13 +24,10 @@ use { #[cfg(not(target_os = "solana"))] const WITHDRAW_AMOUNT_BIT_LENGTH: usize = 64; -/// This struct includes the cryptographic proof *and* the account data information needed to verify -/// the proof -/// -/// - The pre-instruction should call WithdrawData::verify_proof(&self) -/// - The actual program should check that `current_ct` is consistent with what is -/// currently stored in the confidential token account TODO: update this statement +/// The instruction data that is needed for the `ProofInstruction::VerifyWithdraw` instruction. /// +/// It includes the cryptographic proof as well as the context data information needed to verify +/// the proof. #[derive(Clone, Copy, Pod, Zeroable)] #[repr(C)] pub struct WithdrawData { @@ -41,6 +38,7 @@ pub struct WithdrawData { pub proof: WithdrawProof, // 736 bytes } +/// The context data needed to verify a withdraw proof. #[derive(Clone, Copy, Pod, Zeroable)] #[repr(C)] pub struct WithdrawProofContext { @@ -105,8 +103,9 @@ impl ZkProofData for WithdrawData { } } -/// This struct represents the cryptographic proof component that certifies the account's solvency -/// for withdrawal +/// The withdraw proof. +/// +/// It contains a ciphertext-commitment equality proof and a 64-bit range proof. #[derive(Clone, Copy, Pod, Zeroable)] #[repr(C)] #[allow(non_snake_case)] @@ -115,7 +114,7 @@ pub struct WithdrawProof { pub commitment: pod::PedersenCommitment, /// Associated equality proof - pub equality_proof: pod::CtxtCommEqualityProof, + pub equality_proof: pod::CiphertextCommitmentEqualityProof, /// Associated range proof pub range_proof: pod::RangeProof64, // 672 bytes @@ -149,11 +148,11 @@ impl WithdrawProof { transcript.append_commitment(b"commitment", &pod_commitment); // generate equality_proof - let equality_proof = CtxtCommEqualityProof::new( + let equality_proof = CiphertextCommitmentEqualityProof::new( keypair, final_ciphertext, - final_balance, &opening, + final_balance, transcript, ); @@ -176,17 +175,13 @@ impl WithdrawProof { transcript.append_commitment(b"commitment", &self.commitment); let commitment: PedersenCommitment = self.commitment.try_into()?; - let equality_proof: CtxtCommEqualityProof = self.equality_proof.try_into()?; + let equality_proof: CiphertextCommitmentEqualityProof = self.equality_proof.try_into()?; let range_proof: RangeProof = self.range_proof.try_into()?; // verify equality proof - // - // TODO: we can also consider verifying equality and range proof in a batch equality_proof.verify(pubkey, final_ciphertext, &commitment, transcript)?; // verify range proof - // - // TODO: double compressing here - consider modifying range proof input type to `PedersenCommitment` range_proof.verify( vec![&commitment], vec![WITHDRAW_AMOUNT_BIT_LENGTH], diff --git a/zk-token-sdk/src/instruction/zero_balance.rs b/zk-token-sdk/src/instruction/zero_balance.rs new file mode 100644 index 00000000000000..0d676cb1318bc0 --- /dev/null +++ b/zk-token-sdk/src/instruction/zero_balance.rs @@ -0,0 +1,127 @@ +//! The zero-balance proof instruction. +//! +//! A zero-balance proof is defined with respect to a twisted ElGamal ciphertext. The proof +//! certifies that a given ciphertext encrypts the message 0 in the field (`Scalar::zero()`). To +//! generate the proof, a prover must provide the decryption key for the ciphertext. + +#[cfg(not(target_os = "solana"))] +use { + crate::{ + encryption::elgamal::{ElGamalCiphertext, ElGamalKeypair}, + errors::ProofError, + sigma_proofs::zero_balance_proof::ZeroBalanceProof, + transcript::TranscriptProtocol, + }, + merlin::Transcript, + std::convert::TryInto, +}; +use { + crate::{ + instruction::{ProofType, ZkProofData}, + zk_token_elgamal::pod, + }, + bytemuck::{Pod, Zeroable}, +}; + +/// The instruction data that is needed for the `ProofInstruction::ZeroBalance` instruction. +/// +/// It includes the cryptographic proof as well as the context data information needed to verify +/// the proof. +#[derive(Clone, Copy, Pod, Zeroable)] +#[repr(C)] +pub struct ZeroBalanceProofData { + /// The context data for the zero-balance proof + pub context: ZeroBalanceProofContext, // 96 bytes + + /// Proof that the source account available balance is zero + pub proof: pod::ZeroBalanceProof, // 96 bytes +} + +/// The context data needed to verify a zero-balance proof. +#[derive(Clone, Copy, Pod, Zeroable)] +#[repr(C)] +pub struct ZeroBalanceProofContext { + /// The source account ElGamal pubkey + pub pubkey: pod::ElGamalPubkey, // 32 bytes + + /// The source account available balance in encrypted form + pub ciphertext: pod::ElGamalCiphertext, // 64 bytes +} + +#[cfg(not(target_os = "solana"))] +impl ZeroBalanceProofData { + pub fn new( + keypair: &ElGamalKeypair, + ciphertext: &ElGamalCiphertext, + ) -> Result { + let pod_pubkey = pod::ElGamalPubkey(keypair.public.to_bytes()); + let pod_ciphertext = pod::ElGamalCiphertext(ciphertext.to_bytes()); + + let context = ZeroBalanceProofContext { + pubkey: pod_pubkey, + ciphertext: pod_ciphertext, + }; + + let mut transcript = ZeroBalanceProof::transcript_new(&pod_pubkey, &pod_ciphertext); + let proof = ZeroBalanceProof::new(keypair, ciphertext, &mut transcript).into(); + + Ok(ZeroBalanceProofData { context, proof }) + } +} + +impl ZkProofData for ZeroBalanceProofData { + const PROOF_TYPE: ProofType = ProofType::ZeroBalance; + + fn context_data(&self) -> &ZeroBalanceProofContext { + &self.context + } + + #[cfg(not(target_os = "solana"))] + fn verify_proof(&self) -> Result<(), ProofError> { + let mut transcript = + ZeroBalanceProof::transcript_new(&self.context.pubkey, &self.context.ciphertext); + + let pubkey = self.context.pubkey.try_into()?; + let ciphertext = self.context.ciphertext.try_into()?; + let proof: ZeroBalanceProof = self.proof.try_into()?; + proof + .verify(&pubkey, &ciphertext, &mut transcript) + .map_err(|e| e.into()) + } +} + +#[allow(non_snake_case)] +#[cfg(not(target_os = "solana"))] +impl ZeroBalanceProof { + fn transcript_new( + pubkey: &pod::ElGamalPubkey, + ciphertext: &pod::ElGamalCiphertext, + ) -> Transcript { + let mut transcript = Transcript::new(b"ZeroBalanceProof"); + + transcript.append_pubkey(b"pubkey", pubkey); + transcript.append_ciphertext(b"ciphertext", ciphertext); + + transcript + } +} + +#[cfg(test)] +mod test { + use super::*; + + #[test] + fn test_zero_balance_proof_instruction_correctness() { + let keypair = ElGamalKeypair::new_rand(); + + // general case: encryption of 0 + let ciphertext = keypair.public.encrypt(0_u64); + let zero_balance_proof_data = ZeroBalanceProofData::new(&keypair, &ciphertext).unwrap(); + assert!(zero_balance_proof_data.verify_proof().is_ok()); + + // general case: encryption of > 0 + let ciphertext = keypair.public.encrypt(1_u64); + let zero_balance_proof_data = ZeroBalanceProofData::new(&keypair, &ciphertext).unwrap(); + assert!(zero_balance_proof_data.verify_proof().is_err()); + } +} diff --git a/zk-token-sdk/src/sigma_proofs/equality_proof.rs b/zk-token-sdk/src/sigma_proofs/ctxt_comm_equality_proof.rs similarity index 53% rename from zk-token-sdk/src/sigma_proofs/equality_proof.rs rename to zk-token-sdk/src/sigma_proofs/ctxt_comm_equality_proof.rs index 02df193e3152f2..efbfaa87e04285 100644 --- a/zk-token-sdk/src/sigma_proofs/equality_proof.rs +++ b/zk-token-sdk/src/sigma_proofs/ctxt_comm_equality_proof.rs @@ -1,11 +1,9 @@ -//! The equality sigma proof system. +//! The ciphertext-commitment equality sigma proof system. //! -//! An equality proof is defined with respect to two cryptographic objects: a twisted ElGamal -//! ciphertext and a Pedersen commitment. The proof certifies that a given ciphertext and -//! commitment pair encrypts/encodes the same message. To generate the proof, a prover must provide -//! the decryption key for the ciphertext and the Pedersen opening for the commitment. -//! -//! TODO: verify with respect to ciphertext +//! A ciphertext-commitment equality proof is defined with respect to a twisted ElGamal ciphertext +//! and a Pedersen commitment. The proof certifies that a given ciphertext and a commitment pair +//! encrypts/encodes the same message. To generate the proof, a prover must provide the decryption +//! key for the first ciphertext and the Pedersen opening for the commitment. //! //! The protocol guarantees computationally soundness (by the hardness of discrete log) and perfect //! zero-knowledge in the random oracle model. @@ -39,7 +37,7 @@ use { /// Contains all the elliptic curve and scalar components that make up the sigma protocol. #[allow(non_snake_case)] #[derive(Clone)] -pub struct CtxtCommEqualityProof { +pub struct CiphertextCommitmentEqualityProof { Y_0: CompressedRistretto, Y_1: CompressedRistretto, Y_2: CompressedRistretto, @@ -50,7 +48,7 @@ pub struct CtxtCommEqualityProof { #[allow(non_snake_case)] #[cfg(not(target_os = "solana"))] -impl CtxtCommEqualityProof { +impl CiphertextCommitmentEqualityProof { /// Equality proof constructor. The proof is with respect to a ciphertext and commitment. /// /// The function does *not* hash the public key, ciphertext, or commitment into the transcript. @@ -70,8 +68,8 @@ impl CtxtCommEqualityProof { pub fn new( source_keypair: &ElGamalKeypair, source_ciphertext: &ElGamalCiphertext, - amount: u64, opening: &PedersenOpening, + amount: u64, transcript: &mut Transcript, ) -> Self { transcript.equality_proof_domain_sep(); @@ -112,7 +110,7 @@ impl CtxtCommEqualityProof { y_x.zeroize(); y_r.zeroize(); - CtxtCommEqualityProof { + CiphertextCommitmentEqualityProof { Y_0, Y_1, Y_2, @@ -235,250 +233,10 @@ impl CtxtCommEqualityProof { let z_r = Scalar::from_canonical_bytes(*z_r).ok_or(ProofVerificationError::Deserialization)?; - Ok(CtxtCommEqualityProof { - Y_0, - Y_1, - Y_2, - z_s, - z_x, - z_r, - }) - } -} - -/// Equality proof. -/// -/// Contains all the elliptic curve and scalar components that make up the sigma protocol. -#[allow(non_snake_case)] -#[derive(Clone)] -pub struct CtxtCtxtEqualityProof { - Y_0: CompressedRistretto, - Y_1: CompressedRistretto, - Y_2: CompressedRistretto, - Y_3: CompressedRistretto, - z_s: Scalar, - z_x: Scalar, - z_r: Scalar, -} - -#[allow(non_snake_case)] -#[cfg(not(target_os = "solana"))] -impl CtxtCtxtEqualityProof { - /// Equality proof constructor. The proof is with respect to two ciphertexts. - /// - /// The function does *not* hash the public key, ciphertext, or commitment into the transcript. - /// For security, the caller (the main protocol) should hash these public components prior to - /// invoking this constructor. - /// - /// This function is randomized. It uses `OsRng` internally to generate random scalars. - /// - /// Note that the proof constructor does not take the actual Pedersen commitment as input; it - /// takes the associated Pedersen opening instead. - /// - /// * `source_keypair` - The ElGamal keypair associated with the first ciphertext to be proved - /// * `destination_pubkey` - The ElGamal pubkey associated with the second ElGamal ciphertext - /// * `source_ciphertext` - The first ElGamal ciphertext - /// * `amount` - The message associated with the ElGamal ciphertext and Pedersen commitment - /// * `destination_opening` - The opening associated with the second ElGamal ciphertext - /// * `transcript` - The transcript that does the bookkeeping for the Fiat-Shamir heuristic - pub fn new( - source_keypair: &ElGamalKeypair, - destination_pubkey: &ElGamalPubkey, - source_ciphertext: &ElGamalCiphertext, - amount: u64, - destination_opening: &PedersenOpening, - transcript: &mut Transcript, - ) -> Self { - transcript.equality_proof_domain_sep(); - - // extract the relevant scalar and Ristretto points from the inputs - let P_source = source_keypair.public.get_point(); - let D_source = source_ciphertext.handle.get_point(); - let P_destination = destination_pubkey.get_point(); - - let s = source_keypair.secret.get_scalar(); - let x = Scalar::from(amount); - let r = destination_opening.get_scalar(); - - // generate random masking factors that also serves as nonces - let mut y_s = Scalar::random(&mut OsRng); - let mut y_x = Scalar::random(&mut OsRng); - let mut y_r = Scalar::random(&mut OsRng); - - let Y_0 = (&y_s * P_source).compress(); - let Y_1 = - RistrettoPoint::multiscalar_mul(vec![&y_x, &y_s], vec![&(*G), D_source]).compress(); - let Y_2 = RistrettoPoint::multiscalar_mul(vec![&y_x, &y_r], vec![&(*G), &(*H)]).compress(); - let Y_3 = (&y_r * P_destination).compress(); - - // record masking factors in the transcript - transcript.append_point(b"Y_0", &Y_0); - transcript.append_point(b"Y_1", &Y_1); - transcript.append_point(b"Y_2", &Y_2); - transcript.append_point(b"Y_3", &Y_3); - - let c = transcript.challenge_scalar(b"c"); - transcript.challenge_scalar(b"w"); - - // compute the masked values - let z_s = &(&c * s) + &y_s; - let z_x = &(&c * &x) + &y_x; - let z_r = &(&c * r) + &y_r; - - // zeroize random scalars - y_s.zeroize(); - y_x.zeroize(); - y_r.zeroize(); - - CtxtCtxtEqualityProof { - Y_0, - Y_1, - Y_2, - Y_3, - z_s, - z_x, - z_r, - } - } - - /// Equality proof verifier. The proof is with respect to two ciphertexts. - /// - /// * `source_pubkey` - The ElGamal pubkey associated with the first ciphertext to be proved - /// * `destination_pubkey` - The ElGamal pubkey associated with the second ciphertext to be proved - /// * `source_ciphertext` - The first ElGamal ciphertext to be proved - /// * `destination_ciphertext` - The second ElGamal ciphertext to be proved - /// * `transcript` - The transcript that does the bookkeeping for the Fiat-Shamir heuristic - pub fn verify( - self, - source_pubkey: &ElGamalPubkey, - destination_pubkey: &ElGamalPubkey, - source_ciphertext: &ElGamalCiphertext, - destination_ciphertext: &ElGamalCiphertext, - transcript: &mut Transcript, - ) -> Result<(), EqualityProofError> { - transcript.equality_proof_domain_sep(); - - // extract the relevant scalar and Ristretto points from the inputs - let P_source = source_pubkey.get_point(); - let C_source = source_ciphertext.commitment.get_point(); - let D_source = source_ciphertext.handle.get_point(); - - let P_destination = destination_pubkey.get_point(); - let C_destination = destination_ciphertext.commitment.get_point(); - let D_destination = destination_ciphertext.handle.get_point(); - - // include Y_0, Y_1, Y_2 to transcript and extract challenges - transcript.validate_and_append_point(b"Y_0", &self.Y_0)?; - transcript.validate_and_append_point(b"Y_1", &self.Y_1)?; - transcript.validate_and_append_point(b"Y_2", &self.Y_2)?; - transcript.validate_and_append_point(b"Y_3", &self.Y_3)?; - - let c = transcript.challenge_scalar(b"c"); - let w = transcript.challenge_scalar(b"w"); // w used for batch verification - let ww = &w * &w; - let www = &w * &ww; - - let w_negated = -&w; - let ww_negated = -&ww; - let www_negated = -&www; - - // check that the required algebraic condition holds - let Y_0 = self - .Y_0 - .decompress() - .ok_or(ProofVerificationError::Deserialization)?; - let Y_1 = self - .Y_1 - .decompress() - .ok_or(ProofVerificationError::Deserialization)?; - let Y_2 = self - .Y_2 - .decompress() - .ok_or(ProofVerificationError::Deserialization)?; - let Y_3 = self - .Y_3 - .decompress() - .ok_or(ProofVerificationError::Deserialization)?; - - let check = RistrettoPoint::vartime_multiscalar_mul( - vec![ - &self.z_s, // z_s - &(-&c), // -c - &(-&Scalar::one()), // -identity - &(&w * &self.z_x), // w * z_x - &(&w * &self.z_s), // w * z_s - &(&w_negated * &c), // -w * c - &w_negated, // -w - &(&ww * &self.z_x), // ww * z_x - &(&ww * &self.z_r), // ww * z_r - &(&ww_negated * &c), // -ww * c - &ww_negated, // -ww - &(&www * &self.z_r), // z_r - &(&www_negated * &c), // -www * c - &www_negated, - ], - vec![ - P_source, // P_source - &(*H), // H - &Y_0, // Y_0 - &(*G), // G - D_source, // D_source - C_source, // C_source - &Y_1, // Y_1 - &(*G), // G - &(*H), // H - C_destination, // C_destination - &Y_2, // Y_2 - P_destination, // P_destination - D_destination, // D_destination - &Y_3, // Y_3 - ], - ); - - if check.is_identity() { - Ok(()) - } else { - Err(ProofVerificationError::AlgebraicRelation.into()) - } - } - - pub fn to_bytes(&self) -> [u8; 224] { - let mut buf = [0_u8; 224]; - buf[..32].copy_from_slice(self.Y_0.as_bytes()); - buf[32..64].copy_from_slice(self.Y_1.as_bytes()); - buf[64..96].copy_from_slice(self.Y_2.as_bytes()); - buf[96..128].copy_from_slice(self.Y_3.as_bytes()); - buf[128..160].copy_from_slice(self.z_s.as_bytes()); - buf[160..192].copy_from_slice(self.z_x.as_bytes()); - buf[192..224].copy_from_slice(self.z_r.as_bytes()); - buf - } - - pub fn from_bytes(bytes: &[u8]) -> Result { - if bytes.len() != 224 { - return Err(ProofVerificationError::Deserialization.into()); - } - - let bytes = array_ref![bytes, 0, 224]; - let (Y_0, Y_1, Y_2, Y_3, z_s, z_x, z_r) = array_refs![bytes, 32, 32, 32, 32, 32, 32, 32]; - - let Y_0 = CompressedRistretto::from_slice(Y_0); - let Y_1 = CompressedRistretto::from_slice(Y_1); - let Y_2 = CompressedRistretto::from_slice(Y_2); - let Y_3 = CompressedRistretto::from_slice(Y_3); - - let z_s = - Scalar::from_canonical_bytes(*z_s).ok_or(ProofVerificationError::Deserialization)?; - let z_x = - Scalar::from_canonical_bytes(*z_x).ok_or(ProofVerificationError::Deserialization)?; - let z_r = - Scalar::from_canonical_bytes(*z_r).ok_or(ProofVerificationError::Deserialization)?; - - Ok(CtxtCtxtEqualityProof { + Ok(CiphertextCommitmentEqualityProof { Y_0, Y_1, Y_2, - Y_3, z_s, z_x, z_r, @@ -505,11 +263,11 @@ mod test { let mut prover_transcript = Transcript::new(b"Test"); let mut verifier_transcript = Transcript::new(b"Test"); - let proof = CtxtCommEqualityProof::new( + let proof = CiphertextCommitmentEqualityProof::new( &source_keypair, &source_ciphertext, - message, &destination_opening, + message, &mut prover_transcript, ); @@ -533,11 +291,11 @@ mod test { let mut prover_transcript = Transcript::new(b"Test"); let mut verifier_transcript = Transcript::new(b"Test"); - let proof = CtxtCommEqualityProof::new( + let proof = CiphertextCommitmentEqualityProof::new( &source_keypair, &source_ciphertext, - message, &destination_opening, + message, &mut prover_transcript, ); @@ -566,11 +324,11 @@ mod test { let mut prover_transcript = Transcript::new(b"Test"); let mut verifier_transcript = Transcript::new(b"Test"); - let proof = CtxtCommEqualityProof::new( + let proof = CiphertextCommitmentEqualityProof::new( &elgamal_keypair, &ciphertext, - message, &opening, + message, &mut prover_transcript, ); @@ -595,11 +353,11 @@ mod test { let mut prover_transcript = Transcript::new(b"Test"); let mut verifier_transcript = Transcript::new(b"Test"); - let proof = CtxtCommEqualityProof::new( + let proof = CiphertextCommitmentEqualityProof::new( &elgamal_keypair, &ciphertext, - message, &opening, + message, &mut prover_transcript, ); @@ -624,11 +382,11 @@ mod test { let mut prover_transcript = Transcript::new(b"Test"); let mut verifier_transcript = Transcript::new(b"Test"); - let proof = CtxtCommEqualityProof::new( + let proof = CiphertextCommitmentEqualityProof::new( &elgamal_keypair, &ciphertext, - message, &opening, + message, &mut prover_transcript, ); @@ -652,11 +410,11 @@ mod test { let mut prover_transcript = Transcript::new(b"Test"); let mut verifier_transcript = Transcript::new(b"Test"); - let proof = CtxtCommEqualityProof::new( + let proof = CiphertextCommitmentEqualityProof::new( &elgamal_keypair, &ciphertext, - message, &opening, + message, &mut prover_transcript, ); @@ -669,74 +427,4 @@ mod test { ) .is_ok()); } - - #[test] - fn test_ciphertext_ciphertext_equality_proof_correctness() { - // success case - let source_keypair = ElGamalKeypair::new_rand(); - let destination_keypair = ElGamalKeypair::new_rand(); - let message: u64 = 55; - - let source_ciphertext = source_keypair.public.encrypt(message); - - let destination_opening = PedersenOpening::new_rand(); - let destination_ciphertext = destination_keypair - .public - .encrypt_with(message, &destination_opening); - - let mut prover_transcript = Transcript::new(b"Test"); - let mut verifier_transcript = Transcript::new(b"Test"); - - let proof = CtxtCtxtEqualityProof::new( - &source_keypair, - &destination_keypair.public, - &source_ciphertext, - message, - &destination_opening, - &mut prover_transcript, - ); - - assert!(proof - .verify( - &source_keypair.public, - &destination_keypair.public, - &source_ciphertext, - &destination_ciphertext, - &mut verifier_transcript - ) - .is_ok()); - - // fail case: encrypted and committed messages are different - let source_message: u64 = 55; - let destination_message: u64 = 77; - - let source_ciphertext = source_keypair.public.encrypt(source_message); - - let destination_opening = PedersenOpening::new_rand(); - let destination_ciphertext = destination_keypair - .public - .encrypt_with(destination_message, &destination_opening); - - let mut prover_transcript = Transcript::new(b"Test"); - let mut verifier_transcript = Transcript::new(b"Test"); - - let proof = CtxtCtxtEqualityProof::new( - &source_keypair, - &destination_keypair.public, - &source_ciphertext, - message, - &destination_opening, - &mut prover_transcript, - ); - - assert!(proof - .verify( - &source_keypair.public, - &destination_keypair.public, - &source_ciphertext, - &destination_ciphertext, - &mut verifier_transcript - ) - .is_err()); - } } diff --git a/zk-token-sdk/src/sigma_proofs/ctxt_ctxt_equality_proof.rs b/zk-token-sdk/src/sigma_proofs/ctxt_ctxt_equality_proof.rs new file mode 100644 index 00000000000000..4cdeacb25723bd --- /dev/null +++ b/zk-token-sdk/src/sigma_proofs/ctxt_ctxt_equality_proof.rs @@ -0,0 +1,342 @@ +//! The ciphertext-ciphertext equality sigma proof system. +//! +//! The protocol guarantees computational soundness (by the hardness of discrete log) and perfect +//! zero-knowledge in the random oracle model. + +#[cfg(not(target_os = "solana"))] +use { + crate::{ + encryption::{ + elgamal::{ElGamalCiphertext, ElGamalKeypair, ElGamalPubkey}, + pedersen::{PedersenOpening, G, H}, + }, + errors::ProofVerificationError, + }, + curve25519_dalek::traits::MultiscalarMul, + rand::rngs::OsRng, + zeroize::Zeroize, +}; +use { + crate::{sigma_proofs::errors::EqualityProofError, transcript::TranscriptProtocol}, + arrayref::{array_ref, array_refs}, + curve25519_dalek::{ + ristretto::{CompressedRistretto, RistrettoPoint}, + scalar::Scalar, + traits::{IsIdentity, VartimeMultiscalarMul}, + }, + merlin::Transcript, +}; + +/// The ciphertext-ciphertext equality proof. +/// +/// Contains all the elliptic curve and scalar components that make up the sigma protocol. +#[allow(non_snake_case)] +#[derive(Clone)] +pub struct CiphertextCiphertextEqualityProof { + Y_0: CompressedRistretto, + Y_1: CompressedRistretto, + Y_2: CompressedRistretto, + Y_3: CompressedRistretto, + z_s: Scalar, + z_x: Scalar, + z_r: Scalar, +} + +#[allow(non_snake_case)] +#[cfg(not(target_os = "solana"))] +impl CiphertextCiphertextEqualityProof { + /// The ciphertext-ciphertext equality proof constructor. + /// + /// The function does *not* hash the public key, ciphertext, or commitment into the transcript. + /// For security, the caller (the main protocol) should hash these public components prior to + /// invoking this constructor. + /// + /// This function is randomized. It uses `OsRng` internally to generate random scalars. + /// + /// * `source_keypair` - The ElGamal keypair associated with the first ciphertext to be proved + /// * `destination_pubkey` - The ElGamal pubkey associated with the second ElGamal ciphertext + /// * `source_ciphertext` - The first ElGamal ciphertext for which the prover knows a + /// decryption key for + /// * `destination_opening` - The opening (randomness) associated with the second ElGamal ciphertext + /// * `amount` - The message associated with the ElGamal ciphertext and Pedersen commitment + /// * `transcript` - The transcript that does the bookkeeping for the Fiat-Shamir heuristic + pub fn new( + source_keypair: &ElGamalKeypair, + destination_pubkey: &ElGamalPubkey, + source_ciphertext: &ElGamalCiphertext, + destination_opening: &PedersenOpening, + amount: u64, + transcript: &mut Transcript, + ) -> Self { + transcript.equality_proof_domain_sep(); + + // extract the relevant scalar and Ristretto points from the inputs + let P_source = source_keypair.public.get_point(); + let D_source = source_ciphertext.handle.get_point(); + let P_destination = destination_pubkey.get_point(); + + let s = source_keypair.secret.get_scalar(); + let x = Scalar::from(amount); + let r = destination_opening.get_scalar(); + + // generate random masking factors that also serves as nonces + let mut y_s = Scalar::random(&mut OsRng); + let mut y_x = Scalar::random(&mut OsRng); + let mut y_r = Scalar::random(&mut OsRng); + + let Y_0 = (&y_s * P_source).compress(); + let Y_1 = + RistrettoPoint::multiscalar_mul(vec![&y_x, &y_s], vec![&(*G), D_source]).compress(); + let Y_2 = RistrettoPoint::multiscalar_mul(vec![&y_x, &y_r], vec![&(*G), &(*H)]).compress(); + let Y_3 = (&y_r * P_destination).compress(); + + // record masking factors in the transcript + transcript.append_point(b"Y_0", &Y_0); + transcript.append_point(b"Y_1", &Y_1); + transcript.append_point(b"Y_2", &Y_2); + transcript.append_point(b"Y_3", &Y_3); + + let c = transcript.challenge_scalar(b"c"); + transcript.challenge_scalar(b"w"); + + // compute the masked values + let z_s = &(&c * s) + &y_s; + let z_x = &(&c * &x) + &y_x; + let z_r = &(&c * r) + &y_r; + + // zeroize random scalars + y_s.zeroize(); + y_x.zeroize(); + y_r.zeroize(); + + CiphertextCiphertextEqualityProof { + Y_0, + Y_1, + Y_2, + Y_3, + z_s, + z_x, + z_r, + } + } + + /// The ciphertext-ciphertext equality proof verifier. The proof is with respect to two + /// ciphertexts. + /// + /// * `source_pubkey` - The ElGamal pubkey associated with the first ciphertext to be proved + /// * `destination_pubkey` - The ElGamal pubkey associated with the second ciphertext to be proved + /// * `source_ciphertext` - The first ElGamal ciphertext to be proved + /// * `destination_ciphertext` - The second ElGamal ciphertext to be proved + /// * `transcript` - The transcript that does the bookkeeping for the Fiat-Shamir heuristic + pub fn verify( + self, + source_pubkey: &ElGamalPubkey, + destination_pubkey: &ElGamalPubkey, + source_ciphertext: &ElGamalCiphertext, + destination_ciphertext: &ElGamalCiphertext, + transcript: &mut Transcript, + ) -> Result<(), EqualityProofError> { + transcript.equality_proof_domain_sep(); + + // extract the relevant scalar and Ristretto points from the inputs + let P_source = source_pubkey.get_point(); + let C_source = source_ciphertext.commitment.get_point(); + let D_source = source_ciphertext.handle.get_point(); + + let P_destination = destination_pubkey.get_point(); + let C_destination = destination_ciphertext.commitment.get_point(); + let D_destination = destination_ciphertext.handle.get_point(); + + // include Y_0, Y_1, Y_2 to transcript and extract challenges + transcript.validate_and_append_point(b"Y_0", &self.Y_0)?; + transcript.validate_and_append_point(b"Y_1", &self.Y_1)?; + transcript.validate_and_append_point(b"Y_2", &self.Y_2)?; + transcript.validate_and_append_point(b"Y_3", &self.Y_3)?; + + let c = transcript.challenge_scalar(b"c"); + let w = transcript.challenge_scalar(b"w"); // w used for batch verification + let ww = &w * &w; + let www = &w * &ww; + + let w_negated = -&w; + let ww_negated = -&ww; + let www_negated = -&www; + + // check that the required algebraic condition holds + let Y_0 = self + .Y_0 + .decompress() + .ok_or(ProofVerificationError::Deserialization)?; + let Y_1 = self + .Y_1 + .decompress() + .ok_or(ProofVerificationError::Deserialization)?; + let Y_2 = self + .Y_2 + .decompress() + .ok_or(ProofVerificationError::Deserialization)?; + let Y_3 = self + .Y_3 + .decompress() + .ok_or(ProofVerificationError::Deserialization)?; + + let check = RistrettoPoint::vartime_multiscalar_mul( + vec![ + &self.z_s, // z_s + &(-&c), // -c + &(-&Scalar::one()), // -identity + &(&w * &self.z_x), // w * z_x + &(&w * &self.z_s), // w * z_s + &(&w_negated * &c), // -w * c + &w_negated, // -w + &(&ww * &self.z_x), // ww * z_x + &(&ww * &self.z_r), // ww * z_r + &(&ww_negated * &c), // -ww * c + &ww_negated, // -ww + &(&www * &self.z_r), // z_r + &(&www_negated * &c), // -www * c + &www_negated, + ], + vec![ + P_source, // P_source + &(*H), // H + &Y_0, // Y_0 + &(*G), // G + D_source, // D_source + C_source, // C_source + &Y_1, // Y_1 + &(*G), // G + &(*H), // H + C_destination, // C_destination + &Y_2, // Y_2 + P_destination, // P_destination + D_destination, // D_destination + &Y_3, // Y_3 + ], + ); + + if check.is_identity() { + Ok(()) + } else { + Err(ProofVerificationError::AlgebraicRelation.into()) + } + } + + pub fn to_bytes(&self) -> [u8; 224] { + let mut buf = [0_u8; 224]; + buf[..32].copy_from_slice(self.Y_0.as_bytes()); + buf[32..64].copy_from_slice(self.Y_1.as_bytes()); + buf[64..96].copy_from_slice(self.Y_2.as_bytes()); + buf[96..128].copy_from_slice(self.Y_3.as_bytes()); + buf[128..160].copy_from_slice(self.z_s.as_bytes()); + buf[160..192].copy_from_slice(self.z_x.as_bytes()); + buf[192..224].copy_from_slice(self.z_r.as_bytes()); + buf + } + + pub fn from_bytes(bytes: &[u8]) -> Result { + if bytes.len() != 224 { + return Err(ProofVerificationError::Deserialization.into()); + } + + let bytes = array_ref![bytes, 0, 224]; + let (Y_0, Y_1, Y_2, Y_3, z_s, z_x, z_r) = array_refs![bytes, 32, 32, 32, 32, 32, 32, 32]; + + let Y_0 = CompressedRistretto::from_slice(Y_0); + let Y_1 = CompressedRistretto::from_slice(Y_1); + let Y_2 = CompressedRistretto::from_slice(Y_2); + let Y_3 = CompressedRistretto::from_slice(Y_3); + + let z_s = + Scalar::from_canonical_bytes(*z_s).ok_or(ProofVerificationError::Deserialization)?; + let z_x = + Scalar::from_canonical_bytes(*z_x).ok_or(ProofVerificationError::Deserialization)?; + let z_r = + Scalar::from_canonical_bytes(*z_r).ok_or(ProofVerificationError::Deserialization)?; + + Ok(CiphertextCiphertextEqualityProof { + Y_0, + Y_1, + Y_2, + Y_3, + z_s, + z_x, + z_r, + }) + } +} + +#[cfg(test)] +mod test { + use super::*; + + #[test] + fn test_ciphertext_ciphertext_equality_proof_correctness() { + // success case + let source_keypair = ElGamalKeypair::new_rand(); + let destination_keypair = ElGamalKeypair::new_rand(); + let message: u64 = 55; + + let source_ciphertext = source_keypair.public.encrypt(message); + + let destination_opening = PedersenOpening::new_rand(); + let destination_ciphertext = destination_keypair + .public + .encrypt_with(message, &destination_opening); + + let mut prover_transcript = Transcript::new(b"Test"); + let mut verifier_transcript = Transcript::new(b"Test"); + + let proof = CiphertextCiphertextEqualityProof::new( + &source_keypair, + &destination_keypair.public, + &source_ciphertext, + &destination_opening, + message, + &mut prover_transcript, + ); + + assert!(proof + .verify( + &source_keypair.public, + &destination_keypair.public, + &source_ciphertext, + &destination_ciphertext, + &mut verifier_transcript + ) + .is_ok()); + + // fail case: encrypted and committed messages are different + let source_message: u64 = 55; + let destination_message: u64 = 77; + + let source_ciphertext = source_keypair.public.encrypt(source_message); + + let destination_opening = PedersenOpening::new_rand(); + let destination_ciphertext = destination_keypair + .public + .encrypt_with(destination_message, &destination_opening); + + let mut prover_transcript = Transcript::new(b"Test"); + let mut verifier_transcript = Transcript::new(b"Test"); + + let proof = CiphertextCiphertextEqualityProof::new( + &source_keypair, + &destination_keypair.public, + &source_ciphertext, + &destination_opening, + message, + &mut prover_transcript, + ); + + assert!(proof + .verify( + &source_keypair.public, + &destination_keypair.public, + &source_ciphertext, + &destination_ciphertext, + &mut verifier_transcript + ) + .is_err()); + } +} diff --git a/zk-token-sdk/src/sigma_proofs/mod.rs b/zk-token-sdk/src/sigma_proofs/mod.rs index 3b0918fdab6369..2ccf2fdf372402 100644 --- a/zk-token-sdk/src/sigma_proofs/mod.rs +++ b/zk-token-sdk/src/sigma_proofs/mod.rs @@ -15,7 +15,8 @@ //! We refer to the zk-token paper for the formal details and security proofs of these argument //! systems. -pub mod equality_proof; +pub mod ctxt_comm_equality_proof; +pub mod ctxt_ctxt_equality_proof; pub mod errors; pub mod fee_proof; pub mod pubkey_proof; diff --git a/zk-token-sdk/src/sigma_proofs/pubkey_proof.rs b/zk-token-sdk/src/sigma_proofs/pubkey_proof.rs index bd611fc8156b3a..400e719e467a40 100644 --- a/zk-token-sdk/src/sigma_proofs/pubkey_proof.rs +++ b/zk-token-sdk/src/sigma_proofs/pubkey_proof.rs @@ -1,9 +1,5 @@ //! The public-key (validity) proof system. //! -//! A public-key proof is defined with respect to an ElGamal public key. The proof certifies that a -//! given public key is a valid ElGamal public key (i.e. the prover knows a corresponding secret -//! key). To generate the proof, a prover must prove the secret key for the public key. -//! //! The protocol guarantees computational soundness (by the hardness of discrete log) and perfect //! zero-knowledge in the random oracle model. @@ -35,14 +31,14 @@ use { /// Contains all the elliptic curve and scalar components that make up the sigma protocol. #[allow(non_snake_case)] #[derive(Clone)] -pub struct PubkeySigmaProof { +pub struct PubkeyValidityProof { Y: CompressedRistretto, z: Scalar, } #[allow(non_snake_case)] #[cfg(not(target_os = "solana"))] -impl PubkeySigmaProof { +impl PubkeyValidityProof { /// Public-key proof constructor. /// /// The function does *not* hash the public key and ciphertext into the transcript. For @@ -136,7 +132,7 @@ impl PubkeySigmaProof { let Y = CompressedRistretto::from_slice(Y); let z = Scalar::from_canonical_bytes(*z).ok_or(ProofVerificationError::Deserialization)?; - Ok(PubkeySigmaProof { Y, z }) + Ok(PubkeyValidityProof { Y, z }) } } @@ -155,7 +151,7 @@ mod test { let mut prover_transcript = Transcript::new(b"test"); let mut verifier_transcript = Transcript::new(b"test"); - let proof = PubkeySigmaProof::new(&keypair, &mut prover_transcript); + let proof = PubkeyValidityProof::new(&keypair, &mut prover_transcript); assert!(proof .verify(&keypair.public, &mut verifier_transcript) .is_ok()); @@ -166,7 +162,7 @@ mod test { let mut prover_transcript = Transcript::new(b"test"); let mut verifier_transcript = Transcript::new(b"test"); - let proof = PubkeySigmaProof::new(&keypair, &mut prover_transcript); + let proof = PubkeyValidityProof::new(&keypair, &mut prover_transcript); assert!(proof .verify(&keypair.public, &mut verifier_transcript) .is_ok()); diff --git a/zk-token-sdk/src/sigma_proofs/zero_balance_proof.rs b/zk-token-sdk/src/sigma_proofs/zero_balance_proof.rs index 14afd2830eb430..3108860544990b 100644 --- a/zk-token-sdk/src/sigma_proofs/zero_balance_proof.rs +++ b/zk-token-sdk/src/sigma_proofs/zero_balance_proof.rs @@ -1,9 +1,5 @@ //! The zero-balance sigma proof system. //! -//! A zero-balance proof is defined with respect to a twisted ElGamal ciphertext. The proof -//! certifies that a given ciphertext encrypts the message 0 (`Scalar::zero()`). To generate the -//! proof, a prover must provide the decryption key for the ciphertext. -//! //! The protocol guarantees computationally soundness (by the hardness of discrete log) and perfect //! zero-knowledge in the random oracle model. diff --git a/zk-token-sdk/src/zk_token_elgamal/convert.rs b/zk-token-sdk/src/zk_token_elgamal/convert.rs index a327b3f2dc44c4..00a582be21c260 100644 --- a/zk-token-sdk/src/zk_token_elgamal/convert.rs +++ b/zk-token-sdk/src/zk_token_elgamal/convert.rs @@ -64,10 +64,11 @@ mod target_arch { }, range_proof::{errors::RangeProofError, RangeProof}, sigma_proofs::{ - equality_proof::{CtxtCommEqualityProof, CtxtCtxtEqualityProof}, + ctxt_comm_equality_proof::CiphertextCommitmentEqualityProof, + ctxt_ctxt_equality_proof::CiphertextCiphertextEqualityProof, errors::*, fee_proof::FeeSigmaProof, - pubkey_proof::PubkeySigmaProof, + pubkey_proof::PubkeyValidityProof, validity_proof::{AggregatedValidityProof, ValidityProof}, zero_balance_proof::ZeroBalanceProof, }, @@ -191,30 +192,30 @@ mod target_arch { } } - impl From for pod::CtxtCommEqualityProof { - fn from(proof: CtxtCommEqualityProof) -> Self { + impl From for pod::CiphertextCommitmentEqualityProof { + fn from(proof: CiphertextCommitmentEqualityProof) -> Self { Self(proof.to_bytes()) } } - impl TryFrom for CtxtCommEqualityProof { + impl TryFrom for CiphertextCommitmentEqualityProof { type Error = EqualityProofError; - fn try_from(pod: pod::CtxtCommEqualityProof) -> Result { + fn try_from(pod: pod::CiphertextCommitmentEqualityProof) -> Result { Self::from_bytes(&pod.0) } } - impl From for pod::CtxtCtxtEqualityProof { - fn from(proof: CtxtCtxtEqualityProof) -> Self { + impl From for pod::CiphertextCiphertextEqualityProof { + fn from(proof: CiphertextCiphertextEqualityProof) -> Self { Self(proof.to_bytes()) } } - impl TryFrom for CtxtCtxtEqualityProof { + impl TryFrom for CiphertextCiphertextEqualityProof { type Error = EqualityProofError; - fn try_from(pod: pod::CtxtCtxtEqualityProof) -> Result { + fn try_from(pod: pod::CiphertextCiphertextEqualityProof) -> Result { Self::from_bytes(&pod.0) } } @@ -275,16 +276,16 @@ mod target_arch { } } - impl From for pod::PubkeySigmaProof { - fn from(proof: PubkeySigmaProof) -> Self { + impl From for pod::PubkeyValidityProof { + fn from(proof: PubkeyValidityProof) -> Self { Self(proof.to_bytes()) } } - impl TryFrom for PubkeySigmaProof { + impl TryFrom for PubkeyValidityProof { type Error = PubkeyValidityProofError; - fn try_from(pod: pod::PubkeySigmaProof) -> Result { + fn try_from(pod: pod::PubkeyValidityProof) -> Result { Self::from_bytes(&pod.0) } } diff --git a/zk-token-sdk/src/zk_token_elgamal/pod.rs b/zk-token-sdk/src/zk_token_elgamal/pod.rs index fd728bc6a7caab..171a28e3f19dcc 100644 --- a/zk-token-sdk/src/zk_token_elgamal/pod.rs +++ b/zk-token-sdk/src/zk_token_elgamal/pod.rs @@ -112,25 +112,25 @@ impl fmt::Debug for DecryptHandle { } } -/// Serialization of `CtxtCommEqualityProof` +/// Serialization of `CiphertextCommitmentEqualityProof` #[derive(Clone, Copy)] #[repr(transparent)] -pub struct CtxtCommEqualityProof(pub [u8; 192]); +pub struct CiphertextCommitmentEqualityProof(pub [u8; 192]); -// `CtxtCommEqualityProof` is a Pod and Zeroable. +// `CiphertextCommitmentEqualityProof` is a Pod and Zeroable. // Add the marker traits manually because `bytemuck` only adds them for some `u8` arrays -unsafe impl Zeroable for CtxtCommEqualityProof {} -unsafe impl Pod for CtxtCommEqualityProof {} +unsafe impl Zeroable for CiphertextCommitmentEqualityProof {} +unsafe impl Pod for CiphertextCommitmentEqualityProof {} /// Serialization of `CtxtCtxtEqualityProof` #[derive(Clone, Copy)] #[repr(transparent)] -pub struct CtxtCtxtEqualityProof(pub [u8; 224]); +pub struct CiphertextCiphertextEqualityProof(pub [u8; 224]); // `CtxtCtxtEqualityProof` is a Pod and Zeroable. // Add the marker traits manually because `bytemuck` only adds them for some `u8` arrays -unsafe impl Zeroable for CtxtCtxtEqualityProof {} -unsafe impl Pod for CtxtCtxtEqualityProof {} +unsafe impl Zeroable for CiphertextCiphertextEqualityProof {} +unsafe impl Pod for CiphertextCiphertextEqualityProof {} /// Serialization of validity proofs #[derive(Clone, Copy)] @@ -170,7 +170,7 @@ pub struct FeeSigmaProof(pub [u8; 256]); /// Serialization of public-key sigma proof #[derive(Clone, Copy, Pod, Zeroable)] #[repr(transparent)] -pub struct PubkeySigmaProof(pub [u8; 64]); +pub struct PubkeyValidityProof(pub [u8; 64]); /// Serialization of range proofs for 64-bit numbers (for `Withdraw` instruction) #[derive(Clone, Copy)] diff --git a/zk-token-sdk/src/zk_token_proof_instruction.rs b/zk-token-sdk/src/zk_token_proof_instruction.rs index 21d1dae975562d..fee9bb8a22c54d 100644 --- a/zk-token-sdk/src/zk_token_proof_instruction.rs +++ b/zk-token-sdk/src/zk_token_proof_instruction.rs @@ -25,7 +25,7 @@ pub enum ProofInstruction { /// CloseContextState, - /// Verify a close account zero-knowledge proof. + /// Verify a zero-balance proof. /// /// This instruction can be configured to optionally create a proof context state account. /// @@ -39,9 +39,9 @@ pub enum ProofInstruction { /// None /// /// Data expected by this instruction: - /// `CloseAccountData` + /// `ZeroBalanceProofData` /// - VerifyCloseAccount, + VerifyZeroBalance, /// Verify a withdraw zero-knowledge proof. /// @@ -61,7 +61,7 @@ pub enum ProofInstruction { /// VerifyWithdraw, - /// Verify a withdraw withheld tokens zero-knowledge proof. + /// Verify a ciphertext-ciphertext equality proof. /// /// This instruction can be configured to optionally create a proof context state account. /// @@ -75,9 +75,9 @@ pub enum ProofInstruction { /// None /// /// Data expected by this instruction: - /// `WithdrawWithheldTokensData` + /// `CiphertextCiphertextEqualityProofData` /// - VerifyWithdrawWithheldTokens, + VerifyCiphertextCiphertextEquality, /// Verify a transfer zero-knowledge proof. /// @@ -161,12 +161,12 @@ pub fn close_context_state( } } -/// Create a `VerifyCloseAccount` instruction. -pub fn verify_close_account( +/// Create a `VerifyZeroBalance` instruction. +pub fn verify_zero_balance( context_state_info: Option, - proof_data: &CloseAccountData, + proof_data: &ZeroBalanceProofData, ) -> Instruction { - ProofInstruction::VerifyCloseAccount.encode_verify_proof(context_state_info, proof_data) + ProofInstruction::VerifyZeroBalance.encode_verify_proof(context_state_info, proof_data) } /// Create a `VerifyWithdraw` instruction. @@ -177,12 +177,12 @@ pub fn verify_withdraw( ProofInstruction::VerifyWithdraw.encode_verify_proof(context_state_info, proof_data) } -/// Create a `VerifyWithdrawWithheldTokens` instruction. -pub fn verify_withdraw_withheld_tokens( +/// Create a `VerifyCiphertextCiphertextEquality` instruction. +pub fn verify_ciphertext_ciphertext_equality( context_state_info: Option, - proof_data: &WithdrawWithheldTokensData, + proof_data: &CiphertextCiphertextEqualityProofData, ) -> Instruction { - ProofInstruction::VerifyWithdrawWithheldTokens + ProofInstruction::VerifyCiphertextCiphertextEquality .encode_verify_proof(context_state_info, proof_data) } From 2d610ee0faa26aa3a09d31bbfd7e8076416c731a Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Mon, 22 May 2023 08:27:36 -0700 Subject: [PATCH 430/465] v1.14: Fixed missing Root notifications via geyser plugin framework (backport of #31180) (#31650) Problem It is reported that Geyser is missing some Root notifications for slots. #31124 The Root notification is sent from replay_stage's code in handle_votable_bank. https://github.com/solana-labs/solana/blob/master/core/src/replay_stage.rs#L1981. However, the validator does not necessarily vote on every slot on the rooted chain. From @carllin For instance if the rooted chain is 1->2->3->4 You might only vote on 1 and 4 But when 4 is rooted, 2 is also rooted But handle_votavle_bank is not called on 2 As result of this, we may miss notifications for slot 2 and 3. Summary of Changes Enhanced BankNotification to add NewRootedChain enum to send the chains of parent roots. Renamed BankNotification::Root -> BankNotification::NewRootBank Introduced SlotNotification for SlotStatusObserver interfaces to send slot status without Bank. In the OptimisticallyConfirmedBankTracker notify parents of a new root if these parents were not notified. Modified and added unit test cases to verify the logic. --- core/src/replay_stage.rs | 32 ++- core/src/tvu.rs | 4 +- core/src/validator.rs | 10 +- .../src/geyser_plugin_service.rs | 4 +- .../src/slot_status_observer.rs | 16 +- .../optimistically_confirmed_bank_tracker.rs | 217 +++++++++++++++--- rpc/src/rpc.rs | 5 + rpc/src/rpc_subscriptions.rs | 12 + 8 files changed, 251 insertions(+), 49 deletions(-) diff --git a/core/src/replay_stage.rs b/core/src/replay_stage.rs index 3d92fbdcb77ef3..daa59adc032ada 100644 --- a/core/src/replay_stage.rs +++ b/core/src/replay_stage.rs @@ -49,7 +49,7 @@ use { solana_poh::poh_recorder::{PohLeaderStatus, PohRecorder, GRACE_TICKS_FACTOR, MAX_GRACE_SLOTS}, solana_program_runtime::timings::ExecuteTimings, solana_rpc::{ - optimistically_confirmed_bank_tracker::{BankNotification, BankNotificationSender}, + optimistically_confirmed_bank_tracker::{BankNotification, BankNotificationSenderConfig}, rpc_subscriptions::RpcSubscriptions, }, solana_runtime::{ @@ -160,7 +160,7 @@ pub struct ReplayStageConfig { pub transaction_status_sender: Option, pub rewards_recorder_sender: Option, pub cache_block_meta_sender: Option, - pub bank_notification_sender: Option, + pub bank_notification_sender: Option, pub wait_for_vote_to_start_leader: bool, pub ancestor_hashes_replay_update_sender: AncestorHashesReplayUpdateSender, pub tower_storage: Arc, @@ -1901,7 +1901,7 @@ impl ReplayStage { rpc_subscriptions: &Arc, block_commitment_cache: &Arc>, heaviest_subtree_fork_choice: &mut HeaviestSubtreeForkChoice, - bank_notification_sender: &Option, + bank_notification_sender: &Option, duplicate_slots_tracker: &mut DuplicateSlotsTracker, gossip_duplicate_confirmed_slots: &mut GossipDuplicateConfirmedSlots, unfrozen_gossip_verified_vote_hashes: &mut UnfrozenGossipVerifiedVoteHashes, @@ -1927,8 +1927,19 @@ impl ReplayStage { .get(new_root) .expect("Root bank doesn't exist"); let mut rooted_banks = root_bank.parents(); + let oldest_parent = rooted_banks.last().map(|last| last.parent_slot()); rooted_banks.push(root_bank.clone()); let rooted_slots: Vec<_> = rooted_banks.iter().map(|bank| bank.slot()).collect(); + // The following differs from rooted_slots by including the parent slot of the oldest parent bank. + let rooted_slots_with_parents = bank_notification_sender + .as_ref() + .map_or(false, |sender| sender.should_send_parents) + .then(|| { + let mut new_chain = rooted_slots.clone(); + new_chain.push(oldest_parent.unwrap_or_else(|| bank.parent_slot())); + new_chain + }); + // Call leader schedule_cache.set_root() before blockstore.set_root() because // bank_forks.root is consumed by repair_service to update gossip, so we don't want to // get shreds for repair on gossip before we update leader schedule, otherwise they may @@ -1964,8 +1975,16 @@ impl ReplayStage { rpc_subscriptions.notify_roots(rooted_slots); if let Some(sender) = bank_notification_sender { sender - .send(BankNotification::Root(root_bank)) + .sender + .send(BankNotification::NewRootBank(root_bank)) .unwrap_or_else(|err| warn!("bank_notification_sender failed: {:?}", err)); + + if let Some(new_chain) = rooted_slots_with_parents { + sender + .sender + .send(BankNotification::NewRootedChain(new_chain)) + .unwrap_or_else(|err| warn!("bank_notification_sender failed: {:?}", err)); + } } latest_root_senders.iter().for_each(|s| { if let Err(e) = s.send(new_root) { @@ -2483,7 +2502,7 @@ impl ReplayStage { transaction_status_sender: Option<&TransactionStatusSender>, cache_block_meta_sender: Option<&CacheBlockMetaSender>, heaviest_subtree_fork_choice: &mut HeaviestSubtreeForkChoice, - bank_notification_sender: &Option, + bank_notification_sender: &Option, rewards_recorder_sender: &Option, rpc_subscriptions: &Arc, duplicate_slots_tracker: &mut DuplicateSlotsTracker, @@ -2606,6 +2625,7 @@ impl ReplayStage { ); if let Some(sender) = bank_notification_sender { sender + .sender .send(BankNotification::Frozen(bank.clone())) .unwrap_or_else(|err| warn!("bank_notification_sender failed: {:?}", err)); } @@ -2678,7 +2698,7 @@ impl ReplayStage { verify_recyclers: &VerifyRecyclers, heaviest_subtree_fork_choice: &mut HeaviestSubtreeForkChoice, replay_vote_sender: &ReplayVoteSender, - bank_notification_sender: &Option, + bank_notification_sender: &Option, rewards_recorder_sender: &Option, rpc_subscriptions: &Arc, duplicate_slots_tracker: &mut DuplicateSlotsTracker, diff --git a/core/src/tvu.rs b/core/src/tvu.rs index 303c949d726b25..c4fa37cf25d757 100644 --- a/core/src/tvu.rs +++ b/core/src/tvu.rs @@ -37,7 +37,7 @@ use { }, solana_poh::poh_recorder::PohRecorder, solana_rpc::{ - max_slots::MaxSlots, optimistically_confirmed_bank_tracker::BankNotificationSender, + max_slots::MaxSlots, optimistically_confirmed_bank_tracker::BankNotificationSenderConfig, rpc_subscriptions::RpcSubscriptions, }, solana_runtime::{ @@ -119,7 +119,7 @@ impl Tvu { verified_vote_receiver: VerifiedVoteReceiver, replay_vote_sender: ReplayVoteSender, completed_data_sets_sender: CompletedDataSetsSender, - bank_notification_sender: Option, + bank_notification_sender: Option, gossip_confirmed_slots_receiver: GossipDuplicateConfirmedSlotsReceiver, tvu_config: TvuConfig, max_slots: &Arc, diff --git a/core/src/validator.rs b/core/src/validator.rs index 59d61613da06b6..5c3b802fe64c4e 100644 --- a/core/src/validator.rs +++ b/core/src/validator.rs @@ -57,7 +57,8 @@ use { solana_rpc::{ max_slots::MaxSlots, optimistically_confirmed_bank_tracker::{ - OptimisticallyConfirmedBank, OptimisticallyConfirmedBankTracker, + BankNotificationSenderConfig, OptimisticallyConfirmedBank, + OptimisticallyConfirmedBankTracker, }, rpc::JsonRpcConfig, rpc_completed_slots_service::RpcCompletedSlotsService, @@ -879,7 +880,10 @@ impl Validator { rpc_subscriptions.clone(), confirmed_bank_subscribers, )), - Some(bank_notification_sender), + Some(BankNotificationSenderConfig { + sender: bank_notification_sender, + should_send_parents: geyser_plugin_service.is_some(), + }), ) } else { (None, None, None, None) @@ -1063,7 +1067,7 @@ impl Validator { gossip_verified_vote_hash_sender, replay_vote_receiver, replay_vote_sender, - bank_notification_sender, + bank_notification_sender.map(|sender| sender.sender), config.tpu_coalesce_ms, cluster_confirmed_slot_sender, &cost_model, diff --git a/geyser-plugin-manager/src/geyser_plugin_service.rs b/geyser-plugin-manager/src/geyser_plugin_service.rs index e203bd1deb5453..764c7fbdc48a7d 100644 --- a/geyser-plugin-manager/src/geyser_plugin_service.rs +++ b/geyser-plugin-manager/src/geyser_plugin_service.rs @@ -9,7 +9,7 @@ use { crossbeam_channel::Receiver, log::*, solana_rpc::{ - optimistically_confirmed_bank_tracker::BankNotification, + optimistically_confirmed_bank_tracker::SlotNotification, transaction_notifier_interface::TransactionNotifierLock, }, solana_runtime::accounts_update_notifier_interface::AccountsUpdateNotifier, @@ -68,7 +68,7 @@ impl GeyserPluginService { /// It is usually used to configure the connection information for the external data store. pub fn new( - confirmed_bank_receiver: Receiver, + confirmed_bank_receiver: Receiver, geyser_plugin_config_files: &[PathBuf], ) -> Result { info!( diff --git a/geyser-plugin-manager/src/slot_status_observer.rs b/geyser-plugin-manager/src/slot_status_observer.rs index b2f6bf5f795b6c..7eba6e54eb6c58 100644 --- a/geyser-plugin-manager/src/slot_status_observer.rs +++ b/geyser-plugin-manager/src/slot_status_observer.rs @@ -1,7 +1,7 @@ use { crate::slot_status_notifier::SlotStatusNotifier, crossbeam_channel::Receiver, - solana_rpc::optimistically_confirmed_bank_tracker::BankNotification, + solana_rpc::optimistically_confirmed_bank_tracker::SlotNotification, std::{ sync::{ atomic::{AtomicBool, Ordering}, @@ -19,7 +19,7 @@ pub(crate) struct SlotStatusObserver { impl SlotStatusObserver { pub fn new( - bank_notification_receiver: Receiver, + bank_notification_receiver: Receiver, slot_status_notifier: SlotStatusNotifier, ) -> Self { let exit_updated_slot_server = Arc::new(AtomicBool::new(false)); @@ -43,7 +43,7 @@ impl SlotStatusObserver { } fn run_bank_notification_receiver( - bank_notification_receiver: Receiver, + bank_notification_receiver: Receiver, exit: Arc, slot_status_notifier: SlotStatusNotifier, ) -> JoinHandle<()> { @@ -53,23 +53,23 @@ impl SlotStatusObserver { while !exit.load(Ordering::Relaxed) { if let Ok(slot) = bank_notification_receiver.recv() { match slot { - BankNotification::OptimisticallyConfirmed(slot) => { + SlotNotification::OptimisticallyConfirmed(slot) => { slot_status_notifier .read() .unwrap() .notify_slot_confirmed(slot, None); } - BankNotification::Frozen(bank) => { + SlotNotification::Frozen((slot, parent)) => { slot_status_notifier .read() .unwrap() - .notify_slot_processed(bank.slot(), Some(bank.parent_slot())); + .notify_slot_processed(slot, Some(parent)); } - BankNotification::Root(bank) => { + SlotNotification::Root((slot, parent)) => { slot_status_notifier .read() .unwrap() - .notify_slot_rooted(bank.slot(), Some(bank.parent_slot())); + .notify_slot_rooted(slot, Some(parent)); } } } diff --git a/rpc/src/optimistically_confirmed_bank_tracker.rs b/rpc/src/optimistically_confirmed_bank_tracker.rs index 19e74df898244d..ca112330439b70 100644 --- a/rpc/src/optimistically_confirmed_bank_tracker.rs +++ b/rpc/src/optimistically_confirmed_bank_tracker.rs @@ -1,6 +1,12 @@ //! The `optimistically_confirmed_bank_tracker` module implements a threaded service to track the //! most recent optimistically confirmed bank for use in rpc services, and triggers gossip -//! subscription notifications +//! subscription notifications. +//! This module also supports notifying of slot status for subscribers using the SlotNotificationSender. +//! It receives the BankNotification events, transforms them into SlotNotification and sends them via +//! SlotNotificationSender in the following way: +//! BankNotification::OptimisticallyConfirmed --> SlotNotification::OptimisticallyConfirmed +//! BankNotification::Frozen --> SlotNotification::Frozen +//! BankNotification::NewRootedChain --> SlotNotification::Root for the roots in the chain. use { crate::rpc_subscriptions::RpcSubscriptions, @@ -35,7 +41,18 @@ impl OptimisticallyConfirmedBank { pub enum BankNotification { OptimisticallyConfirmed(Slot), Frozen(Arc), - Root(Arc), + NewRootBank(Arc), + /// The newly rooted slot chain including the parent slot of the oldest bank in the rooted chain. + NewRootedChain(Vec), +} + +#[derive(Clone, Debug)] +pub enum SlotNotification { + OptimisticallyConfirmed(Slot), + /// The (Slot, Parent Slot) pair for the slot frozen + Frozen((Slot, Slot)), + /// The (Slot, Parent Slot) pair for the root slot + Root((Slot, Slot)), } impl std::fmt::Debug for BankNotification { @@ -45,7 +62,8 @@ impl std::fmt::Debug for BankNotification { write!(f, "OptimisticallyConfirmed({:?})", slot) } BankNotification::Frozen(bank) => write!(f, "Frozen({})", bank.slot()), - BankNotification::Root(bank) => write!(f, "Root({})", bank.slot()), + BankNotification::NewRootBank(bank) => write!(f, "Root({})", bank.slot()), + BankNotification::NewRootedChain(chain) => write!(f, "RootedChain({chain:?})"), } } } @@ -53,6 +71,15 @@ impl std::fmt::Debug for BankNotification { pub type BankNotificationReceiver = Receiver; pub type BankNotificationSender = Sender; +#[derive(Clone)] +pub struct BankNotificationSenderConfig { + pub sender: BankNotificationSender, + pub should_send_parents: bool, +} + +pub type SlotNotificationReceiver = Receiver; +pub type SlotNotificationSender = Sender; + pub struct OptimisticallyConfirmedBankTracker { thread_hdl: JoinHandle<()>, } @@ -64,12 +91,13 @@ impl OptimisticallyConfirmedBankTracker { bank_forks: Arc>, optimistically_confirmed_bank: Arc>, subscriptions: Arc, - bank_notification_subscribers: Option>>>, + slot_notification_subscribers: Option>>>, ) -> Self { let exit_ = exit.clone(); let mut pending_optimistically_confirmed_banks = HashSet::new(); let mut last_notified_confirmed_slot: Slot = 0; let mut highest_confirmed_slot: Slot = 0; + let mut newest_root_slot: Slot = 0; let thread_hdl = Builder::new() .name("solOpConfBnkTrk".to_string()) .spawn(move || loop { @@ -85,7 +113,8 @@ impl OptimisticallyConfirmedBankTracker { &mut pending_optimistically_confirmed_banks, &mut last_notified_confirmed_slot, &mut highest_confirmed_slot, - &bank_notification_subscribers, + &mut newest_root_slot, + &slot_notification_subscribers, ) { break; } @@ -102,7 +131,8 @@ impl OptimisticallyConfirmedBankTracker { pending_optimistically_confirmed_banks: &mut HashSet, last_notified_confirmed_slot: &mut Slot, highest_confirmed_slot: &mut Slot, - bank_notification_subscribers: &Option>>>, + newest_root_slot: &mut Slot, + slot_notification_subscribers: &Option>>>, ) -> Result<(), RecvTimeoutError> { let notification = receiver.recv_timeout(Duration::from_secs(1))?; Self::process_notification( @@ -113,17 +143,18 @@ impl OptimisticallyConfirmedBankTracker { pending_optimistically_confirmed_banks, last_notified_confirmed_slot, highest_confirmed_slot, - bank_notification_subscribers, + newest_root_slot, + slot_notification_subscribers, ); Ok(()) } fn notify_slot_status( - bank_notification_subscribers: &Option>>>, - notification: BankNotification, + slot_notification_subscribers: &Option>>>, + notification: SlotNotification, ) { - if let Some(bank_notification_subscribers) = bank_notification_subscribers { - for sender in bank_notification_subscribers.read().unwrap().iter() { + if let Some(slot_notification_subscribers) = slot_notification_subscribers { + for sender in slot_notification_subscribers.read().unwrap().iter() { match sender.send(notification.clone()) { Ok(_) => {} Err(err) => { @@ -143,7 +174,7 @@ impl OptimisticallyConfirmedBankTracker { bank: &Arc, last_notified_confirmed_slot: &mut Slot, pending_optimistically_confirmed_banks: &mut HashSet, - bank_notification_subscribers: &Option>>>, + slot_notification_subscribers: &Option>>>, ) { if bank.is_frozen() { if bank.slot() > *last_notified_confirmed_slot { @@ -154,8 +185,8 @@ impl OptimisticallyConfirmedBankTracker { subscriptions.notify_gossip_subscribers(bank.slot()); *last_notified_confirmed_slot = bank.slot(); Self::notify_slot_status( - bank_notification_subscribers, - BankNotification::OptimisticallyConfirmed(bank.slot()), + slot_notification_subscribers, + SlotNotification::OptimisticallyConfirmed(bank.slot()), ); } } else if bank.slot() > bank_forks.read().unwrap().root_bank().slot() { @@ -171,7 +202,7 @@ impl OptimisticallyConfirmedBankTracker { slot_threshold: Slot, last_notified_confirmed_slot: &mut Slot, pending_optimistically_confirmed_banks: &mut HashSet, - bank_notification_subscribers: &Option>>>, + slot_notification_subscribers: &Option>>>, ) { for confirmed_bank in bank.clone().parents_inclusive().iter().rev() { if confirmed_bank.slot() > slot_threshold { @@ -185,8 +216,36 @@ impl OptimisticallyConfirmedBankTracker { confirmed_bank, last_notified_confirmed_slot, pending_optimistically_confirmed_banks, - bank_notification_subscribers, + slot_notification_subscribers, + ); + } + } + } + + fn notify_new_root_slots( + roots: &mut Vec, + newest_root_slot: &mut Slot, + slot_notification_subscribers: &Option>>>, + ) { + if slot_notification_subscribers.is_none() { + return; + } + roots.sort_unstable(); + // The chain are sorted already and must contain at least the parent of a newly rooted slot as the first element + assert!(roots.len() >= 2); + for i in 1..roots.len() { + let root = roots[i]; + if root > *newest_root_slot { + let parent = roots[i - 1]; + debug!( + "Doing SlotNotification::Root for root {}, parent: {}", + root, parent + ); + Self::notify_slot_status( + slot_notification_subscribers, + SlotNotification::Root((root, parent)), ); + *newest_root_slot = root; } } } @@ -199,7 +258,8 @@ impl OptimisticallyConfirmedBankTracker { pending_optimistically_confirmed_banks: &mut HashSet, last_notified_confirmed_slot: &mut Slot, highest_confirmed_slot: &mut Slot, - bank_notification_subscribers: &Option>>>, + newest_root_slot: &mut Slot, + slot_notification_subscribers: &Option>>>, ) { debug!("received bank notification: {:?}", notification); match notification { @@ -222,7 +282,7 @@ impl OptimisticallyConfirmedBankTracker { *highest_confirmed_slot, last_notified_confirmed_slot, pending_optimistically_confirmed_banks, - bank_notification_subscribers, + slot_notification_subscribers, ); *highest_confirmed_slot = slot; @@ -258,8 +318,8 @@ impl OptimisticallyConfirmedBankTracker { }); Self::notify_slot_status( - bank_notification_subscribers, - BankNotification::Frozen(bank.clone()), + slot_notification_subscribers, + SlotNotification::Frozen((bank.slot(), bank.parent_slot())), ); } @@ -276,7 +336,7 @@ impl OptimisticallyConfirmedBankTracker { *last_notified_confirmed_slot, last_notified_confirmed_slot, pending_optimistically_confirmed_banks, - bank_notification_subscribers, + slot_notification_subscribers, ); let mut w_optimistically_confirmed_bank = @@ -287,11 +347,7 @@ impl OptimisticallyConfirmedBankTracker { drop(w_optimistically_confirmed_bank); } } - BankNotification::Root(bank) => { - Self::notify_slot_status( - bank_notification_subscribers, - BankNotification::Root(bank.clone()), - ); + BankNotification::NewRootBank(bank) => { let root_slot = bank.slot(); let mut w_optimistically_confirmed_bank = optimistically_confirmed_bank.write().unwrap(); @@ -299,8 +355,16 @@ impl OptimisticallyConfirmedBankTracker { w_optimistically_confirmed_bank.bank = bank; } drop(w_optimistically_confirmed_bank); + pending_optimistically_confirmed_banks.retain(|&s| s > root_slot); } + BankNotification::NewRootedChain(mut roots) => { + Self::notify_new_root_slots( + &mut roots, + newest_root_slot, + slot_notification_subscribers, + ); + } } } @@ -317,6 +381,7 @@ impl OptimisticallyConfirmedBankTracker { mod tests { use { super::*, + crossbeam_channel::unbounded, solana_ledger::genesis_utils::{create_genesis_config, GenesisConfigInfo}, solana_runtime::{ accounts_background_service::AbsRequestSender, commitment::BlockCommitmentCache, @@ -325,6 +390,26 @@ mod tests { std::sync::atomic::AtomicU64, }; + /// Given a bank get the parent slot chains, this include the parent slot of the oldest parent bank. + fn get_parent_chains(bank: &Arc) -> Vec { + let mut parents = bank.parents(); + let oldest_parent = parents.last().map(|last| last.parent_slot()); + parents.push(bank.clone()); + let mut rooted_slots: Vec<_> = parents.iter().map(|bank| bank.slot()).collect(); + rooted_slots.push(oldest_parent.unwrap_or_else(|| bank.parent_slot())); + rooted_slots + } + + /// Receive the Root notifications from the channel, if no item received within 100 ms, break and return all + /// of those received. + fn get_root_notifications(receiver: &Receiver) -> Vec { + let mut notifications = Vec::new(); + while let Ok(notification) = receiver.recv_timeout(Duration::from_millis(100)) { + notifications.push(notification); + } + notifications + } + #[test] fn test_process_notification() { let exit = Arc::new(AtomicBool::new(false)); @@ -360,6 +445,8 @@ mod tests { assert_eq!(optimistically_confirmed_bank.read().unwrap().bank.slot(), 0); let mut highest_confirmed_slot: Slot = 0; + let mut newest_root_slot: Slot = 0; + let mut last_notified_confirmed_slot: Slot = 0; OptimisticallyConfirmedBankTracker::process_notification( BankNotification::OptimisticallyConfirmed(2), @@ -369,6 +456,7 @@ mod tests { &mut pending_optimistically_confirmed_banks, &mut last_notified_confirmed_slot, &mut highest_confirmed_slot, + &mut newest_root_slot, &None, ); assert_eq!(optimistically_confirmed_bank.read().unwrap().bank.slot(), 2); @@ -383,6 +471,7 @@ mod tests { &mut pending_optimistically_confirmed_banks, &mut last_notified_confirmed_slot, &mut highest_confirmed_slot, + &mut newest_root_slot, &None, ); assert_eq!(optimistically_confirmed_bank.read().unwrap().bank.slot(), 2); @@ -397,6 +486,7 @@ mod tests { &mut pending_optimistically_confirmed_banks, &mut last_notified_confirmed_slot, &mut highest_confirmed_slot, + &mut newest_root_slot, &None, ); assert_eq!(optimistically_confirmed_bank.read().unwrap().bank.slot(), 2); @@ -416,6 +506,7 @@ mod tests { &mut pending_optimistically_confirmed_banks, &mut last_notified_confirmed_slot, &mut highest_confirmed_slot, + &mut newest_root_slot, &None, ); assert_eq!(optimistically_confirmed_bank.read().unwrap().bank.slot(), 3); @@ -434,6 +525,7 @@ mod tests { &mut pending_optimistically_confirmed_banks, &mut last_notified_confirmed_slot, &mut highest_confirmed_slot, + &mut newest_root_slot, &None, ); assert_eq!(optimistically_confirmed_bank.read().unwrap().bank.slot(), 3); @@ -445,20 +537,48 @@ mod tests { let bank5 = Bank::new_from_parent(&bank4, &Pubkey::default(), 5); bank_forks.write().unwrap().insert(bank5); let bank5 = bank_forks.read().unwrap().get(5).unwrap(); + + let mut bank_notification_senders = Vec::new(); + let (sender, receiver) = unbounded(); + bank_notification_senders.push(sender); + + let subscribers = Some(Arc::new(RwLock::new(bank_notification_senders))); + let parent_roots = get_parent_chains(&bank5); OptimisticallyConfirmedBankTracker::process_notification( - BankNotification::Root(bank5), + BankNotification::NewRootBank(bank5), &bank_forks, &optimistically_confirmed_bank, &subscriptions, &mut pending_optimistically_confirmed_banks, &mut last_notified_confirmed_slot, &mut highest_confirmed_slot, - &None, + &mut newest_root_slot, + &subscribers, ); assert_eq!(optimistically_confirmed_bank.read().unwrap().bank.slot(), 5); assert_eq!(pending_optimistically_confirmed_banks.len(), 0); assert!(!pending_optimistically_confirmed_banks.contains(&4)); assert_eq!(highest_confirmed_slot, 4); + // The newest_root_slot is updated via NewRootedChain only + assert_eq!(newest_root_slot, 0); + + OptimisticallyConfirmedBankTracker::process_notification( + BankNotification::NewRootedChain(parent_roots), + &bank_forks, + &optimistically_confirmed_bank, + &subscriptions, + &mut pending_optimistically_confirmed_banks, + &mut last_notified_confirmed_slot, + &mut highest_confirmed_slot, + &mut newest_root_slot, + &subscribers, + ); + + assert_eq!(newest_root_slot, 5); + + // Obtain the root notifications, we expect 5, including that for bank5. + let notifications = get_root_notifications(&receiver); + assert_eq!(notifications.len(), 5); // Banks <= root do not get added to pending list, even if not frozen let bank5 = bank_forks.read().unwrap().get(5).unwrap(); @@ -479,11 +599,52 @@ mod tests { &mut pending_optimistically_confirmed_banks, &mut last_notified_confirmed_slot, &mut highest_confirmed_slot, + &mut newest_root_slot, &None, ); assert_eq!(optimistically_confirmed_bank.read().unwrap().bank.slot(), 5); assert_eq!(pending_optimistically_confirmed_banks.len(), 0); assert!(!pending_optimistically_confirmed_banks.contains(&6)); assert_eq!(highest_confirmed_slot, 4); + assert_eq!(newest_root_slot, 5); + + let bank7 = bank_forks.read().unwrap().get(7).unwrap(); + + let parent_roots = get_parent_chains(&bank7); + + OptimisticallyConfirmedBankTracker::process_notification( + BankNotification::NewRootBank(bank7), + &bank_forks, + &optimistically_confirmed_bank, + &subscriptions, + &mut pending_optimistically_confirmed_banks, + &mut last_notified_confirmed_slot, + &mut highest_confirmed_slot, + &mut newest_root_slot, + &subscribers, + ); + assert_eq!(optimistically_confirmed_bank.read().unwrap().bank.slot(), 7); + assert_eq!(pending_optimistically_confirmed_banks.len(), 0); + assert!(!pending_optimistically_confirmed_banks.contains(&6)); + assert_eq!(highest_confirmed_slot, 4); + assert_eq!(newest_root_slot, 5); + + OptimisticallyConfirmedBankTracker::process_notification( + BankNotification::NewRootedChain(parent_roots), + &bank_forks, + &optimistically_confirmed_bank, + &subscriptions, + &mut pending_optimistically_confirmed_banks, + &mut last_notified_confirmed_slot, + &mut highest_confirmed_slot, + &mut newest_root_slot, + &subscribers, + ); + + assert_eq!(newest_root_slot, 7); + + // Obtain the root notifications, we expect 1, which is for bank7 only as its parent bank5 is already notified. + let notifications = get_root_notifications(&receiver); + assert_eq!(notifications.len(), 1); } } diff --git a/rpc/src/rpc.rs b/rpc/src/rpc.rs index b2ad0e76ed504d..d0df56aaefac5d 100644 --- a/rpc/src/rpc.rs +++ b/rpc/src/rpc.rs @@ -8311,6 +8311,7 @@ pub mod tests { let slot: Slot = serde_json::from_value(json["result"].clone()).unwrap(); assert_eq!(slot, 0); let mut highest_confirmed_slot: Slot = 0; + let mut highest_root_slot: Slot = 0; let mut last_notified_confirmed_slot: Slot = 0; OptimisticallyConfirmedBankTracker::process_notification( @@ -8321,6 +8322,7 @@ pub mod tests { &mut pending_optimistically_confirmed_banks, &mut last_notified_confirmed_slot, &mut highest_confirmed_slot, + &mut highest_root_slot, &None, ); let req = @@ -8339,6 +8341,7 @@ pub mod tests { &mut pending_optimistically_confirmed_banks, &mut last_notified_confirmed_slot, &mut highest_confirmed_slot, + &mut highest_root_slot, &None, ); let req = @@ -8357,6 +8360,7 @@ pub mod tests { &mut pending_optimistically_confirmed_banks, &mut last_notified_confirmed_slot, &mut highest_confirmed_slot, + &mut highest_root_slot, &None, ); let req = @@ -8376,6 +8380,7 @@ pub mod tests { &mut pending_optimistically_confirmed_banks, &mut last_notified_confirmed_slot, &mut highest_confirmed_slot, + &mut highest_root_slot, &None, ); let req = diff --git a/rpc/src/rpc_subscriptions.rs b/rpc/src/rpc_subscriptions.rs index 852d5e89520a1e..fac596d8728901 100644 --- a/rpc/src/rpc_subscriptions.rs +++ b/rpc/src/rpc_subscriptions.rs @@ -2018,6 +2018,7 @@ pub(crate) mod tests { })); let mut highest_confirmed_slot: Slot = 0; + let mut highest_root_slot: Slot = 0; let mut last_notified_confirmed_slot: Slot = 0; // Optimistically notifying slot 3 without notifying slot 1 and 2, bank3 is unfrozen, we expect // to see transaction for alice and bob to be notified in order. @@ -2029,6 +2030,7 @@ pub(crate) mod tests { &mut pending_optimistically_confirmed_banks, &mut last_notified_confirmed_slot, &mut highest_confirmed_slot, + &mut highest_root_slot, &None, ); @@ -2079,6 +2081,7 @@ pub(crate) mod tests { &mut pending_optimistically_confirmed_banks, &mut last_notified_confirmed_slot, &mut highest_confirmed_slot, + &mut highest_root_slot, &None, ); @@ -2187,6 +2190,7 @@ pub(crate) mod tests { })); let mut highest_confirmed_slot: Slot = 0; + let mut highest_root_slot: Slot = 0; let mut last_notified_confirmed_slot: Slot = 0; // Optimistically notifying slot 3 without notifying slot 1 and 2, bank3 is not in the bankforks, we do not // expect to see any RPC notifications. @@ -2198,6 +2202,7 @@ pub(crate) mod tests { &mut pending_optimistically_confirmed_banks, &mut last_notified_confirmed_slot, &mut highest_confirmed_slot, + &mut highest_root_slot, &None, ); @@ -2301,6 +2306,7 @@ pub(crate) mod tests { })); let mut highest_confirmed_slot: Slot = 0; + let mut highest_root_slot: Slot = 0; let mut last_notified_confirmed_slot: Slot = 0; // Optimistically notifying slot 3 without notifying slot 1 and 2, bank3 is not in the bankforks, we expect // to see transaction for alice and bob to be notified only when bank3 is added to the fork and @@ -2313,6 +2319,7 @@ pub(crate) mod tests { &mut pending_optimistically_confirmed_banks, &mut last_notified_confirmed_slot, &mut highest_confirmed_slot, + &mut highest_root_slot, &None, ); @@ -2365,6 +2372,7 @@ pub(crate) mod tests { &mut pending_optimistically_confirmed_banks, &mut last_notified_confirmed_slot, &mut highest_confirmed_slot, + &mut highest_root_slot, &None, ); @@ -2789,6 +2797,7 @@ pub(crate) mod tests { // First, notify the unfrozen bank first to queue pending notification let mut highest_confirmed_slot: Slot = 0; + let mut highest_root_slot: Slot = 0; let mut last_notified_confirmed_slot: Slot = 0; OptimisticallyConfirmedBankTracker::process_notification( BankNotification::OptimisticallyConfirmed(2), @@ -2798,6 +2807,7 @@ pub(crate) mod tests { &mut pending_optimistically_confirmed_banks, &mut last_notified_confirmed_slot, &mut highest_confirmed_slot, + &mut highest_root_slot, &None, ); @@ -2811,6 +2821,7 @@ pub(crate) mod tests { &mut pending_optimistically_confirmed_banks, &mut last_notified_confirmed_slot, &mut highest_confirmed_slot, + &mut highest_root_slot, &None, ); @@ -2861,6 +2872,7 @@ pub(crate) mod tests { &mut pending_optimistically_confirmed_banks, &mut last_notified_confirmed_slot, &mut highest_confirmed_slot, + &mut highest_root_slot, &None, ); let response = receiver1.recv(); From de5faf8f7811a89a913a91db1af3f1c4fba00748 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Thu, 1 Jun 2023 09:57:55 -0700 Subject: [PATCH 431/465] v1.14: Relax gossip to banking stage filtering to allow refreshed votes (backport of #31879) (#31906) Relax gossip to banking stage filtering to allow refreshed votes (#31879) (cherry picked from commit 1b79875f511de1060a2880a49ecad12143654876) Co-authored-by: Ashwin Sekar --- core/src/verified_vote_packets.rs | 138 ++++++++++++++++++++++++++-- programs/vote/src/vote_state/mod.rs | 4 + 2 files changed, 135 insertions(+), 7 deletions(-) diff --git a/core/src/verified_vote_packets.rs b/core/src/verified_vote_packets.rs index 709db89d9b1197..47cfabfacece3e 100644 --- a/core/src/verified_vote_packets.rs +++ b/core/src/verified_vote_packets.rs @@ -7,7 +7,7 @@ use { }, solana_sdk::{ account::from_account, - clock::Slot, + clock::{Slot, UnixTimestamp}, feature_set::{allow_votes_to_directly_update_vote_state, FeatureSet}, hash::Hash, pubkey::Pubkey, @@ -133,6 +133,7 @@ impl<'a> Iterator for ValidatorGossipVotesIterator<'a> { hash, packet_batch, signature, + .. }) => self .filter_vote(slot, hash, packet_batch, signature) .map(|packet| vec![packet]) @@ -165,6 +166,7 @@ pub struct GossipVote { hash: Hash, packet_batch: PacketBatch, signature: Signature, + timestamp: Option, } pub enum SingleValidatorVotes { @@ -180,6 +182,13 @@ impl SingleValidatorVotes { } } + fn get_latest_timestamp(&self) -> Option { + match self { + Self::FullTowerVote(vote) => vote.timestamp, + _ => None, + } + } + #[cfg(test)] fn len(&self) -> usize { match self { @@ -224,15 +233,24 @@ impl VerifiedVotePackets { } let slot = vote.last_voted_slot().unwrap(); let hash = vote.hash(); + let timestamp = vote.timestamp(); match (vote, is_full_tower_vote_enabled) { (VoteStateUpdate(_), true) => { - let latest_gossip_slot = match self.0.get(&vote_account_key) { - Some(vote) => vote.get_latest_gossip_slot(), - _ => 0, - }; + let (latest_gossip_slot, latest_timestamp) = + self.0.get(&vote_account_key).map_or((0, None), |vote| { + (vote.get_latest_gossip_slot(), vote.get_latest_timestamp()) + }); // Since votes are not incremental, we keep only the latest vote - if slot > latest_gossip_slot { + // If the vote is for the same slot we will only allow it if + // it has a later timestamp (refreshed vote) + // + // Timestamp can be None if something was wrong with the senders clock. + // We directly compare as Options to ensure that votes with proper + // timestamps have precedence (Some is > None). + if slot > latest_gossip_slot + || ((slot == latest_gossip_slot) && (timestamp > latest_timestamp)) + { self.0.insert( vote_account_key, FullTowerVote(GossipVote { @@ -240,6 +258,7 @@ impl VerifiedVotePackets { hash, packet_batch, signature, + timestamp, }), ); } @@ -259,6 +278,7 @@ impl VerifiedVotePackets { hash, packet_batch, signature, + .. } = std::mem::take(gossip_vote); votes.insert((slot, hash), (packet_batch, signature)); self.0.insert(vote_account_key, IncrementalVotes(votes)); @@ -296,7 +316,7 @@ mod tests { use { super::{SingleValidatorVotes::*, *}, crate::{result::Error, vote_simulator::VoteSimulator}, - crossbeam_channel::unbounded, + crossbeam_channel::{unbounded, Receiver, Sender}, solana_perf::packet::Packet, solana_sdk::slot_hashes::MAX_ENTRIES, solana_vote_program::vote_state::{Lockout, Vote, VoteStateUpdate}, @@ -678,6 +698,110 @@ mod tests { ); } + fn send_vote_state_update_and_process( + s: &Sender>, + r: &Receiver>, + vote: VoteStateUpdate, + vote_account_key: Pubkey, + feature_set: Option>, + verified_vote_packets: &mut VerifiedVotePackets, + ) -> GossipVote { + s.send(vec![VerifiedVoteMetadata { + vote_account_key, + vote: VoteTransaction::from(vote), + packet_batch: PacketBatch::default(), + signature: Signature::new(&[1u8; 64]), + }]) + .unwrap(); + verified_vote_packets + .receive_and_process_vote_packets(r, true, feature_set) + .unwrap(); + match verified_vote_packets.0.get(&vote_account_key).unwrap() { + SingleValidatorVotes::FullTowerVote(gossip_vote) => gossip_vote.clone(), + _ => panic!("Received incremental vote"), + } + } + + #[test] + fn test_latest_vote_tie_break_with_feature() { + let (s, r) = unbounded(); + let vote_account_key = solana_sdk::pubkey::new_rand(); + + // Send identical vote state updates with different timestamps + let mut vote = VoteStateUpdate::from(vec![(2, 4), (4, 3), (6, 2), (7, 1)]); + vote.timestamp = Some(5); + + let mut vote_later_ts = vote.clone(); + vote_later_ts.timestamp = Some(6); + + let mut vote_earlier_ts = vote.clone(); + vote_earlier_ts.timestamp = Some(4); + + let mut vote_no_ts = vote.clone(); + vote_no_ts.timestamp = None; + + let mut verified_vote_packets = VerifiedVotePackets(HashMap::new()); + let mut feature_set = FeatureSet::default(); + feature_set.activate(&allow_votes_to_directly_update_vote_state::id(), 0); + let feature_set = Some(Arc::new(feature_set)); + + // Original vote + let GossipVote { + slot, timestamp, .. + } = send_vote_state_update_and_process( + &s, + &r, + vote.clone(), + vote_account_key, + feature_set.clone(), + &mut verified_vote_packets, + ); + assert_eq!(slot, vote.last_voted_slot().unwrap()); + assert_eq!(timestamp, vote.timestamp); + + // Same vote with later timestamp should override + let GossipVote { + slot, timestamp, .. + } = send_vote_state_update_and_process( + &s, + &r, + vote_later_ts.clone(), + vote_account_key, + feature_set.clone(), + &mut verified_vote_packets, + ); + assert_eq!(slot, vote_later_ts.last_voted_slot().unwrap()); + assert_eq!(timestamp, vote_later_ts.timestamp); + + // Same vote with earlier timestamp should not override + let GossipVote { + slot, timestamp, .. + } = send_vote_state_update_and_process( + &s, + &r, + vote_earlier_ts, + vote_account_key, + feature_set.clone(), + &mut verified_vote_packets, + ); + assert_eq!(slot, vote_later_ts.last_voted_slot().unwrap()); + assert_eq!(timestamp, vote_later_ts.timestamp); + + // Same vote with no timestamp should not override + let GossipVote { + slot, timestamp, .. + } = send_vote_state_update_and_process( + &s, + &r, + vote_no_ts, + vote_account_key, + feature_set, + &mut verified_vote_packets, + ); + assert_eq!(slot, vote_later_ts.last_voted_slot().unwrap()); + assert_eq!(timestamp, vote_later_ts.timestamp); + } + #[test] fn test_latest_vote_feature_upgrade() { let (s, r) = unbounded(); diff --git a/programs/vote/src/vote_state/mod.rs b/programs/vote/src/vote_state/mod.rs index e36f4ac53be402..f374ca434032f0 100644 --- a/programs/vote/src/vote_state/mod.rs +++ b/programs/vote/src/vote_state/mod.rs @@ -241,6 +241,10 @@ impl VoteStateUpdate { pub fn slots(&self) -> Vec { self.lockouts.iter().map(|lockout| lockout.slot).collect() } + + pub fn last_voted_slot(&self) -> Option { + self.lockouts.back().map(|l| l.slot) + } } #[derive(Default, Serialize, Deserialize, Debug, PartialEq, Eq, Clone, Copy)] From 3f381ddd68f9a5a1e9bcbd9b8d8dfb679c8cb4e8 Mon Sep 17 00:00:00 2001 From: Trent Nelson Date: Fri, 2 Jun 2023 01:02:14 -0600 Subject: [PATCH 432/465] accounts_db: demote spammy log message (#31914) --- runtime/src/accounts_db.rs | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/runtime/src/accounts_db.rs b/runtime/src/accounts_db.rs index aab6985ca8b451..137f74b6657702 100644 --- a/runtime/src/accounts_db.rs +++ b/runtime/src/accounts_db.rs @@ -8990,9 +8990,14 @@ impl AccountsDb { if not_sparse || too_small_to_shrink { return 0; } - info!( + trace!( "shrink_stale_slot ({}): not_sparse: {} count: {}/{} byte: {}/{}", - slot, not_sparse, alive_count, stored_count, written_bytes, total_bytes, + slot, + not_sparse, + alive_count, + stored_count, + written_bytes, + total_bytes, ); } From a76152d907bed80292ea9ff21a3fd446e8662165 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Wed, 7 Jun 2023 10:34:07 -0700 Subject: [PATCH 433/465] v1.14: Use QUIC Retry packets during handshake (backport of #31802) (#31999) Use QUIC Retry packets during handshake (#31802) Have the Quic server send a Retry packet to verify client control of the source IP (cherry picked from commit 36222a44d72e7c511769d1929ba28768a26d3988) Co-authored-by: ryleung-solana <91908731+ryleung-solana@users.noreply.github.com> --- streamer/src/quic.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/streamer/src/quic.rs b/streamer/src/quic.rs index 922b417ef2d3d6..f7d4760171f138 100644 --- a/streamer/src/quic.rs +++ b/streamer/src/quic.rs @@ -78,6 +78,7 @@ pub(crate) fn configure_server( server_tls_config.alpn_protocols = vec![ALPN_TPU_PROTOCOL_ID.to_vec()]; let mut server_config = ServerConfig::with_crypto(Arc::new(server_tls_config)); + server_config.use_retry(true); let config = Arc::get_mut(&mut server_config.transport).unwrap(); // QUIC_MAX_CONCURRENT_STREAMS doubled, which was found to improve reliability From 38b22ddb13252b16fc8d3cf72f978a2b5d287371 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Wed, 14 Jun 2023 00:06:42 +0000 Subject: [PATCH 434/465] v1.14: bank_send_loop: Get feature flag from root bank (backport of #31954) (#32112) bank_send_loop: Get feature flag from root bank (cherry picked from commit dd379bfad8601c5ca6fd546131fbd3404d708b43) # Conflicts: # core/src/cluster_info_vote_listener.rs Co-authored-by: Ashwin Sekar --- core/src/cluster_info_vote_listener.rs | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/core/src/cluster_info_vote_listener.rs b/core/src/cluster_info_vote_listener.rs index 55d2d1aa3857a1..ef06d9806b81f3 100644 --- a/core/src/cluster_info_vote_listener.rs +++ b/core/src/cluster_info_vote_listener.rs @@ -265,6 +265,7 @@ impl ClusterInfoVoteListener { .unwrap() }; let exit_ = exit.clone(); + let bank_forks_clone = bank_forks.clone(); let bank_send_thread = Builder::new() .name("solCiBankSend".to_string()) .spawn(move || { @@ -273,6 +274,7 @@ impl ClusterInfoVoteListener { verified_vote_label_packets_receiver, poh_recorder, &verified_packets_sender, + bank_forks_clone, ); }) .unwrap(); @@ -377,6 +379,7 @@ impl ClusterInfoVoteListener { verified_vote_label_packets_receiver: VerifiedLabelVotePacketsReceiver, poh_recorder: Arc>, verified_packets_sender: &BankingPacketSender, + bank_forks: Arc>, ) -> Result<()> { let mut verified_vote_packets = VerifiedVotePackets::default(); let mut time_since_lock = Instant::now(); @@ -391,11 +394,7 @@ impl ClusterInfoVoteListener { .read() .unwrap() .would_be_leader(3 * slot_hashes::MAX_ENTRIES as u64 * DEFAULT_TICKS_PER_SLOT); - let feature_set = poh_recorder - .read() - .unwrap() - .bank() - .map(|bank| bank.feature_set.clone()); + let feature_set = Some(bank_forks.read().unwrap().root_bank().feature_set.clone()); if let Err(e) = verified_vote_packets.receive_and_process_vote_packets( &verified_vote_label_packets_receiver, From 8708d535a4bc4fff225b95e9b1f3768413f519b6 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Thu, 15 Jun 2023 10:24:50 -0600 Subject: [PATCH 435/465] v1.14: ci: discard misleading `cargo uninstall` errors in bk post-checkout hook (backport of #32139) (#32140) ci: discard misleading `cargo uninstall` errors in bk post-checkout hook (#32139) (cherry picked from commit 26be1a3a0c0748df1b89c9ec7f341be469e6ffe8) Co-authored-by: Trent Nelson --- .buildkite/hooks/post-checkout | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.buildkite/hooks/post-checkout b/.buildkite/hooks/post-checkout index 1a680832ce2f15..fefa4075828087 100644 --- a/.buildkite/hooks/post-checkout +++ b/.buildkite/hooks/post-checkout @@ -37,6 +37,6 @@ source ci/env.sh # HACK: These are in our docker images, need to be removed from CARGO_HOME # because we try to cache downloads across builds with CARGO_HOME # cargo lacks a facility for "system" tooling, always tries CARGO_HOME first -cargo uninstall cargo-audit || true -cargo uninstall svgbob_cli || true -cargo uninstall mdbook || true +cargo uninstall cargo-audit &>/dev/null || true +cargo uninstall svgbob_cli &>/dev/null || true +cargo uninstall mdbook &>/dev/null || true From 5704dd6e37a324186787991aad5ee7806cf066fd Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Thu, 15 Jun 2023 19:39:29 +0000 Subject: [PATCH 436/465] v1.14: Increment timestamp on refreshed votes (backport of #31908) (#32156) Increment timestamp on refreshed votes (#31908) (cherry picked from commit 01d3546de069fa3f27bf74b3cbac75036e597fe8) Co-authored-by: Ashwin Sekar --- core/src/consensus.rs | 71 ++++++++++++++++++++++++++++++++++++++++ core/src/replay_stage.rs | 5 +-- 2 files changed, 74 insertions(+), 2 deletions(-) diff --git a/core/src/consensus.rs b/core/src/consensus.rs index 2fc7b1f93d51fb..ab88fb418fcef9 100644 --- a/core/src/consensus.rs +++ b/core/src/consensus.rs @@ -421,6 +421,39 @@ impl Tower { self.last_vote_tx_blockhash } + pub fn refresh_last_vote_timestamp(&mut self, heaviest_slot_on_same_fork: Slot) { + let timestamp = if let Some(last_vote_timestamp) = self.last_vote.timestamp() { + // To avoid a refreshed vote tx getting caught in deduplication filters, + // we need to update timestamp. Increment by smallest amount to avoid skewing + // the Timestamp Oracle. + last_vote_timestamp.saturating_add(1) + } else { + // If the previous vote did not send a timestamp due to clock error, + // use the last good timestamp + 1 + self.last_timestamp.timestamp.saturating_add(1) + }; + + if let Some(last_voted_slot) = self.last_vote.last_voted_slot() { + if heaviest_slot_on_same_fork <= last_voted_slot { + warn!( + "Trying to refresh timestamp for vote on {last_voted_slot} + using smaller heaviest bank {heaviest_slot_on_same_fork}" + ); + return; + } + self.last_timestamp = BlockTimestamp { + slot: last_voted_slot, + timestamp, + }; + self.last_vote.set_timestamp(Some(timestamp)); + } else { + warn!( + "Trying to refresh timestamp for last vote on heaviest bank on same fork + {heaviest_slot_on_same_fork}, but there is no vote to refresh" + ); + } + } + pub fn refresh_last_vote_tx_blockhash(&mut self, new_vote_tx_blockhash: Hash) { self.last_vote_tx_blockhash = new_vote_tx_blockhash; } @@ -2575,6 +2608,44 @@ pub mod test { assert!(tower.maybe_timestamp(3).is_none()); // slot 3 gets no timestamp } + #[test] + fn test_refresh_last_vote_timestamp() { + let mut tower = Tower::default(); + + // Tower has no vote or timestamp + tower.last_vote.set_timestamp(None); + tower.refresh_last_vote_timestamp(5); + assert_eq!(tower.last_vote.timestamp(), None); + assert_eq!(tower.last_timestamp.slot, 0); + assert_eq!(tower.last_timestamp.timestamp, 0); + + // Tower has vote no timestamp, but is greater than heaviest_bank + tower.last_vote = + VoteTransaction::from(VoteStateUpdate::from(vec![(0, 3), (1, 2), (6, 1)])); + assert_eq!(tower.last_vote.timestamp(), None); + tower.refresh_last_vote_timestamp(5); + assert_eq!(tower.last_vote.timestamp(), None); + assert_eq!(tower.last_timestamp.slot, 0); + assert_eq!(tower.last_timestamp.timestamp, 0); + + // Tower has vote with no timestamp + tower.last_vote = + VoteTransaction::from(VoteStateUpdate::from(vec![(0, 3), (1, 2), (2, 1)])); + assert_eq!(tower.last_vote.timestamp(), None); + tower.refresh_last_vote_timestamp(5); + assert_eq!(tower.last_vote.timestamp(), Some(1)); + assert_eq!(tower.last_timestamp.slot, 2); + assert_eq!(tower.last_timestamp.timestamp, 1); + + // Vote has timestamp + tower.last_vote = + VoteTransaction::from(VoteStateUpdate::from(vec![(0, 3), (1, 2), (2, 1)])); + tower.refresh_last_vote_timestamp(5); + assert_eq!(tower.last_vote.timestamp(), Some(2)); + assert_eq!(tower.last_timestamp.slot, 2); + assert_eq!(tower.last_timestamp.timestamp, 2); + } + fn run_test_load_tower_snapshot( modify_original: F, modify_serialized: G, diff --git a/core/src/replay_stage.rs b/core/src/replay_stage.rs index daa59adc032ada..cbbb99bc1013b3 100644 --- a/core/src/replay_stage.rs +++ b/core/src/replay_stage.rs @@ -2184,8 +2184,9 @@ impl ReplayStage { return; } - // TODO: check the timestamp in this vote is correct, i.e. it shouldn't - // have changed from the original timestamp of the vote. + // Update timestamp for refreshed vote + tower.refresh_last_vote_timestamp(heaviest_bank_on_same_fork.slot()); + let vote_tx = Self::generate_vote_tx( identity_keypair, heaviest_bank_on_same_fork, From a6166ee31600508c57a350965db39fbe944aedf8 Mon Sep 17 00:00:00 2001 From: Will Hickey Date: Thu, 15 Jun 2023 16:26:14 -0500 Subject: [PATCH 437/465] Version bump v1.14.20 (#32162) Bump version to v1.14.20 --- Cargo.lock | 492 +++++++++--------- account-decoder/Cargo.toml | 10 +- accounts-bench/Cargo.toml | 12 +- accounts-cluster-bench/Cargo.toml | 34 +- banking-bench/Cargo.toml | 26 +- banks-client/Cargo.toml | 12 +- banks-interface/Cargo.toml | 4 +- banks-server/Cargo.toml | 12 +- bench-streamer/Cargo.toml | 8 +- bench-tps/Cargo.toml | 38 +- bloom/Cargo.toml | 8 +- bucket_map/Cargo.toml | 8 +- clap-utils/Cargo.toml | 8 +- clap-v3-utils/Cargo.toml | 8 +- cli-config/Cargo.toml | 6 +- cli-output/Cargo.toml | 16 +- cli/Cargo.toml | 38 +- client-test/Cargo.toml | 32 +- client/Cargo.toml | 28 +- core/Cargo.toml | 56 +- dos/Cargo.toml | 30 +- download-utils/Cargo.toml | 6 +- entry/Cargo.toml | 16 +- faucet/Cargo.toml | 14 +- frozen-abi/Cargo.toml | 6 +- frozen-abi/macro/Cargo.toml | 2 +- genesis-utils/Cargo.toml | 8 +- genesis/Cargo.toml | 22 +- geyser-plugin-interface/Cargo.toml | 6 +- geyser-plugin-manager/Cargo.toml | 16 +- gossip/Cargo.toml | 38 +- install/Cargo.toml | 14 +- keygen/Cargo.toml | 12 +- ledger-tool/Cargo.toml | 30 +- ledger/Cargo.toml | 40 +- local-cluster/Cargo.toml | 28 +- log-analyzer/Cargo.toml | 6 +- logger/Cargo.toml | 2 +- measure/Cargo.toml | 4 +- merkle-root-bench/Cargo.toml | 12 +- merkle-tree/Cargo.toml | 4 +- metrics/Cargo.toml | 4 +- net-shaper/Cargo.toml | 4 +- net-utils/Cargo.toml | 8 +- notifier/Cargo.toml | 2 +- perf/Cargo.toml | 12 +- poh-bench/Cargo.toml | 14 +- poh/Cargo.toml | 20 +- program-runtime/Cargo.toml | 14 +- program-test/Cargo.toml | 20 +- .../address-lookup-table-tests/Cargo.toml | 8 +- programs/address-lookup-table/Cargo.toml | 12 +- programs/bpf-loader-tests/Cargo.toml | 8 +- programs/bpf/Cargo.lock | 490 ++++++++--------- programs/bpf/Cargo.toml | 28 +- programs/bpf/rust/128bit/Cargo.toml | 6 +- programs/bpf/rust/128bit_dep/Cargo.toml | 4 +- programs/bpf/rust/alloc/Cargo.toml | 4 +- programs/bpf/rust/call_depth/Cargo.toml | 4 +- programs/bpf/rust/caller_access/Cargo.toml | 4 +- programs/bpf/rust/curve25519/Cargo.toml | 6 +- programs/bpf/rust/custom_heap/Cargo.toml | 4 +- programs/bpf/rust/dep_crate/Cargo.toml | 6 +- .../bpf/rust/deprecated_loader/Cargo.toml | 4 +- programs/bpf/rust/dup_accounts/Cargo.toml | 4 +- programs/bpf/rust/error_handling/Cargo.toml | 4 +- programs/bpf/rust/external_spend/Cargo.toml | 4 +- programs/bpf/rust/finalize/Cargo.toml | 4 +- .../rust/get_minimum_delegation/Cargo.toml | 4 +- .../Cargo.toml | 4 +- .../rust/instruction_introspection/Cargo.toml | 4 +- programs/bpf/rust/invoke/Cargo.toml | 4 +- programs/bpf/rust/invoke_and_error/Cargo.toml | 4 +- programs/bpf/rust/invoke_and_ok/Cargo.toml | 4 +- .../bpf/rust/invoke_and_return/Cargo.toml | 4 +- programs/bpf/rust/invoked/Cargo.toml | 4 +- programs/bpf/rust/iter/Cargo.toml | 4 +- programs/bpf/rust/log_data/Cargo.toml | 4 +- programs/bpf/rust/many_args/Cargo.toml | 6 +- programs/bpf/rust/many_args_dep/Cargo.toml | 4 +- programs/bpf/rust/mem/Cargo.toml | 10 +- programs/bpf/rust/membuiltins/Cargo.toml | 6 +- programs/bpf/rust/noop/Cargo.toml | 4 +- programs/bpf/rust/panic/Cargo.toml | 4 +- programs/bpf/rust/param_passing/Cargo.toml | 6 +- .../bpf/rust/param_passing_dep/Cargo.toml | 4 +- programs/bpf/rust/rand/Cargo.toml | 4 +- programs/bpf/rust/realloc/Cargo.toml | 4 +- programs/bpf/rust/realloc_invoke/Cargo.toml | 6 +- .../bpf/rust/ro_account_modify/Cargo.toml | 4 +- programs/bpf/rust/ro_modify/Cargo.toml | 4 +- programs/bpf/rust/sanity/Cargo.toml | 10 +- .../bpf/rust/secp256k1_recover/Cargo.toml | 4 +- programs/bpf/rust/sha/Cargo.toml | 4 +- .../rust/sibling_inner_instruction/Cargo.toml | 4 +- .../bpf/rust/sibling_instruction/Cargo.toml | 4 +- programs/bpf/rust/simulation/Cargo.toml | 12 +- programs/bpf/rust/spoof1/Cargo.toml | 4 +- programs/bpf/rust/spoof1_system/Cargo.toml | 4 +- programs/bpf/rust/sysvar/Cargo.toml | 10 +- programs/bpf/rust/upgradeable/Cargo.toml | 4 +- programs/bpf/rust/upgraded/Cargo.toml | 4 +- programs/bpf_loader/Cargo.toml | 14 +- .../bpf_loader/gen-syscall-list/Cargo.toml | 2 +- programs/compute-budget/Cargo.toml | 6 +- programs/config/Cargo.toml | 8 +- programs/ed25519-tests/Cargo.toml | 6 +- programs/stake/Cargo.toml | 18 +- programs/vote/Cargo.toml | 14 +- programs/zk-token-proof-tests/Cargo.toml | 10 +- programs/zk-token-proof/Cargo.toml | 8 +- rayon-threadlimit/Cargo.toml | 2 +- rbpf-cli/Cargo.toml | 10 +- remote-wallet/Cargo.toml | 4 +- rpc-test/Cargo.toml | 18 +- rpc/Cargo.toml | 48 +- runtime/Cargo.toml | 34 +- runtime/store-tool/Cargo.toml | 8 +- sdk/Cargo.toml | 12 +- sdk/cargo-build-bpf/Cargo.toml | 4 +- sdk/cargo-build-sbf/Cargo.toml | 8 +- .../tests/crates/fail/Cargo.toml | 4 +- .../tests/crates/noop/Cargo.toml | 4 +- sdk/cargo-test-bpf/Cargo.toml | 2 +- sdk/cargo-test-sbf/Cargo.toml | 2 +- sdk/gen-headers/Cargo.toml | 2 +- sdk/macro/Cargo.toml | 2 +- sdk/program/Cargo.toml | 10 +- send-transaction-service/Cargo.toml | 14 +- stake-accounts/Cargo.toml | 16 +- storage-bigtable/Cargo.toml | 10 +- storage-bigtable/build-proto/Cargo.toml | 2 +- storage-proto/Cargo.toml | 8 +- streamer/Cargo.toml | 10 +- sys-tuner/Cargo.toml | 6 +- test-validator/Cargo.toml | 28 +- tokens/Cargo.toml | 24 +- transaction-dos/Cargo.toml | 32 +- transaction-status/Cargo.toml | 14 +- upload-perf/Cargo.toml | 4 +- validator/Cargo.toml | 50 +- version/Cargo.toml | 8 +- watchtower/Cargo.toml | 20 +- zk-token-sdk/Cargo.toml | 6 +- 144 files changed, 1278 insertions(+), 1278 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 5d1f0f16f0216e..e3797c4e53db95 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1708,7 +1708,7 @@ dependencies = [ [[package]] name = "gen-headers" -version = "1.14.19" +version = "1.14.20" dependencies = [ "log", "regex", @@ -1716,7 +1716,7 @@ dependencies = [ [[package]] name = "gen-syscall-list" -version = "1.14.19" +version = "1.14.20" dependencies = [ "regex", ] @@ -3529,7 +3529,7 @@ dependencies = [ [[package]] name = "proto" -version = "1.14.19" +version = "1.14.20" dependencies = [ "protobuf-src", "tonic-build 0.8.0", @@ -3786,15 +3786,15 @@ dependencies = [ [[package]] name = "rbpf-cli" -version = "1.14.19" +version = "1.14.20" dependencies = [ "clap 3.2.23", "serde", "serde_json", "solana-bpf-loader-program", - "solana-logger 1.14.19", + "solana-logger 1.14.20", "solana-program-runtime", - "solana-sdk 1.14.19", + "solana-sdk 1.14.20", "solana_rbpf", ] @@ -4510,7 +4510,7 @@ dependencies = [ [[package]] name = "solana-account-decoder" -version = "1.14.19" +version = "1.14.20" dependencies = [ "Inflector", "base64 0.13.0", @@ -4523,7 +4523,7 @@ dependencies = [ "serde_json", "solana-address-lookup-table-program", "solana-config-program", - "solana-sdk 1.14.19", + "solana-sdk 1.14.20", "solana-vote-program", "spl-token", "spl-token-2022", @@ -4533,21 +4533,21 @@ dependencies = [ [[package]] name = "solana-accounts-bench" -version = "1.14.19" +version = "1.14.20" dependencies = [ "clap 2.33.3", "log", "rayon", - "solana-logger 1.14.19", + "solana-logger 1.14.20", "solana-measure", "solana-runtime", - "solana-sdk 1.14.19", + "solana-sdk 1.14.20", "solana-version", ] [[package]] name = "solana-accounts-cluster-bench" -version = "1.14.19" +version = "1.14.20" dependencies = [ "clap 2.33.3", "log", @@ -4560,11 +4560,11 @@ dependencies = [ "solana-faucet", "solana-gossip", "solana-local-cluster", - "solana-logger 1.14.19", + "solana-logger 1.14.20", "solana-measure", "solana-net-utils", "solana-runtime", - "solana-sdk 1.14.19", + "solana-sdk 1.14.20", "solana-streamer", "solana-test-validator", "solana-transaction-status", @@ -4574,7 +4574,7 @@ dependencies = [ [[package]] name = "solana-address-lookup-table-program" -version = "1.14.19" +version = "1.14.20" dependencies = [ "bincode", "bytemuck", @@ -4583,28 +4583,28 @@ dependencies = [ "num-traits", "rustc_version 0.4.0", "serde", - "solana-frozen-abi 1.14.19", - "solana-frozen-abi-macro 1.14.19", - "solana-program 1.14.19", + "solana-frozen-abi 1.14.20", + "solana-frozen-abi-macro 1.14.20", + "solana-program 1.14.20", "solana-program-runtime", - "solana-sdk 1.14.19", + "solana-sdk 1.14.20", "thiserror", ] [[package]] name = "solana-address-lookup-table-program-tests" -version = "1.14.19" +version = "1.14.20" dependencies = [ "assert_matches", "bincode", "solana-address-lookup-table-program", "solana-program-test", - "solana-sdk 1.14.19", + "solana-sdk 1.14.20", ] [[package]] name = "solana-banking-bench" -version = "1.14.19" +version = "1.14.20" dependencies = [ "clap 3.2.23", "crossbeam-channel", @@ -4615,27 +4615,27 @@ dependencies = [ "solana-core", "solana-gossip", "solana-ledger", - "solana-logger 1.14.19", + "solana-logger 1.14.20", "solana-measure", "solana-perf", "solana-poh", "solana-runtime", - "solana-sdk 1.14.19", + "solana-sdk 1.14.20", "solana-streamer", "solana-version", ] [[package]] name = "solana-banks-client" -version = "1.14.19" +version = "1.14.20" dependencies = [ "borsh", "futures 0.3.21", "solana-banks-interface", "solana-banks-server", - "solana-program 1.14.19", + "solana-program 1.14.20", "solana-runtime", - "solana-sdk 1.14.19", + "solana-sdk 1.14.20", "tarpc", "thiserror", "tokio", @@ -4644,16 +4644,16 @@ dependencies = [ [[package]] name = "solana-banks-interface" -version = "1.14.19" +version = "1.14.20" dependencies = [ "serde", - "solana-sdk 1.14.19", + "solana-sdk 1.14.20", "tarpc", ] [[package]] name = "solana-banks-server" -version = "1.14.19" +version = "1.14.20" dependencies = [ "bincode", "crossbeam-channel", @@ -4661,7 +4661,7 @@ dependencies = [ "solana-banks-interface", "solana-client", "solana-runtime", - "solana-sdk 1.14.19", + "solana-sdk 1.14.20", "solana-send-transaction-service", "tarpc", "tokio", @@ -4671,7 +4671,7 @@ dependencies = [ [[package]] name = "solana-bench-streamer" -version = "1.14.19" +version = "1.14.20" dependencies = [ "clap 3.2.23", "crossbeam-channel", @@ -4682,7 +4682,7 @@ dependencies = [ [[package]] name = "solana-bench-tps" -version = "1.14.19" +version = "1.14.20" dependencies = [ "clap 2.33.3", "crossbeam-channel", @@ -4699,13 +4699,13 @@ dependencies = [ "solana-genesis", "solana-gossip", "solana-local-cluster", - "solana-logger 1.14.19", + "solana-logger 1.14.20", "solana-measure", "solana-metrics", "solana-net-utils", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.19", + "solana-sdk 1.14.20", "solana-streamer", "solana-test-validator", "solana-version", @@ -4714,7 +4714,7 @@ dependencies = [ [[package]] name = "solana-bloom" -version = "1.14.19" +version = "1.14.20" dependencies = [ "bv", "fnv", @@ -4724,14 +4724,14 @@ dependencies = [ "rustc_version 0.4.0", "serde", "serde_derive", - "solana-frozen-abi 1.14.19", - "solana-frozen-abi-macro 1.14.19", - "solana-sdk 1.14.19", + "solana-frozen-abi 1.14.20", + "solana-frozen-abi-macro 1.14.20", + "solana-sdk 1.14.20", ] [[package]] name = "solana-bpf-loader-program" -version = "1.14.19" +version = "1.14.20" dependencies = [ "bincode", "byteorder", @@ -4742,26 +4742,26 @@ dependencies = [ "solana-metrics", "solana-program-runtime", "solana-runtime", - "solana-sdk 1.14.19", - "solana-zk-token-sdk 1.14.19", + "solana-sdk 1.14.20", + "solana-zk-token-sdk 1.14.20", "solana_rbpf", "thiserror", ] [[package]] name = "solana-bpf-loader-program-tests" -version = "1.14.19" +version = "1.14.20" dependencies = [ "assert_matches", "bincode", "solana-bpf-loader-program", "solana-program-test", - "solana-sdk 1.14.19", + "solana-sdk 1.14.20", ] [[package]] name = "solana-bucket-map" -version = "1.14.19" +version = "1.14.20" dependencies = [ "fs_extra", "log", @@ -4769,24 +4769,24 @@ dependencies = [ "modular-bitfield", "rand 0.7.3", "rayon", - "solana-logger 1.14.19", + "solana-logger 1.14.20", "solana-measure", - "solana-sdk 1.14.19", + "solana-sdk 1.14.20", "tempfile", ] [[package]] name = "solana-cargo-build-bpf" -version = "1.14.19" +version = "1.14.20" dependencies = [ "cargo_metadata", "clap 3.2.23", - "solana-sdk 1.14.19", + "solana-sdk 1.14.20", ] [[package]] name = "solana-cargo-build-sbf" -version = "1.14.19" +version = "1.14.20" dependencies = [ "bzip2", "cargo_metadata", @@ -4795,14 +4795,14 @@ dependencies = [ "regex", "serial_test", "solana-download-utils", - "solana-logger 1.14.19", - "solana-sdk 1.14.19", + "solana-logger 1.14.20", + "solana-sdk 1.14.20", "tar", ] [[package]] name = "solana-cargo-test-bpf" -version = "1.14.19" +version = "1.14.20" dependencies = [ "cargo_metadata", "clap 3.2.23", @@ -4810,7 +4810,7 @@ dependencies = [ [[package]] name = "solana-cargo-test-sbf" -version = "1.14.19" +version = "1.14.20" dependencies = [ "cargo_metadata", "clap 3.2.23", @@ -4818,14 +4818,14 @@ dependencies = [ [[package]] name = "solana-clap-utils" -version = "1.14.19" +version = "1.14.20" dependencies = [ "chrono", "clap 2.33.3", "rpassword", "solana-perf", "solana-remote-wallet", - "solana-sdk 1.14.19", + "solana-sdk 1.14.20", "tempfile", "thiserror", "tiny-bip39", @@ -4835,14 +4835,14 @@ dependencies = [ [[package]] name = "solana-clap-v3-utils" -version = "1.14.19" +version = "1.14.20" dependencies = [ "chrono", "clap 3.2.23", "rpassword", "solana-perf", "solana-remote-wallet", - "solana-sdk 1.14.19", + "solana-sdk 1.14.20", "tempfile", "thiserror", "tiny-bip39", @@ -4852,7 +4852,7 @@ dependencies = [ [[package]] name = "solana-cli" -version = "1.14.19" +version = "1.14.20" dependencies = [ "bincode", "bs58", @@ -4880,10 +4880,10 @@ dependencies = [ "solana-client", "solana-config-program", "solana-faucet", - "solana-logger 1.14.19", + "solana-logger 1.14.20", "solana-program-runtime", "solana-remote-wallet", - "solana-sdk 1.14.19", + "solana-sdk 1.14.20", "solana-streamer", "solana-test-validator", "solana-transaction-status", @@ -4898,7 +4898,7 @@ dependencies = [ [[package]] name = "solana-cli-config" -version = "1.14.19" +version = "1.14.20" dependencies = [ "anyhow", "dirs-next", @@ -4907,13 +4907,13 @@ dependencies = [ "serde_derive", "serde_yaml", "solana-clap-utils", - "solana-sdk 1.14.19", + "solana-sdk 1.14.20", "url 2.2.2", ] [[package]] name = "solana-cli-output" -version = "1.14.19" +version = "1.14.20" dependencies = [ "Inflector", "base64 0.13.0", @@ -4931,7 +4931,7 @@ dependencies = [ "solana-clap-utils", "solana-cli-config", "solana-client", - "solana-sdk 1.14.19", + "solana-sdk 1.14.20", "solana-transaction-status", "solana-vote-program", "spl-memo", @@ -4939,7 +4939,7 @@ dependencies = [ [[package]] name = "solana-client" -version = "1.14.19" +version = "1.14.20" dependencies = [ "anyhow", "assert_matches", @@ -4975,12 +4975,12 @@ dependencies = [ "solana-account-decoder", "solana-clap-utils", "solana-faucet", - "solana-logger 1.14.19", + "solana-logger 1.14.20", "solana-measure", "solana-metrics", "solana-net-utils", "solana-perf", - "solana-sdk 1.14.19", + "solana-sdk 1.14.20", "solana-streamer", "solana-transaction-status", "solana-version", @@ -4996,14 +4996,14 @@ dependencies = [ [[package]] name = "solana-client-test" -version = "1.14.19" +version = "1.14.20" dependencies = [ "futures-util", "serde_json", "serial_test", "solana-client", "solana-ledger", - "solana-logger 1.14.19", + "solana-logger 1.14.20", "solana-measure", "solana-merkle-tree", "solana-metrics", @@ -5011,7 +5011,7 @@ dependencies = [ "solana-rayon-threadlimit", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.19", + "solana-sdk 1.14.20", "solana-streamer", "solana-test-validator", "solana-transaction-status", @@ -5022,28 +5022,28 @@ dependencies = [ [[package]] name = "solana-compute-budget-program" -version = "1.14.19" +version = "1.14.20" dependencies = [ "solana-program-runtime", - "solana-sdk 1.14.19", + "solana-sdk 1.14.20", ] [[package]] name = "solana-config-program" -version = "1.14.19" +version = "1.14.20" dependencies = [ "bincode", "chrono", "serde", "serde_derive", - "solana-logger 1.14.19", + "solana-logger 1.14.20", "solana-program-runtime", - "solana-sdk 1.14.19", + "solana-sdk 1.14.20", ] [[package]] name = "solana-core" -version = "1.14.19" +version = "1.14.20" dependencies = [ "ahash", "base64 0.13.0", @@ -5076,12 +5076,12 @@ dependencies = [ "solana-bloom", "solana-client", "solana-entry", - "solana-frozen-abi 1.14.19", - "solana-frozen-abi-macro 1.14.19", + "solana-frozen-abi 1.14.20", + "solana-frozen-abi-macro 1.14.20", "solana-geyser-plugin-manager", "solana-gossip", "solana-ledger", - "solana-logger 1.14.19", + "solana-logger 1.14.20", "solana-measure", "solana-metrics", "solana-net-utils", @@ -5091,7 +5091,7 @@ dependencies = [ "solana-rayon-threadlimit", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.19", + "solana-sdk 1.14.20", "solana-send-transaction-service", "solana-stake-program", "solana-streamer", @@ -5111,7 +5111,7 @@ dependencies = [ [[package]] name = "solana-dos" -version = "1.14.19" +version = "1.14.20" dependencies = [ "bincode", "clap 3.2.23", @@ -5127,42 +5127,42 @@ dependencies = [ "solana-faucet", "solana-gossip", "solana-local-cluster", - "solana-logger 1.14.19", + "solana-logger 1.14.20", "solana-measure", "solana-net-utils", "solana-perf", "solana-rpc", - "solana-sdk 1.14.19", + "solana-sdk 1.14.20", "solana-streamer", "solana-version", ] [[package]] name = "solana-download-utils" -version = "1.14.19" +version = "1.14.20" dependencies = [ "console", "indicatif", "log", "reqwest", "solana-runtime", - "solana-sdk 1.14.19", + "solana-sdk 1.14.20", ] [[package]] name = "solana-ed25519-program-tests" -version = "1.14.19" +version = "1.14.20" dependencies = [ "assert_matches", "ed25519-dalek", "rand 0.7.3", "solana-program-test", - "solana-sdk 1.14.19", + "solana-sdk 1.14.20", ] [[package]] name = "solana-entry" -version = "1.14.19" +version = "1.14.20" dependencies = [ "bincode", "crossbeam-channel", @@ -5174,18 +5174,18 @@ dependencies = [ "rand 0.7.3", "rayon", "serde", - "solana-logger 1.14.19", + "solana-logger 1.14.20", "solana-measure", "solana-merkle-tree", "solana-metrics", "solana-perf", "solana-rayon-threadlimit", - "solana-sdk 1.14.19", + "solana-sdk 1.14.20", ] [[package]] name = "solana-faucet" -version = "1.14.19" +version = "1.14.20" dependencies = [ "bincode", "byteorder", @@ -5196,9 +5196,9 @@ dependencies = [ "serde_derive", "solana-clap-utils", "solana-cli-config", - "solana-logger 1.14.19", + "solana-logger 1.14.20", "solana-metrics", - "solana-sdk 1.14.19", + "solana-sdk 1.14.20", "solana-version", "spl-memo", "thiserror", @@ -5241,7 +5241,7 @@ dependencies = [ [[package]] name = "solana-frozen-abi" -version = "1.14.19" +version = "1.14.20" dependencies = [ "ahash", "blake3", @@ -5266,8 +5266,8 @@ dependencies = [ "serde_derive", "serde_json", "sha2 0.10.2", - "solana-frozen-abi-macro 1.14.19", - "solana-logger 1.14.19", + "solana-frozen-abi-macro 1.14.20", + "solana-logger 1.14.20", "subtle", "thiserror", ] @@ -5286,7 +5286,7 @@ dependencies = [ [[package]] name = "solana-frozen-abi-macro" -version = "1.14.19" +version = "1.14.20" dependencies = [ "proc-macro2 1.0.52", "quote 1.0.18", @@ -5296,7 +5296,7 @@ dependencies = [ [[package]] name = "solana-genesis" -version = "1.14.19" +version = "1.14.20" dependencies = [ "base64 0.13.0", "clap 2.33.3", @@ -5307,9 +5307,9 @@ dependencies = [ "solana-cli-config", "solana-entry", "solana-ledger", - "solana-logger 1.14.19", + "solana-logger 1.14.20", "solana-runtime", - "solana-sdk 1.14.19", + "solana-sdk 1.14.20", "solana-stake-program", "solana-version", "solana-vote-program", @@ -5318,26 +5318,26 @@ dependencies = [ [[package]] name = "solana-genesis-utils" -version = "1.14.19" +version = "1.14.20" dependencies = [ "solana-download-utils", "solana-runtime", - "solana-sdk 1.14.19", + "solana-sdk 1.14.20", ] [[package]] name = "solana-geyser-plugin-interface" -version = "1.14.19" +version = "1.14.20" dependencies = [ "log", - "solana-sdk 1.14.19", + "solana-sdk 1.14.20", "solana-transaction-status", "thiserror", ] [[package]] name = "solana-geyser-plugin-manager" -version = "1.14.19" +version = "1.14.20" dependencies = [ "bs58", "crossbeam-channel", @@ -5350,14 +5350,14 @@ dependencies = [ "solana-metrics", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.19", + "solana-sdk 1.14.20", "solana-transaction-status", "thiserror", ] [[package]] name = "solana-gossip" -version = "1.14.19" +version = "1.14.20" dependencies = [ "bincode", "bv", @@ -5384,17 +5384,17 @@ dependencies = [ "solana-clap-utils", "solana-client", "solana-entry", - "solana-frozen-abi 1.14.19", - "solana-frozen-abi-macro 1.14.19", + "solana-frozen-abi 1.14.20", + "solana-frozen-abi-macro 1.14.20", "solana-ledger", - "solana-logger 1.14.19", + "solana-logger 1.14.20", "solana-measure", "solana-metrics", "solana-net-utils", "solana-perf", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.14.19", + "solana-sdk 1.14.20", "solana-streamer", "solana-version", "solana-vote-program", @@ -5403,7 +5403,7 @@ dependencies = [ [[package]] name = "solana-install" -version = "1.14.19" +version = "1.14.20" dependencies = [ "atty", "bincode", @@ -5424,8 +5424,8 @@ dependencies = [ "solana-clap-utils", "solana-client", "solana-config-program", - "solana-logger 1.14.19", - "solana-sdk 1.14.19", + "solana-logger 1.14.20", + "solana-sdk 1.14.20", "solana-version", "tar", "tempfile", @@ -5436,7 +5436,7 @@ dependencies = [ [[package]] name = "solana-keygen" -version = "1.14.19" +version = "1.14.20" dependencies = [ "bs58", "clap 3.2.23", @@ -5445,14 +5445,14 @@ dependencies = [ "solana-clap-v3-utils", "solana-cli-config", "solana-remote-wallet", - "solana-sdk 1.14.19", + "solana-sdk 1.14.20", "solana-version", "tiny-bip39", ] [[package]] name = "solana-ledger" -version = "1.14.19" +version = "1.14.20" dependencies = [ "assert_matches", "bincode", @@ -5486,16 +5486,16 @@ dependencies = [ "solana-account-decoder", "solana-bpf-loader-program", "solana-entry", - "solana-frozen-abi 1.14.19", - "solana-frozen-abi-macro 1.14.19", - "solana-logger 1.14.19", + "solana-frozen-abi 1.14.20", + "solana-frozen-abi-macro 1.14.20", + "solana-logger 1.14.20", "solana-measure", "solana-metrics", "solana-perf", "solana-program-runtime", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.14.19", + "solana-sdk 1.14.20", "solana-stake-program", "solana-storage-bigtable", "solana-storage-proto", @@ -5514,7 +5514,7 @@ dependencies = [ [[package]] name = "solana-ledger-tool" -version = "1.14.19" +version = "1.14.20" dependencies = [ "assert_cmd", "base64 0.13.0", @@ -5536,10 +5536,10 @@ dependencies = [ "solana-core", "solana-entry", "solana-ledger", - "solana-logger 1.14.19", + "solana-logger 1.14.20", "solana-measure", "solana-runtime", - "solana-sdk 1.14.19", + "solana-sdk 1.14.20", "solana-stake-program", "solana-storage-bigtable", "solana-transaction-status", @@ -5551,7 +5551,7 @@ dependencies = [ [[package]] name = "solana-local-cluster" -version = "1.14.19" +version = "1.14.20" dependencies = [ "assert_matches", "crossbeam-channel", @@ -5569,9 +5569,9 @@ dependencies = [ "solana-entry", "solana-gossip", "solana-ledger", - "solana-logger 1.14.19", + "solana-logger 1.14.20", "solana-runtime", - "solana-sdk 1.14.19", + "solana-sdk 1.14.20", "solana-stake-program", "solana-streamer", "solana-vote-program", @@ -5580,13 +5580,13 @@ dependencies = [ [[package]] name = "solana-log-analyzer" -version = "1.14.19" +version = "1.14.20" dependencies = [ "byte-unit", "clap 3.2.23", "serde", "serde_json", - "solana-logger 1.14.19", + "solana-logger 1.14.20", "solana-version", ] @@ -5603,7 +5603,7 @@ dependencies = [ [[package]] name = "solana-logger" -version = "1.14.19" +version = "1.14.20" dependencies = [ "env_logger", "lazy_static", @@ -5612,38 +5612,38 @@ dependencies = [ [[package]] name = "solana-measure" -version = "1.14.19" +version = "1.14.20" dependencies = [ "log", - "solana-sdk 1.14.19", + "solana-sdk 1.14.20", ] [[package]] name = "solana-merkle-root-bench" -version = "1.14.19" +version = "1.14.20" dependencies = [ "clap 2.33.3", "log", - "solana-logger 1.14.19", + "solana-logger 1.14.20", "solana-measure", "solana-runtime", - "solana-sdk 1.14.19", + "solana-sdk 1.14.20", "solana-version", ] [[package]] name = "solana-merkle-tree" -version = "1.14.19" +version = "1.14.20" dependencies = [ "fast-math", "hex", "matches", - "solana-program 1.14.19", + "solana-program 1.14.20", ] [[package]] name = "solana-metrics" -version = "1.14.19" +version = "1.14.20" dependencies = [ "crossbeam-channel", "env_logger", @@ -5653,23 +5653,23 @@ dependencies = [ "rand 0.7.3", "reqwest", "serial_test", - "solana-sdk 1.14.19", + "solana-sdk 1.14.20", ] [[package]] name = "solana-net-shaper" -version = "1.14.19" +version = "1.14.20" dependencies = [ "clap 3.2.23", "rand 0.7.3", "serde", "serde_json", - "solana-logger 1.14.19", + "solana-logger 1.14.20", ] [[package]] name = "solana-net-utils" -version = "1.14.19" +version = "1.14.20" dependencies = [ "bincode", "clap 3.2.23", @@ -5680,8 +5680,8 @@ dependencies = [ "serde", "serde_derive", "socket2", - "solana-logger 1.14.19", - "solana-sdk 1.14.19", + "solana-logger 1.14.20", + "solana-sdk 1.14.20", "solana-version", "tokio", "url 2.2.2", @@ -5689,7 +5689,7 @@ dependencies = [ [[package]] name = "solana-notifier" -version = "1.14.19" +version = "1.14.20" dependencies = [ "log", "reqwest", @@ -5698,7 +5698,7 @@ dependencies = [ [[package]] name = "solana-perf" -version = "1.14.19" +version = "1.14.20" dependencies = [ "ahash", "bincode", @@ -5717,17 +5717,17 @@ dependencies = [ "rand_chacha 0.2.2", "rayon", "serde", - "solana-logger 1.14.19", + "solana-logger 1.14.20", "solana-metrics", "solana-rayon-threadlimit", - "solana-sdk 1.14.19", + "solana-sdk 1.14.20", "solana-vote-program", "test-case", ] [[package]] name = "solana-poh" -version = "1.14.19" +version = "1.14.20" dependencies = [ "bincode", "core_affinity", @@ -5737,29 +5737,29 @@ dependencies = [ "rand 0.7.3", "solana-entry", "solana-ledger", - "solana-logger 1.14.19", + "solana-logger 1.14.20", "solana-measure", "solana-metrics", "solana-perf", "solana-runtime", - "solana-sdk 1.14.19", + "solana-sdk 1.14.20", "solana-sys-tuner", "thiserror", ] [[package]] name = "solana-poh-bench" -version = "1.14.19" +version = "1.14.20" dependencies = [ "clap 3.2.23", "log", "rand 0.7.3", "rayon", "solana-entry", - "solana-logger 1.14.19", + "solana-logger 1.14.20", "solana-measure", "solana-perf", - "solana-sdk 1.14.19", + "solana-sdk 1.14.20", "solana-version", ] @@ -5814,7 +5814,7 @@ dependencies = [ [[package]] name = "solana-program" -version = "1.14.19" +version = "1.14.20" dependencies = [ "anyhow", "assert_matches", @@ -5852,10 +5852,10 @@ dependencies = [ "serde_json", "sha2 0.10.2", "sha3 0.10.1", - "solana-frozen-abi 1.14.19", - "solana-frozen-abi-macro 1.14.19", - "solana-logger 1.14.19", - "solana-sdk-macro 1.14.19", + "solana-frozen-abi 1.14.20", + "solana-frozen-abi-macro 1.14.20", + "solana-logger 1.14.20", + "solana-sdk-macro 1.14.20", "static_assertions", "thiserror", "tiny-bip39", @@ -5865,7 +5865,7 @@ dependencies = [ [[package]] name = "solana-program-runtime" -version = "1.14.19" +version = "1.14.20" dependencies = [ "base64 0.13.0", "bincode", @@ -5880,18 +5880,18 @@ dependencies = [ "rand 0.7.3", "rustc_version 0.4.0", "serde", - "solana-frozen-abi 1.14.19", - "solana-frozen-abi-macro 1.14.19", - "solana-logger 1.14.19", + "solana-frozen-abi 1.14.20", + "solana-frozen-abi-macro 1.14.20", + "solana-logger 1.14.20", "solana-measure", "solana-metrics", - "solana-sdk 1.14.19", + "solana-sdk 1.14.20", "thiserror", ] [[package]] name = "solana-program-test" -version = "1.14.19" +version = "1.14.20" dependencies = [ "assert_matches", "async-trait", @@ -5903,10 +5903,10 @@ dependencies = [ "solana-banks-client", "solana-banks-server", "solana-bpf-loader-program", - "solana-logger 1.14.19", + "solana-logger 1.14.20", "solana-program-runtime", "solana-runtime", - "solana-sdk 1.14.19", + "solana-sdk 1.14.20", "solana-stake-program", "solana-vote-program", "thiserror", @@ -5915,7 +5915,7 @@ dependencies = [ [[package]] name = "solana-rayon-threadlimit" -version = "1.14.19" +version = "1.14.20" dependencies = [ "lazy_static", "num_cpus", @@ -5923,7 +5923,7 @@ dependencies = [ [[package]] name = "solana-remote-wallet" -version = "1.14.19" +version = "1.14.20" dependencies = [ "console", "dialoguer", @@ -5934,14 +5934,14 @@ dependencies = [ "parking_lot 0.12.1", "qstring", "semver 1.0.10", - "solana-sdk 1.14.19", + "solana-sdk 1.14.20", "thiserror", "uriparse", ] [[package]] name = "solana-rpc" -version = "1.14.19" +version = "1.14.20" dependencies = [ "base64 0.13.0", "bincode", @@ -5977,7 +5977,7 @@ dependencies = [ "solana-poh", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.14.19", + "solana-sdk 1.14.20", "solana-send-transaction-service", "solana-stake-program", "solana-storage-bigtable", @@ -5996,7 +5996,7 @@ dependencies = [ [[package]] name = "solana-rpc-test" -version = "1.14.19" +version = "1.14.20" dependencies = [ "bincode", "bs58", @@ -6008,9 +6008,9 @@ dependencies = [ "serde_json", "solana-account-decoder", "solana-client", - "solana-logger 1.14.19", + "solana-logger 1.14.20", "solana-rpc", - "solana-sdk 1.14.19", + "solana-sdk 1.14.20", "solana-streamer", "solana-test-validator", "solana-transaction-status", @@ -6019,7 +6019,7 @@ dependencies = [ [[package]] name = "solana-runtime" -version = "1.14.19" +version = "1.14.20" dependencies = [ "arrayref", "assert_matches", @@ -6060,18 +6060,18 @@ dependencies = [ "solana-bucket-map", "solana-compute-budget-program", "solana-config-program", - "solana-frozen-abi 1.14.19", - "solana-frozen-abi-macro 1.14.19", - "solana-logger 1.14.19", + "solana-frozen-abi 1.14.20", + "solana-frozen-abi-macro 1.14.20", + "solana-logger 1.14.20", "solana-measure", "solana-metrics", "solana-program-runtime", "solana-rayon-threadlimit", - "solana-sdk 1.14.19", + "solana-sdk 1.14.20", "solana-stake-program", "solana-vote-program", "solana-zk-token-proof-program", - "solana-zk-token-sdk 1.14.19", + "solana-zk-token-sdk 1.14.20", "strum", "strum_macros", "symlink", @@ -6134,7 +6134,7 @@ dependencies = [ [[package]] name = "solana-sdk" -version = "1.14.19" +version = "1.14.20" dependencies = [ "anyhow", "assert_matches", @@ -6174,11 +6174,11 @@ dependencies = [ "serde_json", "sha2 0.10.2", "sha3 0.10.1", - "solana-frozen-abi 1.14.19", - "solana-frozen-abi-macro 1.14.19", - "solana-logger 1.14.19", - "solana-program 1.14.19", - "solana-sdk-macro 1.14.19", + "solana-frozen-abi 1.14.20", + "solana-frozen-abi-macro 1.14.20", + "solana-logger 1.14.20", + "solana-program 1.14.20", + "solana-sdk-macro 1.14.20", "static_assertions", "thiserror", "tiny-bip39", @@ -6201,7 +6201,7 @@ dependencies = [ [[package]] name = "solana-sdk-macro" -version = "1.14.19" +version = "1.14.20" dependencies = [ "bs58", "proc-macro2 1.0.52", @@ -6212,21 +6212,21 @@ dependencies = [ [[package]] name = "solana-send-transaction-service" -version = "1.14.19" +version = "1.14.20" dependencies = [ "crossbeam-channel", "log", "solana-client", - "solana-logger 1.14.19", + "solana-logger 1.14.20", "solana-measure", "solana-metrics", "solana-runtime", - "solana-sdk 1.14.19", + "solana-sdk 1.14.20", ] [[package]] name = "solana-stake-accounts" -version = "1.14.19" +version = "1.14.20" dependencies = [ "clap 2.33.3", "solana-clap-utils", @@ -6234,13 +6234,13 @@ dependencies = [ "solana-client", "solana-remote-wallet", "solana-runtime", - "solana-sdk 1.14.19", + "solana-sdk 1.14.20", "solana-stake-program", ] [[package]] name = "solana-stake-program" -version = "1.14.19" +version = "1.14.20" dependencies = [ "assert_matches", "bincode", @@ -6252,12 +6252,12 @@ dependencies = [ "serde", "serde_derive", "solana-config-program", - "solana-frozen-abi 1.14.19", - "solana-frozen-abi-macro 1.14.19", - "solana-logger 1.14.19", + "solana-frozen-abi 1.14.20", + "solana-frozen-abi-macro 1.14.20", + "solana-logger 1.14.20", "solana-metrics", "solana-program-runtime", - "solana-sdk 1.14.19", + "solana-sdk 1.14.20", "solana-vote-program", "test-case", "thiserror", @@ -6265,7 +6265,7 @@ dependencies = [ [[package]] name = "solana-storage-bigtable" -version = "1.14.19" +version = "1.14.20" dependencies = [ "backoff", "bincode", @@ -6286,7 +6286,7 @@ dependencies = [ "serde_derive", "smpl_jwt", "solana-metrics", - "solana-sdk 1.14.19", + "solana-sdk 1.14.20", "solana-storage-proto", "solana-transaction-status", "thiserror", @@ -6297,7 +6297,7 @@ dependencies = [ [[package]] name = "solana-storage-proto" -version = "1.14.19" +version = "1.14.20" dependencies = [ "bincode", "bs58", @@ -6306,25 +6306,25 @@ dependencies = [ "protobuf-src", "serde", "solana-account-decoder", - "solana-sdk 1.14.19", + "solana-sdk 1.14.20", "solana-transaction-status", "tonic-build 0.8.0", ] [[package]] name = "solana-store-tool" -version = "1.14.19" +version = "1.14.20" dependencies = [ "clap 2.33.3", "log", - "solana-logger 1.14.19", + "solana-logger 1.14.20", "solana-runtime", "solana-version", ] [[package]] name = "solana-streamer" -version = "1.14.19" +version = "1.14.20" dependencies = [ "crossbeam-channel", "futures-util", @@ -6341,10 +6341,10 @@ dependencies = [ "rand 0.7.3", "rcgen", "rustls 0.20.6", - "solana-logger 1.14.19", + "solana-logger 1.14.20", "solana-metrics", "solana-perf", - "solana-sdk 1.14.19", + "solana-sdk 1.14.20", "thiserror", "tokio", "x509-parser", @@ -6352,13 +6352,13 @@ dependencies = [ [[package]] name = "solana-sys-tuner" -version = "1.14.19" +version = "1.14.20" dependencies = [ "clap 2.33.3", "libc", "log", "nix", - "solana-logger 1.14.19", + "solana-logger 1.14.20", "solana-version", "sysctl", "unix_socket2", @@ -6367,7 +6367,7 @@ dependencies = [ [[package]] name = "solana-test-validator" -version = "1.14.19" +version = "1.14.20" dependencies = [ "base64 0.13.0", "log", @@ -6378,20 +6378,20 @@ dependencies = [ "solana-core", "solana-gossip", "solana-ledger", - "solana-logger 1.14.19", + "solana-logger 1.14.20", "solana-net-utils", "solana-program-runtime", "solana-program-test", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.19", + "solana-sdk 1.14.20", "solana-streamer", "tokio", ] [[package]] name = "solana-tokens" -version = "1.14.19" +version = "1.14.20" dependencies = [ "bincode", "chrono", @@ -6407,9 +6407,9 @@ dependencies = [ "solana-clap-utils", "solana-cli-config", "solana-client", - "solana-logger 1.14.19", + "solana-logger 1.14.20", "solana-remote-wallet", - "solana-sdk 1.14.19", + "solana-sdk 1.14.20", "solana-streamer", "solana-test-validator", "solana-transaction-status", @@ -6422,7 +6422,7 @@ dependencies = [ [[package]] name = "solana-transaction-dos" -version = "1.14.19" +version = "1.14.20" dependencies = [ "bincode", "clap 2.33.3", @@ -6436,11 +6436,11 @@ dependencies = [ "solana-faucet", "solana-gossip", "solana-local-cluster", - "solana-logger 1.14.19", + "solana-logger 1.14.20", "solana-measure", "solana-net-utils", "solana-runtime", - "solana-sdk 1.14.19", + "solana-sdk 1.14.20", "solana-streamer", "solana-transaction-status", "solana-version", @@ -6448,7 +6448,7 @@ dependencies = [ [[package]] name = "solana-transaction-status" -version = "1.14.19" +version = "1.14.20" dependencies = [ "Inflector", "base64 0.13.0", @@ -6464,7 +6464,7 @@ dependencies = [ "solana-address-lookup-table-program", "solana-measure", "solana-metrics", - "solana-sdk 1.14.19", + "solana-sdk 1.14.20", "solana-vote-program", "spl-associated-token-account", "spl-memo", @@ -6475,7 +6475,7 @@ dependencies = [ [[package]] name = "solana-upload-perf" -version = "1.14.19" +version = "1.14.20" dependencies = [ "serde_json", "solana-metrics", @@ -6483,7 +6483,7 @@ dependencies = [ [[package]] name = "solana-validator" -version = "1.14.19" +version = "1.14.20" dependencies = [ "chrono", "clap 2.33.3", @@ -6514,14 +6514,14 @@ dependencies = [ "solana-genesis-utils", "solana-gossip", "solana-ledger", - "solana-logger 1.14.19", + "solana-logger 1.14.20", "solana-metrics", "solana-net-utils", "solana-perf", "solana-poh", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.19", + "solana-sdk 1.14.20", "solana-send-transaction-service", "solana-storage-bigtable", "solana-streamer", @@ -6534,21 +6534,21 @@ dependencies = [ [[package]] name = "solana-version" -version = "1.14.19" +version = "1.14.20" dependencies = [ "log", "rustc_version 0.4.0", "semver 1.0.10", "serde", "serde_derive", - "solana-frozen-abi 1.14.19", - "solana-frozen-abi-macro 1.14.19", - "solana-sdk 1.14.19", + "solana-frozen-abi 1.14.20", + "solana-frozen-abi-macro 1.14.20", + "solana-sdk 1.14.20", ] [[package]] name = "solana-vote-program" -version = "1.14.19" +version = "1.14.20" dependencies = [ "bincode", "itertools", @@ -6559,19 +6559,19 @@ dependencies = [ "rustc_version 0.4.0", "serde", "serde_derive", - "solana-frozen-abi 1.14.19", - "solana-frozen-abi-macro 1.14.19", - "solana-logger 1.14.19", + "solana-frozen-abi 1.14.20", + "solana-frozen-abi-macro 1.14.20", + "solana-logger 1.14.20", "solana-metrics", "solana-program-runtime", - "solana-sdk 1.14.19", + "solana-sdk 1.14.20", "test-case", "thiserror", ] [[package]] name = "solana-watchtower" -version = "1.14.19" +version = "1.14.20" dependencies = [ "clap 2.33.3", "humantime", @@ -6580,35 +6580,35 @@ dependencies = [ "solana-cli-config", "solana-cli-output", "solana-client", - "solana-logger 1.14.19", + "solana-logger 1.14.20", "solana-metrics", "solana-notifier", - "solana-sdk 1.14.19", + "solana-sdk 1.14.20", "solana-version", ] [[package]] name = "solana-zk-token-proof-program" -version = "1.14.19" +version = "1.14.20" dependencies = [ "bytemuck", "getrandom 0.1.16", "num-derive", "num-traits", "solana-program-runtime", - "solana-sdk 1.14.19", - "solana-zk-token-sdk 1.14.19", + "solana-sdk 1.14.20", + "solana-zk-token-sdk 1.14.20", ] [[package]] name = "solana-zk-token-proof-program-tests" -version = "1.14.19" +version = "1.14.20" dependencies = [ "bytemuck", "solana-program-runtime", "solana-program-test", - "solana-sdk 1.14.19", - "solana-zk-token-sdk 1.14.19", + "solana-sdk 1.14.20", + "solana-zk-token-sdk 1.14.20", ] [[package]] @@ -6644,7 +6644,7 @@ dependencies = [ [[package]] name = "solana-zk-token-sdk" -version = "1.14.19" +version = "1.14.20" dependencies = [ "aes-gcm-siv", "arrayref", @@ -6664,8 +6664,8 @@ dependencies = [ "serde", "serde_json", "sha3 0.9.1", - "solana-program 1.14.19", - "solana-sdk 1.14.19", + "solana-program 1.14.20", + "solana-sdk 1.14.20", "subtle", "thiserror", "zeroize", diff --git a/account-decoder/Cargo.toml b/account-decoder/Cargo.toml index b8e41415bbfa0f..8f0b82ce39a179 100644 --- a/account-decoder/Cargo.toml +++ b/account-decoder/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-account-decoder" -version = "1.14.19" +version = "1.14.20" description = "Solana account decoder" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -19,10 +19,10 @@ lazy_static = "1.4.0" serde = "1.0.138" serde_derive = "1.0.103" serde_json = "1.0.81" -solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.19" } -solana-config-program = { path = "../programs/config", version = "=1.14.19" } -solana-sdk = { path = "../sdk", version = "=1.14.19" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.19" } +solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.20" } +solana-config-program = { path = "../programs/config", version = "=1.14.20" } +solana-sdk = { path = "../sdk", version = "=1.14.20" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.20" } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } spl-token-2022 = { version = "=0.6.1", features = ["no-entrypoint"] } thiserror = "1.0" diff --git a/accounts-bench/Cargo.toml b/accounts-bench/Cargo.toml index 20d711328301dc..68f2bb05f4e3c8 100644 --- a/accounts-bench/Cargo.toml +++ b/accounts-bench/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-accounts-bench" -version = "1.14.19" +version = "1.14.20" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -12,11 +12,11 @@ publish = false clap = "2.33.1" log = "0.4.17" rayon = "1.5.3" -solana-logger = { path = "../logger", version = "=1.14.19" } -solana-measure = { path = "../measure", version = "=1.14.19" } -solana-runtime = { path = "../runtime", version = "=1.14.19" } -solana-sdk = { path = "../sdk", version = "=1.14.19" } -solana-version = { path = "../version", version = "=1.14.19" } +solana-logger = { path = "../logger", version = "=1.14.20" } +solana-measure = { path = "../measure", version = "=1.14.20" } +solana-runtime = { path = "../runtime", version = "=1.14.20" } +solana-sdk = { path = "../sdk", version = "=1.14.20" } +solana-version = { path = "../version", version = "=1.14.20" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/accounts-cluster-bench/Cargo.toml b/accounts-cluster-bench/Cargo.toml index 8d7a4c7f39258d..338d6e1f135f10 100644 --- a/accounts-cluster-bench/Cargo.toml +++ b/accounts-cluster-bench/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-accounts-cluster-bench" -version = "1.14.19" +version = "1.14.20" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -13,25 +13,25 @@ clap = "2.33.1" log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.19" } -solana-clap-utils = { path = "../clap-utils", version = "=1.14.19" } -solana-client = { path = "../client", version = "=1.14.19" } -solana-faucet = { path = "../faucet", version = "=1.14.19" } -solana-gossip = { path = "../gossip", version = "=1.14.19" } -solana-logger = { path = "../logger", version = "=1.14.19" } -solana-measure = { path = "../measure", version = "=1.14.19" } -solana-net-utils = { path = "../net-utils", version = "=1.14.19" } -solana-runtime = { path = "../runtime", version = "=1.14.19" } -solana-sdk = { path = "../sdk", version = "=1.14.19" } -solana-streamer = { path = "../streamer", version = "=1.14.19" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.19" } -solana-version = { path = "../version", version = "=1.14.19" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.20" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.20" } +solana-client = { path = "../client", version = "=1.14.20" } +solana-faucet = { path = "../faucet", version = "=1.14.20" } +solana-gossip = { path = "../gossip", version = "=1.14.20" } +solana-logger = { path = "../logger", version = "=1.14.20" } +solana-measure = { path = "../measure", version = "=1.14.20" } +solana-net-utils = { path = "../net-utils", version = "=1.14.20" } +solana-runtime = { path = "../runtime", version = "=1.14.20" } +solana-sdk = { path = "../sdk", version = "=1.14.20" } +solana-streamer = { path = "../streamer", version = "=1.14.20" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.20" } +solana-version = { path = "../version", version = "=1.14.20" } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } [dev-dependencies] -solana-core = { path = "../core", version = "=1.14.19" } -solana-local-cluster = { path = "../local-cluster", version = "=1.14.19" } -solana-test-validator = { path = "../test-validator", version = "=1.14.19" } +solana-core = { path = "../core", version = "=1.14.20" } +solana-local-cluster = { path = "../local-cluster", version = "=1.14.20" } +solana-test-validator = { path = "../test-validator", version = "=1.14.20" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/banking-bench/Cargo.toml b/banking-bench/Cargo.toml index 20b86b366ec3fd..26f88dcd8f9410 100644 --- a/banking-bench/Cargo.toml +++ b/banking-bench/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-banking-bench" -version = "1.14.19" +version = "1.14.20" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,18 +14,18 @@ crossbeam-channel = "0.5" log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" -solana-client = { path = "../client", version = "=1.14.19" } -solana-core = { path = "../core", version = "=1.14.19" } -solana-gossip = { path = "../gossip", version = "=1.14.19" } -solana-ledger = { path = "../ledger", version = "=1.14.19" } -solana-logger = { path = "../logger", version = "=1.14.19" } -solana-measure = { path = "../measure", version = "=1.14.19" } -solana-perf = { path = "../perf", version = "=1.14.19" } -solana-poh = { path = "../poh", version = "=1.14.19" } -solana-runtime = { path = "../runtime", version = "=1.14.19" } -solana-sdk = { path = "../sdk", version = "=1.14.19" } -solana-streamer = { path = "../streamer", version = "=1.14.19" } -solana-version = { path = "../version", version = "=1.14.19" } +solana-client = { path = "../client", version = "=1.14.20" } +solana-core = { path = "../core", version = "=1.14.20" } +solana-gossip = { path = "../gossip", version = "=1.14.20" } +solana-ledger = { path = "../ledger", version = "=1.14.20" } +solana-logger = { path = "../logger", version = "=1.14.20" } +solana-measure = { path = "../measure", version = "=1.14.20" } +solana-perf = { path = "../perf", version = "=1.14.20" } +solana-poh = { path = "../poh", version = "=1.14.20" } +solana-runtime = { path = "../runtime", version = "=1.14.20" } +solana-sdk = { path = "../sdk", version = "=1.14.20" } +solana-streamer = { path = "../streamer", version = "=1.14.20" } +solana-version = { path = "../version", version = "=1.14.20" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/banks-client/Cargo.toml b/banks-client/Cargo.toml index 3e3b801e759424..3460baf1b4fcc7 100644 --- a/banks-client/Cargo.toml +++ b/banks-client/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-banks-client" -version = "1.14.19" +version = "1.14.20" description = "Solana banks client" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,17 +12,17 @@ edition = "2021" [dependencies] borsh = "0.9.3" futures = "0.3" -solana-banks-interface = { path = "../banks-interface", version = "=1.14.19" } -solana-program = { path = "../sdk/program", version = "=1.14.19" } -solana-sdk = { path = "../sdk", version = "=1.14.19" } +solana-banks-interface = { path = "../banks-interface", version = "=1.14.20" } +solana-program = { path = "../sdk/program", version = "=1.14.20" } +solana-sdk = { path = "../sdk", version = "=1.14.20" } tarpc = { version = "0.29.0", features = ["full"] } thiserror = "1.0" tokio = { version = "~1.14.1", features = ["full"] } tokio-serde = { version = "0.8", features = ["bincode"] } [dev-dependencies] -solana-banks-server = { path = "../banks-server", version = "=1.14.19" } -solana-runtime = { path = "../runtime", version = "=1.14.19" } +solana-banks-server = { path = "../banks-server", version = "=1.14.20" } +solana-runtime = { path = "../runtime", version = "=1.14.20" } [lib] crate-type = ["lib"] diff --git a/banks-interface/Cargo.toml b/banks-interface/Cargo.toml index 1fec0c55435c71..c3537a5c3a3c9e 100644 --- a/banks-interface/Cargo.toml +++ b/banks-interface/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-banks-interface" -version = "1.14.19" +version = "1.14.20" description = "Solana banks RPC interface" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -11,7 +11,7 @@ edition = "2021" [dependencies] serde = { version = "1.0.138", features = ["derive"] } -solana-sdk = { path = "../sdk", version = "=1.14.19" } +solana-sdk = { path = "../sdk", version = "=1.14.20" } tarpc = { version = "0.29.0", features = ["full"] } [lib] diff --git a/banks-server/Cargo.toml b/banks-server/Cargo.toml index c4c60cb7fdba6b..3cd433a9da3ffa 100644 --- a/banks-server/Cargo.toml +++ b/banks-server/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-banks-server" -version = "1.14.19" +version = "1.14.20" description = "Solana banks server" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,11 +13,11 @@ edition = "2021" bincode = "1.3.3" crossbeam-channel = "0.5" futures = "0.3" -solana-banks-interface = { path = "../banks-interface", version = "=1.14.19" } -solana-client = { path = "../client", version = "=1.14.19" } -solana-runtime = { path = "../runtime", version = "=1.14.19" } -solana-sdk = { path = "../sdk", version = "=1.14.19" } -solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.19" } +solana-banks-interface = { path = "../banks-interface", version = "=1.14.20" } +solana-client = { path = "../client", version = "=1.14.20" } +solana-runtime = { path = "../runtime", version = "=1.14.20" } +solana-sdk = { path = "../sdk", version = "=1.14.20" } +solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.20" } tarpc = { version = "0.29.0", features = ["full"] } tokio = { version = "1", features = ["full"] } tokio-serde = { version = "0.8", features = ["bincode"] } diff --git a/bench-streamer/Cargo.toml b/bench-streamer/Cargo.toml index ff9792bb4f7e06..5e522a435b13ce 100644 --- a/bench-streamer/Cargo.toml +++ b/bench-streamer/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-bench-streamer" -version = "1.14.19" +version = "1.14.20" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -11,9 +11,9 @@ publish = false [dependencies] clap = { version = "3.1.5", features = ["cargo"] } crossbeam-channel = "0.5" -solana-net-utils = { path = "../net-utils", version = "=1.14.19" } -solana-streamer = { path = "../streamer", version = "=1.14.19" } -solana-version = { path = "../version", version = "=1.14.19" } +solana-net-utils = { path = "../net-utils", version = "=1.14.20" } +solana-streamer = { path = "../streamer", version = "=1.14.20" } +solana-version = { path = "../version", version = "=1.14.20" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/bench-tps/Cargo.toml b/bench-tps/Cargo.toml index ac15af2b290345..0a065537bfbf31 100644 --- a/bench-tps/Cargo.toml +++ b/bench-tps/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-bench-tps" -version = "1.14.19" +version = "1.14.20" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -15,28 +15,28 @@ log = "0.4.17" rayon = "1.5.3" serde_json = "1.0.81" serde_yaml = "0.8.26" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.19" } -solana-cli-config = { path = "../cli-config", version = "=1.14.19" } -solana-client = { path = "../client", version = "=1.14.19" } -solana-core = { path = "../core", version = "=1.14.19" } -solana-faucet = { path = "../faucet", version = "=1.14.19" } -solana-genesis = { path = "../genesis", version = "=1.14.19" } -solana-gossip = { path = "../gossip", version = "=1.14.19" } -solana-logger = { path = "../logger", version = "=1.14.19" } -solana-measure = { path = "../measure", version = "=1.14.19" } -solana-metrics = { path = "../metrics", version = "=1.14.19" } -solana-net-utils = { path = "../net-utils", version = "=1.14.19" } -solana-rpc = { path = "../rpc", version = "=1.14.19" } -solana-runtime = { path = "../runtime", version = "=1.14.19" } -solana-sdk = { path = "../sdk", version = "=1.14.19" } -solana-streamer = { path = "../streamer", version = "=1.14.19" } -solana-version = { path = "../version", version = "=1.14.19" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.20" } +solana-cli-config = { path = "../cli-config", version = "=1.14.20" } +solana-client = { path = "../client", version = "=1.14.20" } +solana-core = { path = "../core", version = "=1.14.20" } +solana-faucet = { path = "../faucet", version = "=1.14.20" } +solana-genesis = { path = "../genesis", version = "=1.14.20" } +solana-gossip = { path = "../gossip", version = "=1.14.20" } +solana-logger = { path = "../logger", version = "=1.14.20" } +solana-measure = { path = "../measure", version = "=1.14.20" } +solana-metrics = { path = "../metrics", version = "=1.14.20" } +solana-net-utils = { path = "../net-utils", version = "=1.14.20" } +solana-rpc = { path = "../rpc", version = "=1.14.20" } +solana-runtime = { path = "../runtime", version = "=1.14.20" } +solana-sdk = { path = "../sdk", version = "=1.14.20" } +solana-streamer = { path = "../streamer", version = "=1.14.20" } +solana-version = { path = "../version", version = "=1.14.20" } thiserror = "1.0" [dev-dependencies] serial_test = "0.8.0" -solana-local-cluster = { path = "../local-cluster", version = "=1.14.19" } -solana-test-validator = { path = "../test-validator", version = "=1.14.19" } +solana-local-cluster = { path = "../local-cluster", version = "=1.14.20" } +solana-test-validator = { path = "../test-validator", version = "=1.14.20" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/bloom/Cargo.toml b/bloom/Cargo.toml index ea61e2e159d14e..33dcff5d5e47f3 100644 --- a/bloom/Cargo.toml +++ b/bloom/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bloom" -version = "1.14.19" +version = "1.14.20" description = "Solana bloom filter" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -17,9 +17,9 @@ rand = "0.7.0" rayon = "1.5.3" serde = { version = "1.0.138", features = ["rc"] } serde_derive = "1.0.103" -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.19" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.19" } -solana-sdk = { path = "../sdk", version = "=1.14.19" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.20" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.20" } +solana-sdk = { path = "../sdk", version = "=1.14.20" } [lib] crate-type = ["lib"] diff --git a/bucket_map/Cargo.toml b/bucket_map/Cargo.toml index 8f574e2ca4a5c2..a74fa7b1a18898 100644 --- a/bucket_map/Cargo.toml +++ b/bucket_map/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bucket-map" -version = "1.14.19" +version = "1.14.20" description = "solana-bucket-map" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-bucket-map" @@ -15,14 +15,14 @@ log = { version = "0.4.17" } memmap2 = "0.5.3" modular-bitfield = "0.11.2" rand = "0.7.0" -solana-measure = { path = "../measure", version = "=1.14.19" } -solana-sdk = { path = "../sdk", version = "=1.14.19" } +solana-measure = { path = "../measure", version = "=1.14.20" } +solana-sdk = { path = "../sdk", version = "=1.14.20" } tempfile = "3.4.0" [dev-dependencies] fs_extra = "1.2.0" rayon = "1.5.3" -solana-logger = { path = "../logger", version = "=1.14.19" } +solana-logger = { path = "../logger", version = "=1.14.20" } [lib] crate-type = ["lib"] diff --git a/clap-utils/Cargo.toml b/clap-utils/Cargo.toml index 83769dd5c0cfe9..58b7e5708b790d 100644 --- a/clap-utils/Cargo.toml +++ b/clap-utils/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-clap-utils" -version = "1.14.19" +version = "1.14.20" description = "Solana utilities for the clap" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,9 +13,9 @@ edition = "2021" chrono = "0.4" clap = "2.33.0" rpassword = "6.0" -solana-perf = { path = "../perf", version = "=1.14.19" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.19", default-features = false } -solana-sdk = { path = "../sdk", version = "=1.14.19" } +solana-perf = { path = "../perf", version = "=1.14.20" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.20", default-features = false } +solana-sdk = { path = "../sdk", version = "=1.14.20" } thiserror = "1.0.31" tiny-bip39 = "0.8.2" uriparse = "0.6.4" diff --git a/clap-v3-utils/Cargo.toml b/clap-v3-utils/Cargo.toml index 6c3bc8c0077a1b..4be40ff6c4b8df 100644 --- a/clap-v3-utils/Cargo.toml +++ b/clap-v3-utils/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-clap-v3-utils" -version = "1.14.19" +version = "1.14.20" description = "Solana utilities for the clap v3" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,9 +13,9 @@ edition = "2021" chrono = "0.4" clap = { version = "3.2.23", features = ["cargo"] } rpassword = "6.0" -solana-perf = { path = "../perf", version = "=1.14.19" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.19", default-features = false } -solana-sdk = { path = "../sdk", version = "=1.14.19" } +solana-perf = { path = "../perf", version = "=1.14.20" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.20", default-features = false } +solana-sdk = { path = "../sdk", version = "=1.14.20" } thiserror = "1.0.31" tiny-bip39 = "0.8.2" uriparse = "0.6.4" diff --git a/cli-config/Cargo.toml b/cli-config/Cargo.toml index 36804254e6f07f..1a2affe38c362c 100644 --- a/cli-config/Cargo.toml +++ b/cli-config/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-cli-config" description = "Blockchain, Rebuilt for Scale" -version = "1.14.19" +version = "1.14.20" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -15,8 +15,8 @@ lazy_static = "1.4.0" serde = "1.0.138" serde_derive = "1.0.103" serde_yaml = "0.8.26" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.19" } -solana-sdk = { path = "../sdk", version = "=1.14.19" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.20" } +solana-sdk = { path = "../sdk", version = "=1.14.20" } url = "2.2.2" [dev-dependencies] diff --git a/cli-output/Cargo.toml b/cli-output/Cargo.toml index e8d1d24489c33f..15e68c54263c30 100644 --- a/cli-output/Cargo.toml +++ b/cli-output/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-cli-output" description = "Blockchain, Rebuilt for Scale" -version = "1.14.19" +version = "1.14.20" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -21,13 +21,13 @@ pretty-hex = "0.3.0" semver = "1.0.10" serde = "1.0.138" serde_json = "1.0.81" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.19" } -solana-clap-utils = { path = "../clap-utils", version = "=1.14.19" } -solana-cli-config = { path = "../cli-config", version = "=1.14.19" } -solana-client = { path = "../client", version = "=1.14.19" } -solana-sdk = { path = "../sdk", version = "=1.14.19" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.19" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.19" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.20" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.20" } +solana-cli-config = { path = "../cli-config", version = "=1.14.20" } +solana-client = { path = "../client", version = "=1.14.20" } +solana-sdk = { path = "../sdk", version = "=1.14.20" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.20" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.20" } spl-memo = { version = "=3.0.1", features = ["no-entrypoint"] } [dev-dependencies] diff --git a/cli/Cargo.toml b/cli/Cargo.toml index 50233064b33360..c9cbdf269e18dd 100644 --- a/cli/Cargo.toml +++ b/cli/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-cli" description = "Blockchain, Rebuilt for Scale" -version = "1.14.19" +version = "1.14.20" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -27,30 +27,30 @@ semver = "1.0.10" serde = "1.0.138" serde_derive = "1.0.103" serde_json = "1.0.81" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.19" } -solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.19" } -solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.19" } -solana-clap-utils = { path = "../clap-utils", version = "=1.14.19" } -solana-cli-config = { path = "../cli-config", version = "=1.14.19" } -solana-cli-output = { path = "../cli-output", version = "=1.14.19" } -solana-client = { path = "../client", version = "=1.14.19" } -solana-config-program = { path = "../programs/config", version = "=1.14.19" } -solana-faucet = { path = "../faucet", version = "=1.14.19" } -solana-logger = { path = "../logger", version = "=1.14.19" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.19" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.19" } -solana-sdk = { path = "../sdk", version = "=1.14.19" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.19" } -solana-version = { path = "../version", version = "=1.14.19" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.19" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.20" } +solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.20" } +solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.20" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.20" } +solana-cli-config = { path = "../cli-config", version = "=1.14.20" } +solana-cli-output = { path = "../cli-output", version = "=1.14.20" } +solana-client = { path = "../client", version = "=1.14.20" } +solana-config-program = { path = "../programs/config", version = "=1.14.20" } +solana-faucet = { path = "../faucet", version = "=1.14.20" } +solana-logger = { path = "../logger", version = "=1.14.20" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.20" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.20" } +solana-sdk = { path = "../sdk", version = "=1.14.20" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.20" } +solana-version = { path = "../version", version = "=1.14.20" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.20" } solana_rbpf = "=0.2.31" spl-memo = { version = "=3.0.1", features = ["no-entrypoint"] } thiserror = "1.0.31" tiny-bip39 = "0.8.2" [dev-dependencies] -solana-streamer = { path = "../streamer", version = "=1.14.19" } -solana-test-validator = { path = "../test-validator", version = "=1.14.19" } +solana-streamer = { path = "../streamer", version = "=1.14.20" } +solana-test-validator = { path = "../test-validator", version = "=1.14.20" } tempfile = "3.4.0" [[bin]] diff --git a/client-test/Cargo.toml b/client-test/Cargo.toml index 467cb32fc3fe97..20d72aa481417d 100644 --- a/client-test/Cargo.toml +++ b/client-test/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-client-test" -version = "1.14.19" +version = "1.14.20" description = "Solana RPC Test" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,25 +14,25 @@ publish = false futures-util = "0.3.21" serde_json = "1.0.81" serial_test = "0.8.0" -solana-client = { path = "../client", version = "=1.14.19" } -solana-ledger = { path = "../ledger", version = "=1.14.19" } -solana-measure = { path = "../measure", version = "=1.14.19" } -solana-merkle-tree = { path = "../merkle-tree", version = "=1.14.19" } -solana-metrics = { path = "../metrics", version = "=1.14.19" } -solana-perf = { path = "../perf", version = "=1.14.19" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.19" } -solana-rpc = { path = "../rpc", version = "=1.14.19" } -solana-runtime = { path = "../runtime", version = "=1.14.19" } -solana-sdk = { path = "../sdk", version = "=1.14.19" } -solana-streamer = { path = "../streamer", version = "=1.14.19" } -solana-test-validator = { path = "../test-validator", version = "=1.14.19" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.19" } -solana-version = { path = "../version", version = "=1.14.19" } +solana-client = { path = "../client", version = "=1.14.20" } +solana-ledger = { path = "../ledger", version = "=1.14.20" } +solana-measure = { path = "../measure", version = "=1.14.20" } +solana-merkle-tree = { path = "../merkle-tree", version = "=1.14.20" } +solana-metrics = { path = "../metrics", version = "=1.14.20" } +solana-perf = { path = "../perf", version = "=1.14.20" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.20" } +solana-rpc = { path = "../rpc", version = "=1.14.20" } +solana-runtime = { path = "../runtime", version = "=1.14.20" } +solana-sdk = { path = "../sdk", version = "=1.14.20" } +solana-streamer = { path = "../streamer", version = "=1.14.20" } +solana-test-validator = { path = "../test-validator", version = "=1.14.20" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.20" } +solana-version = { path = "../version", version = "=1.14.20" } systemstat = "0.1.11" tokio = { version = "~1.14.1", features = ["full"] } [dev-dependencies] -solana-logger = { path = "../logger", version = "=1.14.19" } +solana-logger = { path = "../logger", version = "=1.14.20" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/client/Cargo.toml b/client/Cargo.toml index 2ee1b6242bdc9e..1d401a5f83c754 100644 --- a/client/Cargo.toml +++ b/client/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-client" -version = "1.14.19" +version = "1.14.20" description = "Solana Client" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -38,17 +38,17 @@ semver = "1.0.10" serde = "1.0.138" serde_derive = "1.0.103" serde_json = "1.0.81" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.19" } -solana-clap-utils = { path = "../clap-utils", version = "=1.14.19" } -solana-faucet = { path = "../faucet", version = "=1.14.19" } -solana-measure = { path = "../measure", version = "=1.14.19" } -solana-metrics = { path = "../metrics", version = "=1.14.19" } -solana-net-utils = { path = "../net-utils", version = "=1.14.19" } -solana-sdk = { path = "../sdk", version = "=1.14.19" } -solana-streamer = { path = "../streamer", version = "=1.14.19" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.19" } -solana-version = { path = "../version", version = "=1.14.19" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.19" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.20" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.20" } +solana-faucet = { path = "../faucet", version = "=1.14.20" } +solana-measure = { path = "../measure", version = "=1.14.20" } +solana-metrics = { path = "../metrics", version = "=1.14.20" } +solana-net-utils = { path = "../net-utils", version = "=1.14.20" } +solana-sdk = { path = "../sdk", version = "=1.14.20" } +solana-streamer = { path = "../streamer", version = "=1.14.20" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.20" } +solana-version = { path = "../version", version = "=1.14.20" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.20" } spl-token-2022 = { version = "=0.6.1", features = ["no-entrypoint"] } thiserror = "1.0" tokio = { version = "1", features = ["full"] } @@ -61,8 +61,8 @@ url = "2.2.2" anyhow = "1.0.58" assert_matches = "1.5.0" jsonrpc-http-server = "18.0.0" -solana-logger = { path = "../logger", version = "=1.14.19" } -solana-perf = { path = "../perf", version = "=1.14.19" } +solana-logger = { path = "../logger", version = "=1.14.20" } +solana-perf = { path = "../perf", version = "=1.14.20" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/core/Cargo.toml b/core/Cargo.toml index 39bdc1f0f8ee78..93f31ce996a643 100644 --- a/core/Cargo.toml +++ b/core/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "solana-core" description = "Blockchain, Rebuilt for Scale" -version = "1.14.19" +version = "1.14.20" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-core" readme = "../README.md" @@ -36,30 +36,30 @@ rand_chacha = "0.2.2" rayon = "1.5.3" serde = "1.0.138" serde_derive = "1.0.103" -solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.19" } -solana-bloom = { path = "../bloom", version = "=1.14.19" } -solana-client = { path = "../client", version = "=1.14.19" } -solana-entry = { path = "../entry", version = "=1.14.19" } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.19" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.19" } -solana-geyser-plugin-manager = { path = "../geyser-plugin-manager", version = "=1.14.19" } -solana-gossip = { path = "../gossip", version = "=1.14.19" } -solana-ledger = { path = "../ledger", version = "=1.14.19" } -solana-measure = { path = "../measure", version = "=1.14.19" } -solana-metrics = { path = "../metrics", version = "=1.14.19" } -solana-net-utils = { path = "../net-utils", version = "=1.14.19" } -solana-perf = { path = "../perf", version = "=1.14.19" } -solana-poh = { path = "../poh", version = "=1.14.19" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.19" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.19" } -solana-rpc = { path = "../rpc", version = "=1.14.19" } -solana-runtime = { path = "../runtime", version = "=1.14.19" } -solana-sdk = { path = "../sdk", version = "=1.14.19" } -solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.19" } -solana-streamer = { path = "../streamer", version = "=1.14.19" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.19" } -solana-version = { path = "../version", version = "=1.14.19" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.19" } +solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.20" } +solana-bloom = { path = "../bloom", version = "=1.14.20" } +solana-client = { path = "../client", version = "=1.14.20" } +solana-entry = { path = "../entry", version = "=1.14.20" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.20" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.20" } +solana-geyser-plugin-manager = { path = "../geyser-plugin-manager", version = "=1.14.20" } +solana-gossip = { path = "../gossip", version = "=1.14.20" } +solana-ledger = { path = "../ledger", version = "=1.14.20" } +solana-measure = { path = "../measure", version = "=1.14.20" } +solana-metrics = { path = "../metrics", version = "=1.14.20" } +solana-net-utils = { path = "../net-utils", version = "=1.14.20" } +solana-perf = { path = "../perf", version = "=1.14.20" } +solana-poh = { path = "../poh", version = "=1.14.20" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.20" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.20" } +solana-rpc = { path = "../rpc", version = "=1.14.20" } +solana-runtime = { path = "../runtime", version = "=1.14.20" } +solana-sdk = { path = "../sdk", version = "=1.14.20" } +solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.20" } +solana-streamer = { path = "../streamer", version = "=1.14.20" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.20" } +solana-version = { path = "../version", version = "=1.14.20" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.20" } sys-info = "0.9.1" tempfile = "3.4.0" thiserror = "1.0" @@ -71,9 +71,9 @@ matches = "0.1.9" raptorq = "1.7.0" serde_json = "1.0.81" serial_test = "0.8.0" -solana-logger = { path = "../logger", version = "=1.14.19" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.19" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.19" } +solana-logger = { path = "../logger", version = "=1.14.20" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.20" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.20" } static_assertions = "1.1.0" systemstat = "0.1.11" test-case = "2.1.0" diff --git a/dos/Cargo.toml b/dos/Cargo.toml index babb1691cb6516..c3120b23969c9e 100644 --- a/dos/Cargo.toml +++ b/dos/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-dos" -version = "1.14.19" +version = "1.14.20" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -17,23 +17,23 @@ itertools = "0.10.3" log = "0.4.17" rand = "0.7.0" serde = "1.0.138" -solana-bench-tps = { path = "../bench-tps", version = "=1.14.19" } -solana-client = { path = "../client", version = "=1.14.19" } -solana-core = { path = "../core", version = "=1.14.19" } -solana-faucet = { path = "../faucet", version = "=1.14.19" } -solana-gossip = { path = "../gossip", version = "=1.14.19" } -solana-logger = { path = "../logger", version = "=1.14.19" } -solana-measure = { path = "../measure", version = "=1.14.19" } -solana-net-utils = { path = "../net-utils", version = "=1.14.19" } -solana-perf = { path = "../perf", version = "=1.14.19" } -solana-rpc = { path = "../rpc", version = "=1.14.19" } -solana-sdk = { path = "../sdk", version = "=1.14.19" } -solana-streamer = { path = "../streamer", version = "=1.14.19" } -solana-version = { path = "../version", version = "=1.14.19" } +solana-bench-tps = { path = "../bench-tps", version = "=1.14.20" } +solana-client = { path = "../client", version = "=1.14.20" } +solana-core = { path = "../core", version = "=1.14.20" } +solana-faucet = { path = "../faucet", version = "=1.14.20" } +solana-gossip = { path = "../gossip", version = "=1.14.20" } +solana-logger = { path = "../logger", version = "=1.14.20" } +solana-measure = { path = "../measure", version = "=1.14.20" } +solana-net-utils = { path = "../net-utils", version = "=1.14.20" } +solana-perf = { path = "../perf", version = "=1.14.20" } +solana-rpc = { path = "../rpc", version = "=1.14.20" } +solana-sdk = { path = "../sdk", version = "=1.14.20" } +solana-streamer = { path = "../streamer", version = "=1.14.20" } +solana-version = { path = "../version", version = "=1.14.20" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] [dev-dependencies] serial_test = "0.8.0" -solana-local-cluster = { path = "../local-cluster", version = "=1.14.19" } +solana-local-cluster = { path = "../local-cluster", version = "=1.14.20" } diff --git a/download-utils/Cargo.toml b/download-utils/Cargo.toml index f7efac46cf9107..3bb682704902fe 100644 --- a/download-utils/Cargo.toml +++ b/download-utils/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-download-utils" -version = "1.14.19" +version = "1.14.20" description = "Solana Download Utils" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,8 +14,8 @@ console = "0.15.0" indicatif = "0.16.2" log = "0.4.17" reqwest = { version = "0.11.11", default-features = false, features = ["blocking", "brotli", "deflate", "gzip", "rustls-tls", "json"] } -solana-runtime = { path = "../runtime", version = "=1.14.19" } -solana-sdk = { path = "../sdk", version = "=1.14.19" } +solana-runtime = { path = "../runtime", version = "=1.14.20" } +solana-sdk = { path = "../sdk", version = "=1.14.20" } [lib] crate-type = ["lib"] diff --git a/entry/Cargo.toml b/entry/Cargo.toml index 84cf21d48016f3..1cd572e68f08f4 100644 --- a/entry/Cargo.toml +++ b/entry/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-entry" -version = "1.14.19" +version = "1.14.20" description = "Solana Entry" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -19,16 +19,16 @@ log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" serde = "1.0.138" -solana-measure = { path = "../measure", version = "=1.14.19" } -solana-merkle-tree = { path = "../merkle-tree", version = "=1.14.19" } -solana-metrics = { path = "../metrics", version = "=1.14.19" } -solana-perf = { path = "../perf", version = "=1.14.19" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.19" } -solana-sdk = { path = "../sdk", version = "=1.14.19" } +solana-measure = { path = "../measure", version = "=1.14.20" } +solana-merkle-tree = { path = "../merkle-tree", version = "=1.14.20" } +solana-metrics = { path = "../metrics", version = "=1.14.20" } +solana-perf = { path = "../perf", version = "=1.14.20" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.20" } +solana-sdk = { path = "../sdk", version = "=1.14.20" } [dev-dependencies] matches = "0.1.9" -solana-logger = { path = "../logger", version = "=1.14.19" } +solana-logger = { path = "../logger", version = "=1.14.20" } [lib] crate-type = ["lib"] diff --git a/faucet/Cargo.toml b/faucet/Cargo.toml index b377ba8f541e6c..800a9dc3d14c3d 100644 --- a/faucet/Cargo.toml +++ b/faucet/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-faucet" -version = "1.14.19" +version = "1.14.20" description = "Solana Faucet" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -17,12 +17,12 @@ crossbeam-channel = "0.5" log = "0.4.17" serde = "1.0.138" serde_derive = "1.0.103" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.19" } -solana-cli-config = { path = "../cli-config", version = "=1.14.19" } -solana-logger = { path = "../logger", version = "=1.14.19" } -solana-metrics = { path = "../metrics", version = "=1.14.19" } -solana-sdk = { path = "../sdk", version = "=1.14.19" } -solana-version = { path = "../version", version = "=1.14.19" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.20" } +solana-cli-config = { path = "../cli-config", version = "=1.14.20" } +solana-logger = { path = "../logger", version = "=1.14.20" } +solana-metrics = { path = "../metrics", version = "=1.14.20" } +solana-sdk = { path = "../sdk", version = "=1.14.20" } +solana-version = { path = "../version", version = "=1.14.20" } spl-memo = { version = "=3.0.1", features = ["no-entrypoint"] } thiserror = "1.0" tokio = { version = "1", features = ["full"] } diff --git a/frozen-abi/Cargo.toml b/frozen-abi/Cargo.toml index 8aa72d634c3c38..b979e16ee382b6 100644 --- a/frozen-abi/Cargo.toml +++ b/frozen-abi/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-frozen-abi" -version = "1.14.19" +version = "1.14.20" description = "Solana Frozen ABI" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -20,7 +20,7 @@ serde_bytes = "0.11" serde_derive = "1.0" serde_json = "1.0" sha2 = "0.10.2" -solana-frozen-abi-macro = { path = "macro", version = "=1.14.19" } +solana-frozen-abi-macro = { path = "macro", version = "=1.14.20" } thiserror = "1.0" [target.'cfg(not(target_os = "solana"))'.dependencies] @@ -43,7 +43,7 @@ rand_core = { version = "0.6.3", features = ["alloc", "getrandom", "std"] } subtle = { version = "2.4.1", features = ["default", "i128", "std"] } [target.'cfg(not(target_os = "solana"))'.dev-dependencies] -solana-logger = { path = "../logger", version = "=1.14.19" } +solana-logger = { path = "../logger", version = "=1.14.20" } [build-dependencies] rustc_version = "0.4" diff --git a/frozen-abi/macro/Cargo.toml b/frozen-abi/macro/Cargo.toml index 4fe597fb2a275e..6a81f2d41e0000 100644 --- a/frozen-abi/macro/Cargo.toml +++ b/frozen-abi/macro/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-frozen-abi-macro" -version = "1.14.19" +version = "1.14.20" description = "Solana Frozen ABI Macro" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/genesis-utils/Cargo.toml b/genesis-utils/Cargo.toml index 7ad1b80f7fc765..f8ffdf995e90ba 100644 --- a/genesis-utils/Cargo.toml +++ b/genesis-utils/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-genesis-utils" -version = "1.14.19" +version = "1.14.20" description = "Solana Genesis Utils" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,9 +10,9 @@ documentation = "https://docs.rs/solana-download-utils" edition = "2021" [dependencies] -solana-download-utils = { path = "../download-utils", version = "=1.14.19" } -solana-runtime = { path = "../runtime", version = "=1.14.19" } -solana-sdk = { path = "../sdk", version = "=1.14.19" } +solana-download-utils = { path = "../download-utils", version = "=1.14.20" } +solana-runtime = { path = "../runtime", version = "=1.14.20" } +solana-sdk = { path = "../sdk", version = "=1.14.20" } [lib] crate-type = ["lib"] diff --git a/genesis/Cargo.toml b/genesis/Cargo.toml index f9900adf22b45b..6172a40f0cf7cd 100644 --- a/genesis/Cargo.toml +++ b/genesis/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-genesis" description = "Blockchain, Rebuilt for Scale" -version = "1.14.19" +version = "1.14.20" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -15,16 +15,16 @@ clap = "2.33.1" serde = "1.0.138" serde_json = "1.0.81" serde_yaml = "0.8.26" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.19" } -solana-cli-config = { path = "../cli-config", version = "=1.14.19" } -solana-entry = { path = "../entry", version = "=1.14.19" } -solana-ledger = { path = "../ledger", version = "=1.14.19" } -solana-logger = { path = "../logger", version = "=1.14.19" } -solana-runtime = { path = "../runtime", version = "=1.14.19" } -solana-sdk = { path = "../sdk", version = "=1.14.19" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.19" } -solana-version = { path = "../version", version = "=1.14.19" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.19" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.20" } +solana-cli-config = { path = "../cli-config", version = "=1.14.20" } +solana-entry = { path = "../entry", version = "=1.14.20" } +solana-ledger = { path = "../ledger", version = "=1.14.20" } +solana-logger = { path = "../logger", version = "=1.14.20" } +solana-runtime = { path = "../runtime", version = "=1.14.20" } +solana-sdk = { path = "../sdk", version = "=1.14.20" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.20" } +solana-version = { path = "../version", version = "=1.14.20" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.20" } tempfile = "3.4.0" [[bin]] diff --git a/geyser-plugin-interface/Cargo.toml b/geyser-plugin-interface/Cargo.toml index 9b3e5bfd3030e3..d4ba37b4123117 100644 --- a/geyser-plugin-interface/Cargo.toml +++ b/geyser-plugin-interface/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-geyser-plugin-interface" description = "The Solana Geyser plugin interface." -version = "1.14.19" +version = "1.14.20" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -11,8 +11,8 @@ documentation = "https://docs.rs/solana-geyser-plugin-interface" [dependencies] log = "0.4.17" -solana-sdk = { path = "../sdk", version = "=1.14.19" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.19" } +solana-sdk = { path = "../sdk", version = "=1.14.20" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.20" } thiserror = "1.0.31" [package.metadata.docs.rs] diff --git a/geyser-plugin-manager/Cargo.toml b/geyser-plugin-manager/Cargo.toml index f560692b14f415..b9cfa8e32dcb88 100644 --- a/geyser-plugin-manager/Cargo.toml +++ b/geyser-plugin-manager/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-geyser-plugin-manager" description = "The Solana Geyser plugin manager." -version = "1.14.19" +version = "1.14.20" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -16,13 +16,13 @@ json5 = "0.4.1" libloading = "0.7.3" log = "0.4.17" serde_json = "1.0.81" -solana-geyser-plugin-interface = { path = "../geyser-plugin-interface", version = "=1.14.19" } -solana-measure = { path = "../measure", version = "=1.14.19" } -solana-metrics = { path = "../metrics", version = "=1.14.19" } -solana-rpc = { path = "../rpc", version = "=1.14.19" } -solana-runtime = { path = "../runtime", version = "=1.14.19" } -solana-sdk = { path = "../sdk", version = "=1.14.19" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.19" } +solana-geyser-plugin-interface = { path = "../geyser-plugin-interface", version = "=1.14.20" } +solana-measure = { path = "../measure", version = "=1.14.20" } +solana-metrics = { path = "../metrics", version = "=1.14.20" } +solana-rpc = { path = "../rpc", version = "=1.14.20" } +solana-runtime = { path = "../runtime", version = "=1.14.20" } +solana-sdk = { path = "../sdk", version = "=1.14.20" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.20" } thiserror = "1.0.31" [package.metadata.docs.rs] diff --git a/gossip/Cargo.toml b/gossip/Cargo.toml index 623efab7dabff1..316b6f62ec32b6 100644 --- a/gossip/Cargo.toml +++ b/gossip/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-gossip" description = "Blockchain, Rebuilt for Scale" -version = "1.14.19" +version = "1.14.20" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -27,24 +27,24 @@ rayon = "1.5.3" serde = "1.0.138" serde_bytes = "0.11" serde_derive = "1.0.103" -solana-bloom = { path = "../bloom", version = "=1.14.19" } -solana-clap-utils = { path = "../clap-utils", version = "=1.14.19" } -solana-client = { path = "../client", version = "=1.14.19" } -solana-entry = { path = "../entry", version = "=1.14.19" } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.19" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.19" } -solana-ledger = { path = "../ledger", version = "=1.14.19" } -solana-logger = { path = "../logger", version = "=1.14.19" } -solana-measure = { path = "../measure", version = "=1.14.19" } -solana-metrics = { path = "../metrics", version = "=1.14.19" } -solana-net-utils = { path = "../net-utils", version = "=1.14.19" } -solana-perf = { path = "../perf", version = "=1.14.19" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.19" } -solana-runtime = { path = "../runtime", version = "=1.14.19" } -solana-sdk = { path = "../sdk", version = "=1.14.19" } -solana-streamer = { path = "../streamer", version = "=1.14.19" } -solana-version = { path = "../version", version = "=1.14.19" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.19" } +solana-bloom = { path = "../bloom", version = "=1.14.20" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.20" } +solana-client = { path = "../client", version = "=1.14.20" } +solana-entry = { path = "../entry", version = "=1.14.20" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.20" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.20" } +solana-ledger = { path = "../ledger", version = "=1.14.20" } +solana-logger = { path = "../logger", version = "=1.14.20" } +solana-measure = { path = "../measure", version = "=1.14.20" } +solana-metrics = { path = "../metrics", version = "=1.14.20" } +solana-net-utils = { path = "../net-utils", version = "=1.14.20" } +solana-perf = { path = "../perf", version = "=1.14.20" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.20" } +solana-runtime = { path = "../runtime", version = "=1.14.20" } +solana-sdk = { path = "../sdk", version = "=1.14.20" } +solana-streamer = { path = "../streamer", version = "=1.14.20" } +solana-version = { path = "../version", version = "=1.14.20" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.20" } thiserror = "1.0" [dev-dependencies] diff --git a/install/Cargo.toml b/install/Cargo.toml index 84ce016472e000..3e8f2bbd341732 100644 --- a/install/Cargo.toml +++ b/install/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-install" description = "The solana cluster software installer" -version = "1.14.19" +version = "1.14.20" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -26,12 +26,12 @@ reqwest = { version = "0.11.11", default-features = false, features = ["blocking semver = "1.0.10" serde = { version = "1.0.138", features = ["derive"] } serde_yaml = "0.8.26" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.19" } -solana-client = { path = "../client", version = "=1.14.19" } -solana-config-program = { path = "../programs/config", version = "=1.14.19" } -solana-logger = { path = "../logger", version = "=1.14.19" } -solana-sdk = { path = "../sdk", version = "=1.14.19" } -solana-version = { path = "../version", version = "=1.14.19" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.20" } +solana-client = { path = "../client", version = "=1.14.20" } +solana-config-program = { path = "../programs/config", version = "=1.14.20" } +solana-logger = { path = "../logger", version = "=1.14.20" } +solana-sdk = { path = "../sdk", version = "=1.14.20" } +solana-version = { path = "../version", version = "=1.14.20" } tar = "0.4.38" tempfile = "3.4.0" url = "2.2.2" diff --git a/keygen/Cargo.toml b/keygen/Cargo.toml index 6f87f572e75e5f..f23ab6e8e3072b 100644 --- a/keygen/Cargo.toml +++ b/keygen/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-keygen" -version = "1.14.19" +version = "1.14.20" description = "Solana key generation utility" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,11 +14,11 @@ bs58 = "0.4.0" clap = { version = "3.1.5", features = ["cargo"] } dirs-next = "2.0.0" num_cpus = "1.13.1" -solana-clap-v3-utils = { path = "../clap-v3-utils", version = "=1.14.19" } -solana-cli-config = { path = "../cli-config", version = "=1.14.19" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.19" } -solana-sdk = { path = "../sdk", version = "=1.14.19" } -solana-version = { path = "../version", version = "=1.14.19" } +solana-clap-v3-utils = { path = "../clap-v3-utils", version = "=1.14.20" } +solana-cli-config = { path = "../cli-config", version = "=1.14.20" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.20" } +solana-sdk = { path = "../sdk", version = "=1.14.20" } +solana-version = { path = "../version", version = "=1.14.20" } tiny-bip39 = "0.8.2" [[bin]] diff --git a/ledger-tool/Cargo.toml b/ledger-tool/Cargo.toml index 45f0a258b3662f..ee85e23ed9ecb9 100644 --- a/ledger-tool/Cargo.toml +++ b/ledger-tool/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-ledger-tool" description = "Blockchain, Rebuilt for Scale" -version = "1.14.19" +version = "1.14.20" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -22,20 +22,20 @@ log = { version = "0.4.17" } regex = "1" serde = { version = "1.0", features = ["derive"] } serde_json = "1.0.81" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.19" } -solana-cli-output = { path = "../cli-output", version = "=1.14.19" } -solana-core = { path = "../core", version = "=1.14.19" } -solana-entry = { path = "../entry", version = "=1.14.19" } -solana-ledger = { path = "../ledger", version = "=1.14.19" } -solana-logger = { path = "../logger", version = "=1.14.19" } -solana-measure = { path = "../measure", version = "=1.14.19" } -solana-runtime = { path = "../runtime", version = "=1.14.19" } -solana-sdk = { path = "../sdk", version = "=1.14.19" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.19" } -solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.19" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.19" } -solana-version = { path = "../version", version = "=1.14.19" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.19" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.20" } +solana-cli-output = { path = "../cli-output", version = "=1.14.20" } +solana-core = { path = "../core", version = "=1.14.20" } +solana-entry = { path = "../entry", version = "=1.14.20" } +solana-ledger = { path = "../ledger", version = "=1.14.20" } +solana-logger = { path = "../logger", version = "=1.14.20" } +solana-measure = { path = "../measure", version = "=1.14.20" } +solana-runtime = { path = "../runtime", version = "=1.14.20" } +solana-sdk = { path = "../sdk", version = "=1.14.20" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.20" } +solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.20" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.20" } +solana-version = { path = "../version", version = "=1.14.20" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.20" } tokio = { version = "1", features = ["full"] } [target.'cfg(not(target_env = "msvc"))'.dependencies] diff --git a/ledger/Cargo.toml b/ledger/Cargo.toml index 0685218412381b..24b048c21b5367 100644 --- a/ledger/Cargo.toml +++ b/ledger/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-ledger" -version = "1.14.19" +version = "1.14.20" description = "Solana ledger" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -35,23 +35,23 @@ reed-solomon-erasure = { version = "6.0.0", features = ["simd-accel"] } serde = "1.0.138" serde_bytes = "0.11.6" sha2 = "0.10.2" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.19" } -solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.19" } -solana-entry = { path = "../entry", version = "=1.14.19" } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.19" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.19" } -solana-measure = { path = "../measure", version = "=1.14.19" } -solana-metrics = { path = "../metrics", version = "=1.14.19" } -solana-perf = { path = "../perf", version = "=1.14.19" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.19" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.19" } -solana-runtime = { path = "../runtime", version = "=1.14.19" } -solana-sdk = { path = "../sdk", version = "=1.14.19" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.19" } -solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.19" } -solana-storage-proto = { path = "../storage-proto", version = "=1.14.19" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.19" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.19" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.20" } +solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.20" } +solana-entry = { path = "../entry", version = "=1.14.20" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.20" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.20" } +solana-measure = { path = "../measure", version = "=1.14.20" } +solana-metrics = { path = "../metrics", version = "=1.14.20" } +solana-perf = { path = "../perf", version = "=1.14.20" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.20" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.20" } +solana-runtime = { path = "../runtime", version = "=1.14.20" } +solana-sdk = { path = "../sdk", version = "=1.14.20" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.20" } +solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.20" } +solana-storage-proto = { path = "../storage-proto", version = "=1.14.20" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.20" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.20" } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } spl-token-2022 = { version = "=0.6.1", features = ["no-entrypoint"] } static_assertions = "1.1.0" @@ -71,8 +71,8 @@ features = ["lz4"] [dev-dependencies] bs58 = "0.4.0" matches = "0.1.9" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.19" } -solana-logger = { path = "../logger", version = "=1.14.19" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.20" } +solana-logger = { path = "../logger", version = "=1.14.20" } test-case = "2.1.0" [build-dependencies] diff --git a/local-cluster/Cargo.toml b/local-cluster/Cargo.toml index ad5995fcd8dc9c..ee5aa076c36b2c 100644 --- a/local-cluster/Cargo.toml +++ b/local-cluster/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-local-cluster" description = "Blockchain, Rebuilt for Scale" -version = "1.14.19" +version = "1.14.20" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -16,25 +16,25 @@ itertools = "0.10.3" log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" -solana-client = { path = "../client", version = "=1.14.19" } -solana-config-program = { path = "../programs/config", version = "=1.14.19" } -solana-core = { path = "../core", version = "=1.14.19" } -solana-entry = { path = "../entry", version = "=1.14.19" } -solana-gossip = { path = "../gossip", version = "=1.14.19" } -solana-ledger = { path = "../ledger", version = "=1.14.19" } -solana-runtime = { path = "../runtime", version = "=1.14.19" } -solana-sdk = { path = "../sdk", version = "=1.14.19" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.19" } -solana-streamer = { path = "../streamer", version = "=1.14.19" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.19" } +solana-client = { path = "../client", version = "=1.14.20" } +solana-config-program = { path = "../programs/config", version = "=1.14.20" } +solana-core = { path = "../core", version = "=1.14.20" } +solana-entry = { path = "../entry", version = "=1.14.20" } +solana-gossip = { path = "../gossip", version = "=1.14.20" } +solana-ledger = { path = "../ledger", version = "=1.14.20" } +solana-runtime = { path = "../runtime", version = "=1.14.20" } +solana-sdk = { path = "../sdk", version = "=1.14.20" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.20" } +solana-streamer = { path = "../streamer", version = "=1.14.20" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.20" } tempfile = "3.4.0" [dev-dependencies] assert_matches = "1.5.0" gag = "1.0.0" serial_test = "0.8.0" -solana-download-utils = { path = "../download-utils", version = "=1.14.19" } -solana-logger = { path = "../logger", version = "=1.14.19" } +solana-download-utils = { path = "../download-utils", version = "=1.14.20" } +solana-logger = { path = "../logger", version = "=1.14.20" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/log-analyzer/Cargo.toml b/log-analyzer/Cargo.toml index 76e1721da78bb6..77624788b944b1 100644 --- a/log-analyzer/Cargo.toml +++ b/log-analyzer/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-log-analyzer" description = "The solana cluster network analysis tool" -version = "1.14.19" +version = "1.14.20" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,8 +14,8 @@ byte-unit = "4.0.14" clap = { version = "3.1.5", features = ["cargo"] } serde = "1.0.138" serde_json = "1.0.81" -solana-logger = { path = "../logger", version = "=1.14.19" } -solana-version = { path = "../version", version = "=1.14.19" } +solana-logger = { path = "../logger", version = "=1.14.20" } +solana-version = { path = "../version", version = "=1.14.20" } [[bin]] name = "solana-log-analyzer" diff --git a/logger/Cargo.toml b/logger/Cargo.toml index e64787592729e1..85423e223f1672 100644 --- a/logger/Cargo.toml +++ b/logger/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-logger" -version = "1.14.19" +version = "1.14.20" description = "Solana Logger" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/measure/Cargo.toml b/measure/Cargo.toml index b5edab221964f7..c9410bd8f17e2d 100644 --- a/measure/Cargo.toml +++ b/measure/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "solana-measure" description = "Blockchain, Rebuilt for Scale" -version = "1.14.19" +version = "1.14.20" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-measure" readme = "../README.md" @@ -12,7 +12,7 @@ edition = "2021" [dependencies] log = "0.4.17" -solana-sdk = { path = "../sdk", version = "=1.14.19" } +solana-sdk = { path = "../sdk", version = "=1.14.20" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/merkle-root-bench/Cargo.toml b/merkle-root-bench/Cargo.toml index 7bc96fb008709e..7cbaae8e679671 100644 --- a/merkle-root-bench/Cargo.toml +++ b/merkle-root-bench/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-merkle-root-bench" -version = "1.14.19" +version = "1.14.20" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -11,11 +11,11 @@ publish = false [dependencies] clap = "2.33.1" log = "0.4.17" -solana-logger = { path = "../logger", version = "=1.14.19" } -solana-measure = { path = "../measure", version = "=1.14.19" } -solana-runtime = { path = "../runtime", version = "=1.14.19" } -solana-sdk = { path = "../sdk", version = "=1.14.19" } -solana-version = { path = "../version", version = "=1.14.19" } +solana-logger = { path = "../logger", version = "=1.14.20" } +solana-measure = { path = "../measure", version = "=1.14.20" } +solana-runtime = { path = "../runtime", version = "=1.14.20" } +solana-sdk = { path = "../sdk", version = "=1.14.20" } +solana-version = { path = "../version", version = "=1.14.20" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/merkle-tree/Cargo.toml b/merkle-tree/Cargo.toml index f6be2c13aa99ff..e7a8a737247b56 100644 --- a/merkle-tree/Cargo.toml +++ b/merkle-tree/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-merkle-tree" -version = "1.14.19" +version = "1.14.20" description = "Solana Merkle Tree" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -11,7 +11,7 @@ edition = "2021" [dependencies] fast-math = "0.1" -solana-program = { path = "../sdk/program", version = "=1.14.19" } +solana-program = { path = "../sdk/program", version = "=1.14.20" } # This can go once the BPF toolchain target Rust 1.42.0+ [target.bpfel-unknown-unknown.dependencies] diff --git a/metrics/Cargo.toml b/metrics/Cargo.toml index fbfd13a508d610..5bc5f1f0a346f5 100644 --- a/metrics/Cargo.toml +++ b/metrics/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-metrics" -version = "1.14.19" +version = "1.14.20" description = "Solana Metrics" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -15,7 +15,7 @@ gethostname = "0.2.3" lazy_static = "1.4.0" log = "0.4.17" reqwest = { version = "0.11.11", default-features = false, features = ["blocking", "brotli", "deflate", "gzip", "rustls-tls", "json"] } -solana-sdk = { path = "../sdk", version = "=1.14.19" } +solana-sdk = { path = "../sdk", version = "=1.14.20" } [dev-dependencies] env_logger = "0.9.0" diff --git a/net-shaper/Cargo.toml b/net-shaper/Cargo.toml index ead997e032bd9c..70153d7907927c 100644 --- a/net-shaper/Cargo.toml +++ b/net-shaper/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-net-shaper" description = "The solana cluster network shaping tool" -version = "1.14.19" +version = "1.14.20" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,7 +14,7 @@ clap = { version = "3.1.5", features = ["cargo"] } rand = "0.7.0" serde = { version = "1.0.138", features = ["derive"] } serde_json = "1.0.81" -solana-logger = { path = "../logger", version = "=1.14.19" } +solana-logger = { path = "../logger", version = "=1.14.20" } [[bin]] name = "solana-net-shaper" diff --git a/net-utils/Cargo.toml b/net-utils/Cargo.toml index 2ddab28f606693..8cb253297be966 100644 --- a/net-utils/Cargo.toml +++ b/net-utils/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-net-utils" -version = "1.14.19" +version = "1.14.20" description = "Solana Network Utilities" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -19,9 +19,9 @@ rand = "0.7.0" serde = "1.0.138" serde_derive = "1.0.103" socket2 = "0.4.4" -solana-logger = { path = "../logger", version = "=1.14.19" } -solana-sdk = { path = "../sdk", version = "=1.14.19" } -solana-version = { path = "../version", version = "=1.14.19" } +solana-logger = { path = "../logger", version = "=1.14.20" } +solana-sdk = { path = "../sdk", version = "=1.14.20" } +solana-version = { path = "../version", version = "=1.14.20" } tokio = { version = "1", features = ["full"] } url = "2.2.2" diff --git a/notifier/Cargo.toml b/notifier/Cargo.toml index 12de1982882665..0242079be43484 100644 --- a/notifier/Cargo.toml +++ b/notifier/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-notifier" -version = "1.14.19" +version = "1.14.20" description = "Solana Notifier" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/perf/Cargo.toml b/perf/Cargo.toml index 182f3318dc3f41..58327e419bcf0c 100644 --- a/perf/Cargo.toml +++ b/perf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-perf" -version = "1.14.19" +version = "1.14.20" description = "Solana Performance APIs" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -22,10 +22,10 @@ log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" serde = "1.0.138" -solana-metrics = { path = "../metrics", version = "=1.14.19" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.19" } -solana-sdk = { path = "../sdk", version = "=1.14.19" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.19" } +solana-metrics = { path = "../metrics", version = "=1.14.20" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.20" } +solana-sdk = { path = "../sdk", version = "=1.14.20" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.20" } [target."cfg(target_os = \"linux\")".dependencies] caps = "0.5.3" @@ -38,7 +38,7 @@ name = "solana_perf" [dev-dependencies] matches = "0.1.9" rand_chacha = "0.2.2" -solana-logger = { path = "../logger", version = "=1.14.19" } +solana-logger = { path = "../logger", version = "=1.14.20" } test-case = "2.1.0" [[bench]] diff --git a/poh-bench/Cargo.toml b/poh-bench/Cargo.toml index 9917d6440cbe15..bba520a680eb99 100644 --- a/poh-bench/Cargo.toml +++ b/poh-bench/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-poh-bench" -version = "1.14.19" +version = "1.14.20" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,12 +14,12 @@ clap = { version = "3.1.5", features = ["cargo"] } log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" -solana-entry = { path = "../entry", version = "=1.14.19" } -solana-logger = { path = "../logger", version = "=1.14.19" } -solana-measure = { path = "../measure", version = "=1.14.19" } -solana-perf = { path = "../perf", version = "=1.14.19" } -solana-sdk = { path = "../sdk", version = "=1.14.19" } -solana-version = { path = "../version", version = "=1.14.19" } +solana-entry = { path = "../entry", version = "=1.14.20" } +solana-logger = { path = "../logger", version = "=1.14.20" } +solana-measure = { path = "../measure", version = "=1.14.20" } +solana-perf = { path = "../perf", version = "=1.14.20" } +solana-sdk = { path = "../sdk", version = "=1.14.20" } +solana-version = { path = "../version", version = "=1.14.20" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/poh/Cargo.toml b/poh/Cargo.toml index 3fdb1f9b74c45a..c97e0e86c23dd1 100644 --- a/poh/Cargo.toml +++ b/poh/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-poh" -version = "1.14.19" +version = "1.14.20" description = "Solana PoH" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,21 +13,21 @@ edition = "2021" core_affinity = "0.5.10" crossbeam-channel = "0.5" log = "0.4.17" -solana-entry = { path = "../entry", version = "=1.14.19" } -solana-ledger = { path = "../ledger", version = "=1.14.19" } -solana-measure = { path = "../measure", version = "=1.14.19" } -solana-metrics = { path = "../metrics", version = "=1.14.19" } -solana-runtime = { path = "../runtime", version = "=1.14.19" } -solana-sdk = { path = "../sdk", version = "=1.14.19" } -solana-sys-tuner = { path = "../sys-tuner", version = "=1.14.19" } +solana-entry = { path = "../entry", version = "=1.14.20" } +solana-ledger = { path = "../ledger", version = "=1.14.20" } +solana-measure = { path = "../measure", version = "=1.14.20" } +solana-metrics = { path = "../metrics", version = "=1.14.20" } +solana-runtime = { path = "../runtime", version = "=1.14.20" } +solana-sdk = { path = "../sdk", version = "=1.14.20" } +solana-sys-tuner = { path = "../sys-tuner", version = "=1.14.20" } thiserror = "1.0" [dev-dependencies] bincode = "1.3.3" matches = "0.1.9" rand = "0.7.0" -solana-logger = { path = "../logger", version = "=1.14.19" } -solana-perf = { path = "../perf", version = "=1.14.19" } +solana-logger = { path = "../logger", version = "=1.14.20" } +solana-perf = { path = "../perf", version = "=1.14.20" } [lib] crate-type = ["lib"] diff --git a/program-runtime/Cargo.toml b/program-runtime/Cargo.toml index 8316ba646095ea..8d8f40037641cc 100644 --- a/program-runtime/Cargo.toml +++ b/program-runtime/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-program-runtime" -version = "1.14.19" +version = "1.14.20" description = "Solana program runtime" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -21,16 +21,16 @@ num-derive = { version = "0.3" } num-traits = { version = "0.2" } rand = "0.7.0" serde = { version = "1.0.129", features = ["derive", "rc"] } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.19" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.19" } -solana-measure = { path = "../measure", version = "=1.14.19" } -solana-metrics = { path = "../metrics", version = "=1.14.19" } -solana-sdk = { path = "../sdk", version = "=1.14.19" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.20" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.20" } +solana-measure = { path = "../measure", version = "=1.14.20" } +solana-metrics = { path = "../metrics", version = "=1.14.20" } +solana-sdk = { path = "../sdk", version = "=1.14.20" } thiserror = "1.0" enum-iterator = "0.8.1" [dev-dependencies] -solana-logger = { path = "../logger", version = "=1.14.19" } +solana-logger = { path = "../logger", version = "=1.14.20" } [lib] crate-type = ["lib"] diff --git a/program-test/Cargo.toml b/program-test/Cargo.toml index b9ea59c1974799..21056de54d0cdf 100644 --- a/program-test/Cargo.toml +++ b/program-test/Cargo.toml @@ -5,7 +5,7 @@ edition = "2021" license = "Apache-2.0" name = "solana-program-test" repository = "https://github.com/solana-labs/solana" -version = "1.14.19" +version = "1.14.20" [dependencies] assert_matches = "1.5.0" @@ -15,16 +15,16 @@ bincode = "1.3.3" chrono-humanize = "0.2.1" log = "0.4.17" serde = "1.0.138" -solana-banks-client = { path = "../banks-client", version = "=1.14.19" } -solana-banks-server = { path = "../banks-server", version = "=1.14.19" } -solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.19" } -solana-logger = { path = "../logger", version = "=1.14.19" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.19" } -solana-runtime = { path = "../runtime", version = "=1.14.19" } -solana-sdk = { path = "../sdk", version = "=1.14.19" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.19" } +solana-banks-client = { path = "../banks-client", version = "=1.14.20" } +solana-banks-server = { path = "../banks-server", version = "=1.14.20" } +solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.20" } +solana-logger = { path = "../logger", version = "=1.14.20" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.20" } +solana-runtime = { path = "../runtime", version = "=1.14.20" } +solana-sdk = { path = "../sdk", version = "=1.14.20" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.20" } thiserror = "1.0" tokio = { version = "1", features = ["full"] } [dev-dependencies] -solana-stake-program = { path = "../programs/stake", version = "=1.14.19" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.20" } diff --git a/programs/address-lookup-table-tests/Cargo.toml b/programs/address-lookup-table-tests/Cargo.toml index 55e1909c91eb27..b814b6eaf985a5 100644 --- a/programs/address-lookup-table-tests/Cargo.toml +++ b/programs/address-lookup-table-tests/Cargo.toml @@ -3,7 +3,7 @@ [package] name = "solana-address-lookup-table-program-tests" -version = "1.14.19" +version = "1.14.20" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" @@ -14,9 +14,9 @@ publish = false [dev-dependencies] assert_matches = "1.5.0" bincode = "1.3.3" -solana-address-lookup-table-program = { path = "../address-lookup-table", version = "=1.14.19" } -solana-program-test = { path = "../../program-test", version = "=1.14.19" } -solana-sdk = { path = "../../sdk", version = "=1.14.19" } +solana-address-lookup-table-program = { path = "../address-lookup-table", version = "=1.14.20" } +solana-program-test = { path = "../../program-test", version = "=1.14.20" } +solana-sdk = { path = "../../sdk", version = "=1.14.20" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/address-lookup-table/Cargo.toml b/programs/address-lookup-table/Cargo.toml index ae2cab92c07b1f..0477aac5dbcf02 100644 --- a/programs/address-lookup-table/Cargo.toml +++ b/programs/address-lookup-table/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-address-lookup-table-program" -version = "1.14.19" +version = "1.14.20" description = "Solana address lookup table program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -16,14 +16,14 @@ log = "0.4.17" num-derive = "0.3" num-traits = "0.2" serde = { version = "1.0.138", features = ["derive"] } -solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.19" } -solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.19" } -solana-program = { path = "../../sdk/program", version = "=1.14.19" } +solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.20" } +solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.20" } +solana-program = { path = "../../sdk/program", version = "=1.14.20" } thiserror = "1.0" [target.'cfg(not(target_os = "solana"))'.dependencies] -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.19" } -solana-sdk = { path = "../../sdk", version = "=1.14.19" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.20" } +solana-sdk = { path = "../../sdk", version = "=1.14.20" } [build-dependencies] rustc_version = "0.4" diff --git a/programs/bpf-loader-tests/Cargo.toml b/programs/bpf-loader-tests/Cargo.toml index 8379c942d69bea..73fe0464a4a2bc 100644 --- a/programs/bpf-loader-tests/Cargo.toml +++ b/programs/bpf-loader-tests/Cargo.toml @@ -3,7 +3,7 @@ [package] name = "solana-bpf-loader-program-tests" -version = "1.14.19" +version = "1.14.20" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" @@ -14,9 +14,9 @@ publish = false [dev-dependencies] assert_matches = "1.5.0" bincode = "1.3.3" -solana-bpf-loader-program = { path = "../bpf_loader", version = "=1.14.19" } -solana-program-test = { path = "../../program-test", version = "=1.14.19" } -solana-sdk = { path = "../../sdk", version = "=1.14.19" } +solana-bpf-loader-program = { path = "../bpf_loader", version = "=1.14.20" } +solana-program-test = { path = "../../program-test", version = "=1.14.20" } +solana-sdk = { path = "../../sdk", version = "=1.14.20" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/bpf/Cargo.lock b/programs/bpf/Cargo.lock index 450779d7186f46..b0cc7b37cb57df 100644 --- a/programs/bpf/Cargo.lock +++ b/programs/bpf/Cargo.lock @@ -4102,7 +4102,7 @@ dependencies = [ [[package]] name = "solana-account-decoder" -version = "1.14.19" +version = "1.14.20" dependencies = [ "Inflector", "base64 0.13.0", @@ -4115,7 +4115,7 @@ dependencies = [ "serde_json", "solana-address-lookup-table-program", "solana-config-program", - "solana-sdk 1.14.19", + "solana-sdk 1.14.20", "solana-vote-program", "spl-token", "spl-token-2022", @@ -4125,7 +4125,7 @@ dependencies = [ [[package]] name = "solana-address-lookup-table-program" -version = "1.14.19" +version = "1.14.20" dependencies = [ "bincode", "bytemuck", @@ -4134,23 +4134,23 @@ dependencies = [ "num-traits", "rustc_version", "serde", - "solana-frozen-abi 1.14.19", - "solana-frozen-abi-macro 1.14.19", - "solana-program 1.14.19", + "solana-frozen-abi 1.14.20", + "solana-frozen-abi-macro 1.14.20", + "solana-program 1.14.20", "solana-program-runtime", - "solana-sdk 1.14.19", + "solana-sdk 1.14.20", "thiserror", ] [[package]] name = "solana-banks-client" -version = "1.14.19" +version = "1.14.20" dependencies = [ "borsh", "futures 0.3.21", "solana-banks-interface", - "solana-program 1.14.19", - "solana-sdk 1.14.19", + "solana-program 1.14.20", + "solana-sdk 1.14.20", "tarpc", "thiserror", "tokio", @@ -4159,16 +4159,16 @@ dependencies = [ [[package]] name = "solana-banks-interface" -version = "1.14.19" +version = "1.14.20" dependencies = [ "serde", - "solana-sdk 1.14.19", + "solana-sdk 1.14.20", "tarpc", ] [[package]] name = "solana-banks-server" -version = "1.14.19" +version = "1.14.20" dependencies = [ "bincode", "crossbeam-channel", @@ -4176,7 +4176,7 @@ dependencies = [ "solana-banks-interface", "solana-client", "solana-runtime", - "solana-sdk 1.14.19", + "solana-sdk 1.14.20", "solana-send-transaction-service", "tarpc", "tokio", @@ -4186,7 +4186,7 @@ dependencies = [ [[package]] name = "solana-bloom" -version = "1.14.19" +version = "1.14.20" dependencies = [ "bv", "fnv", @@ -4196,14 +4196,14 @@ dependencies = [ "rustc_version", "serde", "serde_derive", - "solana-frozen-abi 1.14.19", - "solana-frozen-abi-macro 1.14.19", - "solana-sdk 1.14.19", + "solana-frozen-abi 1.14.20", + "solana-frozen-abi-macro 1.14.20", + "solana-sdk 1.14.20", ] [[package]] name = "solana-bpf-loader-program" -version = "1.14.19" +version = "1.14.20" dependencies = [ "bincode", "byteorder 1.4.3", @@ -4212,15 +4212,15 @@ dependencies = [ "solana-measure", "solana-metrics", "solana-program-runtime", - "solana-sdk 1.14.19", - "solana-zk-token-sdk 1.14.19", + "solana-sdk 1.14.20", + "solana-zk-token-sdk 1.14.20", "solana_rbpf", "thiserror", ] [[package]] name = "solana-bpf-programs" -version = "1.14.19" +version = "1.14.20" dependencies = [ "bincode", "byteorder 1.4.3", @@ -4236,11 +4236,11 @@ dependencies = [ "solana-bpf-rust-realloc-invoke", "solana-cli-output", "solana-ledger", - "solana-logger 1.14.19", + "solana-logger 1.14.20", "solana-measure", "solana-program-runtime", "solana-runtime", - "solana-sdk 1.14.19", + "solana-sdk 1.14.20", "solana-transaction-status", "solana_rbpf", "walkdir", @@ -4248,385 +4248,385 @@ dependencies = [ [[package]] name = "solana-bpf-rust-128bit" -version = "1.14.19" +version = "1.14.20" dependencies = [ "solana-bpf-rust-128bit-dep", - "solana-program 1.14.19", + "solana-program 1.14.20", ] [[package]] name = "solana-bpf-rust-128bit-dep" -version = "1.14.19" +version = "1.14.20" dependencies = [ - "solana-program 1.14.19", + "solana-program 1.14.20", ] [[package]] name = "solana-bpf-rust-alloc" -version = "1.14.19" +version = "1.14.20" dependencies = [ - "solana-program 1.14.19", + "solana-program 1.14.20", ] [[package]] name = "solana-bpf-rust-call-depth" -version = "1.14.19" +version = "1.14.20" dependencies = [ - "solana-program 1.14.19", + "solana-program 1.14.20", ] [[package]] name = "solana-bpf-rust-caller-access" -version = "1.14.19" +version = "1.14.20" dependencies = [ - "solana-program 1.14.19", + "solana-program 1.14.20", ] [[package]] name = "solana-bpf-rust-curve25519" -version = "1.14.19" +version = "1.14.20" dependencies = [ - "solana-program 1.14.19", - "solana-zk-token-sdk 1.14.19", + "solana-program 1.14.20", + "solana-zk-token-sdk 1.14.20", ] [[package]] name = "solana-bpf-rust-custom-heap" -version = "1.14.19" +version = "1.14.20" dependencies = [ - "solana-program 1.14.19", + "solana-program 1.14.20", ] [[package]] name = "solana-bpf-rust-dep-crate" -version = "1.14.19" +version = "1.14.20" dependencies = [ "byteorder 1.4.3", "solana-address-lookup-table-program", - "solana-program 1.14.19", + "solana-program 1.14.20", ] [[package]] name = "solana-bpf-rust-deprecated-loader" -version = "1.14.19" +version = "1.14.20" dependencies = [ - "solana-program 1.14.19", + "solana-program 1.14.20", ] [[package]] name = "solana-bpf-rust-dup-accounts" -version = "1.14.19" +version = "1.14.20" dependencies = [ - "solana-program 1.14.19", + "solana-program 1.14.20", ] [[package]] name = "solana-bpf-rust-error-handling" -version = "1.14.19" +version = "1.14.20" dependencies = [ "num-derive", "num-traits", - "solana-program 1.14.19", + "solana-program 1.14.20", "thiserror", ] [[package]] name = "solana-bpf-rust-external-spend" -version = "1.14.19" +version = "1.14.20" dependencies = [ - "solana-program 1.14.19", + "solana-program 1.14.20", ] [[package]] name = "solana-bpf-rust-finalize" -version = "1.14.19" +version = "1.14.20" dependencies = [ - "solana-program 1.14.19", + "solana-program 1.14.20", ] [[package]] name = "solana-bpf-rust-get-minimum-delegation" -version = "1.14.19" +version = "1.14.20" dependencies = [ - "solana-program 1.14.19", + "solana-program 1.14.20", ] [[package]] name = "solana-bpf-rust-inner_instruction_alignment_check" -version = "1.14.19" +version = "1.14.20" dependencies = [ - "solana-program 1.14.19", + "solana-program 1.14.20", ] [[package]] name = "solana-bpf-rust-instruction-introspection" -version = "1.14.19" +version = "1.14.20" dependencies = [ - "solana-program 1.14.19", + "solana-program 1.14.20", ] [[package]] name = "solana-bpf-rust-invoke" -version = "1.14.19" +version = "1.14.20" dependencies = [ "solana-bpf-rust-invoked", - "solana-program 1.14.19", + "solana-program 1.14.20", ] [[package]] name = "solana-bpf-rust-invoke-and-error" -version = "1.14.19" +version = "1.14.20" dependencies = [ - "solana-program 1.14.19", + "solana-program 1.14.20", ] [[package]] name = "solana-bpf-rust-invoke-and-ok" -version = "1.14.19" +version = "1.14.20" dependencies = [ - "solana-program 1.14.19", + "solana-program 1.14.20", ] [[package]] name = "solana-bpf-rust-invoke-and-return" -version = "1.14.19" +version = "1.14.20" dependencies = [ - "solana-program 1.14.19", + "solana-program 1.14.20", ] [[package]] name = "solana-bpf-rust-invoked" -version = "1.14.19" +version = "1.14.20" dependencies = [ - "solana-program 1.14.19", + "solana-program 1.14.20", ] [[package]] name = "solana-bpf-rust-iter" -version = "1.14.19" +version = "1.14.20" dependencies = [ - "solana-program 1.14.19", + "solana-program 1.14.20", ] [[package]] name = "solana-bpf-rust-log-data" -version = "1.14.19" +version = "1.14.20" dependencies = [ - "solana-program 1.14.19", + "solana-program 1.14.20", ] [[package]] name = "solana-bpf-rust-many-args" -version = "1.14.19" +version = "1.14.20" dependencies = [ "solana-bpf-rust-many-args-dep", - "solana-program 1.14.19", + "solana-program 1.14.20", ] [[package]] name = "solana-bpf-rust-many-args-dep" -version = "1.14.19" +version = "1.14.20" dependencies = [ - "solana-program 1.14.19", + "solana-program 1.14.20", ] [[package]] name = "solana-bpf-rust-mem" -version = "1.14.19" +version = "1.14.20" dependencies = [ - "solana-program 1.14.19", + "solana-program 1.14.20", "solana-program-runtime", "solana-program-test", - "solana-sdk 1.14.19", + "solana-sdk 1.14.20", ] [[package]] name = "solana-bpf-rust-membuiltins" -version = "1.14.19" +version = "1.14.20" dependencies = [ "solana-bpf-rust-mem", - "solana-program 1.14.19", + "solana-program 1.14.20", ] [[package]] name = "solana-bpf-rust-noop" -version = "1.14.19" +version = "1.14.20" dependencies = [ - "solana-program 1.14.19", + "solana-program 1.14.20", ] [[package]] name = "solana-bpf-rust-panic" -version = "1.14.19" +version = "1.14.20" dependencies = [ - "solana-program 1.14.19", + "solana-program 1.14.20", ] [[package]] name = "solana-bpf-rust-param-passing" -version = "1.14.19" +version = "1.14.20" dependencies = [ "solana-bpf-rust-param-passing-dep", - "solana-program 1.14.19", + "solana-program 1.14.20", ] [[package]] name = "solana-bpf-rust-param-passing-dep" -version = "1.14.19" +version = "1.14.20" dependencies = [ - "solana-program 1.14.19", + "solana-program 1.14.20", ] [[package]] name = "solana-bpf-rust-rand" -version = "1.14.19" +version = "1.14.20" dependencies = [ "getrandom 0.1.14", "rand 0.7.3", - "solana-program 1.14.19", + "solana-program 1.14.20", ] [[package]] name = "solana-bpf-rust-realloc" -version = "1.14.19" +version = "1.14.20" dependencies = [ - "solana-program 1.14.19", + "solana-program 1.14.20", ] [[package]] name = "solana-bpf-rust-realloc-invoke" -version = "1.14.19" +version = "1.14.20" dependencies = [ "solana-bpf-rust-realloc", - "solana-program 1.14.19", + "solana-program 1.14.20", ] [[package]] name = "solana-bpf-rust-ro-account_modify" -version = "1.14.19" +version = "1.14.20" dependencies = [ - "solana-program 1.14.19", + "solana-program 1.14.20", ] [[package]] name = "solana-bpf-rust-ro-modify" -version = "1.14.19" +version = "1.14.20" dependencies = [ - "solana-program 1.14.19", + "solana-program 1.14.20", ] [[package]] name = "solana-bpf-rust-sanity" -version = "1.14.19" +version = "1.14.20" dependencies = [ - "solana-program 1.14.19", + "solana-program 1.14.20", "solana-program-runtime", "solana-program-test", - "solana-sdk 1.14.19", + "solana-sdk 1.14.20", ] [[package]] name = "solana-bpf-rust-secp256k1-recover" -version = "1.14.19" +version = "1.14.20" dependencies = [ "libsecp256k1 0.7.0", - "solana-program 1.14.19", + "solana-program 1.14.20", ] [[package]] name = "solana-bpf-rust-sha" -version = "1.14.19" +version = "1.14.20" dependencies = [ "blake3", - "solana-program 1.14.19", + "solana-program 1.14.20", ] [[package]] name = "solana-bpf-rust-sibling-instructions" -version = "1.14.19" +version = "1.14.20" dependencies = [ - "solana-program 1.14.19", + "solana-program 1.14.20", ] [[package]] name = "solana-bpf-rust-sibling_inner-instructions" -version = "1.14.19" +version = "1.14.20" dependencies = [ - "solana-program 1.14.19", + "solana-program 1.14.20", ] [[package]] name = "solana-bpf-rust-simulation" -version = "1.14.19" +version = "1.14.20" dependencies = [ - "solana-logger 1.14.19", - "solana-program 1.14.19", + "solana-logger 1.14.20", + "solana-program 1.14.20", "solana-program-test", - "solana-sdk 1.14.19", + "solana-sdk 1.14.20", "solana-validator", ] [[package]] name = "solana-bpf-rust-spoof1" -version = "1.14.19" +version = "1.14.20" dependencies = [ - "solana-program 1.14.19", + "solana-program 1.14.20", ] [[package]] name = "solana-bpf-rust-spoof1-system" -version = "1.14.19" +version = "1.14.20" dependencies = [ - "solana-program 1.14.19", + "solana-program 1.14.20", ] [[package]] name = "solana-bpf-rust-sysvar" -version = "1.14.19" +version = "1.14.20" dependencies = [ - "solana-program 1.14.19", + "solana-program 1.14.20", "solana-program-runtime", "solana-program-test", - "solana-sdk 1.14.19", + "solana-sdk 1.14.20", ] [[package]] name = "solana-bpf-rust-upgradeable" -version = "1.14.19" +version = "1.14.20" dependencies = [ - "solana-program 1.14.19", + "solana-program 1.14.20", ] [[package]] name = "solana-bpf-rust-upgraded" -version = "1.14.19" +version = "1.14.20" dependencies = [ - "solana-program 1.14.19", + "solana-program 1.14.20", ] [[package]] name = "solana-bucket-map" -version = "1.14.19" +version = "1.14.20" dependencies = [ "log", "memmap2", "modular-bitfield", "rand 0.7.3", "solana-measure", - "solana-sdk 1.14.19", + "solana-sdk 1.14.20", "tempfile", ] [[package]] name = "solana-clap-utils" -version = "1.14.19" +version = "1.14.20" dependencies = [ "chrono", "clap 2.33.3", "rpassword", "solana-perf", "solana-remote-wallet", - "solana-sdk 1.14.19", + "solana-sdk 1.14.20", "thiserror", "tiny-bip39", "uriparse", @@ -4635,7 +4635,7 @@ dependencies = [ [[package]] name = "solana-cli-config" -version = "1.14.19" +version = "1.14.20" dependencies = [ "dirs-next", "lazy_static", @@ -4643,13 +4643,13 @@ dependencies = [ "serde_derive", "serde_yaml", "solana-clap-utils", - "solana-sdk 1.14.19", + "solana-sdk 1.14.20", "url 2.2.2", ] [[package]] name = "solana-cli-output" -version = "1.14.19" +version = "1.14.20" dependencies = [ "Inflector", "base64 0.13.0", @@ -4666,7 +4666,7 @@ dependencies = [ "solana-clap-utils", "solana-cli-config", "solana-client", - "solana-sdk 1.14.19", + "solana-sdk 1.14.20", "solana-transaction-status", "solana-vote-program", "spl-memo", @@ -4674,7 +4674,7 @@ dependencies = [ [[package]] name = "solana-client" -version = "1.14.19" +version = "1.14.20" dependencies = [ "async-mutex", "async-trait", @@ -4710,7 +4710,7 @@ dependencies = [ "solana-measure", "solana-metrics", "solana-net-utils", - "solana-sdk 1.14.19", + "solana-sdk 1.14.20", "solana-streamer", "solana-transaction-status", "solana-version", @@ -4726,27 +4726,27 @@ dependencies = [ [[package]] name = "solana-compute-budget-program" -version = "1.14.19" +version = "1.14.20" dependencies = [ "solana-program-runtime", - "solana-sdk 1.14.19", + "solana-sdk 1.14.20", ] [[package]] name = "solana-config-program" -version = "1.14.19" +version = "1.14.20" dependencies = [ "bincode", "chrono", "serde", "serde_derive", "solana-program-runtime", - "solana-sdk 1.14.19", + "solana-sdk 1.14.20", ] [[package]] name = "solana-core" -version = "1.14.19" +version = "1.14.20" dependencies = [ "ahash", "base64 0.13.0", @@ -4775,8 +4775,8 @@ dependencies = [ "solana-bloom", "solana-client", "solana-entry", - "solana-frozen-abi 1.14.19", - "solana-frozen-abi-macro 1.14.19", + "solana-frozen-abi 1.14.20", + "solana-frozen-abi-macro 1.14.20", "solana-geyser-plugin-manager", "solana-gossip", "solana-ledger", @@ -4789,7 +4789,7 @@ dependencies = [ "solana-rayon-threadlimit", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.19", + "solana-sdk 1.14.20", "solana-send-transaction-service", "solana-streamer", "solana-transaction-status", @@ -4805,19 +4805,19 @@ dependencies = [ [[package]] name = "solana-download-utils" -version = "1.14.19" +version = "1.14.20" dependencies = [ "console", "indicatif", "log", "reqwest", "solana-runtime", - "solana-sdk 1.14.19", + "solana-sdk 1.14.20", ] [[package]] name = "solana-entry" -version = "1.14.19" +version = "1.14.20" dependencies = [ "bincode", "crossbeam-channel", @@ -4833,12 +4833,12 @@ dependencies = [ "solana-metrics", "solana-perf", "solana-rayon-threadlimit", - "solana-sdk 1.14.19", + "solana-sdk 1.14.20", ] [[package]] name = "solana-faucet" -version = "1.14.19" +version = "1.14.20" dependencies = [ "bincode", "byteorder 1.4.3", @@ -4849,9 +4849,9 @@ dependencies = [ "serde_derive", "solana-clap-utils", "solana-cli-config", - "solana-logger 1.14.19", + "solana-logger 1.14.20", "solana-metrics", - "solana-sdk 1.14.19", + "solana-sdk 1.14.20", "solana-version", "spl-memo", "thiserror", @@ -4894,7 +4894,7 @@ dependencies = [ [[package]] name = "solana-frozen-abi" -version = "1.14.19" +version = "1.14.20" dependencies = [ "ahash", "blake3", @@ -4919,7 +4919,7 @@ dependencies = [ "serde_derive", "serde_json", "sha2 0.10.2", - "solana-frozen-abi-macro 1.14.19", + "solana-frozen-abi-macro 1.14.20", "subtle", "thiserror", ] @@ -4938,7 +4938,7 @@ dependencies = [ [[package]] name = "solana-frozen-abi-macro" -version = "1.14.19" +version = "1.14.20" dependencies = [ "proc-macro2 1.0.51", "quote 1.0.18", @@ -4948,26 +4948,26 @@ dependencies = [ [[package]] name = "solana-genesis-utils" -version = "1.14.19" +version = "1.14.20" dependencies = [ "solana-download-utils", "solana-runtime", - "solana-sdk 1.14.19", + "solana-sdk 1.14.20", ] [[package]] name = "solana-geyser-plugin-interface" -version = "1.14.19" +version = "1.14.20" dependencies = [ "log", - "solana-sdk 1.14.19", + "solana-sdk 1.14.20", "solana-transaction-status", "thiserror", ] [[package]] name = "solana-geyser-plugin-manager" -version = "1.14.19" +version = "1.14.20" dependencies = [ "bs58", "crossbeam-channel", @@ -4980,14 +4980,14 @@ dependencies = [ "solana-metrics", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.19", + "solana-sdk 1.14.20", "solana-transaction-status", "thiserror", ] [[package]] name = "solana-gossip" -version = "1.14.19" +version = "1.14.20" dependencies = [ "bincode", "bv", @@ -5011,17 +5011,17 @@ dependencies = [ "solana-clap-utils", "solana-client", "solana-entry", - "solana-frozen-abi 1.14.19", - "solana-frozen-abi-macro 1.14.19", + "solana-frozen-abi 1.14.20", + "solana-frozen-abi-macro 1.14.20", "solana-ledger", - "solana-logger 1.14.19", + "solana-logger 1.14.20", "solana-measure", "solana-metrics", "solana-net-utils", "solana-perf", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.14.19", + "solana-sdk 1.14.20", "solana-streamer", "solana-version", "solana-vote-program", @@ -5030,7 +5030,7 @@ dependencies = [ [[package]] name = "solana-ledger" -version = "1.14.19" +version = "1.14.20" dependencies = [ "assert_matches", "bincode", @@ -5062,15 +5062,15 @@ dependencies = [ "solana-account-decoder", "solana-bpf-loader-program", "solana-entry", - "solana-frozen-abi 1.14.19", - "solana-frozen-abi-macro 1.14.19", + "solana-frozen-abi 1.14.20", + "solana-frozen-abi-macro 1.14.20", "solana-measure", "solana-metrics", "solana-perf", "solana-program-runtime", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.14.19", + "solana-sdk 1.14.20", "solana-stake-program", "solana-storage-bigtable", "solana-storage-proto", @@ -5099,7 +5099,7 @@ dependencies = [ [[package]] name = "solana-logger" -version = "1.14.19" +version = "1.14.20" dependencies = [ "env_logger", "lazy_static", @@ -5108,36 +5108,36 @@ dependencies = [ [[package]] name = "solana-measure" -version = "1.14.19" +version = "1.14.20" dependencies = [ "log", - "solana-sdk 1.14.19", + "solana-sdk 1.14.20", ] [[package]] name = "solana-merkle-tree" -version = "1.14.19" +version = "1.14.20" dependencies = [ "fast-math", "matches", - "solana-program 1.14.19", + "solana-program 1.14.20", ] [[package]] name = "solana-metrics" -version = "1.14.19" +version = "1.14.20" dependencies = [ "crossbeam-channel", "gethostname", "lazy_static", "log", "reqwest", - "solana-sdk 1.14.19", + "solana-sdk 1.14.20", ] [[package]] name = "solana-net-utils" -version = "1.14.19" +version = "1.14.20" dependencies = [ "bincode", "clap 3.1.6", @@ -5148,8 +5148,8 @@ dependencies = [ "serde", "serde_derive", "socket2", - "solana-logger 1.14.19", - "solana-sdk 1.14.19", + "solana-logger 1.14.20", + "solana-sdk 1.14.20", "solana-version", "tokio", "url 2.2.2", @@ -5157,7 +5157,7 @@ dependencies = [ [[package]] name = "solana-perf" -version = "1.14.19" +version = "1.14.20" dependencies = [ "ahash", "bincode", @@ -5176,13 +5176,13 @@ dependencies = [ "serde", "solana-metrics", "solana-rayon-threadlimit", - "solana-sdk 1.14.19", + "solana-sdk 1.14.20", "solana-vote-program", ] [[package]] name = "solana-poh" -version = "1.14.19" +version = "1.14.20" dependencies = [ "core_affinity", "crossbeam-channel", @@ -5192,7 +5192,7 @@ dependencies = [ "solana-measure", "solana-metrics", "solana-runtime", - "solana-sdk 1.14.19", + "solana-sdk 1.14.20", "solana-sys-tuner", "thiserror", ] @@ -5248,7 +5248,7 @@ dependencies = [ [[package]] name = "solana-program" -version = "1.14.19" +version = "1.14.20" dependencies = [ "base64 0.13.0", "bincode", @@ -5284,9 +5284,9 @@ dependencies = [ "serde_json", "sha2 0.10.2", "sha3 0.10.1", - "solana-frozen-abi 1.14.19", - "solana-frozen-abi-macro 1.14.19", - "solana-sdk-macro 1.14.19", + "solana-frozen-abi 1.14.20", + "solana-frozen-abi-macro 1.14.20", + "solana-sdk-macro 1.14.20", "thiserror", "tiny-bip39", "wasm-bindgen", @@ -5295,7 +5295,7 @@ dependencies = [ [[package]] name = "solana-program-runtime" -version = "1.14.19" +version = "1.14.20" dependencies = [ "base64 0.13.0", "bincode", @@ -5310,17 +5310,17 @@ dependencies = [ "rand 0.7.3", "rustc_version", "serde", - "solana-frozen-abi 1.14.19", - "solana-frozen-abi-macro 1.14.19", + "solana-frozen-abi 1.14.20", + "solana-frozen-abi-macro 1.14.20", "solana-measure", "solana-metrics", - "solana-sdk 1.14.19", + "solana-sdk 1.14.20", "thiserror", ] [[package]] name = "solana-program-test" -version = "1.14.19" +version = "1.14.20" dependencies = [ "assert_matches", "async-trait", @@ -5332,10 +5332,10 @@ dependencies = [ "solana-banks-client", "solana-banks-server", "solana-bpf-loader-program", - "solana-logger 1.14.19", + "solana-logger 1.14.20", "solana-program-runtime", "solana-runtime", - "solana-sdk 1.14.19", + "solana-sdk 1.14.20", "solana-vote-program", "thiserror", "tokio", @@ -5343,7 +5343,7 @@ dependencies = [ [[package]] name = "solana-rayon-threadlimit" -version = "1.14.19" +version = "1.14.20" dependencies = [ "lazy_static", "num_cpus", @@ -5351,7 +5351,7 @@ dependencies = [ [[package]] name = "solana-remote-wallet" -version = "1.14.19" +version = "1.14.20" dependencies = [ "console", "dialoguer", @@ -5361,14 +5361,14 @@ dependencies = [ "parking_lot 0.12.1", "qstring", "semver", - "solana-sdk 1.14.19", + "solana-sdk 1.14.20", "thiserror", "uriparse", ] [[package]] name = "solana-rpc" -version = "1.14.19" +version = "1.14.20" dependencies = [ "base64 0.13.0", "bincode", @@ -5401,7 +5401,7 @@ dependencies = [ "solana-poh", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.14.19", + "solana-sdk 1.14.20", "solana-send-transaction-service", "solana-stake-program", "solana-storage-bigtable", @@ -5419,7 +5419,7 @@ dependencies = [ [[package]] name = "solana-runtime" -version = "1.14.19" +version = "1.14.20" dependencies = [ "arrayref", "bincode", @@ -5456,17 +5456,17 @@ dependencies = [ "solana-bucket-map", "solana-compute-budget-program", "solana-config-program", - "solana-frozen-abi 1.14.19", - "solana-frozen-abi-macro 1.14.19", + "solana-frozen-abi 1.14.20", + "solana-frozen-abi-macro 1.14.20", "solana-measure", "solana-metrics", "solana-program-runtime", "solana-rayon-threadlimit", - "solana-sdk 1.14.19", + "solana-sdk 1.14.20", "solana-stake-program", "solana-vote-program", "solana-zk-token-proof-program", - "solana-zk-token-sdk 1.14.19", + "solana-zk-token-sdk 1.14.20", "strum", "strum_macros", "symlink", @@ -5529,7 +5529,7 @@ dependencies = [ [[package]] name = "solana-sdk" -version = "1.14.19" +version = "1.14.20" dependencies = [ "assert_matches", "base64 0.13.0", @@ -5566,11 +5566,11 @@ dependencies = [ "serde_json", "sha2 0.10.2", "sha3 0.10.1", - "solana-frozen-abi 1.14.19", - "solana-frozen-abi-macro 1.14.19", - "solana-logger 1.14.19", - "solana-program 1.14.19", - "solana-sdk-macro 1.14.19", + "solana-frozen-abi 1.14.20", + "solana-frozen-abi-macro 1.14.20", + "solana-logger 1.14.20", + "solana-program 1.14.20", + "solana-sdk-macro 1.14.20", "thiserror", "uriparse", "wasm-bindgen", @@ -5591,7 +5591,7 @@ dependencies = [ [[package]] name = "solana-sdk-macro" -version = "1.14.19" +version = "1.14.20" dependencies = [ "bs58", "proc-macro2 1.0.51", @@ -5602,7 +5602,7 @@ dependencies = [ [[package]] name = "solana-send-transaction-service" -version = "1.14.19" +version = "1.14.20" dependencies = [ "crossbeam-channel", "log", @@ -5610,12 +5610,12 @@ dependencies = [ "solana-measure", "solana-metrics", "solana-runtime", - "solana-sdk 1.14.19", + "solana-sdk 1.14.20", ] [[package]] name = "solana-stake-program" -version = "1.14.19" +version = "1.14.20" dependencies = [ "bincode", "log", @@ -5625,18 +5625,18 @@ dependencies = [ "serde", "serde_derive", "solana-config-program", - "solana-frozen-abi 1.14.19", - "solana-frozen-abi-macro 1.14.19", + "solana-frozen-abi 1.14.20", + "solana-frozen-abi-macro 1.14.20", "solana-metrics", "solana-program-runtime", - "solana-sdk 1.14.19", + "solana-sdk 1.14.20", "solana-vote-program", "thiserror", ] [[package]] name = "solana-storage-bigtable" -version = "1.14.19" +version = "1.14.20" dependencies = [ "backoff", "bincode", @@ -5657,7 +5657,7 @@ dependencies = [ "serde_derive", "smpl_jwt", "solana-metrics", - "solana-sdk 1.14.19", + "solana-sdk 1.14.20", "solana-storage-proto", "solana-transaction-status", "thiserror", @@ -5668,7 +5668,7 @@ dependencies = [ [[package]] name = "solana-storage-proto" -version = "1.14.19" +version = "1.14.20" dependencies = [ "bincode", "bs58", @@ -5676,14 +5676,14 @@ dependencies = [ "protobuf-src", "serde", "solana-account-decoder", - "solana-sdk 1.14.19", + "solana-sdk 1.14.20", "solana-transaction-status", "tonic-build 0.8.0", ] [[package]] name = "solana-streamer" -version = "1.14.19" +version = "1.14.20" dependencies = [ "crossbeam-channel", "futures-util", @@ -5702,7 +5702,7 @@ dependencies = [ "rustls 0.20.6", "solana-metrics", "solana-perf", - "solana-sdk 1.14.19", + "solana-sdk 1.14.20", "thiserror", "tokio", "x509-parser", @@ -5710,13 +5710,13 @@ dependencies = [ [[package]] name = "solana-sys-tuner" -version = "1.14.19" +version = "1.14.20" dependencies = [ "clap 2.33.3", "libc", "log", "nix", - "solana-logger 1.14.19", + "solana-logger 1.14.20", "solana-version", "sysctl", "unix_socket2", @@ -5725,7 +5725,7 @@ dependencies = [ [[package]] name = "solana-test-validator" -version = "1.14.19" +version = "1.14.20" dependencies = [ "base64 0.13.0", "log", @@ -5736,20 +5736,20 @@ dependencies = [ "solana-core", "solana-gossip", "solana-ledger", - "solana-logger 1.14.19", + "solana-logger 1.14.20", "solana-net-utils", "solana-program-runtime", "solana-program-test", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.19", + "solana-sdk 1.14.20", "solana-streamer", "tokio", ] [[package]] name = "solana-transaction-status" -version = "1.14.19" +version = "1.14.20" dependencies = [ "Inflector", "base64 0.13.0", @@ -5765,7 +5765,7 @@ dependencies = [ "solana-address-lookup-table-program", "solana-measure", "solana-metrics", - "solana-sdk 1.14.19", + "solana-sdk 1.14.20", "solana-vote-program", "spl-associated-token-account", "spl-memo", @@ -5776,7 +5776,7 @@ dependencies = [ [[package]] name = "solana-validator" -version = "1.14.19" +version = "1.14.20" dependencies = [ "chrono", "clap 2.33.3", @@ -5807,14 +5807,14 @@ dependencies = [ "solana-genesis-utils", "solana-gossip", "solana-ledger", - "solana-logger 1.14.19", + "solana-logger 1.14.20", "solana-metrics", "solana-net-utils", "solana-perf", "solana-poh", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.19", + "solana-sdk 1.14.20", "solana-send-transaction-service", "solana-storage-bigtable", "solana-streamer", @@ -5827,21 +5827,21 @@ dependencies = [ [[package]] name = "solana-version" -version = "1.14.19" +version = "1.14.20" dependencies = [ "log", "rustc_version", "semver", "serde", "serde_derive", - "solana-frozen-abi 1.14.19", - "solana-frozen-abi-macro 1.14.19", - "solana-sdk 1.14.19", + "solana-frozen-abi 1.14.20", + "solana-frozen-abi-macro 1.14.20", + "solana-sdk 1.14.20", ] [[package]] name = "solana-vote-program" -version = "1.14.19" +version = "1.14.20" dependencies = [ "bincode", "log", @@ -5850,25 +5850,25 @@ dependencies = [ "rustc_version", "serde", "serde_derive", - "solana-frozen-abi 1.14.19", - "solana-frozen-abi-macro 1.14.19", + "solana-frozen-abi 1.14.20", + "solana-frozen-abi-macro 1.14.20", "solana-metrics", "solana-program-runtime", - "solana-sdk 1.14.19", + "solana-sdk 1.14.20", "thiserror", ] [[package]] name = "solana-zk-token-proof-program" -version = "1.14.19" +version = "1.14.20" dependencies = [ "bytemuck", "getrandom 0.1.14", "num-derive", "num-traits", "solana-program-runtime", - "solana-sdk 1.14.19", - "solana-zk-token-sdk 1.14.19", + "solana-sdk 1.14.20", + "solana-zk-token-sdk 1.14.20", ] [[package]] @@ -5904,7 +5904,7 @@ dependencies = [ [[package]] name = "solana-zk-token-sdk" -version = "1.14.19" +version = "1.14.20" dependencies = [ "aes-gcm-siv", "arrayref", @@ -5924,8 +5924,8 @@ dependencies = [ "serde", "serde_json", "sha3 0.9.1", - "solana-program 1.14.19", - "solana-sdk 1.14.19", + "solana-program 1.14.20", + "solana-sdk 1.14.20", "subtle", "thiserror", "zeroize", diff --git a/programs/bpf/Cargo.toml b/programs/bpf/Cargo.toml index f66288edd8aa5f..dc19686de49cfa 100644 --- a/programs/bpf/Cargo.toml +++ b/programs/bpf/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "solana-bpf-programs" description = "Blockchain, Rebuilt for Scale" -version = "1.14.19" +version = "1.14.20" documentation = "https://docs.rs/solana" homepage = "https://solana.com/" readme = "README.md" @@ -26,22 +26,22 @@ itertools = "0.10.1" log = "0.4.11" miow = "0.3.6" net2 = "0.2.37" -solana-account-decoder = { path = "../../account-decoder", version = "=1.14.19" } -solana-bpf-loader-program = { path = "../bpf_loader", version = "=1.14.19" } -solana-bpf-rust-invoke = { path = "rust/invoke", version = "=1.14.19" } -solana-bpf-rust-realloc = { path = "rust/realloc", version = "=1.14.19" } -solana-bpf-rust-realloc-invoke = { path = "rust/realloc_invoke", version = "=1.14.19" } -solana-cli-output = { path = "../../cli-output", version = "=1.14.19" } -solana-logger = { path = "../../logger", version = "=1.14.19" } -solana-measure = { path = "../../measure", version = "=1.14.19" } -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.19" } -solana-runtime = { path = "../../runtime", version = "=1.14.19" } -solana-sdk = { path = "../../sdk", version = "=1.14.19" } -solana-transaction-status = { path = "../../transaction-status", version = "=1.14.19" } +solana-account-decoder = { path = "../../account-decoder", version = "=1.14.20" } +solana-bpf-loader-program = { path = "../bpf_loader", version = "=1.14.20" } +solana-bpf-rust-invoke = { path = "rust/invoke", version = "=1.14.20" } +solana-bpf-rust-realloc = { path = "rust/realloc", version = "=1.14.20" } +solana-bpf-rust-realloc-invoke = { path = "rust/realloc_invoke", version = "=1.14.20" } +solana-cli-output = { path = "../../cli-output", version = "=1.14.20" } +solana-logger = { path = "../../logger", version = "=1.14.20" } +solana-measure = { path = "../../measure", version = "=1.14.20" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.20" } +solana-runtime = { path = "../../runtime", version = "=1.14.20" } +solana-sdk = { path = "../../sdk", version = "=1.14.20" } +solana-transaction-status = { path = "../../transaction-status", version = "=1.14.20" } solana_rbpf = "=0.2.31" [dev-dependencies] -solana-ledger = { path = "../../ledger", version = "=1.14.19" } +solana-ledger = { path = "../../ledger", version = "=1.14.20" } [[bench]] name = "bpf_loader" diff --git a/programs/bpf/rust/128bit/Cargo.toml b/programs/bpf/rust/128bit/Cargo.toml index 2499c56dd930c4..470c93e6f161ef 100644 --- a/programs/bpf/rust/128bit/Cargo.toml +++ b/programs/bpf/rust/128bit/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-128bit" -version = "1.14.19" +version = "1.14.20" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ documentation = "https://docs.rs/solana-bpf-rust-128bit" edition = "2021" [dependencies] -solana-bpf-rust-128bit-dep = { path = "../128bit_dep", version = "=1.14.19" } -solana-program = { path = "../../../../sdk/program", version = "=1.14.19" } +solana-bpf-rust-128bit-dep = { path = "../128bit_dep", version = "=1.14.20" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.20" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/128bit_dep/Cargo.toml b/programs/bpf/rust/128bit_dep/Cargo.toml index c85529621015f8..afaeea47bdbda2 100644 --- a/programs/bpf/rust/128bit_dep/Cargo.toml +++ b/programs/bpf/rust/128bit_dep/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-128bit-dep" -version = "1.14.19" +version = "1.14.20" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-128bit-dep" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.19" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.20" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/bpf/rust/alloc/Cargo.toml b/programs/bpf/rust/alloc/Cargo.toml index 12e2093abb85d1..d0f20dc991ad20 100644 --- a/programs/bpf/rust/alloc/Cargo.toml +++ b/programs/bpf/rust/alloc/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-alloc" -version = "1.14.19" +version = "1.14.20" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-alloc" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.19" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.20" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/call_depth/Cargo.toml b/programs/bpf/rust/call_depth/Cargo.toml index 4c19e0e264074e..77f8033f479911 100644 --- a/programs/bpf/rust/call_depth/Cargo.toml +++ b/programs/bpf/rust/call_depth/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-call-depth" -version = "1.14.19" +version = "1.14.20" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-call-depth" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.19" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.20" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/caller_access/Cargo.toml b/programs/bpf/rust/caller_access/Cargo.toml index 049bde623c2f26..e8e41e0eae89c6 100644 --- a/programs/bpf/rust/caller_access/Cargo.toml +++ b/programs/bpf/rust/caller_access/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-caller-access" -version = "1.14.19" +version = "1.14.20" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-caller-access" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.19" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.20" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/curve25519/Cargo.toml b/programs/bpf/rust/curve25519/Cargo.toml index 31c84a5a1de325..66b4f9c81f0c0a 100644 --- a/programs/bpf/rust/curve25519/Cargo.toml +++ b/programs/bpf/rust/curve25519/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-curve25519" -version = "1.14.19" +version = "1.14.20" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ documentation = "https://docs.rs/solana-bpf-rust-zktoken_crypto" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.19" } -solana-zk-token-sdk = { path = "../../../../zk-token-sdk", version = "=1.14.19" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.20" } +solana-zk-token-sdk = { path = "../../../../zk-token-sdk", version = "=1.14.20" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/custom_heap/Cargo.toml b/programs/bpf/rust/custom_heap/Cargo.toml index 75a273bd0d4210..b4fdc4ed225844 100644 --- a/programs/bpf/rust/custom_heap/Cargo.toml +++ b/programs/bpf/rust/custom_heap/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-custom-heap" -version = "1.14.19" +version = "1.14.20" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-custom-heap" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.19" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.20" } [features] default = ["custom-heap"] diff --git a/programs/bpf/rust/dep_crate/Cargo.toml b/programs/bpf/rust/dep_crate/Cargo.toml index 13eed625fd7ec7..e7ccb9429a7b91 100644 --- a/programs/bpf/rust/dep_crate/Cargo.toml +++ b/programs/bpf/rust/dep_crate/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-dep-crate" -version = "1.14.19" +version = "1.14.20" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,8 +12,8 @@ edition = "2021" [dependencies] byteorder = { version = "1", default-features = false } # list of crates which must be buildable for bpf programs -solana-address-lookup-table-program = { path = "../../../../programs/address-lookup-table", version = "=1.14.19" } -solana-program = { path = "../../../../sdk/program", version = "=1.14.19" } +solana-address-lookup-table-program = { path = "../../../../programs/address-lookup-table", version = "=1.14.20" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.20" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/deprecated_loader/Cargo.toml b/programs/bpf/rust/deprecated_loader/Cargo.toml index 294b2c6d690b8d..33769e93512597 100644 --- a/programs/bpf/rust/deprecated_loader/Cargo.toml +++ b/programs/bpf/rust/deprecated_loader/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-deprecated-loader" -version = "1.14.19" +version = "1.14.20" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-deprecated-loader" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.19" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.20" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/dup_accounts/Cargo.toml b/programs/bpf/rust/dup_accounts/Cargo.toml index e4d78f03b17a32..86d76474bc8c86 100644 --- a/programs/bpf/rust/dup_accounts/Cargo.toml +++ b/programs/bpf/rust/dup_accounts/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-dup-accounts" -version = "1.14.19" +version = "1.14.20" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-dup-accounts" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.19" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.20" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/error_handling/Cargo.toml b/programs/bpf/rust/error_handling/Cargo.toml index 16f5b5c8bf5b6a..79ac8f458731ac 100644 --- a/programs/bpf/rust/error_handling/Cargo.toml +++ b/programs/bpf/rust/error_handling/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-error-handling" -version = "1.14.19" +version = "1.14.20" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,7 +12,7 @@ edition = "2021" [dependencies] num-derive = "0.3" num-traits = "0.2" -solana-program = { path = "../../../../sdk/program", version = "=1.14.19" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.20" } thiserror = "1.0" [lib] diff --git a/programs/bpf/rust/external_spend/Cargo.toml b/programs/bpf/rust/external_spend/Cargo.toml index a61b81cf2deb53..d700438680b798 100644 --- a/programs/bpf/rust/external_spend/Cargo.toml +++ b/programs/bpf/rust/external_spend/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-external-spend" -version = "1.14.19" +version = "1.14.20" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-external-spend" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.19" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.20" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/finalize/Cargo.toml b/programs/bpf/rust/finalize/Cargo.toml index 8c547dda56e47a..3003ff77ec17cd 100644 --- a/programs/bpf/rust/finalize/Cargo.toml +++ b/programs/bpf/rust/finalize/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-finalize" -version = "1.14.19" +version = "1.14.20" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-finalize" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.19" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.20" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/get_minimum_delegation/Cargo.toml b/programs/bpf/rust/get_minimum_delegation/Cargo.toml index cea07fd38e6936..f1bcaeeccb8846 100644 --- a/programs/bpf/rust/get_minimum_delegation/Cargo.toml +++ b/programs/bpf/rust/get_minimum_delegation/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-get-minimum-delegation" -version = "1.14.19" +version = "1.14.20" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-get-minimum-delegation" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.19" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.20" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/inner_instruction_alignment_check/Cargo.toml b/programs/bpf/rust/inner_instruction_alignment_check/Cargo.toml index a9b87cfbd528d8..9ca2bf68bc0eec 100644 --- a/programs/bpf/rust/inner_instruction_alignment_check/Cargo.toml +++ b/programs/bpf/rust/inner_instruction_alignment_check/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-inner_instruction_alignment_check" -version = "1.14.19" +version = "1.14.20" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-inner_instruction_alignment_che edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.19" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.20" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/instruction_introspection/Cargo.toml b/programs/bpf/rust/instruction_introspection/Cargo.toml index fd743e3277bbab..470187ebb9b8b0 100644 --- a/programs/bpf/rust/instruction_introspection/Cargo.toml +++ b/programs/bpf/rust/instruction_introspection/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-instruction-introspection" -version = "1.14.19" +version = "1.14.20" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-instruction-introspection" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.19" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.20" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/invoke/Cargo.toml b/programs/bpf/rust/invoke/Cargo.toml index 94ecf3369f173c..5cbb63d783c367 100644 --- a/programs/bpf/rust/invoke/Cargo.toml +++ b/programs/bpf/rust/invoke/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-invoke" -version = "1.14.19" +version = "1.14.20" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -15,7 +15,7 @@ program = [] [dependencies] solana-bpf-rust-invoked = { path = "../invoked", default-features = false } -solana-program = { path = "../../../../sdk/program", version = "=1.14.19" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.20" } [lib] crate-type = ["lib", "cdylib"] diff --git a/programs/bpf/rust/invoke_and_error/Cargo.toml b/programs/bpf/rust/invoke_and_error/Cargo.toml index ac6afb1d764625..21965da0e17475 100644 --- a/programs/bpf/rust/invoke_and_error/Cargo.toml +++ b/programs/bpf/rust/invoke_and_error/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-invoke-and-error" -version = "1.14.19" +version = "1.14.20" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-invoke-and-error" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.19" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.20" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/invoke_and_ok/Cargo.toml b/programs/bpf/rust/invoke_and_ok/Cargo.toml index ff133f2ae1f617..ff77ca09b2fda6 100644 --- a/programs/bpf/rust/invoke_and_ok/Cargo.toml +++ b/programs/bpf/rust/invoke_and_ok/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-invoke-and-ok" -version = "1.14.19" +version = "1.14.20" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-invoke-and-ok" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.19" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.20" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/invoke_and_return/Cargo.toml b/programs/bpf/rust/invoke_and_return/Cargo.toml index 98a67e4488bf16..313e53417370c9 100644 --- a/programs/bpf/rust/invoke_and_return/Cargo.toml +++ b/programs/bpf/rust/invoke_and_return/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-invoke-and-return" -version = "1.14.19" +version = "1.14.20" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-invoke-and-return" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.19" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.20" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/invoked/Cargo.toml b/programs/bpf/rust/invoked/Cargo.toml index 06187d05108e37..aedaff084e9196 100644 --- a/programs/bpf/rust/invoked/Cargo.toml +++ b/programs/bpf/rust/invoked/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-invoked" -version = "1.14.19" +version = "1.14.20" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,7 +14,7 @@ default = ["program"] program = [] [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.19" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.20" } [lib] crate-type = ["lib", "cdylib"] diff --git a/programs/bpf/rust/iter/Cargo.toml b/programs/bpf/rust/iter/Cargo.toml index 0d4d27abb4264d..b4a55479d9456a 100644 --- a/programs/bpf/rust/iter/Cargo.toml +++ b/programs/bpf/rust/iter/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-iter" -version = "1.14.19" +version = "1.14.20" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-iter" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.19" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.20" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/log_data/Cargo.toml b/programs/bpf/rust/log_data/Cargo.toml index 64526d1b71e612..db4335360baadb 100644 --- a/programs/bpf/rust/log_data/Cargo.toml +++ b/programs/bpf/rust/log_data/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-log-data" -version = "1.14.19" +version = "1.14.20" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-log-data" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.19" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.20" } [features] default = ["program"] diff --git a/programs/bpf/rust/many_args/Cargo.toml b/programs/bpf/rust/many_args/Cargo.toml index 1f186e2ec55799..7e705803604600 100644 --- a/programs/bpf/rust/many_args/Cargo.toml +++ b/programs/bpf/rust/many_args/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-many-args" -version = "1.14.19" +version = "1.14.20" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ documentation = "https://docs.rs/solana-bpf-rust-many-args" edition = "2021" [dependencies] -solana-bpf-rust-many-args-dep = { path = "../many_args_dep", version = "=1.14.19" } -solana-program = { path = "../../../../sdk/program", version = "=1.14.19" } +solana-bpf-rust-many-args-dep = { path = "../many_args_dep", version = "=1.14.20" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.20" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/many_args_dep/Cargo.toml b/programs/bpf/rust/many_args_dep/Cargo.toml index 8d28b67675491d..face82b41a5d7e 100644 --- a/programs/bpf/rust/many_args_dep/Cargo.toml +++ b/programs/bpf/rust/many_args_dep/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-many-args-dep" -version = "1.14.19" +version = "1.14.20" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-many-args-dep" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.19" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.20" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/bpf/rust/mem/Cargo.toml b/programs/bpf/rust/mem/Cargo.toml index 0ce040aa8348cc..377ac8624a249a 100644 --- a/programs/bpf/rust/mem/Cargo.toml +++ b/programs/bpf/rust/mem/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-mem" -version = "1.14.19" +version = "1.14.20" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,12 +13,12 @@ edition = "2021" no-entrypoint = [] [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.19" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.20" } [dev-dependencies] -solana-program-runtime = { path = "../../../../program-runtime", version = "=1.14.19" } -solana-program-test = { path = "../../../../program-test", version = "=1.14.19" } -solana-sdk = { path = "../../../../sdk", version = "=1.14.19" } +solana-program-runtime = { path = "../../../../program-runtime", version = "=1.14.20" } +solana-program-test = { path = "../../../../program-test", version = "=1.14.20" } +solana-sdk = { path = "../../../../sdk", version = "=1.14.20" } [lib] crate-type = ["cdylib", "lib"] diff --git a/programs/bpf/rust/membuiltins/Cargo.toml b/programs/bpf/rust/membuiltins/Cargo.toml index 8674774c753aac..370c62295b4697 100644 --- a/programs/bpf/rust/membuiltins/Cargo.toml +++ b/programs/bpf/rust/membuiltins/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-membuiltins" -version = "1.14.19" +version = "1.14.20" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ documentation = "https://docs.rs/solana-bpf-rust-mem" edition = "2021" [dependencies] -solana-bpf-rust-mem = { path = "../mem", version = "=1.14.19", features = [ "no-entrypoint" ] } -solana-program = { path = "../../../../sdk/program", version = "=1.14.19" } +solana-bpf-rust-mem = { path = "../mem", version = "=1.14.20", features = [ "no-entrypoint" ] } +solana-program = { path = "../../../../sdk/program", version = "=1.14.20" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/noop/Cargo.toml b/programs/bpf/rust/noop/Cargo.toml index a7090f966ae86d..4cd46de10628e9 100644 --- a/programs/bpf/rust/noop/Cargo.toml +++ b/programs/bpf/rust/noop/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-noop" -version = "1.14.19" +version = "1.14.20" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-noop" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.19" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.20" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/panic/Cargo.toml b/programs/bpf/rust/panic/Cargo.toml index 7262eb21105894..954e192685b987 100644 --- a/programs/bpf/rust/panic/Cargo.toml +++ b/programs/bpf/rust/panic/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-panic" -version = "1.14.19" +version = "1.14.20" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-panic" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.19" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.20" } [features] default = ["custom-panic"] diff --git a/programs/bpf/rust/param_passing/Cargo.toml b/programs/bpf/rust/param_passing/Cargo.toml index 8a1922841b5568..00f6ca62d1593d 100644 --- a/programs/bpf/rust/param_passing/Cargo.toml +++ b/programs/bpf/rust/param_passing/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-param-passing" -version = "1.14.19" +version = "1.14.20" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ documentation = "https://docs.rs/solana-bpf-rust-param-passing" edition = "2021" [dependencies] -solana-bpf-rust-param-passing-dep = { path = "../param_passing_dep", version = "=1.14.19" } -solana-program = { path = "../../../../sdk/program", version = "=1.14.19" } +solana-bpf-rust-param-passing-dep = { path = "../param_passing_dep", version = "=1.14.20" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.20" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/param_passing_dep/Cargo.toml b/programs/bpf/rust/param_passing_dep/Cargo.toml index 74bca6afed4469..c91b5224ea11e7 100644 --- a/programs/bpf/rust/param_passing_dep/Cargo.toml +++ b/programs/bpf/rust/param_passing_dep/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-param-passing-dep" -version = "1.14.19" +version = "1.14.20" description = "Solana BPF program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-param-passing-dep" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.19" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.20" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/bpf/rust/rand/Cargo.toml b/programs/bpf/rust/rand/Cargo.toml index 3f96a02b42b2ac..16a12dc307bc1f 100644 --- a/programs/bpf/rust/rand/Cargo.toml +++ b/programs/bpf/rust/rand/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-rand" -version = "1.14.19" +version = "1.14.20" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,7 +12,7 @@ edition = "2021" [dependencies] getrandom = { version = "0.1.14", features = ["dummy"] } rand = "0.7" -solana-program = { path = "../../../../sdk/program", version = "=1.14.19" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.20" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/realloc/Cargo.toml b/programs/bpf/rust/realloc/Cargo.toml index 5633e00d46c053..9a653f3d185d9d 100644 --- a/programs/bpf/rust/realloc/Cargo.toml +++ b/programs/bpf/rust/realloc/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-realloc" -version = "1.14.19" +version = "1.14.20" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,7 +14,7 @@ default = ["program"] program = [] [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.19" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.20" } [lib] crate-type = ["lib", "cdylib"] diff --git a/programs/bpf/rust/realloc_invoke/Cargo.toml b/programs/bpf/rust/realloc_invoke/Cargo.toml index 939bfcc9cbb3e0..202edad026d617 100644 --- a/programs/bpf/rust/realloc_invoke/Cargo.toml +++ b/programs/bpf/rust/realloc_invoke/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-realloc-invoke" -version = "1.14.19" +version = "1.14.20" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,8 +14,8 @@ default = ["program"] program = [] [dependencies] -solana-bpf-rust-realloc = { path = "../realloc", version = "=1.14.19", default-features = false } -solana-program = { path = "../../../../sdk/program", version = "=1.14.19" } +solana-bpf-rust-realloc = { path = "../realloc", version = "=1.14.20", default-features = false } +solana-program = { path = "../../../../sdk/program", version = "=1.14.20" } [lib] crate-type = ["lib", "cdylib"] diff --git a/programs/bpf/rust/ro_account_modify/Cargo.toml b/programs/bpf/rust/ro_account_modify/Cargo.toml index 7a26ed13c54009..b5da8e80d8df86 100644 --- a/programs/bpf/rust/ro_account_modify/Cargo.toml +++ b/programs/bpf/rust/ro_account_modify/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-ro-account_modify" -version = "1.14.19" +version = "1.14.20" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-ro-modify" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.19" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.20" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/ro_modify/Cargo.toml b/programs/bpf/rust/ro_modify/Cargo.toml index 47aeca115bc124..867429422454f2 100644 --- a/programs/bpf/rust/ro_modify/Cargo.toml +++ b/programs/bpf/rust/ro_modify/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-ro-modify" -version = "1.14.19" +version = "1.14.20" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-ro-modify" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.19" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.20" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/sanity/Cargo.toml b/programs/bpf/rust/sanity/Cargo.toml index b5cdab1862a09e..e91a97d44909e8 100644 --- a/programs/bpf/rust/sanity/Cargo.toml +++ b/programs/bpf/rust/sanity/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-sanity" -version = "1.14.19" +version = "1.14.20" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,12 +13,12 @@ edition = "2021" test-bpf = [] [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.19" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.20" } [dev-dependencies] -solana-program-runtime = { path = "../../../../program-runtime", version = "=1.14.19" } -solana-program-test = { path = "../../../../program-test", version = "=1.14.19" } -solana-sdk = { path = "../../../../sdk", version = "=1.14.19" } +solana-program-runtime = { path = "../../../../program-runtime", version = "=1.14.20" } +solana-program-test = { path = "../../../../program-test", version = "=1.14.20" } +solana-sdk = { path = "../../../../sdk", version = "=1.14.20" } [lib] crate-type = ["cdylib", "lib"] diff --git a/programs/bpf/rust/secp256k1_recover/Cargo.toml b/programs/bpf/rust/secp256k1_recover/Cargo.toml index 881168eae67702..c65c6eb63aadd3 100644 --- a/programs/bpf/rust/secp256k1_recover/Cargo.toml +++ b/programs/bpf/rust/secp256k1_recover/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-secp256k1-recover" -version = "1.14.19" +version = "1.14.20" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -11,7 +11,7 @@ edition = "2021" [dependencies] libsecp256k1 = { version = "0.7.0", default-features = false } -solana-program = { path = "../../../../sdk/program", version = "=1.14.19" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.20" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/sha/Cargo.toml b/programs/bpf/rust/sha/Cargo.toml index f97724ad6d8a38..d762b81fb22e42 100644 --- a/programs/bpf/rust/sha/Cargo.toml +++ b/programs/bpf/rust/sha/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-sha" -version = "1.14.19" +version = "1.14.20" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -11,7 +11,7 @@ edition = "2021" [dependencies] blake3 = "1.0.0" -solana-program = { path = "../../../../sdk/program", version = "=1.14.19" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.20" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/sibling_inner_instruction/Cargo.toml b/programs/bpf/rust/sibling_inner_instruction/Cargo.toml index e716b7ec92d3c7..f9fdd8abb61d01 100644 --- a/programs/bpf/rust/sibling_inner_instruction/Cargo.toml +++ b/programs/bpf/rust/sibling_inner_instruction/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-sibling_inner-instructions" -version = "1.14.19" +version = "1.14.20" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-log-data" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.19" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.20" } [features] default = ["program"] diff --git a/programs/bpf/rust/sibling_instruction/Cargo.toml b/programs/bpf/rust/sibling_instruction/Cargo.toml index c1f5f91ba2064f..ca8a1327230f21 100644 --- a/programs/bpf/rust/sibling_instruction/Cargo.toml +++ b/programs/bpf/rust/sibling_instruction/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-sibling-instructions" -version = "1.14.19" +version = "1.14.20" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-log-data" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.19" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.20" } [features] default = ["program"] diff --git a/programs/bpf/rust/simulation/Cargo.toml b/programs/bpf/rust/simulation/Cargo.toml index 3f342b15219d16..65900313bd3c9f 100644 --- a/programs/bpf/rust/simulation/Cargo.toml +++ b/programs/bpf/rust/simulation/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-simulation" -version = "1.14.19" +version = "1.14.20" description = "Solana BPF Program Simulation Differences" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,13 +13,13 @@ edition = "2021" test-bpf = [] [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.19" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.20" } [dev-dependencies] -solana-logger = { path = "../../../../logger", version = "=1.14.19" } -solana-program-test = { path = "../../../../program-test", version = "=1.14.19" } -solana-sdk = { path = "../../../../sdk", version = "=1.14.19" } -solana-validator = { path = "../../../../validator", version = "=1.14.19" } +solana-logger = { path = "../../../../logger", version = "=1.14.20" } +solana-program-test = { path = "../../../../program-test", version = "=1.14.20" } +solana-sdk = { path = "../../../../sdk", version = "=1.14.20" } +solana-validator = { path = "../../../../validator", version = "=1.14.20" } [lib] crate-type = ["cdylib", "lib"] diff --git a/programs/bpf/rust/spoof1/Cargo.toml b/programs/bpf/rust/spoof1/Cargo.toml index 6759f1ab5f620a..0d6ab0fb09d1ee 100644 --- a/programs/bpf/rust/spoof1/Cargo.toml +++ b/programs/bpf/rust/spoof1/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-spoof1" -version = "1.14.19" +version = "1.14.20" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-spoof1" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.19" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.20" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/spoof1_system/Cargo.toml b/programs/bpf/rust/spoof1_system/Cargo.toml index 816c6fc35d1053..60023335468c14 100644 --- a/programs/bpf/rust/spoof1_system/Cargo.toml +++ b/programs/bpf/rust/spoof1_system/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-spoof1-system" -version = "1.14.19" +version = "1.14.20" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-spoof1-system" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.19" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.20" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/sysvar/Cargo.toml b/programs/bpf/rust/sysvar/Cargo.toml index b6632431477746..85d7eddf5726de 100644 --- a/programs/bpf/rust/sysvar/Cargo.toml +++ b/programs/bpf/rust/sysvar/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-sysvar" -version = "1.14.19" +version = "1.14.20" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,12 +10,12 @@ documentation = "https://docs.rs/solana-bpf-rust-sysvar" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.19" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.20" } [dev-dependencies] -solana-program-runtime = { path = "../../../../program-runtime", version = "=1.14.19" } -solana-program-test = { path = "../../../../program-test", version = "=1.14.19" } -solana-sdk = { path = "../../../../sdk", version = "=1.14.19" } +solana-program-runtime = { path = "../../../../program-runtime", version = "=1.14.20" } +solana-program-test = { path = "../../../../program-test", version = "=1.14.20" } +solana-sdk = { path = "../../../../sdk", version = "=1.14.20" } [lib] crate-type = ["cdylib", "lib"] diff --git a/programs/bpf/rust/upgradeable/Cargo.toml b/programs/bpf/rust/upgradeable/Cargo.toml index ce1d1597eac885..eda0d7089bbfbd 100644 --- a/programs/bpf/rust/upgradeable/Cargo.toml +++ b/programs/bpf/rust/upgradeable/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-upgradeable" -version = "1.14.19" +version = "1.14.20" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-upgradeable" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.19" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.20" } [lib] name = "solana_bpf_rust_upgradeable" diff --git a/programs/bpf/rust/upgraded/Cargo.toml b/programs/bpf/rust/upgraded/Cargo.toml index d8c0a169092ec5..b4fe8a2ed352b6 100644 --- a/programs/bpf/rust/upgraded/Cargo.toml +++ b/programs/bpf/rust/upgraded/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-upgraded" -version = "1.14.19" +version = "1.14.20" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-upgraded" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.19" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.20" } [lib] name = "solana_bpf_rust_upgraded" diff --git a/programs/bpf_loader/Cargo.toml b/programs/bpf_loader/Cargo.toml index b30daba109ab48..7fa3f4ea0a7df6 100644 --- a/programs/bpf_loader/Cargo.toml +++ b/programs/bpf_loader/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-loader-program" -version = "1.14.19" +version = "1.14.20" description = "Solana BPF loader" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,17 +14,17 @@ bincode = "1.3.3" byteorder = "1.4.3" libsecp256k1 = "0.6.0" log = "0.4.17" -solana-measure = { path = "../../measure", version = "=1.14.19" } -solana-metrics = { path = "../../metrics", version = "=1.14.19" } -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.19" } -solana-sdk = { path = "../../sdk", version = "=1.14.19" } -solana-zk-token-sdk = { path = "../../zk-token-sdk", version = "=1.14.19" } +solana-measure = { path = "../../measure", version = "=1.14.20" } +solana-metrics = { path = "../../metrics", version = "=1.14.20" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.20" } +solana-sdk = { path = "../../sdk", version = "=1.14.20" } +solana-zk-token-sdk = { path = "../../zk-token-sdk", version = "=1.14.20" } solana_rbpf = "=0.2.31" thiserror = "1.0" [dev-dependencies] rand = "0.7.3" -solana-runtime = { path = "../../runtime", version = "=1.14.19" } +solana-runtime = { path = "../../runtime", version = "=1.14.20" } [lib] crate-type = ["lib"] diff --git a/programs/bpf_loader/gen-syscall-list/Cargo.toml b/programs/bpf_loader/gen-syscall-list/Cargo.toml index 4996d6b678b8aa..d066da1edf11ae 100644 --- a/programs/bpf_loader/gen-syscall-list/Cargo.toml +++ b/programs/bpf_loader/gen-syscall-list/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "gen-syscall-list" -version = "1.14.19" +version = "1.14.20" edition = "2021" license = "Apache-2.0" publish = false diff --git a/programs/compute-budget/Cargo.toml b/programs/compute-budget/Cargo.toml index 40b8b59ad00843..3023419e60dc8e 100644 --- a/programs/compute-budget/Cargo.toml +++ b/programs/compute-budget/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "solana-compute-budget-program" description = "Solana Compute Budget program" -version = "1.14.19" +version = "1.14.20" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-compute-budget-program" repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ license = "Apache-2.0" edition = "2021" [dependencies] -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.19" } -solana-sdk = { path = "../../sdk", version = "=1.14.19" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.20" } +solana-sdk = { path = "../../sdk", version = "=1.14.20" } [lib] crate-type = ["lib"] diff --git a/programs/config/Cargo.toml b/programs/config/Cargo.toml index afc99869f7bae6..c53a86ea8f9fcd 100644 --- a/programs/config/Cargo.toml +++ b/programs/config/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-config-program" -version = "1.14.19" +version = "1.14.20" description = "Solana Config program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,11 +14,11 @@ bincode = "1.3.3" chrono = { version = "0.4.11", features = ["serde"] } serde = "1.0.138" serde_derive = "1.0.103" -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.19" } -solana-sdk = { path = "../../sdk", version = "=1.14.19" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.20" } +solana-sdk = { path = "../../sdk", version = "=1.14.20" } [dev-dependencies] -solana-logger = { path = "../../logger", version = "=1.14.19" } +solana-logger = { path = "../../logger", version = "=1.14.20" } [lib] crate-type = ["lib"] diff --git a/programs/ed25519-tests/Cargo.toml b/programs/ed25519-tests/Cargo.toml index 4eabbd2873829a..3d30dc1b0c07b6 100644 --- a/programs/ed25519-tests/Cargo.toml +++ b/programs/ed25519-tests/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-ed25519-program-tests" -version = "1.14.19" +version = "1.14.20" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" @@ -12,8 +12,8 @@ publish = false assert_matches = "1.5.0" ed25519-dalek = "=1.0.1" rand = "0.7.0" -solana-program-test = { path = "../../program-test", version = "=1.14.19" } -solana-sdk = { path = "../../sdk", version = "=1.14.19" } +solana-program-test = { path = "../../program-test", version = "=1.14.20" } +solana-sdk = { path = "../../sdk", version = "=1.14.20" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/stake/Cargo.toml b/programs/stake/Cargo.toml index d19b742e58324d..7c8096b7d5b814 100644 --- a/programs/stake/Cargo.toml +++ b/programs/stake/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-stake-program" -version = "1.14.19" +version = "1.14.20" description = "Solana Stake program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -16,19 +16,19 @@ num-derive = "0.3" num-traits = "0.2" serde = "1.0.138" serde_derive = "1.0.103" -solana-config-program = { path = "../config", version = "=1.14.19" } -solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.19" } -solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.19" } -solana-metrics = { path = "../../metrics", version = "=1.14.19" } -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.19" } -solana-sdk = { path = "../../sdk", version = "=1.14.19" } -solana-vote-program = { path = "../vote", version = "=1.14.19" } +solana-config-program = { path = "../config", version = "=1.14.20" } +solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.20" } +solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.20" } +solana-metrics = { path = "../../metrics", version = "=1.14.20" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.20" } +solana-sdk = { path = "../../sdk", version = "=1.14.20" } +solana-vote-program = { path = "../vote", version = "=1.14.20" } thiserror = "1.0" [dev-dependencies] assert_matches = "1.5.0" proptest = "1.0" -solana-logger = { path = "../../logger", version = "=1.14.19" } +solana-logger = { path = "../../logger", version = "=1.14.20" } test-case = "2.1.0" [build-dependencies] diff --git a/programs/vote/Cargo.toml b/programs/vote/Cargo.toml index bd7af098b34096..e088ff0db59e35 100644 --- a/programs/vote/Cargo.toml +++ b/programs/vote/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-vote-program" -version = "1.14.19" +version = "1.14.20" description = "Solana Vote program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -16,17 +16,17 @@ num-derive = "0.3" num-traits = "0.2" serde = "1.0.138" serde_derive = "1.0.103" -solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.19" } -solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.19" } -solana-metrics = { path = "../../metrics", version = "=1.14.19" } -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.19" } -solana-sdk = { path = "../../sdk", version = "=1.14.19" } +solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.20" } +solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.20" } +solana-metrics = { path = "../../metrics", version = "=1.14.20" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.20" } +solana-sdk = { path = "../../sdk", version = "=1.14.20" } thiserror = "1.0" [dev-dependencies] itertools = "0.10.3" rand = "0.7.0" -solana-logger = { path = "../../logger", version = "=1.14.19" } +solana-logger = { path = "../../logger", version = "=1.14.20" } test-case = "2.1.0" [build-dependencies] diff --git a/programs/zk-token-proof-tests/Cargo.toml b/programs/zk-token-proof-tests/Cargo.toml index 1c4d0bf16a02c4..589f25d614cb2c 100644 --- a/programs/zk-token-proof-tests/Cargo.toml +++ b/programs/zk-token-proof-tests/Cargo.toml @@ -2,14 +2,14 @@ name = "solana-zk-token-proof-program-tests" authors = ["Solana Labs Maintainers "] repository = "https://github.com/solana-labs/solana" -version = "1.14.19" +version = "1.14.20" license = "Apache-2.0" edition = "2021" publish = false [dev-dependencies] bytemuck = { version = "1.11.0", features = ["derive"] } -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.19" } -solana-program-test = { path = "../../program-test", version = "=1.14.19" } -solana-sdk = { path = "../../sdk", version = "=1.14.19" } -solana-zk-token-sdk = { path = "../../zk-token-sdk", version = "=1.14.19" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.20" } +solana-program-test = { path = "../../program-test", version = "=1.14.20" } +solana-sdk = { path = "../../sdk", version = "=1.14.20" } +solana-zk-token-sdk = { path = "../../zk-token-sdk", version = "=1.14.20" } diff --git a/programs/zk-token-proof/Cargo.toml b/programs/zk-token-proof/Cargo.toml index e7240fe3de7e07..488553170cec3d 100644 --- a/programs/zk-token-proof/Cargo.toml +++ b/programs/zk-token-proof/Cargo.toml @@ -3,7 +3,7 @@ name = "solana-zk-token-proof-program" description = "Solana Zk Token Proof Program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" -version = "1.14.19" +version = "1.14.20" license = "Apache-2.0" edition = "2021" @@ -12,6 +12,6 @@ bytemuck = { version = "1.11.0", features = ["derive"] } getrandom = { version = "0.1", features = ["dummy"] } num-derive = "0.3" num-traits = "0.2" -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.19" } -solana-sdk = { path = "../../sdk", version = "=1.14.19" } -solana-zk-token-sdk = { path = "../../zk-token-sdk", version = "=1.14.19" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.20" } +solana-sdk = { path = "../../sdk", version = "=1.14.20" } +solana-zk-token-sdk = { path = "../../zk-token-sdk", version = "=1.14.20" } diff --git a/rayon-threadlimit/Cargo.toml b/rayon-threadlimit/Cargo.toml index 77ece1ff949f2e..53d092dad95907 100644 --- a/rayon-threadlimit/Cargo.toml +++ b/rayon-threadlimit/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-rayon-threadlimit" -version = "1.14.19" +version = "1.14.20" description = "solana-rayon-threadlimit" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-rayon-threadlimit" diff --git a/rbpf-cli/Cargo.toml b/rbpf-cli/Cargo.toml index 466e16294fc265..d4175da4125084 100644 --- a/rbpf-cli/Cargo.toml +++ b/rbpf-cli/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "rbpf-cli" -version = "1.14.19" +version = "1.14.20" description = "CLI to test and analyze eBPF programs" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/rbpf" @@ -13,8 +13,8 @@ publish = false clap = { version = "3.1.5", features = ["cargo"] } serde = "1.0.138" serde_json = "1.0.81" -solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.19" } -solana-logger = { path = "../logger", version = "=1.14.19" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.19" } -solana-sdk = { path = "../sdk", version = "=1.14.19" } +solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.20" } +solana-logger = { path = "../logger", version = "=1.14.20" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.20" } +solana-sdk = { path = "../sdk", version = "=1.14.20" } solana_rbpf = "=0.2.31" diff --git a/remote-wallet/Cargo.toml b/remote-wallet/Cargo.toml index b9a6a49f45e270..ccff7adc761394 100644 --- a/remote-wallet/Cargo.toml +++ b/remote-wallet/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-remote-wallet" description = "Blockchain, Rebuilt for Scale" -version = "1.14.19" +version = "1.14.20" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -19,7 +19,7 @@ num-traits = { version = "0.2" } parking_lot = "0.12" qstring = "0.7.2" semver = "1.0" -solana-sdk = { path = "../sdk", version = "=1.14.19" } +solana-sdk = { path = "../sdk", version = "=1.14.20" } thiserror = "1.0" uriparse = "0.6.4" diff --git a/rpc-test/Cargo.toml b/rpc-test/Cargo.toml index b335b3c6fe2f14..8fe9c0b5335435 100644 --- a/rpc-test/Cargo.toml +++ b/rpc-test/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-rpc-test" -version = "1.14.19" +version = "1.14.20" description = "Solana RPC Test" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -19,17 +19,17 @@ log = "0.4.17" reqwest = { version = "0.11.11", default-features = false, features = ["blocking", "brotli", "deflate", "gzip", "rustls-tls", "json"] } serde = "1.0.138" serde_json = "1.0.81" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.19" } -solana-client = { path = "../client", version = "=1.14.19" } -solana-rpc = { path = "../rpc", version = "=1.14.19" } -solana-sdk = { path = "../sdk", version = "=1.14.19" } -solana-streamer = { path = "../streamer", version = "=1.14.19" } -solana-test-validator = { path = "../test-validator", version = "=1.14.19" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.19" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.20" } +solana-client = { path = "../client", version = "=1.14.20" } +solana-rpc = { path = "../rpc", version = "=1.14.20" } +solana-sdk = { path = "../sdk", version = "=1.14.20" } +solana-streamer = { path = "../streamer", version = "=1.14.20" } +solana-test-validator = { path = "../test-validator", version = "=1.14.20" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.20" } tokio = { version = "~1.14.1", features = ["full"] } [dev-dependencies] -solana-logger = { path = "../logger", version = "=1.14.19" } +solana-logger = { path = "../logger", version = "=1.14.20" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/rpc/Cargo.toml b/rpc/Cargo.toml index 9ee9a25370eea4..bfb6202655210a 100644 --- a/rpc/Cargo.toml +++ b/rpc/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-rpc" -version = "1.14.19" +version = "1.14.20" description = "Solana RPC" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -29,26 +29,26 @@ serde = "1.0.138" serde_derive = "1.0.103" serde_json = "1.0.81" soketto = "0.7" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.19" } -solana-client = { path = "../client", version = "=1.14.19" } -solana-entry = { path = "../entry", version = "=1.14.19" } -solana-faucet = { path = "../faucet", version = "=1.14.19" } -solana-gossip = { path = "../gossip", version = "=1.14.19" } -solana-ledger = { path = "../ledger", version = "=1.14.19" } -solana-measure = { path = "../measure", version = "=1.14.19" } -solana-metrics = { path = "../metrics", version = "=1.14.19" } -solana-perf = { path = "../perf", version = "=1.14.19" } -solana-poh = { path = "../poh", version = "=1.14.19" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.19" } -solana-runtime = { path = "../runtime", version = "=1.14.19" } -solana-sdk = { path = "../sdk", version = "=1.14.19" } -solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.19" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.19" } -solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.19" } -solana-streamer = { path = "../streamer", version = "=1.14.19" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.19" } -solana-version = { path = "../version", version = "=1.14.19" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.19" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.20" } +solana-client = { path = "../client", version = "=1.14.20" } +solana-entry = { path = "../entry", version = "=1.14.20" } +solana-faucet = { path = "../faucet", version = "=1.14.20" } +solana-gossip = { path = "../gossip", version = "=1.14.20" } +solana-ledger = { path = "../ledger", version = "=1.14.20" } +solana-measure = { path = "../measure", version = "=1.14.20" } +solana-metrics = { path = "../metrics", version = "=1.14.20" } +solana-perf = { path = "../perf", version = "=1.14.20" } +solana-poh = { path = "../poh", version = "=1.14.20" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.20" } +solana-runtime = { path = "../runtime", version = "=1.14.20" } +solana-sdk = { path = "../sdk", version = "=1.14.20" } +solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.20" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.20" } +solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.20" } +solana-streamer = { path = "../streamer", version = "=1.14.20" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.20" } +solana-version = { path = "../version", version = "=1.14.20" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.20" } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } spl-token-2022 = { version = "=0.6.1", features = ["no-entrypoint"] } stream-cancel = "0.8.1" @@ -58,9 +58,9 @@ tokio-util = { version = "0.6", features = ["codec", "compat"] } [dev-dependencies] serial_test = "0.8.0" -solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.19" } -solana-net-utils = { path = "../net-utils", version = "=1.14.19" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.19" } +solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.20" } +solana-net-utils = { path = "../net-utils", version = "=1.14.20" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.20" } symlink = "0.1.0" [lib] diff --git a/runtime/Cargo.toml b/runtime/Cargo.toml index 2c3de97f6d0991..cb42802f699801 100644 --- a/runtime/Cargo.toml +++ b/runtime/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-runtime" -version = "1.14.19" +version = "1.14.20" description = "Solana runtime" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -40,21 +40,21 @@ rayon = "1.5.3" regex = "1.5.6" serde = { version = "1.0.138", features = ["rc"] } serde_derive = "1.0.103" -solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.19" } -solana-bucket-map = { path = "../bucket_map", version = "=1.14.19" } -solana-compute-budget-program = { path = "../programs/compute-budget", version = "=1.14.19" } -solana-config-program = { path = "../programs/config", version = "=1.14.19" } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.19" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.19" } -solana-measure = { path = "../measure", version = "=1.14.19" } -solana-metrics = { path = "../metrics", version = "=1.14.19" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.19" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.19" } -solana-sdk = { path = "../sdk", version = "=1.14.19" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.19" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.19" } -solana-zk-token-proof-program = { path = "../programs/zk-token-proof", version = "=1.14.19" } -solana-zk-token-sdk = { path = "../zk-token-sdk", version = "=1.14.19" } +solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.20" } +solana-bucket-map = { path = "../bucket_map", version = "=1.14.20" } +solana-compute-budget-program = { path = "../programs/compute-budget", version = "=1.14.20" } +solana-config-program = { path = "../programs/config", version = "=1.14.20" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.20" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.20" } +solana-measure = { path = "../measure", version = "=1.14.20" } +solana-metrics = { path = "../metrics", version = "=1.14.20" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.20" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.20" } +solana-sdk = { path = "../sdk", version = "=1.14.20" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.20" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.20" } +solana-zk-token-proof-program = { path = "../programs/zk-token-proof", version = "=1.14.20" } +solana-zk-token-sdk = { path = "../zk-token-sdk", version = "=1.14.20" } strum = { version = "0.24", features = ["derive"] } strum_macros = "0.24" symlink = "0.1.0" @@ -72,7 +72,7 @@ assert_matches = "1.5.0" ed25519-dalek = "=1.0.1" libsecp256k1 = "0.6.0" rand_chacha = "0.2.2" -solana-logger = { path = "../logger", version = "=1.14.19" } +solana-logger = { path = "../logger", version = "=1.14.20" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/runtime/store-tool/Cargo.toml b/runtime/store-tool/Cargo.toml index f13af966627719..30891984da8802 100644 --- a/runtime/store-tool/Cargo.toml +++ b/runtime/store-tool/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-store-tool" description = "Tool to inspect append vecs" -version = "1.14.19" +version = "1.14.20" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -12,9 +12,9 @@ publish = false [dependencies] clap = "2.33.1" log = { version = "0.4.17" } -solana-logger = { path = "../../logger", version = "=1.14.19" } -solana-runtime = { path = "..", version = "=1.14.19" } -solana-version = { path = "../../version", version = "=1.14.19" } +solana-logger = { path = "../../logger", version = "=1.14.20" } +solana-runtime = { path = "..", version = "=1.14.20" } +solana-version = { path = "../../version", version = "=1.14.20" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/sdk/Cargo.toml b/sdk/Cargo.toml index d7b3015afae697..bd83e608da4a10 100644 --- a/sdk/Cargo.toml +++ b/sdk/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-sdk" -version = "1.14.19" +version = "1.14.20" description = "Solana SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -71,11 +71,11 @@ serde_derive = "1.0.103" serde_json = { version = "1.0.81", optional = true } sha2 = "0.10.2" sha3 = { version = "0.10.1", optional = true } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.19" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.19" } -solana-logger = { path = "../logger", version = "=1.14.19", optional = true } -solana-program = { path = "program", version = "=1.14.19" } -solana-sdk-macro = { path = "macro", version = "=1.14.19" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.20" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.20" } +solana-logger = { path = "../logger", version = "=1.14.20", optional = true } +solana-program = { path = "program", version = "=1.14.20" } +solana-sdk-macro = { path = "macro", version = "=1.14.20" } thiserror = "1.0" uriparse = "0.6.4" wasm-bindgen = "0.2" diff --git a/sdk/cargo-build-bpf/Cargo.toml b/sdk/cargo-build-bpf/Cargo.toml index cf1b3b45703b73..f175e2fe14d837 100644 --- a/sdk/cargo-build-bpf/Cargo.toml +++ b/sdk/cargo-build-bpf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-cargo-build-bpf" -version = "1.14.19" +version = "1.14.20" description = "Compile a local package and all of its dependencies using the Solana SBF SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,7 +12,7 @@ publish = false [dependencies] cargo_metadata = "0.15.0" clap = { version = "3.1.5", features = ["cargo", "env"] } -solana-sdk = { path = "..", version = "=1.14.19" } +solana-sdk = { path = "..", version = "=1.14.20" } [features] program = [] diff --git a/sdk/cargo-build-sbf/Cargo.toml b/sdk/cargo-build-sbf/Cargo.toml index 2f746dd9ecad4d..66889aef393fd1 100644 --- a/sdk/cargo-build-sbf/Cargo.toml +++ b/sdk/cargo-build-sbf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-cargo-build-sbf" -version = "1.14.19" +version = "1.14.20" description = "Compile a local package and all of its dependencies using the Solana SBF SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -15,9 +15,9 @@ cargo_metadata = "0.15.0" clap = { version = "3.1.5", features = ["cargo", "env"] } log = { version = "0.4.14", features = ["std"] } regex = "1.5.6" -solana-download-utils = { path = "../../download-utils", version = "=1.14.19" } -solana-logger = { path = "../../logger", version = "=1.14.19" } -solana-sdk = { path = "..", version = "=1.14.19" } +solana-download-utils = { path = "../../download-utils", version = "=1.14.20" } +solana-logger = { path = "../../logger", version = "=1.14.20" } +solana-sdk = { path = "..", version = "=1.14.20" } tar = "0.4.38" [dev-dependencies] diff --git a/sdk/cargo-build-sbf/tests/crates/fail/Cargo.toml b/sdk/cargo-build-sbf/tests/crates/fail/Cargo.toml index a1fa96af50622d..c112d202e7405b 100644 --- a/sdk/cargo-build-sbf/tests/crates/fail/Cargo.toml +++ b/sdk/cargo-build-sbf/tests/crates/fail/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "fail" -version = "1.14.19" +version = "1.14.20" description = "Solana SBF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ edition = "2021" publish = false [dependencies] -solana-program = { path = "../../../../program", version = "=1.14.19" } +solana-program = { path = "../../../../program", version = "=1.14.20" } [lib] crate-type = ["cdylib"] diff --git a/sdk/cargo-build-sbf/tests/crates/noop/Cargo.toml b/sdk/cargo-build-sbf/tests/crates/noop/Cargo.toml index f5edb4ccd63324..72954667554d23 100644 --- a/sdk/cargo-build-sbf/tests/crates/noop/Cargo.toml +++ b/sdk/cargo-build-sbf/tests/crates/noop/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "noop" -version = "1.14.19" +version = "1.14.20" description = "Solana SBF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ edition = "2021" publish = false [dependencies] -solana-program = { path = "../../../../program", version = "=1.14.19" } +solana-program = { path = "../../../../program", version = "=1.14.20" } [lib] crate-type = ["cdylib"] diff --git a/sdk/cargo-test-bpf/Cargo.toml b/sdk/cargo-test-bpf/Cargo.toml index e64d5382f4888a..93d828b77a3369 100644 --- a/sdk/cargo-test-bpf/Cargo.toml +++ b/sdk/cargo-test-bpf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-cargo-test-bpf" -version = "1.14.19" +version = "1.14.20" description = "Execute all unit and integration tests after building with the Solana SBF SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/sdk/cargo-test-sbf/Cargo.toml b/sdk/cargo-test-sbf/Cargo.toml index 950acd2f7ccf6c..3cbc93043deccc 100644 --- a/sdk/cargo-test-sbf/Cargo.toml +++ b/sdk/cargo-test-sbf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-cargo-test-sbf" -version = "1.14.19" +version = "1.14.20" description = "Execute all unit and integration tests after building with the Solana SBF SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/sdk/gen-headers/Cargo.toml b/sdk/gen-headers/Cargo.toml index 6d3d189835fd3e..4c6f5ef620ae53 100644 --- a/sdk/gen-headers/Cargo.toml +++ b/sdk/gen-headers/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "gen-headers" -version = "1.14.19" +version = "1.14.20" edition = "2021" license = "Apache-2.0" publish = false diff --git a/sdk/macro/Cargo.toml b/sdk/macro/Cargo.toml index ca220df05d320c..42cfe89c9c7b0d 100644 --- a/sdk/macro/Cargo.toml +++ b/sdk/macro/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-sdk-macro" -version = "1.14.19" +version = "1.14.20" description = "Solana SDK Macro" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/sdk/program/Cargo.toml b/sdk/program/Cargo.toml index 356d7b64cd7f84..b88f3545ad3b17 100644 --- a/sdk/program/Cargo.toml +++ b/sdk/program/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-program" -version = "1.14.19" +version = "1.14.20" description = "Solana Program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -31,9 +31,9 @@ serde_derive = "1.0" serde_json = "1.0" sha2 = "0.10.0" sha3 = "0.10.0" -solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.19" } -solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.19" } -solana-sdk-macro = { path = "../macro", version = "=1.14.19" } +solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.20" } +solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.20" } +solana-sdk-macro = { path = "../macro", version = "=1.14.20" } thiserror = "1.0" [target.'cfg(not(target_os = "solana"))'.dependencies] @@ -50,7 +50,7 @@ wasm-bindgen = "0.2" zeroize = { version = "1.3", default-features = true, features = ["zeroize_derive"] } [target.'cfg(not(target_os = "solana"))'.dev-dependencies] -solana-logger = { path = "../../logger", version = "=1.14.19" } +solana-logger = { path = "../../logger", version = "=1.14.20" } [target.'cfg(target_arch = "wasm32")'.dependencies] console_error_panic_hook = "0.1.7" diff --git a/send-transaction-service/Cargo.toml b/send-transaction-service/Cargo.toml index 065d1b086463b2..bc00ff2c08e5b3 100644 --- a/send-transaction-service/Cargo.toml +++ b/send-transaction-service/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-send-transaction-service" -version = "1.14.19" +version = "1.14.20" description = "Solana send transaction service" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,14 +12,14 @@ edition = "2021" [dependencies] crossbeam-channel = "0.5" log = "0.4.17" -solana-client = { path = "../client", version = "=1.14.19" } -solana-measure = { path = "../measure", version = "=1.14.19" } -solana-metrics = { path = "../metrics", version = "=1.14.19" } -solana-runtime = { path = "../runtime", version = "=1.14.19" } -solana-sdk = { path = "../sdk", version = "=1.14.19" } +solana-client = { path = "../client", version = "=1.14.20" } +solana-measure = { path = "../measure", version = "=1.14.20" } +solana-metrics = { path = "../metrics", version = "=1.14.20" } +solana-runtime = { path = "../runtime", version = "=1.14.20" } +solana-sdk = { path = "../sdk", version = "=1.14.20" } [dev-dependencies] -solana-logger = { path = "../logger", version = "=1.14.19" } +solana-logger = { path = "../logger", version = "=1.14.20" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/stake-accounts/Cargo.toml b/stake-accounts/Cargo.toml index bd5cb2b3ae45dc..65e63a20ee7431 100644 --- a/stake-accounts/Cargo.toml +++ b/stake-accounts/Cargo.toml @@ -3,7 +3,7 @@ name = "solana-stake-accounts" description = "Blockchain, Rebuilt for Scale" authors = ["Solana Maintainers "] edition = "2021" -version = "1.14.19" +version = "1.14.20" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -11,15 +11,15 @@ documentation = "https://docs.rs/solana-stake-accounts" [dependencies] clap = "2.33.1" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.19" } -solana-cli-config = { path = "../cli-config", version = "=1.14.19" } -solana-client = { path = "../client", version = "=1.14.19" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.19" } -solana-sdk = { path = "../sdk", version = "=1.14.19" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.19" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.20" } +solana-cli-config = { path = "../cli-config", version = "=1.14.20" } +solana-client = { path = "../client", version = "=1.14.20" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.20" } +solana-sdk = { path = "../sdk", version = "=1.14.20" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.20" } [dev-dependencies] -solana-runtime = { path = "../runtime", version = "=1.14.19" } +solana-runtime = { path = "../runtime", version = "=1.14.20" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/storage-bigtable/Cargo.toml b/storage-bigtable/Cargo.toml index a0a8da6ba7dcae..277808e1148f91 100644 --- a/storage-bigtable/Cargo.toml +++ b/storage-bigtable/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-storage-bigtable" -version = "1.14.19" +version = "1.14.20" description = "Solana Storage BigTable" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -27,10 +27,10 @@ prost-types = "0.11.0" serde = "1.0.138" serde_derive = "1.0.103" smpl_jwt = "0.7.1" -solana-metrics = { path = "../metrics", version = "=1.14.19" } -solana-sdk = { path = "../sdk", version = "=1.14.19" } -solana-storage-proto = { path = "../storage-proto", version = "=1.14.19" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.19" } +solana-metrics = { path = "../metrics", version = "=1.14.20" } +solana-sdk = { path = "../sdk", version = "=1.14.20" } +solana-storage-proto = { path = "../storage-proto", version = "=1.14.20" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.20" } thiserror = "1.0" tokio = "1" tonic = { version = "0.8.0", features = ["tls", "transport"] } diff --git a/storage-bigtable/build-proto/Cargo.toml b/storage-bigtable/build-proto/Cargo.toml index b8ab136baa8a8e..88d9391a41d22c 100644 --- a/storage-bigtable/build-proto/Cargo.toml +++ b/storage-bigtable/build-proto/Cargo.toml @@ -7,7 +7,7 @@ license = "Apache-2.0" name = "proto" publish = false repository = "https://github.com/solana-labs/solana" -version = "1.14.19" +version = "1.14.20" [dependencies] tonic-build = "0.8.0" diff --git a/storage-proto/Cargo.toml b/storage-proto/Cargo.toml index ca21ddd9d0508c..5f2d35203994e3 100644 --- a/storage-proto/Cargo.toml +++ b/storage-proto/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-storage-proto" -version = "1.14.19" +version = "1.14.20" description = "Solana Storage Protobuf Definitions" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,9 +14,9 @@ bincode = "1.3.3" bs58 = "0.4.0" prost = "0.11.0" serde = "1.0.138" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.19" } -solana-sdk = { path = "../sdk", version = "=1.14.19" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.19" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.20" } +solana-sdk = { path = "../sdk", version = "=1.14.20" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.20" } [dev-dependencies] enum-iterator = "0.8.1" diff --git a/streamer/Cargo.toml b/streamer/Cargo.toml index 80c5b8068bb53e..360afff22455d1 100644 --- a/streamer/Cargo.toml +++ b/streamer/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-streamer" -version = "1.14.19" +version = "1.14.20" description = "Solana Streamer" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -25,15 +25,15 @@ quinn = "0.8.3" rand = "0.7.0" rcgen = "0.9.2" rustls = { version = "0.20.6", features = ["dangerous_configuration"] } -solana-metrics = { path = "../metrics", version = "=1.14.19" } -solana-perf = { path = "../perf", version = "=1.14.19" } -solana-sdk = { path = "../sdk", version = "=1.14.19" } +solana-metrics = { path = "../metrics", version = "=1.14.20" } +solana-perf = { path = "../perf", version = "=1.14.20" } +solana-sdk = { path = "../sdk", version = "=1.14.20" } thiserror = "1.0" tokio = { version = "1", features = ["full"] } x509-parser = "0.14.0" [dev-dependencies] -solana-logger = { path = "../logger", version = "=1.14.19" } +solana-logger = { path = "../logger", version = "=1.14.20" } [lib] crate-type = ["lib"] diff --git a/sys-tuner/Cargo.toml b/sys-tuner/Cargo.toml index 5528f9780b7704..43480728ee0e7b 100644 --- a/sys-tuner/Cargo.toml +++ b/sys-tuner/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-sys-tuner" description = "The solana cluster system tuner daemon" -version = "1.14.19" +version = "1.14.20" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,8 +14,8 @@ publish = true clap = "2.33.1" libc = "0.2.126" log = "0.4.17" -solana-logger = { path = "../logger", version = "=1.14.19" } -solana-version = { path = "../version", version = "=1.14.19" } +solana-logger = { path = "../logger", version = "=1.14.20" } +solana-version = { path = "../version", version = "=1.14.20" } [target."cfg(unix)".dependencies] unix_socket2 = "0.5.4" diff --git a/test-validator/Cargo.toml b/test-validator/Cargo.toml index 5b64a874b191ee..9a5d2c73adad18 100644 --- a/test-validator/Cargo.toml +++ b/test-validator/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "solana-test-validator" description = "Blockchain, Rebuilt for Scale" -version = "1.14.19" +version = "1.14.20" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-test-validator" readme = "../README.md" @@ -15,19 +15,19 @@ base64 = "0.13.0" log = "0.4.17" serde_derive = "1.0.103" serde_json = "1.0.81" -solana-cli-output = { path = "../cli-output", version = "=1.14.19" } -solana-client = { path = "../client", version = "=1.14.19" } -solana-core = { path = "../core", version = "=1.14.19" } -solana-gossip = { path = "../gossip", version = "=1.14.19" } -solana-ledger = { path = "../ledger", version = "=1.14.19" } -solana-logger = { path = "../logger", version = "=1.14.19" } -solana-net-utils = { path = "../net-utils", version = "=1.14.19" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.19" } -solana-program-test = { path = "../program-test", version = "=1.14.19" } -solana-rpc = { path = "../rpc", version = "=1.14.19" } -solana-runtime = { path = "../runtime", version = "=1.14.19" } -solana-sdk = { path = "../sdk", version = "=1.14.19" } -solana-streamer = { path = "../streamer", version = "=1.14.19" } +solana-cli-output = { path = "../cli-output", version = "=1.14.20" } +solana-client = { path = "../client", version = "=1.14.20" } +solana-core = { path = "../core", version = "=1.14.20" } +solana-gossip = { path = "../gossip", version = "=1.14.20" } +solana-ledger = { path = "../ledger", version = "=1.14.20" } +solana-logger = { path = "../logger", version = "=1.14.20" } +solana-net-utils = { path = "../net-utils", version = "=1.14.20" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.20" } +solana-program-test = { path = "../program-test", version = "=1.14.20" } +solana-rpc = { path = "../rpc", version = "=1.14.20" } +solana-runtime = { path = "../runtime", version = "=1.14.20" } +solana-sdk = { path = "../sdk", version = "=1.14.20" } +solana-streamer = { path = "../streamer", version = "=1.14.20" } tokio = { version = "1", features = ["full"] } [package.metadata.docs.rs] diff --git a/tokens/Cargo.toml b/tokens/Cargo.toml index f1a1f4e3e407a6..19ea769db562d0 100644 --- a/tokens/Cargo.toml +++ b/tokens/Cargo.toml @@ -3,7 +3,7 @@ name = "solana-tokens" description = "Blockchain, Rebuilt for Scale" authors = ["Solana Maintainers "] edition = "2021" -version = "1.14.19" +version = "1.14.20" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -19,14 +19,14 @@ indexmap = "1.9.1" indicatif = "0.16.2" pickledb = { version = "0.5.1", default-features = false, features = ["yaml"] } serde = { version = "1.0", features = ["derive"] } -solana-account-decoder = { path = "../account-decoder", version = "=1.14.19" } -solana-clap-utils = { path = "../clap-utils", version = "=1.14.19" } -solana-cli-config = { path = "../cli-config", version = "=1.14.19" } -solana-client = { path = "../client", version = "=1.14.19" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.19" } -solana-sdk = { path = "../sdk", version = "=1.14.19" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.19" } -solana-version = { path = "../version", version = "=1.14.19" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.20" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.20" } +solana-cli-config = { path = "../cli-config", version = "=1.14.20" } +solana-client = { path = "../client", version = "=1.14.20" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.20" } +solana-sdk = { path = "../sdk", version = "=1.14.20" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.20" } +solana-version = { path = "../version", version = "=1.14.20" } spl-associated-token-account = { version = "=1.1.3" } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } tempfile = "3.4.0" @@ -34,6 +34,6 @@ thiserror = "1.0" [dev-dependencies] bincode = "1.3.3" -solana-logger = { path = "../logger", version = "=1.14.19" } -solana-streamer = { path = "../streamer", version = "=1.14.19" } -solana-test-validator = { path = "../test-validator", version = "=1.14.19" } +solana-logger = { path = "../logger", version = "=1.14.20" } +solana-streamer = { path = "../streamer", version = "=1.14.20" } +solana-test-validator = { path = "../test-validator", version = "=1.14.20" } diff --git a/transaction-dos/Cargo.toml b/transaction-dos/Cargo.toml index 46819b6a410624..9704fea8eb5e69 100644 --- a/transaction-dos/Cargo.toml +++ b/transaction-dos/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-transaction-dos" -version = "1.14.19" +version = "1.14.20" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,23 +14,23 @@ clap = "2.33.1" log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.19" } -solana-cli = { path = "../cli", version = "=1.14.19" } -solana-client = { path = "../client", version = "=1.14.19" } -solana-core = { path = "../core", version = "=1.14.19" } -solana-faucet = { path = "../faucet", version = "=1.14.19" } -solana-gossip = { path = "../gossip", version = "=1.14.19" } -solana-logger = { path = "../logger", version = "=1.14.19" } -solana-measure = { path = "../measure", version = "=1.14.19" } -solana-net-utils = { path = "../net-utils", version = "=1.14.19" } -solana-runtime = { path = "../runtime", version = "=1.14.19" } -solana-sdk = { path = "../sdk", version = "=1.14.19" } -solana-streamer = { path = "../streamer", version = "=1.14.19" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.19" } -solana-version = { path = "../version", version = "=1.14.19" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.20" } +solana-cli = { path = "../cli", version = "=1.14.20" } +solana-client = { path = "../client", version = "=1.14.20" } +solana-core = { path = "../core", version = "=1.14.20" } +solana-faucet = { path = "../faucet", version = "=1.14.20" } +solana-gossip = { path = "../gossip", version = "=1.14.20" } +solana-logger = { path = "../logger", version = "=1.14.20" } +solana-measure = { path = "../measure", version = "=1.14.20" } +solana-net-utils = { path = "../net-utils", version = "=1.14.20" } +solana-runtime = { path = "../runtime", version = "=1.14.20" } +solana-sdk = { path = "../sdk", version = "=1.14.20" } +solana-streamer = { path = "../streamer", version = "=1.14.20" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.20" } +solana-version = { path = "../version", version = "=1.14.20" } [dev-dependencies] -solana-local-cluster = { path = "../local-cluster", version = "=1.14.19" } +solana-local-cluster = { path = "../local-cluster", version = "=1.14.20" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/transaction-status/Cargo.toml b/transaction-status/Cargo.toml index 2b0b5d7c254912..e20ebd7432aade 100644 --- a/transaction-status/Cargo.toml +++ b/transaction-status/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-transaction-status" -version = "1.14.19" +version = "1.14.20" description = "Solana transaction status types" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -20,12 +20,12 @@ log = "0.4.17" serde = "1.0.138" serde_derive = "1.0.103" serde_json = "1.0.81" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.19" } -solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.19" } -solana-measure = { path = "../measure", version = "=1.14.19" } -solana-metrics = { path = "../metrics", version = "=1.14.19" } -solana-sdk = { path = "../sdk", version = "=1.14.19" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.19" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.20" } +solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.20" } +solana-measure = { path = "../measure", version = "=1.14.20" } +solana-metrics = { path = "../metrics", version = "=1.14.20" } +solana-sdk = { path = "../sdk", version = "=1.14.20" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.20" } spl-associated-token-account = { version = "=1.1.3", features = ["no-entrypoint"] } spl-memo = { version = "=3.0.1", features = ["no-entrypoint"] } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } diff --git a/upload-perf/Cargo.toml b/upload-perf/Cargo.toml index 41d24feb39d2e3..ca680b2f4ef933 100644 --- a/upload-perf/Cargo.toml +++ b/upload-perf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-upload-perf" -version = "1.14.19" +version = "1.14.20" description = "Metrics Upload Utility" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -11,7 +11,7 @@ publish = false [dependencies] serde_json = "1.0.81" -solana-metrics = { path = "../metrics", version = "=1.14.19" } +solana-metrics = { path = "../metrics", version = "=1.14.20" } [[bin]] name = "solana-upload-perf" diff --git a/validator/Cargo.toml b/validator/Cargo.toml index ac62058fcd941d..783e95e360dfd3 100644 --- a/validator/Cargo.toml +++ b/validator/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-validator" description = "Blockchain, Rebuilt for Scale" -version = "1.14.19" +version = "1.14.20" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -28,30 +28,30 @@ num_cpus = "1.13.1" rand = "0.7.0" serde = "1.0.138" serde_json = "1.0.81" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.19" } -solana-cli-config = { path = "../cli-config", version = "=1.14.19" } -solana-client = { path = "../client", version = "=1.14.19" } -solana-core = { path = "../core", version = "=1.14.19" } -solana-download-utils = { path = "../download-utils", version = "=1.14.19" } -solana-entry = { path = "../entry", version = "=1.14.19" } -solana-faucet = { path = "../faucet", version = "=1.14.19" } -solana-genesis-utils = { path = "../genesis-utils", version = "=1.14.19" } -solana-gossip = { path = "../gossip", version = "=1.14.19" } -solana-ledger = { path = "../ledger", version = "=1.14.19" } -solana-logger = { path = "../logger", version = "=1.14.19" } -solana-metrics = { path = "../metrics", version = "=1.14.19" } -solana-net-utils = { path = "../net-utils", version = "=1.14.19" } -solana-perf = { path = "../perf", version = "=1.14.19" } -solana-poh = { path = "../poh", version = "=1.14.19" } -solana-rpc = { path = "../rpc", version = "=1.14.19" } -solana-runtime = { path = "../runtime", version = "=1.14.19" } -solana-sdk = { path = "../sdk", version = "=1.14.19" } -solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.19" } -solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.19" } -solana-streamer = { path = "../streamer", version = "=1.14.19" } -solana-test-validator = { path = "../test-validator", version = "=1.14.19" } -solana-version = { path = "../version", version = "=1.14.19" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.19" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.20" } +solana-cli-config = { path = "../cli-config", version = "=1.14.20" } +solana-client = { path = "../client", version = "=1.14.20" } +solana-core = { path = "../core", version = "=1.14.20" } +solana-download-utils = { path = "../download-utils", version = "=1.14.20" } +solana-entry = { path = "../entry", version = "=1.14.20" } +solana-faucet = { path = "../faucet", version = "=1.14.20" } +solana-genesis-utils = { path = "../genesis-utils", version = "=1.14.20" } +solana-gossip = { path = "../gossip", version = "=1.14.20" } +solana-ledger = { path = "../ledger", version = "=1.14.20" } +solana-logger = { path = "../logger", version = "=1.14.20" } +solana-metrics = { path = "../metrics", version = "=1.14.20" } +solana-net-utils = { path = "../net-utils", version = "=1.14.20" } +solana-perf = { path = "../perf", version = "=1.14.20" } +solana-poh = { path = "../poh", version = "=1.14.20" } +solana-rpc = { path = "../rpc", version = "=1.14.20" } +solana-runtime = { path = "../runtime", version = "=1.14.20" } +solana-sdk = { path = "../sdk", version = "=1.14.20" } +solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.20" } +solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.20" } +solana-streamer = { path = "../streamer", version = "=1.14.20" } +solana-test-validator = { path = "../test-validator", version = "=1.14.20" } +solana-version = { path = "../version", version = "=1.14.20" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.20" } symlink = "0.1.0" [target.'cfg(not(target_env = "msvc"))'.dependencies] diff --git a/version/Cargo.toml b/version/Cargo.toml index 2d20485ab56188..bb9244de707395 100644 --- a/version/Cargo.toml +++ b/version/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-version" -version = "1.14.19" +version = "1.14.20" description = "Solana Version" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,9 +14,9 @@ log = "0.4.17" semver = "1.0.10" serde = "1.0.138" serde_derive = "1.0.103" -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.19" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.19" } -solana-sdk = { path = "../sdk", version = "=1.14.19" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.20" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.20" } +solana-sdk = { path = "../sdk", version = "=1.14.20" } [lib] name = "solana_version" diff --git a/watchtower/Cargo.toml b/watchtower/Cargo.toml index c89251b6e80c6b..2111df8c071b74 100644 --- a/watchtower/Cargo.toml +++ b/watchtower/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-watchtower" description = "Blockchain, Rebuilt for Scale" -version = "1.14.19" +version = "1.14.20" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -13,15 +13,15 @@ documentation = "https://docs.rs/solana-watchtower" clap = "2.33.1" humantime = "2.0.1" log = "0.4.17" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.19" } -solana-cli-config = { path = "../cli-config", version = "=1.14.19" } -solana-cli-output = { path = "../cli-output", version = "=1.14.19" } -solana-client = { path = "../client", version = "=1.14.19" } -solana-logger = { path = "../logger", version = "=1.14.19" } -solana-metrics = { path = "../metrics", version = "=1.14.19" } -solana-notifier = { path = "../notifier", version = "=1.14.19" } -solana-sdk = { path = "../sdk", version = "=1.14.19" } -solana-version = { path = "../version", version = "=1.14.19" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.20" } +solana-cli-config = { path = "../cli-config", version = "=1.14.20" } +solana-cli-output = { path = "../cli-output", version = "=1.14.20" } +solana-client = { path = "../client", version = "=1.14.20" } +solana-logger = { path = "../logger", version = "=1.14.20" } +solana-metrics = { path = "../metrics", version = "=1.14.20" } +solana-notifier = { path = "../notifier", version = "=1.14.20" } +solana-sdk = { path = "../sdk", version = "=1.14.20" } +solana-version = { path = "../version", version = "=1.14.20" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/zk-token-sdk/Cargo.toml b/zk-token-sdk/Cargo.toml index fd20f5b275ecf4..24af5cc0d80be1 100644 --- a/zk-token-sdk/Cargo.toml +++ b/zk-token-sdk/Cargo.toml @@ -3,7 +3,7 @@ name = "solana-zk-token-sdk" description = "Solana Zk Token SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" -version = "1.14.19" +version = "1.14.20" license = "Apache-2.0" edition = "2021" @@ -12,7 +12,7 @@ base64 = "0.13" bytemuck = { version = "1.11.0", features = ["derive"] } num-derive = "0.3" num-traits = "0.2" -solana-program = { path = "../sdk/program", version = "=1.14.19" } +solana-program = { path = "../sdk/program", version = "=1.14.20" } [target.'cfg(not(target_os = "solana"))'.dependencies] aes-gcm-siv = "0.10.3" @@ -29,7 +29,7 @@ rand = "0.7" serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" sha3 = "0.9" -solana-sdk = { path = "../sdk", version = "=1.14.19" } +solana-sdk = { path = "../sdk", version = "=1.14.20" } subtle = "2" thiserror = "1.0" zeroize = { version = "1.3", default-features = false, features = ["zeroize_derive"] } From e3dda4bc70f689a44850dd15abc84f7ad6e14ec6 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Tue, 20 Jun 2023 20:00:33 +0000 Subject: [PATCH 438/465] v1.14: Add metrics for invalid vote timestamps (backport of #32206) (#32207) Add metrics for invalid vote timestamps (#32206) (cherry picked from commit 4ba78de8cbe9704acab6b0fdec82a6845c71eb4d) Co-authored-by: Ashwin Sekar --- core/src/consensus.rs | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/core/src/consensus.rs b/core/src/consensus.rs index ab88fb418fcef9..e256f5ec1d2c7e 100644 --- a/core/src/consensus.rs +++ b/core/src/consensus.rs @@ -430,6 +430,12 @@ impl Tower { } else { // If the previous vote did not send a timestamp due to clock error, // use the last good timestamp + 1 + datapoint_info!( + "refresh-timestamp-missing", + ("heaviest-slot", heaviest_slot_on_same_fork, i64), + ("last-timestamp", self.last_timestamp.timestamp, i64), + ("last-slot", self.last_timestamp.slot, i64), + ); self.last_timestamp.timestamp.saturating_add(1) }; @@ -591,6 +597,13 @@ impl Tower { timestamp, }; return Some(timestamp); + } else { + datapoint_info!( + "backwards-timestamp", + ("slot", current_slot, i64), + ("timestamp", timestamp, i64), + ("last-timestamp", self.last_timestamp.timestamp, i64), + ) } } None From cd1c6d0d3f1f2789116f90c6b472ccae6b8b4a8c Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Thu, 22 Jun 2023 02:04:13 +0800 Subject: [PATCH 439/465] v1.14: Bump openssl from 0.10.48 to 0.10.55 (backport of #32215) (#32218) * Bump openssl from 0.10.54 to 0.10.55 (#32215) * Bump openssl from 0.10.54 to 0.10.55 Bumps [openssl](https://github.com/sfackler/rust-openssl) from 0.10.54 to 0.10.55. - [Release notes](https://github.com/sfackler/rust-openssl/releases) - [Commits](https://github.com/sfackler/rust-openssl/compare/openssl-v0.10.54...openssl-v0.10.55) --- updated-dependencies: - dependency-name: openssl dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] * [auto-commit] Update all Cargo lock files --------- Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: dependabot-buildkite (cherry picked from commit 6fdac22c66660137c6c595633734708ed4a6e956) # Conflicts: # Cargo.lock # programs/bpf/Cargo.lock * chore: bump openssl to 0.10.55 --------- Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: yihau --- Cargo.lock | 9 ++++----- programs/bpf/Cargo.lock | 9 ++++----- 2 files changed, 8 insertions(+), 10 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index e3797c4e53db95..e0daa66d4d3abc 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2943,9 +2943,9 @@ checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" [[package]] name = "openssl" -version = "0.10.48" +version = "0.10.55" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "518915b97df115dd36109bfa429a48b8f737bd05508cf9588977b599648926d2" +checksum = "345df152bc43501c5eb9e4654ff05f794effb78d4efe3d53abc158baddc0703d" dependencies = [ "bitflags", "cfg-if 1.0.0", @@ -2984,11 +2984,10 @@ dependencies = [ [[package]] name = "openssl-sys" -version = "0.9.83" +version = "0.9.90" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "666416d899cf077260dac8698d60a60b435a46d57e82acb1be3d0dad87284e5b" +checksum = "374533b0e45f3a7ced10fcaeccca020e66656bc03dac384f852e4e5a7a8104a6" dependencies = [ - "autocfg", "cc", "libc", "openssl-src", diff --git a/programs/bpf/Cargo.lock b/programs/bpf/Cargo.lock index b0cc7b37cb57df..7df1b04da734c4 100644 --- a/programs/bpf/Cargo.lock +++ b/programs/bpf/Cargo.lock @@ -2743,9 +2743,9 @@ checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" [[package]] name = "openssl" -version = "0.10.48" +version = "0.10.55" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "518915b97df115dd36109bfa429a48b8f737bd05508cf9588977b599648926d2" +checksum = "345df152bc43501c5eb9e4654ff05f794effb78d4efe3d53abc158baddc0703d" dependencies = [ "bitflags", "cfg-if 1.0.0", @@ -2784,11 +2784,10 @@ dependencies = [ [[package]] name = "openssl-sys" -version = "0.9.83" +version = "0.9.90" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "666416d899cf077260dac8698d60a60b435a46d57e82acb1be3d0dad87284e5b" +checksum = "374533b0e45f3a7ced10fcaeccca020e66656bc03dac384f852e4e5a7a8104a6" dependencies = [ - "autocfg", "cc", "libc", "openssl-src", From 87ce9bb729def9d70672ae52d5caa1dbbae4047b Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Thu, 29 Jun 2023 15:57:00 +0000 Subject: [PATCH 440/465] v1.14: ci: only kill containers that are based on the solanalabs/rust* images (backport of #32292) (#32325) * ci: only kill containers that are based on the solanalabs/rust* images (#32292) * ci: only kill containers that are based on the solanalabs/rust* images * Update .buildkite/hooks/post-checkout Co-authored-by: Trent Nelson * Update .buildkite/hooks/post-checkout Co-authored-by: Trent Nelson * fix lint --------- Co-authored-by: Trent Nelson (cherry picked from commit 3e5ee8de509f63e1cd94c390d5a65a4acb803c6f) # Conflicts: # .buildkite/hooks/post-checkout * fix conflict --------- Co-authored-by: Yihau Chen Co-authored-by: yihau --- .buildkite/hooks/post-checkout | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/.buildkite/hooks/post-checkout b/.buildkite/hooks/post-checkout index fefa4075828087..2acfe194e40225 100644 --- a/.buildkite/hooks/post-checkout +++ b/.buildkite/hooks/post-checkout @@ -8,14 +8,17 @@ source ci/env.sh # previous CI job # ( - containers=$(docker ps -q) - if [[ $(hostname) != metrics-solana-com && -n $containers ]]; then - echo "+++ Killing stale docker containers" - docker ps + echo "+++ Killing stale docker containers" + while read -r line; do + read -r id image _ <<<"$line" - # shellcheck disable=SC2086 # Don't want to double quote $containers - docker kill $containers - fi + if [[ $image =~ "solanalabs/rust" ]]; then + if docker kill "$id" >/dev/null; then + echo "kill $id $image" + fi + continue + fi + done < <(docker ps | tail -n +2) ) # Processes from previously aborted CI jobs seem to loiter, unclear why as one From 021e8c4acb47be9fa01e3ba9ac2a793d1516562f Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Wed, 5 Jul 2023 21:55:24 +0000 Subject: [PATCH 441/465] v1.14: rolls out merkle shreds to ~5% of mainnet slots (backport of #32337) (#32347) * rolls out merkle shreds to ~5% of mainnet slots (#32337) (cherry picked from commit 43a5ed3139e6d3611bbd2e34127b212536a4a55b) # Conflicts: # core/src/broadcast_stage/standard_broadcast_run.rs * resolves mergify merge conflicts --------- Co-authored-by: behzad nouri --- core/src/broadcast_stage/standard_broadcast_run.rs | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/core/src/broadcast_stage/standard_broadcast_run.rs b/core/src/broadcast_stage/standard_broadcast_run.rs index a25758c16e0ed4..748f1510d6f25f 100644 --- a/core/src/broadcast_stage/standard_broadcast_run.rs +++ b/core/src/broadcast_stage/standard_broadcast_run.rs @@ -498,8 +498,11 @@ impl BroadcastRun for StandardBroadcastRun { } } -fn should_use_merkle_variant(_slot: Slot, _cluster_type: ClusterType, _shred_version: u16) -> bool { - false +fn should_use_merkle_variant(slot: Slot, cluster_type: ClusterType, shred_version: u16) -> bool { + match cluster_type { + ClusterType::Testnet => shred_version == 28353, + _ => (slot % 19) == 1, + } } #[cfg(test)] From 2235e325ddbf56b62a31a1c8cc5ac3b14d0dc3f3 Mon Sep 17 00:00:00 2001 From: Yihau Chen Date: Sat, 8 Jul 2023 05:00:36 +0800 Subject: [PATCH 442/465] ci: blake3 =1.3.1 (#32418) --- frozen-abi/Cargo.toml | 2 +- runtime/Cargo.toml | 2 +- sdk/program/Cargo.toml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/frozen-abi/Cargo.toml b/frozen-abi/Cargo.toml index b979e16ee382b6..295f7f41a121c0 100644 --- a/frozen-abi/Cargo.toml +++ b/frozen-abi/Cargo.toml @@ -25,7 +25,7 @@ thiserror = "1.0" [target.'cfg(not(target_os = "solana"))'.dependencies] ahash = { version = "0.7.6", features = ["default", "std"] } -blake3 = { version = "1.3.1", features = ["digest", "traits-preview"] } +blake3 = { version = "=1.3.1", features = ["digest", "traits-preview"] } block-buffer = { version = "0.9.0", features = ["block-padding"] } byteorder = { version = "1.4.3", features = ["default", "i128", "std"] } cc = { version = "1.0.67", features = ["jobserver", "parallel"] } diff --git a/runtime/Cargo.toml b/runtime/Cargo.toml index cb42802f699801..3b721e9a5a756e 100644 --- a/runtime/Cargo.toml +++ b/runtime/Cargo.toml @@ -12,7 +12,7 @@ edition = "2021" [dependencies] arrayref = "0.3.6" bincode = "1.3.3" -blake3 = "1.3.1" +blake3 = "=1.3.1" bv = { version = "0.11.1", features = ["serde"] } bytemuck = "1.11.0" byteorder = "1.4.3" diff --git a/sdk/program/Cargo.toml b/sdk/program/Cargo.toml index b88f3545ad3b17..3ef79881ef723f 100644 --- a/sdk/program/Cargo.toml +++ b/sdk/program/Cargo.toml @@ -12,7 +12,7 @@ edition = "2021" [dependencies] bincode = "1.3.1" -blake3 = { version = "1.3.1", features = ["digest", "traits-preview"] } +blake3 = { version = "=1.3.1", features = ["digest", "traits-preview"] } borsh = "0.9.1" borsh-derive = "0.9.1" bs58 = "0.4.0" From 277b4c32f997b6ee35efbc45488c5e9232f37ab1 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Fri, 7 Jul 2023 17:44:02 -0700 Subject: [PATCH 443/465] v1.14: Don't attempt to refresh votes on non voting validators (backport of #32315) (#32355) Don't attempt to refresh votes on non voting validators (#32315) (cherry picked from commit e1576b5352168cd857772526d39f1fb1698d2839) # Conflicts: # core/src/consensus/tower1_14_11.rs # core/src/replay_stage.rs Co-authored-by: Ashwin Sekar Co-authored-by: Will Hickey --- core/src/consensus.rs | 9 +++++---- core/src/replay_stage.rs | 36 +++++++++++++++++++++++++++++------- core/src/tower1_7_14.rs | 2 +- core/src/tower_storage.rs | 2 +- 4 files changed, 36 insertions(+), 13 deletions(-) diff --git a/core/src/consensus.rs b/core/src/consensus.rs index e256f5ec1d2c7e..06d0f2a761e6d6 100644 --- a/core/src/consensus.rs +++ b/core/src/consensus.rs @@ -182,7 +182,8 @@ pub struct Tower { // blockhash of the voted block itself, depending if the vote slot was refreshed. // For instance, a vote for slot 5, may be refreshed/resubmitted for inclusion in // block 10, in which case `last_vote_tx_blockhash` equals the blockhash of 10, not 5. - last_vote_tx_blockhash: Hash, + // For non voting validators this is None + last_vote_tx_blockhash: Option, last_timestamp: BlockTimestamp, #[serde(skip)] // Restored last voted slot which cannot be found in SlotHistory at replayed root @@ -205,7 +206,7 @@ impl Default for Tower { vote_state: VoteState::default(), last_vote: VoteTransaction::from(VoteStateUpdate::default()), last_timestamp: BlockTimestamp::default(), - last_vote_tx_blockhash: Hash::default(), + last_vote_tx_blockhash: None, stray_restored_slot: Option::default(), last_switch_threshold_check: Option::default(), }; @@ -417,7 +418,7 @@ impl Tower { self.vote_state.tower() } - pub fn last_vote_tx_blockhash(&self) -> Hash { + pub fn last_vote_tx_blockhash(&self) -> Option { self.last_vote_tx_blockhash } @@ -461,7 +462,7 @@ impl Tower { } pub fn refresh_last_vote_tx_blockhash(&mut self, new_vote_tx_blockhash: Hash) { - self.last_vote_tx_blockhash = new_vote_tx_blockhash; + self.last_vote_tx_blockhash = Some(new_vote_tx_blockhash); } // Returns true if we have switched the new vote instruction that directly sets vote state diff --git a/core/src/replay_stage.rs b/core/src/replay_stage.rs index cbbb99bc1013b3..e8b829d17ea349 100644 --- a/core/src/replay_stage.rs +++ b/core/src/replay_stage.rs @@ -2168,9 +2168,19 @@ impl ReplayStage { last_voted_slot ); } + + // If we are a non voting validator or have an incorrect setup preventing us from + // generating vote txs, no need to refresh + let last_vote_tx_blockhash = + if let Some(last_vote_tx_blockhash) = tower.last_vote_tx_blockhash() { + last_vote_tx_blockhash + } else { + return; + }; + if my_latest_landed_vote >= last_voted_slot || heaviest_bank_on_same_fork - .is_hash_valid_for_age(&tower.last_vote_tx_blockhash(), MAX_PROCESSING_AGE) + .is_hash_valid_for_age(&last_vote_tx_blockhash, MAX_PROCESSING_AGE) || { // In order to avoid voting on multiple forks all past MAX_PROCESSING_AGE that don't // include the last voted blockhash @@ -6594,7 +6604,10 @@ pub(crate) mod tests { assert_eq!(votes.len(), 1); let vote_tx = &votes[0]; assert_eq!(vote_tx.message.recent_blockhash, bank0.last_blockhash()); - assert_eq!(tower.last_vote_tx_blockhash(), bank0.last_blockhash()); + assert_eq!( + tower.last_vote_tx_blockhash().unwrap(), + bank0.last_blockhash() + ); assert_eq!(tower.last_voted_slot().unwrap(), 0); bank1.process_transaction(vote_tx).unwrap(); bank1.freeze(); @@ -6623,7 +6636,10 @@ pub(crate) mod tests { let votes = cluster_info.get_votes(&mut cursor); assert!(votes.is_empty()); // Tower's latest vote tx blockhash hasn't changed either - assert_eq!(tower.last_vote_tx_blockhash(), bank0.last_blockhash()); + assert_eq!( + tower.last_vote_tx_blockhash().unwrap(), + bank0.last_blockhash() + ); assert_eq!(tower.last_voted_slot().unwrap(), 0); } @@ -6657,7 +6673,10 @@ pub(crate) mod tests { assert_eq!(votes.len(), 1); let vote_tx = &votes[0]; assert_eq!(vote_tx.message.recent_blockhash, bank1.last_blockhash()); - assert_eq!(tower.last_vote_tx_blockhash(), bank1.last_blockhash()); + assert_eq!( + tower.last_vote_tx_blockhash().unwrap(), + bank1.last_blockhash() + ); assert_eq!(tower.last_voted_slot().unwrap(), 1); // Trying to refresh the vote for bank 1 in bank 2 won't succeed because @@ -6679,7 +6698,10 @@ pub(crate) mod tests { // No new votes have been submitted to gossip let votes = cluster_info.get_votes(&mut cursor); assert!(votes.is_empty()); - assert_eq!(tower.last_vote_tx_blockhash(), bank1.last_blockhash()); + assert_eq!( + tower.last_vote_tx_blockhash().unwrap(), + bank1.last_blockhash() + ); assert_eq!(tower.last_voted_slot().unwrap(), 1); // Create a bank where the last vote transaction will have expired @@ -6739,7 +6761,7 @@ pub(crate) mod tests { expired_bank.last_blockhash() ); assert_eq!( - tower.last_vote_tx_blockhash(), + tower.last_vote_tx_blockhash().unwrap(), expired_bank.last_blockhash() ); assert_eq!(tower.last_voted_slot().unwrap(), 1); @@ -6795,7 +6817,7 @@ pub(crate) mod tests { expired_bank.last_blockhash() ); assert_eq!( - tower.last_vote_tx_blockhash(), + tower.last_vote_tx_blockhash().unwrap(), expired_bank.last_blockhash() ); assert_eq!(tower.last_voted_slot().unwrap(), 1); diff --git a/core/src/tower1_7_14.rs b/core/src/tower1_7_14.rs index 63b70cdf80a0c6..13dca69e6f6a92 100644 --- a/core/src/tower1_7_14.rs +++ b/core/src/tower1_7_14.rs @@ -22,7 +22,7 @@ pub struct Tower1_7_14 { // blockhash of the voted block itself, depending if the vote slot was refreshed. // For instance, a vote for slot 5, may be refreshed/resubmitted for inclusion in // block 10, in which case `last_vote_tx_blockhash` equals the blockhash of 10, not 5. - pub(crate) last_vote_tx_blockhash: Hash, + pub(crate) last_vote_tx_blockhash: Option, pub(crate) last_timestamp: BlockTimestamp, #[serde(skip)] // Restored last voted slot which cannot be found in SlotHistory at replayed root diff --git a/core/src/tower_storage.rs b/core/src/tower_storage.rs index a69700251f5ae0..c02b347d4b2980 100644 --- a/core/src/tower_storage.rs +++ b/core/src/tower_storage.rs @@ -402,7 +402,7 @@ pub mod test { vote_state, last_vote: vote.clone(), last_timestamp: BlockTimestamp::default(), - last_vote_tx_blockhash: Hash::default(), + last_vote_tx_blockhash: None, stray_restored_slot: Some(2), last_switch_threshold_check: Option::default(), }; From 304c13dacc03de787f84543d6a3328425b1de61d Mon Sep 17 00:00:00 2001 From: Will Hickey Date: Sat, 8 Jul 2023 13:02:54 -0500 Subject: [PATCH 444/465] Bump version to v1.14.21 (#32425) --- Cargo.lock | 492 +++++++++--------- account-decoder/Cargo.toml | 10 +- accounts-bench/Cargo.toml | 12 +- accounts-cluster-bench/Cargo.toml | 34 +- banking-bench/Cargo.toml | 26 +- banks-client/Cargo.toml | 12 +- banks-interface/Cargo.toml | 4 +- banks-server/Cargo.toml | 12 +- bench-streamer/Cargo.toml | 8 +- bench-tps/Cargo.toml | 38 +- bloom/Cargo.toml | 8 +- bucket_map/Cargo.toml | 8 +- clap-utils/Cargo.toml | 8 +- clap-v3-utils/Cargo.toml | 8 +- cli-config/Cargo.toml | 6 +- cli-output/Cargo.toml | 16 +- cli/Cargo.toml | 38 +- client-test/Cargo.toml | 32 +- client/Cargo.toml | 28 +- core/Cargo.toml | 56 +- dos/Cargo.toml | 30 +- download-utils/Cargo.toml | 6 +- entry/Cargo.toml | 16 +- faucet/Cargo.toml | 14 +- frozen-abi/Cargo.toml | 6 +- frozen-abi/macro/Cargo.toml | 2 +- genesis-utils/Cargo.toml | 8 +- genesis/Cargo.toml | 22 +- geyser-plugin-interface/Cargo.toml | 6 +- geyser-plugin-manager/Cargo.toml | 16 +- gossip/Cargo.toml | 38 +- install/Cargo.toml | 14 +- keygen/Cargo.toml | 12 +- ledger-tool/Cargo.toml | 30 +- ledger/Cargo.toml | 40 +- local-cluster/Cargo.toml | 28 +- log-analyzer/Cargo.toml | 6 +- logger/Cargo.toml | 2 +- measure/Cargo.toml | 4 +- merkle-root-bench/Cargo.toml | 12 +- merkle-tree/Cargo.toml | 4 +- metrics/Cargo.toml | 4 +- net-shaper/Cargo.toml | 4 +- net-utils/Cargo.toml | 8 +- notifier/Cargo.toml | 2 +- perf/Cargo.toml | 12 +- poh-bench/Cargo.toml | 14 +- poh/Cargo.toml | 20 +- program-runtime/Cargo.toml | 14 +- program-test/Cargo.toml | 20 +- .../address-lookup-table-tests/Cargo.toml | 8 +- programs/address-lookup-table/Cargo.toml | 12 +- programs/bpf-loader-tests/Cargo.toml | 8 +- programs/bpf/Cargo.lock | 490 ++++++++--------- programs/bpf/Cargo.toml | 28 +- programs/bpf/rust/128bit/Cargo.toml | 6 +- programs/bpf/rust/128bit_dep/Cargo.toml | 4 +- programs/bpf/rust/alloc/Cargo.toml | 4 +- programs/bpf/rust/call_depth/Cargo.toml | 4 +- programs/bpf/rust/caller_access/Cargo.toml | 4 +- programs/bpf/rust/curve25519/Cargo.toml | 6 +- programs/bpf/rust/custom_heap/Cargo.toml | 4 +- programs/bpf/rust/dep_crate/Cargo.toml | 6 +- .../bpf/rust/deprecated_loader/Cargo.toml | 4 +- programs/bpf/rust/dup_accounts/Cargo.toml | 4 +- programs/bpf/rust/error_handling/Cargo.toml | 4 +- programs/bpf/rust/external_spend/Cargo.toml | 4 +- programs/bpf/rust/finalize/Cargo.toml | 4 +- .../rust/get_minimum_delegation/Cargo.toml | 4 +- .../Cargo.toml | 4 +- .../rust/instruction_introspection/Cargo.toml | 4 +- programs/bpf/rust/invoke/Cargo.toml | 4 +- programs/bpf/rust/invoke_and_error/Cargo.toml | 4 +- programs/bpf/rust/invoke_and_ok/Cargo.toml | 4 +- .../bpf/rust/invoke_and_return/Cargo.toml | 4 +- programs/bpf/rust/invoked/Cargo.toml | 4 +- programs/bpf/rust/iter/Cargo.toml | 4 +- programs/bpf/rust/log_data/Cargo.toml | 4 +- programs/bpf/rust/many_args/Cargo.toml | 6 +- programs/bpf/rust/many_args_dep/Cargo.toml | 4 +- programs/bpf/rust/mem/Cargo.toml | 10 +- programs/bpf/rust/membuiltins/Cargo.toml | 6 +- programs/bpf/rust/noop/Cargo.toml | 4 +- programs/bpf/rust/panic/Cargo.toml | 4 +- programs/bpf/rust/param_passing/Cargo.toml | 6 +- .../bpf/rust/param_passing_dep/Cargo.toml | 4 +- programs/bpf/rust/rand/Cargo.toml | 4 +- programs/bpf/rust/realloc/Cargo.toml | 4 +- programs/bpf/rust/realloc_invoke/Cargo.toml | 6 +- .../bpf/rust/ro_account_modify/Cargo.toml | 4 +- programs/bpf/rust/ro_modify/Cargo.toml | 4 +- programs/bpf/rust/sanity/Cargo.toml | 10 +- .../bpf/rust/secp256k1_recover/Cargo.toml | 4 +- programs/bpf/rust/sha/Cargo.toml | 4 +- .../rust/sibling_inner_instruction/Cargo.toml | 4 +- .../bpf/rust/sibling_instruction/Cargo.toml | 4 +- programs/bpf/rust/simulation/Cargo.toml | 12 +- programs/bpf/rust/spoof1/Cargo.toml | 4 +- programs/bpf/rust/spoof1_system/Cargo.toml | 4 +- programs/bpf/rust/sysvar/Cargo.toml | 10 +- programs/bpf/rust/upgradeable/Cargo.toml | 4 +- programs/bpf/rust/upgraded/Cargo.toml | 4 +- programs/bpf_loader/Cargo.toml | 14 +- .../bpf_loader/gen-syscall-list/Cargo.toml | 2 +- programs/compute-budget/Cargo.toml | 6 +- programs/config/Cargo.toml | 8 +- programs/ed25519-tests/Cargo.toml | 6 +- programs/stake/Cargo.toml | 18 +- programs/vote/Cargo.toml | 14 +- programs/zk-token-proof-tests/Cargo.toml | 10 +- programs/zk-token-proof/Cargo.toml | 8 +- rayon-threadlimit/Cargo.toml | 2 +- rbpf-cli/Cargo.toml | 10 +- remote-wallet/Cargo.toml | 4 +- rpc-test/Cargo.toml | 18 +- rpc/Cargo.toml | 48 +- runtime/Cargo.toml | 34 +- runtime/store-tool/Cargo.toml | 8 +- sdk/Cargo.toml | 12 +- sdk/cargo-build-bpf/Cargo.toml | 4 +- sdk/cargo-build-sbf/Cargo.toml | 8 +- .../tests/crates/fail/Cargo.toml | 4 +- .../tests/crates/noop/Cargo.toml | 4 +- sdk/cargo-test-bpf/Cargo.toml | 2 +- sdk/cargo-test-sbf/Cargo.toml | 2 +- sdk/gen-headers/Cargo.toml | 2 +- sdk/macro/Cargo.toml | 2 +- sdk/program/Cargo.toml | 10 +- send-transaction-service/Cargo.toml | 14 +- stake-accounts/Cargo.toml | 16 +- storage-bigtable/Cargo.toml | 10 +- storage-bigtable/build-proto/Cargo.toml | 2 +- storage-proto/Cargo.toml | 8 +- streamer/Cargo.toml | 10 +- sys-tuner/Cargo.toml | 6 +- test-validator/Cargo.toml | 28 +- tokens/Cargo.toml | 24 +- transaction-dos/Cargo.toml | 32 +- transaction-status/Cargo.toml | 14 +- upload-perf/Cargo.toml | 4 +- validator/Cargo.toml | 50 +- version/Cargo.toml | 8 +- watchtower/Cargo.toml | 20 +- zk-token-sdk/Cargo.toml | 6 +- 144 files changed, 1278 insertions(+), 1278 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index e0daa66d4d3abc..f3660c8637ef94 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1708,7 +1708,7 @@ dependencies = [ [[package]] name = "gen-headers" -version = "1.14.20" +version = "1.14.21" dependencies = [ "log", "regex", @@ -1716,7 +1716,7 @@ dependencies = [ [[package]] name = "gen-syscall-list" -version = "1.14.20" +version = "1.14.21" dependencies = [ "regex", ] @@ -3528,7 +3528,7 @@ dependencies = [ [[package]] name = "proto" -version = "1.14.20" +version = "1.14.21" dependencies = [ "protobuf-src", "tonic-build 0.8.0", @@ -3785,15 +3785,15 @@ dependencies = [ [[package]] name = "rbpf-cli" -version = "1.14.20" +version = "1.14.21" dependencies = [ "clap 3.2.23", "serde", "serde_json", "solana-bpf-loader-program", - "solana-logger 1.14.20", + "solana-logger 1.14.21", "solana-program-runtime", - "solana-sdk 1.14.20", + "solana-sdk 1.14.21", "solana_rbpf", ] @@ -4509,7 +4509,7 @@ dependencies = [ [[package]] name = "solana-account-decoder" -version = "1.14.20" +version = "1.14.21" dependencies = [ "Inflector", "base64 0.13.0", @@ -4522,7 +4522,7 @@ dependencies = [ "serde_json", "solana-address-lookup-table-program", "solana-config-program", - "solana-sdk 1.14.20", + "solana-sdk 1.14.21", "solana-vote-program", "spl-token", "spl-token-2022", @@ -4532,21 +4532,21 @@ dependencies = [ [[package]] name = "solana-accounts-bench" -version = "1.14.20" +version = "1.14.21" dependencies = [ "clap 2.33.3", "log", "rayon", - "solana-logger 1.14.20", + "solana-logger 1.14.21", "solana-measure", "solana-runtime", - "solana-sdk 1.14.20", + "solana-sdk 1.14.21", "solana-version", ] [[package]] name = "solana-accounts-cluster-bench" -version = "1.14.20" +version = "1.14.21" dependencies = [ "clap 2.33.3", "log", @@ -4559,11 +4559,11 @@ dependencies = [ "solana-faucet", "solana-gossip", "solana-local-cluster", - "solana-logger 1.14.20", + "solana-logger 1.14.21", "solana-measure", "solana-net-utils", "solana-runtime", - "solana-sdk 1.14.20", + "solana-sdk 1.14.21", "solana-streamer", "solana-test-validator", "solana-transaction-status", @@ -4573,7 +4573,7 @@ dependencies = [ [[package]] name = "solana-address-lookup-table-program" -version = "1.14.20" +version = "1.14.21" dependencies = [ "bincode", "bytemuck", @@ -4582,28 +4582,28 @@ dependencies = [ "num-traits", "rustc_version 0.4.0", "serde", - "solana-frozen-abi 1.14.20", - "solana-frozen-abi-macro 1.14.20", - "solana-program 1.14.20", + "solana-frozen-abi 1.14.21", + "solana-frozen-abi-macro 1.14.21", + "solana-program 1.14.21", "solana-program-runtime", - "solana-sdk 1.14.20", + "solana-sdk 1.14.21", "thiserror", ] [[package]] name = "solana-address-lookup-table-program-tests" -version = "1.14.20" +version = "1.14.21" dependencies = [ "assert_matches", "bincode", "solana-address-lookup-table-program", "solana-program-test", - "solana-sdk 1.14.20", + "solana-sdk 1.14.21", ] [[package]] name = "solana-banking-bench" -version = "1.14.20" +version = "1.14.21" dependencies = [ "clap 3.2.23", "crossbeam-channel", @@ -4614,27 +4614,27 @@ dependencies = [ "solana-core", "solana-gossip", "solana-ledger", - "solana-logger 1.14.20", + "solana-logger 1.14.21", "solana-measure", "solana-perf", "solana-poh", "solana-runtime", - "solana-sdk 1.14.20", + "solana-sdk 1.14.21", "solana-streamer", "solana-version", ] [[package]] name = "solana-banks-client" -version = "1.14.20" +version = "1.14.21" dependencies = [ "borsh", "futures 0.3.21", "solana-banks-interface", "solana-banks-server", - "solana-program 1.14.20", + "solana-program 1.14.21", "solana-runtime", - "solana-sdk 1.14.20", + "solana-sdk 1.14.21", "tarpc", "thiserror", "tokio", @@ -4643,16 +4643,16 @@ dependencies = [ [[package]] name = "solana-banks-interface" -version = "1.14.20" +version = "1.14.21" dependencies = [ "serde", - "solana-sdk 1.14.20", + "solana-sdk 1.14.21", "tarpc", ] [[package]] name = "solana-banks-server" -version = "1.14.20" +version = "1.14.21" dependencies = [ "bincode", "crossbeam-channel", @@ -4660,7 +4660,7 @@ dependencies = [ "solana-banks-interface", "solana-client", "solana-runtime", - "solana-sdk 1.14.20", + "solana-sdk 1.14.21", "solana-send-transaction-service", "tarpc", "tokio", @@ -4670,7 +4670,7 @@ dependencies = [ [[package]] name = "solana-bench-streamer" -version = "1.14.20" +version = "1.14.21" dependencies = [ "clap 3.2.23", "crossbeam-channel", @@ -4681,7 +4681,7 @@ dependencies = [ [[package]] name = "solana-bench-tps" -version = "1.14.20" +version = "1.14.21" dependencies = [ "clap 2.33.3", "crossbeam-channel", @@ -4698,13 +4698,13 @@ dependencies = [ "solana-genesis", "solana-gossip", "solana-local-cluster", - "solana-logger 1.14.20", + "solana-logger 1.14.21", "solana-measure", "solana-metrics", "solana-net-utils", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.20", + "solana-sdk 1.14.21", "solana-streamer", "solana-test-validator", "solana-version", @@ -4713,7 +4713,7 @@ dependencies = [ [[package]] name = "solana-bloom" -version = "1.14.20" +version = "1.14.21" dependencies = [ "bv", "fnv", @@ -4723,14 +4723,14 @@ dependencies = [ "rustc_version 0.4.0", "serde", "serde_derive", - "solana-frozen-abi 1.14.20", - "solana-frozen-abi-macro 1.14.20", - "solana-sdk 1.14.20", + "solana-frozen-abi 1.14.21", + "solana-frozen-abi-macro 1.14.21", + "solana-sdk 1.14.21", ] [[package]] name = "solana-bpf-loader-program" -version = "1.14.20" +version = "1.14.21" dependencies = [ "bincode", "byteorder", @@ -4741,26 +4741,26 @@ dependencies = [ "solana-metrics", "solana-program-runtime", "solana-runtime", - "solana-sdk 1.14.20", - "solana-zk-token-sdk 1.14.20", + "solana-sdk 1.14.21", + "solana-zk-token-sdk 1.14.21", "solana_rbpf", "thiserror", ] [[package]] name = "solana-bpf-loader-program-tests" -version = "1.14.20" +version = "1.14.21" dependencies = [ "assert_matches", "bincode", "solana-bpf-loader-program", "solana-program-test", - "solana-sdk 1.14.20", + "solana-sdk 1.14.21", ] [[package]] name = "solana-bucket-map" -version = "1.14.20" +version = "1.14.21" dependencies = [ "fs_extra", "log", @@ -4768,24 +4768,24 @@ dependencies = [ "modular-bitfield", "rand 0.7.3", "rayon", - "solana-logger 1.14.20", + "solana-logger 1.14.21", "solana-measure", - "solana-sdk 1.14.20", + "solana-sdk 1.14.21", "tempfile", ] [[package]] name = "solana-cargo-build-bpf" -version = "1.14.20" +version = "1.14.21" dependencies = [ "cargo_metadata", "clap 3.2.23", - "solana-sdk 1.14.20", + "solana-sdk 1.14.21", ] [[package]] name = "solana-cargo-build-sbf" -version = "1.14.20" +version = "1.14.21" dependencies = [ "bzip2", "cargo_metadata", @@ -4794,14 +4794,14 @@ dependencies = [ "regex", "serial_test", "solana-download-utils", - "solana-logger 1.14.20", - "solana-sdk 1.14.20", + "solana-logger 1.14.21", + "solana-sdk 1.14.21", "tar", ] [[package]] name = "solana-cargo-test-bpf" -version = "1.14.20" +version = "1.14.21" dependencies = [ "cargo_metadata", "clap 3.2.23", @@ -4809,7 +4809,7 @@ dependencies = [ [[package]] name = "solana-cargo-test-sbf" -version = "1.14.20" +version = "1.14.21" dependencies = [ "cargo_metadata", "clap 3.2.23", @@ -4817,14 +4817,14 @@ dependencies = [ [[package]] name = "solana-clap-utils" -version = "1.14.20" +version = "1.14.21" dependencies = [ "chrono", "clap 2.33.3", "rpassword", "solana-perf", "solana-remote-wallet", - "solana-sdk 1.14.20", + "solana-sdk 1.14.21", "tempfile", "thiserror", "tiny-bip39", @@ -4834,14 +4834,14 @@ dependencies = [ [[package]] name = "solana-clap-v3-utils" -version = "1.14.20" +version = "1.14.21" dependencies = [ "chrono", "clap 3.2.23", "rpassword", "solana-perf", "solana-remote-wallet", - "solana-sdk 1.14.20", + "solana-sdk 1.14.21", "tempfile", "thiserror", "tiny-bip39", @@ -4851,7 +4851,7 @@ dependencies = [ [[package]] name = "solana-cli" -version = "1.14.20" +version = "1.14.21" dependencies = [ "bincode", "bs58", @@ -4879,10 +4879,10 @@ dependencies = [ "solana-client", "solana-config-program", "solana-faucet", - "solana-logger 1.14.20", + "solana-logger 1.14.21", "solana-program-runtime", "solana-remote-wallet", - "solana-sdk 1.14.20", + "solana-sdk 1.14.21", "solana-streamer", "solana-test-validator", "solana-transaction-status", @@ -4897,7 +4897,7 @@ dependencies = [ [[package]] name = "solana-cli-config" -version = "1.14.20" +version = "1.14.21" dependencies = [ "anyhow", "dirs-next", @@ -4906,13 +4906,13 @@ dependencies = [ "serde_derive", "serde_yaml", "solana-clap-utils", - "solana-sdk 1.14.20", + "solana-sdk 1.14.21", "url 2.2.2", ] [[package]] name = "solana-cli-output" -version = "1.14.20" +version = "1.14.21" dependencies = [ "Inflector", "base64 0.13.0", @@ -4930,7 +4930,7 @@ dependencies = [ "solana-clap-utils", "solana-cli-config", "solana-client", - "solana-sdk 1.14.20", + "solana-sdk 1.14.21", "solana-transaction-status", "solana-vote-program", "spl-memo", @@ -4938,7 +4938,7 @@ dependencies = [ [[package]] name = "solana-client" -version = "1.14.20" +version = "1.14.21" dependencies = [ "anyhow", "assert_matches", @@ -4974,12 +4974,12 @@ dependencies = [ "solana-account-decoder", "solana-clap-utils", "solana-faucet", - "solana-logger 1.14.20", + "solana-logger 1.14.21", "solana-measure", "solana-metrics", "solana-net-utils", "solana-perf", - "solana-sdk 1.14.20", + "solana-sdk 1.14.21", "solana-streamer", "solana-transaction-status", "solana-version", @@ -4995,14 +4995,14 @@ dependencies = [ [[package]] name = "solana-client-test" -version = "1.14.20" +version = "1.14.21" dependencies = [ "futures-util", "serde_json", "serial_test", "solana-client", "solana-ledger", - "solana-logger 1.14.20", + "solana-logger 1.14.21", "solana-measure", "solana-merkle-tree", "solana-metrics", @@ -5010,7 +5010,7 @@ dependencies = [ "solana-rayon-threadlimit", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.20", + "solana-sdk 1.14.21", "solana-streamer", "solana-test-validator", "solana-transaction-status", @@ -5021,28 +5021,28 @@ dependencies = [ [[package]] name = "solana-compute-budget-program" -version = "1.14.20" +version = "1.14.21" dependencies = [ "solana-program-runtime", - "solana-sdk 1.14.20", + "solana-sdk 1.14.21", ] [[package]] name = "solana-config-program" -version = "1.14.20" +version = "1.14.21" dependencies = [ "bincode", "chrono", "serde", "serde_derive", - "solana-logger 1.14.20", + "solana-logger 1.14.21", "solana-program-runtime", - "solana-sdk 1.14.20", + "solana-sdk 1.14.21", ] [[package]] name = "solana-core" -version = "1.14.20" +version = "1.14.21" dependencies = [ "ahash", "base64 0.13.0", @@ -5075,12 +5075,12 @@ dependencies = [ "solana-bloom", "solana-client", "solana-entry", - "solana-frozen-abi 1.14.20", - "solana-frozen-abi-macro 1.14.20", + "solana-frozen-abi 1.14.21", + "solana-frozen-abi-macro 1.14.21", "solana-geyser-plugin-manager", "solana-gossip", "solana-ledger", - "solana-logger 1.14.20", + "solana-logger 1.14.21", "solana-measure", "solana-metrics", "solana-net-utils", @@ -5090,7 +5090,7 @@ dependencies = [ "solana-rayon-threadlimit", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.20", + "solana-sdk 1.14.21", "solana-send-transaction-service", "solana-stake-program", "solana-streamer", @@ -5110,7 +5110,7 @@ dependencies = [ [[package]] name = "solana-dos" -version = "1.14.20" +version = "1.14.21" dependencies = [ "bincode", "clap 3.2.23", @@ -5126,42 +5126,42 @@ dependencies = [ "solana-faucet", "solana-gossip", "solana-local-cluster", - "solana-logger 1.14.20", + "solana-logger 1.14.21", "solana-measure", "solana-net-utils", "solana-perf", "solana-rpc", - "solana-sdk 1.14.20", + "solana-sdk 1.14.21", "solana-streamer", "solana-version", ] [[package]] name = "solana-download-utils" -version = "1.14.20" +version = "1.14.21" dependencies = [ "console", "indicatif", "log", "reqwest", "solana-runtime", - "solana-sdk 1.14.20", + "solana-sdk 1.14.21", ] [[package]] name = "solana-ed25519-program-tests" -version = "1.14.20" +version = "1.14.21" dependencies = [ "assert_matches", "ed25519-dalek", "rand 0.7.3", "solana-program-test", - "solana-sdk 1.14.20", + "solana-sdk 1.14.21", ] [[package]] name = "solana-entry" -version = "1.14.20" +version = "1.14.21" dependencies = [ "bincode", "crossbeam-channel", @@ -5173,18 +5173,18 @@ dependencies = [ "rand 0.7.3", "rayon", "serde", - "solana-logger 1.14.20", + "solana-logger 1.14.21", "solana-measure", "solana-merkle-tree", "solana-metrics", "solana-perf", "solana-rayon-threadlimit", - "solana-sdk 1.14.20", + "solana-sdk 1.14.21", ] [[package]] name = "solana-faucet" -version = "1.14.20" +version = "1.14.21" dependencies = [ "bincode", "byteorder", @@ -5195,9 +5195,9 @@ dependencies = [ "serde_derive", "solana-clap-utils", "solana-cli-config", - "solana-logger 1.14.20", + "solana-logger 1.14.21", "solana-metrics", - "solana-sdk 1.14.20", + "solana-sdk 1.14.21", "solana-version", "spl-memo", "thiserror", @@ -5240,7 +5240,7 @@ dependencies = [ [[package]] name = "solana-frozen-abi" -version = "1.14.20" +version = "1.14.21" dependencies = [ "ahash", "blake3", @@ -5265,8 +5265,8 @@ dependencies = [ "serde_derive", "serde_json", "sha2 0.10.2", - "solana-frozen-abi-macro 1.14.20", - "solana-logger 1.14.20", + "solana-frozen-abi-macro 1.14.21", + "solana-logger 1.14.21", "subtle", "thiserror", ] @@ -5285,7 +5285,7 @@ dependencies = [ [[package]] name = "solana-frozen-abi-macro" -version = "1.14.20" +version = "1.14.21" dependencies = [ "proc-macro2 1.0.52", "quote 1.0.18", @@ -5295,7 +5295,7 @@ dependencies = [ [[package]] name = "solana-genesis" -version = "1.14.20" +version = "1.14.21" dependencies = [ "base64 0.13.0", "clap 2.33.3", @@ -5306,9 +5306,9 @@ dependencies = [ "solana-cli-config", "solana-entry", "solana-ledger", - "solana-logger 1.14.20", + "solana-logger 1.14.21", "solana-runtime", - "solana-sdk 1.14.20", + "solana-sdk 1.14.21", "solana-stake-program", "solana-version", "solana-vote-program", @@ -5317,26 +5317,26 @@ dependencies = [ [[package]] name = "solana-genesis-utils" -version = "1.14.20" +version = "1.14.21" dependencies = [ "solana-download-utils", "solana-runtime", - "solana-sdk 1.14.20", + "solana-sdk 1.14.21", ] [[package]] name = "solana-geyser-plugin-interface" -version = "1.14.20" +version = "1.14.21" dependencies = [ "log", - "solana-sdk 1.14.20", + "solana-sdk 1.14.21", "solana-transaction-status", "thiserror", ] [[package]] name = "solana-geyser-plugin-manager" -version = "1.14.20" +version = "1.14.21" dependencies = [ "bs58", "crossbeam-channel", @@ -5349,14 +5349,14 @@ dependencies = [ "solana-metrics", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.20", + "solana-sdk 1.14.21", "solana-transaction-status", "thiserror", ] [[package]] name = "solana-gossip" -version = "1.14.20" +version = "1.14.21" dependencies = [ "bincode", "bv", @@ -5383,17 +5383,17 @@ dependencies = [ "solana-clap-utils", "solana-client", "solana-entry", - "solana-frozen-abi 1.14.20", - "solana-frozen-abi-macro 1.14.20", + "solana-frozen-abi 1.14.21", + "solana-frozen-abi-macro 1.14.21", "solana-ledger", - "solana-logger 1.14.20", + "solana-logger 1.14.21", "solana-measure", "solana-metrics", "solana-net-utils", "solana-perf", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.14.20", + "solana-sdk 1.14.21", "solana-streamer", "solana-version", "solana-vote-program", @@ -5402,7 +5402,7 @@ dependencies = [ [[package]] name = "solana-install" -version = "1.14.20" +version = "1.14.21" dependencies = [ "atty", "bincode", @@ -5423,8 +5423,8 @@ dependencies = [ "solana-clap-utils", "solana-client", "solana-config-program", - "solana-logger 1.14.20", - "solana-sdk 1.14.20", + "solana-logger 1.14.21", + "solana-sdk 1.14.21", "solana-version", "tar", "tempfile", @@ -5435,7 +5435,7 @@ dependencies = [ [[package]] name = "solana-keygen" -version = "1.14.20" +version = "1.14.21" dependencies = [ "bs58", "clap 3.2.23", @@ -5444,14 +5444,14 @@ dependencies = [ "solana-clap-v3-utils", "solana-cli-config", "solana-remote-wallet", - "solana-sdk 1.14.20", + "solana-sdk 1.14.21", "solana-version", "tiny-bip39", ] [[package]] name = "solana-ledger" -version = "1.14.20" +version = "1.14.21" dependencies = [ "assert_matches", "bincode", @@ -5485,16 +5485,16 @@ dependencies = [ "solana-account-decoder", "solana-bpf-loader-program", "solana-entry", - "solana-frozen-abi 1.14.20", - "solana-frozen-abi-macro 1.14.20", - "solana-logger 1.14.20", + "solana-frozen-abi 1.14.21", + "solana-frozen-abi-macro 1.14.21", + "solana-logger 1.14.21", "solana-measure", "solana-metrics", "solana-perf", "solana-program-runtime", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.14.20", + "solana-sdk 1.14.21", "solana-stake-program", "solana-storage-bigtable", "solana-storage-proto", @@ -5513,7 +5513,7 @@ dependencies = [ [[package]] name = "solana-ledger-tool" -version = "1.14.20" +version = "1.14.21" dependencies = [ "assert_cmd", "base64 0.13.0", @@ -5535,10 +5535,10 @@ dependencies = [ "solana-core", "solana-entry", "solana-ledger", - "solana-logger 1.14.20", + "solana-logger 1.14.21", "solana-measure", "solana-runtime", - "solana-sdk 1.14.20", + "solana-sdk 1.14.21", "solana-stake-program", "solana-storage-bigtable", "solana-transaction-status", @@ -5550,7 +5550,7 @@ dependencies = [ [[package]] name = "solana-local-cluster" -version = "1.14.20" +version = "1.14.21" dependencies = [ "assert_matches", "crossbeam-channel", @@ -5568,9 +5568,9 @@ dependencies = [ "solana-entry", "solana-gossip", "solana-ledger", - "solana-logger 1.14.20", + "solana-logger 1.14.21", "solana-runtime", - "solana-sdk 1.14.20", + "solana-sdk 1.14.21", "solana-stake-program", "solana-streamer", "solana-vote-program", @@ -5579,13 +5579,13 @@ dependencies = [ [[package]] name = "solana-log-analyzer" -version = "1.14.20" +version = "1.14.21" dependencies = [ "byte-unit", "clap 3.2.23", "serde", "serde_json", - "solana-logger 1.14.20", + "solana-logger 1.14.21", "solana-version", ] @@ -5602,7 +5602,7 @@ dependencies = [ [[package]] name = "solana-logger" -version = "1.14.20" +version = "1.14.21" dependencies = [ "env_logger", "lazy_static", @@ -5611,38 +5611,38 @@ dependencies = [ [[package]] name = "solana-measure" -version = "1.14.20" +version = "1.14.21" dependencies = [ "log", - "solana-sdk 1.14.20", + "solana-sdk 1.14.21", ] [[package]] name = "solana-merkle-root-bench" -version = "1.14.20" +version = "1.14.21" dependencies = [ "clap 2.33.3", "log", - "solana-logger 1.14.20", + "solana-logger 1.14.21", "solana-measure", "solana-runtime", - "solana-sdk 1.14.20", + "solana-sdk 1.14.21", "solana-version", ] [[package]] name = "solana-merkle-tree" -version = "1.14.20" +version = "1.14.21" dependencies = [ "fast-math", "hex", "matches", - "solana-program 1.14.20", + "solana-program 1.14.21", ] [[package]] name = "solana-metrics" -version = "1.14.20" +version = "1.14.21" dependencies = [ "crossbeam-channel", "env_logger", @@ -5652,23 +5652,23 @@ dependencies = [ "rand 0.7.3", "reqwest", "serial_test", - "solana-sdk 1.14.20", + "solana-sdk 1.14.21", ] [[package]] name = "solana-net-shaper" -version = "1.14.20" +version = "1.14.21" dependencies = [ "clap 3.2.23", "rand 0.7.3", "serde", "serde_json", - "solana-logger 1.14.20", + "solana-logger 1.14.21", ] [[package]] name = "solana-net-utils" -version = "1.14.20" +version = "1.14.21" dependencies = [ "bincode", "clap 3.2.23", @@ -5679,8 +5679,8 @@ dependencies = [ "serde", "serde_derive", "socket2", - "solana-logger 1.14.20", - "solana-sdk 1.14.20", + "solana-logger 1.14.21", + "solana-sdk 1.14.21", "solana-version", "tokio", "url 2.2.2", @@ -5688,7 +5688,7 @@ dependencies = [ [[package]] name = "solana-notifier" -version = "1.14.20" +version = "1.14.21" dependencies = [ "log", "reqwest", @@ -5697,7 +5697,7 @@ dependencies = [ [[package]] name = "solana-perf" -version = "1.14.20" +version = "1.14.21" dependencies = [ "ahash", "bincode", @@ -5716,17 +5716,17 @@ dependencies = [ "rand_chacha 0.2.2", "rayon", "serde", - "solana-logger 1.14.20", + "solana-logger 1.14.21", "solana-metrics", "solana-rayon-threadlimit", - "solana-sdk 1.14.20", + "solana-sdk 1.14.21", "solana-vote-program", "test-case", ] [[package]] name = "solana-poh" -version = "1.14.20" +version = "1.14.21" dependencies = [ "bincode", "core_affinity", @@ -5736,29 +5736,29 @@ dependencies = [ "rand 0.7.3", "solana-entry", "solana-ledger", - "solana-logger 1.14.20", + "solana-logger 1.14.21", "solana-measure", "solana-metrics", "solana-perf", "solana-runtime", - "solana-sdk 1.14.20", + "solana-sdk 1.14.21", "solana-sys-tuner", "thiserror", ] [[package]] name = "solana-poh-bench" -version = "1.14.20" +version = "1.14.21" dependencies = [ "clap 3.2.23", "log", "rand 0.7.3", "rayon", "solana-entry", - "solana-logger 1.14.20", + "solana-logger 1.14.21", "solana-measure", "solana-perf", - "solana-sdk 1.14.20", + "solana-sdk 1.14.21", "solana-version", ] @@ -5813,7 +5813,7 @@ dependencies = [ [[package]] name = "solana-program" -version = "1.14.20" +version = "1.14.21" dependencies = [ "anyhow", "assert_matches", @@ -5851,10 +5851,10 @@ dependencies = [ "serde_json", "sha2 0.10.2", "sha3 0.10.1", - "solana-frozen-abi 1.14.20", - "solana-frozen-abi-macro 1.14.20", - "solana-logger 1.14.20", - "solana-sdk-macro 1.14.20", + "solana-frozen-abi 1.14.21", + "solana-frozen-abi-macro 1.14.21", + "solana-logger 1.14.21", + "solana-sdk-macro 1.14.21", "static_assertions", "thiserror", "tiny-bip39", @@ -5864,7 +5864,7 @@ dependencies = [ [[package]] name = "solana-program-runtime" -version = "1.14.20" +version = "1.14.21" dependencies = [ "base64 0.13.0", "bincode", @@ -5879,18 +5879,18 @@ dependencies = [ "rand 0.7.3", "rustc_version 0.4.0", "serde", - "solana-frozen-abi 1.14.20", - "solana-frozen-abi-macro 1.14.20", - "solana-logger 1.14.20", + "solana-frozen-abi 1.14.21", + "solana-frozen-abi-macro 1.14.21", + "solana-logger 1.14.21", "solana-measure", "solana-metrics", - "solana-sdk 1.14.20", + "solana-sdk 1.14.21", "thiserror", ] [[package]] name = "solana-program-test" -version = "1.14.20" +version = "1.14.21" dependencies = [ "assert_matches", "async-trait", @@ -5902,10 +5902,10 @@ dependencies = [ "solana-banks-client", "solana-banks-server", "solana-bpf-loader-program", - "solana-logger 1.14.20", + "solana-logger 1.14.21", "solana-program-runtime", "solana-runtime", - "solana-sdk 1.14.20", + "solana-sdk 1.14.21", "solana-stake-program", "solana-vote-program", "thiserror", @@ -5914,7 +5914,7 @@ dependencies = [ [[package]] name = "solana-rayon-threadlimit" -version = "1.14.20" +version = "1.14.21" dependencies = [ "lazy_static", "num_cpus", @@ -5922,7 +5922,7 @@ dependencies = [ [[package]] name = "solana-remote-wallet" -version = "1.14.20" +version = "1.14.21" dependencies = [ "console", "dialoguer", @@ -5933,14 +5933,14 @@ dependencies = [ "parking_lot 0.12.1", "qstring", "semver 1.0.10", - "solana-sdk 1.14.20", + "solana-sdk 1.14.21", "thiserror", "uriparse", ] [[package]] name = "solana-rpc" -version = "1.14.20" +version = "1.14.21" dependencies = [ "base64 0.13.0", "bincode", @@ -5976,7 +5976,7 @@ dependencies = [ "solana-poh", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.14.20", + "solana-sdk 1.14.21", "solana-send-transaction-service", "solana-stake-program", "solana-storage-bigtable", @@ -5995,7 +5995,7 @@ dependencies = [ [[package]] name = "solana-rpc-test" -version = "1.14.20" +version = "1.14.21" dependencies = [ "bincode", "bs58", @@ -6007,9 +6007,9 @@ dependencies = [ "serde_json", "solana-account-decoder", "solana-client", - "solana-logger 1.14.20", + "solana-logger 1.14.21", "solana-rpc", - "solana-sdk 1.14.20", + "solana-sdk 1.14.21", "solana-streamer", "solana-test-validator", "solana-transaction-status", @@ -6018,7 +6018,7 @@ dependencies = [ [[package]] name = "solana-runtime" -version = "1.14.20" +version = "1.14.21" dependencies = [ "arrayref", "assert_matches", @@ -6059,18 +6059,18 @@ dependencies = [ "solana-bucket-map", "solana-compute-budget-program", "solana-config-program", - "solana-frozen-abi 1.14.20", - "solana-frozen-abi-macro 1.14.20", - "solana-logger 1.14.20", + "solana-frozen-abi 1.14.21", + "solana-frozen-abi-macro 1.14.21", + "solana-logger 1.14.21", "solana-measure", "solana-metrics", "solana-program-runtime", "solana-rayon-threadlimit", - "solana-sdk 1.14.20", + "solana-sdk 1.14.21", "solana-stake-program", "solana-vote-program", "solana-zk-token-proof-program", - "solana-zk-token-sdk 1.14.20", + "solana-zk-token-sdk 1.14.21", "strum", "strum_macros", "symlink", @@ -6133,7 +6133,7 @@ dependencies = [ [[package]] name = "solana-sdk" -version = "1.14.20" +version = "1.14.21" dependencies = [ "anyhow", "assert_matches", @@ -6173,11 +6173,11 @@ dependencies = [ "serde_json", "sha2 0.10.2", "sha3 0.10.1", - "solana-frozen-abi 1.14.20", - "solana-frozen-abi-macro 1.14.20", - "solana-logger 1.14.20", - "solana-program 1.14.20", - "solana-sdk-macro 1.14.20", + "solana-frozen-abi 1.14.21", + "solana-frozen-abi-macro 1.14.21", + "solana-logger 1.14.21", + "solana-program 1.14.21", + "solana-sdk-macro 1.14.21", "static_assertions", "thiserror", "tiny-bip39", @@ -6200,7 +6200,7 @@ dependencies = [ [[package]] name = "solana-sdk-macro" -version = "1.14.20" +version = "1.14.21" dependencies = [ "bs58", "proc-macro2 1.0.52", @@ -6211,21 +6211,21 @@ dependencies = [ [[package]] name = "solana-send-transaction-service" -version = "1.14.20" +version = "1.14.21" dependencies = [ "crossbeam-channel", "log", "solana-client", - "solana-logger 1.14.20", + "solana-logger 1.14.21", "solana-measure", "solana-metrics", "solana-runtime", - "solana-sdk 1.14.20", + "solana-sdk 1.14.21", ] [[package]] name = "solana-stake-accounts" -version = "1.14.20" +version = "1.14.21" dependencies = [ "clap 2.33.3", "solana-clap-utils", @@ -6233,13 +6233,13 @@ dependencies = [ "solana-client", "solana-remote-wallet", "solana-runtime", - "solana-sdk 1.14.20", + "solana-sdk 1.14.21", "solana-stake-program", ] [[package]] name = "solana-stake-program" -version = "1.14.20" +version = "1.14.21" dependencies = [ "assert_matches", "bincode", @@ -6251,12 +6251,12 @@ dependencies = [ "serde", "serde_derive", "solana-config-program", - "solana-frozen-abi 1.14.20", - "solana-frozen-abi-macro 1.14.20", - "solana-logger 1.14.20", + "solana-frozen-abi 1.14.21", + "solana-frozen-abi-macro 1.14.21", + "solana-logger 1.14.21", "solana-metrics", "solana-program-runtime", - "solana-sdk 1.14.20", + "solana-sdk 1.14.21", "solana-vote-program", "test-case", "thiserror", @@ -6264,7 +6264,7 @@ dependencies = [ [[package]] name = "solana-storage-bigtable" -version = "1.14.20" +version = "1.14.21" dependencies = [ "backoff", "bincode", @@ -6285,7 +6285,7 @@ dependencies = [ "serde_derive", "smpl_jwt", "solana-metrics", - "solana-sdk 1.14.20", + "solana-sdk 1.14.21", "solana-storage-proto", "solana-transaction-status", "thiserror", @@ -6296,7 +6296,7 @@ dependencies = [ [[package]] name = "solana-storage-proto" -version = "1.14.20" +version = "1.14.21" dependencies = [ "bincode", "bs58", @@ -6305,25 +6305,25 @@ dependencies = [ "protobuf-src", "serde", "solana-account-decoder", - "solana-sdk 1.14.20", + "solana-sdk 1.14.21", "solana-transaction-status", "tonic-build 0.8.0", ] [[package]] name = "solana-store-tool" -version = "1.14.20" +version = "1.14.21" dependencies = [ "clap 2.33.3", "log", - "solana-logger 1.14.20", + "solana-logger 1.14.21", "solana-runtime", "solana-version", ] [[package]] name = "solana-streamer" -version = "1.14.20" +version = "1.14.21" dependencies = [ "crossbeam-channel", "futures-util", @@ -6340,10 +6340,10 @@ dependencies = [ "rand 0.7.3", "rcgen", "rustls 0.20.6", - "solana-logger 1.14.20", + "solana-logger 1.14.21", "solana-metrics", "solana-perf", - "solana-sdk 1.14.20", + "solana-sdk 1.14.21", "thiserror", "tokio", "x509-parser", @@ -6351,13 +6351,13 @@ dependencies = [ [[package]] name = "solana-sys-tuner" -version = "1.14.20" +version = "1.14.21" dependencies = [ "clap 2.33.3", "libc", "log", "nix", - "solana-logger 1.14.20", + "solana-logger 1.14.21", "solana-version", "sysctl", "unix_socket2", @@ -6366,7 +6366,7 @@ dependencies = [ [[package]] name = "solana-test-validator" -version = "1.14.20" +version = "1.14.21" dependencies = [ "base64 0.13.0", "log", @@ -6377,20 +6377,20 @@ dependencies = [ "solana-core", "solana-gossip", "solana-ledger", - "solana-logger 1.14.20", + "solana-logger 1.14.21", "solana-net-utils", "solana-program-runtime", "solana-program-test", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.20", + "solana-sdk 1.14.21", "solana-streamer", "tokio", ] [[package]] name = "solana-tokens" -version = "1.14.20" +version = "1.14.21" dependencies = [ "bincode", "chrono", @@ -6406,9 +6406,9 @@ dependencies = [ "solana-clap-utils", "solana-cli-config", "solana-client", - "solana-logger 1.14.20", + "solana-logger 1.14.21", "solana-remote-wallet", - "solana-sdk 1.14.20", + "solana-sdk 1.14.21", "solana-streamer", "solana-test-validator", "solana-transaction-status", @@ -6421,7 +6421,7 @@ dependencies = [ [[package]] name = "solana-transaction-dos" -version = "1.14.20" +version = "1.14.21" dependencies = [ "bincode", "clap 2.33.3", @@ -6435,11 +6435,11 @@ dependencies = [ "solana-faucet", "solana-gossip", "solana-local-cluster", - "solana-logger 1.14.20", + "solana-logger 1.14.21", "solana-measure", "solana-net-utils", "solana-runtime", - "solana-sdk 1.14.20", + "solana-sdk 1.14.21", "solana-streamer", "solana-transaction-status", "solana-version", @@ -6447,7 +6447,7 @@ dependencies = [ [[package]] name = "solana-transaction-status" -version = "1.14.20" +version = "1.14.21" dependencies = [ "Inflector", "base64 0.13.0", @@ -6463,7 +6463,7 @@ dependencies = [ "solana-address-lookup-table-program", "solana-measure", "solana-metrics", - "solana-sdk 1.14.20", + "solana-sdk 1.14.21", "solana-vote-program", "spl-associated-token-account", "spl-memo", @@ -6474,7 +6474,7 @@ dependencies = [ [[package]] name = "solana-upload-perf" -version = "1.14.20" +version = "1.14.21" dependencies = [ "serde_json", "solana-metrics", @@ -6482,7 +6482,7 @@ dependencies = [ [[package]] name = "solana-validator" -version = "1.14.20" +version = "1.14.21" dependencies = [ "chrono", "clap 2.33.3", @@ -6513,14 +6513,14 @@ dependencies = [ "solana-genesis-utils", "solana-gossip", "solana-ledger", - "solana-logger 1.14.20", + "solana-logger 1.14.21", "solana-metrics", "solana-net-utils", "solana-perf", "solana-poh", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.20", + "solana-sdk 1.14.21", "solana-send-transaction-service", "solana-storage-bigtable", "solana-streamer", @@ -6533,21 +6533,21 @@ dependencies = [ [[package]] name = "solana-version" -version = "1.14.20" +version = "1.14.21" dependencies = [ "log", "rustc_version 0.4.0", "semver 1.0.10", "serde", "serde_derive", - "solana-frozen-abi 1.14.20", - "solana-frozen-abi-macro 1.14.20", - "solana-sdk 1.14.20", + "solana-frozen-abi 1.14.21", + "solana-frozen-abi-macro 1.14.21", + "solana-sdk 1.14.21", ] [[package]] name = "solana-vote-program" -version = "1.14.20" +version = "1.14.21" dependencies = [ "bincode", "itertools", @@ -6558,19 +6558,19 @@ dependencies = [ "rustc_version 0.4.0", "serde", "serde_derive", - "solana-frozen-abi 1.14.20", - "solana-frozen-abi-macro 1.14.20", - "solana-logger 1.14.20", + "solana-frozen-abi 1.14.21", + "solana-frozen-abi-macro 1.14.21", + "solana-logger 1.14.21", "solana-metrics", "solana-program-runtime", - "solana-sdk 1.14.20", + "solana-sdk 1.14.21", "test-case", "thiserror", ] [[package]] name = "solana-watchtower" -version = "1.14.20" +version = "1.14.21" dependencies = [ "clap 2.33.3", "humantime", @@ -6579,35 +6579,35 @@ dependencies = [ "solana-cli-config", "solana-cli-output", "solana-client", - "solana-logger 1.14.20", + "solana-logger 1.14.21", "solana-metrics", "solana-notifier", - "solana-sdk 1.14.20", + "solana-sdk 1.14.21", "solana-version", ] [[package]] name = "solana-zk-token-proof-program" -version = "1.14.20" +version = "1.14.21" dependencies = [ "bytemuck", "getrandom 0.1.16", "num-derive", "num-traits", "solana-program-runtime", - "solana-sdk 1.14.20", - "solana-zk-token-sdk 1.14.20", + "solana-sdk 1.14.21", + "solana-zk-token-sdk 1.14.21", ] [[package]] name = "solana-zk-token-proof-program-tests" -version = "1.14.20" +version = "1.14.21" dependencies = [ "bytemuck", "solana-program-runtime", "solana-program-test", - "solana-sdk 1.14.20", - "solana-zk-token-sdk 1.14.20", + "solana-sdk 1.14.21", + "solana-zk-token-sdk 1.14.21", ] [[package]] @@ -6643,7 +6643,7 @@ dependencies = [ [[package]] name = "solana-zk-token-sdk" -version = "1.14.20" +version = "1.14.21" dependencies = [ "aes-gcm-siv", "arrayref", @@ -6663,8 +6663,8 @@ dependencies = [ "serde", "serde_json", "sha3 0.9.1", - "solana-program 1.14.20", - "solana-sdk 1.14.20", + "solana-program 1.14.21", + "solana-sdk 1.14.21", "subtle", "thiserror", "zeroize", diff --git a/account-decoder/Cargo.toml b/account-decoder/Cargo.toml index 8f0b82ce39a179..ffab3577863927 100644 --- a/account-decoder/Cargo.toml +++ b/account-decoder/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-account-decoder" -version = "1.14.20" +version = "1.14.21" description = "Solana account decoder" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -19,10 +19,10 @@ lazy_static = "1.4.0" serde = "1.0.138" serde_derive = "1.0.103" serde_json = "1.0.81" -solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.20" } -solana-config-program = { path = "../programs/config", version = "=1.14.20" } -solana-sdk = { path = "../sdk", version = "=1.14.20" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.20" } +solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.21" } +solana-config-program = { path = "../programs/config", version = "=1.14.21" } +solana-sdk = { path = "../sdk", version = "=1.14.21" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.21" } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } spl-token-2022 = { version = "=0.6.1", features = ["no-entrypoint"] } thiserror = "1.0" diff --git a/accounts-bench/Cargo.toml b/accounts-bench/Cargo.toml index 68f2bb05f4e3c8..038d8513fd59a6 100644 --- a/accounts-bench/Cargo.toml +++ b/accounts-bench/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-accounts-bench" -version = "1.14.20" +version = "1.14.21" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -12,11 +12,11 @@ publish = false clap = "2.33.1" log = "0.4.17" rayon = "1.5.3" -solana-logger = { path = "../logger", version = "=1.14.20" } -solana-measure = { path = "../measure", version = "=1.14.20" } -solana-runtime = { path = "../runtime", version = "=1.14.20" } -solana-sdk = { path = "../sdk", version = "=1.14.20" } -solana-version = { path = "../version", version = "=1.14.20" } +solana-logger = { path = "../logger", version = "=1.14.21" } +solana-measure = { path = "../measure", version = "=1.14.21" } +solana-runtime = { path = "../runtime", version = "=1.14.21" } +solana-sdk = { path = "../sdk", version = "=1.14.21" } +solana-version = { path = "../version", version = "=1.14.21" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/accounts-cluster-bench/Cargo.toml b/accounts-cluster-bench/Cargo.toml index 338d6e1f135f10..cb386da7ece890 100644 --- a/accounts-cluster-bench/Cargo.toml +++ b/accounts-cluster-bench/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-accounts-cluster-bench" -version = "1.14.20" +version = "1.14.21" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -13,25 +13,25 @@ clap = "2.33.1" log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.20" } -solana-clap-utils = { path = "../clap-utils", version = "=1.14.20" } -solana-client = { path = "../client", version = "=1.14.20" } -solana-faucet = { path = "../faucet", version = "=1.14.20" } -solana-gossip = { path = "../gossip", version = "=1.14.20" } -solana-logger = { path = "../logger", version = "=1.14.20" } -solana-measure = { path = "../measure", version = "=1.14.20" } -solana-net-utils = { path = "../net-utils", version = "=1.14.20" } -solana-runtime = { path = "../runtime", version = "=1.14.20" } -solana-sdk = { path = "../sdk", version = "=1.14.20" } -solana-streamer = { path = "../streamer", version = "=1.14.20" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.20" } -solana-version = { path = "../version", version = "=1.14.20" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.21" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.21" } +solana-client = { path = "../client", version = "=1.14.21" } +solana-faucet = { path = "../faucet", version = "=1.14.21" } +solana-gossip = { path = "../gossip", version = "=1.14.21" } +solana-logger = { path = "../logger", version = "=1.14.21" } +solana-measure = { path = "../measure", version = "=1.14.21" } +solana-net-utils = { path = "../net-utils", version = "=1.14.21" } +solana-runtime = { path = "../runtime", version = "=1.14.21" } +solana-sdk = { path = "../sdk", version = "=1.14.21" } +solana-streamer = { path = "../streamer", version = "=1.14.21" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.21" } +solana-version = { path = "../version", version = "=1.14.21" } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } [dev-dependencies] -solana-core = { path = "../core", version = "=1.14.20" } -solana-local-cluster = { path = "../local-cluster", version = "=1.14.20" } -solana-test-validator = { path = "../test-validator", version = "=1.14.20" } +solana-core = { path = "../core", version = "=1.14.21" } +solana-local-cluster = { path = "../local-cluster", version = "=1.14.21" } +solana-test-validator = { path = "../test-validator", version = "=1.14.21" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/banking-bench/Cargo.toml b/banking-bench/Cargo.toml index 26f88dcd8f9410..e404724ac19d95 100644 --- a/banking-bench/Cargo.toml +++ b/banking-bench/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-banking-bench" -version = "1.14.20" +version = "1.14.21" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,18 +14,18 @@ crossbeam-channel = "0.5" log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" -solana-client = { path = "../client", version = "=1.14.20" } -solana-core = { path = "../core", version = "=1.14.20" } -solana-gossip = { path = "../gossip", version = "=1.14.20" } -solana-ledger = { path = "../ledger", version = "=1.14.20" } -solana-logger = { path = "../logger", version = "=1.14.20" } -solana-measure = { path = "../measure", version = "=1.14.20" } -solana-perf = { path = "../perf", version = "=1.14.20" } -solana-poh = { path = "../poh", version = "=1.14.20" } -solana-runtime = { path = "../runtime", version = "=1.14.20" } -solana-sdk = { path = "../sdk", version = "=1.14.20" } -solana-streamer = { path = "../streamer", version = "=1.14.20" } -solana-version = { path = "../version", version = "=1.14.20" } +solana-client = { path = "../client", version = "=1.14.21" } +solana-core = { path = "../core", version = "=1.14.21" } +solana-gossip = { path = "../gossip", version = "=1.14.21" } +solana-ledger = { path = "../ledger", version = "=1.14.21" } +solana-logger = { path = "../logger", version = "=1.14.21" } +solana-measure = { path = "../measure", version = "=1.14.21" } +solana-perf = { path = "../perf", version = "=1.14.21" } +solana-poh = { path = "../poh", version = "=1.14.21" } +solana-runtime = { path = "../runtime", version = "=1.14.21" } +solana-sdk = { path = "../sdk", version = "=1.14.21" } +solana-streamer = { path = "../streamer", version = "=1.14.21" } +solana-version = { path = "../version", version = "=1.14.21" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/banks-client/Cargo.toml b/banks-client/Cargo.toml index 3460baf1b4fcc7..a41082d0213422 100644 --- a/banks-client/Cargo.toml +++ b/banks-client/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-banks-client" -version = "1.14.20" +version = "1.14.21" description = "Solana banks client" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,17 +12,17 @@ edition = "2021" [dependencies] borsh = "0.9.3" futures = "0.3" -solana-banks-interface = { path = "../banks-interface", version = "=1.14.20" } -solana-program = { path = "../sdk/program", version = "=1.14.20" } -solana-sdk = { path = "../sdk", version = "=1.14.20" } +solana-banks-interface = { path = "../banks-interface", version = "=1.14.21" } +solana-program = { path = "../sdk/program", version = "=1.14.21" } +solana-sdk = { path = "../sdk", version = "=1.14.21" } tarpc = { version = "0.29.0", features = ["full"] } thiserror = "1.0" tokio = { version = "~1.14.1", features = ["full"] } tokio-serde = { version = "0.8", features = ["bincode"] } [dev-dependencies] -solana-banks-server = { path = "../banks-server", version = "=1.14.20" } -solana-runtime = { path = "../runtime", version = "=1.14.20" } +solana-banks-server = { path = "../banks-server", version = "=1.14.21" } +solana-runtime = { path = "../runtime", version = "=1.14.21" } [lib] crate-type = ["lib"] diff --git a/banks-interface/Cargo.toml b/banks-interface/Cargo.toml index c3537a5c3a3c9e..d7cb22d144b937 100644 --- a/banks-interface/Cargo.toml +++ b/banks-interface/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-banks-interface" -version = "1.14.20" +version = "1.14.21" description = "Solana banks RPC interface" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -11,7 +11,7 @@ edition = "2021" [dependencies] serde = { version = "1.0.138", features = ["derive"] } -solana-sdk = { path = "../sdk", version = "=1.14.20" } +solana-sdk = { path = "../sdk", version = "=1.14.21" } tarpc = { version = "0.29.0", features = ["full"] } [lib] diff --git a/banks-server/Cargo.toml b/banks-server/Cargo.toml index 3cd433a9da3ffa..3fd77e7fef1b71 100644 --- a/banks-server/Cargo.toml +++ b/banks-server/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-banks-server" -version = "1.14.20" +version = "1.14.21" description = "Solana banks server" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,11 +13,11 @@ edition = "2021" bincode = "1.3.3" crossbeam-channel = "0.5" futures = "0.3" -solana-banks-interface = { path = "../banks-interface", version = "=1.14.20" } -solana-client = { path = "../client", version = "=1.14.20" } -solana-runtime = { path = "../runtime", version = "=1.14.20" } -solana-sdk = { path = "../sdk", version = "=1.14.20" } -solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.20" } +solana-banks-interface = { path = "../banks-interface", version = "=1.14.21" } +solana-client = { path = "../client", version = "=1.14.21" } +solana-runtime = { path = "../runtime", version = "=1.14.21" } +solana-sdk = { path = "../sdk", version = "=1.14.21" } +solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.21" } tarpc = { version = "0.29.0", features = ["full"] } tokio = { version = "1", features = ["full"] } tokio-serde = { version = "0.8", features = ["bincode"] } diff --git a/bench-streamer/Cargo.toml b/bench-streamer/Cargo.toml index 5e522a435b13ce..e0a5befe9beb69 100644 --- a/bench-streamer/Cargo.toml +++ b/bench-streamer/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-bench-streamer" -version = "1.14.20" +version = "1.14.21" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -11,9 +11,9 @@ publish = false [dependencies] clap = { version = "3.1.5", features = ["cargo"] } crossbeam-channel = "0.5" -solana-net-utils = { path = "../net-utils", version = "=1.14.20" } -solana-streamer = { path = "../streamer", version = "=1.14.20" } -solana-version = { path = "../version", version = "=1.14.20" } +solana-net-utils = { path = "../net-utils", version = "=1.14.21" } +solana-streamer = { path = "../streamer", version = "=1.14.21" } +solana-version = { path = "../version", version = "=1.14.21" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/bench-tps/Cargo.toml b/bench-tps/Cargo.toml index 0a065537bfbf31..71d680ea15abf3 100644 --- a/bench-tps/Cargo.toml +++ b/bench-tps/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-bench-tps" -version = "1.14.20" +version = "1.14.21" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -15,28 +15,28 @@ log = "0.4.17" rayon = "1.5.3" serde_json = "1.0.81" serde_yaml = "0.8.26" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.20" } -solana-cli-config = { path = "../cli-config", version = "=1.14.20" } -solana-client = { path = "../client", version = "=1.14.20" } -solana-core = { path = "../core", version = "=1.14.20" } -solana-faucet = { path = "../faucet", version = "=1.14.20" } -solana-genesis = { path = "../genesis", version = "=1.14.20" } -solana-gossip = { path = "../gossip", version = "=1.14.20" } -solana-logger = { path = "../logger", version = "=1.14.20" } -solana-measure = { path = "../measure", version = "=1.14.20" } -solana-metrics = { path = "../metrics", version = "=1.14.20" } -solana-net-utils = { path = "../net-utils", version = "=1.14.20" } -solana-rpc = { path = "../rpc", version = "=1.14.20" } -solana-runtime = { path = "../runtime", version = "=1.14.20" } -solana-sdk = { path = "../sdk", version = "=1.14.20" } -solana-streamer = { path = "../streamer", version = "=1.14.20" } -solana-version = { path = "../version", version = "=1.14.20" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.21" } +solana-cli-config = { path = "../cli-config", version = "=1.14.21" } +solana-client = { path = "../client", version = "=1.14.21" } +solana-core = { path = "../core", version = "=1.14.21" } +solana-faucet = { path = "../faucet", version = "=1.14.21" } +solana-genesis = { path = "../genesis", version = "=1.14.21" } +solana-gossip = { path = "../gossip", version = "=1.14.21" } +solana-logger = { path = "../logger", version = "=1.14.21" } +solana-measure = { path = "../measure", version = "=1.14.21" } +solana-metrics = { path = "../metrics", version = "=1.14.21" } +solana-net-utils = { path = "../net-utils", version = "=1.14.21" } +solana-rpc = { path = "../rpc", version = "=1.14.21" } +solana-runtime = { path = "../runtime", version = "=1.14.21" } +solana-sdk = { path = "../sdk", version = "=1.14.21" } +solana-streamer = { path = "../streamer", version = "=1.14.21" } +solana-version = { path = "../version", version = "=1.14.21" } thiserror = "1.0" [dev-dependencies] serial_test = "0.8.0" -solana-local-cluster = { path = "../local-cluster", version = "=1.14.20" } -solana-test-validator = { path = "../test-validator", version = "=1.14.20" } +solana-local-cluster = { path = "../local-cluster", version = "=1.14.21" } +solana-test-validator = { path = "../test-validator", version = "=1.14.21" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/bloom/Cargo.toml b/bloom/Cargo.toml index 33dcff5d5e47f3..91960086454745 100644 --- a/bloom/Cargo.toml +++ b/bloom/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bloom" -version = "1.14.20" +version = "1.14.21" description = "Solana bloom filter" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -17,9 +17,9 @@ rand = "0.7.0" rayon = "1.5.3" serde = { version = "1.0.138", features = ["rc"] } serde_derive = "1.0.103" -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.20" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.20" } -solana-sdk = { path = "../sdk", version = "=1.14.20" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.21" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.21" } +solana-sdk = { path = "../sdk", version = "=1.14.21" } [lib] crate-type = ["lib"] diff --git a/bucket_map/Cargo.toml b/bucket_map/Cargo.toml index a74fa7b1a18898..557109963ba478 100644 --- a/bucket_map/Cargo.toml +++ b/bucket_map/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bucket-map" -version = "1.14.20" +version = "1.14.21" description = "solana-bucket-map" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-bucket-map" @@ -15,14 +15,14 @@ log = { version = "0.4.17" } memmap2 = "0.5.3" modular-bitfield = "0.11.2" rand = "0.7.0" -solana-measure = { path = "../measure", version = "=1.14.20" } -solana-sdk = { path = "../sdk", version = "=1.14.20" } +solana-measure = { path = "../measure", version = "=1.14.21" } +solana-sdk = { path = "../sdk", version = "=1.14.21" } tempfile = "3.4.0" [dev-dependencies] fs_extra = "1.2.0" rayon = "1.5.3" -solana-logger = { path = "../logger", version = "=1.14.20" } +solana-logger = { path = "../logger", version = "=1.14.21" } [lib] crate-type = ["lib"] diff --git a/clap-utils/Cargo.toml b/clap-utils/Cargo.toml index 58b7e5708b790d..926b5bc89d5a38 100644 --- a/clap-utils/Cargo.toml +++ b/clap-utils/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-clap-utils" -version = "1.14.20" +version = "1.14.21" description = "Solana utilities for the clap" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,9 +13,9 @@ edition = "2021" chrono = "0.4" clap = "2.33.0" rpassword = "6.0" -solana-perf = { path = "../perf", version = "=1.14.20" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.20", default-features = false } -solana-sdk = { path = "../sdk", version = "=1.14.20" } +solana-perf = { path = "../perf", version = "=1.14.21" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.21", default-features = false } +solana-sdk = { path = "../sdk", version = "=1.14.21" } thiserror = "1.0.31" tiny-bip39 = "0.8.2" uriparse = "0.6.4" diff --git a/clap-v3-utils/Cargo.toml b/clap-v3-utils/Cargo.toml index 4be40ff6c4b8df..c836571fa54453 100644 --- a/clap-v3-utils/Cargo.toml +++ b/clap-v3-utils/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-clap-v3-utils" -version = "1.14.20" +version = "1.14.21" description = "Solana utilities for the clap v3" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,9 +13,9 @@ edition = "2021" chrono = "0.4" clap = { version = "3.2.23", features = ["cargo"] } rpassword = "6.0" -solana-perf = { path = "../perf", version = "=1.14.20" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.20", default-features = false } -solana-sdk = { path = "../sdk", version = "=1.14.20" } +solana-perf = { path = "../perf", version = "=1.14.21" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.21", default-features = false } +solana-sdk = { path = "../sdk", version = "=1.14.21" } thiserror = "1.0.31" tiny-bip39 = "0.8.2" uriparse = "0.6.4" diff --git a/cli-config/Cargo.toml b/cli-config/Cargo.toml index 1a2affe38c362c..b6455426956eca 100644 --- a/cli-config/Cargo.toml +++ b/cli-config/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-cli-config" description = "Blockchain, Rebuilt for Scale" -version = "1.14.20" +version = "1.14.21" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -15,8 +15,8 @@ lazy_static = "1.4.0" serde = "1.0.138" serde_derive = "1.0.103" serde_yaml = "0.8.26" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.20" } -solana-sdk = { path = "../sdk", version = "=1.14.20" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.21" } +solana-sdk = { path = "../sdk", version = "=1.14.21" } url = "2.2.2" [dev-dependencies] diff --git a/cli-output/Cargo.toml b/cli-output/Cargo.toml index 15e68c54263c30..d931eb96cea93b 100644 --- a/cli-output/Cargo.toml +++ b/cli-output/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-cli-output" description = "Blockchain, Rebuilt for Scale" -version = "1.14.20" +version = "1.14.21" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -21,13 +21,13 @@ pretty-hex = "0.3.0" semver = "1.0.10" serde = "1.0.138" serde_json = "1.0.81" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.20" } -solana-clap-utils = { path = "../clap-utils", version = "=1.14.20" } -solana-cli-config = { path = "../cli-config", version = "=1.14.20" } -solana-client = { path = "../client", version = "=1.14.20" } -solana-sdk = { path = "../sdk", version = "=1.14.20" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.20" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.20" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.21" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.21" } +solana-cli-config = { path = "../cli-config", version = "=1.14.21" } +solana-client = { path = "../client", version = "=1.14.21" } +solana-sdk = { path = "../sdk", version = "=1.14.21" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.21" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.21" } spl-memo = { version = "=3.0.1", features = ["no-entrypoint"] } [dev-dependencies] diff --git a/cli/Cargo.toml b/cli/Cargo.toml index c9cbdf269e18dd..81dafc65b770e6 100644 --- a/cli/Cargo.toml +++ b/cli/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-cli" description = "Blockchain, Rebuilt for Scale" -version = "1.14.20" +version = "1.14.21" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -27,30 +27,30 @@ semver = "1.0.10" serde = "1.0.138" serde_derive = "1.0.103" serde_json = "1.0.81" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.20" } -solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.20" } -solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.20" } -solana-clap-utils = { path = "../clap-utils", version = "=1.14.20" } -solana-cli-config = { path = "../cli-config", version = "=1.14.20" } -solana-cli-output = { path = "../cli-output", version = "=1.14.20" } -solana-client = { path = "../client", version = "=1.14.20" } -solana-config-program = { path = "../programs/config", version = "=1.14.20" } -solana-faucet = { path = "../faucet", version = "=1.14.20" } -solana-logger = { path = "../logger", version = "=1.14.20" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.20" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.20" } -solana-sdk = { path = "../sdk", version = "=1.14.20" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.20" } -solana-version = { path = "../version", version = "=1.14.20" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.20" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.21" } +solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.21" } +solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.21" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.21" } +solana-cli-config = { path = "../cli-config", version = "=1.14.21" } +solana-cli-output = { path = "../cli-output", version = "=1.14.21" } +solana-client = { path = "../client", version = "=1.14.21" } +solana-config-program = { path = "../programs/config", version = "=1.14.21" } +solana-faucet = { path = "../faucet", version = "=1.14.21" } +solana-logger = { path = "../logger", version = "=1.14.21" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.21" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.21" } +solana-sdk = { path = "../sdk", version = "=1.14.21" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.21" } +solana-version = { path = "../version", version = "=1.14.21" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.21" } solana_rbpf = "=0.2.31" spl-memo = { version = "=3.0.1", features = ["no-entrypoint"] } thiserror = "1.0.31" tiny-bip39 = "0.8.2" [dev-dependencies] -solana-streamer = { path = "../streamer", version = "=1.14.20" } -solana-test-validator = { path = "../test-validator", version = "=1.14.20" } +solana-streamer = { path = "../streamer", version = "=1.14.21" } +solana-test-validator = { path = "../test-validator", version = "=1.14.21" } tempfile = "3.4.0" [[bin]] diff --git a/client-test/Cargo.toml b/client-test/Cargo.toml index 20d72aa481417d..af5cc8a39dac69 100644 --- a/client-test/Cargo.toml +++ b/client-test/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-client-test" -version = "1.14.20" +version = "1.14.21" description = "Solana RPC Test" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,25 +14,25 @@ publish = false futures-util = "0.3.21" serde_json = "1.0.81" serial_test = "0.8.0" -solana-client = { path = "../client", version = "=1.14.20" } -solana-ledger = { path = "../ledger", version = "=1.14.20" } -solana-measure = { path = "../measure", version = "=1.14.20" } -solana-merkle-tree = { path = "../merkle-tree", version = "=1.14.20" } -solana-metrics = { path = "../metrics", version = "=1.14.20" } -solana-perf = { path = "../perf", version = "=1.14.20" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.20" } -solana-rpc = { path = "../rpc", version = "=1.14.20" } -solana-runtime = { path = "../runtime", version = "=1.14.20" } -solana-sdk = { path = "../sdk", version = "=1.14.20" } -solana-streamer = { path = "../streamer", version = "=1.14.20" } -solana-test-validator = { path = "../test-validator", version = "=1.14.20" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.20" } -solana-version = { path = "../version", version = "=1.14.20" } +solana-client = { path = "../client", version = "=1.14.21" } +solana-ledger = { path = "../ledger", version = "=1.14.21" } +solana-measure = { path = "../measure", version = "=1.14.21" } +solana-merkle-tree = { path = "../merkle-tree", version = "=1.14.21" } +solana-metrics = { path = "../metrics", version = "=1.14.21" } +solana-perf = { path = "../perf", version = "=1.14.21" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.21" } +solana-rpc = { path = "../rpc", version = "=1.14.21" } +solana-runtime = { path = "../runtime", version = "=1.14.21" } +solana-sdk = { path = "../sdk", version = "=1.14.21" } +solana-streamer = { path = "../streamer", version = "=1.14.21" } +solana-test-validator = { path = "../test-validator", version = "=1.14.21" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.21" } +solana-version = { path = "../version", version = "=1.14.21" } systemstat = "0.1.11" tokio = { version = "~1.14.1", features = ["full"] } [dev-dependencies] -solana-logger = { path = "../logger", version = "=1.14.20" } +solana-logger = { path = "../logger", version = "=1.14.21" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/client/Cargo.toml b/client/Cargo.toml index 1d401a5f83c754..f605f98c2adf60 100644 --- a/client/Cargo.toml +++ b/client/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-client" -version = "1.14.20" +version = "1.14.21" description = "Solana Client" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -38,17 +38,17 @@ semver = "1.0.10" serde = "1.0.138" serde_derive = "1.0.103" serde_json = "1.0.81" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.20" } -solana-clap-utils = { path = "../clap-utils", version = "=1.14.20" } -solana-faucet = { path = "../faucet", version = "=1.14.20" } -solana-measure = { path = "../measure", version = "=1.14.20" } -solana-metrics = { path = "../metrics", version = "=1.14.20" } -solana-net-utils = { path = "../net-utils", version = "=1.14.20" } -solana-sdk = { path = "../sdk", version = "=1.14.20" } -solana-streamer = { path = "../streamer", version = "=1.14.20" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.20" } -solana-version = { path = "../version", version = "=1.14.20" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.20" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.21" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.21" } +solana-faucet = { path = "../faucet", version = "=1.14.21" } +solana-measure = { path = "../measure", version = "=1.14.21" } +solana-metrics = { path = "../metrics", version = "=1.14.21" } +solana-net-utils = { path = "../net-utils", version = "=1.14.21" } +solana-sdk = { path = "../sdk", version = "=1.14.21" } +solana-streamer = { path = "../streamer", version = "=1.14.21" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.21" } +solana-version = { path = "../version", version = "=1.14.21" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.21" } spl-token-2022 = { version = "=0.6.1", features = ["no-entrypoint"] } thiserror = "1.0" tokio = { version = "1", features = ["full"] } @@ -61,8 +61,8 @@ url = "2.2.2" anyhow = "1.0.58" assert_matches = "1.5.0" jsonrpc-http-server = "18.0.0" -solana-logger = { path = "../logger", version = "=1.14.20" } -solana-perf = { path = "../perf", version = "=1.14.20" } +solana-logger = { path = "../logger", version = "=1.14.21" } +solana-perf = { path = "../perf", version = "=1.14.21" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/core/Cargo.toml b/core/Cargo.toml index 93f31ce996a643..063b6e37fae418 100644 --- a/core/Cargo.toml +++ b/core/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "solana-core" description = "Blockchain, Rebuilt for Scale" -version = "1.14.20" +version = "1.14.21" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-core" readme = "../README.md" @@ -36,30 +36,30 @@ rand_chacha = "0.2.2" rayon = "1.5.3" serde = "1.0.138" serde_derive = "1.0.103" -solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.20" } -solana-bloom = { path = "../bloom", version = "=1.14.20" } -solana-client = { path = "../client", version = "=1.14.20" } -solana-entry = { path = "../entry", version = "=1.14.20" } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.20" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.20" } -solana-geyser-plugin-manager = { path = "../geyser-plugin-manager", version = "=1.14.20" } -solana-gossip = { path = "../gossip", version = "=1.14.20" } -solana-ledger = { path = "../ledger", version = "=1.14.20" } -solana-measure = { path = "../measure", version = "=1.14.20" } -solana-metrics = { path = "../metrics", version = "=1.14.20" } -solana-net-utils = { path = "../net-utils", version = "=1.14.20" } -solana-perf = { path = "../perf", version = "=1.14.20" } -solana-poh = { path = "../poh", version = "=1.14.20" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.20" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.20" } -solana-rpc = { path = "../rpc", version = "=1.14.20" } -solana-runtime = { path = "../runtime", version = "=1.14.20" } -solana-sdk = { path = "../sdk", version = "=1.14.20" } -solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.20" } -solana-streamer = { path = "../streamer", version = "=1.14.20" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.20" } -solana-version = { path = "../version", version = "=1.14.20" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.20" } +solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.21" } +solana-bloom = { path = "../bloom", version = "=1.14.21" } +solana-client = { path = "../client", version = "=1.14.21" } +solana-entry = { path = "../entry", version = "=1.14.21" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.21" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.21" } +solana-geyser-plugin-manager = { path = "../geyser-plugin-manager", version = "=1.14.21" } +solana-gossip = { path = "../gossip", version = "=1.14.21" } +solana-ledger = { path = "../ledger", version = "=1.14.21" } +solana-measure = { path = "../measure", version = "=1.14.21" } +solana-metrics = { path = "../metrics", version = "=1.14.21" } +solana-net-utils = { path = "../net-utils", version = "=1.14.21" } +solana-perf = { path = "../perf", version = "=1.14.21" } +solana-poh = { path = "../poh", version = "=1.14.21" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.21" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.21" } +solana-rpc = { path = "../rpc", version = "=1.14.21" } +solana-runtime = { path = "../runtime", version = "=1.14.21" } +solana-sdk = { path = "../sdk", version = "=1.14.21" } +solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.21" } +solana-streamer = { path = "../streamer", version = "=1.14.21" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.21" } +solana-version = { path = "../version", version = "=1.14.21" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.21" } sys-info = "0.9.1" tempfile = "3.4.0" thiserror = "1.0" @@ -71,9 +71,9 @@ matches = "0.1.9" raptorq = "1.7.0" serde_json = "1.0.81" serial_test = "0.8.0" -solana-logger = { path = "../logger", version = "=1.14.20" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.20" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.20" } +solana-logger = { path = "../logger", version = "=1.14.21" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.21" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.21" } static_assertions = "1.1.0" systemstat = "0.1.11" test-case = "2.1.0" diff --git a/dos/Cargo.toml b/dos/Cargo.toml index c3120b23969c9e..4f6abd70c4f5a8 100644 --- a/dos/Cargo.toml +++ b/dos/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-dos" -version = "1.14.20" +version = "1.14.21" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -17,23 +17,23 @@ itertools = "0.10.3" log = "0.4.17" rand = "0.7.0" serde = "1.0.138" -solana-bench-tps = { path = "../bench-tps", version = "=1.14.20" } -solana-client = { path = "../client", version = "=1.14.20" } -solana-core = { path = "../core", version = "=1.14.20" } -solana-faucet = { path = "../faucet", version = "=1.14.20" } -solana-gossip = { path = "../gossip", version = "=1.14.20" } -solana-logger = { path = "../logger", version = "=1.14.20" } -solana-measure = { path = "../measure", version = "=1.14.20" } -solana-net-utils = { path = "../net-utils", version = "=1.14.20" } -solana-perf = { path = "../perf", version = "=1.14.20" } -solana-rpc = { path = "../rpc", version = "=1.14.20" } -solana-sdk = { path = "../sdk", version = "=1.14.20" } -solana-streamer = { path = "../streamer", version = "=1.14.20" } -solana-version = { path = "../version", version = "=1.14.20" } +solana-bench-tps = { path = "../bench-tps", version = "=1.14.21" } +solana-client = { path = "../client", version = "=1.14.21" } +solana-core = { path = "../core", version = "=1.14.21" } +solana-faucet = { path = "../faucet", version = "=1.14.21" } +solana-gossip = { path = "../gossip", version = "=1.14.21" } +solana-logger = { path = "../logger", version = "=1.14.21" } +solana-measure = { path = "../measure", version = "=1.14.21" } +solana-net-utils = { path = "../net-utils", version = "=1.14.21" } +solana-perf = { path = "../perf", version = "=1.14.21" } +solana-rpc = { path = "../rpc", version = "=1.14.21" } +solana-sdk = { path = "../sdk", version = "=1.14.21" } +solana-streamer = { path = "../streamer", version = "=1.14.21" } +solana-version = { path = "../version", version = "=1.14.21" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] [dev-dependencies] serial_test = "0.8.0" -solana-local-cluster = { path = "../local-cluster", version = "=1.14.20" } +solana-local-cluster = { path = "../local-cluster", version = "=1.14.21" } diff --git a/download-utils/Cargo.toml b/download-utils/Cargo.toml index 3bb682704902fe..71e438be752a2b 100644 --- a/download-utils/Cargo.toml +++ b/download-utils/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-download-utils" -version = "1.14.20" +version = "1.14.21" description = "Solana Download Utils" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,8 +14,8 @@ console = "0.15.0" indicatif = "0.16.2" log = "0.4.17" reqwest = { version = "0.11.11", default-features = false, features = ["blocking", "brotli", "deflate", "gzip", "rustls-tls", "json"] } -solana-runtime = { path = "../runtime", version = "=1.14.20" } -solana-sdk = { path = "../sdk", version = "=1.14.20" } +solana-runtime = { path = "../runtime", version = "=1.14.21" } +solana-sdk = { path = "../sdk", version = "=1.14.21" } [lib] crate-type = ["lib"] diff --git a/entry/Cargo.toml b/entry/Cargo.toml index 1cd572e68f08f4..2307c8d7fec5bd 100644 --- a/entry/Cargo.toml +++ b/entry/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-entry" -version = "1.14.20" +version = "1.14.21" description = "Solana Entry" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -19,16 +19,16 @@ log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" serde = "1.0.138" -solana-measure = { path = "../measure", version = "=1.14.20" } -solana-merkle-tree = { path = "../merkle-tree", version = "=1.14.20" } -solana-metrics = { path = "../metrics", version = "=1.14.20" } -solana-perf = { path = "../perf", version = "=1.14.20" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.20" } -solana-sdk = { path = "../sdk", version = "=1.14.20" } +solana-measure = { path = "../measure", version = "=1.14.21" } +solana-merkle-tree = { path = "../merkle-tree", version = "=1.14.21" } +solana-metrics = { path = "../metrics", version = "=1.14.21" } +solana-perf = { path = "../perf", version = "=1.14.21" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.21" } +solana-sdk = { path = "../sdk", version = "=1.14.21" } [dev-dependencies] matches = "0.1.9" -solana-logger = { path = "../logger", version = "=1.14.20" } +solana-logger = { path = "../logger", version = "=1.14.21" } [lib] crate-type = ["lib"] diff --git a/faucet/Cargo.toml b/faucet/Cargo.toml index 800a9dc3d14c3d..098f1e3170339b 100644 --- a/faucet/Cargo.toml +++ b/faucet/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-faucet" -version = "1.14.20" +version = "1.14.21" description = "Solana Faucet" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -17,12 +17,12 @@ crossbeam-channel = "0.5" log = "0.4.17" serde = "1.0.138" serde_derive = "1.0.103" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.20" } -solana-cli-config = { path = "../cli-config", version = "=1.14.20" } -solana-logger = { path = "../logger", version = "=1.14.20" } -solana-metrics = { path = "../metrics", version = "=1.14.20" } -solana-sdk = { path = "../sdk", version = "=1.14.20" } -solana-version = { path = "../version", version = "=1.14.20" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.21" } +solana-cli-config = { path = "../cli-config", version = "=1.14.21" } +solana-logger = { path = "../logger", version = "=1.14.21" } +solana-metrics = { path = "../metrics", version = "=1.14.21" } +solana-sdk = { path = "../sdk", version = "=1.14.21" } +solana-version = { path = "../version", version = "=1.14.21" } spl-memo = { version = "=3.0.1", features = ["no-entrypoint"] } thiserror = "1.0" tokio = { version = "1", features = ["full"] } diff --git a/frozen-abi/Cargo.toml b/frozen-abi/Cargo.toml index 295f7f41a121c0..315d6102be7c12 100644 --- a/frozen-abi/Cargo.toml +++ b/frozen-abi/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-frozen-abi" -version = "1.14.20" +version = "1.14.21" description = "Solana Frozen ABI" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -20,7 +20,7 @@ serde_bytes = "0.11" serde_derive = "1.0" serde_json = "1.0" sha2 = "0.10.2" -solana-frozen-abi-macro = { path = "macro", version = "=1.14.20" } +solana-frozen-abi-macro = { path = "macro", version = "=1.14.21" } thiserror = "1.0" [target.'cfg(not(target_os = "solana"))'.dependencies] @@ -43,7 +43,7 @@ rand_core = { version = "0.6.3", features = ["alloc", "getrandom", "std"] } subtle = { version = "2.4.1", features = ["default", "i128", "std"] } [target.'cfg(not(target_os = "solana"))'.dev-dependencies] -solana-logger = { path = "../logger", version = "=1.14.20" } +solana-logger = { path = "../logger", version = "=1.14.21" } [build-dependencies] rustc_version = "0.4" diff --git a/frozen-abi/macro/Cargo.toml b/frozen-abi/macro/Cargo.toml index 6a81f2d41e0000..2e17cd01212782 100644 --- a/frozen-abi/macro/Cargo.toml +++ b/frozen-abi/macro/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-frozen-abi-macro" -version = "1.14.20" +version = "1.14.21" description = "Solana Frozen ABI Macro" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/genesis-utils/Cargo.toml b/genesis-utils/Cargo.toml index f8ffdf995e90ba..3977114d76c482 100644 --- a/genesis-utils/Cargo.toml +++ b/genesis-utils/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-genesis-utils" -version = "1.14.20" +version = "1.14.21" description = "Solana Genesis Utils" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,9 +10,9 @@ documentation = "https://docs.rs/solana-download-utils" edition = "2021" [dependencies] -solana-download-utils = { path = "../download-utils", version = "=1.14.20" } -solana-runtime = { path = "../runtime", version = "=1.14.20" } -solana-sdk = { path = "../sdk", version = "=1.14.20" } +solana-download-utils = { path = "../download-utils", version = "=1.14.21" } +solana-runtime = { path = "../runtime", version = "=1.14.21" } +solana-sdk = { path = "../sdk", version = "=1.14.21" } [lib] crate-type = ["lib"] diff --git a/genesis/Cargo.toml b/genesis/Cargo.toml index 6172a40f0cf7cd..eb94904ea5db61 100644 --- a/genesis/Cargo.toml +++ b/genesis/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-genesis" description = "Blockchain, Rebuilt for Scale" -version = "1.14.20" +version = "1.14.21" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -15,16 +15,16 @@ clap = "2.33.1" serde = "1.0.138" serde_json = "1.0.81" serde_yaml = "0.8.26" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.20" } -solana-cli-config = { path = "../cli-config", version = "=1.14.20" } -solana-entry = { path = "../entry", version = "=1.14.20" } -solana-ledger = { path = "../ledger", version = "=1.14.20" } -solana-logger = { path = "../logger", version = "=1.14.20" } -solana-runtime = { path = "../runtime", version = "=1.14.20" } -solana-sdk = { path = "../sdk", version = "=1.14.20" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.20" } -solana-version = { path = "../version", version = "=1.14.20" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.20" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.21" } +solana-cli-config = { path = "../cli-config", version = "=1.14.21" } +solana-entry = { path = "../entry", version = "=1.14.21" } +solana-ledger = { path = "../ledger", version = "=1.14.21" } +solana-logger = { path = "../logger", version = "=1.14.21" } +solana-runtime = { path = "../runtime", version = "=1.14.21" } +solana-sdk = { path = "../sdk", version = "=1.14.21" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.21" } +solana-version = { path = "../version", version = "=1.14.21" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.21" } tempfile = "3.4.0" [[bin]] diff --git a/geyser-plugin-interface/Cargo.toml b/geyser-plugin-interface/Cargo.toml index d4ba37b4123117..03b2c33ad2f86d 100644 --- a/geyser-plugin-interface/Cargo.toml +++ b/geyser-plugin-interface/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-geyser-plugin-interface" description = "The Solana Geyser plugin interface." -version = "1.14.20" +version = "1.14.21" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -11,8 +11,8 @@ documentation = "https://docs.rs/solana-geyser-plugin-interface" [dependencies] log = "0.4.17" -solana-sdk = { path = "../sdk", version = "=1.14.20" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.20" } +solana-sdk = { path = "../sdk", version = "=1.14.21" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.21" } thiserror = "1.0.31" [package.metadata.docs.rs] diff --git a/geyser-plugin-manager/Cargo.toml b/geyser-plugin-manager/Cargo.toml index b9cfa8e32dcb88..b71245ea299ac9 100644 --- a/geyser-plugin-manager/Cargo.toml +++ b/geyser-plugin-manager/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-geyser-plugin-manager" description = "The Solana Geyser plugin manager." -version = "1.14.20" +version = "1.14.21" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -16,13 +16,13 @@ json5 = "0.4.1" libloading = "0.7.3" log = "0.4.17" serde_json = "1.0.81" -solana-geyser-plugin-interface = { path = "../geyser-plugin-interface", version = "=1.14.20" } -solana-measure = { path = "../measure", version = "=1.14.20" } -solana-metrics = { path = "../metrics", version = "=1.14.20" } -solana-rpc = { path = "../rpc", version = "=1.14.20" } -solana-runtime = { path = "../runtime", version = "=1.14.20" } -solana-sdk = { path = "../sdk", version = "=1.14.20" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.20" } +solana-geyser-plugin-interface = { path = "../geyser-plugin-interface", version = "=1.14.21" } +solana-measure = { path = "../measure", version = "=1.14.21" } +solana-metrics = { path = "../metrics", version = "=1.14.21" } +solana-rpc = { path = "../rpc", version = "=1.14.21" } +solana-runtime = { path = "../runtime", version = "=1.14.21" } +solana-sdk = { path = "../sdk", version = "=1.14.21" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.21" } thiserror = "1.0.31" [package.metadata.docs.rs] diff --git a/gossip/Cargo.toml b/gossip/Cargo.toml index 316b6f62ec32b6..0111365f7f6668 100644 --- a/gossip/Cargo.toml +++ b/gossip/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-gossip" description = "Blockchain, Rebuilt for Scale" -version = "1.14.20" +version = "1.14.21" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -27,24 +27,24 @@ rayon = "1.5.3" serde = "1.0.138" serde_bytes = "0.11" serde_derive = "1.0.103" -solana-bloom = { path = "../bloom", version = "=1.14.20" } -solana-clap-utils = { path = "../clap-utils", version = "=1.14.20" } -solana-client = { path = "../client", version = "=1.14.20" } -solana-entry = { path = "../entry", version = "=1.14.20" } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.20" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.20" } -solana-ledger = { path = "../ledger", version = "=1.14.20" } -solana-logger = { path = "../logger", version = "=1.14.20" } -solana-measure = { path = "../measure", version = "=1.14.20" } -solana-metrics = { path = "../metrics", version = "=1.14.20" } -solana-net-utils = { path = "../net-utils", version = "=1.14.20" } -solana-perf = { path = "../perf", version = "=1.14.20" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.20" } -solana-runtime = { path = "../runtime", version = "=1.14.20" } -solana-sdk = { path = "../sdk", version = "=1.14.20" } -solana-streamer = { path = "../streamer", version = "=1.14.20" } -solana-version = { path = "../version", version = "=1.14.20" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.20" } +solana-bloom = { path = "../bloom", version = "=1.14.21" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.21" } +solana-client = { path = "../client", version = "=1.14.21" } +solana-entry = { path = "../entry", version = "=1.14.21" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.21" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.21" } +solana-ledger = { path = "../ledger", version = "=1.14.21" } +solana-logger = { path = "../logger", version = "=1.14.21" } +solana-measure = { path = "../measure", version = "=1.14.21" } +solana-metrics = { path = "../metrics", version = "=1.14.21" } +solana-net-utils = { path = "../net-utils", version = "=1.14.21" } +solana-perf = { path = "../perf", version = "=1.14.21" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.21" } +solana-runtime = { path = "../runtime", version = "=1.14.21" } +solana-sdk = { path = "../sdk", version = "=1.14.21" } +solana-streamer = { path = "../streamer", version = "=1.14.21" } +solana-version = { path = "../version", version = "=1.14.21" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.21" } thiserror = "1.0" [dev-dependencies] diff --git a/install/Cargo.toml b/install/Cargo.toml index 3e8f2bbd341732..46f9ead5f77ebe 100644 --- a/install/Cargo.toml +++ b/install/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-install" description = "The solana cluster software installer" -version = "1.14.20" +version = "1.14.21" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -26,12 +26,12 @@ reqwest = { version = "0.11.11", default-features = false, features = ["blocking semver = "1.0.10" serde = { version = "1.0.138", features = ["derive"] } serde_yaml = "0.8.26" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.20" } -solana-client = { path = "../client", version = "=1.14.20" } -solana-config-program = { path = "../programs/config", version = "=1.14.20" } -solana-logger = { path = "../logger", version = "=1.14.20" } -solana-sdk = { path = "../sdk", version = "=1.14.20" } -solana-version = { path = "../version", version = "=1.14.20" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.21" } +solana-client = { path = "../client", version = "=1.14.21" } +solana-config-program = { path = "../programs/config", version = "=1.14.21" } +solana-logger = { path = "../logger", version = "=1.14.21" } +solana-sdk = { path = "../sdk", version = "=1.14.21" } +solana-version = { path = "../version", version = "=1.14.21" } tar = "0.4.38" tempfile = "3.4.0" url = "2.2.2" diff --git a/keygen/Cargo.toml b/keygen/Cargo.toml index f23ab6e8e3072b..d5c122db727999 100644 --- a/keygen/Cargo.toml +++ b/keygen/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-keygen" -version = "1.14.20" +version = "1.14.21" description = "Solana key generation utility" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,11 +14,11 @@ bs58 = "0.4.0" clap = { version = "3.1.5", features = ["cargo"] } dirs-next = "2.0.0" num_cpus = "1.13.1" -solana-clap-v3-utils = { path = "../clap-v3-utils", version = "=1.14.20" } -solana-cli-config = { path = "../cli-config", version = "=1.14.20" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.20" } -solana-sdk = { path = "../sdk", version = "=1.14.20" } -solana-version = { path = "../version", version = "=1.14.20" } +solana-clap-v3-utils = { path = "../clap-v3-utils", version = "=1.14.21" } +solana-cli-config = { path = "../cli-config", version = "=1.14.21" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.21" } +solana-sdk = { path = "../sdk", version = "=1.14.21" } +solana-version = { path = "../version", version = "=1.14.21" } tiny-bip39 = "0.8.2" [[bin]] diff --git a/ledger-tool/Cargo.toml b/ledger-tool/Cargo.toml index ee85e23ed9ecb9..fc3ffc698005cc 100644 --- a/ledger-tool/Cargo.toml +++ b/ledger-tool/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-ledger-tool" description = "Blockchain, Rebuilt for Scale" -version = "1.14.20" +version = "1.14.21" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -22,20 +22,20 @@ log = { version = "0.4.17" } regex = "1" serde = { version = "1.0", features = ["derive"] } serde_json = "1.0.81" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.20" } -solana-cli-output = { path = "../cli-output", version = "=1.14.20" } -solana-core = { path = "../core", version = "=1.14.20" } -solana-entry = { path = "../entry", version = "=1.14.20" } -solana-ledger = { path = "../ledger", version = "=1.14.20" } -solana-logger = { path = "../logger", version = "=1.14.20" } -solana-measure = { path = "../measure", version = "=1.14.20" } -solana-runtime = { path = "../runtime", version = "=1.14.20" } -solana-sdk = { path = "../sdk", version = "=1.14.20" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.20" } -solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.20" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.20" } -solana-version = { path = "../version", version = "=1.14.20" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.20" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.21" } +solana-cli-output = { path = "../cli-output", version = "=1.14.21" } +solana-core = { path = "../core", version = "=1.14.21" } +solana-entry = { path = "../entry", version = "=1.14.21" } +solana-ledger = { path = "../ledger", version = "=1.14.21" } +solana-logger = { path = "../logger", version = "=1.14.21" } +solana-measure = { path = "../measure", version = "=1.14.21" } +solana-runtime = { path = "../runtime", version = "=1.14.21" } +solana-sdk = { path = "../sdk", version = "=1.14.21" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.21" } +solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.21" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.21" } +solana-version = { path = "../version", version = "=1.14.21" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.21" } tokio = { version = "1", features = ["full"] } [target.'cfg(not(target_env = "msvc"))'.dependencies] diff --git a/ledger/Cargo.toml b/ledger/Cargo.toml index 24b048c21b5367..f8d720e6162e1a 100644 --- a/ledger/Cargo.toml +++ b/ledger/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-ledger" -version = "1.14.20" +version = "1.14.21" description = "Solana ledger" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -35,23 +35,23 @@ reed-solomon-erasure = { version = "6.0.0", features = ["simd-accel"] } serde = "1.0.138" serde_bytes = "0.11.6" sha2 = "0.10.2" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.20" } -solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.20" } -solana-entry = { path = "../entry", version = "=1.14.20" } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.20" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.20" } -solana-measure = { path = "../measure", version = "=1.14.20" } -solana-metrics = { path = "../metrics", version = "=1.14.20" } -solana-perf = { path = "../perf", version = "=1.14.20" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.20" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.20" } -solana-runtime = { path = "../runtime", version = "=1.14.20" } -solana-sdk = { path = "../sdk", version = "=1.14.20" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.20" } -solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.20" } -solana-storage-proto = { path = "../storage-proto", version = "=1.14.20" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.20" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.20" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.21" } +solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.21" } +solana-entry = { path = "../entry", version = "=1.14.21" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.21" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.21" } +solana-measure = { path = "../measure", version = "=1.14.21" } +solana-metrics = { path = "../metrics", version = "=1.14.21" } +solana-perf = { path = "../perf", version = "=1.14.21" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.21" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.21" } +solana-runtime = { path = "../runtime", version = "=1.14.21" } +solana-sdk = { path = "../sdk", version = "=1.14.21" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.21" } +solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.21" } +solana-storage-proto = { path = "../storage-proto", version = "=1.14.21" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.21" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.21" } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } spl-token-2022 = { version = "=0.6.1", features = ["no-entrypoint"] } static_assertions = "1.1.0" @@ -71,8 +71,8 @@ features = ["lz4"] [dev-dependencies] bs58 = "0.4.0" matches = "0.1.9" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.20" } -solana-logger = { path = "../logger", version = "=1.14.20" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.21" } +solana-logger = { path = "../logger", version = "=1.14.21" } test-case = "2.1.0" [build-dependencies] diff --git a/local-cluster/Cargo.toml b/local-cluster/Cargo.toml index ee5aa076c36b2c..49b235ca196abf 100644 --- a/local-cluster/Cargo.toml +++ b/local-cluster/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-local-cluster" description = "Blockchain, Rebuilt for Scale" -version = "1.14.20" +version = "1.14.21" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -16,25 +16,25 @@ itertools = "0.10.3" log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" -solana-client = { path = "../client", version = "=1.14.20" } -solana-config-program = { path = "../programs/config", version = "=1.14.20" } -solana-core = { path = "../core", version = "=1.14.20" } -solana-entry = { path = "../entry", version = "=1.14.20" } -solana-gossip = { path = "../gossip", version = "=1.14.20" } -solana-ledger = { path = "../ledger", version = "=1.14.20" } -solana-runtime = { path = "../runtime", version = "=1.14.20" } -solana-sdk = { path = "../sdk", version = "=1.14.20" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.20" } -solana-streamer = { path = "../streamer", version = "=1.14.20" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.20" } +solana-client = { path = "../client", version = "=1.14.21" } +solana-config-program = { path = "../programs/config", version = "=1.14.21" } +solana-core = { path = "../core", version = "=1.14.21" } +solana-entry = { path = "../entry", version = "=1.14.21" } +solana-gossip = { path = "../gossip", version = "=1.14.21" } +solana-ledger = { path = "../ledger", version = "=1.14.21" } +solana-runtime = { path = "../runtime", version = "=1.14.21" } +solana-sdk = { path = "../sdk", version = "=1.14.21" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.21" } +solana-streamer = { path = "../streamer", version = "=1.14.21" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.21" } tempfile = "3.4.0" [dev-dependencies] assert_matches = "1.5.0" gag = "1.0.0" serial_test = "0.8.0" -solana-download-utils = { path = "../download-utils", version = "=1.14.20" } -solana-logger = { path = "../logger", version = "=1.14.20" } +solana-download-utils = { path = "../download-utils", version = "=1.14.21" } +solana-logger = { path = "../logger", version = "=1.14.21" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/log-analyzer/Cargo.toml b/log-analyzer/Cargo.toml index 77624788b944b1..86bc5bea46cb5a 100644 --- a/log-analyzer/Cargo.toml +++ b/log-analyzer/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-log-analyzer" description = "The solana cluster network analysis tool" -version = "1.14.20" +version = "1.14.21" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,8 +14,8 @@ byte-unit = "4.0.14" clap = { version = "3.1.5", features = ["cargo"] } serde = "1.0.138" serde_json = "1.0.81" -solana-logger = { path = "../logger", version = "=1.14.20" } -solana-version = { path = "../version", version = "=1.14.20" } +solana-logger = { path = "../logger", version = "=1.14.21" } +solana-version = { path = "../version", version = "=1.14.21" } [[bin]] name = "solana-log-analyzer" diff --git a/logger/Cargo.toml b/logger/Cargo.toml index 85423e223f1672..5d083d8ac8d0af 100644 --- a/logger/Cargo.toml +++ b/logger/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-logger" -version = "1.14.20" +version = "1.14.21" description = "Solana Logger" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/measure/Cargo.toml b/measure/Cargo.toml index c9410bd8f17e2d..965175d220e073 100644 --- a/measure/Cargo.toml +++ b/measure/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "solana-measure" description = "Blockchain, Rebuilt for Scale" -version = "1.14.20" +version = "1.14.21" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-measure" readme = "../README.md" @@ -12,7 +12,7 @@ edition = "2021" [dependencies] log = "0.4.17" -solana-sdk = { path = "../sdk", version = "=1.14.20" } +solana-sdk = { path = "../sdk", version = "=1.14.21" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/merkle-root-bench/Cargo.toml b/merkle-root-bench/Cargo.toml index 7cbaae8e679671..0054f6daf18e32 100644 --- a/merkle-root-bench/Cargo.toml +++ b/merkle-root-bench/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-merkle-root-bench" -version = "1.14.20" +version = "1.14.21" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -11,11 +11,11 @@ publish = false [dependencies] clap = "2.33.1" log = "0.4.17" -solana-logger = { path = "../logger", version = "=1.14.20" } -solana-measure = { path = "../measure", version = "=1.14.20" } -solana-runtime = { path = "../runtime", version = "=1.14.20" } -solana-sdk = { path = "../sdk", version = "=1.14.20" } -solana-version = { path = "../version", version = "=1.14.20" } +solana-logger = { path = "../logger", version = "=1.14.21" } +solana-measure = { path = "../measure", version = "=1.14.21" } +solana-runtime = { path = "../runtime", version = "=1.14.21" } +solana-sdk = { path = "../sdk", version = "=1.14.21" } +solana-version = { path = "../version", version = "=1.14.21" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/merkle-tree/Cargo.toml b/merkle-tree/Cargo.toml index e7a8a737247b56..d9f3dab00e451a 100644 --- a/merkle-tree/Cargo.toml +++ b/merkle-tree/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-merkle-tree" -version = "1.14.20" +version = "1.14.21" description = "Solana Merkle Tree" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -11,7 +11,7 @@ edition = "2021" [dependencies] fast-math = "0.1" -solana-program = { path = "../sdk/program", version = "=1.14.20" } +solana-program = { path = "../sdk/program", version = "=1.14.21" } # This can go once the BPF toolchain target Rust 1.42.0+ [target.bpfel-unknown-unknown.dependencies] diff --git a/metrics/Cargo.toml b/metrics/Cargo.toml index 5bc5f1f0a346f5..ebe3a83d52b409 100644 --- a/metrics/Cargo.toml +++ b/metrics/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-metrics" -version = "1.14.20" +version = "1.14.21" description = "Solana Metrics" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -15,7 +15,7 @@ gethostname = "0.2.3" lazy_static = "1.4.0" log = "0.4.17" reqwest = { version = "0.11.11", default-features = false, features = ["blocking", "brotli", "deflate", "gzip", "rustls-tls", "json"] } -solana-sdk = { path = "../sdk", version = "=1.14.20" } +solana-sdk = { path = "../sdk", version = "=1.14.21" } [dev-dependencies] env_logger = "0.9.0" diff --git a/net-shaper/Cargo.toml b/net-shaper/Cargo.toml index 70153d7907927c..922787742373bf 100644 --- a/net-shaper/Cargo.toml +++ b/net-shaper/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-net-shaper" description = "The solana cluster network shaping tool" -version = "1.14.20" +version = "1.14.21" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,7 +14,7 @@ clap = { version = "3.1.5", features = ["cargo"] } rand = "0.7.0" serde = { version = "1.0.138", features = ["derive"] } serde_json = "1.0.81" -solana-logger = { path = "../logger", version = "=1.14.20" } +solana-logger = { path = "../logger", version = "=1.14.21" } [[bin]] name = "solana-net-shaper" diff --git a/net-utils/Cargo.toml b/net-utils/Cargo.toml index 8cb253297be966..c225f717b50364 100644 --- a/net-utils/Cargo.toml +++ b/net-utils/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-net-utils" -version = "1.14.20" +version = "1.14.21" description = "Solana Network Utilities" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -19,9 +19,9 @@ rand = "0.7.0" serde = "1.0.138" serde_derive = "1.0.103" socket2 = "0.4.4" -solana-logger = { path = "../logger", version = "=1.14.20" } -solana-sdk = { path = "../sdk", version = "=1.14.20" } -solana-version = { path = "../version", version = "=1.14.20" } +solana-logger = { path = "../logger", version = "=1.14.21" } +solana-sdk = { path = "../sdk", version = "=1.14.21" } +solana-version = { path = "../version", version = "=1.14.21" } tokio = { version = "1", features = ["full"] } url = "2.2.2" diff --git a/notifier/Cargo.toml b/notifier/Cargo.toml index 0242079be43484..8933bc470eeb4b 100644 --- a/notifier/Cargo.toml +++ b/notifier/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-notifier" -version = "1.14.20" +version = "1.14.21" description = "Solana Notifier" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/perf/Cargo.toml b/perf/Cargo.toml index 58327e419bcf0c..66a194fbf732fd 100644 --- a/perf/Cargo.toml +++ b/perf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-perf" -version = "1.14.20" +version = "1.14.21" description = "Solana Performance APIs" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -22,10 +22,10 @@ log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" serde = "1.0.138" -solana-metrics = { path = "../metrics", version = "=1.14.20" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.20" } -solana-sdk = { path = "../sdk", version = "=1.14.20" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.20" } +solana-metrics = { path = "../metrics", version = "=1.14.21" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.21" } +solana-sdk = { path = "../sdk", version = "=1.14.21" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.21" } [target."cfg(target_os = \"linux\")".dependencies] caps = "0.5.3" @@ -38,7 +38,7 @@ name = "solana_perf" [dev-dependencies] matches = "0.1.9" rand_chacha = "0.2.2" -solana-logger = { path = "../logger", version = "=1.14.20" } +solana-logger = { path = "../logger", version = "=1.14.21" } test-case = "2.1.0" [[bench]] diff --git a/poh-bench/Cargo.toml b/poh-bench/Cargo.toml index bba520a680eb99..4a9c5c359aec8f 100644 --- a/poh-bench/Cargo.toml +++ b/poh-bench/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-poh-bench" -version = "1.14.20" +version = "1.14.21" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,12 +14,12 @@ clap = { version = "3.1.5", features = ["cargo"] } log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" -solana-entry = { path = "../entry", version = "=1.14.20" } -solana-logger = { path = "../logger", version = "=1.14.20" } -solana-measure = { path = "../measure", version = "=1.14.20" } -solana-perf = { path = "../perf", version = "=1.14.20" } -solana-sdk = { path = "../sdk", version = "=1.14.20" } -solana-version = { path = "../version", version = "=1.14.20" } +solana-entry = { path = "../entry", version = "=1.14.21" } +solana-logger = { path = "../logger", version = "=1.14.21" } +solana-measure = { path = "../measure", version = "=1.14.21" } +solana-perf = { path = "../perf", version = "=1.14.21" } +solana-sdk = { path = "../sdk", version = "=1.14.21" } +solana-version = { path = "../version", version = "=1.14.21" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/poh/Cargo.toml b/poh/Cargo.toml index c97e0e86c23dd1..305a504361fa41 100644 --- a/poh/Cargo.toml +++ b/poh/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-poh" -version = "1.14.20" +version = "1.14.21" description = "Solana PoH" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,21 +13,21 @@ edition = "2021" core_affinity = "0.5.10" crossbeam-channel = "0.5" log = "0.4.17" -solana-entry = { path = "../entry", version = "=1.14.20" } -solana-ledger = { path = "../ledger", version = "=1.14.20" } -solana-measure = { path = "../measure", version = "=1.14.20" } -solana-metrics = { path = "../metrics", version = "=1.14.20" } -solana-runtime = { path = "../runtime", version = "=1.14.20" } -solana-sdk = { path = "../sdk", version = "=1.14.20" } -solana-sys-tuner = { path = "../sys-tuner", version = "=1.14.20" } +solana-entry = { path = "../entry", version = "=1.14.21" } +solana-ledger = { path = "../ledger", version = "=1.14.21" } +solana-measure = { path = "../measure", version = "=1.14.21" } +solana-metrics = { path = "../metrics", version = "=1.14.21" } +solana-runtime = { path = "../runtime", version = "=1.14.21" } +solana-sdk = { path = "../sdk", version = "=1.14.21" } +solana-sys-tuner = { path = "../sys-tuner", version = "=1.14.21" } thiserror = "1.0" [dev-dependencies] bincode = "1.3.3" matches = "0.1.9" rand = "0.7.0" -solana-logger = { path = "../logger", version = "=1.14.20" } -solana-perf = { path = "../perf", version = "=1.14.20" } +solana-logger = { path = "../logger", version = "=1.14.21" } +solana-perf = { path = "../perf", version = "=1.14.21" } [lib] crate-type = ["lib"] diff --git a/program-runtime/Cargo.toml b/program-runtime/Cargo.toml index 8d8f40037641cc..b2c9934aa29c92 100644 --- a/program-runtime/Cargo.toml +++ b/program-runtime/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-program-runtime" -version = "1.14.20" +version = "1.14.21" description = "Solana program runtime" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -21,16 +21,16 @@ num-derive = { version = "0.3" } num-traits = { version = "0.2" } rand = "0.7.0" serde = { version = "1.0.129", features = ["derive", "rc"] } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.20" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.20" } -solana-measure = { path = "../measure", version = "=1.14.20" } -solana-metrics = { path = "../metrics", version = "=1.14.20" } -solana-sdk = { path = "../sdk", version = "=1.14.20" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.21" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.21" } +solana-measure = { path = "../measure", version = "=1.14.21" } +solana-metrics = { path = "../metrics", version = "=1.14.21" } +solana-sdk = { path = "../sdk", version = "=1.14.21" } thiserror = "1.0" enum-iterator = "0.8.1" [dev-dependencies] -solana-logger = { path = "../logger", version = "=1.14.20" } +solana-logger = { path = "../logger", version = "=1.14.21" } [lib] crate-type = ["lib"] diff --git a/program-test/Cargo.toml b/program-test/Cargo.toml index 21056de54d0cdf..72d9bb372d7c0f 100644 --- a/program-test/Cargo.toml +++ b/program-test/Cargo.toml @@ -5,7 +5,7 @@ edition = "2021" license = "Apache-2.0" name = "solana-program-test" repository = "https://github.com/solana-labs/solana" -version = "1.14.20" +version = "1.14.21" [dependencies] assert_matches = "1.5.0" @@ -15,16 +15,16 @@ bincode = "1.3.3" chrono-humanize = "0.2.1" log = "0.4.17" serde = "1.0.138" -solana-banks-client = { path = "../banks-client", version = "=1.14.20" } -solana-banks-server = { path = "../banks-server", version = "=1.14.20" } -solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.20" } -solana-logger = { path = "../logger", version = "=1.14.20" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.20" } -solana-runtime = { path = "../runtime", version = "=1.14.20" } -solana-sdk = { path = "../sdk", version = "=1.14.20" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.20" } +solana-banks-client = { path = "../banks-client", version = "=1.14.21" } +solana-banks-server = { path = "../banks-server", version = "=1.14.21" } +solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.21" } +solana-logger = { path = "../logger", version = "=1.14.21" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.21" } +solana-runtime = { path = "../runtime", version = "=1.14.21" } +solana-sdk = { path = "../sdk", version = "=1.14.21" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.21" } thiserror = "1.0" tokio = { version = "1", features = ["full"] } [dev-dependencies] -solana-stake-program = { path = "../programs/stake", version = "=1.14.20" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.21" } diff --git a/programs/address-lookup-table-tests/Cargo.toml b/programs/address-lookup-table-tests/Cargo.toml index b814b6eaf985a5..6b5ca349b1a776 100644 --- a/programs/address-lookup-table-tests/Cargo.toml +++ b/programs/address-lookup-table-tests/Cargo.toml @@ -3,7 +3,7 @@ [package] name = "solana-address-lookup-table-program-tests" -version = "1.14.20" +version = "1.14.21" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" @@ -14,9 +14,9 @@ publish = false [dev-dependencies] assert_matches = "1.5.0" bincode = "1.3.3" -solana-address-lookup-table-program = { path = "../address-lookup-table", version = "=1.14.20" } -solana-program-test = { path = "../../program-test", version = "=1.14.20" } -solana-sdk = { path = "../../sdk", version = "=1.14.20" } +solana-address-lookup-table-program = { path = "../address-lookup-table", version = "=1.14.21" } +solana-program-test = { path = "../../program-test", version = "=1.14.21" } +solana-sdk = { path = "../../sdk", version = "=1.14.21" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/address-lookup-table/Cargo.toml b/programs/address-lookup-table/Cargo.toml index 0477aac5dbcf02..960da81af18178 100644 --- a/programs/address-lookup-table/Cargo.toml +++ b/programs/address-lookup-table/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-address-lookup-table-program" -version = "1.14.20" +version = "1.14.21" description = "Solana address lookup table program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -16,14 +16,14 @@ log = "0.4.17" num-derive = "0.3" num-traits = "0.2" serde = { version = "1.0.138", features = ["derive"] } -solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.20" } -solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.20" } -solana-program = { path = "../../sdk/program", version = "=1.14.20" } +solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.21" } +solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.21" } +solana-program = { path = "../../sdk/program", version = "=1.14.21" } thiserror = "1.0" [target.'cfg(not(target_os = "solana"))'.dependencies] -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.20" } -solana-sdk = { path = "../../sdk", version = "=1.14.20" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.21" } +solana-sdk = { path = "../../sdk", version = "=1.14.21" } [build-dependencies] rustc_version = "0.4" diff --git a/programs/bpf-loader-tests/Cargo.toml b/programs/bpf-loader-tests/Cargo.toml index 73fe0464a4a2bc..1420153b8e9d9c 100644 --- a/programs/bpf-loader-tests/Cargo.toml +++ b/programs/bpf-loader-tests/Cargo.toml @@ -3,7 +3,7 @@ [package] name = "solana-bpf-loader-program-tests" -version = "1.14.20" +version = "1.14.21" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" @@ -14,9 +14,9 @@ publish = false [dev-dependencies] assert_matches = "1.5.0" bincode = "1.3.3" -solana-bpf-loader-program = { path = "../bpf_loader", version = "=1.14.20" } -solana-program-test = { path = "../../program-test", version = "=1.14.20" } -solana-sdk = { path = "../../sdk", version = "=1.14.20" } +solana-bpf-loader-program = { path = "../bpf_loader", version = "=1.14.21" } +solana-program-test = { path = "../../program-test", version = "=1.14.21" } +solana-sdk = { path = "../../sdk", version = "=1.14.21" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/bpf/Cargo.lock b/programs/bpf/Cargo.lock index 7df1b04da734c4..b350a2bc03d42d 100644 --- a/programs/bpf/Cargo.lock +++ b/programs/bpf/Cargo.lock @@ -4101,7 +4101,7 @@ dependencies = [ [[package]] name = "solana-account-decoder" -version = "1.14.20" +version = "1.14.21" dependencies = [ "Inflector", "base64 0.13.0", @@ -4114,7 +4114,7 @@ dependencies = [ "serde_json", "solana-address-lookup-table-program", "solana-config-program", - "solana-sdk 1.14.20", + "solana-sdk 1.14.21", "solana-vote-program", "spl-token", "spl-token-2022", @@ -4124,7 +4124,7 @@ dependencies = [ [[package]] name = "solana-address-lookup-table-program" -version = "1.14.20" +version = "1.14.21" dependencies = [ "bincode", "bytemuck", @@ -4133,23 +4133,23 @@ dependencies = [ "num-traits", "rustc_version", "serde", - "solana-frozen-abi 1.14.20", - "solana-frozen-abi-macro 1.14.20", - "solana-program 1.14.20", + "solana-frozen-abi 1.14.21", + "solana-frozen-abi-macro 1.14.21", + "solana-program 1.14.21", "solana-program-runtime", - "solana-sdk 1.14.20", + "solana-sdk 1.14.21", "thiserror", ] [[package]] name = "solana-banks-client" -version = "1.14.20" +version = "1.14.21" dependencies = [ "borsh", "futures 0.3.21", "solana-banks-interface", - "solana-program 1.14.20", - "solana-sdk 1.14.20", + "solana-program 1.14.21", + "solana-sdk 1.14.21", "tarpc", "thiserror", "tokio", @@ -4158,16 +4158,16 @@ dependencies = [ [[package]] name = "solana-banks-interface" -version = "1.14.20" +version = "1.14.21" dependencies = [ "serde", - "solana-sdk 1.14.20", + "solana-sdk 1.14.21", "tarpc", ] [[package]] name = "solana-banks-server" -version = "1.14.20" +version = "1.14.21" dependencies = [ "bincode", "crossbeam-channel", @@ -4175,7 +4175,7 @@ dependencies = [ "solana-banks-interface", "solana-client", "solana-runtime", - "solana-sdk 1.14.20", + "solana-sdk 1.14.21", "solana-send-transaction-service", "tarpc", "tokio", @@ -4185,7 +4185,7 @@ dependencies = [ [[package]] name = "solana-bloom" -version = "1.14.20" +version = "1.14.21" dependencies = [ "bv", "fnv", @@ -4195,14 +4195,14 @@ dependencies = [ "rustc_version", "serde", "serde_derive", - "solana-frozen-abi 1.14.20", - "solana-frozen-abi-macro 1.14.20", - "solana-sdk 1.14.20", + "solana-frozen-abi 1.14.21", + "solana-frozen-abi-macro 1.14.21", + "solana-sdk 1.14.21", ] [[package]] name = "solana-bpf-loader-program" -version = "1.14.20" +version = "1.14.21" dependencies = [ "bincode", "byteorder 1.4.3", @@ -4211,15 +4211,15 @@ dependencies = [ "solana-measure", "solana-metrics", "solana-program-runtime", - "solana-sdk 1.14.20", - "solana-zk-token-sdk 1.14.20", + "solana-sdk 1.14.21", + "solana-zk-token-sdk 1.14.21", "solana_rbpf", "thiserror", ] [[package]] name = "solana-bpf-programs" -version = "1.14.20" +version = "1.14.21" dependencies = [ "bincode", "byteorder 1.4.3", @@ -4235,11 +4235,11 @@ dependencies = [ "solana-bpf-rust-realloc-invoke", "solana-cli-output", "solana-ledger", - "solana-logger 1.14.20", + "solana-logger 1.14.21", "solana-measure", "solana-program-runtime", "solana-runtime", - "solana-sdk 1.14.20", + "solana-sdk 1.14.21", "solana-transaction-status", "solana_rbpf", "walkdir", @@ -4247,385 +4247,385 @@ dependencies = [ [[package]] name = "solana-bpf-rust-128bit" -version = "1.14.20" +version = "1.14.21" dependencies = [ "solana-bpf-rust-128bit-dep", - "solana-program 1.14.20", + "solana-program 1.14.21", ] [[package]] name = "solana-bpf-rust-128bit-dep" -version = "1.14.20" +version = "1.14.21" dependencies = [ - "solana-program 1.14.20", + "solana-program 1.14.21", ] [[package]] name = "solana-bpf-rust-alloc" -version = "1.14.20" +version = "1.14.21" dependencies = [ - "solana-program 1.14.20", + "solana-program 1.14.21", ] [[package]] name = "solana-bpf-rust-call-depth" -version = "1.14.20" +version = "1.14.21" dependencies = [ - "solana-program 1.14.20", + "solana-program 1.14.21", ] [[package]] name = "solana-bpf-rust-caller-access" -version = "1.14.20" +version = "1.14.21" dependencies = [ - "solana-program 1.14.20", + "solana-program 1.14.21", ] [[package]] name = "solana-bpf-rust-curve25519" -version = "1.14.20" +version = "1.14.21" dependencies = [ - "solana-program 1.14.20", - "solana-zk-token-sdk 1.14.20", + "solana-program 1.14.21", + "solana-zk-token-sdk 1.14.21", ] [[package]] name = "solana-bpf-rust-custom-heap" -version = "1.14.20" +version = "1.14.21" dependencies = [ - "solana-program 1.14.20", + "solana-program 1.14.21", ] [[package]] name = "solana-bpf-rust-dep-crate" -version = "1.14.20" +version = "1.14.21" dependencies = [ "byteorder 1.4.3", "solana-address-lookup-table-program", - "solana-program 1.14.20", + "solana-program 1.14.21", ] [[package]] name = "solana-bpf-rust-deprecated-loader" -version = "1.14.20" +version = "1.14.21" dependencies = [ - "solana-program 1.14.20", + "solana-program 1.14.21", ] [[package]] name = "solana-bpf-rust-dup-accounts" -version = "1.14.20" +version = "1.14.21" dependencies = [ - "solana-program 1.14.20", + "solana-program 1.14.21", ] [[package]] name = "solana-bpf-rust-error-handling" -version = "1.14.20" +version = "1.14.21" dependencies = [ "num-derive", "num-traits", - "solana-program 1.14.20", + "solana-program 1.14.21", "thiserror", ] [[package]] name = "solana-bpf-rust-external-spend" -version = "1.14.20" +version = "1.14.21" dependencies = [ - "solana-program 1.14.20", + "solana-program 1.14.21", ] [[package]] name = "solana-bpf-rust-finalize" -version = "1.14.20" +version = "1.14.21" dependencies = [ - "solana-program 1.14.20", + "solana-program 1.14.21", ] [[package]] name = "solana-bpf-rust-get-minimum-delegation" -version = "1.14.20" +version = "1.14.21" dependencies = [ - "solana-program 1.14.20", + "solana-program 1.14.21", ] [[package]] name = "solana-bpf-rust-inner_instruction_alignment_check" -version = "1.14.20" +version = "1.14.21" dependencies = [ - "solana-program 1.14.20", + "solana-program 1.14.21", ] [[package]] name = "solana-bpf-rust-instruction-introspection" -version = "1.14.20" +version = "1.14.21" dependencies = [ - "solana-program 1.14.20", + "solana-program 1.14.21", ] [[package]] name = "solana-bpf-rust-invoke" -version = "1.14.20" +version = "1.14.21" dependencies = [ "solana-bpf-rust-invoked", - "solana-program 1.14.20", + "solana-program 1.14.21", ] [[package]] name = "solana-bpf-rust-invoke-and-error" -version = "1.14.20" +version = "1.14.21" dependencies = [ - "solana-program 1.14.20", + "solana-program 1.14.21", ] [[package]] name = "solana-bpf-rust-invoke-and-ok" -version = "1.14.20" +version = "1.14.21" dependencies = [ - "solana-program 1.14.20", + "solana-program 1.14.21", ] [[package]] name = "solana-bpf-rust-invoke-and-return" -version = "1.14.20" +version = "1.14.21" dependencies = [ - "solana-program 1.14.20", + "solana-program 1.14.21", ] [[package]] name = "solana-bpf-rust-invoked" -version = "1.14.20" +version = "1.14.21" dependencies = [ - "solana-program 1.14.20", + "solana-program 1.14.21", ] [[package]] name = "solana-bpf-rust-iter" -version = "1.14.20" +version = "1.14.21" dependencies = [ - "solana-program 1.14.20", + "solana-program 1.14.21", ] [[package]] name = "solana-bpf-rust-log-data" -version = "1.14.20" +version = "1.14.21" dependencies = [ - "solana-program 1.14.20", + "solana-program 1.14.21", ] [[package]] name = "solana-bpf-rust-many-args" -version = "1.14.20" +version = "1.14.21" dependencies = [ "solana-bpf-rust-many-args-dep", - "solana-program 1.14.20", + "solana-program 1.14.21", ] [[package]] name = "solana-bpf-rust-many-args-dep" -version = "1.14.20" +version = "1.14.21" dependencies = [ - "solana-program 1.14.20", + "solana-program 1.14.21", ] [[package]] name = "solana-bpf-rust-mem" -version = "1.14.20" +version = "1.14.21" dependencies = [ - "solana-program 1.14.20", + "solana-program 1.14.21", "solana-program-runtime", "solana-program-test", - "solana-sdk 1.14.20", + "solana-sdk 1.14.21", ] [[package]] name = "solana-bpf-rust-membuiltins" -version = "1.14.20" +version = "1.14.21" dependencies = [ "solana-bpf-rust-mem", - "solana-program 1.14.20", + "solana-program 1.14.21", ] [[package]] name = "solana-bpf-rust-noop" -version = "1.14.20" +version = "1.14.21" dependencies = [ - "solana-program 1.14.20", + "solana-program 1.14.21", ] [[package]] name = "solana-bpf-rust-panic" -version = "1.14.20" +version = "1.14.21" dependencies = [ - "solana-program 1.14.20", + "solana-program 1.14.21", ] [[package]] name = "solana-bpf-rust-param-passing" -version = "1.14.20" +version = "1.14.21" dependencies = [ "solana-bpf-rust-param-passing-dep", - "solana-program 1.14.20", + "solana-program 1.14.21", ] [[package]] name = "solana-bpf-rust-param-passing-dep" -version = "1.14.20" +version = "1.14.21" dependencies = [ - "solana-program 1.14.20", + "solana-program 1.14.21", ] [[package]] name = "solana-bpf-rust-rand" -version = "1.14.20" +version = "1.14.21" dependencies = [ "getrandom 0.1.14", "rand 0.7.3", - "solana-program 1.14.20", + "solana-program 1.14.21", ] [[package]] name = "solana-bpf-rust-realloc" -version = "1.14.20" +version = "1.14.21" dependencies = [ - "solana-program 1.14.20", + "solana-program 1.14.21", ] [[package]] name = "solana-bpf-rust-realloc-invoke" -version = "1.14.20" +version = "1.14.21" dependencies = [ "solana-bpf-rust-realloc", - "solana-program 1.14.20", + "solana-program 1.14.21", ] [[package]] name = "solana-bpf-rust-ro-account_modify" -version = "1.14.20" +version = "1.14.21" dependencies = [ - "solana-program 1.14.20", + "solana-program 1.14.21", ] [[package]] name = "solana-bpf-rust-ro-modify" -version = "1.14.20" +version = "1.14.21" dependencies = [ - "solana-program 1.14.20", + "solana-program 1.14.21", ] [[package]] name = "solana-bpf-rust-sanity" -version = "1.14.20" +version = "1.14.21" dependencies = [ - "solana-program 1.14.20", + "solana-program 1.14.21", "solana-program-runtime", "solana-program-test", - "solana-sdk 1.14.20", + "solana-sdk 1.14.21", ] [[package]] name = "solana-bpf-rust-secp256k1-recover" -version = "1.14.20" +version = "1.14.21" dependencies = [ "libsecp256k1 0.7.0", - "solana-program 1.14.20", + "solana-program 1.14.21", ] [[package]] name = "solana-bpf-rust-sha" -version = "1.14.20" +version = "1.14.21" dependencies = [ "blake3", - "solana-program 1.14.20", + "solana-program 1.14.21", ] [[package]] name = "solana-bpf-rust-sibling-instructions" -version = "1.14.20" +version = "1.14.21" dependencies = [ - "solana-program 1.14.20", + "solana-program 1.14.21", ] [[package]] name = "solana-bpf-rust-sibling_inner-instructions" -version = "1.14.20" +version = "1.14.21" dependencies = [ - "solana-program 1.14.20", + "solana-program 1.14.21", ] [[package]] name = "solana-bpf-rust-simulation" -version = "1.14.20" +version = "1.14.21" dependencies = [ - "solana-logger 1.14.20", - "solana-program 1.14.20", + "solana-logger 1.14.21", + "solana-program 1.14.21", "solana-program-test", - "solana-sdk 1.14.20", + "solana-sdk 1.14.21", "solana-validator", ] [[package]] name = "solana-bpf-rust-spoof1" -version = "1.14.20" +version = "1.14.21" dependencies = [ - "solana-program 1.14.20", + "solana-program 1.14.21", ] [[package]] name = "solana-bpf-rust-spoof1-system" -version = "1.14.20" +version = "1.14.21" dependencies = [ - "solana-program 1.14.20", + "solana-program 1.14.21", ] [[package]] name = "solana-bpf-rust-sysvar" -version = "1.14.20" +version = "1.14.21" dependencies = [ - "solana-program 1.14.20", + "solana-program 1.14.21", "solana-program-runtime", "solana-program-test", - "solana-sdk 1.14.20", + "solana-sdk 1.14.21", ] [[package]] name = "solana-bpf-rust-upgradeable" -version = "1.14.20" +version = "1.14.21" dependencies = [ - "solana-program 1.14.20", + "solana-program 1.14.21", ] [[package]] name = "solana-bpf-rust-upgraded" -version = "1.14.20" +version = "1.14.21" dependencies = [ - "solana-program 1.14.20", + "solana-program 1.14.21", ] [[package]] name = "solana-bucket-map" -version = "1.14.20" +version = "1.14.21" dependencies = [ "log", "memmap2", "modular-bitfield", "rand 0.7.3", "solana-measure", - "solana-sdk 1.14.20", + "solana-sdk 1.14.21", "tempfile", ] [[package]] name = "solana-clap-utils" -version = "1.14.20" +version = "1.14.21" dependencies = [ "chrono", "clap 2.33.3", "rpassword", "solana-perf", "solana-remote-wallet", - "solana-sdk 1.14.20", + "solana-sdk 1.14.21", "thiserror", "tiny-bip39", "uriparse", @@ -4634,7 +4634,7 @@ dependencies = [ [[package]] name = "solana-cli-config" -version = "1.14.20" +version = "1.14.21" dependencies = [ "dirs-next", "lazy_static", @@ -4642,13 +4642,13 @@ dependencies = [ "serde_derive", "serde_yaml", "solana-clap-utils", - "solana-sdk 1.14.20", + "solana-sdk 1.14.21", "url 2.2.2", ] [[package]] name = "solana-cli-output" -version = "1.14.20" +version = "1.14.21" dependencies = [ "Inflector", "base64 0.13.0", @@ -4665,7 +4665,7 @@ dependencies = [ "solana-clap-utils", "solana-cli-config", "solana-client", - "solana-sdk 1.14.20", + "solana-sdk 1.14.21", "solana-transaction-status", "solana-vote-program", "spl-memo", @@ -4673,7 +4673,7 @@ dependencies = [ [[package]] name = "solana-client" -version = "1.14.20" +version = "1.14.21" dependencies = [ "async-mutex", "async-trait", @@ -4709,7 +4709,7 @@ dependencies = [ "solana-measure", "solana-metrics", "solana-net-utils", - "solana-sdk 1.14.20", + "solana-sdk 1.14.21", "solana-streamer", "solana-transaction-status", "solana-version", @@ -4725,27 +4725,27 @@ dependencies = [ [[package]] name = "solana-compute-budget-program" -version = "1.14.20" +version = "1.14.21" dependencies = [ "solana-program-runtime", - "solana-sdk 1.14.20", + "solana-sdk 1.14.21", ] [[package]] name = "solana-config-program" -version = "1.14.20" +version = "1.14.21" dependencies = [ "bincode", "chrono", "serde", "serde_derive", "solana-program-runtime", - "solana-sdk 1.14.20", + "solana-sdk 1.14.21", ] [[package]] name = "solana-core" -version = "1.14.20" +version = "1.14.21" dependencies = [ "ahash", "base64 0.13.0", @@ -4774,8 +4774,8 @@ dependencies = [ "solana-bloom", "solana-client", "solana-entry", - "solana-frozen-abi 1.14.20", - "solana-frozen-abi-macro 1.14.20", + "solana-frozen-abi 1.14.21", + "solana-frozen-abi-macro 1.14.21", "solana-geyser-plugin-manager", "solana-gossip", "solana-ledger", @@ -4788,7 +4788,7 @@ dependencies = [ "solana-rayon-threadlimit", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.20", + "solana-sdk 1.14.21", "solana-send-transaction-service", "solana-streamer", "solana-transaction-status", @@ -4804,19 +4804,19 @@ dependencies = [ [[package]] name = "solana-download-utils" -version = "1.14.20" +version = "1.14.21" dependencies = [ "console", "indicatif", "log", "reqwest", "solana-runtime", - "solana-sdk 1.14.20", + "solana-sdk 1.14.21", ] [[package]] name = "solana-entry" -version = "1.14.20" +version = "1.14.21" dependencies = [ "bincode", "crossbeam-channel", @@ -4832,12 +4832,12 @@ dependencies = [ "solana-metrics", "solana-perf", "solana-rayon-threadlimit", - "solana-sdk 1.14.20", + "solana-sdk 1.14.21", ] [[package]] name = "solana-faucet" -version = "1.14.20" +version = "1.14.21" dependencies = [ "bincode", "byteorder 1.4.3", @@ -4848,9 +4848,9 @@ dependencies = [ "serde_derive", "solana-clap-utils", "solana-cli-config", - "solana-logger 1.14.20", + "solana-logger 1.14.21", "solana-metrics", - "solana-sdk 1.14.20", + "solana-sdk 1.14.21", "solana-version", "spl-memo", "thiserror", @@ -4893,7 +4893,7 @@ dependencies = [ [[package]] name = "solana-frozen-abi" -version = "1.14.20" +version = "1.14.21" dependencies = [ "ahash", "blake3", @@ -4918,7 +4918,7 @@ dependencies = [ "serde_derive", "serde_json", "sha2 0.10.2", - "solana-frozen-abi-macro 1.14.20", + "solana-frozen-abi-macro 1.14.21", "subtle", "thiserror", ] @@ -4937,7 +4937,7 @@ dependencies = [ [[package]] name = "solana-frozen-abi-macro" -version = "1.14.20" +version = "1.14.21" dependencies = [ "proc-macro2 1.0.51", "quote 1.0.18", @@ -4947,26 +4947,26 @@ dependencies = [ [[package]] name = "solana-genesis-utils" -version = "1.14.20" +version = "1.14.21" dependencies = [ "solana-download-utils", "solana-runtime", - "solana-sdk 1.14.20", + "solana-sdk 1.14.21", ] [[package]] name = "solana-geyser-plugin-interface" -version = "1.14.20" +version = "1.14.21" dependencies = [ "log", - "solana-sdk 1.14.20", + "solana-sdk 1.14.21", "solana-transaction-status", "thiserror", ] [[package]] name = "solana-geyser-plugin-manager" -version = "1.14.20" +version = "1.14.21" dependencies = [ "bs58", "crossbeam-channel", @@ -4979,14 +4979,14 @@ dependencies = [ "solana-metrics", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.20", + "solana-sdk 1.14.21", "solana-transaction-status", "thiserror", ] [[package]] name = "solana-gossip" -version = "1.14.20" +version = "1.14.21" dependencies = [ "bincode", "bv", @@ -5010,17 +5010,17 @@ dependencies = [ "solana-clap-utils", "solana-client", "solana-entry", - "solana-frozen-abi 1.14.20", - "solana-frozen-abi-macro 1.14.20", + "solana-frozen-abi 1.14.21", + "solana-frozen-abi-macro 1.14.21", "solana-ledger", - "solana-logger 1.14.20", + "solana-logger 1.14.21", "solana-measure", "solana-metrics", "solana-net-utils", "solana-perf", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.14.20", + "solana-sdk 1.14.21", "solana-streamer", "solana-version", "solana-vote-program", @@ -5029,7 +5029,7 @@ dependencies = [ [[package]] name = "solana-ledger" -version = "1.14.20" +version = "1.14.21" dependencies = [ "assert_matches", "bincode", @@ -5061,15 +5061,15 @@ dependencies = [ "solana-account-decoder", "solana-bpf-loader-program", "solana-entry", - "solana-frozen-abi 1.14.20", - "solana-frozen-abi-macro 1.14.20", + "solana-frozen-abi 1.14.21", + "solana-frozen-abi-macro 1.14.21", "solana-measure", "solana-metrics", "solana-perf", "solana-program-runtime", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.14.20", + "solana-sdk 1.14.21", "solana-stake-program", "solana-storage-bigtable", "solana-storage-proto", @@ -5098,7 +5098,7 @@ dependencies = [ [[package]] name = "solana-logger" -version = "1.14.20" +version = "1.14.21" dependencies = [ "env_logger", "lazy_static", @@ -5107,36 +5107,36 @@ dependencies = [ [[package]] name = "solana-measure" -version = "1.14.20" +version = "1.14.21" dependencies = [ "log", - "solana-sdk 1.14.20", + "solana-sdk 1.14.21", ] [[package]] name = "solana-merkle-tree" -version = "1.14.20" +version = "1.14.21" dependencies = [ "fast-math", "matches", - "solana-program 1.14.20", + "solana-program 1.14.21", ] [[package]] name = "solana-metrics" -version = "1.14.20" +version = "1.14.21" dependencies = [ "crossbeam-channel", "gethostname", "lazy_static", "log", "reqwest", - "solana-sdk 1.14.20", + "solana-sdk 1.14.21", ] [[package]] name = "solana-net-utils" -version = "1.14.20" +version = "1.14.21" dependencies = [ "bincode", "clap 3.1.6", @@ -5147,8 +5147,8 @@ dependencies = [ "serde", "serde_derive", "socket2", - "solana-logger 1.14.20", - "solana-sdk 1.14.20", + "solana-logger 1.14.21", + "solana-sdk 1.14.21", "solana-version", "tokio", "url 2.2.2", @@ -5156,7 +5156,7 @@ dependencies = [ [[package]] name = "solana-perf" -version = "1.14.20" +version = "1.14.21" dependencies = [ "ahash", "bincode", @@ -5175,13 +5175,13 @@ dependencies = [ "serde", "solana-metrics", "solana-rayon-threadlimit", - "solana-sdk 1.14.20", + "solana-sdk 1.14.21", "solana-vote-program", ] [[package]] name = "solana-poh" -version = "1.14.20" +version = "1.14.21" dependencies = [ "core_affinity", "crossbeam-channel", @@ -5191,7 +5191,7 @@ dependencies = [ "solana-measure", "solana-metrics", "solana-runtime", - "solana-sdk 1.14.20", + "solana-sdk 1.14.21", "solana-sys-tuner", "thiserror", ] @@ -5247,7 +5247,7 @@ dependencies = [ [[package]] name = "solana-program" -version = "1.14.20" +version = "1.14.21" dependencies = [ "base64 0.13.0", "bincode", @@ -5283,9 +5283,9 @@ dependencies = [ "serde_json", "sha2 0.10.2", "sha3 0.10.1", - "solana-frozen-abi 1.14.20", - "solana-frozen-abi-macro 1.14.20", - "solana-sdk-macro 1.14.20", + "solana-frozen-abi 1.14.21", + "solana-frozen-abi-macro 1.14.21", + "solana-sdk-macro 1.14.21", "thiserror", "tiny-bip39", "wasm-bindgen", @@ -5294,7 +5294,7 @@ dependencies = [ [[package]] name = "solana-program-runtime" -version = "1.14.20" +version = "1.14.21" dependencies = [ "base64 0.13.0", "bincode", @@ -5309,17 +5309,17 @@ dependencies = [ "rand 0.7.3", "rustc_version", "serde", - "solana-frozen-abi 1.14.20", - "solana-frozen-abi-macro 1.14.20", + "solana-frozen-abi 1.14.21", + "solana-frozen-abi-macro 1.14.21", "solana-measure", "solana-metrics", - "solana-sdk 1.14.20", + "solana-sdk 1.14.21", "thiserror", ] [[package]] name = "solana-program-test" -version = "1.14.20" +version = "1.14.21" dependencies = [ "assert_matches", "async-trait", @@ -5331,10 +5331,10 @@ dependencies = [ "solana-banks-client", "solana-banks-server", "solana-bpf-loader-program", - "solana-logger 1.14.20", + "solana-logger 1.14.21", "solana-program-runtime", "solana-runtime", - "solana-sdk 1.14.20", + "solana-sdk 1.14.21", "solana-vote-program", "thiserror", "tokio", @@ -5342,7 +5342,7 @@ dependencies = [ [[package]] name = "solana-rayon-threadlimit" -version = "1.14.20" +version = "1.14.21" dependencies = [ "lazy_static", "num_cpus", @@ -5350,7 +5350,7 @@ dependencies = [ [[package]] name = "solana-remote-wallet" -version = "1.14.20" +version = "1.14.21" dependencies = [ "console", "dialoguer", @@ -5360,14 +5360,14 @@ dependencies = [ "parking_lot 0.12.1", "qstring", "semver", - "solana-sdk 1.14.20", + "solana-sdk 1.14.21", "thiserror", "uriparse", ] [[package]] name = "solana-rpc" -version = "1.14.20" +version = "1.14.21" dependencies = [ "base64 0.13.0", "bincode", @@ -5400,7 +5400,7 @@ dependencies = [ "solana-poh", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.14.20", + "solana-sdk 1.14.21", "solana-send-transaction-service", "solana-stake-program", "solana-storage-bigtable", @@ -5418,7 +5418,7 @@ dependencies = [ [[package]] name = "solana-runtime" -version = "1.14.20" +version = "1.14.21" dependencies = [ "arrayref", "bincode", @@ -5455,17 +5455,17 @@ dependencies = [ "solana-bucket-map", "solana-compute-budget-program", "solana-config-program", - "solana-frozen-abi 1.14.20", - "solana-frozen-abi-macro 1.14.20", + "solana-frozen-abi 1.14.21", + "solana-frozen-abi-macro 1.14.21", "solana-measure", "solana-metrics", "solana-program-runtime", "solana-rayon-threadlimit", - "solana-sdk 1.14.20", + "solana-sdk 1.14.21", "solana-stake-program", "solana-vote-program", "solana-zk-token-proof-program", - "solana-zk-token-sdk 1.14.20", + "solana-zk-token-sdk 1.14.21", "strum", "strum_macros", "symlink", @@ -5528,7 +5528,7 @@ dependencies = [ [[package]] name = "solana-sdk" -version = "1.14.20" +version = "1.14.21" dependencies = [ "assert_matches", "base64 0.13.0", @@ -5565,11 +5565,11 @@ dependencies = [ "serde_json", "sha2 0.10.2", "sha3 0.10.1", - "solana-frozen-abi 1.14.20", - "solana-frozen-abi-macro 1.14.20", - "solana-logger 1.14.20", - "solana-program 1.14.20", - "solana-sdk-macro 1.14.20", + "solana-frozen-abi 1.14.21", + "solana-frozen-abi-macro 1.14.21", + "solana-logger 1.14.21", + "solana-program 1.14.21", + "solana-sdk-macro 1.14.21", "thiserror", "uriparse", "wasm-bindgen", @@ -5590,7 +5590,7 @@ dependencies = [ [[package]] name = "solana-sdk-macro" -version = "1.14.20" +version = "1.14.21" dependencies = [ "bs58", "proc-macro2 1.0.51", @@ -5601,7 +5601,7 @@ dependencies = [ [[package]] name = "solana-send-transaction-service" -version = "1.14.20" +version = "1.14.21" dependencies = [ "crossbeam-channel", "log", @@ -5609,12 +5609,12 @@ dependencies = [ "solana-measure", "solana-metrics", "solana-runtime", - "solana-sdk 1.14.20", + "solana-sdk 1.14.21", ] [[package]] name = "solana-stake-program" -version = "1.14.20" +version = "1.14.21" dependencies = [ "bincode", "log", @@ -5624,18 +5624,18 @@ dependencies = [ "serde", "serde_derive", "solana-config-program", - "solana-frozen-abi 1.14.20", - "solana-frozen-abi-macro 1.14.20", + "solana-frozen-abi 1.14.21", + "solana-frozen-abi-macro 1.14.21", "solana-metrics", "solana-program-runtime", - "solana-sdk 1.14.20", + "solana-sdk 1.14.21", "solana-vote-program", "thiserror", ] [[package]] name = "solana-storage-bigtable" -version = "1.14.20" +version = "1.14.21" dependencies = [ "backoff", "bincode", @@ -5656,7 +5656,7 @@ dependencies = [ "serde_derive", "smpl_jwt", "solana-metrics", - "solana-sdk 1.14.20", + "solana-sdk 1.14.21", "solana-storage-proto", "solana-transaction-status", "thiserror", @@ -5667,7 +5667,7 @@ dependencies = [ [[package]] name = "solana-storage-proto" -version = "1.14.20" +version = "1.14.21" dependencies = [ "bincode", "bs58", @@ -5675,14 +5675,14 @@ dependencies = [ "protobuf-src", "serde", "solana-account-decoder", - "solana-sdk 1.14.20", + "solana-sdk 1.14.21", "solana-transaction-status", "tonic-build 0.8.0", ] [[package]] name = "solana-streamer" -version = "1.14.20" +version = "1.14.21" dependencies = [ "crossbeam-channel", "futures-util", @@ -5701,7 +5701,7 @@ dependencies = [ "rustls 0.20.6", "solana-metrics", "solana-perf", - "solana-sdk 1.14.20", + "solana-sdk 1.14.21", "thiserror", "tokio", "x509-parser", @@ -5709,13 +5709,13 @@ dependencies = [ [[package]] name = "solana-sys-tuner" -version = "1.14.20" +version = "1.14.21" dependencies = [ "clap 2.33.3", "libc", "log", "nix", - "solana-logger 1.14.20", + "solana-logger 1.14.21", "solana-version", "sysctl", "unix_socket2", @@ -5724,7 +5724,7 @@ dependencies = [ [[package]] name = "solana-test-validator" -version = "1.14.20" +version = "1.14.21" dependencies = [ "base64 0.13.0", "log", @@ -5735,20 +5735,20 @@ dependencies = [ "solana-core", "solana-gossip", "solana-ledger", - "solana-logger 1.14.20", + "solana-logger 1.14.21", "solana-net-utils", "solana-program-runtime", "solana-program-test", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.20", + "solana-sdk 1.14.21", "solana-streamer", "tokio", ] [[package]] name = "solana-transaction-status" -version = "1.14.20" +version = "1.14.21" dependencies = [ "Inflector", "base64 0.13.0", @@ -5764,7 +5764,7 @@ dependencies = [ "solana-address-lookup-table-program", "solana-measure", "solana-metrics", - "solana-sdk 1.14.20", + "solana-sdk 1.14.21", "solana-vote-program", "spl-associated-token-account", "spl-memo", @@ -5775,7 +5775,7 @@ dependencies = [ [[package]] name = "solana-validator" -version = "1.14.20" +version = "1.14.21" dependencies = [ "chrono", "clap 2.33.3", @@ -5806,14 +5806,14 @@ dependencies = [ "solana-genesis-utils", "solana-gossip", "solana-ledger", - "solana-logger 1.14.20", + "solana-logger 1.14.21", "solana-metrics", "solana-net-utils", "solana-perf", "solana-poh", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.20", + "solana-sdk 1.14.21", "solana-send-transaction-service", "solana-storage-bigtable", "solana-streamer", @@ -5826,21 +5826,21 @@ dependencies = [ [[package]] name = "solana-version" -version = "1.14.20" +version = "1.14.21" dependencies = [ "log", "rustc_version", "semver", "serde", "serde_derive", - "solana-frozen-abi 1.14.20", - "solana-frozen-abi-macro 1.14.20", - "solana-sdk 1.14.20", + "solana-frozen-abi 1.14.21", + "solana-frozen-abi-macro 1.14.21", + "solana-sdk 1.14.21", ] [[package]] name = "solana-vote-program" -version = "1.14.20" +version = "1.14.21" dependencies = [ "bincode", "log", @@ -5849,25 +5849,25 @@ dependencies = [ "rustc_version", "serde", "serde_derive", - "solana-frozen-abi 1.14.20", - "solana-frozen-abi-macro 1.14.20", + "solana-frozen-abi 1.14.21", + "solana-frozen-abi-macro 1.14.21", "solana-metrics", "solana-program-runtime", - "solana-sdk 1.14.20", + "solana-sdk 1.14.21", "thiserror", ] [[package]] name = "solana-zk-token-proof-program" -version = "1.14.20" +version = "1.14.21" dependencies = [ "bytemuck", "getrandom 0.1.14", "num-derive", "num-traits", "solana-program-runtime", - "solana-sdk 1.14.20", - "solana-zk-token-sdk 1.14.20", + "solana-sdk 1.14.21", + "solana-zk-token-sdk 1.14.21", ] [[package]] @@ -5903,7 +5903,7 @@ dependencies = [ [[package]] name = "solana-zk-token-sdk" -version = "1.14.20" +version = "1.14.21" dependencies = [ "aes-gcm-siv", "arrayref", @@ -5923,8 +5923,8 @@ dependencies = [ "serde", "serde_json", "sha3 0.9.1", - "solana-program 1.14.20", - "solana-sdk 1.14.20", + "solana-program 1.14.21", + "solana-sdk 1.14.21", "subtle", "thiserror", "zeroize", diff --git a/programs/bpf/Cargo.toml b/programs/bpf/Cargo.toml index dc19686de49cfa..afbc05c69e110f 100644 --- a/programs/bpf/Cargo.toml +++ b/programs/bpf/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "solana-bpf-programs" description = "Blockchain, Rebuilt for Scale" -version = "1.14.20" +version = "1.14.21" documentation = "https://docs.rs/solana" homepage = "https://solana.com/" readme = "README.md" @@ -26,22 +26,22 @@ itertools = "0.10.1" log = "0.4.11" miow = "0.3.6" net2 = "0.2.37" -solana-account-decoder = { path = "../../account-decoder", version = "=1.14.20" } -solana-bpf-loader-program = { path = "../bpf_loader", version = "=1.14.20" } -solana-bpf-rust-invoke = { path = "rust/invoke", version = "=1.14.20" } -solana-bpf-rust-realloc = { path = "rust/realloc", version = "=1.14.20" } -solana-bpf-rust-realloc-invoke = { path = "rust/realloc_invoke", version = "=1.14.20" } -solana-cli-output = { path = "../../cli-output", version = "=1.14.20" } -solana-logger = { path = "../../logger", version = "=1.14.20" } -solana-measure = { path = "../../measure", version = "=1.14.20" } -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.20" } -solana-runtime = { path = "../../runtime", version = "=1.14.20" } -solana-sdk = { path = "../../sdk", version = "=1.14.20" } -solana-transaction-status = { path = "../../transaction-status", version = "=1.14.20" } +solana-account-decoder = { path = "../../account-decoder", version = "=1.14.21" } +solana-bpf-loader-program = { path = "../bpf_loader", version = "=1.14.21" } +solana-bpf-rust-invoke = { path = "rust/invoke", version = "=1.14.21" } +solana-bpf-rust-realloc = { path = "rust/realloc", version = "=1.14.21" } +solana-bpf-rust-realloc-invoke = { path = "rust/realloc_invoke", version = "=1.14.21" } +solana-cli-output = { path = "../../cli-output", version = "=1.14.21" } +solana-logger = { path = "../../logger", version = "=1.14.21" } +solana-measure = { path = "../../measure", version = "=1.14.21" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.21" } +solana-runtime = { path = "../../runtime", version = "=1.14.21" } +solana-sdk = { path = "../../sdk", version = "=1.14.21" } +solana-transaction-status = { path = "../../transaction-status", version = "=1.14.21" } solana_rbpf = "=0.2.31" [dev-dependencies] -solana-ledger = { path = "../../ledger", version = "=1.14.20" } +solana-ledger = { path = "../../ledger", version = "=1.14.21" } [[bench]] name = "bpf_loader" diff --git a/programs/bpf/rust/128bit/Cargo.toml b/programs/bpf/rust/128bit/Cargo.toml index 470c93e6f161ef..aececa058db4a8 100644 --- a/programs/bpf/rust/128bit/Cargo.toml +++ b/programs/bpf/rust/128bit/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-128bit" -version = "1.14.20" +version = "1.14.21" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ documentation = "https://docs.rs/solana-bpf-rust-128bit" edition = "2021" [dependencies] -solana-bpf-rust-128bit-dep = { path = "../128bit_dep", version = "=1.14.20" } -solana-program = { path = "../../../../sdk/program", version = "=1.14.20" } +solana-bpf-rust-128bit-dep = { path = "../128bit_dep", version = "=1.14.21" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.21" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/128bit_dep/Cargo.toml b/programs/bpf/rust/128bit_dep/Cargo.toml index afaeea47bdbda2..62f85b31db5802 100644 --- a/programs/bpf/rust/128bit_dep/Cargo.toml +++ b/programs/bpf/rust/128bit_dep/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-128bit-dep" -version = "1.14.20" +version = "1.14.21" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-128bit-dep" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.20" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.21" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/bpf/rust/alloc/Cargo.toml b/programs/bpf/rust/alloc/Cargo.toml index d0f20dc991ad20..7fe83773004041 100644 --- a/programs/bpf/rust/alloc/Cargo.toml +++ b/programs/bpf/rust/alloc/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-alloc" -version = "1.14.20" +version = "1.14.21" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-alloc" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.20" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.21" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/call_depth/Cargo.toml b/programs/bpf/rust/call_depth/Cargo.toml index 77f8033f479911..a40cfc3a4ca2d5 100644 --- a/programs/bpf/rust/call_depth/Cargo.toml +++ b/programs/bpf/rust/call_depth/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-call-depth" -version = "1.14.20" +version = "1.14.21" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-call-depth" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.20" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.21" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/caller_access/Cargo.toml b/programs/bpf/rust/caller_access/Cargo.toml index e8e41e0eae89c6..a1c48ce29d1c83 100644 --- a/programs/bpf/rust/caller_access/Cargo.toml +++ b/programs/bpf/rust/caller_access/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-caller-access" -version = "1.14.20" +version = "1.14.21" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-caller-access" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.20" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.21" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/curve25519/Cargo.toml b/programs/bpf/rust/curve25519/Cargo.toml index 66b4f9c81f0c0a..1e1c07b276daa9 100644 --- a/programs/bpf/rust/curve25519/Cargo.toml +++ b/programs/bpf/rust/curve25519/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-curve25519" -version = "1.14.20" +version = "1.14.21" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ documentation = "https://docs.rs/solana-bpf-rust-zktoken_crypto" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.20" } -solana-zk-token-sdk = { path = "../../../../zk-token-sdk", version = "=1.14.20" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.21" } +solana-zk-token-sdk = { path = "../../../../zk-token-sdk", version = "=1.14.21" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/custom_heap/Cargo.toml b/programs/bpf/rust/custom_heap/Cargo.toml index b4fdc4ed225844..21e44d50a24a30 100644 --- a/programs/bpf/rust/custom_heap/Cargo.toml +++ b/programs/bpf/rust/custom_heap/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-custom-heap" -version = "1.14.20" +version = "1.14.21" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-custom-heap" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.20" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.21" } [features] default = ["custom-heap"] diff --git a/programs/bpf/rust/dep_crate/Cargo.toml b/programs/bpf/rust/dep_crate/Cargo.toml index e7ccb9429a7b91..a2a35ba9ce6a8a 100644 --- a/programs/bpf/rust/dep_crate/Cargo.toml +++ b/programs/bpf/rust/dep_crate/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-dep-crate" -version = "1.14.20" +version = "1.14.21" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,8 +12,8 @@ edition = "2021" [dependencies] byteorder = { version = "1", default-features = false } # list of crates which must be buildable for bpf programs -solana-address-lookup-table-program = { path = "../../../../programs/address-lookup-table", version = "=1.14.20" } -solana-program = { path = "../../../../sdk/program", version = "=1.14.20" } +solana-address-lookup-table-program = { path = "../../../../programs/address-lookup-table", version = "=1.14.21" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.21" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/deprecated_loader/Cargo.toml b/programs/bpf/rust/deprecated_loader/Cargo.toml index 33769e93512597..cfca71a106ff71 100644 --- a/programs/bpf/rust/deprecated_loader/Cargo.toml +++ b/programs/bpf/rust/deprecated_loader/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-deprecated-loader" -version = "1.14.20" +version = "1.14.21" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-deprecated-loader" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.20" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.21" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/dup_accounts/Cargo.toml b/programs/bpf/rust/dup_accounts/Cargo.toml index 86d76474bc8c86..027938c66b97b1 100644 --- a/programs/bpf/rust/dup_accounts/Cargo.toml +++ b/programs/bpf/rust/dup_accounts/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-dup-accounts" -version = "1.14.20" +version = "1.14.21" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-dup-accounts" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.20" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.21" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/error_handling/Cargo.toml b/programs/bpf/rust/error_handling/Cargo.toml index 79ac8f458731ac..2bd5a7723f810c 100644 --- a/programs/bpf/rust/error_handling/Cargo.toml +++ b/programs/bpf/rust/error_handling/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-error-handling" -version = "1.14.20" +version = "1.14.21" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,7 +12,7 @@ edition = "2021" [dependencies] num-derive = "0.3" num-traits = "0.2" -solana-program = { path = "../../../../sdk/program", version = "=1.14.20" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.21" } thiserror = "1.0" [lib] diff --git a/programs/bpf/rust/external_spend/Cargo.toml b/programs/bpf/rust/external_spend/Cargo.toml index d700438680b798..3227d84b9ff999 100644 --- a/programs/bpf/rust/external_spend/Cargo.toml +++ b/programs/bpf/rust/external_spend/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-external-spend" -version = "1.14.20" +version = "1.14.21" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-external-spend" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.20" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.21" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/finalize/Cargo.toml b/programs/bpf/rust/finalize/Cargo.toml index 3003ff77ec17cd..276ed5769402a9 100644 --- a/programs/bpf/rust/finalize/Cargo.toml +++ b/programs/bpf/rust/finalize/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-finalize" -version = "1.14.20" +version = "1.14.21" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-finalize" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.20" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.21" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/get_minimum_delegation/Cargo.toml b/programs/bpf/rust/get_minimum_delegation/Cargo.toml index f1bcaeeccb8846..3e97a53cf99c84 100644 --- a/programs/bpf/rust/get_minimum_delegation/Cargo.toml +++ b/programs/bpf/rust/get_minimum_delegation/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-get-minimum-delegation" -version = "1.14.20" +version = "1.14.21" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-get-minimum-delegation" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.20" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.21" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/inner_instruction_alignment_check/Cargo.toml b/programs/bpf/rust/inner_instruction_alignment_check/Cargo.toml index 9ca2bf68bc0eec..d5d3d3d5fd4fbb 100644 --- a/programs/bpf/rust/inner_instruction_alignment_check/Cargo.toml +++ b/programs/bpf/rust/inner_instruction_alignment_check/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-inner_instruction_alignment_check" -version = "1.14.20" +version = "1.14.21" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-inner_instruction_alignment_che edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.20" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.21" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/instruction_introspection/Cargo.toml b/programs/bpf/rust/instruction_introspection/Cargo.toml index 470187ebb9b8b0..4b2613d200484e 100644 --- a/programs/bpf/rust/instruction_introspection/Cargo.toml +++ b/programs/bpf/rust/instruction_introspection/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-instruction-introspection" -version = "1.14.20" +version = "1.14.21" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-instruction-introspection" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.20" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.21" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/invoke/Cargo.toml b/programs/bpf/rust/invoke/Cargo.toml index 5cbb63d783c367..3268b413172e1e 100644 --- a/programs/bpf/rust/invoke/Cargo.toml +++ b/programs/bpf/rust/invoke/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-invoke" -version = "1.14.20" +version = "1.14.21" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -15,7 +15,7 @@ program = [] [dependencies] solana-bpf-rust-invoked = { path = "../invoked", default-features = false } -solana-program = { path = "../../../../sdk/program", version = "=1.14.20" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.21" } [lib] crate-type = ["lib", "cdylib"] diff --git a/programs/bpf/rust/invoke_and_error/Cargo.toml b/programs/bpf/rust/invoke_and_error/Cargo.toml index 21965da0e17475..16055e016ef18b 100644 --- a/programs/bpf/rust/invoke_and_error/Cargo.toml +++ b/programs/bpf/rust/invoke_and_error/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-invoke-and-error" -version = "1.14.20" +version = "1.14.21" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-invoke-and-error" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.20" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.21" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/invoke_and_ok/Cargo.toml b/programs/bpf/rust/invoke_and_ok/Cargo.toml index ff77ca09b2fda6..5f2187eda34ef1 100644 --- a/programs/bpf/rust/invoke_and_ok/Cargo.toml +++ b/programs/bpf/rust/invoke_and_ok/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-invoke-and-ok" -version = "1.14.20" +version = "1.14.21" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-invoke-and-ok" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.20" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.21" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/invoke_and_return/Cargo.toml b/programs/bpf/rust/invoke_and_return/Cargo.toml index 313e53417370c9..f79e0ea01ce6d0 100644 --- a/programs/bpf/rust/invoke_and_return/Cargo.toml +++ b/programs/bpf/rust/invoke_and_return/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-invoke-and-return" -version = "1.14.20" +version = "1.14.21" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-invoke-and-return" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.20" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.21" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/invoked/Cargo.toml b/programs/bpf/rust/invoked/Cargo.toml index aedaff084e9196..eb8d4c9fe909d9 100644 --- a/programs/bpf/rust/invoked/Cargo.toml +++ b/programs/bpf/rust/invoked/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-invoked" -version = "1.14.20" +version = "1.14.21" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,7 +14,7 @@ default = ["program"] program = [] [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.20" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.21" } [lib] crate-type = ["lib", "cdylib"] diff --git a/programs/bpf/rust/iter/Cargo.toml b/programs/bpf/rust/iter/Cargo.toml index b4a55479d9456a..8640cdd5f3ee7f 100644 --- a/programs/bpf/rust/iter/Cargo.toml +++ b/programs/bpf/rust/iter/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-iter" -version = "1.14.20" +version = "1.14.21" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-iter" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.20" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.21" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/log_data/Cargo.toml b/programs/bpf/rust/log_data/Cargo.toml index db4335360baadb..d189a1cef0229e 100644 --- a/programs/bpf/rust/log_data/Cargo.toml +++ b/programs/bpf/rust/log_data/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-log-data" -version = "1.14.20" +version = "1.14.21" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-log-data" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.20" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.21" } [features] default = ["program"] diff --git a/programs/bpf/rust/many_args/Cargo.toml b/programs/bpf/rust/many_args/Cargo.toml index 7e705803604600..a46860e2986bba 100644 --- a/programs/bpf/rust/many_args/Cargo.toml +++ b/programs/bpf/rust/many_args/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-many-args" -version = "1.14.20" +version = "1.14.21" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ documentation = "https://docs.rs/solana-bpf-rust-many-args" edition = "2021" [dependencies] -solana-bpf-rust-many-args-dep = { path = "../many_args_dep", version = "=1.14.20" } -solana-program = { path = "../../../../sdk/program", version = "=1.14.20" } +solana-bpf-rust-many-args-dep = { path = "../many_args_dep", version = "=1.14.21" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.21" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/many_args_dep/Cargo.toml b/programs/bpf/rust/many_args_dep/Cargo.toml index face82b41a5d7e..0759852690176b 100644 --- a/programs/bpf/rust/many_args_dep/Cargo.toml +++ b/programs/bpf/rust/many_args_dep/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-many-args-dep" -version = "1.14.20" +version = "1.14.21" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-many-args-dep" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.20" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.21" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/bpf/rust/mem/Cargo.toml b/programs/bpf/rust/mem/Cargo.toml index 377ac8624a249a..daf2f92f1a6700 100644 --- a/programs/bpf/rust/mem/Cargo.toml +++ b/programs/bpf/rust/mem/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-mem" -version = "1.14.20" +version = "1.14.21" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,12 +13,12 @@ edition = "2021" no-entrypoint = [] [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.20" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.21" } [dev-dependencies] -solana-program-runtime = { path = "../../../../program-runtime", version = "=1.14.20" } -solana-program-test = { path = "../../../../program-test", version = "=1.14.20" } -solana-sdk = { path = "../../../../sdk", version = "=1.14.20" } +solana-program-runtime = { path = "../../../../program-runtime", version = "=1.14.21" } +solana-program-test = { path = "../../../../program-test", version = "=1.14.21" } +solana-sdk = { path = "../../../../sdk", version = "=1.14.21" } [lib] crate-type = ["cdylib", "lib"] diff --git a/programs/bpf/rust/membuiltins/Cargo.toml b/programs/bpf/rust/membuiltins/Cargo.toml index 370c62295b4697..7fada14590cd30 100644 --- a/programs/bpf/rust/membuiltins/Cargo.toml +++ b/programs/bpf/rust/membuiltins/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-membuiltins" -version = "1.14.20" +version = "1.14.21" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ documentation = "https://docs.rs/solana-bpf-rust-mem" edition = "2021" [dependencies] -solana-bpf-rust-mem = { path = "../mem", version = "=1.14.20", features = [ "no-entrypoint" ] } -solana-program = { path = "../../../../sdk/program", version = "=1.14.20" } +solana-bpf-rust-mem = { path = "../mem", version = "=1.14.21", features = [ "no-entrypoint" ] } +solana-program = { path = "../../../../sdk/program", version = "=1.14.21" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/noop/Cargo.toml b/programs/bpf/rust/noop/Cargo.toml index 4cd46de10628e9..d07fedee0be6bc 100644 --- a/programs/bpf/rust/noop/Cargo.toml +++ b/programs/bpf/rust/noop/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-noop" -version = "1.14.20" +version = "1.14.21" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-noop" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.20" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.21" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/panic/Cargo.toml b/programs/bpf/rust/panic/Cargo.toml index 954e192685b987..3d27152e20b878 100644 --- a/programs/bpf/rust/panic/Cargo.toml +++ b/programs/bpf/rust/panic/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-panic" -version = "1.14.20" +version = "1.14.21" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-panic" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.20" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.21" } [features] default = ["custom-panic"] diff --git a/programs/bpf/rust/param_passing/Cargo.toml b/programs/bpf/rust/param_passing/Cargo.toml index 00f6ca62d1593d..80a3793b34bad6 100644 --- a/programs/bpf/rust/param_passing/Cargo.toml +++ b/programs/bpf/rust/param_passing/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-param-passing" -version = "1.14.20" +version = "1.14.21" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ documentation = "https://docs.rs/solana-bpf-rust-param-passing" edition = "2021" [dependencies] -solana-bpf-rust-param-passing-dep = { path = "../param_passing_dep", version = "=1.14.20" } -solana-program = { path = "../../../../sdk/program", version = "=1.14.20" } +solana-bpf-rust-param-passing-dep = { path = "../param_passing_dep", version = "=1.14.21" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.21" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/param_passing_dep/Cargo.toml b/programs/bpf/rust/param_passing_dep/Cargo.toml index c91b5224ea11e7..18f05c7423dbbf 100644 --- a/programs/bpf/rust/param_passing_dep/Cargo.toml +++ b/programs/bpf/rust/param_passing_dep/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-param-passing-dep" -version = "1.14.20" +version = "1.14.21" description = "Solana BPF program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-param-passing-dep" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.20" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.21" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/bpf/rust/rand/Cargo.toml b/programs/bpf/rust/rand/Cargo.toml index 16a12dc307bc1f..ecccce0abed8c4 100644 --- a/programs/bpf/rust/rand/Cargo.toml +++ b/programs/bpf/rust/rand/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-rand" -version = "1.14.20" +version = "1.14.21" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,7 +12,7 @@ edition = "2021" [dependencies] getrandom = { version = "0.1.14", features = ["dummy"] } rand = "0.7" -solana-program = { path = "../../../../sdk/program", version = "=1.14.20" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.21" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/realloc/Cargo.toml b/programs/bpf/rust/realloc/Cargo.toml index 9a653f3d185d9d..b6ab1a9f49802d 100644 --- a/programs/bpf/rust/realloc/Cargo.toml +++ b/programs/bpf/rust/realloc/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-realloc" -version = "1.14.20" +version = "1.14.21" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,7 +14,7 @@ default = ["program"] program = [] [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.20" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.21" } [lib] crate-type = ["lib", "cdylib"] diff --git a/programs/bpf/rust/realloc_invoke/Cargo.toml b/programs/bpf/rust/realloc_invoke/Cargo.toml index 202edad026d617..305e5dc0eaaaff 100644 --- a/programs/bpf/rust/realloc_invoke/Cargo.toml +++ b/programs/bpf/rust/realloc_invoke/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-realloc-invoke" -version = "1.14.20" +version = "1.14.21" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,8 +14,8 @@ default = ["program"] program = [] [dependencies] -solana-bpf-rust-realloc = { path = "../realloc", version = "=1.14.20", default-features = false } -solana-program = { path = "../../../../sdk/program", version = "=1.14.20" } +solana-bpf-rust-realloc = { path = "../realloc", version = "=1.14.21", default-features = false } +solana-program = { path = "../../../../sdk/program", version = "=1.14.21" } [lib] crate-type = ["lib", "cdylib"] diff --git a/programs/bpf/rust/ro_account_modify/Cargo.toml b/programs/bpf/rust/ro_account_modify/Cargo.toml index b5da8e80d8df86..fd091aa20854da 100644 --- a/programs/bpf/rust/ro_account_modify/Cargo.toml +++ b/programs/bpf/rust/ro_account_modify/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-ro-account_modify" -version = "1.14.20" +version = "1.14.21" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-ro-modify" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.20" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.21" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/ro_modify/Cargo.toml b/programs/bpf/rust/ro_modify/Cargo.toml index 867429422454f2..d47ac224785ac8 100644 --- a/programs/bpf/rust/ro_modify/Cargo.toml +++ b/programs/bpf/rust/ro_modify/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-ro-modify" -version = "1.14.20" +version = "1.14.21" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-ro-modify" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.20" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.21" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/sanity/Cargo.toml b/programs/bpf/rust/sanity/Cargo.toml index e91a97d44909e8..61b34aa6db33c1 100644 --- a/programs/bpf/rust/sanity/Cargo.toml +++ b/programs/bpf/rust/sanity/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-sanity" -version = "1.14.20" +version = "1.14.21" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,12 +13,12 @@ edition = "2021" test-bpf = [] [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.20" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.21" } [dev-dependencies] -solana-program-runtime = { path = "../../../../program-runtime", version = "=1.14.20" } -solana-program-test = { path = "../../../../program-test", version = "=1.14.20" } -solana-sdk = { path = "../../../../sdk", version = "=1.14.20" } +solana-program-runtime = { path = "../../../../program-runtime", version = "=1.14.21" } +solana-program-test = { path = "../../../../program-test", version = "=1.14.21" } +solana-sdk = { path = "../../../../sdk", version = "=1.14.21" } [lib] crate-type = ["cdylib", "lib"] diff --git a/programs/bpf/rust/secp256k1_recover/Cargo.toml b/programs/bpf/rust/secp256k1_recover/Cargo.toml index c65c6eb63aadd3..6b4dadb02c5d01 100644 --- a/programs/bpf/rust/secp256k1_recover/Cargo.toml +++ b/programs/bpf/rust/secp256k1_recover/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-secp256k1-recover" -version = "1.14.20" +version = "1.14.21" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -11,7 +11,7 @@ edition = "2021" [dependencies] libsecp256k1 = { version = "0.7.0", default-features = false } -solana-program = { path = "../../../../sdk/program", version = "=1.14.20" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.21" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/sha/Cargo.toml b/programs/bpf/rust/sha/Cargo.toml index d762b81fb22e42..d333fc48e73a38 100644 --- a/programs/bpf/rust/sha/Cargo.toml +++ b/programs/bpf/rust/sha/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-sha" -version = "1.14.20" +version = "1.14.21" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -11,7 +11,7 @@ edition = "2021" [dependencies] blake3 = "1.0.0" -solana-program = { path = "../../../../sdk/program", version = "=1.14.20" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.21" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/sibling_inner_instruction/Cargo.toml b/programs/bpf/rust/sibling_inner_instruction/Cargo.toml index f9fdd8abb61d01..f3e9d611079fed 100644 --- a/programs/bpf/rust/sibling_inner_instruction/Cargo.toml +++ b/programs/bpf/rust/sibling_inner_instruction/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-sibling_inner-instructions" -version = "1.14.20" +version = "1.14.21" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-log-data" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.20" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.21" } [features] default = ["program"] diff --git a/programs/bpf/rust/sibling_instruction/Cargo.toml b/programs/bpf/rust/sibling_instruction/Cargo.toml index ca8a1327230f21..488ad3bdc0e860 100644 --- a/programs/bpf/rust/sibling_instruction/Cargo.toml +++ b/programs/bpf/rust/sibling_instruction/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-sibling-instructions" -version = "1.14.20" +version = "1.14.21" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-log-data" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.20" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.21" } [features] default = ["program"] diff --git a/programs/bpf/rust/simulation/Cargo.toml b/programs/bpf/rust/simulation/Cargo.toml index 65900313bd3c9f..aeeaec9676a750 100644 --- a/programs/bpf/rust/simulation/Cargo.toml +++ b/programs/bpf/rust/simulation/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-simulation" -version = "1.14.20" +version = "1.14.21" description = "Solana BPF Program Simulation Differences" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,13 +13,13 @@ edition = "2021" test-bpf = [] [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.20" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.21" } [dev-dependencies] -solana-logger = { path = "../../../../logger", version = "=1.14.20" } -solana-program-test = { path = "../../../../program-test", version = "=1.14.20" } -solana-sdk = { path = "../../../../sdk", version = "=1.14.20" } -solana-validator = { path = "../../../../validator", version = "=1.14.20" } +solana-logger = { path = "../../../../logger", version = "=1.14.21" } +solana-program-test = { path = "../../../../program-test", version = "=1.14.21" } +solana-sdk = { path = "../../../../sdk", version = "=1.14.21" } +solana-validator = { path = "../../../../validator", version = "=1.14.21" } [lib] crate-type = ["cdylib", "lib"] diff --git a/programs/bpf/rust/spoof1/Cargo.toml b/programs/bpf/rust/spoof1/Cargo.toml index 0d6ab0fb09d1ee..85eabb8e1cbe5a 100644 --- a/programs/bpf/rust/spoof1/Cargo.toml +++ b/programs/bpf/rust/spoof1/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-spoof1" -version = "1.14.20" +version = "1.14.21" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-spoof1" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.20" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.21" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/spoof1_system/Cargo.toml b/programs/bpf/rust/spoof1_system/Cargo.toml index 60023335468c14..dbd59809bb655a 100644 --- a/programs/bpf/rust/spoof1_system/Cargo.toml +++ b/programs/bpf/rust/spoof1_system/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-spoof1-system" -version = "1.14.20" +version = "1.14.21" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-spoof1-system" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.20" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.21" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/sysvar/Cargo.toml b/programs/bpf/rust/sysvar/Cargo.toml index 85d7eddf5726de..9f4a7b347a224c 100644 --- a/programs/bpf/rust/sysvar/Cargo.toml +++ b/programs/bpf/rust/sysvar/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-sysvar" -version = "1.14.20" +version = "1.14.21" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,12 +10,12 @@ documentation = "https://docs.rs/solana-bpf-rust-sysvar" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.20" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.21" } [dev-dependencies] -solana-program-runtime = { path = "../../../../program-runtime", version = "=1.14.20" } -solana-program-test = { path = "../../../../program-test", version = "=1.14.20" } -solana-sdk = { path = "../../../../sdk", version = "=1.14.20" } +solana-program-runtime = { path = "../../../../program-runtime", version = "=1.14.21" } +solana-program-test = { path = "../../../../program-test", version = "=1.14.21" } +solana-sdk = { path = "../../../../sdk", version = "=1.14.21" } [lib] crate-type = ["cdylib", "lib"] diff --git a/programs/bpf/rust/upgradeable/Cargo.toml b/programs/bpf/rust/upgradeable/Cargo.toml index eda0d7089bbfbd..94220fe1cf49de 100644 --- a/programs/bpf/rust/upgradeable/Cargo.toml +++ b/programs/bpf/rust/upgradeable/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-upgradeable" -version = "1.14.20" +version = "1.14.21" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-upgradeable" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.20" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.21" } [lib] name = "solana_bpf_rust_upgradeable" diff --git a/programs/bpf/rust/upgraded/Cargo.toml b/programs/bpf/rust/upgraded/Cargo.toml index b4fe8a2ed352b6..7615995c49735b 100644 --- a/programs/bpf/rust/upgraded/Cargo.toml +++ b/programs/bpf/rust/upgraded/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-upgraded" -version = "1.14.20" +version = "1.14.21" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-upgraded" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.20" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.21" } [lib] name = "solana_bpf_rust_upgraded" diff --git a/programs/bpf_loader/Cargo.toml b/programs/bpf_loader/Cargo.toml index 7fa3f4ea0a7df6..5a3b9950d97244 100644 --- a/programs/bpf_loader/Cargo.toml +++ b/programs/bpf_loader/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-loader-program" -version = "1.14.20" +version = "1.14.21" description = "Solana BPF loader" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,17 +14,17 @@ bincode = "1.3.3" byteorder = "1.4.3" libsecp256k1 = "0.6.0" log = "0.4.17" -solana-measure = { path = "../../measure", version = "=1.14.20" } -solana-metrics = { path = "../../metrics", version = "=1.14.20" } -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.20" } -solana-sdk = { path = "../../sdk", version = "=1.14.20" } -solana-zk-token-sdk = { path = "../../zk-token-sdk", version = "=1.14.20" } +solana-measure = { path = "../../measure", version = "=1.14.21" } +solana-metrics = { path = "../../metrics", version = "=1.14.21" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.21" } +solana-sdk = { path = "../../sdk", version = "=1.14.21" } +solana-zk-token-sdk = { path = "../../zk-token-sdk", version = "=1.14.21" } solana_rbpf = "=0.2.31" thiserror = "1.0" [dev-dependencies] rand = "0.7.3" -solana-runtime = { path = "../../runtime", version = "=1.14.20" } +solana-runtime = { path = "../../runtime", version = "=1.14.21" } [lib] crate-type = ["lib"] diff --git a/programs/bpf_loader/gen-syscall-list/Cargo.toml b/programs/bpf_loader/gen-syscall-list/Cargo.toml index d066da1edf11ae..c19fb8ad55e104 100644 --- a/programs/bpf_loader/gen-syscall-list/Cargo.toml +++ b/programs/bpf_loader/gen-syscall-list/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "gen-syscall-list" -version = "1.14.20" +version = "1.14.21" edition = "2021" license = "Apache-2.0" publish = false diff --git a/programs/compute-budget/Cargo.toml b/programs/compute-budget/Cargo.toml index 3023419e60dc8e..52a2adeb5e49b3 100644 --- a/programs/compute-budget/Cargo.toml +++ b/programs/compute-budget/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "solana-compute-budget-program" description = "Solana Compute Budget program" -version = "1.14.20" +version = "1.14.21" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-compute-budget-program" repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ license = "Apache-2.0" edition = "2021" [dependencies] -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.20" } -solana-sdk = { path = "../../sdk", version = "=1.14.20" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.21" } +solana-sdk = { path = "../../sdk", version = "=1.14.21" } [lib] crate-type = ["lib"] diff --git a/programs/config/Cargo.toml b/programs/config/Cargo.toml index c53a86ea8f9fcd..b4bf0c70a66077 100644 --- a/programs/config/Cargo.toml +++ b/programs/config/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-config-program" -version = "1.14.20" +version = "1.14.21" description = "Solana Config program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,11 +14,11 @@ bincode = "1.3.3" chrono = { version = "0.4.11", features = ["serde"] } serde = "1.0.138" serde_derive = "1.0.103" -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.20" } -solana-sdk = { path = "../../sdk", version = "=1.14.20" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.21" } +solana-sdk = { path = "../../sdk", version = "=1.14.21" } [dev-dependencies] -solana-logger = { path = "../../logger", version = "=1.14.20" } +solana-logger = { path = "../../logger", version = "=1.14.21" } [lib] crate-type = ["lib"] diff --git a/programs/ed25519-tests/Cargo.toml b/programs/ed25519-tests/Cargo.toml index 3d30dc1b0c07b6..e44e2343ad683c 100644 --- a/programs/ed25519-tests/Cargo.toml +++ b/programs/ed25519-tests/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-ed25519-program-tests" -version = "1.14.20" +version = "1.14.21" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" @@ -12,8 +12,8 @@ publish = false assert_matches = "1.5.0" ed25519-dalek = "=1.0.1" rand = "0.7.0" -solana-program-test = { path = "../../program-test", version = "=1.14.20" } -solana-sdk = { path = "../../sdk", version = "=1.14.20" } +solana-program-test = { path = "../../program-test", version = "=1.14.21" } +solana-sdk = { path = "../../sdk", version = "=1.14.21" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/stake/Cargo.toml b/programs/stake/Cargo.toml index 7c8096b7d5b814..232994eeae7c67 100644 --- a/programs/stake/Cargo.toml +++ b/programs/stake/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-stake-program" -version = "1.14.20" +version = "1.14.21" description = "Solana Stake program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -16,19 +16,19 @@ num-derive = "0.3" num-traits = "0.2" serde = "1.0.138" serde_derive = "1.0.103" -solana-config-program = { path = "../config", version = "=1.14.20" } -solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.20" } -solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.20" } -solana-metrics = { path = "../../metrics", version = "=1.14.20" } -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.20" } -solana-sdk = { path = "../../sdk", version = "=1.14.20" } -solana-vote-program = { path = "../vote", version = "=1.14.20" } +solana-config-program = { path = "../config", version = "=1.14.21" } +solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.21" } +solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.21" } +solana-metrics = { path = "../../metrics", version = "=1.14.21" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.21" } +solana-sdk = { path = "../../sdk", version = "=1.14.21" } +solana-vote-program = { path = "../vote", version = "=1.14.21" } thiserror = "1.0" [dev-dependencies] assert_matches = "1.5.0" proptest = "1.0" -solana-logger = { path = "../../logger", version = "=1.14.20" } +solana-logger = { path = "../../logger", version = "=1.14.21" } test-case = "2.1.0" [build-dependencies] diff --git a/programs/vote/Cargo.toml b/programs/vote/Cargo.toml index e088ff0db59e35..21d50ea569f82f 100644 --- a/programs/vote/Cargo.toml +++ b/programs/vote/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-vote-program" -version = "1.14.20" +version = "1.14.21" description = "Solana Vote program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -16,17 +16,17 @@ num-derive = "0.3" num-traits = "0.2" serde = "1.0.138" serde_derive = "1.0.103" -solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.20" } -solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.20" } -solana-metrics = { path = "../../metrics", version = "=1.14.20" } -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.20" } -solana-sdk = { path = "../../sdk", version = "=1.14.20" } +solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.21" } +solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.21" } +solana-metrics = { path = "../../metrics", version = "=1.14.21" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.21" } +solana-sdk = { path = "../../sdk", version = "=1.14.21" } thiserror = "1.0" [dev-dependencies] itertools = "0.10.3" rand = "0.7.0" -solana-logger = { path = "../../logger", version = "=1.14.20" } +solana-logger = { path = "../../logger", version = "=1.14.21" } test-case = "2.1.0" [build-dependencies] diff --git a/programs/zk-token-proof-tests/Cargo.toml b/programs/zk-token-proof-tests/Cargo.toml index 589f25d614cb2c..97721e581fd80d 100644 --- a/programs/zk-token-proof-tests/Cargo.toml +++ b/programs/zk-token-proof-tests/Cargo.toml @@ -2,14 +2,14 @@ name = "solana-zk-token-proof-program-tests" authors = ["Solana Labs Maintainers "] repository = "https://github.com/solana-labs/solana" -version = "1.14.20" +version = "1.14.21" license = "Apache-2.0" edition = "2021" publish = false [dev-dependencies] bytemuck = { version = "1.11.0", features = ["derive"] } -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.20" } -solana-program-test = { path = "../../program-test", version = "=1.14.20" } -solana-sdk = { path = "../../sdk", version = "=1.14.20" } -solana-zk-token-sdk = { path = "../../zk-token-sdk", version = "=1.14.20" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.21" } +solana-program-test = { path = "../../program-test", version = "=1.14.21" } +solana-sdk = { path = "../../sdk", version = "=1.14.21" } +solana-zk-token-sdk = { path = "../../zk-token-sdk", version = "=1.14.21" } diff --git a/programs/zk-token-proof/Cargo.toml b/programs/zk-token-proof/Cargo.toml index 488553170cec3d..fc56b2903cbf3a 100644 --- a/programs/zk-token-proof/Cargo.toml +++ b/programs/zk-token-proof/Cargo.toml @@ -3,7 +3,7 @@ name = "solana-zk-token-proof-program" description = "Solana Zk Token Proof Program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" -version = "1.14.20" +version = "1.14.21" license = "Apache-2.0" edition = "2021" @@ -12,6 +12,6 @@ bytemuck = { version = "1.11.0", features = ["derive"] } getrandom = { version = "0.1", features = ["dummy"] } num-derive = "0.3" num-traits = "0.2" -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.20" } -solana-sdk = { path = "../../sdk", version = "=1.14.20" } -solana-zk-token-sdk = { path = "../../zk-token-sdk", version = "=1.14.20" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.21" } +solana-sdk = { path = "../../sdk", version = "=1.14.21" } +solana-zk-token-sdk = { path = "../../zk-token-sdk", version = "=1.14.21" } diff --git a/rayon-threadlimit/Cargo.toml b/rayon-threadlimit/Cargo.toml index 53d092dad95907..cec75751863acb 100644 --- a/rayon-threadlimit/Cargo.toml +++ b/rayon-threadlimit/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-rayon-threadlimit" -version = "1.14.20" +version = "1.14.21" description = "solana-rayon-threadlimit" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-rayon-threadlimit" diff --git a/rbpf-cli/Cargo.toml b/rbpf-cli/Cargo.toml index d4175da4125084..0d8a7febf1e959 100644 --- a/rbpf-cli/Cargo.toml +++ b/rbpf-cli/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "rbpf-cli" -version = "1.14.20" +version = "1.14.21" description = "CLI to test and analyze eBPF programs" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/rbpf" @@ -13,8 +13,8 @@ publish = false clap = { version = "3.1.5", features = ["cargo"] } serde = "1.0.138" serde_json = "1.0.81" -solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.20" } -solana-logger = { path = "../logger", version = "=1.14.20" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.20" } -solana-sdk = { path = "../sdk", version = "=1.14.20" } +solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.21" } +solana-logger = { path = "../logger", version = "=1.14.21" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.21" } +solana-sdk = { path = "../sdk", version = "=1.14.21" } solana_rbpf = "=0.2.31" diff --git a/remote-wallet/Cargo.toml b/remote-wallet/Cargo.toml index ccff7adc761394..89094e2bdbe96d 100644 --- a/remote-wallet/Cargo.toml +++ b/remote-wallet/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-remote-wallet" description = "Blockchain, Rebuilt for Scale" -version = "1.14.20" +version = "1.14.21" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -19,7 +19,7 @@ num-traits = { version = "0.2" } parking_lot = "0.12" qstring = "0.7.2" semver = "1.0" -solana-sdk = { path = "../sdk", version = "=1.14.20" } +solana-sdk = { path = "../sdk", version = "=1.14.21" } thiserror = "1.0" uriparse = "0.6.4" diff --git a/rpc-test/Cargo.toml b/rpc-test/Cargo.toml index 8fe9c0b5335435..b56084f6454b49 100644 --- a/rpc-test/Cargo.toml +++ b/rpc-test/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-rpc-test" -version = "1.14.20" +version = "1.14.21" description = "Solana RPC Test" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -19,17 +19,17 @@ log = "0.4.17" reqwest = { version = "0.11.11", default-features = false, features = ["blocking", "brotli", "deflate", "gzip", "rustls-tls", "json"] } serde = "1.0.138" serde_json = "1.0.81" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.20" } -solana-client = { path = "../client", version = "=1.14.20" } -solana-rpc = { path = "../rpc", version = "=1.14.20" } -solana-sdk = { path = "../sdk", version = "=1.14.20" } -solana-streamer = { path = "../streamer", version = "=1.14.20" } -solana-test-validator = { path = "../test-validator", version = "=1.14.20" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.20" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.21" } +solana-client = { path = "../client", version = "=1.14.21" } +solana-rpc = { path = "../rpc", version = "=1.14.21" } +solana-sdk = { path = "../sdk", version = "=1.14.21" } +solana-streamer = { path = "../streamer", version = "=1.14.21" } +solana-test-validator = { path = "../test-validator", version = "=1.14.21" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.21" } tokio = { version = "~1.14.1", features = ["full"] } [dev-dependencies] -solana-logger = { path = "../logger", version = "=1.14.20" } +solana-logger = { path = "../logger", version = "=1.14.21" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/rpc/Cargo.toml b/rpc/Cargo.toml index bfb6202655210a..c6de0901a8bee2 100644 --- a/rpc/Cargo.toml +++ b/rpc/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-rpc" -version = "1.14.20" +version = "1.14.21" description = "Solana RPC" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -29,26 +29,26 @@ serde = "1.0.138" serde_derive = "1.0.103" serde_json = "1.0.81" soketto = "0.7" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.20" } -solana-client = { path = "../client", version = "=1.14.20" } -solana-entry = { path = "../entry", version = "=1.14.20" } -solana-faucet = { path = "../faucet", version = "=1.14.20" } -solana-gossip = { path = "../gossip", version = "=1.14.20" } -solana-ledger = { path = "../ledger", version = "=1.14.20" } -solana-measure = { path = "../measure", version = "=1.14.20" } -solana-metrics = { path = "../metrics", version = "=1.14.20" } -solana-perf = { path = "../perf", version = "=1.14.20" } -solana-poh = { path = "../poh", version = "=1.14.20" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.20" } -solana-runtime = { path = "../runtime", version = "=1.14.20" } -solana-sdk = { path = "../sdk", version = "=1.14.20" } -solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.20" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.20" } -solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.20" } -solana-streamer = { path = "../streamer", version = "=1.14.20" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.20" } -solana-version = { path = "../version", version = "=1.14.20" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.20" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.21" } +solana-client = { path = "../client", version = "=1.14.21" } +solana-entry = { path = "../entry", version = "=1.14.21" } +solana-faucet = { path = "../faucet", version = "=1.14.21" } +solana-gossip = { path = "../gossip", version = "=1.14.21" } +solana-ledger = { path = "../ledger", version = "=1.14.21" } +solana-measure = { path = "../measure", version = "=1.14.21" } +solana-metrics = { path = "../metrics", version = "=1.14.21" } +solana-perf = { path = "../perf", version = "=1.14.21" } +solana-poh = { path = "../poh", version = "=1.14.21" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.21" } +solana-runtime = { path = "../runtime", version = "=1.14.21" } +solana-sdk = { path = "../sdk", version = "=1.14.21" } +solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.21" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.21" } +solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.21" } +solana-streamer = { path = "../streamer", version = "=1.14.21" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.21" } +solana-version = { path = "../version", version = "=1.14.21" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.21" } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } spl-token-2022 = { version = "=0.6.1", features = ["no-entrypoint"] } stream-cancel = "0.8.1" @@ -58,9 +58,9 @@ tokio-util = { version = "0.6", features = ["codec", "compat"] } [dev-dependencies] serial_test = "0.8.0" -solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.20" } -solana-net-utils = { path = "../net-utils", version = "=1.14.20" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.20" } +solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.21" } +solana-net-utils = { path = "../net-utils", version = "=1.14.21" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.21" } symlink = "0.1.0" [lib] diff --git a/runtime/Cargo.toml b/runtime/Cargo.toml index 3b721e9a5a756e..f2950a66044c42 100644 --- a/runtime/Cargo.toml +++ b/runtime/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-runtime" -version = "1.14.20" +version = "1.14.21" description = "Solana runtime" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -40,21 +40,21 @@ rayon = "1.5.3" regex = "1.5.6" serde = { version = "1.0.138", features = ["rc"] } serde_derive = "1.0.103" -solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.20" } -solana-bucket-map = { path = "../bucket_map", version = "=1.14.20" } -solana-compute-budget-program = { path = "../programs/compute-budget", version = "=1.14.20" } -solana-config-program = { path = "../programs/config", version = "=1.14.20" } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.20" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.20" } -solana-measure = { path = "../measure", version = "=1.14.20" } -solana-metrics = { path = "../metrics", version = "=1.14.20" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.20" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.20" } -solana-sdk = { path = "../sdk", version = "=1.14.20" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.20" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.20" } -solana-zk-token-proof-program = { path = "../programs/zk-token-proof", version = "=1.14.20" } -solana-zk-token-sdk = { path = "../zk-token-sdk", version = "=1.14.20" } +solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.21" } +solana-bucket-map = { path = "../bucket_map", version = "=1.14.21" } +solana-compute-budget-program = { path = "../programs/compute-budget", version = "=1.14.21" } +solana-config-program = { path = "../programs/config", version = "=1.14.21" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.21" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.21" } +solana-measure = { path = "../measure", version = "=1.14.21" } +solana-metrics = { path = "../metrics", version = "=1.14.21" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.21" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.21" } +solana-sdk = { path = "../sdk", version = "=1.14.21" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.21" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.21" } +solana-zk-token-proof-program = { path = "../programs/zk-token-proof", version = "=1.14.21" } +solana-zk-token-sdk = { path = "../zk-token-sdk", version = "=1.14.21" } strum = { version = "0.24", features = ["derive"] } strum_macros = "0.24" symlink = "0.1.0" @@ -72,7 +72,7 @@ assert_matches = "1.5.0" ed25519-dalek = "=1.0.1" libsecp256k1 = "0.6.0" rand_chacha = "0.2.2" -solana-logger = { path = "../logger", version = "=1.14.20" } +solana-logger = { path = "../logger", version = "=1.14.21" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/runtime/store-tool/Cargo.toml b/runtime/store-tool/Cargo.toml index 30891984da8802..12da65a2a3e720 100644 --- a/runtime/store-tool/Cargo.toml +++ b/runtime/store-tool/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-store-tool" description = "Tool to inspect append vecs" -version = "1.14.20" +version = "1.14.21" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -12,9 +12,9 @@ publish = false [dependencies] clap = "2.33.1" log = { version = "0.4.17" } -solana-logger = { path = "../../logger", version = "=1.14.20" } -solana-runtime = { path = "..", version = "=1.14.20" } -solana-version = { path = "../../version", version = "=1.14.20" } +solana-logger = { path = "../../logger", version = "=1.14.21" } +solana-runtime = { path = "..", version = "=1.14.21" } +solana-version = { path = "../../version", version = "=1.14.21" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/sdk/Cargo.toml b/sdk/Cargo.toml index bd83e608da4a10..8a2a44f8d480b9 100644 --- a/sdk/Cargo.toml +++ b/sdk/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-sdk" -version = "1.14.20" +version = "1.14.21" description = "Solana SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -71,11 +71,11 @@ serde_derive = "1.0.103" serde_json = { version = "1.0.81", optional = true } sha2 = "0.10.2" sha3 = { version = "0.10.1", optional = true } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.20" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.20" } -solana-logger = { path = "../logger", version = "=1.14.20", optional = true } -solana-program = { path = "program", version = "=1.14.20" } -solana-sdk-macro = { path = "macro", version = "=1.14.20" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.21" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.21" } +solana-logger = { path = "../logger", version = "=1.14.21", optional = true } +solana-program = { path = "program", version = "=1.14.21" } +solana-sdk-macro = { path = "macro", version = "=1.14.21" } thiserror = "1.0" uriparse = "0.6.4" wasm-bindgen = "0.2" diff --git a/sdk/cargo-build-bpf/Cargo.toml b/sdk/cargo-build-bpf/Cargo.toml index f175e2fe14d837..a03d14308b0a98 100644 --- a/sdk/cargo-build-bpf/Cargo.toml +++ b/sdk/cargo-build-bpf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-cargo-build-bpf" -version = "1.14.20" +version = "1.14.21" description = "Compile a local package and all of its dependencies using the Solana SBF SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,7 +12,7 @@ publish = false [dependencies] cargo_metadata = "0.15.0" clap = { version = "3.1.5", features = ["cargo", "env"] } -solana-sdk = { path = "..", version = "=1.14.20" } +solana-sdk = { path = "..", version = "=1.14.21" } [features] program = [] diff --git a/sdk/cargo-build-sbf/Cargo.toml b/sdk/cargo-build-sbf/Cargo.toml index 66889aef393fd1..52dae4d9aa2338 100644 --- a/sdk/cargo-build-sbf/Cargo.toml +++ b/sdk/cargo-build-sbf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-cargo-build-sbf" -version = "1.14.20" +version = "1.14.21" description = "Compile a local package and all of its dependencies using the Solana SBF SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -15,9 +15,9 @@ cargo_metadata = "0.15.0" clap = { version = "3.1.5", features = ["cargo", "env"] } log = { version = "0.4.14", features = ["std"] } regex = "1.5.6" -solana-download-utils = { path = "../../download-utils", version = "=1.14.20" } -solana-logger = { path = "../../logger", version = "=1.14.20" } -solana-sdk = { path = "..", version = "=1.14.20" } +solana-download-utils = { path = "../../download-utils", version = "=1.14.21" } +solana-logger = { path = "../../logger", version = "=1.14.21" } +solana-sdk = { path = "..", version = "=1.14.21" } tar = "0.4.38" [dev-dependencies] diff --git a/sdk/cargo-build-sbf/tests/crates/fail/Cargo.toml b/sdk/cargo-build-sbf/tests/crates/fail/Cargo.toml index c112d202e7405b..4266b3cf41de76 100644 --- a/sdk/cargo-build-sbf/tests/crates/fail/Cargo.toml +++ b/sdk/cargo-build-sbf/tests/crates/fail/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "fail" -version = "1.14.20" +version = "1.14.21" description = "Solana SBF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ edition = "2021" publish = false [dependencies] -solana-program = { path = "../../../../program", version = "=1.14.20" } +solana-program = { path = "../../../../program", version = "=1.14.21" } [lib] crate-type = ["cdylib"] diff --git a/sdk/cargo-build-sbf/tests/crates/noop/Cargo.toml b/sdk/cargo-build-sbf/tests/crates/noop/Cargo.toml index 72954667554d23..8d8228109edd01 100644 --- a/sdk/cargo-build-sbf/tests/crates/noop/Cargo.toml +++ b/sdk/cargo-build-sbf/tests/crates/noop/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "noop" -version = "1.14.20" +version = "1.14.21" description = "Solana SBF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ edition = "2021" publish = false [dependencies] -solana-program = { path = "../../../../program", version = "=1.14.20" } +solana-program = { path = "../../../../program", version = "=1.14.21" } [lib] crate-type = ["cdylib"] diff --git a/sdk/cargo-test-bpf/Cargo.toml b/sdk/cargo-test-bpf/Cargo.toml index 93d828b77a3369..6c824c0cdb49ed 100644 --- a/sdk/cargo-test-bpf/Cargo.toml +++ b/sdk/cargo-test-bpf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-cargo-test-bpf" -version = "1.14.20" +version = "1.14.21" description = "Execute all unit and integration tests after building with the Solana SBF SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/sdk/cargo-test-sbf/Cargo.toml b/sdk/cargo-test-sbf/Cargo.toml index 3cbc93043deccc..c9b78a4e0eff4c 100644 --- a/sdk/cargo-test-sbf/Cargo.toml +++ b/sdk/cargo-test-sbf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-cargo-test-sbf" -version = "1.14.20" +version = "1.14.21" description = "Execute all unit and integration tests after building with the Solana SBF SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/sdk/gen-headers/Cargo.toml b/sdk/gen-headers/Cargo.toml index 4c6f5ef620ae53..885a3af6ea3d13 100644 --- a/sdk/gen-headers/Cargo.toml +++ b/sdk/gen-headers/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "gen-headers" -version = "1.14.20" +version = "1.14.21" edition = "2021" license = "Apache-2.0" publish = false diff --git a/sdk/macro/Cargo.toml b/sdk/macro/Cargo.toml index 42cfe89c9c7b0d..8c404d7b2175b0 100644 --- a/sdk/macro/Cargo.toml +++ b/sdk/macro/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-sdk-macro" -version = "1.14.20" +version = "1.14.21" description = "Solana SDK Macro" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/sdk/program/Cargo.toml b/sdk/program/Cargo.toml index 3ef79881ef723f..abd88099c7072b 100644 --- a/sdk/program/Cargo.toml +++ b/sdk/program/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-program" -version = "1.14.20" +version = "1.14.21" description = "Solana Program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -31,9 +31,9 @@ serde_derive = "1.0" serde_json = "1.0" sha2 = "0.10.0" sha3 = "0.10.0" -solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.20" } -solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.20" } -solana-sdk-macro = { path = "../macro", version = "=1.14.20" } +solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.21" } +solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.21" } +solana-sdk-macro = { path = "../macro", version = "=1.14.21" } thiserror = "1.0" [target.'cfg(not(target_os = "solana"))'.dependencies] @@ -50,7 +50,7 @@ wasm-bindgen = "0.2" zeroize = { version = "1.3", default-features = true, features = ["zeroize_derive"] } [target.'cfg(not(target_os = "solana"))'.dev-dependencies] -solana-logger = { path = "../../logger", version = "=1.14.20" } +solana-logger = { path = "../../logger", version = "=1.14.21" } [target.'cfg(target_arch = "wasm32")'.dependencies] console_error_panic_hook = "0.1.7" diff --git a/send-transaction-service/Cargo.toml b/send-transaction-service/Cargo.toml index bc00ff2c08e5b3..ee765ffa9f2661 100644 --- a/send-transaction-service/Cargo.toml +++ b/send-transaction-service/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-send-transaction-service" -version = "1.14.20" +version = "1.14.21" description = "Solana send transaction service" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,14 +12,14 @@ edition = "2021" [dependencies] crossbeam-channel = "0.5" log = "0.4.17" -solana-client = { path = "../client", version = "=1.14.20" } -solana-measure = { path = "../measure", version = "=1.14.20" } -solana-metrics = { path = "../metrics", version = "=1.14.20" } -solana-runtime = { path = "../runtime", version = "=1.14.20" } -solana-sdk = { path = "../sdk", version = "=1.14.20" } +solana-client = { path = "../client", version = "=1.14.21" } +solana-measure = { path = "../measure", version = "=1.14.21" } +solana-metrics = { path = "../metrics", version = "=1.14.21" } +solana-runtime = { path = "../runtime", version = "=1.14.21" } +solana-sdk = { path = "../sdk", version = "=1.14.21" } [dev-dependencies] -solana-logger = { path = "../logger", version = "=1.14.20" } +solana-logger = { path = "../logger", version = "=1.14.21" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/stake-accounts/Cargo.toml b/stake-accounts/Cargo.toml index 65e63a20ee7431..37c3302c2f9d20 100644 --- a/stake-accounts/Cargo.toml +++ b/stake-accounts/Cargo.toml @@ -3,7 +3,7 @@ name = "solana-stake-accounts" description = "Blockchain, Rebuilt for Scale" authors = ["Solana Maintainers "] edition = "2021" -version = "1.14.20" +version = "1.14.21" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -11,15 +11,15 @@ documentation = "https://docs.rs/solana-stake-accounts" [dependencies] clap = "2.33.1" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.20" } -solana-cli-config = { path = "../cli-config", version = "=1.14.20" } -solana-client = { path = "../client", version = "=1.14.20" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.20" } -solana-sdk = { path = "../sdk", version = "=1.14.20" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.20" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.21" } +solana-cli-config = { path = "../cli-config", version = "=1.14.21" } +solana-client = { path = "../client", version = "=1.14.21" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.21" } +solana-sdk = { path = "../sdk", version = "=1.14.21" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.21" } [dev-dependencies] -solana-runtime = { path = "../runtime", version = "=1.14.20" } +solana-runtime = { path = "../runtime", version = "=1.14.21" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/storage-bigtable/Cargo.toml b/storage-bigtable/Cargo.toml index 277808e1148f91..bd82eb9f558e54 100644 --- a/storage-bigtable/Cargo.toml +++ b/storage-bigtable/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-storage-bigtable" -version = "1.14.20" +version = "1.14.21" description = "Solana Storage BigTable" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -27,10 +27,10 @@ prost-types = "0.11.0" serde = "1.0.138" serde_derive = "1.0.103" smpl_jwt = "0.7.1" -solana-metrics = { path = "../metrics", version = "=1.14.20" } -solana-sdk = { path = "../sdk", version = "=1.14.20" } -solana-storage-proto = { path = "../storage-proto", version = "=1.14.20" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.20" } +solana-metrics = { path = "../metrics", version = "=1.14.21" } +solana-sdk = { path = "../sdk", version = "=1.14.21" } +solana-storage-proto = { path = "../storage-proto", version = "=1.14.21" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.21" } thiserror = "1.0" tokio = "1" tonic = { version = "0.8.0", features = ["tls", "transport"] } diff --git a/storage-bigtable/build-proto/Cargo.toml b/storage-bigtable/build-proto/Cargo.toml index 88d9391a41d22c..bbd39b87210e55 100644 --- a/storage-bigtable/build-proto/Cargo.toml +++ b/storage-bigtable/build-proto/Cargo.toml @@ -7,7 +7,7 @@ license = "Apache-2.0" name = "proto" publish = false repository = "https://github.com/solana-labs/solana" -version = "1.14.20" +version = "1.14.21" [dependencies] tonic-build = "0.8.0" diff --git a/storage-proto/Cargo.toml b/storage-proto/Cargo.toml index 5f2d35203994e3..4b857c156eea27 100644 --- a/storage-proto/Cargo.toml +++ b/storage-proto/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-storage-proto" -version = "1.14.20" +version = "1.14.21" description = "Solana Storage Protobuf Definitions" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,9 +14,9 @@ bincode = "1.3.3" bs58 = "0.4.0" prost = "0.11.0" serde = "1.0.138" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.20" } -solana-sdk = { path = "../sdk", version = "=1.14.20" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.20" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.21" } +solana-sdk = { path = "../sdk", version = "=1.14.21" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.21" } [dev-dependencies] enum-iterator = "0.8.1" diff --git a/streamer/Cargo.toml b/streamer/Cargo.toml index 360afff22455d1..d4258a8e24656c 100644 --- a/streamer/Cargo.toml +++ b/streamer/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-streamer" -version = "1.14.20" +version = "1.14.21" description = "Solana Streamer" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -25,15 +25,15 @@ quinn = "0.8.3" rand = "0.7.0" rcgen = "0.9.2" rustls = { version = "0.20.6", features = ["dangerous_configuration"] } -solana-metrics = { path = "../metrics", version = "=1.14.20" } -solana-perf = { path = "../perf", version = "=1.14.20" } -solana-sdk = { path = "../sdk", version = "=1.14.20" } +solana-metrics = { path = "../metrics", version = "=1.14.21" } +solana-perf = { path = "../perf", version = "=1.14.21" } +solana-sdk = { path = "../sdk", version = "=1.14.21" } thiserror = "1.0" tokio = { version = "1", features = ["full"] } x509-parser = "0.14.0" [dev-dependencies] -solana-logger = { path = "../logger", version = "=1.14.20" } +solana-logger = { path = "../logger", version = "=1.14.21" } [lib] crate-type = ["lib"] diff --git a/sys-tuner/Cargo.toml b/sys-tuner/Cargo.toml index 43480728ee0e7b..47ffcc30ab1a71 100644 --- a/sys-tuner/Cargo.toml +++ b/sys-tuner/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-sys-tuner" description = "The solana cluster system tuner daemon" -version = "1.14.20" +version = "1.14.21" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,8 +14,8 @@ publish = true clap = "2.33.1" libc = "0.2.126" log = "0.4.17" -solana-logger = { path = "../logger", version = "=1.14.20" } -solana-version = { path = "../version", version = "=1.14.20" } +solana-logger = { path = "../logger", version = "=1.14.21" } +solana-version = { path = "../version", version = "=1.14.21" } [target."cfg(unix)".dependencies] unix_socket2 = "0.5.4" diff --git a/test-validator/Cargo.toml b/test-validator/Cargo.toml index 9a5d2c73adad18..51e682500d17a3 100644 --- a/test-validator/Cargo.toml +++ b/test-validator/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "solana-test-validator" description = "Blockchain, Rebuilt for Scale" -version = "1.14.20" +version = "1.14.21" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-test-validator" readme = "../README.md" @@ -15,19 +15,19 @@ base64 = "0.13.0" log = "0.4.17" serde_derive = "1.0.103" serde_json = "1.0.81" -solana-cli-output = { path = "../cli-output", version = "=1.14.20" } -solana-client = { path = "../client", version = "=1.14.20" } -solana-core = { path = "../core", version = "=1.14.20" } -solana-gossip = { path = "../gossip", version = "=1.14.20" } -solana-ledger = { path = "../ledger", version = "=1.14.20" } -solana-logger = { path = "../logger", version = "=1.14.20" } -solana-net-utils = { path = "../net-utils", version = "=1.14.20" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.20" } -solana-program-test = { path = "../program-test", version = "=1.14.20" } -solana-rpc = { path = "../rpc", version = "=1.14.20" } -solana-runtime = { path = "../runtime", version = "=1.14.20" } -solana-sdk = { path = "../sdk", version = "=1.14.20" } -solana-streamer = { path = "../streamer", version = "=1.14.20" } +solana-cli-output = { path = "../cli-output", version = "=1.14.21" } +solana-client = { path = "../client", version = "=1.14.21" } +solana-core = { path = "../core", version = "=1.14.21" } +solana-gossip = { path = "../gossip", version = "=1.14.21" } +solana-ledger = { path = "../ledger", version = "=1.14.21" } +solana-logger = { path = "../logger", version = "=1.14.21" } +solana-net-utils = { path = "../net-utils", version = "=1.14.21" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.21" } +solana-program-test = { path = "../program-test", version = "=1.14.21" } +solana-rpc = { path = "../rpc", version = "=1.14.21" } +solana-runtime = { path = "../runtime", version = "=1.14.21" } +solana-sdk = { path = "../sdk", version = "=1.14.21" } +solana-streamer = { path = "../streamer", version = "=1.14.21" } tokio = { version = "1", features = ["full"] } [package.metadata.docs.rs] diff --git a/tokens/Cargo.toml b/tokens/Cargo.toml index 19ea769db562d0..ae46ac8080746d 100644 --- a/tokens/Cargo.toml +++ b/tokens/Cargo.toml @@ -3,7 +3,7 @@ name = "solana-tokens" description = "Blockchain, Rebuilt for Scale" authors = ["Solana Maintainers "] edition = "2021" -version = "1.14.20" +version = "1.14.21" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -19,14 +19,14 @@ indexmap = "1.9.1" indicatif = "0.16.2" pickledb = { version = "0.5.1", default-features = false, features = ["yaml"] } serde = { version = "1.0", features = ["derive"] } -solana-account-decoder = { path = "../account-decoder", version = "=1.14.20" } -solana-clap-utils = { path = "../clap-utils", version = "=1.14.20" } -solana-cli-config = { path = "../cli-config", version = "=1.14.20" } -solana-client = { path = "../client", version = "=1.14.20" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.20" } -solana-sdk = { path = "../sdk", version = "=1.14.20" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.20" } -solana-version = { path = "../version", version = "=1.14.20" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.21" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.21" } +solana-cli-config = { path = "../cli-config", version = "=1.14.21" } +solana-client = { path = "../client", version = "=1.14.21" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.21" } +solana-sdk = { path = "../sdk", version = "=1.14.21" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.21" } +solana-version = { path = "../version", version = "=1.14.21" } spl-associated-token-account = { version = "=1.1.3" } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } tempfile = "3.4.0" @@ -34,6 +34,6 @@ thiserror = "1.0" [dev-dependencies] bincode = "1.3.3" -solana-logger = { path = "../logger", version = "=1.14.20" } -solana-streamer = { path = "../streamer", version = "=1.14.20" } -solana-test-validator = { path = "../test-validator", version = "=1.14.20" } +solana-logger = { path = "../logger", version = "=1.14.21" } +solana-streamer = { path = "../streamer", version = "=1.14.21" } +solana-test-validator = { path = "../test-validator", version = "=1.14.21" } diff --git a/transaction-dos/Cargo.toml b/transaction-dos/Cargo.toml index 9704fea8eb5e69..bb23bca6018b5d 100644 --- a/transaction-dos/Cargo.toml +++ b/transaction-dos/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-transaction-dos" -version = "1.14.20" +version = "1.14.21" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,23 +14,23 @@ clap = "2.33.1" log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.20" } -solana-cli = { path = "../cli", version = "=1.14.20" } -solana-client = { path = "../client", version = "=1.14.20" } -solana-core = { path = "../core", version = "=1.14.20" } -solana-faucet = { path = "../faucet", version = "=1.14.20" } -solana-gossip = { path = "../gossip", version = "=1.14.20" } -solana-logger = { path = "../logger", version = "=1.14.20" } -solana-measure = { path = "../measure", version = "=1.14.20" } -solana-net-utils = { path = "../net-utils", version = "=1.14.20" } -solana-runtime = { path = "../runtime", version = "=1.14.20" } -solana-sdk = { path = "../sdk", version = "=1.14.20" } -solana-streamer = { path = "../streamer", version = "=1.14.20" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.20" } -solana-version = { path = "../version", version = "=1.14.20" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.21" } +solana-cli = { path = "../cli", version = "=1.14.21" } +solana-client = { path = "../client", version = "=1.14.21" } +solana-core = { path = "../core", version = "=1.14.21" } +solana-faucet = { path = "../faucet", version = "=1.14.21" } +solana-gossip = { path = "../gossip", version = "=1.14.21" } +solana-logger = { path = "../logger", version = "=1.14.21" } +solana-measure = { path = "../measure", version = "=1.14.21" } +solana-net-utils = { path = "../net-utils", version = "=1.14.21" } +solana-runtime = { path = "../runtime", version = "=1.14.21" } +solana-sdk = { path = "../sdk", version = "=1.14.21" } +solana-streamer = { path = "../streamer", version = "=1.14.21" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.21" } +solana-version = { path = "../version", version = "=1.14.21" } [dev-dependencies] -solana-local-cluster = { path = "../local-cluster", version = "=1.14.20" } +solana-local-cluster = { path = "../local-cluster", version = "=1.14.21" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/transaction-status/Cargo.toml b/transaction-status/Cargo.toml index e20ebd7432aade..061ee2ee99005f 100644 --- a/transaction-status/Cargo.toml +++ b/transaction-status/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-transaction-status" -version = "1.14.20" +version = "1.14.21" description = "Solana transaction status types" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -20,12 +20,12 @@ log = "0.4.17" serde = "1.0.138" serde_derive = "1.0.103" serde_json = "1.0.81" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.20" } -solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.20" } -solana-measure = { path = "../measure", version = "=1.14.20" } -solana-metrics = { path = "../metrics", version = "=1.14.20" } -solana-sdk = { path = "../sdk", version = "=1.14.20" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.20" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.21" } +solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.21" } +solana-measure = { path = "../measure", version = "=1.14.21" } +solana-metrics = { path = "../metrics", version = "=1.14.21" } +solana-sdk = { path = "../sdk", version = "=1.14.21" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.21" } spl-associated-token-account = { version = "=1.1.3", features = ["no-entrypoint"] } spl-memo = { version = "=3.0.1", features = ["no-entrypoint"] } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } diff --git a/upload-perf/Cargo.toml b/upload-perf/Cargo.toml index ca680b2f4ef933..f284d9d58cbfc3 100644 --- a/upload-perf/Cargo.toml +++ b/upload-perf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-upload-perf" -version = "1.14.20" +version = "1.14.21" description = "Metrics Upload Utility" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -11,7 +11,7 @@ publish = false [dependencies] serde_json = "1.0.81" -solana-metrics = { path = "../metrics", version = "=1.14.20" } +solana-metrics = { path = "../metrics", version = "=1.14.21" } [[bin]] name = "solana-upload-perf" diff --git a/validator/Cargo.toml b/validator/Cargo.toml index 783e95e360dfd3..6991ed75fbc462 100644 --- a/validator/Cargo.toml +++ b/validator/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-validator" description = "Blockchain, Rebuilt for Scale" -version = "1.14.20" +version = "1.14.21" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -28,30 +28,30 @@ num_cpus = "1.13.1" rand = "0.7.0" serde = "1.0.138" serde_json = "1.0.81" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.20" } -solana-cli-config = { path = "../cli-config", version = "=1.14.20" } -solana-client = { path = "../client", version = "=1.14.20" } -solana-core = { path = "../core", version = "=1.14.20" } -solana-download-utils = { path = "../download-utils", version = "=1.14.20" } -solana-entry = { path = "../entry", version = "=1.14.20" } -solana-faucet = { path = "../faucet", version = "=1.14.20" } -solana-genesis-utils = { path = "../genesis-utils", version = "=1.14.20" } -solana-gossip = { path = "../gossip", version = "=1.14.20" } -solana-ledger = { path = "../ledger", version = "=1.14.20" } -solana-logger = { path = "../logger", version = "=1.14.20" } -solana-metrics = { path = "../metrics", version = "=1.14.20" } -solana-net-utils = { path = "../net-utils", version = "=1.14.20" } -solana-perf = { path = "../perf", version = "=1.14.20" } -solana-poh = { path = "../poh", version = "=1.14.20" } -solana-rpc = { path = "../rpc", version = "=1.14.20" } -solana-runtime = { path = "../runtime", version = "=1.14.20" } -solana-sdk = { path = "../sdk", version = "=1.14.20" } -solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.20" } -solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.20" } -solana-streamer = { path = "../streamer", version = "=1.14.20" } -solana-test-validator = { path = "../test-validator", version = "=1.14.20" } -solana-version = { path = "../version", version = "=1.14.20" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.20" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.21" } +solana-cli-config = { path = "../cli-config", version = "=1.14.21" } +solana-client = { path = "../client", version = "=1.14.21" } +solana-core = { path = "../core", version = "=1.14.21" } +solana-download-utils = { path = "../download-utils", version = "=1.14.21" } +solana-entry = { path = "../entry", version = "=1.14.21" } +solana-faucet = { path = "../faucet", version = "=1.14.21" } +solana-genesis-utils = { path = "../genesis-utils", version = "=1.14.21" } +solana-gossip = { path = "../gossip", version = "=1.14.21" } +solana-ledger = { path = "../ledger", version = "=1.14.21" } +solana-logger = { path = "../logger", version = "=1.14.21" } +solana-metrics = { path = "../metrics", version = "=1.14.21" } +solana-net-utils = { path = "../net-utils", version = "=1.14.21" } +solana-perf = { path = "../perf", version = "=1.14.21" } +solana-poh = { path = "../poh", version = "=1.14.21" } +solana-rpc = { path = "../rpc", version = "=1.14.21" } +solana-runtime = { path = "../runtime", version = "=1.14.21" } +solana-sdk = { path = "../sdk", version = "=1.14.21" } +solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.21" } +solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.21" } +solana-streamer = { path = "../streamer", version = "=1.14.21" } +solana-test-validator = { path = "../test-validator", version = "=1.14.21" } +solana-version = { path = "../version", version = "=1.14.21" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.21" } symlink = "0.1.0" [target.'cfg(not(target_env = "msvc"))'.dependencies] diff --git a/version/Cargo.toml b/version/Cargo.toml index bb9244de707395..8103b694d6869a 100644 --- a/version/Cargo.toml +++ b/version/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-version" -version = "1.14.20" +version = "1.14.21" description = "Solana Version" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,9 +14,9 @@ log = "0.4.17" semver = "1.0.10" serde = "1.0.138" serde_derive = "1.0.103" -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.20" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.20" } -solana-sdk = { path = "../sdk", version = "=1.14.20" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.21" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.21" } +solana-sdk = { path = "../sdk", version = "=1.14.21" } [lib] name = "solana_version" diff --git a/watchtower/Cargo.toml b/watchtower/Cargo.toml index 2111df8c071b74..bdaa1a3756f0eb 100644 --- a/watchtower/Cargo.toml +++ b/watchtower/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-watchtower" description = "Blockchain, Rebuilt for Scale" -version = "1.14.20" +version = "1.14.21" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -13,15 +13,15 @@ documentation = "https://docs.rs/solana-watchtower" clap = "2.33.1" humantime = "2.0.1" log = "0.4.17" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.20" } -solana-cli-config = { path = "../cli-config", version = "=1.14.20" } -solana-cli-output = { path = "../cli-output", version = "=1.14.20" } -solana-client = { path = "../client", version = "=1.14.20" } -solana-logger = { path = "../logger", version = "=1.14.20" } -solana-metrics = { path = "../metrics", version = "=1.14.20" } -solana-notifier = { path = "../notifier", version = "=1.14.20" } -solana-sdk = { path = "../sdk", version = "=1.14.20" } -solana-version = { path = "../version", version = "=1.14.20" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.21" } +solana-cli-config = { path = "../cli-config", version = "=1.14.21" } +solana-cli-output = { path = "../cli-output", version = "=1.14.21" } +solana-client = { path = "../client", version = "=1.14.21" } +solana-logger = { path = "../logger", version = "=1.14.21" } +solana-metrics = { path = "../metrics", version = "=1.14.21" } +solana-notifier = { path = "../notifier", version = "=1.14.21" } +solana-sdk = { path = "../sdk", version = "=1.14.21" } +solana-version = { path = "../version", version = "=1.14.21" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/zk-token-sdk/Cargo.toml b/zk-token-sdk/Cargo.toml index 24af5cc0d80be1..b7470833135f96 100644 --- a/zk-token-sdk/Cargo.toml +++ b/zk-token-sdk/Cargo.toml @@ -3,7 +3,7 @@ name = "solana-zk-token-sdk" description = "Solana Zk Token SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" -version = "1.14.20" +version = "1.14.21" license = "Apache-2.0" edition = "2021" @@ -12,7 +12,7 @@ base64 = "0.13" bytemuck = { version = "1.11.0", features = ["derive"] } num-derive = "0.3" num-traits = "0.2" -solana-program = { path = "../sdk/program", version = "=1.14.20" } +solana-program = { path = "../sdk/program", version = "=1.14.21" } [target.'cfg(not(target_os = "solana"))'.dependencies] aes-gcm-siv = "0.10.3" @@ -29,7 +29,7 @@ rand = "0.7" serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" sha3 = "0.9" -solana-sdk = { path = "../sdk", version = "=1.14.20" } +solana-sdk = { path = "../sdk", version = "=1.14.21" } subtle = "2" thiserror = "1.0" zeroize = { version = "1.3", default-features = false, features = ["zeroize_derive"] } From ab7a78eec38cb27f7022825689a692e4e597859a Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Tue, 11 Jul 2023 06:17:41 +0000 Subject: [PATCH 445/465] v1.14: ci: allow retrying publish-crate although passed (backport of #32441) (#32452) ci: allow retrying publish-crate although passed (#32441) ci: allow publish crate retry although passed (cherry picked from commit 1aa075fc2fd436c82d7cd9fbf305e5beb4e5eb27) Co-authored-by: Yihau Chen --- ci/buildkite-secondary.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/ci/buildkite-secondary.yml b/ci/buildkite-secondary.yml index 7dfa2a701c7967..83ebca7d9471a8 100644 --- a/ci/buildkite-secondary.yml +++ b/ci/buildkite-secondary.yml @@ -28,6 +28,9 @@ steps: command: "ci/publish-crate.sh" agents: queue: "release-build" + retry: + manual: + permit_on_passed: true timeout_in_minutes: 240 branches: "!master" - name: "publish tarball (aarch64-apple-darwin)" From c3681f124700a3eaa761d52e9f90f931763d44c5 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Fri, 14 Jul 2023 11:24:55 +0000 Subject: [PATCH 446/465] v1.14: Add --fail to curl for more robust retries (backport of #32494) (#32495) Add --fail to curl for more robust retries (#32494) (cherry picked from commit 6246d817d7faec2e6167058155967a9c1fae3029) Co-authored-by: Ryo Onodera --- ci/docker-run.sh | 2 +- ci/test-coverage.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/ci/docker-run.sh b/ci/docker-run.sh index 6ce4671a01c248..24ad02d0ee835b 100755 --- a/ci/docker-run.sh +++ b/ci/docker-run.sh @@ -99,7 +99,7 @@ ARGS+=( # We normalize CI to `1`; but codecov expects it to be `true` to detect Buildkite... # Unfortunately, codecov.io fails sometimes: # curl: (7) Failed to connect to codecov.io port 443: Connection timed out -CODECOV_ENVS=$(CI=true bash <(while ! curl -sS --retry 5 --retry-delay 2 --retry-connrefused https://codecov.io/env; do sleep 10; done)) +CODECOV_ENVS=$(CI=true bash <(while ! curl -sS --retry 5 --retry-delay 2 --retry-connrefused --fail https://codecov.io/env; do sleep 10; done)) if $INTERACTIVE; then if [[ -n $1 ]]; then diff --git a/ci/test-coverage.sh b/ci/test-coverage.sh index 89dc8c7f01da2f..c60972361a04fc 100755 --- a/ci/test-coverage.sh +++ b/ci/test-coverage.sh @@ -35,7 +35,7 @@ else # We normalize CI to `1`; but codecov expects it to be `true` to detect Buildkite... # Unfortunately, codecov.io fails sometimes: # curl: (7) Failed to connect to codecov.io port 443: Connection timed out - CI=true bash <(while ! curl -sS --retry 5 --retry-delay 2 --retry-connrefused https://codecov.io/bash; do sleep 10; done) -Z -X gcov -f target/cov/lcov.info + CI=true bash <(while ! curl -sS --retry 5 --retry-delay 2 --retry-connrefused --fail https://codecov.io/bash; do sleep 10; done) -Z -X gcov -f target/cov/lcov.info annotate --style success --context codecov.io \ "CodeCov report: https://codecov.io/github/solana-labs/solana/commit/${CI_COMMIT:0:9}" From e8ba9c297929888c42f3781abb93992ac484db62 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Fri, 14 Jul 2023 17:26:50 +0000 Subject: [PATCH 447/465] v1.14: ci: fix spl test (backport of #32471) (#32473) fix conflict Co-authored-by: yihau --- scripts/build-downstream-projects.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/scripts/build-downstream-projects.sh b/scripts/build-downstream-projects.sh index 5b1f862b6c40eb..0186baf65378d9 100755 --- a/scripts/build-downstream-projects.sh +++ b/scripts/build-downstream-projects.sh @@ -53,6 +53,7 @@ spl() { memo/program name-service/program stake-pool/program + stake-pool/single-pool ) set -x rm -rf spl From 2f82789929fdd866aa6027577c6ceafc95b37890 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Fri, 21 Jul 2023 17:07:23 +0000 Subject: [PATCH 448/465] v1.14: rolls out merkle shreds to ~20% of mainnet slots (backport of #32532) (#32581) * rolls out merkle shreds to ~20% of mainnet slots (#32532) (cherry picked from commit 9efa0eacacd2305dd3e282918d81073877d46b5c) # Conflicts: # core/src/broadcast_stage/standard_broadcast_run.rs * resolves mergify merge conflicts * patches tests --------- Co-authored-by: behzad nouri --- .../src/broadcast_stage/standard_broadcast_run.rs | 15 +++++++-------- ledger/src/blockstore.rs | 3 ++- ledger/src/shred.rs | 4 +++- 3 files changed, 12 insertions(+), 10 deletions(-) diff --git a/core/src/broadcast_stage/standard_broadcast_run.rs b/core/src/broadcast_stage/standard_broadcast_run.rs index 748f1510d6f25f..e56bb16c6857d7 100644 --- a/core/src/broadcast_stage/standard_broadcast_run.rs +++ b/core/src/broadcast_stage/standard_broadcast_run.rs @@ -82,8 +82,7 @@ impl StandardBroadcastRun { let shredder = Shredder::new(state.slot, state.parent, reference_tick, self.shred_version) .unwrap(); - let merkle_variant = - should_use_merkle_variant(state.slot, cluster_type, self.shred_version); + let merkle_variant = should_use_merkle_variant(state.slot, cluster_type); let (mut shreds, coding_shreds) = shredder.entries_to_shreds( keypair, &[], // entries @@ -145,7 +144,7 @@ impl StandardBroadcastRun { }; let shredder = Shredder::new(slot, parent_slot, reference_tick, self.shred_version).unwrap(); - let merkle_variant = should_use_merkle_variant(slot, cluster_type, self.shred_version); + let merkle_variant = should_use_merkle_variant(slot, cluster_type); let (data_shreds, coding_shreds) = shredder.entries_to_shreds( keypair, entries, @@ -498,10 +497,10 @@ impl BroadcastRun for StandardBroadcastRun { } } -fn should_use_merkle_variant(slot: Slot, cluster_type: ClusterType, shred_version: u16) -> bool { +fn should_use_merkle_variant(slot: Slot, cluster_type: ClusterType) -> bool { match cluster_type { - ClusterType::Testnet => shred_version == 28353, - _ => (slot % 19) == 1, + ClusterType::Testnet | ClusterType::Devnet | ClusterType::Development => true, + ClusterType::MainnetBeta => (slot % 19) < 4, } } @@ -775,13 +774,13 @@ mod test { } // At least as many coding shreds as data shreds. assert!(shreds.len() >= 29 * 2); - assert_eq!(shreds.iter().filter(|shred| shred.is_data()).count(), 29); + assert_eq!(shreds.iter().filter(|shred| shred.is_data()).count(), 30); process_ticks(75); while let Ok((recv_shreds, _)) = brecv.recv_timeout(Duration::from_secs(1)) { shreds.extend(recv_shreds.deref().clone()); } assert!(shreds.len() >= 33 * 2); - assert_eq!(shreds.iter().filter(|shred| shred.is_data()).count(), 33); + assert_eq!(shreds.iter().filter(|shred| shred.is_data()).count(), 34); } #[test] diff --git a/ledger/src/blockstore.rs b/ledger/src/blockstore.rs index 8f7f00cc302038..444f546b076448 100644 --- a/ledger/src/blockstore.rs +++ b/ledger/src/blockstore.rs @@ -5847,7 +5847,8 @@ pub mod tests { let gap: u64 = 10; assert!(gap > 3); // Create enough entries to ensure there are at least two shreds created - let num_entries = max_ticks_per_n_shreds(1, None) + 1; + let data_buffer_size = ShredData::capacity(/*merkle_proof_size:*/ None).unwrap(); + let num_entries = max_ticks_per_n_shreds(1, Some(data_buffer_size)) + 1; let entries = create_ticks(num_entries, 0, Hash::default()); let mut shreds = entries_to_test_shreds(&entries, slot, 0, true, 0, /*merkle_variant:*/ false); diff --git a/ledger/src/shred.rs b/ledger/src/shred.rs index 05f63f4e7d2097..cee0e72cfe11d2 100644 --- a/ledger/src/shred.rs +++ b/ledger/src/shred.rs @@ -1006,7 +1006,9 @@ pub fn max_entries_per_n_shred( num_shreds: u64, shred_data_size: Option, ) -> u64 { - let data_buffer_size = ShredData::capacity(/*merkle_proof_size:*/ None).unwrap(); + // Default 32:32 erasure batches yields 64 shreds; log2(64) = 6. + let merkle_proof_size = Some(6); + let data_buffer_size = ShredData::capacity(merkle_proof_size).unwrap(); let shred_data_size = shred_data_size.unwrap_or(data_buffer_size) as u64; let vec_size = bincode::serialized_size(&vec![entry]).unwrap(); let entry_size = bincode::serialized_size(entry).unwrap(); From 206eb4422693b2041eb6dd0c90b2ce5a6b3824d6 Mon Sep 17 00:00:00 2001 From: Yihau Chen Date: Sat, 22 Jul 2023 01:42:05 +0800 Subject: [PATCH 449/465] v1.14: ci: don't upload test result (#32585) --- .buildkite/hooks/post-command | 9 --------- 1 file changed, 9 deletions(-) diff --git a/.buildkite/hooks/post-command b/.buildkite/hooks/post-command index 4af3bcdadf349a..513b1b1f89b1a0 100644 --- a/.buildkite/hooks/post-command +++ b/.buildkite/hooks/post-command @@ -20,15 +20,6 @@ else SUCCESS=false fi - if [[ -n $BUILDKITE && -f "results.json" ]]; then - # prepare result file - awk '/{ "type": .* }/' results.json > sanitized-results.json - - # upload to datadog - cargo2junit > results.xml < sanitized-results.json - datadog-ci junit upload --service solana results.xml - fi - point_tags="pipeline=$BUILDKITE_PIPELINE_SLUG,job=$CI_LABEL,pr=$PR,success=$SUCCESS" point_tags="${point_tags// /\\ }" # Escape spaces From 2527473f97330b8183f4b6d3a8a0d7e0d805fa0f Mon Sep 17 00:00:00 2001 From: Will Hickey Date: Tue, 25 Jul 2023 14:02:31 -0500 Subject: [PATCH 450/465] Bump version to v1.14.22 (#32594) --- Cargo.lock | 492 +++++++++--------- account-decoder/Cargo.toml | 10 +- accounts-bench/Cargo.toml | 12 +- accounts-cluster-bench/Cargo.toml | 34 +- banking-bench/Cargo.toml | 26 +- banks-client/Cargo.toml | 12 +- banks-interface/Cargo.toml | 4 +- banks-server/Cargo.toml | 12 +- bench-streamer/Cargo.toml | 8 +- bench-tps/Cargo.toml | 38 +- bloom/Cargo.toml | 8 +- bucket_map/Cargo.toml | 8 +- clap-utils/Cargo.toml | 8 +- clap-v3-utils/Cargo.toml | 8 +- cli-config/Cargo.toml | 6 +- cli-output/Cargo.toml | 16 +- cli/Cargo.toml | 38 +- client-test/Cargo.toml | 32 +- client/Cargo.toml | 28 +- core/Cargo.toml | 56 +- dos/Cargo.toml | 30 +- download-utils/Cargo.toml | 6 +- entry/Cargo.toml | 16 +- faucet/Cargo.toml | 14 +- frozen-abi/Cargo.toml | 6 +- frozen-abi/macro/Cargo.toml | 2 +- genesis-utils/Cargo.toml | 8 +- genesis/Cargo.toml | 22 +- geyser-plugin-interface/Cargo.toml | 6 +- geyser-plugin-manager/Cargo.toml | 16 +- gossip/Cargo.toml | 38 +- install/Cargo.toml | 14 +- keygen/Cargo.toml | 12 +- ledger-tool/Cargo.toml | 30 +- ledger/Cargo.toml | 40 +- local-cluster/Cargo.toml | 28 +- log-analyzer/Cargo.toml | 6 +- logger/Cargo.toml | 2 +- measure/Cargo.toml | 4 +- merkle-root-bench/Cargo.toml | 12 +- merkle-tree/Cargo.toml | 4 +- metrics/Cargo.toml | 4 +- net-shaper/Cargo.toml | 4 +- net-utils/Cargo.toml | 8 +- notifier/Cargo.toml | 2 +- perf/Cargo.toml | 12 +- poh-bench/Cargo.toml | 14 +- poh/Cargo.toml | 20 +- program-runtime/Cargo.toml | 14 +- program-test/Cargo.toml | 20 +- .../address-lookup-table-tests/Cargo.toml | 8 +- programs/address-lookup-table/Cargo.toml | 12 +- programs/bpf-loader-tests/Cargo.toml | 8 +- programs/bpf/Cargo.lock | 490 ++++++++--------- programs/bpf/Cargo.toml | 28 +- programs/bpf/rust/128bit/Cargo.toml | 6 +- programs/bpf/rust/128bit_dep/Cargo.toml | 4 +- programs/bpf/rust/alloc/Cargo.toml | 4 +- programs/bpf/rust/call_depth/Cargo.toml | 4 +- programs/bpf/rust/caller_access/Cargo.toml | 4 +- programs/bpf/rust/curve25519/Cargo.toml | 6 +- programs/bpf/rust/custom_heap/Cargo.toml | 4 +- programs/bpf/rust/dep_crate/Cargo.toml | 6 +- .../bpf/rust/deprecated_loader/Cargo.toml | 4 +- programs/bpf/rust/dup_accounts/Cargo.toml | 4 +- programs/bpf/rust/error_handling/Cargo.toml | 4 +- programs/bpf/rust/external_spend/Cargo.toml | 4 +- programs/bpf/rust/finalize/Cargo.toml | 4 +- .../rust/get_minimum_delegation/Cargo.toml | 4 +- .../Cargo.toml | 4 +- .../rust/instruction_introspection/Cargo.toml | 4 +- programs/bpf/rust/invoke/Cargo.toml | 4 +- programs/bpf/rust/invoke_and_error/Cargo.toml | 4 +- programs/bpf/rust/invoke_and_ok/Cargo.toml | 4 +- .../bpf/rust/invoke_and_return/Cargo.toml | 4 +- programs/bpf/rust/invoked/Cargo.toml | 4 +- programs/bpf/rust/iter/Cargo.toml | 4 +- programs/bpf/rust/log_data/Cargo.toml | 4 +- programs/bpf/rust/many_args/Cargo.toml | 6 +- programs/bpf/rust/many_args_dep/Cargo.toml | 4 +- programs/bpf/rust/mem/Cargo.toml | 10 +- programs/bpf/rust/membuiltins/Cargo.toml | 6 +- programs/bpf/rust/noop/Cargo.toml | 4 +- programs/bpf/rust/panic/Cargo.toml | 4 +- programs/bpf/rust/param_passing/Cargo.toml | 6 +- .../bpf/rust/param_passing_dep/Cargo.toml | 4 +- programs/bpf/rust/rand/Cargo.toml | 4 +- programs/bpf/rust/realloc/Cargo.toml | 4 +- programs/bpf/rust/realloc_invoke/Cargo.toml | 6 +- .../bpf/rust/ro_account_modify/Cargo.toml | 4 +- programs/bpf/rust/ro_modify/Cargo.toml | 4 +- programs/bpf/rust/sanity/Cargo.toml | 10 +- .../bpf/rust/secp256k1_recover/Cargo.toml | 4 +- programs/bpf/rust/sha/Cargo.toml | 4 +- .../rust/sibling_inner_instruction/Cargo.toml | 4 +- .../bpf/rust/sibling_instruction/Cargo.toml | 4 +- programs/bpf/rust/simulation/Cargo.toml | 12 +- programs/bpf/rust/spoof1/Cargo.toml | 4 +- programs/bpf/rust/spoof1_system/Cargo.toml | 4 +- programs/bpf/rust/sysvar/Cargo.toml | 10 +- programs/bpf/rust/upgradeable/Cargo.toml | 4 +- programs/bpf/rust/upgraded/Cargo.toml | 4 +- programs/bpf_loader/Cargo.toml | 14 +- .../bpf_loader/gen-syscall-list/Cargo.toml | 2 +- programs/compute-budget/Cargo.toml | 6 +- programs/config/Cargo.toml | 8 +- programs/ed25519-tests/Cargo.toml | 6 +- programs/stake/Cargo.toml | 18 +- programs/vote/Cargo.toml | 14 +- programs/zk-token-proof-tests/Cargo.toml | 10 +- programs/zk-token-proof/Cargo.toml | 8 +- rayon-threadlimit/Cargo.toml | 2 +- rbpf-cli/Cargo.toml | 10 +- remote-wallet/Cargo.toml | 4 +- rpc-test/Cargo.toml | 18 +- rpc/Cargo.toml | 48 +- runtime/Cargo.toml | 34 +- runtime/store-tool/Cargo.toml | 8 +- sdk/Cargo.toml | 12 +- sdk/cargo-build-bpf/Cargo.toml | 4 +- sdk/cargo-build-sbf/Cargo.toml | 8 +- .../tests/crates/fail/Cargo.toml | 4 +- .../tests/crates/noop/Cargo.toml | 4 +- sdk/cargo-test-bpf/Cargo.toml | 2 +- sdk/cargo-test-sbf/Cargo.toml | 2 +- sdk/gen-headers/Cargo.toml | 2 +- sdk/macro/Cargo.toml | 2 +- sdk/program/Cargo.toml | 10 +- send-transaction-service/Cargo.toml | 14 +- stake-accounts/Cargo.toml | 16 +- storage-bigtable/Cargo.toml | 10 +- storage-bigtable/build-proto/Cargo.toml | 2 +- storage-proto/Cargo.toml | 8 +- streamer/Cargo.toml | 10 +- sys-tuner/Cargo.toml | 6 +- test-validator/Cargo.toml | 28 +- tokens/Cargo.toml | 24 +- transaction-dos/Cargo.toml | 32 +- transaction-status/Cargo.toml | 14 +- upload-perf/Cargo.toml | 4 +- validator/Cargo.toml | 50 +- version/Cargo.toml | 8 +- watchtower/Cargo.toml | 20 +- zk-token-sdk/Cargo.toml | 6 +- 144 files changed, 1278 insertions(+), 1278 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index f3660c8637ef94..28cdb17e9efb1e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1708,7 +1708,7 @@ dependencies = [ [[package]] name = "gen-headers" -version = "1.14.21" +version = "1.14.22" dependencies = [ "log", "regex", @@ -1716,7 +1716,7 @@ dependencies = [ [[package]] name = "gen-syscall-list" -version = "1.14.21" +version = "1.14.22" dependencies = [ "regex", ] @@ -3528,7 +3528,7 @@ dependencies = [ [[package]] name = "proto" -version = "1.14.21" +version = "1.14.22" dependencies = [ "protobuf-src", "tonic-build 0.8.0", @@ -3785,15 +3785,15 @@ dependencies = [ [[package]] name = "rbpf-cli" -version = "1.14.21" +version = "1.14.22" dependencies = [ "clap 3.2.23", "serde", "serde_json", "solana-bpf-loader-program", - "solana-logger 1.14.21", + "solana-logger 1.14.22", "solana-program-runtime", - "solana-sdk 1.14.21", + "solana-sdk 1.14.22", "solana_rbpf", ] @@ -4509,7 +4509,7 @@ dependencies = [ [[package]] name = "solana-account-decoder" -version = "1.14.21" +version = "1.14.22" dependencies = [ "Inflector", "base64 0.13.0", @@ -4522,7 +4522,7 @@ dependencies = [ "serde_json", "solana-address-lookup-table-program", "solana-config-program", - "solana-sdk 1.14.21", + "solana-sdk 1.14.22", "solana-vote-program", "spl-token", "spl-token-2022", @@ -4532,21 +4532,21 @@ dependencies = [ [[package]] name = "solana-accounts-bench" -version = "1.14.21" +version = "1.14.22" dependencies = [ "clap 2.33.3", "log", "rayon", - "solana-logger 1.14.21", + "solana-logger 1.14.22", "solana-measure", "solana-runtime", - "solana-sdk 1.14.21", + "solana-sdk 1.14.22", "solana-version", ] [[package]] name = "solana-accounts-cluster-bench" -version = "1.14.21" +version = "1.14.22" dependencies = [ "clap 2.33.3", "log", @@ -4559,11 +4559,11 @@ dependencies = [ "solana-faucet", "solana-gossip", "solana-local-cluster", - "solana-logger 1.14.21", + "solana-logger 1.14.22", "solana-measure", "solana-net-utils", "solana-runtime", - "solana-sdk 1.14.21", + "solana-sdk 1.14.22", "solana-streamer", "solana-test-validator", "solana-transaction-status", @@ -4573,7 +4573,7 @@ dependencies = [ [[package]] name = "solana-address-lookup-table-program" -version = "1.14.21" +version = "1.14.22" dependencies = [ "bincode", "bytemuck", @@ -4582,28 +4582,28 @@ dependencies = [ "num-traits", "rustc_version 0.4.0", "serde", - "solana-frozen-abi 1.14.21", - "solana-frozen-abi-macro 1.14.21", - "solana-program 1.14.21", + "solana-frozen-abi 1.14.22", + "solana-frozen-abi-macro 1.14.22", + "solana-program 1.14.22", "solana-program-runtime", - "solana-sdk 1.14.21", + "solana-sdk 1.14.22", "thiserror", ] [[package]] name = "solana-address-lookup-table-program-tests" -version = "1.14.21" +version = "1.14.22" dependencies = [ "assert_matches", "bincode", "solana-address-lookup-table-program", "solana-program-test", - "solana-sdk 1.14.21", + "solana-sdk 1.14.22", ] [[package]] name = "solana-banking-bench" -version = "1.14.21" +version = "1.14.22" dependencies = [ "clap 3.2.23", "crossbeam-channel", @@ -4614,27 +4614,27 @@ dependencies = [ "solana-core", "solana-gossip", "solana-ledger", - "solana-logger 1.14.21", + "solana-logger 1.14.22", "solana-measure", "solana-perf", "solana-poh", "solana-runtime", - "solana-sdk 1.14.21", + "solana-sdk 1.14.22", "solana-streamer", "solana-version", ] [[package]] name = "solana-banks-client" -version = "1.14.21" +version = "1.14.22" dependencies = [ "borsh", "futures 0.3.21", "solana-banks-interface", "solana-banks-server", - "solana-program 1.14.21", + "solana-program 1.14.22", "solana-runtime", - "solana-sdk 1.14.21", + "solana-sdk 1.14.22", "tarpc", "thiserror", "tokio", @@ -4643,16 +4643,16 @@ dependencies = [ [[package]] name = "solana-banks-interface" -version = "1.14.21" +version = "1.14.22" dependencies = [ "serde", - "solana-sdk 1.14.21", + "solana-sdk 1.14.22", "tarpc", ] [[package]] name = "solana-banks-server" -version = "1.14.21" +version = "1.14.22" dependencies = [ "bincode", "crossbeam-channel", @@ -4660,7 +4660,7 @@ dependencies = [ "solana-banks-interface", "solana-client", "solana-runtime", - "solana-sdk 1.14.21", + "solana-sdk 1.14.22", "solana-send-transaction-service", "tarpc", "tokio", @@ -4670,7 +4670,7 @@ dependencies = [ [[package]] name = "solana-bench-streamer" -version = "1.14.21" +version = "1.14.22" dependencies = [ "clap 3.2.23", "crossbeam-channel", @@ -4681,7 +4681,7 @@ dependencies = [ [[package]] name = "solana-bench-tps" -version = "1.14.21" +version = "1.14.22" dependencies = [ "clap 2.33.3", "crossbeam-channel", @@ -4698,13 +4698,13 @@ dependencies = [ "solana-genesis", "solana-gossip", "solana-local-cluster", - "solana-logger 1.14.21", + "solana-logger 1.14.22", "solana-measure", "solana-metrics", "solana-net-utils", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.21", + "solana-sdk 1.14.22", "solana-streamer", "solana-test-validator", "solana-version", @@ -4713,7 +4713,7 @@ dependencies = [ [[package]] name = "solana-bloom" -version = "1.14.21" +version = "1.14.22" dependencies = [ "bv", "fnv", @@ -4723,14 +4723,14 @@ dependencies = [ "rustc_version 0.4.0", "serde", "serde_derive", - "solana-frozen-abi 1.14.21", - "solana-frozen-abi-macro 1.14.21", - "solana-sdk 1.14.21", + "solana-frozen-abi 1.14.22", + "solana-frozen-abi-macro 1.14.22", + "solana-sdk 1.14.22", ] [[package]] name = "solana-bpf-loader-program" -version = "1.14.21" +version = "1.14.22" dependencies = [ "bincode", "byteorder", @@ -4741,26 +4741,26 @@ dependencies = [ "solana-metrics", "solana-program-runtime", "solana-runtime", - "solana-sdk 1.14.21", - "solana-zk-token-sdk 1.14.21", + "solana-sdk 1.14.22", + "solana-zk-token-sdk 1.14.22", "solana_rbpf", "thiserror", ] [[package]] name = "solana-bpf-loader-program-tests" -version = "1.14.21" +version = "1.14.22" dependencies = [ "assert_matches", "bincode", "solana-bpf-loader-program", "solana-program-test", - "solana-sdk 1.14.21", + "solana-sdk 1.14.22", ] [[package]] name = "solana-bucket-map" -version = "1.14.21" +version = "1.14.22" dependencies = [ "fs_extra", "log", @@ -4768,24 +4768,24 @@ dependencies = [ "modular-bitfield", "rand 0.7.3", "rayon", - "solana-logger 1.14.21", + "solana-logger 1.14.22", "solana-measure", - "solana-sdk 1.14.21", + "solana-sdk 1.14.22", "tempfile", ] [[package]] name = "solana-cargo-build-bpf" -version = "1.14.21" +version = "1.14.22" dependencies = [ "cargo_metadata", "clap 3.2.23", - "solana-sdk 1.14.21", + "solana-sdk 1.14.22", ] [[package]] name = "solana-cargo-build-sbf" -version = "1.14.21" +version = "1.14.22" dependencies = [ "bzip2", "cargo_metadata", @@ -4794,14 +4794,14 @@ dependencies = [ "regex", "serial_test", "solana-download-utils", - "solana-logger 1.14.21", - "solana-sdk 1.14.21", + "solana-logger 1.14.22", + "solana-sdk 1.14.22", "tar", ] [[package]] name = "solana-cargo-test-bpf" -version = "1.14.21" +version = "1.14.22" dependencies = [ "cargo_metadata", "clap 3.2.23", @@ -4809,7 +4809,7 @@ dependencies = [ [[package]] name = "solana-cargo-test-sbf" -version = "1.14.21" +version = "1.14.22" dependencies = [ "cargo_metadata", "clap 3.2.23", @@ -4817,14 +4817,14 @@ dependencies = [ [[package]] name = "solana-clap-utils" -version = "1.14.21" +version = "1.14.22" dependencies = [ "chrono", "clap 2.33.3", "rpassword", "solana-perf", "solana-remote-wallet", - "solana-sdk 1.14.21", + "solana-sdk 1.14.22", "tempfile", "thiserror", "tiny-bip39", @@ -4834,14 +4834,14 @@ dependencies = [ [[package]] name = "solana-clap-v3-utils" -version = "1.14.21" +version = "1.14.22" dependencies = [ "chrono", "clap 3.2.23", "rpassword", "solana-perf", "solana-remote-wallet", - "solana-sdk 1.14.21", + "solana-sdk 1.14.22", "tempfile", "thiserror", "tiny-bip39", @@ -4851,7 +4851,7 @@ dependencies = [ [[package]] name = "solana-cli" -version = "1.14.21" +version = "1.14.22" dependencies = [ "bincode", "bs58", @@ -4879,10 +4879,10 @@ dependencies = [ "solana-client", "solana-config-program", "solana-faucet", - "solana-logger 1.14.21", + "solana-logger 1.14.22", "solana-program-runtime", "solana-remote-wallet", - "solana-sdk 1.14.21", + "solana-sdk 1.14.22", "solana-streamer", "solana-test-validator", "solana-transaction-status", @@ -4897,7 +4897,7 @@ dependencies = [ [[package]] name = "solana-cli-config" -version = "1.14.21" +version = "1.14.22" dependencies = [ "anyhow", "dirs-next", @@ -4906,13 +4906,13 @@ dependencies = [ "serde_derive", "serde_yaml", "solana-clap-utils", - "solana-sdk 1.14.21", + "solana-sdk 1.14.22", "url 2.2.2", ] [[package]] name = "solana-cli-output" -version = "1.14.21" +version = "1.14.22" dependencies = [ "Inflector", "base64 0.13.0", @@ -4930,7 +4930,7 @@ dependencies = [ "solana-clap-utils", "solana-cli-config", "solana-client", - "solana-sdk 1.14.21", + "solana-sdk 1.14.22", "solana-transaction-status", "solana-vote-program", "spl-memo", @@ -4938,7 +4938,7 @@ dependencies = [ [[package]] name = "solana-client" -version = "1.14.21" +version = "1.14.22" dependencies = [ "anyhow", "assert_matches", @@ -4974,12 +4974,12 @@ dependencies = [ "solana-account-decoder", "solana-clap-utils", "solana-faucet", - "solana-logger 1.14.21", + "solana-logger 1.14.22", "solana-measure", "solana-metrics", "solana-net-utils", "solana-perf", - "solana-sdk 1.14.21", + "solana-sdk 1.14.22", "solana-streamer", "solana-transaction-status", "solana-version", @@ -4995,14 +4995,14 @@ dependencies = [ [[package]] name = "solana-client-test" -version = "1.14.21" +version = "1.14.22" dependencies = [ "futures-util", "serde_json", "serial_test", "solana-client", "solana-ledger", - "solana-logger 1.14.21", + "solana-logger 1.14.22", "solana-measure", "solana-merkle-tree", "solana-metrics", @@ -5010,7 +5010,7 @@ dependencies = [ "solana-rayon-threadlimit", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.21", + "solana-sdk 1.14.22", "solana-streamer", "solana-test-validator", "solana-transaction-status", @@ -5021,28 +5021,28 @@ dependencies = [ [[package]] name = "solana-compute-budget-program" -version = "1.14.21" +version = "1.14.22" dependencies = [ "solana-program-runtime", - "solana-sdk 1.14.21", + "solana-sdk 1.14.22", ] [[package]] name = "solana-config-program" -version = "1.14.21" +version = "1.14.22" dependencies = [ "bincode", "chrono", "serde", "serde_derive", - "solana-logger 1.14.21", + "solana-logger 1.14.22", "solana-program-runtime", - "solana-sdk 1.14.21", + "solana-sdk 1.14.22", ] [[package]] name = "solana-core" -version = "1.14.21" +version = "1.14.22" dependencies = [ "ahash", "base64 0.13.0", @@ -5075,12 +5075,12 @@ dependencies = [ "solana-bloom", "solana-client", "solana-entry", - "solana-frozen-abi 1.14.21", - "solana-frozen-abi-macro 1.14.21", + "solana-frozen-abi 1.14.22", + "solana-frozen-abi-macro 1.14.22", "solana-geyser-plugin-manager", "solana-gossip", "solana-ledger", - "solana-logger 1.14.21", + "solana-logger 1.14.22", "solana-measure", "solana-metrics", "solana-net-utils", @@ -5090,7 +5090,7 @@ dependencies = [ "solana-rayon-threadlimit", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.21", + "solana-sdk 1.14.22", "solana-send-transaction-service", "solana-stake-program", "solana-streamer", @@ -5110,7 +5110,7 @@ dependencies = [ [[package]] name = "solana-dos" -version = "1.14.21" +version = "1.14.22" dependencies = [ "bincode", "clap 3.2.23", @@ -5126,42 +5126,42 @@ dependencies = [ "solana-faucet", "solana-gossip", "solana-local-cluster", - "solana-logger 1.14.21", + "solana-logger 1.14.22", "solana-measure", "solana-net-utils", "solana-perf", "solana-rpc", - "solana-sdk 1.14.21", + "solana-sdk 1.14.22", "solana-streamer", "solana-version", ] [[package]] name = "solana-download-utils" -version = "1.14.21" +version = "1.14.22" dependencies = [ "console", "indicatif", "log", "reqwest", "solana-runtime", - "solana-sdk 1.14.21", + "solana-sdk 1.14.22", ] [[package]] name = "solana-ed25519-program-tests" -version = "1.14.21" +version = "1.14.22" dependencies = [ "assert_matches", "ed25519-dalek", "rand 0.7.3", "solana-program-test", - "solana-sdk 1.14.21", + "solana-sdk 1.14.22", ] [[package]] name = "solana-entry" -version = "1.14.21" +version = "1.14.22" dependencies = [ "bincode", "crossbeam-channel", @@ -5173,18 +5173,18 @@ dependencies = [ "rand 0.7.3", "rayon", "serde", - "solana-logger 1.14.21", + "solana-logger 1.14.22", "solana-measure", "solana-merkle-tree", "solana-metrics", "solana-perf", "solana-rayon-threadlimit", - "solana-sdk 1.14.21", + "solana-sdk 1.14.22", ] [[package]] name = "solana-faucet" -version = "1.14.21" +version = "1.14.22" dependencies = [ "bincode", "byteorder", @@ -5195,9 +5195,9 @@ dependencies = [ "serde_derive", "solana-clap-utils", "solana-cli-config", - "solana-logger 1.14.21", + "solana-logger 1.14.22", "solana-metrics", - "solana-sdk 1.14.21", + "solana-sdk 1.14.22", "solana-version", "spl-memo", "thiserror", @@ -5240,7 +5240,7 @@ dependencies = [ [[package]] name = "solana-frozen-abi" -version = "1.14.21" +version = "1.14.22" dependencies = [ "ahash", "blake3", @@ -5265,8 +5265,8 @@ dependencies = [ "serde_derive", "serde_json", "sha2 0.10.2", - "solana-frozen-abi-macro 1.14.21", - "solana-logger 1.14.21", + "solana-frozen-abi-macro 1.14.22", + "solana-logger 1.14.22", "subtle", "thiserror", ] @@ -5285,7 +5285,7 @@ dependencies = [ [[package]] name = "solana-frozen-abi-macro" -version = "1.14.21" +version = "1.14.22" dependencies = [ "proc-macro2 1.0.52", "quote 1.0.18", @@ -5295,7 +5295,7 @@ dependencies = [ [[package]] name = "solana-genesis" -version = "1.14.21" +version = "1.14.22" dependencies = [ "base64 0.13.0", "clap 2.33.3", @@ -5306,9 +5306,9 @@ dependencies = [ "solana-cli-config", "solana-entry", "solana-ledger", - "solana-logger 1.14.21", + "solana-logger 1.14.22", "solana-runtime", - "solana-sdk 1.14.21", + "solana-sdk 1.14.22", "solana-stake-program", "solana-version", "solana-vote-program", @@ -5317,26 +5317,26 @@ dependencies = [ [[package]] name = "solana-genesis-utils" -version = "1.14.21" +version = "1.14.22" dependencies = [ "solana-download-utils", "solana-runtime", - "solana-sdk 1.14.21", + "solana-sdk 1.14.22", ] [[package]] name = "solana-geyser-plugin-interface" -version = "1.14.21" +version = "1.14.22" dependencies = [ "log", - "solana-sdk 1.14.21", + "solana-sdk 1.14.22", "solana-transaction-status", "thiserror", ] [[package]] name = "solana-geyser-plugin-manager" -version = "1.14.21" +version = "1.14.22" dependencies = [ "bs58", "crossbeam-channel", @@ -5349,14 +5349,14 @@ dependencies = [ "solana-metrics", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.21", + "solana-sdk 1.14.22", "solana-transaction-status", "thiserror", ] [[package]] name = "solana-gossip" -version = "1.14.21" +version = "1.14.22" dependencies = [ "bincode", "bv", @@ -5383,17 +5383,17 @@ dependencies = [ "solana-clap-utils", "solana-client", "solana-entry", - "solana-frozen-abi 1.14.21", - "solana-frozen-abi-macro 1.14.21", + "solana-frozen-abi 1.14.22", + "solana-frozen-abi-macro 1.14.22", "solana-ledger", - "solana-logger 1.14.21", + "solana-logger 1.14.22", "solana-measure", "solana-metrics", "solana-net-utils", "solana-perf", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.14.21", + "solana-sdk 1.14.22", "solana-streamer", "solana-version", "solana-vote-program", @@ -5402,7 +5402,7 @@ dependencies = [ [[package]] name = "solana-install" -version = "1.14.21" +version = "1.14.22" dependencies = [ "atty", "bincode", @@ -5423,8 +5423,8 @@ dependencies = [ "solana-clap-utils", "solana-client", "solana-config-program", - "solana-logger 1.14.21", - "solana-sdk 1.14.21", + "solana-logger 1.14.22", + "solana-sdk 1.14.22", "solana-version", "tar", "tempfile", @@ -5435,7 +5435,7 @@ dependencies = [ [[package]] name = "solana-keygen" -version = "1.14.21" +version = "1.14.22" dependencies = [ "bs58", "clap 3.2.23", @@ -5444,14 +5444,14 @@ dependencies = [ "solana-clap-v3-utils", "solana-cli-config", "solana-remote-wallet", - "solana-sdk 1.14.21", + "solana-sdk 1.14.22", "solana-version", "tiny-bip39", ] [[package]] name = "solana-ledger" -version = "1.14.21" +version = "1.14.22" dependencies = [ "assert_matches", "bincode", @@ -5485,16 +5485,16 @@ dependencies = [ "solana-account-decoder", "solana-bpf-loader-program", "solana-entry", - "solana-frozen-abi 1.14.21", - "solana-frozen-abi-macro 1.14.21", - "solana-logger 1.14.21", + "solana-frozen-abi 1.14.22", + "solana-frozen-abi-macro 1.14.22", + "solana-logger 1.14.22", "solana-measure", "solana-metrics", "solana-perf", "solana-program-runtime", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.14.21", + "solana-sdk 1.14.22", "solana-stake-program", "solana-storage-bigtable", "solana-storage-proto", @@ -5513,7 +5513,7 @@ dependencies = [ [[package]] name = "solana-ledger-tool" -version = "1.14.21" +version = "1.14.22" dependencies = [ "assert_cmd", "base64 0.13.0", @@ -5535,10 +5535,10 @@ dependencies = [ "solana-core", "solana-entry", "solana-ledger", - "solana-logger 1.14.21", + "solana-logger 1.14.22", "solana-measure", "solana-runtime", - "solana-sdk 1.14.21", + "solana-sdk 1.14.22", "solana-stake-program", "solana-storage-bigtable", "solana-transaction-status", @@ -5550,7 +5550,7 @@ dependencies = [ [[package]] name = "solana-local-cluster" -version = "1.14.21" +version = "1.14.22" dependencies = [ "assert_matches", "crossbeam-channel", @@ -5568,9 +5568,9 @@ dependencies = [ "solana-entry", "solana-gossip", "solana-ledger", - "solana-logger 1.14.21", + "solana-logger 1.14.22", "solana-runtime", - "solana-sdk 1.14.21", + "solana-sdk 1.14.22", "solana-stake-program", "solana-streamer", "solana-vote-program", @@ -5579,13 +5579,13 @@ dependencies = [ [[package]] name = "solana-log-analyzer" -version = "1.14.21" +version = "1.14.22" dependencies = [ "byte-unit", "clap 3.2.23", "serde", "serde_json", - "solana-logger 1.14.21", + "solana-logger 1.14.22", "solana-version", ] @@ -5602,7 +5602,7 @@ dependencies = [ [[package]] name = "solana-logger" -version = "1.14.21" +version = "1.14.22" dependencies = [ "env_logger", "lazy_static", @@ -5611,38 +5611,38 @@ dependencies = [ [[package]] name = "solana-measure" -version = "1.14.21" +version = "1.14.22" dependencies = [ "log", - "solana-sdk 1.14.21", + "solana-sdk 1.14.22", ] [[package]] name = "solana-merkle-root-bench" -version = "1.14.21" +version = "1.14.22" dependencies = [ "clap 2.33.3", "log", - "solana-logger 1.14.21", + "solana-logger 1.14.22", "solana-measure", "solana-runtime", - "solana-sdk 1.14.21", + "solana-sdk 1.14.22", "solana-version", ] [[package]] name = "solana-merkle-tree" -version = "1.14.21" +version = "1.14.22" dependencies = [ "fast-math", "hex", "matches", - "solana-program 1.14.21", + "solana-program 1.14.22", ] [[package]] name = "solana-metrics" -version = "1.14.21" +version = "1.14.22" dependencies = [ "crossbeam-channel", "env_logger", @@ -5652,23 +5652,23 @@ dependencies = [ "rand 0.7.3", "reqwest", "serial_test", - "solana-sdk 1.14.21", + "solana-sdk 1.14.22", ] [[package]] name = "solana-net-shaper" -version = "1.14.21" +version = "1.14.22" dependencies = [ "clap 3.2.23", "rand 0.7.3", "serde", "serde_json", - "solana-logger 1.14.21", + "solana-logger 1.14.22", ] [[package]] name = "solana-net-utils" -version = "1.14.21" +version = "1.14.22" dependencies = [ "bincode", "clap 3.2.23", @@ -5679,8 +5679,8 @@ dependencies = [ "serde", "serde_derive", "socket2", - "solana-logger 1.14.21", - "solana-sdk 1.14.21", + "solana-logger 1.14.22", + "solana-sdk 1.14.22", "solana-version", "tokio", "url 2.2.2", @@ -5688,7 +5688,7 @@ dependencies = [ [[package]] name = "solana-notifier" -version = "1.14.21" +version = "1.14.22" dependencies = [ "log", "reqwest", @@ -5697,7 +5697,7 @@ dependencies = [ [[package]] name = "solana-perf" -version = "1.14.21" +version = "1.14.22" dependencies = [ "ahash", "bincode", @@ -5716,17 +5716,17 @@ dependencies = [ "rand_chacha 0.2.2", "rayon", "serde", - "solana-logger 1.14.21", + "solana-logger 1.14.22", "solana-metrics", "solana-rayon-threadlimit", - "solana-sdk 1.14.21", + "solana-sdk 1.14.22", "solana-vote-program", "test-case", ] [[package]] name = "solana-poh" -version = "1.14.21" +version = "1.14.22" dependencies = [ "bincode", "core_affinity", @@ -5736,29 +5736,29 @@ dependencies = [ "rand 0.7.3", "solana-entry", "solana-ledger", - "solana-logger 1.14.21", + "solana-logger 1.14.22", "solana-measure", "solana-metrics", "solana-perf", "solana-runtime", - "solana-sdk 1.14.21", + "solana-sdk 1.14.22", "solana-sys-tuner", "thiserror", ] [[package]] name = "solana-poh-bench" -version = "1.14.21" +version = "1.14.22" dependencies = [ "clap 3.2.23", "log", "rand 0.7.3", "rayon", "solana-entry", - "solana-logger 1.14.21", + "solana-logger 1.14.22", "solana-measure", "solana-perf", - "solana-sdk 1.14.21", + "solana-sdk 1.14.22", "solana-version", ] @@ -5813,7 +5813,7 @@ dependencies = [ [[package]] name = "solana-program" -version = "1.14.21" +version = "1.14.22" dependencies = [ "anyhow", "assert_matches", @@ -5851,10 +5851,10 @@ dependencies = [ "serde_json", "sha2 0.10.2", "sha3 0.10.1", - "solana-frozen-abi 1.14.21", - "solana-frozen-abi-macro 1.14.21", - "solana-logger 1.14.21", - "solana-sdk-macro 1.14.21", + "solana-frozen-abi 1.14.22", + "solana-frozen-abi-macro 1.14.22", + "solana-logger 1.14.22", + "solana-sdk-macro 1.14.22", "static_assertions", "thiserror", "tiny-bip39", @@ -5864,7 +5864,7 @@ dependencies = [ [[package]] name = "solana-program-runtime" -version = "1.14.21" +version = "1.14.22" dependencies = [ "base64 0.13.0", "bincode", @@ -5879,18 +5879,18 @@ dependencies = [ "rand 0.7.3", "rustc_version 0.4.0", "serde", - "solana-frozen-abi 1.14.21", - "solana-frozen-abi-macro 1.14.21", - "solana-logger 1.14.21", + "solana-frozen-abi 1.14.22", + "solana-frozen-abi-macro 1.14.22", + "solana-logger 1.14.22", "solana-measure", "solana-metrics", - "solana-sdk 1.14.21", + "solana-sdk 1.14.22", "thiserror", ] [[package]] name = "solana-program-test" -version = "1.14.21" +version = "1.14.22" dependencies = [ "assert_matches", "async-trait", @@ -5902,10 +5902,10 @@ dependencies = [ "solana-banks-client", "solana-banks-server", "solana-bpf-loader-program", - "solana-logger 1.14.21", + "solana-logger 1.14.22", "solana-program-runtime", "solana-runtime", - "solana-sdk 1.14.21", + "solana-sdk 1.14.22", "solana-stake-program", "solana-vote-program", "thiserror", @@ -5914,7 +5914,7 @@ dependencies = [ [[package]] name = "solana-rayon-threadlimit" -version = "1.14.21" +version = "1.14.22" dependencies = [ "lazy_static", "num_cpus", @@ -5922,7 +5922,7 @@ dependencies = [ [[package]] name = "solana-remote-wallet" -version = "1.14.21" +version = "1.14.22" dependencies = [ "console", "dialoguer", @@ -5933,14 +5933,14 @@ dependencies = [ "parking_lot 0.12.1", "qstring", "semver 1.0.10", - "solana-sdk 1.14.21", + "solana-sdk 1.14.22", "thiserror", "uriparse", ] [[package]] name = "solana-rpc" -version = "1.14.21" +version = "1.14.22" dependencies = [ "base64 0.13.0", "bincode", @@ -5976,7 +5976,7 @@ dependencies = [ "solana-poh", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.14.21", + "solana-sdk 1.14.22", "solana-send-transaction-service", "solana-stake-program", "solana-storage-bigtable", @@ -5995,7 +5995,7 @@ dependencies = [ [[package]] name = "solana-rpc-test" -version = "1.14.21" +version = "1.14.22" dependencies = [ "bincode", "bs58", @@ -6007,9 +6007,9 @@ dependencies = [ "serde_json", "solana-account-decoder", "solana-client", - "solana-logger 1.14.21", + "solana-logger 1.14.22", "solana-rpc", - "solana-sdk 1.14.21", + "solana-sdk 1.14.22", "solana-streamer", "solana-test-validator", "solana-transaction-status", @@ -6018,7 +6018,7 @@ dependencies = [ [[package]] name = "solana-runtime" -version = "1.14.21" +version = "1.14.22" dependencies = [ "arrayref", "assert_matches", @@ -6059,18 +6059,18 @@ dependencies = [ "solana-bucket-map", "solana-compute-budget-program", "solana-config-program", - "solana-frozen-abi 1.14.21", - "solana-frozen-abi-macro 1.14.21", - "solana-logger 1.14.21", + "solana-frozen-abi 1.14.22", + "solana-frozen-abi-macro 1.14.22", + "solana-logger 1.14.22", "solana-measure", "solana-metrics", "solana-program-runtime", "solana-rayon-threadlimit", - "solana-sdk 1.14.21", + "solana-sdk 1.14.22", "solana-stake-program", "solana-vote-program", "solana-zk-token-proof-program", - "solana-zk-token-sdk 1.14.21", + "solana-zk-token-sdk 1.14.22", "strum", "strum_macros", "symlink", @@ -6133,7 +6133,7 @@ dependencies = [ [[package]] name = "solana-sdk" -version = "1.14.21" +version = "1.14.22" dependencies = [ "anyhow", "assert_matches", @@ -6173,11 +6173,11 @@ dependencies = [ "serde_json", "sha2 0.10.2", "sha3 0.10.1", - "solana-frozen-abi 1.14.21", - "solana-frozen-abi-macro 1.14.21", - "solana-logger 1.14.21", - "solana-program 1.14.21", - "solana-sdk-macro 1.14.21", + "solana-frozen-abi 1.14.22", + "solana-frozen-abi-macro 1.14.22", + "solana-logger 1.14.22", + "solana-program 1.14.22", + "solana-sdk-macro 1.14.22", "static_assertions", "thiserror", "tiny-bip39", @@ -6200,7 +6200,7 @@ dependencies = [ [[package]] name = "solana-sdk-macro" -version = "1.14.21" +version = "1.14.22" dependencies = [ "bs58", "proc-macro2 1.0.52", @@ -6211,21 +6211,21 @@ dependencies = [ [[package]] name = "solana-send-transaction-service" -version = "1.14.21" +version = "1.14.22" dependencies = [ "crossbeam-channel", "log", "solana-client", - "solana-logger 1.14.21", + "solana-logger 1.14.22", "solana-measure", "solana-metrics", "solana-runtime", - "solana-sdk 1.14.21", + "solana-sdk 1.14.22", ] [[package]] name = "solana-stake-accounts" -version = "1.14.21" +version = "1.14.22" dependencies = [ "clap 2.33.3", "solana-clap-utils", @@ -6233,13 +6233,13 @@ dependencies = [ "solana-client", "solana-remote-wallet", "solana-runtime", - "solana-sdk 1.14.21", + "solana-sdk 1.14.22", "solana-stake-program", ] [[package]] name = "solana-stake-program" -version = "1.14.21" +version = "1.14.22" dependencies = [ "assert_matches", "bincode", @@ -6251,12 +6251,12 @@ dependencies = [ "serde", "serde_derive", "solana-config-program", - "solana-frozen-abi 1.14.21", - "solana-frozen-abi-macro 1.14.21", - "solana-logger 1.14.21", + "solana-frozen-abi 1.14.22", + "solana-frozen-abi-macro 1.14.22", + "solana-logger 1.14.22", "solana-metrics", "solana-program-runtime", - "solana-sdk 1.14.21", + "solana-sdk 1.14.22", "solana-vote-program", "test-case", "thiserror", @@ -6264,7 +6264,7 @@ dependencies = [ [[package]] name = "solana-storage-bigtable" -version = "1.14.21" +version = "1.14.22" dependencies = [ "backoff", "bincode", @@ -6285,7 +6285,7 @@ dependencies = [ "serde_derive", "smpl_jwt", "solana-metrics", - "solana-sdk 1.14.21", + "solana-sdk 1.14.22", "solana-storage-proto", "solana-transaction-status", "thiserror", @@ -6296,7 +6296,7 @@ dependencies = [ [[package]] name = "solana-storage-proto" -version = "1.14.21" +version = "1.14.22" dependencies = [ "bincode", "bs58", @@ -6305,25 +6305,25 @@ dependencies = [ "protobuf-src", "serde", "solana-account-decoder", - "solana-sdk 1.14.21", + "solana-sdk 1.14.22", "solana-transaction-status", "tonic-build 0.8.0", ] [[package]] name = "solana-store-tool" -version = "1.14.21" +version = "1.14.22" dependencies = [ "clap 2.33.3", "log", - "solana-logger 1.14.21", + "solana-logger 1.14.22", "solana-runtime", "solana-version", ] [[package]] name = "solana-streamer" -version = "1.14.21" +version = "1.14.22" dependencies = [ "crossbeam-channel", "futures-util", @@ -6340,10 +6340,10 @@ dependencies = [ "rand 0.7.3", "rcgen", "rustls 0.20.6", - "solana-logger 1.14.21", + "solana-logger 1.14.22", "solana-metrics", "solana-perf", - "solana-sdk 1.14.21", + "solana-sdk 1.14.22", "thiserror", "tokio", "x509-parser", @@ -6351,13 +6351,13 @@ dependencies = [ [[package]] name = "solana-sys-tuner" -version = "1.14.21" +version = "1.14.22" dependencies = [ "clap 2.33.3", "libc", "log", "nix", - "solana-logger 1.14.21", + "solana-logger 1.14.22", "solana-version", "sysctl", "unix_socket2", @@ -6366,7 +6366,7 @@ dependencies = [ [[package]] name = "solana-test-validator" -version = "1.14.21" +version = "1.14.22" dependencies = [ "base64 0.13.0", "log", @@ -6377,20 +6377,20 @@ dependencies = [ "solana-core", "solana-gossip", "solana-ledger", - "solana-logger 1.14.21", + "solana-logger 1.14.22", "solana-net-utils", "solana-program-runtime", "solana-program-test", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.21", + "solana-sdk 1.14.22", "solana-streamer", "tokio", ] [[package]] name = "solana-tokens" -version = "1.14.21" +version = "1.14.22" dependencies = [ "bincode", "chrono", @@ -6406,9 +6406,9 @@ dependencies = [ "solana-clap-utils", "solana-cli-config", "solana-client", - "solana-logger 1.14.21", + "solana-logger 1.14.22", "solana-remote-wallet", - "solana-sdk 1.14.21", + "solana-sdk 1.14.22", "solana-streamer", "solana-test-validator", "solana-transaction-status", @@ -6421,7 +6421,7 @@ dependencies = [ [[package]] name = "solana-transaction-dos" -version = "1.14.21" +version = "1.14.22" dependencies = [ "bincode", "clap 2.33.3", @@ -6435,11 +6435,11 @@ dependencies = [ "solana-faucet", "solana-gossip", "solana-local-cluster", - "solana-logger 1.14.21", + "solana-logger 1.14.22", "solana-measure", "solana-net-utils", "solana-runtime", - "solana-sdk 1.14.21", + "solana-sdk 1.14.22", "solana-streamer", "solana-transaction-status", "solana-version", @@ -6447,7 +6447,7 @@ dependencies = [ [[package]] name = "solana-transaction-status" -version = "1.14.21" +version = "1.14.22" dependencies = [ "Inflector", "base64 0.13.0", @@ -6463,7 +6463,7 @@ dependencies = [ "solana-address-lookup-table-program", "solana-measure", "solana-metrics", - "solana-sdk 1.14.21", + "solana-sdk 1.14.22", "solana-vote-program", "spl-associated-token-account", "spl-memo", @@ -6474,7 +6474,7 @@ dependencies = [ [[package]] name = "solana-upload-perf" -version = "1.14.21" +version = "1.14.22" dependencies = [ "serde_json", "solana-metrics", @@ -6482,7 +6482,7 @@ dependencies = [ [[package]] name = "solana-validator" -version = "1.14.21" +version = "1.14.22" dependencies = [ "chrono", "clap 2.33.3", @@ -6513,14 +6513,14 @@ dependencies = [ "solana-genesis-utils", "solana-gossip", "solana-ledger", - "solana-logger 1.14.21", + "solana-logger 1.14.22", "solana-metrics", "solana-net-utils", "solana-perf", "solana-poh", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.21", + "solana-sdk 1.14.22", "solana-send-transaction-service", "solana-storage-bigtable", "solana-streamer", @@ -6533,21 +6533,21 @@ dependencies = [ [[package]] name = "solana-version" -version = "1.14.21" +version = "1.14.22" dependencies = [ "log", "rustc_version 0.4.0", "semver 1.0.10", "serde", "serde_derive", - "solana-frozen-abi 1.14.21", - "solana-frozen-abi-macro 1.14.21", - "solana-sdk 1.14.21", + "solana-frozen-abi 1.14.22", + "solana-frozen-abi-macro 1.14.22", + "solana-sdk 1.14.22", ] [[package]] name = "solana-vote-program" -version = "1.14.21" +version = "1.14.22" dependencies = [ "bincode", "itertools", @@ -6558,19 +6558,19 @@ dependencies = [ "rustc_version 0.4.0", "serde", "serde_derive", - "solana-frozen-abi 1.14.21", - "solana-frozen-abi-macro 1.14.21", - "solana-logger 1.14.21", + "solana-frozen-abi 1.14.22", + "solana-frozen-abi-macro 1.14.22", + "solana-logger 1.14.22", "solana-metrics", "solana-program-runtime", - "solana-sdk 1.14.21", + "solana-sdk 1.14.22", "test-case", "thiserror", ] [[package]] name = "solana-watchtower" -version = "1.14.21" +version = "1.14.22" dependencies = [ "clap 2.33.3", "humantime", @@ -6579,35 +6579,35 @@ dependencies = [ "solana-cli-config", "solana-cli-output", "solana-client", - "solana-logger 1.14.21", + "solana-logger 1.14.22", "solana-metrics", "solana-notifier", - "solana-sdk 1.14.21", + "solana-sdk 1.14.22", "solana-version", ] [[package]] name = "solana-zk-token-proof-program" -version = "1.14.21" +version = "1.14.22" dependencies = [ "bytemuck", "getrandom 0.1.16", "num-derive", "num-traits", "solana-program-runtime", - "solana-sdk 1.14.21", - "solana-zk-token-sdk 1.14.21", + "solana-sdk 1.14.22", + "solana-zk-token-sdk 1.14.22", ] [[package]] name = "solana-zk-token-proof-program-tests" -version = "1.14.21" +version = "1.14.22" dependencies = [ "bytemuck", "solana-program-runtime", "solana-program-test", - "solana-sdk 1.14.21", - "solana-zk-token-sdk 1.14.21", + "solana-sdk 1.14.22", + "solana-zk-token-sdk 1.14.22", ] [[package]] @@ -6643,7 +6643,7 @@ dependencies = [ [[package]] name = "solana-zk-token-sdk" -version = "1.14.21" +version = "1.14.22" dependencies = [ "aes-gcm-siv", "arrayref", @@ -6663,8 +6663,8 @@ dependencies = [ "serde", "serde_json", "sha3 0.9.1", - "solana-program 1.14.21", - "solana-sdk 1.14.21", + "solana-program 1.14.22", + "solana-sdk 1.14.22", "subtle", "thiserror", "zeroize", diff --git a/account-decoder/Cargo.toml b/account-decoder/Cargo.toml index ffab3577863927..e665f4220bc918 100644 --- a/account-decoder/Cargo.toml +++ b/account-decoder/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-account-decoder" -version = "1.14.21" +version = "1.14.22" description = "Solana account decoder" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -19,10 +19,10 @@ lazy_static = "1.4.0" serde = "1.0.138" serde_derive = "1.0.103" serde_json = "1.0.81" -solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.21" } -solana-config-program = { path = "../programs/config", version = "=1.14.21" } -solana-sdk = { path = "../sdk", version = "=1.14.21" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.21" } +solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.22" } +solana-config-program = { path = "../programs/config", version = "=1.14.22" } +solana-sdk = { path = "../sdk", version = "=1.14.22" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.22" } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } spl-token-2022 = { version = "=0.6.1", features = ["no-entrypoint"] } thiserror = "1.0" diff --git a/accounts-bench/Cargo.toml b/accounts-bench/Cargo.toml index 038d8513fd59a6..aa4c6c29637321 100644 --- a/accounts-bench/Cargo.toml +++ b/accounts-bench/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-accounts-bench" -version = "1.14.21" +version = "1.14.22" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -12,11 +12,11 @@ publish = false clap = "2.33.1" log = "0.4.17" rayon = "1.5.3" -solana-logger = { path = "../logger", version = "=1.14.21" } -solana-measure = { path = "../measure", version = "=1.14.21" } -solana-runtime = { path = "../runtime", version = "=1.14.21" } -solana-sdk = { path = "../sdk", version = "=1.14.21" } -solana-version = { path = "../version", version = "=1.14.21" } +solana-logger = { path = "../logger", version = "=1.14.22" } +solana-measure = { path = "../measure", version = "=1.14.22" } +solana-runtime = { path = "../runtime", version = "=1.14.22" } +solana-sdk = { path = "../sdk", version = "=1.14.22" } +solana-version = { path = "../version", version = "=1.14.22" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/accounts-cluster-bench/Cargo.toml b/accounts-cluster-bench/Cargo.toml index cb386da7ece890..77e16fa4a89fa8 100644 --- a/accounts-cluster-bench/Cargo.toml +++ b/accounts-cluster-bench/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-accounts-cluster-bench" -version = "1.14.21" +version = "1.14.22" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -13,25 +13,25 @@ clap = "2.33.1" log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.21" } -solana-clap-utils = { path = "../clap-utils", version = "=1.14.21" } -solana-client = { path = "../client", version = "=1.14.21" } -solana-faucet = { path = "../faucet", version = "=1.14.21" } -solana-gossip = { path = "../gossip", version = "=1.14.21" } -solana-logger = { path = "../logger", version = "=1.14.21" } -solana-measure = { path = "../measure", version = "=1.14.21" } -solana-net-utils = { path = "../net-utils", version = "=1.14.21" } -solana-runtime = { path = "../runtime", version = "=1.14.21" } -solana-sdk = { path = "../sdk", version = "=1.14.21" } -solana-streamer = { path = "../streamer", version = "=1.14.21" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.21" } -solana-version = { path = "../version", version = "=1.14.21" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.22" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.22" } +solana-client = { path = "../client", version = "=1.14.22" } +solana-faucet = { path = "../faucet", version = "=1.14.22" } +solana-gossip = { path = "../gossip", version = "=1.14.22" } +solana-logger = { path = "../logger", version = "=1.14.22" } +solana-measure = { path = "../measure", version = "=1.14.22" } +solana-net-utils = { path = "../net-utils", version = "=1.14.22" } +solana-runtime = { path = "../runtime", version = "=1.14.22" } +solana-sdk = { path = "../sdk", version = "=1.14.22" } +solana-streamer = { path = "../streamer", version = "=1.14.22" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.22" } +solana-version = { path = "../version", version = "=1.14.22" } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } [dev-dependencies] -solana-core = { path = "../core", version = "=1.14.21" } -solana-local-cluster = { path = "../local-cluster", version = "=1.14.21" } -solana-test-validator = { path = "../test-validator", version = "=1.14.21" } +solana-core = { path = "../core", version = "=1.14.22" } +solana-local-cluster = { path = "../local-cluster", version = "=1.14.22" } +solana-test-validator = { path = "../test-validator", version = "=1.14.22" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/banking-bench/Cargo.toml b/banking-bench/Cargo.toml index e404724ac19d95..4310cb013fc9a6 100644 --- a/banking-bench/Cargo.toml +++ b/banking-bench/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-banking-bench" -version = "1.14.21" +version = "1.14.22" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,18 +14,18 @@ crossbeam-channel = "0.5" log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" -solana-client = { path = "../client", version = "=1.14.21" } -solana-core = { path = "../core", version = "=1.14.21" } -solana-gossip = { path = "../gossip", version = "=1.14.21" } -solana-ledger = { path = "../ledger", version = "=1.14.21" } -solana-logger = { path = "../logger", version = "=1.14.21" } -solana-measure = { path = "../measure", version = "=1.14.21" } -solana-perf = { path = "../perf", version = "=1.14.21" } -solana-poh = { path = "../poh", version = "=1.14.21" } -solana-runtime = { path = "../runtime", version = "=1.14.21" } -solana-sdk = { path = "../sdk", version = "=1.14.21" } -solana-streamer = { path = "../streamer", version = "=1.14.21" } -solana-version = { path = "../version", version = "=1.14.21" } +solana-client = { path = "../client", version = "=1.14.22" } +solana-core = { path = "../core", version = "=1.14.22" } +solana-gossip = { path = "../gossip", version = "=1.14.22" } +solana-ledger = { path = "../ledger", version = "=1.14.22" } +solana-logger = { path = "../logger", version = "=1.14.22" } +solana-measure = { path = "../measure", version = "=1.14.22" } +solana-perf = { path = "../perf", version = "=1.14.22" } +solana-poh = { path = "../poh", version = "=1.14.22" } +solana-runtime = { path = "../runtime", version = "=1.14.22" } +solana-sdk = { path = "../sdk", version = "=1.14.22" } +solana-streamer = { path = "../streamer", version = "=1.14.22" } +solana-version = { path = "../version", version = "=1.14.22" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/banks-client/Cargo.toml b/banks-client/Cargo.toml index a41082d0213422..55b6ea358c4087 100644 --- a/banks-client/Cargo.toml +++ b/banks-client/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-banks-client" -version = "1.14.21" +version = "1.14.22" description = "Solana banks client" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,17 +12,17 @@ edition = "2021" [dependencies] borsh = "0.9.3" futures = "0.3" -solana-banks-interface = { path = "../banks-interface", version = "=1.14.21" } -solana-program = { path = "../sdk/program", version = "=1.14.21" } -solana-sdk = { path = "../sdk", version = "=1.14.21" } +solana-banks-interface = { path = "../banks-interface", version = "=1.14.22" } +solana-program = { path = "../sdk/program", version = "=1.14.22" } +solana-sdk = { path = "../sdk", version = "=1.14.22" } tarpc = { version = "0.29.0", features = ["full"] } thiserror = "1.0" tokio = { version = "~1.14.1", features = ["full"] } tokio-serde = { version = "0.8", features = ["bincode"] } [dev-dependencies] -solana-banks-server = { path = "../banks-server", version = "=1.14.21" } -solana-runtime = { path = "../runtime", version = "=1.14.21" } +solana-banks-server = { path = "../banks-server", version = "=1.14.22" } +solana-runtime = { path = "../runtime", version = "=1.14.22" } [lib] crate-type = ["lib"] diff --git a/banks-interface/Cargo.toml b/banks-interface/Cargo.toml index d7cb22d144b937..9e1f73851cedfe 100644 --- a/banks-interface/Cargo.toml +++ b/banks-interface/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-banks-interface" -version = "1.14.21" +version = "1.14.22" description = "Solana banks RPC interface" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -11,7 +11,7 @@ edition = "2021" [dependencies] serde = { version = "1.0.138", features = ["derive"] } -solana-sdk = { path = "../sdk", version = "=1.14.21" } +solana-sdk = { path = "../sdk", version = "=1.14.22" } tarpc = { version = "0.29.0", features = ["full"] } [lib] diff --git a/banks-server/Cargo.toml b/banks-server/Cargo.toml index 3fd77e7fef1b71..f9efa731a9426f 100644 --- a/banks-server/Cargo.toml +++ b/banks-server/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-banks-server" -version = "1.14.21" +version = "1.14.22" description = "Solana banks server" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,11 +13,11 @@ edition = "2021" bincode = "1.3.3" crossbeam-channel = "0.5" futures = "0.3" -solana-banks-interface = { path = "../banks-interface", version = "=1.14.21" } -solana-client = { path = "../client", version = "=1.14.21" } -solana-runtime = { path = "../runtime", version = "=1.14.21" } -solana-sdk = { path = "../sdk", version = "=1.14.21" } -solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.21" } +solana-banks-interface = { path = "../banks-interface", version = "=1.14.22" } +solana-client = { path = "../client", version = "=1.14.22" } +solana-runtime = { path = "../runtime", version = "=1.14.22" } +solana-sdk = { path = "../sdk", version = "=1.14.22" } +solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.22" } tarpc = { version = "0.29.0", features = ["full"] } tokio = { version = "1", features = ["full"] } tokio-serde = { version = "0.8", features = ["bincode"] } diff --git a/bench-streamer/Cargo.toml b/bench-streamer/Cargo.toml index e0a5befe9beb69..6da9ed1645108c 100644 --- a/bench-streamer/Cargo.toml +++ b/bench-streamer/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-bench-streamer" -version = "1.14.21" +version = "1.14.22" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -11,9 +11,9 @@ publish = false [dependencies] clap = { version = "3.1.5", features = ["cargo"] } crossbeam-channel = "0.5" -solana-net-utils = { path = "../net-utils", version = "=1.14.21" } -solana-streamer = { path = "../streamer", version = "=1.14.21" } -solana-version = { path = "../version", version = "=1.14.21" } +solana-net-utils = { path = "../net-utils", version = "=1.14.22" } +solana-streamer = { path = "../streamer", version = "=1.14.22" } +solana-version = { path = "../version", version = "=1.14.22" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/bench-tps/Cargo.toml b/bench-tps/Cargo.toml index 71d680ea15abf3..640412e7e12a96 100644 --- a/bench-tps/Cargo.toml +++ b/bench-tps/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-bench-tps" -version = "1.14.21" +version = "1.14.22" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -15,28 +15,28 @@ log = "0.4.17" rayon = "1.5.3" serde_json = "1.0.81" serde_yaml = "0.8.26" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.21" } -solana-cli-config = { path = "../cli-config", version = "=1.14.21" } -solana-client = { path = "../client", version = "=1.14.21" } -solana-core = { path = "../core", version = "=1.14.21" } -solana-faucet = { path = "../faucet", version = "=1.14.21" } -solana-genesis = { path = "../genesis", version = "=1.14.21" } -solana-gossip = { path = "../gossip", version = "=1.14.21" } -solana-logger = { path = "../logger", version = "=1.14.21" } -solana-measure = { path = "../measure", version = "=1.14.21" } -solana-metrics = { path = "../metrics", version = "=1.14.21" } -solana-net-utils = { path = "../net-utils", version = "=1.14.21" } -solana-rpc = { path = "../rpc", version = "=1.14.21" } -solana-runtime = { path = "../runtime", version = "=1.14.21" } -solana-sdk = { path = "../sdk", version = "=1.14.21" } -solana-streamer = { path = "../streamer", version = "=1.14.21" } -solana-version = { path = "../version", version = "=1.14.21" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.22" } +solana-cli-config = { path = "../cli-config", version = "=1.14.22" } +solana-client = { path = "../client", version = "=1.14.22" } +solana-core = { path = "../core", version = "=1.14.22" } +solana-faucet = { path = "../faucet", version = "=1.14.22" } +solana-genesis = { path = "../genesis", version = "=1.14.22" } +solana-gossip = { path = "../gossip", version = "=1.14.22" } +solana-logger = { path = "../logger", version = "=1.14.22" } +solana-measure = { path = "../measure", version = "=1.14.22" } +solana-metrics = { path = "../metrics", version = "=1.14.22" } +solana-net-utils = { path = "../net-utils", version = "=1.14.22" } +solana-rpc = { path = "../rpc", version = "=1.14.22" } +solana-runtime = { path = "../runtime", version = "=1.14.22" } +solana-sdk = { path = "../sdk", version = "=1.14.22" } +solana-streamer = { path = "../streamer", version = "=1.14.22" } +solana-version = { path = "../version", version = "=1.14.22" } thiserror = "1.0" [dev-dependencies] serial_test = "0.8.0" -solana-local-cluster = { path = "../local-cluster", version = "=1.14.21" } -solana-test-validator = { path = "../test-validator", version = "=1.14.21" } +solana-local-cluster = { path = "../local-cluster", version = "=1.14.22" } +solana-test-validator = { path = "../test-validator", version = "=1.14.22" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/bloom/Cargo.toml b/bloom/Cargo.toml index 91960086454745..8639d5bfdfd797 100644 --- a/bloom/Cargo.toml +++ b/bloom/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bloom" -version = "1.14.21" +version = "1.14.22" description = "Solana bloom filter" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -17,9 +17,9 @@ rand = "0.7.0" rayon = "1.5.3" serde = { version = "1.0.138", features = ["rc"] } serde_derive = "1.0.103" -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.21" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.21" } -solana-sdk = { path = "../sdk", version = "=1.14.21" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.22" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.22" } +solana-sdk = { path = "../sdk", version = "=1.14.22" } [lib] crate-type = ["lib"] diff --git a/bucket_map/Cargo.toml b/bucket_map/Cargo.toml index 557109963ba478..23da0a270f37e1 100644 --- a/bucket_map/Cargo.toml +++ b/bucket_map/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bucket-map" -version = "1.14.21" +version = "1.14.22" description = "solana-bucket-map" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-bucket-map" @@ -15,14 +15,14 @@ log = { version = "0.4.17" } memmap2 = "0.5.3" modular-bitfield = "0.11.2" rand = "0.7.0" -solana-measure = { path = "../measure", version = "=1.14.21" } -solana-sdk = { path = "../sdk", version = "=1.14.21" } +solana-measure = { path = "../measure", version = "=1.14.22" } +solana-sdk = { path = "../sdk", version = "=1.14.22" } tempfile = "3.4.0" [dev-dependencies] fs_extra = "1.2.0" rayon = "1.5.3" -solana-logger = { path = "../logger", version = "=1.14.21" } +solana-logger = { path = "../logger", version = "=1.14.22" } [lib] crate-type = ["lib"] diff --git a/clap-utils/Cargo.toml b/clap-utils/Cargo.toml index 926b5bc89d5a38..cbbef30b2ead55 100644 --- a/clap-utils/Cargo.toml +++ b/clap-utils/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-clap-utils" -version = "1.14.21" +version = "1.14.22" description = "Solana utilities for the clap" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,9 +13,9 @@ edition = "2021" chrono = "0.4" clap = "2.33.0" rpassword = "6.0" -solana-perf = { path = "../perf", version = "=1.14.21" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.21", default-features = false } -solana-sdk = { path = "../sdk", version = "=1.14.21" } +solana-perf = { path = "../perf", version = "=1.14.22" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.22", default-features = false } +solana-sdk = { path = "../sdk", version = "=1.14.22" } thiserror = "1.0.31" tiny-bip39 = "0.8.2" uriparse = "0.6.4" diff --git a/clap-v3-utils/Cargo.toml b/clap-v3-utils/Cargo.toml index c836571fa54453..6fc8b0e5a7d6d5 100644 --- a/clap-v3-utils/Cargo.toml +++ b/clap-v3-utils/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-clap-v3-utils" -version = "1.14.21" +version = "1.14.22" description = "Solana utilities for the clap v3" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,9 +13,9 @@ edition = "2021" chrono = "0.4" clap = { version = "3.2.23", features = ["cargo"] } rpassword = "6.0" -solana-perf = { path = "../perf", version = "=1.14.21" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.21", default-features = false } -solana-sdk = { path = "../sdk", version = "=1.14.21" } +solana-perf = { path = "../perf", version = "=1.14.22" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.22", default-features = false } +solana-sdk = { path = "../sdk", version = "=1.14.22" } thiserror = "1.0.31" tiny-bip39 = "0.8.2" uriparse = "0.6.4" diff --git a/cli-config/Cargo.toml b/cli-config/Cargo.toml index b6455426956eca..cdd7aa546d4568 100644 --- a/cli-config/Cargo.toml +++ b/cli-config/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-cli-config" description = "Blockchain, Rebuilt for Scale" -version = "1.14.21" +version = "1.14.22" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -15,8 +15,8 @@ lazy_static = "1.4.0" serde = "1.0.138" serde_derive = "1.0.103" serde_yaml = "0.8.26" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.21" } -solana-sdk = { path = "../sdk", version = "=1.14.21" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.22" } +solana-sdk = { path = "../sdk", version = "=1.14.22" } url = "2.2.2" [dev-dependencies] diff --git a/cli-output/Cargo.toml b/cli-output/Cargo.toml index d931eb96cea93b..9ff7b91a55e657 100644 --- a/cli-output/Cargo.toml +++ b/cli-output/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-cli-output" description = "Blockchain, Rebuilt for Scale" -version = "1.14.21" +version = "1.14.22" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -21,13 +21,13 @@ pretty-hex = "0.3.0" semver = "1.0.10" serde = "1.0.138" serde_json = "1.0.81" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.21" } -solana-clap-utils = { path = "../clap-utils", version = "=1.14.21" } -solana-cli-config = { path = "../cli-config", version = "=1.14.21" } -solana-client = { path = "../client", version = "=1.14.21" } -solana-sdk = { path = "../sdk", version = "=1.14.21" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.21" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.21" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.22" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.22" } +solana-cli-config = { path = "../cli-config", version = "=1.14.22" } +solana-client = { path = "../client", version = "=1.14.22" } +solana-sdk = { path = "../sdk", version = "=1.14.22" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.22" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.22" } spl-memo = { version = "=3.0.1", features = ["no-entrypoint"] } [dev-dependencies] diff --git a/cli/Cargo.toml b/cli/Cargo.toml index 81dafc65b770e6..6fa0def6d52562 100644 --- a/cli/Cargo.toml +++ b/cli/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-cli" description = "Blockchain, Rebuilt for Scale" -version = "1.14.21" +version = "1.14.22" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -27,30 +27,30 @@ semver = "1.0.10" serde = "1.0.138" serde_derive = "1.0.103" serde_json = "1.0.81" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.21" } -solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.21" } -solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.21" } -solana-clap-utils = { path = "../clap-utils", version = "=1.14.21" } -solana-cli-config = { path = "../cli-config", version = "=1.14.21" } -solana-cli-output = { path = "../cli-output", version = "=1.14.21" } -solana-client = { path = "../client", version = "=1.14.21" } -solana-config-program = { path = "../programs/config", version = "=1.14.21" } -solana-faucet = { path = "../faucet", version = "=1.14.21" } -solana-logger = { path = "../logger", version = "=1.14.21" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.21" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.21" } -solana-sdk = { path = "../sdk", version = "=1.14.21" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.21" } -solana-version = { path = "../version", version = "=1.14.21" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.21" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.22" } +solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.22" } +solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.22" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.22" } +solana-cli-config = { path = "../cli-config", version = "=1.14.22" } +solana-cli-output = { path = "../cli-output", version = "=1.14.22" } +solana-client = { path = "../client", version = "=1.14.22" } +solana-config-program = { path = "../programs/config", version = "=1.14.22" } +solana-faucet = { path = "../faucet", version = "=1.14.22" } +solana-logger = { path = "../logger", version = "=1.14.22" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.22" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.22" } +solana-sdk = { path = "../sdk", version = "=1.14.22" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.22" } +solana-version = { path = "../version", version = "=1.14.22" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.22" } solana_rbpf = "=0.2.31" spl-memo = { version = "=3.0.1", features = ["no-entrypoint"] } thiserror = "1.0.31" tiny-bip39 = "0.8.2" [dev-dependencies] -solana-streamer = { path = "../streamer", version = "=1.14.21" } -solana-test-validator = { path = "../test-validator", version = "=1.14.21" } +solana-streamer = { path = "../streamer", version = "=1.14.22" } +solana-test-validator = { path = "../test-validator", version = "=1.14.22" } tempfile = "3.4.0" [[bin]] diff --git a/client-test/Cargo.toml b/client-test/Cargo.toml index af5cc8a39dac69..625eb464af006e 100644 --- a/client-test/Cargo.toml +++ b/client-test/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-client-test" -version = "1.14.21" +version = "1.14.22" description = "Solana RPC Test" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,25 +14,25 @@ publish = false futures-util = "0.3.21" serde_json = "1.0.81" serial_test = "0.8.0" -solana-client = { path = "../client", version = "=1.14.21" } -solana-ledger = { path = "../ledger", version = "=1.14.21" } -solana-measure = { path = "../measure", version = "=1.14.21" } -solana-merkle-tree = { path = "../merkle-tree", version = "=1.14.21" } -solana-metrics = { path = "../metrics", version = "=1.14.21" } -solana-perf = { path = "../perf", version = "=1.14.21" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.21" } -solana-rpc = { path = "../rpc", version = "=1.14.21" } -solana-runtime = { path = "../runtime", version = "=1.14.21" } -solana-sdk = { path = "../sdk", version = "=1.14.21" } -solana-streamer = { path = "../streamer", version = "=1.14.21" } -solana-test-validator = { path = "../test-validator", version = "=1.14.21" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.21" } -solana-version = { path = "../version", version = "=1.14.21" } +solana-client = { path = "../client", version = "=1.14.22" } +solana-ledger = { path = "../ledger", version = "=1.14.22" } +solana-measure = { path = "../measure", version = "=1.14.22" } +solana-merkle-tree = { path = "../merkle-tree", version = "=1.14.22" } +solana-metrics = { path = "../metrics", version = "=1.14.22" } +solana-perf = { path = "../perf", version = "=1.14.22" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.22" } +solana-rpc = { path = "../rpc", version = "=1.14.22" } +solana-runtime = { path = "../runtime", version = "=1.14.22" } +solana-sdk = { path = "../sdk", version = "=1.14.22" } +solana-streamer = { path = "../streamer", version = "=1.14.22" } +solana-test-validator = { path = "../test-validator", version = "=1.14.22" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.22" } +solana-version = { path = "../version", version = "=1.14.22" } systemstat = "0.1.11" tokio = { version = "~1.14.1", features = ["full"] } [dev-dependencies] -solana-logger = { path = "../logger", version = "=1.14.21" } +solana-logger = { path = "../logger", version = "=1.14.22" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/client/Cargo.toml b/client/Cargo.toml index f605f98c2adf60..f2ceafc1f6f4d8 100644 --- a/client/Cargo.toml +++ b/client/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-client" -version = "1.14.21" +version = "1.14.22" description = "Solana Client" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -38,17 +38,17 @@ semver = "1.0.10" serde = "1.0.138" serde_derive = "1.0.103" serde_json = "1.0.81" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.21" } -solana-clap-utils = { path = "../clap-utils", version = "=1.14.21" } -solana-faucet = { path = "../faucet", version = "=1.14.21" } -solana-measure = { path = "../measure", version = "=1.14.21" } -solana-metrics = { path = "../metrics", version = "=1.14.21" } -solana-net-utils = { path = "../net-utils", version = "=1.14.21" } -solana-sdk = { path = "../sdk", version = "=1.14.21" } -solana-streamer = { path = "../streamer", version = "=1.14.21" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.21" } -solana-version = { path = "../version", version = "=1.14.21" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.21" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.22" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.22" } +solana-faucet = { path = "../faucet", version = "=1.14.22" } +solana-measure = { path = "../measure", version = "=1.14.22" } +solana-metrics = { path = "../metrics", version = "=1.14.22" } +solana-net-utils = { path = "../net-utils", version = "=1.14.22" } +solana-sdk = { path = "../sdk", version = "=1.14.22" } +solana-streamer = { path = "../streamer", version = "=1.14.22" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.22" } +solana-version = { path = "../version", version = "=1.14.22" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.22" } spl-token-2022 = { version = "=0.6.1", features = ["no-entrypoint"] } thiserror = "1.0" tokio = { version = "1", features = ["full"] } @@ -61,8 +61,8 @@ url = "2.2.2" anyhow = "1.0.58" assert_matches = "1.5.0" jsonrpc-http-server = "18.0.0" -solana-logger = { path = "../logger", version = "=1.14.21" } -solana-perf = { path = "../perf", version = "=1.14.21" } +solana-logger = { path = "../logger", version = "=1.14.22" } +solana-perf = { path = "../perf", version = "=1.14.22" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/core/Cargo.toml b/core/Cargo.toml index 063b6e37fae418..2345732d04b957 100644 --- a/core/Cargo.toml +++ b/core/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "solana-core" description = "Blockchain, Rebuilt for Scale" -version = "1.14.21" +version = "1.14.22" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-core" readme = "../README.md" @@ -36,30 +36,30 @@ rand_chacha = "0.2.2" rayon = "1.5.3" serde = "1.0.138" serde_derive = "1.0.103" -solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.21" } -solana-bloom = { path = "../bloom", version = "=1.14.21" } -solana-client = { path = "../client", version = "=1.14.21" } -solana-entry = { path = "../entry", version = "=1.14.21" } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.21" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.21" } -solana-geyser-plugin-manager = { path = "../geyser-plugin-manager", version = "=1.14.21" } -solana-gossip = { path = "../gossip", version = "=1.14.21" } -solana-ledger = { path = "../ledger", version = "=1.14.21" } -solana-measure = { path = "../measure", version = "=1.14.21" } -solana-metrics = { path = "../metrics", version = "=1.14.21" } -solana-net-utils = { path = "../net-utils", version = "=1.14.21" } -solana-perf = { path = "../perf", version = "=1.14.21" } -solana-poh = { path = "../poh", version = "=1.14.21" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.21" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.21" } -solana-rpc = { path = "../rpc", version = "=1.14.21" } -solana-runtime = { path = "../runtime", version = "=1.14.21" } -solana-sdk = { path = "../sdk", version = "=1.14.21" } -solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.21" } -solana-streamer = { path = "../streamer", version = "=1.14.21" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.21" } -solana-version = { path = "../version", version = "=1.14.21" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.21" } +solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.22" } +solana-bloom = { path = "../bloom", version = "=1.14.22" } +solana-client = { path = "../client", version = "=1.14.22" } +solana-entry = { path = "../entry", version = "=1.14.22" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.22" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.22" } +solana-geyser-plugin-manager = { path = "../geyser-plugin-manager", version = "=1.14.22" } +solana-gossip = { path = "../gossip", version = "=1.14.22" } +solana-ledger = { path = "../ledger", version = "=1.14.22" } +solana-measure = { path = "../measure", version = "=1.14.22" } +solana-metrics = { path = "../metrics", version = "=1.14.22" } +solana-net-utils = { path = "../net-utils", version = "=1.14.22" } +solana-perf = { path = "../perf", version = "=1.14.22" } +solana-poh = { path = "../poh", version = "=1.14.22" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.22" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.22" } +solana-rpc = { path = "../rpc", version = "=1.14.22" } +solana-runtime = { path = "../runtime", version = "=1.14.22" } +solana-sdk = { path = "../sdk", version = "=1.14.22" } +solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.22" } +solana-streamer = { path = "../streamer", version = "=1.14.22" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.22" } +solana-version = { path = "../version", version = "=1.14.22" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.22" } sys-info = "0.9.1" tempfile = "3.4.0" thiserror = "1.0" @@ -71,9 +71,9 @@ matches = "0.1.9" raptorq = "1.7.0" serde_json = "1.0.81" serial_test = "0.8.0" -solana-logger = { path = "../logger", version = "=1.14.21" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.21" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.21" } +solana-logger = { path = "../logger", version = "=1.14.22" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.22" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.22" } static_assertions = "1.1.0" systemstat = "0.1.11" test-case = "2.1.0" diff --git a/dos/Cargo.toml b/dos/Cargo.toml index 4f6abd70c4f5a8..de5f7b1824ddd4 100644 --- a/dos/Cargo.toml +++ b/dos/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-dos" -version = "1.14.21" +version = "1.14.22" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -17,23 +17,23 @@ itertools = "0.10.3" log = "0.4.17" rand = "0.7.0" serde = "1.0.138" -solana-bench-tps = { path = "../bench-tps", version = "=1.14.21" } -solana-client = { path = "../client", version = "=1.14.21" } -solana-core = { path = "../core", version = "=1.14.21" } -solana-faucet = { path = "../faucet", version = "=1.14.21" } -solana-gossip = { path = "../gossip", version = "=1.14.21" } -solana-logger = { path = "../logger", version = "=1.14.21" } -solana-measure = { path = "../measure", version = "=1.14.21" } -solana-net-utils = { path = "../net-utils", version = "=1.14.21" } -solana-perf = { path = "../perf", version = "=1.14.21" } -solana-rpc = { path = "../rpc", version = "=1.14.21" } -solana-sdk = { path = "../sdk", version = "=1.14.21" } -solana-streamer = { path = "../streamer", version = "=1.14.21" } -solana-version = { path = "../version", version = "=1.14.21" } +solana-bench-tps = { path = "../bench-tps", version = "=1.14.22" } +solana-client = { path = "../client", version = "=1.14.22" } +solana-core = { path = "../core", version = "=1.14.22" } +solana-faucet = { path = "../faucet", version = "=1.14.22" } +solana-gossip = { path = "../gossip", version = "=1.14.22" } +solana-logger = { path = "../logger", version = "=1.14.22" } +solana-measure = { path = "../measure", version = "=1.14.22" } +solana-net-utils = { path = "../net-utils", version = "=1.14.22" } +solana-perf = { path = "../perf", version = "=1.14.22" } +solana-rpc = { path = "../rpc", version = "=1.14.22" } +solana-sdk = { path = "../sdk", version = "=1.14.22" } +solana-streamer = { path = "../streamer", version = "=1.14.22" } +solana-version = { path = "../version", version = "=1.14.22" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] [dev-dependencies] serial_test = "0.8.0" -solana-local-cluster = { path = "../local-cluster", version = "=1.14.21" } +solana-local-cluster = { path = "../local-cluster", version = "=1.14.22" } diff --git a/download-utils/Cargo.toml b/download-utils/Cargo.toml index 71e438be752a2b..80646f72f28bd4 100644 --- a/download-utils/Cargo.toml +++ b/download-utils/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-download-utils" -version = "1.14.21" +version = "1.14.22" description = "Solana Download Utils" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,8 +14,8 @@ console = "0.15.0" indicatif = "0.16.2" log = "0.4.17" reqwest = { version = "0.11.11", default-features = false, features = ["blocking", "brotli", "deflate", "gzip", "rustls-tls", "json"] } -solana-runtime = { path = "../runtime", version = "=1.14.21" } -solana-sdk = { path = "../sdk", version = "=1.14.21" } +solana-runtime = { path = "../runtime", version = "=1.14.22" } +solana-sdk = { path = "../sdk", version = "=1.14.22" } [lib] crate-type = ["lib"] diff --git a/entry/Cargo.toml b/entry/Cargo.toml index 2307c8d7fec5bd..39a01d62e77051 100644 --- a/entry/Cargo.toml +++ b/entry/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-entry" -version = "1.14.21" +version = "1.14.22" description = "Solana Entry" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -19,16 +19,16 @@ log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" serde = "1.0.138" -solana-measure = { path = "../measure", version = "=1.14.21" } -solana-merkle-tree = { path = "../merkle-tree", version = "=1.14.21" } -solana-metrics = { path = "../metrics", version = "=1.14.21" } -solana-perf = { path = "../perf", version = "=1.14.21" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.21" } -solana-sdk = { path = "../sdk", version = "=1.14.21" } +solana-measure = { path = "../measure", version = "=1.14.22" } +solana-merkle-tree = { path = "../merkle-tree", version = "=1.14.22" } +solana-metrics = { path = "../metrics", version = "=1.14.22" } +solana-perf = { path = "../perf", version = "=1.14.22" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.22" } +solana-sdk = { path = "../sdk", version = "=1.14.22" } [dev-dependencies] matches = "0.1.9" -solana-logger = { path = "../logger", version = "=1.14.21" } +solana-logger = { path = "../logger", version = "=1.14.22" } [lib] crate-type = ["lib"] diff --git a/faucet/Cargo.toml b/faucet/Cargo.toml index 098f1e3170339b..330beaadd15832 100644 --- a/faucet/Cargo.toml +++ b/faucet/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-faucet" -version = "1.14.21" +version = "1.14.22" description = "Solana Faucet" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -17,12 +17,12 @@ crossbeam-channel = "0.5" log = "0.4.17" serde = "1.0.138" serde_derive = "1.0.103" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.21" } -solana-cli-config = { path = "../cli-config", version = "=1.14.21" } -solana-logger = { path = "../logger", version = "=1.14.21" } -solana-metrics = { path = "../metrics", version = "=1.14.21" } -solana-sdk = { path = "../sdk", version = "=1.14.21" } -solana-version = { path = "../version", version = "=1.14.21" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.22" } +solana-cli-config = { path = "../cli-config", version = "=1.14.22" } +solana-logger = { path = "../logger", version = "=1.14.22" } +solana-metrics = { path = "../metrics", version = "=1.14.22" } +solana-sdk = { path = "../sdk", version = "=1.14.22" } +solana-version = { path = "../version", version = "=1.14.22" } spl-memo = { version = "=3.0.1", features = ["no-entrypoint"] } thiserror = "1.0" tokio = { version = "1", features = ["full"] } diff --git a/frozen-abi/Cargo.toml b/frozen-abi/Cargo.toml index 315d6102be7c12..f214267733aa0b 100644 --- a/frozen-abi/Cargo.toml +++ b/frozen-abi/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-frozen-abi" -version = "1.14.21" +version = "1.14.22" description = "Solana Frozen ABI" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -20,7 +20,7 @@ serde_bytes = "0.11" serde_derive = "1.0" serde_json = "1.0" sha2 = "0.10.2" -solana-frozen-abi-macro = { path = "macro", version = "=1.14.21" } +solana-frozen-abi-macro = { path = "macro", version = "=1.14.22" } thiserror = "1.0" [target.'cfg(not(target_os = "solana"))'.dependencies] @@ -43,7 +43,7 @@ rand_core = { version = "0.6.3", features = ["alloc", "getrandom", "std"] } subtle = { version = "2.4.1", features = ["default", "i128", "std"] } [target.'cfg(not(target_os = "solana"))'.dev-dependencies] -solana-logger = { path = "../logger", version = "=1.14.21" } +solana-logger = { path = "../logger", version = "=1.14.22" } [build-dependencies] rustc_version = "0.4" diff --git a/frozen-abi/macro/Cargo.toml b/frozen-abi/macro/Cargo.toml index 2e17cd01212782..08fba5c6469eb1 100644 --- a/frozen-abi/macro/Cargo.toml +++ b/frozen-abi/macro/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-frozen-abi-macro" -version = "1.14.21" +version = "1.14.22" description = "Solana Frozen ABI Macro" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/genesis-utils/Cargo.toml b/genesis-utils/Cargo.toml index 3977114d76c482..58b17c26cb356b 100644 --- a/genesis-utils/Cargo.toml +++ b/genesis-utils/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-genesis-utils" -version = "1.14.21" +version = "1.14.22" description = "Solana Genesis Utils" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,9 +10,9 @@ documentation = "https://docs.rs/solana-download-utils" edition = "2021" [dependencies] -solana-download-utils = { path = "../download-utils", version = "=1.14.21" } -solana-runtime = { path = "../runtime", version = "=1.14.21" } -solana-sdk = { path = "../sdk", version = "=1.14.21" } +solana-download-utils = { path = "../download-utils", version = "=1.14.22" } +solana-runtime = { path = "../runtime", version = "=1.14.22" } +solana-sdk = { path = "../sdk", version = "=1.14.22" } [lib] crate-type = ["lib"] diff --git a/genesis/Cargo.toml b/genesis/Cargo.toml index eb94904ea5db61..cf930eb37eadca 100644 --- a/genesis/Cargo.toml +++ b/genesis/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-genesis" description = "Blockchain, Rebuilt for Scale" -version = "1.14.21" +version = "1.14.22" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -15,16 +15,16 @@ clap = "2.33.1" serde = "1.0.138" serde_json = "1.0.81" serde_yaml = "0.8.26" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.21" } -solana-cli-config = { path = "../cli-config", version = "=1.14.21" } -solana-entry = { path = "../entry", version = "=1.14.21" } -solana-ledger = { path = "../ledger", version = "=1.14.21" } -solana-logger = { path = "../logger", version = "=1.14.21" } -solana-runtime = { path = "../runtime", version = "=1.14.21" } -solana-sdk = { path = "../sdk", version = "=1.14.21" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.21" } -solana-version = { path = "../version", version = "=1.14.21" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.21" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.22" } +solana-cli-config = { path = "../cli-config", version = "=1.14.22" } +solana-entry = { path = "../entry", version = "=1.14.22" } +solana-ledger = { path = "../ledger", version = "=1.14.22" } +solana-logger = { path = "../logger", version = "=1.14.22" } +solana-runtime = { path = "../runtime", version = "=1.14.22" } +solana-sdk = { path = "../sdk", version = "=1.14.22" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.22" } +solana-version = { path = "../version", version = "=1.14.22" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.22" } tempfile = "3.4.0" [[bin]] diff --git a/geyser-plugin-interface/Cargo.toml b/geyser-plugin-interface/Cargo.toml index 03b2c33ad2f86d..5b7a2c1f8f2b8f 100644 --- a/geyser-plugin-interface/Cargo.toml +++ b/geyser-plugin-interface/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-geyser-plugin-interface" description = "The Solana Geyser plugin interface." -version = "1.14.21" +version = "1.14.22" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -11,8 +11,8 @@ documentation = "https://docs.rs/solana-geyser-plugin-interface" [dependencies] log = "0.4.17" -solana-sdk = { path = "../sdk", version = "=1.14.21" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.21" } +solana-sdk = { path = "../sdk", version = "=1.14.22" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.22" } thiserror = "1.0.31" [package.metadata.docs.rs] diff --git a/geyser-plugin-manager/Cargo.toml b/geyser-plugin-manager/Cargo.toml index b71245ea299ac9..4ffe997b841750 100644 --- a/geyser-plugin-manager/Cargo.toml +++ b/geyser-plugin-manager/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-geyser-plugin-manager" description = "The Solana Geyser plugin manager." -version = "1.14.21" +version = "1.14.22" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -16,13 +16,13 @@ json5 = "0.4.1" libloading = "0.7.3" log = "0.4.17" serde_json = "1.0.81" -solana-geyser-plugin-interface = { path = "../geyser-plugin-interface", version = "=1.14.21" } -solana-measure = { path = "../measure", version = "=1.14.21" } -solana-metrics = { path = "../metrics", version = "=1.14.21" } -solana-rpc = { path = "../rpc", version = "=1.14.21" } -solana-runtime = { path = "../runtime", version = "=1.14.21" } -solana-sdk = { path = "../sdk", version = "=1.14.21" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.21" } +solana-geyser-plugin-interface = { path = "../geyser-plugin-interface", version = "=1.14.22" } +solana-measure = { path = "../measure", version = "=1.14.22" } +solana-metrics = { path = "../metrics", version = "=1.14.22" } +solana-rpc = { path = "../rpc", version = "=1.14.22" } +solana-runtime = { path = "../runtime", version = "=1.14.22" } +solana-sdk = { path = "../sdk", version = "=1.14.22" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.22" } thiserror = "1.0.31" [package.metadata.docs.rs] diff --git a/gossip/Cargo.toml b/gossip/Cargo.toml index 0111365f7f6668..5b051fa0809028 100644 --- a/gossip/Cargo.toml +++ b/gossip/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-gossip" description = "Blockchain, Rebuilt for Scale" -version = "1.14.21" +version = "1.14.22" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -27,24 +27,24 @@ rayon = "1.5.3" serde = "1.0.138" serde_bytes = "0.11" serde_derive = "1.0.103" -solana-bloom = { path = "../bloom", version = "=1.14.21" } -solana-clap-utils = { path = "../clap-utils", version = "=1.14.21" } -solana-client = { path = "../client", version = "=1.14.21" } -solana-entry = { path = "../entry", version = "=1.14.21" } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.21" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.21" } -solana-ledger = { path = "../ledger", version = "=1.14.21" } -solana-logger = { path = "../logger", version = "=1.14.21" } -solana-measure = { path = "../measure", version = "=1.14.21" } -solana-metrics = { path = "../metrics", version = "=1.14.21" } -solana-net-utils = { path = "../net-utils", version = "=1.14.21" } -solana-perf = { path = "../perf", version = "=1.14.21" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.21" } -solana-runtime = { path = "../runtime", version = "=1.14.21" } -solana-sdk = { path = "../sdk", version = "=1.14.21" } -solana-streamer = { path = "../streamer", version = "=1.14.21" } -solana-version = { path = "../version", version = "=1.14.21" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.21" } +solana-bloom = { path = "../bloom", version = "=1.14.22" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.22" } +solana-client = { path = "../client", version = "=1.14.22" } +solana-entry = { path = "../entry", version = "=1.14.22" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.22" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.22" } +solana-ledger = { path = "../ledger", version = "=1.14.22" } +solana-logger = { path = "../logger", version = "=1.14.22" } +solana-measure = { path = "../measure", version = "=1.14.22" } +solana-metrics = { path = "../metrics", version = "=1.14.22" } +solana-net-utils = { path = "../net-utils", version = "=1.14.22" } +solana-perf = { path = "../perf", version = "=1.14.22" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.22" } +solana-runtime = { path = "../runtime", version = "=1.14.22" } +solana-sdk = { path = "../sdk", version = "=1.14.22" } +solana-streamer = { path = "../streamer", version = "=1.14.22" } +solana-version = { path = "../version", version = "=1.14.22" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.22" } thiserror = "1.0" [dev-dependencies] diff --git a/install/Cargo.toml b/install/Cargo.toml index 46f9ead5f77ebe..520c4c2e70d2bd 100644 --- a/install/Cargo.toml +++ b/install/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-install" description = "The solana cluster software installer" -version = "1.14.21" +version = "1.14.22" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -26,12 +26,12 @@ reqwest = { version = "0.11.11", default-features = false, features = ["blocking semver = "1.0.10" serde = { version = "1.0.138", features = ["derive"] } serde_yaml = "0.8.26" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.21" } -solana-client = { path = "../client", version = "=1.14.21" } -solana-config-program = { path = "../programs/config", version = "=1.14.21" } -solana-logger = { path = "../logger", version = "=1.14.21" } -solana-sdk = { path = "../sdk", version = "=1.14.21" } -solana-version = { path = "../version", version = "=1.14.21" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.22" } +solana-client = { path = "../client", version = "=1.14.22" } +solana-config-program = { path = "../programs/config", version = "=1.14.22" } +solana-logger = { path = "../logger", version = "=1.14.22" } +solana-sdk = { path = "../sdk", version = "=1.14.22" } +solana-version = { path = "../version", version = "=1.14.22" } tar = "0.4.38" tempfile = "3.4.0" url = "2.2.2" diff --git a/keygen/Cargo.toml b/keygen/Cargo.toml index d5c122db727999..3b4420e3634ff3 100644 --- a/keygen/Cargo.toml +++ b/keygen/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-keygen" -version = "1.14.21" +version = "1.14.22" description = "Solana key generation utility" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,11 +14,11 @@ bs58 = "0.4.0" clap = { version = "3.1.5", features = ["cargo"] } dirs-next = "2.0.0" num_cpus = "1.13.1" -solana-clap-v3-utils = { path = "../clap-v3-utils", version = "=1.14.21" } -solana-cli-config = { path = "../cli-config", version = "=1.14.21" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.21" } -solana-sdk = { path = "../sdk", version = "=1.14.21" } -solana-version = { path = "../version", version = "=1.14.21" } +solana-clap-v3-utils = { path = "../clap-v3-utils", version = "=1.14.22" } +solana-cli-config = { path = "../cli-config", version = "=1.14.22" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.22" } +solana-sdk = { path = "../sdk", version = "=1.14.22" } +solana-version = { path = "../version", version = "=1.14.22" } tiny-bip39 = "0.8.2" [[bin]] diff --git a/ledger-tool/Cargo.toml b/ledger-tool/Cargo.toml index fc3ffc698005cc..b703183bcbc130 100644 --- a/ledger-tool/Cargo.toml +++ b/ledger-tool/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-ledger-tool" description = "Blockchain, Rebuilt for Scale" -version = "1.14.21" +version = "1.14.22" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -22,20 +22,20 @@ log = { version = "0.4.17" } regex = "1" serde = { version = "1.0", features = ["derive"] } serde_json = "1.0.81" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.21" } -solana-cli-output = { path = "../cli-output", version = "=1.14.21" } -solana-core = { path = "../core", version = "=1.14.21" } -solana-entry = { path = "../entry", version = "=1.14.21" } -solana-ledger = { path = "../ledger", version = "=1.14.21" } -solana-logger = { path = "../logger", version = "=1.14.21" } -solana-measure = { path = "../measure", version = "=1.14.21" } -solana-runtime = { path = "../runtime", version = "=1.14.21" } -solana-sdk = { path = "../sdk", version = "=1.14.21" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.21" } -solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.21" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.21" } -solana-version = { path = "../version", version = "=1.14.21" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.21" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.22" } +solana-cli-output = { path = "../cli-output", version = "=1.14.22" } +solana-core = { path = "../core", version = "=1.14.22" } +solana-entry = { path = "../entry", version = "=1.14.22" } +solana-ledger = { path = "../ledger", version = "=1.14.22" } +solana-logger = { path = "../logger", version = "=1.14.22" } +solana-measure = { path = "../measure", version = "=1.14.22" } +solana-runtime = { path = "../runtime", version = "=1.14.22" } +solana-sdk = { path = "../sdk", version = "=1.14.22" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.22" } +solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.22" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.22" } +solana-version = { path = "../version", version = "=1.14.22" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.22" } tokio = { version = "1", features = ["full"] } [target.'cfg(not(target_env = "msvc"))'.dependencies] diff --git a/ledger/Cargo.toml b/ledger/Cargo.toml index f8d720e6162e1a..19a036428b066d 100644 --- a/ledger/Cargo.toml +++ b/ledger/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-ledger" -version = "1.14.21" +version = "1.14.22" description = "Solana ledger" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -35,23 +35,23 @@ reed-solomon-erasure = { version = "6.0.0", features = ["simd-accel"] } serde = "1.0.138" serde_bytes = "0.11.6" sha2 = "0.10.2" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.21" } -solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.21" } -solana-entry = { path = "../entry", version = "=1.14.21" } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.21" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.21" } -solana-measure = { path = "../measure", version = "=1.14.21" } -solana-metrics = { path = "../metrics", version = "=1.14.21" } -solana-perf = { path = "../perf", version = "=1.14.21" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.21" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.21" } -solana-runtime = { path = "../runtime", version = "=1.14.21" } -solana-sdk = { path = "../sdk", version = "=1.14.21" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.21" } -solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.21" } -solana-storage-proto = { path = "../storage-proto", version = "=1.14.21" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.21" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.21" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.22" } +solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.22" } +solana-entry = { path = "../entry", version = "=1.14.22" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.22" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.22" } +solana-measure = { path = "../measure", version = "=1.14.22" } +solana-metrics = { path = "../metrics", version = "=1.14.22" } +solana-perf = { path = "../perf", version = "=1.14.22" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.22" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.22" } +solana-runtime = { path = "../runtime", version = "=1.14.22" } +solana-sdk = { path = "../sdk", version = "=1.14.22" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.22" } +solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.22" } +solana-storage-proto = { path = "../storage-proto", version = "=1.14.22" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.22" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.22" } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } spl-token-2022 = { version = "=0.6.1", features = ["no-entrypoint"] } static_assertions = "1.1.0" @@ -71,8 +71,8 @@ features = ["lz4"] [dev-dependencies] bs58 = "0.4.0" matches = "0.1.9" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.21" } -solana-logger = { path = "../logger", version = "=1.14.21" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.22" } +solana-logger = { path = "../logger", version = "=1.14.22" } test-case = "2.1.0" [build-dependencies] diff --git a/local-cluster/Cargo.toml b/local-cluster/Cargo.toml index 49b235ca196abf..db64f6c57ac559 100644 --- a/local-cluster/Cargo.toml +++ b/local-cluster/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-local-cluster" description = "Blockchain, Rebuilt for Scale" -version = "1.14.21" +version = "1.14.22" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -16,25 +16,25 @@ itertools = "0.10.3" log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" -solana-client = { path = "../client", version = "=1.14.21" } -solana-config-program = { path = "../programs/config", version = "=1.14.21" } -solana-core = { path = "../core", version = "=1.14.21" } -solana-entry = { path = "../entry", version = "=1.14.21" } -solana-gossip = { path = "../gossip", version = "=1.14.21" } -solana-ledger = { path = "../ledger", version = "=1.14.21" } -solana-runtime = { path = "../runtime", version = "=1.14.21" } -solana-sdk = { path = "../sdk", version = "=1.14.21" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.21" } -solana-streamer = { path = "../streamer", version = "=1.14.21" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.21" } +solana-client = { path = "../client", version = "=1.14.22" } +solana-config-program = { path = "../programs/config", version = "=1.14.22" } +solana-core = { path = "../core", version = "=1.14.22" } +solana-entry = { path = "../entry", version = "=1.14.22" } +solana-gossip = { path = "../gossip", version = "=1.14.22" } +solana-ledger = { path = "../ledger", version = "=1.14.22" } +solana-runtime = { path = "../runtime", version = "=1.14.22" } +solana-sdk = { path = "../sdk", version = "=1.14.22" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.22" } +solana-streamer = { path = "../streamer", version = "=1.14.22" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.22" } tempfile = "3.4.0" [dev-dependencies] assert_matches = "1.5.0" gag = "1.0.0" serial_test = "0.8.0" -solana-download-utils = { path = "../download-utils", version = "=1.14.21" } -solana-logger = { path = "../logger", version = "=1.14.21" } +solana-download-utils = { path = "../download-utils", version = "=1.14.22" } +solana-logger = { path = "../logger", version = "=1.14.22" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/log-analyzer/Cargo.toml b/log-analyzer/Cargo.toml index 86bc5bea46cb5a..5aff3c0399668f 100644 --- a/log-analyzer/Cargo.toml +++ b/log-analyzer/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-log-analyzer" description = "The solana cluster network analysis tool" -version = "1.14.21" +version = "1.14.22" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,8 +14,8 @@ byte-unit = "4.0.14" clap = { version = "3.1.5", features = ["cargo"] } serde = "1.0.138" serde_json = "1.0.81" -solana-logger = { path = "../logger", version = "=1.14.21" } -solana-version = { path = "../version", version = "=1.14.21" } +solana-logger = { path = "../logger", version = "=1.14.22" } +solana-version = { path = "../version", version = "=1.14.22" } [[bin]] name = "solana-log-analyzer" diff --git a/logger/Cargo.toml b/logger/Cargo.toml index 5d083d8ac8d0af..c280888d032189 100644 --- a/logger/Cargo.toml +++ b/logger/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-logger" -version = "1.14.21" +version = "1.14.22" description = "Solana Logger" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/measure/Cargo.toml b/measure/Cargo.toml index 965175d220e073..9d451cb45cad2f 100644 --- a/measure/Cargo.toml +++ b/measure/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "solana-measure" description = "Blockchain, Rebuilt for Scale" -version = "1.14.21" +version = "1.14.22" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-measure" readme = "../README.md" @@ -12,7 +12,7 @@ edition = "2021" [dependencies] log = "0.4.17" -solana-sdk = { path = "../sdk", version = "=1.14.21" } +solana-sdk = { path = "../sdk", version = "=1.14.22" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/merkle-root-bench/Cargo.toml b/merkle-root-bench/Cargo.toml index 0054f6daf18e32..4edfdadf2e6d98 100644 --- a/merkle-root-bench/Cargo.toml +++ b/merkle-root-bench/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-merkle-root-bench" -version = "1.14.21" +version = "1.14.22" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -11,11 +11,11 @@ publish = false [dependencies] clap = "2.33.1" log = "0.4.17" -solana-logger = { path = "../logger", version = "=1.14.21" } -solana-measure = { path = "../measure", version = "=1.14.21" } -solana-runtime = { path = "../runtime", version = "=1.14.21" } -solana-sdk = { path = "../sdk", version = "=1.14.21" } -solana-version = { path = "../version", version = "=1.14.21" } +solana-logger = { path = "../logger", version = "=1.14.22" } +solana-measure = { path = "../measure", version = "=1.14.22" } +solana-runtime = { path = "../runtime", version = "=1.14.22" } +solana-sdk = { path = "../sdk", version = "=1.14.22" } +solana-version = { path = "../version", version = "=1.14.22" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/merkle-tree/Cargo.toml b/merkle-tree/Cargo.toml index d9f3dab00e451a..3e295e28b57549 100644 --- a/merkle-tree/Cargo.toml +++ b/merkle-tree/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-merkle-tree" -version = "1.14.21" +version = "1.14.22" description = "Solana Merkle Tree" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -11,7 +11,7 @@ edition = "2021" [dependencies] fast-math = "0.1" -solana-program = { path = "../sdk/program", version = "=1.14.21" } +solana-program = { path = "../sdk/program", version = "=1.14.22" } # This can go once the BPF toolchain target Rust 1.42.0+ [target.bpfel-unknown-unknown.dependencies] diff --git a/metrics/Cargo.toml b/metrics/Cargo.toml index ebe3a83d52b409..2cb9b3cbf0c1b0 100644 --- a/metrics/Cargo.toml +++ b/metrics/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-metrics" -version = "1.14.21" +version = "1.14.22" description = "Solana Metrics" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -15,7 +15,7 @@ gethostname = "0.2.3" lazy_static = "1.4.0" log = "0.4.17" reqwest = { version = "0.11.11", default-features = false, features = ["blocking", "brotli", "deflate", "gzip", "rustls-tls", "json"] } -solana-sdk = { path = "../sdk", version = "=1.14.21" } +solana-sdk = { path = "../sdk", version = "=1.14.22" } [dev-dependencies] env_logger = "0.9.0" diff --git a/net-shaper/Cargo.toml b/net-shaper/Cargo.toml index 922787742373bf..cba6c3027a24e7 100644 --- a/net-shaper/Cargo.toml +++ b/net-shaper/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-net-shaper" description = "The solana cluster network shaping tool" -version = "1.14.21" +version = "1.14.22" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,7 +14,7 @@ clap = { version = "3.1.5", features = ["cargo"] } rand = "0.7.0" serde = { version = "1.0.138", features = ["derive"] } serde_json = "1.0.81" -solana-logger = { path = "../logger", version = "=1.14.21" } +solana-logger = { path = "../logger", version = "=1.14.22" } [[bin]] name = "solana-net-shaper" diff --git a/net-utils/Cargo.toml b/net-utils/Cargo.toml index c225f717b50364..08cb1e1c4550dd 100644 --- a/net-utils/Cargo.toml +++ b/net-utils/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-net-utils" -version = "1.14.21" +version = "1.14.22" description = "Solana Network Utilities" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -19,9 +19,9 @@ rand = "0.7.0" serde = "1.0.138" serde_derive = "1.0.103" socket2 = "0.4.4" -solana-logger = { path = "../logger", version = "=1.14.21" } -solana-sdk = { path = "../sdk", version = "=1.14.21" } -solana-version = { path = "../version", version = "=1.14.21" } +solana-logger = { path = "../logger", version = "=1.14.22" } +solana-sdk = { path = "../sdk", version = "=1.14.22" } +solana-version = { path = "../version", version = "=1.14.22" } tokio = { version = "1", features = ["full"] } url = "2.2.2" diff --git a/notifier/Cargo.toml b/notifier/Cargo.toml index 8933bc470eeb4b..acbc388eda3666 100644 --- a/notifier/Cargo.toml +++ b/notifier/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-notifier" -version = "1.14.21" +version = "1.14.22" description = "Solana Notifier" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/perf/Cargo.toml b/perf/Cargo.toml index 66a194fbf732fd..bc093f6336c7c2 100644 --- a/perf/Cargo.toml +++ b/perf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-perf" -version = "1.14.21" +version = "1.14.22" description = "Solana Performance APIs" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -22,10 +22,10 @@ log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" serde = "1.0.138" -solana-metrics = { path = "../metrics", version = "=1.14.21" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.21" } -solana-sdk = { path = "../sdk", version = "=1.14.21" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.21" } +solana-metrics = { path = "../metrics", version = "=1.14.22" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.22" } +solana-sdk = { path = "../sdk", version = "=1.14.22" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.22" } [target."cfg(target_os = \"linux\")".dependencies] caps = "0.5.3" @@ -38,7 +38,7 @@ name = "solana_perf" [dev-dependencies] matches = "0.1.9" rand_chacha = "0.2.2" -solana-logger = { path = "../logger", version = "=1.14.21" } +solana-logger = { path = "../logger", version = "=1.14.22" } test-case = "2.1.0" [[bench]] diff --git a/poh-bench/Cargo.toml b/poh-bench/Cargo.toml index 4a9c5c359aec8f..552e1f81c79383 100644 --- a/poh-bench/Cargo.toml +++ b/poh-bench/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-poh-bench" -version = "1.14.21" +version = "1.14.22" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,12 +14,12 @@ clap = { version = "3.1.5", features = ["cargo"] } log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" -solana-entry = { path = "../entry", version = "=1.14.21" } -solana-logger = { path = "../logger", version = "=1.14.21" } -solana-measure = { path = "../measure", version = "=1.14.21" } -solana-perf = { path = "../perf", version = "=1.14.21" } -solana-sdk = { path = "../sdk", version = "=1.14.21" } -solana-version = { path = "../version", version = "=1.14.21" } +solana-entry = { path = "../entry", version = "=1.14.22" } +solana-logger = { path = "../logger", version = "=1.14.22" } +solana-measure = { path = "../measure", version = "=1.14.22" } +solana-perf = { path = "../perf", version = "=1.14.22" } +solana-sdk = { path = "../sdk", version = "=1.14.22" } +solana-version = { path = "../version", version = "=1.14.22" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/poh/Cargo.toml b/poh/Cargo.toml index 305a504361fa41..031c73f3a531e3 100644 --- a/poh/Cargo.toml +++ b/poh/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-poh" -version = "1.14.21" +version = "1.14.22" description = "Solana PoH" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,21 +13,21 @@ edition = "2021" core_affinity = "0.5.10" crossbeam-channel = "0.5" log = "0.4.17" -solana-entry = { path = "../entry", version = "=1.14.21" } -solana-ledger = { path = "../ledger", version = "=1.14.21" } -solana-measure = { path = "../measure", version = "=1.14.21" } -solana-metrics = { path = "../metrics", version = "=1.14.21" } -solana-runtime = { path = "../runtime", version = "=1.14.21" } -solana-sdk = { path = "../sdk", version = "=1.14.21" } -solana-sys-tuner = { path = "../sys-tuner", version = "=1.14.21" } +solana-entry = { path = "../entry", version = "=1.14.22" } +solana-ledger = { path = "../ledger", version = "=1.14.22" } +solana-measure = { path = "../measure", version = "=1.14.22" } +solana-metrics = { path = "../metrics", version = "=1.14.22" } +solana-runtime = { path = "../runtime", version = "=1.14.22" } +solana-sdk = { path = "../sdk", version = "=1.14.22" } +solana-sys-tuner = { path = "../sys-tuner", version = "=1.14.22" } thiserror = "1.0" [dev-dependencies] bincode = "1.3.3" matches = "0.1.9" rand = "0.7.0" -solana-logger = { path = "../logger", version = "=1.14.21" } -solana-perf = { path = "../perf", version = "=1.14.21" } +solana-logger = { path = "../logger", version = "=1.14.22" } +solana-perf = { path = "../perf", version = "=1.14.22" } [lib] crate-type = ["lib"] diff --git a/program-runtime/Cargo.toml b/program-runtime/Cargo.toml index b2c9934aa29c92..1675270831a85f 100644 --- a/program-runtime/Cargo.toml +++ b/program-runtime/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-program-runtime" -version = "1.14.21" +version = "1.14.22" description = "Solana program runtime" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -21,16 +21,16 @@ num-derive = { version = "0.3" } num-traits = { version = "0.2" } rand = "0.7.0" serde = { version = "1.0.129", features = ["derive", "rc"] } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.21" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.21" } -solana-measure = { path = "../measure", version = "=1.14.21" } -solana-metrics = { path = "../metrics", version = "=1.14.21" } -solana-sdk = { path = "../sdk", version = "=1.14.21" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.22" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.22" } +solana-measure = { path = "../measure", version = "=1.14.22" } +solana-metrics = { path = "../metrics", version = "=1.14.22" } +solana-sdk = { path = "../sdk", version = "=1.14.22" } thiserror = "1.0" enum-iterator = "0.8.1" [dev-dependencies] -solana-logger = { path = "../logger", version = "=1.14.21" } +solana-logger = { path = "../logger", version = "=1.14.22" } [lib] crate-type = ["lib"] diff --git a/program-test/Cargo.toml b/program-test/Cargo.toml index 72d9bb372d7c0f..a5575c4b121302 100644 --- a/program-test/Cargo.toml +++ b/program-test/Cargo.toml @@ -5,7 +5,7 @@ edition = "2021" license = "Apache-2.0" name = "solana-program-test" repository = "https://github.com/solana-labs/solana" -version = "1.14.21" +version = "1.14.22" [dependencies] assert_matches = "1.5.0" @@ -15,16 +15,16 @@ bincode = "1.3.3" chrono-humanize = "0.2.1" log = "0.4.17" serde = "1.0.138" -solana-banks-client = { path = "../banks-client", version = "=1.14.21" } -solana-banks-server = { path = "../banks-server", version = "=1.14.21" } -solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.21" } -solana-logger = { path = "../logger", version = "=1.14.21" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.21" } -solana-runtime = { path = "../runtime", version = "=1.14.21" } -solana-sdk = { path = "../sdk", version = "=1.14.21" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.21" } +solana-banks-client = { path = "../banks-client", version = "=1.14.22" } +solana-banks-server = { path = "../banks-server", version = "=1.14.22" } +solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.22" } +solana-logger = { path = "../logger", version = "=1.14.22" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.22" } +solana-runtime = { path = "../runtime", version = "=1.14.22" } +solana-sdk = { path = "../sdk", version = "=1.14.22" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.22" } thiserror = "1.0" tokio = { version = "1", features = ["full"] } [dev-dependencies] -solana-stake-program = { path = "../programs/stake", version = "=1.14.21" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.22" } diff --git a/programs/address-lookup-table-tests/Cargo.toml b/programs/address-lookup-table-tests/Cargo.toml index 6b5ca349b1a776..41094b94049d2d 100644 --- a/programs/address-lookup-table-tests/Cargo.toml +++ b/programs/address-lookup-table-tests/Cargo.toml @@ -3,7 +3,7 @@ [package] name = "solana-address-lookup-table-program-tests" -version = "1.14.21" +version = "1.14.22" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" @@ -14,9 +14,9 @@ publish = false [dev-dependencies] assert_matches = "1.5.0" bincode = "1.3.3" -solana-address-lookup-table-program = { path = "../address-lookup-table", version = "=1.14.21" } -solana-program-test = { path = "../../program-test", version = "=1.14.21" } -solana-sdk = { path = "../../sdk", version = "=1.14.21" } +solana-address-lookup-table-program = { path = "../address-lookup-table", version = "=1.14.22" } +solana-program-test = { path = "../../program-test", version = "=1.14.22" } +solana-sdk = { path = "../../sdk", version = "=1.14.22" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/address-lookup-table/Cargo.toml b/programs/address-lookup-table/Cargo.toml index 960da81af18178..84928f334d1222 100644 --- a/programs/address-lookup-table/Cargo.toml +++ b/programs/address-lookup-table/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-address-lookup-table-program" -version = "1.14.21" +version = "1.14.22" description = "Solana address lookup table program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -16,14 +16,14 @@ log = "0.4.17" num-derive = "0.3" num-traits = "0.2" serde = { version = "1.0.138", features = ["derive"] } -solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.21" } -solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.21" } -solana-program = { path = "../../sdk/program", version = "=1.14.21" } +solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.22" } +solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.22" } +solana-program = { path = "../../sdk/program", version = "=1.14.22" } thiserror = "1.0" [target.'cfg(not(target_os = "solana"))'.dependencies] -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.21" } -solana-sdk = { path = "../../sdk", version = "=1.14.21" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.22" } +solana-sdk = { path = "../../sdk", version = "=1.14.22" } [build-dependencies] rustc_version = "0.4" diff --git a/programs/bpf-loader-tests/Cargo.toml b/programs/bpf-loader-tests/Cargo.toml index 1420153b8e9d9c..43608dd836968b 100644 --- a/programs/bpf-loader-tests/Cargo.toml +++ b/programs/bpf-loader-tests/Cargo.toml @@ -3,7 +3,7 @@ [package] name = "solana-bpf-loader-program-tests" -version = "1.14.21" +version = "1.14.22" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" @@ -14,9 +14,9 @@ publish = false [dev-dependencies] assert_matches = "1.5.0" bincode = "1.3.3" -solana-bpf-loader-program = { path = "../bpf_loader", version = "=1.14.21" } -solana-program-test = { path = "../../program-test", version = "=1.14.21" } -solana-sdk = { path = "../../sdk", version = "=1.14.21" } +solana-bpf-loader-program = { path = "../bpf_loader", version = "=1.14.22" } +solana-program-test = { path = "../../program-test", version = "=1.14.22" } +solana-sdk = { path = "../../sdk", version = "=1.14.22" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/bpf/Cargo.lock b/programs/bpf/Cargo.lock index b350a2bc03d42d..1ca6713a9195aa 100644 --- a/programs/bpf/Cargo.lock +++ b/programs/bpf/Cargo.lock @@ -4101,7 +4101,7 @@ dependencies = [ [[package]] name = "solana-account-decoder" -version = "1.14.21" +version = "1.14.22" dependencies = [ "Inflector", "base64 0.13.0", @@ -4114,7 +4114,7 @@ dependencies = [ "serde_json", "solana-address-lookup-table-program", "solana-config-program", - "solana-sdk 1.14.21", + "solana-sdk 1.14.22", "solana-vote-program", "spl-token", "spl-token-2022", @@ -4124,7 +4124,7 @@ dependencies = [ [[package]] name = "solana-address-lookup-table-program" -version = "1.14.21" +version = "1.14.22" dependencies = [ "bincode", "bytemuck", @@ -4133,23 +4133,23 @@ dependencies = [ "num-traits", "rustc_version", "serde", - "solana-frozen-abi 1.14.21", - "solana-frozen-abi-macro 1.14.21", - "solana-program 1.14.21", + "solana-frozen-abi 1.14.22", + "solana-frozen-abi-macro 1.14.22", + "solana-program 1.14.22", "solana-program-runtime", - "solana-sdk 1.14.21", + "solana-sdk 1.14.22", "thiserror", ] [[package]] name = "solana-banks-client" -version = "1.14.21" +version = "1.14.22" dependencies = [ "borsh", "futures 0.3.21", "solana-banks-interface", - "solana-program 1.14.21", - "solana-sdk 1.14.21", + "solana-program 1.14.22", + "solana-sdk 1.14.22", "tarpc", "thiserror", "tokio", @@ -4158,16 +4158,16 @@ dependencies = [ [[package]] name = "solana-banks-interface" -version = "1.14.21" +version = "1.14.22" dependencies = [ "serde", - "solana-sdk 1.14.21", + "solana-sdk 1.14.22", "tarpc", ] [[package]] name = "solana-banks-server" -version = "1.14.21" +version = "1.14.22" dependencies = [ "bincode", "crossbeam-channel", @@ -4175,7 +4175,7 @@ dependencies = [ "solana-banks-interface", "solana-client", "solana-runtime", - "solana-sdk 1.14.21", + "solana-sdk 1.14.22", "solana-send-transaction-service", "tarpc", "tokio", @@ -4185,7 +4185,7 @@ dependencies = [ [[package]] name = "solana-bloom" -version = "1.14.21" +version = "1.14.22" dependencies = [ "bv", "fnv", @@ -4195,14 +4195,14 @@ dependencies = [ "rustc_version", "serde", "serde_derive", - "solana-frozen-abi 1.14.21", - "solana-frozen-abi-macro 1.14.21", - "solana-sdk 1.14.21", + "solana-frozen-abi 1.14.22", + "solana-frozen-abi-macro 1.14.22", + "solana-sdk 1.14.22", ] [[package]] name = "solana-bpf-loader-program" -version = "1.14.21" +version = "1.14.22" dependencies = [ "bincode", "byteorder 1.4.3", @@ -4211,15 +4211,15 @@ dependencies = [ "solana-measure", "solana-metrics", "solana-program-runtime", - "solana-sdk 1.14.21", - "solana-zk-token-sdk 1.14.21", + "solana-sdk 1.14.22", + "solana-zk-token-sdk 1.14.22", "solana_rbpf", "thiserror", ] [[package]] name = "solana-bpf-programs" -version = "1.14.21" +version = "1.14.22" dependencies = [ "bincode", "byteorder 1.4.3", @@ -4235,11 +4235,11 @@ dependencies = [ "solana-bpf-rust-realloc-invoke", "solana-cli-output", "solana-ledger", - "solana-logger 1.14.21", + "solana-logger 1.14.22", "solana-measure", "solana-program-runtime", "solana-runtime", - "solana-sdk 1.14.21", + "solana-sdk 1.14.22", "solana-transaction-status", "solana_rbpf", "walkdir", @@ -4247,385 +4247,385 @@ dependencies = [ [[package]] name = "solana-bpf-rust-128bit" -version = "1.14.21" +version = "1.14.22" dependencies = [ "solana-bpf-rust-128bit-dep", - "solana-program 1.14.21", + "solana-program 1.14.22", ] [[package]] name = "solana-bpf-rust-128bit-dep" -version = "1.14.21" +version = "1.14.22" dependencies = [ - "solana-program 1.14.21", + "solana-program 1.14.22", ] [[package]] name = "solana-bpf-rust-alloc" -version = "1.14.21" +version = "1.14.22" dependencies = [ - "solana-program 1.14.21", + "solana-program 1.14.22", ] [[package]] name = "solana-bpf-rust-call-depth" -version = "1.14.21" +version = "1.14.22" dependencies = [ - "solana-program 1.14.21", + "solana-program 1.14.22", ] [[package]] name = "solana-bpf-rust-caller-access" -version = "1.14.21" +version = "1.14.22" dependencies = [ - "solana-program 1.14.21", + "solana-program 1.14.22", ] [[package]] name = "solana-bpf-rust-curve25519" -version = "1.14.21" +version = "1.14.22" dependencies = [ - "solana-program 1.14.21", - "solana-zk-token-sdk 1.14.21", + "solana-program 1.14.22", + "solana-zk-token-sdk 1.14.22", ] [[package]] name = "solana-bpf-rust-custom-heap" -version = "1.14.21" +version = "1.14.22" dependencies = [ - "solana-program 1.14.21", + "solana-program 1.14.22", ] [[package]] name = "solana-bpf-rust-dep-crate" -version = "1.14.21" +version = "1.14.22" dependencies = [ "byteorder 1.4.3", "solana-address-lookup-table-program", - "solana-program 1.14.21", + "solana-program 1.14.22", ] [[package]] name = "solana-bpf-rust-deprecated-loader" -version = "1.14.21" +version = "1.14.22" dependencies = [ - "solana-program 1.14.21", + "solana-program 1.14.22", ] [[package]] name = "solana-bpf-rust-dup-accounts" -version = "1.14.21" +version = "1.14.22" dependencies = [ - "solana-program 1.14.21", + "solana-program 1.14.22", ] [[package]] name = "solana-bpf-rust-error-handling" -version = "1.14.21" +version = "1.14.22" dependencies = [ "num-derive", "num-traits", - "solana-program 1.14.21", + "solana-program 1.14.22", "thiserror", ] [[package]] name = "solana-bpf-rust-external-spend" -version = "1.14.21" +version = "1.14.22" dependencies = [ - "solana-program 1.14.21", + "solana-program 1.14.22", ] [[package]] name = "solana-bpf-rust-finalize" -version = "1.14.21" +version = "1.14.22" dependencies = [ - "solana-program 1.14.21", + "solana-program 1.14.22", ] [[package]] name = "solana-bpf-rust-get-minimum-delegation" -version = "1.14.21" +version = "1.14.22" dependencies = [ - "solana-program 1.14.21", + "solana-program 1.14.22", ] [[package]] name = "solana-bpf-rust-inner_instruction_alignment_check" -version = "1.14.21" +version = "1.14.22" dependencies = [ - "solana-program 1.14.21", + "solana-program 1.14.22", ] [[package]] name = "solana-bpf-rust-instruction-introspection" -version = "1.14.21" +version = "1.14.22" dependencies = [ - "solana-program 1.14.21", + "solana-program 1.14.22", ] [[package]] name = "solana-bpf-rust-invoke" -version = "1.14.21" +version = "1.14.22" dependencies = [ "solana-bpf-rust-invoked", - "solana-program 1.14.21", + "solana-program 1.14.22", ] [[package]] name = "solana-bpf-rust-invoke-and-error" -version = "1.14.21" +version = "1.14.22" dependencies = [ - "solana-program 1.14.21", + "solana-program 1.14.22", ] [[package]] name = "solana-bpf-rust-invoke-and-ok" -version = "1.14.21" +version = "1.14.22" dependencies = [ - "solana-program 1.14.21", + "solana-program 1.14.22", ] [[package]] name = "solana-bpf-rust-invoke-and-return" -version = "1.14.21" +version = "1.14.22" dependencies = [ - "solana-program 1.14.21", + "solana-program 1.14.22", ] [[package]] name = "solana-bpf-rust-invoked" -version = "1.14.21" +version = "1.14.22" dependencies = [ - "solana-program 1.14.21", + "solana-program 1.14.22", ] [[package]] name = "solana-bpf-rust-iter" -version = "1.14.21" +version = "1.14.22" dependencies = [ - "solana-program 1.14.21", + "solana-program 1.14.22", ] [[package]] name = "solana-bpf-rust-log-data" -version = "1.14.21" +version = "1.14.22" dependencies = [ - "solana-program 1.14.21", + "solana-program 1.14.22", ] [[package]] name = "solana-bpf-rust-many-args" -version = "1.14.21" +version = "1.14.22" dependencies = [ "solana-bpf-rust-many-args-dep", - "solana-program 1.14.21", + "solana-program 1.14.22", ] [[package]] name = "solana-bpf-rust-many-args-dep" -version = "1.14.21" +version = "1.14.22" dependencies = [ - "solana-program 1.14.21", + "solana-program 1.14.22", ] [[package]] name = "solana-bpf-rust-mem" -version = "1.14.21" +version = "1.14.22" dependencies = [ - "solana-program 1.14.21", + "solana-program 1.14.22", "solana-program-runtime", "solana-program-test", - "solana-sdk 1.14.21", + "solana-sdk 1.14.22", ] [[package]] name = "solana-bpf-rust-membuiltins" -version = "1.14.21" +version = "1.14.22" dependencies = [ "solana-bpf-rust-mem", - "solana-program 1.14.21", + "solana-program 1.14.22", ] [[package]] name = "solana-bpf-rust-noop" -version = "1.14.21" +version = "1.14.22" dependencies = [ - "solana-program 1.14.21", + "solana-program 1.14.22", ] [[package]] name = "solana-bpf-rust-panic" -version = "1.14.21" +version = "1.14.22" dependencies = [ - "solana-program 1.14.21", + "solana-program 1.14.22", ] [[package]] name = "solana-bpf-rust-param-passing" -version = "1.14.21" +version = "1.14.22" dependencies = [ "solana-bpf-rust-param-passing-dep", - "solana-program 1.14.21", + "solana-program 1.14.22", ] [[package]] name = "solana-bpf-rust-param-passing-dep" -version = "1.14.21" +version = "1.14.22" dependencies = [ - "solana-program 1.14.21", + "solana-program 1.14.22", ] [[package]] name = "solana-bpf-rust-rand" -version = "1.14.21" +version = "1.14.22" dependencies = [ "getrandom 0.1.14", "rand 0.7.3", - "solana-program 1.14.21", + "solana-program 1.14.22", ] [[package]] name = "solana-bpf-rust-realloc" -version = "1.14.21" +version = "1.14.22" dependencies = [ - "solana-program 1.14.21", + "solana-program 1.14.22", ] [[package]] name = "solana-bpf-rust-realloc-invoke" -version = "1.14.21" +version = "1.14.22" dependencies = [ "solana-bpf-rust-realloc", - "solana-program 1.14.21", + "solana-program 1.14.22", ] [[package]] name = "solana-bpf-rust-ro-account_modify" -version = "1.14.21" +version = "1.14.22" dependencies = [ - "solana-program 1.14.21", + "solana-program 1.14.22", ] [[package]] name = "solana-bpf-rust-ro-modify" -version = "1.14.21" +version = "1.14.22" dependencies = [ - "solana-program 1.14.21", + "solana-program 1.14.22", ] [[package]] name = "solana-bpf-rust-sanity" -version = "1.14.21" +version = "1.14.22" dependencies = [ - "solana-program 1.14.21", + "solana-program 1.14.22", "solana-program-runtime", "solana-program-test", - "solana-sdk 1.14.21", + "solana-sdk 1.14.22", ] [[package]] name = "solana-bpf-rust-secp256k1-recover" -version = "1.14.21" +version = "1.14.22" dependencies = [ "libsecp256k1 0.7.0", - "solana-program 1.14.21", + "solana-program 1.14.22", ] [[package]] name = "solana-bpf-rust-sha" -version = "1.14.21" +version = "1.14.22" dependencies = [ "blake3", - "solana-program 1.14.21", + "solana-program 1.14.22", ] [[package]] name = "solana-bpf-rust-sibling-instructions" -version = "1.14.21" +version = "1.14.22" dependencies = [ - "solana-program 1.14.21", + "solana-program 1.14.22", ] [[package]] name = "solana-bpf-rust-sibling_inner-instructions" -version = "1.14.21" +version = "1.14.22" dependencies = [ - "solana-program 1.14.21", + "solana-program 1.14.22", ] [[package]] name = "solana-bpf-rust-simulation" -version = "1.14.21" +version = "1.14.22" dependencies = [ - "solana-logger 1.14.21", - "solana-program 1.14.21", + "solana-logger 1.14.22", + "solana-program 1.14.22", "solana-program-test", - "solana-sdk 1.14.21", + "solana-sdk 1.14.22", "solana-validator", ] [[package]] name = "solana-bpf-rust-spoof1" -version = "1.14.21" +version = "1.14.22" dependencies = [ - "solana-program 1.14.21", + "solana-program 1.14.22", ] [[package]] name = "solana-bpf-rust-spoof1-system" -version = "1.14.21" +version = "1.14.22" dependencies = [ - "solana-program 1.14.21", + "solana-program 1.14.22", ] [[package]] name = "solana-bpf-rust-sysvar" -version = "1.14.21" +version = "1.14.22" dependencies = [ - "solana-program 1.14.21", + "solana-program 1.14.22", "solana-program-runtime", "solana-program-test", - "solana-sdk 1.14.21", + "solana-sdk 1.14.22", ] [[package]] name = "solana-bpf-rust-upgradeable" -version = "1.14.21" +version = "1.14.22" dependencies = [ - "solana-program 1.14.21", + "solana-program 1.14.22", ] [[package]] name = "solana-bpf-rust-upgraded" -version = "1.14.21" +version = "1.14.22" dependencies = [ - "solana-program 1.14.21", + "solana-program 1.14.22", ] [[package]] name = "solana-bucket-map" -version = "1.14.21" +version = "1.14.22" dependencies = [ "log", "memmap2", "modular-bitfield", "rand 0.7.3", "solana-measure", - "solana-sdk 1.14.21", + "solana-sdk 1.14.22", "tempfile", ] [[package]] name = "solana-clap-utils" -version = "1.14.21" +version = "1.14.22" dependencies = [ "chrono", "clap 2.33.3", "rpassword", "solana-perf", "solana-remote-wallet", - "solana-sdk 1.14.21", + "solana-sdk 1.14.22", "thiserror", "tiny-bip39", "uriparse", @@ -4634,7 +4634,7 @@ dependencies = [ [[package]] name = "solana-cli-config" -version = "1.14.21" +version = "1.14.22" dependencies = [ "dirs-next", "lazy_static", @@ -4642,13 +4642,13 @@ dependencies = [ "serde_derive", "serde_yaml", "solana-clap-utils", - "solana-sdk 1.14.21", + "solana-sdk 1.14.22", "url 2.2.2", ] [[package]] name = "solana-cli-output" -version = "1.14.21" +version = "1.14.22" dependencies = [ "Inflector", "base64 0.13.0", @@ -4665,7 +4665,7 @@ dependencies = [ "solana-clap-utils", "solana-cli-config", "solana-client", - "solana-sdk 1.14.21", + "solana-sdk 1.14.22", "solana-transaction-status", "solana-vote-program", "spl-memo", @@ -4673,7 +4673,7 @@ dependencies = [ [[package]] name = "solana-client" -version = "1.14.21" +version = "1.14.22" dependencies = [ "async-mutex", "async-trait", @@ -4709,7 +4709,7 @@ dependencies = [ "solana-measure", "solana-metrics", "solana-net-utils", - "solana-sdk 1.14.21", + "solana-sdk 1.14.22", "solana-streamer", "solana-transaction-status", "solana-version", @@ -4725,27 +4725,27 @@ dependencies = [ [[package]] name = "solana-compute-budget-program" -version = "1.14.21" +version = "1.14.22" dependencies = [ "solana-program-runtime", - "solana-sdk 1.14.21", + "solana-sdk 1.14.22", ] [[package]] name = "solana-config-program" -version = "1.14.21" +version = "1.14.22" dependencies = [ "bincode", "chrono", "serde", "serde_derive", "solana-program-runtime", - "solana-sdk 1.14.21", + "solana-sdk 1.14.22", ] [[package]] name = "solana-core" -version = "1.14.21" +version = "1.14.22" dependencies = [ "ahash", "base64 0.13.0", @@ -4774,8 +4774,8 @@ dependencies = [ "solana-bloom", "solana-client", "solana-entry", - "solana-frozen-abi 1.14.21", - "solana-frozen-abi-macro 1.14.21", + "solana-frozen-abi 1.14.22", + "solana-frozen-abi-macro 1.14.22", "solana-geyser-plugin-manager", "solana-gossip", "solana-ledger", @@ -4788,7 +4788,7 @@ dependencies = [ "solana-rayon-threadlimit", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.21", + "solana-sdk 1.14.22", "solana-send-transaction-service", "solana-streamer", "solana-transaction-status", @@ -4804,19 +4804,19 @@ dependencies = [ [[package]] name = "solana-download-utils" -version = "1.14.21" +version = "1.14.22" dependencies = [ "console", "indicatif", "log", "reqwest", "solana-runtime", - "solana-sdk 1.14.21", + "solana-sdk 1.14.22", ] [[package]] name = "solana-entry" -version = "1.14.21" +version = "1.14.22" dependencies = [ "bincode", "crossbeam-channel", @@ -4832,12 +4832,12 @@ dependencies = [ "solana-metrics", "solana-perf", "solana-rayon-threadlimit", - "solana-sdk 1.14.21", + "solana-sdk 1.14.22", ] [[package]] name = "solana-faucet" -version = "1.14.21" +version = "1.14.22" dependencies = [ "bincode", "byteorder 1.4.3", @@ -4848,9 +4848,9 @@ dependencies = [ "serde_derive", "solana-clap-utils", "solana-cli-config", - "solana-logger 1.14.21", + "solana-logger 1.14.22", "solana-metrics", - "solana-sdk 1.14.21", + "solana-sdk 1.14.22", "solana-version", "spl-memo", "thiserror", @@ -4893,7 +4893,7 @@ dependencies = [ [[package]] name = "solana-frozen-abi" -version = "1.14.21" +version = "1.14.22" dependencies = [ "ahash", "blake3", @@ -4918,7 +4918,7 @@ dependencies = [ "serde_derive", "serde_json", "sha2 0.10.2", - "solana-frozen-abi-macro 1.14.21", + "solana-frozen-abi-macro 1.14.22", "subtle", "thiserror", ] @@ -4937,7 +4937,7 @@ dependencies = [ [[package]] name = "solana-frozen-abi-macro" -version = "1.14.21" +version = "1.14.22" dependencies = [ "proc-macro2 1.0.51", "quote 1.0.18", @@ -4947,26 +4947,26 @@ dependencies = [ [[package]] name = "solana-genesis-utils" -version = "1.14.21" +version = "1.14.22" dependencies = [ "solana-download-utils", "solana-runtime", - "solana-sdk 1.14.21", + "solana-sdk 1.14.22", ] [[package]] name = "solana-geyser-plugin-interface" -version = "1.14.21" +version = "1.14.22" dependencies = [ "log", - "solana-sdk 1.14.21", + "solana-sdk 1.14.22", "solana-transaction-status", "thiserror", ] [[package]] name = "solana-geyser-plugin-manager" -version = "1.14.21" +version = "1.14.22" dependencies = [ "bs58", "crossbeam-channel", @@ -4979,14 +4979,14 @@ dependencies = [ "solana-metrics", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.21", + "solana-sdk 1.14.22", "solana-transaction-status", "thiserror", ] [[package]] name = "solana-gossip" -version = "1.14.21" +version = "1.14.22" dependencies = [ "bincode", "bv", @@ -5010,17 +5010,17 @@ dependencies = [ "solana-clap-utils", "solana-client", "solana-entry", - "solana-frozen-abi 1.14.21", - "solana-frozen-abi-macro 1.14.21", + "solana-frozen-abi 1.14.22", + "solana-frozen-abi-macro 1.14.22", "solana-ledger", - "solana-logger 1.14.21", + "solana-logger 1.14.22", "solana-measure", "solana-metrics", "solana-net-utils", "solana-perf", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.14.21", + "solana-sdk 1.14.22", "solana-streamer", "solana-version", "solana-vote-program", @@ -5029,7 +5029,7 @@ dependencies = [ [[package]] name = "solana-ledger" -version = "1.14.21" +version = "1.14.22" dependencies = [ "assert_matches", "bincode", @@ -5061,15 +5061,15 @@ dependencies = [ "solana-account-decoder", "solana-bpf-loader-program", "solana-entry", - "solana-frozen-abi 1.14.21", - "solana-frozen-abi-macro 1.14.21", + "solana-frozen-abi 1.14.22", + "solana-frozen-abi-macro 1.14.22", "solana-measure", "solana-metrics", "solana-perf", "solana-program-runtime", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.14.21", + "solana-sdk 1.14.22", "solana-stake-program", "solana-storage-bigtable", "solana-storage-proto", @@ -5098,7 +5098,7 @@ dependencies = [ [[package]] name = "solana-logger" -version = "1.14.21" +version = "1.14.22" dependencies = [ "env_logger", "lazy_static", @@ -5107,36 +5107,36 @@ dependencies = [ [[package]] name = "solana-measure" -version = "1.14.21" +version = "1.14.22" dependencies = [ "log", - "solana-sdk 1.14.21", + "solana-sdk 1.14.22", ] [[package]] name = "solana-merkle-tree" -version = "1.14.21" +version = "1.14.22" dependencies = [ "fast-math", "matches", - "solana-program 1.14.21", + "solana-program 1.14.22", ] [[package]] name = "solana-metrics" -version = "1.14.21" +version = "1.14.22" dependencies = [ "crossbeam-channel", "gethostname", "lazy_static", "log", "reqwest", - "solana-sdk 1.14.21", + "solana-sdk 1.14.22", ] [[package]] name = "solana-net-utils" -version = "1.14.21" +version = "1.14.22" dependencies = [ "bincode", "clap 3.1.6", @@ -5147,8 +5147,8 @@ dependencies = [ "serde", "serde_derive", "socket2", - "solana-logger 1.14.21", - "solana-sdk 1.14.21", + "solana-logger 1.14.22", + "solana-sdk 1.14.22", "solana-version", "tokio", "url 2.2.2", @@ -5156,7 +5156,7 @@ dependencies = [ [[package]] name = "solana-perf" -version = "1.14.21" +version = "1.14.22" dependencies = [ "ahash", "bincode", @@ -5175,13 +5175,13 @@ dependencies = [ "serde", "solana-metrics", "solana-rayon-threadlimit", - "solana-sdk 1.14.21", + "solana-sdk 1.14.22", "solana-vote-program", ] [[package]] name = "solana-poh" -version = "1.14.21" +version = "1.14.22" dependencies = [ "core_affinity", "crossbeam-channel", @@ -5191,7 +5191,7 @@ dependencies = [ "solana-measure", "solana-metrics", "solana-runtime", - "solana-sdk 1.14.21", + "solana-sdk 1.14.22", "solana-sys-tuner", "thiserror", ] @@ -5247,7 +5247,7 @@ dependencies = [ [[package]] name = "solana-program" -version = "1.14.21" +version = "1.14.22" dependencies = [ "base64 0.13.0", "bincode", @@ -5283,9 +5283,9 @@ dependencies = [ "serde_json", "sha2 0.10.2", "sha3 0.10.1", - "solana-frozen-abi 1.14.21", - "solana-frozen-abi-macro 1.14.21", - "solana-sdk-macro 1.14.21", + "solana-frozen-abi 1.14.22", + "solana-frozen-abi-macro 1.14.22", + "solana-sdk-macro 1.14.22", "thiserror", "tiny-bip39", "wasm-bindgen", @@ -5294,7 +5294,7 @@ dependencies = [ [[package]] name = "solana-program-runtime" -version = "1.14.21" +version = "1.14.22" dependencies = [ "base64 0.13.0", "bincode", @@ -5309,17 +5309,17 @@ dependencies = [ "rand 0.7.3", "rustc_version", "serde", - "solana-frozen-abi 1.14.21", - "solana-frozen-abi-macro 1.14.21", + "solana-frozen-abi 1.14.22", + "solana-frozen-abi-macro 1.14.22", "solana-measure", "solana-metrics", - "solana-sdk 1.14.21", + "solana-sdk 1.14.22", "thiserror", ] [[package]] name = "solana-program-test" -version = "1.14.21" +version = "1.14.22" dependencies = [ "assert_matches", "async-trait", @@ -5331,10 +5331,10 @@ dependencies = [ "solana-banks-client", "solana-banks-server", "solana-bpf-loader-program", - "solana-logger 1.14.21", + "solana-logger 1.14.22", "solana-program-runtime", "solana-runtime", - "solana-sdk 1.14.21", + "solana-sdk 1.14.22", "solana-vote-program", "thiserror", "tokio", @@ -5342,7 +5342,7 @@ dependencies = [ [[package]] name = "solana-rayon-threadlimit" -version = "1.14.21" +version = "1.14.22" dependencies = [ "lazy_static", "num_cpus", @@ -5350,7 +5350,7 @@ dependencies = [ [[package]] name = "solana-remote-wallet" -version = "1.14.21" +version = "1.14.22" dependencies = [ "console", "dialoguer", @@ -5360,14 +5360,14 @@ dependencies = [ "parking_lot 0.12.1", "qstring", "semver", - "solana-sdk 1.14.21", + "solana-sdk 1.14.22", "thiserror", "uriparse", ] [[package]] name = "solana-rpc" -version = "1.14.21" +version = "1.14.22" dependencies = [ "base64 0.13.0", "bincode", @@ -5400,7 +5400,7 @@ dependencies = [ "solana-poh", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.14.21", + "solana-sdk 1.14.22", "solana-send-transaction-service", "solana-stake-program", "solana-storage-bigtable", @@ -5418,7 +5418,7 @@ dependencies = [ [[package]] name = "solana-runtime" -version = "1.14.21" +version = "1.14.22" dependencies = [ "arrayref", "bincode", @@ -5455,17 +5455,17 @@ dependencies = [ "solana-bucket-map", "solana-compute-budget-program", "solana-config-program", - "solana-frozen-abi 1.14.21", - "solana-frozen-abi-macro 1.14.21", + "solana-frozen-abi 1.14.22", + "solana-frozen-abi-macro 1.14.22", "solana-measure", "solana-metrics", "solana-program-runtime", "solana-rayon-threadlimit", - "solana-sdk 1.14.21", + "solana-sdk 1.14.22", "solana-stake-program", "solana-vote-program", "solana-zk-token-proof-program", - "solana-zk-token-sdk 1.14.21", + "solana-zk-token-sdk 1.14.22", "strum", "strum_macros", "symlink", @@ -5528,7 +5528,7 @@ dependencies = [ [[package]] name = "solana-sdk" -version = "1.14.21" +version = "1.14.22" dependencies = [ "assert_matches", "base64 0.13.0", @@ -5565,11 +5565,11 @@ dependencies = [ "serde_json", "sha2 0.10.2", "sha3 0.10.1", - "solana-frozen-abi 1.14.21", - "solana-frozen-abi-macro 1.14.21", - "solana-logger 1.14.21", - "solana-program 1.14.21", - "solana-sdk-macro 1.14.21", + "solana-frozen-abi 1.14.22", + "solana-frozen-abi-macro 1.14.22", + "solana-logger 1.14.22", + "solana-program 1.14.22", + "solana-sdk-macro 1.14.22", "thiserror", "uriparse", "wasm-bindgen", @@ -5590,7 +5590,7 @@ dependencies = [ [[package]] name = "solana-sdk-macro" -version = "1.14.21" +version = "1.14.22" dependencies = [ "bs58", "proc-macro2 1.0.51", @@ -5601,7 +5601,7 @@ dependencies = [ [[package]] name = "solana-send-transaction-service" -version = "1.14.21" +version = "1.14.22" dependencies = [ "crossbeam-channel", "log", @@ -5609,12 +5609,12 @@ dependencies = [ "solana-measure", "solana-metrics", "solana-runtime", - "solana-sdk 1.14.21", + "solana-sdk 1.14.22", ] [[package]] name = "solana-stake-program" -version = "1.14.21" +version = "1.14.22" dependencies = [ "bincode", "log", @@ -5624,18 +5624,18 @@ dependencies = [ "serde", "serde_derive", "solana-config-program", - "solana-frozen-abi 1.14.21", - "solana-frozen-abi-macro 1.14.21", + "solana-frozen-abi 1.14.22", + "solana-frozen-abi-macro 1.14.22", "solana-metrics", "solana-program-runtime", - "solana-sdk 1.14.21", + "solana-sdk 1.14.22", "solana-vote-program", "thiserror", ] [[package]] name = "solana-storage-bigtable" -version = "1.14.21" +version = "1.14.22" dependencies = [ "backoff", "bincode", @@ -5656,7 +5656,7 @@ dependencies = [ "serde_derive", "smpl_jwt", "solana-metrics", - "solana-sdk 1.14.21", + "solana-sdk 1.14.22", "solana-storage-proto", "solana-transaction-status", "thiserror", @@ -5667,7 +5667,7 @@ dependencies = [ [[package]] name = "solana-storage-proto" -version = "1.14.21" +version = "1.14.22" dependencies = [ "bincode", "bs58", @@ -5675,14 +5675,14 @@ dependencies = [ "protobuf-src", "serde", "solana-account-decoder", - "solana-sdk 1.14.21", + "solana-sdk 1.14.22", "solana-transaction-status", "tonic-build 0.8.0", ] [[package]] name = "solana-streamer" -version = "1.14.21" +version = "1.14.22" dependencies = [ "crossbeam-channel", "futures-util", @@ -5701,7 +5701,7 @@ dependencies = [ "rustls 0.20.6", "solana-metrics", "solana-perf", - "solana-sdk 1.14.21", + "solana-sdk 1.14.22", "thiserror", "tokio", "x509-parser", @@ -5709,13 +5709,13 @@ dependencies = [ [[package]] name = "solana-sys-tuner" -version = "1.14.21" +version = "1.14.22" dependencies = [ "clap 2.33.3", "libc", "log", "nix", - "solana-logger 1.14.21", + "solana-logger 1.14.22", "solana-version", "sysctl", "unix_socket2", @@ -5724,7 +5724,7 @@ dependencies = [ [[package]] name = "solana-test-validator" -version = "1.14.21" +version = "1.14.22" dependencies = [ "base64 0.13.0", "log", @@ -5735,20 +5735,20 @@ dependencies = [ "solana-core", "solana-gossip", "solana-ledger", - "solana-logger 1.14.21", + "solana-logger 1.14.22", "solana-net-utils", "solana-program-runtime", "solana-program-test", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.21", + "solana-sdk 1.14.22", "solana-streamer", "tokio", ] [[package]] name = "solana-transaction-status" -version = "1.14.21" +version = "1.14.22" dependencies = [ "Inflector", "base64 0.13.0", @@ -5764,7 +5764,7 @@ dependencies = [ "solana-address-lookup-table-program", "solana-measure", "solana-metrics", - "solana-sdk 1.14.21", + "solana-sdk 1.14.22", "solana-vote-program", "spl-associated-token-account", "spl-memo", @@ -5775,7 +5775,7 @@ dependencies = [ [[package]] name = "solana-validator" -version = "1.14.21" +version = "1.14.22" dependencies = [ "chrono", "clap 2.33.3", @@ -5806,14 +5806,14 @@ dependencies = [ "solana-genesis-utils", "solana-gossip", "solana-ledger", - "solana-logger 1.14.21", + "solana-logger 1.14.22", "solana-metrics", "solana-net-utils", "solana-perf", "solana-poh", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.21", + "solana-sdk 1.14.22", "solana-send-transaction-service", "solana-storage-bigtable", "solana-streamer", @@ -5826,21 +5826,21 @@ dependencies = [ [[package]] name = "solana-version" -version = "1.14.21" +version = "1.14.22" dependencies = [ "log", "rustc_version", "semver", "serde", "serde_derive", - "solana-frozen-abi 1.14.21", - "solana-frozen-abi-macro 1.14.21", - "solana-sdk 1.14.21", + "solana-frozen-abi 1.14.22", + "solana-frozen-abi-macro 1.14.22", + "solana-sdk 1.14.22", ] [[package]] name = "solana-vote-program" -version = "1.14.21" +version = "1.14.22" dependencies = [ "bincode", "log", @@ -5849,25 +5849,25 @@ dependencies = [ "rustc_version", "serde", "serde_derive", - "solana-frozen-abi 1.14.21", - "solana-frozen-abi-macro 1.14.21", + "solana-frozen-abi 1.14.22", + "solana-frozen-abi-macro 1.14.22", "solana-metrics", "solana-program-runtime", - "solana-sdk 1.14.21", + "solana-sdk 1.14.22", "thiserror", ] [[package]] name = "solana-zk-token-proof-program" -version = "1.14.21" +version = "1.14.22" dependencies = [ "bytemuck", "getrandom 0.1.14", "num-derive", "num-traits", "solana-program-runtime", - "solana-sdk 1.14.21", - "solana-zk-token-sdk 1.14.21", + "solana-sdk 1.14.22", + "solana-zk-token-sdk 1.14.22", ] [[package]] @@ -5903,7 +5903,7 @@ dependencies = [ [[package]] name = "solana-zk-token-sdk" -version = "1.14.21" +version = "1.14.22" dependencies = [ "aes-gcm-siv", "arrayref", @@ -5923,8 +5923,8 @@ dependencies = [ "serde", "serde_json", "sha3 0.9.1", - "solana-program 1.14.21", - "solana-sdk 1.14.21", + "solana-program 1.14.22", + "solana-sdk 1.14.22", "subtle", "thiserror", "zeroize", diff --git a/programs/bpf/Cargo.toml b/programs/bpf/Cargo.toml index afbc05c69e110f..7573d146e64951 100644 --- a/programs/bpf/Cargo.toml +++ b/programs/bpf/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "solana-bpf-programs" description = "Blockchain, Rebuilt for Scale" -version = "1.14.21" +version = "1.14.22" documentation = "https://docs.rs/solana" homepage = "https://solana.com/" readme = "README.md" @@ -26,22 +26,22 @@ itertools = "0.10.1" log = "0.4.11" miow = "0.3.6" net2 = "0.2.37" -solana-account-decoder = { path = "../../account-decoder", version = "=1.14.21" } -solana-bpf-loader-program = { path = "../bpf_loader", version = "=1.14.21" } -solana-bpf-rust-invoke = { path = "rust/invoke", version = "=1.14.21" } -solana-bpf-rust-realloc = { path = "rust/realloc", version = "=1.14.21" } -solana-bpf-rust-realloc-invoke = { path = "rust/realloc_invoke", version = "=1.14.21" } -solana-cli-output = { path = "../../cli-output", version = "=1.14.21" } -solana-logger = { path = "../../logger", version = "=1.14.21" } -solana-measure = { path = "../../measure", version = "=1.14.21" } -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.21" } -solana-runtime = { path = "../../runtime", version = "=1.14.21" } -solana-sdk = { path = "../../sdk", version = "=1.14.21" } -solana-transaction-status = { path = "../../transaction-status", version = "=1.14.21" } +solana-account-decoder = { path = "../../account-decoder", version = "=1.14.22" } +solana-bpf-loader-program = { path = "../bpf_loader", version = "=1.14.22" } +solana-bpf-rust-invoke = { path = "rust/invoke", version = "=1.14.22" } +solana-bpf-rust-realloc = { path = "rust/realloc", version = "=1.14.22" } +solana-bpf-rust-realloc-invoke = { path = "rust/realloc_invoke", version = "=1.14.22" } +solana-cli-output = { path = "../../cli-output", version = "=1.14.22" } +solana-logger = { path = "../../logger", version = "=1.14.22" } +solana-measure = { path = "../../measure", version = "=1.14.22" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.22" } +solana-runtime = { path = "../../runtime", version = "=1.14.22" } +solana-sdk = { path = "../../sdk", version = "=1.14.22" } +solana-transaction-status = { path = "../../transaction-status", version = "=1.14.22" } solana_rbpf = "=0.2.31" [dev-dependencies] -solana-ledger = { path = "../../ledger", version = "=1.14.21" } +solana-ledger = { path = "../../ledger", version = "=1.14.22" } [[bench]] name = "bpf_loader" diff --git a/programs/bpf/rust/128bit/Cargo.toml b/programs/bpf/rust/128bit/Cargo.toml index aececa058db4a8..9f15487e6cfee7 100644 --- a/programs/bpf/rust/128bit/Cargo.toml +++ b/programs/bpf/rust/128bit/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-128bit" -version = "1.14.21" +version = "1.14.22" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ documentation = "https://docs.rs/solana-bpf-rust-128bit" edition = "2021" [dependencies] -solana-bpf-rust-128bit-dep = { path = "../128bit_dep", version = "=1.14.21" } -solana-program = { path = "../../../../sdk/program", version = "=1.14.21" } +solana-bpf-rust-128bit-dep = { path = "../128bit_dep", version = "=1.14.22" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.22" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/128bit_dep/Cargo.toml b/programs/bpf/rust/128bit_dep/Cargo.toml index 62f85b31db5802..3bf9bf75b03c14 100644 --- a/programs/bpf/rust/128bit_dep/Cargo.toml +++ b/programs/bpf/rust/128bit_dep/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-128bit-dep" -version = "1.14.21" +version = "1.14.22" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-128bit-dep" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.21" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.22" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/bpf/rust/alloc/Cargo.toml b/programs/bpf/rust/alloc/Cargo.toml index 7fe83773004041..4236fb66119538 100644 --- a/programs/bpf/rust/alloc/Cargo.toml +++ b/programs/bpf/rust/alloc/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-alloc" -version = "1.14.21" +version = "1.14.22" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-alloc" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.21" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.22" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/call_depth/Cargo.toml b/programs/bpf/rust/call_depth/Cargo.toml index a40cfc3a4ca2d5..c661bc947b3454 100644 --- a/programs/bpf/rust/call_depth/Cargo.toml +++ b/programs/bpf/rust/call_depth/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-call-depth" -version = "1.14.21" +version = "1.14.22" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-call-depth" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.21" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.22" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/caller_access/Cargo.toml b/programs/bpf/rust/caller_access/Cargo.toml index a1c48ce29d1c83..d189cb9dd474f5 100644 --- a/programs/bpf/rust/caller_access/Cargo.toml +++ b/programs/bpf/rust/caller_access/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-caller-access" -version = "1.14.21" +version = "1.14.22" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-caller-access" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.21" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.22" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/curve25519/Cargo.toml b/programs/bpf/rust/curve25519/Cargo.toml index 1e1c07b276daa9..17a067708ec3cd 100644 --- a/programs/bpf/rust/curve25519/Cargo.toml +++ b/programs/bpf/rust/curve25519/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-curve25519" -version = "1.14.21" +version = "1.14.22" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ documentation = "https://docs.rs/solana-bpf-rust-zktoken_crypto" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.21" } -solana-zk-token-sdk = { path = "../../../../zk-token-sdk", version = "=1.14.21" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.22" } +solana-zk-token-sdk = { path = "../../../../zk-token-sdk", version = "=1.14.22" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/custom_heap/Cargo.toml b/programs/bpf/rust/custom_heap/Cargo.toml index 21e44d50a24a30..f2fe480a730f09 100644 --- a/programs/bpf/rust/custom_heap/Cargo.toml +++ b/programs/bpf/rust/custom_heap/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-custom-heap" -version = "1.14.21" +version = "1.14.22" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-custom-heap" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.21" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.22" } [features] default = ["custom-heap"] diff --git a/programs/bpf/rust/dep_crate/Cargo.toml b/programs/bpf/rust/dep_crate/Cargo.toml index a2a35ba9ce6a8a..fff61ac2e30754 100644 --- a/programs/bpf/rust/dep_crate/Cargo.toml +++ b/programs/bpf/rust/dep_crate/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-dep-crate" -version = "1.14.21" +version = "1.14.22" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,8 +12,8 @@ edition = "2021" [dependencies] byteorder = { version = "1", default-features = false } # list of crates which must be buildable for bpf programs -solana-address-lookup-table-program = { path = "../../../../programs/address-lookup-table", version = "=1.14.21" } -solana-program = { path = "../../../../sdk/program", version = "=1.14.21" } +solana-address-lookup-table-program = { path = "../../../../programs/address-lookup-table", version = "=1.14.22" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.22" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/deprecated_loader/Cargo.toml b/programs/bpf/rust/deprecated_loader/Cargo.toml index cfca71a106ff71..e62431287ac44f 100644 --- a/programs/bpf/rust/deprecated_loader/Cargo.toml +++ b/programs/bpf/rust/deprecated_loader/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-deprecated-loader" -version = "1.14.21" +version = "1.14.22" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-deprecated-loader" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.21" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.22" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/dup_accounts/Cargo.toml b/programs/bpf/rust/dup_accounts/Cargo.toml index 027938c66b97b1..d07a45bf40d034 100644 --- a/programs/bpf/rust/dup_accounts/Cargo.toml +++ b/programs/bpf/rust/dup_accounts/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-dup-accounts" -version = "1.14.21" +version = "1.14.22" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-dup-accounts" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.21" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.22" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/error_handling/Cargo.toml b/programs/bpf/rust/error_handling/Cargo.toml index 2bd5a7723f810c..13ad9de9b2466f 100644 --- a/programs/bpf/rust/error_handling/Cargo.toml +++ b/programs/bpf/rust/error_handling/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-error-handling" -version = "1.14.21" +version = "1.14.22" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,7 +12,7 @@ edition = "2021" [dependencies] num-derive = "0.3" num-traits = "0.2" -solana-program = { path = "../../../../sdk/program", version = "=1.14.21" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.22" } thiserror = "1.0" [lib] diff --git a/programs/bpf/rust/external_spend/Cargo.toml b/programs/bpf/rust/external_spend/Cargo.toml index 3227d84b9ff999..d7ab7a877bb16e 100644 --- a/programs/bpf/rust/external_spend/Cargo.toml +++ b/programs/bpf/rust/external_spend/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-external-spend" -version = "1.14.21" +version = "1.14.22" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-external-spend" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.21" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.22" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/finalize/Cargo.toml b/programs/bpf/rust/finalize/Cargo.toml index 276ed5769402a9..ffc4b0d4d13c45 100644 --- a/programs/bpf/rust/finalize/Cargo.toml +++ b/programs/bpf/rust/finalize/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-finalize" -version = "1.14.21" +version = "1.14.22" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-finalize" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.21" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.22" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/get_minimum_delegation/Cargo.toml b/programs/bpf/rust/get_minimum_delegation/Cargo.toml index 3e97a53cf99c84..92fea35399de59 100644 --- a/programs/bpf/rust/get_minimum_delegation/Cargo.toml +++ b/programs/bpf/rust/get_minimum_delegation/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-get-minimum-delegation" -version = "1.14.21" +version = "1.14.22" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-get-minimum-delegation" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.21" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.22" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/inner_instruction_alignment_check/Cargo.toml b/programs/bpf/rust/inner_instruction_alignment_check/Cargo.toml index d5d3d3d5fd4fbb..a210d87ea57037 100644 --- a/programs/bpf/rust/inner_instruction_alignment_check/Cargo.toml +++ b/programs/bpf/rust/inner_instruction_alignment_check/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-inner_instruction_alignment_check" -version = "1.14.21" +version = "1.14.22" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-inner_instruction_alignment_che edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.21" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.22" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/instruction_introspection/Cargo.toml b/programs/bpf/rust/instruction_introspection/Cargo.toml index 4b2613d200484e..1e6acc731f4545 100644 --- a/programs/bpf/rust/instruction_introspection/Cargo.toml +++ b/programs/bpf/rust/instruction_introspection/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-instruction-introspection" -version = "1.14.21" +version = "1.14.22" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-instruction-introspection" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.21" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.22" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/invoke/Cargo.toml b/programs/bpf/rust/invoke/Cargo.toml index 3268b413172e1e..e912ba0bc41e61 100644 --- a/programs/bpf/rust/invoke/Cargo.toml +++ b/programs/bpf/rust/invoke/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-invoke" -version = "1.14.21" +version = "1.14.22" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -15,7 +15,7 @@ program = [] [dependencies] solana-bpf-rust-invoked = { path = "../invoked", default-features = false } -solana-program = { path = "../../../../sdk/program", version = "=1.14.21" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.22" } [lib] crate-type = ["lib", "cdylib"] diff --git a/programs/bpf/rust/invoke_and_error/Cargo.toml b/programs/bpf/rust/invoke_and_error/Cargo.toml index 16055e016ef18b..ebb6be7b638220 100644 --- a/programs/bpf/rust/invoke_and_error/Cargo.toml +++ b/programs/bpf/rust/invoke_and_error/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-invoke-and-error" -version = "1.14.21" +version = "1.14.22" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-invoke-and-error" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.21" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.22" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/invoke_and_ok/Cargo.toml b/programs/bpf/rust/invoke_and_ok/Cargo.toml index 5f2187eda34ef1..38f1bb5aecf31d 100644 --- a/programs/bpf/rust/invoke_and_ok/Cargo.toml +++ b/programs/bpf/rust/invoke_and_ok/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-invoke-and-ok" -version = "1.14.21" +version = "1.14.22" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-invoke-and-ok" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.21" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.22" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/invoke_and_return/Cargo.toml b/programs/bpf/rust/invoke_and_return/Cargo.toml index f79e0ea01ce6d0..c373ccf4773820 100644 --- a/programs/bpf/rust/invoke_and_return/Cargo.toml +++ b/programs/bpf/rust/invoke_and_return/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-invoke-and-return" -version = "1.14.21" +version = "1.14.22" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-invoke-and-return" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.21" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.22" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/invoked/Cargo.toml b/programs/bpf/rust/invoked/Cargo.toml index eb8d4c9fe909d9..d1ee74d15d6b7d 100644 --- a/programs/bpf/rust/invoked/Cargo.toml +++ b/programs/bpf/rust/invoked/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-invoked" -version = "1.14.21" +version = "1.14.22" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,7 +14,7 @@ default = ["program"] program = [] [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.21" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.22" } [lib] crate-type = ["lib", "cdylib"] diff --git a/programs/bpf/rust/iter/Cargo.toml b/programs/bpf/rust/iter/Cargo.toml index 8640cdd5f3ee7f..1d81628db3acba 100644 --- a/programs/bpf/rust/iter/Cargo.toml +++ b/programs/bpf/rust/iter/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-iter" -version = "1.14.21" +version = "1.14.22" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-iter" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.21" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.22" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/log_data/Cargo.toml b/programs/bpf/rust/log_data/Cargo.toml index d189a1cef0229e..0cdb3034a86706 100644 --- a/programs/bpf/rust/log_data/Cargo.toml +++ b/programs/bpf/rust/log_data/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-log-data" -version = "1.14.21" +version = "1.14.22" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-log-data" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.21" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.22" } [features] default = ["program"] diff --git a/programs/bpf/rust/many_args/Cargo.toml b/programs/bpf/rust/many_args/Cargo.toml index a46860e2986bba..308a65937c53eb 100644 --- a/programs/bpf/rust/many_args/Cargo.toml +++ b/programs/bpf/rust/many_args/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-many-args" -version = "1.14.21" +version = "1.14.22" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ documentation = "https://docs.rs/solana-bpf-rust-many-args" edition = "2021" [dependencies] -solana-bpf-rust-many-args-dep = { path = "../many_args_dep", version = "=1.14.21" } -solana-program = { path = "../../../../sdk/program", version = "=1.14.21" } +solana-bpf-rust-many-args-dep = { path = "../many_args_dep", version = "=1.14.22" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.22" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/many_args_dep/Cargo.toml b/programs/bpf/rust/many_args_dep/Cargo.toml index 0759852690176b..a078ce544747a3 100644 --- a/programs/bpf/rust/many_args_dep/Cargo.toml +++ b/programs/bpf/rust/many_args_dep/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-many-args-dep" -version = "1.14.21" +version = "1.14.22" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-many-args-dep" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.21" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.22" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/bpf/rust/mem/Cargo.toml b/programs/bpf/rust/mem/Cargo.toml index daf2f92f1a6700..677490d29444e1 100644 --- a/programs/bpf/rust/mem/Cargo.toml +++ b/programs/bpf/rust/mem/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-mem" -version = "1.14.21" +version = "1.14.22" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,12 +13,12 @@ edition = "2021" no-entrypoint = [] [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.21" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.22" } [dev-dependencies] -solana-program-runtime = { path = "../../../../program-runtime", version = "=1.14.21" } -solana-program-test = { path = "../../../../program-test", version = "=1.14.21" } -solana-sdk = { path = "../../../../sdk", version = "=1.14.21" } +solana-program-runtime = { path = "../../../../program-runtime", version = "=1.14.22" } +solana-program-test = { path = "../../../../program-test", version = "=1.14.22" } +solana-sdk = { path = "../../../../sdk", version = "=1.14.22" } [lib] crate-type = ["cdylib", "lib"] diff --git a/programs/bpf/rust/membuiltins/Cargo.toml b/programs/bpf/rust/membuiltins/Cargo.toml index 7fada14590cd30..cb161807d6a421 100644 --- a/programs/bpf/rust/membuiltins/Cargo.toml +++ b/programs/bpf/rust/membuiltins/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-membuiltins" -version = "1.14.21" +version = "1.14.22" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ documentation = "https://docs.rs/solana-bpf-rust-mem" edition = "2021" [dependencies] -solana-bpf-rust-mem = { path = "../mem", version = "=1.14.21", features = [ "no-entrypoint" ] } -solana-program = { path = "../../../../sdk/program", version = "=1.14.21" } +solana-bpf-rust-mem = { path = "../mem", version = "=1.14.22", features = [ "no-entrypoint" ] } +solana-program = { path = "../../../../sdk/program", version = "=1.14.22" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/noop/Cargo.toml b/programs/bpf/rust/noop/Cargo.toml index d07fedee0be6bc..23754b502dc310 100644 --- a/programs/bpf/rust/noop/Cargo.toml +++ b/programs/bpf/rust/noop/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-noop" -version = "1.14.21" +version = "1.14.22" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-noop" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.21" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.22" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/panic/Cargo.toml b/programs/bpf/rust/panic/Cargo.toml index 3d27152e20b878..01e60dff78ab6b 100644 --- a/programs/bpf/rust/panic/Cargo.toml +++ b/programs/bpf/rust/panic/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-panic" -version = "1.14.21" +version = "1.14.22" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-panic" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.21" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.22" } [features] default = ["custom-panic"] diff --git a/programs/bpf/rust/param_passing/Cargo.toml b/programs/bpf/rust/param_passing/Cargo.toml index 80a3793b34bad6..6954d83ca0a7c9 100644 --- a/programs/bpf/rust/param_passing/Cargo.toml +++ b/programs/bpf/rust/param_passing/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-param-passing" -version = "1.14.21" +version = "1.14.22" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ documentation = "https://docs.rs/solana-bpf-rust-param-passing" edition = "2021" [dependencies] -solana-bpf-rust-param-passing-dep = { path = "../param_passing_dep", version = "=1.14.21" } -solana-program = { path = "../../../../sdk/program", version = "=1.14.21" } +solana-bpf-rust-param-passing-dep = { path = "../param_passing_dep", version = "=1.14.22" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.22" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/param_passing_dep/Cargo.toml b/programs/bpf/rust/param_passing_dep/Cargo.toml index 18f05c7423dbbf..741b38b6077380 100644 --- a/programs/bpf/rust/param_passing_dep/Cargo.toml +++ b/programs/bpf/rust/param_passing_dep/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-param-passing-dep" -version = "1.14.21" +version = "1.14.22" description = "Solana BPF program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-param-passing-dep" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.21" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.22" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/bpf/rust/rand/Cargo.toml b/programs/bpf/rust/rand/Cargo.toml index ecccce0abed8c4..12433a03d5933c 100644 --- a/programs/bpf/rust/rand/Cargo.toml +++ b/programs/bpf/rust/rand/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-rand" -version = "1.14.21" +version = "1.14.22" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,7 +12,7 @@ edition = "2021" [dependencies] getrandom = { version = "0.1.14", features = ["dummy"] } rand = "0.7" -solana-program = { path = "../../../../sdk/program", version = "=1.14.21" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.22" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/realloc/Cargo.toml b/programs/bpf/rust/realloc/Cargo.toml index b6ab1a9f49802d..0ea6ba974a42b5 100644 --- a/programs/bpf/rust/realloc/Cargo.toml +++ b/programs/bpf/rust/realloc/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-realloc" -version = "1.14.21" +version = "1.14.22" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,7 +14,7 @@ default = ["program"] program = [] [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.21" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.22" } [lib] crate-type = ["lib", "cdylib"] diff --git a/programs/bpf/rust/realloc_invoke/Cargo.toml b/programs/bpf/rust/realloc_invoke/Cargo.toml index 305e5dc0eaaaff..7e056ec6cdfbc2 100644 --- a/programs/bpf/rust/realloc_invoke/Cargo.toml +++ b/programs/bpf/rust/realloc_invoke/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-realloc-invoke" -version = "1.14.21" +version = "1.14.22" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,8 +14,8 @@ default = ["program"] program = [] [dependencies] -solana-bpf-rust-realloc = { path = "../realloc", version = "=1.14.21", default-features = false } -solana-program = { path = "../../../../sdk/program", version = "=1.14.21" } +solana-bpf-rust-realloc = { path = "../realloc", version = "=1.14.22", default-features = false } +solana-program = { path = "../../../../sdk/program", version = "=1.14.22" } [lib] crate-type = ["lib", "cdylib"] diff --git a/programs/bpf/rust/ro_account_modify/Cargo.toml b/programs/bpf/rust/ro_account_modify/Cargo.toml index fd091aa20854da..4a56580118dd09 100644 --- a/programs/bpf/rust/ro_account_modify/Cargo.toml +++ b/programs/bpf/rust/ro_account_modify/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-ro-account_modify" -version = "1.14.21" +version = "1.14.22" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-ro-modify" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.21" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.22" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/ro_modify/Cargo.toml b/programs/bpf/rust/ro_modify/Cargo.toml index d47ac224785ac8..403f89b44ff90d 100644 --- a/programs/bpf/rust/ro_modify/Cargo.toml +++ b/programs/bpf/rust/ro_modify/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-ro-modify" -version = "1.14.21" +version = "1.14.22" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-ro-modify" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.21" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.22" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/sanity/Cargo.toml b/programs/bpf/rust/sanity/Cargo.toml index 61b34aa6db33c1..6b6e7aa6f4e742 100644 --- a/programs/bpf/rust/sanity/Cargo.toml +++ b/programs/bpf/rust/sanity/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-sanity" -version = "1.14.21" +version = "1.14.22" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,12 +13,12 @@ edition = "2021" test-bpf = [] [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.21" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.22" } [dev-dependencies] -solana-program-runtime = { path = "../../../../program-runtime", version = "=1.14.21" } -solana-program-test = { path = "../../../../program-test", version = "=1.14.21" } -solana-sdk = { path = "../../../../sdk", version = "=1.14.21" } +solana-program-runtime = { path = "../../../../program-runtime", version = "=1.14.22" } +solana-program-test = { path = "../../../../program-test", version = "=1.14.22" } +solana-sdk = { path = "../../../../sdk", version = "=1.14.22" } [lib] crate-type = ["cdylib", "lib"] diff --git a/programs/bpf/rust/secp256k1_recover/Cargo.toml b/programs/bpf/rust/secp256k1_recover/Cargo.toml index 6b4dadb02c5d01..4151645aa1544b 100644 --- a/programs/bpf/rust/secp256k1_recover/Cargo.toml +++ b/programs/bpf/rust/secp256k1_recover/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-secp256k1-recover" -version = "1.14.21" +version = "1.14.22" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -11,7 +11,7 @@ edition = "2021" [dependencies] libsecp256k1 = { version = "0.7.0", default-features = false } -solana-program = { path = "../../../../sdk/program", version = "=1.14.21" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.22" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/sha/Cargo.toml b/programs/bpf/rust/sha/Cargo.toml index d333fc48e73a38..08b4767c4c5087 100644 --- a/programs/bpf/rust/sha/Cargo.toml +++ b/programs/bpf/rust/sha/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-sha" -version = "1.14.21" +version = "1.14.22" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -11,7 +11,7 @@ edition = "2021" [dependencies] blake3 = "1.0.0" -solana-program = { path = "../../../../sdk/program", version = "=1.14.21" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.22" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/sibling_inner_instruction/Cargo.toml b/programs/bpf/rust/sibling_inner_instruction/Cargo.toml index f3e9d611079fed..a076fbab9c7755 100644 --- a/programs/bpf/rust/sibling_inner_instruction/Cargo.toml +++ b/programs/bpf/rust/sibling_inner_instruction/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-sibling_inner-instructions" -version = "1.14.21" +version = "1.14.22" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-log-data" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.21" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.22" } [features] default = ["program"] diff --git a/programs/bpf/rust/sibling_instruction/Cargo.toml b/programs/bpf/rust/sibling_instruction/Cargo.toml index 488ad3bdc0e860..404e516234b77f 100644 --- a/programs/bpf/rust/sibling_instruction/Cargo.toml +++ b/programs/bpf/rust/sibling_instruction/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-sibling-instructions" -version = "1.14.21" +version = "1.14.22" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-log-data" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.21" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.22" } [features] default = ["program"] diff --git a/programs/bpf/rust/simulation/Cargo.toml b/programs/bpf/rust/simulation/Cargo.toml index aeeaec9676a750..fa1ae73438a35f 100644 --- a/programs/bpf/rust/simulation/Cargo.toml +++ b/programs/bpf/rust/simulation/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-simulation" -version = "1.14.21" +version = "1.14.22" description = "Solana BPF Program Simulation Differences" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,13 +13,13 @@ edition = "2021" test-bpf = [] [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.21" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.22" } [dev-dependencies] -solana-logger = { path = "../../../../logger", version = "=1.14.21" } -solana-program-test = { path = "../../../../program-test", version = "=1.14.21" } -solana-sdk = { path = "../../../../sdk", version = "=1.14.21" } -solana-validator = { path = "../../../../validator", version = "=1.14.21" } +solana-logger = { path = "../../../../logger", version = "=1.14.22" } +solana-program-test = { path = "../../../../program-test", version = "=1.14.22" } +solana-sdk = { path = "../../../../sdk", version = "=1.14.22" } +solana-validator = { path = "../../../../validator", version = "=1.14.22" } [lib] crate-type = ["cdylib", "lib"] diff --git a/programs/bpf/rust/spoof1/Cargo.toml b/programs/bpf/rust/spoof1/Cargo.toml index 85eabb8e1cbe5a..8c76541fa95380 100644 --- a/programs/bpf/rust/spoof1/Cargo.toml +++ b/programs/bpf/rust/spoof1/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-spoof1" -version = "1.14.21" +version = "1.14.22" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-spoof1" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.21" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.22" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/spoof1_system/Cargo.toml b/programs/bpf/rust/spoof1_system/Cargo.toml index dbd59809bb655a..cc27ca75293e37 100644 --- a/programs/bpf/rust/spoof1_system/Cargo.toml +++ b/programs/bpf/rust/spoof1_system/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-spoof1-system" -version = "1.14.21" +version = "1.14.22" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-spoof1-system" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.21" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.22" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/sysvar/Cargo.toml b/programs/bpf/rust/sysvar/Cargo.toml index 9f4a7b347a224c..0093f75775224a 100644 --- a/programs/bpf/rust/sysvar/Cargo.toml +++ b/programs/bpf/rust/sysvar/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-sysvar" -version = "1.14.21" +version = "1.14.22" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,12 +10,12 @@ documentation = "https://docs.rs/solana-bpf-rust-sysvar" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.21" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.22" } [dev-dependencies] -solana-program-runtime = { path = "../../../../program-runtime", version = "=1.14.21" } -solana-program-test = { path = "../../../../program-test", version = "=1.14.21" } -solana-sdk = { path = "../../../../sdk", version = "=1.14.21" } +solana-program-runtime = { path = "../../../../program-runtime", version = "=1.14.22" } +solana-program-test = { path = "../../../../program-test", version = "=1.14.22" } +solana-sdk = { path = "../../../../sdk", version = "=1.14.22" } [lib] crate-type = ["cdylib", "lib"] diff --git a/programs/bpf/rust/upgradeable/Cargo.toml b/programs/bpf/rust/upgradeable/Cargo.toml index 94220fe1cf49de..37e6596b1f0acd 100644 --- a/programs/bpf/rust/upgradeable/Cargo.toml +++ b/programs/bpf/rust/upgradeable/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-upgradeable" -version = "1.14.21" +version = "1.14.22" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-upgradeable" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.21" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.22" } [lib] name = "solana_bpf_rust_upgradeable" diff --git a/programs/bpf/rust/upgraded/Cargo.toml b/programs/bpf/rust/upgraded/Cargo.toml index 7615995c49735b..329e88a5e1a964 100644 --- a/programs/bpf/rust/upgraded/Cargo.toml +++ b/programs/bpf/rust/upgraded/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-upgraded" -version = "1.14.21" +version = "1.14.22" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-upgraded" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.21" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.22" } [lib] name = "solana_bpf_rust_upgraded" diff --git a/programs/bpf_loader/Cargo.toml b/programs/bpf_loader/Cargo.toml index 5a3b9950d97244..853ea0e494f2fe 100644 --- a/programs/bpf_loader/Cargo.toml +++ b/programs/bpf_loader/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-loader-program" -version = "1.14.21" +version = "1.14.22" description = "Solana BPF loader" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,17 +14,17 @@ bincode = "1.3.3" byteorder = "1.4.3" libsecp256k1 = "0.6.0" log = "0.4.17" -solana-measure = { path = "../../measure", version = "=1.14.21" } -solana-metrics = { path = "../../metrics", version = "=1.14.21" } -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.21" } -solana-sdk = { path = "../../sdk", version = "=1.14.21" } -solana-zk-token-sdk = { path = "../../zk-token-sdk", version = "=1.14.21" } +solana-measure = { path = "../../measure", version = "=1.14.22" } +solana-metrics = { path = "../../metrics", version = "=1.14.22" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.22" } +solana-sdk = { path = "../../sdk", version = "=1.14.22" } +solana-zk-token-sdk = { path = "../../zk-token-sdk", version = "=1.14.22" } solana_rbpf = "=0.2.31" thiserror = "1.0" [dev-dependencies] rand = "0.7.3" -solana-runtime = { path = "../../runtime", version = "=1.14.21" } +solana-runtime = { path = "../../runtime", version = "=1.14.22" } [lib] crate-type = ["lib"] diff --git a/programs/bpf_loader/gen-syscall-list/Cargo.toml b/programs/bpf_loader/gen-syscall-list/Cargo.toml index c19fb8ad55e104..f35201a534564e 100644 --- a/programs/bpf_loader/gen-syscall-list/Cargo.toml +++ b/programs/bpf_loader/gen-syscall-list/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "gen-syscall-list" -version = "1.14.21" +version = "1.14.22" edition = "2021" license = "Apache-2.0" publish = false diff --git a/programs/compute-budget/Cargo.toml b/programs/compute-budget/Cargo.toml index 52a2adeb5e49b3..f332625edab086 100644 --- a/programs/compute-budget/Cargo.toml +++ b/programs/compute-budget/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "solana-compute-budget-program" description = "Solana Compute Budget program" -version = "1.14.21" +version = "1.14.22" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-compute-budget-program" repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ license = "Apache-2.0" edition = "2021" [dependencies] -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.21" } -solana-sdk = { path = "../../sdk", version = "=1.14.21" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.22" } +solana-sdk = { path = "../../sdk", version = "=1.14.22" } [lib] crate-type = ["lib"] diff --git a/programs/config/Cargo.toml b/programs/config/Cargo.toml index b4bf0c70a66077..0ccfdfeeae2127 100644 --- a/programs/config/Cargo.toml +++ b/programs/config/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-config-program" -version = "1.14.21" +version = "1.14.22" description = "Solana Config program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,11 +14,11 @@ bincode = "1.3.3" chrono = { version = "0.4.11", features = ["serde"] } serde = "1.0.138" serde_derive = "1.0.103" -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.21" } -solana-sdk = { path = "../../sdk", version = "=1.14.21" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.22" } +solana-sdk = { path = "../../sdk", version = "=1.14.22" } [dev-dependencies] -solana-logger = { path = "../../logger", version = "=1.14.21" } +solana-logger = { path = "../../logger", version = "=1.14.22" } [lib] crate-type = ["lib"] diff --git a/programs/ed25519-tests/Cargo.toml b/programs/ed25519-tests/Cargo.toml index e44e2343ad683c..95849b4e039bd6 100644 --- a/programs/ed25519-tests/Cargo.toml +++ b/programs/ed25519-tests/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-ed25519-program-tests" -version = "1.14.21" +version = "1.14.22" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" @@ -12,8 +12,8 @@ publish = false assert_matches = "1.5.0" ed25519-dalek = "=1.0.1" rand = "0.7.0" -solana-program-test = { path = "../../program-test", version = "=1.14.21" } -solana-sdk = { path = "../../sdk", version = "=1.14.21" } +solana-program-test = { path = "../../program-test", version = "=1.14.22" } +solana-sdk = { path = "../../sdk", version = "=1.14.22" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/stake/Cargo.toml b/programs/stake/Cargo.toml index 232994eeae7c67..89f36a2bf25d22 100644 --- a/programs/stake/Cargo.toml +++ b/programs/stake/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-stake-program" -version = "1.14.21" +version = "1.14.22" description = "Solana Stake program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -16,19 +16,19 @@ num-derive = "0.3" num-traits = "0.2" serde = "1.0.138" serde_derive = "1.0.103" -solana-config-program = { path = "../config", version = "=1.14.21" } -solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.21" } -solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.21" } -solana-metrics = { path = "../../metrics", version = "=1.14.21" } -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.21" } -solana-sdk = { path = "../../sdk", version = "=1.14.21" } -solana-vote-program = { path = "../vote", version = "=1.14.21" } +solana-config-program = { path = "../config", version = "=1.14.22" } +solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.22" } +solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.22" } +solana-metrics = { path = "../../metrics", version = "=1.14.22" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.22" } +solana-sdk = { path = "../../sdk", version = "=1.14.22" } +solana-vote-program = { path = "../vote", version = "=1.14.22" } thiserror = "1.0" [dev-dependencies] assert_matches = "1.5.0" proptest = "1.0" -solana-logger = { path = "../../logger", version = "=1.14.21" } +solana-logger = { path = "../../logger", version = "=1.14.22" } test-case = "2.1.0" [build-dependencies] diff --git a/programs/vote/Cargo.toml b/programs/vote/Cargo.toml index 21d50ea569f82f..d1611d4806eaa7 100644 --- a/programs/vote/Cargo.toml +++ b/programs/vote/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-vote-program" -version = "1.14.21" +version = "1.14.22" description = "Solana Vote program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -16,17 +16,17 @@ num-derive = "0.3" num-traits = "0.2" serde = "1.0.138" serde_derive = "1.0.103" -solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.21" } -solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.21" } -solana-metrics = { path = "../../metrics", version = "=1.14.21" } -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.21" } -solana-sdk = { path = "../../sdk", version = "=1.14.21" } +solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.22" } +solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.22" } +solana-metrics = { path = "../../metrics", version = "=1.14.22" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.22" } +solana-sdk = { path = "../../sdk", version = "=1.14.22" } thiserror = "1.0" [dev-dependencies] itertools = "0.10.3" rand = "0.7.0" -solana-logger = { path = "../../logger", version = "=1.14.21" } +solana-logger = { path = "../../logger", version = "=1.14.22" } test-case = "2.1.0" [build-dependencies] diff --git a/programs/zk-token-proof-tests/Cargo.toml b/programs/zk-token-proof-tests/Cargo.toml index 97721e581fd80d..b11e5d9ed9ab03 100644 --- a/programs/zk-token-proof-tests/Cargo.toml +++ b/programs/zk-token-proof-tests/Cargo.toml @@ -2,14 +2,14 @@ name = "solana-zk-token-proof-program-tests" authors = ["Solana Labs Maintainers "] repository = "https://github.com/solana-labs/solana" -version = "1.14.21" +version = "1.14.22" license = "Apache-2.0" edition = "2021" publish = false [dev-dependencies] bytemuck = { version = "1.11.0", features = ["derive"] } -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.21" } -solana-program-test = { path = "../../program-test", version = "=1.14.21" } -solana-sdk = { path = "../../sdk", version = "=1.14.21" } -solana-zk-token-sdk = { path = "../../zk-token-sdk", version = "=1.14.21" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.22" } +solana-program-test = { path = "../../program-test", version = "=1.14.22" } +solana-sdk = { path = "../../sdk", version = "=1.14.22" } +solana-zk-token-sdk = { path = "../../zk-token-sdk", version = "=1.14.22" } diff --git a/programs/zk-token-proof/Cargo.toml b/programs/zk-token-proof/Cargo.toml index fc56b2903cbf3a..0a5cf942e571b2 100644 --- a/programs/zk-token-proof/Cargo.toml +++ b/programs/zk-token-proof/Cargo.toml @@ -3,7 +3,7 @@ name = "solana-zk-token-proof-program" description = "Solana Zk Token Proof Program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" -version = "1.14.21" +version = "1.14.22" license = "Apache-2.0" edition = "2021" @@ -12,6 +12,6 @@ bytemuck = { version = "1.11.0", features = ["derive"] } getrandom = { version = "0.1", features = ["dummy"] } num-derive = "0.3" num-traits = "0.2" -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.21" } -solana-sdk = { path = "../../sdk", version = "=1.14.21" } -solana-zk-token-sdk = { path = "../../zk-token-sdk", version = "=1.14.21" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.22" } +solana-sdk = { path = "../../sdk", version = "=1.14.22" } +solana-zk-token-sdk = { path = "../../zk-token-sdk", version = "=1.14.22" } diff --git a/rayon-threadlimit/Cargo.toml b/rayon-threadlimit/Cargo.toml index cec75751863acb..b9568adad7e464 100644 --- a/rayon-threadlimit/Cargo.toml +++ b/rayon-threadlimit/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-rayon-threadlimit" -version = "1.14.21" +version = "1.14.22" description = "solana-rayon-threadlimit" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-rayon-threadlimit" diff --git a/rbpf-cli/Cargo.toml b/rbpf-cli/Cargo.toml index 0d8a7febf1e959..ca8df109d23173 100644 --- a/rbpf-cli/Cargo.toml +++ b/rbpf-cli/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "rbpf-cli" -version = "1.14.21" +version = "1.14.22" description = "CLI to test and analyze eBPF programs" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/rbpf" @@ -13,8 +13,8 @@ publish = false clap = { version = "3.1.5", features = ["cargo"] } serde = "1.0.138" serde_json = "1.0.81" -solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.21" } -solana-logger = { path = "../logger", version = "=1.14.21" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.21" } -solana-sdk = { path = "../sdk", version = "=1.14.21" } +solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.22" } +solana-logger = { path = "../logger", version = "=1.14.22" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.22" } +solana-sdk = { path = "../sdk", version = "=1.14.22" } solana_rbpf = "=0.2.31" diff --git a/remote-wallet/Cargo.toml b/remote-wallet/Cargo.toml index 89094e2bdbe96d..9c37629b8c5f3f 100644 --- a/remote-wallet/Cargo.toml +++ b/remote-wallet/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-remote-wallet" description = "Blockchain, Rebuilt for Scale" -version = "1.14.21" +version = "1.14.22" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -19,7 +19,7 @@ num-traits = { version = "0.2" } parking_lot = "0.12" qstring = "0.7.2" semver = "1.0" -solana-sdk = { path = "../sdk", version = "=1.14.21" } +solana-sdk = { path = "../sdk", version = "=1.14.22" } thiserror = "1.0" uriparse = "0.6.4" diff --git a/rpc-test/Cargo.toml b/rpc-test/Cargo.toml index b56084f6454b49..f916d141c34112 100644 --- a/rpc-test/Cargo.toml +++ b/rpc-test/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-rpc-test" -version = "1.14.21" +version = "1.14.22" description = "Solana RPC Test" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -19,17 +19,17 @@ log = "0.4.17" reqwest = { version = "0.11.11", default-features = false, features = ["blocking", "brotli", "deflate", "gzip", "rustls-tls", "json"] } serde = "1.0.138" serde_json = "1.0.81" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.21" } -solana-client = { path = "../client", version = "=1.14.21" } -solana-rpc = { path = "../rpc", version = "=1.14.21" } -solana-sdk = { path = "../sdk", version = "=1.14.21" } -solana-streamer = { path = "../streamer", version = "=1.14.21" } -solana-test-validator = { path = "../test-validator", version = "=1.14.21" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.21" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.22" } +solana-client = { path = "../client", version = "=1.14.22" } +solana-rpc = { path = "../rpc", version = "=1.14.22" } +solana-sdk = { path = "../sdk", version = "=1.14.22" } +solana-streamer = { path = "../streamer", version = "=1.14.22" } +solana-test-validator = { path = "../test-validator", version = "=1.14.22" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.22" } tokio = { version = "~1.14.1", features = ["full"] } [dev-dependencies] -solana-logger = { path = "../logger", version = "=1.14.21" } +solana-logger = { path = "../logger", version = "=1.14.22" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/rpc/Cargo.toml b/rpc/Cargo.toml index c6de0901a8bee2..0638a699684df3 100644 --- a/rpc/Cargo.toml +++ b/rpc/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-rpc" -version = "1.14.21" +version = "1.14.22" description = "Solana RPC" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -29,26 +29,26 @@ serde = "1.0.138" serde_derive = "1.0.103" serde_json = "1.0.81" soketto = "0.7" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.21" } -solana-client = { path = "../client", version = "=1.14.21" } -solana-entry = { path = "../entry", version = "=1.14.21" } -solana-faucet = { path = "../faucet", version = "=1.14.21" } -solana-gossip = { path = "../gossip", version = "=1.14.21" } -solana-ledger = { path = "../ledger", version = "=1.14.21" } -solana-measure = { path = "../measure", version = "=1.14.21" } -solana-metrics = { path = "../metrics", version = "=1.14.21" } -solana-perf = { path = "../perf", version = "=1.14.21" } -solana-poh = { path = "../poh", version = "=1.14.21" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.21" } -solana-runtime = { path = "../runtime", version = "=1.14.21" } -solana-sdk = { path = "../sdk", version = "=1.14.21" } -solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.21" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.21" } -solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.21" } -solana-streamer = { path = "../streamer", version = "=1.14.21" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.21" } -solana-version = { path = "../version", version = "=1.14.21" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.21" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.22" } +solana-client = { path = "../client", version = "=1.14.22" } +solana-entry = { path = "../entry", version = "=1.14.22" } +solana-faucet = { path = "../faucet", version = "=1.14.22" } +solana-gossip = { path = "../gossip", version = "=1.14.22" } +solana-ledger = { path = "../ledger", version = "=1.14.22" } +solana-measure = { path = "../measure", version = "=1.14.22" } +solana-metrics = { path = "../metrics", version = "=1.14.22" } +solana-perf = { path = "../perf", version = "=1.14.22" } +solana-poh = { path = "../poh", version = "=1.14.22" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.22" } +solana-runtime = { path = "../runtime", version = "=1.14.22" } +solana-sdk = { path = "../sdk", version = "=1.14.22" } +solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.22" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.22" } +solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.22" } +solana-streamer = { path = "../streamer", version = "=1.14.22" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.22" } +solana-version = { path = "../version", version = "=1.14.22" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.22" } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } spl-token-2022 = { version = "=0.6.1", features = ["no-entrypoint"] } stream-cancel = "0.8.1" @@ -58,9 +58,9 @@ tokio-util = { version = "0.6", features = ["codec", "compat"] } [dev-dependencies] serial_test = "0.8.0" -solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.21" } -solana-net-utils = { path = "../net-utils", version = "=1.14.21" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.21" } +solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.22" } +solana-net-utils = { path = "../net-utils", version = "=1.14.22" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.22" } symlink = "0.1.0" [lib] diff --git a/runtime/Cargo.toml b/runtime/Cargo.toml index f2950a66044c42..e894d7cbf658b7 100644 --- a/runtime/Cargo.toml +++ b/runtime/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-runtime" -version = "1.14.21" +version = "1.14.22" description = "Solana runtime" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -40,21 +40,21 @@ rayon = "1.5.3" regex = "1.5.6" serde = { version = "1.0.138", features = ["rc"] } serde_derive = "1.0.103" -solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.21" } -solana-bucket-map = { path = "../bucket_map", version = "=1.14.21" } -solana-compute-budget-program = { path = "../programs/compute-budget", version = "=1.14.21" } -solana-config-program = { path = "../programs/config", version = "=1.14.21" } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.21" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.21" } -solana-measure = { path = "../measure", version = "=1.14.21" } -solana-metrics = { path = "../metrics", version = "=1.14.21" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.21" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.21" } -solana-sdk = { path = "../sdk", version = "=1.14.21" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.21" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.21" } -solana-zk-token-proof-program = { path = "../programs/zk-token-proof", version = "=1.14.21" } -solana-zk-token-sdk = { path = "../zk-token-sdk", version = "=1.14.21" } +solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.22" } +solana-bucket-map = { path = "../bucket_map", version = "=1.14.22" } +solana-compute-budget-program = { path = "../programs/compute-budget", version = "=1.14.22" } +solana-config-program = { path = "../programs/config", version = "=1.14.22" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.22" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.22" } +solana-measure = { path = "../measure", version = "=1.14.22" } +solana-metrics = { path = "../metrics", version = "=1.14.22" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.22" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.22" } +solana-sdk = { path = "../sdk", version = "=1.14.22" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.22" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.22" } +solana-zk-token-proof-program = { path = "../programs/zk-token-proof", version = "=1.14.22" } +solana-zk-token-sdk = { path = "../zk-token-sdk", version = "=1.14.22" } strum = { version = "0.24", features = ["derive"] } strum_macros = "0.24" symlink = "0.1.0" @@ -72,7 +72,7 @@ assert_matches = "1.5.0" ed25519-dalek = "=1.0.1" libsecp256k1 = "0.6.0" rand_chacha = "0.2.2" -solana-logger = { path = "../logger", version = "=1.14.21" } +solana-logger = { path = "../logger", version = "=1.14.22" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/runtime/store-tool/Cargo.toml b/runtime/store-tool/Cargo.toml index 12da65a2a3e720..c4d9ee80794c2c 100644 --- a/runtime/store-tool/Cargo.toml +++ b/runtime/store-tool/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-store-tool" description = "Tool to inspect append vecs" -version = "1.14.21" +version = "1.14.22" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -12,9 +12,9 @@ publish = false [dependencies] clap = "2.33.1" log = { version = "0.4.17" } -solana-logger = { path = "../../logger", version = "=1.14.21" } -solana-runtime = { path = "..", version = "=1.14.21" } -solana-version = { path = "../../version", version = "=1.14.21" } +solana-logger = { path = "../../logger", version = "=1.14.22" } +solana-runtime = { path = "..", version = "=1.14.22" } +solana-version = { path = "../../version", version = "=1.14.22" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/sdk/Cargo.toml b/sdk/Cargo.toml index 8a2a44f8d480b9..a18fd774927418 100644 --- a/sdk/Cargo.toml +++ b/sdk/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-sdk" -version = "1.14.21" +version = "1.14.22" description = "Solana SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -71,11 +71,11 @@ serde_derive = "1.0.103" serde_json = { version = "1.0.81", optional = true } sha2 = "0.10.2" sha3 = { version = "0.10.1", optional = true } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.21" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.21" } -solana-logger = { path = "../logger", version = "=1.14.21", optional = true } -solana-program = { path = "program", version = "=1.14.21" } -solana-sdk-macro = { path = "macro", version = "=1.14.21" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.22" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.22" } +solana-logger = { path = "../logger", version = "=1.14.22", optional = true } +solana-program = { path = "program", version = "=1.14.22" } +solana-sdk-macro = { path = "macro", version = "=1.14.22" } thiserror = "1.0" uriparse = "0.6.4" wasm-bindgen = "0.2" diff --git a/sdk/cargo-build-bpf/Cargo.toml b/sdk/cargo-build-bpf/Cargo.toml index a03d14308b0a98..3aecabba00e22a 100644 --- a/sdk/cargo-build-bpf/Cargo.toml +++ b/sdk/cargo-build-bpf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-cargo-build-bpf" -version = "1.14.21" +version = "1.14.22" description = "Compile a local package and all of its dependencies using the Solana SBF SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,7 +12,7 @@ publish = false [dependencies] cargo_metadata = "0.15.0" clap = { version = "3.1.5", features = ["cargo", "env"] } -solana-sdk = { path = "..", version = "=1.14.21" } +solana-sdk = { path = "..", version = "=1.14.22" } [features] program = [] diff --git a/sdk/cargo-build-sbf/Cargo.toml b/sdk/cargo-build-sbf/Cargo.toml index 52dae4d9aa2338..6c23eb237b5d84 100644 --- a/sdk/cargo-build-sbf/Cargo.toml +++ b/sdk/cargo-build-sbf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-cargo-build-sbf" -version = "1.14.21" +version = "1.14.22" description = "Compile a local package and all of its dependencies using the Solana SBF SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -15,9 +15,9 @@ cargo_metadata = "0.15.0" clap = { version = "3.1.5", features = ["cargo", "env"] } log = { version = "0.4.14", features = ["std"] } regex = "1.5.6" -solana-download-utils = { path = "../../download-utils", version = "=1.14.21" } -solana-logger = { path = "../../logger", version = "=1.14.21" } -solana-sdk = { path = "..", version = "=1.14.21" } +solana-download-utils = { path = "../../download-utils", version = "=1.14.22" } +solana-logger = { path = "../../logger", version = "=1.14.22" } +solana-sdk = { path = "..", version = "=1.14.22" } tar = "0.4.38" [dev-dependencies] diff --git a/sdk/cargo-build-sbf/tests/crates/fail/Cargo.toml b/sdk/cargo-build-sbf/tests/crates/fail/Cargo.toml index 4266b3cf41de76..01670aae4433c3 100644 --- a/sdk/cargo-build-sbf/tests/crates/fail/Cargo.toml +++ b/sdk/cargo-build-sbf/tests/crates/fail/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "fail" -version = "1.14.21" +version = "1.14.22" description = "Solana SBF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ edition = "2021" publish = false [dependencies] -solana-program = { path = "../../../../program", version = "=1.14.21" } +solana-program = { path = "../../../../program", version = "=1.14.22" } [lib] crate-type = ["cdylib"] diff --git a/sdk/cargo-build-sbf/tests/crates/noop/Cargo.toml b/sdk/cargo-build-sbf/tests/crates/noop/Cargo.toml index 8d8228109edd01..79fd1a09ff2fdd 100644 --- a/sdk/cargo-build-sbf/tests/crates/noop/Cargo.toml +++ b/sdk/cargo-build-sbf/tests/crates/noop/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "noop" -version = "1.14.21" +version = "1.14.22" description = "Solana SBF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ edition = "2021" publish = false [dependencies] -solana-program = { path = "../../../../program", version = "=1.14.21" } +solana-program = { path = "../../../../program", version = "=1.14.22" } [lib] crate-type = ["cdylib"] diff --git a/sdk/cargo-test-bpf/Cargo.toml b/sdk/cargo-test-bpf/Cargo.toml index 6c824c0cdb49ed..e9465229088750 100644 --- a/sdk/cargo-test-bpf/Cargo.toml +++ b/sdk/cargo-test-bpf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-cargo-test-bpf" -version = "1.14.21" +version = "1.14.22" description = "Execute all unit and integration tests after building with the Solana SBF SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/sdk/cargo-test-sbf/Cargo.toml b/sdk/cargo-test-sbf/Cargo.toml index c9b78a4e0eff4c..4b2dc3f4285c2c 100644 --- a/sdk/cargo-test-sbf/Cargo.toml +++ b/sdk/cargo-test-sbf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-cargo-test-sbf" -version = "1.14.21" +version = "1.14.22" description = "Execute all unit and integration tests after building with the Solana SBF SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/sdk/gen-headers/Cargo.toml b/sdk/gen-headers/Cargo.toml index 885a3af6ea3d13..5ebc43a044fca8 100644 --- a/sdk/gen-headers/Cargo.toml +++ b/sdk/gen-headers/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "gen-headers" -version = "1.14.21" +version = "1.14.22" edition = "2021" license = "Apache-2.0" publish = false diff --git a/sdk/macro/Cargo.toml b/sdk/macro/Cargo.toml index 8c404d7b2175b0..30b523d6cf5456 100644 --- a/sdk/macro/Cargo.toml +++ b/sdk/macro/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-sdk-macro" -version = "1.14.21" +version = "1.14.22" description = "Solana SDK Macro" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/sdk/program/Cargo.toml b/sdk/program/Cargo.toml index abd88099c7072b..4b8ef6aee0b569 100644 --- a/sdk/program/Cargo.toml +++ b/sdk/program/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-program" -version = "1.14.21" +version = "1.14.22" description = "Solana Program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -31,9 +31,9 @@ serde_derive = "1.0" serde_json = "1.0" sha2 = "0.10.0" sha3 = "0.10.0" -solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.21" } -solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.21" } -solana-sdk-macro = { path = "../macro", version = "=1.14.21" } +solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.22" } +solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.22" } +solana-sdk-macro = { path = "../macro", version = "=1.14.22" } thiserror = "1.0" [target.'cfg(not(target_os = "solana"))'.dependencies] @@ -50,7 +50,7 @@ wasm-bindgen = "0.2" zeroize = { version = "1.3", default-features = true, features = ["zeroize_derive"] } [target.'cfg(not(target_os = "solana"))'.dev-dependencies] -solana-logger = { path = "../../logger", version = "=1.14.21" } +solana-logger = { path = "../../logger", version = "=1.14.22" } [target.'cfg(target_arch = "wasm32")'.dependencies] console_error_panic_hook = "0.1.7" diff --git a/send-transaction-service/Cargo.toml b/send-transaction-service/Cargo.toml index ee765ffa9f2661..b07de0e49a04c3 100644 --- a/send-transaction-service/Cargo.toml +++ b/send-transaction-service/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-send-transaction-service" -version = "1.14.21" +version = "1.14.22" description = "Solana send transaction service" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,14 +12,14 @@ edition = "2021" [dependencies] crossbeam-channel = "0.5" log = "0.4.17" -solana-client = { path = "../client", version = "=1.14.21" } -solana-measure = { path = "../measure", version = "=1.14.21" } -solana-metrics = { path = "../metrics", version = "=1.14.21" } -solana-runtime = { path = "../runtime", version = "=1.14.21" } -solana-sdk = { path = "../sdk", version = "=1.14.21" } +solana-client = { path = "../client", version = "=1.14.22" } +solana-measure = { path = "../measure", version = "=1.14.22" } +solana-metrics = { path = "../metrics", version = "=1.14.22" } +solana-runtime = { path = "../runtime", version = "=1.14.22" } +solana-sdk = { path = "../sdk", version = "=1.14.22" } [dev-dependencies] -solana-logger = { path = "../logger", version = "=1.14.21" } +solana-logger = { path = "../logger", version = "=1.14.22" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/stake-accounts/Cargo.toml b/stake-accounts/Cargo.toml index 37c3302c2f9d20..8674cd735e0a4a 100644 --- a/stake-accounts/Cargo.toml +++ b/stake-accounts/Cargo.toml @@ -3,7 +3,7 @@ name = "solana-stake-accounts" description = "Blockchain, Rebuilt for Scale" authors = ["Solana Maintainers "] edition = "2021" -version = "1.14.21" +version = "1.14.22" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -11,15 +11,15 @@ documentation = "https://docs.rs/solana-stake-accounts" [dependencies] clap = "2.33.1" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.21" } -solana-cli-config = { path = "../cli-config", version = "=1.14.21" } -solana-client = { path = "../client", version = "=1.14.21" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.21" } -solana-sdk = { path = "../sdk", version = "=1.14.21" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.21" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.22" } +solana-cli-config = { path = "../cli-config", version = "=1.14.22" } +solana-client = { path = "../client", version = "=1.14.22" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.22" } +solana-sdk = { path = "../sdk", version = "=1.14.22" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.22" } [dev-dependencies] -solana-runtime = { path = "../runtime", version = "=1.14.21" } +solana-runtime = { path = "../runtime", version = "=1.14.22" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/storage-bigtable/Cargo.toml b/storage-bigtable/Cargo.toml index bd82eb9f558e54..12a4eea13fe352 100644 --- a/storage-bigtable/Cargo.toml +++ b/storage-bigtable/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-storage-bigtable" -version = "1.14.21" +version = "1.14.22" description = "Solana Storage BigTable" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -27,10 +27,10 @@ prost-types = "0.11.0" serde = "1.0.138" serde_derive = "1.0.103" smpl_jwt = "0.7.1" -solana-metrics = { path = "../metrics", version = "=1.14.21" } -solana-sdk = { path = "../sdk", version = "=1.14.21" } -solana-storage-proto = { path = "../storage-proto", version = "=1.14.21" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.21" } +solana-metrics = { path = "../metrics", version = "=1.14.22" } +solana-sdk = { path = "../sdk", version = "=1.14.22" } +solana-storage-proto = { path = "../storage-proto", version = "=1.14.22" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.22" } thiserror = "1.0" tokio = "1" tonic = { version = "0.8.0", features = ["tls", "transport"] } diff --git a/storage-bigtable/build-proto/Cargo.toml b/storage-bigtable/build-proto/Cargo.toml index bbd39b87210e55..5bce7504b6dd46 100644 --- a/storage-bigtable/build-proto/Cargo.toml +++ b/storage-bigtable/build-proto/Cargo.toml @@ -7,7 +7,7 @@ license = "Apache-2.0" name = "proto" publish = false repository = "https://github.com/solana-labs/solana" -version = "1.14.21" +version = "1.14.22" [dependencies] tonic-build = "0.8.0" diff --git a/storage-proto/Cargo.toml b/storage-proto/Cargo.toml index 4b857c156eea27..642e9fbf9042c3 100644 --- a/storage-proto/Cargo.toml +++ b/storage-proto/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-storage-proto" -version = "1.14.21" +version = "1.14.22" description = "Solana Storage Protobuf Definitions" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,9 +14,9 @@ bincode = "1.3.3" bs58 = "0.4.0" prost = "0.11.0" serde = "1.0.138" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.21" } -solana-sdk = { path = "../sdk", version = "=1.14.21" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.21" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.22" } +solana-sdk = { path = "../sdk", version = "=1.14.22" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.22" } [dev-dependencies] enum-iterator = "0.8.1" diff --git a/streamer/Cargo.toml b/streamer/Cargo.toml index d4258a8e24656c..75825a690dd65f 100644 --- a/streamer/Cargo.toml +++ b/streamer/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-streamer" -version = "1.14.21" +version = "1.14.22" description = "Solana Streamer" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -25,15 +25,15 @@ quinn = "0.8.3" rand = "0.7.0" rcgen = "0.9.2" rustls = { version = "0.20.6", features = ["dangerous_configuration"] } -solana-metrics = { path = "../metrics", version = "=1.14.21" } -solana-perf = { path = "../perf", version = "=1.14.21" } -solana-sdk = { path = "../sdk", version = "=1.14.21" } +solana-metrics = { path = "../metrics", version = "=1.14.22" } +solana-perf = { path = "../perf", version = "=1.14.22" } +solana-sdk = { path = "../sdk", version = "=1.14.22" } thiserror = "1.0" tokio = { version = "1", features = ["full"] } x509-parser = "0.14.0" [dev-dependencies] -solana-logger = { path = "../logger", version = "=1.14.21" } +solana-logger = { path = "../logger", version = "=1.14.22" } [lib] crate-type = ["lib"] diff --git a/sys-tuner/Cargo.toml b/sys-tuner/Cargo.toml index 47ffcc30ab1a71..8b9b3aeef8856e 100644 --- a/sys-tuner/Cargo.toml +++ b/sys-tuner/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-sys-tuner" description = "The solana cluster system tuner daemon" -version = "1.14.21" +version = "1.14.22" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,8 +14,8 @@ publish = true clap = "2.33.1" libc = "0.2.126" log = "0.4.17" -solana-logger = { path = "../logger", version = "=1.14.21" } -solana-version = { path = "../version", version = "=1.14.21" } +solana-logger = { path = "../logger", version = "=1.14.22" } +solana-version = { path = "../version", version = "=1.14.22" } [target."cfg(unix)".dependencies] unix_socket2 = "0.5.4" diff --git a/test-validator/Cargo.toml b/test-validator/Cargo.toml index 51e682500d17a3..576a3dcec51794 100644 --- a/test-validator/Cargo.toml +++ b/test-validator/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "solana-test-validator" description = "Blockchain, Rebuilt for Scale" -version = "1.14.21" +version = "1.14.22" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-test-validator" readme = "../README.md" @@ -15,19 +15,19 @@ base64 = "0.13.0" log = "0.4.17" serde_derive = "1.0.103" serde_json = "1.0.81" -solana-cli-output = { path = "../cli-output", version = "=1.14.21" } -solana-client = { path = "../client", version = "=1.14.21" } -solana-core = { path = "../core", version = "=1.14.21" } -solana-gossip = { path = "../gossip", version = "=1.14.21" } -solana-ledger = { path = "../ledger", version = "=1.14.21" } -solana-logger = { path = "../logger", version = "=1.14.21" } -solana-net-utils = { path = "../net-utils", version = "=1.14.21" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.21" } -solana-program-test = { path = "../program-test", version = "=1.14.21" } -solana-rpc = { path = "../rpc", version = "=1.14.21" } -solana-runtime = { path = "../runtime", version = "=1.14.21" } -solana-sdk = { path = "../sdk", version = "=1.14.21" } -solana-streamer = { path = "../streamer", version = "=1.14.21" } +solana-cli-output = { path = "../cli-output", version = "=1.14.22" } +solana-client = { path = "../client", version = "=1.14.22" } +solana-core = { path = "../core", version = "=1.14.22" } +solana-gossip = { path = "../gossip", version = "=1.14.22" } +solana-ledger = { path = "../ledger", version = "=1.14.22" } +solana-logger = { path = "../logger", version = "=1.14.22" } +solana-net-utils = { path = "../net-utils", version = "=1.14.22" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.22" } +solana-program-test = { path = "../program-test", version = "=1.14.22" } +solana-rpc = { path = "../rpc", version = "=1.14.22" } +solana-runtime = { path = "../runtime", version = "=1.14.22" } +solana-sdk = { path = "../sdk", version = "=1.14.22" } +solana-streamer = { path = "../streamer", version = "=1.14.22" } tokio = { version = "1", features = ["full"] } [package.metadata.docs.rs] diff --git a/tokens/Cargo.toml b/tokens/Cargo.toml index ae46ac8080746d..a25a9f545de629 100644 --- a/tokens/Cargo.toml +++ b/tokens/Cargo.toml @@ -3,7 +3,7 @@ name = "solana-tokens" description = "Blockchain, Rebuilt for Scale" authors = ["Solana Maintainers "] edition = "2021" -version = "1.14.21" +version = "1.14.22" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -19,14 +19,14 @@ indexmap = "1.9.1" indicatif = "0.16.2" pickledb = { version = "0.5.1", default-features = false, features = ["yaml"] } serde = { version = "1.0", features = ["derive"] } -solana-account-decoder = { path = "../account-decoder", version = "=1.14.21" } -solana-clap-utils = { path = "../clap-utils", version = "=1.14.21" } -solana-cli-config = { path = "../cli-config", version = "=1.14.21" } -solana-client = { path = "../client", version = "=1.14.21" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.21" } -solana-sdk = { path = "../sdk", version = "=1.14.21" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.21" } -solana-version = { path = "../version", version = "=1.14.21" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.22" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.22" } +solana-cli-config = { path = "../cli-config", version = "=1.14.22" } +solana-client = { path = "../client", version = "=1.14.22" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.22" } +solana-sdk = { path = "../sdk", version = "=1.14.22" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.22" } +solana-version = { path = "../version", version = "=1.14.22" } spl-associated-token-account = { version = "=1.1.3" } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } tempfile = "3.4.0" @@ -34,6 +34,6 @@ thiserror = "1.0" [dev-dependencies] bincode = "1.3.3" -solana-logger = { path = "../logger", version = "=1.14.21" } -solana-streamer = { path = "../streamer", version = "=1.14.21" } -solana-test-validator = { path = "../test-validator", version = "=1.14.21" } +solana-logger = { path = "../logger", version = "=1.14.22" } +solana-streamer = { path = "../streamer", version = "=1.14.22" } +solana-test-validator = { path = "../test-validator", version = "=1.14.22" } diff --git a/transaction-dos/Cargo.toml b/transaction-dos/Cargo.toml index bb23bca6018b5d..0b0914fa104d52 100644 --- a/transaction-dos/Cargo.toml +++ b/transaction-dos/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-transaction-dos" -version = "1.14.21" +version = "1.14.22" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,23 +14,23 @@ clap = "2.33.1" log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.21" } -solana-cli = { path = "../cli", version = "=1.14.21" } -solana-client = { path = "../client", version = "=1.14.21" } -solana-core = { path = "../core", version = "=1.14.21" } -solana-faucet = { path = "../faucet", version = "=1.14.21" } -solana-gossip = { path = "../gossip", version = "=1.14.21" } -solana-logger = { path = "../logger", version = "=1.14.21" } -solana-measure = { path = "../measure", version = "=1.14.21" } -solana-net-utils = { path = "../net-utils", version = "=1.14.21" } -solana-runtime = { path = "../runtime", version = "=1.14.21" } -solana-sdk = { path = "../sdk", version = "=1.14.21" } -solana-streamer = { path = "../streamer", version = "=1.14.21" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.21" } -solana-version = { path = "../version", version = "=1.14.21" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.22" } +solana-cli = { path = "../cli", version = "=1.14.22" } +solana-client = { path = "../client", version = "=1.14.22" } +solana-core = { path = "../core", version = "=1.14.22" } +solana-faucet = { path = "../faucet", version = "=1.14.22" } +solana-gossip = { path = "../gossip", version = "=1.14.22" } +solana-logger = { path = "../logger", version = "=1.14.22" } +solana-measure = { path = "../measure", version = "=1.14.22" } +solana-net-utils = { path = "../net-utils", version = "=1.14.22" } +solana-runtime = { path = "../runtime", version = "=1.14.22" } +solana-sdk = { path = "../sdk", version = "=1.14.22" } +solana-streamer = { path = "../streamer", version = "=1.14.22" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.22" } +solana-version = { path = "../version", version = "=1.14.22" } [dev-dependencies] -solana-local-cluster = { path = "../local-cluster", version = "=1.14.21" } +solana-local-cluster = { path = "../local-cluster", version = "=1.14.22" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/transaction-status/Cargo.toml b/transaction-status/Cargo.toml index 061ee2ee99005f..454aadd0857127 100644 --- a/transaction-status/Cargo.toml +++ b/transaction-status/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-transaction-status" -version = "1.14.21" +version = "1.14.22" description = "Solana transaction status types" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -20,12 +20,12 @@ log = "0.4.17" serde = "1.0.138" serde_derive = "1.0.103" serde_json = "1.0.81" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.21" } -solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.21" } -solana-measure = { path = "../measure", version = "=1.14.21" } -solana-metrics = { path = "../metrics", version = "=1.14.21" } -solana-sdk = { path = "../sdk", version = "=1.14.21" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.21" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.22" } +solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.22" } +solana-measure = { path = "../measure", version = "=1.14.22" } +solana-metrics = { path = "../metrics", version = "=1.14.22" } +solana-sdk = { path = "../sdk", version = "=1.14.22" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.22" } spl-associated-token-account = { version = "=1.1.3", features = ["no-entrypoint"] } spl-memo = { version = "=3.0.1", features = ["no-entrypoint"] } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } diff --git a/upload-perf/Cargo.toml b/upload-perf/Cargo.toml index f284d9d58cbfc3..aba685203c6002 100644 --- a/upload-perf/Cargo.toml +++ b/upload-perf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-upload-perf" -version = "1.14.21" +version = "1.14.22" description = "Metrics Upload Utility" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -11,7 +11,7 @@ publish = false [dependencies] serde_json = "1.0.81" -solana-metrics = { path = "../metrics", version = "=1.14.21" } +solana-metrics = { path = "../metrics", version = "=1.14.22" } [[bin]] name = "solana-upload-perf" diff --git a/validator/Cargo.toml b/validator/Cargo.toml index 6991ed75fbc462..6e8b13fc53e77c 100644 --- a/validator/Cargo.toml +++ b/validator/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-validator" description = "Blockchain, Rebuilt for Scale" -version = "1.14.21" +version = "1.14.22" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -28,30 +28,30 @@ num_cpus = "1.13.1" rand = "0.7.0" serde = "1.0.138" serde_json = "1.0.81" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.21" } -solana-cli-config = { path = "../cli-config", version = "=1.14.21" } -solana-client = { path = "../client", version = "=1.14.21" } -solana-core = { path = "../core", version = "=1.14.21" } -solana-download-utils = { path = "../download-utils", version = "=1.14.21" } -solana-entry = { path = "../entry", version = "=1.14.21" } -solana-faucet = { path = "../faucet", version = "=1.14.21" } -solana-genesis-utils = { path = "../genesis-utils", version = "=1.14.21" } -solana-gossip = { path = "../gossip", version = "=1.14.21" } -solana-ledger = { path = "../ledger", version = "=1.14.21" } -solana-logger = { path = "../logger", version = "=1.14.21" } -solana-metrics = { path = "../metrics", version = "=1.14.21" } -solana-net-utils = { path = "../net-utils", version = "=1.14.21" } -solana-perf = { path = "../perf", version = "=1.14.21" } -solana-poh = { path = "../poh", version = "=1.14.21" } -solana-rpc = { path = "../rpc", version = "=1.14.21" } -solana-runtime = { path = "../runtime", version = "=1.14.21" } -solana-sdk = { path = "../sdk", version = "=1.14.21" } -solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.21" } -solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.21" } -solana-streamer = { path = "../streamer", version = "=1.14.21" } -solana-test-validator = { path = "../test-validator", version = "=1.14.21" } -solana-version = { path = "../version", version = "=1.14.21" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.21" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.22" } +solana-cli-config = { path = "../cli-config", version = "=1.14.22" } +solana-client = { path = "../client", version = "=1.14.22" } +solana-core = { path = "../core", version = "=1.14.22" } +solana-download-utils = { path = "../download-utils", version = "=1.14.22" } +solana-entry = { path = "../entry", version = "=1.14.22" } +solana-faucet = { path = "../faucet", version = "=1.14.22" } +solana-genesis-utils = { path = "../genesis-utils", version = "=1.14.22" } +solana-gossip = { path = "../gossip", version = "=1.14.22" } +solana-ledger = { path = "../ledger", version = "=1.14.22" } +solana-logger = { path = "../logger", version = "=1.14.22" } +solana-metrics = { path = "../metrics", version = "=1.14.22" } +solana-net-utils = { path = "../net-utils", version = "=1.14.22" } +solana-perf = { path = "../perf", version = "=1.14.22" } +solana-poh = { path = "../poh", version = "=1.14.22" } +solana-rpc = { path = "../rpc", version = "=1.14.22" } +solana-runtime = { path = "../runtime", version = "=1.14.22" } +solana-sdk = { path = "../sdk", version = "=1.14.22" } +solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.22" } +solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.22" } +solana-streamer = { path = "../streamer", version = "=1.14.22" } +solana-test-validator = { path = "../test-validator", version = "=1.14.22" } +solana-version = { path = "../version", version = "=1.14.22" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.22" } symlink = "0.1.0" [target.'cfg(not(target_env = "msvc"))'.dependencies] diff --git a/version/Cargo.toml b/version/Cargo.toml index 8103b694d6869a..ba6cd3033eb031 100644 --- a/version/Cargo.toml +++ b/version/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-version" -version = "1.14.21" +version = "1.14.22" description = "Solana Version" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,9 +14,9 @@ log = "0.4.17" semver = "1.0.10" serde = "1.0.138" serde_derive = "1.0.103" -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.21" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.21" } -solana-sdk = { path = "../sdk", version = "=1.14.21" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.22" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.22" } +solana-sdk = { path = "../sdk", version = "=1.14.22" } [lib] name = "solana_version" diff --git a/watchtower/Cargo.toml b/watchtower/Cargo.toml index bdaa1a3756f0eb..eafa3f8c2f8101 100644 --- a/watchtower/Cargo.toml +++ b/watchtower/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-watchtower" description = "Blockchain, Rebuilt for Scale" -version = "1.14.21" +version = "1.14.22" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -13,15 +13,15 @@ documentation = "https://docs.rs/solana-watchtower" clap = "2.33.1" humantime = "2.0.1" log = "0.4.17" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.21" } -solana-cli-config = { path = "../cli-config", version = "=1.14.21" } -solana-cli-output = { path = "../cli-output", version = "=1.14.21" } -solana-client = { path = "../client", version = "=1.14.21" } -solana-logger = { path = "../logger", version = "=1.14.21" } -solana-metrics = { path = "../metrics", version = "=1.14.21" } -solana-notifier = { path = "../notifier", version = "=1.14.21" } -solana-sdk = { path = "../sdk", version = "=1.14.21" } -solana-version = { path = "../version", version = "=1.14.21" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.22" } +solana-cli-config = { path = "../cli-config", version = "=1.14.22" } +solana-cli-output = { path = "../cli-output", version = "=1.14.22" } +solana-client = { path = "../client", version = "=1.14.22" } +solana-logger = { path = "../logger", version = "=1.14.22" } +solana-metrics = { path = "../metrics", version = "=1.14.22" } +solana-notifier = { path = "../notifier", version = "=1.14.22" } +solana-sdk = { path = "../sdk", version = "=1.14.22" } +solana-version = { path = "../version", version = "=1.14.22" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/zk-token-sdk/Cargo.toml b/zk-token-sdk/Cargo.toml index b7470833135f96..d361a3dc6340eb 100644 --- a/zk-token-sdk/Cargo.toml +++ b/zk-token-sdk/Cargo.toml @@ -3,7 +3,7 @@ name = "solana-zk-token-sdk" description = "Solana Zk Token SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" -version = "1.14.21" +version = "1.14.22" license = "Apache-2.0" edition = "2021" @@ -12,7 +12,7 @@ base64 = "0.13" bytemuck = { version = "1.11.0", features = ["derive"] } num-derive = "0.3" num-traits = "0.2" -solana-program = { path = "../sdk/program", version = "=1.14.21" } +solana-program = { path = "../sdk/program", version = "=1.14.22" } [target.'cfg(not(target_os = "solana"))'.dependencies] aes-gcm-siv = "0.10.3" @@ -29,7 +29,7 @@ rand = "0.7" serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" sha3 = "0.9" -solana-sdk = { path = "../sdk", version = "=1.14.21" } +solana-sdk = { path = "../sdk", version = "=1.14.22" } subtle = "2" thiserror = "1.0" zeroize = { version = "1.3", default-features = false, features = ["zeroize_derive"] } From d621b94895912a896fb893b58b77b71270103a47 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Fri, 28 Jul 2023 15:54:31 -0400 Subject: [PATCH 451/465] v1.14: Detect duplicates in the same insert batch (backport of #32528) (#32591) * Detect duplicates in the same insert batch (#32528) (cherry picked from commit b6927db6a87d1769858b0e506388b0b541a9874a) # Conflicts: # ledger/src/blockstore.rs * Resolve conflicts --------- Co-authored-by: carllin --- core/src/window_service.rs | 95 +++++++++++++++++++++++++---- ledger/src/blockstore.rs | 119 +++++++++++++++++++++++++------------ 2 files changed, 165 insertions(+), 49 deletions(-) diff --git a/core/src/window_service.rs b/core/src/window_service.rs index 9fccd86d6e8db6..a76fa88f30d30a 100644 --- a/core/src/window_service.rs +++ b/core/src/window_service.rs @@ -486,7 +486,7 @@ mod test { solana_gossip::legacy_contact_info::LegacyContactInfo as ContactInfo, solana_ledger::{ blockstore::{make_many_slot_entries, Blockstore}, - get_tmp_ledger_path, + get_tmp_ledger_path_auto_delete, shred::{ProcessShredsStats, Shredder}, }, solana_sdk::{ @@ -519,8 +519,8 @@ mod test { #[test] fn test_process_shred() { - let blockstore_path = get_tmp_ledger_path!(); - let blockstore = Arc::new(Blockstore::open(&blockstore_path).unwrap()); + let ledger_path = get_tmp_ledger_path_auto_delete!(); + let blockstore = Arc::new(Blockstore::open(ledger_path.path()).unwrap()); let num_entries = 10; let original_entries = create_ticks(num_entries, 0, Hash::default()); let mut shreds = local_entries_to_shred(&original_entries, 0, 0, &Keypair::new()); @@ -530,28 +530,27 @@ mod test { .expect("Expect successful processing of shred"); assert_eq!(blockstore.get_slot_entries(0, 0).unwrap(), original_entries); - - drop(blockstore); - Blockstore::destroy(&blockstore_path).expect("Expected successful database destruction"); } #[test] fn test_run_check_duplicate() { - let blockstore_path = get_tmp_ledger_path!(); - let blockstore = Arc::new(Blockstore::open(&blockstore_path).unwrap()); + let ledger_path = get_tmp_ledger_path_auto_delete!(); + let blockstore = Arc::new(Blockstore::open(ledger_path.path()).unwrap()); let (sender, receiver) = unbounded(); let (duplicate_slot_sender, duplicate_slot_receiver) = unbounded(); let (shreds, _) = make_many_slot_entries(5, 5, 10); blockstore .insert_shreds(shreds.clone(), None, false) .unwrap(); + let duplicate_index = 0; + let original_shred = shreds[duplicate_index].clone(); let duplicate_shred = { let (mut shreds, _) = make_many_slot_entries(5, 1, 10); - shreds.swap_remove(0) + shreds.swap_remove(duplicate_index) }; assert_eq!(duplicate_shred.slot(), shreds[0].slot()); let duplicate_shred_slot = duplicate_shred.slot(); - sender.send(duplicate_shred).unwrap(); + sender.send(duplicate_shred.clone()).unwrap(); assert!(!blockstore.has_duplicate_shreds_in_slot(duplicate_shred_slot)); let keypair = Keypair::new(); let contact_info = ContactInfo::new_localhost(&keypair.pubkey(), timestamp()); @@ -567,13 +566,87 @@ mod test { &duplicate_slot_sender, ) .unwrap(); - assert!(blockstore.has_duplicate_shreds_in_slot(duplicate_shred_slot)); + + // Make sure the correct duplicate proof was stored + let duplicate_proof = blockstore.get_duplicate_slot(duplicate_shred_slot).unwrap(); + assert_eq!(duplicate_proof.shred1, *original_shred.payload()); + assert_eq!(duplicate_proof.shred2, *duplicate_shred.payload()); + + // Make sure a duplicate signal was sent assert_eq!( duplicate_slot_receiver.try_recv().unwrap(), duplicate_shred_slot ); } + #[test] + fn test_store_duplicate_shreds_same_batch() { + let ledger_path = get_tmp_ledger_path_auto_delete!(); + let blockstore = Arc::new(Blockstore::open(ledger_path.path()).unwrap()); + let (duplicate_shred_sender, duplicate_shred_receiver) = unbounded(); + let (duplicate_slot_sender, duplicate_slot_receiver) = unbounded(); + let exit = Arc::new(AtomicBool::new(false)); + let keypair = Keypair::new(); + let contact_info = ContactInfo::new_localhost(&keypair.pubkey(), timestamp()); + let cluster_info = Arc::new(ClusterInfo::new( + contact_info, + Arc::new(keypair), + SocketAddrSpace::Unspecified, + )); + + // Start duplicate thread receiving and inserting duplicates + let t_check_duplicate = WindowService::start_check_duplicate_thread( + cluster_info, + exit.clone(), + blockstore.clone(), + duplicate_shred_receiver, + duplicate_slot_sender, + ); + + let handle_duplicate = |shred| { + let _ = duplicate_shred_sender.send(shred); + }; + let num_trials = 100; + for slot in 0..num_trials { + let (shreds, _) = make_many_slot_entries(slot, 1, 10); + let duplicate_index = 0; + let original_shred = shreds[duplicate_index].clone(); + let duplicate_shred = { + let (mut shreds, _) = make_many_slot_entries(slot, 1, 10); + shreds.swap_remove(duplicate_index) + }; + assert_eq!(duplicate_shred.slot(), slot); + // Simulate storing both duplicate shreds in the same batch + blockstore + .insert_shreds_handle_duplicate( + vec![original_shred.clone(), duplicate_shred.clone()], + vec![false, false], + None, + false, // is_trusted + None, + &handle_duplicate, + &ReedSolomonCache::default(), + &mut BlockstoreInsertionMetrics::default(), + ) + .unwrap(); + + // Make sure a duplicate signal was sent + assert_eq!( + duplicate_slot_receiver + .recv_timeout(Duration::from_millis(5_000)) + .unwrap(), + slot + ); + + // Make sure the correct duplicate proof was stored + let duplicate_proof = blockstore.get_duplicate_slot(slot).unwrap(); + assert_eq!(duplicate_proof.shred1, *original_shred.payload()); + assert_eq!(duplicate_proof.shred2, *duplicate_shred.payload()); + } + exit.store(true, Ordering::Relaxed); + t_check_duplicate.join().unwrap(); + } + #[test] fn test_prune_shreds() { use { diff --git a/ledger/src/blockstore.rs b/ledger/src/blockstore.rs index 444f546b076448..439685f163d114 100644 --- a/ledger/src/blockstore.rs +++ b/ledger/src/blockstore.rs @@ -134,6 +134,21 @@ impl std::fmt::Display for InsertDataShredError { } } +pub struct InsertResults { + completed_data_set_infos: Vec, + inserted_indices: Vec, + duplicate_shreds: Vec, +} + +/// A "complete data set" is a range of [`Shred`]s that combined in sequence carry a single +/// serialized [`Vec`]. +/// +/// Services such as the `WindowService` for a TVU, and `ReplayStage` for a TPU, piece together +/// these sets by inserting shreds via direct or indirect calls to +/// [`Blockstore::insert_shreds_handle_duplicate()`]. +/// +/// `solana_core::completed_data_sets_service::CompletedDataSetsService` is the main receiver of +/// `CompletedDataSetInfo`. #[derive(Clone, Copy, Debug, PartialEq, Eq)] pub struct CompletedDataSetInfo { pub slot: Slot, @@ -803,20 +818,16 @@ impl Blockstore { /// On success, the function returns an Ok result with a vector of /// `CompletedDataSetInfo` and a vector of its corresponding index in the /// input `shreds` vector. - pub fn insert_shreds_handle_duplicate( + fn do_insert_shreds( &self, shreds: Vec, is_repaired: Vec, leader_schedule: Option<&LeaderScheduleCache>, is_trusted: bool, retransmit_sender: Option<&Sender>>>, - handle_duplicate: &F, reed_solomon_cache: &ReedSolomonCache, metrics: &mut BlockstoreInsertionMetrics, - ) -> Result<(Vec, Vec)> - where - F: Fn(Shred), - { + ) -> Result { assert_eq!(shreds.len(), is_repaired.len()); let mut total_start = Measure::start("Total elapsed"); let mut start = Measure::start("Blockstore lock"); @@ -831,6 +842,7 @@ impl Blockstore { let mut erasure_metas = HashMap::new(); let mut slot_meta_working_set = HashMap::new(); let mut index_working_set = HashMap::new(); + let mut duplicate_shreds = vec![]; metrics.num_shreds += shreds.len(); let mut start = Measure::start("Shred insertion"); @@ -854,7 +866,7 @@ impl Blockstore { &mut just_inserted_shreds, &mut index_meta_time_us, is_trusted, - handle_duplicate, + &mut duplicate_shreds, leader_schedule, shred_source, ) { @@ -881,7 +893,7 @@ impl Blockstore { &mut write_batch, &mut just_inserted_shreds, &mut index_meta_time_us, - handle_duplicate, + &mut duplicate_shreds, is_trusted, shred_source, metrics, @@ -930,7 +942,7 @@ impl Blockstore { &mut just_inserted_shreds, &mut index_meta_time_us, is_trusted, - &handle_duplicate, + &mut duplicate_shreds, leader_schedule, ShredSource::Recovered, ) { @@ -1014,7 +1026,46 @@ impl Blockstore { metrics.total_elapsed_us += total_start.as_us(); metrics.index_meta_time_us += index_meta_time_us; - Ok((newly_completed_data_sets, inserted_indices)) + Ok(InsertResults { + completed_data_set_infos: newly_completed_data_sets, + inserted_indices, + duplicate_shreds, + }) + } + + pub fn insert_shreds_handle_duplicate( + &self, + shreds: Vec, + is_repaired: Vec, + leader_schedule: Option<&LeaderScheduleCache>, + is_trusted: bool, + retransmit_sender: Option<&Sender>>>, + handle_duplicate: &F, + reed_solomon_cache: &ReedSolomonCache, + metrics: &mut BlockstoreInsertionMetrics, + ) -> Result<(Vec, Vec)> + where + F: Fn(Shred), + { + let InsertResults { + completed_data_set_infos, + inserted_indices, + duplicate_shreds, + } = self.do_insert_shreds( + shreds, + is_repaired, + leader_schedule, + is_trusted, + retransmit_sender, + reed_solomon_cache, + metrics, + )?; + + for shred in duplicate_shreds { + handle_duplicate(shred); + } + + Ok((completed_data_set_infos, inserted_indices)) } pub fn add_new_shred_signal(&self, s: Sender) { @@ -1092,20 +1143,23 @@ impl Blockstore { is_trusted: bool, ) -> Result<(Vec, Vec)> { let shreds_len = shreds.len(); - self.insert_shreds_handle_duplicate( + let insert_results = self.do_insert_shreds( shreds, vec![false; shreds_len], leader_schedule, is_trusted, - None, // retransmit-sender - &|_| {}, // handle-duplicates + None, // retransmit-sender &ReedSolomonCache::default(), &mut BlockstoreInsertionMetrics::default(), - ) + )?; + Ok(( + insert_results.completed_data_set_infos, + insert_results.inserted_indices, + )) } #[allow(clippy::too_many_arguments)] - fn check_insert_coding_shred( + fn check_insert_coding_shred( &self, shred: Shred, erasure_metas: &mut HashMap, @@ -1113,14 +1167,11 @@ impl Blockstore { write_batch: &mut WriteBatch, just_received_shreds: &mut HashMap, index_meta_time_us: &mut u64, - handle_duplicate: &F, + duplicate_shreds: &mut Vec, is_trusted: bool, shred_source: ShredSource, metrics: &mut BlockstoreInsertionMetrics, - ) -> bool - where - F: Fn(Shred), - { + ) -> bool { let slot = shred.slot(); let shred_index = u64::from(shred.index()); @@ -1135,7 +1186,7 @@ impl Blockstore { if !is_trusted { if index_meta.coding().contains(shred_index) { metrics.num_coding_shreds_exists += 1; - handle_duplicate(shred); + duplicate_shreds.push(shred); return false; } @@ -1279,7 +1330,7 @@ impl Blockstore { /// whether it is okay to insert the input shred. /// - `shred_source`: the source of the shred. #[allow(clippy::too_many_arguments)] - fn check_insert_data_shred( + fn check_insert_data_shred( &self, shred: Shred, erasure_metas: &mut HashMap, @@ -1289,13 +1340,10 @@ impl Blockstore { just_inserted_shreds: &mut HashMap, index_meta_time_us: &mut u64, is_trusted: bool, - handle_duplicate: &F, + duplicate_shreds: &mut Vec, leader_schedule: Option<&LeaderScheduleCache>, shred_source: ShredSource, - ) -> std::result::Result, InsertDataShredError> - where - F: Fn(Shred), - { + ) -> std::result::Result, InsertDataShredError> { let slot = shred.slot(); let shred_index = u64::from(shred.index()); @@ -1316,7 +1364,7 @@ impl Blockstore { if !is_trusted { if Self::is_data_shred_present(&shred, slot_meta, index_meta.data()) { - handle_duplicate(shred); + duplicate_shreds.push(shred); return Err(InsertDataShredError::Exists); } @@ -6211,32 +6259,27 @@ pub mod tests { &mut write_batch, &mut just_received_shreds, &mut index_meta_time_us, - &|_shred| { - panic!("no dupes"); - }, + &mut vec![], false, ShredSource::Turbine, &mut BlockstoreInsertionMetrics::default(), )); // insert again fails on dupe - use std::sync::atomic::{AtomicUsize, Ordering}; - let counter = AtomicUsize::new(0); + let mut duplicate_shreds = vec![]; assert!(!blockstore.check_insert_coding_shred( - coding_shred, + coding_shred.clone(), &mut erasure_metas, &mut index_working_set, &mut write_batch, &mut just_received_shreds, &mut index_meta_time_us, - &|_shred| { - counter.fetch_add(1, Ordering::Relaxed); - }, + &mut duplicate_shreds, false, ShredSource::Turbine, &mut BlockstoreInsertionMetrics::default(), )); - assert_eq!(counter.load(Ordering::Relaxed), 1); + assert_eq!(duplicate_shreds, vec![coding_shred]); } #[test] From 72b53b171760d73f01c7c2e7631fa6ea8e89815e Mon Sep 17 00:00:00 2001 From: Will Hickey Date: Fri, 4 Aug 2023 15:13:25 -0500 Subject: [PATCH 452/465] Bump version to v1.14.23 (#32660) --- Cargo.lock | 492 +++++++++--------- account-decoder/Cargo.toml | 10 +- accounts-bench/Cargo.toml | 12 +- accounts-cluster-bench/Cargo.toml | 34 +- banking-bench/Cargo.toml | 26 +- banks-client/Cargo.toml | 12 +- banks-interface/Cargo.toml | 4 +- banks-server/Cargo.toml | 12 +- bench-streamer/Cargo.toml | 8 +- bench-tps/Cargo.toml | 38 +- bloom/Cargo.toml | 8 +- bucket_map/Cargo.toml | 8 +- clap-utils/Cargo.toml | 8 +- clap-v3-utils/Cargo.toml | 8 +- cli-config/Cargo.toml | 6 +- cli-output/Cargo.toml | 16 +- cli/Cargo.toml | 38 +- client-test/Cargo.toml | 32 +- client/Cargo.toml | 28 +- core/Cargo.toml | 56 +- dos/Cargo.toml | 30 +- download-utils/Cargo.toml | 6 +- entry/Cargo.toml | 16 +- faucet/Cargo.toml | 14 +- frozen-abi/Cargo.toml | 6 +- frozen-abi/macro/Cargo.toml | 2 +- genesis-utils/Cargo.toml | 8 +- genesis/Cargo.toml | 22 +- geyser-plugin-interface/Cargo.toml | 6 +- geyser-plugin-manager/Cargo.toml | 16 +- gossip/Cargo.toml | 38 +- install/Cargo.toml | 14 +- keygen/Cargo.toml | 12 +- ledger-tool/Cargo.toml | 30 +- ledger/Cargo.toml | 40 +- local-cluster/Cargo.toml | 28 +- log-analyzer/Cargo.toml | 6 +- logger/Cargo.toml | 2 +- measure/Cargo.toml | 4 +- merkle-root-bench/Cargo.toml | 12 +- merkle-tree/Cargo.toml | 4 +- metrics/Cargo.toml | 4 +- net-shaper/Cargo.toml | 4 +- net-utils/Cargo.toml | 8 +- notifier/Cargo.toml | 2 +- perf/Cargo.toml | 12 +- poh-bench/Cargo.toml | 14 +- poh/Cargo.toml | 20 +- program-runtime/Cargo.toml | 14 +- program-test/Cargo.toml | 20 +- .../address-lookup-table-tests/Cargo.toml | 8 +- programs/address-lookup-table/Cargo.toml | 12 +- programs/bpf-loader-tests/Cargo.toml | 8 +- programs/bpf/Cargo.lock | 490 ++++++++--------- programs/bpf/Cargo.toml | 28 +- programs/bpf/rust/128bit/Cargo.toml | 6 +- programs/bpf/rust/128bit_dep/Cargo.toml | 4 +- programs/bpf/rust/alloc/Cargo.toml | 4 +- programs/bpf/rust/call_depth/Cargo.toml | 4 +- programs/bpf/rust/caller_access/Cargo.toml | 4 +- programs/bpf/rust/curve25519/Cargo.toml | 6 +- programs/bpf/rust/custom_heap/Cargo.toml | 4 +- programs/bpf/rust/dep_crate/Cargo.toml | 6 +- .../bpf/rust/deprecated_loader/Cargo.toml | 4 +- programs/bpf/rust/dup_accounts/Cargo.toml | 4 +- programs/bpf/rust/error_handling/Cargo.toml | 4 +- programs/bpf/rust/external_spend/Cargo.toml | 4 +- programs/bpf/rust/finalize/Cargo.toml | 4 +- .../rust/get_minimum_delegation/Cargo.toml | 4 +- .../Cargo.toml | 4 +- .../rust/instruction_introspection/Cargo.toml | 4 +- programs/bpf/rust/invoke/Cargo.toml | 4 +- programs/bpf/rust/invoke_and_error/Cargo.toml | 4 +- programs/bpf/rust/invoke_and_ok/Cargo.toml | 4 +- .../bpf/rust/invoke_and_return/Cargo.toml | 4 +- programs/bpf/rust/invoked/Cargo.toml | 4 +- programs/bpf/rust/iter/Cargo.toml | 4 +- programs/bpf/rust/log_data/Cargo.toml | 4 +- programs/bpf/rust/many_args/Cargo.toml | 6 +- programs/bpf/rust/many_args_dep/Cargo.toml | 4 +- programs/bpf/rust/mem/Cargo.toml | 10 +- programs/bpf/rust/membuiltins/Cargo.toml | 6 +- programs/bpf/rust/noop/Cargo.toml | 4 +- programs/bpf/rust/panic/Cargo.toml | 4 +- programs/bpf/rust/param_passing/Cargo.toml | 6 +- .../bpf/rust/param_passing_dep/Cargo.toml | 4 +- programs/bpf/rust/rand/Cargo.toml | 4 +- programs/bpf/rust/realloc/Cargo.toml | 4 +- programs/bpf/rust/realloc_invoke/Cargo.toml | 6 +- .../bpf/rust/ro_account_modify/Cargo.toml | 4 +- programs/bpf/rust/ro_modify/Cargo.toml | 4 +- programs/bpf/rust/sanity/Cargo.toml | 10 +- .../bpf/rust/secp256k1_recover/Cargo.toml | 4 +- programs/bpf/rust/sha/Cargo.toml | 4 +- .../rust/sibling_inner_instruction/Cargo.toml | 4 +- .../bpf/rust/sibling_instruction/Cargo.toml | 4 +- programs/bpf/rust/simulation/Cargo.toml | 12 +- programs/bpf/rust/spoof1/Cargo.toml | 4 +- programs/bpf/rust/spoof1_system/Cargo.toml | 4 +- programs/bpf/rust/sysvar/Cargo.toml | 10 +- programs/bpf/rust/upgradeable/Cargo.toml | 4 +- programs/bpf/rust/upgraded/Cargo.toml | 4 +- programs/bpf_loader/Cargo.toml | 14 +- .../bpf_loader/gen-syscall-list/Cargo.toml | 2 +- programs/compute-budget/Cargo.toml | 6 +- programs/config/Cargo.toml | 8 +- programs/ed25519-tests/Cargo.toml | 6 +- programs/stake/Cargo.toml | 18 +- programs/vote/Cargo.toml | 14 +- programs/zk-token-proof-tests/Cargo.toml | 10 +- programs/zk-token-proof/Cargo.toml | 8 +- rayon-threadlimit/Cargo.toml | 2 +- rbpf-cli/Cargo.toml | 10 +- remote-wallet/Cargo.toml | 4 +- rpc-test/Cargo.toml | 18 +- rpc/Cargo.toml | 48 +- runtime/Cargo.toml | 34 +- runtime/store-tool/Cargo.toml | 8 +- sdk/Cargo.toml | 12 +- sdk/cargo-build-bpf/Cargo.toml | 4 +- sdk/cargo-build-sbf/Cargo.toml | 8 +- .../tests/crates/fail/Cargo.toml | 4 +- .../tests/crates/noop/Cargo.toml | 4 +- sdk/cargo-test-bpf/Cargo.toml | 2 +- sdk/cargo-test-sbf/Cargo.toml | 2 +- sdk/gen-headers/Cargo.toml | 2 +- sdk/macro/Cargo.toml | 2 +- sdk/program/Cargo.toml | 10 +- send-transaction-service/Cargo.toml | 14 +- stake-accounts/Cargo.toml | 16 +- storage-bigtable/Cargo.toml | 10 +- storage-bigtable/build-proto/Cargo.toml | 2 +- storage-proto/Cargo.toml | 8 +- streamer/Cargo.toml | 10 +- sys-tuner/Cargo.toml | 6 +- test-validator/Cargo.toml | 28 +- tokens/Cargo.toml | 24 +- transaction-dos/Cargo.toml | 32 +- transaction-status/Cargo.toml | 14 +- upload-perf/Cargo.toml | 4 +- validator/Cargo.toml | 50 +- version/Cargo.toml | 8 +- watchtower/Cargo.toml | 20 +- zk-token-sdk/Cargo.toml | 6 +- 144 files changed, 1278 insertions(+), 1278 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 28cdb17e9efb1e..f0e68cfac39157 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1708,7 +1708,7 @@ dependencies = [ [[package]] name = "gen-headers" -version = "1.14.22" +version = "1.14.23" dependencies = [ "log", "regex", @@ -1716,7 +1716,7 @@ dependencies = [ [[package]] name = "gen-syscall-list" -version = "1.14.22" +version = "1.14.23" dependencies = [ "regex", ] @@ -3528,7 +3528,7 @@ dependencies = [ [[package]] name = "proto" -version = "1.14.22" +version = "1.14.23" dependencies = [ "protobuf-src", "tonic-build 0.8.0", @@ -3785,15 +3785,15 @@ dependencies = [ [[package]] name = "rbpf-cli" -version = "1.14.22" +version = "1.14.23" dependencies = [ "clap 3.2.23", "serde", "serde_json", "solana-bpf-loader-program", - "solana-logger 1.14.22", + "solana-logger 1.14.23", "solana-program-runtime", - "solana-sdk 1.14.22", + "solana-sdk 1.14.23", "solana_rbpf", ] @@ -4509,7 +4509,7 @@ dependencies = [ [[package]] name = "solana-account-decoder" -version = "1.14.22" +version = "1.14.23" dependencies = [ "Inflector", "base64 0.13.0", @@ -4522,7 +4522,7 @@ dependencies = [ "serde_json", "solana-address-lookup-table-program", "solana-config-program", - "solana-sdk 1.14.22", + "solana-sdk 1.14.23", "solana-vote-program", "spl-token", "spl-token-2022", @@ -4532,21 +4532,21 @@ dependencies = [ [[package]] name = "solana-accounts-bench" -version = "1.14.22" +version = "1.14.23" dependencies = [ "clap 2.33.3", "log", "rayon", - "solana-logger 1.14.22", + "solana-logger 1.14.23", "solana-measure", "solana-runtime", - "solana-sdk 1.14.22", + "solana-sdk 1.14.23", "solana-version", ] [[package]] name = "solana-accounts-cluster-bench" -version = "1.14.22" +version = "1.14.23" dependencies = [ "clap 2.33.3", "log", @@ -4559,11 +4559,11 @@ dependencies = [ "solana-faucet", "solana-gossip", "solana-local-cluster", - "solana-logger 1.14.22", + "solana-logger 1.14.23", "solana-measure", "solana-net-utils", "solana-runtime", - "solana-sdk 1.14.22", + "solana-sdk 1.14.23", "solana-streamer", "solana-test-validator", "solana-transaction-status", @@ -4573,7 +4573,7 @@ dependencies = [ [[package]] name = "solana-address-lookup-table-program" -version = "1.14.22" +version = "1.14.23" dependencies = [ "bincode", "bytemuck", @@ -4582,28 +4582,28 @@ dependencies = [ "num-traits", "rustc_version 0.4.0", "serde", - "solana-frozen-abi 1.14.22", - "solana-frozen-abi-macro 1.14.22", - "solana-program 1.14.22", + "solana-frozen-abi 1.14.23", + "solana-frozen-abi-macro 1.14.23", + "solana-program 1.14.23", "solana-program-runtime", - "solana-sdk 1.14.22", + "solana-sdk 1.14.23", "thiserror", ] [[package]] name = "solana-address-lookup-table-program-tests" -version = "1.14.22" +version = "1.14.23" dependencies = [ "assert_matches", "bincode", "solana-address-lookup-table-program", "solana-program-test", - "solana-sdk 1.14.22", + "solana-sdk 1.14.23", ] [[package]] name = "solana-banking-bench" -version = "1.14.22" +version = "1.14.23" dependencies = [ "clap 3.2.23", "crossbeam-channel", @@ -4614,27 +4614,27 @@ dependencies = [ "solana-core", "solana-gossip", "solana-ledger", - "solana-logger 1.14.22", + "solana-logger 1.14.23", "solana-measure", "solana-perf", "solana-poh", "solana-runtime", - "solana-sdk 1.14.22", + "solana-sdk 1.14.23", "solana-streamer", "solana-version", ] [[package]] name = "solana-banks-client" -version = "1.14.22" +version = "1.14.23" dependencies = [ "borsh", "futures 0.3.21", "solana-banks-interface", "solana-banks-server", - "solana-program 1.14.22", + "solana-program 1.14.23", "solana-runtime", - "solana-sdk 1.14.22", + "solana-sdk 1.14.23", "tarpc", "thiserror", "tokio", @@ -4643,16 +4643,16 @@ dependencies = [ [[package]] name = "solana-banks-interface" -version = "1.14.22" +version = "1.14.23" dependencies = [ "serde", - "solana-sdk 1.14.22", + "solana-sdk 1.14.23", "tarpc", ] [[package]] name = "solana-banks-server" -version = "1.14.22" +version = "1.14.23" dependencies = [ "bincode", "crossbeam-channel", @@ -4660,7 +4660,7 @@ dependencies = [ "solana-banks-interface", "solana-client", "solana-runtime", - "solana-sdk 1.14.22", + "solana-sdk 1.14.23", "solana-send-transaction-service", "tarpc", "tokio", @@ -4670,7 +4670,7 @@ dependencies = [ [[package]] name = "solana-bench-streamer" -version = "1.14.22" +version = "1.14.23" dependencies = [ "clap 3.2.23", "crossbeam-channel", @@ -4681,7 +4681,7 @@ dependencies = [ [[package]] name = "solana-bench-tps" -version = "1.14.22" +version = "1.14.23" dependencies = [ "clap 2.33.3", "crossbeam-channel", @@ -4698,13 +4698,13 @@ dependencies = [ "solana-genesis", "solana-gossip", "solana-local-cluster", - "solana-logger 1.14.22", + "solana-logger 1.14.23", "solana-measure", "solana-metrics", "solana-net-utils", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.22", + "solana-sdk 1.14.23", "solana-streamer", "solana-test-validator", "solana-version", @@ -4713,7 +4713,7 @@ dependencies = [ [[package]] name = "solana-bloom" -version = "1.14.22" +version = "1.14.23" dependencies = [ "bv", "fnv", @@ -4723,14 +4723,14 @@ dependencies = [ "rustc_version 0.4.0", "serde", "serde_derive", - "solana-frozen-abi 1.14.22", - "solana-frozen-abi-macro 1.14.22", - "solana-sdk 1.14.22", + "solana-frozen-abi 1.14.23", + "solana-frozen-abi-macro 1.14.23", + "solana-sdk 1.14.23", ] [[package]] name = "solana-bpf-loader-program" -version = "1.14.22" +version = "1.14.23" dependencies = [ "bincode", "byteorder", @@ -4741,26 +4741,26 @@ dependencies = [ "solana-metrics", "solana-program-runtime", "solana-runtime", - "solana-sdk 1.14.22", - "solana-zk-token-sdk 1.14.22", + "solana-sdk 1.14.23", + "solana-zk-token-sdk 1.14.23", "solana_rbpf", "thiserror", ] [[package]] name = "solana-bpf-loader-program-tests" -version = "1.14.22" +version = "1.14.23" dependencies = [ "assert_matches", "bincode", "solana-bpf-loader-program", "solana-program-test", - "solana-sdk 1.14.22", + "solana-sdk 1.14.23", ] [[package]] name = "solana-bucket-map" -version = "1.14.22" +version = "1.14.23" dependencies = [ "fs_extra", "log", @@ -4768,24 +4768,24 @@ dependencies = [ "modular-bitfield", "rand 0.7.3", "rayon", - "solana-logger 1.14.22", + "solana-logger 1.14.23", "solana-measure", - "solana-sdk 1.14.22", + "solana-sdk 1.14.23", "tempfile", ] [[package]] name = "solana-cargo-build-bpf" -version = "1.14.22" +version = "1.14.23" dependencies = [ "cargo_metadata", "clap 3.2.23", - "solana-sdk 1.14.22", + "solana-sdk 1.14.23", ] [[package]] name = "solana-cargo-build-sbf" -version = "1.14.22" +version = "1.14.23" dependencies = [ "bzip2", "cargo_metadata", @@ -4794,14 +4794,14 @@ dependencies = [ "regex", "serial_test", "solana-download-utils", - "solana-logger 1.14.22", - "solana-sdk 1.14.22", + "solana-logger 1.14.23", + "solana-sdk 1.14.23", "tar", ] [[package]] name = "solana-cargo-test-bpf" -version = "1.14.22" +version = "1.14.23" dependencies = [ "cargo_metadata", "clap 3.2.23", @@ -4809,7 +4809,7 @@ dependencies = [ [[package]] name = "solana-cargo-test-sbf" -version = "1.14.22" +version = "1.14.23" dependencies = [ "cargo_metadata", "clap 3.2.23", @@ -4817,14 +4817,14 @@ dependencies = [ [[package]] name = "solana-clap-utils" -version = "1.14.22" +version = "1.14.23" dependencies = [ "chrono", "clap 2.33.3", "rpassword", "solana-perf", "solana-remote-wallet", - "solana-sdk 1.14.22", + "solana-sdk 1.14.23", "tempfile", "thiserror", "tiny-bip39", @@ -4834,14 +4834,14 @@ dependencies = [ [[package]] name = "solana-clap-v3-utils" -version = "1.14.22" +version = "1.14.23" dependencies = [ "chrono", "clap 3.2.23", "rpassword", "solana-perf", "solana-remote-wallet", - "solana-sdk 1.14.22", + "solana-sdk 1.14.23", "tempfile", "thiserror", "tiny-bip39", @@ -4851,7 +4851,7 @@ dependencies = [ [[package]] name = "solana-cli" -version = "1.14.22" +version = "1.14.23" dependencies = [ "bincode", "bs58", @@ -4879,10 +4879,10 @@ dependencies = [ "solana-client", "solana-config-program", "solana-faucet", - "solana-logger 1.14.22", + "solana-logger 1.14.23", "solana-program-runtime", "solana-remote-wallet", - "solana-sdk 1.14.22", + "solana-sdk 1.14.23", "solana-streamer", "solana-test-validator", "solana-transaction-status", @@ -4897,7 +4897,7 @@ dependencies = [ [[package]] name = "solana-cli-config" -version = "1.14.22" +version = "1.14.23" dependencies = [ "anyhow", "dirs-next", @@ -4906,13 +4906,13 @@ dependencies = [ "serde_derive", "serde_yaml", "solana-clap-utils", - "solana-sdk 1.14.22", + "solana-sdk 1.14.23", "url 2.2.2", ] [[package]] name = "solana-cli-output" -version = "1.14.22" +version = "1.14.23" dependencies = [ "Inflector", "base64 0.13.0", @@ -4930,7 +4930,7 @@ dependencies = [ "solana-clap-utils", "solana-cli-config", "solana-client", - "solana-sdk 1.14.22", + "solana-sdk 1.14.23", "solana-transaction-status", "solana-vote-program", "spl-memo", @@ -4938,7 +4938,7 @@ dependencies = [ [[package]] name = "solana-client" -version = "1.14.22" +version = "1.14.23" dependencies = [ "anyhow", "assert_matches", @@ -4974,12 +4974,12 @@ dependencies = [ "solana-account-decoder", "solana-clap-utils", "solana-faucet", - "solana-logger 1.14.22", + "solana-logger 1.14.23", "solana-measure", "solana-metrics", "solana-net-utils", "solana-perf", - "solana-sdk 1.14.22", + "solana-sdk 1.14.23", "solana-streamer", "solana-transaction-status", "solana-version", @@ -4995,14 +4995,14 @@ dependencies = [ [[package]] name = "solana-client-test" -version = "1.14.22" +version = "1.14.23" dependencies = [ "futures-util", "serde_json", "serial_test", "solana-client", "solana-ledger", - "solana-logger 1.14.22", + "solana-logger 1.14.23", "solana-measure", "solana-merkle-tree", "solana-metrics", @@ -5010,7 +5010,7 @@ dependencies = [ "solana-rayon-threadlimit", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.22", + "solana-sdk 1.14.23", "solana-streamer", "solana-test-validator", "solana-transaction-status", @@ -5021,28 +5021,28 @@ dependencies = [ [[package]] name = "solana-compute-budget-program" -version = "1.14.22" +version = "1.14.23" dependencies = [ "solana-program-runtime", - "solana-sdk 1.14.22", + "solana-sdk 1.14.23", ] [[package]] name = "solana-config-program" -version = "1.14.22" +version = "1.14.23" dependencies = [ "bincode", "chrono", "serde", "serde_derive", - "solana-logger 1.14.22", + "solana-logger 1.14.23", "solana-program-runtime", - "solana-sdk 1.14.22", + "solana-sdk 1.14.23", ] [[package]] name = "solana-core" -version = "1.14.22" +version = "1.14.23" dependencies = [ "ahash", "base64 0.13.0", @@ -5075,12 +5075,12 @@ dependencies = [ "solana-bloom", "solana-client", "solana-entry", - "solana-frozen-abi 1.14.22", - "solana-frozen-abi-macro 1.14.22", + "solana-frozen-abi 1.14.23", + "solana-frozen-abi-macro 1.14.23", "solana-geyser-plugin-manager", "solana-gossip", "solana-ledger", - "solana-logger 1.14.22", + "solana-logger 1.14.23", "solana-measure", "solana-metrics", "solana-net-utils", @@ -5090,7 +5090,7 @@ dependencies = [ "solana-rayon-threadlimit", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.22", + "solana-sdk 1.14.23", "solana-send-transaction-service", "solana-stake-program", "solana-streamer", @@ -5110,7 +5110,7 @@ dependencies = [ [[package]] name = "solana-dos" -version = "1.14.22" +version = "1.14.23" dependencies = [ "bincode", "clap 3.2.23", @@ -5126,42 +5126,42 @@ dependencies = [ "solana-faucet", "solana-gossip", "solana-local-cluster", - "solana-logger 1.14.22", + "solana-logger 1.14.23", "solana-measure", "solana-net-utils", "solana-perf", "solana-rpc", - "solana-sdk 1.14.22", + "solana-sdk 1.14.23", "solana-streamer", "solana-version", ] [[package]] name = "solana-download-utils" -version = "1.14.22" +version = "1.14.23" dependencies = [ "console", "indicatif", "log", "reqwest", "solana-runtime", - "solana-sdk 1.14.22", + "solana-sdk 1.14.23", ] [[package]] name = "solana-ed25519-program-tests" -version = "1.14.22" +version = "1.14.23" dependencies = [ "assert_matches", "ed25519-dalek", "rand 0.7.3", "solana-program-test", - "solana-sdk 1.14.22", + "solana-sdk 1.14.23", ] [[package]] name = "solana-entry" -version = "1.14.22" +version = "1.14.23" dependencies = [ "bincode", "crossbeam-channel", @@ -5173,18 +5173,18 @@ dependencies = [ "rand 0.7.3", "rayon", "serde", - "solana-logger 1.14.22", + "solana-logger 1.14.23", "solana-measure", "solana-merkle-tree", "solana-metrics", "solana-perf", "solana-rayon-threadlimit", - "solana-sdk 1.14.22", + "solana-sdk 1.14.23", ] [[package]] name = "solana-faucet" -version = "1.14.22" +version = "1.14.23" dependencies = [ "bincode", "byteorder", @@ -5195,9 +5195,9 @@ dependencies = [ "serde_derive", "solana-clap-utils", "solana-cli-config", - "solana-logger 1.14.22", + "solana-logger 1.14.23", "solana-metrics", - "solana-sdk 1.14.22", + "solana-sdk 1.14.23", "solana-version", "spl-memo", "thiserror", @@ -5240,7 +5240,7 @@ dependencies = [ [[package]] name = "solana-frozen-abi" -version = "1.14.22" +version = "1.14.23" dependencies = [ "ahash", "blake3", @@ -5265,8 +5265,8 @@ dependencies = [ "serde_derive", "serde_json", "sha2 0.10.2", - "solana-frozen-abi-macro 1.14.22", - "solana-logger 1.14.22", + "solana-frozen-abi-macro 1.14.23", + "solana-logger 1.14.23", "subtle", "thiserror", ] @@ -5285,7 +5285,7 @@ dependencies = [ [[package]] name = "solana-frozen-abi-macro" -version = "1.14.22" +version = "1.14.23" dependencies = [ "proc-macro2 1.0.52", "quote 1.0.18", @@ -5295,7 +5295,7 @@ dependencies = [ [[package]] name = "solana-genesis" -version = "1.14.22" +version = "1.14.23" dependencies = [ "base64 0.13.0", "clap 2.33.3", @@ -5306,9 +5306,9 @@ dependencies = [ "solana-cli-config", "solana-entry", "solana-ledger", - "solana-logger 1.14.22", + "solana-logger 1.14.23", "solana-runtime", - "solana-sdk 1.14.22", + "solana-sdk 1.14.23", "solana-stake-program", "solana-version", "solana-vote-program", @@ -5317,26 +5317,26 @@ dependencies = [ [[package]] name = "solana-genesis-utils" -version = "1.14.22" +version = "1.14.23" dependencies = [ "solana-download-utils", "solana-runtime", - "solana-sdk 1.14.22", + "solana-sdk 1.14.23", ] [[package]] name = "solana-geyser-plugin-interface" -version = "1.14.22" +version = "1.14.23" dependencies = [ "log", - "solana-sdk 1.14.22", + "solana-sdk 1.14.23", "solana-transaction-status", "thiserror", ] [[package]] name = "solana-geyser-plugin-manager" -version = "1.14.22" +version = "1.14.23" dependencies = [ "bs58", "crossbeam-channel", @@ -5349,14 +5349,14 @@ dependencies = [ "solana-metrics", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.22", + "solana-sdk 1.14.23", "solana-transaction-status", "thiserror", ] [[package]] name = "solana-gossip" -version = "1.14.22" +version = "1.14.23" dependencies = [ "bincode", "bv", @@ -5383,17 +5383,17 @@ dependencies = [ "solana-clap-utils", "solana-client", "solana-entry", - "solana-frozen-abi 1.14.22", - "solana-frozen-abi-macro 1.14.22", + "solana-frozen-abi 1.14.23", + "solana-frozen-abi-macro 1.14.23", "solana-ledger", - "solana-logger 1.14.22", + "solana-logger 1.14.23", "solana-measure", "solana-metrics", "solana-net-utils", "solana-perf", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.14.22", + "solana-sdk 1.14.23", "solana-streamer", "solana-version", "solana-vote-program", @@ -5402,7 +5402,7 @@ dependencies = [ [[package]] name = "solana-install" -version = "1.14.22" +version = "1.14.23" dependencies = [ "atty", "bincode", @@ -5423,8 +5423,8 @@ dependencies = [ "solana-clap-utils", "solana-client", "solana-config-program", - "solana-logger 1.14.22", - "solana-sdk 1.14.22", + "solana-logger 1.14.23", + "solana-sdk 1.14.23", "solana-version", "tar", "tempfile", @@ -5435,7 +5435,7 @@ dependencies = [ [[package]] name = "solana-keygen" -version = "1.14.22" +version = "1.14.23" dependencies = [ "bs58", "clap 3.2.23", @@ -5444,14 +5444,14 @@ dependencies = [ "solana-clap-v3-utils", "solana-cli-config", "solana-remote-wallet", - "solana-sdk 1.14.22", + "solana-sdk 1.14.23", "solana-version", "tiny-bip39", ] [[package]] name = "solana-ledger" -version = "1.14.22" +version = "1.14.23" dependencies = [ "assert_matches", "bincode", @@ -5485,16 +5485,16 @@ dependencies = [ "solana-account-decoder", "solana-bpf-loader-program", "solana-entry", - "solana-frozen-abi 1.14.22", - "solana-frozen-abi-macro 1.14.22", - "solana-logger 1.14.22", + "solana-frozen-abi 1.14.23", + "solana-frozen-abi-macro 1.14.23", + "solana-logger 1.14.23", "solana-measure", "solana-metrics", "solana-perf", "solana-program-runtime", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.14.22", + "solana-sdk 1.14.23", "solana-stake-program", "solana-storage-bigtable", "solana-storage-proto", @@ -5513,7 +5513,7 @@ dependencies = [ [[package]] name = "solana-ledger-tool" -version = "1.14.22" +version = "1.14.23" dependencies = [ "assert_cmd", "base64 0.13.0", @@ -5535,10 +5535,10 @@ dependencies = [ "solana-core", "solana-entry", "solana-ledger", - "solana-logger 1.14.22", + "solana-logger 1.14.23", "solana-measure", "solana-runtime", - "solana-sdk 1.14.22", + "solana-sdk 1.14.23", "solana-stake-program", "solana-storage-bigtable", "solana-transaction-status", @@ -5550,7 +5550,7 @@ dependencies = [ [[package]] name = "solana-local-cluster" -version = "1.14.22" +version = "1.14.23" dependencies = [ "assert_matches", "crossbeam-channel", @@ -5568,9 +5568,9 @@ dependencies = [ "solana-entry", "solana-gossip", "solana-ledger", - "solana-logger 1.14.22", + "solana-logger 1.14.23", "solana-runtime", - "solana-sdk 1.14.22", + "solana-sdk 1.14.23", "solana-stake-program", "solana-streamer", "solana-vote-program", @@ -5579,13 +5579,13 @@ dependencies = [ [[package]] name = "solana-log-analyzer" -version = "1.14.22" +version = "1.14.23" dependencies = [ "byte-unit", "clap 3.2.23", "serde", "serde_json", - "solana-logger 1.14.22", + "solana-logger 1.14.23", "solana-version", ] @@ -5602,7 +5602,7 @@ dependencies = [ [[package]] name = "solana-logger" -version = "1.14.22" +version = "1.14.23" dependencies = [ "env_logger", "lazy_static", @@ -5611,38 +5611,38 @@ dependencies = [ [[package]] name = "solana-measure" -version = "1.14.22" +version = "1.14.23" dependencies = [ "log", - "solana-sdk 1.14.22", + "solana-sdk 1.14.23", ] [[package]] name = "solana-merkle-root-bench" -version = "1.14.22" +version = "1.14.23" dependencies = [ "clap 2.33.3", "log", - "solana-logger 1.14.22", + "solana-logger 1.14.23", "solana-measure", "solana-runtime", - "solana-sdk 1.14.22", + "solana-sdk 1.14.23", "solana-version", ] [[package]] name = "solana-merkle-tree" -version = "1.14.22" +version = "1.14.23" dependencies = [ "fast-math", "hex", "matches", - "solana-program 1.14.22", + "solana-program 1.14.23", ] [[package]] name = "solana-metrics" -version = "1.14.22" +version = "1.14.23" dependencies = [ "crossbeam-channel", "env_logger", @@ -5652,23 +5652,23 @@ dependencies = [ "rand 0.7.3", "reqwest", "serial_test", - "solana-sdk 1.14.22", + "solana-sdk 1.14.23", ] [[package]] name = "solana-net-shaper" -version = "1.14.22" +version = "1.14.23" dependencies = [ "clap 3.2.23", "rand 0.7.3", "serde", "serde_json", - "solana-logger 1.14.22", + "solana-logger 1.14.23", ] [[package]] name = "solana-net-utils" -version = "1.14.22" +version = "1.14.23" dependencies = [ "bincode", "clap 3.2.23", @@ -5679,8 +5679,8 @@ dependencies = [ "serde", "serde_derive", "socket2", - "solana-logger 1.14.22", - "solana-sdk 1.14.22", + "solana-logger 1.14.23", + "solana-sdk 1.14.23", "solana-version", "tokio", "url 2.2.2", @@ -5688,7 +5688,7 @@ dependencies = [ [[package]] name = "solana-notifier" -version = "1.14.22" +version = "1.14.23" dependencies = [ "log", "reqwest", @@ -5697,7 +5697,7 @@ dependencies = [ [[package]] name = "solana-perf" -version = "1.14.22" +version = "1.14.23" dependencies = [ "ahash", "bincode", @@ -5716,17 +5716,17 @@ dependencies = [ "rand_chacha 0.2.2", "rayon", "serde", - "solana-logger 1.14.22", + "solana-logger 1.14.23", "solana-metrics", "solana-rayon-threadlimit", - "solana-sdk 1.14.22", + "solana-sdk 1.14.23", "solana-vote-program", "test-case", ] [[package]] name = "solana-poh" -version = "1.14.22" +version = "1.14.23" dependencies = [ "bincode", "core_affinity", @@ -5736,29 +5736,29 @@ dependencies = [ "rand 0.7.3", "solana-entry", "solana-ledger", - "solana-logger 1.14.22", + "solana-logger 1.14.23", "solana-measure", "solana-metrics", "solana-perf", "solana-runtime", - "solana-sdk 1.14.22", + "solana-sdk 1.14.23", "solana-sys-tuner", "thiserror", ] [[package]] name = "solana-poh-bench" -version = "1.14.22" +version = "1.14.23" dependencies = [ "clap 3.2.23", "log", "rand 0.7.3", "rayon", "solana-entry", - "solana-logger 1.14.22", + "solana-logger 1.14.23", "solana-measure", "solana-perf", - "solana-sdk 1.14.22", + "solana-sdk 1.14.23", "solana-version", ] @@ -5813,7 +5813,7 @@ dependencies = [ [[package]] name = "solana-program" -version = "1.14.22" +version = "1.14.23" dependencies = [ "anyhow", "assert_matches", @@ -5851,10 +5851,10 @@ dependencies = [ "serde_json", "sha2 0.10.2", "sha3 0.10.1", - "solana-frozen-abi 1.14.22", - "solana-frozen-abi-macro 1.14.22", - "solana-logger 1.14.22", - "solana-sdk-macro 1.14.22", + "solana-frozen-abi 1.14.23", + "solana-frozen-abi-macro 1.14.23", + "solana-logger 1.14.23", + "solana-sdk-macro 1.14.23", "static_assertions", "thiserror", "tiny-bip39", @@ -5864,7 +5864,7 @@ dependencies = [ [[package]] name = "solana-program-runtime" -version = "1.14.22" +version = "1.14.23" dependencies = [ "base64 0.13.0", "bincode", @@ -5879,18 +5879,18 @@ dependencies = [ "rand 0.7.3", "rustc_version 0.4.0", "serde", - "solana-frozen-abi 1.14.22", - "solana-frozen-abi-macro 1.14.22", - "solana-logger 1.14.22", + "solana-frozen-abi 1.14.23", + "solana-frozen-abi-macro 1.14.23", + "solana-logger 1.14.23", "solana-measure", "solana-metrics", - "solana-sdk 1.14.22", + "solana-sdk 1.14.23", "thiserror", ] [[package]] name = "solana-program-test" -version = "1.14.22" +version = "1.14.23" dependencies = [ "assert_matches", "async-trait", @@ -5902,10 +5902,10 @@ dependencies = [ "solana-banks-client", "solana-banks-server", "solana-bpf-loader-program", - "solana-logger 1.14.22", + "solana-logger 1.14.23", "solana-program-runtime", "solana-runtime", - "solana-sdk 1.14.22", + "solana-sdk 1.14.23", "solana-stake-program", "solana-vote-program", "thiserror", @@ -5914,7 +5914,7 @@ dependencies = [ [[package]] name = "solana-rayon-threadlimit" -version = "1.14.22" +version = "1.14.23" dependencies = [ "lazy_static", "num_cpus", @@ -5922,7 +5922,7 @@ dependencies = [ [[package]] name = "solana-remote-wallet" -version = "1.14.22" +version = "1.14.23" dependencies = [ "console", "dialoguer", @@ -5933,14 +5933,14 @@ dependencies = [ "parking_lot 0.12.1", "qstring", "semver 1.0.10", - "solana-sdk 1.14.22", + "solana-sdk 1.14.23", "thiserror", "uriparse", ] [[package]] name = "solana-rpc" -version = "1.14.22" +version = "1.14.23" dependencies = [ "base64 0.13.0", "bincode", @@ -5976,7 +5976,7 @@ dependencies = [ "solana-poh", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.14.22", + "solana-sdk 1.14.23", "solana-send-transaction-service", "solana-stake-program", "solana-storage-bigtable", @@ -5995,7 +5995,7 @@ dependencies = [ [[package]] name = "solana-rpc-test" -version = "1.14.22" +version = "1.14.23" dependencies = [ "bincode", "bs58", @@ -6007,9 +6007,9 @@ dependencies = [ "serde_json", "solana-account-decoder", "solana-client", - "solana-logger 1.14.22", + "solana-logger 1.14.23", "solana-rpc", - "solana-sdk 1.14.22", + "solana-sdk 1.14.23", "solana-streamer", "solana-test-validator", "solana-transaction-status", @@ -6018,7 +6018,7 @@ dependencies = [ [[package]] name = "solana-runtime" -version = "1.14.22" +version = "1.14.23" dependencies = [ "arrayref", "assert_matches", @@ -6059,18 +6059,18 @@ dependencies = [ "solana-bucket-map", "solana-compute-budget-program", "solana-config-program", - "solana-frozen-abi 1.14.22", - "solana-frozen-abi-macro 1.14.22", - "solana-logger 1.14.22", + "solana-frozen-abi 1.14.23", + "solana-frozen-abi-macro 1.14.23", + "solana-logger 1.14.23", "solana-measure", "solana-metrics", "solana-program-runtime", "solana-rayon-threadlimit", - "solana-sdk 1.14.22", + "solana-sdk 1.14.23", "solana-stake-program", "solana-vote-program", "solana-zk-token-proof-program", - "solana-zk-token-sdk 1.14.22", + "solana-zk-token-sdk 1.14.23", "strum", "strum_macros", "symlink", @@ -6133,7 +6133,7 @@ dependencies = [ [[package]] name = "solana-sdk" -version = "1.14.22" +version = "1.14.23" dependencies = [ "anyhow", "assert_matches", @@ -6173,11 +6173,11 @@ dependencies = [ "serde_json", "sha2 0.10.2", "sha3 0.10.1", - "solana-frozen-abi 1.14.22", - "solana-frozen-abi-macro 1.14.22", - "solana-logger 1.14.22", - "solana-program 1.14.22", - "solana-sdk-macro 1.14.22", + "solana-frozen-abi 1.14.23", + "solana-frozen-abi-macro 1.14.23", + "solana-logger 1.14.23", + "solana-program 1.14.23", + "solana-sdk-macro 1.14.23", "static_assertions", "thiserror", "tiny-bip39", @@ -6200,7 +6200,7 @@ dependencies = [ [[package]] name = "solana-sdk-macro" -version = "1.14.22" +version = "1.14.23" dependencies = [ "bs58", "proc-macro2 1.0.52", @@ -6211,21 +6211,21 @@ dependencies = [ [[package]] name = "solana-send-transaction-service" -version = "1.14.22" +version = "1.14.23" dependencies = [ "crossbeam-channel", "log", "solana-client", - "solana-logger 1.14.22", + "solana-logger 1.14.23", "solana-measure", "solana-metrics", "solana-runtime", - "solana-sdk 1.14.22", + "solana-sdk 1.14.23", ] [[package]] name = "solana-stake-accounts" -version = "1.14.22" +version = "1.14.23" dependencies = [ "clap 2.33.3", "solana-clap-utils", @@ -6233,13 +6233,13 @@ dependencies = [ "solana-client", "solana-remote-wallet", "solana-runtime", - "solana-sdk 1.14.22", + "solana-sdk 1.14.23", "solana-stake-program", ] [[package]] name = "solana-stake-program" -version = "1.14.22" +version = "1.14.23" dependencies = [ "assert_matches", "bincode", @@ -6251,12 +6251,12 @@ dependencies = [ "serde", "serde_derive", "solana-config-program", - "solana-frozen-abi 1.14.22", - "solana-frozen-abi-macro 1.14.22", - "solana-logger 1.14.22", + "solana-frozen-abi 1.14.23", + "solana-frozen-abi-macro 1.14.23", + "solana-logger 1.14.23", "solana-metrics", "solana-program-runtime", - "solana-sdk 1.14.22", + "solana-sdk 1.14.23", "solana-vote-program", "test-case", "thiserror", @@ -6264,7 +6264,7 @@ dependencies = [ [[package]] name = "solana-storage-bigtable" -version = "1.14.22" +version = "1.14.23" dependencies = [ "backoff", "bincode", @@ -6285,7 +6285,7 @@ dependencies = [ "serde_derive", "smpl_jwt", "solana-metrics", - "solana-sdk 1.14.22", + "solana-sdk 1.14.23", "solana-storage-proto", "solana-transaction-status", "thiserror", @@ -6296,7 +6296,7 @@ dependencies = [ [[package]] name = "solana-storage-proto" -version = "1.14.22" +version = "1.14.23" dependencies = [ "bincode", "bs58", @@ -6305,25 +6305,25 @@ dependencies = [ "protobuf-src", "serde", "solana-account-decoder", - "solana-sdk 1.14.22", + "solana-sdk 1.14.23", "solana-transaction-status", "tonic-build 0.8.0", ] [[package]] name = "solana-store-tool" -version = "1.14.22" +version = "1.14.23" dependencies = [ "clap 2.33.3", "log", - "solana-logger 1.14.22", + "solana-logger 1.14.23", "solana-runtime", "solana-version", ] [[package]] name = "solana-streamer" -version = "1.14.22" +version = "1.14.23" dependencies = [ "crossbeam-channel", "futures-util", @@ -6340,10 +6340,10 @@ dependencies = [ "rand 0.7.3", "rcgen", "rustls 0.20.6", - "solana-logger 1.14.22", + "solana-logger 1.14.23", "solana-metrics", "solana-perf", - "solana-sdk 1.14.22", + "solana-sdk 1.14.23", "thiserror", "tokio", "x509-parser", @@ -6351,13 +6351,13 @@ dependencies = [ [[package]] name = "solana-sys-tuner" -version = "1.14.22" +version = "1.14.23" dependencies = [ "clap 2.33.3", "libc", "log", "nix", - "solana-logger 1.14.22", + "solana-logger 1.14.23", "solana-version", "sysctl", "unix_socket2", @@ -6366,7 +6366,7 @@ dependencies = [ [[package]] name = "solana-test-validator" -version = "1.14.22" +version = "1.14.23" dependencies = [ "base64 0.13.0", "log", @@ -6377,20 +6377,20 @@ dependencies = [ "solana-core", "solana-gossip", "solana-ledger", - "solana-logger 1.14.22", + "solana-logger 1.14.23", "solana-net-utils", "solana-program-runtime", "solana-program-test", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.22", + "solana-sdk 1.14.23", "solana-streamer", "tokio", ] [[package]] name = "solana-tokens" -version = "1.14.22" +version = "1.14.23" dependencies = [ "bincode", "chrono", @@ -6406,9 +6406,9 @@ dependencies = [ "solana-clap-utils", "solana-cli-config", "solana-client", - "solana-logger 1.14.22", + "solana-logger 1.14.23", "solana-remote-wallet", - "solana-sdk 1.14.22", + "solana-sdk 1.14.23", "solana-streamer", "solana-test-validator", "solana-transaction-status", @@ -6421,7 +6421,7 @@ dependencies = [ [[package]] name = "solana-transaction-dos" -version = "1.14.22" +version = "1.14.23" dependencies = [ "bincode", "clap 2.33.3", @@ -6435,11 +6435,11 @@ dependencies = [ "solana-faucet", "solana-gossip", "solana-local-cluster", - "solana-logger 1.14.22", + "solana-logger 1.14.23", "solana-measure", "solana-net-utils", "solana-runtime", - "solana-sdk 1.14.22", + "solana-sdk 1.14.23", "solana-streamer", "solana-transaction-status", "solana-version", @@ -6447,7 +6447,7 @@ dependencies = [ [[package]] name = "solana-transaction-status" -version = "1.14.22" +version = "1.14.23" dependencies = [ "Inflector", "base64 0.13.0", @@ -6463,7 +6463,7 @@ dependencies = [ "solana-address-lookup-table-program", "solana-measure", "solana-metrics", - "solana-sdk 1.14.22", + "solana-sdk 1.14.23", "solana-vote-program", "spl-associated-token-account", "spl-memo", @@ -6474,7 +6474,7 @@ dependencies = [ [[package]] name = "solana-upload-perf" -version = "1.14.22" +version = "1.14.23" dependencies = [ "serde_json", "solana-metrics", @@ -6482,7 +6482,7 @@ dependencies = [ [[package]] name = "solana-validator" -version = "1.14.22" +version = "1.14.23" dependencies = [ "chrono", "clap 2.33.3", @@ -6513,14 +6513,14 @@ dependencies = [ "solana-genesis-utils", "solana-gossip", "solana-ledger", - "solana-logger 1.14.22", + "solana-logger 1.14.23", "solana-metrics", "solana-net-utils", "solana-perf", "solana-poh", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.22", + "solana-sdk 1.14.23", "solana-send-transaction-service", "solana-storage-bigtable", "solana-streamer", @@ -6533,21 +6533,21 @@ dependencies = [ [[package]] name = "solana-version" -version = "1.14.22" +version = "1.14.23" dependencies = [ "log", "rustc_version 0.4.0", "semver 1.0.10", "serde", "serde_derive", - "solana-frozen-abi 1.14.22", - "solana-frozen-abi-macro 1.14.22", - "solana-sdk 1.14.22", + "solana-frozen-abi 1.14.23", + "solana-frozen-abi-macro 1.14.23", + "solana-sdk 1.14.23", ] [[package]] name = "solana-vote-program" -version = "1.14.22" +version = "1.14.23" dependencies = [ "bincode", "itertools", @@ -6558,19 +6558,19 @@ dependencies = [ "rustc_version 0.4.0", "serde", "serde_derive", - "solana-frozen-abi 1.14.22", - "solana-frozen-abi-macro 1.14.22", - "solana-logger 1.14.22", + "solana-frozen-abi 1.14.23", + "solana-frozen-abi-macro 1.14.23", + "solana-logger 1.14.23", "solana-metrics", "solana-program-runtime", - "solana-sdk 1.14.22", + "solana-sdk 1.14.23", "test-case", "thiserror", ] [[package]] name = "solana-watchtower" -version = "1.14.22" +version = "1.14.23" dependencies = [ "clap 2.33.3", "humantime", @@ -6579,35 +6579,35 @@ dependencies = [ "solana-cli-config", "solana-cli-output", "solana-client", - "solana-logger 1.14.22", + "solana-logger 1.14.23", "solana-metrics", "solana-notifier", - "solana-sdk 1.14.22", + "solana-sdk 1.14.23", "solana-version", ] [[package]] name = "solana-zk-token-proof-program" -version = "1.14.22" +version = "1.14.23" dependencies = [ "bytemuck", "getrandom 0.1.16", "num-derive", "num-traits", "solana-program-runtime", - "solana-sdk 1.14.22", - "solana-zk-token-sdk 1.14.22", + "solana-sdk 1.14.23", + "solana-zk-token-sdk 1.14.23", ] [[package]] name = "solana-zk-token-proof-program-tests" -version = "1.14.22" +version = "1.14.23" dependencies = [ "bytemuck", "solana-program-runtime", "solana-program-test", - "solana-sdk 1.14.22", - "solana-zk-token-sdk 1.14.22", + "solana-sdk 1.14.23", + "solana-zk-token-sdk 1.14.23", ] [[package]] @@ -6643,7 +6643,7 @@ dependencies = [ [[package]] name = "solana-zk-token-sdk" -version = "1.14.22" +version = "1.14.23" dependencies = [ "aes-gcm-siv", "arrayref", @@ -6663,8 +6663,8 @@ dependencies = [ "serde", "serde_json", "sha3 0.9.1", - "solana-program 1.14.22", - "solana-sdk 1.14.22", + "solana-program 1.14.23", + "solana-sdk 1.14.23", "subtle", "thiserror", "zeroize", diff --git a/account-decoder/Cargo.toml b/account-decoder/Cargo.toml index e665f4220bc918..5cf2f4b44b7ed8 100644 --- a/account-decoder/Cargo.toml +++ b/account-decoder/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-account-decoder" -version = "1.14.22" +version = "1.14.23" description = "Solana account decoder" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -19,10 +19,10 @@ lazy_static = "1.4.0" serde = "1.0.138" serde_derive = "1.0.103" serde_json = "1.0.81" -solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.22" } -solana-config-program = { path = "../programs/config", version = "=1.14.22" } -solana-sdk = { path = "../sdk", version = "=1.14.22" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.22" } +solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.23" } +solana-config-program = { path = "../programs/config", version = "=1.14.23" } +solana-sdk = { path = "../sdk", version = "=1.14.23" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.23" } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } spl-token-2022 = { version = "=0.6.1", features = ["no-entrypoint"] } thiserror = "1.0" diff --git a/accounts-bench/Cargo.toml b/accounts-bench/Cargo.toml index aa4c6c29637321..48b189b337010e 100644 --- a/accounts-bench/Cargo.toml +++ b/accounts-bench/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-accounts-bench" -version = "1.14.22" +version = "1.14.23" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -12,11 +12,11 @@ publish = false clap = "2.33.1" log = "0.4.17" rayon = "1.5.3" -solana-logger = { path = "../logger", version = "=1.14.22" } -solana-measure = { path = "../measure", version = "=1.14.22" } -solana-runtime = { path = "../runtime", version = "=1.14.22" } -solana-sdk = { path = "../sdk", version = "=1.14.22" } -solana-version = { path = "../version", version = "=1.14.22" } +solana-logger = { path = "../logger", version = "=1.14.23" } +solana-measure = { path = "../measure", version = "=1.14.23" } +solana-runtime = { path = "../runtime", version = "=1.14.23" } +solana-sdk = { path = "../sdk", version = "=1.14.23" } +solana-version = { path = "../version", version = "=1.14.23" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/accounts-cluster-bench/Cargo.toml b/accounts-cluster-bench/Cargo.toml index 77e16fa4a89fa8..8eed1e1b019b38 100644 --- a/accounts-cluster-bench/Cargo.toml +++ b/accounts-cluster-bench/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-accounts-cluster-bench" -version = "1.14.22" +version = "1.14.23" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -13,25 +13,25 @@ clap = "2.33.1" log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.22" } -solana-clap-utils = { path = "../clap-utils", version = "=1.14.22" } -solana-client = { path = "../client", version = "=1.14.22" } -solana-faucet = { path = "../faucet", version = "=1.14.22" } -solana-gossip = { path = "../gossip", version = "=1.14.22" } -solana-logger = { path = "../logger", version = "=1.14.22" } -solana-measure = { path = "../measure", version = "=1.14.22" } -solana-net-utils = { path = "../net-utils", version = "=1.14.22" } -solana-runtime = { path = "../runtime", version = "=1.14.22" } -solana-sdk = { path = "../sdk", version = "=1.14.22" } -solana-streamer = { path = "../streamer", version = "=1.14.22" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.22" } -solana-version = { path = "../version", version = "=1.14.22" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.23" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.23" } +solana-client = { path = "../client", version = "=1.14.23" } +solana-faucet = { path = "../faucet", version = "=1.14.23" } +solana-gossip = { path = "../gossip", version = "=1.14.23" } +solana-logger = { path = "../logger", version = "=1.14.23" } +solana-measure = { path = "../measure", version = "=1.14.23" } +solana-net-utils = { path = "../net-utils", version = "=1.14.23" } +solana-runtime = { path = "../runtime", version = "=1.14.23" } +solana-sdk = { path = "../sdk", version = "=1.14.23" } +solana-streamer = { path = "../streamer", version = "=1.14.23" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.23" } +solana-version = { path = "../version", version = "=1.14.23" } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } [dev-dependencies] -solana-core = { path = "../core", version = "=1.14.22" } -solana-local-cluster = { path = "../local-cluster", version = "=1.14.22" } -solana-test-validator = { path = "../test-validator", version = "=1.14.22" } +solana-core = { path = "../core", version = "=1.14.23" } +solana-local-cluster = { path = "../local-cluster", version = "=1.14.23" } +solana-test-validator = { path = "../test-validator", version = "=1.14.23" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/banking-bench/Cargo.toml b/banking-bench/Cargo.toml index 4310cb013fc9a6..a4006f212d1a3f 100644 --- a/banking-bench/Cargo.toml +++ b/banking-bench/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-banking-bench" -version = "1.14.22" +version = "1.14.23" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,18 +14,18 @@ crossbeam-channel = "0.5" log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" -solana-client = { path = "../client", version = "=1.14.22" } -solana-core = { path = "../core", version = "=1.14.22" } -solana-gossip = { path = "../gossip", version = "=1.14.22" } -solana-ledger = { path = "../ledger", version = "=1.14.22" } -solana-logger = { path = "../logger", version = "=1.14.22" } -solana-measure = { path = "../measure", version = "=1.14.22" } -solana-perf = { path = "../perf", version = "=1.14.22" } -solana-poh = { path = "../poh", version = "=1.14.22" } -solana-runtime = { path = "../runtime", version = "=1.14.22" } -solana-sdk = { path = "../sdk", version = "=1.14.22" } -solana-streamer = { path = "../streamer", version = "=1.14.22" } -solana-version = { path = "../version", version = "=1.14.22" } +solana-client = { path = "../client", version = "=1.14.23" } +solana-core = { path = "../core", version = "=1.14.23" } +solana-gossip = { path = "../gossip", version = "=1.14.23" } +solana-ledger = { path = "../ledger", version = "=1.14.23" } +solana-logger = { path = "../logger", version = "=1.14.23" } +solana-measure = { path = "../measure", version = "=1.14.23" } +solana-perf = { path = "../perf", version = "=1.14.23" } +solana-poh = { path = "../poh", version = "=1.14.23" } +solana-runtime = { path = "../runtime", version = "=1.14.23" } +solana-sdk = { path = "../sdk", version = "=1.14.23" } +solana-streamer = { path = "../streamer", version = "=1.14.23" } +solana-version = { path = "../version", version = "=1.14.23" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/banks-client/Cargo.toml b/banks-client/Cargo.toml index 55b6ea358c4087..6bcb41c7faf434 100644 --- a/banks-client/Cargo.toml +++ b/banks-client/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-banks-client" -version = "1.14.22" +version = "1.14.23" description = "Solana banks client" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,17 +12,17 @@ edition = "2021" [dependencies] borsh = "0.9.3" futures = "0.3" -solana-banks-interface = { path = "../banks-interface", version = "=1.14.22" } -solana-program = { path = "../sdk/program", version = "=1.14.22" } -solana-sdk = { path = "../sdk", version = "=1.14.22" } +solana-banks-interface = { path = "../banks-interface", version = "=1.14.23" } +solana-program = { path = "../sdk/program", version = "=1.14.23" } +solana-sdk = { path = "../sdk", version = "=1.14.23" } tarpc = { version = "0.29.0", features = ["full"] } thiserror = "1.0" tokio = { version = "~1.14.1", features = ["full"] } tokio-serde = { version = "0.8", features = ["bincode"] } [dev-dependencies] -solana-banks-server = { path = "../banks-server", version = "=1.14.22" } -solana-runtime = { path = "../runtime", version = "=1.14.22" } +solana-banks-server = { path = "../banks-server", version = "=1.14.23" } +solana-runtime = { path = "../runtime", version = "=1.14.23" } [lib] crate-type = ["lib"] diff --git a/banks-interface/Cargo.toml b/banks-interface/Cargo.toml index 9e1f73851cedfe..ada6bfcdadaa45 100644 --- a/banks-interface/Cargo.toml +++ b/banks-interface/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-banks-interface" -version = "1.14.22" +version = "1.14.23" description = "Solana banks RPC interface" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -11,7 +11,7 @@ edition = "2021" [dependencies] serde = { version = "1.0.138", features = ["derive"] } -solana-sdk = { path = "../sdk", version = "=1.14.22" } +solana-sdk = { path = "../sdk", version = "=1.14.23" } tarpc = { version = "0.29.0", features = ["full"] } [lib] diff --git a/banks-server/Cargo.toml b/banks-server/Cargo.toml index f9efa731a9426f..b83a3c7e87d975 100644 --- a/banks-server/Cargo.toml +++ b/banks-server/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-banks-server" -version = "1.14.22" +version = "1.14.23" description = "Solana banks server" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,11 +13,11 @@ edition = "2021" bincode = "1.3.3" crossbeam-channel = "0.5" futures = "0.3" -solana-banks-interface = { path = "../banks-interface", version = "=1.14.22" } -solana-client = { path = "../client", version = "=1.14.22" } -solana-runtime = { path = "../runtime", version = "=1.14.22" } -solana-sdk = { path = "../sdk", version = "=1.14.22" } -solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.22" } +solana-banks-interface = { path = "../banks-interface", version = "=1.14.23" } +solana-client = { path = "../client", version = "=1.14.23" } +solana-runtime = { path = "../runtime", version = "=1.14.23" } +solana-sdk = { path = "../sdk", version = "=1.14.23" } +solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.23" } tarpc = { version = "0.29.0", features = ["full"] } tokio = { version = "1", features = ["full"] } tokio-serde = { version = "0.8", features = ["bincode"] } diff --git a/bench-streamer/Cargo.toml b/bench-streamer/Cargo.toml index 6da9ed1645108c..8fbd42e5e75b6d 100644 --- a/bench-streamer/Cargo.toml +++ b/bench-streamer/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-bench-streamer" -version = "1.14.22" +version = "1.14.23" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -11,9 +11,9 @@ publish = false [dependencies] clap = { version = "3.1.5", features = ["cargo"] } crossbeam-channel = "0.5" -solana-net-utils = { path = "../net-utils", version = "=1.14.22" } -solana-streamer = { path = "../streamer", version = "=1.14.22" } -solana-version = { path = "../version", version = "=1.14.22" } +solana-net-utils = { path = "../net-utils", version = "=1.14.23" } +solana-streamer = { path = "../streamer", version = "=1.14.23" } +solana-version = { path = "../version", version = "=1.14.23" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/bench-tps/Cargo.toml b/bench-tps/Cargo.toml index 640412e7e12a96..d870621d285e7e 100644 --- a/bench-tps/Cargo.toml +++ b/bench-tps/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-bench-tps" -version = "1.14.22" +version = "1.14.23" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -15,28 +15,28 @@ log = "0.4.17" rayon = "1.5.3" serde_json = "1.0.81" serde_yaml = "0.8.26" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.22" } -solana-cli-config = { path = "../cli-config", version = "=1.14.22" } -solana-client = { path = "../client", version = "=1.14.22" } -solana-core = { path = "../core", version = "=1.14.22" } -solana-faucet = { path = "../faucet", version = "=1.14.22" } -solana-genesis = { path = "../genesis", version = "=1.14.22" } -solana-gossip = { path = "../gossip", version = "=1.14.22" } -solana-logger = { path = "../logger", version = "=1.14.22" } -solana-measure = { path = "../measure", version = "=1.14.22" } -solana-metrics = { path = "../metrics", version = "=1.14.22" } -solana-net-utils = { path = "../net-utils", version = "=1.14.22" } -solana-rpc = { path = "../rpc", version = "=1.14.22" } -solana-runtime = { path = "../runtime", version = "=1.14.22" } -solana-sdk = { path = "../sdk", version = "=1.14.22" } -solana-streamer = { path = "../streamer", version = "=1.14.22" } -solana-version = { path = "../version", version = "=1.14.22" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.23" } +solana-cli-config = { path = "../cli-config", version = "=1.14.23" } +solana-client = { path = "../client", version = "=1.14.23" } +solana-core = { path = "../core", version = "=1.14.23" } +solana-faucet = { path = "../faucet", version = "=1.14.23" } +solana-genesis = { path = "../genesis", version = "=1.14.23" } +solana-gossip = { path = "../gossip", version = "=1.14.23" } +solana-logger = { path = "../logger", version = "=1.14.23" } +solana-measure = { path = "../measure", version = "=1.14.23" } +solana-metrics = { path = "../metrics", version = "=1.14.23" } +solana-net-utils = { path = "../net-utils", version = "=1.14.23" } +solana-rpc = { path = "../rpc", version = "=1.14.23" } +solana-runtime = { path = "../runtime", version = "=1.14.23" } +solana-sdk = { path = "../sdk", version = "=1.14.23" } +solana-streamer = { path = "../streamer", version = "=1.14.23" } +solana-version = { path = "../version", version = "=1.14.23" } thiserror = "1.0" [dev-dependencies] serial_test = "0.8.0" -solana-local-cluster = { path = "../local-cluster", version = "=1.14.22" } -solana-test-validator = { path = "../test-validator", version = "=1.14.22" } +solana-local-cluster = { path = "../local-cluster", version = "=1.14.23" } +solana-test-validator = { path = "../test-validator", version = "=1.14.23" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/bloom/Cargo.toml b/bloom/Cargo.toml index 8639d5bfdfd797..f74886b47f0a78 100644 --- a/bloom/Cargo.toml +++ b/bloom/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bloom" -version = "1.14.22" +version = "1.14.23" description = "Solana bloom filter" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -17,9 +17,9 @@ rand = "0.7.0" rayon = "1.5.3" serde = { version = "1.0.138", features = ["rc"] } serde_derive = "1.0.103" -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.22" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.22" } -solana-sdk = { path = "../sdk", version = "=1.14.22" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.23" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.23" } +solana-sdk = { path = "../sdk", version = "=1.14.23" } [lib] crate-type = ["lib"] diff --git a/bucket_map/Cargo.toml b/bucket_map/Cargo.toml index 23da0a270f37e1..f9127ab63b57fc 100644 --- a/bucket_map/Cargo.toml +++ b/bucket_map/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bucket-map" -version = "1.14.22" +version = "1.14.23" description = "solana-bucket-map" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-bucket-map" @@ -15,14 +15,14 @@ log = { version = "0.4.17" } memmap2 = "0.5.3" modular-bitfield = "0.11.2" rand = "0.7.0" -solana-measure = { path = "../measure", version = "=1.14.22" } -solana-sdk = { path = "../sdk", version = "=1.14.22" } +solana-measure = { path = "../measure", version = "=1.14.23" } +solana-sdk = { path = "../sdk", version = "=1.14.23" } tempfile = "3.4.0" [dev-dependencies] fs_extra = "1.2.0" rayon = "1.5.3" -solana-logger = { path = "../logger", version = "=1.14.22" } +solana-logger = { path = "../logger", version = "=1.14.23" } [lib] crate-type = ["lib"] diff --git a/clap-utils/Cargo.toml b/clap-utils/Cargo.toml index cbbef30b2ead55..a11593cf743c5b 100644 --- a/clap-utils/Cargo.toml +++ b/clap-utils/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-clap-utils" -version = "1.14.22" +version = "1.14.23" description = "Solana utilities for the clap" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,9 +13,9 @@ edition = "2021" chrono = "0.4" clap = "2.33.0" rpassword = "6.0" -solana-perf = { path = "../perf", version = "=1.14.22" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.22", default-features = false } -solana-sdk = { path = "../sdk", version = "=1.14.22" } +solana-perf = { path = "../perf", version = "=1.14.23" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.23", default-features = false } +solana-sdk = { path = "../sdk", version = "=1.14.23" } thiserror = "1.0.31" tiny-bip39 = "0.8.2" uriparse = "0.6.4" diff --git a/clap-v3-utils/Cargo.toml b/clap-v3-utils/Cargo.toml index 6fc8b0e5a7d6d5..40c3b4b20bbd44 100644 --- a/clap-v3-utils/Cargo.toml +++ b/clap-v3-utils/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-clap-v3-utils" -version = "1.14.22" +version = "1.14.23" description = "Solana utilities for the clap v3" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,9 +13,9 @@ edition = "2021" chrono = "0.4" clap = { version = "3.2.23", features = ["cargo"] } rpassword = "6.0" -solana-perf = { path = "../perf", version = "=1.14.22" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.22", default-features = false } -solana-sdk = { path = "../sdk", version = "=1.14.22" } +solana-perf = { path = "../perf", version = "=1.14.23" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.23", default-features = false } +solana-sdk = { path = "../sdk", version = "=1.14.23" } thiserror = "1.0.31" tiny-bip39 = "0.8.2" uriparse = "0.6.4" diff --git a/cli-config/Cargo.toml b/cli-config/Cargo.toml index cdd7aa546d4568..3ea27d4a6e9466 100644 --- a/cli-config/Cargo.toml +++ b/cli-config/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-cli-config" description = "Blockchain, Rebuilt for Scale" -version = "1.14.22" +version = "1.14.23" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -15,8 +15,8 @@ lazy_static = "1.4.0" serde = "1.0.138" serde_derive = "1.0.103" serde_yaml = "0.8.26" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.22" } -solana-sdk = { path = "../sdk", version = "=1.14.22" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.23" } +solana-sdk = { path = "../sdk", version = "=1.14.23" } url = "2.2.2" [dev-dependencies] diff --git a/cli-output/Cargo.toml b/cli-output/Cargo.toml index 9ff7b91a55e657..6b6e2a2387dc5f 100644 --- a/cli-output/Cargo.toml +++ b/cli-output/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-cli-output" description = "Blockchain, Rebuilt for Scale" -version = "1.14.22" +version = "1.14.23" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -21,13 +21,13 @@ pretty-hex = "0.3.0" semver = "1.0.10" serde = "1.0.138" serde_json = "1.0.81" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.22" } -solana-clap-utils = { path = "../clap-utils", version = "=1.14.22" } -solana-cli-config = { path = "../cli-config", version = "=1.14.22" } -solana-client = { path = "../client", version = "=1.14.22" } -solana-sdk = { path = "../sdk", version = "=1.14.22" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.22" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.22" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.23" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.23" } +solana-cli-config = { path = "../cli-config", version = "=1.14.23" } +solana-client = { path = "../client", version = "=1.14.23" } +solana-sdk = { path = "../sdk", version = "=1.14.23" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.23" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.23" } spl-memo = { version = "=3.0.1", features = ["no-entrypoint"] } [dev-dependencies] diff --git a/cli/Cargo.toml b/cli/Cargo.toml index 6fa0def6d52562..cff12f7a28f5a6 100644 --- a/cli/Cargo.toml +++ b/cli/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-cli" description = "Blockchain, Rebuilt for Scale" -version = "1.14.22" +version = "1.14.23" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -27,30 +27,30 @@ semver = "1.0.10" serde = "1.0.138" serde_derive = "1.0.103" serde_json = "1.0.81" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.22" } -solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.22" } -solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.22" } -solana-clap-utils = { path = "../clap-utils", version = "=1.14.22" } -solana-cli-config = { path = "../cli-config", version = "=1.14.22" } -solana-cli-output = { path = "../cli-output", version = "=1.14.22" } -solana-client = { path = "../client", version = "=1.14.22" } -solana-config-program = { path = "../programs/config", version = "=1.14.22" } -solana-faucet = { path = "../faucet", version = "=1.14.22" } -solana-logger = { path = "../logger", version = "=1.14.22" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.22" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.22" } -solana-sdk = { path = "../sdk", version = "=1.14.22" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.22" } -solana-version = { path = "../version", version = "=1.14.22" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.22" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.23" } +solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.23" } +solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.23" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.23" } +solana-cli-config = { path = "../cli-config", version = "=1.14.23" } +solana-cli-output = { path = "../cli-output", version = "=1.14.23" } +solana-client = { path = "../client", version = "=1.14.23" } +solana-config-program = { path = "../programs/config", version = "=1.14.23" } +solana-faucet = { path = "../faucet", version = "=1.14.23" } +solana-logger = { path = "../logger", version = "=1.14.23" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.23" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.23" } +solana-sdk = { path = "../sdk", version = "=1.14.23" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.23" } +solana-version = { path = "../version", version = "=1.14.23" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.23" } solana_rbpf = "=0.2.31" spl-memo = { version = "=3.0.1", features = ["no-entrypoint"] } thiserror = "1.0.31" tiny-bip39 = "0.8.2" [dev-dependencies] -solana-streamer = { path = "../streamer", version = "=1.14.22" } -solana-test-validator = { path = "../test-validator", version = "=1.14.22" } +solana-streamer = { path = "../streamer", version = "=1.14.23" } +solana-test-validator = { path = "../test-validator", version = "=1.14.23" } tempfile = "3.4.0" [[bin]] diff --git a/client-test/Cargo.toml b/client-test/Cargo.toml index 625eb464af006e..f20ff695bf6b38 100644 --- a/client-test/Cargo.toml +++ b/client-test/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-client-test" -version = "1.14.22" +version = "1.14.23" description = "Solana RPC Test" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,25 +14,25 @@ publish = false futures-util = "0.3.21" serde_json = "1.0.81" serial_test = "0.8.0" -solana-client = { path = "../client", version = "=1.14.22" } -solana-ledger = { path = "../ledger", version = "=1.14.22" } -solana-measure = { path = "../measure", version = "=1.14.22" } -solana-merkle-tree = { path = "../merkle-tree", version = "=1.14.22" } -solana-metrics = { path = "../metrics", version = "=1.14.22" } -solana-perf = { path = "../perf", version = "=1.14.22" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.22" } -solana-rpc = { path = "../rpc", version = "=1.14.22" } -solana-runtime = { path = "../runtime", version = "=1.14.22" } -solana-sdk = { path = "../sdk", version = "=1.14.22" } -solana-streamer = { path = "../streamer", version = "=1.14.22" } -solana-test-validator = { path = "../test-validator", version = "=1.14.22" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.22" } -solana-version = { path = "../version", version = "=1.14.22" } +solana-client = { path = "../client", version = "=1.14.23" } +solana-ledger = { path = "../ledger", version = "=1.14.23" } +solana-measure = { path = "../measure", version = "=1.14.23" } +solana-merkle-tree = { path = "../merkle-tree", version = "=1.14.23" } +solana-metrics = { path = "../metrics", version = "=1.14.23" } +solana-perf = { path = "../perf", version = "=1.14.23" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.23" } +solana-rpc = { path = "../rpc", version = "=1.14.23" } +solana-runtime = { path = "../runtime", version = "=1.14.23" } +solana-sdk = { path = "../sdk", version = "=1.14.23" } +solana-streamer = { path = "../streamer", version = "=1.14.23" } +solana-test-validator = { path = "../test-validator", version = "=1.14.23" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.23" } +solana-version = { path = "../version", version = "=1.14.23" } systemstat = "0.1.11" tokio = { version = "~1.14.1", features = ["full"] } [dev-dependencies] -solana-logger = { path = "../logger", version = "=1.14.22" } +solana-logger = { path = "../logger", version = "=1.14.23" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/client/Cargo.toml b/client/Cargo.toml index f2ceafc1f6f4d8..e6c33d23753e6d 100644 --- a/client/Cargo.toml +++ b/client/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-client" -version = "1.14.22" +version = "1.14.23" description = "Solana Client" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -38,17 +38,17 @@ semver = "1.0.10" serde = "1.0.138" serde_derive = "1.0.103" serde_json = "1.0.81" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.22" } -solana-clap-utils = { path = "../clap-utils", version = "=1.14.22" } -solana-faucet = { path = "../faucet", version = "=1.14.22" } -solana-measure = { path = "../measure", version = "=1.14.22" } -solana-metrics = { path = "../metrics", version = "=1.14.22" } -solana-net-utils = { path = "../net-utils", version = "=1.14.22" } -solana-sdk = { path = "../sdk", version = "=1.14.22" } -solana-streamer = { path = "../streamer", version = "=1.14.22" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.22" } -solana-version = { path = "../version", version = "=1.14.22" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.22" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.23" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.23" } +solana-faucet = { path = "../faucet", version = "=1.14.23" } +solana-measure = { path = "../measure", version = "=1.14.23" } +solana-metrics = { path = "../metrics", version = "=1.14.23" } +solana-net-utils = { path = "../net-utils", version = "=1.14.23" } +solana-sdk = { path = "../sdk", version = "=1.14.23" } +solana-streamer = { path = "../streamer", version = "=1.14.23" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.23" } +solana-version = { path = "../version", version = "=1.14.23" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.23" } spl-token-2022 = { version = "=0.6.1", features = ["no-entrypoint"] } thiserror = "1.0" tokio = { version = "1", features = ["full"] } @@ -61,8 +61,8 @@ url = "2.2.2" anyhow = "1.0.58" assert_matches = "1.5.0" jsonrpc-http-server = "18.0.0" -solana-logger = { path = "../logger", version = "=1.14.22" } -solana-perf = { path = "../perf", version = "=1.14.22" } +solana-logger = { path = "../logger", version = "=1.14.23" } +solana-perf = { path = "../perf", version = "=1.14.23" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/core/Cargo.toml b/core/Cargo.toml index 2345732d04b957..1988ab7961587b 100644 --- a/core/Cargo.toml +++ b/core/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "solana-core" description = "Blockchain, Rebuilt for Scale" -version = "1.14.22" +version = "1.14.23" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-core" readme = "../README.md" @@ -36,30 +36,30 @@ rand_chacha = "0.2.2" rayon = "1.5.3" serde = "1.0.138" serde_derive = "1.0.103" -solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.22" } -solana-bloom = { path = "../bloom", version = "=1.14.22" } -solana-client = { path = "../client", version = "=1.14.22" } -solana-entry = { path = "../entry", version = "=1.14.22" } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.22" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.22" } -solana-geyser-plugin-manager = { path = "../geyser-plugin-manager", version = "=1.14.22" } -solana-gossip = { path = "../gossip", version = "=1.14.22" } -solana-ledger = { path = "../ledger", version = "=1.14.22" } -solana-measure = { path = "../measure", version = "=1.14.22" } -solana-metrics = { path = "../metrics", version = "=1.14.22" } -solana-net-utils = { path = "../net-utils", version = "=1.14.22" } -solana-perf = { path = "../perf", version = "=1.14.22" } -solana-poh = { path = "../poh", version = "=1.14.22" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.22" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.22" } -solana-rpc = { path = "../rpc", version = "=1.14.22" } -solana-runtime = { path = "../runtime", version = "=1.14.22" } -solana-sdk = { path = "../sdk", version = "=1.14.22" } -solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.22" } -solana-streamer = { path = "../streamer", version = "=1.14.22" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.22" } -solana-version = { path = "../version", version = "=1.14.22" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.22" } +solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.23" } +solana-bloom = { path = "../bloom", version = "=1.14.23" } +solana-client = { path = "../client", version = "=1.14.23" } +solana-entry = { path = "../entry", version = "=1.14.23" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.23" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.23" } +solana-geyser-plugin-manager = { path = "../geyser-plugin-manager", version = "=1.14.23" } +solana-gossip = { path = "../gossip", version = "=1.14.23" } +solana-ledger = { path = "../ledger", version = "=1.14.23" } +solana-measure = { path = "../measure", version = "=1.14.23" } +solana-metrics = { path = "../metrics", version = "=1.14.23" } +solana-net-utils = { path = "../net-utils", version = "=1.14.23" } +solana-perf = { path = "../perf", version = "=1.14.23" } +solana-poh = { path = "../poh", version = "=1.14.23" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.23" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.23" } +solana-rpc = { path = "../rpc", version = "=1.14.23" } +solana-runtime = { path = "../runtime", version = "=1.14.23" } +solana-sdk = { path = "../sdk", version = "=1.14.23" } +solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.23" } +solana-streamer = { path = "../streamer", version = "=1.14.23" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.23" } +solana-version = { path = "../version", version = "=1.14.23" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.23" } sys-info = "0.9.1" tempfile = "3.4.0" thiserror = "1.0" @@ -71,9 +71,9 @@ matches = "0.1.9" raptorq = "1.7.0" serde_json = "1.0.81" serial_test = "0.8.0" -solana-logger = { path = "../logger", version = "=1.14.22" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.22" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.22" } +solana-logger = { path = "../logger", version = "=1.14.23" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.23" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.23" } static_assertions = "1.1.0" systemstat = "0.1.11" test-case = "2.1.0" diff --git a/dos/Cargo.toml b/dos/Cargo.toml index de5f7b1824ddd4..2792ad5a47c557 100644 --- a/dos/Cargo.toml +++ b/dos/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-dos" -version = "1.14.22" +version = "1.14.23" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -17,23 +17,23 @@ itertools = "0.10.3" log = "0.4.17" rand = "0.7.0" serde = "1.0.138" -solana-bench-tps = { path = "../bench-tps", version = "=1.14.22" } -solana-client = { path = "../client", version = "=1.14.22" } -solana-core = { path = "../core", version = "=1.14.22" } -solana-faucet = { path = "../faucet", version = "=1.14.22" } -solana-gossip = { path = "../gossip", version = "=1.14.22" } -solana-logger = { path = "../logger", version = "=1.14.22" } -solana-measure = { path = "../measure", version = "=1.14.22" } -solana-net-utils = { path = "../net-utils", version = "=1.14.22" } -solana-perf = { path = "../perf", version = "=1.14.22" } -solana-rpc = { path = "../rpc", version = "=1.14.22" } -solana-sdk = { path = "../sdk", version = "=1.14.22" } -solana-streamer = { path = "../streamer", version = "=1.14.22" } -solana-version = { path = "../version", version = "=1.14.22" } +solana-bench-tps = { path = "../bench-tps", version = "=1.14.23" } +solana-client = { path = "../client", version = "=1.14.23" } +solana-core = { path = "../core", version = "=1.14.23" } +solana-faucet = { path = "../faucet", version = "=1.14.23" } +solana-gossip = { path = "../gossip", version = "=1.14.23" } +solana-logger = { path = "../logger", version = "=1.14.23" } +solana-measure = { path = "../measure", version = "=1.14.23" } +solana-net-utils = { path = "../net-utils", version = "=1.14.23" } +solana-perf = { path = "../perf", version = "=1.14.23" } +solana-rpc = { path = "../rpc", version = "=1.14.23" } +solana-sdk = { path = "../sdk", version = "=1.14.23" } +solana-streamer = { path = "../streamer", version = "=1.14.23" } +solana-version = { path = "../version", version = "=1.14.23" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] [dev-dependencies] serial_test = "0.8.0" -solana-local-cluster = { path = "../local-cluster", version = "=1.14.22" } +solana-local-cluster = { path = "../local-cluster", version = "=1.14.23" } diff --git a/download-utils/Cargo.toml b/download-utils/Cargo.toml index 80646f72f28bd4..a14014b9109a1f 100644 --- a/download-utils/Cargo.toml +++ b/download-utils/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-download-utils" -version = "1.14.22" +version = "1.14.23" description = "Solana Download Utils" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,8 +14,8 @@ console = "0.15.0" indicatif = "0.16.2" log = "0.4.17" reqwest = { version = "0.11.11", default-features = false, features = ["blocking", "brotli", "deflate", "gzip", "rustls-tls", "json"] } -solana-runtime = { path = "../runtime", version = "=1.14.22" } -solana-sdk = { path = "../sdk", version = "=1.14.22" } +solana-runtime = { path = "../runtime", version = "=1.14.23" } +solana-sdk = { path = "../sdk", version = "=1.14.23" } [lib] crate-type = ["lib"] diff --git a/entry/Cargo.toml b/entry/Cargo.toml index 39a01d62e77051..9fb27b2c9b8dae 100644 --- a/entry/Cargo.toml +++ b/entry/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-entry" -version = "1.14.22" +version = "1.14.23" description = "Solana Entry" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -19,16 +19,16 @@ log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" serde = "1.0.138" -solana-measure = { path = "../measure", version = "=1.14.22" } -solana-merkle-tree = { path = "../merkle-tree", version = "=1.14.22" } -solana-metrics = { path = "../metrics", version = "=1.14.22" } -solana-perf = { path = "../perf", version = "=1.14.22" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.22" } -solana-sdk = { path = "../sdk", version = "=1.14.22" } +solana-measure = { path = "../measure", version = "=1.14.23" } +solana-merkle-tree = { path = "../merkle-tree", version = "=1.14.23" } +solana-metrics = { path = "../metrics", version = "=1.14.23" } +solana-perf = { path = "../perf", version = "=1.14.23" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.23" } +solana-sdk = { path = "../sdk", version = "=1.14.23" } [dev-dependencies] matches = "0.1.9" -solana-logger = { path = "../logger", version = "=1.14.22" } +solana-logger = { path = "../logger", version = "=1.14.23" } [lib] crate-type = ["lib"] diff --git a/faucet/Cargo.toml b/faucet/Cargo.toml index 330beaadd15832..a104f2044f2e14 100644 --- a/faucet/Cargo.toml +++ b/faucet/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-faucet" -version = "1.14.22" +version = "1.14.23" description = "Solana Faucet" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -17,12 +17,12 @@ crossbeam-channel = "0.5" log = "0.4.17" serde = "1.0.138" serde_derive = "1.0.103" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.22" } -solana-cli-config = { path = "../cli-config", version = "=1.14.22" } -solana-logger = { path = "../logger", version = "=1.14.22" } -solana-metrics = { path = "../metrics", version = "=1.14.22" } -solana-sdk = { path = "../sdk", version = "=1.14.22" } -solana-version = { path = "../version", version = "=1.14.22" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.23" } +solana-cli-config = { path = "../cli-config", version = "=1.14.23" } +solana-logger = { path = "../logger", version = "=1.14.23" } +solana-metrics = { path = "../metrics", version = "=1.14.23" } +solana-sdk = { path = "../sdk", version = "=1.14.23" } +solana-version = { path = "../version", version = "=1.14.23" } spl-memo = { version = "=3.0.1", features = ["no-entrypoint"] } thiserror = "1.0" tokio = { version = "1", features = ["full"] } diff --git a/frozen-abi/Cargo.toml b/frozen-abi/Cargo.toml index f214267733aa0b..dcab07b0834df2 100644 --- a/frozen-abi/Cargo.toml +++ b/frozen-abi/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-frozen-abi" -version = "1.14.22" +version = "1.14.23" description = "Solana Frozen ABI" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -20,7 +20,7 @@ serde_bytes = "0.11" serde_derive = "1.0" serde_json = "1.0" sha2 = "0.10.2" -solana-frozen-abi-macro = { path = "macro", version = "=1.14.22" } +solana-frozen-abi-macro = { path = "macro", version = "=1.14.23" } thiserror = "1.0" [target.'cfg(not(target_os = "solana"))'.dependencies] @@ -43,7 +43,7 @@ rand_core = { version = "0.6.3", features = ["alloc", "getrandom", "std"] } subtle = { version = "2.4.1", features = ["default", "i128", "std"] } [target.'cfg(not(target_os = "solana"))'.dev-dependencies] -solana-logger = { path = "../logger", version = "=1.14.22" } +solana-logger = { path = "../logger", version = "=1.14.23" } [build-dependencies] rustc_version = "0.4" diff --git a/frozen-abi/macro/Cargo.toml b/frozen-abi/macro/Cargo.toml index 08fba5c6469eb1..82c370c4538624 100644 --- a/frozen-abi/macro/Cargo.toml +++ b/frozen-abi/macro/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-frozen-abi-macro" -version = "1.14.22" +version = "1.14.23" description = "Solana Frozen ABI Macro" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/genesis-utils/Cargo.toml b/genesis-utils/Cargo.toml index 58b17c26cb356b..08d9694795e6c2 100644 --- a/genesis-utils/Cargo.toml +++ b/genesis-utils/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-genesis-utils" -version = "1.14.22" +version = "1.14.23" description = "Solana Genesis Utils" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,9 +10,9 @@ documentation = "https://docs.rs/solana-download-utils" edition = "2021" [dependencies] -solana-download-utils = { path = "../download-utils", version = "=1.14.22" } -solana-runtime = { path = "../runtime", version = "=1.14.22" } -solana-sdk = { path = "../sdk", version = "=1.14.22" } +solana-download-utils = { path = "../download-utils", version = "=1.14.23" } +solana-runtime = { path = "../runtime", version = "=1.14.23" } +solana-sdk = { path = "../sdk", version = "=1.14.23" } [lib] crate-type = ["lib"] diff --git a/genesis/Cargo.toml b/genesis/Cargo.toml index cf930eb37eadca..a2bc6cfd9785d7 100644 --- a/genesis/Cargo.toml +++ b/genesis/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-genesis" description = "Blockchain, Rebuilt for Scale" -version = "1.14.22" +version = "1.14.23" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -15,16 +15,16 @@ clap = "2.33.1" serde = "1.0.138" serde_json = "1.0.81" serde_yaml = "0.8.26" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.22" } -solana-cli-config = { path = "../cli-config", version = "=1.14.22" } -solana-entry = { path = "../entry", version = "=1.14.22" } -solana-ledger = { path = "../ledger", version = "=1.14.22" } -solana-logger = { path = "../logger", version = "=1.14.22" } -solana-runtime = { path = "../runtime", version = "=1.14.22" } -solana-sdk = { path = "../sdk", version = "=1.14.22" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.22" } -solana-version = { path = "../version", version = "=1.14.22" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.22" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.23" } +solana-cli-config = { path = "../cli-config", version = "=1.14.23" } +solana-entry = { path = "../entry", version = "=1.14.23" } +solana-ledger = { path = "../ledger", version = "=1.14.23" } +solana-logger = { path = "../logger", version = "=1.14.23" } +solana-runtime = { path = "../runtime", version = "=1.14.23" } +solana-sdk = { path = "../sdk", version = "=1.14.23" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.23" } +solana-version = { path = "../version", version = "=1.14.23" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.23" } tempfile = "3.4.0" [[bin]] diff --git a/geyser-plugin-interface/Cargo.toml b/geyser-plugin-interface/Cargo.toml index 5b7a2c1f8f2b8f..4f7801a8e9d07a 100644 --- a/geyser-plugin-interface/Cargo.toml +++ b/geyser-plugin-interface/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-geyser-plugin-interface" description = "The Solana Geyser plugin interface." -version = "1.14.22" +version = "1.14.23" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -11,8 +11,8 @@ documentation = "https://docs.rs/solana-geyser-plugin-interface" [dependencies] log = "0.4.17" -solana-sdk = { path = "../sdk", version = "=1.14.22" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.22" } +solana-sdk = { path = "../sdk", version = "=1.14.23" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.23" } thiserror = "1.0.31" [package.metadata.docs.rs] diff --git a/geyser-plugin-manager/Cargo.toml b/geyser-plugin-manager/Cargo.toml index 4ffe997b841750..987b77a3bff3fc 100644 --- a/geyser-plugin-manager/Cargo.toml +++ b/geyser-plugin-manager/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-geyser-plugin-manager" description = "The Solana Geyser plugin manager." -version = "1.14.22" +version = "1.14.23" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -16,13 +16,13 @@ json5 = "0.4.1" libloading = "0.7.3" log = "0.4.17" serde_json = "1.0.81" -solana-geyser-plugin-interface = { path = "../geyser-plugin-interface", version = "=1.14.22" } -solana-measure = { path = "../measure", version = "=1.14.22" } -solana-metrics = { path = "../metrics", version = "=1.14.22" } -solana-rpc = { path = "../rpc", version = "=1.14.22" } -solana-runtime = { path = "../runtime", version = "=1.14.22" } -solana-sdk = { path = "../sdk", version = "=1.14.22" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.22" } +solana-geyser-plugin-interface = { path = "../geyser-plugin-interface", version = "=1.14.23" } +solana-measure = { path = "../measure", version = "=1.14.23" } +solana-metrics = { path = "../metrics", version = "=1.14.23" } +solana-rpc = { path = "../rpc", version = "=1.14.23" } +solana-runtime = { path = "../runtime", version = "=1.14.23" } +solana-sdk = { path = "../sdk", version = "=1.14.23" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.23" } thiserror = "1.0.31" [package.metadata.docs.rs] diff --git a/gossip/Cargo.toml b/gossip/Cargo.toml index 5b051fa0809028..6a44158163320b 100644 --- a/gossip/Cargo.toml +++ b/gossip/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-gossip" description = "Blockchain, Rebuilt for Scale" -version = "1.14.22" +version = "1.14.23" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -27,24 +27,24 @@ rayon = "1.5.3" serde = "1.0.138" serde_bytes = "0.11" serde_derive = "1.0.103" -solana-bloom = { path = "../bloom", version = "=1.14.22" } -solana-clap-utils = { path = "../clap-utils", version = "=1.14.22" } -solana-client = { path = "../client", version = "=1.14.22" } -solana-entry = { path = "../entry", version = "=1.14.22" } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.22" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.22" } -solana-ledger = { path = "../ledger", version = "=1.14.22" } -solana-logger = { path = "../logger", version = "=1.14.22" } -solana-measure = { path = "../measure", version = "=1.14.22" } -solana-metrics = { path = "../metrics", version = "=1.14.22" } -solana-net-utils = { path = "../net-utils", version = "=1.14.22" } -solana-perf = { path = "../perf", version = "=1.14.22" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.22" } -solana-runtime = { path = "../runtime", version = "=1.14.22" } -solana-sdk = { path = "../sdk", version = "=1.14.22" } -solana-streamer = { path = "../streamer", version = "=1.14.22" } -solana-version = { path = "../version", version = "=1.14.22" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.22" } +solana-bloom = { path = "../bloom", version = "=1.14.23" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.23" } +solana-client = { path = "../client", version = "=1.14.23" } +solana-entry = { path = "../entry", version = "=1.14.23" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.23" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.23" } +solana-ledger = { path = "../ledger", version = "=1.14.23" } +solana-logger = { path = "../logger", version = "=1.14.23" } +solana-measure = { path = "../measure", version = "=1.14.23" } +solana-metrics = { path = "../metrics", version = "=1.14.23" } +solana-net-utils = { path = "../net-utils", version = "=1.14.23" } +solana-perf = { path = "../perf", version = "=1.14.23" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.23" } +solana-runtime = { path = "../runtime", version = "=1.14.23" } +solana-sdk = { path = "../sdk", version = "=1.14.23" } +solana-streamer = { path = "../streamer", version = "=1.14.23" } +solana-version = { path = "../version", version = "=1.14.23" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.23" } thiserror = "1.0" [dev-dependencies] diff --git a/install/Cargo.toml b/install/Cargo.toml index 520c4c2e70d2bd..31c2599a634992 100644 --- a/install/Cargo.toml +++ b/install/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-install" description = "The solana cluster software installer" -version = "1.14.22" +version = "1.14.23" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -26,12 +26,12 @@ reqwest = { version = "0.11.11", default-features = false, features = ["blocking semver = "1.0.10" serde = { version = "1.0.138", features = ["derive"] } serde_yaml = "0.8.26" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.22" } -solana-client = { path = "../client", version = "=1.14.22" } -solana-config-program = { path = "../programs/config", version = "=1.14.22" } -solana-logger = { path = "../logger", version = "=1.14.22" } -solana-sdk = { path = "../sdk", version = "=1.14.22" } -solana-version = { path = "../version", version = "=1.14.22" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.23" } +solana-client = { path = "../client", version = "=1.14.23" } +solana-config-program = { path = "../programs/config", version = "=1.14.23" } +solana-logger = { path = "../logger", version = "=1.14.23" } +solana-sdk = { path = "../sdk", version = "=1.14.23" } +solana-version = { path = "../version", version = "=1.14.23" } tar = "0.4.38" tempfile = "3.4.0" url = "2.2.2" diff --git a/keygen/Cargo.toml b/keygen/Cargo.toml index 3b4420e3634ff3..859c1636cd9e65 100644 --- a/keygen/Cargo.toml +++ b/keygen/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-keygen" -version = "1.14.22" +version = "1.14.23" description = "Solana key generation utility" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,11 +14,11 @@ bs58 = "0.4.0" clap = { version = "3.1.5", features = ["cargo"] } dirs-next = "2.0.0" num_cpus = "1.13.1" -solana-clap-v3-utils = { path = "../clap-v3-utils", version = "=1.14.22" } -solana-cli-config = { path = "../cli-config", version = "=1.14.22" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.22" } -solana-sdk = { path = "../sdk", version = "=1.14.22" } -solana-version = { path = "../version", version = "=1.14.22" } +solana-clap-v3-utils = { path = "../clap-v3-utils", version = "=1.14.23" } +solana-cli-config = { path = "../cli-config", version = "=1.14.23" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.23" } +solana-sdk = { path = "../sdk", version = "=1.14.23" } +solana-version = { path = "../version", version = "=1.14.23" } tiny-bip39 = "0.8.2" [[bin]] diff --git a/ledger-tool/Cargo.toml b/ledger-tool/Cargo.toml index b703183bcbc130..cb1d14859156ef 100644 --- a/ledger-tool/Cargo.toml +++ b/ledger-tool/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-ledger-tool" description = "Blockchain, Rebuilt for Scale" -version = "1.14.22" +version = "1.14.23" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -22,20 +22,20 @@ log = { version = "0.4.17" } regex = "1" serde = { version = "1.0", features = ["derive"] } serde_json = "1.0.81" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.22" } -solana-cli-output = { path = "../cli-output", version = "=1.14.22" } -solana-core = { path = "../core", version = "=1.14.22" } -solana-entry = { path = "../entry", version = "=1.14.22" } -solana-ledger = { path = "../ledger", version = "=1.14.22" } -solana-logger = { path = "../logger", version = "=1.14.22" } -solana-measure = { path = "../measure", version = "=1.14.22" } -solana-runtime = { path = "../runtime", version = "=1.14.22" } -solana-sdk = { path = "../sdk", version = "=1.14.22" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.22" } -solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.22" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.22" } -solana-version = { path = "../version", version = "=1.14.22" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.22" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.23" } +solana-cli-output = { path = "../cli-output", version = "=1.14.23" } +solana-core = { path = "../core", version = "=1.14.23" } +solana-entry = { path = "../entry", version = "=1.14.23" } +solana-ledger = { path = "../ledger", version = "=1.14.23" } +solana-logger = { path = "../logger", version = "=1.14.23" } +solana-measure = { path = "../measure", version = "=1.14.23" } +solana-runtime = { path = "../runtime", version = "=1.14.23" } +solana-sdk = { path = "../sdk", version = "=1.14.23" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.23" } +solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.23" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.23" } +solana-version = { path = "../version", version = "=1.14.23" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.23" } tokio = { version = "1", features = ["full"] } [target.'cfg(not(target_env = "msvc"))'.dependencies] diff --git a/ledger/Cargo.toml b/ledger/Cargo.toml index 19a036428b066d..7d67c8b16755e7 100644 --- a/ledger/Cargo.toml +++ b/ledger/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-ledger" -version = "1.14.22" +version = "1.14.23" description = "Solana ledger" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -35,23 +35,23 @@ reed-solomon-erasure = { version = "6.0.0", features = ["simd-accel"] } serde = "1.0.138" serde_bytes = "0.11.6" sha2 = "0.10.2" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.22" } -solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.22" } -solana-entry = { path = "../entry", version = "=1.14.22" } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.22" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.22" } -solana-measure = { path = "../measure", version = "=1.14.22" } -solana-metrics = { path = "../metrics", version = "=1.14.22" } -solana-perf = { path = "../perf", version = "=1.14.22" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.22" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.22" } -solana-runtime = { path = "../runtime", version = "=1.14.22" } -solana-sdk = { path = "../sdk", version = "=1.14.22" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.22" } -solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.22" } -solana-storage-proto = { path = "../storage-proto", version = "=1.14.22" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.22" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.22" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.23" } +solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.23" } +solana-entry = { path = "../entry", version = "=1.14.23" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.23" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.23" } +solana-measure = { path = "../measure", version = "=1.14.23" } +solana-metrics = { path = "../metrics", version = "=1.14.23" } +solana-perf = { path = "../perf", version = "=1.14.23" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.23" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.23" } +solana-runtime = { path = "../runtime", version = "=1.14.23" } +solana-sdk = { path = "../sdk", version = "=1.14.23" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.23" } +solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.23" } +solana-storage-proto = { path = "../storage-proto", version = "=1.14.23" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.23" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.23" } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } spl-token-2022 = { version = "=0.6.1", features = ["no-entrypoint"] } static_assertions = "1.1.0" @@ -71,8 +71,8 @@ features = ["lz4"] [dev-dependencies] bs58 = "0.4.0" matches = "0.1.9" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.22" } -solana-logger = { path = "../logger", version = "=1.14.22" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.23" } +solana-logger = { path = "../logger", version = "=1.14.23" } test-case = "2.1.0" [build-dependencies] diff --git a/local-cluster/Cargo.toml b/local-cluster/Cargo.toml index db64f6c57ac559..63c7f8abcbbb9a 100644 --- a/local-cluster/Cargo.toml +++ b/local-cluster/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-local-cluster" description = "Blockchain, Rebuilt for Scale" -version = "1.14.22" +version = "1.14.23" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -16,25 +16,25 @@ itertools = "0.10.3" log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" -solana-client = { path = "../client", version = "=1.14.22" } -solana-config-program = { path = "../programs/config", version = "=1.14.22" } -solana-core = { path = "../core", version = "=1.14.22" } -solana-entry = { path = "../entry", version = "=1.14.22" } -solana-gossip = { path = "../gossip", version = "=1.14.22" } -solana-ledger = { path = "../ledger", version = "=1.14.22" } -solana-runtime = { path = "../runtime", version = "=1.14.22" } -solana-sdk = { path = "../sdk", version = "=1.14.22" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.22" } -solana-streamer = { path = "../streamer", version = "=1.14.22" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.22" } +solana-client = { path = "../client", version = "=1.14.23" } +solana-config-program = { path = "../programs/config", version = "=1.14.23" } +solana-core = { path = "../core", version = "=1.14.23" } +solana-entry = { path = "../entry", version = "=1.14.23" } +solana-gossip = { path = "../gossip", version = "=1.14.23" } +solana-ledger = { path = "../ledger", version = "=1.14.23" } +solana-runtime = { path = "../runtime", version = "=1.14.23" } +solana-sdk = { path = "../sdk", version = "=1.14.23" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.23" } +solana-streamer = { path = "../streamer", version = "=1.14.23" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.23" } tempfile = "3.4.0" [dev-dependencies] assert_matches = "1.5.0" gag = "1.0.0" serial_test = "0.8.0" -solana-download-utils = { path = "../download-utils", version = "=1.14.22" } -solana-logger = { path = "../logger", version = "=1.14.22" } +solana-download-utils = { path = "../download-utils", version = "=1.14.23" } +solana-logger = { path = "../logger", version = "=1.14.23" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/log-analyzer/Cargo.toml b/log-analyzer/Cargo.toml index 5aff3c0399668f..334942ceda3ebb 100644 --- a/log-analyzer/Cargo.toml +++ b/log-analyzer/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-log-analyzer" description = "The solana cluster network analysis tool" -version = "1.14.22" +version = "1.14.23" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,8 +14,8 @@ byte-unit = "4.0.14" clap = { version = "3.1.5", features = ["cargo"] } serde = "1.0.138" serde_json = "1.0.81" -solana-logger = { path = "../logger", version = "=1.14.22" } -solana-version = { path = "../version", version = "=1.14.22" } +solana-logger = { path = "../logger", version = "=1.14.23" } +solana-version = { path = "../version", version = "=1.14.23" } [[bin]] name = "solana-log-analyzer" diff --git a/logger/Cargo.toml b/logger/Cargo.toml index c280888d032189..0849923da3a9d3 100644 --- a/logger/Cargo.toml +++ b/logger/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-logger" -version = "1.14.22" +version = "1.14.23" description = "Solana Logger" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/measure/Cargo.toml b/measure/Cargo.toml index 9d451cb45cad2f..d577c7982e5d69 100644 --- a/measure/Cargo.toml +++ b/measure/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "solana-measure" description = "Blockchain, Rebuilt for Scale" -version = "1.14.22" +version = "1.14.23" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-measure" readme = "../README.md" @@ -12,7 +12,7 @@ edition = "2021" [dependencies] log = "0.4.17" -solana-sdk = { path = "../sdk", version = "=1.14.22" } +solana-sdk = { path = "../sdk", version = "=1.14.23" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/merkle-root-bench/Cargo.toml b/merkle-root-bench/Cargo.toml index 4edfdadf2e6d98..f740cd9cc8e10c 100644 --- a/merkle-root-bench/Cargo.toml +++ b/merkle-root-bench/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-merkle-root-bench" -version = "1.14.22" +version = "1.14.23" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -11,11 +11,11 @@ publish = false [dependencies] clap = "2.33.1" log = "0.4.17" -solana-logger = { path = "../logger", version = "=1.14.22" } -solana-measure = { path = "../measure", version = "=1.14.22" } -solana-runtime = { path = "../runtime", version = "=1.14.22" } -solana-sdk = { path = "../sdk", version = "=1.14.22" } -solana-version = { path = "../version", version = "=1.14.22" } +solana-logger = { path = "../logger", version = "=1.14.23" } +solana-measure = { path = "../measure", version = "=1.14.23" } +solana-runtime = { path = "../runtime", version = "=1.14.23" } +solana-sdk = { path = "../sdk", version = "=1.14.23" } +solana-version = { path = "../version", version = "=1.14.23" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/merkle-tree/Cargo.toml b/merkle-tree/Cargo.toml index 3e295e28b57549..5fcd871b215b38 100644 --- a/merkle-tree/Cargo.toml +++ b/merkle-tree/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-merkle-tree" -version = "1.14.22" +version = "1.14.23" description = "Solana Merkle Tree" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -11,7 +11,7 @@ edition = "2021" [dependencies] fast-math = "0.1" -solana-program = { path = "../sdk/program", version = "=1.14.22" } +solana-program = { path = "../sdk/program", version = "=1.14.23" } # This can go once the BPF toolchain target Rust 1.42.0+ [target.bpfel-unknown-unknown.dependencies] diff --git a/metrics/Cargo.toml b/metrics/Cargo.toml index 2cb9b3cbf0c1b0..6a35f983dbbf33 100644 --- a/metrics/Cargo.toml +++ b/metrics/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-metrics" -version = "1.14.22" +version = "1.14.23" description = "Solana Metrics" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -15,7 +15,7 @@ gethostname = "0.2.3" lazy_static = "1.4.0" log = "0.4.17" reqwest = { version = "0.11.11", default-features = false, features = ["blocking", "brotli", "deflate", "gzip", "rustls-tls", "json"] } -solana-sdk = { path = "../sdk", version = "=1.14.22" } +solana-sdk = { path = "../sdk", version = "=1.14.23" } [dev-dependencies] env_logger = "0.9.0" diff --git a/net-shaper/Cargo.toml b/net-shaper/Cargo.toml index cba6c3027a24e7..a21aa1928feef1 100644 --- a/net-shaper/Cargo.toml +++ b/net-shaper/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-net-shaper" description = "The solana cluster network shaping tool" -version = "1.14.22" +version = "1.14.23" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,7 +14,7 @@ clap = { version = "3.1.5", features = ["cargo"] } rand = "0.7.0" serde = { version = "1.0.138", features = ["derive"] } serde_json = "1.0.81" -solana-logger = { path = "../logger", version = "=1.14.22" } +solana-logger = { path = "../logger", version = "=1.14.23" } [[bin]] name = "solana-net-shaper" diff --git a/net-utils/Cargo.toml b/net-utils/Cargo.toml index 08cb1e1c4550dd..c245c2c8885779 100644 --- a/net-utils/Cargo.toml +++ b/net-utils/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-net-utils" -version = "1.14.22" +version = "1.14.23" description = "Solana Network Utilities" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -19,9 +19,9 @@ rand = "0.7.0" serde = "1.0.138" serde_derive = "1.0.103" socket2 = "0.4.4" -solana-logger = { path = "../logger", version = "=1.14.22" } -solana-sdk = { path = "../sdk", version = "=1.14.22" } -solana-version = { path = "../version", version = "=1.14.22" } +solana-logger = { path = "../logger", version = "=1.14.23" } +solana-sdk = { path = "../sdk", version = "=1.14.23" } +solana-version = { path = "../version", version = "=1.14.23" } tokio = { version = "1", features = ["full"] } url = "2.2.2" diff --git a/notifier/Cargo.toml b/notifier/Cargo.toml index acbc388eda3666..9d01c8fcf83e7e 100644 --- a/notifier/Cargo.toml +++ b/notifier/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-notifier" -version = "1.14.22" +version = "1.14.23" description = "Solana Notifier" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/perf/Cargo.toml b/perf/Cargo.toml index bc093f6336c7c2..84cd68b757be7e 100644 --- a/perf/Cargo.toml +++ b/perf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-perf" -version = "1.14.22" +version = "1.14.23" description = "Solana Performance APIs" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -22,10 +22,10 @@ log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" serde = "1.0.138" -solana-metrics = { path = "../metrics", version = "=1.14.22" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.22" } -solana-sdk = { path = "../sdk", version = "=1.14.22" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.22" } +solana-metrics = { path = "../metrics", version = "=1.14.23" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.23" } +solana-sdk = { path = "../sdk", version = "=1.14.23" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.23" } [target."cfg(target_os = \"linux\")".dependencies] caps = "0.5.3" @@ -38,7 +38,7 @@ name = "solana_perf" [dev-dependencies] matches = "0.1.9" rand_chacha = "0.2.2" -solana-logger = { path = "../logger", version = "=1.14.22" } +solana-logger = { path = "../logger", version = "=1.14.23" } test-case = "2.1.0" [[bench]] diff --git a/poh-bench/Cargo.toml b/poh-bench/Cargo.toml index 552e1f81c79383..46bf35f3b7a61a 100644 --- a/poh-bench/Cargo.toml +++ b/poh-bench/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-poh-bench" -version = "1.14.22" +version = "1.14.23" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,12 +14,12 @@ clap = { version = "3.1.5", features = ["cargo"] } log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" -solana-entry = { path = "../entry", version = "=1.14.22" } -solana-logger = { path = "../logger", version = "=1.14.22" } -solana-measure = { path = "../measure", version = "=1.14.22" } -solana-perf = { path = "../perf", version = "=1.14.22" } -solana-sdk = { path = "../sdk", version = "=1.14.22" } -solana-version = { path = "../version", version = "=1.14.22" } +solana-entry = { path = "../entry", version = "=1.14.23" } +solana-logger = { path = "../logger", version = "=1.14.23" } +solana-measure = { path = "../measure", version = "=1.14.23" } +solana-perf = { path = "../perf", version = "=1.14.23" } +solana-sdk = { path = "../sdk", version = "=1.14.23" } +solana-version = { path = "../version", version = "=1.14.23" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/poh/Cargo.toml b/poh/Cargo.toml index 031c73f3a531e3..21c53c3f8976fb 100644 --- a/poh/Cargo.toml +++ b/poh/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-poh" -version = "1.14.22" +version = "1.14.23" description = "Solana PoH" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,21 +13,21 @@ edition = "2021" core_affinity = "0.5.10" crossbeam-channel = "0.5" log = "0.4.17" -solana-entry = { path = "../entry", version = "=1.14.22" } -solana-ledger = { path = "../ledger", version = "=1.14.22" } -solana-measure = { path = "../measure", version = "=1.14.22" } -solana-metrics = { path = "../metrics", version = "=1.14.22" } -solana-runtime = { path = "../runtime", version = "=1.14.22" } -solana-sdk = { path = "../sdk", version = "=1.14.22" } -solana-sys-tuner = { path = "../sys-tuner", version = "=1.14.22" } +solana-entry = { path = "../entry", version = "=1.14.23" } +solana-ledger = { path = "../ledger", version = "=1.14.23" } +solana-measure = { path = "../measure", version = "=1.14.23" } +solana-metrics = { path = "../metrics", version = "=1.14.23" } +solana-runtime = { path = "../runtime", version = "=1.14.23" } +solana-sdk = { path = "../sdk", version = "=1.14.23" } +solana-sys-tuner = { path = "../sys-tuner", version = "=1.14.23" } thiserror = "1.0" [dev-dependencies] bincode = "1.3.3" matches = "0.1.9" rand = "0.7.0" -solana-logger = { path = "../logger", version = "=1.14.22" } -solana-perf = { path = "../perf", version = "=1.14.22" } +solana-logger = { path = "../logger", version = "=1.14.23" } +solana-perf = { path = "../perf", version = "=1.14.23" } [lib] crate-type = ["lib"] diff --git a/program-runtime/Cargo.toml b/program-runtime/Cargo.toml index 1675270831a85f..c0a984ade9f873 100644 --- a/program-runtime/Cargo.toml +++ b/program-runtime/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-program-runtime" -version = "1.14.22" +version = "1.14.23" description = "Solana program runtime" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -21,16 +21,16 @@ num-derive = { version = "0.3" } num-traits = { version = "0.2" } rand = "0.7.0" serde = { version = "1.0.129", features = ["derive", "rc"] } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.22" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.22" } -solana-measure = { path = "../measure", version = "=1.14.22" } -solana-metrics = { path = "../metrics", version = "=1.14.22" } -solana-sdk = { path = "../sdk", version = "=1.14.22" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.23" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.23" } +solana-measure = { path = "../measure", version = "=1.14.23" } +solana-metrics = { path = "../metrics", version = "=1.14.23" } +solana-sdk = { path = "../sdk", version = "=1.14.23" } thiserror = "1.0" enum-iterator = "0.8.1" [dev-dependencies] -solana-logger = { path = "../logger", version = "=1.14.22" } +solana-logger = { path = "../logger", version = "=1.14.23" } [lib] crate-type = ["lib"] diff --git a/program-test/Cargo.toml b/program-test/Cargo.toml index a5575c4b121302..4990b42ed52a9d 100644 --- a/program-test/Cargo.toml +++ b/program-test/Cargo.toml @@ -5,7 +5,7 @@ edition = "2021" license = "Apache-2.0" name = "solana-program-test" repository = "https://github.com/solana-labs/solana" -version = "1.14.22" +version = "1.14.23" [dependencies] assert_matches = "1.5.0" @@ -15,16 +15,16 @@ bincode = "1.3.3" chrono-humanize = "0.2.1" log = "0.4.17" serde = "1.0.138" -solana-banks-client = { path = "../banks-client", version = "=1.14.22" } -solana-banks-server = { path = "../banks-server", version = "=1.14.22" } -solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.22" } -solana-logger = { path = "../logger", version = "=1.14.22" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.22" } -solana-runtime = { path = "../runtime", version = "=1.14.22" } -solana-sdk = { path = "../sdk", version = "=1.14.22" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.22" } +solana-banks-client = { path = "../banks-client", version = "=1.14.23" } +solana-banks-server = { path = "../banks-server", version = "=1.14.23" } +solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.23" } +solana-logger = { path = "../logger", version = "=1.14.23" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.23" } +solana-runtime = { path = "../runtime", version = "=1.14.23" } +solana-sdk = { path = "../sdk", version = "=1.14.23" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.23" } thiserror = "1.0" tokio = { version = "1", features = ["full"] } [dev-dependencies] -solana-stake-program = { path = "../programs/stake", version = "=1.14.22" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.23" } diff --git a/programs/address-lookup-table-tests/Cargo.toml b/programs/address-lookup-table-tests/Cargo.toml index 41094b94049d2d..1b214558c5afec 100644 --- a/programs/address-lookup-table-tests/Cargo.toml +++ b/programs/address-lookup-table-tests/Cargo.toml @@ -3,7 +3,7 @@ [package] name = "solana-address-lookup-table-program-tests" -version = "1.14.22" +version = "1.14.23" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" @@ -14,9 +14,9 @@ publish = false [dev-dependencies] assert_matches = "1.5.0" bincode = "1.3.3" -solana-address-lookup-table-program = { path = "../address-lookup-table", version = "=1.14.22" } -solana-program-test = { path = "../../program-test", version = "=1.14.22" } -solana-sdk = { path = "../../sdk", version = "=1.14.22" } +solana-address-lookup-table-program = { path = "../address-lookup-table", version = "=1.14.23" } +solana-program-test = { path = "../../program-test", version = "=1.14.23" } +solana-sdk = { path = "../../sdk", version = "=1.14.23" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/address-lookup-table/Cargo.toml b/programs/address-lookup-table/Cargo.toml index 84928f334d1222..80ed8cbbc812a8 100644 --- a/programs/address-lookup-table/Cargo.toml +++ b/programs/address-lookup-table/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-address-lookup-table-program" -version = "1.14.22" +version = "1.14.23" description = "Solana address lookup table program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -16,14 +16,14 @@ log = "0.4.17" num-derive = "0.3" num-traits = "0.2" serde = { version = "1.0.138", features = ["derive"] } -solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.22" } -solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.22" } -solana-program = { path = "../../sdk/program", version = "=1.14.22" } +solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.23" } +solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.23" } +solana-program = { path = "../../sdk/program", version = "=1.14.23" } thiserror = "1.0" [target.'cfg(not(target_os = "solana"))'.dependencies] -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.22" } -solana-sdk = { path = "../../sdk", version = "=1.14.22" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.23" } +solana-sdk = { path = "../../sdk", version = "=1.14.23" } [build-dependencies] rustc_version = "0.4" diff --git a/programs/bpf-loader-tests/Cargo.toml b/programs/bpf-loader-tests/Cargo.toml index 43608dd836968b..9e475cefa53a7b 100644 --- a/programs/bpf-loader-tests/Cargo.toml +++ b/programs/bpf-loader-tests/Cargo.toml @@ -3,7 +3,7 @@ [package] name = "solana-bpf-loader-program-tests" -version = "1.14.22" +version = "1.14.23" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" @@ -14,9 +14,9 @@ publish = false [dev-dependencies] assert_matches = "1.5.0" bincode = "1.3.3" -solana-bpf-loader-program = { path = "../bpf_loader", version = "=1.14.22" } -solana-program-test = { path = "../../program-test", version = "=1.14.22" } -solana-sdk = { path = "../../sdk", version = "=1.14.22" } +solana-bpf-loader-program = { path = "../bpf_loader", version = "=1.14.23" } +solana-program-test = { path = "../../program-test", version = "=1.14.23" } +solana-sdk = { path = "../../sdk", version = "=1.14.23" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/bpf/Cargo.lock b/programs/bpf/Cargo.lock index 1ca6713a9195aa..5559318c59aeec 100644 --- a/programs/bpf/Cargo.lock +++ b/programs/bpf/Cargo.lock @@ -4101,7 +4101,7 @@ dependencies = [ [[package]] name = "solana-account-decoder" -version = "1.14.22" +version = "1.14.23" dependencies = [ "Inflector", "base64 0.13.0", @@ -4114,7 +4114,7 @@ dependencies = [ "serde_json", "solana-address-lookup-table-program", "solana-config-program", - "solana-sdk 1.14.22", + "solana-sdk 1.14.23", "solana-vote-program", "spl-token", "spl-token-2022", @@ -4124,7 +4124,7 @@ dependencies = [ [[package]] name = "solana-address-lookup-table-program" -version = "1.14.22" +version = "1.14.23" dependencies = [ "bincode", "bytemuck", @@ -4133,23 +4133,23 @@ dependencies = [ "num-traits", "rustc_version", "serde", - "solana-frozen-abi 1.14.22", - "solana-frozen-abi-macro 1.14.22", - "solana-program 1.14.22", + "solana-frozen-abi 1.14.23", + "solana-frozen-abi-macro 1.14.23", + "solana-program 1.14.23", "solana-program-runtime", - "solana-sdk 1.14.22", + "solana-sdk 1.14.23", "thiserror", ] [[package]] name = "solana-banks-client" -version = "1.14.22" +version = "1.14.23" dependencies = [ "borsh", "futures 0.3.21", "solana-banks-interface", - "solana-program 1.14.22", - "solana-sdk 1.14.22", + "solana-program 1.14.23", + "solana-sdk 1.14.23", "tarpc", "thiserror", "tokio", @@ -4158,16 +4158,16 @@ dependencies = [ [[package]] name = "solana-banks-interface" -version = "1.14.22" +version = "1.14.23" dependencies = [ "serde", - "solana-sdk 1.14.22", + "solana-sdk 1.14.23", "tarpc", ] [[package]] name = "solana-banks-server" -version = "1.14.22" +version = "1.14.23" dependencies = [ "bincode", "crossbeam-channel", @@ -4175,7 +4175,7 @@ dependencies = [ "solana-banks-interface", "solana-client", "solana-runtime", - "solana-sdk 1.14.22", + "solana-sdk 1.14.23", "solana-send-transaction-service", "tarpc", "tokio", @@ -4185,7 +4185,7 @@ dependencies = [ [[package]] name = "solana-bloom" -version = "1.14.22" +version = "1.14.23" dependencies = [ "bv", "fnv", @@ -4195,14 +4195,14 @@ dependencies = [ "rustc_version", "serde", "serde_derive", - "solana-frozen-abi 1.14.22", - "solana-frozen-abi-macro 1.14.22", - "solana-sdk 1.14.22", + "solana-frozen-abi 1.14.23", + "solana-frozen-abi-macro 1.14.23", + "solana-sdk 1.14.23", ] [[package]] name = "solana-bpf-loader-program" -version = "1.14.22" +version = "1.14.23" dependencies = [ "bincode", "byteorder 1.4.3", @@ -4211,15 +4211,15 @@ dependencies = [ "solana-measure", "solana-metrics", "solana-program-runtime", - "solana-sdk 1.14.22", - "solana-zk-token-sdk 1.14.22", + "solana-sdk 1.14.23", + "solana-zk-token-sdk 1.14.23", "solana_rbpf", "thiserror", ] [[package]] name = "solana-bpf-programs" -version = "1.14.22" +version = "1.14.23" dependencies = [ "bincode", "byteorder 1.4.3", @@ -4235,11 +4235,11 @@ dependencies = [ "solana-bpf-rust-realloc-invoke", "solana-cli-output", "solana-ledger", - "solana-logger 1.14.22", + "solana-logger 1.14.23", "solana-measure", "solana-program-runtime", "solana-runtime", - "solana-sdk 1.14.22", + "solana-sdk 1.14.23", "solana-transaction-status", "solana_rbpf", "walkdir", @@ -4247,385 +4247,385 @@ dependencies = [ [[package]] name = "solana-bpf-rust-128bit" -version = "1.14.22" +version = "1.14.23" dependencies = [ "solana-bpf-rust-128bit-dep", - "solana-program 1.14.22", + "solana-program 1.14.23", ] [[package]] name = "solana-bpf-rust-128bit-dep" -version = "1.14.22" +version = "1.14.23" dependencies = [ - "solana-program 1.14.22", + "solana-program 1.14.23", ] [[package]] name = "solana-bpf-rust-alloc" -version = "1.14.22" +version = "1.14.23" dependencies = [ - "solana-program 1.14.22", + "solana-program 1.14.23", ] [[package]] name = "solana-bpf-rust-call-depth" -version = "1.14.22" +version = "1.14.23" dependencies = [ - "solana-program 1.14.22", + "solana-program 1.14.23", ] [[package]] name = "solana-bpf-rust-caller-access" -version = "1.14.22" +version = "1.14.23" dependencies = [ - "solana-program 1.14.22", + "solana-program 1.14.23", ] [[package]] name = "solana-bpf-rust-curve25519" -version = "1.14.22" +version = "1.14.23" dependencies = [ - "solana-program 1.14.22", - "solana-zk-token-sdk 1.14.22", + "solana-program 1.14.23", + "solana-zk-token-sdk 1.14.23", ] [[package]] name = "solana-bpf-rust-custom-heap" -version = "1.14.22" +version = "1.14.23" dependencies = [ - "solana-program 1.14.22", + "solana-program 1.14.23", ] [[package]] name = "solana-bpf-rust-dep-crate" -version = "1.14.22" +version = "1.14.23" dependencies = [ "byteorder 1.4.3", "solana-address-lookup-table-program", - "solana-program 1.14.22", + "solana-program 1.14.23", ] [[package]] name = "solana-bpf-rust-deprecated-loader" -version = "1.14.22" +version = "1.14.23" dependencies = [ - "solana-program 1.14.22", + "solana-program 1.14.23", ] [[package]] name = "solana-bpf-rust-dup-accounts" -version = "1.14.22" +version = "1.14.23" dependencies = [ - "solana-program 1.14.22", + "solana-program 1.14.23", ] [[package]] name = "solana-bpf-rust-error-handling" -version = "1.14.22" +version = "1.14.23" dependencies = [ "num-derive", "num-traits", - "solana-program 1.14.22", + "solana-program 1.14.23", "thiserror", ] [[package]] name = "solana-bpf-rust-external-spend" -version = "1.14.22" +version = "1.14.23" dependencies = [ - "solana-program 1.14.22", + "solana-program 1.14.23", ] [[package]] name = "solana-bpf-rust-finalize" -version = "1.14.22" +version = "1.14.23" dependencies = [ - "solana-program 1.14.22", + "solana-program 1.14.23", ] [[package]] name = "solana-bpf-rust-get-minimum-delegation" -version = "1.14.22" +version = "1.14.23" dependencies = [ - "solana-program 1.14.22", + "solana-program 1.14.23", ] [[package]] name = "solana-bpf-rust-inner_instruction_alignment_check" -version = "1.14.22" +version = "1.14.23" dependencies = [ - "solana-program 1.14.22", + "solana-program 1.14.23", ] [[package]] name = "solana-bpf-rust-instruction-introspection" -version = "1.14.22" +version = "1.14.23" dependencies = [ - "solana-program 1.14.22", + "solana-program 1.14.23", ] [[package]] name = "solana-bpf-rust-invoke" -version = "1.14.22" +version = "1.14.23" dependencies = [ "solana-bpf-rust-invoked", - "solana-program 1.14.22", + "solana-program 1.14.23", ] [[package]] name = "solana-bpf-rust-invoke-and-error" -version = "1.14.22" +version = "1.14.23" dependencies = [ - "solana-program 1.14.22", + "solana-program 1.14.23", ] [[package]] name = "solana-bpf-rust-invoke-and-ok" -version = "1.14.22" +version = "1.14.23" dependencies = [ - "solana-program 1.14.22", + "solana-program 1.14.23", ] [[package]] name = "solana-bpf-rust-invoke-and-return" -version = "1.14.22" +version = "1.14.23" dependencies = [ - "solana-program 1.14.22", + "solana-program 1.14.23", ] [[package]] name = "solana-bpf-rust-invoked" -version = "1.14.22" +version = "1.14.23" dependencies = [ - "solana-program 1.14.22", + "solana-program 1.14.23", ] [[package]] name = "solana-bpf-rust-iter" -version = "1.14.22" +version = "1.14.23" dependencies = [ - "solana-program 1.14.22", + "solana-program 1.14.23", ] [[package]] name = "solana-bpf-rust-log-data" -version = "1.14.22" +version = "1.14.23" dependencies = [ - "solana-program 1.14.22", + "solana-program 1.14.23", ] [[package]] name = "solana-bpf-rust-many-args" -version = "1.14.22" +version = "1.14.23" dependencies = [ "solana-bpf-rust-many-args-dep", - "solana-program 1.14.22", + "solana-program 1.14.23", ] [[package]] name = "solana-bpf-rust-many-args-dep" -version = "1.14.22" +version = "1.14.23" dependencies = [ - "solana-program 1.14.22", + "solana-program 1.14.23", ] [[package]] name = "solana-bpf-rust-mem" -version = "1.14.22" +version = "1.14.23" dependencies = [ - "solana-program 1.14.22", + "solana-program 1.14.23", "solana-program-runtime", "solana-program-test", - "solana-sdk 1.14.22", + "solana-sdk 1.14.23", ] [[package]] name = "solana-bpf-rust-membuiltins" -version = "1.14.22" +version = "1.14.23" dependencies = [ "solana-bpf-rust-mem", - "solana-program 1.14.22", + "solana-program 1.14.23", ] [[package]] name = "solana-bpf-rust-noop" -version = "1.14.22" +version = "1.14.23" dependencies = [ - "solana-program 1.14.22", + "solana-program 1.14.23", ] [[package]] name = "solana-bpf-rust-panic" -version = "1.14.22" +version = "1.14.23" dependencies = [ - "solana-program 1.14.22", + "solana-program 1.14.23", ] [[package]] name = "solana-bpf-rust-param-passing" -version = "1.14.22" +version = "1.14.23" dependencies = [ "solana-bpf-rust-param-passing-dep", - "solana-program 1.14.22", + "solana-program 1.14.23", ] [[package]] name = "solana-bpf-rust-param-passing-dep" -version = "1.14.22" +version = "1.14.23" dependencies = [ - "solana-program 1.14.22", + "solana-program 1.14.23", ] [[package]] name = "solana-bpf-rust-rand" -version = "1.14.22" +version = "1.14.23" dependencies = [ "getrandom 0.1.14", "rand 0.7.3", - "solana-program 1.14.22", + "solana-program 1.14.23", ] [[package]] name = "solana-bpf-rust-realloc" -version = "1.14.22" +version = "1.14.23" dependencies = [ - "solana-program 1.14.22", + "solana-program 1.14.23", ] [[package]] name = "solana-bpf-rust-realloc-invoke" -version = "1.14.22" +version = "1.14.23" dependencies = [ "solana-bpf-rust-realloc", - "solana-program 1.14.22", + "solana-program 1.14.23", ] [[package]] name = "solana-bpf-rust-ro-account_modify" -version = "1.14.22" +version = "1.14.23" dependencies = [ - "solana-program 1.14.22", + "solana-program 1.14.23", ] [[package]] name = "solana-bpf-rust-ro-modify" -version = "1.14.22" +version = "1.14.23" dependencies = [ - "solana-program 1.14.22", + "solana-program 1.14.23", ] [[package]] name = "solana-bpf-rust-sanity" -version = "1.14.22" +version = "1.14.23" dependencies = [ - "solana-program 1.14.22", + "solana-program 1.14.23", "solana-program-runtime", "solana-program-test", - "solana-sdk 1.14.22", + "solana-sdk 1.14.23", ] [[package]] name = "solana-bpf-rust-secp256k1-recover" -version = "1.14.22" +version = "1.14.23" dependencies = [ "libsecp256k1 0.7.0", - "solana-program 1.14.22", + "solana-program 1.14.23", ] [[package]] name = "solana-bpf-rust-sha" -version = "1.14.22" +version = "1.14.23" dependencies = [ "blake3", - "solana-program 1.14.22", + "solana-program 1.14.23", ] [[package]] name = "solana-bpf-rust-sibling-instructions" -version = "1.14.22" +version = "1.14.23" dependencies = [ - "solana-program 1.14.22", + "solana-program 1.14.23", ] [[package]] name = "solana-bpf-rust-sibling_inner-instructions" -version = "1.14.22" +version = "1.14.23" dependencies = [ - "solana-program 1.14.22", + "solana-program 1.14.23", ] [[package]] name = "solana-bpf-rust-simulation" -version = "1.14.22" +version = "1.14.23" dependencies = [ - "solana-logger 1.14.22", - "solana-program 1.14.22", + "solana-logger 1.14.23", + "solana-program 1.14.23", "solana-program-test", - "solana-sdk 1.14.22", + "solana-sdk 1.14.23", "solana-validator", ] [[package]] name = "solana-bpf-rust-spoof1" -version = "1.14.22" +version = "1.14.23" dependencies = [ - "solana-program 1.14.22", + "solana-program 1.14.23", ] [[package]] name = "solana-bpf-rust-spoof1-system" -version = "1.14.22" +version = "1.14.23" dependencies = [ - "solana-program 1.14.22", + "solana-program 1.14.23", ] [[package]] name = "solana-bpf-rust-sysvar" -version = "1.14.22" +version = "1.14.23" dependencies = [ - "solana-program 1.14.22", + "solana-program 1.14.23", "solana-program-runtime", "solana-program-test", - "solana-sdk 1.14.22", + "solana-sdk 1.14.23", ] [[package]] name = "solana-bpf-rust-upgradeable" -version = "1.14.22" +version = "1.14.23" dependencies = [ - "solana-program 1.14.22", + "solana-program 1.14.23", ] [[package]] name = "solana-bpf-rust-upgraded" -version = "1.14.22" +version = "1.14.23" dependencies = [ - "solana-program 1.14.22", + "solana-program 1.14.23", ] [[package]] name = "solana-bucket-map" -version = "1.14.22" +version = "1.14.23" dependencies = [ "log", "memmap2", "modular-bitfield", "rand 0.7.3", "solana-measure", - "solana-sdk 1.14.22", + "solana-sdk 1.14.23", "tempfile", ] [[package]] name = "solana-clap-utils" -version = "1.14.22" +version = "1.14.23" dependencies = [ "chrono", "clap 2.33.3", "rpassword", "solana-perf", "solana-remote-wallet", - "solana-sdk 1.14.22", + "solana-sdk 1.14.23", "thiserror", "tiny-bip39", "uriparse", @@ -4634,7 +4634,7 @@ dependencies = [ [[package]] name = "solana-cli-config" -version = "1.14.22" +version = "1.14.23" dependencies = [ "dirs-next", "lazy_static", @@ -4642,13 +4642,13 @@ dependencies = [ "serde_derive", "serde_yaml", "solana-clap-utils", - "solana-sdk 1.14.22", + "solana-sdk 1.14.23", "url 2.2.2", ] [[package]] name = "solana-cli-output" -version = "1.14.22" +version = "1.14.23" dependencies = [ "Inflector", "base64 0.13.0", @@ -4665,7 +4665,7 @@ dependencies = [ "solana-clap-utils", "solana-cli-config", "solana-client", - "solana-sdk 1.14.22", + "solana-sdk 1.14.23", "solana-transaction-status", "solana-vote-program", "spl-memo", @@ -4673,7 +4673,7 @@ dependencies = [ [[package]] name = "solana-client" -version = "1.14.22" +version = "1.14.23" dependencies = [ "async-mutex", "async-trait", @@ -4709,7 +4709,7 @@ dependencies = [ "solana-measure", "solana-metrics", "solana-net-utils", - "solana-sdk 1.14.22", + "solana-sdk 1.14.23", "solana-streamer", "solana-transaction-status", "solana-version", @@ -4725,27 +4725,27 @@ dependencies = [ [[package]] name = "solana-compute-budget-program" -version = "1.14.22" +version = "1.14.23" dependencies = [ "solana-program-runtime", - "solana-sdk 1.14.22", + "solana-sdk 1.14.23", ] [[package]] name = "solana-config-program" -version = "1.14.22" +version = "1.14.23" dependencies = [ "bincode", "chrono", "serde", "serde_derive", "solana-program-runtime", - "solana-sdk 1.14.22", + "solana-sdk 1.14.23", ] [[package]] name = "solana-core" -version = "1.14.22" +version = "1.14.23" dependencies = [ "ahash", "base64 0.13.0", @@ -4774,8 +4774,8 @@ dependencies = [ "solana-bloom", "solana-client", "solana-entry", - "solana-frozen-abi 1.14.22", - "solana-frozen-abi-macro 1.14.22", + "solana-frozen-abi 1.14.23", + "solana-frozen-abi-macro 1.14.23", "solana-geyser-plugin-manager", "solana-gossip", "solana-ledger", @@ -4788,7 +4788,7 @@ dependencies = [ "solana-rayon-threadlimit", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.22", + "solana-sdk 1.14.23", "solana-send-transaction-service", "solana-streamer", "solana-transaction-status", @@ -4804,19 +4804,19 @@ dependencies = [ [[package]] name = "solana-download-utils" -version = "1.14.22" +version = "1.14.23" dependencies = [ "console", "indicatif", "log", "reqwest", "solana-runtime", - "solana-sdk 1.14.22", + "solana-sdk 1.14.23", ] [[package]] name = "solana-entry" -version = "1.14.22" +version = "1.14.23" dependencies = [ "bincode", "crossbeam-channel", @@ -4832,12 +4832,12 @@ dependencies = [ "solana-metrics", "solana-perf", "solana-rayon-threadlimit", - "solana-sdk 1.14.22", + "solana-sdk 1.14.23", ] [[package]] name = "solana-faucet" -version = "1.14.22" +version = "1.14.23" dependencies = [ "bincode", "byteorder 1.4.3", @@ -4848,9 +4848,9 @@ dependencies = [ "serde_derive", "solana-clap-utils", "solana-cli-config", - "solana-logger 1.14.22", + "solana-logger 1.14.23", "solana-metrics", - "solana-sdk 1.14.22", + "solana-sdk 1.14.23", "solana-version", "spl-memo", "thiserror", @@ -4893,7 +4893,7 @@ dependencies = [ [[package]] name = "solana-frozen-abi" -version = "1.14.22" +version = "1.14.23" dependencies = [ "ahash", "blake3", @@ -4918,7 +4918,7 @@ dependencies = [ "serde_derive", "serde_json", "sha2 0.10.2", - "solana-frozen-abi-macro 1.14.22", + "solana-frozen-abi-macro 1.14.23", "subtle", "thiserror", ] @@ -4937,7 +4937,7 @@ dependencies = [ [[package]] name = "solana-frozen-abi-macro" -version = "1.14.22" +version = "1.14.23" dependencies = [ "proc-macro2 1.0.51", "quote 1.0.18", @@ -4947,26 +4947,26 @@ dependencies = [ [[package]] name = "solana-genesis-utils" -version = "1.14.22" +version = "1.14.23" dependencies = [ "solana-download-utils", "solana-runtime", - "solana-sdk 1.14.22", + "solana-sdk 1.14.23", ] [[package]] name = "solana-geyser-plugin-interface" -version = "1.14.22" +version = "1.14.23" dependencies = [ "log", - "solana-sdk 1.14.22", + "solana-sdk 1.14.23", "solana-transaction-status", "thiserror", ] [[package]] name = "solana-geyser-plugin-manager" -version = "1.14.22" +version = "1.14.23" dependencies = [ "bs58", "crossbeam-channel", @@ -4979,14 +4979,14 @@ dependencies = [ "solana-metrics", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.22", + "solana-sdk 1.14.23", "solana-transaction-status", "thiserror", ] [[package]] name = "solana-gossip" -version = "1.14.22" +version = "1.14.23" dependencies = [ "bincode", "bv", @@ -5010,17 +5010,17 @@ dependencies = [ "solana-clap-utils", "solana-client", "solana-entry", - "solana-frozen-abi 1.14.22", - "solana-frozen-abi-macro 1.14.22", + "solana-frozen-abi 1.14.23", + "solana-frozen-abi-macro 1.14.23", "solana-ledger", - "solana-logger 1.14.22", + "solana-logger 1.14.23", "solana-measure", "solana-metrics", "solana-net-utils", "solana-perf", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.14.22", + "solana-sdk 1.14.23", "solana-streamer", "solana-version", "solana-vote-program", @@ -5029,7 +5029,7 @@ dependencies = [ [[package]] name = "solana-ledger" -version = "1.14.22" +version = "1.14.23" dependencies = [ "assert_matches", "bincode", @@ -5061,15 +5061,15 @@ dependencies = [ "solana-account-decoder", "solana-bpf-loader-program", "solana-entry", - "solana-frozen-abi 1.14.22", - "solana-frozen-abi-macro 1.14.22", + "solana-frozen-abi 1.14.23", + "solana-frozen-abi-macro 1.14.23", "solana-measure", "solana-metrics", "solana-perf", "solana-program-runtime", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.14.22", + "solana-sdk 1.14.23", "solana-stake-program", "solana-storage-bigtable", "solana-storage-proto", @@ -5098,7 +5098,7 @@ dependencies = [ [[package]] name = "solana-logger" -version = "1.14.22" +version = "1.14.23" dependencies = [ "env_logger", "lazy_static", @@ -5107,36 +5107,36 @@ dependencies = [ [[package]] name = "solana-measure" -version = "1.14.22" +version = "1.14.23" dependencies = [ "log", - "solana-sdk 1.14.22", + "solana-sdk 1.14.23", ] [[package]] name = "solana-merkle-tree" -version = "1.14.22" +version = "1.14.23" dependencies = [ "fast-math", "matches", - "solana-program 1.14.22", + "solana-program 1.14.23", ] [[package]] name = "solana-metrics" -version = "1.14.22" +version = "1.14.23" dependencies = [ "crossbeam-channel", "gethostname", "lazy_static", "log", "reqwest", - "solana-sdk 1.14.22", + "solana-sdk 1.14.23", ] [[package]] name = "solana-net-utils" -version = "1.14.22" +version = "1.14.23" dependencies = [ "bincode", "clap 3.1.6", @@ -5147,8 +5147,8 @@ dependencies = [ "serde", "serde_derive", "socket2", - "solana-logger 1.14.22", - "solana-sdk 1.14.22", + "solana-logger 1.14.23", + "solana-sdk 1.14.23", "solana-version", "tokio", "url 2.2.2", @@ -5156,7 +5156,7 @@ dependencies = [ [[package]] name = "solana-perf" -version = "1.14.22" +version = "1.14.23" dependencies = [ "ahash", "bincode", @@ -5175,13 +5175,13 @@ dependencies = [ "serde", "solana-metrics", "solana-rayon-threadlimit", - "solana-sdk 1.14.22", + "solana-sdk 1.14.23", "solana-vote-program", ] [[package]] name = "solana-poh" -version = "1.14.22" +version = "1.14.23" dependencies = [ "core_affinity", "crossbeam-channel", @@ -5191,7 +5191,7 @@ dependencies = [ "solana-measure", "solana-metrics", "solana-runtime", - "solana-sdk 1.14.22", + "solana-sdk 1.14.23", "solana-sys-tuner", "thiserror", ] @@ -5247,7 +5247,7 @@ dependencies = [ [[package]] name = "solana-program" -version = "1.14.22" +version = "1.14.23" dependencies = [ "base64 0.13.0", "bincode", @@ -5283,9 +5283,9 @@ dependencies = [ "serde_json", "sha2 0.10.2", "sha3 0.10.1", - "solana-frozen-abi 1.14.22", - "solana-frozen-abi-macro 1.14.22", - "solana-sdk-macro 1.14.22", + "solana-frozen-abi 1.14.23", + "solana-frozen-abi-macro 1.14.23", + "solana-sdk-macro 1.14.23", "thiserror", "tiny-bip39", "wasm-bindgen", @@ -5294,7 +5294,7 @@ dependencies = [ [[package]] name = "solana-program-runtime" -version = "1.14.22" +version = "1.14.23" dependencies = [ "base64 0.13.0", "bincode", @@ -5309,17 +5309,17 @@ dependencies = [ "rand 0.7.3", "rustc_version", "serde", - "solana-frozen-abi 1.14.22", - "solana-frozen-abi-macro 1.14.22", + "solana-frozen-abi 1.14.23", + "solana-frozen-abi-macro 1.14.23", "solana-measure", "solana-metrics", - "solana-sdk 1.14.22", + "solana-sdk 1.14.23", "thiserror", ] [[package]] name = "solana-program-test" -version = "1.14.22" +version = "1.14.23" dependencies = [ "assert_matches", "async-trait", @@ -5331,10 +5331,10 @@ dependencies = [ "solana-banks-client", "solana-banks-server", "solana-bpf-loader-program", - "solana-logger 1.14.22", + "solana-logger 1.14.23", "solana-program-runtime", "solana-runtime", - "solana-sdk 1.14.22", + "solana-sdk 1.14.23", "solana-vote-program", "thiserror", "tokio", @@ -5342,7 +5342,7 @@ dependencies = [ [[package]] name = "solana-rayon-threadlimit" -version = "1.14.22" +version = "1.14.23" dependencies = [ "lazy_static", "num_cpus", @@ -5350,7 +5350,7 @@ dependencies = [ [[package]] name = "solana-remote-wallet" -version = "1.14.22" +version = "1.14.23" dependencies = [ "console", "dialoguer", @@ -5360,14 +5360,14 @@ dependencies = [ "parking_lot 0.12.1", "qstring", "semver", - "solana-sdk 1.14.22", + "solana-sdk 1.14.23", "thiserror", "uriparse", ] [[package]] name = "solana-rpc" -version = "1.14.22" +version = "1.14.23" dependencies = [ "base64 0.13.0", "bincode", @@ -5400,7 +5400,7 @@ dependencies = [ "solana-poh", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.14.22", + "solana-sdk 1.14.23", "solana-send-transaction-service", "solana-stake-program", "solana-storage-bigtable", @@ -5418,7 +5418,7 @@ dependencies = [ [[package]] name = "solana-runtime" -version = "1.14.22" +version = "1.14.23" dependencies = [ "arrayref", "bincode", @@ -5455,17 +5455,17 @@ dependencies = [ "solana-bucket-map", "solana-compute-budget-program", "solana-config-program", - "solana-frozen-abi 1.14.22", - "solana-frozen-abi-macro 1.14.22", + "solana-frozen-abi 1.14.23", + "solana-frozen-abi-macro 1.14.23", "solana-measure", "solana-metrics", "solana-program-runtime", "solana-rayon-threadlimit", - "solana-sdk 1.14.22", + "solana-sdk 1.14.23", "solana-stake-program", "solana-vote-program", "solana-zk-token-proof-program", - "solana-zk-token-sdk 1.14.22", + "solana-zk-token-sdk 1.14.23", "strum", "strum_macros", "symlink", @@ -5528,7 +5528,7 @@ dependencies = [ [[package]] name = "solana-sdk" -version = "1.14.22" +version = "1.14.23" dependencies = [ "assert_matches", "base64 0.13.0", @@ -5565,11 +5565,11 @@ dependencies = [ "serde_json", "sha2 0.10.2", "sha3 0.10.1", - "solana-frozen-abi 1.14.22", - "solana-frozen-abi-macro 1.14.22", - "solana-logger 1.14.22", - "solana-program 1.14.22", - "solana-sdk-macro 1.14.22", + "solana-frozen-abi 1.14.23", + "solana-frozen-abi-macro 1.14.23", + "solana-logger 1.14.23", + "solana-program 1.14.23", + "solana-sdk-macro 1.14.23", "thiserror", "uriparse", "wasm-bindgen", @@ -5590,7 +5590,7 @@ dependencies = [ [[package]] name = "solana-sdk-macro" -version = "1.14.22" +version = "1.14.23" dependencies = [ "bs58", "proc-macro2 1.0.51", @@ -5601,7 +5601,7 @@ dependencies = [ [[package]] name = "solana-send-transaction-service" -version = "1.14.22" +version = "1.14.23" dependencies = [ "crossbeam-channel", "log", @@ -5609,12 +5609,12 @@ dependencies = [ "solana-measure", "solana-metrics", "solana-runtime", - "solana-sdk 1.14.22", + "solana-sdk 1.14.23", ] [[package]] name = "solana-stake-program" -version = "1.14.22" +version = "1.14.23" dependencies = [ "bincode", "log", @@ -5624,18 +5624,18 @@ dependencies = [ "serde", "serde_derive", "solana-config-program", - "solana-frozen-abi 1.14.22", - "solana-frozen-abi-macro 1.14.22", + "solana-frozen-abi 1.14.23", + "solana-frozen-abi-macro 1.14.23", "solana-metrics", "solana-program-runtime", - "solana-sdk 1.14.22", + "solana-sdk 1.14.23", "solana-vote-program", "thiserror", ] [[package]] name = "solana-storage-bigtable" -version = "1.14.22" +version = "1.14.23" dependencies = [ "backoff", "bincode", @@ -5656,7 +5656,7 @@ dependencies = [ "serde_derive", "smpl_jwt", "solana-metrics", - "solana-sdk 1.14.22", + "solana-sdk 1.14.23", "solana-storage-proto", "solana-transaction-status", "thiserror", @@ -5667,7 +5667,7 @@ dependencies = [ [[package]] name = "solana-storage-proto" -version = "1.14.22" +version = "1.14.23" dependencies = [ "bincode", "bs58", @@ -5675,14 +5675,14 @@ dependencies = [ "protobuf-src", "serde", "solana-account-decoder", - "solana-sdk 1.14.22", + "solana-sdk 1.14.23", "solana-transaction-status", "tonic-build 0.8.0", ] [[package]] name = "solana-streamer" -version = "1.14.22" +version = "1.14.23" dependencies = [ "crossbeam-channel", "futures-util", @@ -5701,7 +5701,7 @@ dependencies = [ "rustls 0.20.6", "solana-metrics", "solana-perf", - "solana-sdk 1.14.22", + "solana-sdk 1.14.23", "thiserror", "tokio", "x509-parser", @@ -5709,13 +5709,13 @@ dependencies = [ [[package]] name = "solana-sys-tuner" -version = "1.14.22" +version = "1.14.23" dependencies = [ "clap 2.33.3", "libc", "log", "nix", - "solana-logger 1.14.22", + "solana-logger 1.14.23", "solana-version", "sysctl", "unix_socket2", @@ -5724,7 +5724,7 @@ dependencies = [ [[package]] name = "solana-test-validator" -version = "1.14.22" +version = "1.14.23" dependencies = [ "base64 0.13.0", "log", @@ -5735,20 +5735,20 @@ dependencies = [ "solana-core", "solana-gossip", "solana-ledger", - "solana-logger 1.14.22", + "solana-logger 1.14.23", "solana-net-utils", "solana-program-runtime", "solana-program-test", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.22", + "solana-sdk 1.14.23", "solana-streamer", "tokio", ] [[package]] name = "solana-transaction-status" -version = "1.14.22" +version = "1.14.23" dependencies = [ "Inflector", "base64 0.13.0", @@ -5764,7 +5764,7 @@ dependencies = [ "solana-address-lookup-table-program", "solana-measure", "solana-metrics", - "solana-sdk 1.14.22", + "solana-sdk 1.14.23", "solana-vote-program", "spl-associated-token-account", "spl-memo", @@ -5775,7 +5775,7 @@ dependencies = [ [[package]] name = "solana-validator" -version = "1.14.22" +version = "1.14.23" dependencies = [ "chrono", "clap 2.33.3", @@ -5806,14 +5806,14 @@ dependencies = [ "solana-genesis-utils", "solana-gossip", "solana-ledger", - "solana-logger 1.14.22", + "solana-logger 1.14.23", "solana-metrics", "solana-net-utils", "solana-perf", "solana-poh", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.22", + "solana-sdk 1.14.23", "solana-send-transaction-service", "solana-storage-bigtable", "solana-streamer", @@ -5826,21 +5826,21 @@ dependencies = [ [[package]] name = "solana-version" -version = "1.14.22" +version = "1.14.23" dependencies = [ "log", "rustc_version", "semver", "serde", "serde_derive", - "solana-frozen-abi 1.14.22", - "solana-frozen-abi-macro 1.14.22", - "solana-sdk 1.14.22", + "solana-frozen-abi 1.14.23", + "solana-frozen-abi-macro 1.14.23", + "solana-sdk 1.14.23", ] [[package]] name = "solana-vote-program" -version = "1.14.22" +version = "1.14.23" dependencies = [ "bincode", "log", @@ -5849,25 +5849,25 @@ dependencies = [ "rustc_version", "serde", "serde_derive", - "solana-frozen-abi 1.14.22", - "solana-frozen-abi-macro 1.14.22", + "solana-frozen-abi 1.14.23", + "solana-frozen-abi-macro 1.14.23", "solana-metrics", "solana-program-runtime", - "solana-sdk 1.14.22", + "solana-sdk 1.14.23", "thiserror", ] [[package]] name = "solana-zk-token-proof-program" -version = "1.14.22" +version = "1.14.23" dependencies = [ "bytemuck", "getrandom 0.1.14", "num-derive", "num-traits", "solana-program-runtime", - "solana-sdk 1.14.22", - "solana-zk-token-sdk 1.14.22", + "solana-sdk 1.14.23", + "solana-zk-token-sdk 1.14.23", ] [[package]] @@ -5903,7 +5903,7 @@ dependencies = [ [[package]] name = "solana-zk-token-sdk" -version = "1.14.22" +version = "1.14.23" dependencies = [ "aes-gcm-siv", "arrayref", @@ -5923,8 +5923,8 @@ dependencies = [ "serde", "serde_json", "sha3 0.9.1", - "solana-program 1.14.22", - "solana-sdk 1.14.22", + "solana-program 1.14.23", + "solana-sdk 1.14.23", "subtle", "thiserror", "zeroize", diff --git a/programs/bpf/Cargo.toml b/programs/bpf/Cargo.toml index 7573d146e64951..feaf20016f9089 100644 --- a/programs/bpf/Cargo.toml +++ b/programs/bpf/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "solana-bpf-programs" description = "Blockchain, Rebuilt for Scale" -version = "1.14.22" +version = "1.14.23" documentation = "https://docs.rs/solana" homepage = "https://solana.com/" readme = "README.md" @@ -26,22 +26,22 @@ itertools = "0.10.1" log = "0.4.11" miow = "0.3.6" net2 = "0.2.37" -solana-account-decoder = { path = "../../account-decoder", version = "=1.14.22" } -solana-bpf-loader-program = { path = "../bpf_loader", version = "=1.14.22" } -solana-bpf-rust-invoke = { path = "rust/invoke", version = "=1.14.22" } -solana-bpf-rust-realloc = { path = "rust/realloc", version = "=1.14.22" } -solana-bpf-rust-realloc-invoke = { path = "rust/realloc_invoke", version = "=1.14.22" } -solana-cli-output = { path = "../../cli-output", version = "=1.14.22" } -solana-logger = { path = "../../logger", version = "=1.14.22" } -solana-measure = { path = "../../measure", version = "=1.14.22" } -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.22" } -solana-runtime = { path = "../../runtime", version = "=1.14.22" } -solana-sdk = { path = "../../sdk", version = "=1.14.22" } -solana-transaction-status = { path = "../../transaction-status", version = "=1.14.22" } +solana-account-decoder = { path = "../../account-decoder", version = "=1.14.23" } +solana-bpf-loader-program = { path = "../bpf_loader", version = "=1.14.23" } +solana-bpf-rust-invoke = { path = "rust/invoke", version = "=1.14.23" } +solana-bpf-rust-realloc = { path = "rust/realloc", version = "=1.14.23" } +solana-bpf-rust-realloc-invoke = { path = "rust/realloc_invoke", version = "=1.14.23" } +solana-cli-output = { path = "../../cli-output", version = "=1.14.23" } +solana-logger = { path = "../../logger", version = "=1.14.23" } +solana-measure = { path = "../../measure", version = "=1.14.23" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.23" } +solana-runtime = { path = "../../runtime", version = "=1.14.23" } +solana-sdk = { path = "../../sdk", version = "=1.14.23" } +solana-transaction-status = { path = "../../transaction-status", version = "=1.14.23" } solana_rbpf = "=0.2.31" [dev-dependencies] -solana-ledger = { path = "../../ledger", version = "=1.14.22" } +solana-ledger = { path = "../../ledger", version = "=1.14.23" } [[bench]] name = "bpf_loader" diff --git a/programs/bpf/rust/128bit/Cargo.toml b/programs/bpf/rust/128bit/Cargo.toml index 9f15487e6cfee7..b113b7c461362f 100644 --- a/programs/bpf/rust/128bit/Cargo.toml +++ b/programs/bpf/rust/128bit/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-128bit" -version = "1.14.22" +version = "1.14.23" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ documentation = "https://docs.rs/solana-bpf-rust-128bit" edition = "2021" [dependencies] -solana-bpf-rust-128bit-dep = { path = "../128bit_dep", version = "=1.14.22" } -solana-program = { path = "../../../../sdk/program", version = "=1.14.22" } +solana-bpf-rust-128bit-dep = { path = "../128bit_dep", version = "=1.14.23" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.23" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/128bit_dep/Cargo.toml b/programs/bpf/rust/128bit_dep/Cargo.toml index 3bf9bf75b03c14..4da016dfe68fc9 100644 --- a/programs/bpf/rust/128bit_dep/Cargo.toml +++ b/programs/bpf/rust/128bit_dep/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-128bit-dep" -version = "1.14.22" +version = "1.14.23" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-128bit-dep" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.22" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.23" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/bpf/rust/alloc/Cargo.toml b/programs/bpf/rust/alloc/Cargo.toml index 4236fb66119538..e2e355780fea46 100644 --- a/programs/bpf/rust/alloc/Cargo.toml +++ b/programs/bpf/rust/alloc/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-alloc" -version = "1.14.22" +version = "1.14.23" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-alloc" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.22" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.23" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/call_depth/Cargo.toml b/programs/bpf/rust/call_depth/Cargo.toml index c661bc947b3454..7c347037ed3c38 100644 --- a/programs/bpf/rust/call_depth/Cargo.toml +++ b/programs/bpf/rust/call_depth/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-call-depth" -version = "1.14.22" +version = "1.14.23" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-call-depth" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.22" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.23" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/caller_access/Cargo.toml b/programs/bpf/rust/caller_access/Cargo.toml index d189cb9dd474f5..35f871d60f06da 100644 --- a/programs/bpf/rust/caller_access/Cargo.toml +++ b/programs/bpf/rust/caller_access/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-caller-access" -version = "1.14.22" +version = "1.14.23" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-caller-access" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.22" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.23" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/curve25519/Cargo.toml b/programs/bpf/rust/curve25519/Cargo.toml index 17a067708ec3cd..677f65265340fa 100644 --- a/programs/bpf/rust/curve25519/Cargo.toml +++ b/programs/bpf/rust/curve25519/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-curve25519" -version = "1.14.22" +version = "1.14.23" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ documentation = "https://docs.rs/solana-bpf-rust-zktoken_crypto" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.22" } -solana-zk-token-sdk = { path = "../../../../zk-token-sdk", version = "=1.14.22" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.23" } +solana-zk-token-sdk = { path = "../../../../zk-token-sdk", version = "=1.14.23" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/custom_heap/Cargo.toml b/programs/bpf/rust/custom_heap/Cargo.toml index f2fe480a730f09..3e902d28d3df10 100644 --- a/programs/bpf/rust/custom_heap/Cargo.toml +++ b/programs/bpf/rust/custom_heap/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-custom-heap" -version = "1.14.22" +version = "1.14.23" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-custom-heap" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.22" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.23" } [features] default = ["custom-heap"] diff --git a/programs/bpf/rust/dep_crate/Cargo.toml b/programs/bpf/rust/dep_crate/Cargo.toml index fff61ac2e30754..aa0645af086bac 100644 --- a/programs/bpf/rust/dep_crate/Cargo.toml +++ b/programs/bpf/rust/dep_crate/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-dep-crate" -version = "1.14.22" +version = "1.14.23" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,8 +12,8 @@ edition = "2021" [dependencies] byteorder = { version = "1", default-features = false } # list of crates which must be buildable for bpf programs -solana-address-lookup-table-program = { path = "../../../../programs/address-lookup-table", version = "=1.14.22" } -solana-program = { path = "../../../../sdk/program", version = "=1.14.22" } +solana-address-lookup-table-program = { path = "../../../../programs/address-lookup-table", version = "=1.14.23" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.23" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/deprecated_loader/Cargo.toml b/programs/bpf/rust/deprecated_loader/Cargo.toml index e62431287ac44f..c016f4cb315818 100644 --- a/programs/bpf/rust/deprecated_loader/Cargo.toml +++ b/programs/bpf/rust/deprecated_loader/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-deprecated-loader" -version = "1.14.22" +version = "1.14.23" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-deprecated-loader" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.22" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.23" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/dup_accounts/Cargo.toml b/programs/bpf/rust/dup_accounts/Cargo.toml index d07a45bf40d034..d46205ce58f978 100644 --- a/programs/bpf/rust/dup_accounts/Cargo.toml +++ b/programs/bpf/rust/dup_accounts/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-dup-accounts" -version = "1.14.22" +version = "1.14.23" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-dup-accounts" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.22" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.23" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/error_handling/Cargo.toml b/programs/bpf/rust/error_handling/Cargo.toml index 13ad9de9b2466f..f8ea348ff163a1 100644 --- a/programs/bpf/rust/error_handling/Cargo.toml +++ b/programs/bpf/rust/error_handling/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-error-handling" -version = "1.14.22" +version = "1.14.23" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,7 +12,7 @@ edition = "2021" [dependencies] num-derive = "0.3" num-traits = "0.2" -solana-program = { path = "../../../../sdk/program", version = "=1.14.22" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.23" } thiserror = "1.0" [lib] diff --git a/programs/bpf/rust/external_spend/Cargo.toml b/programs/bpf/rust/external_spend/Cargo.toml index d7ab7a877bb16e..28aacb4637c949 100644 --- a/programs/bpf/rust/external_spend/Cargo.toml +++ b/programs/bpf/rust/external_spend/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-external-spend" -version = "1.14.22" +version = "1.14.23" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-external-spend" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.22" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.23" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/finalize/Cargo.toml b/programs/bpf/rust/finalize/Cargo.toml index ffc4b0d4d13c45..af2650422eaf9e 100644 --- a/programs/bpf/rust/finalize/Cargo.toml +++ b/programs/bpf/rust/finalize/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-finalize" -version = "1.14.22" +version = "1.14.23" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-finalize" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.22" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.23" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/get_minimum_delegation/Cargo.toml b/programs/bpf/rust/get_minimum_delegation/Cargo.toml index 92fea35399de59..b76f783b3f4bd5 100644 --- a/programs/bpf/rust/get_minimum_delegation/Cargo.toml +++ b/programs/bpf/rust/get_minimum_delegation/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-get-minimum-delegation" -version = "1.14.22" +version = "1.14.23" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-get-minimum-delegation" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.22" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.23" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/inner_instruction_alignment_check/Cargo.toml b/programs/bpf/rust/inner_instruction_alignment_check/Cargo.toml index a210d87ea57037..cbbb2ee5a19cfb 100644 --- a/programs/bpf/rust/inner_instruction_alignment_check/Cargo.toml +++ b/programs/bpf/rust/inner_instruction_alignment_check/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-inner_instruction_alignment_check" -version = "1.14.22" +version = "1.14.23" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-inner_instruction_alignment_che edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.22" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.23" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/instruction_introspection/Cargo.toml b/programs/bpf/rust/instruction_introspection/Cargo.toml index 1e6acc731f4545..6c92f5e979d24c 100644 --- a/programs/bpf/rust/instruction_introspection/Cargo.toml +++ b/programs/bpf/rust/instruction_introspection/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-instruction-introspection" -version = "1.14.22" +version = "1.14.23" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-instruction-introspection" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.22" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.23" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/invoke/Cargo.toml b/programs/bpf/rust/invoke/Cargo.toml index e912ba0bc41e61..af4939ff1b0ff6 100644 --- a/programs/bpf/rust/invoke/Cargo.toml +++ b/programs/bpf/rust/invoke/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-invoke" -version = "1.14.22" +version = "1.14.23" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -15,7 +15,7 @@ program = [] [dependencies] solana-bpf-rust-invoked = { path = "../invoked", default-features = false } -solana-program = { path = "../../../../sdk/program", version = "=1.14.22" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.23" } [lib] crate-type = ["lib", "cdylib"] diff --git a/programs/bpf/rust/invoke_and_error/Cargo.toml b/programs/bpf/rust/invoke_and_error/Cargo.toml index ebb6be7b638220..b08567b0c62fc0 100644 --- a/programs/bpf/rust/invoke_and_error/Cargo.toml +++ b/programs/bpf/rust/invoke_and_error/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-invoke-and-error" -version = "1.14.22" +version = "1.14.23" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-invoke-and-error" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.22" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.23" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/invoke_and_ok/Cargo.toml b/programs/bpf/rust/invoke_and_ok/Cargo.toml index 38f1bb5aecf31d..4bb40839b79355 100644 --- a/programs/bpf/rust/invoke_and_ok/Cargo.toml +++ b/programs/bpf/rust/invoke_and_ok/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-invoke-and-ok" -version = "1.14.22" +version = "1.14.23" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-invoke-and-ok" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.22" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.23" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/invoke_and_return/Cargo.toml b/programs/bpf/rust/invoke_and_return/Cargo.toml index c373ccf4773820..6561cbd3077309 100644 --- a/programs/bpf/rust/invoke_and_return/Cargo.toml +++ b/programs/bpf/rust/invoke_and_return/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-invoke-and-return" -version = "1.14.22" +version = "1.14.23" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-invoke-and-return" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.22" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.23" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/invoked/Cargo.toml b/programs/bpf/rust/invoked/Cargo.toml index d1ee74d15d6b7d..0f194f397f720f 100644 --- a/programs/bpf/rust/invoked/Cargo.toml +++ b/programs/bpf/rust/invoked/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-invoked" -version = "1.14.22" +version = "1.14.23" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,7 +14,7 @@ default = ["program"] program = [] [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.22" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.23" } [lib] crate-type = ["lib", "cdylib"] diff --git a/programs/bpf/rust/iter/Cargo.toml b/programs/bpf/rust/iter/Cargo.toml index 1d81628db3acba..67b10e9cee0fe6 100644 --- a/programs/bpf/rust/iter/Cargo.toml +++ b/programs/bpf/rust/iter/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-iter" -version = "1.14.22" +version = "1.14.23" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-iter" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.22" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.23" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/log_data/Cargo.toml b/programs/bpf/rust/log_data/Cargo.toml index 0cdb3034a86706..18179c800cfa92 100644 --- a/programs/bpf/rust/log_data/Cargo.toml +++ b/programs/bpf/rust/log_data/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-log-data" -version = "1.14.22" +version = "1.14.23" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-log-data" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.22" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.23" } [features] default = ["program"] diff --git a/programs/bpf/rust/many_args/Cargo.toml b/programs/bpf/rust/many_args/Cargo.toml index 308a65937c53eb..1368fdab35c319 100644 --- a/programs/bpf/rust/many_args/Cargo.toml +++ b/programs/bpf/rust/many_args/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-many-args" -version = "1.14.22" +version = "1.14.23" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ documentation = "https://docs.rs/solana-bpf-rust-many-args" edition = "2021" [dependencies] -solana-bpf-rust-many-args-dep = { path = "../many_args_dep", version = "=1.14.22" } -solana-program = { path = "../../../../sdk/program", version = "=1.14.22" } +solana-bpf-rust-many-args-dep = { path = "../many_args_dep", version = "=1.14.23" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.23" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/many_args_dep/Cargo.toml b/programs/bpf/rust/many_args_dep/Cargo.toml index a078ce544747a3..4ad4ff116b19b1 100644 --- a/programs/bpf/rust/many_args_dep/Cargo.toml +++ b/programs/bpf/rust/many_args_dep/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-many-args-dep" -version = "1.14.22" +version = "1.14.23" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-many-args-dep" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.22" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.23" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/bpf/rust/mem/Cargo.toml b/programs/bpf/rust/mem/Cargo.toml index 677490d29444e1..f4e53800321823 100644 --- a/programs/bpf/rust/mem/Cargo.toml +++ b/programs/bpf/rust/mem/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-mem" -version = "1.14.22" +version = "1.14.23" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,12 +13,12 @@ edition = "2021" no-entrypoint = [] [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.22" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.23" } [dev-dependencies] -solana-program-runtime = { path = "../../../../program-runtime", version = "=1.14.22" } -solana-program-test = { path = "../../../../program-test", version = "=1.14.22" } -solana-sdk = { path = "../../../../sdk", version = "=1.14.22" } +solana-program-runtime = { path = "../../../../program-runtime", version = "=1.14.23" } +solana-program-test = { path = "../../../../program-test", version = "=1.14.23" } +solana-sdk = { path = "../../../../sdk", version = "=1.14.23" } [lib] crate-type = ["cdylib", "lib"] diff --git a/programs/bpf/rust/membuiltins/Cargo.toml b/programs/bpf/rust/membuiltins/Cargo.toml index cb161807d6a421..190c4a381045d7 100644 --- a/programs/bpf/rust/membuiltins/Cargo.toml +++ b/programs/bpf/rust/membuiltins/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-membuiltins" -version = "1.14.22" +version = "1.14.23" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ documentation = "https://docs.rs/solana-bpf-rust-mem" edition = "2021" [dependencies] -solana-bpf-rust-mem = { path = "../mem", version = "=1.14.22", features = [ "no-entrypoint" ] } -solana-program = { path = "../../../../sdk/program", version = "=1.14.22" } +solana-bpf-rust-mem = { path = "../mem", version = "=1.14.23", features = [ "no-entrypoint" ] } +solana-program = { path = "../../../../sdk/program", version = "=1.14.23" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/noop/Cargo.toml b/programs/bpf/rust/noop/Cargo.toml index 23754b502dc310..41a020e82c86af 100644 --- a/programs/bpf/rust/noop/Cargo.toml +++ b/programs/bpf/rust/noop/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-noop" -version = "1.14.22" +version = "1.14.23" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-noop" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.22" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.23" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/panic/Cargo.toml b/programs/bpf/rust/panic/Cargo.toml index 01e60dff78ab6b..bd609dc72d437b 100644 --- a/programs/bpf/rust/panic/Cargo.toml +++ b/programs/bpf/rust/panic/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-panic" -version = "1.14.22" +version = "1.14.23" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-panic" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.22" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.23" } [features] default = ["custom-panic"] diff --git a/programs/bpf/rust/param_passing/Cargo.toml b/programs/bpf/rust/param_passing/Cargo.toml index 6954d83ca0a7c9..d88653cc6bc74b 100644 --- a/programs/bpf/rust/param_passing/Cargo.toml +++ b/programs/bpf/rust/param_passing/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-param-passing" -version = "1.14.22" +version = "1.14.23" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ documentation = "https://docs.rs/solana-bpf-rust-param-passing" edition = "2021" [dependencies] -solana-bpf-rust-param-passing-dep = { path = "../param_passing_dep", version = "=1.14.22" } -solana-program = { path = "../../../../sdk/program", version = "=1.14.22" } +solana-bpf-rust-param-passing-dep = { path = "../param_passing_dep", version = "=1.14.23" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.23" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/param_passing_dep/Cargo.toml b/programs/bpf/rust/param_passing_dep/Cargo.toml index 741b38b6077380..e45fe074cf2db5 100644 --- a/programs/bpf/rust/param_passing_dep/Cargo.toml +++ b/programs/bpf/rust/param_passing_dep/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-param-passing-dep" -version = "1.14.22" +version = "1.14.23" description = "Solana BPF program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-param-passing-dep" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.22" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.23" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/bpf/rust/rand/Cargo.toml b/programs/bpf/rust/rand/Cargo.toml index 12433a03d5933c..1a9bb82081ceb3 100644 --- a/programs/bpf/rust/rand/Cargo.toml +++ b/programs/bpf/rust/rand/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-rand" -version = "1.14.22" +version = "1.14.23" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,7 +12,7 @@ edition = "2021" [dependencies] getrandom = { version = "0.1.14", features = ["dummy"] } rand = "0.7" -solana-program = { path = "../../../../sdk/program", version = "=1.14.22" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.23" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/realloc/Cargo.toml b/programs/bpf/rust/realloc/Cargo.toml index 0ea6ba974a42b5..282fcd3845bf27 100644 --- a/programs/bpf/rust/realloc/Cargo.toml +++ b/programs/bpf/rust/realloc/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-realloc" -version = "1.14.22" +version = "1.14.23" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,7 +14,7 @@ default = ["program"] program = [] [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.22" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.23" } [lib] crate-type = ["lib", "cdylib"] diff --git a/programs/bpf/rust/realloc_invoke/Cargo.toml b/programs/bpf/rust/realloc_invoke/Cargo.toml index 7e056ec6cdfbc2..f63288bbec99b8 100644 --- a/programs/bpf/rust/realloc_invoke/Cargo.toml +++ b/programs/bpf/rust/realloc_invoke/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-realloc-invoke" -version = "1.14.22" +version = "1.14.23" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,8 +14,8 @@ default = ["program"] program = [] [dependencies] -solana-bpf-rust-realloc = { path = "../realloc", version = "=1.14.22", default-features = false } -solana-program = { path = "../../../../sdk/program", version = "=1.14.22" } +solana-bpf-rust-realloc = { path = "../realloc", version = "=1.14.23", default-features = false } +solana-program = { path = "../../../../sdk/program", version = "=1.14.23" } [lib] crate-type = ["lib", "cdylib"] diff --git a/programs/bpf/rust/ro_account_modify/Cargo.toml b/programs/bpf/rust/ro_account_modify/Cargo.toml index 4a56580118dd09..91f241fe6ff993 100644 --- a/programs/bpf/rust/ro_account_modify/Cargo.toml +++ b/programs/bpf/rust/ro_account_modify/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-ro-account_modify" -version = "1.14.22" +version = "1.14.23" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-ro-modify" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.22" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.23" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/ro_modify/Cargo.toml b/programs/bpf/rust/ro_modify/Cargo.toml index 403f89b44ff90d..024d76561052a5 100644 --- a/programs/bpf/rust/ro_modify/Cargo.toml +++ b/programs/bpf/rust/ro_modify/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-ro-modify" -version = "1.14.22" +version = "1.14.23" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-ro-modify" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.22" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.23" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/sanity/Cargo.toml b/programs/bpf/rust/sanity/Cargo.toml index 6b6e7aa6f4e742..42ee286eec77a0 100644 --- a/programs/bpf/rust/sanity/Cargo.toml +++ b/programs/bpf/rust/sanity/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-sanity" -version = "1.14.22" +version = "1.14.23" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,12 +13,12 @@ edition = "2021" test-bpf = [] [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.22" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.23" } [dev-dependencies] -solana-program-runtime = { path = "../../../../program-runtime", version = "=1.14.22" } -solana-program-test = { path = "../../../../program-test", version = "=1.14.22" } -solana-sdk = { path = "../../../../sdk", version = "=1.14.22" } +solana-program-runtime = { path = "../../../../program-runtime", version = "=1.14.23" } +solana-program-test = { path = "../../../../program-test", version = "=1.14.23" } +solana-sdk = { path = "../../../../sdk", version = "=1.14.23" } [lib] crate-type = ["cdylib", "lib"] diff --git a/programs/bpf/rust/secp256k1_recover/Cargo.toml b/programs/bpf/rust/secp256k1_recover/Cargo.toml index 4151645aa1544b..5b0b0b527f603b 100644 --- a/programs/bpf/rust/secp256k1_recover/Cargo.toml +++ b/programs/bpf/rust/secp256k1_recover/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-secp256k1-recover" -version = "1.14.22" +version = "1.14.23" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -11,7 +11,7 @@ edition = "2021" [dependencies] libsecp256k1 = { version = "0.7.0", default-features = false } -solana-program = { path = "../../../../sdk/program", version = "=1.14.22" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.23" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/sha/Cargo.toml b/programs/bpf/rust/sha/Cargo.toml index 08b4767c4c5087..9b7626d6ac5a7c 100644 --- a/programs/bpf/rust/sha/Cargo.toml +++ b/programs/bpf/rust/sha/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-sha" -version = "1.14.22" +version = "1.14.23" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -11,7 +11,7 @@ edition = "2021" [dependencies] blake3 = "1.0.0" -solana-program = { path = "../../../../sdk/program", version = "=1.14.22" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.23" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/sibling_inner_instruction/Cargo.toml b/programs/bpf/rust/sibling_inner_instruction/Cargo.toml index a076fbab9c7755..b37d533254119c 100644 --- a/programs/bpf/rust/sibling_inner_instruction/Cargo.toml +++ b/programs/bpf/rust/sibling_inner_instruction/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-sibling_inner-instructions" -version = "1.14.22" +version = "1.14.23" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-log-data" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.22" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.23" } [features] default = ["program"] diff --git a/programs/bpf/rust/sibling_instruction/Cargo.toml b/programs/bpf/rust/sibling_instruction/Cargo.toml index 404e516234b77f..57012ed971f8c2 100644 --- a/programs/bpf/rust/sibling_instruction/Cargo.toml +++ b/programs/bpf/rust/sibling_instruction/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-sibling-instructions" -version = "1.14.22" +version = "1.14.23" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-log-data" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.22" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.23" } [features] default = ["program"] diff --git a/programs/bpf/rust/simulation/Cargo.toml b/programs/bpf/rust/simulation/Cargo.toml index fa1ae73438a35f..85b22effa64ee5 100644 --- a/programs/bpf/rust/simulation/Cargo.toml +++ b/programs/bpf/rust/simulation/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-simulation" -version = "1.14.22" +version = "1.14.23" description = "Solana BPF Program Simulation Differences" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,13 +13,13 @@ edition = "2021" test-bpf = [] [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.22" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.23" } [dev-dependencies] -solana-logger = { path = "../../../../logger", version = "=1.14.22" } -solana-program-test = { path = "../../../../program-test", version = "=1.14.22" } -solana-sdk = { path = "../../../../sdk", version = "=1.14.22" } -solana-validator = { path = "../../../../validator", version = "=1.14.22" } +solana-logger = { path = "../../../../logger", version = "=1.14.23" } +solana-program-test = { path = "../../../../program-test", version = "=1.14.23" } +solana-sdk = { path = "../../../../sdk", version = "=1.14.23" } +solana-validator = { path = "../../../../validator", version = "=1.14.23" } [lib] crate-type = ["cdylib", "lib"] diff --git a/programs/bpf/rust/spoof1/Cargo.toml b/programs/bpf/rust/spoof1/Cargo.toml index 8c76541fa95380..b0936ef56e7407 100644 --- a/programs/bpf/rust/spoof1/Cargo.toml +++ b/programs/bpf/rust/spoof1/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-spoof1" -version = "1.14.22" +version = "1.14.23" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-spoof1" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.22" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.23" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/spoof1_system/Cargo.toml b/programs/bpf/rust/spoof1_system/Cargo.toml index cc27ca75293e37..48fae76f662ec8 100644 --- a/programs/bpf/rust/spoof1_system/Cargo.toml +++ b/programs/bpf/rust/spoof1_system/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-spoof1-system" -version = "1.14.22" +version = "1.14.23" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-spoof1-system" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.22" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.23" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/sysvar/Cargo.toml b/programs/bpf/rust/sysvar/Cargo.toml index 0093f75775224a..4eed801a4336cd 100644 --- a/programs/bpf/rust/sysvar/Cargo.toml +++ b/programs/bpf/rust/sysvar/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-sysvar" -version = "1.14.22" +version = "1.14.23" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,12 +10,12 @@ documentation = "https://docs.rs/solana-bpf-rust-sysvar" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.22" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.23" } [dev-dependencies] -solana-program-runtime = { path = "../../../../program-runtime", version = "=1.14.22" } -solana-program-test = { path = "../../../../program-test", version = "=1.14.22" } -solana-sdk = { path = "../../../../sdk", version = "=1.14.22" } +solana-program-runtime = { path = "../../../../program-runtime", version = "=1.14.23" } +solana-program-test = { path = "../../../../program-test", version = "=1.14.23" } +solana-sdk = { path = "../../../../sdk", version = "=1.14.23" } [lib] crate-type = ["cdylib", "lib"] diff --git a/programs/bpf/rust/upgradeable/Cargo.toml b/programs/bpf/rust/upgradeable/Cargo.toml index 37e6596b1f0acd..3ebf3763525700 100644 --- a/programs/bpf/rust/upgradeable/Cargo.toml +++ b/programs/bpf/rust/upgradeable/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-upgradeable" -version = "1.14.22" +version = "1.14.23" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-upgradeable" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.22" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.23" } [lib] name = "solana_bpf_rust_upgradeable" diff --git a/programs/bpf/rust/upgraded/Cargo.toml b/programs/bpf/rust/upgraded/Cargo.toml index 329e88a5e1a964..e29af9b2308348 100644 --- a/programs/bpf/rust/upgraded/Cargo.toml +++ b/programs/bpf/rust/upgraded/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-upgraded" -version = "1.14.22" +version = "1.14.23" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-upgraded" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.22" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.23" } [lib] name = "solana_bpf_rust_upgraded" diff --git a/programs/bpf_loader/Cargo.toml b/programs/bpf_loader/Cargo.toml index 853ea0e494f2fe..c214d7e75aaa8b 100644 --- a/programs/bpf_loader/Cargo.toml +++ b/programs/bpf_loader/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-loader-program" -version = "1.14.22" +version = "1.14.23" description = "Solana BPF loader" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,17 +14,17 @@ bincode = "1.3.3" byteorder = "1.4.3" libsecp256k1 = "0.6.0" log = "0.4.17" -solana-measure = { path = "../../measure", version = "=1.14.22" } -solana-metrics = { path = "../../metrics", version = "=1.14.22" } -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.22" } -solana-sdk = { path = "../../sdk", version = "=1.14.22" } -solana-zk-token-sdk = { path = "../../zk-token-sdk", version = "=1.14.22" } +solana-measure = { path = "../../measure", version = "=1.14.23" } +solana-metrics = { path = "../../metrics", version = "=1.14.23" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.23" } +solana-sdk = { path = "../../sdk", version = "=1.14.23" } +solana-zk-token-sdk = { path = "../../zk-token-sdk", version = "=1.14.23" } solana_rbpf = "=0.2.31" thiserror = "1.0" [dev-dependencies] rand = "0.7.3" -solana-runtime = { path = "../../runtime", version = "=1.14.22" } +solana-runtime = { path = "../../runtime", version = "=1.14.23" } [lib] crate-type = ["lib"] diff --git a/programs/bpf_loader/gen-syscall-list/Cargo.toml b/programs/bpf_loader/gen-syscall-list/Cargo.toml index f35201a534564e..fa26abf53e8393 100644 --- a/programs/bpf_loader/gen-syscall-list/Cargo.toml +++ b/programs/bpf_loader/gen-syscall-list/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "gen-syscall-list" -version = "1.14.22" +version = "1.14.23" edition = "2021" license = "Apache-2.0" publish = false diff --git a/programs/compute-budget/Cargo.toml b/programs/compute-budget/Cargo.toml index f332625edab086..c010ea0ae46d84 100644 --- a/programs/compute-budget/Cargo.toml +++ b/programs/compute-budget/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "solana-compute-budget-program" description = "Solana Compute Budget program" -version = "1.14.22" +version = "1.14.23" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-compute-budget-program" repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ license = "Apache-2.0" edition = "2021" [dependencies] -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.22" } -solana-sdk = { path = "../../sdk", version = "=1.14.22" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.23" } +solana-sdk = { path = "../../sdk", version = "=1.14.23" } [lib] crate-type = ["lib"] diff --git a/programs/config/Cargo.toml b/programs/config/Cargo.toml index 0ccfdfeeae2127..969aebe7a528ad 100644 --- a/programs/config/Cargo.toml +++ b/programs/config/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-config-program" -version = "1.14.22" +version = "1.14.23" description = "Solana Config program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,11 +14,11 @@ bincode = "1.3.3" chrono = { version = "0.4.11", features = ["serde"] } serde = "1.0.138" serde_derive = "1.0.103" -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.22" } -solana-sdk = { path = "../../sdk", version = "=1.14.22" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.23" } +solana-sdk = { path = "../../sdk", version = "=1.14.23" } [dev-dependencies] -solana-logger = { path = "../../logger", version = "=1.14.22" } +solana-logger = { path = "../../logger", version = "=1.14.23" } [lib] crate-type = ["lib"] diff --git a/programs/ed25519-tests/Cargo.toml b/programs/ed25519-tests/Cargo.toml index 95849b4e039bd6..ecd36073c8952d 100644 --- a/programs/ed25519-tests/Cargo.toml +++ b/programs/ed25519-tests/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-ed25519-program-tests" -version = "1.14.22" +version = "1.14.23" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" @@ -12,8 +12,8 @@ publish = false assert_matches = "1.5.0" ed25519-dalek = "=1.0.1" rand = "0.7.0" -solana-program-test = { path = "../../program-test", version = "=1.14.22" } -solana-sdk = { path = "../../sdk", version = "=1.14.22" } +solana-program-test = { path = "../../program-test", version = "=1.14.23" } +solana-sdk = { path = "../../sdk", version = "=1.14.23" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/stake/Cargo.toml b/programs/stake/Cargo.toml index 89f36a2bf25d22..6930a0d0cfbc87 100644 --- a/programs/stake/Cargo.toml +++ b/programs/stake/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-stake-program" -version = "1.14.22" +version = "1.14.23" description = "Solana Stake program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -16,19 +16,19 @@ num-derive = "0.3" num-traits = "0.2" serde = "1.0.138" serde_derive = "1.0.103" -solana-config-program = { path = "../config", version = "=1.14.22" } -solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.22" } -solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.22" } -solana-metrics = { path = "../../metrics", version = "=1.14.22" } -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.22" } -solana-sdk = { path = "../../sdk", version = "=1.14.22" } -solana-vote-program = { path = "../vote", version = "=1.14.22" } +solana-config-program = { path = "../config", version = "=1.14.23" } +solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.23" } +solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.23" } +solana-metrics = { path = "../../metrics", version = "=1.14.23" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.23" } +solana-sdk = { path = "../../sdk", version = "=1.14.23" } +solana-vote-program = { path = "../vote", version = "=1.14.23" } thiserror = "1.0" [dev-dependencies] assert_matches = "1.5.0" proptest = "1.0" -solana-logger = { path = "../../logger", version = "=1.14.22" } +solana-logger = { path = "../../logger", version = "=1.14.23" } test-case = "2.1.0" [build-dependencies] diff --git a/programs/vote/Cargo.toml b/programs/vote/Cargo.toml index d1611d4806eaa7..c226ad653ff99a 100644 --- a/programs/vote/Cargo.toml +++ b/programs/vote/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-vote-program" -version = "1.14.22" +version = "1.14.23" description = "Solana Vote program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -16,17 +16,17 @@ num-derive = "0.3" num-traits = "0.2" serde = "1.0.138" serde_derive = "1.0.103" -solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.22" } -solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.22" } -solana-metrics = { path = "../../metrics", version = "=1.14.22" } -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.22" } -solana-sdk = { path = "../../sdk", version = "=1.14.22" } +solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.23" } +solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.23" } +solana-metrics = { path = "../../metrics", version = "=1.14.23" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.23" } +solana-sdk = { path = "../../sdk", version = "=1.14.23" } thiserror = "1.0" [dev-dependencies] itertools = "0.10.3" rand = "0.7.0" -solana-logger = { path = "../../logger", version = "=1.14.22" } +solana-logger = { path = "../../logger", version = "=1.14.23" } test-case = "2.1.0" [build-dependencies] diff --git a/programs/zk-token-proof-tests/Cargo.toml b/programs/zk-token-proof-tests/Cargo.toml index b11e5d9ed9ab03..73726b0a3dcdf0 100644 --- a/programs/zk-token-proof-tests/Cargo.toml +++ b/programs/zk-token-proof-tests/Cargo.toml @@ -2,14 +2,14 @@ name = "solana-zk-token-proof-program-tests" authors = ["Solana Labs Maintainers "] repository = "https://github.com/solana-labs/solana" -version = "1.14.22" +version = "1.14.23" license = "Apache-2.0" edition = "2021" publish = false [dev-dependencies] bytemuck = { version = "1.11.0", features = ["derive"] } -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.22" } -solana-program-test = { path = "../../program-test", version = "=1.14.22" } -solana-sdk = { path = "../../sdk", version = "=1.14.22" } -solana-zk-token-sdk = { path = "../../zk-token-sdk", version = "=1.14.22" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.23" } +solana-program-test = { path = "../../program-test", version = "=1.14.23" } +solana-sdk = { path = "../../sdk", version = "=1.14.23" } +solana-zk-token-sdk = { path = "../../zk-token-sdk", version = "=1.14.23" } diff --git a/programs/zk-token-proof/Cargo.toml b/programs/zk-token-proof/Cargo.toml index 0a5cf942e571b2..5fb56c9162f41d 100644 --- a/programs/zk-token-proof/Cargo.toml +++ b/programs/zk-token-proof/Cargo.toml @@ -3,7 +3,7 @@ name = "solana-zk-token-proof-program" description = "Solana Zk Token Proof Program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" -version = "1.14.22" +version = "1.14.23" license = "Apache-2.0" edition = "2021" @@ -12,6 +12,6 @@ bytemuck = { version = "1.11.0", features = ["derive"] } getrandom = { version = "0.1", features = ["dummy"] } num-derive = "0.3" num-traits = "0.2" -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.22" } -solana-sdk = { path = "../../sdk", version = "=1.14.22" } -solana-zk-token-sdk = { path = "../../zk-token-sdk", version = "=1.14.22" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.23" } +solana-sdk = { path = "../../sdk", version = "=1.14.23" } +solana-zk-token-sdk = { path = "../../zk-token-sdk", version = "=1.14.23" } diff --git a/rayon-threadlimit/Cargo.toml b/rayon-threadlimit/Cargo.toml index b9568adad7e464..849656657c5827 100644 --- a/rayon-threadlimit/Cargo.toml +++ b/rayon-threadlimit/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-rayon-threadlimit" -version = "1.14.22" +version = "1.14.23" description = "solana-rayon-threadlimit" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-rayon-threadlimit" diff --git a/rbpf-cli/Cargo.toml b/rbpf-cli/Cargo.toml index ca8df109d23173..7d2edbe6378155 100644 --- a/rbpf-cli/Cargo.toml +++ b/rbpf-cli/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "rbpf-cli" -version = "1.14.22" +version = "1.14.23" description = "CLI to test and analyze eBPF programs" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/rbpf" @@ -13,8 +13,8 @@ publish = false clap = { version = "3.1.5", features = ["cargo"] } serde = "1.0.138" serde_json = "1.0.81" -solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.22" } -solana-logger = { path = "../logger", version = "=1.14.22" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.22" } -solana-sdk = { path = "../sdk", version = "=1.14.22" } +solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.23" } +solana-logger = { path = "../logger", version = "=1.14.23" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.23" } +solana-sdk = { path = "../sdk", version = "=1.14.23" } solana_rbpf = "=0.2.31" diff --git a/remote-wallet/Cargo.toml b/remote-wallet/Cargo.toml index 9c37629b8c5f3f..8a0b5afca2b730 100644 --- a/remote-wallet/Cargo.toml +++ b/remote-wallet/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-remote-wallet" description = "Blockchain, Rebuilt for Scale" -version = "1.14.22" +version = "1.14.23" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -19,7 +19,7 @@ num-traits = { version = "0.2" } parking_lot = "0.12" qstring = "0.7.2" semver = "1.0" -solana-sdk = { path = "../sdk", version = "=1.14.22" } +solana-sdk = { path = "../sdk", version = "=1.14.23" } thiserror = "1.0" uriparse = "0.6.4" diff --git a/rpc-test/Cargo.toml b/rpc-test/Cargo.toml index f916d141c34112..766c6b447af20f 100644 --- a/rpc-test/Cargo.toml +++ b/rpc-test/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-rpc-test" -version = "1.14.22" +version = "1.14.23" description = "Solana RPC Test" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -19,17 +19,17 @@ log = "0.4.17" reqwest = { version = "0.11.11", default-features = false, features = ["blocking", "brotli", "deflate", "gzip", "rustls-tls", "json"] } serde = "1.0.138" serde_json = "1.0.81" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.22" } -solana-client = { path = "../client", version = "=1.14.22" } -solana-rpc = { path = "../rpc", version = "=1.14.22" } -solana-sdk = { path = "../sdk", version = "=1.14.22" } -solana-streamer = { path = "../streamer", version = "=1.14.22" } -solana-test-validator = { path = "../test-validator", version = "=1.14.22" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.22" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.23" } +solana-client = { path = "../client", version = "=1.14.23" } +solana-rpc = { path = "../rpc", version = "=1.14.23" } +solana-sdk = { path = "../sdk", version = "=1.14.23" } +solana-streamer = { path = "../streamer", version = "=1.14.23" } +solana-test-validator = { path = "../test-validator", version = "=1.14.23" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.23" } tokio = { version = "~1.14.1", features = ["full"] } [dev-dependencies] -solana-logger = { path = "../logger", version = "=1.14.22" } +solana-logger = { path = "../logger", version = "=1.14.23" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/rpc/Cargo.toml b/rpc/Cargo.toml index 0638a699684df3..1c1bd054efcc96 100644 --- a/rpc/Cargo.toml +++ b/rpc/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-rpc" -version = "1.14.22" +version = "1.14.23" description = "Solana RPC" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -29,26 +29,26 @@ serde = "1.0.138" serde_derive = "1.0.103" serde_json = "1.0.81" soketto = "0.7" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.22" } -solana-client = { path = "../client", version = "=1.14.22" } -solana-entry = { path = "../entry", version = "=1.14.22" } -solana-faucet = { path = "../faucet", version = "=1.14.22" } -solana-gossip = { path = "../gossip", version = "=1.14.22" } -solana-ledger = { path = "../ledger", version = "=1.14.22" } -solana-measure = { path = "../measure", version = "=1.14.22" } -solana-metrics = { path = "../metrics", version = "=1.14.22" } -solana-perf = { path = "../perf", version = "=1.14.22" } -solana-poh = { path = "../poh", version = "=1.14.22" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.22" } -solana-runtime = { path = "../runtime", version = "=1.14.22" } -solana-sdk = { path = "../sdk", version = "=1.14.22" } -solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.22" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.22" } -solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.22" } -solana-streamer = { path = "../streamer", version = "=1.14.22" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.22" } -solana-version = { path = "../version", version = "=1.14.22" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.22" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.23" } +solana-client = { path = "../client", version = "=1.14.23" } +solana-entry = { path = "../entry", version = "=1.14.23" } +solana-faucet = { path = "../faucet", version = "=1.14.23" } +solana-gossip = { path = "../gossip", version = "=1.14.23" } +solana-ledger = { path = "../ledger", version = "=1.14.23" } +solana-measure = { path = "../measure", version = "=1.14.23" } +solana-metrics = { path = "../metrics", version = "=1.14.23" } +solana-perf = { path = "../perf", version = "=1.14.23" } +solana-poh = { path = "../poh", version = "=1.14.23" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.23" } +solana-runtime = { path = "../runtime", version = "=1.14.23" } +solana-sdk = { path = "../sdk", version = "=1.14.23" } +solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.23" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.23" } +solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.23" } +solana-streamer = { path = "../streamer", version = "=1.14.23" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.23" } +solana-version = { path = "../version", version = "=1.14.23" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.23" } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } spl-token-2022 = { version = "=0.6.1", features = ["no-entrypoint"] } stream-cancel = "0.8.1" @@ -58,9 +58,9 @@ tokio-util = { version = "0.6", features = ["codec", "compat"] } [dev-dependencies] serial_test = "0.8.0" -solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.22" } -solana-net-utils = { path = "../net-utils", version = "=1.14.22" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.22" } +solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.23" } +solana-net-utils = { path = "../net-utils", version = "=1.14.23" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.23" } symlink = "0.1.0" [lib] diff --git a/runtime/Cargo.toml b/runtime/Cargo.toml index e894d7cbf658b7..66a601b0c9ae88 100644 --- a/runtime/Cargo.toml +++ b/runtime/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-runtime" -version = "1.14.22" +version = "1.14.23" description = "Solana runtime" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -40,21 +40,21 @@ rayon = "1.5.3" regex = "1.5.6" serde = { version = "1.0.138", features = ["rc"] } serde_derive = "1.0.103" -solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.22" } -solana-bucket-map = { path = "../bucket_map", version = "=1.14.22" } -solana-compute-budget-program = { path = "../programs/compute-budget", version = "=1.14.22" } -solana-config-program = { path = "../programs/config", version = "=1.14.22" } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.22" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.22" } -solana-measure = { path = "../measure", version = "=1.14.22" } -solana-metrics = { path = "../metrics", version = "=1.14.22" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.22" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.22" } -solana-sdk = { path = "../sdk", version = "=1.14.22" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.22" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.22" } -solana-zk-token-proof-program = { path = "../programs/zk-token-proof", version = "=1.14.22" } -solana-zk-token-sdk = { path = "../zk-token-sdk", version = "=1.14.22" } +solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.23" } +solana-bucket-map = { path = "../bucket_map", version = "=1.14.23" } +solana-compute-budget-program = { path = "../programs/compute-budget", version = "=1.14.23" } +solana-config-program = { path = "../programs/config", version = "=1.14.23" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.23" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.23" } +solana-measure = { path = "../measure", version = "=1.14.23" } +solana-metrics = { path = "../metrics", version = "=1.14.23" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.23" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.23" } +solana-sdk = { path = "../sdk", version = "=1.14.23" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.23" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.23" } +solana-zk-token-proof-program = { path = "../programs/zk-token-proof", version = "=1.14.23" } +solana-zk-token-sdk = { path = "../zk-token-sdk", version = "=1.14.23" } strum = { version = "0.24", features = ["derive"] } strum_macros = "0.24" symlink = "0.1.0" @@ -72,7 +72,7 @@ assert_matches = "1.5.0" ed25519-dalek = "=1.0.1" libsecp256k1 = "0.6.0" rand_chacha = "0.2.2" -solana-logger = { path = "../logger", version = "=1.14.22" } +solana-logger = { path = "../logger", version = "=1.14.23" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/runtime/store-tool/Cargo.toml b/runtime/store-tool/Cargo.toml index c4d9ee80794c2c..be355c0fefa988 100644 --- a/runtime/store-tool/Cargo.toml +++ b/runtime/store-tool/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-store-tool" description = "Tool to inspect append vecs" -version = "1.14.22" +version = "1.14.23" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -12,9 +12,9 @@ publish = false [dependencies] clap = "2.33.1" log = { version = "0.4.17" } -solana-logger = { path = "../../logger", version = "=1.14.22" } -solana-runtime = { path = "..", version = "=1.14.22" } -solana-version = { path = "../../version", version = "=1.14.22" } +solana-logger = { path = "../../logger", version = "=1.14.23" } +solana-runtime = { path = "..", version = "=1.14.23" } +solana-version = { path = "../../version", version = "=1.14.23" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/sdk/Cargo.toml b/sdk/Cargo.toml index a18fd774927418..b929d68deda531 100644 --- a/sdk/Cargo.toml +++ b/sdk/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-sdk" -version = "1.14.22" +version = "1.14.23" description = "Solana SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -71,11 +71,11 @@ serde_derive = "1.0.103" serde_json = { version = "1.0.81", optional = true } sha2 = "0.10.2" sha3 = { version = "0.10.1", optional = true } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.22" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.22" } -solana-logger = { path = "../logger", version = "=1.14.22", optional = true } -solana-program = { path = "program", version = "=1.14.22" } -solana-sdk-macro = { path = "macro", version = "=1.14.22" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.23" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.23" } +solana-logger = { path = "../logger", version = "=1.14.23", optional = true } +solana-program = { path = "program", version = "=1.14.23" } +solana-sdk-macro = { path = "macro", version = "=1.14.23" } thiserror = "1.0" uriparse = "0.6.4" wasm-bindgen = "0.2" diff --git a/sdk/cargo-build-bpf/Cargo.toml b/sdk/cargo-build-bpf/Cargo.toml index 3aecabba00e22a..f34a925e91013b 100644 --- a/sdk/cargo-build-bpf/Cargo.toml +++ b/sdk/cargo-build-bpf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-cargo-build-bpf" -version = "1.14.22" +version = "1.14.23" description = "Compile a local package and all of its dependencies using the Solana SBF SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,7 +12,7 @@ publish = false [dependencies] cargo_metadata = "0.15.0" clap = { version = "3.1.5", features = ["cargo", "env"] } -solana-sdk = { path = "..", version = "=1.14.22" } +solana-sdk = { path = "..", version = "=1.14.23" } [features] program = [] diff --git a/sdk/cargo-build-sbf/Cargo.toml b/sdk/cargo-build-sbf/Cargo.toml index 6c23eb237b5d84..1ca7b3225218c0 100644 --- a/sdk/cargo-build-sbf/Cargo.toml +++ b/sdk/cargo-build-sbf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-cargo-build-sbf" -version = "1.14.22" +version = "1.14.23" description = "Compile a local package and all of its dependencies using the Solana SBF SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -15,9 +15,9 @@ cargo_metadata = "0.15.0" clap = { version = "3.1.5", features = ["cargo", "env"] } log = { version = "0.4.14", features = ["std"] } regex = "1.5.6" -solana-download-utils = { path = "../../download-utils", version = "=1.14.22" } -solana-logger = { path = "../../logger", version = "=1.14.22" } -solana-sdk = { path = "..", version = "=1.14.22" } +solana-download-utils = { path = "../../download-utils", version = "=1.14.23" } +solana-logger = { path = "../../logger", version = "=1.14.23" } +solana-sdk = { path = "..", version = "=1.14.23" } tar = "0.4.38" [dev-dependencies] diff --git a/sdk/cargo-build-sbf/tests/crates/fail/Cargo.toml b/sdk/cargo-build-sbf/tests/crates/fail/Cargo.toml index 01670aae4433c3..9ac68286be060a 100644 --- a/sdk/cargo-build-sbf/tests/crates/fail/Cargo.toml +++ b/sdk/cargo-build-sbf/tests/crates/fail/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "fail" -version = "1.14.22" +version = "1.14.23" description = "Solana SBF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ edition = "2021" publish = false [dependencies] -solana-program = { path = "../../../../program", version = "=1.14.22" } +solana-program = { path = "../../../../program", version = "=1.14.23" } [lib] crate-type = ["cdylib"] diff --git a/sdk/cargo-build-sbf/tests/crates/noop/Cargo.toml b/sdk/cargo-build-sbf/tests/crates/noop/Cargo.toml index 79fd1a09ff2fdd..5c152a1649c81e 100644 --- a/sdk/cargo-build-sbf/tests/crates/noop/Cargo.toml +++ b/sdk/cargo-build-sbf/tests/crates/noop/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "noop" -version = "1.14.22" +version = "1.14.23" description = "Solana SBF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ edition = "2021" publish = false [dependencies] -solana-program = { path = "../../../../program", version = "=1.14.22" } +solana-program = { path = "../../../../program", version = "=1.14.23" } [lib] crate-type = ["cdylib"] diff --git a/sdk/cargo-test-bpf/Cargo.toml b/sdk/cargo-test-bpf/Cargo.toml index e9465229088750..af69129de28a4b 100644 --- a/sdk/cargo-test-bpf/Cargo.toml +++ b/sdk/cargo-test-bpf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-cargo-test-bpf" -version = "1.14.22" +version = "1.14.23" description = "Execute all unit and integration tests after building with the Solana SBF SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/sdk/cargo-test-sbf/Cargo.toml b/sdk/cargo-test-sbf/Cargo.toml index 4b2dc3f4285c2c..a1a5c8ccb1a1bb 100644 --- a/sdk/cargo-test-sbf/Cargo.toml +++ b/sdk/cargo-test-sbf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-cargo-test-sbf" -version = "1.14.22" +version = "1.14.23" description = "Execute all unit and integration tests after building with the Solana SBF SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/sdk/gen-headers/Cargo.toml b/sdk/gen-headers/Cargo.toml index 5ebc43a044fca8..13cbeb7328598b 100644 --- a/sdk/gen-headers/Cargo.toml +++ b/sdk/gen-headers/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "gen-headers" -version = "1.14.22" +version = "1.14.23" edition = "2021" license = "Apache-2.0" publish = false diff --git a/sdk/macro/Cargo.toml b/sdk/macro/Cargo.toml index 30b523d6cf5456..50826d1155a98b 100644 --- a/sdk/macro/Cargo.toml +++ b/sdk/macro/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-sdk-macro" -version = "1.14.22" +version = "1.14.23" description = "Solana SDK Macro" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/sdk/program/Cargo.toml b/sdk/program/Cargo.toml index 4b8ef6aee0b569..20776b2599746a 100644 --- a/sdk/program/Cargo.toml +++ b/sdk/program/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-program" -version = "1.14.22" +version = "1.14.23" description = "Solana Program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -31,9 +31,9 @@ serde_derive = "1.0" serde_json = "1.0" sha2 = "0.10.0" sha3 = "0.10.0" -solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.22" } -solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.22" } -solana-sdk-macro = { path = "../macro", version = "=1.14.22" } +solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.23" } +solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.23" } +solana-sdk-macro = { path = "../macro", version = "=1.14.23" } thiserror = "1.0" [target.'cfg(not(target_os = "solana"))'.dependencies] @@ -50,7 +50,7 @@ wasm-bindgen = "0.2" zeroize = { version = "1.3", default-features = true, features = ["zeroize_derive"] } [target.'cfg(not(target_os = "solana"))'.dev-dependencies] -solana-logger = { path = "../../logger", version = "=1.14.22" } +solana-logger = { path = "../../logger", version = "=1.14.23" } [target.'cfg(target_arch = "wasm32")'.dependencies] console_error_panic_hook = "0.1.7" diff --git a/send-transaction-service/Cargo.toml b/send-transaction-service/Cargo.toml index b07de0e49a04c3..4ff4100168516f 100644 --- a/send-transaction-service/Cargo.toml +++ b/send-transaction-service/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-send-transaction-service" -version = "1.14.22" +version = "1.14.23" description = "Solana send transaction service" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,14 +12,14 @@ edition = "2021" [dependencies] crossbeam-channel = "0.5" log = "0.4.17" -solana-client = { path = "../client", version = "=1.14.22" } -solana-measure = { path = "../measure", version = "=1.14.22" } -solana-metrics = { path = "../metrics", version = "=1.14.22" } -solana-runtime = { path = "../runtime", version = "=1.14.22" } -solana-sdk = { path = "../sdk", version = "=1.14.22" } +solana-client = { path = "../client", version = "=1.14.23" } +solana-measure = { path = "../measure", version = "=1.14.23" } +solana-metrics = { path = "../metrics", version = "=1.14.23" } +solana-runtime = { path = "../runtime", version = "=1.14.23" } +solana-sdk = { path = "../sdk", version = "=1.14.23" } [dev-dependencies] -solana-logger = { path = "../logger", version = "=1.14.22" } +solana-logger = { path = "../logger", version = "=1.14.23" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/stake-accounts/Cargo.toml b/stake-accounts/Cargo.toml index 8674cd735e0a4a..0a6bc598b7b9a1 100644 --- a/stake-accounts/Cargo.toml +++ b/stake-accounts/Cargo.toml @@ -3,7 +3,7 @@ name = "solana-stake-accounts" description = "Blockchain, Rebuilt for Scale" authors = ["Solana Maintainers "] edition = "2021" -version = "1.14.22" +version = "1.14.23" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -11,15 +11,15 @@ documentation = "https://docs.rs/solana-stake-accounts" [dependencies] clap = "2.33.1" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.22" } -solana-cli-config = { path = "../cli-config", version = "=1.14.22" } -solana-client = { path = "../client", version = "=1.14.22" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.22" } -solana-sdk = { path = "../sdk", version = "=1.14.22" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.22" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.23" } +solana-cli-config = { path = "../cli-config", version = "=1.14.23" } +solana-client = { path = "../client", version = "=1.14.23" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.23" } +solana-sdk = { path = "../sdk", version = "=1.14.23" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.23" } [dev-dependencies] -solana-runtime = { path = "../runtime", version = "=1.14.22" } +solana-runtime = { path = "../runtime", version = "=1.14.23" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/storage-bigtable/Cargo.toml b/storage-bigtable/Cargo.toml index 12a4eea13fe352..7c473bc6d06c94 100644 --- a/storage-bigtable/Cargo.toml +++ b/storage-bigtable/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-storage-bigtable" -version = "1.14.22" +version = "1.14.23" description = "Solana Storage BigTable" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -27,10 +27,10 @@ prost-types = "0.11.0" serde = "1.0.138" serde_derive = "1.0.103" smpl_jwt = "0.7.1" -solana-metrics = { path = "../metrics", version = "=1.14.22" } -solana-sdk = { path = "../sdk", version = "=1.14.22" } -solana-storage-proto = { path = "../storage-proto", version = "=1.14.22" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.22" } +solana-metrics = { path = "../metrics", version = "=1.14.23" } +solana-sdk = { path = "../sdk", version = "=1.14.23" } +solana-storage-proto = { path = "../storage-proto", version = "=1.14.23" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.23" } thiserror = "1.0" tokio = "1" tonic = { version = "0.8.0", features = ["tls", "transport"] } diff --git a/storage-bigtable/build-proto/Cargo.toml b/storage-bigtable/build-proto/Cargo.toml index 5bce7504b6dd46..7310c596e83add 100644 --- a/storage-bigtable/build-proto/Cargo.toml +++ b/storage-bigtable/build-proto/Cargo.toml @@ -7,7 +7,7 @@ license = "Apache-2.0" name = "proto" publish = false repository = "https://github.com/solana-labs/solana" -version = "1.14.22" +version = "1.14.23" [dependencies] tonic-build = "0.8.0" diff --git a/storage-proto/Cargo.toml b/storage-proto/Cargo.toml index 642e9fbf9042c3..2b98d25b8d018e 100644 --- a/storage-proto/Cargo.toml +++ b/storage-proto/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-storage-proto" -version = "1.14.22" +version = "1.14.23" description = "Solana Storage Protobuf Definitions" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,9 +14,9 @@ bincode = "1.3.3" bs58 = "0.4.0" prost = "0.11.0" serde = "1.0.138" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.22" } -solana-sdk = { path = "../sdk", version = "=1.14.22" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.22" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.23" } +solana-sdk = { path = "../sdk", version = "=1.14.23" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.23" } [dev-dependencies] enum-iterator = "0.8.1" diff --git a/streamer/Cargo.toml b/streamer/Cargo.toml index 75825a690dd65f..b8dcf1eb1a98b3 100644 --- a/streamer/Cargo.toml +++ b/streamer/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-streamer" -version = "1.14.22" +version = "1.14.23" description = "Solana Streamer" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -25,15 +25,15 @@ quinn = "0.8.3" rand = "0.7.0" rcgen = "0.9.2" rustls = { version = "0.20.6", features = ["dangerous_configuration"] } -solana-metrics = { path = "../metrics", version = "=1.14.22" } -solana-perf = { path = "../perf", version = "=1.14.22" } -solana-sdk = { path = "../sdk", version = "=1.14.22" } +solana-metrics = { path = "../metrics", version = "=1.14.23" } +solana-perf = { path = "../perf", version = "=1.14.23" } +solana-sdk = { path = "../sdk", version = "=1.14.23" } thiserror = "1.0" tokio = { version = "1", features = ["full"] } x509-parser = "0.14.0" [dev-dependencies] -solana-logger = { path = "../logger", version = "=1.14.22" } +solana-logger = { path = "../logger", version = "=1.14.23" } [lib] crate-type = ["lib"] diff --git a/sys-tuner/Cargo.toml b/sys-tuner/Cargo.toml index 8b9b3aeef8856e..134c7f8b65c9b8 100644 --- a/sys-tuner/Cargo.toml +++ b/sys-tuner/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-sys-tuner" description = "The solana cluster system tuner daemon" -version = "1.14.22" +version = "1.14.23" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,8 +14,8 @@ publish = true clap = "2.33.1" libc = "0.2.126" log = "0.4.17" -solana-logger = { path = "../logger", version = "=1.14.22" } -solana-version = { path = "../version", version = "=1.14.22" } +solana-logger = { path = "../logger", version = "=1.14.23" } +solana-version = { path = "../version", version = "=1.14.23" } [target."cfg(unix)".dependencies] unix_socket2 = "0.5.4" diff --git a/test-validator/Cargo.toml b/test-validator/Cargo.toml index 576a3dcec51794..6e72ef9ed69272 100644 --- a/test-validator/Cargo.toml +++ b/test-validator/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "solana-test-validator" description = "Blockchain, Rebuilt for Scale" -version = "1.14.22" +version = "1.14.23" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-test-validator" readme = "../README.md" @@ -15,19 +15,19 @@ base64 = "0.13.0" log = "0.4.17" serde_derive = "1.0.103" serde_json = "1.0.81" -solana-cli-output = { path = "../cli-output", version = "=1.14.22" } -solana-client = { path = "../client", version = "=1.14.22" } -solana-core = { path = "../core", version = "=1.14.22" } -solana-gossip = { path = "../gossip", version = "=1.14.22" } -solana-ledger = { path = "../ledger", version = "=1.14.22" } -solana-logger = { path = "../logger", version = "=1.14.22" } -solana-net-utils = { path = "../net-utils", version = "=1.14.22" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.22" } -solana-program-test = { path = "../program-test", version = "=1.14.22" } -solana-rpc = { path = "../rpc", version = "=1.14.22" } -solana-runtime = { path = "../runtime", version = "=1.14.22" } -solana-sdk = { path = "../sdk", version = "=1.14.22" } -solana-streamer = { path = "../streamer", version = "=1.14.22" } +solana-cli-output = { path = "../cli-output", version = "=1.14.23" } +solana-client = { path = "../client", version = "=1.14.23" } +solana-core = { path = "../core", version = "=1.14.23" } +solana-gossip = { path = "../gossip", version = "=1.14.23" } +solana-ledger = { path = "../ledger", version = "=1.14.23" } +solana-logger = { path = "../logger", version = "=1.14.23" } +solana-net-utils = { path = "../net-utils", version = "=1.14.23" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.23" } +solana-program-test = { path = "../program-test", version = "=1.14.23" } +solana-rpc = { path = "../rpc", version = "=1.14.23" } +solana-runtime = { path = "../runtime", version = "=1.14.23" } +solana-sdk = { path = "../sdk", version = "=1.14.23" } +solana-streamer = { path = "../streamer", version = "=1.14.23" } tokio = { version = "1", features = ["full"] } [package.metadata.docs.rs] diff --git a/tokens/Cargo.toml b/tokens/Cargo.toml index a25a9f545de629..76e31eac82053a 100644 --- a/tokens/Cargo.toml +++ b/tokens/Cargo.toml @@ -3,7 +3,7 @@ name = "solana-tokens" description = "Blockchain, Rebuilt for Scale" authors = ["Solana Maintainers "] edition = "2021" -version = "1.14.22" +version = "1.14.23" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -19,14 +19,14 @@ indexmap = "1.9.1" indicatif = "0.16.2" pickledb = { version = "0.5.1", default-features = false, features = ["yaml"] } serde = { version = "1.0", features = ["derive"] } -solana-account-decoder = { path = "../account-decoder", version = "=1.14.22" } -solana-clap-utils = { path = "../clap-utils", version = "=1.14.22" } -solana-cli-config = { path = "../cli-config", version = "=1.14.22" } -solana-client = { path = "../client", version = "=1.14.22" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.22" } -solana-sdk = { path = "../sdk", version = "=1.14.22" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.22" } -solana-version = { path = "../version", version = "=1.14.22" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.23" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.23" } +solana-cli-config = { path = "../cli-config", version = "=1.14.23" } +solana-client = { path = "../client", version = "=1.14.23" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.23" } +solana-sdk = { path = "../sdk", version = "=1.14.23" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.23" } +solana-version = { path = "../version", version = "=1.14.23" } spl-associated-token-account = { version = "=1.1.3" } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } tempfile = "3.4.0" @@ -34,6 +34,6 @@ thiserror = "1.0" [dev-dependencies] bincode = "1.3.3" -solana-logger = { path = "../logger", version = "=1.14.22" } -solana-streamer = { path = "../streamer", version = "=1.14.22" } -solana-test-validator = { path = "../test-validator", version = "=1.14.22" } +solana-logger = { path = "../logger", version = "=1.14.23" } +solana-streamer = { path = "../streamer", version = "=1.14.23" } +solana-test-validator = { path = "../test-validator", version = "=1.14.23" } diff --git a/transaction-dos/Cargo.toml b/transaction-dos/Cargo.toml index 0b0914fa104d52..72fda4bee7e340 100644 --- a/transaction-dos/Cargo.toml +++ b/transaction-dos/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-transaction-dos" -version = "1.14.22" +version = "1.14.23" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,23 +14,23 @@ clap = "2.33.1" log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.22" } -solana-cli = { path = "../cli", version = "=1.14.22" } -solana-client = { path = "../client", version = "=1.14.22" } -solana-core = { path = "../core", version = "=1.14.22" } -solana-faucet = { path = "../faucet", version = "=1.14.22" } -solana-gossip = { path = "../gossip", version = "=1.14.22" } -solana-logger = { path = "../logger", version = "=1.14.22" } -solana-measure = { path = "../measure", version = "=1.14.22" } -solana-net-utils = { path = "../net-utils", version = "=1.14.22" } -solana-runtime = { path = "../runtime", version = "=1.14.22" } -solana-sdk = { path = "../sdk", version = "=1.14.22" } -solana-streamer = { path = "../streamer", version = "=1.14.22" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.22" } -solana-version = { path = "../version", version = "=1.14.22" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.23" } +solana-cli = { path = "../cli", version = "=1.14.23" } +solana-client = { path = "../client", version = "=1.14.23" } +solana-core = { path = "../core", version = "=1.14.23" } +solana-faucet = { path = "../faucet", version = "=1.14.23" } +solana-gossip = { path = "../gossip", version = "=1.14.23" } +solana-logger = { path = "../logger", version = "=1.14.23" } +solana-measure = { path = "../measure", version = "=1.14.23" } +solana-net-utils = { path = "../net-utils", version = "=1.14.23" } +solana-runtime = { path = "../runtime", version = "=1.14.23" } +solana-sdk = { path = "../sdk", version = "=1.14.23" } +solana-streamer = { path = "../streamer", version = "=1.14.23" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.23" } +solana-version = { path = "../version", version = "=1.14.23" } [dev-dependencies] -solana-local-cluster = { path = "../local-cluster", version = "=1.14.22" } +solana-local-cluster = { path = "../local-cluster", version = "=1.14.23" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/transaction-status/Cargo.toml b/transaction-status/Cargo.toml index 454aadd0857127..015d30e096a638 100644 --- a/transaction-status/Cargo.toml +++ b/transaction-status/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-transaction-status" -version = "1.14.22" +version = "1.14.23" description = "Solana transaction status types" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -20,12 +20,12 @@ log = "0.4.17" serde = "1.0.138" serde_derive = "1.0.103" serde_json = "1.0.81" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.22" } -solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.22" } -solana-measure = { path = "../measure", version = "=1.14.22" } -solana-metrics = { path = "../metrics", version = "=1.14.22" } -solana-sdk = { path = "../sdk", version = "=1.14.22" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.22" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.23" } +solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.23" } +solana-measure = { path = "../measure", version = "=1.14.23" } +solana-metrics = { path = "../metrics", version = "=1.14.23" } +solana-sdk = { path = "../sdk", version = "=1.14.23" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.23" } spl-associated-token-account = { version = "=1.1.3", features = ["no-entrypoint"] } spl-memo = { version = "=3.0.1", features = ["no-entrypoint"] } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } diff --git a/upload-perf/Cargo.toml b/upload-perf/Cargo.toml index aba685203c6002..79c9b6b9529635 100644 --- a/upload-perf/Cargo.toml +++ b/upload-perf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-upload-perf" -version = "1.14.22" +version = "1.14.23" description = "Metrics Upload Utility" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -11,7 +11,7 @@ publish = false [dependencies] serde_json = "1.0.81" -solana-metrics = { path = "../metrics", version = "=1.14.22" } +solana-metrics = { path = "../metrics", version = "=1.14.23" } [[bin]] name = "solana-upload-perf" diff --git a/validator/Cargo.toml b/validator/Cargo.toml index 6e8b13fc53e77c..c855faabec2d83 100644 --- a/validator/Cargo.toml +++ b/validator/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-validator" description = "Blockchain, Rebuilt for Scale" -version = "1.14.22" +version = "1.14.23" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -28,30 +28,30 @@ num_cpus = "1.13.1" rand = "0.7.0" serde = "1.0.138" serde_json = "1.0.81" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.22" } -solana-cli-config = { path = "../cli-config", version = "=1.14.22" } -solana-client = { path = "../client", version = "=1.14.22" } -solana-core = { path = "../core", version = "=1.14.22" } -solana-download-utils = { path = "../download-utils", version = "=1.14.22" } -solana-entry = { path = "../entry", version = "=1.14.22" } -solana-faucet = { path = "../faucet", version = "=1.14.22" } -solana-genesis-utils = { path = "../genesis-utils", version = "=1.14.22" } -solana-gossip = { path = "../gossip", version = "=1.14.22" } -solana-ledger = { path = "../ledger", version = "=1.14.22" } -solana-logger = { path = "../logger", version = "=1.14.22" } -solana-metrics = { path = "../metrics", version = "=1.14.22" } -solana-net-utils = { path = "../net-utils", version = "=1.14.22" } -solana-perf = { path = "../perf", version = "=1.14.22" } -solana-poh = { path = "../poh", version = "=1.14.22" } -solana-rpc = { path = "../rpc", version = "=1.14.22" } -solana-runtime = { path = "../runtime", version = "=1.14.22" } -solana-sdk = { path = "../sdk", version = "=1.14.22" } -solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.22" } -solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.22" } -solana-streamer = { path = "../streamer", version = "=1.14.22" } -solana-test-validator = { path = "../test-validator", version = "=1.14.22" } -solana-version = { path = "../version", version = "=1.14.22" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.22" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.23" } +solana-cli-config = { path = "../cli-config", version = "=1.14.23" } +solana-client = { path = "../client", version = "=1.14.23" } +solana-core = { path = "../core", version = "=1.14.23" } +solana-download-utils = { path = "../download-utils", version = "=1.14.23" } +solana-entry = { path = "../entry", version = "=1.14.23" } +solana-faucet = { path = "../faucet", version = "=1.14.23" } +solana-genesis-utils = { path = "../genesis-utils", version = "=1.14.23" } +solana-gossip = { path = "../gossip", version = "=1.14.23" } +solana-ledger = { path = "../ledger", version = "=1.14.23" } +solana-logger = { path = "../logger", version = "=1.14.23" } +solana-metrics = { path = "../metrics", version = "=1.14.23" } +solana-net-utils = { path = "../net-utils", version = "=1.14.23" } +solana-perf = { path = "../perf", version = "=1.14.23" } +solana-poh = { path = "../poh", version = "=1.14.23" } +solana-rpc = { path = "../rpc", version = "=1.14.23" } +solana-runtime = { path = "../runtime", version = "=1.14.23" } +solana-sdk = { path = "../sdk", version = "=1.14.23" } +solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.23" } +solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.23" } +solana-streamer = { path = "../streamer", version = "=1.14.23" } +solana-test-validator = { path = "../test-validator", version = "=1.14.23" } +solana-version = { path = "../version", version = "=1.14.23" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.23" } symlink = "0.1.0" [target.'cfg(not(target_env = "msvc"))'.dependencies] diff --git a/version/Cargo.toml b/version/Cargo.toml index ba6cd3033eb031..16e564588b9104 100644 --- a/version/Cargo.toml +++ b/version/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-version" -version = "1.14.22" +version = "1.14.23" description = "Solana Version" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,9 +14,9 @@ log = "0.4.17" semver = "1.0.10" serde = "1.0.138" serde_derive = "1.0.103" -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.22" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.22" } -solana-sdk = { path = "../sdk", version = "=1.14.22" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.23" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.23" } +solana-sdk = { path = "../sdk", version = "=1.14.23" } [lib] name = "solana_version" diff --git a/watchtower/Cargo.toml b/watchtower/Cargo.toml index eafa3f8c2f8101..39e3905f404f1c 100644 --- a/watchtower/Cargo.toml +++ b/watchtower/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-watchtower" description = "Blockchain, Rebuilt for Scale" -version = "1.14.22" +version = "1.14.23" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -13,15 +13,15 @@ documentation = "https://docs.rs/solana-watchtower" clap = "2.33.1" humantime = "2.0.1" log = "0.4.17" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.22" } -solana-cli-config = { path = "../cli-config", version = "=1.14.22" } -solana-cli-output = { path = "../cli-output", version = "=1.14.22" } -solana-client = { path = "../client", version = "=1.14.22" } -solana-logger = { path = "../logger", version = "=1.14.22" } -solana-metrics = { path = "../metrics", version = "=1.14.22" } -solana-notifier = { path = "../notifier", version = "=1.14.22" } -solana-sdk = { path = "../sdk", version = "=1.14.22" } -solana-version = { path = "../version", version = "=1.14.22" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.23" } +solana-cli-config = { path = "../cli-config", version = "=1.14.23" } +solana-cli-output = { path = "../cli-output", version = "=1.14.23" } +solana-client = { path = "../client", version = "=1.14.23" } +solana-logger = { path = "../logger", version = "=1.14.23" } +solana-metrics = { path = "../metrics", version = "=1.14.23" } +solana-notifier = { path = "../notifier", version = "=1.14.23" } +solana-sdk = { path = "../sdk", version = "=1.14.23" } +solana-version = { path = "../version", version = "=1.14.23" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/zk-token-sdk/Cargo.toml b/zk-token-sdk/Cargo.toml index d361a3dc6340eb..77c4b4beab5882 100644 --- a/zk-token-sdk/Cargo.toml +++ b/zk-token-sdk/Cargo.toml @@ -3,7 +3,7 @@ name = "solana-zk-token-sdk" description = "Solana Zk Token SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" -version = "1.14.22" +version = "1.14.23" license = "Apache-2.0" edition = "2021" @@ -12,7 +12,7 @@ base64 = "0.13" bytemuck = { version = "1.11.0", features = ["derive"] } num-derive = "0.3" num-traits = "0.2" -solana-program = { path = "../sdk/program", version = "=1.14.22" } +solana-program = { path = "../sdk/program", version = "=1.14.23" } [target.'cfg(not(target_os = "solana"))'.dependencies] aes-gcm-siv = "0.10.3" @@ -29,7 +29,7 @@ rand = "0.7" serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" sha3 = "0.9" -solana-sdk = { path = "../sdk", version = "=1.14.22" } +solana-sdk = { path = "../sdk", version = "=1.14.23" } subtle = "2" thiserror = "1.0" zeroize = { version = "1.3", default-features = false, features = ["zeroize_derive"] } From ca3dc220d5c4e90e1bd9c4f607cc819c2b749cd7 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Fri, 4 Aug 2023 22:05:59 +0000 Subject: [PATCH 453/465] v1.14: demotes unknown_epoch_staked_nodes metric to debug (backport of #32701) (#32712) demotes unknown_epoch_staked_nodes metric to debug (#32701) (cherry picked from commit b0a4669336545b607137e9ea5d64e32ca14404a6) Co-authored-by: behzad nouri --- core/src/cluster_nodes.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/cluster_nodes.rs b/core/src/cluster_nodes.rs index 2e1bfda0141964..3e13c821c30bdb 100644 --- a/core/src/cluster_nodes.rs +++ b/core/src/cluster_nodes.rs @@ -433,7 +433,7 @@ impl ClusterNodesCache { .iter() .find_map(|bank| bank.epoch_staked_nodes(epoch)); if epoch_staked_nodes.is_none() { - inc_new_counter_info!("cluster_nodes-unknown_epoch_staked_nodes", 1); + inc_new_counter_debug!("cluster_nodes-unknown_epoch_staked_nodes", 1); if epoch != root_bank.get_leader_schedule_epoch(root_bank.slot()) { return self.get(root_bank.slot(), root_bank, working_bank, cluster_info); } From 68c6fd139fb7b2650be5852270cee703cae6acbc Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Fri, 4 Aug 2023 22:17:05 -0500 Subject: [PATCH 454/465] v1.14: rolls out merkle shreds to ~50% of mainnet slots (backport of #32678) (#32719) rolls out merkle shreds to ~50% of mainnet slots (#32678) (cherry picked from commit 207820879b29d42676ee61996d5e10a3c4034f99) Co-authored-by: behzad nouri --- core/src/broadcast_stage/standard_broadcast_run.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/broadcast_stage/standard_broadcast_run.rs b/core/src/broadcast_stage/standard_broadcast_run.rs index e56bb16c6857d7..fceaa86d8bd97c 100644 --- a/core/src/broadcast_stage/standard_broadcast_run.rs +++ b/core/src/broadcast_stage/standard_broadcast_run.rs @@ -500,7 +500,7 @@ impl BroadcastRun for StandardBroadcastRun { fn should_use_merkle_variant(slot: Slot, cluster_type: ClusterType) -> bool { match cluster_type { ClusterType::Testnet | ClusterType::Devnet | ClusterType::Development => true, - ClusterType::MainnetBeta => (slot % 19) < 4, + ClusterType::MainnetBeta => (slot % 19) < 10, } } From 2a1d3be2e54a7f39435ffb495055c357601c8477 Mon Sep 17 00:00:00 2001 From: Will Hickey Date: Mon, 7 Aug 2023 22:45:48 -0500 Subject: [PATCH 455/465] Bump version to v1.14.24 (#32727) --- Cargo.lock | 492 +++++++++--------- account-decoder/Cargo.toml | 10 +- accounts-bench/Cargo.toml | 12 +- accounts-cluster-bench/Cargo.toml | 34 +- banking-bench/Cargo.toml | 26 +- banks-client/Cargo.toml | 12 +- banks-interface/Cargo.toml | 4 +- banks-server/Cargo.toml | 12 +- bench-streamer/Cargo.toml | 8 +- bench-tps/Cargo.toml | 38 +- bloom/Cargo.toml | 8 +- bucket_map/Cargo.toml | 8 +- clap-utils/Cargo.toml | 8 +- clap-v3-utils/Cargo.toml | 8 +- cli-config/Cargo.toml | 6 +- cli-output/Cargo.toml | 16 +- cli/Cargo.toml | 38 +- client-test/Cargo.toml | 32 +- client/Cargo.toml | 28 +- core/Cargo.toml | 56 +- dos/Cargo.toml | 30 +- download-utils/Cargo.toml | 6 +- entry/Cargo.toml | 16 +- faucet/Cargo.toml | 14 +- frozen-abi/Cargo.toml | 6 +- frozen-abi/macro/Cargo.toml | 2 +- genesis-utils/Cargo.toml | 8 +- genesis/Cargo.toml | 22 +- geyser-plugin-interface/Cargo.toml | 6 +- geyser-plugin-manager/Cargo.toml | 16 +- gossip/Cargo.toml | 38 +- install/Cargo.toml | 14 +- keygen/Cargo.toml | 12 +- ledger-tool/Cargo.toml | 30 +- ledger/Cargo.toml | 40 +- local-cluster/Cargo.toml | 28 +- log-analyzer/Cargo.toml | 6 +- logger/Cargo.toml | 2 +- measure/Cargo.toml | 4 +- merkle-root-bench/Cargo.toml | 12 +- merkle-tree/Cargo.toml | 4 +- metrics/Cargo.toml | 4 +- net-shaper/Cargo.toml | 4 +- net-utils/Cargo.toml | 8 +- notifier/Cargo.toml | 2 +- perf/Cargo.toml | 12 +- poh-bench/Cargo.toml | 14 +- poh/Cargo.toml | 20 +- program-runtime/Cargo.toml | 14 +- program-test/Cargo.toml | 20 +- .../address-lookup-table-tests/Cargo.toml | 8 +- programs/address-lookup-table/Cargo.toml | 12 +- programs/bpf-loader-tests/Cargo.toml | 8 +- programs/bpf/Cargo.lock | 490 ++++++++--------- programs/bpf/Cargo.toml | 28 +- programs/bpf/rust/128bit/Cargo.toml | 6 +- programs/bpf/rust/128bit_dep/Cargo.toml | 4 +- programs/bpf/rust/alloc/Cargo.toml | 4 +- programs/bpf/rust/call_depth/Cargo.toml | 4 +- programs/bpf/rust/caller_access/Cargo.toml | 4 +- programs/bpf/rust/curve25519/Cargo.toml | 6 +- programs/bpf/rust/custom_heap/Cargo.toml | 4 +- programs/bpf/rust/dep_crate/Cargo.toml | 6 +- .../bpf/rust/deprecated_loader/Cargo.toml | 4 +- programs/bpf/rust/dup_accounts/Cargo.toml | 4 +- programs/bpf/rust/error_handling/Cargo.toml | 4 +- programs/bpf/rust/external_spend/Cargo.toml | 4 +- programs/bpf/rust/finalize/Cargo.toml | 4 +- .../rust/get_minimum_delegation/Cargo.toml | 4 +- .../Cargo.toml | 4 +- .../rust/instruction_introspection/Cargo.toml | 4 +- programs/bpf/rust/invoke/Cargo.toml | 4 +- programs/bpf/rust/invoke_and_error/Cargo.toml | 4 +- programs/bpf/rust/invoke_and_ok/Cargo.toml | 4 +- .../bpf/rust/invoke_and_return/Cargo.toml | 4 +- programs/bpf/rust/invoked/Cargo.toml | 4 +- programs/bpf/rust/iter/Cargo.toml | 4 +- programs/bpf/rust/log_data/Cargo.toml | 4 +- programs/bpf/rust/many_args/Cargo.toml | 6 +- programs/bpf/rust/many_args_dep/Cargo.toml | 4 +- programs/bpf/rust/mem/Cargo.toml | 10 +- programs/bpf/rust/membuiltins/Cargo.toml | 6 +- programs/bpf/rust/noop/Cargo.toml | 4 +- programs/bpf/rust/panic/Cargo.toml | 4 +- programs/bpf/rust/param_passing/Cargo.toml | 6 +- .../bpf/rust/param_passing_dep/Cargo.toml | 4 +- programs/bpf/rust/rand/Cargo.toml | 4 +- programs/bpf/rust/realloc/Cargo.toml | 4 +- programs/bpf/rust/realloc_invoke/Cargo.toml | 6 +- .../bpf/rust/ro_account_modify/Cargo.toml | 4 +- programs/bpf/rust/ro_modify/Cargo.toml | 4 +- programs/bpf/rust/sanity/Cargo.toml | 10 +- .../bpf/rust/secp256k1_recover/Cargo.toml | 4 +- programs/bpf/rust/sha/Cargo.toml | 4 +- .../rust/sibling_inner_instruction/Cargo.toml | 4 +- .../bpf/rust/sibling_instruction/Cargo.toml | 4 +- programs/bpf/rust/simulation/Cargo.toml | 12 +- programs/bpf/rust/spoof1/Cargo.toml | 4 +- programs/bpf/rust/spoof1_system/Cargo.toml | 4 +- programs/bpf/rust/sysvar/Cargo.toml | 10 +- programs/bpf/rust/upgradeable/Cargo.toml | 4 +- programs/bpf/rust/upgraded/Cargo.toml | 4 +- programs/bpf_loader/Cargo.toml | 14 +- .../bpf_loader/gen-syscall-list/Cargo.toml | 2 +- programs/compute-budget/Cargo.toml | 6 +- programs/config/Cargo.toml | 8 +- programs/ed25519-tests/Cargo.toml | 6 +- programs/stake/Cargo.toml | 18 +- programs/vote/Cargo.toml | 14 +- programs/zk-token-proof-tests/Cargo.toml | 10 +- programs/zk-token-proof/Cargo.toml | 8 +- rayon-threadlimit/Cargo.toml | 2 +- rbpf-cli/Cargo.toml | 10 +- remote-wallet/Cargo.toml | 4 +- rpc-test/Cargo.toml | 18 +- rpc/Cargo.toml | 48 +- runtime/Cargo.toml | 34 +- runtime/store-tool/Cargo.toml | 8 +- sdk/Cargo.toml | 12 +- sdk/cargo-build-bpf/Cargo.toml | 4 +- sdk/cargo-build-sbf/Cargo.toml | 8 +- .../tests/crates/fail/Cargo.toml | 4 +- .../tests/crates/noop/Cargo.toml | 4 +- sdk/cargo-test-bpf/Cargo.toml | 2 +- sdk/cargo-test-sbf/Cargo.toml | 2 +- sdk/gen-headers/Cargo.toml | 2 +- sdk/macro/Cargo.toml | 2 +- sdk/program/Cargo.toml | 10 +- send-transaction-service/Cargo.toml | 14 +- stake-accounts/Cargo.toml | 16 +- storage-bigtable/Cargo.toml | 10 +- storage-bigtable/build-proto/Cargo.toml | 2 +- storage-proto/Cargo.toml | 8 +- streamer/Cargo.toml | 10 +- sys-tuner/Cargo.toml | 6 +- test-validator/Cargo.toml | 28 +- tokens/Cargo.toml | 24 +- transaction-dos/Cargo.toml | 32 +- transaction-status/Cargo.toml | 14 +- upload-perf/Cargo.toml | 4 +- validator/Cargo.toml | 50 +- version/Cargo.toml | 8 +- watchtower/Cargo.toml | 20 +- zk-token-sdk/Cargo.toml | 6 +- 144 files changed, 1278 insertions(+), 1278 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index f0e68cfac39157..720fc934a297d2 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1708,7 +1708,7 @@ dependencies = [ [[package]] name = "gen-headers" -version = "1.14.23" +version = "1.14.24" dependencies = [ "log", "regex", @@ -1716,7 +1716,7 @@ dependencies = [ [[package]] name = "gen-syscall-list" -version = "1.14.23" +version = "1.14.24" dependencies = [ "regex", ] @@ -3528,7 +3528,7 @@ dependencies = [ [[package]] name = "proto" -version = "1.14.23" +version = "1.14.24" dependencies = [ "protobuf-src", "tonic-build 0.8.0", @@ -3785,15 +3785,15 @@ dependencies = [ [[package]] name = "rbpf-cli" -version = "1.14.23" +version = "1.14.24" dependencies = [ "clap 3.2.23", "serde", "serde_json", "solana-bpf-loader-program", - "solana-logger 1.14.23", + "solana-logger 1.14.24", "solana-program-runtime", - "solana-sdk 1.14.23", + "solana-sdk 1.14.24", "solana_rbpf", ] @@ -4509,7 +4509,7 @@ dependencies = [ [[package]] name = "solana-account-decoder" -version = "1.14.23" +version = "1.14.24" dependencies = [ "Inflector", "base64 0.13.0", @@ -4522,7 +4522,7 @@ dependencies = [ "serde_json", "solana-address-lookup-table-program", "solana-config-program", - "solana-sdk 1.14.23", + "solana-sdk 1.14.24", "solana-vote-program", "spl-token", "spl-token-2022", @@ -4532,21 +4532,21 @@ dependencies = [ [[package]] name = "solana-accounts-bench" -version = "1.14.23" +version = "1.14.24" dependencies = [ "clap 2.33.3", "log", "rayon", - "solana-logger 1.14.23", + "solana-logger 1.14.24", "solana-measure", "solana-runtime", - "solana-sdk 1.14.23", + "solana-sdk 1.14.24", "solana-version", ] [[package]] name = "solana-accounts-cluster-bench" -version = "1.14.23" +version = "1.14.24" dependencies = [ "clap 2.33.3", "log", @@ -4559,11 +4559,11 @@ dependencies = [ "solana-faucet", "solana-gossip", "solana-local-cluster", - "solana-logger 1.14.23", + "solana-logger 1.14.24", "solana-measure", "solana-net-utils", "solana-runtime", - "solana-sdk 1.14.23", + "solana-sdk 1.14.24", "solana-streamer", "solana-test-validator", "solana-transaction-status", @@ -4573,7 +4573,7 @@ dependencies = [ [[package]] name = "solana-address-lookup-table-program" -version = "1.14.23" +version = "1.14.24" dependencies = [ "bincode", "bytemuck", @@ -4582,28 +4582,28 @@ dependencies = [ "num-traits", "rustc_version 0.4.0", "serde", - "solana-frozen-abi 1.14.23", - "solana-frozen-abi-macro 1.14.23", - "solana-program 1.14.23", + "solana-frozen-abi 1.14.24", + "solana-frozen-abi-macro 1.14.24", + "solana-program 1.14.24", "solana-program-runtime", - "solana-sdk 1.14.23", + "solana-sdk 1.14.24", "thiserror", ] [[package]] name = "solana-address-lookup-table-program-tests" -version = "1.14.23" +version = "1.14.24" dependencies = [ "assert_matches", "bincode", "solana-address-lookup-table-program", "solana-program-test", - "solana-sdk 1.14.23", + "solana-sdk 1.14.24", ] [[package]] name = "solana-banking-bench" -version = "1.14.23" +version = "1.14.24" dependencies = [ "clap 3.2.23", "crossbeam-channel", @@ -4614,27 +4614,27 @@ dependencies = [ "solana-core", "solana-gossip", "solana-ledger", - "solana-logger 1.14.23", + "solana-logger 1.14.24", "solana-measure", "solana-perf", "solana-poh", "solana-runtime", - "solana-sdk 1.14.23", + "solana-sdk 1.14.24", "solana-streamer", "solana-version", ] [[package]] name = "solana-banks-client" -version = "1.14.23" +version = "1.14.24" dependencies = [ "borsh", "futures 0.3.21", "solana-banks-interface", "solana-banks-server", - "solana-program 1.14.23", + "solana-program 1.14.24", "solana-runtime", - "solana-sdk 1.14.23", + "solana-sdk 1.14.24", "tarpc", "thiserror", "tokio", @@ -4643,16 +4643,16 @@ dependencies = [ [[package]] name = "solana-banks-interface" -version = "1.14.23" +version = "1.14.24" dependencies = [ "serde", - "solana-sdk 1.14.23", + "solana-sdk 1.14.24", "tarpc", ] [[package]] name = "solana-banks-server" -version = "1.14.23" +version = "1.14.24" dependencies = [ "bincode", "crossbeam-channel", @@ -4660,7 +4660,7 @@ dependencies = [ "solana-banks-interface", "solana-client", "solana-runtime", - "solana-sdk 1.14.23", + "solana-sdk 1.14.24", "solana-send-transaction-service", "tarpc", "tokio", @@ -4670,7 +4670,7 @@ dependencies = [ [[package]] name = "solana-bench-streamer" -version = "1.14.23" +version = "1.14.24" dependencies = [ "clap 3.2.23", "crossbeam-channel", @@ -4681,7 +4681,7 @@ dependencies = [ [[package]] name = "solana-bench-tps" -version = "1.14.23" +version = "1.14.24" dependencies = [ "clap 2.33.3", "crossbeam-channel", @@ -4698,13 +4698,13 @@ dependencies = [ "solana-genesis", "solana-gossip", "solana-local-cluster", - "solana-logger 1.14.23", + "solana-logger 1.14.24", "solana-measure", "solana-metrics", "solana-net-utils", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.23", + "solana-sdk 1.14.24", "solana-streamer", "solana-test-validator", "solana-version", @@ -4713,7 +4713,7 @@ dependencies = [ [[package]] name = "solana-bloom" -version = "1.14.23" +version = "1.14.24" dependencies = [ "bv", "fnv", @@ -4723,14 +4723,14 @@ dependencies = [ "rustc_version 0.4.0", "serde", "serde_derive", - "solana-frozen-abi 1.14.23", - "solana-frozen-abi-macro 1.14.23", - "solana-sdk 1.14.23", + "solana-frozen-abi 1.14.24", + "solana-frozen-abi-macro 1.14.24", + "solana-sdk 1.14.24", ] [[package]] name = "solana-bpf-loader-program" -version = "1.14.23" +version = "1.14.24" dependencies = [ "bincode", "byteorder", @@ -4741,26 +4741,26 @@ dependencies = [ "solana-metrics", "solana-program-runtime", "solana-runtime", - "solana-sdk 1.14.23", - "solana-zk-token-sdk 1.14.23", + "solana-sdk 1.14.24", + "solana-zk-token-sdk 1.14.24", "solana_rbpf", "thiserror", ] [[package]] name = "solana-bpf-loader-program-tests" -version = "1.14.23" +version = "1.14.24" dependencies = [ "assert_matches", "bincode", "solana-bpf-loader-program", "solana-program-test", - "solana-sdk 1.14.23", + "solana-sdk 1.14.24", ] [[package]] name = "solana-bucket-map" -version = "1.14.23" +version = "1.14.24" dependencies = [ "fs_extra", "log", @@ -4768,24 +4768,24 @@ dependencies = [ "modular-bitfield", "rand 0.7.3", "rayon", - "solana-logger 1.14.23", + "solana-logger 1.14.24", "solana-measure", - "solana-sdk 1.14.23", + "solana-sdk 1.14.24", "tempfile", ] [[package]] name = "solana-cargo-build-bpf" -version = "1.14.23" +version = "1.14.24" dependencies = [ "cargo_metadata", "clap 3.2.23", - "solana-sdk 1.14.23", + "solana-sdk 1.14.24", ] [[package]] name = "solana-cargo-build-sbf" -version = "1.14.23" +version = "1.14.24" dependencies = [ "bzip2", "cargo_metadata", @@ -4794,14 +4794,14 @@ dependencies = [ "regex", "serial_test", "solana-download-utils", - "solana-logger 1.14.23", - "solana-sdk 1.14.23", + "solana-logger 1.14.24", + "solana-sdk 1.14.24", "tar", ] [[package]] name = "solana-cargo-test-bpf" -version = "1.14.23" +version = "1.14.24" dependencies = [ "cargo_metadata", "clap 3.2.23", @@ -4809,7 +4809,7 @@ dependencies = [ [[package]] name = "solana-cargo-test-sbf" -version = "1.14.23" +version = "1.14.24" dependencies = [ "cargo_metadata", "clap 3.2.23", @@ -4817,14 +4817,14 @@ dependencies = [ [[package]] name = "solana-clap-utils" -version = "1.14.23" +version = "1.14.24" dependencies = [ "chrono", "clap 2.33.3", "rpassword", "solana-perf", "solana-remote-wallet", - "solana-sdk 1.14.23", + "solana-sdk 1.14.24", "tempfile", "thiserror", "tiny-bip39", @@ -4834,14 +4834,14 @@ dependencies = [ [[package]] name = "solana-clap-v3-utils" -version = "1.14.23" +version = "1.14.24" dependencies = [ "chrono", "clap 3.2.23", "rpassword", "solana-perf", "solana-remote-wallet", - "solana-sdk 1.14.23", + "solana-sdk 1.14.24", "tempfile", "thiserror", "tiny-bip39", @@ -4851,7 +4851,7 @@ dependencies = [ [[package]] name = "solana-cli" -version = "1.14.23" +version = "1.14.24" dependencies = [ "bincode", "bs58", @@ -4879,10 +4879,10 @@ dependencies = [ "solana-client", "solana-config-program", "solana-faucet", - "solana-logger 1.14.23", + "solana-logger 1.14.24", "solana-program-runtime", "solana-remote-wallet", - "solana-sdk 1.14.23", + "solana-sdk 1.14.24", "solana-streamer", "solana-test-validator", "solana-transaction-status", @@ -4897,7 +4897,7 @@ dependencies = [ [[package]] name = "solana-cli-config" -version = "1.14.23" +version = "1.14.24" dependencies = [ "anyhow", "dirs-next", @@ -4906,13 +4906,13 @@ dependencies = [ "serde_derive", "serde_yaml", "solana-clap-utils", - "solana-sdk 1.14.23", + "solana-sdk 1.14.24", "url 2.2.2", ] [[package]] name = "solana-cli-output" -version = "1.14.23" +version = "1.14.24" dependencies = [ "Inflector", "base64 0.13.0", @@ -4930,7 +4930,7 @@ dependencies = [ "solana-clap-utils", "solana-cli-config", "solana-client", - "solana-sdk 1.14.23", + "solana-sdk 1.14.24", "solana-transaction-status", "solana-vote-program", "spl-memo", @@ -4938,7 +4938,7 @@ dependencies = [ [[package]] name = "solana-client" -version = "1.14.23" +version = "1.14.24" dependencies = [ "anyhow", "assert_matches", @@ -4974,12 +4974,12 @@ dependencies = [ "solana-account-decoder", "solana-clap-utils", "solana-faucet", - "solana-logger 1.14.23", + "solana-logger 1.14.24", "solana-measure", "solana-metrics", "solana-net-utils", "solana-perf", - "solana-sdk 1.14.23", + "solana-sdk 1.14.24", "solana-streamer", "solana-transaction-status", "solana-version", @@ -4995,14 +4995,14 @@ dependencies = [ [[package]] name = "solana-client-test" -version = "1.14.23" +version = "1.14.24" dependencies = [ "futures-util", "serde_json", "serial_test", "solana-client", "solana-ledger", - "solana-logger 1.14.23", + "solana-logger 1.14.24", "solana-measure", "solana-merkle-tree", "solana-metrics", @@ -5010,7 +5010,7 @@ dependencies = [ "solana-rayon-threadlimit", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.23", + "solana-sdk 1.14.24", "solana-streamer", "solana-test-validator", "solana-transaction-status", @@ -5021,28 +5021,28 @@ dependencies = [ [[package]] name = "solana-compute-budget-program" -version = "1.14.23" +version = "1.14.24" dependencies = [ "solana-program-runtime", - "solana-sdk 1.14.23", + "solana-sdk 1.14.24", ] [[package]] name = "solana-config-program" -version = "1.14.23" +version = "1.14.24" dependencies = [ "bincode", "chrono", "serde", "serde_derive", - "solana-logger 1.14.23", + "solana-logger 1.14.24", "solana-program-runtime", - "solana-sdk 1.14.23", + "solana-sdk 1.14.24", ] [[package]] name = "solana-core" -version = "1.14.23" +version = "1.14.24" dependencies = [ "ahash", "base64 0.13.0", @@ -5075,12 +5075,12 @@ dependencies = [ "solana-bloom", "solana-client", "solana-entry", - "solana-frozen-abi 1.14.23", - "solana-frozen-abi-macro 1.14.23", + "solana-frozen-abi 1.14.24", + "solana-frozen-abi-macro 1.14.24", "solana-geyser-plugin-manager", "solana-gossip", "solana-ledger", - "solana-logger 1.14.23", + "solana-logger 1.14.24", "solana-measure", "solana-metrics", "solana-net-utils", @@ -5090,7 +5090,7 @@ dependencies = [ "solana-rayon-threadlimit", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.23", + "solana-sdk 1.14.24", "solana-send-transaction-service", "solana-stake-program", "solana-streamer", @@ -5110,7 +5110,7 @@ dependencies = [ [[package]] name = "solana-dos" -version = "1.14.23" +version = "1.14.24" dependencies = [ "bincode", "clap 3.2.23", @@ -5126,42 +5126,42 @@ dependencies = [ "solana-faucet", "solana-gossip", "solana-local-cluster", - "solana-logger 1.14.23", + "solana-logger 1.14.24", "solana-measure", "solana-net-utils", "solana-perf", "solana-rpc", - "solana-sdk 1.14.23", + "solana-sdk 1.14.24", "solana-streamer", "solana-version", ] [[package]] name = "solana-download-utils" -version = "1.14.23" +version = "1.14.24" dependencies = [ "console", "indicatif", "log", "reqwest", "solana-runtime", - "solana-sdk 1.14.23", + "solana-sdk 1.14.24", ] [[package]] name = "solana-ed25519-program-tests" -version = "1.14.23" +version = "1.14.24" dependencies = [ "assert_matches", "ed25519-dalek", "rand 0.7.3", "solana-program-test", - "solana-sdk 1.14.23", + "solana-sdk 1.14.24", ] [[package]] name = "solana-entry" -version = "1.14.23" +version = "1.14.24" dependencies = [ "bincode", "crossbeam-channel", @@ -5173,18 +5173,18 @@ dependencies = [ "rand 0.7.3", "rayon", "serde", - "solana-logger 1.14.23", + "solana-logger 1.14.24", "solana-measure", "solana-merkle-tree", "solana-metrics", "solana-perf", "solana-rayon-threadlimit", - "solana-sdk 1.14.23", + "solana-sdk 1.14.24", ] [[package]] name = "solana-faucet" -version = "1.14.23" +version = "1.14.24" dependencies = [ "bincode", "byteorder", @@ -5195,9 +5195,9 @@ dependencies = [ "serde_derive", "solana-clap-utils", "solana-cli-config", - "solana-logger 1.14.23", + "solana-logger 1.14.24", "solana-metrics", - "solana-sdk 1.14.23", + "solana-sdk 1.14.24", "solana-version", "spl-memo", "thiserror", @@ -5240,7 +5240,7 @@ dependencies = [ [[package]] name = "solana-frozen-abi" -version = "1.14.23" +version = "1.14.24" dependencies = [ "ahash", "blake3", @@ -5265,8 +5265,8 @@ dependencies = [ "serde_derive", "serde_json", "sha2 0.10.2", - "solana-frozen-abi-macro 1.14.23", - "solana-logger 1.14.23", + "solana-frozen-abi-macro 1.14.24", + "solana-logger 1.14.24", "subtle", "thiserror", ] @@ -5285,7 +5285,7 @@ dependencies = [ [[package]] name = "solana-frozen-abi-macro" -version = "1.14.23" +version = "1.14.24" dependencies = [ "proc-macro2 1.0.52", "quote 1.0.18", @@ -5295,7 +5295,7 @@ dependencies = [ [[package]] name = "solana-genesis" -version = "1.14.23" +version = "1.14.24" dependencies = [ "base64 0.13.0", "clap 2.33.3", @@ -5306,9 +5306,9 @@ dependencies = [ "solana-cli-config", "solana-entry", "solana-ledger", - "solana-logger 1.14.23", + "solana-logger 1.14.24", "solana-runtime", - "solana-sdk 1.14.23", + "solana-sdk 1.14.24", "solana-stake-program", "solana-version", "solana-vote-program", @@ -5317,26 +5317,26 @@ dependencies = [ [[package]] name = "solana-genesis-utils" -version = "1.14.23" +version = "1.14.24" dependencies = [ "solana-download-utils", "solana-runtime", - "solana-sdk 1.14.23", + "solana-sdk 1.14.24", ] [[package]] name = "solana-geyser-plugin-interface" -version = "1.14.23" +version = "1.14.24" dependencies = [ "log", - "solana-sdk 1.14.23", + "solana-sdk 1.14.24", "solana-transaction-status", "thiserror", ] [[package]] name = "solana-geyser-plugin-manager" -version = "1.14.23" +version = "1.14.24" dependencies = [ "bs58", "crossbeam-channel", @@ -5349,14 +5349,14 @@ dependencies = [ "solana-metrics", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.23", + "solana-sdk 1.14.24", "solana-transaction-status", "thiserror", ] [[package]] name = "solana-gossip" -version = "1.14.23" +version = "1.14.24" dependencies = [ "bincode", "bv", @@ -5383,17 +5383,17 @@ dependencies = [ "solana-clap-utils", "solana-client", "solana-entry", - "solana-frozen-abi 1.14.23", - "solana-frozen-abi-macro 1.14.23", + "solana-frozen-abi 1.14.24", + "solana-frozen-abi-macro 1.14.24", "solana-ledger", - "solana-logger 1.14.23", + "solana-logger 1.14.24", "solana-measure", "solana-metrics", "solana-net-utils", "solana-perf", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.14.23", + "solana-sdk 1.14.24", "solana-streamer", "solana-version", "solana-vote-program", @@ -5402,7 +5402,7 @@ dependencies = [ [[package]] name = "solana-install" -version = "1.14.23" +version = "1.14.24" dependencies = [ "atty", "bincode", @@ -5423,8 +5423,8 @@ dependencies = [ "solana-clap-utils", "solana-client", "solana-config-program", - "solana-logger 1.14.23", - "solana-sdk 1.14.23", + "solana-logger 1.14.24", + "solana-sdk 1.14.24", "solana-version", "tar", "tempfile", @@ -5435,7 +5435,7 @@ dependencies = [ [[package]] name = "solana-keygen" -version = "1.14.23" +version = "1.14.24" dependencies = [ "bs58", "clap 3.2.23", @@ -5444,14 +5444,14 @@ dependencies = [ "solana-clap-v3-utils", "solana-cli-config", "solana-remote-wallet", - "solana-sdk 1.14.23", + "solana-sdk 1.14.24", "solana-version", "tiny-bip39", ] [[package]] name = "solana-ledger" -version = "1.14.23" +version = "1.14.24" dependencies = [ "assert_matches", "bincode", @@ -5485,16 +5485,16 @@ dependencies = [ "solana-account-decoder", "solana-bpf-loader-program", "solana-entry", - "solana-frozen-abi 1.14.23", - "solana-frozen-abi-macro 1.14.23", - "solana-logger 1.14.23", + "solana-frozen-abi 1.14.24", + "solana-frozen-abi-macro 1.14.24", + "solana-logger 1.14.24", "solana-measure", "solana-metrics", "solana-perf", "solana-program-runtime", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.14.23", + "solana-sdk 1.14.24", "solana-stake-program", "solana-storage-bigtable", "solana-storage-proto", @@ -5513,7 +5513,7 @@ dependencies = [ [[package]] name = "solana-ledger-tool" -version = "1.14.23" +version = "1.14.24" dependencies = [ "assert_cmd", "base64 0.13.0", @@ -5535,10 +5535,10 @@ dependencies = [ "solana-core", "solana-entry", "solana-ledger", - "solana-logger 1.14.23", + "solana-logger 1.14.24", "solana-measure", "solana-runtime", - "solana-sdk 1.14.23", + "solana-sdk 1.14.24", "solana-stake-program", "solana-storage-bigtable", "solana-transaction-status", @@ -5550,7 +5550,7 @@ dependencies = [ [[package]] name = "solana-local-cluster" -version = "1.14.23" +version = "1.14.24" dependencies = [ "assert_matches", "crossbeam-channel", @@ -5568,9 +5568,9 @@ dependencies = [ "solana-entry", "solana-gossip", "solana-ledger", - "solana-logger 1.14.23", + "solana-logger 1.14.24", "solana-runtime", - "solana-sdk 1.14.23", + "solana-sdk 1.14.24", "solana-stake-program", "solana-streamer", "solana-vote-program", @@ -5579,13 +5579,13 @@ dependencies = [ [[package]] name = "solana-log-analyzer" -version = "1.14.23" +version = "1.14.24" dependencies = [ "byte-unit", "clap 3.2.23", "serde", "serde_json", - "solana-logger 1.14.23", + "solana-logger 1.14.24", "solana-version", ] @@ -5602,7 +5602,7 @@ dependencies = [ [[package]] name = "solana-logger" -version = "1.14.23" +version = "1.14.24" dependencies = [ "env_logger", "lazy_static", @@ -5611,38 +5611,38 @@ dependencies = [ [[package]] name = "solana-measure" -version = "1.14.23" +version = "1.14.24" dependencies = [ "log", - "solana-sdk 1.14.23", + "solana-sdk 1.14.24", ] [[package]] name = "solana-merkle-root-bench" -version = "1.14.23" +version = "1.14.24" dependencies = [ "clap 2.33.3", "log", - "solana-logger 1.14.23", + "solana-logger 1.14.24", "solana-measure", "solana-runtime", - "solana-sdk 1.14.23", + "solana-sdk 1.14.24", "solana-version", ] [[package]] name = "solana-merkle-tree" -version = "1.14.23" +version = "1.14.24" dependencies = [ "fast-math", "hex", "matches", - "solana-program 1.14.23", + "solana-program 1.14.24", ] [[package]] name = "solana-metrics" -version = "1.14.23" +version = "1.14.24" dependencies = [ "crossbeam-channel", "env_logger", @@ -5652,23 +5652,23 @@ dependencies = [ "rand 0.7.3", "reqwest", "serial_test", - "solana-sdk 1.14.23", + "solana-sdk 1.14.24", ] [[package]] name = "solana-net-shaper" -version = "1.14.23" +version = "1.14.24" dependencies = [ "clap 3.2.23", "rand 0.7.3", "serde", "serde_json", - "solana-logger 1.14.23", + "solana-logger 1.14.24", ] [[package]] name = "solana-net-utils" -version = "1.14.23" +version = "1.14.24" dependencies = [ "bincode", "clap 3.2.23", @@ -5679,8 +5679,8 @@ dependencies = [ "serde", "serde_derive", "socket2", - "solana-logger 1.14.23", - "solana-sdk 1.14.23", + "solana-logger 1.14.24", + "solana-sdk 1.14.24", "solana-version", "tokio", "url 2.2.2", @@ -5688,7 +5688,7 @@ dependencies = [ [[package]] name = "solana-notifier" -version = "1.14.23" +version = "1.14.24" dependencies = [ "log", "reqwest", @@ -5697,7 +5697,7 @@ dependencies = [ [[package]] name = "solana-perf" -version = "1.14.23" +version = "1.14.24" dependencies = [ "ahash", "bincode", @@ -5716,17 +5716,17 @@ dependencies = [ "rand_chacha 0.2.2", "rayon", "serde", - "solana-logger 1.14.23", + "solana-logger 1.14.24", "solana-metrics", "solana-rayon-threadlimit", - "solana-sdk 1.14.23", + "solana-sdk 1.14.24", "solana-vote-program", "test-case", ] [[package]] name = "solana-poh" -version = "1.14.23" +version = "1.14.24" dependencies = [ "bincode", "core_affinity", @@ -5736,29 +5736,29 @@ dependencies = [ "rand 0.7.3", "solana-entry", "solana-ledger", - "solana-logger 1.14.23", + "solana-logger 1.14.24", "solana-measure", "solana-metrics", "solana-perf", "solana-runtime", - "solana-sdk 1.14.23", + "solana-sdk 1.14.24", "solana-sys-tuner", "thiserror", ] [[package]] name = "solana-poh-bench" -version = "1.14.23" +version = "1.14.24" dependencies = [ "clap 3.2.23", "log", "rand 0.7.3", "rayon", "solana-entry", - "solana-logger 1.14.23", + "solana-logger 1.14.24", "solana-measure", "solana-perf", - "solana-sdk 1.14.23", + "solana-sdk 1.14.24", "solana-version", ] @@ -5813,7 +5813,7 @@ dependencies = [ [[package]] name = "solana-program" -version = "1.14.23" +version = "1.14.24" dependencies = [ "anyhow", "assert_matches", @@ -5851,10 +5851,10 @@ dependencies = [ "serde_json", "sha2 0.10.2", "sha3 0.10.1", - "solana-frozen-abi 1.14.23", - "solana-frozen-abi-macro 1.14.23", - "solana-logger 1.14.23", - "solana-sdk-macro 1.14.23", + "solana-frozen-abi 1.14.24", + "solana-frozen-abi-macro 1.14.24", + "solana-logger 1.14.24", + "solana-sdk-macro 1.14.24", "static_assertions", "thiserror", "tiny-bip39", @@ -5864,7 +5864,7 @@ dependencies = [ [[package]] name = "solana-program-runtime" -version = "1.14.23" +version = "1.14.24" dependencies = [ "base64 0.13.0", "bincode", @@ -5879,18 +5879,18 @@ dependencies = [ "rand 0.7.3", "rustc_version 0.4.0", "serde", - "solana-frozen-abi 1.14.23", - "solana-frozen-abi-macro 1.14.23", - "solana-logger 1.14.23", + "solana-frozen-abi 1.14.24", + "solana-frozen-abi-macro 1.14.24", + "solana-logger 1.14.24", "solana-measure", "solana-metrics", - "solana-sdk 1.14.23", + "solana-sdk 1.14.24", "thiserror", ] [[package]] name = "solana-program-test" -version = "1.14.23" +version = "1.14.24" dependencies = [ "assert_matches", "async-trait", @@ -5902,10 +5902,10 @@ dependencies = [ "solana-banks-client", "solana-banks-server", "solana-bpf-loader-program", - "solana-logger 1.14.23", + "solana-logger 1.14.24", "solana-program-runtime", "solana-runtime", - "solana-sdk 1.14.23", + "solana-sdk 1.14.24", "solana-stake-program", "solana-vote-program", "thiserror", @@ -5914,7 +5914,7 @@ dependencies = [ [[package]] name = "solana-rayon-threadlimit" -version = "1.14.23" +version = "1.14.24" dependencies = [ "lazy_static", "num_cpus", @@ -5922,7 +5922,7 @@ dependencies = [ [[package]] name = "solana-remote-wallet" -version = "1.14.23" +version = "1.14.24" dependencies = [ "console", "dialoguer", @@ -5933,14 +5933,14 @@ dependencies = [ "parking_lot 0.12.1", "qstring", "semver 1.0.10", - "solana-sdk 1.14.23", + "solana-sdk 1.14.24", "thiserror", "uriparse", ] [[package]] name = "solana-rpc" -version = "1.14.23" +version = "1.14.24" dependencies = [ "base64 0.13.0", "bincode", @@ -5976,7 +5976,7 @@ dependencies = [ "solana-poh", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.14.23", + "solana-sdk 1.14.24", "solana-send-transaction-service", "solana-stake-program", "solana-storage-bigtable", @@ -5995,7 +5995,7 @@ dependencies = [ [[package]] name = "solana-rpc-test" -version = "1.14.23" +version = "1.14.24" dependencies = [ "bincode", "bs58", @@ -6007,9 +6007,9 @@ dependencies = [ "serde_json", "solana-account-decoder", "solana-client", - "solana-logger 1.14.23", + "solana-logger 1.14.24", "solana-rpc", - "solana-sdk 1.14.23", + "solana-sdk 1.14.24", "solana-streamer", "solana-test-validator", "solana-transaction-status", @@ -6018,7 +6018,7 @@ dependencies = [ [[package]] name = "solana-runtime" -version = "1.14.23" +version = "1.14.24" dependencies = [ "arrayref", "assert_matches", @@ -6059,18 +6059,18 @@ dependencies = [ "solana-bucket-map", "solana-compute-budget-program", "solana-config-program", - "solana-frozen-abi 1.14.23", - "solana-frozen-abi-macro 1.14.23", - "solana-logger 1.14.23", + "solana-frozen-abi 1.14.24", + "solana-frozen-abi-macro 1.14.24", + "solana-logger 1.14.24", "solana-measure", "solana-metrics", "solana-program-runtime", "solana-rayon-threadlimit", - "solana-sdk 1.14.23", + "solana-sdk 1.14.24", "solana-stake-program", "solana-vote-program", "solana-zk-token-proof-program", - "solana-zk-token-sdk 1.14.23", + "solana-zk-token-sdk 1.14.24", "strum", "strum_macros", "symlink", @@ -6133,7 +6133,7 @@ dependencies = [ [[package]] name = "solana-sdk" -version = "1.14.23" +version = "1.14.24" dependencies = [ "anyhow", "assert_matches", @@ -6173,11 +6173,11 @@ dependencies = [ "serde_json", "sha2 0.10.2", "sha3 0.10.1", - "solana-frozen-abi 1.14.23", - "solana-frozen-abi-macro 1.14.23", - "solana-logger 1.14.23", - "solana-program 1.14.23", - "solana-sdk-macro 1.14.23", + "solana-frozen-abi 1.14.24", + "solana-frozen-abi-macro 1.14.24", + "solana-logger 1.14.24", + "solana-program 1.14.24", + "solana-sdk-macro 1.14.24", "static_assertions", "thiserror", "tiny-bip39", @@ -6200,7 +6200,7 @@ dependencies = [ [[package]] name = "solana-sdk-macro" -version = "1.14.23" +version = "1.14.24" dependencies = [ "bs58", "proc-macro2 1.0.52", @@ -6211,21 +6211,21 @@ dependencies = [ [[package]] name = "solana-send-transaction-service" -version = "1.14.23" +version = "1.14.24" dependencies = [ "crossbeam-channel", "log", "solana-client", - "solana-logger 1.14.23", + "solana-logger 1.14.24", "solana-measure", "solana-metrics", "solana-runtime", - "solana-sdk 1.14.23", + "solana-sdk 1.14.24", ] [[package]] name = "solana-stake-accounts" -version = "1.14.23" +version = "1.14.24" dependencies = [ "clap 2.33.3", "solana-clap-utils", @@ -6233,13 +6233,13 @@ dependencies = [ "solana-client", "solana-remote-wallet", "solana-runtime", - "solana-sdk 1.14.23", + "solana-sdk 1.14.24", "solana-stake-program", ] [[package]] name = "solana-stake-program" -version = "1.14.23" +version = "1.14.24" dependencies = [ "assert_matches", "bincode", @@ -6251,12 +6251,12 @@ dependencies = [ "serde", "serde_derive", "solana-config-program", - "solana-frozen-abi 1.14.23", - "solana-frozen-abi-macro 1.14.23", - "solana-logger 1.14.23", + "solana-frozen-abi 1.14.24", + "solana-frozen-abi-macro 1.14.24", + "solana-logger 1.14.24", "solana-metrics", "solana-program-runtime", - "solana-sdk 1.14.23", + "solana-sdk 1.14.24", "solana-vote-program", "test-case", "thiserror", @@ -6264,7 +6264,7 @@ dependencies = [ [[package]] name = "solana-storage-bigtable" -version = "1.14.23" +version = "1.14.24" dependencies = [ "backoff", "bincode", @@ -6285,7 +6285,7 @@ dependencies = [ "serde_derive", "smpl_jwt", "solana-metrics", - "solana-sdk 1.14.23", + "solana-sdk 1.14.24", "solana-storage-proto", "solana-transaction-status", "thiserror", @@ -6296,7 +6296,7 @@ dependencies = [ [[package]] name = "solana-storage-proto" -version = "1.14.23" +version = "1.14.24" dependencies = [ "bincode", "bs58", @@ -6305,25 +6305,25 @@ dependencies = [ "protobuf-src", "serde", "solana-account-decoder", - "solana-sdk 1.14.23", + "solana-sdk 1.14.24", "solana-transaction-status", "tonic-build 0.8.0", ] [[package]] name = "solana-store-tool" -version = "1.14.23" +version = "1.14.24" dependencies = [ "clap 2.33.3", "log", - "solana-logger 1.14.23", + "solana-logger 1.14.24", "solana-runtime", "solana-version", ] [[package]] name = "solana-streamer" -version = "1.14.23" +version = "1.14.24" dependencies = [ "crossbeam-channel", "futures-util", @@ -6340,10 +6340,10 @@ dependencies = [ "rand 0.7.3", "rcgen", "rustls 0.20.6", - "solana-logger 1.14.23", + "solana-logger 1.14.24", "solana-metrics", "solana-perf", - "solana-sdk 1.14.23", + "solana-sdk 1.14.24", "thiserror", "tokio", "x509-parser", @@ -6351,13 +6351,13 @@ dependencies = [ [[package]] name = "solana-sys-tuner" -version = "1.14.23" +version = "1.14.24" dependencies = [ "clap 2.33.3", "libc", "log", "nix", - "solana-logger 1.14.23", + "solana-logger 1.14.24", "solana-version", "sysctl", "unix_socket2", @@ -6366,7 +6366,7 @@ dependencies = [ [[package]] name = "solana-test-validator" -version = "1.14.23" +version = "1.14.24" dependencies = [ "base64 0.13.0", "log", @@ -6377,20 +6377,20 @@ dependencies = [ "solana-core", "solana-gossip", "solana-ledger", - "solana-logger 1.14.23", + "solana-logger 1.14.24", "solana-net-utils", "solana-program-runtime", "solana-program-test", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.23", + "solana-sdk 1.14.24", "solana-streamer", "tokio", ] [[package]] name = "solana-tokens" -version = "1.14.23" +version = "1.14.24" dependencies = [ "bincode", "chrono", @@ -6406,9 +6406,9 @@ dependencies = [ "solana-clap-utils", "solana-cli-config", "solana-client", - "solana-logger 1.14.23", + "solana-logger 1.14.24", "solana-remote-wallet", - "solana-sdk 1.14.23", + "solana-sdk 1.14.24", "solana-streamer", "solana-test-validator", "solana-transaction-status", @@ -6421,7 +6421,7 @@ dependencies = [ [[package]] name = "solana-transaction-dos" -version = "1.14.23" +version = "1.14.24" dependencies = [ "bincode", "clap 2.33.3", @@ -6435,11 +6435,11 @@ dependencies = [ "solana-faucet", "solana-gossip", "solana-local-cluster", - "solana-logger 1.14.23", + "solana-logger 1.14.24", "solana-measure", "solana-net-utils", "solana-runtime", - "solana-sdk 1.14.23", + "solana-sdk 1.14.24", "solana-streamer", "solana-transaction-status", "solana-version", @@ -6447,7 +6447,7 @@ dependencies = [ [[package]] name = "solana-transaction-status" -version = "1.14.23" +version = "1.14.24" dependencies = [ "Inflector", "base64 0.13.0", @@ -6463,7 +6463,7 @@ dependencies = [ "solana-address-lookup-table-program", "solana-measure", "solana-metrics", - "solana-sdk 1.14.23", + "solana-sdk 1.14.24", "solana-vote-program", "spl-associated-token-account", "spl-memo", @@ -6474,7 +6474,7 @@ dependencies = [ [[package]] name = "solana-upload-perf" -version = "1.14.23" +version = "1.14.24" dependencies = [ "serde_json", "solana-metrics", @@ -6482,7 +6482,7 @@ dependencies = [ [[package]] name = "solana-validator" -version = "1.14.23" +version = "1.14.24" dependencies = [ "chrono", "clap 2.33.3", @@ -6513,14 +6513,14 @@ dependencies = [ "solana-genesis-utils", "solana-gossip", "solana-ledger", - "solana-logger 1.14.23", + "solana-logger 1.14.24", "solana-metrics", "solana-net-utils", "solana-perf", "solana-poh", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.23", + "solana-sdk 1.14.24", "solana-send-transaction-service", "solana-storage-bigtable", "solana-streamer", @@ -6533,21 +6533,21 @@ dependencies = [ [[package]] name = "solana-version" -version = "1.14.23" +version = "1.14.24" dependencies = [ "log", "rustc_version 0.4.0", "semver 1.0.10", "serde", "serde_derive", - "solana-frozen-abi 1.14.23", - "solana-frozen-abi-macro 1.14.23", - "solana-sdk 1.14.23", + "solana-frozen-abi 1.14.24", + "solana-frozen-abi-macro 1.14.24", + "solana-sdk 1.14.24", ] [[package]] name = "solana-vote-program" -version = "1.14.23" +version = "1.14.24" dependencies = [ "bincode", "itertools", @@ -6558,19 +6558,19 @@ dependencies = [ "rustc_version 0.4.0", "serde", "serde_derive", - "solana-frozen-abi 1.14.23", - "solana-frozen-abi-macro 1.14.23", - "solana-logger 1.14.23", + "solana-frozen-abi 1.14.24", + "solana-frozen-abi-macro 1.14.24", + "solana-logger 1.14.24", "solana-metrics", "solana-program-runtime", - "solana-sdk 1.14.23", + "solana-sdk 1.14.24", "test-case", "thiserror", ] [[package]] name = "solana-watchtower" -version = "1.14.23" +version = "1.14.24" dependencies = [ "clap 2.33.3", "humantime", @@ -6579,35 +6579,35 @@ dependencies = [ "solana-cli-config", "solana-cli-output", "solana-client", - "solana-logger 1.14.23", + "solana-logger 1.14.24", "solana-metrics", "solana-notifier", - "solana-sdk 1.14.23", + "solana-sdk 1.14.24", "solana-version", ] [[package]] name = "solana-zk-token-proof-program" -version = "1.14.23" +version = "1.14.24" dependencies = [ "bytemuck", "getrandom 0.1.16", "num-derive", "num-traits", "solana-program-runtime", - "solana-sdk 1.14.23", - "solana-zk-token-sdk 1.14.23", + "solana-sdk 1.14.24", + "solana-zk-token-sdk 1.14.24", ] [[package]] name = "solana-zk-token-proof-program-tests" -version = "1.14.23" +version = "1.14.24" dependencies = [ "bytemuck", "solana-program-runtime", "solana-program-test", - "solana-sdk 1.14.23", - "solana-zk-token-sdk 1.14.23", + "solana-sdk 1.14.24", + "solana-zk-token-sdk 1.14.24", ] [[package]] @@ -6643,7 +6643,7 @@ dependencies = [ [[package]] name = "solana-zk-token-sdk" -version = "1.14.23" +version = "1.14.24" dependencies = [ "aes-gcm-siv", "arrayref", @@ -6663,8 +6663,8 @@ dependencies = [ "serde", "serde_json", "sha3 0.9.1", - "solana-program 1.14.23", - "solana-sdk 1.14.23", + "solana-program 1.14.24", + "solana-sdk 1.14.24", "subtle", "thiserror", "zeroize", diff --git a/account-decoder/Cargo.toml b/account-decoder/Cargo.toml index 5cf2f4b44b7ed8..fbd96b2da432dd 100644 --- a/account-decoder/Cargo.toml +++ b/account-decoder/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-account-decoder" -version = "1.14.23" +version = "1.14.24" description = "Solana account decoder" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -19,10 +19,10 @@ lazy_static = "1.4.0" serde = "1.0.138" serde_derive = "1.0.103" serde_json = "1.0.81" -solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.23" } -solana-config-program = { path = "../programs/config", version = "=1.14.23" } -solana-sdk = { path = "../sdk", version = "=1.14.23" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.23" } +solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.24" } +solana-config-program = { path = "../programs/config", version = "=1.14.24" } +solana-sdk = { path = "../sdk", version = "=1.14.24" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.24" } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } spl-token-2022 = { version = "=0.6.1", features = ["no-entrypoint"] } thiserror = "1.0" diff --git a/accounts-bench/Cargo.toml b/accounts-bench/Cargo.toml index 48b189b337010e..02b7c968e72e64 100644 --- a/accounts-bench/Cargo.toml +++ b/accounts-bench/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-accounts-bench" -version = "1.14.23" +version = "1.14.24" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -12,11 +12,11 @@ publish = false clap = "2.33.1" log = "0.4.17" rayon = "1.5.3" -solana-logger = { path = "../logger", version = "=1.14.23" } -solana-measure = { path = "../measure", version = "=1.14.23" } -solana-runtime = { path = "../runtime", version = "=1.14.23" } -solana-sdk = { path = "../sdk", version = "=1.14.23" } -solana-version = { path = "../version", version = "=1.14.23" } +solana-logger = { path = "../logger", version = "=1.14.24" } +solana-measure = { path = "../measure", version = "=1.14.24" } +solana-runtime = { path = "../runtime", version = "=1.14.24" } +solana-sdk = { path = "../sdk", version = "=1.14.24" } +solana-version = { path = "../version", version = "=1.14.24" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/accounts-cluster-bench/Cargo.toml b/accounts-cluster-bench/Cargo.toml index 8eed1e1b019b38..ac822052297539 100644 --- a/accounts-cluster-bench/Cargo.toml +++ b/accounts-cluster-bench/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-accounts-cluster-bench" -version = "1.14.23" +version = "1.14.24" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -13,25 +13,25 @@ clap = "2.33.1" log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.23" } -solana-clap-utils = { path = "../clap-utils", version = "=1.14.23" } -solana-client = { path = "../client", version = "=1.14.23" } -solana-faucet = { path = "../faucet", version = "=1.14.23" } -solana-gossip = { path = "../gossip", version = "=1.14.23" } -solana-logger = { path = "../logger", version = "=1.14.23" } -solana-measure = { path = "../measure", version = "=1.14.23" } -solana-net-utils = { path = "../net-utils", version = "=1.14.23" } -solana-runtime = { path = "../runtime", version = "=1.14.23" } -solana-sdk = { path = "../sdk", version = "=1.14.23" } -solana-streamer = { path = "../streamer", version = "=1.14.23" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.23" } -solana-version = { path = "../version", version = "=1.14.23" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.24" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.24" } +solana-client = { path = "../client", version = "=1.14.24" } +solana-faucet = { path = "../faucet", version = "=1.14.24" } +solana-gossip = { path = "../gossip", version = "=1.14.24" } +solana-logger = { path = "../logger", version = "=1.14.24" } +solana-measure = { path = "../measure", version = "=1.14.24" } +solana-net-utils = { path = "../net-utils", version = "=1.14.24" } +solana-runtime = { path = "../runtime", version = "=1.14.24" } +solana-sdk = { path = "../sdk", version = "=1.14.24" } +solana-streamer = { path = "../streamer", version = "=1.14.24" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.24" } +solana-version = { path = "../version", version = "=1.14.24" } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } [dev-dependencies] -solana-core = { path = "../core", version = "=1.14.23" } -solana-local-cluster = { path = "../local-cluster", version = "=1.14.23" } -solana-test-validator = { path = "../test-validator", version = "=1.14.23" } +solana-core = { path = "../core", version = "=1.14.24" } +solana-local-cluster = { path = "../local-cluster", version = "=1.14.24" } +solana-test-validator = { path = "../test-validator", version = "=1.14.24" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/banking-bench/Cargo.toml b/banking-bench/Cargo.toml index a4006f212d1a3f..830230c182ebd4 100644 --- a/banking-bench/Cargo.toml +++ b/banking-bench/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-banking-bench" -version = "1.14.23" +version = "1.14.24" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,18 +14,18 @@ crossbeam-channel = "0.5" log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" -solana-client = { path = "../client", version = "=1.14.23" } -solana-core = { path = "../core", version = "=1.14.23" } -solana-gossip = { path = "../gossip", version = "=1.14.23" } -solana-ledger = { path = "../ledger", version = "=1.14.23" } -solana-logger = { path = "../logger", version = "=1.14.23" } -solana-measure = { path = "../measure", version = "=1.14.23" } -solana-perf = { path = "../perf", version = "=1.14.23" } -solana-poh = { path = "../poh", version = "=1.14.23" } -solana-runtime = { path = "../runtime", version = "=1.14.23" } -solana-sdk = { path = "../sdk", version = "=1.14.23" } -solana-streamer = { path = "../streamer", version = "=1.14.23" } -solana-version = { path = "../version", version = "=1.14.23" } +solana-client = { path = "../client", version = "=1.14.24" } +solana-core = { path = "../core", version = "=1.14.24" } +solana-gossip = { path = "../gossip", version = "=1.14.24" } +solana-ledger = { path = "../ledger", version = "=1.14.24" } +solana-logger = { path = "../logger", version = "=1.14.24" } +solana-measure = { path = "../measure", version = "=1.14.24" } +solana-perf = { path = "../perf", version = "=1.14.24" } +solana-poh = { path = "../poh", version = "=1.14.24" } +solana-runtime = { path = "../runtime", version = "=1.14.24" } +solana-sdk = { path = "../sdk", version = "=1.14.24" } +solana-streamer = { path = "../streamer", version = "=1.14.24" } +solana-version = { path = "../version", version = "=1.14.24" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/banks-client/Cargo.toml b/banks-client/Cargo.toml index 6bcb41c7faf434..9f64e217924f12 100644 --- a/banks-client/Cargo.toml +++ b/banks-client/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-banks-client" -version = "1.14.23" +version = "1.14.24" description = "Solana banks client" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,17 +12,17 @@ edition = "2021" [dependencies] borsh = "0.9.3" futures = "0.3" -solana-banks-interface = { path = "../banks-interface", version = "=1.14.23" } -solana-program = { path = "../sdk/program", version = "=1.14.23" } -solana-sdk = { path = "../sdk", version = "=1.14.23" } +solana-banks-interface = { path = "../banks-interface", version = "=1.14.24" } +solana-program = { path = "../sdk/program", version = "=1.14.24" } +solana-sdk = { path = "../sdk", version = "=1.14.24" } tarpc = { version = "0.29.0", features = ["full"] } thiserror = "1.0" tokio = { version = "~1.14.1", features = ["full"] } tokio-serde = { version = "0.8", features = ["bincode"] } [dev-dependencies] -solana-banks-server = { path = "../banks-server", version = "=1.14.23" } -solana-runtime = { path = "../runtime", version = "=1.14.23" } +solana-banks-server = { path = "../banks-server", version = "=1.14.24" } +solana-runtime = { path = "../runtime", version = "=1.14.24" } [lib] crate-type = ["lib"] diff --git a/banks-interface/Cargo.toml b/banks-interface/Cargo.toml index ada6bfcdadaa45..66b6a124436891 100644 --- a/banks-interface/Cargo.toml +++ b/banks-interface/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-banks-interface" -version = "1.14.23" +version = "1.14.24" description = "Solana banks RPC interface" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -11,7 +11,7 @@ edition = "2021" [dependencies] serde = { version = "1.0.138", features = ["derive"] } -solana-sdk = { path = "../sdk", version = "=1.14.23" } +solana-sdk = { path = "../sdk", version = "=1.14.24" } tarpc = { version = "0.29.0", features = ["full"] } [lib] diff --git a/banks-server/Cargo.toml b/banks-server/Cargo.toml index b83a3c7e87d975..f65be6f48dfa67 100644 --- a/banks-server/Cargo.toml +++ b/banks-server/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-banks-server" -version = "1.14.23" +version = "1.14.24" description = "Solana banks server" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,11 +13,11 @@ edition = "2021" bincode = "1.3.3" crossbeam-channel = "0.5" futures = "0.3" -solana-banks-interface = { path = "../banks-interface", version = "=1.14.23" } -solana-client = { path = "../client", version = "=1.14.23" } -solana-runtime = { path = "../runtime", version = "=1.14.23" } -solana-sdk = { path = "../sdk", version = "=1.14.23" } -solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.23" } +solana-banks-interface = { path = "../banks-interface", version = "=1.14.24" } +solana-client = { path = "../client", version = "=1.14.24" } +solana-runtime = { path = "../runtime", version = "=1.14.24" } +solana-sdk = { path = "../sdk", version = "=1.14.24" } +solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.24" } tarpc = { version = "0.29.0", features = ["full"] } tokio = { version = "1", features = ["full"] } tokio-serde = { version = "0.8", features = ["bincode"] } diff --git a/bench-streamer/Cargo.toml b/bench-streamer/Cargo.toml index 8fbd42e5e75b6d..07df881ca0e641 100644 --- a/bench-streamer/Cargo.toml +++ b/bench-streamer/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-bench-streamer" -version = "1.14.23" +version = "1.14.24" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -11,9 +11,9 @@ publish = false [dependencies] clap = { version = "3.1.5", features = ["cargo"] } crossbeam-channel = "0.5" -solana-net-utils = { path = "../net-utils", version = "=1.14.23" } -solana-streamer = { path = "../streamer", version = "=1.14.23" } -solana-version = { path = "../version", version = "=1.14.23" } +solana-net-utils = { path = "../net-utils", version = "=1.14.24" } +solana-streamer = { path = "../streamer", version = "=1.14.24" } +solana-version = { path = "../version", version = "=1.14.24" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/bench-tps/Cargo.toml b/bench-tps/Cargo.toml index d870621d285e7e..939ba336bcea66 100644 --- a/bench-tps/Cargo.toml +++ b/bench-tps/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-bench-tps" -version = "1.14.23" +version = "1.14.24" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -15,28 +15,28 @@ log = "0.4.17" rayon = "1.5.3" serde_json = "1.0.81" serde_yaml = "0.8.26" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.23" } -solana-cli-config = { path = "../cli-config", version = "=1.14.23" } -solana-client = { path = "../client", version = "=1.14.23" } -solana-core = { path = "../core", version = "=1.14.23" } -solana-faucet = { path = "../faucet", version = "=1.14.23" } -solana-genesis = { path = "../genesis", version = "=1.14.23" } -solana-gossip = { path = "../gossip", version = "=1.14.23" } -solana-logger = { path = "../logger", version = "=1.14.23" } -solana-measure = { path = "../measure", version = "=1.14.23" } -solana-metrics = { path = "../metrics", version = "=1.14.23" } -solana-net-utils = { path = "../net-utils", version = "=1.14.23" } -solana-rpc = { path = "../rpc", version = "=1.14.23" } -solana-runtime = { path = "../runtime", version = "=1.14.23" } -solana-sdk = { path = "../sdk", version = "=1.14.23" } -solana-streamer = { path = "../streamer", version = "=1.14.23" } -solana-version = { path = "../version", version = "=1.14.23" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.24" } +solana-cli-config = { path = "../cli-config", version = "=1.14.24" } +solana-client = { path = "../client", version = "=1.14.24" } +solana-core = { path = "../core", version = "=1.14.24" } +solana-faucet = { path = "../faucet", version = "=1.14.24" } +solana-genesis = { path = "../genesis", version = "=1.14.24" } +solana-gossip = { path = "../gossip", version = "=1.14.24" } +solana-logger = { path = "../logger", version = "=1.14.24" } +solana-measure = { path = "../measure", version = "=1.14.24" } +solana-metrics = { path = "../metrics", version = "=1.14.24" } +solana-net-utils = { path = "../net-utils", version = "=1.14.24" } +solana-rpc = { path = "../rpc", version = "=1.14.24" } +solana-runtime = { path = "../runtime", version = "=1.14.24" } +solana-sdk = { path = "../sdk", version = "=1.14.24" } +solana-streamer = { path = "../streamer", version = "=1.14.24" } +solana-version = { path = "../version", version = "=1.14.24" } thiserror = "1.0" [dev-dependencies] serial_test = "0.8.0" -solana-local-cluster = { path = "../local-cluster", version = "=1.14.23" } -solana-test-validator = { path = "../test-validator", version = "=1.14.23" } +solana-local-cluster = { path = "../local-cluster", version = "=1.14.24" } +solana-test-validator = { path = "../test-validator", version = "=1.14.24" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/bloom/Cargo.toml b/bloom/Cargo.toml index f74886b47f0a78..7a6639e33f6aae 100644 --- a/bloom/Cargo.toml +++ b/bloom/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bloom" -version = "1.14.23" +version = "1.14.24" description = "Solana bloom filter" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -17,9 +17,9 @@ rand = "0.7.0" rayon = "1.5.3" serde = { version = "1.0.138", features = ["rc"] } serde_derive = "1.0.103" -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.23" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.23" } -solana-sdk = { path = "../sdk", version = "=1.14.23" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.24" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.24" } +solana-sdk = { path = "../sdk", version = "=1.14.24" } [lib] crate-type = ["lib"] diff --git a/bucket_map/Cargo.toml b/bucket_map/Cargo.toml index f9127ab63b57fc..81d427409fa6cc 100644 --- a/bucket_map/Cargo.toml +++ b/bucket_map/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bucket-map" -version = "1.14.23" +version = "1.14.24" description = "solana-bucket-map" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-bucket-map" @@ -15,14 +15,14 @@ log = { version = "0.4.17" } memmap2 = "0.5.3" modular-bitfield = "0.11.2" rand = "0.7.0" -solana-measure = { path = "../measure", version = "=1.14.23" } -solana-sdk = { path = "../sdk", version = "=1.14.23" } +solana-measure = { path = "../measure", version = "=1.14.24" } +solana-sdk = { path = "../sdk", version = "=1.14.24" } tempfile = "3.4.0" [dev-dependencies] fs_extra = "1.2.0" rayon = "1.5.3" -solana-logger = { path = "../logger", version = "=1.14.23" } +solana-logger = { path = "../logger", version = "=1.14.24" } [lib] crate-type = ["lib"] diff --git a/clap-utils/Cargo.toml b/clap-utils/Cargo.toml index a11593cf743c5b..8ee7a3cb81a087 100644 --- a/clap-utils/Cargo.toml +++ b/clap-utils/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-clap-utils" -version = "1.14.23" +version = "1.14.24" description = "Solana utilities for the clap" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,9 +13,9 @@ edition = "2021" chrono = "0.4" clap = "2.33.0" rpassword = "6.0" -solana-perf = { path = "../perf", version = "=1.14.23" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.23", default-features = false } -solana-sdk = { path = "../sdk", version = "=1.14.23" } +solana-perf = { path = "../perf", version = "=1.14.24" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.24", default-features = false } +solana-sdk = { path = "../sdk", version = "=1.14.24" } thiserror = "1.0.31" tiny-bip39 = "0.8.2" uriparse = "0.6.4" diff --git a/clap-v3-utils/Cargo.toml b/clap-v3-utils/Cargo.toml index 40c3b4b20bbd44..0b7b35f4643c77 100644 --- a/clap-v3-utils/Cargo.toml +++ b/clap-v3-utils/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-clap-v3-utils" -version = "1.14.23" +version = "1.14.24" description = "Solana utilities for the clap v3" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,9 +13,9 @@ edition = "2021" chrono = "0.4" clap = { version = "3.2.23", features = ["cargo"] } rpassword = "6.0" -solana-perf = { path = "../perf", version = "=1.14.23" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.23", default-features = false } -solana-sdk = { path = "../sdk", version = "=1.14.23" } +solana-perf = { path = "../perf", version = "=1.14.24" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.24", default-features = false } +solana-sdk = { path = "../sdk", version = "=1.14.24" } thiserror = "1.0.31" tiny-bip39 = "0.8.2" uriparse = "0.6.4" diff --git a/cli-config/Cargo.toml b/cli-config/Cargo.toml index 3ea27d4a6e9466..7a0fa4d68da2cc 100644 --- a/cli-config/Cargo.toml +++ b/cli-config/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-cli-config" description = "Blockchain, Rebuilt for Scale" -version = "1.14.23" +version = "1.14.24" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -15,8 +15,8 @@ lazy_static = "1.4.0" serde = "1.0.138" serde_derive = "1.0.103" serde_yaml = "0.8.26" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.23" } -solana-sdk = { path = "../sdk", version = "=1.14.23" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.24" } +solana-sdk = { path = "../sdk", version = "=1.14.24" } url = "2.2.2" [dev-dependencies] diff --git a/cli-output/Cargo.toml b/cli-output/Cargo.toml index 6b6e2a2387dc5f..227e45ff602f0b 100644 --- a/cli-output/Cargo.toml +++ b/cli-output/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-cli-output" description = "Blockchain, Rebuilt for Scale" -version = "1.14.23" +version = "1.14.24" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -21,13 +21,13 @@ pretty-hex = "0.3.0" semver = "1.0.10" serde = "1.0.138" serde_json = "1.0.81" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.23" } -solana-clap-utils = { path = "../clap-utils", version = "=1.14.23" } -solana-cli-config = { path = "../cli-config", version = "=1.14.23" } -solana-client = { path = "../client", version = "=1.14.23" } -solana-sdk = { path = "../sdk", version = "=1.14.23" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.23" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.23" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.24" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.24" } +solana-cli-config = { path = "../cli-config", version = "=1.14.24" } +solana-client = { path = "../client", version = "=1.14.24" } +solana-sdk = { path = "../sdk", version = "=1.14.24" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.24" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.24" } spl-memo = { version = "=3.0.1", features = ["no-entrypoint"] } [dev-dependencies] diff --git a/cli/Cargo.toml b/cli/Cargo.toml index cff12f7a28f5a6..9d25f469ae639d 100644 --- a/cli/Cargo.toml +++ b/cli/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-cli" description = "Blockchain, Rebuilt for Scale" -version = "1.14.23" +version = "1.14.24" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -27,30 +27,30 @@ semver = "1.0.10" serde = "1.0.138" serde_derive = "1.0.103" serde_json = "1.0.81" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.23" } -solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.23" } -solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.23" } -solana-clap-utils = { path = "../clap-utils", version = "=1.14.23" } -solana-cli-config = { path = "../cli-config", version = "=1.14.23" } -solana-cli-output = { path = "../cli-output", version = "=1.14.23" } -solana-client = { path = "../client", version = "=1.14.23" } -solana-config-program = { path = "../programs/config", version = "=1.14.23" } -solana-faucet = { path = "../faucet", version = "=1.14.23" } -solana-logger = { path = "../logger", version = "=1.14.23" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.23" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.23" } -solana-sdk = { path = "../sdk", version = "=1.14.23" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.23" } -solana-version = { path = "../version", version = "=1.14.23" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.23" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.24" } +solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.24" } +solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.24" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.24" } +solana-cli-config = { path = "../cli-config", version = "=1.14.24" } +solana-cli-output = { path = "../cli-output", version = "=1.14.24" } +solana-client = { path = "../client", version = "=1.14.24" } +solana-config-program = { path = "../programs/config", version = "=1.14.24" } +solana-faucet = { path = "../faucet", version = "=1.14.24" } +solana-logger = { path = "../logger", version = "=1.14.24" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.24" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.24" } +solana-sdk = { path = "../sdk", version = "=1.14.24" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.24" } +solana-version = { path = "../version", version = "=1.14.24" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.24" } solana_rbpf = "=0.2.31" spl-memo = { version = "=3.0.1", features = ["no-entrypoint"] } thiserror = "1.0.31" tiny-bip39 = "0.8.2" [dev-dependencies] -solana-streamer = { path = "../streamer", version = "=1.14.23" } -solana-test-validator = { path = "../test-validator", version = "=1.14.23" } +solana-streamer = { path = "../streamer", version = "=1.14.24" } +solana-test-validator = { path = "../test-validator", version = "=1.14.24" } tempfile = "3.4.0" [[bin]] diff --git a/client-test/Cargo.toml b/client-test/Cargo.toml index f20ff695bf6b38..16546e41ff5a00 100644 --- a/client-test/Cargo.toml +++ b/client-test/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-client-test" -version = "1.14.23" +version = "1.14.24" description = "Solana RPC Test" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,25 +14,25 @@ publish = false futures-util = "0.3.21" serde_json = "1.0.81" serial_test = "0.8.0" -solana-client = { path = "../client", version = "=1.14.23" } -solana-ledger = { path = "../ledger", version = "=1.14.23" } -solana-measure = { path = "../measure", version = "=1.14.23" } -solana-merkle-tree = { path = "../merkle-tree", version = "=1.14.23" } -solana-metrics = { path = "../metrics", version = "=1.14.23" } -solana-perf = { path = "../perf", version = "=1.14.23" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.23" } -solana-rpc = { path = "../rpc", version = "=1.14.23" } -solana-runtime = { path = "../runtime", version = "=1.14.23" } -solana-sdk = { path = "../sdk", version = "=1.14.23" } -solana-streamer = { path = "../streamer", version = "=1.14.23" } -solana-test-validator = { path = "../test-validator", version = "=1.14.23" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.23" } -solana-version = { path = "../version", version = "=1.14.23" } +solana-client = { path = "../client", version = "=1.14.24" } +solana-ledger = { path = "../ledger", version = "=1.14.24" } +solana-measure = { path = "../measure", version = "=1.14.24" } +solana-merkle-tree = { path = "../merkle-tree", version = "=1.14.24" } +solana-metrics = { path = "../metrics", version = "=1.14.24" } +solana-perf = { path = "../perf", version = "=1.14.24" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.24" } +solana-rpc = { path = "../rpc", version = "=1.14.24" } +solana-runtime = { path = "../runtime", version = "=1.14.24" } +solana-sdk = { path = "../sdk", version = "=1.14.24" } +solana-streamer = { path = "../streamer", version = "=1.14.24" } +solana-test-validator = { path = "../test-validator", version = "=1.14.24" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.24" } +solana-version = { path = "../version", version = "=1.14.24" } systemstat = "0.1.11" tokio = { version = "~1.14.1", features = ["full"] } [dev-dependencies] -solana-logger = { path = "../logger", version = "=1.14.23" } +solana-logger = { path = "../logger", version = "=1.14.24" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/client/Cargo.toml b/client/Cargo.toml index e6c33d23753e6d..6dc989aefa7aa9 100644 --- a/client/Cargo.toml +++ b/client/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-client" -version = "1.14.23" +version = "1.14.24" description = "Solana Client" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -38,17 +38,17 @@ semver = "1.0.10" serde = "1.0.138" serde_derive = "1.0.103" serde_json = "1.0.81" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.23" } -solana-clap-utils = { path = "../clap-utils", version = "=1.14.23" } -solana-faucet = { path = "../faucet", version = "=1.14.23" } -solana-measure = { path = "../measure", version = "=1.14.23" } -solana-metrics = { path = "../metrics", version = "=1.14.23" } -solana-net-utils = { path = "../net-utils", version = "=1.14.23" } -solana-sdk = { path = "../sdk", version = "=1.14.23" } -solana-streamer = { path = "../streamer", version = "=1.14.23" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.23" } -solana-version = { path = "../version", version = "=1.14.23" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.23" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.24" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.24" } +solana-faucet = { path = "../faucet", version = "=1.14.24" } +solana-measure = { path = "../measure", version = "=1.14.24" } +solana-metrics = { path = "../metrics", version = "=1.14.24" } +solana-net-utils = { path = "../net-utils", version = "=1.14.24" } +solana-sdk = { path = "../sdk", version = "=1.14.24" } +solana-streamer = { path = "../streamer", version = "=1.14.24" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.24" } +solana-version = { path = "../version", version = "=1.14.24" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.24" } spl-token-2022 = { version = "=0.6.1", features = ["no-entrypoint"] } thiserror = "1.0" tokio = { version = "1", features = ["full"] } @@ -61,8 +61,8 @@ url = "2.2.2" anyhow = "1.0.58" assert_matches = "1.5.0" jsonrpc-http-server = "18.0.0" -solana-logger = { path = "../logger", version = "=1.14.23" } -solana-perf = { path = "../perf", version = "=1.14.23" } +solana-logger = { path = "../logger", version = "=1.14.24" } +solana-perf = { path = "../perf", version = "=1.14.24" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/core/Cargo.toml b/core/Cargo.toml index 1988ab7961587b..70d6c82eb8ecbc 100644 --- a/core/Cargo.toml +++ b/core/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "solana-core" description = "Blockchain, Rebuilt for Scale" -version = "1.14.23" +version = "1.14.24" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-core" readme = "../README.md" @@ -36,30 +36,30 @@ rand_chacha = "0.2.2" rayon = "1.5.3" serde = "1.0.138" serde_derive = "1.0.103" -solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.23" } -solana-bloom = { path = "../bloom", version = "=1.14.23" } -solana-client = { path = "../client", version = "=1.14.23" } -solana-entry = { path = "../entry", version = "=1.14.23" } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.23" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.23" } -solana-geyser-plugin-manager = { path = "../geyser-plugin-manager", version = "=1.14.23" } -solana-gossip = { path = "../gossip", version = "=1.14.23" } -solana-ledger = { path = "../ledger", version = "=1.14.23" } -solana-measure = { path = "../measure", version = "=1.14.23" } -solana-metrics = { path = "../metrics", version = "=1.14.23" } -solana-net-utils = { path = "../net-utils", version = "=1.14.23" } -solana-perf = { path = "../perf", version = "=1.14.23" } -solana-poh = { path = "../poh", version = "=1.14.23" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.23" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.23" } -solana-rpc = { path = "../rpc", version = "=1.14.23" } -solana-runtime = { path = "../runtime", version = "=1.14.23" } -solana-sdk = { path = "../sdk", version = "=1.14.23" } -solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.23" } -solana-streamer = { path = "../streamer", version = "=1.14.23" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.23" } -solana-version = { path = "../version", version = "=1.14.23" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.23" } +solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.24" } +solana-bloom = { path = "../bloom", version = "=1.14.24" } +solana-client = { path = "../client", version = "=1.14.24" } +solana-entry = { path = "../entry", version = "=1.14.24" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.24" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.24" } +solana-geyser-plugin-manager = { path = "../geyser-plugin-manager", version = "=1.14.24" } +solana-gossip = { path = "../gossip", version = "=1.14.24" } +solana-ledger = { path = "../ledger", version = "=1.14.24" } +solana-measure = { path = "../measure", version = "=1.14.24" } +solana-metrics = { path = "../metrics", version = "=1.14.24" } +solana-net-utils = { path = "../net-utils", version = "=1.14.24" } +solana-perf = { path = "../perf", version = "=1.14.24" } +solana-poh = { path = "../poh", version = "=1.14.24" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.24" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.24" } +solana-rpc = { path = "../rpc", version = "=1.14.24" } +solana-runtime = { path = "../runtime", version = "=1.14.24" } +solana-sdk = { path = "../sdk", version = "=1.14.24" } +solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.24" } +solana-streamer = { path = "../streamer", version = "=1.14.24" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.24" } +solana-version = { path = "../version", version = "=1.14.24" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.24" } sys-info = "0.9.1" tempfile = "3.4.0" thiserror = "1.0" @@ -71,9 +71,9 @@ matches = "0.1.9" raptorq = "1.7.0" serde_json = "1.0.81" serial_test = "0.8.0" -solana-logger = { path = "../logger", version = "=1.14.23" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.23" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.23" } +solana-logger = { path = "../logger", version = "=1.14.24" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.24" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.24" } static_assertions = "1.1.0" systemstat = "0.1.11" test-case = "2.1.0" diff --git a/dos/Cargo.toml b/dos/Cargo.toml index 2792ad5a47c557..872dd457306e69 100644 --- a/dos/Cargo.toml +++ b/dos/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-dos" -version = "1.14.23" +version = "1.14.24" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -17,23 +17,23 @@ itertools = "0.10.3" log = "0.4.17" rand = "0.7.0" serde = "1.0.138" -solana-bench-tps = { path = "../bench-tps", version = "=1.14.23" } -solana-client = { path = "../client", version = "=1.14.23" } -solana-core = { path = "../core", version = "=1.14.23" } -solana-faucet = { path = "../faucet", version = "=1.14.23" } -solana-gossip = { path = "../gossip", version = "=1.14.23" } -solana-logger = { path = "../logger", version = "=1.14.23" } -solana-measure = { path = "../measure", version = "=1.14.23" } -solana-net-utils = { path = "../net-utils", version = "=1.14.23" } -solana-perf = { path = "../perf", version = "=1.14.23" } -solana-rpc = { path = "../rpc", version = "=1.14.23" } -solana-sdk = { path = "../sdk", version = "=1.14.23" } -solana-streamer = { path = "../streamer", version = "=1.14.23" } -solana-version = { path = "../version", version = "=1.14.23" } +solana-bench-tps = { path = "../bench-tps", version = "=1.14.24" } +solana-client = { path = "../client", version = "=1.14.24" } +solana-core = { path = "../core", version = "=1.14.24" } +solana-faucet = { path = "../faucet", version = "=1.14.24" } +solana-gossip = { path = "../gossip", version = "=1.14.24" } +solana-logger = { path = "../logger", version = "=1.14.24" } +solana-measure = { path = "../measure", version = "=1.14.24" } +solana-net-utils = { path = "../net-utils", version = "=1.14.24" } +solana-perf = { path = "../perf", version = "=1.14.24" } +solana-rpc = { path = "../rpc", version = "=1.14.24" } +solana-sdk = { path = "../sdk", version = "=1.14.24" } +solana-streamer = { path = "../streamer", version = "=1.14.24" } +solana-version = { path = "../version", version = "=1.14.24" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] [dev-dependencies] serial_test = "0.8.0" -solana-local-cluster = { path = "../local-cluster", version = "=1.14.23" } +solana-local-cluster = { path = "../local-cluster", version = "=1.14.24" } diff --git a/download-utils/Cargo.toml b/download-utils/Cargo.toml index a14014b9109a1f..bed545c383a710 100644 --- a/download-utils/Cargo.toml +++ b/download-utils/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-download-utils" -version = "1.14.23" +version = "1.14.24" description = "Solana Download Utils" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,8 +14,8 @@ console = "0.15.0" indicatif = "0.16.2" log = "0.4.17" reqwest = { version = "0.11.11", default-features = false, features = ["blocking", "brotli", "deflate", "gzip", "rustls-tls", "json"] } -solana-runtime = { path = "../runtime", version = "=1.14.23" } -solana-sdk = { path = "../sdk", version = "=1.14.23" } +solana-runtime = { path = "../runtime", version = "=1.14.24" } +solana-sdk = { path = "../sdk", version = "=1.14.24" } [lib] crate-type = ["lib"] diff --git a/entry/Cargo.toml b/entry/Cargo.toml index 9fb27b2c9b8dae..18fbc0fca39341 100644 --- a/entry/Cargo.toml +++ b/entry/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-entry" -version = "1.14.23" +version = "1.14.24" description = "Solana Entry" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -19,16 +19,16 @@ log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" serde = "1.0.138" -solana-measure = { path = "../measure", version = "=1.14.23" } -solana-merkle-tree = { path = "../merkle-tree", version = "=1.14.23" } -solana-metrics = { path = "../metrics", version = "=1.14.23" } -solana-perf = { path = "../perf", version = "=1.14.23" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.23" } -solana-sdk = { path = "../sdk", version = "=1.14.23" } +solana-measure = { path = "../measure", version = "=1.14.24" } +solana-merkle-tree = { path = "../merkle-tree", version = "=1.14.24" } +solana-metrics = { path = "../metrics", version = "=1.14.24" } +solana-perf = { path = "../perf", version = "=1.14.24" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.24" } +solana-sdk = { path = "../sdk", version = "=1.14.24" } [dev-dependencies] matches = "0.1.9" -solana-logger = { path = "../logger", version = "=1.14.23" } +solana-logger = { path = "../logger", version = "=1.14.24" } [lib] crate-type = ["lib"] diff --git a/faucet/Cargo.toml b/faucet/Cargo.toml index a104f2044f2e14..ce14e4c1fec315 100644 --- a/faucet/Cargo.toml +++ b/faucet/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-faucet" -version = "1.14.23" +version = "1.14.24" description = "Solana Faucet" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -17,12 +17,12 @@ crossbeam-channel = "0.5" log = "0.4.17" serde = "1.0.138" serde_derive = "1.0.103" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.23" } -solana-cli-config = { path = "../cli-config", version = "=1.14.23" } -solana-logger = { path = "../logger", version = "=1.14.23" } -solana-metrics = { path = "../metrics", version = "=1.14.23" } -solana-sdk = { path = "../sdk", version = "=1.14.23" } -solana-version = { path = "../version", version = "=1.14.23" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.24" } +solana-cli-config = { path = "../cli-config", version = "=1.14.24" } +solana-logger = { path = "../logger", version = "=1.14.24" } +solana-metrics = { path = "../metrics", version = "=1.14.24" } +solana-sdk = { path = "../sdk", version = "=1.14.24" } +solana-version = { path = "../version", version = "=1.14.24" } spl-memo = { version = "=3.0.1", features = ["no-entrypoint"] } thiserror = "1.0" tokio = { version = "1", features = ["full"] } diff --git a/frozen-abi/Cargo.toml b/frozen-abi/Cargo.toml index dcab07b0834df2..227bd209675c52 100644 --- a/frozen-abi/Cargo.toml +++ b/frozen-abi/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-frozen-abi" -version = "1.14.23" +version = "1.14.24" description = "Solana Frozen ABI" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -20,7 +20,7 @@ serde_bytes = "0.11" serde_derive = "1.0" serde_json = "1.0" sha2 = "0.10.2" -solana-frozen-abi-macro = { path = "macro", version = "=1.14.23" } +solana-frozen-abi-macro = { path = "macro", version = "=1.14.24" } thiserror = "1.0" [target.'cfg(not(target_os = "solana"))'.dependencies] @@ -43,7 +43,7 @@ rand_core = { version = "0.6.3", features = ["alloc", "getrandom", "std"] } subtle = { version = "2.4.1", features = ["default", "i128", "std"] } [target.'cfg(not(target_os = "solana"))'.dev-dependencies] -solana-logger = { path = "../logger", version = "=1.14.23" } +solana-logger = { path = "../logger", version = "=1.14.24" } [build-dependencies] rustc_version = "0.4" diff --git a/frozen-abi/macro/Cargo.toml b/frozen-abi/macro/Cargo.toml index 82c370c4538624..f7d2aaf93ddb4b 100644 --- a/frozen-abi/macro/Cargo.toml +++ b/frozen-abi/macro/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-frozen-abi-macro" -version = "1.14.23" +version = "1.14.24" description = "Solana Frozen ABI Macro" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/genesis-utils/Cargo.toml b/genesis-utils/Cargo.toml index 08d9694795e6c2..85924b662ec497 100644 --- a/genesis-utils/Cargo.toml +++ b/genesis-utils/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-genesis-utils" -version = "1.14.23" +version = "1.14.24" description = "Solana Genesis Utils" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,9 +10,9 @@ documentation = "https://docs.rs/solana-download-utils" edition = "2021" [dependencies] -solana-download-utils = { path = "../download-utils", version = "=1.14.23" } -solana-runtime = { path = "../runtime", version = "=1.14.23" } -solana-sdk = { path = "../sdk", version = "=1.14.23" } +solana-download-utils = { path = "../download-utils", version = "=1.14.24" } +solana-runtime = { path = "../runtime", version = "=1.14.24" } +solana-sdk = { path = "../sdk", version = "=1.14.24" } [lib] crate-type = ["lib"] diff --git a/genesis/Cargo.toml b/genesis/Cargo.toml index a2bc6cfd9785d7..4ddfcfcfe93cc5 100644 --- a/genesis/Cargo.toml +++ b/genesis/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-genesis" description = "Blockchain, Rebuilt for Scale" -version = "1.14.23" +version = "1.14.24" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -15,16 +15,16 @@ clap = "2.33.1" serde = "1.0.138" serde_json = "1.0.81" serde_yaml = "0.8.26" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.23" } -solana-cli-config = { path = "../cli-config", version = "=1.14.23" } -solana-entry = { path = "../entry", version = "=1.14.23" } -solana-ledger = { path = "../ledger", version = "=1.14.23" } -solana-logger = { path = "../logger", version = "=1.14.23" } -solana-runtime = { path = "../runtime", version = "=1.14.23" } -solana-sdk = { path = "../sdk", version = "=1.14.23" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.23" } -solana-version = { path = "../version", version = "=1.14.23" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.23" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.24" } +solana-cli-config = { path = "../cli-config", version = "=1.14.24" } +solana-entry = { path = "../entry", version = "=1.14.24" } +solana-ledger = { path = "../ledger", version = "=1.14.24" } +solana-logger = { path = "../logger", version = "=1.14.24" } +solana-runtime = { path = "../runtime", version = "=1.14.24" } +solana-sdk = { path = "../sdk", version = "=1.14.24" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.24" } +solana-version = { path = "../version", version = "=1.14.24" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.24" } tempfile = "3.4.0" [[bin]] diff --git a/geyser-plugin-interface/Cargo.toml b/geyser-plugin-interface/Cargo.toml index 4f7801a8e9d07a..593f63826eb69b 100644 --- a/geyser-plugin-interface/Cargo.toml +++ b/geyser-plugin-interface/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-geyser-plugin-interface" description = "The Solana Geyser plugin interface." -version = "1.14.23" +version = "1.14.24" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -11,8 +11,8 @@ documentation = "https://docs.rs/solana-geyser-plugin-interface" [dependencies] log = "0.4.17" -solana-sdk = { path = "../sdk", version = "=1.14.23" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.23" } +solana-sdk = { path = "../sdk", version = "=1.14.24" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.24" } thiserror = "1.0.31" [package.metadata.docs.rs] diff --git a/geyser-plugin-manager/Cargo.toml b/geyser-plugin-manager/Cargo.toml index 987b77a3bff3fc..784efe99b9f456 100644 --- a/geyser-plugin-manager/Cargo.toml +++ b/geyser-plugin-manager/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-geyser-plugin-manager" description = "The Solana Geyser plugin manager." -version = "1.14.23" +version = "1.14.24" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -16,13 +16,13 @@ json5 = "0.4.1" libloading = "0.7.3" log = "0.4.17" serde_json = "1.0.81" -solana-geyser-plugin-interface = { path = "../geyser-plugin-interface", version = "=1.14.23" } -solana-measure = { path = "../measure", version = "=1.14.23" } -solana-metrics = { path = "../metrics", version = "=1.14.23" } -solana-rpc = { path = "../rpc", version = "=1.14.23" } -solana-runtime = { path = "../runtime", version = "=1.14.23" } -solana-sdk = { path = "../sdk", version = "=1.14.23" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.23" } +solana-geyser-plugin-interface = { path = "../geyser-plugin-interface", version = "=1.14.24" } +solana-measure = { path = "../measure", version = "=1.14.24" } +solana-metrics = { path = "../metrics", version = "=1.14.24" } +solana-rpc = { path = "../rpc", version = "=1.14.24" } +solana-runtime = { path = "../runtime", version = "=1.14.24" } +solana-sdk = { path = "../sdk", version = "=1.14.24" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.24" } thiserror = "1.0.31" [package.metadata.docs.rs] diff --git a/gossip/Cargo.toml b/gossip/Cargo.toml index 6a44158163320b..b5fa155de1444e 100644 --- a/gossip/Cargo.toml +++ b/gossip/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-gossip" description = "Blockchain, Rebuilt for Scale" -version = "1.14.23" +version = "1.14.24" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -27,24 +27,24 @@ rayon = "1.5.3" serde = "1.0.138" serde_bytes = "0.11" serde_derive = "1.0.103" -solana-bloom = { path = "../bloom", version = "=1.14.23" } -solana-clap-utils = { path = "../clap-utils", version = "=1.14.23" } -solana-client = { path = "../client", version = "=1.14.23" } -solana-entry = { path = "../entry", version = "=1.14.23" } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.23" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.23" } -solana-ledger = { path = "../ledger", version = "=1.14.23" } -solana-logger = { path = "../logger", version = "=1.14.23" } -solana-measure = { path = "../measure", version = "=1.14.23" } -solana-metrics = { path = "../metrics", version = "=1.14.23" } -solana-net-utils = { path = "../net-utils", version = "=1.14.23" } -solana-perf = { path = "../perf", version = "=1.14.23" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.23" } -solana-runtime = { path = "../runtime", version = "=1.14.23" } -solana-sdk = { path = "../sdk", version = "=1.14.23" } -solana-streamer = { path = "../streamer", version = "=1.14.23" } -solana-version = { path = "../version", version = "=1.14.23" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.23" } +solana-bloom = { path = "../bloom", version = "=1.14.24" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.24" } +solana-client = { path = "../client", version = "=1.14.24" } +solana-entry = { path = "../entry", version = "=1.14.24" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.24" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.24" } +solana-ledger = { path = "../ledger", version = "=1.14.24" } +solana-logger = { path = "../logger", version = "=1.14.24" } +solana-measure = { path = "../measure", version = "=1.14.24" } +solana-metrics = { path = "../metrics", version = "=1.14.24" } +solana-net-utils = { path = "../net-utils", version = "=1.14.24" } +solana-perf = { path = "../perf", version = "=1.14.24" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.24" } +solana-runtime = { path = "../runtime", version = "=1.14.24" } +solana-sdk = { path = "../sdk", version = "=1.14.24" } +solana-streamer = { path = "../streamer", version = "=1.14.24" } +solana-version = { path = "../version", version = "=1.14.24" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.24" } thiserror = "1.0" [dev-dependencies] diff --git a/install/Cargo.toml b/install/Cargo.toml index 31c2599a634992..23b5198c2ab36c 100644 --- a/install/Cargo.toml +++ b/install/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-install" description = "The solana cluster software installer" -version = "1.14.23" +version = "1.14.24" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -26,12 +26,12 @@ reqwest = { version = "0.11.11", default-features = false, features = ["blocking semver = "1.0.10" serde = { version = "1.0.138", features = ["derive"] } serde_yaml = "0.8.26" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.23" } -solana-client = { path = "../client", version = "=1.14.23" } -solana-config-program = { path = "../programs/config", version = "=1.14.23" } -solana-logger = { path = "../logger", version = "=1.14.23" } -solana-sdk = { path = "../sdk", version = "=1.14.23" } -solana-version = { path = "../version", version = "=1.14.23" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.24" } +solana-client = { path = "../client", version = "=1.14.24" } +solana-config-program = { path = "../programs/config", version = "=1.14.24" } +solana-logger = { path = "../logger", version = "=1.14.24" } +solana-sdk = { path = "../sdk", version = "=1.14.24" } +solana-version = { path = "../version", version = "=1.14.24" } tar = "0.4.38" tempfile = "3.4.0" url = "2.2.2" diff --git a/keygen/Cargo.toml b/keygen/Cargo.toml index 859c1636cd9e65..c4119c7cbde4b8 100644 --- a/keygen/Cargo.toml +++ b/keygen/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-keygen" -version = "1.14.23" +version = "1.14.24" description = "Solana key generation utility" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,11 +14,11 @@ bs58 = "0.4.0" clap = { version = "3.1.5", features = ["cargo"] } dirs-next = "2.0.0" num_cpus = "1.13.1" -solana-clap-v3-utils = { path = "../clap-v3-utils", version = "=1.14.23" } -solana-cli-config = { path = "../cli-config", version = "=1.14.23" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.23" } -solana-sdk = { path = "../sdk", version = "=1.14.23" } -solana-version = { path = "../version", version = "=1.14.23" } +solana-clap-v3-utils = { path = "../clap-v3-utils", version = "=1.14.24" } +solana-cli-config = { path = "../cli-config", version = "=1.14.24" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.24" } +solana-sdk = { path = "../sdk", version = "=1.14.24" } +solana-version = { path = "../version", version = "=1.14.24" } tiny-bip39 = "0.8.2" [[bin]] diff --git a/ledger-tool/Cargo.toml b/ledger-tool/Cargo.toml index cb1d14859156ef..1f5f82a2e407eb 100644 --- a/ledger-tool/Cargo.toml +++ b/ledger-tool/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-ledger-tool" description = "Blockchain, Rebuilt for Scale" -version = "1.14.23" +version = "1.14.24" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -22,20 +22,20 @@ log = { version = "0.4.17" } regex = "1" serde = { version = "1.0", features = ["derive"] } serde_json = "1.0.81" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.23" } -solana-cli-output = { path = "../cli-output", version = "=1.14.23" } -solana-core = { path = "../core", version = "=1.14.23" } -solana-entry = { path = "../entry", version = "=1.14.23" } -solana-ledger = { path = "../ledger", version = "=1.14.23" } -solana-logger = { path = "../logger", version = "=1.14.23" } -solana-measure = { path = "../measure", version = "=1.14.23" } -solana-runtime = { path = "../runtime", version = "=1.14.23" } -solana-sdk = { path = "../sdk", version = "=1.14.23" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.23" } -solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.23" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.23" } -solana-version = { path = "../version", version = "=1.14.23" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.23" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.24" } +solana-cli-output = { path = "../cli-output", version = "=1.14.24" } +solana-core = { path = "../core", version = "=1.14.24" } +solana-entry = { path = "../entry", version = "=1.14.24" } +solana-ledger = { path = "../ledger", version = "=1.14.24" } +solana-logger = { path = "../logger", version = "=1.14.24" } +solana-measure = { path = "../measure", version = "=1.14.24" } +solana-runtime = { path = "../runtime", version = "=1.14.24" } +solana-sdk = { path = "../sdk", version = "=1.14.24" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.24" } +solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.24" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.24" } +solana-version = { path = "../version", version = "=1.14.24" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.24" } tokio = { version = "1", features = ["full"] } [target.'cfg(not(target_env = "msvc"))'.dependencies] diff --git a/ledger/Cargo.toml b/ledger/Cargo.toml index 7d67c8b16755e7..d55888cbf8feb5 100644 --- a/ledger/Cargo.toml +++ b/ledger/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-ledger" -version = "1.14.23" +version = "1.14.24" description = "Solana ledger" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -35,23 +35,23 @@ reed-solomon-erasure = { version = "6.0.0", features = ["simd-accel"] } serde = "1.0.138" serde_bytes = "0.11.6" sha2 = "0.10.2" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.23" } -solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.23" } -solana-entry = { path = "../entry", version = "=1.14.23" } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.23" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.23" } -solana-measure = { path = "../measure", version = "=1.14.23" } -solana-metrics = { path = "../metrics", version = "=1.14.23" } -solana-perf = { path = "../perf", version = "=1.14.23" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.23" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.23" } -solana-runtime = { path = "../runtime", version = "=1.14.23" } -solana-sdk = { path = "../sdk", version = "=1.14.23" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.23" } -solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.23" } -solana-storage-proto = { path = "../storage-proto", version = "=1.14.23" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.23" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.23" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.24" } +solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.24" } +solana-entry = { path = "../entry", version = "=1.14.24" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.24" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.24" } +solana-measure = { path = "../measure", version = "=1.14.24" } +solana-metrics = { path = "../metrics", version = "=1.14.24" } +solana-perf = { path = "../perf", version = "=1.14.24" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.24" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.24" } +solana-runtime = { path = "../runtime", version = "=1.14.24" } +solana-sdk = { path = "../sdk", version = "=1.14.24" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.24" } +solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.24" } +solana-storage-proto = { path = "../storage-proto", version = "=1.14.24" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.24" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.24" } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } spl-token-2022 = { version = "=0.6.1", features = ["no-entrypoint"] } static_assertions = "1.1.0" @@ -71,8 +71,8 @@ features = ["lz4"] [dev-dependencies] bs58 = "0.4.0" matches = "0.1.9" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.23" } -solana-logger = { path = "../logger", version = "=1.14.23" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.24" } +solana-logger = { path = "../logger", version = "=1.14.24" } test-case = "2.1.0" [build-dependencies] diff --git a/local-cluster/Cargo.toml b/local-cluster/Cargo.toml index 63c7f8abcbbb9a..a62fcd2bcf19e8 100644 --- a/local-cluster/Cargo.toml +++ b/local-cluster/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-local-cluster" description = "Blockchain, Rebuilt for Scale" -version = "1.14.23" +version = "1.14.24" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -16,25 +16,25 @@ itertools = "0.10.3" log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" -solana-client = { path = "../client", version = "=1.14.23" } -solana-config-program = { path = "../programs/config", version = "=1.14.23" } -solana-core = { path = "../core", version = "=1.14.23" } -solana-entry = { path = "../entry", version = "=1.14.23" } -solana-gossip = { path = "../gossip", version = "=1.14.23" } -solana-ledger = { path = "../ledger", version = "=1.14.23" } -solana-runtime = { path = "../runtime", version = "=1.14.23" } -solana-sdk = { path = "../sdk", version = "=1.14.23" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.23" } -solana-streamer = { path = "../streamer", version = "=1.14.23" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.23" } +solana-client = { path = "../client", version = "=1.14.24" } +solana-config-program = { path = "../programs/config", version = "=1.14.24" } +solana-core = { path = "../core", version = "=1.14.24" } +solana-entry = { path = "../entry", version = "=1.14.24" } +solana-gossip = { path = "../gossip", version = "=1.14.24" } +solana-ledger = { path = "../ledger", version = "=1.14.24" } +solana-runtime = { path = "../runtime", version = "=1.14.24" } +solana-sdk = { path = "../sdk", version = "=1.14.24" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.24" } +solana-streamer = { path = "../streamer", version = "=1.14.24" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.24" } tempfile = "3.4.0" [dev-dependencies] assert_matches = "1.5.0" gag = "1.0.0" serial_test = "0.8.0" -solana-download-utils = { path = "../download-utils", version = "=1.14.23" } -solana-logger = { path = "../logger", version = "=1.14.23" } +solana-download-utils = { path = "../download-utils", version = "=1.14.24" } +solana-logger = { path = "../logger", version = "=1.14.24" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/log-analyzer/Cargo.toml b/log-analyzer/Cargo.toml index 334942ceda3ebb..89c77eda032d99 100644 --- a/log-analyzer/Cargo.toml +++ b/log-analyzer/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-log-analyzer" description = "The solana cluster network analysis tool" -version = "1.14.23" +version = "1.14.24" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,8 +14,8 @@ byte-unit = "4.0.14" clap = { version = "3.1.5", features = ["cargo"] } serde = "1.0.138" serde_json = "1.0.81" -solana-logger = { path = "../logger", version = "=1.14.23" } -solana-version = { path = "../version", version = "=1.14.23" } +solana-logger = { path = "../logger", version = "=1.14.24" } +solana-version = { path = "../version", version = "=1.14.24" } [[bin]] name = "solana-log-analyzer" diff --git a/logger/Cargo.toml b/logger/Cargo.toml index 0849923da3a9d3..ba4fba3be43e54 100644 --- a/logger/Cargo.toml +++ b/logger/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-logger" -version = "1.14.23" +version = "1.14.24" description = "Solana Logger" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/measure/Cargo.toml b/measure/Cargo.toml index d577c7982e5d69..233337e49cfb07 100644 --- a/measure/Cargo.toml +++ b/measure/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "solana-measure" description = "Blockchain, Rebuilt for Scale" -version = "1.14.23" +version = "1.14.24" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-measure" readme = "../README.md" @@ -12,7 +12,7 @@ edition = "2021" [dependencies] log = "0.4.17" -solana-sdk = { path = "../sdk", version = "=1.14.23" } +solana-sdk = { path = "../sdk", version = "=1.14.24" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/merkle-root-bench/Cargo.toml b/merkle-root-bench/Cargo.toml index f740cd9cc8e10c..e0271885f74adb 100644 --- a/merkle-root-bench/Cargo.toml +++ b/merkle-root-bench/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-merkle-root-bench" -version = "1.14.23" +version = "1.14.24" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -11,11 +11,11 @@ publish = false [dependencies] clap = "2.33.1" log = "0.4.17" -solana-logger = { path = "../logger", version = "=1.14.23" } -solana-measure = { path = "../measure", version = "=1.14.23" } -solana-runtime = { path = "../runtime", version = "=1.14.23" } -solana-sdk = { path = "../sdk", version = "=1.14.23" } -solana-version = { path = "../version", version = "=1.14.23" } +solana-logger = { path = "../logger", version = "=1.14.24" } +solana-measure = { path = "../measure", version = "=1.14.24" } +solana-runtime = { path = "../runtime", version = "=1.14.24" } +solana-sdk = { path = "../sdk", version = "=1.14.24" } +solana-version = { path = "../version", version = "=1.14.24" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/merkle-tree/Cargo.toml b/merkle-tree/Cargo.toml index 5fcd871b215b38..c4dd5235f93a1b 100644 --- a/merkle-tree/Cargo.toml +++ b/merkle-tree/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-merkle-tree" -version = "1.14.23" +version = "1.14.24" description = "Solana Merkle Tree" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -11,7 +11,7 @@ edition = "2021" [dependencies] fast-math = "0.1" -solana-program = { path = "../sdk/program", version = "=1.14.23" } +solana-program = { path = "../sdk/program", version = "=1.14.24" } # This can go once the BPF toolchain target Rust 1.42.0+ [target.bpfel-unknown-unknown.dependencies] diff --git a/metrics/Cargo.toml b/metrics/Cargo.toml index 6a35f983dbbf33..bfed337175b23d 100644 --- a/metrics/Cargo.toml +++ b/metrics/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-metrics" -version = "1.14.23" +version = "1.14.24" description = "Solana Metrics" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -15,7 +15,7 @@ gethostname = "0.2.3" lazy_static = "1.4.0" log = "0.4.17" reqwest = { version = "0.11.11", default-features = false, features = ["blocking", "brotli", "deflate", "gzip", "rustls-tls", "json"] } -solana-sdk = { path = "../sdk", version = "=1.14.23" } +solana-sdk = { path = "../sdk", version = "=1.14.24" } [dev-dependencies] env_logger = "0.9.0" diff --git a/net-shaper/Cargo.toml b/net-shaper/Cargo.toml index a21aa1928feef1..1dfe07cd85fe2b 100644 --- a/net-shaper/Cargo.toml +++ b/net-shaper/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-net-shaper" description = "The solana cluster network shaping tool" -version = "1.14.23" +version = "1.14.24" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,7 +14,7 @@ clap = { version = "3.1.5", features = ["cargo"] } rand = "0.7.0" serde = { version = "1.0.138", features = ["derive"] } serde_json = "1.0.81" -solana-logger = { path = "../logger", version = "=1.14.23" } +solana-logger = { path = "../logger", version = "=1.14.24" } [[bin]] name = "solana-net-shaper" diff --git a/net-utils/Cargo.toml b/net-utils/Cargo.toml index c245c2c8885779..3c13cc7c750f7b 100644 --- a/net-utils/Cargo.toml +++ b/net-utils/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-net-utils" -version = "1.14.23" +version = "1.14.24" description = "Solana Network Utilities" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -19,9 +19,9 @@ rand = "0.7.0" serde = "1.0.138" serde_derive = "1.0.103" socket2 = "0.4.4" -solana-logger = { path = "../logger", version = "=1.14.23" } -solana-sdk = { path = "../sdk", version = "=1.14.23" } -solana-version = { path = "../version", version = "=1.14.23" } +solana-logger = { path = "../logger", version = "=1.14.24" } +solana-sdk = { path = "../sdk", version = "=1.14.24" } +solana-version = { path = "../version", version = "=1.14.24" } tokio = { version = "1", features = ["full"] } url = "2.2.2" diff --git a/notifier/Cargo.toml b/notifier/Cargo.toml index 9d01c8fcf83e7e..e8bffb2151145a 100644 --- a/notifier/Cargo.toml +++ b/notifier/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-notifier" -version = "1.14.23" +version = "1.14.24" description = "Solana Notifier" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/perf/Cargo.toml b/perf/Cargo.toml index 84cd68b757be7e..fb04b226904605 100644 --- a/perf/Cargo.toml +++ b/perf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-perf" -version = "1.14.23" +version = "1.14.24" description = "Solana Performance APIs" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -22,10 +22,10 @@ log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" serde = "1.0.138" -solana-metrics = { path = "../metrics", version = "=1.14.23" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.23" } -solana-sdk = { path = "../sdk", version = "=1.14.23" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.23" } +solana-metrics = { path = "../metrics", version = "=1.14.24" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.24" } +solana-sdk = { path = "../sdk", version = "=1.14.24" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.24" } [target."cfg(target_os = \"linux\")".dependencies] caps = "0.5.3" @@ -38,7 +38,7 @@ name = "solana_perf" [dev-dependencies] matches = "0.1.9" rand_chacha = "0.2.2" -solana-logger = { path = "../logger", version = "=1.14.23" } +solana-logger = { path = "../logger", version = "=1.14.24" } test-case = "2.1.0" [[bench]] diff --git a/poh-bench/Cargo.toml b/poh-bench/Cargo.toml index 46bf35f3b7a61a..2cfd97308150b7 100644 --- a/poh-bench/Cargo.toml +++ b/poh-bench/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-poh-bench" -version = "1.14.23" +version = "1.14.24" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,12 +14,12 @@ clap = { version = "3.1.5", features = ["cargo"] } log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" -solana-entry = { path = "../entry", version = "=1.14.23" } -solana-logger = { path = "../logger", version = "=1.14.23" } -solana-measure = { path = "../measure", version = "=1.14.23" } -solana-perf = { path = "../perf", version = "=1.14.23" } -solana-sdk = { path = "../sdk", version = "=1.14.23" } -solana-version = { path = "../version", version = "=1.14.23" } +solana-entry = { path = "../entry", version = "=1.14.24" } +solana-logger = { path = "../logger", version = "=1.14.24" } +solana-measure = { path = "../measure", version = "=1.14.24" } +solana-perf = { path = "../perf", version = "=1.14.24" } +solana-sdk = { path = "../sdk", version = "=1.14.24" } +solana-version = { path = "../version", version = "=1.14.24" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/poh/Cargo.toml b/poh/Cargo.toml index 21c53c3f8976fb..52c025e827e98a 100644 --- a/poh/Cargo.toml +++ b/poh/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-poh" -version = "1.14.23" +version = "1.14.24" description = "Solana PoH" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,21 +13,21 @@ edition = "2021" core_affinity = "0.5.10" crossbeam-channel = "0.5" log = "0.4.17" -solana-entry = { path = "../entry", version = "=1.14.23" } -solana-ledger = { path = "../ledger", version = "=1.14.23" } -solana-measure = { path = "../measure", version = "=1.14.23" } -solana-metrics = { path = "../metrics", version = "=1.14.23" } -solana-runtime = { path = "../runtime", version = "=1.14.23" } -solana-sdk = { path = "../sdk", version = "=1.14.23" } -solana-sys-tuner = { path = "../sys-tuner", version = "=1.14.23" } +solana-entry = { path = "../entry", version = "=1.14.24" } +solana-ledger = { path = "../ledger", version = "=1.14.24" } +solana-measure = { path = "../measure", version = "=1.14.24" } +solana-metrics = { path = "../metrics", version = "=1.14.24" } +solana-runtime = { path = "../runtime", version = "=1.14.24" } +solana-sdk = { path = "../sdk", version = "=1.14.24" } +solana-sys-tuner = { path = "../sys-tuner", version = "=1.14.24" } thiserror = "1.0" [dev-dependencies] bincode = "1.3.3" matches = "0.1.9" rand = "0.7.0" -solana-logger = { path = "../logger", version = "=1.14.23" } -solana-perf = { path = "../perf", version = "=1.14.23" } +solana-logger = { path = "../logger", version = "=1.14.24" } +solana-perf = { path = "../perf", version = "=1.14.24" } [lib] crate-type = ["lib"] diff --git a/program-runtime/Cargo.toml b/program-runtime/Cargo.toml index c0a984ade9f873..4f86ae748d6f7d 100644 --- a/program-runtime/Cargo.toml +++ b/program-runtime/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-program-runtime" -version = "1.14.23" +version = "1.14.24" description = "Solana program runtime" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -21,16 +21,16 @@ num-derive = { version = "0.3" } num-traits = { version = "0.2" } rand = "0.7.0" serde = { version = "1.0.129", features = ["derive", "rc"] } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.23" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.23" } -solana-measure = { path = "../measure", version = "=1.14.23" } -solana-metrics = { path = "../metrics", version = "=1.14.23" } -solana-sdk = { path = "../sdk", version = "=1.14.23" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.24" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.24" } +solana-measure = { path = "../measure", version = "=1.14.24" } +solana-metrics = { path = "../metrics", version = "=1.14.24" } +solana-sdk = { path = "../sdk", version = "=1.14.24" } thiserror = "1.0" enum-iterator = "0.8.1" [dev-dependencies] -solana-logger = { path = "../logger", version = "=1.14.23" } +solana-logger = { path = "../logger", version = "=1.14.24" } [lib] crate-type = ["lib"] diff --git a/program-test/Cargo.toml b/program-test/Cargo.toml index 4990b42ed52a9d..19a0b75fe0f8b6 100644 --- a/program-test/Cargo.toml +++ b/program-test/Cargo.toml @@ -5,7 +5,7 @@ edition = "2021" license = "Apache-2.0" name = "solana-program-test" repository = "https://github.com/solana-labs/solana" -version = "1.14.23" +version = "1.14.24" [dependencies] assert_matches = "1.5.0" @@ -15,16 +15,16 @@ bincode = "1.3.3" chrono-humanize = "0.2.1" log = "0.4.17" serde = "1.0.138" -solana-banks-client = { path = "../banks-client", version = "=1.14.23" } -solana-banks-server = { path = "../banks-server", version = "=1.14.23" } -solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.23" } -solana-logger = { path = "../logger", version = "=1.14.23" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.23" } -solana-runtime = { path = "../runtime", version = "=1.14.23" } -solana-sdk = { path = "../sdk", version = "=1.14.23" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.23" } +solana-banks-client = { path = "../banks-client", version = "=1.14.24" } +solana-banks-server = { path = "../banks-server", version = "=1.14.24" } +solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.24" } +solana-logger = { path = "../logger", version = "=1.14.24" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.24" } +solana-runtime = { path = "../runtime", version = "=1.14.24" } +solana-sdk = { path = "../sdk", version = "=1.14.24" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.24" } thiserror = "1.0" tokio = { version = "1", features = ["full"] } [dev-dependencies] -solana-stake-program = { path = "../programs/stake", version = "=1.14.23" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.24" } diff --git a/programs/address-lookup-table-tests/Cargo.toml b/programs/address-lookup-table-tests/Cargo.toml index 1b214558c5afec..c255fde9548175 100644 --- a/programs/address-lookup-table-tests/Cargo.toml +++ b/programs/address-lookup-table-tests/Cargo.toml @@ -3,7 +3,7 @@ [package] name = "solana-address-lookup-table-program-tests" -version = "1.14.23" +version = "1.14.24" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" @@ -14,9 +14,9 @@ publish = false [dev-dependencies] assert_matches = "1.5.0" bincode = "1.3.3" -solana-address-lookup-table-program = { path = "../address-lookup-table", version = "=1.14.23" } -solana-program-test = { path = "../../program-test", version = "=1.14.23" } -solana-sdk = { path = "../../sdk", version = "=1.14.23" } +solana-address-lookup-table-program = { path = "../address-lookup-table", version = "=1.14.24" } +solana-program-test = { path = "../../program-test", version = "=1.14.24" } +solana-sdk = { path = "../../sdk", version = "=1.14.24" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/address-lookup-table/Cargo.toml b/programs/address-lookup-table/Cargo.toml index 80ed8cbbc812a8..08f76003c01a45 100644 --- a/programs/address-lookup-table/Cargo.toml +++ b/programs/address-lookup-table/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-address-lookup-table-program" -version = "1.14.23" +version = "1.14.24" description = "Solana address lookup table program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -16,14 +16,14 @@ log = "0.4.17" num-derive = "0.3" num-traits = "0.2" serde = { version = "1.0.138", features = ["derive"] } -solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.23" } -solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.23" } -solana-program = { path = "../../sdk/program", version = "=1.14.23" } +solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.24" } +solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.24" } +solana-program = { path = "../../sdk/program", version = "=1.14.24" } thiserror = "1.0" [target.'cfg(not(target_os = "solana"))'.dependencies] -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.23" } -solana-sdk = { path = "../../sdk", version = "=1.14.23" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.24" } +solana-sdk = { path = "../../sdk", version = "=1.14.24" } [build-dependencies] rustc_version = "0.4" diff --git a/programs/bpf-loader-tests/Cargo.toml b/programs/bpf-loader-tests/Cargo.toml index 9e475cefa53a7b..48f47d39b451bc 100644 --- a/programs/bpf-loader-tests/Cargo.toml +++ b/programs/bpf-loader-tests/Cargo.toml @@ -3,7 +3,7 @@ [package] name = "solana-bpf-loader-program-tests" -version = "1.14.23" +version = "1.14.24" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" @@ -14,9 +14,9 @@ publish = false [dev-dependencies] assert_matches = "1.5.0" bincode = "1.3.3" -solana-bpf-loader-program = { path = "../bpf_loader", version = "=1.14.23" } -solana-program-test = { path = "../../program-test", version = "=1.14.23" } -solana-sdk = { path = "../../sdk", version = "=1.14.23" } +solana-bpf-loader-program = { path = "../bpf_loader", version = "=1.14.24" } +solana-program-test = { path = "../../program-test", version = "=1.14.24" } +solana-sdk = { path = "../../sdk", version = "=1.14.24" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/bpf/Cargo.lock b/programs/bpf/Cargo.lock index 5559318c59aeec..61ed30f4f86bb2 100644 --- a/programs/bpf/Cargo.lock +++ b/programs/bpf/Cargo.lock @@ -4101,7 +4101,7 @@ dependencies = [ [[package]] name = "solana-account-decoder" -version = "1.14.23" +version = "1.14.24" dependencies = [ "Inflector", "base64 0.13.0", @@ -4114,7 +4114,7 @@ dependencies = [ "serde_json", "solana-address-lookup-table-program", "solana-config-program", - "solana-sdk 1.14.23", + "solana-sdk 1.14.24", "solana-vote-program", "spl-token", "spl-token-2022", @@ -4124,7 +4124,7 @@ dependencies = [ [[package]] name = "solana-address-lookup-table-program" -version = "1.14.23" +version = "1.14.24" dependencies = [ "bincode", "bytemuck", @@ -4133,23 +4133,23 @@ dependencies = [ "num-traits", "rustc_version", "serde", - "solana-frozen-abi 1.14.23", - "solana-frozen-abi-macro 1.14.23", - "solana-program 1.14.23", + "solana-frozen-abi 1.14.24", + "solana-frozen-abi-macro 1.14.24", + "solana-program 1.14.24", "solana-program-runtime", - "solana-sdk 1.14.23", + "solana-sdk 1.14.24", "thiserror", ] [[package]] name = "solana-banks-client" -version = "1.14.23" +version = "1.14.24" dependencies = [ "borsh", "futures 0.3.21", "solana-banks-interface", - "solana-program 1.14.23", - "solana-sdk 1.14.23", + "solana-program 1.14.24", + "solana-sdk 1.14.24", "tarpc", "thiserror", "tokio", @@ -4158,16 +4158,16 @@ dependencies = [ [[package]] name = "solana-banks-interface" -version = "1.14.23" +version = "1.14.24" dependencies = [ "serde", - "solana-sdk 1.14.23", + "solana-sdk 1.14.24", "tarpc", ] [[package]] name = "solana-banks-server" -version = "1.14.23" +version = "1.14.24" dependencies = [ "bincode", "crossbeam-channel", @@ -4175,7 +4175,7 @@ dependencies = [ "solana-banks-interface", "solana-client", "solana-runtime", - "solana-sdk 1.14.23", + "solana-sdk 1.14.24", "solana-send-transaction-service", "tarpc", "tokio", @@ -4185,7 +4185,7 @@ dependencies = [ [[package]] name = "solana-bloom" -version = "1.14.23" +version = "1.14.24" dependencies = [ "bv", "fnv", @@ -4195,14 +4195,14 @@ dependencies = [ "rustc_version", "serde", "serde_derive", - "solana-frozen-abi 1.14.23", - "solana-frozen-abi-macro 1.14.23", - "solana-sdk 1.14.23", + "solana-frozen-abi 1.14.24", + "solana-frozen-abi-macro 1.14.24", + "solana-sdk 1.14.24", ] [[package]] name = "solana-bpf-loader-program" -version = "1.14.23" +version = "1.14.24" dependencies = [ "bincode", "byteorder 1.4.3", @@ -4211,15 +4211,15 @@ dependencies = [ "solana-measure", "solana-metrics", "solana-program-runtime", - "solana-sdk 1.14.23", - "solana-zk-token-sdk 1.14.23", + "solana-sdk 1.14.24", + "solana-zk-token-sdk 1.14.24", "solana_rbpf", "thiserror", ] [[package]] name = "solana-bpf-programs" -version = "1.14.23" +version = "1.14.24" dependencies = [ "bincode", "byteorder 1.4.3", @@ -4235,11 +4235,11 @@ dependencies = [ "solana-bpf-rust-realloc-invoke", "solana-cli-output", "solana-ledger", - "solana-logger 1.14.23", + "solana-logger 1.14.24", "solana-measure", "solana-program-runtime", "solana-runtime", - "solana-sdk 1.14.23", + "solana-sdk 1.14.24", "solana-transaction-status", "solana_rbpf", "walkdir", @@ -4247,385 +4247,385 @@ dependencies = [ [[package]] name = "solana-bpf-rust-128bit" -version = "1.14.23" +version = "1.14.24" dependencies = [ "solana-bpf-rust-128bit-dep", - "solana-program 1.14.23", + "solana-program 1.14.24", ] [[package]] name = "solana-bpf-rust-128bit-dep" -version = "1.14.23" +version = "1.14.24" dependencies = [ - "solana-program 1.14.23", + "solana-program 1.14.24", ] [[package]] name = "solana-bpf-rust-alloc" -version = "1.14.23" +version = "1.14.24" dependencies = [ - "solana-program 1.14.23", + "solana-program 1.14.24", ] [[package]] name = "solana-bpf-rust-call-depth" -version = "1.14.23" +version = "1.14.24" dependencies = [ - "solana-program 1.14.23", + "solana-program 1.14.24", ] [[package]] name = "solana-bpf-rust-caller-access" -version = "1.14.23" +version = "1.14.24" dependencies = [ - "solana-program 1.14.23", + "solana-program 1.14.24", ] [[package]] name = "solana-bpf-rust-curve25519" -version = "1.14.23" +version = "1.14.24" dependencies = [ - "solana-program 1.14.23", - "solana-zk-token-sdk 1.14.23", + "solana-program 1.14.24", + "solana-zk-token-sdk 1.14.24", ] [[package]] name = "solana-bpf-rust-custom-heap" -version = "1.14.23" +version = "1.14.24" dependencies = [ - "solana-program 1.14.23", + "solana-program 1.14.24", ] [[package]] name = "solana-bpf-rust-dep-crate" -version = "1.14.23" +version = "1.14.24" dependencies = [ "byteorder 1.4.3", "solana-address-lookup-table-program", - "solana-program 1.14.23", + "solana-program 1.14.24", ] [[package]] name = "solana-bpf-rust-deprecated-loader" -version = "1.14.23" +version = "1.14.24" dependencies = [ - "solana-program 1.14.23", + "solana-program 1.14.24", ] [[package]] name = "solana-bpf-rust-dup-accounts" -version = "1.14.23" +version = "1.14.24" dependencies = [ - "solana-program 1.14.23", + "solana-program 1.14.24", ] [[package]] name = "solana-bpf-rust-error-handling" -version = "1.14.23" +version = "1.14.24" dependencies = [ "num-derive", "num-traits", - "solana-program 1.14.23", + "solana-program 1.14.24", "thiserror", ] [[package]] name = "solana-bpf-rust-external-spend" -version = "1.14.23" +version = "1.14.24" dependencies = [ - "solana-program 1.14.23", + "solana-program 1.14.24", ] [[package]] name = "solana-bpf-rust-finalize" -version = "1.14.23" +version = "1.14.24" dependencies = [ - "solana-program 1.14.23", + "solana-program 1.14.24", ] [[package]] name = "solana-bpf-rust-get-minimum-delegation" -version = "1.14.23" +version = "1.14.24" dependencies = [ - "solana-program 1.14.23", + "solana-program 1.14.24", ] [[package]] name = "solana-bpf-rust-inner_instruction_alignment_check" -version = "1.14.23" +version = "1.14.24" dependencies = [ - "solana-program 1.14.23", + "solana-program 1.14.24", ] [[package]] name = "solana-bpf-rust-instruction-introspection" -version = "1.14.23" +version = "1.14.24" dependencies = [ - "solana-program 1.14.23", + "solana-program 1.14.24", ] [[package]] name = "solana-bpf-rust-invoke" -version = "1.14.23" +version = "1.14.24" dependencies = [ "solana-bpf-rust-invoked", - "solana-program 1.14.23", + "solana-program 1.14.24", ] [[package]] name = "solana-bpf-rust-invoke-and-error" -version = "1.14.23" +version = "1.14.24" dependencies = [ - "solana-program 1.14.23", + "solana-program 1.14.24", ] [[package]] name = "solana-bpf-rust-invoke-and-ok" -version = "1.14.23" +version = "1.14.24" dependencies = [ - "solana-program 1.14.23", + "solana-program 1.14.24", ] [[package]] name = "solana-bpf-rust-invoke-and-return" -version = "1.14.23" +version = "1.14.24" dependencies = [ - "solana-program 1.14.23", + "solana-program 1.14.24", ] [[package]] name = "solana-bpf-rust-invoked" -version = "1.14.23" +version = "1.14.24" dependencies = [ - "solana-program 1.14.23", + "solana-program 1.14.24", ] [[package]] name = "solana-bpf-rust-iter" -version = "1.14.23" +version = "1.14.24" dependencies = [ - "solana-program 1.14.23", + "solana-program 1.14.24", ] [[package]] name = "solana-bpf-rust-log-data" -version = "1.14.23" +version = "1.14.24" dependencies = [ - "solana-program 1.14.23", + "solana-program 1.14.24", ] [[package]] name = "solana-bpf-rust-many-args" -version = "1.14.23" +version = "1.14.24" dependencies = [ "solana-bpf-rust-many-args-dep", - "solana-program 1.14.23", + "solana-program 1.14.24", ] [[package]] name = "solana-bpf-rust-many-args-dep" -version = "1.14.23" +version = "1.14.24" dependencies = [ - "solana-program 1.14.23", + "solana-program 1.14.24", ] [[package]] name = "solana-bpf-rust-mem" -version = "1.14.23" +version = "1.14.24" dependencies = [ - "solana-program 1.14.23", + "solana-program 1.14.24", "solana-program-runtime", "solana-program-test", - "solana-sdk 1.14.23", + "solana-sdk 1.14.24", ] [[package]] name = "solana-bpf-rust-membuiltins" -version = "1.14.23" +version = "1.14.24" dependencies = [ "solana-bpf-rust-mem", - "solana-program 1.14.23", + "solana-program 1.14.24", ] [[package]] name = "solana-bpf-rust-noop" -version = "1.14.23" +version = "1.14.24" dependencies = [ - "solana-program 1.14.23", + "solana-program 1.14.24", ] [[package]] name = "solana-bpf-rust-panic" -version = "1.14.23" +version = "1.14.24" dependencies = [ - "solana-program 1.14.23", + "solana-program 1.14.24", ] [[package]] name = "solana-bpf-rust-param-passing" -version = "1.14.23" +version = "1.14.24" dependencies = [ "solana-bpf-rust-param-passing-dep", - "solana-program 1.14.23", + "solana-program 1.14.24", ] [[package]] name = "solana-bpf-rust-param-passing-dep" -version = "1.14.23" +version = "1.14.24" dependencies = [ - "solana-program 1.14.23", + "solana-program 1.14.24", ] [[package]] name = "solana-bpf-rust-rand" -version = "1.14.23" +version = "1.14.24" dependencies = [ "getrandom 0.1.14", "rand 0.7.3", - "solana-program 1.14.23", + "solana-program 1.14.24", ] [[package]] name = "solana-bpf-rust-realloc" -version = "1.14.23" +version = "1.14.24" dependencies = [ - "solana-program 1.14.23", + "solana-program 1.14.24", ] [[package]] name = "solana-bpf-rust-realloc-invoke" -version = "1.14.23" +version = "1.14.24" dependencies = [ "solana-bpf-rust-realloc", - "solana-program 1.14.23", + "solana-program 1.14.24", ] [[package]] name = "solana-bpf-rust-ro-account_modify" -version = "1.14.23" +version = "1.14.24" dependencies = [ - "solana-program 1.14.23", + "solana-program 1.14.24", ] [[package]] name = "solana-bpf-rust-ro-modify" -version = "1.14.23" +version = "1.14.24" dependencies = [ - "solana-program 1.14.23", + "solana-program 1.14.24", ] [[package]] name = "solana-bpf-rust-sanity" -version = "1.14.23" +version = "1.14.24" dependencies = [ - "solana-program 1.14.23", + "solana-program 1.14.24", "solana-program-runtime", "solana-program-test", - "solana-sdk 1.14.23", + "solana-sdk 1.14.24", ] [[package]] name = "solana-bpf-rust-secp256k1-recover" -version = "1.14.23" +version = "1.14.24" dependencies = [ "libsecp256k1 0.7.0", - "solana-program 1.14.23", + "solana-program 1.14.24", ] [[package]] name = "solana-bpf-rust-sha" -version = "1.14.23" +version = "1.14.24" dependencies = [ "blake3", - "solana-program 1.14.23", + "solana-program 1.14.24", ] [[package]] name = "solana-bpf-rust-sibling-instructions" -version = "1.14.23" +version = "1.14.24" dependencies = [ - "solana-program 1.14.23", + "solana-program 1.14.24", ] [[package]] name = "solana-bpf-rust-sibling_inner-instructions" -version = "1.14.23" +version = "1.14.24" dependencies = [ - "solana-program 1.14.23", + "solana-program 1.14.24", ] [[package]] name = "solana-bpf-rust-simulation" -version = "1.14.23" +version = "1.14.24" dependencies = [ - "solana-logger 1.14.23", - "solana-program 1.14.23", + "solana-logger 1.14.24", + "solana-program 1.14.24", "solana-program-test", - "solana-sdk 1.14.23", + "solana-sdk 1.14.24", "solana-validator", ] [[package]] name = "solana-bpf-rust-spoof1" -version = "1.14.23" +version = "1.14.24" dependencies = [ - "solana-program 1.14.23", + "solana-program 1.14.24", ] [[package]] name = "solana-bpf-rust-spoof1-system" -version = "1.14.23" +version = "1.14.24" dependencies = [ - "solana-program 1.14.23", + "solana-program 1.14.24", ] [[package]] name = "solana-bpf-rust-sysvar" -version = "1.14.23" +version = "1.14.24" dependencies = [ - "solana-program 1.14.23", + "solana-program 1.14.24", "solana-program-runtime", "solana-program-test", - "solana-sdk 1.14.23", + "solana-sdk 1.14.24", ] [[package]] name = "solana-bpf-rust-upgradeable" -version = "1.14.23" +version = "1.14.24" dependencies = [ - "solana-program 1.14.23", + "solana-program 1.14.24", ] [[package]] name = "solana-bpf-rust-upgraded" -version = "1.14.23" +version = "1.14.24" dependencies = [ - "solana-program 1.14.23", + "solana-program 1.14.24", ] [[package]] name = "solana-bucket-map" -version = "1.14.23" +version = "1.14.24" dependencies = [ "log", "memmap2", "modular-bitfield", "rand 0.7.3", "solana-measure", - "solana-sdk 1.14.23", + "solana-sdk 1.14.24", "tempfile", ] [[package]] name = "solana-clap-utils" -version = "1.14.23" +version = "1.14.24" dependencies = [ "chrono", "clap 2.33.3", "rpassword", "solana-perf", "solana-remote-wallet", - "solana-sdk 1.14.23", + "solana-sdk 1.14.24", "thiserror", "tiny-bip39", "uriparse", @@ -4634,7 +4634,7 @@ dependencies = [ [[package]] name = "solana-cli-config" -version = "1.14.23" +version = "1.14.24" dependencies = [ "dirs-next", "lazy_static", @@ -4642,13 +4642,13 @@ dependencies = [ "serde_derive", "serde_yaml", "solana-clap-utils", - "solana-sdk 1.14.23", + "solana-sdk 1.14.24", "url 2.2.2", ] [[package]] name = "solana-cli-output" -version = "1.14.23" +version = "1.14.24" dependencies = [ "Inflector", "base64 0.13.0", @@ -4665,7 +4665,7 @@ dependencies = [ "solana-clap-utils", "solana-cli-config", "solana-client", - "solana-sdk 1.14.23", + "solana-sdk 1.14.24", "solana-transaction-status", "solana-vote-program", "spl-memo", @@ -4673,7 +4673,7 @@ dependencies = [ [[package]] name = "solana-client" -version = "1.14.23" +version = "1.14.24" dependencies = [ "async-mutex", "async-trait", @@ -4709,7 +4709,7 @@ dependencies = [ "solana-measure", "solana-metrics", "solana-net-utils", - "solana-sdk 1.14.23", + "solana-sdk 1.14.24", "solana-streamer", "solana-transaction-status", "solana-version", @@ -4725,27 +4725,27 @@ dependencies = [ [[package]] name = "solana-compute-budget-program" -version = "1.14.23" +version = "1.14.24" dependencies = [ "solana-program-runtime", - "solana-sdk 1.14.23", + "solana-sdk 1.14.24", ] [[package]] name = "solana-config-program" -version = "1.14.23" +version = "1.14.24" dependencies = [ "bincode", "chrono", "serde", "serde_derive", "solana-program-runtime", - "solana-sdk 1.14.23", + "solana-sdk 1.14.24", ] [[package]] name = "solana-core" -version = "1.14.23" +version = "1.14.24" dependencies = [ "ahash", "base64 0.13.0", @@ -4774,8 +4774,8 @@ dependencies = [ "solana-bloom", "solana-client", "solana-entry", - "solana-frozen-abi 1.14.23", - "solana-frozen-abi-macro 1.14.23", + "solana-frozen-abi 1.14.24", + "solana-frozen-abi-macro 1.14.24", "solana-geyser-plugin-manager", "solana-gossip", "solana-ledger", @@ -4788,7 +4788,7 @@ dependencies = [ "solana-rayon-threadlimit", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.23", + "solana-sdk 1.14.24", "solana-send-transaction-service", "solana-streamer", "solana-transaction-status", @@ -4804,19 +4804,19 @@ dependencies = [ [[package]] name = "solana-download-utils" -version = "1.14.23" +version = "1.14.24" dependencies = [ "console", "indicatif", "log", "reqwest", "solana-runtime", - "solana-sdk 1.14.23", + "solana-sdk 1.14.24", ] [[package]] name = "solana-entry" -version = "1.14.23" +version = "1.14.24" dependencies = [ "bincode", "crossbeam-channel", @@ -4832,12 +4832,12 @@ dependencies = [ "solana-metrics", "solana-perf", "solana-rayon-threadlimit", - "solana-sdk 1.14.23", + "solana-sdk 1.14.24", ] [[package]] name = "solana-faucet" -version = "1.14.23" +version = "1.14.24" dependencies = [ "bincode", "byteorder 1.4.3", @@ -4848,9 +4848,9 @@ dependencies = [ "serde_derive", "solana-clap-utils", "solana-cli-config", - "solana-logger 1.14.23", + "solana-logger 1.14.24", "solana-metrics", - "solana-sdk 1.14.23", + "solana-sdk 1.14.24", "solana-version", "spl-memo", "thiserror", @@ -4893,7 +4893,7 @@ dependencies = [ [[package]] name = "solana-frozen-abi" -version = "1.14.23" +version = "1.14.24" dependencies = [ "ahash", "blake3", @@ -4918,7 +4918,7 @@ dependencies = [ "serde_derive", "serde_json", "sha2 0.10.2", - "solana-frozen-abi-macro 1.14.23", + "solana-frozen-abi-macro 1.14.24", "subtle", "thiserror", ] @@ -4937,7 +4937,7 @@ dependencies = [ [[package]] name = "solana-frozen-abi-macro" -version = "1.14.23" +version = "1.14.24" dependencies = [ "proc-macro2 1.0.51", "quote 1.0.18", @@ -4947,26 +4947,26 @@ dependencies = [ [[package]] name = "solana-genesis-utils" -version = "1.14.23" +version = "1.14.24" dependencies = [ "solana-download-utils", "solana-runtime", - "solana-sdk 1.14.23", + "solana-sdk 1.14.24", ] [[package]] name = "solana-geyser-plugin-interface" -version = "1.14.23" +version = "1.14.24" dependencies = [ "log", - "solana-sdk 1.14.23", + "solana-sdk 1.14.24", "solana-transaction-status", "thiserror", ] [[package]] name = "solana-geyser-plugin-manager" -version = "1.14.23" +version = "1.14.24" dependencies = [ "bs58", "crossbeam-channel", @@ -4979,14 +4979,14 @@ dependencies = [ "solana-metrics", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.23", + "solana-sdk 1.14.24", "solana-transaction-status", "thiserror", ] [[package]] name = "solana-gossip" -version = "1.14.23" +version = "1.14.24" dependencies = [ "bincode", "bv", @@ -5010,17 +5010,17 @@ dependencies = [ "solana-clap-utils", "solana-client", "solana-entry", - "solana-frozen-abi 1.14.23", - "solana-frozen-abi-macro 1.14.23", + "solana-frozen-abi 1.14.24", + "solana-frozen-abi-macro 1.14.24", "solana-ledger", - "solana-logger 1.14.23", + "solana-logger 1.14.24", "solana-measure", "solana-metrics", "solana-net-utils", "solana-perf", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.14.23", + "solana-sdk 1.14.24", "solana-streamer", "solana-version", "solana-vote-program", @@ -5029,7 +5029,7 @@ dependencies = [ [[package]] name = "solana-ledger" -version = "1.14.23" +version = "1.14.24" dependencies = [ "assert_matches", "bincode", @@ -5061,15 +5061,15 @@ dependencies = [ "solana-account-decoder", "solana-bpf-loader-program", "solana-entry", - "solana-frozen-abi 1.14.23", - "solana-frozen-abi-macro 1.14.23", + "solana-frozen-abi 1.14.24", + "solana-frozen-abi-macro 1.14.24", "solana-measure", "solana-metrics", "solana-perf", "solana-program-runtime", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.14.23", + "solana-sdk 1.14.24", "solana-stake-program", "solana-storage-bigtable", "solana-storage-proto", @@ -5098,7 +5098,7 @@ dependencies = [ [[package]] name = "solana-logger" -version = "1.14.23" +version = "1.14.24" dependencies = [ "env_logger", "lazy_static", @@ -5107,36 +5107,36 @@ dependencies = [ [[package]] name = "solana-measure" -version = "1.14.23" +version = "1.14.24" dependencies = [ "log", - "solana-sdk 1.14.23", + "solana-sdk 1.14.24", ] [[package]] name = "solana-merkle-tree" -version = "1.14.23" +version = "1.14.24" dependencies = [ "fast-math", "matches", - "solana-program 1.14.23", + "solana-program 1.14.24", ] [[package]] name = "solana-metrics" -version = "1.14.23" +version = "1.14.24" dependencies = [ "crossbeam-channel", "gethostname", "lazy_static", "log", "reqwest", - "solana-sdk 1.14.23", + "solana-sdk 1.14.24", ] [[package]] name = "solana-net-utils" -version = "1.14.23" +version = "1.14.24" dependencies = [ "bincode", "clap 3.1.6", @@ -5147,8 +5147,8 @@ dependencies = [ "serde", "serde_derive", "socket2", - "solana-logger 1.14.23", - "solana-sdk 1.14.23", + "solana-logger 1.14.24", + "solana-sdk 1.14.24", "solana-version", "tokio", "url 2.2.2", @@ -5156,7 +5156,7 @@ dependencies = [ [[package]] name = "solana-perf" -version = "1.14.23" +version = "1.14.24" dependencies = [ "ahash", "bincode", @@ -5175,13 +5175,13 @@ dependencies = [ "serde", "solana-metrics", "solana-rayon-threadlimit", - "solana-sdk 1.14.23", + "solana-sdk 1.14.24", "solana-vote-program", ] [[package]] name = "solana-poh" -version = "1.14.23" +version = "1.14.24" dependencies = [ "core_affinity", "crossbeam-channel", @@ -5191,7 +5191,7 @@ dependencies = [ "solana-measure", "solana-metrics", "solana-runtime", - "solana-sdk 1.14.23", + "solana-sdk 1.14.24", "solana-sys-tuner", "thiserror", ] @@ -5247,7 +5247,7 @@ dependencies = [ [[package]] name = "solana-program" -version = "1.14.23" +version = "1.14.24" dependencies = [ "base64 0.13.0", "bincode", @@ -5283,9 +5283,9 @@ dependencies = [ "serde_json", "sha2 0.10.2", "sha3 0.10.1", - "solana-frozen-abi 1.14.23", - "solana-frozen-abi-macro 1.14.23", - "solana-sdk-macro 1.14.23", + "solana-frozen-abi 1.14.24", + "solana-frozen-abi-macro 1.14.24", + "solana-sdk-macro 1.14.24", "thiserror", "tiny-bip39", "wasm-bindgen", @@ -5294,7 +5294,7 @@ dependencies = [ [[package]] name = "solana-program-runtime" -version = "1.14.23" +version = "1.14.24" dependencies = [ "base64 0.13.0", "bincode", @@ -5309,17 +5309,17 @@ dependencies = [ "rand 0.7.3", "rustc_version", "serde", - "solana-frozen-abi 1.14.23", - "solana-frozen-abi-macro 1.14.23", + "solana-frozen-abi 1.14.24", + "solana-frozen-abi-macro 1.14.24", "solana-measure", "solana-metrics", - "solana-sdk 1.14.23", + "solana-sdk 1.14.24", "thiserror", ] [[package]] name = "solana-program-test" -version = "1.14.23" +version = "1.14.24" dependencies = [ "assert_matches", "async-trait", @@ -5331,10 +5331,10 @@ dependencies = [ "solana-banks-client", "solana-banks-server", "solana-bpf-loader-program", - "solana-logger 1.14.23", + "solana-logger 1.14.24", "solana-program-runtime", "solana-runtime", - "solana-sdk 1.14.23", + "solana-sdk 1.14.24", "solana-vote-program", "thiserror", "tokio", @@ -5342,7 +5342,7 @@ dependencies = [ [[package]] name = "solana-rayon-threadlimit" -version = "1.14.23" +version = "1.14.24" dependencies = [ "lazy_static", "num_cpus", @@ -5350,7 +5350,7 @@ dependencies = [ [[package]] name = "solana-remote-wallet" -version = "1.14.23" +version = "1.14.24" dependencies = [ "console", "dialoguer", @@ -5360,14 +5360,14 @@ dependencies = [ "parking_lot 0.12.1", "qstring", "semver", - "solana-sdk 1.14.23", + "solana-sdk 1.14.24", "thiserror", "uriparse", ] [[package]] name = "solana-rpc" -version = "1.14.23" +version = "1.14.24" dependencies = [ "base64 0.13.0", "bincode", @@ -5400,7 +5400,7 @@ dependencies = [ "solana-poh", "solana-rayon-threadlimit", "solana-runtime", - "solana-sdk 1.14.23", + "solana-sdk 1.14.24", "solana-send-transaction-service", "solana-stake-program", "solana-storage-bigtable", @@ -5418,7 +5418,7 @@ dependencies = [ [[package]] name = "solana-runtime" -version = "1.14.23" +version = "1.14.24" dependencies = [ "arrayref", "bincode", @@ -5455,17 +5455,17 @@ dependencies = [ "solana-bucket-map", "solana-compute-budget-program", "solana-config-program", - "solana-frozen-abi 1.14.23", - "solana-frozen-abi-macro 1.14.23", + "solana-frozen-abi 1.14.24", + "solana-frozen-abi-macro 1.14.24", "solana-measure", "solana-metrics", "solana-program-runtime", "solana-rayon-threadlimit", - "solana-sdk 1.14.23", + "solana-sdk 1.14.24", "solana-stake-program", "solana-vote-program", "solana-zk-token-proof-program", - "solana-zk-token-sdk 1.14.23", + "solana-zk-token-sdk 1.14.24", "strum", "strum_macros", "symlink", @@ -5528,7 +5528,7 @@ dependencies = [ [[package]] name = "solana-sdk" -version = "1.14.23" +version = "1.14.24" dependencies = [ "assert_matches", "base64 0.13.0", @@ -5565,11 +5565,11 @@ dependencies = [ "serde_json", "sha2 0.10.2", "sha3 0.10.1", - "solana-frozen-abi 1.14.23", - "solana-frozen-abi-macro 1.14.23", - "solana-logger 1.14.23", - "solana-program 1.14.23", - "solana-sdk-macro 1.14.23", + "solana-frozen-abi 1.14.24", + "solana-frozen-abi-macro 1.14.24", + "solana-logger 1.14.24", + "solana-program 1.14.24", + "solana-sdk-macro 1.14.24", "thiserror", "uriparse", "wasm-bindgen", @@ -5590,7 +5590,7 @@ dependencies = [ [[package]] name = "solana-sdk-macro" -version = "1.14.23" +version = "1.14.24" dependencies = [ "bs58", "proc-macro2 1.0.51", @@ -5601,7 +5601,7 @@ dependencies = [ [[package]] name = "solana-send-transaction-service" -version = "1.14.23" +version = "1.14.24" dependencies = [ "crossbeam-channel", "log", @@ -5609,12 +5609,12 @@ dependencies = [ "solana-measure", "solana-metrics", "solana-runtime", - "solana-sdk 1.14.23", + "solana-sdk 1.14.24", ] [[package]] name = "solana-stake-program" -version = "1.14.23" +version = "1.14.24" dependencies = [ "bincode", "log", @@ -5624,18 +5624,18 @@ dependencies = [ "serde", "serde_derive", "solana-config-program", - "solana-frozen-abi 1.14.23", - "solana-frozen-abi-macro 1.14.23", + "solana-frozen-abi 1.14.24", + "solana-frozen-abi-macro 1.14.24", "solana-metrics", "solana-program-runtime", - "solana-sdk 1.14.23", + "solana-sdk 1.14.24", "solana-vote-program", "thiserror", ] [[package]] name = "solana-storage-bigtable" -version = "1.14.23" +version = "1.14.24" dependencies = [ "backoff", "bincode", @@ -5656,7 +5656,7 @@ dependencies = [ "serde_derive", "smpl_jwt", "solana-metrics", - "solana-sdk 1.14.23", + "solana-sdk 1.14.24", "solana-storage-proto", "solana-transaction-status", "thiserror", @@ -5667,7 +5667,7 @@ dependencies = [ [[package]] name = "solana-storage-proto" -version = "1.14.23" +version = "1.14.24" dependencies = [ "bincode", "bs58", @@ -5675,14 +5675,14 @@ dependencies = [ "protobuf-src", "serde", "solana-account-decoder", - "solana-sdk 1.14.23", + "solana-sdk 1.14.24", "solana-transaction-status", "tonic-build 0.8.0", ] [[package]] name = "solana-streamer" -version = "1.14.23" +version = "1.14.24" dependencies = [ "crossbeam-channel", "futures-util", @@ -5701,7 +5701,7 @@ dependencies = [ "rustls 0.20.6", "solana-metrics", "solana-perf", - "solana-sdk 1.14.23", + "solana-sdk 1.14.24", "thiserror", "tokio", "x509-parser", @@ -5709,13 +5709,13 @@ dependencies = [ [[package]] name = "solana-sys-tuner" -version = "1.14.23" +version = "1.14.24" dependencies = [ "clap 2.33.3", "libc", "log", "nix", - "solana-logger 1.14.23", + "solana-logger 1.14.24", "solana-version", "sysctl", "unix_socket2", @@ -5724,7 +5724,7 @@ dependencies = [ [[package]] name = "solana-test-validator" -version = "1.14.23" +version = "1.14.24" dependencies = [ "base64 0.13.0", "log", @@ -5735,20 +5735,20 @@ dependencies = [ "solana-core", "solana-gossip", "solana-ledger", - "solana-logger 1.14.23", + "solana-logger 1.14.24", "solana-net-utils", "solana-program-runtime", "solana-program-test", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.23", + "solana-sdk 1.14.24", "solana-streamer", "tokio", ] [[package]] name = "solana-transaction-status" -version = "1.14.23" +version = "1.14.24" dependencies = [ "Inflector", "base64 0.13.0", @@ -5764,7 +5764,7 @@ dependencies = [ "solana-address-lookup-table-program", "solana-measure", "solana-metrics", - "solana-sdk 1.14.23", + "solana-sdk 1.14.24", "solana-vote-program", "spl-associated-token-account", "spl-memo", @@ -5775,7 +5775,7 @@ dependencies = [ [[package]] name = "solana-validator" -version = "1.14.23" +version = "1.14.24" dependencies = [ "chrono", "clap 2.33.3", @@ -5806,14 +5806,14 @@ dependencies = [ "solana-genesis-utils", "solana-gossip", "solana-ledger", - "solana-logger 1.14.23", + "solana-logger 1.14.24", "solana-metrics", "solana-net-utils", "solana-perf", "solana-poh", "solana-rpc", "solana-runtime", - "solana-sdk 1.14.23", + "solana-sdk 1.14.24", "solana-send-transaction-service", "solana-storage-bigtable", "solana-streamer", @@ -5826,21 +5826,21 @@ dependencies = [ [[package]] name = "solana-version" -version = "1.14.23" +version = "1.14.24" dependencies = [ "log", "rustc_version", "semver", "serde", "serde_derive", - "solana-frozen-abi 1.14.23", - "solana-frozen-abi-macro 1.14.23", - "solana-sdk 1.14.23", + "solana-frozen-abi 1.14.24", + "solana-frozen-abi-macro 1.14.24", + "solana-sdk 1.14.24", ] [[package]] name = "solana-vote-program" -version = "1.14.23" +version = "1.14.24" dependencies = [ "bincode", "log", @@ -5849,25 +5849,25 @@ dependencies = [ "rustc_version", "serde", "serde_derive", - "solana-frozen-abi 1.14.23", - "solana-frozen-abi-macro 1.14.23", + "solana-frozen-abi 1.14.24", + "solana-frozen-abi-macro 1.14.24", "solana-metrics", "solana-program-runtime", - "solana-sdk 1.14.23", + "solana-sdk 1.14.24", "thiserror", ] [[package]] name = "solana-zk-token-proof-program" -version = "1.14.23" +version = "1.14.24" dependencies = [ "bytemuck", "getrandom 0.1.14", "num-derive", "num-traits", "solana-program-runtime", - "solana-sdk 1.14.23", - "solana-zk-token-sdk 1.14.23", + "solana-sdk 1.14.24", + "solana-zk-token-sdk 1.14.24", ] [[package]] @@ -5903,7 +5903,7 @@ dependencies = [ [[package]] name = "solana-zk-token-sdk" -version = "1.14.23" +version = "1.14.24" dependencies = [ "aes-gcm-siv", "arrayref", @@ -5923,8 +5923,8 @@ dependencies = [ "serde", "serde_json", "sha3 0.9.1", - "solana-program 1.14.23", - "solana-sdk 1.14.23", + "solana-program 1.14.24", + "solana-sdk 1.14.24", "subtle", "thiserror", "zeroize", diff --git a/programs/bpf/Cargo.toml b/programs/bpf/Cargo.toml index feaf20016f9089..7c797725aba07f 100644 --- a/programs/bpf/Cargo.toml +++ b/programs/bpf/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "solana-bpf-programs" description = "Blockchain, Rebuilt for Scale" -version = "1.14.23" +version = "1.14.24" documentation = "https://docs.rs/solana" homepage = "https://solana.com/" readme = "README.md" @@ -26,22 +26,22 @@ itertools = "0.10.1" log = "0.4.11" miow = "0.3.6" net2 = "0.2.37" -solana-account-decoder = { path = "../../account-decoder", version = "=1.14.23" } -solana-bpf-loader-program = { path = "../bpf_loader", version = "=1.14.23" } -solana-bpf-rust-invoke = { path = "rust/invoke", version = "=1.14.23" } -solana-bpf-rust-realloc = { path = "rust/realloc", version = "=1.14.23" } -solana-bpf-rust-realloc-invoke = { path = "rust/realloc_invoke", version = "=1.14.23" } -solana-cli-output = { path = "../../cli-output", version = "=1.14.23" } -solana-logger = { path = "../../logger", version = "=1.14.23" } -solana-measure = { path = "../../measure", version = "=1.14.23" } -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.23" } -solana-runtime = { path = "../../runtime", version = "=1.14.23" } -solana-sdk = { path = "../../sdk", version = "=1.14.23" } -solana-transaction-status = { path = "../../transaction-status", version = "=1.14.23" } +solana-account-decoder = { path = "../../account-decoder", version = "=1.14.24" } +solana-bpf-loader-program = { path = "../bpf_loader", version = "=1.14.24" } +solana-bpf-rust-invoke = { path = "rust/invoke", version = "=1.14.24" } +solana-bpf-rust-realloc = { path = "rust/realloc", version = "=1.14.24" } +solana-bpf-rust-realloc-invoke = { path = "rust/realloc_invoke", version = "=1.14.24" } +solana-cli-output = { path = "../../cli-output", version = "=1.14.24" } +solana-logger = { path = "../../logger", version = "=1.14.24" } +solana-measure = { path = "../../measure", version = "=1.14.24" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.24" } +solana-runtime = { path = "../../runtime", version = "=1.14.24" } +solana-sdk = { path = "../../sdk", version = "=1.14.24" } +solana-transaction-status = { path = "../../transaction-status", version = "=1.14.24" } solana_rbpf = "=0.2.31" [dev-dependencies] -solana-ledger = { path = "../../ledger", version = "=1.14.23" } +solana-ledger = { path = "../../ledger", version = "=1.14.24" } [[bench]] name = "bpf_loader" diff --git a/programs/bpf/rust/128bit/Cargo.toml b/programs/bpf/rust/128bit/Cargo.toml index b113b7c461362f..236d66c6c2932a 100644 --- a/programs/bpf/rust/128bit/Cargo.toml +++ b/programs/bpf/rust/128bit/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-128bit" -version = "1.14.23" +version = "1.14.24" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ documentation = "https://docs.rs/solana-bpf-rust-128bit" edition = "2021" [dependencies] -solana-bpf-rust-128bit-dep = { path = "../128bit_dep", version = "=1.14.23" } -solana-program = { path = "../../../../sdk/program", version = "=1.14.23" } +solana-bpf-rust-128bit-dep = { path = "../128bit_dep", version = "=1.14.24" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.24" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/128bit_dep/Cargo.toml b/programs/bpf/rust/128bit_dep/Cargo.toml index 4da016dfe68fc9..dd4702af21dda9 100644 --- a/programs/bpf/rust/128bit_dep/Cargo.toml +++ b/programs/bpf/rust/128bit_dep/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-128bit-dep" -version = "1.14.23" +version = "1.14.24" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-128bit-dep" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.23" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.24" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/bpf/rust/alloc/Cargo.toml b/programs/bpf/rust/alloc/Cargo.toml index e2e355780fea46..91831b86094d77 100644 --- a/programs/bpf/rust/alloc/Cargo.toml +++ b/programs/bpf/rust/alloc/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-alloc" -version = "1.14.23" +version = "1.14.24" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-alloc" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.23" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.24" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/call_depth/Cargo.toml b/programs/bpf/rust/call_depth/Cargo.toml index 7c347037ed3c38..1b5ca4f733d8b5 100644 --- a/programs/bpf/rust/call_depth/Cargo.toml +++ b/programs/bpf/rust/call_depth/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-call-depth" -version = "1.14.23" +version = "1.14.24" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-call-depth" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.23" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.24" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/caller_access/Cargo.toml b/programs/bpf/rust/caller_access/Cargo.toml index 35f871d60f06da..86a961716cd420 100644 --- a/programs/bpf/rust/caller_access/Cargo.toml +++ b/programs/bpf/rust/caller_access/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-caller-access" -version = "1.14.23" +version = "1.14.24" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-caller-access" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.23" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.24" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/curve25519/Cargo.toml b/programs/bpf/rust/curve25519/Cargo.toml index 677f65265340fa..090fad249dc06e 100644 --- a/programs/bpf/rust/curve25519/Cargo.toml +++ b/programs/bpf/rust/curve25519/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-curve25519" -version = "1.14.23" +version = "1.14.24" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ documentation = "https://docs.rs/solana-bpf-rust-zktoken_crypto" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.23" } -solana-zk-token-sdk = { path = "../../../../zk-token-sdk", version = "=1.14.23" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.24" } +solana-zk-token-sdk = { path = "../../../../zk-token-sdk", version = "=1.14.24" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/custom_heap/Cargo.toml b/programs/bpf/rust/custom_heap/Cargo.toml index 3e902d28d3df10..8b5df366939216 100644 --- a/programs/bpf/rust/custom_heap/Cargo.toml +++ b/programs/bpf/rust/custom_heap/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-custom-heap" -version = "1.14.23" +version = "1.14.24" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-custom-heap" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.23" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.24" } [features] default = ["custom-heap"] diff --git a/programs/bpf/rust/dep_crate/Cargo.toml b/programs/bpf/rust/dep_crate/Cargo.toml index aa0645af086bac..959496bf4eab6c 100644 --- a/programs/bpf/rust/dep_crate/Cargo.toml +++ b/programs/bpf/rust/dep_crate/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-dep-crate" -version = "1.14.23" +version = "1.14.24" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,8 +12,8 @@ edition = "2021" [dependencies] byteorder = { version = "1", default-features = false } # list of crates which must be buildable for bpf programs -solana-address-lookup-table-program = { path = "../../../../programs/address-lookup-table", version = "=1.14.23" } -solana-program = { path = "../../../../sdk/program", version = "=1.14.23" } +solana-address-lookup-table-program = { path = "../../../../programs/address-lookup-table", version = "=1.14.24" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.24" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/deprecated_loader/Cargo.toml b/programs/bpf/rust/deprecated_loader/Cargo.toml index c016f4cb315818..b6f144d0e4c3a0 100644 --- a/programs/bpf/rust/deprecated_loader/Cargo.toml +++ b/programs/bpf/rust/deprecated_loader/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-deprecated-loader" -version = "1.14.23" +version = "1.14.24" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-deprecated-loader" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.23" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.24" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/dup_accounts/Cargo.toml b/programs/bpf/rust/dup_accounts/Cargo.toml index d46205ce58f978..5242a2a2e60e6e 100644 --- a/programs/bpf/rust/dup_accounts/Cargo.toml +++ b/programs/bpf/rust/dup_accounts/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-dup-accounts" -version = "1.14.23" +version = "1.14.24" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-dup-accounts" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.23" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.24" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/error_handling/Cargo.toml b/programs/bpf/rust/error_handling/Cargo.toml index f8ea348ff163a1..4d1a3222bc48d4 100644 --- a/programs/bpf/rust/error_handling/Cargo.toml +++ b/programs/bpf/rust/error_handling/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-error-handling" -version = "1.14.23" +version = "1.14.24" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,7 +12,7 @@ edition = "2021" [dependencies] num-derive = "0.3" num-traits = "0.2" -solana-program = { path = "../../../../sdk/program", version = "=1.14.23" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.24" } thiserror = "1.0" [lib] diff --git a/programs/bpf/rust/external_spend/Cargo.toml b/programs/bpf/rust/external_spend/Cargo.toml index 28aacb4637c949..ce751e209afc1b 100644 --- a/programs/bpf/rust/external_spend/Cargo.toml +++ b/programs/bpf/rust/external_spend/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-external-spend" -version = "1.14.23" +version = "1.14.24" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-external-spend" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.23" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.24" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/finalize/Cargo.toml b/programs/bpf/rust/finalize/Cargo.toml index af2650422eaf9e..8f7539a57765f2 100644 --- a/programs/bpf/rust/finalize/Cargo.toml +++ b/programs/bpf/rust/finalize/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-finalize" -version = "1.14.23" +version = "1.14.24" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-finalize" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.23" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.24" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/get_minimum_delegation/Cargo.toml b/programs/bpf/rust/get_minimum_delegation/Cargo.toml index b76f783b3f4bd5..dc373e9ff1061e 100644 --- a/programs/bpf/rust/get_minimum_delegation/Cargo.toml +++ b/programs/bpf/rust/get_minimum_delegation/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-get-minimum-delegation" -version = "1.14.23" +version = "1.14.24" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-get-minimum-delegation" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.23" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.24" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/inner_instruction_alignment_check/Cargo.toml b/programs/bpf/rust/inner_instruction_alignment_check/Cargo.toml index cbbb2ee5a19cfb..ea3368fb6f07ac 100644 --- a/programs/bpf/rust/inner_instruction_alignment_check/Cargo.toml +++ b/programs/bpf/rust/inner_instruction_alignment_check/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-inner_instruction_alignment_check" -version = "1.14.23" +version = "1.14.24" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-inner_instruction_alignment_che edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.23" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.24" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/instruction_introspection/Cargo.toml b/programs/bpf/rust/instruction_introspection/Cargo.toml index 6c92f5e979d24c..2b61be741293bd 100644 --- a/programs/bpf/rust/instruction_introspection/Cargo.toml +++ b/programs/bpf/rust/instruction_introspection/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-instruction-introspection" -version = "1.14.23" +version = "1.14.24" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-instruction-introspection" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.23" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.24" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/invoke/Cargo.toml b/programs/bpf/rust/invoke/Cargo.toml index af4939ff1b0ff6..b644ebca69cce6 100644 --- a/programs/bpf/rust/invoke/Cargo.toml +++ b/programs/bpf/rust/invoke/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-invoke" -version = "1.14.23" +version = "1.14.24" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -15,7 +15,7 @@ program = [] [dependencies] solana-bpf-rust-invoked = { path = "../invoked", default-features = false } -solana-program = { path = "../../../../sdk/program", version = "=1.14.23" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.24" } [lib] crate-type = ["lib", "cdylib"] diff --git a/programs/bpf/rust/invoke_and_error/Cargo.toml b/programs/bpf/rust/invoke_and_error/Cargo.toml index b08567b0c62fc0..335fa24f313993 100644 --- a/programs/bpf/rust/invoke_and_error/Cargo.toml +++ b/programs/bpf/rust/invoke_and_error/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-invoke-and-error" -version = "1.14.23" +version = "1.14.24" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-invoke-and-error" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.23" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.24" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/invoke_and_ok/Cargo.toml b/programs/bpf/rust/invoke_and_ok/Cargo.toml index 4bb40839b79355..0bd16c3a2885c7 100644 --- a/programs/bpf/rust/invoke_and_ok/Cargo.toml +++ b/programs/bpf/rust/invoke_and_ok/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-invoke-and-ok" -version = "1.14.23" +version = "1.14.24" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-invoke-and-ok" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.23" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.24" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/invoke_and_return/Cargo.toml b/programs/bpf/rust/invoke_and_return/Cargo.toml index 6561cbd3077309..5942180ddba991 100644 --- a/programs/bpf/rust/invoke_and_return/Cargo.toml +++ b/programs/bpf/rust/invoke_and_return/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-invoke-and-return" -version = "1.14.23" +version = "1.14.24" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-invoke-and-return" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.23" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.24" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/invoked/Cargo.toml b/programs/bpf/rust/invoked/Cargo.toml index 0f194f397f720f..5357023c2f95ca 100644 --- a/programs/bpf/rust/invoked/Cargo.toml +++ b/programs/bpf/rust/invoked/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-invoked" -version = "1.14.23" +version = "1.14.24" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,7 +14,7 @@ default = ["program"] program = [] [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.23" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.24" } [lib] crate-type = ["lib", "cdylib"] diff --git a/programs/bpf/rust/iter/Cargo.toml b/programs/bpf/rust/iter/Cargo.toml index 67b10e9cee0fe6..ac1210226f13c8 100644 --- a/programs/bpf/rust/iter/Cargo.toml +++ b/programs/bpf/rust/iter/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-iter" -version = "1.14.23" +version = "1.14.24" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-iter" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.23" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.24" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/log_data/Cargo.toml b/programs/bpf/rust/log_data/Cargo.toml index 18179c800cfa92..1ccf73a4e23a2c 100644 --- a/programs/bpf/rust/log_data/Cargo.toml +++ b/programs/bpf/rust/log_data/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-log-data" -version = "1.14.23" +version = "1.14.24" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-log-data" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.23" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.24" } [features] default = ["program"] diff --git a/programs/bpf/rust/many_args/Cargo.toml b/programs/bpf/rust/many_args/Cargo.toml index 1368fdab35c319..72560d6e2a945b 100644 --- a/programs/bpf/rust/many_args/Cargo.toml +++ b/programs/bpf/rust/many_args/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-many-args" -version = "1.14.23" +version = "1.14.24" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ documentation = "https://docs.rs/solana-bpf-rust-many-args" edition = "2021" [dependencies] -solana-bpf-rust-many-args-dep = { path = "../many_args_dep", version = "=1.14.23" } -solana-program = { path = "../../../../sdk/program", version = "=1.14.23" } +solana-bpf-rust-many-args-dep = { path = "../many_args_dep", version = "=1.14.24" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.24" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/many_args_dep/Cargo.toml b/programs/bpf/rust/many_args_dep/Cargo.toml index 4ad4ff116b19b1..11f6e77bc88a9d 100644 --- a/programs/bpf/rust/many_args_dep/Cargo.toml +++ b/programs/bpf/rust/many_args_dep/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-many-args-dep" -version = "1.14.23" +version = "1.14.24" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-many-args-dep" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.23" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.24" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/bpf/rust/mem/Cargo.toml b/programs/bpf/rust/mem/Cargo.toml index f4e53800321823..37729e62fb7c07 100644 --- a/programs/bpf/rust/mem/Cargo.toml +++ b/programs/bpf/rust/mem/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-mem" -version = "1.14.23" +version = "1.14.24" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,12 +13,12 @@ edition = "2021" no-entrypoint = [] [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.23" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.24" } [dev-dependencies] -solana-program-runtime = { path = "../../../../program-runtime", version = "=1.14.23" } -solana-program-test = { path = "../../../../program-test", version = "=1.14.23" } -solana-sdk = { path = "../../../../sdk", version = "=1.14.23" } +solana-program-runtime = { path = "../../../../program-runtime", version = "=1.14.24" } +solana-program-test = { path = "../../../../program-test", version = "=1.14.24" } +solana-sdk = { path = "../../../../sdk", version = "=1.14.24" } [lib] crate-type = ["cdylib", "lib"] diff --git a/programs/bpf/rust/membuiltins/Cargo.toml b/programs/bpf/rust/membuiltins/Cargo.toml index 190c4a381045d7..0b2fd7720ee2a9 100644 --- a/programs/bpf/rust/membuiltins/Cargo.toml +++ b/programs/bpf/rust/membuiltins/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-membuiltins" -version = "1.14.23" +version = "1.14.24" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ documentation = "https://docs.rs/solana-bpf-rust-mem" edition = "2021" [dependencies] -solana-bpf-rust-mem = { path = "../mem", version = "=1.14.23", features = [ "no-entrypoint" ] } -solana-program = { path = "../../../../sdk/program", version = "=1.14.23" } +solana-bpf-rust-mem = { path = "../mem", version = "=1.14.24", features = [ "no-entrypoint" ] } +solana-program = { path = "../../../../sdk/program", version = "=1.14.24" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/noop/Cargo.toml b/programs/bpf/rust/noop/Cargo.toml index 41a020e82c86af..196b5c7033e55f 100644 --- a/programs/bpf/rust/noop/Cargo.toml +++ b/programs/bpf/rust/noop/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-noop" -version = "1.14.23" +version = "1.14.24" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-noop" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.23" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.24" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/panic/Cargo.toml b/programs/bpf/rust/panic/Cargo.toml index bd609dc72d437b..471ba79cd87151 100644 --- a/programs/bpf/rust/panic/Cargo.toml +++ b/programs/bpf/rust/panic/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-panic" -version = "1.14.23" +version = "1.14.24" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-panic" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.23" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.24" } [features] default = ["custom-panic"] diff --git a/programs/bpf/rust/param_passing/Cargo.toml b/programs/bpf/rust/param_passing/Cargo.toml index d88653cc6bc74b..1da23b42337895 100644 --- a/programs/bpf/rust/param_passing/Cargo.toml +++ b/programs/bpf/rust/param_passing/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-param-passing" -version = "1.14.23" +version = "1.14.24" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ documentation = "https://docs.rs/solana-bpf-rust-param-passing" edition = "2021" [dependencies] -solana-bpf-rust-param-passing-dep = { path = "../param_passing_dep", version = "=1.14.23" } -solana-program = { path = "../../../../sdk/program", version = "=1.14.23" } +solana-bpf-rust-param-passing-dep = { path = "../param_passing_dep", version = "=1.14.24" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.24" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/param_passing_dep/Cargo.toml b/programs/bpf/rust/param_passing_dep/Cargo.toml index e45fe074cf2db5..7950d6e558d6b9 100644 --- a/programs/bpf/rust/param_passing_dep/Cargo.toml +++ b/programs/bpf/rust/param_passing_dep/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-param-passing-dep" -version = "1.14.23" +version = "1.14.24" description = "Solana BPF program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-param-passing-dep" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.23" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.24" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/bpf/rust/rand/Cargo.toml b/programs/bpf/rust/rand/Cargo.toml index 1a9bb82081ceb3..58970959afcccf 100644 --- a/programs/bpf/rust/rand/Cargo.toml +++ b/programs/bpf/rust/rand/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-rand" -version = "1.14.23" +version = "1.14.24" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,7 +12,7 @@ edition = "2021" [dependencies] getrandom = { version = "0.1.14", features = ["dummy"] } rand = "0.7" -solana-program = { path = "../../../../sdk/program", version = "=1.14.23" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.24" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/realloc/Cargo.toml b/programs/bpf/rust/realloc/Cargo.toml index 282fcd3845bf27..e4ff55aa38c656 100644 --- a/programs/bpf/rust/realloc/Cargo.toml +++ b/programs/bpf/rust/realloc/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-realloc" -version = "1.14.23" +version = "1.14.24" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,7 +14,7 @@ default = ["program"] program = [] [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.23" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.24" } [lib] crate-type = ["lib", "cdylib"] diff --git a/programs/bpf/rust/realloc_invoke/Cargo.toml b/programs/bpf/rust/realloc_invoke/Cargo.toml index f63288bbec99b8..bfe754334393dc 100644 --- a/programs/bpf/rust/realloc_invoke/Cargo.toml +++ b/programs/bpf/rust/realloc_invoke/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-realloc-invoke" -version = "1.14.23" +version = "1.14.24" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,8 +14,8 @@ default = ["program"] program = [] [dependencies] -solana-bpf-rust-realloc = { path = "../realloc", version = "=1.14.23", default-features = false } -solana-program = { path = "../../../../sdk/program", version = "=1.14.23" } +solana-bpf-rust-realloc = { path = "../realloc", version = "=1.14.24", default-features = false } +solana-program = { path = "../../../../sdk/program", version = "=1.14.24" } [lib] crate-type = ["lib", "cdylib"] diff --git a/programs/bpf/rust/ro_account_modify/Cargo.toml b/programs/bpf/rust/ro_account_modify/Cargo.toml index 91f241fe6ff993..ed51106c855749 100644 --- a/programs/bpf/rust/ro_account_modify/Cargo.toml +++ b/programs/bpf/rust/ro_account_modify/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-ro-account_modify" -version = "1.14.23" +version = "1.14.24" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-ro-modify" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.23" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.24" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/ro_modify/Cargo.toml b/programs/bpf/rust/ro_modify/Cargo.toml index 024d76561052a5..8dd11f59b18ce8 100644 --- a/programs/bpf/rust/ro_modify/Cargo.toml +++ b/programs/bpf/rust/ro_modify/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-ro-modify" -version = "1.14.23" +version = "1.14.24" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-ro-modify" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.23" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.24" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/sanity/Cargo.toml b/programs/bpf/rust/sanity/Cargo.toml index 42ee286eec77a0..17853805bdcaeb 100644 --- a/programs/bpf/rust/sanity/Cargo.toml +++ b/programs/bpf/rust/sanity/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-sanity" -version = "1.14.23" +version = "1.14.24" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,12 +13,12 @@ edition = "2021" test-bpf = [] [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.23" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.24" } [dev-dependencies] -solana-program-runtime = { path = "../../../../program-runtime", version = "=1.14.23" } -solana-program-test = { path = "../../../../program-test", version = "=1.14.23" } -solana-sdk = { path = "../../../../sdk", version = "=1.14.23" } +solana-program-runtime = { path = "../../../../program-runtime", version = "=1.14.24" } +solana-program-test = { path = "../../../../program-test", version = "=1.14.24" } +solana-sdk = { path = "../../../../sdk", version = "=1.14.24" } [lib] crate-type = ["cdylib", "lib"] diff --git a/programs/bpf/rust/secp256k1_recover/Cargo.toml b/programs/bpf/rust/secp256k1_recover/Cargo.toml index 5b0b0b527f603b..be48c5d1644cdd 100644 --- a/programs/bpf/rust/secp256k1_recover/Cargo.toml +++ b/programs/bpf/rust/secp256k1_recover/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-secp256k1-recover" -version = "1.14.23" +version = "1.14.24" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -11,7 +11,7 @@ edition = "2021" [dependencies] libsecp256k1 = { version = "0.7.0", default-features = false } -solana-program = { path = "../../../../sdk/program", version = "=1.14.23" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.24" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/sha/Cargo.toml b/programs/bpf/rust/sha/Cargo.toml index 9b7626d6ac5a7c..1556f24d677245 100644 --- a/programs/bpf/rust/sha/Cargo.toml +++ b/programs/bpf/rust/sha/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-sha" -version = "1.14.23" +version = "1.14.24" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -11,7 +11,7 @@ edition = "2021" [dependencies] blake3 = "1.0.0" -solana-program = { path = "../../../../sdk/program", version = "=1.14.23" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.24" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/sibling_inner_instruction/Cargo.toml b/programs/bpf/rust/sibling_inner_instruction/Cargo.toml index b37d533254119c..2709c7c9896e7a 100644 --- a/programs/bpf/rust/sibling_inner_instruction/Cargo.toml +++ b/programs/bpf/rust/sibling_inner_instruction/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-sibling_inner-instructions" -version = "1.14.23" +version = "1.14.24" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-log-data" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.23" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.24" } [features] default = ["program"] diff --git a/programs/bpf/rust/sibling_instruction/Cargo.toml b/programs/bpf/rust/sibling_instruction/Cargo.toml index 57012ed971f8c2..ccc54b3ed84d37 100644 --- a/programs/bpf/rust/sibling_instruction/Cargo.toml +++ b/programs/bpf/rust/sibling_instruction/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-sibling-instructions" -version = "1.14.23" +version = "1.14.24" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-log-data" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.23" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.24" } [features] default = ["program"] diff --git a/programs/bpf/rust/simulation/Cargo.toml b/programs/bpf/rust/simulation/Cargo.toml index 85b22effa64ee5..021398caa20538 100644 --- a/programs/bpf/rust/simulation/Cargo.toml +++ b/programs/bpf/rust/simulation/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-simulation" -version = "1.14.23" +version = "1.14.24" description = "Solana BPF Program Simulation Differences" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,13 +13,13 @@ edition = "2021" test-bpf = [] [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.23" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.24" } [dev-dependencies] -solana-logger = { path = "../../../../logger", version = "=1.14.23" } -solana-program-test = { path = "../../../../program-test", version = "=1.14.23" } -solana-sdk = { path = "../../../../sdk", version = "=1.14.23" } -solana-validator = { path = "../../../../validator", version = "=1.14.23" } +solana-logger = { path = "../../../../logger", version = "=1.14.24" } +solana-program-test = { path = "../../../../program-test", version = "=1.14.24" } +solana-sdk = { path = "../../../../sdk", version = "=1.14.24" } +solana-validator = { path = "../../../../validator", version = "=1.14.24" } [lib] crate-type = ["cdylib", "lib"] diff --git a/programs/bpf/rust/spoof1/Cargo.toml b/programs/bpf/rust/spoof1/Cargo.toml index b0936ef56e7407..596040d2eaf9c6 100644 --- a/programs/bpf/rust/spoof1/Cargo.toml +++ b/programs/bpf/rust/spoof1/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-spoof1" -version = "1.14.23" +version = "1.14.24" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-spoof1" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.23" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.24" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/spoof1_system/Cargo.toml b/programs/bpf/rust/spoof1_system/Cargo.toml index 48fae76f662ec8..d62ac2624ea280 100644 --- a/programs/bpf/rust/spoof1_system/Cargo.toml +++ b/programs/bpf/rust/spoof1_system/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-spoof1-system" -version = "1.14.23" +version = "1.14.24" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-spoof1-system" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.23" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.24" } [lib] crate-type = ["cdylib"] diff --git a/programs/bpf/rust/sysvar/Cargo.toml b/programs/bpf/rust/sysvar/Cargo.toml index 4eed801a4336cd..93e6c1da19f151 100644 --- a/programs/bpf/rust/sysvar/Cargo.toml +++ b/programs/bpf/rust/sysvar/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-sysvar" -version = "1.14.23" +version = "1.14.24" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,12 +10,12 @@ documentation = "https://docs.rs/solana-bpf-rust-sysvar" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.23" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.24" } [dev-dependencies] -solana-program-runtime = { path = "../../../../program-runtime", version = "=1.14.23" } -solana-program-test = { path = "../../../../program-test", version = "=1.14.23" } -solana-sdk = { path = "../../../../sdk", version = "=1.14.23" } +solana-program-runtime = { path = "../../../../program-runtime", version = "=1.14.24" } +solana-program-test = { path = "../../../../program-test", version = "=1.14.24" } +solana-sdk = { path = "../../../../sdk", version = "=1.14.24" } [lib] crate-type = ["cdylib", "lib"] diff --git a/programs/bpf/rust/upgradeable/Cargo.toml b/programs/bpf/rust/upgradeable/Cargo.toml index 3ebf3763525700..417274c532a336 100644 --- a/programs/bpf/rust/upgradeable/Cargo.toml +++ b/programs/bpf/rust/upgradeable/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-upgradeable" -version = "1.14.23" +version = "1.14.24" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-upgradeable" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.23" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.24" } [lib] name = "solana_bpf_rust_upgradeable" diff --git a/programs/bpf/rust/upgraded/Cargo.toml b/programs/bpf/rust/upgraded/Cargo.toml index e29af9b2308348..3918524f6fb108 100644 --- a/programs/bpf/rust/upgraded/Cargo.toml +++ b/programs/bpf/rust/upgraded/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-rust-upgraded" -version = "1.14.23" +version = "1.14.24" description = "Solana BPF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-upgraded" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=1.14.23" } +solana-program = { path = "../../../../sdk/program", version = "=1.14.24" } [lib] name = "solana_bpf_rust_upgraded" diff --git a/programs/bpf_loader/Cargo.toml b/programs/bpf_loader/Cargo.toml index c214d7e75aaa8b..45b79811fd3872 100644 --- a/programs/bpf_loader/Cargo.toml +++ b/programs/bpf_loader/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpf-loader-program" -version = "1.14.23" +version = "1.14.24" description = "Solana BPF loader" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,17 +14,17 @@ bincode = "1.3.3" byteorder = "1.4.3" libsecp256k1 = "0.6.0" log = "0.4.17" -solana-measure = { path = "../../measure", version = "=1.14.23" } -solana-metrics = { path = "../../metrics", version = "=1.14.23" } -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.23" } -solana-sdk = { path = "../../sdk", version = "=1.14.23" } -solana-zk-token-sdk = { path = "../../zk-token-sdk", version = "=1.14.23" } +solana-measure = { path = "../../measure", version = "=1.14.24" } +solana-metrics = { path = "../../metrics", version = "=1.14.24" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.24" } +solana-sdk = { path = "../../sdk", version = "=1.14.24" } +solana-zk-token-sdk = { path = "../../zk-token-sdk", version = "=1.14.24" } solana_rbpf = "=0.2.31" thiserror = "1.0" [dev-dependencies] rand = "0.7.3" -solana-runtime = { path = "../../runtime", version = "=1.14.23" } +solana-runtime = { path = "../../runtime", version = "=1.14.24" } [lib] crate-type = ["lib"] diff --git a/programs/bpf_loader/gen-syscall-list/Cargo.toml b/programs/bpf_loader/gen-syscall-list/Cargo.toml index fa26abf53e8393..c73d04eaf55cf2 100644 --- a/programs/bpf_loader/gen-syscall-list/Cargo.toml +++ b/programs/bpf_loader/gen-syscall-list/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "gen-syscall-list" -version = "1.14.23" +version = "1.14.24" edition = "2021" license = "Apache-2.0" publish = false diff --git a/programs/compute-budget/Cargo.toml b/programs/compute-budget/Cargo.toml index c010ea0ae46d84..176049253acc27 100644 --- a/programs/compute-budget/Cargo.toml +++ b/programs/compute-budget/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "solana-compute-budget-program" description = "Solana Compute Budget program" -version = "1.14.23" +version = "1.14.24" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-compute-budget-program" repository = "https://github.com/solana-labs/solana" @@ -10,8 +10,8 @@ license = "Apache-2.0" edition = "2021" [dependencies] -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.23" } -solana-sdk = { path = "../../sdk", version = "=1.14.23" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.24" } +solana-sdk = { path = "../../sdk", version = "=1.14.24" } [lib] crate-type = ["lib"] diff --git a/programs/config/Cargo.toml b/programs/config/Cargo.toml index 969aebe7a528ad..de9904bfc55c3c 100644 --- a/programs/config/Cargo.toml +++ b/programs/config/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-config-program" -version = "1.14.23" +version = "1.14.24" description = "Solana Config program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,11 +14,11 @@ bincode = "1.3.3" chrono = { version = "0.4.11", features = ["serde"] } serde = "1.0.138" serde_derive = "1.0.103" -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.23" } -solana-sdk = { path = "../../sdk", version = "=1.14.23" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.24" } +solana-sdk = { path = "../../sdk", version = "=1.14.24" } [dev-dependencies] -solana-logger = { path = "../../logger", version = "=1.14.23" } +solana-logger = { path = "../../logger", version = "=1.14.24" } [lib] crate-type = ["lib"] diff --git a/programs/ed25519-tests/Cargo.toml b/programs/ed25519-tests/Cargo.toml index ecd36073c8952d..aa41b4d4cb78af 100644 --- a/programs/ed25519-tests/Cargo.toml +++ b/programs/ed25519-tests/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-ed25519-program-tests" -version = "1.14.23" +version = "1.14.24" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" @@ -12,8 +12,8 @@ publish = false assert_matches = "1.5.0" ed25519-dalek = "=1.0.1" rand = "0.7.0" -solana-program-test = { path = "../../program-test", version = "=1.14.23" } -solana-sdk = { path = "../../sdk", version = "=1.14.23" } +solana-program-test = { path = "../../program-test", version = "=1.14.24" } +solana-sdk = { path = "../../sdk", version = "=1.14.24" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/stake/Cargo.toml b/programs/stake/Cargo.toml index 6930a0d0cfbc87..a586c85e603dfe 100644 --- a/programs/stake/Cargo.toml +++ b/programs/stake/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-stake-program" -version = "1.14.23" +version = "1.14.24" description = "Solana Stake program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -16,19 +16,19 @@ num-derive = "0.3" num-traits = "0.2" serde = "1.0.138" serde_derive = "1.0.103" -solana-config-program = { path = "../config", version = "=1.14.23" } -solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.23" } -solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.23" } -solana-metrics = { path = "../../metrics", version = "=1.14.23" } -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.23" } -solana-sdk = { path = "../../sdk", version = "=1.14.23" } -solana-vote-program = { path = "../vote", version = "=1.14.23" } +solana-config-program = { path = "../config", version = "=1.14.24" } +solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.24" } +solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.24" } +solana-metrics = { path = "../../metrics", version = "=1.14.24" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.24" } +solana-sdk = { path = "../../sdk", version = "=1.14.24" } +solana-vote-program = { path = "../vote", version = "=1.14.24" } thiserror = "1.0" [dev-dependencies] assert_matches = "1.5.0" proptest = "1.0" -solana-logger = { path = "../../logger", version = "=1.14.23" } +solana-logger = { path = "../../logger", version = "=1.14.24" } test-case = "2.1.0" [build-dependencies] diff --git a/programs/vote/Cargo.toml b/programs/vote/Cargo.toml index c226ad653ff99a..5c58a9a913596f 100644 --- a/programs/vote/Cargo.toml +++ b/programs/vote/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-vote-program" -version = "1.14.23" +version = "1.14.24" description = "Solana Vote program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -16,17 +16,17 @@ num-derive = "0.3" num-traits = "0.2" serde = "1.0.138" serde_derive = "1.0.103" -solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.23" } -solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.23" } -solana-metrics = { path = "../../metrics", version = "=1.14.23" } -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.23" } -solana-sdk = { path = "../../sdk", version = "=1.14.23" } +solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.24" } +solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.24" } +solana-metrics = { path = "../../metrics", version = "=1.14.24" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.24" } +solana-sdk = { path = "../../sdk", version = "=1.14.24" } thiserror = "1.0" [dev-dependencies] itertools = "0.10.3" rand = "0.7.0" -solana-logger = { path = "../../logger", version = "=1.14.23" } +solana-logger = { path = "../../logger", version = "=1.14.24" } test-case = "2.1.0" [build-dependencies] diff --git a/programs/zk-token-proof-tests/Cargo.toml b/programs/zk-token-proof-tests/Cargo.toml index 73726b0a3dcdf0..04324e7329c5f9 100644 --- a/programs/zk-token-proof-tests/Cargo.toml +++ b/programs/zk-token-proof-tests/Cargo.toml @@ -2,14 +2,14 @@ name = "solana-zk-token-proof-program-tests" authors = ["Solana Labs Maintainers "] repository = "https://github.com/solana-labs/solana" -version = "1.14.23" +version = "1.14.24" license = "Apache-2.0" edition = "2021" publish = false [dev-dependencies] bytemuck = { version = "1.11.0", features = ["derive"] } -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.23" } -solana-program-test = { path = "../../program-test", version = "=1.14.23" } -solana-sdk = { path = "../../sdk", version = "=1.14.23" } -solana-zk-token-sdk = { path = "../../zk-token-sdk", version = "=1.14.23" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.24" } +solana-program-test = { path = "../../program-test", version = "=1.14.24" } +solana-sdk = { path = "../../sdk", version = "=1.14.24" } +solana-zk-token-sdk = { path = "../../zk-token-sdk", version = "=1.14.24" } diff --git a/programs/zk-token-proof/Cargo.toml b/programs/zk-token-proof/Cargo.toml index 5fb56c9162f41d..a459ce946fa4a2 100644 --- a/programs/zk-token-proof/Cargo.toml +++ b/programs/zk-token-proof/Cargo.toml @@ -3,7 +3,7 @@ name = "solana-zk-token-proof-program" description = "Solana Zk Token Proof Program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" -version = "1.14.23" +version = "1.14.24" license = "Apache-2.0" edition = "2021" @@ -12,6 +12,6 @@ bytemuck = { version = "1.11.0", features = ["derive"] } getrandom = { version = "0.1", features = ["dummy"] } num-derive = "0.3" num-traits = "0.2" -solana-program-runtime = { path = "../../program-runtime", version = "=1.14.23" } -solana-sdk = { path = "../../sdk", version = "=1.14.23" } -solana-zk-token-sdk = { path = "../../zk-token-sdk", version = "=1.14.23" } +solana-program-runtime = { path = "../../program-runtime", version = "=1.14.24" } +solana-sdk = { path = "../../sdk", version = "=1.14.24" } +solana-zk-token-sdk = { path = "../../zk-token-sdk", version = "=1.14.24" } diff --git a/rayon-threadlimit/Cargo.toml b/rayon-threadlimit/Cargo.toml index 849656657c5827..986623d7556d5a 100644 --- a/rayon-threadlimit/Cargo.toml +++ b/rayon-threadlimit/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-rayon-threadlimit" -version = "1.14.23" +version = "1.14.24" description = "solana-rayon-threadlimit" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-rayon-threadlimit" diff --git a/rbpf-cli/Cargo.toml b/rbpf-cli/Cargo.toml index 7d2edbe6378155..2e3b2d8399c7b7 100644 --- a/rbpf-cli/Cargo.toml +++ b/rbpf-cli/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "rbpf-cli" -version = "1.14.23" +version = "1.14.24" description = "CLI to test and analyze eBPF programs" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/rbpf" @@ -13,8 +13,8 @@ publish = false clap = { version = "3.1.5", features = ["cargo"] } serde = "1.0.138" serde_json = "1.0.81" -solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.23" } -solana-logger = { path = "../logger", version = "=1.14.23" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.23" } -solana-sdk = { path = "../sdk", version = "=1.14.23" } +solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.14.24" } +solana-logger = { path = "../logger", version = "=1.14.24" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.24" } +solana-sdk = { path = "../sdk", version = "=1.14.24" } solana_rbpf = "=0.2.31" diff --git a/remote-wallet/Cargo.toml b/remote-wallet/Cargo.toml index 8a0b5afca2b730..8cba36c4b9a8f4 100644 --- a/remote-wallet/Cargo.toml +++ b/remote-wallet/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-remote-wallet" description = "Blockchain, Rebuilt for Scale" -version = "1.14.23" +version = "1.14.24" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -19,7 +19,7 @@ num-traits = { version = "0.2" } parking_lot = "0.12" qstring = "0.7.2" semver = "1.0" -solana-sdk = { path = "../sdk", version = "=1.14.23" } +solana-sdk = { path = "../sdk", version = "=1.14.24" } thiserror = "1.0" uriparse = "0.6.4" diff --git a/rpc-test/Cargo.toml b/rpc-test/Cargo.toml index 766c6b447af20f..82a281f13e3364 100644 --- a/rpc-test/Cargo.toml +++ b/rpc-test/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-rpc-test" -version = "1.14.23" +version = "1.14.24" description = "Solana RPC Test" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -19,17 +19,17 @@ log = "0.4.17" reqwest = { version = "0.11.11", default-features = false, features = ["blocking", "brotli", "deflate", "gzip", "rustls-tls", "json"] } serde = "1.0.138" serde_json = "1.0.81" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.23" } -solana-client = { path = "../client", version = "=1.14.23" } -solana-rpc = { path = "../rpc", version = "=1.14.23" } -solana-sdk = { path = "../sdk", version = "=1.14.23" } -solana-streamer = { path = "../streamer", version = "=1.14.23" } -solana-test-validator = { path = "../test-validator", version = "=1.14.23" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.23" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.24" } +solana-client = { path = "../client", version = "=1.14.24" } +solana-rpc = { path = "../rpc", version = "=1.14.24" } +solana-sdk = { path = "../sdk", version = "=1.14.24" } +solana-streamer = { path = "../streamer", version = "=1.14.24" } +solana-test-validator = { path = "../test-validator", version = "=1.14.24" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.24" } tokio = { version = "~1.14.1", features = ["full"] } [dev-dependencies] -solana-logger = { path = "../logger", version = "=1.14.23" } +solana-logger = { path = "../logger", version = "=1.14.24" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/rpc/Cargo.toml b/rpc/Cargo.toml index 1c1bd054efcc96..12b9ace6f42fc3 100644 --- a/rpc/Cargo.toml +++ b/rpc/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-rpc" -version = "1.14.23" +version = "1.14.24" description = "Solana RPC" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -29,26 +29,26 @@ serde = "1.0.138" serde_derive = "1.0.103" serde_json = "1.0.81" soketto = "0.7" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.23" } -solana-client = { path = "../client", version = "=1.14.23" } -solana-entry = { path = "../entry", version = "=1.14.23" } -solana-faucet = { path = "../faucet", version = "=1.14.23" } -solana-gossip = { path = "../gossip", version = "=1.14.23" } -solana-ledger = { path = "../ledger", version = "=1.14.23" } -solana-measure = { path = "../measure", version = "=1.14.23" } -solana-metrics = { path = "../metrics", version = "=1.14.23" } -solana-perf = { path = "../perf", version = "=1.14.23" } -solana-poh = { path = "../poh", version = "=1.14.23" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.23" } -solana-runtime = { path = "../runtime", version = "=1.14.23" } -solana-sdk = { path = "../sdk", version = "=1.14.23" } -solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.23" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.23" } -solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.23" } -solana-streamer = { path = "../streamer", version = "=1.14.23" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.23" } -solana-version = { path = "../version", version = "=1.14.23" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.23" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.24" } +solana-client = { path = "../client", version = "=1.14.24" } +solana-entry = { path = "../entry", version = "=1.14.24" } +solana-faucet = { path = "../faucet", version = "=1.14.24" } +solana-gossip = { path = "../gossip", version = "=1.14.24" } +solana-ledger = { path = "../ledger", version = "=1.14.24" } +solana-measure = { path = "../measure", version = "=1.14.24" } +solana-metrics = { path = "../metrics", version = "=1.14.24" } +solana-perf = { path = "../perf", version = "=1.14.24" } +solana-poh = { path = "../poh", version = "=1.14.24" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.24" } +solana-runtime = { path = "../runtime", version = "=1.14.24" } +solana-sdk = { path = "../sdk", version = "=1.14.24" } +solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.24" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.24" } +solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.24" } +solana-streamer = { path = "../streamer", version = "=1.14.24" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.24" } +solana-version = { path = "../version", version = "=1.14.24" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.24" } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } spl-token-2022 = { version = "=0.6.1", features = ["no-entrypoint"] } stream-cancel = "0.8.1" @@ -58,9 +58,9 @@ tokio-util = { version = "0.6", features = ["codec", "compat"] } [dev-dependencies] serial_test = "0.8.0" -solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.23" } -solana-net-utils = { path = "../net-utils", version = "=1.14.23" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.23" } +solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.24" } +solana-net-utils = { path = "../net-utils", version = "=1.14.24" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.24" } symlink = "0.1.0" [lib] diff --git a/runtime/Cargo.toml b/runtime/Cargo.toml index 66a601b0c9ae88..b6ccf9f789c562 100644 --- a/runtime/Cargo.toml +++ b/runtime/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-runtime" -version = "1.14.23" +version = "1.14.24" description = "Solana runtime" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -40,21 +40,21 @@ rayon = "1.5.3" regex = "1.5.6" serde = { version = "1.0.138", features = ["rc"] } serde_derive = "1.0.103" -solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.23" } -solana-bucket-map = { path = "../bucket_map", version = "=1.14.23" } -solana-compute-budget-program = { path = "../programs/compute-budget", version = "=1.14.23" } -solana-config-program = { path = "../programs/config", version = "=1.14.23" } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.23" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.23" } -solana-measure = { path = "../measure", version = "=1.14.23" } -solana-metrics = { path = "../metrics", version = "=1.14.23" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.23" } -solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.23" } -solana-sdk = { path = "../sdk", version = "=1.14.23" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.23" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.23" } -solana-zk-token-proof-program = { path = "../programs/zk-token-proof", version = "=1.14.23" } -solana-zk-token-sdk = { path = "../zk-token-sdk", version = "=1.14.23" } +solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.24" } +solana-bucket-map = { path = "../bucket_map", version = "=1.14.24" } +solana-compute-budget-program = { path = "../programs/compute-budget", version = "=1.14.24" } +solana-config-program = { path = "../programs/config", version = "=1.14.24" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.24" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.24" } +solana-measure = { path = "../measure", version = "=1.14.24" } +solana-metrics = { path = "../metrics", version = "=1.14.24" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.24" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.14.24" } +solana-sdk = { path = "../sdk", version = "=1.14.24" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.24" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.24" } +solana-zk-token-proof-program = { path = "../programs/zk-token-proof", version = "=1.14.24" } +solana-zk-token-sdk = { path = "../zk-token-sdk", version = "=1.14.24" } strum = { version = "0.24", features = ["derive"] } strum_macros = "0.24" symlink = "0.1.0" @@ -72,7 +72,7 @@ assert_matches = "1.5.0" ed25519-dalek = "=1.0.1" libsecp256k1 = "0.6.0" rand_chacha = "0.2.2" -solana-logger = { path = "../logger", version = "=1.14.23" } +solana-logger = { path = "../logger", version = "=1.14.24" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/runtime/store-tool/Cargo.toml b/runtime/store-tool/Cargo.toml index be355c0fefa988..ec1b015ad36242 100644 --- a/runtime/store-tool/Cargo.toml +++ b/runtime/store-tool/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-store-tool" description = "Tool to inspect append vecs" -version = "1.14.23" +version = "1.14.24" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -12,9 +12,9 @@ publish = false [dependencies] clap = "2.33.1" log = { version = "0.4.17" } -solana-logger = { path = "../../logger", version = "=1.14.23" } -solana-runtime = { path = "..", version = "=1.14.23" } -solana-version = { path = "../../version", version = "=1.14.23" } +solana-logger = { path = "../../logger", version = "=1.14.24" } +solana-runtime = { path = "..", version = "=1.14.24" } +solana-version = { path = "../../version", version = "=1.14.24" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/sdk/Cargo.toml b/sdk/Cargo.toml index b929d68deda531..56b9536342d7a4 100644 --- a/sdk/Cargo.toml +++ b/sdk/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-sdk" -version = "1.14.23" +version = "1.14.24" description = "Solana SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -71,11 +71,11 @@ serde_derive = "1.0.103" serde_json = { version = "1.0.81", optional = true } sha2 = "0.10.2" sha3 = { version = "0.10.1", optional = true } -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.23" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.23" } -solana-logger = { path = "../logger", version = "=1.14.23", optional = true } -solana-program = { path = "program", version = "=1.14.23" } -solana-sdk-macro = { path = "macro", version = "=1.14.23" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.24" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.24" } +solana-logger = { path = "../logger", version = "=1.14.24", optional = true } +solana-program = { path = "program", version = "=1.14.24" } +solana-sdk-macro = { path = "macro", version = "=1.14.24" } thiserror = "1.0" uriparse = "0.6.4" wasm-bindgen = "0.2" diff --git a/sdk/cargo-build-bpf/Cargo.toml b/sdk/cargo-build-bpf/Cargo.toml index f34a925e91013b..51741684664c8b 100644 --- a/sdk/cargo-build-bpf/Cargo.toml +++ b/sdk/cargo-build-bpf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-cargo-build-bpf" -version = "1.14.23" +version = "1.14.24" description = "Compile a local package and all of its dependencies using the Solana SBF SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,7 +12,7 @@ publish = false [dependencies] cargo_metadata = "0.15.0" clap = { version = "3.1.5", features = ["cargo", "env"] } -solana-sdk = { path = "..", version = "=1.14.23" } +solana-sdk = { path = "..", version = "=1.14.24" } [features] program = [] diff --git a/sdk/cargo-build-sbf/Cargo.toml b/sdk/cargo-build-sbf/Cargo.toml index 1ca7b3225218c0..44eb3a43860c5e 100644 --- a/sdk/cargo-build-sbf/Cargo.toml +++ b/sdk/cargo-build-sbf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-cargo-build-sbf" -version = "1.14.23" +version = "1.14.24" description = "Compile a local package and all of its dependencies using the Solana SBF SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -15,9 +15,9 @@ cargo_metadata = "0.15.0" clap = { version = "3.1.5", features = ["cargo", "env"] } log = { version = "0.4.14", features = ["std"] } regex = "1.5.6" -solana-download-utils = { path = "../../download-utils", version = "=1.14.23" } -solana-logger = { path = "../../logger", version = "=1.14.23" } -solana-sdk = { path = "..", version = "=1.14.23" } +solana-download-utils = { path = "../../download-utils", version = "=1.14.24" } +solana-logger = { path = "../../logger", version = "=1.14.24" } +solana-sdk = { path = "..", version = "=1.14.24" } tar = "0.4.38" [dev-dependencies] diff --git a/sdk/cargo-build-sbf/tests/crates/fail/Cargo.toml b/sdk/cargo-build-sbf/tests/crates/fail/Cargo.toml index 9ac68286be060a..3c07fe09a27581 100644 --- a/sdk/cargo-build-sbf/tests/crates/fail/Cargo.toml +++ b/sdk/cargo-build-sbf/tests/crates/fail/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "fail" -version = "1.14.23" +version = "1.14.24" description = "Solana SBF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ edition = "2021" publish = false [dependencies] -solana-program = { path = "../../../../program", version = "=1.14.23" } +solana-program = { path = "../../../../program", version = "=1.14.24" } [lib] crate-type = ["cdylib"] diff --git a/sdk/cargo-build-sbf/tests/crates/noop/Cargo.toml b/sdk/cargo-build-sbf/tests/crates/noop/Cargo.toml index 5c152a1649c81e..c0ff469b386e93 100644 --- a/sdk/cargo-build-sbf/tests/crates/noop/Cargo.toml +++ b/sdk/cargo-build-sbf/tests/crates/noop/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "noop" -version = "1.14.23" +version = "1.14.24" description = "Solana SBF test program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ edition = "2021" publish = false [dependencies] -solana-program = { path = "../../../../program", version = "=1.14.23" } +solana-program = { path = "../../../../program", version = "=1.14.24" } [lib] crate-type = ["cdylib"] diff --git a/sdk/cargo-test-bpf/Cargo.toml b/sdk/cargo-test-bpf/Cargo.toml index af69129de28a4b..e381dfe5df732f 100644 --- a/sdk/cargo-test-bpf/Cargo.toml +++ b/sdk/cargo-test-bpf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-cargo-test-bpf" -version = "1.14.23" +version = "1.14.24" description = "Execute all unit and integration tests after building with the Solana SBF SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/sdk/cargo-test-sbf/Cargo.toml b/sdk/cargo-test-sbf/Cargo.toml index a1a5c8ccb1a1bb..dee3901a51c418 100644 --- a/sdk/cargo-test-sbf/Cargo.toml +++ b/sdk/cargo-test-sbf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-cargo-test-sbf" -version = "1.14.23" +version = "1.14.24" description = "Execute all unit and integration tests after building with the Solana SBF SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/sdk/gen-headers/Cargo.toml b/sdk/gen-headers/Cargo.toml index 13cbeb7328598b..880e4a2c5f640c 100644 --- a/sdk/gen-headers/Cargo.toml +++ b/sdk/gen-headers/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "gen-headers" -version = "1.14.23" +version = "1.14.24" edition = "2021" license = "Apache-2.0" publish = false diff --git a/sdk/macro/Cargo.toml b/sdk/macro/Cargo.toml index 50826d1155a98b..6c718387c08e8c 100644 --- a/sdk/macro/Cargo.toml +++ b/sdk/macro/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-sdk-macro" -version = "1.14.23" +version = "1.14.24" description = "Solana SDK Macro" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/sdk/program/Cargo.toml b/sdk/program/Cargo.toml index 20776b2599746a..3f583f16eed0fa 100644 --- a/sdk/program/Cargo.toml +++ b/sdk/program/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-program" -version = "1.14.23" +version = "1.14.24" description = "Solana Program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -31,9 +31,9 @@ serde_derive = "1.0" serde_json = "1.0" sha2 = "0.10.0" sha3 = "0.10.0" -solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.23" } -solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.23" } -solana-sdk-macro = { path = "../macro", version = "=1.14.23" } +solana-frozen-abi = { path = "../../frozen-abi", version = "=1.14.24" } +solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.14.24" } +solana-sdk-macro = { path = "../macro", version = "=1.14.24" } thiserror = "1.0" [target.'cfg(not(target_os = "solana"))'.dependencies] @@ -50,7 +50,7 @@ wasm-bindgen = "0.2" zeroize = { version = "1.3", default-features = true, features = ["zeroize_derive"] } [target.'cfg(not(target_os = "solana"))'.dev-dependencies] -solana-logger = { path = "../../logger", version = "=1.14.23" } +solana-logger = { path = "../../logger", version = "=1.14.24" } [target.'cfg(target_arch = "wasm32")'.dependencies] console_error_panic_hook = "0.1.7" diff --git a/send-transaction-service/Cargo.toml b/send-transaction-service/Cargo.toml index 4ff4100168516f..63fbd285b4cf02 100644 --- a/send-transaction-service/Cargo.toml +++ b/send-transaction-service/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-send-transaction-service" -version = "1.14.23" +version = "1.14.24" description = "Solana send transaction service" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,14 +12,14 @@ edition = "2021" [dependencies] crossbeam-channel = "0.5" log = "0.4.17" -solana-client = { path = "../client", version = "=1.14.23" } -solana-measure = { path = "../measure", version = "=1.14.23" } -solana-metrics = { path = "../metrics", version = "=1.14.23" } -solana-runtime = { path = "../runtime", version = "=1.14.23" } -solana-sdk = { path = "../sdk", version = "=1.14.23" } +solana-client = { path = "../client", version = "=1.14.24" } +solana-measure = { path = "../measure", version = "=1.14.24" } +solana-metrics = { path = "../metrics", version = "=1.14.24" } +solana-runtime = { path = "../runtime", version = "=1.14.24" } +solana-sdk = { path = "../sdk", version = "=1.14.24" } [dev-dependencies] -solana-logger = { path = "../logger", version = "=1.14.23" } +solana-logger = { path = "../logger", version = "=1.14.24" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/stake-accounts/Cargo.toml b/stake-accounts/Cargo.toml index 0a6bc598b7b9a1..1cdd6917f7cec4 100644 --- a/stake-accounts/Cargo.toml +++ b/stake-accounts/Cargo.toml @@ -3,7 +3,7 @@ name = "solana-stake-accounts" description = "Blockchain, Rebuilt for Scale" authors = ["Solana Maintainers "] edition = "2021" -version = "1.14.23" +version = "1.14.24" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -11,15 +11,15 @@ documentation = "https://docs.rs/solana-stake-accounts" [dependencies] clap = "2.33.1" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.23" } -solana-cli-config = { path = "../cli-config", version = "=1.14.23" } -solana-client = { path = "../client", version = "=1.14.23" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.23" } -solana-sdk = { path = "../sdk", version = "=1.14.23" } -solana-stake-program = { path = "../programs/stake", version = "=1.14.23" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.24" } +solana-cli-config = { path = "../cli-config", version = "=1.14.24" } +solana-client = { path = "../client", version = "=1.14.24" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.24" } +solana-sdk = { path = "../sdk", version = "=1.14.24" } +solana-stake-program = { path = "../programs/stake", version = "=1.14.24" } [dev-dependencies] -solana-runtime = { path = "../runtime", version = "=1.14.23" } +solana-runtime = { path = "../runtime", version = "=1.14.24" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/storage-bigtable/Cargo.toml b/storage-bigtable/Cargo.toml index 7c473bc6d06c94..00d4b8ea046a99 100644 --- a/storage-bigtable/Cargo.toml +++ b/storage-bigtable/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-storage-bigtable" -version = "1.14.23" +version = "1.14.24" description = "Solana Storage BigTable" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -27,10 +27,10 @@ prost-types = "0.11.0" serde = "1.0.138" serde_derive = "1.0.103" smpl_jwt = "0.7.1" -solana-metrics = { path = "../metrics", version = "=1.14.23" } -solana-sdk = { path = "../sdk", version = "=1.14.23" } -solana-storage-proto = { path = "../storage-proto", version = "=1.14.23" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.23" } +solana-metrics = { path = "../metrics", version = "=1.14.24" } +solana-sdk = { path = "../sdk", version = "=1.14.24" } +solana-storage-proto = { path = "../storage-proto", version = "=1.14.24" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.24" } thiserror = "1.0" tokio = "1" tonic = { version = "0.8.0", features = ["tls", "transport"] } diff --git a/storage-bigtable/build-proto/Cargo.toml b/storage-bigtable/build-proto/Cargo.toml index 7310c596e83add..cdf82b5844da23 100644 --- a/storage-bigtable/build-proto/Cargo.toml +++ b/storage-bigtable/build-proto/Cargo.toml @@ -7,7 +7,7 @@ license = "Apache-2.0" name = "proto" publish = false repository = "https://github.com/solana-labs/solana" -version = "1.14.23" +version = "1.14.24" [dependencies] tonic-build = "0.8.0" diff --git a/storage-proto/Cargo.toml b/storage-proto/Cargo.toml index 2b98d25b8d018e..7b06b2b2f5e255 100644 --- a/storage-proto/Cargo.toml +++ b/storage-proto/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-storage-proto" -version = "1.14.23" +version = "1.14.24" description = "Solana Storage Protobuf Definitions" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,9 +14,9 @@ bincode = "1.3.3" bs58 = "0.4.0" prost = "0.11.0" serde = "1.0.138" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.23" } -solana-sdk = { path = "../sdk", version = "=1.14.23" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.23" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.24" } +solana-sdk = { path = "../sdk", version = "=1.14.24" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.24" } [dev-dependencies] enum-iterator = "0.8.1" diff --git a/streamer/Cargo.toml b/streamer/Cargo.toml index b8dcf1eb1a98b3..bd0edec3c0db59 100644 --- a/streamer/Cargo.toml +++ b/streamer/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-streamer" -version = "1.14.23" +version = "1.14.24" description = "Solana Streamer" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -25,15 +25,15 @@ quinn = "0.8.3" rand = "0.7.0" rcgen = "0.9.2" rustls = { version = "0.20.6", features = ["dangerous_configuration"] } -solana-metrics = { path = "../metrics", version = "=1.14.23" } -solana-perf = { path = "../perf", version = "=1.14.23" } -solana-sdk = { path = "../sdk", version = "=1.14.23" } +solana-metrics = { path = "../metrics", version = "=1.14.24" } +solana-perf = { path = "../perf", version = "=1.14.24" } +solana-sdk = { path = "../sdk", version = "=1.14.24" } thiserror = "1.0" tokio = { version = "1", features = ["full"] } x509-parser = "0.14.0" [dev-dependencies] -solana-logger = { path = "../logger", version = "=1.14.23" } +solana-logger = { path = "../logger", version = "=1.14.24" } [lib] crate-type = ["lib"] diff --git a/sys-tuner/Cargo.toml b/sys-tuner/Cargo.toml index 134c7f8b65c9b8..4079d53446a689 100644 --- a/sys-tuner/Cargo.toml +++ b/sys-tuner/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-sys-tuner" description = "The solana cluster system tuner daemon" -version = "1.14.23" +version = "1.14.24" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,8 +14,8 @@ publish = true clap = "2.33.1" libc = "0.2.126" log = "0.4.17" -solana-logger = { path = "../logger", version = "=1.14.23" } -solana-version = { path = "../version", version = "=1.14.23" } +solana-logger = { path = "../logger", version = "=1.14.24" } +solana-version = { path = "../version", version = "=1.14.24" } [target."cfg(unix)".dependencies] unix_socket2 = "0.5.4" diff --git a/test-validator/Cargo.toml b/test-validator/Cargo.toml index 6e72ef9ed69272..b96518cf351c6e 100644 --- a/test-validator/Cargo.toml +++ b/test-validator/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "solana-test-validator" description = "Blockchain, Rebuilt for Scale" -version = "1.14.23" +version = "1.14.24" homepage = "https://solana.com/" documentation = "https://docs.rs/solana-test-validator" readme = "../README.md" @@ -15,19 +15,19 @@ base64 = "0.13.0" log = "0.4.17" serde_derive = "1.0.103" serde_json = "1.0.81" -solana-cli-output = { path = "../cli-output", version = "=1.14.23" } -solana-client = { path = "../client", version = "=1.14.23" } -solana-core = { path = "../core", version = "=1.14.23" } -solana-gossip = { path = "../gossip", version = "=1.14.23" } -solana-ledger = { path = "../ledger", version = "=1.14.23" } -solana-logger = { path = "../logger", version = "=1.14.23" } -solana-net-utils = { path = "../net-utils", version = "=1.14.23" } -solana-program-runtime = { path = "../program-runtime", version = "=1.14.23" } -solana-program-test = { path = "../program-test", version = "=1.14.23" } -solana-rpc = { path = "../rpc", version = "=1.14.23" } -solana-runtime = { path = "../runtime", version = "=1.14.23" } -solana-sdk = { path = "../sdk", version = "=1.14.23" } -solana-streamer = { path = "../streamer", version = "=1.14.23" } +solana-cli-output = { path = "../cli-output", version = "=1.14.24" } +solana-client = { path = "../client", version = "=1.14.24" } +solana-core = { path = "../core", version = "=1.14.24" } +solana-gossip = { path = "../gossip", version = "=1.14.24" } +solana-ledger = { path = "../ledger", version = "=1.14.24" } +solana-logger = { path = "../logger", version = "=1.14.24" } +solana-net-utils = { path = "../net-utils", version = "=1.14.24" } +solana-program-runtime = { path = "../program-runtime", version = "=1.14.24" } +solana-program-test = { path = "../program-test", version = "=1.14.24" } +solana-rpc = { path = "../rpc", version = "=1.14.24" } +solana-runtime = { path = "../runtime", version = "=1.14.24" } +solana-sdk = { path = "../sdk", version = "=1.14.24" } +solana-streamer = { path = "../streamer", version = "=1.14.24" } tokio = { version = "1", features = ["full"] } [package.metadata.docs.rs] diff --git a/tokens/Cargo.toml b/tokens/Cargo.toml index 76e31eac82053a..707c3ef23a07f9 100644 --- a/tokens/Cargo.toml +++ b/tokens/Cargo.toml @@ -3,7 +3,7 @@ name = "solana-tokens" description = "Blockchain, Rebuilt for Scale" authors = ["Solana Maintainers "] edition = "2021" -version = "1.14.23" +version = "1.14.24" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -19,14 +19,14 @@ indexmap = "1.9.1" indicatif = "0.16.2" pickledb = { version = "0.5.1", default-features = false, features = ["yaml"] } serde = { version = "1.0", features = ["derive"] } -solana-account-decoder = { path = "../account-decoder", version = "=1.14.23" } -solana-clap-utils = { path = "../clap-utils", version = "=1.14.23" } -solana-cli-config = { path = "../cli-config", version = "=1.14.23" } -solana-client = { path = "../client", version = "=1.14.23" } -solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.23" } -solana-sdk = { path = "../sdk", version = "=1.14.23" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.23" } -solana-version = { path = "../version", version = "=1.14.23" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.24" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.24" } +solana-cli-config = { path = "../cli-config", version = "=1.14.24" } +solana-client = { path = "../client", version = "=1.14.24" } +solana-remote-wallet = { path = "../remote-wallet", version = "=1.14.24" } +solana-sdk = { path = "../sdk", version = "=1.14.24" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.24" } +solana-version = { path = "../version", version = "=1.14.24" } spl-associated-token-account = { version = "=1.1.3" } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } tempfile = "3.4.0" @@ -34,6 +34,6 @@ thiserror = "1.0" [dev-dependencies] bincode = "1.3.3" -solana-logger = { path = "../logger", version = "=1.14.23" } -solana-streamer = { path = "../streamer", version = "=1.14.23" } -solana-test-validator = { path = "../test-validator", version = "=1.14.23" } +solana-logger = { path = "../logger", version = "=1.14.24" } +solana-streamer = { path = "../streamer", version = "=1.14.24" } +solana-test-validator = { path = "../test-validator", version = "=1.14.24" } diff --git a/transaction-dos/Cargo.toml b/transaction-dos/Cargo.toml index 72fda4bee7e340..47d7b2c76b4693 100644 --- a/transaction-dos/Cargo.toml +++ b/transaction-dos/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-transaction-dos" -version = "1.14.23" +version = "1.14.24" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -14,23 +14,23 @@ clap = "2.33.1" log = "0.4.17" rand = "0.7.0" rayon = "1.5.3" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.23" } -solana-cli = { path = "../cli", version = "=1.14.23" } -solana-client = { path = "../client", version = "=1.14.23" } -solana-core = { path = "../core", version = "=1.14.23" } -solana-faucet = { path = "../faucet", version = "=1.14.23" } -solana-gossip = { path = "../gossip", version = "=1.14.23" } -solana-logger = { path = "../logger", version = "=1.14.23" } -solana-measure = { path = "../measure", version = "=1.14.23" } -solana-net-utils = { path = "../net-utils", version = "=1.14.23" } -solana-runtime = { path = "../runtime", version = "=1.14.23" } -solana-sdk = { path = "../sdk", version = "=1.14.23" } -solana-streamer = { path = "../streamer", version = "=1.14.23" } -solana-transaction-status = { path = "../transaction-status", version = "=1.14.23" } -solana-version = { path = "../version", version = "=1.14.23" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.24" } +solana-cli = { path = "../cli", version = "=1.14.24" } +solana-client = { path = "../client", version = "=1.14.24" } +solana-core = { path = "../core", version = "=1.14.24" } +solana-faucet = { path = "../faucet", version = "=1.14.24" } +solana-gossip = { path = "../gossip", version = "=1.14.24" } +solana-logger = { path = "../logger", version = "=1.14.24" } +solana-measure = { path = "../measure", version = "=1.14.24" } +solana-net-utils = { path = "../net-utils", version = "=1.14.24" } +solana-runtime = { path = "../runtime", version = "=1.14.24" } +solana-sdk = { path = "../sdk", version = "=1.14.24" } +solana-streamer = { path = "../streamer", version = "=1.14.24" } +solana-transaction-status = { path = "../transaction-status", version = "=1.14.24" } +solana-version = { path = "../version", version = "=1.14.24" } [dev-dependencies] -solana-local-cluster = { path = "../local-cluster", version = "=1.14.23" } +solana-local-cluster = { path = "../local-cluster", version = "=1.14.24" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/transaction-status/Cargo.toml b/transaction-status/Cargo.toml index 015d30e096a638..65319093b0758b 100644 --- a/transaction-status/Cargo.toml +++ b/transaction-status/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-transaction-status" -version = "1.14.23" +version = "1.14.24" description = "Solana transaction status types" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -20,12 +20,12 @@ log = "0.4.17" serde = "1.0.138" serde_derive = "1.0.103" serde_json = "1.0.81" -solana-account-decoder = { path = "../account-decoder", version = "=1.14.23" } -solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.23" } -solana-measure = { path = "../measure", version = "=1.14.23" } -solana-metrics = { path = "../metrics", version = "=1.14.23" } -solana-sdk = { path = "../sdk", version = "=1.14.23" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.23" } +solana-account-decoder = { path = "../account-decoder", version = "=1.14.24" } +solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.14.24" } +solana-measure = { path = "../measure", version = "=1.14.24" } +solana-metrics = { path = "../metrics", version = "=1.14.24" } +solana-sdk = { path = "../sdk", version = "=1.14.24" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.24" } spl-associated-token-account = { version = "=1.1.3", features = ["no-entrypoint"] } spl-memo = { version = "=3.0.1", features = ["no-entrypoint"] } spl-token = { version = "=3.5.0", features = ["no-entrypoint"] } diff --git a/upload-perf/Cargo.toml b/upload-perf/Cargo.toml index 79c9b6b9529635..f39fcba05ffc68 100644 --- a/upload-perf/Cargo.toml +++ b/upload-perf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-upload-perf" -version = "1.14.23" +version = "1.14.24" description = "Metrics Upload Utility" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -11,7 +11,7 @@ publish = false [dependencies] serde_json = "1.0.81" -solana-metrics = { path = "../metrics", version = "=1.14.23" } +solana-metrics = { path = "../metrics", version = "=1.14.24" } [[bin]] name = "solana-upload-perf" diff --git a/validator/Cargo.toml b/validator/Cargo.toml index c855faabec2d83..1f8acf98e9f6b6 100644 --- a/validator/Cargo.toml +++ b/validator/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-validator" description = "Blockchain, Rebuilt for Scale" -version = "1.14.23" +version = "1.14.24" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -28,30 +28,30 @@ num_cpus = "1.13.1" rand = "0.7.0" serde = "1.0.138" serde_json = "1.0.81" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.23" } -solana-cli-config = { path = "../cli-config", version = "=1.14.23" } -solana-client = { path = "../client", version = "=1.14.23" } -solana-core = { path = "../core", version = "=1.14.23" } -solana-download-utils = { path = "../download-utils", version = "=1.14.23" } -solana-entry = { path = "../entry", version = "=1.14.23" } -solana-faucet = { path = "../faucet", version = "=1.14.23" } -solana-genesis-utils = { path = "../genesis-utils", version = "=1.14.23" } -solana-gossip = { path = "../gossip", version = "=1.14.23" } -solana-ledger = { path = "../ledger", version = "=1.14.23" } -solana-logger = { path = "../logger", version = "=1.14.23" } -solana-metrics = { path = "../metrics", version = "=1.14.23" } -solana-net-utils = { path = "../net-utils", version = "=1.14.23" } -solana-perf = { path = "../perf", version = "=1.14.23" } -solana-poh = { path = "../poh", version = "=1.14.23" } -solana-rpc = { path = "../rpc", version = "=1.14.23" } -solana-runtime = { path = "../runtime", version = "=1.14.23" } -solana-sdk = { path = "../sdk", version = "=1.14.23" } -solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.23" } -solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.23" } -solana-streamer = { path = "../streamer", version = "=1.14.23" } -solana-test-validator = { path = "../test-validator", version = "=1.14.23" } -solana-version = { path = "../version", version = "=1.14.23" } -solana-vote-program = { path = "../programs/vote", version = "=1.14.23" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.24" } +solana-cli-config = { path = "../cli-config", version = "=1.14.24" } +solana-client = { path = "../client", version = "=1.14.24" } +solana-core = { path = "../core", version = "=1.14.24" } +solana-download-utils = { path = "../download-utils", version = "=1.14.24" } +solana-entry = { path = "../entry", version = "=1.14.24" } +solana-faucet = { path = "../faucet", version = "=1.14.24" } +solana-genesis-utils = { path = "../genesis-utils", version = "=1.14.24" } +solana-gossip = { path = "../gossip", version = "=1.14.24" } +solana-ledger = { path = "../ledger", version = "=1.14.24" } +solana-logger = { path = "../logger", version = "=1.14.24" } +solana-metrics = { path = "../metrics", version = "=1.14.24" } +solana-net-utils = { path = "../net-utils", version = "=1.14.24" } +solana-perf = { path = "../perf", version = "=1.14.24" } +solana-poh = { path = "../poh", version = "=1.14.24" } +solana-rpc = { path = "../rpc", version = "=1.14.24" } +solana-runtime = { path = "../runtime", version = "=1.14.24" } +solana-sdk = { path = "../sdk", version = "=1.14.24" } +solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.14.24" } +solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.14.24" } +solana-streamer = { path = "../streamer", version = "=1.14.24" } +solana-test-validator = { path = "../test-validator", version = "=1.14.24" } +solana-version = { path = "../version", version = "=1.14.24" } +solana-vote-program = { path = "../programs/vote", version = "=1.14.24" } symlink = "0.1.0" [target.'cfg(not(target_env = "msvc"))'.dependencies] diff --git a/version/Cargo.toml b/version/Cargo.toml index 16e564588b9104..5877d413589931 100644 --- a/version/Cargo.toml +++ b/version/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-version" -version = "1.14.23" +version = "1.14.24" description = "Solana Version" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,9 +14,9 @@ log = "0.4.17" semver = "1.0.10" serde = "1.0.138" serde_derive = "1.0.103" -solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.23" } -solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.23" } -solana-sdk = { path = "../sdk", version = "=1.14.23" } +solana-frozen-abi = { path = "../frozen-abi", version = "=1.14.24" } +solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.14.24" } +solana-sdk = { path = "../sdk", version = "=1.14.24" } [lib] name = "solana_version" diff --git a/watchtower/Cargo.toml b/watchtower/Cargo.toml index 39e3905f404f1c..9a3add66991db8 100644 --- a/watchtower/Cargo.toml +++ b/watchtower/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2021" name = "solana-watchtower" description = "Blockchain, Rebuilt for Scale" -version = "1.14.23" +version = "1.14.24" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -13,15 +13,15 @@ documentation = "https://docs.rs/solana-watchtower" clap = "2.33.1" humantime = "2.0.1" log = "0.4.17" -solana-clap-utils = { path = "../clap-utils", version = "=1.14.23" } -solana-cli-config = { path = "../cli-config", version = "=1.14.23" } -solana-cli-output = { path = "../cli-output", version = "=1.14.23" } -solana-client = { path = "../client", version = "=1.14.23" } -solana-logger = { path = "../logger", version = "=1.14.23" } -solana-metrics = { path = "../metrics", version = "=1.14.23" } -solana-notifier = { path = "../notifier", version = "=1.14.23" } -solana-sdk = { path = "../sdk", version = "=1.14.23" } -solana-version = { path = "../version", version = "=1.14.23" } +solana-clap-utils = { path = "../clap-utils", version = "=1.14.24" } +solana-cli-config = { path = "../cli-config", version = "=1.14.24" } +solana-cli-output = { path = "../cli-output", version = "=1.14.24" } +solana-client = { path = "../client", version = "=1.14.24" } +solana-logger = { path = "../logger", version = "=1.14.24" } +solana-metrics = { path = "../metrics", version = "=1.14.24" } +solana-notifier = { path = "../notifier", version = "=1.14.24" } +solana-sdk = { path = "../sdk", version = "=1.14.24" } +solana-version = { path = "../version", version = "=1.14.24" } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/zk-token-sdk/Cargo.toml b/zk-token-sdk/Cargo.toml index 77c4b4beab5882..7345f6d7d889f2 100644 --- a/zk-token-sdk/Cargo.toml +++ b/zk-token-sdk/Cargo.toml @@ -3,7 +3,7 @@ name = "solana-zk-token-sdk" description = "Solana Zk Token SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" -version = "1.14.23" +version = "1.14.24" license = "Apache-2.0" edition = "2021" @@ -12,7 +12,7 @@ base64 = "0.13" bytemuck = { version = "1.11.0", features = ["derive"] } num-derive = "0.3" num-traits = "0.2" -solana-program = { path = "../sdk/program", version = "=1.14.23" } +solana-program = { path = "../sdk/program", version = "=1.14.24" } [target.'cfg(not(target_os = "solana"))'.dependencies] aes-gcm-siv = "0.10.3" @@ -29,7 +29,7 @@ rand = "0.7" serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" sha3 = "0.9" -solana-sdk = { path = "../sdk", version = "=1.14.23" } +solana-sdk = { path = "../sdk", version = "=1.14.24" } subtle = "2" thiserror = "1.0" zeroize = { version = "1.3", default-features = false, features = ["zeroize_derive"] } From 605da4a30ba5296584d1e3a830bce8af3f395439 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Tue, 8 Aug 2023 11:06:50 -0500 Subject: [PATCH 456/465] v1.14: improve prioritization fee cache accuracy (backport of #32692) (#32755) improve prioritization fee cache accuracy (#32692) * improve prioritization cache accuracy (cherry picked from commit ef6af307a4840604d5c3af345fbf59d93316c37a) fix merge conflict Co-authored-by: Tao Zhu <82401714+taozhu-chicago@users.noreply.github.com> --- core/src/replay_stage.rs | 5 ---- core/src/validator.rs | 1 + .../optimistically_confirmed_bank_tracker.rs | 24 ++++++++++++++++++- rpc/src/rpc.rs | 4 ++++ rpc/src/rpc_subscriptions.rs | 9 +++++++ 5 files changed, 37 insertions(+), 6 deletions(-) diff --git a/core/src/replay_stage.rs b/core/src/replay_stage.rs index e8b829d17ea349..c14c2f90003780 100644 --- a/core/src/replay_stage.rs +++ b/core/src/replay_stage.rs @@ -2527,7 +2527,6 @@ impl ReplayStage { ancestor_hashes_replay_update_sender: &AncestorHashesReplayUpdateSender, block_metadata_notifier: Option, replay_result_vec: &[ReplaySlotFromBlockstore], - prioritization_fee_cache: &PrioritizationFeeCache, purge_repair_slot_counter: &mut PurgeRepairSlotCounter, ) -> bool { // TODO: See if processing of blockstore replay results and bank completion can be made thread safe. @@ -2602,9 +2601,6 @@ impl ReplayStage { warn!("cost_update_sender failed sending bank stats: {:?}", err) }); - // finalize block's minimum prioritization fee cache for this bank - prioritization_fee_cache.finalize_priority_fee(bank.slot()); - assert_ne!(bank.hash(), Hash::default()); // Needs to be updated before `check_slot_agrees_with_cluster()` so that // any updates in `check_slot_agrees_with_cluster()` on fork choice take @@ -2816,7 +2812,6 @@ impl ReplayStage { ancestor_hashes_replay_update_sender, block_metadata_notifier, &replay_result_vec, - prioritization_fee_cache, purge_repair_slot_counter, ) } else { diff --git a/core/src/validator.rs b/core/src/validator.rs index 5c3b802fe64c4e..f2bdc04a56519a 100644 --- a/core/src/validator.rs +++ b/core/src/validator.rs @@ -879,6 +879,7 @@ impl Validator { optimistically_confirmed_bank, rpc_subscriptions.clone(), confirmed_bank_subscribers, + prioritization_fee_cache.clone(), )), Some(BankNotificationSenderConfig { sender: bank_notification_sender, diff --git a/rpc/src/optimistically_confirmed_bank_tracker.rs b/rpc/src/optimistically_confirmed_bank_tracker.rs index ca112330439b70..cd840b6e4e36c3 100644 --- a/rpc/src/optimistically_confirmed_bank_tracker.rs +++ b/rpc/src/optimistically_confirmed_bank_tracker.rs @@ -12,7 +12,9 @@ use { crate::rpc_subscriptions::RpcSubscriptions, crossbeam_channel::{Receiver, RecvTimeoutError, Sender}, solana_client::rpc_response::{SlotTransactionStats, SlotUpdate}, - solana_runtime::{bank::Bank, bank_forks::BankForks}, + solana_runtime::{ + bank::Bank, bank_forks::BankForks, prioritization_fee_cache::PrioritizationFeeCache, + }, solana_sdk::{clock::Slot, timing::timestamp}, std::{ collections::HashSet, @@ -92,6 +94,7 @@ impl OptimisticallyConfirmedBankTracker { optimistically_confirmed_bank: Arc>, subscriptions: Arc, slot_notification_subscribers: Option>>>, + prioritization_fee_cache: Arc, ) -> Self { let exit_ = exit.clone(); let mut pending_optimistically_confirmed_banks = HashSet::new(); @@ -115,6 +118,7 @@ impl OptimisticallyConfirmedBankTracker { &mut highest_confirmed_slot, &mut newest_root_slot, &slot_notification_subscribers, + &prioritization_fee_cache, ) { break; } @@ -123,6 +127,7 @@ impl OptimisticallyConfirmedBankTracker { Self { thread_hdl } } + #[allow(clippy::too_many_arguments)] fn recv_notification( receiver: &Receiver, bank_forks: &Arc>, @@ -133,6 +138,7 @@ impl OptimisticallyConfirmedBankTracker { highest_confirmed_slot: &mut Slot, newest_root_slot: &mut Slot, slot_notification_subscribers: &Option>>>, + prioritization_fee_cache: &PrioritizationFeeCache, ) -> Result<(), RecvTimeoutError> { let notification = receiver.recv_timeout(Duration::from_secs(1))?; Self::process_notification( @@ -145,6 +151,7 @@ impl OptimisticallyConfirmedBankTracker { highest_confirmed_slot, newest_root_slot, slot_notification_subscribers, + prioritization_fee_cache, ); Ok(()) } @@ -250,6 +257,7 @@ impl OptimisticallyConfirmedBankTracker { } } + #[allow(clippy::too_many_arguments)] pub fn process_notification( notification: BankNotification, bank_forks: &Arc>, @@ -260,6 +268,7 @@ impl OptimisticallyConfirmedBankTracker { highest_confirmed_slot: &mut Slot, newest_root_slot: &mut Slot, slot_notification_subscribers: &Option>>>, + prioritization_fee_cache: &PrioritizationFeeCache, ) { debug!("received bank notification: {:?}", notification); match notification { @@ -299,6 +308,9 @@ impl OptimisticallyConfirmedBankTracker { slot, timestamp: timestamp(), }); + + // finalize block's minimum prioritization fee cache for this bank + prioritization_fee_cache.finalize_priority_fee(slot); } BankNotification::Frozen(bank) => { let frozen_slot = bank.slot(); @@ -458,6 +470,7 @@ mod tests { &mut highest_confirmed_slot, &mut newest_root_slot, &None, + &PrioritizationFeeCache::default(), ); assert_eq!(optimistically_confirmed_bank.read().unwrap().bank.slot(), 2); assert_eq!(highest_confirmed_slot, 2); @@ -473,6 +486,7 @@ mod tests { &mut highest_confirmed_slot, &mut newest_root_slot, &None, + &PrioritizationFeeCache::default(), ); assert_eq!(optimistically_confirmed_bank.read().unwrap().bank.slot(), 2); assert_eq!(highest_confirmed_slot, 2); @@ -488,6 +502,7 @@ mod tests { &mut highest_confirmed_slot, &mut newest_root_slot, &None, + &PrioritizationFeeCache::default(), ); assert_eq!(optimistically_confirmed_bank.read().unwrap().bank.slot(), 2); assert_eq!(pending_optimistically_confirmed_banks.len(), 1); @@ -508,6 +523,7 @@ mod tests { &mut highest_confirmed_slot, &mut newest_root_slot, &None, + &PrioritizationFeeCache::default(), ); assert_eq!(optimistically_confirmed_bank.read().unwrap().bank.slot(), 3); assert_eq!(highest_confirmed_slot, 3); @@ -527,6 +543,7 @@ mod tests { &mut highest_confirmed_slot, &mut newest_root_slot, &None, + &PrioritizationFeeCache::default(), ); assert_eq!(optimistically_confirmed_bank.read().unwrap().bank.slot(), 3); assert_eq!(pending_optimistically_confirmed_banks.len(), 1); @@ -554,6 +571,7 @@ mod tests { &mut highest_confirmed_slot, &mut newest_root_slot, &subscribers, + &PrioritizationFeeCache::default(), ); assert_eq!(optimistically_confirmed_bank.read().unwrap().bank.slot(), 5); assert_eq!(pending_optimistically_confirmed_banks.len(), 0); @@ -572,6 +590,7 @@ mod tests { &mut highest_confirmed_slot, &mut newest_root_slot, &subscribers, + &PrioritizationFeeCache::default(), ); assert_eq!(newest_root_slot, 5); @@ -601,6 +620,7 @@ mod tests { &mut highest_confirmed_slot, &mut newest_root_slot, &None, + &PrioritizationFeeCache::default(), ); assert_eq!(optimistically_confirmed_bank.read().unwrap().bank.slot(), 5); assert_eq!(pending_optimistically_confirmed_banks.len(), 0); @@ -622,6 +642,7 @@ mod tests { &mut highest_confirmed_slot, &mut newest_root_slot, &subscribers, + &PrioritizationFeeCache::default(), ); assert_eq!(optimistically_confirmed_bank.read().unwrap().bank.slot(), 7); assert_eq!(pending_optimistically_confirmed_banks.len(), 0); @@ -639,6 +660,7 @@ mod tests { &mut highest_confirmed_slot, &mut newest_root_slot, &subscribers, + &PrioritizationFeeCache::default(), ); assert_eq!(newest_root_slot, 7); diff --git a/rpc/src/rpc.rs b/rpc/src/rpc.rs index d0df56aaefac5d..6f282c039e1091 100644 --- a/rpc/src/rpc.rs +++ b/rpc/src/rpc.rs @@ -8324,6 +8324,7 @@ pub mod tests { &mut highest_confirmed_slot, &mut highest_root_slot, &None, + &PrioritizationFeeCache::default(), ); let req = r#"{"jsonrpc":"2.0","id":1,"method":"getSlot","params":[{"commitment": "confirmed"}]}"#; @@ -8343,6 +8344,7 @@ pub mod tests { &mut highest_confirmed_slot, &mut highest_root_slot, &None, + &PrioritizationFeeCache::default(), ); let req = r#"{"jsonrpc":"2.0","id":1,"method":"getSlot","params":[{"commitment": "confirmed"}]}"#; @@ -8362,6 +8364,7 @@ pub mod tests { &mut highest_confirmed_slot, &mut highest_root_slot, &None, + &PrioritizationFeeCache::default(), ); let req = r#"{"jsonrpc":"2.0","id":1,"method":"getSlot","params":[{"commitment": "confirmed"}]}"#; @@ -8382,6 +8385,7 @@ pub mod tests { &mut highest_confirmed_slot, &mut highest_root_slot, &None, + &PrioritizationFeeCache::default(), ); let req = r#"{"jsonrpc":"2.0","id":1,"method":"getSlot","params":[{"commitment": "confirmed"}]}"#; diff --git a/rpc/src/rpc_subscriptions.rs b/rpc/src/rpc_subscriptions.rs index fac596d8728901..2bb22341931986 100644 --- a/rpc/src/rpc_subscriptions.rs +++ b/rpc/src/rpc_subscriptions.rs @@ -1287,6 +1287,7 @@ pub(crate) mod tests { solana_runtime::{ commitment::BlockCommitment, genesis_utils::{create_genesis_config, GenesisConfigInfo}, + prioritization_fee_cache::PrioritizationFeeCache, }, solana_sdk::{ commitment_config::CommitmentConfig, @@ -2032,6 +2033,7 @@ pub(crate) mod tests { &mut highest_confirmed_slot, &mut highest_root_slot, &None, + &PrioritizationFeeCache::default(), ); // a closure to reduce code duplications in building expected responses: @@ -2083,6 +2085,7 @@ pub(crate) mod tests { &mut highest_confirmed_slot, &mut highest_root_slot, &None, + &PrioritizationFeeCache::default(), ); let response = receiver.recv(); @@ -2204,6 +2207,7 @@ pub(crate) mod tests { &mut highest_confirmed_slot, &mut highest_root_slot, &None, + &PrioritizationFeeCache::default(), ); // The following should panic @@ -2321,6 +2325,7 @@ pub(crate) mod tests { &mut highest_confirmed_slot, &mut highest_root_slot, &None, + &PrioritizationFeeCache::default(), ); // a closure to reduce code duplications in building expected responses: @@ -2374,6 +2379,7 @@ pub(crate) mod tests { &mut highest_confirmed_slot, &mut highest_root_slot, &None, + &PrioritizationFeeCache::default(), ); let response = receiver.recv(); @@ -2809,6 +2815,7 @@ pub(crate) mod tests { &mut highest_confirmed_slot, &mut highest_root_slot, &None, + &PrioritizationFeeCache::default(), ); // Now, notify the frozen bank and ensure its notifications are processed @@ -2823,6 +2830,7 @@ pub(crate) mod tests { &mut highest_confirmed_slot, &mut highest_root_slot, &None, + &PrioritizationFeeCache::default(), ); let response = receiver0.recv(); @@ -2874,6 +2882,7 @@ pub(crate) mod tests { &mut highest_confirmed_slot, &mut highest_root_slot, &None, + &PrioritizationFeeCache::default(), ); let response = receiver1.recv(); let expected = json!({ From 25b3ee9cf0a713c997f8fa38c4c3b26aa76c9a4e Mon Sep 17 00:00:00 2001 From: anoushk1234 Date: Fri, 25 Aug 2023 17:24:58 +0530 Subject: [PATCH 457/465] feat: add receipt-tree crate --- .gitmodules | 3 + Cargo.lock | 350 ++++++++++++++++++++----------- Cargo.toml | 1 + firedancer | 1 + receipt-tree/Cargo.toml | 14 ++ receipt-tree/src/lib.rs | 3 + receipt-tree/src/receipt_tree.rs | 137 ++++++++++++ 7 files changed, 381 insertions(+), 128 deletions(-) create mode 100644 .gitmodules create mode 160000 firedancer create mode 100644 receipt-tree/Cargo.toml create mode 100644 receipt-tree/src/lib.rs create mode 100644 receipt-tree/src/receipt_tree.rs diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 00000000000000..3008deaa5b8d6c --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "firedancer"] + path = firedancer + url = git@github.com:tinydancer-io/firedancer.git diff --git a/Cargo.lock b/Cargo.lock index 720fc934a297d2..4f43b96ce59222 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -95,6 +95,16 @@ dependencies = [ "alloc-no-stdlib", ] +[[package]] +name = "annotate-snippets" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3b9d411ecbaf79885c6df4d75fff75858d5995ff25385657a28af47e82f9c36" +dependencies = [ + "unicode-width", + "yansi-term", +] + [[package]] name = "ansi_term" version = "0.11.0" @@ -156,8 +166,8 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "726535892e8eae7e70657b4c8ea93d26b8553afb1ce617caee529ef96d7dee6c" dependencies = [ - "proc-macro2 1.0.52", - "quote 1.0.18", + "proc-macro2 1.0.66", + "quote 1.0.33", "syn 1.0.109", "synstructure", ] @@ -168,8 +178,8 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2777730b2039ac0f95f093556e61b6d26cebed5393ca6f152717777cec3a42ed" dependencies = [ - "proc-macro2 1.0.52", - "quote 1.0.18", + "proc-macro2 1.0.66", + "quote 1.0.33", "syn 1.0.109", ] @@ -232,8 +242,8 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "648ed8c8d2ce5409ccd57453d9d1b214b342a0d69376a6feda1fd6cae3299308" dependencies = [ - "proc-macro2 1.0.52", - "quote 1.0.18", + "proc-macro2 1.0.66", + "quote 1.0.33", "syn 1.0.109", ] @@ -243,8 +253,8 @@ version = "0.1.56" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "96cf8829f67d2eab0b2dfa42c5d0ef737e0724e4a82b01b3e292456202b19716" dependencies = [ - "proc-macro2 1.0.52", - "quote 1.0.18", + "proc-macro2 1.0.66", + "quote 1.0.33", "syn 1.0.109", ] @@ -282,7 +292,7 @@ checksum = "47594e438a243791dba58124b6669561f5baa14cb12046641d8008bf035e5a25" dependencies = [ "async-trait", "axum-core", - "bitflags", + "bitflags 1.3.2", "bytes", "futures-util", "http", @@ -366,17 +376,41 @@ version = "0.60.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "062dddbc1ba4aca46de6338e2bf87771414c335f7b2f2036e8f3e9befebf88e6" dependencies = [ - "bitflags", + "bitflags 1.3.2", + "cexpr", + "clang-sys", + "lazy_static", + "lazycell", + "peeking_take_while", + "proc-macro2 1.0.66", + "quote 1.0.33", + "regex", + "rustc-hash", + "shlex", +] + +[[package]] +name = "bindgen" +version = "0.66.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2b84e06fc203107bfbad243f4aba2af864eb7db3b1cf46ea0a023b0b433d2a7" +dependencies = [ + "annotate-snippets", + "bitflags 2.4.0", "cexpr", "clang-sys", "lazy_static", "lazycell", + "log", "peeking_take_while", - "proc-macro2 1.0.52", - "quote 1.0.18", + "prettyplease 0.2.12", + "proc-macro2 1.0.66", + "quote 1.0.33", "regex", "rustc-hash", "shlex", + "syn 2.0.29", + "which", ] [[package]] @@ -400,6 +434,12 @@ version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" +[[package]] +name = "bitflags" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4682ae6287fcf752ecaabbfcc7b6f9b72aa33933dc23a554d853aea8eea8635" + [[package]] name = "bitmaps" version = "2.1.0" @@ -488,7 +528,7 @@ dependencies = [ "borsh-derive-internal", "borsh-schema-derive-internal", "proc-macro-crate 0.1.5", - "proc-macro2 1.0.52", + "proc-macro2 1.0.66", "syn 1.0.109", ] @@ -498,8 +538,8 @@ version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5449c28a7b352f2d1e592a8a28bf139bc71afb0764a14f3c02500935d8c44065" dependencies = [ - "proc-macro2 1.0.52", - "quote 1.0.18", + "proc-macro2 1.0.66", + "quote 1.0.33", "syn 1.0.109", ] @@ -509,8 +549,8 @@ version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cdbd5696d8bfa21d53d9fe39a714a18538bad11492a42d066dbbc395fb1951c0" dependencies = [ - "proc-macro2 1.0.52", - "quote 1.0.18", + "proc-macro2 1.0.66", + "quote 1.0.33", "syn 1.0.109", ] @@ -605,8 +645,8 @@ version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1aca418a974d83d40a0c1f0c5cba6ff4bc28d8df099109ca459a2118d40b6322" dependencies = [ - "proc-macro2 1.0.52", - "quote 1.0.18", + "proc-macro2 1.0.66", + "quote 1.0.33", "syn 1.0.109", ] @@ -791,7 +831,7 @@ checksum = "37e58ac78573c40708d45522f0d80fa2f01cc4f9b4e2bf749807255454312002" dependencies = [ "ansi_term", "atty", - "bitflags", + "bitflags 1.3.2", "strsim 0.8.0", "textwrap 0.11.0", "unicode-width", @@ -805,7 +845,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "71655c45cb9845d3270c9d6df84ebe72b4dad3c2ba3f7023ad47c144e4e473a5" dependencies = [ "atty", - "bitflags", + "bitflags 1.3.2", "clap_derive", "clap_lex", "indexmap", @@ -823,8 +863,8 @@ checksum = "ea0c8bce528c4be4da13ea6fead8965e95b6073585a2f05204bd8f4119f82a65" dependencies = [ "heck 0.4.0", "proc-macro-error", - "proc-macro2 1.0.52", - "quote 1.0.18", + "proc-macro2 1.0.66", + "quote 1.0.33", "syn 1.0.109", ] @@ -906,8 +946,8 @@ version = "0.2.22" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ef196d5d972878a48da7decb7686eded338b4858fbabeed513d63a7c98b2b82d" dependencies = [ - "proc-macro2 1.0.52", - "quote 1.0.18", + "proc-macro2 1.0.66", + "quote 1.0.33", "unicode-xid 0.2.2", ] @@ -1160,8 +1200,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "40eebddd2156ce1bb37b20bbe5151340a31828b1f2d22ba4141f3531710e38df" dependencies = [ "convert_case", - "proc-macro2 1.0.52", - "quote 1.0.18", + "proc-macro2 1.0.66", + "quote 1.0.33", "rustc_version 0.3.3", "syn 1.0.109", ] @@ -1248,8 +1288,8 @@ version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3bf95dc3f046b9da4f2d51833c0d3547d8564ef6910f5c1ed130306a75b92886" dependencies = [ - "proc-macro2 1.0.52", - "quote 1.0.18", + "proc-macro2 1.0.66", + "quote 1.0.33", "syn 1.0.109", ] @@ -1330,8 +1370,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f86b50932a01e7ec5c06160492ab660fb19b6bb2a7878030dd6cd68d21df9d4d" dependencies = [ "enum-ordinalize", - "proc-macro2 1.0.52", - "quote 1.0.18", + "proc-macro2 1.0.66", + "quote 1.0.33", "syn 1.0.109", ] @@ -1371,8 +1411,8 @@ version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8958699f9359f0b04e691a13850d48b7de329138023876d07cbd024c2c820598" dependencies = [ - "proc-macro2 1.0.52", - "quote 1.0.18", + "proc-macro2 1.0.66", + "quote 1.0.33", "syn 1.0.109", ] @@ -1384,8 +1424,8 @@ checksum = "0b166c9e378360dd5a6666a9604bb4f54ae0cac39023ffbac425e917a2a04fef" dependencies = [ "num-bigint 0.4.3", "num-traits", - "proc-macro2 1.0.52", - "quote 1.0.18", + "proc-macro2 1.0.66", + "quote 1.0.33", "syn 1.0.109", ] @@ -1396,8 +1436,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0eb359f1476bf611266ac1f5355bc14aeca37b299d0ebccc038ee7058891c9cb" dependencies = [ "once_cell", - "proc-macro2 1.0.52", - "quote 1.0.18", + "proc-macro2 1.0.66", + "quote 1.0.33", "syn 1.0.109", ] @@ -1531,6 +1571,14 @@ dependencies = [ "winapi 0.3.9", ] +[[package]] +name = "firedancer-sys" +version = "0.3.0" +dependencies = [ + "bindgen 0.66.1", + "paste", +] + [[package]] name = "fixedbitset" version = "0.4.0" @@ -1651,8 +1699,8 @@ version = "0.3.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "33c1e13800337f4d4d7a316bf45a567dbcb6ffe087f16424852d97e97a91f512" dependencies = [ - "proc-macro2 1.0.52", - "quote 1.0.18", + "proc-macro2 1.0.66", + "quote 1.0.33", "syn 1.0.109", ] @@ -1879,7 +1927,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4cff78e5788be1e0ab65b04d306b2ed5092c815ec97ec70f4ebd5aee158aa55d" dependencies = [ "base64 0.13.0", - "bitflags", + "bitflags 1.3.2", "bytes", "headers-core", "http", @@ -2321,8 +2369,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5b939a78fa820cdfcb7ee7484466746a7377760970f6f9c6fe19f9edcc8a38d2" dependencies = [ "proc-macro-crate 0.1.5", - "proc-macro2 1.0.52", - "quote 1.0.18", + "proc-macro2 1.0.66", + "quote 1.0.33", "syn 1.0.109", ] @@ -2446,7 +2494,7 @@ version = "0.8.0+7.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "611804e4666a25136fcc5f8cf425ab4d26c7f74ea245ffe92ea23b85b6420b5d" dependencies = [ - "bindgen", + "bindgen 0.60.1", "bzip2-sys", "cc", "glob", @@ -2697,8 +2745,8 @@ version = "0.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5a7d5f7076603ebc68de2dc6a650ec331a062a13abaa346975be747bbfa4b789" dependencies = [ - "proc-macro2 1.0.52", - "quote 1.0.18", + "proc-macro2 1.0.66", + "quote 1.0.33", "syn 1.0.109", ] @@ -2743,7 +2791,7 @@ version = "0.24.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "195cdbc1741b8134346d515b3a56a1c94b0912758009cfd53f99ea0f57b065fc" dependencies = [ - "bitflags", + "bitflags 1.3.2", "cfg-if 1.0.0", "libc", "memoffset", @@ -2821,8 +2869,8 @@ version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "876a53fff98e03a936a674b29568b0e605f06b29372c2489ff4de23f1949743d" dependencies = [ - "proc-macro2 1.0.52", - "quote 1.0.18", + "proc-macro2 1.0.66", + "quote 1.0.33", "syn 1.0.109", ] @@ -2894,8 +2942,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2be1598bf1c313dcdd12092e3f1920f463462525a21b7b4e11b4168353d0123e" dependencies = [ "proc-macro-crate 1.1.0", - "proc-macro2 1.0.52", - "quote 1.0.18", + "proc-macro2 1.0.66", + "quote 1.0.33", "syn 1.0.109", ] @@ -2947,7 +2995,7 @@ version = "0.10.55" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "345df152bc43501c5eb9e4654ff05f794effb78d4efe3d53abc158baddc0703d" dependencies = [ - "bitflags", + "bitflags 1.3.2", "cfg-if 1.0.0", "foreign-types", "libc", @@ -2962,8 +3010,8 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b501e44f11665960c7e7fcf062c7d96a14ade4aa98116c004b2e37b5be7d736c" dependencies = [ - "proc-macro2 1.0.52", - "quote 1.0.18", + "proc-macro2 1.0.66", + "quote 1.0.33", "syn 1.0.109", ] @@ -3039,8 +3087,8 @@ checksum = "084fd65d5dd8b3772edccb5ffd1e4b7eba43897ecd0f9401e330e8c542959408" dependencies = [ "Inflector", "proc-macro-error", - "proc-macro2 1.0.52", - "quote 1.0.18", + "proc-macro2 1.0.66", + "quote 1.0.33", "syn 1.0.109", ] @@ -3106,6 +3154,12 @@ dependencies = [ "windows-sys 0.32.0", ] +[[package]] +name = "paste" +version = "1.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "de3145af08024dea9fa9914f381a17b8fc6034dfb00f3a84013f7ff43f29ed4c" + [[package]] name = "pbkdf2" version = "0.4.0" @@ -3187,8 +3241,8 @@ checksum = "99b8db626e31e5b81787b9783425769681b347011cc59471e33ea46d2ea0cf55" dependencies = [ "pest", "pest_meta", - "proc-macro2 1.0.52", - "quote 1.0.18", + "proc-macro2 1.0.66", + "quote 1.0.33", "syn 1.0.109", ] @@ -3238,8 +3292,8 @@ version = "1.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6e8fe8163d14ce7f0cdac2e040116f22eac817edabff0be91e8aff7e9accf389" dependencies = [ - "proc-macro2 1.0.52", - "quote 1.0.18", + "proc-macro2 1.0.66", + "quote 1.0.33", "syn 1.0.109", ] @@ -3335,10 +3389,20 @@ version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3b83ec2d0af5c5c556257ff52c9f98934e243b9fd39604bfb2a9b75ec2e97f18" dependencies = [ - "proc-macro2 1.0.52", + "proc-macro2 1.0.66", "syn 1.0.109", ] +[[package]] +name = "prettyplease" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c64d9ba0963cdcea2e1b2230fbae2bab30eb25a174be395c41e764bfb65dd62" +dependencies = [ + "proc-macro2 1.0.66", + "syn 2.0.29", +] + [[package]] name = "proc-macro-crate" version = "0.1.5" @@ -3365,8 +3429,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" dependencies = [ "proc-macro-error-attr", - "proc-macro2 1.0.52", - "quote 1.0.18", + "proc-macro2 1.0.66", + "quote 1.0.33", "syn 1.0.109", "version_check", ] @@ -3377,8 +3441,8 @@ version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" dependencies = [ - "proc-macro2 1.0.52", - "quote 1.0.18", + "proc-macro2 1.0.66", + "quote 1.0.33", "version_check", ] @@ -3393,9 +3457,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.52" +version = "1.0.66" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d0e1ae9e836cc3beddd63db0df682593d7e2d3d891ae8c9083d2113e1744224" +checksum = "18fb31db3f9bddb2ea821cde30a9f70117e3f119938b5ee630b7403aa6e2ead9" dependencies = [ "unicode-ident", ] @@ -3407,7 +3471,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e0d9cc07f18492d879586c92b485def06bc850da3118075cd45d50e9c95b0e5" dependencies = [ "bit-set", - "bitflags", + "bitflags 1.3.2", "byteorder", "lazy_static", "num-traits", @@ -3488,8 +3552,8 @@ checksum = "f9cc1a3263e07e0bf68e96268f37665207b49560d98739662cdfaae215c720fe" dependencies = [ "anyhow", "itertools", - "proc-macro2 1.0.52", - "quote 1.0.18", + "proc-macro2 1.0.66", + "quote 1.0.33", "syn 1.0.109", ] @@ -3501,8 +3565,8 @@ checksum = "7345d5f0e08c0536d7ac7229952590239e77abf0a0100a1b1d890add6ea96364" dependencies = [ "anyhow", "itertools", - "proc-macro2 1.0.52", - "quote 1.0.18", + "proc-macro2 1.0.66", + "quote 1.0.33", "syn 1.0.109", ] @@ -3629,11 +3693,11 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.18" +version = "1.0.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1feb54ed693b93a84e14094943b84b7c4eae204c512b7ccb95ab0c66d278ad1" +checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae" dependencies = [ - "proc-macro2 1.0.52", + "proc-macro2 1.0.66", ] [[package]] @@ -3818,13 +3882,23 @@ dependencies = [ "rand_core 0.3.1", ] +[[package]] +name = "receipt-tree" +version = "0.1.0" +dependencies = [ + "firedancer-sys", + "log", + "rand 0.8.5", + "solana-sdk 1.14.24", +] + [[package]] name = "redox_syscall" version = "0.2.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8383f39639269cde97d255a32bdb68c047337295414940c68bdd30c2e13203ff" dependencies = [ - "bitflags", + "bitflags 1.3.2", ] [[package]] @@ -3833,7 +3907,7 @@ version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29" dependencies = [ - "bitflags", + "bitflags 1.3.2", ] [[package]] @@ -4010,7 +4084,7 @@ version = "0.34.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cb617eb09c4ef1536405e357e3b63f39e3ab4cc2159db05395278ad5c352bb16" dependencies = [ - "bitflags", + "bitflags 1.3.2", "errno 0.2.8", "io-lifetimes 0.6.1", "libc", @@ -4024,7 +4098,7 @@ version = "0.37.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0e78cc525325c06b4a7ff02db283472f3c042b7ff0c391f96c6d5ac6f4f91b75" dependencies = [ - "bitflags", + "bitflags 1.3.2", "errno 0.3.0", "io-lifetimes 1.0.9", "libc", @@ -4151,8 +4225,8 @@ version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bdbda6ac5cd1321e724fa9cee216f3a61885889b896f073b8f82322789c5250e" dependencies = [ - "proc-macro2 1.0.52", - "quote 1.0.18", + "proc-macro2 1.0.66", + "quote 1.0.33", "syn 1.0.109", ] @@ -4182,7 +4256,7 @@ version = "2.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "525bc1abfda2e1998d152c45cf13e696f76d0a4972310b22fac1658b05df7c87" dependencies = [ - "bitflags", + "bitflags 1.3.2", "core-foundation", "core-foundation-sys", "libc", @@ -4250,8 +4324,8 @@ version = "1.0.138" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "023e9b1467aef8a10fb88f25611870ada9800ef7e22afce356bb0d2387b6f27c" dependencies = [ - "proc-macro2 1.0.52", - "quote 1.0.18", + "proc-macro2 1.0.66", + "quote 1.0.33", "syn 1.0.109", ] @@ -4310,8 +4384,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f1b95bb2f4f624565e8fe8140c789af7e2082c0e0561b5a82a1b678baa9703dc" dependencies = [ "proc-macro-error", - "proc-macro2 1.0.52", - "quote 1.0.18", + "proc-macro2 1.0.66", + "quote 1.0.33", "rustversion", "syn 1.0.109", ] @@ -5277,8 +5351,8 @@ version = "1.14.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "57892538250428ad3dc3cbe05f6cd75ad14f4f16734fcb91bc7cd5fbb63d6315" dependencies = [ - "proc-macro2 1.0.52", - "quote 1.0.18", + "proc-macro2 1.0.66", + "quote 1.0.33", "rustc_version 0.4.0", "syn 1.0.109", ] @@ -5287,8 +5361,8 @@ dependencies = [ name = "solana-frozen-abi-macro" version = "1.14.24" dependencies = [ - "proc-macro2 1.0.52", - "quote 1.0.18", + "proc-macro2 1.0.66", + "quote 1.0.33", "rustc_version 0.4.0", "syn 1.0.109", ] @@ -5455,7 +5529,7 @@ version = "1.14.24" dependencies = [ "assert_matches", "bincode", - "bitflags", + "bitflags 1.3.2", "bs58", "byteorder", "chrono", @@ -5770,7 +5844,7 @@ checksum = "3f99052873619df68913cb8e92e28ff251a5483828925e87fa97ba15a9cbad51" dependencies = [ "base64 0.13.0", "bincode", - "bitflags", + "bitflags 1.3.2", "blake3", "borsh", "borsh-derive", @@ -5819,7 +5893,7 @@ dependencies = [ "assert_matches", "base64 0.13.0", "bincode", - "bitflags", + "bitflags 1.3.2", "blake3", "borsh", "borsh-derive", @@ -6089,7 +6163,7 @@ dependencies = [ "assert_matches", "base64 0.13.0", "bincode", - "bitflags", + "bitflags 1.3.2", "borsh", "bs58", "bytemuck", @@ -6139,7 +6213,7 @@ dependencies = [ "assert_matches", "base64 0.13.0", "bincode", - "bitflags", + "bitflags 1.3.2", "borsh", "bs58", "bytemuck", @@ -6192,8 +6266,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7d41a09b9cecd0a4df63c78a192adee99ebf2d3757c19713a68246e1d9789c7c" dependencies = [ "bs58", - "proc-macro2 1.0.52", - "quote 1.0.18", + "proc-macro2 1.0.66", + "quote 1.0.33", "rustversion", "syn 1.0.109", ] @@ -6203,8 +6277,8 @@ name = "solana-sdk-macro" version = "1.14.24" dependencies = [ "bs58", - "proc-macro2 1.0.52", - "quote 1.0.18", + "proc-macro2 1.0.66", + "quote 1.0.33", "rustversion", "syn 1.0.109", ] @@ -6819,8 +6893,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6878079b17446e4d3eba6192bb0a2950d5b14f0ed8424b852310e5a94345d0ef" dependencies = [ "heck 0.4.0", - "proc-macro2 1.0.52", - "quote 1.0.18", + "proc-macro2 1.0.66", + "quote 1.0.33", "rustversion", "syn 1.0.109", ] @@ -6854,8 +6928,19 @@ version = "1.0.109" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" dependencies = [ - "proc-macro2 1.0.52", - "quote 1.0.18", + "proc-macro2 1.0.66", + "quote 1.0.33", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "2.0.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c324c494eba9d92503e6f1ef2e6df781e78f6a7705a0202d9801b198807d518a" +dependencies = [ + "proc-macro2 1.0.66", + "quote 1.0.33", "unicode-ident", ] @@ -6871,8 +6956,8 @@ version = "0.12.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f36bdaa60a83aca3921b5259d5400cbf5e90fc51931376a9bd4a0eb79aa7210f" dependencies = [ - "proc-macro2 1.0.52", - "quote 1.0.18", + "proc-macro2 1.0.66", + "quote 1.0.33", "syn 1.0.109", "unicode-xid 0.2.2", ] @@ -6893,7 +6978,7 @@ version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1123645dfaf2b5eac6b6c88addafc359c789b8ef2a770ecaef758c1ddf363ea4" dependencies = [ - "bitflags", + "bitflags 1.3.2", "byteorder", "libc", "thiserror", @@ -6955,8 +7040,8 @@ version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0ee42b4e559f17bce0385ebf511a7beb67d5cc33c12c96b7f4e9789919d9c10f" dependencies = [ - "proc-macro2 1.0.52", - "quote 1.0.18", + "proc-macro2 1.0.66", + "quote 1.0.33", "syn 1.0.109", ] @@ -7015,8 +7100,8 @@ checksum = "8dd461f47ade621665c9f4e44b20449341769911c253275dc5cb03726cbb852c" dependencies = [ "cfg-if 1.0.0", "proc-macro-error", - "proc-macro2 1.0.52", - "quote 1.0.18", + "proc-macro2 1.0.66", + "quote 1.0.33", "syn 1.0.109", ] @@ -7050,8 +7135,8 @@ version = "1.0.31" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0396bc89e626244658bef819e22d0cc459e795a5ebe878e6ec336d1674a8d79a" dependencies = [ - "proc-macro2 1.0.52", - "quote 1.0.18", + "proc-macro2 1.0.66", + "quote 1.0.33", "syn 1.0.109", ] @@ -7189,8 +7274,8 @@ version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b557f72f448c511a979e2564e55d74e6c4432fc96ff4f6241bc6bded342643b7" dependencies = [ - "proc-macro2 1.0.52", - "quote 1.0.18", + "proc-macro2 1.0.66", + "quote 1.0.33", "syn 1.0.109", ] @@ -7380,9 +7465,9 @@ version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9403f1bafde247186684b230dc6f38b5cd514584e8bec1dd32514be4745fa757" dependencies = [ - "proc-macro2 1.0.52", + "proc-macro2 1.0.66", "prost-build 0.9.0", - "quote 1.0.18", + "quote 1.0.33", "syn 1.0.109", ] @@ -7392,10 +7477,10 @@ version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2fbcd2800e34e743b9ae795867d5f77b535d3a3be69fd731e39145719752df8c" dependencies = [ - "prettyplease", - "proc-macro2 1.0.52", + "prettyplease 0.1.9", + "proc-macro2 1.0.66", "prost-build 0.11.0", - "quote 1.0.18", + "quote 1.0.33", "syn 1.0.109", ] @@ -7425,7 +7510,7 @@ version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "aba3f3efabf7fb41fae8534fc20a817013dd1c12cb45441efb6c82e6556b4cd8" dependencies = [ - "bitflags", + "bitflags 1.3.2", "bytes", "futures-core", "futures-util", @@ -7469,8 +7554,8 @@ version = "0.1.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f4f480b8f81512e825f337ad51e94c1eb5d3bbdf2b363dcd01e2b19a9ffe3f8e" dependencies = [ - "proc-macro2 1.0.52", - "quote 1.0.18", + "proc-macro2 1.0.66", + "quote 1.0.33", "syn 1.0.109", ] @@ -7790,8 +7875,8 @@ dependencies = [ "bumpalo", "log", "once_cell", - "proc-macro2 1.0.52", - "quote 1.0.18", + "proc-macro2 1.0.66", + "quote 1.0.33", "syn 1.0.109", "wasm-bindgen-shared", ] @@ -7814,7 +7899,7 @@ version = "0.2.82" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b260f13d3012071dfb1512849c033b1925038373aea48ced3012c09df952c602" dependencies = [ - "quote 1.0.18", + "quote 1.0.33", "wasm-bindgen-macro-support", ] @@ -7824,8 +7909,8 @@ version = "0.2.82" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5be8e654bdd9b79216c2929ab90721aa82faf65c48cdf08bdc4e7f51357b80da" dependencies = [ - "proc-macro2 1.0.52", - "quote 1.0.18", + "proc-macro2 1.0.66", + "quote 1.0.33", "syn 1.0.109", "wasm-bindgen-backend", "wasm-bindgen-shared", @@ -8127,6 +8212,15 @@ dependencies = [ "linked-hash-map", ] +[[package]] +name = "yansi-term" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe5c30ade05e61656247b2e334a031dfd0cc466fadef865bdcdea8d537951bf1" +dependencies = [ + "winapi 0.3.9", +] + [[package]] name = "yasna" version = "0.5.0" @@ -8151,8 +8245,8 @@ version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bdff2024a851a322b08f179173ae2ba620445aef1e838f0c196820eade4ae0c7" dependencies = [ - "proc-macro2 1.0.52", - "quote 1.0.18", + "proc-macro2 1.0.66", + "quote 1.0.33", "syn 1.0.109", "synstructure", ] diff --git a/Cargo.toml b/Cargo.toml index 219a27a4117d7b..4030f12b03d242 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -61,6 +61,7 @@ members = [ "programs/zk-token-proof-tests", "rayon-threadlimit", "rbpf-cli", + "receipt-tree", "remote-wallet", "rpc", "rpc-test", diff --git a/firedancer b/firedancer new file mode 160000 index 00000000000000..43f0b7566c9fd1 --- /dev/null +++ b/firedancer @@ -0,0 +1 @@ +Subproject commit 43f0b7566c9fd199a834bb3ed96c5309f22f9fd3 diff --git a/receipt-tree/Cargo.toml b/receipt-tree/Cargo.toml new file mode 100644 index 00000000000000..e6e267d2b164bc --- /dev/null +++ b/receipt-tree/Cargo.toml @@ -0,0 +1,14 @@ +[package] +name = "receipt-tree" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +firedancer-sys = {path ="../firedancer/ffi/rust/firedancer-sys"} +solana-sdk = { path = "../sdk", version = "=1.14.24" } +log = "0.4.17" + +[dev-dependencies] +rand = "0.8.5" diff --git a/receipt-tree/src/lib.rs b/receipt-tree/src/lib.rs new file mode 100644 index 00000000000000..d37fcf1a4eaa04 --- /dev/null +++ b/receipt-tree/src/lib.rs @@ -0,0 +1,3 @@ + +pub mod receipt_tree; + diff --git a/receipt-tree/src/receipt_tree.rs b/receipt-tree/src/receipt_tree.rs new file mode 100644 index 00000000000000..9aa37f8fe3577a --- /dev/null +++ b/receipt-tree/src/receipt_tree.rs @@ -0,0 +1,137 @@ +use { + firedancer_sys::ballet::{ + fd_bmtree32_commit_append, fd_bmtree32_commit_fini, fd_bmtree32_commit_t, + fd_bmtree32_hash_leaf, fd_bmtree32_node, + }, + log::warn, + solana_sdk::hash::Hash, + std::{mem, os::raw::c_void, slice::from_raw_parts}, +}; + +pub fn hash_leaf(node: &mut fd_bmtree32_node, data: &mut &[&[u8]]) { + // &mut &[&[u8]; 2]) + unsafe { + fd_bmtree32_hash_leaf( + node, + data as *mut _ as *mut c_void, + mem::size_of::<&[&[u8]; 2]>().try_into().unwrap(), + ) + }; +} + +pub struct ReceiptTree { + pub tree: fd_bmtree32_commit_t, + pub root: [u8; 32], +} +impl ReceiptTree { + /// Creates an empty tree + pub fn new() -> Self { + let mut nodes = vec![]; + for _ in 0..63 { + let n = fd_bmtree32_node { hash: [0u8; 32] }; + nodes.push(n); + } + let state = fd_bmtree32_commit_t { + leaf_cnt: 0, + __bindgen_padding_0: [0u64; 3], + node_buf: convert_to_array(nodes), + }; + + ReceiptTree { + tree: state, + root: [0u8; 32], + } + } + // Append just one leaf to the tree + pub fn append_leaf(&mut self, mut leaf: &[&[u8]]) { + let mut leaf_node = fd_bmtree32_node { hash: [0u8; 32] }; + // let mut k = &[data[i].0.as_slice(), &data[i].1.to_be_bytes()]; + hash_leaf(&mut leaf_node, &mut leaf); + unsafe { + fd_bmtree32_commit_append(&mut self.tree, &leaf_node, 1); + } + } + /// Finalise the commitment and get the 32 byte root + pub fn get_root(&mut self) -> Result { + let byte = unsafe { fd_bmtree32_commit_fini(&mut self.tree) }; + let root = unsafe { from_raw_parts(byte, 32) }; + match slice_to_array_32(root) { + Ok(hash) => Ok(Hash::new_from_array(*hash)), + Err(e) => Err(e), + } + } +} +fn convert_to_array(v: Vec) -> [T; 63] { + v.try_into() + .unwrap_or_else(|v: Vec| panic!("Expected a Vec of length 63 but it was {}", v.len())) +} + +#[derive(Debug)] +pub struct TryFromSliceError(String); + +fn slice_to_array_32(slice: &[T]) -> Result<&[T; 32], TryFromSliceError> { + if slice.len() <= 32 { + let ptr = slice.as_ptr() as *const [T; 32]; + unsafe { Ok(&*ptr) } + } else { + Err(TryFromSliceError(format!( + "The array was expected to be of length 32 but is actually {}", + slice.len() + ))) + } +} + +#[cfg(test)] +mod tests { + use { + super::*, + rand::{self, Rng}, + solana_sdk::signature::Signature, + }; + + #[test] + fn create_receipt_tree_for_one() { + let mut sigs = vec![]; + let mut statuses = vec![]; + for _ in 0..1 { + sigs.push(Signature::new_unique().to_string().as_bytes().to_owned()); + statuses.push(rand::thread_rng().gen_range(0..2) as u8); + } + let data: Vec<(Vec, u8)> = sigs.into_iter().zip(statuses.clone().into_iter()).collect(); + let mut receipt_tree = ReceiptTree::new(); + receipt_tree.append_leaf(&[data[0].0.as_slice(), &data[0].1.to_be_bytes()]); + let root = receipt_tree.get_root(); + match root { + Ok(hash) => { + println!("Hash: {:?}", hash.to_string()); + } + Err(e) => { + println!("Error: {:?}", e); + } + } + } + #[test] + fn create_receipt_tree_for_many() { + let mut sigs = vec![]; + let mut statuses = vec![]; + for _ in 0..100000 { + sigs.push(Signature::new_unique().to_string().as_bytes().to_owned()); + statuses.push(rand::thread_rng().gen_range(0..2) as u8); + } + let data: Vec<(Vec, u8)> = sigs.into_iter().zip(statuses.clone().into_iter()).collect(); + let mut receipt_tree = ReceiptTree::new(); + for i in 0..data.len() { + receipt_tree.append_leaf(&[data[i].0.as_slice(), &data[i].1.to_be_bytes()]); + } + + let root = receipt_tree.get_root(); + match root { + Ok(hash) => { + println!("Hash: {:?}", hash.to_string()); + } + Err(e) => { + println!("Error: {:?}", e); + } + } + } +} From d2f666d1e7b38f926c5ad051330a3fb91e44152e Mon Sep 17 00:00:00 2001 From: anoushk1234 Date: Fri, 25 Aug 2023 17:36:38 +0530 Subject: [PATCH 458/465] fix name and version --- receipt-tree/Cargo.toml | 4 ++-- receipt-tree/src/lib.rs | 3 ++- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/receipt-tree/Cargo.toml b/receipt-tree/Cargo.toml index e6e267d2b164bc..95c3355634f94e 100644 --- a/receipt-tree/Cargo.toml +++ b/receipt-tree/Cargo.toml @@ -1,6 +1,6 @@ [package] -name = "receipt-tree" -version = "0.1.0" +name = "solana-receipt-tree" +version = "1.14.24" edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html diff --git a/receipt-tree/src/lib.rs b/receipt-tree/src/lib.rs index d37fcf1a4eaa04..33af1bb2f4da5f 100644 --- a/receipt-tree/src/lib.rs +++ b/receipt-tree/src/lib.rs @@ -1,3 +1,4 @@ -pub mod receipt_tree; +mod receipt_tree; +pub use receipt_tree::*; From f2eed324bdb0ae1afecab1a4e08638205c052d4f Mon Sep 17 00:00:00 2001 From: anoushk1234 Date: Fri, 25 Aug 2023 18:11:58 +0530 Subject: [PATCH 459/465] feat: add receipt root to bankhash --- Cargo.lock | 21 +++++++++++---------- receipt-tree/src/receipt_tree.rs | 19 ++++++++++++++++++- runtime/Cargo.toml | 1 + runtime/src/bank.rs | 14 +++++++++++++- 4 files changed, 43 insertions(+), 12 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 4f43b96ce59222..d1faa11ba811cc 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3882,16 +3882,6 @@ dependencies = [ "rand_core 0.3.1", ] -[[package]] -name = "receipt-tree" -version = "0.1.0" -dependencies = [ - "firedancer-sys", - "log", - "rand 0.8.5", - "solana-sdk 1.14.24", -] - [[package]] name = "redox_syscall" version = "0.2.10" @@ -5994,6 +5984,16 @@ dependencies = [ "num_cpus", ] +[[package]] +name = "solana-receipt-tree" +version = "1.14.24" +dependencies = [ + "firedancer-sys", + "log", + "rand 0.8.5", + "solana-sdk 1.14.24", +] + [[package]] name = "solana-remote-wallet" version = "1.14.24" @@ -6140,6 +6140,7 @@ dependencies = [ "solana-metrics", "solana-program-runtime", "solana-rayon-threadlimit", + "solana-receipt-tree", "solana-sdk 1.14.24", "solana-stake-program", "solana-vote-program", diff --git a/receipt-tree/src/receipt_tree.rs b/receipt-tree/src/receipt_tree.rs index 9aa37f8fe3577a..8e6898ef67606e 100644 --- a/receipt-tree/src/receipt_tree.rs +++ b/receipt-tree/src/receipt_tree.rs @@ -1,3 +1,5 @@ +use std::fmt::Debug; + use { firedancer_sys::ballet::{ fd_bmtree32_commit_append, fd_bmtree32_commit_fini, fd_bmtree32_commit_t, @@ -23,6 +25,19 @@ pub struct ReceiptTree { pub tree: fd_bmtree32_commit_t, pub root: [u8; 32], } +impl Default for ReceiptTree{ + fn default() -> Self { + ReceiptTree::new() + } +} +impl Debug for ReceiptTree { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + f.debug_struct("ReceiptTree") + .field("leaves", &self.tree.leaf_cnt) + .field("root", &self.root) + .finish() + } +} impl ReceiptTree { /// Creates an empty tree pub fn new() -> Self { @@ -56,7 +71,9 @@ impl ReceiptTree { let byte = unsafe { fd_bmtree32_commit_fini(&mut self.tree) }; let root = unsafe { from_raw_parts(byte, 32) }; match slice_to_array_32(root) { - Ok(hash) => Ok(Hash::new_from_array(*hash)), + Ok(hash) => { + self.root = *hash; + Ok(Hash::new_from_array(*hash))}, Err(e) => Err(e), } } diff --git a/runtime/Cargo.toml b/runtime/Cargo.toml index b6ccf9f789c562..3fae426e4df939 100644 --- a/runtime/Cargo.toml +++ b/runtime/Cargo.toml @@ -55,6 +55,7 @@ solana-stake-program = { path = "../programs/stake", version = "=1.14.24" } solana-vote-program = { path = "../programs/vote", version = "=1.14.24" } solana-zk-token-proof-program = { path = "../programs/zk-token-proof", version = "=1.14.24" } solana-zk-token-sdk = { path = "../zk-token-sdk", version = "=1.14.24" } +solana-receipt-tree = { path = "../receipt-tree", version = "=1.14.24" } strum = { version = "0.24", features = ["derive"] } strum_macros = "0.24" symlink = "0.1.0" diff --git a/runtime/src/bank.rs b/runtime/src/bank.rs index 6938379547ad19..a135ab305d2099 100644 --- a/runtime/src/bank.rs +++ b/runtime/src/bank.rs @@ -90,6 +90,7 @@ use { sysvar_cache::SysvarCache, timings::{ExecuteTimingType, ExecuteTimings}, }, + solana_receipt_tree::ReceiptTree, solana_sdk::{ account::{ create_account_shared_data_with_fields as create_account, from_account, Account, @@ -836,6 +837,7 @@ impl PartialEq for Bank { accounts_data_size_delta_off_chain: _, fee_structure: _, incremental_snapshot_persistence: _, + receipt_tree: _, // Ignore new fields explicitly if they do not impact PartialEq. // Adding ".." will remove compile-time checks that if a new field // is added to the struct, this ParitalEq is accordingly updated. @@ -1090,6 +1092,8 @@ pub struct Bank { pub fee_structure: FeeStructure, pub incremental_snapshot_persistence: Option, + + pub receipt_tree: ReceiptTree, } struct VoteWithStakeDelegations { @@ -1278,6 +1282,7 @@ impl Bank { accounts_data_size_delta_on_chain: AtomicI64::new(0), accounts_data_size_delta_off_chain: AtomicI64::new(0), fee_structure: FeeStructure::default(), + receipt_tree: ReceiptTree::default(), }; let accounts_data_size_initial = bank.get_total_accounts_stats().unwrap().data_len as u64; @@ -1604,6 +1609,7 @@ impl Bank { accounts_data_size_delta_on_chain: AtomicI64::new(0), accounts_data_size_delta_off_chain: AtomicI64::new(0), fee_structure: parent.fee_structure.clone(), + receipt_tree: ReceiptTree::default(), }; let (_, ancestors_time) = measure!( @@ -1947,6 +1953,7 @@ impl Bank { accounts_data_size_delta_on_chain: AtomicI64::new(0), accounts_data_size_delta_off_chain: AtomicI64::new(0), fee_structure: FeeStructure::default(), + receipt_tree: RwLock::new(ReceiptTree::default()), }; bank.finish_init( genesis_config, @@ -4240,6 +4247,10 @@ impl Bank { None }; + let status_code: u8 = if status.is_ok() { 1 } else { 0 }; + self.receipt_tree + .append_leaf(&[tx.signature().as_ref(), status_code.to_be_bytes().as_ref()]); + TransactionExecutionResult::Executed { details: TransactionExecutionDetails { status, @@ -6612,12 +6623,13 @@ impl Bank { .bank_hash_info_at(self.slot(), &self.rewrites_skipped_this_slot); let mut signature_count_buf = [0u8; 8]; LittleEndian::write_u64(&mut signature_count_buf[..], self.signature_count() as u64); - + self.receipt_tree.get_root(); let mut hash = hashv(&[ self.parent_hash.as_ref(), accounts_delta_hash.hash.as_ref(), &signature_count_buf, self.last_blockhash().as_ref(), + self.receipt_tree.root.as_ref() ]); let buf = self From 8c37512ed624f160d83efcf1afb09d04039e10f8 Mon Sep 17 00:00:00 2001 From: anoushk1234 Date: Fri, 25 Aug 2023 18:58:29 +0530 Subject: [PATCH 460/465] feat: fix mut errors --- Cargo.toml | 1 + receipt-tree/src/receipt_tree.rs | 18 ++++++++++++++---- runtime/src/bank.rs | 22 ++++++++++++++-------- 3 files changed, 29 insertions(+), 12 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 4030f12b03d242..2c35cff999771c 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -93,6 +93,7 @@ members = [ exclude = [ "programs/bpf", + "firedancer" ] # This prevents a Travis CI error when building for Windows. diff --git a/receipt-tree/src/receipt_tree.rs b/receipt-tree/src/receipt_tree.rs index 8e6898ef67606e..eb9bad0c4225d6 100644 --- a/receipt-tree/src/receipt_tree.rs +++ b/receipt-tree/src/receipt_tree.rs @@ -67,16 +67,26 @@ impl ReceiptTree { } } /// Finalise the commitment and get the 32 byte root - pub fn get_root(&mut self) -> Result { + pub fn get_root_mutable(&mut self) -> Result { let byte = unsafe { fd_bmtree32_commit_fini(&mut self.tree) }; let root = unsafe { from_raw_parts(byte, 32) }; match slice_to_array_32(root) { Ok(hash) => { - self.root = *hash; Ok(Hash::new_from_array(*hash))}, Err(e) => Err(e), } } + // /// Finalise the commitment and get the 32 byte root + // pub fn get_root() -> Result { + // let mut tree = ReceiptTree::new(); + // let byte = unsafe { fd_bmtree32_commit_fini(&mut tree.tree) }; + // let root = unsafe { from_raw_parts(byte, 32) }; + // match slice_to_array_32(root) { + // Ok(hash) => { + // Ok(Hash::new_from_array(*hash))}, + // Err(e) => Err(e), + // } + // } } fn convert_to_array(v: Vec) -> [T; 63] { v.try_into() @@ -117,7 +127,7 @@ mod tests { let data: Vec<(Vec, u8)> = sigs.into_iter().zip(statuses.clone().into_iter()).collect(); let mut receipt_tree = ReceiptTree::new(); receipt_tree.append_leaf(&[data[0].0.as_slice(), &data[0].1.to_be_bytes()]); - let root = receipt_tree.get_root(); + let root = receipt_tree.get_root_mutable(); match root { Ok(hash) => { println!("Hash: {:?}", hash.to_string()); @@ -141,7 +151,7 @@ mod tests { receipt_tree.append_leaf(&[data[i].0.as_slice(), &data[i].1.to_be_bytes()]); } - let root = receipt_tree.get_root(); + let root = receipt_tree.get_root_mutable(); match root { Ok(hash) => { println!("Hash: {:?}", hash.to_string()); diff --git a/runtime/src/bank.rs b/runtime/src/bank.rs index a135ab305d2099..2f5f786d9aec89 100644 --- a/runtime/src/bank.rs +++ b/runtime/src/bank.rs @@ -33,6 +33,8 @@ //! It offers a high-level API that signs transactions //! on behalf of the caller, and a low-level API for when they have //! already been signed and verified. +use std::sync::Mutex; + #[allow(deprecated)] use solana_sdk::recent_blockhashes_account; pub use solana_sdk::reward_type::RewardType; @@ -1093,7 +1095,7 @@ pub struct Bank { pub incremental_snapshot_persistence: Option, - pub receipt_tree: ReceiptTree, + pub receipt_tree: Arc>, } struct VoteWithStakeDelegations { @@ -1282,7 +1284,7 @@ impl Bank { accounts_data_size_delta_on_chain: AtomicI64::new(0), accounts_data_size_delta_off_chain: AtomicI64::new(0), fee_structure: FeeStructure::default(), - receipt_tree: ReceiptTree::default(), + receipt_tree: Arc::new(Mutex::new(ReceiptTree::new())), }; let accounts_data_size_initial = bank.get_total_accounts_stats().unwrap().data_len as u64; @@ -1609,7 +1611,7 @@ impl Bank { accounts_data_size_delta_on_chain: AtomicI64::new(0), accounts_data_size_delta_off_chain: AtomicI64::new(0), fee_structure: parent.fee_structure.clone(), - receipt_tree: ReceiptTree::default(), + receipt_tree: Arc::new(Mutex::new(ReceiptTree::default())), }; let (_, ancestors_time) = measure!( @@ -1953,7 +1955,7 @@ impl Bank { accounts_data_size_delta_on_chain: AtomicI64::new(0), accounts_data_size_delta_off_chain: AtomicI64::new(0), fee_structure: FeeStructure::default(), - receipt_tree: RwLock::new(ReceiptTree::default()), + receipt_tree: Arc::new(Mutex::new(ReceiptTree::default())), }; bank.finish_init( genesis_config, @@ -4248,8 +4250,9 @@ impl Bank { }; let status_code: u8 = if status.is_ok() { 1 } else { 0 }; - self.receipt_tree - .append_leaf(&[tx.signature().as_ref(), status_code.to_be_bytes().as_ref()]); + if let Ok(mut receipt_tree) = self.receipt_tree.lock(){ + receipt_tree.append_leaf(&[tx.signature().as_ref(), status_code.to_be_bytes().as_ref()]); + } TransactionExecutionResult::Executed { details: TransactionExecutionDetails { @@ -6623,13 +6626,16 @@ impl Bank { .bank_hash_info_at(self.slot(), &self.rewrites_skipped_this_slot); let mut signature_count_buf = [0u8; 8]; LittleEndian::write_u64(&mut signature_count_buf[..], self.signature_count() as u64); - self.receipt_tree.get_root(); + let mut receipt_root = [0u8; 32]; + if let Ok(mut receipt_tree) = self.receipt_tree.lock() { + receipt_root = receipt_tree.get_root_mutable().unwrap().to_bytes(); + } let mut hash = hashv(&[ self.parent_hash.as_ref(), accounts_delta_hash.hash.as_ref(), &signature_count_buf, self.last_blockhash().as_ref(), - self.receipt_tree.root.as_ref() + receipt_root.as_ref() ]); let buf = self From adc1b827a0f741c004c7982144e11fdb0c902f8b Mon Sep 17 00:00:00 2001 From: anoushk1234 Date: Tue, 3 Oct 2023 15:09:20 +0530 Subject: [PATCH 461/465] add bank signatures --- ledger/src/blockstore_processor.rs | 16 +++++- runtime/src/bank.rs | 82 +++++++++++++++++++++++------- 2 files changed, 79 insertions(+), 19 deletions(-) diff --git a/ledger/src/blockstore_processor.rs b/ledger/src/blockstore_processor.rs index b5eb84567c098d..6b72ea5d750773 100644 --- a/ledger/src/blockstore_processor.rs +++ b/ledger/src/blockstore_processor.rs @@ -1,3 +1,5 @@ + + use { crate::{ block_error::BlockError, blockstore::Blockstore, blockstore_db::BlockstoreError, @@ -376,7 +378,7 @@ fn execute_batches( } else { batches }; - + let execute_batches_internal_metrics = execute_batches_internal( bank, rebatched_txs, @@ -464,12 +466,19 @@ fn process_entries_with_callback( let mut tick_hashes = vec![]; let mut rng = thread_rng(); let cost_model = CostModel::new(); - + let block_signatures = entries.iter().filter_map(|e| match &e.entry { + EntryType::Transactions(txs) => Some(txs), + _ => None, + }).flatten() + .map(|tx| *tx.signature()) + .collect::>(); + bank.set_block_signatures(block_signatures.to_vec()); for ReplayEntry { entry, starting_index, } in entries { + // bank.set_transaction_indexes(entr, transaction_count) match entry { EntryType::Tick(hash) => { // If it's a tick, save it for later @@ -486,6 +495,7 @@ fn process_entries_with_callback( confirmation_timing, &cost_model, log_messages_bytes_limit, + )?; batches.clear(); for hash in &tick_hashes { @@ -554,6 +564,7 @@ fn process_entries_with_callback( confirmation_timing, &cost_model, log_messages_bytes_limit, + )?; batches.clear(); } @@ -570,6 +581,7 @@ fn process_entries_with_callback( confirmation_timing, &cost_model, log_messages_bytes_limit, + )?; for hash in tick_hashes { bank.register_tick(hash); diff --git a/runtime/src/bank.rs b/runtime/src/bank.rs index 2f5f786d9aec89..d9c3d50cc389ea 100644 --- a/runtime/src/bank.rs +++ b/runtime/src/bank.rs @@ -33,8 +33,6 @@ //! It offers a high-level API that signs transactions //! on behalf of the caller, and a low-level API for when they have //! already been signed and verified. -use std::sync::Mutex; - #[allow(deprecated)] use solana_sdk::recent_blockhashes_account; pub use solana_sdk::reward_type::RewardType; @@ -92,7 +90,7 @@ use { sysvar_cache::SysvarCache, timings::{ExecuteTimingType, ExecuteTimings}, }, - solana_receipt_tree::ReceiptTree, + solana_receipt_tree::{fd_bmtree32_commit_append, fd_bmtree32_node, hash_leaf, ReceiptTree}, solana_sdk::{ account::{ create_account_shared_data_with_fields as create_account, from_account, Account, @@ -165,7 +163,7 @@ use { AtomicBool, AtomicI64, AtomicU64, AtomicUsize, Ordering::{AcqRel, Acquire, Relaxed}, }, - Arc, LockResult, RwLock, RwLockReadGuard, RwLockWriteGuard, + Arc, LockResult, Mutex, RwLock, RwLockReadGuard, RwLockWriteGuard, }, thread::Builder, time::{Duration, Instant}, @@ -839,7 +837,8 @@ impl PartialEq for Bank { accounts_data_size_delta_off_chain: _, fee_structure: _, incremental_snapshot_persistence: _, - receipt_tree: _, + // receipt_tree: _, + transaction_indexes: _, // Ignore new fields explicitly if they do not impact PartialEq. // Adding ".." will remove compile-time checks that if a new field // is added to the struct, this ParitalEq is accordingly updated. @@ -1095,7 +1094,10 @@ pub struct Bank { pub incremental_snapshot_persistence: Option, - pub receipt_tree: Arc>, + // pub receipt_tree: Arc>>, + + /// entryid, number of txns + pub transaction_indexes: Arc>>, } struct VoteWithStakeDelegations { @@ -1284,7 +1286,8 @@ impl Bank { accounts_data_size_delta_on_chain: AtomicI64::new(0), accounts_data_size_delta_off_chain: AtomicI64::new(0), fee_structure: FeeStructure::default(), - receipt_tree: Arc::new(Mutex::new(ReceiptTree::new())), + // receipt_tree: Arc::new(RwLock::new(im::HashMap::new())), + transaction_indexes: Arc::new(RwLock::new(Vec::new())), }; let accounts_data_size_initial = bank.get_total_accounts_stats().unwrap().data_len as u64; @@ -1611,7 +1614,8 @@ impl Bank { accounts_data_size_delta_on_chain: AtomicI64::new(0), accounts_data_size_delta_off_chain: AtomicI64::new(0), fee_structure: parent.fee_structure.clone(), - receipt_tree: Arc::new(Mutex::new(ReceiptTree::default())), + // receipt_tree: Arc::new(RwLock::new(im::HashMap::new())), + transaction_indexes: Arc::new(RwLock::new(Vec::new())), }; let (_, ancestors_time) = measure!( @@ -1955,7 +1959,8 @@ impl Bank { accounts_data_size_delta_on_chain: AtomicI64::new(0), accounts_data_size_delta_off_chain: AtomicI64::new(0), fee_structure: FeeStructure::default(), - receipt_tree: Arc::new(Mutex::new(ReceiptTree::default())), + // receipt_tree: Arc::new(RwLock::new(im::HashMap::new())), + transaction_indexes: Arc::new(RwLock::new(Vec::new())), }; bank.finish_init( genesis_config, @@ -4250,9 +4255,30 @@ impl Bank { }; let status_code: u8 = if status.is_ok() { 1 } else { 0 }; - if let Ok(mut receipt_tree) = self.receipt_tree.lock(){ - receipt_tree.append_leaf(&[tx.signature().as_ref(), status_code.to_be_bytes().as_ref()]); - } + // if let Ok(mut receipt_tree) = self.receipt_tree.write() { + // let mut leaf = fd_bmtree32_node { hash: [0u8; 32] }; + // hash_leaf( + // &mut leaf, + // &mut [ + // tx.signature().as_ref(), + // status_code.clone().to_be_bytes().as_ref(), + // ] + // .clone() + // .as_slice(), + // ); + + // if let Ok(txn_idxs) = self.transaction_indexes.read() { + // let txn_position = txn_idxs + // .iter() + // .position(|&sig| sig == *tx.signature()) + // .unwrap_or_else(|| { + // panic!("Transaction signature not found in transaction_indexes") + // }); + // receipt_tree.insert(txn_position, Hash::new_from_array(leaf.hash.clone())); + // } else { + // info!("lock poisoned"); + // }; + // } TransactionExecutionResult::Executed { details: TransactionExecutionDetails { @@ -6627,15 +6653,33 @@ impl Bank { let mut signature_count_buf = [0u8; 8]; LittleEndian::write_u64(&mut signature_count_buf[..], self.signature_count() as u64); let mut receipt_root = [0u8; 32]; - if let Ok(mut receipt_tree) = self.receipt_tree.lock() { - receipt_root = receipt_tree.get_root_mutable().unwrap().to_bytes(); - } + // if let Ok(mut receipt_tree) = self.receipt_tree.lock() { + // receipt_root = receipt_tree.get().unwrap().to_bytes(); + // } + // if let Ok(hashed_txs) = self.receipt_tree.read() { + // let mut state = ReceiptTree::new(); + // info!( + // "hashed_txs: {:?}", + // hashed_txs.keys().zip(hashed_txs.values()).collect_vec() + // ); + // let leaves = hashed_txs + // .keys() + // .zip(hashed_txs.values()) + // .sorted_by(|a, b| a.0.cmp(b.0)) + // .map(|hash| hash.1.to_bytes()) + // .collect::>(); + // info!("leaves: {:?}", leaves); + // if leaves.len() > 0 { + // state.append_leaves_raw(&leaves); + // receipt_root = state.get_root_mutable().unwrap().to_bytes(); + // } + // } let mut hash = hashv(&[ self.parent_hash.as_ref(), accounts_delta_hash.hash.as_ref(), &signature_count_buf, self.last_blockhash().as_ref(), - receipt_root.as_ref() + receipt_root.as_ref(), ]); let buf = self @@ -6760,7 +6804,11 @@ impl Bank { result } } - + pub fn set_block_signatures(&self, block_signatures: Vec) { + if let Ok(mut transaction_indexes) = self.transaction_indexes.write() { + *transaction_indexes = block_signatures; + } + } /// Specify that initial verification has completed. /// Called internally when verification runs in the foreground thread. /// Also has to be called by some tests which don't do verification on startup. From 388989b51b447de6c182399a122a47aa8964bd02 Mon Sep 17 00:00:00 2001 From: anoushk1234 Date: Sun, 15 Oct 2023 15:54:33 +0530 Subject: [PATCH 462/465] added receipt root to the bankhash --- Cargo.lock | 1 + core/src/banking_stage.rs | 11 +++- ledger/src/blockstore_processor.rs | 80 +++++++++++++++++------- merkle-tree/src/merkle_tree.rs | 36 +++++++++++ runtime/Cargo.toml | 1 + runtime/src/bank.rs | 98 +++++++++++++++++++----------- 6 files changed, 167 insertions(+), 60 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index d1faa11ba811cc..ef7cdb0d1352be 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -6137,6 +6137,7 @@ dependencies = [ "solana-frozen-abi-macro 1.14.24", "solana-logger 1.14.24", "solana-measure", + "solana-merkle-tree", "solana-metrics", "solana-program-runtime", "solana-rayon-threadlimit", diff --git a/core/src/banking_stage.rs b/core/src/banking_stage.rs index fb865b7ac86536..53a8faaff58be5 100644 --- a/core/src/banking_stage.rs +++ b/core/src/banking_stage.rs @@ -52,6 +52,7 @@ use { vote_sender_types::ReplayVoteSender, }, solana_sdk::{ + hash::{Hash, hashv}, clock::{ Slot, DEFAULT_TICKS_PER_SLOT, MAX_PROCESSING_AGE, MAX_TRANSACTION_FORWARDING_DELAY, MAX_TRANSACTION_FORWARDING_DELAY_GPU, @@ -1404,7 +1405,7 @@ impl BankingStage { "collect_balances", ); execute_and_commit_timings.collect_balances_us = collect_balances_time.as_us(); - + let msg_hashes: Vec = batch.sanitized_transactions().iter().map(|txn| *txn.message_hash()).collect(); let (load_and_execute_transactions_output, load_execute_time) = measure!( bank.load_and_execute_transactions( batch, @@ -1446,7 +1447,12 @@ impl BankingStage { .collect(), "execution_results_to_transactions", ); - + let statuses: Vec = execution_results.iter().map(|result| result.was_executed_successfully()).collect(); + let receipts: Vec<(Hash,Hash)> = msg_hashes.into_iter().zip(statuses).map(|rec_data| { + let status_code: u8 = if rec_data.1 {1}else {0}; + let hashed = hashv(&[rec_data.0.as_ref(),status_code.to_be_bytes().as_ref()]); + (rec_data.0,hashed) + }).collect(); let (last_blockhash, lamports_per_signature) = bank.last_blockhash_and_lamports_per_signature(); let (freeze_lock, freeze_lock_time) = measure!(bank.freeze_lock(), "freeze_lock"); @@ -1501,6 +1507,7 @@ impl BankingStage { sanitized_txs, &mut loaded_transactions, execution_results, + receipts, last_blockhash, lamports_per_signature, CommitTransactionCounts { diff --git a/ledger/src/blockstore_processor.rs b/ledger/src/blockstore_processor.rs index 6b72ea5d750773..4e50ad04f5f043 100644 --- a/ledger/src/blockstore_processor.rs +++ b/ledger/src/blockstore_processor.rs @@ -85,28 +85,30 @@ lazy_static! { .unwrap(); } -fn first_err(results: &[Result<()>]) -> Result<()> { +fn first_err(results: &[Result]) -> Result { for r in results { - if r.is_err() { - return r.clone(); + if let Err(e) = r{ + return Err(e.clone()); } } - Ok(()) + Ok(T::default()) } // Includes transaction signature for unit-testing fn get_first_error( batch: &TransactionBatch, fee_collection_results: Vec>, -) -> Option<(Result<()>, Signature)> { + receipts: Vec<(Hash,Hash)> +) -> Option<(Result>, Signature)> { let mut first_err = None; for (result, transaction) in fee_collection_results .iter() .zip(batch.sanitized_transactions()) + // .map(|(res,t| Ok()); { if let Err(ref err) = result { if first_err.is_none() { - first_err = Some((result.clone(), *transaction.signature())); + first_err = Some((Ok(receipts.clone()), *transaction.signature())); } warn!( "Unexpected validator error: {:?}, transaction: {:?}", @@ -132,7 +134,8 @@ fn execute_batch( replay_vote_sender: Option<&ReplayVoteSender>, timings: &mut ExecuteTimings, log_messages_bytes_limit: Option, -) -> Result<()> { +) -> Result> { + // info!("chk1 enters execute_batch"); let TransactionBatchWithIndexes { batch, transaction_indexes, @@ -168,11 +171,12 @@ fn execute_batch( fee_collection_results, execution_results, rent_debits, + receipts, .. - } = tx_results; - + } = tx_results.clone(); + // bank.append_receipts(receipts); check_accounts_data_size(bank, &execution_results)?; - + // info!("execrec: {:?} tx_results {:?}",receipts, tx_results); if let Some(transaction_status_sender) = transaction_status_sender { let transactions = batch.sanitized_transactions().to_vec(); let post_token_balances = if record_token_balances { @@ -195,10 +199,21 @@ fn execute_batch( ); } - let first_err = get_first_error(batch, fee_collection_results); - first_err.map(|(result, _)| result).unwrap_or(Ok(())) + let first_err = get_first_error(batch, fee_collection_results,receipts.clone()); + // ExecuteBatchResult{ + // result: + first_err.map(|(result, _)| result).unwrap_or(Ok(receipts)) + // ,receipts, + // } + } +// #[derive(Default)] +// pub struct ExecuteBatchResult{ +// result: Result<()>, +// receipts: Vec<(Hash,Hash)> +// } + #[derive(Default)] struct ExecuteBatchesInternalMetrics { execution_timings_per_thread: HashMap, @@ -219,14 +234,15 @@ fn execute_batches_internal( Mutex::new(HashMap::new()); let mut execute_batches_elapsed = Measure::start("execute_batches_elapsed"); - let results: Vec> = PAR_THREAD_POOL.install(|| { + info!("chk1 enters execute_batches_internal"); + let results: Vec>> = PAR_THREAD_POOL.install(|| { batches .into_par_iter() .map(|transaction_batch| { let transaction_count = transaction_batch.batch.sanitized_transactions().len() as u64; let mut timings = ExecuteTimings::default(); - let (result, execute_batches_time): (Result<()>, Measure) = measure!( + let (result, execute_batches_time): (Result>, Measure) = measure!( { let result = execute_batch( transaction_batch, @@ -272,7 +288,18 @@ fn execute_batches_internal( }); execute_batches_elapsed.stop(); + let receipts: Vec> = results.clone().into_iter().filter(|res| res.is_ok()).map(|res| res.unwrap()).collect(); + bank.append_receipts(receipts.clone()); + info!("chk1 done_executing batches {:?}", batches.len()); + info!("chk1 append_receipts: {:?} results {:?}",receipts, results); first_err(&results)?; + // let first_err = {for r in results{ + // if r.is_err(){ + // r + // } + // Ok(()) + // } +// }; Ok(ExecuteBatchesInternalMetrics { execution_timings_per_thread: execution_timings_per_thread.into_inner().unwrap(), @@ -466,13 +493,19 @@ fn process_entries_with_callback( let mut tick_hashes = vec![]; let mut rng = thread_rng(); let cost_model = CostModel::new(); - let block_signatures = entries.iter().filter_map(|e| match &e.entry { - EntryType::Transactions(txs) => Some(txs), - _ => None, - }).flatten() - .map(|tx| *tx.signature()) - .collect::>(); - bank.set_block_signatures(block_signatures.to_vec()); + // let block_signatures = entries.iter().filter_map(|e| match &e.entry { + // EntryType::Transactions(txs) => Some(txs), + // _ => None, + // }).flatten() + // .map(|tx| *tx.signature()) + // .collect::>(); + let transaction_message_hashes: Vec = entries.iter().filter_map(|e| match &e.entry { + EntryType::Transactions(txns) => Some(txns), + _ => None + }) + .flatten() + .map(|txn| *txn.message_hash()).collect(); + bank.set_transaction_message_hashes(transaction_message_hashes); for ReplayEntry { entry, starting_index, @@ -486,6 +519,7 @@ fn process_entries_with_callback( if bank.is_block_boundary(bank.tick_height() + tick_hashes.len() as u64) { // If it's a tick that will cause a new blockhash to be created, // execute the group and register the tick + // info!("chk1 batches before: {:?}",batches.len()); execute_batches( bank, &batches, @@ -497,6 +531,7 @@ fn process_entries_with_callback( log_messages_bytes_limit, )?; + // info!("chk1 batches after: {:?}",batches.len()); batches.clear(); for hash in &tick_hashes { bank.register_tick(hash); @@ -3673,6 +3708,7 @@ pub mod tests { let ( TransactionResults { fee_collection_results, + receipts, .. }, _balances, @@ -3686,7 +3722,7 @@ pub mod tests { &mut ExecuteTimings::default(), None, ); - let (err, signature) = get_first_error(&batch, fee_collection_results).unwrap(); + let (err, signature) = get_first_error(&batch, fee_collection_results,receipts).unwrap(); assert_eq!(err.unwrap_err(), TransactionError::AccountNotFound); assert_eq!(signature, account_not_found_sig); } diff --git a/merkle-tree/src/merkle_tree.rs b/merkle-tree/src/merkle_tree.rs index 70e09c27ecb9c2..74be06cf25955d 100644 --- a/merkle-tree/src/merkle_tree.rs +++ b/merkle-tree/src/merkle_tree.rs @@ -135,6 +135,42 @@ impl MerkleTree { mt } + pub fn new_with_leaves(mut items: Vec) -> Self { + let cap = MerkleTree::calculate_vec_capacity(items.len()); + let mut mt = MerkleTree { + leaf_count: items.len(), + nodes: Vec::with_capacity(cap), + }; + + mt.nodes.append(&mut items); + + let mut level_len = MerkleTree::next_level_len(items.len()); + let mut level_start = items.len(); + let mut prev_level_len = items.len(); + let mut prev_level_start = 0; + while level_len > 0 { + for i in 0..level_len { + let prev_level_idx = 2 * i; + let lsib = &mt.nodes[prev_level_start + prev_level_idx]; + let rsib = if prev_level_idx + 1 < prev_level_len { + &mt.nodes[prev_level_start + prev_level_idx + 1] + } else { + // Duplicate last entry if the level length is odd + &mt.nodes[prev_level_start + prev_level_idx] + }; + + let hash = hash_intermediate!(lsib, rsib); + mt.nodes.push(hash); + } + prev_level_start = level_start; + prev_level_len = level_len; + level_start += level_len; + level_len = MerkleTree::next_level_len(level_len); + } + + mt + } + pub fn get_root(&self) -> Option<&Hash> { self.nodes.iter().last() } diff --git a/runtime/Cargo.toml b/runtime/Cargo.toml index 3fae426e4df939..4d3e37d6cd23b2 100644 --- a/runtime/Cargo.toml +++ b/runtime/Cargo.toml @@ -55,6 +55,7 @@ solana-stake-program = { path = "../programs/stake", version = "=1.14.24" } solana-vote-program = { path = "../programs/vote", version = "=1.14.24" } solana-zk-token-proof-program = { path = "../programs/zk-token-proof", version = "=1.14.24" } solana-zk-token-sdk = { path = "../zk-token-sdk", version = "=1.14.24" } +solana-merkle-tree = {path = "../merkle-tree",version = "=1.14.24"} solana-receipt-tree = { path = "../receipt-tree", version = "=1.14.24" } strum = { version = "0.24", features = ["derive"] } strum_macros = "0.24" diff --git a/runtime/src/bank.rs b/runtime/src/bank.rs index d9c3d50cc389ea..31c3738614a28c 100644 --- a/runtime/src/bank.rs +++ b/runtime/src/bank.rs @@ -33,6 +33,9 @@ //! It offers a high-level API that signs transactions //! on behalf of the caller, and a low-level API for when they have //! already been signed and verified. +use std::{borrow::BorrowMut, ops::DerefMut}; + +use rayon::slice::ParallelSliceMut; #[allow(deprecated)] use solana_sdk::recent_blockhashes_account; pub use solana_sdk::reward_type::RewardType; @@ -90,7 +93,7 @@ use { sysvar_cache::SysvarCache, timings::{ExecuteTimingType, ExecuteTimings}, }, - solana_receipt_tree::{fd_bmtree32_commit_append, fd_bmtree32_node, hash_leaf, ReceiptTree}, + // solana_receipt_tree::{fd_bmtree32_commit_append, fd_bmtree32_node, hash_leaf, ReceiptTree}, solana_sdk::{ account::{ create_account_shared_data_with_fields as create_account, from_account, Account, @@ -145,6 +148,7 @@ use { TransactionReturnData, }, }, + solana_merkle_tree::MerkleTree, solana_stake_program::stake_state::{ self, InflationPointCalculationEvent, PointValue, StakeState, }, @@ -355,11 +359,12 @@ impl BankRc { } pub type TransactionCheckResult = (Result<()>, Option); - +#[derive(Debug,Clone)] pub struct TransactionResults { pub fee_collection_results: Vec>, pub execution_results: Vec, pub rent_debits: Vec, + pub receipts: Vec<(Hash, Hash)> } #[derive(Debug, Clone)] @@ -838,7 +843,8 @@ impl PartialEq for Bank { fee_structure: _, incremental_snapshot_persistence: _, // receipt_tree: _, - transaction_indexes: _, + receipt_queue: _, + transaction_message_hashes: _, // Ignore new fields explicitly if they do not impact PartialEq. // Adding ".." will remove compile-time checks that if a new field // is added to the struct, this ParitalEq is accordingly updated. @@ -1096,8 +1102,11 @@ pub struct Bank { // pub receipt_tree: Arc>>, - /// entryid, number of txns - pub transaction_indexes: Arc>>, + /// message_hashs + pub transaction_message_hashes: Arc>>, + + /// message_hash, receipt + pub receipt_queue: Arc>> } struct VoteWithStakeDelegations { @@ -1287,7 +1296,8 @@ impl Bank { accounts_data_size_delta_off_chain: AtomicI64::new(0), fee_structure: FeeStructure::default(), // receipt_tree: Arc::new(RwLock::new(im::HashMap::new())), - transaction_indexes: Arc::new(RwLock::new(Vec::new())), + receipt_queue: Arc::new(RwLock::new(Vec::new())), + transaction_message_hashes: Arc::new(RwLock::new(Vec::new())), }; let accounts_data_size_initial = bank.get_total_accounts_stats().unwrap().data_len as u64; @@ -1615,7 +1625,8 @@ impl Bank { accounts_data_size_delta_off_chain: AtomicI64::new(0), fee_structure: parent.fee_structure.clone(), // receipt_tree: Arc::new(RwLock::new(im::HashMap::new())), - transaction_indexes: Arc::new(RwLock::new(Vec::new())), + receipt_queue: Arc::new(RwLock::new(Vec::new())), + transaction_message_hashes: Arc::new(RwLock::new(Vec::new())), }; let (_, ancestors_time) = measure!( @@ -1960,7 +1971,8 @@ impl Bank { accounts_data_size_delta_off_chain: AtomicI64::new(0), fee_structure: FeeStructure::default(), // receipt_tree: Arc::new(RwLock::new(im::HashMap::new())), - transaction_indexes: Arc::new(RwLock::new(Vec::new())), + receipt_queue: Arc::new(RwLock::new(Vec::new())), + transaction_message_hashes: Arc::new(RwLock::new(Vec::new())), }; bank.finish_init( genesis_config, @@ -4279,7 +4291,8 @@ impl Bank { // info!("lock poisoned"); // }; // } - +// let mesdsagh_hash = tx.message_hash() + // let receipt_hash = hashv(message_hash,status) TransactionExecutionResult::Executed { details: TransactionExecutionDetails { status, @@ -4422,7 +4435,7 @@ impl Bank { } compute_budget }; - + self.execute_loaded_transaction( tx, loaded_transaction, @@ -4812,6 +4825,7 @@ impl Bank { sanitized_txs: &[SanitizedTransaction], loaded_txs: &mut [TransactionLoadResult], execution_results: Vec, + receipts: Vec<(Hash,Hash)>, last_blockhash: Hash, lamports_per_signature: u64, counts: CommitTransactionCounts, @@ -4928,6 +4942,7 @@ impl Bank { fee_collection_results, execution_results, rent_debits, + receipts } } @@ -6051,7 +6066,7 @@ impl Bank { } else { vec![] }; - + let msg_hashes: Vec = batch.sanitized_transactions().iter().map(|txn| *txn.message_hash()).collect(); let LoadAndExecuteTransactionsOutput { mut loaded_transactions, execution_results, @@ -6069,13 +6084,19 @@ impl Bank { None, log_messages_bytes_limit, ); - + let statuses: Vec = execution_results.iter().map(|result| result.was_executed_successfully()).collect(); + let receipts: Vec<(Hash,Hash)> = msg_hashes.into_iter().zip(statuses).map(|rec_data| { + let status_code: u8 = if rec_data.1 {1}else {0}; + let hashed = hashv(&[rec_data.0.as_ref(),status_code.to_be_bytes().as_ref()]); + (rec_data.0,hashed) + }).collect(); let (last_blockhash, lamports_per_signature) = self.last_blockhash_and_lamports_per_signature(); let results = self.commit_transactions( batch.sanitized_transactions(), &mut loaded_transactions, execution_results, + receipts, last_blockhash, lamports_per_signature, CommitTransactionCounts { @@ -6087,6 +6108,7 @@ impl Bank { }, timings, ); + // bank.receipt_hash_batch_queue.push(results.execution_results.filter(receipt_hash, signature)) let post_balances = if collect_balances { self.collect_balances(batch) } else { @@ -6653,27 +6675,19 @@ impl Bank { let mut signature_count_buf = [0u8; 8]; LittleEndian::write_u64(&mut signature_count_buf[..], self.signature_count() as u64); let mut receipt_root = [0u8; 32]; - // if let Ok(mut receipt_tree) = self.receipt_tree.lock() { - // receipt_root = receipt_tree.get().unwrap().to_bytes(); - // } - // if let Ok(hashed_txs) = self.receipt_tree.read() { - // let mut state = ReceiptTree::new(); - // info!( - // "hashed_txs: {:?}", - // hashed_txs.keys().zip(hashed_txs.values()).collect_vec() - // ); - // let leaves = hashed_txs - // .keys() - // .zip(hashed_txs.values()) - // .sorted_by(|a, b| a.0.cmp(b.0)) - // .map(|hash| hash.1.to_bytes()) - // .collect::>(); - // info!("leaves: {:?}", leaves); - // if leaves.len() > 0 { - // state.append_leaves_raw(&leaves); - // receipt_root = state.get_root_mutable().unwrap().to_bytes(); - // } - // } + + if let Ok(mut r) = self.receipt_queue.read() { + let mut hashes= r.deref().clone(); + hashes.par_sort_unstable_by(|a,b| a.0.as_ref().cmp(b.0.as_ref())); + let receipt_hashes: Vec = hashes.par_iter().map(|item| item.1).collect(); + let mt = MerkleTree::new_with_leaves(receipt_hashes.clone()); + info!("merkle_tree_leaves: {:?} {:?} {:?} {:?}", receipt_hashes,accounts_delta_hash,signature_count_buf,self.signature_count()); + if let Some(root) = mt.get_root(){ + receipt_root = root.to_bytes(); + } + } + + info!("receipt root: {:?}", receipt_root); let mut hash = hashv(&[ self.parent_hash.as_ref(), accounts_delta_hash.hash.as_ref(), @@ -6804,9 +6818,21 @@ impl Bank { result } } - pub fn set_block_signatures(&self, block_signatures: Vec) { - if let Ok(mut transaction_indexes) = self.transaction_indexes.write() { - *transaction_indexes = block_signatures; + pub fn set_transaction_message_hashes(&self, transaction_message_hashes: Vec) { + if let Ok(mut txn_indexes) = self.transaction_message_hashes.write(){ + *txn_indexes = transaction_message_hashes; + } + } + + pub fn append_receipts(&self, multi_batch_receipts: Vec>){ + if let Ok(mut receipt_queue) = self.receipt_queue.write(){ + let mut temp_rec_queue = vec![]; + for mut batch in multi_batch_receipts{ + temp_rec_queue.append(&mut batch); + } + // temp_rec_queue.append(&mut receipt_tuples.clone()); + receipt_queue.clear(); + receipt_queue.append(&mut temp_rec_queue); } } /// Specify that initial verification has completed. From 32859f755dd4b7f882da9327f96fff7b42011b87 Mon Sep 17 00:00:00 2001 From: anoushk1234 Date: Thu, 19 Oct 2023 16:19:00 +0530 Subject: [PATCH 463/465] debug --- ledger/src/blockstore_processor.rs | 3 ++- runtime/src/bank.rs | 8 ++++++-- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/ledger/src/blockstore_processor.rs b/ledger/src/blockstore_processor.rs index 4e50ad04f5f043..9c61548eb1b0c2 100644 --- a/ledger/src/blockstore_processor.rs +++ b/ledger/src/blockstore_processor.rs @@ -289,9 +289,10 @@ fn execute_batches_internal( execute_batches_elapsed.stop(); let receipts: Vec> = results.clone().into_iter().filter(|res| res.is_ok()).map(|res| res.unwrap()).collect(); - bank.append_receipts(receipts.clone()); info!("chk1 done_executing batches {:?}", batches.len()); info!("chk1 append_receipts: {:?} results {:?}",receipts, results); + bank.append_receipts(receipts.clone()); + first_err(&results)?; // let first_err = {for r in results{ // if r.is_err(){ diff --git a/runtime/src/bank.rs b/runtime/src/bank.rs index 31c3738614a28c..385c2ef49c7fd3 100644 --- a/runtime/src/bank.rs +++ b/runtime/src/bank.rs @@ -6681,10 +6681,13 @@ impl Bank { hashes.par_sort_unstable_by(|a,b| a.0.as_ref().cmp(b.0.as_ref())); let receipt_hashes: Vec = hashes.par_iter().map(|item| item.1).collect(); let mt = MerkleTree::new_with_leaves(receipt_hashes.clone()); - info!("merkle_tree_leaves: {:?} {:?} {:?} {:?}", receipt_hashes,accounts_delta_hash,signature_count_buf,self.signature_count()); + info!("chk1 merkle_tree_leaves: {:?} {:?} {:?} {:?}", receipt_hashes,signature_count_buf,self.signature_count(),hashes); if let Some(root) = mt.get_root(){ receipt_root = root.to_bytes(); } + if hashes.len() > 0 { + hashes.clear(); + } } info!("receipt root: {:?}", receipt_root); @@ -6826,12 +6829,13 @@ impl Bank { pub fn append_receipts(&self, multi_batch_receipts: Vec>){ if let Ok(mut receipt_queue) = self.receipt_queue.write(){ + // receipt_queue.clear(); let mut temp_rec_queue = vec![]; for mut batch in multi_batch_receipts{ temp_rec_queue.append(&mut batch); } // temp_rec_queue.append(&mut receipt_tuples.clone()); - receipt_queue.clear(); + receipt_queue.append(&mut temp_rec_queue); } } From 0d8a655fd56d72fad9a14a20b52eb1f3ea6dc8b0 Mon Sep 17 00:00:00 2001 From: anoushk1234 Date: Tue, 14 Nov 2023 15:26:14 +0530 Subject: [PATCH 464/465] logs and clear queue --- core/src/validator.rs | 4 +++- ledger/src/blockstore_processor.rs | 8 ++++++-- runtime/src/bank.rs | 9 ++++++--- 3 files changed, 15 insertions(+), 6 deletions(-) diff --git a/core/src/validator.rs b/core/src/validator.rs index f2bdc04a56519a..8a153955e50496 100644 --- a/core/src/validator.rs +++ b/core/src/validator.rs @@ -401,7 +401,7 @@ impl Validator { ) -> Self { let id = identity_keypair.pubkey(); assert_eq!(id, node.info.id); - + error!("chk1 enters validator"); warn!("identity: {}", id); warn!("vote account: {}", vote_account); @@ -690,6 +690,7 @@ impl Validator { }; let leader_schedule_cache = Arc::new(leader_schedule_cache); + info!("chk1 creates_process_blockstore"); let mut process_blockstore = ProcessBlockStore::new( &id, vote_account, @@ -715,6 +716,7 @@ impl Validator { ); if config.process_ledger_before_services { + info!("chk1 runs_process_blockstore"); process_blockstore.process(); } *start_progress.write().unwrap() = ValidatorStartProgress::StartingServices; diff --git a/ledger/src/blockstore_processor.rs b/ledger/src/blockstore_processor.rs index 9c61548eb1b0c2..fa8391ce5c1f77 100644 --- a/ledger/src/blockstore_processor.rs +++ b/ledger/src/blockstore_processor.rs @@ -500,6 +500,7 @@ fn process_entries_with_callback( // }).flatten() // .map(|tx| *tx.signature()) // .collect::>(); + info!("chk1 starts replay"); let transaction_message_hashes: Vec = entries.iter().filter_map(|e| match &e.entry { EntryType::Transactions(txns) => Some(txns), _ => None @@ -904,7 +905,7 @@ fn confirm_full_slot( let mut confirmation_timing = ConfirmationTiming::default(); let skip_verification = !opts.poh_verify; let _ignored_prioritization_fee_cache = PrioritizationFeeCache::new(0u64); - + info!("chk1 confirm_slot"); confirm_slot( blockstore, bank, @@ -1061,7 +1062,7 @@ pub fn confirm_slot( } load_result }?; - + info!("chk1 confirm_slot_entries"); confirm_slot_entries( bank, slot_entries_load_result, @@ -1180,6 +1181,7 @@ fn confirm_slot_entries( }) .collect(); // Note: This will shuffle entries' transactions in-place. + info!("chk1 process_entries_with_callback"); let process_result = process_entries_with_callback( bank, &mut replay_entries, @@ -1385,6 +1387,7 @@ fn load_frozen_forks( let mut progress = ConfirmationProgress::new(last_entry_hash); let bank = bank_forks.write().unwrap().insert(bank); + info!("chk1 process single slot"); if process_single_slot( blockstore, &bank, @@ -1598,6 +1601,7 @@ fn process_single_slot( ) -> result::Result<(), BlockstoreProcessorError> { // Mark corrupt slots as dead so validators don't replay this slot and // see AlreadyProcessed errors later in ReplayStage + info!("chk1 confirm full slot"); confirm_full_slot( blockstore, bank, diff --git a/runtime/src/bank.rs b/runtime/src/bank.rs index 385c2ef49c7fd3..b8b13c7e408961 100644 --- a/runtime/src/bank.rs +++ b/runtime/src/bank.rs @@ -6676,7 +6676,7 @@ impl Bank { LittleEndian::write_u64(&mut signature_count_buf[..], self.signature_count() as u64); let mut receipt_root = [0u8; 32]; - if let Ok(mut r) = self.receipt_queue.read() { + if let Ok(mut r) = self.receipt_queue.try_read() { let mut hashes= r.deref().clone(); hashes.par_sort_unstable_by(|a,b| a.0.as_ref().cmp(b.0.as_ref())); let receipt_hashes: Vec = hashes.par_iter().map(|item| item.1).collect(); @@ -6687,10 +6687,13 @@ impl Bank { } if hashes.len() > 0 { hashes.clear(); + } } - - info!("receipt root: {:?}", receipt_root); + if let Ok(mut write_q) = self.receipt_queue.write(){ + write_q.clear(); + } + info!("change_ receipt root: {:?}", receipt_root); let mut hash = hashv(&[ self.parent_hash.as_ref(), accounts_delta_hash.hash.as_ref(), From f4e1ed328bda5142b799125ba45785408978b1d6 Mon Sep 17 00:00:00 2001 From: Anoushk Kharangate Date: Wed, 15 Nov 2023 17:47:41 +0000 Subject: [PATCH 465/465] add length ext prefix --- ledger/src/blockstore_processor.rs | 60 ++++++++------- runtime/Cargo.toml | 2 +- runtime/src/bank.rs | 117 +++++++++++++++++------------ 3 files changed, 100 insertions(+), 79 deletions(-) diff --git a/ledger/src/blockstore_processor.rs b/ledger/src/blockstore_processor.rs index fa8391ce5c1f77..309f96a59d003b 100644 --- a/ledger/src/blockstore_processor.rs +++ b/ledger/src/blockstore_processor.rs @@ -1,5 +1,3 @@ - - use { crate::{ block_error::BlockError, blockstore::Blockstore, blockstore_db::BlockstoreError, @@ -87,7 +85,7 @@ lazy_static! { fn first_err(results: &[Result]) -> Result { for r in results { - if let Err(e) = r{ + if let Err(e) = r { return Err(e.clone()); } } @@ -98,13 +96,13 @@ fn first_err(results: &[Result]) -> Result { fn get_first_error( batch: &TransactionBatch, fee_collection_results: Vec>, - receipts: Vec<(Hash,Hash)> -) -> Option<(Result>, Signature)> { + receipts: Vec<(Hash, Hash)>, +) -> Option<(Result>, Signature)> { let mut first_err = None; for (result, transaction) in fee_collection_results .iter() .zip(batch.sanitized_transactions()) - // .map(|(res,t| Ok()); + // .map(|(res,t| Ok()); { if let Err(ref err) = result { if first_err.is_none() { @@ -134,7 +132,7 @@ fn execute_batch( replay_vote_sender: Option<&ReplayVoteSender>, timings: &mut ExecuteTimings, log_messages_bytes_limit: Option, -) -> Result> { +) -> Result> { // info!("chk1 enters execute_batch"); let TransactionBatchWithIndexes { batch, @@ -199,13 +197,12 @@ fn execute_batch( ); } - let first_err = get_first_error(batch, fee_collection_results,receipts.clone()); + let first_err = get_first_error(batch, fee_collection_results, receipts.clone()); // ExecuteBatchResult{ - // result: - first_err.map(|(result, _)| result).unwrap_or(Ok(receipts)) + // result: + first_err.map(|(result, _)| result).unwrap_or(Ok(receipts)) // ,receipts, // } - } // #[derive(Default)] @@ -235,14 +232,14 @@ fn execute_batches_internal( let mut execute_batches_elapsed = Measure::start("execute_batches_elapsed"); info!("chk1 enters execute_batches_internal"); - let results: Vec>> = PAR_THREAD_POOL.install(|| { + let results: Vec>> = PAR_THREAD_POOL.install(|| { batches .into_par_iter() .map(|transaction_batch| { let transaction_count = transaction_batch.batch.sanitized_transactions().len() as u64; let mut timings = ExecuteTimings::default(); - let (result, execute_batches_time): (Result>, Measure) = measure!( + let (result, execute_batches_time): (Result>, Measure) = measure!( { let result = execute_batch( transaction_batch, @@ -288,11 +285,16 @@ fn execute_batches_internal( }); execute_batches_elapsed.stop(); - let receipts: Vec> = results.clone().into_iter().filter(|res| res.is_ok()).map(|res| res.unwrap()).collect(); - info!("chk1 done_executing batches {:?}", batches.len()); - info!("chk1 append_receipts: {:?} results {:?}",receipts, results); + let receipts: Vec> = results + .clone() + .into_iter() + .filter(|res| res.is_ok()) + .map(|res| res.unwrap()) + .collect(); + info!("#64 done_executing batches {:?}", batches.len()); + info!("#64 append_receipts: {:?} results {:?}", receipts, results); bank.append_receipts(receipts.clone()); - + first_err(&results)?; // let first_err = {for r in results{ // if r.is_err(){ @@ -300,7 +302,7 @@ fn execute_batches_internal( // } // Ok(()) // } -// }; + // }; Ok(ExecuteBatchesInternalMetrics { execution_timings_per_thread: execution_timings_per_thread.into_inner().unwrap(), @@ -406,7 +408,7 @@ fn execute_batches( } else { batches }; - + let execute_batches_internal_metrics = execute_batches_internal( bank, rebatched_txs, @@ -501,12 +503,15 @@ fn process_entries_with_callback( // .map(|tx| *tx.signature()) // .collect::>(); info!("chk1 starts replay"); - let transaction_message_hashes: Vec = entries.iter().filter_map(|e| match &e.entry { - EntryType::Transactions(txns) => Some(txns), - _ => None - }) - .flatten() - .map(|txn| *txn.message_hash()).collect(); + let transaction_message_hashes: Vec = entries + .iter() + .filter_map(|e| match &e.entry { + EntryType::Transactions(txns) => Some(txns), + _ => None, + }) + .flatten() + .map(|txn| *txn.message_hash()) + .collect(); bank.set_transaction_message_hashes(transaction_message_hashes); for ReplayEntry { entry, @@ -531,7 +536,6 @@ fn process_entries_with_callback( confirmation_timing, &cost_model, log_messages_bytes_limit, - )?; // info!("chk1 batches after: {:?}",batches.len()); batches.clear(); @@ -601,7 +605,6 @@ fn process_entries_with_callback( confirmation_timing, &cost_model, log_messages_bytes_limit, - )?; batches.clear(); } @@ -618,7 +621,6 @@ fn process_entries_with_callback( confirmation_timing, &cost_model, log_messages_bytes_limit, - )?; for hash in tick_hashes { bank.register_tick(hash); @@ -3727,7 +3729,7 @@ pub mod tests { &mut ExecuteTimings::default(), None, ); - let (err, signature) = get_first_error(&batch, fee_collection_results,receipts).unwrap(); + let (err, signature) = get_first_error(&batch, fee_collection_results, receipts).unwrap(); assert_eq!(err.unwrap_err(), TransactionError::AccountNotFound); assert_eq!(signature, account_not_found_sig); } diff --git a/runtime/Cargo.toml b/runtime/Cargo.toml index 4d3e37d6cd23b2..7fcfff4634986f 100644 --- a/runtime/Cargo.toml +++ b/runtime/Cargo.toml @@ -56,7 +56,7 @@ solana-vote-program = { path = "../programs/vote", version = "=1.14.24" } solana-zk-token-proof-program = { path = "../programs/zk-token-proof", version = "=1.14.24" } solana-zk-token-sdk = { path = "../zk-token-sdk", version = "=1.14.24" } solana-merkle-tree = {path = "../merkle-tree",version = "=1.14.24"} -solana-receipt-tree = { path = "../receipt-tree", version = "=1.14.24" } +# solana-receipt-tree = { path = "../receipt-tree", version = "=1.14.24" } strum = { version = "0.24", features = ["derive"] } strum_macros = "0.24" symlink = "0.1.0" diff --git a/runtime/src/bank.rs b/runtime/src/bank.rs index b8b13c7e408961..8bfd037012ddd7 100644 --- a/runtime/src/bank.rs +++ b/runtime/src/bank.rs @@ -33,9 +33,6 @@ //! It offers a high-level API that signs transactions //! on behalf of the caller, and a low-level API for when they have //! already been signed and verified. -use std::{borrow::BorrowMut, ops::DerefMut}; - -use rayon::slice::ParallelSliceMut; #[allow(deprecated)] use solana_sdk::recent_blockhashes_account; pub use solana_sdk::reward_type::RewardType; @@ -83,6 +80,7 @@ use { ThreadPool, ThreadPoolBuilder, }, solana_measure::{measure, measure::Measure}, + solana_merkle_tree::MerkleTree, solana_metrics::{inc_new_counter_debug, inc_new_counter_info}, solana_program_runtime::{ accounts_data_meter::MAX_ACCOUNTS_DATA_LEN, @@ -148,7 +146,6 @@ use { TransactionReturnData, }, }, - solana_merkle_tree::MerkleTree, solana_stake_program::stake_state::{ self, InflationPointCalculationEvent, PointValue, StakeState, }, @@ -173,6 +170,10 @@ use { time::{Duration, Instant}, }, }; +use { + rayon::slice::ParallelSliceMut, + std::{borrow::BorrowMut, ops::DerefMut}, +}; /// params to `verify_bank_hash` pub struct VerifyBankHash { @@ -359,12 +360,12 @@ impl BankRc { } pub type TransactionCheckResult = (Result<()>, Option); -#[derive(Debug,Clone)] +#[derive(Debug, Clone)] pub struct TransactionResults { pub fee_collection_results: Vec>, pub execution_results: Vec, pub rent_debits: Vec, - pub receipts: Vec<(Hash, Hash)> + pub receipts: Vec<(Hash, Hash)>, } #[derive(Debug, Clone)] @@ -1101,12 +1102,11 @@ pub struct Bank { pub incremental_snapshot_persistence: Option, // pub receipt_tree: Arc>>, - /// message_hashs pub transaction_message_hashes: Arc>>, /// message_hash, receipt - pub receipt_queue: Arc>> + pub receipt_queue: Arc>>, } struct VoteWithStakeDelegations { @@ -1297,7 +1297,7 @@ impl Bank { fee_structure: FeeStructure::default(), // receipt_tree: Arc::new(RwLock::new(im::HashMap::new())), receipt_queue: Arc::new(RwLock::new(Vec::new())), - transaction_message_hashes: Arc::new(RwLock::new(Vec::new())), + transaction_message_hashes: Arc::new(RwLock::new(Vec::new())), }; let accounts_data_size_initial = bank.get_total_accounts_stats().unwrap().data_len as u64; @@ -1626,7 +1626,7 @@ impl Bank { fee_structure: parent.fee_structure.clone(), // receipt_tree: Arc::new(RwLock::new(im::HashMap::new())), receipt_queue: Arc::new(RwLock::new(Vec::new())), - transaction_message_hashes: Arc::new(RwLock::new(Vec::new())), + transaction_message_hashes: Arc::new(RwLock::new(Vec::new())), }; let (_, ancestors_time) = measure!( @@ -1972,7 +1972,7 @@ impl Bank { fee_structure: FeeStructure::default(), // receipt_tree: Arc::new(RwLock::new(im::HashMap::new())), receipt_queue: Arc::new(RwLock::new(Vec::new())), - transaction_message_hashes: Arc::new(RwLock::new(Vec::new())), + transaction_message_hashes: Arc::new(RwLock::new(Vec::new())), }; bank.finish_init( genesis_config, @@ -4291,8 +4291,8 @@ impl Bank { // info!("lock poisoned"); // }; // } -// let mesdsagh_hash = tx.message_hash() - // let receipt_hash = hashv(message_hash,status) + // let mesdsagh_hash = tx.message_hash() + // let receipt_hash = hashv(message_hash,status) TransactionExecutionResult::Executed { details: TransactionExecutionDetails { status, @@ -4435,7 +4435,7 @@ impl Bank { } compute_budget }; - + self.execute_loaded_transaction( tx, loaded_transaction, @@ -4825,7 +4825,7 @@ impl Bank { sanitized_txs: &[SanitizedTransaction], loaded_txs: &mut [TransactionLoadResult], execution_results: Vec, - receipts: Vec<(Hash,Hash)>, + receipts: Vec<(Hash, Hash)>, last_blockhash: Hash, lamports_per_signature: u64, counts: CommitTransactionCounts, @@ -4942,7 +4942,7 @@ impl Bank { fee_collection_results, execution_results, rent_debits, - receipts + receipts, } } @@ -6066,7 +6066,11 @@ impl Bank { } else { vec![] }; - let msg_hashes: Vec = batch.sanitized_transactions().iter().map(|txn| *txn.message_hash()).collect(); + let msg_hashes: Vec = batch + .sanitized_transactions() + .iter() + .map(|txn| *txn.message_hash()) + .collect(); let LoadAndExecuteTransactionsOutput { mut loaded_transactions, execution_results, @@ -6084,12 +6088,19 @@ impl Bank { None, log_messages_bytes_limit, ); - let statuses: Vec = execution_results.iter().map(|result| result.was_executed_successfully()).collect(); - let receipts: Vec<(Hash,Hash)> = msg_hashes.into_iter().zip(statuses).map(|rec_data| { - let status_code: u8 = if rec_data.1 {1}else {0}; - let hashed = hashv(&[rec_data.0.as_ref(),status_code.to_be_bytes().as_ref()]); - (rec_data.0,hashed) - }).collect(); + let statuses: Vec = execution_results + .iter() + .map(|result| result.was_executed_successfully()) + .collect(); + let receipts: Vec<(Hash, Hash)> = msg_hashes + .into_iter() + .zip(statuses) + .map(|rec_data| { + let status_code: u8 = if rec_data.1 { 1 } else { 0 }; + let hashed = hashv(&[rec_data.0.as_ref(), status_code.to_be_bytes().as_ref()]); + (rec_data.0, hashed) + }) + .collect(); let (last_blockhash, lamports_per_signature) = self.last_blockhash_and_lamports_per_signature(); let results = self.commit_transactions( @@ -6674,26 +6685,31 @@ impl Bank { .bank_hash_info_at(self.slot(), &self.rewrites_skipped_this_slot); let mut signature_count_buf = [0u8; 8]; LittleEndian::write_u64(&mut signature_count_buf[..], self.signature_count() as u64); - let mut receipt_root = [0u8; 32]; - - if let Ok(mut r) = self.receipt_queue.try_read() { - let mut hashes= r.deref().clone(); - hashes.par_sort_unstable_by(|a,b| a.0.as_ref().cmp(b.0.as_ref())); + let mut receipt_root = hashv(&[ + (0x80 as u8).to_le_bytes().as_slice(), + &[0u8; 32], + u64::to_le_bytes(0).as_slice(), + ]) + .to_bytes(); + + if let Ok(mut r) = self.receipt_queue.read() { + let mut hashes = r.deref().clone(); + hashes.par_sort_unstable_by(|a, b| a.0.as_ref().cmp(b.0.as_ref())); let receipt_hashes: Vec = hashes.par_iter().map(|item| item.1).collect(); - let mt = MerkleTree::new_with_leaves(receipt_hashes.clone()); - info!("chk1 merkle_tree_leaves: {:?} {:?} {:?} {:?}", receipt_hashes,signature_count_buf,self.signature_count(),hashes); - if let Some(root) = mt.get_root(){ - receipt_root = root.to_bytes(); - } - if hashes.len() > 0 { - hashes.clear(); - - } - } - if let Ok(mut write_q) = self.receipt_queue.write(){ + let mt = MerkleTree::new_with_leaves(receipt_hashes.clone()); + if let Some(root) = mt.get_root() { + receipt_root = root.to_bytes(); + } + info!("#64 parent_bank_hash: {:?} accounts_delta_hash: {:?} signature_count_buf: {:?} last_blockhash: {:?}",self.parent_hash().as_ref(),accounts_delta_hash.hash.as_ref(),signature_count_buf,self.last_blockhash().as_ref()); + if hashes.len() > 0 { + hashes.clear(); + } + } + if let Ok(mut write_q) = self.receipt_queue.write() { + info!("#64 has cleared queue: {:?}", write_q.len()); write_q.clear(); } - info!("change_ receipt root: {:?}", receipt_root); + info!("#64 receipt root: {:?}", receipt_root); let mut hash = hashv(&[ self.parent_hash.as_ref(), accounts_delta_hash.hash.as_ref(), @@ -6701,7 +6717,7 @@ impl Bank { self.last_blockhash().as_ref(), receipt_root.as_ref(), ]); - + info!("#64 bankhash: {:?}", hash); let buf = self .hard_forks .read() @@ -6825,20 +6841,20 @@ impl Bank { } } pub fn set_transaction_message_hashes(&self, transaction_message_hashes: Vec) { - if let Ok(mut txn_indexes) = self.transaction_message_hashes.write(){ + if let Ok(mut txn_indexes) = self.transaction_message_hashes.write() { *txn_indexes = transaction_message_hashes; } } - pub fn append_receipts(&self, multi_batch_receipts: Vec>){ - if let Ok(mut receipt_queue) = self.receipt_queue.write(){ + pub fn append_receipts(&self, multi_batch_receipts: Vec>) { + if let Ok(mut receipt_queue) = self.receipt_queue.write() { // receipt_queue.clear(); let mut temp_rec_queue = vec![]; - for mut batch in multi_batch_receipts{ - temp_rec_queue.append(&mut batch); - } + for mut batch in multi_batch_receipts { + temp_rec_queue.append(&mut batch); + } // temp_rec_queue.append(&mut receipt_tuples.clone()); - + receipt_queue.append(&mut temp_rec_queue); } } @@ -7910,7 +7926,10 @@ impl Drop for Bank { /// utility function used for testing and benchmarking. pub mod test_utils { - use {super::Bank, solana_sdk::hash::hashv}; + use { + super::Bank, + solana_sdk::hash::{hash, hashv}, + }; pub fn goto_end_of_slot(bank: &mut Bank) { let mut tick_hash = bank.last_blockhash(); loop {
  • r1`wRl~8x#~RAH3YH7rK?bc4D~AJYeX|E{2pl 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 T_zB1^5Xc*8C8^R^#)1C_A5iV{ literal 0 HcmV?d00001 diff --git a/docs/static/img/quickstarts/solana-get-started-successful-build.png b/docs/static/img/quickstarts/solana-get-started-successful-build.png new file mode 100644 index 0000000000000000000000000000000000000000..82b0a5df054930df70956c1ba91803c5d3d0252d GIT binary patch literal 146124 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%0D*JTCwvZs>ye6QkucL z%K#@4$8Z(BUEkF7hb|j!D`?wVrmm;C-66NRt`Wq4#K zVghKQ=@eh_c%X^u$!%`;LxJKVPjd?(0lpw!v>n}{^<5}g4gZc|Ij(h_g88#lqMdDj zW?CsRU1v-YJcreu8}U%;G=os-6ZQ>tPjAtGf~k>7S~|4UWdL^kkNh)b8dd&64Q2ba zu12e|T91o2oE5gz51KPQbjtNE4`><{yA)>{S2hRb2LkcYjg84##mX;48pU8*M%!p@ zogJDNcp2Njl zZUh{Zot~bXOZybsTjQa8F~(*Cs&`S&$!S*k`lqOkPY)ifjOM3a@qtiOHQiwTtT%@4 z`w{Lqly!~|bkFDHqoeI-Bw5q%E1bJJX%FZ7>trxG zHn^Q2wSSU|cv0bEw)6^lQ`QdvuVueR2K!U)_%%)!LaMW?wr7e^kwN&=r@zVcGjCZv z66P(RQuw0wmVbtZvVIE1f$-lCn*r$NwwKD`PyK944o9DY>Eket1ijAyKf0b(io464-veHKuy`JX&W69@cNv8sWCAm0o!~HJp&A z^^nKc;Q05V+2TGIi;a@12OR(^ogpD3d;q=~juqECB-`j(iy9lnG$B>k$bTw8k#FUlPuO^C=2@oH-gIO)B#rDj>{z)}? z_$-sGkpcL0Cvc_io~|`FQiUdZW8Vj)G>Wz?@yXq4fa||Mf5I#!6%w_`<+3}Ci-xx9 zxoOz#U1B%Fxf7)8$N%}nFz~nc-R4Y_tH3U=2w-Z4EAQmufBP2{U{={`qk=++fcLsR&TLPM1zJaXUG)Wt#f|>O~L60}SM7 z@tNWNbvzT<1_A#5@m!3uoePa0=#EwZDN&0t2x#_b1m5C%SGaN$`beE6XD6rOYFSmO zgpaSPs@QOtEr>Vi)CyzD;usBK&(F_~ZyZ0~qT`1zFQboI@A=Mr+vxKV1eJ%urJop| z&;CPqyg$o?3aypW$YoVEeOMyCNPXX?&deJpn` zM>y`OIRvaEhT~?@&$~v~gV_&L8xc!qj;HJLAp43K8NL1#p8R3#dtXn_OK4Oj&rXb# ziIDA2pCG0*yA>WkgyVBOOD&Iu1Wkz(Q3=o6{kIo@Bc0E{aJ9sKOa{_IwvgOWd&DVm5_J?5cdpuY8AwP)|?bbOC}dyZYDeX(!x>6^R8R(Za<-JPZ5Bk zbLL{BDmd8c1XXbT|F=#I>tH=}aU*DqfPK+hZm z=%W2OUtycOi{cGA0bA7dn}lx_kQfZ0)9p{Lme_Dt z4&?DfGuYUb9`#kv37l`-`q|I+w|P%Q@3#9sB{hFpt&I?JyfbE6+mf?>K_Wz%w)ELv zt->u?*IEV?U_JJs6hpbY&`1wZ%0E!S0t5Eh% zt;ryxzulMro_`YnVmQcnk6OF@Tznjk{!Os15o{{N4&cV50k@ATrGo0_3%~n2C7&Yk z25>MjDa(019z0H`CabJF#>7&2T-8^i9JyQ{sJ(wKRux(?kWf>rA9_&4`)G`SRiY<4 zEa)vxyb^;`WzG(djhV^(o}mX=tBMMi{*-c*zkfN3=`QI!&s6Y(9P9^Cbn5HtiK(dI z{f-2|vg&A5YpBJwwh7|5s9yDxJac~N(ymnpkaV@gMcafyTziU4dD8pEix)tKu9x~u zOhGmVCg9;^J?Qc|=r#n&Px`Gyf< zUv=3IgbfTXo6r2my@U4`T-9t?l==BzvOUloLiCJ`f-ICbnz2PiPk8n#_gt|iLxD=j z-~4De0xlu`;3%V1x_w6f-rZ`}-bVIw-zQ#__bN8<#3>%oH1A+u(Hmz^{^0`**tAi# zO_HB}NWcb4C;A}jqm|37=g@)_mPy83eScXGy~?_Z(sqVZfkJJa&Wk!$*+0(qbZtHy}oXg)qK?u!qh)>14yaQ)wYYR z-CLwFh1VkByF*^Q_|7CrGLf6tAbtGkoqPWDtIAPKZ1aZj?OO_KxY?P%vQK}^1^xIn z!sqL}b)l;@R2cAMJ=TGkRN-5zY`PT?hcm1-?e$ETcyFk+Aj_j!me0{1Kd-uU4lA@u zI{>V-ytx?y`0^y~EVs~nzQ=1k(un5+2|j_ZD1!T}kEW`*z6z2Q=`>PIeU6+?#pu|Z z%PD9x-zB$X07%a^z%uG*6Mmj$R3$ z*FT|j|A_`&@1(%5KO;saCizYS!pibhYzvxCu0dgM*sCZSYaJb)n&_*nm%<}+2K#u# zX#U8g)P4583ln?NZj9k@I2t#fvHs=TB#|9XD+N$bzCU@cvA#ZhQHO*N zu$PPGbtbJ$3U|0U^Bcp-ePajoVRCZw#Q1o?Qp=k2R){z_l#NpR6Pb(`!1_U4Tsq67 zxBe=2I?vU+wvN`V_Enw$Eh5V~yZA^kp!CV;e?k-jA6@9TPy>8RMbWHlON0seT z1b&WGe=&fr{V9zo)YQ}^<>j4#F_O>lFm~D}KBTI4p5p~gq6FPhq4Yg7p$r$7sm~Gs zdZ5b`=GS8YVB=it=YGZ?87ir$g&giXq!{Z^JIkA4Tp;BdA~S6?v1{`L_0lLtZ}n{^_4ky`e%LKWtuhh0Qas68`-r@Y>@FQ2LkOIaGr`Y0$!EX(qqx2I-G)u}i=_)hjN zq~RIDH!5yE$J<6 zAk*i2AGm!VHOviJfWQiVCB&#{35Ws`a&jdTPrDvZt6OL657apJeMhXVL^&@N6_ zIwrgERNsXI5+svlSr-RL#;YqC-MI?2upSrt&kYU9l6X8{$fh<$;bEyLc`1w@hyIY{ z*GPB{x?B&B-P(l#?Ssd#+uL9h zv5};Dsfo2Ef6#`f#keX%T7aHc3ZfWwtH|u9lfu+sNjCScIcgJ6N{Y6nD4P(i1j9*C49)d!ZOK}54d0C z!o|fg^5lkm^}f$^O61(-HQqZi8OVt6_qgv0tqPo<+$$KH!_lpudrYMaZyRR{drHZU4Z)>%*(8 zk`lY=+1Zw|=UU-N$RNd+YwB|DHCBvZ@8qsNDxP`{eTa)$IC_x0c_`c@mnQdLr+okV zP1EnJd>kWcJmWoEIDWHj)38VKbS-LJ*Fs_3)AOAIt&8O*`?Zu&R+PtwD;n@)5oUg$ zEdA0NQ86B}C z>fbH5uFVa1b=xV>(!BJs3g)b9^78hSyrKzETd;b6j&5FFH^cyuMI{GD6H=nE) z%3hh6WN%NWWjS>yfcHt^^$x(RK3tuaPbI}ec}O64j!#TvK3wEY{P8f6Og0cPxi`Zt zHgNk>IoWt++bkSP^VgdwgN5mNhUYXfE}owIzQ@_VrRC)1bEls%@9>NUJQ{V&%n;tt zC#4;`i4$it%oDA56>0mXuedtPcTz!W#o-YBP5D**7 zm9JV%o6N?`$oQgIr?E4+KHToULp>{_Kv|xCYnM>q*-^ZtRemtDS*iZQA;NFYe zT&f4@bIl1L`6jYSj{u_>AbF7t4KZu)EgXjx{hN766s}UU9B!C#9i_gerR|poOv!kWHfnp|Wji>R!^Ftf4#ife zW?!S5{%ZzF%(=l*rL(RQIcveZiFC(Lh z{IX0Hb5aam-$DErc-Yvf2f0|kE)KOBfPX>HR22mQ;nvO-TUPW2us>e|yaj<$IX_R{ zDw`8xjpAbx=&ZYP!MfW-KZQR;^X?tm17es^>QVh~@A@~RBjZ4$fO;dKYBbD4yppKx8I`m$;*Y73kr5S|her+6HDLyn23k5g zxf~Z~DIC7neKAkzJAX{}K(9foUPlN-s6b$vlklhmmH`513supJ-DrI)tDvkOrs+c6 zFu>{+=jgvw)6$~nw96zmHgmoC7U-2Tqwx%EY{Ft)BoeynpCFh2!SN zOZl|F`Jj{GL{N~P4ZgYAd<`Lln28Aqr2A|0N%S}t>nx zLLB#c{_ak9`gD%4qpKHj`Dl^%PCDd~oK%5gG69%OiSyo~A~Xt)CUe(cM3K8oDV9CH zmA3)3dK=I%!U)e=+e9o!(#8N)@IEEK*ty^x?x6M})Z4J}eyY^^&Ijc!oA|6>D{$Qa z+u)epArkvvjsAeF!!h!|K|VY@8l}aK5&y2&{h+#`_m*exO#~~fqe4RsLAK0WI7p4#4z5bkBNk-1!W<5G>ZBso z-z$($NvUFs*3@&5t$XJ>!Iw7s63@?T{RXZbKy?5Hl$41{B65aqydv*Va)8OXqRg^D zjw(t9yCBT+1;qTu*wuT;MpM7&4yuyxU3x?LNvY(jmp~|ve7tFQr33?RX!E+NUs+>PuH(LIKJr*eh5+S6fgu1_!l2o}o! znX>UsRs4=j6KEZ;n?AgJzPzl52nh=P>mDqjkbG`6sXu}M$n}r*tN4(U^HQ+Ka0lfd z32yG9&PmixR$Xuh2c`gfz`Va^3i;gV&Gtnr`eBmSl=~xSF#Q4oYTLY%l9Mx^ zRJ#+(F3~!(o_sHQb$5KaK7Fc{DgQl1_Wi$%h`AbBu-r_OO!peVY!W>wE~8!)%gD$` z<9jreN|w3znUjMvm;0eu8YE$4Y$?C^_!kC-Yo%5<^dFsfVGozCoUioBhdV7 zT?_;-nkf2=;C-5nWjPecF-@X68VV|E(|7q)dwcuQC(|oU=iY3ecci@%ca}1wqzVO| zR}T~;M0+H|U<+4r^X%jN4*9;%J3>uO_jeKa^Y`=g!tKZbdzpzm4qCH7IHdW|%aZ)_NF z2X)29(i66B{1BDPatQD@X2Aws4+OHgX`<__O)RbsS*Ri;OSK`>sxj$cu=DauAugZCom67pfFj=Fou?Qq1 zmA4sQAOKDtz2kb9xIoM96W)oArCDW_=>$IxUTb%=it$IYUT(u(F6*fI2<0e283tlG zWi4Q4h6D60M%PCg@^|l`4FK|%Yz%@)u>ZB&$@VMHz+$`#@3T+%_q0HEEh-vxJL6<- zxnVO@GJCkKgm^Vl+p;SAzKH^;PWlCsM|e=kvT%JB9kJ5zUZ&($)#y{fng*;<6(-1@ z8D6yt4s(D9lq)yE%Ie0BsT%^ysmD@m<$T#FsN?orCp=bGQc3fdi0FipPxQ56zSMiU zS2;sEeb%uRSdxIJ0o7uo3J(u2T`2Gk`Q{e+q)stAzcZst4dWSiKWR&geRSA zWazrL`0+SOMOuq60+Z315Y|;Ha0^GK;FX)ow4kpALY3uQtvqf7^xaU@J?yoW_HKvn zJO!yP+acyejBKEYD_9aD{fLYExWi+92E?GLvcY`gzAlknPHEwUPWx48-u8WRL;}v9 z0O0DF{F4&yex|y55{V7z;CapEY!$$})~NpK$4TvYF5G6KEOe>t8D3A!`bmtNC!H(*Pzbei6bih zu;gr9b#*oH$wrQpPX*zJzo!D1as&6L4#fgfwWq3xl2S##3y@GP-il|@$jgsF^(w&R z0);*#s7DOG2{~e>8+h{1{bFhI(z)Bo(&g%$#DS2$yq05!&$anwxI`9sO-o9v1j{#3 zhbt|)AT5P+=;KTtnZV^z+oCnuEE#(#+>hOu|HWT0QxO@qMe~W@95I06hp8UOuuvcG z$;k^aDD^oo5bxdNN3GlC$ISsxnkRgaEk~CHR9xPoFNUC?9&3M@b(nj)YSy$!WP0Dc zwNKHjDLGcMs&7*iy=kdD6 z0VV=4OYlMEL+Tgbu#`^@4kpQX1Oz`2(I1S$Kq^DYlJxA&qHxz!o?nzXod*=gU z{Ek+$3nJh(TNehNwST+xYic3{6lP#}DsSsZDg5o#URYP?E-VBrxk{e~=nuJtEi7o9 zoShlnPtD*F8e?B1xYg9_-By&kC-|3ulnt$_BDaYWQc`UrhP>`~de7E@i^vbo12`wK zC}op@UxPFWpMU|pe1}R2IDaSDq&I<=M*x_`Rt`7)HzZB zn49tFb-n!p%4&kMGn%i8%{Si3ne^7Sw7hJ%@XY}>q@N-8AjZf+dR;G4{(M~x2Pt0a zX>Qi&B_+Br)&Ct0v)}^(B%s5Fg#MvyL6bvWmU-WWZySKY&HTxg} z9+OHtpS&xaD0tOnmD7Fck<5Y`y04Qyx}yQpmrx)Y-3iG#najbWBJTO=xl{Xm>btht z-dBKhP%WD8VU&hC74iN%iKOxc8m^?XsxkQD0{#sFZJ!$RzUj7E6KpdDoEp`ctr~m8 z4X4kqgm_d=3<&&$AekA+!AX#;EiFhG9%g%N}=!UrZjlC zwSG2K0qcF|B683i2RK z8DC^ln~1TE6xroHIKxsuhR>AywET(31g$Fhm?kgnJ|>&Zd|uTRpW`N}g;H^djrLrc z`51!PYy}K(&Hw|yp0zbaBd>1FF%gu?ltabA7oNE!+|rVwY3#3k?n&JAUPBi$DmG+&!35*GZk~oruw;epgxuw zYzM=2^C@GNz#VIPD z$@yY-pfZsjr_x#!Z>;vVy z5Tg8;dr7N>Dxy%li7&tu3{DsbES$>+bFNUYMnM5{|9~`@*U{ddQoVUF(N6<1-=Mbd zZ}oBn;PMp!_~m4(wGhlC`lqB2eieiP7amy_-L-N(HK+m|5TBqI;d0;Q2Ik8kz|=;h zq@XD(8Uo#4KvotV^c~Zni`<^`l`0aYBm}#K(a>}m3_Q4_xq(?-{r#GFx66GBkk&Ip zi*s|$Xtk?gK<_%F%o&JA6w8|_BP-i|$P;)Ph5pMKs8AvJtf;PsyuyP1xBhCo$EzE7 zV6N~r(6MNeM%e&<1hYtjPkw9TY=x2e{fW&;pm!JL=l|Ju0CdPwn+Fvj;+?+Vk}3zd zx5?)KXyt+JKp*)P83}cw1C62`^laR(&f9#q7fdtzsl=TnBqiH}MX|R%B2@H4ee*6&nfBR_49bafQ zIlz7Sb{~|xy`6;Fn@&7M#^0b4)#3N0`_#)zUWt{|jHwLFBtv z`iu9DL zC!^nhi}Lg1g&G&Z)m{G>i7NMTw`q-X(4ZsNyymGzcBP-(-u?yDH;aOM`eoE|9(eVK z_wF!&LM(n;OW`*(KCT4yWr1aFIm13xT$D)Sb|(}Hl4Q$1Sl$^y~>*X6$|2MLM%!Pt!N?fF|kLUjY53p7EQoBQP}zfU*lEE5xxY6*_U zgEGmLn`sQ+fwr+sf@yy_Z*2ZRMJSyR*8Id9Ao63%ob8LSQs#Dzr&7<^LO_lx1%zL2 z`F*r$kWr=e7|IW9X+((AA(I;27#gs`{{n*v_yh;~Mn+$URxplz?_{jUlqEiL#kQPe zctRk21L}TY-C!Z$IV*a)`1U9EZYQgBfLS|@DgxcIM9euq=zRd!tej#?;{ogi%j?_3 z$qrN>cwt&wkB|>IQ)fznN#|sh4Qy>83k#$+K2Z{u{S4^r?_0o0%*?z1cr@roXy+a~ z%xGZt60WwkHt3z927h^ZMy2v9a6f^6-xmN(k1FrM4bX#O;+BDlw^db>LE+(|z&;@? z(z)*SJ9uVhW)+Z~kk3%hPfN=S-GfGK`UF3aH%ZCKUt7<97cBsW!d74&`Shs^AdR*h z+0FQ0Y^woy>dS2i|a zyuH2Q5gUiDycIy!1*Q-n2gBSV-12*Hrl%VMoJJzsstP6}fhW7IWBm1ry}jGRJK~`w z0Gu)K@%Pg}qX|ZA3yf**lK@lL)>#V=$cc!gB>&H@0w8{R9XUlx3)LzuMB?HT)_3B7 zw~wjS+PSh3Swj0NwcJF8A9$%S@bJQKmz?DUWTKe?BT`@g{`}(n<>d(`*l}Lb4i#X{ z15UHfyyii`PRuTrR#bpa;yp+#Cx_ZUHMrzoMYyb1R0AGTVFe=sSKF7#a;P6TLXbqw z)>WjW@B#IqEK(&V36Ox9v}h(kJwOOGbBS=w>av#>5O14Nu8^@NQD7b>R4;&BHg;U1>fgTIlx# zB;fh_D>3UG%!o_F|GG_sSSO&EpAjFvb~?QG#T`TilOf)FI?ZVO8WxKt#-mQlkCs&0 zy_i5ZU@8Wonr5F-H+qrxRPUjPseVV3o?&=4A@G5NLm9P}gj9h5fe*PB%r!0hPT9ag z4AOrbMzQ|u-VaN!z@QA^CHg0B?Vu0rvN%q@k~U3~OJK2w2ZOBC3xxRh0tb7s7NZNm zVdA|cpD>7k5z)(dt=>aHNlC_0yIn{IMzn;5&kIL^A(&5877hZyibgwlTT;^WhTH2C z<_|gz!P1FW>z3MTq@<&?&>LR3>paYi6}*BFQ~lh-#lVQzgl?Oj9th+o@R9*^?>~!0g>`h0OPdCQ2P?j^RW+iboRhppGSZQhkrA<=$#JG2rRn{63hr+a z+yERg9o>{*z7u?=0Drej9O*58=*vRE%OZcdje(#Fh37aDgns7#97@;r>!u{8#>Ow$ zRVg7YW2W>R)>!|%S3txo{2TS2i9$sz3uqqMcrOi7+Q6qXQfS{il(Tg>jWBQ5odw( zs!ouVl5iERxZ6{Zu)(Wu2=ccN+~Gr*hrP9SN74;jDQ9H=xum4&7Jh&K=bcsZ-^BgT zyQKX8p3Fn{JfFruW})%EH5 z@l|K(T22AyYtnoKK|$Qr-sr@ho*u6qYv7w7KRc7>qNij>ueLp72K~&xk9;(6ekFa- zA8WD|D{;}kdq=q7f#N=Zq0CpsHhF#Aj$t;zgmZEtF6HwoLL~&B7gA~AzIuJ)Tk6$` zKu*3`e9T7vN;@JGS!#U0LYB4i2hQU6b#--AR8)U0m*Vm0qN?574C;(13m(cgmXU%vW{+JJfcR(-nhPA_26 z8W$fPTU9jl?CS6V&)j^c7~#DgtAv7$ud>#KWx z?Ixf>)k)v{crm-EO7*&JX$jk=NM<;4n`XfCq+Ut+?9@R>?q_q?4fY4E&O*(IV#fd4 z9qCiy*0wu^3~qAtEaqB7J8#wFxQ%s`0~NC-ZKsiB(N!xfu>9$HpI!qSX;=HYDAsIO zJrC#F0%0=4+L(w0`@WVoKH#npYkbyZ^8U)^l$F70IjpcC#@DtjR7#NMCDk=N+rUKMo(c&VQYyAPEeF$#W>X)O*6smd zZgBoPeG+=kUibOV{fg zAl?LMqMIf^F1oCBHGyk|X|+^ZKTF9cq{-6S0>dLOCwDyiEA`N3P_4>}ZC)#RVo>*L zqS{vJ^eoxK87ozBmsY*%FzZ)pDBd%Jp5;Zz=OGii&i25+^aN!8-T?B(ApAYvLj`v# zD#!)gLq2B|jjEE;S6Ne^u!1QY0ouvdKkBLcEsguIWmX zX}!h<24BCYhQLC!>Rpf(vjy+MYZfqEK<@~T;X)}hjT-&z;Vdimm4dj8gujqV261|3Q?(TZmB|gPG2&B@&f+Q-m zsRd$QCPqg2T9~8%kG;3(!c%3`H8u@Ro@Y9Kydcj%kBk5 zrdGtAdu~8ajpyjd)$tOk6a8XsldXHY*W+~z|7cK2RXxzDz6q_UTKrJG*L{#Is7T_Q z5BFy(0fB*aUhhQ+!mXXA*rr%MpH|E8xyd^1Qk(I!vIce)oz;PS5MjHmt^LyTZiAGK z9RAer8`z@nyk?}MGIVrxr?;D?a_;{>3phGi;);{)ci2an{aeJu*xB+K+&$ytgb2H{ z-*q{d8=`WoBzN;HJrIpE4N9|$_k6A-_T7K9G0=K82&wcHi?b}3qz210{T|ZYIo+Ni z)F8d_&mpIQ#v=OE4@%l==UylX=y>0#GmB@2ob;XT&p8LiX9KtmsDxj4fsJ~*?6 zPn-4V)b`qz?(XVuL6^;(pScFx>>1LTH z{yzT$PZgBQY4C@UYdNVd;A299*5X!%O`ytBDy0V){oX7eK=o z$9h|b%V=<3CsfecZ}{zLQY?AwO!4yYPz79R`Z!j?%N)p8qd;t*ZFvk_3ZpbOK7I#h zX_{t!JP51aDc_S&RAd8rto{CodFYw;CmH6pMpFb}^YDIhZE+NKEY8EFQQBfLK(cGcQ zDofGbJ?sIt+qb3z7(&-tCMVJ9QZPHiRqYO~&=eCz@Z$U%P!Zg?H{aFOJ$T4fQgqd* zq8*!%;&F7-&dKSW@_h+)b=Jd8!Mq*YRG~Uo(kk)tXFacOsTk!~-;4Gxe#KmzR;SW{oqIgr}IQUqKVV?BMi% z^iN+p9}sT0I)%;e!X`FndKUaXb*U$iM3%>Zou{|IU$TGN9}{!iFFO4ZR=O(m05c;y zYL#wkdt16ITzlbl7CkGUrjTe{+5snjuqbNKAXGlJHp2zisYNyG^e-G&*DY&4{}Y-Q z?cb@S+WXa8SU&OLO@!U$xe4p@hlJGB1+v{Z)Dsj9*5iSIWti2zy%(`;cv`x%+*kDg zw4Pn(NJGNv{>g_>1?4zClRgZKTqSUMau}bYm2KUwzxpsXZyHKou3c+~el9yv%EaqF zKnn;tDfaDr*5Tuzt-9gs{h48E=g)FKGm4N3=Knm%(G6Yz6!F#Oxh>*NLJb## z0%e-E6e~$nb2H`j>(@zn9B2{KJq?FU^vnj5YeRRI$I_|FJ9#`jGj51H+a0p&^}0rS)Cl- zj-Jot{e5(K;SMr(AcrI@1%{1ob21>Ng7lEaas+^UfUnIchbbPYK&!^e-mw z44!Ur>${K-_#ibBzGY?UUA5t&^+X*Up|qjwE2sNBVP(bTLVi^oP3DYMV5 zUx@Mo?%nRhbI)klrKQSPT3U=&lcm>4*eQ)${4eqLZs#@sex7rdqEP7W2_j^p$%#(0 z;c~yWqsrS<0fB_3bCcNCzvLWeW;I$ZZEeG^)OQ`>?QA#2-mwVJ9~j{N8DB!gsQ5*t zrl7o@-8>ks8ldMnd?txtJKfK4+334@*Z-)c@&=bWflXYT4ymZkeK4fiZJyKP&~U2E z9VYm3H)nE*pdmc>cYex_V&LIv&KbTp=m77_95uTb#2hmjIe6~_zT3Q%yQR<;Tkc6B3g@sXwJ>jb;H{`V-K9ek(jr^ejL0s077KU8?ao#{eQ$_|utbhqCBp%@7+g}HY zz2Q<2ncG)ZMn9AnAHKPD^NF)_Setc}{CgqqFZvd>(JLlBF4kc8Yz|s*B);(h(p2t> zu-))eWdiE$&(}-AKf^IEer#XLxP9@T@;;L@p>SGrHU2v$`3JNeQ1czq@CS{IpdoL- zd*AMWNNaoMJ^n4s_vC~oUhV;g({GXxh-~#BfNW{m*zld5hu~)6lnPh%Y0=VaZV7+U zF)aeR1hf9?xUp{xv_4sBHdMB)0_+d@_*y>yVtHXgFIsLh6{vcz-pk7}Eh9#-woZ6w zP%Amjv~b2m^L|ef4}P|}IltXB!T03(uNg5EQ2!%Ed^%jButCKEGJk5Gm`WEXEBR_i zoP;AaYD`exL;PlG?iTvuAW{&kMd-@LE$Q6Sm>0-4jvk z@3Uu`C5PMjYi=e6yAq$PTNTI)$kv9~q$;SzyM&$X+}+XPFo9?dfJ{rvx@~KlKtI^B z(}L2`E?VcjK|(Dg|29$$cOZWb7dYFzXCipUZHg_R9+Ca4si7|#Oh&$Hy!oXQZuK92 z*fDpA0&m@##&F>?MOxl}FhnN$Y*2Fp+7cY6_yF|eX6k5?k z#V-Ti?B>@@#8km~L+E?&$FeLR?kHo{UN_xIZ>*s?9b#$g627v#hW?e1_)W zxHrAB;?J9((A3_JP0^s^Kj|fvE%f5M#ez^}P0f98UhY3ywfc1qY*7$cr?+NH2Eun(G6we@+CTrw z{U4exV801ZbW_(i7KAtu`L)Yfy)-JSdJv}S#KeK|cg zAEqC)RO4x$y1|i(yrTR1x&D-UB|Ef>TA7JT&N`k4Bx+EUHnOJ1H zbq8F}w-9zqicv#GAKX5lvnpC#+nq17ays_BrhpQWT_9N^z zPOU>IL{ZJndkFmx4|zvUH^@QyVDxkO2_(f-w2|Z@{$#0m;ZPkGtDcD%8;i3V@M7Su zHu$0+Og&LnMnEEFmiLAK+vA1dh9baTTHWALZjXlG_2%ngz%NR*jB!3*SrX-L`^p}{ zc)GW{tD^k1s@2HEV|4F1g+M8u#yt_yQ&)zt+CP`WU0nnX7vHJj{Dl%Ce{6oK)SM8+ zp1$qjYMgf4uJ;&3lz-}7EJ%6QA9EqkUt>|ycitws1W zOd3xg2?|aJwykB9+_-C&aG8@bLy(1>)cTM3Ilu# z&|er1t*6W0Kn2e#7|jjgu(5kxgiQX}o>PhsR{|XcG!H2KuUOSBP{_wpZ+vD?K#E2< zjnR!e&S;qPV-ge79O|4Mo!V#`Y}qbil;838xKL2A{Ai>9+U_A95fPCdJDCD)<%2IM z5i%bl;I7_}?aJQt8k|$RN5tHQUhlaeAQcv$_i2Js*y5H{7%4(fkYb?F0FSXd?kh7h zv)HRwB;ZA$jX39PLq@VSE=Ry^14tOD=!}{~yHMfhd>U=MT&)Lh-o8bHT2B1PWs3b^ zOe=c0$4DW8_eZkNM$2u3JdH0HfYgAz;z=Qx03e;C=cpQ4&O{GED&+0c!xeOR0zf+( z4X%bVk3%2xq@!fZ$>Wex%rM1*U|YipdkymN+-4n@3ND}#PESn>03F(Ku{dPFCa6~6 z6Z9!Z98c_Suxr=7itO{XZh(?L0axyYrEw@cSEJrp9@(|=(b2}vV*fGg+}vq21ecm| zv^gPTn7=lw6r5viA&Eg0d`T{EkZ1nM_eW+E_it^Cl{YT_5}hk2X|Of#HsxwiKCOcF z6)R{;fOxT7q!ji0_CGiPA8ur_?Z>=4#^YCW;S2gA?1k&aXa;r zM6JNOk81ep6&4=e?da9U!yaZeM{;Ebj`O(pFy8lU+a=+l6uB~E9^ z($~xkdw_y~{z`4U+@`ytfet!!enG*nYMHzy45E0j*QA-UF>$tAFU~qge5SL8j0zvhIt#?pE@R@Nqb@9i>#WnYL*9~y~45Pe| zHktSi?;Spu>&}-aREV$8poez$fOI-fzvStPf4Mqy>utH=)aNzIt)%Yh^rAbg;hLil z@Vj@vFV*n!4-}yyzI_wYeCkP}L?f_HNJ>UAn;qW;<^gF*`a}OhA7xoql*iuQKvwJf zlKi58WZD#v#UIbKQ^|G@HW9k#CFSStxP@RshrBXo}07D9~% zxF0fi)^PW3w8>bhISK+WxUjLI;**mTWZ7mkN1)D}9uyQ*_ol2u2dtF z{ryjmjaCGri}AuKh5Z0lfqq>MAmq0Z5l^y-f3u4xEY(z1AraNosAIG@$ZyDSaxAqP zB?6=i1Ymlr{Ne246z!RT**BmsLLeaBNm+031YR!j14}}JO|AQFvuokX+K&P+_!PST zya1)wH3SKpZu+N=M?NzT>qn1KL85^Uj{@FkN>rn}3i96U{HDrkQ2b=&EDE0NcVdb^ z-%Zru7NDzqiW)t?ROeCr;X@@Byld!E1E4WbF=ro#GvG&0n~~P=qAtZd--XV>ygVz< z%hniKaWa6VJgaQ5$D&-f#S=lUgo>bM5N)n5RM-1vQ0safy3@x{1S63O*2{Cbbdz$M z3*1+W89~XG9v)20`VHgNxSiqZh3#5wQ_810biLyHb^Jdh+Gje7)tK8ApicVyz#x31 z!3!0UHT89pBJN*4!99WV28A@Ac2)tU6F~yg;Qd>x&jkP z^x|)qh*Mn*vd*Kz2g|+=9Kp)asO9D3V{#g$;2WI!85S%j0pAIyqIw&(hrO56VEm&; zZV)mU5FUP;m6c^^u_UK<{iFc5)wnJ`KK_1K`0Z#-liAhX^O3658Bd>M4l*XDaKMJL zvsl@(`BAVT?tWD-xjxJh@M*&kGGR<8>^H{Bl+B}8re9>reDe#))%3d72mqg~7aqLR z*kyiLqR@q@gxbZ2hJv>LmRm!!CntX zukusHdSU^NT7{%TCR|{YfRrx!*6dFhX=bGWB|CPX}>Ge3rQ4g_;wO-@G zVoI~VVU2=_h&UPuYth%%{s0M;%}q}(L=ZhaWq=^$P+?GmGPK6e=C1%q4KP7YE~B8J z_7k$#iu%59j0Z4(O7=LSVjFh(R$J>SpQwN8#B!?7`tl(e=oNqd8VGk(_=hWESJECt z`IE5GTFf6Doi{&#AFRGeLEe?CMlB+*5~sC3)3T)0b6cy#EHZm#FJYP~d@!643lUD; zY0S;XB8;L;<>~=C3!A^H^=_Hq`hZe&esM87pROMru+kA{d!zneziy~z;}jPMeh5@h z&N*kTKk?bpZ;fQ4AKwXlpVMyo)STYNz5f2m=uV-5EQO5I(`uv9(OoPqs-5wjFP+^< zTVr;oA+_H%0T`OH(FxSAYo1)!{@ahy1Dbhm;6#UM_97fsbcMug1%d~tL&O*pqt zAsV9J^nsb2;FO%r)I_aC{n=BKheWr(1WBB4k^ToEjwr9Aa+zPrPb0-EjN(nAUs7*7 zcB8MTvb*F4k(p zzgom-_USzqY2}L>q`GU{$3yE0>A^cY?_irlvlm4zYu2wjc?d2GmZ10k0+*Nd%l(2l z^-h+cB-LI(_vn1N)h*z?&K=LafrIGi&iw*1+2Ip?opBHQ1a=S4YmKu#!?VaD1yW=I z#k@77A%gBCCB*>J`Cy+O{l?!7hj)1t9Gm0kyAFiYf7J3V?{3R-Q|T!si?kXD;=S1Z zs&Cd;DPm=9O+@vmS}6DQXAgU$2=3rwG}(B!6_R=SQ>Q15+ii9v%+uNnIgGDY21t^U z*f=;i)F1iB?*B9VB1cHxyU$0=#zq7Sd$2;3<#STfNqnkXoq&^7=;4MK3c}l41o5Wc zt0u)UlQ+l&tZ;}9z2Esd^tOZLC*uaCle1g`y85jv^ZR+b{ew4DdYA>%jAv6|`#>Te z=5;ZEyUH|@d3iNQ_J29>Kk97187*tl@%y)?uGD=Z^E{huOef=24gcBqCCbNB_4ubN zKYQ#?r}mZyb6H@Z0d9m0W`qnHU^GA>rRr7OFny`g}2)lW>y%Qn&qlo?dL)$?B&Zh6qoIkV8x~SWy zT-CoBX?NRldEb2OdKvV&HG0M=X{)e1momA+Ml#iO3*Xg8h6chuaTa@WL=+Shpfy2| z^I$c8Fht#6`Ps^BE!VB;c@aS(+pYa6Cl}l_#(x@QF|75WNo&Iepv6q1r%c&aOFmJMBB{voC3W6wQ( zA$2>ruEvM;XcxeDGwQK4g1b2)5Frz`tx9lxFb-@Gz;H7wcx387F9T)2Uh|l)h~jFJ zS3oJX-0M=$pHk2)1IPe@X6;kb^L)#}?T)Vd>> zgK7}MEgpkC5+_*nN_CFcy_SzCT+ZC-g4Z?n91|a33m=Gp!wqrb&Yp5>J;XDL1R{Fw~5I8ck&DK zjjMKr=u~B98sGfV@}O#go~3BY5(P`nDA#y{^Uonw+GOS44Y*W-N1z3bL_xUFZKW75 zc>@#xXB8rr-#pA{tk^iSjJmsS*%k37xCHe}A|)+JFmZG;C+DskU}Hg?PtsDOSVTi1 zEgE9PJ1#aVp2JiAC`&hQt?uCYR8Mcsp-}6-mv@LIIRyyBnREqjYpP0W&6Jck?#hZC z{Ge~EW>KQ7s&WG|g5+|nie_)I@bR#Xuici;Zmqb-pgl)=-_r2MzS;Ysc@i378P-uQ zII7n73)aDf;qRhw;#$`VMN)G8n-H9X!PSlNviFZ^ZHI**z`883r{ZmS&r#o{Grj0t z=Cp$f-Y_L60z#VUk)8gL$`wW&s>?vS(X`CW;Li_yyX&YdS>z-amc}oqAG;B2ov$pL zT_&Yw9-YT#=dES(MmvYx?qOLwo`jwc(fIo}`oUU*Zy4+?8WH)n(UO=_qHOop;%HM* zZl+6-6M@1(_SHZ7mx483XKYYI7V_@seE!s)km1GjsP5y&$v=~MqRw5o#B9GtMRDV} zU9~u{UzHLN_>X=19DkFsojgd>Z#C*mOnkiN>S2&9S)^QKdw4%>bQdkb4S+krY@8bm zh44!gla>k_YeeI(gb2V}vr6UdzwZFu)Y0XxYF-SX&7)TN~b%ewgm z##nTdGcvV)^S?1S-{q&2ebn>i%e>DPya<_eVkJ6&yNr)EeUX?obZ)>=FqP3ODthO+ zZcM)j$H4ofKZfRg)`X_^WIAmYB$ zMBOZNepGun4}%QK$9Is2S*cQY$1OppqcEy?aUVK?e=hUKLB zp7x+1>>Q#DlDh@!!>I-Rq{FFO#>NP&bpwF6R6{hvg{8h4JB=WEkWWP^cf!gvM}EGn zg7xK#MPo|Tl%z>XMU3c=*IEikK}H0D`q>)E=JcXdRO?6pQJPKK&dl7J$=$7Wz>6I)CD-;CYS4;2q1?oU`PhYwO2-`}P1TKvEfSed!?@ zp))d>4C(Idyp90ZWQ<41J%DE|hi$JR#>y;Hicj~>wuYuhBBqKRT5BIxm;<|beJ_K~ zb4zLDyZLpC!Chu8R@-;+J5wv`LxSzMXP+3^Z$=l9Z+m<&`^*DJFgubo(yVLY$Qqvg4zll8DE4cDLU7`XV}d($d;5dn@(ruQh>bh=D=MBF5g?`Hj*B z-`Q#U#@=)2zf0nc#g&w_RQ`Vc{5dQts-3wzDoWGH(@Y8P$e|9-h#n|tiY%8j*T<@e zdFlol3gfbG?C;Ml*>c-DHcj@RT*94j;wy}s=fdcAHEnV^V zg5)vvLVc>rDuG;i7oQ;!$~R*H0kw~{NM*qt=uH1Ol;#8(@9n-8r%H}z z-rLx){`0j-Fx@8Y_$)Ko);ct>4@r(0OMACBT{LLQ`kC#xFu@#|(C$(X=ilb4=T%r8 zJr}n@SMYjm2nF#mF;UGTl^6kd`s33)fr0Ms`~ef5&R@SYYRk(?+_SC!8K_jpChx79 z4yu~WRNQ$sgWqNemrZ&V9<+C0oX}F`K9nUuTO3TjaNwxoInfy%x zCzgzyoK}t%+8fx8ECi_#7A|QP%pki5wG4;Jt~T^*nwyGdaq0{$TRt7_s<|}UO4(Ss z+|XGZA5FRbD%vJsPL0W#Q+BfWG>`A<5Y^cH(I0RC}~{`{lopRBM>WzHC#DqjfVT< zqDBw(w(XEn5wdS(O>3h9Wh*`>^%h>_JDGd$A|gkGXZ z0#S2Bsh*Qn@LMrippewk9dt^_D*+Y@cmoi&wo0tAq6+puH$?5$^UW|QZ^wLyW?7`8 zZN#HXxdk{YEW%=oR-snZ7am8Sg_DlJ9qp&itah)DUBC9-@%wMGp;QQX#5j+=H*~9C z@&XfqSFDW#xN^0VB^V8_%gEOntnywSJF@TY?jjZP3*C$N=~d_ng!fmd{JpQ%P~i9n zyIxJYx2Ud-~i|M5xIu=lWk0aEF)7M#AiLLk@aZYULDj6LR&3m zn(NIrwv0aTTX+z__#f0Y=cSd0Tr?f$4&={2_pd5pY=PY25|K0Q4F``yYE5<0sKv&n zx#jUpL1dX)YJMx87gsgj2Mm4tH2j(-b=%u_vjDr^sv9TE*Y*3Vk$Vdqy1(yI{@TorB){d3l*1m`X9>1_7k%HQFs-uai({ zDf#cdNAHr{&`fSwFp^6k?p{K^LW0Q67LW}TuqpoO#Wx<^E#v?xV01nE*nUg6;Gey^ z->?>2zvvKhzWC#Mk1;0k%UJEgZEl?1fQANkF>zmfa`KSoX0deHC6F=5ClnX;8T9~e zW(varRzB%KZeUyU^?ns~b+kBn^oZpX?c}MeqUQ^?`c|z$xLGy!*Fi!C$=jkhG($=o z4ggkZ*SV*SxpjXol%`77MKZ-{Qa68mn7IJo!!<9j8&G;Au~!%gZ`S=$tpf7Na(m;m z1_0wz)yR&sLq93vZ2FA&S+L5GEv#7s|1NJ#Udg-@@0LJ1QD~L^*i7y^#;vK}R*l1n%>3EXRv3fSdTimX1Rn+LYv`~sGouHS6z06cWZCRn zu*}k{;N`V_76!B{2#eEu-rbeHYyydE*TiqofAZV!;^=bQ;vkOadbVYQtG>a2vll&+ z;>!cYJOGCk*=!ieq^lB<$bz{n7+B;l0$$Xc>FVkX3?hxSCoCK;zh6S912ZRv?g$EE zfE2N)lw0c_9pnLRw}MaTI}M0(Z=^hU2a`Sg@LMpxYV{NV1nH~I3f^Kuu)!2<=Gt<8 z_32Tq;Bq`9u)2UO^?5z@l#M>FxVRS%*@X1Q z!@nN2g|7FfCGjF@W&&tjU|1kBOZvyV6E%&`<|CD9vZm<&@E$ph?T*=f>!XgCE&e_s zB};TfNo#qb*qq`ogCc^GB{p#@t7{0i z)=UVZ0T_>fV9R)C$&$motJcBVaXjpKkY)(-8nRg{cW76M2K%j{wRPaPZvnFT_fQ(U z<-7zZx*XVbz10+GZ)HtPvp*VI5XOBl0sPtNdu5)u+RAP`Ou zsX~vByYj~#xvz6i(i|42I;hg#x=)aNBk+h5+#{@d_4;$C(DcptTu2*Vffd{Ki)^|o zSky>RF~a*}vwD90YMDN2HwNm4R#+HSEM;4#wMwY?^+FeJ2sPJr(aWr=vGc>k`_M^6 zs7B{OPa79Es$IR#vOZDPux{W_BJB1ln2F@EG291e^^RjNr#-3MaU*Yz+tq-VtnF)}HA;0&m0gktiSlok= z;EOUxQBYmsF8wwTQ&iL+WqB;vzO?>G4#r+tv@VSXBWZxH!KoKR>+~jVbE~WG57tOn z+HlW}I(3EI)!n?$I8$)x>^e>NTBv1js|gv`2E< zx46GcBfAQ?W*~$?h+P2ODyEbaI;0Z5h2jRJ2|Mr%dVQubqIttC0m;Xq6rz@f4^f`M zH!hCp{K9KyO^>3=t?C$FvS-Oo`@@RJ*kgp(S!h%J_T8Z3px~RaNcgE-=uDN-0y?X9C00a4Z?r0p+<$Q9Zx62V9aR%wCKm?8&>(2< zTprw$Ti!4=%fj>U5d6?;1XA?MuCew<{3A_mZR7yTA8m;~R_$xSvIPt2t)!$)*JF;8 z^r6C=Ae~_Q63Ga*xGBG6Z}-Wr(rI%P=&ox&^IKWx%}kr&fo>6x`W|psX~Vnq(b-d1 z)hx`NSlHObmcuCLJ6e@}#|H5q-irY^)(p2_RaI3b1#y~#_>~hly8{4gfWH6(xzuNz z0|EU9ZaDyo4#f0RMK%J$Ev>A02`Iq;Rz>DpDQ^=M+uvZej_RJBei1-^=nRq_F{@`{ zaT|{zXj`Qs%*AgK6$tp?tWwQ1Q2A_c+xZtqaKa=a2<+bGMM#BVex3TOhXzdif-y~R3&L)GqDiOa+<6lBz+$j>IHs|`g&4xSK>_$!UHzx! zU%Y>gzY3sz!8Sr4namy(7$^;@7=1^HK{-$`a+)5#jEyIUy8pRn#ZnPS`@0C>4kzwj zRClclOFX+UrTO-Ccq<^^Aa%2(_*zMcBZton*86~%N!b%gbaa9*0#$k&wG})kPkRoQ zCvPCz0tCnW1s=ZriY~GAzs?wSPRhN=56ifYpyGXfgW?V3bIkmurpgtdWX}Bg(`up; zUuWh33k!?o4msVghY!DRFB!}nAJ!N|9LDGBulyQ*kVl08X;MVszn&j=mSV7#=?B5s z%dr*JY;}`oD(-GjQzq$e7Fx?|(&bEAxL4g>)nAt@n`8}4Mj4ERAdAb>Iq0q9+4&5C z9M0vX{m;XpOO0vlLRxf)sglF=!_*m!XCpt9E-KCo=UWB9PpWBaxeaE@GqeB@m&;H7 z-yZ@+{r~(s*vZ)>=DqPPEmrOVMbas`m%ss7iO z^$Vm&?tgvdTxa+f)%(wX&C>n9-vUqK|2`Mwa`^wb81_V`>n4*huWDGruFlwA{lbP; zE(?rXS)Y&tn|7MXw2Q57UPE2eaN^&`g4*5w(uyBx)PjLWnoj)cq5J|Pa~(4qNQ_xC z{|m<3H&fXES&Z-sPH$CK4L`_PmZjGBM!b1{T%(Kkp|rb0`!+_n-;?{E-o}on-}?DI zIqI>}==$Wr66Ug1fOsQ^KWul=mdG5oys_JlXMhy7AwI^%g)XN2g`Qxh+tcs;d+zro zC8%%&6nPvqVdal=^JB6Vgpn_8{XOFY|F{9qkBXsX6<-dA9|)QBhv1VZgQ6g3^$l& zs7UHkukU377)1%Ms*R7rC+`y}L=C(#>27GAe@gRWpaZ4S`+@`tjRIMt|C&_$7|QGN z7r#GDHd^SD>*(?fdUuWKa4WbaqU8qsN_>q^RePE+(L)?DR=V;mTnuB+unHTKI zX9+(=U8ZMbXgF!xhJYm2Q(({WS)DVsQSr@JzfRHU?ub@TIipw$qcZJZbMdG zFV4dL0>p5;KU3jNS(!<6+kYL9-*EHJ&+(2AGG)$B)$XBPdy-z!a4$8-2?*H`Ql6@u zmira-a>It5eNM9dV-Apk-fL?Z}}x2K{ywe>>k8*;ZJX2BSy;3kakJnLHz`rY7LF7-k%*s+8=KbR-QJy)AL}Pqk&i% zAcMK>DaHXdwVHB9BwvX*zBm#lA5SC)(79H}cpyiEFoQwrR?vG8SxCyu3x!b&=G)WA z!9-Xj6t}&1@HRU7(f9Ak(_rj^o>_PEb2_kMAPRm2b_6KnD7UIg^U zAshTbfV=6IVoGg{B>~ug)IM)YNX<+)&B-V#GC6vUmSC{r;2z))l?g+AAg-l^$H{3w zQny449?{Q&pS4m#Atex+ylR)VH;s+%l|EN@kdzr2S-L^yqy%u`Bv7GAffZrdSD zef`aUN<)|}+XOOk3n4y~jc1}YuWhiQL2^kmx`l5~yt&B+vBSjRuK{Nxa*DbUbmSes zeyNR?gN#eJ0!t^KACuV|A|7p&oGu?02qM0U=O)T{ou5mkr$yqw`i1w-K$xX$ zOG}xywGDT8=P$#-)12oR)s1aZ-r|nke0+B7%!DPkx!=p&Q`Tj>TZd2+Il;icP0gfW z+dp|@?>3+2`9#@;4XbV+nv>^)sLzp|LED2d!$nSe3elt?Ax`$k5`1Ml#2yvh`uBdA zT7J12Po{#6g@YKmTzf9@OulKtFXs%ODlrhRowD8c?9u8}W(=c9()rCFMhn;GY9h#D zcXvcbigVM9#+s{^c80f(xZBjhlqGsqN=+BxsRsOSxy($U{Nswr)2&l6*H4}_1Svly;;Tpa5wPU)u32PD8x_`q#b!I?WyIA6 zg;&?0U9YsiOK`O&s%wn{HUi{eLlguqg^PLu4pO{{bjMUx#f@15%3?Kk&Q-5_mDnab z13Ka+z{&=~aJ4{)^sj41*Zh1(`Yz|!E00^4QQ_H0SJOU*n%({uI28shc@6hIC-c}W znIMr#arC3N>dcb4ymcRw3ND{qLm>UM|Cnh0%>6ymSQLCT)ChlKdQDGn|O_LPZVidkEmCc99)15Vr;!yxtckzI0E{Qbn&O0!AHU z%qJQ?L7<}_xNM%#^{T}oUo~JDt)FduRBAT+=u40iZb+NsH1B%$ugeC0Uu?q*V&_fO z1{(TkE06J-t@{)8&o6t(LH5<^et^{iXgQJSmE$TU(sVUZtX`%iEP`?(&WOFJ;2#}* zT1hHU5$*j|78er+LCNHoc%Ehz96lXqkrTobaXjvldD}lBO|P>Yvecm zgNE4(7=nf&VP5ffTO|dPk{$me3KYcm609hKUg#Fzk*2XHa-CybcF zXVRX}2%xKlp>QcrE?mAAvNs{&*`f#C5+#bCR0_VgxP0Z6YjKm@TodxS`qrfM%neMnA0K`Xnf6e&Rb8I|#J zmXV#E2CV8&92~H$tn+)}YJ#R6#IF8~N)FrO<%#4KcO##2`fL&rb-qMi#ZbH|*L-G# z%9`o$F8FD{yUXHYMGSX~nwtktw0FUrnp(>zTWVP2AjLX%IPhFv?hr(IR_9I#8;*nf zp~Q|pHa1v(8R#zxHn$=RXC;K7OI@E*Auty$a7C=j_hJ$28?WmVmdeRH!q6nDg* zC}v4c+%fIcHFaQES~}IVN4*RVnjqxxSA;g&LpaHtU< z0p0%iQSgJ3j6Z}LlMfW)Qczgt8PuSG<-I9g?(KrdjI1H#PmPvj(6O%L7Z~87OVDxK zPNL~2ZNiAy)(VQxvl~rmFe~@m*2CNTZJ);gfSUw?q>mm|xt?-goODBUr^dp8Xp)E` zrifb7x7oIXTS8v(H&MmK2l8eD<9UQ<7FNQx8uS7yCdu+SqZs}z@^fPE zf4IC7IJ2rtcfKDLkc`*TH@#q;{qQ^lQ|tV@eRGsQR@2g@7e2q^Lv%N{hXb}|zB6|% zTSg=<9YVq#o6-MUtBFVhUu4&arXBmm-~lNomO?Q+uP-{3W>aB(;uS!RX+bTI5u``bMV)o zzI0^yMxwGZZHqy|)*S{0)JdK^4%ZKS`v(h6vWf0PX5*7LOqE!MIK3TE{ieC@9dm|J z2TDBgz9Zo5{N(KBZ+7+evb82qrM)dK_EdkS{u*p#uPM$~#V*{-IQB1)VgrK1!JHMp z2MsoFva>lsR_;G_bzCE_rc$3JQdfi7wDePngm!w~&2P@xxqPH-P8!DH7=s0jxuxfk zqliCDOQaT6Y?7H;0h{veFzfTFSDtkaA_6WJzS%UPZBULyd^y*i@e~#omXGDQ_CNg_ z817~dH)d75plmsQwGeZkl~tYWi)G7S4?|Z{>Kp7zF8eEgC9RJ~OQacRb_}lwW!u|B zFJSmfIeh02P)rd^al?R8h~~utOIJW{FyW+I4Ia>Xg=6uQRJk*K>5qTLRXj8Np#zN= z%nvjI=u$pzHn`XL)%`?4w=ULnFUGJ9|IpB~K5q@McyZdSV<6sq)N|pqJ{1yjQ>Cnh zY_J#OL$-#tw!uu1(lc8Pcv*?6qY#W3PM5axyT&-;v*tP3c&5wkJZ%v?Sc~AdP}V8o zjXJvYoCLiOa6IgWXA>tZ0@-@EOYMDr#|h&C&eqZ0-4YUqZ3l4uOe~lNKR<}`WqUrB zqSnp}?&zv!djxX9e+%5D;gXPQd$GD-1wmc-VSak6l=;=*j{x^rrd3_?FY>oHE zaD>dgSW#Q_N%velU~7;s^!!9?XU%QvQha}1SUx5B>gMGQFgJb?aH1|*WM%0uqc`G& znVqttmUtiX8@qFkBG53Wr;)q+l_n-ODdA7& z6lVjj{=T1@w9C_TqS_PD!uh3Jnv+pv4VzUeG&oZRr#d2Jr=GEB?&xf!WDg}nNyM-F zwt>|~Lu{-o4w(ST+K_E?S7AfzHojU!Os02eh1MXA&t=*z&uhEvZ53B+G#loSL}k0R zDo|A(Tmk|o&^r-%l5EfjZmL0lj4KzDuO*;gSDnkTYu&HZz=9@+fRKa$VwQ&Mw0NkH z0-ZM?ohZQbenr`5yj<UbR z?-ElGy;DL|l9Rqq=DWK2*c)#kJIx)-%)0aU@3uB588NlfRhjB_E)qH1%XRvt;EDUC z`)!j=FS$r8Wc{8h-}v!CrJuuSfP13aNr}cyf8zIQ-V zxw)yj3h5O-+;+I;@2#vxdayie!S^rKt%< zs)chO9;AwiZ^a1gva;qK#}5sWSd5#zd^xjO#}VCbgZ5W!xL_ltun-UIcS}Mq#S9K_xt}DKhn6|W`OlJGozBFRmfmv z)y=zlD!DK}kC`@WIk2rhiu|8^gA-T(!tfHdLBpcwI7%1-oxYDvP1S_lqi!CpF3Na) z3iddfPkC`*I%C=!Re`ugRzNDBkxt?h$3znR!o(UTI|ttSKu-3QXl(5%H(q>bc(-~< z!*TcXVr?{3@f!}`qgyl~vr6ldj(?}h3z(2}-m$2UU)>e@zP-1)a}LJbyrv)8JLRee zLbFDLg-*KB^z_+DuegMT#a;6XGZPwC{N#qG*93{+9vP`N5e8<>cWu}gn)A@}^K;dn zilY0}&+|9k5HNTe3+6-{nxs=^k&+UHA49mFilet`c3Bj}6S2ZalLmvtm;dJGsveK- zjb`(EceUQ&U>dL{hh8@$gc6o&buW#w;*%u+55J^x>T}XI4R=Jl}dDdlFenIhO_g{ckgUdp3b3@^1i+W9KZd1$5V)C zFd%LHhnR#pW!Ty%8LvkMpV zb7op*%BK5&>T6H!nGh3YQT!tF&y5L|c3oI{I(Vp(WiMAXJ&IVm4n_id~^3er0_Yml#$W*YPM-Ov0MCa zinX9S85$b02_4bVw@k)3oeo?twVt9ue2h#>$WDTZ$2(1DTVIXadF`C+)v*}ME?oLs zy}pK?mETx5q1OXqr-9rI<*H%Mz-^i=PzZEf#mXn?P*ubmw7A&{Tr=#Ru5HoG|x0*?}!Y1g( zoYZvpbrwG-=l|9!liY<~$0y4wJ2Crg1+SX3!aHP6E|)uS)Q>n|fW@MnV~kQTDODm$ zcIk2Oj{AW%hoOV8;n~=r#QC}LeWO&a_xM4u4oB(=!wZrXqdz7Wk_yDet+JGHR@}e( z!0-MD1COe`NxU7#Cf&mmuFC-vtot%xiFtXfy%|nio%=Y|R-e-y3b4Sb zoAx}RSp0QCY6FQBJw5HIt(JC>Uzg4#>lM%4_}O4sOVy9PfO#T$K_z-qNfjJdA3%L% zbP^Pb9Hx$It2B_e5(xNcicU!z#4|MqnK*LV{keZny^$NHXZ-V37(eXY(H0SI3l^!YA>dLsL&Q`R>5+^aa<=$}xQmV*=yRD{Nzh~fy0seM} zlanGaa8yRNtKj338u7Pp_rp{z*Nrm=GRz&%f|xU(VSQ`uCscq@;*Qi!_po3Q7pl-61WabV;j(NQ1CMy1ToTmKKoi?v6Xx zK4;f??$7({o@eikXTx5s^?mR6zH^Q-<`~@l@$WMmH9D7$WcT@(MSp&Oj;cViXK}vT zw~k&&?&j9M2{~=nQ6`^4Tw_L=CtpiuaB` z&uQfM-2y-NfH zwBAlLhr&C%{pUK(-MOW1ib$98gA->(utS*cTf`bVX+x3BU0L$ufTMOkM z{ePmZ_=`dNr>8kHqU^qPIzaLXOHm2grqQTysI`{IH;B$#i zF(aR?i1R?Y;ZH`^c~SOXG$`D0sip#iPctB;0Q>!8FI>u4cFS*TDWn5F;59Rumywas z$^(OMqV{po=`n8y;sk>SC#R+oivwa}m=U1pc|=pnkdY$8`D&u}1!9Yl5Q&`QV&BZ$ zP?4vMHZU?E-k(e_$KzF=k61c31aB2J`>gUeCcdV)d!Qe?f|#gjpzn*DhX60cQ`Zv} ziwBs9<~uoi^FCl&or^njn)|9~RZ6;TPY{fe6|bncPmS*`_F{)wd*Z&rR32m|Dy1GA=E&Y)KPBI1OY@1m;hra=o0 z6nP%(mK+@uQ{U4g`j)y&_!yC@v7CQPSVTKC`E5blG!o3nLPD?*sY)FW=?DMfogDiW z12(o*yG_i@F146$xfi^Y?n*W89UsUvyo`o+_&v~XUd+`fk;FH)vom>PNAAqy?aTuI zFq;PY%1XfGq;C8MGPX+3Z+6Nw{nhC1ua~M8NBir(_4?4p5VKl%%afo_?UMcYQ=&PjQ)AG#ZbYrF{}pZwpxw}CLp|E%Wop${+5VsjC`rSACkKfXOp9cw>CK>`#4zI(A?j^*` z%nYO?+n9DSs}b~q=9-u|eOv_k^;G4OdGYd2Nt zLi{dF)Lj7gh-Xir;7sD76MDva=A1gYs+eqM1{FgbfDF+01~mAdHHK>s#6OQ!K3-RS zOuj$g@oD6fFgg4EHw!nzEMUsf-xPQ2#R>S{%ksNUH?vM|-s5)JVcskO#7=7QV3(ZN zyJa2E3A)WEE^P)JVMw>(gOk4EOqRpwg23m7cns(`E8eHBBe~;N@mX?tBAX|b-D$% z*seF};kyov-Z)=z^-KMZJv2o2P27r??|u|mB4N_fUez*`Pv!+rd@8aL^OJ|0ZQ}=} zEZ9pn4>I1K?3pnP7ur3pI^wApe*gH=1E3eLxt+S=33s##?^O*_G=GY+#YRc2{k#hd#nIua`M*1c@CwM;$HC9ZJZ*rK~#P7 z`Lq1Q{5%-@8NjSOSP3LJ1>uqkmWm)Iw!+9IXhWa?x1N}IQ7KR=0`V!{2VS?$Pc2fe z@i{m-=}ex;=;&KqhOzD56gH;*YveKR~DCu|8ehVE<&tiBv&Nena@WSL*P)ULdycIh=gSnlWm9UDr{>73PD5sI~fl{|&b zysN*LmjR!Eag$&YNp*Tr0^_!C_pTLj1O zK7uHRt2Q?B&U=fu0j0jh#PmE~+EPpSt|lhSW@W3Jn{bz1-#wZyHgDe4PCY^DF66#9 zbYx`;;aThYW3!xiflW4q1=9UGU_~|?k}WXsf>1{Uf1#CkmvAgh%yx8m0)~?$+! z1{#{n%D5ZhvmZa;1aJP1za9@6UI@fFZHhwnZhAnMj0F}Z?vntrxR;};!osHp*Ds=Z z-ehKXM8_R{q`{ zdldpUI5ntLNJ*dS=paVRG*4!YHO%i|VjAS;aWh#`$MbD*PS|s0Yf3-vo!i1E9pDio z708PdjXAf#@L7*6uVtokt!8>{V|ehg{+T~gf!gKRskU|a8iy)PJyqi5aR4v=Yx(W( zIrG1MsWF-_FD};g^k~da(j!jF4bjz#cHRZaJbJU(gR5Cy_~_xoclA4Qj52cU#$&Hz z`$3HH?hs2!Z#Uf=#KbLIhBg30V}NA*ed0mf=-Dw9SVlcDq+TAd5cTX>*0HqwusJPE zDC#?JXgI4g-Q2+xl%;x1yEK^L33CEEJ&nPDoby564qT4JdvvqWZ$+jiJBBSW|I`9B zh%+6l!z(kBA~N#(cmi|H8F7KJG;{CrH=GL>jDuqY2p~@j z<$s8n$aQmXwgL0Pk1#wF55C6>-SI@Y)JFt(^|wC7grF(&8Y|f3w#>E-eu@f9=-nt# z%t$^k-JCZKDuHQTATs2KNXQ(isj-nP=5AF>PA40`F(H5syt{HhdJ+^l#0POYwF%|q zP(bGzt>PV=6a-0R(ev_>q;zRCe9oyxEm;~iHf`Ob89=ejj~vv~P7RFbLDjOJ_j1x0 zL9^!22RTyJN8rMQ?8f}Zi%6cGr*Y$G&Q>E1`mXX zU;o;|0cREker=|(scltB=t)o+JOsjaaqG084&JWTNPEqyk|yQDX2e=Iha5nqQ|XJ< z1hFTKE1QxK6Tc&3=1p~``eP68s5yBDAvz5(5Ju}$^AW#cT#>KZa2eO!e$9rDkB{*9 z5{7goD)fnh^60RA>>qPrt}KD zR$G4D$Lt-w=q{z?7uDOT*VT#sy+iS2i<^#)gnaOd?lH0J`-5-!99X%!($^gAb{}OkZmHkU9T;W>jQESqf4_s;4bW^petwKPxmT|k?#M)W zL*Tr)1*P4(x9-Y86lQ_}lnEOx+w>L)>M0l<4>_~kPa#EeX4>n)D z#_cV8;y}i8;EJoHiVwHatzI97ZG1d!Re`Ef;T;85i!Y910 zE5uL?VAogs9BNw=BXTie@2M_?yj`%^!K9moqzc|DQ!v(s1DE^gOxsRVsi z%$uB0m5jREh&O&hvT0>W>+xZl1(*hrvcD$7rN-?py}P^(ZaV?c{G^}mv(d0$UFJRW z_x`A4lA-V?E%a?L@Oy8@L*2y=LWe=~O9;O}Ij!mCx5fsy-$j(r`AhG7`uxQ+H5HqX zkReDcerq#Z_r1ve&h_G&FD@6v@x)C8#UTL*avvXSX$h~Tt7vE6dfKQ5$5JgUXBc;| zzeXItW9a+@?D@pr+L1iHeI3$cX_$_hJd`2vqqLk473>H!Nmu{`pM}Mz@;f>@g4dQ$ zRu&E{vP}jKHC@w=eAx883PNb(gr!>&zQ5G{&@=e{-Mb5wRljvDjRHgI(_m!6g%yc@ z6Dc;>)PJ?-A|vEk27ij&>2ZMw>bit-<{cdDYxq>}LorE{G(YpK$)KER;JDCw3P_>3 zxd$#&KdZ%WukbI_xW>2Kz&W;@Ifj}CiaL5ez5-#(vq;*vgh>uX;;q5 z=YRfGDyGiCGyeXvRT0b)IGwg$8#1ssPbL}t1skA#m`e|SCM;G__7~kh-|bIwQH@`h z|M_q5@lDXgVX87sv*HTOF(44X?w6H9QA4M!;Gm&FF{xukZ;n1*iIb+F_Woa46;-aJ z@SnjZ+ORjyQ(s$)Ky2)bpywGZmP=%(Z=pyw6q$;!-(ev09NWtpMa5(M^*^mgU-rV8 zo&eb5JwX7oih&Ax++l5Py_y)p7j(|weQ;on=CSZ{JOAau9C6kF06{{ur;E2n#9uD} zu^q|~#lh6%enH5)B{-NJ1G8H3eZN9BXtA#b8FJhJlgK;fyyhw-kbu{3e-`{k-}aRqaw~!RMo?W?~3Gr<@Rw{#dAfN5B!-YzsymDgI#$jCS(1lEe-$^ zu>K>X7Ig)xT7J{Y;3(@+b_zwawY!U9Um+-fKz3$bKB8_SfzUwODg^p zo1jm}my1i(TdSNU<)2}Fvp8DZe)_a=D=7vw0srKq@^ZRHK;zWZi-u}_qspJ_CV#(+ zbPa5g3{vg!_@@$5&AR6yU?d%;8TeU=)kU_WPHSjvet+({gBes{ophqv3F0!h=;@W? zI{+gKO%|pE@Ykp-I=P5n>&}6Jikd49d0$;>Fj$>rYgE0vZ=-zk{vo>$uEVnTQSibK zam`kPuzgpO2+~83QNnofOfqDRMN-@WC7n^9ko9J<~3EQM0zyTtk@{h1sp{{wPPYGk>U`a{2)Sra|vPn1vAGb74)_Xq~#lU2oW|qwq-|vLD zG{WNjMSz}Auw-ki-0EhAvgb7_eAVP?%(%8cV3Ba&jom|3b|3ctK1faHQQZk?V_TtdW(kr#s&JW>7(5kvg7=sqKEU(Eo2jX z=m8hGi7)vnB<5pj=_QTwH>cib;2uyc4&VM15fN17gg2?QP$ky|jLw0>Huca>ukCk( zd=Bl5+wWDV1SOK#?9R4<6TElQU7_Qx7v=58!YmG^Wok%Qqh7~pne)0vNLJCei&N7Mjj_@Rd*uey{`fJtN@$% zv8r?DpfiX2dAAIw{}p-S=eJ`69Q9~fS;-k73bwO@0jRsj@Q+op4K51bwxD` zAxDP5H#^LRiPI-+#-`Z97al;`=7hVJN}jV;+F(iHy#^@znJ*#h*(I^eRZ1>Be~v5B zA{O9`hc)l^jpKl&r}Tx($x$0W#21FEp(DUAF~K_FsD96tGU%wU80B}UBCHJ6ot}{q zB#M$W^f#r6nnv;ICdzH7CTfpcMzXt9_MDZBEqQ`KL5bX%*rYF&is!tL7#=IKk+&<| zV!G-ulLSVggZ7;bzCo>&&KH}^T!{lpGv{=I#;PiGzJGeS&|kp0veIfRLu?|ey;+p0 zoTC(FhM4IclW5cfH=#@GmA~<h=zbE%1)}_I?$aIRPj(Sz=KE_Zr>Kjs)Am>eDrIsHgOH zQsY&sx6~&olu78NkV+JB&ywU&+BFbKx+&?CK=Fq_fHoKG1!L23+v&9#e(holFEyl&XT&tl^@9L+45;`#I zw=1>b#Rh*oR7m-!{VN!5w4n6ZSsg*Euw9i`e`FB4)z=oCtUr+aZI=g*c%#lpKN!J% zq;czIC^%GX=TxcGoY6mRyT`N*;|0+6e#&)OI|-BPVm$P`h=*qfp0?tQCxL!`^`mSN zv|Kx`X{Y}v&#G8_kczTky0v$B*kE;z|7LBJSl`+ADos3q->Ck%&hvOW*9`$(&UdPr$y8fQ9zN^-(j_CShHkDEd-3llPPVmlmU$KhIMSa zI_6vDW`!?SW4qA3H2cxzf^zm1{mxOt`aNxdv!-+_;;-WSfd~YMo(e7drD$}rwSG(6 zSL)9TLynEcP~e9TPZqK&V4w6*VL{66S-<|!OjdkWjMkq~@eRa4-@)%J`?o9K+anL9 zIBk;;10&}B`HZFmJCBu=a6uERV{D8{B8Jw%pY-hR?dw;oRd+ShPP0zt1TJY+T;=68 z9>p&EC>bGvtS+5#GB~S@0xD4yv;(j6ZD32kh)NB#FV*eE%YZKGD$!X3*53!Xqs_gO zzWiqd;@`Au*2qROwa+*JbX_;Psw$wF`<6PF)wg?9*~sx_ z?pfBG=j3aL$L{sj{{Ac!g7(AjE$FZ{G8&^Lh> z-6aH+r48GO95<@Z=G+XkX@L1JFk%A+sE2e3I3k8FkP7C_ucN6{tce>K<d^w4Cg= zI=lj)FE`$EV^G@(pNKLePXvG^V1l(XeXdWYWMvVF1x3AE<`qSJA6z@NKeDeBSz!gp zQxA@Y$eM{5k|pHdM`mg!sjF!e__jkq%U#UQ-CybYmFLKQtjMgc)RvW0ORFDn4J#Df zDkU921AalN$O!n-U8BAEw8d=DgWJawaqVmaRh(g(g?1k4F-7xQ`Jl$V!%>GgPb{g&~exF8Y;vFf!d^DCwsNGLg(fE zWCCcnZwb?0h?6G@Z{V&$z#=T_Mo;ufm2&f{`n<0b>hK4lv;EcA09v3Pc(|zvyJY$K zuf6tvPSItcniH`0-|R?V@BZp)f!cM!CMYBHQ{>+lZ44V5oRDDX9TLaUk9Jov<>jY) zWV%0t^r+!iS#<7dNzG1hAS@WOffGMNNn^B6G8ri4;Lgg=XD>rOZ(Rasl*Z!m{g)cc z1y2DvY&~^46Ly!3$iW(Mpc9KFmS)66c;|2VaziC2x^M;25`@GTTdaECcUjrH>#`3K zem2RBWY}Jkpu@L&9abulQ+=J|r@2H~>bxXl=%~X;s_jec9~g%Y5YUEd+xZ+gu2x@~ zry>6531G~S^6SOzUSzR8_GqYL|I_d^ARq8(UnJwn1iVEa&fHsYu+ta)-8BA;37AX? zr-aBWyEPvZa~oQQ$J5ppJ1;&*qzH%wkbOYuZM3zuCx>>)OIk;}+Q|5F?GyDO_$H8w zdE{vel%}w@v4C&)s;KzbV-0%S%3USuo#jEwkJW0P&;wN|xC~l(G59O=CawMEzuKF1 zu~t~*9J6dK1|^4aJ?^h5#-kRle>!dwDP+b3itcZ3M!~<7QlL<*1ve|ttb`g>xV620 zD*+t~JNpe_o$qmTW)<>F1U7SXavC1|V|I(bZbQD!!}Ae@lBzAbAhveT#Db`No>Qtb z``3p2FyO;~g?9HbMX60D4v^nS?)PcKbid+*DKj1Jx!l z;{+dCGT3N{k~c58gYgO~kxadKtu{gYCy|`Yz9prup4?e*pxwG~Ekta3S%763%{orw zmtVaI*!=*`gv6!&@SKVHnK_~yWfP4lhfo8MJvRp|T^$+BMyI8vl}w8*u;J!18-6-8 z=2m-Nq`BYSExT*>;?kc);DpW&t5UNKp+k;U&gpvmhh?)3KRjmRTK#Y5$2acom$W<*WU#1V{+SEsV|ya z5L|owzI@T}=5aZG)0D}Uj5z`cA@Vm|aTmtrbuX=f`d2$Wc|K=d$LeEWUtz@3vSCy- zSp$^#FqMUQygZOaCm8<20OrrThk_u_X0AQj=Z^Fe?Ooxk0M_>$zEm+YW42eYBPzBU zFU#49zH)iI9yIsf+(xS_7Lu!jKx<~H@jL{e4aKFbnE%e1U0R$Bq!OB;&DdYv78lj~ zEJqH9Fdu)b_%o58KV3KuVqJ5Kip1W$VZlAM6E!4h-+Q-MS*z;JtlzwO03us&i<(pMR>2^`sp$U?!n|WI}36R@6mNKt= z{1Eu$UGz^6?aotDWS5#pip=cb!mk7Z$K93N6gB5JEBk_xSk)(&DESLN59;d&yfq_9 zusX*BhAVBeatr)%utZ$X19GdJXG?~P%#fnww6u>PUQ2%Hxui>aUf0pCsqS`{nKy(5 zvTq*f91tcZnF!}pCUP()OYL1oK>cyDF>NJbaRqzf>ifqR5fCD8o95!^P_Dn1nFf#R zlZ}oMm15^dX1_TX}p9@@s+P==cHx?6F#uKZ*&KvoQ zCzr|S1CyHH1+v3n;R8Fe5})n9Wn}$ACs2tRrKEnK;(?eayx@okU$_0kX&_*sM}z>f zz{t(bONa+R%2S9~D@|`B+%IDZ<1f926)o4JpQ(0Q)of$CHtH)}RZ%-SN;rOMMK_Q= z;-y})hU!y5;&ouqY(IH6o+n=cCRu;i^5>OHPZftq`F1=1a{hBKSE`5J!at`i_== zq!j2!cY6Y%^17Cm>7{I{CGwocK=o}Zo8>OWTn0QE?1aQ1TnWWPhphq>rn_EqZnDA& z#8^|cV8Fb+lY`E*Pm*bn06#wir8dm4o$N7Z$5g+mnP&;zxeqDL4-F~7-h?KENc0vy)++e< z_)`i<)Uf?s=lE%bm+suz;V-j0pJc{&<}n#XfZn3M7&-ni$EwVAx-0Ts$;~Xain|A`F%exug6c5(zU5I)ry_b&QAA5ywfa_IbgXuWueyq9zCAG00JqQ*VP004@XSNZMJs85kz>uv`)^1{*b zOHQUEd%rPhIXpcdSs&ys6|ohuLK+;9mL32;U7a*~vB4PfmFTz&mQc#)l5uBZPO@jYyCCB1I_=H;1p%g zeAapu54#RAg!@7&x*D5bx)137r(#QvFMJB(U;b(Kv~0i{+*&+C^tmIWV&Y*v-@pG0 zC=z)!b=g5ca$vOL5>!cqgirB-l$)7pA?sR%-3mfUn9XIPw=RR@ZSt}lvwu?3eaJS9 zrw_ilqT7gdE)7uI#Omz3#>5%StHMa*moE_{B=jn3k&jq{AxV+s*)v9Qa4E4N%|KG$DLbb8gr5 zAIw9m=On#JY;Z75;L-Z^WX{v|SBSZGO{E`-igDC6=U1RAy?m2edMIVxH|)Cq-%lw% zzT#V81PZf3C4jlicXUXZ-Dt`bftuGVHos*~&G*XxUtCIX;H#Pc{2qUQf3H=553E)~ zBY^6;$H|QA!O2Sk;jj% zEM}1p*z?!e zBz1P-`=1F7|M@-NnBM&p!iV3bcoqA9 zd{iWW3i{{Ue~fy!#N$rC|I`Bf=cWGp&;Q#y|8EZbpU-*vC7=IEe5Ski|LAS~fBse; z=Hz4D>;RjA0Gs(71fmC-to)k$U-u^Gt`9P&6eWP0o&BF>_c%xJ|H-<8W|g@NMs?HM zJEUJUjL6UC&CC!!e$t}!>dE6ATsWTL=tva|j|}yXj6C?j`sZEu^Hb0}IQ(D+8jx_- zSRn0=W7#o+{4!@g_@$<&E9cZ2Odq_zQN)Qbh)2_Q!uLQFxYoAV+nMMuY& z+5dRC$-@817N=AA5sZY=b78QA{IMQBVqz`!o(2wfk9{D(X#BROn#pHqXjW65vB$I7 zA%0KQqq!`>Zg!-uqyGlz0bcyHMj<=Uu(S1#H~uJiwJ0|s89M?9nd!i18DvaI>_<2) z4&+W{XP4j?WM;Cq_1Qv4`@OaGr}dL2fCRcTO&$SIDayil22;(M*WAvEl<5ZrUFL2< zPC$0^p z_c-UtZO6-~nZwzw`v`ZKO+*JN3tTv+xW_Eb-#~x`G=W5mvp7y23Z~bY7P_5_Bj{_h+ z}NqHK1Mh2eqTl>Sr0ronJx1&!}Ae?2WZ z$xQgJ!z${!zaSB+xBLd;CZOQek-J1^N893&F%hebACS_)SP0YtCmy)7s$TL-~{4nyt^bwDG%4ls~Pw-$K8!r6ndbi(r33V2nbQKr4d6 z@(>7UX`qA5_!O;HymJBgJR54zmLS}fy7utHl)2FbQ0C}%q|SdGIKdK%dNcG0xVbu$ zQ~i9_Q!A3OZ1^O;NVzmAb;B1#dLVJ#TUCoU>GjDiC=z?8@F6u-1!ZzsVkN>LPt7x+ zv@n)Hu++Eb0j)+pN5QN4H8hI*j^*w0a**8n6|yD(hV+b&r$I?%WxH9S8ZU0AJqDor z!AD|Y7yu2H(Y-+s1bf^~78cRf``}fM3W7yUwEvQXj7}kbN1y`0X5ad_(*>%*7koy# zx;`*%k3ihj!hQ@O?{JX?`0lCIc8*;!Ni!*ZwMh0nwj2>9b?Bl}5zb4-olbAAuBu8X zLXY%eS}wC&r-9jY3**&CM~)y<1dH!m@S=@b-A<<3LGwkX{n)2R zwkS*sB~1mC&ro>Z(9n2Z^iIe_02?8TdGX+#XUnTw6BLM>%$$<*yNISq&AJ&3rw+6{yhJoE84 zYY_NB-(GF?IgHk57uS4*Y2)D%tM}lqUpqW}@t10u{l>kEDbF>#545sCbxzh7kz;oR z)+bDZYOIG^{4R5!d!*2yCi0HSz=}&Yt{oRafU`M@Y~9#;?W@A_(EflH{8pq^oi?&c zjvmxBhOR%UD|z>hX3WXXz18OIx19=&;NTT2D?Bcjz3Ne5EWtPjFi4-HU9$#A&IV}_ z7*Aqb3h&>Kf3L!F-Z9YjykL29(#LjHt+v1E23$vQl6k13b1(bKm9WLJzmDi{%GzNV zBI~0L?(yp~Ah@ZQ+@}dA#Pd)jD({ZT(i|aHx#xB#UC~CCp9g?~gJX2mVg#oh#gP`! zdQK)VCg{FQrI2&su(<`~6|p&Vv#W>DJw@`)>!X0aTft8!hq`GzAtMcQu0#9%N0OYh zRe(#$s*}-?^r35y5 zK@&jM#he598c-Mk0FEWV19Px;%!-NBmP;c9!xjFl_}k3Pk}%qT6;bNQicwP?*Ra46mXlfcs4jUIMmOW|ORsI^U2;$gj zoRiMgJ-rS|Y~TewxztaN;Y4~B3?mE87tx%Y)OVKpFJF6q&umXF%*B6?(g#R+Gz1h< zG#kUxkQC8SH-^iqepCyL0xr)$6;@^s-^qqTb}h)#Z*1S;vqyXZ|S*5woMj zI~iF^GkW?Kb54`Dh7CTHeVH%9wq}2u{4T$7yif9bG}^Vg2(%c9NsOh=_dh{735YgI zW()s%D9@&5;B8h`mP*y@cYPw%!r1g1N34Vj? z2C_9{lRg>)wuY!JGUF|C;=NQLXJkK^76_7Zi;?25p394<#$l%8k4XuiYALGS6Y zb`5exVykfa)0Lo{@$2%%d7!P0oE14&>Xr^qU;l|Xp6&(TWShiBi?(uI*BJDVs+=aEY1MG;Z6{^>km~J#||GSCMEw&YeR$$LK2#Y zvxv73PFM^0;_zL}K?h6Lr%jl%);2cDuMK6Ca=yrPX*Jj%?UdaWDZhyUcl@uvtW@7) zxGs4JwtYdaty#9m?c&_+e9qM7<>j@t+W2d<)Oy~6SB61U+f9fNm;^mNy&F8vm96_$ zdV1|1hrOxVUF7HC(kcZ;1SOW^imKydW8qysJC{Q*#7=5Ew>9`q%9VwLpw(m^Tu_eS za27U4IPG0YH5BAA8zQ?e9y2KIPbycO zn3VTsPQ`XpClmum?AD&m0*)Utmv_lr;`Z9MHqUoR*Y>!o3tqk=ozqIKLhwvl zj^i42e`05Pc!Iln8YOIj{kn__xwBrUtSzIcnxj8|#&nKkcVU6tpWAotgokH25~?{B z$QMamF5jmRg~hw0b~)#Drsg&+$W)v;zM|Jy4P}2WGdDH$&yc(kup1Tm@@_Aexl72M z^=I$8+@60is&BmCvlsfqU}tTYCZXmC8x9g->R}|rjFK!AVE(oAP=Amu+knM~mY|Q==u#=Z7b|S@ zf^OsLHS%MRL#%Mg^ZmW-7YysGUuNrkEJpUza7w`Zs@3b6&0??BrPC|^GyNGW^CZ}K zZc-&{o~orUFWb!BjkiNiCMM2Up7ndAEBuf&tpV5b0;9l)xhKveC(g@=SCjQbi$&Y> zITu?GErmFJ8v7eX5`whLDZaBY4`y7d>*?)Pg=AYUbhBRnLyiKb`AIRjCy0|`%M3Lg zP8yo`uvnhiyfRI1X!tGNdPVE}*cPq=L(RMiXXrcjGL7fJ#uU0zX@YuLfA0&O>900; z4xf$;ji{eS%2QYjl|F(G`0BV*Xy81%eGg2U5}gn8nP%(k);O)sIADzRMoa31&ThWL zc0?M52nWQmUy?Nnl!@bzF?2FA8aZE|xsQnEb<;Myjq&i>rGNZ2CUk3?^U=V45ethf z(v2Sx8s!ui3}|w+HKdP0;f8uU3&y9BT!+WsOw%`r>FDS<&qh>#-L*L%LnFkz3_uzv z_|n3h>`O1S`X@qlW|}$OlVk>>p-b*wmv#^7+8h`>FWRk*Dz;&EygA639{R=T8F!~y zjL8t>p>hv)pc^0?bUWk-2KK)_HLSnX|E^})H(@;b+K#UyJ>vrdOC$0m*RN|C zTRVpDck^|P_oj4hhd#VPMqFpLT-fzXjr8QCQnm7>Ppe>lwQ$jm?izuNL326P0Z^c$ zp*@0o^FF{Oe!DpI?y7r61_!}6>VV5d5LWNp2fsa=EPgf39e)h-fUG>+_-gFWF>=&btC z@iS*>*N=3a z%rmnvaGVmAlBLUDuOUXSR!d4rWi}gj##TJ`+;>Ke!*`B7x1dt`$1Q`~H%58uAc_W- zm3UAnuRu!2!9z@E4-UlMX(cjMspwXJhH^6C5ikr_WX?WW!zdkpvw+#4<7Oum$rm5M zM{NFz!{A9laK|-eR|o`-7Zm0yoaNzT4Dds=L}E<=)`HM`XUqp_{`<^QU2$e{P8+jr zk9&Fuzt1{?7egn_QfoiC9K!6VFi#;>Ht;-Fu;q8fegWlJF&|U_&H}ENU>L*8=gG!w z>JR4~T>;0vg~r_Y)B84ipSeg3(&Um?epTU;n=!+%L$v+_5s?!PpCUyDLXFBd(vCum zj8V1AC8?SjWWvI4hjOh`hRf4WVC-spYNT zPPli3h2P1D9FoEn`y3*FVEuk?Li^#tA)_Y}gn5eO$-5_q%zfF4IP3h}pOzQXu*AZJ@4DD8W3oHNqY1eP#pR{|52Wh2vgfbc4@j#wm08@^WdsdiG z-b83QZQhF8dDA};@c#Ygh-I|wg9_WzA3%JNcIOD}E)O>G>8I+T43@r7y!=^-|Hx-Y zx6$wFD4v5#W0s<^nHl5hDHrXddvtW(o8#?z)9Y=oY;6suN)l8m-w;vnuUxD>8ZUWv zW37BnzJwUzBPQm5=ol%Xs>*BlX<&5JpGlGF6)P>R;=lGPSom+GFNtj5G%Nlb7q=%R z5q{t%E zdj|&?-KM5r@7L#_e^U>tYqE?qyAfT`yY}0u7H>O()4D#Q(6m1^U6EPOz~KA#{EJN0 ziagojsmV1Tl(u(PaFii}y(Inn-dI@ z5!t#&JJy9TZ3@$mpcE;C`HUC5oP%Jp(&Dtc+>@#LNJFy?k!!F>cK!Ni%-K_Cj=5tg z8JYQ@jta#it>pdj9A79IoLx){j8^Z2+X%$;r!kn^l5Fa`xUyn~N2 zI{KxkTILw{Oe$88%zaJB2jxtg#&U;;*jw~nTpU$)_VDs|>`Li((9w~fBZ_4NHn`T8 z!^I|G`zRPdW+%tkHZ1ac^h=q`d|WfX?fOwz5AGg?(2)o#zg&)(h=}!cbxBRkkh<02 z<;$mwJ*_Ot((~^YGLPRE5ai`qo36$4w$}G$X zf8KZ(ZEK-^Yw+HV4S3%r)#PZD#Vci-sd9p-zPM}Gk$~R$$C%La&`Aqs01~bC$IpjH z0&7ie6w4HXsk}~hIr<~vVIW!M8npP4L&7$dR3jv)(cd~!WJY7S6&*>+Ikhc=l|%{U zOJ7Ii`gXlHvsy&Ot4XG>&MIHU0+^T#pFR6=$#BQX;^!68Fuk)s-?8#_r<350($s!JYecCX79;-2FSYI%VaZ>mO zx5!MnrMvqYEIua1ExpC5sM2x<&PQiMmGW6QqCeh%@iYSUjiGK=rUu2O<>lTiGjt!E zxWp~eO| zBy3k6bRwOicL!->q zq02M^laekY@yKfjwQ(*_xcYI#tV{<9^ya?H=^S~Hr*|K!y$gIu{E5C9s4L})Q>?_2 zUn-IFSfGcV+RUe_DT zr6H~h#uAwn`2k$40;jHIjAp0@RLM2=p?0aEd?kjq()njykwotcII)>+~N$(X938c6C zk`qxj@DlVb-(`VVWSzPb6F?~L8SUIF+UoLkYdC)%C+}b}og7=ZW#tnQf!-0#ov2#i zqqdB!(Yepa$f(wKVZ~e#Efzi$TxH3qd~d_e&tcBIP8XqFg1H3cED;ED^Vl5kG&;<` z-?y9nV`ou+aoFNs7gBsN6DR7S-FM-GsL)WUiCuM6Nhne?%yNFn8@A=BELi*m_yAPc*2i2(yU>`yHK1%L9UkZWX(zeJc|no7JNxMO~E*cLM# zc^oebz-o}(gi2Q6<+e11w2NWPP7*FB(r_Z&5U?z7?XFUlj^ht{TXQ#@%92ztHE7uN zvqPr?IWFayZ=4Xne1aGe8P86V?xX&j_BuM(s*Z7$)vZoSClxYfwN~E}5a<)1^U2S0 zpDPJDTt8GO!5IvO=TItE7`Z6lqGxFMBlMZJiH7C*JKB{Yhl#AhAM|Z#2)8o_uhP=` zE*_$Pt~#&t57&ba)0mlERl5fDlb_if|1jWKOmS6@jc%w0XD8|sc2@3(c6a-I;d$RlA>jG}eti1G zn;A-s*~*KbA|o5!WyH5e%CpGkbuMFImN%s4+?i*hT|N*=!N7GDqF?x#a2~=Tht-Qj z58CP|DM`1SH;lXvfk@Hz~C?n-PC?#I?)X~o2PtIUr`!#3_bt*dHx2+XX>V8k7|HQAZs2HoN~LHw|Eu-lw7rlEnlw_xzznV`Kw z>rm&Y475l9n-F+j38J}w|M+WpHdyYl8!V`}s+WYd1krK}>%8b$9X}^QLw9NVWfPG& z8O$kUf2|qyF8EA3)nlmpQ`VLzQj(>d{#nU9ytXAX_aa*@Zha?gKmEc3mDHmzCUj3s z(4D?$e(4VRVZSH%0fc5_!_q%9q57)JjGDf%Fgil`D^hUBv7U zrk!zAP0Y<7AHFtZXIA{+6~R{KwEi&L(>4l3PmIfR9>IC|>_6Ed-s{eS_+};~#mi@w_3K?YffF=T0bF?c%%REC7lxM`S>=dd zeD>6=IE4p}MEh{Nmc~Y}$jBk*)eH~IsHmuknHfKzCuNYrU2pFczJJdim_(_dHBxAO zAMic%p;Au=5tcSZAvm}x_z%#(wjQ_{FlaS;SC*2UJx`63*oK*j-zW7VHq2|u0=`vsu_&JJsf-N0;0gQWWDu5u zjHxNpVD|5JhdR-(@bozGdR5pxdZRQCx(J1{8jE9LqfWKNf+HKb?)BT!@v=XfJ97N| z=$RfR&MWHaT_3#Yi8+e<&<;qDcIEMnG<8Xf((#k;{4=X_9eSiL|5`NN-0Uk^e|(C1 z_0RWZEEV2h`=0Z^Xw1U@*S_*u9NS5~{RSBswEh<#jDF-}*Z6i5!&?mK0J)@gu5dbf z`kIgiGAxhm1=DlBTq`ug)=;C_bexky^Q^lu41WXr&;ni58yeALgBCe7H1wOL&rOW; z3u$R-m#LnsUXx(bT%q>y@mU!@rAG+Zo~3;>`k$uh3jWD|&RKgbIXSrl!`byGzp?-I zi5Px1enI}L)B5jC3dOi}!1%9s@}Hj)eSgyj)ay_ry<%Iw2wE{`k)e@ZUej z+h31DHjP48nGZ$kK(?w^i2mX?%fNpxgFjxDQ2o~SAN6bD#?Fq;1Urex15)bUjqaoO%Q_;ae2N+ zBPZAInD?4+B01Hxx4N*nI8m#L0C5gpU=+MJ>GzMiI({ePZ%mX8sZ$V~ewn|DbqZjl zi~lJ@E)hwN#R>)+!{NV|ff2RX z6~lAO)pbDz*V@`z#Fee0{(!*SBjGUFxhxpLYPu`|NB(5x1I?z~j;e3_aFv2cPIsEW z$eJPM*2Yc7xb z6@t%QA5GXwbnNWamFF8PC@y^q;WzaSEugYDM=q^bNO)hm3GJYk97mhvh;kR&uK;Sn zlk(41bXXWZNXc4$V*iWyY}((4g%mHAcXCF|)0@feuwAGYye4p+3Kx3e6Y~)VQ!_Kf zP27MP_h-EenZa1v3($cxAYlGFF546|HPwt?U7pNj(-pzRc=+PQmuXkuB_r3*&wbp* zi}bP4fVnc;+MK;xT+37{{B}IvQP0AHzGi7}so#R{*vLeex~A?abjA1$GWBh3uTCfG zUs3W!1s3z(5D_mQu1^uCZfQim4i5G^=CC@-h*W&c7+R6Oa`Wo6c=hz$o5v z=t5ZIbl~6j>t=~Nlq=z>;tzVz;(#Yls6-^jiQSxi>cWm+d#RZQYH);U27c(x8(z7o z#iUv9q21ArNc+~&G923)6Z}(Wy=PGW!D`29V_XVo+YA7cX{K(_eo@Niuv*@>gfZ{K z*e$g~c;+7D=hy zL(=MU+U1JW$7Z($?_TocUBB_twFP|+8l8ib!=d~ots$v<{vLByX4I$YQ0Bh1!Nt}5 z23xd^lsn(LW6AgoOS5F^5OW*G1C{nF6r{$}(|2v8-{rc@& zm80kRMU3oENh8$vTN~j63ce5c4O*^Py~`7jsH@fL9~{&@ihuoQOnngY7eR6ObhOcS z<%338>c$BZ)@}DUXE?6I+Q<@J#?8$<;lAX#m5$-HJC~-WwWAiJhZqRh1FuZav&6sQ zA66Qiev5)`^R(OvY+10@R|c21Y$84=KUv_Rr5(UW(Q1^3x*f8iDGL+8rBHJ09vShW z_ASGg3%Di)cQ5xm2L03Kxt@s2OAlC)@s29U2Pa%LyRz}jX+FC7+r9r1!ySet9n|U5 zC$=vGM^NYq?ahi22yW+{oVtk}FoV2`(;GEkxbBAJujo}?A6%n`zZcCn_@2WB!BUUb zZ;*9jef=x4cxE71wYMVaAj%mO(#ktH+T*)`p)J< zSaCWt{ZKFcSiI-gxB(nH1o&z1C*ZoE)|XpMw{Keq28F+_x;)#8a=Fg`zkse;GrXt- z&#w{}EQ`rw<(8N*(&bJZzT6%R*|8Y=K}ne3Vd+K!z#?4o8=sNxNSu0~AfBCr+}8>G zl!ex#Xam+iBz|f0>FNK4!GVkDQETDrWs+=4@#?I5c5E48Tf zU4qLm&_PdD6H6|1#225>xR$I3{Qg5wnUPX%Dx+n*9gn*;eALi0?eph{s&rgM+s=Ht z6&qI#5bLC3szrlVl^{&_DbwYXqfNeYG*74JsV?gy;*0jbey_w;??Q?rnYiayNRLUo6(SQ6HSBBO)uD%(M>q*jSB!E z3~Hb7k<*^onjh)>as|oH4%VC%TKds+@9Pf84?=$(4W2dDtNYg>e~@$(h$2`II*b?s zLPC0nEm^(;jxI$~=UY`pudn|T&c3}lVKSgUEgTCx^9zybQz{x>p5w^`HgO(PPxY4o z6toQ!y3OWLwAI37-{5!at4oZ-jjMpx5H`w2+bMxP=XH9WX@J?XF@D)2sbEh9m{KeX z!GEvqFBGt}=!CR6JLCfye%`J+bmT_c@%bZm zn-lIonwlQxE?8v!yM!t!C@T|8lD$iD`QtyEE-LlWf?qV=?h<+;$dy4tc*1G=PTE?= z{hvya$O6;^m?jDjKI_rKp}h2k{Zz#z!&a7jnj|Dxa3ywqy>shUntF+NvEj%~QBh3o zr;kyu7yRh6iFxJ4+IwU!2~bCOc6SrQ-B~)qEFW`mMM1B>yVO8ku}TS>qP|_P76=gn zw+%69_+xopJ*=0Q7LGM&6-Kzo_pGGpmv@SQAN(VlE+pLfi2MNwix zy5QJ{+}uw`&ANg-H?y%xkLUg>s-L=dGqmEmUp?h@&vUCjMYb1llcS#kKZ8bVJib!} z9To`(TUlL5OMocWr|&8@e)`j8e#M*5g^=}UtfO%57^pZ-v*w@K0Z)u@XH*p$mQxVs1DR;&eM#3?B7w-f+1l zY@e$-=}=zPpW5yWfEB#8w_pTb-WeNrMX?Zq6omru?2_*_uxBVX z&8v|a6mWCG&B!m#4iWF5bPR-~39xS^kG5(V!toMuS=`fk9wEepq{z}A+3&NH-bJtFXa+}xHknb!k zvXu{qGpHCYjIaSSiB7-WQN8@9-~ni0mikk~;I%EVI}m~G>W#JA3d73&AJgHl3K8*xBsF!NS`aq~>qL z#ApCK2dvv05Woxu76)02pS_xGwXVLyBcpm(3~dFy>E==`A*5*aCwnT#@25XPW2BcWK91L$(W=-w;d7P3N1K>oBxjnl&x8_#i$nOZF z?Vj9vDi5$#NnySSHY7i$bp0s#9QpkIa0fZrdK!D+l^sEX>&SEDQp)8;<<8hwH+i3T z$|)i^i|KlGg@>a8R_DB1%mAGmIZMYghcLxWWCR)SypJs1-TkB7N zu&;*FjWbw;nby{QhpV0>vlXHk>v~ zb~;B>tZZeAcf+ee>Jze)J)**nxvH8#aeTQm@!V*l)VsqTt>f&mP7q1gKYrF=wp=~J zZPQ-{gqkQeT?RY5)w*WXsC035^`RxldyL;y_Uq+X#(O^4nBdl5V)(ullf`wbtcVCb zT>3JL%(yNPFjyibr$Y~ISlAmB%24q&Dh*N`+`=h`NjWwXburz+-lr2-Q_$qe&!57G z4h9#uWU;yF@UbqBb)V_hUdDpXS)Vi~TebhY)4}T3u&}O(+tm=eAhN%0rm>tHJO{-nZRc#O zzoYIJR5oE**%u?q1gu8?E))JYzHHE%GH_A#1YCVV+z2)x*T}eAyfEMY85{4*2&Dvn z2p2A^7tB%98Wpp=w!4PV#-8DVX^7&T2i3gWdwU{Gkt}vyOF+)FTHW_HUCU7ISE&4P zeL-PDS~_@4pJ_#0Q87?m|65#KP)87{8R{x?3Lc=hw#zx*&xzL|KipJHFO^m|CW))O zL-Q(N80Hj(3PdMamTZ#j_PSbFi|xQ*iGlS(85oVy50$3X){>EuuJO9Yhw9u3Lr;+F zf2moE-xfenX>lH~VF1E{>fs<6w=J5l1vRMg$AR8jy%a$D}i(XZ0NRDfsz z%Ch36#0Gk2C0aN>6)uF-UYjd9n1 zp&qw+c0gT*_V!wUGz&u=l<3DdT$t%5-l0rPDP8}>17{7Myqm7BTqVZJjh&q+{&@sL zRJSiB_R#UKksRWAqxjGod?KPI0I$U)C4Ylr8&|zr2A<9wb*_X>K7NHNM*$d;xox&1 zFQ1P(^RfL-lyUA)aeh{ERAqI-eg9dnl4EXSYcDy^(O`}d25NZ%MhxH;6sA$ORcjup z*)!CxLlxQS2Wu_B>npN2^06xOTbf$3ax6?u1HHYirZO@N{DskpPk#HuRa3 zqHeKomvAxh)k_0mTX|k?2>O~+8hostgu1RNXWW7p&%N_4%z!)|?!gijXgP17uc6}B zBibytXm542i2>pmEM{VGlueHH)d)tu4cR15!xRCtRa65*!GEWLnPdi@6B z&HG@Y8=EWY=Z&N7HbA2%V$XG0MOJw`2za#Fwv@3R$WD)iQLda&L_?KW+; zMm$RDE|Yc^>ol3tk6J0ww$FSv==AcnYd&<2)VQ#xJ_kwFAj$bqb14n&ghC`V`?Js# zD0!AhxT!bp>LC?!jfJNz6hi>vW4)}uSd0lJA|l#8cf@x+a|ij7Zl)eNoa$p?V`~{s3v6M&f4^JL$cPJDbr~SaW^I(7Zk04j^G(0cFyJM;)7nVSUC4%+=R^UUq z8sFWo_+mywexxL*oqh3F1!`VS?rQW#P4Z5t-9t zyEq1v<6(Y#7~c(Iln#DEO2%7`d^hca;Bb2PNc31x_(;ZcMl0t=&%rJq{)NJD)Ypvv z)cf}9$S61_PYw)tCPcc*z|f(7WDm9iH{4ENBH#&mITvt?jzb_WmQ3|%?H;`DD5Akc z*;Xg}O$~Wgb4?VFyvSrUVZa3N26=hvA> zXhX92d;lKC3NjxhpMhS$Pp{J*XzxG~SP|KSPVe2$w_!TLk#1XK*yr<#^Za4iFRFFn zF!1X*1yn%2*9d+m@%`eCzoWXrrbQ-@E}hVOn41j_`Ubmy`}a3^G*<;K&TLcUpFBrd z45%BvrYE$~iDNx+4!<&>phx2;=Zrq1@@BCTRHh_p~emoZP0*Yu{rEFlo~sSi;B(J-jrK5r83@_S)H<-F!SM-N|}w zE#Eg8@Nr2=hDM)|rIw&kj~l23cUOYQh12wLnd$FnwirdvBa4pSlMK$RrKN7l82h4k zvsjtARu!>t@7Ja(q>rfA-G`;%4ctu(8cJpoPKU6LuMMasM8Mz??Cy=n%%d0>8Hu9s zUU52a-UCfS>h7-%f1QycyMsruapY0k8)E#c>@;V+^7%{&IOpO|#Ei|&TR;{9o3Psn zl_jwHZ5%7gYTX&hjTZOl1w46ix!^k;PSIw@e{%sAz>d!JWZnSg(Urd1w3eBr8Nr&g zy|coFx&q^a8%E9@ADQ`y`%pb>b9=i73>QTX?ZzeCEg_U1aO4AC5Jz9J#&Y~`+?#U}Cr0oLnN^j-c7##V` zA7w32EI4IfrqhxCmkcB4o1QTYu{p%ZzG65a>vR&}zZ(AGoz;1%CM)b}ra+eW?@XK= ztDtsmRv=F&ArBZaz`b31`&Xf47n_*SjL+F_gp=1>@@a}iLSW+j*2Hl9W=M$4S0A^H zy_R2wQ9yCs25@kH--g|EGD+DDgd^rtwJ7=$z-}fPXzC{%4e;GzVSTce?>^K~W;)fG zt&(rpSMO`J&|#dDk~kqmXp0}YktvZbts~nh9|YUb-@^IseNN7!vKsjSw!h{Xur8E|V&Pxlb-8>Y3;5Y6E+I-ZQ81s*X|qg(7|vGusYp9$x_0aTAYw3#pU>vJ zRcoDq(gK`!P7*XUtm^G8KG(hUTo9gIjfG0L>ItcmLpq1+T&X*P{~$-qe#+G0fuzTC zZIlhSM2QT*C3Fz0UJq&%jpK2T;&=5OOh?`QxnURSQ5dy9;aygaKY%z4qYd47Er4Nyd+_Uz-BeZl}IV zb;p^Q168~6Yoq3tT3Ie-qj4lT`39%czWcRnWO}FjC&p@&pb{)}>K1ub!N*s_+KZ+( za80`|?cVXVg{`o$B0`C)e4XBB6Wjobs+CEz4N4@*{@PDx<8?|UtIU0maX|HEqSzd* z{(DRfYx%2?HrY)fJHF#0V(g%UbWjK_9Ii3vrKG@a*Vjscs#G1nd7vJ@@R zl&KBVJy;%Id;Q9hfrwX(n1;*h@0(H&S1O4`gNVe^sw$W|yJ7|?D9q)-I+gj@aZ7s^ zQ~x%2;DLQXuF}dpAj{qXZlRvq)3#Vk_WlJ0ct=}&j{(cHuGPu9cdS^-_*RcDq>_Iu zfe?AHC-<|d=?zL{bT3s(LSp`m((RjwNZ)>(V%A?jsg}D1fQ{s^tE_@x%XGR@#boAw zB8Z;`WXr4pCLqOP1BD-c?B4$VSBm&Pc!#et^?X~JYd!)RJ#a3q0e zp+3X1cOZiqjJoAru_a>j&Szz&ck0tRJ(PIbcw|3#b|b2{>1Z|p=veipp7;~#ibOEn(R^kO4x=A!SsAcc^puIyh=sgqMh@t zlq-xx^C@+bH5x-CN)zK9h_r%ll11=GQcUav$e{ z`ooWn(4v%@g$s;unEv@`8Kv7QeUIXj2xbXbocwaHTMdc?ploJyQyl8+8E!@|9^#kL zptO_CmRP{zmI7>6O1R7bi}KfGT0%wM6E;P$n@=_XYhZb5?KSYB(+}T#THF?lx%`u9 z`REvWWOVf4ept1D>Nh-d(5>&Jl;$n8F(5ih+Brx}9Q7cRvTiPqv~|_;ji_*p=k@zL zR`|aDe1A`YpM<$7UD<(F;&7owu%Phz>`hg2q<*$rh0?$WFF+Yb>GB)>?Y?)8imgwX<@zPXb#(j2~fg z8TeFX(4#$2-qjiDr&;F~uc$pWQZK7Oii>x_2Ew?Z;3*9Ju z;$7;PyyeRq=0j|2C7(e3B0EOVp7rtuikPH6BL#)fMoEBcT5njr`?<8^>&F=nj?FV4z73a&hkg zAlWr0P&<5B9q_x6BJ|rg2w!*!=MAs(AsMc{-mksWgNGpU+WzG3>eAhH7n^DE_1o!k zM^Rl$I8`4#ejG-pRQ;=<8@av7^;TS5|GaFB@@y07{8=dJ70@V6ve(_8*K{tWoXP1chSBnH8v~irCV{teNgQCxCvcm4o2(BIwEY_?JoOCIoKlk zT!^G?Z0?MVD9hi_QjQW-fe; zKpBb+Rp&+u1fqYuGYuA3EC0VQ2Ivh6;n8XYk)q?yBWb7I4JoKH#6<+MDNYaMb<&JA z^~ZK~Ds0!7+S{WO#O`1Rylcr3{xdQ5PFFXVAm?_7Lld0aR+5bhDN(TQ!w1FzNK@ha z@w#6+xuL<=3qHSiE_!(xi9(ojbr)8#dGBC9;F9#WB0Q>VbjYMAp)921{AMGBi(Y>8`2i;wp>j$qmDgn%vh zZ2Hlwi1 zH%C|X{^R_-PVZ<=e*PKhH8^vOvZ>d;BX68q1$E-Hft}mR)_SS%qS)=UuEO5x=Uo?k zCi+4nC)5&!ZDJe9c94zz`b85yKN%UlDDAA}Tj-{%t6Rb>A+g~0ZK^i9q!%^>iw;E< z8Qt+kL>5~l@Ol>>w-U>@v<0dK6i!Kd%0~+|Km~Sia++CO%(>&{R1Vi*roroz5XC>4 zAKmo%Ijy#|4{>uIl&trPS|W%Hi9;97#1v@Sc)Jba(q+HfpSXl6xxo_{D5Xap-76YO zB7)OFXWv>o+Ni6crhoN9+J?Qgxh=gHJfMHSX?%G+6cw<)g(Qb3#Z9Z~i|tyO<;sAP zkkIeq8;Bx#zB-dSoGDm$1HalTk2+?90FaGBJ*^j=vmBnBlr=nsmxm*R3f-y0j>wM1 zqow3#`jUv1|Kmetxu^eY{1Z=fEWfMVnv0bC)x~r8$0FEvz3VAWR80CBNL5rTjJ;Y4 zVJJK=+&v;&gFr9IHLJ=$1W)vw2?*7EuK|XEo7<^3ZP;#fGpS5iWXI5V+x!R1(KE=R z@Pz`wZMU7Si@6{>1RR`lN0uLh2G4&P*uN^k^~uwy^L`qHL;)yJ*9Lw;Ic$er< z&&)Ir?%nGEefup=n?Qy1=O53wu!IgcJP#Lac1UOI?D*-7p=CxbmSNpnP*kMk{6b0~ z#`m$!RGE#O==-Bydyn#ePfW6Z*<7;dGzlVImwxpCXH84%UK8{MOro#k>>a8-2h`~~ zc7>6VkzkFJEyUI0cwrvCpZm+ze0sw{b5i2;kWw%|q^b{?PqZm5pq@7#rjyH6e*!ic z9nmH3AQ)PGWWG`Ln(WLU6N-j%z9tAMt(Y2$S+DQxWLZC5S!uWKvclh81mz)@{@t|H z>POJ|Pv{{A**9rccrw|(^Wv<7L0Uy+;cF?yX5M6X+j=!6Fe^OJ zn3$xO+xNeA9{9VC7|4Opd&$>P0bFlu_s0VWcT&@{Z!}6u4i(M*^E+*YH}&neh|qtm zUJq*St4YQ3Mk=KD4nmX{Ks14XV**M6iZ9rxq{A2mwl*I5A~KI}BSWc=ce-aehPVK9GBAV-6U}xevel95Dog6kWB%i5h_SrtxvC=Q6k* zkB_-k3ws zWHhT~oGrjV!~04LHn|@bbG{W!fe&I7*F5Q8D?X#V8W`($di@kCNYvhZJ|nh%SXmh% z$P_t0H`jy|4addN>k(L<-K5i-{c`8~`T;meW4Yvkk{(#mqAt~^7#xH>kM5;E7>NyV zeE%-d)gdltLqg#T7yUoyw}D>_dP^89Mfk~C)hqo#fF}klFaL7e3PR`=07Lz=-^v8! zEWxc>>eM@)Ftt9gT=OrRvsj^26U_PuM&~j2 znS9M|gF~IKT34)XV(nss%qn(*dTygPp3of32h3v7F3tJ~CB18E^W$~6>jR@}k-iJ{ zfhCpm(WWoD>_|5;#Iu6MVp>=4*SmUARlcO=<{gl{U@yFAV5eSYj8mVh(a@!{UDQ&) zRP|_YGJ5JIbrA!b)X~yCgm6TlnptaaY%qLA|D}TGZ~}sY#cu1?JLu1CmWM)|iE*h7 zPp2Xe&f^Cwnudl{b?q!i9B*M`mssFZQ!ixPiJFie6`woF$T&V7YH4X9`Rpig-n2mP zVeHWxyIg6Zr{W7Y0uUXN-u}wvgv?B}iKL2Ph+8)%O0F!wH|h@;zLLrl#Rc8UXlq*< zfFM7M4NH(Wv+Zk@$Fqt4Mn2@j#p)b$V3l8*kHXwb>~S{o1o<3vLvYk$b-a zPj>cKSYB~GSA9DJk_AflN#f5^F?M(WquW~(V#wxcs`$9t=bW5Cl7$8=*y0$i@U?BpOv~*2=^`knx#J}*4d`nRs9i)^XpBK)H zEK~Rgzzpm35##(dkaW?_uQb8v0L0p^g1iPVry~0!?ou-=fbYrH zWUK<{LyAC03416}Sg?~s0!RI8{L`N9NonCE&5FW-CCCWMZPA0SF^xQo@My>KIcTfz zEu^~>v;cttH2S?Iij~E#Np(6u!2t#uZww&8{R9?c1|v#@1;7Q`j8%)&eJ%gad)0dk zTY0t>%9j-a5v_HS4;klIT%JDLjb$OtmXk`CibC~B;EVlbEcy8k*h6TaLu44q*d|pihT3p>cqRh% z@(IOB&8IE}plDAk9<-pH$Mn}6{bV$wbq=rj_~oI(U(5_iJ?g|qq+=QpiOko~@MP6G z!aUm|q-gPJ!UnXKr@ucvxxkBNe@tuk){qw2ySLppX=!C{Wo2PC?L2)y>$u83KhL;q zWlG~>R|u`_?A^4wpdM)Jp{#>g9C`-M>6diHXEiw9(XW9JMhoObfXf?wlNjh~Dclocn z?bnq1I&rc!Z7lhmG~DU+399`5bV^(}f(s5MIZtW7st^14NL=EX|CUkoctnB@2Irp% zBZk+c8+(U)djt=!rj8$Zy!wnAe_baW}DL%GfcpJFT zY0!wgD((o`@udpc+0Qgauz-7Yqt9V$k->FNr*%s3as55qeCzwOkk_`o#*i(0KV2s} zI^EG)AdO3$fa!-15S+dy&-1X6uW!t(t)&%KZ)28wrSO3PT~aXMOcQcN4b#$JmCEh{+sfbSgGl)+d z!jiv#Y@Z`WH3XiU{IBfnZ~_DG$ktS1K6PcoLicb<-3_PbC~+f0g{zJfhjv(0QF2e@|pml?S7@(Oqlh_j2k;}YM6@2M933{v#e z<(~#Ct{67?$uM~crBq$nJVLthd~OcVM`fF8xT$-CZ8G)pCI$qwCK-MAIbQ7yz3cbS zSFy*(uDw)@ZymNE#T7F;0)9Ec2&;IMLD3# z`Wcu$;y((#%kopINhZcVE7twFX0`gFjZfMRCj)v<502qvIR&Iv%AVfw_7+WYt5J72 z%t6r7W{RgcV;P;P%ZKJSXII*saD(@qV0Sb>5r-WOyTw@UF@s<82bVwTq&~P;L|_~F zf{pQF`N;p5K`)h!TNycU;#tHF1TE;@ zY~`+IA1ScmBDkfi`x<3^@V$=W_A9rP>7>R>Iz7V_S2&R&eCpNl3EL}VEnjGKL@?4_ z;7iyLYk4L2``^d2kOcn}@oua3wRonTZ5nT#8C|D^@T26cFAXw}k~#hW)*_c~CpDC{ zfU;D5H`FEwK1Kh8h9(VY#b%F~HqFbYGEH1epxHR)^HtaI?U<*RI+Q7Bgqs1F8vp{w zY=+2=kDM-lDP36BB)Xzcu3K5}g>BlQ(kem(%$<$MP0bj>DFT{5z@l^I9McR!@(SKv z;s>p1ly1N7Bybb&1iS5qXI?F<#oGC+P3_jl$0__7I(6*h#YR40L_(X3i-pyaNHt$_ zS?zV>K)9D;%Scn;<0pYT#FH{cW5GH{9{|qvZw0Fm2!Oj>p31%rAG6^7g;mf3IhWNv zd(UE|hn|_4AG~iynieJ|DR!>e?0onsXnPRTy5UcW`ZT~`dw0p(y|E5Y)%uwA_Aq^( z5Bv0eGkS}&p~DIp(h--kTiGhzz7U@J(}ho3?_z1*U}nyJG%TV!fkQa-QZdf^_RlPa znB!&+PWxJ#MCbiKw6G3r^>wXmY;C?#Hw zJNt+~sm0@and55_c_#^+L7~()X6r9=QK{v%wecUWVIWNZ9Nz|Ze>`>)?}rcZA7+!; zz^sza#f7)PWXTDRDQXs$`@j(JCv}Eg1JsqUmB)li!c%OK#%ZxJ=6sXG{2HBE3>;g+ z0d^*kKZd~j)*4$uU+jQyHGZ5!KuDPIIj-tZcloOuh=!Wyga?&Mjiw7@IaSm7&GvO`&#Ongi(MHr+eYV<%%%%T$;ZolAW=jlh%E5(!ikE3 z;ogS=A~1pjXQ1X&?1`5SvUQP!$_=P0x-oH8|LZ-*%*KYFnMR%0n@1k9G>VfSpN5LP zaPF~+b9<&!x$kU>EQJBdXBkX#d3+@6AVY1Cw3e;9FH=FoW_3u}l3IcazE`uvh;i3>YS1Bc*4e3o<)U5bg3-u-maJ&q9?NHcD}>@fH>v&UzA#uCM^;j#N4}x~k>PjRNPsAukPf=ipB~HyU^L!mw?LJ7#G^Nli@+Tu$F2K0lM0E3li=FPVT1Br#~X z&=LEqW7pwza5A%Xd0)#6bxN zd_>HqkE9b$aKUsHX!(Ya=Lm*#-m#NpE>&})rqhMl$=Pbg$lQs*G3#1kn=Uw#h6=nr zdNn)*k4=vs$DSTlORsIuyr=OAImZ&Tr=*Dh>Cqzyx20DxljZST7fwo=T^4wUe|{lD z4Vp4khP0jC=YoPHm&ePQd&dqlL~;5Sjzqge33o`c*#mGMUR_$x{#Lp}%%0S=zhu3X zTkq*@g1_bW>Y=Qr1gZ-4&uxjH<1k#A9bJchA&s^5(L)*c)h&0Dgga!}`%Y_~?D?V= zXBN#;0vGzC?v4l{d)8_q;*PU3zEYG%c~KYpachvYnWJujZq_xW9KAR_YAZTgf{Bsh9^+&qzX zYe{w9@V~hL7NnQTj~@+Sdl(#4>ct0*b*A$p9&(GbS@0OC9GP#?ZMre8Y}!3~RG=DY zY~F)P&33zFdGkgjTT11pSpZ@8t0VKcyQHMP=6rwc*e&->a+o@8$BK3%1{p8kgq*9Z-sEt4)| zFcS|9uz;oKe$Z`66@mx0o7p*Fg!5RCko7$qT+;O6dO~X1Da&8;X(Mb$);yJmvAJX&O1{PRN#E?m| znuZ!GKUYLVL`+;-&_Oj--dOFC6Pv#N)9rm5-`aSJx%>C<;FFZN_ms3lHWd6{p-KMo zB~b2`WHk;GQ}8D{t2a(g;CY)8F0UOK0l}CMN&5c%``{c1A?FXKQQ^uL0w4rxoc~a( z+8EatKS%k+cY*LaLZPF&d-E=3HD)Chq|+8 z546a^y_byZoL*Ba7IKe*aQV-RyQoDwvmLgrp~R$-q@jG;l{BEV7w8Y4GjEONw!VV8 zxRNM>`g6*q|Kvp^(=`Ip0$&;diwxY_(t1=JbtrgKM3vh=PwhHeSX$H9R)-_F49zPc ze6roWXBIjO1cG>FLE`M1Y?#ADpk5GbE_L2!7SLLdN))FWP=C|2PScLV|h59N0~K zG+0u$Vf(MYcG~#2e;(pLKmK38hqAx;AE_K(|07l7|NaO(Ea?CDy1aR#_~ifB^KwFP zj6_(FU6m2`Xl({m+>Q}^d{5CP{EL_Yx5tVA^PP)inXZ*m=suCV|gb?h2G26TQ7!5 zaN06wp_>S&M!~cPSQ7$KhVJ?4Xu1(AuRlibs0SNj-7pbfl8E?>Up&4?+Y%V(Z!&5T zo*nyEC#dCXgD~0<8f8d>7iP6j-3EjneOmpi4S}AB`W2R|+3dI0bmhw7zEEz#oBuij zu!B3`SVmtiQfXjd;Dxly^#$5DlTNLl<$U^Ux^QKilK*fTL7FA8*= z^Hgz3nA~Y~z<508?9$+dKxbS1E18|L_;?~A55zrkOn?Pf{q1>5gdH3dqr5;2ZX*)O zM9!L5=XP9&;0c;zL0t7lb(S+to+wOyqmJ7}dbb5!xJ?m=cZZYV zUjhO~SN1Z$fBpJT{?qQ}i0cBxAKaPm6f=# zO7;MFh8^qoSWVu-@=?w4t+1~15mP;sIEqNHpNE8&o0VsXHI8$Xr|?>0X{DZFMu>hl z2`Xss)2CnA%d3hsW;F!uw3({E46!#SD?-4v-~&p`lJg`yJT5MG&XtXwIp>!X{Ov8C z-r1orjk#T|`9(0E)8#Pz=R3T4v(ONlVBsNP=Q|TJ1?T8BZW;HtZywNZA8G}Xu#_Zc z%Nf%v=e7EWuZ2h0Zj7UKMs#H*k|^;*=m!z+$8-8{aO?gjbCAF|Q$#WR{9qJ$yp~@_ zUrD0a4$c&~!4zld$=UxMyQs)Sc5*`Seg;m1|Me@Yki+S3x`C}V>+bh-=PE}=wAtAe zRID9tnxho@#iW&|YWvQn_}+bFKu26dN;K3|wSTgEDR>l5@hMjy%kPcPnf>>jqkgfE z`hT<6w^oh)^%=?WLqaI9UN^81Pdg*Y4@guSCnpgv`=dB5dG95K3=EAV9T%9)UD-b_ zWKJ;ByfTk8e!&shi+OY`M`C{c@$cbb{3&P0`sQwY$BKKCl~JGXw^Hw{tF_azX-!G? zmsIgg@^yWUQ~F#b`1bfr?Akw%&?=AiWldGiF9uTqYy}EAo}=T*v2HIFIIAho9gYJl zB`BC&9Rr9$<Gt|BFT<- zMHDSCuv#l6T)_5|hmD=RiDyGS z8J??OFF3qqAHM+%_IG2-r^WRrL9ME>u>ltl~ z^Dm!o@<8kMN?n~B-2&OVGk+ySH*EH`_OUq#Mk3KJV|}IZoijFrk;& zU)kg5<(+(pkA+7<;-TxFK)1uUa&FFpTAyegaWdQkz#+mR5Y>n#yPl0euS^Pc7pyUx z8^6lN@;c(|?D##O(m6f9ar^##YH-SXz~++m8d;B+oekx*+JF2(cV1j8QY9(q@D>7w z23LLu)G@IA_br*-c_pEd(UXL9x&X)|0Sm-c<54|*{kg6AbcsnM#3*V_fA4K}I@!gB zjHqPW?4O1Z~EEq;yB9wszWZYyh_>`0xcQ^FOJtJeyMSuicn# zPV3}&7%HZClsO9**@T`#Lp_@Q(tQ6s_B0uCDyiW;Ow$7vHwrgHprki=%*2MB*KJ-r8?DC9wUeE^`Z4;%4rK1A?O=?Mj*exen<>d+1i zA(qBmY*9h!=(vlMKwK0v<5jzhGke5CE@UMy*BYH2L%Yai>;uJPm|q7fwg&rD^K*f0 zTzPW-{`-fAkS}N!vo&jJ$i2vDjuR@DSgfUP%>UEX6%UQ$URZ?v=Bkfyr#cZ7Aq=7&yjheq;ck@2l}$-^@(FXHQ_eXD$l5$}+c zA$LEq;N6bMpb%A6<*p^O$B{|+nC%{aIsJpRgsSPo0$NLm(7+3`0pWFlNhxSZJl8lK zW(r!khqp6>k#-jUh&_Hz&&Gy5<#gwbU8y;b2q{}m03ccz2+8v~(pVmMwGBItyf}zd zY%1NT)7_|K6kp>f=_4IXmqH-+PqtZdG+$yu<)G7B2arx8(lx)d@i;vQnG9zNj1<>U zqj)I}phdsS3mOrKZVfvH(hQTa-?$P4y`RIw)5e)0iXJrtvzwj^>$cj0WpKgAojbq= z%gCXpp{d6eFmHa&a~Sal-p=fPBHm^9yEnrohAz%RUL5WjaqexoA?ho)+*?M>>WmoD zd24@gq60X26H=t&xQ|4Qvrb8GA>J+J3nZJ9>+s?PH2Jy;D5!10ChJLnL85kzy77_w z_6*)r88sO8R7=+CbgGC@F9T3Cz^cPfid5zIA63VAkZ8IvXcrP-;+|wP&W9j5Xwi$G zpTfcP(xQPbs8wYW47XqE@5>UAko@Okhpd(9P8=eKH><3gHLE8w8G%RkLT?=1^uiH4 zN5@bXHZ-cm4vaYD%I;*%4`iHqX69cyY$xuIk^oL1ba8gn0=owMkmr~7*a;yCa;ue! zskGl)--Dl1mKNay@__gnpRn?}va)A~8)J76KlrU*g14Fnb_cEgw>%|%or#yn#Rc099JHB1yb?w91n<`U zlP0Gx4zWH(1~wCZdLNQ~x%P%BebdvqBJz!cWH2vMnAP*&vN%gd^^2LMXOx9p=O{OH%CS@~zp{W&Txtn19B`C-X)iBo$qHyVpvjZWU z{rl_3w)xWW6VuZKCd$ucZF+7@*9K&?sp5-0{#9D~23{vr+_oGwCe=&Y>p=BYq)mZ0 zA?NB}!2j#_@3*h+8^8#UtwCz?Uk(3E=W`Lkhj)$dgt@XNa`@cY#C%0z%4dIx^@v(` zX4%l!e!QgV&&wy6dfLNapR%*^E9BulzrK?xyFXQ1zs5I!ttDF)oc|$#5QQ#IjIjAX zZ1M6<@|UYSSREF^PFUSOIB4;~?(EOMYKshh7tLYM{7pgr(_9ndM}55%pO9y$RAkWM zbj9tl!5R8#`Qdt7l)kCoa$X2~x*>_XzV)fE;+^p~C1;$47G$9z+Ya z#Mk(;Mo@=~|1xY~ZA+CW7{E&R!^EX*>=-~tonNrMN38>4#qxfR5ScM` z6yQgV@6r1=OmPzHrVt=b``CA8<~MFpQpzYE<@g*3Fg0RQx@F<-cXo8hao-3Py9w&9 z=AFzlNxhGTwFQ_6Zd+5Yo;YL!$fxlrD6WI=Jgdd@P4JL1l&!;2cHtqV7L{UJlTf6C z-EJf98iAmUOuX7`Pu$r}Y;0e@%v;*%eFo>7!Onfr`kps1Tu%nZ7@rzDPMFrG3 zPxBjkm8IMK(zn8`?G^_hAHF|{4+s#8T= zb+h9O0x5#jsO9ewn=ZQ&-^Qh>W78rEGOwS-%4K0SWKWh`n40=pZak+*%e_@RE|C5~ zB6PZ1L`qTdPD2CxU`;dW-rnz5aY^FwZK5S$Lc zz6rUwl!@0y&dbny628ftx@a4pEv3zEMaRe~s&DL(gmsX?3WIPny9ib_n7ug9Q1yac z|ICExw8Wj5{HrNe?Qr+HQjvrJHN53LicjH}w(0CGyM5?z>7y|cMRtJ=#!6_Cyz4S0 zpG_En@(N+niPw=A?KiVJ=TC6j5T#dtIrM}PvUhYpy+Gx8&aO&PK9TOlTBOfM3v==O zm#gi$XiZfq=Af)9kWVU5U%kRs#Xw__^Jp#S$bH8%J9Yww{IS{#9V7(}q39n1m7PWK zRB0MHuj35XCx~=d&aBsyi9Rpr4*pVZ5@@`a*J|%nDH{Vt2f#FR)Onpo8G^Ssv=dYd z0xzGDB98OyAEo_zTWLOs)-J1fzoj?>(SUr2l_o_Y89R`8Ai0DR{b5fVj#7YvkY)-P z4vuyT1&=nrJ9h{H(axqXfQm$gklQMao;&huRr|;WzWK%yT4wg$y}Uqi0&Dhthf2F? zdBP(RmkaLaUKNUj=EPWNWV~gZP49UzU^O}N{8M&aHm$~dBWU_kAb8k{pSi>Xir6a5 zyg~?Ia{|#k%fl78FE4YB&z|bTg~$5+CMIT(;p7s}8{I#Xhf4MFN6+I|1#4=xM1A_+ z?-oCHYjl6v`ubQ6foPZYj3~2T7#v74-*s32L`>jbfFXg~%%7*j5d%AJGPHldDtCog zZ*!H~x1zsZyOD~HurJmmn%phoxI7&vJ{ED?c)!z$fpLFKR9WG4?(8kxT`U(6{T zNgl*z%AGUcI~d14Zga%5F|GO!jgq#OhUkSjSA69E{M9J8Y`c?=>Vy?fyrkZ5uwD59 zJ@aa`#qdb}XKvf6;Lam1v+~U-*&{DAEHTP6g4dhG-!6aa^jv@5zqH5}8>8o|+J2#N zQnSyvZ!s?4-m6PsB9qb@NV_pJkY@Cxf*w(k!vx{c{4Of))|NRzCs#uspP*04!_U2( zJ50SfcG$_FNaaDI#hGBU(F`OHlA}VB^gZ!DQIdY0&@z2~78dst)aVc!f!MnHo6Gwb zGwnJE#IJC2x}=KKgjF;|KxTSAniy^Z0qr&)20^MX(A+SnZfq2g9apd9rpmv%4bVjo zlH@~u*hGpvrM(VPT-odZ^)f((4oY ziJWq%^s1WLd;+a5xuDSa9N3AGbR;^iCbRP-Y6~zEM{aAjh@FF#^-OP?hZ15Z<}2Sf zH6DMs0D{XH|MMO1eGna&E@TcUoq7(2#F%ZbY?W@cN9l0EEC@aH*&}P`cWONsa=LZf zK{*8qA-}ouGy|`=^IrB|Vw;13^czr5CE-m2vmFZZkkq@-T7FtAP)hrhM|6bd8y?Qa zrduhqT?;p_w$Bu-Pb%}rW=jdw9&sqih&QRJVS>AwOp9XcTb?B=-Fa)f(G9>EC-S%i ze8*CIrx-`Hy)nzA0bHD8_6%H)!=W)ki@|nW(_Kp0)CFvz&T=!)@M}nQsd&10r zFtNSo?wPXQC_6(n8#K?$DtP>xny`+Kue*w*mF|2Q7Qj3DEX%bz*fFd~sP5+Qdx`P< zjCk#11&;drrB&hu!_?x&^lttRbc|c{f68C@^8J=%v7MHeVi0#L>u4P$0|VA=Q|t8R z1JOcd$|&HzKxAs+~4{7pB@!#px>T1vJd_KvBJzaIwd8SjCpOwJgai5 z>n9oj#9OOhTkpo1Ox7@>rPkNQ<#RyY>XB)X?c=s4j#o9qxe84#rFlQ5ySs5D5=YYN z?Y-4O&IH8-dDQ!w-FLt_@Ki2wsPFBy7I7sj zc=@Zir5!oMHM(zYZh@n2M{^nA?O7iq_&YlC)67_Ja>x>%4UMXm_?1V$sCeu` zrEKiX<@j#-*#y?0l!BU^caW`Xd z`1ZG1652F8xOARq7rZQ6T_cS+f^M#nGM_euwVi^D3}Xj4-EizAM>(i9UZ-t}((W_I zbj|q8DSk@J{UCAilLTAATRA31jju#Oj!E9cMm_SFqAGn$!1rxbb{6l)ZS3ydaf@XB zamM_F#H@>oq_{ZL5Gfp(#zjSkOK$-9j0J)esDJH{MRi9O?l3B)w4R^dWXb%apAh>S z6k>BX-Wr;kVlz-zDx1t_B>T%-rh$^7Xn$#h|Hh4D^QqcesfdZs9mJ`fP|Qe}d-Lam zhfCqTipP&E-Hm^FYOpJ!LacC(QzYv~$FXWpX62Hy9_#vk-bWUS{e1WK4}Xh-BQ@ER zo3rr9(NM^}BdG5Gs|9$*eZ?uo5SY%tUMypjv}fVrOgP4M>O7K4wpZ{XK4ZBh2G-{O zgs~gPh2S{#paW*)S#lOrK8p?CSALcsqSI21z591qmv@*V=e!j7Y|(k1$+gWni;ZDefG`{ZGcB0zN+B`2FW7#9$VrL z7zrHHD)m0w>XnR7>hyy)A8Gbbb?S6n|DoIN z;`(*rW=g(-peT$znZ~**LtEP%frI-UevJ#x8-H$BTK+&qyh$!hR`0)aN9O4FJi%az zoI99p}B1G!ckwYu{;LZSVxiMGAsQQS>sAi-7;jvoGsDo&MIVZm$CgyP^?&9L2 z`Dh9CVt*QE+M&~iZi=`M&C1HoG?qh0#wPc>)kF1vD7OOlsk0fga=M(tLgrijevzut z0Ni`p9k95=vfr(v<0854Ury%0$F0^RN-S;Qnb53+Rak>{^&S4_0KC0SlL= zkcXunW>+$HZQd_=gnsaAn})g>v4++OJ`9n6{IoBvbj@9zoT&L&>Bv*;C!{A(3BSa< zXE%k0fXrld3$JZ2@}paSA2xU4hV51){GxP+R7*`dSLRukr<>EWJ3wU2Y}jJdSngB? z4-US2BNr;9Y&lx~C9k}SILb~xs&g^o5XQxPvUGFvTVJO9HrGz<3;fOcWBu@R?zpo| zB))4tX1F$`4zi`TL6cm=XU~`j+%;Wf&rhlb^G#qu(f)vBb{9+AV7SrvPIu4p3F$<&x0WOyTYbTRSm9fc#FRf<5n_8< zhg771+`~UAic!0I%MUdBkP3%v2wEQYV4Bl^Fm6R}laII5U*IIlQpl+M9)W-&MJ}rm zwm;L&w2&liAkL;;iM6;`_s%5l-({fr-UZ24>~Gy?Sv|r@RH=_<=2&QdkrUsfC8XH* z^v?}TW=_%ly{j(m&z#$^J~{lzp~h3c1TChyAvk$-p74;Da(i1aII3Ur{{22H!S@Ap zf=}IIwf$tOStfXGjSuSzcI9zyNn3>M@2UIMA^_u|BkG<|mVC9y`=wNqU}aaxyvaaP z*Scij`w#;oBPqav0-!a79u~<`g1|X|8WA(+CDa<#338!}?5z1Tx1&jV7K-xm9+g&b z5Jmne+IV^uRD%ej>;|xgV?Z+1@WyDBf-Dx=&R!xIG&Ls%&+gpi;gL)p*?|JpKZ4icxOry^z$O(> zC@S-c8~TDfN-U?o6cx*)r@&jI{NMrd1hln$*qNeJclErTtvWo)s-0^g_AT^|m$zf` zle3*eb!wY5@t(p0-6(w-I;JxSPv z6M^yvxA<`%hDcu-XgY7)@+NRuUctV39ebcUl}9Fg#4FUuM()ugwX^lr)x4LKT3U?K zX1bOIwu{9I52HuhJ31cD^V`~%AYdYfn#P0gf2p<^7_WR)d)$sub#tR{Er)e^;~ln2*N-;a2-$SF3qPNz z|F(*L%hudSOj9br zV4hDUA}vn^a?OTz_iDuW*wRZmX~{`1+P?PphG!V&R#ae%6c$dgi~atQ zG+tVZKQ>O@+TO0al2)Ah;#yC~u#`n(Vd05Vv)1w_2&kYRq`1HpeBChliPjPOu+8{!QH|TGxyjog~)_3T@U4e7uI- z828C0cFxhUv1>@I#k3K$5MYo|HKx8evSGld9e?HK*feq^5{bW~S_fzW5TNfl*^VTG z>E#A1PU|fXYpSYRn{y9l0aGXAxAyHm!6bM<>~pv=tYJgm=uv1;f}5XjQR^u!Ci`S< zp@N-`&H_e6qwU;k(zA z6g{DPo&_Za#>w(X@eKss?c2m4|74jUN_ea7t?pnsRcaEF)fesd}!HWzn4j6kixnx-LcfgYREoP$NgO58W49A zHvsBYAEBhA%+M-5L?EJQWgGUM2ZcU9a~~=+BaPdqPrnBFpCh%+)%|IRH!*6lrk`6? z`K$tk;Hpxm2w)KJpy$HF3kU2R=fQ&;9Veh@y9u9=k-uweX(2O?e!_*6p#AkKXkv+` zEVKWe8&`Fuw|5WZ3t=hNZb?HtE;m?jurH5E8|fd-9*qaF_D4Rb~%ft^Fl0OJIx0Jl=xtsxc%9f zurK8tz$o-QwFy!lGbR6!5Rt9RiA|pZb_T)QSAl-%Xy770Sknjsl&for|_Ga z^jUgv)%b)2##vv_1#ok76WS}#GywR0ADBNV=(zjAhjX%)Fc=B2T3dl?6znJ;R5RVP z3;F@~AiF%y1%-sbasSib3kyi2gj%k53E8pRpTtGNssK>V1OYgK)avhyn!t$rIxmk= ze&Y9ncsooJq12;=HT|&HI3cVPC&&^K8aKIU=px%1Tz=e0LfkblfB>lJ@l#tn&SrcH za*Di4TtuzwHp?w-#fMZRG}*4x32g6QL1P0wxWqv82wfWxQRQLyT`QA_VX0K4nNTvO zveF5V2dD)kru7-ZWX{hI4h`2BUsO^lQ!2p)66pSt%S0>uAn_uda1eISDXHAu+wXwk z_cnB;5J=F(inuQOcVB=i6scrzKU{qcSf%lB=%=wV3(U4QdLwJ=;A)#B6Zq?{AV6j! z;563!`6TwRYO8oQ`#Kx@#n|Ym0&^ZFVsNlLGpiU}NLGo;ZgDC&qoSeR5v=^#fR~*V=CvJYL=Eej(~E`g;i{T@Ft){o3PbvJB&Q z9QukOg{5{_>2hf4Dp;>1^3*Z@kppPhXfPa+-`OPlK1wQSK#SFsR`lc$9>?hDkDpAC zk=W3di0tg{<(p47&_sQC^gC0qsOTz}r;|;#jrS7|%673rboHGXGt=k<#*U@TKEvOM zLdzrVsPUQ@uqVLsiVfUf+n`%k>SActe`aNpzxRZVq`j?8aj8`qF;=(k!fQ8z1;oyS ze=He9L_|#4hl)xMJHnqTIBCLVqzD0Ec&u8z0RaKz@oew0!Pt?njuV}i_voU|k(T4a z<&h1!)rj@|U+h*$%OW^$jKLscS<}vQYgEJ?mJj9?-0tYPvKDh9Rg|tD_p61RyiyQL$b>{65 z8uKRMkQfhd4=J`mv^ZS;xV_=HI*nWFzJCX}yYOn8(Hkqwi&wRM8+aKnM+ zK}z#wiIQ+~@;$q7^xa%@-RX}3v@i>+X}^T6y%;&K=CFK&{A0*;GWxcP4vOs1 z#4$!7g@Yg`5=0|N4`Ght#aZ@#S5Hs-r`>zy_O0sB<46u7_So-?ou5TIa=r=cYbyb% zqFJIH1&xkysCCyJ85wgw%-5gC##>~1k(gPTXw1!bcaM)>UmM~0UOP21BC~#?Y2(fm z!Q`p&|KQx3p!v(W^%|V8Nt^se`vu2HJ|?!bGr#E4^9(OysYS~HSW4^Z3n=rXMA+FW zTTh%&-@4wl`yo^$k^XN-P{e34u~7BrcrA{KGG66`7>rH-WkkY zP~khK5S5t$^rdk}!G0o0?tyQ+YjT37n8r^dDCl;VpI-_L$ov;v@5Qgs zafn?Jc3JO4`dK$NLOa583ax)MnBL3o#fyW{s_v_}9XCu@0r#^htMu_Sao4awg zZAwazb0O;XT6Ka;_uG$uicpI5h=WV031%A)eA2yo&dG)@(Jtz@0FeAC^Z^O7%0eZ< zkdW62%+?uIdZtx7ySrTOe|W8r-D-@{WQ=AiK72rQMx}k}q>X}1XzPa^4Ie?YG+RL! zW6!E0W~oefjR_?U1p9Z*HgJ%ofAbdv4`}9NBu!>FeY9_9v(s(XHUlvfh?ndOUgqIg zIs*Btr{LYNxuk~S2!wG!>}a9I+fFwHmCxrGjdFa;^r8{L>)47mV2*eTGB>an+|eu< z-}+9dJRTnx=Ldu|6OGxkXR~bqg||0=facon`H8eAAwAKs+B&ZtwZXj7`>nU^v_^b; zc+}BZ&$$?R+sH(|e|>tmV8O4aOEp+z!GOF(pt9kMa$?BZy^Ywq24dEGhW+pTz~KPgSGccD0PV zzB^O&k2-8)AKCtT-kVyJp}vs%Key7?u0j0|)x1qQHRKgbo?**m$4t+_jnRFx8(P~B0kneNkJ`**lucB)H24-fBV-@wY2c^C{*=}ap&`^R)<%1_F&kz{JJ)Bau(Z}&^+4a#AKSrAYcxT7SL zl<;W+0-Fz%%n%@+c75+po7E$*AN)V!N}a~nX84=Z`5i0;NCo(k<9yYaEAzIc6|ZqS^ms;i=Kr= zlex;;!h9E4L5&snJ#OxIc--%Z9*3aaBtS(VnwpvrzL*5R?`a(mnWMqe6&|f`uP6LF z8}nm`uT=5y6PonBe!e`=rBQBeDDESI!|d@FnmI)SoiqYI2c_Jb_sljzN8dm7b&}QF zf-QCu!gt2dt(pWw{2xugl)i>>pK?J1{>85cE9EM;d?O-mN@Zjy<$aiVi0647)+2?7 zx6uDKvBa7EzSsD4D7WDs+A*Vs&@U}ZEmG;r?Gm4pTa*=My55hfZo;~9?{e(O3pecKO*MRnen=O@?Rk@vII$s-A!Jq)Bf=kFH|*U>|v;ilm$ z*`1H`@s8ade|={9-ZCEfk8E{?oq77*JIsuFib|7$%#{;a>? z1NTh$UVpzG`Ti`N`L(sHCJYY{5=zMIhzBgSGQ^!=i8^>$4F==Q$sq8=wEX3XX%vKS z|2G7YaUak7aRAb{20;ZGaiSu40ZnTcKgCjr_bPQb1;tlu zZXhFq4qRB67b4n=OSisB-M{I+w~VL8a|0n^DK7-t@TJ=x`Aa(OxQ~+f5r`CF7jjkA za_z!gA={EZ^FyVu$2K1GUs7v?I`{|)S1?fj&r{&OE+SfxuKz13w6oMI%f$2+5zb)a zX?gKuvjkSWpstt{>i8^#bX=zn*oKQNCTgT_G^h2CrEGJf(p0 zHQBL`D3(J5#mI=W+~<hXdN#5ym=RX5D*$Pl+%%)S$VbJQT|M1rJSqCYpTi>%+ zo>oVAB&f{nUn7j>SEIIi-n^Jgg&6%;4RE4;_bluF{)${DbX72gJDrU`d%wef^Cq_0 zMPr`*Sx1n9Sou1j((9R;`LWM=wtWn!k=rP;v} zcI})WR)2xs4gFENOGj3*xL;zsj>>AkXZK!2rFu)|h(Vf7GYGtJ$m;D%;4rjXK zl56Kl-}DG?sY1$$q2UKkYg)D$X1ioQ8w4)yE?d-e?QBr)&3?yWt&>y3UqeG6&aJ-R z_0|>!8rP${WRP7Uvo}FjHB=N@pUhgIRmx_)dAW=AnVvA|o?UQv9Ba$>HmXv3gZ9He zrjt!x_a>S^AT*F?WE0D_f)8+o+~@1JaqL!*Nc+Q_O$w) zfRO+`tzZD87;F9B~+(S9wyxqE44 zD4(w>?Jf#zmgPI4BnDOd(j$?}gbR|GJ{Ik(Q48^s(gX!c|0Wyqf+#AFbVZ9Owy6Hp zX8O@rPc7vsx?>Moz8EAxmWkBZbdIwcgjit4-0AO#yR`Lw`3;J{c0Px%%=@q3V7%<8 z;}dWFQBicizR9a@Zn>NXWE5Zq{vLY*6+fhb_$ycS^z`ETd5m4fk4`a-$HN1#a6R7H zJSx^XHk^IE()KdwfPG+of)EQIziTID%*BCB%oqn|)>ND6Py4@W(+7V1c;K|Bb5`fz z(RBKb&oN``z16R7Oo;Cr`^a~?Z`koR%E$g<@)`^la!+NxGAHy9I$Z{S9~><;z_s#j za@)li85zOy{*yb9qxflcbHaWPX>9%Lp>*oxKy}ilS8Gok9bFn=!^)}v*#=mhQ5UaZ z?P%@(e&3{u&nidY`?d-`1GU-3U9kyJc>usUUSsu28rSUi(b?kjJBh+(Z|`q0Q}Ntu zUya*^SlC>rB7^CYL{Z1r-7~v>-El02yLPNbR#vGd)QFk6Ik;$9uqJ|VU59e(va_-b z2isO~T9+_^)O^xp&5@Eyg_9j`^x%{QJ&m@~;uqR<1a(Gbvq`5WBqT`0!yDsR;yQB- zv|2uYW}0|;b#+v8Y-D&?I(2-wLUgGs#>^5|tWf=cXo?k_@n=N@Lav%B4G9Z934PmC zAp(v^%mGqtU@OrW_@qV&kqi|28Y09H715w8>f}`1J}>2Ul(2o2obe^B|KLxHx@)l%*!~dWJozc z^(tGBn3v}&(nr*6HxX1;h6NEZ={lqM_sbw-9x8|HOlIdUv6lpd1r7fsM$Nv1jq)r* zuEXU;<{=+{U{DYxxbZ-a8bSS@kt}j&r@=ekemiWP7iTQ?0dh5e0Q7%w8R}H;Sjc2Er{l2hPYdOv$DG3LrWvFLUI-(F1 z7()t%#_A6Z@dDfqiLJj+zHwJ9LlCpHKkL7zx+L$T`6U+Bfi*U>uCE2N@-WePeQnK0@gtW0QrO7iwAEN z)htSMtFAz)IAL{~D6TY|Vb6(*m@-aB4-G(-2dhr61^Dj$&UYNEGAXvVZFH|fc;bl* zJDKMXY`WZdj@%lz9V~wHG5l4RHlx>$ix|jy2vYB66o^qQtzdy1sJ8y(nls$n!SDGz z^4nf=3G1YYY|A#C07TpJabc~@WGSt!36|8kmNXsz!BVh+_4<^%*`EiB=R7i?v%V}p zwPVxc#svr!fmmK%{s2`NI9D9E=Q!Htp_dQ2asJr`lZA z@tKa8>qs3eleEdo&NhLBA_13+Q0)>!v0e zh#@F5`o-dsyV7jf}gyWO1^&``0$}~ zYZq5yxBw4HLqpCZH2Zr_xxtZ?zjj;L*?u@P^| zUvAcxKNzTxl}${dF!{XYohWGaaEb%M2$pYjMpCPN@`0!dmVXz)!BIar-cPlY+B<%7 zP4IvD^0SmSFH%g*c`aVt_ScSV$n}oFbT0+ZAKC2T5m#@r_(!#bNzqr@>^fx47wcU7 z4D>^6?RD`;HAfJRFr{+4@xove4%IDlT|Y=&cWy};QT&*6B~N!B(viwJ2SW#VjUlQH z<4yVVRm|Dh0;?uKr;=*^M6U^PD_%&R+1lD& zP*_m)CnO9##k)#8YSrk_PVgvc2oq6hK7|FcUL<<}`^T-{D~|qwGFVq!^@*NuVI%mg z+_7iZtJZ3^e;vJp15Ofo*|0VOSGe zd4Lujj7<0W>*aNo%-dTUTB8O^Y?P= zAPQYv3H=RM@$=p1R|gxOK1hEAgF=e$vX}Sri=$Gcz$oy&f#Dt~PE4t^7C3m>lIl z2c1i+--j9NiOFr;uLre4Ctr*F>se3s*CI!XJwFr{7TW)T$j(n2jLqXUmjd6p1O?G^ zFS~xpb%K6E(%6{(i_bm0k`g8P&f+4r!EzJUN{b&vj*IM_gPE7V3!5ffP>5s-h_it3 z!TC{)($e~X5qH6@nIA3!0VjbqkJH~>JbUZn7;3rU$O$7hl9GbrgXFn3m{mv)HiZ3Q ze&zW3Vz>B3HV(pfZFG}P=)@*|J(Bj46rLnTwzfEoj28zuHHUP!$APQ&!{I~2ASTX{@2IFm9epIDY@ z4_jMv=j??AfAywV*;4E*W@G2Q?k&#~fdjUSpOt`=Jig7)KooZS+Dd42v?mJsd;iak5`6%t+!Ur!ilNegi}QL`#d&N52*)966R+C(m!A2oELgk@pY0tpQ2V{6 zVPIM=FJlKd4}J^9WFZU*8N~SKT#lC;LR)U=KJ>Tu=iTE1-<2@%z$RY3L|uQZ$$5en z5Lx+kD(bLw?P2-0gINZ~<}qi2{e6w;u-;5<0P;27zpc)L4YB%@L*lPTGcAyj9bn<0 z!*8d4tGypk#Kh#}Rsba@UcQTJ4h!R4{;2+a@c3w6CP{zKfE0o>h`gTEsG)WE^30PV zV28~Vn1Uzr@BW$}W|H3D4>OT#a)1{^(I4%WW{y>R8Kf)oy>rW&?@5S;s#B$sK1T-! z{|M(VdDWGBPB22L2yi6yl$&iz;?a&^Le>-lp+iZ@r*W3e z$Z=++ReUF+J!U)gF{pd1LT_RbhrynJRxq_RNzBVzSjP&|<`)Y~&$#*d{ox6&-+-kx zW>BJQF=$;3WlGg>2TeLY^$64Ac;z7t-q2L|k3(L>&&v$N~Ht zwk3cN-l#S)9;QX;gDVGiY2ebB72FNN2B;8%^4}s5$Q{U*kypS0z)KZ)i4)Z}cSM@J z7$ukmdW#vA(^##Q;rfEi^|pGKP=onVyNrOXL4d{~3GmAMxT@^7>f#9E$zQs}2aQ-) zW!>HDx`n(G#qeWtdOPb~$or8CIXs?J1TL1he^AMK_njD_01)_2H7f2lQm6o<_Dv3s zn-jZYvhTQWmwB&WH}Zh(fYIiZAC3*2Sk)41W+P$#MZIb-O(p}1Wd4$CGEIR2jh|~8 zW$F3(Pj|&ep^;6s;yE93mtRw|Ugps+na!Uq|0&a}o&@3RxK#36VBHC}G>WO*6eT5n zTg@J{xFjWg+YlmJ7!E5b=mmVk5=yX3Ly)xfK+YpIL<NG(w)f@mQHyTV54}6t)0LAmT%VbK?dw%z(9W8XD)iy&DQ#+d6)# zj)^%PsW(~SV7WqS+xv8>kU4TM4~@^8I$Eq%I%W2J2kYW^2xN}K;2&qGR|S=$QCr3C{V5f*&k}=j<-k|bP7GW`6{3#L`1%JKGHxU za%nN4*@w>9*cgJd@DYhZZbaaH40!W~6eJsP34v%#BY@BJ%FN_3>(7IqjUJc*%s#0p ze~|em*(!WIupd;<|C3)iz39bcV{Pq^v2Vppg$oIqgMeW4dho`TN>%&GOvjf6Yo>xIHH)BP1jQgLs}!E(T2V=^xJ{lD!4C4!5mO6+snP&dE372q$cIX;}QZ+vL=g(#lcM zPX&kNtxji0P{iMLn4>Dvs~`iTESbOuMhyJrkjhG4m@IJC0l)#<-U~EQyuRu?KzV&U zc{afv7EgP8JlzgKigy9cQQu<=V{b0@*X4jPU!WXF#`PLpuhzRPoz>C(1A4)SZcc~3 zN6QL3TZ1w5gr1uDf3UT*7>!N`(i=+cKCLc6OSJ<(3JT4$Pw_@7115@T<=3o6Y`a{F z1>Me$nCm=w$b6^;3SM08f#nIw5mr3s)DSE#1qo*o|G5D5pXR0n^%CqP(3nOIHZG~0 z9gnIuxD#XNtM8vP%fVgyW!i@pPNODp&dcRKca48P%gScPe4VCU{=)BWz+D7Xd{Y`3 zts2Das5O~!W@>G!Zi#x3Gcy-F=+=r>eNw;S5>Ca(-g!6#71KmA&rVJ;=RRW(TNxBg z{CKmpJmtvr@_gIDeT|?sSDmFj09R|!uH^}p=*v4==QihFQCsfNi}mF_8_Kz|&5^Tk zQyMR66pbi4JnQIh9)(AGhh3iUP=1L>!?qyVH2vQ(qj$dcDPgPk7k&6U*VqCy1eOJ8YudFtd{4qQn5LST- zLBP@PIi#UZUccEpW?k@K(Cq+Bp4-ztH8^!c_f25*($X?pmb-=Jef{lHX$Y7Q;i9?8 zz3QBfmX-zyQy@Y^?fs^BGhXfultV$rJ{;nAOWyJc2gooMsEqC7F5{G|tE&UhBq*Ya z7#YAvLXys1*8dQ8=>menbOHjm4AvaI1q|4(&+aFi!f5Ol+O1jqGT{@c%8d!EzH0<2sM)zeKDu z70tUY4`5%_%mn6+f9s%x-kMf$hrsV21I%AXHv^?DIxXuZY&h@Uy?d?N#AMp5N=<)t zdAa5DZw z-T(P@!E&s3{~JgDKC#6u|51Z~e_bWY=o#A_KqD|KkR$9bTNz5S|7H39T9abYBjF7o z(1~PE)-vi@)UYq(%vpKy-%mw;63Q0%FIV;VI+jID_Ag`i_l7E3)9^p?@b9;1ze4gq z|HsP${r~?a|6d&w7@FIC-o@Mn?2f}ttr!=; z8sb>vwA|RZn8_t2r7tP|`|(UJWZonW&X!u8uW55pAew+C7-$CI)MyLE?TnqT3^{qs_lG&*`1D|=g^&Sa~_F1@rgh`Row z?OU>U5=TfV0@gE-p&^ta@nIdt_PKCY|8e`@uY`|Y&XwF}yf9t>Ek$=d41tg&cBTTGM6?xLd1@lG}ZFF0c2p6#82;GG2p$s~@B4N*)!y*{mW;JF~x?g21SNCHBA$V#`-9T%uVy11^L z$>}eTgv+0=$D`!&n%UZNm`@cE!iw3}JBc?qXa|0@YfA5hg6`R6REXZ=;v&~5;MW*C zY#zo{Y4-m1n(f_x$COuMt*xIWPIUXn+zOLsuM!BrH(Nae(g31t>81UGidej?eQd+` zJ>ijoftG7gVIgX{9NG#giTA~ zI0sz`v-R4_%JadUwV_&7YN%8s&d<*exbDqy59hP0F+7bt zrzm*y-yaovy%<|unw}7*iC57KClBbOfh4~Y7i9x=>Z=5IE=`Om9y zVPgj(tj^=z%h`=zr>iW{JLv^l(vUtj3$Xd4gbYG}9$WYFO%RC9sgC)h5T4*L1qlsK zW%XihY$#{>ykqJ(P&1uKFaE-7Bjq8I$3SeI>{9}*jH;?S2;W+^9is|}Pv4Lmfe+{j zP1ZI&_;lI-yAmyuH2u>w<4K;B8B$n|7GNL%Oz`hgTbzy3TQjmuYF7BOZ(|1h1e8sK z)X9ME6a|%oh0Ocn@UGL*vquS%(u(Rs$)(;z?8MZ+>Z&ji@Nk)#&}X0Kih?P=>Nqz624RQ;V`foAc?Yo1VFc167R1RJ))Z4OXaUZgKbfUG|=cJ-kWal)~i z{$gIB``;kJg7P_uLxQ^LIH&lU=LO*3dz5!IX9*hJOie9bNuoBRBdCPEG2pivdJGQ) zRU;;S}+6xKJgXM^rpO4XF=ZJD(Uyh6W=AlFnJw#f8Y8m1TTuDL86sY zLkc=N8k2)(WYi^-O?(A^-(Il>C-cCa#wT|SyA4CJT9eN0ayZg!V$s^&or8BQB zG?;0L4u%WYu3`omyB>1jGb*PB#ATyHaVGk`d!(@OM#B_uFP}Ht+R0vZ<|!^Np7~MB zftYFQD12JI_Wcv&A9HPpyZZZDZ-l{@CGlGYe>9Z`9u6%8JH++c9vQOn`i1;7!RVIc zg8V{2C(r|J$@jXK^y)mX!v2crK%+$c3IOIR$5h+f+XCKg_j>BYvjI~AOn&xhI%w~| zy@^eH-Kl)veq%DuI`n!ynv9dU&<$T!|6 zZ?pxzShG0kgZu){0FZ&^=4AM^ViBb2vv0ayh*wzxWUrF@(i!d!N&0v??p3}Lz50kA zE!(^XeCV3wwRvn{1OmRBh?bun4;QRN?%W~Cy%bC{y$Y~1vXucYJuFHqg)D_^*KK;L zr9Oi%;HGr+Vuw=-Ev}S6&N0xzE+R|r}6k$MESjlpE^qb#O4eq9LAkYb!HbQkeDF0)^gTe&riOY9X>Ru{+rAm&dj{H zICYJjHH%n{<8qe&GVXED_Q>ex_opBrQZxV2?BfEJhFD=Fmz+KOhk$SyErhx~9pQey zM+d=X=sey}kQ`8eiQ1ir*Xg1AY>yPfK{P86cb+P+Qb^?ea&zPg@Jmwm_E>H02FC3t zrgym?|8Y4g6MF*tY+%vyhjI(UGPgWUI?vyj9tnDl3&`CvhP{Sx&sK$9S_yEuh`s%| z_EhZopxFdIoidwKv1}9C63I9K*b64bz2~g6H#xs0-;)9rLZS5~J+H{7$P1=L@JGx?;5=C9eLFV+LA?GO%V+QCJ z5WYyvxwJHjUB_j~b!w^3?FTL3ysAx}7DN>l9k9(0n0Ij4M%RCE?p}5Gg_IAX1uUA; ziFs!fU(ZBudhYRNZ}Euyxs7OPZ6X8s7ZPYohJth)Nab!_M@T#|zcBOq-!60g1M%$A zG45r4ap@)_9_&TGRG6iYecI)$+E*|rSzacSl4;T$Gcz$kFBjOXkRhNR$An5pf%ASh z;HY26#E4Sx6@-saTE$ ze7ns87$(~PJiS3kbAba)Y1bNicife855vi^R)p`+kUA0{o}J}1GP6Rpv*Uy(I5eXe z0lzrbWYXOB3EJIo43wdT6#OFyL`LQ`y{Mkxhli?!FFHCpSQ|OSCPycC3g$wpn%VsO zPE|h<(1_fZlVh^BE}ntq1+XzL%il=q)9}~Hbj5n1k)IIcM{>bp5bz;L+0eo$vd-BG zSvI7>;$eKzz)U8*5u`gBPYS}GqlKlY)+IQowQfBG&@hmH=4jN}W1(EVCLY>CgR3eg!fq`Xt52m+Vy`<+D=sGA~}>Of{x-dtqr51<*4Qd{dVkN-MNB#2rB=%xTb#{tQB-v2b`T70M!eK^?^!GoZ^z={}D zKt2Le>%~fRj<*JHWRGrdXV%Zm7zRPer%87u`lqJ&&A;YXYJlvGe=q05M0Sgc2U@8@ z7aUdVHTjT~XY#$vS092}e;&AO&-s8q(XY&FWoKV^bVpEMT4olY#Jlc85>DpRD7i|h z9RS4PEPNVf22y8jyE~-2yY5`S?|yN|xaY4k#_A#->(&8j%R7t+|a33?{~&l(~37P72g)!4?AgI ztIjAP^_E9{3Uc?G=NQBtgE2};dRca5a3AZ-J?euL=4#gG5uD#!w%SJT$h_$EuxNq& z^%&vh0N~QG23-$po7bo|r1>@VI&d&kZ{k^p`j^@oaR&K#;U>5*G%DsOe1S~`OdKR; z$gtccs8#Tw)TxE~`HvGO56uFqda38N2zci@kq(|OwNRGCrJT-Y&)9NZs?U=~fc{3# zbwY)U`xJ>%dO>@NLF1|W5ySJ{qjjx;YfxSjrR2E_4gPo7^5+jebIW!Zbx7{Yj4o*MJ><6pdCw-w(3|0aE$f$~Vf$=uWwcRHHs4@Rw;D`!KjpvOwlB1KG$FaFCJKlwWN$xlJL4%5ErG~4 z6e4*UyyF>W0g{n`#HLOZ>N*LDYH?2?(Uc`>denZP4+Hy(u(*=aeNg9+j%NH@bd;aJ zI3>DYU5t18%*Kip3+1%8^ttZSED?zRtq(Wc0sS`_Y3jN>y)(85B@@T_gcin;-2D5O z72XB^wT&)dU_Jqo0Wfl*wbjs?a}xvM2Mnee$#}LYk+FA*-)Y_nY{WzX?X5jt3^TFm zx%$x-_z%&;?|}B|!%(Sav?|HP*(xj040}=z1rVta>~&GEuFN9m0Sw*E{z&}qtO4Uq z)lj0eG|CI;SRa6gxN%12J3CgqS#JqesZfbPY})YodzCLa@7IIo6+RLQ3U1-Sfv>D| zhr2|i61fQ9(Qf%VVtwK56Q52Hji;ry%8V|q(%)1>adkKM!uTB(jmZ_hJh%jz2zUY@ zxGRu>Jng)6pryH4!HJfPD$KaNxp@c~Vt|kl^2_~PYJW5fUJy{*eUWMC9=H=}d5m>J zrN6jV#UdqD*}0?fE-57i19j`={Gp8D*Vb1@U+83SJ+a;S09{xO{KhaXM+zH@+S%LZ z*|l)?XDMU2yLcw%W^c8U?IM>1G!GIfTp0eZj!Z2qd?C0i(Jt*e{4}Htj{jK>A@896 zsa4b(334fFfpj0XKJr(`BLAnMr6&+W8y?n3{Le;Q*OOKOPZaHj@EO@cyLRx^RS)mD zIC`z3J;fu8`-+eJ0|J`lpA8ud63rqSOJE2Z40ns7?k77}Qc!+?rPcIYT7isQhlfj# zx5LFaS%2CPIm#wxg;(tH&99@U{U6$gwp%zG@k9fAIa-IZvPUZ_*ndeM5~eO`5`xr1 zcIH=HT%1-M%R?}J12fA<<@_Cr`LC=gsi03A2!GCmVNg>5W^ zkX~&Jr2j-CuzBO|7BPZU3Kj7r`|6$VN+p?Q2B1S8@mZM%E|_T}^F9E&G8z$%u&9Hy zDQZwGqA|p~9GUhIJU{XXevSX%Oxc?^gE&S#Ywz6BQ)R~qk&ihNXmbFOAn9NXhkCZ% z`=KYHBTyHlFW*nq4jo>Hrt`x&;`BNCTXdl-I?&+AsWa~zz0!I4@;*dB1F4r+ z3*TK3Yj5*?N3`0{C%aNscAVh1`2jjE-^;ljZ+DSp=!#$jK$6E`T*3n*PT-Dk3@G+% zYHFdQ^r|l&P&>g|$!TX#5P2P(W{8lB0O=`Ej%Vn2?r$f@sYMGJ;FDgXJ12+QMef~2 z1h+Ta^ZC_TWg@`c-=r%2pTqKChs3L>C~50~u*AO5$GYt;_1yeIFMG5sLFrIB&r9*Z z_y;uLR16dX7+54n?j!!|T)+>TUYqk`7VCIiLN7@+xX;Ai3W?Ufc}7@Z69e3`=*Yua z*$=*zDsK;0Pne;}&@!;!Tk9bXq8`LTnNQ_0(0ELIJaU@nGqThZQ~fRNnNIyF8lkQz zdo~2GSJw;-;FddNB3w1NgTwD=s~A@WoP_yWy%*|t39UL*}r-28Vsy;*$ z`>>=oZ&uUu)Bjw1p9=MR&Q~oMTPt4wvQD-?QXw9saRYkz!(ZOF!eqCPwv~}9VnEDN zBEk|2b}~FDFQue$#r)sVukqU@T$1;%*xTEy7JrqwbuECWH+s)*ejht&^Kf}7RrC@A zC_C^%ic6=w@n~e)9rbr{(bNxs=y~40zFz!_s$NzCFZbC2G!dZvBSt8>IH(5>YXrb2dv zAMfU(=LE2p0CUY@^H_VBORb%M>>!GojGBamL)gKgSbd~%WaN>CHo+h+p=jg;f{_nwQaok~{rf3rNI z1pnsNz8KR`m<$Zz05i`4j8R0or5&{^_SPsOTK^WU#NFcNhRGPy8Ny7w^JJbtzQ zu;S>-I$q}geATR*{s;P2_@6H)#4B9F?oF(JVXXB1dOM!_a^l)dNDIpg8!ZubVX^ij zLO&vl`nU<28;ZnlP+s+?C|uOPN#<8$`Y&HfrGhjWj1(~T$)bF~RJOvM!3xqNb>@rg zHu|NU))pyJ?an%5UF&A)CmyD{#X-^{UdW~xPG@oQ@88eS0^ASK0)#NfUBSLTuqS4s z;7@S2?ik*b?Z!ARYvJh5%1k0yg(@*mC?-_wxHLnZNL5Uf4PW%ck+-nO1n+=f`9T>O zB%oOcTaCI-!Xt6l6}y~P%Y&36V!LXaRZ+N&|4x)ZtGy>mp>Be#I$PhHq{+dsMV<%v zO5rKHyU+$2xoD`aUb?8U`q&sh!y6-EA>hvK>AARIn5w3ml-G~`A#+QjDL4y-LdY}; zw!jUBYXcnxqb6E%a=JbZLOife6he8`)cCEi#{M_j@u|w-iLGd}u#L5~%CWQ_9UU$V z$hGu9_*Q!0uzq3zh#{&uGT*vmbn2ev#w~;ky}B>}Z?_0==Y96}?3|qb7{Uz!*fb+* zx&c>T*k!NKE63m8`=vuMt8$~H>7`#9b->6NTV?UTfB&qtJ07V%Zs0JS8wZ!v-0c!N z99-Ndz)@*$e?Bum|M}@u$Q4wDD@6$G4~)m+Zyfj!bV?twMw>*v|iFJsM681RbZR+0In85z8+dPurnA2n84~Dh1 zf1j3qg`HgFC|NV*`J!(9vo!AV!^A# zD?VU~e^UZLCz$0Pw~+_kbLuWZ-5;ce`%Q3cwfi@dbQgpPEI=oxQEW#DI6V4L_SAbI z{lG@yp6kM6P{{v$OrG!$TpN0TN)H_tXQbFwP#G&yGV4HV@H}3WFh{TQW1>->&cNIv z!>4cX4wfomK99LeD`0to%XIU7An~QVWE{uf_S98`-)=slL@D?S0pxuP3j+^klhGaE?y%!B?J%6 zhOtPE2M-?_v@bn^zJMH+YkA4&oAy&|INx62^>YSn82{Er^T?|+M*_`&zz0B~1DH{d zW{Q5ix{M?{K(A>&Rwcha^xrWok00xkXW@ux7wy#o)uccew$O6@Ir_?m`m4p2ABdSz zRxm;W&Ep9Osb&BHE;1vRmoOQplE;xjSr08>B9Q# zVJ~|_kB9#lQo&)k`^t(N)G*I*?utQrPZPAD93R5dEBpiNf@3{@f$#(AKk+?c()*KN zuMf&RJ$8}@Hs#jt3PZtKUt^=z{I<~k=*@fgG>7$yU(&UP-wA>_8Sn6)vb8lXG@EhP z>d2lTDUdxzmp{S16bLx=z^Y>mlZ8FLFEr>Puls(}Mupm5A5|-fg zy4mS#zi+YBkNhS6yJl{^K6>ZYt=o%2XXATgFMtw_4S@UJ^7+-1y$h+CqwuWqF!XAe z)e@`|%V1oo?PhdG$brE8p@nk|9|IF06piwC94C7lQLC;-7RLK6#m3oP9XUbO>+r1h z4WJKg`7UMHd&tBX(dMhz&=u$VvgYUZQctA_=ze@I&dX+7Jxi?M_b3{=Z`P><<_G`r zZ?=W8*^toVHMIOkECwp{0 zBrI+Py3)J_Lpf7FEidyB?h0r(!Kiu*Hk$rqZH#P!xX;3~YhhoxtI{+$btul>;pEAD z`?gV6m87$fm>BXpO()Fy4h2EGq``^6azGOcv~&#-2QIbwa4sFJhd@G^yVb;|nVoPd zSXZa_%OvM3Y%kO!7mn*sMF0q?wz$BM{P;rY$f`C4c?8=euWP$5<8s4S{SIA0R>GxM z@v-V$$_VOuzn<8Ce~-lO&W|^kh35qYl;;%FucL14{WU70P*DL}zM7Ui%DugPL|SP$ z!;Q~(;{-Vibuxu7VzJrf`egJOfGj87^b%r(d}KJK-paD;RrxoRJ8lcc>omwTyo9^2 z766o|PoFx`(t7{?Jr^V2-T>eOJ+puPFtV?~#qrqT>~be13l9EkU}*U9cLOP?6-k}0 znSqgK7oPEso8E$Hy;u@#rC*Y#hX`tYor%H0<+AN_+suf=Gj{y=5K{TF$%m zvcTs2onF_G!e2N5d1gasGa7HT*x?y3q%%NM1ihwDLINYO?1*V;Z$8I})m~V5ZDqrb zMPft(FxO39P8~yDdo>^dkNcOiu0`K7q6L0uAV6G8lSUeGEB}L#|N0d$V?x{n3=}+B zsB(EW$K%5Bhs%XCzbEed#mD2}I=>H&#U{0R;tVboUTqYrAq2+%%NqHuTllgAcr>k` zZ23n_dBoban3SAMA*cLFx({aQUf}rlL_^ zlG^vt?0@0|9@N?KKNw-mi|NLh=l_D9tTKw)Y<>jTOt3F`sQDA*Ujt~>np?g&SXGez{Ea% z8O7!IfB#Tw^S@?;`L7zhX?!EunxPzO|??&8OQ-As4-2f?OJTlFu3%tLn@4 ztC@hf-N!uttmWGVrSO(Eg5Wo0S6l5S$0t8KSut%h3y>j$!4ok5pKk~Joz9ln1}%>0 zAh14)i$nkDe3!}MWn6O}*PaTNC zyfE`GDdXtf87FAzHuh0T)mYSqz&;DsBrEDW589e-6F3a;IB!1ssElNvc19Ow4ne-i# z$(R;a{VGxvf}y+_{_}nCoN4LVFS(qois`OI?ts|XtLds)IB=w7jSP+SP#R4tsJn#BAIi+Py5 zF-^-z%MVFAr%-%syqxIZO<6apPo7}tGfH{?j{x+ix_!oJWcBjDgps|^FHB`*X^q0c zzuJ`4HniI>y{yE17hr!Bay@7juDl-}{v*5()}$QIqaIvGUAwl0syq$u>^nx?b=bRc zbkq;BUkz=;{jTU8yDFg#%*{pVig^FRd5;BYV3zh2K6U@_p`u&nNYF*a6GY?b!sHYY zHDdf2aKR`K5BBwS*fNNU?%#DhI0W!Q(OGzFvL5}a7_=vVXYitGpn;h=^S!jO*LzeU zI$$jpfc{wnJ@06i;Y_SDoBMOsMN`iE>};DHmpZ1~$Rkv)@Zzav(nZ=YGQ+JVpgu{qw z+bYk6LlaxY{Zg^1-QDxPwl?J>$L7x@CRCsVg688RP;@mP%Wlk{;c$-1P4K|8QW^ zXQ%w*R{=7Ck%gxF5ApMk!PKISwT|l=LO1!#CcXwR6+Jg!( z{0|@NYsB@B8sy$RZFsr2u^-g!mtvynq`KX%%`oM#a^L@J5aCW+Q_XnoK#KGc|AsHdzUu0v_G)Um{bsRRR?$XfR)LyDmVJnjm1UM{ z24v>o<&%!k+?qLOy7u{Ln3(Yx+phBo+hD5uJUnn2rztF$E=N^r zn!LK@9U^}RUNed1-Xz`=J!iJJ&MW>)ks9qkO0L5$u@Q!yT(`eDqn%0#9Y4w;25-DE zw*2B~dC~XUvs>|d=g-3OzsJVkZp6&Ew3oZH`F3kN4O5cv}D#MIV`}QgR*jx7~ZISoc%7iaJ&l`VVyJ z_F0H~QeZ6i!ku~{{puAd;>2hEMl5Uo$=J~D3UVVe#A`u9N?CEiFZ-1hhOp2o$EOJ# zLqZQ7=^8FDq`!uSddDZf5KmJo*6IimvYum66ve%QPC$F(>I$cB8NJvGDs1F$(CERJ zkDIg9>bh^d)>AB}j7UCL`j3yy#5E&a%wx)>LGYU=gUxFE=5kWMA~|Olkw)B(tgJJ+ItEsd zveWva>D0eAdb*-7G!uIpx+-7ege@k@a0v*0%WDKvJtR}lnNU(6^iTQ~p28()w{(S& zPAFmBoOGn}l<1z@+$#$c9~)M-MYTt{BJA`+4sU>5926wEDay3X|4;XQAAB(yWp0&a z1<7QYVq&aM*B=rqdQ`emeE_kf*+Uxh5E-`Oj^C{n#~F7mFW4R8d+pS6Ixz*+b!5>vx&3 zUIey+><&znu1pgUAWvxcJ0P^$CMFtaYWfmp5+l(lRE@IGr6~va9YqURBedZfL=$ z=Ek@GUAv=VNzEz0pOU}@S&2)7MX*PUO-NyB$WVU-+AGeR z%6ov3kYH(bFfN9JgVX<}YCym19vzRvmMbm zI@KF~ej#yb9AmOYZ;vs7YaaH_^>~Hv>}+G+rNYmTj`@69T36qRHhnlUki$QLvsCW;r>CAN>sSWAv-@#@?tK=;@ zL<9k4{&9u7U&he6)$T&9&RD?)A=4;&O=+=v!7?3OR6XZKqc6Q<}E<*IePJu>E zT{oGTRcADSCRb?Qqp`t9LSlsSQWlinJInuG2V4s42et?K<7O+uC8(N#B3f$xOnjE6 z{JVF%p}z3KhnNkYs?=%wso@%7tm~}nu6nfz~~l$9G{)}30T}9d8)Kx)?7oI{3f~{4Tq%n zd6Jm8In)olAxu@GescQkm}ATHh_~wuJ}|G@iI_@`8kK{?pp4A(y0(Z%51dzS{z@eC zv`v4NBOR^ib@0c0r1#B{7(>`t2>rvvJ%RA7cd=1c_IHj+PCouO7XTae$6=jZLZUuw zLp|>o1=2Jjb}qzmqWH~@^t%~QW|K!3yi-+LNK`Xaz+UdpIEJQR&Mc&IiQA2z)1sBzJZ7^W%FM7(VDl(oqV-WjU(eV*gh1vbeLa$*!{X*axdfu{cm9Ffiyw=QXDL>{y2zA`L~W9>*)Q zF!4cR5*B=NY)MH;n2r8TR{DWXAFsD}N5J;GV@G4u13caG(M$aQ8z=kH-G3u~gGp-E8h0s?t;KDrJn*Juc>J(>p-{g?betWW$8>j!VLz%M5pQKgzv`F^O zUZ)Nn;1BRgtawAsb3v@P%${U#bxe1;c=}5&I<{C*0-W2UjWJ@`k|N6?+VwF$btm_x z&T8ArTCL$-W!-r}Co9W9x^q6@;pula{$)1k94CVpCf+ScT|r9fW4^7<4^uJjR&}p* zIAR*5FA3R04;9MX$A=kVMNOT2UZG%AJDwnUn&x&X>GxvJx#0J^Sn4Bde>?wP?UD_k z8d7Z?y_xt1d_=H}U;^=E5JY@A=5W0k{}b0+C>>0hy0^c1yHkbwjQ9TihLG<~zs!al z@W!x+HV_EOsI|Wo9C4JRHi$^1>wx@lN<{1HSB~!yC8S3_j^@P`I|ghNG)jRP6JOKr zHlg7RVU~0it`PRHHjavmJxwnOKQ-OOaA0-9|3MF)N*~2;he;mLN9xs@a^n?e41&mrPNB z^}iyOMw)iYZSwYbux^astfqMn2e&DH>|p+QTH8=Hb^6DupvN(gaWI7L$J&5xBy;6BiYV=EYKe^~XoOiNP=cF6V+B6b+jLd7u1Z5o+;6fAWaofO8GVD{=_t- zKgl}rgc9QFQPacQJP_+mfO-(Y!Ew4#*Z4ve2bG#}#}p{J*QkJTV&Gd-BKQytws{RlAs%ocm03`S|$U zk;!Uj4igMfB#iYH>5S1*OGJ9r^cB_LoVvj0I^hSZ>ifKJ`<&1;s1y^A5KS(s^zSOu z+3O?Ul3jSvKYy@x1X zb`kD=`*&$RaElLSX?j63Jg>*FBc~6R!#DMbo|6{4s~;A1f|TN}O~Vae2VzuJ^j+H3 zLCf>Z6>-)7l%+LA128?1wAt|sKI)A1OaxCI$PLHv7~7)&6>%s%_w~paAuiUJ#E(9fn~aQT zO~J8J&&`F|)!9QDgH~a6Zg|lC6o-J|WA(R`+4hc(t+7U9D;qm;z`qfRHdx6@-nuUi zydn@GT%{W=@k;U)Y?O;k?g34K3sbSyfIoNw=~oaE`uO;WRK3w*fcml2UBz5i&y?#h zvFV(wTqOIXw3>sX^g;iJ4<8=;rYvxBwukAx@@NNLbh)ENsB6b)t88({VKaYHliaa2 z7rltmR8Z#c-=w8oH%M1n-j%W3y2W1Ef+*C?qI^Zf0+ixLz)|^=WfM4U!oFg5AXTkLlYtX;DZDr1ZET!eKg|^y%7VR(okuU zdCPO&x3}nYDJUXPmwxgHBMQ3X>9w^_$lYYzXX7?t$qRDZR=!H)rC?^JTI4?S86I|0 zNuTo-Dl(fpb}fO~pP@SELu~9`@~2p2bN{X%{*D<4x2P=Fpwhp z`0*xmqa;w$^0rH=NrN-AlF$cpv~i$&K!gp@58>e9y^qbh3Q08BCMMEu4-Fq&K^O6* zxebxIja_|nmZJ||O$ev!=Y;q2%f&EC4Q=SRRfdO0C0hkUX{j9_=N#&aS^pcLu5q~< zf8=m>w?9=6Q>1$B1FUD;)_FX}6-I)xMr_q@aJ|?*Od))dCdSvpPoZM)llPBOwvJ}$ zkgjeUJX(-*zP7UEV8Qo*C@=#{eZ0-7YUyriB16*ubb~+owq`ICip{Bx=tY9My9JQL zlc6RD!<5npeOiFfYE@mKbXj_?#nU9&xJa>0=@AS|$Iau}nR*idR-eF8&o#JENm`V7 z@g(gu^atNA_T#38>AmH0ndh=n&fEfkNqB?PPdgO}G5LX-X|;XbQ9^!=iQRL~jmd3k zH#hXhA3tvG*!e_6(2P&S;wirh#FbBhfof4h?ZQ&-6bEN2emU5O zwI8;7{c?c1H{*DU29r%qRVbaCTLn~PaQ+HH>deJxmHvi?{eDP)&*4F~CfVu`*O!4> zAe=}W7~rhQj{JNZ<`2f~4Uw6C-)zelu}Lq+m9R-jm@;+G8MmlNNztpv4!?vS&=*x? zylmXtv}#b_ucsF8f$L6h6^tRgUx3!|mTUxa-K~K55$yuI#Ngd{W6j+Dv zZJsitKs$zEGd5Z683JYgo=t-|0rl`Rad2Q)gr zpi)z@U+J&$dSnC~B>WLGF0L0x?z?yp9`e((n*PXk47fe5>e)KdIeNOUJU!j2-nQn@ zlmI7qN5GDPJLV%0Pv)I7jV7vl zaqIT&MEfyOo1D^8q1ovvXY8E<)$BQ6JThT4l&8g12snMWiUcB(ihVPRnx+(Tt>QNX zz_1Gn9Hi%S@vk#m?AqW^$i1T-);iyFnn4T~T6m?}WE-95*#$lnMZf?$1tSscv)iO;Bc7@IfkOF92cgH`U`@->Nnx2R&09ts<2Q zqW$C>Fqry0!=rL^xN`BXTIM)wTLz>Z?U_y?y(=(1$YUQC)pqJ)8#f8NUMS7PJg_!r zp`~53UhY+W{zFJiKVFhWz?5Lzvqme-wHw;d%Rirk>T`4OdPrdSLu9cVfq zt_?dYFa~{Vgxz1yy*$`~;ry~~{{+A|MyAd^Yyf4LqzT)3j+X!Z`#>+^*E;do+SKfYXTv=}ZlE$6H;g^`p>O#bm$ zamTds5RJtce-jLP1A63MF4ZLBuI^8C6V_Lqe=fO4b4_5iB?&lozOq{xrUu*w&*HHM zDIBeI=m?CNc=f9Z{|;}9wRDXCn>GlU;^&eSOv$I@IWeQ%7GXa88D4fGy|Uzbc{KX~ z)^SXr-v>EEczL#s9jA{f$3k6O+g0G?|0SMMwyB;EAv+jX^2^p8t*w2ebx5}@;#<0_ z)*^KkbhL(N!;DM)X{y<#$fY+_6b#TN&>ZklfY*@DHp+jGHtwper5`KKegq&h%o5iK zX&*!_N^&x5)-qh)IB6%K?k0hEFy)2*H|@S#W5Jm(8rAjfm4)`>#BbEpplLpeUB@Ps z(tz!JTk;_7-JdDF!XVj8lv};s+}_>*+Zhh?>Ul>Z`FPBl*4FEA)D)wn#`xvHax_H1 z@}`yA)1OA0qWTE5d6j0+x75;*09`gZ`~LQ>Lq4_zBcu^ zC-hG%r&d0pvPX;`GQ)jRRJH=+g`he0SWsBz*&Vx-dXDrBu#JVE%MY9wm;GX0Oc8n@ z6pn_{sa!}Y%zQUl7J!D)1WXa@2VZ6z^Rul%-F5B>X5@JGRD(;b6PDtx6i^PT*J-<^(qv`i{XiK>gO?rfbJTA@8!M- z1POv4d9<9ejrz?K)gB{Aj9_I%AvHkD<=eSne)95VzWH2eLeC|=*Q43H2Hg*Y-BSN>y<8paHPuDDYs?OmeEp;?$18kv%afR9GE_5u7wY7TO@XX* z3(A9yz+W(@L0nfyg7)~S+41c?S;V*3I9Af@^tx8Hrjm2vh2k|ERp1|3Kl9BX3(rJ8 z`nRN2l+32zt0CL6#*P6^{%?mlaGW-{ePMQ7EA91T^_5`M;)cL|$vBOwLXS%7j1mqBODJYHJ>{JsWln-9@s+WPvQ z9Y^KF<3s*{4dCHEgmk|JdL7n=bL`>+C~|HBwkSImq2yvX48!W5vT#XrbJ}1!^{S75 zvvsiABE1{8*ff4NQI7M7;t>b8GMM<)fwp#GqyZ245 zc6++kD5>e$t?R<=vXB6%sH>^AJeYMVt6%N7Ss$fJNNBwCT>9o$1Z*9yFlM|bGUiDtFAdV$zk4h5ivv>I;w`CW#7IfJyLfpv0?Y&CpwFt27_Or%3uSS z?Wgln{GuWDtumm_2Rj7$(Z5p`C#m`{4?~~lV7WcuM%9d#P0RmW^vifAi0Uok6w^Cp z8S}|B{S0$9Sehl>&yo&_=eV;uH>XnJ!fdf>ZqBzW*k3y_L5A8od*ao)>~1+(fg$c9 zIhq~%??hw-`257zuBFLOE3kG=$^72%E_=5|2=0pG^~JG|?A zz%FVQDq$t_r}yCb_rxA=$-3N^Np^3KVJH>{H8#>lO~W(_TtF}+dTeAC9dRp1@9Eg? zTAC#t?HYIne5$E2xKc^zn-OrCQV@{3M3 z#<$fUkfXeP>aUR{xye5NxdhiT>~*#mf_C=LH(u{sh7QaEH7(!ZOG?VlY85=C5%?1V zg=jSsa@3?w7sBH6c9SNZdUbiTi&kq#f|Q=TMM+6XrJOfTrh*>IhRDmxe#O*N6>*Bm z$~8{d*u26T2N$dA@T#-!>KG}EC)ff4rekd6&#X?1cTO1{H-x{Ot9}1&Z@aP+V_y># z-D+aEd+2%7m69b#NHW^}iC^aGzr`+n_Da!qP~A8a-HGPfv!EAo31(AX1kCc7J>n1- z=g2DdwS`5(S2t3Mn1gUuih~1w=?-kg8MP z*-5SzKTVyGda!=@1o~{r`pbd8B~yexx`T4(vE_ts&9CNsTL9n@+02`mm|8KqMvX<} zcmplP7ee!DMn~~rNX|z+w#M;zTOiUJayIDxw^F24ZMeAMuCz$<+YT`lP#a|Dm*nk- z+)J|rq9>Zre_nHX{`Bcz*hd3=q>A8kw{JIs!`V%GF^}xKG+yi@>!(djm$o~Hp5B0{ ztCV##G(3>jQ;m3Xz$x=OxisVxhq-2G!$ImTHuLi|GxzAaxcC)=x9sOxplVKYV}+`w zId7?|-aJ4h`&zn@|~Qz0NKQMZBpply#hh?;gD-{N^D;nfPJO zmrsRD+p`pS%6#m$=O-3A)gIc*#k=sTz=jP72X`ZWb_LV4q?luR@A=-|6}(fk@4>Hp{6AZGu0KIGs(?Mb z9m-~mzI}&}?<%)mMctk1Q1y7- zzJeblj(bLL5;J%xN_o|}v*6->KGIJNMtSYo9b*^Scyy)6Z>ar{I&f6c@n8bmwEFk% z+ON!lVcBHVF?vU`j39LO4oAjk#%`(pCFxtYG{T{k7tGO+|Rz3fcH?Jd9&#Kd6=AUKC&a}jD-JUo0PA4+p`|EY{jT}|!mf3{RB z!&>~;|H3L*HAC(3KswpIHwN-&7ftVCtI<55F9m|{haBvEDIY9*gV6oCJb-9nB<+F4 zM_8g?pk{QK5KjQ6?`8ylO92~7g-cvlyz5)jg1+$C6nc^ z^5vXS{kr}Z1ep(KlFKknpQ2EnzM z2xS2lw=g9cH4Es^Y|olJaNS_AFcDBc+!U*GBr$=0rLLocik?0@RihT8BT9D2*uloG z=G))Co{X-omwZ_{#RvijsbZ!NY2qte!zy11U|*be5!o(eJ$|!9<9qILYLDyY_STfq zFTP|$pRmO~sN&zNo!|G6X%fjE z5X=KqlT0^mC@?9HMv!Kn+C_8qL!0o}ptf!RG2o!3Ypdz2zpAJA4!no?;Z&jlQpOo` zNh0J(bt~GV_*S3q=7;_OcN+H3c1iB>uyG9KP$vgSvng|=&HALB**7h$(oF3yLv?`| z!PY$<EA3vDD8 z>djDbX}E2KC+PK&VgOy-R@+L)()Ro{@Z2FpP0!C`$;+#+zgB26&awEF-gzAJ>Qj>O z*RjH9H+_i4Y_jnaxh%$b{ot54GBqzh(to3NkapUi_1=l`(G-CDyFY8 z_L`K`vN^=O*6ygK14oG!Wt~(0mDJOGlgOT-u1fuH=h_2dt^y2g$GP8SexDRjzRpVd zv8~5r|4~ThR_`WT$q7%11-#_Z(b2yY>%onv($(F1?MO4sto0k|f6}>_WmHrGIlnB; zE&UAVE#ST`wjsQzen73m(DtJ`27mnfLf9UQdAzW5@R%b#3MCtnH)Qh;PoDFu!C@Q` zQv^VwNq@)PgkZNaRT*#v1@o$+iG%-R?dqb)H_KXvBTS{CEv0vagrwG;S-_eUpxunEA9i zF)Ew5um$c}p4ZQ>poHD_2+AGl>Q?x)!BiFnt3_B7VoD^e7!+jpydI+^y+t>pnfB5d zUiVpJwJj19I);8dRFuxnUIUv0-qI*Fog7tO#Y59)&&^}jF4IrQ1joK450k~{od zF9yTIIZ}jz);9Urwa%y56e_Anl;XV)ED9ayvObn^KfH>M&jZ|2cKQ0W%(arya`hCQ z-QQXH%_GtZ13A||KW5b(eNk48HHv265=T9FFXBLApprwJXWjKt^^j81+AFg_Q6i@# z8!=_&iR#89mH)((u|EQ9C7_dGp}=umWuD}N=Q%6^xz2)AITjawygn%V3Dd5X6|2*Y zG|-O8>TmXz2CZFo=~uM#&^Zd2oE@xQ2P*}VXXNsJNl8!M?@A~M4hgWmL*sLFq&T7< z!J1+kLmc0dP60*>Esk)gxlZyebR!YpBktgiTZlO#O=MIdZnthGu8{jQG|~0z1r+rB z%Lp!`h|Sq|Q`^`mVBtJ9ZrVTHl$!4Kt+rn1kCVSI!7Hd)CZ+mAqCfV@S6%YBxOb_# z{FS7d##pg#3eQPL~%VfQ#bgJ@y8}8&1t)LKM=tg3w02t+ZXtqPT-w|EW*x{_3+7 z(>AIzH!?~BY;0GjKjkPCx@b?cyv0ELlcdjO^4c3yp0`dtJ68|P0j$z3SSe^|coh_g z_d-VI+kjt|mIqQyeceY3O|guO{tgu^%T5d>+0u;gnLBekCY@?%YBfvgdQ^O*L5-K5 zCb;J${&uIpx$t0B-DhhUIYcuMB3T?KsI5Zemsrwg|p~ zTS9f-1L|y>BfYH91g$cxaUS~?n;kMDYcilPXjE8Hli$${aNPVYKQub5VYC)m3-pNV zC9pjWTohxF#}R;BC0AxNuawizn0I z;lJMiG#w7}%fl&}YtQT)*{6V&1#oc9-@mx}`^z6Ahc&KL6Mi3C1YSl%>T!#leW(d! zRcCVE0hOx%W)&SF5D?WbDnA2%pOSK^9>Shr&q6}48H;pm{U=oUs;rv{R<=TmQ)KK; ztbuO`adE$AWnrOaW-N^#l_foUZO|9K4(o(RE+?)a;H(FQ!R_O5J&c|p z`vKV5D>#WfysJ?bSXt-z?aLR|^5bM&pbfv*;C!!;>X)Y6I9nn&M%KCmjM7(36!~<* zcC^6m@q*6^uyl}SLBzkAL=)8SMZF=QngIU@wnQ<)&NJVi6WeWGFgdxDB>>GS^5|UV z=y>9LbRGAD2Lw6j^U{iGv*VCwfOE3Hjs<&DPJJN^5GZ<^4ZUMzX2v9Ib$xkul)!4i zEoTe#pMe8s+cJj^qKR^QFTe#Bx?=s8c_MD`H+|nj7=2>ryl9qFQomrAb1Yks3S7U^ zXliJFTJ81a-~luO;bH5-9V?hlECB5A9ta9e`!Pt>PjrB7-pU@P@2)l-a2vpZlFDr) zkx9t$osWR!l;LW;>nnkuBEmZNY)=k>-v;(awexL5199Lvn6{dA_hf*hsozmlbP`X# z|MXPsD~%kI&cthWJNCLw-$Ja@_P_eRP2em%85`{A{$niy`#gqAozh_G5WDJ&ezh?I zH;uyrwXC2cC(s*#)ny3FzZ>KMd9ItpL7~34t4J*N$n1Tyb-FUjEp0a^ zfhBTBWGaFy?meU#-4Hpi-*>2-<&VDM)({g%$RRNT)FX1D?8V;6tls9iq z)^m%? zU*}_Yz*_eoSOu1P5LyVitkDYDn~ zQPi6$e3z`<4P8>?s{wlCWTjAj*Jhl~4{a?i14!!z4+pjGe{6aGbx#_;h^z1dcEU99 z#StgYbLmAiH^NV~}=z>Y6fVG?6^@gg<13!2co z#w%_~O`9W*S8Pq>rKWPq7}?k`;dafpprWFR6uXRYlRGptGurK$8g!;tR^jJY(>QMv z4jWrvGY@-r3G<~5(*wI6aB<9gd2EhE<@7f6;Ego}#`=5aOscH9rY8#b!4lxrGUP;x z;4UmA12O(v>z-Z}K^+h>1LCZiPYyTV19vxLT+~Wjo`AMnd7}tM=z8$oGWOgYx4(vT zy)a8dyx#}lou)mvJodi|St#5tjbchUdUx7?WR(%n^ydVDV|-iX!BUScWRA$LJGUJ0 z|D!A3eBcF}=Q=2iyNhgtg8S5k(pph&&L02+221yQCI_#aoJ$Rx4)(!|QtIW)o8}f- z#sXg60L{a190ZIq=xPyv5QGYVaKptfx#x>7VI2w_bIlDt`xtE?a^E%Uv}ymrM+Nln zNWpX0BvZPF9$fnC;)aNIATWVH0`DB6P>EPVHX8!G#D6Cx*QM!bh8A=C(g?g`ViV+> z62S2vrAPZxj$0@#xi9(d){h^66p)L_pOOQO4Se8uOM3_)Q&6L1gD9x-5{}g`*?E72 zp9?vT4O@oipxVGSGGZ!Kyx*pN!7gwj9}CR1(ADONQrp`c75pA`U4PC(_7)s}+&@4_ zD5&Y>0u+qITz`2NavA^!Fo1i(**4{0Mimp;O5m^F$LDE5#Z)N0%Fs!T4A93bDJjiM z(O2Vz2GeF}7O+FY*4BxAYTb6!A3gTx=V|yz%h?Ap^m!JmZ()OOaFmNiDQb>_KR5R} zqSWz{5u{IYM$Sh@t6YWVBb0EFLTd!+Qxo90!b?d>DbCuD3@Tezj%|EbbyH8F<@iu9 z{Q?0Lw)X7mKkf&pZn*9(Q3-E({@QY}vZ7q*(D$Y4tM&^EOUkTjC-i^ida{Q(m^tx_ zcO7`%2@dNk2)C@FVm#NO1KrmhpkVSldKrLZ^6+ z@(4RuD#&fF7)tJ=%lAeD-ws2_iZ)0B{zmc|bMaf~U_qx#Kr>1NdKKlPtlPJ4y&UZd z*l}CRx_i!KU)0g2W-bmkcZzA>Sb&Me>UzYP0#)L9+_WV?5NIQJbR0Rcg-&0ku0S0BC6c!2nVuP6}$ z<^TdE47hHStuR&VtVXqwVf4-9nQA1TiJ-UlZ-Gp6^Gw)ZBl7zXA3lQHEFb*-@2aH3 z+hd9d0?2b}f%1z_>s1P-ddXcH-p$Rdr8SEHc~J75NRRK7N95QQUzAE0$C=vLupg}T zwSRAp4}f$F!?{$pKd^0NV=JReJ&%NMi}K!Eyp8dFb?OHID%XOfW_$mOrM(bN?6+_J zIeyP;fXmq;!WY%|ouzAg;_&}r?=9S-T)XhmQA8933=jk<5s>aKC8Z^#Q%btKK|o1q zkrI&Z?vj%392%LSy9Ne0&+Pqudw=I#=Xd^s!*%JUDDS-U%=12Lt$W?~z1RWsF;5|x ze@C;nun3xFIKX1S$1#axG!2u0OFl1L45eTEL z5kNE5Z*8>$c!fx@Mf=BJWrn7#j?-tgc1IC~yZuk`@caSDungY_<){w&3gYRxP0nh` z&LvP&V1g=2rAX-(2y(uGb-ZA}&1XQfWw5OWEKlH*xx7iIQ^UdsEKY~Cnf5OU;+o%m zJ|V6K%_+gRGBOERp1KXY!EKAO!|RAd@W$E}!@9||TqwD?P;_*FQs_EoA^=;6kkcL0 zd3(73^HRp+dw0MLNH)+901*krQ=W0Op6qw=^qQM21z$) zAKu&Fd|#^F^za)eoeKFwR3yq;E4n{hC>$!H?37lGI;_;LBvt|1UA`xD3G)#Vc~OmQ z#%d2zP`YeK=cS^_SxKT;Tm}8w^5#&-V^?Y%Qh^At9BYX|ARMEhK0v89_Nt6*3U>{D zU%+huE6k!B<8eHH85I8QQ^T2%HijvNGDuYR;niM*$bp)-zl}G7c^%X~boFOpz7Ypa zMj&HiwI9dZhVE$%N2-x;UdvCbjSD%QS%E@LBJ6t@=|QGUP+BlAp+a{pLkS9!q%WUslo(a}o#CtvSRSGony5&iIWbl(9D zwjVYvilBpj9J7{JYSORn4^H4-iA1bG5kjI6TL7$tJ>%z`vY!yU)ct0W0uE5a>CaN- zGh-->C#RSjkg{LDe*Lg3;_`kCl7rpY&F-bGLy6|nLUFJfuvdR;yP!O-I07vFlukJ$ zYjzjc|5P#osumRW;|tArfa?If;_jm0{OeTU#GDY$VLp}442YZh`uY$+ya0O3WgR0t zK;y$owl=#|vURivucu#D|48Dyp}F~k?sA-m&q93rWji`)fUaPGX6JbUXi&VKDbF%6 zHoN7QN;*0=dH}QfBr*8`sSU2yHd6K=EIj-XK1o2UT8Wc8pSfIgag@egFwYc4-~^-- zAfyBK*#ZK|2G%AKKz#=oqqHd@3S&S<<%c-Rz6}AO-51b!zcJbq^jT0r*%gBOA8F2X z{LT)bF`zsFGneiF2pjOwE{qVjesUiq_r(PQI?d?VA|&&hkP*FIqrQ z8|YHPKy7g6&K>VV=Lx_q*xh9UA-8*LiXyOHel)Ir2qZ>XGEfn{MaZ*fdyh!)gKHk` zVa5i5^h`TBMgODG=jm_LB3?A041Hy6gYiWy3=k6RvA>&#)HlbhOse4lrqg*#J-X2D z#+dKzH2O46sZD5Z<}N!M+b2M3mmTQ;njHHHG^IOtZ~d_}?u!RkMpud+d-#~B_~3OR zAX)%g*}J7x>$%3v@&Qf`ytckR65tS$PO*%BEw~|lnW_W-!v6E5rg#c#wsk2d;;%96 zA(_c-L#HH{UeUhvz~0*0WB_?fr=c=Xo#9Qe{M7+WPHX`qPs$nC%nIDz;XA%E+CzEk z*Z0iLJ-E^4Q(0OCT$T{Z=Cr9omSY6)AE5xYF*-}Du4EyQV#I$OMAQ80oy>1TnDm-Y zrT(58PWB{}eSdxA=r&om2GP31W3n{$+(jw(i=4#lG)LlqG``*bnZEP0O*zPG5l{bk zhriALRgi${0S4SXfass;7Nbdk8<_<_b4c@*B!E)I_y&gdNPTEjK0ff?tOe#iKXWXs zmtFtz6U&H}2P~Vbpd!>K7EWAKl|u5j&)6vW-*;(FgNOOoAVt8r6*V#OW9A0(5$OlO zK>>`=dHXUExTK6ZJO3?vm*$B0Yivao2!n6sp8|y-xDmcLe3_Be4u5;P9J>vVIp6(X zk^JY+<9`1cRR3RtGrC8A<*WbwD=K9D|NjN7#{a)As4elI&44`ufUdtr)EVXO6n=~a znqXkWMDh4bWeWbkJLjT*!-5}8OpGcV-~@nf6`ZQ){0TIEzjN*Rfn?IkRL1c5BoLT1 zQKKsF^WRdI=T7t>&{U={{?A1o*!_W^0+m#GwJR5B|3PK<6%~&WPOkXPY-l* zV!y$SsN1uqeRNa=s&TQ+3rhQ6byukGwiJHH@_WraxCNMd`il#4gnU1lL3Rd$Jw?=K z;h9Sh_j&^$X;QEAM70_Yq!yH4^q|zu{R46%Eqb`fCLgTLiGnMsg{04KNj|yXmQ8w3 zkWlQ@ork3}+)$EGT>&1kzrO-evFp3WaDYH#J{m;CUoTfs^rx-~>_u|jIJ&z#*=yCVV=>VN=`-(ocz0X(u^Tx1^ZfMhyM zE>B=$leMO1|NT){QABG68f- zKx*{s_oDz*3;S$uaTU5}vb0#hjTJ{alJf_sCji<1O)^CnP?&KZk~Xu(B~pUP#1lm^39R@C+$NT@1p?Cy+=P`Qi?{l_#$QL59-Mux}lHS2mhCEA~m6qmh> zeUNOHxs7206C^A{37>EWP5|O2azUTEeBsR`Lz0z%x9m-_kFuBD6R!Z$2xhORydiGu|}M$Ly9o26105OY4PXLQ*e%egFsC8|!gn-)=yr5c{UHLQ z9RPbDb5RQL$21RF0dsV&){fX^_hL0CjX(tXMUo~MTjHNtD;`YG@#bH*}na!a%+6++wV2ccJf@!q>H*I}rasrCKdj7jdTt4R&N|xh3 z@U;Is0u80;0F1j8kZWrWJc+74*%Z`Xt0tq45V`Rd{0b%Gz#?{Mt4TJ@hvo{tm{)CwiN>+7^y8>$^I8ll{a6f7*H5Pkh0!SXuu z5Qtgchv!Gwu_Vf6<(zbCWw#*7!o>d5gq>kAR@YUT&Qi;sMOjEh{OXA6+0)LR(`N@0-L{eY&-do$u zbUl0ebkqq=ulaNPJb#p}J)3CoV6iQOX;7sK>+XVgF!;IEtIN3@xC5POP&JA6(u#S+ zpPvr|jw644$$T^X1amk&rogf#c`=O+$XO(UPY0sn)T6}u$ldymwNs= zE<_s)#sqK~NYu4}ehI)p(lt$`->-t>x zm+brwsp8+-ZXBXmGWg)1e*rQGprN8mXO@oJSpy@p|5wHLhvG2_(5T6Xcj1Kif2nbq35gQL9iUyQG(1lgwKBKja0Kx=>JhL@3RMx@E`6cy%1kuu<Ep9qVUf$I?IY8TEe2(sFYAC&63QD?MfQ!<kYQxVmb*eucNxS;6!C3>&;^aC!E};nJ{Pf$W!|b}Q;XdUt$xb(j;s5vKPLV81K- z;HIwm?TtciFc{v3(zvcsz*w%C=iSv!rbJS~P-K6e))PRQ|kOI!#D zk|JoI+;oz(xY(D}m}}u2J>~p*HD9-*$e;~`|9K{qHECkeU$8B%%642j^*<%n-Gg6m z}J=VOI5*p(KOS}}tst_>OluqN?9$OCf{a(;OOg;O`+?t>>++E_DF z61xjv?|4GpD11r~CYj7r{RC2KKOupvv(ig-8>7a>ReL^7lag(J5k>_d)B1NCMhYHD zz-zBduKv$utzZLphKL((78IDI_-Q!A!`(g87IgMk@isUbt!7U;0a4{0u+Ip*0{pnn zU*Z!LMOvI~;2&;5&@dvq0R{Qc%hCX}l=A~BtFe)0#z4KT=ZRW`nCJ+N`E zKU=6YruPWA%|_yjrSecQ5$AdC((6aD6fZvCrsH|zgQHz|hOT%AKeov@{;B2ucW*x(&v_laqhK`CN7{-9DZ-2^<|0Lhdf``U6Dw@e>lWvE2`Q z772qpu1<&SchJ#iby}Qv?&^A6StTtQPE3{LF}GZ_Ws9A;oh@>IHccfBS1qX0NQg^m z|I<@(ZgIpF?A6^RQL)staR)w|3mkM(M3;k4VSPbblRaQ_D^FOQxN6KqXBlipg7&rG{)wpo@82 zhP8E)gf;^^A6z`axa!Wi5!0;p6I&-8W~a^RpbeYm&ykTe^HVH@4?K}QH)ZPqLsSj# z?@@euD1!QJs>y=yh@F;p5y`{RKY-++n~gTeP@(($`FLqsQ90X4>?c129bv4>eR%u! zF~c?Tsi#+wP4fG!iG0`X9%4nhI2dtogsZ!GqCi#305%JR*@n?(XsdU)&4Og%9-6DG z(UYWBIKs=_6N&wj>QDK>*(UsHqms2Xk*?SLwRcB{E1QKp0V!$q0<}f9)#d9{pR%}l zavkkPg2*sy^NL2kaH7scv^4!*2d;0n$3&tLi z5r}$vKEVF)LZeonI$+m*n)>UHcduM8i>B6Rs{|o+b%cthTmMy1Kaymx&VJzK#4i$CFxPssLM-OfB;W zIH`uZv$~J7Kpxzs^g$wU!Q8Mr7#Oxkaw)ExJ&IL)&Zb!RN+=b%80q%o3D3zojGE=C+K2(;YgR}ed-i`DKk|1 zJo3lu%Qufr?YrtG8Z{`NGJW%t$V{)T{RCht8Xzz95!S1B+InqdM5rLlNfapJHe$%? zejM;AIQX#dLM~Y-MOs~*W!`4@lV*|0eiPbTd7*X!nH>!M#bmB8TGktPTd%Kzr|Yc< zIyx{* zD=jv|i_lyZX>W~|FB|Nzsm(2&y(t-H1vAqp=XY$+hFP|D2IpMPG)I+4Z1x_UxHaJs zt`E(*WM@nzMYN?hVemK|a^T-ZYi?cu(_#GakG%aNUV*_8?VL(}#`zl=bX&BWAtw{>ZKRLvn=?D||Vu$+x@ zz-po3W zkAy-QtTqGF8>Nw{O)sWTUFceD-o7bP9KM2H$ps<6VrqBwAQJ@4dKO2z$I*HB?Dtg<@7 z2;$3!h7!VWZEeY|pw++zutu|JZ=tDzcfW2Uvc(M%mk4|9Cz1}@-wlcT+v>=xD_76C z&!HxlI(bPpyB)E44nTQx^DUvSp@HozB@ZlnbUfqtv2;=T>ucyKl9YY(4MbX|kC1m$ zqu>w>Rx{{N;xAI|-nC?MZ$jAV>UwiBT6EWTQ_nJ7T3xxEUtCO^=`?W_+5EXqkJPxz zCFkP$t`Ohf+1D2!N!lEFb9vEC6i0~ud!Q=TWPF1JLpr(h8GJI7Stw8RpR{(n!Obm>=z~O zVs|-nOHEJxHkgCMyN}o~)nmVDiY)SeyDzsztbts%^uLV;NC7UiGwwZsA*^tx>LV(v;{~GY-wvBH?qT> zKr38yQD`3VC+4PtjhcHzL=b@B>zdR znw^ymQ)(?^q|f<4x6sE) zcL^W7a+w=xkXW^gmwJ-MVp;|SYpiA~PYTt`swIp+Gk2eOHvQS#6H%$8q4(x%yKYK6 zM{L!Z+CKNb&fYWOcELWw28Q?ilT@t^4l-872`^sE9h{6g@NOQt=K+;4tQ8JSgL;D& zxwVSU&dye$CBm&!Q^B`fj-!@x{ti$eN)>w~q!Kyevl7xtNip3a7Z`m!7iy;O-nc_H zHYcITnhobmiS~6co@7d9&T~-fYgAbD@(SbDh4yw~(^?|79>@ssv>xX{2ezs-@vUa> zs_=7>=?P{^AbT;ePAgV&o-llCiDZqmZq+ZHYu%k={5dP+y!&?bOBu1o^#E(Lu5+v; zsrFEMKztpHi1VOpbxvCuj!*EO#l6Eu^+pJ>J__3`=xtYSpN?v&SikZrJU;+bfW4J9 zc#%zh)z(9!leu}(_HagqwHIgGgZks27th^i6ytpy!VXrs$|vOS*Khv(nQXlOb)-M# zjDp>?sk;;-?MGq1Gihl-R89g7V0}Qqat~TBtsgNrFSiA!{z3g}^`qq4x=iUKVq{=| zO-z|+8NYq6s#@+iWAD(@tz}(zf5O=4N+;wB14j#8=oThs$Ty++=%(>JL;j?lU%&jn zggro8O0w~(PCVQH(}Ne!q@{~RSuFnET2pT;>rTs!L7W`d$-(Lu&-19fxw7D3er^sM zrPXV?0wW$;{3;K5zSX&q5X>Bnu^@=&`3PGcWCb%zsmv7Im6Vz^rIN=@6JHa51>>qqVEjjXkK-Uc^^UM}xz3O@xQzTclQywh`s z*>3DFBi?X9cNP*29GZ^d+3XV$ReY#W^3>d20d(!HZl}Q$g!$}m;|d)c6~(JP{VUl* z{Z^}~J(ifJPq+3If9K6>U(zB~ag9X3b%!J7o$2qrUoln&G$IX_NnuGH1SV_(wtJdK z_4(ZWgV2k}lL4BW)=hS_)9v0RG5-_n_RL_1=?4A)RV!KU+X4PMigfr~RKtUp8y;J{ zDG!3ARgsRrlCSdKy}I|nkxIDaB05-YW$BtB;(2eiX7$0@n2~YZcXnZaf1Sd~;7|4G zDw@_^B^QWK142wUr>~kW#kEJ(<*Cw|H{m{&IX{1X>g|=r!$h~UV|9k&;m4KQq^*)W z1>7BhfZ^ zA($oAErK{O9zoaPLo^IBGP0#l^LEI~J=TKPI`1z}$vzDKxCWMGtE;PWs;brV&e`4( zvpTvbUf4Kg-g+|9(uv2TNjR5xc%r_38u=)er?RqY<&)Y*k56L7_Y@sn90xAC;M4ke zJt71XK1{K7h0R-IBN<8kPF>xy!b@Bn{qpomMqRyhpnjIkWkC{nWo771j`U2|C%PT4@7%3d<-cp1JG7N`B#gO# zc-XPHIAkqx@kQ)1jqJa=O^5LK z)U9dhb5-buH&vXWw|=HprKHjA_#0~$t?r~yOtd}M*vN|~{;e5)La41%Xt;TLy4t@n zo8qx$uB5H~3uHr(TASamb<++7bogr8r*dFzx4F5;!lC2i4}z`0h>C&8A=B@Z@s%9i zSwdrDa)#qjT8I28vw=uHRr!jiyxg8?HaJw*qDIc?fdnNy zM(I5PBFVMR+?j!4F?2yUl?$8?^L5S>jX4_;Em{`sU26A>#fHjScCA5rJOIcOUDY)vJzi8B*J&eqISt^maT%iDGb=`lx zvT8W|k%M67e{#MH#{pCCRN3;mSgcUT%-Wx~n?k>5O4>^aYKghkMdf}R8yL>#K6?Db z3J$Y?QhZKtCmPL{^L1;^?|ZMf{3_{)2U?@acG%lzX)~RoW>#6T9U|ehK}TYgrK+}Y z^b0fWwBB}n@5CHdh|X|r%SB4M3kY2aerOlBvw0ugT%8g6*vz+uq)kP~SqZ;2V6xB{ zuq&yDeK2O(^7p?W3$Sf2SQ^jgd@szsb$waY?hHrssygB2U)-B_neR#ouyz{ms=mtV z1aIZ=F6;fuxI&qSIy(o z^nUXnJv~~^&{#j=0}05$_ZuW^e5w{~_vcp{g~q?QdR8aXzk zK%s>8-QpA=KBkBS)x7jTl3Q-CAbay4F}A<8XH`UOFh))O}>4;a9JN#+$CZAj>_#8 znylGOPeAcDT4rd$=WIE!9))|@TfmOksS)0Ct6Whc#E#daeP!-eJYf-DF0J3MZ;KR- zEKmf^eS*t6DFcHYlhTB^IAtXz`w{1$kUrsRg28mRRLvsT&P>V36-*vx?B<59qPt)4 zoFJjT=MEQP7#<#;cBPKgMinbTr62|_DVHz~F0O<7jeV1&m&e+Kh9$y-KL7*whg$_T zC`wf5@XN|ZKqO@U_|B&q*%V+((|+3Ouym^7U&-vYO$<9g<-#b1mZc;0gzI5xZBHCn^yL4F`5aLGmQf;cPi9ZJm>T z*CVRC4?I7QZ&e;!xW$o!aXz8*T-MgsPMptkelwTGS~jX9Ms7HT-uM1eWjxU&PWG~% zcN)qxGMQyg(^69{*6b#>87xScYQAZH0}{MZ<37ZGCiAOTrP!yt)78b36~edVQ=|=s zb#SLHw#IXi$lIWnri%lW7PNd>O}aRtSZJ_WSF;JGrdoo)Cm?8|U7sNjA-1vXWfW{! z+1U}#iLi1tN4_-~biWDdX8LE{>^K`>W3lBG(!Yo3G01tw!%J|IEUViC2|%cW2EoDK9T%2L|GY zHNd3K>a`9wJU=$tK0Z9Dy7bR#iL2xI9S2|0oUzdgQ-Y*Z{JY9h(nXU8a_@?O_d>?6 z>Q7nhW*iYd+;-j(tN|m{)(-M<<;^1_%g!}6!{isech$P{@Ba3`U9xio3>Y+>5LqgP zIGE+nBWH15g0zZ_kRdH;bMRo+`T9sJ?darW&jkw-j7w%X$WJzn?Kv43a!4=yw98>p zeBwkA+I^9}d*UzBN;*SpdJgq^ztYan_xH%UN2<)aCHhx)Jm5Bjj18Zf#?LHfW!L`4_pZ_ORZ zW-q&w(BBY`++QVkA9F&Gkw)pMOYD&f|PBcg+(k zO+`VGeLyhXbIhOm)d(kJ&Sf!$t4%vgsiz&67Y9c>Ts~En)s(Z^V(PH`l9%j<;-ulm z++uO@yf7}s=z54=W6n!);-JsUS>@c@)O#{IkyTuraCnG`I{sQ!to2GQAL;CIN}%XvpA6LvkTin=*v6g99tZ*R9!pHM*{=q62t~%ZFd$=w&b-MOv zrJnKQbb%>bw3k#>C7;-f6Pgh%xTs~$Zscn-NLnISRy6}iZ`RcQTpX-Cc{VRxV;{P?PJ7q@vU`LFJCt>w;vyh#_I#w>iaa z99A$3-E1XV2>M-7s+*eadquP3$h)q=I99HfbN7yp%#>*k&x9L(7b|TZnmfHXh~@QV zy&51$JQ~CR(CIe-ooZ`4a(sL^P%#w7Wr{>PFnv{>aOqQH0pQ)pM~?o)E4sbrGghr? z%beQUZxYz6gu>oG>;7zlLeO@EbqDJ56^Rr9<$2> z-{xdFIe5iT3oC}0p<$+*)nUc?g{vV4(M;vWp5{y>nU7|BX}U}1)RwF1;FheL7Z(N& z=`Gor_<*~ohU;i9=}LL$dp_Lb()wpA{STk*g{y zDy806)F7Rf&Wes8(LCyvQCMDE>zS!A10VKpSe07QbsWF-UVu{GpPd=yZ>L@Smh;ub znImt%BNlkZFUnrX30mr7aPREJ7l7%p((-fg~ghE!Way=D@p|9zCELbfQ+-F`W?%NM*) zpZJyT!|2eL!mIOEJn)g8a8s67h7)yrkY3CT2=tRyaxgJB89 zUzXrtyamFoQ}Zs)x{S6q;D!&{PdiWK>jAU6Q<#@@uST|PO8Yo1^U}^vr$tO!Rm0UL zXUk!Gqy-aS_R7lRh180#V9kIygJwwhtX3|mu+Y-|w0>&$)MCmC7_k{3_pfMTfs^xu zd0}rA)5VelD7c(|WPPNsd zTthYEvx8xMuv`O^Mb&S%H@6om(ohiJQbaR{IbmPY81+o0MuRij6Ftu{WTR;Cq^#GK zTdUB1;;^J7s=mC!!Z0&9EW7C&Dl^NC z%6`3z>M87B>T%BQN`qtjJ2*HvEM~ufP75Kw2@eWHXJkYJ=^XDjEI_Qm0K}S!UT+li zHB0P}cyWQ%(cQhjRvrl6kK(&`zG-QZytOF+=GUqq81E%~%8Uphoo{#up!#)1TohOX zyzm}ZY09an+(}K{Wzar;hKo~iLt-#A=SFrom^=l-%QE7ALt@(Te1wBZVj0qg^( zkzb9WayU3V)Sv8Ed&SI5BPfVvW5cYiBj*DR4Uu*|$l7p*^IyZ$ND6f;QlZv6;&0!Q zV-fUs=(D_2GtuAUj%?JkM;jb~gq-%TG9_@TpvAelpAbh0JZ`xE1 z&={#nZunq=H5v;cJ+DLkZ=?WwW=FmyvG0g_54*y3&!J6(qNaJJW9I1@ zH#S#S(ExpKa7MHxm41Efil*M>BGn*Zsths2{wgj+X47IdoAEin32jZCLAxF}DEK{o zSDEx~*`Nx6U_*I18Pf%1=fuLXZj-wprKDirq*Vh8Vd2o&&!0vMt`4LnvZ)%YVG(I+ zg=+^ix<=5`c~vS}ix>R-2{fsmUqpi=GN!ir{f6e|1WfupBdN%I-tU}(_7Vfwws#-6 zf9Be`uy=^$e|9;I1$NgjS)>P~ko34)>sQRNomD{!*TkaJT zEv#q;3k+WGli551Cmi7|!Q#&Uasl|QUqD^9LCX%d$lD!B!{++?<7DytYmf#Ig$E4} zlY>etTXtCQX6ZWJki>)ot?^=0ive*?@9?xlI!h#HtlSC8MC!BBsma{;pcMRhmy9n0 z+yWPd*${>hm|>4VhVHrQuk+YDFgG!H%JqN@bVIr%0W8~+pTVkngLA-qboJc;KjE9X z-u*`kvy4*A|LiimCdCepkKR31B_CF8?vNwKS#xl6n>SAAh&tStSMsUpGe0TkVCLrL zHV~iP(0^EMJU4gKJ33OMwpvcOQPqPf6seB=loBvDUVAR&xs&Pv{EF|OBhpnZa&uqN z(6c9uS02l3wsSBWv6xqVKR%XaW3OOp9>EX!e9su9q!1RwL=713M*;z-*QYxeis~xA zqbO-WgIevF4_pdaea#O6XX9sMJ#Qalv=UK9Ys;>Tz>5Bvk3LolT|+=qchYjLm~*R@ zK5N4KO9*B=v@f(G&kPKcsGmK>4D{cf=Vu2e9GIv2%y)E@E!A@~PG-=zNG`$MI&Z@K z1*OQr(NR`mVe-$IoW_Y}`ofTHL5aN+$Fc^OYnv`S4z+8$FTM8lK@c*wyN ztc9&+)DfuXwhQ<24c z_H_`Hqe0`!%!}K6x)pgY9jUAXtvG|UlX`~Ln8;BxF$DpadlX7rf7aNb>u-`!01oj? zNegdpvnnFkpxZoBfR;9qfLeZaKWep#wXx4R53UN(&-*m;(Y6`hGOVV?@Nvx`Q@KBI zf^wI=Hg}J!{E!go;`MH3P+f8M>K9uf5P_;kXS$((-1AO#22YgS+z^}^Lc0GnO@Af6 zJf}6E7`myO->g&0Y8_IDls3Mfy0e(nQk7fo>%X$-Qf2R{3xA2KMnJl;CNKx;Cd@iLXnTU(jNSZt>*b%>Fo z<3y%7;h#-Uku2$-mZ6FsT&vn}y`A`iy5-!3BwRw9api-ddbz87mDPgYzFA7_Q4uzH zY{-1H+araGDZrZj`jruCbHIyxqD8XJ?r%$y?x!D1OWdQSwO=j09@b~tr@&* zNP26hIL2!;Gv2!a%jK6!baCq^njqF0f^nT$Y8(<2f94*GXoJr~>fg`6?d6g3c>YR8 z$OWmtZ8SLhz=xPTnlSRwQBzMug$i{ynlJzNZU!?8_ip|3^Z(o>J9y9k&+ppleEpx+ z-G5eprJmfud-6pBm(V9!Yk%tgz?Cbv7apL*S5XATAE#Ntv3HfdMJB%pZZ7gvu?bcWBO}u+7oGQO~emu zms=@LY;Mc(480KqJZnxIe(rOZcT}O-`i6XKIUy;B?oLuAQzJPpE}GSrAtfbXw`aYi zPF<;4y#528loP>5&50@*kBp3Vl489I7{QHXykBv%I`qUKgqXiqAngZYOd90laVtQFr&d{4P7IQ+hW5#%YxA0y&QY z==Pe;@!+_)aARU(g7SrMYtrf^Cu5U@mzbpFFu1V~#9}KOYf`GJpoVyEvQr;!WMVRL zNcumYj-68jSii7w=Bc;i)RnU-bR82MoE%hZaGM+lAR9k0j+r*fn3-t^h83UA+j-brobD{!0=k&T7UMYrM$G(p zX|KI{#{(5b-Jb0PN35}fLqW7inJNtM50H@g*24{|_-{@~uYk3@upGSFCx;`Ug)P>o4giEx4 zGVNwD+JB8lplvwkY{A?m%o~l4C2YJ=zE;KN{ZAJL0I=v&;`o@BTKhMDp)t)S zEsU9xP4W7+G?kQo-#PuyYo`DTPu*Gz)(MXfvAD&%qhgo!6rx9aU@HU`2J|Ze<`1SjSJ-~l))ZB|f99kh&yQ2VX zZC~`Tc3vLkGE_82725pq>mBlzNO^cNVB?5Z&}uqTZP`0k1g~Ti*7#F7#r`K=xt4d# zJn`52KnodYSdT>~_y9pMl$V>Uk5n!xb?b9J;={#tF&T1?iy+Z*fEG2KUnHf?fC%aS z+-m3B)v1U{OVhBqMvJ!~(3P*b6Ghn?4K1JnQG$pU?rQYBlc|rx(oq0z%M$ois<~J# zhlOHVB_&}!p$=OGS+3&+p}+s_XMnQ-k&K{bG1XLjEFZD?t~KexjDo z{#9hZg1kDT!`2^}bN@*gB=@X!nD4&#_lX~L`WKCqTz$V_m94Asn{XbyjOO(u*KcI- zBEI$wwNt=siX&xQ8aL!Gir-k7`=YUsr>a*|4R+dC{scC}^JoVX)hqY*zE#q6&1Ip= zD4L}-x)q;P+y_qRsvYoz+}hu3>9)L`1_7z+G5{)!k8=$GNcR*}ME3T{NjuPzy#bg~ zO^KXaAN4CYIs}JJBX4A+P%@x6W=Wngc^(xx@vdsQJEQ*q6V}yo8jV56A6P4|R81|y zF8AVpjG1lB)iD;RmAGtr|L;-6Si9?=c8X`+lVPNW!(=6EjK>*OtP0)@QR4-=MisM6 zGr6H$Rx7-ioFR>X$b8FO=!maX@ycH_MEMS zA+1MZ!y!l4 zuTY`$tDfD#4)c+#YF4O2cTp(W>^-$uYx8%$Wk38!J6>RNXDO@3SjxrS4pcSs*37hm zOhtIFztD!{{w^T*+0jViV&ZmBw=u#jB%-G)f%2MBQnn8`obD`G3EL)r|K0_Fn@@r0 zPe@2~t$aX%QLF#336!i4aU9R->H;x-~sQ}KqK3ZI?b$I8a zS<@T^YP@)+%Lo8UpkmPvKQF~saj3(a-(|OIBgd;jRZKikSw#huOf4&$`KGNTUS`v! zx0slUUs9!f81V64`_ohJ#w^#CIXLGks*Jqy`px_bxB-8;DZZLtF55pi$ev=HFO09N z|2{ae|CwdC367IwWe=(t<16am)&0}c4287aj!p^Sn)Sv+73cEorq71>I^*Zhsrz#CzmX;hvL+Iyf z#hQR@`=?sVCS9XK0&o%?V6sFl*Qb(2Llw`+79qajNnHGvN8MyT?10Y+s14XeVl#q6 zC1NpM*tdT7_QDo@B4?~B47*8t`}zRD37}82iiO2R0^g3G%6Ly_)1W-S`YoUhpvf=D zTT5nHInD7TbL6e=VdIGHWpuwYAP1a5K@XhLwLKET2SGA3;{O|Ah;E*=DL_PZ>kwtE zLwvt~9*jLcwtsSTG!}C@dq+5qFYA3$Wu2s@f0}ou;V}1cYZSXO?xfVd@{?Se4~q1a zWxJ|ON!umnt<^_9P#&-XE*V;-(n;p2GdmT4^#qWuVH3nMWjD!P;k_1{heHB_vjS-aohe4fa2B^ihU?kJfn{&d z=lu`y+w?~G;x}5O&`Ap4ecABmys;A4hC9WVfcB`(aXwRQg+(pr`PdhDS?-^1t9=O% zuQo?D^qQ}%(E(e~^eB}lKsryXWa^em(m>*SswZIh@xaFF`C-AH#!;GH53{W&wmu6H zEgfA~pN!#k|9dCC&SS4;YlFOnkFzREo2;Ti>(U_(?j z1y4;ZDHmh8zq}h#rQFDvS1xH4KD0v09%CkPyg z0d@)b%p>#p#tu)Lg-NOa%n!Uv6@l6H0q%a5TSXUOF_8Lf8-RvssL=VGHQDa&E_lK_ zl@%1S&BlVlo?VgaG*ov3$|z`+$0Q^S#V80!qv+N`2lsGs7R_qNd}&MMUuP+mxevGl zhRR1mGEvYXY+fZcX}u z4q~deIR|E7w1V*EtT_~bVM)ACuaKUKc>wl}jZQGVG9>UVWVlS66eX*Tfv0&qXKC{J zKQg2fQVR9d)CBj2YVHWdL`Tn*IpAhxtyNl2B&*Q~13w@O<}E^}Nro#ZM*7D2 z<#^OcCfQ2?fmppso0a1Y6+j5s@OGd9s}itB^4k9J8R(j%R0LTowhw7cv=*$eo$h@w zkDezYT#rmh*zn+BJ%}B+h%4|hIN$d;ICg}ONbbVhBjYuT)bdnhU7Z>9>HIFc({84{ zQgXT?IWUAO${nVgEQA3n@X?8HW%UE#DW|`YeF*?oBNQLtm5j!}X~O4%9w!2%3M5yS zn;&13>O$S+c4~;^j!iF;1(pzl5dTor=)95c873ZY`8-g=1z6*yC`MEZwha9~l_*Q~t?39pT*zP}?t zc6YAWXKr|&tdsgy`w<)8&t{;CtI3{SDq`xw)(Nw!R%y$242Ir=e*=^o@aY*F8_T+0 z1HD!I<9z@{nJn;+fu%P1lZjjUVNFv>$#tdYqII6H^q=ZX-}W(v(oOO#cNqOv#xTj_A4`v|-P*jhsBN@`oC#EO_wdJgb??P{}5QZTSL#-qZ0PhtATcgg0u5hn=pu_-T z2U-LIT}&eAVCClln3@uFcxbQdWmP@@BTG8ZXvx^?r$F|*Ao^mT^s#}9PEVBQU?Xbk{A|w$o}>=2!P_hCw@YYYip#y(Qr}t~me9CuFteEa!X-Qlsf)<_Abkq|&h}&|&X@Bi zG_BxBy0-F6oY*>Xk@KkHA6Z? zEQrK;Jj-$;5o2#p|9#xqrO5@Am9b1U@{l}fx;_T({ieO@J4`aCYxWnNUNCqkZ(TA` zOXzf*&O5}%H@6l7e!ca&ES+f9-Z&T!YS7$~oSmb@v#LlYFqRUJO=IeU-|7=^zSP{xUmk8jN+ zceyOtXX)PvP|5yp2vU>~2G#Rl+(mulIT5#hfNZos%i46%bBJ#L{@3{UwqN3D2QcCo z6a@k_S%KQkd?H&W;S>UpPL{2rv!dGr{~-BLJ4Z5UK*0;L>_+}GY$VbPv`)3TEYAxj^^QJdWKz0*JlBU@UoI}bm8-aEkLr|Z ze#y<91`bDHoYzq2FkJK;dB#$tHUC*U>kl}Ovm39u0Cm5-q3JIscy>!Dy=q|vG5HlT z)aLw%S-F*c=FNuozmc1w*knp)f9#Q=F1j22&~yscfqTZ6(mR&`*8)dS8ymh?vYEcSG7%n1^u5$M{AOR_%cM?iS-r?f+`@KKBKj5u*R@Ta_GiT<^nX+fk-k-g< zxVT>)wGSgrv+l#BX)3PwAC8WRDI%-*5`b`f-8heP09feNt3#JA@%Ook%3k8N+wN*3 z1u%!*J|!lqtE&qFHWk3hh3E!tn0O}_nvs^)JnsK~_uP}PhmRkZ>8wce|J<;6w&8d< zCl z08C%N0?e8f>NO$aU-FcJKtLei)GVGsA4v|;Ed9ef{*-3QADP*S-%p-dUEtGRyIA?P z`8gtMyzkDev&OQBqJcF|XM5H<4fYy!PZ6_H*5Gx7T&#C~?j`IJBSCkzNVQe>(xX&! z?aVH@@4vL2AqCq-ML!*BAoIIayqpuRtqT$}em0xl#hcc?Y*0SS(z+uSKYZ?wNBIpJiyff)#= zUIyabO^?XiUO}V9^UY|AOa{DH(8lavjEYMiz^JsF#W}}RXXytL_9BmJJHAuRxkK*# zG-jL_L0?Gq7iGCkqSiGZ=LzUeN%3-#)J3x+k}lN432Hsl9V!+nwy$b0Cg>Cq3GF7Qo&e@g zfLe_6R+Tv={l7|u^8=!aRq54J1*Dk6cF&gM-SmDF1kFQ(DT`{x58MJFWs zUJUBbLdE)b+gaBD4(yiOf@*Im;FuB+pf51mIy$ZaO{i0);1&F?zWy=u?6hIi!$*Dr zMpw&*-L~PZc}9DxPN2(74GAS(K=^)W%W?Hl%^sEFObqAUI}bp3ZSCx&?MF@l09Rio zz4-OM4jfRV_yNWl1$*$}MM`IS#)zV=3>kq7To68_DN7#MhKuxzcF};F1lZ8r`!-DqG^z@Yv;@pebe82 z-Qyk)WE|H61luf^xCE{i%4Ryk<=7n-<8=T0yj(w>B44?P zPt~#6`M9l(x{3Ps?J1yR+h_F+n&be7g4uL51 z^Ln|aMx9UGEeMato#9WS-TT{wwIs5SJ1^$lUe4%lV9=e|a1{Z>HbS&MqVe{5N_Sn- zyP$#&JM(Hlet2yDqa8=pb#bglt06`H*w?D3+&1rjV5*IrgkQU4PZsX#FrJ}LJIt;g z&I15Jh9t@<$g)xl?sy!xn1Evl%-%-y>$i_N-6Np4fo!dMLny_PEOE*U%dZ>Hlrw|# zMwE=>1G7{l5;5xRTmq@Mqfwhv8mu7m)K-izB|C+{`2^Yj(RkLmLVS*eh0|o;F94;T zQ}}djK#!x$St1amJvuFo1yBrZ%`p)rrVf%%@SX+zo_rNh=mVo@WAmkFE_X9Ll^inE zZG0hTN+rpKKb{WZatjRy@O%?fsr6C)ntH~C%t!A{7q_auR-jA1 zz>t5*0;AO!#(DNTl3DpGp_o)VBd7A?5MUg0C?eh~cNhyq&j2(isbzyRT%p$mrbLB= z9EQrAPVI|T;7c_r#+C>!K%-4awb-gHMCLvO|9g1E(7PBMrJT(3bhCjOVOQ*xS5<7)5SvUuD8dCX4nrDii@`VzZI>;#(XgK(P3ZBhl888bx1+^$#A!a^?U z0*lVrROk>~|He(Qw;;?y9w0Lx9~tjLLIFt0bkl_k>1TXlnSTvJk`NFiQ|wKC7(iDS9_Nw$qbtebwstY7w+ zl$IiMABK%T_VRV$VTobObbY{I{3$=L<&Tw>^LEu)|6)b(UZbpF!^_U}`we5#{B>3N zGDQ*H6UU}0F%8Ex&rK$v;Ac)ZREJDWe+IO(tD8cTA z+|WjdLyvkojHgo+WW|}$dS7eoi~0#QJr`@a-WKys%7cf8|;f11mu*w*rrY6h*{lr1IcdnKW z%cgyoT&H$v5i>%)YrmcH>T>^DB{pRH)||q+6@oQZs9`&iI&w6#a+p4{9QoIVj#9f0 z8_oz)QKD3O)Fx7ZWlr&LE?UxISLJJc9jo)*?IB|Wi3!TZul)Rv-yhq3);_g3CU6V3 z@J1oclQ8O&hPilWmYA)Wnwmv(2DDak^EAF&05dDp^Q<}I6%0Zl!9C(?s z;3&Q?%TJmD5I2ZD?e%kjM_12jZPU^{TgsD~@Cj?~$35M@I>$4nUv}`~HZjCTGC7=# zu)sH-0ZUr{j0mBcJho-Kd@R^piN%YA9^GXDL|Gg2#CrFnR8S?xv;Lgx$jT8hGZ~x- za?HU*CN6z3b6 zkUhNkTfJN3VEna?&q{$~nB>IsN{7F+|d?<({LeIWXmc zT(9_7Gp7O4chfd5eeLF`(wW4;6SO3{ke29SH34CXGw2lm4ybmZlWu?R$7Af1jEF#5 zd0MI5NX&6CEK4-!gqLPXy7=@X42ubhfB0jDQf558H0K5N-0?dD&94X9EpC7e-_)H* zd|;eMlSKvyPdVh1L+IWPtK3AE#qzYAfr6_qs3*QG*j~`|DK(U2*QRs@VQL=KWq3#) z9692rQd*cD8>U=H-X+}8#3L_(GrypqKtfYx0`D5pqZ935@qN?m^YKwWYIN4aP7Dn#Q zmAiKL1j_RWV^EJ`-P)%k)G;Dk6t=| z=;5D{_l7P+2TEdY!*b01`Eiu9TIw$7_;n0;G5Nz)=P@zOGSUuvl^09%KA0yg5M?OaF%Vq zjMmIlTK$RYhl2pzMBCSgL_k~sYjw&-fG!GZYtM?Ed)%H1k|^vgVTOhAG5ziF$uW`F za4kOgTQ@s8I()aruXnEv!DiF{3Aa!fA^Kt~(X zXXxf$t1+C+_I05c&FwK(9Kn~YCR)iCtVHO%&Pp&B6!gyi^y9s6|sO@ zwp^t4_4iK^Qh2`AUIa6@QxwKN@#z2^zShHyh(0C$R}WS4M`ya)^WmH(2imBQPSnS} z1`8(>0u4$IpyB0+u6IsFxK(#H6(4T z^LA65sh00t&gvp|)Q>0u#SdlM{(L6}Z6Xx5>7lCyCQ!c0T5;lS5n{(F7k8JFCc;5d zhK7c~*Oc#pmlmFpjGgUq-e(|wEhe1MsWS;u-hM`C^B7V!+*0Xh&jZfG0$g5MbwMb*YT-wKeU{3nFOMOub$q&d zi#8#*7t9!)fg6m5ydk=lhi<@t&5Odb6Gl3wvB!+H$zI25Ljmt5>%$Eawr%UmWhw?F zK@FRZ4^@Z>k;RG&BDwG{KAUrr*;amTbBwZEpzzr$JhrjTW-VLAWapjJicd=s}4KuM&4@3GeIzi2XOw2pPgol zyq7mf+a1t+u`RcF%cN}%-T4<{XENJCQ`@e4%ayoeP`hf8?)4*kw?A4?D}8+@z>4UG z{*~tzmWoK{w-#jvt$xwj{>2|2^K}=&i+lB3>BU)JJl%I?RpcA?@=;ZyTJ8lc-!sT@ zwwpVddth0w#p@5&b~`$-me4jZ=rP5An~gR#gA%IGQAVIOF;Kj+ zz~<(e+0oq&a>gkRaeV0jse-hgZ)%7VX*7>pCn$pY`u3oWv)5sN72CFOZx3E)l#gO> z8j~VYl*`m$Bc6|I5cEierNR2*XXC#%mPSST`aEFj;pKC0+mnY@Rf1~0dpc~^SHt(z zj-URDzYxqf+|OIqSb*D;GKN46cH#QMQy--zTE*loV&>)$<#Y_Rr?)ryUP!F%_m^`U zv&B1zd~*|2F}}vDAO#5o=4%e9MczUw&s^k`bA5oWq+&`+O1_kr3xME8cK!JZ+o){R zV($u+0P<-I;z%yS@4=T#;Z%|f4Mxn;feQumB2=^cHgt7TsMd|b?b|M8G*YmXuNY;2^}J*bup@?v-D}e_RgdEYaQ$DVJF|;7&dNr%OgGpYVC!-j*t#s^tQ0I^|N}(UJ#& z%Y}Hv52g3WX>eJZL~c{GTLRk#c-7;Ku#^oYGeB!xfp$fM48+Ne;Q`(zwF2?cw_-}4)YTXDMUp!CWv$omoYZiNzU7Re`YO( zd!Sbbs?wAT$y=@JDHAEVg&xhu;UHOg@>$F3zSwTD=IG;=Rb+b zsP)ryuX1v&l)W>M%zVXqxx)&geAOTe#!%yqVP`L2+95tCy47l`so7MHt&ZF=+P} zCxvlt2m6J=O1T;Tb&5p$h5M<=yUR$KwpcL;^AJ+jMqQ_7OQLBCXo8N7jSYZ~iyW^H z&eB6!<|(T1`AR`{)&|H}t+ib;)5^VKI}D5O`|#nz#)3)ADuJ$WJ=M!7n|0`(G&PJo zJ?WA9$*IRuGiqZVXJWRZfMnEtEMI%;zuUVm=eXC=gnDti2a?=HWiWR60*GjW&TN!c zAs(lqDroPa3(DOv__>8U1LA|Fmw_t&2n_y$kU!$A?5tlc`b8zTBhARvVZ4{-WPzN zi!MVFa>d};RY*HiGvh)y@s`8X?IUCONBtQ}hQv*sd)`xXr9Li3UcP5sHhB8vrvik# zSFGKF^|2z4qvITikwn|E=_B2po$-k##qz?>%xtz+(m5s5kVXZr&B^8KmHhmblfR1B zW?w6(`mX;unfAIinSaQ&m^5UcRM1`NgKAHdy&l5hvEvj?)&(@94EOnQP8r9iT--@g z^L;?fIWLpA{)qggHKN}edtCAZVb!shT_Nkle z>GA6<%dLqkPzF6nVWlV7+ecylK1)?FK=sW2NwSPpt8AS-NL~sAf*SsF-8kxkIJ|;> zY-pH?!6;=ua+#awuBiNn;b0-v3s(YR>KM%a!NK^(#wGOr%wl2DhM)T9pXJh<|J4G# z|DQ|$M4jG2D((Cm)IsXb)f3=D|0G|ko<|&1!V+|ae)J%l?f=@W|Gz6t$5fu05mkG8 z8h@FOv8$bYOBUclmwQp0b-kX;b6dPV!_bR{zk6!gB5095GJYiEc}oMi!@Y8`do=T) z=U6P#zNMf>t!xx;k=>eZ9Nb*Vs)PNflb6MU=IK02FZ7kmnTR1Da&;6xWUEevQ|ZOi z%l<1xx{%%9(_lt9hz)#>xyJFl`+d_FIb-{~oHs<=IOG~{Il(vKTTS}ZH?1nH?00g($v*~i=L>Qj?Wh{p7`P-6(COr@HcPdB*bz9h*=5we&vZR0QGj(4TJ+oADBM0IM)+ zByv!$Q-SRQVu_k=(On23^S8(jj6@4~h`QmB+iMl{l@Ie#`~cfMM7aj{@(n#Gafc%O zGZCd0?A}GKuI9KTB{uS=EEoop;yH>X?|A$QvCw$ny$TeS<3Otx7z3QBY8W zO7tl-hs_RgD*HRi8~^@juT0<(jpvLY8w|k2@wXge{fPG=C@E-Qh`}&?#MRf8#s6u{ zsY`#(_pgmPKfkAXWJSoAF2~|non7V_43xLJDTm_p}}4@ zJ_Onm;6Dw_%;NZmTnM8Te_DP>@nmS`=tIHZrQQQAOW+4r?%{cmbwGqAD{IZnN0k9$Vq(7Z z_u0^&#=5NrNFK7ze@7$dde7#{u}18uMgfOC^Skr>^D&3p6*?=>eImg E1974F?7Q)C;}p-bcb|z#~`S5HvtoI-Ie)!(?%yKPfPR=>cWA(6$}h)@ceex z{kz}@4PACM`0uu}xU|}R@bI~B`Wd_?ae1rdqH1sM;%@9@hGAi64>4nLHgPgDvvanz zciF{)i-40@&?iYanHjrS+1pX8SwYM&B%Q3NU-MI|nmJH&yyoDbe$6Am!7aeaORXeN z{q~L8L+j7rZqyjkZ^YC*lDB5vf{)bd zUc18~E@jW3r>9e?-~ae|_%QQcEH~k=@|d}9BqsLckNK1+khd`SWr;F zjD($!j*qQ~-kdAS##L&$ZcVZadmnY4VL#@u9?j#gDJ&}L-D%v8W$kg1hHM`R9qqj! z5jDPiU-aZ(Z%H@9#_9WWqHEXpg{dh1m1@q?{;9pMy}C`~t}(o*=Gm#mypo>auLx%SS`#~5Z`;n*a{=9rk6^%mP&{<{Iw z)ix8B%{e*d-zLx@jeZO!s@1q)mhm;+T%!_%Je?x5T3SSQn+_FlHE;j-42&`l66Me0 z&o1T$iz-$&@(T)NBqStANlA4YX#YLK@0X0y=Qf5Inf$^+n{|$Vk7DS2%J2C5JRKvH zfs0B(WZ#>lY{xH@RG2Y0)z`~<)4Fn&2eIOJbvkf24M~kQa&*2b$NQhKgR}XL!x2H> zSOUrLWDB^UEnMPc%BIxE(Vs0#DuObm17)zm0l6!Y}>d(YGV$Eo^*}tLQ+JUy>o3QN`Qli2jY>%ii#Y{ z`Cf+zavn8jgoUpo;jn&@tKQMkQCexRKbmvyJN&Drmv#Hg$LuB@D^;9|1Ecw>Q9e#L zP%l)j>-O+V@9laEH&nNscE-)Y`c$C>onmU_w-=(FhK8Qp?nrO48$v)q&sIPAt{W0IZ9_ssbE`1fZ0Vt?9dF!E;3 z#q!@xYkjUhRB4!|B1=3(>HJ^D0ToN030|QYn+?hD3mQY>cx)U2vzuIb38T zZ|gc{c4cxkOFGKw=a7`y-edoy8Dxe;(2Un&A4y$1zH{-mVJSS-o^rpq>2Rk}Ix z?-kqS`INc7W@NJa!kzl_aotE-_{FmDlv4;xByDb*tGR}raRB*#v3>6M@85^m4Moq= zA6#EOu0Q^rRN0{kPozEn#kSiWOrORz;k;e77=At#;TuUyBJAZdZUAewg-ol}cCF{8 zCT50T_S>$es6(MpyN2UfJ+E`K7alq5>byB7JBY1i9Zq88@QH&n^>Wl zR05}&ZE#I8f%&IBOMVe9!Wcy-Z+%jY`L9iT30~mz1!+sLh}NA<7uEkxl#VP1+gx0W zR8Utp(=db_yX?&HcZKc^QHWkkyP>8v4~Ki$2F8){qIDVMj|xgl2j=NhJCp3M1dm-^ zwIS7G6^r;-BPIHcMU^Mh=iAUz3lxQWZx9tUp4~*!;_}nJcFrNkVNtyrquI~Tgz^UM z3qh2zV;cI^U5nixVzj3Mz(4VpQP zW?faawG%*QBzGPiS|6*l2oswjB(I6V=rQN2iR?$gzs{*CT0lhflpS!z>_w1{n@4-kF z1i_Q7^2)yXSVJ<5B!#l)*wO{DTXuzizEE6ic2i2lH?Vo@Ut?-L{3woV*~dNJ`w9E8 z({zHx(lzorM+lgtOBtO~~3GT(;29>{?8D_;sLmfa9pY8R$^Ir6+yw1T@;s*$GC zRaR3byUpfg3pucx>w45Gyc499)Kp=wm8{2#y5}agA-` zF^_blENdf|=;eMyH*|Dt%nV!y*tR#l+ay9X^&X|y>ldPzuR$h9=Trj}!UlIe*4lPg z_|*EzqlR7H)77oR{=Pir%x;8+mT!O_Y}<9pB}zV$7PZr?Na=mKFLcz|e!j>#V7kn$ z!4&b}C_>XfHVB_0lGbo`)8-r{dab-;aZ$A%mSdZg)B?R&+F&YW4)QU8Zda3g9=UUv zt_?aRfo<_QENge((YDAfC}2bzm{UQRWmVtf2RTaL>Q_u8Z3F>j^2mTlrLv{Xa*Rgz zn5JGrUrUvCq$#4fwoB6;DSUI< zr0IrfxkRp4AVOrI&?|a`jp&q!)o>Pn;3xBjwa5_XLF1sMiBn{p=+(KR=SjWA;f75q z4-PkroRlx>^TEM9{oU0(lNJO6Z8U9rAVE)hDb-iw_Q050=;2;_PtQn>Jd+`^C`Tb- zdTlz1?2$~QKipBt^HUC}D80V-c97tGz0Z!<#}W2DPc>m2$5S--D1-*SrKDajQaSG} z1o7ZtzwG*&A;Gz}c@G_-toEqin1=RlegB#R<4{7$5>r^j!y(ms;hcX5emViSe&RA^ zjG`djPUFW>;8=at5V>?kAks-FMUhZS<>au_a+*4zw7)gyyP7iNa43&kJy5R=8B?#E z^TS*|?kQ<{9}dZtONeADt#4=&F-mbIwt{%?)@yp6*HF!+f=tn0zRglQi}p!+>FHYg zw9>7H9z9gc{2yGhfG%@x$aK|=!${cjF&m`8O2BQ4Pc$3r-_>%3`34TnUaFYxqVm-;*qJh^mqbze9({WNwYQ8US@0IZh1@Pxx>}=`VXiw(a+$~2 zkLmjl`L_K?3lwErwGcSvvM671<%U>w-YiX{1@NxBTnffZ zA?VUeVv$y_waLWInnyzT}E4k7_HAn6ho2F)UYS3Jj)d*?v#ONqjLG`O`L@gVe zVv2z4x6wQQeu%QyB+7YD6FAIduFrZo>n{tKI340rDt^`It}4Q=RXuMq?olO!HL#8+ z{thS8HQ1S{9}z;hZ%@01qplCHQOnB)&0aj4m*Ao@1C+ueH4ub(wc$gMNGz-7OzJ5Q zg>n>k=a!d^+ogK5U;ca3e>SNZM!#I4kT?B5f~Yho%X2C!ILLe#LMp41T#u4U^c$E* zNkuN#G7k;_KH?rYA@g-?=iea%;P&7Er>FGm&TQjAbtxJ*Hl0VnmUl~=5?61IY@;CN z%_pq-#9Py%&-gh&!eT6i?S~k~ud<_ao#%Oq`~QJr;r>EqBdrtu%OV~<`8*vUE9>uFR;nn^gOC*uMKy3c}!E6CC%{0+1VD6>%O~H zj@ogaxd9n3#-=zguag)5@`fAmO-Py5Y0A^q?=aCua)SqC%O+ustJsxu&d#V{dadWwqcG%yz z%R0#a*O`fOH)2`SKU>?_IM3outX4%SN=N#vetuE8Or*P#qiff{Y2TC@7^nggOH_*6 z47>lyY^l%8W5sKco9k1!#pdol{auUEJmvMdX77T+Lg!t5_tj?OT{Cbak(qvNPwEf(J`fsohbE!ZD7Ezq8#-4W_I*C=P#V=V+nbZpNdhPyWPx zViw+u>3^d5_U+q?myrGBevyIh4_z;@zBw8&|#69u<9yu+ID!pP9fR@id8Z# z|3>GoX$YJBH^bS}O>}xh*9105h1K2dM#J+9I{C!t-4rLML%VnXZoMB79mA-2$<+^6 z?HZd2G_IzX9@n=>ae9{f>gH@!)cL5qgR9=Y?GrZtb=KpdlG!Di7)H@6_KO8k zCZ}Dmb!a<>aYxZ2?3(3kX1$W=5b&#hLH@mTd(%HZgXMQ%>&tP6{$wQsjveGlwD~0^ z{UAKm=iuAp2reduXxi0en1O)nMs)M(43l&PD3;pxt$uWfa7tkTq{v3+0}_EMZRp=h zSH-0oafR-hIBh4(6k~%3l8XDt>{}8{f4}2smwJ$9k!Ig~=mv6O6zz>y^M153z?XaxKP={Q=HlOL-ZZ2(qhf$@`dR7Jx zMMN&m(nxTCgy?*(uDJrdk9*1-;Pd*W3faml1uS%P2)d=n9@ajP#}Y+_u3SVe&N8{U zxM-z8>wU0WE1K`Va>Z+Rc?LRnnE9p!0HFLAlO~|?LU!S@wM;J6gHzAH z^rl^pnkLmEeH(pXE&IQdoQt73yf?y`vp<6$bNZY$QR)8cAQ*>*|6#;pSwCh$Q778& zDXzoCy0vPcJL!#QC*iTxn!B0zk7X_X_T|f$qKboVbO&o~ZGEucaf7zntNgDW{y(&XAG*q9yKasbXUqO|LL)*_fPZD<1{t3z z-~W3MCw=b)j&$hX@}zWI^2uK$;CJic|2_wH`d>Tz*IEAGwL_lW`YobFm0=}77)nUU z;AKb4WM`>auNVA{60JvSYFXdEKYtqYG(WFM&P-ihWoY;Bfd` z!(Rp+BUUY&1ZyOkG%`!%IA7k(Rh_Z0P*u6!g*GsDEnNu;(I>Uu?A{!MOlK89lGM~S za{8BxSz5k>>g#XhPUMu-@Zh-~Tjdohnk8+hRcn7Y;gOCVOjpX! zh`v~_e#H$c>-1=qEFv+HL_*|mEVud;fVHZdnH3ZiMkOY4jZRoxjOOR32(aK)yS^IZ zMc@0SmrKS=Rt7a|%XhO?(^+aV>aMQSu3N7c@&6|a1Y}hdFmh7}=Eyg?CGc1|ZES9+ z@It%_5Y^i6E$Vf?7qD_ichh8S)IdfudN{>A5z z^MP4eEaPH5?bD}e_npz<<-eyZJ=_*_XABAeAGgMZAJ;S(8)s}{JbQHTYr%#!&Hq$S zqQ;XH!R&$tf$YG*(TVYD7yd&?@O_*ZQW>i=WEi5vB#5ZwuRh@SJuyMwDz8}gPY$*2 z^N-?quAJiH5bJ61_J)AMzh+9$1NIro$}bYu-TH;dkbzw3L; z%h^7xq?yJn=8sc-k**|h75Y`lHHin1`PK{8f6roQ=q@NwtF?++in8sAOdq=!05(!O zvY-Z{Q}^iaN%6+!v1aBqX3}N1ZwHu%4ydW?&$h+<{cGz3&Pry^N*39V=%w`4u`@C0 zLi7Lr^~uj(=AK^kwU2Y{uiZ^F?&JLZAcHc|mCPUi$NvA=JpaGI2=)IDpDWD{|82-I zxHNw;i@vJ1W#Ll&720UMLck)W^tXsW+J7+aFts&hJO;#>c( zZTx6sUeaV_i@mk_4Xq#57B9(ny%!K0txNc?S+z_V58?U0wHVd1#_nklwMKq(v}&&P zw(6?G{CkDBxz8mZ>5!^N$F}WFJo@Ttl_Hig4r}~t{E#0i#B>?9`Azn^o-5g|cLQ`# z#ee;fnMl?w{u8b2CKS=Y$u`EK-)gIKx?TN_%Oy`nzcg`_1wn_GQlM(BJLLq&%g%c5 zCBaBPp6w+EDG*Ig?Cv^dQTywK0h+DkV#d)GE;#`@`>xe3=}I4b+sOpf%q|KjR1u9i z*|O(v-l|w@CS15dRFTb)oZ@kIh@^r%!krHL!QZ9!s&2~TRF|YHIdX{SZ%>G*PVCI+ zP!WfXo|H&Kz;c>IXdu^|+1WjR-(WebW2KQ-k&SCv^h`Qqoyom-)HN1(zxG=W*OdN* z7N?HblE1JwJ;o-5B!2wy6YG@P0dY-4DKw|JW-0JLE2+Mku66m#$6^%gGWE7qrKT&{ zG`SL01mdf6=8);O$?G>dlM1L+|6k{6ZT7UO)w*E5<$#Wb%Z|I4IIFNP>R4Zkv}7}3 zYOQ%4ZzZT}>T}P=>hr*18~Jhx9NF2jAblATPTM5`Gbp72Vs&+vW*6iYu-|3xs>9Qj zHgT0$T<|CgRM1xI(XzDmp2*r3j8fsRZ^@R$)M6OdGYL!fJ$N-`-NT})&2Q4$tlG~f ze0sT|$)ZPsQ6&OF)bu&^u*98kZ>uuKaM+%e0VciLMH}NaQbXG_=JKot(Y<-&WmU`C z^>-HF>R8YFir`>!{s)WJQ?L-(7!{qdbdKT|3~GK^O8TYQ^t4>6z#pn8IP$@gmIU0^ zz5>S5wC!gw3AeSHY#bKztt9&zZ9Dk-3XrtQvt_kS8(h}W9c(rz5SbmJ(hvwlHtu%o zqa0AH43Rf}WVJBA`*C?mq{M;HPGugn6jSZLGaTacF?(?(72u{yew_)O25>kyiq7ov>`z#zuCnqsv~nDTzs>2@8!wk4 zP@OINQ3H}vJ<(sxI~OfmTKBwm#uw29LM>FcX;UH;|J5n{_v=v~-q80nva z*3MQ85yRtw>7!4_KtG=1j_gxayrF?Nt)>EYz@-J1W>`DtVRCW29oKMiF>{?swF0PN z$VoYw?|umX)spHk(9nEdJDIjXN8P*aKSHX15%KSzEvjlOC!qD5+MBbEz8&`wd7dsS z`n1T6f&!s~M&xpiu6;tWymP87T17@Lde%K?iH!{&O@Ff&RDZV|%|Y3eG%*4`wR016 z$5D!ckdiA+P4(qElkl!MUW5>uhC^QOpC&t=O!YN(YU~8sl=jFlmDII%zz;SG`B9gL ziCfNqCE?#}ay~o}-0gLTU!jf%mgDpy&0@9bfbuag)IrhMiS)SYuZ`#|5!@9TaI3Da zKHtq#COKaS^4uVRb#lV4M^q>-b;$>sD+N~aGAn0m5IGG6j6kBQ-yhdKm|Tn)a2Mq) z2DO)eHIx%AYtwcC6*2ln_=Up8MiOO=^NO>My4jddn$1s`~%kMjdF=sEU{d0qz)C%WpveXpGQo@!=Epzu8x*w|LuWLXnT5P)&ms@W`= za^Gz}%$DbocRi+O`_U0WmDZ8w@f_ZCn%Z=9(9>7a$UQypoYrF;M4kw#nJyUG-8@q&-@#=x(xc0K=eAuY~66FS?%>kM$+K^D08fHZo$W|nocxX~`NV-EQHL9Rtw zA7JiBgF>p}1I`n#5}8VRHwue+klY~2Eguw?b^~1{?gbn*TLho;+bT!wtRrge85tR! zrn~4@OG}#~i48A$d`^Yg=7>#{6OXx9QB*!(!4;3*Uy)sE_g;7)-XkEKe?*MvL6+7Dm|Y0vp^ZCLYhBrO8c*yqzsgVvgR zI_!Y{8FGpDZ5eRE(keh02Bf*Sgemr51{CFE7N@_m8Gm((U;{2#zkGslx{~Kb%cCKA z0y;^%DGuW2STh;B&2eIeqOYk!$@z5~(fg1DU6(zayQLq|^yeX}vTQ%yijg^g(r0C5To7IsFGLp4LdoK>mlUBin zOPWMP#WL7Hh2S}x2{i%3B<8p{eY?(GZU|bWz~vqoToH&fbTtDy-W(mGxOzng$R}Y@ zy>$_*L{F@N;%EnC{Vgtsj)NLa18DUWceOdibnSp$2I_aGNk=a##i_{o@ zd_jwg#*YO@IxC z^Hp=@;$LSpK|=cAdOM~1jc#eL7`Plz+hhTs<~&bRn)dz}a=1>9g0@Wv@QBM$+yjqP zpavC8iDgtOhzi@3R%>`d!IchLB?$WWPp+!8H=9nn3o8JR%gtm|vomdD5fx@G6mhya zVIMA*0eoV$hRnV@(D3qo6e>>JJYlPOHFe5+K-d`-0ZRsof^A7g%y=HiL91!rb}cP8 znDRUJfNQRqejj2BlJAs#8q{ekn4a}uh(W-8C%KTdnOP8@d~)eJF)`7$c{z5a*hxts*7deK?)6soa#|R zx7y1GLET&%YumJfz>$~|6Nx=)b2{mQ* zoaugWt_XZ{lk84tKq(+~(Yw&I*#X=A$?sb?St&Je zz5_355xIe^1R0~t5m5f2HQT7I<_Vt^=fggpo@V!1Zryi4lznm7ZBq)!ZKNI7m^3gD zzUb26<f5RXE_uGtSIdQiJ$v5M=+u8_l}$;%xbJ8h3<(@f z<-AS-`e){`BCADv5U9>8~a`nrD7ha`uVsm~;ad8IS z_>EhUU@C$Mc#kq`-PxbZ@v$c=#rBGsKnRO*ztIC_?(wCO|#D8kcgo-XK7 z4X8UZDvW2Qtm~TSsJv;jUvTx?jW;#G1@;9acXr_X5zYSiLa*cWeWWwL4uTnmLlCvg zai=p;NYP`{%ztK9#|=f@XZH_}K(w}4e;9ag++v=_UNG_TUW4e>jVS=Z;iBu_%Swyr zyefZ9T&I=S#CDfC-95Zy1EA+ z0g2;O6lMV~F3({y8my`)z)uW?^^fHG5J?2$_XWi1CGQ$~C`XbYt%VjQ7oC2MIk!;2 zPsU1lNGVn#W!d@$Pv>-LkGVVCBScvhMGt#z5jN9fS&C_MQ|}M^oX;|XVsgV#7uWZe zVl)l=fW`)E85jda72OE|z{AU8kLm)-pC_?F-8}JNH+t@i+3wXnZWMX0&u$jcP3tnfC`y~P;Rq$aQwa3rZl>a7pr&z3`5Yzz zy$wvCsh2b#6!>^<7RS~Ny<0H@@j}Nb`KEqnqj03WJ(PG3NVU@9OUIhkI1Lhiol%|8xv&v^fv-02rWW0AJOFcR!ubONkJ@ zu4~%HCA0ln$OeDTR9dAHxs(({5qpo)*Rn;b-TD=}7-qspN}DdM6$CeXfjpbE3<0~; z_j1+nE2L&lpeyuMH@@)FS2XNriA-#PExbkRk=>hYm&?EOeAcr)x9wpzY9sC~&^N$} zm|<9qMG;`H-Mw03dFmiLxJTyY=*OdcIS(2qq@R%3h8XFm7kF>IXgT0W+R4roSyQ zL|e9NwhqQ-i7iQ|?hIv0MI^gkkSrh5NCd5naw-hq!mNZKDxkm}7PsT~NYf|BgEDZm zJ}XF^;%w#@CFuhtz4Y`oks0KFZa(6VUshHROtqA)iE(SL7fG#ZF(cR`?&$5r@A@(dOgZsSlu;g|A*vNURNcB>QD|x%BdD_ zin}5G)3KO*D$bXWsl1@&V-Hv$K)E9k^}Vze1x;x`9O=ab=1%S1W)}<34=V>^BS@-t zTUyk0F)DpIkAmqfU?yG~!m%h*+M0!Ssij3QAh$Yj>7&%VJBNyngMotW3Dn=H-e(lX zX~Ido1%tpgU(t=+#6bQ0WwOggKFFk9q3ey5UQ6G$s!(?4r@HnrwN!3tpQjDF55cu<%-`5`w0=j;0=CFGcgqfVL?*to>Hl&Z;(`jVjB^C5i8I0s1 zo!a|&Ex@4XFvF6?FGrIzq8CKU;MoSnn|m1^q@7m9gc~h z;PLTbwUsP`Wa9BM!z=~al5DG#Yv!DK?zE)-$^hLm;7L{v3QKyeEK;@S=D;wAZT;KL z5~$dvsP`(x_|IX<{isiKvJ5iBgoJOmzTo|sD>Ih*H78hO1Lmk$8NPpR#&xru_~KE{ zbpO^D9L5w{Bo$56>}c5SBVS(l>Vh%vRLU%EVyl}yP zm>Uq>;zNRJdm_kZYG!8K`)QxH?B{~RV6JAV;rad01P&8{@_mcSDXm7Qm!YAdmI$zI zMcU<&b&O!PjK-9-(&aTgsp`n3NUt%lNKk+;FWRefruV@;iFTzzbNPem-z>UimQyNs zysvIdEG<8W*-Q{>#y+PcF!>!}!F(S(;q|v~vV+mmQL-+nW_{mGr1k^;w1~U zHVyt^pe5tCeTI>7I4~Lf_-kC;P0w<<7ITqKO)_6diZJXtPVd+Co2pkO@17g??0$Fc z(fBF0HnOV72i;-rH*9)0N03#Am;a?Q>M>mync??C8$`p?Nn2yh#=N}yJsKs^joU#> zrpa(xk<+_3kz60So0^qd^!O`Uocc(gk4I*em3>`dT-N#VR6|39qm~7Gw($$>w5W(# zE1hJDEZ&T`>%h2 zComCnbMt4scFZ3?UVInxzi_H0V}E};kbvqg3=6`^Jz{92Q2$Foro+mi{x~ZC#t^*lByh93@(T z4F8fm^4Q2@W+L37I1>j3j>sla<1H<<{k)H*hVVb7{FTaT zYPXR&@g6$KAi7q&E2mGQkU(B_5hh#HpbmE0O@{!A>aXbyj$FFld%n_F& zkj2Hl39iHb_k0tePftuWD_3IBx1R|BAm=-YHDsawz3MINhZ(ox%_-c%!a-=2?>eiOc~+F ziz6{*Wy0|y!ypisBi+wJdHr$zZPA-5NGv2mb-X#|Zy!a+U}1v`g<>_qZVY7N zjVvsJ(&w6ovXo8u1o&DzJMT|TO}&$sZJ&kjE-0C1wW*POM^Uq|;8m^;_y^SU2jY=@ zB)aZ1)@%{-@DWi_75&qeEjvj@`sGOR52i6|T!@IUcZPhShJ%X(MpB=olMGJ3K3~Kj z*1atAHO^l#&*wc**C}lfFwDb*8c5^xUH3Rx8_#AUQSv!j!Zv934U3=>eZNyQ^?Gn3 z$iG>5W1=t!;l9(!l9>@fAin^{{-cM=)8HN-z`@pBF)R!}`=}hPCOLuPyVOr?jvj1< z6J1~D>D6<{$;&AzDfzJ(w#+XqcJR5LJYY3w$a0WG#IYGZjGTsE5>~ z36XDYv%5OocX4%fTwKBXM5(mn_R?#|+}yYQNV{@0GEkEGAvHJm(^w+$Tw+#D-)=k> z{Cn5e*K2dtWQ_Io8Og;g821qp1eEhiOU4N$kDvQaxN0Q2mX?>Zj~DCR!I$E5wpdQ& z_Ba_3eaXmKX9(kBabtXUbA&x&(f_H%w`<1AmpIIa^t)l2h|yEgv^=aVn0!+BE)pJf zJkzAdY|s$xh^o#yO27T~dpHGFL`QqZi*IY>4>2$-CvsR;dXs{-$gOJCJ(UoC{vZ7v zFJ`p!c_>tc3O@&Q5>N`O>BO~o?B8N=dsk7-Lhml9udjc!GxQjOsFHj;@dZSbn7Ibg zTnjYhajwF`;J0^Ao;)$?Z2gd@o6E{k$-!>3qgQXI`uq29+P>VV%*RD_dP}RTi_rJa z?SB7$&U}gSC@ONv=QpEieR{gzN)rvPbZ&-IP0iWmIp>3;<8p^NpJ!xbJ+`p!O!F{O z^j`9j{mMNI2E!8aMVHbq41e|?dZUOOLyFcm zbiN;`{TO|7xg{g3>MKh0DMHeDU)Vx-V&Q*(jI*&xllLwryt zNZjn+b9x|}ANeydGPbQibV+^@9~~XNUM)?ScdCCUC-Xh~hC=xL?E-K0T&R?9OWzh8 zdzbuM+gt3e2c~Nq8_zc;mG$aer0qOG4jgKfA{Z@Fe!Scr+TwHd@yuet;m@d5 zvVe1tB!$u`%hW+l`l4op6ltfZ84R+c<2kPe=kg|hfV~LW7i|?}? zQ`XkjsLNzEtLza(PnjCphT9$m1O%Wx4~B$Cv`anD-gqx4C@7aiE>2G2>gv+z9SKqB zstGIDXHg~#wn9_~*761tklZ2)2?GVw5f~)_0g5=6?Yuv0iolP?24Y)?ZAM{kP*Ja3 zlgIfZ%@RY2p9}3(1Gfedi06b&Yl4&IW=s%7U9RKL>aSkH%7$@orBR#k7yTt-|0$H0 zti8RxudPSlIn?W2UM7Tn`n2j)+YGxAN#wE$J=qR;HDzL&rNa6OaBuGv6n=lWLK$1X zzon_E>EY@510+RJ*tHsJpDUW?7Do3fcbov+Q=s>z{{35uy$>JbNQ~BTvE0aIvC8mV zTYGx%+%$U7mBxkrl zv!fXWYaeWV7)3AlHStRQ$FDn2_4EdtZFnWI$`4+H5r^@xB&9SClxBqlm)8=5K2 ziqCwX7bF6|>nHJ4L8_{&7nJKcgcvn{w_;+wHox?kexNB0kXYIKE|qCpKEmam7>RSI zWu;m-3OQ0<%E#h#Bg0o1|Ez{nbou?6I$T}G|HNfA^GxC{{%wpi)cL|_0%vD$BoQTM zn|7VPp!;2nr6toSzt2HI_oP$QK=Dm(bf84=+6PLR5lmkL^a}n}TaW)tpEtTqKoaV{ zi|o0=m+>z}wnV09e)xdt*{mKyw8YEwXWz)!F8n1fvCPyZ^z5q~iuKAT$#}avMg^;% zj*jj%JG-NH6)I$+-~viw1|mR1l`2q&|(KWKo(8|O4^ma6xcF&`1rr8zP?iN zzb7dv=}@Re2%P%6ed!$EL&t}etNm}kh5Efd7O5ljek@DOLg$ZouE$jOe(AO5(HhZb zvG$+^aJ@aq^b;G+l8^NXBoN&NN2yHrh}35y=3Lh;FvAshdIFH~oCr+K&1CM_(w67+ z`e^1B-U<07ZlvjGUEcYk&B)bF0lz<0Fvw270RzL!1y_yXNr4PWSx;Zz+pTR~r`j0W zivzRgPrz4L0%~e%)TpaL%>#M;7Rv|MB}0z2EDV77NN#STv96BO!`u!XV=+vR^a9Zi&9svkQGT`60Hl z`mKlMGse2QuM@GQI>GX~wTzRpox4r7qv{>6o`XQX?Xvc6+4Fo z;+B_-OR6z@e4TT~erETt}>&CHKj#Xs$o|1*TKQT024p37>->F32xB@9t14^&xJL+X6bzYY$Hz3 zEx&qBi;RXiVvPAI(HnF*E32uY*@esclvX{!@L(I7C@ZgEEC*vZExstpSiD!zFT-?U z&x!K?WXw=>j{gpf{j+akT`Ss0UCpU7l&(x0<77XEHoG`pIa%e$o+K zPF{X67Y55lxou1mHhZ7kruJ!34iJA46hS>9f0l7Sl$_^5v2M-x?NT$#`=>H7^9K2k zE{^fUJFD^m?oOUrlz%2jWFi^<{Ersl_uX76BljYGIKCm=_r>~wTxggXP5^*CX+=1r0%O&eer`V|x`cUFVqN)3$9)`nEzNSH8d&d%n~ z>W@q{_H)cHzb-rQWtFUtXXEy#ibhDQioa{h{}vH3!U9|EM!WdiB9p!lx zRbvz6w*Bs^XK~*YCxDrSrQGWrC*f5Q3k%D_NIIquDOc;{x6IcjC(Ox0(8MOT(&j$U z2v_jWek%jPN_bnjG&d)Vtmi3CekR;t+|lj7J=%gh&8tV#O=gvC!G=Ixz8BOk)*dL5 z%}8_$L&VSzbYnlp#-7^p;DQR?&J;XZ5gv|jJyvjsmzOs_{#oYdj`rG8GkwkvJT8~mRYYYvZq@0@j+W@(>*}Id5&-y#`LI9MXaC^k0r;Zi+S)rZEizGaX7Hli48;=@{*t7O z?a%&e`yW2}m=YVsE!I;`P6`Ry2_A<%pc!9TcNWAai zakfSSaHmnay`K)ZP20F6U;0pind~G2k*R9L`{c1d&pipTN#6z-I0rCI;oTuS$=4er5-iJ*U|(IxI%Qc{Ra4C6PyI*?gF z41B_-i7GcaBwBkiz~Bv#Sw%&~{Duyuc}|;{1?a|7bZftRCh;)x<0_}{zR53J`mx|( zWRNU*7efSgEjP@`H;IriL}F+oEB7vrZG7G-nET*kD3#jjs{}1AFE1>SI1aAueS7!F z&wixfsd<0O3*LB$4HM;O1qEs4cx#DBf-b7g3Zft^TxaJ*vUkOa+~w{a3I~FKk;fut z)fab?;i#&rLO1+jWIVTl+oR8L4k^1<8RgR}^I!*`R`C;i$ST`Emz5S;a4&AcEa=50 zHmom|r8ZRbDeC>ghtIve%>24IjxG-AV<8x24(pG$CaXh+_I)Rsv-<@UC;?P@4cpPH zxMtyeyhyM3-Un*f;`Q{p?^3B!5>L&=_3f%3M#4Z@`1W)Z^%dY49nLq@1H@@IoWrDL zIJ+S6TkW4f%gD7qCrqM%4S)=NI5~|SAwaKnPaga8+9O+ATQQC|Mqj#mM6~|nP#^n@ z&n553BAq#I4BdL!{}UAc#_wdYgFx;+wsQVl^cyLudz+f2AHWyYF^mP$$jW(P^-ZE5 zvIr_tOickTnEzJq$ETfWmt^4YwEn)gK45%PR*vVh)7y8OReOZ9|Hb2ef(Tx21O*zH z1DIoS^!b}squ8-nI4IH_kG#I*X=mQm_DzdtIBo$R@VxD0WaqT0Nr;y2C5@mU86Y=6 z+ku8R_f7(a@AaFF@`~V*Qriv~498x@CIpAXvC?p}JO!T5D^ccA>C>k)fA(lF zFw%y12EQ$YzQCpUVuOh>e9iJo4Rbt#BYD|{(a^qrzhK0 zAI=2bcmH&a@a=gBspW5d$dOO<`}O_@q7e96uy~^aCWn4F?CCkw?U#$?MEDWrom-eE zuN{o8qG{}s-r+D2vuXV^{5B^SCXSrPv~~h{aZ-<|3P_RPPZy&p71mDz z@80Ee+N0jC17EA^7&-HJLPXTo)rHO4-;ePrN{XjQ8&_BuN-px;HnU)O?s`v*yw-S_ zN?jAy%)GeuUxu-LS3LIJyI7CFFaJ>gqZY07#DM61MzZbxWM-Dp#E&18Kd|n}$dBIk z1K%^GVP_{4bldueCp#4U_DH6+x+1`=#<_2L?_r=Pb^r^Wo}T`Y)1vQH_olc)O*SJT{KN^6E+BpHs_{7qgxxFCXNOy*T;&&T(8=wpHMBS!tu=&%MdS!Kp4 z|8pqa7g}V{a%;Hr4m^KGyP|sJ z7?isD!g!R}5-MarF<`{*31Kb}5_+795C*&rm_I!G973Ek$7o>_vK$ik72k7aB=;Go zu@Gc0sC|LD&QP>BUI33A|6Zzkfl>EQX{|aJ>}`(}fxClm!~qxBvE}J(g~>X=s9t9J zLtO3j;3HtW7YFo!2m=IyhlC`-le)E?MRkg4A{k|64`Ydl;>Agrkqst-vBi3?xZ?%P zm)^;xQoAfZdqy5Qi#lPff`e};c4T%$u=^g+9;B?TuNyCw8KVhDjD-iQSl*`}`pg%9 z^~62nwR-+26}OnOnveWwW9YH7Mc+q|)_Udo9z2f`2QX?&y-nLHB4fdAT=g~bZ% zp75>4OvO@zs((Iz2AuMz9Ri894_KkM35CCms9?07hY(wG*6mzh@q)5EzqEE=SXkJ_ z7HP0jKOV(@+XhP%}xL_yb9AAmNH;F*E^y+DJsbMW^n?!r-f`d{! zf()Wt`#Yc0Vu_NImzVf4oucIELi^w!2P13iFPt5UU#V#^KFOuAy63E<$xSGvba4R6 zL=^jrD#=^QP-;v8jQB<)%#%+$sBDwCvHw;g0Re%@IyVYHM|Ih#<|wN2c54v3df# zE2AU12VhTtbOm~+>)RToxi& zYAz?m`m(w!`TsC=7C>=r+t%&`2m}p5g9mpaxCaOXcXzko?jg841c%`6?!gk=-QC^w zUw!Mn`~FjPs!ml>r@D9VJ=dILd}Hq0^N$P$h&Iv)i678MKPJ4(8IASxZsmP-u`e?9 z-0GFiy3)W#AB*6pR%`M?9UtGXfd40rC4=!$D#fthMg;M{YXCu$prJWc?1zJzWNZ6x z?A1-Zi`^I$%ZarrpQJX20 zp<;*l0cN`IKsy9_&;kYS1p**R!w;1zNI@wE&rFcVedo7ELev1C@WXli)1Q7&H5)qs zdhT`BeYHzc=^pLyMxcJNdT!fyVOno@Oyn{+*M~PQATR=E;!hCzh)kbX7*QkF$IBnT zUr;YJdL-9|8OPDiG&tb*CD1{ofCm;2PD<(2!g7t=4~JF#di;^~M2+b9{rOV;eQ&1~ zqrY4$4XVFcm4!<{EMK!#JPL?|+iSHdco5T&ApH0qd;=8ospxgj+dHgvN~zelrfilo z2;ju@1`_$!m(I`qrkvW zR_*a}EVRlTII2L=YYWjve;q_EUJ=>SQcrwwxvyMVTvitFUeLdNW(HTg)w8>yYCAGI z8W~K~3bsxnAzKV98ymiinoXqi%%KO@2eY3QO7>oZ39A4ZgMb0G5YxDPWOUTujl!u5 zhl?}#P0KUrhc~vLod(37mPZi$o+PbjR(>I#vz)gEjwe|UT)aRmU%U zBKje2JnY@S`3HPg54Y=%;K?Eg0*t7&#;ud3}zXWG;3mlVMAM_>GQ9Ku_Vka_T(OV2pNgiSoha4=e<# zVOLm=3(sAPNGhL`Gotzgpv55Ca^G(gU+m%dj`xQDOZh?(@#l}g1>uPHo-5|6&N2Th zxZ@`eG;!tP$al;Oz23456aj^MBH(Yv+z9gd!aM$6{2LEgFa>GRx%#pI4Xrol8SREv^^*J5P@rk3`;!LG5Qp z%h%AqQ0V*tUx$%luEvz?ngAIYc||SrrG$jUUvuD2>dfrO%8?H3X=w?WB&Ejqyzqhl zN6^k`vquiJpK_fc4G90=F3~_vM~Nd6SyfHr9NFti;N+_}1Z%YA4W)EcU{HuBOjg_I zf4Tt|Ij{nQsxW79O~)!Cs?-1T94i+UKDZeFAeD`g-;aa-_77*FAXEQN3ynoT`z9rt zo1-5ov@!7lAzf3UP6F~xRI~$}Ors;c@Q^n%HFThA{=2z>lzWa-R-28!J&L3KqOOil z7ti>0yS@D_ht$8$feB=2XZN!n{NSK3$glAgd3L{0# z#TZ8$FE-qMB=r57nU@I6h0$*VFtM<7SEIYj>9mQ!+3ycd)SifUVHL3x84>_FQK@l< zlYG07`{V-;_0Ud=<>1r^P+hMNXp{|f4GsMqOS(;E9gne)%&mHQehXjjL3~Yp z4i646gCQIQsCV#iQJ1|oHWb*@RVwrYNxVK+E= z%+?D;{(p{-cdw#qJ%9-9`sy;y_Q(CjEe563YwvjMfcPWDw}ga*p}3Te`bpdtg|Xid z-dst-qY?&>_eKbUhFK?}bf(#%NbHZKYW|#Yo`3@>%#Rl21z$*`epIIJY!12t6*ykL z#)3I#?3YaEE8dN3OaxdU>`@c(cp{5hb}e<4N09~H{02%U-YqlvPf|$@2?^1%7-1BT zzh`M4ZiZLhR^Zr z9H+PaSfrw=8uf57!8eUqnh(xoVO0F^9lPy+#Zr)&IzEY`@BF;!5s7w2bk$hLZ{P68 z7gR|aR@e<&ekuYBZHO(@YABBZGk{*?4pC|GOx1WV;poT;9%qVc_R7G}U^!*;Nxi5vb1het%!75 zq@iI|)YtC|m5H^)B$zz(8kH(TL}wM%<^1VsEx6CJ#|)IvjyB^(hnyE#07~!AhI8x9 zH41vo`oITl;P|W5`zE@fLcTB8R0)y3&p0?@aG10?14eVeil<(0AP}Y>$5`I$btg?4 zxD5P_8X3nxECcZCN5>13v!%XCFaKm2;E#Y>D6*xEVr7-|ZRh^_cxRF6+m?~AJtfIk&dy?QZK*VTfA`KF zs)D^uqoSS-c?XrqfNw191^TS_y97_n?#ax$4;)ivT7q`yG1+bzH%Yv1Pt6jmdzoZ< z37Ms-O&`SczvO^X@cnpRlyO#_vI8>S2mYK-zo7oz$%ssJ_)EwZqXsog`Bb$i2I<4U z;o;t-%QN{*98Dq;q(JR5l;!hNgM0f1Pm!RxtN?CE=v2;zjq z%I{XcR7fV9M5Jl(EzrNTxW!z9ViDSFv&Jgq-1TKl3cxTu;e+ZrUqrRP`E{=9Jf(0{ z*S3dijw#J60BFbXiUxQzvWxvl;3#Yd4jc37D9|^?B53J&b942^rx@f89YIz5m6RkF zW`BYR88LA| zB_#7JcMTzy=eH|z2s)E?i=4AInEo>t;U{>xA=Rc7T4-G5+PX=9;l$&q57ukVMt^3b zdH{)>Q6rk^r?_+44zMkDkN!*}A0!pC{{oeG+p`#oeKka-&@X-ViRg zJFb5yE+ZB^H4U^t=34BtW?Nir?koGf?80HvUfT&;H)shK!D^T<^cmYLE8_aE87>8s z_m8#)|AYich4eCKR5GiK0Guo%-F=l@74vzn)*NdFFPlImle6to~$#kHAGt&%i3-8tg+x zn(#h6k;p|eQvC-p6$Zrr^Tv~QgTr>XoKw`i({Uu`D^y2E#5&CuJ-CW7INz#~EhepO zxub5t*U`Cale}3OYH8YFS5UWroSeLw?_6%Vt{Y=UgDN3_B76Y>cDPSs!Mj}&t>7Tx z5IrPAaEG#Ez7w6VQ#{9p_*O|{GpYMKTKHBusn?l(P0smiR5cp3v{rTvpnhz444B1mfJIgKJSQu2%PJOC01bAJidBW z#BA4Sbp`bkWh|>LARB@xz+mfkBgg+Pf0xDLoVrE z+T*!@Kx+%|QIo~WoLK$X+FDlE>mAW43cny?d3k^|2!EnmsuIJ};I_j~uC?s${$-M# zm(wvZfeCoN&XEqE)kDS9gZsTpbAV-hSvB4xc*BpMq9hDJ(^seHR z-J%4LxQK#+ze7X*z&sc{{R=Fy(d{Aqoj`OsQ#W#&|Ms20tLf;e+5d(Y2RK}CKu6gU zyzo6t)u)ms$#)`#2uza{vVRc*c#w*k+RHarReA>5_}R7q!p<2I8U6Ti!?ko()2G?e zRQJpMkU_Sx;Z@j`=BLN<0xwvy!5G8;sr$tJby4IbO~K!*9ce~U_s9*(qAN>j{K zl_QV3p_*&K&U&k{**_|P(e?``1l{ZDfo5~;E-&NgUWw4ABD%*ne<-={juc{jc*io9 z9&dm6P}bEQD?7GNzUuO_P_YCNg3D&ctkvd1W=E=E`iHzVM`~e#HhQz^`iLfsZ&d)8o=+?wzjeNPYGq(=nmw;TMsZ0_g09h>BXrSDzL|(w1C>5f3rc& zr6nbT^NhT_L{d^xC;4kHFsYir$#`;sS-TH{>S*TX<^WNuZ)jNU4#9zR{rMdm8}au+ z>67u+GxJLb1@5#weA0xz7kgt|{fJE-T1KUPO@_Lvt3S)UO2XCMaMkd8>IW+%Kg=Kw zq3pa6A9rkQY@G@fTNs<)s5ZbIF&a#!V}pxavy(!yv0lh5!rFh#OtJN>JH5CKlIju&T6WjJ|EG<(0dICrWvxIwZU9P`uRM0!48C;|C}k(>FQca2~ix* z*LFv5_UFhU0ymIi7yNcFNVCHGcsvaz(BIA+0AvOCHL=d$A#@~O3yV!Bqy9ovW#dKjjIs!a zB4v!I9nd|9b32db88f|=0Shy^pmj5)$Nx3xaH12nl&~8(8Uh*CJ8*MT+MHh~Dy?xQ`+Q2d)At4~fSPCOk=-N_K5gYNvpK3&ghvY24X8@VC z;`^u`P<#~DmS?gm;jfNo1+0$X1l-fn%JL6`L zYbDEDXct-4Jmx+W^y`!9+me!c``b@`mRP{E5u%;|JQ}e7MLA9`kujw)*)d&I3MH9d zVO(e?}5aaW7y*Qs8%Wyn6$>p$EUq}EqN&a`L;E&y?R(G$Ld&1 zXd@;jneOvq6*sKAP3o}j_&qcq%-sLXhvl$bXZQ{$1_#5I_KSu@CDZSqkOD_uQu4AG z;L&8t_d>w)@S}foO~(ZHZ5m&1&M%XN(6H_-D(TpscVc3yO|G*0?FJNWY$U~P;pz0M zefpHKpa}kdg)cfa)dz&$blZREDCDpFeD4Df)GY-FpH;WL)WjVppj3f5gp1@i>F|noFd#;rKL5Cu5EG-bIDkJydMMhNYM`uw=u{9 z;z!S${W#p7XRs{h6F-2=y*FJVViYA;(lM;bF8!ojq=p5wS(BZ0pQ3IbUeCc_^K?jj z>1W3o<=>tLcoapQp9szBslJ`M(FhqV?%(rV&Ze%@aT=7qm7P;wC61tpNP+FWF6d~Ez5Nj9KaKx0OJ*+N4K z#-e#AS}A;i?yeajip-H!vM6T?{m5ECof=?Y*I6Y3*|$#YvzcJ7Wak-$IPg++L4K!v z(QSmyxt(e76McxAc&bARd6s`fMvinN(2qe7AU1y37aSnarcpH6WWp7+{M^ zO_v^~9qXqjAXtUZYW1h3?f5^D-zhIh;eK(H&&hrhZ+bDa}B4uDMHRV_E z1-vT(G7^~s8i~Ynjr*in!#$WSqc^P*`}hQ;fG6YERMMn9;W= zL+g#Mp59O3igpyKv7F5fs#k!~tzND!3|x#4_9HqVEj3Xjj}y1Jc$z}$jyF<9tcnW8 zN+V73Hwe(E0uhhP&wuMwBSHgbK=old;&aZhZvtI>5{VB%%&^GRH9cU5+Q)B?{NW}4$6O& z+d%Y{;iRgTDepEU1B9f6>R%zqqaMz*sIT%qlasHAY7i8bDU-4K zj}Tq$4HBQmC{f}_wKh|8b3tiow1$QTISWQgLz+g%l9I0F*}%-s4|+QvayElxl)Pe< z(lx=$ASly9I2{!zKE4QHNPB2sFPbGR9$3@cYXK6XqlSc*L?8&Pjqs;z?ZIcY2Hvnu zkB|ERm?$W z(~+DiIpH%sQEvocUdvRrs6L2uz60$!m}tAk^Q3dGJ~K1(M-cJImL!e91rBeogTT|+ z*jVH#2aKN|+|Ed*&wzezP7Xix!8X74im$3KLPWL=8n&Rz%m# zDEMsCZ(VSh*|b;e?{OXG7(3$Q>dB|dj{Y}}X&3uoL)KZkmp})S4Wv6ij0-}-#E8{A z{2U&x^n#*1E3YU|N8I${vU@&(97R+#|KKS6#3OSDpF3l~IH;03?$!9acM3qIlq|Dn z?C#1iLdoQ5Xw&}u_KoSHoJrXOsB;T+QXj1W;S=3cEZMI_PO`Qvkz&WmNvXCutT6X| zz5%9JD)yG5NkJWy(kBOUnf?Xca2Rd69ySQ&AA{@2g;NYCkuNa_0OWpC( zDp=faa&#Op#h_krIFp0IBGVx|>MimPBnW`^?;VphLOa&6&1&EkcWP4iE%*aSES^hK98-B%kd*=l{$O2{1Tm1_t;qJ~z}smf+!SvfWPjW)G@n zRIqj%G|qIPge*y;9|^&v2E2?)qU#HqpCG0}N*j#4^~~acX9;j-Wn?411h5A}OJD$N zHx>nm=k2o?Q~-+m56yaYR1)1z12U!vEpgVEj|)-m?(Y8LH4I*`&1a;BPIHZl0pi0qwgyme!XA?{0n-mU zYeJBmi(VE7_AT^VfuI@mvq3$&pz%D<^LGiM+6DUkKY^K&p_DkU(C)el7PHy|SWH-`GeBIFmf7)E*yrG?QK@YwJk*cwzU4&o_6hU*l*M zt#8k;6zIZtxm`#x5h*ArR_E&^ekCV&%+9{v>_^hy12Xf?iT5q6G>R7`Ugk&}LU_)H zo!)!Ww4C;_)gKncNC>biUiY8RGy8vXA`BYDQ(-Y0-XHVzO(|W0I7ipxA8_~x`5ua- zKRqg>Woo=VL+biMB8u}y6?BOsoG#HFYvLbAe{rhfZk(K3_%|S7L!GL6C2KfHN}GKY zdl_hZQJJ(_eS!61vU(h`TQvi?0@3j6&`@MXFOFt0eth^w=g0x-KGz5{<`VfEM{wup#S-Axn$lARx&_ zaXWu|e>?heisvQFs86&%|2xmYq>iz%x1hOvUuGy1f7o9X55Kge^*wQL``pwJuKM_g zVt*G51u)(_(#mB(iyM~&Hv?`W;ofy?b|`uh8r+ruSc1@GW^`bj;Bwi#3@7452H+zw z==D02SawEoLev&o#Q=t?MM8S^A+dzpW`RA0-32jGb>RG*h|lFEw-)+T>DydkfcO4+ z;&B^w;(z8F+7$-94T8M9{CAZWf8?~&Tldg(?x2boJbA5V_n>j(;jz+5qy)w_!0qQN zplXvilIwqxDF~iVEbLlp{pu^Q`Q1X-MCZpr3c<$4#)$8q_v5*%llcC>xx67v&u_fb z3jY?mwS)QSm>qf*1|hx>gJ(>>y7Tk%(JU)saC(D)n}ER22h49Eq{m+FM2!9o z(hgFh@11wv2m>kDO;9jMCf|;qie9yq0OX~Fti39dM^0m?-d(oY+Svhu)Mf4E3rJI) z6;(eV6>xbx-3#&rqOz;+{!A#mAJ%TxIk0uSykjB7geK1#Y&R8b?d~;Wr|gDCM&5AM zey8*(1eXe#kmKzv$G`%qR2rwB>bP+`_(Sk5I>FuD#p8j99r6{UgeZ{xZ$3BWBPNX4 zA_(J0X}b^0%9p(O5fv3BXZ)HB&O_8}-b-5rH@qNHfJ$+&)J-CjGitFJtLO|CcJI1O zOtS}8QsZD6U=1K180bSDQ;%E2^k@4#=Po{}{?{GI>BEC?inj%qQ~TJTmk#?AUwvFJ zzo{d>X+$g4u6hOM=T~iPubMIBslk{dwPO90@;-iS=f9QW_@PiGpZTl6kMcv;vyIna zSv@RhZB8yNf_F?#VQoQ&Ro{p>UyP299vBkiNKjc@tK=LC$baxR5OHvD>YJK67Z#9J zRhOfFQArb?tiIIfJkGnjpxG;+#jFnm9%GmjHM}3zy%w4SOGQ9xSuZs_-iF6Yrna5~a>C7adKOUl@b zJcaQe!|&dGx&~VeTK}9ax41PvwTuVgGS+Q55;g#s+DxG6skE zGmKaGf~Joi>`MdssM>~YyZm?}xFqOLdz_IjvwM+KG;vg$0eo z&$poUhsLcTkT#=Mau2Z95wJv=XcK8o)-TqD!3(OYEhmEq5Z=b0FIOwaLjyU$m;6AF zIyHS!nrW}ZcmYIA13&gQTO zrD5L8hCN@gDpxIBT}dWYOhR&FTZirACx874o~+bV!rJ4xAoh0+It5_tg$J~;!6Sex z4QBiLg0~F7Brn=rr3|(JF0H+^q zh+~XH$~y3G5K6>g#w(Ut^7tLY{Q2=%|55+%9r)jZng4@DGO!r3Y&wNaWEKJmxvfb` zHQM|E@*Erg+yuQprYzm5?{d5Ma0?3L-Sv)!tjw3-iW z@Cp52{Zoc;A<=yq%qNAEM8Ady`m#BQy7=5)@o8rUR)OT$yNMgNjG;z0Fna*3ZlkgI z+uMaUKG92DfOK6EBg2!}D>S^rM}k0c|Ew3v{3^%8={y0&(&;Q1iQU5)UD=g{3-@ee zf0ok&zXJvp^{cP|*x+G3n8Zv$+I6(}()5s45sGI*0j(ciKqielc%NO_)D-)T+Wy&d zK)pWlv;rfIkE-9neEL;Lw;Vg9;4cFm4b5w?l<7xBMfu|RNZyN~6t3PI4TJZtQnFtK zB8d2e+rGfO<0}7F$wnWVO?5b(hbHydJB4$>|{?GQwe&R6&A7D@=l9l?`N7{`ds6qtf7>qCHoZ5eOhm3-#hs!fq zb<0&WpVF1W6(UYHTsq zi&I_ur?!}tr^kP1V1-N9gTUT5d9gQIi&6>Da&Zn4@1)H|tA}BovLcw4+IjKpN~c?g z>WT9vApSlK9K4T)J;($zRG1G+);8WbesCaIFE-D}#+JaIlbDq6^rt&dI(-E&zYyJd z{&y_Ro7d}aW4a#y?jciNLsKhuMnkX=0v=BS41pbt-}!51AP8V$ZvGryRoQsI|3AqJ zuh*i+nE>cpzjK&f*K2XRW^@3c5(ZUxmR!yo(4S^_G+iN};q-h4x`K>~3ao_%gZ;q> zIy@=?31j6P=iJUnD-5lYy`lm$;99_|@rc2WKYUi!KTi$|7S!(FzTUPvS@cY8?;@&~S{6!LAIv+}uA> zZeZ7oB_>+h<1{(~Y+!hhFqoVnKRi9|*ESNzZQ&gr+>@g^WcYu*66s2=vx@o^EA&$b zL{5cHBHw@NU$tic^-0#_b0vs%{QZ<%;#@1w-y2^2rQ8b!oYUl*;5U4Dr-Vk#_cDE$ zs$*vNz5IwVzn2~lV-P?A2mSKE!XM=_O|pGWE(c21T`+IqvRKlu3ulXL_OW~IF+(z< zlkvgwhjp8j4-AT90cg&^#YKOMvNMgg&8XE5RHx1OUXUiSAJtQ%jlsz4{+v-T4G9=j zV*jwab`WYLCU*;__s9vgA0K|OC<@=<%FY!a84tAs^B2gBMG0m6MUICGV%v&S2eWl( zz^?rXN(l%FYz?LOEyXI(NHpLQhJm25-h8ekK$X!^{~VzQ`^CPd=zHlfWdndoU8vs4 z143Z>V2{AATCNnxNQjY-IO7pVfFr>6*nW3H)bfrRH6Tk)4Mahzsszi9*1SbTzij9H z!Ua)W7>NDR4EjE+Wh9-+*!Xzo!0x!NzJ<@i0>MBcpY|b)ULmwXF)^Vf=>4j5Q?D`k z5+5TkXMNRdF9y~r48IG(%HRC~S?QZB`W9#HGD4D0go)F-&t|D}SDYAnjdCUrEC>b9;kpe@@AqEW^j4wIu zyKFdiJwbf)j7&-|Y}Hli)&Etf+f&adGH^T*b)rxQL$ITWm&E2{&!> zx4$_ZK{F>f(!TPxA^IyJPjEpDWhdC?P>QAT(e~HP=fkBs<;^qS0*UEpOo3B{&>D(_2;IZ zUDIih@8Yazy`NCrz#!YQb@kQy)ttlrPqlfXL$fotQm;18FOv*g48O{}_|DVK!pv`j zvD8}i{KEGaR7Xcg@p#N)hwumx2*HEzq2zbv*Exh&sI2A2@cpJ4ycX`uvbxs*@)FK3 zR{ciV!Hd3r#%XwBFM`^~nG&{Tf{C63nKr3ZBZ3f<`P?ump4$yuCd%91N#!D^VXd=! z57);*wg?lh#q4Zy6hhm0n|q%KKEx(8*|d!=A4P#aBtK>N-tI!HzOpvF^v9|IwCT^o zd^nD6H2}@WW3~Tf!=;fCxvn>fgO6V%-Wwh_zB_TyVAo%Qtlrp|iP>nV?CRQx{&YN3 zAvmL-Hu=$ORe)^Ac`BpB^=vmUjyU&jb>;IgeVyL*#O}Dmu=if?;e3sJSsG7`wd~G{ z7W87Z+#0Pr3LDKTc?5VqJ06T=s%x$ZB`;B}YMhE#UjLh)Jf*LoQ*sUbfy=vOE4(`OT9eGOwqLllr2pQ*yxQ3h(xzr) z9lDthDT~#f{ayRW?owIWaw?qVAsVtZ$Z|R^Jy|UpgGl7!%xbYz%wdP7gz9n>IkrO~ zK^a3-f6VJ}?0VAv=qt^K!Z8dNg8dF&QEYgB=A+Fni5N!29-qG4e?}#O#pBs?Uw_tCwxP0}+?)IYA1ti>fp+IhB^vZv0pd5r`m7eXJ2 z(uOBa{oCHIE|Wj^#0pIgQj$eM7Ac*pBXmsRG2^?;M_wyY0TDrnbU@VpqMWnr*CS9OGo=# z#sqPu=j*SUoL71%oa@La_?+}R9tB7&Er;C|G!z`FRO$B7Hchlt(>W{0vtVsn1}mvz zTue+B*hHEyH|~%4+Jo2TH<9zrDs3H^YLjJZ{KIXY&Hbqe(Q8#j=1-&oWo>6-ehen! z%47$#Spi3=7@w@h>VuZN?g>*ryZgRMwef$If=%!W73(dubTBrY1=~v7Dhq3Qddk4X zMgJJCJ)FPXuQpXoTlTqLv{FDhxqobYEPXB-Co!;i#MWvtl9Vx7FXcKKNv&HnqHhzd zv7A)H;Jx{Rw`QZIA^Fq9DPgwo>$8%+-q_M9zY-?%GzFp%!BvDgvfu%DJXUy z>z0(vI{m+l143fay%VMJiFi7mD?Til)oky=C%waq?^a>PVrYN{jR*j0M69gkLF_N9ocFyJD{Ya1vGM*ru@^Fjba;rOHpn|UT&F(gsarOS z61Uu^`KLN4&6o}oyQG~y1DD*?N^KTVA*aYh+hy0#Y@yyJEbKBboeKY65A1*#sd|2r z{=1IL<90FfSvo;G)8#UWrN>V_`eMy)IG~u_tZEkeUv#`jE5>XSPXkY(p&4d%PK!3i zadmVQW_!QLL1hDB*&=9Vi*>7LFKd&U1aGoH<06kuC1m%HPK{GMvIlR+oH|-`Gx#LB zDE?^li`62D_wnMhp^?!)%en%?er&V(+OP-DHqWO`9FLO@cv^b;=;3X7Ev=mpVXzf2 z=i>2x^IE*hXb{mQs=L|cTv0)RKB714_8dpy{&MY&LrP-i?>Bn`T*oa%<5C>m)E0}i zlK7H$4@edZ)w2Cc#WI$brE7ZY6D{g&EMk%1(|9_A)zjTBiH-Ne)F`?qa-dd9S~W%Jk_0uFq+^NOjzZ^LW9| zL1TNUN1ylU0t1BFT-OgTU0FPOkW-zG8hVz&28usgHJ@)2wEHwlBwRLi&ar_>o-Q$x zqt6siuIV<&!dc`?NloQ=Ar)KX%DpclG3x)UgF({D6+8Y z^U4sWsX*P%YU@$boV>guU9n*B)=7PWls+cK+*|8`L@wq2cqZk9_3)T(y-{B@-id8( zsfmkspJSsE3;bzl@SN`;sdiVhm1^{~jEtrB>IqrhcVYNpat|QTh2R#qPZq(GTdEn( zHkXjXVVwbvUV}mHdVYL1%jiW*<>aZ7$tsbE3?HVD1o~0=XAWly+hHP}pQxOktRL$) zl?>glx^aX<0;>X0ruC(HO$kCD^rs|R9+#RLxBA-SBGDNW(mWqtFFM>4Ce`V9UmY#d z<&76y9nKZ(pZ3DX6%P*$O<6oU8IRaCELwW7>;AMc+|+bhC?HyF+D|@ioxUQR$HK=b zYV~k6AArlkBF0fZ;{0GRqO)#hB;S7@Ud4u&e{yyNWXfhvc#*6tHk`pei2~3Ee06nGX&e*;o>Vay0w@rq&KX_UuhUh!(d3VLta(Tq1R$~@7fF084bXZ8o)W)4}_@{rp zmlzAn%FJxut$1&`u54?t_(5?Ol$7aZcX^qn{;|1g%MwL#IxoeulmrIl*uDVC6$87bv@rhWQqj7H2T+PLx{ zdv_E-T*w?T=9$VWx$OCzYUAffO&KG4+;ZudC>8?#S}8hwk1Ub2O~sMhiFbyh$g}I& zYv^;AIB3+})wQ$FLw#Iy7BiDJ{wVYs{+r#3cc&Mog@{!qj-XqP(iIWOni zJC0vY7tNpcn*T9QH`}kZ2o4XQDxgX)7Vp*ie$jaC+TyyS-4Pc_KM=QHvJkNab&Y`b=SXs|U=yDfSD5)Ks>QeX9$%G{K-6A#D z?wYLJ)@>q}la7q3xY=0_*T%Q^WNlK(g~Oe&xNWyjTs+p#kHMjV2%Mw%M{B9p|7pie ze?LDmtHyZUel1cei|$=lEQ)7f(YvuGgS;1g_Snt&^nMnLPI<30f^P~d0j^Nv>S$8j zOCq_n;e6Y4dq^`lBusI-R5Q#W*S;x9hREgM=ZkEuLLoR++_&$otS znlkvI?b6q*URbz%S_w0P#y;;OsAKA57}(kE#?T{4cN z?fGs(s#c`V^6qpyy+*$m6--)}d$WQtQe2wg?gLNCrWU`=@ZI-fQYHoc6PSS2Z0mV%5-#$uBb zK111YQ`tjd9{}E5fB#%=p9gOTypeVj%qR_CYJmP*Q=Cvz$2{r2RKl72|*(!(KIOQE^e*u0Myqw&<5NX~? zuxS5xShB!1FQ0~bt>xt8w00i&f#iIAVL4KzG;K#!z`rw*<6ifj*RBr*C-7@I?JvT{ z;DtO>c^M9Z4%^}xCjq=0hT-Jd#+P6D@+Fbi9#|zPY`Vd*{Vkf)X)k*ymD4Z9(M#Ch zvh}ex5`K(ZtBkSfj#kq7*~8&rL{={2=SU(9e0<_j1y%aUY^Oi`B~BS*+j7~yWvi&R z=UD+Biy3+HAhsiqdc8>$Hlvops$#xKvSEM1zAvu_Ib3NaA`a$Ul~WmG>lz|x*}>b# zUM;~iEtbaIrJKMCpkB5W$UA`F63!!BINhuK<;a*}KkZ^|Znc%yjTYMDdAeadT%_bQcFmObUCKPy7F71+5#yd=A%-*Sm>%Y4P29QU46apz~tr3z(lo zY8o2FTt}_q>uFw@3p#5t&rfxF`g#sef1{#bt_DZ55(M=9`!`DHw5&+EpnjG}KWJIk zueDW{8CU9x*ViMNe9>F1+Vdo$<=M(xruQ|nt4oMSd5>fcdSkRa%g&qa*PVb{n#J|t zD<0nwMOKogp5AX80cOmy>7r}CI~nPx`(?#aX9wo|pyLMALoV1w%kjpVxoSrBnrj)* z$o+Zc2O6^ra7^s{0gt`Y;Zn(Nj@n!09%%ogZq=$v^Y0(t$M3&{k@2x@8<|>D^4XR= z={7tfcrLT`^!39$Sd#~HW2CtY2JE%H?n@kxXEiO6IxXhw_WR7AGwZb6G+&>d28V@B zg24pa@lHEWa=gT8L93)zdy?g#I8#iFbLP{*NN`BphIv{biK8h2M2r9+FfShjgNN+$NE) z66F8ctYw#7Y;k3(voUE^3ax8r=&=MfjEtUzvEXQ^0owTj}gOT(LY>TX|8 zH68E7#z@JvVMs+{-n6JUa$0OlrP5(xMw=Z$izhql&7qnqG%Tk{XJ_XQhhc30>AH?T8yD8svv1gg2Bu9S@wY6FW(57v8Ss`5*HSeM&Tk)ppn$^T=F5AtlT}{ghRvW= ztbW`qU$vwN5VZ+#97nk&z6a4c`BXUc7SDlCgNYAWR-Xz1xD4xJv; zEgRMy8C2>&Y%l}Znd-&9f-m6o19i6Xn~8kdfH4ZpFuy+2RfIvp6b9nXQV zcOJL6gtxD+l~yt2Uj@!W6b|s=?+kvPa?k)yL~@w>Ii*L#wgPlgmh@RQ`%``%OJ}^| z6k@zix0ZFa7EE5D6#HVjx|yt2C39cG8qQH`Pr3Bl+ii1^W9NuJo@wx$-RR$$?~X-| z19N8Z=8#R(Z9J@T>u$eKV-z0)13?%Q2WP*;sc3rcJsX=cvDD2BdsIv;uKVvX(0$F~ zq)m_54UGn1Q2NquGQh7589gx-5SGkfp#y=#BtjB);*U+?pW!AN_aS?>F~uDi_BVT_516i&-8tN_zZmvytP z@$rG!3ApoWeGDK7^Jw(c+=%QM^Vz`H=gFsOHFYHyTp_=|JgUnzD<#WHF#xr5l_nL> zt!9r#BHN!fY#jSZ2dv&Ya<&^*(+t~SRqw&8y~$BOKiYUWU&vo|-yYPAJ*Qjrqi}Hv zLZAssYjbdOJH32lSMbhRA$}>FzP;Lm#)EQi+|?H_vNp&!1Ylc$MrMauZkrfukykiJ zz*ek{?z%LQ(RK3BO_{BJ33EULg932i>`}QL!i{f2WS0TwvGj*ZVe`FR3KH9F>Z9d8 zWy|$sr}2Q3Ba5B0_2wl`O$#UPOBxb(Aa?Pv4InW)VDW0VbD2C2%uaZs$-e`R?-JN9 z-4N_C;s{-s)>62*$J7ndx4wQ0sa?)Za^Lb8ygAy|V>d0~_payms45^?1xHKT=aM}? zt(^b^imGYa^cUC<6xMQdxMa8Q=2_j+Y`5_7m&{62p3aNM3wdb>TB)w7spm(sq#N&R zU7qF`3mm6JMWBv5YV3EGKQ!6c!R2s({Dvf$1B}oB6@Z2un=NnoRsfoB=62*!yD;I` zc67A9c&TfFO~SNeNixralMj%wu@F=JA{H61m*e|e zDx34aKFzpGS9mYWW>x&8EOVs7Nm1X6SR}GfvLfc{HKx{u4co3%xsh5&lOf$1k7ft) zLe=S?YMPn`0BAGN)AKqKmhJj%3PnEvaXQn*&w?jy{BD^*zQK zwyTX+X@NmMG|^xFGFgao94qAo&o1~$0&41CFS2d(a(YICv|Wl307+kzn*|JvwB?Jc zbWStC7<;tWYqj7jZ{%x$KD>4Sw*c8HE-^7!yZUN{W z841G0Ra#&`rE+(sze^1?kvVPqd#oO7JGFD&uwSl!@Pv!jd)+(xBENlkt`DOT}_>2saAc>5O#ue5Y zL$RcmaNrR{Z4Rx=vza`)LoBq)2k!$UqouDO_esnV9m*GkPWIbg?v5`u8CEIcpt*Xr zuhP+^`R7l(-eUK0P9w7@Jd|Ffe>{Sl z*ZmEBMWnt(Qfn>iDV2CK*<0R z7KmB0VC|)d{ANDGB;;uZ&BxIV`6G}gQIMSpj|8XsWna~x!cJ*VxyF(6KTn-{Fpjp< zo_)F5uBXMcgw5^xm?3cNs=*R{K@$G$YzU=se}**1&8BAjtnbe29f6|ue@WNd)@=Tp zF|2`$u>Qd17pVT{-Mb0qJ%9{xokhpfGTzIKQlXrA{(zl#(@RBrwiP=tEIKGUAa@o~ zm;S+{YqH|fAKIm$N4lIh;ppemdnSpwXd}_@nuJm%6%J0~&OwFCTBb4Ebm?-4>-7CY z3OZHOr9^g?68I?QSP)jKsBpO1Yf<%B`uZWchP>I~MZitEygWI+tO$;dPw)Kk^XGiB zE)R)t^!uom>9R{?-43R%zsOckHAwA7SL3SxkgeeL2+c(Tp;`_x8Eni(=(hYlN7VV}~C(}Nl{P(C~$=rv&x#~B?S-h)ao!;nulB0E{l z5g2B(GSA|8A(PxCnaaT}Z7^nX;xoaQi0;x{stXbhzu3yG``6ySdNBwT)5sH8Kr_QU zILvy;cBOWjmg`50IueL_)`!P_j&v*elvcYG8&EqvVDef~QA=)vP0+Z$I!fg{n2S>n zIyiXU&kRct&+ZqnEF7LUzx0Y@YR)Dt=Hx-!Pfy3u`8?;QULXM*fMC{tbX7Vtk39y8 zhT)-@CXeI3)9IYY78P37W$?j_U#Zonao@nqb@F*ORZdAXKq5#k4_FoO^4mU)a zd)p?v-c}BHCUTaI)vUs|0#i5lxM6R5)Z;!onci z^`-SVP?t$uAA~6w*wWHZj`kHuB=X?a2ksDapTm*2?Ak#2YMqmr869O#9$dJN;o3LZV4WUZCjZ+2&_eceKF%*IU!zA;DGPEy zhPbhqFdf0DEg!6N=BGckZ-9g13+h%56}FbfO>*zTn1Q%Hcuh+o2RMDU$!;(OzhAoi zeDw!thm8WQjW?SUV61u!KJ2DKW_Ru4KrrsQka0E_;@D_V>2y>z2umn~leF~Aol@mb z;F+?lT^3zsAQ)b|uq|`{`Ow{AhsqDVixXuk!qIFc(F#Yz&uMi3ng*(e8BG$wiYnJ1 zW=QLf4dnz!b)yfBbz2URZVae5ud*Hj^6R@bTaf+Zk+OMmIlKJd5&9`Vc2P`>fsSH9nwkmHF9)GS5=(tg&h$tx%~ zqsm35b)u>({+e^FFrL3@+|&yddWbA&<#EHP3`9OR+M)mR&(nW@0r%KpJrgWUQBYA_prU$3&R zTOgZ+Cq_A<(<#sO_a$k!$F*mxvsE=MafKdz=}gGqFMz*abUJtxxez>oXD9TSeg3bP zx@!mbv2JpG_IT zj{ltt@PFPT7WQ8ceoC9}Px^lj`KkFof`RS+pX-6#1JI@aA6NeQ{~A&d;rsu-*Z&%| zQ?Gnq{qIfuYeZl9elZ5_tmr~Q87Ax>V|?n=U+{U~Q;|6DEqZ>!+{9@&3?pTE~b zGrIp;P?FXp8~JRJ zHQ~F%0*J)Xg~)%IWllZ#wEoEzgaM*i%Sa@o#f(=q-06dM1l8ZBDt&+AF9mauJAqlB z29lxJ;h0;wYj3XcUks(Rnv8Lt?6GuB+{4Ezcx}QQT(mNu;@A^AEv^7)SznI zzs%{N>7=k?Eiubf#7K}qliVg8*OXs9X8TmLu3gjb*}iGjA*(Z~<;rASg==QJP?-PO zkoCn8VVGuM4jYUieux*xxpygoB;)cBuH3s%9YIpKTa2@a9VUG^L`n!q5T~Dd7Peo} zR7FaNdf#+&$bNcT^LV#Ge(zE^QFuE}^j6uO?kh-6Sd>Yi^Q@J>?prn zz%P+1Bde&(ceE%Eei;0#>&i90*kR5l0xTyM-+{O^zpGOrb#jVI)R&%&B<`7@3n%RCY z1`Lj7qwMHT$PwnD9KH3y%+3Kxc>OQJ=w#f4LcwKcg9)7zmIJRx+Orqb-$p}Yxiu6g z$ZOtlF)Xg{5ngU3shMoj$OI0`zHdcmmtA;nc zOfPzWQ(rcfjf`(_(b(I#DWhGPi$iAD!*1{)2G*&`_EAyVeMSMq*AG16^O$s3oSb-zjDat+hb%`NxK(9cP;9Rd*`wvgIIMHaYJBf zjZR5^z}2+v%L}e0zxC<#*!qhS$%3&QhpHmZkE5uejwrtYtjOdgd)?%z5~ka#cz%Bfriy0Y2YI-=Eo5$Pe8YfmhrEa6RB5peXZ68m zKUlRpsV>1kbyj_=^G%S0OZE79^tPN>#<|BVe~M)`F)t;B)_1LJ;p=#mLIlLy8lGwF zJuH!ahBZRDjP9X6d7kV#6UP%E1-2|KNdnfJw#e*nR!k_lxoA8c-oapu;kA_pjf3BI zldS5*k(3p8;cS_%ad&76et#G75aG79l-}A~*9J4p4mde3U!RtFQ>?7S!Kq*EkhN}8 za#zzl;mv)u=%!6_xyX91kil`gmBmW5WKJPvG*$VHo0N>M1qylv{)BI+GnNDhXc=24 z+Gd7sqq5vCk-CgAU}8`;gb8#^X6HPI`g4cGgK&u@-A>}(dg#ZM?k^sSJj%)b^;aH= zdI#_u);_G!yKeATC0fXDlso+9m`VJ(ua1w8lvzn9rS}&POee%22jc1!)I$WScoEy- zA}_qQ9P(O4{ZI!foT_Vsmt&=**@=EmSVMYO_>CIPS^E5V$o^b}9KT`pW1rp=+4)Lm z$#wpbMqm#h^&Zh<8wLe0zjuo4s3iYVy^`lyyt$DBjx0yL&X@E*6B6~AoaXZwgu5HY zY(c2%{!tZSa|*OxrD$0%E&pTMU(J6uq6!;{h-fSM>6RZH{GgdWB4^4@A?!PmI{6J~ zBP|Sbn&lVl2@8mD@_gB8h#x0|vsSDZEdGwG z4pvMnra|LHvzeTJ;)(_>BYQq(jPH`A{rHpkYF=fU<>F*#>v$HEICUMHZID^oWsaF* zIj~#YQ{RP;KV;B;N?Qjk7WRjVKqkUQs;*LZ=AcPmy86n;FpYaJ&f}Tqkl<&q@=2b3 z`oXKDT2cq^Nx*$0K@qlm{olfuj}l9NDB}h)Gr}cSX!q-Y;P;8~rPQG^tB)v_O5!PZ zq8V)>hZ$B}Ev`Z*liAEfU}HQj+OQvq=iQ4`*Ik<#U-$bCy^PMcGrZ{L{w7mpvvB(( z`+0W>MMc!4*9|=M;pZ&z!m**z`|X(3ZY#bJ2JDv2P9THxFvs2@HkbR%Y1sHEe&p^$#+5@( z)P_+$EqSe&Az)b*sk*-0raL)byne&a%6VA3@;VKJ)aS7F7){bK_ST|oaOFMZQ-i{G z*BI>mw~!yWmbT&I_aX|(x;ZN$__vIp1Qoc%l{I|BvkF<6UM|&v(2MZxmjckHPOSJ- z?HQGmtlCSL!8Tk^SR{OUDxxB36$QslRK8nuOlp<0$pNlYl6Y_UHr1n?#1u~>CLT3; zL=C|xUk)tCyJ1Jqu>F3mQFX%(@iisPiDu!sL6t|4m)`u!&_h z3t3v+F9#N-D)wb_sg~Hl_SNaGUFuJbF7vyUt@GKtfte)KYGk&p!a+OMZ5wiF_&-f`JraLx+1N^3y zrR}PP`4&8_#PYT>2|XXtjpz(V}%&PGpzetmY6U|8<9&INyg@9x( zqiur%k(NjJG6|)L@;g$}RUbBX2k>cTuFc|m{%}v*f_htZVjISEK`gdEGylpFSDC7E zk|*CmukFKyNG?9jH7FelXA33HjmI7Juk;7ligk|gc3-$i>M}K$ahsj(QM*S@xnplf zB~@3U^EIS{H5ozUTE%M|57CuWbiUB));f*H0X(OM*?)^UT z$Jfi4Q;d0i4Pl8{9AGaL;JuFyZeCg(8kImbnCaojP~dj->jk|71Pv>7)}S<~Vk*#=Hn%HUVRmDr;+^L^EA}^Nni=;K1Whgh?naQoPg|MKeo|jk4sZ8_v=cP zzRC9=3z;rXNt6Am!dkFJzQ^`*!ObuTNp+h>mEW{fb^U-i->cKk4SrJfr2G2;Zs3lTn>1EXZX~`mjA=`Oo{c5Ujx4(R&$0o zkNy1Shhigad-oL-I{vDM0oyRJNlimpMHltj${pO82X#AH9Z9KGYW&;0^F@s!DmD7m z)=BWj6fOYlx;gf71G37Ehl(W7@cLW7iIRMRn3Or@nlv7m&UPKl>$ZS#+8Q$EPLrbA zUsrfMVzQLVzU(TbUBT9BtPM0^tJF|gdTylS`-9#HDvR(740nupY<4Pdli9#ziqtT} zyUca011{C)N-ERNaj05-yFyy4xrCDNC|xYpwQ`K(HQ9*!+-rRG1w(g<+p`+wI?iY) zFf06~4Upx%!bp!_ALaQpb!@hD)@J1RO=}-^laqPDTJ!N-fo^9LNNuhHb}r6RQTBX^ z*}-S+@n=S#c2eCa@Cy*TdNo{fO>)>cmme`BV)UG&ke(jgPB^0v*8i+Be$OIm3iB6y zXu3eKG=W7{%SIzAfphp1*ZHG{H^Ks1QiM)4$~8_O&u?0zJkgK{cXzt2QiVSoLOtk2 z+0n|I3;IqBNj-~>H<<+M;E0cU)+uYbRum}rOzvg(-9!Ho@t8ubFsimr;gw@%FeoL# zIUvq#G8wJ`7rrpw(=(AX2unI5u-cdjBcMSEApQm&wn0mxJp@8$$u7S_M4DWn~Zgz9oS)w z0BYsk$@8&Nl-(1Zyh2Ccm4!ngyQji10;B&KTqzU6$^K7856G1ONUePP&7shfs* zYIVR=_Zxa@R&FoJ92yvMhiQl;aTa{5lqZ!|snNVKTBknEBXo59Kzp`2J}9>LcCh%i zW(U>Dn)=yGN@=`8hxV^C&+WwHtO53n5P6vKHnx@*{w(^-?#3nJcdR7CLtTF(DijYZNp_L6fZUG2={a>o)YvUE)E#S@4f`1%O!8z zO-?DwyulrB6o@fjVh}4Yu@u22z;1PI-v>7;Sn)7jS0%aw#cO%^u?oB#Ca|4Q`z0J)kE4OLh1>`aweX3 zt9$B@JI{Z2w4*9?(jjWRofv>=w%-L^D_vHkz)L_9D|D!o#Wmx~{7kF@B)MjP6ycuJ zM&hPXSpl&R{_1o<7W;&=pWluX7KKt4tN?Eum$(|3d&pX4!$StFnsM|VHEmOEoLEH= z0Cmu{r~rIYx2JCavNR|x{$>|kDirrTD(ZvWqh@|*-;T;4ehc`B z)yl7@Nd0m<_4E!cozfyz*Pt(kXGimb6$ab78w=ePgjhztgMC3TyJc z(tnfX!tGB*8BHao0W$pa4`w@8gyMMQOlF3jC`Zex#>Ytxf8uNdKEmM_m#?>ilwV~m z{RI~9%H$gg-0$h1Sfe}rsGx7?$h^eg z=WNi2&~XDN?N;Pp_L0Tz&FuDB4+P}8Is<~pbQ!-(Xo4y~Eq!{Eg766+aFE&c$E}H7 zr{{Nlsa<*>CIvCO^X?vSP>{8Fxp3BQ7{z&X;8DVZEHBkZI8`gTRq-BD#MCDK*;4KZ zzEz`*11k+x?M2dSOJH|2x{w5GloYqfpMTk-(2;{pml%&L0A5_=vS|f)okG8bWX+BA zn9gh~*H%Hc$-PRIby#tA@sYH6@~^IHn-=-uE*WJJ)lMNn5^Wh9$J~R88cBxYQP%s% zNYac(m%-DvP{2O9oPFbE>$cB-d)A>xKPsy%Md&j4I^|(CV{adyIi%io*`GE*-e=qL ziFH|K=c1rr(ocTl3J9=q>x(o;0lt!L#fp^G=m>qJn_Pr*MFoD8`j(OZwSh~uMxj$K z^P%Gz5Oa&8q}Ir7xHqzMu=f=xou6I-nRvB}NOe>~LSfZJ02KTyeN^7tSFQ8H=#Dj| z%Alv0ZuveXhB;Q&WdQ0K;*fDgWA(C*BlSjGVy+rfRAG{#fW?`UY5ZIx7 zF2oVU`YDJeyAN|E@Cpc+tOTw$`tHoUOpgIGqC0c1^5;9`X&%D26#Xr~`t`*j z9+QYrteD#6+OD2k1~F8pzakG4+u|ew-d*|iIagd8FnTKJNLrt=Pm>U}+{yE3cw=Ht zwLn;Ff8A^91n2lN8yP^+))yyWc~ESEQyN64g6Cg+nqIOreq(xURgg$~hYg?&co(d= zz90hFG;6hhF3d?PE4|s(yRg_CaQn z?qUd)CEx}hyYu*_D^~Eyt#o_FFWBit=jm|{NWTg6=ZC3ZesD8jB(+PY9xU97<@hsq z)rwr;tzx{}GQb|&&%O}kA+4`W3m^#xXPknY(X$#B$v^C(;C$BYb67D|U2ry0++L^F zc{cB7!y})#0k2SEoaV-T`m1o4sWT=k;M!h91Him8KB8_6UdYO}|#hRors8 ztfa^eIZRG+FaW+9d&pV>Z`_x2xW&(G6I}^+cM#eM7UMTA(};gF%P)8QWOOG@>-|Yf zvLAABDGB{-?i@)o73Mj`FBE}?vkvNV7b>TgKb^KjbboRTqUIVm7N`nN{~+8_{7r21 zwBRdWFEA_&&b{>qWu);mv*r7bdAT2@cU`@alP~J0iln|?0_oJ+i1Zi-sPK79GOOVZ zCk`rp=J))lPG{=U>4o7z(bxPjLpOQ&trs5*kBaI1m>b7Cj7C%~(d_MAy6I=9_}hb3 z#B*m11^2Y)u%G?`S2Dy<-M-z`>F%ReK_@EZ5R{;=d8)Hc_)qbBb<8LX{f+EC-G>sA=NO31Y210{K2K8Kz5|WTB@zch5`bq5>3Qe$0;KVV{=`Ich zVa4sz-}cs?J1v$o;f282izHI!l%aSycPx#}6m%0TnsE8LCLmG-g?qahoQv*o(rXXN zYXhIAC`yT&b^d!nYe_}dm1*WUfYuhy=z-pjK6%_|>h)_{)cp9dNQk*me4KZ)nYMs>myGe4-segUc@m^+l56)&}T;wnMo}?ECnF zR(8HNK+5gxU2^1ORlCWXbPjBuIRXo@1wZY}a(@Vbqa}?rXZ5ik+9DTR5=?U9>Z>O3 z&TJfAi(Ij7SMrZ5P*G|g@6vzi;8%78K;~u)=yxr?{p@6*F<^f_%ETGPX=O#8?LN<@ z59qb)3CMEX1m%Bf$j-m+KAY_|qYeR7tYcI1r& zzp74lX9@kPQt&T1?G^OX)FlXH^)dl?gx~FClhW0a+pbR51oc(Po_N0f76^0>)XwxO zumwIj)|Dv*m1o^cRcB_>;^Oj|Fb$gAy2bDyOOkrJl=P%gWXkSrCZ7LCG8jfDZV&CU$mi80cGXO-hmel)+=zn&9J$7j@R5n9^CEwdMJ;ZRXlAYoz`%B7zR26oa z+UVw)C=I{fHig?u<7tAxLjBz20zLqsmJc`!=y7CIux7fiXHMa>HEE!{ajMjDgY8<8i%=egCZHDxmnJjtig=TW{+92aV$ub;xILM=4R- zI~=jSPUUTUrgdgIN>mmp^@L+2VF9H;D4bfd4Z8kl?W;x9TfI6p?$~hgCH~%#mV^a^ zZD^CgFxhIA0;a(H=nZdz9SIo(^gZW~b0C zXvsF%V}HJk)z{7jj{+<(i~KXs2S6OA=t-S}h`2h<(C4;)X64@wAgZ?MPsHIXzM$=M z3Ria3E6SqWu9pERjZ(RFA)BaSRs=MgH;FYySMr$IKJF}%tVS3ZR)+G% z(q<^)41DY2nY3>e374CJ^pXxq?SkeiM%ZYD0{IpR#01lZ5dreSuobH_){w~SvlOQP zlg~)Fodn6d$0loI`>w!OyLDjwSz#6OmyQN6pry)8R2d0F_wob)!+NYNseX7;=9L!Y znoO?QDM?(SiJ(2b*br<+uN)JXuZEj%j^|2{baiOil5D~GP5r>B`lMWIdFRHQAX#Z? z62)9&g1uv8hUG< z+l|)C`*Fiw<(8uoI4SWF#J-|DC#R}`Y(`Wbv|#=FVB6(gqEkLU<2S5Z{PSqcBEz$% zm~sA-qBYG6@b=HZ=6au|kBs%yLd&%B3HxQVTKa zaA9xlk@-6p;6Zm?iMyg=iL>t1doSu4Rm{Xxc`~!PfR~w7_wQr`=2~`Vg$Hj##b;6u zaSSnvSof#gl&5so5QlK#%!XInsxL7`TpIRJ3qEqovnn7`t`-aZz~i_3W(2W@dtU1l~t z$MW@#m;c60XFv3$O96LZqhWuP#ywhCYIjoo$^*ZjliOTH z+yME&3da{6C$P#2$GGp|UOzngu~xONdvF^2m%pkSj}iU9?mlIRc^kO;`?c}TK$4xE zL*Mz8gI71hXnJqRpX3=gcov)cZ1wjZzWG~$lC7#IbF233upMR`AGg5_Fp<=E!0}4H zhcPPpFldSTOvj*`uq?uORQ!0m#SOjBxwC2<5;lk*l+|=R*@|4$ zpQKt}4!==z?Vi2$jxt5DV^$FygBpzVaQ5y8bN|oc^+5cNo3O=l|xHe(Nz%<%b0b` zea&UB?+Y0qd@Oh})83 zXmqvc<`)9bF7jIQkDwn5T*kUiBZ4xhn8}S+nMT!u_c<$64L`*)H7A*BN7Wir=!UlX z_U0cew}^vvVZfqQ%wJ9R$%{fVuHxpO@>K*vOKgXaTC#_)5uMO6Mpuyitipy(&g=Py zT>)LaLDhEr^o^6cs+vz;rsGxf&__*a5SL+xvoo5y{b^(DGO;KJ+^TfYw;%RN$sb-Q zKw9C&EXpfw!>@T(1g#~t;d?&{nIbR>eyi2J(%4pPV}T}9FL6Jm8IktcF=t{-Xh&>= zm?DBMIu$-Yz5y`rpQ?&$bSqTqg(py=KVbE&5e3qCdnsIB^&U<`agKZ(wc`F`y z(5Yz^H{Wf5Nn+5F-s$b8S&u9dzCf+2dA4vdBR<$l)Q?ucuUdIIbUt%bmgzvS>ps1y zh$u`7YdBi|ToKw8bD6Ky*S>q>8X08CUFy4W+(O>y_XkGtISb2vtBL~J!wxdQX z5GT0J=^ZwIZNl+>)587&hG|u9Q=&1+sa_}7)^0jiqju#xn{MR-BGPMdECaNQFsrDj zsD;nzj_(}r>`+s0m0L_d9{1caQ_D+9+U*M5yA&|Ffk1cpug89pwnB5xWu@&_rv`2h zABrgK?R9N!PHW}YqSe^;euw>^G%U%5P#XIWpm9rGWzmNZoGfy_`ZAu&x&dYl!1^$G z2VHIdf*W{Ipi#$w@N{e>MNYa3xXkH?#CNzFvyWq+EGhV9JYzYQ3SkiD%o9|n*cXpS zjWeZc^#gVL!IR6>J(uY(&rR@zmOU-~5X4B^3elUaXG`Eq%$0qwY0q5Kemp3g7ao)% zZ-koC=MQy1pQ;&#nBd&28yVU}*)M4?CJ1jG+?Dk2RV2%eA}<$Ab>>K~rKoHyDXGmd z(qjE8U(MB+?kvdhKdWX!uM>s@Ay*WU*f3)vBk*EMR!!5ZUCbq44sl4U!XvN+bv@n_ zM;xhzKHVk|b>I^Hyk#r-@Rm_4gUig9WjJ#AM1N&nQye_LSI=6*gid~O^uD8k^+Mge z09UUR?UH+?Wt(7O$HnV$zMt)zwG1L>kH?DskQXgbA>B2Z_n*`7XsqQU7`H~AVQ6$} z)U%yM;_xhvg89i7kAtZR*eAfidK_-|r6s+=eB$uZ(}1Fo>-_4QRt9GdjvU%-UA-Es z=lT0#4xjtBat}s64ZBGq9G)QWsDr^LrHSe^8cmL}ZmAFH6;UJRS9W=6j00c~TO2D-#Gr3D|cexYSYq$uXgJX10$OI-k8~HeHrE9NJV-q`pG17Hm%q>U2NsQbHSRR{gP-tXtA-)g*P`2& z;BzS*Nq!*OG&fZGV!xlGX@KqMt4jH5kNN?N!hhhy<=p28GV`+_(Ftqc(Lk1ykuFY? zv$ttvVj<-4DlR2zGcjnRZ59a~#XAVcl0MX7L{47i+cZZw70}2qn2PikJn!b=wY0%% zDxcjs70q6oH|qKD3B|2s6q51dEY#8(UzZSk9qYl2z^ZZRvSE_Q zK{QTu12uqz~$QKB+X}^2+h6dEPZ6dSS50CN=&?~XK89?)mv|9A;$SwpMrgnZ|Q9s5` zDfITq)4XO#DYYhL(WU>&z9RCv@sIC8bAo;-nUVQ3nz`?V7QO~(0o;VHwn=Q)elYyH zr5_9fSK(KW^Sz6K=w_pL`k-e;w+H4g`DnC)Tg$6yk?<6OfL*eNF7amw(w4Wz$)r2} zxg3}IX!a^i0>2B6X#Vgv6!Iwb-g~5#Kn;4;usqhbnbl93!Rrpn>zfM%u}zy(wHTYy zh7-*+U(UVhf$=u^+GZoUksz61D#kz!gB?!947)vIiEhv>Z|+ZYfrLW#R3z}1&&Qco zX{^}{5MRFwB^3TfTIU6i?s8Wgud3$x>Rvetm?8a@|Lqwpw2gEok@IXqr>@If(eaJD zDf}*SN(liWz#bAd?`fjy*c4=*+1C;01t}(4l$hY$(`x=z?!=VmLh?v?9>H;2rnnFd zAyDg&pH%KM!n!;y8{%1h99^$=x9e73)HhBM7`WlsZ1gm}aNN$ftx?a(@m<;L^j|(b zk`5mOy-%o)I?JpU435^){1x9lT8s4`PipS{9Ltk(==lv)ONV#%PE24x!L|KAa)KOu^X-IjlewGq7D9(lOkOqI%hPTnenMjS*{$^MEEW5{e4S7I zi<>+iHKyyn4Qe^m&dfut@ATAn-N zGSS*XO}IW-QV4kHDU`Q+X@TBYTxH_ocZPcZ$HR1F&3D6DpOg@|$YtBdYvGJw{=;_! zV*yUv>P+orwYM7=_X!=ucg|3coJtX`6fBg(5NjRPoX7LfTI1YZFZ1B)$ z>bH~^ny&3U^K%ioXQ-kd3rR#40#SeYUFbT4LvVz3s|*PI+YIvRu`_FjPwt?nwz;s< zSHtCW4-<83ioDm$3$LU&*9;8tMUTt4dN+0;5uIoDtRv^d#%JZLp6WF+PE+#}=zDA6 zui2~2F~3Qo$?4jObNsLkNo6N9&hMn;l2TX$XI+|sU1+yQ%B=HIvoMX1Cx2GoPcy10 zLBDkOQ|h4^s~#IE^Rku2yBqc!gQLfsgHC!chnZ{aveqLRAy`Yz$Q&IUn(E`BxXKIy42@;GW}XKO0<7k62B;|KXE)quHNio z&ijo_#Fj}_C>)yNx@z*q-hJ$mp`+Nj<6U;n{zc2(P@W+O49Jne1l@6Vz%R16|&z;t5QA2VcWcYtrF+* zq)`8k>DoYX63gh&itk}rOW||@WDh}(s=%AU_`DoXmI}tix-olxRf88`qFN%Ct+rVp zqjafvyl;`vLL48hK824}8p0FR8Y`55=Zcf-%beE|leCCd&%3U#C~Z>oNR6e*PYIY! zooC1N06MXL#%q!zoM#ALXNe#)zl zkmtV5OA#b=I5;mAGgP9b@Sw-686WN;UF_JY?G+Nz3kWUPAUr4SYwH@UiFDLkm*;-K z3HVA16)& zbZM2>gFc+~qmCEzJ=4Xn;NIZSrVH=4_UQ3^Oj#QWevkWT?mAmU6g@{euegkS5gPy- z&GpNdPn>6k(=vXEZE%iCc}9c~_UAFzZM@~U$a9U4>FuhM?=bqHW!kc!Zfu zlEzEr>N4h3#diw*9s>$g>f&enok1gIDo$YGDd*-sTB1DQfR<8fIQ=uKUv4E}h0*apQMXf_A>)4AvnT#r zX#h+RCbn2*`q%pSm7UD9fAzbiT(=Y?a}UM% z`i1p~w%}weswoEa8X+*7fM*G44%|bc}{P15Xlbw&ZQIrlne>mY|esduM&ZVqX*r4W8cvbSF&ym zlRXhr$Xv|=>C~O7(4aOG)e34Bjg#@uBn-b+x8W~$h*~t&EQJ;G)|n;tvnCW`bTMd` z?zzw|4pH49&!#boCOL;l8EIhi+->TO;7p3cFg*K4#xa;=M!xMzsaMqRUfO}4?4)6s?Ka-X*A0eb=`*$JR4BBmu|@&((`tZfO~e;7w+#mV8s&Sp<|g2!-90veRq zIycI>9K^b1OdUaSz^^AZsPyfBxu#5BlZf`f(#4M#Dr$I*mbNb|9T{L$0U4mI?aSwh zDR)ihiZvl&K!K!&DZoTD0NfTfmScCpS>`DQ2Vi|8iLyhB21Wd#jGH(Kd;g}D@o~ef z-&2Xm>?j`dg{^e48tX!Tz!1T2#*7L<7j_U(&!kk*{)9wBcwjf& zX8bO01hE~=f3kWmk>R$o6RfBbAk>#H%BC&?fwFa6TaeJ#tt{aF*B@!JFOtJz1E^>x z*1!sqGC^+0Yi&&)C1Uj$`PdV?wY%pg__8`*9))(rmb7=5^~a@j@|Ka`%4RVUlcY2Y zG@1)NcXQvzr*!g{E&NJ{EZj8}>i0hu0$X1i=BvI2#LAQ|1vk^cG0$kX$=#;oBElAQ ztQ06Mu4;}$1>3O3K6~S-_Z@2WI{UY43Z*mWyCflRH4j^|8b)r?S^;j%nZO6=9lT=z zi9*0zMl8)_w5*k%G!9Rr0(`e#EocHs6aa|zD0^LW+V)%EI8x$cr;y{eDD#K90s~(+zi!9sFo?`XUKw`k z$m_jSLXXJ~Zd{)OSiNwChT7SRUb%V$%sjPKB^&R{7k0b#;S+up?de*8akZg8LB3$) zOzS926-d_^V=)Ga57XReo1|84mN3O}MpqUg!y0f5AvH!*xwNsEt;{baT&0t2p!X}Z zOUCw%saTGHK)E9b!N^o&vh}NIZtOTi|hh5ixCLFWn;9|KM+M8aq;LccW zL^3KTxYe0{8aDMemU60Hdkld>_>$V@j@b6o&Ar!}&2QgUy{X_i_K!Uirm^DCL#1#S zbi71p!jNI!lm2un$n_;|S&jvUT3<|GUQalnZ6TPHmG-*8up(OWWI9;&gIhGKL9E_0 z#?SYzvmUcfvIq<$p5!(lIv<_AuIXl+>%OMJnDd*VthTbW0m^V)Aho?}a@7+uF>8I! zAML#&Vq}&<^?kY%sxxa{ZA#&{A~ZP@!+Pbqk6W??tZcAAM1`(mZI2pTzQ)-vw1!EY z-r%Mi>M1U1KYp=y-Ff022feBLKB7dJyA+h55#x3wwyXStBFhz&^mGI?1ASKEF zlxlJ)II;ms|C4-^DF~T)8zy2jvG(06uS~76rkHqWprY7VkVRq?eLBf>eRE$HtVM>E zI^EF0ti`X>R!|#$==RG(xEVu^Vw?31eHFKUh_oP)c%~hD-Y-n8_O)`5Pb`tKU;A?) z6a?tZcE0w7rtHl-+z9?LF9-}x;^Zp|KXhTO=Kqeaeo?@`Y{-66ui9`!oCY!$5Mo-P zLxH)AF`_R+fDN=%Pt~CT?g2$y9E2Cngp@R8KU)NjFWC>$$$#Nvt``d)8XP%>%^$Q` z21b{mN_eh{Ylv~F>LG9|d)MP@+?ZJ(pXBpy3Q^)*6;)M*z^L!k?*#bH)R3uXK-*=3 z`$b=Ct`r&itY=mSPM@ntmduz(^9SrwvGu)(RuC%GI>6G6d8P4Z<-v6F(RkJDpU>}A z&=+{>GZy!)FOBi z4wQnqL7O8SGz;F>otx-1ks&hb@T|neh#XG%A7t(J7LuHbVkqEn5SIBna}K!R1V$PX zn=d%w6xwpFWXn9mQJ}`Nkm6_*?CSxm9;Rvm@R^h(qE<8TafB^!qQKz!O>}iYX-^$3 zN$Jn8R%IkiVO+}7grcEXpj96Zi%|>1(tl&6)EtMQ<#Hp#AG{r74?A9voY0Wn0cGj6 zVwFp1z02kG;3oWgTX@~KCnRwk2?<|)&w)S;+1t(@g1Pidha-+ZmH4*s0z(y@K z_omNdiTop|fWB+XRhyZs8JAXOEhterg}q?gZ97qG8@GAyLouuEO-$tf!`@qlRrzi2 z!YCqwAV^4qNVjx@(jlFaQqtY6lr*yF7LYFK4wXh}SakQIJJ&jsy?^_h^WUG}Pw#cU zxP%K9&zjGC#<<6Q-($?L3r$L4T0D#n(_E5v@2LSrXXZwcxXiH*mT)Lps_!dKh0WH* z^8R+HXtfm3-<+UYMJxME8Om?9x~PVFn|x*~*HX*m%I5_NXUUnfnar77x^^FITKgW# znz<2Z=DqeYnDE^ezhfoww^I-q=1yi5ZD}dJiiY0>I`OJ+Rx}rJ6c17_&SWpGd@L}Y zz09u?69x}1qsO*-pGJ#;goCVen^l@Woce0>#p7A8@H;EXiefN&;QXG!7oyrxcZA~0 zl`k%Our}8R?ukpLCx(=g`8%@z^-r(cpE3IiUew!#kowZ!WSlh@|^A0ebFcC z9Ux>9!q9vXy5`mgc+U_hRS8x0c~;x&r3OXm-6N>_)lX|s;1ynv)iZgo1%ZMQR31Q9 zH|6{JbIPOwkD0{(NWrrkBd)npD#8DU-nQ*c`iDHTJ`LOi02BMT0AA0()8Ga`tnu#0GDLPs9Ny9NNBtoN1J~w}f3-ey`jShEjw4Ps zFFCEz%lGD;=#1qKgkByr(9$)~o$0ES6^tjg9!FX!Pte(^c%6_>7exXPa?H{wpjFOR z$U{A#x;v6^pC{)qCyL>J_5i`6$kg~rDT9f(SMmGWK&r&ff4l%h8n;4%ad$k)UUl@$ z6N7l0sBg2~v(*{%C=hE#zAG`J`PLO}I{wF%F)+~sgh89tP)(8AS&Tmd3-UczI%bEr z{m#~J8camGui&q5%|%PDPBykl5a<496BWJ+U=Eq88CP-hL5sXUJeVzgYtvhkGk|tSV)tRMF_50sNXb&$x){Rpl1m<468U_WWb~pmA5S%y& z0e8ojn(5-!^Uj|Pu_FK3kjem%=%*bRj!FH5hDZl$zV z@s0_v;Dm5_R>hP(I>r7u-T9VW;};FEEi}6HwF=h-+lgwHYY|q#4^g9m%-wVkWO;uV zWxgEH1VlbyiS(y5|8RvPgubdJyT05eL&f*r#SgB?Wa7m6qh;5Z5n8m@Gjxu=MQE24 z?l+o0(o7s{HlUcFAh=L|Iv6NdzMy(+WZt7@Pw(B(WqHR{SE*H7xchl^$Hz>(g7IBo zmtx+87XlaEfL#qR2O#*l1R&4Pig@T{RM;@jly3zX5w4Rxz0;T=+G=3ReKlmsAH3Rn zGh^jS4VWy4jw@$CND7a?0`k+9xe`4Sy=j*~f{(W}{PJMn$@Q^lbIx+k$!Y51Dx*i) z-SQ@034Oj-&Tgo8478s`4jSWC_H|lVGL!^ zA9Oyy`Wn7gQ~R!Lw*21l(6pIl4TL)H){74@Fx~Pp@jh<-_MTG)zie{bclxdgj6x7^ zPVaP*E@~~?Sa-cRQ(}<9@^`a;1rT;k71e;lJc3@;>y-lxPG_iOKHlgg-sffkZs7QF z#v(n4f{i34z(!C`lfO1oCTB1DZE0nr93Ovi-|_$?V$Ey?~g#%z3-M+AQ&FM~wqURM!5*xH0aYq9A4qI@}1*2qD zT||Jm^~L|xFqPN6oO;_sJ_4L>k#8ZX9!IADF(L%swCmm;xHglaXWoZt3SR`OPQ!<{ zaPHYUGnc!EuDet0WCA|gocT&nFmLOA5@-78CC2aJ3&csYj@x>|;8ZjPR4|Q~i4dc> zvGKiKl6*zWbup`MgEEB6vfCw3wJ6}s&~H6qroR1$= z4I%fsY)3U?{zy#^{4d~oyKt&zRs*XRoIIr_N{*=p7vlxV{cB6@S4kdZ&2i%cB6VHI z7$w0SBS}7Fk%}o(h{=R}M^EE<3Z;MFo&Q@7%tq^64j+T}WN7P(or8DSjABlb4}sCD zw63AFd{cijphVymCmx{k`>kRIc7)t#yN6f8L)MEUV2W^|m|Tm;H4e3wLg z_s6nES`WOltgNim)%G6wJ2j>o=v0a!E{6<91k;`(=$JDUVSyA^$iBy`S;IH`ZMq6k zQ5+cJM}vxY`+an0N``mlcYB72+K=zDSeuo$O45&}>&jyMuhp){hI|z%S}sH;#>cmg zB_pV1y)X90ME%yY#uv!P^1uz3u(ocSQ64&@Q)B272w$vuMkZ2vzmb-!8H;KA?g zKbchhyZo<)3cbLc(Q=wUe?Vb36Qa zLFbqJSSzjrfa=ohEiw7)Le{IHFLCRUpeUCJ!U`dBTk))y}voUJ^JyNBFiC8}C ziNMFk1ssx0s0px0a3U?py~n{)tS^MCUup_bG8rs5nt049t}}~+P$n{msR2>fycvve zY+v5Z$r;98a%&u1cH>M=k32Xb7 z@{0xU1Iw8ElZ97;(9lr=?|F5%{TbI8*gx6y(^Hip#?1n&MYwO%c?ijP3ZEzz)zIUE zDJe-&mker#R$$HYyD0`Tlah$6AVFC>5|X*XG=A`4ZtvfSwJbrEX>k?-_Runt&vx_p z!S}@K4V$6B`g$|dyic4g*DVl5tQfYGfMO5#**!1_h)4sHLE(c1mG|emZe?aiLFnml+tFL2)mJ zH6xO5PiXrz2oh`xfQ%%A)$$q%sesaB-KHQRj=F@iXsSXpUF9j;l1)EI|7Sl7@H~ga z8oxjpUC!p>aBX#q>fPzjXQ73ip<`k&cD&0iX^|W@-y=2}S^L(zI&%27lIzx?k>soA z`d)oBUI+T_eS2=!dujGN(H9FW166}3q5tW5LqgJf;u9y`|Kut`c*^N5iX-6M%`}5d zyW)UOMJ*U7yeR&wIT`;9;0{-HM!CFOKThAdCIC&CGi#x%9G`SJ{ufX-X&N zIi8qG*3}x_zwR1&Ou^PEuV&dO=wjg%@H*Y%|7WP*zZa?_7?_0lpP=jG-J2$(2JDA{ z`h*uHg&*U-wUjOHwSTpFc3rGd#bEOIpOw9T33(kLw*EhdV||L4>w1C5F*KX_e?AuY z$#l;D8kR))Ut_3VKl-m(SRqLNa~4(y_J7U7B7FG2O<4cFB=P^6h4tad|GYFLj0gYk zBL2Np|G!y@C6PsBdac(>qKo4H{$&6Bdu+VvjZ_dC{y)a4bznP;sN?OtqaM2WzX#AE zeTsO2|9?-NL;CdpcIQ9q`2SYoKilg6la-hQyAo*-C(AHgQ$9O%4NK0ho_f_MX6K=q z{B&vjZu|;+QJJJ14XQh?`2GnW>J8q1{yGwpgIwhGa@0BhVzKZcEhtTBRUzMH6wcn0 zVjr@uoXDU3&g)M-5r#zQ!W_4I;hb3Yho0$N+W)-6(!({U#?#N<2NUZ_EUGm*#vNDH zjiq(=i`fSv4(;drv+mEN?kChO*@TkW$5J;Ui^!TKM!X(0R6z?6>u8pB&EWEhT$oR= z8l=&kX_vR+_wtH3@x*fs`QPtxSq>AAPSvjUL#!{iF`zzAkzJmfMYE@UX572p#lHE}hQ@`oO_}ghhs}IA&Ot)?~I*8+oj%m`A-^htN z#P)qv9MSZ)T5}>`*8coBAul!6apTbE8+tFakX|_pNcQQXU$*Yf8X*Iog00ZB!QLIA zMvA}R49imsOV^h45B`RK1AnKF>n3AJ12>iky?0AMbTD||I~!Dj;YlMbIh*E_t_Z^2 z)xQ{*rk6s&uz?LzS87E|edKLHw@p6ztlFEq;GK7VSU-a!z73;%%WgBk#Ke><7@Mhb zEh%-fi>9AFgBp~mivzzr%b4yjhCRtkSHPtD zZj*n@$mc_jEI8qd{;y}z;XxXgC4_qWFYn?wv<-e%l?2<`8ivBJN>YU^kEe-sG64rI zruCP>M;XlDx1BDzjI*bQ&iH#!drWiDQJcy|`~Xf#CUjB?xHQ5stGr z6u&}mH_ry{4)px>==yu3j+{LMoY!7Uqq9hr-O*#jzQp{TLak@DA^}589XJ&GxW0#)G{<245b!B?;?|@Zj{Hp))`@Mqa8y(-+OMVr@$890sCl5sL3pZre z)nfFLYfg8*f!ihb{#}vMLr|Wi2~};~0$bbMGA>Y3^Eye=2GCKZ4q9~pT@3kt$yqXS zb$ng55aYh`L<0z}!0)~sUsCo6csw2Y{sbU}OuWznbgx{dxi63p84;JXjf}qm4em9` zR0=%Bj4ty&jU?eNW|cNTLd%WrF=Tn-aq6Af-^f!?zpu90kJ(RVP2xcMGq3ty3ze0# zpRE99REFeDJyLs!sVi;5wBMTywhFED!?0Tz@VM*@&GRqu+yFUAztXURZ+%@+((C5I zbOyuwqo0_K7$JwXCu`Q^biib{YIt+?>EwnsM!oAMQ5FK2D>0z4Kfd#LsxPbs_l!d~ z7y<tK{lMlT7T$8UPBqnx+oq_v}aq3X6&-%XFzjo=Tr|CU= zw?)EnU`}2#UEJWJq@KRNvykq?Bn7R@rYi``{c8R>N3K#O0)Y+vPX;yc9vx#;OoScW z)h!-|09Dj{&VElB*qKi%W+Cx1vUK5Wbh3?!$-CuuCJpoVevRc%z$CVo#;#ep*pdTS zwZJ1c)C~XgAkZ0i-y`FC`hGUQgfXW-W`Uk_D+x5mwOZCYl{u!werf?lj)q$HmatY4 zXewZ=b=0ab`)g6?FrAoeGmzNK%6Oo@c~X8G2%ETWU1S8aGt^Of$?f_OHkYj&;tv2H zjaQgLi`Yf8@;ziQ!y*@Dn(gjzV%byFAQ+1;;ZQYj$dw*`?Oxgnhfs1Z z#erZlug>JIR_0UPU2^t$@yzfjuSpDS(<*0vBG#na>h2^mJP-lnxeX0t(+K)R-E)AU zJl{nPh-Gg$UHnXq zw5G0J2$ba_Q~>k`^z+)*fE*!klogYJVRx`TJ(@HBu*TD%?dbTb>@HrD{8*tBTx!0+f zUVqRkWT0*IieMctpzd>>1?ml5^(*S3t;axt+INTVAKH}X>8G>?XB`ny*h5M^a-imB zArCoP%tepC3O;u(w-t#2-k?nO-)lfu1!_KM1$$~nHbxM~c_sXa05w2tb9%3SArT8r zcC_`PCF|SpOU|Y?79+yDq+O;jz>!~^P$2_J-TeEvU8FSoEt~K~%lY17ff-a^%gGZQ zN5+PjUxW?L+KXPL4*7o!ET$;uXeM2WBphs8Xl_MJUkWL{P5BRs(7zvheLWIGF*lW8_gWSbkdNHx8}e4Fv@FE3L4kIH$TRnTbVQZ{C=47 zw!JhuNaw)6MXQ$X_ofCA&F__^<@F>yp>I!FQns0AQ-Cvwf~gP;)rl%T#-4|PhsuWx&>Yl^gwIvU02A+FR8sL7ya&~PmOf_v5#4?E)L0MJ{Zqaa zlJSl}U9@jkw73p6Ye(3>qX6`x07GkHbDP}HE>1juH-)~lo6UD$scFEJ7a(VWW)L8O zvXr1CdwbZvKgg#07kjSUb6}ta3|Ci{fd4F7DQ8*(LhJGcvrBQ?sYR@5$SqLsl1lQ$ z+O|#BfN-19Pw)M`*3`TECtlk=P9InNw6_E>^lJ>~`~~X)v~ET%TlLQBm;pqhs zTrc$YO^!ww6Mmy_*w|nhi-8O2f@2g1lUP4FfA-u658y##{Wm;Z%Xh0=ogKjFL^_`_ zGbas6yhgKF;G7j;nQ}_hX@d_0Tp^#(G2LbcL)2Zam6H}cfjvtPSZClHj(3lPF)E}N zWEJb9)|y@o`95Cui2Htd0>kt7(}yntcW56fIInzQ-_<7>1RFJJCXX&=5O#7XT7cQv zcefP9e(1~p*`(eFPW^Lx)6H6d1{!auG~xDN5GvDYy%vhW=!zr})WpZfpJ}!?tbi6M zW-tPtesXe@=BPWGC>L?r&C6|8r6$FfHn3iTo57Q1SS-{UFQh1L7Ug2m)F_w}YlN{*u|l$Wq|chCfU3Sj`C7cH<}m9?JV>n#{_m)_l++gx}=n2VeZy zdo`Nt{}a!%0AF)V)_!3Y_V(rthj&aNP`vP4FRTDo0$rHEBmPo!9$1C}9mUXmPzW}C zg1LHNK$21taO(iKTnS4#czeZ526OyUQDBa3lpbenw2DwAalgmcx6X9^`XmYO)TVRG zXZ{t`8&~NNJbOfAOOd{J(K&l-zzG%a zVHPN+H5f~T*>~75V1?$I52#!~iuDSY_D_rchEXTIKdlCU4_}*4A=5F+N#haCSp39H z_USn?ki~LK&wqXC9l0rw&FEu1k4VC6yW+T_jR6ci{rObMJ@0i7QCKY#iO}g=ZQG68 z4O9->kb%QM(6Y17WcoFpHlGGCTdfzDf3=YZqJ3BbNxXJ#N#{-9fgxbTZm!fDw2q6$jdlCLjax^C_xcn{R>hmA_qY zE7cQN1bYQWvZw5??OlPbEpsl4yGqA6T=+b^s%K`sIBa8f7qb)JHGpKAV+L6kk|4tX z-z5gPr5|LPp{7Hm(}|!VykFG2ML_ORFh;u;{z0oM1awx@|Ygx0{ZgtI$=*i6@4t zGQH0ojT5(epH)N&P~pwoU29(dR&*^#^elKj?sg=byiQA*&nVMo_F{V^_>)z&6h|`b z6^)#FZfbKLUv!*yrJBJmA8TdS9^a5BgWIi5PbJH=Q|yFf*iJ_4h2mEvnNM3C=R7BV z7(Y6k+(({#&GBg$)!zLx-{`zKI5*vDKKS5?9e?^OoQF>+N~t*9b0|MD9!6R;k6gcK zqVUg{Yi}ay8;9+l?!#+fI-7*Hgd#qP9`Xb`k&NT~mO)~#_wO)YIyIpka2~|n4YP!t z=qjKs2fF@d^)J%iR20j2kLifH7*f{R99QwP&bq*;4?83O>`@4Tb3VyxkZ+gGI0Jq! ztDp{_*r^LHy#5^9{yO0#S8O?}FthoNKyPBsTl6zA=K0F|M!@2+45Un(M&fCto4saR;>hN}=s6szOaur~3{DeVRRt8V^`)BtqB}?6520;GVTOk zyEzZkA#b2;w#Za>k(E;)Y3KNdokUKm9F2#0+GdDK6~K^+H!rcDJo@*Gh(t18a8(tD zspl5z6Ymz`np(`g9CjNnGT~H#6pU|Q#-#IQd7dUlbc!S8-`eylWjuijsG8`87%#2G zmD4DR^gm-t+%f)c@ZhucylRcZqcXZr#_YLkjgF z9@!rCSbqt)UPbpGvnQ>uRu?_0FCgHPjGiPB%bv!?L`Bw@?&I#4Qq1_mg?ox5_ttHu zPX3FjD&eJdemTq|%a@|hh{maf(l+Hg-Hk%uo$OB3ud%?C`IG?NXSj1de3U{B=@!1O zP;QwM&T@fPbm;s5xGlouyw?fSK@eDXVpf#vf~i-g$AAUmLGr-K+r-L>^awL2A}{7> z2#gjsXy%c%7zwNE>J;?)`iFLWI|2M>RIyE`I3iZ#=}%kfULAk3ozvp)>)}?i4c7XR zu5MA3mZ&C9sEuFs%Oul!UWKUrp4z&Ssxv zx#Kqjx6Q3)VwIF0hhH!**!6jX#A+ul4W?r?(_f~<$DjO(m%_uXF0rh)WM$V2{Y5vb zqzTJ@vTTB>Z9efKMK6&WFWlV&%}!9Pr7Z36DCDgPiFBaz*+ZL%{9F_d|b_rznL%b)Sw*x zLKtebTTPv9$}gpUuBu$1xzuFKjwGzqng(Ks$?YF5p6?MN;2yHa-lf#i+o4uI&9M0S zI$sP6gbZd}`K{}$s7{?R!P&@->lZWLI5)>BGMZ0!I#qx5jK;|OmW#wTZPffq`bnth zPr_2APjj=Z>)oYHXp0+Vl%XFe(29c~X~umeB^>yK(WJHc?$U5J7*=kUEPwJkVdJ@A zlFtFp3_D8=jBwh&>V>>3du9IlxD1aZEi4oE8h;&I#D%s@rq^wcE8Y49@y!biT7A05HIz}mIG8@| z+&eHpg@^9A(uro^<4FakW&G71{8(M-HSt%k-iD}4QqrQS8-!)glf8P+y(nlH)^XRj zs+<7t{iX(uyU*HgH4P5xH(OZQZT!4B*vvv))IYEQ-CQSzw-3{J>^FKuZ7=l7F#7FukE@3c>#YWfOv!{uRpQ@d}*=Rf?p5G8f zsl_)U(ckIE@6MBc7n=)|qDaP9=qhb~7Ot_KkiL=wr?T;ld{Gs{HDQhf+fF=LOJjYmI0WB7qz7nNNqspNrj~ zx|_VdXe#(-*(nH_r!p?n*PeSe{vMY@VCuW`%SOFqrU<0aOnW6uXEl{)@7>u@C21S> zp1^r8s8=#g>jO&#lZ?t4U%}e&U2YGj*L=rZsH+29rSLNlXQW=#;hSvxZyW_3=PTng z3l?d7wlJbeHjLZtUL?wzF^FZii4@{}G|Aw8;Od1x(ybYghV{I8IP80`jG}HoJ2F*x zSLkcVp~#8fD0}=n^yq|>A1s;Cu;@IOTWB@Ix=ES7ly@&jV&6KS7TX&b8n%bM=twoe z@G5cDSgI6>}w8eJC z=oZYc$rR&Np72t~K|)dFd1EsQ7xkzfGJ^}=5*WEolmKU>HKrfNRx_A!8NPOm>c4|| z$Nr&h8EVU7H0^z<3{kJHoJ#W)DYrLN2<}@6wzxydIZH7~W<>#U{XVLGp>jd&)Z!IH zdnh3Z<49H|SF)tq)mRgM{@qbnGxF`CPM7v5sFpW?eR3utR4<&=`b`G^Plo_GIy_^a z8xlgOJ2e`io(y+lGSgGXd1o>ioCN|N^GM_4))ulw$<0FB1yjcnbDG-DW?z>( zACncG?`w^H@Jq%uX4Jvjh^_1O0fu!cZ{G;_Q*2wCF1^GU0c$axY~`#U1Tr||Q9;?) zvlfnXd{{JePlXBdVOkY5`}oumXi(b-$A!6r^yGb!5A?sj3@)|!I*K*$Dbu?!nCO6& zYm1t7m~VRoek_cqjus7v3}7L~e#(V~IEQSKP{>|qWB*kB@cycY;f{MChZg>F8zQ9B z)9J|1aL4z_C*SRN@46Z#NOZTa=5=L{KIi9<&QY|Y)z%T8S@>Ri%l&Mi3KG+LqM^~a zS~vT^<9NFutY=l|Xk6`f!qAWW%lx2ieffG=LFONAc=RmvXlN16UvAT3NdzS}&Z|ww}XJhY;!4A!`vW)UrPCAw&S1 z$nldZW;&K;*T2O7dfpco?^xSCc1OOOfv|WV_#~0eDfl|l?AsIE{6#Jb{QCo}%Z;vU ziez)LZuZ{~fk{S=iWwr3Dn`!{hk0yyov!o#2dzREzfNxdE+T|S3LPC=o#zGMx7GfM zH4FE@`;+^Q;3l^xy80+#{Ik=`rxowNY7SSs^x-73zK0ycSxTS|13TPEw=0#>SKak( zlD^`|sri-eiz4vb*rBoUIiW2c=^$5+X{eV_cvoCRZk3m|7^SW(gOwud=k9Tm0~ZN_ z8MNlAP_H=qNz-Z~*~XfINE;ryJ2Ed{`O!so^B+7E8%Ib#Ht?03&J|6ogDsSJKZjJy zeB`YAWqeG)((|7GvolGSG&GWJH)ZBh{O6Myh5v&YL2z8MTKjynzZwxE#IfRpYi)Ho z9pnF}f1>2bOL~72xm&_(Y5tDSE;#}=nCD?QWh_)%4wJ&`8Px#^f8?RjL;Hi~!XKG< zVR^_nZ@3aq;TB)jpIX`CM=ziWfOO93m%rm2?tfNU5Ts2elcd{!ZLg3SH`3vbqM4mn{d>8>2#{)z+cu0x<&B#KJG=d@f6u zjpLpvh%50f(#x98*J6OT*wxb={eI~X`wsmaW{!+K`;D964?{sr5aqnMLJ$dL3@|>;KMy2nL8-GiFdLU>Iq%oxk9g7O z@0>;XHCdDhF?)xl0Q*EOFQJ$r|4v2w=6k@-W0BN9hw~^R6tr!{jt~ zuObNm@jh&Jk}-t7@A}-R6G-r6f2qd@nyl;L)yH`x#dPGKp5Q_zAfYD2geZg}E{|td zh_ub2-|^8OFhDVVA3^C@@ZMJHD9;5p44w{#^(FPCbPF^;?ol`y$z=!iA(h4(v~QN( zu6OxYg=+mrK9hVyR6WEYdvct3kO^ang$GA%I1o1$}&D3BxJ}w z407DFNB+TbQV|1hSy>^xlSY@`!>^E9ul%l>F*me&@!J zZ*&WjQ3n$lre*Eq&SsS1Jqe=(tn2@RkGZk^0dQkjF}7k9_^>764Mh_?_$K*r?4wdk;IYzAjmDN zLr*2t)eZB#J4*qqQtK@=s<6L{bJ)a@s*Nj(eptZ#6+K5PTQW7y!_Z92ZbbLKfg`M! zXh-Bxhn{U{K;Uc)ZCFqTcG;D|oRtJqbR|jJhs!6~!}!L3|CaRibL>)P`CKy~4Q2@T z0E_7RDi8LH@^-phWs7YH&F#%adkph{i<|3FgfzwaWf-ohS!2V^V6%3O17-cZ7gJOD zNs{4ZiA3Y=tq=K4R#se6k~A~8}gQ+Qm7V??hBOP~v>YZj+; zS#U1@lVCQaAHJK<{O&I80Yn3bS;l`6J+rhj|FcA5c*i&|JTG)-(~e`XqxQ<+^xF73 zQNKlT5s`qO;IqeMn7#jp$nT;Pmy4TQMP0oU`C`5&Xvb>5!I#V&2D^g#BixY;<{F-B zXv9*7p&m3-r2Xw)xVxEZ?Qt*;>si^I$q*TGd|9xgcrrS`X0lUjrQhVi{_IO2I7E1K zdO}pWOt11`Twmu+8t?NbkHFl43tpmt0);eQ=YghKe$O4e%F5_S4$K3*XZ7{j*2I%7 z7=}7*Vt=_OpVsHiWaa1jLV0G~ZAm7Zw1fj|uU^NXzJWtvU;n<)sc(~p{)AI}z)Q;* zov1frVx{r!E)DV?{?ZgBJ#6f zb9dlpU%SUC5=g#}>Ph81m0~2q+)qC+_JcBaG@c{W{c6 zA`CTI^6**N%MWB;9&5%7o2kJeuS?feiDD`F-&?eO=>PtT(01nJ)Vsm1 z^~JPZSDOv(xf$n(`14lssRM5a&6&Hb@aqm=2?$0~ z$Z~jzmsXrUk7+$}nIONHbWG1tYm@U~%#)y(vtheGM$c~QArfMN&u3gQW&;>N@JS5I zlZd8k-b*V9kDMZVS#zSja;I%wfg}!5o_n@JX7DbU9Mr)q*kX0M>{|FFBb-%1yIkbg zk+pf~iOl%HcRhNLuVuxQq)$T7_JyRD{t6SJ2>A|j9VyzYGV5-AAgk-*{PB)avQGEQ zJo#@Lw{lFH*)TJ!Mn~2>{zH%<1fqoDGA?frpo_R+#(mJ@k2w_F|WMUN(B z(TiLA1Db}j!v;Gnj0dIy1r5DN-9bz#jX5tR0m_2bAO7UzgEC8SFcgk4s$K^P41|(B zr4Zm;akS+FL|3xh2~MRp@{MsogCmw{v)c@fZGln^&Ga>jvfPF&IVz!VsbteEkZCXqJtTHZBav{FU&Zs1QAf-`Qn_Cw$vHnalB2mgkm{-)USH zHpXLqk1cFeEFwcvXjv;Jh)CWC_A57_wMM#T{$z9Lq;Uvgwt~15jN-XzX7guov?I1&i=z*pWVGnQ|3>fhQBI9Ul1F53tYuHx z$W%G5+OTokeK+}x6gvoqGxl+uk2?L?w;6W%m9h6IZ4k4n8Rs0r!JJ8YsvX(U_&8@_ zoTT$zaysiSjal!Drz-YXpS!PBOdYT$H-1wnOtd_7QOLbH{QUi5^(PWb+G5^mqHAHJ zXV?Xs-RfuUr|6X%_&K?_R+hALli^)^Z#6Zx@coU*TnJ3?BYZJy?&FOpD zzBLqXLF(8Tx*rvf!y>b#jV+ex!>xE|PsudjUG3M{(U=5(*SYpbAwG2e3R&;qs14AT zr#m`7orRh>uIO(|zVof*7?o5!MebXZ%Kk#tP2I#y$>22O+L7EFL2COZLnU}Mgui1e zM*~0~V_iOcVVv9>UivKU$a-wPO{pvVHST6L@l~A|YwP0@e?Y+1Zbj<;Rd844#dJjw_EuZCQo%RWF!-YYotRMy%XlFS18W8p^y_Jq=eXbEeB4ESJSGk2Le= zOjwJ(J1pByqs8gE*ijT~j>cLDNeZ>ma`d;suNsqb7+79|b4HssiR_FJ9U1L?oa7}L zD&nA>9c@+kcS%$Dd=2B~ewV?)e*{m};5Dfw=5=3$Z~7}33})R$qLuSIMGzNJbQB$ju@qEA~>=Bo8&JE z?HG0GPOb6YkvHPrg+){`qwOnI|w{fP>L0a>3pTYL?SMX}r__>xBan%Ug@281^ zNTDvS4(EM~NFR>YR9l?5Uno^!8aA{hoK)Dzgr;1-o+gc7bgZD%-WG>iE;c4a`)+e4 zp+f2%&@xk;Z`!{;JW~F;!D~qA(B}9RvKmMp^{RyNqdQOR;2NDdh)C&Prv3rcdf~eMh4+_Zd7<9NemI&)`_AO|vk59jIfXm}*y>c3j%CS*l zXj=YAx}G2l974MMh#C1#pH`j(@l&k-Tm1m>>$8aJ+ivYAe5Pm@becfYp`MwNyRcu} zb$5!TDXpdh(cx<;s^*HfB?*v@*nHD0x4cf*sS61DjDM*w{Srk}*Gx=8CT>Y%+0ZM4P9dXkz5-2S}PJg6d0Qh1lA$A5q+Xf2lup%xj z7VP{R-U?hnD31k^Fey#V&7?5S-hAPPj^vXNyE_gL^Im_2%cM$-cIFH)tnH5`Wavu*?mFCM1Yx& znQ=x$SpC^cL7U!bMWjEtau`X;`aM6`QZlifPFZ5yJ;s{GB?h@h?xsra>}7DO2BOWx z*g;Lb3TVyoZ4DPuxR>g?CZml?3mY=PYYbE6DS$3MYhBTcjcf-y$TAJL=n zoq=?KE$scEuk=F^gQVLunhk%DuVvZMtS7Nnbmf~q=T&%b6e!$)Bq1|@Siz=KpVi@w z`lQ7jNw)SwIkQBDN|--?rk6P5_mq!ug*cD%|cTinmM&w`(4_G^+S4c910@HbkI#MFOe~Z zuKOEkC zs%((na+Vzzzk^;>5|1IRl<8mc*mSucVHXWfL2q)+ci`U*?sl(p9zK1_@IxoXrKKBu2i!BJ$*m!SHpr#4dj8?@62vlWC?W87F+*sP_}L{t_t66i!ets2{=7F~1* zn{K1xz94u>9^*W#?+)2>8{>KNiOaK!eVYQ~F{i-lE-CgZx98{@I{~_7YImmZc0$7q z)~R4sd}4g$wi~LdzHN=KxHxjaP927R{A6%_yM-ab`svT+*Sq;J|?9N-Zh6^`AB#*c@fCV`ll`Upv3)ETt4G{ z)rbDqp2+Z-@n^pTi@suAcK&qmTywxV3u5tb@5%iXXH3tC#F5(#CfPH0bxquTi`82u zHte(WZyWeu+b#GTpT5B5Ta+n06YKUJ%4B~!RO)#-n3?Z-(%kvb4`3#|GHuDDVqN~5 zHT%#jwu*q-&Ccgl)|<+1FnyQZX~m(URg2|6foEN|7$F|LfDChxCb6C6#Xa$?+#rC| zTM&iMcq5O}Maq%>_IdXV^{;)qR6{Gib7ERcu)L$XW*n#cgFV4|T9Nj{rUbrzCd!&?^r5Phl3g43 zTLQQ>3)(XOw_9i z1UmnHNIek%Sm{>}`vBU4$i9t{h-&kGepF}oCm|RxagZGFY*SB825(?JFSGv%%3=P2 z&ns?7*aJ($2?6D~XP0Pu!m?`;RGIA!xPSwyqv3?4Yh9;X4g*P#AkQb#hL`qQL6Sci zU5LoUO)BD`tIT5FZ+E~d$`+3Zi?=6LaLe=DcWt2$9xL!E>XEA)zeVbDUEF$y>kZC5 zBI?WnJibIUFVOBkAxRjQ1PV}v zPHvq|MTs&o-iW~ecmc}fbXYMRu+^;Tu;&)o4v9{QB*Z;C9X7oToMXMK0(0zVCY-gp}M!Wa9ej@VZriLbvc%I#yv6v7;p%gXlK zyT^%73bI?pB|@UA+Vyc-qeTMIYx5|HtqJMLe+wCXYaY~&v8<{#^Z@#;%ty5yeqk`z z?90OWYj$$1`qjO%|*u$kkbH}!(}Sw!|-!J$Y!|1zAep#@M?W>Se} zlZ&prNNl!qp^I6mQCFQ5nQOUNLNY2wlmkgDt9$O(_K(qzZ|2nn1UVNmT;1I{9kxid z%U54rKt4YT{D}w6{Pi$*_bUIyf=E$4Ye-t!oQ|Iy3k3zm655E@01NP(n$pc5;mCukehnttpPLgl?s@ly+_* zRh!&SzT(<;?ozMY%=ffQ8^2Qv38$@^fT4&6?VxBiNO0zGf{6E7(~E51P0hJ6tIDMK zJfHj*Q4V&i&Yj*j=HE+jg~@X-yLAu$q|1+`u@zKAQZJ_nXL-DqInk}4HEw>mNo+BF z%i6_TPU(HkJmY3V?vmA=TDO<>0PW&5WsR*dvqf?MjVG(ee}ikG2{-JH6hmo`)P-g6 zO3UEoq&Ewws&KGS7~cDOcRMNAw?RU&B3#_C_x5v+Gh>!AIfN zB$N{;hIRi=7#UL_qI*o$s&pv-0yiI`_o^Tyw1vn-%v;H*-OjCoMCxZ~Fjo=^03<0F z?CT$+dXL`J>GoZNEL)s1T)r9>HnD76&f0y~Ax9k%)_e5WE7QwfJDMvHC~B90%Is{_ zey2^FXz(Ii*&oG4>_*9?obi|5`yf;HTyE{jG%fHQW_qBoS z4`|t`7mD1ZL?TX9WQZe|Uq|Mpb!E~fLFZZBbsrcf8*y*wj=W8J#BLOGrB&$?Zh{Eq z63Ns&MIf@2Gq7a*BI|At1>{{-e!0F2B>085)5bm@EFiTWf?rr-0y=lwu~IsH~%d{%P@G zbD{Y_wmB0D>sogLXCryX1&Q^4N?(he8jr3^SDEZp8z0ra!K7Yb>L5g3UN4O8_E<$6 zXB?pRqyT*1g@`b$URBAda;DQ}=<;AGSzqBti>+nUE=07{s;eueJoju>) zq29SLa%=j^!l*+XS=MkNFp+F^wp&rb86-wyCM%ZB4x{)l(wOL;|K2=6P=FIy5D}74 zgQp!)Oj>>~gTx@e9efGLKY!@3Z->mMI<^jcHia)K>Po;;L!)2f$f)8~kvBY`nU!60 z!CgqId!}!Jl!!)SD%^n6_Z@rAYYJNiTglIWygU>+5^7w?6;AH)B9`sLV4<% z6TUhWHFkUt40F&#i<*e#h8o;pU7-u&cJe!SX!NJKhrtdpEKc{k zI)*sox`_(!-25))bO}`Xj_T2gBkJ>AjdekzFpZE;w6Mp{T&u7)Q_f+li%R3j; z=*lO;XfJY4@;eZ3J6jk>R~8TR$~4x_w3oyF8_#HWylV+rXu?aB9ZcGEc6FJe-k#{x zE1!CkYILW!RU4k{#H{6{wsRCu@Ad?A`1GuIH?TMG;A=53dH_ssX^=)L1(`7EKRF@E zg#?{ji8R0<`kjQ{G>H|_p*1lUZv7BDw(dXlVpMH9gt=LhyF+{MP+L9<*i4J z*^~e#cV>mDFq`tH0@DL9J(?vNq>ZapHglSp>&Vy6m73layl1-VooWe4!GYt4JvYv^ zy=;gcWxWWuZr9Wr)bAj=Gzz-&c~>XCQ9y@i1OjeOUzB;ms#Ulw=GRA2zf2D~6An9@ zJf0RHL;@cpzD_l-n>&_Xo>!IKce$q&g4euYEBC&x{$_WZX8ES!LyWqS(p3py$NgdO z>_KDxhyE6+U$@ROFYjlD4|o;#C7t?YdtY}$E=uU=4$xPtt>v8K&bX;jm5sS`&W3ES zIK1T#(Xc5Hy0P@T-i1CDGUKRsJN#>S(E(~QaG~8R@KR&@B^6a~48Mz)zx)R}X$d(2 zr|o_Fub9bu@o1AogWzl(QE`?Z9daB6=hh5b>3cN|A1&^l8c5><$@!+6%8<_aPo$pb zj~_)CFJ8CL=fc};t=+z*galD?XyZm#5!@2P7?}*F?i2J=|rs4y^ zah12xZ?q_s{l(En4`+XV)4F>;oP}}2@50TF9!RO!A~v(39#GO zB##ulINd)m@o`N0fUdaf)1@8@5sw)sZU}5Q{!|JCRnk+GpZ_(lPBJ^?>mA<>*5-HI z9j)Y!D_2-0e*l}GX&G60Sk2E5n>q%oxbNNJ*w*S=$@XzDRlv6B8(@;ztFEg zu-Arn=~&tXEhUK`yu=|NP^sYt*?f`&W|&N;o-B zP9??oNild&iS!RE)yn#b+m;>%P9XnpdvP(1Vg$?FuK{+25>NVz%=hh{rqFtp3Knse zuDlv_?zC>H>+;m#o1InIH8?`OYd`aI;Rmo25O(we=EeswQchK72!HX_o{MkZ-kU*q zo$=#{VuwE(JzD$BXK|Yw8UDsupcZ$t`sWZZW&sn?$24vfG_mxBbGc)Y{vYK+6RdLZ z)w^;6zl3vcQv;inE*C=ty2Y*&qw;F#Vfm zc7)oz?zXAvpqzdygr z15A0v(s8HA4w<>9&XT|_CzpmS5}7X?&2HB_SHlFBbpRa01$Zz3(?6kAi_<|2!thg` zR^StQF*e#fUItuk^pEBJ0OS@o&9@l&4fB&&KC0c95M{_4P*H_Gc{`??;aOg4D9wL(#MAvTp>aGYg5%+=?)6!pYry#o9wOnB%K-3N zEZmQHq$ZJZ_zuXvz)GJ@HkVC@GL7|$8*~P2MIFVIZ>tFcD{#|^iTJ<}Cc5|x5G$_< zd9*%>dL|Rxo!d8Xx%;M{SHI4i^MCm3lCwKNTMMdG>SYR<@vG+>K zfCc?W*#$|KOXn5IVZftUKi+ZVaIuxTjP(7tWEfI*kH*EK7u~#v=XftqafPLg^}_Gc zsXCh(X4{D*>*wBM%pO~L>b`#jPzg5wnqyb&7Y$Esa4%b)w5jvkcuB;CK%QQBbM&q7 z+ix4=L&c|`m?F)6Dgj48QDQ`qqLWH zD0O|hi;nR~SemB$iJ`|rY2?;znLnhYrFri10iw;j?KOTwBJC*ZHNATEoHwq=1vxNi zeP_zW#idM_?@{KnH1B=-dAh0pD?sYe@EJbD&z*5ySE(8bJ$Kx8=JX<;MEOtni#s$c!fC|P#VomtT*bjGSNOE*=l$%px)$djq(~S?{|V1li0rT;^eyC3ntyB*lpQA_IOsbJR!L3wE7$J7#YbbH zz#I8zz5qE$=;2WhcAtur<+yW%(z`roQ!d{AoaeA0KF@mZnH~r>d|KV)ohzN)x4r8x z_Oi+gCu=xYls@HA6i&XdA*Htd`lqN%ywOZSu!d*)RhpRydfJcULir(^!WX!1!V@s9`cm%nz*D~wX#Y9v*% z1th(UFt5t`fc>G^XKJhoFw3VD#hni|ZtOh5@R?6Q-z59k-sQbfpagVJSzl6s&CE61 zv8P<4li};-CV6+y>)rO=f5+xrcR|aFMbE0wZsK*16A(>>bU1RgfZueXbbhDu!H2Zm zSx&-riQMptORPoQr7O4gv#Wsl>lt_KRXc0NwQa@|{*EBHS(}y>@s_MQLSj)oBrxw@ zN3H)WrpS!t>z6u#F(e882*nUejQco#=>Bdh;+4J(Gof7XeWZ9+cnl-;<+o!S!Qa>R zf9}eNwVNfGhb6XbC^{A!1-#az2ln3waT>Wg3=6?I3sbdzwlzLiGXlxp8Kn!Xts#9` zAGX?QR9kDD81>e4fDgL!uv_}0;qoK*Ne%DJ(H|6Qmad#QL>VJK@L%3)oMp{*InVQ8 z$H;rb=RXfn6Cprj4jg+J_lva3eXWGzn#0CdLXAU?Y>nXSry{ZFxkf9wWhwAj@z;89 zdXfUJO1ymjXjFDAyRAG3xIxaw>8+J;yKYs^S!2pG`wF>$DW#Y3yFpsgR~H^U+p9;- z=c-xSo6XNpP|pCJQ?_iM<%7*HcV2XoDcEkbt8tdZ$bOyeV*3>~n))yqN337Kwsxn+ zZMFcE?Dkm@qAVtdt%my&T3QrBE}RXN+1nlRoi}4$Xx>}1vbLW`_#d0yzH0WR(SAa> znHUQ@dpW9)kbE=}6iGbN;j7<&$)&CSTak2lrgDF%SFTN>L38?P_RfnpnIhgFmM9 zMbCvKN?Tq*9Z!xO&LaF-5h!3`E39APYTl1639E*N{M>BvNf39t%d1oP8`wzA)~fB= zOr4UFlQr8k6YuczJbeEA*dHd(aaKdi?i=$O<0@neJhEf*Gmna)$HP<6i!=)mmrv_2 z&2C+;v8X;^y14!7&*+)AlHI9`8d=|h3EJzoJ@N}XwW6M`2&w?3q5A8!cfBXYFE@Ea zPF+Y*F&i6G8J<$esyL%>B4lkZH@ENqI=`thWqnfe0GaZYFg_QSE;Rb6$>`}7Zb=uq z-wyXxYS|BY_N3`(WpjROH!QSaPFL-kebCP(NLu(SOqVGstHrK|oE5Zl$jdo*wG^ydk6`iheo ze3sPCGSAHJXn&Ip&Uxqo0q|mN8`K`$z?}{vLx*aXYhBb+=i7Y>0CgA!Lhdk1r^|fg zpBf>KUE#f77#PP|D|a(Ga68@hyZ?zTUv&4qB})Z=chfqS(Cd=3O2D(GK>32hs{hTk z-5yH9v~AelgUI&&dcQ}EFE4ILKCBdK3JvgRr3I)SwCEa~iQ=R5N*Pe%i zcAsxQzRYljQ>C-RU)V=)ocKrrpN-ND%3svuqRo_b`?pyCwtS?TDD z+zoZ%6F%u+Cz{uR35`+&8qJa(Z3d4y3(sebOuJ zdjnx$sE2g(kJ4e+_ifH2?}STbZ$X(PX$C}kfyW~fNF?`PcWWMQA*v|4 zD=)>^S~{Gapj1dZWA+wJJ@0oUJI$&e^in^3V?F5MOyiSJ=Hh5S@MIrTWI|kee>}=! zy}9|SnXZOmKEvq|_2UmrHcD;55ti$^tYBDIyyp3t3W^_gI&qrr?J9-+-e(6zRdksx z&^Kl+Q5|&_rYu`a$IxP64w< zJI44+V^8VlVYk#Av_;Al3OzkNS6BDJ!NDKHJX)S$bJfAFrCjtKLQx4UP~CUk47hED zEFT_$V~w6K9keI}j`}T7GL}x+La`(=|1gCjU@FtSgviYMVQ!jfceNcbsHt;@n(ExXwyEBHcsyD zq_3mP2_xEgPnzC_5e6x+AXCX1_*F2&IN(9A|Se5B?& z_4$?YhUf%TXjN&#`bx!vF)QB{J$e3Cw`YTM56*|AUS*1Gw27Zjl%z8p+Db2C9~^mW zE^N}-*YfPeX?RX%(8ED3L`OWS!d*iUo$3GNUT0co+ z6?%EUY}O#2R=%En_tVn?$vr)*jCtGi#pXV*jiXwEQe|#(FoyU*hKXUPBE;ge_>KQ7 zlpg%Kh2|~M5XlHe!nP?da^vT=2pzE2uR)ZDAtnB?9WeZqP+q95PEXr^Erl`S=O7;>Q|%SPA9GjUQ9?A0$=96==l@>CLPTaK~ohjx_a8hx@*r`_hyd zXqo0?ulxGgAA<0i$II+?stZ}}ueT9eUVR1!;zW`+$KZ<)@zW_xT%$MdJ}?~fg5kKD z34){_8LfF&c#IDx$L>3B-AX@+hM36joxR)DeZ4y({eBCA^c&*kw9p>oY}uE#G%7v1 zO${UA3+ueZVsG5gexZGH@A6qslh*U(kCNB%$REiaTU#n7Y%Wcq4!B>;xLz;k)6z6Z z`L+h}KUq8ORG=1e>!Nx25}tmmw%_!dQF5|K=zYMxFsG(2ddhs<6D%eiQEXz!n|08= zsVdb|p3XnkRItPF2zJHDdsgkcF?f_0R@OR4m3bd?IqUF8P!=NdHtm^cuknJl?fWfg z-1w!??KGLRN& z>NkBhS>3FT+-|*-uiV#o4%9`bAIRMN{iDGF$a+*_C4V;IL#f6=s*bh4#f6JDHAhXK3w0WKdj8h*0MH#J zJ|jFOX=_5>uRDJ*yBYbYzv})`z=_RN**SiOpMd3k%=?0#HPdRB2_jGED>{jKqu{&$ z`SNJaf1;BMXIcN~OLh2aAx{N_95X@$bE~ry64`CJlLc*BLQ<9OZw>r0SMbD^?dBQL zR8Jr3?fq?+PzH5Thf}>idlzkYbyIY^DR>z+BG1XvvKsQG=3K|_aMrOH@-GkEEQ{;o zHKb~}BXooQs(NPK=uhdUHfd5Vlirgiq!YiH%*4{Xa=6vDJ?r)+uZLa3%Z?pt=^xLQ z?{;L}(bm@f9G|SnacyolQOesp*rU~0Q&S#LZRLDJjTR!z#WC9Z0)t_gXyd zb$UWlIC}2IN;c5uH4j~P2LYO%^%bgT5B|(?ETc@Cp9%`p>Bqr2Q@QYVct$(=r z|Jjg#wy*hcEu0^Og_Fud9-|>E|%m1(*iMm|=p0sCpR-CzU z@cB{Zg0s{mzy4Z-2zeOa1x2=&*POJGF7?F`LvC*D0zSlJufB8$WcL%@RbYblpKtrn zeHtXWfeB9SU9(`6&vVM4UC$IH%%Ak*bQzB`A4yGx7zv%pyh_J8$NDH+rfcCUb;!|- z*OLb$N0DEDeoZ+%DS@{=26kqykZ4DrwFKP@Ye`SCY?#uY{68K?24QkWQc{w3oh_eO_N|AFO(B5Y)v1jG z`^_RRve8_-P;5~z{iSqWd2Bv1bo1eR)%Zit-4vNmKGyu45+&JYSb_PBTj)YQXSBfC zFKhk8?icYYrltQqQGDL&?qFGnkCc59(GfVkc18B4TzX{x8>X_qs7v4P{X&3lzT4Yy zV0XKNVatB}9m_|<#QckA-$9fg?It{MtkN<%Gf}5gPYYvmtx{;sYZrl|7*`YHI z@#)&-u#w_t05_v1h2N;>+pFaW9{O*q>hCqCBLp0FdEW!qOK3)`u@| zZp5aR3YtW5n7`#SPc`4K!{a+R6@n9OKbr>-eC1faFQyHn!ZvN!7=ST0l zb3uHv=LJ1dnL9smb`DP{7&$18%vEfJovekur!{nNJJlw3<=#I-^%=Tx%MR+( z|Mj7zKicxN?h=j*V^hqg88g4!7QLsQWg*qsj8@jkP;xOSDs&N0v%F zt+r(Te%hO+Vv^zhCzM|0`Mzt`9I2E3C8nrt;6g1jrRB7=E`Od`9lF`mZnR@7+0>8u~sR z8u9=9*C|1LsecY@J@vms_Fui5|EEqmHwD9ghBihy`*?o}l{Ur#lYbJvkU$a06$3eHkKKfSKIHt7b1*Q47xpe8z8H{7j;jWRO-X>_fy`k~c0 z7W^Q;Y*W+W4?2=qflkT9N{Xf-57w6;E$py4ecVYvr9%#fATw)jw5w~H5?;2SGJ|t9 zbd<9zq?>FcvMu+Hn*2BE3Pjz_SGgk8Fbmz$vpX8`6&|slc&aWlmey(JWetu*cU4fS ze4)K~sp;&~r29hAT&l`CIy#^g$aYM3$rkmJ-+HB%T4xx&$WAn){jb5--NE%KG?#)J zS4&%6ezj0owtcv&*I;kQ;efM$cs3ost35PyQ z(u#aT{vYp#qEr zIEq_hsanTfBgg*7a@b*Djjaa^JmZXtPWH)u(2Dnbo}Vu8Vm!=X6Svr1o<67`b(W&h z9GxitBQ5fP*?lPRetp=0I5g*an(#S_pZ^ep^xJ&QT2id74By?|zcOwF9V9evOi7`? zW#aNw1be5?T)A0_jZ$RoP4`}#ulZNhjyktPDsSt{&Epb#HSL~unsV`olDsw@4*%&L` zfzJAGbH0=J(Vd&9I=K`yA1e34%*>2-+SvxaSUT2N??70DM(?bplWuqG@F5x1WZnAf zN+2s)zI)xqP(MFEIB2MLL$6{#u_r-}-K-<5^C1OG0&g>+DaB(T$m@3tg|TbVUn97s z>@mb&vzQEarr7)MGtbWUd;ThH{@kB~J&{QT2O-CGZnl@C=?m z_l3aNxz8OssKEIQtNFl@I>?lX3YTFUqv&%UGh%JALJ5);mX?dZqV%eLy$~BBm?3bRFlP*O5}*!P2Lf~dePAwvNogC7cO!_vkSPBVa}FM5csgH0&chH z_AH;nB#zDxT9L|DJL9{2hN=7#vkk2{QC7cK3~1z2uM>17aVzdLfsr~Xs-69c(oB{R zkGNRY^laizaPNxe8>kf4SoF>PJpa+f%RV!6Jj1bY)2fyqzbH|kmFuP*48~g3bNpH| zr;3V1{k4OcVM?o(s%mA~k}E5!*!oddxpL7B55A|_1*AHa>rX7(=sU7}I`ds;NsnIk zdD*SzgsC9A+$LO?N;K{5kROI3)D|)-qU8sjFqzU#5FbtK(Wq_xaeLTFW`$PLJtik0 z3$O2$D0^w?zl1ps1=RI+FsB524Gr!smsg^i@A1$K`c5BAgK{^vLo`79`0*=Ni>#8pr~)sje*&U4*2mMXFwITB?BgP5!SbZUcAYr^PWmd3Br z=qu`FuXU?sgtiQwx+l1^R({n%^V#ClEX8yBHPVj~qx0X!nPDtjVZ{4O)x-|Lh&O7j z>pUmbBghod-v>^_A|NJ_ZoS4Xf+`&n!$(_F&>BUlpHWY>oP^MpRxaIaPZ|LIMeP{uOhQ9v+CvdPB^&rr{jfTHd_B*?;O;88k>2zikbq9RtXV$o`sR_QN#z;ay`ono$3rVJACo!c z_<`HS!4=OL`^e=PwXL72|Bj)aRXRc_Ur+6 zxHBinY&nB7(SzerBc+pXMamEBr_P@ZGonSNaJ-XOSp7;Vpad^`*(8NH-YeNT;VtP2 zk=trXIYf)#w$=TG?KU=~Qy?Zk-Z$>?J9J(xk-ELm5vi`IsK^34-acOL7{jFb)TB4s z*xUD6<)$Q!rFxp?JWWe+&Q7_(o7RPNXcU5+q^D=s)Oa+wSoS4E)uj5^UrCV=1PAsgvD7&4YD`P=ernnynM7K0$$@Se*EMa*ec?nq?OL%+Q+ZOB40<^eu05vRv|qn=UUm$Ke{ndZ zv>;UMGsm63&yGSK_EX3uK!|}5B{Q=H0pwxtb@fFU2?go)!=p&=kW&pg4DH|2<=FN_ zxUzj#@*j4{LO5bLn5hN&wou-x5ntcOO_GOMESjh zo6lfMn8rJEEVn$`+_c*Fg5FQsdw-ccol`Rz{_Xx(Np?YRh1FbDrS8L$?%)!8980AE z6h5q;o{%=ORzV~gCf09f3Zoozj|2^)XQ`4!jy%-VPkNwM3DS0`kSA$H zB2BTU8@xwtmAaO)bf301uFyM84)8cwt4x(()$!2a`G;ITzk=OuFNR}aWfQ%I_@(VW<4_RIJj=c1+rQe|51n8ktzk$b6kWc>li9rSzq z5&$T)jFiRh;M5I^{FdrDpjLy+qRevK;S@+^{EiqoPVN@IOqb6~`0)YVykKwB#!~{d z+WiotKUF>lfx&0plJj53D$_fSI$2502aq$bt6XCi?B2%GPR~^uhP&b6;gXob8V+bP zY$9xCq9GxZh^*pk&O?CKYLb=sY&O>CC-GhP}k1cA~ztGaR z$8^S?CUVCu)SLT_XZBGL(ss7sQh07^-00{io$KcQxybCp+CVL)fs_HPlo&HLpE4#e zw7?{4~jYqQ-Iv zMiO2iE;bIUCw~r>)EcaMW8?DC`b}2<@MmyioUzK}S&eP))xx#N3*cSyemorQr0v)LE*ciLENu-09Kn>CbL~2mPop(hYsv=}6Wsc@Fy$uKX9^U{UN>Sc7{qc-*{bZByN zNG?8bdxF61G8^e&k5=*C8QNW2T9Im)R+aJ<0z&!j)Y-42muJJj^-m|v?iH=nu9f+Z z>8xxNxxerpIn6UXmhC?pgW(_B-|<9WxI~pmuAkTyU%+Y+u%#PN_ze(8N2lz&FLtn| zQ})58+ymuHWar-dZi=Ks%XE8=s2F$lx&^wyY0YU-?E22L`p90V4yNde*<&;alZ_+= z*r0^NkM|c3+jS6e+Y24Jxiu1~!xB>0yM_W*G`N$jSgaI5O_yX2 zV4E?rheOnUcc9K4@1$`>4lr)@5`#oAhtPfqTpE-2FSf%rW0IS={bT|!Y%8$YD@fj? zza-sZtr-(JafC?}u|S)#p1h$I)PrM<{Jqlrk5-5O8~X!NuX$*+!(wi@E-pzg3)-#`*9Z;>hUd{#`@j?~i80qJ35 zyTkHeYp%|v>nQ}WR0Xqs|1JlWn~V9S-9**+B%PtMh;c?~&m z<_SFB-(siqc**$J5*Yqefh;WE-`;aDh*N>=6fD)J^FKa&7gSZjGRX+W+j!(AREu8(FMw&QmK+Zh>#+z-jd1X~u zbGDMxFf>iA^|aQIV}ID`u{aJ{6&<{v;lyB67|Sz5Wt%mjYVAOYp!OqKJz~U-0+pr_ zb>?)AGxhiFo?8`+>NCy8P@xEq5uf|_X&6?A?iDa>uGV5C0wY!oQAq%NX+q3QL9GVR zv@+b;X6nma$!2!JV1>2eDp&Z7Jyooo^a;%+t0r_Dku8IH{9q&9j#SHR$m3w8?)1pz z6Myd%Gal}X-UZS4HeD*rA8y`a=<#}B9^=1^z@K0-?-wGGLW<0(6BQP(x8a;;(8N7O zIk;(A!t3sMObQM)>Tp;{YM%deJcT$`0SKb9aj8cH_Y-tDp%yF*RwItF5>3Q7hKHg< z{Rzx^j$sXYuzT4p$aQd|uqNS?}t$@$wHh9dP2}QcDO+*I~TDbcxC!XiZgQ z;Ii~Q(dYZ=!zO&Qpz-le{Lt)d8U?HO9csB<4fv`t1MmXj){^b}EaeEKjZv?3@728H z0g71^9z&qh#!isy?V~hREiEmUI?`K?PAqAF^|gxrl)W*E$H7}`*4JBX?=U)jwseSd z;ICQtB@V0xa2yU^7Qe0uBIIbHUi9P8cyln}5{12XLZx7!Hqyg8jAfb3Rsv)xLPbzl zb@J3&wN!_mtn<(lb98bST7FLWo@|_{-;0@&8a({|Rg_s$LRFFZ{;j7&u8Y&wV*ucu zcfG8fKcf?z>Z!ZR71=uuk&|Y|A9EQZyza^toL{+BNfFBxQG7lcu3hh~$sp~CkKbwM zhnCO$R`%+4!Fuo_gHw(K_4aJH@@h}ouM0jQvjR27Vt;Diq19rNm7#LkSFtjvDpLem zVd$_Q{t)vb&G2H5KXRiFp2 zGJNy3jXM*~BpSrmw~qq_LTj{sf@{Lag=A3hQI@V!hVFVpwR~RfOrF9?&jh*ZzGt^u znc{f74Hf=k(;w+@0DY+siHeJhGuW!e;UY=LiT(skPg?XLMXx&icq$$tb4x>0ARbqf zPIM*XOLAcyctxgE@Q&*!y@MLu0KdSBr@UzAHc``@=waXty)q6XF}eP3Y~ILCceYMS z%D3Sq&Y(yq0mhAnhK7eB$YU)5!s?hXAZ{Ax_DYcI01V7D3rf4JZ&>u$6nD*Jon2 z(#S{UNs9kd<%K7&4;-4fT48HqJT-1PKF_L>pJ6h)_t&eqc&^y261<0}P?eMmj1=~K zI_Hhk?5M};0U^@I>gtnS!D}ZWn^2w1I=v#~9S5oC#!T(Y*>0qWBoxhj{M37bof;L8 zUSfXlQ*9VwYgr#(GO<*qkAxgkDdwzvIAf&SkskkD#IoaTQ1JI441ym#K6rs-q;|9c z4nF!N2B{av)*iqcH>O>1$aI1&;#D8f#RBi=M@aR!?0rm*E8nh1sB4*-y(lWqVNeXa z8FleG7YB5+7T5O>v$wyGE_6X94P-u9O0@e!35R~Jps=yA;k7uRNRis`D*1IIQ0Qwq z0_B&SCGpc9s4s*~*zdQ^CAph5C>B|4wFR~Q!b#)L#4Ae<0q(@7g+O~t@uT@@Ru1^X%1_wc1apG(!29@P*p;7w2KC3eB z8HGh#Vn?>9iEC1%^nLL9wi?SA^Hp4X6XEEwp6)nCtSVe|9bv4T`6R0`o1J-T#X4F$ zzJ1l(+=_uZEjIW}ZmvH%izY-YXS;vGO2*aQJMCq1IEvuamF$ivYbjp#b#%HrBP-3M zWsjYnBW4UX{~l;AR?O4Z++0@nYDK#W>W!4(`Xbgxt8Ub+R90j<_Kf-kVLV27Y;o9@ z8}6Cc)n9v93(^R$)_{Ohc@bKd65#`j-sI%fnjL&bMcR!M**PA|z3)6;%o-gJC=I_t zT|V@&3sMDc;Bm4yQU1C+Kq#Js$KxVG1v>$`=REk48{KY9EO$V)UA#_cHbVHH1k~x< zP1g!B)*Rxhaic{jf6Ds({r%I1K3uAWeSWJextjj7-tqc&vyGB#qb103Av0mnocdu$ z<4r~hJ7r7EZ`M}@V>0mpOhTq@ED-z)7mMeC@}cp&)Mqy!mTK@_eR+GGM%)JWS9bcr zBe2fI?IvS9NSlOzMcqWxzZcf)#WbG+l~28pH~!7|A_vR8Br!clykXsXGKy(+&>c#6 zr#R%f)iaDtg9o3r_SeN7NtED2ig8WgE177Ft9K z*fKa61rcQ>KC~r#@8k*NAGuRL=V|3~L91;i;FNtnQ(qQd>gx{;4#GqG5MPWnzE$>0 z!5W5MV1xP!`uI7aT}$qE29E!D0hp0%8+lwx6lYoR89!L$4k7-lLy7zAxXGjGE0PDF zeKF+@yWxpATaD$c>+0)M&07PC&MUccRWl3rjMuE~?0Th9xHJIXelth^wFG|0Zgys? z;PB~(xxR}?qC#mxK#9fxHIX<|EjJG0s+0?=5- zwuynP9!G7>4Cg5?-biBf5X@>*fq&_j0~9aauHVU~N3%=rg1XmGGCAxQqBKq%-^?6O zhbWmX+_I6e??BVt7X?CllorH+(0!OiJ&V5FtEU-tLVFeY zCh5i8X{$9QmU?cFQ|CXRhc_eyWYvo{Y7hX(#I$duavohm`a9S--&(pS=gWg%Klpsj=QQF6a&5MUR`luw+@d@Fl^MXx?o*80 zr(CB=Vh}zKSIn^=OyGca_#q}Xx1~1yZnvTiRz=q#Vqh*ub8L9Xl%M?36&rT{Bq0W@ zsq6;s4Ua49GQ*zB>i|I26|pz1oyQ)5&`q2^2(-vKi6G)@HST6>^5~pVoO;u6*b(LCEKg9qrnv9P5gnp!jQ0_NpE`GG`udRT0da*Ku4wIW z#99rdZoupV1+T7(Kb2ZwQ=$g!g^iK0hdK>!Ri^mKi~C{QcZ*9bC>gFKBt>D;w5c3> zZ;nsT|C~HJ(UP#&2FPQ7?e++`RZ(U?4ev2~Wvl65H2OwKy${AEL1I}hvP_>Ddk)wW zABRoYtKao8Q}sumc%9qkO1c1CC=$H0`#q4_LPcLcn3^%p1u4f}GwVJT;Dt$ZQS-+b zVwK?rgiO|@xgbg{f%uBw#SPBWWgTdK%d|u!Y>v|JbW)K8;6x++c1tvM?!Mkj8u5FW zk?hbU2HRgx2oKa4N#*r-eD3YhZ(VAv^sR^=OPs+k6*pl0PwV_00@itxn@Qba{$o}=5lnGWbZIF& zIn}!|6>PB)n>6}KT0lm4aH(Wl zb@lOjF<|qk=$+b~tnNEL0X;Oh$bw%IgQmo50|xX{=-pUb;&$qpcXIl%5>?rlJWI_Q z)Ir$&g#=M%uLoU4c08iPfG(8G7UBoxiB2v)G5iGWCfh8tQ6ravUZ7SZYXsY+6D$7C z&o5=0k_pU{LLMj^U{BfDGVENZNskz=j0=W`^mcypNP+i-#AjJ9)zdIA4m$Sl4g(Hf z*+X62aJ%5`j8E56rICxulcp0@5U|9}AddE3$x~XOOa??swLXh-c9ToV*&rzv-4v4& z$n78?+xcVZ!Mt?R6v(x2&l<)`0BYvQ4d@w4xY{T(ofuQ&nnmb*zG8%)K%~%w)CatD z-abdim6!9%gZ7&8zlaLBIgn*smf1o$pp%nREgTkh20P*gX7}~ z{QA|qLGR(_qzM-|he|yEjET}RJXBzn@*-!a4uV)EDlUp{yKW@C4AJ7kriyX?tuM|D zHMnby!VZ%vQAdtl`jc8rl6>Sc4`2-~h@a^tpalyWrm6yhLEISDp%yvj-@)$3{87q% zSan%1HBz9v9ed0t%R821LOKy%&uSGpt}%)>;bw^oKEbQtKUtP<>qAsAXF}aQQ&i(g z!iJ#*sdk_=Rc)QN%1f8z`59-jV${qP8&UiaW7j;_S4sSxvs*k912h-m<3*tTWVLER ze3ZS@jFMG#j_)Qr=#~zxeG^MAuIC|(pWudvKqOfekzOes4rh!lMiu@FCe;ees24N1 z+K+wBE#K^hJnb-y%*L!#@i^G4ga4`kchnn~Ztqe;fedPTwKQ67d$frxU=9x!%RU@G zw2~u!rb%WfU)eDxSE&D@u#0E3H?sCX4eo!GM$K2|LH1OXhalYCTW+m!UAeil4)d9m zj^^NBXy5$#ZofGYgGBBj&s)g(uW$ob!9lwk<}$0C45fV&KcJ^^;SPShuoH=NCAg@B z1cm_mIyG-;06#;VfPUOFcE$Z57?_H<#_1ykI+!nKsC$qO$B$=mK8P_1 z{9q*PHWv5>`T+Up+%}*{<(2a(4!kmHjt9lp(= z7DtK!s$Sm#AxkD|j;ayFtmvJpl4BpRJf0s`MEaUH;IR6ow=xyOXR}>6JCXiGTqBm+ z9~R$n=3iLyJMRP%wiCS$u_XEaZe?B7r+=;Ei=9GslKD==@fxD920<|P$%>o*HOEse znybMFAWQ13ThW<@A3&g3EThL!H~^Jg+JZmD-;Wv0~Y`)42vY1h|ltxWhUgufi9cQ=G* z71s$tHOFJ2L52)fI?Hz|BLT6R0fkqsjV|REl+0#J>Q~!#dI*w?;ENx0n(`fdz*k?x z@{i*wo#qs9Rdz-O8^t;TMz)9m!qXV#tJQ}%_<9-?1&7NWa&Zt4sVoNOAM?aGL zrLNd1hnlgWp=h_YF+3ybcoGTj?)bRf*u1r!3OQ2c^*dx@A0QwTG>fw%;J#kZmqxBMv67s)701s&sq)-il!b z8yKkurfbUiW3x^3iMxdc+#HpR-eWa6z(xVSt5IRgkoN;5X#^CAU4fgZ`X*4FJj5g3 z03l+`Rtd;kfx++LKv`zv*cHys?C&-(%!{EHu`oZb-CkK;?fS|YS^)@j!=wh3KjAgF zeK0C|&AwhQiWwSNiKv{R@GqV^4*Px=3EAyH=%j1c=H*AK`dZ; zHR9V;`bQ%kf(Tbgm>)U$!(?xW+hW%TsRXw@-b4-oe?!LIXv?N)sY@6C@d$3g@zPjt z9pd5%>#uR4Ko32yX6L#TpUox-5?&AjN6Bor85P?T7%bGG0JaSy6B61LFdRYVIJcVY zlRm|eLN238pv4HI@knK`+?v+($+{_z!-~>O+klnS>UWw|<&oDN0)$R`xA&&lKWQd! z{Ff87@f5K7K+CizS898cC2}(}%~-W7&G;?TKj*L)sC>z;NdbnIq$=iPqi2R?-TqzoYoI!H0VkTg2g1L+%Enz z#QnK$-zdjb|I<+GIpIoUZG*kJdhMT!e!o^xWc%lv|MfZl+noGA)(Y;a_vVfDQw6OB zjri@az;!E1#TqA{ac?;L?@`tW1n%rp0nCYhzgozDtXSk^?23|cp;%*~Va}#kxJXGU z5o)P>vNN)J+ilmq7KD4(u2LgfY@Dc}9O?oM& zCqalEQa2Y2JcqX5y1iPiNbmMD!KR(+NJN6m6tl-=DfFQFu_{*>YrHhwbZiL`Glq8x zYH%Q@7LY~)HUP`b%*?D;XZ>8k~_8HS+Pb z=t&;KV2iubP^$J|iWL4ejY61S2&;yP7KNM-vyETokzjZ_5e6>rXPZRF3rIW@47t9;lK*{7mnqGlD)(!J7|%8w~q~Wb0^g1x-PgY9eiFpoyS{>kS>JZ zQa738zS6N-ELnkBq?7nR+CQhvjJH_9UjtMM?8EYjG-HFM~D={c?M?{c-=}pzMU`VXeB^%nzB1tLR30n zCv`E+zxRNM#^>?Y3qb^cQ$L8q)hb3FxMKf*eNpPr)h=N~N#=e;Kd4~)7WW|U=c?$F z%%7Xbo+G|Y&1=Sr>gwvcMf&e6c6RQXlv=Rp?tB#%5n6TcDoPaGIw|v->er03X9&gH z7DUU+UbzzXP!=^H6ZYJF=~kGpL;j6?#*ODpQLV`5H}cy`{G=FeTzlm31(pAQs^ z6GGAC1eRIBvtMPkmJ@a{A+oaYGF<;CzITGL`-5nUg-EKoMRO_6LA=f{s^X+X4Gv}J zRkI3jE*AcK(E%B~U-*6N&{ms8Lq$a;v1Na6PsavksiWEJL(Ys1;HNb%LZn{)qbIoA zN*ik;i7D4np5TA>vbIx<&$<2}l3v7ibwA90Qe~~yvtQb&QFZF%S1{{>faTUg7vY1n z6m8S$OxDju8^}OI9j``0Qd6yGXOewfyMykdwXt>HzcWVQE*|oqIeTV%H7L#1i|%1H z@L8aLP=?CsCU+C!Vq­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

  • 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